Creating an FPS like Wolfenstein
Couple things.
1. How hard would it be to make an FPS like Wolfenstein (the old one)?
2. What would I need to accomplish this, tool wise?
The current tools I have available are: Genesis 3D, Borland C++ 6, Shadow Realm Model Animator, MilkShape 3D and Paint Shop Pro 7, and the Microsoft DirectX SDK 7. Will these work?
[edited by - masterconjurer on May 30, 2002 10:41:55 PM]
More than enough. To make a game like the original Wolfenstein, all you need is a compiler, and paint program for walls and characters (or a 3d animator program for 3d characters). And lastly a text editor to create the world, since the world is actually made of blocks.
I''ve never worked with Genesis 3D, so I may be wrong, but doesn''t it already have a BSP renderer (Quake like levels)? Then your work is almost zero to make it work as a wolfenstein engine.
If you are going down this path, work hard on the gameplay and AI, since all the other work is already done with Genesis 3D.
---------------------------------------------------------------------------------------
Before I couldn''t spell engineer, now I are one.
I''ve never worked with Genesis 3D, so I may be wrong, but doesn''t it already have a BSP renderer (Quake like levels)? Then your work is almost zero to make it work as a wolfenstein engine.
If you are going down this path, work hard on the gameplay and AI, since all the other work is already done with Genesis 3D.
---------------------------------------------------------------------------------------
Before I couldn''t spell engineer, now I are one.
---------------------------------------------------------------------------------------Before I couldn't spell engineer, now I are one.
What exactly do you mean by using a text editor? What can I do with that ( besides write text )? I can't find my Wolfenstein disk but I think the characters are.....2D? I can't remember. lol. I guess all i need to figure out is how to get the guns to "fire" and how to get a few other things to work, especially making the levels appear on screen.
I'm seriously interested in being an independant Game Designer/Programmer/etc, and making my own games by myself and then offering them to publishers, much like Chris Sawyer, the man behind the Roller Coaster Tycoon series!
[edited by - masterconjurer on May 30, 2002 11:09:44 PM]
I'm seriously interested in being an independant Game Designer/Programmer/etc, and making my own games by myself and then offering them to publishers, much like Chris Sawyer, the man behind the Roller Coaster Tycoon series!
[edited by - masterconjurer on May 30, 2002 11:09:44 PM]
in wold3d all characters are 2d sprites drawn facing 8 different ways for all animations. the world is created by blocks which represent either walkable or unwalkable areas. each block would have a ceiling texure, and a floor texture. blocks that represnet walls only have a single wall texture. the world is drawn using a method called raycasting (see the net for details).
if you want to implement something quickly. do the game as an overhead game (esstenially wolf3d/doom/etc are just fancy first person versions of gauntlet). you will begin to see how smart the developers of wolf3d were at cutting corners (the best developers know which can be cut and still get the desired result). i think all collision detection with the world was only done using the 2d tile representation. so no need to wrroy about complex math there. and since the world was tiles/blocks and no such thing as a non 90 degree intersection of walls, it simplfies drawing as well.
just draw the ceiling and floor as skewed textures. walls are drawing using the same concept.
the reason you use a text editor is, you just put different single letters/numbers to represent what is located at that tile. since the entire level used the same floor/ceiling texture you dont worry about setting that in yoru level data. you merely place the items and enimy positions. then you can use different letters for what texture a wall should have (all textures would be aplied to the entire cube, so no need to deal with what each face has on it). if you cant find your disks, download the sharware version.
simple level:
.=empty blcok
a=wall texture 1
b=wall texture 2
c=wall texture 3
q=monster type 1
w=monster type 2
k=item type 1
o=door requiring key type 1
O=item key type1
j=normal door
S=player start
granted you would make a slightly large level then that, but you get the idea.
if you want to implement something quickly. do the game as an overhead game (esstenially wolf3d/doom/etc are just fancy first person versions of gauntlet). you will begin to see how smart the developers of wolf3d were at cutting corners (the best developers know which can be cut and still get the desired result). i think all collision detection with the world was only done using the 2d tile representation. so no need to wrroy about complex math there. and since the world was tiles/blocks and no such thing as a non 90 degree intersection of walls, it simplfies drawing as well.
just draw the ceiling and floor as skewed textures. walls are drawing using the same concept.
the reason you use a text editor is, you just put different single letters/numbers to represent what is located at that tile. since the entire level used the same floor/ceiling texture you dont worry about setting that in yoru level data. you merely place the items and enimy positions. then you can use different letters for what texture a wall should have (all textures would be aplied to the entire cube, so no need to deal with what each face has on it). if you cant find your disks, download the sharware version.
simple level:
.=empty blcok
a=wall texture 1
b=wall texture 2
c=wall texture 3
q=monster type 1
w=monster type 2
k=item type 1
o=door requiring key type 1
O=item key type1
j=normal door
S=player start
aaaaaaaaa.aqqa.aa.a..b.aaja..aaaa.....Saabb.ajaaawo.bwOaaaaaaaaa
granted you would make a slightly large level then that, but you get the idea.
Actually, they don''t face 8 directions (at least, not in the version of Wolfie I find myself playing...), only 1. You can''t sneak up behind them.
The technique is Raytracing, not casting, IIRC. Given a camera point, you send out ''rays'' in every direction, and then draw based on where they intersect with the world.
Another wolfie game would be extremely sweet. Just make sure you can texture the ceiling and floor diffently on each level... trying to make ''outdoor'' levels where your ceiling is a grey stone kinda kills the realism a little...
Superpig
- saving pigs from untimely fates
- sleeps in a ham-mock at www.thebinaryrefinery.cjb.net
The technique is Raytracing, not casting, IIRC. Given a camera point, you send out ''rays'' in every direction, and then draw based on where they intersect with the world.
Another wolfie game would be extremely sweet. Just make sure you can texture the ceiling and floor diffently on each level... trying to make ''outdoor'' levels where your ceiling is a grey stone kinda kills the realism a little...
Superpig
- saving pigs from untimely fates
- sleeps in a ham-mock at www.thebinaryrefinery.cjb.net
Richard "Superpig" Fine - saving pigs from untimely fates - Microsoft DirectX MVP 2006/2007/2008/2009
"Shaders are not meant to do everything. Of course you can try to use it for everything, but it's like playing football using cabbage." - MickeyMouse
In wolf3D, ALL versions, the main characters have 8 directions. These are: the brown soldier, the blue SS guard, the dog, the zombie and the white officer.
I think Wolf3D is raycasting and not raytracing, because raytracing means there are reflections and such.
Here's a tutorial + source code on making a wolf3d-like engine (without 2D sprites however). But instead of doing X and Y seperatly for finding blocks as he suggests, you could use a faster 2D DDA algorithm instead (do a google search on this).
[EDIT] argh! the link, I forgot the link: http://www.sbdev.pwp.blueyonder.co.uk/ray.htm
[edited by - Lode on May 31, 2002 6:30:09 AM]
I think Wolf3D is raycasting and not raytracing, because raytracing means there are reflections and such.
Here's a tutorial + source code on making a wolf3d-like engine (without 2D sprites however). But instead of doing X and Y seperatly for finding blocks as he suggests, you could use a faster 2D DDA algorithm instead (do a google search on this).
[EDIT] argh! the link, I forgot the link: http://www.sbdev.pwp.blueyonder.co.uk/ray.htm
[edited by - Lode on May 31, 2002 6:30:09 AM]
quote: Original post by superpig
The technique is Raytracing, not casting, IIRC. Given a camera point, you send out ''rays'' in every direction, and then draw based on where they intersect with the world.
No, I am pretty sure it is raycasting .
Raytracing works by tracing out the paths taken by light rays - and since many of these light rays might never hit the camera it is very slow, but yields photorealistic results.
Raycasting works by throwing rays out from the camera and seeing where they intersect the world. It is a lot quicker than raytracing, but doesn''t look all that great.
As for the technique, check out for Tricks of the Game Programming Gurus . (not to be confused with Tricks of the Windows Game Programming Gurus ) It is quite an old book, but it covers raycasting and it comes with source code for a raycasting engine.
Of course, raycasting is a pretty outdated technique. I suggest a simple OpenGL or DirectX engine, using a flat ceiling and floor, and simple textured boxes for the walls, textured quads for the characters. You could get something as simple as wolf3d without having to faff around with complicated stuff like BSP trees or PVS etc, and it would probably look a lot better and run a lot faster than the original.
Wolf3D uses neither raycasting or raytracing as both would be totally unrealistic solutions to a realtime game (especially when you consider the machines it was intended to run on).
Once each vertex for a particular polygon has been transformed to screen coords, the particular texture is just stretched into the four screen coords (for a quad).
This is achieved by mapping each pixel inside this screen area to the texture (rasterisation phase in software).
But its true that there is no point in you writing the rasteriser as you can just use D3D/OGL which does all this for you.
Once each vertex for a particular polygon has been transformed to screen coords, the particular texture is just stretched into the four screen coords (for a quad).
This is achieved by mapping each pixel inside this screen area to the texture (rasterisation phase in software).
But its true that there is no point in you writing the rasteriser as you can just use D3D/OGL which does all this for you.
<a href="http://www.purplenose.com>purplenose.com
quote: Original post by Carrot
Wolf3D uses neither raycasting or raytracing as both would be totally unrealistic solutions to a realtime game (especially when you consider the machines it was intended to run on).
Wolf3D most DEFINATELY used raycasting, but what most people failed to realise is that it was done in 2D. It raycasts in the map-plane, rendering vertical "slivers" of textures when an intersection is encountered.
That''s why you can''t tilt up or down in Wolf3D - the engine cannot handle non-parallel slivers.
It's only funny 'till someone gets hurt.And then it's just hilarious.Unless it's you.
WOLF3D used raycasting mate. Everything in it was 3D. All you need for a level is:
unsigned char Lavel[Width][Height];
each value represents a texture. Player has a xpos,ypos,anglefacing. Then you have a ray for every pixel across the screen ( ie 640 if 640x480x16 res). U then extend a ray until its object in array ( ie 0 means nothing so ray can go thought it). Then using simple maths find out when on wall it hit and draw the height of the wall depending on the distance of the ray. Sorted mated. Go to google.com and Raycasting+Simon Brown and there is an excellent tutorial.
hope this helped WizHarD
unsigned char Lavel[Width][Height];
each value represents a texture. Player has a xpos,ypos,anglefacing. Then you have a ray for every pixel across the screen ( ie 640 if 640x480x16 res). U then extend a ray until its object in array ( ie 0 means nothing so ray can go thought it). Then using simple maths find out when on wall it hit and draw the height of the wall depending on the distance of the ray. Sorted mated. Go to google.com and Raycasting+Simon Brown and there is an excellent tutorial.
hope this helped WizHarD
who is it that keeps on nicking WizHarD name !! :P
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement
Recommended Tutorials
Advertisement