X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fopengl%2Fr_weapons.pas;h=648ff507201165d6cdcd9ad20b5017dbd61b7b6b;hb=e575ce001fa1150001a91db8c019f72a5ff48b32;hp=3b1f085cbe140966178d4e60c19cedf425ae754e;hpb=17a3d3f944849de3be0b3fae36c935367648a179;p=d2df-sdl.git diff --git a/src/game/opengl/r_weapons.pas b/src/game/opengl/r_weapons.pas index 3b1f085..648ff50 100644 --- a/src/game/opengl/r_weapons.pas +++ b/src/game/opengl/r_weapons.pas @@ -17,6 +17,8 @@ unit r_weapons; interface + procedure r_Weapon_Load; + procedure r_Weapon_Free; procedure r_Weapon_Draw; implementation @@ -24,11 +26,103 @@ implementation uses SysUtils, Classes, Math, MAPDEF, - e_graphics, - g_basic, g_game, + r_graphics, r_animations, r_textures, + g_base, g_basic, g_game, g_options, g_weapons ; + var + ShotTexture, ShotFrames: array [WEAPON_KASTET..WEAPON_SKEL_FIRE] of DWORD; + + procedure r_Weapon_Load; + begin + 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'); + + (* WEAPON_ROCKETLAUNCHER *) + g_Texture_Get('TEXTURE_WEAPON_ROCKET', ShotTexture[WEAPON_ROCKETLAUNCHER]); + + (* WEAPON_PLASMA *) + g_Frames_Get(ShotFrames[WEAPON_PLASMA], 'FRAMES_WEAPON_PLASMA'); + // Animation := TAnimation.Create(FramesID, True, 5); + + (* WEAPON_BFG *) + g_Frames_Get(ShotFrames[WEAPON_BFG], 'FRAMES_WEAPON_BFG'); + // Animation := TAnimation.Create(FramesID, True, 6); + + (* WEAPON_FLAMETHROWER *) + //g_Frames_Get(ShotTexture[WEAPON_FLAMETHROWER], 'FRAMES_FLAME'); + //g_Frames_Get(ShotFrames[WEAPON_FLAMETHROWER], 'FRAMES_FLAME'); + + (* WEAPON_IMP_FIRE *) + g_Frames_Get(ShotFrames[WEAPON_IMP_FIRE], 'FRAMES_WEAPON_IMPFIRE'); + // Animation := TAnimation.Create(FramesID, True, 4); + + (* WEAPON_CACO_FIRE *) + g_Frames_Get(ShotFrames[WEAPON_CACO_FIRE], 'FRAMES_WEAPON_CACOFIRE'); + // Animation := TAnimation.Create(FramesID, True, 4); + + (* WEAPON_MANCUB_FIRE *) + g_Frames_Get(ShotFrames[WEAPON_MANCUB_FIRE], 'FRAMES_WEAPON_MANCUBFIRE'); + // Animation := TAnimation.Create(FramesID, True, 4); + + (* WEAPON_BARON_FIRE *) + g_Frames_Get(ShotFrames[WEAPON_BARON_FIRE], 'FRAMES_WEAPON_BARONFIRE'); + // Animation := TAnimation.Create(FramesID, True, 4); + + (* WEAPON_BSP_FIRE *) + g_Frames_Get(ShotFrames[WEAPON_BSP_FIRE], 'FRAMES_WEAPON_BSPFIRE'); + // Animation := TAnimation.Create(FramesID, True, 4); + + (* WEAPON_SKEL_FIRE *) + g_Frames_Get(ShotFrames[WEAPON_SKEL_FIRE], 'FRAMES_WEAPON_SKELFIRE'); + // Animation := TAnimation.Create(FramesID, True, 5); + end; + + procedure r_Weapon_Free; + begin + 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; + procedure r_Weapon_Draw; var i, fX, fY, xx, yy: Integer; a: SmallInt; p: TDFPoint; begin @@ -53,16 +147,16 @@ implementation if Animation <> nil then begin if Shots[i].ShotType in [WEAPON_BARON_FIRE, WEAPON_MANCUB_FIRE, WEAPON_SKEL_FIRE] then - Animation.DrawEx(fX, fY, TMirrorType.None, p, a) + r_AnimationState_DrawEx(ShotFrames[Shots[i].ShotType], Animation, fX, fY, TMirrorType.None, p, a) else - Animation.Draw(fX, fY, TMirrorType.None); + r_AnimationState_Draw(ShotFrames[Shots[i].ShotType], Animation, fX, fY, TMirrorType.None); end - else if TextureID <> 0 then + else if ShotTexture[Shots[i].ShotType] <> 0 then begin if (Shots[i].ShotType = WEAPON_ROCKETLAUNCHER) then - e_DrawAdv(TextureID, fX, fY, 0, True, False, a, @p, TMirrorType.None) + e_DrawAdv(ShotTexture[Shots[i].ShotType], fX, fY, 0, True, False, a, @p, TMirrorType.None) else if (Shots[i].ShotType <> WEAPON_FLAMETHROWER) then - e_Draw(TextureID, fX, fY, 0, True, False); + e_Draw(ShotTexture[Shots[i].ShotType], fX, fY, 0, True, False); end; if g_debug_Frames then