Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/Menu/MenuWindow.txt
1319 views
1
//-----------------Sonic CD Menu Window 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.Width
8
#alias Object.Value2 : Object.Height
9
#alias Object.Value3 : Object.XOffset
10
#alias Object.Value4 : Object.YOffset
11
#alias Object.Value5 : Object.EntityPos
12
13
//Object[1] is a blank object just to share values
14
#alias Object[1].Value4 : Object.BackTouchPress
15
16
// States
17
#alias 0 : MENUWINDOW_EXPAND
18
#alias 1 : MENUWINDOW_SCALEDOWN
19
#alias 2 : MENUWINDOW_BLANK
20
#alias 3 : MENUWINDOW_SHRINK
21
#alias 4 : MENUWINDOW_FIT_IN_BUTTON
22
#alias 5 : MENUWINDOW_SOUNDTRACK_EXPAND
23
#alias 6 : MENUWINDOW_SOUNDTRACK_SHRINK
24
25
// Menu Button States
26
#alias 7 : MENUBUTTON_RESET
27
28
// Languages
29
#alias 0 : LANG_ENGLISH
30
#alias 1 : LANG_FRENCH
31
#alias 2 : LANG_ITALIAN
32
#alias 3 : LANG_DEUTSCH
33
#alias 4 : LANG_SPANISH
34
#alias 5 : LANG_JAPANESE
35
36
// Ink Effects
37
#alias 2 : INK_ALPHA
38
39
40
sub ObjectMain
41
switch Object.State
42
case MENUWINDOW_EXPAND
43
if Object.Timer < 14
44
Object.Timer++
45
//Width
46
TempValue0 = 300
47
TempValue0 -= Object.Width
48
TempValue0 >>= 3
49
Object.Width += TempValue0
50
//Height
51
TempValue0 = 224
52
TempValue0 -= Object.Height
53
TempValue0 >>= 3
54
Object.Height += TempValue0
55
//XPos
56
TempValue0 = Screen.CenterX
57
TempValue0 <<= 16
58
TempValue0 -= Object.XPos
59
TempValue0 >>= 2
60
Object.XPos += TempValue0
61
//YPos
62
TempValue0 = Screen.CenterY
63
TempValue0 -= 6
64
TempValue0 <<= 16
65
TempValue0 -= Object.YPos
66
TempValue0 >>= 2
67
Object.YPos += TempValue0
68
else
69
Object.Timer = 0
70
Object.State++
71
end if
72
break
73
74
case MENUWINDOW_SCALEDOWN
75
if Object.Timer < 30
76
Object.Timer++
77
// Width
78
TempValue0 = 256
79
TempValue0 -= Object.Width
80
TempValue0 >>= 2
81
Object.Width += TempValue0
82
// Height
83
TempValue0 = 160
84
TempValue0 -= Object.Height
85
TempValue0 >>= 2
86
Object.Height += TempValue0
87
// XPos
88
TempValue0 = Screen.CenterX
89
TempValue0 <<= 16
90
if Object.XPos > TempValue0
91
Object.XPos -= 0x10000
92
end if
93
94
if Object.XPos < TempValue0
95
Object.XPos += 0x10000
96
end if
97
// YPos
98
TempValue0 = Screen.CenterY
99
TempValue0 -= 8
100
TempValue0 <<= 16
101
if Object.YPos > TempValue0
102
Object.YPos -= 0x10000
103
end if
104
105
if Object.YPos < TempValue0
106
Object.YPos += 0x10000
107
end if
108
else
109
Object.Timer = 0
110
Object.State++
111
end if
112
break
113
114
case MENUWINDOW_BLANK
115
// Nothing
116
break
117
118
case MENUWINDOW_SHRINK
119
if Object.Timer < 14
120
Object.Timer++
121
// Width
122
TempValue0 = 132
123
TempValue0 -= Object.Width
124
TempValue0 >>= 3
125
Object.Width += TempValue0
126
// Height
127
TempValue0 = 18
128
TempValue0 -= Object.Height
129
TempValue0 >>= 3
130
Object.Height += TempValue0
131
// XPos
132
TempValue0 = Object.XOffset
133
TempValue0 -= Object.XPos
134
TempValue0 >>= 2
135
Object.XPos += TempValue0
136
// YPos
137
TempValue0 = Object.YOffset
138
TempValue0 -= Object.YPos
139
TempValue0 >>= 2
140
Object.YPos += TempValue0
141
else
142
Object.Timer = 0
143
Object.State++
144
end if
145
break
146
147
case MENUWINDOW_FIT_IN_BUTTON
148
if Object.Timer < 14
149
Object.Timer++
150
// Width
151
TempValue0 = 144
152
TempValue0 -= Object.Width
153
TempValue0 >>= 3
154
Object.Width += TempValue0
155
// Height
156
TempValue0 = 21
157
TempValue0 -= Object.Height
158
TempValue0 >>= 3
159
Object.Height += TempValue0
160
// XPos
161
if Object.XPos > Object.XOffset
162
Object.XPos -= 0x10000
163
end if
164
165
if Object.XPos < Object.XOffset
166
Object.XPos += 0x10000
167
end if
168
// YPos
169
if Object.YPos > Object.YOffset
170
Object.YPos -= 0x10000
171
end if
172
173
if Object.YPos < Object.YOffset
174
Object.YPos += 0x10000
175
end if
176
else
177
Object.Timer++
178
if Object.Timer == 16
179
Object.Timer = 0
180
Object.Type = TypeName[Blank Object]
181
end if
182
183
ArrayPos0 = Object.EntityPos
184
Object[ArrayPos0].Type = TypeName[Menu Button]
185
Object[ArrayPos0].State = MENUBUTTON_RESET
186
end if
187
break
188
189
case MENUWINDOW_SOUNDTRACK_EXPAND
190
if Object.Timer < 14
191
Object.Timer++
192
// Width
193
TempValue0 = 300
194
TempValue0 -= Object.Width
195
TempValue0 >>= 3
196
Object.Width += TempValue0
197
// Height
198
TempValue0 = 192
199
TempValue0 -= Object.Height
200
TempValue0 >>= 3
201
Object.Height += TempValue0
202
// XPos
203
TempValue0 = Screen.CenterX
204
TempValue0 <<= 16
205
TempValue0 -= Object.XPos
206
TempValue0 >>= 2
207
Object.XPos += TempValue0
208
// YPos
209
TempValue0 = Screen.CenterY
210
TempValue0 -= 6
211
TempValue0 <<= 16
212
TempValue0 -= Object.YPos
213
TempValue0 >>= 2
214
Object.YPos += TempValue0
215
else
216
Object.Timer = 0
217
Object.State++
218
end if
219
break
220
221
case MENUWINDOW_SOUNDTRACK_SHRINK
222
if Object.Timer < 30
223
Object.Timer++
224
// Width
225
TempValue0 = 256
226
TempValue0 -= Object.Width
227
TempValue0 >>= 2
228
Object.Width += TempValue0
229
// Height
230
TempValue0 = 128
231
TempValue0 -= Object.Height
232
TempValue0 >>= 2
233
Object.Height += TempValue0
234
// XPos
235
TempValue0 = Screen.CenterX
236
TempValue0 <<= 16
237
if Object.XPos > TempValue0
238
Object.XPos -= 0x10000
239
end if
240
if Object.XPos < TempValue0
241
Object.XPos += 0x10000
242
end if
243
// YPos
244
TempValue0 = Screen.CenterY
245
TempValue0 -= 8
246
TempValue0 <<= 16
247
if Object.YPos > TempValue0
248
Object.YPos -= 0x10000
249
end if
250
if Object.YPos < TempValue0
251
Object.YPos += 0x10000
252
end if
253
else
254
Object.Timer = 0
255
Object.State = MENUWINDOW_BLANK
256
end if
257
break
258
259
end switch
260
end sub
261
262
263
sub ObjectDraw
264
//Upper Left Border
265
TempValue0 = Object.Width
266
TempValue0 *= -0x8000
267
TempValue0 += Object.XPos
268
TempValue1 = Object.Height
269
TempValue1 *= -0x8000
270
TempValue1 += Object.YPos
271
DrawSpriteXY(0, TempValue0, TempValue1)
272
273
//Upper Right Border
274
TempValue0 = Object.Width
275
TempValue0 <<= 15
276
TempValue0 += Object.XPos
277
DrawSpriteXY(1, TempValue0, TempValue1)
278
279
//Bottom Left Border
280
TempValue0 = Object.Width
281
TempValue0 *= -0x8000
282
TempValue0 += Object.XPos
283
TempValue1 = Object.Height
284
TempValue1 <<= 15
285
TempValue1 += Object.YPos
286
DrawSpriteXY(2, TempValue0, TempValue1)
287
288
//Bottom Right Border
289
TempValue0 = Object.Width
290
TempValue0 <<= 15
291
TempValue0 += Object.XPos
292
DrawSpriteXY(3, TempValue0, TempValue1)
293
294
//Menu Filling
295
TempValue0 = Object.Width
296
TempValue0 *= -0x8000
297
TempValue0 += Object.XPos
298
TempValue0 >>= 16
299
TempValue1 = Object.Height
300
TempValue1 *= -0x8000
301
TempValue1 += Object.YPos
302
TempValue1 += 0xA0000
303
TempValue1 >>= 16
304
TempValue2 = Object.Width
305
TempValue2 -= 2
306
TempValue3 = Object.Height
307
TempValue3 -= 21
308
DrawRect(TempValue0, TempValue1, TempValue2, TempValue3, 96, 96, 128, 255)
309
310
//Menu Shadow
311
TempValue0 = Object.Width
312
TempValue0 <<= 15
313
TempValue0 += Object.XPos
314
TempValue0 -= 0x20000
315
TempValue0 >>= 16
316
TempValue2 = 2
317
DrawRect(TempValue0, TempValue1, TempValue2, TempValue3, 0, 0, 0, 255)
318
319
Object.InkEffect = INK_ALPHA
320
switch Object.State
321
case MENUWINDOW_EXPAND
322
case MENUWINDOW_SCALEDOWN
323
case MENUWINDOW_SOUNDTRACK_EXPAND
324
case MENUWINDOW_SOUNDTRACK_SHRINK
325
if Object.Alpha < 248
326
Object.Alpha += 5
327
end if
328
break
329
330
case MENUWINDOW_BLANK
331
Object.Alpha = 255
332
break
333
334
case MENUWINDOW_SHRINK
335
case MENUWINDOW_FIT_IN_BUTTON
336
if Object.Alpha > 0
337
Object.Alpha -= 8
338
end if
339
break
340
341
end switch
342
TempValue0 = Screen.XSize
343
TempValue0 -= 48
344
if Object.BackTouchPress == true
345
DrawSpriteScreenFX(5, FX_INK, TempValue0, 225)
346
else
347
DrawSpriteScreenFX(4, FX_INK, TempValue0, 225)
348
end if
349
end sub
350
351
352
sub ObjectStartup
353
switch Engine.Language
354
case LANG_ENGLISH
355
LoadSpriteSheet("Menu/MenuGfx2_EN.gif")
356
break
357
case LANG_FRENCH
358
LoadSpriteSheet("Menu/MenuGfx2_FR.gif")
359
break
360
case LANG_ITALIAN
361
LoadSpriteSheet("Menu/MenuGfx2_IT.gif")
362
break
363
case LANG_DEUTSCH
364
LoadSpriteSheet("Menu/MenuGfx2_DE.gif")
365
break
366
case LANG_SPANISH
367
LoadSpriteSheet("Menu/MenuGfx2_ES.gif")
368
break
369
case LANG_JAPANESE
370
LoadSpriteSheet("Menu/MenuGfx2_JP.gif")
371
break
372
end switch
373
374
// (#0 - #3) - Borders for the Menu Window, Upper Left - Right - Bottom Left - Bottom Right
375
SpriteFrame(0, 0, 140, 10, 259, 246)
376
SpriteFrame(-140, 0, 140, 10, 263, 246)
377
SpriteFrame(0, -11, 140, 11, 259, 256)
378
SpriteFrame(-140, -11, 140, 11, 263, 256)
379
380
SpriteFrame(-32, -24, 64, 24, 404, 146) // #4 - Back Button
381
SpriteFrame(-32, -24, 64, 24, 404, 171) // #5 - Back Button Highlight
382
end sub
383
384
385
// ========================
386
// Editor Subs
387
// ========================
388
389
sub RSDKDraw
390
DrawSprite(0)
391
end sub
392
393
394
sub RSDKLoad
395
LoadSpriteSheet("Global/Display.gif")
396
SpriteFrame(-16, -16, 32, 32, 1, 143) // #0 - "Script" Icon
397
398
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
399
end sub
400
401