First-person grid-based dungeon-crawler RPG like Wizardry?

If you are a new Irrlicht Engine user, and have a newbie-question, this is the forum for you. You may also post general programming questions here.
Post Reply
thrash242
Posts: 8
Joined: Wed Jun 08, 2011 11:15 pm

First-person grid-based dungeon-crawler RPG like Wizardry?

Post by thrash242 »

I'm looking to make an old-school Wizardry-style game with a modern-ish 3D engine like Etrian Odyssey or any of the other similar games for DS, PSP, or PS3.

I'm wondering how practical it'd be to do this in Irrlicht. I'm not sure how I'd represent maps and level geometry.

I'm thinking I could make a map as a grid and then make several blocks as static meshes and then load them to match the grid map based on the configuration of the walls at that grid square.

Or I could just make the maps normally like in any other 3D game, but I'm not sure how I'd tell the game which blocks are legal for the player to move to, etc.

I don't need animation or anything like that, since characters and monsters would be 2D images. It'd be cool to have nice-looking dynamic lighting and such for atmosphere, though.

Any ideas? Pretty much all the resources I can find for Irrlicht are for making FPS or third-person action games with premade levels.

I just want to make sure this is semi-practical to do with Irrlicht before I start. I don't want to spend weeks or months learning my way around the engine only to realize it's not the best tool for the job. I have very little experience with 3D graphics programming, so sorry for any dumb questions.
Radikalizm
Posts: 1215
Joined: Tue Jan 09, 2007 7:03 pm
Location: Leuven, Belgium

Post by Radikalizm »

Irrlicht is very general-purpose, so yes you could use it to build this game
Game logic and rules are completely up to you though since irrlicht is not a game engine, but this shouldn't be a problem I suppose

About your map issue, I'm not familiar with the games you mentioned, but a tile-based solution is completely possible and has been done before with good results
thrash242
Posts: 8
Joined: Wed Jun 08, 2011 11:15 pm

Post by thrash242 »

Here are some videos showing what I'm going for.

This one is from the latest Wizardry game:
http://www.youtube.com/watch?v=G5xKt_M8zGQ&t=56s

This demo was apparently done in Irrlicht, but I can't find any info about it:
http://www.youtube.com/watch?v=pYiCB8DZOFE

I assumed it'd be possible, I was more wondering how I'd go about doing this, since it's pretty unusual to build maps out of blocks these days. I wonder if I'd have to make my own grid-based editor or what.
KP84
Posts: 44
Joined: Thu Feb 24, 2011 5:08 am

Post by KP84 »

Irrlicht is a 3D rendering engine. Wich means you can create everything then uses 3D graphics. for sound add irrKlang or another sound engine.
You can create applications like, games, 3d editors, normal applications with your own IDE components and even things like an OS.

As Radikalizm said, the logic is up to you. Irrlicht does not narrow the functionallity of c++. It is even cross-platform.

To create a 'map' you could do that by a 2d image wich you read in, build the scene and play 8) . Most control on how your map is.

Your application could create the map for you too. More maps, no hassle.

Also you could create a scene using an application like blender and create a map build by your app.

Tutorial 3 and 23 are the ones I would take a look at. They build an ISceneNode with a semi-procedural mesh.

pseudo-pseudo-code

Code: Select all

BLOCKTYPE_SPACE 0
BLOCKTYPE_WALL 1
BLOCKTYPE_WATER 2

bitmap (or something)
11111111
10000001
11111101
12222101
12212101
10011101
10000001
11111111

if( color == BLOCKTYPE_SPACE )
{
  addstripGround(const HeightMap &hm, colour_func cf, u16 y0, u16 y1, u32 bufNum)// from tut23, just idea, principle is clear I think
} else
if( color == BLOCKTYPE_WALL )
{
  addstripWall(const HeightMap &hm, colour_func cf, u16 y0, u16 y1, u32 bufNum) 
} else
if( color == BLOCKTYPE_WATER )
{
  addstripGround(const HeightMap &hm, colour_func cf, u16 y0, u16 y1, u32 bufNum)
  addstripWater(const HeightMap &hm, colour_func cf, u16 y0, u16 y1, u32 bufNum)
}
Last edited by KP84 on Thu Jun 09, 2011 10:06 am, edited 1 time in total.

Code: Select all

// if you think real code is always interresting, read this line again
Radikalizm
Posts: 1215
Joined: Tue Jan 09, 2007 7:03 pm
Location: Leuven, Belgium

Post by Radikalizm »

I see now what you want to achieve (couldn't look into the videos last night because of bandwidth issues)

This is very much doable, and you can handle this using different approaches

The method I would suggest is to completely model your map and partition it later on using a grid (could be 2D or 3D according to your requirements)

If you make sure your map is proportional to the size of a grid unit this can become fairly easy, and movement can then be easily constricted to your grid, and even collision can be handled very easily by marking a piece of your grid as non-accessible by the player (which removes the need for other more complex collision checks)

A tile or box-based approach could work too, but this would require some more complex mesh management (ie. mesh batching to reduce draw calls) and would be harder to get a visually appealing result, since you'd need a good variety of decent procedural textures/materials to avoid texture repetition or ugly texture seams
Post Reply