Path: blob/master/Sonic 2/Scripts/Special/Checkpoint2PVS.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Checkpoint 2PVS 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.localPos.x // unused, required for halfpipe stuff though13private alias object.value2 : object.localPos.y // unused, required for halfpipe stuff though14private alias object.value3 : object.localPos.z15private alias object.value4 : object.worldPos.x // unused, required for halfpipe stuff though16private alias object.value5 : object.worldPos.y // unused, required for halfpipe stuff though17private alias object.value6 : object.worldPos.z // unused, required for halfpipe stuff though18private alias object.value7 : object.thumbPos.y19private alias object.value8 : object.failed20private alias object.value9 : object.emblemFrame21private alias object.value10 : object.thumbsFrame2223// States24private alias 0 : CHECKPOINT2PVS_SETUP25private alias 1 : CHECKPOINT2PVS_AWAITPLAYERS26private alias 2 : CHECKPOINT2PVS_SHOWRESULTS27private alias 3 : CHECKPOINT2PVS_EXITMSG28private alias 4 : CHECKPOINT2PVS_SHOWNEXTMSG29private alias 5 : CHECKPOINT2PVS_FADEOUT30private alias 6 : CHECKPOINT2PVS_TORESULTSSCREEN3132// Text Message Property Values33private alias 5 : TEXTMESSAGE_MOSTRINGSWIN34private alias 6 : TEXTMESSAGE_P1WINS35private alias 7 : TEXTMESSAGE_P2WINS36private alias 8 : TEXTMESSAGE_TIE3738// Player Aliases39private alias object.value0 : player.rings40private alias object.value14 : player.localPos.z41private alias object.value19 : player.vsCheckpointID42private alias object.value20 : player.vsCheckpoint1Rings43private alias object.value21 : player.vsCheckpoint2Rings44private alias object.value22 : player.vsCheckpoint3Rings4546// Face Buffer Flag Aliases47private alias 5 : FACE_TEXTURED_C484950// ========================51// Function Declarations52// ========================5354reserve function Checkpoint2PVS_ProcessDrawing555657// ========================58// Tables59// ========================6061private table Checkpoint2PVS_vertexUTable62165, 198, 231, 264, 297, 330, 26363end table646566// ========================67// Function Definitions68// ========================6970private function Checkpoint2PVS_ProcessDrawing71arrayPos0 = scene3D.vertexCount72arrayPos1 = scene3D.faceCount73temp0 = object.localPos.z74temp0 >>= 2275temp0 &= 376GetTableValue(arrayPos2, temp0, Halfpipe_checkpointFaceTable)7778temp0 = 079while temp0 < 780faceBuffer[arrayPos1].flag = FACE_TEXTURED_C81faceBuffer[arrayPos1].a = arrayPos082vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x83vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y84vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z85GetTableValue(vertexBuffer[arrayPos0].u, object.frame, Checkpoint2PVS_vertexUTable)86vertexBuffer[arrayPos0].v = 25687arrayPos0++8889faceBuffer[arrayPos1].b = arrayPos090vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x91vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y92vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z93vertexBuffer[arrayPos0].u = 0x80094vertexBuffer[arrayPos0].v = 0x80095arrayPos0++9697faceBuffer[arrayPos1].c = arrayPos098vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x99vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y100vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z101vertexBuffer[arrayPos0].u = 16102vertexBuffer[arrayPos0].v = 16103arrayPos0++104105faceBuffer[arrayPos1].d = arrayPos0106vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x107vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y108vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z109arrayPos0++110111scene3D.vertexCount += 4112scene3D.faceCount++113arrayPos1++114arrayPos2 += 4115temp0++116loop117end function118119120// ========================121// Events122// ========================123124event ObjectUpdate125switch object.state126case CHECKPOINT2PVS_SETUP127if object.timer < 16128object.timer++129else130object.localPos.z >>= 22131object.localPos.z <<= 22132object.localPos.z += 0x300000133ResetObjectEntity(11, TypeName[Blank Object], 0, 0, 0)134135object.timer = 0136object.state++137end if138break139140case CHECKPOINT2PVS_AWAITPLAYERS141object.animationTimer++142if object.animationTimer == 4143object.animationTimer = 0144object.frame++145object.frame %= 7146end if147CallFunction(Checkpoint2PVS_ProcessDrawing)148149temp3 = false150foreach (TypeName[Player Object], currentPlayer, ACTIVE_ENTITIES)151if temp3 == false152temp1 = object.localPos.z153temp1 -= 0x20000154temp2 = object.localPos.z155temp2 += 0x20000156if player[currentPlayer].localPos.z > temp1157if player[currentPlayer].localPos.z < temp2158object.thumbPos.y = 80159#platform: USE_STANDALONE160object.drawOrder = 5161#endplatform162#platform: USE_ORIGINS163object.drawOrder = 6164#endplatform165if player[2].rings == player[3].rings166object.emblemFrame = -1167CreateTempObject(TypeName[Text Message], TEXTMESSAGE_TIE, 0, 0)168else169if player[2].rings > player[3].rings170player[2].vsCheckpointID++171172// Bug Details:173// This works fine for the other characters, but for Amy in Origins Plus her actual character ID is 5,174// which means the sprite ID this would have would be one SpriteFrame over the actual Amy Emblem sprite175object.emblemFrame = 4176object.emblemFrame += stage.playerListPos177178if vs.playerID == 0179CreateTempObject(TypeName[Text Message], TEXTMESSAGE_P1WINS, 0, 0)180else181CreateTempObject(TypeName[Text Message], TEXTMESSAGE_P2WINS, 0, 0)182end if183else184if ReceiveValue == -1185player[3].vsCheckpointID++186end if187188// Also bugged in Origins Plus, see above189object.emblemFrame = 4190object.emblemFrame += vs.player2Type191192if vs.playerID == 0193CreateTempObject(TypeName[Text Message], TEXTMESSAGE_P2WINS, 0, 0)194else195CreateTempObject(TypeName[Text Message], TEXTMESSAGE_P1WINS, 0, 0)196end if197end if198end if199200switch SpecialSetup_checkpointID201case 0202player[2].vsCheckpoint1Rings = player[2].rings203player[3].vsCheckpoint1Rings = player[3].rings204break205206case 1207player[2].vsCheckpoint2Rings = player[2].rings208player[3].vsCheckpoint2Rings = player[3].rings209break210211case 2212player[2].vsCheckpoint3Rings = player[2].rings213player[3].vsCheckpoint3Rings = player[3].rings214break215end switch216217#platform: USE_STANDALONE218object[tempObjectPos].drawOrder = 5219#endplatform220#platform: USE_ORIGINS221object[tempObjectPos].drawOrder = 6222#endplatform223PlaySfx(SfxName[Star Post], false)224object.thumbsFrame = 0225if object.emblemFrame == 6226object.thumbsFrame += 2227end if228temp3 = true229230object.state++231end if232end if233end if234next235break236237case CHECKPOINT2PVS_SHOWRESULTS238Sin(object.thumbPos.y, object.angle)239object.thumbPos.y >>= 7240object.thumbPos.y += 0x50241object.angle += 24242object.angle &= 0x1FF243244if object.timer < 120245if object.timer < 20246CallFunction(Checkpoint2PVS_ProcessDrawing)247end if248249object.timer++250else251object.timer = 0252object.state++253end if254break255256case CHECKPOINT2PVS_EXITMSG257if object.scale > 0258object.scale -= 16259else260SpecialSetup_checkpointID++261if SpecialSetup_checkpointID == 3262object.state = CHECKPOINT2PVS_FADEOUT263object[2].controlMode = CONTROLMODE_NONE264object[3].controlMode = CONTROLMODE_NONE265else266object.state++267end if268end if269break270271case CHECKPOINT2PVS_SHOWNEXTMSG272if object.timer < 10273object.timer++274else275CreateTempObject(TypeName[Text Message], TEXTMESSAGE_MOSTRINGSWIN, 0, 0)276#platform: USE_STANDALONE277object[tempObjectPos].drawOrder = 5278#endplatform279#platform: USE_ORIGINS280object[tempObjectPos].drawOrder = 6281#endplatform282ResetObjectEntity(object.entityPos, TypeName[Blank Object], 0, 0, 0)283end if284break285286case CHECKPOINT2PVS_FADEOUT287options.touchControls = false288289if object.timer < 320290object.timer += 8291SetScreenFade(0xF8, 0xF8, 0xF8, object.timer)292else293object.timer = 248294object.state++295SetScreenFade(0xF8, 0xF8, 0xF8, 0xFF)296end if297break298299case CHECKPOINT2PVS_TORESULTSSCREEN300options.touchControls = false301302if object.timer > 0303object.timer -= 8304music.volume -= 5305else306if vs.playerID == 0307vs.checkpoint1P = player[2].vsCheckpoint1Rings308temp0 = player[2].vsCheckpoint2Rings309temp0 <<= 8310vs.checkpoint1P += temp0311temp0 = player[2].vsCheckpoint3Rings312temp0 <<= 16313vs.checkpoint1P += temp0314315vs.checkpoint2P = player[3].vsCheckpoint1Rings316temp0 = player[3].vsCheckpoint2Rings317temp0 <<= 8318vs.checkpoint2P += temp0319temp0 = player[3].vsCheckpoint3Rings320temp0 <<= 16321vs.checkpoint2P += temp0322else323vs.checkpoint1P = player[3].vsCheckpoint1Rings324temp0 = player[3].vsCheckpoint2Rings325temp0 <<= 8326vs.checkpoint1P += temp0327temp0 = player[3].vsCheckpoint3Rings328temp0 <<= 16329vs.checkpoint1P += temp0330331vs.checkpoint2P = player[2].vsCheckpoint1Rings332temp0 = player[2].vsCheckpoint2Rings333temp0 <<= 8334vs.checkpoint2P += temp0335temp0 = player[2].vsCheckpoint3Rings336temp0 <<= 16337vs.checkpoint2P += temp0338end if339340stage.activeList = PRESENTATION_STAGE341stage.listPos = 3342StopMusic()343LoadStage()344end if345346SetScreenFade(object.timer, object.timer, object.timer, 255)347break348end switch349end event350351352event ObjectDraw353if object.emblemFrame > -1354switch object.state355case CHECKPOINT2PVS_SHOWRESULTS356DrawSpriteScreenXY(object.emblemFrame, screen.xcenter, 80)357DrawSpriteScreenXY(object.thumbsFrame, screen.xcenter, object.thumbPos.y)358break359360case CHECKPOINT2PVS_EXITMSG361DrawSpriteScreenFX(object.emblemFrame, FX_SCALE, screen.xcenter, 80)362DrawSpriteScreenFX(object.thumbsFrame, FX_SCALE, screen.xcenter, object.thumbPos.y)363break364end switch365end if366end event367368369event ObjectStartup370LoadSpriteSheet("Special/Objects.gif")371SpriteFrame(-24, -24, 48, 48, 463, 42) // Thumbs up - #0372SpriteFrame(-24, -24, 48, 48, 366, 155) // Thumbs down - #1373SpriteFrame(-24, -24, 48, 48, 463, 328) // Thumbs up (Knux) - #2374SpriteFrame(-24, -24, 48, 48, 463, 377) // Thumbs down (Knux) - #3375SpriteFrame(-48, -24, 96, 48, 415, 122) // Emblem (Sonic) - #4376SpriteFrame(-48, -24, 96, 48, 415, 171) // Emblem (Tails) - #5377SpriteFrame(-48, -24, 96, 48, 415, 220) // Emblem (Knux) - #6378#platform: USE_ORIGINS379SpriteFrame(-48, -24, 96, 48, 154, 361) // Emblem (Amy) - #7380#endplatform381382if options.vsMode == true383foreach (TypeName[Checkpoint], arrayPos0, ALL_ENTITIES)384object[arrayPos0].type = TypeName[Checkpoint 2PVS]385next386387foreach (TypeName[Chaos Emerald], arrayPos0, ALL_ENTITIES)388object[arrayPos0].type = TypeName[Checkpoint 2PVS]389next390391foreach (TypeName[Rings Reminder], arrayPos0, ALL_ENTITIES)392object[arrayPos0].type = TypeName[Blank Object]393next394end if395end event396397398// ========================399// Editor Events400// ========================401402event RSDKDraw403DrawSprite(0)404DrawSprite(1)405end event406407408event RSDKLoad409LoadSpriteSheet("Special/Objects.gif")410SpriteFrame(-16, -8, 32, 16, 199, 165)411SpriteFrame(-8, -4, 16, 7, 348, 108)412413SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")414end event415416417