Path: blob/master/Sonic 1/Scripts/SBZ/PushButton.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Push Button Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.stood12private alias object.value1 : object.exitPos.y13private alias object.value2 : object.fadeTimer1415private alias 0 : PUSHBUTTON_ACTIVE16private alias 1 : PUSHBUTTON_PLAYERFELL1718// Cutscene Bridge Aliases19private alias object.state : cutBridge.state20private alias object.value0 : cutBridge.timer2122private alias 0 : CUTBRIDGE_ACTIVE23private alias 1 : CUTBRIDGE_COLLAPSE2425// Player Aliases26private alias object.type : player.type27private alias object.ypos : player.ypos28private alias object.yvel : player.yvel29private alias object.direction : player.direction30private alias object.gravity : player.gravity31private alias object.animation : player.animation32private alias object.collisionBottom : player.collisionBottom3334// Game Mode Aliases35private alias 0 : MODE_NOSAVE36private alias 1 : MODE_SAVEGAME37private alias 2 : MODE_TIMEATTACK383940// ========================41// Function Declarations42// ========================4344reserve function PushButton_DebugDraw45reserve function PushButton_DebugSpawn464748// ========================49// Tables50// ========================5152private function PushButton_DebugDraw53DrawSprite(0)54end function555657private function PushButton_DebugSpawn58CreateTempObject(TypeName[Push Button], 0, object.xpos, object.ypos)59end function606162// ========================63// Events64// ========================6566event ObjectUpdate67object.stood = false6869foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)70if object.frame == 071BoxCollisionTest(C_SOLID, object.entityPos, -14, -4, 14, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)72if checkResult == COL_TOP73object.stood = true74player[currentPlayer].ypos += 0x6000075PlaySfx(SfxName[Button Press], false)76end if77else78if player[currentPlayer].yvel >= 079BoxCollisionTest(C_PLATFORM, object.entityPos, -14, -4, 14, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)80if checkResult == true81object.stood = true82player[currentPlayer].ypos += 0x2000083else84BoxCollisionTest(C_TOUCH, object.entityPos, -20, -12, 20, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)85if checkResult == true86player[currentPlayer].ypos = player[currentPlayer].collisionBottom87FlipSign(player[currentPlayer].ypos)88player[currentPlayer].ypos <<= 1689player[currentPlayer].ypos += object.ypos90player[currentPlayer].ypos -= 0x2000091player[currentPlayer].gravity = GRAVITY_AIR92end if93end if94end if95end if96next9798if object.propertyValue == 199// object[+1] should be an Eggman object100arrayPos0 = object.entityPos101arrayPos0++102if object.frame == 0103BoxCollisionTest(C_SOLID, object.entityPos, -14, -4, 14, 8, arrayPos0, -22, -24, 16, 32)104if checkResult == COL_TOP105object.stood = true106object[arrayPos0].ypos += 0x60000107object[arrayPos0].xvel = 0108object[arrayPos0].yvel = 0109object[arrayPos0].state++110PlaySfx(SfxName[Button Press], false)111end if112else113BoxCollisionTest(C_TOUCH, object.entityPos, -14, -4, 14, 8, arrayPos0, -22, -24, 16, 32)114if checkResult == true115object.stood = true116end if117end if118119if object.stood == true120arrayPos0++121if cutBridge[arrayPos0].state == CUTBRIDGE_ACTIVE122object.exitPos.y = stage.deathBoundary123object.exitPos.y += 0x100000124stage.deathBoundary = 0x7FFF0000125arrayPos1 = arrayPos0126arrayPos1 += 7127temp0 = 0128while arrayPos1 >= arrayPos0129cutBridge[arrayPos1].state = CUTBRIDGE_COLLAPSE130cutBridge[arrayPos1].timer = temp0131temp0 += 20132arrayPos1--133loop134end if135end if136137if object.state == PUSHBUTTON_PLAYERFELL138options.touchControls = false139object.fadeTimer += 4140music.volume -= 2141SetScreenFade(0, 0, 0, object.fadeTimer)142if object.fadeTimer == 384143fadeColor = 0144object.fadeTimer = 0145lampPostID = 0146object.direction = FACING_RIGHT147stage.listPos++148if options.gameMode == MODE_SAVEGAME149arrayPos1 = options.saveSlot150arrayPos1 <<= 3151if stage.player2Enabled == true152#platform: USE_STANDALONE153saveRAM[arrayPos1] = 3154#endplatform155#platform: USE_ORIGINS156switch stage.playerListPos157case PLAYER_SONIC_A158saveRAM[arrayPos1] = PLAYER_SONIC_TAILS159break160case PLAYER_AMY_A161saveRAM[arrayPos1] = PLAYER_AMY_TAILS162break163end switch164#endplatform165else166saveRAM[arrayPos1] = stage.playerListPos167end if168arrayPos1++169saveRAM[arrayPos1] = player.lives170arrayPos1++171saveRAM[arrayPos1] = player.score172arrayPos1++173saveRAM[arrayPos1] = player.scoreBonus174arrayPos1++175176// Bug Details:177// This is missing the check for if your save file is already past the next act178// This means the save file's act will be overwritten to SBZ3, even if you're on a Complete save file...179saveRAM[arrayPos1] = stage.listPos180saveRAM[arrayPos1]++181182arrayPos1++183saveRAM[arrayPos1] = specialStage.emeralds184arrayPos1++185saveRAM[arrayPos1] = specialStage.listPos186WriteSaveRAM()187end if188189temp0 = engine.trialMode190if stage.listPos >= stage.listSize191temp0 = true192end if193194if temp0 == false195LoadStage()196else197stage.activeList = PRESENTATION_STAGE198stage.listPos = 0199LoadStage()200end if201end if202else203if player[0].ypos > object.exitPos.y204object.state = PUSHBUTTON_PLAYERFELL205recAnimation = 0206temp0 = 0207foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)208temp1 = player[currentPlayer].animation209temp1 <<= 8210temp1 |= player[currentPlayer].direction211temp1 <<= temp0212recAnimation |= temp1213temp0 += 16214next215216player[0].type = TypeName[Blank Object]217end if218end if219end if220end event221222223event ObjectDraw224object.frame = object.stood225DrawSprite(object.frame)226end event227228229event ObjectStartup230LoadSpriteSheet("SBZ/Objects.gif")231SpriteFrame(-16, -8, 32, 16, 92, 1)232SpriteFrame(-16, -2, 32, 10, 92, 18)233foreach (TypeName[Push Button], arrayPos0, ALL_ENTITIES)234if object[arrayPos0].propertyValue == 1235object[arrayPos0].exitPos.y = 0x7FFF0000236end if237next238SetTableValue(TypeName[Push Button], DebugMode_ObjCount, DebugMode_TypesTable)239SetTableValue(PushButton_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)240SetTableValue(PushButton_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)241DebugMode_ObjCount++242end event243244245// ========================246// Editor Events247// ========================248249event RSDKEdit250if editor.returnVariable == true251switch editor.variableID252case EDIT_VAR_PROPVAL // property value253checkResult = object.propertyValue254break255256case 0 // type257checkResult = object.propertyValue258checkResult &= 1259break260261end switch262else263switch editor.variableID264case EDIT_VAR_PROPVAL // property value265object.propertyValue = editor.variableValue266break267268case 0 // type269object.propertyValue = editor.variableValue270object.propertyValue &= 1271break272273end switch274end if275end event276277278event RSDKDraw279DrawSprite(0)280end event281282283event RSDKLoad284LoadSpriteSheet("SBZ/Objects.gif")285SpriteFrame(-16, -8, 32, 16, 92, 1)286287AddEditorVariable("type")288SetActiveVariable("type")289AddEnumVariable("Normal", 0)290AddEnumVariable("Cutscene", 1)291end event292293294