2018-08-19 09:46:58 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "setup.h"
|
|
|
|
#include "..\Game\draw.h"
|
|
|
|
#include "..\Game\collide.h"
|
|
|
|
#include "..\Game\Box.h"
|
|
|
|
#include "..\Game\missile.h"
|
|
|
|
#include "..\Game\control.h"
|
2018-11-01 22:45:59 +01:00
|
|
|
#include "..\Game\pickup.h"
|
2018-11-02 07:35:19 +01:00
|
|
|
#include "..\game\lara1gun.h"
|
2018-11-24 17:26:26 +01:00
|
|
|
#include "..\game\objects.h"
|
|
|
|
#include "..\Objects\newobjects.h"
|
2018-08-19 09:46:58 +02:00
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
void __cdecl NewObjects()
|
|
|
|
{
|
2018-09-08 18:43:59 +02:00
|
|
|
OBJECT_INFO* obj;
|
|
|
|
|
|
|
|
obj = &Objects[ID_SMALL_SCORPION];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSmallScorpion;
|
|
|
|
obj->control = SmallScorpionControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 8;
|
|
|
|
obj->pivotLength = 20;
|
|
|
|
obj->radius = 128;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->hitEffect = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_WILD_BOAR];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseWildBoar;
|
|
|
|
obj->control = WildBoarControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 40;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 102;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
2018-09-17 08:02:23 +02:00
|
|
|
Bones[obj->boneIndex + 192] |= ROT_Z;
|
|
|
|
Bones[obj->boneIndex + 192] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 208] |= ROT_Z;
|
|
|
|
Bones[obj->boneIndex + 208] |= ROT_Y;
|
2018-09-08 18:43:59 +02:00
|
|
|
}
|
|
|
|
|
2018-09-08 20:23:41 +02:00
|
|
|
obj = &Objects[ID_BAT];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseBat;
|
|
|
|
obj->control = BatControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 5;
|
|
|
|
obj->pivotLength = 10;
|
|
|
|
obj->radius = 102;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
2018-09-17 21:13:44 +02:00
|
|
|
obj = &Objects[ID_CHAIN];
|
2018-09-09 17:14:49 +02:00
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = ChainControl;
|
|
|
|
obj->collision = GenericSphereBoxCollision;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_PLOUGH];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = PloughControl;
|
|
|
|
obj->collision = GenericSphereBoxCollision;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_FLOOR_4BLADES];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = FourBladesControl;
|
|
|
|
obj->collision = GenericSphereBoxCollision;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_CEILING_4BLADES];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = FourBladesControl;
|
|
|
|
obj->collision = GenericSphereBoxCollision;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SPIKEBALL];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = SpikeballControl;
|
|
|
|
obj->collision = GenericSphereBoxCollision;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_COG];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = CogControl;
|
|
|
|
obj->collision = GenericSphereBoxCollision;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
2018-09-17 21:13:44 +02:00
|
|
|
}
|
2018-09-12 20:37:37 +02:00
|
|
|
|
|
|
|
obj = &Objects[ID_BADDY1];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseBaddy;
|
|
|
|
obj->control = BaddyControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 25;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 102;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
2018-09-17 08:02:23 +02:00
|
|
|
Bones[obj->boneIndex + 112] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 112] |= ROT_X;
|
|
|
|
Bones[obj->boneIndex + 352] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 352] |= ROT_X;
|
2018-09-12 20:37:37 +02:00
|
|
|
|
|
|
|
Meshes[obj->meshIndex + 36] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 32];
|
|
|
|
Meshes[obj->meshIndex + 60] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 56];
|
|
|
|
Meshes[obj->meshIndex + 36] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 22];
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_BADDY2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseBaddy;
|
|
|
|
obj->control = BaddyControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 25;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 102;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
2018-09-17 08:02:23 +02:00
|
|
|
Bones[obj->boneIndex + 112] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 112] |= ROT_X;
|
|
|
|
Bones[obj->boneIndex + 352] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 352] |= ROT_X;
|
2018-09-09 17:14:49 +02:00
|
|
|
}
|
|
|
|
|
2018-09-16 17:09:43 +02:00
|
|
|
obj = &Objects[ID_SAS_CAIRO];
|
2018-09-15 08:20:29 +02:00
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSas;
|
|
|
|
obj->control = SasControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 40;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 102;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
2018-09-17 08:02:23 +02:00
|
|
|
Bones[obj->boneIndex] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex] |= ROT_X;
|
|
|
|
Bones[obj->boneIndex + 112] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 112] |= ROT_X;
|
2018-09-15 08:20:29 +02:00
|
|
|
}
|
|
|
|
|
2018-09-15 16:21:52 +02:00
|
|
|
obj = &Objects[ID_MUMMY];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseMummy;
|
|
|
|
obj->control = MummyControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 15;
|
|
|
|
obj->radius = 170;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
2018-09-17 08:02:23 +02:00
|
|
|
Bones[obj->boneIndex + 112] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 112] |= ROT_X;
|
|
|
|
Bones[obj->boneIndex + 288] |= ROT_Y;
|
2018-09-15 16:21:52 +02:00
|
|
|
}
|
|
|
|
|
2018-09-16 15:05:16 +02:00
|
|
|
obj = &Objects[ID_QUAD];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseQuadBike;
|
|
|
|
obj->collision = QuadBikeCollision;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
2018-09-16 17:09:43 +02:00
|
|
|
obj = &Objects[ID_SHARK];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = SharkControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 30;
|
|
|
|
obj->pivotLength = 200;
|
|
|
|
obj->radius = 340;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->waterCreature = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex + 9 * 4] |= ROT_Y;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_BARRACUDA];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = BarracudaControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = UNIT_SHADOW / 2;
|
|
|
|
obj->hitPoints = 12;
|
|
|
|
obj->pivotLength = 200;
|
|
|
|
obj->radius = 204;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->waterCreature = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex + 6 * 4] |= ROT_Y;
|
|
|
|
}
|
2018-08-19 09:46:58 +02:00
|
|
|
|
2018-09-17 21:13:44 +02:00
|
|
|
obj = &Objects[ID_ROLLING_SPINDLE];
|
2018-09-16 23:49:24 +02:00
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSpinningBlade;
|
|
|
|
obj->control = SpinningBlade;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SPRINGBOARD];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = SpringBoardControl;
|
|
|
|
obj->saveAnim = true;
|
2018-08-19 09:46:58 +02:00
|
|
|
obj->saveFlags = true;
|
2018-09-17 21:13:44 +02:00
|
|
|
}
|
2018-08-19 09:46:58 +02:00
|
|
|
|
|
|
|
obj = &Objects[ID_TIGER];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = TigerControl;
|
|
|
|
obj->collision = CreatureCollision;
|
2018-09-17 08:02:23 +02:00
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 24;
|
2018-08-19 09:46:58 +02:00
|
|
|
obj->pivotLength = 200;
|
2018-09-17 08:02:23 +02:00
|
|
|
obj->radius = 340;
|
2018-08-19 09:46:58 +02:00
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex + 21 * 4] |= ROT_Y;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_COBRA];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseCobra;
|
|
|
|
obj->control = CobraControl;
|
|
|
|
obj->collision = CreatureCollision;
|
2018-09-17 12:09:23 +02:00
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 8;
|
|
|
|
obj->radius = 102;
|
2018-08-19 09:46:58 +02:00
|
|
|
obj->intelligent = true;
|
|
|
|
obj->nonLot = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex + 0 * 4] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 6 * 4] |= ROT_Y;
|
|
|
|
}
|
|
|
|
|
2018-09-17 20:43:08 +02:00
|
|
|
obj = &Objects[ID_RAPTOR];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = RaptorControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 100;
|
|
|
|
obj->radius = 341;
|
|
|
|
obj->pivotLength = 600;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex + 20 * 4] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 21 * 4] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 23 * 4] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 25 * 4] |= ROT_Y;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SCUBA_DIVER];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = ScubaControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = UNIT_SHADOW / 2;
|
|
|
|
obj->hitPoints = 20;
|
|
|
|
obj->radius = 340;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->waterCreature = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex + 10 * 4] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 14 * 4] |= ROT_Z;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SCUBA_HARPOON];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = HarpoonControl;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->savePosition = true;
|
|
|
|
}
|
|
|
|
|
2018-09-17 21:13:44 +02:00
|
|
|
obj = &Objects[ID_EAGLE];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseEagle;
|
|
|
|
obj->control = EagleControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 20;
|
|
|
|
obj->radius = 204;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->pivotLength = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_CROW];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseEagle;
|
|
|
|
obj->control = EagleControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 15;
|
|
|
|
obj->radius = 204;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->pivotLength = 0;
|
|
|
|
}
|
|
|
|
|
2018-09-17 23:27:29 +02:00
|
|
|
obj = &Objects[ID_TRIBESMAN_WITH_AX];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = TribemanAxeControl;
|
|
|
|
obj->collision = CreatureCollision;
|
2018-09-18 13:17:58 +02:00
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 28;
|
|
|
|
obj->radius = 102;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->pivotLength = 0;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex + 13 * 4] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 6 * 4] |= ROT_Y;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_TRIBESMAN_WITH_DARTS];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = TribesmanDartsControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
2018-09-17 23:27:29 +02:00
|
|
|
obj->hitPoints = 28;
|
|
|
|
obj->radius = 102;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->pivotLength = 0;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex + 13 * 4] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 6 * 4] |= ROT_Y;
|
|
|
|
}
|
|
|
|
|
2018-09-18 20:56:47 +02:00
|
|
|
obj = &Objects[ID_WOLF];
|
2018-09-17 12:09:23 +02:00
|
|
|
if (obj->loaded)
|
|
|
|
{
|
2018-09-18 20:56:47 +02:00
|
|
|
obj->initialise = InitialiseWolf;
|
|
|
|
obj->control = WolfControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 6;
|
|
|
|
obj->pivotLength = 375;
|
|
|
|
obj->radius = 340;
|
|
|
|
obj->intelligent = true;
|
2018-09-17 12:09:23 +02:00
|
|
|
obj->savePosition = true;
|
2018-09-18 20:56:47 +02:00
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
2018-09-17 12:09:23 +02:00
|
|
|
obj->saveFlags = true;
|
2018-09-18 20:56:47 +02:00
|
|
|
|
|
|
|
Bones[obj->boneIndex + 2 * 4] |= ROT_Y;
|
2018-09-17 12:09:23 +02:00
|
|
|
}
|
|
|
|
|
2018-09-18 20:56:47 +02:00
|
|
|
obj = &Objects[ID_BEAR];
|
2018-08-19 09:46:58 +02:00
|
|
|
if (obj->loaded)
|
|
|
|
{
|
2018-09-18 20:56:47 +02:00
|
|
|
obj->initialise = InitialiseCreature;
|
|
|
|
obj->control = BearControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = UNIT_SHADOW / 2;
|
|
|
|
obj->hitPoints = 20;
|
|
|
|
obj->pivotLength = 500;
|
|
|
|
obj->radius = 340;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex + 13 * 4] |= ROT_Y;
|
|
|
|
}
|
2018-08-19 09:46:58 +02:00
|
|
|
|
2018-09-18 20:56:47 +02:00
|
|
|
obj = &Objects[ID_TYRANNOSAUR];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = TyrannosaurControl;
|
2018-08-19 09:46:58 +02:00
|
|
|
obj->collision = CreatureCollision;
|
2018-09-18 20:56:47 +02:00
|
|
|
obj->hitPoints = 800;
|
|
|
|
obj->shadowSize = 64;
|
2018-08-19 09:46:58 +02:00
|
|
|
obj->pivotLength = 1800;
|
2018-09-18 20:56:47 +02:00
|
|
|
obj->radius = 512;
|
2018-08-19 09:46:58 +02:00
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex + 10 * 4] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 11 * 4] |= ROT_Y;
|
|
|
|
}
|
2018-09-19 20:48:17 +02:00
|
|
|
|
|
|
|
obj = &Objects[ID_APE];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = ApeControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->hitPoints = 22;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->pivotLength = 250;
|
|
|
|
obj->radius = 340;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_RAT];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = RatControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->hitPoints = 5;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 204;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SKELETON];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSkeleton;
|
|
|
|
obj->control = SkeletonControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->hitPoints = 15;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 128;
|
|
|
|
obj->explodableMeshbits = 0xA00;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
2018-11-01 22:45:59 +01:00
|
|
|
|
|
|
|
obj = &Objects[ID_GRENADE_ITEM];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = PickupCollision;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
2018-11-21 09:34:01 +01:00
|
|
|
obj = &Objects[ID_GRENADE_AMMO1_ITEM];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = PickupCollision;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_GRENADE_AMMO2_ITEM];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = PickupCollision;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_GRENADE_AMMO3_ITEM];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = PickupCollision;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_CROSSBOW_AMMO3_ITEM];
|
2018-11-01 22:45:59 +01:00
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = PickupCollision;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
2018-11-02 07:35:19 +01:00
|
|
|
|
|
|
|
obj = &Objects[ID_GRENADE];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
2018-11-24 09:39:37 +01:00
|
|
|
obj->collision = NULL;
|
2018-11-02 07:35:19 +01:00
|
|
|
obj->control = ControlGrenade;
|
|
|
|
}
|
2018-11-02 13:02:10 +01:00
|
|
|
|
|
|
|
obj = &Objects[ID_HARPOON_ITEM];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = PickupCollision;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_HARPOON_AMMO_ITEM];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = PickupCollision;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_HARPOON];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
2018-11-25 21:13:14 +01:00
|
|
|
obj->initialise = NULL;
|
2018-11-24 09:39:37 +01:00
|
|
|
obj->collision = NULL;
|
2018-11-02 13:02:10 +01:00
|
|
|
obj->control = ControlHarpoonBolt;
|
|
|
|
}
|
2018-11-14 20:54:18 +01:00
|
|
|
|
|
|
|
obj = &Objects[ID_CROSSBOW_BOLT];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = NULL;
|
|
|
|
obj->control = NULL;
|
|
|
|
obj->control = ControlCrossbowBolt;
|
|
|
|
}
|
2018-11-24 09:39:37 +01:00
|
|
|
|
|
|
|
obj = &Objects[ID_STARGATE];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = StargateControl;
|
|
|
|
obj->collision = StargateCollision;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_SLICER_DICER];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSlicerDicer;
|
|
|
|
obj->control = SlicerDicerControl;
|
|
|
|
obj->collision = BladeCollision;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
2018-11-24 17:26:26 +01:00
|
|
|
|
|
|
|
obj = &Objects[ID_SARCOPHAGUS];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->control = AnimatingControl;
|
|
|
|
obj->collision = SarcophagusCollision;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
2018-11-24 17:56:01 +01:00
|
|
|
|
2018-11-25 21:13:14 +01:00
|
|
|
obj = &Objects[ID_LARA_DOUBLE];
|
2018-11-24 17:56:01 +01:00
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseLaraDouble;
|
|
|
|
obj->control = LaraDoubleControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 1000;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 128;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->hitEffect = 3;
|
|
|
|
}
|
2018-11-26 11:34:22 +01:00
|
|
|
|
|
|
|
obj = &Objects[ID_KNIGHT_TEMPLAR];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseKnightTemplar;
|
|
|
|
obj->control = KnightTemplarControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 15;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 128;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
|
2018-12-02 13:09:40 +01:00
|
|
|
Bones[obj->boneIndex + 24] |= ROT_X | ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 28] |= ROT_Y;
|
2018-11-26 11:34:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_DEMIGOD1];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseDemigod;
|
|
|
|
obj->control = DemigodControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 200;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 341;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->hitEffect = 3;
|
|
|
|
obj->undead = true;
|
|
|
|
|
2018-12-02 13:09:40 +01:00
|
|
|
Bones[obj->boneIndex + 16] |= ROT_X | ROT_Y | ROT_Z;
|
|
|
|
Bones[obj->boneIndex + 20] |= ROT_Y;
|
2018-11-26 11:34:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_DEMIGOD2];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseDemigod;
|
|
|
|
obj->control = DemigodControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 200;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 341;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
|
2018-12-02 13:09:40 +01:00
|
|
|
Bones[obj->boneIndex + 16] |= ROT_X | ROT_Y | ROT_Z;
|
|
|
|
Bones[obj->boneIndex + 20] |= ROT_Y;
|
2018-11-26 11:34:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_DEMIGOD3];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseDemigod;
|
|
|
|
obj->control = DemigodControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 200;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 341;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
|
2018-12-02 13:09:40 +01:00
|
|
|
Bones[obj->boneIndex + 16] |= ROT_X | ROT_Y | ROT_Z;
|
|
|
|
Bones[obj->boneIndex + 20] |= ROT_Y;
|
2018-11-26 11:34:22 +01:00
|
|
|
}
|
2018-11-26 23:01:24 +01:00
|
|
|
|
|
|
|
obj = &Objects[ID_MINE];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseMine;
|
|
|
|
obj->control = MineControl;
|
|
|
|
obj->collision = MineCollision;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_JEAN_YVES];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseJeanYves;
|
|
|
|
obj->control = JeanYvesControl;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->nonLot = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
}
|
2018-11-27 18:45:59 +01:00
|
|
|
|
|
|
|
obj = &Objects[ID_WATERSKIN1_EMPTY];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialisePickup;
|
|
|
|
obj->control = PickupControl;
|
|
|
|
obj->collision = PickupCollision;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_WATERSKIN2_EMPTY];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialisePickup;
|
|
|
|
obj->control = PickupControl;
|
|
|
|
obj->collision = PickupCollision;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
}
|
2018-11-28 13:19:01 +01:00
|
|
|
|
|
|
|
obj = &Objects[ID_SCORPION];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseScorpion;
|
|
|
|
obj->control = ScorpionControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 80;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 512;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->hitEffect = 2;
|
|
|
|
}
|
2018-11-28 20:51:20 +01:00
|
|
|
|
|
|
|
obj = &Objects[ID_TROOPS];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseTroops;
|
|
|
|
obj->control = TroopsControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 40;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 102;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex] |= ROT_X;
|
2018-12-02 13:09:40 +01:00
|
|
|
Bones[obj->boneIndex + 28] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 28] |= ROT_X;
|
2018-11-28 20:51:20 +01:00
|
|
|
}
|
2018-11-30 00:25:33 +01:00
|
|
|
|
2018-12-09 15:55:55 +01:00
|
|
|
obj = &Objects[ID_SENTRY_GUN];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSentryGun;
|
|
|
|
obj->control = SentryGunControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 30;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 204;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->explodableMeshbits = 64;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex + 0] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 1 * 4] |= ROT_X;
|
|
|
|
Bones[obj->boneIndex + 2 * 4] |= ROT_Z;
|
|
|
|
Bones[obj->boneIndex + 3 * 4] |= ROT_Z;
|
|
|
|
}
|
|
|
|
|
2018-11-30 00:25:33 +01:00
|
|
|
obj = &Objects[ID_HARPY];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseHarpy;
|
|
|
|
obj->control = HarpyControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 60;
|
|
|
|
obj->pivotLength = 50;
|
|
|
|
obj->radius = 409;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
2018-11-30 22:02:25 +01:00
|
|
|
|
|
|
|
obj = &Objects[ID_GUIDE];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseGuide;
|
|
|
|
obj->control = GuideControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = -16384;
|
|
|
|
obj->pivotLength = 0;
|
|
|
|
obj->radius = 128;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex + 24] |= ROT_X | ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 80] |= ROT_X | ROT_Y;
|
|
|
|
|
|
|
|
// TODO: check if constants are byte, __int16 or __int32
|
|
|
|
Meshes[obj->meshIndex + 124] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 120];
|
|
|
|
Meshes[obj->meshIndex + 148] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 144];
|
|
|
|
Meshes[obj->meshIndex + 172] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 168];
|
|
|
|
}
|
|
|
|
|
|
|
|
obj = &Objects[ID_CROCODILE];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseCrocodile;
|
|
|
|
obj->control = CrocodileControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 36;
|
|
|
|
obj->pivotLength = 300;
|
|
|
|
obj->radius = 409;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->waterCreature = true;
|
|
|
|
|
|
|
|
Bones[obj->boneIndex] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 28] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 36] |= ROT_Y;
|
|
|
|
Bones[obj->boneIndex + 40] |= ROT_Y;
|
|
|
|
}
|
2018-12-02 13:09:40 +01:00
|
|
|
|
|
|
|
obj = &Objects[ID_SPHINX];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSphinx;
|
|
|
|
obj->control = SphinxControl;
|
|
|
|
obj->collision = CreatureCollision;
|
|
|
|
obj->shadowSize = 128;
|
|
|
|
obj->hitPoints = 1000;
|
|
|
|
obj->pivotLength = 500;
|
|
|
|
obj->radius = 512;
|
|
|
|
obj->intelligent = true;
|
|
|
|
obj->saveHitpoints = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
2018-08-19 09:46:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void __cdecl CustomObjects()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void __cdecl InitialiseObjects()
|
|
|
|
{
|
|
|
|
for (__int32 i = 0; i < NUM_OBJECTS; i++)
|
|
|
|
{
|
|
|
|
Objects[i].drawRoutine = DrawAnimatingItem;
|
|
|
|
Objects[i].floor = NULL;
|
|
|
|
Objects[i].ceiling = NULL;
|
|
|
|
Objects[i].pivotLength = 0;
|
|
|
|
Objects[i].radius = 10;
|
|
|
|
Objects[i].shadowSize = 0;
|
|
|
|
Objects[i].hitPoints = -16384;
|
|
|
|
Objects[i].explodableMeshbits = 0;
|
|
|
|
Objects[i].intelligent = 0;
|
|
|
|
Objects[i].waterCreature = 0;
|
|
|
|
Objects[i].saveMesh = 0;
|
|
|
|
Objects[i].saveAnim = 0;
|
|
|
|
Objects[i].saveFlags = 0;
|
|
|
|
Objects[i].saveHitpoints = 0;
|
|
|
|
Objects[i].savePosition = 0;
|
|
|
|
Objects[i].frameBase += (ptrdiff_t)Frames;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Standard TR5 objects
|
|
|
|
BaddyObjects();
|
|
|
|
ObjectObjects();
|
|
|
|
TrapObjects();
|
|
|
|
|
|
|
|
// Reset MIP flag so we can reuse slots
|
|
|
|
for (__int16 i = 0; i < NUM_OBJECTS; i++)
|
|
|
|
Objects[i].objectMip = 0;
|
|
|
|
|
|
|
|
// New objects imported from old TRs
|
|
|
|
NewObjects();
|
|
|
|
|
|
|
|
// User defined objects
|
|
|
|
CustomObjects();
|
|
|
|
|
|
|
|
InitialiseHairs();
|
|
|
|
InitialiseSpecialEffects();
|
|
|
|
|
|
|
|
CurrentSequence = 0;
|
|
|
|
OldPickupPos.roomNumber = 0;
|
|
|
|
|
|
|
|
// TODO: with the new renderer this can be safely deleted
|
|
|
|
for (__int32 i = 0; i < 6; i++)
|
|
|
|
{
|
|
|
|
SequenceUsed[i] = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (__int32 i = 0; i < gfNumMips; i++)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
if (Objects[ID_BATS].loaded)
|
2018-11-08 23:05:25 +01:00
|
|
|
Bats = (BAT_STRUCT*)GameMalloc(NUM_BATS * sizeof(BAT_STRUCT));
|
2018-08-19 09:46:58 +02:00
|
|
|
|
|
|
|
if (Objects[ID_SPIDER].loaded)
|
2018-11-08 23:05:25 +01:00
|
|
|
Spiders = (SPIDER_STRUCT*)GameMalloc(NUM_SPIDERS * sizeof(SPIDER_STRUCT));
|
2018-08-19 09:46:58 +02:00
|
|
|
|
|
|
|
if (Objects[ID_RATS].loaded)
|
2018-11-08 23:05:25 +01:00
|
|
|
Rats = (RAT_STRUCT*)GameMalloc(NUM_RATS * sizeof(RAT_STRUCT));
|
2018-08-19 09:46:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Inject_Setup()
|
|
|
|
{
|
|
|
|
INJECT(0x00473600, InitialiseObjects);
|
|
|
|
}
|