mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
.editorconfig already enforces it but it's getting changed piecemeal in every commit. just get it done with. the script: ``` find . -type f -not -path "./.git/*" -not -path "./.vs/*" | while read -r file; do isFile=$(file -0 "$file" | cut -d $'\0' -f2) case "$isFile" in (*text*) echo "$file is text" if [[ $(tail -c 1 "$file" | wc -l) -ne 1 ]]; then echo "" >> "$file" fi ;; (*) echo "file isn't text" ;; esac done ```
228 lines
9.3 KiB
C
228 lines
9.3 KiB
C
#ifndef __STRATEGIC_TOWN_LOYALTY_H
|
|
#define __STRATEGIC_TOWN_LOYALTY_H
|
|
|
|
#include "Types.h"
|
|
#include "mapscreen.h"
|
|
#include "Soldier Control.h"
|
|
|
|
// the max loyalty rating for any given town
|
|
#define MAX_LOYALTY_VALUE 100
|
|
|
|
// gain pts per real loyalty pt
|
|
#define GAIN_PTS_PER_LOYALTY_PT 500
|
|
|
|
|
|
// --- LOYALTY BONUSES ---
|
|
// Omerta
|
|
#define LOYALTY_BONUS_MIGUEL_READS_LETTER (10 * GAIN_PTS_PER_LOYALTY_PT) // multiplied by 4.5 due to Omerta's high seniment, so it's 45%
|
|
// Drassen
|
|
#define LOYALTY_BONUS_CHILDREN_FREED_DOREEN_KILLED (10 * GAIN_PTS_PER_LOYALTY_PT) // +50% bonus for Drassen
|
|
#define LOYALTY_BONUS_CHILDREN_FREED_DOREEN_SPARED (20 * GAIN_PTS_PER_LOYALTY_PT) // +50% bonus for Drassen
|
|
// Cambria
|
|
#define LOYALTY_BONUS_MARTHA_WHEN_JOEY_RESCUED (15 * GAIN_PTS_PER_LOYALTY_PT) // -25% for low Cambria sentiment
|
|
#define LOYALTY_BONUS_KEITH_WHEN_HILLBILLY_SOLVED (15 * GAIN_PTS_PER_LOYALTY_PT) // -25% for low Cambria sentiment
|
|
// Chitzena
|
|
#define LOYALTY_BONUS_YANNI_WHEN_CHALICE_RETURNED_LOCAL (20 * GAIN_PTS_PER_LOYALTY_PT) // +75% higher in Chitzena
|
|
#define LOYALTY_BONUS_YANNI_WHEN_CHALICE_RETURNED_GLOBAL (10 * GAIN_PTS_PER_LOYALTY_PT) // for ALL towns!
|
|
// Alma
|
|
#define LOYALTY_BONUS_AUNTIE_WHEN_BLOODCATS_KILLED (20 * GAIN_PTS_PER_LOYALTY_PT) // Alma's increases reduced by half due to low rebel sentiment
|
|
#define LOYALTY_BONUS_MATT_WHEN_DYNAMO_FREED (20 * GAIN_PTS_PER_LOYALTY_PT) // Alma's increases reduced by half due to low rebel sentiment
|
|
#define LOYALTY_BONUS_FOR_SERGEANT_KROTT (20 * GAIN_PTS_PER_LOYALTY_PT) // Alma's increases reduced by half due to low rebel sentiment
|
|
// Everywhere
|
|
#define LOYALTY_BONUS_TERRORISTS_DEALT_WITH ( 5 * GAIN_PTS_PER_LOYALTY_PT)
|
|
#define LOYALTY_BONUS_KILL_QUEEN_MONSTER (10 * GAIN_PTS_PER_LOYALTY_PT)
|
|
// Anywhere
|
|
// loyalty bonus for completing town training
|
|
#define LOYALTY_BONUS_FOR_TOWN_TRAINING ( 2 * GAIN_PTS_PER_LOYALTY_PT ) // 2%
|
|
|
|
|
|
|
|
// --- LOYALTY PENALTIES ---
|
|
// Cambria
|
|
#define LOYALTY_PENALTY_MARTHA_HEART_ATTACK (20 * GAIN_PTS_PER_LOYALTY_PT)
|
|
#define LOYALTY_PENALTY_JOEY_KILLED (10 * GAIN_PTS_PER_LOYALTY_PT)
|
|
// Balime
|
|
#define LOYALTY_PENALTY_ELDIN_KILLED (20 * GAIN_PTS_PER_LOYALTY_PT) // effect is double that!
|
|
// Any mine
|
|
#define LOYALTY_PENALTY_HEAD_MINER_ATTACKED (20 * GAIN_PTS_PER_LOYALTY_PT) // exact impact depends on rebel sentiment in that town
|
|
// Loyalty penalty for being inactive, per day after the third
|
|
//Madd:
|
|
#define LOYALTY_PENALTY_INACTIVE 0 // (10 * GAIN_PTS_PER_LOYALTY_PT)
|
|
|
|
// Flugente: a rotting corpse is so decayed that it disappeared (we're the ones making all those corpses, the last we could do is clean up afterwards)
|
|
#define LOYALTY_PENALTY_ROTTED_CORPSE (1 * GAIN_PTS_PER_LOYALTY_PT)
|
|
|
|
// Flugente: one of our thieves was caught stealing
|
|
#define LOYALTY_STOLE_MONEY_FROM_LOCALS ((4/7) * GAIN_PTS_PER_LOYALTY_PT)
|
|
|
|
typedef enum
|
|
{
|
|
// There are only for distance-adjusted global loyalty effects. Others go into list above instead!
|
|
GLOBAL_LOYALTY_BATTLE_WON,
|
|
GLOBAL_LOYALTY_BATTLE_LOST,
|
|
GLOBAL_LOYALTY_ENEMY_KILLED,
|
|
GLOBAL_LOYALTY_NATIVE_KILLED,
|
|
GLOBAL_LOYALTY_GAIN_TOWN_SECTOR,
|
|
GLOBAL_LOYALTY_LOSE_TOWN_SECTOR,
|
|
GLOBAL_LOYALTY_LIBERATE_WHOLE_TOWN, // awarded only the first time it happens
|
|
GLOBAL_LOYALTY_ABANDON_MILITIA,
|
|
GLOBAL_LOYALTY_GAIN_MINE,
|
|
GLOBAL_LOYALTY_LOSE_MINE,
|
|
GLOBAL_LOYALTY_GAIN_SAM,
|
|
GLOBAL_LOYALTY_LOSE_SAM,
|
|
GLOBAL_LOYALTY_QUEEN_BATTLE_WON,
|
|
GLOBAL_LOYALTY_GRIZZLY_DEAD, // Flugente: I have no idea what the playn behind this is, but I found it in the lua script. It isn't used anywhere in the code though...
|
|
GLOBAL_LOYALTY_PRISONERS_TORTURED, // Flugente: the player has attacked prisoners
|
|
|
|
} GlobalLoyaltyEventTypes;
|
|
|
|
|
|
typedef struct TOWN_LOYALTY
|
|
{
|
|
UINT8 ubRating;
|
|
INT16 sChange;
|
|
BOOLEAN fStarted; // starting loyalty of each town is initialized only when player first enters that town
|
|
UINT8 UNUSEDubRebelSentiment; // current rebel sentiment. Events could change the starting value...
|
|
BOOLEAN fLiberatedAlready;
|
|
BYTE filler[19]; // reserved for expansion
|
|
|
|
} TOWN_LOYALTY;
|
|
|
|
|
|
|
|
// the loyalty variables for each town
|
|
extern TOWN_LOYALTY gTownLoyalty[ MAX_TOWNS ];
|
|
extern UINT8 gubTownRebelSentiment[MAX_TOWNS];
|
|
|
|
// town names list
|
|
extern INT32 pTownNamesList[];
|
|
// town locations list
|
|
extern INT32 pTownLocationsList[];
|
|
// whether town maintains/displays loyalty or not
|
|
extern BOOLEAN gfTownUsesLoyalty[ MAX_TOWNS ];
|
|
|
|
|
|
|
|
// initialize a specific town's loyalty if it hasn't already been
|
|
void StartTownLoyaltyIfFirstTime( INT8 bTownId );
|
|
|
|
// set a speciafied town's loyalty rating
|
|
void SetTownLoyalty( INT8 bTownId, UINT8 ubLoyaltyValue );
|
|
|
|
// increment the town loyalty rating (hundredths!)
|
|
void IncrementTownLoyalty( INT8 bTownId, UINT32 uiLoyaltyIncrease );
|
|
|
|
// decrement the town loyalty rating (hundredths!)
|
|
void DecrementTownLoyalty( INT8 bTownId, UINT32 uiLoyaltyDecrease );
|
|
|
|
// update the loyalty based on current % control of the town
|
|
void UpdateLoyaltyBasedOnControl( INT8 bTownId );
|
|
|
|
// strategic handler, goes through and handles all strategic events for town loyalty updates...player controlled, monsters
|
|
void HandleTownLoyalty( void );
|
|
|
|
// init town loyalty lists
|
|
void InitTownLoyalty( void );
|
|
|
|
// handle the death of a civ
|
|
void HandleMurderOfCivilian( SOLDIERTYPE *pSoldier, BOOLEAN fIntentional );
|
|
|
|
// handle town loyalty adjustment for recruitment
|
|
void HandleTownLoyaltyForNPCRecruitment( SOLDIERTYPE *pSoldier );
|
|
|
|
// handle loyalty adjustment for theft
|
|
BOOLEAN HandleLoyaltyAdjustmentForRobbery( SOLDIERTYPE *pSoldier );
|
|
|
|
// handle loyalty adjustments for dmg/destruction of buildings
|
|
void HandleLoyaltyForDemolitionOfBuilding( SOLDIERTYPE *pSoldier, INT16 sPointsDmg );
|
|
|
|
// remove random item from this sector
|
|
void RemoveRandomItemsInSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ, UINT32 uiNumEnemies );
|
|
|
|
// get the shortest distance between these two towns via roads
|
|
INT32 GetTownDistances( UINT8 ubTown, UINT8 ubTownA );
|
|
|
|
// build list of town sectors
|
|
void BuildListOfTownSectors( void );
|
|
|
|
|
|
//#ifdef JA2TESTVERSION
|
|
|
|
// calculate shortest distances between towns
|
|
void CalcDistancesBetweenTowns( void );
|
|
|
|
// write out distances between towns to a data file
|
|
void WriteOutDistancesBetweenTowns( void );
|
|
|
|
// dumps the calc'ed distances into a text file table for easy verification
|
|
void DumpDistancesBetweenTowns(void);
|
|
|
|
//#endif // JA2TESTVERSION
|
|
|
|
|
|
// read in distances between towns
|
|
void ReadInDistancesBetweenTowns( void );
|
|
|
|
|
|
/* Delayed loyalty effects elimininated. Sep.12/98. ARM
|
|
// delayed town loyalty event
|
|
void HandleDelayedTownLoyaltyEvent( UINT32 uiValue );
|
|
// build loyalty event value
|
|
UINT32 BuildLoyaltyEventValue( INT8 bTownValue, UINT32 uiValue, BOOLEAN fIncrement );
|
|
*/
|
|
|
|
|
|
BOOLEAN LoadStrategicTownLoyaltyFromSavedGameFile( HWFILE hFile );
|
|
BOOLEAN SaveStrategicTownLoyaltyToSaveGameFile( HWFILE hFile );
|
|
|
|
void ReduceLoyaltyForRebelsBetrayed(void);
|
|
|
|
// how many towns under player control?
|
|
INT32 GetNumberOfWholeTownsUnderControl( void );
|
|
|
|
// is all the sectors of this town under control by the player
|
|
INT32 IsTownUnderCompleteControlByPlayer( INT8 bTownId );
|
|
|
|
// are all town sectors under control by the enemy
|
|
INT32 IsTownUnderCompleteControlByEnemy(INT8 bTownId);
|
|
|
|
// used when monsters attack a town sector without going through tactical and they win
|
|
void AdjustLoyaltyForCivsEatenByMonsters( INT16 sSectorX, INT16 sSectorY, UINT8 ubHowMany, BOOLEAN aBandits );
|
|
|
|
// these are used to handle global loyalty events (ones that effect EVERY town on the map)
|
|
void IncrementTownLoyaltyEverywhere( UINT32 uiLoyaltyIncrease );
|
|
void DecrementTownLoyaltyEverywhere( UINT32 uiLoyaltyDecrease );
|
|
void HandleGlobalLoyaltyEvent( UINT8 ubEventType, INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ);
|
|
void AffectAllTownsLoyaltyByDistanceFrom( INT32 iLoyaltyChange, INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ);
|
|
|
|
// Flugente: like AffectAllTownsLoyaltyByDistanceFrom(...) but only for the closest town
|
|
void AffectClosestTownLoyaltyByDistanceFrom( INT32 iLoyaltyChange, INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
|
|
|
|
// handle a town being liberated for the first time
|
|
void CheckIfEntireTownHasBeenLiberated( INT8 bTownId, INT16 sSectorX, INT16 sSectorY );
|
|
void CheckIfEntireTownHasBeenLost( INT8 bTownId, INT16 sSectorX, INT16 sSectorY );
|
|
|
|
void HandleLoyaltyChangeForNPCAction( UINT8 ubNPCProfileId );
|
|
|
|
BOOLEAN DidFirstBattleTakePlaceInThisTown( INT8 bTownId );
|
|
void SetTheFirstBattleSector( INT16 sSectorValue );
|
|
|
|
// gte number of whole towns but exclude this one
|
|
INT32 GetNumberOfWholeTownsUnderControlButExcludeCity( INT8 bCityToExclude );
|
|
|
|
//Function assumes that mercs have retreated already. Handles two cases, one for general merc retreat
|
|
//which slightly demoralizes the mercs, the other handles abandonment of militia forces which poses
|
|
//as a serious loyalty penalty.
|
|
|
|
#define RETREAT_TACTICAL_TRAVERSAL 0
|
|
#define RETREAT_PBI 1
|
|
#define RETREAT_AUTORESOLVE 2
|
|
void HandleLoyaltyImplicationsOfMercRetreat( INT8 bRetreatCode, INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ );
|
|
|
|
void MaximizeLoyaltyForDeidrannaKilled( void );
|
|
|
|
// HEADROCK HAM 3.6: Loyalty hit for owing too much money on facility work
|
|
void HandleFacilityDebtLoyaltyHit( void );
|
|
|
|
#endif
|