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/ARZ/CollapsingFloor.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: C Floor 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.delay
14
private alias object.value2 : object.collapseTable
15
16
private alias 0 : CFLOOR_ACTIVE
17
private alias 1 : CFLOOR_COLLAPSE
18
private alias 2 : CFLOOR_COLLAPSED
19
private alias 3 : CFLOOR_NONE
20
private alias 4 : CFLOOR_TILEDELAY
21
private alias 5 : CFLOOR_TILEFALL
22
23
// Player Aliases
24
private alias object.yvel : player.yvel
25
26
private alias object.value17 : debugMode.currentSelection
27
28
29
// ========================
30
// Function Declarations
31
// ========================
32
33
reserve function CFloor_DebugDraw
34
reserve function CFloor_DebugSpawn
35
36
37
// ========================
38
// Static Values
39
// ========================
40
41
private value CFloor_debugStartID = 0
42
43
44
// ========================
45
// Tables
46
// ========================
47
48
private table CFloor_tileFramesFlipX
49
1, 2, 3, 4
50
5, 6, 7, 8
51
end table
52
53
private table CFloor_tileFramesNoFlip
54
4, 3, 2, 1
55
8, 7, 6, 5
56
end table
57
58
private table CFloor_collapseTableL
59
30, 22, 14, 6
60
26, 18, 10, 2
61
end table
62
63
private table CFloor_collapseTableB
64
22, 30, 26, 18
65
6, 14, 10, 2
66
end table
67
68
69
// ========================
70
// Function Definitions
71
// ========================
72
73
private function CFloor_DebugDraw
74
DrawSprite(0)
75
end function
76
77
78
private function CFloor_DebugSpawn
79
temp0 = debugMode[0].currentSelection
80
temp0 -= CFloor_debugStartID
81
CreateTempObject(TypeName[C Floor], 0, object.xpos, object.ypos)
82
if temp0 == 0
83
object[tempObjectPos].collapseTable = CFloor_collapseTableB
84
else
85
object[tempObjectPos].collapseTable = CFloor_collapseTableL
86
end if
87
GetBit(temp0, object.direction, 0)
88
if temp0 == FACING_RIGHT
89
object[tempObjectPos].direction = FLIP_NONE
90
else
91
object[tempObjectPos].direction = FLIP_X
92
end if
93
end function
94
95
96
// ========================
97
// Events
98
// ========================
99
100
event ObjectUpdate
101
switch object.state
102
default
103
case CFLOOR_ACTIVE
104
break
105
106
case CFLOOR_COLLAPSE
107
if object.timer < 10
108
object.timer++
109
else
110
temp5 = 0
111
temp0 = 0
112
temp3 = object.ypos
113
temp3 -= 0x80000
114
temp4 = 10
115
while temp0 < 2
116
temp1 = 0
117
temp2 = object.xpos
118
if object.direction == FLIP_X
119
temp2 -= 0x180000
120
else
121
temp2 += 0x180000
122
end if
123
124
while temp1 < 4
125
if object.direction == FLIP_X
126
GetTableValue(temp6, temp5, CFloor_tileFramesFlipX)
127
else
128
GetTableValue(temp6, temp5, CFloor_tileFramesNoFlip)
129
end if
130
131
CreateTempObject(TypeName[C Floor], temp6, temp2, temp3)
132
object[tempObjectPos].state = CFLOOR_TILEDELAY
133
GetTableValue(object[tempObjectPos].delay, temp5, object.collapseTable)
134
temp5++
135
temp6++
136
temp1++
137
if object.direction == FLIP_X
138
temp2 += 0x100000
139
else
140
temp2 -= 0x100000
141
end if
142
temp4 += 4
143
loop
144
temp4 -= 26
145
object.frame += 2
146
temp0++
147
temp3 += 0x100000
148
loop
149
PlaySfx(SfxName[Ledge Break], false)
150
object.timer = 0
151
object.state++
152
end if
153
break
154
155
case CFLOOR_COLLAPSED
156
if object.timer < 20
157
object.timer++
158
else
159
object.timer = 0
160
object.state++
161
end if
162
break
163
164
case CFLOOR_NONE
165
break
166
167
case CFLOOR_TILEDELAY
168
if object.timer < object.delay
169
object.timer++
170
else
171
object.timer = 0
172
object.state++
173
end if
174
break
175
176
case CFLOOR_TILEFALL
177
object.ypos += object.yvel
178
object.yvel += 0x4000
179
if object.outOfBounds == true
180
object.type = TypeName[Blank Object]
181
end if
182
break
183
184
end switch
185
186
if object.state < CFLOOR_TILEDELAY
187
if object.outOfBounds == true
188
object.state = CFLOOR_ACTIVE
189
object.timer = 0
190
object.priority = PRIORITY_BOUNDS
191
end if
192
end if
193
194
if object.state < CFLOOR_NONE
195
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
196
if object.propertyValue < 2
197
if player[currentPlayer].yvel >= 0
198
BoxCollisionTest(C_PLATFORM, object.entityPos, -32, -16, 32, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
199
else
200
checkResult = COL_NONE
201
end if
202
else
203
BoxCollisionTest(C_SOLID, object.entityPos, -32, -16, 32, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
204
end if
205
206
if checkResult == COL_TOP
207
if object.state == CFLOOR_ACTIVE
208
object.state = CFLOOR_COLLAPSE
209
object.priority = PRIORITY_ACTIVE
210
end if
211
end if
212
next
213
end if
214
end event
215
216
217
event ObjectDraw
218
switch object.state
219
case CFLOOR_ACTIVE
220
case CFLOOR_COLLAPSE
221
DrawSprite(0)
222
break
223
224
case CFLOOR_COLLAPSED
225
case CFLOOR_NONE
226
break
227
228
case CFLOOR_TILEDELAY
229
case CFLOOR_TILEFALL
230
DrawSprite(object.propertyValue)
231
break
232
233
end switch
234
end event
235
236
237
event ObjectStartup
238
LoadSpriteSheet("ARZ/Objects.gif")
239
SpriteFrame(-32, -16, 64, 32, 126, 112)
240
SpriteFrame(-8, -8, 16, 16, 126, 112)
241
SpriteFrame(-8, -8, 16, 16, 142, 112)
242
SpriteFrame(-8, -8, 16, 16, 158, 112)
243
SpriteFrame(-8, -8, 16, 16, 174, 112)
244
SpriteFrame(-8, -8, 16, 16, 126, 128)
245
SpriteFrame(-8, -8, 16, 16, 142, 128)
246
SpriteFrame(-8, -8, 16, 16, 158, 128)
247
SpriteFrame(-8, -8, 16, 16, 174, 128)
248
249
foreach (TypeName[C Floor], arrayPos0, ALL_ENTITIES)
250
GetBit(temp5, object[arrayPos0].propertyValue, 0)
251
if temp5 == false
252
object[arrayPos0].collapseTable = CFloor_collapseTableB
253
else
254
object[arrayPos0].collapseTable = CFloor_collapseTableL
255
end if
256
next
257
258
temp0 = 0
259
CFloor_debugStartID = DebugMode_ObjCount
260
while temp0 < 2
261
SetTableValue(TypeName[C Floor], DebugMode_ObjCount, DebugMode_TypesTable)
262
SetTableValue(CFloor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
263
SetTableValue(CFloor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
264
DebugMode_ObjCount++
265
temp0++
266
loop
267
end event
268
269
270
// ========================
271
// Editor Events
272
// ========================
273
274
event RSDKEdit
275
if editor.returnVariable == true
276
switch editor.variableID
277
case EDIT_VAR_PROPVAL // property value
278
checkResult = object.propertyValue
279
checkResult &= 1
280
break
281
282
case 0 // type
283
GetBit(checkResult, object.propertyValue, 0)
284
break
285
286
end switch
287
else
288
switch editor.variableID
289
case EDIT_VAR_PROPVAL // property value
290
object.propertyValue = editor.variableValue
291
object.propertyValue &= 1
292
break
293
294
case 0 // type
295
CheckNotEqual(editor.variableValue, 0)
296
SetBit(object.propertyValue, 0, checkResult)
297
break
298
299
end switch
300
end if
301
end event
302
303
304
event RSDKDraw
305
DrawSprite(0)
306
end event
307
308
309
event RSDKLoad
310
LoadSpriteSheet("ARZ/Objects.gif")
311
SpriteFrame(-32, -16, 64, 32, 126, 112)
312
313
AddEditorVariable("type")
314
SetActiveVariable("type")
315
AddEnumVariable("Bottom", 0)
316
AddEnumVariable("Left", 1)
317
end event
318
319