mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-04-29 00:07:58 +03:00
233 lines
5.8 KiB
C++
233 lines
5.8 KiB
C++
#include "framework.h"
|
|
#include "Objects/TR1/tr1_objects.h"
|
|
|
|
#include "Game/control/box.h"
|
|
#include "Game/collision/collide_item.h"
|
|
#include "Game/itemdata/creature_info.h"
|
|
#include "Game/missile.h"
|
|
#include "Specific/setup.h"
|
|
#include "Specific/level.h"
|
|
|
|
// Creatures
|
|
#include "Objects/TR1/Entity/tr1_ape.h" // OK
|
|
#include "Objects/TR1/Entity/tr1_bear.h" // OK
|
|
#include "Objects/TR1/Entity/tr1_doppelganger.h" // OK
|
|
#include "Objects/TR1/Entity/tr1_natla.h" // OK
|
|
#include "Objects/TR1/Entity/tr1_giant_mutant.h" // OK
|
|
#include "Objects/TR1/Entity/tr1_wolf.h" // OK
|
|
#include "Objects/TR1/Entity/tr1_big_rat.h" // OK
|
|
#include "Objects/TR1/Entity/tr1_centaur.h"
|
|
#include "Objects/TR1/Entity/tr1_winged_mutant.h"
|
|
#include "Objects/Utils/object_helper.h"
|
|
|
|
using namespace TEN::Entities::Creatures::TR1;
|
|
|
|
static void StartEntity(ObjectInfo* obj)
|
|
{
|
|
obj = &Objects[ID_WOLF];
|
|
if (obj->loaded)
|
|
{
|
|
obj->initialise = InitialiseWolf;
|
|
obj->control = WolfControl;
|
|
obj->collision = CreatureCollision;
|
|
obj->shadowType = ShadowMode::All;
|
|
obj->HitPoints = 6;
|
|
obj->hitEffect = HIT_BLOOD;
|
|
obj->pivotLength = 375;
|
|
obj->radius = 340;
|
|
obj->intelligent = true;
|
|
obj->savePosition = true;
|
|
obj->saveHitpoints = true;
|
|
obj->saveAnim = true;
|
|
obj->saveFlags = true;
|
|
obj->SetBoneRotation(2, ROT_Y); // head
|
|
}
|
|
|
|
obj = &Objects[ID_BEAR];
|
|
if (obj->loaded)
|
|
{
|
|
obj->initialise = InitialiseCreature;
|
|
obj->control = BearControl;
|
|
obj->collision = CreatureCollision;
|
|
obj->shadowType = ShadowMode::All;
|
|
obj->HitPoints = 20;
|
|
obj->hitEffect = HIT_BLOOD;
|
|
obj->pivotLength = 500;
|
|
obj->radius = 340;
|
|
obj->intelligent = true;
|
|
obj->savePosition = true;
|
|
obj->saveHitpoints = true;
|
|
obj->saveAnim = true;
|
|
obj->saveFlags = true;
|
|
obj->SetBoneRotation(13, ROT_Y); // head
|
|
}
|
|
|
|
obj = &Objects[ID_APE];
|
|
if (obj->loaded)
|
|
{
|
|
obj->control = ApeControl;
|
|
obj->collision = CreatureCollision;
|
|
obj->HitPoints = 22;
|
|
obj->hitEffect = HIT_BLOOD;
|
|
obj->shadowType = ShadowMode::All;
|
|
obj->pivotLength = 250;
|
|
obj->radius = 340;
|
|
obj->intelligent = true;
|
|
obj->savePosition = true;
|
|
obj->saveHitpoints = true;
|
|
obj->saveAnim = true;
|
|
obj->saveFlags = true;
|
|
obj->ZoneType = ZoneType::Ape;
|
|
}
|
|
|
|
obj = &Objects[ID_BIG_RAT];
|
|
if (obj->loaded)
|
|
{
|
|
obj->initialise = InitialiseBigRat;
|
|
obj->control = BigRatControl;
|
|
obj->collision = CreatureCollision;
|
|
obj->shadowType = ShadowMode::All;
|
|
obj->HitPoints = 5;
|
|
obj->hitEffect = HIT_BLOOD;
|
|
obj->pivotLength = 200;
|
|
obj->radius = 204;
|
|
obj->intelligent = true;
|
|
obj->savePosition = true;
|
|
obj->saveHitpoints = true;
|
|
obj->saveAnim = true;
|
|
obj->saveFlags = true;
|
|
obj->waterCreature = true;
|
|
obj->ZoneType = ZoneType::Water;
|
|
obj->SetBoneRotation(1, ROT_Y); // head
|
|
}
|
|
|
|
obj = &Objects[ID_NATLA];
|
|
if (obj->loaded)
|
|
{
|
|
obj->initialise = InitialiseCreature;
|
|
obj->collision = CreatureCollision;
|
|
obj->control = NatlaControl;
|
|
obj->shadowType = ShadowMode::All;
|
|
obj->HitPoints = 400;
|
|
obj->radius = 204;
|
|
obj->hitEffect = HIT_BLOOD;
|
|
obj->intelligent = true;
|
|
obj->saveAnim = true;
|
|
obj->saveFlags = true;
|
|
obj->savePosition = true;
|
|
obj->saveHitpoints = true;
|
|
obj->SetBoneRotation(2, ROT_X | ROT_Z);
|
|
}
|
|
|
|
obj = &Objects[ID_GIANT_MUTANT];
|
|
if (obj->loaded)
|
|
{
|
|
obj->initialise = InitialiseCreature;
|
|
obj->collision = CreatureCollision;
|
|
obj->control = GiantMutantControl;
|
|
obj->shadowType = ShadowMode::All;
|
|
obj->HitPoints = 500;
|
|
obj->hitEffect = HIT_BLOOD;
|
|
obj->radius = 341;
|
|
obj->intelligent = true;
|
|
obj->saveAnim = true;
|
|
obj->saveFlags = true;
|
|
obj->savePosition = true;
|
|
obj->saveHitpoints = true;
|
|
obj->SetBoneRotation(1, ROT_Y);
|
|
}
|
|
|
|
obj = &Objects[ID_LARA_DOPPELGANGER];
|
|
if (obj->loaded)
|
|
{
|
|
if (Objects[ID_LARA].loaded)
|
|
obj->animIndex = Objects[ID_LARA].animIndex;
|
|
|
|
obj->initialise = InitialiseDoppelganger;
|
|
obj->collision = CreatureCollision;
|
|
obj->control = DoppelgangerControl;
|
|
//obj->drawRoutine = DrawEvilLara;
|
|
obj->shadowType = ShadowMode::All;
|
|
obj->HitPoints = 1000;
|
|
obj->hitEffect = HIT_BLOOD;
|
|
obj->radius = 102;
|
|
//obj->intelligent = true;
|
|
obj->saveFlags = true;
|
|
obj->savePosition = true;
|
|
obj->saveHitpoints = true;
|
|
}
|
|
|
|
obj = &Objects[ID_CENTAUR_MUTANT];
|
|
if (obj->loaded)
|
|
{
|
|
obj->initialise = InitialiseCreature;
|
|
obj->control = CentaurControl;
|
|
obj->collision = CreatureCollision;
|
|
obj->shadowType = ShadowMode::All;
|
|
obj->HitPoints = 120;
|
|
obj->hitEffect = HIT_BLOOD;
|
|
obj->pivotLength = 400;
|
|
obj->radius = WALL_SIZE / 3;
|
|
obj->intelligent = true;
|
|
obj->savePosition = true;
|
|
obj->saveHitpoints = true;
|
|
obj->saveAnim = true;
|
|
obj->saveFlags = true;
|
|
obj->ZoneType = ZoneType::Blockable;
|
|
obj->SetBoneRotation(10, ROT_X | ROT_Y);
|
|
}
|
|
|
|
obj = &Objects[ID_WINGED_MUMMY];
|
|
if (obj->loaded)
|
|
{
|
|
obj->initialise = InitialiseWingedMutant;
|
|
obj->control = WingedMutantControl;
|
|
obj->collision = CreatureCollision;
|
|
obj->shadowType = ShadowMode::All;
|
|
obj->hitEffect = HIT_BLOOD;
|
|
obj->pivotLength = 150;
|
|
obj->radius = WALL_SIZE / 3;
|
|
obj->HitPoints = 50;
|
|
obj->intelligent = true;
|
|
obj->saveAnim = true;
|
|
obj->saveFlags = true;
|
|
obj->saveHitpoints = true;
|
|
obj->savePosition = true;
|
|
obj->ZoneType = ZoneType::Flyer;
|
|
obj->SetBoneRotation(1, ROT_Y); // torso
|
|
obj->SetBoneRotation(2, ROT_Y); // head
|
|
}
|
|
|
|
}
|
|
|
|
static void StartObject(ObjectInfo* obj)
|
|
{
|
|
obj = &Objects[ID_BACON_REFERENCE];
|
|
if (obj->loaded)
|
|
{
|
|
obj->drawRoutine = nullptr;
|
|
obj->collision = AIPickupCollision;
|
|
obj->HitPoints = 0;
|
|
}
|
|
}
|
|
|
|
static void StartTrap(ObjectInfo* obj)
|
|
{
|
|
|
|
}
|
|
|
|
static void StartProjectiles(ObjectInfo* obj)
|
|
{
|
|
InitProjectile(obj, ControlMissile, ID_PROJ_SHARD);
|
|
InitProjectile(obj, ControlMissile, ID_PROJ_NATLA);
|
|
InitProjectile(obj, ControlMissile, ID_PROJ_BOMB);
|
|
}
|
|
|
|
static ObjectInfo* objToInit;
|
|
void InitialiseTR1Objects()
|
|
{
|
|
StartEntity(objToInit);
|
|
StartObject(objToInit);
|
|
StartTrap(objToInit);
|
|
StartProjectiles(objToInit);
|
|
}
|