/*
* 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 : OREBEL.H
//Description : class Rebel
#ifndef __OREBEL_H
#define __OREBEL_H
#ifndef __ODYNARRB_H
#include
#endif
//------- action mode definitions --------//
enum { REBEL_IDLE=1,
REBEL_ATTACK_TOWN, // Attack town without capturing
REBEL_ATTACK_FIRM, // Attack firm without capturing
REBEL_SETTLE_NEW, // Settle to a new town
REBEL_SETTLE_TO, // Settle to an existing town
};
//---------- Define class Rebel ---------//
#pragma pack(1)
class Rebel
{
public:
short rebel_recno; // recno of this rebel in rebel_array
short leader_unit_recno;
char action_mode;
short action_para;
short action_para2;
short mobile_rebel_count; // no. of units in this rebel group
short town_recno; // the town controlled by the rebel, one rebel can only control one town
char hostile_nation_bits;
public:
Rebel();
~Rebel();
void next_day();
void join(int unitRecno);
void set_action(int actionMode, int actionPara=0, int actionPara2=0)
{ action_mode = actionMode, action_para = actionPara; action_para2 = actionPara2; }
void town_being_attacked(int attackerUnitRecno);
void set_hostile_nation(short nationRecno);
void reset_hostile_nation(short nationRecno);
int is_hostile_nation(short nationRecno);
public:
void think_new_action();
void think_cur_action();
void think_town_action();
int think_settle_new();
int think_settle_to();
int think_capture_attack_town();
int think_attack_firm();
void execute_new_action();
void stop_all_rebel_unit();
void turn_indepedent();
int select_new_leader();
void process_leader_quit();
// #### patch begin Gilbert 20/1 ######//
UCHAR crc8();
void clear_ptr();
// #### patch end Gilbert 20/1 ######//
};
#pragma pack()
//-------- Define class RebelArray -------//
class RebelArray : public DynArrayB
{
public:
short rebel_count;
public:
RebelArray();
~RebelArray();
void init();
void deinit();
int create_rebel(int unitRecno, int hostileNationRecno, int actionMode=REBEL_IDLE, int actionPara=0);
void del_rebel(int rebelRecno);
void drop_rebel_identity(int unitRecno);
void settle_town(int unitRecno, int townRecno);
void next_day();
void stop_attack_town(short townRecno);
void stop_attack_firm(short firmRecno);
void stop_attack_nation(short nationRecno);
//--------- file functions -----------//
int write_file(File* filePtr);
int read_file(File* filePtr);
//--------------------------------------//
#ifdef DEBUG
Rebel* operator[](int recNo);
#else
Rebel* operator[](int recNo) { return (Rebel*) get_ptr(recNo); }
#endif
int is_deleted(int recNo) { return get_ptr(recNo) == NULL; }
};
extern RebelArray rebel_array;
//----------------------------------------//
#endif