Skip to main content
06/01, 2010 08:25PM jossssKuratko 7 posts
Hi, i know about another topic about point system, but i designed this one for openttd HARDgoal:

uses: GoalValue, GoalTime(expected 5years), CompanyTimeExists, CompanyValueAtEndOfGame, playersCount
+ idealDivider, K (default points for a "participate" :D)


See attachments pls (problem with submit)
graphical theorem
score examples + generic

06/02, 2010 04:44AM JStaxton 162 posts
Hello jossssKuratko,

[b]Edit:[/b] It was late last night... I had a second thought on your formula, so what I said was not completely justified. Therefore Im going to reformulate my thoughts on your proposal.
I looked at your formula and noted that it could be simplified, while not beeing altered. look at this:

CompanyTimeExist/GoalTime is what we already call Duration or Dur. Its a number between 0 and 1.
CompanyValueAtEndOfGame/GoalValue is what we already call Accomplishment or Acc. Its also a number between 0 and 1.
so your formula would be:
Score = Goal/Dur * Acc²/Div * PlayerCount + K (This can be rearranged)

Score = Goal/Div * Acc²/Dur * PlayerCount + K (And reformulated)
[b]Score = ScoreFactor * Acc²/Dur * PlayerCount + K[/b]
So this is what you were thinking about: To use a ScoreFactor times the square Acc divided by the Dur, Multiply it with the PlayerCount and add another constant K.

[b]Here is what I think:[/b]
First things first. Our current [b]ScoreFactor[/b]=100. We multiply the game Performance with a ScoreFactor to get a nice number, you did the same, good.

What I dont understand is, why you use the [b]square [/b][b]Acc[/b], that just dont makes sense to me... In fact the other way around is the right one, where you use Acc/Dur^2 to reflect the "normal" growth of a company. But the square growth is not exactly what we are experienceing on our server so the current forumla (see skill thread) for that is Acc/Dur^1.75.

Another thing to mention is the use of [b]PlayerCount[/b]: You are proposing to multiply the Performance with all players... And again that confuses me: If you beat X other players then you are a better player than the others. Therefor its a skill thing to me. But the trick here is to determine you was really better than the other. Because a player could start later. And again, this is why I added the Perf=Acc/Dur^1.75 formula instead of just Perf=Acc/Dur to reflect the exponential growth of a company. So every player gets his own score, almost regardless of other players. If he is better than the rest, he will rise in skill.

The last thing is the [b]K-Factor[/b]: I really think we shouldn't do this. I mean what you are doing with that is to just give more Score to the players that are playing a lot, that makes no sense to me, in fact it discourages new players!

And very last, but not the least is: I want that every game counts the same! its not fair that winning a highspeed map with 5M goal gives you more Score than a 3M map. Because the game takes about the same game time to be completed. Its easier to start on HighSpeed.

To make clear what formula I propose look at this (current) formula for Score:
[b]Score = ScoreFactor * Acc/Dur^GrowthFactor[/b]
where ScoreFactor = 100
and GrowthFactor = 1.75

So enough said, what do you think?

[i]This is what I thought first: I think what is happening here is that you are mixing up score with skill... I also had some experiences on other servers like "kurt's", but I really think its best to divide these two points. Your complex function depends on how quick a player reaches his accomplishment and against how many players: both are factors in skill calculation.[/i]

So ultimately to sum up (leaderboard purpose)
score - tells how much a player did for goal accomplishments
skill - tells how good a player is against others

I like your participation! Did you have a look at the current skill calculation algorithm in the OO spreadsheet?

And I want to know what others think about you're proposal...
06/04, 2010 09:40AM jossssKuratko 7 posts
i'm working on new one, i need to know:

var Name for How long the game was. - not relative 0....1
(i need to know for formula, if the players do goal in 4,5years or 40years:D )

if i understend... example:
goalValue = 3000000;
goalTime = 7years;

DUR = start to end of game (for example: 12years .... dur = 1)

so player starts with start of game will have at and 1. every one else start later will have less then 1. (4 years == dur = 0.25 )
if the winner will have at and CompanyValue = 3500000; will Acc = 1 or 1.166?? (Acc = 1 and score = 1,166)??

can you describe the "skill", is it tells something about growth up?

Thank you... let me some time to rework and make some doc.

06/04, 2010 04:05PM JStaxton 162 posts
Hi jossssKuratko,

ok, here is a bit of explanation:

In the current formula for [b]Score [/b]that is: [b]Score = ScoreFactor * Acc/Dur^GrowthFactor[/b]
where ScoreFactor is 100
Acc is the Goal% (e.g. 1.5M/3M ==> 50% ==> 0.5)
Dur is the Duration of the player relative to the winner (e.g. winner took 5 years, the current player played 3years of that ==> 3/5 ==>60% ==> 0.6)
Its also possible to play longer than the winner! (e.g. winner took 5years, current player played 6years ==>6/5 ==> 120% ==> 1.2)
GrowthFactor is 1.75 (due to a considered company growth of nearly quadratic every year)

Thats clear?

The skill is a number that represents the players ability to play better than the others. It is used for ranking playing according to their efficiency or strength if you will.
It is a bit more complicated than the score:
After a player wins game results are calculated: Acc and Dur (as you know). With that you got the Performance=Acc/Dur^GrowthFactor. This Performance is very important to the following steps:
Now every player is compared all other players (2 nested for loops)
For every player
...against every player
......SkillDelta = SkillDelta + CalculateSkillWon
...NewSkill = OldSkill + SkillDelta

Now how does the CalculateSkillWon work?
Its the calculation of the skill that goes from the worse player to the better one.
1. determine who of both compared players is better (Skill that both players brought into the game)
2. calculate the expected future Performance Difference between the players
3. calculate the difference between the expected and the actual performance difference for that player (did he perform better than expected against this opponent? ==> he will get skill from the other player for that)

Pls have a look at the new OO Spreadsheet Calc Macro from Jun4th! (I found a small bug in previous version)

I hope this helps!