index 868c1b0f7f5218a71e7871f74a9e33851e0a50d4..6c9e86326551d7b0d24ba7e8151aed028e565c01 100644 (file)
--- a/src/shared/MAPREADER.pas
+++ b/src/shared/MAPREADER.pas
+(* Copyright (C) DooM 2D:Forever Developers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *)
+{$MODE DELPHI}
unit MAPREADER;
{
function LoadMap(Data: Pointer): Boolean;
procedure FreeMap();
function HandledVersion(): Byte; virtual;
-
+
property GetError: Byte read FError;
property GetVersion: Byte read FVersion;
end;
implementation
uses
- SysUtils, BinEditor;
+ SysUtils, BinEditor, MAPDEF;
var
NNF_PureName: String; // Èìÿ òåêñòóðû áåç öèôð â êîíöå
if TempDataBlocks = nil then Exit;
- size := SizeOf(TAreaRec_1);
+ size := SizeOf_TAreaRec_1;
for a := 0 to High(TempDataBlocks) do
for b := 0 to (TempDataBlocks[a].Block.BlockSize div size)-1 do
begin
SetLength(Result, Length(Result)+1);
- CopyMemory(@Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size), size);
+ //CopyMemory(@Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size), size);
+ mb_Read_TAreaRec_1(Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size)^, size);
end;
TempDataBlocks := nil;
if TempDataBlocks = nil then Exit;
- size := SizeOf(TItemRec_1);
+ size := SizeOf_TItemRec_1;
for a := 0 to High(TempDataBlocks) do
for b := 0 to (TempDataBlocks[a].Block.BlockSize div size)-1 do
begin
SetLength(Result, Length(Result)+1);
- CopyMemory(@Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size), size);
+ //CopyMemory(@Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size), size);
+ mb_Read_TItemRec_1(Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size)^, size);
end;
TempDataBlocks := nil;
if TempDataBlocks = nil then Exit;
- CopyMemory(@Result, TempDataBlocks[0].Data, SizeOf(TMapHeaderRec_1));
+ //CopyMemory(@Result, TempDataBlocks[0].Data, SizeOf(TMapHeaderRec_1));
+ mb_Read_TMapHeaderRec_1(Result, TempDataBlocks[0].Data^, SizeOf_TMapHeaderRec_1);
TempDataBlocks := nil;
end;
if TempDataBlocks = nil then Exit;
- size := SizeOf(TMonsterRec_1);
+ size := SizeOf_TMonsterRec_1;
for a := 0 to High(TempDataBlocks) do
for b := 0 to (TempDataBlocks[a].Block.BlockSize div size)-1 do
begin
SetLength(Result, Length(Result)+1);
- CopyMemory(@Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size), size);
+ //CopyMemory(@Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size), size);
+ mb_Read_TMonsterRec_1(Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size)^, size);
end;
TempDataBlocks := nil;
if TempDataBlocks = nil then Exit;
- size := SizeOf(TPanelRec_1);
+ size := SizeOf_TPanelRec_1;
for a := 0 to High(TempDataBlocks) do
for b := 0 to (TempDataBlocks[a].Block.BlockSize div size)-1 do
begin
SetLength(Result, Length(Result)+1);
- CopyMemory(@Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size), size);
+ //CopyMemory(@Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size), size);
+ mb_Read_TPanelRec_1(Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size)^, size);
end;
TempDataBlocks := nil;
if TempDataBlocks = nil then Exit;
- size := SizeOf(TTextureRec_1);
+ size := SizeOf_TTextureRec_1;
for a := 0 to High(TempDataBlocks) do
for b := 0 to (TempDataBlocks[a].Block.BlockSize div size)-1 do
begin
SetLength(Result, Length(Result)+1);
- CopyMemory(@Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size), size);
+ //CopyMemory(@Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size), size);
+ mb_Read_TTextureRec_1(Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size)^, size);
end;
TempDataBlocks := nil;
TempDataBlocks: TDataBlocksArray;
a: Integer;
b, Size: LongWord;
+ trdata: TTriggerData;
begin
Result := nil;
if TempDataBlocks = nil then Exit;
- size := SizeOf(TTriggerRec_1);
+ size := SizeOf_TTriggerRec_1;
for a := 0 to High(TempDataBlocks) do
for b := 0 to (TempDataBlocks[a].Block.BlockSize div size)-1 do
begin
SetLength(Result, Length(Result)+1);
- CopyMemory(@Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size), size);
+ //CopyMemory(@Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size), size);
+ mb_Read_TTriggerRec_1(Result[High(Result)], Pointer(LongWord(TempDataBlocks[a].Data)+b*size)^, size);
+ if (Result[High(Result)].TriggerType <> 0) then
+ begin
+ // preprocess trigger data
+ ZeroMemory(@trdata, SizeOf(trdata));
+ mb_Read_TriggerData(trdata, Result[High(Result)].TriggerType, Result[High(Result)].DATA, sizeof(trdata));
+ Result[High(Result)].DATA := trdata.Default;
+ end;
end;
TempDataBlocks := nil;