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/OOZ/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
// Tables
39
// ========================
40
41
private table CFloor_tileFramesFlipX
42
1, 2, 3, 4
43
5, 6, 7, 8
44
end table
45
46
// Unused, same table as the one in ARZ though...
47
private table CFloor_tileFramesNoFlip
48
4, 3, 2, 1
49
8, 7, 6, 5
50
end table
51
52
private table CFloor_collapseTableL
53
30, 22, 14, 6
54
26, 18, 10, 2
55
end table
56
57
58
// ========================
59
// Function Definitions
60
// ========================
61
62
private function CFloor_DebugDraw
63
DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)
64
end function
65
66
67
private function CFloor_DebugSpawn
68
CreateTempObject(TypeName[C Floor], 0, object.xpos, object.ypos)
69
object[tempObjectPos].collapseTable = CFloor_collapseTableL
70
object[tempObjectPos].direction = object.direction
71
end function
72
73
74
// ========================
75
// Events
76
// ========================
77
78
event ObjectUpdate
79
switch object.state
80
default
81
case CFLOOR_ACTIVE
82
break
83
84
case CFLOOR_COLLAPSE
85
if object.timer < 10
86
object.timer++
87
else
88
temp5 = 0
89
temp0 = 0
90
temp3 = object.ypos
91
temp3 -= 0x80000
92
temp4 = 10
93
while temp0 < 2
94
temp1 = 0
95
temp2 = object.xpos
96
if object.direction == FLIP_NONE
97
temp2 -= 0x300000
98
else
99
temp2 += 0x300000
100
end if
101
102
while temp1 < 4
103
GetTableValue(temp6, temp5, CFloor_tileFramesFlipX)
104
105
CreateTempObject(TypeName[C Floor], temp6, temp2, temp3)
106
object[tempObjectPos].direction = object.direction
107
object[tempObjectPos].state = CFLOOR_TILEDELAY
108
GetTableValue(object[tempObjectPos].delay, temp5, object.collapseTable)
109
temp5++
110
temp6++
111
temp1++
112
if object.direction == FLIP_NONE
113
temp2 += 0x200000
114
else
115
temp2 -= 0x200000
116
end if
117
temp4 += 4
118
loop
119
temp4 -= 26
120
object.frame += 2
121
temp0++
122
temp3 += 0x180000
123
loop
124
PlaySfx(SfxName[Ledge Break], false)
125
object.timer = 0
126
object.state++
127
end if
128
break
129
130
case CFLOOR_COLLAPSED
131
if object.timer < 20
132
object.timer++
133
else
134
object.timer = 0
135
object.state++
136
end if
137
break
138
139
case CFLOOR_NONE
140
break
141
142
case CFLOOR_TILEDELAY
143
if object.timer < object.delay
144
object.timer++
145
else
146
object.timer = 0
147
object.state++
148
end if
149
break
150
151
case CFLOOR_TILEFALL
152
object.ypos += object.yvel
153
object.yvel += 0x4000
154
if object.outOfBounds == true
155
object.type = TypeName[Blank Object]
156
end if
157
break
158
159
end switch
160
161
if object.state < CFLOOR_TILEDELAY
162
if object.outOfBounds == true
163
object.state = CFLOOR_ACTIVE
164
object.timer = 0
165
object.priority = PRIORITY_BOUNDS
166
end if
167
end if
168
169
if object.state < CFLOOR_NONE
170
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
171
if object.propertyValue < 2
172
if player[currentPlayer].yvel >= 0
173
BoxCollisionTest(C_PLATFORM, object.entityPos, -64, -24, 64, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
174
else
175
checkResult = COL_NONE
176
end if
177
else
178
BoxCollisionTest(C_SOLID, object.entityPos, -64, -16, 64, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
179
end if
180
181
if checkResult == COL_TOP
182
if object.state == CFLOOR_ACTIVE
183
object.state = CFLOOR_COLLAPSE
184
object.priority = PRIORITY_ACTIVE
185
end if
186
end if
187
next
188
end if
189
end event
190
191
192
event ObjectDraw
193
switch object.state
194
case CFLOOR_ACTIVE
195
case CFLOOR_COLLAPSE
196
DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)
197
break
198
199
case CFLOOR_COLLAPSED
200
case CFLOOR_NONE
201
break
202
203
case CFLOOR_TILEDELAY
204
case CFLOOR_TILEFALL
205
DrawSpriteFX(object.propertyValue, FX_FLIP, object.xpos, object.ypos)
206
break
207
208
end switch
209
end event
210
211
212
event ObjectStartup
213
LoadSpriteSheet("OOZ/Objects.gif")
214
SpriteFrame(-64, -24, 128, 48, 1, 207)
215
SpriteFrame(-16, -16, 32, 32, 1, 207)
216
SpriteFrame(-16, -16, 32, 32, 33, 207)
217
SpriteFrame(-16, -16, 32, 32, 65, 207)
218
SpriteFrame(-16, -16, 32, 32, 97, 207)
219
SpriteFrame(-16, -8, 32, 16, 1, 239)
220
SpriteFrame(-16, -8, 32, 16, 33, 239)
221
SpriteFrame(-16, -8, 32, 16, 65, 239)
222
SpriteFrame(-16, -8, 32, 16, 97, 239)
223
224
foreach (TypeName[C Floor], arrayPos0, ALL_ENTITIES)
225
object[arrayPos0].collapseTable = CFloor_collapseTableL
226
next
227
228
SetTableValue(TypeName[C Floor], DebugMode_ObjCount, DebugMode_TypesTable)
229
SetTableValue(CFloor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
230
SetTableValue(CFloor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
231
DebugMode_ObjCount++
232
end event
233
234
235
// ========================
236
// Editor Events
237
// ========================
238
239
event RSDKDraw
240
DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)
241
end event
242
243
244
event RSDKLoad
245
LoadSpriteSheet("OOZ/Objects.gif")
246
SpriteFrame(-64, -24, 128, 48, 1, 207)
247
248
// even if flipped platforms have it set, dir attr is used in favour instead
249
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
250
end event
251
252