00001 00025 #include "lbaengine.h" 00026 #include "main.h" 00027 #include "sdlengine.h" 00028 #include "images.h" 00029 #include "grid.h" 00030 #include "scene.h" 00031 #include "menu.h" 00032 #include "interface.h" 00033 #include "dialogues.h" 00034 #include "redraw.h" 00035 00036 #include "hqrdepack.h" 00037 #include "resources.h" 00038 00039 #ifdef GAMEMOD 00040 #include "debug.h" 00041 #endif 00042 00043 00044 int isTimeFreezed=0; 00045 int saveFreezedTime=0; 00046 00047 00048 void freeze_time() 00049 { 00050 if(!isTimeFreezed) 00051 saveFreezedTime = lbaTime; 00052 isTimeFreezed++; 00053 } 00054 00055 void unfreeze_time() 00056 { 00057 --isTimeFreezed; 00058 if(isTimeFreezed==0) 00059 lbaTime = saveFreezedTime; 00060 } 00061 00062 int show_giveup_menu() 00063 { 00064 if(skipIntro == 1)// && twinsen->life > 0 && twinsen->costumeIndex != -1 && !twinsen->staticFlagsBF.bNoDisplay) 00065 { 00066 freeze_time(); 00067 if(giveup_menu()) 00068 { 00069 unfreeze_time(); 00070 redraw_engine_actions(1); 00071 freeze_time(); 00072 //TODO: save game 00073 quitGame=0; 00074 cfgfile.Quit = 0; 00075 unfreeze_time(); 00076 return 1; 00077 } 00078 else 00079 { 00080 unfreeze_time(); 00081 redraw_engine_actions(1); 00082 } 00083 } 00084 return 0; 00085 } 00086 00087 void show_game_options(short int pKey) 00088 { 00089 // Press F6 00090 if(pKey == 0x40) 00091 { 00092 int tmpLangCD = cfgfile.LanguageCDId; 00093 freeze_time(); 00094 //TODO: Stop Samples 00095 OptionsMenuSettings[5] = 15; 00096 cfgfile.LanguageCDId = 0; 00097 init_dialogue_bank(0); 00098 options_menu(); 00099 cfgfile.LanguageCDId = tmpLangCD; 00100 init_dialogue_bank(currentTextBank+3); 00101 //TODO: play music 00102 unfreeze_time(); 00103 redraw_engine_actions(1); 00104 } 00105 } 00106 00109 int run_game_engine() // mainLoopInteration 00110 { 00111 short int pKey; // current pressed key 00112 read_keys(); 00113 00114 pKey = skipIntro; 00115 00116 if(show_giveup_menu()) 00117 return 0; // give up 00118 00119 show_game_options(pKey); 00120 00121 // TODO: make recenter screen 00122 00123 #ifdef GAMEMOD 00124 process_debug(pKey); 00125 #endif 00126 00127 if(needChangeScene>-1) 00128 change_scene(); 00129 00130 redraw_engine_actions(reqBgRedraw); 00131 00132 needChangeScene = -1; 00133 reqBgRedraw=0; 00134 00135 return 0; 00136 } 00137 00140 int game_engine_loop() // mainLoop 00141 { 00142 quitGame = 1; 00143 00144 //requestBackgroundRedraw = 1; 00145 //lockPalette = 1; 00146 //setActorAngle(0, -256, 5, &mainLoopVar1); 00147 00148 while(quitGame) 00149 { 00150 if(run_game_engine()) 00151 return 1; 00152 fps_cycles(cfgfile.Fps); 00153 lbaTime++; 00154 } 00155 return 0; 00156 } 00157 00158 int project_position_on_screen(int cX, int cY, int cZ) 00159 { 00160 if(!isUsingOrhoProjection) 00161 { 00162 cX -= basePosX; 00163 cY -= basePosY; 00164 cZ -= basePosZ; 00165 00166 if(cZ >= 0) 00167 { 00168 int posZ = cZ + cameraPosX; 00169 00170 if(posZ < 0) 00171 posZ = 0x7FFF; 00172 00173 projPosX = (cX * cameraPosY)/posZ + setSomethingVar1; 00174 projPosY = (cY * cameraPosZ)/posZ + setSomethingVar2; 00175 projPosZ = posZ; 00176 return -1; 00177 } 00178 else 00179 { 00180 projPosX = 0; 00181 projPosY = 0; 00182 projPosZ = 0; 00183 return 0; 00184 } 00185 } 00186 else 00187 { 00188 projPosX = ((cX - cZ) * 24) / 512 + setSomethingVar1; 00189 projPosY = (((cX + cZ) * 12) - cY * 30) / 512 + setSomethingVar2; 00190 projPosZ = cY - cX - cZ; 00191 } 00192 00193 return 1; 00194 } 00195 00196 void set_camera_position( int X, int Y, int cX, int cY, int cZ ) 00197 { 00198 setSomethingVar1 = X; 00199 setSomethingVar2 = Y; 00200 00201 cameraPosX = cX; 00202 cameraPosY = cY; 00203 cameraPosZ = cZ; 00204 00205 isUsingOrhoProjection = 0; 00206 }
1.5.5