Page 1 of 5

Dragon Warrior 1 3D Remake using irrWizard...

Posted: Sun Jan 22, 2006 11:04 pm
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!

Posted: Mon Jan 23, 2006 1:24 am
by Guest
That is friggin awesome, I've always been a fan of this game, keep it going :P

Posted: Wed Jan 25, 2006 7:14 am
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. :/

Posted: Thu Jan 26, 2006 1:54 am
by Spintz
I love Dragon Warrior, can't wait to see this playable!

Posted: Thu Jan 26, 2006 4:49 am
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

Posted: Fri Jan 27, 2006 6:07 am
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

Posted: Fri Jan 27, 2006 12:52 pm
by ErUs
have you got a site set up for this yet?

Posted: Fri Jan 27, 2006 10:43 pm
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.

Posted: Fri Jan 27, 2006 11:07 pm
by Spintz
What kind of computer do you have? That last screenshot shows only 8194 polygons, that's not that many!

Posted: Sat Jan 28, 2006 12:25 am
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:

Posted: Sat Jan 28, 2006 3:28 am
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

Posted: Sat Jan 28, 2006 6:03 am
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.

Posted: Sat Jan 28, 2006 7:19 pm
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

Posted: Sat Jan 28, 2006 9:01 pm
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

Posted: Sat Jan 28, 2006 9:14 pm
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