Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/TAttack/RoundIcon.txt
1319 views
1
//-----------------Sonic CD Round Icon Script-----------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value0 : Object.Timer
7
#alias Object.Value1 : Object.Minutes
8
#alias Object.Value2 : Object.Seconds
9
#alias Object.Value3 : Object.Milliseconds
10
#alias Object.Value4 : Object.LockedZone
11
#alias Object.PropertyValue : Object.Portrait
12
13
// Menu Control Aliases
14
#alias Object[0].Value2 : MenuControl.SelectedButton // Only used for Mobile
15
#alias Object[0].Value3 : MenuControl.SavedRound // This is used AFTER you play in time attack
16
#alias Object[0].State : MenuControl.State // This is used AFTER you play in time attack
17
18
// States
19
#alias 0 : ROUNDICON_BLANK
20
#alias 1 : ROUNDICON_SELECTED_ZONE
21
22
// Menu Control States
23
#alias 2 : MENUCONTROL_CONTROLS
24
#alias 3 : MENUCONTROL_BLANK
25
#alias 4 : MENUCONTROL_RETURN_TO_MENU
26
#alias 5 : MENUCONTROL_ENTER_SM
27
28
// Global SFX
29
#alias 27 : SFX_G_SELECT
30
31
// Property Values
32
#alias 0 : PALMTREE_PANIC_ICON
33
#alias 1 : COLLISION_CHAOS_ICON
34
#alias 2 : TIDAL_TEMPEST_ICON
35
#alias 3 : QUARTZ_QUADRANT_ICON
36
#alias 4 : WACKY_WORKBENCH_ICON
37
#alias 5 : STARDUST_SPEEDWAY_ICON
38
#alias 6 : METALLIC_MADNESS_ICON
39
#alias 7 : EXIT_ICON
40
41
// Face Buffer flags
42
#alias 1 : FACE_FLAG_TEXTURED_2D
43
44
45
sub ObjectMain
46
#platform: Mobile
47
if Options.PhysicalControls == false
48
if MenuControl.State == MENUCONTROL_CONTROLS
49
if Object.LockedZone == false
50
TempValue0 = Object.iXPos
51
TempValue0 -= 34
52
TempValue1 = Object.iXPos
53
TempValue1 += 34
54
TempValue2 = Object.iYPos
55
TempValue2 -= 45
56
TempValue3 = Object.iYPos
57
TempValue3 += 45
58
CheckTouchRect(TempValue0, TempValue2, TempValue1, TempValue3)
59
if CheckResult > -1
60
MenuControl.SelectedButton = Object.Portrait
61
else
62
CheckTouchRect(0, 0, Screen.XSize, Screen.YSize)
63
if CheckResult < 0
64
if MenuControl.SelectedButton == Object.Portrait
65
PlaySfx(SFX_G_SELECT, false)
66
MenuControl.State = MENUCONTROL_BLANK
67
Object.State = ROUNDICON_SELECTED_ZONE
68
if Object.Portrait == EXIT_ICON // Exit button pressed?
69
StopMusic()
70
end if
71
end if
72
else
73
if MenuControl.SelectedButton == Object.Portrait
74
MenuControl.SelectedButton = -1
75
end if
76
end if
77
end if
78
end if
79
end if
80
end if
81
#endplatform
82
end sub
83
84
85
sub ObjectDraw
86
DrawSprite(10)
87
// Icon Movement
88
Object.Rotation++
89
Object.Rotation &= 511
90
Cos(TempValue0, Object.Rotation)
91
TempValue0 >>= 4
92
Sin(TempValue1, Object.Rotation)
93
TempValue1 >>= 4
94
95
switch Object.Portrait
96
case PALMTREE_PANIC_ICON
97
TempValue0 += 64
98
TempValue1 += 76
99
break
100
101
case COLLISION_CHAOS_ICON
102
TempValue0 += 320
103
TempValue1 += 76
104
break
105
106
case TIDAL_TEMPEST_ICON
107
TempValue0 += 448
108
TempValue1 += 76
109
break
110
111
case QUARTZ_QUADRANT_ICON
112
TempValue0 += 64
113
TempValue1 += 220
114
break
115
116
case WACKY_WORKBENCH_ICON
117
TempValue0 += 192
118
TempValue1 += 220
119
break
120
121
case STARDUST_SPEEDWAY_ICON
122
TempValue0 += 320
123
TempValue1 += 220
124
break
125
126
case METALLIC_MADNESS_ICON
127
TempValue0 += 448
128
TempValue1 += 220
129
break
130
131
end switch
132
133
if Object.Portrait < EXIT_ICON // Draw for all main stages
134
VertexBuffer[0].x = Object.XPos
135
VertexBuffer[0].x >>= 16
136
VertexBuffer[0].x -= 32
137
VertexBuffer[0].u = TempValue0
138
VertexBuffer[0].u -= 32
139
VertexBuffer[0].y = Object.YPos
140
VertexBuffer[0].y >>= 16
141
VertexBuffer[0].y -= 43
142
VertexBuffer[0].v = TempValue1
143
VertexBuffer[0].v -= 43
144
VertexBuffer[1].x = Object.XPos
145
VertexBuffer[1].x >>= 16
146
VertexBuffer[1].x += 31
147
VertexBuffer[1].u = TempValue0
148
VertexBuffer[1].u += 31
149
VertexBuffer[1].y = VertexBuffer[0].y
150
VertexBuffer[1].v = VertexBuffer[0].v
151
VertexBuffer[2].x = VertexBuffer[0].x
152
VertexBuffer[2].u = VertexBuffer[0].u
153
VertexBuffer[2].y = Object.YPos
154
VertexBuffer[2].y >>= 16
155
VertexBuffer[2].y += 24
156
VertexBuffer[2].v = TempValue1
157
VertexBuffer[2].v += 24
158
VertexBuffer[3].x = VertexBuffer[1].x
159
VertexBuffer[3].u = VertexBuffer[1].u
160
VertexBuffer[3].y = VertexBuffer[2].y
161
VertexBuffer[3].v = VertexBuffer[2].v
162
Draw3DScene()
163
DrawSprite(19)
164
165
TempValue0 = Object.XPos
166
TempValue0 >>= 16
167
TempValue0 -= 24
168
169
TempValue1 = Object.YPos
170
TempValue1 >>= 16
171
TempValue1 += 34
172
// Zone specific time
173
DrawNumbers(0, TempValue0, TempValue1, Object.Minutes, 2, 6, 1)
174
TempValue0 += 16
175
DrawNumbers(0, TempValue0, TempValue1, Object.Seconds, 2, 6, 1)
176
TempValue0 += 19
177
DrawNumbers(0, TempValue0, TempValue1, Object.Milliseconds, 2, 6, 1)
178
else // Draw the Exit
179
DrawSprite(20)
180
TempValue0 = Object.XPos
181
TempValue0 >>= 16
182
TempValue0 -= 18
183
TempValue1 = Object.YPos
184
TempValue1 >>= 16
185
TempValue1 += 34
186
// Total Time
187
DrawNumbers(0, TempValue0, TempValue1, Object.Minutes, 3, 6, 1)
188
TempValue0 += 16
189
DrawNumbers(0, TempValue0, TempValue1, Object.Seconds, 2, 6, 1)
190
TempValue0 += 19
191
DrawNumbers(0, TempValue0, TempValue1, Object.Milliseconds, 2, 6, 1)
192
DrawSprite(22)
193
end if
194
195
DrawSprite(Object.Frame)
196
if Object.State == ROUNDICON_SELECTED_ZONE
197
TempValue0 = Object.Timer
198
TempValue0 &= 3
199
TempValue0 >>= 1
200
if TempValue0 == 0
201
if MenuControl.SavedRound == Object.Portrait
202
DrawSprite(21)
203
end if
204
end if
205
206
Object.Timer++
207
if Object.Timer == 30
208
Object.Timer = 0
209
Object.State = ROUNDICON_BLANK
210
if Object.Portrait == EXIT_ICON
211
MenuControl.State = MENUCONTROL_RETURN_TO_MENU
212
else
213
MenuControl.State = MENUCONTROL_ENTER_SM
214
MenuControl.SelectedButton = -1
215
end if
216
end if
217
else
218
if MenuControl.State == MENUCONTROL_CONTROLS
219
if MenuControl.SavedRound == Object.Portrait
220
DrawSprite(21)
221
end if
222
end if
223
end if
224
225
if Object.LockedZone == true
226
DrawSprite(23)
227
end if
228
end sub
229
230
231
sub ObjectStartup
232
LoadSpriteSheet("TAttack/TimeAttack.gif")
233
234
SpriteFrame(0, 0, 6, 8, 330, 577) // #0 - 0
235
SpriteFrame(0, 0, 6, 8, 337, 577) // #1 - 1
236
SpriteFrame(0, 0, 6, 8, 344, 577) // #2 - 2
237
SpriteFrame(0, 0, 6, 8, 351, 577) // #3 - 3
238
SpriteFrame(0, 0, 6, 8, 330, 586) // #4 - 4
239
SpriteFrame(0, 0, 6, 8, 337, 586) // #5 - 5
240
SpriteFrame(0, 0, 6, 8, 344, 586) // #6 - 6
241
SpriteFrame(0, 0, 6, 8, 351, 586) // #7 - 7
242
SpriteFrame(0, 0, 6, 8, 330, 595) // #8 - 8
243
SpriteFrame(0, 0, 6, 8, 337, 595) // #9 - 9
244
SpriteFrame(-34, -45, 68, 90, 1, 609) // #10 - Border
245
SpriteFrame(-32, 15, 64, 16, 70, 577) // #11 - Palmtree Panic
246
SpriteFrame(-32, 15, 64, 16, 135, 577) // #12 - Collision Chaos
247
SpriteFrame(-32, 15, 64, 16, 200, 577) // #13 - Tidal Tempest
248
SpriteFrame(-32, 15, 64, 16, 265, 577) // #14 - Quartz Quadrant
249
SpriteFrame(-32, 15, 64, 16, 70, 593) // #15 - Wacky Workbench
250
SpriteFrame(-32, 15, 64, 16, 135, 593) // #16 - Stardust Speedway
251
SpriteFrame(-32, 15, 64, 16, 200, 593) // #17 - Metallic Madness
252
SpriteFrame(-32, 15, 64, 16, 265, 593) // #18 - Total Time
253
SpriteFrame(-32, 31, 64, 13, 70, 638) // #19 - ' "
254
SpriteFrame(-32, 31, 64, 13, 70, 652) // #20 - ' "
255
SpriteFrame(-35, -46, 70, 92, 441, 860) // #21 - Selected Border
256
SpriteFrame(-29, -22, 56, 21, 223, 679) // #22 - Exit
257
SpriteFrame(20, 16, 8, 13, 330, 604) // #23 - Lock
258
259
ArrayPos0 = 32
260
while ArrayPos0 < 1056
261
if Object[ArrayPos0].Type == TypeName[Round Icon]
262
Object[ArrayPos0].Frame = Object[ArrayPos0].Portrait
263
Object[ArrayPos0].Frame += 11
264
Object[ArrayPos0].Rotation = Object[ArrayPos0].Portrait
265
Object[ArrayPos0].Rotation <<= 8
266
if Object[ArrayPos0].Portrait > 3
267
Object[ArrayPos0].Rotation += 256
268
end if
269
end if
270
ArrayPos0++
271
loop
272
273
3DScene.NoVertices = 4
274
3DScene.NoFaces = 1
275
FaceBuffer[0].a = 0
276
FaceBuffer[0].b = 1
277
FaceBuffer[0].c = 2
278
FaceBuffer[0].d = 3
279
FaceBuffer[0].Flag = FACE_FLAG_TEXTURED_2D
280
end sub
281
282
283
// ========================
284
// Editor Subs
285
// ========================
286
287
sub RSDKEdit
288
if Editor.ReturnVariable == true
289
switch Editor.VariableID
290
case EDIT_VAR_PROPVAL // Property Value
291
CheckResult = Object.Portrait
292
CheckResult &= 7
293
break
294
case 0 // roundID
295
CheckResult = Object.Portrait
296
CheckResult &= 7
297
break
298
end switch
299
else
300
switch Editor.VariableID
301
case EDIT_VAR_PROPVAL // Property Value
302
Object.Portrait = Editor.VariableValue
303
Object.Portrait &= 7
304
break
305
case 0 // roundID
306
Object.Portrait = Editor.VariableValue
307
Object.Portrait &= 7
308
break
309
end switch
310
end if
311
end sub
312
313
314
sub RSDKDraw
315
Object.Frame = Object.Portrait
316
Object.Frame += 11
317
318
DrawSprite(10)
319
320
if Object.Portrait < 7 // Draw for all main stages
321
DrawSprite(19)
322
else // Draw the Exit
323
DrawSprite(20)
324
DrawSprite(22)
325
end if
326
327
DrawSprite(Object.Frame)
328
end sub
329
330
331
sub RSDKLoad
332
LoadSpriteSheet("TAttack/TimeAttack.gif")
333
SpriteFrame(0, 0, 6, 8, 330, 577) // #0 - 0
334
SpriteFrame(0, 0, 6, 8, 337, 577) // #1 - 1
335
SpriteFrame(0, 0, 6, 8, 344, 577) // #2 - 2
336
SpriteFrame(0, 0, 6, 8, 351, 577) // #3 - 3
337
SpriteFrame(0, 0, 6, 8, 330, 586) // #4 - 4
338
SpriteFrame(0, 0, 6, 8, 337, 586) // #5 - 5
339
SpriteFrame(0, 0, 6, 8, 344, 586) // #6 - 6
340
SpriteFrame(0, 0, 6, 8, 351, 586) // #7 - 7
341
SpriteFrame(0, 0, 6, 8, 330, 595) // #8 - 8
342
SpriteFrame(0, 0, 6, 8, 337, 595) // #9 - 9
343
SpriteFrame(-34, -45, 68, 90, 1, 609) // #10 - Border
344
SpriteFrame(-32, 15, 64, 16, 70, 577) // #11 - Palmtree Panic
345
SpriteFrame(-32, 15, 64, 16, 135, 577) // #12 - Collision Chaos
346
SpriteFrame(-32, 15, 64, 16, 200, 577) // #13 - Tidal Tempest
347
SpriteFrame(-32, 15, 64, 16, 265, 577) // #14 - Quartz Quadrant
348
SpriteFrame(-32, 15, 64, 16, 70, 593) // #15 - Wacky Workbench
349
SpriteFrame(-32, 15, 64, 16, 135, 593) // #16 - Stardust Speedway
350
SpriteFrame(-32, 15, 64, 16, 200, 593) // #17 - Metallic Madness
351
SpriteFrame(-32, 15, 64, 16, 265, 593) // #18 - Total Time
352
SpriteFrame(-32, 31, 64, 13, 70, 638) // #19 - ' "
353
SpriteFrame(-32, 31, 64, 13, 70, 652) // #20 - ' "
354
SpriteFrame(-35, -46, 70, 92, 441, 860) // #21 - Selected Border
355
SpriteFrame(-29, -22, 56, 21, 223, 679) // #22 - Exit
356
SpriteFrame(20, 16, 8, 13, 330, 604) // #23 - Lock
357
358
AddEditorVariable("roundID")
359
SetActiveVariable("roundID")
360
AddEnumVariable("Palmtree Panic", 0)
361
AddEnumVariable("Collision Chaos", 1)
362
AddEnumVariable("Tidal Tempest", 2)
363
AddEnumVariable("Quartz Quadrant", 3)
364
AddEnumVariable("Wacky Workbench", 4)
365
AddEnumVariable("Stardust Speedway", 5)
366
AddEnumVariable("Metallic Madness", 6)
367
AddEnumVariable("Total Time", 7)
368
end sub
369
370