Merge remote-tracking branch 'origin/lara_info'

# Conflicts:
#	TR5Main/Game/Lara/lara_flare.h
#	TR5Main/Scripting/GameLogicScript.cpp
This commit is contained in:
MontyTRC89 2021-07-14 05:48:42 +02:00
commit 8294e73199
24 changed files with 375 additions and 300 deletions

View file

@ -196,12 +196,12 @@ function<LaraRoutineFunction> lara_control_routines[NUM_LARA_STATES + 1] = {
lara_as_null,//137
lara_as_null,//138
lara_as_null,//ara_as_hang_feet,//139
lara_as_null,//lara_as_hang_feet_shimmyr,//140
lara_as_null,//lara_as_hang_feet_shimmyl,//141
lara_as_null,//lara_as_hang_feet_inRcorner,//142
lara_as_null,//lara_as_hang_feet_inLcorner,//143
lara_as_null,//lara_as_hang_feet_outRcorner,//144
lara_as_null,//lara_as_hang_feet_outLcorner,//145
lara_as_hang_feet_shimmyr,//140
lara_as_hang_feet_shimmyl,//141
lara_as_hang_feet_inRcorner,//142
lara_as_hang_feet_inLcorner,//143
lara_as_hang_feet_outRcorner,//144
lara_as_hang_feet_outLcorner,//145
lara_as_controlledl,
lara_as_null,
lara_as_null,
@ -349,9 +349,9 @@ function<LaraRoutineFunction> lara_collision_routines[NUM_LARA_STATES + 1] = {
lara_void_func,
lara_void_func,
lara_void_func,
lara_void_func,//lara_col_hang_feet,
lara_void_func,//lara_col_hang_feet_shimmyr,
lara_void_func,//lara_col_hang_feet_shimmyl,
lara_col_hang_feet,
lara_col_hang_feet_shimmyr,
lara_col_hang_feet_shimmyl,
lara_default_col,
lara_default_col,
lara_default_col,
@ -789,8 +789,8 @@ void LaraControl(short itemNumber)
}
if (Lara.air < 0)
{
if (LaraDrawType == LARA_DIVESUIT && Lara.anxiety < 251)
Lara.anxiety += 4;
// if (LaraDrawType == LARA_DIVESUIT && Lara.anxiety < 251)
// Lara.anxiety += 4;
Lara.air = -1;
item->hitPoints -= 5;
}
@ -1138,7 +1138,6 @@ void LaraCheat(ITEM_INFO* item, COLL_INFO* coll)
}
Lara.gunStatus = LG_NO_ARMS;
LaraInitialiseMeshes();
Lara.meshEffects = 0;
LaraItem->hitPoints = 1000;
}
}

View file

@ -230,6 +230,12 @@ void lara_as_run(ITEM_INFO* item, COLL_INFO* coll)
if (item->pos.zRot < -LARA_LEAN_MAX)
item->pos.zRot = -LARA_LEAN_MAX;
}
else
{
item->pos.zRot -= LARA_LEAN_RATE;
if (item->pos.zRot < -LARA_LEAN_MAX * 3 / 5)//gives best results
item->pos.zRot = -LARA_LEAN_MAX * 3 / 5;
}
}
else if (TrInput & IN_RIGHT)
{
@ -243,6 +249,12 @@ void lara_as_run(ITEM_INFO* item, COLL_INFO* coll)
if (item->pos.zRot > LARA_LEAN_MAX)
item->pos.zRot = LARA_LEAN_MAX;
}
else
{
item->pos.zRot += LARA_LEAN_RATE;
if (item->pos.zRot > LARA_LEAN_MAX * 3 / 5)//gives best results
item->pos.zRot = LARA_LEAN_MAX * 3 / 5;
}
}
if (item->animNumber == LA_STAND_TO_RUN)
@ -1066,7 +1078,7 @@ void lara_col_reach(ITEM_INFO* item, COLL_INFO* coll)
{
if (TestHangSwingIn(item, angle))
{
/* if (TR12_OSCILLATE_HANG == true)
if (Lara.NewAnims.OscillateHanging)
{
Lara.headYrot = 0;
Lara.headXrot = 0;
@ -1078,7 +1090,7 @@ void lara_col_reach(ITEM_INFO* item, COLL_INFO* coll)
item->goalAnimState = LS_HANG;
}
else
{ */
{
Lara.headYrot = 0;
Lara.headXrot = 0;
Lara.torsoYrot = 0;
@ -1087,18 +1099,18 @@ void lara_col_reach(ITEM_INFO* item, COLL_INFO* coll)
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->currentAnimState = LS_MONKEYSWING_IDLE;
item->goalAnimState = LS_MONKEYSWING_IDLE;
// }
}
}
else
{
/* if (TestHangFeet(item, angle))
if (TestHangFeet(item, angle))
{
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->currentAnimState = LS_HANG;
item->goalAnimState = LS_HANG_FEET;
}
else*/
else
{
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
@ -1683,14 +1695,14 @@ void lara_col_upjump(ITEM_INFO* item, COLL_INFO* coll)
}
else
{
/* if (TestHangFeet(item, angle))
if (TestHangFeet(item, angle))
{
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase + 12;
item->currentAnimState = LS_HANG;
item->goalAnimState = LS_HANG_FEET;
}
else*/
else
{
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase + 12;
@ -1840,7 +1852,10 @@ void lara_col_roll(ITEM_INFO* item, COLL_INFO* coll)
if (LaraFallen(item, coll))
return;
if (TrInput & IN_FORWARD && item->animNumber == LA_SWANDIVE_ROLL)
//##LUA debug etc.
Lara.NewAnims.SwandiveRollRun = 1;
if (TrInput & IN_FORWARD && item->animNumber == LA_SWANDIVE_ROLL && Lara.NewAnims.SwandiveRollRun)
{
item->goalAnimState = LS_RUN_FORWARD;
}
@ -1957,8 +1972,14 @@ void lara_as_wade(ITEM_INFO* item, COLL_INFO* coll)
if (TestLaraLean(item, coll))
{
item->pos.zRot -= LARA_LEAN_RATE;
if (item->pos.zRot < -(LARA_LEAN_MAX / 2))
item->pos.zRot = -(LARA_LEAN_MAX / 2);
if (item->pos.zRot < -LARA_LEAN_MAX / 2)
item->pos.zRot = -LARA_LEAN_MAX / 2;
}
else
{
item->pos.zRot -= LARA_LEAN_RATE;
if (item->pos.zRot < -LARA_LEAN_MAX * 3 / 5)
item->pos.zRot = -LARA_LEAN_MAX * 3 / 5;
}
}
else if (TrInput & IN_RIGHT)
@ -1970,8 +1991,14 @@ void lara_as_wade(ITEM_INFO* item, COLL_INFO* coll)
if (TestLaraLean(item, coll))
{
item->pos.zRot += LARA_LEAN_RATE;
if (item->pos.zRot > (LARA_LEAN_MAX / 2))
item->pos.zRot = (LARA_LEAN_MAX / 2);
if (item->pos.zRot > LARA_LEAN_MAX / 2)
item->pos.zRot = LARA_LEAN_MAX / 2;
}
else
{
item->pos.zRot += LARA_LEAN_RATE;
if (item->pos.zRot > LARA_LEAN_MAX * 3 / 5)
item->pos.zRot = LARA_LEAN_MAX * 3 / 5;
}
}
@ -1994,6 +2021,12 @@ void lara_as_wade(ITEM_INFO* item, COLL_INFO* coll)
if (item->pos.zRot < -LARA_LEAN_MAX)
item->pos.zRot = -LARA_LEAN_MAX;
}
else
{
item->pos.zRot -= LARA_LEAN_RATE;
if (item->pos.zRot < -LARA_LEAN_MAX * 3 / 5)
item->pos.zRot = -LARA_LEAN_MAX * 3 / 5;
}
}
else if (TrInput & IN_RIGHT)
{
@ -2007,6 +2040,12 @@ void lara_as_wade(ITEM_INFO* item, COLL_INFO* coll)
if (item->pos.zRot > LARA_LEAN_MAX)
item->pos.zRot = LARA_LEAN_MAX;
}
else
{
item->pos.zRot += LARA_LEAN_RATE;
if (item->pos.zRot > LARA_LEAN_MAX * 3 / 5)
item->pos.zRot = LARA_LEAN_MAX * 3 / 5;
}
}
if (TrInput & IN_FORWARD)

View file

@ -5,6 +5,7 @@
#include "lara_slide.h"
#include "lara_collide.h"
#include "draw.h"
#include <Game/Lara/lara_flare.h>
/*this file has all the related functions to ducking and crawling*/
@ -33,8 +34,8 @@ void lara_as_duck(ITEM_INFO* item, COLL_INFO* coll)
GetFloor(LaraItem->pos.xPos, LaraItem->pos.yPos, LaraItem->pos.zPos, &roomNum);
// FOR DEBUG PURPOSES UNTIL SCRIPTING IS FINISHED-
// EnableCrouchRoll = true;
// FOR DEBUG PURPOSES UNTIL SCRIPTING IS FINISHED- ## LUA
Lara.NewAnims.CrouchRoll = 1;
if ((TrInput & IN_FORWARD || TrInput & IN_BACK)
@ -48,7 +49,7 @@ void lara_as_duck(ITEM_INFO* item, COLL_INFO* coll)
if ((item->animNumber == LA_CROUCH_IDLE
|| item->animNumber == LA_STAND_TO_CROUCH_END)
&& !(TrInput & IN_FLARE || TrInput & IN_DRAW)
&& (Lara.gunType != WEAPON_FLARE || Lara.flareAge < 900 && Lara.flareAge != 0))
&& (Lara.gunType != WEAPON_FLARE || Lara.flareAge < FLARE_AGE && Lara.flareAge != 0))
{
Lara.torsoYrot = 0;
Lara.torsoXrot = 0;
@ -61,15 +62,15 @@ void lara_as_duck(ITEM_INFO* item, COLL_INFO* coll)
&& Lara.gunStatus == LG_NO_ARMS
&& Lara.waterStatus != LW_WADE
|| Lara.waterSurfaceDist == 256
&& !(Lara.waterSurfaceDist > 256))
// && EnableCrouchRoll == true)
&& !(Lara.waterSurfaceDist > 256)
&& Lara.NewAnims.CrouchRoll)
{
if (LaraFloorFront(item, item->pos.yRot, 1024) >= 384 || //4 clicks away from holes in the floor
TestWall(item, 1024, 0, -256)) //4 clicks away from walls
TestWall(item, WALL_SIZE / 2, 0, -256)) //2 clicks away from walls + added a fix in lara_col_crouch_roll, better this way
return;
if (!(TrInput & IN_FLARE || TrInput & IN_DRAW) //avoids some flare spawning/wep stuff
&& (Lara.gunType != WEAPON_FLARE || Lara.flareAge < 900 && Lara.flareAge != 0))
&& (Lara.gunType != WEAPON_FLARE || Lara.flareAge < FLARE_AGE && Lara.flareAge != 0))
{
Lara.torsoYrot = 0;
@ -130,7 +131,7 @@ void lara_col_duck(ITEM_INFO* item, COLL_INFO* coll)
}
}
void lara_as_crouch_roll(ITEM_INFO* item, COLL_INFO* coll)
void lara_as_crouch_roll(ITEM_INFO* item, COLL_INFO* coll)//horrible name.
{
/*state 72*/
/*collision: lara_col_crouch_roll*/
@ -138,26 +139,43 @@ void lara_as_crouch_roll(ITEM_INFO* item, COLL_INFO* coll)
item->goalAnimState = LS_CROUCH_IDLE;
}
void lara_col_crouch_roll(ITEM_INFO* item, COLL_INFO* coll)
void lara_col_crouch_roll(ITEM_INFO* item, COLL_INFO* coll)//horrible name.
{
/*state 72*/
/*state code: lara_as_crouch_roll*/
Lara.isDucked = true;
item->gravityStatus = false;
item->gravityStatus = 0;
item->fallspeed = 0;
Lara.moveAngle = item->pos.yRot;
coll->badPos = 384;
coll->facing = item->pos.yRot;
coll->badPos = STEPUP_HEIGHT;
coll->badNeg = -STEPUP_HEIGHT;
coll->badNeg = -384;
coll->badCeiling = 0;
coll->slopesAreWalls = true;
coll->facing = Lara.moveAngle;
GetCollisionInfo(coll, item->pos.xPos, item->pos.yPos, item->pos.zPos, item->roomNumber, -400);
coll->slopesAreWalls = 1;
GetCollisionInfo(coll, item->pos.xPos, item->pos.yPos, item->pos.zPos, item->roomNumber, 400);
if (LaraFallen(item, coll))
Lara.gunStatus = LG_NO_ARMS;
else if (!TestLaraSlide(item, coll))
{
if (coll->midCeiling >= -362)
Lara.keepDucked = 1;
else
Lara.keepDucked = 0;
if (coll->midFloor < coll->badNeg)//hit a wall, stop
{
item->pos.xPos = coll->old.x;
item->pos.yPos = coll->old.y;
item->pos.zPos = coll->old.z;
return;
}
ShiftItem(item, coll);
if (coll->midFloor != NO_HEIGHT)
if (!LaraHitCeiling(item, coll))
item->pos.yPos += coll->midFloor;
}
}
/*crouch/duck end*/
/*-*/
/*crawl start*/
@ -172,17 +190,14 @@ void lara_as_all4s(ITEM_INFO* item, COLL_INFO* coll)
}
// FOR DEBUG PURPOSES UNTIL SCRIPTING IS FINISHED
// EnableCrawlFlex1clickdown = true;
// EnableCrawlFlex1clickup = true;
// EnableCrawlFlex3clickE = true;
// EnableCrawlFlex2clickE = true;
// EnableCrawlFlex1clickE = true;
// Lara.NewAnims.Crawl1clickdown = 1;
// Lara.NewAnims.Crawl1clickup = 1;
// Lara.NewAnims.CrawlExit1click = 1;
// Lara.NewAnims.CrawlExit2click = 1;
// Lara.NewAnims.CrawlExit3click = 1;
Lara.NewAnims.CrawlExitJump = 1;
if (TrInput & IN_JUMP)
if (TrInput & IN_JUMP && Lara.NewAnims.CrawlExitJump)
{
GAME_VECTOR s, d;
MESH_INFO* StaticMesh;
@ -228,7 +243,7 @@ void lara_as_all4s(ITEM_INFO* item, COLL_INFO* coll)
d.y = s.y + 160;
d.z = s.z + 768 * phd_cos(LaraItem->pos.yRot);
if (LOS(&s, &d) && item->animNumber != LA_CROUCH_TO_CRAWL_START && item->animNumber != LA_CROUCH_TO_CRAWL_CONTINUE)// && EnableCrawlFlex3clickE == true)
if (LOS(&s, &d) && item->animNumber != LA_CROUCH_TO_CRAWL_START && item->animNumber != LA_CROUCH_TO_CRAWL_CONTINUE && Lara.NewAnims.CrawlExit3click)
{
item->animNumber = LA_CRAWL_JUMP_DOWN_23CLICK;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
@ -252,7 +267,7 @@ void lara_as_all4s(ITEM_INFO* item, COLL_INFO* coll)
d.y = s.y + 160;
d.z = s.z + 768 * phd_cos(LaraItem->pos.yRot);
if (LOS(&s, &d) && item->animNumber != LA_CROUCH_TO_CRAWL_START && item->animNumber != LA_CROUCH_TO_CRAWL_CONTINUE)// && EnableCrawlFlex2clickE == true)
if (LOS(&s, &d) && item->animNumber != LA_CROUCH_TO_CRAWL_START && item->animNumber != LA_CROUCH_TO_CRAWL_CONTINUE && Lara.NewAnims.CrawlExit2click)
{
item->animNumber = LA_CRAWL_JUMP_DOWN_23CLICK;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
@ -275,7 +290,7 @@ void lara_as_all4s(ITEM_INFO* item, COLL_INFO* coll)
d.y = s.y + 160;
d.z = s.z + 768 * phd_cos(LaraItem->pos.yRot);
if (LOS(&s, &d) && item->animNumber != LA_CROUCH_TO_CRAWL_START && item->animNumber != LA_CROUCH_TO_CRAWL_CONTINUE)// && EnableCrawlFlex1clickE == true)
if (LOS(&s, &d) && item->animNumber != LA_CROUCH_TO_CRAWL_START && item->animNumber != LA_CROUCH_TO_CRAWL_CONTINUE && Lara.NewAnims.CrawlExit1click)
{
item->animNumber = LA_CRAWL_JUMP_DOWN_1CLICK;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
@ -292,8 +307,8 @@ void lara_as_all4s(ITEM_INFO* item, COLL_INFO* coll)
{
if (LaraFloorFront(item, item->pos.yRot, 256) == -256 &&
LaraCeilingFront(item, item->pos.yRot, 256, 256) != NO_HEIGHT &&
LaraCeilingFront(item, item->pos.yRot, 256, 256) <= -512)// &&
// EnableCrawlFlex1clickup == true)
LaraCeilingFront(item, item->pos.yRot, 256, 256) <= -512 &&
Lara.NewAnims.Crawl1clickup)
{
item->animNumber = LA_CRAWL_UP_STEP;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
@ -303,8 +318,8 @@ void lara_as_all4s(ITEM_INFO* item, COLL_INFO* coll)
else
if (LaraFloorFront(item, item->pos.yRot, 256) == 256 &&
LaraCeilingFront(item, item->pos.yRot, 256, 256) != NO_HEIGHT &&
LaraCeilingFront(item, item->pos.yRot, 256, -256) <= -512)// &&
// EnableCrawlFlex1clickdown == true)
LaraCeilingFront(item, item->pos.yRot, 256, -256) <= -512 &&
Lara.NewAnims.Crawl1clickdown)
{
item->animNumber = LA_CRAWL_DOWN_STEP;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
@ -498,7 +513,7 @@ void lara_as_crawl(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 81*/
/*collision: lara_col_crawl*/
if (item->hitPoints <= 0 || TrInput & IN_JUMP)
if (item->hitPoints <= 0)
{
item->goalAnimState = LS_CRAWL_IDLE;
return;
@ -839,14 +854,14 @@ void lara_col_crawl2hang(ITEM_INFO* item, COLL_INFO* coll)
}
else
{
/* if (TestHangFeet(item, angle))
if (TestHangFeet(item, angle))
{
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->currentAnimState = LS_HANG;
item->goalAnimState = LS_HANG_FEET;
}
else*/
else
{
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;

View file

@ -64,7 +64,7 @@ void FlareControl(short itemNumber)
DoProperDetection(itemNumber, oldX, oldY, oldZ, xv, item->fallspeed, zv);
short age = (short)(item->data) & 0x7FFF;
if (age >= 900)
if (age >= FLARE_AGE)
{
if (!item->fallspeed && !item->speed)
{
@ -397,7 +397,7 @@ void DoFlareInHand(int flare_age)
/* Hardcoded code */
if (Lara.flareAge >= 900)
if (Lara.flareAge >= FLARE_AGE)
{
if (Lara.gunStatus == LG_NO_ARMS)
Lara.gunStatus = LG_UNDRAW_GUNS;
@ -414,7 +414,7 @@ int DoFlareLight(PHD_VECTOR* pos, int age)
int r, g, b;
float random;
int falloff;
if (age >= 900 || age == 0)
if (age >= FLARE_AGE || age == 0)
return 0;
random = generateFloat();
@ -433,7 +433,7 @@ int DoFlareLight(PHD_VECTOR* pos, int age)
TriggerDynamicLight(x, y, z, falloff, r, g, b);
return (random < 0.9f);
}
else if (age < 810)
else if (age < (FLARE_AGE - 90))
{
float multiplier = FlareFlickerTable[age % FlareFlickerTable.size()];
falloff = 12*multiplier;
@ -448,7 +448,7 @@ int DoFlareLight(PHD_VECTOR* pos, int age)
{
float multiplier = FlareFlickerTableLow[age % FlareFlickerTableLow.size()];
falloff = 12* (1.0f - ((age-810) / (900-810)));
falloff = 12 * (1.0f - ((age - (FLARE_AGE - 90)) / (FLARE_AGE - (FLARE_AGE - 90))));
r = FlareMainColor.x * 255 * multiplier;
g = FlareMainColor.y * 255 * multiplier;
b = FlareMainColor.z * 255 * multiplier;

View file

@ -3,6 +3,8 @@
enum GAME_OBJECT_ID : short;
#define FLARE_AGE 30*30 //30 seconds * 30 frames
void FlareControl(short item_number);
void ready_flare();
void undraw_flare_meshes();

View file

@ -274,10 +274,10 @@ void lara_as_intcornerr(ITEM_INFO* item, COLL_INFO* coll)
-corner anims(works well, tested with placeholder anims)
-handstand(not tested)*/
/*void lara_as_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
void lara_as_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 139*/
/*collision: lara_col_hang_feet
//collision: lara_col_hang_feet
Lara.isClimbing = false;
if (item->hitPoints <= 0)
@ -298,7 +298,7 @@ void lara_as_intcornerr(ITEM_INFO* item, COLL_INFO* coll)
void lara_col_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 139*/
/*state code: lara_as_hang_feet
//state code: lara_as_hang_feet
item->fallspeed = 0;
item->gravityStatus = false;
@ -395,7 +395,7 @@ void lara_col_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
}
}
}
/*
if (Lara.climbStatus != 0 &&
coll->midCeiling <= -256 &&
abs(coll->leftCeiling2 - coll->rightCeiling2) < 60)
@ -406,24 +406,24 @@ void lara_col_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
}
else
{
item->animNumber = LA_LADDER_UP_HANDS;
item->animNumber = LA_LADDER_SHIMMY_UP;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->goalAnimState = LS_HANG;
item->currentAnimState = LS_HANG;
}
}
return;
}
Lara.moveAngle = item->pos.yRot;
LaraHangTest(item, coll);
}
}
void lara_as_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 140*/
/*collision: lara_col_hang_feet_shimmyr
//collision: lara_col_hang_feet_shimmyr
coll->enableBaddiePush = false;
coll->enableSpaz = false;
Camera.targetAngle = 0;
@ -436,7 +436,7 @@ void lara_as_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll)
void lara_col_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 140*/
/*state code: lara_as_hang_feet_shimmyr
//state code: lara_as_hang_feet_shimmyr
Lara.moveAngle = item->pos.yRot + ANGLE(90);
coll->radius = LARA_RAD;
LaraHangTest(item, coll);
@ -446,7 +446,7 @@ void lara_col_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll)
void lara_as_hang_feet_shimmyl(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 141*/
/*collision: lara_col_hang_feet_shimmyl
//collision: lara_col_hang_feet_shimmyl
coll->enableBaddiePush = false;
coll->enableSpaz = false;
Camera.targetAngle = 0;
@ -458,55 +458,51 @@ void lara_as_hang_feet_shimmyl(ITEM_INFO* item, COLL_INFO* coll)
void lara_col_hang_feet_shimmyl(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 141*/
/*state code: lara_as_hang_feet_shimmyl
//state code: lara_as_hang_feet_shimmyl
Lara.moveAngle = item->pos.yRot - ANGLE(90);
coll->radius = LARA_RAD;
LaraHangTest(item, coll);
Lara.moveAngle = item->pos.yRot - ANGLE(90);
}
/*go around corners feet
//go around corners feet
void lara_as_hang_feet_inRcorner(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 142*/
/*collision: lara_default_col
//collision: lara_default_col
Camera.laraNode = 8;
Camera.targetElevation = ANGLE(33.0f);
if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_RIGHT_CORNER_INNER].frameEnd) // I don't like this either but it's better than adding 4 new 1 frame anims?
SetCornerAnimFeet(item, coll, ANGLE(90.0f),
item->animNumber = LA_SHIMMY_FEET_RIGHT_CORNER_INNER);
SetCornerAnimFeet(item, coll, ANGLE(90.0f), 1);
}
void lara_as_hang_feet_inLcorner(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 143*/
/*collision: lara_default_col
//collision: lara_default_col
Camera.laraNode = 8;
Camera.targetElevation = ANGLE(33.0f);
if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_LEFT_CORNER_INNER].frameEnd)
SetCornerAnimFeet(item, coll, -ANGLE(90.0f),
item->animNumber = LA_SHIMMY_FEET_LEFT_CORNER_INNER);
SetCornerAnimFeet(item, coll, -ANGLE(90.0f), 1);
}
void lara_as_hang_feet_outRcorner(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 144*/
/*collision: lara_default_col
//collision: lara_default_col
Camera.laraNode = 8;
Camera.targetElevation = ANGLE(33.0f);
if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_RIGHT_CORNER_OUTER].frameEnd)
SetCornerAnimFeet(item, coll, -ANGLE(90.0f),
item->animNumber = LA_SHIMMY_FEET_RIGHT_CORNER_OUTER);
SetCornerAnimFeet(item, coll, -ANGLE(90.0f), 1);
}
void lara_as_hang_feet_outLcorner(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 145*/
/*collision: lara_default_col
//collision: lara_default_col
Camera.laraNode = 8;
Camera.targetElevation = ANGLE(33.0f);
if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_LEFT_CORNER_OUTER].frameEnd)
SetCornerAnimFeet(item, coll, ANGLE(90.0f),
item->animNumber = LA_SHIMMY_FEET_LEFT_CORNER_OUTER);
}*/
SetCornerAnimFeet(item, coll, ANGLE(90.0f), 1);
}

View file

@ -13,15 +13,15 @@ void lara_as_extcornerl(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_extcornerr(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_intcornerl(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_intcornerr(ITEM_INFO* item, COLL_INFO* coll);
/*feet hanging and shimmying
//feet hanging and shimmying
void lara_as_hang_feet(ITEM_INFO* item, COLL_INFO* coll);
void lara_col_hang_feet(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll);
void lara_col_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_hang_feet_shimmyl(ITEM_INFO* item, COLL_INFO* coll);
void lara_col_hang_feet_shimmyl(ITEM_INFO* item, COLL_INFO* coll);
/*go around corners feet
//go around corners feet
void lara_as_hang_feet_inRcorner(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_hang_feet_inLcorner(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_hang_feet_outRcorner(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_hang_feet_outLcorner(ITEM_INFO* item, COLL_INFO* coll);*/
void lara_as_hang_feet_outLcorner(ITEM_INFO* item, COLL_INFO* coll);

View file

@ -58,7 +58,8 @@ void InitialiseLara(int restore)
Lara.ropePtr = -1;
LaraItem->hitPoints = 1000;
Lara.gunStatus = LG_NO_ARMS;
Lara.skelebob = 0;
// Lara.skelebob = 0;
memset(&Lara.NewAnims, 0, sizeof(AnimsNew)); //make sure script changes these AFTER Lara is initialized?
LARA_WEAPON_TYPE gun = WEAPON_NONE;

View file

@ -61,7 +61,7 @@ void lara_col_hang2(ITEM_INFO* item, COLL_INFO* coll)
GetCollisionInfo(coll, item->pos.xPos, item->pos.yPos, item->pos.zPos, item->roomNumber, 600);
// FOR DEBUG PURPOSES UNTIL SCRIPTING IS READY-
// EnableMonkeyRoll = true;
Lara.NewAnims.Monkey180Roll = 1;
if (TrInput & IN_FORWARD && coll->collType != CT_FRONT && abs(coll->midCeiling - coll->frontCeiling) < 50)
@ -84,7 +84,7 @@ void lara_col_hang2(ITEM_INFO* item, COLL_INFO* coll)
{
item->goalAnimState = LS_MONKEYSWING_TURN_RIGHT;
}
else if ((TrInput & IN_ROLL))// && EnableMonkeyRoll == true)
else if (TrInput & IN_ROLL && Lara.NewAnims.Monkey180Roll)
{
item->goalAnimState = LS_MONKEYSWING_TURN_180;
}

View file

@ -472,10 +472,10 @@ enum LARA_ANIM
LA_CRAWL_IDLE = 263, // Crwal idle
LA_CROUCH_TO_CRAWL_END = 264, // Crawl > crouch (2/2)
LA_CRAWL_TO_CROUCH_END_UNUSED = 265, // Crouch > crawl (3/3)
LA_CRAWL_TO_IDLE_END_RIGHT_POINTLESS = 266, // TODO: remove.
LA_CRAWL_TO_IDLE_END_RIGHT_POINTLESS = 266, // TODO: remove.//no dont remove thanks
LA_CRAWL_TO_IDLE_RIGHT = 267, // Crawl forward > crawl idle, right leg first
// TODO: in WAD, link next to 263
LA_CRAWL_TO_IDLE_END_LEFT_POINTLESS = 268, // TODO: remove.
LA_CRAWL_TO_IDLE_END_LEFT_POINTLESS = 268, // TODO: remove. //no dont remove thanks
LA_CRAWL_TURN_LEFT = 269, // Crawl rotate left (looped)
LA_CRAWL_TURN_RIGHT = 270, // Crawl rotate right (looped)
LA_MONKEYSWING_TURN_LEFT = 271, // Monkey swing rotate left
@ -961,6 +961,25 @@ typedef struct LARA_ARM
short flash_gun;
};
struct AnimsNew
{
bool CrouchRoll; //crouch roll
bool Monkey180Roll; //the 180° roll on monkeybars
bool Crawl1clickup; //going 1 click up in crawlspaces
bool Crawl1clickdown; //going 1 click down in crawlspaces
bool CrawlExit1click; //crawlspace exit at 1 click
bool CrawlExit2click; //crawlspace exit at 2 clicks
bool CrawlExit3click; //crawlspace exit at 3 clicks
bool CrawlVault1click; //vault into crawlspace at 1 click
bool CrawlVault2click; //vault into crawlspace at 2 clicks
bool CrawlVault3click; //vault into crawlspace at 3 clicks
bool MonkeyVault; //vault up to monkeybars when pressing up + action underneath them. super annoying :)
bool CrawlExitJump; //TR5 crawlspace exit with jump!
bool SwandiveRollRun; //the transition from swandive roll to run
bool OscillateHanging; //the thin ledge grab animation from TR1 and 2
bool FeetHanging; //Daniel's super awesome feet hanging
};
typedef struct LaraInfo
{
short itemNumber;
@ -989,11 +1008,8 @@ typedef struct LaraInfo
short flareFrame;
short poisoned;
short dpoisoned;
short electric; // used for electric value in TR3
byte anxiety;
byte wet[NUM_LARA_MESHES];
bool flareControlLeft;
bool flareControlRight; // not used
bool look;
bool burn;
bool keepDucked;
@ -1012,7 +1028,6 @@ typedef struct LaraInfo
int waterSurfaceDist;
PHD_VECTOR lastPos;
FX_INFO* spazEffect;
int meshEffects;
int meshPtrs[NUM_LARA_MESHES];
ITEM_INFO* target;
short targetAngles[2];
@ -1047,7 +1062,6 @@ typedef struct LaraInfo
byte ropeFlag;
byte moveCount;
int ropeCount;
byte skelebob;
byte wetcloth;
byte bottle;
signed char location;
@ -1056,12 +1070,12 @@ typedef struct LaraInfo
byte tightRopeOnCount;
byte tightRopeOff;
byte tightRopeFall;
byte chaffTimer;
/// =================================== NEW:
byte BeetleLife;
short hasBeetleThings;// & 1 -> beetle. & 2 -> combo1. & 4 ->combo2
byte small_waterskin;// 1 = has the waterskin. 2 = has the waterskin and it has 1 liter. etc. max value is 4: has skin + 3 = 4
byte big_waterskin;// 1 = has the waterskin. 2 = has the waterskin and it has 1 liter. etc. max value is 6: has skin + 5 liters = 6
AnimsNew NewAnims;//troye's creative naming
short Vehicle;
short ExtraAnim;
bool mineL;

View file

@ -649,7 +649,7 @@ void LaraSwimCollision(ITEM_INFO* item, COLL_INFO* coll)
}
else if (item->fallspeed > 100)
{
if (LaraDrawType == 5)
/* if (LaraDrawType == 5)
{
SoundEffect(SFX_TR5_SWIMSUIT_METAL_CLASH, &LaraItem->pos, ((2 * GetRandomControl() + 0x8000) * 256) | 6);
}
@ -657,7 +657,7 @@ void LaraSwimCollision(ITEM_INFO* item, COLL_INFO* coll)
if (Lara.anxiety < 96)
{
Lara.anxiety += 16;
}
}*/
}
if (Lara.waterStatus != LW_FLYCHEAT && Lara.ExtraAnim == NO_ITEM)

View file

@ -18,9 +18,6 @@ static short RightClimbTab[4] = // offset 0xA0640
0x0800, 0x0100, 0x0200, 0x0400
};
//bool EnableCrawlFlex1click, EnableCrawlFlex2click, EnableCrawlFlex3click, EnableMonkeyVault;
//bool TR12_OSCILLATE_HANG, EnableFeetHang;
/*this file has all the generic test functions called in lara's state code*/
int TestLaraVault(ITEM_INFO* item, COLL_INFO* coll)
@ -28,10 +25,11 @@ int TestLaraVault(ITEM_INFO* item, COLL_INFO* coll)
if (!(TrInput & IN_ACTION) || Lara.gunStatus != LG_NO_ARMS)
return 0;
// EnableCrawlFlex1click = true;
// EnableCrawlFlex2click = true;
// EnableCrawlFlex3click = true;
// EnableMonkeyVault = true;
//##LUA debug etc.
// Lara.NewAnims.CrawlVault1click = 1;
// Lara.NewAnims.CrawlVault2click = 1;
// Lara.NewAnims.CrawlVault3click = 1;
// Lara.NewAnims.MonkeyVault = 1;
if (coll->collType == CT_FRONT)
{
@ -56,7 +54,7 @@ int TestLaraVault(ITEM_INFO* item, COLL_INFO* coll)
if (coll->frontFloor < 0 && coll->frontFloor >= -256)
{
if (!slope && (abs(coll->frontCeiling - coll->frontFloor) < 256))// && EnableCrawlFlex1click == true)
if (!slope && (abs(coll->frontCeiling - coll->frontFloor) < 256) && Lara.NewAnims.CrawlVault1click)
{
item->animNumber = LA_VAULT_TO_CROUCH_1CLICK;
item->currentAnimState = LS_GRABBING;
@ -85,7 +83,7 @@ int TestLaraVault(ITEM_INFO* item, COLL_INFO* coll)
item->pos.yPos += coll->frontFloor + 512;
Lara.gunStatus = LG_HANDS_BUSY;
}
else if ((!slope && (abs(coll->frontCeiling - coll->frontFloor) < 256)))// && EnableCrawlFlex2click == true)
else if ((!slope && (abs(coll->frontCeiling - coll->frontFloor) < 256)) && Lara.NewAnims.CrawlVault2click)
{
item->animNumber = LA_VAULT_TO_CROUCH_2CLICK;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
@ -118,7 +116,7 @@ int TestLaraVault(ITEM_INFO* item, COLL_INFO* coll)
item->pos.yPos += coll->frontFloor + 768;
Lara.gunStatus = LG_HANDS_BUSY;
}
else if ((!slope && (abs(coll->frontCeiling - coll->frontFloor) < 256)))// && EnableCrawlFlex3click == true))
else if ((!slope && (abs(coll->frontCeiling - coll->frontFloor) < 256)) && Lara.NewAnims.CrawlVault3click)
{
item->animNumber = LA_VAULT_TO_CROUCH_3CLICK;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
@ -197,36 +195,24 @@ int TestLaraVault(ITEM_INFO* item, COLL_INFO* coll)
}
return 1;
}
#if 0
else// if (EnableMonkeyVault == true)
else if (Lara.NewAnims.MonkeyVault)//gross
{
if (Lara.canMonkeySwing)
{
FLOOR_INFO* F;
int c, h;
short roomNum = item->roomNumber;
F = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNum);
c = GetCeiling(F, item->pos.xPos, item->pos.yPos, item->pos.zPos);
h = (c)-(item->pos.yPos);
if (h > 1792 ||
h < -1792 ||
abs(h) == 768)
{
int ceiling = (GetCeiling(GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNum),
item->pos.xPos, item->pos.yPos, item->pos.zPos))-(item->pos.yPos);
if (ceiling > 1792 || ceiling < -1792 || abs(ceiling) == 768)
return 0;
}
item->animNumber = LA_STAND_IDLE;
item->frameNumber = g_Level.Anims[LA_STAND_IDLE].frameBase;
item->goalAnimState = LS_JUMP_UP;
item->currentAnimState = LS_TEST_1;
AnimateLara(item);
return 1;
}
}
// else
return 0;
#else
else return 0;
#endif
}
int TestWall(ITEM_INFO* item, int front, int right, int down)
@ -439,13 +425,13 @@ int LaraHangTest(ITEM_INFO* item, COLL_INFO* coll)
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase + 21;
}
/* else if (item->currentAnimState == LS_SHIMMY_FEET_LEFT || item->currentAnimState == LS_SHIMMY_FEET_RIGHT)
else if (item->currentAnimState == LS_SHIMMY_FEET_LEFT || item->currentAnimState == LS_SHIMMY_FEET_RIGHT)
{
item->currentAnimState = LS_HANG_FEET;
item->goalAnimState = LS_HANG_FEET;
item->animNumber = LA_HANG_FEET_IDLE;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
}*/
}
result = 1;
}
}
@ -470,7 +456,7 @@ int LaraHangTest(ITEM_INFO* item, COLL_INFO* coll)
int LaraHangLeftCornerTest(ITEM_INFO* item, COLL_INFO* coll)
{
if (item->animNumber != LA_REACH_TO_HANG)// && item->animNumber != LA_HANG_FEET_IDLE)
if (item->animNumber != LA_REACH_TO_HANG && item->animNumber != LA_HANG_FEET_IDLE)
return 0;
if (coll->hitStatic)
@ -625,7 +611,7 @@ int LaraHangLeftCornerTest(ITEM_INFO* item, COLL_INFO* coll)
int LaraHangRightCornerTest(ITEM_INFO* item, COLL_INFO* coll)
{
if (item->animNumber != LA_REACH_TO_HANG)// && item->animNumber != LA_HANG_FEET_IDLE)
if (item->animNumber != LA_REACH_TO_HANG && item->animNumber != LA_HANG_FEET_IDLE)
return 0;
if (coll->hitStatic)
@ -945,24 +931,7 @@ int TestHangSwingIn(ITEM_INFO* item, short angle)
int h, c;
//debug till scripting be ready
// TR12_OSCILLATE_HANG = true;
/*if (angle == ANGLE(180.0f))
{
z -= 256;
}
else if (angle == -ANGLE(90))
{
x -= 256;
}
else if (angle == ANGLE(90))
{
x += 256;
}
else if (angle == ANGLE(0))
{
z += 256;
}*/
Lara.NewAnims.OscillateHanging = 0;
z += phd_cos(angle) * STEP_SIZE;
x += phd_sin(angle) * STEP_SIZE;
@ -973,35 +942,29 @@ int TestHangSwingIn(ITEM_INFO* item, short angle)
if (h != NO_HEIGHT)
{
/* if (TR12_OSCILLATE_HANG == true)
if (Lara.NewAnims.OscillateHanging)
{
if (((h - y) > 0)
&& ((c - y) < -400))
return(1);
if (h - y > 0 && c - y < -400)
return 1;
}
else
{*/
if (((h - y) > 0)
&& ((c - y) < -400)
&& ((y - 819 - c) > -72))
return(1);
// }
}
return(0);
}
/*int TestHangFeet(ITEM_INFO* item, short angle)
{
if (h - y > 0 && c - y < -400 && (y - 819 - c > -72))
return 1;
}
}
return 0;
if (Lara.climbStatus)
}
bool TestHangFeet(ITEM_INFO* item, short angle)
{
//##LUA debug etc.
Lara.NewAnims.FeetHanging = 0;
if (Lara.climbStatus || !Lara.NewAnims.FeetHanging)
return 0;
// EnableFeetHang = true;
// if (!EnableFeetHang)
// return 0;
int x = item->pos.xPos;
int y = item->pos.yPos;
int z = item->pos.zPos;
@ -1009,22 +972,8 @@ int TestHangSwingIn(ITEM_INFO* item, short angle)
FLOOR_INFO* floor;
int h, c, g, m, j;
if (angle == ANGLE(180.0f))
{
z -= 256;
}
else if (angle == -ANGLE(90.0f))
{
x -= 256;
}
else if (angle == ANGLE(90.0f))
{
x += 256;
}
else if (angle == ANGLE(0.0f))
{
z += 256;
}
z += phd_cos(angle) * STEP_SIZE;
x += phd_sin(angle) * STEP_SIZE;
floor = GetFloor(x, y, z, &roomNum);
h = GetFloorHeight(floor, x, y, z);
@ -1033,29 +982,12 @@ int TestHangSwingIn(ITEM_INFO* item, short angle)
m = c - y;
j = y - 128 - c;
if (item->currentAnimState == LS_CRAWL_TO_HANG)
{
if (h != NO_HEIGHT)
{
if (((g) > 0)
&& ((m) < -128)
&& ((j) > -72))
return(1);
if (g > 0 && m < -128 && j > -72)
return 1;
}
return(0);
}
else
{
if (h != NO_HEIGHT)
{
if (((g) > 0)
&& ((m) < -128)
&& ((j) > -72))
return(0);
}
return(1);
}
}*/
int CanLaraHangSideways(ITEM_INFO* item, COLL_INFO* coll, short angle)
{
@ -1143,7 +1075,7 @@ void SetCornerAnim(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip)
}
}
/*void SetCornerAnimFeet(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip)
void SetCornerAnimFeet(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip)
{
if (item->hitPoints <= 0)
{
@ -1177,7 +1109,7 @@ void SetCornerAnim(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip)
item->pos.yRot += rot;
}
}*/
}
int LaraFloorFront(ITEM_INFO* item, short ang, int dist)
{
@ -1264,6 +1196,7 @@ void GetTighRopeFallOff(int regularity)
bool TestLaraLean(ITEM_INFO* item, COLL_INFO* coll)
{
#if 0
// TODO: make it more fine-tuned when new collision is done.
switch (coll->collType)
{
@ -1275,4 +1208,10 @@ bool TestLaraLean(ITEM_INFO* item, COLL_INFO* coll)
return false;
}
return true;
#else
if (coll->collType == CT_RIGHT || coll->collType == CT_LEFT)
return 0;
return 1;
#endif
}

View file

@ -11,10 +11,10 @@ int LaraTestHangOnClimbWall(ITEM_INFO* item, COLL_INFO* coll);
int LaraTestEdgeCatch(ITEM_INFO* item, COLL_INFO* coll, int* edge);
int IsValidHangPos(ITEM_INFO* item, COLL_INFO* coll);
int TestHangSwingIn(ITEM_INFO* item, short angle);
//int TestHangFeet(ITEM_INFO* item, short angle);
bool TestHangFeet(ITEM_INFO* item, short angle);
int CanLaraHangSideways(ITEM_INFO* item, COLL_INFO* coll, short angle);
void SetCornerAnim(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip);
//void SetCornerAnimFeet(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip);
void SetCornerAnimFeet(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip);
int LaraFloorFront(ITEM_INFO* item, short ang, int dist);
int LaraCeilingFront(ITEM_INFO* item, short ang, int dist, int h);
int LaraFallen(ITEM_INFO* item, COLL_INFO* coll);

View file

@ -522,7 +522,7 @@ GAME_STATUS ControlPhase(int numFrames, int demoMode)
// Control Lara
InItemControlLoop = true;
Lara.skelebob = NULL;
// Lara.skelebob = NULL;
LaraControl(Lara.itemNumber);
InItemControlLoop = false;
KillMoveItems();
@ -1164,9 +1164,9 @@ void TestTriggers(short *data, int heavy, int HeavyFlags)
break;
return;
case TRIGGER_TYPES::SKELETON_T:
Lara.skelebob = 2;
break;
// case TRIGGER_TYPES::SKELETON_T: //NO.
// Lara.skelebob = 2;
// break;
case TRIGGER_TYPES::HEAVY:
case TRIGGER_TYPES::DUMMY:

View file

@ -115,6 +115,26 @@ const char* optmessages[] =
// STRING_READ_DIARY
};
const char* controlmsgs[] =
{
STRING_CONTROLS_MOVE_FORWARD,
STRING_CONTROLS_MOVE_BACKWARD,
STRING_CONTROLS_MOVE_LEFT,
STRING_CONTROLS_MOVE_RIGHT,
STRING_CONTROLS_DUCK,
STRING_CONTROLS_DASH,
STRING_CONTROLS_WALK,
STRING_CONTROLS_JUMP,
STRING_CONTROLS_ACTION,
STRING_CONTROLS_DRAW_WEAPON,
STRING_CONTROLS_USE_FLARE,
STRING_CONTROLS_LOOK,
STRING_CONTROLS_ROLL,
STRING_CONTROLS_INVENTORY,
STRING_CONTROLS_STEP_LEFT,
STRING_CONTROLS_STEP_RIGHT
};
#define phd_winxmax g_Configuration.Width
#define phd_winymax g_Configuration.Height
#define phd_centerx 400
@ -586,7 +606,7 @@ int TitleOptions()
break;
case title_controls_menu:
settings_flag = 1 << 19;
settings_flag = 1 << 17;
handle_control_settings_input();
break;
@ -929,7 +949,7 @@ void handle_control_settings_input()
if (goSelect)
{
if (title_selected_option & (1 << 18))//apply
if (title_selected_option & (1 << 16))//apply
{
SoundEffect(SFX_TR4_MENU_CHOOSE, NULL, 0);
memcpy(KeyboardLayout[1], CurrentSettings.conf.KeyboardLayout, NUM_CONTROLS);
@ -939,7 +959,7 @@ void handle_control_settings_input()
return;
}
if (title_selected_option & (1 << 19))//cancel
if (title_selected_option & (1 << 17))//cancel
{
SoundEffect(SFX_TR4_MENU_CHOOSE, NULL, 0);
title_menu_to_display = title_options_menu;
@ -949,7 +969,7 @@ void handle_control_settings_input()
}
}
if (KeyMap[DIK_RETURN] && !(title_selected_option & (1 << 18)) && !(title_selected_option & (1 << 19)))
if (KeyMap[DIK_RETURN] && !(title_selected_option & (1 << 16)) && !(title_selected_option & (1 << 17)))
{
SoundEffect(SFX_TR4_MENU_SELECT, NULL, 0);
CurrentSettings.waitingForkey = 1;
@ -1222,7 +1242,7 @@ int DoPauseMenu()
break;
case pause_controls_menu:
pause_flag = 1 << 19;
pause_flag = 1 << 17;
handle_control_settings_input_pause();
break;
@ -1484,7 +1504,7 @@ void handle_control_settings_input_pause()
if (goSelect)
{
if (pause_selected_option & (1 << 18))//apply
if (pause_selected_option & (1 << 16))//apply
{
SoundEffect(SFX_TR4_MENU_CHOOSE, NULL, 0);
memcpy(KeyboardLayout[1], CurrentSettings.conf.KeyboardLayout, NUM_CONTROLS);
@ -1494,7 +1514,7 @@ void handle_control_settings_input_pause()
return;
}
if (pause_selected_option & (1 << 19))//cancel
if (pause_selected_option & (1 << 17))//cancel
{
SoundEffect(SFX_TR4_MENU_CHOOSE, NULL, 0);
pause_menu_to_display = pause_options_menu;
@ -1504,7 +1524,7 @@ void handle_control_settings_input_pause()
}
}
if (KeyMap[DIK_RETURN] && !(pause_selected_option & (1 << 18)) && !(pause_selected_option & (1 << 19)))
if (KeyMap[DIK_RETURN] && !(pause_selected_option & (1 << 16)) && !(pause_selected_option & (1 << 17)))
{
SoundEffect(SFX_TR4_MENU_SELECT, NULL, 0);
CurrentSettings.waitingForkey = 1;
@ -2703,7 +2723,6 @@ void handle_inventry_menu()
if (rings[RING_AMMO]->ringactive)
{
g_Renderer.drawString(phd_centerx, phd_centery, g_GameFlow->GetString(optmessages[5]), PRINTSTRING_COLOR_WHITE, PRINTSTRING_BLINK | PRINTSTRING_CENTER);
// PrintString(phd_centerx, phd_centery, 1, &gfStringWad[gfStringOffset[optmessages[5]]], FF_CENTER);
if (rings[RING_INVENTORY]->objlistmovement)
return;
@ -2896,13 +2915,11 @@ void handle_inventry_menu()
if (i == current_selected_option)
{
g_Renderer.drawString(phd_centerx, ypos, current_options[i].text, PRINTSTRING_COLOR_WHITE, PRINTSTRING_BLINK | PRINTSTRING_CENTER);
// PrintString(phd_centerx, ypos, 1, current_options[i].text, FF_CENTER);
ypos += font_height;
}
else
{
g_Renderer.drawString(phd_centerx, ypos, current_options[i].text, PRINTSTRING_COLOR_WHITE, PRINTSTRING_CENTER);
// PrintString(phd_centerx, ypos, 5, current_options[i].text, FF_CENTER);
ypos += font_height;
}
}
@ -3077,10 +3094,10 @@ void spinback(unsigned short* angle)
{
val2 = val;
if (val2 < 1022)
val = 1022;
else if (val2 > 16384)
val2 = 16384;
if (val2 < ANGLE(5))
val = ANGLE(5);
else if (val2 > ANGLE(90))
val2 = ANGLE(90);
val -= (val2 >> 3);
@ -3091,14 +3108,14 @@ void spinback(unsigned short* angle)
{
val2 = -val;
if (val2 < 1022)
val = 1022;
else if (val2 > 16384)
val2 = 16384;
if (val2 < ANGLE(5))
val = ANGLE(5);
else if (val2 > ANGLE(90))
val2 = ANGLE(90);
val += (val2 >> 3);
if (val < 32768)
if (val < ANGLE(180))
val = 0;
}
@ -3134,13 +3151,13 @@ void draw_ammo_selector()
if (n == *current_ammo_type)
{
if (objme->rot_flags & INV_ROT_X)
ammo_object_list[n].xrot += 1022;
ammo_object_list[n].xrot += ANGLE(5);
if (objme->rot_flags & INV_ROT_Y)
ammo_object_list[n].yrot += 1022;
ammo_object_list[n].yrot += ANGLE(5);
if (objme->rot_flags & INV_ROT_Z)
ammo_object_list[n].zrot += 1022;
ammo_object_list[n].zrot += ANGLE(5);
}
else
{
@ -3477,13 +3494,13 @@ void draw_current_object_list(int ringnum)
if (!i && !rings[ringnum]->objlistmovement)
{
if (inventry_objects_list[rings[ringnum]->current_object_list[n].invitem].rot_flags & INV_ROT_X)
rings[ringnum]->current_object_list[n].xrot += 1022;
rings[ringnum]->current_object_list[n].xrot += ANGLE(5);
if (inventry_objects_list[rings[ringnum]->current_object_list[n].invitem].rot_flags & INV_ROT_Y)
rings[ringnum]->current_object_list[n].yrot += 1022;
rings[ringnum]->current_object_list[n].yrot += ANGLE(5);
if (inventry_objects_list[rings[ringnum]->current_object_list[n].invitem].rot_flags & INV_ROT_Z)
rings[ringnum]->current_object_list[n].zrot += 1022;
rings[ringnum]->current_object_list[n].zrot += ANGLE(5);
}
else
{

View file

@ -505,6 +505,7 @@ struct INVOBJ
short rot_flags;
};
extern const char* controlmsgs[];
extern int GLOBAL_invMode;
extern int pause_menu_to_display;
extern __int64 pause_selected_option;

View file

@ -590,15 +590,15 @@ void TorpedoControl(short itemNumber)
SoundEffect(SFX_TR5_UNDERWATER_EXPLOSION, &item->pos, 2);
SoundEffect(SFX_TR5_LARA_UNDERWATER_HIT, &LaraItem->pos, 2);
LaraItem->hitPoints -= 200;
if (Lara.anxiety >= 0x7F)
Lara.anxiety--;
else
Lara.anxiety -= 128;
// if (Lara.anxiety >= 0x7F)
// Lara.anxiety--;
// else
// Lara.anxiety -= 128;
}
else
{
if (ItemNearLara(&item->pos, 400) && Lara.anxiety < 0xE0)
Lara.anxiety += 32;
// if (ItemNearLara(&item->pos, 400) && Lara.anxiety < 0xE0)
// Lara.anxiety += 32;
if (roomNumber!= item->roomNumber)
ItemNewRoom(itemNumber, roomNumber);

View file

@ -676,9 +676,9 @@ namespace T5M::Renderer
y += 25;
for (int k = 0; k < 18; k++)
for (int k = 0; k < 16; k++)
{
drawString(200, y, g_GameFlow->GetString(STRING_CONTROLS_MOVE_FORWARD + k),
drawString(200, y, g_GameFlow->GetString(controlmsgs[k]),
PRINTSTRING_COLOR_WHITE,
PRINTSTRING_OUTLINE | ((title_selected_option & (1 << k)) ? PRINTSTRING_BLINK : 0) |
(CurrentSettings.waitingForkey ? PRINTSTRING_DONT_UPDATE_BLINK : 0));
@ -702,13 +702,13 @@ namespace T5M::Renderer
// Apply and cancel
drawString(400, y, g_GameFlow->GetString(STRING_APPLY),
PRINTSTRING_COLOR_ORANGE,
PRINTSTRING_CENTER | PRINTSTRING_OUTLINE | ((title_selected_option & (1 << 18)) ? PRINTSTRING_BLINK : 0));
PRINTSTRING_CENTER | PRINTSTRING_OUTLINE | ((title_selected_option & (1 << 16)) ? PRINTSTRING_BLINK : 0));
y += 25;
drawString(400, y, g_GameFlow->GetString(STRING_CANCEL),
PRINTSTRING_COLOR_ORANGE,
PRINTSTRING_CENTER | PRINTSTRING_OUTLINE | ((title_selected_option & (1 << 19)) ? PRINTSTRING_BLINK : 0));
PRINTSTRING_CENTER | PRINTSTRING_OUTLINE | ((title_selected_option & (1 << 17)) ? PRINTSTRING_BLINK : 0));
break;
case title_sounds_menu:
@ -911,9 +911,9 @@ namespace T5M::Renderer
y += 25;
for (int k = 0; k < 18; k++)
for (int k = 0; k < 16; k++)
{
drawString(200, y, g_GameFlow->GetString(STRING_CONTROLS_MOVE_FORWARD + k),
drawString(200, y, g_GameFlow->GetString(controlmsgs[k]),
PRINTSTRING_COLOR_WHITE,
PRINTSTRING_OUTLINE | ((pause_selected_option & (1 << k)) ? PRINTSTRING_BLINK : 0) |
(CurrentSettings.waitingForkey ? PRINTSTRING_DONT_UPDATE_BLINK : 0));
@ -937,13 +937,13 @@ namespace T5M::Renderer
// Apply and cancel
drawString(400, y, g_GameFlow->GetString(STRING_APPLY),
PRINTSTRING_COLOR_ORANGE,
PRINTSTRING_CENTER | PRINTSTRING_OUTLINE | ((pause_selected_option & (1 << 18)) ? PRINTSTRING_BLINK : 0));
PRINTSTRING_CENTER | PRINTSTRING_OUTLINE | ((pause_selected_option & (1 << 16)) ? PRINTSTRING_BLINK : 0));
y += 25;
drawString(400, y, g_GameFlow->GetString(STRING_CANCEL),
PRINTSTRING_COLOR_ORANGE,
PRINTSTRING_CENTER | PRINTSTRING_OUTLINE | ((pause_selected_option & (1 << 19)) ? PRINTSTRING_BLINK : 0));
PRINTSTRING_CENTER | PRINTSTRING_OUTLINE | ((pause_selected_option & (1 << 17)) ? PRINTSTRING_BLINK : 0));
break;
@ -2481,7 +2481,7 @@ namespace T5M::Renderer
dynamicLight->Out = falloff * 256.0f;
dynamicLight->Type = LIGHT_TYPES::LIGHT_TYPE_POINT;
dynamicLight->Dynamic = true;
dynamicLight->Intensity = falloff / 2;
dynamicLight->Intensity = falloff >> 2; //looks better..
m_dynamicLights.push_back(dynamicLight);
//NumDynamics++;

View file

@ -10,6 +10,10 @@
#include <Objects/objectslist.h>
#include <Game/newinv2.h>
#ifndef _DEBUG
#include <iostream>
#endif
using std::string;
using std::vector;
using std::unordered_map;

View file

@ -15,6 +15,10 @@
#include <iostream>
#include "InventorySlots.h"
#ifndef _DEBUG
#include <iostream>
#endif
extern GameFlow* g_GameFlow;
GameScript* g_GameScript;
extern bool const WarningsAsErrors = true;

View file

@ -1,7 +1,7 @@
#pragma once
#define NUM_CONTROLS 18
#define NUM_CONTROLS 16
#define DIK_ESCAPE 0x01
#define DIK_1 0x02

View file

@ -915,7 +915,7 @@ void LoadAIObjects()
{
AI_OBJECT obj;
obj.objectNumber = ReadInt16();
obj.objectNumber = (GAME_OBJECT_ID)ReadInt16();
obj.roomNumber = ReadInt16();
obj.x = ReadInt32();
obj.y = ReadInt32();

View file

@ -160,6 +160,12 @@ xcopy /Y "$(ProjectDir)Shaders\HUD\*.hlsl" "$(TargetDir)\Shaders\HUD\"</Command>
<ClInclude Include="Game\particle\SimpleParticle.h" />
<ClInclude Include="Game\phd_global.h" />
<ClInclude Include="Game\memory\qmalloc.h" />
<ClInclude Include="Game\pickup\pickuputil.h" />
<ClInclude Include="Game\pickup\pickup_ammo.h" />
<ClInclude Include="Game\pickup\pickup_consumable.h" />
<ClInclude Include="Game\pickup\pickup_key_items.h" />
<ClInclude Include="Game\pickup\pickup_misc_items.h" />
<ClInclude Include="Game\pickup\pickup_weapon.h" />
<ClInclude Include="Game\precompute\precompute.h" />
<ClInclude Include="Game\prng.h" />
<ClInclude Include="Game\puzzles_keys.h" />
@ -480,6 +486,11 @@ xcopy /Y "$(ProjectDir)Shaders\HUD\*.hlsl" "$(TargetDir)\Shaders\HUD\"</Command>
<ClCompile Include="Game\misc.cpp" />
<ClCompile Include="Game\newinv2.cpp" />
<ClCompile Include="Game\particle\SimpleParticle.cpp" />
<ClCompile Include="Game\pickup\pickup_ammo.cpp" />
<ClCompile Include="Game\pickup\pickup_consumable.cpp" />
<ClCompile Include="Game\pickup\pickup_key_items.cpp" />
<ClCompile Include="Game\pickup\pickup_misc_items.cpp" />
<ClCompile Include="Game\pickup\pickup_weapon.cpp" />
<ClCompile Include="Game\prng.cpp" />
<ClCompile Include="Game\puzzles_keys.cpp" />
<ClCompile Include="Scripting\GameScriptColor.cpp" />

View file

@ -981,6 +981,24 @@
<ClInclude Include="Scripting\GameScriptRotation.h">
<Filter>File di intestazione</Filter>
</ClInclude>
<ClInclude Include="Game\pickup\pickuputil.h">
<Filter>File di intestazione</Filter>
</ClInclude>
<ClInclude Include="Game\pickup\pickup_ammo.h">
<Filter>File di intestazione</Filter>
</ClInclude>
<ClInclude Include="Game\pickup\pickup_consumable.h">
<Filter>File di intestazione</Filter>
</ClInclude>
<ClInclude Include="Game\pickup\pickup_key_items.h">
<Filter>File di intestazione</Filter>
</ClInclude>
<ClInclude Include="Game\pickup\pickup_misc_items.h">
<Filter>File di intestazione</Filter>
</ClInclude>
<ClInclude Include="Game\pickup\pickup_weapon.h">
<Filter>File di intestazione</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Game\box.cpp">
@ -1805,6 +1823,21 @@
<ClCompile Include="Scripting\GameScriptRotation.cpp">
<Filter>File di origine</Filter>
</ClCompile>
<ClCompile Include="Game\pickup\pickup_consumable.cpp">
<Filter>File di origine</Filter>
</ClCompile>
<ClCompile Include="Game\pickup\pickup_key_items.cpp">
<Filter>File di origine</Filter>
</ClCompile>
<ClCompile Include="Game\pickup\pickup_misc_items.cpp">
<Filter>File di origine</Filter>
</ClCompile>
<ClCompile Include="Game\pickup\pickup_weapon.cpp">
<Filter>File di origine</Filter>
</ClCompile>
<ClCompile Include="Game\pickup\pickup_ammo.cpp">
<Filter>File di origine</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />