X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_player.pas;h=f644d6b7d863fc2d2f59a7f25da74670f9762c59;hb=d8c63c1a6eec80ee1df03d81124bd4f43da12b7e;hp=854d8119b44c4f0b4fe27b264e7dd273dece20bc;hpb=05c4488d67219fb60a2687af2a06397fea1dffbb;p=d2df-sdl.git diff --git a/src/game/g_player.pas b/src/game/g_player.pas index 854d811..f644d6b 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -191,6 +191,9 @@ type FSawSoundIdle: TPlayableSound; FSawSoundHit: TPlayableSound; FSawSoundSelect: TPlayableSound; + FFlameSoundOn: TPlayableSound; + FFlameSoundOff: TPlayableSound; + FFlameSoundWork: TPlayableSound; FJetSoundOn: TPlayableSound; FJetSoundOff: TPlayableSound; FJetSoundFly: TPlayableSound; @@ -253,6 +256,7 @@ type FWantsInGame: Boolean; FGhost: Boolean; FPhysics: Boolean; + FFlaming: Boolean; FJetpack: Boolean; FActualModelName: string; FClientID: SmallInt; @@ -325,6 +329,8 @@ type procedure SetLerp(XTo, YTo: Integer); procedure QueueWeaponSwitch(Weapon: Byte); procedure RealizeCurrentWeapon(); + procedure FlamerOn; + procedure FlamerOff; procedure JetpackOn; procedure JetpackOff; procedure CatchFire(Attacker: Word); @@ -2099,6 +2105,9 @@ begin FSawSoundIdle := TPlayableSound.Create(); FSawSoundHit := TPlayableSound.Create(); FSawSoundSelect := TPlayableSound.Create(); + FFlameSoundOn := TPlayableSound.Create(); + FFlameSoundOff := TPlayableSound.Create(); + FFlameSoundWork := TPlayableSound.Create(); FJetSoundFly := TPlayableSound.Create(); FJetSoundOn := TPlayableSound.Create(); FJetSoundOff := TPlayableSound.Create(); @@ -2107,6 +2116,9 @@ begin FSawSoundIdle.SetByName('SOUND_WEAPON_IDLESAW'); FSawSoundHit.SetByName('SOUND_WEAPON_HITSAW'); FSawSoundSelect.SetByName('SOUND_WEAPON_SELECTSAW'); + FFlameSoundOn.SetByName('SOUND_WEAPON_FLAMEON'); + FFlameSoundOff.SetByName('SOUND_WEAPON_FLAMEOFF'); + FFlameSoundWork.SetByName('SOUND_WEAPON_FLAMEWORK'); FJetSoundFly.SetByName('SOUND_PLAYER_JETFLY'); FJetSoundOn.SetByName('SOUND_PLAYER_JETON'); FJetSoundOff.SetByName('SOUND_PLAYER_JETOFF'); @@ -2266,6 +2278,10 @@ begin FSawSound.Free(); FSawSoundIdle.Free(); FSawSoundHit.Free(); + FSawSoundSelect.Free(); + FFlameSoundOn.Free(); + FFlameSoundOff.Free(); + FFlameSoundWork.Free(); FJetSoundFly.Free(); FJetSoundOn.Free(); FJetSoundOff.Free(); @@ -3045,11 +3061,17 @@ begin if FAmmo[A_FUEL] > 0 then begin g_Weapon_flame(wx, wy, xd, yd, FUID); + FlamerOn; FReloading[FCurrWeap] := WEAPON_RELOAD[FCurrWeap]; Dec(FAmmo[A_FUEL]); FFireAngle := FAngle; f := True; DidFire := True; + end + else + begin + FlamerOff; + if g_Game_IsNet and g_Game_IsServer then MH_SEND_PlayerStats(FUID); end; end; @@ -3093,6 +3115,35 @@ begin PANEL_WATER or PANEL_ACID1 or PANEL_ACID2, True); end; +procedure TPlayer.FlamerOn; +begin + FFlameSoundOff.Stop(); + FFlameSoundOff.SetPosition(0); + if FFlaming then + begin + if (not FFlameSoundOn.IsPlaying()) and (not FFlameSoundWork.IsPlaying()) then + FFlameSoundWork.PlayAt(FObj.X, FObj.Y); + end + else + begin + FFlameSoundOn.PlayAt(FObj.X, FObj.Y); + FFlaming := True; + end; +end; + +procedure TPlayer.FlamerOff; +begin + if FFlaming then + begin + FFlameSoundOn.Stop(); + FFlameSoundOn.SetPosition(0); + FFlameSoundWork.Stop(); + FFlameSoundWork.SetPosition(0); + FFlameSoundOff.PlayAt(FObj.X, FObj.Y); + FFlaming := False; + end; +end; + procedure TPlayer.JetpackOn; begin FJetSoundFly.Stop; @@ -3112,6 +3163,8 @@ end; procedure TPlayer.CatchFire(Attacker: Word); begin + if FFireTime <= 0 then + g_Sound_PlayExAt('SOUND_IGNITE', FObj.X, FObj.Y); FFireTime := 100; FFireAttacker := Attacker; if g_Game_IsNet and g_Game_IsServer then @@ -3664,7 +3717,7 @@ begin // i found her! result := Byte(i); resetWeaponQueue(); - FNextWeapDelay := WEAPON_DELAY; // anyway, 'cause why not + FNextWeapDelay := WEAPON_DELAY * 2; // anyway, 'cause why not exit; end; end; @@ -4521,6 +4574,7 @@ begin FDamageBuffer := 0; FJetpack := False; FCanJetpack := False; + FFlaming := False; FFireTime := 0; FFirePainTime := 0; FFireAttacker := 0; @@ -4922,7 +4976,15 @@ begin if FKeys[KEY_RIGHT].Pressed then Run(TDirection.D_RIGHT); //if FKeys[KEY_NEXTWEAPON].Pressed and AnyServer then NextWeapon(); //if FKeys[KEY_PREVWEAPON].Pressed and AnyServer then PrevWeapon(); - if FKeys[KEY_FIRE].Pressed and AnyServer then Fire(); + if FKeys[KEY_FIRE].Pressed and AnyServer then Fire() + else + begin + if AnyServer then + begin + FlamerOff; + if NetServer then MH_SEND_PlayerStats(FUID); + end; + end; if FKeys[KEY_OPEN].Pressed and AnyServer then Use(); if FKeys[KEY_JUMP].Pressed then Jump() else @@ -5490,6 +5552,7 @@ begin WEAPON_FLAMETHROWER: begin g_Weapon_flame(wx, wy, xd, yd, FUID, WID); + FlamerOn; FFireAngle := FAngle; f := True; end; @@ -5725,6 +5788,11 @@ end; procedure TPlayer.GetSecret(); begin + if (self = gPlayer1) or (self = gPlayer2) then + begin + g_Console_Add(Format(_lc[I_PLAYER_SECRET], [FName]), True); + g_Sound_PlayEx('SOUND_GAME_SECRET'); + end; Inc(FSecrets); end; @@ -6260,6 +6328,12 @@ begin FSawSoundIdle.Pause(Enable); FSawSoundHit.Pause(Enable); FSawSoundSelect.Pause(Enable); + FFlameSoundOn.Pause(Enable); + FFlameSoundOff.Pause(Enable); + FFlameSoundWork.Pause(Enable); + FJetSoundFly.Pause(Enable); + FJetSoundOn.Pause(Enable); + FJetSoundOff.Pause(Enable); end; { T C o r p s e : }