diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index 12e8798431cbbeb7810b3218322a800d75a09c8f..09618966963e2bbe2cc06dd55eedf42e0ad0127d 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
SysUtils, Classes,
MAPDEF,
g_basic, g_player, e_graphics, g_res_downloader,
- g_sound, g_gui, utils, md5, xprofiler;
+ g_sound, g_gui, utils, md5, mempool, xprofiler;
type
TGameSettings = record
gUseChatSounds: Boolean = True;
gChatSounds: Array of TChatSound;
+ g_dbg_ignore_bounds: Boolean = false;
+
// move button values:
// bits 0-1: l/r state:
// 0: neither left, nor right pressed
implementation
uses
+{$IFDEF USE_NANOGL}
+ nanoGL,
+{$ELSE}
+ GL, GLExt,
+{$ENDIF}
e_texture, g_textures, g_main, g_window, g_menu,
e_input, e_log, g_console, g_items, g_map, g_panel,
g_playermodel, g_gfx, g_options, g_weapons, Math,
g_triggers, g_monsters, e_sound, CONFIG,
g_language, g_net,
- ENet, e_msg, g_netmsg, g_netmaster, GL, GLExt,
+ ENet, e_msg, g_netmsg, g_netmaster,
sfs, wadreader, g_holmes;
EndingGameCounter: Byte = 0;
MessageText: String;
MessageTime: Word;
+ MessageLineLength: Integer = 80;
MapList: SSArray = nil;
MapIndex: Integer = -1;
MegaWAD: record
reliableUpdate: Boolean;
begin
g_ResetDynlights();
+ framePool.reset();
+
// Ïîðà âûêëþ÷àòü èãðó:
if gExit = EXIT_QUIT then
Exit;
e_WriteLog('Changing resolution', TMsgType.Notify);
g_Game_ChangeResolution(gRC_Width, gRC_Height, gRC_FullScreen, gRC_Maximized);
gResolutionChange := False;
+ g_ActiveWindow := nil;
end;
// Íóæíî ñìåíèòü ÿçûê:
end;
g_Frames_CreateWAD(nil, 'FRAMES_TELEPORT', GameWAD+':TEXTURES\TELEPORT', 64, 64, 10, False);
+ g_Frames_CreateWAD(nil, 'FRAMES_PUNCH', GameWAD+':TEXTURES\PUNCH', 64, 64, 4, False);
g_Sound_CreateWADEx('SOUND_GAME_TELEPORT', GameWAD+':SOUNDS\TELEPORT');
g_Sound_CreateWADEx('SOUND_GAME_NOTELEPORT', GameWAD+':SOUNDS\NOTELEPORT');
g_Sound_CreateWADEx('SOUND_GAME_DOOROPEN', GameWAD+':SOUNDS\DOOROPEN');
g_Texture_Delete('TEXTURE_PLAYER_TALKBUBBLE');
g_Texture_Delete('TEXTURE_PLAYER_INVULPENTA');
g_Frames_DeleteByName('FRAMES_TELEPORT');
+ g_Frames_DeleteByName('FRAMES_PUNCH');
g_Sound_Delete('SOUND_GAME_TELEPORT');
g_Sound_Delete('SOUND_GAME_NOTELEPORT');
g_Sound_Delete('SOUND_GAME_DOOROPEN');
* glBlendFunc(GL_DST_ALPHA, GL_ONE);
* draw all geometry up to and including walls (with alpha-testing, probably) -- this does lighting
*)
-
wassc := (glIsEnabled(GL_SCISSOR_TEST) <> 0);
if wassc then glGetIntegerv(GL_SCISSOR_BOX, @scxywh[0]) else glGetIntegerv(GL_VIEWPORT, @scxywh[0]);
px := p.GameX + PLAYER_RECT_CX;
py := p.GameY + PLAYER_RECT_CY+p.Obj.slopeUpLeft;
- if (g_dbg_scale = 1.0) then
+ if (g_dbg_scale = 1.0) and (not g_dbg_ignore_bounds) then
begin
if (px > (gPlayerScreenSize.X div 2)) then a := -px+(gPlayerScreenSize.X div 2) else a := 0;
if (py > (gPlayerScreenSize.Y div 2)) then b := -py+(gPlayerScreenSize.Y div 2) else b := 0;
//conwritefln('OLD: (%s,%s)-(%s,%s)', [sX, sY, sWidth, sHeight]);
fixViewportForScale();
//conwritefln(' (%s,%s)-(%s,%s)', [sX, sY, sWidth, sHeight]);
+ if (g_dbg_scale <> 1.0) and (not g_dbg_ignore_bounds) then
+ begin
+ if (sX+sWidth > gMapInfo.Width) then sX := gMapInfo.Width-sWidth;
+ if (sY+sHeight > gMapInfo.Height) then sY := gMapInfo.Height-sHeight;
+ if (sX < 0) then sX := 0;
+ if (sY < 0) then sY := 0;
+
+ if (gBackSize.X <= gPlayerScreenSize.X) or (gMapInfo.Width <= sWidth) then c := 0 else c := trunc((gBackSize.X-gPlayerScreenSize.X)*sX/(gMapInfo.Width-sWidth));
+ if (gBackSize.Y <= gPlayerScreenSize.Y) or (gMapInfo.Height <= sHeight) then d := 0 else d := trunc((gBackSize.Y-gPlayerScreenSize.Y)*sY/(gMapInfo.Height-sHeight));
+ end;
p.viewPortX := sX;
p.viewPortY := sY;
p.viewPortW := sWidth;
g_PlayerModel_FreeData();
g_Texture_DeleteAll();
g_Frames_DeleteAll();
- g_Menu_Free();
+ //g_Menu_Free(); //k8: this segfaults after resolution change; who cares?
if NetInitDone then g_Net_Free;
gPlayer2.Name := gPlayer2Settings.Name;
end;
+ g_Game_SetLoadingText(_lc[I_LOAD_HOST], 0, False);
+ if NetForwardPorts then
+ g_Game_SetLoadingText(_lc[I_LOAD_PORTS], 0, False);
+
// Ñòàðòóåì ñåðâåð
if not g_Net_Host(IPAddr, Port, NetMaxClients) then
begin
procedure g_Game_Message(Msg: string; Time: Word);
begin
- MessageText := b_Text_Format(Msg);
+ MessageLineLength := (gScreenWidth - 204) div e_CharFont_GetMaxWidth(gMenuFont);
+ MessageText := b_Text_Wrap(b_Text_Format(Msg), MessageLineLength);
MessageTime := Time;
end;
conRegVar('dbg_holmes', @g_holmes_enabled, 'enable/disable Holmes', 'Holmes', true);
- conRegVar('dbg_scale', @g_dbg_scale, 0.01, 100.0, 'experimental deBUG scale mode', '', false);
+ conRegVar('dbg_ignore_level_bounds', @g_dbg_ignore_bounds, 'ignore level bounds', '', false);
+
+ conRegVar('r_scale', @g_dbg_scale, 0.01, 100.0, 'render scale', '', false);
conRegVar('light_enabled', @gwin_k8_enable_light_experiments, 'enable/disable dynamic lighting', 'lighting');
conRegVar('light_player_halo', @g_playerLight, 'enable/disable player halo', 'player light halo');