X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_game.pas;h=53280381f8b390f9e16819f49786a3fd90e0cfc0;hb=ceef3cf5ed716aab604357b2805a978cb9c6bab6;hp=fd0daf24a2f4282f5ded133f0e036e6fbd726bac;hpb=d7d166dc3cd287276202e862746208892c4cc89f;p=d2df-sdl.git diff --git a/src/game/g_game.pas b/src/game/g_game.pas index fd0daf2..5328038 100644 --- a/src/game/g_game.pas +++ b/src/game/g_game.pas @@ -22,7 +22,7 @@ uses SysUtils, Classes, MAPDEF, g_basic, g_player, e_graphics, g_res_downloader, - g_sound, g_gui, wadreader, md5, xprofiler; + g_sound, g_gui, utils, md5, xprofiler; type TGameSettings = record @@ -123,10 +123,10 @@ procedure g_FatalError(Text: String); procedure g_SimpleError(Text: String); function g_Game_IsTestMap(): Boolean; procedure g_Game_DeleteTestMap(); -procedure GameCVars(P: SArray); -procedure GameCommands(P: SArray); -procedure GameCheats(P: SArray); -procedure DebugCommands(P: SArray); +procedure GameCVars(P: SSArray); +procedure GameCommands(P: SSArray); +procedure GameCheats(P: SSArray); +procedure DebugCommands(P: SSArray); procedure g_Game_Process_Params; procedure g_Game_SetLoadingText(Text: String; Max: Integer; reWrite: Boolean); procedure g_Game_StepLoading(); @@ -346,7 +346,7 @@ uses g_triggers, g_monsters, e_sound, CONFIG, g_language, g_net, SDL, ENet, e_msg, g_netmsg, g_netmaster, GL, GLExt, - utils, sfs, g_holmes; + sfs, wadreader, g_holmes; // ////////////////////////////////////////////////////////////////////////// // @@ -540,7 +540,7 @@ var EndingGameCounter: Byte = 0; MessageText: String; MessageTime: Word; - MapList: SArray = nil; + MapList: SSArray = nil; MapIndex: Integer = -1; MegaWAD: record info: TMegaWADInfo; @@ -563,7 +563,7 @@ var end; //InterPic: String; InterText: record - lines: SArray; + lines: SSArray; img: String; cur_line: Integer; cur_char: Integer; @@ -2503,13 +2503,60 @@ begin end; procedure DrawLoadingStat(); + procedure drawRect (x, y, w, h: Integer); + begin + if (w < 1) or (h < 1) then exit; + glBegin(GL_QUADS); + glVertex2f(x+0.375, y+0.375); + glVertex2f(x+w+0.375, y+0.375); + glVertex2f(x+w+0.375, y+h+0.375); + glVertex2f(x+0.375, y+h+0.375); + glEnd(); + end; + + procedure drawPBar (cur, total: Integer); + var + rectW, rectH: Integer; + x0, y0: Integer; + wdt: Integer; + begin + if (total < 1) then exit; + if (cur < 1) then exit; // don't blink + if (cur >= total) then exit; // don't blink + //if (cur < 0) then cur := 0; + //if (cur > total) then cur := total; + + rectW := gScreenWidth-64; + rectH := 16; + + x0 := (gScreenWidth-rectW) div 2; + y0 := gScreenHeight-rectH-64; + if (y0 < 2) then y0 := 2; + + glDisable(GL_BLEND); + glDisable(GL_TEXTURE_2D); + + //glClearColor(0, 0, 0, 0); + //glClear(GL_COLOR_BUFFER_BIT); + + glColor4ub(127, 127, 127, 255); + drawRect(x0-2, y0-2, rectW+4, rectH+4); + + glColor4ub(0, 0, 0, 255); + drawRect(x0-1, y0-1, rectW+2, rectH+2); + + glColor4ub(127, 127, 127, 255); + wdt := rectW*cur div total; + if (wdt > rectW) then wdt := rectW; + drawRect(x0, y0, wdt, rectH); + end; + var ww, hh: Word; xx, yy, i: Integer; s: String; begin - if Length(LoadingStat.Msgs) = 0 then - Exit; + if (Length(LoadingStat.Msgs) = 0) then exit; e_CharFont_GetSize(gMenuFont, _lc[I_MENU_LOADING], ww, hh); yy := (gScreenHeight div 3); @@ -2517,16 +2564,19 @@ begin xx := (gScreenWidth div 3); with LoadingStat do + begin for i := 0 to NextMsg-1 do - begin - if (i = (NextMsg-1)) and (MaxValue > 0) then - s := Format('%s: %d/%d', [Msgs[i], CurValue, MaxValue]) - else - s := Msgs[i]; + begin + if (i = (NextMsg-1)) and (MaxValue > 0) then + s := Format('%s: %d/%d', [Msgs[i], CurValue, MaxValue]) + else + s := Msgs[i]; - e_CharFont_PrintEx(gMenuSmallFont, xx, yy, s, _RGB(255, 0, 0)); - yy := yy + LOADING_INTERLINE; - end; + e_CharFont_PrintEx(gMenuSmallFont, xx, yy, s, _RGB(255, 0, 0)); + yy := yy + LOADING_INTERLINE; + drawPBar(CurValue, MaxValue); + end; + end; end; procedure DrawMinimap(p: TPlayer; RenderRect: e_graphics.TRect); @@ -3101,15 +3151,21 @@ begin //glTranslatef(a, b+p.IncCam, 0); - if (p = gPlayer1) then g_Holmes_plrViewSize(sWidth, sHeight); + //if (p = gPlayer1) and (g_dbg_scale >= 1.0) then g_Holmes_plrViewSize(sWidth, sHeight); + //conwritefln('OLD: (%s,%s)-(%s,%s)', [sX, sY, sWidth, sHeight]); fixViewportForScale(); + //conwritefln(' (%s,%s)-(%s,%s)', [sX, sY, sWidth, sHeight]); p.viewPortX := sX; p.viewPortY := sY; p.viewPortW := sWidth; p.viewPortH := sHeight; - if (p = gPlayer1) then g_Holmes_plrViewPos(sX, sY); + if (p = gPlayer1) then + begin + g_Holmes_plrViewPos(sX, sY); + g_Holmes_plrViewSize(sWidth, sHeight); + end; renderMapInternal(-c, -d, true); @@ -3299,6 +3355,9 @@ begin e_DrawLine(2, 0, gScreenHeight div 2, gScreenWidth, gScreenHeight div 2, 0, 0, 0); end; + // draw inspector + if (g_holmes_enabled) then g_Holmes_Draw(); + if MessageText <> '' then begin w := 0; @@ -3489,9 +3548,6 @@ begin g_ActiveWindow.Draw(); end; - // draw inspector - if (g_holmes_enabled) then g_Holmes_Draw(); - g_Console_Draw(); if g_debug_Sounds and gGameOn then @@ -4597,7 +4653,7 @@ var WadName: string; { WAD: TWADFile; - MapList: SArray; + MapList: SSArray; time: Integer; } begin @@ -4650,7 +4706,7 @@ begin if gTempDelete then DeleteFile(WadName); end; -procedure GameCVars(P: SArray); +procedure GameCVars(P: SSArray); var a, b: Integer; stat: TPlayerStatArray; @@ -5197,7 +5253,7 @@ begin e_LogWriteLn ('^=======================^'); end; -procedure DebugCommands(P: SArray); +procedure DebugCommands(P: SSArray); var a, b: Integer; cmd: string; @@ -5333,7 +5389,7 @@ begin end; -procedure GameCheats(P: SArray); +procedure GameCheats(P: SSArray); var cmd: string; f, a: Integer; @@ -5548,7 +5604,7 @@ begin end; end; -procedure GameCommands(P: SArray); +procedure GameCommands(P: SSArray); var a, b: Integer; s, pw: String; @@ -6002,7 +6058,7 @@ begin if P[2] = '' then g_Console_Add(Format(_lc[I_MSG_NO_MAPS], [P[1]])) else - g_Console_Add(Format(_lc[I_MSG_NO_MAP], [UpperCase(P[2])])); + g_Console_Add(Format(_lc[I_MSG_NO_MAP_FALLBACK], [UpperCase(P[2]), P[1]])); end else g_Console_Add(Format(_lc[I_MSG_NO_WAD], [P[1]])); end @@ -6056,7 +6112,7 @@ begin if P[4] = '' then g_Console_Add(Format(_lc[I_MSG_NO_MAPS], [P[3]])) else - g_Console_Add(Format(_lc[I_MSG_NO_MAP], [UpperCase(P[4])])); + g_Console_Add(Format(_lc[I_MSG_NO_MAP_FALLBACK], [UpperCase(P[4]), P[3]])); end else g_Console_Add(Format(_lc[I_MSG_NO_WAD], [P[3]])); end @@ -6090,9 +6146,9 @@ begin g_Game_ChangeMap(s); end else begin - g_Console_Add(Format(_lc[I_MSG_NO_MAP], [s])); // Òàêîé êàðòû íåò, èùåì WAD ôàéë P[1] := addWadExtension(P[1]); + g_Console_Add(Format(_lc[I_MSG_NO_MAP_FALLBACK], [s, P[1]])); if FileExists(MapsDir + P[1]) then begin // Ïàðàìåòðà êàðòû íåò, ïîýòîìó ñòàâèì ïåðâóþ èç ôàéëà @@ -6179,9 +6235,9 @@ begin nm := True; end else begin - g_Console_Add(Format(_lc[I_MSG_NO_MAP], [s])); // Òàêîé êàðòû íåò, èùåì WAD ôàéë P[1] := addWadExtension(P[1]); + g_Console_Add(Format(_lc[I_MSG_NO_MAP_FALLBACK], [s, P[1]])); if FileExists(MapsDir + P[1]) then begin // Ïàðàìåòðà êàðòû íåò, ïîýòîìó ñòàâèì ïåðâóþ èç ôàéëà @@ -7132,6 +7188,11 @@ begin if (s <> '') then gMapOnce := True; + // Override map to test: + s := LowerCase(Find_Param_Value(pars, '-testmap')); + if s <> '' then + gTestMap := MapsDir + s; + // Delete test map after play: s := Find_Param_Value(pars, '--testdelete'); if (s <> '') then @@ -7143,9 +7204,9 @@ begin // Delete temporary WAD after play: s := Find_Param_Value(pars, '--tempdelete'); - if (s <> '') then + if (s <> '') and (gTestMap <> '') then begin - gMapToDelete := MapsDir + map; + gMapToDelete := gTestMap; gTempDelete := True; end;