Path: blob/main/Scripts/Global/ActFinish.txt
1319 views
//----------------Sonic CD Act Finish Script------------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.Timer67// All texts have their own X Position values8#alias Object.XPos : Object.LineXPos0 // "SONIC GOT" Line9#alias Object.Value1 : Object.LineXPos1 // "THROUGH ZONE X" Line10#alias Object.Value2 : Object.LineXPos2 // Score Line11#alias Object.Value3 : Object.LineXPos3 // Ring Bonus Line12#alias Object.Value4 : Object.LineXPos4 // Time Bonus Line1314#alias Object.Value5 : Object.TimeBonus15#alias Object.Value6 : Object.RingBonus1617// New to Origins!18// The Stage List Pos of the current stage's Present version19#alias Object.Value7 : Object.StagePosP2021// HUD Alias22#alias Object[24].PropertyValue : HUD.CurrentTimePeriod2324// Player Aliases25#alias Object[0].Type : Player.Type26#alias Object[0].Value0 : Player.Rings2728// States29#alias -1 : ACTFINISH_NULL // Origins exclusive3031#alias 0 : ACTFINISH_INIT32#alias 1 : ACTFINISH_SLIDEIN33#alias 2 : ACTFINISH_DISPLAYTALLY34#alias 3 : ACTFINISH_TALLYUP35#alias 4 : ACTFINISH_DISPLAYFINAL36#alias 5 : ACTFINISH_FADEOUT3738#alias 6 : ACTFINISH_HOLDOVERRESTART // Origins exclusive39#alias 7 : ACTFINISH_WAITFORCALLBACK // Origins exclusive404142#alias 0 : PLAYER_SONIC_A43#alias 1 : PLAYER_TAILS_A444546// Time Period Aliases47#alias 0 : TIME_PRESENT48#alias 1 : TIME_PAST49#alias 2 : TIME_GOOD_FUTURE50#alias 3 : TIME_BAD_FUTURE5152// Global SFX53#alias 16 : SFX_G_SCOREADD54#alias 17 : SFX_G_SCORETOTAL55#alias 19 : SFX_G_SPECIALWARP5657// Soundtrack58#alias 0 : OST_JP5960// How long the Zone Complete jingle for each soundtrack is61#alias 299 : JP_ZONECOMPLETE_LENGTH62#alias 429 : US_ZONECOMPLETE_LENGTH6364// Callbacks Aliases65#alias 11 : CALLBACK_TRIAL_ENDED6667// Game Modes68#alias 1 : MODE_SAVEGAME69#alias 2 : MODE_TIMEATTACK70#alias 3 : MODE_TRIAL7172// Presentation List Stages73#alias 0 : STAGE_P_TITLE74#alias 2 : STAGE_P_TATTACK75#alias 11 : STAGE_P_DOWNLOADSCREEN7677// Engine States78#alias 8 : ENGINE_WAIT798081sub ObjectMain82switch Object.State83case ACTFINISH_INIT84// Setup initial values such as text positions8586// "SONIC GOT" is gonna come from the left, while all the other text slides in from the right87Object.LineXPos0 = -79988Object.LineXPos1 = 0x49089Object.LineXPos2 = 0x4E790Object.LineXPos3 = 0x52791Object.LineXPos4 = 0x57A9293#platform: Use_Standalone94Object.State = ACTFINISH_SLIDEIN95#endplatform9697// Calculate Time Bonus98switch Stage.Minutes99case 0100if Stage.Seconds < 30101// 0:00 - 0:29 - Wow that's fast, get a Mega Bonus!102Object.TimeBonus = 50000103else104if Stage.Seconds < 45105// 0:30 - 0:44106Object.TimeBonus = 10000107else108// 0:45 - 0:59109Object.TimeBonus = 5000110end if111end if112break113114case 1115if Stage.Seconds < 30116// 1:00 - 1:29117Object.TimeBonus = 4000118else119// 1:30 - 1:59120Object.TimeBonus = 3000121end if122break123124case 2125// 2:00 - 2:59126Object.TimeBonus = 2000127break128129case 3130// 3:00 - 3:59131Object.TimeBonus = 1000132break133134case 4135// 4:00 - 4:59136Object.TimeBonus = 500137break138139case 5140// 5:00 - 5:59141Object.TimeBonus = 100142break143144// Anything after that, you get nothing, you lose!145146end switch147148#platform: Use_Origins149// If you Time Over'd, no Time Bonus either of course150if game.timeOver != false151Object.TimeBonus = 0152end if153#endplatform154155// Ring Bonus calculation is far easier - just take the Player's ring count and multiply that by 100156Object.RingBonus = Player.Rings157Object.RingBonus *= 100158159#platform: Use_Origins160// Find the Present version of the current stage161Object.StagePosP = Stage.ListPos162switch HUD.CurrentTimePeriod163case TIME_PRESENT164break165166case TIME_PAST167Object.StagePosP--168break169170case TIME_GOOD_FUTURE171Object.StagePosP -= 2172break173174case TIME_BAD_FUTURE175Object.StagePosP -= 3176break177178end switch179180// If in a Mission, we don't need Act Results181if game.playMode == BOOT_PLAYMODE_MISSION182Object.State = ACTFINISH_NULL183// Back it up a bit184Stage.ListPos = Object.StagePosP185else186// In Boss Rush, we don't need Act Results either187if game.playMode == BOOT_PLAYMODE_BOSSRUSH188Object.State = ACTFINISH_NULL189else190// We're in a normal mode, let's just show the Results normally191Object.State = ACTFINISH_SLIDEIN192end if193end if194195// Send to the Engine how many Enemies have been destroyed so far196game.callbackParam0 = StageStatsUsabilityParam1 // Enemies destroyed by any means197game.callbackParam1 = StageStatsUsabilityParam2 // Enemies destroyed by rolling198game.callbackParam2 = 0199EngineCallback(NOTIFY_STATS_ENEMY)200201// Send to the Engine how many Rings the Player has202game.callbackParam0 = Player.Rings203EngineCallback(NOTIFY_STATS_RING)204205// Signal to the Engine that the current level is over206EngineCallback(NOTIFY_ACT_FINISH)207if Stage.PlayerListPos == PLAYER_KNUCKLES208if Good_Future == true209EngineCallback(NOTIFY_STATS_SAVE_FUTURE)210end if211end if212213// Reset loads of stuff...214StageStatsUsabilityParam1 = 0215StageStatsUsabilityParam2 = 0216StageStatsUsabilityParam3 = 0217StageStatsUsabilityParam4 = 0218StatsUsabilityParam1 = 0219StatsUsabilityParam2 = 0220StatsUsabilityParam3 = 0221StatsUsabilityParam4 = 0222#endplatform223break224225case ACTFINISH_SLIDEIN226227// Get a base Position of 60 pixels off centre screen228TempValue0 = Screen.CenterX229TempValue0 -= 68230231// Update position of the "SONIC GOT" line232if Object.LineXPos0 < TempValue0233Object.LineXPos0 += 16234if Object.LineXPos0 > TempValue0235// Past the max, enforce it236Object.LineXPos0 = TempValue0237238end if239else240// Just stay put for now241Object.LineXPos0 = TempValue0242end if243244// Update Position of the "THROUGH Zone" line245TempValue0 -= 32246if Object.LineXPos1 > TempValue0247Object.LineXPos1 -= 16248if Object.LineXPos1 < TempValue0249// Enforce a minimum250Object.LineXPos1 = TempValue0251end if252else253// Hold!254Object.LineXPos1 = TempValue0255end if256257// The Score, Ring, and Time bonuses are all around the same X Position258TempValue0 += 9259260// Score Line261if Object.LineXPos2 > TempValue0262Object.LineXPos2 -= 16263if Object.LineXPos2 < TempValue0264Object.LineXPos2 = TempValue0265end if266else267Object.LineXPos2 = TempValue0268end if269270// Ring Bonus Line271if Object.LineXPos3 > TempValue0272Object.LineXPos3 -= 16273if Object.LineXPos3 < TempValue0274Object.LineXPos3 = TempValue0275end if276else277Object.LineXPos3 = TempValue0278end if279280// Time Bonus line281if Object.LineXPos4 > TempValue0282Object.LineXPos4 -= 16283if Object.LineXPos4 < TempValue0284Object.LineXPos4 = TempValue0285end if286else287Object.LineXPos4 = TempValue0288289// Proceed with the Act Results, now that everything's in position290Object.State = ACTFINISH_DISPLAYTALLY291Object.Timer = 0292end if293break294295case ACTFINISH_DISPLAYTALLY296Object.Timer++297298// The two soundtracks have different Zone Complete lengths299if Options.Soundtrack == OST_JP300if Object.Timer > JP_ZONECOMPLETE_LENGTH301302// Proceed, now that the Jingle's over303304Object.Timer = 0305306Object.State = ACTFINISH_TALLYUP307308// See if the Paradise Found achievement should be unlocked309if Stage.PlayerListPos == PLAYER_SONIC_A // PLAYER_SONIC in origins310if HUD.CurrentTimePeriod == TIME_GOOD_FUTURE311if Stage.DebugMode == false312SetAchievement(2, 100)313end if314end if315end if316317end if318else319if Object.Timer > US_ZONECOMPLETE_LENGTH320321// It's now over, proceed with the Results322323Object.Timer = 0324325Object.State = ACTFINISH_TALLYUP326327// See if the Paradise Found achievement should be unlocked328if Stage.PlayerListPos == PLAYER_SONIC_A // PLAYER_SONIC in origins329if HUD.CurrentTimePeriod == TIME_GOOD_FUTURE330if Stage.DebugMode == false331SetAchievement(2, 100)332end if333end if334end if335336end if337end if338break339340case ACTFINISH_TALLYUP341342// Tally up the Ring Bonus and Time Bonus simultaneously343344if Object.RingBonus > 0345Object.RingBonus -= 100346Player.Score += 100347end if348349if Object.TimeBonus > 0350Object.TimeBonus -= 100351Player.Score += 100352end if353354// See if they're both over355356CheckGreater(Object.RingBonus, 0)357TempValue0 = CheckResult358CheckGreater(Object.TimeBonus, 0)359TempValue0 |= CheckResult360361if TempValue0 == true362363// If they're not done yet, then play the Tally SFX364365Object.Timer++366367if Object.Timer == 2368PlaySfx(SFX_G_SCOREADD, false)369Object.Timer = 0370end if371372else373374// They're both over now, go over now375376Object.State = ACTFINISH_DISPLAYFINAL377Object.Timer = 0378379// Ka-ching!380PlaySfx(SFX_G_SCORETOTAL, false)381382end if383break384385case ACTFINISH_DISPLAYFINAL386387// Pause for a moment, to let the Player see what they got388389Object.Timer++390391if Object.Timer == 160392#platform: Use_Origins393// Check if the player is replaying the stage from My Data & Rankings394if game.oneStageFlag != false395// If needed, let the Player retry the stage396Object.StagePosP = Stage.ListPos397game.callbackResult = -1 // Reset any callback result398game.callbackParam0 = 1 // 0 - Normal Retry, anything else - Show current and best time399game.callbackParam1 = Object.StagePosP // Get current stage400game.callbackParam2 = 0 // Unknown401EngineCallback(NOTIFY_STAGE_RETRY)402403Object.Timer = 0404// Go over to the holdover state and wait for the result405Object.State = ACTFINISH_HOLDOVERRESTART406else407// Nope, everything can be resumed normally from here408Object.Timer = 0409Object.State = ACTFINISH_FADEOUT410end if411#endplatform412413#platform: Use_Standalone414Object.Timer = 0415Object.State = ACTFINISH_FADEOUT416#endplatform417418// If the Player's a Blank Object, then that means they entered a Special Ring419if Player.Type == TypeName[Blank Object]420PlaySfx(SFX_G_SPECIALWARP, false)421end if422end if423break424425case ACTFINISH_FADEOUT426if Player.Type == TypeName[Blank Object]427// Special Stage!428Object.Timer += 8429// Use kinda-white to fade out, rather than black430SetScreenFade(208, 255, 224, Object.Timer)431432#platform: Use_Standalone433if Engine.TrialMode == true434if Object.Timer == 1016435EngineCallback(CALLBACK_TRIAL_ENDED)436end if437end if438#endplatform439440if Object.Timer == 1024441// Set Fade_Colour to be off-white (0xD0FFE0)442Fade_Colour = 208443Fade_Colour <<= 16444TempValue0 = 255445TempValue0 <<= 8446Fade_Colour += TempValue0447Fade_Colour += 224448449// Reset more stuff450Player.Direction = FACING_RIGHT451Object.Timer = 0452LampPost.Check = 0453454Good_Future_Count += Good_Future455Good_Future = false456457Transporter_Destroyed = false458MetalSonic_Destroyed = false459460if Stage.ActNo == 2461if Good_Future_Count < 2462Stage.ListPos++463end if464end if465466if Stage.ActNo == 3467Good_Future_Count = 0468end if469470// Get the Stage List Pos of the next stage's Present version471switch HUD.CurrentTimePeriod472case TIME_PRESENT473Stage.ListPos += 4474break475476case TIME_PAST477Stage.ListPos += 3478break479480case TIME_GOOD_FUTURE481Stage.ListPos += 2482break483484case TIME_BAD_FUTURE485Stage.ListPos++486break487488end switch489490if Options.GameMode == MODE_SAVEGAME491ArrayPos1 = Options.SaveSlot492ArrayPos1 <<= 3493SaveRAM[ArrayPos1] = Stage.PlayerListPos494ArrayPos1++495SaveRAM[ArrayPos1] = Player.Lives496ArrayPos1++497SaveRAM[ArrayPos1] = Player.Score498ArrayPos1++499SaveRAM[ArrayPos1] = Stage.ListPos500// Add 81 to the Stage List Pos to signify that it's a Special Stage save501SaveRAM[ArrayPos1] += 81502ArrayPos1++503SaveRAM[ArrayPos1] = SpecialStage.TimeStones504ArrayPos1++505SaveRAM[ArrayPos1] = SpecialStage.ListPos506ArrayPos1++507SaveRAM[ArrayPos1] = Player.ScoreBonus508509ArrayPos1++510SaveRAM[ArrayPos1] = MetalSonic_List511SaveRAM[ArrayPos1] <<= 16512SaveRAM[ArrayPos1] += Good_Future_List513514WriteSaveRAM()515end if516517#platform: Use_Origins518recScore = Player.Score519SpecialStage.NextZone = Stage.ListPos520// Origins got the SPECIAL_STAGE alias swapped with BONUS_STAGE521Stage.ActiveList = 3522Stage.ListPos = SpecialStage.ListPos523524// Check if the player is replaying the stage from My Data & Rankings525if game.oneStageFlag != false526Stage.ActiveList = REGULAR_STAGE527Stage.ListPos = Object.StagePosP528529Object.State = ACTFINISH_WAITFORCALLBACK530else531TempValue0 = Engine.TrialMode532if Stage.ListPos >= Stage.ListSize533TempValue0 = true534end if535536if TempValue0 == false537LoadStage()538else539Stage.ActiveList = PRESENTATION_STAGE540Stage.ListPos = STAGE_P_TITLE541542Engine.State = ENGINE_WAIT543end if544end if545#endplatform546547#platform: Use_Standalone548SpecialStage.NextZone = Stage.ListPos549Stage.ListPos = SpecialStage.ListPos550Stage.ActiveList = SPECIAL_STAGE551552TempValue0 = Engine.TrialMode553if Stage.ListPos >= Stage.ListSize554TempValue0 = true555end if556557if TempValue0 == false558LoadStage()559else560Stage.ActiveList = PRESENTATION_STAGE561Stage.ListPos = STAGE_P_TITLE562LoadStage()563end if564#endplatform565end if566else567// We didn't enter a Special Ring, we're staying in normal stages568Object.Timer += 4569SetScreenFade(0, 0, 0, Object.Timer)570571if Engine.TrialMode == true572if Object.Timer == 380573EngineCallback(CALLBACK_TRIAL_ENDED)574end if575end if576577if Object.Timer == 384578// Set Fade_Colour to be black579Fade_Colour = 0580581// Reset some cool values582Object.Timer = 0583LampPost.Check = 0584585Player.Direction = FACING_RIGHT586587Good_Future_Count += Good_Future588Good_Future = false589590Transporter_Destroyed = false591MetalSonic_Destroyed = false592593if Stage.ActNo == 2594if Good_Future_Count < 2595Stage.ListPos++596end if597end if598599if Stage.ActNo == 3600Good_Future_Count = 0601end if602603// Get the Stage ID of the next stage's starting version604switch HUD.CurrentTimePeriod605case TIME_PRESENT606Stage.ListPos += 4607break608609case TIME_PAST610Stage.ListPos += 3611break612613case TIME_GOOD_FUTURE614Stage.ListPos += 2615break616617case TIME_BAD_FUTURE618Stage.ListPos++619break620621end switch622623if Options.GameMode == MODE_SAVEGAME624ArrayPos1 = Options.SaveSlot625ArrayPos1 <<= 3626SaveRAM[ArrayPos1] = Stage.PlayerListPos627ArrayPos1++628SaveRAM[ArrayPos1] = Player.Lives629ArrayPos1++630SaveRAM[ArrayPos1] = Player.Score631ArrayPos1++632SaveRAM[ArrayPos1] = Stage.ListPos633SaveRAM[ArrayPos1]++634ArrayPos1++635SaveRAM[ArrayPos1] = SpecialStage.TimeStones636ArrayPos1++637SaveRAM[ArrayPos1] = SpecialStage.ListPos638ArrayPos1++639SaveRAM[ArrayPos1] = Player.ScoreBonus640641ArrayPos1++642SaveRAM[ArrayPos1] = MetalSonic_List643SaveRAM[ArrayPos1] <<= 16644SaveRAM[ArrayPos1] += Good_Future_List645646WriteSaveRAM()647end if648649#platform: Use_Origins650recScore = Player.Score651652// Check if the player is replaying the stage from My Data & Rankings653if game.oneStageFlag != false654Stage.ActiveList = REGULAR_STAGE655Stage.ListPos = Object.StagePosP656Object.State = ACTFINISH_WAITFORCALLBACK657else658if Options.GameMode == MODE_TIMEATTACK659if Stage.PlayerListPos == PLAYER_SONIC660// Get the act number661TempValue0 = Stage.ListPos662TempValue0 %= 10663TempValue0 >>= 2664665// Get the current Round666TempValue1 = Stage.ListPos667TempValue1 /= 10668TempValue1 *= 3669670// Add them together to get the stage ID671TempValue0 += TempValue1672TempValue0++673674// And now, tally up all the time675676TempValue1 = Stage.Seconds677TempValue1 *= 100678679TempValue2 = Stage.Minutes680TempValue2 *= 6000681682TempValue1 += TempValue2683TempValue1 += Stage.MilliSeconds684685// Enter all that data into the Leaderboard, make your mark on the world!686SetLeaderboard(TempValue0, TempValue1)687end if688689// Tally up all the results, into one single large number690TimeAttack.Result = Stage.Seconds691TimeAttack.Result *= 100692693TempValue0 = Stage.Minutes694TempValue0 *= 6000695696TimeAttack.Result += TempValue0697TimeAttack.Result += Stage.MilliSeconds698699Stage.ActiveList = PRESENTATION_STAGE700Stage.ListPos = STAGE_P_TATTACK701702LoadStage()703else704// Don't lie to me SEGA, there was a demo for origins planned!!!705if Options.GameMode < MODE_TRIAL706TempValue0 = Engine.TrialMode707else708TempValue0 = false709end if710711if Stage.ListPos >= Stage.ListSize712TempValue0 = true713end if714715if TempValue0 == false716LoadStage()717else718if Engine.TrialMode == true719Stage.ActiveList = PRESENTATION_STAGE720Stage.ListPos = STAGE_P_DOWNLOADSCREEN721LoadStage()722else723Engine.State = ENGINE_WAIT724end if725end if726end if727end if728#endplatform729730#platform: Use_Standalone731// this check can only happen in mobile732if Options.GameMode == MODE_TRIAL733// Set Trial Recoerds734TimeAttack.Result = Stage.Seconds735TimeAttack.Result *= 100736737TempValue0 = Stage.Minutes738TempValue0 *= 6000739740TimeAttack.Result += TempValue0741TimeAttack.Result += Stage.MilliSeconds742743switch TimeAttack.Round744case 0745if TimeAttack.Result < SaveRAM[48] // PPZ Record746SaveRAM[48] = TimeAttack.Result747end if748break749case 1750if TimeAttack.Result < SaveRAM[49] // QQZ Record751SaveRAM[49] = TimeAttack.Result752end if753break754end switch755WriteSaveRAM()756Stage.ActiveList = PRESENTATION_STAGE757Stage.ListPos = STAGE_P_DOWNLOADSCREEN758end if759760if Options.GameMode == MODE_TIMEATTACK761TimeAttack.Result = Stage.Seconds762TimeAttack.Result *= 100763TempValue0 = Stage.Minutes764TempValue0 *= 6000765TimeAttack.Result += TempValue0766TimeAttack.Result += Stage.MilliSeconds767Stage.ActiveList = PRESENTATION_STAGE768Stage.ListPos = STAGE_P_TATTACK769LoadStage()770else771// this check can only happen in mobile772if Options.GameMode < MODE_TRIAL773TempValue0 = Engine.TrialMode774else775TempValue0 = false776end if777778if Stage.ListPos >= Stage.ListSize // tldr - check if you are playing a trial779TempValue0 = true780end if781782if TempValue0 == false783LoadStage()784else785Stage.ActiveList = PRESENTATION_STAGE786Stage.ListPos = STAGE_P_TITLE787LoadStage()788end if789end if790#endplatform791end if792end if793break794795#platform: Use_Origins796case ACTFINISH_HOLDOVERRESTART797// Wait and see, does the Player want to restart the stage?798if game.callbackResult >= 0799Object.Timer = 0800Object.State = ACTFINISH_FADEOUT801end if802break803804case ACTFINISH_WAITFORCALLBACK805SetScreenFade(0, 0, 0, 255)806break807#endplatform808end switch809end sub810811812sub ObjectDraw813// First two lines are dependant on if Sonic made a Good Future or not814// Regardless of the path taken here, TempValue0 afterwards should be where the "Zone" text is drawn,815// in order for the following code to be done correctly816if Good_Future == false817// No Good Future here, just do the normal results818819// First line - "Sonic GOT"820DrawSpriteScreenXY(0, Object.LineXPos0, 65)821822// Second line - "THROUGH"823DrawSpriteScreenXY(4, Object.LineXPos1, 89)824825// To the right of that, draw "Zone"826TempValue0 = Object.LineXPos1827TempValue0 += 128828DrawSpriteScreenXY(5, TempValue0, 89)829else830// We made a Good Future!831// Let's used the altered version of the text to let the Player know832833// Draw "SONIC MADE A GOOD" for the first line834// (For Knux, this is just "MADE A GOOD", with his name being drawn separately down below)835DrawSpriteScreenXY(20, Object.LineXPos0, 65)836837#platform: Use_Origins838if Stage.PlayerListPos == PLAYER_KNUCKLES839// "KNUCKLES"840DrawSpriteScreenXY(22, Object.XPos, 65)841end if842#endplatform843844// Then, comes "FUTURE IN"845DrawSpriteScreenXY(21, Object.LineXPos1, 89)846847// And to the right of that, draw the "Zone" text848TempValue0 = Object.LineXPos1849TempValue0 += 140850DrawSpriteScreenXY(5, TempValue0, 89)851end if852853// From where the "Zone" text was drawn, draw the Act Number next to it854TempValue0 += 64855DrawSpriteScreenXY(Stage.ActNo, TempValue0, 89)856857// Draw the Score text858DrawSpriteScreenXY(6, Object.LineXPos2, 121)859860// And then to the right of that, draw the Score numbers861TempValue0 = Object.LineXPos2862TempValue0 += 163863DrawNumbers(10, TempValue0, 121, Player.Score, 6, 8, false)864865// The fourth line holds the Rings text866DrawSpriteScreenXY(7, Object.LineXPos3, 145)867868// Append "Bonus" to the end of that Rings text869TempValue0 = Object.LineXPos3870TempValue0 += 40871DrawSpriteScreenXY(9, TempValue0, 145)872873// And on the same line, draw the Ring Bonus874TempValue0 += 123875DrawNumbers(10, TempValue0, 145, Object.RingBonus, 5, 8, false)876877// The fifth line holds the Time Bonus878879// So, draw the "Time" sprite first880DrawSpriteScreenXY(8, Object.LineXPos4, 169)881882// And then similarly, append "Bonus" to that883TempValue0 = Object.LineXPos4884TempValue0 += 40885DrawSpriteScreenXY(9, TempValue0, 169)886887//And now, draw the Time Bonus numbers at the end of the line888TempValue0 += 123889DrawNumbers(10, TempValue0, 169, Object.TimeBonus, 5, 8, false)890end sub891892893sub ObjectStartup894// Load the appropriate sheet based on the current character895if Stage.PlayerListPos == PLAYER_SONIC_A896LoadSpriteSheet("Global/Display.gif")897end if898if Stage.PlayerListPos == PLAYER_TAILS_A899LoadSpriteSheet("Global/Display_t.gif")900end if901902#platform: Use_Origins903if Stage.PlayerListPos == PLAYER_KNUCKLES904LoadSpriteSheet("Global/Display_k.gif")905end if906if Stage.PlayerListPos == PLAYER_AMY907LoadSpriteSheet("Global/Display_a.gif")908end if909// Act Results Frames910911if Stage.PlayerListPos == PLAYER_KNUCKLES912// 0 - "KNUCKLES GOT"913SpriteFrame(-27, 0, 191, 16, 35, 257)914else915// 0 - "SONIC GOT"916SpriteFrame(0, 0, 136, 16, 0, 206)917end if918#endplatform919920#platform: Use_Standalone921// 0 - "SONIC GOT"922SpriteFrame(0, 0, 136, 16, 0, 206)923#endplatform924925926// 1-3 - Act Numbers927SpriteFrame(0, 0, 8, 16, 194, 223)928SpriteFrame(0, 0, 16, 16, 203, 223)929SpriteFrame(0, 0, 16, 16, 220, 223)930931// 4 - "THROUGH"932SpriteFrame(0, 0, 113, 16, 137, 206)933934// 5 - "Zone"935SpriteFrame(0, 0, 56, 16, 137, 223)936937// 6 - Score text938SpriteFrame(0, 0, 39, 11, 1, 1)939940// 7 - Rings text941SpriteFrame(0, 0, 31, 11, 1, 33)942943// 8 - Time text944SpriteFrame(0, 0, 31, 11, 1, 17)945946// 9 - Bonus text947SpriteFrame(0, 0, 41, 11, 1, 107)948949// 10-19 - Numbers950SpriteFrame(0, 0, 8, 11, 1, 50)951SpriteFrame(0, 0, 8, 11, 10, 50)952SpriteFrame(0, 0, 8, 11, 19, 50)953SpriteFrame(0, 0, 8, 11, 28, 50)954SpriteFrame(0, 0, 8, 11, 1, 62)955SpriteFrame(0, 0, 8, 11, 10, 62)956SpriteFrame(0, 0, 8, 11, 19, 62)957SpriteFrame(0, 0, 8, 11, 28, 62)958SpriteFrame(0, 0, 8, 11, 1, 74)959SpriteFrame(0, 0, 8, 11, 10, 74)960961#platform: Use_Standalone962// 20 - "SONIC MADE A GOOD"963SpriteFrame(-60, 0, 256, 16, 0, 240)964965// 21 - "FUTURE IN"966SpriteFrame(-12, 0, 136, 16, 0, 223)967#endplatform968969#platform: Use_Origins970if Stage.PlayerListPos == PLAYER_KNUCKLES971// 20 - " MADE A GOOD"972SpriteFrame(-41, 0, 256, 16, 0, 240)973// 21 - "FUTURE IN"974SpriteFrame(-12, 0, 136, 16, 0, 223)975// 22 - "KNUCKLES"976SpriteFrame(-79, 0, 127, 16, 35, 257)977else978// 20 - "SONIC MADE A GOOD"979SpriteFrame(-60, 0, 256, 16, 0, 240)980// 21 - "FUTURE IN"981SpriteFrame(-12, 0, 136, 16, 0, 223)982end if983984#endplatform985end sub986987988// ========================989// Editor Subs990// ========================991992sub RSDKDraw993DrawSprite(0)994end sub995996997sub RSDKLoad998LoadSpriteSheet("Global/Display.gif")999SpriteFrame(0, 0, 113, 16, 137, 206)10001001SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")1002end sub10031004