index e2091c39137ac2a277705ac1c33ff9b08316b7be..5bf8974ae6aca186ffcc7e71f4bf078c7f1443ba 100644 (file)
--- a/src/game/g_saveload.pas
+++ b/src/game/g_saveload.pas
interface
uses
interface
uses
- SysUtils, Classes, g_phys, g_textures;
+ SysUtils, Classes, g_phys;
function g_GetSaveName (n: Integer; out valid: Boolean): AnsiString;
function g_GetSaveName (n: Integer; out valid: Boolean): AnsiString;
implementation
uses
implementation
uses
+ {$IFDEF ENABLE_GIBS}
+ g_gibs,
+ {$ENDIF}
+ {$IFDEF ENABLE_CORPSES}
+ g_corpses,
+ {$ENDIF}
+ {$IFDEF ENABLE_SHELLS}
+ g_shells,
+ {$ENDIF}
MAPDEF, utils, xstreams,
g_game, g_items, g_map, g_monsters, g_triggers,
g_basic, Math, wadreader,
MAPDEF, utils, xstreams,
g_game, g_items, g_map, g_monsters, g_triggers,
g_basic, Math, wadreader,
- g_weapons, g_player, g_console,
+ g_weapons, g_player, g_console, g_window,
e_log, e_res, g_language, g_options;
const
e_log, e_res, g_language, g_options;
const
end;
end;
end;
end;
+procedure g_Player_Corpses_SaveState (st: TStream);
+ {$IFDEF ENABLE_CORPSES}
+ var i: Integer;
+ {$ENDIF}
+ var count: Integer;
+begin
+ count := 0;
+ {$IFDEF ENABLE_CORPSES}
+ for i := 0 to High(gCorpses) do
+ if (gCorpses[i] <> nil) then
+ Inc(count);
+ {$ENDIF}
+ utils.writeInt(st, LongInt(count));
+ {$IFDEF ENABLE_CORPSES}
+ if count > 0 then
+ begin
+ for i := 0 to High(gCorpses) do
+ begin
+ if gCorpses[i] <> nil then
+ begin
+ utils.writeStr(st, gCorpses[i].Model.GetName());
+ utils.writeBool(st, gCorpses[i].Mess);
+ gCorpses[i].SaveState(st);
+ end;
+ end;
+ end;
+ {$ENDIF}
+end;
+
+procedure g_Player_Corpses_LoadState (st: TStream);
+ {$IFDEF ENABLE_CORPSES}
+ var str: String; b: Boolean; i: Integer;
+ {$ENDIF}
+ var count: Integer;
+begin
+ assert(st <> nil);
+
+ {$IFDEF ENABLE_GIBS}
+ g_Gibs_RemoveAll;
+ {$ENDIF}
+ {$IFDEF ENABLE_SHELLS}
+ g_Shells_RemoveAll; // ???
+ {$ENDIF}
+ {$IFDEF ENABLE_CORPSES}
+ g_Corpses_RemoveAll;
+ {$ENDIF}
+
+ count := utils.readLongInt(st);
+
+ {$IFDEF ENABLE_CORPSES}
+ if (count < 0) or (count > Length(gCorpses)) then
+ raise XStreamError.Create('invalid number of corpses');
+ for i := 0 to count - 1 do
+ begin
+ str := utils.readStr(st);
+ b := utils.readBool(st);
+ gCorpses[i] := TCorpse.Create(0, 0, str, b);
+ gCorpses[i].LoadState(st);
+ end;
+ {$ELSE}
+ if count <> 0 then
+ raise XStreamError.Create('corpses not supported in this version');
+ {$ENDIF}
+end;
function g_SaveGameTo (const filename: AnsiString; const aname: AnsiString; deleteOnError: Boolean=true): Boolean;
var
function g_SaveGameTo (const filename: AnsiString; const aname: AnsiString; deleteOnError: Boolean=true): Boolean;
var
end;
g_Game_ExecuteEvent('ongamestart');
end;
g_Game_ExecuteEvent('ongamestart');
- // Óñòàíîâêà ðàçìåðîâ îêîí èãðîêîâ
- g_Game_SetupScreenSize();
-
// Çàãðóçêà è çàïóñê êàðòû
//FIXME: save/load `asMegawad`
if not g_Game_StartMap(false{asMegawad}, WAD_Path+':\'+Map_Name, True, curmapfile) then
// Çàãðóçêà è çàïóñê êàðòû
//FIXME: save/load `asMegawad`
if not g_Game_StartMap(false{asMegawad}, WAD_Path+':\'+Map_Name, True, curmapfile) then