Path: blob/master/Sonic 2/Scripts/DEZ/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 == 070foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)71if player[currentPlayer].xvel < 0x6000072BoxCollisionTest(C_TOUCH, object.entityPos, -64, -32, 8, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)73else74BoxCollisionTest(C_TOUCH, object.entityPos, -88, -32, 8, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)75end if7677object.isOpen |= checkResult78next79else80foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)81if player[currentPlayer].xvel > -0x6000082BoxCollisionTest(C_TOUCH, object.entityPos, -8, -32, 64, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)83else84BoxCollisionTest(C_TOUCH, object.entityPos, -8, -32, 88, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)85end if8687object.isOpen |= checkResult88next89end if90end event919293event ObjectDraw94temp0 = object.movePos95FlipSign(temp0)96temp0 += object.ypos97DrawSpriteFX(0, FX_FLIP, object.xpos, temp0)98end event99100101event ObjectStartup102CheckCurrentStageFolder("Zone12")103if checkResult == true104// Check if in DEZ and then... load CPZ sprites...105LoadSpriteSheet("CPZ/Objects.gif")106SpriteFrame(-8, -32, 16, 64, 206, 142)107else108LoadSpriteSheet("MBZ/Objects.gif")109SpriteFrame(-8, -32, 16, 64, 93, 312)110end if111112foreach (TypeName[One Way Door], arrayPos0, ALL_ENTITIES)113if object[arrayPos0].propertyValue == 1114object[arrayPos0].direction = FLIP_X115end if116117object[arrayPos0].drawOrder = 4118next119120SetTableValue(TypeName[One Way Door], DebugMode_ObjCount, DebugMode_TypesTable)121SetTableValue(OneWayDoor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)122SetTableValue(OneWayDoor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)123DebugMode_ObjCount++124end event125126127// ========================128// Editor Events129// ========================130131event RSDKEdit132if editor.returnVariable == true133switch editor.variableID134case EDIT_VAR_PROPVAL // property value135checkResult = object.propertyValue136break137138case 0 // type139checkResult = object.propertyValue140break141142end switch143else144switch editor.variableID145case EDIT_VAR_PROPVAL // property value146object.propertyValue = editor.variableValue147break148149case 0 // type150object.propertyValue = editor.variableValue151break152153end switch154end if155end event156157158event RSDKDraw159DrawSprite(0)160end event161162163event RSDKLoad164CheckCurrentStageFolder("Zone12")165if checkResult == true166// Even for the editor, there's not really anything that can be done here since167// the sprites aren't even present on the DEZ sheet at all...168LoadSpriteSheet("CPZ/Objects.gif")169SpriteFrame(-8, -32, 16, 64, 206, 142)170else171LoadSpriteSheet("MBZ/Objects.gif")172SpriteFrame(-8, -32, 16, 64, 93, 312)173end if174175AddEditorVariable("type")176SetActiveVariable("type")177AddEnumVariable("Left Only", 0)178AddEnumVariable("Right Only", 1)179end event180181182