Path: blob/master/Sonic 1/Scripts/Global/TitleCard.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Title Card Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.propertyValue : object.displayOffset1213private alias object.value0 : object.timer14private alias object.value1 : object.circlePos15private alias object.value2 : object.actNamePos16private alias object.value3 : object.zoneTextPos17private alias object.value4 : object.actNumPos1819private alias 0 : TITLECARD_SETUP20private alias 1 : TITLECARD_DELAY21private alias 2 : TITLECARD_ENTERTITLECARD22private alias 3 : TITLECARD_SHOWTITLECARD23private alias 4 : TITLECARD_SHOWSTAGE24private alias 5 : TITLECARD_STARTSTAGE25private alias 6 : TITLECARD_EXITTITLECARD26private alias 7 : TITLECARD_CREDITSFADEIN27private alias 8 : TITLECARD_FADETOTITLE2829// Track ID Aliases30private alias 0 : TRACK_STAGE3132// Player Aliases33private alias object.up : player.up34private alias object.down : player.down35private alias object.left : player.left36private alias object.right : player.right37private alias object.jumpPress : player.jumpPress38private alias object.jumpHold : player.jumpHold39private alias object.controlMode : player.controlMode40private alias object.value1 : player.timer414243// ========================44// Events45// ========================4647event ObjectUpdate48// Hide touch controls49options.touchControls = false5051switch object.state52case TITLECARD_SETUP53// Init values and such54object.alpha = 0xFF5556object.circlePos = screen.xcenter57object.circlePos += 1285859object.actNamePos = screen.xcenter60FlipSign(object.actNamePos)61object.actNamePos -= 1606263object.zoneTextPos = screen.xcenter64FlipSign(object.zoneTextPos)65object.zoneTextPos -= 966667object.actNumPos = screen.xcenter68object.actNumPos += 326970#platform: USE_ORIGINS71if game.playMode == BOOT_PLAYMODE_MISSION72PlayMusic(TRACK_STAGE)73game.missionCondition = 074game.missionEnd = false75object.state = TITLECARD_CREDITSFADEIN76object.timer = 077stage.timeEnabled = true78stage.state = STAGE_RUNNING79SetScreenFade(0, 0, 0, 0)80else81if game.playMode == BOOT_PLAYMODE_BOSSRUSH82PlayMusic(TRACK_STAGE)83game.missionCondition = 084game.missionEnd = false85object.state = TITLECARD_CREDITSFADEIN86object.timer = 087stage.timeEnabled = true88stage.state = STAGE_RUNNING89SetScreenFade(0, 0, 0, 0)90else91if credits.screen > 092object.state = TITLECARD_CREDITSFADEIN93object.timer = 27294stage.state = STAGE_RUNNING95SetScreenFade(0, 0, 0, 0xFF)96else97object.state++98end if99end if100end if101#endplatform102103#platform: USE_STANDALONE104if credits.screen > 0105object.state = TITLECARD_CREDITSFADEIN106object.timer = 272107stage.state = STAGE_RUNNING108SetScreenFade(0, 0, 0, 0xFF)109else110object.state++111end if112#endplatform113break114115case TITLECARD_DELAY116// Wait for half a second117if object.timer < 30118object.timer++119else120object.timer = 0121PlayMusic(TRACK_STAGE)122object.state++123end if124break125126case TITLECARD_ENTERTITLECARD127// Slide stuff in128if object.circlePos > 0129object.circlePos -= 16130if object.circlePos < 0131object.circlePos = 0132end if133end if134135if object.actNamePos < 0136object.actNamePos += 16137if object.actNamePos > 0138object.actNamePos = 0139end if140else141if object.zoneTextPos < 0142object.zoneTextPos += 16143if object.zoneTextPos > 0144object.zoneTextPos = 0145end if146else147if object.actNumPos > 0148object.actNumPos -= 16149if object.actNumPos < 0150object.actNumPos = 0151end if152else153object.state++154end if155end if156end if157break158159case TITLECARD_SHOWTITLECARD160if object.timer < 60161object.timer++162else163object.timer = 0164object.alpha = 0xF8165stage.state = STAGE_RUNNING166167currentPlayer = 0168while currentPlayer < playerCount169player[currentPlayer].controlMode = CONTROLMODE_NONE170player[currentPlayer].up = false171player[currentPlayer].down = false172player[currentPlayer].left = false173player[currentPlayer].right = false174player[currentPlayer].jumpPress = false175player[currentPlayer].jumpHold = false176player[currentPlayer].timer = 0177currentPlayer++178loop179object.state++180end if181break182183case TITLECARD_SHOWSTAGE184if object.alpha > 0185object.alpha -= 8186else187object.state++188189currentPlayer = 0190while currentPlayer < playerCount191#platform: USE_STANDALONE192player[currentPlayer].controlMode = CONTROLMODE_P1193#endplatform194#platform: USE_ORIGINS195player[currentPlayer].controlMode = currentPlayer196#endplatform197currentPlayer++198loop199end if200break201202case TITLECARD_STARTSTAGE203if object.timer < 60204object.timer++205else206object.timer = 0207stage.timeEnabled = true208object.state++209end if210break211212case TITLECARD_EXITTITLECARD213object.circlePos += 32214object.actNumPos += 32215object.actNamePos -= 32216object.zoneTextPos -= 32217if object.timer < 20218object.timer++219else220object.timer = 0221object.type = TypeName[Blank Object]222end if223break224225case TITLECARD_CREDITSFADEIN226if object.timer > 0227object.timer -= 16228SetScreenFade(0, 0, 0, object.timer)229else230currentPlayer = 0231while currentPlayer < playerCount232#platform: USE_STANDALONE233player[currentPlayer].controlMode = CONTROLMODE_P1234#endplatform235#platform: USE_ORIGINS236player[currentPlayer].controlMode = currentPlayer237#endplatform238currentPlayer++239loop240ResetObjectEntity(object.entityPos, TypeName[Blank Object], 0, 0, 0)241end if242break243244case TITLECARD_FADETOTITLE245// This state is set from the Player Object, when a replay is finished246247if object.timer < 300248object.timer += 5249if credits.screen == 0250music.volume -= 2251end if252else253stage.activeList = PRESENTATION_STAGE254if credits.screen > 0 // fade to credits scene instead if credits are active255stage.listPos = 2256else257stage.listPos = 0258StopMusic()259end if260LoadStage()261end if262263SetScreenFade(0, 0, 0, object.timer)264break265266end switch267end event268269270event ObjectDraw271if object.state < TITLECARD_CREDITSFADEIN272SetActivePalette(0, 0, screen.ysize)273DrawRect(0, 0, screen.xsize, screen.ysize, 0, 0, 0, object.alpha)274275// Draw Blue Circle276temp0 = screen.xcenter277temp0 -= 28278temp0 += object.circlePos279temp0 += object.displayOffset280DrawSpriteScreenXY(26, temp0, 76)281282// Draw Act Name283temp0 = screen.xcenter284temp0 += 22285temp0 += object.actNamePos286temp0 += object.displayOffset287DrawActName(0, temp0, 80, 0, 0, 16, 1)288289// Draw Zone Text290temp0 = screen.xcenter291temp0 -= 57292temp0 += object.zoneTextPos293temp0 += object.displayOffset294DrawSpriteScreenXY(27, temp0, 100)295296// Draw Act Name297temp0 = screen.xcenter298temp0 -= 21299temp0 += object.actNumPos300temp0 += object.displayOffset301302// The only act in the game that should cause this check to fail is Final Zone303// It uses 5 instead of 4 because SBZ Act 3 is internally LZ Act 4304if stage.actNum < 5305// Get the appropriate act number sprite306temp1 = 27307temp1 += stage.actNum308309// If this is the Act 4 sprite, no it isn't it's Act 3310if temp1 > 30311temp1 = 30312end if313314DrawSpriteScreenXY(temp1, temp0, 102)315end if316end if317end event318319320event ObjectStartup321LoadSpriteSheet("Global/Display.gif")322323// Title card frames324325// These first 26 are just the alphabet for the title card letters326SpriteFrame(0, 0, 15, 16, 37, 73) // #0 - Letter A327SpriteFrame(0, 0, 15, 16, 53, 73) // #1 - Letter B328SpriteFrame(0, 0, 15, 16, 69, 73) // #2 - Letter C329SpriteFrame(0, 0, 15, 16, 85, 73) // #3 - Letter D330SpriteFrame(0, 0, 14, 16, 101, 73) // #4 - Letter E331SpriteFrame(0, 0, 14, 16, 116, 73) // #5 - Letter F332SpriteFrame(0, 0, 16, 16, 131, 73) // #6 - Letter G333SpriteFrame(0, 0, 15, 16, 148, 73) // #7 - Letter H334SpriteFrame(0, 0, 6, 16, 164, 73) // #8 - Letter I335SpriteFrame(0, 0, 14, 16, 171, 73) // #9 - Letter J336SpriteFrame(0, 0, 16, 16, 186, 73) // #10 - Letter K337SpriteFrame(0, 0, 15, 16, 203, 73) // #11 - Letter L338SpriteFrame(0, 0, 16, 16, 219, 73) // #12 - Letter M339SpriteFrame(0, 0, 15, 16, 236, 73) // #13 - Letter N340SpriteFrame(0, 0, 16, 16, 37, 90) // #14 - Letter O341SpriteFrame(0, 0, 15, 16, 54, 90) // #15 - Letter P342SpriteFrame(0, 0, 16, 16, 70, 90) // #16 - Letter Q343SpriteFrame(0, 0, 15, 16, 87, 90) // #17 - Letter R344SpriteFrame(0, 0, 14, 16, 103, 90) // #18 - Letter S345SpriteFrame(0, 0, 14, 16, 118, 90) // #19 - Letter T346SpriteFrame(0, 0, 15, 16, 133, 90) // #20 - Letter U347SpriteFrame(0, 0, 15, 16, 149, 90) // #21 - Letter V348SpriteFrame(0, 0, 22, 16, 165, 90) // #22 - Letter W349SpriteFrame(0, 0, 16, 16, 188, 90) // #23 - Letter X350SpriteFrame(0, 0, 16, 16, 205, 90) // #24 - Letter Y351SpriteFrame(0, 0, 15, 16, 222, 90) // #25 - Letter Z352353SpriteFrame(0, 0, 56, 56, 41, 1) // #26 - Big Blue circle354355if stage.actNum >= 5356SpriteFrame(16, 0, 62, 16, 98, 26) // #27 - Zone text (With different offset, as there's no act number)357else358SpriteFrame(0, 0, 62, 16, 98, 26) // #27 - Zone text (Standard offset)359end if360361SpriteFrame(0, 0, 39, 24, 98, 1) // #28 - Act 1 text362SpriteFrame(0, 0, 43, 24, 138, 1) // #29 - Act 2 text363SpriteFrame(0, 0, 43, 24, 182, 1) // #30 - Act 3 text364365// Cycle through all objects and filter out title cards366// (Pretend this is a foreach, this object was made before foreaches were brought into existence)367arrayPos0 = 32368while arrayPos0 < 0x420369if object[arrayPos0].type == TypeName[Title Card]370object[arrayPos0].priority = PRIORITY_ALWAYS371object[arrayPos0].alpha = 0xFF372object[arrayPos0].drawOrder = 6373374stage.state = STAGE_PAUSED375end if376377arrayPos0++378loop379end event380381382// ========================383// Editor Events384// ========================385386event RSDKDraw387DrawSprite(0)388end event389390391event RSDKLoad392LoadSpriteSheet("Global/Display.gif")393SpriteFrame(-8, -8, 16, 16, 239, 239) // "Trigger" - #0394395SetVariableAlias(ALIAS_VAR_PROPVAL, "displayOffset")396end event397398399