/* * 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 : OFIRMRES.H //Description : Header file of object FirmRes #ifndef __OFIRMRES_H #define __OFIRMRES_H #ifndef __GAMEDEF_H #include #endif #ifndef __OFIRM_H #include #endif #ifndef __ORESDB_H #include #endif //------- Define constant ----------// #define MAX_FIRM_FRAME 11 // Maximum frames for firm animation #define MAX_FIRM_LOC_WIDTH 4 // Maximum no. of locations a firm can occupy #define MAX_FIRM_LOC_HEIGHT 4 //------------- Firm Mode ------------// enum { FIRM_UNDER_CONSTRUCTION='U', // definitions of FirmBuild::mode FIRM_IDLE='I', FIRM_ACTIVE='A', }; //------------ Define struct FirmRec ---------------// struct FirmRec { enum { CODE_LEN=8, NAME_LEN=20, SHORT_NAME_LEN=12, TITLE_LEN=10, FIRST_BUILD_LEN=3, BUILD_COUNT_LEN=3, HIT_POINTS_LEN=5, COST_LEN=5 }; char code[CODE_LEN]; char name[NAME_LEN]; char short_name[SHORT_NAME_LEN]; char overseer_title[TITLE_LEN]; char worker_title[TITLE_LEN]; char tera_type; char all_know; // whether all nations know how to build this firm in the beginning of the game char live_in_town; // whether the workers of the firm lives in towns or not. char hit_points[HIT_POINTS_LEN]; char is_linkable_to_town; char setup_cost[COST_LEN]; char year_cost[COST_LEN]; char first_build[FIRST_BUILD_LEN]; char build_count[BUILD_COUNT_LEN]; }; //------------ Define struct FirmBuildRec ---------------// struct FirmBuildRec { enum { FIRM_CODE_LEN=8, RACE_CODE_LEN=8, BITMAP_RECNO_LEN=5, FIRST_FRAME_LEN=5, FRAME_COUNT_LEN=2, RACE_ID_LEN=3 }; char firm_code[FIRM_CODE_LEN]; char race_code[RACE_CODE_LEN]; char animate_full_size; char under_construction_bitmap_recno[BITMAP_RECNO_LEN]; // ##### begin Gilbert 18/10 ########// char under_construction_bitmap_count[FRAME_COUNT_LEN]; // ##### end Gilbert 18/10 ########// char idle_bitmap_recno[BITMAP_RECNO_LEN]; char ground_bitmap_recno[BITMAP_RECNO_LEN]; char first_frame[FIRST_FRAME_LEN]; char frame_count[FRAME_COUNT_LEN]; char race_id[RACE_ID_LEN]; }; //------------ Define struct FirmFrameRec ---------------// struct FirmFrameRec { enum { FIRM_CODE_LEN=8, RACE_CODE_LEN=8, FRAME_ID_LEN=2, DELAY_LEN=2, FIRST_BITMAP_LEN=5, BITMAP_COUNT_LEN=2 }; char firm_code[FIRM_CODE_LEN]; char race_code[RACE_CODE_LEN]; char frame_id[FRAME_ID_LEN]; char delay[DELAY_LEN]; // unit: 1/10 second char first_bitmap[FIRST_BITMAP_LEN]; char bitmap_count[BITMAP_COUNT_LEN]; }; //------------ Define struct FirmBitmapRec ---------------// struct FirmBitmapRec { enum { FIRM_CODE_LEN=8, RACE_CODE_LEN=8, FRAME_ID_LEN=2, LOC_LEN=3, OFFSET_LEN=3, DELAY_LEN=2, FILE_NAME_LEN=8, BITMAP_PTR_LEN=4 }; char firm_code[FIRM_CODE_LEN]; char race_code[RACE_CODE_LEN]; char mode; char frame_id[FRAME_ID_LEN]; char loc_width[LOC_LEN]; char loc_height[LOC_LEN]; char layer; char offset_x[OFFSET_LEN]; char offset_y[OFFSET_LEN]; char delay[DELAY_LEN]; // unit: 1/10 second char file_name[FILE_NAME_LEN]; char bitmap_ptr[BITMAP_PTR_LEN]; }; //------------- Define struct FirmInfo --------------// #pragma pack(1) struct FirmInfo { enum { NAME_LEN=20, SHORT_NAME_LEN=12, TITLE_LEN=10 }; char firm_id; char name[NAME_LEN+1]; char short_name[SHORT_NAME_LEN+1]; char overseer_title[TITLE_LEN+1]; char worker_title[TITLE_LEN+1]; char tera_type; char buildable; // whether this building can be built by the player or it exists in the game since the beginning of the game. If setup_cost==0, this firm is not buildable char live_in_town; // whether the workers of the firm lives in towns or not. short max_hit_points; char need_overseer; char need_worker; char need_unit() { return need_overseer || need_worker; } short setup_cost; short year_cost; short first_build_id; short build_count; short loc_width; short loc_height; char firm_skill_id; // the id. of the skill that fits this firm char firm_race_id; // only can be built and operated by this race int can_build(int unitRecno); char is_linkable_to_town; int is_linkable_to_firm(int linkFirmId); int default_link_status(int linkFirmId); //---------- game vars -----------// short total_firm_count; // total no. of this firm type on the map short nation_firm_count_array[MAX_NATION]; char nation_tech_level_array[MAX_NATION]; int get_nation_tech_level(int nationRecno) { return nation_tech_level_array[nationRecno-1]; } void set_nation_tech_level(int nationRecno, char techLevel) { nation_tech_level_array[nationRecno-1] = techLevel; } public: int get_build_id(char* buildCode); void inc_nation_firm_count(int nationRecno); void dec_nation_firm_count(int nationRecno); }; #pragma pack() //------------- Define struct FirmBuild --------------// struct FirmBuild { enum { BUILD_CODE_LEN=8 }; char build_code[BUILD_CODE_LEN+1]; // building code, either a race code or a custom code for each firm's own use, it is actually read from FirmBuildRec::race_code[] char race_id; char animate_full_size; //----- info of the first frame -----// char loc_width; // no. of locations it takes horizontally and vertically char loc_height; char min_offset_x, min_offset_y; short max_bitmap_width, max_bitmap_height; //----------- frame info ------------// short frame_count; short first_bitmap_array[MAX_FIRM_FRAME]; short bitmap_count_array[MAX_FIRM_FRAME]; short frame_delay_array[MAX_FIRM_FRAME]; // unit: 1/10 second short under_construction_bitmap_recno; // bitmap recno of the firm that is under construction // ##### begin Gilbert 18/10 ########// short under_construction_bitmap_count; // ##### end Gilbert 18/10 ########// short idle_bitmap_recno; // bitmap recno of the firm that is idle short ground_bitmap_recno; short first_bitmap(int frameId) { return first_bitmap_array[frameId-1]; } short bitmap_count(int frameId) { return bitmap_count_array[frameId-1]; } short frame_delay(int frameId) { return frame_delay_array[frameId-1]; } }; //------------- Define struct FirmBitmap --------------// struct FirmBitmap { char* bitmap_ptr; short width, height; char loc_width; // no. of locations it takes horizontally and vertically char loc_height; char offset_x, offset_y; char display_layer; void draw_at(int absX, int absY, char *colorTable, int displayLayer); }; //----------- Define class FirmRes ---------------// class FirmRes { public: short firm_count; short firm_build_count; short firm_bitmap_count; FirmInfo* firm_info_array; FirmBuild* firm_build_array; FirmBitmap* firm_bitmap_array; char init_flag; ResourceDb res_bitmap; public: FirmRes(); void init(); void deinit(); int write_file(File* filePtr); int read_file(File* filePtr); FirmBitmap* get_bitmap(int bitmapId) { return firm_bitmap_array+bitmapId-1; } FirmBuild* get_build(int buildId) { return firm_build_array+buildId-1; } FirmInfo* operator[](int firmId); private: void load_firm_info(); void load_firm_build(); void load_firm_bitmap(); void process_firm_info(); }; extern FirmRes firm_res; //----------------------------------------------------// #endif