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/Global/PSwitch_H.txt
1485 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Plane Sw H 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.extendTop
13
private alias object.value1 : object.extendBottom
14
private alias object.value2 : object.planeR
15
private alias object.value3 : object.planeL
16
private alias object.value4 : object.drawOrderR
17
private alias object.value5 : object.drawOrderL
18
private alias object.value6 : object.onGround
19
20
// Player Aliases
21
private alias object.type : player.type
22
private alias object.state : player.state
23
private alias object.yvel : player.yvel
24
private alias object.gravity : player.gravity
25
private alias object.collisionPlane : player.collisionPlane
26
private alias object.value18 :player.sortedDrawOrder
27
28
29
// ========================
30
// Events
31
// ========================
32
33
event ObjectUpdate
34
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
35
CheckEqual(object.onGround, false)
36
temp0 = checkResult
37
CheckEqual(player[currentPlayer].gravity, GRAVITY_GROUND)
38
temp0 |= checkResult
39
CheckEqual(player[currentPlayer].state, Player_State_Climb)
40
temp0 |= checkResult
41
42
if temp0 == true
43
BoxCollisionTest(C_TOUCH, object.entityPos, object.extendTop, -12, object.extendBottom, 12, currentPlayer, 0, 0, 0, 0)
44
if checkResult == true
45
if player[currentPlayer].yvel > 0
46
GetBit(temp0, object.propertyValue, 6)
47
if temp0 == false
48
player[currentPlayer].collisionPlane = object.planeL
49
end if
50
player[currentPlayer].sortedDrawOrder = object.drawOrderL
51
else
52
GetBit(temp0, object.propertyValue, 6)
53
if temp0 == false
54
player[currentPlayer].collisionPlane = object.planeR
55
end if
56
player[currentPlayer].sortedDrawOrder = object.drawOrderR
57
end if
58
end if
59
end if
60
next
61
end event
62
63
64
event ObjectStartup
65
LoadSpriteSheet("Global/Display.gif")
66
67
SpriteFrame(-8, -8, 16, 16, 42, 130)
68
SpriteFrame(-8, -8, 16, 16, 59, 130)
69
SpriteFrame(-8, -8, 16, 16, 76, 130)
70
SpriteFrame(-8, -8, 16, 16, 93, 130)
71
SpriteFrame(-8, -8, 16, 16, 110, 130)
72
SpriteFrame(-8, -8, 16, 16, 127, 130)
73
SpriteFrame(-8, -8, 16, 16, 144, 130)
74
SpriteFrame(-8, -8, 16, 16, 161, 130)
75
SpriteFrame(-8, -8, 16, 16, 42, 147)
76
SpriteFrame(-8, -8, 16, 16, 59, 147)
77
SpriteFrame(-8, -8, 16, 16, 76, 147)
78
SpriteFrame(-8, -8, 16, 16, 93, 147)
79
SpriteFrame(-8, -8, 16, 16, 110, 147)
80
SpriteFrame(-8, -8, 16, 16, 127, 147)
81
SpriteFrame(-8, -8, 16, 16, 144, 147)
82
SpriteFrame(-8, -8, 16, 16, 161, 147)
83
SpriteFrame(-8, -8, 16, 16, 42, 164)
84
SpriteFrame(-8, -8, 16, 16, 59, 164)
85
SpriteFrame(-8, -8, 16, 16, 76, 164)
86
SpriteFrame(-8, -8, 16, 16, 93, 164)
87
SpriteFrame(-8, -8, 16, 16, 93, 113)
88
89
foreach (TypeName[Plane Sw H], arrayPos0, ALL_ENTITIES)
90
temp0 = object[arrayPos0].propertyValue
91
temp0 &= 3
92
temp0 += 2
93
object[arrayPos0].extendTop = 1
94
object[arrayPos0].extendTop <<= temp0
95
object[arrayPos0].extendTop <<= 3
96
object[arrayPos0].extendBottom = object[arrayPos0].extendTop
97
FlipSign(object[arrayPos0].extendTop)
98
GetBit(object[arrayPos0].planeR, object[arrayPos0].propertyValue, 2)
99
GetBit(object[arrayPos0].planeL, object[arrayPos0].propertyValue, 3)
100
101
GetBit(object[arrayPos0].drawOrderR, object[arrayPos0].propertyValue, 4)
102
object[arrayPos0].drawOrderR += 4
103
GetBit(object[arrayPos0].drawOrderL, object[arrayPos0].propertyValue, 5)
104
object[arrayPos0].drawOrderL += 4
105
106
GetBit(object[arrayPos0].onGround, object[arrayPos0].propertyValue, 7)
107
next
108
end event
109
110
// This Object's kinda weird... its Draw comes after its Startup for some reason
111
event ObjectDraw
112
if player[0].type == TypeName[Debug Mode]
113
temp1 = object.propertyValue
114
temp1 &= 3
115
temp1 += 2
116
temp0 = 1
117
temp0 <<= temp1
118
temp1 = temp0
119
temp0 <<= 19
120
FlipSign(temp0)
121
temp0 += object.xpos
122
temp0 += 0x80000
123
GetBit(temp2, object.propertyValue, 7)
124
temp3 = object.propertyValue
125
temp3 >>= 2
126
temp3 &= 15
127
GetBit(temp4, object.propertyValue, 6)
128
if temp4 == true
129
temp3 >>= 2
130
temp3 += 16
131
end if
132
133
temp4 = 0
134
while temp4 < temp1
135
if temp2 == true
136
DrawSpriteXY(20, temp0, object.ypos)
137
end if
138
DrawSpriteXY(temp3, temp0, object.ypos)
139
temp0 += 0x100000
140
temp4++
141
loop
142
143
if temp1 == 0
144
DrawSprite(temp3)
145
end if
146
end if
147
end event
148
149
150
// ========================
151
// Editor Events & Aliases
152
// ========================
153
154
private alias 0 : VAR_ID_SIZE
155
private alias 1 : VAR_ID_PLANEL
156
private alias 2 : VAR_ID_PLANER
157
private alias 3 : VAR_ID_DRAWL
158
private alias 4 : VAR_ID_DRAWR
159
private alias 5 : VAR_ID_ONLYDRAWORDER
160
private alias 6 : VAR_ID_ONGROUND
161
162
163
event RSDKEdit
164
if editor.returnVariable == true
165
switch editor.variableID
166
case EDIT_VAR_PROPVAL // property value
167
checkResult = object.propertyValue
168
break
169
170
case VAR_ID_SIZE // size
171
checkResult = object.propertyValue
172
checkResult &= 3
173
break
174
175
case VAR_ID_PLANEL // collisionPlaneL
176
GetBit(checkResult, object.propertyValue, 2)
177
break
178
179
case VAR_ID_PLANER // collisionPlaneR
180
GetBit(checkResult, object.propertyValue, 3)
181
break
182
183
case VAR_ID_DRAWL // drawOrderL
184
GetBit(checkResult, object.propertyValue, 4)
185
break
186
187
case VAR_ID_DRAWR // drawOrderR
188
GetBit(checkResult, object.propertyValue, 5)
189
break
190
191
case VAR_ID_ONLYDRAWORDER // onlyDrawOrder
192
GetBit(checkResult, object.propertyValue, 6)
193
break
194
195
case VAR_ID_ONGROUND // onGround
196
GetBit(checkResult, object.propertyValue, 7)
197
break
198
199
end switch
200
else
201
switch editor.variableID
202
case EDIT_VAR_PROPVAL // property value
203
object.propertyValue = editor.variableValue
204
break
205
206
case VAR_ID_SIZE // size
207
temp1 = 3
208
Not(temp1)
209
object.propertyValue &= temp1
210
211
temp0 = editor.variableValue
212
temp0 &= 3
213
object.propertyValue |= temp0
214
break
215
216
case VAR_ID_PLANEL // collisionPlaneL
217
CheckNotEqual(editor.variableValue, false)
218
SetBit(object.propertyValue, 2, checkResult)
219
break
220
221
case VAR_ID_PLANER // collisionPlaneR
222
CheckNotEqual(editor.variableValue, false)
223
SetBit(object.propertyValue, 3, checkResult)
224
break
225
226
case VAR_ID_DRAWL // drawOrderL
227
CheckNotEqual(editor.variableValue, false)
228
SetBit(object.propertyValue, 4, checkResult)
229
break
230
231
case VAR_ID_DRAWR // drawOrderR
232
CheckNotEqual(editor.variableValue, false)
233
SetBit(object.propertyValue, 5, checkResult)
234
break
235
236
case VAR_ID_ONLYDRAWORDER // onlyDrawOrder
237
CheckNotEqual(editor.variableValue, false)
238
SetBit(object.propertyValue, 6, checkResult)
239
break
240
241
case VAR_ID_ONGROUND // onGround
242
CheckNotEqual(editor.variableValue, false)
243
SetBit(object.propertyValue, 7, checkResult)
244
break
245
246
end switch
247
end if
248
end event
249
250
251
event RSDKDraw
252
temp1 = object.propertyValue
253
temp1 &= 3
254
temp1 += 2
255
temp0 = 1
256
temp0 <<= temp1
257
temp1 = temp0
258
temp0 <<= 19
259
FlipSign(temp0)
260
temp0 += object.xpos
261
temp0 += 0x80000
262
GetBit(temp2, object.propertyValue, 7)
263
temp3 = object.propertyValue
264
temp3 >>= 2
265
temp3 &= 15
266
GetBit(temp4, object.propertyValue, 6)
267
if temp4 == true
268
temp3 >>= 2
269
temp3 += 16
270
end if
271
272
temp4 = 0
273
while temp4 < temp1
274
if temp2 == true
275
DrawSpriteXY(20, temp0, object.ypos)
276
end if
277
DrawSpriteXY(temp3, temp0, object.ypos)
278
temp0 += 0x100000
279
temp4++
280
loop
281
282
if temp1 == 0
283
DrawSprite(temp3)
284
end if
285
end event
286
287
288
event RSDKLoad
289
LoadSpriteSheet("Global/Display.gif")
290
291
temp0 = 0
292
temp1 = 42
293
while temp0 < 8
294
SpriteFrame(-8, -8, 16, 16, temp1, 130)
295
temp0++
296
temp1 += 17
297
loop
298
299
temp0 = 0
300
temp1 = 42
301
while temp0 < 8
302
SpriteFrame(-8, -8, 16, 16, temp1, 147)
303
temp0++
304
temp1 += 17
305
loop
306
307
SpriteFrame(-8, -8, 16, 16, 42, 164) // #16 - LL
308
SpriteFrame(-8, -8, 16, 16, 59, 164) // #17 - LH
309
SpriteFrame(-8, -8, 16, 16, 76, 164) // #18 - HL
310
SpriteFrame(-8, -8, 16, 16, 93, 164) // #19 - HH
311
312
SpriteFrame(-8, -8, 16, 16, 93, 113) // #20 - back
313
314
AddEditorVariable("size")
315
SetActiveVariable("size")
316
AddEnumVariable("4 Nodes", 0)
317
AddEnumVariable("8 Nodes", 1)
318
AddEnumVariable("16 Nodes", 2)
319
AddEnumVariable("32 Nodes", 3)
320
321
AddEditorVariable("collisionPlaneL")
322
SetActiveVariable("collisionPlaneL")
323
AddEnumVariable("Plane A", 0)
324
AddEnumVariable("Plane B", 1)
325
326
AddEditorVariable("collisionPlaneR")
327
SetActiveVariable("collisionPlaneR")
328
AddEnumVariable("Plane A", 0)
329
AddEnumVariable("Plane B", 1)
330
331
AddEditorVariable("drawOrderL")
332
SetActiveVariable("drawOrderL")
333
AddEnumVariable("Low Layer", 0)
334
AddEnumVariable("High Layer", 1)
335
336
AddEditorVariable("drawOrderR")
337
SetActiveVariable("drawOrderR")
338
AddEnumVariable("Low Layer", 0)
339
AddEnumVariable("High Layer", 1)
340
341
AddEditorVariable("onlyDrawOrder")
342
SetActiveVariable("onlyDrawOrder")
343
AddEnumVariable("false", false)
344
AddEnumVariable("true", true)
345
346
AddEditorVariable("onGround")
347
SetActiveVariable("onGround")
348
AddEnumVariable("false", false)
349
AddEnumVariable("true", true)
350
end event
351
352