/* * Seven Kingdoms: Ancient Adversaries * * Copyright 1997,1998 Enlight Software Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ //Filename : OSPY.H //Description : class Spy #ifndef __OSPY_H #define __OSPY_H #ifndef __ODYNARRB_H #include #endif //------- define constant -------// #define MAX_BRIBE_AMOUNT 4000 #define SPY_ENEMY_RANGE 5 // only allow changing spy cloak if there are no enemy units within 5 locations from the unit #define MIN_VIEW_SECRET_SPYING_SKILL 20 // the minimum spying skill required for viewing secret reports //------- action mode definitions --------// enum { SPY_UNDEFINED, SPY_MOBILE, SPY_TOWN, SPY_FIRM, }; enum { SPY_IDLE, SPY_SOW_DISSENT, SPY_SABOTAGE, }; //---------- Define class Spy ---------// #pragma pack(1) class Spy { public: short spy_recno; char spy_place; // either SPY_TOWN or SPY_FIRM short spy_place_para; // it can be town_recno, firm_recno or unit_recno depending on what spy_place is char spy_skill; char spy_loyalty; // the spy's loyalty to his true home nation char true_nation_recno; char cloaked_nation_recno; char notify_cloaked_nation_flag; // whether the spy will send a surrendering message to the cloaked nation when it changes its cloak to the nation char exposed_flag; // this is set to 1 when the spy finished stealing the secret of a nation. char race_id; short name_id; char action_mode; char* action_str(); int cloaked_rank_id(); int cloaked_skill_id(); public: Spy(); void deinit(); void next_day(); void process_town_action(); void process_firm_action(); void pay_expense(); int think_betray(); void drop_spy_identity(); void change_true_nation(int newNationRecno); void change_cloaked_nation(int newNationRecno); int can_change_cloaked_nation(int newNationRecno); int capture_firm(); void reward(int remoteAction); void set_exposed(int remoteAction); void think_become_king(); int mobilize_spy(); int mobilize_town_spy(int decPop=1); int mobilize_firm_spy(); void set_action_mode(int actionMode); void set_next_action_mode(); void change_loyalty(int loyaltyChange); void update_loyalty(); int can_sabotage(); void set_place(int spyPlace, int spyPlacePara); int spy_place_nation_recno(); int get_loc(int& xLoc, int& yLoc); int assassinate(int targetUnitRecno, int remoteAction); int get_assassinate_rating(int targetUnitRecno, int& attackRating, int& defenseRating, int& defenderCount); void get_killed(int dispNews=1); //------- AI functions -------// void process_ai(); void think_town_spy(); void think_firm_spy(); int think_mobile_spy(); int think_bribe(); int think_assassinate(); int think_reward(); int think_mobile_spy_new_action(); int add_assign_spy_action(int destXLoc, int destYLoc, int cloakedNationRecno); int ai_spy_being_attacked(int attackerUnitRecno); // #### patch begin Gilbert 20/1 ######// UCHAR crc8(); void clear_ptr(); // #### patch end Gilbert 20/1 ######// }; #pragma pack() //-------- Define class SpyArray -------// class SpyArray : public DynArrayB { public: SpyArray(); ~SpyArray(); void init(); void deinit(); int add_spy(int unitRecno, int spySkill); int add_spy(); void del_spy(int spyRecno); void next_day(); int find_town_spy(int townRecno, int raceId, int spySeq); void process_sabotage(); void mobilize_all_spy(int spyPlace, int spyPlacePara, int nationRecno); void update_firm_spy_count(int firmRecno); void change_cloaked_nation(int spyPlace, int spyPlacePara, int fromNationRecno, int toNationRecno); void set_action_mode(int spyPlace, int spyPlacePara, int actionMode); int catch_spy(int spyPlace, int spyPlacePara); int total_spy_skill_level(int spyPlace, int spyPlacePara, int spyNationRecno, int& spyCount); void disp_view_secret_menu(int spyRecno, int refreshFlag); int detect_view_secret_menu(int spyRecno, int nationRecno); int needed_view_secret_skill(int viewMode); void ai_spy_town_rebel(int townRecno); //--------- file functions -----------// int write_file(File* filePtr); int read_file(File* filePtr); //--------------------------------------// #ifdef DEBUG Spy* operator[](int recNo); #else Spy* operator[](int recNo) { return (Spy*) get(recNo); } #endif int is_deleted(int recNo) { return ((Spy*)get(recNo))->spy_recno==0; } }; extern SpyArray spy_array; //----------------------------------------// #endif