Xonotic Forums

Full Version: Balance teams by skill?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi,

I'm planning on running a server for a small (~dozen people) LAN party. The skill levels are all over the place, and I want it to be fun for everyone, so my question is: is there any way to balance teams by skill, rather than number? "Skill" could be something simple -- K/D, points, ranking, etc. taken from the previous game (or something like that). So, red might have 2 experts and 1 beginner, while blue might have 1 expert and 4 beginners. I wasn't planning on using bots.

I know there are some handicap mutators, but I'd rather balance the teams according to skill. Apologies if this has already been asked/answered, didn't see it.

Thanks!
(03-07-2018, 09:14 PM)bklopfer Wrote: [ -> ]Hi,

I'm planning on running a server for a small (~dozen people) LAN party. The skill levels are all over the place, and I want it to be fun for everyone, so my question is: is there any way to balance teams by skill, rather than number? "Skill" could be something simple -- K/D, points, ranking, etc. taken from the previous game (or something like that). So, red might have 2 experts and 1 beginner, while blue might have 1 expert and 4 beginners. I wasn't planning on using bots.

I know there are some handicap mutators, but I'd rather balance the teams according to skill. Apologies if this has already been asked/answered, didn't see it.

Thanks!

I do this manually as a server admin and host of an event. (After some free-for-alls and other matches, get a general idea of where everyone is at and their strengths and weaknesses).
The pickup IRC channel does a similar team balancing thing by using a pickup bot that designates team members, and XonStats Elo as a metric for skill. That is probably closest to what you're looking for.
Doing this automatically is hard for two reasons:

a) Not everybody has ELO and ELO is not the most reliable judge of skill because it's shared between mods.

b) Even if we had a way to fairly judge skill of players, the algorithm to split them into teams is not trivial and requires arrays. Our language doesn't have real arrays. Best solution would probably be to forgo the optimal solution and just try a couple at random, picking the least bad.

You can show ELO in scoreboard using the cvar scoreboard_columns (see scoreboard_columns_help) and then make teams manually.
Quote:b) Even if we had a way to fairly judge skill of players, the algorithm to split them into teams is not trivial and requires arrays. Our language doesn't have real arrays. Best solution would probably be to forgo the optimal solution and just try a couple at random, picking the least bad.
Gotcha. Would some simple greedy algorithm be doable in the language? (QuakeC? I clearly haven't done any Xonotic hacking at all...) It won't optimally balance the teams, but it might be a decent first step -- so the 1st player joins random team, 2nd player joins other team, 3rd player joins (newly calculated) weakest team, 4th player joins (newly calculated) weakest team, etc.

I was imagining something much simpler than ELO scores anyway, as computers may be used by multiple people -- I was thinking something like ranking people as sqrt(1/[rank from previous game]). Just anything really to make the teams slightly more balanced than random team assignment =)
It's always great if you can solve problems with code, but if you are around 12 people that gather together on a LAN, would it not be much easier to just talk to each other and sort out balanced teams by your own wits after a couple of testing matches? Or is that some sort of crazy idea that I have there?
(03-08-2018, 06:03 PM)Halogene Wrote: [ -> ]It's always great if you can solve problems with code, but if you are around 12 people that gather together on a LAN, would it not be much easier to just talk to each other and sort out balanced teams by your own wits after a couple of testing matches? Or is that some sort of crazy idea that I have there?

Yeah you're certainly right. I was mostly just curious if this was doable, and if so, where to look. I might poke around server/teamplay.qc, or...you know...just tell people to join the appropriate team Wink