Difference between revisions of "User:Duerig"

From RogueBasin
Jump to navigation Jump to search
(Removed LOS by Tobias Downer. Already on site.)
m (Permission to transfer articles)
 
(12 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Attention! The reason that these articles were not transferred to RogueBasin and are in danger of being lost for good is because the admins could not secure the author's permission for being transferred from the old site to the new one. IF YOU ARE AN AUTHOR: Please let me know on this page that you give your permission. If you do that, I can pull the articles from the archive pages and integrate them into the wiki.
List of authors who have given permission:
  * Steve Segreto (Permission Granted) N.B. My article is extremely dated by now and probably useless to most everybody
List of authors who have not given permission (alphabetical order by first name):
  * Adam Szczepaniak
  * Andrew Collins
  * Brian Bucklew
  * Brian Robinson
  * Christopher J Martens
  * Damian Bentley
  * Dana Larose
  * Darren Hebden
  * Erik_Inge_Bols???_knan_mo.himolde.no
  * Erno Tuomainen
  * Esa Ilari Vuokko
  * Gero Kunter
  * Gwidon S. Naskrent
  * Isaac Kuo
  * Jakub Debski
  * James Burton
  * Jim Babcock
  * Joseph Swing
  * Josh Tippets
  * Judy Wray
  * Jurriaan Kalkman
  * Kenneth Power
  * Kornel Anubis Kisielewicz
  * Matthias E. Giwer
  * Michael Blackney
  * Michael Heinich
  * Mike Anderson
  * Mixi Lauronen
  * Peter Farabaugh
  * R.Alan Monroe
  * Radomir 'The Sheep' Dopieralski
  * Rick Carson
  * Ross Morgan-Linial
  * Sean Middleditch
  * Simon McGregor
  * Steve Segreto
  * Stu George
  * Thomas Gilray
  * Unknown ( Direct Screen Output.txt )
Here is a list of articles from the old roguelikedevelopment.org that I am trying to salvage:
Here is a list of articles from the old roguelikedevelopment.org that I am trying to salvage:


Cannot Find:
Cannot Find:
  * How to finish your roguelike - Peter Farabaugh [pete@tbe.net].txt Found a russian translation: http://www.rlgclub.ru/pmwiki.php?n=Main.ArticlesDevRlgFinish
  * User Interface in Roguelikes - Jim Babcock [jimmy_b@earthlink.net].txt Found a russian translation: http://www.rlgclub.ru/pmwiki.php?n=Main.ArticlesDevUserInterface
   * Roguelike Step by Step Guide.txt
   * Roguelike Step by Step Guide.txt
  * Recursive randomized world-map generation Phillip C. Culliton [pcullit@hotmail.com].txt


TODO:
TODO:
   * Add a link to blah.tar.gz
   * Add a link to blah.tar.gz
  * add a link to name.zip for Random Name Generation Using Regular Expressions


= Representing Magick Spells - Sean Middleditch [sean.middleditch@iname.com].txt =
Found Articles:
 
  * [[User:Duerig/Archive0]]
This article describes the basics of representing and using Magick Spells in roguelikes.
  * [[User:Duerig/Archive1]]
The general techniques are very similar to those used in my article on Object
  * [[User:Duerig/Archive2]]
representation.
  * [[User:Duerig/Archive3]]
 
  * [[User:Duerig/Archive4]]
For starts, we need a class to hold the information for a specific spell.
  * [[User:Duerig/Archive5]]
 
   * [[User:Duerig/Archive6]]
class Spell {
   * [[User:Duerig/Archive7]]
public:
   * [[User:Duerig/Archive8]]
 
   * [[User:Duerig/Archive9]]
OK.  Now, let's give the spell a name.
 
char *Name;
 
There.  Now, every magick spell costs Mana Points (well, if you're using a magick system
similar to most others).  So we need to define the spell's cost in MP.
 
int MPCost;
 
Also, every spell has a level: how difficult a spell it is.  Only more powerful casters can
use more powerful spells.
 
int Level;
 
There.  Now all we need to know is what in Gehenna the spell does.  We'll make a
sub-class called Effect to store this information.
 
class Effect: {
friend Spell;
 
OK, so what does a specific spell do?  We'll make a simple int to describe what a specific
Effect describes.
 
int Type;
 
So what does Type mean?  We'll use some #define's to specify.
 
#define HEAL 0
#define SCORCH 1
#define TICKLE 2
#define CREATE_OBJ 3
 
You can of course add as many as you want.  Now, we know what an Effect does, but
that's not enough.  For example, for a HEAL Effect, how much HP does it heal?  We
could base everything of level (making a rigid and uniform magick system, which may
be what you want: predictability), or we could give each Effect a set of arguments to
define in more detial what it does.  We'll do this through the use of 5 int's.
 
int Args[5];
 
What do the fields of Args mean?  That's based on what Type is equal to.  For an Effect
with Type HEAL, we might say that:
 
Args[0] is Number of Dice
Args[1] is Sides per Die
Args[3] is Roll Mod
 
So an Effect of type HEAL with Args[0] = 2, Args[1] = 6, Args[3] = 2 would heal 2d6+2
HP.  Pretty simple, eh?
 
Anyways, we can close of the Effect class.  We want each Spell to have 5 Effect's (so
every spell can have lots of flexibility).
 
} Effects[5];
 
We can now close of the Spell class.
 
};
 
So that's all there is to a basic magick class.
 
Casting the spell is just as simple.  Make a function called Cast or whatever (I used an
object method inside the Spell class, since I'm a C++ OOP freak).  The function would
take as arguments the spell to cast, the target, etc.
 
void Cast ( Spell *SpellToCast, int TX, int TY );
 
Then we go with a big, evil, switch statement based on effect.  This actually works
VERY well.  The flexibility is astounding...
 
Of course, how each spell takes effect is based on how you've programmed the rest
of your roguelike.  Because of the OO nature of WotR, I found it very easy to create
simple object Methods for spell effects.
 
For the HEAL Spell Effect Type, you might to do something as simple as loop through
all the Characters (NPC's and Players) in the target loc (defined by TX and TY), and
heal them based on the arguments listed above... 2d6+2, or whatever.
 
Anyways, this is just the basics.  The advanced stuff all depends on your magick
system and how you programmed the rest of the game.
 
The complete source for the Spell class is:
 
#define HEAL 0
#define SCORCH 1
#define TICKLE 2
#define CREATE_OBJ 3
 
class Spell {
public:
char *Name;
 
int MPCost;
int Level;
 
class Effect: {
friend Spell;
 
int Type;
 
int Args[5];
} Effects[5];
};
 
Any questions, comments, threats, etc., e-mail me at
sean.middleditch@iname.com
Well, I don't really want any threats.
 
The End
 
 
= RL Dev Code 0.6 - Kornel _ Anubis_ Kisielewicz [kisiel@fulbrightweb.org].txt =
 
 
          RL Developer Code
          Version 0.6.0
          Designed by Kornel \"Anubis\" Kisielewicz
          (kisiel@fulbrightweb.org)
 
Hey, I noticed that both Angband and NetHack users have their own
GeekCode. Why not us? ;). This is the first draft, and it\'s realy
RLDev specific. I think that a Roguelike Dev Code will be especialy
useful, because it may make us more aware of the others ideas. I\'m
open to all new ideas, or corrections. In all project specific
questions answer about your current project. A sample of the code is
on the bottom of the document.
 
I encourage to at least post your code once, so someone can collect
them and post somewhere :).
 
---------------------------------------------
1. General info about the developers methods
---------------------------------------------
 
\"L\": Language used to program your roguelike project.
 
L:C    C
L:C++  C++
L:VC++  Visual C++
L:Java  Java
L:FP   FreePascal
L:TP    Turbo Pascal
L:DP   Delphi (Pascal)
L:Pyt  Python
?L      I still didn\'t decide
!L      I\'m a designer
[more]
 
--------------------------------------------------
 
\"E\": Experience in programing.
 
E+++  I\'m a professional programmer
E++  I program as a part time job
E+   I program quite well, as a hobby
E-    I\'ve read a few books and made some programs
E--  I\'ve made a few simple programs
E---  I\'m learning while I write a roguelike
 
!E    I\'m just a designer ;)
?E    What do I need programming for?
 
--------------------------------------------------
 
\"T\": Time invested in rl-development. Choose the most true one :).
 
T+++  Every minute of my spare time!
T++  Most of my free time
T+    Regulary
T-    From time to time
T--  As a recreation
T---  Rarely
 
!T    I don\'t write yet!
 
--------------------------------------------------
 
\"R\": Rewrites. A rewrite is writing your code from scratch, using only
old libraries, and fragments of the old code.
 
R+++  more than 5
R++  3-4 rewrites
R+    1-2 rewrites
R-    not yet
R--  I\'ve just started
R---  I do not program yet
 
?R    What are rewrites?
!R    My game doesn\'t need rewrites, cause I write error-free!
 
--------------------------------------------------
 
\"P\": Porting to other systems
 
P+++  My game will be ported to most known platforms
P++    Linux and DOS/Win
P+    I try to keep the code portable.
P-    Why the hell? I write only for Linux/DOS (you may recompile it
though)
P--    DOS/WIN only
P---  Windows only!
 
!P    I use Java (or something similar)
 
--------------------------------------------------
 
\"D\": Importance of design before programming
 
D+++  I had a detailed DesignDoc before I started programming
D++  I had many notes and information before I started coding
D+    I keep my designdoc ahead of the project, but update it regulary
D-    I had a few notes before I started coding
D--  I had a general image of what I\'m trying to do
 
!D  Who the hell needs a DesignDoc? I make everything on the fly!
?D  What\'s a DesignDoc?
 
--------------------------------------------------
 
\"G\": The generic engine, that is, how generic your game will be.
 
G+++  You will be able to make a hard-sci-fi game out of my engine, by
just changing the info-files!
G++  My engine is very generic -- you will be able to make a
different game by changing the info files
G+    I have info files for maps, monsters, items and dungeon
generators
G-   I have a few general info files
G--  I keep everything in the code
 
!G    Why the hell generic engine? I wan\'t to make a GAME.
 
--------------------------------------------------
 
\"F\": Favourite Roguelike
 
F:ToME
F:ADoM
F:V      Vanilla Angband
F:*band  *bands in general
F:Rogue  Yeah :).
F:Moria
F:NHack  NetHack
F:Hack
F:GH    Gearhead
F:DC    DeadCold
[more]
 
--------------------------------------------------
 
\"RL\": Your roguelike definition
 
RL+++  A roguelike MUST be ASCII, MUST be a dungeon crawl, and MUST be
based on a system similar to AD&D, and MUST be permadeath.
RL++  A roguelike has to be ASCII, has to be random, and have
experience levels, and permadeath.
RL+    A roguelike has to be ASCII or use tiles, must have dungeons,
and focus on killing things for experience. It has to be permadeath
too.
RL-    A roguelike may have graphics but has to be rather dungeon
themed permadeath game.
RL--  A roguelike is a game that focuses on randomness, and features
permadeath.
RL---  A roguelike is a game inspired by other roguelike games.
 
!RL    This is completely unimportant
?RL    What is a roguelike actually?
 
--------------------------------------------------
 
\"RLA\": Roguelike community activity
 
RLA+++ I\'ve created a popular game, or host one of the main roguelike
sites on the web.
RLA++  I\'ve created a roguelike dedicated webpage (focusing not only
on my game)
RLA+  I\'m a FAQ maintainer, or wrote a roguelike article, or created
a roguelike document
RLA-  I play roguelikes and post on a few roguelike newsgroups
RLA--  I post on one roguelike newsgroup
 
!RLA  Who is that guy?
 
 
 
--------------------------------------------------
2. Project specific questions
--------------------------------------------------
 
\"W\": World of the game, the genre
 
W:F    Fantasy
W:DF  DarkFantasy
W:AF  Alternative Fantasy
W:SF  Science Fiction
W:HSF  Hard Science-Fiction
W:MH  Mecha
W:M    Modern
W:CP  CyberPunk
W:G    Generic engine (give eventual default genre in bracets)
 
--------------------------------------------------
 
\"Q\": Quests in your project
 
Q+++  The plot is the master! You will have random interesting quests
in my game.
Q++  I will add many pre-written quests.
Q+    I will add a few quest for flavor, or even ToME-like random
quests.
Q-    Maybe a few quests for flavor
Q--  Kill Sauron. Kill Morgoth.
Q---  No quests -- just Hack\'n\'slash.
 
!Q    Who the hell needs quests?
?Q    What is a quest?
 
--------------------------------------------------
 
\"AI\": Approach to AI in your project
 
AI+++ AI is the key! The creatures will behave diablo inteligently and
talk to you with Bot-generated messages. They will use military
tactics, recognize dangers, and create traps.
AI++  The NPCs will behave quite reasonable, will flee, band together,
pickup and use items.
AI+  The creatures will use items like wands, staves and the like.
AI-  The creatures will be able to pickup and equip items.
AI--  No monster-inventory -- just Hack\'n\'Slash
AI--- Kill player. Kill player.
 
--------------------------------------------------
 
\"GFX\": Approach to graphics
 
GFX+++  The game will be graphical with nice graphics
GFX++  The hame will have tiled graphics
GFX+    Some popular freeware tiles
GFX-    Somewhere in the future I plan to add graphics
GFX--  I\'d like graphics, but I\'m a poor artist
 
!GFX    Pure ASCII rulez!
 
--------------------------------------------------
 
\"SFX\": Approach to sound
 
SFX+++  Digitalized Speech and Music is my aim
SFX++  I will add many wave files and maybe some music
SFX+    Just a few Sound-Effects
SFX-    Maybe in the future
SFX--  I\'d like sound, but I\'m a poor at that
 
!SFX    A roguelike with sound? Buhahahaha...
 
--------------------------------------------------
 
\"RN\": Approach to randomness in your project
 
RN++++ The whole world will be random, random quests, random dialogs,
random plot
RN+++  Same as above, but the plot will be fixed
RN++  The world will be fixed, but there will be random quests,
dungeons and items and monsters
RN+    Random dungeons+items+monster placement
RN-    Just the dungeons and monster placement
RN--  I plan to make everything fixed
 
--------------------------------------------------
 
\"PO\": Popularity of current project
 
PO+++  I have fan-sites of my playable roguelike (reserved for ToME,
NetHack, ADoM, Angband and the like :)
PO++  I have a playable version on the web that can be enjoyed
PO+    I have a playable version on the web that can be looked at
PO-    I have a designer version on the web (dungeon+items+npcs and
the like)
PO--  I have a few design programs (map-view, dungeon generator)
PO---  I haven\'t published anything
 
!PO    I didn\'t do anything yet!
 
--------------------------------------------------
 
\"Hp\": Hitpoint treatment in the roguelike
 
Hp+++  A 1-st level character has a few hitpoints, a 50th level
character has a few  hundred...
Hp++  I keep the hitpoints rather lower.
Hp+    The player rarely recieves hit-points, I don\'t use a level
system.
Hp-    Fully skillbased
Hp--  Fully skillbased and advancement doesn\'t make you realy
powerfull
 
!Hp    I don\'t use hitpoints!
 
--------------------------------------------------
 
\"Re\": Realism in the roguelike
 
Re+++  You can die because of disease, rusty weapon wounds, or the
after-effects of an out-dated portion of speed
Re++  Each fight is dangerous
Re+    I\'d rather not let the player kill hordes of monsters
Re-    I like to keep things real as in NetHack
Re--  I like to keep things real as in Angband
Re---  Who needs realism? It\'s the hack\'n\'slash that counts!
 
--------------------------------------------------
 
\"S\": Seriousness of the world
 
S+++ THE GAME. You think it\'s funny? You\'re talking to me?
S++  The game has to be serious. I want to make an atmosphere...
S+  (ADoM) From time to time a funny in-game situation is fun
S-    I like to keep the world rather not gloomy
S--  (ZAngband) Lets keep it easy, sometimes a Barney, or Bull Gates
is fun to kill
S--- (NetHack) Why the hell? Let\'s have nuclear scientists, tourists,
photo-cameras and sinks in a dark dungeon
 
--------------------------------------------------
 
regards, and I\'m waiting for your codes and opinions :),
--
Kornel \"Anubis\" Kisielewicz
RLDev Code v.0.6
    L:FP E+ T+ R+++ P+ D++ G++ RL-- RLA++ F:ADoM
    GenRogue 0.16 V8 ( http://genrogue.felis7.civ.pl/ )
    W:DF Q+++ AI++ !GFX !SFX RN+++ PO--- Hp-- Re+++ S+++
 
= Roguelike_Skeleton_Blah_Documentation_Erik_Inge_Bols???_knan_mo.himolde.no_.txt =
 
------------------------------------------------------------
NB. If you wish to get hold of Bzip2, please pop along to...
http://www.muraroa.demon.co.uk/
------------------------------------------------------------
 
Okay. Basically, what works well as of the current version is map
generation, line of sight (everything not in LOS is greyed out) and config
file for key setup. The player, item and inventory structs and functions
have been started. Spells, monsters and combat are just stubs.
 
- Map generation is by far the most complex part of this. The GenerateRoom
routine (in map-internal.c) creates weird cave-looking rooms by a
conceptually simple method:
 
//pseudocode
while (room < target_room_size and squares_left)
  pick_random_square_from_stack_and_delete_from_stack
  add_surrounding_squares_to_stack
 
(actually, I use one stack and an array of pointers to places in that
stack, but the above is the underlying principle)
 
- config.c implements a simple parser for configuration files, that
probably can be extended to other uses than key configuration.
 
- The Player and Creature structs have identical upper parts, so that
one can use most routines for both by typecasting (Creature)player ...
 
- Almost everything in the game is in a linked list or contains one or
more linked lists. See lists.c and lists.h .
 
- One of the last things I did to this source was rewriting many routines
to use a "tagitems" calling convention, that is:
 
  createBlah (TAG_UGLINESS, 500, TAG_MONTY_PYTHON_FACTOR, 2.1);
  // (identifier, value) pairs, instead of fixed parameters that will
  // change dozens of times during developement
 
- creature.c allocates the correct amount of memory for a creature, but
does nothing more as of yet.
 
- pl_item.c and item.c is in its infancy. It has a demo item defined, and
allocates it to the player, and successfully displays it in the player's
inventory. Fragile. But item.h is quite well-developed, and ought to give
anyone ideas...
 
- lists.c contains your basic single-linked lists code + the NextTagItem
code.
 
- magic.c, help.c, combat.c, timer.c are just stubs.
 
- output.c / output.h / ncurses.c  encapsulates most of the
ncurses-specific stuff for easy porting.
 
- map.c ... Map_Scanfor was designed to scan for any interesting parameter
inside maps, but are currently not used for much besides finding a good
place for a corridor. map.c contains all routines that should be visible
outside map generation. GenerateCorridor currently uses a hit-and-miss
approach (copy map to temp_map -> run generatecorridor -> if grind to a
halt, try again -> if not copy temp_map to map) and can be improved much,
I suppose.
 
- types.h defines own UBYTE, BYTE, ULONG, LONG etc. types, also for easy
porting.
 
- I'm currently undecided on what's the best approach: Defining "id" in
all object structures or defining it in the "node" structure. It must be
defined in any case, so we can find a specific object that we don't have a
pointer to by some FindObject routine (to avoid passing a million pointers
around). (started, see FindWindow in output.c)
 
- writing colored strings to the screen is currently accomplished by
calling WriteStr as usual, with strings of the format "<White>Bob
<Yellow>the Big" ... WriteStr does not do %s and such expansion, so
sprintf() ing a string before passing it to WriteStr is a good thing. Look
to the bottom of player.c for an example.

Latest revision as of 09:06, 4 October 2008

Attention! The reason that these articles were not transferred to RogueBasin and are in danger of being lost for good is because the admins could not secure the author's permission for being transferred from the old site to the new one. IF YOU ARE AN AUTHOR: Please let me know on this page that you give your permission. If you do that, I can pull the articles from the archive pages and integrate them into the wiki.

List of authors who have given permission:

  * Steve Segreto (Permission Granted) N.B. My article is extremely dated by now and probably useless to most everybody

List of authors who have not given permission (alphabetical order by first name):

  * Adam Szczepaniak
  * Andrew Collins
  * Brian Bucklew
  * Brian Robinson
  * Christopher J Martens
  * Damian Bentley
  * Dana Larose
  * Darren Hebden
  * Erik_Inge_Bols???_knan_mo.himolde.no
  * Erno Tuomainen
  * Esa Ilari Vuokko
  * Gero Kunter
  * Gwidon S. Naskrent
  * Isaac Kuo
  * Jakub Debski
  * James Burton
  * Jim Babcock
  * Joseph Swing
  * Josh Tippets
  * Judy Wray
  * Jurriaan Kalkman
  * Kenneth Power
  * Kornel Anubis Kisielewicz
  * Matthias E. Giwer
  * Michael Blackney
  * Michael Heinich
  * Mike Anderson
  * Mixi Lauronen
  * Peter Farabaugh
  * R.Alan Monroe
  * Radomir 'The Sheep' Dopieralski
  * Rick Carson
  * Ross Morgan-Linial
  * Sean Middleditch
  * Simon McGregor
  * Steve Segreto
  * Stu George
  * Thomas Gilray
  * Unknown ( Direct Screen Output.txt )

Here is a list of articles from the old roguelikedevelopment.org that I am trying to salvage:

Cannot Find:

  * Roguelike Step by Step Guide.txt
  * Recursive randomized world-map generation Phillip C. Culliton [pcullit@hotmail.com].txt

TODO:

  * Add a link to blah.tar.gz
  * add a link to name.zip for Random Name Generation Using Regular Expressions

Found Articles:

  * User:Duerig/Archive0
  * User:Duerig/Archive1
  * User:Duerig/Archive2
  * User:Duerig/Archive3
  * User:Duerig/Archive4
  * User:Duerig/Archive5
  * User:Duerig/Archive6
  * User:Duerig/Archive7
  * User:Duerig/Archive8
  * User:Duerig/Archive9