Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-Sonic-2-2013-Script-Decompilation
Path: blob/master/Sonic 1/Scripts/SBZ/Buzzsaw.txt
1482 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Buzzsaw 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.startPos.x
13
private alias object.value1 : object.startPos.y
14
15
// Player Aliases
16
private alias object.xpos : player.xpos
17
private alias object.ypos : player.ypos
18
19
private alias object.value17 : debugMode.currentSelection
20
21
22
// ========================
23
// Function Declarations
24
// ========================
25
26
reserve function Buzzsaw_DebugDraw
27
reserve function Buzzsaw_DebugSpawn
28
reserve function Buzzsaw_ProcessCollisions
29
reserve function Buzzsaw_IsOnScreen
30
reserve function Buzzsaw_ProcessLogic
31
32
33
// ========================
34
// Static Values
35
// ========================
36
37
private value Buzzsaw_startDebugID = 0
38
39
40
// ========================
41
// Function Definitions
42
// ========================
43
44
private function Buzzsaw_DebugDraw
45
temp0 = debugMode[0].currentSelection
46
temp0 -= Buzzsaw_startDebugID
47
temp0--
48
DrawSprite(temp0)
49
end function
50
51
52
private function Buzzsaw_DebugSpawn
53
CreateTempObject(TypeName[Buzzsaw], 0, object.xpos, object.ypos)
54
object[tempObjectPos].startPos.x = object.xpos
55
object[tempObjectPos].startPos.y = object.ypos
56
object[tempObjectPos].inkEffect = INK_ALPHA
57
object[tempObjectPos].propertyValue = debugMode[0].currentSelection
58
object[tempObjectPos].propertyValue -= Buzzsaw_startDebugID
59
end function
60
61
62
private function Buzzsaw_ProcessCollisions
63
object.animationTimer--
64
if object.animationTimer < 0
65
object.animationTimer = 2
66
object.frame ^= 1
67
end if
68
69
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
70
BoxCollisionTest(C_TOUCH, object.entityPos, -24, -24, 24, 24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
71
if checkResult == true
72
CallFunction(Player_Hit)
73
end if
74
next
75
end function
76
77
78
private function Buzzsaw_IsOnScreen
79
checkResult = false
80
temp0 = camera[0].xpos
81
temp0 -= object.ixpos
82
temp0 -= 8
83
Abs(temp0)
84
if temp0 <= screen.xcenter
85
temp0 = camera[0].ypos
86
temp0 -= object.iypos
87
temp0 -= 32
88
Abs(temp0)
89
if temp0 <= screen.ycenter
90
checkResult = true
91
end if
92
end if
93
end function
94
95
96
private function Buzzsaw_ProcessLogic
97
if object.alpha < 0x100
98
object.alpha += 0x10
99
end if
100
101
object.xpos += object.xvel
102
CallFunction(Buzzsaw_ProcessCollisions)
103
104
// Out of bounds?
105
if object.outOfBounds == true
106
107
// Check if at least main X is in bounds
108
temp0 = object.xpos
109
object.xpos = object.startPos.x
110
111
// Still out of bounds?
112
if object.outOfBounds == true
113
// Reset stuff
114
object.xpos = object.startPos.x
115
object.xvel = 0
116
object.state = 0
117
object.alpha = 0
118
object.animationTimer = 0
119
object.priority = PRIORITY_BOUNDS
120
else
121
// Main X is in bounds, return to the previous X pos and stay active
122
object.xpos = temp0
123
end if
124
end if
125
end function
126
127
128
// ========================
129
// Events
130
// ========================
131
132
event ObjectUpdate
133
switch object.propertyValue
134
case 0
135
// Static variant, do nothing
136
break
137
138
case 1 // Horizontally moving variant
139
GetTableValue(temp0, 6, StageSetup_oscillationTable)
140
GetBit(temp1, object.direction, 0)
141
if temp1 == FLIP_X
142
FlipSign(temp0)
143
temp0 += 0x6000
144
end if
145
temp0 <<= 8
146
object.xpos = object.startPos.x
147
object.xpos -= temp0
148
CallFunction(Buzzsaw_ProcessCollisions)
149
150
temp0 = oscillation
151
temp0 &= 15
152
if temp0 == 0
153
CallFunction(Buzzsaw_IsOnScreen)
154
if checkResult == true
155
PlaySfx(SfxName[Buzzsaw], false)
156
end if
157
end if
158
break
159
160
case 2 // Vertically moving variant
161
GetTableValue(temp0, 2, StageSetup_oscillationTable)
162
GetBit(temp1, object.direction, 0)
163
if temp1 == FLIP_X
164
FlipSign(temp0)
165
temp0 += 0x8000
166
end if
167
temp0 <<= 8
168
object.ypos = object.startPos.y
169
object.ypos -= temp0
170
CallFunction(Buzzsaw_ProcessCollisions)
171
172
GetTableValue(temp0, 2, StageSetup_oscillationTable)
173
temp0 >>= 8
174
if temp0 == 24
175
CallFunction(Buzzsaw_IsOnScreen)
176
if checkResult == true
177
PlaySfx(SfxName[Buzzsaw], false)
178
end if
179
end if
180
break
181
182
case 3 // Stray (Moving Right)
183
if object.state == 0
184
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
185
if object.state == 0
186
temp0 = player[currentPlayer].xpos
187
temp0 -= 0xC00000
188
if temp0 >= 0
189
temp0 -= object.xpos
190
if temp0 >= 0
191
temp0 = player[currentPlayer].ypos
192
temp0 -= 0x800000
193
if temp0 < object.ypos
194
temp0 += 0x1000000
195
if temp0 >= object.ypos
196
object.state = 1
197
object.xvel = 0x60000
198
object.frame = 2
199
object.priority = PRIORITY_ACTIVE
200
PlaySfx(SfxName[Buzzsaw], false)
201
end if
202
end if
203
end if
204
end if
205
end if
206
next
207
else
208
CallFunction(Buzzsaw_ProcessLogic)
209
end if
210
break
211
212
case 4 // Stray (Moving Left)
213
if object.state == 0
214
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
215
if object.state == 0
216
temp0 = player[currentPlayer].xpos
217
temp0 += 0xE00000
218
temp0 -= object.xpos
219
if temp0 < 0
220
temp0 = player[currentPlayer].ypos
221
temp0 -= 0x800000
222
if temp0 < object.ypos
223
temp0 += 0x1000000
224
if temp0 >= object.ypos
225
object.state = 1
226
object.xvel = -0x60000
227
object.frame = 2
228
object.priority = PRIORITY_ACTIVE
229
PlaySfx(SfxName[Buzzsaw], false)
230
end if
231
end if
232
end if
233
end if
234
next
235
else
236
CallFunction(Buzzsaw_ProcessLogic)
237
end if
238
break
239
240
end switch
241
end event
242
243
244
event ObjectDraw
245
if object.propertyValue < 3
246
DrawSprite(object.frame)
247
else
248
if object.state != 0
249
DrawSpriteFX(object.frame, FX_INK, object.xpos, object.ypos)
250
end if
251
end if
252
end event
253
254
255
event ObjectStartup
256
LoadSpriteSheet("SBZ/Objects.gif")
257
SpriteFrame(-32, -60, 64, 92, 189, 1)
258
SpriteFrame(-32, -60, 64, 92, 254, 1)
259
SpriteFrame(-32, -32, 64, 64, 319, 50)
260
SpriteFrame(-32, -32, 64, 64, 384, 50)
261
262
foreach (TypeName[Buzzsaw], arrayPos0, ALL_ENTITIES)
263
object[arrayPos0].startPos.x = object[arrayPos0].xpos
264
object[arrayPos0].startPos.y = object[arrayPos0].ypos
265
object[arrayPos0].inkEffect = INK_ALPHA
266
next
267
268
temp0 = 0
269
Buzzsaw_startDebugID = DebugMode_ObjCount
270
Buzzsaw_startDebugID--
271
while temp0 < 3
272
SetTableValue(TypeName[Buzzsaw], DebugMode_ObjCount, DebugMode_TypesTable)
273
SetTableValue(Buzzsaw_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
274
SetTableValue(Buzzsaw_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
275
DebugMode_ObjCount++
276
temp0++
277
loop
278
end event
279
280
281
// ========================
282
// Editor Events
283
// ========================
284
285
event RSDKEdit
286
if editor.returnVariable == true
287
switch editor.variableID
288
case EDIT_VAR_PROPVAL // property value
289
checkResult = object.propertyValue
290
break
291
292
case 0 // type
293
checkResult = object.propertyValue
294
break
295
296
end switch
297
else
298
switch editor.variableID
299
case EDIT_VAR_PROPVAL // property value
300
object.propertyValue = editor.variableValue
301
break
302
303
case 0 // type
304
object.propertyValue = editor.variableValue
305
break
306
307
end switch
308
end if
309
end event
310
311
312
event RSDKDraw
313
DrawSpriteFX(object.propertyValue, FX_FLIP, object.xpos, object.ypos)
314
end event
315
316
317
event RSDKLoad
318
LoadSpriteSheet("SBZ/Objects.gif")
319
SpriteFrame(-32, -60, 64, 92, 189, 1)
320
SpriteFrame(-32, -60, 64, 92, 189, 1)
321
SpriteFrame(-32, -60, 64, 92, 189, 1)
322
SpriteFrame(-32, -32, 64, 64, 319, 50)
323
SpriteFrame(-32, -32, 64, 64, 319, 50)
324
325
AddEditorVariable("type")
326
SetActiveVariable("type")
327
AddEnumVariable("None", 0)
328
AddEnumVariable("Move Horizontally", 1)
329
AddEnumVariable("Move Vertically", 2)
330
AddEnumVariable("Stray Buzzsaw (From Left)", 3)
331
AddEnumVariable("Stray Buzzsaw (From Right)", 4)
332
end event
333
334