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/Global/RedSpring.txt
1478 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Red 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.active
14
private alias object.value2 : object.stoodPlayers
15
private alias object.value7 : object.enabledInAir
16
17
// Player Aliases
18
private alias object.state : player.state
19
private alias object.xpos : player.xpos
20
private alias object.ypos : player.ypos
21
private alias object.iypos : player.iypos
22
private alias object.xvel : player.xvel
23
private alias object.yvel : player.yvel
24
private alias object.speed : player.speed
25
private alias object.angle : player.angle
26
private alias object.direction : player.direction
27
private alias object.gravity : player.gravity
28
private alias object.frame : player.frame
29
private alias object.prevAnimation : player.prevAnimation
30
private alias object.animationSpeed : player.animationSpeed
31
private alias object.animation : player.animation
32
private alias object.pushing : player.pushing
33
private alias object.controlLock : player.controlLock
34
private alias object.collisionMode : player.collisionMode
35
private alias object.collisionTop : player.collisionTop
36
private alias object.collisionBottom : player.collisionBottom
37
private alias object.tileCollisions : player.tileCollisions
38
private alias object.value1 : player.timer
39
private alias object.value10 : player.animationReserve
40
private alias object.value17 : debugMode.currentSelection
41
private alias object.value25 : player.gravityStrength
42
43
// ========================
44
// Function Declarations
45
// ========================
46
47
reserve function RedSpring_DebugDraw
48
reserve function RedSpring_DebugSpawn
49
50
51
// ========================
52
// Static Values
53
// ========================
54
55
private value RedSpring_startDebugID = 0
56
57
58
// ========================
59
// Tables
60
// ========================
61
62
private table RedSpring_directionTable
63
0, 0, 0, 0
64
0, 0, 2, 2
65
0, 0, 1, 2
66
0, 1, 2, 3
67
0, 0, 1, 2
68
0, 1, 2, 3
69
end table
70
71
private table RedSpring_heightsTable
72
16, 16, 16, 16, 16, 16, 14, 12, 10, 8, 6, 4, 2, 0, -2, -4
73
end table
74
75
private table RedSpring_collisionTypes
76
1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1
77
end table
78
79
80
// ========================
81
// Function Definitions
82
// ========================
83
84
private function RedSpring_DebugDraw
85
temp1 = object.direction
86
temp0 = debugMode[0].currentSelection
87
temp0 -= RedSpring_startDebugID
88
GetTableValue(object.direction, temp0, RedSpring_directionTable)
89
DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)
90
object.direction = temp1
91
end function
92
93
94
private function RedSpring_DebugSpawn
95
temp0 = debugMode[0].currentSelection
96
temp0 -= RedSpring_startDebugID
97
CreateTempObject(TypeName[Red Spring], temp0, object.xpos, object.ypos)
98
end function
99
100
101
// ========================
102
// Events
103
// ========================
104
105
event ObjectUpdate
106
temp2 = 0
107
108
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
109
temp1 = object.propertyValue
110
temp1 &= 0x7F
111
switch temp1
112
case 0 // Up
113
temp0 = object.active
114
if player[currentPlayer].gravity == GRAVITY_AIR
115
temp0 = true
116
end if
117
118
if player[currentPlayer].collisionMode > CMODE_FLOOR
119
if player[currentPlayer].yvel < 0
120
temp0 = true
121
end if
122
end if
123
124
if temp0 == false
125
BoxCollisionTest(C_SOLID, object.entityPos, -14, -8, 14, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
126
if player[currentPlayer].gravity == GRAVITY_AIR
127
BoxCollisionTest(C_TOUCH, object.entityPos, -14, -10, 14, -6, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
128
else
129
BoxCollisionTest(C_TOUCH, object.entityPos, -14, -12, 14, -6, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
130
end if
131
132
if checkResult == true
133
player[currentPlayer].animationReserve = ANI_WALKING
134
if player[currentPlayer].animation == ANI_RUNNING
135
player[currentPlayer].animationReserve = ANI_RUNNING
136
end if
137
138
if player[currentPlayer].animation == ANI_PEELOUT
139
player[currentPlayer].animationReserve = ANI_PEELOUT
140
end if
141
142
object.timer = 1
143
#platform: USE_STANDALONE
144
player[currentPlayer].state = Player_State_Air
145
#endplatform
146
#platform: USE_ORIGINS
147
player[currentPlayer].state = Player_State_Air_NoDropDash
148
#endplatform
149
player[currentPlayer].tileCollisions = true
150
player[currentPlayer].gravity = GRAVITY_AIR
151
player[currentPlayer].speed = player[currentPlayer].xvel
152
player[currentPlayer].yvel = -0x100000
153
player[currentPlayer].yvel -= player[currentPlayer].gravityStrength
154
155
if object.propertyValue >= 0x80
156
player[currentPlayer].animation = ANI_TWIRL
157
player[currentPlayer].prevAnimation = ANI_TWIRL
158
player[currentPlayer].frame = 0
159
player[currentPlayer].animationSpeed = 40
160
else
161
player[currentPlayer].animation = ANI_BOUNCING
162
end if
163
player[currentPlayer].timer = 0
164
PlaySfx(SfxName[Spring], false)
165
end if
166
else
167
if player[currentPlayer].yvel >= 0
168
BoxCollisionTest(C_PLATFORM, object.entityPos, -14, -8, 14, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
169
170
BoxCollisionTest(C_TOUCH, object.entityPos, -14, -10, 14, -6, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
171
if checkResult == true
172
player[currentPlayer].animationReserve = ANI_WALKING
173
if player[currentPlayer].animation == ANI_RUNNING
174
player[currentPlayer].animationReserve = ANI_RUNNING
175
end if
176
177
if player[currentPlayer].animation == ANI_PEELOUT
178
player[currentPlayer].animationReserve = ANI_PEELOUT
179
end if
180
181
object.timer = 1
182
#platform: USE_STANDALONE
183
player[currentPlayer].state = Player_State_Air
184
#endplatform
185
#platform: USE_ORIGINS
186
player[currentPlayer].state = Player_State_Air_NoDropDash
187
#endplatform
188
player[currentPlayer].tileCollisions = true
189
player[currentPlayer].gravity = GRAVITY_AIR
190
player[currentPlayer].speed = player[currentPlayer].xvel
191
player[currentPlayer].yvel = -0x100000
192
if object.propertyValue >= 0x80
193
player[currentPlayer].animation = ANI_TWIRL
194
player[currentPlayer].prevAnimation = ANI_TWIRL
195
player[currentPlayer].frame = 0
196
player[currentPlayer].animationSpeed = 40
197
else
198
player[currentPlayer].animation = ANI_BOUNCING
199
end if
200
201
player[currentPlayer].timer = 0
202
PlaySfx(SfxName[Spring], false)
203
end if
204
end if
205
end if
206
break
207
208
case 1 // Right
209
BoxCollisionTest(C_SOLID, object.entityPos, -8, -14, 8, 14, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
210
if player[currentPlayer].gravity == GRAVITY_GROUND
211
BoxCollisionTest(C_TOUCH, object.entityPos, 6, -14, 11, 14, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
212
if checkResult == true
213
214
object.timer = 1
215
player[currentPlayer].tileCollisions = true
216
player[currentPlayer].angle = 0
217
player[currentPlayer].speed = 0x100000
218
player[currentPlayer].collisionMode = CMODE_FLOOR
219
player[currentPlayer].pushing = false
220
player[currentPlayer].direction = FACING_RIGHT
221
player[currentPlayer].controlLock = 12
222
223
PlaySfx(SfxName[Spring], false)
224
if player[currentPlayer].state != Player_State_Roll
225
player[currentPlayer].state = Player_State_Ground
226
player[currentPlayer].animation = ANI_RUNNING
227
end if
228
end if
229
else
230
if object.enabledInAir == true
231
BoxCollisionTest(C_TOUCH, object.entityPos, 6, -4, 11, 4, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
232
if checkResult == true
233
object.timer = 1
234
235
player[currentPlayer].tileCollisions = true
236
player[currentPlayer].angle = 0
237
player[currentPlayer].speed = 0x100000
238
player[currentPlayer].yvel = 0
239
player[currentPlayer].collisionMode = CMODE_FLOOR
240
player[currentPlayer].pushing = false
241
player[currentPlayer].direction = FACING_RIGHT
242
player[currentPlayer].controlLock = 12
243
244
PlaySfx(SfxName[Spring], false)
245
if player[currentPlayer].state != Player_State_RollJump
246
player[currentPlayer].animation = ANI_BOUNCING
247
if player[currentPlayer].animation != ANI_JUMPING
248
player[currentPlayer].animation = ANI_RUNNING
249
end if
250
object.animationSpeed = object.speed
251
player[currentPlayer].animationSpeed *= 80
252
player[currentPlayer].animationSpeed /= 0x60000
253
end if
254
end if
255
end if
256
end if
257
break
258
259
case 2 // Left
260
BoxCollisionTest(C_SOLID, object.entityPos, -8, -14, 8, 14, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
261
if player[currentPlayer].gravity == GRAVITY_GROUND
262
BoxCollisionTest(C_TOUCH, object.entityPos, -10, -14, -6, 14, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
263
if checkResult == true
264
object.timer = 1
265
player[currentPlayer].tileCollisions = true
266
player[currentPlayer].speed = -0x100000
267
player[currentPlayer].collisionMode = CMODE_FLOOR
268
player[currentPlayer].pushing = 0
269
player[currentPlayer].direction = FACING_LEFT
270
player[currentPlayer].controlLock = 15
271
PlaySfx(SfxName[Spring], false)
272
if player[currentPlayer].state != Player_State_Roll
273
player[currentPlayer].state = Player_State_Ground
274
player[currentPlayer].animation = ANI_RUNNING
275
end if
276
end if
277
else
278
if object.enabledInAir == true
279
BoxCollisionTest(C_TOUCH, object.entityPos, -10, -14, -6, 14, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
280
if checkResult == true
281
object.timer = 1
282
283
player[currentPlayer].tileCollisions = true
284
player[currentPlayer].speed = -0x100000
285
player[currentPlayer].yvel = 0
286
player[currentPlayer].collisionMode = CMODE_FLOOR
287
player[currentPlayer].pushing = 0
288
player[currentPlayer].direction = FACING_LEFT
289
player[currentPlayer].controlLock = 15
290
291
PlaySfx(SfxName[Spring], false)
292
if player[currentPlayer].state != Player_State_RollJump
293
player[currentPlayer].animation = ANI_BOUNCING
294
if player[currentPlayer].animation != ANI_JUMPING
295
player[currentPlayer].animation = ANI_RUNNING
296
end if
297
object.animationSpeed = object.speed
298
FlipSign(player[currentPlayer].animationSpeed)
299
player[currentPlayer].animationSpeed *= 80
300
player[currentPlayer].animationSpeed /= 0x60000
301
end if
302
end if
303
end if
304
end if
305
break
306
307
case 3 // Down
308
BoxCollisionTest(C_SOLID, object.entityPos, -14, -8, 14, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
309
if player[currentPlayer].yvel <= 0
310
BoxCollisionTest(C_TOUCH, object.entityPos, -14, 6, 14, 10, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
311
if checkResult == true
312
if player[currentPlayer].collisionMode == CMODE_ROOF
313
FlipSign(player[currentPlayer].speed)
314
FlipSign(player[currentPlayer].xvel)
315
end if
316
317
object.timer = 1
318
#platform: USE_STANDALONE
319
player[currentPlayer].state = Player_State_Air
320
#endplatform
321
#platform: USE_ORIGINS
322
player[currentPlayer].state = Player_State_Air_NoDropDash
323
#endplatform
324
player[currentPlayer].tileCollisions = true
325
player[currentPlayer].gravity = GRAVITY_AIR
326
player[currentPlayer].speed = player[currentPlayer].xvel
327
player[currentPlayer].yvel = 0x100000
328
player[currentPlayer].timer = 0
329
330
PlaySfx(SfxName[Spring], false)
331
end if
332
end if
333
break
334
335
case 4 // Up Right
336
temp0 = player[currentPlayer].xpos
337
temp0 -= object.xpos
338
temp0 += 0x100000
339
temp0 >>= 17
340
if temp0 < 0
341
temp0 = 0
342
end if
343
if temp0 > 15
344
temp0 = 15
345
end if
346
347
GetTableValue(temp1, temp0, RedSpring_heightsTable)
348
FlipSign(temp1)
349
GetTableValue(temp4, temp0, RedSpring_collisionTypes)
350
BoxCollisionTest(temp4, object.entityPos, -16, temp1, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
351
if checkResult != COL_TOP
352
GetBit(temp3, object.stoodPlayers, temp2)
353
if temp3 == true
354
temp3 = player[currentPlayer].xpos
355
temp3 -= object.xpos
356
temp3 >>= 16
357
Abs(temp3)
358
if temp3 < 16
359
if player[currentPlayer].yvel >= 0
360
player[currentPlayer].iypos = player[currentPlayer].collisionBottom
361
FlipSign(player[currentPlayer].ypos)
362
temp1 <<= 16
363
player[currentPlayer].ypos += temp1
364
player[currentPlayer].ypos += object.ypos
365
checkResult = COL_TOP
366
end if
367
end if
368
end if
369
end if
370
371
if checkResult == COL_TOP
372
if temp0 >= 6
373
player[currentPlayer].animationReserve = ANI_WALKING
374
375
if player[currentPlayer].animation == ANI_RUNNING
376
player[currentPlayer].animationReserve = ANI_RUNNING
377
end if
378
379
if player[currentPlayer].animation == ANI_PEELOUT
380
player[currentPlayer].animationReserve = ANI_PEELOUT
381
end if
382
383
object.timer = 1
384
if player[currentPlayer].collisionMode == CMODE_ROOF
385
FlipSign(player[currentPlayer].speed)
386
FlipSign(player[currentPlayer].xvel)
387
end if
388
389
#platform: USE_STANDALONE
390
player[currentPlayer].state = Player_State_Air
391
#endplatform
392
#platform: USE_ORIGINS
393
player[currentPlayer].state = Player_State_Air_NoDropDash
394
#endplatform
395
player[currentPlayer].tileCollisions = true
396
player[currentPlayer].gravity = GRAVITY_AIR
397
player[currentPlayer].xvel = 0x100000
398
player[currentPlayer].speed = player[currentPlayer].xvel
399
player[currentPlayer].yvel = -0x100000
400
player[currentPlayer].yvel -= player[currentPlayer].gravityStrength
401
player[currentPlayer].timer = 0
402
player[currentPlayer].direction = FACING_RIGHT
403
404
if object.propertyValue >= 0x80
405
player[currentPlayer].animation = ANI_TWIRL
406
else
407
player[currentPlayer].animation = ANI_BOUNCING
408
end if
409
PlaySfx(SfxName[Spring], false)
410
411
SetBit(object.stoodPlayers, temp2, false)
412
else
413
SetBit(object.stoodPlayers, temp2, true)
414
end if
415
else
416
SetBit(object.stoodPlayers, temp2, false)
417
end if
418
break
419
420
case 5 // Up Left
421
temp0 = player[currentPlayer].xpos
422
temp0 -= object.xpos
423
temp0 += 0x100000
424
temp0 >>= 17
425
if temp0 < 0
426
temp0 = 0
427
end if
428
429
if temp0 > 15
430
temp0 = 15
431
end if
432
temp0 -= 15
433
Abs(temp0)
434
435
GetTableValue(temp1, temp0, RedSpring_heightsTable)
436
FlipSign(temp1)
437
438
GetTableValue(temp4, temp0, RedSpring_collisionTypes)
439
BoxCollisionTest(temp4, object.entityPos, -16, temp1, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
440
if checkResult != COL_TOP
441
GetBit(temp3, object.stoodPlayers, temp2)
442
if temp3 == true
443
temp3 = player[currentPlayer].xpos
444
temp3 -= object.xpos
445
temp3 >>= 16
446
Abs(temp3)
447
if temp3 < 16
448
if player[currentPlayer].yvel >= 0
449
player[currentPlayer].iypos = player[currentPlayer].collisionBottom
450
FlipSign(player[currentPlayer].ypos)
451
temp1 <<= 16
452
player[currentPlayer].ypos += temp1
453
player[currentPlayer].ypos += object.ypos
454
checkResult = COL_TOP
455
end if
456
end if
457
end if
458
end if
459
460
if checkResult == COL_TOP
461
if temp0 >= 6
462
player[currentPlayer].animationReserve = ANI_WALKING
463
if player[currentPlayer].animation == ANI_RUNNING
464
player[currentPlayer].animationReserve = ANI_RUNNING
465
end if
466
467
if player[currentPlayer].animation == ANI_PEELOUT
468
player[currentPlayer].animationReserve = ANI_PEELOUT
469
end if
470
471
object.timer = 1
472
if player[currentPlayer].collisionMode == CMODE_ROOF
473
FlipSign(player[currentPlayer].speed)
474
FlipSign(player[currentPlayer].xvel)
475
end if
476
477
#platform: USE_STANDALONE
478
player[currentPlayer].state = Player_State_Air
479
#endplatform
480
#platform: USE_ORIGINS
481
player[currentPlayer].state = Player_State_Air_NoDropDash
482
#endplatform
483
player[currentPlayer].tileCollisions = true
484
player[currentPlayer].gravity = GRAVITY_AIR
485
player[currentPlayer].xvel = -0x100000
486
player[currentPlayer].speed = player[currentPlayer].xvel
487
player[currentPlayer].yvel = -0x100000
488
player[currentPlayer].yvel -= player[currentPlayer].gravityStrength
489
player[currentPlayer].timer = 0
490
player[currentPlayer].direction = FACING_LEFT
491
492
if object.propertyValue >= 0x80
493
player[currentPlayer].animation = ANI_TWIRL
494
else
495
player[currentPlayer].animation = ANI_BOUNCING
496
end if
497
498
PlaySfx(SfxName[Spring], false)
499
SetBit(object.stoodPlayers, temp2, false)
500
else
501
SetBit(object.stoodPlayers, temp2, true)
502
end if
503
else
504
SetBit(object.stoodPlayers, temp2, false)
505
end if
506
break
507
508
case 6 // Down Right
509
temp0 = player[currentPlayer].xpos
510
temp0 -= object.xpos
511
temp0 += 0x100000
512
temp0 >>= 17
513
if temp0 < 0
514
temp0 = 0
515
end if
516
517
if temp0 > 15
518
temp0 = 15
519
end if
520
521
GetTableValue(temp1, temp0, RedSpring_heightsTable)
522
BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, temp1, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
523
if checkResult != COL_BOTTOM
524
GetBit(temp3, object.stoodPlayers, temp2)
525
if temp3 == true
526
temp3 = player[currentPlayer].xpos
527
temp3 -= object.xpos
528
temp3 >>= 16
529
Abs(temp3)
530
if temp3 < 16
531
if player[currentPlayer].yvel <= 0
532
player[currentPlayer].iypos = player[currentPlayer].collisionTop
533
FlipSign(player[currentPlayer].ypos)
534
temp1 <<= 16
535
player[currentPlayer].ypos += temp1
536
player[currentPlayer].ypos += object.ypos
537
checkResult = COL_TOP
538
end if
539
end if
540
end if
541
end if
542
543
if checkResult == COL_BOTTOM
544
if temp0 >= 6
545
object.timer = 1
546
if player[currentPlayer].collisionMode == CMODE_ROOF
547
FlipSign(player[currentPlayer].speed)
548
FlipSign(player[currentPlayer].xvel)
549
end if
550
#platform: USE_STANDALONE
551
player[currentPlayer].state = Player_State_Air
552
#endplatform
553
#platform: USE_ORIGINS
554
player[currentPlayer].state = Player_State_Air_NoDropDash
555
#endplatform
556
player[currentPlayer].tileCollisions = true
557
player[currentPlayer].gravity = GRAVITY_AIR
558
player[currentPlayer].xvel = 0x100000
559
player[currentPlayer].speed = player[currentPlayer].xvel
560
player[currentPlayer].yvel = 0x100000
561
player[currentPlayer].timer = 0
562
player[currentPlayer].direction = FACING_RIGHT
563
PlaySfx(SfxName[Spring], false)
564
SetBit(object.stoodPlayers, temp2, false)
565
else
566
SetBit(object.stoodPlayers, temp2, true)
567
end if
568
else
569
SetBit(object.stoodPlayers, temp2, false)
570
end if
571
break
572
573
case 7 // Down Left
574
temp0 = player[currentPlayer].xpos
575
temp0 -= object.xpos
576
temp0 += 0x100000
577
temp0 >>= 17
578
if temp0 < 0
579
temp0 = 0
580
end if
581
582
if temp0 > 15
583
temp0 = 15
584
end if
585
temp0 -= 15
586
Abs(temp0)
587
588
GetTableValue(temp1, temp0, RedSpring_heightsTable)
589
BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, temp1, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
590
if checkResult != COL_BOTTOM
591
GetBit(temp3, object.stoodPlayers, temp2)
592
if temp3 == true
593
temp3 = player[currentPlayer].xpos
594
temp3 -= object.xpos
595
temp3 >>= 16
596
Abs(temp3)
597
if temp3 < 16
598
if player[currentPlayer].yvel <= 0
599
player[currentPlayer].iypos = player[currentPlayer].collisionTop
600
FlipSign(player[currentPlayer].ypos)
601
temp1 <<= 16
602
player[currentPlayer].ypos += temp1
603
player[currentPlayer].ypos += object.ypos
604
checkResult = COL_TOP
605
end if
606
end if
607
end if
608
end if
609
610
if checkResult == COL_BOTTOM
611
if temp0 >= 6
612
object.timer = 1
613
if player[currentPlayer].collisionMode == CMODE_ROOF
614
FlipSign(player[currentPlayer].speed)
615
FlipSign(player[currentPlayer].xvel)
616
end if
617
618
#platform: USE_STANDALONE
619
player[currentPlayer].state = Player_State_Air
620
#endplatform
621
#platform: USE_ORIGINS
622
player[currentPlayer].state = Player_State_Air_NoDropDash
623
#endplatform
624
player[currentPlayer].tileCollisions = true
625
player[currentPlayer].gravity = GRAVITY_AIR
626
player[currentPlayer].xvel = -0x100000
627
player[currentPlayer].speed = player[currentPlayer].xvel
628
player[currentPlayer].yvel = 0x100000
629
player[currentPlayer].timer = 0
630
player[currentPlayer].direction = FACING_LEFT
631
PlaySfx(SfxName[Spring], false)
632
633
SetBit(object.stoodPlayers, temp2, false)
634
else
635
SetBit(object.stoodPlayers, temp2, true)
636
end if
637
else
638
SetBit(object.stoodPlayers, temp2, false)
639
end if
640
break
641
642
end switch
643
644
temp2++
645
next
646
647
object.frame = object.propertyValue
648
object.frame &= 0x7F
649
650
if object.timer != 0
651
switch object.timer
652
case 2
653
case 3
654
break
655
656
case 1
657
object.frame += 8
658
break
659
660
case 4
661
case 5
662
case 6
663
case 7
664
case 8
665
case 9
666
object.frame += 16
667
break
668
669
end switch
670
671
object.timer++
672
if object.timer >= 10
673
object.timer = 0
674
end if
675
end if
676
end event
677
678
679
event ObjectDraw
680
GetTableValue(object.direction, object.frame, RedSpring_directionTable)
681
DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)
682
end event
683
684
685
event ObjectStartup
686
687
LoadSpriteSheet("Global/Items.gif")
688
689
foreach (TypeName[Red Spring], arrayPos0, ALL_ENTITIES)
690
temp0 = object[arrayPos0].propertyValue
691
temp0 &= 0x7F
692
if temp0 > 8
693
object[arrayPos0].propertyValue -= 8
694
object[arrayPos0].enabledInAir = true
695
end if
696
next
697
698
// Spring frames
699
SpriteFrame(-16, -8, 32, 16, 52, 1)
700
SpriteFrame(-8, -16, 16, 32, 85, 1)
701
SpriteFrame(-8, -16, 16, 32, 118, 67)
702
SpriteFrame(-16, -8, 32, 16, 157, 116)
703
SpriteFrame(-16, -16, 32, 32, 118, 1)
704
SpriteFrame(-16, -16, 32, 32, 157, 50)
705
SpriteFrame(-16, -16, 32, 32, 118, 1)
706
SpriteFrame(-16, -16, 32, 32, 157, 50)
707
SpriteFrame(-16, 0, 32, 8, 52, 1)
708
SpriteFrame(-8, -16, 8, 32, 93, 1)
709
SpriteFrame(0, -16, 8, 32, 118, 67)
710
SpriteFrame(-16, -8, 32, 8, 157, 124)
711
SpriteFrame(-17, -10, 27, 27, 52, 186)
712
SpriteFrame(-17, -10, 27, 27, 52, 186)
713
SpriteFrame(-17, -10, 27, 27, 52, 186)
714
SpriteFrame(-17, -10, 27, 27, 52, 186)
715
SpriteFrame(-16, -24, 32, 32, 52, 34)
716
SpriteFrame(-8, -16, 32, 32, 85, 34)
717
SpriteFrame(-8, -16, 32, 32, 85, 34)
718
SpriteFrame(-16, -24, 32, 32, 52, 34)
719
SpriteFrame(-16, -26, 43, 42, 52, 100)
720
SpriteFrame(-16, -26, 43, 42, 52, 100)
721
SpriteFrame(-16, -26, 43, 42, 52, 100)
722
SpriteFrame(-16, -26, 43, 42, 52, 100)
723
724
temp0 = 0
725
RedSpring_startDebugID = DebugMode_ObjCount
726
while temp0 < 8
727
SetTableValue(TypeName[Red Spring], DebugMode_ObjCount, DebugMode_TypesTable)
728
SetTableValue(RedSpring_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
729
SetTableValue(RedSpring_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
730
DebugMode_ObjCount++
731
temp0++
732
loop
733
end event
734
735
736
// ========================
737
// Editor Events
738
// ========================
739
740
event RSDKEdit
741
if editor.returnVariable == true
742
switch editor.variableID
743
case EDIT_VAR_PROPVAL // property value
744
checkResult = object.propertyValue
745
break
746
747
case 0 // flipFlags
748
checkResult = object.propertyValue
749
checkResult &= 0x7
750
break
751
752
case 1 // useTwirlAnim
753
GetBit(checkResult, object.propertyValue, 7)
754
break
755
756
case 2 // enabledInAir
757
GetBit(checkResult, object.propertyValue, 3)
758
break
759
760
end switch
761
else
762
switch editor.variableID
763
case EDIT_VAR_PROPVAL // property value
764
object.propertyValue = editor.variableValue
765
break
766
767
case 0 // flipFlags
768
temp0 = editor.variableValue
769
temp0 &= 0x7
770
771
temp1 = 7
772
Not(temp1)
773
774
object.propertyValue &= temp1
775
object.propertyValue |= temp0
776
break
777
778
case 1 // useTwirlAnim
779
CheckNotEqual(editor.variableValue, false)
780
SetBit(object.propertyValue, 7, checkResult)
781
break
782
783
case 2 // enabledInAir
784
CheckNotEqual(editor.variableValue, false)
785
SetBit(object.propertyValue, 3, checkResult)
786
break
787
788
end switch
789
end if
790
end event
791
792
793
event RSDKDraw
794
object.frame = object.propertyValue
795
object.frame &= 7
796
797
GetTableValue(object.direction, object.frame, RedSpring_directionTable)
798
DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)
799
end event
800
801
802
event RSDKLoad
803
804
LoadSpriteSheet("Global/Items.gif")
805
806
// Spring frames
807
SpriteFrame(-16, -8, 32, 16, 52, 1)
808
SpriteFrame(-8, -16, 16, 32, 85, 1)
809
SpriteFrame(-8, -16, 16, 32, 118, 67)
810
SpriteFrame(-16, -8, 32, 16, 157, 116)
811
SpriteFrame(-16, -16, 32, 32, 118, 1)
812
SpriteFrame(-16, -16, 32, 32, 157, 50)
813
SpriteFrame(-16, -16, 32, 32, 118, 1)
814
SpriteFrame(-16, -16, 32, 32, 157, 50)
815
SpriteFrame(-16, 0, 32, 8, 52, 1)
816
SpriteFrame(-8, -16, 8, 32, 93, 1)
817
SpriteFrame(0, -16, 8, 32, 118, 67)
818
SpriteFrame(-16, -8, 32, 8, 157, 124)
819
SpriteFrame(-17, -10, 27, 27, 52, 186)
820
SpriteFrame(-17, -10, 27, 27, 52, 186)
821
SpriteFrame(-17, -10, 27, 27, 52, 186)
822
SpriteFrame(-17, -10, 27, 27, 52, 186)
823
SpriteFrame(-16, -24, 32, 32, 52, 34)
824
SpriteFrame(-8, -16, 32, 32, 85, 34)
825
SpriteFrame(-8, -16, 32, 32, 85, 34)
826
SpriteFrame(-16, -24, 32, 32, 52, 34)
827
SpriteFrame(-16, -26, 43, 42, 52, 100)
828
SpriteFrame(-16, -26, 43, 42, 52, 100)
829
SpriteFrame(-16, -26, 43, 42, 52, 100)
830
SpriteFrame(-16, -26, 43, 42, 52, 100)
831
832
AddEditorVariable("flipFlags")
833
SetActiveVariable("flipFlags")
834
AddEnumVariable("Up", 0)
835
AddEnumVariable("Right", 1)
836
AddEnumVariable("Left", 2)
837
AddEnumVariable("Down", 3)
838
AddEnumVariable("Up Right", 4)
839
AddEnumVariable("Up Left", 5)
840
AddEnumVariable("Down Right", 6)
841
AddEnumVariable("Down Left", 7)
842
843
AddEditorVariable("useTwirlAnim")
844
SetActiveVariable("useTwirlAnim")
845
AddEnumVariable("false", false)
846
AddEnumVariable("true", true)
847
848
AddEditorVariable("enabledInAir")
849
SetActiveVariable("enabledInAir")
850
AddEnumVariable("false", false)
851
AddEnumVariable("true", true)
852
end event
853
854