/* * 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 #ifndef __ALL_H #include #endif #ifndef __WINDOWS_ #include #endif //------ 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 #ifdef AMPLUS #define MAX_SCENARIO_PATH 2 #else #define MAX_SCENARIO_PATH 1 #endif //------------ 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 ####// //-------- Define class Sys -----------// class Sys { public: HINSTANCE app_hinstance; // handle of the application running HWND main_hwnd; char game_version; // VERSION_??? char active_flag; // we are the active app. char paused_flag; // whether the game is paused char sys_flag; char init_flag; char signal_exit_flag; char need_redraw_flag; // set to 1 if task switched back. After redraw, clear it char cheat_enabled_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; DWORD next_frame_time; // next frame's time for maintaining a specific game speed //----- multiplayer vars ----// DWORD 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 DWORD 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 --------// DWORD last_second_time; int frames_in_this_second; int frames_per_second; // the actual frames per second //------- file paths -------// char cdrom_drive; char dir_image[MAX_PATH+1]; char dir_encyc[MAX_PATH+1]; #ifdef AMPLUS char dir_encyc2[MAX_PATH+1]; #endif char dir_music[MAX_PATH+1]; char dir_movie[MAX_PATH+1]; char dir_tutorial[MAX_PATH+1]; union { char dir_scenario[MAX_PATH+1]; char dir_scenario_path[MAX_SCENARIO_PATH][MAX_PATH+1]; }; //------- other vars --------// char* common_data_buf; char debug_session; char testing_session; public: Sys(); ~Sys(); int init(HINSTANCE hInstance); 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 capture_minimap(); void disp_frame(); void blt_virtual_buf(); long main_win_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); void handle_window_messages(); void pause(); void unpause(); void mp_request_save(DWORD frame); void mp_clear_request_save(); //-------------- single player syn. game testing functions --------------// void sp_open_seed_file(char *filename); 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 ----// void set_game_dir(); int set_one_dir( char* checkFileName, char* defaultDir, char* trueDir ); void get_cdrom_drive(); //-------- for load/save games --------// int write_file(File* filePtr); int read_file(File* filePtr); void save_game(); void load_game(); private: int init_win(); 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 blt_next_frame(); void disp_frames_per_second(); BOOL restore(); 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); void detect_debug_cheat_key(unsigned scanCode, unsigned skeyState); int detect_set_speed(unsigned scanCode, unsigned skeyState); int detect_key_str(int keyStrId, char* 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