diff --git a/src/game/g_player.pas b/src/game/g_player.pas
index ffb5ce93e6aa5eb070dce8dfe2b5aa5c1735d484..0522063cc24e07670a0c095dc391e2fadc56b3b8 100644 (file)
--- a/src/game/g_player.pas
+++ b/src/game/g_player.pas
FSavedState: TPlayerSavedState;
FModel: TPlayerModel;
+ FPunchAnim: TAnimation;
FActionPrior: Byte;
FActionAnim: Byte;
FActionForce: Boolean;
procedure SetAction(Action: Byte; Force: Boolean = False);
procedure OnDamage(Angle: SmallInt); virtual;
function firediry(): Integer;
+ procedure DoPunch();
procedure Run(Direction: TDirection);
procedure NextWeapon();
implementation
uses
+{$IFDEF USE_NANOGL}
+ nanoGL,
+{$ELSE}
+ GL,
+{$ENDIF}
e_log, g_map, g_items, g_console, g_gfx, Math,
g_options, g_triggers, g_menu, g_game, g_grid,
wadreader, g_main, g_monsters, CONFIG, g_language,
- g_net, g_netmsg, g_window, GL, g_holmes,
+ g_net, g_netmsg, g_window, g_holmes,
utils, xstreams;
const PLR_SAVE_VERSION = 0;
FJetSoundOn.Free();
FJetSoundOff.Free();
FModel.Free();
+ if FPunchAnim <> nil then
+ FPunchAnim.Free();
inherited;
end;
ID: DWORD;
w, h: Word;
dr: Boolean;
+ Mirror: TMirrorType;
begin
if FAlive then
begin
+ if Direction = TDirection.D_RIGHT then
+ Mirror := TMirrorType.None
+ else
+ Mirror := TMirrorType.Horizontal;
+
+ if FPunchAnim <> nil then
+ FPunchAnim.Draw(FObj.X+IfThen(Direction = TDirection.D_LEFT, 15-FObj.Rect.X, FObj.Rect.X-15),
+ FObj.Y+FObj.Rect.Y-11, Mirror);
+
if (FMegaRulez[MR_INVUL] > gTime) and (gPlayerDrawn <> Self) then
if g_Texture_Get('TEXTURE_PLAYER_INVULPENTA', ID) then
begin
e_DrawFillQuad(0, 0, gPlayerScreenSize.X-1, gPlayerScreenSize.Y-1, 150, 200, 150, 255-h*50);
end;
+procedure TPlayer.DoPunch();
+var
+ id: DWORD;
+begin
+ if FPunchAnim = nil then begin
+ g_Frames_Get(id, 'FRAMES_PUNCH');
+ FPunchAnim := TAnimation.Create(id, False, 1);
+ end else
+ FPunchAnim.reset();
+end;
+
procedure TPlayer.Fire();
var
f, DidFire: Boolean;
locobj.Accel.X := xd-wx;
locobj.Accel.y := yd-wy;
+ DoPunch();
+
if g_Weapon_Hit(@locobj, 50, FUID, HIT_SOME) <> 0 then
g_Sound_PlayExAt('SOUND_WEAPON_HITBERSERK', FObj.X, FObj.Y)
else
FSpectatePlayer := -1;
FSpawned := True;
+ if (gPlayer1 = nil) and (gLMSPID1 = FUID) then
+ gPlayer1 := self;
+ if (gPlayer2 = nil) and (gLMSPID2 = FUID) then
+ gPlayer2 := self;
+
if g_Game_IsNet then
begin
MH_SEND_PlayerPos(True, FUID, NET_EVERYONE);
FLoss := 0;
end;
+ if FAlive and (FPunchAnim <> nil) then
+ FPunchAnim.Update();
+
if FAlive and (gFly or FJetpack) then
FlySmoke();
locobj.Accel.X := xd-wx;
locobj.Accel.y := yd-wy;
+ DoPunch();
+
if g_Weapon_Hit(@locobj, 50, FUID, HIT_SOME) <> 0 then
g_Sound_PlayExAt('SOUND_WEAPON_HITBERSERK', FObj.X, FObj.Y)
else