X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_player.pas;h=b25ef0c59112b5db47fa5258f3b799bb01615735;hb=7869ee331ead2e3f765af47eeca1566ed97faa19;hp=050e0e650950b20e5e51a65d23f40564b87d3638;hpb=2b4061ae07fe1bf12d49fc1213d7eb3e9e34ccb6;p=d2df-sdl.git diff --git a/src/game/g_player.pas b/src/game/g_player.pas index 050e0e6..b25ef0c 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . *) -{$MODE DELPHI} +{$INCLUDE ../shared/a_modes.inc} unit g_player; interface @@ -3356,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 @@ -3379,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 @@ -3388,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 @@ -3501,6 +3523,7 @@ begin IncMax(FHealth, 10, PLAYER_HP_SOFT); Result := True; remove := True; + FFireTime := 0; if gFlash = 2 then Inc(FPickup, 5); end; @@ -3510,6 +3533,7 @@ begin IncMax(FHealth, 25, PLAYER_HP_SOFT); Result := True; remove := True; + FFireTime := 0; if gFlash = 2 then Inc(FPickup, 5); end; @@ -3537,6 +3561,7 @@ begin IncMax(FHealth, 100, PLAYER_HP_LIMIT); Result := True; remove := True; + FFireTime := 0; if gFlash = 2 then Inc(FPickup, 5); end; @@ -3549,6 +3574,7 @@ begin FArmor := PLAYER_AP_LIMIT; Result := True; remove := True; + FFireTime := 0; if gFlash = 2 then Inc(FPickup, 5); end; @@ -3804,6 +3830,7 @@ begin FMegaRulez[MR_SUIT] := gTime+PLAYER_SUIT_TIME; Result := True; remove := True; + FFireTime := 0; if gFlash = 2 then Inc(FPickup, 5); end; @@ -3833,6 +3860,7 @@ begin FBerserk := gTime+30000; Result := True; remove := True; + FFireTime := 0; end; if FHealth < PLAYER_HP_SOFT then begin @@ -3840,6 +3868,7 @@ begin FBerserk := gTime+30000; Result := True; remove := True; + FFireTime := 0; end; end; @@ -3858,6 +3887,7 @@ begin IncMax(FHealth, 4, PLAYER_HP_LIMIT); Result := True; remove := True; + FFireTime := 0; if gFlash = 2 then Inc(FPickup, 5); end; @@ -4840,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); @@ -6210,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); @@ -6244,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;