anchor.diff:  	var/name
   	var/time
   
  +PlayerData
  +	var
  +		fame
  +
  +		name
  +		time
  +
  +
  +
  +	proc
  +		tierToFame(t)
  +			return 100 * t * (t + 1)
  +
  +		fametoTier()
  +			var/r = abs(fame) - 1
  +
  +			if(r >= 7200) return 8
  +
  +			var/tier = (sqrt((REP_FACTOR*REP_FACTOR) + (4*REP_FACTOR*r))-REP_FACTOR)/(REP_FACTOR*2)
  +
  +			return round(tier)
  +
  +		getRep()
  +			var/r = abs(fame)
  +
  +			if(r <= 200) return r
  +
  +			return r - tierToFame(fametoTier())
  +
   proc/initRep(var/ckey)
   
  -	if(!reputations) reputations = list()
  -
  -	var/reputation/r = reputations[ckey]
  -	if(!r)
  -		r = new
  -		reputations[ckey] = r
  -	return r
  +	if(!worldData.playersData) worldData.playersData = list()
  +
  +	var/PlayerData/p = worldData.playersData[ckey]
  +	if(!p)
  +		p = new
  +		worldData.playersData[ckey] = p
  +	return p
   
   mob/Player/proc
   
  -
  -	getRep()
  -		var/reputation/r = initRep(ckey)
  -		return r.rating
  -
  -	addRep(var/p = 0, silent = 0)
  -		var/reputation/r = initRep(ckey)
  -		r.rating += p
  -		r.time = world.realtime
  -
  -		if(pname)
  -			r.name = pname
  -		else if(prevname)
  -			r.name = prevname
  -		else
  -			r.name = name
  -
  -		if(!silent)
  -			src << infomsg("You gained [abs(p)] [p > 0 ? "peace" : "chaos"] reputation.")
  -		return r.rating
  +	getRep(trim = 0)
  +		var/PlayerData/r = initRep(ckey)
  +
  +		return trim ? r.getRep() : r.fame
  +
  +	addRep(var/p = 0, silent = 0, max = 1)
  +		var/PlayerData/r = initRep(ckey)
  +
  +		if(max)
  +
  +			var/tier
  +
  +			if(p < 0 && r.fame > 0)      tier = 1
  +			else if(p > 0 && r.fame < 0) tier = 1
  +			else                         tier = r.fametoTier() + 1
  +
  +			var/max_rep = r.tierToFame(tier) * (p > 0 ? 1 : -1)
  +
  +			if((p > 0 && r.fame + p >= max_rep) || (p < 0 && r.fame + p <= max_rep))
  +				p = max_rep - r.fame
  +
  +		if(p != 0)
  +			r.fame += p
  +			r.time = world.realtime
  +
  +			if(pname)
  +				r.name = pname
  +			else if(prevname)
  +				r.name = prevname
  +			else
  +				r.name = name
  +
  +			if(!silent)
  +				src << infomsg("You gained [abs(p)] [p > 0 ? "peace" : "chaos"] reputation.")
  +
  +		return r.fame
   
   clan
   	var/points = 0
  
positive.code: 
  	rating = abs(rating)
  
  	if(rating > 4000) return "<font color=#9f0419>Legend</font>"
  	if(rating > 3200) return "<font color=#aa2fbd>Grand Master</font>"
  	if(rating > 2500) return "<font color=#01e4ac>Lord</font>"
  	if(rating > 1900) return "<font color=#ff0000>Master</font>"
  	if(rating > 1400) return "<font color=#E5E4E2>Respected Warrior</font>"
  	if(rating > 900)  return "<font color=#FFD700>Warrior</font>"
  	if(rating > 500)  return "<font color=#C0C0C0>Disciple</font>"
  	if(rating > 200)  return "<font color=#CD7F32>Initiate</font>"
  	return "Neutral"
  
  
negative.code: 	var/peace = 1
  	Click()
  		..()
  		if(worldData.playersData)
  
  			var/list/people = list()
  
  			for(var/k in worldData.playersData)
  				var/PlayerData/p = worldData.playersData[k]
  
  				if(world.realtime - p.time > 12096000) continue
  
  				if((peace && p.fame > 100) || (!peace && p.fame < -100))
  					people[p.name] = p
  
  
  			bubblesort_by_value(people, "fame", TRUE)
  			var/const/SCOREBOARD_HEADER = {"<html><head><title>Reputation Leaderboard</title><style>body
  {
  	background-color:#FAFAFA;
  