Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-Sonic-2-2013-Script-Decompilation
Path: blob/master/Sonic 2/Scripts/HPZ/Pendulum.txt
1479 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Pendulum 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.value1 : object.spikeBallPosFG
13
private alias object.value2 : object.spikeBallFrameFG
14
private alias object.value3 : object.spikeBallPosBG
15
private alias object.value4 : object.spikeBallFrameBG
16
17
18
// ========================
19
// Function Declarations
20
// ========================
21
22
reserve function Pendulum_DebugDraw
23
reserve function Pendulum_DebugSpawn
24
25
26
// ========================
27
// Function Definitions
28
// ========================
29
30
private function Pendulum_DebugDraw
31
DrawSprite(0)
32
DrawSprite(1)
33
DrawSprite(2)
34
end function
35
36
37
private function Pendulum_DebugSpawn
38
CreateTempObject(TypeName[Pendulum], 0, object.xpos, object.ypos)
39
end function
40
41
42
// ========================
43
// Events
44
// ========================
45
46
event ObjectUpdate
47
if object.yvel >= 0
48
object.yvel += 0x1200
49
else
50
object.yvel += 0xF00
51
end if
52
object.spikeBallPosFG += object.yvel
53
54
if object.spikeBallPosFG < -0x340000
55
object.spikeBallPosFG = -0x340000
56
end if
57
58
if object.spikeBallPosFG >= 0x340000
59
object.spikeBallPosFG = 0x340000
60
temp0 = object.yvel
61
temp0 >>= 4
62
object.yvel -= temp0
63
FlipSign(object.yvel)
64
PlaySfx(SfxName[Ground Impact], false)
65
end if
66
67
object.spikeBallPosBG = object.spikeBallPosFG
68
FlipSign(object.spikeBallPosBG)
69
object.spikeBallFrameFG = 3
70
object.spikeBallFrameBG = 6
71
72
temp0 = object.spikeBallPosFG
73
temp0 >>= 16
74
if temp0 > -48
75
object.spikeBallFrameBG = 7
76
end if
77
78
if temp0 > -24
79
object.spikeBallFrameBG = 8
80
end if
81
82
if temp0 > -32
83
object.spikeBallFrameFG = 4
84
end if
85
86
if temp0 > 24
87
object.spikeBallFrameFG = 5
88
end if
89
90
if object.spikeBallFrameFG > 3
91
temp6 = object.ypos
92
object.ypos += object.spikeBallPosFG
93
94
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
95
BoxCollisionTest(C_TOUCH, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
96
if checkResult == true
97
CallFunction(Player_Hit)
98
end if
99
next
100
101
object.ypos = temp6
102
end if
103
end event
104
105
106
event ObjectDraw
107
if object.spikeBallPosBG > 0
108
temp0 = object.spikeBallPosBG
109
temp0 *= 28
110
temp0 /= 52
111
temp0 += object.ypos
112
DrawSpriteXY(15, object.xpos, temp0)
113
114
temp0 = object.spikeBallPosBG
115
temp0 *= 36
116
temp0 /= 52
117
temp0 += object.ypos
118
DrawSpriteXY(16, object.xpos, temp0)
119
120
temp0 = object.spikeBallPosBG
121
temp0 *= 12
122
temp0 /= 52
123
temp0 += object.ypos
124
DrawSpriteXY(13, object.xpos, temp0)
125
126
temp0 = object.spikeBallPosBG
127
temp0 *= 20
128
temp0 /= 52
129
temp0 += object.ypos
130
DrawSpriteXY(14, object.xpos, temp0)
131
else
132
temp0 = object.spikeBallPosBG
133
temp0 *= 32
134
temp0 /= 52
135
temp0 += object.ypos
136
DrawSpriteXY(16, object.xpos, temp0)
137
138
temp0 = object.spikeBallPosBG
139
temp0 *= 40
140
temp0 /= 52
141
temp0 += object.ypos
142
DrawSpriteXY(15, object.xpos, temp0)
143
144
temp0 = object.spikeBallPosBG
145
temp0 *= 16
146
temp0 /= 52
147
temp0 += object.ypos
148
DrawSpriteXY(14, object.xpos, temp0)
149
150
temp0 = object.spikeBallPosBG
151
temp0 *= 24
152
temp0 /= 52
153
temp0 += object.ypos
154
DrawSpriteXY(13, object.xpos, temp0)
155
end if
156
157
temp0 = object.spikeBallPosBG
158
temp0 += object.ypos
159
DrawSpriteXY(object.spikeBallFrameBG, object.xpos, temp0)
160
DrawSprite(0)
161
DrawSprite(1)
162
DrawSprite(2)
163
164
if object.spikeBallPosFG > 0
165
temp0 = object.spikeBallPosFG
166
temp0 *= 12
167
temp0 /= 52
168
temp0 += object.ypos
169
DrawSpriteXY(9, object.xpos, temp0)
170
171
temp0 = object.spikeBallPosFG
172
temp0 *= 20
173
temp0 /= 52
174
temp0 += object.ypos
175
DrawSpriteXY(10, object.xpos, temp0)
176
177
temp0 = object.spikeBallPosFG
178
temp0 *= 28
179
temp0 /= 52
180
temp0 += object.ypos
181
DrawSpriteXY(11, object.xpos, temp0)
182
183
temp0 = object.spikeBallPosFG
184
temp0 *= 36
185
temp0 /= 52
186
temp0 += object.ypos
187
DrawSpriteXY(12, object.xpos, temp0)
188
else
189
temp0 = object.spikeBallPosFG
190
temp0 *= 12
191
temp0 /= 52
192
temp0 += object.ypos
193
DrawSpriteXY(10, object.xpos, temp0)
194
195
temp0 = object.spikeBallPosFG
196
temp0 *= 20
197
temp0 /= 52
198
temp0 += object.ypos
199
DrawSpriteXY(9, object.xpos, temp0)
200
201
temp0 = object.spikeBallPosFG
202
temp0 *= 28
203
temp0 /= 52
204
temp0 += object.ypos
205
DrawSpriteXY(12, object.xpos, temp0)
206
207
temp0 = object.spikeBallPosFG
208
temp0 *= 36
209
temp0 /= 52
210
temp0 += object.ypos
211
DrawSpriteXY(11, object.xpos, temp0)
212
end if
213
214
temp0 = object.spikeBallPosFG
215
temp0 += object.ypos
216
DrawSpriteXY(object.spikeBallFrameFG, object.xpos, temp0)
217
end event
218
219
220
event ObjectStartup
221
LoadSpriteSheet("HPZ/Objects.gif")
222
SpriteFrame(-40, -12, 80, 24, 256, 114) // joint - #0
223
SpriteFrame(-40, 12, 8, 56, 256, 139) // pole L - #1
224
SpriteFrame(32, 12, 8, 56, 256, 196) // pole R - #2
225
SpriteFrame(-16, -16, 32, 32, 451, 132) // spikeball (BG) - #3
226
SpriteFrame(-20, -20, 40, 40, 402, 66) // spikeball (FG) - #4
227
SpriteFrame(-24, -24, 48, 48, 353, 66) // spikeball (Active) - #5
228
SpriteFrame(-12, -12, 24, 24, 418, 107) // green orb (big) - #6
229
SpriteFrame(-10, -10, 20, 20, 378, 115) // green orb (med) - #7
230
SpriteFrame(-8, -8, 16, 16, 361, 115) // green orb (small) - #8
231
SpriteFrame(-3, -4, 6, 8, 349, 115) // spikeBall bar 1 (top) - #9
232
SpriteFrame(-3, -4, 6, 8, 349, 119) // spikeBall bar 1 (bottom) - #10
233
SpriteFrame(-2, -4, 4, 8, 356, 115) // spikeBall bar 2 (top) - #11
234
SpriteFrame(-2, -4, 4, 8, 356, 119) // spikeBall bar 2 (bottom) - #12
235
SpriteFrame(-3, -4, 6, 8, 337, 115) // spikeBall bar 3 (top) - #13
236
SpriteFrame(-3, -4, 6, 8, 337, 119) // spikeBall bar 3 (bottom) - #14
237
SpriteFrame(-2, -4, 4, 8, 344, 115) // spikeBall bar 4 (top) - #15
238
SpriteFrame(-2, -4, 4, 8, 344, 119) // spikeBall bar 4 (bottom) - #16
239
240
SetTableValue(TypeName[Pendulum], DebugMode_ObjCount, DebugMode_TypesTable)
241
SetTableValue(Pendulum_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
242
SetTableValue(Pendulum_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
243
DebugMode_ObjCount++
244
245
foreach (TypeName[Pendulum], arrayPos0, ALL_ENTITIES)
246
object[arrayPos0].spikeBallPosFG = -0x340000
247
next
248
end event
249
250
251
// ========================
252
// Editor Events
253
// ========================
254
255
event RSDKDraw
256
object.spikeBallPosFG = -0x340000
257
object.spikeBallPosBG = object.spikeBallPosFG
258
FlipSign(object.spikeBallPosBG)
259
object.spikeBallFrameFG = 3
260
object.spikeBallFrameBG = 6
261
262
temp0 = object.spikeBallPosFG
263
temp0 >>= 16
264
if temp0 > -48
265
object.spikeBallFrameBG = 7
266
end if
267
268
if temp0 > -24
269
object.spikeBallFrameBG = 8
270
end if
271
272
if temp0 > -32
273
object.spikeBallFrameFG = 4
274
end if
275
276
if temp0 > 24
277
object.spikeBallFrameFG = 5
278
end if
279
280
if object.spikeBallPosBG > 0
281
temp0 = object.spikeBallPosBG
282
temp0 *= 28
283
temp0 /= 52
284
temp0 += object.ypos
285
DrawSpriteXY(15, object.xpos, temp0)
286
287
temp0 = object.spikeBallPosBG
288
temp0 *= 36
289
temp0 /= 52
290
temp0 += object.ypos
291
DrawSpriteXY(16, object.xpos, temp0)
292
293
temp0 = object.spikeBallPosBG
294
temp0 *= 12
295
temp0 /= 52
296
temp0 += object.ypos
297
DrawSpriteXY(13, object.xpos, temp0)
298
299
temp0 = object.spikeBallPosBG
300
temp0 *= 20
301
temp0 /= 52
302
temp0 += object.ypos
303
DrawSpriteXY(14, object.xpos, temp0)
304
else
305
temp0 = object.spikeBallPosBG
306
temp0 *= 32
307
temp0 /= 52
308
temp0 += object.ypos
309
DrawSpriteXY(16, object.xpos, temp0)
310
311
temp0 = object.spikeBallPosBG
312
temp0 *= 40
313
temp0 /= 52
314
temp0 += object.ypos
315
DrawSpriteXY(15, object.xpos, temp0)
316
317
temp0 = object.spikeBallPosBG
318
temp0 *= 16
319
temp0 /= 52
320
temp0 += object.ypos
321
DrawSpriteXY(14, object.xpos, temp0)
322
323
temp0 = object.spikeBallPosBG
324
temp0 *= 24
325
temp0 /= 52
326
temp0 += object.ypos
327
DrawSpriteXY(13, object.xpos, temp0)
328
end if
329
330
temp0 = object.spikeBallPosBG
331
temp0 += object.ypos
332
DrawSpriteXY(object.spikeBallFrameBG, object.xpos, temp0)
333
DrawSprite(0)
334
DrawSprite(1)
335
DrawSprite(2)
336
337
if object.spikeBallPosFG > 0
338
temp0 = object.spikeBallPosFG
339
temp0 *= 12
340
temp0 /= 52
341
temp0 += object.ypos
342
DrawSpriteXY(9, object.xpos, temp0)
343
344
temp0 = object.spikeBallPosFG
345
temp0 *= 20
346
temp0 /= 52
347
temp0 += object.ypos
348
DrawSpriteXY(10, object.xpos, temp0)
349
350
temp0 = object.spikeBallPosFG
351
temp0 *= 28
352
temp0 /= 52
353
temp0 += object.ypos
354
DrawSpriteXY(11, object.xpos, temp0)
355
356
temp0 = object.spikeBallPosFG
357
temp0 *= 36
358
temp0 /= 52
359
temp0 += object.ypos
360
DrawSpriteXY(12, object.xpos, temp0)
361
else
362
temp0 = object.spikeBallPosFG
363
temp0 *= 12
364
temp0 /= 52
365
temp0 += object.ypos
366
DrawSpriteXY(10, object.xpos, temp0)
367
368
temp0 = object.spikeBallPosFG
369
temp0 *= 20
370
temp0 /= 52
371
temp0 += object.ypos
372
DrawSpriteXY(9, object.xpos, temp0)
373
374
temp0 = object.spikeBallPosFG
375
temp0 *= 28
376
temp0 /= 52
377
temp0 += object.ypos
378
DrawSpriteXY(12, object.xpos, temp0)
379
380
temp0 = object.spikeBallPosFG
381
temp0 *= 36
382
temp0 /= 52
383
temp0 += object.ypos
384
DrawSpriteXY(11, object.xpos, temp0)
385
end if
386
387
temp0 = object.spikeBallPosFG
388
temp0 += object.ypos
389
DrawSpriteXY(object.spikeBallFrameFG, object.xpos, temp0)
390
end event
391
392
393
event RSDKLoad
394
LoadSpriteSheet("HPZ/Objects.gif")
395
SpriteFrame(-40, -12, 80, 24, 256, 114)
396
SpriteFrame(-40, 12, 8, 56, 256, 139)
397
SpriteFrame(32, 12, 8, 56, 256, 196)
398
SpriteFrame(-16, -16, 32, 32, 451, 132)
399
SpriteFrame(-20, -20, 40, 40, 402, 66)
400
SpriteFrame(-24, -24, 48, 48, 353, 66)
401
SpriteFrame(-12, -12, 24, 24, 418, 107)
402
SpriteFrame(-10, -10, 20, 20, 378, 115)
403
SpriteFrame(-8, -8, 16, 16, 361, 115)
404
SpriteFrame(-3, -4, 6, 8, 349, 115)
405
SpriteFrame(-3, -4, 6, 8, 349, 119)
406
SpriteFrame(-2, -4, 4, 8, 356, 115)
407
SpriteFrame(-2, -4, 4, 8, 356, 119)
408
SpriteFrame(-3, -4, 6, 8, 337, 115)
409
SpriteFrame(-3, -4, 6, 8, 337, 119)
410
SpriteFrame(-2, -4, 4, 8, 344, 115)
411
SpriteFrame(-2, -4, 4, 8, 344, 119)
412
413
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
414
end event
415
416