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/2PVS/VSGame.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: VS Game Object
4
// Script Author: Christian Whitehead/Simon Thomley
5
// Unpacked by Rubberduckycooly's script unpacker
6
// ----------------------------------
7
8
// This object isn't only used for managing 2PVS things, but also for the (2013, not Origins) Boss Rush too
9
10
// ========================
11
// Aliases
12
// ========================
13
14
private alias object.value0 : object.timer
15
private alias object.value1 : object.storedPosP1.x
16
private alias object.value2 : object.storedPosP1.y
17
private alias object.value3 : object.storedPosP2.x
18
private alias object.value4 : object.storedPosP2.y
19
private alias object.value5 : object.countdownPlayer
20
private alias object.value6 : object.countdownTimer
21
private alias object.value7 : object.waterSlotID
22
23
// States
24
private alias 0 : VSGAME_DISPLAYTAGS
25
private alias 1 : VSGAME_TELEPORT
26
private alias 2 : VSGAME_FADEOUT
27
private alias 3 : VSGAME_FINISH_COUNTDOWN
28
private alias 4 : VSGAME_GOTOVSRESULTS
29
private alias 5 : VSGAME_BOSSATTACK_FADEIN
30
private alias 6 : VSGAME_BOSSATTACK_END
31
private alias 7 : VSGAME_SCREENFADE
32
33
// Water Aliases
34
private alias object.value1 : object.constBubbleTimer
35
36
// Player Aliases
37
private alias object.type : player.type
38
private alias object.state : player.state
39
private alias object.xpos : player.xpos
40
private alias object.ypos : player.ypos
41
private alias object.ixpos : player.ixpos
42
private alias object.iypos : player.iypos
43
private alias object.xvel : player.xvel
44
private alias object.yvel : player.yvel
45
private alias object.speed : player.speed
46
private alias object.gravity : player.gravity
47
private alias object.visible : player.visible
48
private alias object.collisionPlane : player.collisionPlane
49
private alias object.propertyValue : player.character
50
private alias object.value0 : player.rings
51
private alias object.value1 : player.timer
52
private alias object.value4 : player.drownLevel
53
private alias object.value6 : player.speedShoesTimer
54
private alias object.value7 : player.invincibleTimer
55
private alias object.value18 : player.sortedDrawOrder
56
private alias object.value37 : player.shield
57
58
// Super States
59
private alias 1 : SUPERSTATE_SUPER
60
61
// Shields
62
private alias 1 : SHIELD_NORMAL
63
64
// Reserved Object Slots
65
private alias 0 : SLOT_PLAYER1
66
private alias 1 : SLOT_PLAYER2
67
private alias 30 : SLOT_VSGAME
68
69
70
// ========================
71
// Events
72
// ========================
73
74
event ObjectUpdate
75
switch object.state
76
case VSGAME_DISPLAYTAGS
77
if vs.playerID == 0
78
if oscillation == 500
79
// Sync the two player's randomValue so that the same random events happen between them
80
CallNativeFunction2(TransmitGlobal, "vs.randomValue", vs.randomValue)
81
end if
82
end if
83
84
if player[SLOT_PLAYER1].state != Player_State_Static
85
object.storedPosP1.x = player[SLOT_PLAYER1].xpos
86
object.storedPosP1.y = player[SLOT_PLAYER1].ypos
87
end if
88
89
if player[SLOT_PLAYER2].state != Player_State_Static
90
object.storedPosP2.x = player[SLOT_PLAYER2].xpos
91
object.storedPosP2.y = player[SLOT_PLAYER2].ypos
92
end if
93
break
94
95
case VSGAME_TELEPORT
96
if object.timer < 384
97
object.timer += 16
98
99
if player[SLOT_PLAYER1].state == Player_State_Static
100
object.state = VSGAME_FADEOUT
101
#platform: USE_ORIGINS
102
else
103
if player[SLOT_PLAYER1].state == Player_State_Death
104
object.state = VSGAME_FADEOUT
105
end if
106
#endplatform
107
108
end if
109
110
if player[SLOT_PLAYER2].state == Player_State_Static
111
object.state = VSGAME_FADEOUT
112
#platform: USE_ORIGINS
113
else
114
if player[SLOT_PLAYER2].state == Player_State_Death
115
object.state = VSGAME_FADEOUT
116
end if
117
#endplatform
118
end if
119
else
120
object.state = VSGAME_FADEOUT
121
if player[SLOT_PLAYER2].type != TypeName[Blank Object]
122
#platform: USE_STANDALONE
123
player[SLOT_PLAYER1].state = Player_State_Air
124
#endplatform
125
#platform: USE_ORIGINS
126
player[SLOT_PLAYER1].state = Player_State_Air_NoDropDash
127
#endplatform
128
player[SLOT_PLAYER1].xpos = object[SLOT_VSGAME].storedPosP2.x
129
player[SLOT_PLAYER1].ypos = object[SLOT_VSGAME].storedPosP2.y
130
131
#platform: USE_STANDALONE
132
player[SLOT_PLAYER2].state = Player_State_Air
133
#endplatform
134
#platform: USE_ORIGINS
135
player[SLOT_PLAYER2].state = Player_State_Air_NoDropDash
136
#endplatform
137
player[SLOT_PLAYER2].xpos = object[SLOT_VSGAME].storedPosP1.x
138
player[SLOT_PLAYER2].ypos = object[SLOT_VSGAME].storedPosP1.y
139
#platform: USE_ORIGINS
140
camera[0].xpos = player[SLOT_PLAYER1].ixpos
141
camera[0].ypos = player[SLOT_PLAYER1].iypos
142
camera[1].xpos = player[SLOT_PLAYER2].ixpos
143
camera[1].ypos = player[SLOT_PLAYER2].iypos
144
#endplatform
145
#platform: USE_STANDALONE
146
screen.cameraX = player[SLOT_PLAYER1].ixpos
147
screen.cameraY = player[SLOT_PLAYER1].iypos
148
#endplatform
149
150
temp0 = player[SLOT_PLAYER1].collisionPlane
151
player[SLOT_PLAYER1].collisionPlane = player[SLOT_PLAYER2].collisionPlane
152
player[SLOT_PLAYER2].collisionPlane = temp0
153
154
temp0 = player[SLOT_PLAYER1].shield
155
player[SLOT_PLAYER1].shield = player[SLOT_PLAYER2].shield
156
player[SLOT_PLAYER2].shield = temp0
157
158
#platform: USE_ORIGINS
159
if object[SLOT_VSGAME].waterSlotID != 0
160
arrayPos0 = 0
161
arrayPos1 = 0
162
163
CheckNotEqual(player[SLOT_PLAYER1].drownLevel, 0)
164
temp0 = checkResult
165
CheckEqual(player[SLOT_PLAYER2].drownLevel, 0)
166
checkResult &= temp0
167
if checkResult != false
168
arrayPos0 = 0
169
arrayPos1 = 1
170
end if
171
172
CheckEqual(player[SLOT_PLAYER1].drownLevel, 0)
173
temp0 = checkResult
174
CheckNotEqual(player[SLOT_PLAYER2].drownLevel, 0)
175
checkResult &= temp0
176
if checkResult != false
177
arrayPos0 = 1
178
arrayPos1 = 0
179
end if
180
181
if arrayPos0 != arrayPos1
182
player[arrayPos0].drownLevel = 0
183
currentPlayer = arrayPos0
184
CallFunction(BrokenMonitor_ResetDrownMusic)
185
player[arrayPos0].yvel <<= 1
186
if player[arrayPos0].yvel < -0x100000
187
player[arrayPos0].yvel = -0x100000
188
end if
189
190
if player[arrayPos0].state == Player_State_Fly
191
if player[arrayPos0].timer < 480
192
PlaySfx(SfxName[Flying], true)
193
else
194
PlaySfx(SfxName[Jump], true)
195
end if
196
end if
197
198
if player[arrayPos1].yvel > 0
199
player[arrayPos1].yvel >>= 2
200
end if
201
202
if player[arrayPos1].state == Player_State_Fly
203
StopSfx(SfxName[Flying])
204
StopSfx(SfxName[Jump])
205
end if
206
207
player[arrayPos1].xvel >>= 1
208
player[arrayPos1].speed >>= 1
209
arrayPos0 = object.waterSlotID
210
arrayPos0 += 0 // the world would crumble if this wasn't here
211
object[arrayPos0].constBubbleTimer = 52
212
arrayPos0++
213
object[arrayPos0].constBubbleTimer = 52
214
end if
215
end if
216
#endplatform
217
218
arrayPos0 = 0
219
arrayPos0 += playerCount
220
temp0 = object[arrayPos0].type
221
222
// Normally players shouldn't be Super in 2PVS, but if they are then just make them have some invincibility
223
if Player_superState == SUPERSTATE_SUPER
224
temp0 = invincibilityType
225
player[SLOT_PLAYER1].invincibleTimer = 1260
226
end if
227
228
arrayPos1 = 1
229
arrayPos1 += playerCount
230
temp1 = object[arrayPos1].type
231
if temp0 == temp1
232
if temp0 != invincibilityType
233
currentPlayer = 0
234
CallFunction(Player_ApplyShield)
235
currentPlayer = 1
236
arrayPos0 = arrayPos1
237
CallFunction(Player_ApplyShield)
238
else
239
temp0 = player[SLOT_PLAYER1].invincibleTimer
240
player[SLOT_PLAYER1].invincibleTimer = player[SLOT_PLAYER2].invincibleTimer
241
player[SLOT_PLAYER2].invincibleTimer = temp0
242
end if
243
else
244
if temp0 == invincibilityType
245
currentPlayer = 0
246
CallFunction(Player_ApplyShield)
247
ResetObjectEntity(arrayPos1, invincibilityType, 0, player[SLOT_PLAYER2].xpos, player[SLOT_PLAYER2].ypos)
248
object[arrayPos1].priority = PRIORITY_ACTIVE
249
250
temp0 = player[SLOT_PLAYER1].invincibleTimer
251
player[SLOT_PLAYER1].invincibleTimer = player[SLOT_PLAYER2].invincibleTimer
252
player[SLOT_PLAYER2].invincibleTimer = temp0
253
else
254
if temp1 == invincibilityType
255
ResetObjectEntity(arrayPos0, invincibilityType, 0, player[SLOT_PLAYER1].xpos, player[SLOT_PLAYER1].ypos)
256
object[arrayPos0].priority = PRIORITY_ACTIVE
257
currentPlayer = 1
258
arrayPos0 = arrayPos1
259
CallFunction(Player_ApplyShield)
260
261
temp0 = player[SLOT_PLAYER1].invincibleTimer
262
player[SLOT_PLAYER1].invincibleTimer = player[SLOT_PLAYER2].invincibleTimer
263
player[SLOT_PLAYER2].invincibleTimer = temp0
264
else
265
currentPlayer = 0
266
CallFunction(Player_ApplyShield)
267
currentPlayer = 1
268
arrayPos0 = arrayPos1
269
CallFunction(Player_ApplyShield)
270
end if
271
end if
272
end if
273
274
temp0 = player[SLOT_PLAYER1].speedShoesTimer
275
player[SLOT_PLAYER1].speedShoesTimer = player[SLOT_PLAYER2].speedShoesTimer
276
player[SLOT_PLAYER2].speedShoesTimer = temp0
277
278
#platform: USE_ORIGINS
279
temp0 = player[SLOT_PLAYER1].sortedDrawOrder
280
player[SLOT_PLAYER1].sortedDrawOrder = player[SLOT_PLAYER2].sortedDrawOrder
281
player[SLOT_PLAYER2].sortedDrawOrder = temp0
282
#endplatform
283
284
currentPlayer = 0
285
CallFunction(Player_UpdatePhysicsState)
286
currentPlayer = 1
287
CallFunction(Player_UpdatePhysicsState)
288
289
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
290
switch player[currentPlayer].character
291
case PLAYER_TAILS_A
292
case PLAYER_KNUCKLES_A
293
if player[currentPlayer].shield > SHIELD_NORMAL
294
player[currentPlayer].shield = SHIELD_NORMAL
295
arrayPos0 = currentPlayer
296
arrayPos0 += playerCount
297
if object[arrayPos0].type != invincibilityType
298
CallFunction(Player_ApplyShield)
299
end if
300
end if
301
// no break, but who cares
302
end switch
303
next
304
end if
305
end if
306
SetScreenFade(208, 255, 224, object.timer)
307
break
308
309
case VSGAME_FADEOUT
310
if object.timer > 0
311
object.timer -= 16
312
else
313
object.type = TypeName[Blank Object]
314
end if
315
SetScreenFade(208, 255, 224, object.timer)
316
break
317
318
case VSGAME_FINISH_COUNTDOWN
319
#platform: USE_STANDALONE
320
if object.countdownTimer > 0
321
object.timer++
322
if object.timer == 60
323
object.timer = 0
324
object.countdownTimer--
325
if object.countdownTimer == 0
326
currentPlayer = object.countdownPlayer
327
if player[currentPlayer].state != Player_State_Death
328
if player[currentPlayer].type != TypeName[Death Event]
329
#endplatform
330
#platform: USE_ORIGINS
331
currentPlayer = object.countdownPlayer
332
if player[currentPlayer].state != Player_State_Death
333
if player[currentPlayer].type != TypeName[Death Event]
334
if object.countdownTimer > 0
335
object.timer++
336
if object.timer == 60
337
object.timer = 0
338
object.countdownTimer--
339
if object.countdownTimer == 0
340
341
#endplatform
342
343
if currentPlayer == 0
344
if vs.playerID == 0
345
temp2 = 0
346
else
347
temp2 = 1
348
end if
349
else
350
if vs.playerID == 0
351
temp2 = 1
352
else
353
temp2 = 0
354
end if
355
end if
356
357
if temp2 == 0
358
vs.time1P = stage.seconds
359
vs.time1P *= 100
360
temp2 = stage.minutes
361
temp2 *= 6000
362
vs.time1P += temp2
363
vs.time1P += stage.milliSeconds
364
else
365
vs.time2P = stage.seconds
366
vs.time2P *= 100
367
temp2 = stage.minutes
368
temp2 *= 6000
369
vs.time2P += temp2
370
vs.time2P += stage.milliSeconds
371
end if
372
373
stage.timeOver = true
374
#platform: USE_ORIGINS
375
stage.timeEnabled = false
376
#endplatform
377
CallFunction(Player_Kill)
378
end if
379
end if
380
end if
381
end if
382
end if
383
break
384
385
case VSGAME_GOTOVSRESULTS
386
if object.timer < 384
387
object.timer += 16
388
else
389
if vs.playerID == 0
390
vs.rings1P = player[SLOT_PLAYER1].rings
391
vs.rings2P = player[SLOT_PLAYER2].rings
392
else
393
vs.rings1P = player[SLOT_PLAYER2].rings
394
vs.rings2P = player[SLOT_PLAYER1].rings
395
end if
396
stage.activeList = PRESENTATION_STAGE
397
stage.listPos = 3
398
LoadStage()
399
end if
400
401
if object.timer > 0
402
SetScreenFade(0, 0, 0, object.timer)
403
end if
404
break
405
406
case VSGAME_BOSSATTACK_FADEIN
407
if object.timer == 320
408
player[SLOT_PLAYER1].rings = vs.rings1P
409
player[SLOT_PLAYER1].speed = vs.speed
410
player[SLOT_PLAYER1].xvel = vs.speed
411
player[SLOT_PLAYER1].yvel = 0
412
player[SLOT_PLAYER1].gravity = GRAVITY_GROUND
413
player[SLOT_PLAYER1].shield = vs.items1P
414
temp0 = currentPlayer
415
temp1 = arrayPos0
416
currentPlayer = 0
417
arrayPos0 = playerCount
418
arrayPos0 += currentPlayer
419
CallFunction(Player_ApplyShield)
420
currentPlayer = temp0
421
arrayPos0 = temp1
422
temp0 = vs.time1P
423
temp0 /= 6000
424
stage.minutes = temp0
425
temp0 = vs.time1P
426
temp0 /= 100
427
temp0 %= 60
428
stage.seconds = temp0
429
temp0 = vs.time1P
430
temp0 %= 100
431
stage.milliSeconds = temp0
432
TitleCard_showZoneText = true // (The EHZ Boss Rush file already has this set btw)
433
end if
434
435
if object.timer < 256
436
stage.state = STAGE_RUNNING
437
stage.timeEnabled = true
438
player[SLOT_PLAYER1].visible = true
439
else
440
if stage.listPos == 2 // CPZ (Boss Rush)
441
player[SLOT_PLAYER1].ypos = object.ypos
442
end if
443
end if
444
445
if object.timer > 0
446
object.timer -= 16
447
else
448
object.type = TypeName[Blank Object]
449
end if
450
451
SetScreenFade(0, 0, 0, object.timer)
452
break
453
454
case VSGAME_BOSSATTACK_END
455
if object.timer > -1
456
if object.timer < 320
457
object.timer += 16
458
else
459
vs.rings1P = player[SLOT_PLAYER1].rings
460
vs.time1P = stage.seconds
461
vs.time1P *= 100
462
temp2 = stage.minutes
463
temp2 *= 6000
464
vs.time1P += temp2
465
vs.time1P += stage.milliSeconds
466
vs.items1P = player[SLOT_PLAYER1].shield
467
vs.speed = player[SLOT_PLAYER1].speed
468
stage.listPos++
469
LoadStage()
470
end if
471
472
SetScreenFade(0, 0, 0, object.timer)
473
else
474
if player[SLOT_PLAYER1].xpos > object.xpos
475
object.timer = 0
476
end if
477
end if
478
break
479
480
#platform: USE_ORIGINS
481
case VSGAME_SCREENFADE
482
object.drawOrder = 6
483
484
if object.timer > 0
485
object.timer -= 16
486
else
487
object.type = TypeName[Blank Object]
488
end if
489
break
490
#endplatform
491
end switch
492
end event
493
494
495
event ObjectDraw
496
switch object.state
497
case VSGAME_DISPLAYTAGS
498
#platform: USE_STANDALONE
499
temp0 = vs.playerID
500
temp0 ^= 1
501
DrawSpriteXY(temp0, player[SLOT_PLAYER2].xpos, player[SLOT_PLAYER2].ypos)
502
#endplatform
503
504
#platform: USE_ORIGINS
505
currentPlayer = screen.currentID
506
currentPlayer ^= 1
507
if game.playMode == BOOT_PLAYMODE_MIRRORING
508
object.direction = FLIP_X
509
DrawSpriteFX(currentPlayer, FX_FLIP, player[currentPlayer].xpos, player[currentPlayer].ypos)
510
else
511
DrawSpriteXY(currentPlayer, player[currentPlayer].xpos, player[currentPlayer].ypos)
512
end if
513
#endplatform
514
break
515
516
case VSGAME_FINISH_COUNTDOWN
517
#platform: USE_STANDALONE
518
temp0 = vs.playerID
519
temp0 ^= 1
520
DrawSpriteXY(temp0, player[SLOT_PLAYER2].xpos, player[SLOT_PLAYER2].ypos)
521
522
temp0 = object.countdownTimer
523
temp0 /= 10
524
temp0 += 2
525
temp1 = screen.xcenter
526
temp1 -= 8
527
DrawSpriteScreenXY(temp0, temp1, 13)
528
529
temp0 = object.countdownTimer
530
temp0 %= 10
531
temp0 += 2
532
temp1 += 8
533
DrawSpriteScreenXY(temp0, temp1, 13)
534
#endplatform
535
536
#platform: USE_ORIGINS
537
currentPlayer = screen.currentID
538
currentPlayer ^= 1
539
if game.playMode == BOOT_PLAYMODE_MIRRORING
540
object.direction = FLIP_X
541
DrawSpriteFX(currentPlayer, FX_FLIP, player[currentPlayer].xpos, player[currentPlayer].ypos)
542
else
543
DrawSpriteXY(currentPlayer, player[currentPlayer].xpos, player[currentPlayer].ypos)
544
end if
545
546
if screen.currentID == object.countdownPlayer
547
temp0 = object.countdownTimer
548
temp0 /= 10
549
temp0 += 2
550
temp1 = object.countdownTimer
551
temp1 %= 10
552
temp1 += 2
553
temp2 = screen.xcenter
554
temp2 -= 8
555
temp2 += 8
556
557
if game.playMode == BOOT_PLAYMODE_MIRRORING
558
object.direction = FLIP_X
559
DrawSpriteScreenFX(temp1, FX_FLIP, temp2, 13)
560
temp2 += 8
561
DrawSpriteScreenFX(temp0, FX_FLIP, temp2, 13)
562
else
563
DrawSpriteScreenXY(temp0, temp2, 13)
564
temp2 += 8
565
DrawSpriteScreenXY(temp1, temp2, 13)
566
end if
567
end if
568
#endplatform
569
break
570
571
case VSGAME_BOSSATTACK_FADEIN
572
if object.timer > 256
573
DrawRect(0, 0, screen.xsize, screen.ysize, 0x00, 0x00, 0x00, 0xFF)
574
end if
575
break
576
577
#platform: USE_ORIGINS
578
case VSGAME_SCREENFADE
579
if object.propertyValue == screen.currentID
580
DrawRect(0, 0, screen.xsize, screen.ysize, 208, 255, 224, object.timer)
581
end if
582
break
583
#endplatform
584
end switch
585
end event
586
587
588
event ObjectStartup
589
LoadSpriteSheet("Global/Display.gif")
590
SpriteFrame(-8, -32, 16, 7, 103, 48) // 1P - #0
591
SpriteFrame(-8, -32, 16, 7, 103, 56) // 2P - #1
592
593
SpriteFrame(0, 0, 8, 11, 1, 50) // 0 - #2
594
SpriteFrame(0, 0, 8, 11, 10, 50) // 1 - #3
595
SpriteFrame(0, 0, 8, 11, 19, 50) // 2 - #4
596
SpriteFrame(0, 0, 8, 11, 28, 50) // 3 - #5
597
SpriteFrame(0, 0, 8, 11, 1, 62) // 4 - #6
598
SpriteFrame(0, 0, 8, 11, 10, 62) // 5 - #7
599
SpriteFrame(0, 0, 8, 11, 19, 62) // 6 - #8
600
SpriteFrame(0, 0, 8, 11, 28, 62) // 7 - #9
601
SpriteFrame(0, 0, 8, 11, 1, 74) // 8 - #10
602
SpriteFrame(0, 0, 8, 11, 10, 74) // 9 - #11
603
604
temp0 = false
605
foreach (TypeName[VS Game], arrayPos0, ALL_ENTITIES)
606
switch object[arrayPos0].propertyValue
607
case 1 // Boss Attack (Start)
608
object[arrayPos0].state = VSGAME_BOSSATTACK_FADEIN
609
object[arrayPos0].timer = 320
610
object[arrayPos0].priority = PRIORITY_ALWAYS
611
object[arrayPos0].drawOrder = 6
612
player[SLOT_PLAYER1].visible = false
613
stage.state = STAGE_PAUSED
614
temp0++
615
break
616
617
case 2 // Boss Attack (End)
618
object[arrayPos0].state = VSGAME_BOSSATTACK_END
619
object[arrayPos0].timer = -1
620
object[arrayPos0].priority = PRIORITY_XBOUNDS
621
temp0++
622
break
623
624
default
625
object[arrayPos0].type = TypeName[Blank Object]
626
break
627
end switch
628
next
629
630
if temp0 == false
631
vs.bossAttack = false
632
end if
633
634
if options.vsMode == true
635
object[SLOT_VSGAME].type = TypeName[VS Game]
636
object[SLOT_VSGAME].priority = PRIORITY_ACTIVE
637
object[SLOT_VSGAME].drawOrder = 5
638
object[SLOT_VSGAME].countdownTimer = 60
639
end if
640
end event
641
642
643
// ========================
644
// Editor Events
645
// ========================
646
647
event RSDKEdit
648
if editor.returnVariable == true
649
switch editor.variableID
650
case EDIT_VAR_PROPVAL // property value
651
checkResult = object.propertyValue
652
break
653
654
case 0 // type
655
checkResult = object.propertyValue
656
break
657
658
end switch
659
else
660
switch editor.variableID
661
case EDIT_VAR_PROPVAL // property value
662
object.propertyValue = editor.variableValue
663
break
664
665
case 0 // type
666
object.propertyValue = editor.variableValue
667
break
668
669
end switch
670
end if
671
end event
672
673
674
event RSDKDraw
675
DrawSprite(0)
676
end event
677
678
679
event RSDKLoad
680
LoadSpriteSheet("Global/Display.gif")
681
SpriteFrame(-8, -32, 16, 7, 103, 56)
682
683
AddEditorVariable("type")
684
SetActiveVariable("type")
685
// type 0 isn't to be placed in a level
686
AddEnumVariable("Boss Attack (Start)", 1)
687
AddEnumVariable("Boss Attack (End)", 2)
688
end event
689
690