/*
* 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 : OGODRES.CPP
//Description : God resource class
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//---------- #define constant ------------//
#define GOD_DB "GOD"
//------- Begin of function GodRes::GodRes -----------//
GodRes::GodRes()
{
init_flag=0;
}
//--------- End of function GodRes::GodRes -----------//
//---------- Begin of function GodRes::init -----------//
//
// This function must be called after a map is generated.
//
void GodRes::init()
{
deinit();
//------- load database information --------//
load_god_info();
init_flag=1;
}
//---------- End of function GodRes::init -----------//
//---------- Begin of function GodRes::deinit -----------//
void GodRes::deinit()
{
if( init_flag )
{
mem_del(god_info_array);
init_flag=0;
}
}
//---------- End of function GodRes::deinit -----------//
//------- Begin of function GodRes::load_god_info -------//
//
// Read in information of GOD.DBF into memory array
//
void GodRes::load_god_info()
{
GodRec *godRec;
GodInfo *godInfo;
int i;
Database *dbGod = game_set.open_db(GOD_DB);
god_count = (short) dbGod->rec_count();
god_info_array = (GodInfo*) mem_add( sizeof(GodInfo)*god_count );
//------ read in god information array -------//
memset( god_info_array, 0, sizeof(GodInfo) * god_count );
for( i=0 ; iread(i+1);
godInfo = god_info_array+i;
godInfo->god_id = i+1;
godInfo->race_id = m.atoi(godRec->race_id, godRec->RACE_ID_LEN);
godInfo->unit_id = m.atoi(godRec->unit_id, godRec->UNIT_ID_LEN);
godInfo->exist_pray_points = m.atoi(godRec->exist_pray_points, godRec->PRAY_POINTS_LEN);
godInfo->power_pray_points = m.atoi(godRec->power_pray_points, godRec->PRAY_POINTS_LEN);
godInfo->can_cast_power = godRec->can_cast_power == '1';
godInfo->cast_power_range = m.atoi(godRec->cast_power_range, godRec->CAST_POWER_RANGE_LEN);
}
}
//--------- End of function GodRes::load_god_info ---------//
//------- Begin of function GodRes::enable_know_all -------//
//
// Make all god creatures known to this nation. (A cheating function)
//
void GodRes::enable_know_all(int nationRecno)
{
for( int i=1 ; i<=god_res.god_count ; i++ )
{
god_res[i]->enable_know(nationRecno);
}
}
//--------- End of function GodRes::enable_know_all ---------//
//------- Begin of function GodRes::init_nation_know -------//
//
// Initialize the god know status of a new nation.
//
void GodRes::init_nation_know(int nationRecno)
{
for( int i=1 ; i<=god_res.god_count ; i++ )
{
god_res[i]->disable_know(nationRecno);
}
}
//--------- End of function GodRes::init_nation_know ---------//
//------- Begin of function GodInfo::enable_know -------//
//
// Make this god known to this nation.
//
void GodInfo::enable_know(int nationRecno)
{
nation_know_array[nationRecno-1] = 1;
nation_array[nationRecno]->know_base_array[race_id-1] = 1; // enable the nation to build the fortress of power
}
//--------- End of function GodInfo::enable_know ---------//
//------- Begin of function GodInfo::disable_know -------//
//
// Make this god known to this nation.
//
void GodInfo::disable_know(int nationRecno)
{
nation_know_array[nationRecno-1] = 0;
nation_array[nationRecno]->know_base_array[race_id-1] = 0; // enable the nation to build the fortress of power
}
//--------- End of function GodInfo::disable_know ---------//
//------- Begin of function GodInfo::invoke -------//
//
// firmRecno - the firm recno of the seat of power which invokes this god.
// xLoc, yLoc - the x and y location of the god
//
// return: the recno of the God unit created.
//
short GodInfo::invoke(int firmRecno, int xLoc, int yLoc)
{
FirmBase* firmBase = (FirmBase*) firm_array[firmRecno];
err_when( firmBase->firm_id != FIRM_BASE );
//------- create the god unit --------//
SpriteInfo* spriteInfo = sprite_res[unit_res[unit_id]->sprite_id];
if( !world.locate_space( xLoc, yLoc, xLoc, yLoc, spriteInfo->loc_width, spriteInfo->loc_height, UNIT_AIR ) )
return 0;
//---------- add the god unit now -----------//
short unitRecno = unit_array.add_unit( unit_id, firmBase->nation_recno,
RANK_SOLDIER, 0, xLoc, yLoc );
//------- set vars of the God unit ----------//
UnitGod* unitGod = (UnitGod*) unit_array[unitRecno];
unitGod->god_id = god_id;
unitGod->base_firm_recno = firmRecno;
unitGod->hit_points = (short) firmBase->pray_points;
return unitRecno;
}
//--------- End of function GodInfo::invoke ---------//
//------- Begin of function GodRes::is_god_unit -------//
//
// Whether the given unit is a god unit or not.
//
int GodRes::is_god_unit(int unitId)
{
for( int i=1 ; i<=god_res.god_count ; i++ )
{
if( god_res[i]->unit_id == unitId )
return 1;
}
return 0;
}
//--------- End of function GodRes::is_god_unit ---------//
//---------- Begin of function GodRes::operator[] -----------//
GodInfo* GodRes::operator[](int godId)
{
err_if( godId<1 || godId>god_count )
err_now( "GodRes::operator[]" );
return god_info_array+godId-1;
}
//------------ End of function GodRes::operator[] -----------//