G
Guest
Guest
Archived from groups: rec.games.roguelike.development (More info?)
This is a rough route map for the creators of roguelikes. I'm well aware that
there are many possible routes and that no two journeys are the same -- this is
a description of one of possibilities and maybe will help you to plan your own.
Please add your comments -- maybe we could make this article really
helpful. What are your own routes?
Step 1 -- Decide to write a game
--------------------------------
Most of you will have this step behind you already, but there are some hints
about the direction of the first step. The best reason to start developing your
own roguelike game I can think of, is to create a game that you will enjoy
playing yourself. It's like this in my case.
Don't start by asking around about the definition of roguelike game -- you don't
need it. If the game you write is not considered roguelike by others, but it's
still fun to play for you -- you succeeded. It's not like there's some kind of
a contest to write a game meeting certain specifications.
Don't plan too much. Of course, if you want certain things in your game, you
must write it so that there is room for them -- but don't even try to anticipate
everything -- it's just impossible. When you write a desig doc, you make a lot
of decissions. Most of the decissions can't be made without performing some test
first -- usually by writing small programsutilizing given feature. It's best to
make the decissions when your project has already reached apropriate stage --
when you don't need to write an additional program, because your project already
has everything you need.
It's no fun to just proceed according to plan -- leave some space for
improvisation. Don't be afraid about making mistakes or implementing something
in an inflexible way -- you can improve it when you need it -- most of the time
it will be ok.
Step 2 -- Hello world!
----------------------
Prepare your programming environment. Choose your language and platform, choose
apropriate compilers/interpreters, editor, version control, automated build, and
other utilities. Set them up so that you're comfortable with them.
Decide on which libraries you're going to use -- it can change later, but it's
usually a painful change. Don't think too much about portability -- it can be
fixed later. Think about what you need and what you're comfortable with.
Decide on the language you want to write comments and object names in your code,
as well as the language you want to be used in your game. I'd strongly recommend
using english in your source code -- you can get more help this way from others.
Write a simple 'Hello world!' program and test whether it works. Test your
libraries, etc. -- you don't want any surprises.
Start coding.
Step 3 -- It's a boy!
---------------------
Start with screen output and keyboard input. Decide preemptively on your screen
layout (easy, you can change it later) and make the routines that display map
characters, status lines and messages.
Make the routine to read key-presses (no config files, no keys redefinition).
Make a '@ walking around the empty screen' demo. Play with it a little, clean
things up, play some more, imagining the game is finished and you're playing it
.
Make the message handling routines -- especially for the debugging messages --
they come in handy.
Step 4 -- The map
-----------------
Decide on your map structure. Don't over-generalize -- you can add things later.
Make your (empty) map displayed on the screen. Scrolled if you need it.
Add some elements to your map to see if they are displayed correctly (just
hard-code them, you don't need a level generator yet).
Make your '@' appear on the map -- not as it's element at first, just as
a cursor. Test the scrolling, maybe make a 'look' command.
Now turn '@' into creature. You still don't have time implemented, so the
keyboard-reading routines will just move it around the map. Include the checks
for walls in the movement code. Maybe add doors and open/close commands.
Step 5 -- Saving/Loading
------------------------
Read the map from a file instead of hard-coding it. You can play with it and test
different configurations if you make it human-readable from the start.
Add the 'save' command and the procedures to save your game -- the map at first,
then, gradually, all of other game elements. From now on, when you implement
something that needs saving, also implement saving it as soon as possible.
Once you work with files, you can make your preferences and keybindings config
files. Again, if you make them human-readable, you'll save yourself a lot of
trouble.
Now, when you're not sure how any element of the game works, you can save the
game to a file and just check it.
Step 6 -- It's alive! Alive!
----------------------------
Implement other creatures (monsters) and time. At a single monster for start.
Give him some simple AI (like, say, stay still, or maybe move randomly).
Start with my turn-your turn, then implement the time system you want (or,
usually, a simplification of it and gradually make it more complicated later).
Remember to test everything as you go.
Step 7 -- Interaction
---------------------
Add stats for your creatures. A simplification of the ones you envisioned,
probably. It's best to add stats as they are needed, not because they 'look
cool', but you might not be able to resist .
Make the creatures notice each other -- bump, attack, etc. Gradually improve
their AIs, so that they can chase the player.
Implement and test the combat system -- without equipment for now, just hardcode
the values. Do lots of testing.
Step 8 -- Data files
--------------------
Move the creature, map features, etc. definitions to data files. Forget about
scripting for now If something cannot be moved -- just leave it for now.
Step 9 -- Items
---------------
Add items. For start, just objects you can pick up -- no properties. Gradually
give them properties, kinds, stats, etc., implement inventory, picking up and
dropping, equipping and using (no effects yet), also stacking, containers (if
you want them), etc.
It's a large step, lots of testing needed.
Step 10 -- Magic
-----------------
Add item effects, special monster attacks, spells. Add items and monsters to
test them. You don;t need all the possible effects right away -- just the ones
needed for the next step.
Step 11 -- Simple game
----------------------
Try to make a simple, hard-coded game. Play it and give it to play to your
friends. Test the mechanics implemented so far. Check whether the game is fun.
Change everything you need to change. Don't forget to test a lot. Always ask
someone to test the games 'fun factor', or test it yourself after some time of
break -- it's hard to notice some things right away.
This step should take pretty long time, until you've got a playable, fun
mini-game.
Step 12 -- Levels
-----------------
Write your level generators. Implement moving between the levels, wilderness or
town if you want them, saving the levels on level change if you want them
persistent (so that they don't take up memory).
Spread your monsters and items on different depths. Add more monsters and items,
with their effects, as needed.
Step 13 -- Experience
---------------------
Start developing your experience system and skill system. Tune the monster's and
item's stats. Make character generation screen, classes, races, whatever.
Play your game a lot.
Step 14 -- Citizens
-------------------
Add NPCs, shopkeepers, simple quests -- if you need them all. Keep adding
features and tuning the stats.
Step 15 -- Free at last
-----------------------
Start adding and testing all the 'unique' features you thought are so cool
months (years?) ago, when you started the whole thing. Revise whether they are
really so cool.
Write that random plot generator, factions system, infinite wilderness
generator, neural network AI, etc. -- you can test them on a working game.
--
Radomir `The Sheep' Dopieralski @**@_
($s) 3 Ching!
. . . ..v.vVvVVvVvv.v.. .
This is a rough route map for the creators of roguelikes. I'm well aware that
there are many possible routes and that no two journeys are the same -- this is
a description of one of possibilities and maybe will help you to plan your own.
Please add your comments -- maybe we could make this article really
helpful. What are your own routes?
Step 1 -- Decide to write a game
--------------------------------
Most of you will have this step behind you already, but there are some hints
about the direction of the first step. The best reason to start developing your
own roguelike game I can think of, is to create a game that you will enjoy
playing yourself. It's like this in my case.
Don't start by asking around about the definition of roguelike game -- you don't
need it. If the game you write is not considered roguelike by others, but it's
still fun to play for you -- you succeeded. It's not like there's some kind of
a contest to write a game meeting certain specifications.
Don't plan too much. Of course, if you want certain things in your game, you
must write it so that there is room for them -- but don't even try to anticipate
everything -- it's just impossible. When you write a desig doc, you make a lot
of decissions. Most of the decissions can't be made without performing some test
first -- usually by writing small programsutilizing given feature. It's best to
make the decissions when your project has already reached apropriate stage --
when you don't need to write an additional program, because your project already
has everything you need.
It's no fun to just proceed according to plan -- leave some space for
improvisation. Don't be afraid about making mistakes or implementing something
in an inflexible way -- you can improve it when you need it -- most of the time
it will be ok.
Step 2 -- Hello world!
----------------------
Prepare your programming environment. Choose your language and platform, choose
apropriate compilers/interpreters, editor, version control, automated build, and
other utilities. Set them up so that you're comfortable with them.
Decide on which libraries you're going to use -- it can change later, but it's
usually a painful change. Don't think too much about portability -- it can be
fixed later. Think about what you need and what you're comfortable with.
Decide on the language you want to write comments and object names in your code,
as well as the language you want to be used in your game. I'd strongly recommend
using english in your source code -- you can get more help this way from others.
Write a simple 'Hello world!' program and test whether it works. Test your
libraries, etc. -- you don't want any surprises.
Start coding.
Step 3 -- It's a boy!
---------------------
Start with screen output and keyboard input. Decide preemptively on your screen
layout (easy, you can change it later) and make the routines that display map
characters, status lines and messages.
Make the routine to read key-presses (no config files, no keys redefinition).
Make a '@ walking around the empty screen' demo. Play with it a little, clean
things up, play some more, imagining the game is finished and you're playing it
.
Make the message handling routines -- especially for the debugging messages --
they come in handy.
Step 4 -- The map
-----------------
Decide on your map structure. Don't over-generalize -- you can add things later.
Make your (empty) map displayed on the screen. Scrolled if you need it.
Add some elements to your map to see if they are displayed correctly (just
hard-code them, you don't need a level generator yet).
Make your '@' appear on the map -- not as it's element at first, just as
a cursor. Test the scrolling, maybe make a 'look' command.
Now turn '@' into creature. You still don't have time implemented, so the
keyboard-reading routines will just move it around the map. Include the checks
for walls in the movement code. Maybe add doors and open/close commands.
Step 5 -- Saving/Loading
------------------------
Read the map from a file instead of hard-coding it. You can play with it and test
different configurations if you make it human-readable from the start.
Add the 'save' command and the procedures to save your game -- the map at first,
then, gradually, all of other game elements. From now on, when you implement
something that needs saving, also implement saving it as soon as possible.
Once you work with files, you can make your preferences and keybindings config
files. Again, if you make them human-readable, you'll save yourself a lot of
trouble.
Now, when you're not sure how any element of the game works, you can save the
game to a file and just check it.
Step 6 -- It's alive! Alive!
----------------------------
Implement other creatures (monsters) and time. At a single monster for start.
Give him some simple AI (like, say, stay still, or maybe move randomly).
Start with my turn-your turn, then implement the time system you want (or,
usually, a simplification of it and gradually make it more complicated later).
Remember to test everything as you go.
Step 7 -- Interaction
---------------------
Add stats for your creatures. A simplification of the ones you envisioned,
probably. It's best to add stats as they are needed, not because they 'look
cool', but you might not be able to resist .
Make the creatures notice each other -- bump, attack, etc. Gradually improve
their AIs, so that they can chase the player.
Implement and test the combat system -- without equipment for now, just hardcode
the values. Do lots of testing.
Step 8 -- Data files
--------------------
Move the creature, map features, etc. definitions to data files. Forget about
scripting for now If something cannot be moved -- just leave it for now.
Step 9 -- Items
---------------
Add items. For start, just objects you can pick up -- no properties. Gradually
give them properties, kinds, stats, etc., implement inventory, picking up and
dropping, equipping and using (no effects yet), also stacking, containers (if
you want them), etc.
It's a large step, lots of testing needed.
Step 10 -- Magic
-----------------
Add item effects, special monster attacks, spells. Add items and monsters to
test them. You don;t need all the possible effects right away -- just the ones
needed for the next step.
Step 11 -- Simple game
----------------------
Try to make a simple, hard-coded game. Play it and give it to play to your
friends. Test the mechanics implemented so far. Check whether the game is fun.
Change everything you need to change. Don't forget to test a lot. Always ask
someone to test the games 'fun factor', or test it yourself after some time of
break -- it's hard to notice some things right away.
This step should take pretty long time, until you've got a playable, fun
mini-game.
Step 12 -- Levels
-----------------
Write your level generators. Implement moving between the levels, wilderness or
town if you want them, saving the levels on level change if you want them
persistent (so that they don't take up memory).
Spread your monsters and items on different depths. Add more monsters and items,
with their effects, as needed.
Step 13 -- Experience
---------------------
Start developing your experience system and skill system. Tune the monster's and
item's stats. Make character generation screen, classes, races, whatever.
Play your game a lot.
Step 14 -- Citizens
-------------------
Add NPCs, shopkeepers, simple quests -- if you need them all. Keep adding
features and tuning the stats.
Step 15 -- Free at last
-----------------------
Start adding and testing all the 'unique' features you thought are so cool
months (years?) ago, when you started the whole thing. Revise whether they are
really so cool.
Write that random plot generator, factions system, infinite wilderness
generator, neural network AI, etc. -- you can test them on a working game.
--
Radomir `The Sheep' Dopieralski @**@_
($s) 3 Ching!
. . . ..v.vVvVVvVvv.v.. .