X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_weapons.pas;h=81db80314333fb159b8396ad7bafabf84fa22700;hb=7d66e4504587cde0a3f9f3bbc0d48509a80c3056;hp=b5e46d11e930755b647728f1c8f9eae179555c98;hpb=6f7b10d6ba67d8ac7fb794acfbca8f33ad78449d;p=d2df-sdl.git diff --git a/src/game/g_weapons.pas b/src/game/g_weapons.pas index b5e46d1..81db803 100644 --- a/src/game/g_weapons.pas +++ b/src/game/g_weapons.pas @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . *) -{$MODE DELPHI} +{$INCLUDE ../shared/a_modes.inc} unit g_weapons; interface @@ -88,6 +88,8 @@ procedure g_Weapon_DestroyShot(I: Integer; X, Y: Integer; Loud: Boolean = True); procedure g_Weapon_SaveState(var Mem: TBinMemoryWriter); procedure g_Weapon_LoadState(var Mem: TBinMemoryReader); +procedure g_Weapon_AddDynLights(); + const WEAPON_KASTET = 0; WEAPON_SAW = 1; @@ -725,8 +727,9 @@ var if ChkTeam then if HitPlayer(gPlayers[i], d, obj^.Vel.X, obj^.Vel.Y, SpawnerUID, t) then begin - gPlayers[i].Push((obj^.Vel.X+obj^.Accel.X)*IfThen(t = HIT_BFG, 8, 1) div 4, - (obj^.Vel.Y+obj^.Accel.Y)*IfThen(t = HIT_BFG, 8, 1) div 4); + if t <> HIT_FLAME then + gPlayers[i].Push((obj^.Vel.X+obj^.Accel.X)*IfThen(t = HIT_BFG, 8, 1) div 4, + (obj^.Vel.Y+obj^.Accel.Y)*IfThen(t = HIT_BFG, 8, 1) div 4); if t = HIT_BFG then g_Game_DelayEvent(DE_BFGHIT, 1000, SpawnerUID); Result := True; @@ -746,8 +749,9 @@ var if (gMonsters[i] <> nil) and gMonsters[i].Live and g_Obj_Collide(obj, @gMonsters[i].Obj) then if HitMonster(gMonsters[i], d, obj^.Vel.X, obj^.Vel.Y, SpawnerUID, t) then begin - gMonsters[i].Push((obj^.Vel.X+obj^.Accel.X)*IfThen(t = HIT_BFG, 8, 1) div 4, - (obj^.Vel.Y+obj^.Accel.Y)*IfThen(t = HIT_BFG, 8, 1) div 4); + if t <> HIT_FLAME then + gMonsters[i].Push((obj^.Vel.X+obj^.Accel.X)*IfThen(t = HIT_BFG, 8, 1) div 4, + (obj^.Vel.Y+obj^.Accel.Y)*IfThen(t = HIT_BFG, 8, 1) div 4); Result := True; break; end; @@ -1354,7 +1358,7 @@ end; 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 @@ -1711,6 +1715,7 @@ var o: TObj; spl: Boolean; Loud: Boolean; + tcx, tcy: Integer; begin if Shots = nil then Exit; @@ -1819,6 +1824,7 @@ begin Anim := TAnimation.Create(TextureID, False, 8); Anim.Blending := False; g_GFX_OnceAnim((Obj.X+32)-58, (Obj.Y+8)-36, Anim); + g_DynLightExplosion((Obj.X+32), (Obj.Y+8), 64, 1, 0, 0); Anim.Free(); end; end @@ -1829,6 +1835,7 @@ begin Anim := TAnimation.Create(TextureID, False, 6); Anim.Blending := False; g_GFX_OnceAnim(cx-64, cy-64, Anim); + g_DynLightExplosion(cx, cy, 64, 1, 0, 0); Anim.Free(); end; end; @@ -1886,6 +1893,7 @@ begin Anim.Blending := False; g_GFX_OnceAnim(cx-16, cy-16, Anim); Anim.Free(); + g_DynLightExplosion(cx, cy, 32, 0, 0.5, 0.5); end; g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEPLASMA', Obj.X, Obj.Y); @@ -1911,8 +1919,10 @@ begin 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; @@ -1961,20 +1971,14 @@ begin Anim := TAnimation.Create(TextureID, False, 2 + Random(2)); Anim.Alpha := 0; case Stopped of - 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); - else g_GFX_OnceAnim(cx-4+Random(8)-(Anim.Width div 2), - cy-4+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(); + //g_DynLightExplosion(tcx, tcy, 1, 1, 0.8, 0.3); end; end; @@ -2004,6 +2008,7 @@ begin Anim.Blending := False; g_GFX_OnceAnim(cx-64, cy-64, Anim); Anim.Free(); + g_DynLightExplosion(cx, cy, 96, 0, 1, 0); end; g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBFG', Obj.X, Obj.Y); @@ -2428,4 +2433,38 @@ begin end; end; + +procedure g_Weapon_AddDynLights(); +var + i: Integer; +begin + if Shots = nil then Exit; + for i := 0 to High(Shots) do + begin + if Shots[i].ShotType = 0 then continue; + if (Shots[i].ShotType = WEAPON_ROCKETLAUNCHER) or + (Shots[i].ShotType = WEAPON_BARON_FIRE) or + (Shots[i].ShotType = WEAPON_MANCUB_FIRE) or + (Shots[i].ShotType = WEAPON_SKEL_FIRE) or + (Shots[i].ShotType = WEAPON_IMP_FIRE) or + (Shots[i].ShotType = WEAPON_CACO_FIRE) or + (Shots[i].ShotType = WEAPON_MANCUB_FIRE) or + (Shots[i].ShotType = WEAPON_BSP_FIRE) or + (Shots[i].ShotType = WEAPON_PLASMA) or + (Shots[i].ShotType = WEAPON_BFG) or + (Shots[i].ShotType = WEAPON_FLAMETHROWER) or + false then + begin + if (Shots[i].ShotType = WEAPON_PLASMA) then + g_AddDynLight(Shots[i].Obj.X+(Shots[i].Obj.Rect.Width div 2), Shots[i].Obj.Y+(Shots[i].Obj.Rect.Height div 2), 128, 0, 0.3, 1, 0.4) + else if (Shots[i].ShotType = WEAPON_BFG) then + g_AddDynLight(Shots[i].Obj.X+(Shots[i].Obj.Rect.Width div 2), Shots[i].Obj.Y+(Shots[i].Obj.Rect.Height div 2), 128, 0, 1, 0, 0.5) + else if (Shots[i].ShotType = WEAPON_FLAMETHROWER) then + g_AddDynLight(Shots[i].Obj.X+(Shots[i].Obj.Rect.Width div 2), Shots[i].Obj.Y+(Shots[i].Obj.Rect.Height div 2), 42, 1, 0.8, 0, 0.4) + else + g_AddDynLight(Shots[i].Obj.X+(Shots[i].Obj.Rect.Width div 2), Shots[i].Obj.Y+(Shots[i].Obj.Rect.Height div 2), 128, 1, 0, 0, 0.4); + end; + end; +end; + end.