Path: blob/master/Sonic 2/Scripts/CPZ/OneWayDoor.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// 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.xvel : player.xvel161718// ========================19// Function Declarations20// ========================2122reserve function OneWayDoor_DebugDraw23reserve function OneWayDoor_DebugSpawn242526// ========================27// Function Definitions28// ========================2930private function OneWayDoor_DebugDraw31DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)32end function333435private function OneWayDoor_DebugSpawn36CreateTempObject(TypeName[One Way Door], object.direction, object.xpos, object.ypos)37object[tempObjectPos].direction = object.direction38end function394041// ========================42// Events43// ========================4445event ObjectUpdate46if object.isOpen == false47if object.movePos > 048object.movePos -= 0x8000049end if50else51if object.movePos < 0x40000052object.movePos += 0x8000053end if54end if5556object.ypos -= object.movePos57if object.movePos == 058foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)59BoxCollisionTest(C_SOLID, object.entityPos, -8, -32, 8, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)60next61else62foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)63BoxCollisionTest(C_SOLID, object.entityPos, -8, -32, 8, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)64next65end if6667object.ypos += object.movePos68object.isOpen = false69if object.propertyValue == 070// Door opens from left7172foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)73if player[currentPlayer].xvel < 0x6000074BoxCollisionTest(C_TOUCH, object.entityPos, -64, -32, 8, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)75else76BoxCollisionTest(C_TOUCH, object.entityPos, -88, -32, 8, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)77end if7879object.isOpen |= checkResult80next81else82// Door opens from right8384foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)85if player[currentPlayer].xvel > -0x6000086BoxCollisionTest(C_TOUCH, object.entityPos, -8, -32, 64, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)87else88BoxCollisionTest(C_TOUCH, object.entityPos, -8, -32, 88, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)89end if9091object.isOpen |= checkResult92next93end if94end event959697event ObjectDraw98temp0 = object.movePos99FlipSign(temp0)100temp0 += object.ypos101DrawSpriteFX(0, FX_FLIP, object.xpos, temp0)102end event103104105event ObjectStartup106LoadSpriteSheet("CPZ/Objects.gif")107SpriteFrame(-8, -32, 16, 64, 206, 142)108109foreach (TypeName[One Way Door], arrayPos0, ALL_ENTITIES)110if object[arrayPos0].propertyValue == 1111// Door opens from right, flip the sprite around to look like such too112object[arrayPos0].direction = FLIP_X113end if114next115116SetTableValue(TypeName[One Way Door], DebugMode_ObjCount, DebugMode_TypesTable)117SetTableValue(OneWayDoor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)118SetTableValue(OneWayDoor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)119DebugMode_ObjCount++120end event121122123// ========================124// Editor Events125// ========================126127event RSDKEdit128if editor.returnVariable == true129switch editor.variableID130case EDIT_VAR_PROPVAL // property value131checkResult = object.propertyValue132break133134case 0 // type135checkResult = object.propertyValue136break137138end switch139else140switch editor.variableID141case EDIT_VAR_PROPVAL // property value142object.propertyValue = editor.variableValue143break144145case 0 // type146object.propertyValue = editor.variableValue147break148149end switch150end if151end event152153154event RSDKDraw155DrawSprite(0)156end event157158159event RSDKLoad160LoadSpriteSheet("CPZ/Objects.gif")161SpriteFrame(-8, -32, 16, 64, 206, 142)162163AddEditorVariable("type")164SetActiveVariable("type")165AddEnumVariable("Left Only", 0)166AddEnumVariable("Right Only", 1)167end event168169170