/* * 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[] -----------//