From be346d07ef2912978d8f137bef1c10f35a4dc0bf Mon Sep 17 00:00:00 2001 From: Flugente Date: Mon, 21 Mar 2016 20:07:56 +0000 Subject: [PATCH] - Fix: negative values for ExplosionSoundID or AltExplosionSoundID in ExplosionData.xml cause a game crash, even though negative values are intended - armed vehicles always get the 'mounted' bonus for their guns - removed unused code - increased ASD starting resources git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8115 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Strategic/ASD.cpp | 4 +-- Tactical/Handle UI.cpp | 8 +---- Tactical/Soldier Control.cpp | 4 +++ Tactical/Soldier Create.cpp | 38 ------------------------ Tactical/Soldier Create.h | 1 - Tactical/Weapons.cpp | 14 +-------- TileEngine/Explosion Control.cpp | 51 ++++++++++++++------------------ TileEngine/Explosion Control.h | 4 +-- TileEngine/XML_ExplosionData.cpp | 8 ++--- 9 files changed, 37 insertions(+), 95 deletions(-) diff --git a/Strategic/ASD.cpp b/Strategic/ASD.cpp index 4ea0c52f..4c295329 100644 --- a/Strategic/ASD.cpp +++ b/Strategic/ASD.cpp @@ -100,11 +100,11 @@ std::vector gEnemyHeliVector; void InitASD( ) { - gASDResource[ASD_MONEY] = 100000; + gASDResource[ASD_MONEY] = 200000; gASDResource[ASD_FUEL] = 0; gASDResource[ASD_HELI] = 0; gASDResource[ASD_JEEP] = 2; - gASDResource[ASD_TANK] = 0; + gASDResource[ASD_TANK] = 2; gASDResource_Ordered[ASD_MONEY] = 0; gASDResource_Ordered[ASD_FUEL] = 0; diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index 3cb229b0..0290f048 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -1155,13 +1155,7 @@ UINT32 UIHandleNewBadMerc( UI_EVENT *pUIEvent ) { return( GAME_SCREEN ); } - - // Flugente hack - /*if ( Water(usMapPos) ) - pSoldier = TacticalCreateEnemyBoat( ); - else - pSoldier = TacticalCreateEnemyJeep( );*/ - + usRandom = (UINT16)Random( 20 ); if( usRandom < 5 ) pSoldier = TacticalCreateAdministrator(); diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 8156f265..9c9b43d5 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -14307,6 +14307,10 @@ BOOLEAN SOLDIERTYPE::IsWeaponMounted( void ) if ( TileIsOutOfBounds( this->sGridNo ) ) return(FALSE); + // if we are a combat vehicle, our guns are always mounted + if ( ARMED_VEHICLE( this ) ) + return TRUE; + // anv: passengers who can shoot can rest their guns if ( this->flags.uiStatusFlags & (SOLDIER_DRIVER | SOLDIER_PASSENGER) ) { diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index 6c11c20f..db3b216c 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -3170,44 +3170,6 @@ SOLDIERTYPE* TacticalCreateEnemyJeep( ) return(pSoldier); } -//USED BY STRATEGIC AI and AUTORESOLVE -// should to be succeeded by TacticalCreateArmyTroop/EliteEnemy and AddSoldierToVehicle -SOLDIERTYPE* TacticalCreateJeep() -{ - BASIC_SOLDIERCREATE_STRUCT bp; - SOLDIERCREATE_STRUCT pp; - UINT8 ubID; - SOLDIERTYPE * pSoldier; - SOLDIERTYPE * pDriver; - - if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) - { - pSoldier = ReserveTacticalSoldierForAutoresolve( SOLDIER_CLASS_ELITE ); - if( pSoldier ) return pSoldier; - } - - memset( &bp, 0, sizeof( BASIC_SOLDIERCREATE_STRUCT ) ); - RandomizeRelativeLevel( &( bp.bRelativeAttributeLevel ), SOLDIER_CLASS_ELITE ); - RandomizeRelativeLevel( &( bp.bRelativeEquipmentLevel ), SOLDIER_CLASS_ELITE ); - bp.bTeam = CIV_TEAM; - bp.bOrders = STATIONARY; - bp.bAttitude = (INT8) Random( MAXATTITUDES ); - bp.ubBodyType = JEEP; - bp.ubSoldierClass = SOLDIER_CLASS_NONE; - CreateDetailedPlacementGivenBasicPlacementInfo( &pp, &bp ); - pp.ubProfile = 199; - - pSoldier = TacticalCreateSoldier( &pp, &ubID ); - if ( pSoldier ) - { - // send soldier to centre of map, roughly - pSoldier->aiData.sNoiseGridno = (CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS); - pSoldier->aiData.ubNoiseVolume = MAX_MISC_NOISE_DURATION; - } - - return( pSoldier ); -} - //USED BY STRATEGIC AI and AUTORESOLVE SOLDIERTYPE* TacticalCreateZombie() { diff --git a/Tactical/Soldier Create.h b/Tactical/Soldier Create.h index b7242c65..0d6522f4 100644 --- a/Tactical/Soldier Create.h +++ b/Tactical/Soldier Create.h @@ -444,7 +444,6 @@ SOLDIERTYPE* TacticalCreateMilitia( UINT8 ubMilitiaClass, INT16 sX, INT16 sY ); SOLDIERTYPE* TacticalCreateCreature( INT8 bCreatureBodyType ); SOLDIERTYPE* TacticalCreateEnemyTank(); SOLDIERTYPE* TacticalCreateEnemyJeep( ); -SOLDIERTYPE* TacticalCreateJeep(); // Flugente: create an armed civilian SOLDIERTYPE* TacticalCreateArmedCivilian( UINT8 usSoldierClass = SOLDIER_CLASS_ARMY ); diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 07b6220d..4bae5123 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -9681,19 +9681,7 @@ INT32 BulletImpact( SOLDIERTYPE *pFirer, BULLET *pBullet, SOLDIERTYPE * pTarget, { ApplyDrugs_New( pTarget, ammoitem, 100 ); } - - /*// Flugente: ammo can now add the lifedamage drug effect. This will kill the target in a few turns. - // this is intended to work on darts, but it is possible on any ammo - if ( AmmoTypes[ubAmmoType].ammoflag & AMMO_NEUROTOXIN ) - { - pTarget->usSoldierFlagMask |= SOLDIER_DRUGGED; - - ApplyDrugs_New( pTarget, ammoitem, 100 ); - - // Add lifedamage effects - pTarget->AddDrugValues( DRUG_TYPE_LIFEDAMAGE, Drug[DRUG_TYPE_LIFEDAMAGE].ubDrugEffect, Drug[DRUG_TYPE_LIFEDAMAGE].ubDrugTravelRate, Drug[DRUG_TYPE_LIFEDAMAGE].ubDrugSideEffect ); - } - else */ + if ( AmmoTypes[ubAmmoType].dart && sHitBy > 20 ) { if (pubSpecial) diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index 70943e1f..041252fd 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -483,7 +483,7 @@ void GenerateExplosionFromExplosionPointer( EXPLOSIONTYPE *pExplosion ) UINT16 usItem; UINT8 ubTerrainType; INT8 bLevel; - UINT32 uiSoundID; + INT32 sSoundID; ANITILE_PARAMS AniParams; @@ -568,36 +568,30 @@ void GenerateExplosionFromExplosionPointer( EXPLOSIONTYPE *pExplosion ) { pExplosion->iLightID = LightSpriteCreate("FLSHBANG.LHT", 0 ); } - else - // generic light - // DO ONLY IF WE'RE AT A GOOD LEVEL - if ( ubAmbientLightLevel >= MIN_AMB_LEVEL_FOR_MERC_LIGHTS ) - { - pExplosion->iLightID = LightSpriteCreate("L-R04.LHT", 0 ); - } + // generic light + // DO ONLY IF WE'RE AT A GOOD LEVEL + else if ( ubAmbientLightLevel >= MIN_AMB_LEVEL_FOR_MERC_LIGHTS ) + { + pExplosion->iLightID = LightSpriteCreate("L-R04.LHT", 0 ); + } - if( pExplosion->iLightID != -1 ) - { - LightSpritePower ( pExplosion->iLightID, TRUE ); - LightSpriteRoofStatus( pExplosion->iLightID, pExplosion->Params.bLevel ); - LightSpritePosition ( pExplosion->iLightID, (INT16)(sX/CELL_X_SIZE), (INT16)(sY/CELL_Y_SIZE) ); - } + if( pExplosion->iLightID != -1 ) + { + LightSpritePower ( pExplosion->iLightID, TRUE ); + LightSpriteRoofStatus( pExplosion->iLightID, pExplosion->Params.bLevel ); + LightSpritePosition ( pExplosion->iLightID, (INT16)(sX/CELL_X_SIZE), (INT16)(sY/CELL_Y_SIZE) ); + } - // Lesh: sound randomization - uiSoundID = gExpAniData[ ubTypeID ].uiExplosionSoundID; + // Lesh: sound randomization + sSoundID = gExpAniData[ubTypeID].sExplosionSoundID; - 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 ) ); + // Randomize + if ( gExpAniData[ubTypeID].sAltExplosionSoundID > NO_ALT_SOUND && (Random( 2 ) || sSoundID < 0) ) + sSoundID = gExpAniData[ubTypeID].sAltExplosionSoundID; + // Lesh: sound randomization ends + if ( sSoundID > NO_ALT_SOUND ) + PlayJA2Sample( sSoundID, RATE_11025, SoundVolume( HIGHVOLUME, sGridNo ), 1, SoundDir( sGridNo ) ); } @@ -1632,8 +1626,9 @@ BOOLEAN DamageSoldierFromBlast( UINT8 ubPerson, UINT8 ubOwner, INT32 sBombGridNo sNewWoundAmt = (INT16)(((sNewWoundAmt * (100 + gSkillTraitValues.ubHWDamageBonusPercentForHW * NUM_SKILL_TRAITS( MercPtrs[ ubOwner ], HEAVY_WEAPONS_NT ))) / 100) + 0.5); // +15% } } + // adjust damage resistance of TANKS - if ( ARMED_VEHICLE( pSoldier ) && gGameOptions.fNewTraitSystem ) + if ( TANK( pSoldier ) && gGameOptions.fNewTraitSystem ) { sNewWoundAmt = (INT16)(sNewWoundAmt * (100 - gSkillTraitValues.bTanksDamageResistanceModifier) / 100); // another half of this for ordinary grenades diff --git a/TileEngine/Explosion Control.h b/TileEngine/Explosion Control.h index 14017d07..525188e7 100644 --- a/TileEngine/Explosion Control.h +++ b/TileEngine/Explosion Control.h @@ -70,8 +70,8 @@ typedef struct { UINT8 ubTransKeyFrame; UINT8 ubDamageKeyFrame; - UINT32 uiExplosionSoundID; - UINT32 uiAltExplosionSoundID; + INT32 sExplosionSoundID; + INT32 sAltExplosionSoundID; CHAR8 zBlastFilename[MAX_BLAST_FILENAME_LEN]; CHAR8 sBlastSpeed; } EXPLOSION_DATA; diff --git a/TileEngine/XML_ExplosionData.cpp b/TileEngine/XML_ExplosionData.cpp index 6464a761..06079109 100644 --- a/TileEngine/XML_ExplosionData.cpp +++ b/TileEngine/XML_ExplosionData.cpp @@ -119,12 +119,12 @@ explosionDataEndElementHandle(void *userData, const XML_Char *name) else if(strcmp(name, "ExplosionSoundID") == 0) { pData->curElement = ELEMENT; - pData->expData.uiExplosionSoundID = (UINT32) strtoul(pData->szCharData, NULL, 0); + pData->expData.sExplosionSoundID = (INT32) strtoul(pData->szCharData, NULL, 0); } else if(strcmp(name, "AltExplosionSoundID") == 0) { pData->curElement = ELEMENT; - pData->expData.uiAltExplosionSoundID = (UINT32) strtoul(pData->szCharData, NULL, 0); + pData->expData.sAltExplosionSoundID = (INT32)strtoul( pData->szCharData, NULL, 0 ); } else if(strcmp(name, "BlastFilename") == 0) { @@ -230,8 +230,8 @@ BOOLEAN WriteExplosionDataStats() FilePrintf(hFile,"\t\t%d\r\n", gExpAniData[cnt].ubTransKeyFrame); FilePrintf(hFile,"\t\t%d\r\n", gExpAniData[cnt].ubDamageKeyFrame); - FilePrintf(hFile,"\t\t%d\r\n", gExpAniData[cnt].uiExplosionSoundID); - FilePrintf(hFile,"\t\t%d\r\n", gExpAniData[cnt].uiAltExplosionSoundID); + FilePrintf(hFile,"\t\t%d\r\n", gExpAniData[cnt].sExplosionSoundID ); + FilePrintf(hFile,"\t\t%d\r\n", gExpAniData[cnt].sAltExplosionSoundID ); FilePrintf(hFile,"\t\t%s\r\n", gExpAniData[cnt].zBlastFilename); FilePrintf(hFile,"\t\t%d\r\n", gExpAniData[cnt].sBlastSpeed);