gbadev.org forum archive

This is a read-only mirror of the content originally found on forum.gbadev.org (now offline), salvaged from Wayback machine copies. A new forum can be found here.

Beginners > Trouble with sprites

#16168 - Darmstadium - Tue Feb 10, 2004 3:18 am

I'm having a lot of trouble getting sprites I make to show up right. I convert my pcx image to a header file using dovoto's pcx2sprite. My sprite shows up as a bunch of garbage. Here's my code and the header that contains my sprite and the palette:

source.cpp
Code:

#include "gba.h"
#include "dispcnt.h"
#include "spriteMan.h"
#include "keypad.h"
#include "sprite.h"

void InitializeSprites()
{
   u16 loop;
   for(loop = 0; loop < 128; loop++)
   {
      sprites[loop].attribute0 = 160;
      sprites[loop].attribute1 = 240;
   }
}

void CopyOAM()
{
   u16 loop;
   u16* temp = (u16*)sprites;
   for(loop = 0; loop < 512; loop++)
      OAM[loop] = temp[loop];
}

void WaitForVsync()
{
   while((volatile u16)REG_VCOUNT != 160){}
}

int main()
{
   u16 loop;
   SetMode(OBJ_MAP_1D | MODE_1 | OBJ_ENABLE);
   for(loop = 0; loop < 256; loop++)
      OBJPaletteMem[loop] = spriteManPal[loop];
   InitializeSprites();
   sprites[0].attribute0 = COLOR_256 | TALL | 60;
   sprites[0].attribute1 = SIZE_32 | 60;
   sprites[0].attribute2 = 0;
   
   for(loop = 0; loop < 256; loop++)
      OAMData[loop] = spriteManData[loop];
   while(1)
   {
      WaitForVsync();
      CopyOAM();
   }
   return 0;
}



spriteMan.h
Code:


const u16 spriteManData[] = {
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0000, 0xFF00, 0xFFFF, 0xFFFF, 0xFFFF, 0xFF00, 0xFFFF, 0xFFFF, 0xFFFF,
                    0xFF00, 0xFFFF, 0xFFFF, 0xFFFF, 0xFF00, 0xFFFF, 0xFFFF, 0xFFFF, 0xFF00, 0xFFFF,
                    0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
                    0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
                    0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFF00, 0xFFFF, 0xFFFF, 0xFFFF, 0xFF00, 0xFFFF,
                    0xFFFF, 0xFFFF, 0xFF00, 0xFFFF, 0xFFFF, 0xFFFF, 0xFF00, 0xFFFF, 0xFFFF, 0xFFFF,
                    0xFF00, 0xFFFF, 0xFFFF, 0xFFFF, 0xFF00, 0xFF00, 0xFFFF, 0xFFFF, 0xFF00, 0xFF00,
                    0xFFFF, 0xFFFF, 0xFF00, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
                    0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
                    0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00FF, 0xFFFF, 0xFFFF, 0xFFFF,
                    0x00FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFF00, 0xFF00,
                    0xFFFF, 0xFFFF, 0xFF00, 0xFF00, 0xFFFF, 0xFFFF, 0xFF00, 0xFFFF, 0xFFFF, 0xFFFF,
                    0xFF00, 0xFF00, 0xFFFF, 0xFFFF, 0xFF00, 0xFF00, 0xFFFF, 0xFFFF, 0xFF00, 0xFFFF,
                    0xFFFF, 0xFFFF, 0xFF00, 0xFF00, 0xFFFF, 0xFFFF, 0xFF00, 0xFF00, 0xFFFF, 0xFFFF,
                    0x00FF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
                    0xFFFF, 0xFFFF, 0x00FF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00FF, 0xFFFF, 0xFFFF, 0xFFFF,
                    0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00FF, 0xFFFF, 0xFF00, 0x0000, 0x00FF, 0xFFFF,
                    0xFF00, 0x0000, 0xFF00, 0xFFFF, 0xFFFF, 0xFFFF, 0xFF00, 0xFF00, 0xFFFF, 0xFFFF,
                    0xFF00, 0xFF00, 0xFFFF, 0xFFFF, 0xFF00, 0xFFFF, 0xFFFF, 0xFFFF, 0xFF00, 0xFF00,
                    0xFFFF, 0xFFFF, 0xFF00, 0xFF00, 0xFFFF, 0xFFFF, 0xFF00, 0xFFFF, 0xFFFF, 0xFFFF,
                    0xFF00, 0xFF00, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00FF, 0xFFFF,
                    0x0000, 0xFFFF, 0x00FF, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
                    0x00FF, 0xFFFF, 0xFF00, 0xFFFF, 0x00FF, 0xFFFF, 0xFF00, 0xFFFF, 0xFFFF, 0xFFFF,
                    0xFFFF, 0xFFFF, 0x00FF, 0xFFFF, 0xFF00, 0xFFFF,};

const u16 spriteManPal[] = {
                    0x0802, 0x0802, 0x0802, 0x0802, 0x0802, 0x0802, 0x0802, 0x0802, 0x0802, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0004, 0x0000, 0x0421, 0x0421, 0x0842, 0x0842, 0x0C63, 0x0C63, 0x1084,
                    0x1084, 0x14A5, 0x14A5, 0x18C6, 0x18C6, 0x1CE7, 0x1CE7, 0x2108, 0x2108, 0x2529,
                    0x2529, 0x294A, 0x294A, 0x2D6B, 0x2D6B, 0x210C, 0x2108, 0x2529, 0x2529, 0x294A,
                    0x294A, 0x2D6B, 0x3DEF, 0x4210, 0x4210, 0x4631, 0x4631, 0x4A52, 0x4A52, 0x4673,
                    0x4671, 0x5294, 0x5294, 0x56B5, 0x56B5, 0x5AD6, 0x5AD6, 0x5EF7, 0x5EF7, 0x6318,
                    0x6318, 0x6739, 0x6739, 0x6B5A, 0x6B5A, 0x6F7B, 0x6F7B, 0x6318, 0x6318, 0x6739,
                    0x6739, 0x6B5A, 0x6B5A, 0x6F7B, 0x6F7B, 0x0004, 0x0000, 0x0421, 0x0421, 0x0842,
                    0x0842, 0x0C63, 0x0C63, 0x1084, 0x1084, 0x14A5, 0x14A5, 0x18C6, 0x18C6, 0x1CE7,
                    0x1CE7, 0x3188, 0x318C, 0x35AD, 0x35AD, 0x39CE, 0x39CE, 0x3DEF, 0x2D6B, 0x318C,
                    0x318C, 0x35AD, 0x35AD, 0x39CE, 0x39CE, 0x3DEF, 0x3DEF, 0x4210, 0x4210, 0x4E31,
                    0x4E33, 0x4A52, 0x4A52, 0x4E73, 0x4E73, 0x5294, 0x5294, 0x56B5, 0x56B5, 0x5AD6,
                    0x5AD6, 0x5EF7, 0x5EF7, 0x739C, 0x739C, 0x77BD, 0x77BD, 0x7BDE, 0x7BDE, 0x7FFF,
                    0x7FFF, 0x739C, 0x739C, 0x77BD, 0x77BD, 0x7BDE, 0x7BDE, 0x7FFF, 0x7FFF, 0x0004,
                    0x0000, 0x0421, 0x0421, 0x0842, 0x0842, 0x0C63, 0x0C63, 0x1084, 0x1084, 0x14A5,
                    0x14A5, 0x18C6, 0x18C6, 0x1CE7, 0x1CE7, 0x2108, 0x2108, 0x2529, 0x2529, 0x294A,
                    0x294A, 0x2D6B, 0x2D6B, 0x318C, 0x318C, 0x35AD, 0x35AD, 0x39CE, 0x39CE, 0x3DEF,
                    0x3DEF, 0x4210, 0x4210, 0x4631, 0x4631, 0x4A52, 0x4A52, 0x4E73, 0x4E73, 0x5294,
                    0x5294, 0x33F1, 0x0015, 0x0020, 0x3809, 0x7A92, 0x3000, 0x382A, 0x0015, 0x0000,
                    0x3001, 0x3000, 0x3809, 0x0008, 0x0000, 0x000A, 0x000A, 0x33F6, 0x7A88, 0x3000,
                    0x7A8B, 0x3000, 0x0008, 0x0000, 0x0020, 0x0020, 0x3839, 0x33F8, 0x7E33, 0x3000,
                    0x0020, 0x0008, 0x33E7, 0x2122, 0x3000, 0x0001, 0x0020, 0x0000, 0x0002, 0x2800,
                    0x20DA, 0x0000, 0x0000, 0x33F3, 0x2072, 0x21C0,};

#16231 - dagamer34 - Wed Feb 11, 2004 1:12 am

Is your sprite supposed to be 64x32 in dimensions? Because that is what it looks like. But you loop for loading data is off because it is loading for a 16x16 (or 256 like you put) sprite.

Change one of them and it should work. Also, i never did get pcx2gba to work without using either photoshop or paint shop pro so that could be your problem right there.

And check to make sure that your picture is a 16 or 256 color image. That will screw it up completely if its not.
_________________
Little kids and Playstation 2's don't mix. :(

#16320 - Cearn - Thu Feb 12, 2004 11:48 am

spriteManData size= 512 bytes (256 u16s)
512/64= 8= 2*4, which is the correct amount for a 256 color 16x32 sprite, so that checks out.

From the data I gather that the sprite should look like this:
Code:

-------- --------
-------- --------
-------- --------
-******* ********
-******* ********
-------- ********
-------- ********

-******* ********
-******* ********
-******* ********
-******* ********
-******* ********
-*-***** *-******
-*-***** *-******
-******* ********

-*-***** *-******
-*-***** *-******
-******* ********
-*-***** *-******
-*-***** *-******
-******* ********
-*-***** *-**-*--
-*-***** *-**-*--

-******* ********
-*-***** *-**--**
-*-***** *-**--**
-******* ********
-*-***** *-**-***
-*-***** *-**-***
-******* ********
-*-***** *-**-***

I may have missed a pixel or two; the endian-ness always gives me trouble and the columns-count of 10 doesn't exactly help either. Strange looking sprite, though.
If this is what the sprite should look like the problem must be in your code, though I can't really see anything wrong with that atm.

#16323 - yaustar - Thu Feb 12, 2004 2:40 pm

This guy double posted into coding as well. The problem has been fixed, it was due to using a 24 bit palette and the tool just didn't like it.
_________________
[Blog] [Portfolio]