Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R3/RotatingSpikes.txt
1319 views
1
//--------------Sonic CD Rotating Spikes Script---------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value0 : Object.Angle
7
#alias Object.Value1 : Object.Speed
8
#alias Object.Value2 : Object.SpawnedSpikes
9
10
// HUD Alias
11
#alias Object[24].PropertyValue : HUD.CurrentTimePeriod
12
13
// Property Values
14
#alias 0 : MAXSPIKES_RIGHT
15
#alias 1 : MAXSPIKES_LEFT
16
#alias 2 : TWO_SPIKES_RIGHT
17
#alias 3 : TWO_SPIKES_LEFT
18
19
// Time Periods
20
#alias 1 : TIME_PAST
21
22
23
sub ObjectMain
24
Object.Angle += Object.Speed
25
if Object.Angle < 0
26
Object.Angle += 512
27
end if
28
Object.Angle &= 511
29
end sub
30
31
32
sub ObjectPlayerInteraction
33
TempValue0 = 0
34
TempValue1 = 16
35
TempValue2 = Object.XPos
36
TempValue3 = Object.YPos
37
38
while TempValue0 < Object.SpawnedSpikes
39
40
Cos(Object.XPos, Object.Angle)
41
Object.XPos *= TempValue1
42
Object.XPos <<= 7
43
Object.XPos += TempValue2
44
45
Sin(Object.YPos, Object.Angle)
46
Object.YPos *= TempValue1
47
Object.YPos <<= 7
48
Object.YPos += TempValue3
49
50
PlayerObjectCollision(C_TOUCH, -8, -8, 8, 8)
51
if CheckResult == true
52
CallFunction(Player_Hit)
53
end if
54
55
TempValue0++
56
TempValue1 += 16
57
loop
58
Object.XPos = TempValue2
59
Object.YPos = TempValue3
60
end sub
61
62
63
sub ObjectDraw
64
DrawSprite(0)
65
66
TempValue0 = 0
67
TempValue1 = 16
68
while TempValue0 < Object.SpawnedSpikes
69
70
Cos(TempValue2, Object.Angle)
71
TempValue2 *= TempValue1
72
TempValue2 <<= 7
73
TempValue2 += Object.XPos
74
75
Sin(TempValue3, Object.Angle)
76
TempValue3 *= TempValue1
77
TempValue3 <<= 7
78
TempValue3 += Object.YPos
79
80
DrawSpriteXY(1, TempValue2, TempValue3)
81
82
TempValue0++
83
TempValue1 += 16
84
loop
85
end sub
86
87
88
sub ObjectStartup
89
LoadSpriteSheet("R3/Objects.gif")
90
91
SpriteFrame(-8, -8, 16, 16, 181, 143) // #0 - Spike Joint
92
SpriteFrame(-8, -8, 16, 16, 181, 160) // #1 - Spike
93
94
ArrayPos0 = 32
95
while ArrayPos0 < 1056
96
if Object[ArrayPos0].Type == TypeName[Rotating Spikes]
97
switch Object[ArrayPos0].PropertyValue
98
case MAXSPIKES_RIGHT
99
Object[ArrayPos0].Speed = 2
100
if HUD.CurrentTimePeriod > 1 // In the future it has 4 spikes
101
Object[ArrayPos0].SpawnedSpikes = 4
102
else
103
Object[ArrayPos0].SpawnedSpikes = 3
104
end if
105
break
106
107
case MAXSPIKES_LEFT
108
Object[ArrayPos0].Speed = -2
109
if HUD.CurrentTimePeriod > 1 // In the future it has 4 spikes
110
Object[ArrayPos0].SpawnedSpikes = 4
111
else
112
Object[ArrayPos0].SpawnedSpikes = 3
113
end if
114
break
115
116
case TWO_SPIKES_RIGHT
117
Object[ArrayPos0].Speed = 2
118
Object[ArrayPos0].SpawnedSpikes = 2
119
break
120
121
case TWO_SPIKES_LEFT
122
Object[ArrayPos0].Speed = -2
123
Object[ArrayPos0].SpawnedSpikes = 2
124
break
125
126
end switch
127
end if
128
ArrayPos0++
129
loop
130
end sub
131
132
133
// ========================
134
// Editor Subs
135
// ========================
136
137
sub RSDKEdit
138
if Editor.ReturnVariable == true
139
switch Editor.VariableID
140
case EDIT_VAR_PROPVAL // Property Value
141
CheckResult = Object.PropertyValue
142
CheckResult &= 3
143
break
144
case 0 // spikeType
145
CheckResult = Object.PropertyValue
146
CheckResult &= 3
147
break
148
end switch
149
else
150
switch Editor.VariableID
151
case EDIT_VAR_PROPVAL // Property Value
152
Object.PropertyValue = Editor.VariableValue
153
Object.PropertyValue &= 3
154
break
155
case 0 // spikeType
156
Object.PropertyValue = Editor.VariableValue
157
Object.PropertyValue &= 3
158
break
159
end switch
160
end if
161
end sub
162
163
164
sub RSDKDraw
165
DrawSprite(0)
166
167
TempValue0 = 0
168
if Object.PropertyValue > 1
169
TempValue1 = 2
170
else
171
CheckCurrentStageFolder("B")
172
if CheckResult == true
173
TempValue1 = 3
174
else
175
TempValue1 = 4
176
end if
177
end if
178
179
TempValue2 = Object.XPos
180
TempValue3 = Object.YPos
181
while TempValue0 < TempValue1
182
TempValue2 += 0x100000
183
TempValue3 += 0x100000
184
DrawSpriteXY(1, TempValue2, TempValue3)
185
TempValue0++
186
loop
187
188
if Editor.ShowGizmos == true
189
switch Object.PropertyValue
190
case 0
191
case 2
192
TempValue0 = Object.iXPos
193
TempValue0 += 32
194
TempValue0 <<= 16
195
196
TempValue1 = Object.iYPos
197
TempValue1 += 32
198
TempValue1 <<= 16
199
DrawArrow(TempValue0, Object.YPos, Object.XPos, TempValue1, 255, 255, 255, 0)
200
break
201
case 1
202
case 3
203
TempValue0 = Object.iXPos
204
TempValue0 += 32
205
TempValue0 <<= 16
206
207
TempValue1 = Object.iYPos
208
TempValue1 += 32
209
TempValue1 <<= 16
210
DrawArrow(Object.XPos, TempValue1, TempValue0, Object.YPos, 255, 255, 255, 0)
211
break
212
end switch
213
end if
214
end sub
215
216
217
sub RSDKLoad
218
LoadSpriteSheet("R3/Objects.gif")
219
220
SpriteFrame(-8, -8, 16, 16, 181, 143) // #0 - Spike Joint
221
SpriteFrame(-8, -8, 16, 16, 181, 160) // #1 - Spike
222
223
CheckCurrentStageFolder("B")
224
AddEditorVariable("spikeType")
225
SetActiveVariable("spikeType")
226
if CheckResult == true
227
AddEnumVariable("3 Spikes Clock-wise", 0)
228
AddEnumVariable("3 Spikes Counter Clock-wise", 1)
229
else
230
AddEnumVariable("4 Spikes Clock-wise", 0)
231
AddEnumVariable("4 Spikes Counter Clock-wise", 1)
232
end if
233
AddEnumVariable("2 Spikes Clock-wise", 2)
234
AddEnumVariable("2 Spikes Counter Clock-wise", 3)
235
end sub
236
237