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/HPZ/BreakGem.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Break Gem 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.gravityStrength
13
14
// States
15
private alias 0 : BREAKGEM_INTACT
16
private alias 1 : BREAKGEM_SHARD
17
18
// Player Aliases
19
private alias object.animation : player.animation
20
private alias object.gravity : player.gravity
21
private alias object.yvel : player.yvel
22
private alias object.value19 : player.badnikBonus
23
private alias object.value40 : player.hitboxLeft
24
private alias object.value38 : player.hitboxTop
25
private alias object.value41 : player.hitboxRight
26
private alias object.value39 : player.hitboxBottom
27
28
29
// ========================
30
// Function Declarations
31
// ========================
32
33
reserve function BreakGem_DebugDraw
34
reserve function BreakGem_DebugSpawn
35
36
37
// ========================
38
// Function Definitions
39
// ========================
40
41
private function BreakGem_DebugDraw
42
DrawSprite(0)
43
end function
44
45
46
private function BreakGem_DebugSpawn
47
CreateTempObject(TypeName[Break Gem], 0, object.xpos, object.ypos)
48
end function
49
50
51
// ========================
52
// Events
53
// ========================
54
55
event ObjectUpdate
56
switch object.state
57
case BREAKGEM_INTACT
58
object.inkEffect = INK_ALPHA
59
temp0 = oscillation
60
temp0 <<= 4
61
Sin(temp1, temp0)
62
temp1 >>= 5
63
temp1 += 0xE0
64
object.alpha = temp1
65
66
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
67
#platform: USE_STANDALONE
68
if player[currentPlayer].animation == ANI_JUMPING
69
BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
70
#endplatform
71
#platform: USE_ORIGINS
72
checkResult = false
73
74
if player[currentPlayer].animation == ANI_JUMPING
75
checkResult = true
76
end if
77
78
if player[currentPlayer].animation == ANI_HAMMER_JUMP
79
checkResult = 2
80
end if
81
82
if checkResult != false
83
switch checkResult
84
case 1
85
BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
86
break
87
88
case 2
89
BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)
90
break
91
end switch
92
#endplatform
93
if checkResult == COL_TOP
94
player[currentPlayer].yvel = -0x30000
95
player[currentPlayer].gravity = GRAVITY_AIR
96
97
CreateTempObject(TypeName[Break Gem], 6, object.xpos, object.ypos)
98
object[tempObjectPos].ixpos -= 24
99
object[tempObjectPos].iypos += 8
100
object[tempObjectPos].xvel = -0x18000
101
object[tempObjectPos].yvel = -0x1C000
102
object[tempObjectPos].state = BREAKGEM_SHARD
103
object[tempObjectPos].drawOrder = 5
104
object[tempObjectPos].gravityStrength = 0x2800
105
106
CreateTempObject(TypeName[Break Gem], 7, object.xpos, object.ypos)
107
object[tempObjectPos].ixpos -= 8
108
object[tempObjectPos].iypos += 8
109
object[tempObjectPos].xvel = -0xC000
110
object[tempObjectPos].yvel = -0x20000
111
object[tempObjectPos].state = BREAKGEM_SHARD
112
object[tempObjectPos].drawOrder = 5
113
object[tempObjectPos].gravityStrength = 0x2800
114
115
CreateTempObject(TypeName[Break Gem], 8, object.xpos, object.ypos)
116
object[tempObjectPos].ixpos += 8
117
object[tempObjectPos].iypos += 8
118
object[tempObjectPos].xvel = 0xC000
119
object[tempObjectPos].yvel = -0x20000
120
object[tempObjectPos].state = BREAKGEM_SHARD
121
object[tempObjectPos].drawOrder = 5
122
object[tempObjectPos].gravityStrength = 0x2800
123
124
CreateTempObject(TypeName[Break Gem], 9, object.xpos, object.ypos)
125
object[tempObjectPos].ixpos += 24
126
object[tempObjectPos].iypos += 8
127
object[tempObjectPos].xvel = 0x18000
128
object[tempObjectPos].yvel = -0x1C000
129
object[tempObjectPos].state = BREAKGEM_SHARD
130
object[tempObjectPos].drawOrder = 5
131
object[tempObjectPos].gravityStrength = 0x2800
132
133
CreateTempObject(TypeName[Break Gem], 10, object.xpos, object.ypos)
134
object[tempObjectPos].ixpos -= 24
135
object[tempObjectPos].iypos -= 4
136
object[tempObjectPos].xvel = -0x18000
137
object[tempObjectPos].yvel = -0x1C000
138
object[tempObjectPos].state = BREAKGEM_SHARD
139
object[tempObjectPos].drawOrder = 5
140
object[tempObjectPos].gravityStrength = 0x2800
141
142
CreateTempObject(TypeName[Break Gem], 11, object.xpos, object.ypos)
143
object[tempObjectPos].ixpos -= 8
144
object[tempObjectPos].iypos += 2
145
object[tempObjectPos].xvel = -0xC000
146
object[tempObjectPos].yvel = -0x20000
147
object[tempObjectPos].state = BREAKGEM_SHARD
148
object[tempObjectPos].drawOrder = 5
149
object[tempObjectPos].gravityStrength = 0x2800
150
151
CreateTempObject(TypeName[Break Gem], 10, object.xpos, object.ypos)
152
object[tempObjectPos].ixpos += 8
153
object[tempObjectPos].iypos += 6
154
object[tempObjectPos].xvel = 0xC000
155
object[tempObjectPos].yvel = -0x20000
156
object[tempObjectPos].state = BREAKGEM_SHARD
157
object[tempObjectPos].drawOrder = 5
158
object[tempObjectPos].gravityStrength = 0x2800
159
160
CreateTempObject(TypeName[Break Gem], 11, object.xpos, object.ypos)
161
object[tempObjectPos].ixpos += 24
162
object[tempObjectPos].iypos -= 4
163
object[tempObjectPos].xvel = 0x18000
164
object[tempObjectPos].yvel = -0x1C000
165
object[tempObjectPos].state = BREAKGEM_SHARD
166
object[tempObjectPos].drawOrder = 5
167
object[tempObjectPos].gravityStrength = 0x2800
168
169
CreateTempObject(TypeName[Break Gem], 2, object.xpos, object.ypos)
170
object[tempObjectPos].ixpos -= 24
171
object[tempObjectPos].iypos -= 8
172
object[tempObjectPos].xvel = -0x20000
173
object[tempObjectPos].yvel = -0x20000
174
object[tempObjectPos].state = BREAKGEM_SHARD
175
object[tempObjectPos].drawOrder = 5
176
object[tempObjectPos].gravityStrength = 0x3800
177
178
CreateTempObject(TypeName[Break Gem], 3, object.xpos, object.ypos)
179
object[tempObjectPos].ixpos -= 8
180
object[tempObjectPos].iypos -= 8
181
object[tempObjectPos].xvel = -0x10000
182
object[tempObjectPos].yvel = -0x28000
183
object[tempObjectPos].state = BREAKGEM_SHARD
184
object[tempObjectPos].drawOrder = 5
185
object[tempObjectPos].gravityStrength = 0x3800
186
187
CreateTempObject(TypeName[Break Gem], 4, object.xpos, object.ypos)
188
object[tempObjectPos].ixpos += 8
189
object[tempObjectPos].iypos -= 8
190
object[tempObjectPos].xvel = 0x10000
191
object[tempObjectPos].yvel = -0x28000
192
object[tempObjectPos].state = BREAKGEM_SHARD
193
object[tempObjectPos].drawOrder = 5
194
object[tempObjectPos].gravityStrength = 0x3800
195
196
CreateTempObject(TypeName[Break Gem], 5, object.xpos, object.ypos)
197
object[tempObjectPos].ixpos += 24
198
object[tempObjectPos].iypos -= 8
199
object[tempObjectPos].xvel = 0x20000
200
object[tempObjectPos].yvel = -0x20000
201
object[tempObjectPos].state = BREAKGEM_SHARD
202
object[tempObjectPos].drawOrder = 5
203
object[tempObjectPos].gravityStrength = 0x3800
204
205
// Erase this object
206
object.type = TypeName[Blank Object]
207
208
// Nope, no 2P trickery here!
209
switch player[currentPlayer].badnikBonus
210
case 0
211
player.score += 100
212
break
213
214
case 1
215
player.score += 200
216
break
217
218
case 2
219
player.score += 500
220
break
221
222
case 3
223
case 4
224
case 5
225
case 6
226
case 7
227
case 8
228
case 9
229
case 10
230
case 11
231
case 12
232
case 13
233
case 14
234
player.score += 1000
235
break
236
237
case 15
238
player.score += 10000
239
break
240
end switch
241
242
CreateTempObject(TypeName[Object Score], player[currentPlayer].badnikBonus, object.xpos, object.ypos)
243
object[tempObjectPos].drawOrder = 5
244
245
if player[currentPlayer].gravity == GRAVITY_AIR
246
if player[currentPlayer].badnikBonus < 15
247
player[currentPlayer].badnikBonus++
248
end if
249
end if
250
251
PlaySfx(SfxName[Block Break], false)
252
end if
253
else
254
// Simply interact with the player as a box
255
BoxCollisionTest(C_SOLID, object.entityPos, -24, -16, 24, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
256
end if
257
next
258
break
259
260
case BREAKGEM_SHARD
261
object.xpos += object.xvel
262
object.ypos += object.yvel
263
object.yvel += object.gravityStrength
264
265
if object.outOfBounds == true
266
object.type = TypeName[Blank Object]
267
end if
268
break
269
270
end switch
271
end event
272
273
274
event ObjectDraw
275
if object.state == BREAKGEM_INTACT
276
DrawSpriteFX(0, FX_INK, object.xpos, object.ypos)
277
DrawSprite(1)
278
else
279
DrawSprite(object.propertyValue)
280
end if
281
end event
282
283
284
event ObjectStartup
285
LoadSpriteSheet("HPZ/Objects.gif")
286
287
// Sprite frames
288
289
// Gem frames
290
SpriteFrame(-32, -16, 64, 32, 1, 223)
291
SpriteFrame(-32, 1, 64, 15, 115, 207)
292
293
// Shard frames
294
SpriteFrame(-8, -8, 16, 16, 115, 173)
295
SpriteFrame(-8, -8, 16, 16, 132, 173)
296
SpriteFrame(-8, -8, 16, 16, 149, 173)
297
SpriteFrame(-8, -8, 16, 16, 166, 173)
298
SpriteFrame(-8, -8, 16, 16, 115, 190)
299
SpriteFrame(-8, -8, 16, 16, 132, 190)
300
SpriteFrame(-8, -8, 16, 16, 149, 190)
301
SpriteFrame(-8, -8, 16, 16, 166, 190)
302
303
SpriteFrame(-4, -4, 8, 8, 183, 173)
304
SpriteFrame(-4, -4, 8, 8, 183, 182)
305
306
// Add this object to the debug mode object list
307
SetTableValue(TypeName[Break Gem], DebugMode_ObjCount, DebugMode_TypesTable)
308
SetTableValue(BreakGem_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
309
SetTableValue(BreakGem_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
310
DebugMode_ObjCount++
311
end event
312
313
314
// ========================
315
// Editor Events
316
// ========================
317
318
event RSDKDraw
319
DrawSprite(0)
320
end event
321
322
323
event RSDKLoad
324
LoadSpriteSheet("HPZ/Objects.gif")
325
SpriteFrame(-32, -16, 64, 32, 1, 223)
326
327
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
328
end event
329
330