X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_player.pas;h=92e2902aa82105d0169cdc71664e1797e9f95906;hb=d89c8f47a07275c25006502fe98e9428be12d788;hp=19d6be55027fbad4ea488a2915b2d034f5a464e0;hpb=51998d817120cd3833df7bae3d355642fd4abde5;p=d2df-sdl.git diff --git a/src/game/g_player.pas b/src/game/g_player.pas index 19d6be5..92e2902 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -573,7 +573,7 @@ type TTeamStat = Array [TEAM_RED..TEAM_BLUE] of record - Goals: SmallInt; + Score: SmallInt; end; var @@ -600,6 +600,10 @@ procedure g_Gibs_SetMax(Count: Word); 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; @@ -729,6 +733,8 @@ var 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; @@ -796,6 +802,26 @@ begin 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; @@ -1488,8 +1514,8 @@ procedure g_Player_ResetAll(Force, Silent: Boolean); 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 @@ -2299,8 +2325,13 @@ 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; end; // Áóôåð óðîíà: @@ -2738,7 +2769,7 @@ begin 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 @@ -2755,7 +2786,7 @@ begin 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]); @@ -2770,7 +2801,7 @@ begin 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; @@ -3479,7 +3510,7 @@ begin 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); @@ -3506,7 +3537,7 @@ begin 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); @@ -3667,7 +3698,7 @@ begin 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 @@ -3677,7 +3708,7 @@ begin 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 @@ -5373,10 +5404,9 @@ begin 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); + 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; end else if FAir < AIR_DEF then FAir := AIR_DEF; @@ -5584,10 +5614,9 @@ end; procedure TPlayer.NetFire(Wpn: Byte; X, Y, AX, AY: Integer; WID: Integer = -1); var locObj: TObj; - F: Boolean; + visible: Boolean = True; WX, WY, XD, YD: Integer; begin - F := False; WX := X; WY := Y; XD := AX; @@ -5596,6 +5625,7 @@ begin case FCurrWeap of WEAPON_KASTET: begin + visible := False; DoPunch(); if R_BERSERK in FRulez then begin @@ -5637,14 +5667,12 @@ begin FSawSoundSelect.Stop(); FSawSound.PlayAt(FObj.X, FObj.Y); end; - f := True; end; WEAPON_PISTOL: begin g_Sound_PlayExAt('SOUND_WEAPON_FIREPISTOL', GameX, Gamey); FFireAngle := FAngle; - f := True; g_Player_CreateShell(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, GameVelX, GameVelY-2, SHELL_BULLET); end; @@ -5653,7 +5681,6 @@ begin begin g_Sound_PlayExAt('SOUND_WEAPON_FIRESHOTGUN', Gamex, Gamey); FFireAngle := FAngle; - f := True; FShellTimer := 10; FShellType := SHELL_SHELL; end; @@ -5662,7 +5689,6 @@ begin begin g_Sound_PlayExAt('SOUND_WEAPON_FIRESHOTGUN2', Gamex, Gamey); FFireAngle := FAngle; - f := True; FShellTimer := 13; FShellType := SHELL_DBLSHELL; end; @@ -5671,7 +5697,6 @@ begin begin g_Sound_PlayExAt('SOUND_WEAPON_FIRECGUN', Gamex, Gamey); FFireAngle := FAngle; - f := True; g_Player_CreateShell(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, GameVelX, GameVelY-2, SHELL_BULLET); end; @@ -5680,28 +5705,24 @@ begin begin g_Weapon_Rocket(wx, wy, xd, yd, FUID, WID); FFireAngle := FAngle; - f := True; end; WEAPON_PLASMA: begin g_Weapon_Plasma(wx, wy, xd, yd, FUID, WID); FFireAngle := FAngle; - f := True; end; WEAPON_BFG: begin g_Weapon_BFGShot(wx, wy, xd, yd, FUID, WID); FFireAngle := FAngle; - f := True; end; WEAPON_SUPERPULEMET: begin g_Sound_PlayExAt('SOUND_WEAPON_FIRESHOTGUN', Gamex, Gamey); FFireAngle := FAngle; - f := True; g_Player_CreateShell(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, GameVelX, GameVelY-2, SHELL_SHELL); end; @@ -5711,11 +5732,10 @@ begin g_Weapon_flame(wx, wy, xd, yd, FUID, WID); FlamerOn; FFireAngle := FAngle; - f := True; end; end; - if not f then Exit; + if not visible then Exit; if (FAngle = 0) or (FAngle = 180) then SetAction(A_ATTACK) else if (FAngle = ANGLE_LEFTDOWN) or (FAngle = ANGLE_RIGHTDOWN) then SetAction(A_ATTACKDOWN) @@ -5808,7 +5828,7 @@ begin 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 @@ -6487,10 +6507,9 @@ begin 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); + 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); Exit; end;