1 (* Copyright (C) Doom 2D: Forever Developers
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, version 3 of the License ONLY.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 *)
15 {$INCLUDE ../shared/a_modes.inc}
18 interface
20 uses
26 function g_SaveGameTo (const filename: AnsiString; const aname: AnsiString; deleteOnError: Boolean=true): Boolean;
36 implementation
38 uses
45 const
54 begin
56 // Ñèãíàòóðà îáúåêòà
59 // Ïîëîæåíèå ïî-ãîðèçîíòàëè
61 // Ïîëîæåíèå ïî-âåðòèêàëè
63 // Îãðàíè÷èâàþùèé ïðÿìîóãîëüíèê
68 // Ñêîðîñòü
71 // Óñêîðåíèå
78 begin
80 // Ñèãíàòóðà îáúåêòà:
83 // Ïîëîæåíèå ïî-ãîðèçîíòàëè
85 // Ïîëîæåíèå ïî-âåðòèêàëè
87 // Îãðàíè÷èâàþùèé ïðÿìîóãîëüíèê
92 // Ñêîðîñòü
95 // Óñêîðåíèå
102 begin
108 var
113 begin
117 try
118 // Îòêðûâàåì ôàéë ñîõðàíåíèé
121 try
123 begin
125 //raise XStreamError.Create('invalid save game signature');
126 exit;
130 begin
134 begin
136 //raise XStreamError.Create('invalid save game version');
137 exit;
139 // Èìÿ ñýéâà
142 end
143 else
144 begin
145 // 7+
146 // Èìÿ ñýéâà
150 //if (utils.readByte(st) <> SAVE_VERSION) then raise XStreamError.Create('invalid save game version');
151 finally
154 except
155 begin
156 //e_WriteLog('GetSaveName Error: '+e.message, MSG_WARNING);
157 //{$IF DEFINED(D2F_DEBUG)}e_WriteStackTrace(e.message);{$ENDIF}
164 function g_SaveGameTo (const filename: AnsiString; const aname: AnsiString; deleteOnError: Boolean=true): Boolean;
165 var
169 begin
171 try
173 try
176 // Èìÿ ñýéâà
178 // Ïîëíûé ïóòü ê âàäó è êàðòà
179 //if (Length(gCurrentMapFileName) <> 0) then e_LogWritefln('SAVE: current map is ''%s''...', [gCurrentMapFileName]);
181 // Ïóòü ê êàðòå
183 // Èìÿ êàðòû
185 // Êîëè÷åñòâî èãðîêîâ
187 // Èãðîâîå âðåìÿ
189 // Òèï èãðû
191 // Ðåæèì èãðû
193 // Ëèìèò âðåìåíè
195 // Ëèìèò î÷êîâ
197 // Ëèìèò æèçíåé
199 // Èãðîâûå îïöèè
201 // Äëÿ êîîïà
209 ///// Ñîõðàíÿåì ñîñòîÿíèå îáëàñòåé ïðîñìîòðà /////
218 ///// /////
220 ///// Ñîñòîÿíèå êàðòû /////
222 ///// /////
224 ///// Ñîñòîÿíèå ïðåäìåòîâ /////
226 ///// /////
228 ///// Ñîñòîÿíèå òðèããåðîâ /////
230 ///// /////
232 ///// Ñîñòîÿíèå îðóæèÿ /////
234 ///// /////
236 ///// Ñîñòîÿíèå ìîíñòðîâ /////
238 ///// /////
240 ///// Ñîñòîÿíèå òðóïîâ /////
242 ///// /////
244 ///// Ñîõðàíÿåì èãðîêîâ (â òîì ÷èñëå áîòîâ) /////
246 begin
249 begin
251 begin
252 // Ñîñòîÿíèå èãðîêà
258 // Âñå ëè èãðîêè íà ìåñòå
261 ///// /////
263 ///// Ìàðêåð îêîí÷àíèÿ /////
266 ///// /////
268 finally
272 except
274 begin
288 var
295 Game_CoopMonstersKilled,
296 Game_CoopSecretsFound,
297 Game_CoopTotalMonstersKilled,
298 Game_CoopTotalSecretsFound,
299 Game_CoopTotalMonsters,
300 Game_CoopTotalSecrets,
305 {$IF DEFINED(D2F_DEBUG)}
307 {$ENDIF}
308 begin
311 try
313 try
314 if not utils.checkSign(st, 'DFSV') then raise XStreamError.Create('invalid save game signature');
315 if (utils.readByte(st) <> SAVE_VERSION) then raise XStreamError.Create('invalid save game version');
320 //g_Game_Free(false); // don't free textures for the same map
325 ///// Çàãðóæàåì ñîñòîÿíèå èãðû /////
326 // Èìÿ ñýéâà
329 // Ïîëíûé ïóòü ê âàäó è êàðòà
332 if (Length(gCurrentMapFileName) <> 0) then e_LogWritefln('LOAD: previous map was ''%s''...', [gCurrentMapFileName]);
334 // À âîò òóò, íàêîíåö, ÷èñòèì ðåñóðñû
338 // Ïóòü ê êàðòå
340 // Èìÿ êàðòû
342 // Êîëè÷åñòâî èãðîêîâ
344 // Èãðîâîå âðåìÿ
346 // Òèï èãðû
348 // Ðåæèì èãðû
350 // Ëèìèò âðåìåíè
352 // Ëèìèò î÷êîâ
354 // Ëèìèò æèçíåé
356 // Èãðîâûå îïöèè
358 // Äëÿ êîîïà
365 ///// /////
367 ///// Çàãðóæàåì ñîñòîÿíèå îáëàñòåé ïðîñìîòðà /////
368 if not utils.checkSign(st, 'PLVW') then raise XStreamError.Create('invalid viewport signature');
372 ///// /////
374 // Çàãðóæàåì êàðòó:
379 begin
380 // Íàñòðîéêè èãðû
387 end
388 else
389 begin
390 // Íàñòðîéêè èãðû
401 // Çàãðóçêà è çàïóñê êàðòû
402 //FIXME: save/load `asMegawad`
404 begin
406 exit;
409 // Íàñòðîéêè èãðîêîâ è áîòîâ
412 // Óñòàíàâëèâàåì âðåìÿ
414 // Âîçâðàùàåì ñòàòû
422 ///// Çàãðóæàåì ñîñòîÿíèå êàðòû /////
424 ///// /////
426 ///// Çàãðóæàåì ñîñòîÿíèå ïðåäìåòîâ /////
428 ///// /////
430 ///// Çàãðóæàåì ñîñòîÿíèå òðèããåðîâ /////
432 ///// /////
434 ///// Çàãðóæàåì ñîñòîÿíèå îðóæèÿ /////
436 ///// /////
438 ///// Çàãðóæàåì ñîñòîÿíèå ìîíñòðîâ /////
440 ///// /////
442 ///// Çàãðóæàåì ñîñòîÿíèå òðóïîâ /////
444 ///// /////
446 ///// Çàãðóæàåì èãðîêîâ (â òîì ÷èñëå áîòîâ) /////
448 begin
449 // Çàãðóæàåì
453 // Ïðèâÿçûâàåì îñíîâíûõ èãðîêîâ ê îáëàñòÿì ïðîñìîòðà
458 begin
467 begin
474 ///// /////
476 ///// Ìàðêåð îêîí÷àíèÿ /////
479 ///// /////
481 // Èùåì òðèããåðû ñ óñëîâèåì ñìåðòè ìîíñòðîâ
484 // done
487 {$IF DEFINED(D2F_DEBUG)}
488 except
489 begin
494 {$ENDIF}
495 finally
498 except
500 begin
508 begin
512 {$IF DEFINED(D2F_DEBUG)}e_LogWritefln('stream error position: 0x%08x', [errpos], TMsgType.Warning);{$ENDIF}
526 begin
532 begin