mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Little Alien
- Bug fix: STRAIGHT_RANGE was not initialized properly causing enemies become invisible Added changes from 2006-05-14 2 by Madd Mugsy - Added Lesh's Explosion data externalization code for exp. animations, sounds, etc. - Fixed some armor issues with ceramic plate-type attachments being attached to non-vest slots - Removed hard coded item indexes from sun goggle / night goggle swapping, now it picks the best possible goggles git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@71 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -281,6 +281,11 @@ BOOLEAN LoadExternalGameplayData(STR directoryName)
|
||||
if(!ReadInMapStructure(fileName))
|
||||
return FALSE;
|
||||
|
||||
strcpy(fileName, directoryName);
|
||||
strcat(fileName, EXPLOSIONDATAFILENAME);
|
||||
if(!ReadInExplosionDataStats(fileName))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -3,6 +3,7 @@
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="ja2"
|
||||
RootNamespace="ja2"
|
||||
SccProjectName=""
|
||||
SccAuxPath=""
|
||||
SccLocalPath=""
|
||||
@@ -42,7 +43,7 @@
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="libexpatMT.lib mss32.lib winmm.lib smackw32.lib fmodvc.lib"
|
||||
OutputFile="C:\games\Jagged Alliance 2 v1.13\ja2_debug_2006_05_11.exe"
|
||||
OutputFile="C:\games\Jagged Alliance 2 v1.13\ja2_debug_2006_05_18.exe"
|
||||
LinkIncremental="2"
|
||||
SuppressStartupBanner="TRUE"
|
||||
AdditionalLibraryDirectories=".\..\..\Standard Gaming Platform\"
|
||||
@@ -545,7 +546,7 @@
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="libexpatMT.lib winmm.lib smackw32.lib mss32.lib fmodvc.lib"
|
||||
OutputFile="C:\Games\Jagged Alliance 2 v1.13\ja2_release_2006_05_11.exe"
|
||||
OutputFile="C:\Games\Jagged Alliance 2 v1.13\ja2_release_2006_05_18.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="TRUE"
|
||||
AdditionalLibraryDirectories=".\..\..\Standard Gaming Platform\"
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
//
|
||||
//
|
||||
//*****************************************************************************
|
||||
#define STRICT
|
||||
|
||||
typedef struct StackHeaderTag
|
||||
{
|
||||
|
||||
@@ -127,7 +127,7 @@ typedef INT32 IVECTOR4[4]; // 4d vector (4x1 matrix)
|
||||
typedef VECTOR3 MATRIX3[3]; // 3x3 matrix
|
||||
typedef VECTOR4 MATRIX4[4]; // 4x4 matrix
|
||||
|
||||
typedef VECTOR3 ANGLE; // angle return array
|
||||
//typedef VECTOR3 ANGLE; // angle return array //lal removed
|
||||
typedef VECTOR4 COLOR; // rgba color array
|
||||
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ of the group. If the priority of the group is high, they
|
||||
// values have been externalized into an INI file. Not all of them at this point,
|
||||
// but more will be externalized as time goes on.
|
||||
|
||||
#define BASIC_POOL_INCREMENT gGameExternalOptions.guiBaseQueenPoolIncrement
|
||||
//#define BASIC_POOL_INCREMENT gGameExternalOptions.guiBaseQueenPoolIncrement
|
||||
|
||||
//Modifies the number of troops the queen has at the beginning of the game on top
|
||||
//of all of the garrison and patrol groups. Additionally, there are a total of
|
||||
@@ -2957,7 +2957,7 @@ void EvaluateQueenSituation()
|
||||
if( !giReinforcementPool )
|
||||
{ //Queen has run out of reinforcements. Simulate recruiting and training new troops
|
||||
uiOffset *= 10;
|
||||
giReinforcementPool += ( BASIC_POOL_INCREMENT * gGameOptions.ubDifficultyLevel ) * ( 100 + CurrentPlayerProgressPercentage() ) / 100 ;
|
||||
giReinforcementPool += ( gGameExternalOptions.guiBaseQueenPoolIncrement * gGameOptions.ubDifficultyLevel ) * ( 100 + CurrentPlayerProgressPercentage() ) / 100 ;
|
||||
AddStrategicEvent( EVENT_EVALUATE_QUEEN_SITUATION, GetWorldTotalMin() + uiOffset, 0 );
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -768,13 +768,13 @@ void HandleMurderOfCivilian( SOLDIERTYPE *pSoldier, BOOLEAN fIntentional )
|
||||
}
|
||||
|
||||
// killer seen by civ?
|
||||
if ( SoldierToSoldierLineOfSightTest( pCivSoldier, MercPtrs[ pSoldier->ubAttackerID ], STRAIGHT_RANGE, TRUE ) != 0 )
|
||||
if ( SoldierToSoldierLineOfSightTest( pCivSoldier, MercPtrs[ pSoldier->ubAttackerID ], gGameExternalOptions.ubStraightSightRange, TRUE ) != 0 )
|
||||
{
|
||||
bSeenState |= 1;
|
||||
}
|
||||
|
||||
// victim seen by civ?
|
||||
if( SoldierToSoldierLineOfSightTest( pCivSoldier, pSoldier, STRAIGHT_RANGE, TRUE ) != 0 )
|
||||
if( SoldierToSoldierLineOfSightTest( pCivSoldier, pSoldier, gGameExternalOptions.ubStraightSightRange, TRUE ) != 0 )
|
||||
{
|
||||
bSeenState |= 2;
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
#define DOTDOTDOT L"..."
|
||||
#define COMMA_AND_SPACE L", "
|
||||
|
||||
#define ITEM_PROS_AND_CONS( usItem ) ( ( Item[ usItem ].usItemClass & IC_GUN) )
|
||||
#define ITEM_PROS_AND_CONS( usItem ) ( ( Item[ usItem ].usItemClass & IC_GUN && !Item[ usItem ].rocketlauncher ) )
|
||||
|
||||
#define MAP_ITEMDESC_DESC_START_X ( 23 + gsInvDescX )
|
||||
#define MAP_ITEMDESC_DESC_START_Y (170 + gsInvDescY)
|
||||
|
||||
@@ -1194,7 +1194,7 @@ void ChooseArmourForSoldierCreateStruct( SOLDIERCREATE_STRUCT *pp, INT8 bHelmetC
|
||||
{
|
||||
CreateItem( usAttachment, (INT8)(70+Random(31)), &Object );
|
||||
Object.fFlags |= OBJECT_UNDROPPABLE;
|
||||
AttachObject( NULL, &(pp->Inv[ VESTPOS ]), &Object );
|
||||
AttachObject( NULL, &(pp->Inv[ HELMETPOS ]), &Object );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1348,6 +1348,19 @@ void ChooseArmourForSoldierCreateStruct( SOLDIERCREATE_STRUCT *pp, INT8 bHelmetC
|
||||
{
|
||||
CreateItem( usItem, (INT8)(70+Random(31)), &(pp->Inv[ LEGPOS ]) );
|
||||
pp->Inv[ LEGPOS ].fFlags |= OBJECT_UNDROPPABLE;
|
||||
|
||||
// roll to see if he gets an attachment, too. Higher chance the higher his entitled Leggings class is
|
||||
if (( INT8 ) Random( 100 ) < ( 15 * ( bLeggingsClass - Item[usItem].ubCoolness ) ) )
|
||||
{
|
||||
UINT16 usAttachment = PickARandomAttachment(ARMOURATTACHMENT,usItem, bLeggingsClass, FALSE);
|
||||
if ( usAttachment > 0 )
|
||||
{
|
||||
CreateItem( usAttachment, (INT8)(70+Random(31)), &Object );
|
||||
Object.fFlags |= OBJECT_UNDROPPABLE;
|
||||
AttachObject( NULL, &(pp->Inv[ LEGPOS ]), &Object );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
+29
-1
@@ -7068,4 +7068,32 @@ UINT16 GetFirstExplosiveOfType(UINT16 expType)
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
INT8 FindSunGoggles( SOLDIERTYPE * pSoldier, INT16 bonusToBeat )
|
||||
{
|
||||
INT8 bLoop;
|
||||
|
||||
for (bLoop = HANDPOS; bLoop <= SMALLPOCK8POS; bLoop++)
|
||||
{
|
||||
if (Item[pSoldier->inv[bLoop].usItem].brightlightvisionrangebonus > bonusToBeat && Item[pSoldier->inv[bLoop].usItem].usItemClass == IC_FACE )
|
||||
{
|
||||
return( bLoop );
|
||||
}
|
||||
}
|
||||
return( ITEM_NOT_FOUND );
|
||||
}
|
||||
|
||||
INT8 FindNightGoggles( SOLDIERTYPE * pSoldier, INT16 bonusToBeat )
|
||||
{
|
||||
INT8 bLoop;
|
||||
|
||||
for (bLoop = HANDPOS; bLoop <= SMALLPOCK8POS; bLoop++)
|
||||
{
|
||||
if (Item[pSoldier->inv[bLoop].usItem].nightvisionrangebonus > bonusToBeat && Item[pSoldier->inv[bLoop].usItem].usItemClass == IC_FACE )
|
||||
{
|
||||
return( bLoop );
|
||||
}
|
||||
}
|
||||
return( ITEM_NOT_FOUND );
|
||||
}
|
||||
|
||||
@@ -285,5 +285,8 @@ INT16 GetGearAPBonus( SOLDIERTYPE * pSoldier );
|
||||
|
||||
UINT16 GetFirstExplosiveOfType(UINT16 expType);
|
||||
|
||||
INT8 FindSunGoggles( SOLDIERTYPE * pSoldier, INT16 bonusToBeat );
|
||||
INT8 FindNightGoggles( SOLDIERTYPE * pSoldier, INT16 bonusToBeat );
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -186,7 +186,7 @@ enum
|
||||
|
||||
|
||||
// CHANGE THIS VALUE TO AFFECT TOTAL SIGHT RANGE
|
||||
#define STRAIGHT_RANGE gGameExternalOptions.ubStraightSightRange
|
||||
//#define STRAIGHT_RANGE gGameExternalOptions.ubStraightSightRange
|
||||
|
||||
// CHANGE THESE VALUES TO ADJUST VARIOUS FOV ANGLES
|
||||
#define STRAIGHT_RATIO 1 //* 1.5
|
||||
@@ -199,11 +199,11 @@ enum
|
||||
#define BEHIND_RATIO 0
|
||||
|
||||
// looking distance defines
|
||||
#define BEHIND (INT8)( BEHIND_RATIO * STRAIGHT_RANGE )
|
||||
#define SBEHIND (INT8)( SBEHIND_RATIO * STRAIGHT_RANGE )
|
||||
#define SIDE (INT8)( SIDE_RATIO * STRAIGHT_RANGE )
|
||||
#define ANGLE (INT8)( ANGLE_RATIO * STRAIGHT_RANGE )
|
||||
#define STRAIGHT (INT8)( STRAIGHT_RATIO * STRAIGHT_RANGE )
|
||||
//#define BEHIND (INT8)( BEHIND_RATIO * STRAIGHT_RANGE )
|
||||
//#define SBEHIND (INT8)( SBEHIND_RATIO * STRAIGHT_RANGE )
|
||||
//#define SIDE (INT8)( SIDE_RATIO * STRAIGHT_RANGE )
|
||||
//#define ANGLE (INT8)( ANGLE_RATIO * STRAIGHT_RANGE )
|
||||
//#define STRAIGHT (INT8)( STRAIGHT_RATIO * STRAIGHT_RANGE )
|
||||
|
||||
|
||||
// opplist value constants
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#include "Reinforcement.h"
|
||||
|
||||
|
||||
extern INT8 STRAIGHT;
|
||||
//extern UINT8 gubSpeedUpAnimationFactor;
|
||||
void SetSoldierAniSpeed( SOLDIERTYPE *pSoldier );
|
||||
|
||||
|
||||
@@ -2895,8 +2895,8 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
case 'N':
|
||||
{
|
||||
SOLDIERTYPE *pTeamSoldier;
|
||||
INT8 bLoop, bSlot1, bSlot2;
|
||||
|
||||
INT8 bLoop, bSlot1, bSlot2, temp;
|
||||
INT16 lastBonus=0;
|
||||
for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++)
|
||||
{
|
||||
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) )
|
||||
@@ -2904,55 +2904,51 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
//2 head slots
|
||||
for (bSlot1 = HEAD1POS; bSlot1 <= HEAD2POS; bSlot1++)
|
||||
{
|
||||
if ( (pTeamSoldier->inv[bSlot1].usItem == SUNGOGGLES)||(pTeamSoldier->inv[bSlot1].usItem == NIGHTGOGGLES)||(pTeamSoldier->inv[bSlot1].usItem == UVGOGGLES) )
|
||||
if ( Item[pTeamSoldier->inv[bSlot1].usItem].brightlightvisionrangebonus > 0 )
|
||||
{
|
||||
switch (pTeamSoldier->inv[bSlot1].usItem)
|
||||
lastBonus=0;
|
||||
bSlot2 = ITEM_NOT_FOUND;
|
||||
temp = 0;
|
||||
while (temp != ITEM_NOT_FOUND)
|
||||
{
|
||||
case SUNGOGGLES:
|
||||
temp = FindNightGoggles( pTeamSoldier, lastBonus );
|
||||
if ( temp > ITEM_NOT_FOUND )
|
||||
{
|
||||
bSlot2 = FindObjWithin( pTeamSoldier, UVGOGGLES, HANDPOS, SMALLPOCK8POS );
|
||||
if ( bSlot2 != -1 )
|
||||
{
|
||||
SwapObjs( &(pTeamSoldier->inv[bSlot1]), &(pTeamSoldier->inv[bSlot2] ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
bSlot2 = FindObjWithin( pTeamSoldier, NIGHTGOGGLES, HANDPOS, SMALLPOCK8POS );
|
||||
if ( bSlot2 != -1 )
|
||||
{
|
||||
SwapObjs( &(pTeamSoldier->inv[bSlot1]), &(pTeamSoldier->inv[bSlot2] ) );
|
||||
}
|
||||
}
|
||||
lastBonus = Item[pTeamSoldier->inv[temp].usItem].nightvisionrangebonus;
|
||||
bSlot2 = temp;
|
||||
}
|
||||
break;
|
||||
|
||||
case NIGHTGOGGLES:
|
||||
{
|
||||
bSlot2 = FindObjWithin( pTeamSoldier, SUNGOGGLES, HANDPOS, SMALLPOCK8POS );
|
||||
if ( bSlot2 != -1 )
|
||||
{
|
||||
SwapObjs( &(pTeamSoldier->inv[bSlot1]), &(pTeamSoldier->inv[bSlot2] ) );
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case UVGOGGLES:
|
||||
{
|
||||
bSlot2 = FindObjWithin( pTeamSoldier, SUNGOGGLES, HANDPOS, SMALLPOCK8POS );
|
||||
if ( bSlot2 != -1 )
|
||||
{
|
||||
SwapObjs( &(pTeamSoldier->inv[bSlot1]), &(pTeamSoldier->inv[bSlot2] ) );
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
fCharacterInfoPanelDirty = TRUE;
|
||||
fInterfacePanelDirty = DIRTYLEVEL2;
|
||||
DeleteSoldierLight( pTeamSoldier );
|
||||
PositionSoldierLight( pTeamSoldier );
|
||||
if ( bSlot2 != ITEM_NOT_FOUND )
|
||||
{
|
||||
SwapObjs( &(pTeamSoldier->inv[bSlot1]), &(pTeamSoldier->inv[bSlot2] ) );
|
||||
}
|
||||
break;
|
||||
}
|
||||
else if(Item[pTeamSoldier->inv[bSlot1].usItem].nightvisionrangebonus > 0)
|
||||
{
|
||||
lastBonus=0;
|
||||
bSlot2 = ITEM_NOT_FOUND;
|
||||
temp = 0;
|
||||
while (temp != ITEM_NOT_FOUND)
|
||||
{
|
||||
temp = FindSunGoggles( pTeamSoldier, lastBonus );
|
||||
if ( temp > ITEM_NOT_FOUND )
|
||||
{
|
||||
lastBonus = Item[pTeamSoldier->inv[temp].usItem].brightlightvisionrangebonus;
|
||||
bSlot2 = temp;
|
||||
}
|
||||
}
|
||||
if ( bSlot2 != ITEM_NOT_FOUND )
|
||||
{
|
||||
SwapObjs( &(pTeamSoldier->inv[bSlot1]), &(pTeamSoldier->inv[bSlot2] ) );
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
fCharacterInfoPanelDirty = TRUE;
|
||||
fInterfacePanelDirty = DIRTYLEVEL2;
|
||||
DeleteSoldierLight( pTeamSoldier );
|
||||
PositionSoldierLight( pTeamSoldier );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3193,7 +3189,6 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
|
||||
|
||||
case 'S':
|
||||
|
||||
if (! (gTacticalStatus.uiFlags & INCOMBAT) )
|
||||
{
|
||||
for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; uiLoop++ )
|
||||
|
||||
@@ -951,7 +951,7 @@ INT32 EffectiveArmour( OBJECTTYPE * pObj )
|
||||
{
|
||||
INT32 iValue2;
|
||||
|
||||
iValue2 = Armour[ Item[ CERAMIC_PLATES ].ubClassIndex ].ubProtection;
|
||||
iValue2 = Armour[ Item[ pObj->usAttachItem[bPlate] ].ubClassIndex ].ubProtection;
|
||||
iValue2 = iValue2 * pObj->bAttachStatus[ bPlate ] / 100;
|
||||
|
||||
iValue += iValue2;
|
||||
@@ -1015,12 +1015,12 @@ INT32 ExplosiveEffectiveArmour( OBJECTTYPE * pObj )
|
||||
iValue *= 3;
|
||||
}
|
||||
|
||||
bPlate = FindAttachment( pObj, CERAMIC_PLATES );
|
||||
bPlate = FindFirstArmourAttachment( pObj );
|
||||
if ( bPlate != ITEM_NOT_FOUND )
|
||||
{
|
||||
INT32 iValue2;
|
||||
|
||||
iValue2 = Armour[ Item[ CERAMIC_PLATES ].ubClassIndex ].ubProtection;
|
||||
iValue2 = Armour[ Item[ pObj->usAttachItem[bPlate] ].ubClassIndex ].ubProtection;
|
||||
iValue2 = iValue2 * pObj->bAttachStatus[ bPlate ] / 100;
|
||||
|
||||
iValue += iValue2;
|
||||
@@ -4064,8 +4064,8 @@ INT32 TotalArmourProtection( SOLDIERTYPE *pFirer, SOLDIERTYPE * pTarget, UINT8 u
|
||||
if (pArmour->usItem != NOTHING)
|
||||
{
|
||||
// check plates first
|
||||
if ( iSlot == VESTPOS )
|
||||
{
|
||||
//if ( iSlot == VESTPOS )
|
||||
//{
|
||||
// bPlatePos = FindAttachment( pArmour, CERAMIC_PLATES );
|
||||
bPlatePos = FindFirstArmourAttachment( pArmour);
|
||||
if (bPlatePos != -1)
|
||||
@@ -4087,7 +4087,8 @@ INT32 TotalArmourProtection( SOLDIERTYPE *pFirer, SOLDIERTYPE * pTarget, UINT8 u
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
//}
|
||||
|
||||
|
||||
// if the plate didn't stop the bullet...
|
||||
if ( iImpact > iTotalProtection )
|
||||
|
||||
@@ -59,6 +59,8 @@ typedef PARSE_STAGE;
|
||||
#define SOUNDSFILENAME "Sounds.xml"
|
||||
#define BURSTSOUNDSFILENAME "BurstSounds.xml"
|
||||
|
||||
// Lesh: filename definition
|
||||
#define EXPLOSIONDATAFILENAME "ExplosionData.xml"
|
||||
#define CITYTABLEFILENAME "Cities.xml"
|
||||
|
||||
extern BOOLEAN ReadInItemStats(STR fileName);
|
||||
@@ -122,4 +124,8 @@ extern BOOLEAN WriteAmmoTypeStats();
|
||||
extern BOOLEAN ReadInBurstSoundArray(STR fileName);
|
||||
extern BOOLEAN WriteBurstSoundArray();
|
||||
// Lesh: over
|
||||
// Lesh: 2 new lines added for explosion data
|
||||
extern BOOLEAN ReadInExplosionDataStats(STR fileName);
|
||||
extern BOOLEAN WriteExplosionDataStats();
|
||||
// Lesh: over
|
||||
#endif
|
||||
+28
-21
@@ -152,30 +152,37 @@ UINT8 gubWatchedLocPoints[ TOTAL_SOLDIERS ][ NUM_WATCHED_LOCS ];
|
||||
BOOLEAN gfWatchedLocReset[ TOTAL_SOLDIERS ][ NUM_WATCHED_LOCS ];
|
||||
BOOLEAN gfWatchedLocHasBeenIncremented[ TOTAL_SOLDIERS ][ NUM_WATCHED_LOCS ];
|
||||
|
||||
INT8 gbLookDistance[8][8] =
|
||||
INT8 gbLookDistance[8][8];
|
||||
|
||||
INT8 BEHIND;
|
||||
INT8 SBEHIND;
|
||||
INT8 SIDE;
|
||||
INT8 ANGLE;
|
||||
INT8 STRAIGHT;
|
||||
|
||||
void InitSightRange()
|
||||
{
|
||||
BEHIND = (INT8)( BEHIND_RATIO * gGameExternalOptions.ubStraightSightRange );
|
||||
SBEHIND = (INT8)( SBEHIND_RATIO * gGameExternalOptions.ubStraightSightRange );
|
||||
SIDE = (INT8)( SIDE_RATIO * gGameExternalOptions.ubStraightSightRange );
|
||||
ANGLE = (INT8)( ANGLE_RATIO * gGameExternalOptions.ubStraightSightRange );
|
||||
STRAIGHT = (INT8)( STRAIGHT_RATIO * gGameExternalOptions.ubStraightSightRange );
|
||||
|
||||
// LOOKER DIR LOOKEE DIR
|
||||
gbLookDistance[8][8] =
|
||||
|
||||
// LOOKER DIR LOOKEE DIR
|
||||
// NORTH | NORTHEAST | EAST | SOUTHEAST | SOUTH | SOUTHWEST | WEST | NORTHWEST
|
||||
/* NORTH */ STRAIGHT, ANGLE, SIDE, SBEHIND, BEHIND, SBEHIND, SIDE, ANGLE,
|
||||
/* NORTHEAST */ ANGLE, STRAIGHT, ANGLE, SIDE, SBEHIND, BEHIND, SBEHIND, SIDE,
|
||||
/* EAST */ SIDE, ANGLE, STRAIGHT, ANGLE, SIDE, SBEHIND, BEHIND, SBEHIND,
|
||||
/* SOUTHEAST */ SBEHIND, SIDE, ANGLE, STRAIGHT, ANGLE, SIDE, SBEHIND, BEHIND,
|
||||
/* SOUTH */ BEHIND, SBEHIND, SIDE, ANGLE, STRAIGHT, ANGLE, SIDE, SBEHIND,
|
||||
/* SOUTHWEST */ SBEHIND, BEHIND, SBEHIND, SIDE, ANGLE, STRAIGHT, ANGLE, SIDE,
|
||||
/* WEST */ SIDE, SBEHIND, BEHIND, SBEHIND, SIDE, ANGLE, STRAIGHT, ANGLE,
|
||||
/* NORTHWEST */ ANGLE, SIDE, SBEHIND, BEHIND, SBEHIND, SIDE, ANGLE, STRAIGHT
|
||||
;
|
||||
}
|
||||
|
||||
// NORTH | NORTHEAST | EAST | SOUTHEAST | SOUTH | SOUTHWEST | WEST | NORTHWEST
|
||||
|
||||
/* NORTH */ STRAIGHT, ANGLE, SIDE, SBEHIND, BEHIND, SBEHIND, SIDE, ANGLE,
|
||||
|
||||
/* NORTHEAST */ ANGLE, STRAIGHT, ANGLE, SIDE, SBEHIND, BEHIND, SBEHIND, SIDE,
|
||||
|
||||
/* EAST */ SIDE, ANGLE, STRAIGHT, ANGLE, SIDE, SBEHIND, BEHIND, SBEHIND,
|
||||
|
||||
/* SOUTHEAST */ SBEHIND, SIDE, ANGLE, STRAIGHT, ANGLE, SIDE, SBEHIND, BEHIND,
|
||||
|
||||
/* SOUTH */ BEHIND, SBEHIND, SIDE, ANGLE, STRAIGHT, ANGLE, SIDE, SBEHIND,
|
||||
|
||||
/* SOUTHWEST */ SBEHIND, BEHIND, SBEHIND, SIDE, ANGLE, STRAIGHT, ANGLE, SIDE,
|
||||
|
||||
/* WEST */ SIDE, SBEHIND, BEHIND, SBEHIND, SIDE, ANGLE, STRAIGHT, ANGLE,
|
||||
|
||||
/* NORTHWEST */ ANGLE, SIDE, SBEHIND, BEHIND, SBEHIND, SIDE, ANGLE, STRAIGHT,
|
||||
|
||||
};
|
||||
|
||||
INT8 gbSmellStrength[3] =
|
||||
{
|
||||
|
||||
@@ -64,7 +64,7 @@ UINT8 gubAICounter;
|
||||
//extern UINT8 gubDeadLockDelay;
|
||||
|
||||
//#define DEADLOCK_DELAY 10000 //Madd - let's see what this does -- orig: 15000
|
||||
#define DEADLOCK_DELAY ( gGameExternalOptions.gubDeadLockDelay * 1000 )
|
||||
//#define DEADLOCK_DELAY ( gGameExternalOptions.gubDeadLockDelay * 1000 )
|
||||
|
||||
// Very representing if this computer is the host, therefore controlling the ai
|
||||
extern BYTE gfAmIHost;
|
||||
@@ -474,7 +474,7 @@ void HandleSoldierAI( SOLDIERTYPE *pSoldier )
|
||||
|
||||
if (gfTurnBasedAI)
|
||||
{
|
||||
if ( ( GetJA2Clock() - gTacticalStatus.uiTimeSinceMercAIStart ) > DEADLOCK_DELAY && !gfUIInDeadlock )
|
||||
if ( ( GetJA2Clock() - gTacticalStatus.uiTimeSinceMercAIStart ) > ( gGameExternalOptions.gubDeadLockDelay * 1000 ) && !gfUIInDeadlock )
|
||||
{
|
||||
// ATE: Display message that deadlock occured...
|
||||
LiveMessage( "Breaking Deadlock" );
|
||||
|
||||
@@ -1602,7 +1602,7 @@ INT32 EstimateShotDamage(SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent, UINT8 ub
|
||||
}
|
||||
|
||||
// check for ceramic plates; these do affect monster spit
|
||||
bPlatePos = FindAttachment( &(pOpponent->inv[VESTPOS]), CERAMIC_PLATES );
|
||||
bPlatePos = FindFirstArmourAttachment( &(pOpponent->inv[VESTPOS]) );
|
||||
if (bPlatePos != -1)
|
||||
{
|
||||
iTorsoProt += (INT32) Armour[Item[pOpponent->inv[VESTPOS].usAttachItem[bPlatePos]].ubClassIndex].ubProtection *
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
#include "soldier add.h"
|
||||
#endif
|
||||
|
||||
extern INT8 STRAIGHT; //lal
|
||||
|
||||
#define CAN_CALL( s ) (s->ubBodyType != BLOODCAT && s->ubBodyType != LARVAE_MONSTER && s->ubBodyType != INFANT_MONSTER)
|
||||
#define CAN_LISTEN_TO_CALL( s ) (s->ubBodyType != BLOODCAT && s->ubBodyType != LARVAE_MONSTER)
|
||||
|
||||
|
||||
@@ -70,78 +70,90 @@ extern void AddToShouldBecomeHostileOrSayQuoteList( UINT8 ubID );
|
||||
extern void RecompileLocalMovementCostsForWall( INT16 sGridNo, UINT8 ubOrientation );
|
||||
void FatigueCharacter( SOLDIERTYPE *pSoldier );
|
||||
|
||||
UINT8 ubTransKeyFrame[ NUM_EXP_TYPES ] =
|
||||
#define NO_ALT_SOUND -1
|
||||
|
||||
EXPLOSION_DATA gExpAniData[ NUM_EXP_TYPES ] =
|
||||
{
|
||||
0,
|
||||
17,
|
||||
28,
|
||||
24,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
// Trans Damage Explosion Alternative Explosion Animation
|
||||
// Key Key Sound Explosion Animation Speed
|
||||
// Frame Frame ID SoundID Filename
|
||||
{0, 0, EXPLOSION_1, EXPLOSION_ALT_BLAST_1, "", 0},
|
||||
{17, 3, EXPLOSION_1, EXPLOSION_ALT_BLAST_1, "TILECACHE\\ZGRAV_D.STI", 80},
|
||||
{28, 5, EXPLOSION_BLAST_2, NO_ALT_SOUND, "TILECACHE\\ZGRAV_C.STI", 80},
|
||||
{24, 5, EXPLOSION_BLAST_2, NO_ALT_SOUND, "TILECACHE\\ZGRAV_B.STI", 80},
|
||||
{1, 5, EXPLOSION_1, EXPLOSION_ALT_BLAST_1, "TILECACHE\\shckwave.STI", 20},
|
||||
{1, 18, AIR_ESCAPING_1, NO_ALT_SOUND, "TILECACHE\\WAT_EXP.STI", 80},
|
||||
{1, 18, AIR_ESCAPING_1, NO_ALT_SOUND, "TILECACHE\\TEAR_EXP.STI", 80},
|
||||
{1, 18, AIR_ESCAPING_1, NO_ALT_SOUND, "TILECACHE\\TEAR_EXP.STI", 80},
|
||||
{1, 18, AIR_ESCAPING_1, NO_ALT_SOUND, "TILECACHE\\MUST_EXP.STI", 80}
|
||||
};
|
||||
|
||||
UINT8 ubDamageKeyFrame[ NUM_EXP_TYPES ] =
|
||||
{
|
||||
0,
|
||||
3,
|
||||
5,
|
||||
5,
|
||||
5,
|
||||
18,
|
||||
18,
|
||||
18,
|
||||
18,
|
||||
18,
|
||||
};
|
||||
|
||||
|
||||
UINT32 uiExplosionSoundID[ NUM_EXP_TYPES ] =
|
||||
{
|
||||
EXPLOSION_1,
|
||||
EXPLOSION_1,
|
||||
EXPLOSION_BLAST_2, //LARGE
|
||||
EXPLOSION_BLAST_2,
|
||||
EXPLOSION_1,
|
||||
AIR_ESCAPING_1,
|
||||
AIR_ESCAPING_1,
|
||||
AIR_ESCAPING_1,
|
||||
AIR_ESCAPING_1,
|
||||
325,//TODO: Madd: hard coded for now -- we need to externalize explosion sounds, animations, etc. at some point in the near future
|
||||
};
|
||||
|
||||
|
||||
CHAR8 zBlastFilenames[][70] =
|
||||
{
|
||||
"",
|
||||
"TILECACHE\\ZGRAV_D.STI",
|
||||
"TILECACHE\\ZGRAV_C.STI",
|
||||
"TILECACHE\\ZGRAV_B.STI",
|
||||
"TILECACHE\\shckwave.STI",
|
||||
"TILECACHE\\WAT_EXP.STI",
|
||||
"TILECACHE\\TEAR_EXP.STI",
|
||||
"TILECACHE\\TEAR_EXP.STI",
|
||||
"TILECACHE\\MUST_EXP.STI",
|
||||
"TILECACHE\\FLAM_EXP.STI",
|
||||
};
|
||||
|
||||
CHAR8 sBlastSpeeds[] =
|
||||
{
|
||||
0,
|
||||
80,
|
||||
80,
|
||||
80,
|
||||
20,
|
||||
80,
|
||||
80,
|
||||
80,
|
||||
80,
|
||||
80,
|
||||
80,
|
||||
};
|
||||
//UINT8 ubTransKeyFrame[ NUM_EXP_TYPES ] =
|
||||
//{
|
||||
// 0,
|
||||
// 17,
|
||||
// 28,
|
||||
// 24,
|
||||
// 1,
|
||||
// 1,
|
||||
// 1,
|
||||
// 1,
|
||||
// 1,
|
||||
//};
|
||||
//
|
||||
//UINT8 ubDamageKeyFrame[ NUM_EXP_TYPES ] =
|
||||
//{
|
||||
// 0,
|
||||
// 3,
|
||||
// 5,
|
||||
// 5,
|
||||
// 5,
|
||||
// 18,
|
||||
// 18,
|
||||
// 18,
|
||||
// 18,
|
||||
//};
|
||||
//
|
||||
//
|
||||
//UINT32 uiExplosionSoundID[ NUM_EXP_TYPES ] =
|
||||
//{
|
||||
// EXPLOSION_1,
|
||||
// EXPLOSION_1,
|
||||
// EXPLOSION_BLAST_2, //LARGE
|
||||
// EXPLOSION_BLAST_2,
|
||||
// EXPLOSION_1,
|
||||
// AIR_ESCAPING_1,
|
||||
// AIR_ESCAPING_1,
|
||||
// AIR_ESCAPING_1,
|
||||
// AIR_ESCAPING_1,
|
||||
//};
|
||||
//
|
||||
//
|
||||
//CHAR8 zBlastFilenames[][70] =
|
||||
//{
|
||||
// "",
|
||||
// "TILECACHE\\ZGRAV_D.STI",
|
||||
// "TILECACHE\\ZGRAV_C.STI",
|
||||
// "TILECACHE\\ZGRAV_B.STI",
|
||||
// "TILECACHE\\shckwave.STI",
|
||||
// "TILECACHE\\WAT_EXP.STI",
|
||||
// "TILECACHE\\TEAR_EXP.STI",
|
||||
// "TILECACHE\\TEAR_EXP.STI",
|
||||
// "TILECACHE\\MUST_EXP.STI",
|
||||
//};
|
||||
//
|
||||
//CHAR8 sBlastSpeeds[] =
|
||||
//{
|
||||
// 0,
|
||||
// 80,
|
||||
// 80,
|
||||
// 80,
|
||||
// 20,
|
||||
// 80,
|
||||
// 80,
|
||||
// 80,
|
||||
// 80,
|
||||
//};
|
||||
|
||||
#define BOMB_QUEUE_DELAY (1000 + Random( 500 ) )
|
||||
|
||||
@@ -350,7 +362,7 @@ void GenerateExplosionFromExplosionPointer( EXPLOSIONTYPE *pExplosion )
|
||||
|
||||
AniParams.sGridNo = sGridNo;
|
||||
AniParams.ubLevelID = ANI_TOPMOST_LEVEL;
|
||||
AniParams.sDelay = sBlastSpeeds[ ubTypeID ];
|
||||
AniParams.sDelay = gExpAniData[ ubTypeID ].sBlastSpeed; // Lesh: edit this line
|
||||
AniParams.sStartFrame = pExplosion->sCurrentFrame;
|
||||
AniParams.uiFlags = ANITILE_CACHEDTILE | ANITILE_FORWARD | ANITILE_EXPLOSION;
|
||||
|
||||
@@ -376,12 +388,12 @@ void GenerateExplosionFromExplosionPointer( EXPLOSIONTYPE *pExplosion )
|
||||
//AniParams.uiFlags |= ANITILE_USEABSOLUTEPOS;
|
||||
}
|
||||
|
||||
AniParams.ubKeyFrame1 = ubTransKeyFrame[ ubTypeID ];
|
||||
AniParams.ubKeyFrame1 = gExpAniData[ ubTypeID ].ubTransKeyFrame; // Lesh: edit this line
|
||||
AniParams.uiKeyFrame1Code = ANI_KEYFRAME_BEGIN_TRANSLUCENCY;
|
||||
|
||||
if ( !( uiFlags & EXPLOSION_FLAG_DISPLAYONLY ) )
|
||||
{
|
||||
AniParams.ubKeyFrame2 = ubDamageKeyFrame[ ubTypeID ];
|
||||
AniParams.ubKeyFrame2 = gExpAniData[ ubTypeID ].ubDamageKeyFrame; // Lesh: edit this line
|
||||
AniParams.uiKeyFrame2Code = ANI_KEYFRAME_BEGIN_DAMAGE;
|
||||
}
|
||||
AniParams.uiUserData = usItem;
|
||||
@@ -389,7 +401,7 @@ void GenerateExplosionFromExplosionPointer( EXPLOSIONTYPE *pExplosion )
|
||||
AniParams.uiUserData3 = pExplosion->iID;
|
||||
|
||||
|
||||
strcpy( AniParams.zCachedFile, zBlastFilenames[ ubTypeID ] );
|
||||
strcpy( AniParams.zCachedFile, gExpAniData[ ubTypeID ].zBlastFilename ); // Lesh: edit this line
|
||||
|
||||
CreateAnimationTile( &AniParams );
|
||||
|
||||
@@ -408,16 +420,18 @@ void GenerateExplosionFromExplosionPointer( EXPLOSIONTYPE *pExplosion )
|
||||
}
|
||||
}
|
||||
|
||||
uiSoundID = uiExplosionSoundID[ ubTypeID ];
|
||||
// Lesh: sound randomization
|
||||
uiSoundID = gExpAniData[ ubTypeID ].uiExplosionSoundID;
|
||||
|
||||
if ( uiSoundID == EXPLOSION_1 )
|
||||
{
|
||||
// Randomize
|
||||
if ( Random( 2 ) == 0 )
|
||||
{
|
||||
uiSoundID = EXPLOSION_ALT_BLAST_1;
|
||||
}
|
||||
}
|
||||
if ( gExpAniData[ ubTypeID ].uiAltExplosionSoundID != NO_ALT_SOUND )
|
||||
{
|
||||
// Randomize
|
||||
if ( Random( 2 ) == 0 )
|
||||
{
|
||||
uiSoundID = gExpAniData[ ubTypeID ].uiAltExplosionSoundID;
|
||||
}
|
||||
}
|
||||
// Lesh: sound randomization ends
|
||||
|
||||
PlayJA2Sample( uiSoundID, RATE_11025, SoundVolume( HIGHVOLUME, sGridNo ), 1, SoundDir( sGridNo ) );
|
||||
|
||||
|
||||
@@ -56,10 +56,27 @@ enum EXPLOSION_TYPES
|
||||
SMOKE_EXP,
|
||||
MUSTARD_EXP,
|
||||
BURN_EXP,
|
||||
NUM_EXP_TYPES
|
||||
NUM_EXP_TYPES=50
|
||||
|
||||
} ;
|
||||
|
||||
// Lesh: introducing struct instead of linked arrays
|
||||
#define MAX_BLAST_FILENAME_LEN 70
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT8 ubTransKeyFrame;
|
||||
UINT8 ubDamageKeyFrame;
|
||||
UINT32 uiExplosionSoundID;
|
||||
UINT32 uiAltExplosionSoundID;
|
||||
CHAR8 zBlastFilename[MAX_BLAST_FILENAME_LEN];
|
||||
CHAR8 sBlastSpeed;
|
||||
} EXPLOSION_DATA;
|
||||
|
||||
extern EXPLOSION_DATA gExpAniData[NUM_EXP_TYPES];
|
||||
// Lesh: done here
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT32 uiWorldBombIndex;
|
||||
|
||||
@@ -2996,6 +2996,9 @@
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\XML_ExplosionData.cpp">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
|
||||
@@ -3471,7 +3471,7 @@ STR16 zOptionsScreenHelpText[] =
|
||||
// Options for 1.13
|
||||
L"When ON, the chance to hit is shown on the cursor.",
|
||||
L"GL Burst uses burst cursor.",
|
||||
L"Enemy drop all items, when he is dead.",
|
||||
L"Enemies drop all items on death.",
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@ extern BOOLEAN gfTacticalPlacementGUIActive;
|
||||
extern BOOLEAN gfTacticalPlacementGUIDirty;
|
||||
extern BOOLEAN gfValidLocationsChanged;
|
||||
extern BOOLEAN gfInMsgBox;
|
||||
extern void InitSightRange(); //lal
|
||||
|
||||
|
||||
// callback to confirm game is over
|
||||
@@ -96,6 +97,7 @@ BOOLEAN InitializeGame(void)
|
||||
// Snap: Read options from an INI file in the default of custom Data directory
|
||||
// Moved this up because some settings are used during other inits
|
||||
LoadGameExternalOptions();
|
||||
InitSightRange(); //lal
|
||||
|
||||
// Initlaize mouse subsystems
|
||||
MSYS_Init( );
|
||||
|
||||
Reference in New Issue
Block a user