diff --git a/src/game/g_player.pas b/src/game/g_player.pas
index 1021d36f9646582ff5ae7bd918314e853b7a1a1a..06176d94272587199f1e6c7f910cb046fc5565f4 100644 (file)
--- a/src/game/g_player.pas
+++ b/src/game/g_player.pas
TTeamStat = Array [TEAM_RED..TEAM_BLUE] of
record
- Goals: SmallInt;
+ Score: SmallInt;
end;
var
function g_Gibs_GetMax(): Word;
procedure g_Corpses_SetMax(Count: Word);
function g_Corpses_GetMax(): Word;
+procedure g_Force_Model_Set(Mode: Word);
+function g_Force_Model_Get(): Word;
+procedure g_Forced_Model_SetName(Model: String);
+function g_Forced_Model_GetName(): String;
procedure g_Shells_SetMax(Count: Word);
function g_Shells_GetMax(): Word;
MaxGibs: Word = 150;
MaxCorpses: Word = 20;
MaxShells: Word = 300;
+ ForceModel: Word = 0;
+ ForcedModelName: String = STD_PLAYER_MODEL;
CurrentGib: Integer = 0;
CurrentShell: Integer = 0;
BotNames: Array of String;
Result := MaxCorpses;
end;
+procedure g_Force_Model_Set(Mode: Word);
+begin
+ ForceModel := Mode;
+end;
+
+function g_Force_Model_Get(): Word;
+begin
+ Result := ForceModel;
+end;
+
+procedure g_Forced_Model_SetName(Model: String);
+begin
+ ForcedModelName := Model;
+end;
+
+function g_Forced_Model_GetName(): String;
+begin
+ Result := ForcedModelName;
+end;
+
function g_Player_Create(ModelName: String; Color: TRGB; Team: Byte; Bot: Boolean): Word;
var
a: Integer;
gPlayers[a].FActualModelName := ModelName;
gPlayers[a].SetModel(ModelName);
+ if Bot and (g_Force_Model_Get() <> 0) then
+ gPlayers[a].SetModel(g_Forced_Model_GetName());
// Íåò ìîäåëè - ñîçäàíèå íå âîçìîæíî:
if gPlayers[a].FModel = nil then
// create entity and load state
if Bot then
- gPlayers[a] := TBot.Create()
+ begin
+ gPlayers[a] := TBot.Create();
+ if (g_Force_Model_Get() <> 0) then
+ gPlayers[a].SetModel(g_Forced_Model_GetName());
+ end
else
gPlayers[a] := TPlayer.Create();
gPlayers[a].FPhysics := True; // ???
path: AnsiString;
begin
BotNames := nil;
+ BotList := nil;
path := BOTNAMES_FILENAME;
- if e_FindResource(DataDirs, path) = false then
- Exit;
-
-// ×èòàåì âîçìîæíûå èìåíà áîòîâ èç ôàéëà:
- AssignFile(F, path);
- Reset(F);
-
- while not EOF(F) do
+ if e_FindResource(DataDirs, path) then
begin
- ReadLn(F, s);
+ // ×èòàåì âîçìîæíûå èìåíà áîòîâ èç ôàéëà:
+ AssignFile(F, path);
+ Reset(F);
- s := Trim(s);
- if s = '' then
- Continue;
+ while not EOF(F) do
+ begin
+ ReadLn(F, s);
- SetLength(BotNames, Length(BotNames)+1);
- BotNames[High(BotNames)] := s;
- end;
+ s := Trim(s);
+ if s = '' then
+ Continue;
- CloseFile(F);
+ SetLength(BotNames, Length(BotNames)+1);
+ BotNames[High(BotNames)] := s;
+ end;
-// Ïåðåìåøèâàåì èõ:
- g_Bot_MixNames();
+ CloseFile(F);
-// ×èòàåì ôàéë ñ ïàðàìåòðàìè áîòîâ:
- config := TConfig.CreateFile(path);
- BotList := nil;
- a := 0;
+ // Ïåðåìåøèâàåì èõ:
+ g_Bot_MixNames();
+ end;
- while config.SectionExists(IntToStr(a)) do
+ path := BOTLIST_FILENAME;
+ if e_FindResource(DataDirs, path) then
begin
- SetLength(BotList, Length(BotList)+1);
+ // ×èòàåì ôàéë ñ ïàðàìåòðàìè áîòîâ:
+ config := TConfig.CreateFile(path);
+ a := 0;
- with BotList[High(BotList)] do
+ while config.SectionExists(IntToStr(a)) do
begin
- // Èìÿ áîòà:
- name := config.ReadStr(IntToStr(a), 'name', '');
- // Ìîäåëü:
- model := config.ReadStr(IntToStr(a), 'model', '');
- // Êîìàíäà:
- if config.ReadStr(IntToStr(a), 'team', 'red') = 'red' then
- team := TEAM_RED
- else
- team := TEAM_BLUE;
- // Öâåò ìîäåëè:
- sa := parse(config.ReadStr(IntToStr(a), 'color', ''));
- color.R := StrToIntDef(sa[0], 0);
- color.G := StrToIntDef(sa[1], 0);
- color.B := StrToIntDef(sa[2], 0);
- // Âåðîÿòíîñòü ñòðåëüáû ïîä óãëîì:
- diag_fire := config.ReadInt(IntToStr(a), 'diag_fire', 0);
- // Âåðîÿòíîñòü îòâåòíîãî îãíÿ ïî íåâèäèìîìó ñîïåðíèêó:
- invis_fire := config.ReadInt(IntToStr(a), 'invis_fire', 0);
- // Òî÷íîñòü ñòðåëüáû ïîä óãëîì:
- diag_precision := config.ReadInt(IntToStr(a), 'diag_precision', 0);
- // Òî÷íîñòü ñòðåëüáû â ïîëåòå:
- fly_precision := config.ReadInt(IntToStr(a), 'fly_precision', 0);
- // Òî÷íîñòü óêëîíåíèÿ îò ñíàðÿäîâ:
- cover := config.ReadInt(IntToStr(a), 'cover', 0);
- // Âåðîÿòíîñòü ïðûæêà ïðè ïðèáëèæåíèè ñîïåðíèêà:
- close_jump := config.ReadInt(IntToStr(a), 'close_jump', 0);
- // Ïðèîðèòåòû îðóæèÿ äëÿ äàëüíåãî áîÿ:
- sa := parse(config.ReadStr(IntToStr(a), 'w_prior1', ''));
- if Length(sa) = 10 then
- for b := 0 to 9 do
- w_prior1[b] := EnsureRange(StrToInt(sa[b]), 0, 9);
- // Ïðèîðèòåòû îðóæèÿ äëÿ áëèæíåãî áîÿ:
- sa := parse(config.ReadStr(IntToStr(a), 'w_prior2', ''));
- if Length(sa) = 10 then
- for b := 0 to 9 do
- w_prior2[b] := EnsureRange(StrToInt(sa[b]), 0, 9);
-
- {sa := parse(config.ReadStr(IntToStr(a), 'w_prior3', ''));
- if Length(sa) = 10 then
- for b := 0 to 9 do
- w_prior3[b] := EnsureRange(StrToInt(sa[b]), 0, 9);}
+ SetLength(BotList, Length(BotList)+1);
+
+ with BotList[High(BotList)] do
+ begin
+ name := config.ReadStr(IntToStr(a), 'name', ''); // Èìÿ áîòà
+ model := config.ReadStr(IntToStr(a), 'model', ''); // Ìîäåëü
+
+ // Êîìàíäà
+ if config.ReadStr(IntToStr(a), 'team', 'red') = 'red'
+ then team := TEAM_RED
+ else team := TEAM_BLUE;
+
+ // Öâåò ìîäåëè
+ sa := parse(config.ReadStr(IntToStr(a), 'color', ''));
+ color.R := StrToIntDef(sa[0], 0);
+ color.G := StrToIntDef(sa[1], 0);
+ color.B := StrToIntDef(sa[2], 0);
+
+ diag_fire := config.ReadInt(IntToStr(a), 'diag_fire', 0); // Âåðîÿòíîñòü ñòðåëüáû ïîä óãëîì
+ invis_fire := config.ReadInt(IntToStr(a), 'invis_fire', 0); // Âåðîÿòíîñòü îòâåòíîãî îãíÿ ïî íåâèäèìîìó ñîïåðíèêó
+ diag_precision := config.ReadInt(IntToStr(a), 'diag_precision', 0); // Òî÷íîñòü ñòðåëüáû ïîä óãëîì
+ fly_precision := config.ReadInt(IntToStr(a), 'fly_precision', 0); // Òî÷íîñòü ñòðåëüáû â ïîëåòå
+ cover := config.ReadInt(IntToStr(a), 'cover', 0); // Òî÷íîñòü óêëîíåíèÿ îò ñíàðÿäîâ
+ close_jump := config.ReadInt(IntToStr(a), 'close_jump', 0); // Âåðîÿòíîñòü ïðûæêà ïðè ïðèáëèæåíèè ñîïåðíèêà
+
+ // Ïðèîðèòåòû îðóæèÿ äëÿ äàëüíåãî áîÿ
+ sa := parse(config.ReadStr(IntToStr(a), 'w_prior1', ''));
+ if Length(sa) = 10 then
+ for b := 0 to 9 do
+ w_prior1[b] := EnsureRange(StrToInt(sa[b]), 0, 9);
+
+ // Ïðèîðèòåòû îðóæèÿ äëÿ áëèæíåãî áîÿ
+ sa := parse(config.ReadStr(IntToStr(a), 'w_prior2', ''));
+ if Length(sa) = 10 then
+ for b := 0 to 9 do
+ w_prior2[b] := EnsureRange(StrToInt(sa[b]), 0, 9);
+
+ {sa := parse(config.ReadStr(IntToStr(a), 'w_prior3', ''));
+ if Length(sa) = 10 then
+ for b := 0 to 9 do
+ w_prior3[b] := EnsureRange(StrToInt(sa[b]), 0, 9);}
+ end;
+
+ a += 1;
end;
- a := a + 1;
+ config.Free();
end;
- config.Free();
SetLength(SavedStates, 0);
end;
var
i: Integer;
begin
- gTeamStat[TEAM_RED].Goals := 0;
- gTeamStat[TEAM_BLUE].Goals := 0;
+ gTeamStat[TEAM_RED].Score := 0;
+ gTeamStat[TEAM_BLUE].Score := 0;
if gPlayers <> nil then
for i := 0 to High(gPlayers) do
SY := gPlayerScreenSize.Y;
Y := 0;
- if gShowGoals and (gGameSettings.GameMode in [GM_TDM, GM_CTF]) then
+ if gShowScore and (gGameSettings.GameMode in [GM_TDM, GM_CTF]) then
begin
if gGameSettings.GameMode = GM_CTF then
a := 32 + 8
e_Draw(ID, X-16-32, 240-72-4, 0, True, False);
end;
- s := IntToStr(gTeamStat[TEAM_RED].Goals);
+ s := IntToStr(gTeamStat[TEAM_RED].Score);
e_CharFont_GetSize(gMenuFont, s, tw, th);
e_CharFont_PrintEx(gMenuFont, X-16-a-tw, 240-72-4, s, TEAMCOLOR[TEAM_RED]);
e_Draw(ID, X-16-32, 240-32-4, 0, True, False);
end;
- s := IntToStr(gTeamStat[TEAM_BLUE].Goals);
+ s := IntToStr(gTeamStat[TEAM_BLUE].Score);
e_CharFont_GetSize(gMenuFont, s, tw, th);
e_CharFont_PrintEx(gMenuFont, X-16-a-tw, 240-32-4, s, TEAMCOLOR[TEAM_BLUE]);
end;
if Srv then
begin
if gGameSettings.GameMode = GM_TDM then
- Dec(gTeamStat[FTeam].Goals);
+ Dec(gTeamStat[FTeam].Score);
if DoFrags or (gGameSettings.GameMode = GM_TDM) then
begin
Dec(FFrags);
end;
if (gGameSettings.GameMode = GM_TDM) and DoFrags then
- Inc(gTeamStat[KP.Team].Goals,
+ Inc(gTeamStat[KP.Team].Score,
IfThen(SameTeam(FUID, SpawnerUID), -1, 1));
if netsrv then MH_SEND_PlayerStats(SpawnerUID);
g_Game_Message(Format(_lc[I_MESSAGE_TLMS_WIN], [AnsiUpperCase(_lc[I_GAME_TEAM_RED])]), 144);
if Netsrv then
MH_SEND_GameEvent(NET_EV_TLMS_WIN, TEAM_RED);
- Inc(gTeamStat[TEAM_RED].Goals);
+ Inc(gTeamStat[TEAM_RED].Score);
gLMSRespawn := LMS_RESPAWN_FINAL;
gLMSRespawnTime := gTime + 5000;
end
g_Game_Message(Format(_lc[I_MESSAGE_TLMS_WIN], [AnsiUpperCase(_lc[I_GAME_TEAM_BLUE])]), 144);
if Netsrv then
MH_SEND_GameEvent(NET_EV_TLMS_WIN, TEAM_BLUE);
- Inc(gTeamStat[TEAM_BLUE].Goals);
+ Inc(gTeamStat[TEAM_BLUE].Score);
gLMSRespawn := LMS_RESPAWN_FINAL;
gLMSRespawnTime := gTime + 5000;
end
if not sound_cap_flag[a].IsPlaying() then
sound_cap_flag[a].Play();
- gTeamStat[FTeam].Goals := gTeamStat[FTeam].Goals + 1;
+ gTeamStat[FTeam].Score += 1;
Result := True;
if g_Game_IsNet then