Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/Menu/MenuHeading.txt
1319 views
1
//----------------Sonic CD Menu Heading Script----------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.PropertyValue : Object.Header
7
#alias Object.Value0 : Object.Timer
8
#alias Object.Value1 : Object.YOffset
9
#alias Object.Value2 : Object.XOffset
10
#alias Object.Value3 : Object.Angle
11
#alias Object.Value4 : Object.GFX1
12
#alias Object.Value5 : Object.GFX2
13
14
// Object[1] is a blank object just to share values
15
#alias Object[1].Value2 : Object.MaxButtonCount
16
17
//MenuHeading_CheckTouchBack Specific Values
18
#alias Object.Value1 : CurrentMenu.ButtonPressed //Current Menu Button Pressed
19
#alias Object[1].Value4 : Object.BackTouchPress
20
21
// States
22
#alias 0 : MENUHEADING_IDLE
23
#alias 1 : MENUHEADING_LEAVE_SCREEN
24
#alias 2 : MENUHEADING_ENTER_SCREEN
25
26
// Property Values
27
#alias 5 : MAINMENU_HEADER
28
#alias 6 : SAVESELECT_HEADER
29
#alias 7 : HELP&OPTIONS_HEADER
30
#alias 8 : EXTRAS_HEADER
31
#alias 9 : SOUNDTRACK_HEADER
32
#alias 10 : STAGESELECT_HEADER
33
34
// Ink Effects
35
#alias 2 : INK_ALPHA
36
37
// Languages
38
#alias 0 : LANG_ENGLISH
39
#alias 1 : LANG_FRENCH
40
#alias 2 : LANG_ITALIAN
41
#alias 3 : LANG_DEUTSCH
42
#alias 4 : LANG_SPANISH
43
#alias 5 : LANG_JAPANESE
44
45
//Engine & CallBacks
46
#alias 2 : MESSAGE_LOSTFOCUS
47
48
// Device Type
49
#alias 0 : RETRO_STANDARD
50
51
// Function declarations
52
#function MenuHeading_CheckTouchBack
53
54
55
function MenuHeading_CheckTouchBack //This is used by other scripts to check if the back touch button is pressed
56
if Engine.Message == MESSAGE_LOSTFOCUS
57
CurrentMenu.ButtonPressed = -1
58
end if
59
60
TempValue0 = Screen.XSize
61
TempValue0 -= 76
62
CheckTouchRect(TempValue0, 192, Screen.XSize, Screen.YSize)
63
if CheckResult > -1
64
CurrentMenu.ButtonPressed = 5
65
Object.BackTouchPress = true
66
else
67
Object.BackTouchPress = false
68
if TempValue3 < 0
69
if CurrentMenu.ButtonPressed == 5
70
KeyPress[0].ButtonB = true
71
end if
72
else
73
if CurrentMenu.ButtonPressed == 5
74
CurrentMenu.ButtonPressed = -1
75
end if
76
end if
77
end if
78
end function
79
80
81
sub ObjectMain
82
switch Object.State
83
case MENUHEADING_LEAVE_SCREEN
84
if Object.Timer < 16
85
Object.Timer++
86
Object.XOffset -= 16
87
else
88
Object.Frame = Object.Header
89
Object.Timer = 0
90
Object.State++
91
end if
92
93
if Object.Alpha == 255
94
Object.Alpha = 240
95
else
96
if Object.Alpha > 0
97
Object.Alpha -= 16
98
end if
99
end if
100
break
101
102
case MENUHEADING_ENTER_SCREEN
103
if Object.Timer < 16
104
Object.Timer++
105
Object.XOffset += 16
106
else
107
Object.Timer = 0
108
Object.State = MENUHEADING_IDLE
109
end if
110
111
if Object.Header == MAINMENU_HEADER
112
if Object.Alpha == 240
113
Object.Alpha = 255
114
else
115
if Object.Alpha < 255
116
Object.Alpha += 16
117
end if
118
end if
119
end if
120
break
121
122
end switch
123
end sub
124
125
126
sub ObjectDraw
127
//Draw BG Details
128
Object.YOffset--
129
Object.YOffset %= 240
130
Object.SpriteSheet = Object.GFX1
131
DrawSpriteScreenXY(1, Screen.CenterX, Object.YOffset)
132
DrawSpriteScreenXY(2, Screen.CenterX, Object.YOffset)
133
DrawSpriteScreenXY(0, Screen.CenterX, 20)
134
135
#platform: Use_Decomp // Small decomp change to extend the SONIC THE HEDGEHOG CD bar for wider resolutions
136
TempValue0 = Screen.CenterX
137
TempValue0 += 200
138
DrawRect(TempValue0, 20, screen.XSize, 9, 0, 0, 0, 255)
139
#endplatform
140
141
TempValue0 = Screen.CenterX
142
TempValue0 += 12
143
DrawRect(0, 212, TempValue0, 13, 0, 0, 0, 255)
144
145
//Draw Menu Header
146
Object.SpriteSheet = Object.GFX2
147
TempValue0 = Screen.CenterX
148
TempValue0 -= 160
149
TempValue0 >>= 2
150
TempValue0 += Object.XOffset
151
DrawSpriteScreenXY(Object.Frame, TempValue0, 194)
152
153
//Draw Detail Arrows (Standard) / Drag Arrows (Mobile)
154
Object.SpriteSheet = Object.GFX1
155
156
Object.Angle += 4
157
Object.Angle &= 511
158
159
TempValue0 = Screen.XSize
160
TempValue0 -= 40
161
//Check if the menu needs dragging to reach all the buttons
162
if Object.MaxButtonCount > 4
163
Sin(TempValue1, Object.Angle)
164
TempValue1 >>= 6
165
TempValue1 += 96
166
DrawSpriteScreenFX(3, FX_INK, TempValue0, TempValue1)
167
168
Sin(TempValue1, Object.Angle)
169
TempValue1 /= -64
170
TempValue1 += 144
171
DrawSpriteScreenFX(4, FX_INK, 40, TempValue1)
172
end if
173
end sub
174
175
176
sub ObjectStartup
177
LoadSpriteSheet("Menu/MenuGfx1_EN.gif")
178
ArrayPos0 = 32
179
while ArrayPos0 < 1056
180
if Object[ArrayPos0].Type == TypeName[Menu Heading]
181
#platform: Use_Origins
182
if game.continueFlag == false // they really duped the whole thing
183
Object[ArrayPos0].Frame = 5 // "Main Menu"
184
Object[ArrayPos0].Alpha = 255
185
Object[ArrayPos0].Header = MAINMENU_HEADER
186
Object[ArrayPos0].InkEffect = INK_ALPHA
187
Object[ArrayPos0].XOffset = -256
188
Object[ArrayPos0].State = MENUHEADING_ENTER_SCREEN
189
else
190
Object[ArrayPos0].Frame = 6 // "Save Select"
191
Object[ArrayPos0].Alpha = 255
192
Object[ArrayPos0].Header = SAVESELECT_HEADER
193
Object[ArrayPos0].InkEffect = INK_ALPHA
194
Object[ArrayPos0].XOffset = -256
195
Object[ArrayPos0].State = MENUHEADING_ENTER_SCREEN
196
end if
197
198
#endplatform
199
200
#platform: Use_Standalone
201
Object[ArrayPos0].Frame = 5
202
Object[ArrayPos0].Alpha = 255
203
Object[ArrayPos0].Header = MAINMENU_HEADER
204
Object[ArrayPos0].InkEffect = INK_ALPHA
205
Object[ArrayPos0].XOffset = -256
206
Object[ArrayPos0].State = MENUHEADING_ENTER_SCREEN
207
#endplatform
208
209
LoadSpriteSheet("Menu/MenuGfx1_EN.gif")
210
Object[ArrayPos0].GFX1 = Object[ArrayPos0].SpriteSheet
211
switch Engine.Language
212
case LANG_ENGLISH
213
LoadSpriteSheet("Menu/MenuGfx2_EN.gif")
214
break
215
case LANG_FRENCH
216
LoadSpriteSheet("Menu/MenuGfx2_FR.gif")
217
break
218
case LANG_ITALIAN
219
LoadSpriteSheet("Menu/MenuGfx2_IT.gif")
220
break
221
case LANG_DEUTSCH
222
LoadSpriteSheet("Menu/MenuGfx2_DE.gif")
223
break
224
case LANG_SPANISH
225
LoadSpriteSheet("Menu/MenuGfx2_ES.gif")
226
break
227
case LANG_JAPANESE
228
LoadSpriteSheet("Menu/MenuGfx2_JP.gif")
229
break
230
end switch
231
Object[ArrayPos0].GFX2 = Object[ArrayPos0].SpriteSheet
232
end if
233
ArrayPos0++
234
loop
235
//MenuGfx1
236
SpriteFrame(12, 0, 216, 9, 1, 225) // #0 Sonic The Hedgehog CD Bar
237
238
SpriteFrame(8, 0, 8, 240, 503, 1) // #1 Vertical Line 1
239
SpriteFrame(8, 240, 8, 240, 503, 1) // #2 Vertical Line
240
241
// Slight modification, in origins this was a normal "if Engine.DeviceType == RETRO_STANDARD", written like this to help with compatibility
242
#platform: Use_Origins
243
CheckEqual(Engine.DeviceType, RETRO_STANDARD)
244
#endplatform
245
246
#platform: Use_Standalone
247
#platform: Standard
248
CheckResult = true
249
#endplatform
250
#endplatform
251
252
#platform: Use_Standalone
253
#platform: Mobile
254
CheckResult = false
255
#endplatform
256
#endplatform
257
258
if CheckResult == true
259
SpriteFrame(-11, -36, 22, 72, 418, 366) // #3 Up Arrow
260
SpriteFrame(-11, -36, 22, 72, 441, 366) // #4 Down Arrow
261
else
262
switch Engine.Language
263
case LANG_ENGLISH
264
case LANG_JAPANESE
265
SpriteFrame(-11, -36, 22, 72, 418, 1) // #3 Up Arrow
266
SpriteFrame(-11, -36, 22, 72, 441, 1) // #4 Down Arrow
267
break
268
269
case LANG_FRENCH
270
SpriteFrame(-11, -36, 22, 72, 418, 74) // #3 Up Arrow
271
SpriteFrame(-11, -36, 22, 72, 441, 74) // #4 Down Arrow
272
break
273
274
case LANG_ITALIAN
275
SpriteFrame(-11, -36, 22, 72, 418, 147) // #3 Up Arrow
276
SpriteFrame(-11, -36, 22, 72, 441, 147) // #4 Down Arrow
277
break
278
279
case LANG_DEUTSCH
280
SpriteFrame(-11, -36, 22, 72, 418, 220) // #3 Up Arrow
281
SpriteFrame(-11, -36, 22, 72, 441, 220) // #4 Down Arrow
282
break
283
284
case LANG_SPANISH
285
SpriteFrame(-11, -36, 22, 72, 418, 293) // #3 Up Arrow
286
SpriteFrame(-11, -36, 22, 72, 441, 293) // #4 Down Arrow
287
break
288
289
end switch
290
end if
291
//MenuGfx2
292
switch Engine.Language
293
case LANG_ENGLISH
294
case LANG_JAPANESE
295
SpriteFrame(32, 0, 160, 30, 1, 615) // #5 Main Menu
296
SpriteFrame(32, 0, 160, 30, 1, 646) // #6 Save Select
297
SpriteFrame(16, 0, 160, 30, 1, 677) // #7 Help & Options
298
SpriteFrame(32, 0, 160, 30, 1, 708) // #8 Extras
299
SpriteFrame(24, 0, 160, 30, 1, 739) // #9 Soundtrack
300
SpriteFrame(24, 0, 160, 30, 1, 770) // #10 Stage Select (Used in Trial versions, this will be a blank sprite in steam, but we cannot see it there anyway)
301
break
302
303
case LANG_FRENCH
304
SpriteFrame(12, 0, 160, 30, 1, 615) // #5 Main Menu
305
SpriteFrame(20, 0, 160, 30, 1, 646) // #6 Save Select
306
SpriteFrame(14, 0, 160, 30, 1, 677) // #7 Help & Options
307
SpriteFrame(32, 0, 160, 30, 1, 708) // #8 Extras
308
SpriteFrame(10, 0, 160, 30, 1, 739) // #9 Soundtrack
309
SpriteFrame(24, 0, 160, 30, 1, 770) // #10 Stage Select (Used in Trial versions, this will be a blank sprite in steam, but we cannot see it there anyway)
310
311
break
312
case LANG_ITALIAN
313
SpriteFrame(8, 0, 160, 30, 1, 615) // #5 Main Menu
314
SpriteFrame(32, 0, 160, 30, 1, 646) // #6 Save Select
315
SpriteFrame(14, 0, 160, 30, 1, 677) // #7 Help & Options
316
SpriteFrame(32, 0, 160, 30, 1, 708) // #8 Extras
317
SpriteFrame(8, 0, 160, 30, 1, 739) // #9 Soundtrack
318
SpriteFrame(24, 0, 160, 30, 1, 770) // #10 Stage Select (Used in Trial versions, this will be a blank sprite in steam, but we cannot see it there anyway)
319
320
break
321
case LANG_DEUTSCH
322
SpriteFrame(24, 0, 160, 30, 1, 615) // #5 Main Menu
323
SpriteFrame(16, 0, 160, 30, 1, 646) // #6 Save Select
324
SpriteFrame(6, 0, 160, 30, 1, 677) // #7 Help & Options
325
SpriteFrame(32, 0, 160, 30, 1, 708) // #8 Extras
326
SpriteFrame(24, 0, 160, 30, 1, 739) // #9 Soundtrack
327
SpriteFrame(24, 0, 160, 30, 1, 770) // #10 Stage Select (Used in Trial versions, this will be a blank sprite in steam, but we cannot see it there anyway)
328
329
break
330
case LANG_SPANISH
331
SpriteFrame(16, 0, 160, 30, 1, 615) // #5 Main Menu
332
SpriteFrame(16, 0, 160, 30, 1, 646) // #6 Save Select
333
SpriteFrame(8, 0, 160, 30, 1, 677) // #7 Help & Options
334
SpriteFrame(32, 0, 160, 30, 1, 708) // #8 Extras
335
SpriteFrame(6, 0, 160, 30, 1, 739) // #9 Soundtrack
336
SpriteFrame(24, 0, 160, 30, 1, 770) // #10 Stage Select (Used in Trial versions, this will be a blank sprite in steam, but we cannot see it there anyway)
337
338
break
339
end switch
340
end sub
341
342
343
// ========================
344
// Editor Subs
345
// ========================
346
347
sub RSDKDraw
348
DrawSprite(0)
349
end sub
350
351
352
sub RSDKLoad
353
LoadSpriteSheet("Menu/MenuGfx2_EN.gif")
354
SpriteFrame(32, 0, 160, 30, 1, 615) // #5 Main Menu
355
356
// Although used by the object, it's not to be set from the editor
357
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
358
end sub
359
360