10 procedure KeyPress(K
: Word);
11 procedure CharPress(C
: Char);
23 SDL
, GL
, GLExt
, WADEDITOR
, e_log
, g_window
,
24 e_graphics
, e_input
, g_game
, g_console
, g_gui
,
25 e_sound
, g_options
, g_sound
, g_player
,
26 g_weapons
, SysUtils
, g_triggers
, MAPDEF
, g_map
,
27 MAPSTRUCT
, g_menu
, g_language
, g_net
;
30 charbuff
: Array [0..15] of Char;
35 MapsDir
:= GameDir
+ '/maps/';
36 DataDir
:= GameDir
+ '/data/';
37 ModelsDir
:= DataDir
+ 'models/';
38 GameWAD
:= DataDir
+ 'Game.wad';
40 e_InitLog(GameDir
+ '/' + LOG_FILENAME
, WM_NEWFILE
);
42 e_WriteLog('Read config file', MSG_NOTIFY
);
43 g_Options_Read(GameDir
+ '/' + CONFIG_FILENAME
);
45 //GetSystemDefaultLCID()
47 //e_WriteLog('Read language file', MSG_NOTIFY);
48 //g_Language_Load(DataDir + gLanguage + '.txt');
49 e_WriteLog(gLanguage
, MSG_NOTIFY
);
50 g_Language_Set(gLanguage
);
52 if SDL_Init(SDL_INIT_JOYSTICK
or SDL_INIT_TIMER
or SDL_INIT_AUDIO
) < 0 then
53 raise Exception
.Create('SDL: Init failed: ' + SDL_GetError());
55 e_WriteLog('Entering SDLMain', MSG_NOTIFY
);
61 e_WriteLog('Releasing SDL', MSG_NOTIFY
);
71 e_WriteLog('Init Input', MSG_NOTIFY
);
74 if (e_JoysticksAvailable
> 0) then
75 e_WriteLog('Input: Joysticks available.', MSG_NOTIFY
)
77 e_WriteLog('Input: No Joysticks.', MSG_NOTIFY
);
81 e_WriteLog('Init FMOD', MSG_NOTIFY
);
82 if not e_InitSoundSystem(44100, False) then e_InitSoundSystem(48000, True);
85 e_WriteLog('Init game', MSG_NOTIFY
);
88 for a
:= 0 to 15 do charbuff
[a
] := ' ';
93 e_WriteLog('Releasing engine', MSG_NOTIFY
);
96 e_WriteLog('Releasing Input', MSG_NOTIFY
);
101 e_WriteLog('Releasing FMOD', MSG_NOTIFY
);
102 e_ReleaseSoundSystem();
116 function Translit(S
: String): String;
121 for i
:= 1 to Length(Result
) do
123 'É': Result
[i
] := 'Q';
124 'Ö': Result
[i
] := 'W';
125 'Ó': Result
[i
] := 'E';
126 'Ê': Result
[i
] := 'R';
127 'Å': Result
[i
] := 'T';
128 'Í': Result
[i
] := 'Y';
129 'Ã': Result
[i
] := 'U';
130 'Ø': Result
[i
] := 'I';
131 'Ù': Result
[i
] := 'O';
132 'Ç': Result
[i
] := 'P';
133 'Õ': Result
[i
] := Chr(219);
134 'Ú': Result
[i
] := Chr(221);
135 'Ô': Result
[i
] := 'A';
136 'Û': Result
[i
] := 'S';
137 'Â': Result
[i
] := 'D';
138 'À': Result
[i
] := 'F';
139 'Ï': Result
[i
] := 'G';
140 'Ð': Result
[i
] := 'H';
141 'Î': Result
[i
] := 'J';
142 'Ë': Result
[i
] := 'K';
143 'Ä': Result
[i
] := 'L';
144 'Æ': Result
[i
] := Chr(186);
145 'Ý': Result
[i
] := Chr(222);
146 'ß': Result
[i
] := 'Z';
147 '×': Result
[i
] := 'X';
148 'Ñ': Result
[i
] := 'C';
149 'Ì': Result
[i
] := 'V';
150 'È': Result
[i
] := 'B';
151 'Ò': Result
[i
] := 'N';
152 'Ü': Result
[i
] := 'M';
153 'Á': Result
[i
] := Chr(188);
154 'Þ': Result
[i
] := Chr(190);
164 s
, s2
, ls1
, ls2
: string;
168 if (not gGameOn
) or (not gCheats
) or ((gGameSettings
.GameType
<> GT_SINGLE
) and
169 (gGameSettings
.GameMode
<> GM_COOP
) and (not gDebugMode
))
170 or g_Game_IsNet
then Exit
;
172 s
:= 'SOUND_GAME_RADIO';
175 ls1
:= CheatEng
[I_GAME_CHEAT_GODMODE
];
176 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_GODMODE
]);
177 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
178 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
180 if gPlayer1
<> nil then gPlayer1
.GodMode
:= not gPlayer1
.GodMode
;
181 if gPlayer2
<> nil then gPlayer2
.GodMode
:= not gPlayer2
.GodMode
;
185 ls1
:= CheatEng
[I_GAME_CHEAT_WEAPONS
];
186 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_WEAPONS
]);
187 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
188 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
190 if gPlayer1
<> nil then gPlayer1
.AllRulez(False);
191 if gPlayer2
<> nil then gPlayer2
.AllRulez(False);
195 ls1
:= CheatEng
[I_GAME_CHEAT_HEALTH
];
196 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_HEALTH
]);
197 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
198 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
200 if gPlayer1
<> nil then gPlayer1
.AllRulez(True);
201 if gPlayer2
<> nil then gPlayer2
.AllRulez(True);
205 ls1
:= CheatEng
[I_GAME_CHEAT_DEATH
];
206 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_DEATH
]);
207 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
208 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
210 if gPlayer1
<> nil then gPlayer1
.Damage(CHEAT_DAMAGE
, 0, 0, 0, HIT_TRAP
);
211 if gPlayer2
<> nil then gPlayer2
.Damage(CHEAT_DAMAGE
, 0, 0, 0, HIT_TRAP
);
212 s
:= 'SOUND_MONSTER_HAHA';
216 ls1
:= CheatEng
[I_GAME_CHEAT_DOORS
];
217 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_DOORS
]);
218 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
219 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
221 g_Triggers_OpenAll();
225 ls1
:= CheatEng
[I_GAME_CHEAT_NEXTMAP
];
226 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_NEXTMAP
]);
227 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
228 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
230 if gTriggers
<> nil then
231 for a
:= 0 to High(gTriggers
) do
232 if gTriggers
[a
].TriggerType
= TRIGGER_EXIT
then
234 gExitByTrigger
:= True;
235 g_Game_ExitLevel(gTriggers
[a
].Data
.MapName
);
241 ls1
:= CheatEng
[I_GAME_CHEAT_CHANGEMAP
];
242 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_CHANGEMAP
]);
243 s2
:= Copy(charbuff
, 15, 2);
244 if ((Copy(charbuff
, 15 - Length(ls1
), Length(ls1
)) = ls1
) or
245 (Copy(charbuff
, 15 - Length(ls2
), Length(ls2
)) = ls2
))
246 and (s2
[1] >= '0') and (s2
[1] <= '9')
247 and (s2
[2] >= '0') and (s2
[2] <= '9') then
249 if g_Map_Exist(MapsDir
+gGameSettings
.WAD
+':\MAP'+s2
) then
259 ls1
:= CheatEng
[I_GAME_CHEAT_FLY
];
260 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_FLY
]);
261 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
262 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
268 ls1
:= CheatEng
[I_GAME_CHEAT_JUMPS
];
269 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_JUMPS
]);
270 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
271 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
273 VEL_JUMP
:= 30-VEL_JUMP
;
277 ls1
:= CheatEng
[I_GAME_CHEAT_SPEED
];
278 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_SPEED
]);
279 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
280 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
282 MAX_RUNVEL
:= 32-MAX_RUNVEL
;
286 ls1
:= CheatEng
[I_GAME_CHEAT_SUIT
];
287 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_SUIT
]);
288 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
289 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
291 if gPlayer1
<> nil then gPlayer1
.GiveItem(ITEM_SUIT
);
292 if gPlayer2
<> nil then gPlayer2
.GiveItem(ITEM_SUIT
);
296 ls1
:= CheatEng
[I_GAME_CHEAT_AIR
];
297 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_AIR
]);
298 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
299 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
301 if gPlayer1
<> nil then gPlayer1
.GiveItem(ITEM_OXYGEN
);
302 if gPlayer2
<> nil then gPlayer2
.GiveItem(ITEM_OXYGEN
);
306 ls1
:= CheatEng
[I_GAME_CHEAT_BERSERK
];
307 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_BERSERK
]);
308 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
309 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
311 if gPlayer1
<> nil then gPlayer1
.GiveItem(ITEM_MEDKIT_BLACK
);
312 if gPlayer2
<> nil then gPlayer2
.GiveItem(ITEM_MEDKIT_BLACK
);
316 ls1
:= CheatEng
[I_GAME_CHEAT_JETPACK
];
317 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_JETPACK
]);
318 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
319 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
321 if gPlayer1
<> nil then gPlayer1
.GiveItem(ITEM_JETPACK
);
322 if gPlayer2
<> nil then gPlayer2
.GiveItem(ITEM_JETPACK
);
326 ls1
:= CheatEng
[I_GAME_CHEAT_NOCLIP
];
327 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_NOCLIP
]);
328 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
329 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
331 if gPlayer1
<> nil then gPlayer1
.SwitchNoClip
;
332 if gPlayer2
<> nil then gPlayer2
.SwitchNoClip
;
336 ls1
:= CheatEng
[I_GAME_CHEAT_NOTARGET
];
337 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_NOTARGET
]);
338 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
339 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
341 if gPlayer1
<> nil then gPlayer1
.NoTarget
:= not gPlayer1
.NoTarget
;
342 if gPlayer2
<> nil then gPlayer2
.NoTarget
:= not gPlayer2
.NoTarget
;
346 ls1
:= CheatEng
[I_GAME_CHEAT_NORELOAD
];
347 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_NORELOAD
]);
348 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
349 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
351 if gPlayer1
<> nil then gPlayer1
.NoReload
:= not gPlayer1
.NoReload
;
352 if gPlayer2
<> nil then gPlayer2
.NoReload
:= not gPlayer2
.NoReload
;
355 ls1
:= CheatEng
[I_GAME_CHEAT_AIMLINE
];
356 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_AIMLINE
]);
357 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
358 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
360 gAimLine
:= not gAimLine
;
363 ls1
:= CheatEng
[I_GAME_CHEAT_AUTOMAP
];
364 ls2
:= Translit(CheatRus
[I_GAME_CHEAT_AUTOMAP
]);
365 if (Copy(charbuff
, 17 - Length(ls1
), Length(ls1
)) = ls1
) or
366 (Copy(charbuff
, 17 - Length(ls2
), Length(ls2
)) = ls2
) then
368 gShowMap
:= not gShowMap
;
377 procedure KeyPress(K
: Word);
383 IK_PAUSE
: // <Pause/Break>:
385 if (g_ActiveWindow
= nil) then
386 g_Game_Pause(not gPause
);
389 IK_BACKQUOTE
: // <`/~/¨/¸>:
398 g_Console_Chat_Switch();
405 if g_ActiveWindow
<> nil then
407 Msg
.Msg
:= WM_KEYDOWN
;
408 Msg
.WParam
:= IK_ESCAPE
;
409 g_ActiveWindow
.OnMessage(Msg
);
412 if gState
<> STATE_FOLD
then
414 or (gState
= STATE_INTERSINGLE
)
415 or (gState
= STATE_INTERCUSTOM
)
417 g_Game_InGameMenu(True)
419 if (gExit
= 0) and (gState
<> STATE_SLIST
) then
421 if gState
<> STATE_MENU
then
422 if NetMode
<> NET_NONE
then
424 g_Game_StopAllSounds(True);
426 gState
:= STATE_MENU
;
430 g_GUI_ShowWindow('MainMenu');
431 g_Sound_PlayEx('MENU_OPEN');
435 IK_F2
, IK_F3
, IK_F4
, IK_F5
, IK_F6
, IK_F7
, IK_F10
:
436 begin // <F2> .. <F6> � <F12>
437 if gGameOn
and (not gConsoleShow
) and (not gChatShow
) then
439 while g_ActiveWindow
<> nil do
440 g_GUI_HideWindow(False);
442 if (not g_Game_IsNet
) then
447 g_Menu_Show_SaveMenu();
449 g_Menu_Show_LoadMenu();
451 g_Menu_Show_GameSetGame();
453 g_Menu_Show_OptionsVideo();
455 g_Menu_Show_OptionsSound();
457 g_Menu_Show_EndGameMenu();
459 g_Menu_Show_QuitGameMenu();
466 gJustChatted
:= False;
467 if gConsoleShow
or gChatShow
then
470 if g_ActiveWindow
<> nil then
472 Msg
.Msg
:= WM_KEYDOWN
;
474 g_ActiveWindow
.OnMessage(Msg
);
478 if (gState
= STATE_MENU
) then
480 g_GUI_ShowWindow('MainMenu');
481 g_Sound_PlayEx('MENU_OPEN');
486 charbuff
[a
] := charbuff
[a
+1];
487 charbuff
[15] := UpCase(Chr(K
));
495 procedure CharPress(C
: Char);
499 if (not gChatShow
) and ((C
= '`') or (C
= '~') or (C
= '¸') or (C
= '¨')) then
502 if gConsoleShow
or gChatShow
then
505 if g_ActiveWindow
<> nil then
508 Msg
.WParam
:= Ord(C
);
509 g_ActiveWindow
.OnMessage(Msg
);