Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-Sonic-2-2013-Script-Decompilation
Path: blob/master/Sonic 1/Scripts/Global/YellowSpring.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Yellow 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.isPlatform
14
private alias object.value2 : object.extraVelocity
15
// [a whole lot of skipped values]
16
private alias object.value7 : object.enabledInAir
17
18
// Player aliases
19
private alias object.state : player.state
20
private alias object.direction : player.direction
21
private alias object.xvel : player.xvel
22
private alias object.yvel : player.yvel
23
private alias object.speed : player.speed
24
private alias object.angle : player.angle
25
private alias object.controlLock : player.controlLock
26
private alias object.pushing : player.pushing
27
private alias object.animation : player.animation
28
private alias object.animationSpeed : player.animationSpeed
29
private alias object.gravity : player.gravity
30
private alias object.collisionMode : player.collisionMode
31
private alias object.tileCollisions : player.tileCollisions
32
private alias object.value1 : player.timer
33
private alias object.value10 : player.animationReserve // Used by springs to store what animation will play after the bounce animation
34
private alias object.value17 : debugMode.currentSelection
35
36
// ========================
37
// Function Declarations
38
// ========================
39
40
reserve function YellowSpring_DebugDraw
41
reserve function YellowSpring_DebugSpawn
42
43
44
// ========================
45
// Static Values
46
// ========================
47
48
private value YellowSpring_startDebugID = 0
49
50
51
// ========================
52
// Function Definitions
53
// ========================
54
55
private function YellowSpring_DebugDraw
56
temp0 = debugMode[0].currentSelection
57
temp0 -= YellowSpring_startDebugID
58
DrawSprite(temp0)
59
temp0 += 4
60
DrawSprite(temp0)
61
end function
62
63
64
private function YellowSpring_DebugSpawn
65
temp0 = debugMode[0].currentSelection
66
temp0 -= YellowSpring_startDebugID
67
CreateTempObject(TypeName[Yellow Spring], temp0, object.xpos, object.ypos)
68
end function
69
70
71
// ========================
72
// Events
73
// ========================
74
75
event ObjectUpdate
76
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
77
switch object.propertyValue
78
case 0 // Up
79
temp0 = object.isPlatform
80
if player[currentPlayer].gravity == GRAVITY_AIR
81
temp0 = true
82
end if
83
84
if player[currentPlayer].collisionMode > CMODE_FLOOR
85
if player[currentPlayer].yvel < 0
86
temp0 = true
87
end if
88
end if
89
90
if temp0 == false
91
BoxCollisionTest(C_SOLID, object.entityPos, -14, -8, 14, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
92
93
BoxCollisionTest(C_TOUCH, object.entityPos, -14, -10, 14, -6, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
94
if checkResult == true
95
player[currentPlayer].animationReserve = ANI_WALKING
96
if player[currentPlayer].animation == ANI_RUNNING
97
player[currentPlayer].animationReserve = ANI_RUNNING
98
end if
99
100
if player[currentPlayer].animation == ANI_PEELOUT
101
player[currentPlayer].animationReserve = ANI_PEELOUT
102
end if
103
104
object.timer = 1
105
#platform: USE_STANDALONE
106
player[currentPlayer].state = Player_State_Air
107
#endplatform
108
#platform: USE_ORIGINS
109
player[currentPlayer].state = Player_State_Air_NoDropDash
110
#endplatform
111
player[currentPlayer].tileCollisions = true
112
player[currentPlayer].gravity = GRAVITY_AIR
113
player[currentPlayer].speed = player[currentPlayer].xvel
114
player[currentPlayer].yvel = -0xA0000
115
player[currentPlayer].yvel += object.extraVelocity
116
player[currentPlayer].animation = ANI_BOUNCING
117
player[currentPlayer].timer = 0
118
PlaySfx(SfxName[Spring], false)
119
end if
120
else
121
if player[currentPlayer].yvel >= 0
122
BoxCollisionTest(C_PLATFORM, object.entityPos, -14, -8, 14, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
123
124
BoxCollisionTest(C_TOUCH, object.entityPos, -14, -10, 14, -6, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
125
if checkResult == true
126
player[currentPlayer].animationReserve = ANI_WALKING
127
if player[currentPlayer].animation == ANI_RUNNING
128
player[currentPlayer].animationReserve = ANI_RUNNING
129
end if
130
if player[currentPlayer].animation == ANI_PEELOUT
131
player[currentPlayer].animationReserve = ANI_PEELOUT
132
end if
133
134
object.timer = 1
135
#platform: USE_STANDALONE
136
player[currentPlayer].state = Player_State_Air
137
#endplatform
138
#platform: USE_ORIGINS
139
player[currentPlayer].state = Player_State_Air_NoDropDash
140
#endplatform
141
player[currentPlayer].tileCollisions = true
142
player[currentPlayer].gravity = GRAVITY_AIR
143
player[currentPlayer].speed = player[currentPlayer].xvel
144
player[currentPlayer].yvel = -0xA0000
145
player[currentPlayer].yvel += object.extraVelocity
146
player[currentPlayer].animation = ANI_BOUNCING
147
player[currentPlayer].timer = 0
148
PlaySfx(SfxName[Spring], false)
149
end if
150
end if
151
end if
152
break
153
154
case 1 // Right
155
BoxCollisionTest(C_SOLID, object.entityPos, -8, -14, 8, 14, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
156
if player[currentPlayer].gravity == GRAVITY_GROUND
157
BoxCollisionTest(C_TOUCH, object.entityPos, 6, -14, 10, 14, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
158
if checkResult == true
159
object.timer = 1
160
player[currentPlayer].tileCollisions = true
161
player[currentPlayer].speed = 0xA0000
162
player[currentPlayer].collisionMode = CMODE_FLOOR
163
player[currentPlayer].pushing = 0
164
player[currentPlayer].direction = FACING_RIGHT
165
player[currentPlayer].controlLock = 15
166
PlaySfx(SfxName[Spring], false)
167
168
if player[currentPlayer].state != Player_State_Roll
169
player[currentPlayer].state = Player_State_Ground
170
player[currentPlayer].animation = ANI_RUNNING
171
end if
172
end if
173
else
174
if object.enabledInAir == true
175
BoxCollisionTest(C_TOUCH, object.entityPos, 6, -4, 11, 4, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
176
if checkResult == true
177
object.timer = 1
178
player[currentPlayer].tileCollisions = true
179
player[currentPlayer].speed = 0xA0000
180
player[currentPlayer].yvel = 0
181
player[currentPlayer].collisionMode = CMODE_FLOOR
182
player[currentPlayer].pushing = 0
183
player[currentPlayer].direction = FACING_RIGHT
184
player[currentPlayer].controlLock = 15
185
PlaySfx(SfxName[Spring], false)
186
187
if player[currentPlayer].state != Player_State_RollJump
188
player[currentPlayer].animation = ANI_BOUNCING
189
if player[currentPlayer].animation != ANI_JUMPING
190
player[currentPlayer].animation = ANI_RUNNING
191
end if
192
193
object.animationSpeed = object.speed
194
player[currentPlayer].animationSpeed *= 80
195
player[currentPlayer].animationSpeed /= 0x60000
196
end if
197
end if
198
end if
199
end if
200
break
201
202
case 2 // Left
203
BoxCollisionTest(C_SOLID, object.entityPos, -8, -14, 8, 14, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
204
if player[currentPlayer].gravity == GRAVITY_GROUND
205
BoxCollisionTest(C_TOUCH, object.entityPos, -10, -14, -6, 14, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
206
if checkResult == true
207
object.timer = 1
208
player[currentPlayer].tileCollisions = true
209
player[currentPlayer].speed = -0xA0000
210
player[currentPlayer].collisionMode = CMODE_FLOOR
211
player[currentPlayer].pushing = 0
212
player[currentPlayer].direction = FACING_LEFT
213
player[currentPlayer].controlLock = 15
214
PlaySfx(SfxName[Spring], false)
215
if player[currentPlayer].state != Player_State_Roll
216
player[currentPlayer].state = Player_State_Ground
217
player[currentPlayer].animation = ANI_RUNNING
218
end if
219
end if
220
else
221
if object.enabledInAir == true
222
BoxCollisionTest(C_TOUCH, object.entityPos, -10, -14, -6, 14, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
223
if checkResult == true
224
object.timer = 1
225
player[currentPlayer].tileCollisions = true
226
player[currentPlayer].speed = -0xA0000
227
player[currentPlayer].yvel = 0
228
player[currentPlayer].collisionMode = CMODE_FLOOR
229
player[currentPlayer].pushing = 0
230
player[currentPlayer].direction = FACING_LEFT
231
player[currentPlayer].controlLock = 15
232
PlaySfx(SfxName[Spring], false)
233
234
if player[currentPlayer].state != Player_State_RollJump
235
player[currentPlayer].animation = ANI_BOUNCING
236
if player[currentPlayer].animation != ANI_JUMPING
237
player[currentPlayer].animation = ANI_RUNNING
238
end if
239
240
object.animationSpeed = object.speed
241
FlipSign(player[currentPlayer].animationSpeed)
242
player[currentPlayer].animationSpeed *= 80
243
player[currentPlayer].animationSpeed /= 0x60000
244
end if
245
end if
246
end if
247
end if
248
break
249
250
case 3 // Down
251
BoxCollisionTest(C_SOLID, object.entityPos, -14, -8, 14, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
252
253
BoxCollisionTest(C_TOUCH, object.entityPos, -14, 6, 14, 10, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
254
if checkResult == true
255
object.timer = 1
256
if player[currentPlayer].collisionMode == CMODE_ROOF
257
FlipSign(player[currentPlayer].speed)
258
FlipSign(player[currentPlayer].xvel)
259
end if
260
261
#platform: USE_STANDALONE
262
player[currentPlayer].state = Player_State_Air
263
#endplatform
264
#platform: USE_ORIGINS
265
player[currentPlayer].state = Player_State_Air_NoDropDash
266
#endplatform
267
player[currentPlayer].tileCollisions = true
268
player[currentPlayer].gravity = GRAVITY_AIR
269
player[currentPlayer].speed = player[currentPlayer].xvel
270
player[currentPlayer].yvel = 0xA0000
271
player[currentPlayer].timer = 0
272
PlaySfx(SfxName[Spring], false)
273
end if
274
break
275
276
end switch
277
next
278
end event
279
280
281
event ObjectDraw
282
if object.timer == 0
283
temp1 = object.propertyValue
284
DrawSpriteFX(temp1, FX_FLIP, object.xpos, object.ypos)
285
286
temp1 += 4
287
DrawSpriteFX(temp1, FX_FLIP, object.xpos, object.ypos)
288
else
289
switch object.timer
290
case 2
291
case 3
292
temp1 = object.propertyValue
293
DrawSpriteFX(temp1, FX_FLIP, object.xpos, object.ypos)
294
temp1 += 4
295
DrawSpriteFX(temp1, FX_FLIP, object.xpos, object.ypos)
296
break
297
298
case 1
299
temp1 = object.propertyValue
300
temp1 += 8
301
DrawSpriteFX(temp1, FX_FLIP, object.xpos, object.ypos)
302
break
303
304
case 4
305
case 5
306
case 6
307
case 7
308
case 8
309
case 9
310
temp1 = object.propertyValue
311
temp1 += 12
312
DrawSpriteFX(temp1, FX_FLIP, object.xpos, object.ypos)
313
temp1 += 4
314
DrawSpriteFX(temp1, FX_FLIP, object.xpos, object.ypos)
315
break
316
317
end switch
318
319
object.timer++
320
if object.timer >= 10
321
object.timer = 0
322
end if
323
end if
324
end event
325
326
327
event ObjectStartup
328
LoadSpriteSheet("Global/Items.gif")
329
330
SpriteFrame(-16, 0, 32, 8, 84, 9)
331
SpriteFrame(-8, -16, 8, 32, 141, 26)
332
SpriteFrame(0, -16, 8, 32, 141, 59)
333
SpriteFrame(-16, -8, 32, 8, 150, 101)
334
335
SpriteFrame(-16, -8, 32, 8, 84, 18)
336
SpriteFrame(0, -16, 8, 32, 133, 26)
337
SpriteFrame(-8, -16, 8, 32, 149, 59)
338
SpriteFrame(-16, 0, 32, 8, 150, 92)
339
340
SpriteFrame(-16, 0, 32, 8, 84, 18)
341
SpriteFrame(-8, -16, 8, 32, 133, 26)
342
SpriteFrame(0, -16, 8, 32, 149, 59)
343
SpriteFrame(-16, -8, 32, 8, 150, 92)
344
345
SpriteFrame(-16, -16, 32, 24, 117, 1)
346
SpriteFrame(-8, -16, 24, 32, 158, 26)
347
SpriteFrame(-16, -16, 24, 32, 158, 59)
348
SpriteFrame(-16, -8, 32, 24, 150, 1)
349
350
SpriteFrame(-16, -24, 32, 8, 84, 18)
351
SpriteFrame(16, -16, 8, 32, 133, 26)
352
SpriteFrame(-24, -16, 8, 32, 149, 59)
353
SpriteFrame(-16, 16, 32, 8, 150, 92)
354
355
foreach (TypeName[Yellow Spring], arrayPos0, ALL_ENTITIES)
356
// for when you need some extra spring in your step
357
if object[arrayPos0].propertyValue == 5
358
object[arrayPos0].propertyValue = 0
359
object[arrayPos0].extraVelocity = -0x4000
360
end if
361
next
362
363
temp0 = 0
364
YellowSpring_startDebugID = DebugMode_ObjCount
365
while temp0 < 4
366
SetTableValue(TypeName[Yellow Spring], DebugMode_ObjCount, DebugMode_TypesTable)
367
SetTableValue(YellowSpring_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
368
SetTableValue(YellowSpring_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
369
DebugMode_ObjCount++
370
temp0++
371
loop
372
end event
373
374
375
// ========================
376
// Editor Events
377
// ========================
378
379
event RSDKEdit
380
if editor.returnVariable == true
381
switch editor.variableID
382
case EDIT_VAR_PROPVAL // property value
383
checkResult = object.propertyValue
384
break
385
386
case 0 // flipFlags
387
checkResult = object.propertyValue
388
break
389
390
end switch
391
else
392
switch editor.variableID
393
case EDIT_VAR_PROPVAL // property value
394
object.propertyValue = editor.variableValue
395
break
396
397
case 0 // flipFlags
398
object.propertyValue = editor.variableValue
399
break
400
401
end switch
402
end if
403
end event
404
405
406
event RSDKDraw
407
temp1 = object.propertyValue
408
if temp1 == 5
409
temp1 = 0
410
end if
411
412
DrawSpriteFX(temp1, FX_FLIP, object.xpos, object.ypos)
413
temp1 += 4
414
DrawSpriteFX(temp1, FX_FLIP, object.xpos, object.ypos)
415
end event
416
417
418
event RSDKLoad
419
LoadSpriteSheet("Global/Items.gif")
420
SpriteFrame(-16, 0, 32, 8, 84, 9)
421
SpriteFrame(-8, -16, 8, 32, 141, 26)
422
SpriteFrame(0, -16, 8, 32, 141, 59)
423
SpriteFrame(-16, -8, 32, 8, 150, 101)
424
425
SpriteFrame(-16, -8, 32, 8, 84, 18)
426
SpriteFrame(0, -16, 8, 32, 133, 26)
427
SpriteFrame(-8, -16, 8, 32, 149, 59)
428
SpriteFrame(-16, 0, 32, 8, 150, 92)
429
430
SpriteFrame(-16, 0, 32, 8, 84, 18)
431
SpriteFrame(-8, -16, 8, 32, 133, 26)
432
SpriteFrame(0, -16, 8, 32, 149, 59)
433
SpriteFrame(-16, -8, 32, 8, 150, 92)
434
435
SpriteFrame(-16, -16, 32, 24, 117, 1)
436
SpriteFrame(-8, -16, 24, 32, 158, 26)
437
SpriteFrame(-16, -16, 24, 32, 158, 59)
438
SpriteFrame(-16, -8, 32, 24, 150, 1)
439
440
SpriteFrame(-16, -24, 32, 8, 84, 18)
441
SpriteFrame(16, -16, 8, 32, 133, 26)
442
SpriteFrame(-24, -16, 8, 32, 149, 59)
443
SpriteFrame(-16, 16, 32, 8, 150, 92)
444
445
AddEditorVariable("flipFlag")
446
SetActiveVariable("flipFlag")
447
AddEnumVariable("Up", 0)
448
AddEnumVariable("Right", 1)
449
AddEnumVariable("Left", 2)
450
AddEnumVariable("Down", 3)
451
AddEnumVariable("Up (Slightly Stronger)", 5)
452
453
SetVariableAlias(ALIAS_VAR_VAL1, "isPlatform")
454
SetVariableAlias(ALIAS_VAR_VAL2, "extraVelocity")
455
end event
456
457