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