Path: blob/master/Sonic 2/Scripts/Special/Checkpoint.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Checkpoint 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 : CHECKPOINT_SETUP25private alias 1 : CHECKPOINT_AWAITPLAYER26private alias 2 : CHECKPOINT_SHOWRESULTS27private alias 3 : CHECKPOINT_EXITMSG28private alias 4 : CHECKPOINT_SHOWGETRINGSMSG2930// Text Message Property Values31private alias 0 : TEXTMESSAGE_COOL32private alias 1 : TEXTMESSAGE_NOTENOUGH33private alias 2 : TEXTMESSAGE_GETRINGS3435// Text Message Aliases36private alias object.value4 : textMessage.number3738// Player Aliases39private alias object.value0 : player.rings40private alias object.value14 : player.localPos.z4142// Face Buffer Flag Aliases43private alias 5 : FACE_TEXTURED_C444546// ========================47// Function Declarations48// ========================4950reserve function Checkpoint_ProcessDrawing515253// ========================54// Tables55// ========================5657private table Checkpoint_vertexUTable58165, 198, 231, 264, 297, 330, 26359end table606162// ========================63// Events64// ========================6566private function Checkpoint_ProcessDrawing67arrayPos0 = scene3D.vertexCount68arrayPos1 = scene3D.faceCount69temp0 = object.localPos.z70temp0 >>= 2271temp0 &= 372GetTableValue(arrayPos2, temp0, Halfpipe_checkpointFaceTable)7374temp0 = 075while temp0 < 776faceBuffer[arrayPos1].flag = FACE_TEXTURED_C77faceBuffer[arrayPos1].a = arrayPos078vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x79vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y80vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z81GetTableValue(vertexBuffer[arrayPos0].u, object.frame, Checkpoint_vertexUTable)82vertexBuffer[arrayPos0].v = 25683arrayPos0++8485faceBuffer[arrayPos1].b = arrayPos086vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x87vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y88vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z89vertexBuffer[arrayPos0].u = 0x80090vertexBuffer[arrayPos0].v = 0x80091arrayPos0++9293faceBuffer[arrayPos1].c = arrayPos094vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x95vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y96vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z97vertexBuffer[arrayPos0].u = 1698vertexBuffer[arrayPos0].v = 1699arrayPos0++100101faceBuffer[arrayPos1].d = arrayPos0102vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x103vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y104vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z105arrayPos0++106107scene3D.vertexCount += 4108scene3D.faceCount++109arrayPos1++110arrayPos2 += 4111temp0++112loop113end function114115116// ========================117// Events118// ========================119120event ObjectUpdate121switch object.state122case CHECKPOINT_SETUP123if object.timer < 16124object.timer++125else126object.localPos.z >>= 22127object.localPos.z <<= 22128object.localPos.z += 0x300000129// Destroy any existing text messages130ResetObjectEntity(11, TypeName[Blank Object], 0, 0, 0)131object.timer = 0132object.state++133end if134break135136case CHECKPOINT_AWAITPLAYER137object.animationTimer++138if object.animationTimer == 4139object.animationTimer = 0140object.frame++141object.frame %= 7142end if143144CallFunction(Checkpoint_ProcessDrawing)145foreach (TypeName[Player Object], currentPlayer, ACTIVE_ENTITIES)146temp1 = object.localPos.z147temp1 -= 0x20000148temp2 = object.localPos.z149temp2 += 0x20000150if player[currentPlayer].localPos.z > temp1151if player[currentPlayer].localPos.z < temp2152object.thumbPos.y = 80153#platform: USE_STANDALONE154object.drawOrder = 5155#endplatform156#platform: USE_ORIGINS157object.drawOrder = 6158#endplatform159if options.vsMode == false160#platform: USE_STANDALONE161object.emblemFrame = 4162object.emblemFrame += stage.playerListPos163#endplatform164#platform: USE_ORIGINS165if stage.playerListPos >= PLAYER_AMY166object.emblemFrame = 7167else168object.emblemFrame = 4169object.emblemFrame += stage.playerListPos170end if171#endplatform172else173object.emblemFrame = 4174end if175176object.state++177178if stage.player2Enabled == true179temp0 = player[2].rings180temp0 += player[3].rings181else182temp0 = player[2].rings183end if184GetTableValue(temp1, SpecialSetup_checkpointID, SpecialSetup_ringCountTable)185186if temp0 >= temp1187object.failed = false188CreateTempObject(TypeName[Text Message], TEXTMESSAGE_COOL, 0, 0)189#platform: USE_STANDALONE190object[tempObjectPos].drawOrder = 5191#endplatform192#platform: USE_ORIGINS193object[tempObjectPos].drawOrder = 6194#endplatform195PlaySfx(SfxName[Star Post], false)196else197object.failed = true198CreateTempObject(TypeName[Text Message], TEXTMESSAGE_NOTENOUGH, 0, 0)199#platform: USE_STANDALONE200object[tempObjectPos].drawOrder = 5201#endplatform202#platform: USE_ORIGINS203object[tempObjectPos].drawOrder = 6204#endplatform205PlaySfx(SfxName[Fail], false)206end if207208object.thumbsFrame = object.failed209if object.emblemFrame == 6210object.thumbsFrame += 2211end if212end if213end if214next215break216217case CHECKPOINT_SHOWRESULTS218Sin(object.thumbPos.y, object.angle)219object.thumbPos.y >>= 7220object.thumbPos.y += 0x50221object.angle += 24222object.angle &= 0x1FF223224if object.timer < 120225if object.timer < 20226CallFunction(Checkpoint_ProcessDrawing)227end if228object.timer++229else230object.timer = 0231object.state++232end if233break234235case CHECKPOINT_EXITMSG236if object.scale > 0237object.scale -= 16238else239if object.failed == false240object.state++241else242ResetObjectEntity(object.entityPos, TypeName[Blank Object], 0, 0, 0)243ResetObjectEntity(20, TypeName[Special Finish], 0, 0, 0)244object[20].priority = PRIORITY_ACTIVE245#platform: USE_ORIGINS246object[20].drawOrder = 6247#endplatform248end if249end if250break251252case CHECKPOINT_SHOWGETRINGSMSG253if object.timer < 10254object.timer++255else256CreateTempObject(TypeName[Text Message], TEXTMESSAGE_GETRINGS, 0, 0)257#platform: USE_STANDALONE258object[tempObjectPos].drawOrder = 5259#endplatform260#platform: USE_ORIGINS261object[tempObjectPos].drawOrder = 6262#endplatform263264SpecialSetup_checkpointID++265GetTableValue(textMessage[tempObjectPos].number, SpecialSetup_checkpointID, SpecialSetup_ringCountTable)266ResetObjectEntity(object.entityPos, TypeName[Blank Object], 0, 0, 0)267end if268break269end switch270end event271272273event ObjectDraw274switch object.state275default276case CHECKPOINT_SETUP277case CHECKPOINT_AWAITPLAYER278case CHECKPOINT_SHOWGETRINGSMSG279break280281case CHECKPOINT_SHOWRESULTS282DrawSpriteScreenXY(object.emblemFrame, screen.xcenter, 80)283DrawSpriteScreenXY(object.thumbsFrame, screen.xcenter, object.thumbPos.y)284break285286case CHECKPOINT_EXITMSG287DrawSpriteScreenFX(object.emblemFrame, FX_SCALE, screen.xcenter, 80)288DrawSpriteScreenFX(object.thumbsFrame, FX_SCALE, screen.xcenter, object.thumbPos.y)289break290end switch291end event292293294event ObjectStartup295LoadSpriteSheet("Special/Objects.gif")296297SpriteFrame(-24, -24, 48, 48, 463, 42) // Thumbs up - #0298SpriteFrame(-24, -24, 48, 48, 366, 155) // Thumbs down - #1299SpriteFrame(-24, -24, 48, 48, 463, 328) // Thumbs up (Knux) - #2300SpriteFrame(-24, -24, 48, 48, 463, 377) // Thumbs down (Knux) - #3301SpriteFrame(-48, -24, 96, 48, 415, 122) // Emblem (Sonic) - #4302SpriteFrame(-48, -24, 96, 48, 415, 171) // Emblem (Tails) - #5303SpriteFrame(-48, -24, 96, 48, 415, 220) // Emblem (Knux) - #6304#platform: USE_ORIGINS305SpriteFrame(-48, -24, 96, 48, 154, 361) // Emblem (Amy) - #7306#endplatform307end event308309310// ========================311// Editor Events312// ========================313314event RSDKDraw315DrawSprite(0)316end event317318319event RSDKLoad320LoadSpriteSheet("Special/Objects.gif")321SpriteFrame(-16, -8, 32, 16, 199, 165)322323SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")324SetVariableAlias(ALIAS_VAR_VAL0, "ringCount2P")325SetVariableAlias(ALIAS_VAR_VAL1, "ringCountSonic")326SetVariableAlias(ALIAS_VAR_VAL2, "ringCountKnux")327SetVariableAlias(ALIAS_VAR_VAL3, "unused")328end event329330331