Path: blob/master/Sonic 1/Scripts/SBZ/OneWayDoor.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: One Way Door Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.state : object.isOpen12private alias object.value0 : object.movePos1314// Player Aliases15private alias object.xpos : player.xpos16private alias object.xvel : player.xvel171819// ========================20// Function Declarations21// ========================2223reserve function OneWayDoor_DebugDraw24reserve function OneWayDoor_DebugSpawn252627// ========================28// Tables29// ========================3031private function OneWayDoor_DebugDraw32DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)33DrawSpriteFX(1, FX_FLIP, object.xpos, object.ypos)34end function353637private function OneWayDoor_DebugSpawn38CreateTempObject(TypeName[One Way Door], object.direction, object.xpos, object.ypos)39object[tempObjectPos].direction = object.direction40end function414243// ========================44// Events45// ========================4647event ObjectUpdate48if object.isOpen == false49if object.movePos > 050object.movePos -= 0x4000051end if52else53if object.movePos < 0x20000054object.movePos += 0x4000055end if56end if5758object.ypos -= object.movePos59foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)60BoxCollisionTest(C_SOLID, object.entityPos, -8, -32, 8, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)61next6263object.ypos += object.movePos64object.ypos += object.movePos65foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)66BoxCollisionTest(C_SOLID, object.entityPos, -8, 0, 8, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)67next6869object.ypos -= object.movePos70object.isOpen = 071if object.propertyValue == 272temp0 = object.xpos73temp0 += 0x20000074foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)75if player[currentPlayer].xpos < temp076object.isOpen |= true77end if78next7980if object.isOpen == false81object.propertyValue = 082end if83else84if object.propertyValue == 085foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)86if player[currentPlayer].xvel < 0x6000087BoxCollisionTest(C_TOUCH, object.entityPos, -64, -32, 8, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)88else89BoxCollisionTest(C_TOUCH, object.entityPos, -88, -32, 8, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)90end if91object.isOpen |= checkResult92next93else94foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)95if player[currentPlayer].xvel > -0x6000096BoxCollisionTest(C_TOUCH, object.entityPos, -8, -32, 64, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)97else98BoxCollisionTest(C_TOUCH, object.entityPos, -8, -32, 88, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)99end if100object.isOpen |= checkResult101next102end if103end if104end event105106107event ObjectDraw108temp0 = object.movePos109FlipSign(temp0)110temp0 += object.ypos111DrawSpriteFX(0, FX_FLIP, object.xpos, temp0)112113temp0 = object.movePos114temp0 += object.ypos115DrawSpriteFX(1, FX_FLIP, object.xpos, temp0)116end event117118119event ObjectStartup120LoadSpriteSheet("SBZ/Objects.gif")121SpriteFrame(-8, -32, 16, 32, 449, 50)122SpriteFrame(-8, 0, 16, 32, 449, 82)123foreach (TypeName[One Way Door], arrayPos0, ALL_ENTITIES)124if object[arrayPos0].propertyValue == 1125object[arrayPos0].direction = FLIP_X126end if127next128SetTableValue(TypeName[One Way Door], DebugMode_ObjCount, DebugMode_TypesTable)129SetTableValue(OneWayDoor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)130SetTableValue(OneWayDoor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)131DebugMode_ObjCount++132end event133134135// ========================136// Editor Events137// ========================138139event RSDKEdit140if editor.returnVariable == true141switch editor.variableID142case EDIT_VAR_PROPVAL // property value143checkResult = object.propertyValue144break145146case 0 // type147checkResult = object.propertyValue148break149150end switch151else152switch editor.variableID153case EDIT_VAR_PROPVAL // property value154object.propertyValue = editor.variableValue155break156157case 0 // type158object.propertyValue = editor.variableValue159break160161end switch162end if163end event164165166event RSDKDraw167object.direction = FLIP_NONE168if object.propertyValue == 1169object.direction = FLIP_X170end if171172DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)173DrawSpriteFX(1, FX_FLIP, object.xpos, object.ypos)174end event175176177event RSDKLoad178LoadSpriteSheet("SBZ/Objects.gif")179SpriteFrame(-8, -32, 16, 32, 449, 50)180SpriteFrame(-8, 0, 16, 32, 449, 82)181182AddEditorVariable("type")183SetActiveVariable("type")184AddEnumVariable("Left Only", 0)185AddEnumVariable("Right Only", 1)186AddEnumVariable("Open Once (Left Only)", 2)187end event188189190