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/OOZ/BallCannon.txt
1482 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Ball Cannon 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.tablePos
14
private alias object.value2 : object.enterFrameTable
15
private alias object.value3 : object.fireFrameTable
16
private alias object.value4 : object.rotateFrameTable
17
private alias object.value5 : object.activePlayers
18
private alias object.value6 : object.lastCannon
19
private alias object.value7 : object.active
20
21
// States
22
private alias 0 : BALLCANNON_IDLE
23
private alias 1 : BALLCANNON_ENTERED
24
private alias 2 : BALLCANNON_ROTATE
25
private alias 3 : BALLCANNON_FIREPLAYER
26
private alias 4 : BALLCANNON_EXITED
27
28
// Player Aliases
29
private alias object.state : player.state
30
private alias object.visible : player.visible
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.gravity : player.gravity
37
private alias object.animationSpeed : player.animationSpeed
38
private alias object.animation : player.animation
39
private alias object.tileCollisions : player.tileCollisions
40
41
private alias object.value1 : player.timer
42
private alias object.value5 : player.rollAnimationSpeed
43
private alias object.value17 : debugMode.currentSelection
44
private alias object.value35 : player.jumpAbilityState
45
46
47
// ========================
48
// Function Declarations
49
// ========================
50
51
reserve function BallCannon_DebugDraw
52
reserve function BallCannon_DebugSpawn
53
54
55
// ========================
56
// Static Values
57
// ========================
58
59
private value BallCannon_startDebugID = 0
60
61
62
// ========================
63
// Tables
64
// ========================
65
66
// Format for FrameTable entries:
67
// [object.frame], [object.direction]
68
69
private table BallCannon_enterFrameTableU
70
0, 0
71
1, 0
72
2, 0
73
end table
74
75
private table BallCannon_enterFrameTableD
76
0, 2
77
1, 2
78
2, 2
79
end table
80
81
private table BallCannon_enterFrameTableL
82
3, 1
83
4, 1
84
5, 1
85
end table
86
87
private table BallCannon_enterFrameTableR
88
3, 0
89
4, 0
90
5, 0
91
end table
92
93
private table BallCannon_rotateFrameTableL
94
6, 7, 8, 9, 10, 11, 12, 13
95
end table
96
97
private table BallCannon_rotateFrameTableR
98
13, 12, 11, 10, 9, 8, 7, 6
99
end table
100
101
102
// ========================
103
// Function Definitions
104
// ========================
105
106
private function BallCannon_DebugDraw
107
temp0 = debugMode[0].currentSelection
108
temp0 -= BallCannon_startDebugID
109
DrawSprite(temp0)
110
end function
111
112
113
private function BallCannon_DebugSpawn
114
temp0 = debugMode[0].currentSelection
115
temp0 -= BallCannon_startDebugID
116
CreateTempObject(TypeName[Ball Cannon], temp0, object.xpos, object.ypos)
117
object[tempObjectPos].drawOrder = 4
118
object[tempObjectPos].enterFrameTable = BallCannon_enterFrameTableU
119
object[tempObjectPos].fireFrameTable = BallCannon_enterFrameTableR
120
object[tempObjectPos].rotateFrameTable = BallCannon_rotateFrameTableR
121
object[tempObjectPos].xvel = 0x100000
122
object[tempObjectPos].yvel = 0
123
object[tempObjectPos].lastCannon = true
124
125
switch object[tempObjectPos].propertyValue
126
case 0
127
object[tempObjectPos].enterFrameTable = BallCannon_enterFrameTableU
128
object[tempObjectPos].fireFrameTable = BallCannon_enterFrameTableR
129
object[tempObjectPos].rotateFrameTable = BallCannon_rotateFrameTableR
130
object[tempObjectPos].xvel = 0x100000
131
object[tempObjectPos].yvel = 0
132
break
133
134
case 1
135
object[tempObjectPos].enterFrameTable = BallCannon_enterFrameTableR
136
object[tempObjectPos].fireFrameTable = BallCannon_enterFrameTableD
137
object[tempObjectPos].rotateFrameTable = BallCannon_rotateFrameTableR
138
object[tempObjectPos].xvel = 0
139
object[tempObjectPos].yvel = 0x100000
140
break
141
142
case 2
143
object[tempObjectPos].enterFrameTable = BallCannon_enterFrameTableD
144
object[tempObjectPos].fireFrameTable = BallCannon_enterFrameTableL
145
object[tempObjectPos].rotateFrameTable = BallCannon_rotateFrameTableR
146
object[tempObjectPos].xvel = -0x100000
147
object[tempObjectPos].yvel = 0
148
break
149
150
case 3
151
object[tempObjectPos].enterFrameTable = BallCannon_enterFrameTableL
152
object[tempObjectPos].fireFrameTable = BallCannon_enterFrameTableU
153
object[tempObjectPos].rotateFrameTable = BallCannon_rotateFrameTableR
154
object[tempObjectPos].xvel = 0
155
object[tempObjectPos].yvel = -0x100000
156
break
157
158
case 4
159
object[tempObjectPos].enterFrameTable = BallCannon_enterFrameTableR
160
object[tempObjectPos].fireFrameTable = BallCannon_enterFrameTableU
161
object[tempObjectPos].rotateFrameTable = BallCannon_rotateFrameTableL
162
object[tempObjectPos].xvel = 0
163
object[tempObjectPos].yvel = -0x100000
164
break
165
166
case 5
167
object[tempObjectPos].enterFrameTable = BallCannon_enterFrameTableD
168
object[tempObjectPos].fireFrameTable = BallCannon_enterFrameTableR
169
object[tempObjectPos].rotateFrameTable = BallCannon_rotateFrameTableL
170
object[tempObjectPos].xvel = 0x100000
171
object[tempObjectPos].yvel = 0
172
break
173
174
case 6
175
object[tempObjectPos].enterFrameTable = BallCannon_enterFrameTableL
176
object[tempObjectPos].fireFrameTable = BallCannon_enterFrameTableD
177
object[tempObjectPos].rotateFrameTable = BallCannon_rotateFrameTableL
178
object[tempObjectPos].xvel = 0
179
object[tempObjectPos].yvel = 0x100000
180
break
181
182
case 7
183
object[tempObjectPos].enterFrameTable = BallCannon_enterFrameTableU
184
object[tempObjectPos].fireFrameTable = BallCannon_enterFrameTableL
185
object[tempObjectPos].rotateFrameTable = BallCannon_rotateFrameTableL
186
object[tempObjectPos].xvel = -0x100000
187
object[tempObjectPos].yvel = 0
188
break
189
end switch
190
end function
191
192
193
// ========================
194
// Events
195
// ========================
196
197
event ObjectUpdate
198
switch object.state
199
case BALLCANNON_ENTERED
200
if object.timer == 0
201
if object.tablePos == 6
202
object.tablePos = 0
203
object.timer = 3
204
object.state++
205
else
206
GetTableValue(object.frame, object.tablePos, object.enterFrameTable)
207
object.tablePos++
208
GetTableValue(object.direction, object.tablePos, object.enterFrameTable)
209
object.tablePos++
210
end if
211
end if
212
object.timer++
213
object.timer &= 3
214
break
215
216
case BALLCANNON_ROTATE
217
if object.timer == 0
218
if object.tablePos == 8
219
object.tablePos = 5
220
object.timer = 1
221
object.state++
222
else
223
GetTableValue(object.frame, object.tablePos, object.rotateFrameTable)
224
object.direction = FLIP_NONE
225
object.tablePos++
226
end if
227
end if
228
object.timer++
229
object.timer &= 1
230
break
231
232
case BALLCANNON_FIREPLAYER
233
if object.timer == 0
234
if object.tablePos < 0
235
object.tablePos = 0
236
object.state++
237
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
238
temp0 = 1
239
temp0 <<= currentPlayer
240
temp0 &= object.activePlayers
241
if temp0 != false
242
#platform: USE_ORIGINS
243
temp0 = 1
244
temp0 <<= currentPlayer
245
temp0 &= object.active
246
if temp0 == false
247
temp0 = 1
248
temp0 <<= currentPlayer
249
object.active |= temp0
250
#endplatform
251
if object.lastCannon == true
252
#platform: USE_STANDALONE
253
player[currentPlayer].state = Player_State_Air
254
#endplatform
255
#platform: USE_ORIGINS
256
player[currentPlayer].state = Player_State_Air_NoDropDash
257
#endplatform
258
player[currentPlayer].gravity = 1
259
player[currentPlayer].jumpAbilityState = 0
260
player[currentPlayer].tileCollisions = true
261
end if
262
player[currentPlayer].visible = true
263
player[currentPlayer].timer = 0
264
player[currentPlayer].speed = object.xvel
265
player[currentPlayer].xvel = object.xvel
266
player[currentPlayer].yvel = object.yvel
267
#platform: USE_ORIGINS
268
end if
269
#endplatform
270
end if
271
next
272
else
273
GetTableValue(object.direction, object.tablePos, object.fireFrameTable)
274
object.tablePos--
275
GetTableValue(object.frame, object.tablePos, object.fireFrameTable)
276
object.tablePos--
277
end if
278
end if
279
object.timer++
280
object.timer &= 3
281
break
282
283
case BALLCANNON_EXITED
284
object.timer++
285
if object.timer == 16
286
object.timer = 0
287
object.activePlayers = 0
288
#platform: USE_ORIGINS
289
object.active = false
290
#endplatform
291
object.state = BALLCANNON_IDLE
292
end if
293
break
294
295
end switch
296
297
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
298
BoxCollisionTest(C_TOUCH, object.entityPos, -4, -4, 4, 4, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
299
if checkResult == true
300
temp0 = true
301
temp0 <<= currentPlayer
302
temp0 &= object.activePlayers
303
if temp0 == 0
304
player[currentPlayer].state = Player_State_Static
305
player[currentPlayer].animation = ANI_JUMPING
306
player[currentPlayer].animationSpeed = 0xF0
307
player[currentPlayer].rollAnimationSpeed = 0xF0
308
player[currentPlayer].xpos = object.xpos
309
player[currentPlayer].ypos = object.ypos
310
player[currentPlayer].speed = 0
311
player[currentPlayer].xvel = 0
312
player[currentPlayer].yvel = 0
313
player[currentPlayer].visible = false
314
player[currentPlayer].tileCollisions = false
315
temp0 = true
316
temp0 <<= currentPlayer
317
object.activePlayers |= temp0
318
#platform: USE_ORIGINS
319
CheckGreater(object.state, BALLCANNON_IDLE)
320
temp0 = checkResult
321
CheckLower(object.state, BALLCANNON_EXITED)
322
temp0 &= checkResult
323
if temp0 == false
324
#endplatform
325
object.timer = 0
326
object.tablePos = 0
327
object.state = BALLCANNON_ENTERED
328
#platform: USE_ORIGINS
329
end if
330
#endplatform
331
if object.priority != PRIORITY_XBOUNDS_DESTROY
332
object.priority = PRIORITY_ACTIVE
333
end if
334
PlaySfx(SfxName[Rolling], false)
335
end if
336
end if
337
next
338
339
if object.outOfBounds == true
340
if object.priority != PRIORITY_XBOUNDS_DESTROY
341
object.priority = PRIORITY_BOUNDS
342
object.tablePos = 0
343
object.activePlayers = 0
344
object.active = false
345
object.timer = 0
346
GetTableValue(object.frame, 0, object.enterFrameTable)
347
GetTableValue(object.direction, 1, object.enterFrameTable)
348
object.state = BALLCANNON_IDLE
349
end if
350
end if
351
end event
352
353
354
event ObjectDraw
355
DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)
356
end event
357
358
359
event ObjectStartup
360
CheckCurrentStageFolder("Zone07")
361
if checkResult == true
362
LoadSpriteSheet("OOZ/Objects.gif")
363
SpriteFrame(-24, -40, 48, 64, 133, 142) // Enter Frame 1 (V) - #0
364
SpriteFrame(-24, -32, 48, 56, 133, 85) // Enter Frame 2 (V) - #1
365
SpriteFrame(-24, -24, 48, 48, 133, 93) // Enter Frame 3 (V) - #2
366
SpriteFrame(-24, -24, 64, 48, 1, 101) // Enter Frame 1 (H) - #3
367
SpriteFrame(-24, -24, 56, 48, 1, 150) // Enter Frame 2 (H) - #4
368
SpriteFrame(-24, -24, 48, 48, 1, 150) // Enter Frame 3 (H) - #5
369
SpriteFrame(-24, -24, 48, 48, 316, 1) // Rotate Frame 1 - #6
370
SpriteFrame(-24, -24, 48, 48, 365, 1) // Rotate Frame 2 - #7
371
SpriteFrame(-24, -24, 48, 48, 414, 1) // Rotate Frame 3 - #8
372
SpriteFrame(-24, -24, 48, 48, 463, 1) // Rotate Frame 4 - #9
373
SpriteFrame(-24, -24, 48, 48, 316, 50) // Rotate Frame 5 - #10
374
SpriteFrame(-24, -24, 48, 48, 365, 50) // Rotate Frame 6 - #11
375
SpriteFrame(-24, -24, 48, 48, 414, 50) // Rotate Frame 7 - #12
376
SpriteFrame(-24, -24, 48, 48, 463, 50) // Rotate Frame 8 - #13
377
else
378
LoadSpriteSheet("MBZ/Objects.gif")
379
SpriteFrame(-24, -40, 48, 64, 813, 861) // Enter Frame 1 (V) - #0
380
SpriteFrame(-24, -32, 48, 56, 764, 869) // Enter Frame 2 (V) - #1
381
SpriteFrame(-24, -24, 48, 48, 764, 877) // Enter Frame 3 (V) - #2
382
SpriteFrame(-24, -24, 64, 48, 763, 926) // Enter Frame 1 (H) - #3
383
SpriteFrame(-24, -24, 56, 48, 771, 975) // Enter Frame 2 (H) - #4
384
SpriteFrame(-24, -24, 48, 48, 771, 975) // Enter Frame 3 (H) - #5
385
SpriteFrame(-24, -24, 48, 48, 828, 926) // Rotate Frame 1 - #6
386
SpriteFrame(-24, -24, 48, 48, 877, 926) // Rotate Frame 2 - #7
387
SpriteFrame(-24, -24, 48, 48, 926, 926) // Rotate Frame 3 - #8
388
SpriteFrame(-24, -24, 48, 48, 975, 926) // Rotate Frame 4 - #9
389
SpriteFrame(-24, -24, 48, 48, 828, 975) // Rotate Frame 5 - #10
390
SpriteFrame(-24, -24, 48, 48, 877, 975) // Rotate Frame 6 - #11
391
SpriteFrame(-24, -24, 48, 48, 926, 975) // Rotate Frame 7 - #12
392
SpriteFrame(-24, -24, 48, 48, 975, 975) // Rotate Frame 8 - #13
393
end if
394
395
foreach (TypeName[Ball Cannon], arrayPos0, ALL_ENTITIES)
396
if object[arrayPos0].propertyValue > 7
397
object[arrayPos0].lastCannon = true
398
object[arrayPos0].propertyValue &= 7
399
end if
400
401
switch object[arrayPos0].propertyValue
402
case 0
403
object[arrayPos0].enterFrameTable = BallCannon_enterFrameTableU
404
object[arrayPos0].fireFrameTable = BallCannon_enterFrameTableR
405
object[arrayPos0].rotateFrameTable = BallCannon_rotateFrameTableR
406
object[arrayPos0].xvel = 0x100000
407
object[arrayPos0].yvel = 0
408
break
409
410
case 1
411
object[arrayPos0].enterFrameTable = BallCannon_enterFrameTableR
412
object[arrayPos0].fireFrameTable = BallCannon_enterFrameTableD
413
object[arrayPos0].rotateFrameTable = BallCannon_rotateFrameTableR
414
object[arrayPos0].xvel = 0
415
object[arrayPos0].yvel = 0x100000
416
break
417
418
case 2
419
object[arrayPos0].enterFrameTable = BallCannon_enterFrameTableD
420
object[arrayPos0].fireFrameTable = BallCannon_enterFrameTableL
421
object[arrayPos0].rotateFrameTable = BallCannon_rotateFrameTableR
422
object[arrayPos0].xvel = -0x100000
423
object[arrayPos0].yvel = 0
424
break
425
426
case 3
427
object[arrayPos0].enterFrameTable = BallCannon_enterFrameTableL
428
object[arrayPos0].fireFrameTable = BallCannon_enterFrameTableU
429
object[arrayPos0].rotateFrameTable = BallCannon_rotateFrameTableR
430
object[arrayPos0].xvel = 0
431
object[arrayPos0].yvel = -0x100000
432
break
433
434
case 4
435
object[arrayPos0].enterFrameTable = BallCannon_enterFrameTableR
436
object[arrayPos0].fireFrameTable = BallCannon_enterFrameTableU
437
object[arrayPos0].rotateFrameTable = BallCannon_rotateFrameTableL
438
object[arrayPos0].xvel = 0
439
object[arrayPos0].yvel = -0x100000
440
break
441
442
case 5
443
object[arrayPos0].enterFrameTable = BallCannon_enterFrameTableD
444
object[arrayPos0].fireFrameTable = BallCannon_enterFrameTableR
445
object[arrayPos0].rotateFrameTable = BallCannon_rotateFrameTableL
446
object[arrayPos0].xvel = 0x100000
447
object[arrayPos0].yvel = 0
448
break
449
450
case 6
451
object[arrayPos0].enterFrameTable = BallCannon_enterFrameTableL
452
object[arrayPos0].fireFrameTable = BallCannon_enterFrameTableD
453
object[arrayPos0].rotateFrameTable = BallCannon_rotateFrameTableL
454
object[arrayPos0].xvel = 0
455
object[arrayPos0].yvel = 0x100000
456
break
457
458
case 7
459
object[arrayPos0].enterFrameTable = BallCannon_enterFrameTableU
460
object[arrayPos0].fireFrameTable = BallCannon_enterFrameTableL
461
object[arrayPos0].rotateFrameTable = BallCannon_rotateFrameTableL
462
object[arrayPos0].xvel = -0x100000
463
object[arrayPos0].yvel = 0
464
break
465
466
end switch
467
468
object[arrayPos0].drawOrder = 4
469
object[arrayPos0].propertyValue = 0
470
GetTableValue(object[arrayPos0].frame, 0, object[arrayPos0].enterFrameTable)
471
GetTableValue(object[arrayPos0].direction, 1, object[arrayPos0].enterFrameTable)
472
next
473
474
temp0 = 0
475
BallCannon_startDebugID = DebugMode_ObjCount
476
while temp0 < 4
477
SetTableValue(TypeName[Ball Cannon], DebugMode_ObjCount, DebugMode_TypesTable)
478
SetTableValue(BallCannon_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
479
SetTableValue(BallCannon_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
480
DebugMode_ObjCount++
481
temp0++
482
loop
483
end event
484
485
486
// ========================
487
// Editor Events
488
// ========================
489
490
event RSDKEdit
491
if editor.returnVariable == true
492
switch editor.variableID
493
case EDIT_VAR_PROPVAL // property value
494
checkResult = object.propertyValue
495
break
496
497
case 0 // type
498
checkResult = object.propertyValue
499
checkResult &= 7
500
break
501
502
case 1 // noControlLock
503
GetBit(checkResult, object.propertyValue, 3)
504
break
505
506
end switch
507
else
508
switch editor.variableID
509
case EDIT_VAR_PROPVAL // property value
510
object.propertyValue = editor.variableValue
511
break
512
513
case 0 // type
514
editor.variableValue &= 7
515
object.propertyValue &= 0xF8
516
517
object.propertyValue |= editor.variableValue
518
break
519
520
case 1 // noControlLock
521
CheckNotEqual(editor.variableValue, false)
522
SetBit(object.propertyValue, 3, checkResult)
523
break
524
525
end switch
526
end if
527
end event
528
529
530
event RSDKDraw
531
temp0 = object.propertyValue
532
temp0 &= 7
533
534
switch temp0
535
case 0
536
object.enterFrameTable = BallCannon_enterFrameTableU
537
object.fireFrameTable = BallCannon_enterFrameTableR
538
break
539
540
case 1
541
object.enterFrameTable = BallCannon_enterFrameTableR
542
object.fireFrameTable = BallCannon_enterFrameTableD
543
break
544
545
case 2
546
object.enterFrameTable = BallCannon_enterFrameTableD
547
object.fireFrameTable = BallCannon_enterFrameTableL
548
break
549
550
case 3
551
object.enterFrameTable = BallCannon_enterFrameTableL
552
object.fireFrameTable = BallCannon_enterFrameTableU
553
break
554
555
case 4
556
object.enterFrameTable = BallCannon_enterFrameTableR
557
object.fireFrameTable = BallCannon_enterFrameTableU
558
break
559
560
case 5
561
object.enterFrameTable = BallCannon_enterFrameTableD
562
object.fireFrameTable = BallCannon_enterFrameTableR
563
break
564
565
case 6
566
object.enterFrameTable = BallCannon_enterFrameTableL
567
object.fireFrameTable = BallCannon_enterFrameTableD
568
break
569
570
case 7
571
object.enterFrameTable = BallCannon_enterFrameTableU
572
object.fireFrameTable = BallCannon_enterFrameTableL
573
break
574
575
end switch
576
577
// (drawing *behind* the main sprite)
578
if editor.showGizmos == true
579
editor.drawingOverlay = true
580
581
GetTableValue(object.frame, 0, object.fireFrameTable)
582
GetTableValue(object.direction, 1, object.fireFrameTable)
583
584
// Again, no combining FX_INK and FX_FLIP, so..
585
DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)
586
587
editor.drawingOverlay = false
588
end if
589
590
GetTableValue(object.frame, 0, object.enterFrameTable)
591
GetTableValue(object.direction, 1, object.enterFrameTable)
592
593
DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)
594
595
if editor.showGizmos == true
596
editor.drawingOverlay = true
597
598
temp0 = object.xpos
599
temp1 = object.ypos
600
switch object.enterFrameTable
601
case BallCannon_enterFrameTableU
602
temp1 -= 0x480000
603
break
604
605
case BallCannon_enterFrameTableD
606
temp1 += 0x480000
607
break
608
609
case BallCannon_enterFrameTableL
610
temp0 -= 0x480000
611
break
612
613
case BallCannon_enterFrameTableR
614
temp0 += 0x480000
615
break
616
617
end switch
618
619
DrawArrow(temp0, temp1, object.xpos, object.ypos, 0xFF, 0x00, 0x00)
620
621
temp0 = object.xpos
622
temp1 = object.ypos
623
switch object.fireFrameTable
624
case BallCannon_enterFrameTableU
625
temp1 -= 0x480000
626
break
627
628
case BallCannon_enterFrameTableD
629
temp1 += 0x480000
630
break
631
632
case BallCannon_enterFrameTableL
633
temp0 -= 0x480000
634
break
635
636
case BallCannon_enterFrameTableR
637
temp0 += 0x480000
638
break
639
640
end switch
641
642
DrawArrow(object.xpos, object.ypos, temp0, temp1, 0xFF, 0x00, 0x00)
643
644
editor.drawingOverlay = false
645
end if
646
end event
647
648
649
event RSDKLoad
650
CheckCurrentStageFolder("Zone07")
651
if checkResult == true
652
LoadSpriteSheet("OOZ/Objects.gif")
653
SpriteFrame(-24, -40, 48, 64, 133, 142) // Enter Frame 1 (V) - #0
654
SpriteFrame(-24, -32, 48, 56, 133, 85) // Enter Frame 2 (V) - #1
655
SpriteFrame(-24, -24, 48, 48, 133, 93) // Enter Frame 3 (V) - #2
656
SpriteFrame(-24, -24, 64, 48, 1, 101) // Enter Frame 1 (H) - #3
657
SpriteFrame(-24, -24, 56, 48, 1, 150) // Enter Frame 2 (H) - #4
658
SpriteFrame(-24, -24, 48, 48, 1, 150) // Enter Frame 3 (H) - #5
659
SpriteFrame(-24, -24, 48, 48, 316, 1) // Rotate Frame 1 - #6
660
SpriteFrame(-24, -24, 48, 48, 365, 1) // Rotate Frame 2 - #7
661
SpriteFrame(-24, -24, 48, 48, 414, 1) // Rotate Frame 3 - #8
662
SpriteFrame(-24, -24, 48, 48, 463, 1) // Rotate Frame 4 - #9
663
SpriteFrame(-24, -24, 48, 48, 316, 50) // Rotate Frame 5 - #10
664
SpriteFrame(-24, -24, 48, 48, 365, 50) // Rotate Frame 6 - #11
665
SpriteFrame(-24, -24, 48, 48, 414, 50) // Rotate Frame 7 - #12
666
SpriteFrame(-24, -24, 48, 48, 463, 50) // Rotate Frame 8 - #13
667
else
668
LoadSpriteSheet("MBZ/Objects.gif")
669
SpriteFrame(-24, -40, 48, 64, 813, 861) // Enter Frame 1 (V) - #0
670
SpriteFrame(-24, -32, 48, 56, 764, 869) // Enter Frame 2 (V) - #1
671
SpriteFrame(-24, -24, 48, 48, 764, 877) // Enter Frame 3 (V) - #2
672
SpriteFrame(-24, -24, 64, 48, 763, 926) // Enter Frame 1 (H) - #3
673
SpriteFrame(-24, -24, 56, 48, 771, 975) // Enter Frame 2 (H) - #4
674
SpriteFrame(-24, -24, 48, 48, 771, 975) // Enter Frame 3 (H) - #5
675
SpriteFrame(-24, -24, 48, 48, 828, 926) // Rotate Frame 1 - #6
676
SpriteFrame(-24, -24, 48, 48, 877, 926) // Rotate Frame 2 - #7
677
SpriteFrame(-24, -24, 48, 48, 926, 926) // Rotate Frame 3 - #8
678
SpriteFrame(-24, -24, 48, 48, 975, 926) // Rotate Frame 4 - #9
679
SpriteFrame(-24, -24, 48, 48, 828, 975) // Rotate Frame 5 - #10
680
SpriteFrame(-24, -24, 48, 48, 877, 975) // Rotate Frame 6 - #11
681
SpriteFrame(-24, -24, 48, 48, 926, 975) // Rotate Frame 7 - #12
682
SpriteFrame(-24, -24, 48, 48, 975, 975) // Rotate Frame 8 - #13
683
end if
684
685
AddEditorVariable("type")
686
SetActiveVariable("type")
687
AddEnumVariable("Up -> Right", 0)
688
AddEnumVariable("Right -> Down", 1)
689
AddEnumVariable("Down -> Left", 2)
690
AddEnumVariable("Left -> Up", 3)
691
AddEnumVariable("Right -> Up", 4)
692
AddEnumVariable("Down -> Right", 5)
693
AddEnumVariable("Left -> Down", 6)
694
AddEnumVariable("Up -> Left", 7)
695
696
AddEditorVariable("noControlLock")
697
SetActiveVariable("noControlLock")
698
AddEnumVariable("false", false)
699
AddEnumVariable("true", true)
700
end event
701
702