Draak and Shadowfax have been working for years on the Naginag Combine, and they've just completed another major expansion to it. Here is the official announcement, copied from board 8 in-game, from Shadowfax.
---
I am proud to announce the opening of the city of West Naginag and its sister area, the village of Ooahu. Usually we open areas with little fanfare, but these areas deserve special mention for a number of reasons.
Just the sheer amount of effort and time that has been put into this project is remarkable. Ten years ago, Draak and I came up the concept of the Naginag Combine. The idea was to build a collection of interrelated areas that were all part of the same empire. We showed Dentin our plans and released the first Combine area in 2002, what is now Draj and Zin. In response to the positive feedback about that area, we scheduled more Combine areas to build. I drew a picture of West Naginag during the summer of 2003. Now, after nearly eight years, it's finally finished.
West Naginag and Ooahu are a lynchpin that tie all of the mainland Combine areas together. We left it for last, but it also took so long to make because I wanted it to be perfect. Whether you want to immerse yourself in the lore, play through engaging quests, or just get some fame, eq or good xp, these areas should have something for everyone.
Once again we push the code to the limit, introducing consumables with custom spells, rechargable wands, mobs that make full use of necromancer abilities, "wearable" objects for your inventory, epic quests that unlock the secrets of the region, and a host of other fun little goodies for your enjoyment.
Saturday, April 9, 2011
Friday, February 25, 2011
If you do it more than once, write a script...
There's a saying often used by Unix System Administrators: if you're going to do it more than once, write code to do it for you. For the last few days, I've been writing code to handle clan equipment automatically, so I don't have to be involved.
This has been a very time-consuming process, so much so that you might be tempted to ask, "if it's going to take so long, why not just do it by hand?" And indeed, that's tempting.
But one of the things that has occurred to me writing this code is that clan equipment is simply a complex process. Every single line of code I've written reflects some check, some detail that I would have had to remember and check manually. Each of these details is important. And the odds of me remembering them all when I do it by hand are near zero.
In short, while doing it by hand would definitely be faster in the short term, it's basically guaranteed to be wrong. And I've got direct proof of this while I'm looking at the existing clan items - they're spread out across the vnum ranges completely at random, built and set up in different ways by different builders, with some of them violating various constraints and some not. It's a complete mess.
That is what 15 years of doing it manually looks like, and that's why I'm not going to allow it to be done manually anymore. I am replacing myself with a (not so short) set of scripts. I'm ok with that, because those scripts will do a better job than I would have.
This has been a very time-consuming process, so much so that you might be tempted to ask, "if it's going to take so long, why not just do it by hand?" And indeed, that's tempting.
But one of the things that has occurred to me writing this code is that clan equipment is simply a complex process. Every single line of code I've written reflects some check, some detail that I would have had to remember and check manually. Each of these details is important. And the odds of me remembering them all when I do it by hand are near zero.
In short, while doing it by hand would definitely be faster in the short term, it's basically guaranteed to be wrong. And I've got direct proof of this while I'm looking at the existing clan items - they're spread out across the vnum ranges completely at random, built and set up in different ways by different builders, with some of them violating various constraints and some not. It's a complete mess.
That is what 15 years of doing it manually looks like, and that's why I'm not going to allow it to be done manually anymore. I am replacing myself with a (not so short) set of scripts. I'm ok with that, because those scripts will do a better job than I would have.
Labels:
bugs,
software engineering
Sunday, January 9, 2011
Scaling
When we released the necromancer expansion back in November, I expected a pretty large spike of new players. I figured we'd get a bunch of new people from the announcement, but also a lot of high levels would want to try out the new class from scratch to see how it worked.
And new players we got; perhaps four times as many as usual, which again was about what I expected. What I didn't expect was that we would be nearly incapable of handling them in terms of areas and content. There wasn't really any fighting over equipment and quests, but from time to time it seemed newbies literally had to queue up to get their turn at a particular quest item.
This got me thinking about scaling. If we can't effectively handle four times the standard newbie load, we'll be limited to a player base less than four times the size of our current one. And it's not just newbie areas; we have to think about it everywhere, from areas to exp thwacking to the who list to the the size of Ralnoth. We might not have five hundred people logged in right now, but even if we did the game probably couldn't handle them all.
Here are some things I think could help with that:
- Instancing. Instancing allows you to create private copies of areas for players, so that they don't interfere with each other. This is great for quests, in that each player or group can be on their own private copy of the quest, and don't need to worry about someone else getting through it first and taking the quest item. Judicious use of instancing can help eliminate quest bottlenecks, and it makes the world seem a lot bigger than it really is.
- Gold and experience thwacking. Right now, gold and experience are thwacked globally, so that if a mob is run too much the returns on it drop for everyone. This is fundamentally dependent on the number of players; a better way would be to put thwacking on individual players, so that the actions of one player don't break the game for someone else.
- Item maxload. Having limited load on items is another thing that's fundamentally dependent on the number of players. Once the player load rises to a certain level, a maxloaded or rarity-based item will simply never load again. Maxload and rarity effectively need to be removed to fix this.
- The who listings, and other display systems. Having a five hundred person who list would be ridiculous. Beyond a certain point, you pretty much have to switch to a query system instead of a global listing system.
Some of this stuff is already in transit or is being worked on; in particular, instancing was booted in earlier this evening and is being tested as we speak. Maxload for the most part was phased out last week.
It's a decent start. One bottleneck at a time...
And new players we got; perhaps four times as many as usual, which again was about what I expected. What I didn't expect was that we would be nearly incapable of handling them in terms of areas and content. There wasn't really any fighting over equipment and quests, but from time to time it seemed newbies literally had to queue up to get their turn at a particular quest item.
This got me thinking about scaling. If we can't effectively handle four times the standard newbie load, we'll be limited to a player base less than four times the size of our current one. And it's not just newbie areas; we have to think about it everywhere, from areas to exp thwacking to the who list to the the size of Ralnoth. We might not have five hundred people logged in right now, but even if we did the game probably couldn't handle them all.
Here are some things I think could help with that:
- Instancing. Instancing allows you to create private copies of areas for players, so that they don't interfere with each other. This is great for quests, in that each player or group can be on their own private copy of the quest, and don't need to worry about someone else getting through it first and taking the quest item. Judicious use of instancing can help eliminate quest bottlenecks, and it makes the world seem a lot bigger than it really is.
- Gold and experience thwacking. Right now, gold and experience are thwacked globally, so that if a mob is run too much the returns on it drop for everyone. This is fundamentally dependent on the number of players; a better way would be to put thwacking on individual players, so that the actions of one player don't break the game for someone else.
- Item maxload. Having limited load on items is another thing that's fundamentally dependent on the number of players. Once the player load rises to a certain level, a maxloaded or rarity-based item will simply never load again. Maxload and rarity effectively need to be removed to fix this.
- The who listings, and other display systems. Having a five hundred person who list would be ridiculous. Beyond a certain point, you pretty much have to switch to a query system instead of a global listing system.
Some of this stuff is already in transit or is being worked on; in particular, instancing was booted in earlier this evening and is being tested as we speak. Maxload for the most part was phased out last week.
It's a decent start. One bottleneck at a time...
Labels:
design,
future directions,
game balance,
new features
Thursday, December 30, 2010
Spells, skills, and class design
One of the things that takes a lot of time is tweaking the spell and skill trees to make the classes more fun to play. The various factors I have to balance are a lot more restrictive than you might expect:
1) The spells and skills within each group, for example "mage fire spells", should have proper dependencies. Greater Fireball should probably be dependent at some level on 'basic fire magics'.
2) The spells and skills within each group, for example "mage fire spells", should be separated by similar level differences, to spread the group out across a level range. If there's too much clumping, there's dead zones where you don't get a new spell for a long time, then suddenly get a bunch followed by another dead zone.
3) Spells and skills for the entire class should be evenly distributed across the entire level range, again to limit dead zones and make sure players have something to learn at every level. Necromancer is a good example of how to do this; every three levels, you get 5-6 spells and skills, from level 1 up to about level 28. Mage is a good example of how not to do this; there's 6 spells between levels 2-4, 12 spells between levels 12-14, and 4 spells between level 26-28. Mage is currently very clumpy and needs more work.
4) Low level spells and skills should be useful and interesting. Having a spell like 'ventriloquate' below level 10 makes no sense at all; newbies will think it's actually useful (it's not) and waste practices on it. It's ok to put useless stuff at higher levels, because high level players are more likely to do research before wasting scarce practices on something.
5) Really high level spells have to actually be useful, even if it's a specialized use.
The above generally result in me spending a lot of time staring at various views of the spell lists for each class. You have to keep an eye on groupings across level ranges, while making sure you haven't done anything dumb to the dependency trees for each group, and making sure you don't move useless things into the low level ranges.
And even though it may not seem that way, the above are actually really important. It seems to give you more to do, and you know that you get important, useful stuff even at low levels. I've certainly noticed a difference with my characters.
1) The spells and skills within each group, for example "mage fire spells", should have proper dependencies. Greater Fireball should probably be dependent at some level on 'basic fire magics'.
2) The spells and skills within each group, for example "mage fire spells", should be separated by similar level differences, to spread the group out across a level range. If there's too much clumping, there's dead zones where you don't get a new spell for a long time, then suddenly get a bunch followed by another dead zone.
3) Spells and skills for the entire class should be evenly distributed across the entire level range, again to limit dead zones and make sure players have something to learn at every level. Necromancer is a good example of how to do this; every three levels, you get 5-6 spells and skills, from level 1 up to about level 28. Mage is a good example of how not to do this; there's 6 spells between levels 2-4, 12 spells between levels 12-14, and 4 spells between level 26-28. Mage is currently very clumpy and needs more work.
4) Low level spells and skills should be useful and interesting. Having a spell like 'ventriloquate' below level 10 makes no sense at all; newbies will think it's actually useful (it's not) and waste practices on it. It's ok to put useless stuff at higher levels, because high level players are more likely to do research before wasting scarce practices on something.
5) Really high level spells have to actually be useful, even if it's a specialized use.
The above generally result in me spending a lot of time staring at various views of the spell lists for each class. You have to keep an eye on groupings across level ranges, while making sure you haven't done anything dumb to the dependency trees for each group, and making sure you don't move useless things into the low level ranges.
And even though it may not seem that way, the above are actually really important. It seems to give you more to do, and you know that you get important, useful stuff even at low levels. I've certainly noticed a difference with my characters.
Labels:
classes,
design,
game balance
Saturday, December 25, 2010
Christmas Expansion - Update
We finally got everything done and installed, and it went off pretty easy. The biggest hitches were minor display bugs in explorer points, with a few minor typos and what not elsewhere.
One of the things that surprised me was the time breakdown for the various spells and skills. We only added 12 of them this time; here's a rough time estimate for each.
Level 25 mage skill 'melt' - approximately 6 hours. This skill was in multiple pieces, as it can operate on multiple targets. Not much debugging time required.
Level 27 mage skill 'spell lore' - approximately 1 hour. This was a very easy hook into the spellcasting code.
Level 6 cleric spell 'faith shield' - approximately 4 hours, most of it testing and design, trying to figure out how to not break anything.
Level 31 cleric spell 'breath of life' - approximately 5 hours. Required several debug passes to get the math right, largely because I wrote the core of it while I was very tired.
Level 33 cleric spell 'area heal' - approximately 2 hours, because this reused a lot of well-done code from 'area refresh'.
Level 34 cleric spell 'astral bridge' - approximately 16 hours. The spell itself only took about two hours, but before I could implement it I had to completely rework the waypoint code. Refactoring and updating the old code took the bulk of the time, and it broke waypoints for a lot of players.
Level 32 cleric spell 'group waypoint' - approximately 2 hours, because the astral bridge and other waypoint code was already in place.
Level 8 thief skill 'listen' - approximately 4 hours.
Level 29 thief skill 'fast talking' - approximately 3 hours, had to come back and extend its use into other thief skills that didn't have the facility before.
Level 26 warrior skill 'cleave' - approximately 5 hours. Ran into an irritating bug where cleave would cause a death which would cause an autocleave which could cause a death which could cause an autocleave...
Level 32 warrior skill 'whirlwind' - approximately 3 hours. The event handler for this was very straightforward.
Level 8 necromancer spell 'bone blade' - approximately 2 hours.
Explorer points - about 10 hours. This had a lot of hooks for display and interfacing, which usually takes a lot of time. Multiple debug passes.
Various achievements - about ten minutes each when done in groups.
There was also a lot of infrastructure and other work that went on to enable all this; between bug fixes, infrastructure, and design, the times above are perhaps a third of the total.
One of the things that surprised me was the time breakdown for the various spells and skills. We only added 12 of them this time; here's a rough time estimate for each.
Level 25 mage skill 'melt' - approximately 6 hours. This skill was in multiple pieces, as it can operate on multiple targets. Not much debugging time required.
Level 27 mage skill 'spell lore' - approximately 1 hour. This was a very easy hook into the spellcasting code.
Level 6 cleric spell 'faith shield' - approximately 4 hours, most of it testing and design, trying to figure out how to not break anything.
Level 31 cleric spell 'breath of life' - approximately 5 hours. Required several debug passes to get the math right, largely because I wrote the core of it while I was very tired.
Level 33 cleric spell 'area heal' - approximately 2 hours, because this reused a lot of well-done code from 'area refresh'.
Level 34 cleric spell 'astral bridge' - approximately 16 hours. The spell itself only took about two hours, but before I could implement it I had to completely rework the waypoint code. Refactoring and updating the old code took the bulk of the time, and it broke waypoints for a lot of players.
Level 32 cleric spell 'group waypoint' - approximately 2 hours, because the astral bridge and other waypoint code was already in place.
Level 8 thief skill 'listen' - approximately 4 hours.
Level 29 thief skill 'fast talking' - approximately 3 hours, had to come back and extend its use into other thief skills that didn't have the facility before.
Level 26 warrior skill 'cleave' - approximately 5 hours. Ran into an irritating bug where cleave would cause a death which would cause an autocleave which could cause a death which could cause an autocleave...
Level 32 warrior skill 'whirlwind' - approximately 3 hours. The event handler for this was very straightforward.
Level 8 necromancer spell 'bone blade' - approximately 2 hours.
Explorer points - about 10 hours. This had a lot of hooks for display and interfacing, which usually takes a lot of time. Multiple debug passes.
Various achievements - about ten minutes each when done in groups.
There was also a lot of infrastructure and other work that went on to enable all this; between bug fixes, infrastructure, and design, the times above are perhaps a third of the total.
Labels:
new features,
software engineering,
system event
Tuesday, December 21, 2010
Alter Aeon Christmas Event
Every year for Christmas (and for a bunch of other holidays), we do something special. Usually this amounts to in-game events to open new areas, or for special prizes, things of that nature. This year, in addition to the usual things, we'll also be adding something else: a bunch of new code.
For each of the five classes, we'll be adding a few new spells and/or skills. A lot of this stuff is high level, but it's also focused more strongly in some classes than others. Cleric is probably the class that benefits the most, but it's also been the class with the least amount of scaling. Necromancer doesn't get much new stuff, but it does get a few critical reworks of existing spells and skills that didn't work out as designed.
Adding new spells and skills like this is always a hassle. Coming up with new stuff is hard, because it has to be useful, interesting, and above all preserve the physics/theme of the game. There's no point in just adding a bunch of lookalike damage spells that are successively more powerful.
There's also the problem of integrating new things into the existing spell and skill trees. One of the major things about this release is that there's been a lot of reworking of the spell and skill trees for the various classes. Thief, warrior, and cleric have all seen pretty significant changes to their skill groups, primarily to make space for the new additions.
There are a few other things I'll mention, such as new achievements, but since we're keeping the actual spells and skills under wraps until Christmas morning, I'll stop here.
For each of the five classes, we'll be adding a few new spells and/or skills. A lot of this stuff is high level, but it's also focused more strongly in some classes than others. Cleric is probably the class that benefits the most, but it's also been the class with the least amount of scaling. Necromancer doesn't get much new stuff, but it does get a few critical reworks of existing spells and skills that didn't work out as designed.
Adding new spells and skills like this is always a hassle. Coming up with new stuff is hard, because it has to be useful, interesting, and above all preserve the physics/theme of the game. There's no point in just adding a bunch of lookalike damage spells that are successively more powerful.
There's also the problem of integrating new things into the existing spell and skill trees. One of the major things about this release is that there's been a lot of reworking of the spell and skill trees for the various classes. Thief, warrior, and cleric have all seen pretty significant changes to their skill groups, primarily to make space for the new additions.
There are a few other things I'll mention, such as new achievements, but since we're keeping the actual spells and skills under wraps until Christmas morning, I'll stop here.
Labels:
classes,
high levels,
new features,
system event
Wednesday, November 3, 2010
Alter Aeon Necromancer Class
There's been a lot of talk on this blog and the Alter Aeon Forums about a new Necromancer class. Official work on it started about a year and a half ago, and up until about three months ago pretty much everything that was done was under-the-covers structural stuff.
Once all the infrastructure was in place, I started hitting spells and skills really hard. In the last three months I've implemented about 50 new spells and skills, some with rather exotic (compared to other spells and skills) features.
And finally, two days ago, the first ever Alter Aeon class expansion was officially unveiled. Necromancer is now live on AA!
Some of the available spell and skill groups for necromancers involve:
- creating animated entities of various sorts
- raising your own undead
- summoning demons for fun and profit
- using dragon teeth as powerful spell components
- blood skills involving your own blood
- controlling undead and demons
- soulsteal and other spirit-based spells
As always, a full spell at skill list can be found on the Alter Aeon Spells and Skills pages.
One of the crowning features of the new class is the minion system, which allows high level necromancers to create and manage several minions at once.
The class plays very differently from any of the others, and is looking like a great addition to the game. There's definitely still some balancing issues remaining, but for now it's looking extremely solid. Further, it's downright fun for me to play. I wish I had more time to do so.
Once all the infrastructure was in place, I started hitting spells and skills really hard. In the last three months I've implemented about 50 new spells and skills, some with rather exotic (compared to other spells and skills) features.
And finally, two days ago, the first ever Alter Aeon class expansion was officially unveiled. Necromancer is now live on AA!
Some of the available spell and skill groups for necromancers involve:
- creating animated entities of various sorts
- raising your own undead
- summoning demons for fun and profit
- using dragon teeth as powerful spell components
- blood skills involving your own blood
- controlling undead and demons
- soulsteal and other spirit-based spells
As always, a full spell at skill list can be found on the Alter Aeon Spells and Skills pages.
One of the crowning features of the new class is the minion system, which allows high level necromancers to create and manage several minions at once.
The class plays very differently from any of the others, and is looking like a great addition to the game. There's definitely still some balancing issues remaining, but for now it's looking extremely solid. Further, it's downright fun for me to play. I wish I had more time to do so.
Labels:
classes,
forum,
necromancers,
new features
Subscribe to:
Posts (Atom)