mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
*************************************************************************
** Merged source code from development (MP+BMP) trunk (Revision: 3352) ** ** https://81.169.133.124/source/ja2/branches/Wanne/JA2%201.13%20MP ** ************************************************************************* 1 (Rev. 3343) Changes: Control hardcoded list of unclickable ("bad") sectors via XML file. (by Realist) On the strategic map, the player cannot click or highlight specific sectors (e.g. A4, A5). Introduce a <BadSector> tag in MovementCosts.xml that flags a sector as "bad". (<BadSector>1</BadSector>) Files: /branches/Wanne/JA2 1.13 MP/Build/Strategic/Map Screen Interface Map.cpp /branches/Wanne/JA2 1.13 MP/Build/Strategic/Strategic Movement Costs.cpp /branches/Wanne/JA2 1.13 MP/Build/Strategic/mapscreen.cpp /branches/Wanne/JA2 1.13 MP/GameDir/Data/TableData/Map /branches/Wanne/JA2 1.13 MP/GameDir/Data/TableData/Map/MovementCosts.xml /branches/Wanne/JA2 1.13 MP/GameDir/Data-1.13/TableData/Map /branches/Wanne/JA2 1.13 MP/GameDir/Data-1.13/TableData/Map/MovementCosts.xml 2 (Rev. 3344) Changes: Move hardcoded underground sectors initialization to Lua script file. (by Realist) Locate "initunderground.lua" at data-xyz\scripts ("xyz" subject to change). Lua script allows easily adding underground sectors at arbitrary locations and defining enemy garrisons and creature population. Also enables underground bloodcat population. Files: /branches/Wanne/JA2 1.13 MP/Build/Strategic/Campaign Init.cpp /branches/Wanne/JA2 1.13 MP/Build/Strategic/Campaign Types.h /branches/Wanne/JA2 1.13 MP/Build/Strategic/Queen Command.cpp /branches/Wanne/JA2 1.13 MP/Build/Strategic/Strategic AI.cpp /branches/Wanne/JA2 1.13 MP/Build/Strategic/Strategic_2005Express.vcproj /branches/Wanne/JA2 1.13 MP/Build/Strategic/Strategic_VS2008.vcproj /branches/Wanne/JA2 1.13 MP/Build/Strategic/UndergroundInit.cpp /branches/Wanne/JA2 1.13 MP/Build/Strategic/UndergroundInit.h /branches/Wanne/JA2 1.13 MP/Build/Strategic/strategicmap.cpp /branches/Wanne/JA2 1.13 MP/Build/Tactical/Soldier Init List.cpp /branches/Wanne/JA2 1.13 MP/GameDir/Data/Scripts /branches/Wanne/JA2 1.13 MP/GameDir/Data/Scripts/initunderground.lua /branches/Wanne/JA2 1.13 MP/GameDir/Data-1.13/Scripts /branches/Wanne/JA2 1.13 MP/GameDir/Data-1.13/Scripts/initunderground.lua 3 (Rev. 3345) Changes: Bugfix: In Method CreateDestroyMouseRegionsForFacilityAssignmentMenu() (by Headrock) Files: /branches/Wanne/JA2 1.13 MP/Build/Strategic/Assignments.cpp 4 (Rev. 3346) Changes: Changed order of properties in GameSettings.cpp (by Headrock) HAM 3.6 fixes (by Headrock) Sorted Data-1.13\ja2_options.ini (by Headrock) Files: /branches/Wanne/JA2 1.13 MP/Build/GameSettings.cpp /branches/Wanne/JA2 1.13 MP/Build/GameSettings.h /branches/Wanne/JA2 1.13 MP/Build/Laptop/BobbyRGuns.cpp /branches/Wanne/JA2 1.13 MP/Build/Strategic/Assignments.cpp /branches/Wanne/JA2 1.13 MP/Build/Strategic/MilitiaSquads.cpp /branches/Wanne/JA2 1.13 MP/Build/Strategic/Strategic Mines.cpp /branches/Wanne/JA2 1.13 MP/Build/Strategic/Town Militia.cpp /branches/Wanne/JA2 1.13 MP/Build/Tactical/Campaign.cpp /branches/Wanne/JA2 1.13 MP/Build/Tactical/Interface Enhanced.cpp /branches/Wanne/JA2 1.13 MP/Build/Tactical/Interface Items.cpp /branches/Wanne/JA2 1.13 MP/Build/Tactical/Items.cpp /branches/Wanne/JA2 1.13 MP/Build/Tactical/Items.h /branches/Wanne/JA2 1.13 MP/Build/Tactical/Overhead.cpp /branches/Wanne/JA2 1.13 MP/Build/Tactical/Soldier Control.cpp /branches/Wanne/JA2 1.13 MP/Build/Tactical/Soldier Profile.cpp /branches/Wanne/JA2 1.13 MP/Build/Tactical/Weapons.cpp /branches/Wanne/JA2 1.13 MP/Build/TileEngine/Explosion Control.cpp /branches/Wanne/JA2 1.13 MP/GameDir/Data-1.13/Ja2_Options.INI /branches/Wanne/JA2 1.13 MP/GameDir/INIEditorJA2Options.xml 5 (Rev. 3347) Changes: Bugfix: Turns out that the program is saving the number of used Placement Slots to the temp file fine, but if that number is equal to the limit of how many enemies/civvies are allowed in a sector by the INI settings, it leads to an assertion error instead when trying to re-load that sector. (by Headrock) Re-ordered Data/Ja2_Options.INI (by Headrock) Files: /branches/Wanne/JA2 1.13 MP/Build/Tactical/Enemy Soldier Save.cpp /branches/Wanne/JA2 1.13 MP/GameDir/Data/Ja2_Options.INI 6 (Rev. 3348) Changes: Translated missing HAM 3.6 German Texts (by systemfehler) Files: /branches/Wanne/JA2 1.13 MP/Build/Utils/_GermanText.cpp 7 (Rev. 3351) Changes: PlusAI 1.0 Patch (by Headrock) Files: /branches/Wanne/JA2 1.13 MP/Build/Tactical/Points.cpp /branches/Wanne/JA2 1.13 MP/Build/Tactical/Points.h /branches/Wanne/JA2 1.13 MP/Build/TacticalAI/Attacks.cpp /branches/Wanne/JA2 1.13 MP/Build/TacticalAI/DecideAction.cpp /branches/Wanne/JA2 1.13 MP/Build/TacticalAI/FindLocations.cpp /branches/Wanne/JA2 1.13 MP/Build/TacticalAI/ai.h 8 (Rev. 3352) Changes: Bugfix: The DEBUG only setting "fEnableInventoryPoolQ" is now only enabled in a DEBUG version. In all other builds it is set to FALSE. Files: /branches/Wanne/JA2 1.13 MP/Build/GameSettings.cpp git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@3354 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+679
-622
File diff suppressed because it is too large
Load Diff
+16
-20
@@ -54,9 +54,9 @@ enum
|
||||
TOPTION_SILENT_SKYRIDER,
|
||||
TOPTION_LOW_CPU_USAGE,
|
||||
TOPTION_ENHANCED_DESC_BOX,
|
||||
|
||||
|
||||
// arynn
|
||||
TOPTION_TOGGLE_TURN_MODE,
|
||||
TOPTION_TOGGLE_TURN_MODE,
|
||||
|
||||
// HEADROCK HAM 3.6:
|
||||
TOPTION_STAT_PROGRESS_BARS,
|
||||
@@ -85,7 +85,6 @@ enum
|
||||
TOPTION_HIDE_BULLETS,
|
||||
TOPTION_TRACKING_MODE,
|
||||
|
||||
|
||||
NUM_ALL_GAME_OPTIONS,
|
||||
};
|
||||
|
||||
@@ -252,11 +251,11 @@ typedef struct
|
||||
BOOLEAN gfVSync;
|
||||
|
||||
//Animation settings
|
||||
UINT32 gubPlayerTurnSpeedUpFactor;
|
||||
UINT32 gubEnemyTurnSpeedUpFactor;
|
||||
UINT32 gubCreatureTurnSpeedUpFactor;
|
||||
UINT32 gubMilitiaTurnSpeedUpFactor;
|
||||
UINT32 gubCivilianTurnSpeedUpFactor;
|
||||
FLOAT giPlayerTurnSpeedUpFactor;
|
||||
FLOAT giEnemyTurnSpeedUpFactor;
|
||||
FLOAT giCreatureTurnSpeedUpFactor;
|
||||
FLOAT giMilitiaTurnSpeedUpFactor;
|
||||
FLOAT giCivilianTurnSpeedUpFactor;
|
||||
|
||||
//Sound settings
|
||||
UINT32 guiWeaponSoundEffectsVolume;
|
||||
@@ -280,7 +279,7 @@ typedef struct
|
||||
UINT32 guiAllowMilitiaGroupsDelay;
|
||||
UINT32 guiTrainVeteranMilitiaDelay;
|
||||
UINT32 guiCreateEachNHours;
|
||||
UINT32 guiDivOfOriginalMilitia;
|
||||
UINT32 guiNumMobileMilitiaTrained;
|
||||
// HEADROCK HAM 3.6: These settings are REDUNDANT.
|
||||
//UINT32 guiMinMilitiaSquadSize;
|
||||
//UINT32 guiMaxMilitiaSquadSize;
|
||||
@@ -334,7 +333,7 @@ typedef struct
|
||||
UINT32 ubGameProgressPortionIncome;
|
||||
UINT32 ubGameProgressPortionVisited;
|
||||
UINT32 ubGameProgressMinimum;
|
||||
UINT32 ubGameProgressIncrement;
|
||||
INT32 bGameProgressModifier;
|
||||
|
||||
// WDS - Advanced start
|
||||
//UINT32 ubIMPStartingLevel; // removed - SANDRO
|
||||
@@ -356,9 +355,9 @@ typedef struct
|
||||
|
||||
//Gameplay settings
|
||||
|
||||
UINT32 ubExplosivesDamageMultiplier;
|
||||
UINT32 ubGunDamageMultiplier;
|
||||
UINT32 ubMeleeDamageMultiplier;
|
||||
INT32 iExplosivesDamageModifier;
|
||||
INT32 iGunDamageModifier;
|
||||
INT32 iMeleeDamageModifier;
|
||||
|
||||
UINT32 ubEasyEnemyStartingAlertLevel;
|
||||
UINT32 ubNormalEnemyStartingAlertLevel;
|
||||
@@ -513,7 +512,7 @@ BOOLEAN gbBulletTracer;
|
||||
INT32 iEnhancedDescriptionBox;
|
||||
|
||||
// WANNE: Always use "prof.dat".
|
||||
BOOLEAN fAlwaysUseProfDat;
|
||||
BOOLEAN fUseDifficultyBasedProfDat;
|
||||
|
||||
// CPT: Cover System Settings
|
||||
UINT8 ubStealthTraitCoverValue;
|
||||
@@ -556,7 +555,7 @@ BOOLEAN gbBulletTracer;
|
||||
UINT8 ubAimPenaltyPerTargetShock;
|
||||
|
||||
// HEADROCK HAM B2.3: It is now possible for "cowering" to increase a target's suppression.
|
||||
UINT16 usCowerEffectOnSuppression;
|
||||
UINT8 ubCowerEffectOnSuppression;
|
||||
|
||||
// HEADROCK HAM B2.5: Turn on Realistic Tracers. 0 = off (regular tracers). 1 = Fully realistic tracers. 2 = Tracer Bump + 1.13 Autofire Penalty Reduction
|
||||
UINT8 ubRealisticTracers;
|
||||
@@ -668,11 +667,8 @@ BOOLEAN gbBulletTracer;
|
||||
// HEADROCK HAM 3.1: This is a suppression tool that not everyone will like. It gives an on-screen message when any character has been suppressed so much he's lost his next turn completely!
|
||||
BOOLEAN fShowSuppressionShutdown;
|
||||
|
||||
// HEADROCK HAM 3.1: Set whether you'd like to determine yourself which mine (if any) will shut down during the campaign.
|
||||
BOOLEAN fManuallySelectMineShutdown;
|
||||
|
||||
// HEADROCK HAM 3.1: Select which mine will run out. 0 = no mine. 1 = San Mona (unused), 2 = Drassen, 3 = Alma, 4 = Cambria, 5 = Chitzena, 6 = Grumm.
|
||||
UINT8 ubWhichMineRunsOut;
|
||||
// HEADROCK HAM 3.1: Select which mine will run out. -1 = Random selection. 0 = no mine. 1 = San Mona (unused), 2 = Drassen, 3 = Alma, 4 = Cambria, 5 = Chitzena, 6 = Grumm.
|
||||
INT8 bWhichMineRunsOut;
|
||||
|
||||
// HEADROCK HAM 3.1: Can the Humvee go off-road?
|
||||
BOOLEAN fHumveeOffroad;
|
||||
|
||||
+4
-4
@@ -13,12 +13,12 @@
|
||||
#ifdef JA2EDITOR
|
||||
|
||||
//MAP EDITOR BUILD VERSION
|
||||
CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.3342" };
|
||||
CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.3353" };
|
||||
|
||||
#elif defined JA2BETAVERSION
|
||||
|
||||
//BETA/TEST BUILD VERSION
|
||||
CHAR16 zVersionLabel[256] = { L"Debug v1.13.3342" };
|
||||
CHAR16 zVersionLabel[256] = { L"Debug v1.13.3353" };
|
||||
|
||||
#elif defined CRIPPLED_VERSION
|
||||
|
||||
@@ -28,11 +28,11 @@ CHAR16 zVersionLabel[256] = { L"Beta v. 0.98" };
|
||||
#else
|
||||
|
||||
//RELEASE BUILD VERSION
|
||||
CHAR16 zVersionLabel[256] = { L"Release v1.13.3342" };
|
||||
CHAR16 zVersionLabel[256] = { L"Release v1.13.3353" };
|
||||
|
||||
#endif
|
||||
|
||||
CHAR8 czVersionNumber[16] = { "Build 10.03.01" }; //YY.MM.DD
|
||||
CHAR8 czVersionNumber[16] = { "Build 10.03.07" }; //YY.MM.DD
|
||||
CHAR16 zTrackingNumber[16] = { L"Z" };
|
||||
|
||||
|
||||
|
||||
+21
-7
@@ -1901,11 +1901,15 @@ UINT16 DisplayDamage(UINT16 usPosY, UINT16 usIndex, UINT16 usFontHeight)
|
||||
|
||||
if ( Item[ usIndex ].usItemClass == IC_GUN || Item[ usIndex ].usItemClass == IC_LAUNCHER )
|
||||
{
|
||||
gunDamage = (UINT16)( Weapon[ usIndex ].ubImpact + ( (double) Weapon[ usIndex ].ubImpact / 100) * gGameExternalOptions.ubGunDamageMultiplier );
|
||||
// HEADROCK HAM 3.6: Can now take a negative modifier
|
||||
gunDamage = (UINT16)GetModifiedGunDamage( Weapon[ usIndex ].ubImpact );
|
||||
//gunDamage = (UINT16)( Weapon[ usIndex ].ubImpact + ( (double) Weapon[ usIndex ].ubImpact / 100) * gGameExternalOptions.ubGunDamageMultiplier );
|
||||
}
|
||||
else
|
||||
{
|
||||
gunDamage = (UINT16)( Weapon[ usIndex ].ubImpact + ( (double) Weapon[ usIndex ].ubImpact / 100) * gGameExternalOptions.ubMeleeDamageMultiplier );
|
||||
// HEADROCK HAM 3.6: Can now take a negative modifier
|
||||
gunDamage = (UINT16)GetModifiedMeleeDamage( Weapon[ usIndex ].ubImpact );
|
||||
//gunDamage = (UINT16)( Weapon[ usIndex ].ubImpact + ( (double) Weapon[ usIndex ].ubImpact / 100) * gGameExternalOptions.ubMeleeDamageMultiplier );
|
||||
}
|
||||
|
||||
DrawTextToScreen(BobbyRText[BOBBYR_GUNS_DAMAGE], BOBBYR_ITEM_WEIGHT_TEXT_X, (UINT16)usPosY, 0, BOBBYR_ITEM_DESC_TEXT_FONT, BOBBYR_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED);
|
||||
@@ -2409,7 +2413,9 @@ void CreateMouseRegionForBigImage( UINT16 usPosY, UINT8 ubCount, INT16 *pItemNum
|
||||
//Info for weapons
|
||||
//if ( Item[ pItemNumbers[ i ] ].usItemClass == IC_GUN )
|
||||
{
|
||||
UINT16 gunDamage = (UINT16)( Weapon[ pItemNumbers[ i ] ].ubImpact + ( (double) Weapon[ pItemNumbers[ i ] ].ubImpact / 100) * gGameExternalOptions.ubGunDamageMultiplier );
|
||||
// HEADROCK HAM 3.6: Can now take a negative modifier.
|
||||
//UINT16 gunDamage = (UINT16)( Weapon[ pItemNumbers[ i ] ].ubImpact + ( (double) Weapon[ pItemNumbers[ i ] ].ubImpact / 100) * gGameExternalOptions.ubGunDamageMultiplier );
|
||||
UINT16 gunDamage = (UINT16)GetModifiedGunDamage( Weapon[ pItemNumbers[ i ] ].ubImpact );
|
||||
UINT16 readyAPs = (UINT16)(( Weapon[ pItemNumbers[ i ] ].ubReadyTime * (100 - Item[ pItemNumbers[ i ] ].percentreadytimeapreduction)) / 100);
|
||||
|
||||
//Calculate AP's
|
||||
@@ -2563,7 +2569,9 @@ void CreateMouseRegionForBigImage( UINT16 usPosY, UINT8 ubCount, INT16 *pItemNum
|
||||
//Info for weapons
|
||||
//if ( Item[ pItemNumbers[ i ] ].usItemClass == IC_GUN )
|
||||
{
|
||||
UINT16 gunDamage = (UINT16)( Weapon[ pItemNumbers[ i ] ].ubImpact + ( (double) Weapon[ pItemNumbers[ i ] ].ubImpact / 100) * gGameExternalOptions.ubGunDamageMultiplier );
|
||||
// HEADROCK HAM 3.6: Can now take a negative modifier.
|
||||
UINT16 gunDamage = (UINT16)GetModifiedGunDamage( Weapon[ pItemNumbers[ i ] ].ubImpact );
|
||||
//UINT16 gunDamage = (UINT16)( Weapon[ pItemNumbers[ i ] ].ubImpact + ( (double) Weapon[ pItemNumbers[ i ] ].ubImpact / 100) * gGameExternalOptions.ubGunDamageMultiplier );
|
||||
|
||||
swprintf( pStr, L"%s\n%s %d\n%s %d\n%s %d\n%s %s\n%s %1.1f %s",
|
||||
ItemNames[ pItemNumbers[ i ] ],
|
||||
@@ -2587,7 +2595,9 @@ void CreateMouseRegionForBigImage( UINT16 usPosY, UINT8 ubCount, INT16 *pItemNum
|
||||
case IC_THROWING_KNIFE:
|
||||
case IC_PUNCH:
|
||||
{
|
||||
UINT16 meleeDamage = (UINT16)( Weapon[ pItemNumbers[ i ] ].ubImpact + ( (double) Weapon[ pItemNumbers[ i ] ].ubImpact / 100) * gGameExternalOptions.ubMeleeDamageMultiplier );
|
||||
// HEADROCK HAM 3.6: Can now take a negative modifier
|
||||
//UINT16 meleeDamage = (UINT16)( Weapon[ pItemNumbers[ i ] ].ubImpact + ( (double) Weapon[ pItemNumbers[ i ] ].ubImpact / 100) * gGameExternalOptions.ubMeleeDamageMultiplier );
|
||||
UINT16 meleeDamage = (UINT16)GetModifiedMeleeDamage( Weapon[ pItemNumbers[ i ] ].ubImpact );
|
||||
|
||||
swprintf( pStr, L"%s\n%s %d\n%s %s\n%s %1.1f %s",
|
||||
ItemNames[ pItemNumbers[ i ] ],
|
||||
@@ -2640,8 +2650,12 @@ void CreateMouseRegionForBigImage( UINT16 usPosY, UINT8 ubCount, INT16 *pItemNum
|
||||
// explosives
|
||||
//if ( (Item[ pItemNumbers[ i ] ].usItemClass == IC_GRENADE)||(Item[ pItemNumbers[ i ] ].usItemClass == IC_BOMB) )
|
||||
{
|
||||
UINT16 explDamage = (UINT16)( Explosive[Item[ pItemNumbers[ i ] ].ubClassIndex].ubDamage + ( (double) Explosive[Item[ pItemNumbers[ i ] ].ubClassIndex].ubDamage / 100) * gGameExternalOptions.ubExplosivesDamageMultiplier );
|
||||
UINT16 explStunDamage = (UINT16)( Explosive[Item[ pItemNumbers[ i ] ].ubClassIndex].ubStunDamage + ( (double) Explosive[Item[ pItemNumbers[ i ] ].ubClassIndex].ubStunDamage / 100) * gGameExternalOptions.ubExplosivesDamageMultiplier );
|
||||
// HEADROCK HAM 3.6: Can now use negative modifier.
|
||||
//UINT16 explDamage = (UINT16)( Explosive[Item[ pItemNumbers[ i ] ].ubClassIndex].ubDamage + ( (double) Explosive[Item[ pItemNumbers[ i ] ].ubClassIndex].ubDamage / 100) * gGameExternalOptions.bExplosivesDamageModifier );
|
||||
//UINT16 explStunDamage = (UINT16)( Explosive[Item[ pItemNumbers[ i ] ].ubClassIndex].ubStunDamage + ( (double) Explosive[Item[ pItemNumbers[ i ] ].ubClassIndex].ubStunDamage / 100) * gGameExternalOptions.ubExplosivesDamageMultiplier );
|
||||
UINT16 explDamage = (UINT16) GetModifiedExplosiveDamage( Explosive[Item[ pItemNumbers[ i ] ].ubClassIndex].ubDamage );
|
||||
UINT16 explStunDamage = (UINT16) GetModifiedExplosiveDamage( Explosive[Item[ pItemNumbers[ i ] ].ubClassIndex].ubStunDamage );
|
||||
|
||||
|
||||
swprintf( pStr, L"%s\n%s %d\n%s %d\n%s %1.1f %s",
|
||||
ItemNames[ pItemNumbers[ i ] ],
|
||||
|
||||
@@ -14828,7 +14828,8 @@ void CreateDestroyMouseRegionsForFacilityAssignmentMenu( void )
|
||||
}
|
||||
if (!fFoundVehicle)
|
||||
{
|
||||
uiMenuLine++; // Skip this line, it'll always be shaded anyway.
|
||||
// WANNE: This is a fix by Headrock
|
||||
//uiMenuLine++; // Skip this line, it'll always be shaded anyway.
|
||||
}
|
||||
}
|
||||
else if ( iCounter == FAC_REPAIR_ROBOT )
|
||||
@@ -15032,21 +15033,21 @@ void FacilityAssignmentMenuBtnCallback ( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
break;
|
||||
case FAC_REPAIR_ITEMS:
|
||||
MakeSureToolKitIsInHand( pSoldier );
|
||||
ChangeSoldiersAssignment( pSoldier, REPAIR );
|
||||
pSoldier->flags.fFixingRobot = FALSE;
|
||||
pSoldier->bVehicleUnderRepairID = -1;
|
||||
ChangeSoldiersAssignment( pSoldier, REPAIR );
|
||||
break;
|
||||
case FAC_REPAIR_VEHICLE:
|
||||
MakeSureToolKitIsInHand( pSoldier );
|
||||
ChangeSoldiersAssignment( pSoldier, REPAIR );
|
||||
pSoldier->flags.fFixingRobot = FALSE;
|
||||
pSoldier->bVehicleUnderRepairID = (INT8)ubVehicleID;
|
||||
ChangeSoldiersAssignment( pSoldier, REPAIR );
|
||||
break;
|
||||
case FAC_REPAIR_ROBOT:
|
||||
MakeSureToolKitIsInHand( pSoldier );
|
||||
ChangeSoldiersAssignment( pSoldier, REPAIR );
|
||||
pSoldier->flags.fFixingRobot = TRUE;
|
||||
pSoldier->bVehicleUnderRepairID = -1;
|
||||
ChangeSoldiersAssignment( pSoldier, REPAIR );
|
||||
break;
|
||||
case FAC_DOCTOR:
|
||||
MakeSureMedKitIsInHand( pSoldier );
|
||||
|
||||
+37
-29
@@ -23,6 +23,8 @@
|
||||
#include "VFS/vfs.h"
|
||||
#include "XMLWriter.h"
|
||||
|
||||
#include "UndergroundInit.h"
|
||||
|
||||
extern BOOLEAN InitStrategicMovementCosts();
|
||||
void InitKnowFacilitiesFlags( );
|
||||
|
||||
@@ -432,6 +434,15 @@ void BuildUndergroundSectorInfoList()
|
||||
|
||||
TrashUndergroundSectorInfo();
|
||||
|
||||
if (LetLuaBuildUndergroundSectorInfoList())
|
||||
// lua script succeeded
|
||||
return;
|
||||
|
||||
// If lua script had any errors
|
||||
// reset whatever the script may have done
|
||||
// and use hardcoded underground initialization.
|
||||
TrashUndergroundSectorInfo();
|
||||
|
||||
//********************
|
||||
//* BASEMENT LEVEL 1 *
|
||||
//********************
|
||||
@@ -476,7 +487,6 @@ void BuildUndergroundSectorInfoList()
|
||||
curr = NewUndergroundNode( 3, 15, 1 );
|
||||
curr->ubNumTroops = (UINT8)(6 + gGameOptions.ubDifficultyLevel*2 + Random( 3 ));
|
||||
curr->ubNumElites = (UINT8)(4 + gGameOptions.ubDifficultyLevel + Random( 2 ));
|
||||
curr->ubAdjacentSectors |= SOUTH_ADJACENT_SECTOR;
|
||||
|
||||
//P3
|
||||
curr = NewUndergroundNode( 3, 16, 1 );
|
||||
@@ -495,99 +505,97 @@ void BuildUndergroundSectorInfoList()
|
||||
curr->ubNumElites = 20;
|
||||
break;
|
||||
}
|
||||
curr->ubAdjacentSectors |= NORTH_ADJACENT_SECTOR;
|
||||
|
||||
//Do all of the mandatory underground mine sectors
|
||||
|
||||
//Drassen's mine
|
||||
//D13_B1
|
||||
curr = NewUndergroundNode( 13, 4, 1 );
|
||||
curr->ubAdjacentSectors |= SOUTH_ADJACENT_SECTOR;
|
||||
|
||||
//E13_B1
|
||||
curr = NewUndergroundNode( 13, 5, 1 );
|
||||
curr->ubAdjacentSectors |= NORTH_ADJACENT_SECTOR;
|
||||
|
||||
//E13_B2
|
||||
curr = NewUndergroundNode( 13, 5, 2 );
|
||||
curr->ubAdjacentSectors |= SOUTH_ADJACENT_SECTOR;
|
||||
|
||||
//F13_B2
|
||||
curr = NewUndergroundNode( 13, 6, 2 );
|
||||
curr->ubAdjacentSectors |= NORTH_ADJACENT_SECTOR | SOUTH_ADJACENT_SECTOR;
|
||||
|
||||
//G13_B2
|
||||
curr = NewUndergroundNode( 13, 7, 2 );
|
||||
curr->ubAdjacentSectors |= NORTH_ADJACENT_SECTOR;
|
||||
|
||||
//G13_B3
|
||||
curr = NewUndergroundNode( 13, 7, 3 );
|
||||
curr->ubAdjacentSectors |= NORTH_ADJACENT_SECTOR;
|
||||
|
||||
//F13_B3
|
||||
curr = NewUndergroundNode( 13, 6, 3 );
|
||||
curr->ubAdjacentSectors |= SOUTH_ADJACENT_SECTOR;
|
||||
|
||||
|
||||
//Cambria's mine
|
||||
//H8_B1
|
||||
curr = NewUndergroundNode( 8, 8, 1 );
|
||||
curr->ubAdjacentSectors |= EAST_ADJACENT_SECTOR;
|
||||
|
||||
//H9_B1
|
||||
curr = NewUndergroundNode( 9, 8, 1 );
|
||||
curr->ubAdjacentSectors |= WEST_ADJACENT_SECTOR;
|
||||
|
||||
//H9_B2
|
||||
curr = NewUndergroundNode( 9, 8, 2 );
|
||||
curr->ubAdjacentSectors |= WEST_ADJACENT_SECTOR;
|
||||
|
||||
//H8_B2
|
||||
curr = NewUndergroundNode( 8, 8, 2 );
|
||||
curr->ubAdjacentSectors |= EAST_ADJACENT_SECTOR;
|
||||
|
||||
//H8_B3
|
||||
curr = NewUndergroundNode( 8, 8, 3 );
|
||||
curr->ubAdjacentSectors |= SOUTH_ADJACENT_SECTOR;
|
||||
|
||||
//I8_B3
|
||||
curr = NewUndergroundNode( 8, 9, 3 );
|
||||
curr->ubAdjacentSectors |= NORTH_ADJACENT_SECTOR | SOUTH_ADJACENT_SECTOR;
|
||||
|
||||
//J8_B3
|
||||
curr = NewUndergroundNode( 8, 10, 3 );
|
||||
curr->ubAdjacentSectors |= NORTH_ADJACENT_SECTOR;
|
||||
|
||||
|
||||
//Alma's mine
|
||||
//I14_B1
|
||||
curr = NewUndergroundNode( 14, 9, 1 );
|
||||
curr->ubAdjacentSectors |= SOUTH_ADJACENT_SECTOR;
|
||||
|
||||
//J14_B1
|
||||
curr = NewUndergroundNode( 14, 10, 1 );
|
||||
curr->ubAdjacentSectors |= NORTH_ADJACENT_SECTOR;
|
||||
|
||||
//J14_B2
|
||||
curr = NewUndergroundNode( 14, 10, 2 );
|
||||
curr->ubAdjacentSectors |= WEST_ADJACENT_SECTOR;
|
||||
|
||||
//J13_B2
|
||||
curr = NewUndergroundNode( 13, 10, 2 );
|
||||
curr->ubAdjacentSectors |= EAST_ADJACENT_SECTOR;
|
||||
|
||||
//J13_B3
|
||||
curr = NewUndergroundNode( 13, 10, 3 );
|
||||
curr->ubAdjacentSectors |= SOUTH_ADJACENT_SECTOR;
|
||||
|
||||
//K13_B3
|
||||
curr = NewUndergroundNode( 13, 11, 3 );
|
||||
curr->ubAdjacentSectors |= NORTH_ADJACENT_SECTOR;
|
||||
|
||||
|
||||
//Grumm's mine
|
||||
//H3_B1
|
||||
curr = NewUndergroundNode( 3, 8, 1 );
|
||||
curr->ubAdjacentSectors |= SOUTH_ADJACENT_SECTOR;
|
||||
|
||||
//I3_B1
|
||||
curr = NewUndergroundNode( 3, 9, 1 );
|
||||
curr->ubAdjacentSectors |= NORTH_ADJACENT_SECTOR;
|
||||
|
||||
//I3_B2
|
||||
curr = NewUndergroundNode( 3, 9, 2 );
|
||||
curr->ubAdjacentSectors |= NORTH_ADJACENT_SECTOR;
|
||||
|
||||
//H3_B2
|
||||
curr = NewUndergroundNode( 3, 8, 2 );
|
||||
curr->ubAdjacentSectors |= SOUTH_ADJACENT_SECTOR | EAST_ADJACENT_SECTOR;
|
||||
|
||||
//H4_B2
|
||||
curr = NewUndergroundNode( 4, 8, 2 );
|
||||
curr->ubAdjacentSectors |= WEST_ADJACENT_SECTOR;
|
||||
curr->uiFlags |= SF_PENDING_ALTERNATE_MAP;
|
||||
|
||||
//H4_B3
|
||||
curr = NewUndergroundNode( 4, 8, 3 );
|
||||
curr->ubAdjacentSectors |= NORTH_ADJACENT_SECTOR;
|
||||
|
||||
//G4_B3
|
||||
curr = NewUndergroundNode( 4, 7, 3 );
|
||||
curr->ubAdjacentSectors |= SOUTH_ADJACENT_SECTOR;
|
||||
}
|
||||
|
||||
// Lesh: this function creates randomized world
|
||||
|
||||
@@ -475,7 +475,8 @@ typedef struct UNDERGROUND_SECTORINFO
|
||||
//a sector.
|
||||
UINT32 uiTimeCurrentSectorWasLastLoaded; //Specifies the last time the player was in the sector
|
||||
struct UNDERGROUND_SECTORINFO *next;
|
||||
UINT8 ubAdjacentSectors; //mask containing which sectors are adjacent
|
||||
|
||||
UINT8 ubNumBloodcats; // Bloodcat population
|
||||
UINT8 ubCreatureHabitat; //determines how creatures live in this sector (see creature spreading.c)
|
||||
UINT8 ubElitesInBattle, ubTroopsInBattle, ubAdminsInBattle, ubCreaturesInBattle;
|
||||
|
||||
|
||||
@@ -3871,49 +3871,6 @@ BOOLEAN IsTheCursorAllowedToHighLightThisSector( INT16 sSectorX, INT16 sSectorY
|
||||
}
|
||||
}
|
||||
|
||||
void SetUpBadSectorsList( void )
|
||||
{
|
||||
// initalizes all sectors to highlighable and then the ones non highlightable are marked as such
|
||||
INT8 bY;
|
||||
|
||||
memset( &sBadSectorsList, 0, sizeof( sBadSectorsList ) );
|
||||
|
||||
// the border regions
|
||||
for( bY = 0; bY < WORLD_MAP_X; bY++ )
|
||||
{
|
||||
sBadSectorsList[ 0 ][ bY ] = sBadSectorsList[ WORLD_MAP_X - 1 ][ bY ] = sBadSectorsList[ bY ][ 0 ] = sBadSectorsList[ bY ][ WORLD_MAP_X - 1 ] = TRUE;
|
||||
}
|
||||
|
||||
|
||||
sBadSectorsList[ 4 ][ 1 ] = TRUE;
|
||||
sBadSectorsList[ 5 ][ 1 ] = TRUE;
|
||||
sBadSectorsList[ 16 ][ 1 ] = TRUE;
|
||||
sBadSectorsList[ 16 ][ 5 ] = TRUE;
|
||||
sBadSectorsList[ 16 ][ 6 ] = TRUE;
|
||||
|
||||
|
||||
sBadSectorsList[ 16 ][ 10 ] = TRUE;
|
||||
sBadSectorsList[ 16 ][ 11 ] = TRUE;
|
||||
sBadSectorsList[ 16 ][ 12 ] = TRUE;
|
||||
sBadSectorsList[ 16 ][ 13 ] = TRUE;
|
||||
sBadSectorsList[ 16 ][ 14 ] = TRUE;
|
||||
sBadSectorsList[ 16 ][ 15 ] = TRUE;
|
||||
sBadSectorsList[ 16 ][ 16 ] = TRUE;
|
||||
|
||||
sBadSectorsList[ 15 ][ 13 ] = TRUE;
|
||||
sBadSectorsList[ 15 ][ 14 ] = TRUE;
|
||||
sBadSectorsList[ 15 ][ 15 ] = TRUE;
|
||||
sBadSectorsList[ 15 ][ 16 ] = TRUE;
|
||||
|
||||
sBadSectorsList[ 14 ][ 14 ] = TRUE;
|
||||
sBadSectorsList[ 14 ][ 15 ] = TRUE;
|
||||
sBadSectorsList[ 14 ][ 16 ] = TRUE;
|
||||
|
||||
sBadSectorsList[ 13 ][ 14 ] = TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void RestoreBackgroundForMapGrid( INT16 sMapX, INT16 sMapY )
|
||||
{
|
||||
|
||||
@@ -167,7 +167,7 @@ void GenerateMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY,
|
||||
// Upgrade points for replacing militia with better ones.
|
||||
UINT8 ubUpgradePoints;
|
||||
// Calculate default number of militia to place in Target Sector.
|
||||
UINT8 ubMilitiaToTrain = gGameExternalOptions.iMaxMilitiaPerSector / gGameExternalOptions.guiDivOfOriginalMilitia;
|
||||
UINT8 ubMilitiaToTrain = gGameExternalOptions.guiNumMobileMilitiaTrained;
|
||||
// Percentage of troops that should be of any one type:
|
||||
UINT8 ubTargetElitePercent = 0;
|
||||
UINT8 ubTargetRegularPercent = 0;
|
||||
|
||||
+36
-28
@@ -1224,40 +1224,48 @@ void ProcessQueenCmdImplicationsOfDeath( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
break;
|
||||
case SOLDIER_CLASS_CREATURE:
|
||||
#ifdef JA2BETAVERSION
|
||||
if( ubTotalEnemies <= (UINT32)iMaxEnemyGroupSize && pSector->ubNumCreatures != pSector->ubCreaturesInBattle ||
|
||||
!pSector->ubNumCreatures || !pSector->ubCreaturesInBattle ||
|
||||
pSector->ubNumCreatures > gGameExternalOptions.ubGameMaximumNumberOfCreatures || pSector->ubCreaturesInBattle > gGameExternalOptions.ubGameMaximumNumberOfCreatures )
|
||||
if (pSoldier->ubBodyType == BLOODCAT)
|
||||
{
|
||||
DoScreenIndependantMessageBox( L"Underground sector creature counters are bad. What were the last 2-3 things to die, and how? Save game and send to KM with info!!!", MSG_BOX_FLAG_OK, NULL );
|
||||
if( pSector->ubNumBloodcats > 0 )
|
||||
pSector->ubNumBloodcats--;
|
||||
}
|
||||
#endif
|
||||
if( pSector->ubNumCreatures )
|
||||
else
|
||||
{
|
||||
pSector->ubNumCreatures--;
|
||||
}
|
||||
if( pSector->ubCreaturesInBattle )
|
||||
{
|
||||
pSector->ubCreaturesInBattle--;
|
||||
}
|
||||
#ifdef JA2BETAVERSION
|
||||
if( ubTotalEnemies <= (UINT32)iMaxEnemyGroupSize && pSector->ubNumCreatures != pSector->ubCreaturesInBattle ||
|
||||
!pSector->ubNumCreatures || !pSector->ubCreaturesInBattle ||
|
||||
pSector->ubNumCreatures > gGameExternalOptions.ubGameMaximumNumberOfCreatures || pSector->ubCreaturesInBattle > gGameExternalOptions.ubGameMaximumNumberOfCreatures )
|
||||
{
|
||||
DoScreenIndependantMessageBox( L"Underground sector creature counters are bad. What were the last 2-3 things to die, and how? Save game and send to KM with info!!!", MSG_BOX_FLAG_OK, NULL );
|
||||
}
|
||||
#endif
|
||||
if( pSector->ubNumCreatures )
|
||||
{
|
||||
pSector->ubNumCreatures--;
|
||||
}
|
||||
if( pSector->ubCreaturesInBattle )
|
||||
{
|
||||
pSector->ubCreaturesInBattle--;
|
||||
}
|
||||
|
||||
if( !pSector->ubNumCreatures && gWorldSectorX != 9 && gWorldSectorY != 10 )
|
||||
{ //If the player has successfully killed all creatures in ANY underground sector except J9
|
||||
//then cancel any pending creature town attack.
|
||||
DeleteAllStrategicEventsOfType( EVENT_CREATURE_ATTACK );
|
||||
}
|
||||
if( !pSector->ubNumCreatures && gWorldSectorX != 9 && gWorldSectorY != 10 )
|
||||
{ //If the player has successfully killed all creatures in ANY underground sector except J9
|
||||
//then cancel any pending creature town attack.
|
||||
DeleteAllStrategicEventsOfType( EVENT_CREATURE_ATTACK );
|
||||
}
|
||||
|
||||
// a monster has died. Post an event to immediately check whether a mine has been cleared.
|
||||
AddStrategicEventUsingSeconds( EVENT_CHECK_IF_MINE_CLEARED, GetWorldTotalSeconds() + 15, 0);
|
||||
// a monster has died. Post an event to immediately check whether a mine has been cleared.
|
||||
AddStrategicEventUsingSeconds( EVENT_CHECK_IF_MINE_CLEARED, GetWorldTotalSeconds() + 15, 0);
|
||||
|
||||
if( pSoldier->ubBodyType == QUEENMONSTER )
|
||||
{
|
||||
//Need to call this, as the queen is really big, and killing her leaves a bunch
|
||||
//of bad tiles in behind her. Calling this function cleans it up.
|
||||
InvalidateWorldRedundency();
|
||||
//Now that the queen is dead, turn off the creature quest.
|
||||
EndCreatureQuest();
|
||||
EndQuest( QUEST_CREATURES, gWorldSectorX, gWorldSectorY );
|
||||
if( pSoldier->ubBodyType == QUEENMONSTER )
|
||||
{
|
||||
//Need to call this, as the queen is really big, and killing her leaves a bunch
|
||||
//of bad tiles in behind her. Calling this function cleans it up.
|
||||
InvalidateWorldRedundency();
|
||||
//Now that the queen is dead, turn off the creature quest.
|
||||
EndCreatureQuest();
|
||||
EndQuest( QUEST_CREATURES, gWorldSectorX, gWorldSectorY );
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -3673,20 +3673,6 @@ BOOLEAN LoadStrategicAI( HWFILE hFile )
|
||||
pSector->ubNumTroops -= 2;
|
||||
}
|
||||
}
|
||||
if( ubSAIVersion < 16 )
|
||||
{
|
||||
UNDERGROUND_SECTORINFO *pSector;
|
||||
pSector = FindUnderGroundSector( 3, 15, 1 );
|
||||
if( pSector )
|
||||
{
|
||||
pSector->ubAdjacentSectors |= SOUTH_ADJACENT_SECTOR;
|
||||
}
|
||||
pSector = FindUnderGroundSector( 3, 16, 1 );
|
||||
if( pSector )
|
||||
{
|
||||
pSector->ubAdjacentSectors |= NORTH_ADJACENT_SECTOR;
|
||||
}
|
||||
}
|
||||
if( ubSAIVersion < 17 )
|
||||
{ //Patch all groups that have this flag set
|
||||
gubNumGroupsArrivedSimultaneously = 0;
|
||||
|
||||
@@ -204,17 +204,14 @@ void InitializeMines( void )
|
||||
} while (gMineStatus[ubDepletedMineIndex].fEmpty || (ubDepletedMineIndex == MINE_ALMA));
|
||||
|
||||
// HEADROCK HAM 3.1: We can now select which mine runs out, or disable mine shutdown.
|
||||
if (gGameExternalOptions.fManuallySelectMineShutdown)
|
||||
// Make sure selection isn't 0 (no mine runs out) or invalid (San Mona, Alma)
|
||||
if (gGameExternalOptions.bWhichMineRunsOut > 0 &&
|
||||
gGameExternalOptions.bWhichMineRunsOut < MAX_NUMBER_OF_MINES &&
|
||||
gGameExternalOptions.bWhichMineRunsOut-1 != MINE_SAN_MONA &&
|
||||
gGameExternalOptions.bWhichMineRunsOut-1 != MINE_ALMA )
|
||||
{
|
||||
// Make sure selection isn't 0 (no mine runs out) or invalid (San Mona, Alma)
|
||||
if (gGameExternalOptions.ubWhichMineRunsOut > 0 &&
|
||||
gGameExternalOptions.ubWhichMineRunsOut < MAX_NUMBER_OF_MINES &&
|
||||
gGameExternalOptions.ubWhichMineRunsOut-1 != MINE_SAN_MONA &&
|
||||
gGameExternalOptions.ubWhichMineRunsOut-1 != MINE_ALMA )
|
||||
{
|
||||
// Set depleted mine index.
|
||||
ubDepletedMineIndex = (gGameExternalOptions.ubWhichMineRunsOut-1);
|
||||
}
|
||||
// Set depleted mine index.
|
||||
ubDepletedMineIndex = (gGameExternalOptions.bWhichMineRunsOut-1);
|
||||
}
|
||||
|
||||
for( ubMineIndex = 0; ubMineIndex < MAX_NUMBER_OF_MINES; ubMineIndex++ )
|
||||
@@ -222,8 +219,7 @@ void InitializeMines( void )
|
||||
pMineStatus = &(gMineStatus[ ubMineIndex ]);
|
||||
|
||||
// HEADROCK HAM 3.1: We can disable mine shutdown, so make sure the settings aren't telling us to do so.
|
||||
if (!(gGameExternalOptions.fManuallySelectMineShutdown && gGameExternalOptions.ubWhichMineRunsOut == 0) &&
|
||||
(ubMineIndex == ubDepletedMineIndex))
|
||||
if (gGameExternalOptions.bWhichMineRunsOut != 0 && ubMineIndex == ubDepletedMineIndex)
|
||||
{
|
||||
if ( ubDepletedMineIndex == MINE_DRASSEN )
|
||||
{
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
#include "Debug Control.h"
|
||||
#include "Tactical Save.h"
|
||||
#endif
|
||||
#include "Map Screen Interface Map.h"
|
||||
|
||||
extern BOOLEAN sBadSectorsList[ WORLD_MAP_X ][ WORLD_MAP_X ];
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -115,6 +118,11 @@ smctableStartElementHandle(void *userData, const XML_Char *name, const XML_Char
|
||||
pData->maxReadDepth++; //we are not skipping this element
|
||||
//fprintf (outfile, "Entering Traversal Rating\n");
|
||||
}
|
||||
else if(strcmp(name, "BadSector") == 0 && pData->curElement == SMCTABLE_ELEMENT_SECTOR)
|
||||
{
|
||||
pData->curElement = SMCTABLE_ELEMENT_TRAVELTYPE;
|
||||
pData->maxReadDepth++; //we are not skipping this element
|
||||
}
|
||||
pData->szCharData[0] = '\0';
|
||||
}
|
||||
pData->currentDepth++;
|
||||
@@ -317,6 +325,11 @@ smctableEndElementHandle(void *userData, const XML_Char *name)
|
||||
{
|
||||
pData->travHere = trav_type;
|
||||
}
|
||||
else if(strcmp(name, "BadSector") == 0)
|
||||
{
|
||||
bool fBadSector = atoi(pData->szCharData) > 0;
|
||||
sBadSectorsList[pData->uiColNumber][pData->uiRowNumber] = fBadSector;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Bogus Traversal Reference
|
||||
|
||||
@@ -510,6 +510,10 @@
|
||||
RelativePath=".\Town Militia.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\UndergroundInit.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
@@ -692,6 +696,10 @@
|
||||
RelativePath=".\Town Militia.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\UndergroundInit.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\XML_Army.cpp"
|
||||
>
|
||||
|
||||
@@ -511,6 +511,10 @@
|
||||
RelativePath="Town Militia.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\UndergroundInit.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
@@ -691,6 +695,10 @@
|
||||
RelativePath="Town Militia.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\UndergroundInit.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="XML_Army.cpp"
|
||||
>
|
||||
|
||||
@@ -1965,7 +1965,7 @@ UINT8 CalcNumMilitiaTrained(UINT8 ubBestLeadership, BOOLEAN fMobile)
|
||||
else
|
||||
{
|
||||
// Default Squad Size for Mobiles, read from INI.
|
||||
ubMilitiaToTrain = (gGameExternalOptions.iMaxMilitiaPerSector / gGameExternalOptions.guiDivOfOriginalMilitia);
|
||||
ubMilitiaToTrain = gGameExternalOptions.guiNumMobileMilitiaTrained;
|
||||
|
||||
// Is affected by Leadership?
|
||||
if (gGameExternalOptions.fLeadershipAffectsMobileMilitiaQuantity &&
|
||||
@@ -1993,7 +1993,7 @@ UINT8 CalcNumMilitiaTrained(UINT8 ubBestLeadership, BOOLEAN fMobile)
|
||||
// exceeding the range (latter shouldn't happen) will train a full squad. Others will train less. If
|
||||
// leadership was the minimum required, only 3 militia are trained.
|
||||
ubMilitiaToTrain = ((ubBestLeadership * ubMilitiaToTrain) / ubLeadershipRange) + 1;
|
||||
ubMilitiaToTrain = __min(ubMilitiaToTrain, gGameExternalOptions.iMaxMilitiaPerSector / gGameExternalOptions.guiDivOfOriginalMilitia);
|
||||
ubMilitiaToTrain = __min(ubMilitiaToTrain, gGameExternalOptions.guiNumMobileMilitiaTrained);
|
||||
ubMilitiaToTrain = __max(3, ubMilitiaToTrain);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,161 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
#include "UndergroundInit.h"
|
||||
#include "Campaign Init.h"
|
||||
#include "Campaign Types.h"
|
||||
#include "FileMan.h"
|
||||
#include "GameSettings.h"
|
||||
|
||||
extern "C" {
|
||||
#include "lua.h"
|
||||
#include "lauxlib.h"
|
||||
#include "lualib.h"
|
||||
}
|
||||
|
||||
|
||||
extern UNDERGROUND_SECTORINFO* NewUndergroundNode( UINT8 ubSectorX, UINT8 ubSectorY, UINT8 ubSectorZ );
|
||||
|
||||
static int l_addSector(lua_State *L);
|
||||
static int lh_getIntegerFromTable(lua_State *L, char * fieldname);
|
||||
static std::string lh_getStringFromTable(lua_State *L, char * fieldname);
|
||||
static std::wstring lh_getWStringFromTable(lua_State *L, char * fieldname);
|
||||
static bool locationStringToCoordinates(std::string loc, UINT8* x, UINT8* y, UINT8* z);
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
BOOLEAN LetLuaBuildUndergroundSectorInfoList()
|
||||
{
|
||||
char * filename = "scripts\\initunderground.lua";
|
||||
UINT32 size, bytesRead;
|
||||
char* buffer;
|
||||
|
||||
HWFILE file = FileOpen(filename, FILE_ACCESS_READ, FALSE);
|
||||
|
||||
if (!file)
|
||||
return false;
|
||||
|
||||
size = FileSize(filename);
|
||||
buffer = new char[size+1];
|
||||
buffer[size] = 0;
|
||||
FileRead(file, buffer, size, &bytesRead);
|
||||
FileClose(file);
|
||||
|
||||
|
||||
lua_State *L = lua_open();
|
||||
luaL_openlibs(L);
|
||||
|
||||
lua_register(L, "addSector", l_addSector);
|
||||
|
||||
lua_pushinteger(L, gGameOptions.ubDifficultyLevel);
|
||||
lua_setglobal(L, "difficultyLevel");
|
||||
|
||||
lua_pushinteger(L, gGameOptions.ubGameStyle);
|
||||
lua_setglobal(L, "gameStyle");
|
||||
|
||||
if (luaL_dostring(L, buffer))
|
||||
{
|
||||
// oh noes, error
|
||||
// TODO: write to log or something
|
||||
return false;
|
||||
}
|
||||
|
||||
lua_close(L);
|
||||
|
||||
delete[] buffer;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static int l_addSector(lua_State *L)
|
||||
{
|
||||
UNDERGROUND_SECTORINFO* curr = NULL;
|
||||
|
||||
std::string sector_id = lh_getStringFromTable(L, "location");
|
||||
|
||||
UINT8 x, y, z;
|
||||
if (locationStringToCoordinates(sector_id, &x, &y, &z))
|
||||
{
|
||||
curr = NewUndergroundNode(x, y, z);
|
||||
|
||||
curr->ubNumAdmins = lh_getIntegerFromTable(L, "numAdmins");
|
||||
curr->ubNumTroops = lh_getIntegerFromTable(L, "numTroops");
|
||||
curr->ubNumElites = lh_getIntegerFromTable(L, "numElites");
|
||||
|
||||
curr->ubCreatureHabitat = lh_getIntegerFromTable(L, "creatureHabitat");
|
||||
curr->ubNumCreatures = lh_getIntegerFromTable(L, "numCreatures");
|
||||
|
||||
curr->ubNumBloodcats = lh_getIntegerFromTable(L, "numBloodcats");
|
||||
}
|
||||
|
||||
return 0; // number of results
|
||||
}
|
||||
|
||||
|
||||
static int lh_getIntegerFromTable(lua_State *L, char * fieldname)
|
||||
{
|
||||
lua_getfield(L, -1, fieldname);
|
||||
int i = lua_tointeger(L, -1);
|
||||
lua_pop(L, 1);
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
static std::string lh_getStringFromTable(lua_State *L, char * fieldname)
|
||||
{
|
||||
lua_getfield(L, -1, fieldname);
|
||||
string s = lua_tostring(L, -1);
|
||||
lua_pop(L, 1);
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
// extract x,y,z from strings like "D13-1"
|
||||
static bool locationStringToCoordinates(std::string loc, UINT8* x, UINT8* y, UINT8* z)
|
||||
{
|
||||
int length = loc.length();
|
||||
|
||||
// gather row
|
||||
if (length < 4 || length > 5)
|
||||
return false;
|
||||
|
||||
char row = loc[0];
|
||||
if (row >= 'A' && row <= 'P')
|
||||
*y = row - 'A' + 1;
|
||||
else if (row >= 'a' && row <= 'p')
|
||||
*y = row - 'a' + 1;
|
||||
else
|
||||
return false;
|
||||
|
||||
// gather column
|
||||
loc = loc.substr(1);
|
||||
stringstream ss = stringstream();
|
||||
if (loc[0] >= '0' && loc[0] <= '9')
|
||||
{
|
||||
ss << loc[0];
|
||||
loc = loc.substr(1);
|
||||
}
|
||||
if (loc[0] >= '0' && loc[0] <= '9')
|
||||
{
|
||||
ss << loc[0];
|
||||
loc = loc.substr(1);
|
||||
}
|
||||
int col;
|
||||
ss >> col;
|
||||
if (col >= 1 && col <= 16)
|
||||
*x = col;
|
||||
else
|
||||
return false;
|
||||
|
||||
// gather level
|
||||
char lvl = loc[loc.length() - 1];
|
||||
if (lvl >= '1' && lvl <= '3')
|
||||
*z = lvl - '0';
|
||||
else
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
#ifndef _UNDERGROUNDINIT_H
|
||||
#define _UNDERGROUNDINIT_H
|
||||
|
||||
#include "Types.h"
|
||||
|
||||
extern BOOLEAN LetLuaBuildUndergroundSectorInfoList();
|
||||
|
||||
#endif
|
||||
@@ -4448,8 +4448,6 @@ UINT32 MapScreenInit(void)
|
||||
{
|
||||
VOBJECT_DESC VObjectDesc;
|
||||
|
||||
SetUpBadSectorsList( );
|
||||
|
||||
// setup message box system
|
||||
InitGlobalMessageList( );
|
||||
|
||||
|
||||
@@ -3035,7 +3035,10 @@ void GetSectorIDString( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ , STR16 zS
|
||||
swprintf( zString, L"P3: %s", pLandTypeStrings[ SHELTER ] );
|
||||
break;
|
||||
default:
|
||||
swprintf( zString, L"%c%d: %s", 'A' + sSectorY - 1, sSectorX, pLandTypeStrings[ CREATURE_LAIR ] );
|
||||
if (pUnderground->ubNumCreatures)
|
||||
swprintf( zString, L"%c%d: %s", 'A' + sSectorY - 1, sSectorX, pLandTypeStrings[ CREATURE_LAIR ] );
|
||||
else
|
||||
swprintf( zString, L"%c%d-%d", 'A' + sSectorY - 1, sSectorX, bSectorZ );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1447,7 +1447,8 @@ UINT8 CurrentPlayerProgressPercentage(void)
|
||||
}
|
||||
|
||||
// Add a static amount of points, as declared in the INI file.
|
||||
usCurrentProgress += gGameExternalOptions.ubGameProgressIncrement;
|
||||
// HEADROCK HAM 3.6: Allow negative modifiers!
|
||||
usCurrentProgress = __max(0, (INT16)(usCurrentProgress + gGameExternalOptions.bGameProgressModifier));
|
||||
|
||||
// And failsafes here. I'm not 100% sure about these though: I've never personally seen progress
|
||||
// values go over 100, and I don't think they SHOULD... Can the game handle values > 100? Should it?
|
||||
@@ -1457,6 +1458,7 @@ UINT8 CurrentPlayerProgressPercentage(void)
|
||||
|
||||
return((UINT8)usCurrentProgress);
|
||||
}
|
||||
|
||||
UINT8 HighestPlayerProgressPercentage(void)
|
||||
{
|
||||
if( gfEditMode )
|
||||
@@ -1465,7 +1467,6 @@ UINT8 HighestPlayerProgressPercentage(void)
|
||||
return(gStrategicStatus.ubHighestProgress);
|
||||
}
|
||||
|
||||
|
||||
// monitors the highest level of progress that player has achieved so far (checking hourly),
|
||||
// as opposed to his immediate situation (which may be worse if he's suffered a setback).
|
||||
void HourlyProgressUpdate(void)
|
||||
|
||||
@@ -822,8 +822,9 @@ BOOLEAN NewWayOfLoadingEnemySoldiersFromTempFile()
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if( slots < 0 || slots >= (int)gGameExternalOptions.ubGameMaximumNumberOfEnemies )
|
||||
// // WANNE: Fix by Headrock:
|
||||
// Turns out that the program is saving the number of used Placement Slots to the temp file fine, but if that number is equal to the limit of how many enemies/civvies are allowed in a sector by the INI settings, it leads to an assertion error instead when trying to re-load that sector.
|
||||
if( slots < 0 || slots > (int)gGameExternalOptions.ubGameMaximumNumberOfEnemies )
|
||||
{ //bad IO!
|
||||
#ifdef JA2TESTVERSION
|
||||
sprintf( zReason, "EnemySoldier -- illegal slot value of %d. KM", slots );
|
||||
@@ -1161,7 +1162,10 @@ BOOLEAN NewWayOfLoadingCiviliansFromTempFile()
|
||||
FileClose( hfile );
|
||||
return TRUE;
|
||||
}
|
||||
if( slots < 0 || slots >= (int)gGameExternalOptions.ubGameMaximumNumberOfCivilians )
|
||||
|
||||
// WANNE: Fix by Headrock:
|
||||
// Turns out that the program is saving the number of used Placement Slots to the temp file fine, but if that number is equal to the limit of how many enemies/civvies are allowed in a sector by the INI settings, it leads to an assertion error instead when trying to re-load that sector.
|
||||
if( slots < 0 || slots > (int)gGameExternalOptions.ubGameMaximumNumberOfCivilians )
|
||||
{
|
||||
//bad IO!
|
||||
#ifdef JA2TESTVERSION
|
||||
|
||||
@@ -5161,7 +5161,12 @@ void DrawExplosiveValues( OBJECTTYPE * gpItemDescObject )
|
||||
|
||||
// print value
|
||||
SetFontForeground( 5 );
|
||||
swprintf( pStr, L"%2d", Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDamage + ( (Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDamage * gGameExternalOptions.ubExplosivesDamageMultiplier ) / 100 ));
|
||||
|
||||
// HEADROCK HAM 3.6: Can now use negative modifier.
|
||||
UINT16 explDamage = (UINT16) GetModifiedExplosiveDamage( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDamage );
|
||||
|
||||
//swprintf( pStr, L"%2d", Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDamage + ( (Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDamage * gGameExternalOptions.ubExplosivesDamageMultiplier ) / 100 ));
|
||||
swprintf( pStr, L"%2d", explDamage );
|
||||
uiStringLength=StringPixLength(pStr, ITEMDESC_FONT );
|
||||
FindFontRightCoordinates( (INT16)(gWeaponStats[ 2 ].sX + gsInvDescX + gWeaponStats[ 2 ].sValDx), (INT16)(gWeaponStats[ 2 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY);
|
||||
mprintf( sStrX, gWeaponStats[ 2 ].sY + gsInvDescY, pStr );
|
||||
@@ -5176,7 +5181,12 @@ void DrawExplosiveValues( OBJECTTYPE * gpItemDescObject )
|
||||
|
||||
// print value
|
||||
SetFontForeground( 5 );
|
||||
swprintf( pStr, L"%2d", Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubStunDamage + ( (Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubStunDamage * gGameExternalOptions.ubExplosivesDamageMultiplier ) / 100 ));
|
||||
|
||||
// HEADROCK HAM 3.6: Can now use negative modifier.
|
||||
UINT16 explStunDamage = (UINT16) GetModifiedExplosiveDamage( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubStunDamage );
|
||||
|
||||
//swprintf( pStr, L"%2d", Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubStunDamage + ( (Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubStunDamage * gGameExternalOptions.ubExplosivesDamageMultiplier ) / 100 ));
|
||||
swprintf( pStr, L"%2d", explStunDamage );
|
||||
uiStringLength=StringPixLength(pStr, ITEMDESC_FONT );
|
||||
FindFontRightCoordinates( (INT16)(gWeaponStats[ 3 ].sX + gsInvDescX + gWeaponStats[ 3 ].sValDx), (INT16)(gWeaponStats[ 3 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY);
|
||||
mprintf( sStrX, gWeaponStats[ 3 ].sY + gsInvDescY, pStr );
|
||||
|
||||
@@ -8528,8 +8528,11 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier
|
||||
case IC_BOMB:
|
||||
// explosives
|
||||
{
|
||||
UINT16 explDamage = (UINT16)( Explosive[Item[ usItem ].ubClassIndex].ubDamage + ( (double) Explosive[Item[ usItem ].ubClassIndex].ubDamage / 100) * gGameExternalOptions.ubExplosivesDamageMultiplier );
|
||||
UINT16 explStunDamage = (UINT16)( Explosive[Item[ usItem ].ubClassIndex].ubStunDamage + ( (double) Explosive[Item[ usItem ].ubClassIndex].ubStunDamage / 100) * gGameExternalOptions.ubExplosivesDamageMultiplier );
|
||||
// HEADROCK HAM 3.6: Can now use negative modifier.
|
||||
//UINT16 explDamage = (UINT16)( Explosive[Item[ usItem ].ubClassIndex].ubDamage + ( (double) Explosive[Item[ usItem ].ubClassIndex].ubDamage / 100) * gGameExternalOptions.ubExplosivesDamageMultiplier );
|
||||
//UINT16 explStunDamage = (UINT16)( Explosive[Item[ usItem ].ubClassIndex].ubStunDamage + ( (double) Explosive[Item[ usItem ].ubClassIndex].ubStunDamage / 100) * gGameExternalOptions.ubExplosivesDamageMultiplier );
|
||||
UINT16 explDamage = (UINT16) GetModifiedExplosiveDamage( Explosive[Item[ usItem ].ubClassIndex].ubDamage );
|
||||
UINT16 explStunDamage = (UINT16) GetModifiedExplosiveDamage( Explosive[Item[ usItem ].ubClassIndex].ubStunDamage );
|
||||
|
||||
#ifdef CHINESE
|
||||
swprintf( pStr, ChineseSpecString5,
|
||||
|
||||
@@ -8967,3 +8967,33 @@ INT8 FindBackpackOnSoldier( SOLDIERTYPE * pSoldier )
|
||||
}
|
||||
return( ITEM_NOT_FOUND );
|
||||
}
|
||||
|
||||
// HEADROCK HAM 3.6: This applies the INI modifier to explosives
|
||||
UINT8 GetModifiedExplosiveDamage( UINT16 sDamage )
|
||||
{
|
||||
sDamage = (INT16)(( sDamage * gGameExternalOptions.iExplosivesDamageModifier ) / 100);
|
||||
sDamage = __max(1, sDamage);
|
||||
sDamage = __min(255, sDamage);
|
||||
|
||||
return (UINT8)sDamage;
|
||||
}
|
||||
|
||||
UINT8 GetModifiedMeleeDamage( UINT16 sDamage )
|
||||
{
|
||||
sDamage = (INT16)(( sDamage * gGameExternalOptions.iMeleeDamageModifier ) / 100);
|
||||
sDamage = __max(1, sDamage);
|
||||
sDamage = __min(255, sDamage);
|
||||
|
||||
return (UINT8)sDamage;
|
||||
}
|
||||
|
||||
UINT8 GetModifiedGunDamage( UINT16 sDamage )
|
||||
{
|
||||
sDamage = (INT16)(( sDamage * gGameExternalOptions.iGunDamageModifier ) / 100);
|
||||
sDamage = __max(1, sDamage);
|
||||
sDamage = __min(255, sDamage);
|
||||
|
||||
return (UINT8)sDamage;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -346,6 +346,11 @@ INT16 GetSnowCamoBonus( OBJECTTYPE * pObj );
|
||||
// HEADROCK HAM 3.6: Looks for a backpack anywhere on this character.
|
||||
INT8 FindBackpackOnSoldier( SOLDIERTYPE * pSoldier );
|
||||
|
||||
// HEADROCK HAM 3.6: Handler functions to get modified damage with INI parameter.
|
||||
UINT8 GetModifiedExplosiveDamage( UINT16 ubDamage );
|
||||
UINT8 GetModifiedMeleeDamage( UINT16 ubDamage );
|
||||
UINT8 GetModifiedGunDamage( UINT16 ubDamage );
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -7281,6 +7281,14 @@ INT8 CalcSuppressionTolerance( SOLDIERTYPE * pSoldier )
|
||||
{
|
||||
bTolerance += pSoldier->bTilesMoved / gGameExternalOptions.ubTilesMovedPerBonusTolerancePoint;
|
||||
}
|
||||
// HEADROCK HAM 3.6: This value has moved here. It reduces tolerance if the character is massively shocked.
|
||||
if (gGameExternalOptions.ubCowerEffectOnSuppression != 0)
|
||||
{
|
||||
if (pSoldier->aiData.bShock > bTolerance)
|
||||
{
|
||||
bTolerance -= gGameExternalOptions.ubCowerEffectOnSuppression;
|
||||
}
|
||||
}
|
||||
|
||||
bTolerance = __max(bTolerance, gGameExternalOptions.ubSuppressionToleranceMin);
|
||||
bTolerance = __min(bTolerance, gGameExternalOptions.ubSuppressionToleranceMax);
|
||||
@@ -7428,11 +7436,6 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker )
|
||||
{
|
||||
fCower = true;
|
||||
|
||||
// If cowering, increase suppression effectiveness by external percentage. If the setting is
|
||||
// over 100%, then the condition of cowering makes the character even MORE susceptible to suppression.
|
||||
if (gGameExternalOptions.usCowerEffectOnSuppression > 0)
|
||||
ubPointsLost = (ubPointsLost * gGameExternalOptions.usCowerEffectOnSuppression) / 100;
|
||||
|
||||
// If soldier is visible on-screen, report to player that they are cowering.
|
||||
if ( pSoldier->bVisible != -1 )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, New113HAMMessage[0], pSoldier->name );
|
||||
|
||||
@@ -2646,3 +2646,96 @@ INT16 GetAPsToJumpOver( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
return( GetAPsToChangeStance( pSoldier, ANIM_STAND ) + APBPConstants[AP_JUMP_OVER] );
|
||||
}
|
||||
|
||||
// HEADROCK HAM 3.6: Calculate the actual AP cost to add this many Extra Aiming levels, taking into account
|
||||
// APBP Constants and extra game features.
|
||||
INT32 CalcAPCostForAiming( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, INT8 bAimTime )
|
||||
{
|
||||
INT16 sAPCost = 0;
|
||||
UINT16 usItemNum = pSoldier->inv[HANDPOS].usItem;
|
||||
|
||||
Assert(pSoldier != NULL);
|
||||
Assert(&pSoldier->inv[HANDPOS] != NULL);
|
||||
|
||||
if (gGameExternalOptions.fIncreasedAimingCost )
|
||||
{
|
||||
// HEADROCK HAM B2.6: Changed the number of APs to attack when aiming.
|
||||
// HEADROCK HAM 3.1: Externalized the entire function to allow customization of each detail.
|
||||
if (bAimTime > 0)
|
||||
{
|
||||
// HEADROCK HAM 3: One-time penalty: Add part of the weapon's Ready AP cost. Reinstated because
|
||||
// it's now externalized.
|
||||
if (gGameExternalOptions.ubFirstAimReadyCostDivisor > 0)
|
||||
{
|
||||
UINT16 usWeaponReadyTime;
|
||||
UINT8 ubReadyTimeDivisor;
|
||||
|
||||
usWeaponReadyTime = Weapon[ usItemNum ].ubReadyTime * (100 - GetPercentReadyTimeAPReduction(&pSoldier->inv[HANDPOS])) / 100;
|
||||
ubReadyTimeDivisor = gGameExternalOptions.ubFirstAimReadyCostDivisor;
|
||||
sAPCost += usWeaponReadyTime / ubReadyTimeDivisor;
|
||||
}
|
||||
|
||||
// If the weapon has a scope, and the target is within eligible range for scope use
|
||||
|
||||
if ( IsScoped(&pSoldier->inv[HANDPOS])
|
||||
&& GetRangeInCellCoordsFromGridNoDiff( pSoldier->sGridNo, sTargetGridNo ) >= GetMinRangeForAimBonus(&pSoldier->inv[HANDPOS]) )
|
||||
{
|
||||
// Add an individual cost for EACH click, as necessary.
|
||||
|
||||
sAPCost += APBPConstants[AP_FIRST_CLICK_AIM_SCOPE];
|
||||
|
||||
if (bAimTime > 1)
|
||||
sAPCost += APBPConstants[AP_SECOND_CLICK_AIM_SCOPE];
|
||||
if (bAimTime > 2)
|
||||
sAPCost += APBPConstants[AP_THIRD_CLICK_AIM_SCOPE];
|
||||
if (bAimTime > 3)
|
||||
sAPCost += APBPConstants[AP_FOURTH_CLICK_AIM_SCOPE];
|
||||
if (bAimTime > 4)
|
||||
sAPCost += APBPConstants[AP_FIFTH_CLICK_AIM_SCOPE];
|
||||
if (bAimTime > 5)
|
||||
sAPCost += APBPConstants[AP_SIXTH_CLICK_AIM_SCOPE];
|
||||
if (bAimTime > 6)
|
||||
sAPCost += APBPConstants[AP_SEVENTH_CLICK_AIM_SCOPE];
|
||||
if (bAimTime > 7)
|
||||
sAPCost += APBPConstants[AP_EIGHTTH_CLICK_AIM_SCOPE];
|
||||
}
|
||||
|
||||
// Weapon has no scope or not within requried range. Apply regular AP costs.
|
||||
else
|
||||
{
|
||||
sAPCost += bAimTime * APBPConstants[AP_CLICK_AIM];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
|
||||
// Regular cost system
|
||||
else
|
||||
{
|
||||
sAPCost += bAimTime * APBPConstants[AP_CLICK_AIM];
|
||||
}
|
||||
|
||||
return sAPCost;
|
||||
}
|
||||
|
||||
// HEADROCK HAM 3.6: Calculate how many Aiming Levels we can get with a given amount of APs.
|
||||
INT8 CalcAimingLevelsAvailableWithAP( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, INT8 bAPsLeft )
|
||||
{
|
||||
INT8 bAllowedLevels = 0;
|
||||
|
||||
for (INT16 x = APBPConstants[AP_MIN_AIM_ATTACK]; x <= AllowedAimingLevels(pSoldier); x++)
|
||||
{
|
||||
if (CalcAPCostForAiming( pSoldier, sTargetGridNo, x ) <= (INT16)bAPsLeft)
|
||||
{
|
||||
bAllowedLevels = x;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (bAllowedLevels);
|
||||
}
|
||||
|
||||
@@ -347,5 +347,7 @@ UINT16 GetAPsToReloadRobot( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pRobot );
|
||||
INT16 GetAPsToReloadGunWithAmmo( SOLDIERTYPE *pSoldier, OBJECTTYPE * pGun, OBJECTTYPE * pAmmo, BOOLEAN usAllAPs = TRUE );
|
||||
INT16 GetAPsToAutoReload( SOLDIERTYPE * pSoldier );
|
||||
|
||||
INT32 CalcAPCostForAiming( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, INT8 bAimTime );
|
||||
INT8 CalcAimingLevelsAvailableWithAP( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, INT8 bAPsLeft );
|
||||
|
||||
#endif
|
||||
|
||||
@@ -7611,23 +7611,23 @@ void CalculateSoldierAniSpeed( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pStatsSoldier
|
||||
|
||||
}
|
||||
|
||||
UINT8 GetSpeedUpFactor( )
|
||||
FLOAT GetSpeedUpFactor( )
|
||||
{
|
||||
switch( gTacticalStatus.ubCurrentTeam )
|
||||
{
|
||||
case OUR_TEAM:
|
||||
return gGameExternalOptions.gubPlayerTurnSpeedUpFactor;
|
||||
return gGameExternalOptions.giPlayerTurnSpeedUpFactor;
|
||||
case ENEMY_TEAM:
|
||||
return gGameExternalOptions.gubEnemyTurnSpeedUpFactor;
|
||||
return gGameExternalOptions.giEnemyTurnSpeedUpFactor;
|
||||
case CREATURE_TEAM:
|
||||
return gGameExternalOptions.gubCreatureTurnSpeedUpFactor;
|
||||
return gGameExternalOptions.giCreatureTurnSpeedUpFactor;
|
||||
case MILITIA_TEAM:
|
||||
return gGameExternalOptions.gubMilitiaTurnSpeedUpFactor;
|
||||
return gGameExternalOptions.giMilitiaTurnSpeedUpFactor;
|
||||
case CIV_TEAM:
|
||||
return gGameExternalOptions.gubCivilianTurnSpeedUpFactor;
|
||||
return gGameExternalOptions.giCivilianTurnSpeedUpFactor;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
void SetSoldierAniSpeed( SOLDIERTYPE *pSoldier )
|
||||
@@ -7681,7 +7681,7 @@ void SetSoldierAniSpeed( SOLDIERTYPE *pSoldier )
|
||||
|
||||
if ( gTacticalStatus.uiFlags & TURNBASED && gTacticalStatus.uiFlags & INCOMBAT )
|
||||
if( GetSpeedUpFactor() )
|
||||
pSoldier->sAniDelay /= GetSpeedUpFactor();
|
||||
pSoldier->sAniDelay = (INT16)((FLOAT)pSoldier->sAniDelay * GetSpeedUpFactor());
|
||||
else
|
||||
pSoldier->sAniDelay = 0;
|
||||
}
|
||||
|
||||
@@ -50,8 +50,9 @@
|
||||
#endif
|
||||
|
||||
#include "connect.h"
|
||||
|
||||
#include "Map Edgepoints.h"
|
||||
#include "Queen Command.h"
|
||||
|
||||
BOOLEAN gfOriginalList = TRUE;
|
||||
|
||||
SOLDIERINITNODE *gSoldierInitHead = NULL;
|
||||
@@ -1942,16 +1943,30 @@ void AddSoldierInitListBloodcats()
|
||||
{
|
||||
SECTORINFO *pSector;
|
||||
SOLDIERINITNODE *curr;
|
||||
UINT8 ubSectorID;
|
||||
UINT8 ubSectorID = 0;
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("AddSoldierInitListBloodcats"));
|
||||
|
||||
SECTORINFO dummy;
|
||||
|
||||
if( gbWorldSectorZ )
|
||||
{
|
||||
return; //no bloodcats underground.
|
||||
}
|
||||
// This function can only cope with regular SECTORINFO objects.
|
||||
// So let's fake a sector above ground and copy over data from UNDERGROUND_SECTORINFO.
|
||||
UNDERGROUND_SECTORINFO *pUndergroundSector
|
||||
= FindUnderGroundSector(gWorldSectorX, gWorldSectorY, gbWorldSectorZ);
|
||||
|
||||
ubSectorID = (UINT8)SECTOR( gWorldSectorX, gWorldSectorY );
|
||||
pSector = &SectorInfo[ ubSectorID ];
|
||||
if (!pUndergroundSector)
|
||||
return;
|
||||
|
||||
pSector = &dummy;
|
||||
pSector->bBloodCats = pUndergroundSector->ubNumBloodcats;
|
||||
pSector->bBloodCatPlacements = pUndergroundSector->ubNumBloodcats;
|
||||
}
|
||||
else
|
||||
{
|
||||
ubSectorID = (UINT8)SECTOR( gWorldSectorX, gWorldSectorY );
|
||||
pSector = &SectorInfo[ ubSectorID ];
|
||||
}
|
||||
|
||||
if( !pSector->bBloodCatPlacements )
|
||||
{ //This map has no bloodcat placements, so don't waste CPU time.
|
||||
|
||||
@@ -246,7 +246,7 @@ BOOLEAN LoadMercProfiles(void)
|
||||
UINT32 uiLoop, uiLoop2;//, uiLoop3;
|
||||
UINT16 usItem;//, usNewGun, usAmmo, usNewAmmo;
|
||||
|
||||
if (gGameExternalOptions.fAlwaysUseProfDat == FALSE)
|
||||
if (gGameExternalOptions.fUseDifficultyBasedProfDat == TRUE)
|
||||
{
|
||||
switch ( gGameOptions.ubDifficultyLevel)
|
||||
{
|
||||
|
||||
+11
-5
@@ -4976,7 +4976,7 @@ INT32 BulletImpact( SOLDIERTYPE *pFirer, SOLDIERTYPE * pTarget, UINT8 ubHitLocat
|
||||
// HEADROCK HAM 3.2: Critical headshots may now cause blindness, based on shot damage.
|
||||
if (gGameExternalOptions.ubChanceBlindedByHeadshot)
|
||||
{
|
||||
if (PreRandom(gGameExternalOptions.ubChanceBlindedByHeadshot) == 0)
|
||||
if (__min(100,(PreRandom(100)+1 + iImpact)) <= gGameExternalOptions.ubChanceBlindedByHeadshot)
|
||||
{
|
||||
if (pTarget->bBlindedCounter < iImpact / 10 )
|
||||
pTarget->bBlindedCounter = iImpact / 10;
|
||||
@@ -6181,17 +6181,23 @@ UINT8 GetDamage ( OBJECTTYPE *pObj )
|
||||
|
||||
if ( Item[pObj->usItem].usItemClass == IC_BLADE || Item[pObj->usItem].usItemClass == IC_PUNCH || Item[pObj->usItem].usItemClass == IC_TENTACLES )
|
||||
{
|
||||
UINT8 ubDamage = Weapon[ pObj->usItem ].ubImpact + GetMeleeDamageBonus(pObj);
|
||||
return min(255, (UINT8)( (ubDamage) + ( (double)ubDamage / 100) * gGameExternalOptions.ubMeleeDamageMultiplier ) );
|
||||
// HEADROCK HAM 3.6: Can now take a negative modifier
|
||||
UINT8 ubDamage = (UINT8)GetModifiedMeleeDamage( Weapon[ pObj->usItem ].ubImpact );
|
||||
ubDamage += GetMeleeDamageBonus(pObj);
|
||||
//return min(255, (UINT8)( (ubDamage) + ( (double)ubDamage / 100) * gGameExternalOptions.ubMeleeDamageMultiplier ) );
|
||||
return min(255, (UINT8)ubDamage);
|
||||
}
|
||||
else
|
||||
{
|
||||
UINT8 ubDamage = Weapon[ pObj->usItem ].ubImpact;
|
||||
// HEADROCK HAM 3.6: Can now take a negative modifier
|
||||
UINT8 ubDamage = (UINT8)GetModifiedMeleeDamage( Weapon[ pObj->usItem ].ubImpact );
|
||||
|
||||
// WTF? Why do only small weapons get their damage bonus?!
|
||||
if (FitsInSmallPocket(pObj) == true)
|
||||
{
|
||||
ubDamage += GetDamageBonus(pObj);
|
||||
}
|
||||
return min(255, (UINT8)( (ubDamage) + ( (double)ubDamage / 100) * gGameExternalOptions.ubGunDamageMultiplier ) );
|
||||
return min(255, (UINT8)ubDamage );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+11
-3
@@ -254,7 +254,9 @@ void CalcBestShot(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestShot, BOOLEAN shootUns
|
||||
|
||||
if ( TANK( pSoldier ) )
|
||||
{
|
||||
ubMaxPossibleAimTime = pSoldier->bActionPoints - ubMinAPcost;
|
||||
// HEADROCK HAM 3.6: Calculation must take into account APBP constants and other aiming modifications!
|
||||
INT8 bAPsLeft = pSoldier->bActionPoints - ubMinAPcost;
|
||||
ubMaxPossibleAimTime = CalcAimingLevelsAvailableWithAP( pSoldier, pOpponent->sGridNo, bAPsLeft );
|
||||
|
||||
// always burst
|
||||
if ( ubMaxPossibleAimTime < ubBurstAPs )
|
||||
@@ -268,7 +270,9 @@ void CalcBestShot(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestShot, BOOLEAN shootUns
|
||||
}
|
||||
else
|
||||
{
|
||||
ubMaxPossibleAimTime = min(AllowedAimingLevels(pSoldier),pSoldier->bActionPoints - ubMinAPcost);
|
||||
// HEADROCK HAM 3.6: Calculation must take into account APBP constants and other aiming modifications!
|
||||
INT8 bAPsLeft = pSoldier->bActionPoints - ubMinAPcost;
|
||||
ubMaxPossibleAimTime = CalcAimingLevelsAvailableWithAP( pSoldier, pOpponent->sGridNo, bAPsLeft );
|
||||
}
|
||||
|
||||
// consider the various aiming times
|
||||
@@ -287,7 +291,11 @@ void CalcBestShot(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestShot, BOOLEAN shootUns
|
||||
//sprintf(tempstr,"Vs. %s, at AimTime %d, ubChanceToHit = %d",ExtMen[pOpponent->ubID].name,ubAimTime,ubChanceToHit);
|
||||
//PopMessage(tempstr);
|
||||
|
||||
iHitRate = (pSoldier->bActionPoints * ubChanceToHit) / (ubRawAPCost + ubAimTime);
|
||||
// HEADROCK HAM 3.6: Actual aiming time is no longer 1AP per level... Failure to take this into account
|
||||
// may yield skewed results in favour of high-aim targets.
|
||||
INT16 sActualAimTime = CalcAPCostForAiming( pSoldier, pOpponent->sGridNo, (INT8)ubAimTime );
|
||||
|
||||
iHitRate = (pSoldier->bActionPoints * ubChanceToHit) / (ubRawAPCost + sActualAimTime);
|
||||
//NumMessage("hitRate = ",iHitRate);
|
||||
|
||||
// if aiming for this amount of time produces a better hit rate
|
||||
|
||||
@@ -4377,6 +4377,9 @@ INT16 ubMinAPCost;
|
||||
pSoldier->aiData.bAimTime = BestAttack.ubAimTime;
|
||||
pSoldier->bDoBurst = 0;
|
||||
|
||||
// HEADROCK HAM 3.6: bAimTime represents how MANY aiming levels are used, not how much APs they cost necessarily.
|
||||
INT16 sActualAimTime = CalcAPCostForAiming( pSoldier, BestAttack.sTarget, (INT8)pSoldier->aiData.bAimTime );
|
||||
|
||||
if (ubBestAttackAction == AI_ACTION_FIRE_GUN)
|
||||
{
|
||||
// Do we need to change stance? NB We'll have to ready our gun again
|
||||
@@ -4438,10 +4441,12 @@ INT16 ubMinAPCost;
|
||||
BestAttack.ubAPCost = MinAPsToAttack( pSoldier, BestAttack.sTarget, ADDTURNCOST, 1) + ubStanceCost;
|
||||
|
||||
// Clip the aim time if necessary
|
||||
if ( BestAttack.ubAPCost + BestAttack.ubAimTime > pSoldier->bActionPoints )
|
||||
// HEADROCK HAM 3.6: Use Actual Aiming Costs, without assuming that each aim level = 1 AP.
|
||||
if ( BestAttack.ubAPCost + sActualAimTime > pSoldier->bActionPoints )
|
||||
{
|
||||
// AP cost would balance (plus X, minus X) but aim time is reduced
|
||||
BestAttack.ubAimTime = pSoldier->bActionPoints - BestAttack.ubAPCost - ubStanceCost;
|
||||
// HEADROCK HAM 3.6: Use actual Aiming Costs.
|
||||
BestAttack.ubAimTime = CalcAimingLevelsAvailableWithAP( pSoldier, BestAttack.sTarget, (pSoldier->bActionPoints - BestAttack.ubAPCost - ubStanceCost) );
|
||||
if (BestAttack.ubAimTime < 0 )
|
||||
{
|
||||
// This is actually a logic error situation. The ChangeStance section is supposed
|
||||
@@ -4466,7 +4471,8 @@ INT16 ubMinAPCost;
|
||||
|
||||
ubBurstAPs = CalcAPsToBurst( pSoldier->CalcActionPoints(), &(pSoldier->inv[BestAttack.bWeaponIn]) );
|
||||
|
||||
if (pSoldier->bActionPoints >= BestAttack.ubAPCost + BestAttack.ubAimTime + ubBurstAPs )
|
||||
// HEADROCK HAM 3.6: Use Actual Aiming Time.
|
||||
if (pSoldier->bActionPoints >= BestAttack.ubAPCost + sActualAimTime + ubBurstAPs )
|
||||
{
|
||||
// Base chance of bursting is 25% if best shot was +0 aim, down to 8% at +4
|
||||
if ( TANK( pSoldier ) )
|
||||
@@ -4504,7 +4510,10 @@ INT16 ubMinAPCost;
|
||||
iChance += 5 * ( 15 - PythSpacesAway( pSoldier->sGridNo, BestAttack.sTarget ) );
|
||||
}
|
||||
}
|
||||
else if (PythSpacesAway( pSoldier->sGridNo, BestAttack.sTarget ) < 10 && gGameOptions.ubDifficultyLevel > DIF_LEVEL_EASY )
|
||||
// HEADROCK HAM 3.6: due to the "else", this part of the formula is NEVER hit. Removing.
|
||||
//else if (PythSpacesAway( pSoldier->sGridNo, BestAttack.sTarget ) < 10 && gGameOptions.ubDifficultyLevel > DIF_LEVEL_EASY )
|
||||
if (PythSpacesAway( pSoldier->sGridNo, BestAttack.sTarget ) < 10 && gGameOptions.ubDifficultyLevel > DIF_LEVEL_EASY )
|
||||
|
||||
{
|
||||
iChance += 100;
|
||||
}
|
||||
@@ -4588,6 +4597,11 @@ INT16 ubMinAPCost;
|
||||
iChance += 5 * ( 15 - PythSpacesAway( pSoldier->sGridNo, BestAttack.sTarget ) );
|
||||
}
|
||||
}
|
||||
// HEADROCK HAM 3.6: Forcing enemies to autofire at close range if possible, similar to forced burst (see above)
|
||||
if (PythSpacesAway( pSoldier->sGridNo, BestAttack.sTarget ) < 10 && gGameOptions.ubDifficultyLevel > DIF_LEVEL_EASY )
|
||||
{
|
||||
iChance += 100;
|
||||
}
|
||||
}
|
||||
|
||||
if ((INT32) PreRandom( 100 ) < iChance || Weapon[pSoldier->inv[BestAttack.bWeaponIn].usItem].NoSemiAuto)
|
||||
@@ -4599,7 +4613,9 @@ INT16 ubMinAPCost;
|
||||
}
|
||||
else
|
||||
{
|
||||
pSoldier->aiData.bAimTime = 0;
|
||||
// HEADROCK HAM 3.6: No no no! This line removes all aiming from a potentially deadly single-shot! Commenting out.
|
||||
//pSoldier->aiData.bAimTime = 0;
|
||||
pSoldier->aiData.bAimTime = BestAttack.ubAimTime;
|
||||
pSoldier->bDoBurst = 0;
|
||||
pSoldier->bDoAutofire = 0;
|
||||
// not enough aps - do somthing else
|
||||
|
||||
@@ -642,7 +642,11 @@ INT32 FindBestNearbyCover(SOLDIERTYPE *pSoldier, INT32 morale, INT32 *piPercentB
|
||||
// must be able to reach the cover, so it can't possibly be more than
|
||||
// action points left (rounded down) tiles away, since minimum
|
||||
// cost to move per tile is 1 points.
|
||||
iMaxMoveTilesLeft = __max( 0, pSoldier->bActionPoints - MinAPsToStartMovement( pSoldier, usMovementMode ) );
|
||||
// HEADROCK HAM 3.6: This doesn't take into account the 100AP system. Adjusting.
|
||||
// Please note, I used a calculation that may have a better representation in some global variable.
|
||||
//iMaxMoveTilesLeft = __max( 0, pSoldier->bActionPoints - MinAPsToStartMovement( pSoldier, usMovementMode ) );
|
||||
iMaxMoveTilesLeft = __max( 0, (pSoldier->bActionPoints - MinAPsToStartMovement( pSoldier, usMovementMode ) / (APBPConstants[AP_MAXIMUM]/25)) );
|
||||
|
||||
//NumMessage("In BLACK, maximum tiles to move left = ",maxMoveTilesLeft);
|
||||
|
||||
// if we can't go as far as the usual full search range
|
||||
|
||||
@@ -245,4 +245,10 @@ INT32 FindClosestClimbPoint (SOLDIERTYPE *pSoldier, BOOLEAN fClimbUp );
|
||||
INT32 FindFlankingSpot(SOLDIERTYPE *pSoldier, INT32 sPos, INT8 bAction );
|
||||
BOOLEAN CanClimbFromHere (SOLDIERTYPE * pSoldier, BOOLEAN fUp );
|
||||
|
||||
// HEADROCK HAM 3.6: Adding includes for A* cover calculations
|
||||
INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, UINT8 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft );
|
||||
INT8 CalcBestCTGT( SOLDIERTYPE *pSoldier, UINT8 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft );
|
||||
INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, UINT8 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft );
|
||||
UINT8 NumberOfTeamMatesAdjacent( SOLDIERTYPE * pSoldier, INT32 sGridNo );
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1813,14 +1813,15 @@ BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usIte
|
||||
uiRoll = PreRandom( 100 );
|
||||
|
||||
// Calculate wound amount
|
||||
INT16 newDamage = pExplosive->ubDamage + (INT16)(( pExplosive->ubDamage * gGameExternalOptions.ubExplosivesDamageMultiplier) / 100); //lal
|
||||
// HEADROCK HAM 3.6: Can now use negative modifier.
|
||||
INT16 newDamage = (INT16)GetModifiedExplosiveDamage( pExplosive->ubDamage );
|
||||
//INT16 newDamage = pExplosive->ubDamage + (INT16)(( pExplosive->ubDamage * gGameExternalOptions.ubExplosivesDamageMultiplier) / 100); //lal
|
||||
|
||||
sWoundAmt = newDamage + (INT16) ( (newDamage * uiRoll) / 100 );
|
||||
|
||||
|
||||
|
||||
// Calculate breath amount ( if stun damage applicable )
|
||||
INT16 newBreath = pExplosive->ubStunDamage + (INT16)(( pExplosive->ubStunDamage * gGameExternalOptions.ubExplosivesDamageMultiplier) / 100); //lal
|
||||
INT16 newBreath = (INT16)GetModifiedExplosiveDamage( pExplosive->ubStunDamage );
|
||||
//INT16 newBreath = pExplosive->ubStunDamage + (INT16)(( pExplosive->ubStunDamage * gGameExternalOptions.ubExplosivesDamageMultiplier) / 100); //lal
|
||||
|
||||
sBreathAmt = ( newBreath * 100 ) + (INT16) ( ( ( newBreath / 2 ) * 100 * uiRoll ) / 100 ) ;
|
||||
|
||||
|
||||
+133
-135
@@ -376,11 +376,11 @@ STR16 pAssignmentStrings[] =
|
||||
L"Repar.", // repairing
|
||||
L"Üben", // training themselves
|
||||
L"Miliz", // training a town to revolt
|
||||
L"M.Militia", //training moving militia units // TODO.Translate
|
||||
L"M.Miliz", //training moving militia units
|
||||
L"Trainer", // training a teammate
|
||||
L"Rekrut", // being trained by someone else
|
||||
L"Staff", // operating a strategic facility // TODO.Translate
|
||||
L"Rest", // Resting at a facility // TODO.Translate
|
||||
L"Betrieb", // operating a strategic facility
|
||||
L"Pause", // Resting at a facility
|
||||
L"Tot", // dead
|
||||
L"Unfähig", // abbreviation for incapacitated
|
||||
L"Gefangen", // Prisoner of war - captured
|
||||
@@ -393,14 +393,14 @@ STR16 pMilitiaString[] =
|
||||
L"Miliz", // the title of the militia box
|
||||
L"Ohne Aufgabe", //the number of unassigned militia troops
|
||||
L"Mit Feinden im Sektor können Sie keine Miliz einsetzen!",
|
||||
L"Some militia were not assigned to a sector. Would you like to disband them?", // TODO.Translate
|
||||
L"Einige Milizen wurden keinem Sektor zugewiesen. Möchten Sie diese Einheiten auflösen?",
|
||||
};
|
||||
|
||||
STR16 pMilitiaButtonString[] =
|
||||
{
|
||||
L"Autom.", // auto place the militia troops for the player
|
||||
L"Fertig", // done placing militia troops
|
||||
L"Disband", // HEADROCK HAM 3.6: Disband militia // TODO.Translate
|
||||
L"Auflösen", // HEADROCK HAM 3.6: Disband militia
|
||||
};
|
||||
|
||||
STR16 pConditionStrings[] =
|
||||
@@ -615,7 +615,7 @@ STR16 pAssignMenuStrings[] =
|
||||
L"Fahrzeug", // the merc is in a vehicle
|
||||
L"Repar.", // the merc is repairing items
|
||||
L"Training", // the merc is training
|
||||
L"Facility", // the merc is using/staffing a facility // TODO.Translate
|
||||
L"Betrieb", // the merc is using/staffing a facility
|
||||
L"Abbrechen", // cancel this menu
|
||||
};
|
||||
|
||||
@@ -672,7 +672,7 @@ STR16 pTrainingMenuStrings[] =
|
||||
{
|
||||
L"Üben", // train yourself
|
||||
L"Miliz", // train the town
|
||||
L"Mobile Militia", // TODO.Translate
|
||||
L"Mobile Miliz",
|
||||
L"Trainer", // train your teammates
|
||||
L"Rekrut", // be trained by an instructor
|
||||
L"Abbrechen", // cancel this menu
|
||||
@@ -1082,7 +1082,7 @@ CHAR16 gWeaponStatsDesc[][ 16 ] =
|
||||
L"Gewicht:", //12
|
||||
L"Bet. Schaden:", //13
|
||||
// HEADROCK: Added new strings for extended description ** REDUNDANT **
|
||||
L"Attachments:", //14 // TODO.Translate
|
||||
L"Zubehör:", //14 // Attachments
|
||||
L"AUTO/5:", //15
|
||||
L"Menge:", //16
|
||||
|
||||
@@ -1701,7 +1701,7 @@ STR16 sFacilitiesStrings[] =
|
||||
{
|
||||
L"Keine",
|
||||
L"Hospital",
|
||||
L"Factory", // TODO.Translate
|
||||
L"Fabrik", // Factory
|
||||
L"Gefängnis",
|
||||
L"Militär",
|
||||
L"Flughafen",
|
||||
@@ -1730,7 +1730,7 @@ STR16 pwTownInfoStrings[] =
|
||||
L"Level", // the training level of civilians in this town
|
||||
L"Zivilistentraining", // 10 // state of civilian training in town
|
||||
L"Miliz", // the state of the trained civilians in the town
|
||||
L"Mobile Training", // HEADROCK HAM 3.6: The stat of Mobile militia training in town // TODO.Translate
|
||||
L"Mobile. M. Training", // HEADROCK HAM 3.6: The stat of Mobile militia training in town
|
||||
};
|
||||
|
||||
// Mine strings
|
||||
@@ -1990,7 +1990,7 @@ STR16 pTransactionText[] =
|
||||
L"Kauf bei Bobby Rays", // Bobby Ray is the name of an arms dealer
|
||||
L"Ausgeglichene Konten bei M.E.R.C.",
|
||||
L"Krankenversicherung für %s", // medical deposit for merc
|
||||
L"B.S.E-Profilanalyse", // IMP is the acronym for International Mercenary Profiling
|
||||
L"B.S.E.-Profilanalyse", // IMP is the acronym for International Mercenary Profiling
|
||||
L"Versicherung für %s abgeschlossen",
|
||||
L"Versicherung für %s verringert",
|
||||
L"Versicherung für %s verlängert", // johnny contract extended
|
||||
@@ -2011,8 +2011,8 @@ STR16 pTransactionText[] =
|
||||
L"Miliz in %s ausbilden", // initial cost to equip a town's militia
|
||||
L"Gegenstände von %s gekauft.", //is used for the Shop keeper interface. The dealers name will be appended to the end of the string.
|
||||
L"%s hat Geld angelegt.",
|
||||
L"Facility Use", // HEADROCK HAM 3.6 // TODO.Translate
|
||||
L"Militia upkeep", // HEADROCK HAM 3.6 // TODO.Translate
|
||||
L"Betriebskosten", // HEADROCK HAM 3.6
|
||||
L"Unterhaltskosten für Miliz", // HEADROCK HAM 3.6
|
||||
};
|
||||
|
||||
STR16 pTransactionAlternateText[] =
|
||||
@@ -2216,7 +2216,7 @@ STR16 pImpPopUpStrings[] =
|
||||
L"Fehler beim Laden des B.S.E. Charakters.",
|
||||
L"Sie haben bereits die maximale Anzahl an B.S.E. Charakteren.",
|
||||
L"Sie haben bereits drei B.S.E. Charaktere mit dem gleichen Geschlecht.",
|
||||
L"Sie können sich den I.M.P. Charakter nicht leisten.",
|
||||
L"Sie können sich den B.S.E. Charakter nicht leisten.",
|
||||
L"Der neue B.S.E. Charakter ist nun in ihrem Team.",
|
||||
};
|
||||
|
||||
@@ -2268,12 +2268,12 @@ STR16 pFilesTitle[] =
|
||||
STR16 pFilesSenderList[] =
|
||||
{
|
||||
L"Aufklärungsbericht", // the recon report sent to the player. Recon is an abbreviation for reconissance
|
||||
L"Intercept #1", // first intercept file .. Intercept is the title of the organization sending the file...similar in function to INTERPOL/CIA/KGB..refer to fist record in files.txt for the translated title
|
||||
L"Intercept #2", // second intercept file
|
||||
L"Intercept #3", // third intercept file
|
||||
L"Intercept #4", // fourth intercept file
|
||||
L"Intercept #5", // fifth intercept file
|
||||
L"Intercept #6", // sixth intercept file
|
||||
L"Abschnitt #1", // first intercept file .. Intercept is the title of the organization sending the file...similar in function to INTERPOL/CIA/KGB..refer to fist record in files.txt for the translated title
|
||||
L"Abschnitt #2", // second intercept file
|
||||
L"Abschnitt #3", // third intercept file
|
||||
L"Abschnitt #4", // fourth intercept file
|
||||
L"Abschnitt #5", // fifth intercept file
|
||||
L"Abschnitt #6", // sixth intercept file
|
||||
};
|
||||
|
||||
// Text having to do with the History Log
|
||||
@@ -2307,7 +2307,7 @@ STR16 pHistoryStrings[] =
|
||||
L"Rechnung an M.E.R.C. bezahlt", // paid outstanding bills at MERC
|
||||
L"Enrico Chivaldoris Auftrag akzeptiert",
|
||||
//6-10
|
||||
L"B.S.E-Profil erstellt",
|
||||
L"B.S.E.-Profil erstellt",
|
||||
L"Versicherung abgeschlossen für %s.", // insurance contract purchased
|
||||
L"Versicherung gekündigt für %s.", // insurance contract canceled
|
||||
L"Versicherung ausgezahlt für %s.", // insurance claim payout for merc
|
||||
@@ -2418,7 +2418,7 @@ STR16 pBookMarkStrings[] =
|
||||
{
|
||||
L"A.I.M.",
|
||||
L"Bobby Rays",
|
||||
L"B.S.E",
|
||||
L"B.S.E.",
|
||||
L"M.E.R.C.",
|
||||
L"Bestattungsinst.",
|
||||
L"Florist",
|
||||
@@ -2511,8 +2511,8 @@ STR16 pWebPagesTitles[] =
|
||||
L"Bobby Rays - Sonst.", //misc is an abbreviation for miscellaneous
|
||||
L"Bobby Rays - Gebraucht",
|
||||
L"Bobby Rays - Versandauftrag",
|
||||
L"B.S.E",
|
||||
L"B.S.E",
|
||||
L"B.S.E.",
|
||||
L"B.S.E.",
|
||||
L"Fleuropa",
|
||||
L"Fleuropa - Gestecke",
|
||||
L"Fleuropa - Bestellformular",
|
||||
@@ -3196,7 +3196,7 @@ STR16 AimFiText[] =
|
||||
|
||||
// The title of the page, the above text gets added at the end of this text
|
||||
L"A.I.M.-Mitglieder ansteigend sortiert nach %s",
|
||||
L"A.I.M. Mitglieder absteigend sortiert nach %s",
|
||||
L"A.I.M.-Mitglieder absteigend sortiert nach %s",
|
||||
|
||||
// Instructions to the players on what to do
|
||||
|
||||
@@ -3462,10 +3462,10 @@ STR16 pMilitiaConfirmStrings[] =
|
||||
L"Sie können sich keine $%d für die Miliz hier leisten.",
|
||||
L"%s benötigt eine Loyalität von %d Prozent, um mit dem Milizen-Training fortzufahren.",
|
||||
L"Sie können die Miliz in %s nicht mehr trainieren.",
|
||||
L"You cannot afford the $%d to train mobile militia here.", // HEADROCK HAM 3.6: Mobile Militia TODO.Translate
|
||||
L"Continue training mobile militia in %s (%s %d)?", // HEADROCK HAM 3.6: Mobile Militia TODO.Translate
|
||||
L"Training mobile militia in %d sectors will cost $ %d. %s", // HEADROCK HAM 3.6: Mobile Militia TODO.Translate
|
||||
L"Training a squad of mobile militia will cost $", // HEADROCK HAM 3.6: Mobile Militia TODO.Translate
|
||||
L"Sie können sich keine $%d für mobile Miliz hier leisten.", // HEADROCK HAM 3.6: Mobile Militia
|
||||
L"Mobile Milizen in %s (%s %d) weitertrainieren?", // HEADROCK HAM 3.6: Mobile Militia
|
||||
L"Mobile Milizen in %d Sektoren zu trainieren kostet $ %d. %s", // HEADROCK HAM 3.6: Mobile Militia
|
||||
L"Eine mobile Milizeinheit für diese Stadt zu trainieren kostet $", // HEADROCK HAM 3.6: Mobile Militia
|
||||
};
|
||||
|
||||
//Strings used in the popup box when withdrawing, or depositing money from the $ sign at the bottom of the single merc panel
|
||||
@@ -3520,7 +3520,7 @@ STR16 zOptionsToggleText[] =
|
||||
L"Niedrige CPU Belastung",
|
||||
L"Erw. Gegenstandsinfo (EDB)",
|
||||
L"Erzwungener Runden-Modus", // add forced turn mode
|
||||
L"Stat Progress Bars", // Show progress towards stat increase
|
||||
L"Status Trainingsfortschritt", // Show progress towards stat increase
|
||||
L"--Cheat Mode Optionen--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
|
||||
L"Erzwinge Bobby Ray Lieferungen", // force all pending Bobby Ray shipments
|
||||
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END
|
||||
@@ -3616,7 +3616,7 @@ STR16 zOptionsScreenHelpText[] =
|
||||
L"Wenn diese Funktion aktiviert ist, wird das Spiel mit viel geringerer CPU Belastung laufen.",
|
||||
L"Wenn diese Funktion aktiviert ist, werden erweiterte Beschreibungen zu den Waffen und Gegenständen angezeigt.",
|
||||
L"Wenn diese Funktion aktiviert ist und noch Gegner im Sektor sind, bleibt das Spiel im Runden-Modus, bis alle Feinde tot sind (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).",
|
||||
L"When ON, shows character progress towards gaining levels.",
|
||||
L"Wenn diese Funktion aktiviert ist, wird der Trainingsfortschritt für die Söldner angezeigt.",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
|
||||
L"Force all pending Bobby Ray shipments",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
|
||||
@@ -4234,7 +4234,7 @@ STR16 gzLateLocalizedString[] =
|
||||
|
||||
//46-48
|
||||
L"%ss Gewehrlauf-Verlängerung fällt ab!",
|
||||
L"No more than %d militia trainers are permitted in this sector.", // TODO.Translate
|
||||
L"Es sind nicht mehr als %d Milizenausbilder in diesem Sektor erlaubt.",
|
||||
L"Sind Sie sicher?", //
|
||||
|
||||
//49-50
|
||||
@@ -4274,7 +4274,7 @@ STR16 gzLateLocalizedString[] =
|
||||
|
||||
STR16 gzCWStrings[] =
|
||||
{
|
||||
L"Call reinforcements to %s from adjacent sectors?", // TODO.Translate
|
||||
L"Verstärkung aus benachbarten Sektoren nach %s rufen?",
|
||||
};
|
||||
|
||||
// WANNE: Tooltips
|
||||
@@ -4351,36 +4351,36 @@ STR16 New113Message[] =
|
||||
L"Gegner gesichtet! (Ctrl + x für Rundenmodus)",
|
||||
};
|
||||
|
||||
// TODO.Translate
|
||||
STR16 New113HAMMessage[] =
|
||||
{
|
||||
// 0 - 5
|
||||
L"%s cowers in fear!",
|
||||
L"%s is pinned down!",
|
||||
L"%s fires more rounds than intended!",
|
||||
L"You cannot train militia in this sector.",
|
||||
L"Militia picks up %s.",
|
||||
L"Cannot train militia with enemies present!",
|
||||
L"%s zittert vor Angst!",
|
||||
L"%s is festgenagelt!",
|
||||
L"%s feuert mehr Schüsse mehr als beabsichtigt!",
|
||||
L"Sie können keine Miliz in diesem Sektor ausbilden.",
|
||||
L"Miliz hebt %s auf.",
|
||||
L"Wenn Feinde im Sektor sind können Sie keine Miliz ausbilden!",
|
||||
// 6 - 10
|
||||
L"%s lacks sufficient Leadership score to train militia.",
|
||||
L"No more than %d Mobile Militia trainers are permitted in this sector.",
|
||||
L"No room in %s or around it for new Mobile Militia!",
|
||||
L"You need to have %d Town Militia in each of %s's liberated sectors before you can train Mobile Militia here.",
|
||||
L"Can't staff a facility while enemies are present!",
|
||||
L"%s hat nicht genug Führungsqualität um Milizen auszubilden.",
|
||||
L"Pro Sektor sind nicht mehr als %d Milizausbilder erlaubt.",
|
||||
L"Kein Platz für mobile Milizen in oder rund um %s!",
|
||||
L"Sie benötigen %d Stadtmilizen in jedem von %ss befreiten Sektoren bevor Sie hier mobile Milizen ausbilden können.",
|
||||
L"Anlage nicht nutzbar wenn Feinde in der Gegend sind!",
|
||||
// 11 - 15
|
||||
L"%s lacks sufficient Wisdom to staff this facility.",
|
||||
L"The %s is already fully-staffed.",
|
||||
L"It will cost $%d per hour to staff this facility. Do you wish to continue?",
|
||||
L"You have insufficient funds to pay for all Facility work today. $%d have been paid, but you still owe $%d. The locals are not pleased.",
|
||||
L"You have insufficient funds to pay for all Facility work today. You owe $%d. The locals are not pleased.",
|
||||
L"%s hat nicht genügend Weisheit um diese Anlage betreiben zu können.",
|
||||
L"%s ist schon voll besetzt.",
|
||||
L"Diese Anlage zu betreiben kostet $%d pro Stunde. Weitermachen?",
|
||||
L"Sie haben nicht genug Geld um alle heutigen Betriebskosten zu zahlen. $%d wurden bezahlt, Sie schulden weiterhin $%d. Die Einwohner sind nicht erfreut.",
|
||||
L"Sie haben nicht genug Geld um alle heutigen Betriebskosten zu zahlen. Sie schulden $%d. Die Einwohner sind nicht erfreut.",
|
||||
// 16 - 20
|
||||
L"You have an outstanding debt of $%d for Facility Operation, and no money to pay it off!",
|
||||
L"You have an outstanding debt of $%d for Facility Operation. You can't assign this merc to facility duty until you have enough money to pay off the entire debt.",
|
||||
L"You have an outstanding debt of $%d for Facility Operation. Would you like to pay it all back?",
|
||||
L"N/A in this sector",
|
||||
L"Daily Expenses",
|
||||
L"Sie haben eine ausstehende Forderung von $%d für Betriebskosen und kein Geld um zu bezahlen!",
|
||||
L"Sie haben eine ausstehende Forderung von $%d für Betriebskosen. Dieser Anlage können Sie keinen Söldner zuweisen bis Sie Ihre gesamten Schulden beglichen haben.",
|
||||
L"Sie haben eine ausstehende Forderung von $%d für Betriebskosen. Möchten Sie diese Schuld begleichen?",
|
||||
L"Nicht möglich in diesem Sektor",
|
||||
L"Tagesausgaben",
|
||||
// 21 - 25
|
||||
L"Insufficient funds to pay all enlisted militia! %d militia have disbanded and returned home.",
|
||||
L"Nicht genug Geld für alle angeworbenen Milzen! %d Milzen wurden entlassen und sind heimgekehrt.",
|
||||
|
||||
};
|
||||
|
||||
// WANNE: This are the email texts, when one of the 4 new 1.13 MERC mercs have levelled up, that Speck sends
|
||||
@@ -4693,112 +4693,110 @@ STR16 gzIMPDisabilityTraitText[]=
|
||||
L"Ihre größte Schwäche",
|
||||
};
|
||||
|
||||
// TODO.Translate
|
||||
// HEADROCK HAM 3.6: Error strings for assigning a merc to a facility
|
||||
STR16 gzFacilityErrorMessage[]=
|
||||
{
|
||||
L"%s lacks sufficient Strength to perform this task.",
|
||||
L"%s lacks sufficient Dexterity to perform this task.",
|
||||
L"%s lacks sufficient Agility to perform this task.",
|
||||
L"%s is not Healthy enough to perform this task.",
|
||||
L"%s lacks sufficient Wisdom to perform this task.",
|
||||
L"%s lacks sufficient Marksmanship to perform this task.",
|
||||
L"%s hat nicht genug Kraft um diese Aufgabe zu erledigen.",
|
||||
L"%s ist nicht geschickt genug um diese Aufgabe zu erledigen.",
|
||||
L"%s ist nicht beweglich genug um diese Aufgabe zu erledigen.",
|
||||
L"%s hat keine ausreichende Gesundheit um diese Aufgabe zu erledigen.",
|
||||
L"%s mangelt es an ausreichender Weisheit um diese Aufgabe zu erledigen.",
|
||||
L"%s mangelt es an ausreichender Treffsicherheit um diese Aufgabe zu erledigen.",
|
||||
// 6 - 10
|
||||
L"%s lacks sufficient Medical Skill to perform this task.",
|
||||
L"%s lacks sufficient Mechanical Skill to perform this task.",
|
||||
L"%s lacks sufficient Leadership to perform this task.",
|
||||
L"%s lacks sufficient Explosives Skill to perform this task.",
|
||||
L"%s lacks sufficient Experience to perform this task.",
|
||||
L"%s hat nicht genug Medizinkenntnis um diese Aufgabe zu erledigen.",
|
||||
L"%s hat zu wenig technisches Verständnis um diese Aufgabe zu erledigen.",
|
||||
L"%s mangelt es an ausreichender Führungsqualität um diese Aufgabe zu erledigen.",
|
||||
L"%s hat nicht genug Sprengstoffkenntnis um diese Aufgabe zu erledigen.",
|
||||
L"%s mangelt es an ausreichender Erfahrung um diese Aufgabe zu erledigen.",
|
||||
// 11 - 15
|
||||
L"%s lacks sufficient Morale to perform this task.",
|
||||
L"%s is too exhausted to perform this task.",
|
||||
L"Insufficient loyalty in %s. The locals refuse to allow you to perform this task.",
|
||||
L"Too many people are already working at the %s.",
|
||||
L"Too many people are already performing this task at the %s.",
|
||||
L"%s hat nicht genug Moral um diese Aufgabe zu erledigen.",
|
||||
L"%s ist zu erschöpft um diese Aufgabe zu erledigen.",
|
||||
L"Zu wenig Loyalität in %s. Die Einwohner lassen Sie diese Aufgabe nicht verrichten.",
|
||||
L"Es arbeiten bereits zu viele Personen in %s.",
|
||||
L"Zu viele Personen verrichten diese Aufgabe schon in %s.",
|
||||
// 16 - 20
|
||||
L"%s can find no items to repair.",
|
||||
L"%s has lost some %s while working in sector %s!",
|
||||
L"%s has lost some %s while working at the %s in %s!",
|
||||
L"%s was injured while working in sector %s, and requires immediate medical attention!",
|
||||
L"%s was injured while working at the %s in %s, and requires immediate medical attention!",
|
||||
L"%s findet nichts mehr zum Reparieren.",
|
||||
L"%s verliert %s beim Arbeiten in %s.",
|
||||
L"%s hat ein paar %s verloren beim Arbeiten in der %s in %s !",
|
||||
L"%s wurde verletzt beim Arbeiten in Sektor %s und benötigt dringend medizinische Versorgung!",
|
||||
L"%s wurde verletzt beim Arbeiten in der %s in %s und benötigt dringend medizinische Versorgung!",
|
||||
// 21 - 25
|
||||
L"%s was injured while working in sector %s. It doesn't seem too bad though.",
|
||||
L"%s was injured while working at the %s in %s. It doesn't seem too bad though.",
|
||||
L"The residents of %s seem upset about %s's presence.",
|
||||
L"The residents of %s seem upset about %s's work at the %s.",
|
||||
L"%s's actions in sector %s have caused loyalty loss throughout the region!",
|
||||
L"%s wurde verletzt beim Arbeiten in Sektor %s. Es scheint aber nichts Ernstes zu sein.",
|
||||
L"%s wurde verletzt beim Arbeiten in der %s in %s. Es scheint aber nichts Ernstes zu sein.",
|
||||
L"Die Einwohner von %s scheinen sich über die Anwesenheit von %s aufzuregen."
|
||||
L"Die Einwohner von %s scheinen sich über die Arbeit von %s in der %s aufzuregen."
|
||||
L"%ss Handeln im Sektor %s hat einen Loyalitätsverlust in der gesamten Region bewirkt!",
|
||||
// 26 - 30
|
||||
L"%s's actions at the %s in %s have caused loyalty loss throughout the region!",
|
||||
L"%s is drunk.", // <--- This is a log message string.
|
||||
L"%s has become severely ill in sector %s, and has been taken off duty.",
|
||||
L"%s has become severely ill and cannot continue his work at the %s in %s.",
|
||||
L"%s was injured in sector %s.", // <--- This is a log message string.
|
||||
L"%ss Handeln in der %s in %s hat einen Loyalitätsverlust in der gesamten Region bewirkt!",
|
||||
L"%s ist betrunken.", // <--- This is a log message string.
|
||||
L"%s ist ernsthaft krank geworden in Sektor %s und wurde vom Dienst freigestellt.",
|
||||
L"%s ist ernsthaft krank geworden und kann keine seine Arbeiten in der %s in %s fortsetzen.",
|
||||
L"%s wurde veletzt in Sektor %s.", // <--- This is a log message string.
|
||||
// 31 - 35
|
||||
L"%s was severely injured in sector %s.", //<--- This is a log message string.
|
||||
L"%s wurde ernsthaft im Sektor %s verletzt.", //<--- This is a log message string.
|
||||
|
||||
|
||||
};
|
||||
|
||||
// TODO.Translate
|
||||
STR16 gzFacilityRiskResultStrings[]=
|
||||
{
|
||||
L"Strength",
|
||||
L"Agility",
|
||||
L"Dexterity",
|
||||
L"Wisdom",
|
||||
L"Health",
|
||||
L"Marksmanship",
|
||||
L"Kraft",
|
||||
L"Beweglichkeit",
|
||||
L"Geschicklichkeit",
|
||||
L"Weisheit",
|
||||
L"Gesundheit",
|
||||
L"Treffsicherheit",
|
||||
// 5-10
|
||||
L"Leadership",
|
||||
L"Mechanical skill",
|
||||
L"Medical skill",
|
||||
L"Explosives skill",
|
||||
L"Führungsqualität",
|
||||
L"Technik",
|
||||
L"Medizin",
|
||||
L"Sprengstoffe",
|
||||
};
|
||||
|
||||
// TODO.Translate
|
||||
STR16 gzFacilityAssignmentStrings[]=
|
||||
{
|
||||
L"AMBIENT",
|
||||
L"Staff",
|
||||
L"Rest",
|
||||
L"Repair Items",
|
||||
L"Repair %s", // Vehicle name inserted here
|
||||
L"Repair Robot",
|
||||
|
||||
L"UMGEBUNG",
|
||||
L"Betrieb",
|
||||
L"Pause",
|
||||
L"Repariere Gegenstände",
|
||||
L"Repariere %s",
|
||||
L"Repariere Roboter",
|
||||
// 6-10
|
||||
L"Doctor",
|
||||
L"Arzt",
|
||||
L"Patient",
|
||||
L"Practice Strength",
|
||||
L"Practice Dexterity",
|
||||
L"Practice Agility",
|
||||
L"Practice Health",
|
||||
L"Üben Kraft",
|
||||
L"Üben Geschicklichkeit",
|
||||
L"Üben Beweglichkeit",
|
||||
L"Üben Gesundheit",
|
||||
// 11-15
|
||||
L"Practice Marksmanship",
|
||||
L"Practice Medical",
|
||||
L"Practice Mechanical",
|
||||
L"Practice Leadership",
|
||||
L"Practice Explosives",
|
||||
L"Üben Treffsicherheit",
|
||||
L"Üben Medizin",
|
||||
L"Üben Technik",
|
||||
L"Üben Führungsqualität",
|
||||
L"Üben Sprengstoff",
|
||||
// 16-20
|
||||
L"Student Strength",
|
||||
L"Student Dexterity",
|
||||
L"Student Agility",
|
||||
L"Student Health",
|
||||
L"Student Marksmanship",
|
||||
L"Rekrut Kraft",
|
||||
L"Rekrut Geschicklichkeit",
|
||||
L"Rekrut Beweglichkeit",
|
||||
L"Rekrut Gesundheit",
|
||||
L"Rekrut Treffsicherheit",
|
||||
// 21-25
|
||||
L"Student Medical",
|
||||
L"Student Mechanical",
|
||||
L"Student Leadership",
|
||||
L"Student Explosives",
|
||||
L"Trainer Strength",
|
||||
L"Rekrut Medizin",
|
||||
L"Rekrut Technik",
|
||||
L"Rekrut Führungsqualität.",
|
||||
L"Rekrut Sprengstoff",
|
||||
L"Trainer Kraft",
|
||||
// 26-30
|
||||
L"Trainer Dexterity",
|
||||
L"Trainer Agility",
|
||||
L"Trainer Health",
|
||||
L"Trainer Marksmanship",
|
||||
L"Trainer Medical",
|
||||
L"Trainer Geschicklichkeit",
|
||||
L"Trainer Beweglichkeit",
|
||||
L"Trainer Gesundheit",
|
||||
L"Trainer Treffsicherheit",
|
||||
L"Trainer Medizin",
|
||||
// 30-35
|
||||
L"Trainer Mechanical",
|
||||
L"Trainer Leadership",
|
||||
L"Trainer Explosives",
|
||||
L"Trainer Technik",
|
||||
L"Trainer Führungsqualität",
|
||||
L"Trainer Sprengstoff",
|
||||
};
|
||||
|
||||
STR16 Additional113Text[]=
|
||||
|
||||
@@ -3709,7 +3709,7 @@ STR16 zOptionsToggleText[] =
|
||||
L"Íèçêàÿ çàãðóçêà ïðîöåññîðà",
|
||||
L"Ïîäðîáíîå îïèñàíèå ïðåäìåòîâ", //Enhanced Description Box
|
||||
L"Òîëüêî ïîøàãîâûé ðåæèì", // add forced turn mode
|
||||
L"Ñòàòèñòèêà ïðîäâèæåíèÿ íàâûêîâ", //Stat Progress Bars // Show progress towards stat increase // TODO.Translate
|
||||
L"Ñòàòèñòèêà ïðîäâèæåíèÿ íàâûêîâ", //Stat Progress Bars // Show progress towards stat increase
|
||||
L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
|
||||
L"Óñêîðèòü äîñòàâêó Áîááè Ðýÿ", // force all pending Bobby Ray shipments
|
||||
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Winmm.lib .\Multiplayer\raknet\RakNetLibStaticDebug.lib ws2_32.lib"
|
||||
OutputFile="$(OutDir)\JA2_EN_Debug_3342.exe"
|
||||
OutputFile="$(OutDir)\JA2_EN_3353_Debug.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
@@ -145,7 +145,7 @@
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Winmm.lib .\Multiplayer\raknet\RakNetLibStatic.lib ws2_32.lib"
|
||||
OutputFile="$(OutDir)\JA2_EN_Release_3342.exe"
|
||||
OutputFile="$(OutDir)\JA2_EN_3353.exe"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
GenerateMapFile="true"
|
||||
@@ -229,7 +229,7 @@
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Winmm.lib .\Multiplayer\raknet\RakNetLibStatic.lib ws2_32.lib"
|
||||
OutputFile="$(OutDir)\MapEditor_EN_Release_3342.exe"
|
||||
OutputFile="$(OutDir)\MapEditor_EN_3353.exe"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
GenerateMapFile="true"
|
||||
@@ -316,7 +316,7 @@
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Winmm.lib .\Multiplayer\raknet\RakNetLibStaticDebug.lib ws2_32.lib"
|
||||
OutputFile="$(OutDir)\MapEditor_EN_Debug_3342.exe"
|
||||
OutputFile="$(OutDir)\MapEditor_EN_3353_Debug.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
@@ -399,7 +399,7 @@
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Winmm.lib .\Multiplayer\raknet\RakNetLibStatic.lib ws2_32.lib"
|
||||
OutputFile="$(OutDir)\JA2_EN_ReleaseDebugInfo_3342.exe"
|
||||
OutputFile="$(OutDir)\JA2_EN_3353_ReleaseDebugInfo.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
GenerateMapFile="false"
|
||||
|
||||
+8
-8
@@ -62,7 +62,7 @@
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Winmm.lib RakNetLibStatic.lib ws2_32.lib"
|
||||
OutputFile="$(OutDir)\JA2_EN_Debug_3342_VS2008.exe"
|
||||
OutputFile="$(OutDir)\JA2_MP_EN_Debug_VS2008.exe"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories="Multiplayer\raknet"
|
||||
IgnoreDefaultLibraryNames="libc"
|
||||
@@ -95,7 +95,7 @@
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="C:\Games\Jagged Alliance 2 EN"
|
||||
OutputDirectory="D:\misc\1.13\Misc\JA2 1.13 MP"
|
||||
IntermediateDirectory="build\VS2008\$(ProjectName)_$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets=".\ja2_VS2008.vsprops;.\ja2_VS2008Linker.vsprops;.\ja2_VS2008Libs.vsprops"
|
||||
@@ -141,7 +141,7 @@
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Winmm.lib RakNetLibStatic.lib ws2_32.lib"
|
||||
OutputFile="$(OutDir)\JA2_EN_Release_3342_VS2008.exe"
|
||||
OutputFile="$(OutDir)\JA2_MP_VS2008_Release.exe"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="Multiplayer\raknet"
|
||||
GenerateDebugInformation="false"
|
||||
@@ -221,7 +221,7 @@
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Winmm.lib RakNetLibStatic.lib ws2_32.lib"
|
||||
OutputFile="$(OutDir)\MapEditor_EN_Release_3342_VS2008.exe"
|
||||
OutputFile="$(OutDir)\MapEditor_EN_VS2008.exe"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="Multiplayer\raknet"
|
||||
GenerateDebugInformation="false"
|
||||
@@ -255,7 +255,7 @@
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="MapEditorD|Win32"
|
||||
OutputDirectory="C:\Games\Jagged Alliance 2 EN"
|
||||
OutputDirectory="\games\jagged alliance 2"
|
||||
IntermediateDirectory="build\VS2008\$(ProjectName)_$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets=".\ja2_VS2008.vsprops;.\ja2_VS2008Linker.vsprops;.\ja2_VS2008Libs.vsprops;.\ja2_VS2008Editor.vsprops"
|
||||
@@ -299,7 +299,7 @@
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Winmm.lib RakNetLibStatic.lib ws2_32.lib"
|
||||
OutputFile="$(OutDir)\MapEditor_EN_Debug_3342_VS2008.exe"
|
||||
OutputFile="$(OutDir)\Map EditorD_2389_en.exe"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories="Multiplayer\raknet"
|
||||
IgnoreDefaultLibraryNames=""
|
||||
@@ -332,7 +332,7 @@
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release_WithDebugInfo|Win32"
|
||||
OutputDirectory="C:\Games\Jagged Alliance 2 EN"
|
||||
OutputDirectory="\games\jagged alliance 2"
|
||||
IntermediateDirectory="build\VS2008\$(ProjectName)_$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets=".\ja2_VS2008.vsprops;.\ja2_VS2008Linker.vsprops;.\ja2_VS2008Libs.vsprops"
|
||||
@@ -379,7 +379,7 @@
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Winmm.lib RakNetLibStatic.lib ws2_32.lib"
|
||||
OutputFile="$(OutDir)\JA2_EN_ReleaseDebugInfo_3342_VS2008.exe"
|
||||
OutputFile="$(OutDir)\JA2_MP_EN_v1.1_WDI.exe"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories="Multiplayer\raknet"
|
||||
GenerateDebugInformation="true"
|
||||
|
||||
Reference in New Issue
Block a user