Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/Mission/Boss_Body2.txt
1319 views
1
//----------------Sonic CD Boss Body 2 Script-----------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
//---------Used on Mission "M099 - Eggman: Speed Up"----------//
5
6
// Aliases
7
#alias Object.Value0 : Object.FaceEntity
8
#alias Object.Value1 : Object.LegJointREntity
9
#alias Object.Value2 : Object.LegJointLEntity
10
#alias Object.Value3 : Object.InFloor
11
// Value4 is used to check key events, forward/backward movement and currently active leg
12
#alias Object.Value4 : Object.BitHolder
13
#alias Object.Value5 : Object.ChargeStart
14
#alias Object.Value6 : Object.ChargeDistance
15
#alias Object.Value7 : Object.ChargeXPos
16
17
// General Aliases
18
#alias Object.State : BossPart.State
19
#alias Object.Value4 : BossPart.Charging
20
#alias Object.Value2 : BossPart.XOffSet
21
#alias Object.Value5 : BossPart.YOffSet
22
23
// Face Aliases
24
#alias Object[-1].YPos : Face.YPos
25
#alias Object.Value2 : Face.ShoulderEntity
26
27
// Shoulder Aliases
28
#alias Object.Value1 : Shoulder.ArmJointLEntity
29
#alias Object.Value2 : Shoulder.ArmJointREntity
30
31
// Leg Joint Aliases
32
#alias Object.Value1 : LegJointR.LegREntity
33
#alias Object.Value1 : LegJointL.LegLEntity
34
35
#alias Object.Value1 : LegJoint.LegEntity
36
#alias Object.Value4 : LegJoint.LegSide
37
38
// Leg Aliases
39
#alias Object.Value1 : LegR.FootREntity
40
#alias Object.Value1 : LegL.FootLEntity
41
42
#alias Object.Value1 : Leg.FootEntity
43
#alias Object.Value4 : Leg.LegSide
44
45
// Foot Aliases
46
#alias Object.Value4 : Foot.LegSide
47
48
// Arm Joint Aliases
49
#alias Object.Value1 : ArmJointR.ArmREntity
50
#alias Object.Value1 : ArmJointL.ArmLEntity
51
52
// Arm Aliases
53
#alias Object.Frame : Arm.Frame
54
55
// States
56
#alias 0 : BOSSBODY2_SETUP
57
#alias 1 : BOSSBODY2_DESCEND
58
#alias 2 : BOSSBODY2_LANDING
59
#alias 3 : BOSSBODY2_FIRST_STEP
60
#alias 4 : BOSSBODY2_MOVE_FORWARD
61
#alias 5 : BOSSBODY2_MOVE_BACKWARDS
62
#alias 6 : BOSSBODY2_PREPARE_CHARGING
63
#alias 7 : BOSSBODY2_DESTROYED
64
#alias 8 : BOSSBODY2_STOP_CHARGE
65
66
// Boss Foot States
67
#alias 1 : BOSSFOOT2_STEP
68
#alias 2 : BOSSFOOT2_HANDLE_STEP
69
#alias 5 : BOSSFOOT2_LANDING
70
71
// Boss Leg States
72
#alias 1 : BOSSLEG2_LANDING
73
#alias 2 : BOSSLEG2_L_MIMIC_R
74
#alias 3 : BOSSLEG2_MOVE
75
#alias 4 : BOSSLEG2_MOVE_OPPOSITE
76
#alias 5 : BOSSLEG2_MOVE_C
77
#alias 6 : BOSSLEG2_MOVE_OPPOSITE_C
78
79
// Boss Leg Joint States
80
#alias 1 : BOSSLEGJOINT2_STEP_START
81
#alias 4 : BOSSLEGJOINT2_WAIT_LEG
82
#alias 5 : BOSSLEGJOINT2_LANDING
83
#alias 6 : BOSSLEGJOINT2_DESCEND
84
#alias 7 : BOSSLEGJOINT2_STAND
85
#alias 8 : BOSSLEGJOINT2_MIMIC_RIGHT
86
#alias 9 : BOSSLEGJOINT2_STEP_START_BW
87
#alias 11 : BOSSLEGJOINT2_WAIT_LEG_BW
88
89
// Boss Arm States
90
#alias 3 : BOSSARM2_MOVE_TO_FRONT
91
#alias 4 : BOSSARM2_MOVE_TO_BACK
92
#alias 5 : BOSSARM2_START_CHARGE
93
94
// Boss Arm Joint
95
#alias 1 : BOSSARMJOINT2_REPOSITION_F
96
#alias 3 : BOSSARMJOINT2_REPOSITION_B
97
#alias 5 : BOSSARMJOINT2_DESTROYED
98
99
// Object.BitHolder SetBit Values
100
// Bit 0 - Check of key events for BossFace (landing, start of charge, first move, etc)
101
// Bit 1 - Forward or Backward movement (Forwards 0, Backwards 1)
102
// Bit 6 - Which leg moves (Left 0, Right 1)
103
104
// Bit 0 Aliases
105
#alias 0 : KEY_EVENT_FALSE
106
#alias 1 : KEY_EVENT_TRUE
107
108
// Bit 1 Aliases
109
#alias 0 : MOVE_FORWARD
110
#alias 1 : MOVE_BACKWARDS
111
112
// Bit 6 Aliases
113
#alias 0 : LEFT_LEG_ACTIVE
114
#alias 1 : RIGHT_LEG_ACTIVE
115
116
// Collision Sides
117
#alias 0 : CSIDE_FLOOR
118
119
// Function declarations
120
#function BossBody2_RestoreNormalSpeed
121
#function BossBody2_SetLegPosSaveTrue
122
#function BossBody2_SetLegPosSaveFalse
123
#function BossBody2_SwitchLeg
124
#function BossBody2_SwitchLeg_Revert
125
#function BossBody2_MoveRArmToFront
126
#function BossBody2_MoveLArmToFront
127
#function BossBody2_HandleCharge
128
#function BossBody2_SetArmsToCharge
129
130
131
function BossBody2_RestoreNormalSpeed
132
ArrayPos0=Object.LegJointREntity
133
134
TempValue0 = 2
135
TempValue0 *= Object.PropertyValue
136
TempValue0 /= 10
137
138
BossPart[ArrayPos0].YOffSet = TempValue0
139
140
ArrayPos1 = LegJointR[ArrayPos0].LegREntity
141
// Leg R
142
TempValue0 = 0x8000
143
TempValue0 *= Object.PropertyValue // Set the XOffset value based on it's property value
144
TempValue0 /= 10
145
146
TempValue1 = 0x4000
147
TempValue1 *= Object.PropertyValue // Set the YOffset value based on it's property value
148
TempValue1 /= 10
149
150
BossPart[ArrayPos1].XOffSet = TempValue0
151
BossPart[ArrayPos1].YOffSet = TempValue1
152
153
ArrayPos0 = LegR[ArrayPos1].FootREntity
154
// Foot R
155
BossPart[ArrayPos0].XOffSet = TempValue1
156
BossPart[ArrayPos0].YOffSet = TempValue0
157
158
ArrayPos0 = Object.LegJointLEntity
159
// Leg Joint L
160
BossPart[ArrayPos0].YOffSet = 4
161
162
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
163
// Leg L
164
BossPart[ArrayPos1].XOffSet = TempValue0
165
BossPart[ArrayPos1].YOffSet = TempValue1
166
167
ArrayPos0 = LegL[ArrayPos1].FootLEntity
168
// Foot L
169
BossPart[ArrayPos0].XOffSet = TempValue1
170
BossPart[ArrayPos0].YOffSet = TempValue0
171
172
ArrayPos0 = Object.FaceEntity
173
ArrayPos1 = Face[ArrayPos0].ShoulderEntity
174
ArrayPos0 = Shoulder[ArrayPos1].ArmJointLEntity
175
SetBit(BossPart[ArrayPos0].Charging, 7, 0)
176
177
ArrayPos1 = ArmJointL[ArrayPos0].ArmLEntity
178
SetBit(BossPart[ArrayPos1].Charging, 7, 0)
179
180
ArrayPos0 = Object.FaceEntity
181
ArrayPos1 = Face[ArrayPos0].ShoulderEntity
182
ArrayPos0 = Shoulder[ArrayPos1].ArmJointREntity
183
SetBit(BossPart[ArrayPos0].Charging, 7, 0)
184
185
ArrayPos1 = ArmJointR[ArrayPos0].ArmREntity
186
SetBit(BossPart[ArrayPos1].Charging, 7, 0)
187
end function
188
189
190
function BossBody2_SetLegPosSaveTrue
191
SetBit(LegJoint[ArrayPos0].LegSide, 5, 1)
192
193
ArrayPos1 = LegJoint[ArrayPos0].LegEntity
194
SetBit(Leg[ArrayPos1].LegSide, 5, 1)
195
196
ArrayPos0 = Leg[ArrayPos1].FootEntity
197
SetBit(Foot[ArrayPos0].LegSide, 5, 1)
198
end function
199
200
201
function BossBody2_SetLegPosSaveFalse
202
SetBit(LegJoint[ArrayPos0].LegSide, 5, 0)
203
204
ArrayPos1 = LegJoint[ArrayPos0].LegEntity
205
SetBit(Leg[ArrayPos1].LegSide, 5, 0)
206
207
ArrayPos0 = Leg[ArrayPos1].FootEntity
208
SetBit(Foot[ArrayPos0].LegSide, 5, 0)
209
end function
210
211
212
function BossBody2_SwitchLeg
213
SetBit(LegJoint[ArrayPos0].LegSide, 4, 1)
214
215
ArrayPos1 = LegJoint[ArrayPos0].LegEntity
216
SetBit(Leg[ArrayPos1].LegSide, 4, 1)
217
218
ArrayPos0 = Leg[ArrayPos1].FootEntity
219
SetBit(Foot[ArrayPos0].LegSide, 4, 1)
220
end function
221
222
223
224
function BossBody2_SwitchLeg_Revert
225
SetBit(LegJoint[ArrayPos0].LegSide, 4, 0)
226
227
ArrayPos1 = LegJoint[ArrayPos0].LegEntity
228
SetBit(Leg[ArrayPos1].LegSide, 4, 0)
229
230
ArrayPos0 = Leg[ArrayPos1].FootEntity
231
SetBit(Foot[ArrayPos0].LegSide, 4, 0)
232
end function
233
234
235
236
// Right arm to front
237
function BossBody2_MoveRArmToFront
238
ArrayPos0 = Object.FaceEntity
239
ArrayPos1 = Face[ArrayPos0].ShoulderEntity
240
ArrayPos0 = Shoulder[ArrayPos1].ArmJointREntity
241
if BossPart[ArrayPos0].State < BOSSARMJOINT2_DESTROYED
242
BossPart[ArrayPos0].State = BOSSARMJOINT2_REPOSITION_B
243
244
ArrayPos1 = ArmJointR[ArrayPos0].ArmREntity
245
BossPart[ArrayPos1].State = BOSSARM2_MOVE_TO_FRONT
246
Arm[ArrayPos1].Frame = 0
247
end if
248
249
ArrayPos0 = Object.FaceEntity
250
ArrayPos1 = Face[ArrayPos0].ShoulderEntity
251
ArrayPos0 = Shoulder[ArrayPos1].ArmJointLEntity
252
if BossPart[ArrayPos0].State < BOSSARMJOINT2_DESTROYED
253
BossPart[ArrayPos0].State = BOSSARMJOINT2_REPOSITION_F
254
255
ArrayPos1 = ArmJointL[ArrayPos0].ArmLEntity
256
BossPart[ArrayPos1].State = BOSSARM2_MOVE_TO_BACK
257
Arm[ArrayPos1].Frame = 0
258
end if
259
end function
260
261
262
263
// Left arm to front
264
function BossBody2_MoveLArmToFront
265
ArrayPos0 = Object.FaceEntity
266
ArrayPos1 = Face[ArrayPos0].ShoulderEntity
267
ArrayPos0 = Shoulder[ArrayPos1].ArmJointREntity
268
if BossPart[ArrayPos0].State < BOSSARMJOINT2_DESTROYED
269
BossPart[ArrayPos0].State = BOSSARMJOINT2_REPOSITION_F
270
271
ArrayPos1 = ArmJointR[ArrayPos0].ArmREntity
272
BossPart[ArrayPos1].State = BOSSARM2_MOVE_TO_BACK
273
Arm[ArrayPos1].Frame = 0
274
end if
275
276
ArrayPos0 = Object.FaceEntity
277
ArrayPos1 = Face[ArrayPos0].ShoulderEntity
278
ArrayPos0 = Shoulder[ArrayPos1].ArmJointLEntity
279
if BossPart[ArrayPos0].State < BOSSARMJOINT2_DESTROYED
280
BossPart[ArrayPos0].State = BOSSARMJOINT2_REPOSITION_B
281
282
ArrayPos1 = ArmJointL[ArrayPos0].ArmLEntity
283
BossPart[ArrayPos1].State = BOSSARM2_MOVE_TO_FRONT
284
Arm[ArrayPos1].Frame = 0
285
end if
286
end function
287
288
289
290
function BossBody2_HandleCharge
291
ArrayPos0 = Object.LegJointREntity
292
// Leg Joint R
293
TempValue0 = 8
294
TempValue0 *= Object.PropertyValue // Set the YOffset value based on it's property value
295
TempValue0 /= 10
296
297
BossPart[ArrayPos0].YOffSet = TempValue0
298
299
ArrayPos1 = LegJointR[ArrayPos0].LegREntity
300
// Leg R
301
TempValue0 = 0x10000
302
TempValue0 *= Object.PropertyValue // Set the XOffset value based on it's property value
303
TempValue0 /= 10
304
305
TempValue1 = TempValue0
306
TempValue1 >>= 1
307
308
TempValue2 = 0xC000
309
TempValue2 *= Object.PropertyValue // Set the YOffset value based on it's property value
310
TempValue2 /= 10
311
312
TempValue3 = TempValue2
313
TempValue3 <<= 1
314
315
BossPart[ArrayPos1].XOffSet = TempValue0
316
BossPart[ArrayPos1].YOffSet = TempValue1
317
318
ArrayPos0 = LegR[ArrayPos1].FootREntity
319
// Foot R
320
BossPart[ArrayPos0].XOffSet = TempValue2
321
BossPart[ArrayPos0].YOffSet = TempValue3
322
323
ArrayPos0 = Object.LegJointLEntity
324
// Leg Joint L
325
BossPart[ArrayPos0].YOffSet = 16
326
327
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
328
// Leg L
329
BossPart[ArrayPos1].XOffSet = TempValue0
330
BossPart[ArrayPos1].YOffSet = TempValue1
331
332
ArrayPos0 = LegL[ArrayPos1].FootLEntity
333
// Foot L
334
BossPart[ArrayPos0].XOffSet = TempValue2
335
BossPart[ArrayPos0].YOffSet = TempValue3
336
337
ArrayPos0 = Object.FaceEntity
338
ArrayPos1 = Face[ArrayPos0].ShoulderEntity
339
ArrayPos0 = Shoulder[ArrayPos1].ArmJointLEntity
340
SetBit(BossPart[ArrayPos0].Charging, 7, 1) // Left Arm Joint
341
342
ArrayPos1 = ArmJointL[ArrayPos0].ArmLEntity
343
SetBit(BossPart[ArrayPos1].Charging, 7, 1) // Left Arm
344
345
ArrayPos0 = Object.FaceEntity
346
ArrayPos1 = Face[ArrayPos0].ShoulderEntity
347
ArrayPos0 = Shoulder[ArrayPos1].ArmJointREntity
348
SetBit(BossPart[ArrayPos0].Charging, 7, 1) // Right Arm Joint
349
350
ArrayPos1 = ArmJointR[ArrayPos0].ArmREntity
351
SetBit(BossPart[ArrayPos1].Charging, 7, 1) // Right Arm
352
end function
353
354
355
function BossBody2_SetArmsToCharge
356
ArrayPos0 = Object.FaceEntity
357
ArrayPos1 = Face[ArrayPos0].ShoulderEntity
358
ArrayPos0 = Shoulder[ArrayPos1].ArmJointREntity
359
if BossPart[ArrayPos0].State < BOSSARMJOINT2_DESTROYED
360
BossPart[ArrayPos0].State = BOSSARMJOINT2_REPOSITION_F
361
362
ArrayPos1 = ArmJointR[ArrayPos0].ArmREntity
363
BossPart[ArrayPos1].State = BOSSARM2_START_CHARGE
364
Arm[ArrayPos1].Frame = 1
365
end if
366
367
ArrayPos0 = Object.FaceEntity
368
ArrayPos1 = Face[ArrayPos0].ShoulderEntity
369
ArrayPos0 = Shoulder[ArrayPos1].ArmJointLEntity
370
if BossPart[ArrayPos0].State < BOSSARMJOINT2_DESTROYED
371
BossPart[ArrayPos0].State = BOSSARMJOINT2_REPOSITION_F
372
373
ArrayPos1 = ArmJointL[ArrayPos0].ArmLEntity
374
BossPart[ArrayPos1].State = BOSSARM2_START_CHARGE
375
Arm[ArrayPos1].Frame = 1
376
end if
377
end function
378
379
380
sub ObjectMain
381
switch Object.State
382
case BOSSBODY2_SETUP
383
CallFunction(BossBody2_RestoreNormalSpeed)
384
TempValue0 = Screen.XOffset
385
TempValue0 <<= 16
386
387
Object.ChargeDistance = TempValue0
388
389
Object.ChargeXPos = Object.XPos
390
Object.ChargeXPos -= 0x320000
391
392
Object.State = BOSSBODY2_DESCEND
393
break
394
395
case BOSSBODY2_DESCEND
396
ArrayPos0 = Object.LegJointLEntity
397
BossPart[ArrayPos0].State = BOSSLEGJOINT2_MIMIC_RIGHT
398
399
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
400
BossPart[ArrayPos1].State = BOSSLEG2_L_MIMIC_R
401
402
ArrayPos0 = LegL[ArrayPos1].FootLEntity
403
BossPart[ArrayPos0].State = BOSSFOOT2_LANDING
404
405
ArrayPos0 = Object.LegJointREntity
406
CallFunction(BossBody2_SetLegPosSaveTrue)
407
408
ArrayPos0 = Object.LegJointREntity
409
GetBit(TempValue0, LegJoint[ArrayPos0].LegSide, 4)
410
if TempValue0 == false
411
Object.YPos += 0x18000
412
413
ArrayPos0 = Object.FaceEntity
414
Face[ArrayPos0].YPos += 0x18000
415
else
416
SetBit(Object.BitHolder, 0, KEY_EVENT_TRUE)
417
end if
418
break
419
420
case BOSSBODY2_LANDING
421
ArrayPos0 = Object.LegJointLEntity
422
SetBit(LegJoint[ArrayPos0].LegSide, 0, 0)
423
424
ArrayPos0 = Object.LegJointREntity
425
GetBit(TempValue0, LegJoint[ArrayPos0].LegSide, 0)
426
if TempValue0 == true
427
428
SetBit(LegJoint[ArrayPos0].LegSide, 0, 0)
429
if BossPart[ArrayPos0].State != BOSSLEGJOINT2_DESCEND
430
431
if BossPart[ArrayPos0].State != BOSSLEGJOINT2_LANDING
432
BossPart[ArrayPos0].State = BOSSLEGJOINT2_STEP_START
433
CallFunction(BossBody2_SetLegPosSaveFalse)
434
435
ArrayPos0 = Object.LegJointREntity
436
CallFunction(BossBody2_SwitchLeg_Revert)
437
438
ArrayPos0 = Object.LegJointLEntity
439
BossPart[ArrayPos0].State = BOSSLEGJOINT2_WAIT_LEG
440
CallFunction(BossBody2_SetLegPosSaveFalse)
441
442
ArrayPos0 = Object.LegJointLEntity
443
CallFunction(BossBody2_SwitchLeg)
444
445
ArrayPos0 = Object.LegJointLEntity
446
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
447
BossPart[ArrayPos1].State = BOSSLEG2_LANDING
448
449
ArrayPos0 = LegL[ArrayPos1].FootLEntity
450
BossPart[ArrayPos0].State = BOSSFOOT2_HANDLE_STEP
451
SetBit(Object.BitHolder, 0, KEY_EVENT_TRUE)
452
else
453
BossPart[ArrayPos0].State = BOSSLEGJOINT2_STAND
454
end if
455
456
else
457
BossPart[ArrayPos0].State = BOSSLEGJOINT2_LANDING
458
end if
459
460
end if
461
break
462
463
case BOSSBODY2_FIRST_STEP
464
GetBit(TempValue0, Object.BitHolder, 1)
465
if TempValue0 == MOVE_FORWARD
466
SetBit(Object.BitHolder, 1, MOVE_BACKWARDS)
467
CallFunction(BossBody2_MoveRArmToFront)
468
end if
469
470
ArrayPos0 = Object.LegJointREntity
471
GetBit(TempValue0, LegJoint[ArrayPos0].LegSide, 0)
472
if TempValue0 == true
473
474
ArrayPos0 = Object.LegJointLEntity
475
GetBit(TempValue0, LegJoint[ArrayPos0].LegSide, 0)
476
if TempValue0 == true
477
SetBit(Object.BitHolder, 1, MOVE_FORWARD)
478
SetBit(Object.BitHolder, 6, RIGHT_LEG_ACTIVE)
479
SetBit(Object.BitHolder, 0, KEY_EVENT_TRUE)
480
end if
481
482
end if
483
break
484
485
486
case BOSSBODY2_MOVE_FORWARD
487
ArrayPos0 = Object.LegJointREntity
488
GetBit(CheckResult, LegJoint[ArrayPos0].LegSide, 0)
489
ArrayPos0 = Object.LegJointLEntity
490
GetBit(TempValue0, LegJoint[ArrayPos0].LegSide, 0)
491
CheckResult &= TempValue0
492
if CheckResult == true
493
ArrayPos0 = Object.LegJointREntity
494
SetBit(LegJoint[ArrayPos0].LegSide, 0, 0)
495
496
ArrayPos1 = LegJointR[ArrayPos0].LegREntity
497
SetBit(Leg[ArrayPos1].LegSide, 0, 0)
498
499
ArrayPos0 = Object.LegJointLEntity
500
SetBit(LegJoint[ArrayPos0].LegSide, 0, 0)
501
502
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
503
SetBit(Leg[ArrayPos1].LegSide, 0, 0)
504
505
if Object.XPos < Object.ChargeDistance
506
Object.ChargeStart = 1
507
end if
508
509
Object.ChargeStart--
510
if Object.ChargeStart == 0
511
SetBit(Object.BitHolder, 0, KEY_EVENT_TRUE)
512
SetBit(Object.BitHolder, 1, MOVE_FORWARD)
513
else
514
GetBit(TempValue0, Object.BitHolder, 6)
515
if TempValue0 == LEFT_LEG_ACTIVE
516
SetBit(Object.BitHolder, 6, 1)
517
ArrayPos0 = Object.LegJointREntity
518
BossPart[ArrayPos0].State = BOSSLEGJOINT2_STEP_START
519
CallFunction(BossBody2_SetLegPosSaveFalse)
520
521
ArrayPos0 = Object.LegJointREntity
522
CallFunction(BossBody2_SwitchLeg_Revert)
523
524
ArrayPos0 = Object.LegJointREntity
525
ArrayPos1 = LegJointR[ArrayPos0].LegREntity
526
BossPart[ArrayPos1].State = BOSSLEG2_MOVE_OPPOSITE
527
528
ArrayPos0 = Object.LegJointLEntity
529
BossPart[ArrayPos0].State = BOSSLEGJOINT2_WAIT_LEG
530
CallFunction(BossBody2_SetLegPosSaveTrue)
531
532
ArrayPos0 = Object.LegJointLEntity
533
CallFunction(BossBody2_SwitchLeg)
534
535
ArrayPos0 = Object.LegJointLEntity
536
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
537
BossPart[ArrayPos1].State = BOSSLEG2_MOVE
538
CallFunction(BossBody2_MoveRArmToFront)
539
else
540
SetBit(Object.BitHolder, 6, 0)
541
ArrayPos0 = Object.LegJointREntity
542
BossPart[ArrayPos0].State = BOSSLEGJOINT2_WAIT_LEG
543
CallFunction(BossBody2_SetLegPosSaveTrue)
544
545
ArrayPos0 = Object.LegJointREntity
546
CallFunction(BossBody2_SwitchLeg)
547
548
ArrayPos0 = Object.LegJointREntity
549
ArrayPos1 = LegJointR[ArrayPos0].LegREntity
550
BossPart[ArrayPos1].State = BOSSLEG2_MOVE
551
552
ArrayPos0 = Object.LegJointLEntity
553
BossPart[ArrayPos0].State = BOSSLEGJOINT2_STEP_START
554
CallFunction(BossBody2_SetLegPosSaveFalse)
555
556
ArrayPos0 = Object.LegJointLEntity
557
CallFunction(BossBody2_SwitchLeg_Revert)
558
559
ArrayPos0 = Object.LegJointLEntity
560
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
561
BossPart[ArrayPos1].State = BOSSLEG2_MOVE_OPPOSITE
562
CallFunction(BossBody2_MoveLArmToFront)
563
end if
564
end if
565
end if
566
break
567
568
case BOSSBODY2_MOVE_BACKWARDS
569
ArrayPos0 = Object.LegJointREntity
570
GetBit(CheckResult, LegJoint[ArrayPos0].LegSide, 0)
571
572
ArrayPos0 = Object.LegJointLEntity
573
GetBit(TempValue0, LegJoint[ArrayPos0].LegSide, 0)
574
575
CheckResult &= TempValue0
576
if CheckResult == true
577
578
GetBit(TempValue0, Object.BitHolder, 1)
579
if TempValue0 == MOVE_FORWARD
580
SetBit(Object.BitHolder, 1, MOVE_BACKWARDS)
581
CallFunction(BossBody2_RestoreNormalSpeed)
582
else
583
ArrayPos0 = Object.LegJointREntity
584
SetBit(LegJoint[ArrayPos0].LegSide, 0, 0)
585
586
ArrayPos1 = LegJointR[ArrayPos0].LegREntity
587
SetBit(Leg[ArrayPos1].LegSide, 0, 0)
588
589
ArrayPos0 = Object.LegJointLEntity
590
SetBit(LegJoint[ArrayPos0].LegSide, 0, 0)
591
592
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
593
SetBit(Leg[ArrayPos1].LegSide, 0, 0)
594
595
if Object.XPos >= Object.ChargeXPos
596
Object.ChargeStart = 1
597
end if
598
599
Object.ChargeStart--
600
if Object.ChargeStart == 0
601
SetBit(Object.BitHolder, 1, MOVE_FORWARD)
602
SetBit(Object.BitHolder, 0, KEY_EVENT_TRUE)
603
else
604
GetBit(TempValue0, Object.BitHolder, 6)
605
if TempValue0 == LEFT_LEG_ACTIVE
606
SetBit(Object.BitHolder, 6, RIGHT_LEG_ACTIVE)
607
ArrayPos0 = Object.LegJointREntity
608
BossPart[ArrayPos0].State = BOSSLEGJOINT2_WAIT_LEG_BW
609
CallFunction(BossBody2_SetLegPosSaveTrue)
610
611
ArrayPos0 = Object.LegJointREntity
612
CallFunction(BossBody2_SwitchLeg)
613
614
ArrayPos0 = Object.LegJointREntity
615
ArrayPos1 = LegJointR[ArrayPos0].LegREntity
616
BossPart[ArrayPos1].State = BOSSLEG2_MOVE_OPPOSITE
617
618
ArrayPos0 = Object.LegJointLEntity
619
BossPart[ArrayPos0].State = BOSSLEGJOINT2_STEP_START_BW
620
CallFunction(BossBody2_SetLegPosSaveFalse)
621
622
ArrayPos0 = Object.LegJointLEntity
623
CallFunction(BossBody2_SwitchLeg_Revert)
624
ArrayPos0 = Object.LegJointLEntity
625
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
626
BossPart[ArrayPos1].State = BOSSLEG2_MOVE
627
CallFunction(BossBody2_MoveRArmToFront)
628
else
629
SetBit(Object.BitHolder, 6, LEFT_LEG_ACTIVE)
630
ArrayPos0 = Object.LegJointREntity
631
BossPart[ArrayPos0].State = BOSSLEGJOINT2_STEP_START_BW
632
CallFunction(BossBody2_SetLegPosSaveFalse)
633
634
ArrayPos0 = Object.LegJointREntity
635
CallFunction(BossBody2_SwitchLeg_Revert)
636
637
ArrayPos0 = Object.LegJointREntity
638
ArrayPos1 = LegJointR[ArrayPos0].LegREntity
639
BossPart[ArrayPos1].State = BOSSLEG2_MOVE
640
641
ArrayPos0 = Object.LegJointLEntity
642
BossPart[ArrayPos0].State = BOSSLEGJOINT2_WAIT_LEG_BW
643
CallFunction(BossBody2_SetLegPosSaveTrue)
644
645
ArrayPos0 = Object.LegJointLEntity
646
CallFunction(BossBody2_SwitchLeg)
647
648
ArrayPos0 = Object.LegJointLEntity
649
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
650
BossPart[ArrayPos1].State = BOSSLEG2_MOVE_OPPOSITE
651
CallFunction(BossBody2_MoveLArmToFront)
652
end if
653
654
end if
655
656
end if
657
658
end if
659
break
660
661
case BOSSBODY2_PREPARE_CHARGING
662
GetBit(TempValue0, Object.BitHolder, 1)
663
if TempValue0 == MOVE_FORWARD
664
SetBit(Object.BitHolder, 1, MOVE_BACKWARDS)
665
CallFunction(BossBody2_HandleCharge)
666
end if
667
668
GetBit(TempValue0, Object.BitHolder, 6)
669
if TempValue0 == RIGHT_LEG_ACTIVE
670
ArrayPos0 = Object.LegJointREntity
671
ArrayPos1 = LegJointR[ArrayPos0].LegREntity
672
BossPart[ArrayPos1].State = BOSSLEG2_MOVE_C
673
674
ArrayPos0 = Object.LegJointLEntity
675
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
676
BossPart[ArrayPos1].State = BOSSLEG2_MOVE_OPPOSITE_C
677
else
678
ArrayPos0 = Object.LegJointLEntity
679
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
680
BossPart[ArrayPos1].State = BOSSLEG2_MOVE_C
681
682
ArrayPos0 = Object.LegJointREntity
683
ArrayPos1 = LegJointR[ArrayPos0].LegREntity
684
BossPart[ArrayPos1].State = BOSSLEG2_MOVE_OPPOSITE_C
685
end if
686
687
ArrayPos0 = Object.LegJointREntity
688
GetBit(CheckResult, LegJoint[ArrayPos0].LegSide, 0)
689
ArrayPos0 = Object.LegJointLEntity
690
GetBit(TempValue0, LegJoint[ArrayPos0].LegSide, 0)
691
CheckResult &= TempValue0
692
if CheckResult == true
693
ArrayPos0 = Object.LegJointREntity
694
SetBit(LegJoint[ArrayPos0].LegSide, 0, 0)
695
696
ArrayPos1 = LegJointR[ArrayPos0].LegREntity
697
SetBit(Leg[ArrayPos1].LegSide, 0, 0)
698
699
ArrayPos0 = Object.LegJointLEntity
700
SetBit(LegJoint[ArrayPos0].LegSide, 0, 0)
701
702
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
703
SetBit(Leg[ArrayPos1].LegSide, 0, 0)
704
705
Object.ChargeStart--
706
if Object.ChargeStart == 0
707
SetBit(Object.BitHolder, 1, MOVE_FORWARD)
708
SetBit(Object.BitHolder, 0, KEY_EVENT_TRUE)
709
else
710
GetBit(TempValue0, Object.BitHolder, 6)
711
if TempValue0 == LEFT_LEG_ACTIVE
712
SetBit(Object.BitHolder, 6, RIGHT_LEG_ACTIVE)
713
ArrayPos0 = Object.LegJointREntity
714
SetBit(LegJoint[ArrayPos0].LegSide, 1, 0)
715
CallFunction(BossBody2_SetLegPosSaveTrue)
716
717
ArrayPos0 = Object.LegJointREntity
718
CallFunction(BossBody2_SwitchLeg)
719
720
ArrayPos0 = Object.LegJointREntity
721
ArrayPos1 = LegJointR[ArrayPos0].LegREntity
722
BossPart[ArrayPos1].State = BOSSLEG2_MOVE_C
723
ArrayPos0 = LegR[ArrayPos1].FootREntity
724
BossPart[ArrayPos0].State = BOSSFOOT2_STEP
725
726
ArrayPos0 = Object.LegJointLEntity
727
SetBit(LegJoint[ArrayPos0].LegSide, 1, 0)
728
BossPart[ArrayPos0].State = BOSSLEGJOINT2_STEP_START
729
CallFunction(BossBody2_SetLegPosSaveFalse)
730
731
ArrayPos0 = Object.LegJointLEntity
732
CallFunction(BossBody2_SwitchLeg_Revert)
733
734
ArrayPos0 = Object.LegJointLEntity
735
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
736
BossPart[ArrayPos1].State = BOSSLEG2_MOVE_OPPOSITE_C
737
CallFunction(BossBody2_SetArmsToCharge)
738
else
739
SetBit(Object.BitHolder, 6, LEFT_LEG_ACTIVE)
740
ArrayPos0 = Object.LegJointLEntity
741
SetBit(LegJoint[ArrayPos0].LegSide, 1, 0)
742
CallFunction(BossBody2_SetLegPosSaveTrue)
743
744
ArrayPos0 = Object.LegJointLEntity
745
CallFunction(BossBody2_SwitchLeg)
746
747
ArrayPos0 = Object.LegJointLEntity
748
ArrayPos1 = LegJointL[ArrayPos0].LegLEntity
749
BossPart[ArrayPos1].State = BOSSLEG2_MOVE_C
750
751
ArrayPos0 = LegL[ArrayPos1].FootLEntity
752
BossPart[ArrayPos0].State = BOSSFOOT2_STEP
753
754
ArrayPos0 = Object.LegJointREntity
755
SetBit(LegJoint[ArrayPos0].LegSide, 1, 0)
756
757
BossPart[ArrayPos0].State = BOSSLEGJOINT2_STEP_START
758
CallFunction(BossBody2_SetLegPosSaveFalse)
759
760
ArrayPos0 = Object.LegJointREntity
761
CallFunction(BossBody2_SwitchLeg_Revert)
762
763
ArrayPos0 = Object.LegJointREntity
764
ArrayPos1 = LegJointR[ArrayPos0].LegREntity
765
BossPart[ArrayPos1].State = BOSSLEG2_MOVE_OPPOSITE_C
766
CallFunction(BossBody2_SetArmsToCharge)
767
end if
768
769
end if
770
771
end if
772
break
773
774
case BOSSBODY2_DESTROYED
775
if Object.InFloor == false
776
Object.YPos += 0x20000
777
ObjectTileCollision(CSIDE_FLOOR, 0, 30, 0)
778
Object.InFloor = CheckResult
779
Face.YPos = Object.YPos
780
end if
781
break
782
783
case BOSSBODY2_STOP_CHARGE
784
Object.ChargeStart--
785
if Object.ChargeStart == 0
786
CallFunction(BossBody2_RestoreNormalSpeed)
787
SetBit(Object.BitHolder, 0, KEY_EVENT_TRUE)
788
SetBit(Object.BitHolder, 1, MOVE_FORWARD)
789
end if
790
break
791
end switch
792
end sub
793
794
795
sub ObjectDraw
796
DrawSprite(0)
797
DrawSprite(1)
798
end sub
799
800
801
sub ObjectStartup
802
LoadSpriteSheet("R1/Objects3.gif")
803
804
SpriteFrame(-36, -32, 72, 64, 1, 1) // #0 - Egg Mobile
805
SpriteFrame(0, 8, 24, 24, 99, 1) // #1 - Arm Connector
806
end sub
807
808
809
// ========================
810
// Editor Subs
811
// ========================
812
813
sub RSDKDraw
814
DrawSprite(0)
815
DrawSprite(1)
816
end sub
817
818
819
sub RSDKLoad
820
LoadSpriteSheet("R1/Objects3.gif")
821
SpriteFrame(-36, -32, 72, 64, 1, 1) // #0 - Egg Mobile
822
SpriteFrame(0, 8, 24, 24, 99, 1) // #1 - Arm Connector
823
824
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
825
end sub
826
827