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/CPZ/TubeSpring.txt
1478 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Tube Spring 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.value0 : object.timer
13
private alias object.value1 : object.springPower
14
15
// Player Aliases
16
private alias object.state : player.state
17
private alias object.xvel : player.xvel
18
private alias object.yvel : player.yvel
19
private alias object.speed : player.speed
20
private alias object.gravity : player.gravity
21
private alias object.animation : player.animation
22
private alias object.collisionPlane : player.collisionPlane
23
private alias object.tileCollisions : player.tileCollisions
24
private alias object.value1 : player.timer
25
private alias object.value10 : player.animationReserve
26
private alias object.value17 : debugMode.currentSelection
27
private alias object.value25 : player.gravityStrength
28
29
30
// ========================
31
// Function Declarations
32
// ========================
33
34
reserve function TubeSpring_DebugDraw
35
reserve function TubeSpring_DebugSpawn
36
37
38
// ========================
39
// Static Values
40
// ========================
41
42
private value TubeSpring_startDebugID = 0
43
44
45
// ========================
46
// Function Definitions
47
// ========================
48
49
private function TubeSpring_DebugDraw
50
DrawSprite(0)
51
end function
52
53
54
private function TubeSpring_DebugSpawn
55
CreateTempObject(TypeName[Tube Spring], 0, object.xpos, object.ypos)
56
57
temp0 = debugMode[0].currentSelection
58
temp0 -= TubeSpring_startDebugID
59
if temp0 == 0
60
object[tempObjectPos].springPower = -0x100000
61
else
62
object[tempObjectPos].springPower = -0xA8000
63
end if
64
object[tempObjectPos].drawOrder = 5
65
end function
66
67
68
// ========================
69
// Events
70
// ========================
71
72
event ObjectUpdate
73
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
74
BoxCollisionTest(C_TOUCH, object.entityPos, -16, 0, 16, 48, currentPlayer, 1, 1, 1, 1)
75
if checkResult == true
76
if object.animation == 0
77
object.timer = 0
78
end if
79
object.animation = 1
80
end if
81
82
if object.animation == 0
83
BoxCollisionTest(C_SOLID, object.entityPos, -14, -8, 14, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
84
if checkResult == COL_TOP
85
player[currentPlayer].animationReserve = ANI_WALKING
86
if player[currentPlayer].animation == ANI_RUNNING
87
player[currentPlayer].animationReserve = ANI_RUNNING
88
end if
89
90
if player[currentPlayer].animation == ANI_PEELOUT
91
player[currentPlayer].animationReserve = ANI_PEELOUT
92
end if
93
94
if object.animation == 0
95
object.timer = 1
96
end if
97
98
#platform: USE_STANDALONE
99
player[currentPlayer].state = Player_State_Air
100
#endplatform
101
#platform: USE_ORIGINS
102
player[currentPlayer].state = Player_State_Air_NoDropDash
103
#endplatform
104
player[currentPlayer].tileCollisions = true
105
player[currentPlayer].gravity = GRAVITY_AIR
106
player[currentPlayer].speed = player[currentPlayer].xvel
107
player[currentPlayer].yvel = object.springPower
108
player[currentPlayer].yvel -= player[currentPlayer].gravityStrength
109
110
GetBit(temp0, object[arrayPos0].propertyValue, 7)
111
if temp0 == true
112
player[currentPlayer].xvel = 0
113
end if
114
115
GetBit(temp0, object[arrayPos0].propertyValue, 0)
116
if temp0 == true
117
player[currentPlayer].animation = ANI_TWIRL
118
else
119
player[currentPlayer].animation = ANI_BOUNCING
120
end if
121
122
player[currentPlayer].timer = 0
123
124
GetBit(temp0, object[arrayPos0].propertyValue, 2)
125
if temp0 == true
126
player[currentPlayer].collisionPlane = 0
127
end if
128
129
GetBit(temp0, object[arrayPos0].propertyValue, 3)
130
if temp0 == true
131
player[currentPlayer].collisionPlane = 1
132
end if
133
134
PlaySfx(SfxName[Spring], false)
135
end if
136
end if
137
next
138
139
switch object.animation
140
case 0
141
if object.timer != 0
142
switch object.timer
143
case 0
144
case 2
145
case 3
146
object.frame = 0
147
break
148
149
case 1
150
object.frame = 1
151
break
152
153
case 4
154
case 5
155
case 6
156
case 7
157
case 8
158
case 9
159
object.frame = 2
160
break
161
end switch
162
163
object.timer++
164
if object.timer >= 10
165
object.timer = 0
166
end if
167
else
168
object.frame = 0
169
end if
170
break
171
172
case 1
173
if object.timer < 6
174
object.frame = 3
175
else
176
object.frame = 4
177
if object.timer == 23
178
object.timer = 0
179
object.animation = 2
180
end if
181
end if
182
object.timer++
183
break
184
185
case 2
186
object.frame = 3
187
object.timer++
188
if object.timer == 6
189
object.timer = 0
190
object.animation = 0
191
end if
192
break
193
194
end switch
195
end event
196
197
198
event ObjectDraw
199
DrawSprite(object.frame)
200
end event
201
202
203
event ObjectStartup
204
CheckCurrentStageFolder("Zone02")
205
if checkResult == true
206
LoadSpriteSheet("CPZ/Objects.gif")
207
SpriteFrame(-16, -16, 32, 16, 191, 1)
208
SpriteFrame(-16, -10, 32, 10, 191, 81)
209
SpriteFrame(-16, -32, 32, 32, 191, 92)
210
SpriteFrame(-16, -29, 32, 29, 191, 18)
211
SpriteFrame(-16, -32, 32, 32, 191, 48)
212
SpriteFrame(-16, -29, 32, 29, 191, 18)
213
else
214
LoadSpriteSheet("MBZ/Objects.gif")
215
SpriteFrame(-16, -16, 32, 16, 99, 377)
216
SpriteFrame(-16, -10, 32, 10, 99, 457)
217
SpriteFrame(-16, -32, 32, 32, 99, 468)
218
SpriteFrame(-16, -29, 32, 29, 99, 394)
219
SpriteFrame(-16, -32, 32, 32, 99, 424)
220
SpriteFrame(-16, -29, 32, 29, 99, 394)
221
end if
222
223
foreach (TypeName[Tube Spring], arrayPos0, ALL_ENTITIES)
224
GetBit(temp0, object[arrayPos0].propertyValue, 1)
225
if temp0 == 0
226
object[arrayPos0].springPower = -0x100000
227
else
228
object[arrayPos0].springPower = -0xA8000
229
end if
230
object[arrayPos0].drawOrder = 5
231
next
232
233
temp0 = 0
234
TubeSpring_startDebugID = DebugMode_ObjCount
235
while temp0 < 2
236
SetTableValue(TypeName[Tube Spring], DebugMode_ObjCount, DebugMode_TypesTable)
237
SetTableValue(TubeSpring_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
238
SetTableValue(TubeSpring_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
239
DebugMode_ObjCount++
240
temp0++
241
loop
242
end event
243
244
245
// ========================
246
// Editor Events
247
// ========================
248
249
event RSDKEdit
250
if editor.returnVariable == true
251
switch editor.variableID
252
case EDIT_VAR_PROPVAL // property value
253
checkResult = object.propertyValue
254
break
255
256
case 0 // useTwirlAnim
257
GetBit(checkResult, object.propertyValue, 0)
258
break
259
260
case 1 // springPower
261
GetBit(checkResult, object.propertyValue, 1)
262
break
263
264
case 2 // newCPlane
265
checkResult = object.propertyValue
266
checkResult >>= 2
267
checkResult %= 3
268
break
269
270
case 3 // killXVelocity
271
GetBit(checkResult, object.propertyValue, 7)
272
break
273
274
end switch
275
else
276
switch editor.variableID
277
case EDIT_VAR_PROPVAL // property value
278
object.propertyValue = editor.variableValue
279
break
280
281
case 0 // useTwirlAnim
282
CheckNotEqual(editor.variableValue, false)
283
SetBit(object.propertyValue, 0, checkResult)
284
break
285
286
case 1 // springPower
287
CheckNotEqual(editor.variableValue, false)
288
SetBit(object.propertyValue, 1, checkResult)
289
break
290
291
case 2 // newCPlane
292
SetBit(object.propertyValue, 2, false)
293
SetBit(object.propertyValue, 3, false)
294
295
editor.variableValue %= 3
296
editor.variableValue <<= 2
297
298
object.propertyValue |= editor.variableValue
299
break
300
301
case 3 // killXVelocity
302
CheckNotEqual(editor.variableValue, false)
303
SetBit(object.propertyValue, 7, checkResult)
304
break
305
306
end switch
307
end if
308
end event
309
310
311
event RSDKDraw
312
DrawSprite(0)
313
end event
314
315
316
event RSDKLoad
317
CheckCurrentStageFolder("Zone02")
318
if checkResult == true
319
LoadSpriteSheet("CPZ/Objects.gif")
320
SpriteFrame(-16, -16, 32, 16, 191, 1)
321
else
322
LoadSpriteSheet("MBZ/Objects.gif")
323
SpriteFrame(-16, -16, 32, 16, 99, 377)
324
end if
325
326
AddEditorVariable("useTwirlAnim")
327
SetActiveVariable("useTwirlAnim")
328
AddEnumVariable("false", false)
329
AddEnumVariable("true", true)
330
331
AddEditorVariable("springPower")
332
SetActiveVariable("springPower")
333
AddEnumVariable("Weak", false)
334
AddEnumVariable("Strong", true)
335
336
AddEditorVariable("newCPlane")
337
SetActiveVariable("newCPlane")
338
AddEnumVariable("Don't Set New Collision Plane", 0)
339
AddEnumVariable("Collision Plane A", 1)
340
AddEnumVariable("Collision Plane B", 2)
341
342
AddEditorVariable("killXVelocity")
343
SetActiveVariable("killXVelocity")
344
AddEnumVariable("false", false)
345
AddEnumVariable("true", true)
346
end event
347
348