diff --git a/src/format.h b/src/format.h index 49803ec..de7779d 100644 --- a/src/format.h +++ b/src/format.h @@ -172,7 +172,7 @@ E( BLOOD ) \ E( UNUSED_12 ) \ E( SMOKE ) \ - E( STATUE ) \ + E( CENTAUR_STATUE ) \ E( CABIN ) \ E( MUTANT_EGG_SMALL ) \ E( RICOCHET ) \ diff --git a/src/lara.h b/src/lara.h index bed2787..8662341 100644 --- a/src/lara.h +++ b/src/lara.h @@ -466,8 +466,8 @@ struct Lara : Character { //reset(73, vec3(73372, 122, 51687), PI * 0.5f); // level 6 (midas hand) //reset(64, vec3(36839, -2560, 48769), 270 * DEG2RAD); // level 6 (flipmap effect) //reset(99, vec3(45562, -3328, 63366), 225 * DEG2RAD); // level 7a (flipmap) - //reset(90, vec3(19438, 3840, 78341), 90 * DEG2RAD); // level 7a (statues) //reset(77, vec3(36943, -4096, 62821), 270 * DEG2RAD); // level 7b (heavy trigger) + //reset(90, vec3(19438, 3840, 78341), 90 * DEG2RAD); // level 7b (statues) //reset(57, vec3(54844, -3328, 53145), 0); // level 8b (bridge switch //reset(12, vec3(34236, -2415, 14974), 0); // level 8b (sphinx) //reset(0, vec3(40913, -1012, 42252), PI); // level 8c diff --git a/src/level.h b/src/level.h index 009a3b8..a3001e3 100644 --- a/src/level.h +++ b/src/level.h @@ -521,6 +521,7 @@ struct Level : IGame { case TR::Entity::SCION_TARGET : return new ScionTarget(this, index); case TR::Entity::WATERFALL : return new Waterfall(this, index); case TR::Entity::TRAP_LAVA : return new TrapLava(this, index); + case TR::Entity::CENTAUR_STATUE : return new CentaurStatue(this, index); case TR::Entity::CABIN : return new Cabin(this, index); case TR::Entity::TRAP_FLAME_EMITTER : return new TrapFlameEmitter(this, index); case TR::Entity::BOAT : return new Boat(this, index); diff --git a/src/trigger.h b/src/trigger.h index ac38f29..94b6e18 100644 --- a/src/trigger.h +++ b/src/trigger.h @@ -1101,6 +1101,33 @@ struct DoorLatch : Controller { }; +#define CENTAUR_STATUE_RANGE (3072 + 512) + +struct CentaurStatue : Controller { + + CentaurStatue(IGame *game, int entity) : Controller(game, entity) {} + + virtual void update() { + if (explodeMask) { + Controller::update(); + if (!explodeMask) + deactivate(true); + return; + } + + if ((pos - game->getLara()->pos).length() < CENTAUR_STATUE_RANGE) { + explode(0xFFFFFFFF); + game->playSound(TR::SND_EXPLOSION, pos, Sound::PAN); + int index = game->addEnemy(TR::Entity::ENEMY_CENTAUR, getRoomIndex(), pos, angle.y); + if (index > -1) { + Controller *controller = (Controller*)level->entities[index].controller; + controller->animation.setAnim(7, -36); + } + } + } +}; + + struct Cabin : Controller { enum { STATE_UP,