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/LavaFlow.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Lava Flow 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.value1 : object.startPos.x
13
private alias object.value2 : object.spriteSprX
14
15
private alias 0 : LAVAFLOW_AWAITPLAYER
16
private alias 1 : LAVAFLOW_FLOWING
17
private alias 2 : LAVAFLOW_FINISHEDFLOWING
18
19
// Player Aliases
20
private alias object.state : player.state
21
private alias object.xpos : player.xpos
22
private alias object.ixpos : player.ixpos
23
private alias object.collisionLeft: player.collisionLeft
24
25
// MZSetup aliases
26
private alias object.value3 : mzSetup.lavaAnimTimer
27
28
// Reserved object slots
29
private alias 10 : SLOT_ZONESETUP
30
31
32
// ========================
33
// Function Declarations
34
// ========================
35
36
reserve function LavaFlow_DebugDraw
37
reserve function LavaFlow_DebugSpawn
38
39
40
// ========================
41
// Function Definitions
42
// ========================
43
44
private function LavaFlow_DebugDraw
45
DrawSprite(0)
46
end function
47
48
49
private function LavaFlow_DebugSpawn
50
CreateTempObject(TypeName[Lava Flow], 0, object.xpos, object.ypos)
51
end function
52
53
54
// ========================
55
// Events
56
// ========================
57
58
event ObjectUpdate
59
switch object.state
60
case LAVAFLOW_AWAITPLAYER
61
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
62
BoxCollisionTest(C_TOUCH, object.entityPos, -128, -33, 160, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
63
if checkResult == true
64
CallFunction(Player_FireHit)
65
end if
66
67
BoxCollisionTest(C_SOLID, object.entityPos, -128, -31, 128, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
68
69
BoxCollisionTest(C_TOUCH, object.entityPos, 256, -32, 288, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
70
if checkResult == true
71
object.state++
72
object.priority = PRIORITY_ACTIVE
73
end if
74
next
75
break
76
77
case LAVAFLOW_FLOWING
78
if player[0].state != Player_State_Death
79
if player[0].state != Player_State_Hurt
80
object.xpos += 0x18000
81
if object.xpos >= 0x6480000
82
object.xpos = 0x6480000
83
object.state++
84
end if
85
end if
86
end if
87
88
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
89
BoxCollisionTest(C_TOUCH, object.entityPos, -128, -32, 160, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
90
if checkResult == true
91
CallFunction(Player_FireHit)
92
end if
93
94
BoxCollisionTest(C_SOLID, object.entityPos, -128, -31, 128, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
95
96
BoxCollisionTest(C_TOUCH, object.entityPos, -128, -23, 128, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
97
if checkResult == true
98
player[currentPlayer].ixpos = player[currentPlayer].collisionLeft
99
FlipSign(player[currentPlayer].xpos)
100
if object.xpos < 0x5800000
101
player[currentPlayer].xpos += 0x800000
102
else
103
player[currentPlayer].xpos += 0x600000
104
end if
105
106
player[currentPlayer].xpos += object.xpos
107
end if
108
next
109
break
110
111
case LAVAFLOW_FINISHEDFLOWING
112
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
113
BoxCollisionTest(C_TOUCH, object.entityPos, -128, -32, 160, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
114
if checkResult == true
115
CallFunction(Player_FireHit)
116
end if
117
118
BoxCollisionTest(C_SOLID, object.entityPos, -128, -24, 160, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
119
120
BoxCollisionTest(C_TOUCH, object.entityPos, -128, -23, 128, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
121
if checkResult == true
122
player[currentPlayer].ixpos = player[currentPlayer].collisionLeft
123
FlipSign(player[currentPlayer].xpos)
124
player[currentPlayer].xpos += 0x600000
125
player[currentPlayer].xpos += object.xpos
126
end if
127
next
128
129
if object.outOfBounds == true
130
temp0 = object.xpos
131
object.xpos = object.startPos.x
132
if object.outOfBounds == true
133
object.state = LAVAFLOW_AWAITPLAYER
134
else
135
object.xpos = temp0
136
end if
137
end if
138
break
139
140
end switch
141
142
Sin(object.spriteSprX, mzSetup[SLOT_ZONESETUP].lavaAnimTimer)
143
object.spriteSprX += 512
144
object.spriteSprX >>= 2
145
object.spriteSprX &= 31
146
object.spriteSprX++
147
148
object.frame = object.animationTimer
149
object.frame /= 10
150
object.frame += 4
151
object.animationTimer++
152
object.animationTimer %= 40
153
154
// Lava is synced across the entire stage, via the [MZ Setup] Object's frame
155
switch object[SLOT_ZONESETUP].frame
156
case 0
157
EditFrame(0, -160, -32, 160, 32, object.spriteSprX, 405)
158
EditFrame(1, 0, -32, 124, 32, object.spriteSprX, 405)
159
EditFrame(2, -160, 0, 160, 32, object.spriteSprX, 405)
160
EditFrame(3, 0, 0, 156, 32, object.spriteSprX, 405)
161
break
162
163
case 1
164
EditFrame(0, -160, -32, 160, 32, object.spriteSprX, 438)
165
EditFrame(1, 0, -32, 124, 32, object.spriteSprX, 438)
166
EditFrame(2, -160, 0, 160, 32, object.spriteSprX, 438)
167
EditFrame(3, 0, 0, 156, 32, object.spriteSprX, 438)
168
break
169
170
case 2
171
EditFrame(0, -160, -32, 160, 32, object.spriteSprX, 471)
172
EditFrame(1, 0, -32, 124, 32, object.spriteSprX, 471)
173
EditFrame(2, -160, 0, 160, 32, object.spriteSprX, 471)
174
EditFrame(3, 0, 0, 156, 32, object.spriteSprX, 471)
175
break
176
177
end switch
178
end event
179
180
181
event ObjectDraw
182
DrawSprite(0)
183
DrawSprite(1)
184
DrawSprite(2)
185
DrawSprite(3)
186
DrawSprite(object.frame)
187
end event
188
189
190
event ObjectStartup
191
LoadSpriteSheet("MZ/Objects.gif")
192
SpriteFrame(-128, -32, 128, 32, 1, 405)
193
SpriteFrame(0, -32, 128, 32, 1, 405)
194
SpriteFrame(-128, 0, 256, 32, 1, 405)
195
SpriteFrame(0, 0, 256, 32, 1, 405)
196
SpriteFrame(124, -32, 60, 64, 1, 194)
197
SpriteFrame(124, -32, 60, 64, 62, 194)
198
SpriteFrame(124, -32, 60, 64, 1, 259)
199
SpriteFrame(124, -32, 60, 64, 62, 259)
200
201
foreach (TypeName[Lava Flow], arrayPos0, ALL_ENTITIES)
202
object[arrayPos0].startPos.x = object[arrayPos0].xpos
203
object[arrayPos0].drawOrder = 4
204
next
205
206
SetTableValue(TypeName[Lava Flow], DebugMode_ObjCount, DebugMode_TypesTable)
207
SetTableValue(LavaFlow_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
208
SetTableValue(LavaFlow_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
209
DebugMode_ObjCount++
210
end event
211
212
213
// ========================
214
// Editor Events
215
// ========================
216
217
event RSDKDraw
218
DrawSprite(0)
219
DrawSprite(1)
220
DrawSprite(2)
221
DrawSprite(3)
222
DrawSprite(object.frame)
223
end event
224
225
226
event RSDKLoad
227
LoadSpriteSheet("MZ/Objects.gif")
228
SpriteFrame(-128, -32, 128, 32, 1, 405)
229
SpriteFrame(0, -32, 128, 32, 1, 405)
230
SpriteFrame(-128, 0, 256, 32, 1, 405)
231
SpriteFrame(0, 0, 256, 32, 1, 405)
232
SpriteFrame(124, -32, 60, 64, 1, 194)
233
SpriteFrame(124, -32, 60, 64, 62, 194)
234
SpriteFrame(124, -32, 60, 64, 1, 259)
235
SpriteFrame(124, -32, 60, 64, 62, 259)
236
237
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
238
end event
239
240