Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R1/Boss_ArmJoint.txt
1319 views
1
//----------------Sonic CD Boss Arm Joint Script--------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// ========================
6
// Aliases
7
// ========================
8
9
#alias Object.Value0 : Object.ShoulderEntity
10
#alias Object.Value2 : Object.XOffSet
11
#alias Object.Value4 : Object.Charging
12
#alias Object.Value5 : Object.YOffSet
13
14
// States
15
#alias 0 : BOSSARMJOINT_SETUP
16
#alias 1 : BOSSARMJOINT_REPOSITION_F
17
#alias 2 : BOSSARMJOINT_HANDLE_F_JOINT
18
#alias 3 : BOSSARMJOINT_REPOSITION_B
19
#alias 4 : BOSSARMJOINT_HANDLE_B_JOINT
20
#alias 5 : BOSSARMJOINT_DESTROYED
21
22
// Boss Shoulder Aliases
23
#alias Object.XPos : Shoulder.XPos
24
#alias Object.YPos : Shoulder.YPos
25
26
// Priority Aliases
27
#alias 0 : PRIORITY_BOUNDS
28
29
30
// ========================
31
// Function Declarations
32
// ========================
33
34
#function BossArmJoint_HandleMovement
35
36
37
// ========================
38
// Functiion Definitions
39
// ========================
40
41
function BossArmJoint_HandleMovement
42
TempValue0 = Object.XOffSet
43
TempValue0 += 64
44
45
Sin256(TempValue6, TempValue0)
46
TempValue6 <<= 12
47
48
Cos256(TempValue7, TempValue0)
49
TempValue7 <<= 12
50
51
ArrayPos0 = Object.ShoulderEntity
52
53
Object.XPos = Shoulder[ArrayPos0].XPos
54
Object.XPos += TempValue7
55
56
Object.YPos = Shoulder[ArrayPos0].YPos
57
Object.YPos += TempValue6
58
59
if Object.DrawOrder == 2 // Right Arm Joint
60
Object.XPos -= 0xA0000
61
end if
62
end function
63
64
65
// ========================
66
// Events
67
// ========================
68
69
sub ObjectMain
70
switch Object.State
71
case BOSSARMJOINT_SETUP
72
if Object.DrawOrder == 3 // Left Arm Joint
73
Object.XOffSet = 128 // Delay the left arm joint a bit
74
end if
75
Object.State = BOSSARMJOINT_REPOSITION_B
76
// [Fallthrough]
77
case BOSSARMJOINT_REPOSITION_F
78
Object.XOffSet -= 2
79
if Object.XOffSet <= 0
80
Object.State = BOSSARMJOINT_HANDLE_F_JOINT
81
Object.XOffSet = 0
82
SetBit(Object.Charging, 0, true)
83
end if
84
85
CallFunction(BossArmJoint_HandleMovement)
86
break
87
88
case BOSSARMJOINT_HANDLE_F_JOINT
89
CallFunction(BossArmJoint_HandleMovement)
90
break
91
92
case BOSSARMJOINT_REPOSITION_B
93
Object.XOffSet += 2
94
if Object.XOffSet >= 48
95
Object.State = BOSSARMJOINT_HANDLE_B_JOINT
96
Object.XOffSet = 48
97
SetBit(Object.Charging, 0, true)
98
end if
99
100
CallFunction(BossArmJoint_HandleMovement)
101
break
102
103
case BOSSARMJOINT_HANDLE_B_JOINT
104
CallFunction(BossArmJoint_HandleMovement)
105
break
106
107
case BOSSARMJOINT_DESTROYED
108
Object.XOffSet += 0x600
109
Object.XPos += Object.XOffSet
110
111
Object.YOffSet += 0x1F00
112
Object.YPos += Object.YOffSet
113
114
if Object.OutOfBounds == true
115
Object.Type = TypeName[Blank Object]
116
Object.Priority = PRIORITY_BOUNDS
117
end if
118
break
119
end switch
120
end sub
121
122
123
sub ObjectDraw
124
DrawSprite(0)
125
end sub
126
127
128
sub ObjectStartup
129
LoadSpriteSheet("R1/Objects3.gif")
130
131
SpriteFrame(-8, -8, 16, 16, 124, 34) // #0 - Arm Joint
132
end sub
133
134
135
// ========================
136
// Editor Subs
137
// ========================
138
139
sub RSDKDraw
140
DrawSprite(0)
141
end sub
142
143
144
sub RSDKLoad
145
LoadSpriteSheet("R1/Objects3.gif")
146
SpriteFrame(-8, -8, 16, 16, 124, 34) // #0 - Arm Joint
147
148
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
149
end sub
150
151