I'm starting to get the feeling that pULSE doesn't understand that Elo rankings use a points system.
Also, you can use a points system to limit people reaching number 1 battling noobs by limiting the number of points someone receives beating someone to a scale based on the battling users levels. It's really simple actually.
EDIT- Pseudocode again but modified.
Code:
var maxEstimatedSkill = 10;
var ELOPoints = NumberOfRegisteredUsers;
var MaxEloChange = 32;
//W-L expressed as decimal
var winLoss = 0;
//I'm not sure how exactly to express a mathematical formula
//for determining exactly how to remove the number of points taken
var pointSubtraction;
var User1 = {
//All numbers in here are random. I didn't feel like writing some actual code in
//a spreadsheet to distribute the ELO points amongst the current user count
//(139,421) randomly and then sorting it. This should do well enough to express what
//I'm getting at.
currentRank: 35,
EstimatedSkill: 7,
CurrentEloPoints: 15000,
winLoss = 75.3
}
var User2 = {
currentRank: 1000,
EstimatedSkill: 7,
CurrentEloPoints: 1200,
winLoss = 25.2
}
function Battle() {
Predict = {
User1PredictionScore = user1.CurrentEloPoints + (user1.currentRank + user1.EstimatedSkill + user1.winLoss);
User2PredictionScore = user2.CurrentEloPoints + (user2.currentRank + user2.EstimatedSkill + user2.winLoss);
if (User1PredictionScore > User2PredictionScore) prediction = User1 wins;
if (User2PredictionScore > User1PredictionScore) prediction = User2 wins;
if (User1PredictionScore == User2PredictionScore) prediction = CoinFlip; //do nothing
}
DetermineWinner = {
if (user1VoteTally > greater than user2VoteTally) {
user1 wins} else {
user2 wins
}
}
Winner = Result
DetermineRankChange = {
if Winner was predicted {
pointModifier = WinnerPredictionScore - LoserPredictionScore;
pointSubtraction = map(pointModifier, 0, 139421, 0, 32)
ELOAdded = MaxEloChange - (pointSubtraction)
}
if Winner was not predicted {
ELOAdded = UnderDogWin
UnderDogWin() {
pointModifier = WinnerPredictionScore - LoserPredictionScore;
pointSubtraction = map(pointModifier, 0, 139421, 0, 32)
ELOAdded = MaxEloChange - (pointSubtraction)
}
}
}
}