DEADSOFTWARE

game: cosmetic changes for stats
[d2df-sdl.git] / src / game / g_player.pas
index 82ce13054db7fb141c6468f3c5b01b9c74c861d3..22813f1dfac378f0f37af6fa05e0c3e7c9faaa1c 100644 (file)
@@ -112,6 +112,7 @@ type
     Name: String;
     Team: Byte;
     Frags: SmallInt;
+    Assists: SmallInt;
     Deaths: SmallInt;
     Lives: Byte;
     Kills: Word;
@@ -160,6 +161,7 @@ type
     FKills:     Integer;
     FMonsterKills: Integer;
     FFrags:     Integer;
+    FAssists:   Integer;
     FFragCombo: Byte;
     FLastFrag:  LongWord;
     FComboEvnt: Integer;
@@ -383,6 +385,7 @@ type
     property    Air:   Integer read FAir write FAir;
     property    JetFuel: Integer read FJetFuel write FJetFuel;
     property    Frags: Integer read FFrags write FFrags;
+    property    Assists: Integer read FAssists write FAssists;
     property    Death: Integer read FDeath write FDeath;
     property    Kills: Integer read FKills write FKills;
     property    CurrWeap: Byte read FCurrWeap write FCurrWeap;
@@ -419,6 +422,7 @@ type
     property eAir:   Integer read FAir write FAir;
     property eJetFuel: Integer read FJetFuel write FJetFuel;
     property eFrags: Integer read FFrags write FFrags;
+    property eAssists: Integer read FAssists write FAssists;
     property eDeath: Integer read FDeath write FDeath;
     property eKills: Integer read FKills write FKills;
     property eCurrWeap: Byte read FCurrWeap write FCurrWeap;
@@ -1096,7 +1100,7 @@ begin
         Team := BotList[num].team; // CTF / TDM
 
 // Âûáèðàåì íàñòðîéêè áîòà èç ñïèñêà ïî íîìåðó èëè èìåíè:
-  if lName = '' then 
+  if lName = '' then
     num := Random(Length(BotList))
   else
   begin
@@ -1116,6 +1120,13 @@ begin
 
 // Èìÿ áîòà:
   _name := BotList[num].name;
+  if (_name = '') and (BotNames <> nil) then
+    for a := 0 to High(BotNames) do
+      if g_Player_ExistingName(BotNames[a]) then
+      begin
+        _name := BotNames[a];
+        Break;
+      end;
 
 // Ìîäåëü:
   _model := BotList[num].model;
@@ -1126,7 +1137,10 @@ begin
 // Ñîçäàåì áîòà:
   with g_Player_Get(g_Player_Create(_model, BotList[num].color, Team, True)) as TBot do
   begin
-    Name := _name;
+  // Åñëè èìåíè íåò, äåëàåì åãî èç UID áîòà
+    if _name = ''
+      then Name := Format('DFBOT%.5d', [UID])
+      else Name := _name;
 
     FDifficult.DiagFire := BotList[num].diag_fire;
     FDifficult.InvisFire := BotList[num].invis_fire;
@@ -1261,12 +1275,17 @@ begin
         model := config.ReadStr(IntToStr(a), 'model', '');  // Ìîäåëü
 
         // Êîìàíäà
-        if config.ReadStr(IntToStr(a), 'team', 'red') = 'red'
-          then team := TEAM_RED
-          else team := TEAM_BLUE;
+        s := config.ReadStr(IntToStr(a), 'team', '');
+        if s = 'red' then
+          team := TEAM_RED
+        else if s = 'blue' then
+          team := TEAM_BLUE
+        else
+          team := TEAM_NONE;
 
         // Öâåò ìîäåëè
         sa := parse(config.ReadStr(IntToStr(a), 'color', ''));
+        SetLength(sa, 3);
         color.R := StrToIntDef(sa[0], 0);
         color.G := StrToIntDef(sa[1], 0);
         color.B := StrToIntDef(sa[2], 0);
@@ -1482,6 +1501,7 @@ begin
         Name := gPlayers[a].FName;
         Team := gPlayers[a].FTeam;
         Frags := gPlayers[a].FFrags;
+        Assists := gPlayers[a].FAssists;
         Deaths := gPlayers[a].FDeath;
         Kills := gPlayers[a].FKills;
         Color := gPlayers[a].FModel.Color;
@@ -2332,13 +2352,8 @@ begin
         end;
 
       if t = HIT_WATER then
-      begin
-        g_GFX_Bubbles(FObj.X+PLAYER_RECT.X+(PLAYER_RECT.Width div 2),
-                      FObj.Y+PLAYER_RECT.Y-4, value div 2, 8, 4);
-        if Random(2) = 0
-          then g_Sound_PlayExAt('SOUND_GAME_BUBBLE1', FObj.X, FObj.Y)
-          else g_Sound_PlayExAt('SOUND_GAME_BUBBLE2', FObj.X, FObj.Y);
-      end;
+        g_Game_Effect_Bubbles(FObj.X+PLAYER_RECT.X+(PLAYER_RECT.Width div 2),
+                              FObj.Y+PLAYER_RECT.Y-4, value div 2, 8, 4);
     end;
 
   // Áóôåð óðîíà:
@@ -2769,7 +2784,7 @@ var
   X, Y, SY, a, p, m: Integer;
   tw, th: Word;
   cw, ch: Byte;
-  s: string;
+  s, t: string;
   stat: TPlayerStatArray;
 begin
   X := gPlayerScreenSize.X;
@@ -2825,10 +2840,12 @@ begin
     if gShowStat then
     begin
       s := IntToStr(Frags);
+      t := IntToStr(Assists);
       e_CharFont_GetSize(gMenuFont, s, tw, th);
       e_CharFont_PrintEx(gMenuFont, X-16-tw, Y, s, _RGB(255, 0, 0));
 
       s := '';
+      t := '';
       p := 1;
       m := 0;
       stat := g_Player_GetStats();
@@ -2844,10 +2861,16 @@ begin
           end;
       end;
 
+        // FRAGS
       s := IntToStr(p)+' / '+IntToStr(Length(stat))+' ';
       if Frags >= m then s := s+'+' else s := s+'-';
       s := s+IntToStr(Abs(Frags-m));
 
+        // ASSISTS
+      t := IntToStr(p)+' / '+IntToStr(Length(stat))+' ';
+      if Assists >= m then t := t+'+' else t := t+'-';
+      t := t+IntToStr(Abs(Assists-m));
+
       e_CharFont_GetSize(gMenuSmallFont, s, tw, th);
       e_CharFont_PrintEx(gMenuSmallFont, X-16-tw, Y+32, s, _RGB(255, 0, 0));
     end;
@@ -3829,6 +3852,31 @@ begin
   FNextWeapDelay := 0;
 end;
 
+
+// Assists block
+{procedure TPlayer.Assist(KillType: Byte; SpawnerUID: Word);
+var
+  DoAssists: Boolean;
+  AP: TPlayer;
+
+  procedure Accumulate(FDamage: Byte;);
+  begin
+
+  end;
+
+
+begin
+  DoAssists := (gGameSettings.GameMode = GM_TDM) or (gGameSettings.GameMode = GM_CTF);
+  if DoAssists then
+  begin
+    if (FAccumulatedDamage >= 65) then
+    begin
+      Inc(AP.FAssists);
+    end;
+  end;
+end;}
+
+
 function TPlayer.hasAmmoForWeapon (weapon: Byte): Boolean;
 begin
   result := false;
@@ -4505,6 +4553,7 @@ begin
   FNoTarget := False;
   FNoReload := False;
   FFrags := 0;
+  FAssists := 0;
   FLastFrag := 0;
   FComboEvnt := -1;
   FKills := 0;
@@ -5409,12 +5458,8 @@ begin
           FAir := 0;
       end
       else if (FAir mod 31 = 0) and not blockmon then
-      begin
-        g_GFX_Bubbles(FObj.X+PLAYER_RECT.X+(PLAYER_RECT.Width div 2), FObj.Y+PLAYER_RECT.Y-4, 5+Random(6), 8, 4);
-        if Random(2) = 0
-          then g_Sound_PlayExAt('SOUND_GAME_BUBBLE1', FObj.X, FObj.Y)
-          else g_Sound_PlayExAt('SOUND_GAME_BUBBLE2', FObj.X, FObj.Y);
-      end;
+        g_Game_Effect_Bubbles(FObj.X+PLAYER_RECT.X+(PLAYER_RECT.Width div 2),
+                              FObj.Y+PLAYER_RECT.Y-4, 5+Random(6), 8, 4);
     end else if FAir < AIR_DEF then
       FAir := AIR_DEF;
 
@@ -6149,6 +6194,8 @@ begin
   utils.writeInt(st, LongInt(FMonsterKills));
   // Ôðàãîâ
   utils.writeInt(st, LongInt(FFrags));
+  // Àññèñòîâ
+  utils.writeInt(st, LongInt(FAssists));
   // Ôðàãîâ ïîäðÿä
   utils.writeInt(st, Byte(FFragCombo));
   // Âðåìÿ ïîñëåäíåãî ôðàãà
@@ -6253,6 +6300,8 @@ begin
   FMonsterKills := utils.readLongInt(st);
   // Ôðàãîâ
   FFrags := utils.readLongInt(st);
+  // Àññèñòîâ
+  FAssists := utils.readLongInt(st);
   // Ôðàãîâ ïîäðÿä
   FFragCombo := utils.readByte(st);
   // Âðåìÿ ïîñëåäíåãî ôðàãà
@@ -6512,11 +6561,8 @@ begin
 
   if BodyInLiquid(0, 0) then
   begin
-    g_GFX_Bubbles(Obj.X+Obj.Rect.X+(Obj.Rect.Width div 2)+Random(3)-1,
-                  Obj.Y+Obj.Rect.Height+8, 1, 8, 4);
-    if Random(2) = 0
-      then g_Sound_PlayExAt('SOUND_GAME_BUBBLE1', FObj.X, FObj.Y)
-      else g_Sound_PlayExAt('SOUND_GAME_BUBBLE2', FObj.X, FObj.Y);
+    g_Game_Effect_Bubbles(Obj.X+Obj.Rect.X+(Obj.Rect.Width div 2)+Random(3)-1,
+                          Obj.Y+Obj.Rect.Height+8, 1, 8, 4);
     Exit;
   end;