{"id":1684,"date":"2010-10-26T21:54:24","date_gmt":"2010-10-26T10:54:24","guid":{"rendered":"http:\/\/www.vectorstorm.org\/?p=1684"},"modified":"2010-10-26T23:01:36","modified_gmt":"2010-10-26T12:01:36","slug":"divvying-the-spoils","status":"publish","type":"post","link":"https:\/\/www.vectorstorm.com.au\/2010\/10\/26\/divvying-the-spoils\/","title":{"rendered":"Divvying the spoils"},"content":{"rendered":"

\"\"<\/a>Something I don’t understand:<\/p>\n

I’m no longer driving into work every day. \u00a0This saves me approximately an hour every day. \u00a0I’m doing some work at home, let’s call it eight hours a day (In practice, it’s probably a little bit less than that, but for the sake of argument, let’s call it eight hours per day), whereas I used to pretty regularly do 9-10 hours a day, at my old job.<\/p>\n

So how is it that I have so little time for development? \u00a0I should have more time now than I did two weeks ago, I’d have thought. \u00a0But time seems to be behaving rather oddly; \u00a0I don’t seem to have nearly as much time in the day as the maths suggest that I should.<\/p>\n

Tonight, I got a few little things done in MMORPG Tycoon 2. \u00a0First, I fixed the fill on the new, more sharply stylised mouse cursor. \u00a0The sharper angles on the arrow are a very subtle improvement, but I can’t tell you how thrilled I am to have them; \u00a0the shape of the mouse cursor has been bothering me ever since v1.1.<\/p>\n

I also spent time getting my head back into the new combat system, and discovered that I’ve run into the same issue that heaps of real MMORPGs do; \u00a0how best to award experience points for defeating monsters.<\/p>\n

<\/p>\n

Right now, monster will occasionally check their health values. \u00a0If someone has been attacking them enough to drive their health down to zero, they’ll say “whoops, I seem to be dead”, and despawn. \u00a0The problem is to determine how to award experience at the point when it dies.<\/p>\n

Old-style MMORPGs used to award all of the experience to whoever struck the killing blow. \u00a0These games, unsurprisingly, had real problems with “kill-stealers”; \u00a0people who would wait around until you’d almost killed a tough monster, and then swoop in to deal the final blow and get the rewards for the whole kill. \u00a0This approach is nice from an implementation point of view, because it means that I’d only need to keep track of the most recent character to damage each monster. \u00a0This is great from my point of view, since it limits memory usage and CPU usage. \u00a0The downside, of course, is that the player AI won’t like it any more than a real player would; \u00a0players will often be fighting monsters, and not getting their just rewards as they ought to, when some other player comes in and gets the kill.<\/p>\n

City of Heroes, I believe, was the first to award proportional experience, though it’s a relatively common system these days. \u00a0The idea is that if the monster has 100 health points, and player A did 80 points of damage, player B did 15 points of damage, and player C did 5 points of damage, then player A gets 80% of the experience, player B gets 15% of the experience, and player C gets 5% of the experience. \u00a0This effectively stopped kill-stealing in its tracks, since everyone was rewarded precisely in proportion to how much they helped.<\/p>\n

Well, that is, except for the healers and other non-direct-damage-dealers. \u00a0City of Heroes didn’t actually award experience based upon the damage dealt by individual players, but rather on the damage dealt by whole teams. \u00a0So if team A did 80% of the damage, and team B did 20% of the damage, then 80% of the experience would be divided between all the members of team A, and 20% to team B.<\/p>\n

This approach is obviously superior in many ways. \u00a0But it would require me to keep track of a potentially huge amount of information per monster, about all the players who have wounded it since its last spawn. \u00a0This isn’t a big issue in a real MMORPG where there’s a server farm that’s not doing much else than keeping track of data, but in a simulation of a whole MMO that’s running on a single home machine, that’s going to build up really fast. \u00a0I’d really like to avoid having to do this, if I can. \u00a0Will require more thought, I think.<\/p>\n

I’m kind of tempted to just award all of the XP to the most recent person who hit the monster (or their party), and do something more fancy for boss monsters, who will have better rewards and will take more people to kill. \u00a0 Maybe that’s the way I’ll go with this. \u00a0Will try it out tomorrow, see how it goes.<\/p>\n","protected":false},"excerpt":{"rendered":"

Something I don’t understand: I’m no longer driving into work every day. \u00a0This saves me approximately an hour every day. \u00a0I’m doing some work at home, let’s call it eight hours a day (In practice, it’s probably a little bit less than that, but for the sake of argument, let’s call it eight hours per…<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":""},"categories":[24,20,25],"tags":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/po9WK-ra","_links":{"self":[{"href":"https:\/\/www.vectorstorm.com.au\/wp-json\/wp\/v2\/posts\/1684"}],"collection":[{"href":"https:\/\/www.vectorstorm.com.au\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vectorstorm.com.au\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vectorstorm.com.au\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vectorstorm.com.au\/wp-json\/wp\/v2\/comments?post=1684"}],"version-history":[{"count":0,"href":"https:\/\/www.vectorstorm.com.au\/wp-json\/wp\/v2\/posts\/1684\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.vectorstorm.com.au\/wp-json\/wp\/v2\/media?parent=1684"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vectorstorm.com.au\/wp-json\/wp\/v2\/categories?post=1684"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vectorstorm.com.au\/wp-json\/wp\/v2\/tags?post=1684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}