addHook("PlayerThink", function(player) if player.mo.skin == "fang" and player.playerstate == PST_LIVE local lockon = P_LookForEnemies(player, false, true) local bullet = nil local bomb = nil if (lockon and lockon.valid) P_SpawnLockOn(player, lockon, mobjinfo[MT_LOCKON].spawnstate) end if (player.mo.state == S_FANG_LOBSHOT0 or player.mo.state == S_FANG_LOBSHOT1 or player.mo.state == S_FANG_LOBSHOT2) if (lockon and lockon.valid) player.mo.target = lockon end if not (lockon and lockon.valid) player.mo.target = player.mo end if player.weapondelay >= 89 player.mo.state = S_FANG_LOBSHOT0 end if player.weapondelay == 88 player.mo.state = S_FANG_LOBSHOT1 end if player.weapondelay <= 87 and player.weapondelay > 35 and player.mo.state != S_FANG_LOBSHOT2 player.mo.state = S_FANG_LOBSHOT2 end if player.weapondelay == 70 player.mo.state = S_FANG_WAIT1 end end if (player.mo.state == S_FANG_WAIT1 or player.mo.state == S_FANG_WAIT2) and not (player.weapondelay) player.mo.state = S_PLAY_STND end if player.cmd.buttons & BT_USE and not (player.lastbuttons & BT_USE) and not (player.weapondelay) and player.mo.state != S_PLAY_FIRE and player.mo.state != S_PLAY_FIRE_FINISH and (P_IsObjectOnGround(player.mo) or player.pflags & PF_JUMPED) and player.mo.state != S_PLAY_SUPER_TRANS1 and player.mo.state != S_PLAY_SUPER_TRANS2 and player.mo.state != S_PLAY_SUPER_TRANS3 and player.mo.state != S_PLAY_SUPER_TRANS4 and player.mo.state != S_PLAY_SUPER_TRANS5 and player.mo.state != S_PLAY_SUPER_TRANS6 player.mo.state = S_PLAY_FIRE player.pflags = $ | PF_USEDOWN player.weapondelay = TICRATE/2 player.powers[pw_nocontrol] = player.weapondelay if (lockon and lockon.valid) player.mo.angle = R_PointToAngle2(player.mo.x, player.mo.y, lockon.x, lockon.y) bullet = P_SpawnPointMissile(player.mo, lockon.x, lockon.y, lockon.z, player.revitem, player.mo.x, player.mo.y, player.mo.z) end if not (lockon and lockon.valid) bullet = P_SpawnPointMissile(player.mo, player.mo.x + P_ReturnThrustX(nil, player.mo.angle, FRACUNIT), player.mo.y + P_ReturnThrustY(nil, player.mo.angle, FRACUNIT), player.mo.z, player.revitem, player.mo.x, player.mo.y, player.mo.z) end end if (player.mo.state == S_PLAY_FIRE or player.mo.state == S_PLAY_FIRE_FINISH) and not (player.weapondelay) if player.speed > 0 and P_IsObjectOnGround(player.mo) player.mo.state = S_PLAY_WALK player.powers[pw_nocontrol] = 0 end if player.speed == 0 and P_IsObjectOnGround(player.mo) player.mo.state = S_PLAY_STND player.powers[pw_nocontrol] = 0 end if not (P_IsObjectOnGround(player.mo)) player.mo.state = S_PLAY_JUMP player.pflags = $ | PF_JUMPED player.pflags = $ | PF_NOJUMPDAMAGE player.powers[pw_nocontrol] = 0 end if player.lastbuttons & BT_USE player.mo.state = S_FANG_LOBSHOT0 player.pflags = $ | PF_USEDOWN player.weapondelay = TICRATE*3 player.powers[pw_nocontrol] = player.weapondelay player.drawangle = player.mo.angle end end if player.mo.state == S_PLAY_BOUNCE_LANDING and not (player.weapondelay) bomb = P_SpawnMobjFromMobj(player.mo,5*FRACUNIT,5*FRACUNIT,player.mo.height+5*FRACUNIT,MT_FBOMB) bomb.target = player.mo bomb.momz = 10*FRACUNIT player.weapondelay = 6 S_StartSound(player.mo, sfx_s3k51) end if player.mo.eflags & MFE_JUSTHITFLOOR and player.powers[pw_nocontrol] player.weapondelay = 0 player.powers[pw_nocontrol] = 0 end end player.lastbuttons = player.cmd.buttons end)