Skill tree problems

This is my first post, so first of all, thanks for creating a great game, and thanks for adding mod support, it’s something I’ve been hoping for for a while.

I’ve been messing around with the Ranger skills, and I’ve been having problems with abilities not appearing on the in-game tree. At first I thought this was due to having too many abilities - it first happened when I added another trait onto the end of the ranger tree, which is already the most complex. But I’m still getting the problem with only 3 abilities in the tree - they should link up 1-2-3, but 1 is being linked directly to 3, although hovering over 3 still shows that it requires 2. I may just be setting it up wrong, of course - I’d post my data_defender_skills.xml, but looking at the new forum rules, I don’t think I’d be able to yet, so I’ll paste the ranger class stuff in here - most of the abilities are commented out, as you’ll see if you paste it into an XML editor.

<defender name="ranger">
		<skill name="basic shot" type="attack" posture="offense">
			<reqs level="1" skill="none" skill_lvl="0" boost="1"/>
			<graphic id="arrow" rotations="36" width="24" height="24" off_x="0" off_y="0" frames="1" framerate="0"/>
			<graphic_pos>
				<left x="-15" y="-10"/>
				<right x="15" y="-10"/>
				<up x="0" y="-5"/>
				<down x="-2" y="2"/>
			</graphic_pos>
			
			<flavor type="physical" amount="1.0" time="0.0" rate="1.0" />			
			<flavor type="ranged" amount="1.0" time="0.0" rate="1.0" />					
			<flavor type="physical-ranged" amount="1.0" time="0.0" rate="1.0" />					
						
			<info type="guided_projectile" sfx_each="arrow" sfx_end="arrow" speed="14" anim="shoot" shape="n/a" priority="1" single_target="true" random_targets="false" strike_through="false" />
			<stats level="1" attack_mult="0.50" cooldown="0.8" num_attacks="1" />
			<stats level="2" attack_mult="0.55" cooldown="0.8" num_attacks="1" />
			<stats level="3" attack_mult="0.60" cooldown="0.8" num_attacks="1" />
			<stats level="4" attack_mult="0.65" cooldown="0.8" num_attacks="1" />
			<stats level="5" attack_mult="0.70" cooldown="0.8" num_attacks="1" />
			<stats level="6" attack_mult="0.75" cooldown="0.8" num_attacks="1" />
			<stats level="7" attack_mult="0.80" cooldown="0.8" num_attacks="1" />
			<stats level="8" attack_mult="0.85" cooldown="0.8" num_attacks="1" />
			<stats level="9" attack_mult="0.90" cooldown="0.8" num_attacks="1" />
		</skill>
		<!--skill name="sharp shooter" type="passive" posture="offense">
			<reqs level="2" skill="basic shot" skill_lvl="1" />
			<info type="flavor" flav="critical" attack="all" /> 
			<stats level="1" amount="2.00" time="-1" rate="0.10" />
			<stats level="2" amount="2.13" time="-1" rate="0.12" />
			<stats level="3" amount="2.25" time="-1" rate="0.14" />
			<stats level="4" amount="2.38" time="-1" rate="0.16" />
			<stats level="5" amount="2.50" time="-1" rate="0.18" />
			<stats level="6" amount="2.63" time="-1" rate="0.20" />
			<stats level="7" amount="2.75" time="-1" rate="0.22" />
			<stats level="8" amount="2.88" time="-1" rate="0.24" />
			<stats level="9" amount="3.00" time="-1"  rate="0.26" />			
		</skill-->
		<skill name="spray" type="attack" posture="offense"> <!-- Fires several arrows, number increases with level. -->
			<reqs level="2" skill="basic shot" skill_lvl="1" boost="2" />
			<graphic id="arrow" rotations="36" width="24" height="24" off_x="0" off_y="0" frames="1" framerate="0"/>
			<graphic_pos>
				<left x="-15" y="-15"/>
				<right x="15" y="-15"/>
				<up x="0" y="-5"/>
				<down x="-2" y="2"/>
			</graphic_pos>
						
			<flavor type="physical" amount="1.0" time="0.0" rate="1.0" />			
			<flavor type="ranged" amount="1.0" time="0.0" rate="1.0" />					
			<flavor type="physical-ranged" amount="1.0" time="0.0" rate="1.0" />					
						
			<info type="spread_projectile" sfx_each="arrow" sfx_end="arrow_triple" anim="triple_shoot" speed="14" shape="90arc" priority="2" single_target="false" random_targets="false" strike_through="false" />
			<stats level="1" attack_mult="0.80" cooldown="3.00" num_attacks="2" />
			<stats level="2" attack_mult="0.85" cooldown="3.00" num_attacks="3" />
			<stats level="3" attack_mult="0.90" cooldown="3.00" num_attacks="4" />
			<stats level="4" attack_mult="0.95" cooldown="3.00" num_attacks="5" />
			<stats level="5" attack_mult="1.00" cooldown="3.00" num_attacks="6" />
			<stats level="6" attack_mult="1.05" cooldown="3.00" num_attacks="7" />
			<stats level="7" attack_mult="1.10" cooldown="3.00" num_attacks="8" />
			<stats level="8" attack_mult="1.15" cooldown="3.00" num_attacks="9" />
			<stats level="9" attack_mult="1.20" cooldown="3.00" num_attacks="10" />
		</skill>
		<!--skill name="deep shot" type="passive" posture="offense"> 
			<reqs level="5" skill="sharp shooter" skill_lvl="1" />
			<info type="flavor" flav="bleed" attack="all" /> 
			<stats level="1" amount="0.05" time="1.50" rate="0.03" />
			<stats level="2" amount="0.08" time="1.60" rate="0.035" />
			<stats level="3" amount="0.11" time="1.70" rate="0.04" />
			<stats level="4" amount="0.14" time="1.80" rate="0.045" />
			<stats level="5" amount="0.17" time="1.90" rate="0.05" />
			<stats level="6" amount="0.20" time="2.00" rate="0.055" />
			<stats level="7" amount="0.23" time="2.10" rate="0.06" />
			<stats level="8" amount="0.26" time="2.20" rate="0.065" />
			<stats level="9" amount="0.30" time="2.30" rate="0.07" />			
		</skill-->
		<skill name="burst shot" type="attack" posture="offense">
			<reqs level="3" skill="spray" skill_lvl="1" boost="3" />
			<graphic id="arrow" anim="rapid_shoot" speed="20" rotations="36" width="24" height="24" off_x="0" off_y="0" frames="1" framerate="0"/>
			<graphic_pos>
				<left x="-25" y="-10"/>
				<right x="25" y="-10"/>
				<up x="0" y="-5"/>
				<down x="-2" y="-10"/>
			</graphic_pos>
						
			
			<flavor type="physical" amount="1.0" time="0.0" rate="1.0" />			
			<flavor type="ranged" amount="1.0" time="0.0" rate="1.0" />					
			<flavor type="physical-ranged" amount="1.0" time="0.0" rate="1.0" />					
				
			<info type="guided_projectile" sfx_each="arrow" sfx="arrow_rapid" anim="rapid_shoot:repeat" shape="n/a" speed="20" priority="3" single_target="true" random_targets="true" strike_through="false" />
			<stats level="1" attack_mult="1.00" cooldown="8.0" num_attacks="3" />
			<stats level="2" attack_mult="1.10" cooldown="8.0" num_attacks="3" />
			<stats level="3" attack_mult="1.20" cooldown="8.0" num_attacks="4" />
			<stats level="4" attack_mult="1.30" cooldown="8.0" num_attacks="4" />
			<stats level="5" attack_mult="1.40" cooldown="8.0" num_attacks="5" />
			<stats level="6" attack_mult="1.50" cooldown="8.0" num_attacks="5" />
			<stats level="7" attack_mult="1.60" cooldown="8.0" num_attacks="6" />
			<stats level="8" attack_mult="1.70" cooldown="8.0" num_attacks="6" />
			<stats level="9" attack_mult="1.80" cooldown="8.0" num_attacks="7" />
		</skill>

Thanks for any help!

I’ll look into it and let you know what I find!

— Begin quote from "larsiusprime"

I’ll look into it and let you know what I find!

— End quote

Thanks! I appreciate the fact that the tree does arrange itself automatically, by the way. It would be a pain to have to type in x,y coordinates for all of the icons.

Alright, I took a look at it and you ran into an undocumented requirement :slight_smile:

Basically, the game as we designed it has some hard-coded requirements for the skill trees - namely the horizontal position in the skill tree is strictly dependent on the level requirement, which MUST be one of the following:

1, 2, 5, 10, 15, 20

Overlay restrictive, I know. You had “Burst Shot” require level 3, and to make the skill tree work it needs to be level 5.
I can fix this in a future build so that the horizontal position of the skill orb is determined by a range of levels, something like this:

1, 2-4, 5-9, 10-14, 15-19, 20+

Basically, we made the skill tree dynamic, but only dynamic enough to handle the specific things we wound up doing with it. For now this is your best solution, I’ll let you know if I add more flexibility.

Update - nevermind, it’s slightly more subtle:

The range thing is apparently already in there, so the problem is you’ve got two orbs being drawn in the same “level 2-4” slot. So you could get away with having the requirement being level 3 if you didn’t also have something in that dependency line requiring level 2.

The game tries to draw them both on top of eachother, and that causes a glitch. Setting the req to level 5 fixes it.

Thanks for the quick response :slight_smile: . I only set the lower level requirements to speed up testing, so it shouldn’t be a problem.