diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index 03be57d86ec5c43e9f3007c5f3548dfeaa20e7ed..c83fb8e455e06decf3ce5a07a13f94a8aa06a33c 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
function g_Game_IsServer(): Boolean;
function g_Game_IsClient(): Boolean;
procedure g_Game_Init();
-procedure g_Game_Free();
+procedure g_Game_Free (freeTextures: Boolean=true);
procedure g_Game_LoadData();
procedure g_Game_FreeData();
procedure g_Game_Update();
procedure g_Game_RestartRound(NoMapRestart: Boolean = False);
procedure g_Game_ClientWAD(NewWAD: String; WHash: TMD5Digest);
procedure g_Game_SaveOptions();
-function g_Game_StartMap(Map: String; Force: Boolean = False): Boolean;
+function g_Game_StartMap(Map: String; Force: Boolean = False; const oldMapPath: AnsiString=''): Boolean;
procedure g_Game_ChangeMap(MapPath: String);
procedure g_Game_ExitLevel(Map: Char16);
function g_Game_GetFirstMap(WAD: String): String;
g_rlayer_water: Boolean = true;
g_rlayer_fore: Boolean = true;
- g_dbg_scale_05: Boolean = false;
+ g_dbg_scale: Single = 1.0;
procedure g_ResetDynlights ();
{$IF DEFINED(D2F_DEBUG)}
if gPlayer1 <> nil then gPlayer1.NoTarget := True;
- gAimLine := true;
+ gAimLine := g_dbg_aimline_on;
{$ENDIF}
end;
end;
end;
-procedure g_Game_Free();
+procedure g_Game_Free(freeTextures: Boolean=true);
begin
if NetMode = NET_CLIENT then g_Net_Disconnect();
if NetMode = NET_SERVER then g_Net_Host_Die();
- g_Map_Free();
+ g_Map_Free(freeTextures);
g_Player_Free();
g_Player_RemoveAllCorpses();
result := false; // don't stop
with mon do
begin
- if Live then
+ if alive then
begin
// Ëåâûé âåðõíèé óãîë
aX := Obj.X div ScaleSz + 1;
// Ðèñóåì èãðîêîâ:
for a := 0 to High(gPlayers) do
if gPlayers[a] <> nil then with gPlayers[a] do
- if Live then begin
+ if alive then begin
// Ëåâûé âåðõíèé óãîë:
aX := Obj.X div ScaleSz + 1;
aY := Obj.Y div ScaleSz + 1;
profileFrameDraw.sectionBegin('collect');
if gdbg_map_use_accel_render then
begin
- if g_dbg_scale_05 then
+ if (g_dbg_scale <> 1.0) then
begin
- g_Map_CollectDrawPanels(sX, sY, sWidth*2, sHeight*2);
+ g_Map_CollectDrawPanels(sX, sY, round(sWidth/g_dbg_scale)+1, round(sHeight/g_dbg_scale)+1);
end
else
begin
g_Map_DrawBack(backXOfs, backYOfs);
profileFrameDraw.sectionEnd();
- if (setTransMatrix) then
+ if setTransMatrix then
begin
- if g_dbg_scale_05 then
- begin
- glScalef(0.5, 0.5, 1.0);
- glTranslatef(transX, transY, 0);
- end
- else
- begin
- glTranslatef(transX, transY, 0);
- end;
+ glScalef(g_dbg_scale, g_dbg_scale, 1.0);
+ glTranslatef(transX, transY, 0);
end;
drawPanelType('*back', PANEL_BACK, g_rlayer_back);
begin
if (gState = STATE_MENU) then
begin
- if ((g_ActiveWindow = nil) or (g_ActiveWindow.BackTexture = '')) then
+ if (g_ActiveWindow = nil) or (g_ActiveWindow.BackTexture = '') then
begin
- if g_Texture_Get('MENU_BACKGROUND', ID) then
- e_DrawSize(ID, 0, 0, 0, False, False, gScreenWidth, gScreenHeight)
+ if g_Texture_Get('MENU_BACKGROUND', ID) then e_DrawSize(ID, 0, 0, 0, False, False, gScreenWidth, gScreenHeight)
else e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0);
end;
- if g_ActiveWindow <> nil then
+ // F3 at menu will show game loading dialog
+ if e_KeyPressed(IK_F3) then g_Menu_Show_LoadMenu(true);
+ if (g_ActiveWindow <> nil) then
begin
//e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+ end
+ else
+ begin
+ // F3 at titlepic will show game loading dialog
+ if e_KeyPressed(IK_F3) then
+ begin
+ g_Menu_Show_LoadMenu(true);
+ if (g_ActiveWindow <> nil) then e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+ end;
end;
end;
end;
end;
- ProcessLoading();
+ ProcessLoading(true);
e_PollInput();
MessageTime := 0;
gGameOn := False;
g_Game_ClearLoading();
- g_Game_StartMap(Map, True);
+ g_Game_StartMap(Map, True, gCurrentMapFileName);
end;
-function g_Game_StartMap(Map: String; Force: Boolean = False): Boolean;
+function g_Game_StartMap(Map: String; Force: Boolean = False; const oldMapPath: AnsiString=''): Boolean;
var
NewWAD, ResName: String;
I: Integer;
begin
- g_Map_Free();
+ g_Map_Free((Map <> gCurrentMapFileName) and (oldMapPath <> gCurrentMapFileName));
g_Player_RemoveAllCorpses();
if (not g_Game_IsClient) and
end
else if cmd = 'd_monster' then
begin
- if gGameOn and (gPlayer1 <> nil) and (gPlayer1.Live) and (not g_Game_IsNet) then
+ if gGameOn and (gPlayer1 <> nil) and (gPlayer1.alive) and (not g_Game_IsNet) then
if Length(P) < 2 then
begin
g_Console_Add(cmd + ' [ID | Name] [behaviour]');
g_Console_Add('ID | Name');
for b := MONSTER_DEMON to MONSTER_MAN do
- g_Console_Add(Format('%2d | %s', [b, g_Monsters_GetNameByID(b)]));
+ g_Console_Add(Format('%2d | %s', [b, g_Mons_NameByTypeId(b)]));
end else
begin
a := StrToIntDef(P[1], 0);
if (a < MONSTER_DEMON) or (a > MONSTER_MAN) then
- a := g_Monsters_GetIDByName(P[1]);
+ a := g_Mons_TypeIdByName(P[1]);
if (a < MONSTER_DEMON) or (a > MONSTER_MAN) then
g_Console_Add(Format(_lc[I_MSG_NO_MONSTER], [P[1]]))
begin
g_Console_Add('player left the map');
gExitByTrigger := True;
- g_Game_ExitLevel(gTriggers[a].Data.MapName);
+ //g_Game_ExitLevel(gTriggers[a].Data.MapName);
+ g_Game_ExitLevel(gTriggers[a].trigData.trigMapName);
break;
end;
end;
if gTriggers[a].TriggerType = TRIGGER_EXIT then
begin
gExitByTrigger := True;
- gNextMap := gTriggers[a].Data.MapName;
+ //gNextMap := gTriggers[a].Data.MapName;
+ gNextMap := gTriggers[a].trigData.trigMapName;
Break;
end;
// Èùåì ñëåäóþùóþ êàðòó â WAD ôàéëå
Exit;
end;
end
+ else if cmd = 'suicide' then
+ begin
+ if gGameOn then
+ begin
+ if g_Game_IsClient then
+ MC_SEND_CheatRequest(NET_CHEAT_SUICIDE)
+ else
+ begin
+ if gPlayer1 <> nil then
+ gPlayer1.Damage(SUICIDE_DAMAGE, gPlayer1.UID, 0, 0, HIT_SELF);
+ if gPlayer2 <> nil then
+ gPlayer2.Damage(SUICIDE_DAMAGE, gPlayer2.UID, 0, 0, HIT_SELF);
+ end;
+ end;
+ end
// Êîìàíäû Ñâîåé èãðû:
else if gGameSettings.GameType in [GT_CUSTOM, GT_SERVER, GT_CLIENT] then
begin
else
g_Bot_Add(TEAM_BLUE, 2);
end
- else if cmd = 'suicide' then
- begin
- if gGameOn then
- begin
- if g_Game_IsClient then
- MC_SEND_CheatRequest(NET_CHEAT_SUICIDE)
- else
- begin
- if gPlayer1 <> nil then
- gPlayer1.Damage(SUICIDE_DAMAGE, gPlayer1.UID, 0, 0, HIT_SELF);
- if gPlayer2 <> nil then
- gPlayer2.Damage(SUICIDE_DAMAGE, gPlayer2.UID, 0, 0, HIT_SELF);
- end;
- end;
- end
else if cmd = 'spectate' then
begin
if not gGameOn then
with gTriggers[i] do
if (TriggerType = TRIGGER_SOUND) and
(Sound <> nil) and
- (Data.Local) and
+ (trigData.trigLocal) and
Sound.IsPlaying() then
begin
if ((gPlayer1 <> nil) and g_CollidePoint(gPlayer1.GameX, gPlayer1.GameY, X, Y, Width, Height)) or
((gPlayer2 <> nil) and g_CollidePoint(gPlayer2.GameX, gPlayer2.GameY, X, Y, Width, Height)) then
begin
- Sound.SetPan(0.5 - Data.Pan/255.0);
- Sound.SetVolume(Data.Volume/255.0);
+ Sound.SetPan(0.5 - trigData.trigPan/255.0);
+ Sound.SetVolume(trigData.trigVolume/255.0);
end
else
- Sound.SetCoords(X+(Width div 2), Y+(Height div 2), Data.Volume/255.0);
+ Sound.SetCoords(X+(Width div 2), Y+(Height div 2), trigData.trigVolume/255.0);
end;
end;
g_ActiveWindow := nil;
- ProcessLoading;
+ ProcessLoading(true);
end;
procedure g_Game_StepLoading();
if (ShowCount > LOADING_SHOW_STEP) then
begin
ShowCount := 0;
- ProcessLoading;
+ ProcessLoading();
end;
end;
end;
conRegVar('dbg_holmes', @g_holmes_enabled, 'enable/disable Holmes', 'Holmes', true);
- conRegVar('dbg_scale_half', @g_dbg_scale_05, 'experimental deBUG scale*0.5 mode', 'Scale0.5', true);
+ conRegVar('dbg_scale', @g_dbg_scale, 0.01, 5.0, 'experimental deBUG scale mode', '', true);
end.