/*
* 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 : ONATIONA.H
//Description : Object nation array
#ifndef __ONATIONA_H
#define __ONATIONA_H
#ifndef __ODYNARRB_H
#include
#endif
#ifndef __ONATION_H
#include
#endif
//---- at least wait for 1 year after a nation is deleted before setting up a new nation. ---//
#define NEW_NATION_INTERVAL_DAYS 365
struct NewNationPara;
//---------- Define class NationArray -----------//
#pragma pack(1)
class NationArray : public DynArrayB
{
public:
enum { HUMAN_NAME_LEN=20 };
short nation_count; // no. of nations, it's different from nation_array.size() which is a DynArrayB
short ai_nation_count;
int last_del_nation_date;
int last_new_nation_date;
int max_nation_population; // the maximum population in a nation
int all_nation_population; // total population of all nations.
short independent_town_count;
short independent_town_count_race_array[MAX_RACE]; // the no. of independent towns each race has
int max_nation_units;
int max_nation_humans;
int max_nation_generals;
int max_nation_weapons;
int max_nation_ships;
int max_nation_spies;
int max_nation_firms;
int max_nation_tech_level;
int max_population_rating;
int max_military_rating;
int max_economic_rating;
int max_reputation;
int max_kill_monster_score;
int max_overall_rating;
short max_population_nation_recno;
short max_military_nation_recno;
short max_economic_nation_recno;
short max_reputation_nation_recno;
short max_kill_monster_nation_recno;
short max_overall_nation_recno;
int last_alliance_id;
int nation_peace_days; // continuous peace among nations
short player_recno;
Nation* player_ptr;
char nation_color_array[MAX_NATION+1];
char nation_power_color_array[MAX_NATION+2];
char human_name_array[MAX_NATION][HUMAN_NAME_LEN+1];
public:
NationArray();
~NationArray();
void init();
void deinit();
int nation_class_size();
int new_nation(int,int,int,unsigned long=0);
int new_nation(NewNationPara &);
int create_nation();
void del_nation(int);
void disp_nation_color(int x, int y, int nationColor);
int can_form_new_ai_nation();
void update_statistic();
void update_military_rating();
void update_total_human_count();
void process();
void next_month();
void next_year();
int random_unused_race();
int random_unused_color();
int write_file(File*);
int read_file(File*);
void set_human_name(int nationRecno, char* nameStr);
char* get_human_name(int nationNameId, int firstWordOnly=0);
//--------------------------------------//
#ifdef DEBUG
Nation* operator[](int recNo);
Nation* operator~();
#else
Nation* operator[](int recNo) { return (Nation*) get_ptr(recNo); }
Nation* operator~() { return player_ptr; }
#endif
int is_deleted(int recNo) { return get_ptr(recNo) == NULL; }
Nation* get_unpacked_nation(int recNo); // given a packed recno and return the unpacked nation ptr
// ##### begin Gilbert 3/9 ######//
char should_attack(short attackingNation, short attackedNation);
// ##### end Gilbert 3/9 ######//
//### begin alex 12/9 ###//
void draw_profile();
//#### end alex 12/9 ####//
};
#pragma pack()
// --------- define struct NewNationPara ----------//
struct NewNationPara
{
short nation_recno;
DWORD dp_player_id;
short color_scheme;
short race_id;
char player_name[NationArray::HUMAN_NAME_LEN+1];
void init(short n, DWORD playerId, short scheme, short race, char *playerName)
{
nation_recno = n;
dp_player_id = playerId;
color_scheme = scheme;
race_id = race;
strcpy(player_name, playerName);
}
};
extern NationArray nation_array;
//---------------------------------------------//
#endif