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