X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_player.pas;h=6c7006be15f110d75aa1774838a35812e255337e;hb=d44826b00888fb246e6c23cfb410070f3f845203;hp=0cde3c089c1dfe4d0a5d9098721c4e4717d07e4e;hpb=5b8e9b87a2b3372fd94fdeefdd78c7d483199da1;p=d2df-sdl.git diff --git a/src/game/g_player.pas b/src/game/g_player.pas index 0cde3c0..6c7006b 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -267,6 +267,7 @@ type FReady: Boolean; FDummy: Boolean; FFireTime: Integer; + FSpawnInvul: Integer; FHandicap: Integer; FWaitForFirstSpawn: Boolean; // set to `true` in server, used to spawn a player on first full state request @@ -2229,6 +2230,7 @@ begin FMegaRulez[MR_SUIT] := 0; FMegaRulez[MR_INVUL] := 0; FMegaRulez[MR_INVIS] := 0; + FSpawnInvul := 0; FBerserk := 0; end; @@ -2507,7 +2509,7 @@ begin end; end; - if (FMegaRulez[MR_INVUL] > gTime) and (gPlayerDrawn <> Self) then + if (FMegaRulez[MR_INVUL] > gTime) and ((gPlayerDrawn <> Self) or (FSpawnInvul >= gTime)) then if g_Texture_Get('TEXTURE_PLAYER_INVULPENTA', ID) then begin e_GetTextureSize(ID, @w, @h); @@ -2875,7 +2877,7 @@ var dr: Boolean; begin // Ïðè âçÿòèè íåóÿçâèìîñòè ðèñóåòñÿ èíâåðñèîííûé áåëûé ôîí - if FMegaRulez[MR_INVUL] >= gTime then + if (FMegaRulez[MR_INVUL] >= gTime) and (FSpawnInvul < gTime) then begin if (FMegaRulez[MR_INVUL]-gTime) <= 2100 then dr := not Odd((FMegaRulez[MR_INVUL]-gTime) div 300) @@ -3539,7 +3541,8 @@ begin PushItem(ITEM_JETPACK); // Âûáðîñ êëþ÷åé: - if not (gGameSettings.GameMode in [GM_DM, GM_TDM, GM_CTF]) then + if (not (gGameSettings.GameMode in [GM_DM, GM_TDM, GM_CTF])) or + LongBool(gGameSettings.Options and GAME_OPTION_DMKEYS) then begin if R_KEY_RED in FRulez then PushItem(ITEM_KEY_RED); @@ -4279,6 +4282,7 @@ begin if FMegaRulez[MR_INVUL] < gTime+PLAYER_INVUL_TIME then begin FMegaRulez[MR_INVUL] := gTime+PLAYER_INVUL_TIME; + FSpawnInvul := 0; Result := True; remove := True; if gFlash = 2 then Inc(FPickup, 5); @@ -4634,7 +4638,8 @@ begin FMaxAmmo[A_CELLS] := AmmoLimits[0, A_CELLS]; FMaxAmmo[A_FUEL] := AmmoLimits[0, A_FUEL]; - if gGameSettings.GameMode in [GM_DM, GM_TDM, GM_CTF] then + if (gGameSettings.GameMode in [GM_DM, GM_TDM, GM_CTF]) and + LongBool(gGameSettings.Options and GAME_OPTION_DMKEYS) then FRulez := [R_KEY_RED, R_KEY_GREEN, R_KEY_BLUE] else FRulez := []; @@ -4670,6 +4675,13 @@ begin for a := Low(FMegaRulez) to High(FMegaRulez) do FMegaRulez[a] := 0; +// Respawn invulnerability + if (gGameSettings.GameType <> GT_SINGLE) and (gGameSettings.SpawnInvul > 0) then + begin + FMegaRulez[MR_INVUL] := gTime + gGameSettings.SpawnInvul * 1000; + FSpawnInvul := FMegaRulez[MR_INVUL]; + end; + FDamageBuffer := 0; FJetpack := False; FCanJetpack := False; @@ -4815,7 +4827,7 @@ begin if FDirection = TDirection.D_LEFT then FAngle := ANGLE_LEFTDOWN else FAngle := ANGLE_RIGHTDOWN; - if FIncCam > -120 then DecMin(FIncCam, 5, -120); + if FIncCam > -120.0 * g_dbg_scale then DecMin(FIncCam, 5, Integer(-120.0 * g_dbg_scale)); end; procedure TPlayer.SeeUp(); @@ -4824,7 +4836,7 @@ begin if FDirection = TDirection.D_LEFT then FAngle := ANGLE_LEFTUP else FAngle := ANGLE_RIGHTUP; - if FIncCam < 120 then IncMax(FIncCam, 5, 120); + if FIncCam < 120.0 * g_dbg_scale then IncMax(FIncCam, 5, Integer(120.0 * g_dbg_scale)); end; procedure TPlayer.SetAction(Action: Byte; Force: Boolean = False);