Vitality: EQ2’s iceberg

After release, one of the common gripes people raised when comparing EQ2 and WoW was the slow level grind of EQ2 and the difficulty in playing “catch up” to buddies who’d gotten ahead. If you played with a group and took a few nights off, it was very difficult to catch the group by soloing or other measures.

Eventually, Sony added “Vitality”, which is like a trust fund for experience. Once an hour, the game adds a little vitality to everyone’s balance (online or not). While you have vitality, every NPC kill draws bonus experience from your vitality pool – in short, as long as you have vitality, you get double experience.

There’s an upper limit on vitality, but if you don’t play a character for a while you can build up a couple of levels worth of vitality, allowing you to play catchup really quickly. And you’ll have a few hours of vitality after logging for the night and playing your next day’s session.

EverQuest2 is a complex system of time and resource sinks: experience, achievements, status points, tradeskills, housing, decorating your housing. Many of these loops are well designed to be self-perpetuating – your decorations will lead you to buy a bigger house which will lead you to want more decoration to reduce the cost of the housing.

This gave it a vigorous and healthy economy in the early days, the economy was a truly vital part of the game’s immersiveness.

Admittedly, some of that has been ruined by farmers and by SoEs attempts to hurt the farmers (c’mon guys, just bite the bullet and sell the gold yourself; don’t go all Brad on us, telling us how rich or poor our character should be).

But Vitality changed gameplay rather drastically. One of our first time players is nearing level 50 after just slightly less than 4 weeks. I wouldn’t exactly call the way he plays “power-levelling” either.

So these days levels fly by. And that reshapes the economy. A year ago people might have spent gold on making a +1 stat change at level 35 – but not today. It’s hard to sell “adept 1” spells and even harder to sell masters, because until people break 60, they’re just not worth the investment.

I suspect Sony are currently working on a Planar expansion (I hope they are working on some world events to open up more druid rings) and introducing more varietous content is good, the game drinks up content. But I hope it will be accompanied by an, and I hate to say it, “audit” of the existing pre-existing pricings and money sinks.

For instance: the cost of changing house decor – especially since you can’t see it in advance; the layouts and prices of the accomodations in the cities, perhaps adding brokers to each Qeynos/Freeport zone and making it cheaper to buy from a broker in the same zone as the merchant without the hassle of finding the right doorway.

I can’t help but wonder if vitality doesn’t make EQ2 too fast, while its been a blessing trying to get our group co-levelled, its also been a bit of a curse because we just can’t “do” a level bracket before we’ve greyed out all of the quests we’ve picked up.

The factors:

. We’re going too fast to tend to the spectrum of quests neccessary to equip 5 different classes (plate/cloth/armor/chain/leather)
. 80%+ of the loot we receive is irrelevant to us
. Most of that loot is difficult to sell because other players are ‘making do’ as they warp thru too
. The ‘good stuff’ (masters, etc) hasn’t red-shifted yet, there still being enough old-money in the system that they remain largely the domain of twinks.

Tracking the ethereal

Attack Objectives. I’ve had a number of requests to expose which towns are currently under an objective – both from Ramp for CS&R and from people interested in pulling that data from Wiretap.

Unfortunately, this data is not exposed to the database by the server responsible for tracking AO assignments (the strat host).

The only thing keeping me from simply throwing in a column or a table for AOs is closure: ensuring that a server-outage doesn’t leave an open-looking AO entry in a table.

Solutions I have aplenty:

  • Keep the ‘closed’ field on all open AOs set to 150 seconds in the future and update the field every 60s. Con: heavy handed database pounding.
  • Wrap the server process with a script that automatically closes all active AOs in the database. Con: The server may be down due to a database outage.
  • Force the server to close all outstanding AOs on restart. Con: Long periods of incorrect data when the server is down for maintenance/patches.

But I don’t really have time right now to sit down and think through the various use-cases I have and work out the best strategy given our architecture. If we were using Postgres or Oracle at the moment, I know what I’d do.

But we’re using MySQL 4.1 and the technologies like views and PL/SQL aren’t mature enough in any version of MySQL for me to be comfortable about moving to them. We’ve been experimenting with Trac in-house, which uses Postgres. Mmm. Boy did it feel good to be type be in pgsql typing commands. I’ll argue the case for MySQL for WWII Online on technical grounds, but that doesn’t mean I don’t feel unclean for then being a MySQL user :)

SQL Challenge

Given a medium sized table (2-3 million rows), each containing (amongst other things) a grouping relationship (or “membership” relationship, numerous rows will have same membership): extract (efficiently) the 9 most common groupings and “other”

Think pie chart. Feel free to use this to plug your own database, but include samples with timings and explains :)

Edit: This is a coffee-table discussion/challenge – not a task-at-hand, I’m not trying to solve a problem, I’m just interested in seeing some of you discuss how you might solve a problem like this.

Little JSP help…

I was cleaning up the factory output stuff on wiretap, and I wanted to reorganize some of the data; the factories all output at the same time, so what I want to do is take this query

  SELECT  f.facility_oid, f.output_time, f.country, ...
   FROM  strat_factory_outputs f
   WHERE  output_time > ?
   ORDER  BY f.output_time DESC, f.facility_oid ASC

Generating

<factory-log>  <tick fid="4" time="2007-02-22 15:15:15.0" ... /><tick fid="7" time="2007-02-22 15:15:15.0" ... />  <tick fid="9" time="2007-02-22 15:15:15.0" ... />  ...
And split it into groupings by time:
<factory-log>  <tick time="2007-02-22 15:15:15.0">    <factory id="4" .../>    <factory id="7" .../>    <factory id="9" .../>  </tick>  <tick time="2007-02-22 15:00:15.0">    ...

And also (a summary version) which produces
<factory-log>
<tick time="2007-02-22 15:15:15.0" contributed="4,7,9"/>
<tick time="2007-02-22 15:00:15.0" contributed="4,9"/>
...

(without using a second query, I realize I could just use group_concat)

I pull the data with <sql:query var=’rows’> but I’m not especially familiar with array/map handling in jsp yet.

I wish they had …

I acknowledge that I am not working for the company that is making the MMO industry scratch its head and drool at the thought of how much cake that many users might buy. This is me throwing stones at glass houses, glass houses armed with anti-matter cannons. And I have a hunch that my “glass” house is actually balsa wood and Glad Press&Seal. (Read: Any comments refering to WWII will be deleted =P)

I wish <game> had …

SWG:

  • Understood what players mean’t by “more content”… You fired off our imaginations: We came to commune in our Star Wars Galaxy, and promise shewed itself in your art. But persuing that promise turned out to be folly. We could be a smuggler, but we couldn’t smuggle. The profession “lacked content” – i.e depth.
  • Understood what players mean’t by “more content”… Rather than pointing us to the N other class/combinations we could try. The breadth-exploration was a good experiment – for a non-franchised game. Franchise. “Franchise”. People were coming to SWG with the character they’d imagined being since 1979.
  • Let us have more than one character per server. That was a solution for another games’ problem. People who might have explored “alternative content” were disinclined to because it buggered social networks. I can’t play my wookiee banjo player AND play with my group tonight?
  • Not taken away the ATSTs that were the bane and delight of my existence as a Rebel. I wish you’d just made it onefer – think PlanetSide multicrew. If 8 imperial troops group up, the leader can summon up an ATST as long as they are together/in-range.
  • Would go back to the release code branch, add NGE combat and quest depth/lines, and start over from there.

Matrix Online:

  • Timers to show you how long to the next combat turn. Watching your character and the opponent standing there idle animating while you frantically press the special move keys is a bewildering barrier to most MMO players. I have a number of moves my character can never use, because the time between requesting them and the turn coming up is always significantly longer than the window of opportunity.
  • Player housing. I want my own non-social space. If it exists (constructs?) you keep it too secret.
  • A bank?
  • Streets inhabited by mobs that aren’t “out of range”.
  • Not done bad things to combat-enactment in recent months (only seemed to get one tune, combat animations are less in sync than when I last played, you stick around in combat mode for a good 30-90s after the fight is over, transitions between fights are all painfully slow, while NPCs cruise along like agents)

EQ2:

  • Discovered how abjectly frustrating combat is. Oh, the fighting is fine. But I never know when I’m fighting!(*) I understand why it’s like this; but wouldn’t it be better to make auto-attack work right and add a “single target attack” key/tab/command for special case use instead?
  • Used the paper doll for shopping (clothing, furniture etc). You’ll recall (those few of you reading the original blog) I first suggested this long before WoW had it. Blizzard listened! Sony?
  • Let me share a quest with my buddy. He isn’t going to read the dialog after embarrasing himself by making the whole group wait or run across the zone to exchange two lines of dialog with the Angry Augur you’ve hidden in the tent so well that nobody ever notices his/her feather. At least give us some degree of quest sharing ability.
  • Let me attach chat or emote macros to spells/abilities. Aren’t 99% of all EQ2 macros “/g verbING %t ; /useability mesmerize”? In return for which you get some other icon, and no timers.
  • A hotkey for cycling between quests in the current zone.

(*Going into combat automatically makes your character change into the combat animation sequence. There’s a slight red-pulsation around your character name in the top left, but you have to realize you aren’t in combat and think to look to see if you are. There is actually a newbie tooltip that tries to explain how you are in-combat but not fighting.)

Short and Sweet

Got stuff to do.