X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_player.pas;h=ef8b1af0da19cfd20e0ea61faa118bc8474f298f;hb=198c00b7bd28bdbfb4c76646fe352c3bdb87384f;hp=a6f07ac6f6e258522a8f867445f588e8efa9eab3;hpb=7066cc79564caafb0cecfb819ca28ee094d1a62e;p=d2df-sdl.git diff --git a/src/game/g_player.pas b/src/game/g_player.pas index a6f07ac..ef8b1af 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -2884,8 +2884,6 @@ end; procedure TPlayer.CatchFire(Attacker: Word); begin - if FMegaRulez[MR_SUIT] >= gTime then - Exit; FFireTime := 100; FFireAttacker := Attacker; if g_Game_IsNet and g_Game_IsServer then @@ -3358,13 +3356,21 @@ var begin result := 255; // default result: "no switch" // had weapon cycling on previous frame? remove that flag - if (FNextWeap and $2000) <> 0 then begin FNextWeap := FNextWeap and $1FFF; FNextWeapDelay := 0; end; + if (FNextWeap and $2000) <> 0 then + begin + FNextWeap := FNextWeap and $1FFF; + FNextWeapDelay := 0; + end; // cycling has priority if (FNextWeap and $C000) <> 0 then begin - if (FNextWeap and $8000) <> 0 then dir := 1 else dir := -1; + if (FNextWeap and $8000) <> 0 then + dir := 1 + else + dir := -1; FNextWeap := FNextWeap or $2000; // we need this - if FNextWeapDelay > 0 then exit; // cooldown time + if FNextWeapDelay > 0 then + exit; // cooldown time cwi := FCurrWeap; for i := 0 to High(FWeapon) do begin @@ -3381,8 +3387,14 @@ begin exit; end; // no cycling - for i := 0 to High(wantThisWeapon) do wantThisWeapon[i] := false; - for i := 0 to High(FWeapon) do if (FNextWeap and (1 shl i)) <> 0 then begin wantThisWeapon[i] := true; Inc(wwc); end; + for i := 0 to High(wantThisWeapon) do + wantThisWeapon[i] := false; + for i := 0 to High(FWeapon) do + if (FNextWeap and (1 shl i)) <> 0 then + begin + wantThisWeapon[i] := true; + Inc(wwc); + end; // exclude currently selected weapon from the set wantThisWeapon[FCurrWeap] := false; // slow down alterations a little @@ -3390,11 +3402,19 @@ begin begin //e_WriteLog(Format(' FNextWeap=%x; delay=%d', [FNextWeap, FNextWeapDelay]), MSG_WARNING); // more than one weapon requested, assume "alteration" and check alteration delay - if FNextWeapDelay > 0 then begin FNextWeap := 0; exit; end; // yeah + if FNextWeapDelay > 0 then + begin + FNextWeap := 0; + exit; + end; // yeah end; // do not reset weapon queue, it will be done in `RealizeCurrentWeapon()` // but clear all counters if no weapon should be switched - if wwc < 1 then begin resetWeaponQueue(); exit; end; + if wwc < 1 then + begin + resetWeaponQueue(); + exit; + end; //e_WriteLog(Format('wwc=%d', [wwc]), MSG_WARNING); // try weapons in descending order for i := High(FWeapon) downto 0 do @@ -4850,6 +4870,12 @@ begin FFireTime := 0; FFirePainTime := 0; end + else if FMegaRulez[MR_SUIT] >= gTime then + begin + if FMegaRulez[MR_SUIT] = gTime then + FFireTime := 1; + FFirePainTime := 0; + end else begin OnFireFlame(1); @@ -6220,7 +6246,7 @@ var firew, fireh: Integer; angle: SmallInt; mon: TMonster; - pla: TPlayer; + pla, tpla: TPlayer; vsPlayer, vsMonster, ok: Boolean; begin vsPlayer := LongBool(gGameSettings.Options and GAME_OPTION_BOTVSPLAYER); @@ -6254,14 +6280,16 @@ begin if (g_GetUIDType(Target.UID) = UID_PLAYER) and vsPlayer then begin // Èãðîê - with g_Player_Get(Target.UID) do - begin - if (@FObj) <> nil then + tpla := g_Player_Get(Target.UID); + if tpla <> nil then + with tpla do begin - Target.X := FObj.X; - Target.Y := FObj.Y; + if (@FObj) <> nil then + begin + Target.X := FObj.X; + Target.Y := FObj.Y; + end; end; - end; Target.cX := Target.X + PLAYER_RECT_CX; Target.cY := Target.Y + PLAYER_RECT_CY;