Allegro .dat files...

Started by
6 comments, last by Llamasoft.net 23 years, 9 months ago
Hey all, I was just wondering... i've been trying to use allegro's datafiles in my latest game, but the trouble is they only seem to work in C, and i'm coding in C++, classes and all... I really need to use the datafiles, i've got it all set up ok (the .dat file and loading routines are fine), but when I try and compile it (with djgpp), i get the error: ANSI C++ forbids implicit conversion from 'void*' in argument passing So, i tried casting all the files, to BITMAP*, SAMPLE* etc, (that seemed incredibely ambitious to me ) and it compiles, but when i run the program it immediately crashes with all sorts of 'signal errors'... Basically then, can I use the Allegro datafile system in c++? Cheers, Nick - Head Designer, Llamasoft.net -- Visit our website... Llamasoft.net Games, goodies and ingenuity Edited by - Llamasoft.net on 7/13/00 2:24:15 PM
Nick - Head Designer, Llamasoft.net--Visit our website...Llamasoft.netGames, goodies and ingenuity
Advertisement
The datafiles should work with DJGPP C++... You're doing it the right way (casting the void pointers). Maybe it's not the casting that's the problem? Can you post some of the code where you use the datafiles? Maybe you're loading them the wrong way? Do you check the return value of load_datafile() (lots of questions )?

- Muzzafarath

Mad House Software
The Field Marshals

Edited by - Muzzafarath on July 13, 2000 4:19:38 PM
I'm reminded of the day my daughter came in, looked over my shoulder at some Perl 4 code, and said, "What is that, swearing?" - Larry Wall
Muzzy to the rescue again, eh?
Ok, instead of posting some of my code, I wrote a quick simple program that should get 320*240, wait for a key press, load the bitmap from the datafile, wait again, then quit...
The code is this:

            #include <stdlib.h>#include <stdio.h>#include "allegro.h"#include "fileindex.h"  //This is where the #defines the grabber made are...int main(){	DATAFILE *data;	PALLETE main_pallete;		allegro_init();	install_keyboard();	data = load_datafile("shooting.dat");	if (!data)  //Did it screw up?	{		printf("Uh oh!");		allegro_exit();		return 0;	}//Dunno if that would work, don't usually do much error checking yet	set_gfx_mode(GFX_AUTODETECT, 320, 240, 0, 0);	set_pallete(main_pallete);	readkey(); //just wait so we can decide when to blit the bitmap...	blit((BITMAP*)data[WELCOME].dat, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);	readkey();	unload_datafile(data);	return 0;}            


Ok, this seems to work, to some extent (so i'll go back through my code and make sure it's all the same). Now a new problem (and one that I always thought might occur...), the pallete for the bitmap is wrong . As you told me in another post (cheers again ) when we load a bitmap, we must give it a pallete too... i've got all that fine now, and normally make all my .bmps use one pallete... the trouble using the datafile seems to be that when we load the datafile (and, subsequently the bitmaps, sounds, etc in it), we can't give the bitmaps a pallete, if you see what I mean . So, I assume we give the bitmaps in the .dat a pallete when we make the .dat file... enter question 2: How?

Nick - Head Designer, Llamasoft.net

--
Visit our website...

Llamasoft.net
Games, goodies and ingenuity

Edited by - Llamasoft.net on July 13, 2000 4:56:58 PM

Edited by - Llamasoft.net on July 13, 2000 4:57:51 PM
Nick - Head Designer, Llamasoft.net--Visit our website...Llamasoft.netGames, goodies and ingenuity
When you are creating the .dat file, one of the data types you can import to it is a palette. Just create a pal in the .dat dile and then you can select the bitmap from which to get the pal from. Then when you program your game, use the pal from the .dat file to set the palette.


You muse IMPLICITLY cast your data from the data files to the correct form like you did in your example program you posted.

blit((BITMAP*)data[WELCOME].dat, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);

if you leave off the BITMAP* it wont compile.

You must ALWAYS ALWAYS ALWAYS error check your programs. If you dont then that is the sure fire way to have alot of things go wrong.


"Now go away or I shall taunt you a second time"
- Monty Python and the Holy Grail
themGames Productions

Cheers ncsu121978, I thought it might be something simple like that
And yeah, I do get around to error checking in my programs, but i''m fairly new to c++ and prefer to just get something on screen before I do... and since i''ve never used datafiles before, I didn''t know how to check if it had failed or not, thassal
Cheers for the help you two!

Nick - Head Designer, Llamasoft.net

--
Visit our website...

Llamasoft.net
Games, goodies and ingenuity
Nick - Head Designer, Llamasoft.net--Visit our website...Llamasoft.netGames, goodies and ingenuity
ncsu is right. You can import the palette into the datafile as a "palette" object and then just set_palette((PALETTE)data[PAL].dat). Or maybe it was set_palette((RGB*)data[PAL].dat)?

>> Muzzy to the rescue again, eh? <<



- Muzzafarath

Mad House Software
The Field Marshals

Edited by - Muzzafarath on July 14, 2000 6:51:04 AM
I'm reminded of the day my daughter came in, looked over my shoulder at some Perl 4 code, and said, "What is that, swearing?" - Larry Wall
also, instead of calling, unload_datafile, you can just call, allegro_exit() and it unloads, un-installs anything that you have installed.

JoeMont001@aol.com www.polarisoft.n3.net
My HomepageSome shoot to kill, others shoot to mame. I say clear the chamber and let the lord decide. - Reno 911
Does it really unload all datafiles loaded? How does it keep track of all the datafiles? A linked list? The readme doesn't mention unloading all datafiles.

Btw, you don't have to call allegro_exit() either, Allegro installs it as an atexit() thingy so it will be called automatically when main() returns (or when exit() is called).

Edited by - Muzzafarath on July 14, 2000 12:22:54 PM
I'm reminded of the day my daughter came in, looked over my shoulder at some Perl 4 code, and said, "What is that, swearing?" - Larry Wall

This topic is closed to new replies.

Advertisement