From ba5ffaf9777039d62d657fa0a5fcafb9b808f527 Mon Sep 17 00:00:00 2001 From: XProger Date: Sat, 26 Nov 2016 01:39:40 +0300 Subject: [PATCH] closed #13 add doors implementation & puzzle hole mesh swap; #9 loop ambient sound; --- bin/OpenLara.exe | Bin 112640 -> 116736 bytes src/camera.h | 4 ++- src/controller.h | 4 ++- src/format.h | 14 ++++++++-- src/lara.h | 65 ++++++++++++++++++++++++++++++++++------------- src/level.h | 4 +-- src/sound.h | 15 +++++++---- src/trigger.h | 43 ++++++++++++++++++++++++++++--- 8 files changed, 118 insertions(+), 31 deletions(-) diff --git a/bin/OpenLara.exe b/bin/OpenLara.exe index 3d0e86e58169b64c9bdccad43488b5c825fb0814..a6d13b81d0f9b44b14a730a545843d980d2904a6 100644 GIT binary patch delta 46470 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 LJHlVn&TIb%K0Efs delta 42264 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 DuC}Fs diff --git a/src/camera.h b/src/camera.h index ac12b13..a62663f 100644 --- a/src/camera.h +++ b/src/camera.h @@ -57,8 +57,10 @@ struct Camera : Controller { virtual void update() { int lookAt = -1; - if (owner->target > -1) lookAt = owner->target; if (actTargetEntity > -1) lookAt = actTargetEntity; + if (owner->target > -1) lookAt = owner->target; + + owner->viewTarget = lookAt; if (timer > 0.0f) { timer -= Core::deltaTime; diff --git a/src/controller.h b/src/controller.h index b998ed3..2dc7e0e 100644 --- a/src/controller.h +++ b/src/controller.h @@ -52,7 +52,9 @@ struct Controller { meshes[i] = model->mStart + i; } - void meshSwap(TR::Model *model, int mask) { + void meshSwap(TR::Model *model, int mask = 0xFFFFFFFF) { + if (!meshes) initMeshOverrides(); + for (int i = 0; i < model->mCount; i++) { int index = model->mStart + i; if (((1 << i) & mask) && level->meshOffsets[index]) diff --git a/src/format.h b/src/format.h index 8f769ba..8f79e81 100644 --- a/src/format.h +++ b/src/format.h @@ -9,6 +9,10 @@ namespace TR { + enum { + FLOOR_BLOCK = -127, + }; + enum { ANIM_CMD_NONE , ANIM_CMD_OFFSET , @@ -387,6 +391,7 @@ namespace TR { PUZZLE_4 = 113, // sprite HOLE_PUZZLE = 118, + HOLE_PUZZLE_SET = 122, PICKUP = 126, // sprite @@ -766,6 +771,7 @@ namespace TR { struct { Model *muzzleFlash; + Model *puzzleSet; } extra; Level(const char *name, bool demo) { @@ -899,7 +905,8 @@ namespace TR { memset(&extra, 0, sizeof(extra)); for (int i = 0; i < modelsCount; i++) switch (models[i].type) { - case Entity::MUZZLE_FLASH : extra.muzzleFlash = &models[i]; break; + case Entity::MUZZLE_FLASH : extra.muzzleFlash = &models[i]; break; + case Entity::HOLE_PUZZLE_SET : extra.puzzleSet = &models[i]; break; default : ; } } @@ -1032,6 +1039,9 @@ namespace TR { info.trigger = Trigger::ACTIVATE; info.trigCmdCount = 0; + if (s.floor == -127) + return; + Room::Sector *sBelow = &s; while (sBelow->roomBelow != 0xFF) sBelow = &getSector(sBelow->roomBelow, x, z, dx, dz); info.floor = 256 * sBelow->floor; @@ -1072,7 +1082,7 @@ namespace TR { if (ey >= y - 128 && ey < info.floor) info.floor = ey; if (ey < y - 128 && ey > info.ceiling) - info.ceiling = ey + (e.type == Entity::TRAP_FLOOR ? 256 : 0); + info.ceiling = ey + (e.type == Entity::TRAP_FLOOR ? 0 : 256); break; } diff --git a/src/lara.h b/src/lara.h index 59f248b..f3468eb 100644 --- a/src/lara.h +++ b/src/lara.h @@ -24,6 +24,7 @@ #define PICKUP_FRAME_GROUND 40 #define PICKUP_FRAME_UNDERWATER 16 +#define PUZZLE_FRAME 80 #define MAX_TRIGGER_ACTIONS 64 @@ -193,8 +194,9 @@ struct Lara : Character { Inventory inventory; int lastPickUp; + int viewTarget; - Lara(TR::Level *level, int entity, bool home) : Character(level, entity, 1000), home(home), wpnCurrent(Weapon::EMPTY), wpnNext(Weapon::EMPTY), chestOffset(pos) { + Lara(TR::Level *level, int entity, bool home) : Character(level, entity, 1000), home(home), wpnCurrent(Weapon::EMPTY), wpnNext(Weapon::EMPTY), chestOffset(pos), viewTarget(-1) { animation.setAnim(ANIM_STAND); getEntity().flags.active = 1; initMeshOverrides(); @@ -264,12 +266,12 @@ struct Lara : Character { pos = vec3(31390, -2048, 33472); angle = vec3(0.0f, 0.0f, 0.0f); getEntity().room = 63; - + */ // level 2 (trap door) pos = vec3(21987, -1024, 29144); angle = vec3(0.0f, PI * 3.0f * 0.5f, 0.0f); getEntity().room = 61; - + /* // level 3a pos = vec3(41015, 3584, 34494); angle = vec3(0.0f, -PI, 0.0f); @@ -376,6 +378,15 @@ struct Lara : Character { return wpnCurrent == Weapon::EMPTY || arms[0].anim == Weapon::Anim::NONE; } + bool canLookAt() { + return (stand == STAND_GROUND || stand == STAND_SLIDE) + && state != STATE_REACH + && state != STATE_PUSH_BLOCK + && state != STATE_PULL_BLOCK + && state != STATE_PUSH_PULL_READY + && state != STATE_PICK_UP; + } + bool canDrawWeapon() { return wpnCurrent != Weapon::EMPTY && emptyHands() @@ -713,7 +724,8 @@ struct Lara : Character { } else animation.overrideMask &= ~(BODY_ARM_R | BODY_ARM_L); - lookAt(target); + + lookAt(viewTarget); if (wpnCurrent == Weapon::SHOTGUN) aimShotgun(); @@ -725,15 +737,16 @@ struct Lara : Character { float speed = 8.0f * Core::deltaTime; quat rot; + bool can = canLookAt(); // chest - if ((stand == STAND_GROUND || stand == STAND_SLIDE) && aim(target, 7, vec4(-PI * 0.4f, PI * 0.4f, -PI * 0.9f, PI * 0.9f), rot)) + if (can && aim(target, 7, vec4(-PI * 0.4f, PI * 0.4f, -PI * 0.9f, PI * 0.9f), rot)) rotChest = rotChest.slerp(quat(0, 0, 0, 1).slerp(rot, 0.5f), speed); else rotChest = rotChest.slerp(quat(0, 0, 0, 1), speed); animation.overrides[7] = rotChest * animation.overrides[7]; // head - if (aim(target, 14, vec4(-PI * 0.25f, PI * 0.25f, -PI * 0.5f, PI * 0.5f), rot)) + if (can && aim(target, 14, vec4(-PI * 0.25f, PI * 0.25f, -PI * 0.5f, PI * 0.5f), rot)) rotHead = rotHead.slerp(rot, speed); else rotHead = rotHead.slerp(quat(0, 0, 0, 1), speed); @@ -941,15 +954,21 @@ struct Lara : Character { return; break; case TR::Level::Trigger::KEY : - actionState = STATE_USE_KEY; + if (level->entities[info.trigCmd[0].args].flags.active) + return; + actionState = level->entities[info.trigCmd[0].args].type == TR::Entity::HOLE_KEY ? STATE_USE_KEY : STATE_USE_PUZZLE; if (isActive || !isPressed(ACTION) || state == actionState || !emptyHands()) // TODO: STATE_USE_PUZZLE return; if (!checkAngle(level->entities[info.trigCmd[0].args].rotation)) return; - if (animation.canSetState(actionState) && !useItem(TR::Entity::NONE, level->entities[info.trigCmd[0].args].type)) { - playSound(TR::SND_NO, pos, Sound::PAN); + if (animation.canSetState(actionState)) { + if (false) { //!useItem(TR::Entity::NONE, level->entities[info.trigCmd[0].args].type)) { + playSound(TR::SND_NO, pos, Sound::PAN); + return; + } + } else return; - } + lastPickUp = info.trigCmd[0].args; // TODO: it's not pickup, it's key/puzzle hole break; case TR::Level::Trigger::PICKUP : if (!isActive) // check if item is not picked up @@ -964,6 +983,9 @@ struct Lara : Character { if (!animation.setState(actionState)) return; if (info.trigger == TR::Level::Trigger::SWITCH || info.trigger == TR::Level::Trigger::KEY) { + if (info.trigger == TR::Level::Trigger::KEY) + level->entities[info.trigCmd[0].args].flags.active = true; + TR::Entity &p = level->entities[info.trigCmd[0].args]; angle.y = p.rotation; angle.x = 0; @@ -1370,14 +1392,23 @@ struct Lara : Character { } virtual void doCustomCommand(int curFrame, int prevFrame) { - if (state == STATE_PICK_UP) { - TR::Entity &item = level->entities[lastPickUp]; - if (!item.flags.invisible) { - int pickupFrame = stand == STAND_GROUND ? PICKUP_FRAME_GROUND : PICKUP_FRAME_UNDERWATER; - if (animation.isFrameActive(pickupFrame)) { - item.flags.invisible = true; - inventory.add(item.type, 1); + switch (state) { + case STATE_PICK_UP : { + TR::Entity &item = level->entities[lastPickUp]; + if (!item.flags.invisible) { + int pickupFrame = stand == STAND_GROUND ? PICKUP_FRAME_GROUND : PICKUP_FRAME_UNDERWATER; + if (animation.isFrameActive(pickupFrame)) { + item.flags.invisible = true; + inventory.add(item.type, 1); + } } + break; + } + case STATE_USE_PUZZLE : { + TR::Entity &item = level->entities[lastPickUp]; + if (animation.isFrameActive(PUZZLE_FRAME)) + ((Controller*)item.controller)->meshSwap(level->extra.puzzleSet); + break; } } } diff --git a/src/level.h b/src/level.h index b65eb4b..3f086e0 100644 --- a/src/level.h +++ b/src/level.h @@ -385,7 +385,7 @@ struct Level { } void renderEntity(const TR::Entity &entity) { - // if (entity.room != lara->getRoomIndex()) return; + //if (entity.room != lara->getRoomIndex()) return; if (entity.type == TR::Entity::NONE) return; ASSERT(entity.controller); @@ -495,7 +495,7 @@ struct Level { // Debug::Level::portals(level); // Debug::Level::meshes(level); Debug::Level::entities(level); - // Debug::Level::info(level, lara->getEntity(), lara->animation); + Debug::Level::info(level, lara->getEntity(), lara->animation); Debug::end(); #endif } diff --git a/src/sound.h b/src/sound.h index 761d67c..c9e26c7 100644 --- a/src/sound.h +++ b/src/sound.h @@ -196,10 +196,9 @@ namespace Sound { OGG(Stream *stream, int channels) : Decoder(stream, channels), size(stream->size), pos(0) { buffer = new char[size]; // TODO: file streaming stream->raw(buffer, size); - int error; alloc.alloc_buffer_length_in_bytes = 256 * 1024; alloc.alloc_buffer = new char[alloc.alloc_buffer_length_in_bytes]; - ogg = stb_vorbis_open_memory((unsigned char*)buffer, size, &error, &alloc); + ogg = stb_vorbis_open_memory((unsigned char*)buffer, size, NULL, &alloc); stb_vorbis_info info = stb_vorbis_get_info(ogg); channels = info.channels; } @@ -220,7 +219,10 @@ namespace Sound { return i; } - // TODO: replay + virtual void replay() { + stb_vorbis_close(ogg); + ogg = stb_vorbis_open_memory((unsigned char*)buffer, size, NULL, &alloc); + } }; #endif @@ -321,8 +323,11 @@ namespace Sound { while (i < count) { int res = decoder->decode(&frames[i], count - i); if (res == 0) { - if (i == 0) isPlaying = false; - break; + if (!(flags & Flags::LOOP)) { + if (i == 0) isPlaying = false; + break; + } else + decoder->replay(); } i += res; } diff --git a/src/trigger.h b/src/trigger.h index 71ffb42..7fec58d 100644 --- a/src/trigger.h +++ b/src/trigger.h @@ -51,7 +51,7 @@ struct Trigger : Controller { } } - if (!inState()) + if (!inState() && entity.type != TR::Entity::HOLE_KEY && entity.type != TR::Entity::HOLE_PUZZLE) animation.setState(state != baseState ? baseState : (entity.type == TR::Entity::TRAP_BLADE ? 2 : (baseState ^ 1))); updateAnimation(true); @@ -179,8 +179,45 @@ struct Block : Controller { struct Door : Trigger { + int8 *floor[2], orig[2]; - Door(TR::Level *level, int entity) : Trigger(level, entity, true) {} + Door(TR::Level *level, int entity) : Trigger(level, entity, true) { + TR::Entity &e = getEntity(); + TR::Level::FloorInfo info; + vec3 p = pos - getDir() * 1024.0f; + + level->getFloorInfo(e.room, (int)p.x, (int)p.y, (int)p.z, info); + int dx, dz; + TR::Room::Sector *s = &level->getSector(e.room, (int)p.x, (int)p.z, dx, dz); + + orig[0] = *(floor[0] = &s->floor); + + if (info.roomNext != 0xFF) { + s = &level->getSector(info.roomNext, e.x, e.z, dx, dz); + orig[1] = *(floor[1] = &s->floor); + } else + floor[1] = NULL; + + updateBlock(); + } + + void updateBlock() { + int8 v[2]; + if (getEntity().flags.active) { + v[0] = orig[0]; + v[1] = orig[1]; + } else + v[0] = v[1] = TR::FLOOR_BLOCK; + + if (floor[0]) *floor[0] = v[0]; + if (floor[1]) *floor[1] = v[1]; + } + + virtual bool activate(ActionCommand *cmd) { + bool res = Trigger::activate(cmd); + updateBlock(); + return res; + } }; struct DoorFloor : Trigger { @@ -235,7 +272,7 @@ struct TrapFloor : Trigger { e.room = info.roomBelow; if (pos.y > info.floor) { - pos.y = info.floor; + pos.y = (float)info.floor; animation.setState(STATE_DOWN); } updateEntity();