1 #ifndef NPC_H 2 #define NPC_H 3 4 #include "Facts.h" 5 #include "Types.h" 6 struct OBJECTTYPE; 7 struct SOLDIERTYPE; 8 9 10 #define NPC_TALK_RADIUS 4 11 12 13 enum Approach 14 { 15 APPROACH_NONE = 0, 16 17 APPROACH_FRIENDLY = 1, 18 APPROACH_DIRECT, 19 APPROACH_THREATEN, 20 APPROACH_RECRUIT, 21 APPROACH_REPEAT, 22 23 APPROACH_GIVINGITEM, 24 NPC_INITIATING_CONV, 25 NPC_INITIAL_QUOTE, 26 NPC_WHOAREYOU, 27 TRIGGER_NPC, 28 29 APPROACH_GIVEFIRSTAID, 30 APPROACH_SPECIAL_INITIAL_QUOTE, 31 APPROACH_ENEMY_NPC_QUOTE, 32 APPROACH_DECLARATION_OF_HOSTILITY, 33 APPROACH_EPC_IN_WRONG_SECTOR, 34 35 APPROACH_EPC_WHO_IS_RECRUITED, 36 APPROACH_INITIAL_QUOTE, 37 APPROACH_CLOSING_SHOP, 38 APPROACH_SECTOR_NOT_SAFE, 39 APPROACH_DONE_SLAPPED, // 20 40 41 APPROACH_DONE_PUNCH_0, 42 APPROACH_DONE_PUNCH_1, 43 APPROACH_DONE_PUNCH_2, 44 APPROACH_DONE_OPEN_STRUCTURE, 45 APPROACH_DONE_GET_ITEM, // 25 46 47 APPROACH_DONE_GIVING_ITEM, 48 APPROACH_DONE_TRAVERSAL, 49 APPROACH_BUYSELL, 50 APPROACH_ONE_OF_FOUR_STANDARD, 51 APPROACH_FRIENDLY_DIRECT_OR_RECRUIT, // 30 52 }; 53 54 extern INT8 const gbFirstApproachFlags[4]; 55 56 void ShutdownNPCQuotes(); 57 58 extern void SetQuoteRecordAsUsed( UINT8 ubNPC, UINT8 ubRecord ); 59 60 // uiApproachData is used for approach things like giving items, etc. 61 UINT8 CalcDesireToTalk(UINT8 ubNPC, UINT8 ubMerc, Approach); 62 void ConverseFull(UINT8 ubNPC, UINT8 ubMerc, Approach, UINT8 approach_record, OBJECTTYPE* approach_object); 63 void Converse(UINT8 ubNPC, UINT8 ubMerc, Approach); 64 65 extern void NPCReachedDestination( SOLDIERTYPE * pNPC, BOOLEAN fAlreadyThere ); 66 extern void PCsNearNPC( UINT8 ubNPC ); 67 extern BOOLEAN PCDoesFirstAidOnNPC( UINT8 ubNPC ); 68 extern void TriggerNPCRecord( UINT8 ubTriggerNPC, UINT8 ubTriggerNPCRec ); 69 extern BOOLEAN TriggerNPCWithIHateYouQuote( UINT8 ubTriggerNPC ); 70 71 extern void TriggerNPCRecordImmediately( UINT8 ubTriggerNPC, UINT8 ubTriggerNPCRec ); 72 73 BOOLEAN TriggerNPCWithGivenApproach(UINT8 ubTriggerNPC, Approach); 74 75 76 bool ReloadQuoteFile(UINT8 ubNPC); 77 void ReloadAllQuoteFiles(void); 78 79 // Save and loads the npc info to a saved game file 80 void SaveNPCInfoToSaveGameFile(HWFILE); 81 void LoadNPCInfoFromSavedGameFile(HWFILE, UINT32 uiSaveGameVersion); 82 83 extern void TriggerFriendWithHostileQuote( UINT8 ubNPC ); 84 85 extern void ReplaceLocationInNPCDataFromProfileID( UINT8 ubNPC, INT16 sOldGridNo, INT16 sNewGridNo ); 86 87 extern UINT8 ActionIDForMovementRecord( UINT8 ubNPC, UINT8 ubRecord ); 88 89 // given a victory in this sector, handle specific facts 90 void HandleVictoryInNPCSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ ); 91 92 // check if this shopkeep has been shutdown, if so do soething and return the fact 93 BOOLEAN HandleShopKeepHasBeenShutDown( UINT8 ubCharNum ); 94 95 BOOLEAN NPCHasUnusedRecordWithGivenApproach(UINT8 ubNPC, Approach); 96 BOOLEAN NPCWillingToAcceptItem( UINT8 ubNPC, UINT8 ubMerc, OBJECTTYPE * pObj ); 97 98 void SaveBackupNPCInfoToSaveGameFile(HWFILE); 99 void LoadBackupNPCInfoFromSavedGameFile(HWFILE); 100 void UpdateDarrelScriptToGoTo( SOLDIERTYPE * pSoldier ); 101 102 #define WALTER_BRIBE_AMOUNT 20000 103 104 BOOLEAN GetInfoForAbandoningEPC(UINT8 ubNPC, UINT16* pusQuoteNum, Fact* fact_to_set_true); 105 106 BOOLEAN RecordHasDialogue( UINT8 ubNPC, UINT8 ubRecord ); 107 108 INT8 ConsiderCivilianQuotes( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ, BOOLEAN fSetAsUsed ); 109 110 void ResetOncePerConvoRecordsForNPC( UINT8 ubNPC ); 111 112 void HandleNPCChangesForTacticalTraversal(const SOLDIERTYPE* s); 113 114 BOOLEAN NPCHasUnusedHostileRecord(UINT8 ubNPC, Approach); 115 116 void ResetOncePerConvoRecordsForAllNPCsInLoadedSector( void ); 117 118 INT16 NPCConsiderInitiatingConv(const SOLDIERTYPE* pNPC); 119 120 #endif 121