only show the parent arrows for the selected bone?

General Moho topics.

Moderators: Víctor Paredes, Belgarath, slowtiger

Post Reply
User avatar
tifacloud7
Posts: 3
Joined: Wed May 21, 2025 3:01 am

only show the parent arrows for the selected bone?

Post by tifacloud7 »

Hi everyone! I'm pretty new to Moho . :oops:
I haven’t been able to find much info or tutorials on this, so I thought I’d make a post and ask here. Really appreciate your time and any help you can offer!

So, I’m wondering — is there a way to make the parent arrows on bones smaller, or only show the parent arrows for the bone I have selected?

When I’m working on more complex rigging, the parent arrows sometimes get in the way and block the bones I’m trying to click on. It gets a bit tricky to work with.

I’ve tried using the “Toggle Color Bones” script to hide the bones I don’t need, but their parent arrows still show up even when the bones are hidden.

Just wondering how you all deal with this?
Would love to hear any tips or workarounds. Thanks so much in advance!

Image "There are arrows all over the place!" :x
User avatar
slowtiger
Posts: 6242
Joined: Thu Feb 16, 2006 6:53 pm
Location: Berlin, Germany
Contact:

Re: only show the parent arrows for the selected bone?

Post by slowtiger »

You can keep any bone invisible by making it a shy bone (and reverse that, of course). This is useful f you have a rig with many small bones cluttering your view.
AS 9.5 MacPro Quadcore 3GHz 16GB OS 10.6.8 Quicktime 7.6.6
AS 11 MacPro 12core 3GHz 32GB OS 10.11 Quicktime 10.7.3
Moho 13.5 iMac Quadcore 2,9GHz 16GB OS 10.15

Moho 14.1 Mac Mini Plus OS 13.5
User avatar
hayasidist
Posts: 3840
Joined: Wed Feb 16, 2011 8:12 pm
Location: Kent, England

Re: only show the parent arrows for the selected bone?

Post by hayasidist »

slowtiger wrote: Thu May 22, 2025 9:50 am You can keep any bone invisible by making it a shy bone (and reverse that, of course). This is useful f you have a rig with many small bones cluttering your view.
I think that just hides the bone, not the parenting arrows? (same as hiding coloured bones).
User avatar
tifacloud7
Posts: 3
Joined: Wed May 21, 2025 3:01 am

Re: only show the parent arrows for the selected bone?

Post by tifacloud7 »

Thanks so much for all the replies!

You're right — when using the Shy Bone tool to hide bones, as soon as I switch to the Reparent Bone tool, all the parent arrows still show up — including those from the hidden bones. It really gets in the way and makes things difficult. :cry:

I’m also wondering — is there a tool or option that lets me choose the parent bone from a menu or list, instead of clicking directly in the viewport? :?:
Because right now, the arrows are covering so many bones that I can’t clearly see or select the one I want. :x
User avatar
synthsin75
Posts: 10264
Joined: Mon Jan 14, 2008 11:20 pm
Location: Oklahoma
Contact:

Re: only show the parent arrows for the selected bone?

Post by synthsin75 »

A quick mod of the reparent bone tool:

Code: Select all

-- **************************************************
-- Provide Moho with the name of this script object
-- **************************************************

ScriptName = "LM_ReparentBone"

-- **************************************************
-- General information about this script
-- **************************************************

LM_ReparentBone = {}

LM_ReparentBone.BASE_STR = 2230

function LM_ReparentBone:Name()
	return "Reparent Bone"
end

function LM_ReparentBone:Version()
	return "6.0"
end

function LM_ReparentBone:Description()
	return MOHO.Localize("/Scripts/Tool/ReparentBone/Description=Click to attach bone to a new parent (hold <alt> to select a new bone, <ctrl/cmd> to select a target bone)")
end

function LM_ReparentBone:Creator()
	return "Lost Marble LLC"
end

function LM_ReparentBone:UILabel()
	return(MOHO.Localize("/Scripts/Tool/ReparentBone/ReparentBone=Reparent Bone"))
end

-- **************************************************
-- The guts of this script
-- **************************************************

function LM_ReparentBone:IsEnabled(moho)
	if (moho:CountBones() < 2) then
		return false
	end
	if (moho.frame > 0 and not MOHO.IsMohoPro()) then
		return false
	end
	return true
end

function LM_ReparentBone:IsRelevant(moho)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return false
	end
	if (moho.frame > 0 and not MOHO.IsMohoPro()) then
		return false
	end
	return true
end

function LM_ReparentBone:OnMouseDown(moho, mouseEvent)
	moho.document:PrepUndo(moho.layer, true)
	moho.document:SetDirty()
	self:OnReparent(moho, mouseEvent)
end

function LM_ReparentBone:OnMouseMoved(moho, mouseEvent)
	self:OnReparent(moho, mouseEvent)
end

function LM_ReparentBone:OnMouseUp(moho, mouseEvent)
	moho:UpdateUI()
end

function LM_ReparentBone:OnKeyDown(moho, keyEvent)
	LM_SelectBone:OnKeyDown(moho, keyEvent)
end

function LM_ReparentBone:DrawMe(moho, view)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	local g = view:Graphics()
	local matrix = LM.Matrix:new_local()
	local bonePt = LM.Vector2:new_local()
	local parentPt = LM.Vector2:new_local()
	local arrowPt1 = LM.Vector2:new_local()
	local arrowPt2 = LM.Vector2:new_local()

	moho.layer:GetFullTransform(moho.frame, matrix, moho.document)
	g:Push()
	g:ApplyMatrix(matrix)

	g:SetSmoothing(true)
	for i = 0, skel:CountBones() - 1 do
		local bone = skel:Bone(i)
		--if (bone.fParent >= 0) then
--[[syn]]	if (bone.fParent >= 0) and (bone.fSelected or skel:Bone(bone.fParent).fSelected)--[[(not bone.fHidden)]] then
			local parentBone = skel:Bone(bone.fParent)

			bonePt:Set(bone.fLength / 2, 0)
			if (moho.frame > 0) then
				bone.fMovedMatrix:Transform(bonePt)
			else
				bone.fRestMatrix:Transform(bonePt)
			end

			parentPt:Set(parentBone.fLength / 2, 0)
			if (moho.frame > 0) then
				parentBone.fMovedMatrix:Transform(parentPt)
			else
				parentBone.fRestMatrix:Transform(parentPt)
			end

			local v = parentPt - bonePt
			local mag = v:Mag()
			local f = mag
			if (f > 0.2) then
				f = 0.2
			end
			arrowPt1:Set(mag - f / 4, -f / 16)
			arrowPt2:Set(mag - f / 4, f / 16)
			f = math.atan(v.y, v.x)
			arrowPt1:Rotate(f)
			arrowPt2:Rotate(f)
			arrowPt1.x = arrowPt1.x + bonePt.x
			arrowPt1.y = arrowPt1.y + bonePt.y
			arrowPt2.x = arrowPt2.x + bonePt.x
			arrowPt2.y = arrowPt2.y + bonePt.y

			if (bone.fSelected) then
				g:SetColor(MOHO.MohoGlobals.SelCol)
			else
				g:SetColor(MOHO.MohoGlobals.ElemCol)
			end
			g:DrawLine(bonePt.x, bonePt.y, parentPt.x, parentPt.y)
			g:BeginShape()
			g:AddLine(parentPt, arrowPt1)
			g:AddLine(arrowPt1, arrowPt2)
			g:AddLine(arrowPt2, parentPt)
			g:EndShape()
		end
	end

	g:Pop()
end

function LM_ReparentBone:OnReparent(moho, mouseEvent)
	if (mouseEvent.altKey) then
		LM_SelectBone:Select(moho, mouseEvent.pt, mouseEvent.vec, mouseEvent.view, mouseEvent.shiftKey, mouseEvent.ctrlKey)
		return
	end

	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	if (moho:CountSelectedBones() < 1) then
		return
	end

	-- let the user pick another bone - this will be the new parent
	local parentID = mouseEvent.view:PickBone(mouseEvent.pt, mouseEvent.vec, moho.layer, true)
	local parentFrame = moho.layerFrame -- 0

	if (mouseEvent.ctrlKey) then
		local targetChanged = false
		for i = 0, skel:CountBones() - 1 do
			local bone = skel:Bone(i)

			if (bone.fSelected and parentID ~= bone.fTargetBone:GetValue(moho.layerFrame)) then
				bone.fTargetBone:SetValue(moho.layerFrame, parentID)
				targetChanged = true
			end
		end
		if (targetChanged) then
			moho:NewKeyframe(CHANNEL_BONE_TARGET)
		end
	else
		for i = 0, skel:CountBones() - 1 do
			local bone = skel:Bone(i)

			if (bone.fSelected) then
				if (not skel:IsBoneChild(i, parentID)) then
					-- new parent chosen
					local v1 = LM.Vector2:new_local()
					local v2 = LM.Vector2:new_local()
					v1:Set(0, 0)
					if (bone:IsZeroLength()) then
						v2:Set(0.1, 0)
					else
						v2:Set(bone.fLength, 0)
					end
					if (moho.frame > 0) then
						bone.fMovedMatrix:Transform(v1)
						bone.fMovedMatrix:Transform(v2)
					else
						bone.fRestMatrix:Transform(v1)
						bone.fRestMatrix:Transform(v2)
					end

					if (parentID >= 0) then
						local invMatrix = LM.Matrix:new_local()
						local parent = skel:Bone(parentID)
						if (moho.frame > 0) then
							invMatrix:Set(parent.fMovedMatrix)
						else
							invMatrix:Set(parent.fRestMatrix)
						end
						invMatrix:Invert()
						invMatrix:Transform(v1)
						invMatrix:Transform(v2)
					end

					if (parentFrame ~= 0) then
						bone.fAnimPos:AddKey(parentFrame - 1)
						if (bone:ParentalFlipFactor() < 0.0) then
							bone.fFlipV:SetValue(parentFrame, not bone.fFlipV:GetValue(parentFrame))
						end
						bone.fAnimPos:SetValue(parentFrame, v1 - bone.fOffset)
					else
						bone.fAnimPos:SetValue(parentFrame, v1)
					end
					v2 = v2 - v1
					local angle = math.atan(v2.y, v2.x)

					while angle > 2 * math.pi do
						angle = angle - 2 * math.pi
					end
					while angle < 0 do
						angle = angle + 2 * math.pi
					end

					if (bone.fFixedAngle) then
						if (parentFrame == 0) then
							bone.fAnimAngle:SetValue(parentFrame, angle)
						end
					else
						local angleDiff = angle - bone.fAnimAngle:GetValue(parentFrame)
						if (parentFrame ~= 0) then
							bone.fAnimAngle:AddKey(parentFrame - 1)
						end
						bone.fAnimAngle:SetValue(parentFrame, angle)
						-- update future angle keyframes for relative offsets just like this frame
						for keyID = 0, bone.fAnimAngle:CountKeys() - 1 do
							local angleFrame = bone.fAnimAngle:GetKeyWhen(keyID)
							if (angleFrame > parentFrame) then
								local newAngle = bone.fAnimAngle:GetValue(angleFrame) + angleDiff
								bone.fAnimAngle:SetValue(angleFrame, newAngle)
							end
						end
						if (parentFrame == 0) then -- update action keyframes for relative offsets just like this frame
							for actionID = 0, bone.fAnimAngle:CountActions() - 1 do
								local action = moho:ChannelAsAnimVal(bone.fAnimAngle:Action(actionID))
								for keyID = 0, action:CountKeys() - 1 do
									local angleFrame = action:GetKeyWhen(keyID)
									if (angleFrame > parentFrame) then
										local newAngle = action:GetValue(angleFrame) + angleDiff
										action:SetValue(angleFrame, newAngle)
									end
								end
							end
						end
					end

					if (bone.fAnimParent:CountKeys() < 2) then
						bone.fAnimParent:SetValue(0, bone.fParent)
					end
					bone.fParent = parentID
					bone.fAnimParent:SetValue(parentFrame, parentID)
					if (parentFrame ~= 0) then
						if (bone:ParentalFlipFactor() < 0.0) then
							bone.fFlipV:SetValue(parentFrame, not bone.fFlipV:GetValue(parentFrame))
						end
					end
				end
			end
		end

		moho:NewKeyframe(CHANNEL_BONE)
		moho:NewKeyframe(CHANNEL_BONE_T)
		moho:NewKeyframe(CHANNEL_BONE_PARENT)
	end

	moho.layer:UpdateCurFrame()
	mouseEvent.view:DrawMe()
	moho:UpdateSelectedChannels()
end

-- **************************************************
-- Tool options - create and respond to tool's UI
-- **************************************************

LM_ReparentBone.CHANGE = MOHO.MSG_BASE
LM_ReparentBone.DUMMY = MOHO.MSG_BASE + 1
LM_ReparentBone.SELECTITEM = MOHO.MSG_BASE + 2

function LM_ReparentBone:DoLayout(moho, layout)
	self.menu = LM.GUI.Menu(MOHO.Localize("/Scripts/Tool/ReparentBone/SelectBone=Select Bone"))

	self.popup = LM.GUI.PopupMenu(128, false)
	self.popup:SetMenu(self.menu)
	layout:AddChild(self.popup)
end

function LM_ReparentBone:UpdateWidgets(moho)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	MOHO.BuildBoneMenu(self.menu, skel, self.SELECTITEM, self.DUMMY)
end

function LM_ReparentBone:HandleMessage(moho, view, msg)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	if (msg >= self.SELECTITEM) then
		for i = 0, skel:CountBones() - 1 do
			skel:Bone(i).fSelected = (i == msg - self.SELECTITEM)
		end
		moho:UpdateUI()
	end
end
This will only show the arrow of the selected bone and its parent bone.
User avatar
tifacloud7
Posts: 3
Joined: Wed May 21, 2025 3:01 am

Re: only show the parent arrows for the selected bone?

Post by tifacloud7 »

synthsin75 wrote: Fri May 23, 2025 2:52 am A quick mod of the reparent bone tool:

Code: Select all

-- **************************************************
-- Provide Moho with the name of this script object
-- **************************************************

ScriptName = "LM_ReparentBone"

-- **************************************************
-- General information about this script
-- **************************************************

LM_ReparentBone = {}

LM_ReparentBone.BASE_STR = 2230

function LM_ReparentBone:Name()
	return "Reparent Bone"
end

function LM_ReparentBone:Version()
	return "6.0"
end

function LM_ReparentBone:Description()
	return MOHO.Localize("/Scripts/Tool/ReparentBone/Description=Click to attach bone to a new parent (hold <alt> to select a new bone, <ctrl/cmd> to select a target bone)")
end

function LM_ReparentBone:Creator()
	return "Lost Marble LLC"
end

function LM_ReparentBone:UILabel()
	return(MOHO.Localize("/Scripts/Tool/ReparentBone/ReparentBone=Reparent Bone"))
end

-- **************************************************
-- The guts of this script
-- **************************************************

function LM_ReparentBone:IsEnabled(moho)
	if (moho:CountBones() < 2) then
		return false
	end
	if (moho.frame > 0 and not MOHO.IsMohoPro()) then
		return false
	end
	return true
end

function LM_ReparentBone:IsRelevant(moho)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return false
	end
	if (moho.frame > 0 and not MOHO.IsMohoPro()) then
		return false
	end
	return true
end

function LM_ReparentBone:OnMouseDown(moho, mouseEvent)
	moho.document:PrepUndo(moho.layer, true)
	moho.document:SetDirty()
	self:OnReparent(moho, mouseEvent)
end

function LM_ReparentBone:OnMouseMoved(moho, mouseEvent)
	self:OnReparent(moho, mouseEvent)
end

function LM_ReparentBone:OnMouseUp(moho, mouseEvent)
	moho:UpdateUI()
end

function LM_ReparentBone:OnKeyDown(moho, keyEvent)
	LM_SelectBone:OnKeyDown(moho, keyEvent)
end

function LM_ReparentBone:DrawMe(moho, view)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	local g = view:Graphics()
	local matrix = LM.Matrix:new_local()
	local bonePt = LM.Vector2:new_local()
	local parentPt = LM.Vector2:new_local()
	local arrowPt1 = LM.Vector2:new_local()
	local arrowPt2 = LM.Vector2:new_local()

	moho.layer:GetFullTransform(moho.frame, matrix, moho.document)
	g:Push()
	g:ApplyMatrix(matrix)

	g:SetSmoothing(true)
	for i = 0, skel:CountBones() - 1 do
		local bone = skel:Bone(i)
		--if (bone.fParent >= 0) then
--[[syn]]	if (bone.fParent >= 0) and (bone.fSelected or skel:Bone(bone.fParent).fSelected)--[[(not bone.fHidden)]] then
			local parentBone = skel:Bone(bone.fParent)

			bonePt:Set(bone.fLength / 2, 0)
			if (moho.frame > 0) then
				bone.fMovedMatrix:Transform(bonePt)
			else
				bone.fRestMatrix:Transform(bonePt)
			end

			parentPt:Set(parentBone.fLength / 2, 0)
			if (moho.frame > 0) then
				parentBone.fMovedMatrix:Transform(parentPt)
			else
				parentBone.fRestMatrix:Transform(parentPt)
			end

			local v = parentPt - bonePt
			local mag = v:Mag()
			local f = mag
			if (f > 0.2) then
				f = 0.2
			end
			arrowPt1:Set(mag - f / 4, -f / 16)
			arrowPt2:Set(mag - f / 4, f / 16)
			f = math.atan(v.y, v.x)
			arrowPt1:Rotate(f)
			arrowPt2:Rotate(f)
			arrowPt1.x = arrowPt1.x + bonePt.x
			arrowPt1.y = arrowPt1.y + bonePt.y
			arrowPt2.x = arrowPt2.x + bonePt.x
			arrowPt2.y = arrowPt2.y + bonePt.y

			if (bone.fSelected) then
				g:SetColor(MOHO.MohoGlobals.SelCol)
			else
				g:SetColor(MOHO.MohoGlobals.ElemCol)
			end
			g:DrawLine(bonePt.x, bonePt.y, parentPt.x, parentPt.y)
			g:BeginShape()
			g:AddLine(parentPt, arrowPt1)
			g:AddLine(arrowPt1, arrowPt2)
			g:AddLine(arrowPt2, parentPt)
			g:EndShape()
		end
	end

	g:Pop()
end

function LM_ReparentBone:OnReparent(moho, mouseEvent)
	if (mouseEvent.altKey) then
		LM_SelectBone:Select(moho, mouseEvent.pt, mouseEvent.vec, mouseEvent.view, mouseEvent.shiftKey, mouseEvent.ctrlKey)
		return
	end

	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	if (moho:CountSelectedBones() < 1) then
		return
	end

	-- let the user pick another bone - this will be the new parent
	local parentID = mouseEvent.view:PickBone(mouseEvent.pt, mouseEvent.vec, moho.layer, true)
	local parentFrame = moho.layerFrame -- 0

	if (mouseEvent.ctrlKey) then
		local targetChanged = false
		for i = 0, skel:CountBones() - 1 do
			local bone = skel:Bone(i)

			if (bone.fSelected and parentID ~= bone.fTargetBone:GetValue(moho.layerFrame)) then
				bone.fTargetBone:SetValue(moho.layerFrame, parentID)
				targetChanged = true
			end
		end
		if (targetChanged) then
			moho:NewKeyframe(CHANNEL_BONE_TARGET)
		end
	else
		for i = 0, skel:CountBones() - 1 do
			local bone = skel:Bone(i)

			if (bone.fSelected) then
				if (not skel:IsBoneChild(i, parentID)) then
					-- new parent chosen
					local v1 = LM.Vector2:new_local()
					local v2 = LM.Vector2:new_local()
					v1:Set(0, 0)
					if (bone:IsZeroLength()) then
						v2:Set(0.1, 0)
					else
						v2:Set(bone.fLength, 0)
					end
					if (moho.frame > 0) then
						bone.fMovedMatrix:Transform(v1)
						bone.fMovedMatrix:Transform(v2)
					else
						bone.fRestMatrix:Transform(v1)
						bone.fRestMatrix:Transform(v2)
					end

					if (parentID >= 0) then
						local invMatrix = LM.Matrix:new_local()
						local parent = skel:Bone(parentID)
						if (moho.frame > 0) then
							invMatrix:Set(parent.fMovedMatrix)
						else
							invMatrix:Set(parent.fRestMatrix)
						end
						invMatrix:Invert()
						invMatrix:Transform(v1)
						invMatrix:Transform(v2)
					end

					if (parentFrame ~= 0) then
						bone.fAnimPos:AddKey(parentFrame - 1)
						if (bone:ParentalFlipFactor() < 0.0) then
							bone.fFlipV:SetValue(parentFrame, not bone.fFlipV:GetValue(parentFrame))
						end
						bone.fAnimPos:SetValue(parentFrame, v1 - bone.fOffset)
					else
						bone.fAnimPos:SetValue(parentFrame, v1)
					end
					v2 = v2 - v1
					local angle = math.atan(v2.y, v2.x)

					while angle > 2 * math.pi do
						angle = angle - 2 * math.pi
					end
					while angle < 0 do
						angle = angle + 2 * math.pi
					end

					if (bone.fFixedAngle) then
						if (parentFrame == 0) then
							bone.fAnimAngle:SetValue(parentFrame, angle)
						end
					else
						local angleDiff = angle - bone.fAnimAngle:GetValue(parentFrame)
						if (parentFrame ~= 0) then
							bone.fAnimAngle:AddKey(parentFrame - 1)
						end
						bone.fAnimAngle:SetValue(parentFrame, angle)
						-- update future angle keyframes for relative offsets just like this frame
						for keyID = 0, bone.fAnimAngle:CountKeys() - 1 do
							local angleFrame = bone.fAnimAngle:GetKeyWhen(keyID)
							if (angleFrame > parentFrame) then
								local newAngle = bone.fAnimAngle:GetValue(angleFrame) + angleDiff
								bone.fAnimAngle:SetValue(angleFrame, newAngle)
							end
						end
						if (parentFrame == 0) then -- update action keyframes for relative offsets just like this frame
							for actionID = 0, bone.fAnimAngle:CountActions() - 1 do
								local action = moho:ChannelAsAnimVal(bone.fAnimAngle:Action(actionID))
								for keyID = 0, action:CountKeys() - 1 do
									local angleFrame = action:GetKeyWhen(keyID)
									if (angleFrame > parentFrame) then
										local newAngle = action:GetValue(angleFrame) + angleDiff
										action:SetValue(angleFrame, newAngle)
									end
								end
							end
						end
					end

					if (bone.fAnimParent:CountKeys() < 2) then
						bone.fAnimParent:SetValue(0, bone.fParent)
					end
					bone.fParent = parentID
					bone.fAnimParent:SetValue(parentFrame, parentID)
					if (parentFrame ~= 0) then
						if (bone:ParentalFlipFactor() < 0.0) then
							bone.fFlipV:SetValue(parentFrame, not bone.fFlipV:GetValue(parentFrame))
						end
					end
				end
			end
		end

		moho:NewKeyframe(CHANNEL_BONE)
		moho:NewKeyframe(CHANNEL_BONE_T)
		moho:NewKeyframe(CHANNEL_BONE_PARENT)
	end

	moho.layer:UpdateCurFrame()
	mouseEvent.view:DrawMe()
	moho:UpdateSelectedChannels()
end

-- **************************************************
-- Tool options - create and respond to tool's UI
-- **************************************************

LM_ReparentBone.CHANGE = MOHO.MSG_BASE
LM_ReparentBone.DUMMY = MOHO.MSG_BASE + 1
LM_ReparentBone.SELECTITEM = MOHO.MSG_BASE + 2

function LM_ReparentBone:DoLayout(moho, layout)
	self.menu = LM.GUI.Menu(MOHO.Localize("/Scripts/Tool/ReparentBone/SelectBone=Select Bone"))

	self.popup = LM.GUI.PopupMenu(128, false)
	self.popup:SetMenu(self.menu)
	layout:AddChild(self.popup)
end

function LM_ReparentBone:UpdateWidgets(moho)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	MOHO.BuildBoneMenu(self.menu, skel, self.SELECTITEM, self.DUMMY)
end

function LM_ReparentBone:HandleMessage(moho, view, msg)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	if (msg >= self.SELECTITEM) then
		for i = 0, skel:CountBones() - 1 do
			skel:Bone(i).fSelected = (i == msg - self.SELECTITEM)
		end
		moho:UpdateUI()
	end
end
This will only show the arrow of the selected bone and its parent bone.

Thank you so much for your reply! I’m really excited to try it out right away!

But I’m so sorry—I’m not quite sure where I should paste the code you provided.
Would you mind explaining a little bit more? Sorry for the trouble! 🙏 :oops:
(I know how to install scripts, but I’m not sure how to install or run this kind of code ><)
Post Reply