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 // Óñòàíîâêà ðàçìåðîâ îêîí èãðîêîâ
406 // Çàãðóçêà è çàïóñê êàðòû
407 //FIXME: save/load `asMegawad`
411 // Íàñòðîéêè èãðîêîâ è áîòîâ
414 // Óñòàíàâëèâàåì âðåìÿ
416 // Âîçâðàùàåì ñòàòû
424 ///// Çàãðóæàåì ñîñòîÿíèå êàðòû /////
426 ///// /////
428 ///// Çàãðóæàåì ñîñòîÿíèå ïðåäìåòîâ /////
430 ///// /////
432 ///// Çàãðóæàåì ñîñòîÿíèå òðèããåðîâ /////
434 ///// /////
436 ///// Çàãðóæàåì ñîñòîÿíèå îðóæèÿ /////
438 ///// /////
440 ///// Çàãðóæàåì ñîñòîÿíèå ìîíñòðîâ /////
442 ///// /////
444 ///// Çàãðóæàåì ñîñòîÿíèå òðóïîâ /////
446 ///// /////
448 ///// Çàãðóæàåì èãðîêîâ (â òîì ÷èñëå áîòîâ) /////
450 begin
451 // Çàãðóæàåì
455 // Ïðèâÿçûâàåì îñíîâíûõ èãðîêîâ ê îáëàñòÿì ïðîñìîòðà
460 begin
469 begin
476 ///// /////
478 ///// Ìàðêåð îêîí÷àíèÿ /////
481 ///// /////
483 // Èùåì òðèããåðû ñ óñëîâèåì ñìåðòè ìîíñòðîâ
486 // done
489 {$IF DEFINED(D2F_DEBUG)}
490 except
491 begin
496 {$ENDIF}
497 finally
500 except
502 begin
510 begin
514 {$IF DEFINED(D2F_DEBUG)}e_LogWritefln('stream error position: 0x%08x', [errpos], TMsgType.Warning);{$ENDIF}
528 begin
534 begin