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');
319 {$IF DEFINED(D2F_DEBUG)}
320 try
321 {$ENDIF}
322 //g_Game_Free(false); // don't free textures for the same map
327 ///// Çàãðóæàåì ñîñòîÿíèå èãðû /////
328 // Èìÿ ñýéâà
331 // Ïîëíûé ïóòü ê âàäó è êàðòà
334 if (Length(gCurrentMapFileName) <> 0) then e_LogWritefln('LOAD: previous map was ''%s''...', [gCurrentMapFileName]);
336 // À âîò òóò, íàêîíåö, ÷èñòèì ðåñóðñû
340 // Ïóòü ê êàðòå
342 // Èìÿ êàðòû
344 // Êîëè÷åñòâî èãðîêîâ
346 // Èãðîâîå âðåìÿ
348 // Òèï èãðû
350 // Ðåæèì èãðû
352 // Ëèìèò âðåìåíè
354 // Ëèìèò î÷êîâ
356 // Ëèìèò æèçíåé
358 // Èãðîâûå îïöèè
360 // Äëÿ êîîïà
367 ///// /////
369 ///// Çàãðóæàåì ñîñòîÿíèå îáëàñòåé ïðîñìîòðà /////
370 if not utils.checkSign(st, 'PLVW') then raise XStreamError.Create('invalid viewport signature');
374 ///// /////
376 // Çàãðóæàåì êàðòó:
381 begin
382 // Íàñòðîéêè èãðû
389 end
390 else
391 begin
392 // Íàñòðîéêè èãðû
403 // Çàãðóçêà è çàïóñê êàðòû
404 //FIXME: save/load `asMegawad`
408 // Íàñòðîéêè èãðîêîâ è áîòîâ
411 // Óñòàíàâëèâàåì âðåìÿ
413 // Âîçâðàùàåì ñòàòû
421 ///// Çàãðóæàåì ñîñòîÿíèå êàðòû /////
423 ///// /////
425 ///// Çàãðóæàåì ñîñòîÿíèå ïðåäìåòîâ /////
427 ///// /////
429 ///// Çàãðóæàåì ñîñòîÿíèå òðèããåðîâ /////
431 ///// /////
433 ///// Çàãðóæàåì ñîñòîÿíèå îðóæèÿ /////
435 ///// /////
437 ///// Çàãðóæàåì ñîñòîÿíèå ìîíñòðîâ /////
439 ///// /////
441 ///// Çàãðóæàåì ñîñòîÿíèå òðóïîâ /////
443 ///// /////
445 ///// Çàãðóæàåì èãðîêîâ (â òîì ÷èñëå áîòîâ) /////
447 begin
448 // Çàãðóæàåì
452 // Ïðèâÿçûâàåì îñíîâíûõ èãðîêîâ ê îáëàñòÿì ïðîñìîòðà
457 begin
466 begin
473 ///// /////
475 ///// Ìàðêåð îêîí÷àíèÿ /////
478 ///// /////
480 // Èùåì òðèããåðû ñ óñëîâèåì ñìåðòè ìîíñòðîâ
483 // done
486 {$IF DEFINED(D2F_DEBUG)}
487 except
488 begin
493 {$ENDIF}
494 finally
497 except
499 begin
507 begin
511 {$IF DEFINED(D2F_DEBUG)}e_LogWritefln('stream error position: 0x%08x', [errpos], TMsgType.Warning);{$ENDIF}
525 begin
531 begin