X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_panel.pas;h=5034697f5c1f3ce3b9a5358c846f27118d59c439;hb=130ece9b593583c9f274da5d517c7bda10bf6cd4;hp=b522ae2beb5c49b38a31e602f7227bd238f2ae3a;hpb=88ce644db1b40111bdb380f4357fa59bdb5173be;p=d2df-sdl.git diff --git a/src/game/g_panel.pas b/src/game/g_panel.pas index b522ae2..5034697 100644 --- a/src/game/g_panel.pas +++ b/src/game/g_panel.pas @@ -1,3 +1,19 @@ +(* 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 . + *) +{$MODE DELPHI} unit g_panel; interface @@ -35,6 +51,7 @@ type SaveIt: Boolean; // Ñîõðàíÿòü ïðè SaveState? Enabled: Boolean; Door: Boolean; + Moved: Boolean; LiftType: Byte; LastAnimLoop: Byte; @@ -56,13 +73,14 @@ type procedure LoadState(var Mem: TBinMemoryReader); end; + PPanel = ^TPanel; TPanelArray = Array of TPanel; implementation uses - g_basic, g_map, MAPDEF, g_game, e_graphics, - g_console, g_language; + SysUtils, g_basic, g_map, MAPDEF, g_game, e_graphics, + g_console, g_language, e_log; const PANEL_SIGNATURE = $4C4E4150; // 'PANL' @@ -85,6 +103,7 @@ begin FCurFrame := 0; FCurFrameCount := 0; LastAnimLoop := 0; + Moved := False; // Òèï ïàíåëè: PanelType := PanelRec.PanelType; @@ -197,7 +216,15 @@ begin SaveIt := True; // Åñëè íå ñïåöòåêñòóðà, òî çàäàåì ðàçìåðû: - if not g_Map_IsSpecialTexture(Textures[PanelRec.TextureNum].TextureName) then + if PanelRec.TextureNum > High(Textures) then + begin + e_WriteLog(Format('WTF?! PanelRec.TextureNum is out of limits! (%d : %d)', [PanelRec.TextureNum, High(Textures)]), MSG_FATALERROR); + FTextureWidth := 2; + FTextureHeight := 2; + FAlpha := 0; + FBlending := ByteBool(0); + end + else if not g_Map_IsSpecialTexture(Textures[PanelRec.TextureNum].TextureName) then begin FTextureWidth := Textures[PanelRec.TextureNum].Width; FTextureHeight := Textures[PanelRec.TextureNum].Height; @@ -233,7 +260,7 @@ begin begin // Àíèìèðîâàííàÿ òåêñòóðà if FTextureIDs[FCurTexture].AnTex = nil then Exit; - + for xx := 0 to (Width div FTextureWidth)-1 do for yy := 0 to (Height div FTextureHeight)-1 do FTextureIDs[FCurTexture].AnTex.Draw( @@ -356,7 +383,7 @@ begin else if AnimLoop = 2 then FTextureIDs[FCurTexture].AnTex.Loop := False; - + FTextureIDs[FCurTexture].AnTex.Reset(); end; @@ -396,7 +423,7 @@ begin else if AnimLoop = 2 then FTextureIDs[FCurTexture].AnTex.Loop := False; - + FTextureIDs[FCurTexture].AnTex.Reset(); end; @@ -443,6 +470,9 @@ begin Mem.WriteByte(LiftType); // Íîìåð òåêóùåé òåêñòóðû: Mem.WriteInt(FCurTexture); +// Êîîðäû + Mem.WriteInt(X); + Mem.WriteInt(Y); // Àíèìèðîâàííàÿ ëè òåêóùàÿ òåêñòóðà: if (FCurTexture >= 0) and (FTextureIDs[FCurTexture].Anim) then begin @@ -478,6 +508,9 @@ begin Mem.ReadByte(LiftType); // Íîìåð òåêóùåé òåêñòóðû: Mem.ReadInt(FCurTexture); +// Êîîðäû + Mem.ReadInt(X); + Mem.ReadInt(Y); // Àíèìèðîâàííàÿ ëè òåêóùàÿ òåêñòóðà: Mem.ReadBoolean(anim); // Åñëè äà - çàãðóæàåì àíèìàöèþ: