X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fshared%2FMAPWRITER.pas;h=95a181d0f056596e37b7b0650173777b8fe9f502;hb=53ee9bbf75ec69253d01f1b073ab2a82476cea7e;hp=0759931c7ec65ec04fdbaa256884a805db269699;hpb=b72e164f0fb64e3301ae8ca217449daf6a9d301d;p=d2df-editor.git diff --git a/src/shared/MAPWRITER.pas b/src/shared/MAPWRITER.pas index 0759931..95a181d 100644 --- a/src/shared/MAPWRITER.pas +++ b/src/shared/MAPWRITER.pas @@ -1,12 +1,12 @@ unit MAPWRITER; -{$MODE Delphi} +{$INCLUDE ../shared/a_modes.inc} { ----------------------------------- -MAPWRITER.PAS ВЕРСИЯ ОТ 24.09.06 +MAPWRITER.PAS ÂÅÐÑÈß ÎÒ 24.09.06 -Поддержка карт версии 1 +Ïîääåðæêà êàðò âåðñèè 1 ----------------------------------- } @@ -50,7 +50,7 @@ type implementation uses - BinEditor, SysUtils; + MAPDEF, BinEditor, SysUtils, Math; { TMapWriter } @@ -99,19 +99,19 @@ begin 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; @@ -144,7 +144,7 @@ begin 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; @@ -173,7 +173,7 @@ begin 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; @@ -202,7 +202,7 @@ begin 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; @@ -231,7 +231,7 @@ begin 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; @@ -260,7 +260,7 @@ begin 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; @@ -268,7 +268,8 @@ end; function TMapWriter_1.AddTriggers(Triggers: TTriggersRec1Array): Boolean; var - a, size: LongWord; + a, i, size: LongWord; + tr: ^TTriggerData; begin if Triggers = nil then begin @@ -276,6 +277,15 @@ 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); @@ -289,7 +299,7 @@ begin 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; @@ -311,7 +321,7 @@ begin Data := GetMemory(Block.BlockSize); - CopyMemory(Pointer(LongWord(Data)), @MapHeader, size); + CopyMemory(Pointer(PtrUInt(Data)), @MapHeader, size); end; Result := True;