mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-16 01:54:38 +02:00
@@ -50,6 +50,8 @@ struct Camera : ICamera {
|
|||||||
room = level->entities[level->cutEntity].room;
|
room = level->entities[level->cutEntity].room;
|
||||||
} else
|
} else
|
||||||
state = STATE_FOLLOW;
|
state = STATE_FOLLOW;
|
||||||
|
destPos = owner->pos - owner->getDir() * 1024.0f;
|
||||||
|
pos = destPos;
|
||||||
advTimer = -1.0f;
|
advTimer = -1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -191,7 +191,7 @@
|
|||||||
E( LAVA_EMITTER ) \
|
E( LAVA_EMITTER ) \
|
||||||
E( FLAME ) \
|
E( FLAME ) \
|
||||||
E( FLAME_EMITTER ) \
|
E( FLAME_EMITTER ) \
|
||||||
E( LAVA_FLOW ) \
|
E( TRAP_LAVA ) \
|
||||||
E( MUTANT_EGG_BIG ) \
|
E( MUTANT_EGG_BIG ) \
|
||||||
E( BOAT ) \
|
E( BOAT ) \
|
||||||
E( EARTHQUAKE ) \
|
E( EARTHQUAKE ) \
|
||||||
@@ -310,6 +310,7 @@ namespace TR {
|
|||||||
HIT_BLADE,
|
HIT_BLADE,
|
||||||
HIT_BOULDER,
|
HIT_BOULDER,
|
||||||
HIT_SPIKES,
|
HIT_SPIKES,
|
||||||
|
HIT_FLAME,
|
||||||
HIT_REX,
|
HIT_REX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -105,6 +105,9 @@ struct Lara : Character {
|
|||||||
ANIM_HIT_BACK = 126,
|
ANIM_HIT_BACK = 126,
|
||||||
ANIM_HIT_LEFT = 127,
|
ANIM_HIT_LEFT = 127,
|
||||||
ANIM_HIT_RIGHT = 128,
|
ANIM_HIT_RIGHT = 128,
|
||||||
|
|
||||||
|
ANIM_DEATH_BOULDER = 139,
|
||||||
|
|
||||||
ANIM_STAND_ROLL_BEGIN = 146,
|
ANIM_STAND_ROLL_BEGIN = 146,
|
||||||
ANIM_STAND_ROLL_END = 147,
|
ANIM_STAND_ROLL_END = 147,
|
||||||
|
|
||||||
@@ -464,6 +467,8 @@ struct Lara : Character {
|
|||||||
//reset(12, vec3(34236, -2415, 14974), 0); // level 8b (sphinx)
|
//reset(12, vec3(34236, -2415, 14974), 0); // level 8b (sphinx)
|
||||||
//reset(0, vec3(40913, -1012, 42252), PI); // level 8c
|
//reset(0, vec3(40913, -1012, 42252), PI); // level 8c
|
||||||
//reset(10, vec3(90443, 11264 - 256, 114614), PI, STAND_ONWATER); // villa mortal 2
|
//reset(10, vec3(90443, 11264 - 256, 114614), PI, STAND_ONWATER); // villa mortal 2
|
||||||
|
//reset(50, vec3(53703, -18688, -13769), PI); // Level 10c (scion holder)
|
||||||
|
//reset(19, vec3(35364, -512, 40199), PI * 0.5f); // Level 10c (lave flow)
|
||||||
#endif
|
#endif
|
||||||
chestOffset = animation.getJoints(getMatrix(), 7).pos;
|
chestOffset = animation.getJoints(getMatrix(), 7).pos;
|
||||||
}
|
}
|
||||||
@@ -1333,7 +1338,7 @@ struct Lara : Character {
|
|||||||
|
|
||||||
switch (hitType) {
|
switch (hitType) {
|
||||||
case TR::HIT_BOULDER : {
|
case TR::HIT_BOULDER : {
|
||||||
animation.setAnim(level->models[TR::MODEL_LARA_SPEC].animation + 2);
|
animation.setAnim(ANIM_DEATH_BOULDER);
|
||||||
angle = enemy->angle;
|
angle = enemy->angle;
|
||||||
TR::Level::FloorInfo info;
|
TR::Level::FloorInfo info;
|
||||||
level->getFloorInfo(getRoomIndex(), int(pos.x), int(pos.y), int(pos.z), info);
|
level->getFloorInfo(getRoomIndex(), int(pos.x), int(pos.y), int(pos.z), info);
|
||||||
|
@@ -433,6 +433,9 @@ struct Level : IGame {
|
|||||||
case TR::Entity::WATERFALL :
|
case TR::Entity::WATERFALL :
|
||||||
entity.controller = new Waterfall(this, i);
|
entity.controller = new Waterfall(this, i);
|
||||||
break;
|
break;
|
||||||
|
case TR::Entity::TRAP_LAVA :
|
||||||
|
entity.controller = new TrapLava(this, i);
|
||||||
|
break;
|
||||||
default :
|
default :
|
||||||
if (entity.modelIndex > 0)
|
if (entity.modelIndex > 0)
|
||||||
entity.controller = new Controller(this, i);
|
entity.controller = new Controller(this, i);
|
||||||
|
@@ -649,6 +649,35 @@ struct TrapSword : Controller {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct TrapLava : Controller {
|
||||||
|
bool done;
|
||||||
|
|
||||||
|
TrapLava(IGame *game, int entity) : Controller(game, entity), done(false) {}
|
||||||
|
|
||||||
|
virtual void update() {
|
||||||
|
Character *lara = (Character*)level->laraController;
|
||||||
|
if (lara->health > 0.0f && collide(lara))
|
||||||
|
lara->hit(1000.0f, this, TR::HIT_FLAME);
|
||||||
|
|
||||||
|
if (done) {
|
||||||
|
deactivate();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 dir = getDir();
|
||||||
|
pos += dir * (25.0f * 30.0f * Core::deltaTime);
|
||||||
|
|
||||||
|
updateEntity();
|
||||||
|
int roomIndex = getRoomIndex();
|
||||||
|
TR::Room::Sector *s = level->getSector(roomIndex, int(pos.x + dir.x * 2048.0f), int(pos.y), int(pos.z + dir.z * 2048.0f));
|
||||||
|
if (!s || s->floor * 256 != int(pos.y))
|
||||||
|
done = true;
|
||||||
|
getEntity().room = roomIndex;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
struct KeyHole : Controller {
|
struct KeyHole : Controller {
|
||||||
KeyHole(IGame *game, int entity) : Controller(game, entity) {}
|
KeyHole(IGame *game, int entity) : Controller(game, entity) {}
|
||||||
|
|
||||||
@@ -666,6 +695,7 @@ struct KeyHole : Controller {
|
|||||||
virtual void update() {}
|
virtual void update() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct Waterfall : Controller {
|
struct Waterfall : Controller {
|
||||||
#define SPLASH_TIMESTEP (1.0f / 30.0f)
|
#define SPLASH_TIMESTEP (1.0f / 30.0f)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user