Path: blob/master/Sonic 1/Scripts/Mission/FallSignPost.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: FallSignPost Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011// Variables12private alias object.value0 : object.spinCount13private alias object.value1 : object.spinTimer14private alias object.value2 : object.clearTimer15private alias object.value3 : object.signPostLanded1617// States18private alias 0 : FALLSIGNPOST_AWAITMISSIONCLEAR19private alias 1 : FALLSIGNPOST_FALLTOGROUND20private alias 2 : FALLSIGNPOST_SPINNINGONGROUND21private alias 3 : FALLSIGNPOST_LOCKPLAYERCONTROL2223// Player Aliases24private alias object.xpos : player.xpos25private alias object.ixpos : player.ixpos26private alias object.outOfBounds : player.outOfBounds27private alias object.state : player.state28private alias object.controlMode : player.controlMode29private alias object.interaction : player.interaction30private alias object.up : player.up31private alias object.down : player.down32private alias object.left : player.left33private alias object.right : player.right34private alias object.jumpHold : player.jumpHold35private alias object.jumpPress : player.jumpPress36private alias object.xvel : player.xvel37private alias object.yvel : player.yvel38private alias object.speed : player.speed39private alias object.animation : player.animation40private alias object.value3 : player.drownTimer41private alias object.value7 : player.invincibleTimer4243// Track Aliases44private alias 1 : TRACK_ACTFINISH4546// Reserved Object Slot Aliases47private alias 30 : SLOT_ACTFINISH4849// Path ID Aliases50private alias 0 : PATH_A515253// ========================54// Events55// ========================5657event ObjectUpdate58switch object.state59case FALLSIGNPOST_AWAITMISSIONCLEAR60if game.missionCondition == MISSION_CONDITION_CLEAR61game.missionCondition = 06263object.xpos = player[0].xpos64object.xpos -= 0x8000065object.ypos = screen.yoffset66object.ypos += 2467object.ypos <<= 166869screen.cameraStyle = CAMERASTYLE_HLOCKED7071ObjectTileCollision(CSIDE_FLOOR, 0, 32, PATH_A)72if checkResult == true73object.signPostLanded = true74end if7576object.state = FALLSIGNPOST_FALLTOGROUND77PlaySfx(SfxName[Sign Post], false)78end if79break8081case FALLSIGNPOST_FALLTOGROUND82object.clearTimer++83object.ypos += object.yvel84object.yvel += 0xC008586ObjectTileCollision(CSIDE_FLOOR, 0, 32, PATH_A)87if checkResult == true88if object.signPostLanded == false89object.spinCount = 490object.state = FALLSIGNPOST_SPINNINGONGROUND91end if92else93object.signPostLanded = false94end if9596if object.outOfBounds == true97object.spinCount = 498object.state = FALLSIGNPOST_SPINNINGONGROUND99end if100101object.spinTimer++102if object.spinTimer == 2103object.spinTimer = 0104object.frame++105if object.frame == 5106Rand(temp0, 48)107temp0 <<= 16108temp0 += object.xpos109temp0 -= 0x180000110Rand(temp1, 32)111temp1 <<= 16112temp1 += object.ypos113temp1 -= 0x140000114CreateTempObject(TypeName[Ring Sparkle], 0, temp0, temp1)115end if116117if object.frame == 9118object.frame = 1119Rand(temp0, 48)120temp0 <<= 16121temp0 += object.xpos122temp0 -= 0x180000123Rand(temp1, 32)124temp1 <<= 16125temp1 += object.ypos126temp1 -= 0x140000127CreateTempObject(TypeName[Ring Sparkle], 0, temp0, temp1)128end if129end if130break131132case FALLSIGNPOST_SPINNINGONGROUND133object.clearTimer++134if stage.timeEnabled == true135music.volume -= 2136end if137138object.spinTimer++139if object.spinTimer == 2140object.spinTimer = 0141object.frame++142if object.frame == 5143Rand(temp0, 48)144temp0 <<= 16145temp0 += object.xpos146temp0 -= 0x180000147Rand(temp1, 32)148temp1 <<= 16149temp1 += object.ypos150temp1 -= 0x140000151CreateTempObject(TypeName[Ring Sparkle], 0, temp0, temp1)152end if153154if object.frame == 9155object.frame = 1156Rand(temp0, 48)157temp0 <<= 16158temp0 += object.xpos159temp0 -= 0x180000160Rand(temp1, 32)161temp1 <<= 16162temp1 += object.ypos163temp1 -= 0x140000164CreateTempObject(TypeName[Ring Sparkle], 0, temp0, temp1)165object.spinCount--166if object.spinCount == 0167object.frame = 5168object.state = 3169end if170end if171end if172break173174case 3175player[0].controlMode = CONTROLMODE_NONE176player[0].interaction = false177player[0].up = false178player[0].down = false179player[0].left = false180player[0].right = false181player[0].jumpHold = false182player[0].jumpPress = false183184CheckEqual(player[0].state, Player_State_Ground)185temp0 = checkResult186CheckEqual(player[0].state, Player_State_Static)187temp0 |= checkResult188CheckEqual(player[0].outOfBounds, true)189temp0 |= checkResult190temp1 = screen.xoffset191temp1 += screen.xsize192temp1 += 32193CheckGreater(player[0].ixpos, temp1)194temp0 |= checkResult195if temp0 == true196player[0].state = Player_State_Static197player[0].controlMode = CONTROLMODE_NONE198player[0].interaction = false199player[0].up = false200player[0].down = false201player[0].left = false202player[0].right = false203player[0].jumpHold = false204player[0].jumpPress = false205player[0].xvel = 0206player[0].yvel = 0207player[0].speed = 0208player[0].animation = ANI_WAITING209screen.cameraEnabled = false210end if211break212213end switch214215if object.clearTimer > 0216player[0].drownTimer = 0217player[0].invincibleTimer = 80218end if219220CheckGreater(object.clearTimer, 60)221temp0 = checkResult222CheckEqual(object[SLOT_ACTFINISH].type, TypeName[Blank Object])223temp0 &= checkResult224if temp0 == true225CallNativeFunction2(NotifyCallback, NOTIFY_TOUCH_SIGNPOST, 0)226stage.timeEnabled = false227PlayMusic(TRACK_ACTFINISH)228object[SLOT_ACTFINISH].type = TypeName[Act Finish]229object[SLOT_ACTFINISH].drawOrder = 6230object[SLOT_ACTFINISH].priority = PRIORITY_ACTIVE231end if232end event233234235event ObjectDraw236if object.state > FALLSIGNPOST_AWAITMISSIONCLEAR237DrawSprite(0)238DrawSprite(object.frame)239end if240end event241242243event ObjectStartup244LoadSpriteSheet("Global/Items2.gif")245SpriteFrame(-24, 16, 48, 16, 34, 214)246SpriteFrame(-24, -16, 48, 32, 34, 182)247SpriteFrame(-16, -16, 32, 32, 1, 150)248SpriteFrame(-4, -16, 8, 32, 189, 131)249SpriteFrame(-16, -16, 32, 32, 1, 183)250SpriteFrame(-24, -16, 48, 32, 34, 83)251SpriteFrame(-16, -16, 32, 32, 1, 150)252SpriteFrame(-4, -16, 8, 32, 189, 131)253SpriteFrame(-16, -16, 32, 32, 1, 183)254255foreach (TypeName[FallSignPost], arrayPos0, ALL_ENTITIES)256object[arrayPos0].frame = 1257object[arrayPos0].spinCount = 16258object[arrayPos0].priority = PRIORITY_ACTIVE259next260end event261262263// ========================264// Editor Events265// ========================266267event RSDKDraw268DrawSprite(0)269end event270271272event RSDKLoad273LoadSpriteSheet("Global/Items2.gif")274SpriteFrame(-24, 16, 48, 16, 34, 214)275SpriteFrame(-24, -16, 48, 32, 34, 182)276277SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")278end event279280281