Path: blob/master/Sonic 2/Scripts/2PVS/GameResults.txt
1482 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Game Results Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.timer12private alias object.value1 : object.iconSheet13private alias object.value2 : object.textSheet14private alias object.value3 : object.round1Results15private alias object.value4 : object.round2Results16private alias object.value5 : object.round3Results17private alias object.value6 : object.wins1P18private alias object.value7 : object.wins2P19private alias object.value8 : object.overallWinner20private alias object.value9 : object.numberPos1P.x21private alias object.value10 : object.numberPos2P.x22private alias object.value11 : object.drawPos.x23private alias object.value12 : object.drawPos.y24private alias object.value13 : object.menuID2526// States27private alias 0 : GAMERESULTS_SETUP28private alias 1 : GAMERESULTS_WAITING29private alias 2 : GAMERESULTS_SHOWRESULTS30private alias 3 : GAMERESULTS_FADEOUT3132// Achievement Aliases33private alias 8 : ACHIEVEMENT_HEAD2HEAD343536// ========================37// Function Declarations38// ========================3940reserve function GameResults_DrawResults414243// ========================44// Function Definition45// ========================4647private function GameResults_DrawResults48object.round1Results = saveRAM[arrayPos0]49arrayPos0++50object.round2Results = saveRAM[arrayPos0]51arrayPos0++52object.round3Results = saveRAM[arrayPos0]53arrayPos0 += 25455// Wins 1P56temp2 = object.round1Results57temp2 &= 1558// Wins 2P59temp3 = object.round1Results60temp3 >>= 461DrawNumbers(4, object.numberPos1P.x, object.drawPos.y, temp2, 1, 8, false)62DrawNumbers(4, object.numberPos2P.x, object.drawPos.y, temp3, 1, 8, false)6364if temp2 == temp365DrawSpriteScreenXY(3, object.drawPos.x, object.drawPos.y)66else67if temp2 > temp368DrawSpriteScreenXY(1, object.drawPos.x, object.drawPos.y)69else70DrawSpriteScreenXY(2, object.drawPos.x, object.drawPos.y)71end if72end if73object.drawPos.y += 87475// Wins 1P76temp2 = object.round2Results77temp2 &= 1578// Wins 2P79temp3 = object.round2Results80temp3 >>= 481DrawNumbers(4, object.numberPos1P.x, object.drawPos.y, temp2, 1, 8, false)82DrawNumbers(4, object.numberPos2P.x, object.drawPos.y, temp3, 1, 8, false)8384if temp2 == temp385DrawSpriteScreenXY(3, object.drawPos.x, object.drawPos.y)86else87if temp2 > temp388DrawSpriteScreenXY(1, object.drawPos.x, object.drawPos.y)89else90DrawSpriteScreenXY(2, object.drawPos.x, object.drawPos.y)91end if92end if9394object.drawPos.y += 895if object.round3Results > 096// Wins 1P97temp2 = object.round3Results98temp2 &= 1599// Wins 2P100temp3 = object.round3Results101temp3 >>= 4102DrawNumbers(4, object.numberPos1P.x, object.drawPos.y, temp2, 1, 8, false)103DrawNumbers(4, object.numberPos2P.x, object.drawPos.y, temp3, 1, 8, false)104105if temp2 == temp3106DrawSpriteScreenXY(3, object.drawPos.x, object.drawPos.y)107else108if temp2 > temp3109DrawSpriteScreenXY(1, object.drawPos.x, object.drawPos.y)110else111DrawSpriteScreenXY(2, object.drawPos.x, object.drawPos.y)112end if113end if114end if115object.drawPos.y += 16116end function117118119// ========================120// Events121// ========================122123event ObjectUpdate124switch object.state125case GAMERESULTS_SETUP126SetupMenu(MENU_1, 0, 3, 0)127SetupMenu(MENU_2, 0, 3, 0)128options.vsMode = false129130LoadSpriteSheet("LevelSelect/Icons.gif")131object.iconSheet = object.spriteSheet132133LoadSpriteSheet("LevelSelect/Text.gif")134object.textSheet = object.spriteSheet135136menu1.selection = -1137138temp0 = 0139temp1 = vs.gameLength140if temp1 > 4141arrayPos0 = 0x400142AddMenuEntry(MENU_1, "@@@@@@@@@@@@@WINS@@@@@@@@@@@@@@WINS", true)143AddMenuEntry(MENU_1, "@", true)144object.menuID = MENU_1145146while temp0 < vs.gameLength147object.round1Results = saveRAM[arrayPos0]148arrayPos0++149object.round2Results = saveRAM[arrayPos0]150arrayPos0++151object.round3Results = saveRAM[arrayPos0]152arrayPos0++153temp2 = saveRAM[arrayPos0]154arrayPos0++155156temp3 = object.round1Results157temp3 &= 15158temp4 = object.round1Results159temp4 >>= 4160if temp3 != temp4161if temp3 > temp4162object.wins1P++163else164object.wins2P++165end if166end if167168temp3 = object.round2Results169temp3 &= 15170temp4 = object.round2Results171temp4 >>= 4172if temp3 != temp4173if temp3 > temp4174object.wins1P++175else176object.wins2P++177end if178end if179180temp3 = object.round3Results181temp3 &= 15182temp4 = object.round3Results183temp4 >>= 4184if temp3 != temp4185if temp3 > temp4186object.wins1P++187else188object.wins2P++189end if190end if191192switch temp2193case 0194AddMenuEntry(object.menuID, "@EHZ 1*@@:", true)195AddMenuEntry(object.menuID, "@@@@ 2*@@:", true)196if object.round3Results > 0197AddMenuEntry(object.menuID, "@@@@ SS@@:", true)198else199AddMenuEntry(object.menuID, "@@@@ SS@NO GAME", true)200end if201break202203case 1204AddMenuEntry(object.menuID, "@CPZ 1*@@:", true)205AddMenuEntry(object.menuID, "@@@@ 2*@@:", true)206if object.round3Results > 0207AddMenuEntry(object.menuID, "@@@@ SS@@:", true)208else209AddMenuEntry(object.menuID, "@@@@ SS@NO GAME", true)210end if211break212213case 2214AddMenuEntry(object.menuID, "@ARZ 1*@@:", true)215AddMenuEntry(object.menuID, "@@@@ 2*@@:", true)216if object.round3Results > 0217AddMenuEntry(object.menuID, "@@@@ SS@@:", true)218else219AddMenuEntry(object.menuID, "@@@@ SS@NO GAME", true)220end if221break222223case 3224AddMenuEntry(object.menuID, "@CNZ 1*@@:", true)225AddMenuEntry(object.menuID, "@@@@ 2*@@:", true)226if object.round3Results > 0227AddMenuEntry(object.menuID, "@@@@ SS@@:", true)228else229AddMenuEntry(object.menuID, "@@@@ SS@NO GAME", true)230end if231break232233case 4234AddMenuEntry(object.menuID, "@HTZ 1*@@:", true)235AddMenuEntry(object.menuID, "@@@@ 2*@@:", true)236if object.round3Results > 0237AddMenuEntry(object.menuID, "@@@@ SS@@:", true)238else239AddMenuEntry(object.menuID, "@@@@ SS@NO GAME", true)240end if241break242243case 5244AddMenuEntry(object.menuID, "@MCZ 1*@@:", true)245AddMenuEntry(object.menuID, "@@@@ 2*@@:", true)246if object.round3Results > 0247AddMenuEntry(object.menuID, "@@@@ SS@@:", true)248else249AddMenuEntry(object.menuID, "@@@@ SS@NO GAME", true)250end if251break252253case 6254AddMenuEntry(object.menuID, "@OOZ 1*@@:", true)255AddMenuEntry(object.menuID, "@@@@ 2*@@:", true)256if object.round3Results > 0257AddMenuEntry(object.menuID, "@@@@ SS@@:", true)258else259AddMenuEntry(object.menuID, "@@@@ SS@NO GAME", true)260end if261break262263case 7264AddMenuEntry(object.menuID, "@S.S 1*@@:", true)265AddMenuEntry(object.menuID, "@@@@ 2*@@:", true)266if object.round3Results > 0267AddMenuEntry(object.menuID, "@@@@ 3*@@:", true)268else269AddMenuEntry(object.menuID, "@@@@ 3*@NO GAME", true)270end if271break272end switch273274AddMenuEntry(object.menuID, "@", true)275temp0++276if temp0 == 4277object.menuID = MENU_2278end if279loop280281while temp0 < 4282AddMenuEntry(MENU_1, "", true)283AddMenuEntry(MENU_1, "", true)284AddMenuEntry(MENU_1, "", true)285AddMenuEntry(MENU_1, "", true)286temp0++287loop288else289arrayPos0 = 0x400290AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WINS", true)291AddMenuEntry(MENU_1, "@", true)292293while temp0 < temp1294object.round1Results = saveRAM[arrayPos0]295arrayPos0++296object.round2Results = saveRAM[arrayPos0]297arrayPos0++298object.round3Results = saveRAM[arrayPos0]299arrayPos0++300temp2 = saveRAM[arrayPos0]301arrayPos0++302303temp3 = object.round1Results304temp3 &= 15305temp4 = object.round1Results306temp4 >>= 4307if temp3 != temp4308if temp3 > temp4309object.wins1P++310else311object.wins2P++312end if313end if314315temp3 = object.round2Results316temp3 &= 15317temp4 = object.round2Results318temp4 >>= 4319if temp3 != temp4320if temp3 > temp4321object.wins1P++322else323object.wins2P++324end if325end if326327temp3 = object.round3Results328temp3 &= 15329temp4 = object.round3Results330temp4 >>= 4331if temp3 != temp4332if temp3 > temp4333object.wins1P++334else335object.wins2P++336end if337end if338339switch temp2340case 0341AddMenuEntry(MENU_1, "@@EMERALD HILL *1*@@@@:", true)342AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ *2*@@@@:", true)343if object.round3Results > 0344AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@@@:", true)345else346AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@NO GAME", true)347end if348break349350case 1351AddMenuEntry(MENU_1, "CHEMICAL PLANT *1*@@@@:", true)352AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ *2*@@@@:", true)353if object.round3Results > 0354AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@@@:", true)355else356AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@NO GAME", true)357end if358break359360case 2361AddMenuEntry(MENU_1, "@@AQUATIC RUIN *1*@@@@:", true)362AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ *2*@@@@:", true)363if object.round3Results > 0364AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@@@:", true)365else366AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@NO GAME", true)367end if368break369370case 3371AddMenuEntry(MENU_1, "@@CASINO NIGHT *1*@@@@:", true)372AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ *2*@@@@:", true)373if object.round3Results > 0374AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@@@:", true)375else376AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@NO GAME", true)377end if378break379380case 4381AddMenuEntry(MENU_1, "@@@@@@HILL TOP *1*@@@@:", true)382AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ *2*@@@@:", true)383if object.round3Results > 0384AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@@@:", true)385else386AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@NO GAME", true)387end if388break389390case 5391AddMenuEntry(MENU_1, "@@@MYSTIC CAVE *1*@@@@:", true)392AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ *2*@@@@:", true)393if object.round3Results > 0394AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@@@:", true)395else396AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@NO GAME", true)397end if398break399400case 6401AddMenuEntry(MENU_1, "@@@@@OIL OCEAN *1*@@@@:", true)402AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ *2*@@@@:", true)403if object.round3Results > 0404AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@@@:", true)405else406AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ S.S@@NO GAME", true)407end if408break409410case 7411AddMenuEntry(MENU_1, "@SPECIAL STAGE *1*@@@@:", true)412AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ *2*@@@@:", true)413if object.round3Results > 0414AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ *3*@@@@:", true)415else416AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@ *3*@@NO GAME", true)417end if418break419end switch420421AddMenuEntry(MENU_1, "@", true)422temp0++423loop424425while temp0 < 4426AddMenuEntry(MENU_1, "@", true)427AddMenuEntry(MENU_1, "@", true)428AddMenuEntry(MENU_1, "@", true)429AddMenuEntry(MENU_1, "@", true)430temp0++431loop432end if433434AddMenuEntry(MENU_1, "@@@@@@@* TOTAL *@@@@@@:", true)435AddMenuEntry(MENU_1, "@", true)436AddMenuEntry(MENU_1, "@", true)437AddMenuEntry(MENU_1, "@", true)438AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@THE GAME", true)439440if object.wins1P == object.wins2P441object.overallWinner = 18442else443// Here, we grant the "Head 2 Head" Achievement if we won444// (The Achievement's description may say you need to beat a friend, but thankfully it isn't really that way)445446if object.wins1P > object.wins2P447object.overallWinner = 14448if vs.playerID == 0449CallNativeFunction2(SetAchievement, ACHIEVEMENT_HEAD2HEAD, 100)450end if451else452object.overallWinner = 16453if vs.playerID == 1454CallNativeFunction2(SetAchievement, ACHIEVEMENT_HEAD2HEAD, 100)455end if456end if457end if458object.state++459break460461case GAMERESULTS_WAITING462object.state++463break464465case GAMERESULTS_SHOWRESULTS466if object.timer < 60467object.timer++468else469CheckTouchRect(0, 0, screen.xsize, screen.ysize)470if keyPress[0].start == true471checkResult = 0472end if473474if keyPress[0].buttonA == true475checkResult = 0476end if477478if keyPress[0].buttonB == true479checkResult = 0480end if481482if keyPress[0].buttonC == true483checkResult = 0484end if485486if checkResult > -1487object.timer = 0488object.state = GAMERESULTS_FADEOUT489end if490end if491break492493case GAMERESULTS_FADEOUT494if object.timer < 256495music.volume -= 10496object.timer += 16497SetScreenFade(0x00, 0x00, 0x00, object.timer)498else499StopMusic()500CallNativeFunction(Disconnect2PVS)501#platform: USE_STANDALONE502engine.state = 8503#endplatform504#platform: USE_ORIGINS505stage.activeList = PRESENTATION_STAGE506stage.listPos = 0507LoadStage()508#endplatform509SetScreenFade(0x00, 0x00, 0x00, 0xFF)510end if511break512513end switch514515object.animationTimer++516object.animationTimer &= 15517end event518519520event ObjectDraw521object.spriteSheet = object.iconSheet522DrawSpriteScreenXY(0, screen.xcenter, 17)523524arrayPos0 = 0x400525if vs.gameLength <= 4526object.numberPos1P.x = screen.xcenter527object.numberPos1P.x += 16528object.numberPos2P.x = object.numberPos1P.x529object.numberPos2P.x += 32530object.drawPos.x = screen.xcenter531object.drawPos.x += 120532object.drawPos.y = 57533534temp0 = 0535while temp0 < vs.gameLength536CallFunction(GameResults_DrawResults)537temp0++538loop539else540object.numberPos1P.x = screen.xcenter541object.numberPos1P.x -= 80542object.numberPos2P.x = object.numberPos1P.x543object.numberPos2P.x += 16544object.drawPos.x = screen.xcenter545object.drawPos.x -= 24546object.drawPos.y = 57547548temp0 = 0549while temp0 < 4550CallFunction(GameResults_DrawResults)551temp0++552loop553554object.numberPos1P.x = screen.xcenter555object.numberPos1P.x += 64556object.numberPos2P.x = object.numberPos1P.x557object.numberPos2P.x += 16558object.drawPos.x = screen.xcenter559object.drawPos.x += 120560object.drawPos.y = 57561while temp0 < vs.gameLength562CallFunction(GameResults_DrawResults)563temp0++564loop565end if566567object.numberPos1P.x = screen.xcenter568object.numberPos1P.x += 24569object.numberPos2P.x = object.numberPos1P.x570object.numberPos2P.x += 24571DrawNumbers(4, object.numberPos1P.x, 185, object.wins1P, 2, 8, true)572DrawNumbers(4, object.numberPos2P.x, 185, object.wins2P, 2, 8, true)573574temp0 = object.animationTimer575temp0 >>= 3576temp0 += object.overallWinner577DrawSpriteScreenXY(temp0, screen.xcenter, 198)578579object.spriteSheet = object.textSheet580temp0 = screen.xcenter581temp0 -= 144582DrawMenu(MENU_1, temp0, 40)583584if vs.gameLength > 4585DrawMenu(MENU_2, screen.xcenter, 56)586end if587end event588589590event ObjectStartup591LoadSpriteSheet("LevelSelect/Icons.gif")592LoadSpriteSheet("LevelSelect/Text.gif")593594SpriteFrame(-48, 0, 96, 14, 1, 136) // RESULT - #0595SpriteFrame(-8, 0, 16, 7, 98, 136) // 1P - #1596SpriteFrame(-8, 0, 16, 7, 115, 136) // 2P - #2597SpriteFrame(-16, 0, 32, 7, 132, 136) // TIED - #3598SpriteFrame(0, 0, 8, 7, 175, 140) // 0 - #4599SpriteFrame(0, 0, 8, 7, 183, 140) // 1 - #5600SpriteFrame(0, 0, 8, 7, 191, 140) // 2 - #6601SpriteFrame(0, 0, 8, 7, 199, 140) // 3 - #7602SpriteFrame(0, 0, 8, 7, 207, 140) // 4 - #8603SpriteFrame(0, 0, 8, 7, 215, 140) // 5 - #9604SpriteFrame(0, 0, 8, 7, 223, 140) // 6 - #10605SpriteFrame(0, 0, 8, 7, 231, 140) // 7 - #11606SpriteFrame(0, 0, 8, 7, 239, 140) // 8 - #12607SpriteFrame(0, 0, 8, 7, 247, 140) // 9 - #13608SpriteFrame(-47, 0, 91, 12, 1, 110) // 1P WINS - #14609SpriteFrame(-47, 0, 91, 12, 1, 123) // 1P WINS (flashing) - #15610SpriteFrame(-47, 0, 91, 12, 93, 110) // 2P WINS - #16611SpriteFrame(-47, 0, 91, 12, 93, 123) // 2P WINS (flashing) - #17612SpriteFrame(-22, 0, 44, 12, 1, 385) // TIED - #18613SpriteFrame(-22, 0, 44, 12, 1, 398) // TIED (flashing) - #19614615// Game Results objects aren't even placed in the scene normally, but if one is then make it active616foreach (TypeName[Game Results], arrayPos0, ALL_ENTITIES)617object[arrayPos0].priority = PRIORITY_ACTIVE618619#platform: USE_DECOMP620// Hacky fix for this loading in place of the complete save select on an Origins RSDK621// -> This happens because, when adding the 2P VS Menu 4 object, the Origins folks added it into the622// middle of the object list, therefore offsetting the IDs all objects after it.623// That included the Stage Menu object (formerly ID 12), where it got bumped up and now its scene624// is comprised of a Game Results object (current ID 12) instead.625if stage.activeList == REGULAR_STAGE626// Just turn the object into a Stage Menu object, that way it'll be caught by the Stage Menu object's Startup627// (Do note, ID-wise the Stage Menu comes after this object and their Startups are run in that order too so we don't gotta do any more than this here)628object[arrayPos0].type = TypeName[Stage Menu]629end if630#endplatform631632next633end event634635636// ========================637// Editor Events638// ========================639640event RSDKDraw641DrawSprite(0)642end event643644645event RSDKLoad646LoadSpriteSheet("LevelSelect/Icons.gif")647SpriteFrame(-48, 0, 96, 14, 1, 136) // RESULT - #0648649SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")650end event651652653