// do not load the following objects if same objects are already loaded
if pcall(do return _G["MT_MSTREE"] end)
	print("\131NOTICE:\128 Mind Tree and Mind Root objects already loaded.")
	return
end

//Big Tree

freeslot("MT_MSTREE","MT_MSTREEBRANCH", "MT_MSROOT",
"S_MSTREE","S_MSTREEBRANCH", "S_MSROOT",
"SPR_MSTT","SPR_MSTB", "SPR_MSRT", "SPR_RTSP")

mobjinfo[MT_MSTREE] = {
    --$Name "Mind Tree"
    --$Sprite MSTTA0
    --$Category "Mindscape"
    doomednum = 4094,
    spawnstate = S_MSTREE,
    radius = 20*FRACUNIT,
    height = 256*FRACUNIT,
    flags = MF_SOLID|MF_SCENERY
}
mobjinfo[MT_MSTREEBRANCH] = {
    spawnstate = S_MSTREEBRANCH,
    flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY
}
states[S_MSTREE].sprite = SPR_MSTT
states[S_MSTREEBRANCH] = {
    sprite = SPR_MSTB,
    frame = FF_PAPERSPRITE|A
}

//spawning the big tree 

addHook("MapThingSpawn", function(mo, mt)
    local ang = ANG1 * 72
    for i = 0, 5
        local b = P_SpawnMobjFromMobj(mo, 0, 0, 0, MT_MSTREEBRANCH)
        b.angle = mt.angle + (ang * i)
    end
end, MT_MSTREE)

// Root scenery

mobjinfo[MT_MSROOT] = {
	--$Name "Mind Roots"
    --$Sprite MSRTA0
    --$Category "Mindscape"
	doomednum = 4095,
    spawnstate = S_MSROOT,
    radius = 21*FRACUNIT,
    height = 48*FRACUNIT,
    flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY
}

states[S_MSROOT] = {
	sprite = SPR_MSRT,
	frame = FF_FULLBRIGHT
}

addHook("MapThingSpawn", function(mo, mt)
	mo.frame = mt.angle % 6
	
	local sparkleradii = {20, 26, 30, 89, 42, 65}
	local heights = {69, 108, 87, 108, 158, 158}
	
	mo.sparkleradius = sparkleradii[(mo.frame & FF_FRAMEMASK) + 1]
	mo.height = heights[(mo.frame & FF_FRAMEMASK) + 1] * FRACUNIT
end, MT_MSROOT)

addHook("MobjThinker", function(mo)
	local rate = FixedInt(mo.sparkleradius / 72)
	if leveltime % ((5 - rate) * 2) return end
	
	local ang = P_RandomKey(180) * ANG2
	local dist = P_RandomRange(0, mo.sparkleradius)
	local height = P_RandomRange(0, FixedInt(mo.height/2))
	
	local sparkle = P_SpawnMobjFromMobj(mo, dist*cos(ang), dist*sin(ang), 0, MT_THOK)
	sparkle.sprite = SPR_RTSP
	sparkle.frame = P_RandomRange(0, 1) | (P_RandomRange(0, 3) * FRACUNIT)
	sparkle.tics = -1
	sparkle.color = P_RandomChance(FRACUNIT/2) and SKINCOLOR_AETHER or SKINCOLOR_BLUEBELL
	sparkle.blendmode = AST_ADD
	sparkle.momz = P_MobjFlip(mo) * FRACUNIT
	sparkle.fuse = FixedInt(mo.height) + P_RandomRange(-8, 8)
	sparkle.destscale = sparkle.scale / 8
	sparkle.scalespeed = $ / (16 - rate)
end, MT_MSROOT)

addHook("MobjCollide", function(mo, tmo)
	if tmo.type == mo.type return false end
end, MT_MSROOT)
