Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R8/Buzzsaw.txt
1319 views
1
//------------------Sonic CD Buzzsaw Script-------------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value0 : Object.Timer
7
#alias Object.Value1 : Object.XVelocity
8
#alias Object.Value2 : Object.YVelocity
9
#alias Object.Value3 : Object.FrameTimer
10
#alias Object.Value4 : Object.SfxTimer
11
12
// States
13
#alias 0 : BUZZSAW_STOPPED
14
#alias 1 : BUZZSAW_DROP
15
#alias 2 : BUZZSAW_LOW_STOPPED
16
#alias 3 : BUZZSAW_LIFT
17
18
// Stage SFX
19
#alias 1 : SFX_S_BUZZSAW
20
21
// Property Values
22
// tecnically direction is used, but it's set according to the property value so
23
#alias 0 : DIR_FACING_RIGHT
24
#alias 1 : DIR_FACING_LEFT
25
#alias 2 : DIR_FACING_UPEND_RIGHT
26
#alias 3 : DIR_FACING_UPEND_LEFT
27
28
// These prop vals are going to switch the first state to 2
29
// then behave the same as the ones above it
30
#alias 128 : LOW_FACING_RIGHT
31
#alias 129 : LOW_FACING_LEFT
32
#alias 130 : LOW_FACING_UPEND_RIGHT
33
#alias 131 : LOW_FACING_UPEND_LEFT
34
35
36
sub ObjectMain
37
switch Object.State
38
case BUZZSAW_STOPPED
39
if Object.Timer < 60
40
Object.Timer++
41
else
42
Object.Timer = 0
43
Object.State++
44
end if
45
break
46
47
case BUZZSAW_DROP
48
if Object.Timer < 74
49
Object.Timer++
50
Object.FrameTimer++
51
Object.XPos += Object.XVelocity
52
Object.YPos += Object.YVelocity
53
else
54
Object.Timer = 0
55
Object.State++
56
end if
57
break
58
59
case BUZZSAW_LOW_STOPPED
60
if Object.Timer < 60
61
Object.Timer++
62
else
63
Object.Timer = 0
64
Object.State++
65
end if
66
break
67
68
case BUZZSAW_LIFT
69
if Object.Timer < 74
70
Object.Timer++
71
Object.FrameTimer--
72
Object.XPos -= Object.XVelocity
73
Object.YPos -= Object.YVelocity
74
else
75
Object.Timer = 0
76
Object.State = BUZZSAW_STOPPED
77
end if
78
break
79
end switch
80
81
if Object.SfxTimer > 0
82
Object.SfxTimer--
83
else
84
PlayStageSfx(SFX_S_BUZZSAW, false)
85
Object.SfxTimer += 48
86
end if
87
end sub
88
89
90
sub ObjectPlayerInteraction
91
PlayerObjectCollision(C_TOUCH, -24, -24, 24, 24)
92
if CheckResult == true
93
CallFunction(Player_Hit)
94
end if
95
end sub
96
97
98
sub ObjectDraw
99
TempValue0 = Object.Frame
100
TempValue0 >>= 1
101
DrawSpriteFX(TempValue0, FX_FLIP, Object.XPos, Object.YPos)
102
Object.Frame++
103
Object.Frame &= 3
104
105
TempValue0 = Object.FrameTimer
106
TempValue0 /= 20
107
switch TempValue0
108
case 0
109
DrawSpriteFX(2, FX_FLIP, Object.XPos, Object.YPos)
110
break
111
case 1
112
DrawSpriteFX(2, FX_FLIP, Object.XPos, Object.YPos)
113
DrawSpriteFX(3, FX_FLIP, Object.XPos, Object.YPos)
114
break
115
case 2
116
DrawSpriteFX(2, FX_FLIP, Object.XPos, Object.YPos)
117
DrawSpriteFX(3, FX_FLIP, Object.XPos, Object.YPos)
118
DrawSpriteFX(4, FX_FLIP, Object.XPos, Object.YPos)
119
break
120
case 3
121
DrawSpriteFX(2, FX_FLIP, Object.XPos, Object.YPos)
122
DrawSpriteFX(3, FX_FLIP, Object.XPos, Object.YPos)
123
DrawSpriteFX(4, FX_FLIP, Object.XPos, Object.YPos)
124
DrawSpriteFX(5, FX_FLIP, Object.XPos, Object.YPos)
125
break
126
end switch
127
end sub
128
129
130
sub ObjectStartup
131
LoadSpriteSheet("R8/Objects2.gif")
132
133
SpriteFrame(-33, -36, 66, 68, 67, 127) // #0 - Buzzsaw frame 0
134
SpriteFrame(-33, -36, 66, 68, 190, 154) // #1 - Buzzsaw frame 1
135
136
SpriteFrame(-53, -53, 26, 26, 158, 43) // #2 - Buzzsaw Extension frame 0
137
SpriteFrame(-73, -73, 26, 26, 158, 43) // #3 - Buzzsaw Extension frame 1
138
SpriteFrame(-93, -93, 26, 26, 158, 43) // #4 - Buzzsaw Extension frame 2
139
SpriteFrame(-113, -113, 26, 26, 158, 43) // #5 - Buzzsaw Extension frame 3
140
141
ArrayPos0 = 32
142
while ArrayPos0 < 1056
143
if Object[ArrayPos0].Type == TypeName[Buzzsaw]
144
if Object[ArrayPos0].PropertyValue > 127
145
Object[ArrayPos0].PropertyValue -= 128
146
Object[ArrayPos0].Direction = Object[ArrayPos0].PropertyValue
147
Object[ArrayPos0].FrameTimer = 74
148
Object[ArrayPos0].State = BUZZSAW_LOW_STOPPED
149
else
150
Object[ArrayPos0].Direction = Object[ArrayPos0].PropertyValue
151
end if
152
153
switch Object[ArrayPos0].Direction
154
case 0
155
Object[ArrayPos0].XVelocity = 0x10000
156
Object[ArrayPos0].YVelocity = 0x10000
157
break
158
case 1
159
Object[ArrayPos0].XVelocity = -0x10000
160
Object[ArrayPos0].YVelocity = 0x10000
161
break
162
case 2
163
Object[ArrayPos0].XVelocity = 0x10000
164
Object[ArrayPos0].YVelocity = -0x10000
165
break
166
case 3
167
Object[ArrayPos0].XVelocity = -0x10000
168
Object[ArrayPos0].YVelocity = -0x10000
169
break
170
end switch
171
end if
172
ArrayPos0++
173
loop
174
end sub
175
176
177
// ========================
178
// Editor Subs
179
// ========================
180
181
sub RSDKEdit
182
if Editor.ReturnVariable == true
183
switch Editor.VariableID
184
case EDIT_VAR_PROPVAL // Property Value
185
CheckResult = Object.PropertyValue
186
break
187
case 0 // startStreched
188
GetBit(CheckResult, Object.PropertyValue, 7)
189
break
190
case 1 // direction
191
CheckResult = Object.PropertyValue
192
CheckResult &= 3
193
break
194
end switch
195
else
196
switch Editor.VariableID
197
case EDIT_VAR_PROPVAL // Property Value
198
Object.PropertyValue = Editor.VariableValue
199
break
200
case 0 // startStreched
201
Object.PropertyValue &= 127
202
SetBit(Object.PropertyValue, 7, Editor.VariableValue)
203
break
204
205
case 1 // direction
206
Object.PropertyValue &= 128
207
Object.PropertyValue |= Editor.VariableValue
208
break
209
end switch
210
end if
211
end sub
212
213
sub RSDKDraw
214
Object.Direction = Object.PropertyValue
215
Object.Direction &= 3
216
if Object.PropertyValue > 127
217
TempValue1 = 74
218
else
219
TempValue1 = 0
220
end if
221
TempValue0 = TempValue1
222
TempValue0 /= 20
223
DrawSpriteFX(0, FX_FLIP, Object.XPos, Object.YPos)
224
switch TempValue0
225
case 0
226
DrawSpriteFX(2, FX_FLIP, Object.XPos, Object.YPos)
227
break
228
case 1
229
DrawSpriteFX(2, FX_FLIP, Object.XPos, Object.YPos)
230
DrawSpriteFX(3, FX_FLIP, Object.XPos, Object.YPos)
231
break
232
case 2
233
DrawSpriteFX(2, FX_FLIP, Object.XPos, Object.YPos)
234
DrawSpriteFX(3, FX_FLIP, Object.XPos, Object.YPos)
235
DrawSpriteFX(4, FX_FLIP, Object.XPos, Object.YPos)
236
break
237
case 3
238
DrawSpriteFX(2, FX_FLIP, Object.XPos, Object.YPos)
239
DrawSpriteFX(3, FX_FLIP, Object.XPos, Object.YPos)
240
DrawSpriteFX(4, FX_FLIP, Object.XPos, Object.YPos)
241
DrawSpriteFX(5, FX_FLIP, Object.XPos, Object.YPos)
242
break
243
end switch
244
245
if Editor.ShowGizmos == true
246
Editor.DrawingOverlay = true
247
TempValue0 = Object.XPos
248
TempValue1 = Object.YPos
249
TempValue2 = 0x10000
250
TempValue2 *= 74
251
if Object.PropertyValue < 127
252
switch Object.Direction
253
case 0
254
TempValue0 += TempValue2
255
TempValue1 += TempValue2
256
break
257
case 1
258
TempValue0 -= TempValue2
259
TempValue1 += TempValue2
260
break
261
case 2
262
TempValue0 += TempValue2
263
TempValue1 -= TempValue2
264
break
265
case 3
266
TempValue0 -= TempValue2
267
TempValue1 -= TempValue2
268
break
269
end switch
270
else
271
switch Object.Direction
272
case 0
273
TempValue0 -= TempValue2
274
TempValue1 -= TempValue2
275
break
276
case 1
277
TempValue0 += TempValue2
278
TempValue1 -= TempValue2
279
break
280
case 2
281
TempValue0 -= TempValue2
282
TempValue1 += TempValue2
283
break
284
case 3
285
TempValue0 += TempValue2
286
TempValue1 += TempValue2
287
break
288
end switch
289
290
end if
291
DrawArrow(Object.XPos, Object.YPos, TempValue0, TempValue1, 255, 255, 0)
292
Editor.DrawingOverlay = false
293
end if
294
end sub
295
296
297
sub RSDKLoad
298
LoadSpriteSheet("R8/Objects2.gif")
299
300
SpriteFrame(-33, -36, 66, 68, 67, 127) // #0 - Buzzsaw frame 0
301
SpriteFrame(-33, -36, 66, 68, 190, 154) // #1 - Buzzsaw frame 1
302
303
SpriteFrame(-53, -53, 26, 26, 158, 43) // #2 - Buzzsaw Extension frame 0
304
SpriteFrame(-73, -73, 26, 26, 158, 43) // #3 - Buzzsaw Extension frame 1
305
SpriteFrame(-93, -93, 26, 26, 158, 43) // #4 - Buzzsaw Extension frame 2
306
SpriteFrame(-113, -113, 26, 26, 158, 43) // #5 - Buzzsaw Extension frame 3
307
308
AddEditorVariable("startStreched")
309
SetActiveVariable("startStreched")
310
AddEnumVariable("false", 0)
311
AddEnumVariable("true", 1)
312
313
AddEditorVariable("direction")
314
SetActiveVariable("direction")
315
AddEnumVariable("Right", 0)
316
AddEnumVariable("Left", 1)
317
AddEnumVariable("Upside-Down Right", 2)
318
AddEnumVariable("Upside-Down Left", 3)
319
end sub
320
321