Merge branch 'master' into PushableOCB

This commit is contained in:
asasas9500 2021-02-06 11:50:08 -03:00
commit 6eb1a5e963
49 changed files with 1672 additions and 1360 deletions

1
.gitignore vendored
View file

@ -20,3 +20,4 @@ x64/
*.wav *.wav
*.trc *.trc
*.str *.str
/TR5Main/Release

View file

@ -1,24 +1,18 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16 # Visual Studio 15
VisualStudioVersion = 16.0.28803.452 VisualStudioVersion = 15.0.28307.1300
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TR5Main", "TR5Main\TR5Main.vcxproj", "{15AB0220-541C-4DA1-94EB-ED3C47E4582E}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TR5Main", "TR5Main\TR5Main.vcxproj", "{15AB0220-541C-4DA1-94EB-ED3C47E4582E}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86 Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86 Release|x86 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x64.ActiveCfg = Debug|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x64.Build.0 = Debug|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x86.ActiveCfg = Debug|Win32 {15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x86.ActiveCfg = Debug|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x86.Build.0 = Debug|Win32 {15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x86.Build.0 = Debug|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Release|x64.ActiveCfg = Release|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Release|x64.Build.0 = Release|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Release|x86.ActiveCfg = Release|Win32 {15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Release|x86.ActiveCfg = Release|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Release|x86.Build.0 = Release|Win32 {15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Release|x86.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection

View file

@ -358,7 +358,7 @@ function<LaraRoutineFunction> lara_collision_routines[NUM_LARA_STATES + 1] = {
lara_default_col lara_default_col
}; };
void LaraControl(short itemNumber) // (AF) (D) void LaraControl(short itemNumber)
{ {
ITEM_INFO* item = LaraItem; ITEM_INFO* item = LaraItem;
@ -931,7 +931,7 @@ void LaraAboveWater(ITEM_INFO* item, COLL_INFO* coll) //hmmmm
TestTriggers(coll->trigger, FALSE, 0); TestTriggers(coll->trigger, FALSE, 0);
} }
void LaraUnderWater(ITEM_INFO* item, COLL_INFO* coll)//4BFB4, 4C418 (F) void LaraUnderWater(ITEM_INFO* item, COLL_INFO* coll)
{ {
coll->badPos = 32512; coll->badPos = 32512;
coll->badNeg = -400; coll->badNeg = -400;
@ -1041,7 +1041,7 @@ void LaraUnderWater(ITEM_INFO* item, COLL_INFO* coll)//4BFB4, 4C418 (F)
TestTriggers(coll->trigger, 0, 0); TestTriggers(coll->trigger, 0, 0);
} }
void LaraSurface(ITEM_INFO* item, COLL_INFO* coll)//4D684, 4DAE8 (F) void LaraSurface(ITEM_INFO* item, COLL_INFO* coll)
{ {
Camera.targetElevation = -ANGLE(22); Camera.targetElevation = -ANGLE(22);
@ -1098,7 +1098,7 @@ void LaraSurface(ITEM_INFO* item, COLL_INFO* coll)//4D684, 4DAE8 (F)
TestTriggers(coll->trigger, 0, 0); TestTriggers(coll->trigger, 0, 0);
} }
void LaraCheat(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void LaraCheat(ITEM_INFO* item, COLL_INFO* coll)
{ {
LaraItem->hitPoints = 1000; LaraItem->hitPoints = 1000;
LaraUnderWater(item, coll); LaraUnderWater(item, coll);

View file

@ -14,12 +14,12 @@
bool DoJump = false; bool DoJump = false;
/*generic functions*/ /*generic functions*/
void lara_void_func(ITEM_INFO* item, COLL_INFO* coll)//19928(<), 19A5C(<) (F) void lara_void_func(ITEM_INFO* item, COLL_INFO* coll)
{ {
return; return;
} }
void lara_default_col(ITEM_INFO* item, COLL_INFO* coll)//1C80C(<), 1C940(<) (F) void lara_default_col(ITEM_INFO* item, COLL_INFO* coll)
{ {
Lara.moveAngle = item->pos.yRot; Lara.moveAngle = item->pos.yRot;
coll->badPos = 384; coll->badPos = 384;
@ -31,20 +31,20 @@ void lara_default_col(ITEM_INFO* item, COLL_INFO* coll)//1C80C(<), 1C940(<) (F)
GetCollisionInfo(coll, item->pos.xPos, item->pos.yPos, item->pos.zPos, item->roomNumber, LARA_HITE); GetCollisionInfo(coll, item->pos.xPos, item->pos.yPos, item->pos.zPos, item->roomNumber, LARA_HITE);
} }
void lara_as_special(ITEM_INFO* item, COLL_INFO* coll)//1ADDC(<), 1AF10(<) (F) void lara_as_special(ITEM_INFO* item, COLL_INFO* coll)
{ {
Camera.flags = CF_FOLLOW_CENTER; Camera.flags = CF_FOLLOW_CENTER;
Camera.targetAngle = ANGLE(170.0f); Camera.targetAngle = ANGLE(170.0f);
Camera.targetElevation = -ANGLE(25.0f); Camera.targetElevation = -ANGLE(25.0f);
} }
void lara_as_null(ITEM_INFO* item, COLL_INFO* coll)//1A5DC(<), 1A710(<) (F) void lara_as_null(ITEM_INFO* item, COLL_INFO* coll)
{ {
coll->enableBaddiePush = false; coll->enableBaddiePush = false;
coll->enableSpaz = false; coll->enableSpaz = false;
} }
void lara_as_controlled(ITEM_INFO* item, COLL_INFO* coll)//1B0FC(<), 1B230(<) (F) void lara_as_controlled(ITEM_INFO* item, COLL_INFO* coll)
{ {
Lara.look = false; Lara.look = false;
coll->enableBaddiePush = false; coll->enableBaddiePush = false;
@ -57,7 +57,7 @@ void lara_as_controlled(ITEM_INFO* item, COLL_INFO* coll)//1B0FC(<), 1B230(<) (F
} }
} }
void lara_as_controlledl(ITEM_INFO* item, COLL_INFO* coll)//1B180(<), 1B2B4(<) (F) void lara_as_controlledl(ITEM_INFO* item, COLL_INFO* coll)
{ {
Lara.look = false; Lara.look = false;
coll->enableBaddiePush = false; coll->enableBaddiePush = false;
@ -67,7 +67,7 @@ void lara_as_controlledl(ITEM_INFO* item, COLL_INFO* coll)//1B180(<), 1B2B4(<) (
/*end generic functions*/ /*end generic functions*/
/*-*/ /*-*/
/*basic movement*/ /*basic movement*/
void lara_as_walk(ITEM_INFO* item, COLL_INFO* coll)//191B8(<), 192EC(<) (F) void lara_as_walk(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 0*/ /*state 0*/
/*collision: lara_col_walk*/ /*collision: lara_col_walk*/
@ -114,7 +114,7 @@ void lara_as_walk(ITEM_INFO* item, COLL_INFO* coll)//191B8(<), 192EC(<) (F)
} }
} }
void lara_col_walk(ITEM_INFO* item, COLL_INFO* coll)//1B3E8, 1B51C (F) void lara_col_walk(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 0*/ /*state 0*/
/*state code: lara_as_walk*/ /*state code: lara_as_walk*/
@ -180,7 +180,7 @@ void lara_col_walk(ITEM_INFO* item, COLL_INFO* coll)//1B3E8, 1B51C (F)
} }
} }
void lara_as_run(ITEM_INFO* item, COLL_INFO* coll)//192EC, 19420 (F) void lara_as_run(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 1*/ /*state 1*/
/*collision: lara_col_run*/ /*collision: lara_col_run*/
@ -283,7 +283,7 @@ void lara_as_run(ITEM_INFO* item, COLL_INFO* coll)//192EC, 19420 (F)
} }
} }
void lara_col_run(ITEM_INFO* item, COLL_INFO* coll)//1B64C, 1B780 (F) void lara_col_run(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 1*/ /*state 1*/
/*state code: lara_col_run*/ /*state code: lara_col_run*/
@ -531,7 +531,7 @@ void lara_as_stop(ITEM_INFO* item, COLL_INFO* coll)
} }
} }
void lara_col_stop(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_col_stop(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 2*/ /*state 2*/
/*state code: lara_as_stop*/ /*state code: lara_as_stop*/
@ -568,7 +568,7 @@ void lara_col_stop(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
#endif #endif
} }
void lara_as_forwardjump(ITEM_INFO* item, COLL_INFO* coll)//18A34, 18B68 (F) void lara_as_forwardjump(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 3*/ /*state 3*/
/*collision: */ /*collision: */
@ -609,7 +609,7 @@ void lara_as_forwardjump(ITEM_INFO* item, COLL_INFO* coll)//18A34, 18B68 (F)
} }
} }
void lara_col_forwardjump(ITEM_INFO* item, COLL_INFO* coll)//18B88, 18CBC (F) void lara_col_forwardjump(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 3*/ /*state 3*/
/*state code: lara_as_forwardjump*/ /*state code: lara_as_forwardjump*/
@ -661,14 +661,14 @@ void lara_col_forwardjump(ITEM_INFO* item, COLL_INFO* coll)//18B88, 18CBC (F)
} }
} }
void lara_col_pose(ITEM_INFO* item, COLL_INFO* coll)//1B87C(<), 1B9B0(<) (F) void lara_col_pose(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 4*/ /*state 4*/
/*state code: lara_void_func*/ /*state code: lara_void_func*/
lara_col_stop(item, coll); lara_col_stop(item, coll);
} }
void lara_as_fastback(ITEM_INFO* item, COLL_INFO* coll)//1959C(<), 196D0(<) (F) void lara_as_fastback(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state: 5*/ /*state: 5*/
/*collision: lara_col_fastback*/ /*collision: lara_col_fastback*/
@ -687,7 +687,7 @@ void lara_as_fastback(ITEM_INFO* item, COLL_INFO* coll)//1959C(<), 196D0(<) (F)
} }
} }
void lara_col_fastback(ITEM_INFO* item, COLL_INFO* coll)//1B89C, 1B9D0 (F) void lara_col_fastback(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state: 5*/ /*state: 5*/
/*state code: lara_as_fastback*/ /*state code: lara_as_fastback*/
@ -730,7 +730,7 @@ void lara_col_fastback(ITEM_INFO* item, COLL_INFO* coll)//1B89C, 1B9D0 (F)
} }
} }
void lara_as_turn_r(ITEM_INFO* item, COLL_INFO* coll)//19628(<), 1975C(<) (F) void lara_as_turn_r(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state: 6*/ /*state: 6*/
/*collision: */ /*collision: */
@ -780,7 +780,7 @@ void lara_as_turn_r(ITEM_INFO* item, COLL_INFO* coll)//19628(<), 1975C(<) (F)
} }
} }
void lara_col_turn_r(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_col_turn_r(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state: 6*/ /*state: 6*/
/*state code: lara_as_turn_r*/ /*state code: lara_as_turn_r*/
@ -824,7 +824,7 @@ void lara_col_turn_r(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
#endif #endif
} }
void lara_as_turn_l(ITEM_INFO* item, COLL_INFO* coll)//1972C(<), 19860(<) (F) void lara_as_turn_l(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 7*/ /*state 7*/
/*collision: lara_col_turn_l*/ /*collision: lara_col_turn_l*/
@ -873,14 +873,14 @@ void lara_as_turn_l(ITEM_INFO* item, COLL_INFO* coll)//1972C(<), 19860(<) (F)
} }
} }
void lara_col_turn_l(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_col_turn_l(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 7*/ /*state 7*/
/*state code: lara_as_turn_l*/ /*state code: lara_as_turn_l*/
lara_col_turn_r(item, coll); lara_col_turn_r(item, coll);
} }
void lara_as_death(ITEM_INFO* item, COLL_INFO* coll)//19830(<), 19964(<) (F) void lara_as_death(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 8*/ /*state 8*/
/*collision: lara_col_death*/ /*collision: lara_col_death*/
@ -897,7 +897,7 @@ void lara_as_death(ITEM_INFO* item, COLL_INFO* coll)//19830(<), 19964(<) (F)
} }
} }
void lara_col_death(ITEM_INFO* item, COLL_INFO* coll)//1BADC(<), 1BC10(<) (F) void lara_col_death(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 8*/ /*state 8*/
/*state code: lara_as_death*/ /*state code: lara_as_death*/
@ -920,7 +920,7 @@ void lara_col_death(ITEM_INFO* item, COLL_INFO* coll)//1BADC(<), 1BC10(<) (F)
item->pos.yPos += coll->midFloor; item->pos.yPos += coll->midFloor;
} }
void lara_as_fastfall(ITEM_INFO* item, COLL_INFO* coll)//198BC(<), 199F0(<) (F) void lara_as_fastfall(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 9*/ /*state 9*/
/*collision: lara_col_fastfall*/ /*collision: lara_col_fastfall*/
@ -929,7 +929,7 @@ void lara_as_fastfall(ITEM_INFO* item, COLL_INFO* coll)//198BC(<), 199F0(<) (F)
SoundEffect(SFX_LARA_FALL, &item->pos, 0); SoundEffect(SFX_LARA_FALL, &item->pos, 0);
} }
void lara_col_fastfall(ITEM_INFO* item, COLL_INFO* coll)//1BB88, 1BCBC (F) void lara_col_fastfall(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 9*/ /*state 9*/
/*state code: lara_as_fastfall*/ /*state code: lara_as_fastfall*/
@ -967,7 +967,7 @@ void lara_col_fastfall(ITEM_INFO* item, COLL_INFO* coll)//1BB88, 1BCBC (F)
} }
} }
void lara_as_reach(ITEM_INFO* item, COLL_INFO* coll)//18CE0(<), 18E14(<) (F) void lara_as_reach(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 11*/ /*state 11*/
/*collision: lara_col_reach*/ /*collision: lara_col_reach*/
@ -976,7 +976,7 @@ void lara_as_reach(ITEM_INFO* item, COLL_INFO* coll)//18CE0(<), 18E14(<) (F)
item->goalAnimState = LS_FREEFALL; item->goalAnimState = LS_FREEFALL;
} }
void lara_col_reach(ITEM_INFO* item, COLL_INFO* coll)//18D0C, 18E40 (F) void lara_col_reach(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 11*/ /*state 11*/
/*state code: lara_as_reach*/ /*state code: lara_as_reach*/
@ -1141,12 +1141,12 @@ void lara_col_reach(ITEM_INFO* item, COLL_INFO* coll)//18D0C, 18E40 (F)
} }
} }
void lara_as_splat(ITEM_INFO* item, COLL_INFO* coll)//1A340(<), 1A474(<) (F) void lara_as_splat(ITEM_INFO* item, COLL_INFO* coll)
{ {
Lara.look = false; Lara.look = false;
} }
void lara_col_splat(ITEM_INFO* item, COLL_INFO* coll)//1BC74(<), 1BDA8(<) (F) void lara_col_splat(ITEM_INFO* item, COLL_INFO* coll)
{ {
Lara.moveAngle = item->pos.yRot; Lara.moveAngle = item->pos.yRot;
@ -1165,7 +1165,7 @@ void lara_col_splat(ITEM_INFO* item, COLL_INFO* coll)//1BC74(<), 1BDA8(<) (F)
item->pos.yPos += coll->midFloor; item->pos.yPos += coll->midFloor;
} }
void lara_col_land(ITEM_INFO* item, COLL_INFO* coll)//1BD10(<), 1BE44(<) (F) void lara_col_land(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 14*/ /*state 14*/
/*state code: lara_void_func*/ /*state code: lara_void_func*/
@ -1204,7 +1204,7 @@ void lara_as_compress(ITEM_INFO* item, COLL_INFO* coll)
item->goalAnimState = LS_FREEFALL; item->goalAnimState = LS_FREEFALL;
} }
void lara_col_compress(ITEM_INFO* item, COLL_INFO* coll)//1BD30, 1BE64 (F) void lara_col_compress(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 15*/ /*state 15*/
/*state code: lara_as_compress*/ /*state code: lara_as_compress*/
@ -1241,7 +1241,7 @@ void lara_col_compress(ITEM_INFO* item, COLL_INFO* coll)//1BD30, 1BE64 (F)
} }
} }
void lara_as_back(ITEM_INFO* item, COLL_INFO* coll)//1A4F0(<), 1A624(<) (F) void lara_as_back(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 16*/ /*state 16*/
/*collision: lara_col_back*/ /*collision: lara_col_back*/
@ -1273,7 +1273,7 @@ void lara_as_back(ITEM_INFO* item, COLL_INFO* coll)//1A4F0(<), 1A624(<) (F)
} }
} }
void lara_col_back(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_col_back(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 16*/ /*state 16*/
/*state code: lara_as_back*/ /*state code: lara_as_back*/
@ -1321,7 +1321,7 @@ void lara_col_back(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
#endif #endif
} }
void lara_as_fastturn(ITEM_INFO* item, COLL_INFO* coll)//1A5F8(<), 1A72C(<) (F) void lara_as_fastturn(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 20*/ /*state 20*/
/*collision: lara_col_fastturn*/ /*collision: lara_col_fastturn*/
@ -1347,14 +1347,14 @@ void lara_as_fastturn(ITEM_INFO* item, COLL_INFO* coll)//1A5F8(<), 1A72C(<) (F)
} }
} }
void lara_col_fastturn(ITEM_INFO* item, COLL_INFO* coll)//1A65C(<), 1A790(<) (F) void lara_col_fastturn(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 20*/ /*state 20*/
/*state code: lara_as_fastturn*/ /*state code: lara_as_fastturn*/
lara_col_stop(item, coll); lara_col_stop(item, coll);
} }
void lara_as_stepright(ITEM_INFO* item, COLL_INFO* coll)//1A67C(<), 1A7B0(<) (F) void lara_as_stepright(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 21*/ /*state 21*/
/*collision: lara_col_stepright*/ /*collision: lara_col_stepright*/
@ -1388,7 +1388,7 @@ void lara_as_stepright(ITEM_INFO* item, COLL_INFO* coll)//1A67C(<), 1A7B0(<) (F)
} }
} }
void lara_col_stepright(ITEM_INFO* item, COLL_INFO* coll)//1BFB0, 1C0E4 (F) void lara_col_stepright(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 21*/ /*state 21*/
/*state code: lara_as_stepright*/ /*state code: lara_as_stepright*/
@ -1424,7 +1424,7 @@ void lara_col_stepright(ITEM_INFO* item, COLL_INFO* coll)//1BFB0, 1C0E4 (F)
} }
} }
void lara_as_stepleft(ITEM_INFO* item, COLL_INFO* coll)//1A750(<), 1A884(<) (F) void lara_as_stepleft(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 22*/ /*state 22*/
/*collision: lara_col_stepleft*/ /*collision: lara_col_stepleft*/
@ -1458,14 +1458,14 @@ void lara_as_stepleft(ITEM_INFO* item, COLL_INFO* coll)//1A750(<), 1A884(<) (F)
} }
} }
void lara_col_stepleft(ITEM_INFO* item, COLL_INFO* coll)//1C0E8(<), 1C21C(<) (F) void lara_col_stepleft(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 22*/ /*state 22*/
/*state code: lara_as_stepleft*/ /*state code: lara_as_stepleft*/
lara_col_stepright(item, coll); lara_col_stepright(item, coll);
} }
void lara_col_roll2(ITEM_INFO* item, COLL_INFO* coll)//1C384, 1C4B8 (F) void lara_col_roll2(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 23*/ /*state 23*/
/*state code: lara_void_func*/ /*state code: lara_void_func*/
@ -1505,7 +1505,7 @@ void lara_col_roll2(ITEM_INFO* item, COLL_INFO* coll)//1C384, 1C4B8 (F)
item->pos.yPos += coll->midFloor; item->pos.yPos += coll->midFloor;
} }
void lara_as_backjump(ITEM_INFO* item, COLL_INFO* coll)//1A854(<), 1A988(<) (F) void lara_as_backjump(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 25*/ /*state 25*/
/*collision: lara_col_backjump*/ /*collision: lara_col_backjump*/
@ -1527,7 +1527,7 @@ void lara_as_backjump(ITEM_INFO* item, COLL_INFO* coll)//1A854(<), 1A988(<) (F)
} }
} }
void lara_col_backjump(ITEM_INFO* item, COLL_INFO* coll)//1C130(<), 1C264(<) (F) void lara_col_backjump(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 25*/ /*state 25*/
/*state code: lara_as_backjump*/ /*state code: lara_as_backjump*/
@ -1535,7 +1535,7 @@ void lara_col_backjump(ITEM_INFO* item, COLL_INFO* coll)//1C130(<), 1C264(<) (F)
lara_col_jumper(item, coll); lara_col_jumper(item, coll);
} }
void lara_as_rightjump(ITEM_INFO* item, COLL_INFO* coll)//1A8C4(<), 1A9F8(<) (F) void lara_as_rightjump(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 26*/ /*state 26*/
/*collision: lara_col_rightjump*/ /*collision: lara_col_rightjump*/
@ -1546,7 +1546,7 @@ void lara_as_rightjump(ITEM_INFO* item, COLL_INFO* coll)//1A8C4(<), 1A9F8(<) (F)
item->goalAnimState = LS_JUMP_ROLL_180; item->goalAnimState = LS_JUMP_ROLL_180;
} }
void lara_col_rightjump(ITEM_INFO* item, COLL_INFO* coll)//1C15C(<), 1C290(<) (F) void lara_col_rightjump(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 26*/ /*state 26*/
/*state code: lara_as_rightjump*/ /*state code: lara_as_rightjump*/
@ -1554,7 +1554,7 @@ void lara_col_rightjump(ITEM_INFO* item, COLL_INFO* coll)//1C15C(<), 1C290(<) (F
lara_col_jumper(item, coll); lara_col_jumper(item, coll);
} }
void lara_as_leftjump(ITEM_INFO* item, COLL_INFO* coll)//1A92C(<), 1AA60(<) (F) void lara_as_leftjump(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 27*/ /*state 27*/
/*collision: lara_col_leftjump*/ /*collision: lara_col_leftjump*/
@ -1565,7 +1565,7 @@ void lara_as_leftjump(ITEM_INFO* item, COLL_INFO* coll)//1A92C(<), 1AA60(<) (F)
item->goalAnimState = LS_JUMP_ROLL_180; item->goalAnimState = LS_JUMP_ROLL_180;
} }
void lara_col_leftjump(ITEM_INFO* item, COLL_INFO* coll)//1C188(<), 1C2BC(<) (F) void lara_col_leftjump(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 27*/ /*state 27*/
/*state code: lara_as_leftjump*/ /*state code: lara_as_leftjump*/
@ -1600,7 +1600,7 @@ void lara_col_jumper(ITEM_INFO* item, COLL_INFO* coll)
} }
} }
void lara_as_upjump(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_as_upjump(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 28*/ /*state 28*/
/*collision: lara_col_upjump*/ /*collision: lara_col_upjump*/
@ -1610,7 +1610,7 @@ void lara_as_upjump(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
} }
} }
void lara_col_upjump(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_col_upjump(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 28*/ /*state 28*/
/*state code: lara_as_upjump*/ /*state code: lara_as_upjump*/
@ -1774,7 +1774,7 @@ void lara_col_upjump(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
} }
} }
void lara_as_fallback(ITEM_INFO* item, COLL_INFO* coll)//1959C(<), 196D0(<) (F) void lara_as_fallback(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 29*/ /*state 29*/
/*collision: lara_col_fallback*/ /*collision: lara_col_fallback*/
@ -1786,7 +1786,7 @@ void lara_as_fallback(ITEM_INFO* item, COLL_INFO* coll)//1959C(<), 196D0(<) (F)
item->goalAnimState = LS_REACH; item->goalAnimState = LS_REACH;
} }
void lara_col_fallback(ITEM_INFO* item, COLL_INFO* coll)//1C1B4(<), 1C2E8(<) (F) void lara_col_fallback(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 29*/ /*state 29*/
/*state code: lara_as_fallback*/ /*state code: lara_as_fallback*/
@ -1815,7 +1815,7 @@ void lara_col_fallback(ITEM_INFO* item, COLL_INFO* coll)//1C1B4(<), 1C2E8(<) (F)
} }
} }
void lara_col_roll(ITEM_INFO* item, COLL_INFO* coll)//1C2B0, 1C3E4 (F) void lara_col_roll(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 45*/ /*state 45*/
/*state code: lara_void_func*/ /*state code: lara_void_func*/
@ -1851,7 +1851,7 @@ void lara_col_roll(ITEM_INFO* item, COLL_INFO* coll)//1C2B0, 1C3E4 (F)
item->pos.yPos += coll->midFloor; item->pos.yPos += coll->midFloor;
} }
void lara_as_swandive(ITEM_INFO* item, COLL_INFO* coll)//1AE08(<), 1AF3C(<) (F) void lara_as_swandive(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 52*/ /*state 52*/
/*collision: lara_col_swandive*/ /*collision: lara_col_swandive*/
@ -1861,7 +1861,7 @@ void lara_as_swandive(ITEM_INFO* item, COLL_INFO* coll)//1AE08(<), 1AF3C(<) (F)
item->goalAnimState = LS_SWANDIVE_END; item->goalAnimState = LS_SWANDIVE_END;
} }
void lara_col_swandive(ITEM_INFO* item, COLL_INFO* coll)//1C4A0(<), 1C5D4(<) (F) void lara_col_swandive(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 52*/ /*state 52*/
/*state code: lara_as_swandive*/ /*state code: lara_as_swandive*/
@ -1886,7 +1886,7 @@ void lara_col_swandive(ITEM_INFO* item, COLL_INFO* coll)//1C4A0(<), 1C5D4(<) (F)
} }
} }
void lara_as_fastdive(ITEM_INFO* item, COLL_INFO* coll)//1AE4C(<), 1AF80(<) (F) void lara_as_fastdive(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 53*/ /*state 53*/
/*collision: lara_col_fastdive*/ /*collision: lara_col_fastdive*/
@ -1897,7 +1897,7 @@ void lara_as_fastdive(ITEM_INFO* item, COLL_INFO* coll)//1AE4C(<), 1AF80(<) (F)
item->speed = (item->speed * 95) / 100; item->speed = (item->speed * 95) / 100;
} }
void lara_col_fastdive(ITEM_INFO* item, COLL_INFO* coll)//1C558(<), 1C68C(<) (F) void lara_col_fastdive(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 53*/ /*state 53*/
/*state code: lara_as_fastdive*/ /*state code: lara_as_fastdive*/
@ -1926,7 +1926,7 @@ void lara_col_fastdive(ITEM_INFO* item, COLL_INFO* coll)//1C558(<), 1C68C(<) (F)
} }
} }
void lara_as_gymnast(ITEM_INFO* item, COLL_INFO* coll)//1AEC8(<), 1AFFC(<) (F) void lara_as_gymnast(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 54*/ /*state 54*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
@ -1934,7 +1934,7 @@ void lara_as_gymnast(ITEM_INFO* item, COLL_INFO* coll)//1AEC8(<), 1AFFC(<) (F)
coll->enableSpaz = false; coll->enableSpaz = false;
} }
void lara_as_wade(ITEM_INFO* item, COLL_INFO* coll)//1AF10, 1B044 (F) void lara_as_wade(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 65*/ /*state 65*/
/*collision: lara_col_wade*/ /*collision: lara_col_wade*/
@ -2078,7 +2078,7 @@ void lara_col_wade(ITEM_INFO* item, COLL_INFO* coll)
item->pos.yPos += SWAMP_GRAVITY; item->pos.yPos += SWAMP_GRAVITY;
} }
void lara_as_dash(ITEM_INFO* item, COLL_INFO* coll)//15A28, 15B5C (F) void lara_as_dash(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 73*/ /*state 73*/
/*collision: lara_col_dash*/ /*collision: lara_col_dash*/
@ -2143,7 +2143,7 @@ void lara_as_dash(ITEM_INFO* item, COLL_INFO* coll)//15A28, 15B5C (F)
} }
} }
void lara_col_dash(ITEM_INFO* item, COLL_INFO* coll)//15C50, 15D84 (F) void lara_col_dash(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 73*/ /*state 73*/
/*state code: lara_as_dash*/ /*state code: lara_as_dash*/
@ -2205,7 +2205,7 @@ void lara_col_dash(ITEM_INFO* item, COLL_INFO* coll)//15C50, 15D84 (F)
} }
} }
void lara_as_dashdive(ITEM_INFO* item, COLL_INFO* coll)//15E1C(<), 15F50(<) (F) void lara_as_dashdive(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 74*/ /*state 74*/
/*collision: lara_col_dashdive*/ /*collision: lara_col_dashdive*/
@ -2216,7 +2216,7 @@ void lara_as_dashdive(ITEM_INFO* item, COLL_INFO* coll)//15E1C(<), 15F50(<) (F)
item->goalAnimState = LS_FREEFALL; item->goalAnimState = LS_FREEFALL;
} }
void lara_col_dashdive(ITEM_INFO* item, COLL_INFO* coll)//15E5C, 15F90 (F) void lara_col_dashdive(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 74*/ /*state 74*/
/*state code: lara_as_dashdive*/ /*state code: lara_as_dashdive*/

View file

@ -11,7 +11,7 @@
extern GameFlow* g_GameFlow; extern GameFlow* g_GameFlow;
int NoCheatCounter; int NoCheatCounter;
void lara_as_swimcheat(ITEM_INFO* item, COLL_INFO* coll)//4C3A8, 4C80C (F) void lara_as_swimcheat(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (TrInput & IN_FORWARD) if (TrInput & IN_FORWARD)
{ {
@ -63,7 +63,7 @@ void lara_as_swimcheat(ITEM_INFO* item, COLL_INFO* coll)//4C3A8, 4C80C (F)
} }
} }
void LaraCheatyBits() // (F) (D) void LaraCheatyBits()
{ {
if (g_GameFlow->FlyCheat) if (g_GameFlow->FlyCheat)
{ {
@ -108,7 +108,7 @@ void LaraCheatyBits() // (F) (D)
NoCheatCounter--; NoCheatCounter--;
} }
void LaraCheatGetStuff() // (F) (D) void LaraCheatGetStuff()
{ {
Lara.NumFlares = -1; Lara.NumFlares = -1;
Lara.NumSmallMedipacks = -1; Lara.NumSmallMedipacks = -1;
@ -126,7 +126,7 @@ void LaraCheatGetStuff() // (F) (D)
Lara.Weapons[WEAPON_REVOLVER].SelectedAmmo = WEAPON_AMMO1; Lara.Weapons[WEAPON_REVOLVER].SelectedAmmo = WEAPON_AMMO1;
Lara.Weapons[WEAPON_REVOLVER].HasLasersight = false; Lara.Weapons[WEAPON_REVOLVER].HasLasersight = false;
Lara.Weapons[WEAPON_REVOLVER].HasSilencer = false; Lara.Weapons[WEAPON_REVOLVER].HasSilencer = false;
Lara.Weapons[WEAPON_REVOLVER].Ammo[WEAPON_AMMO1] = -1; Lara.Weapons[WEAPON_REVOLVER].Ammo[WEAPON_AMMO1].setInfinite(true);
} }
if (Objects[ID_UZI_ITEM].loaded) if (Objects[ID_UZI_ITEM].loaded)
@ -135,7 +135,7 @@ void LaraCheatGetStuff() // (F) (D)
Lara.Weapons[WEAPON_UZI].SelectedAmmo = WEAPON_AMMO1; Lara.Weapons[WEAPON_UZI].SelectedAmmo = WEAPON_AMMO1;
Lara.Weapons[WEAPON_UZI].HasLasersight = false; Lara.Weapons[WEAPON_UZI].HasLasersight = false;
Lara.Weapons[WEAPON_UZI].HasSilencer = false; Lara.Weapons[WEAPON_UZI].HasSilencer = false;
Lara.Weapons[WEAPON_UZI].Ammo[WEAPON_AMMO1] = -1; Lara.Weapons[WEAPON_UZI].Ammo[WEAPON_AMMO1].setInfinite(true);
} }
if (Objects[ID_SHOTGUN_ITEM].loaded) if (Objects[ID_SHOTGUN_ITEM].loaded)
@ -144,7 +144,7 @@ void LaraCheatGetStuff() // (F) (D)
Lara.Weapons[WEAPON_SHOTGUN].SelectedAmmo = WEAPON_AMMO1; Lara.Weapons[WEAPON_SHOTGUN].SelectedAmmo = WEAPON_AMMO1;
Lara.Weapons[WEAPON_SHOTGUN].HasLasersight = false; Lara.Weapons[WEAPON_SHOTGUN].HasLasersight = false;
Lara.Weapons[WEAPON_SHOTGUN].HasSilencer = false; Lara.Weapons[WEAPON_SHOTGUN].HasSilencer = false;
Lara.Weapons[WEAPON_SHOTGUN].Ammo[WEAPON_AMMO1] = -1; Lara.Weapons[WEAPON_SHOTGUN].Ammo[WEAPON_AMMO1].setInfinite(true);
} }
if (Objects[ID_HARPOON_ITEM].loaded) if (Objects[ID_HARPOON_ITEM].loaded)
@ -153,7 +153,7 @@ void LaraCheatGetStuff() // (F) (D)
Lara.Weapons[WEAPON_HARPOON_GUN].SelectedAmmo = WEAPON_AMMO1; Lara.Weapons[WEAPON_HARPOON_GUN].SelectedAmmo = WEAPON_AMMO1;
Lara.Weapons[WEAPON_HARPOON_GUN].HasLasersight = false; Lara.Weapons[WEAPON_HARPOON_GUN].HasLasersight = false;
Lara.Weapons[WEAPON_HARPOON_GUN].HasSilencer = false; Lara.Weapons[WEAPON_HARPOON_GUN].HasSilencer = false;
Lara.Weapons[WEAPON_HARPOON_GUN].Ammo[WEAPON_AMMO1] = -1; Lara.Weapons[WEAPON_HARPOON_GUN].Ammo[WEAPON_AMMO1].setInfinite(true);
} }
if (Objects[ID_GRENADE_GUN_ITEM].loaded) if (Objects[ID_GRENADE_GUN_ITEM].loaded)
@ -161,9 +161,9 @@ void LaraCheatGetStuff() // (F) (D)
Lara.Weapons[WEAPON_GRENADE_LAUNCHER].Present = true; Lara.Weapons[WEAPON_GRENADE_LAUNCHER].Present = true;
Lara.Weapons[WEAPON_GRENADE_LAUNCHER].SelectedAmmo = WEAPON_AMMO1; Lara.Weapons[WEAPON_GRENADE_LAUNCHER].SelectedAmmo = WEAPON_AMMO1;
Lara.Weapons[WEAPON_GRENADE_LAUNCHER].HasSilencer = false; Lara.Weapons[WEAPON_GRENADE_LAUNCHER].HasSilencer = false;
Lara.Weapons[WEAPON_GRENADE_LAUNCHER].Ammo[WEAPON_AMMO1] = -1; Lara.Weapons[WEAPON_GRENADE_LAUNCHER].Ammo[WEAPON_AMMO1].setInfinite(true);
Lara.Weapons[WEAPON_GRENADE_LAUNCHER].Ammo[WEAPON_AMMO2] = -1; Lara.Weapons[WEAPON_GRENADE_LAUNCHER].Ammo[WEAPON_AMMO2].setInfinite(true);
Lara.Weapons[WEAPON_GRENADE_LAUNCHER].Ammo[WEAPON_AMMO3] = -1; Lara.Weapons[WEAPON_GRENADE_LAUNCHER].Ammo[WEAPON_AMMO3].setInfinite(true);
} }
if (Objects[ID_ROCKET_LAUNCHER_ITEM].loaded) if (Objects[ID_ROCKET_LAUNCHER_ITEM].loaded)
@ -172,7 +172,7 @@ void LaraCheatGetStuff() // (F) (D)
Lara.Weapons[WEAPON_ROCKET_LAUNCHER].SelectedAmmo = WEAPON_AMMO1; Lara.Weapons[WEAPON_ROCKET_LAUNCHER].SelectedAmmo = WEAPON_AMMO1;
Lara.Weapons[WEAPON_ROCKET_LAUNCHER].HasLasersight = false; Lara.Weapons[WEAPON_ROCKET_LAUNCHER].HasLasersight = false;
Lara.Weapons[WEAPON_ROCKET_LAUNCHER].HasSilencer = false; Lara.Weapons[WEAPON_ROCKET_LAUNCHER].HasSilencer = false;
Lara.Weapons[WEAPON_ROCKET_LAUNCHER].Ammo[WEAPON_AMMO1] = -1; Lara.Weapons[WEAPON_ROCKET_LAUNCHER].Ammo[WEAPON_AMMO1].setInfinite(true);
} }
if (Objects[ID_HK_ITEM].loaded) if (Objects[ID_HK_ITEM].loaded)
@ -181,7 +181,7 @@ void LaraCheatGetStuff() // (F) (D)
Lara.Weapons[WEAPON_HK].SelectedAmmo = WEAPON_AMMO1; Lara.Weapons[WEAPON_HK].SelectedAmmo = WEAPON_AMMO1;
Lara.Weapons[WEAPON_HK].HasLasersight = false; Lara.Weapons[WEAPON_HK].HasLasersight = false;
Lara.Weapons[WEAPON_HK].HasSilencer = false; Lara.Weapons[WEAPON_HK].HasSilencer = false;
Lara.Weapons[WEAPON_HK].Ammo[WEAPON_AMMO1] = -1; Lara.Weapons[WEAPON_HK].Ammo[WEAPON_AMMO1].setInfinite(true);
} }
if (Objects[ID_CROSSBOW_ITEM].loaded) if (Objects[ID_CROSSBOW_ITEM].loaded)
@ -190,15 +190,15 @@ void LaraCheatGetStuff() // (F) (D)
Lara.Weapons[WEAPON_CROSSBOW].SelectedAmmo = WEAPON_AMMO1; Lara.Weapons[WEAPON_CROSSBOW].SelectedAmmo = WEAPON_AMMO1;
Lara.Weapons[WEAPON_CROSSBOW].HasLasersight = false; Lara.Weapons[WEAPON_CROSSBOW].HasLasersight = false;
Lara.Weapons[WEAPON_CROSSBOW].HasSilencer = false; Lara.Weapons[WEAPON_CROSSBOW].HasSilencer = false;
Lara.Weapons[WEAPON_CROSSBOW].Ammo[WEAPON_AMMO1] = -1; Lara.Weapons[WEAPON_CROSSBOW].Ammo[WEAPON_AMMO1].setInfinite(true);
Lara.Weapons[WEAPON_CROSSBOW].Ammo[WEAPON_AMMO2] = -1; Lara.Weapons[WEAPON_CROSSBOW].Ammo[WEAPON_AMMO2].setInfinite(true);
Lara.Weapons[WEAPON_CROSSBOW].Ammo[WEAPON_AMMO3] = -1; Lara.Weapons[WEAPON_CROSSBOW].Ammo[WEAPON_AMMO3].setInfinite(true);
} }
g_Inventory.LoadObjects(false); g_Inventory.LoadObjects(false);
} }
void DelsGiveLaraItemsCheat() // (AF) (D) void DelsGiveLaraItemsCheat()
{ {
int i; int i;

View file

@ -17,7 +17,7 @@ short LeftExtRightIntTab[4] = // offset 0xA0B84
0x0200, 0x0400, 0x0800, 0x0100 0x0200, 0x0400, 0x0800, 0x0100
}; };
short GetClimbTrigger(int x, int y, int z, short roomNumber) // (F) (D) short GetClimbTrigger(int x, int y, int z, short roomNumber)
{ {
GetFloorHeight(GetFloor(x, y, z, &roomNumber), x, y, z); GetFloorHeight(GetFloor(x, y, z, &roomNumber), x, y, z);
@ -37,12 +37,12 @@ short GetClimbTrigger(int x, int y, int z, short roomNumber) // (F) (D)
return (*data & DATA_TYPE) == CLIMB_TYPE ? *data : 0; return (*data & DATA_TYPE) == CLIMB_TYPE ? *data : 0;
} }
void lara_col_climbend(ITEM_INFO* item, COLL_INFO* coll)//46E30(<), 47294(<) (F) void lara_col_climbend(ITEM_INFO* item, COLL_INFO* coll)
{ {
return; return;
} }
void lara_as_climbend(ITEM_INFO* item, COLL_INFO* coll)//46DF8(<), 4725C(<) (F) void lara_as_climbend(ITEM_INFO* item, COLL_INFO* coll)
{ {
coll->enableBaddiePush = false; coll->enableBaddiePush = false;
coll->enableSpaz = false; coll->enableSpaz = false;
@ -51,7 +51,7 @@ void lara_as_climbend(ITEM_INFO* item, COLL_INFO* coll)//46DF8(<), 4725C(<) (F)
Camera.targetAngle = -ANGLE(45); Camera.targetAngle = -ANGLE(45);
} }
void lara_col_climbdown(ITEM_INFO* item, COLL_INFO* coll)//46BD0, 47034 (F) void lara_col_climbdown(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (LaraCheckForLetGo(item, coll) if (LaraCheckForLetGo(item, coll)
|| item->animNumber != LA_LADDER_DOWN) || item->animNumber != LA_LADDER_DOWN)
@ -132,7 +132,7 @@ void lara_col_climbdown(ITEM_INFO* item, COLL_INFO* coll)//46BD0, 47034 (F)
AnimateLara(item); AnimateLara(item);
} }
void lara_as_climbdown(ITEM_INFO* item, COLL_INFO* coll)//46BA4(<), 47008(<) (F) void lara_as_climbdown(ITEM_INFO* item, COLL_INFO* coll)
{ {
coll->enableBaddiePush = false; coll->enableBaddiePush = false;
coll->enableSpaz = false; coll->enableSpaz = false;
@ -140,7 +140,7 @@ void lara_as_climbdown(ITEM_INFO* item, COLL_INFO* coll)//46BA4(<), 47008(<) (F)
Camera.targetElevation = -ANGLE(45); Camera.targetElevation = -ANGLE(45);
} }
void lara_col_climbing(ITEM_INFO* item, COLL_INFO* coll)//469B0, 46E14 (F) void lara_col_climbing(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (!LaraCheckForLetGo(item, coll) && item->animNumber == LA_LADDER_UP) if (!LaraCheckForLetGo(item, coll) && item->animNumber == LA_LADDER_UP)
{ {
@ -212,7 +212,7 @@ void lara_col_climbing(ITEM_INFO* item, COLL_INFO* coll)//469B0, 46E14 (F)
} }
} }
void lara_as_climbing(ITEM_INFO* item, COLL_INFO* coll)//46984(<), 46DE8(<) (F) void lara_as_climbing(ITEM_INFO* item, COLL_INFO* coll)
{ {
coll->enableBaddiePush = false; coll->enableBaddiePush = false;
coll->enableSpaz = false; coll->enableSpaz = false;
@ -220,7 +220,7 @@ void lara_as_climbing(ITEM_INFO* item, COLL_INFO* coll)//46984(<), 46DE8(<) (F)
Camera.targetElevation = ANGLE(30); Camera.targetElevation = ANGLE(30);
} }
void lara_col_climbright(ITEM_INFO* item, COLL_INFO* coll)//46908(<), 46D6C(<) (F) void lara_col_climbright(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (!LaraCheckForLetGo(item, coll)) if (!LaraCheckForLetGo(item, coll))
{ {
@ -230,7 +230,7 @@ void lara_col_climbright(ITEM_INFO* item, COLL_INFO* coll)//46908(<), 46D6C(<) (
} }
} }
void lara_as_climbright(ITEM_INFO* item, COLL_INFO* coll)//468B8(<), 46D1C(<) (F) void lara_as_climbright(ITEM_INFO* item, COLL_INFO* coll)
{ {
coll->enableBaddiePush = false; coll->enableBaddiePush = false;
coll->enableSpaz = false; coll->enableSpaz = false;
@ -242,7 +242,7 @@ void lara_as_climbright(ITEM_INFO* item, COLL_INFO* coll)//468B8(<), 46D1C(<) (F
item->goalAnimState = LS_LADDER_IDLE; item->goalAnimState = LS_LADDER_IDLE;
} }
void lara_col_climbleft(ITEM_INFO* item, COLL_INFO* coll)//46834(<), 46C98(<) (F) void lara_col_climbleft(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (!LaraCheckForLetGo(item, coll)) if (!LaraCheckForLetGo(item, coll))
{ {
@ -252,7 +252,7 @@ void lara_col_climbleft(ITEM_INFO* item, COLL_INFO* coll)//46834(<), 46C98(<) (F
} }
} }
void lara_as_climbleft(ITEM_INFO* item, COLL_INFO* coll)//467E4(<), 46C48(<) (F) void lara_as_climbleft(ITEM_INFO* item, COLL_INFO* coll)
{ {
coll->enableBaddiePush = false; coll->enableBaddiePush = false;
coll->enableSpaz = false; coll->enableSpaz = false;
@ -264,7 +264,7 @@ void lara_as_climbleft(ITEM_INFO* item, COLL_INFO* coll)//467E4(<), 46C48(<) (F)
item->goalAnimState = LS_LADDER_IDLE; item->goalAnimState = LS_LADDER_IDLE;
} }
void lara_col_climbstnc(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_col_climbstnc(ITEM_INFO* item, COLL_INFO* coll)
{ {
int yShift; int yShift;
int resultRight, resultLeft; int resultRight, resultLeft;
@ -360,7 +360,7 @@ void lara_col_climbstnc(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
} }
} }
void lara_as_climbstnc(ITEM_INFO* item, COLL_INFO* coll)//463F0, 46854 (F) void lara_as_climbstnc(ITEM_INFO* item, COLL_INFO* coll)
{ {
Lara.isClimbing = true; Lara.isClimbing = true;
@ -422,7 +422,7 @@ void lara_as_stepoff_right(ITEM_INFO* item, COLL_INFO* coll)
item->pos.yRot += ANGLE(90.0f); item->pos.yRot += ANGLE(90.0f);
} }
int LaraTestClimbPos(ITEM_INFO* item, int front, int right, int origin, int height, int* shift) // (F) (D) int LaraTestClimbPos(ITEM_INFO* item, int front, int right, int origin, int height, int* shift)
{ {
int x; int x;
int z; int z;
@ -460,7 +460,7 @@ int LaraTestClimbPos(ITEM_INFO* item, int front, int right, int origin, int heig
return LaraTestClimb(x, item->pos.yPos + origin, z, xFront, zFront, height, item->roomNumber, shift); return LaraTestClimb(x, item->pos.yPos + origin, z, xFront, zFront, height, item->roomNumber, shift);
} }
void LaraDoClimbLeftRight(ITEM_INFO* item, COLL_INFO* coll, int result, int shift)//46100, 46564 (F) void LaraDoClimbLeftRight(ITEM_INFO* item, COLL_INFO* coll, int result, int shift)
{ {
if (result == 1) if (result == 1)
{ {
@ -592,7 +592,7 @@ void LaraDoClimbLeftRight(ITEM_INFO* item, COLL_INFO* coll, int result, int shif
AnimateLara(item); AnimateLara(item);
} }
int LaraClimbRightCornerTest(ITEM_INFO* item, COLL_INFO* coll)//45DE4, 46248 int LaraClimbRightCornerTest(ITEM_INFO* item, COLL_INFO* coll)
{ {
int result = 0; int result = 0;
@ -690,7 +690,7 @@ int LaraClimbRightCornerTest(ITEM_INFO* item, COLL_INFO* coll)//45DE4, 46248
return result; return result;
} }
int LaraClimbLeftCornerTest(ITEM_INFO* item, COLL_INFO* coll)//45ABC, 45F20 int LaraClimbLeftCornerTest(ITEM_INFO* item, COLL_INFO* coll)
{ {
int result = 0; int result = 0;
@ -790,7 +790,7 @@ int LaraClimbLeftCornerTest(ITEM_INFO* item, COLL_INFO* coll)//45ABC, 45F20
return result; return result;
} }
int LaraTestClimb(int x, int y, int z, int xFront, int zFront, int itemHeight, int itemRoom, int* shift)//457F0, 45C54 int LaraTestClimb(int x, int y, int z, int xFront, int zFront, int itemHeight, int itemRoom, int* shift)
{ {
*shift = 0; *shift = 0;
@ -886,7 +886,7 @@ int LaraTestClimb(int x, int y, int z, int xFront, int zFront, int itemHeight, i
return -1; return -1;
} }
int LaraTestClimbUpPos(ITEM_INFO* item, int front, int right, int* shift, int* ledge)//45530, 45994 int LaraTestClimbUpPos(ITEM_INFO* item, int front, int right, int* shift, int* ledge)
{ {
int y = item->pos.yPos - 768; int y = item->pos.yPos - 768;
@ -987,7 +987,7 @@ int LaraTestClimbUpPos(ITEM_INFO* item, int front, int right, int* shift, int* l
return -2; return -2;
} }
int LaraCheckForLetGo(ITEM_INFO* item, COLL_INFO* coll)//45434, 45898 (F) int LaraCheckForLetGo(ITEM_INFO* item, COLL_INFO* coll)
{ {
short roomNumber = item->roomNumber; short roomNumber = item->roomNumber;
@ -999,7 +999,7 @@ int LaraCheckForLetGo(ITEM_INFO* item, COLL_INFO* coll)//45434, 45898 (F)
coll->trigger = TriggerIndex; coll->trigger = TriggerIndex;
if (TrInput & IN_ACTION && item->hitPoints > 0) if (TrInput & IN_ACTION && item->hitPoints > 0 || item->animNumber == LA_ONWATER_TO_LADDER)//can't let go on this anim
return 0; return 0;
Lara.torsoYrot = 0; Lara.torsoYrot = 0;

View file

@ -6,7 +6,7 @@
/*this file has all the generic **collision** test functions called in lara's state code*/ /*this file has all the generic **collision** test functions called in lara's state code*/
int LaraDeflectEdge(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) int LaraDeflectEdge(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (coll->collType == CT_FRONT || coll->collType == CT_TOP_FRONT) if (coll->collType == CT_FRONT || coll->collType == CT_TOP_FRONT)
{ {
@ -33,7 +33,7 @@ int LaraDeflectEdge(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
return 0; return 0;
} }
void LaraDeflectEdgeJump(ITEM_INFO* item, COLL_INFO* coll)//12904, 129B4 (F) void LaraDeflectEdgeJump(ITEM_INFO* item, COLL_INFO* coll)
{ {
ShiftItem(item, coll); ShiftItem(item, coll);
@ -96,7 +96,7 @@ void LaraDeflectEdgeJump(ITEM_INFO* item, COLL_INFO* coll)//12904, 129B4 (F)
} }
} }
int LaraDeflectEdgeDuck(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) int LaraDeflectEdgeDuck(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (coll->collType == CT_FRONT || coll->collType == CT_TOP_FRONT) if (coll->collType == CT_FRONT || coll->collType == CT_TOP_FRONT)
{ {
@ -122,7 +122,7 @@ int LaraDeflectEdgeDuck(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
return 0; return 0;
} }
int LaraHitCeiling(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) int LaraHitCeiling(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (coll->collType == CT_TOP || coll->collType == CT_CLAMP) if (coll->collType == CT_TOP || coll->collType == CT_CLAMP)
{ {
@ -145,7 +145,7 @@ int LaraHitCeiling(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
return 0; return 0;
} }
void LaraCollideStop(ITEM_INFO* item, COLL_INFO* coll)//126F0(<), 127A0(<) (F) void LaraCollideStop(ITEM_INFO* item, COLL_INFO* coll)
{ {
switch (coll->oldAnimState) switch (coll->oldAnimState)
{ {
@ -177,7 +177,7 @@ void LaraCollideStop(ITEM_INFO* item, COLL_INFO* coll)//126F0(<), 127A0(<) (F)
} }
} }
void SnapLaraToEdgeOfBlock(ITEM_INFO* item, COLL_INFO* coll, short angle) // (F) (D) void SnapLaraToEdgeOfBlock(ITEM_INFO* item, COLL_INFO* coll, short angle)
{ {
if (item->currentAnimState == LS_SHIMMY_RIGHT) if (item->currentAnimState == LS_SHIMMY_RIGHT)
{ {
@ -260,12 +260,12 @@ void SnapLaraToEdgeOfBlock(ITEM_INFO* item, COLL_INFO* coll, short angle) // (F)
} }
} }
short GetDirOctant(int rot)//160B4(<), 161E8(<) (F) short GetDirOctant(int rot)
{ {
return abs(rot) >= ANGLE(45) && abs(rot) <= ANGLE(135.0f); return abs(rot) >= ANGLE(45) && abs(rot) <= ANGLE(135.0f);
} }
void GetLaraDeadlyBounds() // (F) (D) void GetLaraDeadlyBounds()
{ {
BOUNDING_BOX* bounds; BOUNDING_BOX* bounds;
BOUNDING_BOX tbounds; BOUNDING_BOX tbounds;

View file

@ -9,7 +9,7 @@
/*this file has all the related functions to ducking and crawling*/ /*this file has all the related functions to ducking and crawling*/
/*crouch/duck start*/ /*crouch/duck start*/
void lara_as_duck(ITEM_INFO* item, COLL_INFO* coll)//14688, 14738 (F) void lara_as_duck(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 71*/ /*state 71*/
/*collision: lara_col_duck*/ /*collision: lara_col_duck*/
@ -79,7 +79,7 @@ void lara_as_duck(ITEM_INFO* item, COLL_INFO* coll)//14688, 14738 (F)
} }
} }
void lara_col_duck(ITEM_INFO* item, COLL_INFO* coll)//147C4, 148CC (F) void lara_col_duck(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 71*/ /*state 71*/
/*state code: lara_as_duck*/ /*state code: lara_as_duck*/
@ -161,7 +161,7 @@ void lara_col_crouch_roll(ITEM_INFO* item, COLL_INFO* coll)
/*crouch/duck end*/ /*crouch/duck end*/
/*-*/ /*-*/
/*crawl start*/ /*crawl start*/
void lara_as_all4s(ITEM_INFO* item, COLL_INFO* coll)//14970, 14A78 (F) void lara_as_all4s(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 80*/ /*state 80*/
/*collision: lara_col_all4s*/ /*collision: lara_col_all4s*/
@ -336,7 +336,7 @@ void lara_as_all4s(ITEM_INFO* item, COLL_INFO* coll)//14970, 14A78 (F)
} }
} }
void lara_col_all4s(ITEM_INFO* item, COLL_INFO* coll)//14B40, 14C74 (F) void lara_col_all4s(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 80*/ /*state 80*/
/*state code: lara_as_all4s*/ /*state code: lara_as_all4s*/
@ -393,7 +393,7 @@ void lara_col_all4s(ITEM_INFO* item, COLL_INFO* coll)//14B40, 14C74 (F)
short heightl = 0; short heightl = 0;
short heightr = 0; short heightr = 0;
if (height != NO_HEIGHT && height <= 256) if (height != NO_HEIGHT && height <= -256)
{ {
if (TrInput & IN_ACTION) if (TrInput & IN_ACTION)
{ {
@ -426,15 +426,13 @@ void lara_col_all4s(ITEM_INFO* item, COLL_INFO* coll)//14B40, 14C74 (F)
slope < 120) slope < 120)
{ {
int tmp; int tmp;
ITEM_INFO* tmp1;
MESH_INFO* tmp2;
int x = item->pos.xPos; int x = item->pos.xPos;
int z = item->pos.zPos; int z = item->pos.zPos;
item->pos.xPos -= 100 * phd_sin(coll->facing); item->pos.xPos -= 100 * phd_sin(coll->facing);
item->pos.zPos -= 100 * phd_cos(coll->facing); item->pos.zPos -= 100 * phd_cos(coll->facing);
tmp = GetCollidedObjects(item, 100, 1, &tmp1, &tmp2, 0); tmp = GetCollidedObjects(item, 100, 1, CollidedItems, CollidedMeshes, 0);
item->pos.xPos = x; item->pos.xPos = x;
item->pos.zPos = z; item->pos.zPos = z;
@ -496,7 +494,7 @@ void lara_col_all4s(ITEM_INFO* item, COLL_INFO* coll)//14B40, 14C74 (F)
} }
} }
void lara_as_crawl(ITEM_INFO* item, COLL_INFO* coll)//150F4, 15228 (F) void lara_as_crawl(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 81*/ /*state 81*/
/*collision: lara_col_crawl*/ /*collision: lara_col_crawl*/
@ -542,7 +540,7 @@ void lara_as_crawl(ITEM_INFO* item, COLL_INFO* coll)//150F4, 15228 (F)
} }
} }
void lara_col_crawl(ITEM_INFO* item, COLL_INFO* coll)//1523C, 15370 (F) void lara_col_crawl(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 81*/ /*state 81*/
/*state code: lara_as_crawl*/ /*state code: lara_as_crawl*/
@ -588,7 +586,7 @@ void lara_col_crawl(ITEM_INFO* item, COLL_INFO* coll)//1523C, 15370 (F)
} }
} }
void lara_as_all4turnl(ITEM_INFO* item, COLL_INFO* coll)//15390(<), 154C4(<) (F) void lara_as_all4turnl(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 84*/ /*state 84*/
/*collision: lara_col_all4turnlr*/ /*collision: lara_col_all4turnlr*/
@ -609,7 +607,7 @@ void lara_as_all4turnl(ITEM_INFO* item, COLL_INFO* coll)//15390(<), 154C4(<) (F)
item->goalAnimState = LS_CRAWL_IDLE; item->goalAnimState = LS_CRAWL_IDLE;
} }
void lara_as_all4turnr(ITEM_INFO* item, COLL_INFO* coll)//15484(<), 155B8(<) (F) void lara_as_all4turnr(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 85*/ /*state 85*/
/*collision: lara_col_all4turnlr*/ /*collision: lara_col_all4turnlr*/
@ -630,7 +628,7 @@ void lara_as_all4turnr(ITEM_INFO* item, COLL_INFO* coll)//15484(<), 155B8(<) (F)
item->goalAnimState = LS_CRAWL_IDLE; item->goalAnimState = LS_CRAWL_IDLE;
} }
void lara_col_all4turnlr(ITEM_INFO* item, COLL_INFO* coll)//153FC, 15530 (F) void lara_col_all4turnlr(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*states 84 and 85*/ /*states 84 and 85*/
/*state code: lara_as_all4turnl(84) and lara_as_all4turnr(85)*/ /*state code: lara_as_all4turnl(84) and lara_as_all4turnr(85)*/
@ -643,7 +641,7 @@ void lara_col_all4turnlr(ITEM_INFO* item, COLL_INFO* coll)//153FC, 15530 (F)
} }
} }
void lara_as_crawlb(ITEM_INFO* item, COLL_INFO* coll)//154F0, 15624 (F) void lara_as_crawlb(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 86*/ /*state 86*/
/*collision: lara_col_crawlb*/ /*collision: lara_col_crawlb*/
@ -685,7 +683,7 @@ void lara_as_crawlb(ITEM_INFO* item, COLL_INFO* coll)//154F0, 15624 (F)
} }
} }
void lara_col_crawlb(ITEM_INFO* item, COLL_INFO* coll)//15614, 15748 (F) void lara_col_crawlb(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 86*/ /*state 86*/
/*state code: lara_as_crawlb*/ /*state code: lara_as_crawlb*/
@ -731,7 +729,7 @@ void lara_col_crawlb(ITEM_INFO* item, COLL_INFO* coll)//15614, 15748 (F)
} }
} }
void lara_as_duckl(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_as_duckl(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 105*/ /*state 105*/
/*collision: lara_col_ducklr*/ /*collision: lara_col_ducklr*/
@ -741,7 +739,7 @@ void lara_as_duckl(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
item->pos.yRot -= ANGLE(1.5f); item->pos.yRot -= ANGLE(1.5f);
} }
void lara_as_duckr(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_as_duckr(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 106*/ /*state 106*/
/*collision: lara_col_ducklr*/ /*collision: lara_col_ducklr*/
@ -751,7 +749,7 @@ void lara_as_duckr(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
item->pos.yRot += ANGLE(1.5f); item->pos.yRot += ANGLE(1.5f);
} }
void lara_col_ducklr(ITEM_INFO* item, COLL_INFO* coll)//14534, 145E4 (F) void lara_col_ducklr(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 105 and 106*/ /*state 105 and 106*/
/*state code: lara_as_duckl(105) and lara_col_ducklr(106)*/ /*state code: lara_as_duckl(105) and lara_col_ducklr(106)*/
@ -792,7 +790,7 @@ void lara_col_ducklr(ITEM_INFO* item, COLL_INFO* coll)//14534, 145E4 (F)
} }
/*crawling end*/ /*crawling end*/
void lara_col_crawl2hang(ITEM_INFO* item, COLL_INFO* coll)//15770, 158A4 (F) void lara_col_crawl2hang(ITEM_INFO* item, COLL_INFO* coll)
{ {
Camera.targetAngle = 0; Camera.targetAngle = 0;
Camera.targetElevation = -ANGLE(45.0f); Camera.targetElevation = -ANGLE(45.0f);

View file

@ -258,7 +258,7 @@ bool MonksAttackLara;
ITEM_INFO* LastTargets[8]; ITEM_INFO* LastTargets[8];
ITEM_INFO* TargetList[8]; ITEM_INFO* TargetList[8];
int WeaponObject(int weaponType) // (F) (D) GAME_OBJECT_ID WeaponObject(int weaponType)
{ {
switch (weaponType) switch (weaponType)
{ {
@ -285,7 +285,7 @@ int WeaponObject(int weaponType) // (F) (D)
} }
} }
void AimWeapon(WEAPON_INFO* winfo, LARA_ARM* arm) // (F) (D) void AimWeapon(WEAPON_INFO* winfo, LARA_ARM* arm)
{ {
short rotY, rotX, speed, x, y; short rotY, rotX, speed, x, y;
@ -328,14 +328,14 @@ void AimWeapon(WEAPON_INFO* winfo, LARA_ARM* arm) // (F) (D)
arm->zRot = 0; arm->zRot = 0;
} }
void SmashItem(short itemNum) // (F) (D) void SmashItem(short itemNum)
{ {
ITEM_INFO* item = &g_Level.Items[itemNum]; ITEM_INFO* item = &g_Level.Items[itemNum];
if (item->objectNumber >= ID_SMASH_OBJECT1 && item->objectNumber <= ID_SMASH_OBJECT8) if (item->objectNumber >= ID_SMASH_OBJECT1 && item->objectNumber <= ID_SMASH_OBJECT8)
SmashObject(itemNum); SmashObject(itemNum);
} }
void LaraGun() // (F) (D) void LaraGun()
{ {
if (Lara.leftArm.flash_gun > 0) if (Lara.leftArm.flash_gun > 0)
--Lara.leftArm.flash_gun; --Lara.leftArm.flash_gun;
@ -522,7 +522,7 @@ void LaraGun() // (F) (D)
if (TrInput & IN_ACTION) if (TrInput & IN_ACTION)
{ {
if (!*GetAmmo(Lara.gunType)) if (!GetAmmo(Lara.gunType))
{ {
Lara.requestGunType = Objects[ID_PISTOLS_ITEM].loaded ? WEAPON_PISTOLS : WEAPON_NONE; Lara.requestGunType = Objects[ID_PISTOLS_ITEM].loaded ? WEAPON_PISTOLS : WEAPON_NONE;
return; return;
@ -594,9 +594,8 @@ void LaraGun() // (F) (D)
} }
} }
short* GetAmmo(int weaponType) Ammo& GetAmmo(int weaponType){
{ return Lara.Weapons[weaponType].Ammo[Lara.Weapons[weaponType].SelectedAmmo];
return &Lara.Weapons[weaponType].Ammo[Lara.Weapons[weaponType].SelectedAmmo];
} }
void InitialiseNewWeapon() void InitialiseNewWeapon()
@ -651,8 +650,7 @@ void InitialiseNewWeapon()
} }
} }
int WeaponObjectMesh(int weaponType) GAME_OBJECT_ID WeaponObjectMesh(int weaponType) {
{
switch (weaponType) switch (weaponType)
{ {
case WEAPON_REVOLVER: case WEAPON_REVOLVER:
@ -722,13 +720,13 @@ void HitTarget(ITEM_INFO* item, GAME_VECTOR* hitPos, int damage, int flag)
} }
} }
FireWeaponType FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles) // (F) (D) FireWeaponType FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles)
{ {
short* ammo = GetAmmo(weaponType); Ammo& ammo = GetAmmo(weaponType);
if (*ammo == 0) if (ammo.getCount() == 0 && !ammo.hasInfinite())
return FW_NOAMMO; return FW_NOAMMO;
if (*ammo != -1) if (!ammo.hasInfinite())
*ammo--; ammo--;
WEAPON_INFO* weapon = &Weapons[weaponType]; WEAPON_INFO* weapon = &Weapons[weaponType];
int r; int r;
@ -847,7 +845,7 @@ FireWeaponType FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, sho
} }
} }
void find_target_point(ITEM_INFO* item, GAME_VECTOR* target) // (F) (D) void find_target_point(ITEM_INFO* item, GAME_VECTOR* target)
{ {
BOUNDING_BOX* bounds; BOUNDING_BOX* bounds;
int x, y, z; int x, y, z;
@ -866,7 +864,7 @@ void find_target_point(ITEM_INFO* item, GAME_VECTOR* target) // (F) (D)
target->roomNumber = item->roomNumber; target->roomNumber = item->roomNumber;
} }
void LaraTargetInfo(WEAPON_INFO* weapon) // (F) (D) void LaraTargetInfo(WEAPON_INFO* weapon)
{ {
if (Lara.target == nullptr) if (Lara.target == nullptr)
{ {
@ -933,7 +931,7 @@ void LaraTargetInfo(WEAPON_INFO* weapon) // (F) (D)
Lara.targetAngles[1] = angles[1]; Lara.targetAngles[1] = angles[1];
} }
bool CheckForHoldingState(int state) // (F) (D) bool CheckForHoldingState(int state)
{ {
#if 0 #if 0
if (Lara.ExtraAnim != NO_ITEM) if (Lara.ExtraAnim != NO_ITEM)
@ -951,7 +949,7 @@ bool CheckForHoldingState(int state) // (F) (D)
return false; return false;
} }
void LaraGetNewTarget(WEAPON_INFO* weapon) // (F) (D) void LaraGetNewTarget(WEAPON_INFO* weapon)
{ {
GAME_VECTOR src, target; GAME_VECTOR src, target;
PHD_VECTOR muzzleOffset; PHD_VECTOR muzzleOffset;

View file

@ -24,23 +24,24 @@ typedef struct WEAPON_INFO
short sampleNum; short sampleNum;
byte explosiveDamage; byte explosiveDamage;
}; };
enum WeaponState {
constexpr auto WSTATE_AIM = 0; WSTATE_AIM =0,
constexpr auto WSTATE_DRAW = 1; WSTATE_DRAW = 1,
constexpr auto WSTATE_UW_AIM = 6; WSTATE_RECOIL = 2,
constexpr auto WSTATE_RECOIL = 2; WSTATE_UNAIM = 4,
constexpr auto WSTATE_UW_RECOIL = 8; WSTATE_UW_AIM = 6,
constexpr auto WSTATE_UNAIM = 4; WSTATE_UW_UNAIM = 7,
constexpr auto WSTATE_UW_UNAIM = 7; WSTATE_UW_RECOIL = 8
};
extern WEAPON_INFO Weapons[static_cast<int>(LARA_WEAPON_TYPE::NUM_WEAPONS)]; extern WEAPON_INFO Weapons[static_cast<int>(LARA_WEAPON_TYPE::NUM_WEAPONS)];
void SmashItem(short itemNum); void SmashItem(short itemNum);
int WeaponObject(int weaponType); GAME_OBJECT_ID WeaponObject(int weaponType);
void LaraGun(); void LaraGun();
short* GetAmmo(int weaponType); Ammo& GetAmmo(int weaponType);
void InitialiseNewWeapon(); void InitialiseNewWeapon();
int WeaponObjectMesh(int weaponType); GAME_OBJECT_ID WeaponObjectMesh(int weaponType);
void AimWeapon(WEAPON_INFO* winfo, LARA_ARM* arm); void AimWeapon(WEAPON_INFO* winfo, LARA_ARM* arm);
void HitTarget(ITEM_INFO* item, GAME_VECTOR* hitPos, int damage, int flag); void HitTarget(ITEM_INFO* item, GAME_VECTOR* hitPos, int damage, int flag);
FireWeaponType FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles); FireWeaponType FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles);

View file

@ -19,7 +19,7 @@ constexpr std::array<float, 28> FlareFlickerTableLow = { 0.7590,0.1880,0.0790,0.
using namespace T5M::Math::Random; using namespace T5M::Math::Random;
void FlareControl(short itemNumber) // (AF) (D) void FlareControl(short itemNumber)
{ {
ITEM_INFO* item = &g_Level.Items[itemNumber]; ITEM_INFO* item = &g_Level.Items[itemNumber];
@ -88,7 +88,7 @@ void FlareControl(short itemNumber) // (AF) (D)
item->data = (void*)age; item->data = (void*)age;
} }
void ready_flare() // (F) (D) void ready_flare()
{ {
Lara.gunStatus = LG_NO_ARMS; Lara.gunStatus = LG_NO_ARMS;
Lara.leftArm.zRot = 0; Lara.leftArm.zRot = 0;
@ -102,17 +102,17 @@ void ready_flare() // (F) (D)
Lara.target = NULL; Lara.target = NULL;
} }
void undraw_flare_meshes() // (F) (D) void undraw_flare_meshes()
{ {
Lara.meshPtrs[LM_LHAND] = Objects[ID_LARA_SKIN].meshIndex + LM_LHAND; Lara.meshPtrs[LM_LHAND] = Objects[ID_LARA_SKIN].meshIndex + LM_LHAND;
} }
void draw_flare_meshes() // (F) (D) void draw_flare_meshes()
{ {
Lara.meshPtrs[LM_LHAND] = Objects[ID_LARA_FLARE_ANIM].meshIndex + LM_LHAND; Lara.meshPtrs[LM_LHAND] = Objects[ID_LARA_FLARE_ANIM].meshIndex + LM_LHAND;
} }
void undraw_flare() // (F) (D) void undraw_flare()
{ {
Lara.flareControlLeft = true; Lara.flareControlLeft = true;
@ -225,7 +225,7 @@ void undraw_flare() // (F) (D)
set_flare_arm(Lara.leftArm.frameNumber); set_flare_arm(Lara.leftArm.frameNumber);
} }
void draw_flare() // (F) (D) void draw_flare()
{ {
short frame; short frame;
@ -275,7 +275,7 @@ void draw_flare() // (F) (D)
} }
} }
void set_flare_arm(int frame) // (F) (D) void set_flare_arm(int frame)
{ {
short anim = Objects[ID_LARA_FLARE_ANIM].animIndex; short anim = Objects[ID_LARA_FLARE_ANIM].animIndex;
@ -300,7 +300,7 @@ void set_flare_arm(int frame) // (F) (D)
Lara.leftArm.frameBase = g_Level.Anims[anim].framePtr; Lara.leftArm.frameBase = g_Level.Anims[anim].framePtr;
} }
void CreateFlare(short objectNum, int thrown) // (F) (D) void CreateFlare(short objectNum, int thrown)
{ {
short itemNum = CreateItem(); short itemNum = CreateItem();
if (itemNum != NO_ITEM) if (itemNum != NO_ITEM)
@ -383,7 +383,7 @@ void DrawFlareInAir(ITEM_INFO* item)
printf("DrawFlareInAir() not implemented !"); printf("DrawFlareInAir() not implemented !");
} }
void DoFlareInHand(int flare_age) // (AF) (D) void DoFlareInHand(int flare_age)
{ {
PHD_VECTOR pos; PHD_VECTOR pos;
@ -408,7 +408,7 @@ void DoFlareInHand(int flare_age) // (AF) (D)
} }
} }
int DoFlareLight(PHD_VECTOR* pos, int age)//49708, 49B6C (F) int DoFlareLight(PHD_VECTOR* pos, int age)
{ {
int x, y, z; int x, y, z;
int r, g, b; int r, g, b;

View file

@ -6,7 +6,7 @@
/*this file has all the lara_as/lara_col functions related to hanging*/ /*this file has all the lara_as/lara_col functions related to hanging*/
/*normal hanging and shimmying*/ /*normal hanging and shimmying*/
void lara_as_hang(ITEM_INFO* item, COLL_INFO* coll)//19A28, 19B5C (F) void lara_as_hang(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 10*/ /*state 10*/
/*collision: lara_col_hang*/ /*collision: lara_col_hang*/
@ -28,7 +28,7 @@ void lara_as_hang(ITEM_INFO* item, COLL_INFO* coll)//19A28, 19B5C (F)
Camera.targetElevation = -ANGLE(45.0f); Camera.targetElevation = -ANGLE(45.0f);
} }
void lara_col_hang(ITEM_INFO* item, COLL_INFO* coll)//19AC8, 19BFC (F) void lara_col_hang(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 10*/ /*state 10*/
/*state code: lara_as_hang*/ /*state code: lara_as_hang*/
@ -174,7 +174,7 @@ void lara_col_hang(ITEM_INFO* item, COLL_INFO* coll)//19AC8, 19BFC (F)
} }
} }
void lara_as_hangleft(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_as_hangleft(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 30*/ /*state 30*/
/*collision: lara_col_hangleft*/ /*collision: lara_col_hangleft*/
@ -186,7 +186,7 @@ void lara_as_hangleft(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
item->goalAnimState = LS_HANG; item->goalAnimState = LS_HANG;
} }
void lara_col_hangleft(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_col_hangleft(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 30*/ /*state 30*/
/*state code: lara_as_hangleft*/ /*state code: lara_as_hangleft*/
@ -196,7 +196,7 @@ void lara_col_hangleft(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
Lara.moveAngle = item->pos.yRot - ANGLE(90); Lara.moveAngle = item->pos.yRot - ANGLE(90);
} }
void lara_as_hangright(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_as_hangright(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 31*/ /*state 31*/
/*collision: lara_col_hangright*/ /*collision: lara_col_hangright*/
@ -208,7 +208,7 @@ void lara_as_hangright(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
item->goalAnimState = LS_HANG; item->goalAnimState = LS_HANG;
} }
void lara_col_hangright(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_col_hangright(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 31*/ /*state 31*/
/*state code: lara_as_hangright*/ /*state code: lara_as_hangright*/
@ -220,45 +220,49 @@ void lara_col_hangright(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
/*go around corners*/ /*go around corners*/
void lara_as_extcornerl(ITEM_INFO* item, COLL_INFO* coll)//1A1F0(<), 1A324(<) (F) void lara_as_extcornerl(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 107*/ /*state 107*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
Camera.laraNode = 8; Camera.laraNode = LM_TORSO;
Camera.targetElevation = ANGLE(33.0f); Camera.targetAngle = 0;
Camera.targetElevation = -ANGLE(33.0f);
SetCornerAnim(item, coll, ANGLE(90.0f), SetCornerAnim(item, coll, ANGLE(90.0f),
item->animNumber == LA_SHIMMY_LEFT_CORNER_OUTER_END || item->animNumber == LA_SHIMMY_LEFT_CORNER_OUTER_END ||
item->animNumber == LA_LADDER_LEFT_CORNER_OUTER_END); item->animNumber == LA_LADDER_LEFT_CORNER_OUTER_END);
} }
void lara_as_extcornerr(ITEM_INFO* item, COLL_INFO* coll)//1A244(<), 1A378(<) (F) void lara_as_extcornerr(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 108*/ /*state 108*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
Camera.laraNode = 8; Camera.laraNode = LM_TORSO;
Camera.targetElevation = ANGLE(33.0f); Camera.targetAngle = 0;
Camera.targetElevation = -ANGLE(33.0f);
SetCornerAnim(item, coll, -ANGLE(90.0f), SetCornerAnim(item, coll, -ANGLE(90.0f),
item->animNumber == LA_SHIMMY_RIGHT_CORNER_OUTER_END || item->animNumber == LA_SHIMMY_RIGHT_CORNER_OUTER_END ||
item->animNumber == LA_LADDER_RIGHT_CORNER_OUTER_END); item->animNumber == LA_LADDER_RIGHT_CORNER_OUTER_END);
} }
void lara_as_intcornerl(ITEM_INFO* item, COLL_INFO* coll)//1A298(<), 1A3CC(<) (F) void lara_as_intcornerl(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 109*/ /*state 109*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
Camera.laraNode = 8; Camera.targetAngle = 0;
Camera.targetElevation = ANGLE(33.0f); Camera.laraNode = LM_TORSO;
Camera.targetElevation = -ANGLE(33.0f);
SetCornerAnim(item, coll, -ANGLE(90.0f), SetCornerAnim(item, coll, -ANGLE(90.0f),
item->animNumber == LA_SHIMMY_LEFT_CORNER_INNER_END || item->animNumber == LA_SHIMMY_LEFT_CORNER_INNER_END ||
item->animNumber == LA_LADDER_LEFT_CORNER_INNER_END); item->animNumber == LA_LADDER_LEFT_CORNER_INNER_END);
} }
void lara_as_intcornerr(ITEM_INFO* item, COLL_INFO* coll)//1A2EC(<), 1A420(<) (F) void lara_as_intcornerr(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 110*/ /*state 110*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
Camera.laraNode = 8; Camera.laraNode = LM_TORSO;
Camera.targetElevation = ANGLE(33.0f); Camera.targetAngle = 0;
Camera.targetElevation = -ANGLE(33.0f);
SetCornerAnim(item, coll, ANGLE(90.0f), SetCornerAnim(item, coll, ANGLE(90.0f),
item->animNumber == LA_SHIMMY_RIGHT_CORNER_INNER_END || item->animNumber == LA_SHIMMY_RIGHT_CORNER_INNER_END ||
item->animNumber == LA_LADDER_RIGHT_CORNER_INNER_END); item->animNumber == LA_LADDER_RIGHT_CORNER_INNER_END);

View file

@ -75,7 +75,7 @@ void InitialiseLara(int restore)
if (gun == WEAPON_PISTOLS) if (gun == WEAPON_PISTOLS)
{ {
Lara.Weapons[WEAPON_PISTOLS].Present = true; Lara.Weapons[WEAPON_PISTOLS].Present = true;
Lara.Weapons[WEAPON_PISTOLS].Ammo[WEAPON_AMMO1] = -1; Lara.Weapons[WEAPON_PISTOLS].Ammo[WEAPON_AMMO1].setInfinite(true);
} }
else if (gun == WEAPON_HK) else if (gun == WEAPON_HK)
{ {
@ -102,7 +102,7 @@ void InitialiseLara(int restore)
Lara.wetcloth = CLOTH_MISSING; Lara.wetcloth = CLOTH_MISSING;
} }
void LaraInitialiseMeshes() // (AF) (D) void LaraInitialiseMeshes()
{ {
for (int i = 0; i < NUM_LARA_MESHES; i++) for (int i = 0; i < NUM_LARA_MESHES; i++)
{ {
@ -135,7 +135,7 @@ void LaraInitialiseMeshes() // (AF) (D)
Lara.leftArm.lock = false; Lara.leftArm.lock = false;
} }
void InitialiseLaraAnims(ITEM_INFO* item) // (F) (D) void InitialiseLaraAnims(ITEM_INFO* item)
{ {
if (g_Level.Rooms[item->roomNumber].flags & ENV_FLAG_WATER) if (g_Level.Rooms[item->roomNumber].flags & ENV_FLAG_WATER)
{ {
@ -156,7 +156,7 @@ void InitialiseLaraAnims(ITEM_INFO* item) // (F) (D)
} }
} }
void InitialiseLaraLoad(short itemNum) // (F) (D) void InitialiseLaraLoad(short itemNum)
{ {
Lara.itemNumber = itemNum; Lara.itemNumber = itemNum;
LaraItem = &g_Level.Items[itemNum]; LaraItem = &g_Level.Items[itemNum];

View file

@ -10,7 +10,7 @@ using namespace T5M::Floordata;
/*this file has all the related functions to monkeyswinging*/ /*this file has all the related functions to monkeyswinging*/
/*monkeyswing state handling functions*/ /*monkeyswing state handling functions*/
void lara_as_hang2(ITEM_INFO* item, COLL_INFO* coll)//1630C(<), 16440(<) (F) void lara_as_hang2(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 75*/ /*state 75*/
/*collision: lara_col_hang2*/ /*collision: lara_col_hang2*/
@ -39,7 +39,7 @@ void lara_as_hang2(ITEM_INFO* item, COLL_INFO* coll)//1630C(<), 16440(<) (F)
LookUpDown(); LookUpDown();
} }
void lara_col_hang2(ITEM_INFO* item, COLL_INFO* coll)//163DC, 16510 (F) void lara_col_hang2(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 75*/ /*state 75*/
/*state code: lara_as_hang2*/ /*state code: lara_as_hang2*/
@ -148,7 +148,7 @@ void lara_col_hang2(ITEM_INFO* item, COLL_INFO* coll)//163DC, 16510 (F)
} }
} }
void lara_as_monkeyswing(ITEM_INFO* item, COLL_INFO* coll)//1670C, 16840 (F) void lara_as_monkeyswing(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 76*/ /*state 76*/
/*collision: lara_col_monkeyswing*/ /*collision: lara_col_monkeyswing*/
@ -188,7 +188,7 @@ void lara_as_monkeyswing(ITEM_INFO* item, COLL_INFO* coll)//1670C, 16840 (F)
} }
} }
void lara_col_monkeyswing(ITEM_INFO* item, COLL_INFO* coll)//16828, 1695C (F) void lara_col_monkeyswing(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 76*/ /*state 76*/
/*state code: lara_as_monkeyswing*/ /*state code: lara_as_monkeyswing*/
@ -242,7 +242,7 @@ void lara_col_monkeyswing(ITEM_INFO* item, COLL_INFO* coll)//16828, 1695C (F)
} }
} }
void lara_as_monkeyr(ITEM_INFO* item, COLL_INFO* coll)//16B24(<), 16C58(<) (F) void lara_as_monkeyr(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 78*/ /*state 78*/
/*collision: lara_col_monkeyr*/ /*collision: lara_col_monkeyr*/
@ -270,7 +270,7 @@ void lara_as_monkeyr(ITEM_INFO* item, COLL_INFO* coll)//16B24(<), 16C58(<) (F)
} }
} }
void lara_col_monkeyr(ITEM_INFO* item, COLL_INFO* coll)//16B9C(<), 16CD0(<) (F) void lara_col_monkeyr(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 78*/ /*state 78*/
/*state code: lara_as_monkeyr*/ /*state code: lara_as_monkeyr*/
@ -294,7 +294,7 @@ void lara_col_monkeyr(ITEM_INFO* item, COLL_INFO* coll)//16B9C(<), 16CD0(<) (F)
} }
} }
void lara_as_monkeyl(ITEM_INFO* item, COLL_INFO* coll)//16A0C(<), 16B40(<) (F) void lara_as_monkeyl(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 77*/ /*state 77*/
/*collision: lara_col_monkeyl*/ /*collision: lara_col_monkeyl*/
@ -323,7 +323,7 @@ void lara_as_monkeyl(ITEM_INFO* item, COLL_INFO* coll)//16A0C(<), 16B40(<) (F)
} }
} }
void lara_col_monkeyl(ITEM_INFO* item, COLL_INFO* coll)//16A80(<), 16BB4(<) (F) void lara_col_monkeyl(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 77*/ /*state 77*/
/*state code: lara_as_monkeyl*/ /*state code: lara_as_monkeyl*/
@ -347,7 +347,7 @@ void lara_col_monkeyl(ITEM_INFO* item, COLL_INFO* coll)//16A80(<), 16BB4(<) (F)
} }
} }
void lara_as_monkey180(ITEM_INFO* item, COLL_INFO* coll)//16DB8(<), 16EEC(<) (F) void lara_as_monkey180(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 79*/ /*state 79*/
/*collision: lara_col_monkey180*/ /*collision: lara_col_monkey180*/
@ -356,14 +356,14 @@ void lara_as_monkey180(ITEM_INFO* item, COLL_INFO* coll)//16DB8(<), 16EEC(<) (F)
item->goalAnimState = LS_MONKEYSWING_IDLE; item->goalAnimState = LS_MONKEYSWING_IDLE;
} }
void lara_col_monkey180(ITEM_INFO* item, COLL_INFO* coll)//16DDC, 16F10 (F) void lara_col_monkey180(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 79*/ /*state 79*/
/*state code: lara_as_monkey180*/ /*state code: lara_as_monkey180*/
lara_col_monkeyswing(item, coll); lara_col_monkeyswing(item, coll);
} }
void lara_as_hangturnr(ITEM_INFO* item, COLL_INFO* coll)//16D64(<), 16E98(<) (F) void lara_as_hangturnr(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 83*/ /*state 83*/
/*collision: lara_col_hangturnlr*/ /*collision: lara_col_hangturnlr*/
@ -382,7 +382,7 @@ void lara_as_hangturnr(ITEM_INFO* item, COLL_INFO* coll)//16D64(<), 16E98(<) (F)
item->goalAnimState = LS_MONKEYSWING_IDLE; item->goalAnimState = LS_MONKEYSWING_IDLE;
} }
//both lara_as_hangturnl and lara_as_hangturnr states use lara_col_hangturnlr for collision// //both lara_as_hangturnl and lara_as_hangturnr states use lara_col_hangturnlr for collision//
void lara_as_hangturnl(ITEM_INFO* item, COLL_INFO* coll)//16C40(<), 16D74(<) (F) void lara_as_hangturnl(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 82*/ /*state 82*/
/*collision: lara_col_hangturnlr*/ /*collision: lara_col_hangturnlr*/
@ -401,7 +401,7 @@ void lara_as_hangturnl(ITEM_INFO* item, COLL_INFO* coll)//16C40(<), 16D74(<) (F)
item->goalAnimState = LS_MONKEYSWING_IDLE; item->goalAnimState = LS_MONKEYSWING_IDLE;
} }
void lara_col_hangturnlr(ITEM_INFO* item, COLL_INFO* coll)//16C94(<), 16DC8(<) (F) void lara_col_hangturnlr(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 82 and 83*/ /*state 82 and 83*/
/*state code: lara_as_hangturnr(83), lara_as_hangturnl(82)*/ /*state code: lara_as_hangturnr(83), lara_as_hangturnl(82)*/
@ -428,7 +428,7 @@ void lara_col_hangturnlr(ITEM_INFO* item, COLL_INFO* coll)//16C94(<), 16DC8(<) (
/*tests and other functions*/ /*tests and other functions*/
short TestMonkeyRight(ITEM_INFO* item, COLL_INFO* coll)//161EC(<), 16320(<) (F) short TestMonkeyRight(ITEM_INFO* item, COLL_INFO* coll)
{ {
short oct; short oct;
@ -464,7 +464,7 @@ short TestMonkeyRight(ITEM_INFO* item, COLL_INFO* coll)//161EC(<), 16320(<) (F)
return 0; return 0;
} }
short TestMonkeyLeft(ITEM_INFO* item, COLL_INFO* coll)//160CC(<), 16200(<) (F) short TestMonkeyLeft(ITEM_INFO* item, COLL_INFO* coll)
{ {
short oct; short oct;
@ -501,7 +501,7 @@ short TestMonkeyLeft(ITEM_INFO* item, COLL_INFO* coll)//160CC(<), 16200(<) (F)
return 0; return 0;
} }
void MonkeySwingSnap(ITEM_INFO* item, COLL_INFO* coll)//1605C(<), 16190(<) (F) void MonkeySwingSnap(ITEM_INFO* item, COLL_INFO* coll)
{ {
ROOM_VECTOR location = GetRoom(item->location, item->pos.xPos, item->pos.yPos, item->pos.zPos); ROOM_VECTOR location = GetRoom(item->location, item->pos.xPos, item->pos.yPos, item->pos.zPos);
int height = GetCeilingHeight(location, item->pos.xPos, item->pos.zPos).value_or(NO_HEIGHT); int height = GetCeilingHeight(location, item->pos.xPos, item->pos.zPos).value_or(NO_HEIGHT);
@ -509,7 +509,7 @@ void MonkeySwingSnap(ITEM_INFO* item, COLL_INFO* coll)//1605C(<), 16190(<) (F)
item->pos.yPos = height + 704; item->pos.yPos = height + 704;
} }
void MonkeySwingFall(ITEM_INFO* item)//16004(<), 16138(<) (F) void MonkeySwingFall(ITEM_INFO* item)
{ {
item->goalAnimState = LS_JUMP_UP; item->goalAnimState = LS_JUMP_UP;
item->currentAnimState = LS_JUMP_UP; item->currentAnimState = LS_JUMP_UP;

View file

@ -9,7 +9,7 @@
/*This file has "all" lara_as/lara_col functions where Lara is interacting with an object.*/ /*This file has "all" lara_as/lara_col functions where Lara is interacting with an object.*/
/*pickups*/ /*pickups*/
void lara_as_pickup(ITEM_INFO* item, COLL_INFO* coll)//1AB00(<), 1AC34(<) (F) void lara_as_pickup(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 39, 98*/ /*state 39, 98*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
@ -21,7 +21,7 @@ void lara_as_pickup(ITEM_INFO* item, COLL_INFO* coll)//1AB00(<), 1AC34(<) (F)
Camera.targetDistance = SECTOR(1); Camera.targetDistance = SECTOR(1);
} }
void lara_as_pickupflare(ITEM_INFO* item, COLL_INFO* coll)//1AB5C(<), 1AC90(<) (F) void lara_as_pickupflare(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 67*/ /*state 67*/
/*collison: lara_default_col*/ /*collison: lara_default_col*/
@ -37,7 +37,7 @@ void lara_as_pickupflare(ITEM_INFO* item, COLL_INFO* coll)//1AB5C(<), 1AC90(<) (
/*end pickups*/ /*end pickups*/
/*-*/ /*-*/
/*switches*/ /*switches*/
void lara_as_switchon(ITEM_INFO* item, COLL_INFO* coll)//1ABEC(<), 1AD20(<) (F) void lara_as_switchon(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*states 40, 126*/ /*states 40, 126*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
@ -50,7 +50,7 @@ void lara_as_switchon(ITEM_INFO* item, COLL_INFO* coll)//1ABEC(<), 1AD20(<) (F)
Camera.speed = 6; Camera.speed = 6;
} }
void lara_as_switchoff(ITEM_INFO* item, COLL_INFO* coll)//1AC54(<), 1AD88(<) (F) void lara_as_switchoff(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 41*/ /*state 41*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
@ -63,7 +63,7 @@ void lara_as_switchoff(ITEM_INFO* item, COLL_INFO* coll)//1AC54(<), 1AD88(<) (F)
Camera.speed = 6; Camera.speed = 6;
} }
void lara_col_turnswitch(ITEM_INFO* item, COLL_INFO* coll)//1B1B4(<), 1B2E8(<) (F) void lara_col_turnswitch(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 95*/ /*state 95*/
/*state code: lara_as_controlledl*/ /*state code: lara_as_controlledl*/
@ -89,7 +89,7 @@ void lara_col_turnswitch(ITEM_INFO* item, COLL_INFO* coll)//1B1B4(<), 1B2E8(<) (
/*end switches*/ /*end switches*/
/*-*/ /*-*/
/*puzzles and keys*/ /*puzzles and keys*/
void lara_as_usekey(ITEM_INFO* item, COLL_INFO* coll)//1ACBC(<), 1ADF0(<) (F) void lara_as_usekey(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 42*/ /*state 42*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
@ -101,7 +101,7 @@ void lara_as_usekey(ITEM_INFO* item, COLL_INFO* coll)//1ACBC(<), 1ADF0(<) (F)
Camera.targetDistance = SECTOR(1); Camera.targetDistance = SECTOR(1);
} }
void lara_as_usepuzzle(ITEM_INFO* item, COLL_INFO* coll)//1AD18(<), 1AE4C(<) (F) void lara_as_usepuzzle(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 43*/ /*state 43*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
@ -127,7 +127,7 @@ void lara_as_usepuzzle(ITEM_INFO* item, COLL_INFO* coll)//1AD18(<), 1AE4C(<) (F)
/*end puzzles and keys*/ /*end puzzles and keys*/
/*-*/ /*-*/
/*pushables*/ /*pushables*/
void lara_as_pushblock(ITEM_INFO* item, COLL_INFO* coll)//1AA04(<), 1AB38(<) (F) void lara_as_pushblock(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 36*/ /*state 36*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
@ -139,7 +139,7 @@ void lara_as_pushblock(ITEM_INFO* item, COLL_INFO* coll)//1AA04(<), 1AB38(<) (F)
Camera.targetElevation = -ANGLE(25.0f); Camera.targetElevation = -ANGLE(25.0f);
} }
void lara_as_pullblock(ITEM_INFO* item, COLL_INFO* coll)//1AA60(<), 1AB94(<) (F) void lara_as_pullblock(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 37*/ /*state 37*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
@ -151,7 +151,7 @@ void lara_as_pullblock(ITEM_INFO* item, COLL_INFO* coll)//1AA60(<), 1AB94(<) (F)
Camera.targetElevation = -ANGLE(25.0f); Camera.targetElevation = -ANGLE(25.0f);
} }
void lara_as_ppready(ITEM_INFO* item, COLL_INFO* coll)//1AABC(<), 1ABF0(<) (F) void lara_as_ppready(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 38*/ /*state 38*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
@ -164,7 +164,7 @@ void lara_as_ppready(ITEM_INFO* item, COLL_INFO* coll)//1AABC(<), 1ABF0(<) (F)
/*end pushables*/ /*end pushables*/
/*-*/ /*-*/
/*pulley*/ /*pulley*/
void lara_as_pulley(ITEM_INFO* item, COLL_INFO* coll)//1B288, 1B3BC (F) void lara_as_pulley(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 104*/ /*state 104*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
@ -229,7 +229,7 @@ void lara_as_parallelbars(ITEM_INFO* item, COLL_INFO* coll)
} }
} }
void lara_as_pbleapoff(ITEM_INFO* item, COLL_INFO* coll)//1D244, 1D3D8 (F) void lara_as_pbleapoff(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 129*/ /*state 129*/
/*collision: lara_default_col*/ /*collision: lara_default_col*/
@ -425,7 +425,7 @@ void lara_as_trfall(ITEM_INFO* item, COLL_INFO* coll)
/*end tightropes*/ /*end tightropes*/
/*-*/ /*-*/
/*ropes*/ /*ropes*/
void lara_as_ropel(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_as_ropel(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 90*/ /*state 90*/
/*collision: lara_void_func*/ /*collision: lara_void_func*/
@ -446,7 +446,7 @@ void lara_as_ropel(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
} }
} }
void lara_as_roper(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_as_roper(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (TrInput & IN_ACTION) if (TrInput & IN_ACTION)
{ {
@ -465,7 +465,7 @@ void lara_as_roper(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
} }
} }
void lara_as_rope(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_as_rope(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*states 111, 114, 115*/ /*states 111, 114, 115*/
/*collison: lara_col_rope(111), lara_col_ropefwd(114, 115)*/ /*collison: lara_col_rope(111), lara_col_ropefwd(114, 115)*/
@ -476,7 +476,7 @@ void lara_as_rope(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
LookUpDown(); LookUpDown();
} }
void lara_col_rope(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_col_rope(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state: 111*/ /*state: 111*/
/*state code: lara_as_rope*/ /*state code: lara_as_rope*/
@ -517,7 +517,7 @@ void lara_col_rope(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
} }
} }
void lara_col_ropefwd(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_col_ropefwd(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*states 114, 115*/ /*states 114, 115*/
/*state code: lara_as_rope(for both)*/ /*state code: lara_as_rope(for both)*/
@ -577,7 +577,7 @@ void lara_col_ropefwd(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
} }
} }
void lara_as_climbrope(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_as_climbrope(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 112*/ /*state 112*/
/*collision: lara_void_func*/ /*collision: lara_void_func*/
@ -600,7 +600,7 @@ void lara_as_climbrope(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
} }
} }
void lara_as_climbroped(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void lara_as_climbroped(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 113*/ /*state 113*/
/*collision: lara_void_func*/ /*collision: lara_void_func*/
@ -609,7 +609,7 @@ void lara_as_climbroped(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
/*end ropes*/ /*end ropes*/
/*-*/ /*-*/
/*poles*/ /*poles*/
void lara_col_polestat(ITEM_INFO* item, COLL_INFO* coll)//16DFC, 16F30 (F) void lara_col_polestat(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 99*/ /*state 99*/
/*state code: lara_as_null*/ /*state code: lara_as_null*/
@ -684,7 +684,7 @@ void lara_col_polestat(ITEM_INFO* item, COLL_INFO* coll)//16DFC, 16F30 (F)
} }
} }
void lara_col_poleup(ITEM_INFO* item, COLL_INFO* coll)//170D8(<), 1720C(<) (F) void lara_col_poleup(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state: 100*/ /*state: 100*/
/*state code: lara_as_null*/ /*state code: lara_as_null*/
@ -705,7 +705,7 @@ void lara_col_poleup(ITEM_INFO* item, COLL_INFO* coll)//170D8(<), 1720C(<) (F)
item->goalAnimState = LS_POLE_IDLE; item->goalAnimState = LS_POLE_IDLE;
} }
void lara_col_poledown(ITEM_INFO* item, COLL_INFO* coll)//171A0, 172D4 (F) void lara_col_poledown(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state: 101*/ /*state: 101*/
/*state code: lara_as_null*/ /*state code: lara_as_null*/
@ -770,7 +770,7 @@ void lara_col_poledown(ITEM_INFO* item, COLL_INFO* coll)//171A0, 172D4 (F)
item->pos.yPos += item->itemFlags[2] / 256; item->pos.yPos += item->itemFlags[2] / 256;
} }
void lara_as_poleleft(ITEM_INFO* item, COLL_INFO* coll)//17020(<), 17154(<) (F) void lara_as_poleleft(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 102*/ /*state 102*/
/*collision: lara_void_func*/ /*collision: lara_void_func*/
@ -782,7 +782,7 @@ void lara_as_poleleft(ITEM_INFO* item, COLL_INFO* coll)//17020(<), 17154(<) (F)
item->pos.yRot += 256; item->pos.yRot += 256;
} }
void lara_as_poleright(ITEM_INFO* item, COLL_INFO* coll)//1707C(<), 171B0(<) (F) void lara_as_poleright(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state: 103*/ /*state: 103*/
/*collision: lara_void_func*/ /*collision: lara_void_func*/
@ -796,7 +796,7 @@ void lara_as_poleright(ITEM_INFO* item, COLL_INFO* coll)//1707C(<), 171B0(<) (F)
/*end poles*/ /*end poles*/
/*-*/ /*-*/
/*deathslide*/ /*deathslide*/
void lara_as_deathslide(ITEM_INFO* item, COLL_INFO* coll)//1B038, 1B16C (F) void lara_as_deathslide(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 70*/ /*state 70*/
/*collision: lara_void_func*/ /*collision: lara_void_func*/

View file

@ -35,8 +35,8 @@ extern GameFlow* g_GameFlow;
void FireHarpoon() void FireHarpoon()
{ {
short* ammos = GetAmmo(WEAPON_CROSSBOW); Ammo& ammos = GetAmmo(WEAPON_CROSSBOW);
if (*ammos != 0) if (ammos.getCount() != 0)
{ {
Lara.hasFired = true; Lara.hasFired = true;
@ -44,8 +44,8 @@ void FireHarpoon()
short itemNumber = CreateItem(); short itemNumber = CreateItem();
if (itemNumber != NO_ITEM) if (itemNumber != NO_ITEM)
{ {
if (*ammos != -1) if (!ammos.hasInfinite())
(*ammos)--; (ammos)--;
GAME_VECTOR pos; GAME_VECTOR pos;
ITEM_INFO* item = &g_Level.Items[itemNumber]; ITEM_INFO* item = &g_Level.Items[itemNumber];
@ -292,8 +292,8 @@ void FireGrenade()
int y = 0; int y = 0;
int z = 0; int z = 0;
short* ammo = GetAmmo(WEAPON_GRENADE_LAUNCHER); Ammo& ammo = GetAmmo(WEAPON_GRENADE_LAUNCHER);
if (*ammo != 0) if (ammo != 0)
{ {
Lara.hasFired = true; Lara.hasFired = true;
@ -365,8 +365,8 @@ void FireGrenade()
AddActiveItem(itemNumber); AddActiveItem(itemNumber);
if (*ammo != -1) if (!ammo.hasInfinite())
(*ammo)--; (ammo)--;
item->itemFlags[0] = Lara.Weapons[WEAPON_GRENADE_LAUNCHER].SelectedAmmo; item->itemFlags[0] = Lara.Weapons[WEAPON_GRENADE_LAUNCHER].SelectedAmmo;
@ -1516,8 +1516,8 @@ void RifleHandler(int weaponType)
void FireCrossbow(PHD_3DPOS* pos) void FireCrossbow(PHD_3DPOS* pos)
{ {
short* ammos = GetAmmo(WEAPON_CROSSBOW); Ammo& ammos = GetAmmo(WEAPON_CROSSBOW);
if (*ammos != 0) if (ammos)
{ {
Lara.hasFired = true; Lara.hasFired = true;
@ -1542,8 +1542,8 @@ void FireCrossbow(PHD_3DPOS* pos)
} }
else else
{ {
if (*ammos != -1) if (!ammos.hasInfinite())
(*ammos)--; (ammos)--;
PHD_VECTOR jointPos; PHD_VECTOR jointPos;
jointPos.x = 0; jointPos.x = 0;
@ -1600,9 +1600,8 @@ void FireCrossbow(PHD_3DPOS* pos)
void FireRocket() void FireRocket()
{ {
short* ammos = GetAmmo(WEAPON_ROCKET_LAUNCHER); Ammo& ammos = GetAmmo(WEAPON_ROCKET_LAUNCHER);
if (*ammos != 0) if (ammos) {
{
Lara.hasFired = true; Lara.hasFired = true;
short itemNumber = CreateItem(); short itemNumber = CreateItem();
@ -1612,8 +1611,8 @@ void FireRocket()
item->objectNumber = ID_ROCKET; item->objectNumber = ID_ROCKET;
item->roomNumber = LaraItem->roomNumber; item->roomNumber = LaraItem->roomNumber;
if (*ammos != -1) if (!ammos.hasInfinite())
(*ammos)--; (ammos)--;
PHD_VECTOR jointPos; PHD_VECTOR jointPos;
jointPos.x = 0; jointPos.x = 0;

View file

@ -9,7 +9,7 @@ short OldAngle = 1;
/*this file has all the related functions to sliding*/ /*this file has all the related functions to sliding*/
/*tests and others*/ /*tests and others*/
int TestLaraSlide(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) int TestLaraSlide(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (abs(coll->tiltX) <= 2 && abs(coll->tiltZ) <= 2) if (abs(coll->tiltX) <= 2 && abs(coll->tiltZ) <= 2)
return 0; return 0;
@ -58,7 +58,7 @@ int TestLaraSlide(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
return 1; return 1;
} }
void lara_slide_slope(ITEM_INFO* item, COLL_INFO* coll)//127BC, 1286C (F) void lara_slide_slope(ITEM_INFO* item, COLL_INFO* coll)
{ {
coll->badPos = NO_BAD_POS; coll->badPos = NO_BAD_POS;
coll->badNeg = -512; coll->badNeg = -512;
@ -115,7 +115,7 @@ void lara_slide_slope(ITEM_INFO* item, COLL_INFO* coll)//127BC, 1286C (F)
} }
} }
void LaraSlideEdgeJump(ITEM_INFO* item, COLL_INFO* coll)//12B18, 12BC8 (F) void LaraSlideEdgeJump(ITEM_INFO* item, COLL_INFO* coll)
{ {
ShiftItem(item, coll); ShiftItem(item, coll);
@ -152,7 +152,7 @@ void LaraSlideEdgeJump(ITEM_INFO* item, COLL_INFO* coll)//12B18, 12BC8 (F)
/*end tests and others*/ /*end tests and others*/
/*-*/ /*-*/
/*Lara state code*/ /*Lara state code*/
void lara_as_slide(ITEM_INFO* item, COLL_INFO* coll)//1A824(<), 1A958(<) (F) void lara_as_slide(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 24*/ /*state 24*/
/*collision: lara_col_slide*/ /*collision: lara_col_slide*/
@ -161,7 +161,7 @@ void lara_as_slide(ITEM_INFO* item, COLL_INFO* coll)//1A824(<), 1A958(<) (F)
item->goalAnimState = LS_JUMP_FORWARD; item->goalAnimState = LS_JUMP_FORWARD;
} }
void lara_col_slide(ITEM_INFO* item, COLL_INFO* coll)//1C108(<), 1C23C(<) (F) void lara_col_slide(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 24*/ /*state 24*/
/*state code: lara_as_slide*/ /*state code: lara_as_slide*/
@ -169,7 +169,7 @@ void lara_col_slide(ITEM_INFO* item, COLL_INFO* coll)//1C108(<), 1C23C(<) (F)
lara_slide_slope(item, coll); lara_slide_slope(item, coll);
} }
void lara_as_slideback(ITEM_INFO* item, COLL_INFO* coll)//1A9E0(<), 1AB14(<) (F) void lara_as_slideback(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 32*/ /*state 32*/
/*collision: lara_col_slideback*/ /*collision: lara_col_slideback*/
@ -179,7 +179,7 @@ void lara_as_slideback(ITEM_INFO* item, COLL_INFO* coll)//1A9E0(<), 1AB14(<) (F)
} }
} }
void lara_col_slideback(ITEM_INFO* item, COLL_INFO* coll)//1C284(<), 1C3B8(<) (F) void lara_col_slideback(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 32*/ /*state 32*/
/*state code: lara_as_slideback*/ /*state code: lara_as_slideback*/

View file

@ -827,11 +827,97 @@ struct HolsterInfo {
HOLSTER_SLOT rightHolster; HOLSTER_SLOT rightHolster;
HOLSTER_SLOT backHolster; HOLSTER_SLOT backHolster;
}; };
struct Ammo {
using CountType = uint16_t;
private:
CountType count;
bool isInfinite;
public:
Ammo& operator --() {
--count;
return *this;
}
Ammo operator --(int) {
Ammo tmp = *this;
--*this;
return tmp;
}
Ammo& operator ++() {
++count;
return *this;
}
Ammo operator ++(int) {
Ammo tmp = *this;
++*this;
return tmp;
}
Ammo& operator =(size_t val) {
count = clamp(val);
return *this;
}
bool operator ==(size_t val) {
return count == clamp(val);
}
Ammo& operator =(Ammo& rhs) {
count = rhs.count;
isInfinite = rhs.count;
return *this;
}
Ammo operator +(size_t val) {
Ammo tmp = *this;
tmp += val;
return tmp;
}
Ammo operator -(size_t val) {
Ammo tmp = *this;
tmp -= val;
return tmp;
}
Ammo& operator +=(size_t val) {
int tmp = this->count + val;
this->count = clamp(tmp);
return *this;
}
Ammo& operator -=(size_t val) {
int tmp = this->count - val;
this->count = clamp(tmp);
return *this;
}
operator bool() {
return isInfinite || (count > 0);
}
static CountType clamp(int val) {
return std::clamp(val, 0, static_cast<int>(std::numeric_limits<CountType>::max()));
}
bool hasInfinite() const {
return isInfinite;
}
CountType getCount() const {
return count;
}
void setInfinite(bool infinite) {
isInfinite = infinite;
}
};
typedef struct CarriedWeaponInfo typedef struct CarriedWeaponInfo
{ {
bool Present; bool Present;
short Ammo[MAX_AMMOTYPE]; Ammo Ammo[MAX_AMMOTYPE];
int SelectedAmmo; // WeaponAmmoType_enum int SelectedAmmo; // WeaponAmmoType_enum
bool HasLasersight; bool HasLasersight;
bool HasSilencer; bool HasSilencer;

View file

@ -29,25 +29,25 @@ void lara_col_surftread(ITEM_INFO* item, COLL_INFO* coll)
LaraSurfaceCollision(item, coll); LaraSurfaceCollision(item, coll);
} }
void lara_col_surfright(ITEM_INFO* item, COLL_INFO* coll)//4DD90(<), 4E1F4(<) (F) void lara_col_surfright(ITEM_INFO* item, COLL_INFO* coll)
{ {
Lara.moveAngle = item->pos.yRot + ANGLE(90); Lara.moveAngle = item->pos.yRot + ANGLE(90);
LaraSurfaceCollision(item, coll); LaraSurfaceCollision(item, coll);
} }
void lara_col_surfleft(ITEM_INFO* item, COLL_INFO* coll)//4DD64(<), 4E1C8(<) (F) void lara_col_surfleft(ITEM_INFO* item, COLL_INFO* coll)
{ {
Lara.moveAngle = item->pos.yRot - ANGLE(90); Lara.moveAngle = item->pos.yRot - ANGLE(90);
LaraSurfaceCollision(item, coll); LaraSurfaceCollision(item, coll);
} }
void lara_col_surfback(ITEM_INFO* item, COLL_INFO* coll)//4DD38(<), 4E19C(<) (F) void lara_col_surfback(ITEM_INFO* item, COLL_INFO* coll)
{ {
Lara.moveAngle = item->pos.yRot + ANGLE(180); Lara.moveAngle = item->pos.yRot + ANGLE(180);
LaraSurfaceCollision(item, coll); LaraSurfaceCollision(item, coll);
} }
void lara_col_surfswim(ITEM_INFO* item, COLL_INFO* coll)//4DCE8(<), 4E14C(<) (F) void lara_col_surfswim(ITEM_INFO* item, COLL_INFO* coll)
{ {
coll->badNeg = -384; coll->badNeg = -384;
Lara.moveAngle = item->pos.yRot; Lara.moveAngle = item->pos.yRot;
@ -56,7 +56,7 @@ void lara_col_surfswim(ITEM_INFO* item, COLL_INFO* coll)//4DCE8(<), 4E14C(<) (F)
LaraTestLadderClimbOut(item, coll); LaraTestLadderClimbOut(item, coll);
} }
void lara_as_surftread(ITEM_INFO* item, COLL_INFO* coll)//4DBA0, 4E004 (F) void lara_as_surftread(ITEM_INFO* item, COLL_INFO* coll)
{ {
item->fallspeed -= 4; item->fallspeed -= 4;
if (item->fallspeed < 0) if (item->fallspeed < 0)
@ -113,7 +113,7 @@ void lara_as_surftread(ITEM_INFO* item, COLL_INFO* coll)//4DBA0, 4E004 (F)
} }
} }
void lara_as_surfright(ITEM_INFO* item, COLL_INFO* coll)//4DAF8, 4DF5C (F) void lara_as_surfright(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (item->hitPoints <= 0) if (item->hitPoints <= 0)
{ {
@ -142,7 +142,7 @@ void lara_as_surfright(ITEM_INFO* item, COLL_INFO* coll)//4DAF8, 4DF5C (F)
item->fallspeed = 60; item->fallspeed = 60;
} }
void lara_as_surfleft(ITEM_INFO* item, COLL_INFO* coll)//4DA50(<), 4DEB4(<) (F) void lara_as_surfleft(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (item->hitPoints <= 0) if (item->hitPoints <= 0)
{ {
@ -171,7 +171,7 @@ void lara_as_surfleft(ITEM_INFO* item, COLL_INFO* coll)//4DA50(<), 4DEB4(<) (F)
item->fallspeed = 60; item->fallspeed = 60;
} }
void lara_as_surfback(ITEM_INFO* item, COLL_INFO* coll)//4D9A8(<), 4DE0C(<) (F) void lara_as_surfback(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (item->hitPoints <= 0) if (item->hitPoints <= 0)
{ {
@ -200,7 +200,7 @@ void lara_as_surfback(ITEM_INFO* item, COLL_INFO* coll)//4D9A8(<), 4DE0C(<) (F)
item->fallspeed = 60; item->fallspeed = 60;
} }
void lara_as_surfswim(ITEM_INFO* item, COLL_INFO* coll)//4D8E4(<), 4DD48(<) (F) void lara_as_surfswim(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (item->hitPoints <= 0) if (item->hitPoints <= 0)
{ {
@ -229,7 +229,7 @@ void lara_as_surfswim(ITEM_INFO* item, COLL_INFO* coll)//4D8E4(<), 4DD48(<) (F)
item->fallspeed = 60; item->fallspeed = 60;
} }
void LaraSurfaceCollision(ITEM_INFO* item, COLL_INFO* coll)//4D4F0(<), 4D954(<) (F) void LaraSurfaceCollision(ITEM_INFO* item, COLL_INFO* coll)
{ {
coll->facing = Lara.moveAngle; coll->facing = Lara.moveAngle;
@ -269,7 +269,7 @@ void LaraSurfaceCollision(ITEM_INFO* item, COLL_INFO* coll)//4D4F0(<), 4D954(<)
} }
} }
int LaraTestWaterClimbOut(ITEM_INFO* item, COLL_INFO* coll)//4D22C, 4D690 int LaraTestWaterClimbOut(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (coll->collType != CT_FRONT || !(TrInput & IN_ACTION)) if (coll->collType != CT_FRONT || !(TrInput & IN_ACTION))
return 0; return 0;
@ -388,7 +388,7 @@ int LaraTestWaterClimbOut(ITEM_INFO* item, COLL_INFO* coll)//4D22C, 4D690
return 1; return 1;
} }
int LaraTestWaterStepOut(ITEM_INFO* item, COLL_INFO* coll)//4D100, 4D564 (F) int LaraTestWaterStepOut(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (coll->collType == CT_FRONT if (coll->collType == CT_FRONT
|| coll->midType == BIG_SLOPE || coll->midType == BIG_SLOPE
@ -490,6 +490,7 @@ int LaraTestLadderClimbOut(ITEM_INFO* item, COLL_INFO* coll) // NEW function for
AnimateLara(item); AnimateLara(item);
item->pos.yRot = rot; item->pos.yRot = rot;
item->pos.yPos -= 10;//otherwise she falls back into the water
Lara.gunStatus = LG_HANDS_BUSY; Lara.gunStatus = LG_HANDS_BUSY;
item->pos.zRot = 0; item->pos.zRot = 0;
item->pos.xRot = 0; item->pos.xRot = 0;
@ -501,7 +502,7 @@ int LaraTestLadderClimbOut(ITEM_INFO* item, COLL_INFO* coll) // NEW function for
return 1; return 1;
} }
void lara_as_waterout(ITEM_INFO* item, COLL_INFO* coll)//1AEE4(<), 1B018(<) (F) void lara_as_waterout(ITEM_INFO* item, COLL_INFO* coll)
{ {
coll->enableBaddiePush = false; coll->enableBaddiePush = false;
coll->enableSpaz = false; coll->enableSpaz = false;

View file

@ -26,7 +26,7 @@ typedef struct SUBSUIT_INFO
SUBSUIT_INFO Subsuit; SUBSUIT_INFO Subsuit;
byte SubHitCount = 0; byte SubHitCount = 0;
void LaraWaterCurrent(COLL_INFO* coll) // (F) (D) void LaraWaterCurrent(COLL_INFO* coll)
{ {
if (Lara.currentActive) if (Lara.currentActive)
{ {
@ -108,7 +108,7 @@ void LaraWaterCurrent(COLL_INFO* coll) // (F) (D)
coll->old.z = LaraItem->pos.zPos; coll->old.z = LaraItem->pos.zPos;
} }
int GetWaterDepth(int x, int y, int z, short roomNumber)//4CA38, 4CE9C int GetWaterDepth(int x, int y, int z, short roomNumber)
{ {
FLOOR_INFO* floor; FLOOR_INFO* floor;
ROOM_INFO* r = &g_Level.Rooms[roomNumber]; ROOM_INFO* r = &g_Level.Rooms[roomNumber];
@ -181,12 +181,12 @@ int GetWaterDepth(int x, int y, int z, short roomNumber)//4CA38, 4CE9C
} }
} }
void lara_col_waterroll(ITEM_INFO* item, COLL_INFO* coll)//4CA18(<), 4CE7C(<) (F) void lara_col_waterroll(ITEM_INFO* item, COLL_INFO* coll)
{ {
LaraSwimCollision(item, coll); LaraSwimCollision(item, coll);
} }
void lara_col_uwdeath(ITEM_INFO* item, COLL_INFO* coll)//4C980(<), 4CDE4(<) (F) void lara_col_uwdeath(ITEM_INFO* item, COLL_INFO* coll)
{ {
item->hitPoints = -1; item->hitPoints = -1;
Lara.air = -1; Lara.air = -1;
@ -200,32 +200,32 @@ void lara_col_uwdeath(ITEM_INFO* item, COLL_INFO* coll)//4C980(<), 4CDE4(<) (F)
LaraSwimCollision(item, coll); LaraSwimCollision(item, coll);
} }
void lara_col_dive(ITEM_INFO* item, COLL_INFO* coll)//4C960(<), 4CDC4(<) (F) void lara_col_dive(ITEM_INFO* item, COLL_INFO* coll)
{ {
LaraSwimCollision(item, coll); LaraSwimCollision(item, coll);
} }
void lara_col_tread(ITEM_INFO* item, COLL_INFO* coll)//4C940(<), 4CDA4(<) (F) void lara_col_tread(ITEM_INFO* item, COLL_INFO* coll)
{ {
LaraSwimCollision(item, coll); LaraSwimCollision(item, coll);
} }
void lara_col_glide(ITEM_INFO* item, COLL_INFO* coll)//4C920(<), 4CD84(<) (F) void lara_col_glide(ITEM_INFO* item, COLL_INFO* coll)
{ {
LaraSwimCollision(item, coll); LaraSwimCollision(item, coll);
} }
void lara_col_swim(ITEM_INFO* item, COLL_INFO* coll)//4C900(<), 4CD64(<) (F) void lara_col_swim(ITEM_INFO* item, COLL_INFO* coll)
{ {
LaraSwimCollision(item, coll); LaraSwimCollision(item, coll);
} }
void lara_as_waterroll(ITEM_INFO* item, COLL_INFO* coll)//4C8F8(<), 4CD5C(<) (F) void lara_as_waterroll(ITEM_INFO* item, COLL_INFO* coll)
{ {
item->fallspeed = 0; item->fallspeed = 0;
} }
void lara_as_uwdeath(ITEM_INFO* item, COLL_INFO* coll)//4C884(<), 4CCE8(<) (F) void lara_as_uwdeath(ITEM_INFO* item, COLL_INFO* coll)
{ {
Lara.look = 0; Lara.look = 0;
@ -246,7 +246,7 @@ void lara_as_uwdeath(ITEM_INFO* item, COLL_INFO* coll)//4C884(<), 4CCE8(<) (F)
} }
} }
void lara_as_dive(ITEM_INFO* item, COLL_INFO* coll)//4C854, 4CCB8 (F) void lara_as_dive(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (TrInput & IN_FORWARD) if (TrInput & IN_FORWARD)
{ {
@ -254,7 +254,7 @@ void lara_as_dive(ITEM_INFO* item, COLL_INFO* coll)//4C854, 4CCB8 (F)
} }
} }
void lara_as_tread(ITEM_INFO* item, COLL_INFO* coll)//4C730, 4CB94 (F) void lara_as_tread(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (item->hitPoints <= 0) if (item->hitPoints <= 0)
{ {
@ -291,7 +291,7 @@ void lara_as_tread(ITEM_INFO* item, COLL_INFO* coll)//4C730, 4CB94 (F)
} }
} }
void lara_as_glide(ITEM_INFO* item, COLL_INFO* coll)//4C634(<), 4CA98(<) (F) void lara_as_glide(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (item->hitPoints <= 0) if (item->hitPoints <= 0)
{ {
@ -329,7 +329,7 @@ void lara_as_glide(ITEM_INFO* item, COLL_INFO* coll)//4C634(<), 4CA98(<) (F)
item->goalAnimState = LS_UNDERWATER_STOP; item->goalAnimState = LS_UNDERWATER_STOP;
} }
void lara_as_swim(ITEM_INFO* item, COLL_INFO* coll)//4C548(<), 4C9AC(<) (F) void lara_as_swim(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (item->hitPoints <= 0) if (item->hitPoints <= 0)
{ {
@ -365,7 +365,7 @@ void lara_as_swim(ITEM_INFO* item, COLL_INFO* coll)//4C548(<), 4C9AC(<) (F)
item->goalAnimState = LS_UNDERWATER_INERTIA; item->goalAnimState = LS_UNDERWATER_INERTIA;
} }
void UpdateSubsuitAngles()//4BD20, 4C184 (F) void UpdateSubsuitAngles()
{ {
if (Subsuit.YVel != 0) if (Subsuit.YVel != 0)
{ {
@ -437,7 +437,7 @@ void UpdateSubsuitAngles()//4BD20, 4C184 (F)
} }
} }
void SwimTurnSubsuit(ITEM_INFO* item)//4BBDC, 4C040 (F) void SwimTurnSubsuit(ITEM_INFO* item)
{ {
if (item->pos.yPos < 14080) if (item->pos.yPos < 14080)
Subsuit.YVel += ((14080 - item->pos.yPos) / 16); Subsuit.YVel += ((14080 - item->pos.yPos) / 16);
@ -475,7 +475,7 @@ void SwimTurnSubsuit(ITEM_INFO* item)//4BBDC, 4C040 (F)
} }
} }
void SwimTurn(ITEM_INFO* item)//4BAF4(<), 4BF58(<) (F) void SwimTurn(ITEM_INFO* item)
{ {
if (TrInput & IN_FORWARD) if (TrInput & IN_FORWARD)
{ {
@ -502,7 +502,7 @@ void SwimTurn(ITEM_INFO* item)//4BAF4(<), 4BF58(<) (F)
} }
} }
void LaraSwimCollision(ITEM_INFO* item, COLL_INFO* coll)//4B608, 4BA6C void LaraSwimCollision(ITEM_INFO* item, COLL_INFO* coll)
{ {
int oldX = item->pos.xPos; int oldX = item->pos.xPos;
int oldY = item->pos.yPos; int oldY = item->pos.yPos;
@ -664,7 +664,7 @@ void LaraSwimCollision(ITEM_INFO* item, COLL_INFO* coll)//4B608, 4BA6C
LaraTestWaterDepth(item, coll); LaraTestWaterDepth(item, coll);
} }
void LaraTestWaterDepth(ITEM_INFO* item, COLL_INFO* coll)//4B4F8(<), 4B95C(<) (F) void LaraTestWaterDepth(ITEM_INFO* item, COLL_INFO* coll)
{ {
short roomNumber = item->roomNumber; short roomNumber = item->roomNumber;
FLOOR_INFO* floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNumber); FLOOR_INFO* floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNumber);

View file

@ -23,7 +23,7 @@ static short RightClimbTab[4] = // offset 0xA0640
/*this file has all the generic test functions called in lara's state code*/ /*this file has all the generic test functions called in lara's state code*/
int TestLaraVault(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) int TestLaraVault(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (!(TrInput & IN_ACTION) || Lara.gunStatus != LG_NO_ARMS) if (!(TrInput & IN_ACTION) || Lara.gunStatus != LG_NO_ARMS)
return 0; return 0;
@ -225,7 +225,7 @@ int TestLaraVault(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
return 0; return 0;
} }
int TestWall(ITEM_INFO* item, int front, int right, int down)//12550, 12600 (F) int TestWall(ITEM_INFO* item, int front, int right, int down)
{ {
int x = item->pos.xPos; int x = item->pos.xPos;
int y = item->pos.yPos + down; int y = item->pos.yPos + down;
@ -288,7 +288,7 @@ int TestWall(ITEM_INFO* item, int front, int right, int down)//12550, 12600 (F)
return 0; return 0;
} }
int LaraHangTest(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) int LaraHangTest(ITEM_INFO* item, COLL_INFO* coll)
{ {
int delta, flag, flag2, front, dfront, x, z, result; int delta, flag, flag2, front, dfront, x, z, result;
short angle, hdif, cdif, dir; short angle, hdif, cdif, dir;
@ -464,7 +464,7 @@ int LaraHangTest(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
return result; return result;
} }
int LaraHangLeftCornerTest(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) 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; return 0;
@ -619,7 +619,7 @@ int LaraHangLeftCornerTest(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
return result; return result;
} }
int LaraHangRightCornerTest(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) 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; return 0;
@ -774,7 +774,7 @@ int LaraHangRightCornerTest(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
return result; return result;
} }
int IsValidHangPos(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) int IsValidHangPos(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (LaraFloorFront(item, Lara.moveAngle, 100) < 200) if (LaraFloorFront(item, Lara.moveAngle, 100) < 200)
return 0; return 0;
@ -813,7 +813,7 @@ int IsValidHangPos(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
return abs(coll->frontFloor - coll->rightFloor2) < 60; return abs(coll->frontFloor - coll->rightFloor2) < 60;
} }
int LaraTestClimbStance(ITEM_INFO* item, COLL_INFO* coll)//11F78, 12028 int LaraTestClimbStance(ITEM_INFO* item, COLL_INFO* coll)
{ {
int shift_r, shift_l; int shift_r, shift_l;
@ -848,7 +848,7 @@ int LaraTestClimbStance(ITEM_INFO* item, COLL_INFO* coll)//11F78, 12028
return true; return true;
} }
int LaraTestHangOnClimbWall(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) int LaraTestHangOnClimbWall(ITEM_INFO* item, COLL_INFO* coll)
{ {
BOUNDING_BOX* bounds; BOUNDING_BOX* bounds;
int shift, result; int shift, result;
@ -902,7 +902,7 @@ int LaraTestHangOnClimbWall(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
return 0; return 0;
} }
int LaraTestEdgeCatch(ITEM_INFO* item, COLL_INFO* coll, int* edge) // (F) (D) int LaraTestEdgeCatch(ITEM_INFO* item, COLL_INFO* coll, int* edge)
{ {
BOUNDING_BOX* bounds = GetBoundsAccurate(item); BOUNDING_BOX* bounds = GetBoundsAccurate(item);
@ -931,7 +931,7 @@ int LaraTestEdgeCatch(ITEM_INFO* item, COLL_INFO* coll, int* edge) // (F) (D)
return 1; return 1;
} }
int TestHangSwingIn(ITEM_INFO* item, short angle)//14104, 141B4 (F) int TestHangSwingIn(ITEM_INFO* item, short angle)
{ {
int x = item->pos.xPos; int x = item->pos.xPos;
int y = item->pos.yPos; int y = item->pos.yPos;
@ -1053,7 +1053,7 @@ int TestHangFeet(ITEM_INFO* item, short angle)
} }
} }
int CanLaraHangSideways(ITEM_INFO* item, COLL_INFO* coll, short angle)//19930, 19A64 (F) int CanLaraHangSideways(ITEM_INFO* item, COLL_INFO* coll, short angle)
{ {
int oldx = item->pos.xPos; int oldx = item->pos.xPos;
int oldz = item->pos.zPos; int oldz = item->pos.zPos;
@ -1094,7 +1094,7 @@ int CanLaraHangSideways(ITEM_INFO* item, COLL_INFO* coll, short angle)//19930, 1
return !res; return !res;
} }
void SetCornerAnim(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip)//1A090, 1A1C4 (F) void SetCornerAnim(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip)
{ {
if (item->hitPoints <= 0) if (item->hitPoints <= 0)
{ {
@ -1175,7 +1175,7 @@ void SetCornerAnimFeet(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip)
} }
} }
int LaraFloorFront(ITEM_INFO* item, short ang, int dist) // (F) (D) int LaraFloorFront(ITEM_INFO* item, short ang, int dist)
{ {
int x = item->pos.xPos + dist * phd_sin(ang); int x = item->pos.xPos + dist * phd_sin(ang);
int y = item->pos.yPos - 762; int y = item->pos.yPos - 762;
@ -1191,7 +1191,7 @@ int LaraFloorFront(ITEM_INFO* item, short ang, int dist) // (F) (D)
return height; return height;
} }
int LaraCeilingFront(ITEM_INFO* item, short ang, int dist, int h) // (F) (D) int LaraCeilingFront(ITEM_INFO* item, short ang, int dist, int h)
{ {
int x = item->pos.xPos + dist * phd_sin(ang); int x = item->pos.xPos + dist * phd_sin(ang);
int y = item->pos.yPos - h; int y = item->pos.yPos - h;
@ -1207,7 +1207,7 @@ int LaraCeilingFront(ITEM_INFO* item, short ang, int dist, int h) // (F) (D)
return height; return height;
} }
int LaraFallen(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) int LaraFallen(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (Lara.waterStatus == LW_WADE || coll->midFloor <= STEPUP_HEIGHT) if (Lara.waterStatus == LW_WADE || coll->midFloor <= STEPUP_HEIGHT)
{ {
@ -1223,7 +1223,7 @@ int LaraFallen(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
return 1; return 1;
} }
int LaraLandedBad(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) int LaraLandedBad(ITEM_INFO* item, COLL_INFO* coll)
{ {
int landspeed = item->fallspeed - 140; int landspeed = item->fallspeed - 140;

View file

@ -1426,15 +1426,19 @@ void CreatureAIInfo(ITEM_INFO* item, AI_INFO* info)
info->zoneNumber = zone[item->boxNumber]; info->zoneNumber = zone[item->boxNumber];
r = &g_Level.Rooms[enemy->roomNumber]; r = &g_Level.Rooms[enemy->roomNumber];
enemy->boxNumber = XZ_GET_SECTOR(r, enemy->pos.xPos - r->x, enemy->pos.zPos - r->z).box; int boxNumber = XZ_GET_SECTOR(r, enemy->pos.xPos - r->x, enemy->pos.zPos - r->z).box;
info->enemyZone = zone[enemy->boxNumber]; if (boxNumber != NO_BOX)
if (!obj->nonLot)
{ {
if (g_Level.Boxes[enemy->boxNumber].flags & creature->LOT.blockMask) enemy->boxNumber = boxNumber;
info->enemyZone |= BLOCKED; info->enemyZone = zone[enemy->boxNumber];
else if (creature->LOT.node[item->boxNumber].searchNumber == (creature->LOT.searchNumber | BLOCKED_SEARCH))
info->enemyZone |= BLOCKED; if (!obj->nonLot)
{
if (g_Level.Boxes[enemy->boxNumber].flags & creature->LOT.blockMask)
info->enemyZone |= BLOCKED;
else if (creature->LOT.node[item->boxNumber].searchNumber == (creature->LOT.searchNumber | BLOCKED_SEARCH))
info->enemyZone |= BLOCKED;
}
} }
if (enemy == LaraItem) if (enemy == LaraItem)

View file

@ -57,7 +57,7 @@ void UpdateBubbles()
} }
} }
int GetFreeBubble() //8BEAC(<), 8DEF0(<) (F) int GetFreeBubble()
{ {
int oldestAgeIndex = 0; int oldestAgeIndex = 0;
int oldestAge = 0; int oldestAge = 0;
@ -78,7 +78,7 @@ int GetFreeBubble() //8BEAC(<), 8DEF0(<) (F)
return oldestAgeIndex; return oldestAgeIndex;
} }
void CreateBubble(PHD_VECTOR* pos, short roomNum, int unk1, int unk2, int flags, int xv, int yv, int zv) //8BF14(<), 8DF58(<) (F) void CreateBubble(PHD_VECTOR* pos, short roomNum, int unk1, int unk2, int flags, int xv, int yv, int zv)
{ {
if (g_Level.Rooms[roomNum].flags & ENV_FLAG_WATER) if (g_Level.Rooms[roomNum].flags & ENV_FLAG_WATER)
{ {

View file

@ -1315,9 +1315,9 @@ void BinocularCamera(ITEM_INFO* item)
if (LaserSight) if (LaserSight)
{ {
int firing = 0; int firing = 0;
short* ammo = GetAmmo(Lara.gunType); Ammo& ammo = GetAmmo(Lara.gunType);
if (!(InputBusy & IN_ACTION) || WeaponDelay || !*ammo) if (!(InputBusy & IN_ACTION) || WeaponDelay || !ammo)
{ {
if (!(InputBusy & IN_ACTION)) if (!(InputBusy & IN_ACTION))
{ {
@ -1334,8 +1334,8 @@ void BinocularCamera(ITEM_INFO* item)
firing = 1; firing = 1;
WeaponDelay = 16; WeaponDelay = 16;
Savegame.Game.AmmoUsed++; Savegame.Game.AmmoUsed++;
if (*ammo != -1) if (!ammo.hasInfinite())
(*ammo)--; (ammo)--;
} }
else if (Lara.gunType == WEAPON_CROSSBOW) else if (Lara.gunType == WEAPON_CROSSBOW)
{ {
@ -1426,8 +1426,8 @@ void BinocularCamera(ITEM_INFO* item)
Camera.bounce = -16 - (GetRandomControl() & 0x1F); Camera.bounce = -16 - (GetRandomControl() & 0x1F);
} }
if (*ammo != -1) if (!ammo.hasInfinite())
(*ammo)--; (ammo)--;
} }
} }

View file

@ -327,7 +327,7 @@ void TrapCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* c)
ObjectCollision(itemNumber, l, c); ObjectCollision(itemNumber, l, c);
} }
void TestForObjectOnLedge(ITEM_INFO* item, COLL_INFO* coll)//2A940(<), 2AB68(<) (F) void TestForObjectOnLedge(ITEM_INFO* item, COLL_INFO* coll)
{ {
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)
{ {

View file

@ -1654,7 +1654,7 @@ int CheckNoColCeilingTriangle(FLOOR_INFO *floor, int x, int z)
int GetFloorHeight(FLOOR_INFO *floor, int x, int y, int z) int GetFloorHeight(FLOOR_INFO *floor, int x, int y, int z)
{ {
#if 0
TiltYOffset = 0; TiltYOffset = 0;
TiltXOffset = 0; TiltXOffset = 0;
OnObject = 0; OnObject = 0;
@ -1671,202 +1671,204 @@ int GetFloorHeight(FLOOR_INFO *floor, int x, int y, int z)
} }
int height = floor->floor * 256; int height = floor->floor * 256;
if (height == NO_HEIGHT) if (height != NO_HEIGHT)
return height;
#endif
TriggerIndex = NULL;
/*if (floor->index == 0)
return height;*/
short *data = &g_Level.FloorData[floor->index];
short type, hadj;
int xOff, yOff, trigger;
/*ITEM_INFO *item;
OBJECT_INFO *obj;
int tilts, t0, t1, t2, t3, t4, dx, dz, h1, h2;*/
do
{ {
type = *(data++); // return height;
switch (type & DATA_TYPE)
TriggerIndex = NULL;
if (floor->index != 0)
{ {
case DOOR_TYPE: // return height;
case ROOF_TYPE:
case SPLIT3:
case SPLIT4:
case NOCOLC1T:
case NOCOLC1B:
case NOCOLC2T:
case NOCOLC2B:
data++;
break;
case TILT_TYPE: short* data = &g_Level.FloorData[floor->index];
/*TiltXOffset = xOff = (*data >> 8); short type, hadj;
TiltYOffset = yOff = *(char *)data;
if ((abs(xOff)) > 2 || (abs(yOff)) > 2)
HeightType = BIG_SLOPE;
else
HeightType = SMALL_SLOPE;
if (xOff >= 0)
height += (xOff * ((-1 - z) & 1023) >> 2);
else
height -= (xOff * (z & 1023) >> 2);
if (yOff >= 0)
height += yOff * ((-1 - x) & 1023) >> 2;
else
height -= yOff * (x & 1023) >> 2;*/
data++;
break;
case TRIGGER_TYPE:
if (!TriggerIndex)
TriggerIndex = data - 1;
data++;
int xOff, yOff, trigger;
ITEM_INFO* item;
OBJECT_INFO* obj;
int tilts, t0, t1, t2, t3, t4, dx, dz, h1, h2;
do do
{ {
trigger = *(data++); type = *(data++);
if (TRIG_BITS(trigger) != TO_OBJECT) switch (type & DATA_TYPE)
{ {
if (TRIG_BITS(trigger) == TO_CAMERA || case DOOR_TYPE:
TRIG_BITS(trigger) == TO_FLYBY) case ROOF_TYPE:
case SPLIT3:
case SPLIT4:
case NOCOLC1T:
case NOCOLC1B:
case NOCOLC2T:
case NOCOLC2B:
data++;
break;
case TILT_TYPE:
TiltXOffset = xOff = (*data >> 8);
TiltYOffset = yOff = *(char*)data;
if ((abs(xOff)) > 2 || (abs(yOff)) > 2)
HeightType = BIG_SLOPE;
else
HeightType = SMALL_SLOPE;
if (xOff >= 0)
height += (xOff * ((-1 - z) & 1023) >> 2);
else
height -= (xOff * (z & 1023) >> 2);
if (yOff >= 0)
height += yOff * ((-1 - x) & 1023) >> 2;
else
height -= yOff * (x & 1023) >> 2;
data++;
break;
case TRIGGER_TYPE:
if (!TriggerIndex)
TriggerIndex = data - 1;
data++;
do
{ {
trigger = *(data++); trigger = *(data++);
}
}
else
{
/*item = &g_Level.Items[trigger & VALUE_BITS];
obj = &Objects[item->objectNumber];
if (obj->floor && !(item->flags & 0x8000)) if (TRIG_BITS(trigger) != TO_OBJECT)
{
if (TRIG_BITS(trigger) == TO_CAMERA ||
TRIG_BITS(trigger) == TO_FLYBY)
{
trigger = *(data++);
}
}
else
{
/*item = &g_Level.Items[trigger & VALUE_BITS];
obj = &Objects[item->objectNumber];
if (obj->floor && !(item->flags & 0x8000))
{
(obj->floor)(item, x, y, z, &height);
}*/
}
} while (!(trigger & END_BIT));
break;
case LAVA_TYPE:
TriggerIndex = data - 1;
break;
case CLIMB_TYPE:
case MONKEY_TYPE:
case TRIGTRIGGER_TYPE:
if (!TriggerIndex)
TriggerIndex = data - 1;
break;
case SPLIT1:
case SPLIT2:
case NOCOLF1T:
case NOCOLF1B:
case NOCOLF2T:
case NOCOLF2B:
tilts = *data;
t0 = tilts & 15;
t1 = (tilts >> 4) & 15;
t2 = (tilts >> 8) & 15;
t3 = (tilts >> 12) & 15;
dx = x & 1023;
dz = z & 1023;
xOff = yOff = 0;
HeightType = SPLIT_TRI;
SplitFloor = (type & DATA_TYPE);
if ((type & DATA_TYPE) == SPLIT1 ||
(type & DATA_TYPE) == NOCOLF1T ||
(type & DATA_TYPE) == NOCOLF1B)
{ {
(obj->floor)(item, x, y, z, &height); if (dx <= (1024 - dz))
}*/ {
hadj = (type >> 10) & 0x1F;
if (hadj & 0x10)
hadj |= 0xfff0;
height += 256 * hadj;
xOff = t2 - t1;
yOff = t0 - t1;
}
else
{
hadj = (type >> 5) & 0x1F;
if (hadj & 0x10)
hadj |= 0xFFF0;
height += 256 * hadj;
xOff = t3 - t0;
yOff = t3 - t2;
}
}
else
{
if (dx <= dz)
{
hadj = (type >> 10) & 0x1f;
if (hadj & 0x10)
hadj |= 0xfff0;
height += 256 * hadj;
xOff = t2 - t1;
yOff = t3 - t2;
}
else
{
hadj = (type >> 5) & 0x1f;
if (hadj & 0x10)
hadj |= 0xfff0;
height += 256 * hadj;
xOff = t3 - t0;
yOff = t0 - t1;
}
}
TiltXOffset = xOff;
TiltYOffset = yOff;
if ((abs(xOff)) > 2 || (abs(yOff)) > 2)
HeightType = DIAGONAL;
else if (HeightType != SPLIT_TRI)
HeightType = SMALL_SLOPE;
if (xOff >= 0)
height += xOff * ((-1 - z) & 1023) >> 2;
else
height -= xOff * (z & 1023) >> 2;
if (yOff >= 0)
height += yOff * ((-1 - x) & 1023) >> 2;
else
height -= yOff * (x & 1023) >> 2;
data++;
break;
default:
break;
} }
} while (!(type & END_BIT));
} while (!(trigger & END_BIT));
break;
case LAVA_TYPE:
TriggerIndex = data - 1;
break;
case CLIMB_TYPE:
case MONKEY_TYPE:
case TRIGTRIGGER_TYPE:
if (!TriggerIndex)
TriggerIndex = data - 1;
break;
case SPLIT1:
case SPLIT2:
case NOCOLF1T:
case NOCOLF1B:
case NOCOLF2T:
case NOCOLF2B:
/*tilts = *data;
t0 = tilts & 15;
t1 = (tilts >> 4) & 15;
t2 = (tilts >> 8) & 15;
t3 = (tilts >> 12) & 15;
dx = x & 1023;
dz = z & 1023;
xOff = yOff = 0;
HeightType = SPLIT_TRI;
SplitFloor = (type & DATA_TYPE);
if ((type & DATA_TYPE) == SPLIT1 ||
(type & DATA_TYPE) == NOCOLF1T ||
(type & DATA_TYPE) == NOCOLF1B)
{
if (dx <= (1024 - dz))
{
hadj = (type >> 10) & 0x1F;
if (hadj & 0x10)
hadj |= 0xfff0;
height += 256 * hadj;
xOff = t2 - t1;
yOff = t0 - t1;
}
else
{
hadj = (type >> 5) & 0x1F;
if (hadj & 0x10)
hadj |= 0xFFF0;
height += 256 * hadj;
xOff = t3 - t0;
yOff = t3 - t2;
}
}
else
{
if (dx <= dz)
{
hadj = (type >> 10) & 0x1f;
if (hadj & 0x10)
hadj |= 0xfff0;
height += 256 * hadj;
xOff = t2 - t1;
yOff = t3 - t2;
}
else
{
hadj = (type >> 5) & 0x1f;
if (hadj & 0x10)
hadj |= 0xfff0;
height += 256 * hadj;
xOff = t3 - t0;
yOff = t0 - t1;
}
}
TiltXOffset = xOff;
TiltYOffset = yOff;
if ((abs(xOff)) > 2 || (abs(yOff)) > 2)
HeightType = DIAGONAL;
else if (HeightType != SPLIT_TRI)
HeightType = SMALL_SLOPE;
if (xOff >= 0)
height += xOff * ((-1 - z) & 1023) >> 2;
else
height -= xOff * (z & 1023) >> 2;
if (yOff >= 0)
height += yOff * ((-1 - x) & 1023) >> 2;
else
height -= yOff * (x & 1023) >> 2;
*/
data++;
break;
default:
break;
} }
} while (!(type & END_BIT)); }
/*return height;*/ /*return height;*/
return GetFloorHeight(ROOM_VECTOR{floor->Room, y}, x, z).value_or(NO_HEIGHT); return GetFloorHeight(ROOM_VECTOR{floor->Room, y}, x, z).value_or(NO_HEIGHT);
} }
int LOS(GAME_VECTOR *start, GAME_VECTOR *end) // (F) (D) int LOS(GAME_VECTOR *start, GAME_VECTOR *end)
{ {
int result1, result2; int result1, result2;
@ -1892,7 +1894,7 @@ int LOS(GAME_VECTOR *start, GAME_VECTOR *end) // (F) (D)
return 0; return 0;
} }
int xLOS(GAME_VECTOR *start, GAME_VECTOR *end) // (F) (D) int xLOS(GAME_VECTOR *start, GAME_VECTOR *end)
{ {
int dx, dy, dz, x, y, z, flag; int dx, dy, dz, x, y, z, flag;
short room, room2; short room, room2;
@ -1997,7 +1999,7 @@ int xLOS(GAME_VECTOR *start, GAME_VECTOR *end) // (F) (D)
return flag; return flag;
} }
int zLOS(GAME_VECTOR *start, GAME_VECTOR *end) // (F) (D) int zLOS(GAME_VECTOR *start, GAME_VECTOR *end)
{ {
int dx, dy, dz, x, y, z, flag; int dx, dy, dz, x, y, z, flag;
short room, room2; short room, room2;
@ -2102,7 +2104,7 @@ int zLOS(GAME_VECTOR *start, GAME_VECTOR *end) // (F) (D)
return flag; return flag;
} }
int ClipTarget(GAME_VECTOR *start, GAME_VECTOR *target) // (F) (D) int ClipTarget(GAME_VECTOR *start, GAME_VECTOR *target)
{ {
short room; short room;
int x, y, z, wx, wy, wz; int x, y, z, wx, wy, wz;
@ -2150,7 +2152,7 @@ int ClipTarget(GAME_VECTOR *start, GAME_VECTOR *target) // (F) (D)
return 1; return 1;
} }
int GetTargetOnLOS(GAME_VECTOR *src, GAME_VECTOR *dest, int DrawTarget, int firing) // (AF) (D) int GetTargetOnLOS(GAME_VECTOR *src, GAME_VECTOR *dest, int DrawTarget, int firing)
{ {
GAME_VECTOR target; GAME_VECTOR target;
int result, flag, itemNumber, count; int result, flag, itemNumber, count;
@ -2398,7 +2400,7 @@ int GetTargetOnLOS(GAME_VECTOR *src, GAME_VECTOR *dest, int DrawTarget, int firi
return flag; return flag;
} }
int ObjectOnLOS2(GAME_VECTOR *start, GAME_VECTOR *end, PHD_VECTOR *vec, MESH_INFO **mesh) // (F) (D) int ObjectOnLOS2(GAME_VECTOR *start, GAME_VECTOR *end, PHD_VECTOR *vec, MESH_INFO **mesh)
{ {
int r, m; int r, m;
ROOM_INFO *room; ROOM_INFO *room;
@ -2476,7 +2478,7 @@ int GetRandomDraw()
return generateInt(); return generateInt();
} }
int GetCeiling(FLOOR_INFO *floor, int x, int y, int z) // (F) (D) int GetCeiling(FLOOR_INFO *floor, int x, int y, int z)
{ {
#if 0 #if 0
ROOM_INFO *room; ROOM_INFO *room;

View file

@ -143,7 +143,7 @@ void invisibility_on(ITEM_INFO* item)
item->status = ITEM_INVISIBLE; item->status = ITEM_INVISIBLE;
} }
void SetFog(ITEM_INFO* item)//39A44(<), 39F44(<) (F) void SetFog(ITEM_INFO* item)
{ {
FlipEffect = -1; FlipEffect = -1;
} }
@ -176,22 +176,22 @@ void draw_right_pistol(ITEM_INFO* item)
} }
} }
void shoot_left_gun(ITEM_INFO* item)//39A34(<), 39F34(<) (F) void shoot_left_gun(ITEM_INFO* item)
{ {
Lara.leftArm.flash_gun = 3; Lara.leftArm.flash_gun = 3;
} }
void shoot_right_gun(ITEM_INFO* item)//39A24(<), 39F24(<) (F) void shoot_right_gun(ITEM_INFO* item)
{ {
Lara.rightArm.flash_gun = 3; Lara.rightArm.flash_gun = 3;
} }
void lara_hands_free(ITEM_INFO* item)//39A18(<), 39F18(<) (F) void lara_hands_free(ITEM_INFO* item)
{ {
Lara.gunStatus = LG_NO_ARMS; Lara.gunStatus = LG_NO_ARMS;
} }
void KillActiveBaddies(ITEM_INFO* item)//39938(<), 39E38(<) (F) void KillActiveBaddies(ITEM_INFO* item)
{ {
if (NextItemActive != NO_ITEM) if (NextItemActive != NO_ITEM)
{ {
@ -221,7 +221,7 @@ void KillActiveBaddies(ITEM_INFO* item)//39938(<), 39E38(<) (F)
FlipEffect = -1; FlipEffect = -1;
} }
void LaraLocationPad(ITEM_INFO* item)//39710(<), 39C10(<) (F) void LaraLocationPad(ITEM_INFO* item)
{ {
FlipEffect = -1; FlipEffect = -1;
@ -229,7 +229,7 @@ void LaraLocationPad(ITEM_INFO* item)//39710(<), 39C10(<) (F)
Lara.locationPad = TriggerTimer; Lara.locationPad = TriggerTimer;
} }
void LaraLocation(ITEM_INFO* item)//396D0(<), 39BD0(<) (F) void LaraLocation(ITEM_INFO* item)
{ {
FlipEffect = -1; FlipEffect = -1;
@ -238,14 +238,14 @@ void LaraLocation(ITEM_INFO* item)//396D0(<), 39BD0(<) (F)
Lara.highestLocation = TriggerTimer; Lara.highestLocation = TriggerTimer;
} }
void ExplosionFX(ITEM_INFO* item)//39694(<), 39B94(<) (F) void ExplosionFX(ITEM_INFO* item)
{ {
SoundEffect(SFX_EXPLOSION1, NULL, 0); SoundEffect(SFX_EXPLOSION1, NULL, 0);
Camera.bounce = -75; Camera.bounce = -75;
FlipEffect = -1; FlipEffect = -1;
} }
void SwapCrowbar(ITEM_INFO* item)//39638(<), 39B38(<) (F) void SwapCrowbar(ITEM_INFO* item)
{ {
if (Lara.meshPtrs[LM_RHAND] == Objects[ID_LARA_SKIN].meshIndex + LM_RHAND) if (Lara.meshPtrs[LM_RHAND] == Objects[ID_LARA_SKIN].meshIndex + LM_RHAND)
Lara.meshPtrs[LM_RHAND] = Objects[ID_LARA_CROWBAR_ANIM].meshIndex + LM_RHAND; Lara.meshPtrs[LM_RHAND] = Objects[ID_LARA_CROWBAR_ANIM].meshIndex + LM_RHAND;
@ -253,23 +253,23 @@ void SwapCrowbar(ITEM_INFO* item)//39638(<), 39B38(<) (F)
Lara.meshPtrs[LM_RHAND] = Objects[ID_LARA_SKIN].meshIndex + LM_RHAND; Lara.meshPtrs[LM_RHAND] = Objects[ID_LARA_SKIN].meshIndex + LM_RHAND;
} }
void ActivateKey(ITEM_INFO* item)//39624(<), 39B24(<) (F) void ActivateKey(ITEM_INFO* item)
{ {
KeyTriggerActive = 1; KeyTriggerActive = 1;
} }
void ActivateCamera(ITEM_INFO* item)//39610(<), 39B10(<) (F) void ActivateCamera(ITEM_INFO* item)
{ {
KeyTriggerActive = 2; KeyTriggerActive = 2;
} }
void PoseidonSFX(ITEM_INFO* item)//395E0(<), 39AE0(<) (F) void PoseidonSFX(ITEM_INFO* item)
{ {
SoundEffect(SFX_GRAB_OPEN, NULL, 0); SoundEffect(SFX_GRAB_OPEN, NULL, 0);
FlipEffect = -1; FlipEffect = -1;
} }
void RubbleFX(ITEM_INFO* item)//39534(<), 39A34(<) (F) void RubbleFX(ITEM_INFO* item)
{ {
int itemNumber = FindItemNumber(ID_EARTHQUAKE); int itemNumber = FindItemNumber(ID_EARTHQUAKE);
@ -289,13 +289,13 @@ void RubbleFX(ITEM_INFO* item)//39534(<), 39A34(<) (F)
FlipEffect = -1; FlipEffect = -1;
} }
void SoundFlipEffect(ITEM_INFO* item)//39500(<), 39A00(<) (F) void SoundFlipEffect(ITEM_INFO* item)
{ {
SoundEffect(TriggerTimer, NULL, 0); SoundEffect(TriggerTimer, NULL, 0);
FlipEffect = -1; FlipEffect = -1;
} }
void floor_shake_effect(ITEM_INFO* item)//39410, 39910 (F) void floor_shake_effect(ITEM_INFO* item)
{ {
int x = abs(item->pos.xPos - Camera.pos.x); int x = abs(item->pos.xPos - Camera.pos.x);
int y = abs(item->pos.yPos - Camera.pos.y); int y = abs(item->pos.yPos - Camera.pos.y);
@ -307,18 +307,18 @@ void floor_shake_effect(ITEM_INFO* item)//39410, 39910 (F)
} }
} }
void turn180_effect(ITEM_INFO* item)//393F4(<), 398F4(<) (F) void turn180_effect(ITEM_INFO* item)
{ {
item->pos.yRot -= ANGLE(180); item->pos.yRot -= ANGLE(180);
item->pos.xRot = -item->pos.xRot; item->pos.xRot = -item->pos.xRot;
} }
void finish_level_effect(ITEM_INFO* item)//393D4(<), 398D4(<) (F) void finish_level_effect(ITEM_INFO* item)
{ {
LevelComplete = CurrentLevel + 1; LevelComplete = CurrentLevel + 1;
} }
void void_effect(ITEM_INFO* item)//393CC(<), 398CC(<) (F) void void_effect(ITEM_INFO* item)
{ {
} }

View file

@ -69,7 +69,7 @@ NODEOFFSET_INFO NodeOffsets[MAX_NODE] = {
extern GameFlow* g_GameFlow; extern GameFlow* g_GameFlow;
void DetatchSpark(int num, SpriteEnumFlag type)// (F) (D) void DetatchSpark(int num, SpriteEnumFlag type)
{ {
FX_INFO* fx; FX_INFO* fx;
ITEM_INFO* item; ITEM_INFO* item;
@ -789,7 +789,7 @@ void TriggerFireFlame(int x, int y, int z, int fxObj, int type)
} }
} }
void TriggerSuperJetFlame(ITEM_INFO* item, int yvel, int deadly)//32EAC, 333AC (F) void TriggerSuperJetFlame(ITEM_INFO* item, int yvel, int deadly)
{ {
long dx = LaraItem->pos.xPos - item->pos.xPos; long dx = LaraItem->pos.xPos - item->pos.xPos;
long dz = LaraItem->pos.zPos - item->pos.zPos; long dz = LaraItem->pos.zPos - item->pos.zPos;
@ -1813,7 +1813,7 @@ void TriggerMetalSparks(int x, int y, int z, int xv, int yv, int zv, int additio
} }
} }
void KillEverything()//338AC(<), 33DAC(<) (F) void KillEverything()
{ {
KillEverythingFlag = 0; KillEverythingFlag = 0;
} }

View file

@ -51,7 +51,7 @@ void TriggerTorchFlame(char fxObj, char node)
spark->dSize = spark->size / 8; spark->dSize = spark->size / 8;
} }
void DoFlameTorch() // (F) (D) void DoFlameTorch()
{ {
switch (Lara.leftArm.lock) switch (Lara.leftArm.lock)
{ {
@ -169,7 +169,7 @@ void DoFlameTorch() // (F) (D)
} }
} }
void GetFlameTorch() // (F) (D) void GetFlameTorch()
{ {
if (Lara.gunType == WEAPON_FLARE) if (Lara.gunType == WEAPON_FLARE)
CreateFlare(ID_FLARE_ITEM, 0); CreateFlare(ID_FLARE_ITEM, 0);
@ -186,7 +186,7 @@ void GetFlameTorch() // (F) (D)
Lara.meshPtrs[LM_LHAND] = Objects[ID_LARA_TORCH_ANIM].meshIndex + LM_LHAND; Lara.meshPtrs[LM_LHAND] = Objects[ID_LARA_TORCH_ANIM].meshIndex + LM_LHAND;
} }
void TorchControl(short itemNumber) // (F) (D) void TorchControl(short itemNumber)
{ {
ITEM_INFO* item = &g_Level.Items[itemNumber]; ITEM_INFO* item = &g_Level.Items[itemNumber];

View file

@ -12,7 +12,7 @@ PENDULUM AlternatePendulum;
ROPE_STRUCT Ropes[12]; ROPE_STRUCT Ropes[12];
int NumRopes, RopeSwing = 0; int NumRopes, RopeSwing = 0;
void InitialiseRope(short itemNumber) // (F) (D) void InitialiseRope(short itemNumber)
{ {
PHD_VECTOR itemPos; PHD_VECTOR itemPos;
@ -39,7 +39,7 @@ void InitialiseRope(short itemNumber) // (F) (D)
NumRopes++; NumRopes++;
} }
void PrepareRope(ROPE_STRUCT* rope, PHD_VECTOR* pos1, PHD_VECTOR* pos2, int length, ITEM_INFO* item) // (F) (D) void PrepareRope(ROPE_STRUCT* rope, PHD_VECTOR* pos1, PHD_VECTOR* pos2, int length, ITEM_INFO* item)
{ {
rope->position = *pos1; rope->position = *pos1;
rope->segmentLength = length * 65536; rope->segmentLength = length * 65536;
@ -87,7 +87,7 @@ void PrepareRope(ROPE_STRUCT* rope, PHD_VECTOR* pos1, PHD_VECTOR* pos2, int leng
rope->active = 0; rope->active = 0;
} }
PHD_VECTOR* NormaliseRopeVector(PHD_VECTOR* vec) // (F) (D) PHD_VECTOR* NormaliseRopeVector(PHD_VECTOR* vec)
{ {
int x = vec->x / 65536; int x = vec->x / 65536;
int y = vec->y / 65536; int y = vec->y / 65536;
@ -108,7 +108,7 @@ PHD_VECTOR* NormaliseRopeVector(PHD_VECTOR* vec) // (F) (D)
return vec; return vec;
} }
void _0x0046D130(ROPE_STRUCT* rope, int segmentFrame, int* x, int* y, int* z) // (F) (D) void _0x0046D130(ROPE_STRUCT* rope, int segmentFrame, int* x, int* y, int* z)
{ {
int segment; int segment;
short frame; short frame;
@ -120,26 +120,26 @@ void _0x0046D130(ROPE_STRUCT* rope, int segmentFrame, int* x, int* y, int* z) //
*z = ((rope->normalisedSegment[segment].z * frame) / 65536) + ((rope->meshSegment[segment].z) / 65536) + rope->position.z; *z = ((rope->normalisedSegment[segment].z * frame) / 65536) + ((rope->meshSegment[segment].z) / 65536) + rope->position.z;
} }
int DotProduct(PHD_VECTOR* u, PHD_VECTOR* v) // (F) (D) int DotProduct(PHD_VECTOR* u, PHD_VECTOR* v)
{ {
return (u->x * v->x + u->y * v->y + u->z * v->z) / 16384; return (u->x * v->x + u->y * v->y + u->z * v->z) / 16384;
} }
void ScaleVector(PHD_VECTOR* u, int c, PHD_VECTOR* destination) // (F) (D) void ScaleVector(PHD_VECTOR* u, int c, PHD_VECTOR* destination)
{ {
destination->x = c * u->x / 16384; destination->x = c * u->x / 16384;
destination->y = c * u->y / 16384; destination->y = c * u->y / 16384;
destination->z = c * u->z / 16384; destination->z = c * u->z / 16384;
} }
void CrossProduct(PHD_VECTOR* u, PHD_VECTOR* v, PHD_VECTOR* destination) // (F) (D) void CrossProduct(PHD_VECTOR* u, PHD_VECTOR* v, PHD_VECTOR* destination)
{ {
destination->x = (u->y * v->z - u->z * v->y) / 16384; destination->x = (u->y * v->z - u->z * v->y) / 16384;
destination->y = (u->z * v->x - u->x * v->z) / 16384; destination->y = (u->z * v->x - u->x * v->z) / 16384;
destination->z = (u->x * v->y - u->y * v->x) / 16384; destination->z = (u->x * v->y - u->y * v->x) / 16384;
} }
void _0x0046D420(int* matrix, short* angle) // (F) (D) void _0x0046D420(int* matrix, short* angle)
{ {
angle[0] = phd_atan(sqrt(SQUARE(matrix[M22]) + SQUARE(matrix[M02])), matrix[M12]); angle[0] = phd_atan(sqrt(SQUARE(matrix[M22]) + SQUARE(matrix[M02])), matrix[M12]);
if (matrix[M12] >= 0 && angle[0] > 0 || matrix[M12] < 0 && angle[0] < 0) if (matrix[M12] >= 0 && angle[0] > 0 || matrix[M12] < 0 && angle[0] < 0)
@ -148,7 +148,7 @@ void _0x0046D420(int* matrix, short* angle) // (F) (D)
angle[2] = phd_atan(matrix[M00] * phd_cos(angle[1]) - matrix[M20] * phd_sin(angle[1]), matrix[M21] * phd_sin(angle[1]) - matrix[M01] * phd_cos(angle[1])); angle[2] = phd_atan(matrix[M00] * phd_cos(angle[1]) - matrix[M20] * phd_sin(angle[1]), matrix[M21] * phd_sin(angle[1]) - matrix[M01] * phd_cos(angle[1]));
} }
void RopeControl(short itemNumber) // (F) (D) void RopeControl(short itemNumber)
{ {
ITEM_INFO* item; ITEM_INFO* item;
ROPE_STRUCT* rope; ROPE_STRUCT* rope;
@ -166,7 +166,7 @@ void RopeControl(short itemNumber) // (F) (D)
} }
} }
void RopeCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll) // (F) (D) void RopeCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll)
{ {
ITEM_INFO* item; ITEM_INFO* item;
ROPE_STRUCT* rope; ROPE_STRUCT* rope;
@ -209,7 +209,7 @@ void RopeCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll) // (F) (D)
} }
} }
void RopeDynamics(ROPE_STRUCT* rope) // (F) (D) void RopeDynamics(ROPE_STRUCT* rope)
{ {
int flag, i; int flag, i;
PENDULUM* pendulumPointer; PENDULUM* pendulumPointer;
@ -369,7 +369,7 @@ void RopeDynamics(ROPE_STRUCT* rope) // (F) (D)
} }
} }
int _0x0046D200(ROPE_STRUCT* rope, int x, int y, int z, int radius) // (F) (D) int _0x0046D200(ROPE_STRUCT* rope, int x, int y, int z, int radius)
{ {
int dx, dy, dz; int dx, dy, dz;
@ -387,7 +387,7 @@ int _0x0046D200(ROPE_STRUCT* rope, int x, int y, int z, int radius) // (F) (D)
return -1; return -1;
} }
void ApplyVelocityToRope(int node, short angle, short n) // (F) (D) void ApplyVelocityToRope(int node, short angle, short n)
{ {
SetPendulumVelocity( SetPendulumVelocity(
(unsigned short) n * phd_sin(angle) * 4096, (unsigned short) n * phd_sin(angle) * 4096,
@ -395,7 +395,7 @@ void ApplyVelocityToRope(int node, short angle, short n) // (F) (D)
(unsigned short) n * phd_cos(angle) * 4096); /* @ORIGINAL_BUG: casting n to unsigned short results in the rope glitch */ (unsigned short) n * phd_cos(angle) * 4096); /* @ORIGINAL_BUG: casting n to unsigned short results in the rope glitch */
} }
void SetPendulumVelocity(int x, int y, int z) // (F) (D) void SetPendulumVelocity(int x, int y, int z)
{ {
int node; int node;
@ -414,7 +414,7 @@ void SetPendulumVelocity(int x, int y, int z) // (F) (D)
CurrentPendulum.Velocity.z += z; CurrentPendulum.Velocity.z += z;
} }
void _0x0046E1C0(ROPE_STRUCT* rope, int node) // (F) (D) void _0x0046E1C0(ROPE_STRUCT* rope, int node)
{ {
CurrentPendulum.Position.x = rope->segment[node].x; CurrentPendulum.Position.x = rope->segment[node].x;
CurrentPendulum.Position.y = rope->segment[node].y; CurrentPendulum.Position.y = rope->segment[node].y;
@ -429,7 +429,7 @@ void _0x0046E1C0(ROPE_STRUCT* rope, int node) // (F) (D)
CurrentPendulum.Rope = rope; CurrentPendulum.Rope = rope;
} }
void _0x0046E080(ROPE_STRUCT* rope, PENDULUM* pendulumPointer, PHD_VECTOR* ropeVelocity, PHD_VECTOR* pendulumVelocity, int value) // (F) (D) void _0x0046E080(ROPE_STRUCT* rope, PENDULUM* pendulumPointer, PHD_VECTOR* ropeVelocity, PHD_VECTOR* pendulumVelocity, int value)
{ {
PHD_VECTOR vec; PHD_VECTOR vec;
int result; int result;
@ -444,7 +444,7 @@ void _0x0046E080(ROPE_STRUCT* rope, PENDULUM* pendulumPointer, PHD_VECTOR* ropeV
pendulumVelocity->z -= ((int64_t) result * vec.z) / 65536; pendulumVelocity->z -= ((int64_t) result * vec.z) / 65536;
} }
void _0x0046DF00(PHD_VECTOR* segment, PHD_VECTOR* nextSegment, PHD_VECTOR* velocity, PHD_VECTOR* nextVelocity, int length) // (F) (D) void _0x0046DF00(PHD_VECTOR* segment, PHD_VECTOR* nextSegment, PHD_VECTOR* velocity, PHD_VECTOR* nextVelocity, int length)
{ {
PHD_VECTOR vec; PHD_VECTOR vec;
int result; int result;
@ -465,7 +465,7 @@ void _0x0046DF00(PHD_VECTOR* segment, PHD_VECTOR* nextSegment, PHD_VECTOR* veloc
nextVelocity->z -= vec.z; nextVelocity->z -= vec.z;
} }
void UpdateRopeSwing(ITEM_INFO* item) // (F) (D) void UpdateRopeSwing(ITEM_INFO* item)
{ {
if (Lara.ropeMaxXForward > 9000) if (Lara.ropeMaxXForward > 9000)
{ {
@ -558,7 +558,7 @@ void UpdateRopeSwing(ITEM_INFO* item) // (F) (D)
} }
} }
void JumpOffRope(ITEM_INFO* item) // (F) (D) void JumpOffRope(ITEM_INFO* item)
{ {
if (Lara.ropePtr != -1) if (Lara.ropePtr != -1)
{ {
@ -599,7 +599,7 @@ void JumpOffRope(ITEM_INFO* item) // (F) (D)
} }
} }
void FallFromRope(ITEM_INFO* item) // (F) (D) void FallFromRope(ITEM_INFO* item)
{ {
item->speed = (abs(CurrentPendulum.Velocity.x / 65536) + abs(CurrentPendulum.Velocity.z / 65536)) / 2; item->speed = (abs(CurrentPendulum.Velocity.x / 65536) + abs(CurrentPendulum.Velocity.z / 65536)) / 2;
item->pos.xRot = 0; item->pos.xRot = 0;
@ -617,7 +617,7 @@ void FallFromRope(ITEM_INFO* item) // (F) (D)
Lara.ropePtr = -1; Lara.ropePtr = -1;
} }
void LaraClimbRope(ITEM_INFO* item, COLL_INFO* coll) // (F) (D) void LaraClimbRope(ITEM_INFO* item, COLL_INFO* coll)
{ {
if (!(TrInput & IN_ACTION)) if (!(TrInput & IN_ACTION))
{ {
@ -665,7 +665,7 @@ void LaraClimbRope(ITEM_INFO* item, COLL_INFO* coll) // (F) (D)
} }
} }
void DelAlignLaraToRope(ITEM_INFO* item) // (F) (D) void DelAlignLaraToRope(ITEM_INFO* item)
{ {
ROPE_STRUCT* rope; ROPE_STRUCT* rope;
short ropeY; short ropeY;

View file

@ -630,7 +630,7 @@ void TriggerShatterSmoke(int x, int y, int z)
spark->size = spark->dSize / 8; spark->size = spark->dSize / 8;
} }
int GetFreeBlood()// (F) int GetFreeBlood()
{ {
BLOOD_STRUCT* blood = &Blood[NextBlood]; BLOOD_STRUCT* blood = &Blood[NextBlood];
int bloodNum = NextBlood; int bloodNum = NextBlood;
@ -668,7 +668,7 @@ int GetFreeBlood()// (F)
return bloodNum; return bloodNum;
} }
void TriggerBlood(int x, int y, int z, int unk, int num)// (F) void TriggerBlood(int x, int y, int z, int unk, int num)
{ {
for (int i = 0; i < num; i++) for (int i = 0; i < num; i++)
{ {
@ -1041,7 +1041,7 @@ void AddWaterSparks(int x, int y, int z, int num)
} }
} }
void LaraBubbles(ITEM_INFO* item)// (F) void LaraBubbles(ITEM_INFO* item)
{ {
PHD_VECTOR pos; PHD_VECTOR pos;
int num, i; int num, i;
@ -1160,7 +1160,7 @@ void UpdateDrips()
} }
} }
void TriggerLaraDrips()// (F) void TriggerLaraDrips()
{ {
PHD_VECTOR pos; PHD_VECTOR pos;
@ -1316,7 +1316,7 @@ int ExplodingDeath(short itemNumber, int meshBits, short flags)
return item->meshBits == 0; return item->meshBits == 0;
} }
int GetFreeShockwave()// (F) int GetFreeShockwave()
{ {
for (int i = 0; i < MAX_SHOCKWAVE; i++) for (int i = 0; i < MAX_SHOCKWAVE; i++)
{ {
@ -1327,7 +1327,7 @@ int GetFreeShockwave()// (F)
return -1; return -1;
} }
void TriggerShockwave(PHD_3DPOS* pos, short innerRad, short outerRad, int speed, char r, char g, char b, char life, short angle, short flags)// (F) void TriggerShockwave(PHD_3DPOS* pos, short innerRad, short outerRad, int speed, char r, char g, char b, char life, short angle, short flags)
{ {
int s = GetFreeShockwave(); int s = GetFreeShockwave();
SHOCKWAVE_STRUCT* sptr; SHOCKWAVE_STRUCT* sptr;
@ -1459,7 +1459,7 @@ void UpdateShockwaves()
} }
} }
void TriggerExplosionBubble(int x, int y, int z, short roomNum)// (F) void TriggerExplosionBubble(int x, int y, int z, short roomNum)
{ {
int dx = LaraItem->pos.xPos - x; int dx = LaraItem->pos.xPos - x;
int dz = LaraItem->pos.zPos - z; int dz = LaraItem->pos.zPos - z;
@ -1507,7 +1507,7 @@ void TriggerExplosionBubble(int x, int y, int z, short roomNum)// (F)
} }
} }
/*void TriggerExplosionSmokeEnd(int x, int y, int z, int unk)// (F) /*void TriggerExplosionSmokeEnd(int x, int y, int z, int unk)
{ {
SPARKS* spark = &Sparks[GetFreeSpark()]; SPARKS* spark = &Sparks[GetFreeSpark()];
@ -1577,7 +1577,7 @@ void TriggerExplosionBubble(int x, int y, int z, short roomNum)// (F)
spark->size = size >> 2; spark->size = size >> 2;
} }
*/ */
/*void DrawLensFlares(ITEM_INFO* item)// (F) /*void DrawLensFlares(ITEM_INFO* item)
{ {
GAME_VECTOR pos; GAME_VECTOR pos;
@ -1589,7 +1589,7 @@ void TriggerExplosionBubble(int x, int y, int z, short roomNum)// (F)
SetUpLensFlare(0, 0, 0, &pos); SetUpLensFlare(0, 0, 0, &pos);
}*/ }*/
void TriggerLightningGlow(int x, int y, int z, byte size, byte r, byte g, byte b)// (F) void TriggerLightningGlow(int x, int y, int z, byte size, byte r, byte g, byte b)
{ {
SPARKS* spark = &Sparks[GetFreeSpark()]; SPARKS* spark = &Sparks[GetFreeSpark()];
@ -1619,7 +1619,7 @@ void TriggerLightningGlow(int x, int y, int z, byte size, byte r, byte g, byte b
spark->dSize = spark->sSize = spark->size = size + (GetRandomControl() & 3); spark->dSize = spark->sSize = spark->size = size + (GetRandomControl() & 3);
} }
void TriggerFenceSparks(int x, int y, int z, int kill, int crane)//(F) void TriggerFenceSparks(int x, int y, int z, int kill, int crane)
{ {
SPARKS* spark = &Sparks[GetFreeSpark()]; SPARKS* spark = &Sparks[GetFreeSpark()];
spark->on = 1; spark->on = 1;

View file

@ -155,7 +155,7 @@ void FlameEmitterControl(short itemNumber)
} }
} }
void FlameEmitter2Control(short itemNumber)//5A1BC, 5A638 (F) void FlameEmitter2Control(short itemNumber)
{ {
ITEM_INFO* item = &g_Level.Items[itemNumber]; ITEM_INFO* item = &g_Level.Items[itemNumber];
@ -292,14 +292,14 @@ void LavaBurn(ITEM_INFO* item)
FLOOR_INFO* floor = GetFloor(item->pos.xPos, 32000, item->pos.zPos, &roomNumber); FLOOR_INFO* floor = GetFloor(item->pos.xPos, 32000, item->pos.zPos, &roomNumber);
if (item->floor == GetFloorHeight(floor, item->pos.xPos, 32000, item->pos.zPos)) if (item->floor == GetFloorHeight(floor, item->pos.xPos, 32000, item->pos.zPos))
{ {
if (Objects[ID_KAYAK].loaded && Objects[ID_KAYAK_LARA_ANIMS].loaded) //TEMPORARILY ADDING THIS HACK FOR TESTING- // if (Objects[ID_KAYAK].loaded && Objects[ID_KAYAK_LARA_ANIMS].loaded) //TEMPORARILY ADDING THIS HACK FOR TESTING-// KayakLaraRapidsDrown works fine.
KayakLaraRapidsDrown(); // KayakLaraRapidsDrown();
else // else
{ // {
item->hitPoints = -1; item->hitPoints = -1;
item->hitStatus = true; item->hitStatus = true;
LaraBurn(); LaraBurn();
} // }
} }
} }
} }
@ -676,7 +676,7 @@ void WreckingBallControl(short itemNumber)
WBRoom = room; WBRoom = room;
} }
void FlameEmitterCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll) // (F) (D) void FlameEmitterCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll)
{ {
ITEM_INFO* item = &g_Level.Items[itemNumber]; ITEM_INFO* item = &g_Level.Items[itemNumber];

View file

@ -12,6 +12,8 @@
#include <Game\effect2.h> #include <Game\effect2.h>
#include <Game\particle\SimpleParticle.h> #include <Game\particle\SimpleParticle.h>
struct BOAT_INFO struct BOAT_INFO
{ {
int boatTurn; int boatTurn;
@ -227,38 +229,45 @@ bool SpeedBoatCanGetOff(int direction)
return true; return true;
} }
int SpeedBoatCheckGeton(short itemNum, COLL_INFO* coll) BOAT_GETON SpeedBoatCheckGeton(short itemNum, COLL_INFO* coll)
{ {
// Returns 0 if no get on, 1 if right get on and 2 if left get on and 3 if jump geton // Returns 0 if no get on, 1 if right get on and 2 if left get on and 3 if jump geton
int geton = 0; BOAT_GETON geton = BOAT_GETON::NONE;
if (Lara.gunStatus != LG_NO_ARMS) if (Lara.gunStatus != LG_NO_ARMS)
return 0; return BOAT_GETON::NONE;
ITEM_INFO* boat = &g_Level.Items[itemNum]; ITEM_INFO* boat = &g_Level.Items[itemNum];
// Is Lara actually close enough to get on the thing?
if (!TestBoundsCollide(boat, LaraItem, coll->radius))
return BOAT_GETON::NONE;
if (!TestCollision(boat, LaraItem))
return BOAT_GETON::NONE;
int dist = (LaraItem->pos.zPos - boat->pos.zPos) * phd_cos(-boat->pos.yRot) - (LaraItem->pos.xPos - boat->pos.xPos) * phd_sin(-boat->pos.yRot); int dist = (LaraItem->pos.zPos - boat->pos.zPos) * phd_cos(-boat->pos.yRot) - (LaraItem->pos.xPos - boat->pos.xPos) * phd_sin(-boat->pos.yRot);
if (dist > 200) if (dist > 200)
return 0; return BOAT_GETON::NONE;
// Check if Lara is close enough and in right position to get onto boat // Check if Lara is close enough and in right position to get onto boat
short rot = boat->pos.yRot - LaraItem->pos.yRot; short rot = boat->pos.yRot - LaraItem->pos.yRot;
if (Lara.waterStatus == LW_SURFACE || Lara.waterStatus == LW_WADE) if (Lara.waterStatus == LW_SURFACE || Lara.waterStatus == LW_WADE)
{ {
if (!(TrInput & IN_ACTION) || LaraItem->gravityStatus || boat->speed) if (!(TrInput & IN_ACTION) || LaraItem->gravityStatus || boat->speed)
return 0; return BOAT_GETON::NONE;
if (rot > ANGLE(45) && rot < ANGLE(135)) if (rot > ANGLE(45) && rot < ANGLE(135))
geton = 1; // Right geton = BOAT_GETON::WATER_RIGHT; // Right
else if (rot > -ANGLE(135) && rot < -ANGLE(45)) else if (rot > -ANGLE(135) && rot < -ANGLE(45))
geton = 2; // Left geton = BOAT_GETON::WATER_LEFT; // Left
} }
else if (Lara.waterStatus == LW_ABOVE_WATER) else if (Lara.waterStatus == LW_ABOVE_WATER)
{ {
if (LaraItem->fallspeed > 0) if (LaraItem->fallspeed > 0)
{ {
if (rot > -ANGLE(135) && rot < ANGLE(135) && (LaraItem->pos.yPos + 512) > boat->pos.yPos) if (rot > -ANGLE(135) && rot < ANGLE(135) && (LaraItem->pos.yPos + 512) > boat->pos.yPos)
geton = 3; // Jump geton = BOAT_GETON::JUMP; // Jump
} }
else if (LaraItem->fallspeed == 0) else if (LaraItem->fallspeed == 0)
{ {
@ -267,23 +276,12 @@ int SpeedBoatCheckGeton(short itemNum, COLL_INFO* coll)
if (LaraItem->pos.xPos == boat->pos.xPos if (LaraItem->pos.xPos == boat->pos.xPos
&& LaraItem->pos.yPos == boat->pos.yPos && LaraItem->pos.yPos == boat->pos.yPos
&& LaraItem->pos.zPos == boat->pos.zPos) && LaraItem->pos.zPos == boat->pos.zPos)
geton = 4; // Must have started on same spot as boat geton = BOAT_GETON::STARTPOS; // Must have started on same spot as boat
else else
geton = 3; // Jump geton = BOAT_GETON::JUMP; // Jump
} }
} }
} }
if (!geton)
return 0;
// Is Lara actually close enough to get on the thing?
if (!TestBoundsCollide(boat, LaraItem, coll->radius))
return 0;
if (!TestCollision(boat, LaraItem))
return 0;
return geton; return geton;
} }

View file

@ -1,14 +1,20 @@
#pragma once #pragma once
#include "items.h" #include "items.h"
#include "collide.h" #include "collide.h"
enum BOAT_GETON {
NONE = 0,
WATER_RIGHT = 1,
WATER_LEFT = 2,
JUMP = 3,
STARTPOS=4
};
void InitialiseSpeedBoat(short itemNum); void InitialiseSpeedBoat(short itemNum);
void SpeedBoatCollision(short itemNum, ITEM_INFO* litem, COLL_INFO* coll); void SpeedBoatCollision(short itemNum, ITEM_INFO* litem, COLL_INFO* coll);
void SpeedBoatControl(short itemNumber); void SpeedBoatControl(short itemNumber);
void DoBoatWakeEffect(ITEM_INFO* boat); void DoBoatWakeEffect(ITEM_INFO* boat);
void SpeedBoatGetOff(ITEM_INFO* boat); void SpeedBoatGetOff(ITEM_INFO* boat);
bool SpeedBoatCanGetOff(int direction); bool SpeedBoatCanGetOff(int direction);
int SpeedBoatCheckGeton(short itemNum, COLL_INFO* coll); BOAT_GETON SpeedBoatCheckGeton(short itemNum, COLL_INFO* coll);
int SpeedBoatTestWaterHeight(ITEM_INFO* item, int zOff, int xOff, PHD_VECTOR* pos); int SpeedBoatTestWaterHeight(ITEM_INFO* item, int zOff, int xOff, PHD_VECTOR* pos);
void SpeedBoatDoBoatShift(int itemNum); void SpeedBoatDoBoatShift(int itemNum);
int SpeedBoatDoBoatDynamics(int height, int fallspeed, int* y); int SpeedBoatDoBoatDynamics(int height, int fallspeed, int* y);

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,25 @@
#pragma once #pragma once
#include "items.h" #include "items.h"
#include "collide.h" #include "collide.h"
struct JEEP_INFO {
short rot1;
short rot2;
short rot3;
short rot4;
int velocity;
int revs;
short engineRevs;
short trackMesh;
int jeepTurn;
int fallSpeed;
short momentumAngle;
short extraRotation;
short unknown0;
int pitch;
short flags;
short unknown1;
short unknown2;
};
void InitialiseJeep(short itemNumber); void InitialiseJeep(short itemNumber);
void JeepCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll); void JeepCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll);
int JeepControl(void); int JeepControl(void);

View file

@ -18,7 +18,36 @@
#include "prng.h" #include "prng.h"
using namespace T5M::Math::Random; using namespace T5M::Math::Random;
// TODO: need to fix the bug about the shift, i dont know why it appear but it's in MotorbikeDynamics() /*collision stuff*/
#define BIKE_FRONT 500
#define BIKE_SIDE 350
#define BIKE_RADIUS 500
#define MOTORBIKE_SLIP 100
#define MOTORBIKE_FRICTION 0x180
/*movement stuff*/
#define MIN_MOMENTUM_TURN ANGLE(4.0f)
#define MAX_MOMENTUM_TURN ANGLE(1.5f)
#define MOTORBIKE_MAX_MOM_TURN ANGLE(150.0f)
#define MOTORBIKE_DEFAULT_HTURN ANGLE(1.5f)
#define MOTORBIKE_ACCEL_1 0x4000
#define MOTORBIKE_ACCEL_2 0x7000
#define MOTORBIKE_ACCEL_MAX 0xC000 //with the boost
#define MOTORBIKE_ACCEL 0x8000 //without the boost
#define MOTORBIKE_BIG_SLOWDOWN 0x3000
#define MOTORBIKE_SLOWDOWN1 0x440
#define MOTORBIKE_SLOWDOWN2 0x600
#define MOTORBIKE_HTURN ANGLE(0.5f)
#define MOTORBIKE_MAX_HTURN ANGLE(5.0f)
#define MOTORBIKE_PITCH_SLOWDOWN 0x8000
#define MOTORBIKE_PITCH_MAX 0xA000
#define MOTORBIKE_BACKING_VEL 0x800
/*controls*/
#define IN_ACCELERATE IN_ACTION
#define IN_REVERSE IN_BACK
#define IN_BRAKE IN_JUMP
#define IN_TURBO IN_SPRINT
#define IN_TURNR (IN_RIGHT|IN_RSTEP)
#define IN_TURNL (IN_LEFT|IN_LSTEP)
enum MOTORBIKE_STATE enum MOTORBIKE_STATE
{ {
@ -47,26 +76,45 @@ enum MOTORBIKE_STATE
BIKE_MOVING_RIGHT BIKE_MOVING_RIGHT
}; };
enum MOTORBIKE_ANIMS
{
BA_DIE = 0,
BA_BRAKE = 1,
BA_MOVE_FORWARD = 2,
BA_START_LEFT = 3,
BA_LEFT = 4,
BA_END_LEFT = 5,
BA_START_FALL = 6,
BA_FALLING = 7,
BA_FALL_LAND = 8,
BA_ENTER = 9,
BA_EXIT = 10,
BA_FRONT_HIT = 11,
BA_BACK_HIT = 12,
BA_LEFT_HIT = 13,
BA_RIGHT_HIT = 14,
BA_REV = 15, //unused? it looks like she's revving the engine but I've never seen it before
BA_SLOWDOWN = 16,
BA_UNUSED = 17,
BA_IDLE = 18,
BA_START_RIGHT = 19,
BA_RIGHT = 20,
BA_END_RIGHT = 21,
BA_START_JUMP = 22,
BA_JUMPING = 23,
BA_JUMP_LAND = 24,
BA_KICKSTART = 25,
BA_BACK_START = 26,
BA_BACK_LOOP = 27,
BA_UNLOCK = 28
};
#define BIKE_IDLE_ANIM 18 enum MOTORBIKE_FLAGS
#define BIKE_ENTER_ANIM 9 {
#define BIKE_UNLOCK_ANIM 28 FL_BOOST = 1,
#define BIKE_DEATH_FLAG 0x80 FL_FALLING = 64,
#define BIKE_FRONT 500 FL_DEATH = 128
#define BIKE_SIDE 350 };
#define BIKE_RADIUS 500
#define MIN_MOMENTUM_TURN ANGLE(4.0f)
#define MAX_MOMENTUM_TURN (ANGLE(1.0f)+(ANGLE(1.0f)/2))
#define MOTORBIKE_MAX_MOM_TURN ANGLE(150.0f)
#define MOTORBIKE_DEFAULT_HTURN 273
#define MOTORBIKE_ACCEL_1 0x4000
#define MOTORBIKE_ACCEL_2 0x7000
#define MOTORBIKE_ACCEL_MAX 0xC000
#define MOTORBIKE_SLIP 100
#define MOTORBIKE_SLIP_SIDE 50
#define MOTORBIKE_HTURN (ANGLE(1.0f) / 2)
#define MOTORBIKE_MAX_HTURN ANGLE(5.0f)
#define MOTORBIKE_FRICTION 0x180
extern Inventory g_Inventory; extern Inventory g_Inventory;
static char ExhaustStart = 0; static char ExhaustStart = 0;
@ -294,11 +342,11 @@ void MotorbikeCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* coll)
motorbike = GetMotorbikeInfo(item); motorbike = GetMotorbikeInfo(item);
// update motorbike light // update motorbike light
if (motorbike->bikeTurn) //if (motorbike->bikeTurn)
{ // {
motorbike->bikeTurn -= (motorbike->bikeTurn / 8) - 1; // motorbike->bikeTurn -= (motorbike->bikeTurn / 8) - 1;
DrawMotorbikeLight(item); DrawMotorbikeLight(item);
} // }
if (GetOnMotorBike(itemNumber)) if (GetOnMotorBike(itemNumber))
{ {
@ -321,15 +369,15 @@ void MotorbikeCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* coll)
{ {
if (g_Inventory.GetSelectedObject() == ID_PUZZLE_ITEM1) if (g_Inventory.GetSelectedObject() == ID_PUZZLE_ITEM1)
{ {
laraitem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + BIKE_UNLOCK_ANIM; laraitem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + BA_UNLOCK;
g_Inventory.SetSelectedObject(NO_ITEM); g_Inventory.SetSelectedObject(NO_ITEM);
} }
else else
{ {
laraitem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + BIKE_ENTER_ANIM; laraitem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + BA_ENTER;
} }
laraitem->goalAnimState = BIKE_ENTER_ANIM; laraitem->goalAnimState = BIKE_ENTER;
laraitem->currentAnimState = BIKE_ENTER_ANIM; laraitem->currentAnimState = BIKE_ENTER;
} }
laraitem->frameNumber = g_Level.Anims[laraitem->animNumber].frameBase; laraitem->frameNumber = g_Level.Anims[laraitem->animNumber].frameBase;
@ -460,29 +508,6 @@ static void DrawMotorBikeSmoke(ITEM_INFO* item)
} }
} }
static void QuadbikeExplode(ITEM_INFO* item)
{
if (g_Level.Rooms[item->roomNumber].flags & ENV_FLAG_WATER)
{
TriggerUnderwaterExplosion(item, 1);
}
else
{
TriggerExplosionSparks(item->pos.xPos, item->pos.yPos, item->pos.zPos, 3, -2, 0, item->roomNumber);
for (int i = 0; i < 3; i++)
TriggerExplosionSparks(item->pos.xPos, item->pos.yPos, item->pos.zPos, 3, -1, 0, item->roomNumber);
}
TriggerShockwave(&PHD_3DPOS(item->pos.xPos, item->pos.yPos - 128, item->pos.zPos, 0, item->pos.yRot, 0), 50, 180, 40, 160, 60, 60, 64, ANGLE(45), 0);
ExplodingDeath(Lara.Vehicle, 0xfffffffe, 1);
// KillItem(Lara.Vehicle);
item->status = ITEM_DEACTIVATED;
SoundEffect(SFX_EXPLOSION1, NULL, 0);
SoundEffect(SFX_EXPLOSION2, NULL, 0);
Lara.Vehicle = NO_ITEM;
}
static void MotorBikeExplode(ITEM_INFO* item) static void MotorBikeExplode(ITEM_INFO* item)
{ {
if (g_Level.Rooms[item->roomNumber].flags & (ENV_FLAG_WATER|ENV_FLAG_SWAMP)) if (g_Level.Rooms[item->roomNumber].flags & (ENV_FLAG_WATER|ENV_FLAG_SWAMP))
@ -500,7 +525,6 @@ static void MotorBikeExplode(ITEM_INFO* item)
ExplodingDeath(Lara.Vehicle, -2, 256); ExplodingDeath(Lara.Vehicle, -2, 256);
ExplodingDeath(Lara.itemNumber, -2, 258); // enable blood ExplodingDeath(Lara.itemNumber, -2, 258); // enable blood
LaraItem->hitPoints = 0; LaraItem->hitPoints = 0;
// KillItem(Lara.Vehicle);
item->status = ITEM_DEACTIVATED; item->status = ITEM_DEACTIVATED;
SoundEffect(SFX_EXPLOSION1, NULL, 0); SoundEffect(SFX_EXPLOSION1, NULL, 0);
@ -557,9 +581,7 @@ static int DoMotorBikeDynamics(int height, int fallspeed, int* y, int flags)
if (height <= *y) if (height <= *y)
{ {
if (flags) if (flags)
{
return fallspeed; return fallspeed;
}
else else
{ {
// On ground // On ground
@ -620,6 +642,67 @@ static int GetMotorbikeCollisionAnim(ITEM_INFO* item, PHD_VECTOR* pos)
return 0; return 0;
} }
void MotorbikeBaddieCollision(ITEM_INFO* bike)
{
int x, y, z, i;
std::vector<short> roomsList;
roomsList.push_back(bike->roomNumber);
ROOM_INFO* room = &g_Level.Rooms[bike->roomNumber];
for (i = 0; i < room->doors.size(); i++)
{
roomsList.push_back(room->doors[i].room);
}
for (int i = 0; i < roomsList.size(); i++)
{
short itemNum = g_Level.Rooms[roomsList[i]].itemNumber;
while (itemNum != NO_ITEM)
{
ITEM_INFO* item = &g_Level.Items[itemNum];
if (item->collidable && item->status != IFLAG_INVISIBLE && item != LaraItem && item != bike)
{
OBJECT_INFO* object = &Objects[item->objectNumber];
if (object->collision && (object->intelligent))
{
x = bike->pos.xPos - item->pos.xPos;
y = bike->pos.yPos - item->pos.yPos;
z = bike->pos.zPos - item->pos.zPos;
if (x > -2048 && x < 2048 && z > -2048 && z < 2048 && y > -2048 && y < 2048)
{
if (item->objectNumber == ID_ROLLINGBALL)
{
if (TestBoundsCollide(item, LaraItem, 100))
{
if (LaraItem->hitPoints > 0)
{
DoLotsOfBlood(LaraItem->pos.xPos, LaraItem->pos.yPos - (STEP_SIZE * 2), LaraItem->pos.zPos, GetRandomControl() & 3, LaraItem->pos.yRot, LaraItem->roomNumber, 5);
LaraItem->hitPoints -= 8;
}
}
}
else
{
if (TestBoundsCollide(item, bike, BIKE_FRONT))
{
DoLotsOfBlood(bike->pos.xPos, bike->pos.yPos, bike->pos.zPos, GetRandomControl() & 3, LaraItem->pos.yRot, LaraItem->roomNumber, 3);
item->hitPoints = 0;
}
}
}
}
}
itemNum = item->nextItem;
}
}
}
static int MotorBikeDynamics(ITEM_INFO* item) static int MotorBikeDynamics(ITEM_INFO* item)
{ {
MOTORBIKE_INFO* motorbike; MOTORBIKE_INFO* motorbike;
@ -634,11 +717,11 @@ static int MotorBikeDynamics(ITEM_INFO* item)
NoGetOff = false; NoGetOff = false;
motorbike = GetMotorbikeInfo(item); motorbike = GetMotorbikeInfo(item);
hfl_old = TestMotorbikeHeight(item, 500, -350, &fl_old); hfl_old = TestMotorbikeHeight(item, BIKE_FRONT, -BIKE_SIDE, &fl_old);
hmf_old = TestMotorbikeHeight(item, 500, 128, &mtf_old); hmf_old = TestMotorbikeHeight(item, BIKE_FRONT, STEP_SIZE / 2, &mtf_old);
hbl_old = TestMotorbikeHeight(item, -500, -350, &bl_old); hbl_old = TestMotorbikeHeight(item, -BIKE_FRONT, -BIKE_SIDE, &bl_old);
hbr_old = TestMotorbikeHeight(item, -500, 128, &br_old); hbr_old = TestMotorbikeHeight(item, -BIKE_FRONT, STEP_SIZE / 2, &br_old);
hmtb_old = TestMotorbikeHeight(item, -500, 0, &mtb_old); hmtb_old = TestMotorbikeHeight(item, -BIKE_FRONT, 0, &mtb_old);
oldpos.x = item->pos.xPos; oldpos.x = item->pos.xPos;
oldpos.y = item->pos.yPos; oldpos.y = item->pos.yPos;
@ -685,7 +768,7 @@ static int MotorBikeDynamics(ITEM_INFO* item)
rot = item->pos.yRot - motorbike->momentumAngle; rot = item->pos.yRot - motorbike->momentumAngle;
momentum = MIN_MOMENTUM_TURN - ((2 * motorbike->velocity) / SECTOR(1)); momentum = MIN_MOMENTUM_TURN - ((2 * motorbike->velocity) / SECTOR(1));
if (!(TrInput & IN_ACTION) && motorbike->velocity > 0) if (!(TrInput & IN_ACCELERATE) && motorbike->velocity > 0)
momentum += (momentum / 2); momentum += (momentum / 2);
if (rot < -MAX_MOMENTUM_TURN) if (rot < -MAX_MOMENTUM_TURN)
@ -731,10 +814,10 @@ static int MotorBikeDynamics(ITEM_INFO* item)
if (item->pos.yPos >= height) if (item->pos.yPos >= height)
{ {
short anglex = 100 * phd_sin(item->pos.xRot); short anglex = MOTORBIKE_SLIP * phd_sin(item->pos.xRot);
if (abs(anglex) > 16) if (abs(anglex) > 16)
{ {
short anglex2 = 100 * phd_sin(item->pos.xRot); short anglex2 = MOTORBIKE_SLIP * phd_sin(item->pos.xRot);
if (anglex < 0) if (anglex < 0)
anglex2 = -anglex; anglex2 = -anglex;
if (anglex2 > 24) if (anglex2 > 24)
@ -743,7 +826,7 @@ static int MotorBikeDynamics(ITEM_INFO* item)
motorbike->velocity -= anglex; motorbike->velocity -= anglex;
} }
short anglez = 100 * phd_sin(item->pos.zRot); short anglez = MOTORBIKE_SLIP * phd_sin(item->pos.zRot);
if (abs(anglez) > 32) if (abs(anglez) > 32)
{ {
short ang, angabs; short ang, angabs;
@ -758,42 +841,38 @@ static int MotorBikeDynamics(ITEM_INFO* item)
} }
} }
if (motorbike->velocity <= 0x8000 || motorbike->flags & 1) // boost if (motorbike->velocity <= MOTORBIKE_ACCEL || motorbike->flags & FL_BOOST)
{ {
if (motorbike->velocity <= 0xC000) if (motorbike->velocity <= MOTORBIKE_ACCEL_MAX)
{ {
if (motorbike->velocity < -0x3000) if (motorbike->velocity < -MOTORBIKE_BIG_SLOWDOWN)
motorbike->velocity = -0x3000; motorbike->velocity = -MOTORBIKE_BIG_SLOWDOWN;
} }
else else
{ motorbike->velocity = MOTORBIKE_ACCEL_MAX;
motorbike->velocity = 0xC000;
}
} }
else else
{ motorbike->velocity -= MOTORBIKE_SLOWDOWN1;
motorbike->velocity -= 1088;
}
moved.x = item->pos.xPos; moved.x = item->pos.xPos;
moved.z = item->pos.zPos; moved.z = item->pos.zPos;
if (!(item->flags & ONESHOT)) if (!(item->flags & ONESHOT))
{ {
//MotorBikeBaddieCollision(item); MotorbikeBaddieCollision(item);
//MotorBikeStaticCollision(item->pos.x, item->pos.y, item->pos.z, item->room_number, (WALL_L / 2)); //MotorBikeStaticCollision(item->pos.x, item->pos.y, item->pos.z, item->room_number, (WALL_L / 2));
} }
int rot1 = 0; int rot1 = 0;
int rot2 = 0; int rot2 = 0;
int hfl = TestMotorbikeHeight(item, 500, -350, &fl); int hfl = TestMotorbikeHeight(item, BIKE_FRONT, -BIKE_SIDE, &fl);
if (hfl < fl_old.y - STEP_SIZE) if (hfl < fl_old.y - STEP_SIZE)
{ {
rot1 = abs(4 * DoMotorbikeShift(item, &fl, &fl_old)); rot1 = abs(4 * DoMotorbikeShift(item, &fl, &fl_old));
} }
int hbl = TestMotorbikeHeight(item, -500, -350, &bl); int hbl = TestMotorbikeHeight(item, -BIKE_FRONT, -BIKE_SIDE, &bl);
if (hbl < bl_old.y - STEP_SIZE) if (hbl < bl_old.y - STEP_SIZE)
{ {
if (rot1) if (rot1)
@ -802,15 +881,15 @@ static int MotorBikeDynamics(ITEM_INFO* item)
rot1 -= abs(4 * DoMotorbikeShift(item, &bl, &bl_old)); rot1 -= abs(4 * DoMotorbikeShift(item, &bl, &bl_old));
} }
int hmtf = TestMotorbikeHeight(item, 500, 128, &mtf); int hmtf = TestMotorbikeHeight(item, BIKE_FRONT, STEP_SIZE / 2, &mtf);
if (hmtf < mtf_old.y - STEP_SIZE) if (hmtf < mtf_old.y - STEP_SIZE)
rot2 -= abs(4 * DoMotorbikeShift(item, &bl, &bl_old)); rot2 -= abs(4 * DoMotorbikeShift(item, &bl, &bl_old));
int hmtb = TestMotorbikeHeight(item, -500, 0, &mtb); int hmtb = TestMotorbikeHeight(item, -BIKE_FRONT, 0, &mtb);
if (hmtb < mtb_old.y - STEP_SIZE) if (hmtb < mtb_old.y - STEP_SIZE)
DoMotorbikeShift(item, &mtb, &mtb_old); DoMotorbikeShift(item, &mtb, &mtb_old);
int hbr = TestMotorbikeHeight(item, -500, 128, &br); int hbr = TestMotorbikeHeight(item, -BIKE_FRONT, STEP_SIZE / 2, &br);
if (hbr < br_old.y - STEP_SIZE) if (hbr < br_old.y - STEP_SIZE)
{ {
if (rot2) if (rot2)
@ -844,7 +923,7 @@ static int MotorBikeDynamics(ITEM_INFO* item)
if (collide) if (collide)
{ {
newspeed = ((item->pos.zPos - oldpos.z) * phd_cos(motorbike->momentumAngle) + (item->pos.xPos - oldpos.x) * phd_sin(motorbike->momentumAngle)) * 256; newspeed = ((item->pos.zPos - oldpos.z) * phd_cos(motorbike->momentumAngle) + (item->pos.xPos - oldpos.x) * phd_sin(motorbike->momentumAngle)) * 256;
if (&g_Level.Items[Lara.Vehicle] == item && motorbike->velocity >= 0x8000 && newspeed < (motorbike->velocity - 10)) if (&g_Level.Items[Lara.Vehicle] == item && motorbike->velocity >= MOTORBIKE_ACCEL && newspeed < (motorbike->velocity - 10))
{ {
LaraItem->hitPoints -= ((motorbike->velocity - newspeed) / 128); LaraItem->hitPoints -= ((motorbike->velocity - newspeed) / 128);
LaraItem->hitStatus = true; LaraItem->hitStatus = true;
@ -855,8 +934,8 @@ static int MotorBikeDynamics(ITEM_INFO* item)
else if (motorbike->velocity < 0 && newspeed > motorbike->velocity) else if (motorbike->velocity < 0 && newspeed > motorbike->velocity)
motorbike->velocity = (newspeed > 0) ? 0 : newspeed; motorbike->velocity = (newspeed > 0) ? 0 : newspeed;
if (motorbike->velocity < -0x3000) if (motorbike->velocity < -MOTORBIKE_BIG_SLOWDOWN)
motorbike->velocity = -0x3000; motorbike->velocity = -MOTORBIKE_BIG_SLOWDOWN;
} }
return collide; return collide;
@ -872,9 +951,9 @@ static BOOL MotorbikeCanGetOff(void)
item = &g_Level.Items[Lara.Vehicle]; item = &g_Level.Items[Lara.Vehicle];
angle = item->pos.yRot + 0x4000; angle = item->pos.yRot + 0x4000;
x = item->pos.xPos + 500 * phd_sin(angle); x = item->pos.xPos + BIKE_RADIUS * phd_sin(angle);
y = item->pos.yPos; y = item->pos.yPos;
z = item->pos.zPos + 500 * phd_cos(angle); z = item->pos.zPos + BIKE_RADIUS * phd_cos(angle);
room_number = item->roomNumber; room_number = item->roomNumber;
floor = GetFloor(x, y, z, &room_number); floor = GetFloor(x, y, z, &room_number);
@ -916,92 +995,103 @@ static void AnimateMotorbike(ITEM_INFO* item, int collide, BOOL dead)
{ {
case BIKE_IDLE: case BIKE_IDLE:
if (dead) if (dead)
{
LaraItem->goalAnimState = BIKE_DEATH; LaraItem->goalAnimState = BIKE_DEATH;
} else
else if (!(TrInput & IN_JUMP) && !(TrInput & IN_RIGHT) || motorbike->velocity || NoGetOff)
{ {
if (TrInput & IN_ACTION && !(TrInput & IN_JUMP))
LaraItem->goalAnimState = BIKE_MOVING_FRONT; bool dismount;
else if (TrInput & IN_BACK) if ((TrInput & IN_TURNR) && (TrInput & IN_BRAKE))
LaraItem->goalAnimState = BIKE_MOVING_BACK; dismount = true;
} else if (!((TrInput & IN_TURNR) && (TrInput & IN_BRAKE)))
else if (TrInput & IN_JUMP && TrInput & IN_RIGHT && MotorbikeCanGetOff()) dismount = false;
{
LaraItem->goalAnimState = BIKE_EXIT; if (!dismount || motorbike->velocity || NoGetOff)
{
if (TrInput & IN_ACCELERATE && !(TrInput & IN_BRAKE))
LaraItem->goalAnimState = BIKE_MOVING_FRONT;
else if (TrInput & IN_REVERSE)
LaraItem->goalAnimState = BIKE_MOVING_BACK;
}
else if (dismount && MotorbikeCanGetOff())
{
LaraItem->goalAnimState = BIKE_EXIT;
}
else
{
LaraItem->goalAnimState = BIKE_IDLE;
}
} }
break; break;
case BIKE_MOVING_FRONT: case BIKE_MOVING_FRONT:
if (dead) if (dead)
{ {
if (motorbike->velocity <= 0x4000) if (motorbike->velocity <= MOTORBIKE_ACCEL_1)
LaraItem->goalAnimState = BIKE_DEATH; LaraItem->goalAnimState = BIKE_DEATH;
else else
LaraItem->goalAnimState = BIKE_EMPTY5; LaraItem->goalAnimState = BIKE_EMPTY5;
} }
else if (motorbike->velocity & -256 || TrInput & (IN_ACTION | IN_JUMP)) else if (motorbike->velocity & -256 || TrInput & (IN_ACCELERATE | IN_BRAKE))
{ {
if (TrInput & IN_LEFT) if (TrInput & IN_TURNL)
{
LaraItem->goalAnimState = BIKE_MOVING_LEFT; LaraItem->goalAnimState = BIKE_MOVING_LEFT;
} else if (TrInput & IN_TURNR)
else if (TrInput & IN_RIGHT)
{
LaraItem->goalAnimState = BIKE_MOVING_RIGHT; LaraItem->goalAnimState = BIKE_MOVING_RIGHT;
} else if (TrInput & IN_BRAKE)
else if (TrInput & IN_JUMP)
{ {
if (motorbike->velocity <= 0x5554) if (motorbike->velocity <= 0x5554)
LaraItem->goalAnimState = BIKE_EMPTY3; LaraItem->goalAnimState = BIKE_EMPTY3;
else else
LaraItem->goalAnimState = BIKE_STOP; LaraItem->goalAnimState = BIKE_STOP;
} }
else if (TrInput & IN_BACK && motorbike->velocity <= 0x800) else if (TrInput & IN_REVERSE && motorbike->velocity <= MOTORBIKE_BACKING_VEL)
{
LaraItem->goalAnimState = BIKE_MOVING_BACK; LaraItem->goalAnimState = BIKE_MOVING_BACK;
} else if (motorbike->velocity == 0)
LaraItem->goalAnimState = BIKE_IDLE;
} }
else else
{
LaraItem->goalAnimState = BIKE_IDLE; LaraItem->goalAnimState = BIKE_IDLE;
}
break; break;
case BIKE_MOVING_LEFT: case BIKE_MOVING_LEFT:
if (motorbike->velocity & -256) if (motorbike->velocity & -256)
{ {
if (TrInput & IN_RIGHT || !(TrInput & IN_LEFT)) if (TrInput & IN_TURNR || !(TrInput & IN_TURNL))
LaraItem->goalAnimState = BIKE_MOVING_FRONT; LaraItem->goalAnimState = BIKE_MOVING_FRONT;
} }
else else
{
LaraItem->goalAnimState = BIKE_IDLE; LaraItem->goalAnimState = BIKE_IDLE;
} if (motorbike->velocity == 0)
LaraItem->goalAnimState = BIKE_IDLE;
break; break;
case BIKE_MOVING_BACK: case BIKE_MOVING_BACK:
if (!(TrInput & IN_BACK)) if (TrInput & IN_REVERSE)
LaraItem->goalAnimState = BIKE_IDLE;
else
LaraItem->goalAnimState = BIKE_MOVING_BACK_LOOP; LaraItem->goalAnimState = BIKE_MOVING_BACK_LOOP;
else
LaraItem->goalAnimState = BIKE_IDLE;
break; break;
case BIKE_MOVING_RIGHT: case BIKE_MOVING_RIGHT:
if (motorbike->velocity & -256) if (motorbike->velocity & -256)
{ {
if (TrInput & IN_LEFT || !(TrInput & IN_RIGHT)) if (TrInput & IN_TURNL || !(TrInput & IN_TURNR))
LaraItem->goalAnimState = BIKE_MOVING_FRONT; LaraItem->goalAnimState = BIKE_MOVING_FRONT;
} }
else else
{
LaraItem->goalAnimState = BIKE_IDLE; LaraItem->goalAnimState = BIKE_IDLE;
} if (motorbike->velocity == 0)
LaraItem->goalAnimState = BIKE_IDLE;
break; break;
case BIKE_EMPTY3: case BIKE_EMPTY3:
case BIKE_STOP: case BIKE_STOP:
case BIKE_ACCELERATE: case BIKE_ACCELERATE:
if (motorbike->velocity & -256) if (motorbike->velocity & -256)
{ {
if (TrInput & IN_LEFT) if (TrInput & IN_TURNL)
LaraItem->goalAnimState = BIKE_MOVING_LEFT; LaraItem->goalAnimState = BIKE_MOVING_LEFT;
else if (TrInput & IN_RIGHT) if (TrInput & IN_TURNR)
LaraItem->goalAnimState = BIKE_MOVING_RIGHT; LaraItem->goalAnimState = BIKE_MOVING_RIGHT;
} }
else else
@ -1009,6 +1099,7 @@ static void AnimateMotorbike(ITEM_INFO* item, int collide, BOOL dead)
LaraItem->goalAnimState = BIKE_IDLE; LaraItem->goalAnimState = BIKE_IDLE;
} }
break; break;
case BIKE_FALLING: case BIKE_FALLING:
if (item->pos.yPos == item->floor) if (item->pos.yPos == item->floor)
{ {
@ -1024,44 +1115,48 @@ static void AnimateMotorbike(ITEM_INFO* item, int collide, BOOL dead)
} }
} }
else if (item->fallspeed > 220) else if (item->fallspeed > 220)
{ motorbike->flags |= FL_FALLING;
motorbike->flags |= 0x40;
}
break; break;
case BIKE_HITFRONT: case BIKE_HITFRONT:
case BIKE_HITBACK: case BIKE_HITBACK:
case BIKE_HITRIGHT: case BIKE_HITRIGHT:
case BIKE_HITLEFT: case BIKE_HITLEFT:
if (TrInput & (IN_ACTION | IN_JUMP)) if (TrInput & (IN_ACCELERATE | IN_BRAKE))
LaraItem->goalAnimState = BIKE_MOVING_FRONT; LaraItem->goalAnimState = BIKE_MOVING_FRONT;
break; break;
} }
} }
else else
{ {
switch (collide) switch (collide)
{ {
case 13: case 13:
LaraItem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + 12; LaraItem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + BA_BACK_HIT;
LaraItem->currentAnimState = BIKE_HITBACK; LaraItem->currentAnimState = BIKE_HITBACK;
LaraItem->goalAnimState = BIKE_HITBACK; LaraItem->goalAnimState = BIKE_HITBACK;
LaraItem->frameNumber = g_Level.Anims[LaraItem->animNumber].frameBase; LaraItem->frameNumber = g_Level.Anims[LaraItem->animNumber].frameBase;
break; break;
case 14: case 14:
LaraItem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + 11; LaraItem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + BA_FRONT_HIT;
LaraItem->currentAnimState = BIKE_HITFRONT; LaraItem->currentAnimState = BIKE_HITFRONT;
LaraItem->goalAnimState = BIKE_HITFRONT; LaraItem->goalAnimState = BIKE_HITFRONT;
LaraItem->frameNumber = g_Level.Anims[LaraItem->animNumber].frameBase; LaraItem->frameNumber = g_Level.Anims[LaraItem->animNumber].frameBase;
break; break;
case 11: case 11:
LaraItem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + 14; LaraItem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + BA_RIGHT_HIT;
LaraItem->currentAnimState = BIKE_HITRIGHT; LaraItem->currentAnimState = BIKE_HITRIGHT;
LaraItem->goalAnimState = BIKE_HITRIGHT; LaraItem->goalAnimState = BIKE_HITRIGHT;
LaraItem->frameNumber = g_Level.Anims[LaraItem->animNumber].frameBase; LaraItem->frameNumber = g_Level.Anims[LaraItem->animNumber].frameBase;
break; break;
default: default:
case 12: case 12:
LaraItem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + 13; LaraItem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + BA_LEFT_HIT;
LaraItem->currentAnimState = BIKE_HITLEFT; LaraItem->currentAnimState = BIKE_HITLEFT;
LaraItem->goalAnimState = BIKE_HITLEFT; LaraItem->goalAnimState = BIKE_HITLEFT;
LaraItem->frameNumber = g_Level.Anims[LaraItem->animNumber].frameBase; LaraItem->frameNumber = g_Level.Anims[LaraItem->animNumber].frameBase;
@ -1072,9 +1167,9 @@ static void AnimateMotorbike(ITEM_INFO* item, int collide, BOOL dead)
else else
{ {
if (motorbike->velocity >= 0) if (motorbike->velocity >= 0)
LaraItem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + 22; LaraItem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + BA_START_JUMP;
else else
LaraItem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + 6; LaraItem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + BA_START_FALL;
LaraItem->frameNumber = g_Level.Anims[LaraItem->animNumber].frameBase; LaraItem->frameNumber = g_Level.Anims[LaraItem->animNumber].frameBase;
LaraItem->currentAnimState = BIKE_FALLING; LaraItem->currentAnimState = BIKE_FALLING;
LaraItem->goalAnimState = BIKE_FALLING; LaraItem->goalAnimState = BIKE_FALLING;
@ -1083,7 +1178,6 @@ static void AnimateMotorbike(ITEM_INFO* item, int collide, BOOL dead)
if (g_Level.Rooms[item->roomNumber].flags & (ENV_FLAG_WATER|ENV_FLAG_SWAMP)) if (g_Level.Rooms[item->roomNumber].flags & (ENV_FLAG_WATER|ENV_FLAG_SWAMP))
{ {
LaraItem->goalAnimState = BIKE_EMPTY6; LaraItem->goalAnimState = BIKE_EMPTY6;
LaraItem->hitPoints = 0;
MotorBikeExplode(item); MotorBikeExplode(item);
} }
} }
@ -1113,50 +1207,56 @@ static int MotorbikeUserControl(ITEM_INFO* item, int height, int* pitch)
motorbike->revs = 0; motorbike->revs = 0;
} }
if ((TrInput & IN_SPRINT) && (TrInput & IN_ACTION) && DashTimer) if ((TrInput & IN_TURBO) && (TrInput & IN_ACCELERATE) && DashTimer)
{ {
motorbike->flags |= 0x1; motorbike->flags |= FL_BOOST;
DashTimer -= 2; DashTimer -= 2;
if (DashTimer > 0x8000) if (DashTimer > MOTORBIKE_ACCEL)//hmm
{ {
motorbike->flags &= ~0x1; motorbike->flags &= ~FL_BOOST;
DashTimer = 0; DashTimer = 0;
} }
} }
else else
{ motorbike->flags &= ~FL_BOOST;
motorbike->flags &= ~0x1;
}
if (item->pos.yPos >= (height - STEP_SIZE)) if (item->pos.yPos >= (height - STEP_SIZE))
{ {
if (!motorbike->velocity && (TrInput & IN_LOOK)) if (!motorbike->velocity && (TrInput & IN_LOOK))
LookUpDown(); // not used since it ignore the vehicle (lara.skidoo == NO_ITEM) !! LookUpDown();
if (motorbike->velocity > 0) if (motorbike->velocity > 0)
{ {
if (TrInput & IN_LEFT) if (TrInput & IN_TURNL)
{ {
motorbike->bikeTurn -= motorbike->velocity <= MOTORBIKE_ACCEL_1 ? ONE_DEGREE - MOTORBIKE_HTURN * motorbike->velocity / 16384 : MOTORBIKE_DEFAULT_HTURN; if (motorbike->velocity > MOTORBIKE_ACCEL_1)
motorbike->bikeTurn -= MOTORBIKE_DEFAULT_HTURN;
else
motorbike->bikeTurn -= (ANGLE(1) - MOTORBIKE_HTURN * motorbike->velocity) / 16384;
if (motorbike->bikeTurn < -MOTORBIKE_MAX_HTURN) if (motorbike->bikeTurn < -MOTORBIKE_MAX_HTURN)
motorbike->bikeTurn = -MOTORBIKE_MAX_HTURN; motorbike->bikeTurn = -MOTORBIKE_MAX_HTURN;
} }
else if (TrInput & IN_RIGHT) else if (TrInput & IN_TURNR)
{ {
motorbike->bikeTurn += motorbike->velocity <= MOTORBIKE_ACCEL_1 ? ONE_DEGREE + MOTORBIKE_HTURN * motorbike->velocity / 16384 : MOTORBIKE_DEFAULT_HTURN; if (motorbike->velocity > MOTORBIKE_ACCEL_1)
motorbike->bikeTurn += MOTORBIKE_DEFAULT_HTURN;
else
motorbike->bikeTurn += (ANGLE(1) + MOTORBIKE_HTURN * motorbike->velocity) / 16384;
if (motorbike->bikeTurn > MOTORBIKE_MAX_HTURN) if (motorbike->bikeTurn > MOTORBIKE_MAX_HTURN)
motorbike->bikeTurn = MOTORBIKE_MAX_HTURN; motorbike->bikeTurn = MOTORBIKE_MAX_HTURN;
} }
} }
else if (motorbike->velocity < 0) else if (motorbike->velocity < 0)//moving backwards so the turning is inverted
{ {
if (TrInput & IN_LEFT) if (TrInput & IN_TURNL)
{ {
motorbike->bikeTurn += MOTORBIKE_HTURN; motorbike->bikeTurn += MOTORBIKE_HTURN;
if (motorbike->bikeTurn > MOTORBIKE_MAX_HTURN) if (motorbike->bikeTurn > MOTORBIKE_MAX_HTURN)
motorbike->bikeTurn = MOTORBIKE_MAX_HTURN; motorbike->bikeTurn = MOTORBIKE_MAX_HTURN;
} }
else if (TrInput & IN_RIGHT) else if (TrInput & IN_TURNR)
{ {
motorbike->bikeTurn -= MOTORBIKE_HTURN; motorbike->bikeTurn -= MOTORBIKE_HTURN;
if (motorbike->bikeTurn < -MOTORBIKE_MAX_HTURN) if (motorbike->bikeTurn < -MOTORBIKE_MAX_HTURN)
@ -1164,7 +1264,7 @@ static int MotorbikeUserControl(ITEM_INFO* item, int height, int* pitch)
} }
} }
if (TrInput & IN_JUMP) if (TrInput & IN_BRAKE)
{ {
pos.x = 0; pos.x = 0;
pos.y = -144; pos.y = -144;
@ -1178,7 +1278,7 @@ static int MotorbikeUserControl(ITEM_INFO* item, int height, int* pitch)
item->meshBits = 0x3F7; item->meshBits = 0x3F7;
} }
if (TrInput & IN_JUMP) if (TrInput & IN_BRAKE)
{ {
if (motorbike->velocity < 0) if (motorbike->velocity < 0)
{ {
@ -1193,18 +1293,18 @@ static int MotorbikeUserControl(ITEM_INFO* item, int height, int* pitch)
motorbike->velocity = 0; motorbike->velocity = 0;
} }
} }
else if (TrInput & IN_ACTION) else if (TrInput & IN_ACCELERATE)
{ {
if (motorbike->velocity < MOTORBIKE_ACCEL_MAX) if (motorbike->velocity < MOTORBIKE_ACCEL_MAX)
{ {
if (motorbike->velocity < MOTORBIKE_ACCEL_1) if (motorbike->velocity < MOTORBIKE_ACCEL_1)
motorbike->velocity += 8 + ((MOTORBIKE_ACCEL_1 + 0x800 - motorbike->velocity) / 8); motorbike->velocity += 8 + ((MOTORBIKE_ACCEL_1 + MOTORBIKE_BACKING_VEL - motorbike->velocity) / 8);
else if (motorbike->velocity < MOTORBIKE_ACCEL_2) else if (motorbike->velocity < MOTORBIKE_ACCEL_2)
motorbike->velocity += 4 + ((MOTORBIKE_ACCEL_2 + 0x800 - motorbike->velocity) / 16); motorbike->velocity += 4 + ((MOTORBIKE_ACCEL_2 + MOTORBIKE_BACKING_VEL - motorbike->velocity) / 16);
else if (motorbike->velocity < MOTORBIKE_ACCEL_MAX) else if (motorbike->velocity < MOTORBIKE_ACCEL_MAX)
motorbike->velocity += 2 + ((MOTORBIKE_ACCEL_MAX - motorbike->velocity) / 16); motorbike->velocity += 2 + ((MOTORBIKE_ACCEL_MAX - motorbike->velocity) / 16);
if (motorbike->flags & 1) if (motorbike->flags & FL_BOOST)
motorbike->velocity += 256; motorbike->velocity += 256;
} }
else else
@ -1218,15 +1318,17 @@ static int MotorbikeUserControl(ITEM_INFO* item, int height, int* pitch)
else if (motorbike->velocity > MOTORBIKE_FRICTION) else if (motorbike->velocity > MOTORBIKE_FRICTION)
{ {
motorbike->velocity -= MOTORBIKE_FRICTION; motorbike->velocity -= MOTORBIKE_FRICTION;
if (motorbike->velocity < 0)
motorbike->velocity = 0;//because bitch.
} }
else if (motorbike->velocity < MOTORBIKE_FRICTION) else if (motorbike->velocity < MOTORBIKE_FRICTION)
{ {
motorbike->velocity += MOTORBIKE_FRICTION; motorbike->velocity += MOTORBIKE_FRICTION;
if (motorbike->velocity > 0)
motorbike->velocity = 0;//because bitch.
} }
else else
{
motorbike->velocity = 0; motorbike->velocity = 0;
}
if (LaraItem->currentAnimState == BIKE_MOVING_BACK) if (LaraItem->currentAnimState == BIKE_MOVING_BACK)
{ {
@ -1235,8 +1337,8 @@ static int MotorbikeUserControl(ITEM_INFO* item, int height, int* pitch)
if (framenow >= framebase + 24 && framenow <= framebase + 29) if (framenow >= framebase + 24 && framenow <= framebase + 29)
{ {
if (motorbike->velocity > -0x3000) if (motorbike->velocity > -MOTORBIKE_BIG_SLOWDOWN)
motorbike->velocity -= 0x600; motorbike->velocity -= MOTORBIKE_SLOWDOWN2;
} }
} }
@ -1261,20 +1363,20 @@ static int MotorbikeUserControl(ITEM_INFO* item, int height, int* pitch)
return drive; return drive;
} }
void SetLaraOnMotorBike(ITEM_INFO* item, ITEM_INFO* laraitem) void SetLaraOnMotorBike(ITEM_INFO* item, ITEM_INFO* lara)//is this function even used
{ {
MOTORBIKE_INFO* motorbike; MOTORBIKE_INFO* motorbike;
motorbike = GetMotorbikeInfo(item); motorbike = GetMotorbikeInfo(item);
Lara.gunStatus = LG_HANDS_BUSY; Lara.gunStatus = LG_HANDS_BUSY;
Lara.hitDirection = -1; Lara.hitDirection = -1;
laraitem->currentAnimState = BIKE_IDLE; lara->currentAnimState = BIKE_IDLE;
laraitem->goalAnimState = BIKE_IDLE; lara->goalAnimState = BIKE_IDLE;
laraitem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + BIKE_IDLE_ANIM; lara->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + BA_IDLE;
laraitem->frameNumber = g_Level.Anims[laraitem->animNumber].frameBase; lara->frameNumber = g_Level.Anims[lara->animNumber].frameBase;
laraitem->gravityStatus = false; lara->gravityStatus = false;
item->animNumber = laraitem->animNumber + (Objects[ID_MOTORBIKE].animIndex - Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex); item->animNumber = lara->animNumber + (Objects[ID_MOTORBIKE].animIndex - Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex);
item->frameNumber = laraitem->frameNumber + (g_Level.Anims[ID_MOTORBIKE].frameBase - g_Level.Anims[ID_MOTORBIKE_LARA_ANIMS].frameBase); item->frameNumber = lara->frameNumber + (g_Level.Anims[ID_MOTORBIKE].frameBase - g_Level.Anims[ID_MOTORBIKE_LARA_ANIMS].frameBase);
item->hitPoints = 1; item->hitPoints = 1;
item->flags = short(IFLAG_KILLED); // hmm... maybe wrong name (it can be IFLAG_CODEBITS) ? item->flags = short(IFLAG_KILLED); // hmm... maybe wrong name (it can be IFLAG_CODEBITS) ?
motorbike->revs = 0; motorbike->revs = 0;
@ -1286,7 +1388,7 @@ int MotorbikeControl(void)
MOTORBIKE_INFO* motorbike; MOTORBIKE_INFO* motorbike;
FLOOR_INFO* floor; FLOOR_INFO* floor;
PHD_VECTOR oldpos, fl, fr, fm; PHD_VECTOR oldpos, fl, fr, fm;
int drive, collide, pitch = 0, dead, height = 0, ceiling; int drive, collide, pitch = 0, dead, ceiling;
short room_number; short room_number;
item = &g_Level.Items[Lara.Vehicle]; item = &g_Level.Items[Lara.Vehicle];
@ -1298,13 +1400,13 @@ int MotorbikeControl(void)
oldpos.y = item->pos.yPos; oldpos.y = item->pos.yPos;
oldpos.z = item->pos.zPos; oldpos.z = item->pos.zPos;
int hfl = TestMotorbikeHeight(item, 500, -350, &fl); int hfl = TestMotorbikeHeight(item, BIKE_FRONT, -BIKE_SIDE, &fl);
int hfr = TestMotorbikeHeight(item, 500, 128, &fr); int hfr = TestMotorbikeHeight(item, BIKE_FRONT, STEP_SIZE / 2, &fr);
int hfm = TestMotorbikeHeight(item, -500, 0, &fm); int hfm = TestMotorbikeHeight(item, -BIKE_FRONT, 0, &fm);
room_number = item->roomNumber; room_number = item->roomNumber;
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &room_number); floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &room_number);
height = GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos); int height = GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
TestTriggers(TriggerIndex, FALSE, FALSE); TestTriggers(TriggerIndex, FALSE, FALSE);
TestTriggers(TriggerIndex, TRUE, FALSE); TestTriggers(TriggerIndex, TRUE, FALSE);
@ -1315,21 +1417,15 @@ int MotorbikeControl(void)
dead = true; dead = true;
} }
else else
{
dead = false; dead = false;
}
if (motorbike->flags) if (motorbike->flags)
{
collide = 0; collide = 0;
}
else else
{ {
DrawMotorbikeLight(item); DrawMotorbikeLight(item);
if (LaraItem->currentAnimState < BIKE_ENTER || LaraItem->currentAnimState > BIKE_EXIT) if (LaraItem->currentAnimState < BIKE_ENTER || LaraItem->currentAnimState > BIKE_EXIT)
{
drive = MotorbikeUserControl(item, height, &pitch); drive = MotorbikeUserControl(item, height, &pitch);
}
else else
{ {
drive = -1; drive = -1;
@ -1341,10 +1437,11 @@ int MotorbikeControl(void)
{ {
motorbike->pitch = pitch; motorbike->pitch = pitch;
if (motorbike->pitch < -0x8000) if (motorbike->pitch < -MOTORBIKE_PITCH_SLOWDOWN)
motorbike->pitch = -0x8000; motorbike->pitch = -MOTORBIKE_PITCH_SLOWDOWN;
else if (motorbike->pitch > 0xA000) else
motorbike->pitch = 0xA000; if (motorbike->pitch > MOTORBIKE_PITCH_MAX)
motorbike->pitch = MOTORBIKE_PITCH_MAX;
SoundEffect(SFX_TR4_BIKE_MOVING, &item->pos, (motorbike->pitch * 256) + 0x1000004); SoundEffect(SFX_TR4_BIKE_MOVING, &item->pos, (motorbike->pitch * 256) + 0x1000004);
} }
@ -1375,23 +1472,23 @@ int MotorbikeControl(void)
if (r1 >= ((hfl + hfr) / 2)) if (r1 >= ((hfl + hfr) / 2))
{ {
xrot = phd_atan(1000, hfm - r1); xrot = phd_atan(1000, hfm - r1);
zrot = phd_atan(350, r2 - fl.y); zrot = phd_atan(BIKE_SIDE, r2 - fl.y);
} }
else else
{ {
xrot = phd_atan(500, hfm - item->pos.yPos); xrot = phd_atan(BIKE_FRONT, hfm - item->pos.yPos);
zrot = phd_atan(350, r2 - fl.y); zrot = phd_atan(BIKE_SIDE, r2 - fl.y);
} }
} }
else if (r1 >= ((hfl + hfr) / 2)) else if (r1 >= ((hfl + hfr) / 2))
{ {
xrot = phd_atan(500, item->pos.yPos - r1); xrot = phd_atan(BIKE_FRONT, item->pos.yPos - r1);
zrot = phd_atan(350, r2 - fl.y); zrot = phd_atan(BIKE_SIDE, r2 - fl.y);
} }
else else
{ {
xrot = phd_atan(125, newy - item->pos.yPos); xrot = phd_atan(125, newy - item->pos.yPos);
zrot = phd_atan(350, r2 - fl.y); zrot = phd_atan(BIKE_SIDE, r2 - fl.y);
} }
item->pos.xRot += ((xrot - item->pos.xRot) / 4); item->pos.xRot += ((xrot - item->pos.xRot) / 4);
@ -1404,24 +1501,27 @@ int MotorbikeControl(void)
ItemNewRoom(Lara.Vehicle, room_number); ItemNewRoom(Lara.Vehicle, room_number);
ItemNewRoom(Lara.itemNumber, room_number); ItemNewRoom(Lara.itemNumber, room_number);
} }
LaraItem->pos.xPos = item->pos.xPos; LaraItem->pos.xPos = item->pos.xPos;
LaraItem->pos.yPos = item->pos.yPos; LaraItem->pos.yPos = item->pos.yPos;
LaraItem->pos.zPos = item->pos.zPos; LaraItem->pos.zPos = item->pos.zPos;
LaraItem->pos.yRot = item->pos.yRot; LaraItem->pos.yRot = item->pos.yRot;
LaraItem->pos.xRot = item->pos.xRot; LaraItem->pos.xRot = item->pos.xRot;
LaraItem->pos.zRot = item->pos.zRot; LaraItem->pos.zRot = item->pos.zRot;
AnimateMotorbike(item, collide, dead); AnimateMotorbike(item, collide, dead);
AnimateItem(LaraItem); AnimateItem(LaraItem);
item->animNumber = LaraItem->animNumber + (Objects[ID_MOTORBIKE].animIndex - Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex); item->animNumber = LaraItem->animNumber + (Objects[ID_MOTORBIKE].animIndex - Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex);
item->frameNumber = LaraItem->frameNumber + (g_Level.Anims[item->animNumber].frameBase - g_Level.Anims[LaraItem->animNumber].frameBase); item->frameNumber = LaraItem->frameNumber + (g_Level.Anims[item->animNumber].frameBase - g_Level.Anims[LaraItem->animNumber].frameBase);
Camera.targetElevation = -5460; Camera.targetElevation = -5460;
if (motorbike->flags & 0x40) // IS_FALLING if (motorbike->flags & FL_FALLING)
{ {
if (item->pos.yPos == item->floor) if (item->pos.yPos == item->floor)
{ {
ExplodingDeath(Lara.itemNumber, -1, 256); ExplodingDeath(Lara.itemNumber, -1, 256);
LaraItem->hitPoints = 0;
LaraItem->flags = ONESHOT; LaraItem->flags = ONESHOT;
MotorBikeExplode(item); MotorBikeExplode(item);
return 0; return 0;
@ -1429,13 +1529,15 @@ int MotorbikeControl(void)
} }
} }
if (LaraItem->currentAnimState == BIKE_ENTER || LaraItem->currentAnimState == BIKE_EXIT) if (LaraItem->currentAnimState == BIKE_EXIT)
{ {
ExhaustStart = false; ExhaustStart = false;
return MotorBikeCheckGetOff(); MotorBikeCheckGetOff();
return 1;
} }
return MotorBikeCheckGetOff(); MotorBikeCheckGetOff();
return 1;
} }
void DrawMotorbike(ITEM_INFO* item) void DrawMotorbike(ITEM_INFO* item)

View file

@ -20,15 +20,17 @@ void ControlBodyPart(short fxNumber)
} }
else else
{ {
int modulus = 62 - fx->counter;
int random = modulus <= 1 ? 0 : 2 * GetRandomControl() % modulus;
if (fxNumber & 1) if (fxNumber & 1)
{ {
fx->pos.zRot -= 2 * (GetRandomControl() % (62 - fx->counter)); fx->pos.zRot -= random;
fx->pos.xRot += 2 * (GetRandomControl() % (62 - fx->counter)); fx->pos.xRot += random;
} }
else else
{ {
fx->pos.zRot += 2 * (GetRandomControl() % (62 - fx->counter)); fx->pos.zRot += random;
fx->pos.xRot -= 2 * (GetRandomControl() % (62 - fx->counter)); fx->pos.xRot -= random;
} }
if (--fx->counter < 8) if (--fx->counter < 8)
fx->fallspeed += 2; fx->fallspeed += 2;

View file

@ -0,0 +1,173 @@
#include "framework.h"
#include "tr5_explosion.h"
#include "level.h"
#include "control.h"
#include "sound.h"
#include "effect2.h"
#include "tomb4fx.h"
#include "draw.h"
#include "traps.h"
#include "lara.h"
#include "tr5_smashobject.h"
#include "lara_one_gun.h"
#include "switch.h"
#include "debris.h"
void InitialiseExplosion(short itemNumber)
{
ITEM_INFO* item;
item = &g_Level.Items[itemNumber];
if (item->triggerFlags >= 30000)
{
item->itemFlags[1] = 3;
item->triggerFlags -= 30000;
}
else if (item->triggerFlags >= 20000)
{
item->itemFlags[1] = 2;
item->triggerFlags -= 20000;
}
else if (item->triggerFlags >= 10000)
{
item->itemFlags[1] = 1;
item->triggerFlags -= 10000;
}
if (item->triggerFlags >= 1000)
{
item->itemFlags[3] = 1;
item->triggerFlags -= 1000;
}
item->itemFlags[2] = item->triggerFlags / 100;
item->triggerFlags = 7 * (item->triggerFlags % 100);
}
void ExplosionControl(short itemNumber)
{
ITEM_INFO* item;
int flag, i, dx, dy, dz, distance;
PHD_3DPOS pos;
PHD_VECTOR vec;
short triggerItems[8];
item = &g_Level.Items[itemNumber];
if (TriggerActive(item))
{
item->flags |= IFLAG_INVISIBLE;
if (item->itemFlags[0] < item->triggerFlags)
{
++item->itemFlags[0];
}
else if (item->itemFlags[0] == item->triggerFlags)
{
++item->itemFlags[0];
if (g_Level.Rooms[item->roomNumber].flags & ENV_FLAG_WATER)
{
flag = 1;
}
else
{
flag = item->itemFlags[1] == 1 ? 2 : 0;
}
SoundEffect(SFX_EXPLOSION1, &item->pos, 25165828);
SoundEffect(SFX_EXPLOSION2, &item->pos, 0);
TriggerExplosionSparks(item->pos.xPos, item->pos.yPos, item->pos.zPos, 3, -2, flag, item->roomNumber);
for (i = 0; i < item->itemFlags[2]; ++i)
TriggerExplosionSparks(item->pos.xPos + (GetRandomControl() % 128 - 64) * item->itemFlags[2], item->pos.yPos + (GetRandomControl() % 128 - 64) * item->itemFlags[2], item->pos.zPos + (GetRandomControl() % 128 - 64) * item->itemFlags[2], 2, 0, i, item->roomNumber);
pos.xPos = item->pos.xPos;
pos.yPos = item->pos.yPos - 128;
pos.zPos = item->pos.zPos;
if (item->itemFlags[3])
{
if (flag == 2)
TriggerShockwave(&pos, 48, 32 * item->itemFlags[2] + 304, 4 * item->itemFlags[2] + 96, 128, 96, 0, 24, 2048, 0);
else
TriggerShockwave(&pos, 48, 32 * item->itemFlags[2] + 304, 4 * item->itemFlags[2] + 96, 0, 96, 128, 24, 2048, 0);
}
else if (flag == 2)
{
vec.x = 0;
vec.y = 0;
vec.z = 0;
GetLaraJointPosition(&vec, 0);
dx = vec.x - item->pos.xPos;
dy = vec.y - item->pos.yPos;
dz = vec.z - item->pos.zPos;
if (abs(dx) < 1024 && abs(dy) < 1024 && abs(dz) < 1024)
{
distance = sqrt(SQUARE(dx) + SQUARE(dy) + SQUARE(dz));
if (distance < 2048)
{
LaraItem->hitPoints -= distance / 16;
if (distance < 768)
LaraBurn();
}
}
}
GetCollidedObjects(item, 2048, 1, CollidedItems, CollidedMeshes, 1);
if (CollidedItems[0] || CollidedMeshes[0])
{
i = 0;
while (CollidedItems[i])
{
if (CollidedItems[i]->objectNumber >= ID_SMASH_OBJECT1 && CollidedItems[i]->objectNumber <= ID_SMASH_OBJECT16)
{
TriggerExplosionSparks(CollidedItems[i]->pos.xPos, CollidedItems[i]->pos.yPos, CollidedItems[i]->pos.zPos, 3, -2, 0, CollidedItems[i]->roomNumber);
CollidedItems[i]->pos.yPos -= 128;
TriggerShockwave(&CollidedItems[i]->pos, 48, 304, 96, 0, 96, 128, 24, 0, 0);
CollidedItems[i]->pos.yPos += 128;
ExplodeItemNode(CollidedItems[i], 0, 0, 80);
SmashObject(CollidedItems[i] - g_Level.Items.data());
KillItem(CollidedItems[i] - g_Level.Items.data());
}
else if (CollidedItems[i]->objectNumber != ID_SWITCH_TYPE7 && CollidedItems[i]->objectNumber != ID_SWITCH_TYPE8)
{
if (Objects[CollidedItems[i]->objectNumber].intelligent)
DoExplosiveDamageOnBaddie(CollidedItems[i], item, WEAPON_GRENADE_LAUNCHER);
}
else
{
/* @FIXME This calls CrossbowHitSwitchType78() */
}
++i;
}
i = 0;
while (CollidedMeshes[i])
{
if (CollidedMeshes[i]->staticNumber >= 50 && CollidedMeshes[i]->staticNumber < 58)
{
TriggerExplosionSparks(CollidedMeshes[i]->x, CollidedMeshes[i]->y, CollidedMeshes[i]->z, 3, -2, 0, item->roomNumber);
CollidedMeshes[i]->y -= 128;
TriggerShockwave((PHD_3DPOS *) &CollidedMeshes[i]->x, 40, 176, 64, 0, 96, 128, 16, 0, 0);
CollidedMeshes[i]->y += 128;
SoundEffect(ShatterSounds[CurrentLevel - 5][CollidedMeshes[i]->staticNumber], (PHD_3DPOS *) &CollidedMeshes[i]->x, 0);
ShatterObject(NULL, CollidedMeshes[i], -128, item->roomNumber, 0);
SmashedMeshRoom[SmashedMeshCount] = item->roomNumber;
SmashedMesh[SmashedMeshCount] = CollidedMeshes[i];
++SmashedMeshCount;
CollidedMeshes[i]->flags &= ~0x1;
}
++i;
}
AlertNearbyGuards(item);
}
if (item->itemFlags[1] >= 2)
{
if (item->itemFlags[1] == 3)
{
for (i = GetSwitchTrigger(item, triggerItems, 1); i > 0; --i)
{
g_Level.Items[triggerItems[i - 1]].itemFlags[0] = 0;
}
item->itemFlags[0] = 0;
}
}
else
{
KillItem(itemNumber);
}
}
}
}

View file

@ -0,0 +1,4 @@
#pragma once
void InitialiseExplosion(short itemNumber);
void ExplosionControl(short itemNumber);

View file

@ -47,6 +47,7 @@
#include "tr5_romehammer.h" #include "tr5_romehammer.h"
#include "tr5_fallingceiling.h" #include "tr5_fallingceiling.h"
#include "tr5_rollingball.h" #include "tr5_rollingball.h"
#include "tr5_explosion.h"
/// switch /// switch
/// shatter /// shatter
@ -1166,6 +1167,16 @@ static void StartTrap(OBJECT_INFO *obj)
obj->saveFlags = true; obj->saveFlags = true;
obj->savePosition = true; obj->savePosition = true;
} }
obj = &Objects[ID_EXPLOSION];
if (obj->loaded)
{
obj->initialise = InitialiseExplosion;
obj->control = ExplosionControl;
obj->drawRoutine = nullptr;
obj->saveFlags = true;
obj->usingDrawAnimatingItem = false;
}
} }
static void StartSwitch(OBJECT_INFO *obj) static void StartSwitch(OBJECT_INFO *obj)

View file

@ -9,11 +9,13 @@
#include "lara.h" #include "lara.h"
#include "sphere.h" #include "sphere.h"
#include "GameFlowScript.h" #include "GameFlowScript.h"
#include <Renderer\RenderView\RenderView.h> #include "Renderer\RenderView\RenderView.h"
#include "quad.h" #include "quad.h"
#include "rubberboat.h" #include "rubberboat.h"
#include "upv.h" #include "upv.h"
#include "biggun.h" #include "biggun.h"
#include "jeep.h"
#include "motorbike.h"
#include <algorithm> #include <algorithm>
extern GameConfiguration g_Configuration; extern GameConfiguration g_Configuration;
@ -286,15 +288,44 @@ namespace T5M::Renderer
if (item->objectNumber == ID_QUAD) if (item->objectNumber == ID_QUAD)
{ {
QUAD_INFO* quad = (QUAD_INFO*)item->data; QUAD_INFO* quad = (QUAD_INFO*)item->data;
if (j == 3 || j == 4) if (j == 3 || j == 4) {
{
currentBone->ExtraRotation.x = TO_RAD(quad->rearRot); currentBone->ExtraRotation.x = TO_RAD(quad->rearRot);
} }
else if (j == 6 || j == 7) else if (j == 6 || j == 7) {
{
currentBone->ExtraRotation.x = TO_RAD(quad->frontRot); currentBone->ExtraRotation.x = TO_RAD(quad->frontRot);
} }
} }
else if (item->objectNumber == ID_JEEP) {
JEEP_INFO* jeep = (JEEP_INFO*)item->data;
switch (j) {
case 9:
currentBone->ExtraRotation.x = TO_RAD(jeep->rot1);
break;
case 10:
currentBone->ExtraRotation.x = TO_RAD(jeep->rot2);
break;
case 12:
currentBone->ExtraRotation.x = TO_RAD(jeep->rot3);
break;
case 13:
currentBone->ExtraRotation.x = TO_RAD(jeep->rot4);
break;
}
}
else if (item->objectNumber == ID_MOTORBIKE) {
MOTORBIKE_INFO* bike = (MOTORBIKE_INFO*)item->data;
switch (j) {
case 2:
case 4:
currentBone->ExtraRotation.x = TO_RAD(bike->wheelRight);
break;
case 10:
currentBone->ExtraRotation.x = TO_RAD(bike->wheelLeft);
}
}
else if (item->objectNumber == ID_RUBBER_BOAT) else if (item->objectNumber == ID_RUBBER_BOAT)
{ {
RUBBER_BOAT_INFO* boat = (RUBBER_BOAT_INFO*)item->data; RUBBER_BOAT_INFO* boat = (RUBBER_BOAT_INFO*)item->data;
@ -353,8 +384,7 @@ namespace T5M::Renderer
itemToDraw->DoneAnimations = true; itemToDraw->DoneAnimations = true;
} }
void Renderer11::updateItemsAnimations(RenderView& view) void Renderer11::updateItemsAnimations(RenderView& view) {
{
Matrix translation; Matrix translation;
Matrix rotation; Matrix rotation;
@ -372,8 +402,7 @@ namespace T5M::Renderer
} }
} }
void Renderer11::fromTrAngle(Matrix *matrix, short *frameptr, int index) void Renderer11::fromTrAngle(Matrix *matrix, short *frameptr, int index) {
{
short *ptr = &frameptr[0]; short *ptr = &frameptr[0];
ptr += 9; ptr += 9;
@ -417,8 +446,7 @@ namespace T5M::Renderer
} }
} }
void Renderer11::buildHierarchyRecursive(RendererObject *obj, RendererBone *node, RendererBone *parentNode) void Renderer11::buildHierarchyRecursive(RendererObject *obj, RendererBone *node, RendererBone *parentNode) {
{
node->GlobalTransform = node->Transform * parentNode->GlobalTransform; node->GlobalTransform = node->Transform * parentNode->GlobalTransform;
obj->BindPoseTransforms[node->Index] = node->GlobalTransform; obj->BindPoseTransforms[node->Index] = node->GlobalTransform;
obj->Skeleton->GlobalTranslation = Vector3(0.0f, 0.0f, 0.0f); obj->Skeleton->GlobalTranslation = Vector3(0.0f, 0.0f, 0.0f);
@ -430,8 +458,7 @@ namespace T5M::Renderer
} }
} }
void Renderer11::buildHierarchy(RendererObject *obj) void Renderer11::buildHierarchy(RendererObject *obj) {
{
obj->Skeleton->GlobalTransform = obj->Skeleton->Transform; obj->Skeleton->GlobalTransform = obj->Skeleton->Transform;
obj->BindPoseTransforms[obj->Skeleton->Index] = obj->Skeleton->GlobalTransform; obj->BindPoseTransforms[obj->Skeleton->Index] = obj->Skeleton->GlobalTransform;
obj->Skeleton->GlobalTranslation = Vector3(0.0f, 0.0f, 0.0f); obj->Skeleton->GlobalTranslation = Vector3(0.0f, 0.0f, 0.0f);
@ -442,8 +469,7 @@ namespace T5M::Renderer
} }
} }
RendererMesh *Renderer11::getRendererMeshFromTrMesh(RendererObject *obj, MESH *meshPtr, short boneIndex, int isJoints, int isHairs) RendererMesh *Renderer11::getRendererMeshFromTrMesh(RendererObject *obj, MESH *meshPtr, short boneIndex, int isJoints, int isHairs) {
{
RendererMesh *mesh = new RendererMesh(); RendererMesh *mesh = new RendererMesh();
mesh->Sphere = meshPtr->sphere; mesh->Sphere = meshPtr->sphere;

View file

@ -1801,8 +1801,10 @@ namespace T5M::Renderer
m_context->ClearDepthStencilView(m_depthStencilView, D3D11_CLEAR_STENCIL | D3D11_CLEAR_DEPTH, 1.0f, 0); m_context->ClearDepthStencilView(m_depthStencilView, D3D11_CLEAR_STENCIL | D3D11_CLEAR_DEPTH, 1.0f, 0);
renderInventoryScene(m_backBufferRTV, m_depthStencilView, nullptr); renderInventoryScene(m_backBufferRTV, m_depthStencilView, nullptr);
#if _DEBUG
drawString(0, 0, commit.c_str(), D3DCOLOR_ARGB(255, 255,255, 255), 0); drawString(0, 0, commit.c_str(), D3DCOLOR_ARGB(255, 255,255, 255), 0);
drawAllStrings(); drawAllStrings();
#endif
m_swapChain->Present(0, 0); m_swapChain->Present(0, 0);
} }

View file

@ -160,7 +160,7 @@ int Key(int number)
return 0; return 0;
} }
int S_UpdateInput()// (F) int S_UpdateInput()
{ {
DI_ReadKeyboard(KeyMap); DI_ReadKeyboard(KeyMap);

View file

@ -124,21 +124,20 @@ int LoadItems()
InitialiseItem(i); InitialiseItem(i);
} }
for (int r = 0; r < g_Level.Rooms.size(); r++) for (auto& r : g_Level.Rooms)
{ {
MESH_INFO* mesh = g_Level.Rooms[r].mesh.data(); for (const auto& mesh : r.mesh)
for (int m = 0; m < g_Level.Rooms[r].mesh.size(); m++)
{ {
FLOOR_INFO* floor = &g_Level.Rooms[r].floor[((mesh->z - g_Level.Rooms[r].z) / 1024) + FLOOR_INFO* floor = &r.floor[((mesh.z - r.z) / 1024) + r.xSize * ((mesh.x - r.x) / 1024)];
g_Level.Rooms[r].xSize * ((mesh->x - g_Level.Rooms[r].x) / 1024)];
if (!(g_Level.Boxes[floor->box].flags & BLOCKED) if (floor->box == NO_BOX)
&& !(CurrentLevel == 5 && (r == 19 || r == 23 || r == 16))) continue;
if (!(g_Level.Boxes[floor->box].flags & BLOCKED))
{ {
int fl = floor->floor * 4; int fl = floor->floor * 4;
STATIC_INFO* st = &StaticObjects[mesh->staticNumber]; STATIC_INFO* st = &StaticObjects[mesh.staticNumber];
if (fl <= mesh->y - st->collisionBox.Y2 + 512 && fl < mesh->y - st->collisionBox.Y1) if (fl <= mesh.y - st->collisionBox.Y2 + 512 && fl < mesh.y - st->collisionBox.Y1)
{ {
if (st->collisionBox.X1 == 0 || st->collisionBox.X2 == 0 || if (st->collisionBox.X1 == 0 || st->collisionBox.X2 == 0 ||
st->collisionBox.Z1 == 0 || st->collisionBox.Z2 == 0 || st->collisionBox.Z1 == 0 || st->collisionBox.Z2 == 0 ||

View file

@ -15,6 +15,7 @@
#include <fcntl.h> #include <fcntl.h>
#include <process.h> #include <process.h>
#include <corecrt_io.h> #include <corecrt_io.h>
#include <iostream>
using namespace T5M::Renderer; using namespace T5M::Renderer;
using std::exception; using std::exception;
using std::string; using std::string;
@ -32,7 +33,6 @@ extern int IsLevelLoading;
extern GameFlow* g_GameFlow; extern GameFlow* g_GameFlow;
extern GameScript* g_GameScript; extern GameScript* g_GameScript;
extern GameConfiguration g_Configuration; extern GameConfiguration g_Configuration;
DWORD DebugConsoleThreadID;
DWORD MainThreadID; DWORD MainThreadID;
bool BlockAllInput = true; bool BlockAllInput = true;
int skipLoop = -1; int skipLoop = -1;
@ -95,6 +95,7 @@ void CALLBACK HandleWmCommand(unsigned short wParam)
} }
void getCurrentCommit() { void getCurrentCommit() {
#if _DEBUG
LPSTR cmdLine = {TEXT("git.exe log -1 --oneline")}; LPSTR cmdLine = {TEXT("git.exe log -1 --oneline")};
SECURITY_ATTRIBUTES sa = {0}; SECURITY_ATTRIBUTES sa = {0};
@ -145,6 +146,7 @@ void getCurrentCommit() {
CloseHandle(hStdOutWr); CloseHandle(hStdOutWr);
CloseHandle(hStdErrRd); CloseHandle(hStdErrRd);
CloseHandle(hStdErrWr); CloseHandle(hStdErrWr);
#endif
} }
void HandleScriptMessage(WPARAM wParam) void HandleScriptMessage(WPARAM wParam)
@ -188,12 +190,6 @@ void HandleScriptMessage(WPARAM wParam)
LRESULT CALLBACK WinAppProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) LRESULT CALLBACK WinAppProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ {
if (msg == WM_USER + 0)
{
HandleScriptMessage(wParam);
return 0;
}
// Disables ALT + SPACE // Disables ALT + SPACE
if (msg == WM_SYSCOMMAND && wParam == SC_KEYMENU) if (msg == WM_SYSCOMMAND && wParam == SC_KEYMENU)
return 0; return 0;
@ -385,44 +381,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
UpdateWindow(WindowsHandle); UpdateWindow(WindowsHandle);
ShowWindow(WindowsHandle, nShowCmd); ShowWindow(WindowsHandle, nShowCmd);
//Create debug script terminal
if (Debug)
{
MainThreadID = GetWindowThreadProcessId(WindowsHandle, NULL);
AllocConsole();
HANDLE handle_in = GetStdHandle(STD_INPUT_HANDLE);
DWORD consoleModeIn;
int hCrt = _open_osfhandle((long)handle_in, _O_BINARY);
FILE* hf_in = _fdopen(hCrt, "r");
setvbuf(hf_in, NULL, _IONBF, 512);
GetConsoleMode(handle_in, &consoleModeIn);
consoleModeIn = consoleModeIn | ENABLE_LINE_INPUT;
SetConsoleMode(handle_in, consoleModeIn);
freopen_s(&hf_in, "CONIN$", "r", stdin);
HANDLE ConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
int SystemOutput = _open_osfhandle(intptr_t(ConsoleOutput), _O_TEXT);
FILE* COutputHandle = _fdopen(SystemOutput, "w");
freopen_s(&COutputHandle, "CONOUT$", "w", stdout);
LPTHREAD_START_ROUTINE readConsoleLoop = [](LPVOID params) -> DWORD {
DWORD read;
CHAR buffer[4096];
while (true)
{
BOOL success = ReadFile(params, &buffer, 4096, &read, NULL);
if (success && read > 2)
{
//Only send the actual written message minus \r\n
string msg(buffer, read-2);
SendMessage(WindowsHandle, WM_USER, (WPARAM)&msg, NULL);
}
};
return 0;
};
CreateThread(NULL, 0, readConsoleLoop, handle_in, 0, &DebugConsoleThreadID);
}
SetCursor(NULL); SetCursor(NULL);
ShowCursor(FALSE); ShowCursor(FALSE);
hAccTable = LoadAccelerators(hInstance, (LPCSTR)0x65); hAccTable = LoadAccelerators(hInstance, (LPCSTR)0x65);

View file

@ -1,31 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27428.2037
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TR5Main", "TR5Main\TR5Main.vcxproj", "{15AB0220-541C-4DA1-94EB-ED3C47E4582E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x64.ActiveCfg = Debug|x64
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x64.Build.0 = Debug|x64
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x86.ActiveCfg = Debug|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x86.Build.0 = Debug|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Release|x64.ActiveCfg = Release|x64
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Release|x64.Build.0 = Release|x64
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Release|x86.ActiveCfg = Release|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1689BEF8-E05F-46C0-AFCA-E04DCB4EF2B2}
EndGlobalSection
EndGlobal

View file

@ -15,7 +15,7 @@
<ProjectGuid>{15AB0220-541C-4DA1-94EB-ED3C47E4582E}</ProjectGuid> <ProjectGuid>{15AB0220-541C-4DA1-94EB-ED3C47E4582E}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>TR5Main</RootNamespace> <RootNamespace>TR5Main</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>10.0.18362.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
@ -26,10 +26,9 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings"> <ImportGroup Label="ExtensionSettings">
@ -39,7 +38,7 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
@ -52,11 +51,12 @@
<TargetExt>.exe</TargetExt> <TargetExt>.exe</TargetExt>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)..\Build\</OutDir>
<ExecutablePath>$(ExecutablePath);$(DXSDK_DIR)Utilities\bin\x86</ExecutablePath> <ExecutablePath>$(ExecutablePath);$(DXSDK_DIR)Utilities\bin\x86</ExecutablePath>
<IncludePath>$(SolutionDir)TR5Main\Libs\bass;$(SolutionDir)TR5Main\Libs\lua;$(SolutionDir)TR5Main\Libs\sol;$(SolutionDir)\TR5Main\Libs\zlib;$(IncludePath)</IncludePath> <IncludePath>$(SolutionDir)TR5Main\Libs\bass;$(SolutionDir)TR5Main\Libs\lua;$(SolutionDir)TR5Main\Libs\sol;$(SolutionDir)\TR5Main\Libs\zlib;$(IncludePath)</IncludePath>
<LibraryPath>$(SolutionDir)TR5Main\Libs\zlib\dll32;$(LibraryPath);$(DXSDK_DIR)Lib\x86;$(SolutionDir)TR5Main\Libs\bass;$(SolutionDir)TR5Main\Libs\lua</LibraryPath> <LibraryPath>$(SolutionDir)TR5Main\Libs\zlib\dll32;$(LibraryPath);$(DXSDK_DIR)Lib\x86;$(SolutionDir)TR5Main\Libs\bass;$(SolutionDir)TR5Main\Libs\lua;$(SolutionDir)TR5Main\Libs\boost\libs</LibraryPath>
<OutDir>$(ProjectDir)..\Build\</OutDir> <TargetExt>.exe</TargetExt>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
@ -94,33 +94,43 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile> <ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>EnableAllWarnings</WarningLevel> <WarningLevel>TurnOffAllWarnings</WarningLevel>
<Optimization>MaxSpeed</Optimization> <SDLCheck>false</SDLCheck>
<FunctionLevelLinking>true</FunctionLevelLinking> <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;TR5MAIN_EXPORTS;_WINDOWS;_USRDLL;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<IntrinsicFunctions>true</IntrinsicFunctions> <ConformanceMode>false</ConformanceMode>
<SDLCheck>true</SDLCheck> <AdditionalIncludeDirectories>$(SolutionDir)TR5Main;$(SolutionDir)TR5Main\Game;$(SolutionDir)TR5Main\Game\Lara;$(SolutionDir)TR5Main\Objects;$(SolutionDir)TR5Main\Objects\Utils;$(SolutionDir)TR5Main\Objects\Effects;$(SolutionDir)TR5Main\Objects\Generic;$(SolutionDir)TR5Main\Objects\Generic\Object;$(SolutionDir)TR5Main\Objects\TR1;$(SolutionDir)TR5Main\Objects\TR1\Entity;$(SolutionDir)TR5Main\Objects\TR1\Trap;$(SolutionDir)TR5Main\Objects\TR2;$(SolutionDir)TR5Main\Objects\TR2\Entity;$(SolutionDir)TR5Main\Objects\TR2\Trap;$(SolutionDir)TR5Main\Objects\TR2\Vehicles;$(SolutionDir)TR5Main\Objects\TR3;$(SolutionDir)TR5Main\Objects\TR3\Entity;$(SolutionDir)TR5Main\Objects\TR3\Trap;$(SolutionDir)TR5Main\Objects\TR3\Vehicles;$(SolutionDir)TR5Main\Objects\TR4;$(SolutionDir)TR5Main\Objects\TR4\Entity;$(SolutionDir)TR5Main\Objects\TR4\Trap;$(SolutionDir)TR5Main\Objects\TR4\Object;$(SolutionDir)TR5Main\Objects\TR4\Floor;$(SolutionDir)TR5Main\Objects\TR4\Switch;$(SolutionDir)TR5Main\Objects\TR4\Vehicles;$(SolutionDir)TR5Main\Objects\TR5;$(SolutionDir)TR5Main\Objects\TR5\Entity;$(SolutionDir)TR5Main\Objects\TR5\Trap;$(SolutionDir)TR5Main\Objects\TR5\Light;$(SolutionDir)TR5Main\Objects\TR5\Emitter;$(SolutionDir)TR5Main\Objects\TR5\Shatter;$(SolutionDir)TR5Main\Objects\TR5\Switch;$(SolutionDir)TR5Main\Objects\TR5\Object;$(SolutionDir)TR5Main\Objects\Vehicles;$(SolutionDir)TR5Main\Renderer;$(SolutionDir)TR5Main\Scripting;$(SolutionDir)TR5Main\Specific;$(SolutionDir)TR5Main\Specific\IO;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_RELEASE;TR5MAIN_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<ConformanceMode>true</ConformanceMode> <IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<AdditionalIncludeDirectories>$(SolutionDir)TR5Main;$(SolutionDir)TR5Main\Game;$(SolutionDir)TR5Main\Game\Lara;$(SolutionDir)TR5Main\Global;$(SolutionDir)TR5Main\Objects;$(SolutionDir)TR5Main\Objects\Utils;$(SolutionDir)TR5Main\Objects\Effects;$(SolutionDir)TR5Main\Objects\Generic;$(SolutionDir)TR5Main\Objects\Generic\Object;$(SolutionDir)TR5Main\Objects\TR1;$(SolutionDir)TR5Main\Objects\TR1\Entity;$(SolutionDir)TR5Main\Objects\TR1\Trap;$(SolutionDir)TR5Main\Objects\TR2;$(SolutionDir)TR5Main\Objects\TR2\Entity;$(SolutionDir)TR5Main\Objects\TR2\Trap;$(SolutionDir)TR5Main\Objects\TR2\Vehicles;$(SolutionDir)TR5Main\Objects\TR3;$(SolutionDir)TR5Main\Objects\TR3\Entity;$(SolutionDir)TR5Main\Objects\TR3\Trap;$(SolutionDir)TR5Main\Objects\TR3\Vehicles;$(SolutionDir)TR5Main\Objects\TR4;$(SolutionDir)TR5Main\Objects\TR4\Entity;$(SolutionDir)TR5Main\Objects\TR4\Trap;$(SolutionDir)TR5Main\Objects\TR4\Object;$(SolutionDir)TR5Main\Objects\TR4\Floor;$(SolutionDir)TR5Main\Objects\TR4\Switch;$(SolutionDir)TR5Main\Objects\TR4\Vehicles;$(SolutionDir)TR5Main\Objects\TR5;$(SolutionDir)TR5Main\Objects\TR5\Entity;$(SolutionDir)TR5Main\Objects\TR5\Trap;$(SolutionDir)TR5Main\Objects\TR5\Light;$(SolutionDir)TR5Main\Objects\TR5\Emitter;$(SolutionDir)TR5Main\Objects\TR5\Shatter;$(SolutionDir)TR5Main\Objects\TR5\Switch;$(SolutionDir)TR5Main\Objects\TR5\Object;$(SolutionDir)TR5Main\Objects\Vehicles;$(SolutionDir)TR5Main\Renderer;$(SolutionDir)TR5Main\Scripting;$(SolutionDir)TR5Main\Specific;$(SolutionDir)TR5Main\Specific\IO;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
<TreatWarningAsError>true</TreatWarningAsError> <MinimalRebuild>false</MinimalRebuild>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<LanguageStandard>stdcpplatest</LanguageStandard> <LanguageStandard>stdcpplatest</LanguageStandard>
<PrecompiledHeaderFile>framework.h</PrecompiledHeaderFile> <PrecompiledHeaderFile>framework.h</PrecompiledHeaderFile>
<DebugInformationFormat>None</DebugInformationFormat>
<Optimization>Disabled</Optimization>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<WholeProgramOptimization>true</WholeProgramOptimization>
<SupportJustMyCode>false</SupportJustMyCode>
<EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
<FloatingPointModel>Fast</FloatingPointModel>
<StringPooling>true</StringPooling>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <GenerateDebugInformation>true</GenerateDebugInformation>
<OptimizeReferences>true</OptimizeReferences> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\Program Files %28x86%29\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\onecore\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>C:\Program Files %28x86%29\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\onecore\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>comctl32.lib;lua53.lib;bass.lib;bassmix.lib;bass_fx.lib;dxerr.lib;D3DCompiler.lib;dxgi.lib;dxguid.lib;d3d11.lib;d3dx11.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>comctl32.lib;lua53.lib;bass.lib;bassmix.lib;bass_fx.lib;D3DCompiler.lib;dxgi.lib;dxguid.lib;d3d11.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
<LargeAddressAware>true</LargeAddressAware>
</Link> </Link>
<PostBuildEvent> <PostBuildEvent>
<Command>md "$(TargetDir)\Shaders" <Command>md "$(TargetDir)\Shaders"
xcopy /Y "$(ProjectDir)Shaders\*.fx" "$(TargetDir)\Shaders" xcopy /Y "$(ProjectDir)Shaders\*.*" "$(TargetDir)\Shaders"
xcopy /Y "$(ProjectDir)Shaders\HUD\*.hlsl" "$(TargetDir)\Shaders\HUD\"
md "$(TargetDir)\Scripts" md "$(TargetDir)\Scripts"
xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command> xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
</PostBuildEvent> </PostBuildEvent>
@ -172,6 +182,7 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
<ClInclude Include="Objects\TR4\Trap\tr4_hammer.h" /> <ClInclude Include="Objects\TR4\Trap\tr4_hammer.h" />
<ClInclude Include="Objects\TR4\Trap\tr4_joby_spikes.h" /> <ClInclude Include="Objects\TR4\Trap\tr4_joby_spikes.h" />
<ClInclude Include="Objects\TR4\Trap\tr4_moving_blade.h" /> <ClInclude Include="Objects\TR4\Trap\tr4_moving_blade.h" />
<ClInclude Include="Objects\TR5\Trap\tr5_explosion.h" />
<ClInclude Include="Renderer\ConstantBuffers\SpriteBuffer.h" /> <ClInclude Include="Renderer\ConstantBuffers\SpriteBuffer.h" />
<ClInclude Include="Renderer\ConstantBuffer\ConstantBuffer.h" /> <ClInclude Include="Renderer\ConstantBuffer\ConstantBuffer.h" />
<ClInclude Include="Renderer\Quad\RenderQuad.h" /> <ClInclude Include="Renderer\Quad\RenderQuad.h" />
@ -474,8 +485,10 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
<ClCompile Include="Objects\TR4\Trap\tr4_hammer.cpp" /> <ClCompile Include="Objects\TR4\Trap\tr4_hammer.cpp" />
<ClCompile Include="Objects\TR4\Trap\tr4_joby_spikes.cpp" /> <ClCompile Include="Objects\TR4\Trap\tr4_joby_spikes.cpp" />
<ClCompile Include="Objects\TR4\Trap\tr4_moving_blade.cpp" /> <ClCompile Include="Objects\TR4\Trap\tr4_moving_blade.cpp" />
<ClCompile Include="Objects\TR5\Trap\tr5_explosion.cpp" />
<ClCompile Include="Renderer\Quad\RenderQuad.cpp"> <ClCompile Include="Renderer\Quad\RenderQuad.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Use</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Use</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Use</PrecompiledHeader>
</ClCompile> </ClCompile>
<ClCompile Include="Objects\Effects\tr4_locusts.cpp" /> <ClCompile Include="Objects\Effects\tr4_locusts.cpp" />
<ClCompile Include="Objects\Effects\tr5_electricity.cpp" /> <ClCompile Include="Objects\Effects\tr5_electricity.cpp" />
@ -611,6 +624,7 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
<ClCompile Include="Renderer\Frustum.cpp" /> <ClCompile Include="Renderer\Frustum.cpp" />
<ClCompile Include="Renderer\IndexBuffer\IndexBuffer.cpp"> <ClCompile Include="Renderer\IndexBuffer\IndexBuffer.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile> </ClCompile>
<ClCompile Include="Renderer\Render11Helper.cpp" /> <ClCompile Include="Renderer\Render11Helper.cpp" />
<ClCompile Include="Renderer\Renderer11Compatibility.cpp" /> <ClCompile Include="Renderer\Renderer11Compatibility.cpp" />
@ -708,10 +722,10 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
<None Include="RuleSet.ruleset" /> <None Include="RuleSet.ruleset" />
<None Include="Shaders\CameraMatrixBuffer.hlsli"> <None Include="Shaders\CameraMatrixBuffer.hlsli">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Text</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Text</FileType>
</None> </None>
<None Include="Shaders\VertexInput.hlsli" /> <None Include="Shaders\VertexInput.hlsli" />
</ItemGroup> </ItemGroup>
@ -721,14 +735,18 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
<ItemGroup> <ItemGroup>
<None Include="Shaders\DX11\Test.fx"> <None Include="Shaders\DX11\Test.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType> <FileType>Document</FileType>
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Shaders\DX11_Test.fx"> <None Include="Shaders\DX11_Test.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType> <FileType>Document</FileType>
</None> </None>
</ItemGroup> </ItemGroup>
@ -738,241 +756,245 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
<ItemGroup> <ItemGroup>
<None Include="Shaders\Fxaa3_11.fxh"> <None Include="Shaders\Fxaa3_11.fxh">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
</None> </None>
<None Include="Shaders\HUD\DX11_PS_HUD.hlsl"> <None Include="Shaders\HUD\DX11_PS_HUD.hlsl">
<EntryPointName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">PS</EntryPointName> <EntryPointName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">PS</EntryPointName>
<EntryPointName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">PS</EntryPointName>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Pixel</ShaderType> <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Pixel</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Pixel</ShaderType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\HUD\DX11_PS_HUDBar.hlsl"> <None Include="Shaders\HUD\DX11_PS_HUDBar.hlsl">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType> <FileType>Document</FileType>
<EntryPointName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">PSColored</EntryPointName> <EntryPointName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">PSColored</EntryPointName>
<EntryPointName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">PSColored</EntryPointName>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">2.0</ShaderModel> <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">2.0</ShaderModel>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">2.0</ShaderModel>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Shaders\HUD\DX11_VS_HUD.hlsl"> <None Include="Shaders\HUD\DX11_VS_HUD.hlsl">
<FileType>Document</FileType> <FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Shaders\Basic.fx"> <None Include="Shaders\Basic.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\ClearGBuffer.fx"> <None Include="Shaders\ClearGBuffer.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\CombineFinal.fx"> <None Include="Shaders\CombineFinal.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\Depth.fx"> <None Include="Shaders\Depth.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\DX11_AmbientCubeMap.fx"> <None Include="Shaders\DX11_AmbientCubeMap.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\DX11_FinalPass.fx"> <None Include="Shaders\DX11_FinalPass.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\DX11_FullscreenQuad.fx"> <None Include="Shaders\DX11_FullscreenQuad.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\DX11_Hairs.fx"> <None Include="Shaders\DX11_Hairs.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\DX11_Inventory.fx"> <None Include="Shaders\DX11_Inventory.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\DX11_Items.fx"> <None Include="Shaders\DX11_Items.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\DX11_Rooms.fx"> <None Include="Shaders\DX11_Rooms.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\DX11_ShadowMap.fx"> <None Include="Shaders\DX11_ShadowMap.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\DX11_Sky.fx"> <None Include="Shaders\DX11_Sky.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\DX11_Solid.fx"> <None Include="Shaders\DX11_Solid.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\DX11_Sprites.fx"> <None Include="Shaders\DX11_Sprites.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\DX11_Statics.fx"> <None Include="Shaders\DX11_Statics.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\FillGBuffer.fx"> <None Include="Shaders\FillGBuffer.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\FinalPass.fx"> <None Include="Shaders\FinalPass.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\FXAA.fx"> <None Include="Shaders\FXAA.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\Horizon.fx"> <None Include="Shaders\Horizon.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\Items.fx"> <None Include="Shaders\Items.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\Light.fx"> <None Include="Shaders\Light.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\Rain.fx"> <None Include="Shaders\Rain.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\ReconstructZBuffer.fx"> <None Include="Shaders\ReconstructZBuffer.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\Rooms.fx"> <None Include="Shaders\Rooms.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\Shader.fx"> <None Include="Shaders\Shader.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\Sprites.fx"> <None Include="Shaders\Sprites.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\SSAO.fx"> <None Include="Shaders\SSAO.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
<None Include="Shaders\Transparent.fx"> <None Include="Shaders\Transparent.fx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent> <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
</None> </None>
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

View file

@ -933,6 +933,9 @@
<ClInclude Include="Objects\TR1\Entity\tr1_centaur.h"> <ClInclude Include="Objects\TR1\Entity\tr1_centaur.h">
<Filter>File di intestazione</Filter> <Filter>File di intestazione</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Objects\TR5\Trap\tr5_explosion.h">
<Filter>File di intestazione</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="Game\box.cpp"> <ClCompile Include="Game\box.cpp">
@ -1721,6 +1724,9 @@
<ClCompile Include="Objects\TR1\Entity\tr1_centaur.cpp"> <ClCompile Include="Objects\TR1\Entity\tr1_centaur.cpp">
<Filter>File di origine</Filter> <Filter>File di origine</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Objects\TR5\Trap\tr5_explosion.cpp">
<Filter>File di origine</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />