diff --git a/src/game/g_player.pas b/src/game/g_player.pas
index dee10aa191af47131130ed12d2b102299d1a2d60..0cde3c089c1dfe4d0a5d9098721c4e4717d07e4e 100644 (file)
--- a/src/game/g_player.pas
+++ b/src/game/g_player.pas
FDummy: Boolean;
FFireTime: Integer;
FHandicap: Integer;
+ FWaitForFirstSpawn: Boolean; // set to `true` in server, used to spawn a player on first full state request
// debug: viewport offset
viewPortX, viewPortY, viewPortW, viewPortH: Integer;
gTeamStat: TTeamStat;
gFly: Boolean = False;
gAimLine: Boolean = False;
- gChatBubble: Byte = 0;
+ gChatBubble: Integer = 0;
gPlayerIndicator: Integer = 1;
gPlayerIndicatorStyle: Integer = 0;
gNumBots: Word = 0;
g_holmes,
{$ENDIF}
e_log, g_map, g_items, g_console, g_gfx, Math,
- g_options, g_triggers, g_menu, g_game, g_grid,
+ g_options, g_triggers, g_menu, g_game, g_grid, e_res,
wadreader, g_main, g_monsters, CONFIG, g_language,
g_net, g_netmsg, g_window,
utils, xstreams;
a, b: Integer;
config: TConfig;
sa: SSArray;
+ path: AnsiString;
begin
BotNames := nil;
- if not FileExists(DataDir + BOTNAMES_FILENAME) then
+ path := BOTNAMES_FILENAME;
+ if e_FindResource(DataDirs, path) = false then
Exit;
// ×èòàåì âîçìîæíûå èìåíà áîòîâ èç ôàéëà:
- AssignFile(F, DataDir + BOTNAMES_FILENAME);
+ AssignFile(F, path);
Reset(F);
while not EOF(F) do
g_Bot_MixNames();
// ×èòàåì ôàéë ñ ïàðàìåòðàìè áîòîâ:
- config := TConfig.CreateFile(DataDir + BOTLIST_FILENAME);
+ config := TConfig.CreateFile(path);
BotList := nil;
a := 0;
FJustTeleported := False;
FNetTime := 0;
+ FWaitForFirstSpawn := false;
+
resetWeaponQueue();
end;
var
indX, indY: Integer;
indW, indH: Word;
+ indA: Single;
+ a: TDFPoint;
nW, nH: Byte;
ID: DWORD;
c: TRGB;
if g_Texture_Get('TEXTURE_PLAYER_INDICATOR', ID) then
begin
e_GetTextureSize(ID, @indW, @indH);
- indX := FObj.X + FObj.Rect.X + (FObj.Rect.Width - indW) div 2;
- indY := FObj.Y - indH;
+ a.X := indW div 2;
+ a.Y := indH div 2;
+
+ if (FObj.X + FObj.Rect.X) < 0 then
+ begin
+ indA := 90;
+ indX := FObj.X + FObj.Rect.X + FObj.Rect.Width;
+ indY := FObj.Y + FObj.Rect.Y + (FObj.Rect.Height - indW) div 2;
+ end
+
+ else if (FObj.X + FObj.Rect.X + FObj.Rect.Width) > Max(gMapInfo.Width, gPlayerScreenSize.X) then
+ begin
+ indA := 270;
+ indX := FObj.X + FObj.Rect.X - indH;
+ indY := FObj.Y + FObj.Rect.Y + (FObj.Rect.Height - indW) div 2;
+ end
+
+ else if (fObj.Y - indH) < 0 then
+ begin
+ indA := 180;
+ indX := FObj.X + FObj.Rect.X + (FObj.Rect.Width - indW) div 2;
+ indY := FObj.Y + FObj.Rect.Y + FObj.Rect.Height;
+ end
+
+ else
+ begin
+ indA := 0;
+ indX := FObj.X + FObj.Rect.X + (FObj.Rect.Width - indW) div 2;
+ indY := FObj.Y - indH;
+ end;
+
+ indX := EnsureRange(indX, 0, Max(gMapInfo.Width, gPlayerScreenSize.X) - indW);
+ indY := EnsureRange(indY, 0, Max(gMapInfo.Height, gPlayerScreenSize.Y) - indH);
c := e_Colors;
e_Colors := Color;
- e_Draw(ID, indX, indY, 0, True, False);
+ e_DrawAdv(ID, indX, indY, 0, True, False, indA, @a);
e_Colors := c;
end;
end;
result := false;
case weapon of
WEAPON_KASTET, WEAPON_SAW: result := true;
- WEAPON_SHOTGUN1, WEAPON_SHOTGUN2: result := (FAmmo[A_SHELLS] > 0);
- WEAPON_PISTOL, WEAPON_CHAINGUN, WEAPON_SUPERPULEMET: result := (FAmmo[A_BULLETS] > 0);
+ WEAPON_SHOTGUN1, WEAPON_SHOTGUN2, WEAPON_SUPERPULEMET: result := (FAmmo[A_SHELLS] > 0);
+ WEAPON_PISTOL, WEAPON_CHAINGUN: result := (FAmmo[A_BULLETS] > 0);
WEAPON_ROCKETLAUNCHER: result := (FAmmo[A_ROCKETS] > 0);
WEAPON_PLASMA, WEAPON_BFG: result := (FAmmo[A_CELLS] > 0);
WEAPON_FLAMETHROWER: result := (FAmmo[A_FUEL] > 0);