/* * 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 : OSYS.H //Description : Header file for Game class #ifndef __OSYS_H #define __OSYS_H #include #include //------ Define common data buffer size ------// enum { COMMON_DATA_BUF_SIZE = 64*1024 }; // keep a 64K common buffer for all temporary memory storage like reading files temporarily into memory //-------------- define constant ------------// #define FRAMES_PER_DAY 10 // no. of frames per day #define MAX_SCENARIO_PATH 2 //------------ sys_flag --------------// enum { SYS_PREGAME=0, SYS_RUN }; //--------- game version ---------// enum { VERSION_FULL, VERSION_DEMO, VERSION_MULTIPLAYER_ONLY }; //--------- Define info modes --------// enum { VIEW_MODE_COUNT=10 }; enum { MODE_NORMAL, MODE_NATION, MODE_TOWN, MODE_ECONOMY, MODE_TRADE, MODE_MILITARY, MODE_TECH, MODE_SPY, MODE_RANK, MODE_NEWS_LOG, MODE_AI_ACTION, }; //### begin alex 11/8 ###// //------------------ define debug_seed_status_flag ----------------// enum { NO_DEBUG_SYN = 0, DEBUG_SYN_LOAD_AND_COMPARE_ONCE, DEBUG_SYN_AUTO_SAVE, DEBUG_SYN_AUTO_LOAD, }; //#### end alex 11/8 ####// enum KeyEventType : int; //-------- Define class Sys -----------// class Sys { public: char game_version; // VERSION_??? char sys_flag; char init_flag; char signal_exit_flag; // 0 - not exiting; 1 - exit to OS; 2 - exit to main menu char need_redraw_flag; // set to 1 if task switched back. After redraw, clear it char toggle_full_screen_flag; char cheat_enabled_flag; char user_pause_flag; char disp_fps_flag; char view_mode; // the view mode can be MODE_??? char map_need_redraw; char zoom_need_redraw; //------ frame related vars -----// int day_frame_count; uint32_t next_frame_time; // next frame's time for maintaining a specific game speed //----- multiplayer vars ----// char is_mp_game; uint32_t frame_count; // frame count, for is_sync_frame only char is_sync_frame; // whether sync should take place at the current frame (for handling one sync per n frames) char mp_save_flag; // indicate a request to save game in multi-player game uint32_t mp_save_frame; // save game in which frame //---- continous key string -----// enum { MAX_KEY_STR = 10 }; // Maximum 10 different key string int key_str_pos[MAX_KEY_STR]; // for detecting cheating codes //-------- statistic --------// uint32_t last_second_time; int frames_in_this_second; int frames_per_second; // the actual frames per second //------- file paths -------// char cdrom_drive; char dir_config[FilePath::MAX_FILE_PATH]; char dir_image[FilePath::MAX_FILE_PATH]; char dir_encyc[FilePath::MAX_FILE_PATH]; char dir_encyc2[FilePath::MAX_FILE_PATH]; char dir_music[FilePath::MAX_FILE_PATH]; char dir_movie[FilePath::MAX_FILE_PATH]; char dir_tutorial[FilePath::MAX_FILE_PATH]; union { char dir_scenario[FilePath::MAX_FILE_PATH]; char dir_scenario_path[MAX_SCENARIO_PATH][FilePath::MAX_FILE_PATH]; }; //------- other vars --------// char* common_data_buf; char debug_session; char testing_session; public: Sys(); ~Sys(); int init(); void deinit(); void deinit_directx(); void deinit_objects(); void run(int=0); void yield(); void yield_wsock_msg(); void set_speed(int frameSpeed, int remoteCall=0); void set_view_mode(int viewMode, int viewingNationRecno=0, int viewingSpyRecno=0); // ##### begin Gilbert 22/10 #######// void disp_view_mode(int observeMode=0); // ##### end Gilbert 22/10 #######// void capture_screen(); void disp_frame(); void blt_virtual_buf(); void pause(); void unpause(); void show_error_dialog(const char *formatStr, ...); void mp_request_save(uint32_t frame); void mp_clear_request_save(); //-------------- single player syn. game testing functions --------------// void sp_create_seed_file(char *filename); void sp_close_seed_file(); void sp_load_seed_file(); void sp_record_match_seed(); void sp_record_seed(); void sp_write_seed(); void sp_compare_seed(); void sp_seed_pos_reset(); void sp_seed_pos_set(int pos); //---- for setting game directories ----// int set_config_dir(); int chdir_to_game_dir(); int set_game_dir(); int set_one_dir(const char* checkFileName, const char* defaultDir, char* trueDir); //-------- for load/save games --------// int write_file(File* filePtr); int read_file(File* filePtr); void save_game(); void load_game(); private: int init_directx(); int init_objects(); void main_loop(int); void detect(); void process(); void disp_button(); void detect_button(); void disp_view(); void update_view(); void detect_view(); void disp_map(); void disp_zoom(); int should_next_frame(); int is_mp_sync( int *unreadyPlayerFlag ); void auto_save(); void disp_frames_per_second(); void process_key(unsigned scanCode, unsigned skeyState); void detect_letter_key(unsigned scanCode, unsigned skeyState); void detect_function_key(unsigned scanCode, unsigned skeyState); void detect_cheat_key(unsigned scanCode, unsigned skeyState); int detect_debug_cheat_key(unsigned scanCode, unsigned skeyState); int detect_set_speed(unsigned scanCode, unsigned skeyState); int detect_key_str(int keyStrId, const KeyEventType* keyStr); }; extern Sys sys; #ifdef DEBUG extern char debug2_enable_flag; extern File seedCompareFile; //### begin alex 11/8 ###// extern char debug_seed_status_flag; //#### end alex 11/8 ####// extern int debug_sim_game_type; #endif //-------------------------------------// #endif