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/Monitor.txt
1479 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Monitor 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.contentsPos.y
13
private alias object.value1 : object.timer
14
private alias object.value3 : object.rewardPlayer
15
private alias object.value31 : object.altContents
16
17
// Monitor type aliases
18
private alias 0 : MONITOR_BLANK
19
private alias 1 : MONITOR_RINGS
20
private alias 2 : MONITOR_SHIELD_BLUE
21
private alias 3 : MONITOR_INVINCIBILITY
22
private alias 4 : MONITOR_SPEEDSHOES
23
private alias 5 : MONITOR_1UP_SONIC
24
private alias 6 : MONITOR_1UP_TAILS
25
private alias 7 : MONITOR_1UP_KNUX
26
private alias 8 : MONITOR_SUPER
27
private alias 9 : MONITOR_SHIELD_BUBBLE
28
private alias 10 : MONITOR_SHIELD_FIRE
29
private alias 11 : MONITOR_SHIELD_LIGHTNING
30
private alias 12 : MONITOR_EGGMAN
31
private alias 13 : MONITOR_TELEPORT
32
private alias 14 : MONITOR_RANDOM
33
private alias 15 : MONITOR_DEBUG_SHIELD
34
private alias 16 : MONITOR_DEBUG_EMERALDS
35
private alias 17 : MONITOR_1UP_AMY // Origins exclusive
36
37
private alias 16 : MONITOR_COUNT
38
39
// Monitor states
40
private alias 0 : MONITOR_STATE_IDLE
41
private alias 1 : MONITOR_STATE_FALL
42
43
// Broken monitor states
44
private alias 0 : MONITOR_STATE_RISE
45
46
// Player Aliases
47
private alias object.state : player.state
48
private alias object.controlMode : player.controlMode
49
private alias object.propertyValue : player.character
50
private alias object.yvel : player.yvel
51
private alias object.gravity : player.gravity
52
private alias object.animation : player.animation
53
private alias object.value16 : player.isSidekick
54
private alias object.value17 : debugMode.currentSelection
55
private alias object.value25 : player.gravityStrength
56
private alias object.value40 : player.hitboxLeft
57
private alias object.value38 : player.hitboxTop
58
private alias object.value41 : player.hitboxRight
59
private alias object.value39 : player.hitboxBottom
60
61
// Game Modes
62
private alias 2 : MODE_TIMEATTACK
63
64
// Shield Types Aliases
65
private alias 0 : SHIELDTYPE_S2
66
private alias 1 : SHIELDTYPE_S3
67
private alias 2 : SHIELDTYPE_RAND_S2
68
private alias 3 : SHIELDTYPE_RAND_S3
69
70
// Item Mode Aliases
71
private alias 0 : ITEMMODE_NOPREFERENCE
72
private alias 1 : ITEMMODE_RANDOM
73
private alias 2 : ITEMMODE_TELEPORTONLY
74
private alias 3 : ITEMMODE_FIXED
75
76
// Path ID Aliases
77
private alias 0 : PATH_A
78
79
80
// ========================
81
// Function Declarations
82
// ========================
83
84
reserve function Monitor_DebugDraw
85
reserve function Monitor_DebugSpawn
86
87
88
// ========================
89
// Static Values
90
// ========================
91
92
private value Monitor_startDebugID = 0
93
94
95
// ========================
96
// Tables
97
// ========================
98
99
// This variant uses S2 shields only
100
private table Monitor_randTypesTable_S2
101
1 // MONITOR_RINGS
102
2 // MONITOR_SHIELD_BLUE
103
3 // MONITOR_INVINCIBILITY
104
4 // MONITOR_SPEEDSHOES
105
5 // MONITOR_1UP_SONIC
106
12 // MONITOR_EGGMAN
107
13 // MONITOR_TELEPORT
108
1 // MONITOR_RINGS
109
2 // MONITOR_SHIELD_BLUE
110
1 // MONITOR_RINGS
111
end table
112
113
// This table uses S3 shields as well!
114
private table Monitor_randTypesTable_S3
115
1 // MONITOR_RINGS
116
2 // MONITOR_SHIELD_BLUE
117
3 // MONITOR_INVINCIBILITY
118
4 // MONITOR_SPEEDSHOES
119
5 // MONITOR_1UP_SONIC
120
9 // MONITOR_SHIELD_BUBBLE
121
10 // MONITOR_SHIELD_FIRE
122
11 // MONITOR_SHIELD_LIGHTNING
123
12 // MONITOR_EGGMAN
124
13 // MONITOR_TELEPORT
125
end table
126
127
128
// ========================
129
// Function Definitions
130
// ========================
131
132
private function Monitor_DebugDraw
133
DrawSprite(0)
134
135
temp0 = debugMode[0].currentSelection
136
temp0 -= Monitor_startDebugID
137
if temp0 == MONITOR_1UP_SONIC
138
#platform: USE_STANDALONE
139
temp0 += stage.playerListPos
140
#endplatform
141
#platform: USE_ORIGINS
142
// Since Amy's monitor ID isn't with the other characters, just force her icon to show up if we're playing as her
143
// (Not sure why they bothered since you can't spawn life monitors in Origins but whatever)
144
if stage.playerListPos != PLAYER_AMY
145
temp0 += stage.playerListPos
146
else
147
temp0 = 19
148
end if
149
#endplatform
150
else
151
if temp0 > MONITOR_1UP_SONIC
152
temp0 += 2
153
end if
154
end if
155
156
temp0 += 2
157
DrawSprite(temp0)
158
end function
159
160
161
private function Monitor_DebugSpawn
162
temp0 = debugMode[0].currentSelection
163
temp0 -= Monitor_startDebugID
164
if temp0 == MONITOR_1UP_SONIC
165
#platform: USE_STANDALONE
166
temp0 += stage.playerListPos
167
#endplatform
168
#platform: USE_ORIGINS
169
// Since Amy's monitor ID isn't with the other characters, just force her icon to show up if we're playing as her
170
// (Not sure why they bothered since you can't spawn life monitors in Origins but whatever)
171
if stage.playerListPos != PLAYER_AMY
172
temp0 += stage.playerListPos
173
else
174
temp0 = 19
175
end if
176
#endplatform
177
else
178
if temp0 > MONITOR_1UP_SONIC
179
temp0 += 2
180
end if
181
end if
182
183
CreateTempObject(TypeName[Monitor], temp0, object.xpos, object.ypos)
184
object[tempObjectPos].frame = object[tempObjectPos].propertyValue
185
object[tempObjectPos].frame += 2
186
end function
187
188
189
// ========================
190
// Events
191
// ========================
192
193
event ObjectUpdate
194
if object.state == MONITOR_STATE_FALL
195
object.yvel += 0x3800
196
object.ypos += object.yvel
197
if object.yvel >= 0
198
ObjectTileCollision(CSIDE_FLOOR, 0, 16, PATH_A)
199
if checkResult == true
200
object.yvel = 0
201
object.state = MONITOR_STATE_IDLE
202
end if
203
end if
204
end if
205
206
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
207
CheckGreater(player[currentPlayer].yvel, -1)
208
temp0 = checkResult
209
CheckEqual(player[currentPlayer].gravity, GRAVITY_GROUND)
210
temp0 |= checkResult
211
if temp0 == true
212
CheckEqual(player[currentPlayer].animation, ANI_JUMPING)
213
temp0 = checkResult
214
CheckEqual(player[currentPlayer].animation, ANI_GLIDING)
215
temp0 |= checkResult
216
CheckEqual(player[currentPlayer].animation, ANI_GLIDING_STOP)
217
temp0 |= checkResult
218
#platform: USE_ORIGINS
219
CheckEqual(player[currentPlayer].animation, ANI_HAMMER_JUMP)
220
temp0 |= checkResult
221
CheckEqual(player[currentPlayer].animation, ANI_HAMMER_DASH)
222
temp0 |= checkResult
223
#endplatform
224
if temp0 == true
225
if player[currentPlayer].isSidekick == false
226
BoxCollisionTest(C_TOUCH, object.entityPos, -16, -14, 16, 16, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)
227
if checkResult == true
228
object.state = MONITOR_STATE_RISE
229
CreateTempObject(TypeName[Smoke Puff], 0, object.xpos, object.ypos)
230
object[tempObjectPos].drawOrder = 4
231
player[currentPlayer].yvel += player[currentPlayer].gravityStrength
232
player[currentPlayer].yvel += player[currentPlayer].gravityStrength
233
FlipSign(player[currentPlayer].yvel)
234
235
object.type = TypeName[Broken Monitor]
236
object.rewardPlayer = currentPlayer
237
if object.priority != PRIORITY_XBOUNDS_DESTROY
238
object.priority = PRIORITY_ACTIVE
239
end if
240
241
object.alpha = 0xFF
242
object.contentsPos.y = object.ypos
243
object.timer = -0x30000
244
if object.propertyValue == MONITOR_RANDOM
245
vs.randomValue *= 1103515245
246
vs.randomValue += 12345
247
vs.randomValue &= 0x7FFFFFFF
248
temp0 = vs.randomValue
249
temp0 >>= 16
250
temp0 %= 10
251
252
if options.vsMode == true
253
if player[currentPlayer].character == PLAYER_SONIC_A // only let Sonic have access to the elemental shields, they're useless to all other chars anyway
254
GetTableValue(object.propertyValue, temp0, Monitor_randTypesTable_S3)
255
else
256
GetTableValue(object.propertyValue, temp0, Monitor_randTypesTable_S2)
257
end if
258
259
if object.propertyValue == MONITOR_TELEPORT
260
// If we have a Teleport monitor but either of the characters aren't ready to be teleported at the moment, then
261
// just transform the monitor into a more generic reward instead
262
263
if player[0].controlMode == CONTROLMODE_NONE
264
object.propertyValue = MONITOR_SHIELD_BLUE
265
end if
266
267
if player[1].controlMode == CONTROLMODE_NONE
268
object.propertyValue = MONITOR_SHIELD_BLUE
269
end if
270
271
if player[0].state == Player_State_Static
272
object.propertyValue = MONITOR_RINGS
273
end if
274
275
if player[1].state == Player_State_Static
276
object.propertyValue = MONITOR_RINGS
277
end if
278
end if
279
else
280
if options.shieldType == SHIELDTYPE_RAND_S3
281
GetTableValue(object.propertyValue, temp0, Monitor_randTypesTable_S3)
282
else
283
GetTableValue(object.propertyValue, temp0, Monitor_randTypesTable_S2)
284
end if
285
286
if object.propertyValue == MONITOR_TELEPORT
287
object.propertyValue = MONITOR_RINGS
288
end if
289
end if
290
end if
291
292
if options.vsMode == true
293
if vs.playerID == 0
294
if currentPlayer == 0
295
vs.items1P++
296
else
297
vs.items2P++
298
end if
299
else
300
if currentPlayer == 1
301
vs.items1P++
302
else
303
vs.items2P++
304
end if
305
end if
306
end if
307
308
PlaySfx(SfxName[Destroy], false)
309
end if
310
else
311
BoxCollisionTest(C_SOLID, object.entityPos, -15, -14, 15, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
312
end if
313
else
314
BoxCollisionTest(C_SOLID, object.entityPos, -15, -14, 15, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
315
end if
316
else
317
BoxCollisionTest(C_SOLID, object.entityPos, -15, -16, 15, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
318
if checkResult == COL_BOTTOM
319
object.state = MONITOR_STATE_FALL
320
object.yvel = -0x20000
321
player[currentPlayer].yvel = 0x20000
322
end if
323
end if
324
next
325
end event
326
327
328
event ObjectDraw
329
DrawSprite(0)
330
331
switch StageSetup_monitorOverlayFrame
332
case 0
333
case 1
334
break
335
336
case 6
337
case 7
338
DrawSprite(1)
339
break
340
341
case 12
342
case 13
343
DrawSprite(2)
344
break
345
346
default
347
DrawSprite(object.frame)
348
break
349
end switch
350
end event
351
352
353
event ObjectStartup
354
LoadSpriteSheet("Global/Items.gif")
355
SpriteFrame(-16, -16, 32, 32, 18, 1) // 0 - Base monitor sprite
356
SpriteFrame(-8, -9, 16, 14, 18, 51) // 1 - Static 1
357
SpriteFrame(-8, -9, 16, 14, 35, 51) // 2 - Static 2
358
SpriteFrame(-8, -9, 16, 14, 18, 66) // 3 - MONITOR_RINGS
359
SpriteFrame(-8, -9, 16, 14, 35, 66) // 4 - MONITOR_SHIELD_BLUE
360
SpriteFrame(-8, -9, 16, 14, 18, 81) // 5 - MONITOR_INVINCIBILITY
361
SpriteFrame(-8, -9, 16, 14, 35, 81) // 6 - MONITOR_SPEEDSHOES
362
363
// Amy's monitor icon is at the end of the list
364
#platform: USE_ORIGINS
365
if game.coinMode == false
366
#endplatform
367
SpriteFrame(-8, -9, 16, 14, 18, 96) // 7 - MONITOR_1UP_SONIC
368
SpriteFrame(-8, -9, 16, 14, 35, 96) // 8 - MONITOR_1UP_TAILS
369
SpriteFrame(-8, -9, 16, 14, 18, 111) // 9 - MONITOR_1UP_KNUX
370
#platform: USE_ORIGINS
371
else
372
SpriteFrame(-8, -9, 16, 14, 35, 186) // 7 - MONITOR_1UP_SONIC (Coin)
373
SpriteFrame(-8, -9, 16, 14, 35, 186) // 8 - MONITOR_1UP_TAILS (Coin but again)
374
SpriteFrame(-8, -9, 16, 14, 35, 186) // 9 - MONITOR_1UP_KNUX (Coin but yet again)
375
end if
376
#endplatform
377
378
SpriteFrame(-8, -9, 16, 14, 35, 111) // 10 - MONITOR_SUPER
379
SpriteFrame(-8, -9, 16, 14, 18, 141) // 11 - MONITOR_SHIELD_BUBBLE
380
SpriteFrame(-8, -9, 16, 14, 35, 126) // 12 - MONITOR_SHIELD_FIRE
381
SpriteFrame(-8, -9, 16, 14, 18, 126) // 13 - MONITOR_SHIELD_LIGHTNING
382
SpriteFrame(-8, -9, 16, 14, 35, 141) // 14 - MONITOR_EGGMAN
383
SpriteFrame(-8, -9, 16, 14, 18, 156) // 15 - MONITOR_TELEPORT
384
SpriteFrame(-8, -9, 16, 14, 35, 156) // 16 - MONITOR_RANDOM
385
SpriteFrame(-8, -9, 16, 14, 18, 171) // 17 - MONITOR_DEBUG_SHIELD
386
SpriteFrame(-8, -9, 16, 14, 35, 171) // 18 - MONITOR_DEBUG_EMERALDS
387
#platform: USE_ORIGINS
388
if game.coinMode == false
389
SpriteFrame(-8, -9, 16, 14, 18, 201) // 19 - MONITOR_1UP_AMY
390
else
391
SpriteFrame(-8, -9, 16, 14, 35, 186) // 19 - MONITOR_1UP_AMY (The long awaited return of Coin)
392
end if
393
#endplatform
394
395
// (The Mania monitor in the Origins version's spritesheet is unused btw)
396
397
Monitor_startDebugID = DebugMode_ObjCount
398
Monitor_startDebugID--
399
temp0 = MONITOR_BLANK
400
while temp0 < MONITOR_COUNT
401
temp2 = true
402
// Amy's monitor type isn't added here, instead the debug mode functions force it in when playing as her
403
if temp0 >= MONITOR_1UP_SONIC
404
if temp0 <= MONITOR_1UP_KNUX
405
temp1 = temp0
406
temp1 -= MONITOR_1UP_SONIC
407
if stage.playerListPos != temp1
408
temp2 = false
409
end if
410
end if
411
end if
412
413
if temp2 == true
414
SetTableValue(TypeName[Monitor], DebugMode_ObjCount, DebugMode_TypesTable)
415
SetTableValue(Monitor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
416
SetTableValue(Monitor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
417
DebugMode_ObjCount++
418
end if
419
temp0++
420
loop
421
422
foreach (TypeName[Monitor], arrayPos0, ALL_ENTITIES)
423
object[arrayPos0].altContents = object[arrayPos0].propertyValue
424
object[arrayPos0].altContents >>= 4
425
object[arrayPos0].propertyValue &= 15
426
next
427
428
// Turn all 1UP monitors into the icons of the appropriate character
429
if stage.playerListPos == PLAYER_TAILS_A
430
foreach (TypeName[Monitor], arrayPos0, ALL_ENTITIES)
431
if object[arrayPos0].propertyValue == MONITOR_1UP_SONIC
432
object[arrayPos0].propertyValue = MONITOR_1UP_TAILS
433
end if
434
next
435
end if
436
437
if stage.playerListPos == PLAYER_KNUCKLES_A
438
foreach (TypeName[Monitor], arrayPos0, ALL_ENTITIES)
439
if object[arrayPos0].propertyValue == MONITOR_1UP_SONIC
440
object[arrayPos0].propertyValue = MONITOR_1UP_KNUX
441
end if
442
next
443
end if
444
445
#platform: USE_ORIGINS
446
if stage.playerListPos == PLAYER_AMY
447
foreach (TypeName[Monitor], arrayPos0, ALL_ENTITIES)
448
if object[arrayPos0].propertyValue == MONITOR_1UP_SONIC
449
object[arrayPos0].propertyValue = MONITOR_1UP_AMY
450
end if
451
next
452
end if
453
#endplatform
454
455
// Only 1 life in Time Attack, remove all 1UP monitors
456
if options.gameMode == MODE_TIMEATTACK
457
foreach (TypeName[Monitor], arrayPos0, ALL_ENTITIES)
458
if object[arrayPos0].propertyValue == MONITOR_1UP_SONIC
459
object[arrayPos0].type = TypeName[Blank Object]
460
end if
461
next
462
end if
463
464
if options.vsMode == true
465
// Set up the monitors for VS mode
466
switch vs.itemMode
467
case ITEMMODE_RANDOM
468
foreach (TypeName[Monitor], arrayPos0, ALL_ENTITIES)
469
object[arrayPos0].propertyValue = MONITOR_RANDOM
470
next
471
break
472
473
case ITEMMODE_TELEPORTONLY
474
foreach (TypeName[Monitor], arrayPos0, ALL_ENTITIES)
475
object[arrayPos0].propertyValue = MONITOR_TELEPORT
476
next
477
break
478
479
// (nothing will happen for ITEMMODE_NOPREFERENCE and ITEMMODE_FIXED, since the monitors should be left alone)
480
481
end switch
482
else
483
// Set up the shield monitors
484
if options.shieldType > SHIELDTYPE_S3
485
foreach (TypeName[Monitor], arrayPos0, ALL_ENTITIES)
486
object[arrayPos0].propertyValue = MONITOR_RANDOM
487
next
488
else
489
if options.shieldType == SHIELDTYPE_S2
490
foreach (TypeName[Monitor], arrayPos0, ALL_ENTITIES)
491
if object[arrayPos0].propertyValue >= MONITOR_SHIELD_BUBBLE
492
if object[arrayPos0].propertyValue <= MONITOR_SHIELD_LIGHTNING
493
if object[arrayPos0].altContents == MONITOR_BLANK
494
object[arrayPos0].type = TypeName[Blank Object]
495
else
496
object[arrayPos0].propertyValue = object[arrayPos0].altContents
497
end if
498
end if
499
end if
500
next
501
end if
502
end if
503
end if
504
505
foreach (TypeName[Monitor], arrayPos0, ALL_ENTITIES)
506
object[arrayPos0].frame = object[arrayPos0].propertyValue
507
object[arrayPos0].frame += 2
508
next
509
end event
510
511
512
// ========================
513
// Editor Events
514
// ========================
515
516
event RSDKEdit
517
if editor.returnVariable == true
518
switch editor.variableID
519
case EDIT_VAR_PROPVAL // property value
520
checkResult = object.propertyValue
521
break
522
523
case 0 // contents
524
checkResult = object.propertyValue
525
checkResult &= 0xF
526
break
527
528
case 1 // altContents
529
checkResult = object.propertyValue
530
checkResult >>= 4
531
checkResult &= 0xF
532
break
533
534
end switch
535
else
536
switch editor.variableID
537
case EDIT_VAR_PROPVAL // property value
538
object.propertyValue = editor.variableValue
539
break
540
541
case 0 // contents
542
temp0 = editor.variableValue
543
temp0 &= 0xF
544
object.propertyValue &= 0xF0
545
object.propertyValue |= temp0
546
break
547
548
case 1 // altContents
549
temp0 = editor.variableValue
550
temp0 &= 0xF
551
temp0 <<= 4
552
object.propertyValue &= 0xF
553
object.propertyValue |= temp0
554
break
555
end switch
556
end if
557
end event
558
559
560
event RSDKDraw
561
object.frame = object.propertyValue
562
object.frame &= 0xF
563
564
DrawSprite(0)
565
DrawSprite(object.frame)
566
end event
567
568
569
event RSDKLoad
570
LoadSpriteSheet("Global/Items.gif")
571
SpriteFrame(-16, -16, 32, 32, 18, 1) // 0 - Base monitor sprite
572
SpriteFrame(-8, -9, 16, 14, 18, 66) // 1 - MONITOR_RINGS
573
SpriteFrame(-8, -9, 16, 14, 35, 66) // 2 - MONITOR_SHIELD_BLUE
574
SpriteFrame(-8, -9, 16, 14, 18, 81) // 3 - MONITOR_INVINCIBILITY
575
SpriteFrame(-8, -9, 16, 14, 35, 81) // 4 - MONITOR_SPEEDSHOES
576
SpriteFrame(-8, -9, 16, 14, 18, 96) // 5 - MONITOR_1UP_SONIC
577
SpriteFrame(-8, -9, 16, 14, 35, 96) // 6 - MONITOR_1UP_TAILS
578
SpriteFrame(-8, -9, 16, 14, 18, 111) // 7 - MONITOR_1UP_KNUX
579
SpriteFrame(-8, -9, 16, 14, 35, 111) // 8 - MONITOR_SUPER
580
SpriteFrame(-8, -9, 16, 14, 18, 141) // 9 - MONITOR_SHIELD_BUBBLE
581
SpriteFrame(-8, -9, 16, 14, 35, 126) // 10 - MONITOR_SHIELD_FIRE
582
SpriteFrame(-8, -9, 16, 14, 18, 126) // 11 - MONITOR_SHIELD_LIGHTNING
583
SpriteFrame(-8, -9, 16, 14, 35, 141) // 12 - MONITOR_EGGMAN
584
SpriteFrame(-8, -9, 16, 14, 18, 156) // 13 - MONITOR_TELEPORT
585
SpriteFrame(-8, -9, 16, 14, 35, 156) // 14 - MONITOR_RANDOM
586
SpriteFrame(-8, -9, 16, 14, 18, 171) // 15 - MONITOR_DEBUG_SHIELD
587
SpriteFrame(-8, -9, 16, 14, 35, 171) // 16 - MONITOR_DEBUG_EMERALDS
588
SpriteFrame(-8, -9, 16, 14, 18, 201) // 17 - MONITOR_1UP_AMY
589
590
AddEditorVariable("contents")
591
SetActiveVariable("contents")
592
AddEnumVariable("None", MONITOR_BLANK)
593
AddEnumVariable("10 Rings", MONITOR_RINGS)
594
AddEnumVariable("Blue Shield", MONITOR_SHIELD_BLUE)
595
AddEnumVariable("Invincibility", MONITOR_INVINCIBILITY)
596
AddEnumVariable("Speed Shoes", MONITOR_SPEEDSHOES)
597
AddEnumVariable("1UP (Sonic)", MONITOR_1UP_SONIC)
598
AddEnumVariable("1UP (Tails)", MONITOR_1UP_TAILS)
599
AddEnumVariable("1UP (Knux)", MONITOR_1UP_KNUX)
600
AddEnumVariable("Super", MONITOR_SUPER)
601
AddEnumVariable("Bubble Shield", MONITOR_SHIELD_BUBBLE)
602
AddEnumVariable("Fire Shield", MONITOR_SHIELD_FIRE)
603
AddEnumVariable("Lightning Shield", MONITOR_SHIELD_LIGHTNING)
604
AddEnumVariable("Eggman", MONITOR_EGGMAN)
605
AddEnumVariable("Teleport", MONITOR_TELEPORT)
606
AddEnumVariable("Random", MONITOR_RANDOM)
607
AddEnumVariable("Shields Toggle", MONITOR_DEBUG_SHIELD)
608
609
AddEditorVariable("altContents")
610
SetActiveVariable("altContents")
611
AddEnumVariable("None", MONITOR_BLANK)
612
AddEnumVariable("10 Rings", MONITOR_RINGS)
613
AddEnumVariable("Blue Shield", MONITOR_SHIELD_BLUE)
614
AddEnumVariable("Invincibility", MONITOR_INVINCIBILITY)
615
AddEnumVariable("Speed Shoes", MONITOR_SPEEDSHOES)
616
AddEnumVariable("1UP (Sonic)", MONITOR_1UP_SONIC)
617
AddEnumVariable("1UP (Tails)", MONITOR_1UP_TAILS)
618
AddEnumVariable("1UP (Knux)", MONITOR_1UP_KNUX)
619
AddEnumVariable("Super", MONITOR_SUPER)
620
AddEnumVariable("Bubble Shield", MONITOR_SHIELD_BUBBLE)
621
AddEnumVariable("Fire Shield", MONITOR_SHIELD_FIRE)
622
AddEnumVariable("Lightning Shield", MONITOR_SHIELD_LIGHTNING)
623
AddEnumVariable("Eggman", MONITOR_EGGMAN)
624
AddEnumVariable("Teleport", MONITOR_TELEPORT)
625
AddEnumVariable("Random", MONITOR_RANDOM)
626
AddEnumVariable("Shields Toggle", MONITOR_DEBUG_SHIELD)
627
end event
628
629