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/ARZ/Water.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Water Object
4
// Script Author: Christian Whitehead/Simon Thomley
5
// Unpacked by Rubberduckycooly's script unpacker
6
// ----------------------------------
7
8
// Any water objects in the scene should be followed by THREE blank objects, these manage player stuff
9
10
// ========================
11
// Aliases
12
// ========================
13
14
private alias object.value1 : object.constBubbleTimer
15
private alias object.value2 : object.randBubbleTimer
16
private alias object.value3 : object.proccessActEffects
17
private alias object.value8 : object.nextTrackID // stores the track that should play after the drowning one stops
18
19
// AirBubble Aliases
20
private alias object.value1 : airBubble.originPos.x
21
private alias object.value2 : airBubble.targetPlayer
22
23
// CountdownBubble Aliases
24
private alias object.value1 : countdownBubble.drawPos.x
25
private alias object.value2 : countdownBubble.drawPos.y
26
private alias object.value3 : countdownBubble.drawScreenID // new to Origins.
27
28
// Player Aliases
29
private alias object.type : player.type
30
private alias object.state : player.state
31
private alias object.xpos : player.xpos
32
private alias object.ypos : player.ypos
33
private alias object.xvel : player.xvel
34
private alias object.yvel : player.yvel
35
private alias object.speed : player.speed
36
private alias object.direction : player.direction
37
private alias object.gravity : player.gravity
38
private alias object.animation : player.animation
39
private alias object.interaction : player.interaction
40
private alias object.tileCollisions : player.tileCollisions
41
42
private alias object.value1 : player.timer
43
private alias object.value3 : player.drownTimer
44
private alias object.value4 : player.drownLevel
45
private alias object.value7 : player.invincibleTimer
46
private alias object.value16 : player.isSidekick
47
private alias object.value18 : player.sortedDrawOrder
48
private alias object.value20 : player.topSpeed
49
private alias object.value21 : player.acceleration
50
private alias object.value22 : player.deceleration
51
private alias object.value23 : player.airAcceleration
52
private alias object.value24 : player.airDeceleration
53
private alias object.value25 : player.gravityStrength
54
private alias object.value27 : player.jumpStrength
55
private alias object.value28 : player.jumpCap
56
private alias object.value37 : player.shield
57
58
private alias 1 : SUPERSTATE_SUPER
59
60
private alias 30 : SLOT_VSGAME
61
private alias object.value7 : object.waterSlotID
62
63
// Death Event Aliases
64
private alias object.value4 : object.timeOver
65
66
// Shields
67
private alias 0 : SHIELD_NONE
68
private alias 2 : SHIELD_BUBBLE
69
private alias 3 : SHIELD_FIRE
70
private alias 4 : SHIELD_LIGHTNING
71
72
// Tracks
73
private alias 0 : TRACK_STAGE
74
private alias 2 : TRACK_INVINCIBLE
75
private alias 6 : TRACK_DROWNING
76
77
78
// ========================
79
// Function Declarations
80
// ========================
81
82
reserve function Water_ProcessARZAct1
83
reserve function Water_ProcessARZAct2
84
reserve function Water_SpawnSmallAirBubble
85
reserve function Water_SpawnCountDownBubble
86
reserve function Water_ResetDrownMusic
87
88
89
// ========================
90
// Static Values
91
// ========================
92
93
private value Water_waterSlotID = 0
94
private value Water_activateFlag = 0
95
96
97
// ========================
98
// Tables
99
// ========================
100
101
private table Water_processActTable[3]
102
103
104
// ========================
105
// Function Definitions
106
// ========================
107
108
private function Water_ProcessARZAct1
109
stage.newWaterLevel = 0x4100000
110
end function
111
112
113
private function Water_ProcessARZAct2
114
stage.newWaterLevel = 0x5100000
115
end function
116
117
118
private function Water_SpawnSmallAirBubble
119
if object[+currentPlayer].constBubbleTimer > 0
120
object[+currentPlayer].constBubbleTimer--
121
122
if object[+currentPlayer].randBubbleTimer > 0
123
object[+currentPlayer].randBubbleTimer--
124
else
125
CreateTempObject(TypeName[Air Bubble], 2, player[currentPlayer].xpos, player[currentPlayer].ypos)
126
object[tempObjectPos].drawOrder = 4
127
object[tempObjectPos].yvel = -0x8800
128
airBubble[tempObjectPos].targetPlayer = currentPlayer
129
if player[currentPlayer].direction == FACING_RIGHT
130
object[tempObjectPos].xpos += 0x60000
131
else
132
object[tempObjectPos].xpos -= 0x60000
133
object[tempObjectPos].angle = 256
134
end if
135
airBubble[tempObjectPos].originPos.x = object[tempObjectPos].xpos
136
object[+currentPlayer].randBubbleTimer = 512
137
end if
138
else
139
Rand(temp0, 3)
140
if temp0 == 1
141
Rand(object[+currentPlayer].randBubbleTimer, 16)
142
object[+currentPlayer].randBubbleTimer += 8
143
else
144
object[+currentPlayer].randBubbleTimer = 512
145
end if
146
147
object[+currentPlayer].constBubbleTimer = 60
148
CreateTempObject(TypeName[Air Bubble], 2, player[currentPlayer].xpos, player[currentPlayer].ypos)
149
object[tempObjectPos].drawOrder = 4
150
object[tempObjectPos].yvel = -0x8800
151
airBubble[tempObjectPos].targetPlayer = currentPlayer
152
if player[currentPlayer].direction == FACING_RIGHT
153
object[tempObjectPos].xpos += 0x60000
154
else
155
object[tempObjectPos].xpos -= 0x60000
156
object[tempObjectPos].angle = 256
157
end if
158
159
airBubble[tempObjectPos].originPos.x = object[tempObjectPos].xpos
160
end if
161
end function
162
163
164
private function Water_SpawnCountDownBubble
165
CreateTempObject(TypeName[Countdown Bubble], temp0, player[currentPlayer].xpos, player[currentPlayer].ypos)
166
object[tempObjectPos].drawOrder = 5
167
object[tempObjectPos].yvel = -0x8800
168
#platform: USE_STANDALONE
169
countdownBubble[tempObjectPos].drawPos.y = currentPlayer // this is odd... this is drawPos.y, not "targetPlayer", likely a leftover from AirBubble spawning
170
#endplatform
171
#platform: USE_ORIGINS
172
countdownBubble[tempObjectPos].drawScreenID = currentPlayer
173
#endplatform
174
if player[currentPlayer].direction == FACING_RIGHT
175
object[tempObjectPos].xpos += 0x60000
176
else
177
object[tempObjectPos].xpos -= 0x60000
178
object[tempObjectPos].angle = 256
179
end if
180
181
countdownBubble[tempObjectPos].drawPos.x = object[tempObjectPos].xpos
182
end function
183
184
185
private function Water_ResetDrownMusic
186
#platform: USE_STANDALONE
187
if currentPlayer == false
188
#endplatform
189
#platform: USE_ORIGINS
190
if player[currentPlayer].isSidekick == false
191
#endplatform
192
193
arrayPos0 = Water_waterSlotID
194
arrayPos0 += currentPlayer
195
if player[currentPlayer].type != TypeName[Death Event]
196
if music.currentTrack == TRACK_DROWNING
197
if object[arrayPos0].nextTrackID == TRACK_INVINCIBLE
198
arrayPos1 = currentPlayer
199
arrayPos1 += playerCount
200
if object[arrayPos1].type != TypeName[Invincibility]
201
if Player_superState != SUPERSTATE_SUPER
202
object[arrayPos0].nextTrackID = TRACK_STAGE
203
end if
204
end if
205
end if
206
207
PlayMusic(object[arrayPos0].nextTrackID)
208
end if
209
end if
210
end if
211
end function
212
213
214
// ========================
215
// Events
216
// ========================
217
218
event ObjectUpdate
219
temp0 = player[0].xpos
220
temp0 >>= 16
221
temp1 = player[0].ypos
222
temp1 >>= 16
223
224
arrayPos0 = object.entityPos
225
CallFunction(object.proccessActEffects)
226
227
// ARZ water doesn't really move, but the functionality for it is here anyway just in case ig
228
if object.ypos < stage.newWaterLevel
229
object.ypos += 0x10000
230
end if
231
if object.ypos > stage.newWaterLevel
232
object.ypos -= 0x10000
233
end if
234
235
stage.waterLevel = object.ypos
236
temp7 = stage.waterLevel
237
stage.waterLevel >>= 16
238
239
currentPlayer = 0
240
while currentPlayer < playerCount
241
#platform: USE_ORIGINS
242
if game.playMode == BOOT_PLAYMODE_MISSION
243
if stage.timeEnabled == false
244
if object[currentPlayer].type == TypeName[Death Event]
245
object[currentPlayer].timeOver = 11 // 11??? normally the value is just true/false, did they accidentally put two 1's or something?
246
end if
247
end if
248
end if
249
#endplatform
250
251
if player[currentPlayer].gravityStrength == 0x3800
252
CheckNotEqual(player[currentPlayer].type, TypeName[Debug Mode])
253
temp0 = checkResult
254
CheckNotEqual(player[currentPlayer].state, Player_State_Death)
255
temp0 &= checkResult
256
CheckNotEqual(player[currentPlayer].state, Player_State_Static)
257
temp0 &= checkResult
258
CheckGreater(player[currentPlayer].ypos, temp7)
259
temp0 &= checkResult
260
if temp0 == true
261
if player[currentPlayer].yvel > 0
262
player[currentPlayer].yvel >>= 2
263
end if
264
265
if object.ypos < stage.newWaterLevel
266
player[currentPlayer].yvel += 0x10000
267
end if
268
269
if player[currentPlayer].state == Player_State_Fly
270
StopSfx(SfxName[Flying])
271
StopSfx(SfxName[Jump])
272
end if
273
274
player[currentPlayer].xvel >>= 1
275
player[currentPlayer].speed >>= 1
276
277
CallFunction(Player_UpdatePhysicsState)
278
279
if player[currentPlayer].yvel != 0
280
CreateTempObject(TypeName[Water Splash], 0, player[currentPlayer].xpos, temp7)
281
object[tempObjectPos].drawOrder = 4
282
PlaySfx(SfxName[Water Splash], false)
283
end if
284
285
object[+currentPlayer].constBubbleTimer = 52
286
player[currentPlayer].drownTimer = 0
287
end if
288
else
289
if player[currentPlayer].invincibleTimer == 0
290
if player[currentPlayer].shield == SHIELD_FIRE
291
temp2 = 0
292
while temp2 < 8
293
Rand(temp0, 32)
294
Rand(temp1, 32)
295
temp0 -= 16
296
temp0 <<= 16
297
temp0 += player[currentPlayer].xpos
298
temp1 -= 16
299
temp1 <<= 16
300
temp1 += player[currentPlayer].ypos
301
CreateTempObject(TypeName[Dust Puff], 0, temp0, temp1)
302
object[tempObjectPos].drawOrder = player[currentPlayer].sortedDrawOrder
303
object[tempObjectPos].drawOrder++
304
object[tempObjectPos].xvel = player[currentPlayer].xvel
305
object[tempObjectPos].yvel = player[currentPlayer].yvel
306
temp2++
307
loop
308
309
player[currentPlayer].shield = SHIELD_NONE
310
arrayPos0 = currentPlayer
311
arrayPos0 += playerCount
312
CallFunction(Player_ApplyShield)
313
end if
314
315
// Player hit the water with a lightning shield - take their shield and electrocute the water
316
if player[currentPlayer].shield == SHIELD_LIGHTNING
317
player[currentPlayer].shield = SHIELD_NONE
318
arrayPos0 = currentPlayer
319
arrayPos0 += playerCount
320
CallFunction(Player_ApplyShield)
321
Water_flashTimer = 4
322
end if
323
end if
324
325
if player[currentPlayer].shield != SHIELD_BUBBLE
326
if player[currentPlayer].drownTimer == 0
327
player[currentPlayer].drownLevel = 0
328
CallFunction(Water_ResetDrownMusic)
329
end if
330
331
switch player[currentPlayer].drownLevel
332
case 0
333
CallFunction(Water_SpawnSmallAirBubble)
334
player[currentPlayer].drownTimer++
335
if player[currentPlayer].drownTimer == 360
336
#platform: USE_STANDALONE
337
if currentPlayer == false
338
#endplatform
339
#platform: USE_ORIGINS
340
if player[currentPlayer].isSidekick == false
341
#endplatform
342
PlaySfx(SfxName[Drown Alert], false)
343
end if
344
player[currentPlayer].drownLevel++
345
end if
346
break
347
348
case 1
349
CallFunction(Water_SpawnSmallAirBubble)
350
player[currentPlayer].drownTimer++
351
if player[currentPlayer].drownTimer == 660
352
#platform: USE_STANDALONE
353
if currentPlayer == false
354
#endplatform
355
#platform: USE_ORIGINS
356
if player[currentPlayer].isSidekick == false
357
#endplatform
358
PlaySfx(SfxName[Drown Alert], false)
359
end if
360
player[currentPlayer].drownLevel++
361
end if
362
break
363
364
case 2
365
CallFunction(Water_SpawnSmallAirBubble)
366
player[currentPlayer].drownTimer++
367
if player[currentPlayer].drownTimer == 960
368
#platform: USE_STANDALONE
369
if currentPlayer == false
370
#endplatform
371
#platform: USE_ORIGINS
372
if player[currentPlayer].isSidekick == false
373
#endplatform
374
PlaySfx(SfxName[Drown Alert], false)
375
end if
376
player[currentPlayer].drownLevel++
377
end if
378
break
379
380
case 3
381
CallFunction(Water_SpawnSmallAirBubble)
382
player[currentPlayer].drownTimer++
383
if player[currentPlayer].drownTimer == 1080
384
#platform: USE_STANDALONE
385
if currentPlayer == false
386
#endplatform
387
#platform: USE_ORIGINS
388
if player[currentPlayer].isSidekick == false
389
#endplatform
390
object.nextTrackID = music.currentTrack
391
PlayMusic(TRACK_DROWNING)
392
end if
393
394
temp0 = 0
395
CallFunction(Water_SpawnCountDownBubble)
396
player[currentPlayer].drownLevel++
397
end if
398
break
399
400
case 4
401
CallFunction(Water_SpawnSmallAirBubble)
402
player[currentPlayer].drownTimer++
403
if player[currentPlayer].drownTimer == 1200
404
temp0 = 1
405
CallFunction(Water_SpawnCountDownBubble)
406
player[currentPlayer].drownLevel++
407
end if
408
break
409
410
case 5
411
CallFunction(Water_SpawnSmallAirBubble)
412
player[currentPlayer].drownTimer++
413
if player[currentPlayer].drownTimer == 1320
414
temp0 = 2
415
CallFunction(Water_SpawnCountDownBubble)
416
player[currentPlayer].drownLevel++
417
end if
418
break
419
420
case 6
421
CallFunction(Water_SpawnSmallAirBubble)
422
player[currentPlayer].drownTimer++
423
if player[currentPlayer].drownTimer == 1440
424
temp0 = 3
425
CallFunction(Water_SpawnCountDownBubble)
426
player[currentPlayer].drownLevel++
427
end if
428
break
429
430
case 7
431
CallFunction(Water_SpawnSmallAirBubble)
432
player[currentPlayer].drownTimer++
433
if player[currentPlayer].drownTimer == 1560
434
temp0 = 4
435
CallFunction(Water_SpawnCountDownBubble)
436
player[currentPlayer].drownLevel++
437
end if
438
break
439
440
case 8
441
CallFunction(Water_SpawnSmallAirBubble)
442
player[currentPlayer].drownTimer++
443
if player[currentPlayer].drownTimer == 1680
444
temp0 = 5
445
CallFunction(Water_SpawnCountDownBubble)
446
player[currentPlayer].drownLevel++
447
end if
448
break
449
450
case 9
451
CallFunction(Water_SpawnSmallAirBubble)
452
player[currentPlayer].drownTimer++
453
if player[currentPlayer].drownTimer == 1800
454
if player[currentPlayer].state != Player_State_Death
455
#platform: USE_ORIGINS
456
if options.vsMode == false
457
#endplatform
458
if currentPlayer == 0
459
stage.timeEnabled = false
460
camera[0].enabled = false
461
end if
462
#platform: USE_ORIGINS
463
else
464
camera[currentPlayer].style = CAMERASTYLE_STATIC
465
end if
466
#endplatform
467
player[currentPlayer].state = Player_State_Drown
468
player[currentPlayer].animation = ANI_DROWNING
469
player[currentPlayer].speed = 0
470
player[currentPlayer].xvel = 0
471
player[currentPlayer].yvel = 0
472
player[currentPlayer].tileCollisions = false
473
player[currentPlayer].interaction = false
474
player[currentPlayer].sortedDrawOrder = 5
475
object[+currentPlayer].constBubbleTimer = 2
476
PlaySfx(SfxName[Drowning], false)
477
player[currentPlayer].drownLevel++
478
end if
479
end if
480
break
481
482
case 10
483
player[currentPlayer].drownTimer++
484
if player[currentPlayer].drownTimer == 1860
485
player[currentPlayer].drownLevel++
486
end if
487
488
if object[+currentPlayer].constBubbleTimer > 0
489
object[+currentPlayer].constBubbleTimer--
490
if object[+currentPlayer].randBubbleTimer > 0
491
object[+currentPlayer].randBubbleTimer--
492
else
493
Rand(temp1, 2)
494
temp1 += 2
495
CreateTempObject(TypeName[Air Bubble], temp1, player[currentPlayer].xpos, player[currentPlayer].ypos)
496
object[tempObjectPos].drawOrder = 5
497
object[tempObjectPos].yvel = -0x8800
498
object[tempObjectPos].ypos -= 0x60000
499
airBubble[tempObjectPos].targetPlayer = currentPlayer
500
Rand(object[tempObjectPos].angle, 256)
501
airBubble[tempObjectPos].originPos.x = object[tempObjectPos].xpos
502
object[+currentPlayer].randBubbleTimer = 512
503
end if
504
else
505
Rand(temp0, 5)
506
if temp0 == 1
507
object[+currentPlayer].randBubbleTimer = 2
508
else
509
object[+currentPlayer].randBubbleTimer = 512
510
end if
511
object[+currentPlayer].constBubbleTimer = 6
512
513
Rand(temp1, 2)
514
temp1 += 2
515
CreateTempObject(TypeName[Air Bubble], temp1, player[currentPlayer].xpos, player[currentPlayer].ypos)
516
object[tempObjectPos].drawOrder = 5
517
object[tempObjectPos].yvel = -0x8800
518
object[tempObjectPos].ypos -= 0x60000
519
airBubble[tempObjectPos].targetPlayer = currentPlayer
520
Rand(object[tempObjectPos].angle, 0x100)
521
airBubble[tempObjectPos].originPos.x = object[tempObjectPos].xpos
522
end if
523
break
524
end switch
525
end if
526
527
CheckEqual(player[currentPlayer].type, TypeName[Debug Mode])
528
temp0 = checkResult
529
CheckLower(player[currentPlayer].ypos, temp7)
530
temp0 |= checkResult
531
if temp0 == true
532
if player[currentPlayer].state != Player_State_Death
533
player[currentPlayer].yvel <<= 1
534
if player[currentPlayer].yvel < -0x100000
535
player[currentPlayer].yvel = -0x100000
536
end if
537
538
#platform: USE_STANDALONE
539
// Fixes a bug where jumping at the surface of the water will set your velocity too high
540
// Also yep this fix isn't in Origins, this is taken from the Sega Forever version of the game
541
if player[currentPlayer].animation == ANI_JUMPING
542
if player[currentPlayer].timer > 0
543
if player[currentPlayer].yvel < -0x68000
544
player[currentPlayer].yvel = -0x68000
545
end if
546
end if
547
end if
548
#endplatform
549
550
if player[currentPlayer].state == Player_State_Fly
551
if player[currentPlayer].timer < 480
552
PlaySfx(SfxName[Flying], true)
553
else
554
PlaySfx(SfxName[Jump], true)
555
end if
556
end if
557
558
559
CallFunction(Player_UpdatePhysicsState)
560
if player[currentPlayer].yvel != 0
561
temp0 = object.ypos
562
temp0 -= player[currentPlayer].ypos
563
if temp0 < 0xF00000
564
CreateTempObject(TypeName[Water Splash], 0, player[currentPlayer].xpos, temp7)
565
object[tempObjectPos].drawOrder = 4
566
PlaySfx(SfxName[Water Splash], false)
567
end if
568
end if
569
570
player[currentPlayer].drownTimer = 0
571
CallFunction(Water_ResetDrownMusic)
572
end if
573
end if
574
end if
575
576
currentPlayer++
577
loop
578
579
object.animationTimer++
580
object.animationTimer &= 31
581
object.frame = object.animationTimer
582
object.frame >>= 3
583
end event
584
585
586
event ObjectDraw
587
temp0 = screen.xoffset
588
Sin(temp1, oscillation)
589
temp1 >>= 5
590
temp0 += temp1
591
temp0 &= 63
592
FlipSign(temp0)
593
temp1 = stage.waterLevel
594
temp1 -= screen.yoffset
595
DrawSpriteScreenFX(object.frame, FX_INK, temp0, temp1)
596
temp0 += 256
597
DrawSpriteScreenFX(object.frame, FX_INK, temp0, temp1)
598
end event
599
600
601
event ObjectStartup
602
SetTableValue(Water_ProcessARZAct1, 1, Water_processActTable)
603
SetTableValue(Water_ProcessARZAct2, 2, Water_processActTable)
604
605
foreach (TypeName[Water], arrayPos0, ALL_ENTITIES)
606
object[arrayPos0].priority = PRIORITY_ACTIVE
607
object[arrayPos0].drawOrder = 5
608
object[arrayPos0].inkEffect = INK_ALPHA
609
object[arrayPos0].alpha = 0xA0
610
if credits.screen == 0 // This check will always pass, see below
611
stage.newWaterLevel = object[arrayPos0].ypos
612
else
613
// Leftover from S1 LZ Water, there aren't any in-game credits in this game so this doesn't really matter...
614
stage.waterState = 1
615
stage.newWaterLevel = 0x4C80000
616
temp0 = player[0].xpos
617
temp0 >>= 16
618
temp1 = player[0].ypos
619
temp1 >>= 16
620
end if
621
Water_waterSlotID = arrayPos0
622
GetTableValue(object[arrayPos0].proccessActEffects, stage.actNum, Water_processActTable)
623
CallFunction(object[arrayPos0].proccessActEffects)
624
stage.waterLevel = stage.newWaterLevel
625
stage.waterLevel >>= 16
626
object[arrayPos0].ypos = stage.newWaterLevel
627
628
if starPostID >= 32
629
stage.waterState = recWaterState
630
stage.waterLevel = recWaterLevel
631
stage.newWaterLevel = recWaterLevel
632
stage.newWaterLevel <<= 16
633
arrayPos0 = Water_waterSlotID
634
object[arrayPos0].ypos = stage.newWaterLevel
635
else
636
if credits.screen == 0 // This check will always pass, see above
637
stage.waterState = 0
638
end if
639
end if
640
next
641
642
Water_activateFlag = false
643
644
foreach (GROUP_PLAYERS, currentPlayer, ALL_ENTITIES)
645
player[currentPlayer].drownTimer = 0
646
if player[currentPlayer].ypos > stage.newWaterLevel
647
player[currentPlayer].yvel >>= 2
648
player[currentPlayer].xvel >>= 1
649
player[currentPlayer].speed >>= 1
650
player[currentPlayer].topSpeed >>= 1
651
player[currentPlayer].acceleration >>= 1
652
player[currentPlayer].deceleration >>= 1
653
player[currentPlayer].airAcceleration >>= 1
654
player[currentPlayer].airDeceleration >>= 1
655
player[currentPlayer].gravityStrength = 0x1000
656
if stage.playerListPos == PLAYER_KNUCKLES_A
657
player[currentPlayer].jumpStrength = 0x30000
658
else
659
player[currentPlayer].jumpStrength = 0x38000
660
end if
661
player[currentPlayer].jumpCap = -0x20000
662
arrayPos0 = Water_waterSlotID
663
arrayPos0 += currentPlayer
664
object[arrayPos0].constBubbleTimer = 52
665
end if
666
next
667
668
#platform: USE_ORIGINS
669
if options.vsMode == true
670
object[SLOT_VSGAME].waterSlotID = Water_waterSlotID
671
end if
672
#endplatform
673
674
// The only ARZ object to actually use this sheet...
675
// All the other water-related objects in this zone (besides Water Splash) use "CPZ/Objects2.gif" instead...
676
LoadSpriteSheet("ARZ/Objects2.gif")
677
SpriteFrame(0, -7, 256, 16, 0, 0)
678
SpriteFrame(0, -7, 256, 16, 0, 16)
679
SpriteFrame(0, -7, 256, 16, 0, 32)
680
SpriteFrame(0, -7, 256, 16, 0, 48)
681
682
BrokenMonitor_ResetDrownMusic = Water_ResetDrownMusic
683
end event
684
685
686
// ========================
687
// Editor Events
688
// ========================
689
690
event RSDKDraw
691
DrawSprite(0)
692
end event
693
694
695
event RSDKLoad
696
LoadSpriteSheet("ARZ/Objects2.gif")
697
SpriteFrame(0, -7, 256, 16, 0, 0)
698
699
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
700
end event
701
702