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/WFZ/PullChain.txt
1478 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Pull Chain 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.propertyValue : object.isRetracting
13
14
private alias object.value0 : object.extendPos
15
private alias object.value1 : object.startPos.y
16
private alias object.value2 : object.originPos.y
17
private alias object.value3 : object.grabDelay
18
private alias object.value4 : object.length
19
20
// Player Aliases
21
private alias object.state : player.state
22
private alias object.xpos : player.xpos
23
private alias object.ypos : player.ypos
24
private alias object.xvel : player.xvel
25
private alias object.yvel : player.yvel
26
private alias object.speed : player.speed
27
private alias object.gravity : player.gravity
28
private alias object.animation : player.animation
29
private alias object.collisionTop : player.collisionTop
30
private alias object.jumpPress : player.jumpPress
31
32
private alias object.value17 : debugMode.currentSelection
33
34
// ========================
35
// Function Declarations
36
// ========================
37
38
reserve function PullChain_DebugDraw
39
reserve function PullChain_DebugSpawn
40
41
42
// ========================
43
// Static Values
44
// ========================
45
46
private value PullChain_sheetX = 0
47
private value PullChain_sheetY = 0
48
private value PullChain_startDebugID = 0
49
50
51
// ========================
52
// Function Definitions
53
// ========================
54
55
private function PullChain_DebugDraw
56
DrawSprite(1)
57
end function
58
59
60
private function PullChain_DebugSpawn
61
temp0 = debugMode[0].currentSelection
62
temp0 -= PullChain_startDebugID
63
CreateTempObject(TypeName[Pull Chain], 0, object.xpos, object.ypos)
64
object[tempObjectPos].originPos.y = object[tempObjectPos].ypos
65
66
GetBit(temp1, temp0, 0)
67
if temp1 == 0
68
object[tempObjectPos].length = 80
69
else
70
object[tempObjectPos].length = 48
71
end if
72
73
GetBit(temp2, temp0, 1)
74
if temp2 == 0
75
object[tempObjectPos].yvel = 0x20000
76
object[tempObjectPos].ypos -= 0xF0000
77
else
78
object[tempObjectPos].yvel = -0x20000
79
if temp1 == 0
80
object[tempObjectPos].ypos += 0x910000
81
else
82
object[tempObjectPos].ypos += 0x510000
83
end if
84
end if
85
86
object[tempObjectPos].startPos.y = object[tempObjectPos].ypos
87
end function
88
89
90
// ========================
91
// Events
92
// ========================
93
94
event ObjectUpdate
95
if object.isRetracting == true
96
if object.extendPos < object.length
97
object.extendPos++
98
object.ypos += object.yvel
99
end if
100
else
101
if object.extendPos > 0
102
object.extendPos--
103
object.ypos -= object.yvel
104
end if
105
end if
106
107
object.isRetracting = false
108
if object.grabDelay > 0
109
object.grabDelay--
110
end if
111
112
temp0 = object.ypos
113
temp0 += 0x380000
114
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
115
if player[currentPlayer].state != Player_State_Static
116
if object.grabDelay == 0
117
if player[currentPlayer].ypos < temp0
118
BoxCollisionTest(C_TOUCH, object.entityPos, -8, 70, 8, 96, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
119
else
120
BoxCollisionTest(C_TOUCH, object.entityPos, -8, 32, 8, 48, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
121
end if
122
123
if checkResult == true
124
player[currentPlayer].state = Player_State_Static
125
player[currentPlayer].animation = ANI_HANGING
126
player[currentPlayer].speed = 0
127
player[currentPlayer].xvel = 0
128
player[currentPlayer].yvel = 0
129
player[currentPlayer].xpos = object.xpos
130
player[currentPlayer].ypos = player[currentPlayer].collisionTop
131
FlipSign(player[currentPlayer].ypos)
132
player[currentPlayer].ypos += 36
133
player[currentPlayer].ypos <<= 16
134
player[currentPlayer].ypos += object.ypos
135
object.isRetracting |= true
136
end if
137
end if
138
else
139
BoxCollisionTest(C_TOUCH, object.entityPos, -8, -4, 8, 72, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
140
if checkResult == true
141
if player[currentPlayer].jumpPress == true
142
#platform: USE_STANDALONE
143
player[currentPlayer].state = Player_State_Air
144
#endplatform
145
#platform: USE_ORIGINS
146
player[currentPlayer].state = Player_State_Air_NoDropDash
147
#endplatform
148
player[currentPlayer].yvel = -0x40000
149
player[currentPlayer].gravity = 1
150
object.grabDelay = 30
151
else
152
player[currentPlayer].xpos = object.xpos
153
player[currentPlayer].ypos = player[currentPlayer].collisionTop
154
FlipSign(player[currentPlayer].ypos)
155
player[currentPlayer].ypos += 36
156
player[currentPlayer].ypos <<= 16
157
player[currentPlayer].ypos += object.ypos
158
object.isRetracting |= true
159
end if
160
end if
161
end if
162
next
163
164
if object.frame == 0
165
if object.isRetracting == true
166
PlaySfx(SfxName[Catch], false)
167
end if
168
end if
169
170
// Not Actually used...
171
object.frame = object.isRetracting
172
end event
173
174
175
event ObjectDraw
176
temp0 = object.ypos
177
temp0 -= object.originPos.y
178
temp0 >>= 16
179
temp1 = PullChain_sheetY
180
temp1 -= temp0
181
temp2 = -40
182
temp2 -= temp0
183
temp0 += 80
184
EditFrame(0, -12, temp2, 24, temp0, PullChain_sheetX, temp1)
185
186
DrawSprite(0)
187
end event
188
189
190
event ObjectStartup
191
CheckCurrentStageFolder("Zone11")
192
if checkResult == true
193
LoadSpriteSheet("SCZ/Objects.gif")
194
SpriteFrame(-12, -40, 24, 65, 236, 191) // The Hook - #0
195
SpriteFrame(-12, -40, 24, 65, 236, 191) // The Hook (Again) - #1
196
PullChain_sheetX = 236
197
PullChain_sheetY = 176
198
else
199
LoadSpriteSheet("MBZ/Objects.gif")
200
SpriteFrame(-12, -40, 24, 65, 901, 358) // The Hook - #0
201
SpriteFrame(-12, -40, 24, 65, 901, 358) // The Hook (Again) - #1
202
PullChain_sheetX = 901
203
PullChain_sheetY = 358
204
PullChain_sheetY += 176 // weird way to do it, but sure
205
end if
206
207
foreach (TypeName[Pull Chain], arrayPos0, ALL_ENTITIES)
208
object[arrayPos0].originPos.y = object[arrayPos0].ypos
209
GetBit(temp1, object[arrayPos0].propertyValue, 0)
210
if temp1 == false
211
object[arrayPos0].length = 80
212
else
213
object[arrayPos0].length = 48
214
end if
215
216
GetBit(temp0, object[arrayPos0].propertyValue, 4)
217
if temp0 == false
218
object[arrayPos0].yvel = 0x20000
219
object[arrayPos0].ypos -= 0x200000
220
else
221
object[arrayPos0].yvel = -0x20000
222
if temp1 == false
223
object[arrayPos0].ypos += 0x800000
224
else
225
object[arrayPos0].ypos += 0x400000
226
end if
227
object[arrayPos0].originPos.y -= 0x110000
228
end if
229
230
object[arrayPos0].startPos.y = object[arrayPos0].ypos
231
object[arrayPos0].propertyValue = 0
232
next
233
234
temp0 = 0
235
PullChain_startDebugID = DebugMode_ObjCount
236
while temp0 < 4
237
SetTableValue(TypeName[Pull Chain], DebugMode_ObjCount, DebugMode_TypesTable)
238
SetTableValue(PullChain_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
239
SetTableValue(PullChain_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
240
DebugMode_ObjCount++
241
temp0++
242
loop
243
end event
244
245
246
// ========================
247
// Editor Events
248
// ========================
249
250
event RSDKEdit
251
if editor.returnVariable == true
252
switch editor.variableID
253
case EDIT_VAR_PROPVAL // property value
254
checkResult = object.propertyValue
255
break
256
257
case 0 // type
258
GetBit(checkResult, object.propertyValue, 0)
259
break
260
261
case 1 // direction
262
GetBit(checkResult, object.propertyValue, 4)
263
break
264
265
end switch
266
else
267
switch editor.variableID
268
case EDIT_VAR_PROPVAL // property value
269
object.propertyValue = editor.variableValue
270
break
271
272
case 0 // type
273
CheckNotEqual(editor.variableValue, false)
274
SetBit(object.propertyValue, 0, checkResult)
275
break
276
277
case 1 // direction
278
CheckNotEqual(editor.variableValue, false)
279
SetBit(object.propertyValue, 4, checkResult)
280
break
281
282
end switch
283
end if
284
end event
285
286
287
event RSDKDraw
288
temp7 = object.ypos
289
object.originPos.y = temp7
290
291
GetBit(temp1, object.propertyValue, 0)
292
GetBit(temp0, object.propertyValue, 4)
293
if temp0 == false
294
object.ypos -= 0x200000
295
else
296
if temp1 == false
297
object.ypos += 0x800000
298
else
299
object.ypos += 0x400000
300
end if
301
object.originPos.y -= 0x110000
302
end if
303
304
temp0 = object.ypos
305
temp0 -= object.originPos.y
306
temp0 >>= 16
307
temp1 = PullChain_sheetY
308
temp1 -= temp0
309
temp2 = -40
310
temp2 -= temp0
311
temp0 += 80
312
EditFrame(0, -12, temp2, 24, temp0, PullChain_sheetX, temp1)
313
314
DrawSprite(0)
315
316
object.ypos = temp7
317
end event
318
319
320
event RSDKLoad
321
CheckCurrentStageFolder("Zone11")
322
if checkResult == true
323
LoadSpriteSheet("SCZ/Objects.gif")
324
SpriteFrame(-12, -40, 24, 65, 236, 191) // The Hook - #0
325
SpriteFrame(-12, -40, 24, 65, 236, 191) // The Hook (Again) - #1
326
PullChain_sheetX = 236
327
PullChain_sheetY = 176
328
else
329
LoadSpriteSheet("MBZ/Objects.gif")
330
SpriteFrame(-12, -40, 24, 65, 901, 358) // The Hook - #0
331
SpriteFrame(-12, -40, 24, 65, 901, 358) // The Hook (Again) - #1
332
PullChain_sheetX = 901
333
PullChain_sheetY = 358
334
PullChain_sheetY += 176
335
end if
336
337
AddEditorVariable("length")
338
SetActiveVariable("length")
339
AddEnumVariable("Long", 0)
340
AddEnumVariable("Short", 1)
341
342
AddEditorVariable("direction")
343
SetActiveVariable("direction")
344
AddEnumVariable("Down", 0)
345
AddEnumVariable("Up", 1)
346
end event
347
348