Path: blob/master/Sonic 2/Scripts/2PVS/ActResults.txt
1487 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Act 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.scoreWinner15private alias object.value4 : object.timeWinner16private alias object.value5 : object.ringsWinner17private alias object.value6 : object.totalRingsWinner18private alias object.value7 : object.itemsWinner19private alias object.value8 : object.millisecs1P20private alias object.value9 : object.millisecs2P21private alias object.value10 : object.secs1P22private alias object.value11 : object.secs2P23private alias object.value12 : object.mins1P24private alias object.value13 : object.mins2P25private alias object.value14 : object.rings1P26private alias object.value15 : object.rings2P27private alias object.value16 : object.totalRings1P28private alias object.value17 : object.totalRings2P29private alias object.value18 : object.items1P30private alias object.value19 : object.items2P31private alias object.value20 : object.wins1P32private alias object.value21 : object.wins2P33private alias object.value22 : object.overallWinner34private alias object.value23 : object.actID35private alias object.value24 : object.zoneID36private alias object.value25 : object.score1P37private alias object.value26 : object.score2P3839// States40private alias 0 : ACTRESULTS_SETUP41private alias 1 : ACTRESULTS_WAITING42private alias 2 : ACTRESULTS_CALCRESULTS43private alias 3 : ACTRESULTS_SHOWRESULTS44private alias 4 : ACTRESULTS_LOADSTAGE45private alias 5 : ACTRESULTS_FADEOUT4647// 2PVSSetup Aliases48private alias object.value0 : 2PVSSetup.timer4950// 2PVSSetup States51private alias 1 : 2PVSSETUP_FADEIN52private alias 2 : 2PVSSETUP_MENUACTIVE53private alias 3 : 2PVSSETUP_TOREGULARSTAGE54private alias 4 : 2PVSSETUP_TOSPECIALSTAGE555657// ========================58// Function Declarations59// ========================6061reserve function ActResults_CheckTieBreaker626364// ========================65// Function Defintions66// ========================6768// (This function is used by SS Single Result too)69public function ActResults_CheckTieBreaker70arrayPos0 = vs.match71arrayPos0 <<= 272arrayPos0 += 0x40073// Wins 1P74temp0 = saveRAM[arrayPos0]75temp0 &= 1576// Wins 2P77temp1 = saveRAM[arrayPos0]78temp1 >>= 47980if temp0 == temp181temp0 = 082temp1 = 083else84if temp0 > temp185temp0 = 1 // 1P Win Count86temp1 = 0 // 2P Win Count87else88temp0 = 089temp1 = 190end if91end if92arrayPos0++9394// Wins 1P95temp2 = saveRAM[arrayPos0]96temp2 &= 1597// Wins 2P98temp3 = saveRAM[arrayPos0]99temp3 >>= 4100101if temp2 == temp3102temp2 = 0103temp3 = 0104else105if temp2 > temp3106temp2 = 1 // 1P Win Count107temp3 = 0 // 2P Win Count108else109temp2 = 0110temp3 = 1111end if112end if113114temp0 += temp2 // Total 1P Win Count115temp1 += temp3 // Total 2P Win Count116if temp0 == temp1117checkResult = true118else119checkResult = false120end if121end function122123124// ========================125// Events126// ========================127128event ObjectUpdate129switch object.state130case ACTRESULTS_SETUP131if ReceiveValue > -1132CallNativeFunction2(ReceiveEntity, 0x400, true)133ResetObjectEntity(0x400, TypeName[Blank Object], 0, 0, 0)134CallNativeFunction2(TransmitGlobal, "player.score2", player.score)135CallNativeFunction2(TransmitGlobal, "player.lives2", player.lives)136if vs.playerID == 0137CallNativeFunction2(TransmitGlobal, "vs.time1P", vs.time1P)138CallNativeFunction2(TransmitGlobal, "vs.rings1P", vs.rings1P)139CallNativeFunction2(TransmitGlobal, "vs.totalRings1P", vs.totalRings1P)140CallNativeFunction2(TransmitGlobal, "vs.items1P", vs.items1P)141else142CallNativeFunction2(TransmitGlobal, "vs.time2P", vs.time2P)143CallNativeFunction2(TransmitGlobal, "vs.rings2P", vs.rings2P)144CallNativeFunction2(TransmitGlobal, "vs.totalRings2P", vs.totalRings2P)145CallNativeFunction2(TransmitGlobal, "vs.items2P", vs.items2P)146end if147CallNativeFunction2(TransmitGlobal, "vs.dataSent", true)148149object[0].state = 2PVSSETUP_MENUACTIVE150object.state = ACTRESULTS_WAITING151else152object.state = ACTRESULTS_CALCRESULTS153end if154break155156case ACTRESULTS_WAITING157if vs.dataSent == true158object[0].state = 2PVSSETUP_FADEIN1592PVSSetup[0].timer = 384160SetScreenFade(0x00, 0x00, 0x00, 0xFF)161object.state = ACTRESULTS_CALCRESULTS162end if163break164165case ACTRESULTS_CALCRESULTS166SetupMenu(MENU_1, 0, 3, 0)167168LoadSpriteSheet("LevelSelect/Icons.gif")169object.iconSheet = object.spriteSheet170171LoadSpriteSheet("LevelSelect/Text.gif")172object.textSheet = object.spriteSheet173174#platform: USE_ORIGINS175options.physicalControls = true176#endplatform177178179menu1.selection = -1180object.zoneID = vs.listPos181object.zoneID >>= 1182object.actID = vs.listPos183object.actID &= 1184185if object.actID == 0186AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@@@@@@@@@@@@* 1 *", true)187else188AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@@@@@@@@@@@@* 2 *", true)189end if190AddMenuEntry(MENU_1, "@", true)191AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@@@1P@@@@@@@@2P@@@@WINS", true)192AddMenuEntry(MENU_1, "@", true)193AddMenuEntry(MENU_1, "@@SCORE", true)194AddMenuEntry(MENU_1, "@", true)195AddMenuEntry(MENU_1, "@@TIME@@@@@@@@:@@:@@@@@@:@@:", true)196AddMenuEntry(MENU_1, "@", true)197AddMenuEntry(MENU_1, "@@RING", true)198AddMenuEntry(MENU_1, "@", true)199AddMenuEntry(MENU_1, "@@TOTAL RING", true)200AddMenuEntry(MENU_1, "@", true)201AddMenuEntry(MENU_1, "@@ITEM BOX", true)202AddMenuEntry(MENU_1, "@", true)203AddMenuEntry(MENU_1, "@", true)204AddMenuEntry(MENU_1, "@", true)205AddMenuEntry(MENU_1, "* TOTAL *@@@@@@@@@@@@:", true)206207object.wins1P = 0208object.wins2P = 0209if vs.playerID == 0210object.score1P = player.score211object.score2P = player.score2212else213object.score1P = player.score2214object.score2P = player.score215end if216217if object.score1P == object.score2P218object.scoreWinner = 11219else220if object.score1P > object.score2P221object.scoreWinner = 9222object.wins1P++223else224object.scoreWinner = 10225object.wins2P++226end if227end if228229#platform: USE_STANDALONE230object.millisecs1P = vs.time1P231object.millisecs1P %= 100232object.secs1P = vs.time1P233object.secs1P /= 100234object.secs1P %= 60235object.mins1P = vs.time1P236object.mins1P /= 6000237#endplatform238239#platform: USE_ORIGINS240temp0 = vs.time1P241if temp0 >= 0x927BF242temp0 = 0x927BF243end if244object.millisecs1P = temp0245object.millisecs1P %= 100246object.secs1P = temp0247object.secs1P /= 100248object.secs1P %= 60249object.mins1P = temp0250object.mins1P /= 6000251#endplatform252253#platform: USE_STANDALONE254object.millisecs2P = vs.time2P255object.millisecs2P %= 100256object.secs2P = vs.time2P257object.secs2P /= 100258object.secs2P %= 60259object.mins2P = vs.time2P260object.mins2P /= 6000261#endplatform262263#platform: USE_ORIGINS264temp0 = vs.time2P265if temp0 >= 0x927BF266temp0 = 0x927BF267end if268object.millisecs2P = temp0269object.millisecs2P %= 100270object.secs2P = temp0271object.secs2P /= 100272object.secs2P %= 60273object.mins2P = temp0274object.mins2P /= 6000275#endplatform276277if vs.time1P == vs.time2P278object.timeWinner = 11279else280if vs.time1P < vs.time2P281object.timeWinner = 9282object.wins1P++283else284object.timeWinner = 10285object.wins2P++286end if287end if288289object.rings1P = vs.rings1P290object.rings2P = vs.rings2P291if object.rings1P == object.rings2P292object.ringsWinner = 11293else294if object.rings1P > object.rings2P295object.ringsWinner = 9296object.wins1P++297else298object.ringsWinner = 10299object.wins2P++300end if301end if302303object.totalRings1P = vs.totalRings1P304object.totalRings2P = vs.totalRings2P305if object.totalRings1P == object.totalRings2P306object.totalRingsWinner = 11307else308if object.totalRings1P > object.totalRings2P309object.totalRingsWinner = 9310object.wins1P++311else312object.totalRingsWinner = 10313object.wins2P++314end if315end if316317object.items1P = vs.items1P318object.items2P = vs.items2P319if object.items1P == object.items2P320object.itemsWinner = 11321else322if object.items1P > object.items2P323object.itemsWinner = 9324object.wins1P++325else326object.itemsWinner = 10327object.wins2P++328end if329end if330331if object.wins1P == object.wins2P332object.overallWinner = 26333else334if object.wins1P > object.wins2P335object.overallWinner = 22336else337object.overallWinner = 24338end if339end if340341arrayPos0 = vs.match342arrayPos0 <<= 2343arrayPos0 += object.actID344arrayPos0 += 0x400345saveRAM[arrayPos0] = object.wins2P346saveRAM[arrayPos0] <<= 4347saveRAM[arrayPos0] += object.wins1P348if object.actID == 1349arrayPos0++350saveRAM[arrayPos0] = 0351arrayPos0++352saveRAM[arrayPos0] = object.zoneID353end if354355object.state = ACTRESULTS_SHOWRESULTS356break357358case ACTRESULTS_SHOWRESULTS359if object.timer < 60360object.timer++361else362CheckTouchRect(0, 0, screen.xsize, screen.ysize)363if keyPress[0].start == true364checkResult = 0365end if366367if keyPress[0].buttonA == true368checkResult = 0369end if370371if keyPress[0].buttonB == true372checkResult = 0373end if374375if keyPress[0].buttonC == true376checkResult = 0377end if378379if checkResult > -1380object.timer = 0381if object.actID == 0382vs.listPos++383stage.activeList = vs.activeList384stage.listPos = vs.listPos385object.state = ACTRESULTS_LOADSTAGE386object[0].state = 2PVSSETUP_TOREGULARSTAGE387else388CallFunction(ActResults_CheckTieBreaker)389if checkResult == true390stage.activeList = SPECIAL_STAGE391stage.listPos = object.zoneID392object.state = ACTRESULTS_LOADSTAGE393object[0].state = 2PVSSETUP_TOSPECIALSTAGE394PlaySfx(SfxName[Warp], false)395vs.tieBreaker = true396else397object.state = ACTRESULTS_FADEOUT398end if399end if400end if401end if402break403404case ACTRESULTS_LOADSTAGE405break406407case ACTRESULTS_FADEOUT408if object.timer < 256409object.timer += 16410SetScreenFade(0x00, 0x00, 0x00, object.timer)411else412ResetObjectEntity(1, TypeName[Zone Results], 0, 0, 0)413object[1].priority = PRIORITY_ACTIVE414object[0].state = 2PVSSETUP_FADEIN4152PVSSetup[0].timer = 384416SetScreenFade(0x00, 0x00, 0x00, 0xFF)417end if418break419end switch420421object.animationTimer++422object.animationTimer &= 15423end event424425426event ObjectDraw427if object.state < ACTRESULTS_CALCRESULTS428// Waiting...429object.spriteSheet = object.iconSheet430DrawRect(0, 0, screen.xsize, screen.ysize, 0x00, 0x00, 0x00, 0xFF)431DrawSpriteScreenXY(28, screen.xsize, screen.ysize)432else433object.spriteSheet = object.iconSheet434435// ZONE RESULT436DrawSpriteScreenXY(8, screen.xcenter, 17)437DrawSpriteScreenXY(object.zoneID, screen.xcenter, 57)438439// 1P Results440temp0 = screen.xcenter441temp0 += 8442DrawNumbers(12, temp0, 89, object.score1P, 6, 8, false)443DrawNumbers(12, temp0, 121, object.rings1P, 3, 8, false)444DrawNumbers(12, temp0, 137, object.totalRings1P, 3, 8, false)445DrawNumbers(12, temp0, 153, object.items1P, 3, 8, false)446DrawNumbers(12, temp0, 105, object.millisecs1P, 2, 8, true)447temp0 -= 24448DrawNumbers(12, temp0, 105, object.secs1P, 2, 8, true)449temp0 -= 24450#platform: USE_ORIGINS451if object.mins1P >= 10452DrawNumbers(12, temp0, 105, object.mins1P, 2, 8, true)453else454#endplatform455DrawNumbers(12, temp0, 105, object.mins1P, 1, 8, true)456#platform: USE_ORIGINS457end if458#endplatform459460// 2P Results461temp0 = screen.xcenter462temp0 += 88463DrawNumbers(12, temp0, 89, object.score2P, 6, 8, false)464DrawNumbers(12, temp0, 121, object.rings2P, 3, 8, false)465DrawNumbers(12, temp0, 137, object.totalRings2P, 3, 8, false)466DrawNumbers(12, temp0, 153, object.items2P, 3, 8, false)467DrawNumbers(12, temp0, 105, object.millisecs2P, 2, 8, true)468temp0 -= 24469DrawNumbers(12, temp0, 105, object.secs2P, 2, 8, true)470temp0 -= 24471#platform: USE_ORIGINS472if object.mins2P >= 10473DrawNumbers(12, temp0, 105, object.mins2P, 2, 8, true)474else475#endplatform476DrawNumbers(12, temp0, 105, object.mins2P, 1, 8, true)477#platform: USE_ORIGINS478end if479#endplatform480temp0 = screen.xcenter481temp0 += 8482483// Wins484DrawNumbers(12, temp0, 185, object.wins1P, 1, 8, true)485temp0 += 32486DrawNumbers(12, temp0, 185, object.wins2P, 1, 8, true)487488// Winners489temp0 = screen.xcenter490temp0 += 128491DrawSpriteScreenXY(object.scoreWinner, temp0, 89)492DrawSpriteScreenXY(object.timeWinner, temp0, 105)493DrawSpriteScreenXY(object.ringsWinner, temp0, 121)494DrawSpriteScreenXY(object.totalRingsWinner, temp0, 137)495DrawSpriteScreenXY(object.itemsWinner, temp0, 153)496temp0 = object.animationTimer497temp0 >>= 3498temp0 += object.overallWinner499DrawSpriteScreenXY(temp0, screen.xcenter, 210)500501// Menu502object.spriteSheet = object.textSheet503temp0 = screen.xcenter504temp0 -= 144505DrawMenu(MENU_1, temp0, 56)506end if507end event508509510event ObjectStartup511LoadSpriteSheet("LevelSelect/Icons.gif")512LoadSpriteSheet("LevelSelect/Text.gif")513514SpriteFrame(-88, 0, 136, 7, 103, 350) // EMERALD HILL ZONE - #0515SpriteFrame(-104, 0, 152, 7, 103, 358) // CHEMICAL PLANT ZONE - #1516SpriteFrame(-88, 0, 136, 7, 103, 366) // AQUATIC RUIN ZONE - #2517SpriteFrame(-88, 0, 136, 7, 103, 374) // CASINO NIGHT ZONE - #3518SpriteFrame(-56, 0, 104, 7, 103, 382) // HILL TOP ZONE - #4519SpriteFrame(-80, 0, 128, 7, 103, 390) // MYSTIC CAVE ZONE - #5520SpriteFrame(-64, 0, 112, 7, 103, 398) // OIL OCEAN ZONE - #6521SpriteFrame(-56, 0, 104, 7, 103, 406) // SPECIAL STAGE - #7522SpriteFrame(-48, 0, 96, 14, 1, 136) // RESULT - #8523SpriteFrame(-8, 0, 16, 7, 98, 136) // 1P text - #9524SpriteFrame(-8, 0, 16, 7, 115, 136) // 2P text - #10525SpriteFrame(-16, 0, 32, 7, 132, 136) // TIED text - #11526SpriteFrame(0, 0, 8, 7, 175, 140) // 0 - #12527SpriteFrame(0, 0, 8, 7, 183, 140) // 1 - #13528SpriteFrame(0, 0, 8, 7, 191, 140) // 2 - #14529SpriteFrame(0, 0, 8, 7, 199, 140) // 3 - #15530SpriteFrame(0, 0, 8, 7, 207, 140) // 4 - #16531SpriteFrame(0, 0, 8, 7, 215, 140) // 5 - #17532SpriteFrame(0, 0, 8, 7, 223, 140) // 6 - #18533SpriteFrame(0, 0, 8, 7, 231, 140) // 7 - #19534SpriteFrame(0, 0, 8, 7, 239, 140) // 8 - #20535SpriteFrame(0, 0, 8, 7, 247, 140) // 9 - #21536SpriteFrame(-47, 0, 91, 12, 1, 110) // 1P WINS - #22537SpriteFrame(-47, 0, 91, 12, 1, 123) // 1P WINS (Flashing) - #23538SpriteFrame(-47, 0, 91, 12, 93, 110) // 2P WINS - #24539SpriteFrame(-47, 0, 91, 12, 93, 123) // 2P WINS (Flashing) - #25540SpriteFrame(-22, 0, 44, 12, 1, 385) // TIED - #26541SpriteFrame(-22, 0, 44, 12, 1, 398) // TIED (Flashing) - #27542if vs.playerID == 0543SpriteFrame(-160, -16, 136, 7, 103, 422) // WAITING FOR 2P... - #28544else545SpriteFrame(-160, -16, 136, 7, 103, 414) // WAITING FOR 1P... - #28546end if547548foreach (TypeName[Act Results], arrayPos0, ALL_ENTITIES)549object[arrayPos0].priority = PRIORITY_ACTIVE550next551end event552553554// ========================555// Editor Events556// ========================557558event RSDKDraw559DrawSprite(0)560end event561562563event RSDKLoad564LoadSpriteSheet("LevelSelect/Icons.gif")565SpriteFrame(-48, 0, 96, 14, 1, 136) // RESULT - #0566567SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")568end event569570571