Path: blob/master/Sonic 2/Scripts/WFZ/Launcher.txt
1479 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Launcher Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.startPos.x12private alias object.value1 : object.endPos.x13private alias object.value2 : object.velIncrease14private alias object.value3 : object.stoodPlayers1516// States17private alias 0 : LAUNCHER_IDLE18private alias 1 : LAUNCHER_LAUNCHING19private alias 2 : LAUNCHER_RETRACTING2021// Player Aliases22private alias object.state : player.state23private alias object.xpos : player.xpos24private alias object.xvel : player.xvel25private alias object.yvel : player.yvel26private alias object.speed : player.speed27private alias object.direction : player.direction28private alias object.gravity : player.gravity29private alias object.animation : player.animation3031private alias object.value17 : debugMode.currentSelection323334// ========================35// Function Declarations36// ========================3738reserve function Launcher_DebugDraw39reserve function Launcher_DebugSpawn404142// ========================43// Static Values44// ========================4546private value Launcher_startDebugID = 0474849// ========================50// Function Definitions51// ========================5253private function Launcher_DebugDraw54DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)55end function565758private function Launcher_DebugSpawn59temp0 = debugMode[0].currentSelection60temp0 -= Launcher_startDebugID61temp0++6263temp0 <<= 264CreateTempObject(TypeName[Launcher], temp0, object.xpos, object.ypos)6566object[tempObjectPos].startPos.x = object.xpos67object[tempObjectPos].endPos.x = object.xpos68object[tempObjectPos].direction = object.direction69temp0 <<= 2070if object.direction == FACING_RIGHT71object[tempObjectPos].endPos.x -= temp072object[tempObjectPos].velIncrease = -0x800073else74object[tempObjectPos].endPos.x += temp075object[tempObjectPos].velIncrease = 0x800076end if77end function787980// ========================81// Events82// ========================8384event ObjectUpdate85switch object.state86case LAUNCHER_IDLE87break8889case LAUNCHER_LAUNCHING90object.xvel += object.velIncrease91object.xpos += object.xvel9293temp0 = false94if object.direction == FLIP_NONE95if object.xpos <= object.endPos.x96temp0 = true97end if98else99if object.xpos >= object.endPos.x100temp0 = true101end if102end if103104if temp0 == true105temp2 = 0106foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)107GetBit(temp0, object.stoodPlayers, temp2)108if temp0 == true109if player[currentPlayer].yvel >= 0110player[currentPlayer].xvel = object.xvel111player[currentPlayer].speed = object.xvel112player[currentPlayer].yvel = -0x40000113player[currentPlayer].gravity = 1114#platform: USE_STANDALONE115player[currentPlayer].state = Player_State_Air116#endplatform117#platform: USE_ORIGINS118player[currentPlayer].state = Player_State_Air_NoDropDash119#endplatform120player[currentPlayer].direction = object.direction121player[currentPlayer].direction ^= FACING_LEFT122end if123end if124temp2++125next126object.state = LAUNCHER_RETRACTING127end if128break129130case LAUNCHER_RETRACTING131if object.direction == FLIP_NONE132object.xpos += 0x40000133if object.xpos >= object.startPos.x134object.xpos = object.startPos.x135object.priority = PRIORITY_BOUNDS136object.state = LAUNCHER_IDLE137end if138else139object.xpos -= 0x40000140if object.xpos <= object.startPos.x141object.xpos = object.startPos.x142object.priority = PRIORITY_BOUNDS143object.state = LAUNCHER_IDLE144end if145end if146break147148end switch149150temp2 = 0151foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)152GetBit(temp0, object.stoodPlayers, temp2)153if temp0 == true154if player[currentPlayer].yvel >= 0155player[currentPlayer].xpos = object.xpos156player[currentPlayer].xvel = 0157player[currentPlayer].speed = 0158player[currentPlayer].animation = ANI_STOPPED159player[currentPlayer].state = Player_State_Ground160player[currentPlayer].direction = object.direction161player[currentPlayer].direction ^= FACING_LEFT162end if163end if164165SetBit(object.stoodPlayers, temp2, false)166BoxCollisionTest(C_PLATFORM, object.entityPos, -16, -16, 16, -8, currentPlayer, -1, C_BOX, 1, C_BOX)167if checkResult == true168SetBit(object.stoodPlayers, temp2, true)169if object.state == LAUNCHER_IDLE170PlaySfx(SfxName[Launch], false)171if object.direction == FLIP_NONE172object.xvel = -0xC0000173else174object.xvel = 0xC0000175end if176object.priority = PRIORITY_ACTIVE177object.state = LAUNCHER_LAUNCHING178end if179end if180temp2++181next182end event183184185event ObjectDraw186DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)187end event188189190event ObjectStartup191CheckCurrentStageFolder("Zone11")192if checkResult == true193LoadSpriteSheet("SCZ/Objects.gif")194SpriteFrame(-16, -31, 32, 16, 152, 74)195else196LoadSpriteSheet("MBZ/Objects.gif")197SpriteFrame(-16, -31, 32, 16, 445, 403)198end if199200foreach (TypeName[Launcher], arrayPos0, ALL_ENTITIES)201object[arrayPos0].startPos.x = object[arrayPos0].xpos202object[arrayPos0].endPos.x = object[arrayPos0].xpos203204temp0 = object[arrayPos0].propertyValue205temp0 <<= 20206if object[arrayPos0].direction == FLIP_NONE207object[arrayPos0].endPos.x -= temp0208object[arrayPos0].velIncrease = -0x8000209else210object[arrayPos0].endPos.x += temp0211object[arrayPos0].velIncrease = 0x8000212end if213next214215temp0 = 0216Launcher_startDebugID = DebugMode_ObjCount217while temp0 < 4218SetTableValue(TypeName[Launcher], DebugMode_ObjCount, DebugMode_TypesTable)219SetTableValue(Launcher_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)220SetTableValue(Launcher_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)221DebugMode_ObjCount++222temp0++223loop224end event225226227// ========================228// Editor Events229// ========================230231event RSDKEdit232if editor.returnVariable == true233switch editor.variableID234case EDIT_VAR_PROPVAL // property value235checkResult = object.propertyValue236break237238case 0 // distance239checkResult = object.propertyValue240break241242end switch243else244switch editor.variableID245case EDIT_VAR_PROPVAL // property value246object.propertyValue = editor.variableValue247break248249case 0 // distance250object.propertyValue = editor.variableValue251break252253end switch254end if255end event256257258event RSDKDraw259DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)260261if editor.showGizmos == true262temp0 = object.propertyValue263temp0 <<= 20264265object.endPos.x = object.xpos266if object.direction == FLIP_NONE267object.endPos.x -= temp0268else269object.endPos.x += temp0270end if271272DrawArrow(object.xpos, object.ypos, object.endPos.x, object.ypos, 0xFF, 0xFF, 0x00)273end if274end event275276277event RSDKLoad278CheckCurrentStageFolder("Zone11")279if checkResult == true280LoadSpriteSheet("SCZ/Objects.gif")281SpriteFrame(-16, -31, 32, 16, 152, 74)282else283LoadSpriteSheet("MBZ/Objects.gif")284SpriteFrame(-16, -31, 32, 16, 445, 403)285end if286287AddEditorVariable("distance")288SetActiveVariable("distance")289end event290291292