X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-sdl.git;a=blobdiff_plain;f=src%2Fgame%2Fg_weapons.pas;h=6e555a4d607d5ac83432f5ee9cc64809aae79125;hp=c94282d7b9c3ee1c71a89316b26324b1031f3370;hb=abda6900c041e39944de6a49aa088a60c170715e;hpb=17a3d3f944849de3be0b3fae36c935367648a179 diff --git a/src/game/g_weapons.pas b/src/game/g_weapons.pas index c94282d..6e555a4 100644 --- a/src/game/g_weapons.pas +++ b/src/game/g_weapons.pas @@ -20,7 +20,7 @@ interface uses SysUtils, Classes, mempool, - g_textures, g_basic, e_graphics, g_phys, xprofiler; + g_textures, g_basic, g_phys, xprofiler; type @@ -30,8 +30,7 @@ type SpawnerUID: Word; Triggers: DWArray; Obj: TObj; - Animation: TAnimation; - TextureID: DWORD; + Animation: TAnimationState; Timeout: DWORD; Stopped: Byte; @@ -105,7 +104,6 @@ const WP_FIRST = WEAPON_KASTET; WP_LAST = WEAPON_FLAMETHROWER; - var gwep_debug_fast_trace: Boolean = true; @@ -113,8 +111,8 @@ var implementation uses - Math, g_map, g_player, g_gfx, g_sound, g_main, g_panel, - g_console, g_options, g_game, + Math, g_map, g_player, g_gfx, g_sound, g_panel, + g_console, g_options, g_game, r_gfx, g_triggers, MAPDEF, e_log, g_monsters, g_saveload, g_language, g_netmsg, g_grid, geom, binheap, hashtable, utils, xstreams; @@ -562,7 +560,6 @@ end; function g_Weapon_CreateShot(I: Integer; ShotType: Byte; Spawner, TargetUID: Word; X, Y, XV, YV: Integer): LongWord; var find_id: DWord; - FramesID: DWORD = 0; begin if I < 0 then find_id := FindShot() @@ -586,7 +583,6 @@ begin Animation := nil; Triggers := nil; ShotType := WEAPON_ROCKETLAUNCHER; - g_Texture_Get('TEXTURE_WEAPON_ROCKET', TextureID); end; end; @@ -601,8 +597,7 @@ begin Triggers := nil; ShotType := WEAPON_PLASMA; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_PLASMA'); - Animation := TAnimation.Create(FramesID, True, 5); + Animation := TAnimationState.Create(True, 5, 2); // !!! put values into table end; end; @@ -617,8 +612,7 @@ begin Triggers := nil; ShotType := WEAPON_BFG; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_BFG'); - Animation := TAnimation.Create(FramesID, True, 6); + Animation := TAnimationState.Create(True, 6, 2); // !!! put values into table end; end; @@ -633,9 +627,7 @@ begin Triggers := nil; ShotType := WEAPON_FLAMETHROWER; - Animation := nil; - TextureID := 0; - g_Frames_Get(TextureID, 'FRAMES_FLAME'); + // Animation := TAnimationState.Create(True, 6, 0); // drawed as gfx end; end; @@ -650,8 +642,7 @@ begin Triggers := nil; ShotType := WEAPON_IMP_FIRE; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_IMPFIRE'); - Animation := TAnimation.Create(FramesID, True, 4); + Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; end; @@ -666,8 +657,7 @@ begin Triggers := nil; ShotType := WEAPON_CACO_FIRE; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_CACOFIRE'); - Animation := TAnimation.Create(FramesID, True, 4); + Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; end; @@ -682,8 +672,7 @@ begin Triggers := nil; ShotType := WEAPON_MANCUB_FIRE; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_MANCUBFIRE'); - Animation := TAnimation.Create(FramesID, True, 4); + Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; end; @@ -698,8 +687,7 @@ begin Triggers := nil; ShotType := WEAPON_BARON_FIRE; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_BARONFIRE'); - Animation := TAnimation.Create(FramesID, True, 4); + Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; end; @@ -714,8 +702,7 @@ begin Triggers := nil; ShotType := WEAPON_BSP_FIRE; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_BSPFIRE'); - Animation := TAnimation.Create(FramesID, True, 4); + Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; end; @@ -731,8 +718,7 @@ begin Triggers := nil; ShotType := WEAPON_SKEL_FIRE; target := TargetUID; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_SKELFIRE'); - Animation := TAnimation.Create(FramesID, True, 5); + Animation := TAnimationState.Create(True, 5, 2); // !!! put values into table end; end; end; @@ -1151,31 +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_WEAPON_ROCKET', GameWAD+':TEXTURES\BROCKET'); - g_Frames_CreateWAD(nil, 'FRAMES_WEAPON_SKELFIRE', GameWAD+':TEXTURES\BSKELFIRE', 64, 16, 2); - g_Frames_CreateWAD(nil, 'FRAMES_WEAPON_BFG', GameWAD+':TEXTURES\BBFG', 64, 64, 2); - g_Frames_CreateWAD(nil, 'FRAMES_WEAPON_PLASMA', GameWAD+':TEXTURES\BPLASMA', 16, 16, 2); - g_Frames_CreateWAD(nil, 'FRAMES_WEAPON_IMPFIRE', GameWAD+':TEXTURES\BIMPFIRE', 16, 16, 2); - g_Frames_CreateWAD(nil, 'FRAMES_WEAPON_BSPFIRE', GameWAD+':TEXTURES\BBSPFIRE', 16, 16, 2); - g_Frames_CreateWAD(nil, 'FRAMES_WEAPON_CACOFIRE', GameWAD+':TEXTURES\BCACOFIRE', 16, 16, 2); - g_Frames_CreateWAD(nil, 'FRAMES_WEAPON_BARONFIRE', GameWAD+':TEXTURES\BBARONFIRE', 64, 16, 2); - g_Frames_CreateWAD(nil, 'FRAMES_WEAPON_MANCUBFIRE', GameWAD+':TEXTURES\BMANCUBFIRE', 64, 32, 2); - g_Frames_CreateWAD(nil, 'FRAMES_EXPLODE_ROCKET', GameWAD+':TEXTURES\EROCKET', 128, 128, 6); - g_Frames_CreateWAD(nil, 'FRAMES_EXPLODE_SKELFIRE', GameWAD+':TEXTURES\ESKELFIRE', 64, 64, 3); - g_Frames_CreateWAD(nil, 'FRAMES_EXPLODE_BFG', GameWAD+':TEXTURES\EBFG', 128, 128, 6); - g_Frames_CreateWAD(nil, 'FRAMES_EXPLODE_IMPFIRE', GameWAD+':TEXTURES\EIMPFIRE', 64, 64, 3); - g_Frames_CreateWAD(nil, 'FRAMES_BFGHIT', GameWAD+':TEXTURES\BFGHIT', 64, 64, 4); - g_Frames_CreateWAD(nil, 'FRAMES_FIRE', GameWAD+':TEXTURES\FIRE', 64, 128, 8); - g_Frames_CreateWAD(nil, 'FRAMES_FLAME', GameWAD+':TEXTURES\FLAME', 32, 32, 11); - g_Frames_CreateWAD(nil, 'FRAMES_EXPLODE_PLASMA', GameWAD+':TEXTURES\EPLASMA', 32, 32, 4, True); - g_Frames_CreateWAD(nil, 'FRAMES_EXPLODE_BSPFIRE', GameWAD+':TEXTURES\EBSPFIRE', 32, 32, 5); - g_Frames_CreateWAD(nil, 'FRAMES_EXPLODE_CACOFIRE', GameWAD+':TEXTURES\ECACOFIRE', 64, 64, 3); - g_Frames_CreateWAD(nil, 'FRAMES_EXPLODE_BARONFIRE', GameWAD+':TEXTURES\EBARONFIRE', 64, 64, 3); - g_Frames_CreateWAD(nil, 'FRAMES_SMOKE', GameWAD+':TEXTURES\SMOKE', 32, 32, 10, False); - - g_Texture_CreateWADEx('TEXTURE_SHELL_BULLET', GameWAD+':TEXTURES\EBULLET'); - g_Texture_CreateWADEx('TEXTURE_SHELL_SHELL', GameWAD+':TEXTURES\ESHELL'); - //wgunMonHash := hashNewIntInt(); wgunHitHeap := TBinaryHeapHitTimes.Create(); end; @@ -1220,25 +1181,6 @@ begin g_Sound_Delete('SOUND_PLAYER_CASING2'); g_Sound_Delete('SOUND_PLAYER_SHELL1'); g_Sound_Delete('SOUND_PLAYER_SHELL2'); - - g_Texture_Delete('TEXTURE_WEAPON_ROCKET'); - g_Frames_DeleteByName('FRAMES_WEAPON_BFG'); - g_Frames_DeleteByName('FRAMES_WEAPON_PLASMA'); - g_Frames_DeleteByName('FRAMES_WEAPON_IMPFIRE'); - g_Frames_DeleteByName('FRAMES_WEAPON_BSPFIRE'); - g_Frames_DeleteByName('FRAMES_WEAPON_CACOFIRE'); - g_Frames_DeleteByName('FRAMES_WEAPON_MANCUBFIRE'); - g_Frames_DeleteByName('FRAMES_EXPLODE_ROCKET'); - g_Frames_DeleteByName('FRAMES_EXPLODE_BFG'); - g_Frames_DeleteByName('FRAMES_EXPLODE_IMPFIRE'); - g_Frames_DeleteByName('FRAMES_BFGHIT'); - g_Frames_DeleteByName('FRAMES_FIRE'); - g_Frames_DeleteByName('FRAMES_EXPLODE_PLASMA'); - g_Frames_DeleteByName('FRAMES_EXPLODE_BSPFIRE'); - g_Frames_DeleteByName('FRAMES_EXPLODE_CACOFIRE'); - g_Frames_DeleteByName('FRAMES_SMOKE'); - g_Frames_DeleteByName('FRAMES_WEAPON_BARONFIRE'); - g_Frames_DeleteByName('FRAMES_EXPLODE_BARONFIRE'); end; @@ -1687,7 +1629,6 @@ begin Animation := nil; triggers := nil; - g_Texture_Get('TEXTURE_WEAPON_ROCKET', TextureID); end; Shots[find_id].SpawnerUID := SpawnerUID; @@ -1699,7 +1640,7 @@ end; procedure g_Weapon_revf(x, y, xd, yd: Integer; SpawnerUID, TargetUID: Word; WID: Integer = -1; Silent: Boolean = False); var - find_id, FramesID: DWORD; + find_id: DWORD; dx, dy: Integer; begin if WID < 0 then @@ -1726,8 +1667,7 @@ begin triggers := nil; target := TargetUID; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_SKELFIRE'); - Animation := TAnimation.Create(FramesID, True, 5); + Animation := TAnimationState.Create(True, 5, 2); // !!! put values into table end; Shots[find_id].SpawnerUID := SpawnerUID; @@ -1739,7 +1679,7 @@ end; procedure g_Weapon_plasma(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 @@ -1765,8 +1705,7 @@ begin throw(find_id, x+dx, y+dy, xd+dx, yd+dy, 16); triggers := nil; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_PLASMA'); - Animation := TAnimation.Create(FramesID, True, 5); + Animation := TAnimationState.Create(True, 5, 2); // !!! put values into table end; Shots[find_id].SpawnerUID := SpawnerUID; @@ -1805,8 +1744,6 @@ begin triggers := nil; Animation := nil; - TextureID := 0; - g_Frames_Get(TextureID, 'FRAMES_FLAME'); end; Shots[find_id].SpawnerUID := SpawnerUID; @@ -1818,7 +1755,7 @@ end; procedure g_Weapon_ball1(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 @@ -1844,8 +1781,7 @@ begin throw(find_id, x+dx, y+dy, xd+dx, yd+dy, 16); triggers := nil; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_IMPFIRE'); - Animation := TAnimation.Create(FramesID, True, 4); + Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; Shots[find_id].SpawnerUID := SpawnerUID; @@ -1857,7 +1793,7 @@ end; procedure g_Weapon_ball2(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 @@ -1883,8 +1819,7 @@ begin throw(find_id, x+dx, y+dy, xd+dx, yd+dy, 16); triggers := nil; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_CACOFIRE'); - Animation := TAnimation.Create(FramesID, True, 4); + Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; Shots[find_id].SpawnerUID := SpawnerUID; @@ -1896,7 +1831,7 @@ end; procedure g_Weapon_ball7(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 @@ -1922,8 +1857,7 @@ begin throw(find_id, x+dx, y+dy, xd+dx, yd+dy, 16); triggers := nil; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_BARONFIRE'); - Animation := TAnimation.Create(FramesID, True, 4); + Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; Shots[find_id].SpawnerUID := SpawnerUID; @@ -1935,7 +1869,7 @@ end; procedure g_Weapon_aplasma(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 @@ -1962,8 +1896,7 @@ begin triggers := nil; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_BSPFIRE'); - Animation := TAnimation.Create(FramesID, True, 4); + Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; Shots[find_id].SpawnerUID := SpawnerUID; @@ -1975,7 +1908,7 @@ end; procedure g_Weapon_manfire(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 @@ -2002,8 +1935,7 @@ begin triggers := nil; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_MANCUBFIRE'); - Animation := TAnimation.Create(FramesID, True, 4); + Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; Shots[find_id].SpawnerUID := SpawnerUID; @@ -2015,7 +1947,7 @@ end; procedure g_Weapon_bfgshot(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 @@ -2041,8 +1973,7 @@ begin throw(find_id, x+dx, y+dy, xd+dx, yd+dy, 16); triggers := nil; - g_Frames_Get(FramesID, 'FRAMES_WEAPON_BFG'); - Animation := TAnimation.Create(FramesID, True, 6); + Animation := TAnimationState.Create(True, 6, 2); // !!! put values into table end; Shots[find_id].SpawnerUID := SpawnerUID; @@ -2052,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; + r_GFX_OnceAnim(R_GFX_BFG_HIT, x - 32, y - 32); end; procedure g_Weapon_pistol(x, y, xd, yd: Integer; SpawnerUID: Word; @@ -2140,11 +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; - s: String; o: TObj; spl: Boolean; Loud: Boolean; @@ -2235,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; + r_GFX_OnceAnim(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 @@ -2257,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; + r_GFX_OnceAnim(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; + r_GFX_OnceAnim(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); @@ -2320,22 +2220,11 @@ begin (Timeout < 1) then begin if ShotType = WEAPON_PLASMA then - s := 'FRAMES_EXPLODE_PLASMA' + r_GFX_OnceAnim(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; - + r_GFX_OnceAnim(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; @@ -2353,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); + r_GFX_OnceAnim(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); @@ -2406,16 +2287,13 @@ begin if (gTime mod LongWord(tf) = 0) then begin - 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(); + r_GFX_OnceAnim(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; @@ -2438,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; - + r_GFX_OnceAnim(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; @@ -2475,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: r_GFX_OnceAnim(R_GFX_EXPLODE_IMPFIRE, cx - 32, cy - 32); + WEAPON_CACO_FIRE: r_GFX_OnceAnim(R_GFX_EXPLODE_CACOFIRE, cx - 32, cy - 32); + WEAPON_BARON_FIRE: r_GFX_OnceAnim(R_GFX_EXPLODE_BARONFIRE, cx - 32, cy - 32); end; - g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBALL', Obj.X, Obj.Y); - ShotType := 0; end; end; @@ -2510,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; - + r_GFX_OnceAnim(R_GFX_EXPLODE_ROCKET, cx - 64, cy - 64); g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBALL', Obj.X, Obj.Y); - ShotType := 0; end; end; @@ -2607,7 +2454,6 @@ end; procedure g_Weapon_LoadState (st: TStream); var count, tc, i, j: Integer; - dw: LongWord; begin if (st = nil) then exit; @@ -2642,58 +2488,46 @@ begin Shots[i].Stopped := utils.readByte(st); // Óñòàíîâêà òåêñòóðû èëè àíèìàöèè - Shots[i].TextureID := DWORD(-1); Shots[i].Animation := nil; case Shots[i].ShotType of WEAPON_ROCKETLAUNCHER, WEAPON_SKEL_FIRE: begin - g_Texture_Get('TEXTURE_WEAPON_ROCKET', Shots[i].TextureID); end; WEAPON_PLASMA: begin - g_Frames_Get(dw, 'FRAMES_WEAPON_PLASMA'); - Shots[i].Animation := TAnimation.Create(dw, True, 5); + Shots[i].Animation := TAnimationState.Create(True, 5, 2); // !!! put values into table end; WEAPON_BFG: begin - g_Frames_Get(dw, 'FRAMES_WEAPON_BFG'); - Shots[i].Animation := TAnimation.Create(dw, True, 6); + Shots[i].Animation := TAnimationState.Create(True, 6, 2); // !!! put values into table end; WEAPON_IMP_FIRE: begin - g_Frames_Get(dw, 'FRAMES_WEAPON_IMPFIRE'); - Shots[i].Animation := TAnimation.Create(dw, True, 4); + Shots[i].Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; WEAPON_BSP_FIRE: begin - g_Frames_Get(dw, 'FRAMES_WEAPON_BSPFIRE'); - Shots[i].Animation := TAnimation.Create(dw, True, 4); + Shots[i].Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; WEAPON_CACO_FIRE: begin - g_Frames_Get(dw, 'FRAMES_WEAPON_CACOFIRE'); - Shots[i].Animation := TAnimation.Create(dw, True, 4); + Shots[i].Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; WEAPON_BARON_FIRE: begin - g_Frames_Get(dw, 'FRAMES_WEAPON_BARONFIRE'); - Shots[i].Animation := TAnimation.Create(dw, True, 4); + Shots[i].Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; WEAPON_MANCUB_FIRE: begin - g_Frames_Get(dw, 'FRAMES_WEAPON_MANCUBFIRE'); - Shots[i].Animation := TAnimation.Create(dw, True, 4); + Shots[i].Animation := TAnimationState.Create(True, 4, 2); // !!! put values into table end; end; end; end; procedure g_Weapon_DestroyShot(I: Integer; X, Y: Integer; Loud: Boolean = True); -var - cx, cy: Integer; - Anim: TAnimation; - s: string; + var cx, cy: Integer; begin if Shots = nil then Exit; @@ -2713,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 + r_GFX_OnceAnim(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; + r_GFX_OnceAnim(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 + r_GFX_OnceAnim(R_GFX_EXPLODE_PLASMA, cx - 16, cy - 16) + else + r_GFX_OnceAnim(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; + r_GFX_OnceAnim(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: r_GFX_OnceAnim(R_GFX_EXPLODE_IMPFIRE, cx - 32, cy - 32); + WEAPON_CACO_FIRE: r_GFX_OnceAnim(R_GFX_EXPLODE_CACOFIRE, cx - 32, cy - 32); + WEAPON_BARON_FIRE: r_GFX_OnceAnim(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; + r_GFX_OnceAnim(R_GFX_EXPLODE_ROCKET, cx - 64, cy - 64); + g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBALL', Obj.X, Obj.Y); end; end; // case ShotType of...