index 0759931c7ec65ec04fdbaa256884a805db269699..95a181d0f056596e37b7b0650173777b8fe9f502 100644 (file)
--- a/src/shared/MAPWRITER.pas
+++ b/src/shared/MAPWRITER.pas
unit MAPWRITER;
-{$MODE Delphi}
+{$INCLUDE ../shared/a_modes.inc}
{
-----------------------------------
-MAPWRITER.PAS ВЕРСИЯ ОТ 24.09.06
+MAPWRITER.PAS ÂÅÐÑÈß ÎÒ 24.09.06
-Поддержка карт версии 1
+Ïîääåðæêà êàðò âåðñèè 1
-----------------------------------
}
implementation
uses
- BinEditor, SysUtils;
+ MAPDEF, BinEditor, SysUtils, Math;
{ TMapWriter }
c := 3;
Ver := HandledVersion();
- CopyMemory(Pointer(LongWord(Data)+c), @Ver, 1);
+ CopyMemory(Pointer(PtrUInt(Data)+c), @Ver, 1);
c := c+1;
if FDataBlocks <> nil then
for a := 0 to High(FDataBlocks) do
begin
- CopyMemory(Pointer(LongWord(Data)+c), @FDataBlocks[a].Block, SizeOf(TBlock));
+ CopyMemory(Pointer(PtrUInt(Data)+c), @FDataBlocks[a].Block, SizeOf(TBlock));
c := c+SizeOf(TBlock);
- CopyMemory(Pointer(LongWord(Data)+c), FDataBlocks[a].Data, FDataBlocks[a].Block.BlockSize);
+ CopyMemory(Pointer(PtrUInt(Data)+c), FDataBlocks[a].Data, FDataBlocks[a].Block.BlockSize);
c := c+FDataBlocks[a].Block.BlockSize;
end;
- ZeroMemory(Pointer(LongWord(Data)+c), SizeOf(TBlock));
+ ZeroMemory(Pointer(PtrUInt(Data)+c), SizeOf(TBlock));
end;
function TMapWriter.HandledVersion(): Byte;
Data := GetMemory(Block.BlockSize);
for a := 0 to High(Areas) do
- CopyMemory(Pointer(LongWord(Data)+a*Size), @Areas[a], size);
+ CopyMemory(Pointer(PtrUInt(Data)+a*Size), @Areas[a], size);
end;
Result := True;
Data := GetMemory(Block.BlockSize);
for a := 0 to High(Items) do
- CopyMemory(Pointer(LongWord(Data)+a*size), @Items[a], size);
+ CopyMemory(Pointer(PtrUInt(Data)+a*size), @Items[a], size);
end;
Result := True;
Data := GetMemory(Block.BlockSize);
for a := 0 to High(Monsters) do
- CopyMemory(Pointer(LongWord(Data)+a*Size), @Monsters[a], size);
+ CopyMemory(Pointer(PtrUInt(Data)+a*Size), @Monsters[a], size);
end;
Result := True;
Data := GetMemory(Block.BlockSize);
for a := 0 to High(Panels) do
- CopyMemory(Pointer(LongWord(Data)+a*size), @Panels[a], size);
+ CopyMemory(Pointer(PtrUInt(Data)+a*size), @Panels[a], size);
end;
Result := True;
Data := GetMemory(Block.BlockSize);
for a := 0 to High(Textures) do
- CopyMemory(Pointer(LongWord(Data)+a*size), @Textures[a], size);
+ CopyMemory(Pointer(PtrUInt(Data)+a*size), @Textures[a], size);
end;
Result := True;
function TMapWriter_1.AddTriggers(Triggers: TTriggersRec1Array): Boolean;
var
- a, size: LongWord;
+ a, i, size: LongWord;
+ tr: ^TTriggerData;
begin
if Triggers = nil then
begin
Exit;
end;
+ // fix broken maps
+ for i := 0 to High(Triggers) do
+ begin
+ tr := @Triggers[i].data;
+ case Triggers[i].TriggerType of
+ TRIGGER_MUSIC: tr.MusicAction := Min(Max(tr.MusicAction, 0), 1);
+ end
+ end;
+
SetLength(FDataBlocks, Length(FDataBlocks)+1);
size := SizeOf(TTriggerRec_1);
Data := GetMemory(Block.BlockSize);
for a := 0 to High(Triggers) do
- CopyMemory(Pointer(LongWord(Data)+a*size), @Triggers[a], size);
+ CopyMemory(Pointer(PtrUInt(Data)+a*size), @Triggers[a], size);
end;
Result := True;
Data := GetMemory(Block.BlockSize);
- CopyMemory(Pointer(LongWord(Data)), @MapHeader, size);
+ CopyMemory(Pointer(PtrUInt(Data)), @MapHeader, size);
end;
Result := True;