Path: blob/master/Sonic 2/Scripts/Global/StarPost.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Star Post Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.propertyValue : object.id1213private alias object.value0 : object.ballAngle14private alias object.value1 : object.ballPos.x15private alias object.value2 : object.ballPos.y16private alias object.value3 : object.starTimer17private alias object.value4 : object.starType18private alias object.value5 : object.starAngleX19private alias object.value6 : object.starAngleY20private alias object.value7 : object.starRadius21private alias object.value8 : object.starFrame22private alias object.value9 : object.timer23private alias object.value10 : object.targetPlayer2425private alias 0 : STARPOST_AWAITPLAYER26private alias 1 : STARPOST_SPUN27private alias 2 : STARPOST_SHOWINGSTARS28private alias 3 : STARPOST_TOSPECIALSTAGE29private alias 4 : STARPOST_AWAITOTHERPLAYER3031private alias 0 : STARPOST_ANI_IDLE32private alias 1 : STARPOST_ANI_SPINNING33private alias 2 : STARPOST_ANI_SPUN3435// Player Aliases36private alias object.xpos : player.xpos37private alias object.ypos : player.ypos38private alias object.ixpos : player.ixpos39private alias object.iypos : player.iypos40private alias object.controlMode : player.controlMode41private alias object.value0 : player.rings42private alias object.value16 : player.isSidekick4344// Game Modes45private alias 2 : MODE_TIMEATTACK4647// Tracks48private alias 1 : TRACK_ACTFINISH495051// ========================52// Function Declarations53// ========================5455reserve function StarPost_DebugDraw56reserve function StarPost_DebugSpawn575859// ========================60// Function Definitions61// ========================6263private function StarPost_DebugDraw64DrawSprite(2)65end function666768private function StarPost_DebugSpawn69CreateTempObject(TypeName[Star Post], 0, object.xpos, object.ypos)70end function717273// ========================74// Events75// ========================7677event ObjectUpdate78switch object.state79case STARPOST_AWAITPLAYER80foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)81if player[currentPlayer].isSidekick == false82BoxCollisionTest(C_TOUCH, object.entityPos, -8, -44, 8, 20, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)83if checkResult == true84if options.vsMode == true85if currentPlayer == 086vs.restartX1 = object.xpos87vs.restartY1 = object.ypos88object.targetPlayer = 189else90vs.restartX2 = object.xpos91vs.restartY2 = object.ypos92object.targetPlayer = 093end if9495object.state = STARPOST_AWAITOTHERPLAYER96else97starPostID = object.entityPos98foreach (TypeName[Star Post], arrayPos0, ALL_ENTITIES)99if object[arrayPos0].id < object.id100object[arrayPos0].state = STARPOST_SPUN101object[arrayPos0].animation = STARPOST_ANI_SPUN102object[arrayPos0].ballAngle = 0103end if104next105106if specialStage.emeralds < 0x7F107if options.gameMode != MODE_TIMEATTACK108if player[0].rings >= 50109object.state = STARPOST_SHOWINGSTARS110object.starType = 4111object.starTimer = 0112object.starAngleY = 0113object.starAngleX = 0114object.starRadius = 0115else116object.state = STARPOST_SPUN117end if118else119object.state = STARPOST_SPUN120end if121else122object.state = STARPOST_SPUN123end if124end if125126#platform: USE_ORIGINS127StatsUsabilityParam1 = StageStatsUsabilityParam1128StatsUsabilityParam2 = StageStatsUsabilityParam2129StatsUsabilityParam3 = StageStatsUsabilityParam3130StatsUsabilityParam4 = StageStatsUsabilityParam4131StatsUsabilityParam5 = StageStatsUsabilityParam5132133recScore = player.score134recRing = player[0].rings135#endplatform136recMilliSeconds = stage.milliSeconds137recSeconds = stage.seconds138recMinutes = stage.minutes139recWaterState = stage.waterState140recWaterLevel = stage.waterLevel141142object.ballAngle = 0x180143144if object.priority != PRIORITY_XBOUNDS_DESTROY145object.priority = PRIORITY_ACTIVE146end if147148object.animation = STARPOST_ANI_SPINNING149PlaySfx(SfxName[Star Post], false)150151#platform: USE_ORIGINS152if options.attractMode == false153CallNativeFunction2(NotifyCallback, NOTIFY_TOUCH_CHECKPOINT, 0)154end if155#endplatform156end if157end if158next159break160161case STARPOST_SPUN162object.animationTimer++163object.animationTimer &= 7164object.frame = object.animationTimer165object.frame >>= 2166break167168case STARPOST_SHOWINGSTARS169object.starAngleX += 18170object.starAngleX &= 0x1FF171object.starAngleY += 4172object.starAngleY &= 0x1FF173174if object.starTimer < 128175object.starRadius++176else177if object.starTimer > 472178object.starRadius--179end if180end if181182object.starTimer++183if object.starTimer == 600184object.state = STARPOST_SPUN185object.starTimer = 0186object.starType = 0187if object.priority != PRIORITY_XBOUNDS_DESTROY188object.priority = PRIORITY_BOUNDS189end if190end if191192object.animationTimer++193object.animationTimer &= 7194object.frame = object.animationTimer195object.frame >>= 2196temp0 = object.starRadius197temp0 >>= 2198FlipSign(temp0)199temp1 = object.starRadius200temp1 >>= 2201202if object.starTimer > 60203BoxCollisionTest(C_TOUCH, object.entityPos, temp0, -64, temp1, -56, 0, C_BOX, C_BOX, C_BOX, C_BOX)204if checkResult == true205PlaySfx(SfxName[Warp], false)206object.state = STARPOST_TOSPECIALSTAGE207object.priority = PRIORITY_ALWAYS208stage.state = STAGE_FROZEN209player[0].controlMode = CONTROLMODE_NONE210#platform: USE_ORIGINS211StopSfx(SfxName[Flying])212StopSfx(SfxName[Tired])213#endplatform214fadeColor = 208215fadeColor <<= 16216temp0 = 0xFF217temp0 <<= 8218fadeColor += temp0219fadeColor += 0xE0220object.timer = 0221end if222end if223break224225case STARPOST_TOSPECIALSTAGE226options.touchControls = false227music.volume -= 2228object.timer += 8229SetScreenFade(208, 255, 224, object.timer)230if object.timer == 0x400231specialStage.nextZone = stage.listPos232stage.activeList = SPECIAL_STAGE233stage.listPos = specialStage.listPos234LoadStage()235end if236break237238case STARPOST_AWAITOTHERPLAYER239currentPlayer = object.targetPlayer240BoxCollisionTest(C_TOUCH, object.entityPos, -8, -44, 8, 20, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)241if checkResult == true242if currentPlayer == 0243vs.restartX1 = object.xpos244vs.restartY1 = object.ypos245else246vs.restartX2 = object.xpos247vs.restartY2 = object.ypos248end if249250if object.animation != STARPOST_ANI_SPINNING251object.ballAngle = 0x180252end if253254if object.priority != PRIORITY_XBOUNDS_DESTROY255object.priority = PRIORITY_ACTIVE256end if257object.animation = STARPOST_ANI_SPINNING258object.state = STARPOST_SPUN259PlaySfx(SfxName[Star Post], false)260end if261262object.animationTimer++263object.animationTimer &= 7264object.frame = object.animationTimer265object.frame >>= 2266break267268end switch269270if object.animation == STARPOST_ANI_SPINNING271Cos(object.ballPos.x, object.ballAngle)272object.ballPos.x *= -0x500273274Sin(object.ballPos.y, object.ballAngle)275object.ballPos.y *= 0x500276277object.ballPos.x += object.xpos278object.ballPos.y += object.ypos279object.ballPos.y -= 0x1A0000280object.ballAngle += 32281if object.ballAngle > 0x580282object.ballAngle = 0283object.animation = STARPOST_ANI_SPUN284if object.priority != PRIORITY_XBOUNDS_DESTROY285if object.starType == 0286object.priority = PRIORITY_BOUNDS287end if288end if289end if290end if291end event292293294event ObjectDraw295switch object.animation296case STARPOST_ANI_IDLE297DrawSprite(2)298break299300case STARPOST_ANI_SPINNING301DrawSprite(3)302DrawSpriteXY(0, object.ballPos.x, object.ballPos.y)303break304305case STARPOST_ANI_SPUN306DrawSprite(3)307temp0 = object.ypos308temp0 -= 0x240000309DrawSpriteXY(object.frame, object.xpos, temp0)310break311312end switch313314if object.starType > 0315temp0 = 0316temp1 = object.starAngleX317Sin(temp4, object.starAngleY)318temp4 *= 3319object.starFrame = object.starAngleY320object.starFrame &= 15321object.starFrame >>= 2322object.starFrame += object.starType323while temp0 < 4324Sin(temp2, temp1)325temp2 <<= 12326Cos(temp3, temp1)327temp3 <<= 10328Sin(temp5, temp1)329temp5 *= temp4330temp3 += temp5331temp2 *= object.starRadius332temp2 >>= 7333temp3 *= object.starRadius334temp3 >>= 7335temp2 += object.xpos336temp3 += object.ypos337temp3 -= 0x3C0000338DrawSpriteXY(object.starFrame, temp2, temp3)339temp0++340temp1 += 128341loop342end if343end event344345346event ObjectStartup347LoadSpriteSheet("Global/Items.gif")348SpriteFrame(-8, -8, 16, 16, 1, 137)349SpriteFrame(-8, -8, 16, 16, 1, 202)350SpriteFrame(-8, -44, 16, 64, 1, 137)351SpriteFrame(-8, -28, 16, 48, 1, 153)352SpriteFrame(-1, -1, 3, 3, 76, 214)353SpriteFrame(-3, -3, 7, 7, 68, 214)354SpriteFrame(-7, -7, 15, 15, 52, 214)355SpriteFrame(-3, -3, 7, 7, 68, 214)356357SetTableValue(TypeName[Star Post], DebugMode_ObjCount, DebugMode_TypesTable)358SetTableValue(StarPost_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)359SetTableValue(StarPost_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)360DebugMode_ObjCount++361362if starPostID >= 32363arrayPos0 = starPostID364currentPlayer = 0365while currentPlayer < playerCount366player[currentPlayer].xpos = object[arrayPos0].xpos367player[currentPlayer].ypos = object[arrayPos0].ypos368currentPlayer++369loop370371foreach (TypeName[Star Post], arrayPos1, ALL_ENTITIES)372if object[arrayPos1].id < object[arrayPos0].id373object[arrayPos1].state = STARPOST_SPUN374object[arrayPos1].animation = STARPOST_ANI_SPUN375object[arrayPos1].ballAngle = 0376end if377next378379camera[0].xpos = player[0].ixpos380camera[0].ypos = player[0].iypos381382object[arrayPos0].state = STARPOST_SPUN383object[arrayPos0].animation = STARPOST_ANI_SPUN384385#platform: USE_ORIGINS386player.score = recScore387388if player.deadResetRings == true389player[0].rings = 0390player.deadResetRings = false391else392player[0].rings = recRing393end if394395ringExtraLife = 100396ringExtraLife += player[0].rings397temp0 = player[0].rings398temp0 %= 100399ringExtraLife -= temp0400if ringExtraLife > 300401ringExtraLife = 1000402end if403#endplatform404405stage.milliSeconds = recMilliSeconds406stage.seconds = recSeconds407stage.minutes = recMinutes408409#platform: USE_ORIGINS410StageStatsUsabilityParam1 = StatsUsabilityParam1411StageStatsUsabilityParam2 = StatsUsabilityParam2412StageStatsUsabilityParam3 = StatsUsabilityParam3413StageStatsUsabilityParam4 = StatsUsabilityParam4414StageStatsUsabilityParam5 = StatsUsabilityParam5415else416game.timeOver = false417#endplatform418end if419end event420421422// ========================423// Editor Events424// ========================425426event RSDKDraw427DrawSprite(0)428end event429430431event RSDKLoad432LoadSpriteSheet("Global/Items.gif")433SpriteFrame(-8, -44, 16, 64, 1, 137)434435SetVariableAlias(ALIAS_VAR_PROPVAL, "id")436end event437438439