//Startup

if Mint==nil rawset(_G,"Mint",{}) end //The global [*Mint*] variable

local Mint = Mint

Mint.Version = "v3.1.1"

Mint.Startup = function(p)

if consoleplayer and (CV_FindVar("cam_speed"))
and CV_FindVar("cam_speed").string=="0.03"
COM_BufInsertText(p, "cam_speed 0.3")
end

p.minttable = {
a = 0,
b = 0,
c1 = 0,
c2 = 0,
c3 = 0,
tossflag = 0,
fire = 0,
firenormal = 0,
spinlaunchcharge = false,
burststomp = false,
freeroam = nil,
dance = false,
otherchar = false,
target = nil,
target2 = nil,
zap = nil,
sbs = false,
framejump = 0,
superburststomp = 0,
exiting = 0,
flames = 0,
vocalcd = 0,
paincd = 0,
realcharge = 0,
burststompcd = 0,
twirl = 0,
hearts = 0,
cocky = 0,
recovertime = 0,
homing = 0,
combo = 0,
zoomout = 0,
spindash = 0,
giftcd = 0,
nocontrol = 0,
spintrail = 0,
uncapped = 0,
flip = 0,
respo = 0,
noclip = 0,
hyperbeam = 0,
banter = 0,
goforitjack = 0
}

CONS_Printf(p, "\n"+"\x88"+"Mint\x80 the\x85 AmyDroid\x80 ["..Mint.Version.."]"+"\n"+"By\x88 SSNeoMint")
if P_RandomChance(FU/4)
CONS_Printf(p, "\n"+"Enter 'mint_cmd' in the console for a list of Mint's commands!"+"\n")
CONS_Printf(p, "\n"+"Shoutouts to\x82 Golden Shine"+"\n") -- For some code from SMS, some GFX, and overall being a big inspiration
return true end
end

//Skincolors
freeslot("SKINCOLOR_SWEETNAM")
skincolors[SKINCOLOR_SWEETNAM] = {
	name = "Sweetnam",
    ramp = {0,0,128,128,129,129,130,130,130,132,133,134,135,136,137,138},
	invcolor = SKINCOLOR_YELLOW,
	invshade = 3,
	chatcolor = V_SKYMAP,
	accessible = true
}

freeslot "SKINCOLOR_LEGACYMINT"
skincolors[SKINCOLOR_LEGACYMINT] = {
	name = "LegacyMint",
    ramp = {0,1,1,128,128,128,129,129,129,130,130,131,132,134,134,135},
	invcolor = SKINCOLOR_YELLOW,
	invshade = 5,
	chatcolor = V_SKYMAP,
	accessible = true
}

freeslot "SKINCOLOR_NEOBLUE"
skincolors[SKINCOLOR_NEOBLUE] = {
	name = "NeoBlue",
    ramp = {144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159},
	invcolor = SKINCOLOR_RED,
	invshade = 5,
	chatcolor = V_BLUEMAP,
	accessible = true
}

freeslot "SKINCOLOR_SCARLET"
skincolors[SKINCOLOR_SCARLET] = {
	name = "Scarlet",
    ramp = {32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47},
	invcolor = SKINCOLOR_BLUE,
	invshade = 5,
	chatcolor = V_REDMAP,
	accessible = true
}

//States + SFX
freeslot("sfx_mkick2","sfx_mkick3","sfx_mkick4","sfx_mkick5","sfx_mkick6",
"sfx_bstomp","sfx_mbstop","sfx_mspnd","sfx_mbegun","sfx_mthok","sfx_mgrab",
"sfx_mspd","sfx_mshld","sfx_mstomp","sfx_mpop","sfx_mlnd","sfx_mlnch",
"sfx_mdodge","sfx_mdash","sfx_mboost","sfx_mtelep","sfx_mflip","sfx_mgift","sfx_mkick",
"sfx_mbstr1","sfx_mbstr2","sfx_mbstr3","sfx_mbstr4","sfx_mdive",
"SPR_MTHK","SPR_MFX1","S_PLAY_MINTLAND","S_PLAY_MINTLANDALT","S_PLAY_ALLHUG",
"S_PLAY_MINTDASH","S_PLAY_MINTDASH2","S_PLAY_MINTLEDGEGRAB",
"S_PLAY_MINTBEAM1","S_PLAY_MINTBEAM2","sfx_mspng","sfx_mkick",
"sfx_whoosh","sfx_mlock", "sfx_mboom","SPR2_LAVA","SPR2_MNT1","SPR2_MNT2",
"SPR2_MNT3","SPR2_MNT4","SPR2_MNT5","SPR2_TPOS", "S_PLAY_MINTKICK",
"S_PLAY_MINTTPOSE","S_PLAY_MINTPOUT","S_PLAY_MINTSIT","S_PLAY_MINTDANCE","sfx_mthok")
states[S_PLAY_MINTKICK] = {SPR_PLAY, SPR2_ROLL, 17, nil, 0, 0, S_PLAY_FALL}
states[S_PLAY_MINTLAND] = {SPR_PLAY, SPR2_TAL0, 17, nil, 0, 0, S_PLAY_STND}
states[S_PLAY_MINTLANDALT] = {SPR_PLAY, SPR2_TAL0, 17, nil, 0, 0, S_PLAY_STND}
states[S_PLAY_MINTTPOSE] = {SPR_PLAY, SPR2_TPOS, 3, nil, 0, 0, S_PLAY_MINTTPOSE}
states[S_PLAY_MINTSIT] = {SPR_PLAY, SPR2_TAL1, 3, nil, 0, 0, S_PLAY_MINTSIT}
states[S_PLAY_MINTDANCE] = {SPR_PLAY, SPR2_TAL3, 2, nil, 0, 0, S_PLAY_MINTDANCE}
states[S_PLAY_MINTPOUT] = {SPR_PLAY, SPR2_CNT1, 3, nil, 0, 0, S_PLAY_MINTPOUT}
states[S_PLAY_MINTDASH] = {SPR_PLAY, SPR2_TAL2, 15, nil, 0, 0, S_PLAY_FALL}
states[S_PLAY_MINTDASH2] = {SPR_PLAY, SPR2_TAL2, 30, nil, 0, 0, S_PLAY_SPRING}
states[S_PLAY_MINTLEDGEGRAB] = {SPR_PLAY, SPR2_RIDE, 6, nil, 0, 0, S_PLAY_SPRING}
states[S_PLAY_MINTBEAM1] = {SPR_PLAY, SPR2_SKID, 1, nil, 0, 0, S_PLAY_STND}
states[S_PLAY_MINTBEAM2] = {SPR_PLAY, SPR2_EDGE, 10, nil, 0, 0, S_PLAY_FALL}
//mobjinfo[MT_ROSY].deathstate = S_ROSY_UNHAPPY

//Voices
freeslot("sfx_mnvoc1","sfx_mnvoc2","sfx_mnvoc3","sfx_mnvoc4","sfx_mnvoc5",
"sfx_mnvoc6","sfx_mnvoc7","sfx_mnvoc8","sfx_mnvoc9","sfx_mnvoc0","sfx_mnvoca"
,"sfx_mnvocb","sfx_mnvocc","sfx_mnvocd","sfx_mnvoce","sfx_mnvocf","sfx_mnvocg",
"sfx_mnvoch","sfx_mnvoci","sfx_mnvocj","sfx_mnvock","sfx_mnvocl","sfx_mnvocm",
"sfx_mnvocn","sfx_mnvoco","sfx_mnvocp","sfx_mnvocq","sfx_mnvocr","sfx_mnvocs","sfx_mnvoct")

//Objects that don't exist yet
freeslot("MT_XSPOWERRING","MT_SONICEXE")
//Objects that do exist
freeslot("MT_MINTNOFEAR","S_MINV1","S_MINV2","S_MINV3","S_MINV4","S_MINV5","S_MINV6","S_MINV7","S_MINV7","S_MINV8","S_MINV9")

freeslot("MT_MINTATK","SPR_MFX2","S_MATK1","S_MATK2","S_MATK3","S_MATK4","S_MATK5","S_MATK6","S_MATK7","S_MATK7","S_MATK8","S_MATK9")

freeslot("MT_MINTLIGHTNING","SPR_MFX3","S_MRST1","S_MRST2","S_MRST3","S_MRST4")

freeslot("MT_THETRAIL","S_MINTTRAIL")

freeslot("MT_MBOMB")

mobjinfo[MT_THETRAIL] = {
	doomednum = -1,
	spawnstate = S_MINTTRAIL,
	flags = MF_NOGRAVITY|MF_NOBLOCKMAP|MF_NOCLIPHEIGHT|MF_NOCLIP|MF_NOCLIPTHING|MF_SCENERY
}

states[S_MINTTRAIL] = {
	sprite = SPR_MTHK,
	frame = B|FF_ANIMATE,
	tics = 8,
	nextstate = S_NULL
}

mobjinfo[MT_MINTNOFEAR] = {
	doomednum = -1,
	spawnstate = S_MINV1,
	flags = MF_SCENERY|MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT
}

states[S_MINV1] = {
	sprite = SPR_MFX1,
	frame = A|FF_ANIMATE,
	action = A_CapeChase,
	tics = 1,
	nextstate = S_MINV2
}
states[S_MINV2] = {
	sprite = SPR_MFX1,
	frame = B|FF_ANIMATE,
	action = A_CapeChase,
	tics = 1,
	nextstate = S_MINV3
}
states[S_MINV3] = {
	sprite = SPR_MFX1,
	frame = C|FF_ANIMATE,
	action = A_CapeChase,
	tics = 1,
	nextstate = S_MINV4
}
states[S_MINV4] = {
	sprite = SPR_MFX1,
	frame = D|FF_ANIMATE,
	action = A_CapeChase,
	tics = 1,
	nextstate = S_MINV5
}
states[S_MINV5] = {
	sprite = SPR_MFX1,
	frame = E|FF_ANIMATE,
	action = A_CapeChase,
	tics = 1,
	nextstate = S_MINV6
}
states[S_MINV6] = {
	sprite = SPR_MFX1,
	frame = F|FF_ANIMATE,
	action = A_CapeChase,
	tics = 1,
	nextstate = S_MINV7
}
states[S_MINV7] = {
	sprite = SPR_MFX1,
	frame = G|FF_ANIMATE,
	action = A_CapeChase,
	tics = 1,
	nextstate = S_MINV8
}
states[S_MINV8] = {
	sprite = SPR_MFX1,
	frame = H|FF_ANIMATE,
	action = A_CapeChase,
	tics = 1,
	nextstate = S_MINV9
}
states[S_MINV9] = {
	sprite = SPR_MFX1,
	frame = I|FF_ANIMATE,
	action = A_CapeChase,
	tics = 1,
	nextstate = S_MINV1
}

mobjinfo[MT_MINTATK] = {
	doomednum = -1,
	spawnstate = S_MATK1,
	flags = MF_SCENERY|MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT
}

states[S_MATK1] = {
	sprite = SPR_MFX2,
	frame = A|FF_ANIMATE,
	tics = 1,
	nextstate = S_MATK2
}
states[S_MATK2] = {
	sprite = SPR_MFX2,
	frame = B|FF_ANIMATE,
	tics = 1,
	nextstate = S_MATK3
}
states[S_MATK3] = {
	sprite = SPR_MFX2,
	frame = C|FF_ANIMATE,
	tics = 1,
	nextstate = S_MATK4
}
states[S_MATK4] = {
	sprite = SPR_MFX2,
	frame = D|FF_ANIMATE,
	tics = 1,
	nextstate = S_MATK5
}
states[S_MATK5] = {
	sprite = SPR_MFX2,
	frame = E|FF_ANIMATE,
	tics = 1,
	nextstate = S_MATK6
}
states[S_MATK6] = {
	sprite = SPR_MFX2,
	frame = F|FF_ANIMATE,
	tics = 1,
	nextstate = S_MATK7
}
states[S_MATK7] = {
	sprite = SPR_MFX2,
	frame = G|FF_ANIMATE,
	tics = 1,
	nextstate = S_MATK8
}
states[S_MATK8] = {
	sprite = SPR_MFX2,
	frame = H|FF_ANIMATE,
	tics = 1,
	nextstate = S_MATK9
}
states[S_MATK9] = {
	sprite = SPR_MFX2,
	frame = I|FF_ANIMATE,
	tics = 1,
	nextstate = S_NULL
}

mobjinfo[MT_MINTLIGHTNING] = {
	doomednum = -1,
	spawnstate = S_MRST1,
	flags = MF_SCENERY|MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT
}

states[S_MRST1] = {
	sprite = SPR_MFX3,
	frame = A|FF_ANIMATE,
	tics = 2,
	nextstate = S_MRST2
}
states[S_MRST2] = {
	sprite = SPR_MFX3,
	frame = B|FF_ANIMATE,
	tics = 2,
	nextstate = S_MRST3
}
states[S_MRST3] = {
	sprite = SPR_MFX3,
	frame = C|FF_ANIMATE,
	tics = 3,
	nextstate = S_MRST4
}
states[S_MRST4] = {
	sprite = SPR_MFX3,
	frame = D|FF_ANIMATE,
	tics = 4,
	nextstate = S_MRST4
}

rawset(_G, "FactoryReset", function(p,s,mint)
if not (p and p.valid and p.minttable) return end
if consoleplayer and (CV_FindVar("cam_speed"))
and CV_FindVar("cam_speed").string=="0.03"
COM_BufInsertText(p, "cam_speed 0.3")
end
if p.minttable
p.pflags = $1&~PF_SPINNING
p.pflags = $&~ PF_STARTDASH
p.powers[pw_strong] = $&~ STR_SPRING
p.powers[pw_strong] = $&~ STR_BUST
s.spritexscale = s.scale
s.spriteyscale = s.scale
//p.drawangle = s.angle
mint.spinlaunchcharge = false
mint.burststomp = false
mint.dance = false
mint.target = nil
mint.target2 = nil
mint.zap = nil
mint.sbs = false
mint.framejump = 0
mint.superburststomp = 0
mint.exiting = 0
mint.burststompcd = 0
mint.twirl = 0
mint.trick = 0
mint.hearts = 0
mint.cocky = 0
mint.recovertime = 0
mint.spintrail = 0
mint.realcharge = 1
mint.combo = 0
mint.combat = 0
mint.paincd = 0
mint.zoomout = 1
mint.spindash = 0
mint.giftcd = 0
mint.nocontrol = 0
mint.uncapped = 0
mint.goforitjack = 0
mint.flip = 0
mint.noclip = 0
mint.hyperbeam = 0
mint.banter = 0
end
if s.state==S_PLAY_MINTTPOSE
or s.state==S_PLAY_MINTPOUT
or s.state==S_PLAY_MINTSIT
or s.state==S_PLAY_MINTDANCE
s.state = S_PLAY_STND
end;end)

addHook("PlayerSpawn",function(p)
local s = p.realmo
local mint = p.minttable

if not p.minttable Mint.Startup(p) return end

if s.skin=="mint" and mint

if not p.spectator and mint.shield
p.powers[pw_shield] = mint.shield
S_StartSoundAtVolume(s, sfx_mshld, 140)
P_SpawnShieldOrb(p)
mint.shield = nil
end
if mint.rings
P_GivePlayerRings(p, mint.rings)
end
if not p.spectator and mint.rail
P_SpawnMobjFromMobj(s,0,0,0, MT_RAILPICKUP)
p.powers[pw_railring] = mint.rail-5
elseif not mint.rail and mint.matchgt
P_SpawnMobjFromMobj(s,0,0,0, MT_RAILPICKUP)
end
if mint.speedup and not (marathonmode)
p.powers[pw_sneakers] = mint.speedup
S_ChangeMusic("MSHOES", true, p)
end
if mint.nofear and not (marathonmode)
p.powers[pw_invulnerability] = mint.nofear
S_ChangeMusic("_MINV", true, p)
P_DoMintEffect3(p)
end
if (CBW_Battle and CBW_Battle.BattleGametype or mint.matchgt) and not p.spectator
local battlevoice
battlevoice = {sfx_mnvocb,sfx_mnvoc7,sfx_mnvocf,sfx_mnvocg}
local mrng = P_RandomRange(1, #battlevoice)
local battlevoice2 = battlevoice[mrng]
battlevoice2 = (mrng==#battlevoice) and battlevoice[1] or battlevoice[mrng+1]
Mint.Vocals(p,s,mint, battlevoice2)
end;end;end)

//LOL
addHook("MobjSpawn", function(amy)
if not (amy and amy.valid) return end
amy.colorized = false
amy.color = 68
amy.flags = $|MF_SHOOTABLE
amy.radius = skins["amy"].radius
amy.height = skins["amy"].height
amy.health = 30
end, MT_ROSY)

addHook("GameQuit", function()
if consoleplayer and not (isdedicatedserver==true and consoleplayer==server)
local p = consoleplayer local mint = p.minttable

if (CV_FindVar("cam_speed")) and CV_FindVar("cam_speed").string=="0.03"
if mint and mint.camspd
COM_BufInsertText(p, "cam_speed "+mint.camspd)
else
COM_BufInsertText(p, "cam_speed 0.3")
end;end;end;end)

//Captions
sfxinfo[sfx_mboom].caption = "\x85"+"BOOM"+"\x80"
sfxinfo[sfx_mkick].caption = "\x88"+"NOW THAS ALOTTA DAMAGE"+"\x80"
sfxinfo[sfx_mkick2].caption = "\x88"+"NOW THAS ALOTTA DAMAGE"+"\x80"
sfxinfo[sfx_mkick3].caption = "\x88"+"NOW THAS ALOTTA DAMAGE"+"\x80"
sfxinfo[sfx_mkick4].caption = "\x88"+"NOW THAS ALOTTA DAMAGE"+"\x80"
sfxinfo[sfx_mkick5].caption = "\x88"+"NOW THAS ALOTTA DAMAGE"+"\x80"
sfxinfo[sfx_mkick6].caption = "\x88"+"NOW THAS ALOTTA DAMAGE"+"\x80"
sfxinfo[sfx_whoosh].caption = "\x88"+"Whoosh"+"\x80"
sfxinfo[sfx_mspng].caption = "\x88"+"Super "+"\x85"+"Power Spring"+"\x80"
sfxinfo[sfx_mbstop].caption = "\x88"+"Burst Drop"+"\x80"
sfxinfo[sfx_mspnd].caption = "Curl"
sfxinfo[sfx_mgrab].caption = "Ledge Grab"
sfxinfo[sfx_mbegun].caption = "Homing Attack Start"
sfxinfo[sfx_mthok].caption = "\x88"+"Thok"+"\x80"
sfxinfo[sfx_mlock].caption = "/"
sfxinfo[sfx_mshld].caption = "\x88"+"Saved shield"+"\x80"
sfxinfo[sfx_mstomp].caption = "\x88"+"Burst Stomp"+"\x80"
sfxinfo[sfx_mpop].caption = "Monitor Pop"
sfxinfo[sfx_mlnd].caption = "Landing"
sfxinfo[sfx_mlnch].caption = "\x88"+"Super Spin Launch"+"\x80"
sfxinfo[sfx_mdodge].caption = "Dodge"
sfxinfo[sfx_mdash].caption = "Weak Air Dash"
sfxinfo[sfx_mboost].caption = "\x88"+"BOOST"+"\x80"
sfxinfo[sfx_mgift].caption = "\x82"+"Gift"+"\x80"
sfxinfo[sfx_mtelep].caption = "Super Special Strike"
sfxinfo[sfx_mflip].caption = "Flip"
sfxinfo[sfx_mdive].caption = "\x88"+"Whoosh"+"\x80"

sfxinfo[sfx_mnvoc1].caption = "Let's do it!"
sfxinfo[sfx_mnvoc2].caption = "Man, that was horrible.."
sfxinfo[sfx_mnvoc3].caption = "Over and out!"
sfxinfo[sfx_mnvoc4].caption = "I rule!"
sfxinfo[sfx_mnvoc5].caption = "That was fab-u-lous!"
sfxinfo[sfx_mnvoc6].caption = "I kicked butt."
sfxinfo[sfx_mnvoc7].caption = "Here goes nothin'!"
sfxinfo[sfx_mnvoc8].caption = "Ah-!"
sfxinfo[sfx_mnvoc9].caption = "Agh!"
sfxinfo[sfx_mnvoc0].caption = "Ahh!"
sfxinfo[sfx_mnvoca].caption = "Nnnooooo!"
sfxinfo[sfx_mnvocb].caption = "I'll take you out!"
sfxinfo[sfx_mnvocc].caption = "I gotta get better at this."
sfxinfo[sfx_mnvocd].caption = "I gotta practice more.."
sfxinfo[sfx_mnvoce].caption = "That was lame."
sfxinfo[sfx_mnvocf].caption = "Let's see who's better."
sfxinfo[sfx_mnvocg].caption = "I won't give up."
sfxinfo[sfx_mnvoch].caption = "Oops! I'm so sorry~"
sfxinfo[sfx_mnvoci].caption = "Aaaaaaa!"
sfxinfo[sfx_mnvocj].caption = "That wasn't bad.."
sfxinfo[sfx_mnvock].caption = "That wasn't SO bad.."
sfxinfo[sfx_mnvocl].caption = "I couldn't get all of 'em.."
sfxinfo[sfx_mnvocm].caption = "Okay!"
sfxinfo[sfx_mnvocn].caption = "Gotcha!"
sfxinfo[sfx_mnvoco].caption = "Here we go!"
sfxinfo[sfx_mnvocp].caption = "\x82"+"Hey!"+"\x80"
sfxinfo[sfx_mnvocq].caption = "What the?!"
sfxinfo[sfx_mnvocr].caption = "Hyah!"
sfxinfo[sfx_mnvocs].caption = "Hi-yah!"
sfxinfo[sfx_mnvoct].caption = "\x82"+"What?"+"\x80"