DEADSOFTWARE

network/panel code cleanup
authorKetmar Dark <ketmar@ketmar.no-ip.org>
Wed, 6 Sep 2017 04:09:04 +0000 (07:09 +0300)
committerKetmar Dark <ketmar@ketmar.no-ip.org>
Wed, 6 Sep 2017 04:09:20 +0000 (07:09 +0300)
src/game/g_map.pas
src/game/g_netmsg.pas
src/game/g_panel.pas

index 6cfd0da3b578ccd8d20f6ca93fe46e1637dcca37..33571b8bcd182fb5b61cbae55bfabfcd3c9f4a33 100644 (file)
@@ -290,7 +290,7 @@ begin
   begin
     for pan in panByGUID do
     begin
-      if pan.gncNeedSend then MH_SEND_PanelState(pan.panelType, pan.guid);
+      if pan.gncNeedSend then MH_SEND_PanelState(pan.guid);
     end;
   end;
 end;
@@ -821,7 +821,7 @@ begin
   PanelArray := nil;
 end;
 
-function CreatePanel (PanelRec: TDynRecord; AddTextures: TAddTextureArray; CurTex: Integer; sav: Boolean): Integer;
+function CreatePanel (PanelRec: TDynRecord; AddTextures: TAddTextureArray; CurTex: Integer): Integer;
 var
   len: Integer;
   panels: ^TPanelArray;
@@ -856,7 +856,6 @@ begin
   pan.arrIdx := len;
   pan.proxyId := -1;
   pan.tag := panelTypeToTag(PanelRec.PanelType);
-  if sav then pan.SaveIt := True;
 
   PanelRec.user['panel_guid'] := pguid;
 
@@ -1642,7 +1641,7 @@ var
   FileName, mapResName, s, TexName: String;
   Data: Pointer;
   Len: Integer;
-  ok, isAnim, trigRef: Boolean;
+  ok, isAnim: Boolean;
   CurTex, ntn: Integer;
   rec, texrec: TDynRecord;
   pttit: PTRec;
@@ -1881,7 +1880,6 @@ begin
         //e_LogWritefln('PANSTART: pannum=%s', [pannum]);
         texrec := nil;
         SetLength(AddTextures, 0);
-        trigRef := False;
         CurTex := -1;
         ok := false;
 
@@ -1898,21 +1896,9 @@ begin
           ok := false;
           if (TriggersTable <> nil) and (mapTextureList <> nil) then
           begin
-            {
-            for b := 0 to High(TriggersTable) do
-            begin
-              if (TriggersTable[b].texPan = rec) or (TriggersTable[b].shotPan = rec) then
-              begin
-                trigRef := True;
-                ok := True;
-                break;
-              end;
-            end;
-            }
             if rec.userPanelTrigRef then
             begin
               // e_LogWritefln('trigref for panel %s', [pannum]);
-              trigRef := True;
               ok := True;
             end;
           end;
@@ -2040,7 +2026,7 @@ begin
         //e_LogWritefln('PANADD: pannum=%s', [pannum]);
 
         // Ñîçäàåì ïàíåëü è çàïîìèíàåì åå GUID
-        PanelID := CreatePanel(rec, AddTextures, CurTex, trigRef);
+        PanelID := CreatePanel(rec, AddTextures, CurTex);
         //e_LogWritefln('panel #%s of type %s got guid #%s', [pannum, rec.PanelType, PanelID]);
         rec.userPanelId := PanelID; // remember game panel id, we'll fix triggers later
 
@@ -2940,7 +2926,7 @@ begin
   //if (pan.proxyId >= 0) then mapGrid.proxyEnabled[pan.proxyId] := true
   //else pan.proxyId := mapGrid.insertBody(pan, pan.X, pan.Y, pan.Width, pan.Height, GridTagDoor);
 
-  //if g_Game_IsServer and g_Game_IsNet then MH_SEND_PanelState({gWalls[ID]}pan.PanelType, pguid);
+  //if g_Game_IsServer and g_Game_IsNet then MH_SEND_PanelState(pguid);
   // mark platform as interesting
   pan.setDirty();
 
@@ -2965,7 +2951,7 @@ begin
   mapGrid.proxyEnabled[pan.proxyId] := false;
   //if (pan.proxyId >= 0) then begin mapGrid.removeBody(pan.proxyId); pan.proxyId := -1; end;
 
-  //if g_Game_IsServer and g_Game_IsNet then MH_SEND_PanelState(pan.PanelType, pguid);
+  //if g_Game_IsServer and g_Game_IsNet then MH_SEND_PanelState(pguid);
   // mark platform as interesting
   pan.setDirty();
 
@@ -2995,7 +2981,7 @@ begin
   }
 
   tp.NextTexture(AnimLoop);
-  if g_Game_IsServer and g_Game_IsNet then MH_SEND_PanelTexture(PanelType, pguid, AnimLoop);
+  if g_Game_IsServer and g_Game_IsNet then MH_SEND_PanelTexture(pguid, AnimLoop);
 end;
 
 
@@ -3024,7 +3010,7 @@ begin
       3: g_Mark(X, Y, Width, Height, MARK_LIFTRIGHT);
     end;
 
-    //if g_Game_IsServer and g_Game_IsNet then MH_SEND_PanelState(PanelType, pguid);
+    //if g_Game_IsServer and g_Game_IsNet then MH_SEND_PanelState(pguid);
     // mark platform as interesting
     pan.setDirty();
   end;
@@ -3147,20 +3133,15 @@ var
   var
     PAMem: TBinMemoryWriter;
     pan: TPanel;
+    count: Integer;
   begin
     // Ñîçäàåì íîâûé ñïèñîê ñîõðàíÿåìûõ ïàíåëåé
     PAMem := TBinMemoryWriter.Create((Length(panByGUID)+1) * 40);
 
-    for pan in panByGUID do
-    begin
-      if true{pan.SaveIt} then
-      begin
-        // ID ïàíåëè
-        //PAMem.WriteInt(i);
-        // Ñîõðàíÿåì ïàíåëü
-        pan.SaveState(PAMem);
-      end;
-    end;
+    // Ñîõðàíÿåì ïàíåëè
+    count := Length(panByGUID);
+    Mem.WriteInt(count);
+    for pan in panByGUID do pan.SaveState(PAMem);
 
     // Ñîõðàíÿåì ýòîò ñïèñîê ïàíåëåé
     PAMem.SaveToMemory(Mem);
@@ -3243,25 +3224,19 @@ var
   var
     PAMem: TBinMemoryReader;
     pan: TPanel;
+    count: LongInt;
   begin
     // Çàãðóæàåì òåêóùèé ñïèñîê ïàíåëåé
     PAMem := TBinMemoryReader.Create();
     PAMem.LoadFromMemory(Mem);
 
+    // Çàãðóæàåì ïàíåëè
+    PAMem.ReadInt(count);
+    if (count <> Length(panByGUID)) then raise EBinSizeError.Create('g_Map_LoadState: LoadPanelArray: invalid number of panels');
     for pan in panByGUID do
     begin
-      if true{pan.SaveIt} then
-      begin
-        // ID ïàíåëè:
-        //PAMem.ReadInt(id);
-        {
-        if id <> i then raise EBinSizeError.Create('g_Map_LoadState: LoadPanelArray: Wrong Panel ID');
-        }
-        // Çàãðóæàåì ïàíåëü
-        pan.LoadState(PAMem);
-        //if (panels[i].arrIdx <> i) then raise Exception.Create('g_Map_LoadState: LoadPanelArray: Wrong Panel arrIdx');
-        if (pan.proxyId >= 0) then mapGrid.proxyEnabled[pan.proxyId] := pan.Enabled;
-      end;
+      pan.LoadState(PAMem);
+      if (pan.proxyId >= 0) then mapGrid.proxyEnabled[pan.proxyId] := pan.Enabled;
     end;
 
     // Ýòîò ñïèñîê ïàíåëåé çàãðóæåí
index 8b9aa1e05da1bb65c9ac50872d49f3dd4fd944bc..88764ed9a2bd913b481a581d55c0d65450d6c3f8 100644 (file)
@@ -168,8 +168,8 @@ procedure MH_SEND_PlayerSettings(PID: Word; Mdl: string = ''; ID: Integer = NET_
 procedure MH_SEND_ItemSpawn(Quiet: Boolean; IID: Word; ID: Integer = NET_EVERYONE);
 procedure MH_SEND_ItemDestroy(Quiet: Boolean; IID: Word; ID: Integer = NET_EVERYONE);
 // PANEL
-procedure MH_SEND_PanelTexture(PType: Word; PGUID: Integer; AnimLoop: Byte; ID: Integer = NET_EVERYONE);
-procedure MH_SEND_PanelState(PType: Word; PGUID: Integer; ID: Integer = NET_EVERYONE);
+procedure MH_SEND_PanelTexture(PGUID: Integer; AnimLoop: Byte; ID: Integer = NET_EVERYONE);
+procedure MH_SEND_PanelState(PGUID: Integer; ID: Integer = NET_EVERYONE);
 // MONSTER
 procedure MH_SEND_MonsterSpawn(UID: Word; ID: Integer = NET_EVERYONE);
 procedure MH_SEND_MonsterPos(UID: Word; ID: Integer = NET_EVERYONE);
@@ -643,8 +643,8 @@ procedure MH_SEND_Everything(CreatePlayers: Boolean = False; ID: Integer = NET_E
   function sendPanelState (pan: TPanel): Boolean;
   begin
     result := false; // don't stop
-    MH_SEND_PanelState(pan.PanelType, pan.guid, ID); // anyway, to sync mplats
-    if (pan.GetTextureCount > 1) then MH_SEND_PanelTexture(pan.PanelType, pan.guid, pan.LastAnimLoop, ID);
+    MH_SEND_PanelState(pan.guid, ID); // anyway, to sync mplats
+    if (pan.GetTextureCount > 1) then MH_SEND_PanelTexture(pan.guid, pan.LastAnimLoop, ID);
   end;
 
 var
@@ -670,99 +670,29 @@ begin
 
   g_Items_ForEachAlive(sendItemRespawn, true); // backwards
   g_Mons_ForEach(sendMonSpawn);
-
   g_Map_ForEachPanel(sendPanelState);
 
-  (* replaced with the `g_Map_ForEachPanel()` call above
-  if gWalls <> nil then
-    for I := Low(gWalls) to High(gWalls) do
-      if gWalls[I] <> nil then
-        with gWalls[I] do
-        begin
-          {if Door then} // anyway, to sync mplats
-            MH_SEND_PanelState(PanelType, I, ID);
-
-          if GetTextureCount > 1 then
-            MH_SEND_PanelTexture(PanelType, I, LastAnimLoop, ID);
-        end;
-
-  if gLifts <> nil then
-    for I := Low(gLifts) to High(gLifts) do
-      if gLifts[I] <> nil then
-        with gLifts[I] do
-          MH_SEND_PanelState(PanelType, I, ID);
-
-  if gRenderForegrounds <> nil then
-    for I := Low(gRenderForegrounds) to High(gRenderForegrounds) do
-      if gRenderForegrounds[I] <> nil then
-        with gRenderForegrounds[I] do
-        begin
-          if (GetTextureCount > 1) then
-            MH_SEND_PanelTexture(PanelType, I, LastAnimLoop, ID);
-          {if Moved then} // anyway, to sync mplats
-            MH_SEND_PanelState(PanelType, I, ID);
-        end;
-  if gRenderBackgrounds <> nil then
-    for I := Low(gRenderBackgrounds) to High(gRenderBackgrounds) do
-      if gRenderBackgrounds[I] <> nil then
-        with gRenderBackgrounds[I] do
-        begin
-          if (GetTextureCount > 1) then
-            MH_SEND_PanelTexture(PanelType, I, LastAnimLoop, ID);
-          {if Moved then} // anyway, to sync mplats
-            MH_SEND_PanelState(PanelType, I, ID);
-        end;
-  if gWater <> nil then
-    for I := Low(gWater) to High(gWater) do
-      if gWater[I] <> nil then
-        with gWater[I] do
-        begin
-          if GetTextureCount > 1 then
-            MH_SEND_PanelTexture(PanelType, I, LastAnimLoop, ID);
-          {if Moved then} // anyway, to sync mplats
-            MH_SEND_PanelState(PanelType, I, ID);
-        end;
-  if gAcid1 <> nil then
-    for I := Low(gAcid1) to High(gAcid1) do
-      if gAcid1[I] <> nil then
-        with gAcid1[I] do
-        begin
-          if GetTextureCount > 1 then
-            MH_SEND_PanelTexture(PanelType, I, LastAnimLoop, ID);
-          {if Moved then} // anyway, to sync mplats
-            MH_SEND_PanelState(PanelType, I, ID);
-        end;
-  if gAcid2 <> nil then
-    for I := Low(gAcid2) to High(gAcid2) do
-      if gAcid2[I] <> nil then
-        with gAcid2[I] do
-        begin
-          if GetTextureCount > 1 then
-            MH_SEND_PanelTexture(PanelType, I, LastAnimLoop, ID);
-          {if Moved then} // anyway, to sync mplats
-            MH_SEND_PanelState(PanelType, I, ID);
-        end;
-  if gSteps <> nil then
-    for I := Low(gSteps) to High(gSteps) do
-      if gSteps[I] <> nil then
-        with gSteps[I] do
-        begin
-          if GetTextureCount > 1 then
-            MH_SEND_PanelTexture(PanelType, I, LastAnimLoop, ID);
-          {if Moved then} // anyway, to sync mplats
-            MH_SEND_PanelState(PanelType, I, ID);
-        end;
-  *)
-
   if gTriggers <> nil then
+  begin
     for I := Low(gTriggers) to High(gTriggers) do
+    begin
       if gTriggers[I].TriggerType = TRIGGER_SOUND then
+      begin
         MH_SEND_TriggerSound(gTriggers[I], ID);
+      end;
+    end;
+  end;
 
   if Shots <> nil then
+  begin
     for I := Low(Shots) to High(Shots) do
+    begin
       if Shots[i].ShotType in [6, 7, 8] then
+      begin
         MH_SEND_CreateShot(i, ID);
+      end;
+    end;
+  end;
 
   MH_SEND_TriggerMusic(ID);
 
@@ -771,16 +701,16 @@ begin
 
   if gGameSettings.GameMode = GM_CTF then
   begin
-    if gFlags[FLAG_RED].State <> FLAG_STATE_CAPTURED then
-      MH_SEND_FlagEvent(gFlags[FLAG_RED].State, FLAG_RED, 0, True, ID);
-    if gFlags[FLAG_BLUE].State <> FLAG_STATE_CAPTURED then
-      MH_SEND_FlagEvent(gFlags[FLAG_BLUE].State, FLAG_BLUE, 0, True, ID);
+    if gFlags[FLAG_RED].State <> FLAG_STATE_CAPTURED then MH_SEND_FlagEvent(gFlags[FLAG_RED].State, FLAG_RED, 0, True, ID);
+    if gFlags[FLAG_BLUE].State <> FLAG_STATE_CAPTURED then MH_SEND_FlagEvent(gFlags[FLAG_BLUE].State, FLAG_BLUE, 0, True, ID);
   end;
 
   if CreatePlayers and (ID >= 0) then NetClients[ID].State := NET_STATE_GAME;
 
   if gLMSRespawn > LMS_RESPAWN_NONE then
+  begin
     MH_SEND_GameEvent(NET_EV_LMS_WARMUP, (gLMSRespawnTime - gTime) div 1000, 'N', ID);
+  end;
 end;
 
 procedure MH_SEND_Info(ID: Byte);
@@ -1246,37 +1176,16 @@ end;
 
 // PANEL
 
-procedure MH_SEND_PanelTexture(PType: Word; PGUID: Integer; AnimLoop: Byte; ID: Integer = NET_EVERYONE);
+procedure MH_SEND_PanelTexture(PGUID: Integer; AnimLoop: Byte; ID: Integer = NET_EVERYONE);
 var
   TP: TPanel;
 begin
   TP := g_Map_PanelByGUID(PGUID);
   if (TP = nil) then exit;
-  {
-  case PType of
-    PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR:
-      TP := gWalls[PID];
-    PANEL_FORE:
-      TP := gRenderForegrounds[PID];
-    PANEL_BACK:
-      TP := gRenderBackgrounds[PID];
-    PANEL_WATER:
-      TP := gWater[PID];
-    PANEL_ACID1:
-      TP := gAcid1[PID];
-    PANEL_ACID2:
-      TP := gAcid2[PID];
-    PANEL_STEP:
-      TP := gSteps[PID];
-    else
-      Exit;
-  end;
-  }
 
   with TP do
   begin
     NetOut.Write(Byte(NET_MSG_PTEX));
-    NetOut.Write(PType);
     NetOut.Write(LongWord(PGUID));
     NetOut.Write(FCurTexture);
     NetOut.Write(FCurFrame);
@@ -1287,36 +1196,15 @@ begin
   g_Net_Host_Send(ID, True, NET_CHAN_LARGEDATA);
 end;
 
-procedure MH_SEND_PanelState(PType: Word; PGUID: Integer; ID: Integer = NET_EVERYONE);
+procedure MH_SEND_PanelState(PGUID: Integer; ID: Integer = NET_EVERYONE);
 var
   TP: TPanel;
   mpflags: Byte = 0;
 begin
   TP := g_Map_PanelByGUID(PGUID);
   if (TP = nil) then exit;
-  case PType of
-    {
-    PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR: TP := gWalls[PID];
-    PANEL_LIFTUP, PANEL_LIFTDOWN, PANEL_LIFTLEFT, PANEL_LIFTRIGHT: TP := gLifts[PID];
-    }
-    PANEL_BACK:
-    begin
-      //TP := gRenderBackgrounds[PID];
-      TP.Moved := True;
-    end;
-    PANEL_FORE:
-    begin
-      //TP := gRenderForegrounds[PID];
-      TP.Moved := True;
-    end;
-    {
-    else
-      Exit;
-    }
-  end;
 
   NetOut.Write(Byte(NET_MSG_PSTATE));
-  NetOut.Write(PType);
   NetOut.Write(LongWord(PGUID));
   NetOut.Write(Byte(TP.Enabled));
   NetOut.Write(TP.LiftType);
@@ -2457,13 +2345,12 @@ end;
 procedure MC_RECV_PanelTexture(var M: TMsg);
 var
   TP: TPanel;
-  //PType: Word;
   PGUID: Integer;
   Tex, Fr: Integer;
   Loop, Cnt: Byte;
 begin
   if not gGameOn then Exit;
-  {PType :=} M.ReadWord();
+
   PGUID := Integer(M.ReadLongWord());
   Tex := M.ReadLongInt();
   Fr := M.ReadLongInt();
@@ -2471,20 +2358,6 @@ begin
   Loop := M.ReadByte();
 
   TP := g_Map_PanelByGUID(PGUID);
-
-  {
-  case PType of
-    PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR: if gWalls <> nil then TP := gWalls[ID];
-    PANEL_FORE: if gRenderForegrounds <> nil then TP := gRenderForegrounds[ID];
-    PANEL_BACK: if gRenderBackgrounds <> nil then TP := gRenderBackgrounds[ID];
-    PANEL_WATER: if gWater <> nil then TP := gWater[ID];
-    PANEL_ACID1: if gAcid1 <> nil then TP := gAcid1[ID];
-    PANEL_ACID2: if gAcid2 <> nil then TP := gAcid2[ID];
-    PANEL_STEP: if gSteps <> nil then TP := gSteps[ID];
-    else Exit;
-  end;
-  }
-
   if (TP <> nil) then
   begin
     if Loop = 0 then
@@ -2506,7 +2379,6 @@ var
   PGUID: Integer;
   E: Boolean;
   Lift: Byte;
-  PType: Word;
   X, Y, W, H: Integer;
   TP: TPanel;
   speedX, speedY, startX, startY, endX, endY: Integer;
@@ -2514,7 +2386,7 @@ var
   mpflags: Byte;
 begin
   if not gGameOn then Exit;
-  PType := M.ReadWord();
+
   PGUID := Integer(M.ReadLongWord());
   E := (M.ReadByte() <> 0);
   Lift := M.ReadByte();
@@ -2535,66 +2407,35 @@ begin
   sizeEY := M.ReadLongInt();
   mpflags := M.ReadByte(); // bit0: TP.movingActive; bit1: TP.moveOnce
 
-  case PType of
-    {PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR:
-      if E then g_Map_EnableWallGUID(PGUID) else g_Map_DisableWallGUID(PGUID);}
-
-    PANEL_LIFTUP, PANEL_LIFTDOWN, PANEL_LIFTLEFT, PANEL_LIFTRIGHT:
-      g_Map_SetLiftGUID(PGUID, Lift);
-
-    {PANEL_BACK,
-    PANEL_FORE:}
-    {
-    else
-    begin
-      TP := g_Map_PanelByGUID(PGUID);
-      if (TP <> nil) then
-      begin
-        TP.X := X;
-        TP.Y := Y;
-        TP.positionChanged();
-      end;
-      //gRenderBackgrounds[ID].X := X;
-      //gRenderBackgrounds[ID].Y := Y;
-    end;
-    }
+  TP := g_Map_PanelByGUID(PGUID);
+  if (TP = nil) then exit;
 
-    {
-    PANEL_FORE:
-    begin
-      gRenderForegrounds[ID].X := X;
-      gRenderForegrounds[ID].Y := Y;
-    end;
-    }
-  end;
+  // update lifts state
+  if TP.isGLift then g_Map_SetLiftGUID(PGUID, Lift);
 
   // update enabled/disabled state for all panels
   if E then g_Map_EnableWallGUID(PGUID) else g_Map_DisableWallGUID(PGUID);
 
-  // update panel position, as it can be moved
-  TP := g_Map_PanelByGUID(PGUID);
-  if (TP <> nil) then
-  begin
-    // mplat
-    TP.movingSpeedX := speedX;
-    TP.movingSpeedY := speedY;
-    TP.movingStartX := startX;
-    TP.movingStartY := startY;
-    TP.movingEndX := endX;
-    TP.movingEndY := endY;
-    TP.sizeSpeedX := sizeSpX;
-    TP.sizeSpeedY := sizeSpY;
-    TP.sizeEndX := sizeEX;
-    TP.sizeEndY := sizeEY;
-    TP.movingActive := ((mpflags and 1) <> 0);
-    TP.moveOnce := ((mpflags and 2) <> 0);
-    // position
-    TP.X := X;
-    TP.Y := Y;
-    TP.Width := W;
-    TP.Height := H;
-    TP.positionChanged();
-  end;
+  // update panel position, as it can be moved (mplat)
+  TP.X := X;
+  TP.Y := Y;
+  TP.Width := W;
+  TP.Height := H;
+  // update mplat state
+  TP.movingSpeedX := speedX;
+  TP.movingSpeedY := speedY;
+  TP.movingStartX := startX;
+  TP.movingStartY := startY;
+  TP.movingEndX := endX;
+  TP.movingEndY := endY;
+  TP.sizeSpeedX := sizeSpX;
+  TP.sizeSpeedY := sizeSpY;
+  TP.sizeEndX := sizeEX;
+  TP.sizeEndY := sizeEY;
+  TP.movingActive := ((mpflags and 1) <> 0);
+  TP.moveOnce := ((mpflags and 2) <> 0);
+  // notify panel of it's position/size change, so it can fix other internal structures
+  TP.positionChanged();
 end;
 
 // TRIGGERS
@@ -2711,7 +2552,6 @@ begin
     setPosition(X, Y); // this will call positionChanged();
     GameVelX := VX;
     GameVelY := VY;
-    //positionChanged(); // this updates spatial accelerators
   end;
 end;
 
@@ -2734,7 +2574,6 @@ begin
     GameVelX := M.ReadLongInt();
     GameVelY := M.ReadLongInt();
     GameDirection := TDirection(M.ReadByte());
-    //positionChanged(); // this updates spatial accelerators
   end;
 end;
 
@@ -2766,16 +2605,11 @@ begin
 
     if MonsterState <> MState then
     begin
-      if (MState = MONSTATE_GO) and (MonsterState = MONSTATE_SLEEP) then
-        WakeUpSound;
-      if (MState = MONSTATE_DIE) then
-        DieSound;
-      if (MState = MONSTATE_PAIN) then
-        MakeBloodSimple(Min(200, MonsterPain));
-      if (MState = MONSTATE_ATTACK) then
-        kick(nil);
-      if (MState = MONSTATE_DEAD) then
-        SetDeadAnim;
+      if (MState = MONSTATE_GO) and (MonsterState = MONSTATE_SLEEP) then WakeUpSound();
+      if (MState = MONSTATE_DIE) then DieSound();
+      if (MState = MONSTATE_PAIN) then MakeBloodSimple(Min(200, MonsterPain));
+      if (MState = MONSTATE_ATTACK) then kick(nil);
+      if (MState = MONSTATE_DEAD) then SetDeadAnim();
 
       SetState(MState, MFAnm);
     end;
index 00407dbd68921463601b5b932ae4cd444d9d07d6..6f45fc2cf45a9cd567b86c4c734cfdfe043faf9e 100644 (file)
@@ -98,10 +98,8 @@ type
     FX, FY:           Integer;
     FWidth, FHeight:  Word;
     FPanelType:       Word;
-    FSaveIt:          Boolean; // Ñîõðàíÿòü ïðè SaveState?
     FEnabled:         Boolean;
     FDoor:            Boolean;
-    FMoved:           Boolean;
     FLiftType:        Byte;
     FLastAnimLoop:    Byte;
     // sorry, there fields are public to allow setting 'em in g_map; this should be fixed later
@@ -159,10 +157,8 @@ type
     property width: Word read FWidth write FWidth;
     property height: Word read FHeight write FHeight;
     property panelType: Word read FPanelType write FPanelType;
-    property saveIt: Boolean read FSaveIt write FSaveIt; // Ñîõðàíÿòü ïðè SaveState?
     property enabled: Boolean read FEnabled write FEnabled; // Ñîõðàíÿòü ïðè SaveState?
     property door: Boolean read FDoor write FDoor; // Ñîõðàíÿòü ïðè SaveState?
-    property moved: Boolean read FMoved write FMoved; // Ñîõðàíÿòü ïðè SaveState?
     property liftType: Byte read FLiftType write FLiftType; // Ñîõðàíÿòü ïðè SaveState?
     property lastAnimLoop: Byte read FLastAnimLoop write FLastAnimLoop; // Ñîõðàíÿòü ïðè SaveState?
 
@@ -236,7 +232,6 @@ begin
   FCurFrame := 0;
   FCurFrameCount := 0;
   LastAnimLoop := 0;
-  Moved := False;
 
   mapId := PanelRec.id;
   mGUID := aguid;
@@ -261,37 +256,14 @@ begin
   Enabled := True;
   Door := False;
   LiftType := 0;
-  SaveIt := False;
 
   case PanelType of
-    PANEL_OPENDOOR:
-      begin
-        Enabled := False;
-        Door := True;
-        SaveIt := True;
-      end;
-    PANEL_CLOSEDOOR:
-      begin
-        Door := True;
-        SaveIt := True;
-      end;
-    PANEL_LIFTUP:
-      SaveIt := True;
-    PANEL_LIFTDOWN:
-      begin
-        LiftType := 1;
-        SaveIt := True;
-      end;
-    PANEL_LIFTLEFT:
-      begin
-        LiftType := 2;
-        SaveIt := True;
-      end;
-    PANEL_LIFTRIGHT:
-      begin
-        LiftType := 3;
-        SaveIt := True;
-      end;
+    PANEL_OPENDOOR: begin Enabled := False; Door := True; end;
+    PANEL_CLOSEDOOR: Door := True;
+    PANEL_LIFTUP: LiftType := 0; //???
+    PANEL_LIFTDOWN: LiftType := 1;
+    PANEL_LIFTLEFT: LiftType := 2;
+    PANEL_LIFTRIGHT: LiftType := 3;
   end;
 
 // Íåâèäèìàÿ:
@@ -354,7 +326,6 @@ begin
                              True, Textures[AddTextures[i].Texture].Speed);
         FTextureIDs[i].AnTex.Blending := ByteBool(PanelRec.Flags and PANEL_FLAG_BLENDING);
         FTextureIDs[i].AnTex.Alpha := PanelRec.Alpha;
-        SaveIt := True;
       end
     else
       begin // Îáû÷íàÿ òåêñòóðà
@@ -363,8 +334,7 @@ begin
   end;
 
 // Òåêñòóð íåñêîëüêî - íóæíî ñîõðàíÿòü òåêóùóþ:
-  if Length(FTextureIDs) > 1 then
-    SaveIt := True;
+  //if Length(FTextureIDs) > 1 then SaveIt := True;
 
 // Åñëè íå ñïåöòåêñòóðà, òî çàäàåì ðàçìåðû:
   if PanelRec.TextureNum > High(Textures) then
@@ -1057,7 +1027,6 @@ var
   ver: Byte;
 begin
   if (Mem = nil) then exit;
-  //if not SaveIt then exit;
 
 // Ñèãíàòóðà ïàíåëè:
   sig := PANEL_SIGNATURE; // 'PANL'
@@ -1116,7 +1085,6 @@ var
   //ox, oy: Integer;
 begin
   if (Mem = nil) then exit;
-  //if not SaveIt then exit;
 
 // Ñèãíàòóðà ïàíåëè:
   Mem.ReadDWORD(sig);