Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-Sonic-2-2013-Script-Decompilation
Path: blob/master/Sonic 2/Scripts/CNZ/VPlunger.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: V Plunger Object
4
// Script Author: Christian Whitehead/Simon Thomley
5
// Unpacked by Rubberduckycooly's script unpacker
6
// ----------------------------------
7
8
// ========================
9
// Aliases
10
// ========================
11
12
private alias object.value1 : object.compression
13
private alias object.value2 : object.active
14
15
// Player Aliases
16
private alias object.state : player.state
17
private alias object.xpos : player.xpos
18
private alias object.ypos : player.ypos
19
private alias object.xvel : player.xvel
20
private alias object.yvel : player.yvel
21
private alias object.speed : player.speed
22
private alias object.gravity : player.gravity
23
private alias object.animation : player.animation
24
private alias object.frame : player.frame
25
private alias object.scrollTracking : player.scrollTracking
26
private alias object.collisionBottom : player.collisionBottom
27
private alias object.jumpHold : player.jumpHold
28
29
private alias object.value1 : player.timer
30
31
32
// ========================
33
// Function Declarations
34
// ========================
35
36
reserve function VPlunger_DebugDraw
37
reserve function VPlunger_DebugSpawn
38
39
40
// ========================
41
// Function Definitions
42
// ========================
43
44
private function VPlunger_DebugDraw
45
DrawSprite(5)
46
end function
47
48
49
private function VPlunger_DebugSpawn
50
CreateTempObject(TypeName[V Plunger], 0, object.xpos, object.ypos)
51
object[tempObjectPos].ypos &= 0xFFFF0000
52
object[tempObjectPos].inkEffect = INK_ALPHA
53
end function
54
55
56
// ========================
57
// Events
58
// ========================
59
60
event ObjectUpdate
61
if object.active == true
62
if object.compression < 0x210000
63
object.compression += 0x4000
64
end if
65
else
66
if object.compression > 0
67
object.compression -= 0x20000
68
if object.compression < 0
69
object.compression = 0
70
end if
71
else
72
object.priority = PRIORITY_BOUNDS
73
end if
74
end if
75
76
temp2 = object.active
77
object.active = false
78
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
79
CheckEqual(player[currentPlayer].state, Player_State_Death)
80
temp7 = checkResult
81
CheckEqual(player[currentPlayer].state, Player_State_GotHit)
82
temp7 |= checkResult
83
if temp7 == false
84
temp0 = object.compression
85
temp0 >>= 16
86
temp0 -= 28
87
BoxCollisionTest(C_SOLID, object.entityPos, -11, temp0, 11, 28, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
88
89
temp1 = temp0
90
temp0 -= 2
91
BoxCollisionTest(C_TOUCH, object.entityPos, -11, temp0, 11, temp1, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
92
if checkResult == true
93
player[currentPlayer].state = Player_State_Static
94
player[currentPlayer].gravity = 0
95
player[currentPlayer].scrollTracking = false
96
#platform: USE_STANDALONE
97
player[currentPlayer].animation = ANI_JUMPING
98
#endplatform
99
#platform: USE_ORIGINS
100
if player[currentPlayer].animation != ANI_JUMPING
101
player[currentPlayer].animation = ANI_JUMPING
102
player[currentPlayer].frame = 0
103
end if
104
player[currentPlayer].speed = 0
105
#endplatform
106
player[currentPlayer].xpos = object.xpos
107
player[currentPlayer].ypos = player[currentPlayer].collisionBottom
108
FlipSign(player[currentPlayer].ypos)
109
player[currentPlayer].ypos <<= 16
110
player[currentPlayer].ypos -= 0x1C0000
111
player[currentPlayer].ypos += object.compression
112
player[currentPlayer].ypos &= 0xFFFF0000
113
player[currentPlayer].ypos += object.ypos
114
player[currentPlayer].xvel = 0
115
player[currentPlayer].yvel = 1
116
object.active |= player[currentPlayer].jumpHold
117
end if
118
end if
119
next
120
121
if object.compression > 0x60000
122
if temp2 == true
123
if object.active == false
124
object.priority = PRIORITY_ACTIVE
125
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
126
CheckEqual(player[currentPlayer].state, Player_State_Death)
127
temp7 = checkResult
128
CheckEqual(player[currentPlayer].state, Player_State_GotHit)
129
temp7 |= checkResult
130
if temp7 == false
131
if player[currentPlayer].state == Player_State_Static
132
BoxCollisionTest(C_TOUCH, object.entityPos, -11, -28, 11, 28, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
133
if checkResult == true
134
#platform: USE_STANDALONE
135
player[currentPlayer].state = Player_State_Air
136
#endplatform
137
#platform: USE_ORIGINS
138
player[currentPlayer].state = Player_State_Air_NoDropDash
139
#endplatform
140
player[currentPlayer].gravity = 1
141
player[currentPlayer].timer = 0
142
player[currentPlayer].xvel = 0
143
player[currentPlayer].speed = 0
144
player[currentPlayer].yvel = object.compression
145
player[currentPlayer].yvel *= 3
146
player[currentPlayer].yvel >>= 2
147
FlipSign(player[currentPlayer].yvel)
148
PlaySfx(SfxName[Plunger], false)
149
end if
150
end if
151
end if
152
next
153
end if
154
end if
155
end if
156
157
// Fading for yellow plunger
158
temp0 = object.compression
159
temp0 >>= 15
160
object.angle += temp0
161
Sin(temp1, object.angle)
162
temp1 >>= 4
163
164
temp0 = object.compression
165
temp0 >>= 13
166
temp0 -= 64
167
temp0 += temp1
168
object.alpha = temp0
169
end event
170
171
172
event ObjectDraw
173
// Spring & Base
174
temp0 = object.compression
175
temp0 >>= 20
176
DrawSprite(temp0)
177
178
// Plunger (Red)
179
temp0 = -0x1C0000
180
temp0 += object.compression
181
temp0 += object.ypos
182
DrawSpriteXY(3, object.xpos, temp0)
183
184
// Plunger (Yellow)
185
DrawSpriteFX(4, FX_INK, object.xpos, temp0)
186
end event
187
188
189
event ObjectStartup
190
CheckCurrentStageFolder("Zone04")
191
if checkResult == true
192
LoadSpriteSheet("CNZ/Objects.gif")
193
SpriteFrame(-11, -12, 22, 40, 147, 50) // Spring & Base - #0
194
SpriteFrame(-11, 4, 22, 24, 147, 66) // Spring & Base (Shorter) - #1
195
SpriteFrame(-11, 20, 22, 8, 147, 82) // Base - #2
196
SpriteFrame(-11, 0, 22, 16, 147, 34) // Plunger (Red) - #3
197
SpriteFrame(-11, 0, 22, 16, 170, 34) // Plunger (Yellow) - #4
198
SpriteFrame(-11, -28, 22, 56, 147, 34) // Plunger (Full Sprite) - #5
199
else
200
LoadSpriteSheet("MBZ/Objects.gif")
201
SpriteFrame(-11, -12, 22, 40, 189, 354) // Spring & Base - #0
202
SpriteFrame(-11, 4, 22, 24, 189, 370) // Spring & Base (Shorter) - #1
203
SpriteFrame(-11, 20, 22, 8, 189, 386) // Base - #2
204
SpriteFrame(-11, 0, 22, 16, 189, 338) // Plunger (Red) - #3
205
SpriteFrame(-11, 0, 22, 16, 166, 338) // Plunger (Yellow) - #4
206
SpriteFrame(-11, -28, 22, 56, 189, 338) // Plunger (Full Sprite) - #5
207
end if
208
209
foreach (TypeName[V Plunger], arrayPos0, ALL_ENTITIES)
210
object[arrayPos0].inkEffect = INK_ALPHA
211
next
212
213
SetTableValue(TypeName[V Plunger], DebugMode_ObjCount, DebugMode_TypesTable)
214
SetTableValue(VPlunger_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
215
SetTableValue(VPlunger_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
216
DebugMode_ObjCount++
217
end event
218
219
220
// ========================
221
// Editor Events
222
// ========================
223
224
event RSDKDraw
225
DrawSprite(0)
226
end event
227
228
229
event RSDKLoad
230
CheckCurrentStageFolder("Zone04")
231
if checkResult == true
232
LoadSpriteSheet("CNZ/Objects.gif")
233
SpriteFrame(-11, -28, 22, 56, 147, 34) // Plunger (Full Sprite)
234
else
235
LoadSpriteSheet("MBZ/Objects.gif")
236
SpriteFrame(-11, -28, 22, 56, 189, 338) // Plunger (Full Sprite)
237
end if
238
239
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
240
end event
241
242