4391bf51b1bda3f9b76d5b02beb706ddf46c4a05
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, either version 3 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *)
16 {$INCLUDE ../shared/a_modes.inc}
19 interface
21 uses
28 function g_SaveGameTo (const filename: AnsiString; const aname: AnsiString; deleteOnError: Boolean=true): Boolean;
38 implementation
40 uses
47 const
56 begin
58 // Ñèãíàòóðà îáúåêòà
61 // Ïîëîæåíèå ïî-ãîðèçîíòàëè
63 // Ïîëîæåíèå ïî-âåðòèêàëè
65 // Îãðàíè÷èâàþùèé ïðÿìîóãîëüíèê
70 // Ñêîðîñòü
73 // Óñêîðåíèå
80 begin
82 // Ñèãíàòóðà îáúåêòà:
85 // Ïîëîæåíèå ïî-ãîðèçîíòàëè
87 // Ïîëîæåíèå ïî-âåðòèêàëè
89 // Îãðàíè÷èâàþùèé ïðÿìîóãîëüíèê
94 // Ñêîðîñòü
97 // Óñêîðåíèå
104 begin
112 var
116 begin
120 try
121 // Îòêðûâàåì ôàéë ñîõðàíåíèé
123 try
124 if not utils.checkSign(st, 'DFSV') then raise XStreamError.Create('invalid save game signature');
127 begin
131 // Èìÿ ñýéâà
134 end
135 else
136 begin
137 // 7+
138 // Èìÿ ñýéâà
142 //if (utils.readByte(st) <> SAVE_VERSION) then raise XStreamError.Create('invalid save game version');
143 finally
146 except
148 begin
157 function g_SaveGameTo (const filename: AnsiString; const aname: AnsiString; deleteOnError: Boolean=true): Boolean;
158 var
162 begin
164 try
166 try
169 // Èìÿ ñýéâà
171 // Ïîëíûé ïóòü ê âàäó è êàðòà
172 //if (Length(gCurrentMapFileName) <> 0) then e_LogWritefln('SAVE: current map is ''%s''...', [gCurrentMapFileName]);
174 // Ïóòü ê êàðòå
176 // Èìÿ êàðòû
178 // Êîëè÷åñòâî èãðîêîâ
180 // Èãðîâîå âðåìÿ
182 // Òèï èãðû
184 // Ðåæèì èãðû
186 // Ëèìèò âðåìåíè
188 // Ëèìèò î÷êîâ
190 // Ëèìèò æèçíåé
192 // Èãðîâûå îïöèè
194 // Äëÿ êîîïà
202 ///// Ñîõðàíÿåì ñîñòîÿíèå îáëàñòåé ïðîñìîòðà /////
211 ///// /////
213 ///// Ñîñòîÿíèå êàðòû /////
215 ///// /////
217 ///// Ñîñòîÿíèå ïðåäìåòîâ /////
219 ///// /////
221 ///// Ñîñòîÿíèå òðèããåðîâ /////
223 ///// /////
225 ///// Ñîñòîÿíèå îðóæèÿ /////
227 ///// /////
229 ///// Ñîñòîÿíèå ìîíñòðîâ /////
231 ///// /////
233 ///// Ñîñòîÿíèå òðóïîâ /////
235 ///// /////
237 ///// Ñîõðàíÿåì èãðîêîâ (â òîì ÷èñëå áîòîâ) /////
239 begin
242 begin
244 begin
245 // Ñîñòîÿíèå èãðîêà
251 // Âñå ëè èãðîêè íà ìåñòå
254 ///// /////
256 ///// Ìàðêåð îêîí÷àíèÿ /////
259 ///// /////
261 finally
265 except
267 begin
280 var
287 Game_CoopMonstersKilled,
288 Game_CoopSecretsFound,
289 Game_CoopTotalMonstersKilled,
290 Game_CoopTotalSecretsFound,
291 Game_CoopTotalMonsters,
292 Game_CoopTotalSecrets,
298 begin
301 try
303 try
304 if not utils.checkSign(st, 'DFSV') then raise XStreamError.Create('invalid save game signature');
305 if (utils.readByte(st) <> SAVE_VERSION) then raise XStreamError.Create('invalid save game version');
309 try
310 //g_Game_Free(false); // don't free textures for the same map
315 ///// Çàãðóæàåì ñîñòîÿíèå èãðû /////
316 // Èìÿ ñýéâà
319 // Ïîëíûé ïóòü ê âàäó è êàðòà
322 if (Length(gCurrentMapFileName) <> 0) then e_LogWritefln('LOAD: previous map was ''%s''...', [gCurrentMapFileName]);
324 // À âîò òóò, íàêîíåö, ÷èñòèì ðåñóðñû
328 // Ïóòü ê êàðòå
330 // Èìÿ êàðòû
332 // Êîëè÷åñòâî èãðîêîâ
334 // Èãðîâîå âðåìÿ
336 // Òèï èãðû
338 // Ðåæèì èãðû
340 // Ëèìèò âðåìåíè
342 // Ëèìèò î÷êîâ
344 // Ëèìèò æèçíåé
346 // Èãðîâûå îïöèè
348 // Äëÿ êîîïà
355 ///// /////
357 ///// Çàãðóæàåì ñîñòîÿíèå îáëàñòåé ïðîñìîòðà /////
358 if not utils.checkSign(st, 'PLVW') then raise XStreamError.Create('invalid viewport signature');
362 ///// /////
364 // Çàãðóæàåì êàðòó:
369 begin
370 // Íàñòðîéêè èãðû
377 end
378 else
379 begin
380 // Íàñòðîéêè èãðû
391 // Óñòàíîâêà ðàçìåðîâ îêîí èãðîêîâ
394 // Çàãðóçêà è çàïóñê êàðòû
396 begin
398 exit;
401 // Íàñòðîéêè èãðîêîâ è áîòîâ
404 // Óñòàíàâëèâàåì âðåìÿ
406 // Âîçâðàùàåì ñòàòû
414 ///// Çàãðóæàåì ñîñòîÿíèå êàðòû /////
416 ///// /////
418 ///// Çàãðóæàåì ñîñòîÿíèå ïðåäìåòîâ /////
420 ///// /////
422 ///// Çàãðóæàåì ñîñòîÿíèå òðèããåðîâ /////
424 ///// /////
426 ///// Çàãðóæàåì ñîñòîÿíèå îðóæèÿ /////
428 ///// /////
430 ///// Çàãðóæàåì ñîñòîÿíèå ìîíñòðîâ /////
432 ///// /////
434 ///// Çàãðóæàåì ñîñòîÿíèå òðóïîâ /////
436 ///// /////
438 ///// Çàãðóæàåì èãðîêîâ (â òîì ÷èñëå áîòîâ) /////
440 begin
441 // Çàãðóæàåì
445 // Ïðèâÿçûâàåì îñíîâíûõ èãðîêîâ ê îáëàñòÿì ïðîñìîòðà
450 begin
459 begin
466 ///// /////
468 ///// Ìàðêåð îêîí÷àíèÿ /////
471 ///// /////
473 // Èùåì òðèããåðû ñ óñëîâèåì ñìåðòè ìîíñòðîâ
476 // done
479 except
480 begin
485 finally
488 except
490 begin
493 {$IF DEFINED(D2F_DEBUG)}e_LogWritefln('stream error position: 0x%08x', [errpos], MSG_WARNING);{$ENDIF}
504 begin
512 begin