DEADSOFTWARE

Game: Add secret notification
[d2df-sdl.git] / src / game / g_netmsg.pas
index a7ff31a9639fe68fdf2efdae7e308b54a1683a5d..a7219124df1b26292b2d87aafaa4130125879e4e 100644 (file)
@@ -109,6 +109,7 @@ const
   NET_EV_LMS_DRAW     = 16;
   NET_EV_KILLCOMBO    = 17;
   NET_EV_PLAYER_TOUCH = 18;
+  NET_EV_SECRET       = 19;
 
   NET_VE_STARTED      = 1;
   NET_VE_PASSED       = 2;
@@ -1070,6 +1071,7 @@ begin
     NetOut.Write(Byte(FNoRespawn));
     NetOut.Write(Byte(FJetpack));
     NetOut.Write(FFireTime);
+    NetOut.Write(Byte(FFlaming));
   end;
 
   g_Net_Host_Send(ID, True, NET_CHAN_PLAYER);
@@ -1830,6 +1832,16 @@ begin
         pl.Touch();
     end;
 
+    NET_EV_SECRET:
+    begin
+      pl := g_Player_Get(EvNum);
+      if pl <> nil then
+      begin
+        g_Console_Add(Format(_lc[I_PLAYER_SECRET], [pl.Name]), True);
+        g_Sound_PlayEx('SOUND_GAME_SECRET');
+      end;
+    end;
+
   end;
 end;
 
@@ -1838,7 +1850,7 @@ var
   PID: Word;
   Pl: TPlayer;
   EvType: Byte;
-  Fl: Byte;
+  Fl, a: Byte;
   Quiet: Boolean;
   s, ts: string;
 begin
@@ -1875,6 +1887,16 @@ begin
         s := _lc[I_PLAYER_FLAG_BLUE];
 
       g_Game_Message(Format(_lc[I_MESSAGE_FLAG_RETURN], [AnsiUpperCase(s)]), 144);
+
+      if ((Pl = gPlayer1) or (Pl = gPlayer2)
+      or ((gPlayer1 <> nil) and (gPlayer1.Team = Pl.Team))
+      or ((gPlayer2 <> nil) and (gPlayer2.Team = Pl.Team))) then
+        a := 0
+      else
+        a := 1;
+
+      if not sound_ret_flag[a].IsPlaying() then
+        sound_ret_flag[a].Play();
     end;
 
     FLAG_STATE_CAPTURED:
@@ -1890,6 +1912,16 @@ begin
 
       g_Console_Add(Format(_lc[I_PLAYER_FLAG_GET], [Pl.Name, s]), True);
       g_Game_Message(Format(_lc[I_MESSAGE_FLAG_GET], [AnsiUpperCase(s)]), 144);
+
+      if ((Pl = gPlayer1) or (Pl = gPlayer2)
+      or ((gPlayer1 <> nil) and (gPlayer1.Team = Pl.Team))
+      or ((gPlayer2 <> nil) and (gPlayer2.Team = Pl.Team))) then
+        a := 0
+      else
+        a := 1;
+
+      if not sound_get_flag[a].IsPlaying() then
+        sound_get_flag[a].Play();
     end;
 
     FLAG_STATE_DROPPED:
@@ -1905,6 +1937,16 @@ begin
 
       g_Console_Add(Format(_lc[I_PLAYER_FLAG_DROP], [Pl.Name, s]), True);
       g_Game_Message(Format(_lc[I_MESSAGE_FLAG_DROP], [AnsiUpperCase(s)]), 144);
+
+      if ((Pl = gPlayer1) or (Pl = gPlayer2)
+      or ((gPlayer1 <> nil) and (gPlayer1.Team = Pl.Team))
+      or ((gPlayer2 <> nil) and (gPlayer2.Team = Pl.Team))) then
+        a := 0
+      else
+        a := 1;
+
+      if not sound_lost_flag[a].IsPlaying() then
+        sound_lost_flag[a].Play();
     end;
 
     FLAG_STATE_SCORED:
@@ -1923,6 +1965,16 @@ begin
       Insert('.', ts, Length(ts) + 1 - 3);
       g_Console_Add(Format(_lc[I_PLAYER_FLAG_CAPTURE], [Pl.Name, s, ts]), True);
       g_Game_Message(Format(_lc[I_MESSAGE_FLAG_CAPTURE], [AnsiUpperCase(s)]), 144);
+
+      if ((Pl = gPlayer1) or (Pl = gPlayer2)
+      or ((gPlayer1 <> nil) and (gPlayer1.Team = Pl.Team))
+      or ((gPlayer2 <> nil) and (gPlayer2.Team = Pl.Team))) then
+        a := 0
+      else
+        a := 1;
+
+      if not sound_cap_flag[a].IsPlaying() then
+        sound_cap_flag[a].Play();
     end;
 
     FLAG_STATE_RETURNED:
@@ -1936,6 +1988,16 @@ begin
         s := _lc[I_PLAYER_FLAG_BLUE];
 
       g_Game_Message(Format(_lc[I_MESSAGE_FLAG_RETURN], [AnsiUpperCase(s)]), 144);
+
+      if ((Pl = gPlayer1) or (Pl = gPlayer2)
+      or ((gPlayer1 <> nil) and (gPlayer1.Team = Pl.Team))
+      or ((gPlayer2 <> nil) and (gPlayer2.Team = Pl.Team))) then
+        a := 0
+      else
+        a := 1;
+
+      if not sound_ret_flag[a].IsPlaying() then
+        sound_ret_flag[a].Play();
     end;
   end;
 end;
@@ -2065,8 +2127,8 @@ function MC_RECV_PlayerStats(var M: TMsg): Word;
 var
   PID: Word;
   Pl: TPlayer;
-  I: Integer;
-  OldJet: Boolean;
+  I, OldFire: Integer;
+  OldJet, Flam: Boolean;
   NewTeam: Byte;
 begin
   PID := M.ReadWord();
@@ -2141,11 +2203,17 @@ begin
     FNoRespawn := M.ReadByte() <> 0;
     OldJet := FJetpack;
     FJetpack := M.ReadByte() <> 0;
+    OldFire := FFireTime;
     FFireTime := M.ReadLongInt();
+    if (OldFire <= 0) and (FFireTime > 0) then
+      g_Sound_PlayExAt('SOUND_IGNITE', Obj.X, Obj.Y);
+    Flam := M.ReadByte() <> 0;
     if OldJet and not FJetpack then
       JetpackOff
     else if not OldJet and FJetpack then
       JetpackOn;
+    if FFlaming and not Flam then
+      FlamerOff;
     if Team <> NewTeam then
       Pl.ChangeTeam(NewTeam);
   end;
@@ -2578,7 +2646,7 @@ end;
 
 procedure MC_RECV_MonsterState(var M: TMsg);
 var
-  ID: Integer;
+  ID, OldFire: Integer;
   MState, MFAnm: Byte;
   Mon: TMonster;
   AnimRevert: Boolean;
@@ -2599,7 +2667,10 @@ begin
     MonsterAmmo := M.ReadLongInt();
     MonsterPain := M.ReadLongInt();
     AnimRevert := M.ReadByte() <> 0;
+    OldFire := FFireTime;
     FFireTime := M.ReadLongInt();
+    if (OldFire <= 0) and (FFireTime > 0) then
+      g_Sound_PlayExAt('SOUND_IGNITE', Obj.X, Obj.Y);
     RevertAnim(AnimRevert);
 
     if MonsterState <> MState then