2020-09-27 20:48:01 -03:00
|
|
|
#include "framework.h"
|
|
|
|
#include "generic_objects.h"
|
|
|
|
|
2021-08-25 08:16:35 +02:00
|
|
|
// objects
|
2020-09-29 09:53:36 -03:00
|
|
|
#include "generic_trapdoor.h"
|
2020-09-27 20:48:01 -03:00
|
|
|
#include "generic_bridge.h"
|
|
|
|
|
2021-08-25 08:16:35 +02:00
|
|
|
// switches
|
|
|
|
#include "cog_switch.h"
|
2021-08-25 09:42:17 +02:00
|
|
|
#include "rail_switch.h"
|
|
|
|
#include "jump_switch.h"
|
2021-08-26 05:46:10 +02:00
|
|
|
#include "generic_switch.h"
|
|
|
|
#include "crowbar_switch.h"
|
|
|
|
#include "underwater_switch.h"
|
2021-08-28 06:37:22 +02:00
|
|
|
#include "pulley_switch.h"
|
|
|
|
#include "fullblock_switch.h"
|
2021-09-08 10:03:43 +02:00
|
|
|
#include "turn_switch.h"
|
2021-08-25 08:16:35 +02:00
|
|
|
|
2021-09-05 05:52:50 +02:00
|
|
|
// Doors
|
|
|
|
#include "generic_doors.h"
|
|
|
|
#include "double_doors.h"
|
|
|
|
#include "pushpull_kick_door.h"
|
|
|
|
#include "sequence_door.h"
|
|
|
|
#include "steel_door.h"
|
|
|
|
#include "underwater_door.h"
|
|
|
|
|
2021-09-22 10:55:48 +02:00
|
|
|
// Traps
|
|
|
|
#include "Objects/Generic/Traps/dart_emitter.h"
|
|
|
|
|
2020-09-27 20:48:01 -03:00
|
|
|
/// necessary import
|
|
|
|
#include "setup.h"
|
|
|
|
|
2021-08-28 06:37:22 +02:00
|
|
|
using namespace TEN::Entities::Switches;
|
2021-09-05 05:52:50 +02:00
|
|
|
using namespace TEN::Entities::Doors;
|
2021-09-22 10:55:48 +02:00
|
|
|
using namespace TEN::Entities::Traps;
|
2021-08-25 08:16:35 +02:00
|
|
|
|
2020-09-27 20:48:01 -03:00
|
|
|
static void StartObject()
|
|
|
|
{
|
2020-12-21 13:16:29 -03:00
|
|
|
auto obj = &Objects[ID_TRAPDOOR1];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseTrapDoor;
|
|
|
|
obj->collision = TrapDoorCollision;
|
|
|
|
obj->control = TrapDoorControl;
|
2021-06-12 16:39:13 -04:00
|
|
|
obj->floorBorder = TrapDoorFloorBorder;
|
|
|
|
obj->ceilingBorder = TrapDoorCeilingBorder;
|
|
|
|
obj->floor = TrapDoorFloor;
|
|
|
|
obj->ceiling = TrapDoorCeiling;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_TRAPDOOR2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseTrapDoor;
|
|
|
|
obj->collision = TrapDoorCollision;
|
|
|
|
obj->control = TrapDoorControl;
|
2021-06-12 16:39:13 -04:00
|
|
|
obj->floorBorder = TrapDoorFloorBorder;
|
|
|
|
obj->ceilingBorder = TrapDoorCeilingBorder;
|
|
|
|
obj->floor = TrapDoorFloor;
|
|
|
|
obj->ceiling = TrapDoorCeiling;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_TRAPDOOR3];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseTrapDoor;
|
|
|
|
obj->collision = TrapDoorCollision;
|
|
|
|
obj->control = TrapDoorControl;
|
2021-06-12 16:39:13 -04:00
|
|
|
obj->floorBorder = TrapDoorFloorBorder;
|
|
|
|
obj->ceilingBorder = TrapDoorCeilingBorder;
|
|
|
|
obj->floor = TrapDoorFloor;
|
|
|
|
obj->ceiling = TrapDoorCeiling;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_FLOOR_TRAPDOOR1];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseTrapDoor;
|
|
|
|
obj->collision = FloorTrapDoorCollision;
|
|
|
|
obj->control = TrapDoorControl;
|
2021-06-15 19:48:30 -04:00
|
|
|
obj->floorBorder = TrapDoorFloorBorder;
|
|
|
|
obj->ceilingBorder = TrapDoorCeilingBorder;
|
|
|
|
obj->floor = TrapDoorFloor;
|
|
|
|
obj->ceiling = TrapDoorCeiling;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_FLOOR_TRAPDOOR2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseTrapDoor;
|
|
|
|
obj->collision = FloorTrapDoorCollision;
|
|
|
|
obj->control = TrapDoorControl;
|
2021-06-15 19:48:30 -04:00
|
|
|
obj->floorBorder = TrapDoorFloorBorder;
|
|
|
|
obj->ceilingBorder = TrapDoorCeilingBorder;
|
|
|
|
obj->floor = TrapDoorFloor;
|
|
|
|
obj->ceiling = TrapDoorCeiling;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_CEILING_TRAPDOOR1];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseTrapDoor;
|
|
|
|
obj->collision = CeilingTrapDoorCollision;
|
|
|
|
obj->control = TrapDoorControl;
|
2021-06-15 19:52:39 -04:00
|
|
|
obj->floorBorder = TrapDoorFloorBorder;
|
|
|
|
obj->ceilingBorder = TrapDoorCeilingBorder;
|
|
|
|
obj->floor = TrapDoorFloor;
|
|
|
|
obj->ceiling = TrapDoorCeiling;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_CEILING_TRAPDOOR2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseTrapDoor;
|
|
|
|
obj->collision = CeilingTrapDoorCollision;
|
|
|
|
obj->control = TrapDoorControl;
|
2021-06-15 19:52:39 -04:00
|
|
|
obj->floorBorder = TrapDoorFloorBorder;
|
|
|
|
obj->ceilingBorder = TrapDoorCeilingBorder;
|
|
|
|
obj->floor = TrapDoorFloor;
|
|
|
|
obj->ceiling = TrapDoorCeiling;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_BRIDGE_FLAT];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
2021-01-06 17:53:13 -03:00
|
|
|
obj->initialise = InitialiseBridge;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->floor = BridgeFloor<0>;
|
|
|
|
obj->ceiling = BridgeCeiling<0>;
|
2021-01-27 01:04:31 -03:00
|
|
|
obj->floorBorder = BridgeFloorBorder<0>;
|
|
|
|
obj->ceilingBorder = BridgeCeilingBorder<0>;
|
2020-12-21 13:16:29 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_BRIDGE_TILT1];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
2021-01-06 17:53:13 -03:00
|
|
|
obj->initialise = InitialiseBridge;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->floor = BridgeFloor<1>;
|
|
|
|
obj->ceiling = BridgeCeiling<1>;
|
2021-01-27 01:04:31 -03:00
|
|
|
obj->floorBorder = BridgeFloorBorder<1>;
|
|
|
|
obj->ceilingBorder = BridgeCeilingBorder<1>;
|
2020-12-21 13:16:29 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_BRIDGE_TILT2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
2021-01-06 17:53:13 -03:00
|
|
|
obj->initialise = InitialiseBridge;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->floor = BridgeFloor<2>;
|
|
|
|
obj->ceiling = BridgeCeiling<2>;
|
2021-01-27 01:04:31 -03:00
|
|
|
obj->floorBorder = BridgeFloorBorder<2>;
|
|
|
|
obj->ceilingBorder = BridgeCeilingBorder<2>;
|
2020-12-21 13:16:29 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_BRIDGE_TILT3];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
2021-01-06 17:53:13 -03:00
|
|
|
obj->initialise = InitialiseBridge;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->floor = BridgeFloor<3>;
|
|
|
|
obj->ceiling = BridgeCeiling<3>;
|
2021-01-27 01:04:31 -03:00
|
|
|
obj->floorBorder = BridgeFloorBorder<3>;
|
|
|
|
obj->ceilingBorder = BridgeCeilingBorder<3>;
|
2020-12-21 13:16:29 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_BRIDGE_TILT4];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
2021-01-06 17:53:13 -03:00
|
|
|
obj->initialise = InitialiseBridge;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->floor = BridgeFloor<4>;
|
|
|
|
obj->ceiling = BridgeCeiling<4>;
|
2021-01-27 01:04:31 -03:00
|
|
|
obj->floorBorder = BridgeFloorBorder<4>;
|
|
|
|
obj->ceilingBorder = BridgeCeilingBorder<4>;
|
2020-12-21 13:16:29 -03:00
|
|
|
}
|
2020-09-27 20:48:01 -03:00
|
|
|
}
|
|
|
|
|
2021-08-25 08:16:35 +02:00
|
|
|
void StartSwitches()
|
|
|
|
{
|
|
|
|
OBJECT_INFO* obj;
|
|
|
|
|
|
|
|
obj = &Objects[ID_COG_SWITCH];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = CogSwitchCollision;
|
|
|
|
obj->control = CogSwitchControl;
|
|
|
|
obj->hitEffect = HIT_RICOCHET;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
2021-08-25 09:42:17 +02:00
|
|
|
|
|
|
|
obj = &Objects[ID_LEVER_SWITCH];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = RailSwitchCollision;
|
|
|
|
obj->control = SwitchControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_JUMP_SWITCH];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = JumpSwitchCollision;
|
|
|
|
obj->control = SwitchControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
2021-08-26 05:46:10 +02:00
|
|
|
|
|
|
|
for (int objNum = ID_SWITCH_TYPE1; objNum <= ID_SWITCH_TYPE16; objNum++)
|
|
|
|
{
|
|
|
|
obj = &Objects[objNum];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = SwitchCollision;
|
|
|
|
obj->control = SwitchControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_CROWBAR_SWITCH];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = CrowbarSwitchCollision;
|
|
|
|
obj->control = SwitchControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int objNum = ID_UNDERWATER_SWITCH1; objNum <= ID_UNDERWATER_SWITCH4; objNum++)
|
|
|
|
{
|
|
|
|
obj = &Objects[objNum];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = SwitchControl;
|
2021-09-06 05:27:27 +02:00
|
|
|
obj->collision = UnderwaterSwitchCollision;
|
2021-08-26 05:46:10 +02:00
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
|
|
|
}
|
2021-08-28 06:37:22 +02:00
|
|
|
|
|
|
|
obj = &Objects[ID_PULLEY];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialisePulleySwitch;
|
|
|
|
obj->control = SwitchControl;
|
|
|
|
obj->collision = PulleySwitchCollision;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
|
|
|
|
2021-09-08 10:03:43 +02:00
|
|
|
obj = &Objects[ID_TURN_SWITCH];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = TurnSwitchControl;
|
|
|
|
obj->collision = TurnSwitchCollision;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
|
|
|
|
2021-08-28 06:37:22 +02:00
|
|
|
obj = &Objects[ID_SEQUENCE_SWITCH1];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = FullBlockSwitchCollision;
|
|
|
|
obj->control = FullBlockSwitchControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SEQUENCE_SWITCH2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = FullBlockSwitchCollision;
|
|
|
|
obj->control = FullBlockSwitchControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SEQUENCE_SWITCH3];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = FullBlockSwitchCollision;
|
|
|
|
obj->control = FullBlockSwitchControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
2021-08-25 08:16:35 +02:00
|
|
|
}
|
|
|
|
|
2021-09-05 05:52:50 +02:00
|
|
|
void StartDoors()
|
|
|
|
{
|
|
|
|
OBJECT_INFO* obj;
|
|
|
|
|
2021-09-12 05:09:20 +02:00
|
|
|
for (int objNum = ID_DOOR_TYPE1; objNum <= ID_DOOR_TYPE30; objNum++)
|
2021-09-05 05:52:50 +02:00
|
|
|
{
|
|
|
|
obj = &Objects[objNum];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseDoor;
|
|
|
|
obj->control = DoorControl;
|
|
|
|
obj->collision = DoorCollision;
|
|
|
|
obj->hitEffect = HIT_RICOCHET;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_LIFT_DOORS1];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseDoor;
|
|
|
|
obj->control = DoorControl;
|
|
|
|
obj->hitEffect = HIT_RICOCHET;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_LIFT_DOORS2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseDoor;
|
|
|
|
obj->control = DoorControl;
|
|
|
|
obj->hitEffect = HIT_RICOCHET;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SEQUENCE_DOOR1];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseDoor;
|
|
|
|
obj->collision = DoorCollision;
|
|
|
|
obj->control = SequenceDoorControl;
|
|
|
|
obj->hitEffect = HIT_RICOCHET;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int i = ID_DOUBLE_DOORS1; i <= ID_DOUBLE_DOORS4; i++)
|
|
|
|
{
|
|
|
|
obj = &Objects[i];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseDoor;
|
|
|
|
obj->collision = DoubleDoorCollision;
|
|
|
|
obj->control = PushPullKickDoorControl;
|
|
|
|
obj->hitEffect = HIT_RICOCHET;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int i = ID_UNDERWATER_DOOR1; i <= ID_UNDERWATER_DOOR4; i++)
|
|
|
|
{
|
|
|
|
obj = &Objects[i];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseDoor;
|
|
|
|
obj->collision = UnderwaterDoorCollision;
|
|
|
|
obj->control = PushPullKickDoorControl;
|
|
|
|
obj->hitEffect = HIT_RICOCHET;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int objNum = ID_PUSHPULL_DOOR1; objNum <= ID_KICK_DOOR4; objNum++)
|
|
|
|
{
|
|
|
|
obj = &Objects[objNum];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseDoor;
|
|
|
|
obj->collision = PushPullKickDoorCollision;
|
|
|
|
obj->control = PushPullKickDoorControl;
|
|
|
|
obj->hitEffect = HIT_RICOCHET;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_STEEL_DOOR];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSteelDoor;
|
|
|
|
obj->collision = SteelDoorCollision;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-22 10:55:48 +02:00
|
|
|
void StartTraps()
|
|
|
|
{
|
|
|
|
OBJECT_INFO* obj;
|
|
|
|
|
|
|
|
obj = &Objects[ID_DARTS];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->shadowSize = UNIT_SHADOW / 2;
|
|
|
|
//obj->drawRoutine = DrawDart;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->control = DartControl;
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_DART_EMITTER];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = DartEmitterControl;
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_HOMING_DART_EMITTER];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = DartEmitterControl;
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-09-27 20:48:01 -03:00
|
|
|
void InitialiseGenericObjects()
|
|
|
|
{
|
2021-09-22 10:55:48 +02:00
|
|
|
StartTraps();
|
2020-09-27 20:48:01 -03:00
|
|
|
StartObject();
|
2021-08-25 08:16:35 +02:00
|
|
|
StartSwitches();
|
2021-09-05 05:52:50 +02:00
|
|
|
StartDoors();
|
2020-09-27 20:48:01 -03:00
|
|
|
}
|