X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-sdl.git;a=blobdiff_plain;f=src%2Fgame%2Fg_player.pas;h=b8a77bd44fa2f02aab7ce19e624048a1a2533f2f;hp=0cde3c089c1dfe4d0a5d9098721c4e4717d07e4e;hb=c8d7811d45c2d34a7e297613e50570f253a0d8e9;hpb=80a5bd62ed15eaa7140802ab6d45da86ffa919d0 diff --git a/src/game/g_player.pas b/src/game/g_player.pas index 0cde3c0..b8a77bd 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;