19. December 2009 15:24 by David in
At Puzzle Guzzler, a small games software company, the development team are starting design work on their new game “Dragons of Kin”. They are sitting around a table covered with toy dragons, dwarfs and concept drawings.
The group consists of:
- Brett the writer – He will be creating the overriding theme for the game, the quests, dialog and boss character personalities
- Jasmine the environment and level lead – She owns the look of the game and the placement of monsters and items
- Jen the Animation lead – She owns all CG assets in the game including modelling, lighting and animation
- Douglas the Engine lead – The programmer geek
Brett | Just to recap Kin is telling the story of a society falling apart. Kin was vibrant farming country that stretched from fishing villages in the east, to mines to the north. There was no King instead each small village was run by a council of elders. Basically very idyllic with elements of Greek culture but unable to handle a big crisis or invasion. |
Jasmine | So no massive cities… Lots of little towns surrounded by farms fairly clear roads between each area. The forests will be where all the creatures are then. |
Brett | Yah that’s right…
Thirty years ago the “Scrolls of Elioch” were discovered and taken to the Mage Guild. They contained new spells for weather control, a minor fireball and the ability to calm animals. Its the last one that has caused the trouble. Relatively quickly the master mages discovered that its a small leap from calming to control.
Now many of the towns folk are slaves to the strongest mage in the area. They use them for their own amusement and live like Gods. We will get to delve into some pretty dark human vices. Some will have harems, others will feed off the population to “live forever”. We will also have a few towns where the local Mage is good but is in constant fear that another stronger Mage will “steal his town”. So they need to either constantly make potions to give their community immunity or put a minor control spell on everyone. |
Jasmine | And our hero is? |
Brett |
Christoph is a member of “Dragons” a resistance movement. French resistance with fire balls instead of bombs. They go into each town, assassinating the weaker mages, putting potions into the water supply to disrupt the magical control of the towns etc. The Dragons maybe heroes but since all the militia and armies are controlled by the mages they are public enemy number one. I’m still working on the back story but his family were refugees fleeing their village. He became separated from the rest of his family and is now trying to find them.
He has natural immunity to all magic and can’t be controlled but makes his own magical abilities pretty poor. I think its important that by the end of the game he isn’t walking around with his own slave army. Kinda defeats the purpose of him being a hero… |
Douglas | I’m really excited about this game its really going to kick ass. But we really have to make sure that the coders don’t become a bottleneck like last time.
I want to start working on the AI for fighting. Do we have an idea yet on what character stats we are going to use? At least an outline so that I can start creating some of the core classes? |
Jen | Yah I would like to know as well so that my team can look at mocking up the character setup screens. |
Jasmine | Steady on. We aren’t even close to that yet. Isn’t there a way you can start on the engine without knowing all the details. It sounds like you want to lock in the design but I think we should delay it as late as possible at least until we have created a completed dungeon and have play tested it for a couple of weeks. |
Douglas | Umm I’m not sure. I suppose but I still need a starting point. |
Brett | How about… Let me see…
Ok Christoph is with three other members of the resistance. The town mage is very weak and only just hangs onto power. But his brother who is now running the town militia has his palace completely locked down. So the normal dash and stab is out. The Dragon cleric sends Christoph out of town to find some ingredients for the immunity potion. Battle, blah, blah hunt/gather blah, blah.
When he returns to the town there are gallows setup and the Dragon’s have been found guilty of treason. They will be killed in 2 hours. Camera zooms in and Christoph’s hands start glowing a large tattoo of a Dragon is seen pulsing on his forearm. The cleric mouth is moving in the distance but he can hear every word. “There is a spring above the town go quickly pour the elixir into it. It runs below the square it might just be enough to save us.”
Later our hero stands looking down on the spring. There is a large crocodiles chained to an enormous statue. Magical energy vibrates across it. Of course! This is how the mage controls the town. Destroy the statue. Use the elixir and the town will be free. |
Douglas | Brett you really are full of (*^(*&^ |
Brett | Thanks… Lets make this interesting.
There are 10 baby crocs each dealing health damage. The big one has a poisonous bite. It drains health away each second after you have been bitten. By being close to the statue Christoph is being confounded so he cant move as fast. He also has a ring on that is slowly healing him ever few seconds. |
Douglas | Ok so we have a number of effects that are time dependent. We have effects that are dependent on the distance between objects and of course we have the run of the mill hit points and magic points. |
Jen | Funny it sounds a lot like a Mel script in Maya. Some stuff can be done on the timeline and some can be done through triggers. |
Douglas | Of course, of course that’s all easy to do in Mel as the language is designed around animating. It knows a lot about polygons, timelines etc. Maybe we should create a language for “Dragons of Kin”. At the start it will be very simple and generic just to get us going. But it will know about spells and damage and weapons.
Wow that could be great. If Brett and Jasmine write the story using the language my team can create an Engine that will “play the game”. Awesome… And the best bit, my engine and the language and decoupled. When we start optimising or refactoring it wont break the language as they are completely separate.
Bring it on… |
Jasmine | Douglas I don’t want to rain on your parade but I’m not a programmer and sometimes I wonder if Brett can even type. |
Douglas | Don’t worry about that. It will be designed for you guys from scratch. It should be almost identical to how you create the levels in Word now. But instead of my team having to translate the design into code the document will be the code. |
BattleLang first draft…
The next day Douglas and Jasmine start on designing the language
Douglas | Lets start with the crocodiles setup
class Crocodile {
int magicPoints;
int healthPoints;
float healthHealingSpeed; float magicHealingSpeed;
Crocodile(…)
}
Ok so we have this class and stats… |
Jasmine | Sorry, I thought you said the language would be text like. Kinda looks like normal code to me. Why are there int and floats in there. How do I set the amounts? What is a class how do I do different types for crocodiles for instance like the boss crocodile? |
Douglas | Dam your right. Ok lets start again. What you need to be able to do is setup the values for the different stats directly in here… Maybe something closer to Pascal and I’ll kill the semicolon.
Creature Crocodile {
Life := 40
Magic := 50
LifeHealingSpeed := 5 MagicHealingSpeed := 5
} |
Jasmine | That makes more sense. How fast is the healing speed. Is it per minute per second. |
Douglas | Right, maybe we should be using Ada’s and F# Units of Measure.
Sorry, in a normal programming language everything is a number. The problem is that it means you can add values that aren’t properly related. So if you add 3 oranges and 2 apples, instead of getting 5 fruit you get either 5 oranges or 5 apples. As far as the computer is concerned its just two numbers. The knowledge about what the number represents in a problem for the programmer. Units of Measure allows you to stamp each numeric value with the actual item type it represents. Most examples use gravity, speed, velocity, money that kinda thing.
So… Creature Crocodile {
Life := 40 LP
Magic := 50 MP
LifeHealingSpeed := 1 LP/sec MagicHealingSpeed := 10 MP/min
} |
Jasmine | Cool so does that mean we can represent damage this way. LizardPoison := 15 LP + 3 LP/sec |
Douglas | Wow yes you could. That is really compact. Lets extend this to spells FireBall :
Inflicts:= 20 LP
Costs:= 5 MP |
Jasmine | I see so the firewall has an amount of damage that inflicts but to use the spell it has a cost of 5. I suppose all that is really missing is that every crocodile shouldn’t have just 50 LP but it should random from a range of values. |
Douglas | Ok lets do the Crocodile properly then Creature Crocodile {
Life := random_select [30..40] LP
Magic := 15 MP
LifeHealingSpeed := 3 LP/sec
MagicHealingSpeed := 1 MP/min
Weapons
{
Bite:
Inflicts:= random_select [5..10] LP
PoisonBite:
Inflicts:= random_select [5..10] LP + 3 LP/sec
Costs:= 5 MP
}
}
This a good start. Eventually we will need to extend it to contain all the animation and sounds effects that Jen needs and currently there is no concept of the distance weapons. Before we go any further I would like to spend a couple of days writing a parser that can load the language into a form an engine can use. |