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:
@@ -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] =
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user