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/Special/Bomb.txt
1482 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Bomb 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.localPos.x
13
private alias object.value2 : object.localPos.y
14
private alias object.value3 : object.localPos.z
15
private alias object.value4 : object.worldPos.x
16
private alias object.value5 : object.worldPos.y
17
private alias object.value6 : object.worldPos.z
18
19
private alias object.value7 : object.shadowsEnabled
20
private alias object.value8 : object.localShadowPos.x
21
private alias object.value9 : object.localShadowPos.y
22
private alias object.value11 : object.worldShadowPos.x
23
private alias object.value12 : object.worldShadowPos.y
24
private alias object.value13 : object.worldShadowPos.z
25
private alias object.value14 : object.worldShadowPos.u
26
27
// Halfpipe Aliases
28
private alias object.value13 : halfpipe.playerPos.z
29
30
// Player Aliases
31
private alias object.state : player.state
32
private alias object.gravity : player.gravity
33
34
private alias object.value7 : player.invincibilityTimer
35
private alias object.value14 : player.localPos.z
36
private alias object.value15 : player.localPos.x
37
private alias object.value16 : player.localPos.y
38
39
// Face Buffer Flag Aliases
40
private alias 5 : FACE_TEXTURED_C
41
private alias 6 : FACE_TEXTURED_C_BLEND
42
43
44
// ========================
45
// Events
46
// ========================
47
48
event ObjectUpdate
49
arrayPos0 = scene3D.vertexCount
50
arrayPos1 = scene3D.faceCount
51
52
if object.shadowsEnabled == true
53
faceBuffer[arrayPos1].flag = FACE_TEXTURED_C_BLEND
54
faceBuffer[arrayPos1].a = arrayPos0
55
vertexBuffer[arrayPos0].x = object.worldShadowPos.x
56
vertexBuffer[arrayPos0].y = object.worldShadowPos.y
57
vertexBuffer[arrayPos0].z = object.worldShadowPos.z
58
vertexBuffer[arrayPos0].u = object.worldShadowPos.u
59
vertexBuffer[arrayPos0].v = 50
60
arrayPos0++
61
62
faceBuffer[arrayPos1].b = arrayPos0
63
vertexBuffer[arrayPos0].x = object.worldShadowPos.x
64
vertexBuffer[arrayPos0].y = object.worldShadowPos.y
65
vertexBuffer[arrayPos0].z = object.worldShadowPos.z
66
temp0 = object[0].ypos
67
temp0 -= 0xE00000
68
object.scale = object.ypos
69
object.scale -= temp0
70
if object.scale > 0
71
object.scale >>= 14
72
object.scale += 0x400
73
else
74
object.scale = 0x400
75
end if
76
vertexBuffer[arrayPos0].u = object.scale
77
vertexBuffer[arrayPos0].v = object.scale
78
arrayPos0++
79
80
faceBuffer[arrayPos1].c = arrayPos0
81
vertexBuffer[arrayPos0].x = object.worldShadowPos.x
82
vertexBuffer[arrayPos0].y = object.worldShadowPos.y
83
vertexBuffer[arrayPos0].z = object.worldShadowPos.z
84
vertexBuffer[arrayPos0].u = 17
85
vertexBuffer[arrayPos0].v = 16
86
arrayPos0++
87
88
faceBuffer[arrayPos1].d = arrayPos0
89
vertexBuffer[arrayPos0].x = object.worldShadowPos.x
90
vertexBuffer[arrayPos0].y = object.worldShadowPos.y
91
vertexBuffer[arrayPos0].z = object.worldShadowPos.z
92
arrayPos0++
93
94
arrayPos1++
95
scene3D.vertexCount += 4
96
scene3D.faceCount++
97
end if
98
99
faceBuffer[arrayPos1].flag = FACE_TEXTURED_C
100
faceBuffer[arrayPos1].a = arrayPos0
101
vertexBuffer[arrayPos0].x = object.worldPos.x
102
vertexBuffer[arrayPos0].y = object.worldPos.y
103
vertexBuffer[arrayPos0].z = object.worldPos.z
104
vertexBuffer[arrayPos0].u = 83
105
vertexBuffer[arrayPos0].v = 50
106
arrayPos0++
107
108
faceBuffer[arrayPos1].b = arrayPos0
109
vertexBuffer[arrayPos0].x = object.worldPos.x
110
vertexBuffer[arrayPos0].y = object.worldPos.y
111
vertexBuffer[arrayPos0].z = object.worldPos.z
112
temp0 = object[0].ypos
113
temp0 -= 0x1000000
114
temp1 = object.ypos
115
temp1 -= temp0
116
if temp1 > 0
117
temp1 >>= 14
118
temp1 += 0x600
119
else
120
temp1 = 0x600
121
end if
122
vertexBuffer[arrayPos0].u = temp1
123
vertexBuffer[arrayPos0].v = temp1
124
arrayPos0++
125
126
faceBuffer[arrayPos1].c = arrayPos0
127
vertexBuffer[arrayPos0].x = object.worldPos.x
128
vertexBuffer[arrayPos0].y = object.worldPos.y
129
vertexBuffer[arrayPos0].z = object.worldPos.z
130
vertexBuffer[arrayPos0].u = 16
131
vertexBuffer[arrayPos0].v = 16
132
arrayPos0++
133
134
faceBuffer[arrayPos1].d = arrayPos0
135
vertexBuffer[arrayPos0].x = object.worldPos.x
136
vertexBuffer[arrayPos0].y = object.worldPos.y
137
vertexBuffer[arrayPos0].z = object.worldPos.z
138
scene3D.vertexCount += 4
139
scene3D.faceCount++
140
141
if object.localPos.z < halfpipe[0].playerPos.z
142
object.type = TypeName[Blank Object]
143
else
144
foreach (TypeName[Player Object], currentPlayer, ACTIVE_ENTITIES)
145
temp1 = object.localPos.z
146
temp1 -= 0x20000
147
temp2 = object.localPos.z
148
temp2 += 0x20000
149
if player[currentPlayer].localPos.z > temp1
150
if player[currentPlayer].localPos.z < temp2
151
temp0 = player[currentPlayer].localPos.x
152
temp0 -= object.localPos.x
153
temp1 = temp0
154
temp1 *= temp0
155
156
temp0 = player[currentPlayer].localPos.y
157
temp0 -= object.localPos.y
158
temp2 = temp0
159
temp2 *= temp0
160
temp1 += temp2
161
162
if temp1 < 0xC40000
163
object.type = TypeName[Explosion]
164
object.animationTimer = 0
165
object.frame = 0
166
167
if player[currentPlayer].state != Player_State_Hurt
168
if player[currentPlayer].invincibilityTimer == 0
169
CallFunction(Player_LoseRings)
170
if player[currentPlayer].gravity == 0
171
player[currentPlayer].state = Player_State_Hurt
172
else
173
player[currentPlayer].invincibilityTimer = 60
174
end if
175
end if
176
end if
177
178
PlaySfx(SfxName[Bomb], false)
179
end if
180
end if
181
end if
182
next
183
end if
184
end event
185
186
187
event ObjectStartup
188
LoadSpriteSheet("Special/Objects.gif")
189
foreach (TypeName[Bomb], arrayPos0, ALL_ENTITIES)
190
object[arrayPos0].angle = object[arrayPos0].ixpos
191
object[arrayPos0].angle -= 448
192
object[arrayPos0].angle &= 0x1FF
193
194
Sin(object[arrayPos0].localPos.x, object[arrayPos0].angle)
195
object[arrayPos0].localPos.x *= -48
196
object[arrayPos0].localPos.x >>= 1
197
198
Cos(object[arrayPos0].localPos.y, object[arrayPos0].angle)
199
object[arrayPos0].localPos.y *= -48
200
object[arrayPos0].localPos.y >>= 1
201
202
if object[arrayPos0].localPos.y < -0x800
203
object[arrayPos0].shadowsEnabled = true
204
205
Sin(object[arrayPos0].localShadowPos.x, object[arrayPos0].angle)
206
object[arrayPos0].localShadowPos.x *= -60
207
object[arrayPos0].localShadowPos.x >>= 1
208
209
Cos(object[arrayPos0].localShadowPos.y, object[arrayPos0].angle)
210
object[arrayPos0].localShadowPos.y *= -60
211
object[arrayPos0].localShadowPos.y >>= 1
212
213
object[arrayPos0].worldShadowPos.u = 116
214
if object[arrayPos0].angle > 32
215
if object[arrayPos0].angle < 480
216
if object[arrayPos0].angle < 256
217
object[arrayPos0].worldShadowPos.u = 149
218
else
219
object[arrayPos0].worldShadowPos.u = 182
220
end if
221
end if
222
end if
223
end if
224
next
225
end event
226
227
228
// ========================
229
// Editor Events
230
// ========================
231
232
event RSDKDraw
233
DrawSprite(0)
234
end event
235
236
237
event RSDKLoad
238
LoadSpriteSheet("Special/Objects.gif")
239
SpriteFrame(-8, -8, 16, 16, 233, 17)
240
241
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
242
end event
243
244