local Mint = Mint
local cameraspd = CV_FindVar("cam_speed") if cameraspd==nil cameraspd = {value = 1, string = "0.3"} end

Mint.Timers = function(p,s,mint) local mint = p.minttable
if not (p and p.valid and s and s.valid and ActiveMint(s) and mint) return end

mint.a = (p.cmd.buttons&BT_JUMP) and $+1 or 0
mint.b = (p.cmd.buttons&BT_SPIN) and $+1 or 0
mint.c1 = (p.cmd.buttons&BT_CUSTOM1) and $+1 or 0
mint.c2 = (p.cmd.buttons&BT_CUSTOM2) and $+1 or 0
mint.c3 = (p.cmd.buttons&BT_CUSTOM3) and $+1 or 0
mint.tossflag = (p.cmd.buttons&BT_TOSSFLAG) and $+1 or 0
mint.fire = (p.cmd.buttons&BT_ATTACK) and $+1 or 0
mint.firenormal = (p.cmd.buttons&BT_FIRENORMAL) and $+1 or 0
mint.shield = (p.powers[pw_shield] & ~SH_FIREFLOWER)
mint.speedup = p.powers[pw_sneakers]
mint.nofear = p.powers[pw_invulnerability]
mint.rail = p.powers[pw_railring]
mint.rings = p.rings

if mint.goforitjack
mint.goforitjack = $-1
else
mint.buttonpressed,mint.goforitjack = 0,0
end

if (gametype==GT_MATCH) or (gametype==GT_TEAMMATCH) or (gametype==GT_CTF)
mint.matchgt = true
else mint.matchgt = false
end

if (s.state==S_PLAY_STND or s.state==S_PLAY_MINTLAND) and not P_IsObjectOnGround(s)
or (s.state==S_PLAY_MINTLANDALT) and not P_IsObjectOnGround(s)
s.state = S_PLAY_FALL
end

if mint.framejump
mint.framejump = $-1
end
if P_IsObjectOnGround(s)
mint.framejump = 0
end
if not P_IsObjectOnGround(s) and not mint.framejump
and not (p.pflags&PF_JUMPED)
mint.framejump = 7
end
if mint.framejump
if mint.a==1
and (s.state==S_PLAY_WALK or s.state==S_PLAY_RUN or s.state==S_PLAY_ROLL or s.state==S_PLAY_SKID or s.state==S_PLAY_MINTLANDALT)
and not (p.pflags&(PF_JUMPED|PF_THOKKED))
and not (p.pflags&PF_SPINNING) --Got tired of trying to fix a bug here
P_DoJump(p, true)
P_DoMintDust(p)
mint.framejump = 0
end;end
if mint.framejump and (mint.framejump==1)
and s.state==S_PLAY_WALK
and p.playerstate==PST_LIVE
and not (p.pflags&PF_JUMPED)
and not pain
and not p.powers[pw_carry]
and not P_IsObjectOnGround(s)
mint.framejump = 0
if not (s.state==S_PLAY_SPRING)
s.state = S_PLAY_SPRING
end;end
if s.state==S_PLAY_RUN and mint.framejump and (mint.framejump==1)
and p.playerstate==PST_LIVE
and not (p.pflags&PF_JUMPED)
and not pain
and not p.powers[pw_carry]
and not P_IsObjectOnGround(s)
mint.framejump = 0
if not (s.state==S_PLAY_SPRING)
s.state = S_PLAY_SPRING
end;end
if mint.spinlaunchcharge and (leveltime%1==0)
mint.realcharge = $+1
end
if (mint.realcharge >= 31) and not P_PlayerInPain(p)
mint.realcharge = 31
if (mint.realcharge >= 30) and not P_IsObjectOnGround(s)
and not p.powers[pw_justsprung]
local launchready = P_SpawnGhostMobj(s)
launchready.fuse = 5
launchready.blendmode = AST_ADD
launchready.color = SKINCOLOR_WHITE
launchready.colorized = true
elseif not mint.spinlaunchcharge or P_IsObjectOnGround(s)
mint.realcharge = 0
end;end
if mint.realcharge and mint.realcharge==30 and s.state == S_PLAY_SPINDASH
S_StartSound(s,sfx_s3k42)
end
if mint.realcharge and s.state != S_PLAY_SPINDASH and mint.spinlaunchcharge
and not P_PlayerInPain(p)
s.state = S_PLAY_SPINDASH
end
if mint.realcharge and p.powers[pw_justsprung]
s.state = S_PLAY_SPRING
mint.realcharge = 0
end
if mint.hyperbeam -- Edited by SpeedyM
mint.hyperbeam = $+1
P_InstaThrust(s,s.angle,0*FU)
p.speed = 0
if (mint.hyperbeam >= 1) and not (mint.hyperbeam >= 10)
s.state = S_PLAY_MINTBEAM1
s.angle = p.drawangle
local gfx = P_SpawnMobjFromMobj(s, P_RandomRange(-200, 200)<<16, P_RandomRange(-200, 200)<<16, P_RandomRange(-200, 200)<<16, MT_THOK)
gfx.scale = s.scale*5
gfx.sprite = SPR_RAIN
P_SetObjectMomZ(gfx, -(gfx.z-s.z+s.height)/2, false)
gfx.colorized,gfx.color = true,SKINCOLOR_WHITE
gfx.blendmode = AST_ADD
gfx.angle = R_PointToAngle2(gfx.x, gfx.y, s.x, s.y)
P_InstaThrust(gfx, gfx.angle, FixedHypot(s.x-gfx.x, s.y-gfx.y)/10)
gfx.rollangle = FixedAngle(45<<16)
gfx.eflags = gfx.z < s.z and MFE_VERTICALFLIP or 0
gfx.renderflags = $|RF_PAPERSPRITE
end
if (mint.hyperbeam==10)
S_StartSoundAtVolume(s,sfx_mbstr2,255)
P_FlashPal(p, PAL_WHITE, 3)
mint.hbeamprops = {camscale = skins[s.skin].camerascale/2, angle = p.drawangle, prevcamscale = p.camerascale}
end
if mint.b
if (mint.hyperbeam >= 10)
if mint.hbeamprops
local props = mint.hbeamprops
p.camerascale = props.camscale
if p.cmd.sidemove
props.angle = $-FixedAngle(p.cmd.sidemove<<16/10)
end
s.angle = props.angle
p.drawangle = s.angle
else  -- Woopsie looks like smth slipped!
mint.hbeamprops = {camscale = skins[s.skin].camerascale/4, angle = p.drawangle, prevcamscale = skins[m.skin].camerascale}
end
P_Thrust(s, s.angle, -3*s.scale)
if (leveltime % 4)==0
P_DoMintDust(p)
end
s.state = S_PLAY_MINTBEAM1
P_StartQuake(10*FU, TICRATE/2)
--Files I edited: TIMERS, HUD, GFX, COLLIDE (Just a reminder for myself when I'm done)
end

if (mint.hyperbeam >= 26) and (leveltime % 6)==0 and s.state==S_PLAY_MINTBEAM1
S_StartSoundAtVolume(s,sfx_mbstr3,255)
end
end
end
if mint.hyperbeam and not P_IsObjectOnGround(s)
S_StopSoundByID(s,sfx_mbstr3)
s.state = S_PLAY_FALL
mint.hyperbeam = 0
p.camerascale = mint.hbeamprops and mint.hbeamprops.prevcamscale or skins[s.skin].camerascale
mint.hbeamprops = nil
end
if (mint.hyperbeam >= 10) and not mint.b
or mint.hyperbeam and not (mint.shield==SH_THUNDERCOIN)
S_StartSound(s,sfx_mbstr4)
S_StopSoundByID(s,sfx_mbstr3)
s.state = S_PLAY_STND
mint.hyperbeam = 0
p.camerascale = mint.hbeamprops and mint.hbeamprops.prevcamscale or skins[s.skin].camerascale
elseif (mint.hyperbeam < 10) and not mint.b
S_StopSoundByID(s,sfx_mbstr3)
mint.hyperbeam = 0
end
if mint.superburststomp
mint.superburststomp = $-1
if (mint.superburststomp >= 1)
P_SetObjectMomZ(s,1*FU,true)
if mint.superburststomp==1
P_SetObjectMomZ(s,0*FU,true)
S_StartSoundAtVolume(s,sfx_mthok,141)
mint.spinlaunchcharge = false
mint.burststomp = true
mint.twirl,mint.trick,s.rollangle = 0,0,0
P_SetObjectMomZ(s,-45*FU,true)
p.powers[pw_strong] = $|STR_SPRING
p.powers[pw_strong] = $|STR_BUST
s.spritexscale = FU-28500
s.spriteyscale = FU+41000
mint.stretch = {timer = 40}
mint.spintrail = 99
mint.zoomout = 10
if (p.cmd.forwardmove or p.cmd.sidemove)
s.angle = p.drawangle
P_InstaThrust(s,s.angle,25*FU)
end;end;end;end
if mint.twirl
mint.twirl = $-1
mint.spintrail = mint.twirl
if (mint.twirl >= 2) and (s.momz*P_MobjFlip(s) > 1) and not p.powers[pw_carry]
local twirlfx = P_SpawnMobjFromMobj(s, 0,0,0, MT_IVSP)
twirlfx.renderflags = $|RF_FULLBRIGHT|RF_NOCOLORMAPS
twirlfx.blendmode = AST_ADD
twirlfx.scale = s.scale
twirlfx.destscale = 1
twirlfx.colorized = true
twirlfx.color = s.color
elseif (mint.twirl < 2)
s.state = S_PLAY_FALL
mint.twirl = 0
p.drawangle = R_PointToAngle(s.x, s.y, s.x+s.momx, s.y+s.momy)
elseif mint.twirl and P_IsObjectOnGround(s) or (s.momz*P_MobjFlip(s) < 0*s.scale and mint.twirl)
mint.twirl = 0
p.drawangle = R_PointToAngle(s.x, s.y, s.x+s.momx, s.y+s.momy) //s.angle
if not mint.burststomp
s.state = S_PLAY_FALL
end;end;end
if mint.twirl==2 and not mint.a and not (s.momz*P_MobjFlip(s) < 10*s.scale)
and not mint.trick
P_SetObjectMomZ(s, 9*FU)
end
if mint.twirl and (p.pflags&(PF_ANALOGMODE|PF_DIRECTIONCHAR))
p.drawangle = $-FixedAngle(58*FU)
end
/*if mint.twirl and mint.trick
and mint.c3==1
S_StartSound(s, sfx_kc5b)
S_StartSound(s, sfx_kc4d)
P_SetObjectMomZ(s, 0*FU)
P_InstaThrust(s,s.angle,0*FU)
local fx = P_SpawnGhostMobj(s)
fx.scale = s.scale
fx.destscale = 87<<16
fx.scalespeed = s.scale/3
fx.sprite2 = SPR2_FALL
fx.frame = FF_TRANS80
s.state = S_PLAY_FALL
mint.combo = 0
mint.spintrail = 0
mint.twirl,mint.trick = 0,00
p.pflags = $1&~PF_JUMPED
p.pflags = $|PF_THOKKED
p.drawangle = R_PointToAngle(s.x, s.y, s.x+s.momx, s.y+s.momy)
s.rollangle = 0
end*/
if mint.flip
mint.flip = $-1
if (mint.flip > 17)
s.state = S_PLAY_RIDE
end
if mint.flip==17
S_StartSoundAtVolume(s,sfx_mflip, 255)
s.spritexscale = FU+22500
s.spriteyscale = FU-41000
mint.stretch = {timer = 3}
s.state = S_PLAY_ROLL
end
if mint.flip==5
s.state = S_PLAY_FALL
s.spritexscale = FU+12500
s.spriteyscale = FU+31000
mint.stretch = {timer = 3}
mint.realcharge = 0
end;end
if s.state==S_PLAY_ROLL and mint.flip
s.momz = $*19/20
Mint.CrossMobj(p,s,mint, S_SSPK3,s.color,s.scale/2)
end
if mint.spintrail
mint.spintrail = $-1
if mint.twirl or (p.pflags&PF_SPINNING)
PerfectSpinTrail(s, 15,AST_ADD)
else
PerfectSpinTrail(s, 15,AST_ADD,s.scale/10)
end;end
if mint.burststompcd
mint.burststompcd = $-1
end
if mint.vocalcd
mint.vocalcd = $-1
end
if mint.noclip
mint.noclip = $-1
s.flags = $|MF_NOCLIPTHING
if (mint.noclip < 1)
s.flags = $ & ~MF_NOCLIPTHING
end;end
if mint.hearts
mint.hearts = $-1
P_DoMintHearts(p)
end
if mint.cocky
mint.cocky = $-1
end
if mint.banter
mint.banter = $-1
end
if mint.pout
mint.pout = $-1
end
if mint.spindash
mint.spindash = $-1
end
if mint.nocontrol
mint.nocontrol = $-1
p.powers[pw_nocontrol] = 1
end
if mint.giftcd
mint.giftcd = $-1
end
if mint.c3==1 and mint.giftcd
S_StartSound(s, sfx_s1b8)
end
if mint.stretch
MintStretch(p,s)
end
if mint.exiting and not s.gotmint
mint.exiting = $+1
end
if mint.respo
mint.respo = $-1
if (mint.respo==1)
Mint.Vocals(p,s,mint, sfx_mnvoct, 250)
s.spritexscale = FU-18500
s.spriteyscale = FU+11000
mint.stretch = {timer = 2}
end;end
if mint.paincd
mint.paincd = $-1
end
if mint.homing
mint.homing = $-1
end
if mint.uncapped
mint.uncapped = $-1
end
if mint.recovertime and (mint.recovertime >= 5)
mint.recovertime = 5
end
if (gametyperules & GTR_RACE) and (leveltime>29 and leveltime < 141)
if mint.raceboost and mint.b
mint.raceboost = $+1
s.spritexscale = FU+18500
s.spriteyscale = FU-10000/mint.raceboost
mint.stretch = {timer = 1}
end
if mint.b==1 and (leveltime>29 and leveltime < 141) and not mint.raceboost
mint.raceboost = 1
S_StartSound(s, sfx_s1b8)
end
if s.state==S_PLAY_STND
s.state = S_PLAY_MINTLANDALT
end
if mint.raceboost and not (mint.b or leveltime >= 128)
mint.raceboost = $-1
end
if leveltime == 30
Mint.Vocals(p,s,mint, sfx_mnvocf)
s.spritexscale = FU+18500
s.spriteyscale = FU-10000
mint.stretch = {timer = 3}
elseif leveltime == 139
s.tics = 1
s.state = S_PLAY_STND
if mint.raceboost and not mint.b
if (mint.raceboost >= 30)
P_DoMintEffect(p,s.color)
S_StartSound(s, sfx_mboost)
P_Thrust(s,s.angle,mint.raceboost*FU+50)
P_StartQuake(20*FU, 1*TICRATE*1/2)
mint.uncapped = 50
mint.zoomout = 15
mint.spintrail = 50
p.powers[pw_flashing] = 3*TICRATE/2
mint.raceboost = 0
elseif (mint.raceboost >= 1) and (mint.raceboost < 29)
S_StartSound(s, sfx_zoom)
P_Thrust(s,s.angle,mint.raceboost*FU+20)
mint.raceboost = 0
end
elseif mint.raceboost and mint.b
P_DoPlayerPain(p)
mint.raceboost = 0
end;end;end
if mint.raceboost==30
S_StartSound(s, sfx_3db16)
if (mint.raceboost >= 31) and mint.b
mint.raceboost = 31
end;end
if mint.raceboost and (mint.raceboost >= 30)
Mint.CrossMobj(p,s,mint, nil,s.color,s.scale/4)
end
if leveltime == 126 and mint.raceboost and mint.b
S_StartSound(s, sfx_kc55)
local fx = P_SpawnGhostMobj(s)
fx.scale = s.scale
fx.destscale = 87<<16
fx.scalespeed = s.scale/3
fx.frame = FF_TRANS80
end
if mint.raceboost and (mint.raceboost >= 30) and not (mint.b or leveltime >= 128)
S_StartSound(s, sfx_kc65)
s.spritexscale = FU+18500
s.spriteyscale = FU-10000
mint.stretch = {timer = 3}
mint.raceboost = 29
mint.pout = 30
end
if cameraspd.string != "0.03"
mint.camspd = cameraspd.string
end
if mint.zoomout
mint.zoomout = $-1
if mint.zoomout
COM_BufInsertText(p, "cam_speed 0.03")
elseif (mint.zoomout < 1) -- 1 means 0
COM_BufInsertText(p, "cam_speed "+mint.camspd)
mint.zoomout = 0
end;end
if mint.trick
mint.trick = $-1
s.state = S_PLAY_SPRING
s.rollangle = $-FixedAngle(mint.trick<<16)
if mint.trick==1 or P_IsObjectOnGround(s)
s.rollangle = 0
mint.trick = 0
end;end
if not p.powers[pw_invulnerability] and (p.didinvuln and p.didinvuln.valid)
P_KillMobj(p.didinvuln)
p.didinvuln = nil
end
if s.skin=="mint" and mint.otherchar==true
mint.otherchar = false
mint.gotthepower = false
p.pflags = $&~ PF_STARTDASH
p.pflags = $&~ PF_SPINNING
local intromint
intromint = {sfx_mnvoc7,sfx_mnvoc1,sfx_mnvoco}
local mrng = P_RandomRange(1, #intromint)
local intromint2 = intromint[mrng]
intromint2 = (mrng==#intromint) and intromint[1] or intromint[mrng+1]
S_StopSoundByID(s, sfx_mnvoc4)
S_StopSoundByID(s, sfx_mnvoc5)
S_StopSoundByID(s, sfx_mnvoc6)
if not S_SoundPlaying(s, intromint2)
Mint.Vocals(p,s,mint, intromint2)
end;end
if p.exiting==99
mint.exiting = 1
if (p.realtime < 2135)
S_FadeOutStopMusic(400, p)
end;end
if mint.exiting
if (p.realtime < 2135) and mint.exiting == 4
S_ChangeMusic("M1UP", false, p)
end
if (mint.exiting > 39) and P_IsObjectOnGround(s) //and not p.speed
and not mint.dance
mint.dance = true
s.state = S_PLAY_MINTDANCE
P_InstaThrust(s,s.angle,0*FU)
end
if mint.exiting==65 and (p.realtime < 2135)
and p.powers[pw_sneakers]
p.powers[pw_sneakers] = $+21*TICRATE
S_StartSound(s, sfx_s249)
s.spritexscale = FU-28500
s.spriteyscale = FU+21000
mint.stretch = {timer = 3}
local sp = P_SpawnMobjFromMobj(s, 0,0,s.height*1, MT_SNEAKERS_ICON)
end
if mint.exiting==80 and (p.realtime < 2135)
and p.powers[pw_invulnerability]
p.powers[pw_invulnerability] = $+21*TICRATE
S_StartSound(s, sfx_s249)
s.spritexscale = FU-28500
s.spriteyscale = FU+21000
mint.stretch = {timer = 3}
local inv = P_SpawnMobjFromMobj(s, 0,0,s.height*2, MT_INVULN_ICON)
end
if mint.exiting==108
mint.exiting = 0
G_ExitLevel()
end;end
if mint.flames
mint.flames = $-1
if not (s.eflags&MFE_UNDERWATER)
Mint.CrossMobj(p,s,mint, S_SPINDUST_FIRE1,nil,5*FU/4,AST_ADD)
end;end;end