addHook("ThinkFrame", function()
for player in players.iterate do
if player.mo and player.mo.valid and player.mo.skin == "beggman" then
-- initialize custom variables properly
player.beggmanparry = player.beggmanparry or false
player.beggmanparrycd = player.beggmanparrycd or 0
player.beggmanrings = player.beggmanrings or 0

if (player.cmd.buttons & BT_CUSTOM2) ~= 0 and player.beggmanparrycd <= 0 then
-- perform dive
player.beggmanparrycd = 6 * TICRATE
player.beggmanrings = player.rings
S_StartSound(player.mo, sfx_bpar)
player.mo.state = S_PLAY_ROLL
end
if player.beggmanparrycd >= 140 then
P_InstaThrust(player.mo, player.mo.angle, FixedMul(0 * FRACUNIT, player.mo.scale))
P_SetObjectMomZ(player.mo, 0 * FRACUNIT)
player.rings = 1
player.pflags = $|PF_FULLSTASIS|PF_NOJUMPDAMAGE
player.beggmanparry = true
player.mo.colorized = true
player.beggmanparrycd = player.beggmanparrycd - 1
end
if player.beggmanparrycd >= 2 then
player.beggmanparrycd = player.beggmanparrycd - 1
end
if player.beggmanparrycd == 1 then
player.beggmanparrycd = player.beggmanparrycd - 1
S_StartSound(player.mo, sfx_bpac)
end
if player.beggmanparrycd == 140 then
S_StartSound(player.mo, sfx_bpam)
player.mo.state = S_PLAY_STND
player.mo.colorized = false
player.beggmanparrycd = player.beggmanparrycd - 1
player.rings = player.beggmanrings
player.beggmanparry = false
end
if player.beggmanparry == true and player.mo.state == S_PLAY_PAIN then
player.beggmanparrycd = 0
S_StartSound(player.mo, sfx_bpal)
S_StopSound(player.mo, sfx_bpar)
P_InstaThrust(player.mo, player.mo.angle, FixedMul(40 * FRACUNIT, player.mo.scale))
P_SetObjectMomZ(player.mo, 5 * FRACUNIT)
player.mo.colorized = false
player.rings = player.beggmanrings
player.pflags = $ |PF_JUMPED
player.powers[pw_invulnerability] = 10 
player.powers[pw_flashing] = 1
player.mo.state = S_PLAY_JUMP
player.beggmanparry = false
end
end
end
end)