Start
Start
//-------Aliases-------//
private alias 4 : TYPE_STARTMESSAGE
private alias object.value11 : character.sel
private alias object.value12 : touch.delay
private alias object.value13 : touch.fade
// Function declarations
reserve function TouchControls
// Tables
private table CharLoad
0, 1, 2, 5, 3, 4
end table
function TouchControls
object.inkEffect = INK_ALPHA
CheckTouchRect(0, 0, screen.xsize, screen.ysize)
if checkResult > -1
touch.fade = 0
else
touch.fade++
end if
if touch.fade >= 400
if object.alpha > 0
object.alpha -= 15
end if
else
switch saved.transmobile
case 0
object.alpha = 191
break
case 1
object.alpha = 255
break
case 2
object.alpha = 0
break
case 3
object.alpha = 63
break
case 4
object.alpha = 127
break
default
object.alpha = 191
break
end switch
end if
temp0 = screen.xsize
switch options.gamemode
case 0
case 1
case 3
temp0 -= 44
break
case 2
case 5
temp0 += 44
break
end switch
DrawSpriteScreenFX(49,FX_INK,16,160)
switch options.gamemode
case 0
case 1
case 3
temp0 -= 43
break
case 2
case 5
temp0 -= 70
break
end switch
DrawSpriteScreenFX(0,0,temp0,8)
if inputDown.Left==1
DrawSpriteScreenFX(52,FX_INK,16,162)
endif
if inputDown.Down==1
DrawSpriteScreenFX(51,FX_INK,16,200)
end if
if inputDown.Right==1
DrawSpriteScreenFX(53,FX_INK,54,162)
endif
if inputDown.Up==1
DrawSpriteScreenFX(50,FX_INK,16,162)
endif
switch options.gamemode
case 0
case 1
case 3
temp0 += 50
break
case 2
case 5
temp0 += 28
break
end switch
if inputDown.buttonA==1
DrawSpriteScreenFX(55,FX_INK,temp0,174)
else
DrawSpriteScreenFX(54,FX_INK,temp0,174)
endif
end function
event ObjectMain
switch object.state
case 0
CheckTouchRect(0, 0, screen.xsize, screen.ysize)
temp0 = 0
if checkResult > -1
temp0 = 1
saveRAM[295] = 1
WriteSaveRam()
end if
if inputPress.start == 1
temp0 = 1
saveRAM[295] = 0
WriteSaveRam()
end if
if inputPress.buttonA == 1
//temp0 = 1
end if
if inputPress.buttonB == 1
//temp0 = 1
end if
if inputPress.buttonC == 1
//temp0 = 1
end if
if temp0 == 1
if options.stageSelectFlag == 1
object.state = 5
else
object.state = 1
end if
else
object.value4++
if object.value4 == 720
object.state = 4
end if
end if
break
case 1
object.value0 += 8
music.volume -= 2
if object.value0 == 320
StopMusic()
stage.activeList = PRESENTATION_STAGE
stage.listPos = 6
LoadStage()
end if
SetScreenFade(0, 0, 0, object.value0)
break
case 2
object.value0 += 8
music.volume -= 2
if object.value0 == 320
StopMusic()
stage.activeList = PRESENTATION_STAGE
stage.listPos = 5
LoadStage()
end if
SetScreenFade(0, 0, 0, object.value0)
break
case 3
object.value0 += 8
music.volume -= 2
if object.value0 == 320
StopMusic()
stage.listPos = 4
LoadStage()
end if
SetScreenFade(0, 0, 0, object.value0)
break
case 4
object.value0 += 8
music.volume -= 2
if object.value0 == 320
StopMusic()
if attract.stage == 3
stage.activeList = SPECIAL_STAGE
stage.listPos = 0
LoadPalette("SpecialStage.act",0,0,0,128)
else
stage.activeList = REGULAR_STAGE
stage.listPos = attract.stage
stage.listPos *= 3
end if
Rand(stage.playerListPos, 4)
if stage.playerListPos < 3
stage.player2Enabled = 0
end if
attract.stage++
attract.stage &= 3
options.attractMode = 1
credits.screen = 0
LoadStage()
end if
SetScreenFade(0, 0, 0, object.value0)
break
case 5 // level select
if saved.mobile == 1
CallFunction(TouchControls)
end if
LoadPalette("LevelSel.act", 0, 0, 0, 256)
stage[0].activeLayer = 0
object.value10 = 1
LoadSpriteSheet("LevelSelect/TextOG.gif")
SetupMenu(MENU_1, 0, 1, 2)
AddMenuEntry(MENU_1, "GREEN HILL ZONE STAGE 1", 1)
AddMenuEntry(MENU_1, " STAGE 2", 0)
AddMenuEntry(MENU_1, " STAGE 3", 0)
AddMenuEntry(MENU_1, "MARBLE ZONE STAGE 1", 0)
AddMenuEntry(MENU_1, " STAGE 2", 0)
AddMenuEntry(MENU_1, " STAGE 3", 0)
AddMenuEntry(MENU_1, "SPRING YARD ZONE STAGE 1", 0)
AddMenuEntry(MENU_1, " STAGE 2", 0)
AddMenuEntry(MENU_1, " STAGE 3", 0)
AddMenuEntry(MENU_1, "LABYRINTH ZONE STAGE 1", 0)
AddMenuEntry(MENU_1, " STAGE 2", 0)
AddMenuEntry(MENU_1, " STAGE 3", 0)
AddMenuEntry(MENU_1, "STAR LIGHT ZONE STAGE 1", 0)
AddMenuEntry(MENU_1, " STAGE 2", 0)
AddMenuEntry(MENU_1, " STAGE 3", 0)
AddMenuEntry(MENU_1, "SCRAP BRAIN ZONE STAGE 1", 0)
AddMenuEntry(MENU_1, " STAGE 2", 0)
AddMenuEntry(MENU_1, " STAGE 3", 0)
AddMenuEntry(MENU_1, "FINAL ZONE ", 0)
AddMenuEntry(MENU_1, "SPECIAL STAGE 01 ", 0)
AddMenuEntry(MENU_1, "SOUND SELECT 00 ", 0)
AddMenuEntry(MENU_1, " ", 0)
AddMenuEntry(MENU_1, "PLAYER SONIC", 0)
stage.playerListPos = 0
menu1.selection = 0
object.state = 6
object.value1 = 0
object.value2 = 0
object.value3 = 0
object.value4 = 0
object.value5 = 0
object.value6 = 6
object.value6 += saved.superStates
object.value7 = 5
object.value7 += SaveRAM[412]
character.sel = 0
break
case 6
if saved.mobile == 1
CheckTouchRect(0, 96, screen.xcenter, screen.ysize)
if checkResult > -1
arrayPos0 = checkResult
temp0 = touchscreen[arrayPos0].xpos
temp0 -= 56
temp1 = touchscreen[arrayPos0].ypos
temp1 -= 184
ATan2(temp2, temp0, temp1)
temp2 += 42
temp2 &= 255
temp2 >>= 6
switch temp2
case 0
inputPress.right = 1
break
case 1
inputDown.down = 1
break
case 2
inputPress.left = 1
break
case 3
inputDown.up = 1
break
end switch
end if
CheckTouchRect(screen.xcenter, 96, screen.xsize, 240)
if checkResult > -1
inputDown.buttonA = 1
end if
if touchJump == 0
inputPress.buttonA |= inputDown.buttonA
end if
touchJump = inputDown.buttonA
end if
if inputPress.buttonB == 1
object.state = 9
end if
if inputDown.down == 1
object.value1 = 0
object.value2++
if object.value2 == 1
object.value3++
end if
object.value2 %= 12
else
if inputDown.up == 1
object.value2 = 0
object.value1++
if object.value1 == 1
object.value3--
end if
object.value1 %= 12
else
object.value1 = 0
object.value2 = 0
end if
end if
while object.value3 < 0
object.value3 += 22
loop
object.value3 %= 22
menu1.selection = object.value3
if menu1.selection == 21
menu1.selection++
end if
switch object.value3
case 20
temp1 = 0
if inputPress.left == 1
object.value4--
temp1 = 1
end if
if inputPress.right == 1
object.value4++
temp1 = 1
end if
while object.value4 < 0
object.value4 += 19
loop
object.value4 %= 19
if temp1 == 1
switch object.value4
case 0
EditMenuEntry(MENU_1, "SOUND SELECT 00
", 20, 1)
break
case 1
EditMenuEntry(MENU_1, "SOUND SELECT 01
", 20, 1)
break
case 2
EditMenuEntry(MENU_1, "SOUND SELECT 02
", 20, 1)
break
case 3
EditMenuEntry(MENU_1, "SOUND SELECT 03
", 20, 1)
break
case 4
EditMenuEntry(MENU_1, "SOUND SELECT 04
", 20, 1)
break
case 5
EditMenuEntry(MENU_1, "SOUND SELECT 05
", 20, 1)
break
case 6
EditMenuEntry(MENU_1, "SOUND SELECT 06
", 20, 1)
break
case 7
EditMenuEntry(MENU_1, "SOUND SELECT 07
", 20, 1)
break
case 8
EditMenuEntry(MENU_1, "SOUND SELECT 08
", 20, 1)
break
case 9
EditMenuEntry(MENU_1, "SOUND SELECT 09
", 20, 1)
break
case 10
EditMenuEntry(MENU_1, "SOUND SELECT 10
", 20, 1)
break
case 11
EditMenuEntry(MENU_1, "SOUND SELECT 11
", 20, 1)
break
case 12
EditMenuEntry(MENU_1, "SOUND SELECT 12
", 20, 1)
break
case 13
EditMenuEntry(MENU_1, "SOUND SELECT 13
", 20, 1)
break
case 14
EditMenuEntry(MENU_1, "SOUND SELECT 14
", 20, 1)
break
case 15
EditMenuEntry(MENU_1, "SOUND SELECT 15
", 20, 1)
break
case 16
EditMenuEntry(MENU_1, "SOUND SELECT 16
", 20, 1)
break
case 17
EditMenuEntry(MENU_1, "SOUND SELECT 17
", 20, 1)
break
case 18
EditMenuEntry(MENU_1, "SOUND SELECT 18
", 20, 1)
break
end switch
end if
break
case 19
temp1 = 0
if inputPress.left == 1
object.value5--
temp1 = 1
end if
if inputPress.right == 1
object.value5++
temp1 = 1
end if
while object.value5 < 0
object.value5 += object.value6
loop
object.value5 %= object.value6
if temp1 == 1
switch object.value5
case 0
EditMenuEntry(MENU_1, "SPECIAL STAGE 01
", 19, 1)
break
case 1
EditMenuEntry(MENU_1, "SPECIAL STAGE 02
", 19, 1)
break
case 2
EditMenuEntry(MENU_1, "SPECIAL STAGE 03
", 19, 1)
break
case 3
EditMenuEntry(MENU_1, "SPECIAL STAGE 04
", 19, 1)
break
case 4
EditMenuEntry(MENU_1, "SPECIAL STAGE 05
", 19, 1)
break
case 5
EditMenuEntry(MENU_1, "SPECIAL STAGE 06
", 19, 1)
break
case 6
EditMenuEntry(MENU_1, "SPECIAL STAGE 07
", 19, 1)
break
end switch
end if
break
case 21
temp1 = 0
if inputPress.left == 1
character.sel--
temp1 = 1
end if
if inputPress.right == 1
character.sel++
temp1 = 1
end if
while character.sel < 0
character.sel += object.value7
loop
character.sel %= object.value7
if temp1 == 1
switch character.sel
case 0
EditMenuEntry(MENU_1, "PLAYER
SONIC", 22, 1)
break
case 1
EditMenuEntry(MENU_1, "PLAYER
TAILS", 22, 1)
break
case 2
EditMenuEntry(MENU_1, "PLAYER
KNUCKLES", 22, 1)
break
case 3
EditMenuEntry(MENU_1, "PLAYER
AMY", 22, 1)
break
case 4
EditMenuEntry(MENU_1, "PLAYER SONIC &
TAILS", 22, 1)
break
case 5
EditMenuEntry(MENU_1, "PLAYER KNUCKLES &
TAILS", 22, 1)
break
end switch
end if
break
end switch
CheckEqual(inputPress.buttonA, 1)
temp0 = checkResult
CheckEqual(inputPress.start, 1)
temp0 |= checkResult
if temp0 == 1
WriteSaveRam()
options.attractMode = 0
switch object.value3
case 19 //special stage
stage.activeList = SPECIAL_STAGE
stage.listPos = object.value5
PlaySfx(SfxName[Warp], 0)
fadeColor = 208
fadeColor <<= 16
temp0 = 255
temp0 <<= 8
fadeColor += temp0
fadeColor += 224
object.state = 8
if object.value9 == 1
specialStage.emeralds = 127
end if
break
case 20 //sound select
switch object.value4
case 0
StopMusic()
break
case 1
SetMusicTrack("GreenHill.ogg", 0,
0x9B0AA)
PlayMusic(0)
break
case 2
SetMusicTrack("Marble.ogg", 0, 0x18434)
PlayMusic(0)
break
case 3
SetMusicTrack("SpringYard.ogg", 0,
0x18968)
PlayMusic(0)
break
case 4
SetMusicTrack("Labyrinth.ogg", 0,
0x149DC)
PlayMusic(0)
break
case 5
SetMusicTrack("Starlight.ogg", 0,
0x1498C)
PlayMusic(0)
break
case 6
SetMusicTrack("ScrapBrain.ogg", 0, 1)
PlayMusic(0)
break
case 7
SetMusicTrack("Invincibility.ogg", 0,
0x9A68)
PlayMusic(0)
break
case 8
PlaySfx(SfxName[Life], 0)
PauseMusic()
ResetObjectEntity(25, TypeName[Music
Event], 2, 0, 0)
object[25].priority = PRIORITY_ACTIVE
break
case 9
SetMusicTrack("SpecialStage.ogg", 0, 1)
PlayMusic(0)
break
case 10
SetMusicTrack("Titlescreen.ogg", 0, 0)
PlayMusic(0)
break
case 11
SetMusicTrack("Ending.ogg", 0, 0)
PlayMusic(0)
break
case 12
SetMusicTrack("Boss.ogg", 0, 1)
PlayMusic(0)
break
case 13
SetMusicTrack("Final.ogg", 0, 0x14AC8)
PlayMusic(0)
break
case 14
SetMusicTrack("ActComplete.ogg", 0, 0)
PlayMusic(0)
break
case 15
SetMusicTrack("GameOver.ogg", 0, 0)
PlayMusic(0)
break
case 16
SetMusicTrack("Continue.ogg", 0, 0)
PlayMusic(0)
break
case 17
SetMusicTrack("Credits.ogg", 0, 0)
PlayMusic(0)
break
case 18
SetMusicTrack("Drowning.ogg", 0, 0)
PlayMusic(0)
break
end switch
if object.value9 == 0
switch object.value4
case 1
if object.value8 == 1
object.value8 = 2
else
object.value8 = 0
end if
break
case 2
if object.value8 == 2
object.value8 = 3
else
object.value8 = 0
end if
break
case 4
object.value8 = 1
break
case 6
if object.value8 == 3
object.value8 = 4
object.value9 = 1
PlaySfx(SfxName[Emerald], 0)
else
object.value8 = 0
end if
break
default
object.value8 = 0
break
end switch
end if
break
case 21
break
default
stage.activeList = REGULAR_STAGE
stage.listPos = object.value3
if object.value9 == 1
specialStage.emeralds = 127
end if
object.state = 7
break
end switch
end if
break
case 7
if object.value0 < 256
music.volume -= 10
object.value0 += 16
SetScreenFade(0, 0, 0, object.value0)
else
GetTableValue(stage.playerListPos, character.sel, CharLoad)
LoadStage()
SetScreenFade(0, 0, 0, 255)
end if
break
case 8
if object.value0 < 768
music.volume -= 10
object.value0 += 8
SetScreenFade(color6, color7, color6, object.value0)
else
GetTableValue(stage.playerListPos, character.sel, CharLoad)
StopMusic()
LoadPalette("SpecialStage.act",0,0,0,128)
LoadStage()
SetScreenFade(color6, color7, color6, 255)
end if
break
case 9
object.value0 += 8
music.volume -= 2
if object.value0 == 320
StopMusic()
stage.activeList = PRESENTATION_STAGE
stage.listPos = 6
LoadStage()
end if
SetScreenFade(0, 0, 0, object.value0)
break
end switch
end event
event ObjectDraw
switch object.state
//case 5
case 6
case 7
case 8
case 9
temp0 = screen.xcenter
DrawMenu(MENU_1, temp0, 40)
break
default
object.animationTimer++
if object.animationTimer > 59
object.animationTimer = 0
end if
if object.animationTimer > 29
DrawSpriteScreenXY(0, object.xpos, object.ypos)
end if
break
end switch
end event
event ObjectStartup
switch saved.mobile
case 0
switch saved.language
case 0
SpriteFrame(-72, -4, 144, 8, 1, 274)
break
case 1 //PTBR
SpriteFrame(-80, -4, 160, 8, 1, 292)
break
case 2 //SP
SpriteFrame(-91, -7, 181, 11, 1, 301)
break
case 3 //FR
SpriteFrame(-72, -4, 144, 8, 1, 283)
break
case 4 //GE
SpriteFrame(-83, -7, 165, 11, 1, 262)
break
end switch
break
case 1
SpriteFrame(-56, -4, 112, 8, 1, 253)
break
end switch
end event
event RSDKDraw
DrawSprite(0)
end event
event RSDKLoad
LoadSpriteSheet("Global/Display.gif")
SpriteFrame(-16, -16, 32, 32, 1, 143)
end event