Code: Select all
void A_FireOldBFG(); // killough 7/19/98: classic BFG firing functionCode: Select all
// killough 7/11/98: beta BFG begins here
// S_OLDBFG1
#define BFGDELAY 1
#define OLDBFG_1FRAMES(x) {SPR_BFGG,1,BFGDELAY,A_FireOldBFG,x+S_OLDBFG1+2},
#define OLDBFG_2FRAMES(x) OLDBFG_1FRAMES(x) OLDBFG_1FRAMES(x+1)
#define OLDBFG_4FRAMES(x) OLDBFG_2FRAMES(x) OLDBFG_2FRAMES(x+2)
#define OLDBFG_8FRAMES(x) OLDBFG_4FRAMES(x) OLDBFG_4FRAMES(x+4)
{SPR_BFGG,0,10,A_BFGsound,S_OLDBFG1+1}, // S_OLDBFG1
OLDBFG_8FRAMES(0)
OLDBFG_8FRAMES(8)
OLDBFG_8FRAMES(16)
OLDBFG_8FRAMES(24)
OLDBFG_8FRAMES(32)
{SPR_BFGG,1,0,A_Light0,S_OLDBFG43}, // S_OLDBFG42
{SPR_BFGG,1,20,A_ReFire,S_BFG}, // S_OLDBFG43
// killough 7/11/98: end of beta BFGCode: Select all
//
// A_FireOldBFG
//
// This function emulates Doom's Pre-Beta BFG
// By Lee Killough 6/6/98, 7/11/98, 7/19/98, 8/20/98
//
// This code may not be used in other mods without appropriate credit given.
// Code leeches will be telefragged.
void A_FireOldBFG(player_t *player, pspdef_t *psp)
{
#ifdef BETA
int type = MT_PLASMA1;
if (weapon_recoil && !(player->mo->flags & MF_NOCLIP))
P_Thrust(player, ANG180 + player->mo->angle,
512*recoil_values[wp_plasma]);
player->ammo[weaponinfo[player->readyweapon].ammo]--;
player->extralight = 2;
do
{
mobj_t *th, *mo = player->mo;
angle_t an = mo->angle;
angle_t an1 = ((P_Random(pr_bfg)&127) - 64) * (ANG90/768) + an;
angle_t an2 = ((P_Random(pr_bfg)&127) - 64) * (ANG90/640) + ANG90;
extern int autoaim;
if (autoaim || !beta_emulation)
{
// killough 8/2/98: make autoaiming prefer enemies
int mask = MF_FRIEND;
fixed_t slope;
do
{
slope = P_AimLineAttack(mo, an, 16*64*FRACUNIT, mask);
if (!linetarget)
slope = P_AimLineAttack(mo, an += 1<<26, 16*64*FRACUNIT, mask);
if (!linetarget)
slope = P_AimLineAttack(mo, an -= 2<<26, 16*64*FRACUNIT, mask);
if (!linetarget)
slope = 0, an = mo->angle;
}
while (mask && (mask=0, !linetarget)); // killough 8/2/98
an1 += an - mo->angle;
an2 += tantoangle[slope >> DBITS];
}
th = P_SpawnMobj(mo->x, mo->y,
mo->z + 62*FRACUNIT - player->psprites[ps_weapon].sy,
type);
P_SetTarget(&th->target, mo);
th->angle = an1;
th->momx = finecosine[an1>>ANGLETOFINESHIFT] * 25;
th->momy = finesine[an1>>ANGLETOFINESHIFT] * 25;
th->momz = finetangent[an2>>ANGLETOFINESHIFT] * 25;
P_CheckMissileSpawn(th);
}
while ((type != MT_PLASMA2) && (type = MT_PLASMA2)); //killough: obfuscated!
#endif
}This code was released to the public by Lee himself so you should be able to use it for ZDoom.
