TombEngine/TR5Main/Specific/setup.cpp

648 lines
15 KiB
C++
Raw Normal View History

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"
#include "..\Game\pickup.h"
2018-11-02 07:35:19 +01:00
#include "..\game\lara1gun.h"
#include "..\Objects\objects.h"
2018-08-19 09:46:58 +02:00
#include <stdlib.h>
#include <stdio.h>
void __cdecl NewObjects()
{
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 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;
}
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-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
}
obj = &Objects[ID_SAS_CAIRO];
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 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;
}
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
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-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;
}
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;
}
obj = &Objects[ID_WOLF];
2018-09-17 12:09:23 +02:00
if (obj->loaded)
{
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;
obj->saveHitpoints = true;
obj->saveAnim = true;
2018-09-17 12:09:23 +02:00
obj->saveFlags = true;
Bones[obj->boneIndex + 2 * 4] |= ROT_Y;
2018-09-17 12:09:23 +02:00
}
obj = &Objects[ID_BEAR];
2018-08-19 09:46:58 +02:00
if (obj->loaded)
{
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
obj = &Objects[ID_TYRANNOSAUR];
if (obj->loaded)
{
obj->control = TyrannosaurControl;
2018-08-19 09:46:58 +02:00
obj->collision = CreatureCollision;
obj->hitPoints = 800;
obj->shadowSize = 64;
2018-08-19 09:46:58 +02:00
obj->pivotLength = 1800;
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;
}
obj = &Objects[ID_GRENADE_ITEM];
if (obj->loaded)
{
obj->collision = PickupCollision;
obj->savePosition = true;
obj->saveFlags = true;
}
obj = &Objects[ID_GRENADE_AMMO_ITEM];
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)
{
obj->control = ControlGrenade;
}
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)
Bats = GameMalloc(1920);
if (Objects[ID_SPIDER].loaded)
Spiders = GameMalloc(1664);
if (Objects[ID_RATS].loaded)
Rats = GameMalloc(832);
}
void Inject_Setup()
{
INJECT(0x00473600, InitialiseObjects);
}