Dragon Warrior 1 3D Remake using irrWizard...

Announce new projects or updates of Irrlicht Engine related tools, games, and applications.
Also check the Wiki
jclins
Posts: 86
Joined: Thu Jan 01, 2004 10:29 pm
Location: Texas, USA

Dragon Warrior 1 3D Remake using irrWizard...

Post by jclins »

Hi all!

I've just started putting together a DW 1 3D remake using irrWizard framework.

It's not ready for the public yet. I've only managed to model one town (it took me two days to do -- the trees took many hours to do, making textures from scratch, modeling walls, buildings, screwing up and starting over many times, etc.).

I've written enough code to allow one to walk around the town using the 1st person camera (I plan to add in a 3rd person cam later). None of the NPCs of the town are modelled yet. I mainly have enough to see how the sizes/proportion of the model would look like in game.

1. very early model of brecconary town:

http://i11.photobucket.com/albums/a175/ ... _model.jpg

2. a bit later version of brecconary town:

http://i11.photobucket.com/albums/a175/ ... normal.jpg

3. top rendered view of brecconary town model in latest version:

http://i11.photobucket.com/albums/a175/ ... l_rend.jpg

4. top wireframe view of brecconary town model in latest version:

http://i11.photobucket.com/albums/a175/ ... l_wire.jpg

5. perspective rendered view of brecconary town model in latest version:

http://i11.photobucket.com/albums/a175/ ... el_ren.jpg

6. perspective wireframe view of brecconary town model in latest version:

http://i11.photobucket.com/albums/a175/ ... el_wir.jpg

7. in-game view 1 from town entrance:

http://i11.photobucket.com/albums/a175/ ... ingame.jpg

8. in-game view 2 looking at the weapon shop:

http://i11.photobucket.com/albums/a175/ ... _wpn_s.jpg

9. in-game view 3 looking at the inn:

http://i11.photobucket.com/albums/a175/ ... me_inn.jpg

10. picture reference used to model town:

http://www.planetdw.com/maps/brecconary.gif

Man, I'm exhausted. I had a lot of fun putting the model and code together. It's a wonderful feeling to actually walk through your model after you labored on it for days in the game. Many things to everyone on the irrlicht forum. A lot of my problems (modeling, coding) were answered by searching through the forum.

I hope everyone enjoy the screen captures -- that took some time too! :)

UPDATE:

I've added a static quick stat screen and removed the irrWizard's default healthbar. The code for the quick stat screen is based on the healthbar code:

http://i11.photobucket.com/albums/a175/ ... _quick.jpg

01-23-2006:

- ripped title screen music
- ripped brecconary town music
- ripped overworld music

Now I just need to figure out which audio API to use!
Last edited by jclins on Tue Jan 24, 2006 5:46 am, edited 2 times in total.
Guest

Post by Guest »

That is friggin awesome, I've always been a fan of this game, keep it going :P
jclins
Posts: 86
Joined: Thu Jan 01, 2004 10:29 pm
Location: Texas, USA

Post by jclins »

Thanks, Guest. I plan to complete it one way or another. But it will take plenty of time.

Modeling is a pain! I have started modeling the green merchant of brecconary town. I tried 24x24x24 with 16x16x16 square. That looked like crap after I converted to poly mesh. When you delete a square, it's hollow inside. That was not what I wanted.

Then I tried 1x1x1 with 1x1x1 square. Then using the array feature, I was able to create 16 x 16 x 16 sets of squares. I used a picture of the green merchant sprite as a guide. It took me a while to get a perfect bit-by-bit shot.

It became quite easy to select and delete away square-by-square until I finally have an exact pixel-by-pixel to square-by-square representation of the green merchant in 3D!

1. 2D sprite of green merchant:

http://i11.photobucket.com/albums/a175/ ... ant_2d.jpg

2. 3D model of green merchant (front view):

http://i11.photobucket.com/albums/a175/ ... t_view.jpg

3. 3D model of green merchant (perspective view, wireframe):

http://i11.photobucket.com/albums/a175/ ... p_view.jpg

The 3D model doesn't look like much right now. As you can tell, the model doesn't have much depth to it. I plan to add more squares to make the merchant more "round."

Any ways, I'm exhausted...off to bed now. :/
Spintz
Posts: 1688
Joined: Thu Nov 04, 2004 3:25 pm

Post by Spintz »

I love Dragon Warrior, can't wait to see this playable!
Image
jclins
Posts: 86
Joined: Thu Jan 01, 2004 10:29 pm
Location: Texas, USA

Post by jclins »

Spintz -- The great Spintz! Howdy! Thanks for the encouragement!

I went all out today and model not one but four new models! This completes the brecconary town inhabitants except for the gray shielded knight (which I can't seem to get him to turn and face the camera!):

blue male villager:

http://i11.photobucket.com/albums/a175/ ... llager.jpg

3D blue male villager:

http://i11.photobucket.com/albums/a175/ ... ger_3d.jpg

gray sage:

http://i11.photobucket.com/albums/a175/ ... y_sage.jpg

3D gray sage:

http://i11.photobucket.com/albums/a175/ ... age_3d.jpg

blue female villager:

http://i11.photobucket.com/albums/a175/ ... llager.jpg

3D blue female villager:

http://i11.photobucket.com/albums/a175/ ... ger_3d.jpg

red knight with shield:

http://i11.photobucket.com/albums/a175/ ... shield.jpg

3D red knight with shield:

http://i11.photobucket.com/albums/a175/ ... eld_3d.jpg

Huge overworld map (source: http://www.rpgclassics.com/shrines/nes/dw1/):

http://i11.photobucket.com/albums/a175/ ... world2.gif
jclins
Posts: 86
Joined: Thu Jan 01, 2004 10:29 pm
Location: Texas, USA

Post by jclins »

Well, I've been messing around with the code a bit today. I found more problems than anything good:

1. Eck! Just realize I've been getting the following messages whenever I run the game:

Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.
Found no matching material for Group in 3ds file.

Hmmmm....exactly 26. Where else have I seen that number?

2. Also, the frame rate really aren't that good right now (0-7 fps). I think all the polygonal trees in the town are causes major frame drops. I may need to convert the trees into billboards to recover some fps. Anybody with a better idea/solution? :(

UPDATE:

luckymutt's post on the following thread fixed my problem #1:

http://irrlicht.sourceforge.net/phpBB2/ ... file#65682
ErUs
Posts: 165
Joined: Thu Oct 07, 2004 6:13 pm

Post by ErUs »

have you got a site set up for this yet?
jclins
Posts: 86
Joined: Thu Jan 01, 2004 10:29 pm
Location: Texas, USA

Post by jclins »

ErUs - well, no. I don't plan to. I'll post my updates here. The last time I used a free web site, it deleted my account after x number of days not logging in.

I fixed issue #2 from my last post. I switched out all the polygonal trees with billboard trees. Here's the result:

http://i11.photobucket.com/albums/a175/ ... _trees.jpg

The game now runs at 7-30 fps. But it's so ugly now. I will probably need to find an easy way to delete the backface/non-visible sides of all the triangles in the village to further optimize the level. Anybody else have a better suggestion? I'm all ears.
Spintz
Posts: 1688
Joined: Thu Nov 04, 2004 3:25 pm

Post by Spintz »

What kind of computer do you have? That last screenshot shows only 8194 polygons, that's not that many!
Image
jclins
Posts: 86
Joined: Thu Jan 01, 2004 10:29 pm
Location: Texas, USA

Post by jclins »

:oops: Spintz is right. I goofed.

You see, I had many things running (max, vs 2005, fce nes emu -- this little app eats up ~41 cpu time, opera with 8+ pages opened, etc.), when I ran the game. If you looked at the earlier screen captures, you'll see that even with the poly trees and high poly count 17,000+, the frame rate was quite reasonable. I confirmed this when I copied it over to my notebook. Which didn't have anything big running in the background (and way under powered compared to my desktop development pc; notebook 1.2 ghz pentium m with integrated intel graphics tablet pc vs dual AMD 64-bit x2 4200+ dual cores with pci express 256 MB x800 ATI card). The fps result with the poly tree is like it was in the earlier screen captures.

That's what happens when you're tired from work and try to work on your hobby after spending 9+ hours at the office. :shock:

Boy, I'm glad I had a backup of the town with the poly trees. That would've taken some time to re-do.

Okay, I think I've done enough damages with the 3D graphics for one day. I think I'll stick with coding the inventory, adding in fonts, work on the title screen, add in audio, and work on the options screen instead modeling anything for the time being. :cry:
jclins
Posts: 86
Joined: Thu Jan 01, 2004 10:29 pm
Location: Texas, USA

Post by jclins »

We have a title screen now! It's purely visual at this point (i.e. the dragon warrior logo does not animate at the moment, options is not available, credits still shows irrWizard's default).

It took me a while to "convert" the irrWizard's default play, credit, options, and exit into the same font as the DW original title screen. Luckily, there were enough characters in the original DW title screen to copy then paste together the words for credit, options, and exit!

http://i11.photobucket.com/albums/a175/ ... screen.jpg
jclins
Posts: 86
Joined: Thu Jan 01, 2004 10:29 pm
Location: Texas, USA

Post by jclins »

Let there be sound! After many hours, I've finally managed to play the title track using FMOD Ex 4.02.09 sound API.

Here's the class I made (irrWizard doesn't support sound yet) for FMOD (note it's my first attempt at sound so be nice!):

FMODSoundSystem.h:

Code: Select all


#pragma once

#include <fmod.hpp>
#include <fmod_errors.h>

#pragma comment(lib, "fmodex_vc.lib")

using namespace FMOD;

class FMODSoundSystem
{
private:
	FMOD::System      *system;
	FMOD::Sound       *sound;
	FMOD::Channel     *channel;
	FMOD_RESULT       result;
    unsigned int      version;
public:
	FMODSoundSystem(const char *,int,FMOD_INITFLAGS);
	~FMODSoundSystem(void);
	void PlaySound(void);
	void Update(void);
};
FMODSoundSystem.cpp:

Code: Select all

#include "FMODSoundSystem.h"

void ERRCHECK(FMOD_RESULT result)
{
    if (result != FMOD_OK)
    {
//        cout << "FMOD error! (" << result << ") " << FMOD_ErrorString(result) << "\n" << endl;
//        ~FMODSoundSystem();
    }
}

FMODSoundSystem::FMODSoundSystem(const char *name_or_data, int maxchannels, FMOD_INITFLAGS flags)
{
	channel = 0;

    // Create a system object
    result = System_Create(&system);
    ERRCHECK(result);

	// Determine FMOD version
	result = system->getVersion(&version);
    ERRCHECK(result);

    if (version < FMOD_VERSION)
    {
//        cout << "Error!  You are using an old version of FMOD " << version << "x.  This program requires " << FMOD_VERSION << "x\n" << endl;
//        return 0;
    }

	// Initialize FMOD System
	result = system->init(maxchannels, FMOD_INIT_NORMAL, 0);
    ERRCHECK(result);

	// Create Sound
	result = system->createSound(name_or_data, flags, 0, &sound);
    ERRCHECK(result);

	// Set Sound Mode
	result = sound->setMode(FMOD_LOOP_OFF);
    ERRCHECK(result);
}

FMODSoundSystem::~FMODSoundSystem(void)
{
	// shut down sound
	result = sound->release();
	ERRCHECK(result);
}

void
FMODSoundSystem::PlaySound(void)
{
	result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);
	ERRCHECK(result);
}

void
FMODSoundSystem::Update(void)
{
	result = system->update();
	ERRCHECK(result);

	unsigned int ms = 0;
	unsigned int lenms = 0;
	bool         playing = 0;
	bool         paused = 0;
	int          channelsplaying = 0;

	if (channel)
	{
		FMOD::Sound *currentsound = 0;

		result = channel->isPlaying(&playing);
		if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN))
		{
			ERRCHECK(result);
		}

		result = channel->getPaused(&paused);
		if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN))
		{
			ERRCHECK(result);
		}

		result = channel->getPosition(&ms, FMOD_TIMEUNIT_MS);
		if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN))
		{
			ERRCHECK(result);
		}

		channel->getCurrentSound(&currentsound);

		if (currentsound)
		{
			result = currentsound->getLength(&lenms, FMOD_TIMEUNIT_MS);
			if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN))
			{
				ERRCHECK(result);
			}
		}
	}

	system->getChannelsPlaying(&channelsplaying);
}
I initialized FMOD in CGameMenuState.cpp (for some reason, I can't get it to work when the sound file is inside a zip file like media.zip):

Code: Select all

void CGameMenuState::Init(CGameManager * pManager)
{
	// initialise from parent
	CGameState::Init(pManager);

...

	// Initialize music
    //titleMusic = new FMODSoundSystem("media/Music/dw1_title_sound.wav",32,FMOD_HARDWARE);
    titleMusic = new FMODSoundSystem("media/dw1_title_sound.wav",16,FMOD_SOFTWARE);

	CGameState::FadeInOut(pManager);
}

I play & update the music in the Update() in CGameMenuState.cpp:

Code: Select all

//! Update, game loop for intro state
void CGameMenuState::Update(CGameManager * pManager)
{
	pManager->getDriver()->beginScene(true, true, video::SColor(0,0,0,0));
	pManager->getGUIEnvironment()->drawAll();
	// Play music
	titleMusic->PlaySound();
	titleMusic->Update();
	MouseOver(pManager);
	DisplayMouse(pManager);	
    pManager->getDriver()->endScene();	
}
It sounded like crap when I used the hardware sound with 32 channels versus just using software sound mode with 8/16 channel. Oh, well.
jclins
Posts: 86
Joined: Thu Jan 01, 2004 10:29 pm
Location: Texas, USA

Post by jclins »

I'm currently working on the font for DW1 3D. I found a DW 1 truetype font by Woodus from this website:

http://www.woodus.com/den/fanfics/display.php?cls=font

IrrFontTool did not read it correctly but it works fine under MS Word. I was scratching my head for a while trying to figure out why it displays correctly in MS Word and not under IrrFontTool. When I opened using Font Creator, I instantly see why.

Arial Font (for comparison purposes):

http://i11.photobucket.com/albums/a175/ ... l_font.jpg

Woodus DW1 Font (note how some letters are out of order):

http://i11.photobucket.com/albums/a175/ ... 1_font.jpg

Fixed DW1 Font (yes, original DW1 doesn't have that many characters to fill all of the available font slots):

http://i11.photobucket.com/albums/a175/ ... 1_font.jpg

Original NES DW1 Font:

http://i11.photobucket.com/albums/a175/ ... attern.jpg

After the fix, IrrFontTool was able to recognize and generate the correct bitmap font sheet:

http://i11.photobucket.com/albums/a175/ ... 20_pts.jpg

But that's only half the battle!

Now I'm trying to "fit" it into the irrWizard's framework. It currently supports only irrlicht's static text not the bitmap text generated from IrrFontTool. My first attempt (while it did show up in game) ended up in several access violation runtime errors:

Code: Select all

First-chance exception at 0xe3c04316 in DW1_3D.exe: 0xC0000005: Access violation reading location 0xe3c04316.
First-chance exception at 0x004a01f3 in DW1_3D.exe: 0xC0000005: Access violation reading location 0x00000124.
First-chance exception at 0x1c88f9d4 in DW1_3D.exe: 0xC000001E:  An attempt was made to execute an invalid lock sequence.
First-chance exception at 0x7c93784f in DW1_3D.exe: 0xC0000005: Access violation reading location 0x00000004.
Unhandled exception at 0x7c93784f in DW1_3D.exe: 0xC0000005: Access violation reading location 0x00000004.
The program '[460] DW1_3D.exe: Native' has exited with code -1073741819 (0xc0000005).
Boy, does it get interesting as one digs deeper and deeper. :D
area51
Posts: 338
Joined: Thu Mar 18, 2004 10:20 pm
Location: UK
Contact:

Post by area51 »

A very interesting project, I like the retro title screen. very cool.

Shouldn't you just PlaySound() once and not each game loop? I would have just expected to kick the sound off in the Init() and leave it. (not used FMOD at all though)

Definatly keep posting updates on your progress as this looks a very cool project. :D
________
List of engines
Last edited by area51 on Thu Feb 24, 2011 11:55 pm, edited 1 time in total.
area51
Posts: 338
Joined: Thu Mar 18, 2004 10:20 pm
Location: UK
Contact:

Post by area51 »

..If you get major problems with the sound then I can put the basic SoundManager I created using Audiere back in, and then release that if you're pushed for time with other areas of programming.
________
HONDA CIVIC (THIRD GENERATION) HISTORY
Last edited by area51 on Thu Feb 24, 2011 11:55 pm, edited 1 time in total.
Post Reply