0% found this document useful (0 votes)
14 views9 pages

Stage Select

This document contains a script for a stage select feature in a Sonic CD game, detailing the various states and controls for navigating the stage selection menu. It includes handling for user inputs, screen transitions, and drawing the interface elements on the screen. The script is structured with defined aliases for clarity and organization, and it accommodates both mobile and standalone platforms.

Uploaded by

Samuel Augusto
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views9 pages

Stage Select

This document contains a script for a stage select feature in a Sonic CD game, detailing the various states and controls for navigating the stage selection menu. It includes handling for user inputs, screen transitions, and drawing the interface elements on the screen. The script is structured with defined aliases for clarity and organization, and it accommodates both mobile and standalone platforms.

Uploaded by

Samuel Augusto
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 9

//----------------Sonic CD Stage Select Script----------------//

//--------Scripted by Christian Whitehead 'The Taxman'--------//


//-------Unpacked By Rubberduckycooly's Script Unpacker-------//

// Aliases
#alias Object.Value0 : Object.Fade // Also used for timing
#alias Object.Value1 : Object.Level
#alias Object.Value2 : Object.HoldTimer
#alias Object.Value3 : Object.TouchButton

// States
#alias 0 : STAGESELECT_SETUP
#alias 1 : STAGESELECT_FADE_IN
#alias 2 : STAGESELECT_CONTROLS
#alias 3 : STAGESELECT_LOAD_LEVEL
#alias 4 : STAGESELECT_EXIT

// Presentation Stages
#alias 1 : STAGE_P_MENU

// Global SFX
#alias 27 : SFX_G_SELECT

// Game Mode Aliases


#alias 0 : MODE_NOSAVE

//Engine & CallBacks


#alias 2 : MESSAGE_LOSTFOCUS

// Device Type
#alias 1 : RETRO_MOBILE

sub ObjectMain
switch Object.State
case STAGESELECT_SETUP
if Object.Fade < 8
Object.Fade++
else
Object.Fade = 254
Object.State++
end if
SetScreenFade(0, 0, 0, 255)
break

case STAGESELECT_FADE_IN
if Object.Fade > 0
SetScreenFade(0, 0, 0, Object.Fade)
Object.Fade -= 8
else
Object.State++
end if
break

case STAGESELECT_CONTROLS
if KeyPress[0].Up == true
Object.HoldTimer = 0
Object.Level--
if Object.Level < 0
Object.Level = 79
end if
else
if KeyPress[0].Down == true
Object.HoldTimer = 0
Object.Level++
if Object.Level > 79
Object.Level = 0
end if
end if
end if

if KeyDown[0].Up == true
Object.HoldTimer++
if Object.HoldTimer == 8
Object.HoldTimer = 0
Object.Level--
if Object.Level < 0
Object.Level = 79
end if
end if
else
if KeyDown[0].Down == true
Object.HoldTimer++
if Object.HoldTimer == 8
Object.HoldTimer = 0
Object.Level++
if Object.Level > 79
Object.Level = 0
end if
end if
end if
end if

if KeyPress[0].Start == true
Object.State = STAGESELECT_LOAD_LEVEL
end if

if KeyPress[0].ButtonA == true
Object.State = STAGESELECT_LOAD_LEVEL
end if

if KeyPress[0].ButtonB == true
Object.State = STAGESELECT_EXIT
end if

#platform: Use_Origins
if Engine.DeviceType == RETRO_MOBILE
TempValue0 = Screen.CenterX
TempValue0 -= 138
TempValue1 = Screen.CenterX
TempValue1 -= 76
CheckTouchRect(TempValue0, 20, TempValue1, 72)
if CheckResult > -1
KeyDown[0].Up = true
Object.HoldTimer++
if Object.HoldTimer == 8
Object.HoldTimer = 0
Object.Level--
if Object.Level < 0
Object.Level = 79
end if
end if
end if
CheckTouchRect(TempValue0, 162, TempValue1, 214)
if CheckResult > -1
KeyDown[0].Down = true
Object.HoldTimer++
if Object.HoldTimer == 8
Object.HoldTimer = 0
Object.Level++
if Object.Level > 79
Object.Level = 0
end if
end if
end if
if Engine.Message == MESSAGE_LOSTFOCUS
Object.TouchButton = 0
end if
TempValue0 = Screen.CenterX
TempValue0 += 28
TempValue1 = Screen.CenterX
TempValue1 += 68
CheckTouchRect(TempValue0, 162, TempValue1, 214)
if CheckResult > -1
Object.TouchButton = 1
else
CheckTouchRect(0, 0, Screen.XSize, Screen.YSize)
if CheckResult < 0
if Object.TouchButton == 1
Object.TouchButton = 0
PlaySfx(SFX_G_SELECT, false)
Object.State = STAGESELECT_EXIT
end if
else
if Object.TouchButton == 1
Object.TouchButton = 0
end if
end if
end if
TempValue0 += 48
TempValue1 += 48
CheckTouchRect(TempValue0, 162, TempValue1, 214)
if CheckResult > -1
Object.TouchButton = 2
else
CheckTouchRect(0, 0, Screen.XSize, Screen.YSize)
if CheckResult < 0
if Object.TouchButton == 2
Object.TouchButton = 0
PlaySfx(SFX_G_SELECT, false)
Object.State = STAGESELECT_LOAD_LEVEL
end if
else
if Object.TouchButton == 2
Object.TouchButton = 0
end if
end if
end if
end if
#endplatform

#platform: Use_Standalone
#platform: Mobile
TempValue0 = Screen.CenterX
TempValue0 -= 138
TempValue1 = Screen.CenterX
TempValue1 -= 76
CheckTouchRect(TempValue0, 20, TempValue1, 72)
if CheckResult > -1
KeyDown[0].Up = true
Object.HoldTimer++
if Object.HoldTimer == 8
Object.HoldTimer = 0
Object.Level--
if Object.Level < 0
Object.Level = 79
end if
end if
end if

CheckTouchRect(TempValue0, 162, TempValue1, 214)


if CheckResult > -1
KeyDown[0].Down = true
Object.HoldTimer++
if Object.HoldTimer == 8
Object.HoldTimer = 0
Object.Level++
if Object.Level > 79
Object.Level = 0
end if
end if
end if

if Engine.Message == MESSAGE_LOSTFOCUS
Object.TouchButton = 0
end if
TempValue0 = Screen.CenterX
TempValue0 += 28
TempValue1 = Screen.CenterX
TempValue1 += 68
CheckTouchRect(TempValue0, 162, TempValue1, 214)
if CheckResult > -1
Object.TouchButton = 1
else
CheckTouchRect(0, 0, Screen.XSize, Screen.YSize)
if CheckResult < 0
if Object.TouchButton == 1
Object.TouchButton = 0
PlaySfx(SFX_G_SELECT, false)
Object.State = STAGESELECT_EXIT
end if
else
if Object.TouchButton == 1
Object.TouchButton = 0
end if
end if
end if
TempValue0 += 48
TempValue1 += 48
CheckTouchRect(TempValue0, 162, TempValue1, 214)
if CheckResult > -1
Object.TouchButton = 2
else
CheckTouchRect(0, 0, Screen.XSize, Screen.YSize)
if CheckResult < 0
if Object.TouchButton == 2
Object.TouchButton = 0
PlaySfx(SFX_G_SELECT, false)
Object.State = STAGESELECT_LOAD_LEVEL
end if
else
if Object.TouchButton == 2
Object.TouchButton = 0
end if
end if
end if
#endplatform
#endplatform
break

case STAGESELECT_LOAD_LEVEL
if Object.Fade < 288
Object.Fade += 8
else
Options.GameMode = MODE_NOSAVE
#platform: Mobile
Player.Lives = 3
#endplatform
Stage.ActiveList = REGULAR_STAGE
Stage.ListPos = Object.Level
LoadStage()
end if
TempValue0 = Object.Fade
if TempValue0 > 255
TempValue0 = 255
end if
SetScreenFade(0, 0, 0, TempValue0)
break

case STAGESELECT_EXIT
if Object.Fade < 288
Object.Fade += 8
else
Options.GameMode = MODE_NOSAVE
Stage.ActiveList = PRESENTATION_STAGE
Stage.ListPos = STAGE_P_MENU
LoadStage()
end if
TempValue0 = Object.Fade
if TempValue0 > 255
TempValue0 = 255
end if
SetScreenFade(0, 0, 0, TempValue0)
break
end switch
end sub

sub ObjectDraw
TempValue0 = 0
while TempValue0 < 240
TempValue1 = 0
while TempValue1 < Screen.XSize
DrawSpriteScreenXY(15, TempValue1, TempValue0)
TempValue1 += 224
loop
TempValue0 += 48
loop
DrawSpriteScreenXY(16, Screen.CenterX, 80)

TempValue0 = Screen.CenterX
TempValue0 -= 48
TempValue1 = Object.Level
TempValue1 /= 10
switch TempValue1
case 0
DrawSpriteScreenXY(1, TempValue0, 112)
break
case 1
DrawSpriteScreenXY(2, TempValue0, 112)
break
case 2
DrawSpriteScreenXY(3, TempValue0, 112)
break
case 3
DrawSpriteScreenXY(4, TempValue0, 112)
break
case 4
DrawSpriteScreenXY(5, TempValue0, 112)
break
case 5
DrawSpriteScreenXY(6, TempValue0, 112)
break
case 6
DrawSpriteScreenXY(7, TempValue0, 112)
break
case 7
DrawSpriteScreenXY(8, TempValue0, 112)
break
end switch
TempValue0 += 8
DrawSpriteScreenXY(14, TempValue0, 112)

TempValue0 += 8
TempValue1 = Object.Level
TempValue1 %= 10
TempValue1 >>= 2
TempValue1++
DrawSpriteScreenXY(TempValue1, TempValue0, 112)

TempValue0 += 8
DrawSpriteScreenXY(14, TempValue0, 112)
TempValue0 += 8
TempValue1 = Object.Level
TempValue1 %= 10
switch TempValue1
case 0
case 4
DrawSpriteScreenXY(10, TempValue0, 112)
break

case 1
case 5
DrawSpriteScreenXY(11, TempValue0, 112)
break

case 2
case 6
case 8
DrawSpriteScreenXY(12, TempValue0, 112)
break

case 3
case 7
case 9
DrawSpriteScreenXY(13, TempValue0, 112)
break

end switch
#platform: Use_Origins
if Engine.DeviceType == RETRO_MOBILE
TempValue0 -= 96
if KeyDown[0].Up == true
DrawSpriteScreenXY(18, TempValue0, 48)
else
DrawSpriteScreenXY(17, TempValue0, 48)
end if
if KeyDown[0].Down == true
DrawSpriteScreenXY(20, TempValue0, 192)
else
DrawSpriteScreenXY(19, TempValue0, 192)
end if
TempValue0 += 160
if Object.TouchButton == 1
DrawSpriteScreenXY(24, TempValue0, 192)
else
DrawSpriteScreenXY(23, TempValue0, 192)
end if
TempValue0 += 48
if Object.TouchButton == 2
DrawSpriteScreenXY(22, TempValue0, 192)
else
DrawSpriteScreenXY(21, TempValue0, 192)
end if
end if
#endplatform

#platform: Use_Standalone
#platform: Mobile
TempValue0 -= 96
if KeyDown[0].Up == true
DrawSpriteScreenXY(18, TempValue0, 48)
else
DrawSpriteScreenXY(17, TempValue0, 48)
end if

if KeyDown[0].Down == true
DrawSpriteScreenXY(20, TempValue0, 192)
else
DrawSpriteScreenXY(19, TempValue0, 192)
end if

TempValue0 += 160
if Object.TouchButton == 1
DrawSpriteScreenXY(24, TempValue0, 192)
else
DrawSpriteScreenXY(23, TempValue0, 192)
end if

TempValue0 += 48
if Object.TouchButton == 2
DrawSpriteScreenXY(22, TempValue0, 192)
else
DrawSpriteScreenXY(21, TempValue0, 192)
end if
#endplatform
#endplatform
end sub

sub ObjectStartup
LoadSpriteSheet("Secrets/SecretMenus.gif")
SpriteFrame(0, 0, 8, 16, 1, 49) // #0 - 0
SpriteFrame(0, 0, 8, 16, 10, 49) // #1 - 1
SpriteFrame(0, 0, 8, 16, 19, 49) // #2 - 2
SpriteFrame(0, 0, 8, 16, 28, 49) // #3 - 3
SpriteFrame(0, 0, 8, 16, 1, 66) // #4 - 4
SpriteFrame(0, 0, 8, 16, 10, 66) // #5 - 5
SpriteFrame(0, 0, 8, 16, 19, 66) // #6 - 6
SpriteFrame(0, 0, 8, 16, 28, 66) // #7 - 7
SpriteFrame(0, 0, 8, 16, 1, 83) // #8 - 8
SpriteFrame(0, 0, 8, 16, 10, 83) // #9 - 9
SpriteFrame(0, 0, 8, 16, 37, 49) // #10 - A
SpriteFrame(0, 0, 8, 16, 46, 49) // #11 - B
SpriteFrame(0, 0, 8, 16, 55, 49) // #12 - C
SpriteFrame(0, 0, 8, 16, 64, 49) // #13 - D
SpriteFrame(0, 0, 8, 16, 19, 83) // #14 - "-"
SpriteFrame(0, 0, 224, 48, 0, 0) // #15 - Background
SpriteFrame(-48, 0, 96, 16, 136, 66) // #16 - Stage Select
SpriteFrame(-10, -10, 20, 20, 136, 117) // #17 - Up Arrow
SpriteFrame(-10, -10, 20, 20, 136, 138) // #18 - Up Arrow Highlight
SpriteFrame(-10, -10, 20, 20, 157, 117) // #19 - Down Arrow
SpriteFrame(-10, -10, 20, 20, 157, 138) // #20 - Down Arrow Highlight
SpriteFrame(-20, -10, 40, 20, 159, 159) // #21 - GO Button
SpriteFrame(-20, -10, 40, 20, 159, 180) // #22 - GO Button Highlight
SpriteFrame(-20, -10, 40, 20, 200, 159) // #23 - Exit Button
SpriteFrame(-20, -10, 40, 20, 200, 180) // #24 - Exit Button
Highlight
end sub
// ========================
// Editor Subs
// ========================

sub RSDKDraw
DrawSprite(0)
end sub

sub RSDKLoad
LoadSpriteSheet("Secrets/SecretMenus.gif")
SpriteFrame(-48, 0, 96, 16, 136, 66) // #0 - Stage Select

SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
end sub

You might also like