X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_weapons.pas;h=12d20a4b6be36f90b176903f3c4a3b68ba8fb33b;hb=2490c26ff92664ba96915ef1a7c6bd38c8137bda;hp=fb89fcc3a1f6b09871823aedd1d0183abc827243;hpb=e575ce001fa1150001a91db8c019f72a5ff48b32;p=d2df-sdl.git diff --git a/src/game/g_weapons.pas b/src/game/g_weapons.pas index fb89fcc..12d20a4 100644 --- a/src/game/g_weapons.pas +++ b/src/game/g_weapons.pas @@ -112,7 +112,7 @@ implementation uses Math, g_map, g_player, g_gfx, g_sound, g_panel, - g_console, g_options, g_game, r_textures, r_animations, + g_console, g_options, g_game, g_triggers, MAPDEF, e_log, g_monsters, g_saveload, g_language, g_netmsg, g_grid, geom, binheap, hashtable, utils, xstreams; @@ -1137,9 +1137,6 @@ begin g_Sound_CreateWADEx('SOUND_PLAYER_SHELL1', GameWAD+':SOUNDS\SHELL1'); g_Sound_CreateWADEx('SOUND_PLAYER_SHELL2', GameWAD+':SOUNDS\SHELL2'); - g_Texture_CreateWADEx('TEXTURE_SHELL_BULLET', GameWAD+':TEXTURES\EBULLET'); - g_Texture_CreateWADEx('TEXTURE_SHELL_SHELL', GameWAD+':TEXTURES\ESHELL'); - //wgunMonHash := hashNewIntInt(); wgunHitHeap := TBinaryHeapHitTimes.Create(); end; @@ -1986,16 +1983,8 @@ begin end; procedure g_Weapon_bfghit(x, y: Integer); -var - ID: DWORD; - Anim: TAnimation; begin - if g_Frames_Get(ID, 'FRAMES_BFGHIT') then - begin - Anim := TAnimation.Create(ID, False, 4); - g_GFX_OnceAnim(x-32, y-32, Anim); - Anim.Free(); - end; + g_GFX_QueueEffect(R_GFX_BFG_HIT, x - 32, y - 32); end; procedure g_Weapon_pistol(x, y, xd, yd: Integer; SpawnerUID: Word; @@ -2074,12 +2063,8 @@ end; procedure g_Weapon_Update(); var i, a, h, cx, cy, oldvx, oldvy, tf: Integer; - _id: DWORD; - Anim: TAnimation; t: DWArray; st: Word; - TextureID: DWORD = DWORD(-1); - s: String; o: TObj; spl: Boolean; Loud: Boolean; @@ -2157,8 +2142,6 @@ begin cx := Obj.X + (Obj.Rect.Width div 2); cy := Obj.Y + (Obj.Rect.Height div 2); - TextureID := DWORD(-1); // !!! - case ShotType of WEAPON_ROCKETLAUNCHER, WEAPON_SKEL_FIRE: // Ðàêåòû è ñíàðÿäû Ñêåëåòà begin @@ -2172,15 +2155,7 @@ begin Obj.Y+(Obj.Rect.Height div 2), 1+Random(3), 16, 16) else - if g_Frames_Get(_id, 'FRAMES_SMOKE') then - begin - Anim := TAnimation.Create(_id, False, 3); - Anim.Alpha := 150; - g_GFX_OnceAnim(Obj.X-14+Random(9), - Obj.Y+(Obj.Rect.Height div 2)-20+Random(9), - Anim, ONCEANIM_SMOKE); - Anim.Free(); - end; + g_GFX_QueueEffect(R_GFX_SMOKE_TRANS, Obj.X-14+Random(9), Obj.Y+(Obj.Rect.Height div 2)-20+Random(9)); // Ïîïàëè â êîãî-òî èëè â ñòåíó: if WordBool(st and (MOVE_HITWALL or MOVE_HITLAND or MOVE_HITCEIL)) or @@ -2194,25 +2169,13 @@ begin if ShotType = WEAPON_SKEL_FIRE then begin // Âçðûâ ñíàðÿäà Ñêåëåòà - if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_SKELFIRE') then - 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; + g_GFX_QueueEffect(R_GFX_EXPLODE_SKELFIRE, Obj.X + 32 - 58, Obj.Y + 8 - 36); + g_DynLightExplosion((Obj.X+32), (Obj.Y+8), 64, 1, 0, 0); end else begin // Âçðûâ Ðàêåòû - if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_ROCKET') then - 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; + g_GFX_QueueEffect(R_GFX_EXPLODE_ROCKET, cx - 64, cy - 64); + g_DynLightExplosion(cx, cy, 64, 1, 0, 0); end; g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEROCKET', Obj.X, Obj.Y); @@ -2257,22 +2220,11 @@ begin (Timeout < 1) then begin if ShotType = WEAPON_PLASMA then - s := 'FRAMES_EXPLODE_PLASMA' + g_GFX_QueueEffect(R_GFX_EXPLODE_PLASMA, cx - 16, cy - 16) else - s := 'FRAMES_EXPLODE_BSPFIRE'; - - // Âçðûâ Ïëàçìû: - if g_Frames_Get(TextureID, s) then - begin - Anim := TAnimation.Create(TextureID, False, 3); - 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_GFX_QueueEffect(R_GFX_EXPLODE_BSPFIRE, cx - 16, cy - 16); + g_DynLightExplosion(cx, cy, 32, 0, 0.5, 0.5); g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEPLASMA', Obj.X, Obj.Y); - ShotType := 0; end; end; @@ -2290,17 +2242,9 @@ begin begin if WordBool(st and MOVE_HITWATER) then begin - if g_Frames_Get(_id, 'FRAMES_SMOKE') then - begin - Anim := TAnimation.Create(_id, False, 3); - Anim.Alpha := 0; - 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; + tcx := Random(8); + tcy := Random(8); + g_GFX_QueueEffect(R_GFX_SMOKE, cx-4+tcx-(R_GFX_SMOKE_WIDTH div 2), cy-4+tcy-(R_GFX_SMOKE_HEIGHT div 2)); end else g_GFX_Bubbles(cx, cy, 1+Random(3), 16, 16); @@ -2343,17 +2287,13 @@ begin if (gTime mod LongWord(tf) = 0) then begin - g_Frames_Get(TextureID, 'FRAMES_FLAME'); - Anim := TAnimation.Create(TextureID, False, 2 + Random(2)); - Anim.Alpha := 0; case Stopped of 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_GFX_QueueEffect(R_GFX_FLAME_RAND, tcx - (R_GFX_FLAME_WIDTH div 2), tcy - (R_GFX_FLAME_HEIGHT div 2)); //g_DynLightExplosion(tcx, tcy, 1, 1, 0.8, 0.3); end; end; @@ -2376,19 +2316,9 @@ begin begin // Ëó÷è BFG: if g_Game_IsServer then g_Weapon_BFG9000(cx, cy, SpawnerUID); - - // Âçðûâ BFG: - if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_BFG') then - begin - Anim := TAnimation.Create(TextureID, False, 6); - Anim.Blending := False; - g_GFX_OnceAnim(cx-64, cy-64, Anim); - Anim.Free(); - g_DynLightExplosion(cx, cy, 96, 0, 1, 0); - end; - + g_GFX_QueueEffect(R_GFX_EXPLODE_BFG, cx - 64, cy - 64); + g_DynLightExplosion(cx, cy, 96, 0, 1, 0); g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBFG', Obj.X, Obj.Y); - ShotType := 0; end; end; @@ -2413,25 +2343,12 @@ begin (g_Weapon_Hit(@Obj, a, SpawnerUID, HIT_SOME) <> 0) or (Timeout < 1) then begin - if ShotType = WEAPON_IMP_FIRE then - s := 'FRAMES_EXPLODE_IMPFIRE' - else - if ShotType = WEAPON_CACO_FIRE then - s := 'FRAMES_EXPLODE_CACOFIRE' - else - s := 'FRAMES_EXPLODE_BARONFIRE'; - - // Âçðûâ: - if g_Frames_Get(TextureID, s) then - begin - Anim := TAnimation.Create(TextureID, False, 6); - Anim.Blending := False; - g_GFX_OnceAnim(cx-32, cy-32, Anim); - Anim.Free(); + case ShotType of + WEAPON_IMP_FIRE: g_GFX_QueueEffect(R_GFX_EXPLODE_IMPFIRE, cx - 32, cy - 32); + WEAPON_CACO_FIRE: g_GFX_QueueEffect(R_GFX_EXPLODE_CACOFIRE, cx - 32, cy - 32); + WEAPON_BARON_FIRE: g_GFX_QueueEffect(R_GFX_EXPLODE_BARONFIRE, cx - 32, cy - 32); end; - g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBALL', Obj.X, Obj.Y); - ShotType := 0; end; end; @@ -2448,16 +2365,8 @@ begin (Timeout < 1) then begin // Âçðûâ: - if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_ROCKET') then - begin - Anim := TAnimation.Create(TextureID, False, 6); - Anim.Blending := False; - g_GFX_OnceAnim(cx-64, cy-64, Anim); - Anim.Free(); - end; - + g_GFX_QueueEffect(R_GFX_EXPLODE_ROCKET, cx - 64, cy - 64); g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBALL', Obj.X, Obj.Y); - ShotType := 0; end; end; @@ -2618,11 +2527,7 @@ begin end; procedure g_Weapon_DestroyShot(I: Integer; X, Y: Integer; Loud: Boolean = True); -var - cx, cy: Integer; - Anim: TAnimation; - s: string; - TextureID: DWORD = DWORD(-1); + var cx, cy: Integer; begin if Shots = nil then Exit; @@ -2642,93 +2547,48 @@ begin if Loud then begin if ShotType = WEAPON_SKEL_FIRE then - begin // Âçðûâ ñíàðÿäà Ñêåëåòà - if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_SKELFIRE') then - begin - Anim := TAnimation.Create(TextureID, False, 8); - Anim.Blending := False; - g_GFX_OnceAnim((Obj.X+32)-32, (Obj.Y+8)-32, Anim); - Anim.Free(); - end; - end + g_GFX_QueueEffect(R_GFX_EXPLODE_SKELFIRE, (Obj.X + 32) - 32, (Obj.Y + 8) - 32) else - begin // Âçðûâ Ðàêåòû - if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_ROCKET') then - begin - Anim := TAnimation.Create(TextureID, False, 6); - Anim.Blending := False; - g_GFX_OnceAnim(cx-64, cy-64, Anim); - Anim.Free(); - end; - end; + g_GFX_QueueEffect(R_GFX_EXPLODE_ROCKET, cx - 64, cy - 64); g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEROCKET', Obj.X, Obj.Y); end; end; WEAPON_PLASMA, WEAPON_BSP_FIRE: // Ïëàçìà, ïëàçìà Àðàõíàòðîíà begin - if ShotType = WEAPON_PLASMA then - s := 'FRAMES_EXPLODE_PLASMA' - else - s := 'FRAMES_EXPLODE_BSPFIRE'; - - if g_Frames_Get(TextureID, s) and loud then + if loud then begin - Anim := TAnimation.Create(TextureID, False, 3); - Anim.Blending := False; - g_GFX_OnceAnim(cx-16, cy-16, Anim); - Anim.Free(); - + if ShotType = WEAPON_PLASMA then + g_GFX_QueueEffect(R_GFX_EXPLODE_PLASMA, cx - 16, cy - 16) + else + g_GFX_QueueEffect(R_GFX_EXPLODE_BSPFIRE, cx - 16, cy - 16); g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEPLASMA', Obj.X, Obj.Y); end; end; WEAPON_BFG: // BFG begin - // Âçðûâ BFG: - if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_BFG') and Loud then - begin - Anim := TAnimation.Create(TextureID, False, 6); - Anim.Blending := False; - g_GFX_OnceAnim(cx-64, cy-64, Anim); - Anim.Free(); - - g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBFG', Obj.X, Obj.Y); - end; + g_GFX_QueueEffect(R_GFX_EXPLODE_BFG, cx - 64, cy - 64); + g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBFG', Obj.X, Obj.Y); end; WEAPON_IMP_FIRE, WEAPON_CACO_FIRE, WEAPON_BARON_FIRE: // Âûñòðåëû Áåñà, Êàêîäåìîíà Ðûöàðÿ/Áàðîíà àäà begin - if ShotType = WEAPON_IMP_FIRE then - s := 'FRAMES_EXPLODE_IMPFIRE' - else - if ShotType = WEAPON_CACO_FIRE then - s := 'FRAMES_EXPLODE_CACOFIRE' - else - s := 'FRAMES_EXPLODE_BARONFIRE'; - - if g_Frames_Get(TextureID, s) and Loud then + if loud then begin - Anim := TAnimation.Create(TextureID, False, 6); - Anim.Blending := False; - g_GFX_OnceAnim(cx-32, cy-32, Anim); - Anim.Free(); - + case ShotType of + WEAPON_IMP_FIRE: g_GFX_QueueEffect(R_GFX_EXPLODE_IMPFIRE, cx - 32, cy - 32); + WEAPON_CACO_FIRE: g_GFX_QueueEffect(R_GFX_EXPLODE_CACOFIRE, cx - 32, cy - 32); + WEAPON_BARON_FIRE: g_GFX_QueueEffect(R_GFX_EXPLODE_BARONFIRE, cx - 32, cy - 32); + end; g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBALL', Obj.X, Obj.Y); end; end; WEAPON_MANCUB_FIRE: // Âûñòðåë Ìàíêóáóñà begin - if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_ROCKET') and Loud then - begin - Anim := TAnimation.Create(TextureID, False, 6); - Anim.Blending := False; - g_GFX_OnceAnim(cx-64, cy-64, Anim); - Anim.Free(); - - g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBALL', Obj.X, Obj.Y); - end; + g_GFX_QueueEffect(R_GFX_EXPLODE_ROCKET, cx - 64, cy - 64); + g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBALL', Obj.X, Obj.Y); end; end; // case ShotType of...