Path: blob/master/Sonic 2/Scripts/MPZ/HorizontalDoor.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Horizontal Door Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.timer12private alias object.value1 : object.startPos.x1314// Player Aliases15private alias object.yvel : player.yvel161718// ========================19// Function Declarations20// ========================2122reserve function HorizontalDoor_Setup23reserve function HorizontalDoor_DebugDraw24reserve function HorizontalDoor_DebugSpawn252627// ========================28// Events29// ========================3031private function HorizontalDoor_Setup32object[arrayPos0].priority = PRIORITY_ACTIVE33object[arrayPos0].timer = 034object[arrayPos0].xpos = object[arrayPos0].startPos.x3536if object[arrayPos0].direction == FLIP_X37object[arrayPos0].xpos -= 0x40000038end if39end function404142private function HorizontalDoor_DebugDraw43temp1 = object.xpos44if object.direction == FACING_LEFT45temp1 -= 0x40000046end if47DrawSpriteXY(0, temp1, object.ypos)48end function495051private function HorizontalDoor_DebugSpawn52CreateTempObject(TypeName[Horizontal Door], 0, object.xpos, object.ypos)5354// Door direction is based on the direction of the player when entering Debug Mode55object[tempObjectPos].direction = object.direction5657arrayPos0 = object[tempObjectPos].entityPos58object[arrayPos0].startPos.x = object.xpos59CallFunction(HorizontalDoor_Setup)60end function616263// ========================64// Events65// ========================6667event ObjectUpdate68temp0 = false6970temp1 = object.xpos7172// Check to see if any players have stepped within range for the door activation73object.xpos = object.startPos.x74foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)75if object.direction == FLIP_NONE76BoxCollisionTest(C_TOUCH, object.entityPos, -32, -16, 96, 64, currentPlayer, -1, -1, 1, 1)77if checkResult == true78temp0 = true79end if80else81BoxCollisionTest(C_TOUCH, object.entityPos, -160, -16, -32, 64, currentPlayer, -1, -1, 1, 1)82if checkResult == true83temp0 = true84end if85end if86next8788object.xpos = temp18990// A player has stepped within range, move the door91if temp0 == true92if object.timer < 493object.timer++94if object.direction == FLIP_NONE95object.xpos -= 0x10000096else97object.xpos += 0x10000098end if99end if100else101if object.timer > 0102object.timer--103if object.direction == FLIP_NONE104object.xpos += 0x100000105else106object.xpos -= 0x100000107end if108end if109end if110111foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)112if player[currentPlayer].yvel >= 0113BoxCollisionTest(C_SOLID, object.entityPos, -32, -12, 32, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)114end if115next116end event117118119event ObjectDraw120DrawSprite(0)121end event122123124event ObjectStartup125LoadSpriteSheet("MPZ/Objects.gif")126127// Horizontal Door Frame128SpriteFrame(-32, -12, 64, 24, 383, 207)129130foreach (TypeName[Horizontal Door], arrayPos0, ALL_ENTITIES)131object[arrayPos0].startPos.x = object[arrayPos0].xpos132CallFunction(HorizontalDoor_Setup)133next134135SetTableValue(TypeName[Horizontal Door], DebugMode_ObjCount, DebugMode_TypesTable)136SetTableValue(HorizontalDoor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)137SetTableValue(HorizontalDoor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)138DebugMode_ObjCount++139end event140141142// ========================143// Editor Events144// ========================145146event RSDKDraw147DrawSprite(0)148end event149150151event RSDKLoad152LoadSpriteSheet("MPZ/Objects.gif")153SpriteFrame(-32, -12, 64, 24, 383, 207)154155// Note that this object actually uses the `direction` variable for its direction, rather than property value156SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")157end event158159160