2020-12-21 13:16:29 -03:00
|
|
|
#include "framework.h"
|
|
|
|
#include "setup.h"
|
|
|
|
#include "draw.h"
|
|
|
|
#include "collide.h"
|
2021-09-08 18:07:48 +03:00
|
|
|
#include "effects\effects.h"
|
|
|
|
#include "effects\tomb4fx.h"
|
2020-12-21 13:16:29 -03:00
|
|
|
#include "switch.h"
|
|
|
|
#include "missile.h"
|
|
|
|
#include "control.h"
|
2021-09-11 09:41:29 +03:00
|
|
|
#include "pickup\pickup.h"
|
2020-12-21 13:16:29 -03:00
|
|
|
#include "camera.h"
|
|
|
|
#include "lara_one_gun.h"
|
|
|
|
#include "lara_flare.h"
|
|
|
|
#include "lara_fire.h"
|
|
|
|
#include "objects.h"
|
|
|
|
#include "rope.h"
|
|
|
|
#include "traps.h"
|
2021-09-08 18:07:48 +03:00
|
|
|
#include "effects\flmtorch.h"
|
2020-12-21 13:16:29 -03:00
|
|
|
#include "level.h"
|
|
|
|
#include "tr4_bubbles.h"
|
|
|
|
/// objects initializer
|
|
|
|
#include "generic_objects.h"
|
|
|
|
#include "tr1_objects.h"
|
|
|
|
#include "tr2_objects.h"
|
|
|
|
#include "tr3_objects.h"
|
|
|
|
#include "tr4_objects.h"
|
|
|
|
#include "tr5_objects.h"
|
|
|
|
#include <tr4_littlebeetle.h>
|
|
|
|
/// register objects
|
|
|
|
#include "object_helper.h"
|
|
|
|
|
2021-08-28 06:37:22 +02:00
|
|
|
#include "generic_switch.h"
|
|
|
|
#include "fullblock_switch.h"
|
2021-08-29 10:04:49 +02:00
|
|
|
#include "creature_info.h"
|
2021-08-28 06:37:22 +02:00
|
|
|
|
|
|
|
using namespace TEN::Entities::Switches;
|
2020-12-21 13:16:29 -03:00
|
|
|
|
|
|
|
OBJECT_INFO Objects[ID_NUMBER_OBJECTS];
|
|
|
|
STATIC_INFO StaticObjects[MAX_STATICS];
|
|
|
|
|
|
|
|
void InitialiseGameFlags()
|
|
|
|
{
|
|
|
|
ZeroMemory(FlipMap, MAX_FLIPMAP * sizeof(int));
|
|
|
|
ZeroMemory(FlipStats, MAX_FLIPMAP * sizeof(int));
|
|
|
|
|
|
|
|
FlipEffect = -1;
|
|
|
|
FlipStatus = 0;
|
|
|
|
Camera.underwater = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ObjectObjects()
|
|
|
|
{
|
|
|
|
OBJECT_INFO* obj;
|
|
|
|
|
|
|
|
obj = &Objects[ID_CAMERA_TARGET];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SMASH_OBJECT1];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSmashObject;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->control = SmashObjectControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SMASH_OBJECT2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSmashObject;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->control = SmashObjectControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SMASH_OBJECT3];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSmashObject;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->control = SmashObjectControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SMASH_OBJECT4];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSmashObject;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->control = SmashObjectControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SMASH_OBJECT5];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSmashObject;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->control = SmashObjectControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SMASH_OBJECT6];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSmashObject;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->control = SmashObjectControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SMASH_OBJECT7];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSmashObject;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->control = SmashObjectControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SMASH_OBJECT8];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSmashObject;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->control = SmashObjectControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_CRUMBLING_FLOOR];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseFallingBlock;
|
|
|
|
obj->collision = FallingBlockCollision;
|
|
|
|
obj->control = FallingBlockControl;
|
|
|
|
//obj->floor = FallingBlockFloor;
|
|
|
|
//obj->ceiling = FallingBlockCeiling;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
}
|
|
|
|
|
2021-08-28 06:37:22 +02:00
|
|
|
/*obj = &Objects[ID_AIRLOCK_SWITCH];
|
2020-12-21 13:16:29 -03:00
|
|
|
if (obj->loaded)
|
|
|
|
{
|
2021-08-28 06:37:22 +02:00
|
|
|
obj->collision = TEN::Entities::Switches::SwitchCollision;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->control = SwitchControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
2021-08-28 06:37:22 +02:00
|
|
|
}*/
|
2020-12-21 13:16:29 -03:00
|
|
|
|
|
|
|
for (int objNum = ID_KEY_HOLE1; objNum <= ID_KEY_HOLE16; objNum++)
|
|
|
|
{
|
|
|
|
InitKeyHole(obj, objNum);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int objNum = ID_PUZZLE_HOLE1; objNum <= ID_PUZZLE_HOLE16; objNum++)
|
|
|
|
{
|
|
|
|
InitPuzzleHole(obj, objNum);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int objNum = ID_PUZZLE_DONE1; objNum <= ID_PUZZLE_DONE16; objNum++)
|
|
|
|
{
|
|
|
|
InitPuzzleDone(obj, objNum);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int objNum = ID_ANIMATING1; objNum <= ID_ANIMATING128; objNum++)
|
|
|
|
{
|
|
|
|
InitAnimating(obj, objNum);
|
|
|
|
}
|
|
|
|
|
|
|
|
InitAnimating(obj, ID_LASERHEAD_BASE);
|
|
|
|
InitAnimating(obj, ID_LASERHEAD_TENTACLE);
|
|
|
|
|
|
|
|
obj = &Objects[ID_TIGHT_ROPE];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseTightRope;
|
|
|
|
obj->collision = TightRopeCollision;
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_PARALLEL_BARS];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = ParallelBarsCollision;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_EARTHQUAKE];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_HIGH_OBJECT2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->control = HighObject2Control;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_LENS_FLARE];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
//obj->drawRoutine = DrawLensFlare;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_WATERFALLMIST];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = ControlWaterfallMist;
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int objNum = ID_WATERFALL1; objNum <= ID_WATERFALL6; objNum++)
|
|
|
|
{
|
|
|
|
obj = &Objects[objNum];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = ControlWaterfall;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_WATERFALLSS1];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = ControlWaterfall;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_WATERFALLSS2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = ControlWaterfall;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int objNum = ID_SHOOT_SWITCH1; objNum <= ID_SHOOT_SWITCH4; objNum++)
|
|
|
|
{
|
|
|
|
obj = &Objects[objNum];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseShootSwitch;
|
|
|
|
obj->control = ControlAnimatingSlots;
|
|
|
|
obj->collision = ShootSwitchCollision;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void TrapObjects()
|
|
|
|
{
|
|
|
|
OBJECT_INFO* obj;
|
|
|
|
obj = &Objects[ID_KILL_ALL_TRIGGERS];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = KillAllCurrentItems;
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->hitPoints = 0;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_FALLING_BLOCK];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseFallingBlock;
|
|
|
|
obj->collision = FallingBlockCollision;
|
|
|
|
obj->control = FallingBlockControl;
|
2021-06-16 10:19:46 -04:00
|
|
|
obj->floor = FallingBlockFloor;
|
|
|
|
obj->ceiling = FallingBlockCeiling;
|
|
|
|
obj->floorBorder = FallingBlockFloorBorder;
|
|
|
|
obj->ceilingBorder = FallingBlockCeilingBorder;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_FALLING_BLOCK2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseFallingBlock;
|
|
|
|
obj->collision = FallingBlockCollision;
|
|
|
|
obj->control = FallingBlockControl;
|
2021-06-16 10:19:46 -04:00
|
|
|
obj->floor = FallingBlockFloor;
|
|
|
|
obj->ceiling = FallingBlockCeiling;
|
|
|
|
obj->floorBorder = FallingBlockFloorBorder;
|
|
|
|
obj->ceilingBorder = FallingBlockCeilingBorder;
|
2020-12-21 13:16:29 -03:00
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Flame is always loaded
|
|
|
|
obj = &Objects[ID_FLAME];
|
|
|
|
{
|
|
|
|
obj->control = FlameControl;
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_FLAME_EMITTER];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseFlameEmitter;
|
|
|
|
obj->collision = FlameEmitterCollision;
|
|
|
|
obj->control = FlameEmitterControl;
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_FLAME_EMITTER2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseFlameEmitter2;
|
|
|
|
obj->collision = FlameEmitterCollision;
|
|
|
|
obj->control = FlameEmitter2Control;
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_FLAME_EMITTER3];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = FlameEmitter3Control;
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_GEN_SLOT2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
/*obj->initialise = InitialiseGenSlot2;
|
|
|
|
obj->control = GenSlot2Control;
|
|
|
|
obj->drawRoutine = DrawGenSlot2;*/
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_PORTAL];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
//obj->initialise = InitialisePortal;
|
|
|
|
//obj->control = PortalControl; // TODO: found the control procedure !
|
|
|
|
obj->drawRoutine = nullptr; // go to nullsub_44() !
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_TRIGGER_TRIGGERER];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = ControlTriggerTriggerer;
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
//FIXME
|
|
|
|
//InitialiseRopeTrap();
|
|
|
|
|
|
|
|
obj = &Objects[ID_ROPE];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseRope;
|
|
|
|
obj->control = RopeControl;
|
|
|
|
obj->collision = RopeCollision;
|
|
|
|
obj->drawRoutine = nullptr;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_POLEROPE];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = PoleCollision;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_WRECKING_BALL];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseWreckingBall;
|
|
|
|
obj->collision = WreckingBallCollision;
|
|
|
|
obj->control = WreckingBallControl;
|
|
|
|
//obj->drawRoutineExtra = DrawWreckingBall;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void InitialiseSpecialEffects()
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
SPARKS* sptr;
|
|
|
|
|
|
|
|
memset(&Sparks, 0, MAX_SPARKS * sizeof(SPARKS));
|
|
|
|
memset(&FireSparks, 0, MAX_SPARKS_FIRE * sizeof(FIRE_SPARKS));
|
|
|
|
memset(&SmokeSparks, 0, MAX_SPARKS_SMOKE * sizeof(SMOKE_SPARKS));
|
|
|
|
memset(&Gunshells, 0, MAX_GUNSHELL * sizeof(GUNSHELL_STRUCT));
|
|
|
|
memset(&Gunflashes, 0, (MAX_GUNFLASH * sizeof(GUNFLASH_STRUCT)));
|
|
|
|
memset(&Blood, 0, MAX_SPARKS_BLOOD * sizeof(BLOOD_STRUCT));
|
|
|
|
memset(&Splashes, 0, MAX_SPLASHES * sizeof(SPLASH_STRUCT));
|
|
|
|
memset(&Ripples, 0, MAX_RIPPLES * sizeof(RIPPLE_STRUCT));
|
|
|
|
memset(&Drips, 0, MAX_DRIPS * sizeof(DRIP_STRUCT));
|
|
|
|
memset(&ShockWaves, 0, MAX_SHOCKWAVE * sizeof(SHOCKWAVE_STRUCT));
|
|
|
|
|
|
|
|
sptr = &Sparks[0];
|
|
|
|
for (i = 0; i < MAX_SPARKS; i++)
|
|
|
|
{
|
|
|
|
sptr->on = false;
|
|
|
|
sptr->dynamic = -1;
|
|
|
|
sptr++;
|
|
|
|
}
|
|
|
|
|
|
|
|
NextFireSpark = 1;
|
|
|
|
NextSmokeSpark = 0;
|
|
|
|
NextGunShell = 0;
|
|
|
|
NextBubble = 0;
|
|
|
|
NextDrip = 0;
|
|
|
|
NextBlood = 0;
|
|
|
|
WBRoom = -1;
|
2021-08-28 06:37:22 +02:00
|
|
|
TEN::Entities::TR4::ClearScarabs();
|
2020-12-21 13:16:29 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
void CustomObjects()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void InitialiseObjects()
|
|
|
|
{
|
2021-08-05 13:31:42 +03:00
|
|
|
AllocTR4Objects();
|
|
|
|
AllocTR5Objects();
|
|
|
|
|
2020-12-21 13:16:29 -03:00
|
|
|
OBJECT_INFO* obj;
|
|
|
|
|
|
|
|
for (int i = 0; i < ID_NUMBER_OBJECTS; i++)
|
|
|
|
{
|
|
|
|
obj = &Objects[i];
|
|
|
|
obj->initialise = nullptr;
|
|
|
|
obj->collision = nullptr;
|
|
|
|
obj->control = nullptr;
|
|
|
|
obj->floor = nullptr;
|
|
|
|
obj->ceiling = nullptr;
|
|
|
|
obj->drawRoutine = DrawAnimatingItem;
|
|
|
|
obj->drawRoutineExtra = nullptr;
|
|
|
|
obj->pivotLength = 0;
|
|
|
|
obj->radius = DEFAULT_RADIUS;
|
|
|
|
obj->shadowSize = NO_SHADOW;
|
|
|
|
obj->hitPoints = -16384;
|
|
|
|
obj->hitEffect = HIT_NONE;
|
|
|
|
obj->explodableMeshbits = 0;
|
|
|
|
obj->intelligent = false;
|
|
|
|
obj->waterCreature = false;
|
|
|
|
obj->saveMesh = false;
|
|
|
|
obj->saveAnim = false;
|
|
|
|
obj->saveFlags = false;
|
|
|
|
obj->saveHitpoints = false;
|
|
|
|
obj->savePosition = false;
|
|
|
|
obj->nonLot = true;
|
|
|
|
obj->usingDrawAnimatingItem = true;
|
|
|
|
obj->semiTransparent = false;
|
|
|
|
obj->undead = false;
|
|
|
|
obj->zoneType = ZONE_NULL;
|
|
|
|
obj->biteOffset = -1;
|
|
|
|
obj->meshSwapSlot = NO_ITEM;
|
|
|
|
obj->isPickup = false;
|
|
|
|
obj->isPuzzleHole = false;
|
|
|
|
//obj->frameBase += (short)g_Level.Frames.data();
|
|
|
|
}
|
|
|
|
|
|
|
|
InitialiseGenericObjects(); // Generic objects
|
|
|
|
InitialiseTR1Objects(); // Standard TR1 objects
|
|
|
|
InitialiseTR2Objects(); // Standard TR2 objects
|
|
|
|
InitialiseTR3Objects(); // Standard TR3 objects
|
|
|
|
InitialiseTR4Objects(); // Standard TR4 objects
|
|
|
|
InitialiseTR5Objects(); // Standard TR5 objects
|
|
|
|
ObjectObjects();
|
|
|
|
TrapObjects();
|
|
|
|
|
|
|
|
// User defined objects
|
|
|
|
CustomObjects();
|
|
|
|
|
|
|
|
InitialiseHair();
|
|
|
|
InitialiseSpecialEffects();
|
|
|
|
|
|
|
|
NumRPickups = 0;
|
|
|
|
CurrentSequence = 0;
|
|
|
|
SequenceResults[0][1][2] = 0;
|
|
|
|
SequenceResults[0][2][1] = 1;
|
|
|
|
SequenceResults[1][0][2] = 2;
|
|
|
|
SequenceResults[1][2][0] = 3;
|
|
|
|
SequenceResults[2][0][1] = 4;
|
|
|
|
SequenceResults[2][1][0] = 5;
|
|
|
|
SequenceUsed[0] = 0;
|
|
|
|
SequenceUsed[1] = 0;
|
|
|
|
SequenceUsed[2] = 0;
|
|
|
|
SequenceUsed[3] = 0;
|
|
|
|
SequenceUsed[4] = 0;
|
|
|
|
SequenceUsed[5] = 0;
|
|
|
|
}
|