X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_player.pas;h=81825dfe7bce4b108fbf20570dcdf17a0f8200f4;hb=c1ffcbff92f1cda66945281f6f946acce3b6e4c7;hp=da4c43a84e12561afef525e41c84ce7eb8e04d4a;hpb=fbedc3eec9e72225010d043d2be17b44cf13941e;p=d2df-sdl.git diff --git a/src/game/g_player.pas b/src/game/g_player.pas index da4c43a..81825df 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -266,6 +266,7 @@ type FReady: Boolean; FDummy: Boolean; FFireTime: Integer; + FHandicap: Integer; // debug: viewport offset viewPortX, viewPortY, viewPortW, viewPortH: Integer; @@ -595,8 +596,8 @@ procedure g_Player_RemoveAllCorpses(); procedure g_Player_Corpses_SaveState (st: TStream); procedure g_Player_Corpses_LoadState (st: TStream); procedure g_Player_ResetReady(); -procedure g_Bot_Add(Team, Difficult: Byte); -procedure g_Bot_AddList(Team: Byte; lname: ShortString; num: Integer = -1); +procedure g_Bot_Add(Team, Difficult: Byte; Handicap: Integer = 100); +procedure g_Bot_AddList(Team: Byte; lname: ShortString; num: Integer = -1; Handicap: Integer = 100); procedure g_Bot_MixNames(); procedure g_Bot_RemoveAll(); @@ -885,6 +886,8 @@ begin if b = 1 then gPlayers[a].FDirection := TDirection.D_LEFT else gPlayers[a].FDirection := TDirection.D_RIGHT; // b = 2 // Çäîðîâüå gPlayers[a].FHealth := utils.readLongInt(st); + // Ôîðà + gPlayers[a].FHandicap := utils.readLongInt(st); // Æèçíè gPlayers[a].FLives := utils.readByte(st); // Áðîíÿ @@ -1006,7 +1009,7 @@ begin end; end; -procedure g_Bot_Add(Team, Difficult: Byte); +procedure g_Bot_Add(Team, Difficult: Byte; Handicap: Integer = 100); var m: SSArray; _name, _model: String; @@ -1095,6 +1098,8 @@ begin //FDifficult.SafeWeaponPrior[a] := WEAPON_PRIOR3[a]; end; + FHandicap := Handicap; + g_Console_Add(Format(_lc[I_PLAYER_JOIN], [Name]), True); if g_Game_IsNet then MH_SEND_PlayerCreate(UID); @@ -1103,7 +1108,7 @@ begin end; end; -procedure g_Bot_AddList(Team: Byte; lName: ShortString; num: Integer = -1); +procedure g_Bot_AddList(Team: Byte; lName: ShortString; num: Integer = -1; Handicap: Integer = 100); var m: SSArray; _name, _model: String; @@ -1166,6 +1171,8 @@ begin FDifficult.Cover := BotList[num].cover; FDifficult.CloseJump := BotList[num].close_jump; + FHandicap := Handicap; + for a := WP_FIRST to WP_LAST do begin FDifficult.WeaponPrior[a] := BotList[num].w_prior1[a]; @@ -2152,6 +2159,7 @@ begin FFireTime := 0; FFirePainTime := 0; FFireAttacker := 0; + FHandicap := 100; FActualModelName := 'doomer'; @@ -3183,6 +3191,8 @@ end; procedure TPlayer.CatchFire(Attacker: Word); begin + if (FMegaRulez[MR_SUIT] > gTime) or (FMegaRulez[MR_INVUL] > gTime) then + exit; // Íå çàãîðàåìñÿ êîãäà åñòü çàùèòà if FFireTime <= 0 then g_Sound_PlayExAt('SOUND_IGNITE', FObj.X, FObj.Y); FFireTime := 100; @@ -4526,7 +4536,7 @@ begin // Âîñêðåøåíèå áåç îðóæèÿ: if not FAlive then begin - FHealth := PLAYER_HP_SOFT; + FHealth := Round(PLAYER_HP_SOFT * (FHandicap / 100)); FArmor := 0; FAlive := True; FAir := AIR_DEF; @@ -5266,11 +5276,13 @@ begin if FFirePainTime <= 0 then begin if g_Game_IsServer then - Damage(5, FFireAttacker, 0, 0, HIT_FLAME); + Damage(6, FFireAttacker, 0, 0, HIT_FLAME); FFirePainTime := 18; end; FFirePainTime := FFirePainTime - 1; FFireTime := FFireTime - 1; + if ((FFireTime mod 33) = 0) and (FMegaRulez[MR_INVUL] < gTime) then + FModel.PlaySound(MODELSOUND_PAIN, 1, FObj.X, FObj.Y); if (FFireTime = 0) and g_Game_IsNet and g_Game_IsServer then MH_SEND_PlayerStats(FUID); end; @@ -5302,7 +5314,7 @@ begin else if FHealth > -50 then Kill(K_HARDKILL, FLastSpawnerUID, FLastHit) else Kill(K_EXTRAHARDKILL, FLastSpawnerUID, FLastHit); - if FAlive then + if FAlive and ((FLastHit <> HIT_FLAME) or (FFireTime <= 0)) then begin if FDamageBuffer <= 20 then FModel.PlaySound(MODELSOUND_PAIN, 1, FObj.X, FObj.Y) else if FDamageBuffer <= 55 then FModel.PlaySound(MODELSOUND_PAIN, 2, FObj.X, FObj.Y) @@ -5924,6 +5936,8 @@ begin utils.writeInt(st, Byte(b)); // Çäîðîâüå utils.writeInt(st, LongInt(FHealth)); + // Êîýôôèöèåíò èíâàëèäíîñòè + utils.writeInt(st, LongInt(FHandicap)); // Æèçíè utils.writeInt(st, Byte(FLives)); // Áðîíÿ @@ -6026,6 +6040,8 @@ begin if b = 1 then FDirection := TDirection.D_LEFT else FDirection := TDirection.D_RIGHT; // b = 2 // Çäîðîâüå FHealth := utils.readLongInt(st); + // Êîýôôèöèåíò èíâàëèäíîñòè + FHandicap := utils.readLongInt(st); // Æèçíè FLives := utils.readByte(st); // Áðîíÿ