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/CPZ/Staircase.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Staircase 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.timer
13
private alias object.value1 : object.blockMovePos
14
15
private alias 0 : STAIRCASE_0
16
private alias 1 : STAIRCASE_1
17
private alias 2 : STAIRCASE_2
18
private alias 3 : STAIRCASE_3
19
private alias 4 : STAIRCASE_STATIC
20
21
// Player Aliases
22
private alias object.ypos : player.ypos
23
private alias object.gravity : player.gravity
24
25
private alias object.value17 : debugMode.currentSelection
26
27
28
// ========================
29
// Function Declarations
30
// ========================
31
32
reserve function Staircase_DebugDraw
33
reserve function Staircase_DebugSpawn
34
35
36
// ========================
37
// Static Values
38
// ========================
39
40
private value Staircase_startDebugID = 0
41
42
43
// ========================
44
// Function Definitions
45
// ========================
46
47
private function Staircase_DebugDraw
48
DrawSprite(0)
49
end function
50
51
52
private function Staircase_DebugSpawn
53
CreateTempObject(TypeName[Staircase], 0, object.xpos, object.ypos)
54
GetBit(object[tempObjectPos].direction, object.direction, 0)
55
object[tempObjectPos].propertyValue = debugMode[0].currentSelection
56
object[tempObjectPos].propertyValue -= Staircase_startDebugID
57
end function
58
59
60
// ========================
61
// Events
62
// ========================
63
64
event ObjectUpdate
65
object.priority = PRIORITY_ACTIVE
66
switch object.state
67
case STAIRCASE_0
68
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
69
BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 112, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
70
if checkResult == COL_TOP
71
object.priority = PRIORITY_ACTIVE
72
object.timer = 32
73
object.state++
74
end if
75
next
76
break
77
78
case STAIRCASE_1
79
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
80
BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 112, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
81
next
82
83
object.timer--
84
if object.timer < 0
85
object.timer = 128
86
object.state++
87
end if
88
break
89
90
case STAIRCASE_2
91
temp0 = object.xpos
92
temp1 = object.ypos
93
94
if object.direction == FLIP_NONE
95
object.xpos += 0x600000
96
temp4 = -0x200000
97
else
98
temp4 = 0x200000
99
end if
100
101
temp5 = object.blockMovePos
102
temp2 = 1
103
while temp2 < 5
104
object.ypos += temp5
105
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
106
BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
107
if checkResult == COL_TOP
108
temp6 = object.ypos
109
temp6 &= 0xFFFF0000
110
if object.propertyValue == 0
111
temp7 = 0x4000
112
else
113
temp7 = -0x4000
114
end if
115
temp7 *= temp2
116
temp7 += object.ypos
117
temp7 &= 0xFFFF0000
118
temp7 -= temp6
119
player[currentPlayer].ypos += temp7
120
end if
121
122
if player[currentPlayer].gravity == GRAVITY_GROUND
123
if checkResult == COL_BOTTOM
124
if object.propertyValue == 0
125
CallFunction(Player_Kill)
126
end if
127
end if
128
end if
129
next
130
object.xpos += temp4
131
temp2++
132
loop
133
134
if object.propertyValue == 0
135
object.blockMovePos += 0x4000
136
else
137
object.blockMovePos -= 0x4000
138
end if
139
140
object.xpos = temp0
141
object.ypos = temp1
142
object.timer--
143
if object.timer <= 0
144
object.state++
145
end if
146
break
147
148
case STAIRCASE_3
149
temp0 = object.xpos
150
temp1 = object.ypos
151
if object.direction == FLIP_NONE
152
object.xpos += 0x600000
153
temp4 = -0x200000
154
else
155
temp4 = 0x200000
156
end if
157
158
temp5 = object.blockMovePos
159
temp2 = 1
160
while temp2 < 5
161
object.ypos += temp5
162
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
163
BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
164
if player[currentPlayer].gravity == GRAVITY_GROUND
165
if checkResult == COL_BOTTOM
166
CallFunction(Player_Kill)
167
end if
168
end if
169
next
170
object.xpos += temp4
171
temp2++
172
loop
173
174
object.xpos = temp0
175
object.ypos = temp1
176
break
177
178
case STAIRCASE_STATIC
179
break
180
181
end switch
182
183
#platform: USE_STANDALONE
184
temp1 = 0
185
temp0 = camera[0].xpos
186
temp0 -= object.ixpos
187
Abs(temp0)
188
temp0 -= 192
189
if temp0 >= screen.xcenter
190
temp1 = true
191
end if
192
193
temp0 = camera[0].ypos
194
temp0 -= object.iypos
195
Abs(temp0)
196
temp0 -= 192
197
if temp0 >= screen.ycenter
198
temp1 = true
199
end if
200
201
if temp1 == true
202
object.priority = PRIORITY_BOUNDS
203
object.state = STAIRCASE_0
204
object.blockMovePos = 0
205
if object.propertyValue == 2
206
object.state = STAIRCASE_STATIC
207
end if
208
end if
209
#endplatform
210
211
#platform: USE_ORIGINS
212
temp0 = screen.xcenter
213
temp0 += 192
214
temp1 = screen.ycenter
215
temp1 += 192
216
CheckCameraProximity(object.ixpos, object.iypos, temp0, temp1)
217
if checkResult == false
218
object.priority = PRIORITY_BOUNDS
219
object.state = STAIRCASE_0
220
object.blockMovePos = 0
221
if object.propertyValue == 2
222
object.state = STAIRCASE_STATIC
223
end if
224
end if
225
#endplatform
226
end event
227
228
229
event ObjectDraw
230
switch object.state
231
case STAIRCASE_0
232
case STAIRCASE_1
233
DrawSprite(0)
234
break
235
236
case STAIRCASE_2
237
case STAIRCASE_3
238
temp2 = object.xpos
239
temp3 = object.ypos
240
if object.direction == FLIP_NONE
241
temp2 += 0x600000
242
temp4 = -0x200000
243
else
244
temp4 = 0x200000
245
end if
246
247
temp5 = object.blockMovePos
248
temp3 += temp5
249
DrawSpriteXY(1, temp2, temp3)
250
251
temp2 += temp4
252
temp3 += temp5
253
DrawSpriteXY(1, temp2, temp3)
254
255
temp2 += temp4
256
temp3 += temp5
257
DrawSpriteXY(1, temp2, temp3)
258
259
temp2 += temp4
260
temp3 += temp5
261
DrawSpriteXY(1, temp2, temp3)
262
break
263
264
case STAIRCASE_STATIC
265
break
266
267
end switch
268
end event
269
270
271
event ObjectStartup
272
LoadSpriteSheet("CPZ/Objects3.gif")
273
SpriteFrame(-16, -16, 128, 32, 1, 62)
274
SpriteFrame(-16, -16, 32, 32, 1, 62)
275
276
foreach (TypeName[Staircase], arrayPos0, ALL_ENTITIES)
277
if object[arrayPos0].propertyValue == 2
278
object[arrayPos0].state = STAIRCASE_STATIC
279
end if
280
next
281
282
temp0 = 0
283
Staircase_startDebugID = DebugMode_ObjCount
284
while temp0 < 2
285
SetTableValue(TypeName[Staircase], DebugMode_ObjCount, DebugMode_TypesTable)
286
SetTableValue(Staircase_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
287
SetTableValue(Staircase_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
288
DebugMode_ObjCount++
289
temp0++
290
loop
291
end event
292
293
294
// ========================
295
// Editor Events
296
// ========================
297
298
event RSDKEdit
299
if editor.returnVariable == true
300
switch editor.variableID
301
case EDIT_VAR_PROPVAL // property value
302
checkResult = object.propertyValue
303
break
304
305
case 0 // type
306
checkResult = object.propertyValue
307
checkResult &= 7
308
break
309
310
end switch
311
else
312
switch editor.variableID
313
case EDIT_VAR_PROPVAL // property value
314
object.propertyValue = editor.variableValue
315
break
316
317
case 0 // type
318
object.propertyValue = editor.variableValue
319
object.propertyValue &= 7
320
break
321
322
end switch
323
end if
324
end event
325
326
327
event RSDKDraw
328
DrawSprite(0)
329
end event
330
331
332
event RSDKLoad
333
LoadSpriteSheet("CPZ/Objects3.gif")
334
SpriteFrame(-16, -16, 128, 32, 1, 62)
335
336
AddEditorVariable("type")
337
SetActiveVariable("type")
338
AddEnumVariable("Extend Downwards", 0)
339
AddEnumVariable("Extend Upwards", 4) // idk why its 4, 1 also works but whatever floats your boat ig
340
AddEnumVariable("Static", 2)
341
end event
342
343