diff --git a/src/game/g_weapons.pas b/src/game/g_weapons.pas
index 0c8788129a170f7def99259fbbe97c1e43e92ce2..4df78ad7533548aa4f98f97f29404278a35ba7df 100644 (file)
--- a/src/game/g_weapons.pas
+++ b/src/game/g_weapons.pas
ShotType := WEAPON_FLAMETHROWER;
Animation := nil;
TextureID := 0;
- Stopped := 0;
+ g_Frames_Get(TextureID, 'FRAMES_FLAME');
end;
end;
Shots[find_id].Obj.Accel.X := 0;
Shots[find_id].Obj.Accel.Y := 0;
Shots[find_id].SpawnerUID := Spawner;
+ if (ShotType = WEAPON_FLAMETHROWER) and (XV = 0) and (YV = 0) then
+ Shots[find_id].Stopped := 255
+ else
+ Shots[find_id].Stopped := 0;
Result := find_id;
end;
Shots[i].Obj.Vel.Y := (yd*s) div a;
Shots[i].Obj.Accel.X := 0;
Shots[i].Obj.Accel.Y := 0;
+ Shots[i].Stopped := 0;
if Shots[i].ShotType in [WEAPON_ROCKETLAUNCHER, WEAPON_BFG] then
Shots[i].Timeout := 900 // ~25 sec
else
procedure g_Weapon_flame(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1;
Silent: Boolean = False);
var
- find_id, FramesID: DWORD;
+ find_id: DWORD;
dx, dy: Integer;
begin
if WID < 0 then
triggers := nil;
Animation := nil;
TextureID := 0;
- Stopped := 0;
+ g_Frames_Get(TextureID, 'FRAMES_FLAME');
end;
Shots[find_id].SpawnerUID := SpawnerUID;
o: TObj;
spl: Boolean;
Loud: Boolean;
+ tcx, tcy: Integer;
begin
if Shots = nil then
Exit;
oldvx := Obj.Vel.X;
oldvy := Obj.Vel.Y;
// Àêòèâèðîâàòü òðèããåðû ïî ïóòè (êðîìå óæå àêòèâèðîâàííûõ):
- if g_Game_IsServer then
+ if (Stopped = 0) and g_Game_IsServer then
t := g_Triggers_PressR(Obj.X, Obj.Y, Obj.Rect.Width, Obj.Rect.Height,
SpawnerUID, ACTIVATE_SHOT, triggers)
else
(ShotType <> WEAPON_BSP_FIRE) and
(ShotType <> WEAPON_FLAMETHROWER);
- st := g_Obj_Move(@Obj, False, spl);
+ if Stopped = 0 then
+ st := g_Obj_Move(@Obj, False, spl)
+ else
+ st := 0;
if WordBool(st and MOVE_FALLOUT) or (Obj.X < -1000) or
(Obj.X > gMapInfo.Width+1000) or (Obj.Y < -1000) then
begin
Anim := TAnimation.Create(_id, False, 3);
Anim.Alpha := 0;
- g_GFX_OnceAnim(cx-4+Random(8)-(Anim.Width div 2),
- cy-4+Random(8)-(Anim.Height div 2),
+ tcx := Random(8);
+ tcy := Random(8);
+ g_GFX_OnceAnim(cx-4+tcx-(Anim.Width div 2),
+ cy-4+tcy-(Anim.Height div 2),
Anim, ONCEANIM_SMOKE);
Anim.Free();
end;
else
tf := 3;
- if (gTime mod tf = 0) and g_Frames_Get(_id, 'FRAMES_FLAME') then
+ if (gTime mod tf = 0) then
begin
- Anim := TAnimation.Create(_id, False, 2 + Random(2));
+ Anim := TAnimation.Create(TextureID, False, 2 + Random(2));
Anim.Alpha := 0;
case Stopped of
- 0: g_GFX_OnceAnim(cx-4+Random(8)-(Anim.Width div 2),
- cy-4+Random(8)-(Anim.Height div 2),
- Anim, ONCEANIM_SMOKE);
- MOVE_HITWALL: g_GFX_OnceAnim(cx-4+Random(8)-(Anim.Width div 2),
- cy-12+Random(24)-(Anim.Height div 2),
- Anim, ONCEANIM_SMOKE);
- MOVE_HITLAND: g_GFX_OnceAnim(cx-12+Random(24)-(Anim.Width div 2),
- cy-10+Random(8)-(Anim.Height div 2),
- Anim, ONCEANIM_SMOKE);
- MOVE_HITCEIL: g_GFX_OnceAnim(cx-12+Random(24)-(Anim.Width div 2),
- cy+6+Random(8)-(Anim.Height div 2),
- Anim, ONCEANIM_SMOKE);
+ MOVE_HITWALL: begin tcx := cx-4+Random(8); tcy := cy-12+Random(24); end;
+ MOVE_HITLAND: begin tcx := cx-12+Random(24); tcy := cy-10+Random(8); end;
+ MOVE_HITCEIL: begin tcx := cx-12+Random(24); tcy := cy+6+Random(8); end;
+ else begin tcx := cx-4+Random(8); tcy := cy-4+Random(8); end;
end;
+ g_GFX_OnceAnim(tcx-(Anim.Width div 2), tcy-(Anim.Height div 2), Anim, ONCEANIM_SMOKE);
Anim.Free();
end;
end;
begin
if (Shots[i].ShotType = WEAPON_ROCKETLAUNCHER) then
e_DrawAdv(TextureID, Obj.X, Obj.Y, 0, True, False, a, @p, M_NONE)
- else
+ else if (Shots[i].ShotType <> WEAPON_FLAMETHROWER) then
e_Draw(TextureID, Obj.X, Obj.Y, 0, True, False);
end;