Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-Sonic-2-2013-Script-Decompilation
Path: blob/master/Sonic 1/Scripts/MZ/CFloor.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
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
// ========================
27
// Function Declarations
28
// ========================
29
30
reserve function CFloor_DebugDraw
31
reserve function CFloor_DebugSpawn
32
33
// ========================
34
// Tables
35
// ========================
36
37
private table CFloor_collapseTableR
38
30, 22, 14, 6
39
26, 18, 10, 2
40
end table
41
42
private table CFloor_collapseTableB
43
22, 30, 26, 18
44
6, 14, 10, 2
45
end table
46
47
48
// ========================
49
// Function Definitions
50
// ========================
51
52
private function CFloor_DebugDraw
53
DrawSprite(0)
54
end function
55
56
57
private function CFloor_DebugSpawn
58
CreateTempObject(TypeName[C Floor], 0, object.xpos, object.ypos)
59
object[tempObjectPos].collapseTable = CFloor_collapseTableR
60
GetBit(temp0, object.direction, 0)
61
if temp0 == 0
62
object[tempObjectPos].direction = FACING_RIGHT
63
else
64
object[tempObjectPos].direction = FACING_LEFT
65
end if
66
end function
67
68
// ========================
69
// Events
70
// ========================
71
72
event ObjectUpdate
73
switch object.state
74
case CFLOOR_ACTIVE
75
break
76
77
case CFLOOR_COLLAPSE
78
if object.timer < 10
79
object.timer++
80
else
81
temp5 = 0
82
temp0 = 0
83
temp3 = object.ypos
84
temp3 -= 0x80000
85
temp4 = 10
86
while temp0 < 2
87
temp1 = 0
88
temp2 = object.xpos
89
if object.direction == 1
90
temp2 -= 0x180000
91
else
92
temp2 += 0x180000
93
end if
94
95
while temp1 < 4
96
CreateTempObject(TypeName[C Floor], 1, temp2, temp3)
97
object[tempObjectPos].state = CFLOOR_TILEDELAY
98
GetTableValue(object[tempObjectPos].delay, temp5, object.collapseTable)
99
temp5++
100
temp1++
101
if object.direction == 1
102
temp2 += 0x100000
103
else
104
temp2 -= 0x100000
105
end if
106
temp4 += 4
107
loop
108
temp4 -= 26
109
object.frame += 2
110
temp0++
111
temp3 += 0x100000
112
loop
113
PlaySfx(SfxName[Ledge Break L], false)
114
SetSfxAttributes(SfxName[Ledge Break L], -1, -100)
115
PlaySfx(SfxName[Ledge Break R], false)
116
SetSfxAttributes(SfxName[Ledge Break R], -1, 100)
117
object.timer = 0
118
object.state++
119
end if
120
break
121
122
case CFLOOR_COLLAPSED
123
if object.timer < 20
124
object.timer++
125
else
126
object.timer = 0
127
object.state++
128
end if
129
break
130
131
case CFLOOR_NONE
132
break
133
134
case CFLOOR_TILEDELAY
135
if object.timer < object.delay
136
object.timer++
137
else
138
object.timer = 0
139
object.state++
140
end if
141
break
142
143
case CFLOOR_TILEFALL
144
object.ypos += object.yvel
145
object.yvel += 0x4000
146
if object.outOfBounds == true
147
object.type = TypeName[Blank Object]
148
end if
149
break
150
151
end switch
152
153
if object.state < CFLOOR_TILEDELAY
154
if object.outOfBounds == true
155
object.state = CFLOOR_ACTIVE
156
object.timer = 0
157
object.priority = PRIORITY_BOUNDS
158
end if
159
end if
160
161
if object.state < CFLOOR_NONE
162
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
163
if player[currentPlayer].yvel >= 0
164
BoxCollisionTest(C_PLATFORM, object.entityPos, -32, -16, 32, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
165
if checkResult == true
166
if object.state == CFLOOR_ACTIVE
167
object.state = CFLOOR_COLLAPSE
168
object.priority = PRIORITY_ACTIVE
169
end if
170
end if
171
end if
172
next
173
end if
174
end event
175
176
177
event ObjectDraw
178
switch object.state
179
case CFLOOR_ACTIVE
180
case CFLOOR_COLLAPSE
181
DrawSprite(0)
182
break
183
184
case CFLOOR_COLLAPSED
185
case CFLOOR_NONE
186
break
187
188
case CFLOOR_TILEDELAY
189
case CFLOOR_TILEFALL
190
DrawSprite(object.propertyValue)
191
break
192
193
end switch
194
end event
195
196
197
event ObjectStartup
198
LoadSpriteSheet("MZ/Objects.gif")
199
SpriteFrame(-32, -16, 64, 32, 317, 363)
200
SpriteFrame(-8, -8, 16, 16, 317, 363)
201
202
foreach (TypeName[C Floor], arrayPos0, ALL_ENTITIES)
203
GetBit(temp5, object[arrayPos0].propertyValue, 0)
204
if temp5 == 0
205
object[arrayPos0].collapseTable = CFloor_collapseTableR
206
else
207
object[arrayPos0].collapseTable = CFloor_collapseTableB
208
end if
209
next
210
211
SetTableValue(TypeName[C Floor], DebugMode_ObjCount, DebugMode_TypesTable)
212
SetTableValue(CFloor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
213
SetTableValue(CFloor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
214
DebugMode_ObjCount++
215
end event
216
217
218
// ========================
219
// Editor Events
220
// ========================
221
222
event RSDKEdit
223
if editor.returnVariable == true
224
switch editor.variableID
225
case EDIT_VAR_PROPVAL // property value
226
checkResult = object.propertyValue
227
checkResult &= 1
228
break
229
230
case 0 // type
231
GetBit(checkResult, object.propertyValue, 0)
232
break
233
234
end switch
235
else
236
switch editor.variableID
237
case EDIT_VAR_PROPVAL // property value
238
object.propertyValue = editor.variableValue
239
object.propertyValue &= 1
240
break
241
242
case 0 // type
243
CheckNotEqual(editor.variableValue, 0)
244
SetBit(object.propertyValue, 0, checkResult)
245
break
246
247
end switch
248
end if
249
end event
250
251
252
event RSDKDraw
253
DrawSprite(0)
254
255
if editor.showGizmos == true
256
editor.drawingOverlay = true
257
258
temp0 = object.ixpos; temp0 -= 32
259
temp1 = object.iypos; temp1 -= 16
260
DrawRectOutline(temp0, temp1, 64, 32, 255, 255, 255, 255)
261
262
editor.drawingOverlay = false
263
end if
264
end event
265
266
267
event RSDKLoad
268
LoadSpriteSheet("MZ/Objects.gif")
269
SpriteFrame(-32, -16, 64, 32, 317, 363)
270
271
AddEditorVariable("type")
272
SetActiveVariable("type")
273
AddEnumVariable("Right", 0)
274
AddEnumVariable("Bottom", 1)
275
end event
276
277