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/HTZ/BreakRock.txt
1478 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Break Rock 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 0 : BREAKROCK_ROCK
13
private alias 1 : BREAKROCK_FRAGMENT
14
15
// Player Aliases
16
private alias object.yvel : player.yvel
17
private alias object.gravity : player.gravity
18
private alias object.animation : player.animation
19
private alias object.value16 : player.isSidekick
20
private alias object.value19 : player.badnikBonus
21
private alias object.value40 : player.hitboxLeft
22
private alias object.value38 : player.hitboxTop
23
private alias object.value41 : player.hitboxRight
24
private alias object.value39 : player.hitboxBottom
25
26
// Global Variable ID Aliases
27
private alias 22 : GLOBAL_PLAYERSCORE
28
29
30
// ========================
31
// Function Declarations
32
// ========================
33
34
reserve function BreakRock_DebugDraw
35
reserve function BreakRock_DebugSpawn
36
37
38
// ========================
39
// Function Definitions
40
// ========================
41
42
private function BreakRock_DebugDraw
43
DrawSprite(0)
44
end function
45
46
47
private function BreakRock_DebugSpawn
48
CreateTempObject(TypeName[Break Rock], 0, object.xpos, object.ypos)
49
end function
50
51
52
// ========================
53
// Events
54
// ========================
55
56
event ObjectUpdate
57
switch object.state
58
case BREAKROCK_ROCK
59
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
60
#platform: USE_STANDALONE
61
if player[currentPlayer].animation == ANI_JUMPING
62
BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
63
#endplatform
64
#platform: USE_ORIGINS
65
checkResult = false
66
67
if player[currentPlayer].animation == ANI_JUMPING
68
checkResult = true
69
end if
70
71
if player[currentPlayer].animation == ANI_HAMMER_JUMP
72
checkResult = 2
73
end if
74
75
if checkResult != false
76
switch checkResult
77
case 1
78
BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
79
break
80
81
case 2
82
BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)
83
break
84
end switch
85
#endplatform
86
if checkResult == COL_TOP
87
player[currentPlayer].yvel = -0x30000
88
player[currentPlayer].gravity = GRAVITY_AIR
89
90
// Create the rock fragments
91
92
CreateTempObject(TypeName[Break Rock], 1, object.xpos, object.ypos)
93
object[tempObjectPos].ixpos -= 16
94
object[tempObjectPos].iypos -= 8
95
object[tempObjectPos].xvel = -0x20000
96
object[tempObjectPos].yvel = -0x20000
97
object[tempObjectPos].state = BREAKROCK_FRAGMENT
98
object[tempObjectPos].drawOrder = 5
99
100
CreateTempObject(TypeName[Break Rock], 2, object.xpos, object.ypos)
101
object[tempObjectPos].ixpos += 0
102
object[tempObjectPos].iypos -= 8
103
object[tempObjectPos].xvel = 0
104
object[tempObjectPos].yvel = -0x28000
105
object[tempObjectPos].state = BREAKROCK_FRAGMENT
106
object[tempObjectPos].drawOrder = 5
107
108
CreateTempObject(TypeName[Break Rock], 3, object.xpos, object.ypos)
109
object[tempObjectPos].ixpos += 16
110
object[tempObjectPos].iypos -= 8
111
object[tempObjectPos].xvel = 0x20000
112
object[tempObjectPos].yvel = -0x20000
113
object[tempObjectPos].state = BREAKROCK_FRAGMENT
114
object[tempObjectPos].drawOrder = 5
115
116
CreateTempObject(TypeName[Break Rock], 4, object.xpos, object.ypos)
117
object[tempObjectPos].ixpos -= 16
118
object[tempObjectPos].iypos += 8
119
object[tempObjectPos].xvel = -0x1C000
120
object[tempObjectPos].yvel = -0x1C000
121
object[tempObjectPos].state = BREAKROCK_FRAGMENT
122
object[tempObjectPos].drawOrder = 5
123
124
CreateTempObject(TypeName[Break Rock], 5, object.xpos, object.ypos)
125
object[tempObjectPos].ixpos += 0
126
object[tempObjectPos].iypos += 8
127
object[tempObjectPos].xvel = 0
128
object[tempObjectPos].yvel = -0x20000
129
object[tempObjectPos].state = BREAKROCK_FRAGMENT
130
object[tempObjectPos].drawOrder = 5
131
132
CreateTempObject(TypeName[Break Rock], 6, object.xpos, object.ypos)
133
object[tempObjectPos].ixpos += 16
134
object[tempObjectPos].iypos += 8
135
object[tempObjectPos].xvel = 0x1C000
136
object[tempObjectPos].yvel = -0x1C000
137
object[tempObjectPos].state = BREAKROCK_FRAGMENT
138
object[tempObjectPos].drawOrder = 5
139
140
// Make this object disappear
141
object.type = TypeName[Blank Object]
142
143
// global variable "array" (yes, this is actually how its done)
144
arrayPos0 = GLOBAL_PLAYERSCORE
145
#platform: USE_DECOMP
146
arrayPos0 = VarName[player.score]
147
#endplatform
148
if player[currentPlayer].isSidekick == 0
149
arrayPos0 += currentPlayer
150
end if
151
152
switch player[currentPlayer].badnikBonus
153
case 0
154
global[arrayPos0] += 100
155
break
156
157
case 1
158
global[arrayPos0] += 200
159
break
160
161
case 2
162
global[arrayPos0] += 500
163
break
164
165
case 3
166
case 4
167
case 5
168
case 6
169
case 7
170
case 8
171
case 9
172
case 10
173
case 11
174
case 12
175
case 13
176
case 14
177
global[arrayPos0] += 1000
178
break
179
180
case 15
181
global[arrayPos0] += 10000
182
break
183
end switch
184
185
CreateTempObject(TypeName[Object Score], player[currentPlayer].badnikBonus, object.xpos, object.ypos)
186
object[tempObjectPos].drawOrder = 5
187
if player[currentPlayer].gravity == 1
188
if player[currentPlayer].badnikBonus < 15
189
player[currentPlayer].badnikBonus++
190
end if
191
end if
192
PlaySfx(SfxName[Block Break], false)
193
end if
194
else
195
BoxCollisionTest(C_SOLID, object.entityPos, -24, -16, 24, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
196
end if
197
next
198
break
199
200
case BREAKROCK_FRAGMENT
201
object.xpos += object.xvel
202
object.ypos += object.yvel
203
object.yvel += 0x1800
204
205
if object.outOfBounds == true
206
object.type = TypeName[Blank Object]
207
end if
208
break
209
210
end switch
211
end event
212
213
214
event ObjectDraw
215
DrawSprite(object.propertyValue)
216
end event
217
218
219
event ObjectStartup
220
LoadSpriteSheet("HTZ/Objects.gif")
221
SpriteFrame(-24, -16, 48, 32, 207, 94)
222
SpriteFrame(-8, -8, 16, 16, 207, 94)
223
SpriteFrame(-8, -8, 16, 16, 223, 94)
224
SpriteFrame(-8, -8, 16, 16, 239, 94)
225
SpriteFrame(-8, -8, 16, 16, 207, 110)
226
SpriteFrame(-8, -8, 16, 16, 223, 110)
227
SpriteFrame(-8, -8, 16, 16, 239, 110)
228
229
SetTableValue(TypeName[Break Rock], DebugMode_ObjCount, DebugMode_TypesTable)
230
SetTableValue(BreakRock_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
231
SetTableValue(BreakRock_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
232
DebugMode_ObjCount++
233
end event
234
235
236
// ========================
237
// Editor Events
238
// ========================
239
240
event RSDKDraw
241
DrawSprite(0)
242
end event
243
244
245
event RSDKLoad
246
LoadSpriteSheet("HTZ/Objects.gif")
247
SpriteFrame(-24, -16, 48, 32, 207, 94)
248
249
// Although used by the object, it shouldn't be set by the editor
250
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
251
end event
252
253