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.

Coding > sprites overwriting background or vice versa

#150752 - yaazz - Tue Feb 12, 2008 12:26 am

Hello, I got my background all working thanks to the help of this forum, but now I have encountered another strange issue.....
I am using the 512x256 metroid background obtained from TONC, and am attempting to draw a sprite over top of it and be able to move each around. The problem is, when I try to use both at the same time, half of the memory for the sprite is overwritten causing the image to be half gibberish, or, if the code to fill the sprite in memory is placed after the code for the background, a bunch of tiles mysteriously disapear..... Is this because they use the same memory addresses? And if so how do I fix this?

Here is my code I appologize for its general sloppiness it will be cleaned up, dont worry! Oh and I know i shouldn't include code, this is just to make it easier to place on a forum for you to compile

Code:

////////////////////////////////////////////////////////////
// Programming The Game Boy Advance
// Chapter 6: Tile-Based Video Modes
// TileMode0 Project
// main.c source code file
////////////////////////////////////////////////////////////
//include the sample tileset/map
#include "brin.h"
#include "brin.c"

//u16 typedef
typedef unsigned short u16;
typedef unsigned int u32;

#include "tanksmall.h"




#define MULTIBOOT int __gba_multiboot;
MULTIBOOT




//define some interrupt registers
#define REG_IME *(u16*)0x4000208
#define REG_IE *(u16*)0x4000200
#define REG_IF *(u16*)0x4000202
#define REG_INTERRUPT *(u32*)0x3007FFC
#define REG_DISPSTAT *(u16*)0x4000004

//create prototype for custom interrupt handler
void MyHandler(void);

//define some interrupt constants
#define INT_VBLANK 0x0001
#define INT_HBLANK 0x0002
#define INT_VCOUNT 0x0004
#define INT_TIMER0 0x0008
#define INT_TIMER1 0x0010
#define INT_TIMER2 0x0020
#define INT_TIMER3 0x0040
#define INT_COM 0x0080
#define INT_DMA0 0x0100
#define INT_DMA1 0x0200
#define INT_DMA2 0x0400
#define INT_DMA3 0x0800
#define INT_BUTTON 0x1000
#define INT_CART 0x2000

//function prototype
void DMAFastCopy(void*, void*, unsigned int, unsigned int);

//defines needed by DMAFastCopy
#define REG_DMA3SAD *(volatile unsigned int*)0x40000D4
#define REG_DMA3DAD *(volatile unsigned int*)0x40000D8
#define REG_DMA3CNT *(volatile unsigned int*)0x40000DC
#define DMA_ENABLE 0x80000000
#define DMA_TIMING_IMMEDIATE 0x00000000
#define DMA_16 0x00000000
#define DMA_32 0x04000000
#define DMA_32NOW (DMA_ENABLE | DMA_TIMING_IMMEDIATE | DMA_32)
#define DMA_16NOW (DMA_ENABLE | DMA_TIMING_IMMEDIATE | DMA_16)

//scrolling registers for background 0
#define REG_BG0HOFS *(volatile unsigned short*)0x4000010
#define REG_BG0VOFS *(volatile unsigned short*)0x4000012

//background setup registers and data
#define REG_BG0CNT *(volatile unsigned short*)0x4000008
#define REG_BG1CNT *(volatile unsigned short*)0x400000A
#define REG_BG2CNT *(volatile unsigned short*)0x400000C
#define REG_BG3CNT *(volatile unsigned short*)0x400000E
#define BG_COLOR256 0x80
#define CHAR_SHIFT 2
#define SCREEN_SHIFT 8
#define WRAPAROUND 0x1

//background tile bitmap sizes
#define TEXTBG_SIZE_256x256 0x0
#define TEXTBG_SIZE_256x512 0x8000
#define TEXTBG_SIZE_512x256 0x4000
#define TEXTBG_SIZE_512x512 0xC000

//background memory offset macros
#define CharBaseBlock(n) (((n)*0x4000)+0x6000000)
#define ScreenBaseBlock(n) (((n)*0x800)+0x6000000)

//background mode identifiers
#define BG0_ENABLE 0x100
#define BG1_ENABLE 0x200
#define BG2_ENABLE 0x400
#define BG3_ENABLE 0x800

//video identifiers
#define REG_DISPCNT *(unsigned short*)0x4000000
#define BGPaletteMem ((unsigned short*)0x5000000)
#define SetMode(mode) REG_DISPCNT = (mode)

//vertical refresh register
#define REG_DISPSTAT *(volatile unsigned short*)0x4000004
#define REG_VCOUNT *(volatile unsigned short*)0x4000006


//object attribute memory state address
#define SpriteMem ((unsigned short*)0x7000000)

//object attribute memory image address
#define SpriteData ((unsigned short*)0x6010000)

//object attribute memory palette address
#define SpritePal ((unsigned short*)0x5000200)

//sprite constants
#define OBJ_MAP_2D 0x0
#define OBJ_MAP_1D 0x40
#define OBJ_ENABLE 0x1000

//attribute 0 stuff
#define ROTATION_FLAG 0x100
#define SIZE_DOUBLE 0x200
#define MODE_NORMAL 0x0
#define MODE_TRANSPARENT 0x400
#define MODE_WINDOWED 0x800
#define MOSAIC 0x1000
#define COLOR_16 0x0000
#define COLOR_256 0x2000
#define SQUARE 0x0
#define TALL 0x4000
#define WIDE 0x8000

//attribute 1 stuff
#define ROTDATA(n) ((n) << 9)
#define HORIZONTAL_FLIP 0x1000
#define VERTICAL_FLIP 0x2000
#define SIZE_8 0x0
#define SIZE_16 0x4000
#define SIZE_32 0x8000
#define SIZE_64 0xc000

//attribute 2 stuff
#define PRIORITY(n) ((n) << 10)
#define PALETTE(n) ((n) << 12)

//sprite structs
typedef struct tagSprite
{
    unsigned short attribute0;
    unsigned short attribute1;
    unsigned short attribute2;
    unsigned short attribute3;
}Sprite,*pSprite;

//create an array of 128 sprites
Sprite sprites[128];


//button identifiers
#define BUTTON_RIGHT 16
#define BUTTON_LEFT 32
#define BUTTON_UP 64
#define BUTTON_DOWN 128
#define BUTTON_A 1
#define BUTTON_B 2

#define BUTTONS (*(volatile unsigned int*)0x04000130)

//define functions
void WaitForVsync(void);
void UpdateSpriteMemory(void);




//some variables
   int backgroundx = 0, backgroundy = 0;
    int n;
    signed short spritex = 10, spritey = 40;
    signed short xdir=1,ydir=1;
    int char_number = 0;
   
////////////////////////////////////////////////////////////
// Function: main()
// Entry point for the program
////////////////////////////////////////////////////////////
int main(void)
{
 
   
    //create a pointer to background 0 tilemap buffer
    unsigned short* bg0map =(unsigned short*)ScreenBaseBlock(31);

    //set up background 0
    REG_BG0CNT = TEXTBG_SIZE_512x256 |(31 << SCREEN_SHIFT);

    //set video mode 0 with background 0
    SetMode(0 | BG0_ENABLE | OBJ_ENABLE | OBJ_MAP_1D);

    for(n=0;n<128;n++)
    {
        sprites[n].attribute0 = 160;
        sprites[n].attribute1 = 240;
    }
   

   
       
    //set up the first sprite
    sprites[3].attribute0 = COLOR_256 | spritey;
    sprites[3].attribute1 = SIZE_32 | spritex;
    sprites[3].attribute2 = char_number;
   

    //copy the palette into the background palette memory
    DMAFastCopy((void*)brinPal, (void*)BGPaletteMem,256, DMA_16NOW);

    //copy the tile images into the tile memory
    DMAFastCopy((void*)brinTiles, (void*)CharBaseBlock(0),brinTilesLen, DMA_16NOW);

    //copy the tile map into background 0
    DMAFastCopy((void*)brinMap, (void*)bg0map, brinMapLen, DMA_16NOW);

    //set the sprite palette
    DMAFastCopy((void*)tankPalette, (void*)SpritePal,256, DMA_16NOW);

    //copy the sprite image into memory
    DMAFastCopy((void*)tankData, (void*)SpriteData,256*2, DMA_16NOW);


//disable interrupts
REG_IME = 0x00;
//point interrupt handler to custom function
REG_INTERRUPT = (u32)MyHandler;
//enable vblank interrupt (bit 4)
REG_IE |= INT_VBLANK;
//enable vblank status (bit 4)
REG_DISPSTAT |= 0x8;
//enable interrupts
REG_IME = 0x01;

//main game loop I know I have to use bios functions to halt this... this is next on the
//list of things to do
while(1)
{};

 
    return 0;
}

////////////////////////////////////////////////////////////
// Function: DMAFastCopy
// Fast memory copy function built into hardware
////////////////////////////////////////////////////////////
void DMAFastCopy(void* source, void* dest, unsigned int count,unsigned int mode)
{
    if (mode == DMA_16NOW || mode == DMA_32NOW)
    {
        REG_DMA3SAD = (unsigned int)source;
        REG_DMA3DAD = (unsigned int)dest;
        REG_DMA3CNT = count | mode;
    }
}

////////////////////////////////////////////////////////////
// Function: UpdateSpriteMemory
// Copies the sprite array into OAM memory
////////////////////////////////////////////////////////////
void UpdateSpriteMemory(void)
{
    int n;
    unsigned short* temp;
    temp = (unsigned short*)sprites;
    for(n = 0; n < 128*4; n++)
        SpriteMem[n] = temp[n];
}

void MyHandler()
{
    u16 Int_Flag;
    u16 x, y;
    u16 color;

    //disable interrupts
    REG_IME = 0x00;

    //backup the interrupt flags
    Int_Flag = REG_IF;
   
    //look for horizontal refresh
    if((REG_IF & INT_VBLANK) == INT_VBLANK)
    {
    //wait for vertical refresh
    //WaitVBlank();

    //D-pad moves background
    if(!(BUTTONS & BUTTON_B))
    {
    if(!(BUTTONS & BUTTON_LEFT))
    {
        spritex--;
    }
    if(!(BUTTONS & BUTTON_RIGHT))
    {
        spritex++;
    }
    if(!(BUTTONS & BUTTON_UP))
    {
        spritey--;
    }
    if(!(BUTTONS & BUTTON_DOWN))
    {
        spritey++;
    }
    }
    else
    {    if(!(BUTTONS & BUTTON_LEFT))
    {
        backgroundx--;
    }
    if(!(BUTTONS & BUTTON_RIGHT))
    {
        backgroundx++;
    }
    if(!(BUTTONS & BUTTON_UP))
    {
        backgroundy--;
    }
    if(!(BUTTONS & BUTTON_DOWN))
    {
        backgroundy++;
    }
    }


    //update sprite position
    sprites[3].attribute0= COLOR_256 | spritey;
    sprites[3].attribute1= SIZE_32 | spritex;




    //wait for vertical refresh
    //WaitVBlank();
    UpdateSpriteMemory();
    //use hardware background scrolling
    REG_BG0VOFS = backgroundy ;
    REG_BG0HOFS = backgroundx ;
    }
   
    //restore the interrupt flags
    REG_IF = Int_Flag;

    //enable interrupts
    REG_IME = 0x01;
}


tanksmall.h
Code:

/**********************************************\
*       tanksmall.h                                   *
*          by dovotos pcx->gba program         *
/**********************************************/
#define  tanksmall_WIDTH   8
#define  tanksmall_HEIGHT  128


const u16 tankData[] = {
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0xBBE0, 0xBC00, 0xBBBB, 0xBBE6, 0x7D96, 0x3400, 0x00CD, 0x844C, 0x4C77,
                    0x0000, 0x0000, 0x0000, 0xA200, 0x0000, 0x0000, 0xE000, 0x4C96, 0x0000, 0x0000,
                    0x4CE0, 0xF0EF, 0x0000, 0x0000, 0x76BB, 0xEAEA, 0x0000, 0xE000, 0x7797, 0xBFCC,
                    0xBBBB, 0xBBBB, 0x0000, 0x009B, 0x5353, 0x002E, 0x0053, 0x53D2, 0x5253, 0x0052,
                    0x004D, 0xF79B, 0xD452, 0x9D4C, 0x9AE0, 0x4C9A, 0x5252, 0xBB4C, 0x0000, 0x0000,
                    0xE9F0, 0x77E3, 0x004D, 0x0000, 0xEAE8, 0xBFE9, 0x004D, 0x0000, 0xEFE3, 0xBFE9,
                    0x0077, 0x0000, 0xCB52, 0xBEEA, 0x009A, 0x0000, 0x5276, 0xBFE9, 0x0076, 0x0000,
                    0x4CC5, 0x70C5, 0x004D, 0x0000, 0x4C4C, 0xCC77, 0xBC76, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xBB00, 0x0000, 0x0000,
                    0x9D00, 0x7D53, 0x4D52, 0xBBBB, 0x5396, 0xE8F6, 0xF0E9, 0xF0EF, 0xBF4C, 0xFEF7,
                    0xF6F6, 0xF6F6, 0x9B4C, 0xEAC5, 0xF6EF, 0xE9EF, 0xA14C, 0xBFE8, 0xE3BE, 0xE2E3,
                    0x0000, 0x0000, 0x59C2, 0x7D58, 0x0000, 0x59E0, 0xCB4C, 0xE9F6, 0xBBE0, 0xCC00,
                    0xEFA2, 0xC553, 0x9A00, 0x529B, 0xF5C5, 0x9BEF, 0x53C5, 0xEFEF, 0xF052, 0x77CD,
                    0xE8F6, 0xF5F5, 0xD277, 0xEF9B, 0x9CF5, 0xC5EF, 0x78C4, 0xEFE2, 0x76E3, 0x58E3,
                    0x9BA1, 0xE9EF, 0x0000, 0xA152, 0xC576, 0x9B4C, 0x00F5, 0x9B4C, 0x9B52, 0x7053,
                    0xBEF6, 0x5353, 0x4C9B, 0x00A8, 0xF0CC, 0xE9EF, 0xEFEF, 0x4C9A, 0xEF77, 0xE9F0,
                    0xF0E9, 0xCBEF, 0xF5EF, 0xBFD3, 0xE294, 0xBEE2, 0xF6E9, 0xE2BF, 0xEAE3, 0xBFE3,
                    0xF0EF, 0xE3E3, 0xE3E9, 0xE9E2, 0xE34C, 0xBFA0, 0x4CBF, 0xBBBB, 0xEFC5, 0xBF52,
                    0x9BA0, 0x52C6, 0x524C, 0xE977, 0xC5C5, 0xD0CB, 0x7CD2, 0x5277, 0x9A4C, 0xC600,
                    0x5353, 0xF052, 0xEFEF, 0x2ECB, 0xE3E2, 0xBFE3, 0xE309, 0x70BF, 0xE3E3, 0xE3E2,
                    0xE3E3, 0x4CE3, 0xE3E2, 0xE3E2, 0xE3E2, 0x2EE9, 0x52BC, 0xBF9B, 0x95BF, 0xBFC5,
                    0xE600, 0x0078, 0xA0A1, 0x53A0, 0xE000, 0xF052, 0xE9EF, 0x5A53, 0x76BB, 0x53CB,
                    0xEFC5, 0x53E9, 0xC476, 0xBFD2, 0xE353, 0xEAE9, 0xCBEF, 0xC477, 0x77A1, 0xEFC5,
                    0xF0C4, 0x9AE2, 0xB859, 0xE977, 0x7000, 0x0070, 0xE953, 0xEFEF, 0x7795, 0x7777,
                    0xE370, 0xE9EF, 0x779A, 0xC552, 0xEFE3, 0xE9EF, 0xF653, 0x527C, 0xC57D, 0xF6CB,
                    0x4DAE, 0xEFF6, 0xE3EF, 0x5252, 0xFDCC, 0xCDF6, 0xC6F0, 0xEAE9, 0xF6E8, 0xE2CB,
                    0xE3E2, 0xE3E2, 0xCAF6, 0xE2E3, 0xBFC5, 0xBEE2, 0xC49B, 0xE2E3, 0xE3E2, 0xE9E2,
                    0xBFF5, 0xE3E3, 0xE3E3, 0xE9BF, 0xE3EF, 0xE2BF, 0xE3E3, 0xE3BF, 0xE9E3, 0xE3E3,
                    0xE3E3, 0xBFE3, 0x524C, 0x4C4C, 0x4C4C, 0x524C, 0xEAEF, 0xEFE9, 0xEAE9, 0xEAE9,
                    0xE3E3, 0xE3E3, 0xE3E9, 0xE9E2, 0xE3E3, 0xE3BF, 0xE3E3, 0xE9BF, 0xE3A2, 0xE3E3,
                    0xBFC5, 0xE3BF, 0xBFE2, 0xBFE3, 0xE8E2, 0x00E3, 0xBEE9, 0xE3E3, 0xBFE3, 0x4CE3,
                    0xC5C4, 0xC5BF, 0xC5BF, 0x4CC4, 0x7776, 0x779B, 0x9B77, 0x9B9B, 0xE9E9, 0xC5E9,
                    0xE9E9, 0xE9E9, 0xE3E3, 0xE3E2, 0xE3E2, 0xE2E9, 0xBEE2, 0xBFE3, 0xBEE3, 0xE2E3,
                    0xBECB, 0xCBE9, 0xE9BF, 0xE2E3, 0xA24C, 0x0000, 0xEF9A, 0xB9F6, 0x53BC, 0x0000,
                    0xF59A, 0xE995, 0xBC00, 0x0053, 0xD34C, 0x9BE3, 0x0000, 0x004D, 0x0000, 0x9B52,
                    0x004D, 0x0000, 0x5200, 0x9A4C, 0x4D00, 0x0000, 0x5300, 0x007E, 0x0000, 0x002E,
                    0x0000, 0x0053, 0x0000, 0x0000, 0x0000, 0x0000, 0x7752, 0xBF77, 0x9BBF, 0xBEBF,
                    0xE3BF, 0xE3BF, 0xB9E3, 0xE3E2, 0x5200, 0xE3E3, 0xE3E3, 0xE3E3, 0x524C, 0xE3E9,
                    0x5200, 0xE3E2, 0x4C4C, 0xE34C, 0xEFE2, 0xBEE2, 0x9A9A, 0xC470, 0x9BE9, 0xBF76,
                    0x0000, 0x4CBF, 0x76A0, 0xC54C, 0x00D3, 0xF600, 0xD1F5, 0x4C00, 0xBF52, 0xBFBF,
                    0xA153, 0xBFBF, 0xB9A1, 0xE9E3, 0xE9BF, 0xBFE3, 0xBF9A, 0xE2E3, 0xE49B, 0xBFE3,
                    0xE3BF, 0xE3E3, 0xE3C5, 0xE9E2, 0xBFBF, 0xE3E3, 0xE3BF, 0xE9BF, 0xBEA1, 0x949B,
                    0xBEC5, 0xB8BE, 0xA176, 0x4C52, 0x70BF, 0x71A7, 0xE9E3, 0x00D3, 0xEA4C, 0xD2E9,
                    0x9B4D, 0x9BBF, 0x7753, 0xBEBF, 0xE3BE, 0xE3E3, 0xE3C4, 0xE8BE, 0xE3BF, 0xE3E2,
                    0xE3BF, 0xE3E3, 0xE39A, 0xE3E2, 0xBFBE, 0xE2E9, 0xBEBE, 0xBFE3, 0xC5BF, 0x52E3,
                    0xBF9B, 0xBFBE, 0x7694, 0x009B, 0xBF4C, 0xA152, 0x0076, 0x0000, 0x7000, 0xE9E9,
                    0x00D2, 0x5300,};

const u16 tankPalette[] = {
                    0x0000, 0x0010, 0x0200, 0x0210, 0x4000, 0x4010, 0x4200, 0x4210, 0x6318, 0x001F,
                    0x03E0, 0x03FF, 0x7C00, 0x7C1F, 0x7FE0, 0x7FFF, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x1800, 0x3000, 0x4C00, 0x6400, 0x7C00, 0x00C0, 0x18C0, 0x30C0, 0x4CC0,
                    0x64C0, 0x7CC0, 0x0180, 0x1980, 0x3180, 0x4D80, 0x6580, 0x7D80, 0x0260, 0x1A60,
                    0x3260, 0x4E60, 0x6660, 0x7E60, 0x0320, 0x1B20, 0x3320, 0x4F20, 0x6720, 0x7F20,
                    0x03E0, 0x1BE0, 0x33E0, 0x4FE0, 0x67E0, 0x7FE0, 0x0006, 0x1806, 0x3006, 0x4C06,
                    0x6406, 0x7C06, 0x00C6, 0x18C6, 0x30C6, 0x4CC6, 0x64C6, 0x7CC6, 0x0186, 0x1986,
                    0x3186, 0x4D86, 0x6586, 0x7D86, 0x0266, 0x1A66, 0x3266, 0x4E66, 0x6666, 0x7E66,
                    0x0326, 0x1B26, 0x3326, 0x4F26, 0x6726, 0x7F26, 0x03E6, 0x1BE6, 0x33E6, 0x4FE6,
                    0x67E6, 0x7FE6, 0x000C, 0x180C, 0x300C, 0x4C0C, 0x640C, 0x7C0C, 0x00CC, 0x18CC,
                    0x30CC, 0x4CCC, 0x64CC, 0x7CCC, 0x018C, 0x198C, 0x318C, 0x4D8C, 0x658C, 0x7D8C,
                    0x026C, 0x1A6C, 0x326C, 0x4E6C, 0x666C, 0x7E6C, 0x032C, 0x1B2C, 0x332C, 0x4F2C,
                    0x672C, 0x7F2C, 0x03EC, 0x1BEC, 0x33EC, 0x4FEC, 0x67EC, 0x7FEC, 0x0013, 0x1813,
                    0x3013, 0x4C13, 0x6413, 0x7C13, 0x00D3, 0x18D3, 0x30D3, 0x4CD3, 0x64D3, 0x7CD3,
                    0x0193, 0x1993, 0x3193, 0x4D93, 0x6593, 0x7D93, 0x0273, 0x1A73, 0x3273, 0x4E73,
                    0x6673, 0x7E73, 0x0333, 0x1B33, 0x3333, 0x4F33, 0x6733, 0x7F33, 0x03F3, 0x1BF3,
                    0x33F3, 0x4FF3, 0x67F3, 0x7FF3, 0x0019, 0x1819, 0x3019, 0x4C19, 0x6419, 0x7C19,
                    0x00D9, 0x18D9, 0x30D9, 0x4CD9, 0x64D9, 0x7CD9, 0x0199, 0x1999, 0x3199, 0x4D99,
                    0x6599, 0x7D99, 0x0279, 0x1A79, 0x3279, 0x4E79, 0x6679, 0x7E79, 0x0339, 0x1B39,
                    0x3339, 0x4F39, 0x6739, 0x7F39, 0x03F9, 0x1BF9, 0x33F9, 0x4FF9, 0x67F9, 0x7FF9,
                    0x001F, 0x181F, 0x301F, 0x4C1F, 0x641F, 0x7C1F, 0x00DF, 0x18DF, 0x30DF, 0x4CDF,
                    0x64DF, 0x7CDF, 0x019F, 0x199F, 0x319F, 0x4D9F, 0x659F, 0x7D9F, 0x027F, 0x1A7F,
                    0x327F, 0x4E7F, 0x667F, 0x7E7F, 0x033F, 0x1B3F, 0x333F, 0x4F3F, 0x673F, 0x7F3F,
                    0x03FF, 0x1BFF, 0x33FF, 0x4FFF, 0x67FF, 0x7FFF,};


brin.h
Code:


//{{BLOCK(brin)

//======================================================================
//
//   brin, 512x256@4,
//   + palette 256 entries, not compressed
//   + 31 tiles (t|f|p reduced) not compressed
//   + regular map (in SBBs), not compressed, 64x32
//   Total size: 512 + 992 + 4096 = 5600
//
//   Time-stamp: 2007-02-16, 14:23:41
//   Exported by Cearn's Usenti v1.7.7
//   (comments, kudos, flames to "daytshen@hotmail.com")
//
//======================================================================

#ifndef __BRIN__
#define __BRIN__

#define brinPalLen 512
extern const unsigned short brinPal[256];

#define brinTilesLen 992
extern const unsigned short brinTiles[496];

#define brinMapLen 4096
extern const unsigned short brinMap[2048];

#endif // __BRIN__

//}}BLOCK(brin)



brin.c
Code:


//{{BLOCK(brin)

//======================================================================
//
//   brin, 512x256@4,
//   + palette 256 entries, not compressed
//   + 31 tiles (t|f|p reduced) not compressed
//   + regular map (in SBBs), not compressed, 64x32
//   Total size: 512 + 992 + 4096 = 5600
//
//   Time-stamp: 2007-02-16, 14:23:41
//   Exported by Cearn's Usenti v1.7.7
//   (comments, kudos, flames to "daytshen@hotmail.com")
//
//======================================================================

const unsigned short brinPal[256]=
{
   0x1042,0x02DF,0x01D7,0x00AC,0x5A73,0x41AD,0x2D08,0x1863,
   0x0BB1,0x48FB,0x7FFF,0x0000,0x7FFF,0x44E5,0x7FFF,0x0000,
   0x1042,0x0BB1,0x1EA9,0x0145,0x5EBB,0x3DB3,0x292E,0x1486,
   0x6318,0x4A52,0x318C,0x0000,0x7FFF,0x02DF,0x001F,0x0000,
   0x1042,0x72BC,0x48FB,0x1816,0x1690,0x0E14,0x00E5,0x0041,
   0x30C6,0x2462,0x1421,0x0800,0x7EFF,0x1840,0x7FFF,0x0000,
   0x1042,0x7738,0x76AE,0x6209,0x4D8B,0x4125,0x3500,0x2000,
   0x5E52,0x416B,0x30E4,0x1C60,0x6318,0x6318,0x7F9C,0x0000,

   0x1042,0x6318,0x6318,0x20E0,0x1DA7,0x2D21,0x28A0,0x1820,
   0x26A9,0x25E9,0x1542,0x0420,0x26A9,0x0082,0x2771,0x0000,
   0x1042,0x02BF,0x017F,0x0015,0x4F95,0x42AE,0x3206,0x2523,
   0x152A,0x14C7,0x1463,0x0402,0x0CA1,0x1840,0x7EB5,0x0000,
   0x1042,0x5EBA,0x4E36,0x3DB2,0x2D2E,0x20CB,0x1048,0x0802,
   0x1A77,0x21D1,0x24C7,0x0042,0x6B1C,0x6318,0x7EB5,0x0C00,
   0x1042,0x5D22,0x4463,0x1840,0x24C0,0x1CA0,0x1480,0x1040,
   0x16DF,0x15D7,0x14EE,0x1486,0x6318,0x6318,0x16DF,0x0800,

   0x0000,0x7FFF,0x77BD,0x6B5A,0x6318,0x7FFF,0x77BD,0x6B5A,
   0x6318,0x7FFF,0x77BD,0x6B5A,0x6318,0x7FFF,0x77BD,0x6B5A,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

   0x0000,0x0108,0x03BD,0x1405,0x43FF,0x21A8,0x579F,0x4AD2,
   0x3A4E,0x00BB,0x02B5,0x016B,0x0252,0x1104,0x0074,0x000D,
   0x0000,0x7F5A,0x033B,0x0216,0x0113,0x7C1D,0x5814,0x300A,
   0x3BE0,0x2680,0x1580,0x5294,0x39CE,0x2108,0x2484,0x7D08,
   0x0000,0x7FFF,0x19FF,0x1D55,0x10AD,0x53FF,0x039E,0x295F,
   0x18DF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x104A,
   0x0000,0x72B2,0x71C7,0x2461,0x1840,0x7A8E,0x660B,0x4D03,
   0x30A4,0x0F3F,0x01BF,0x001F,0x0012,0x0000,0x0000,0x0000,
};

const unsigned short brinTiles[496]=
{
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x7777,0x7777,0x5777,0x3537,0x5757,0x4347,0x7377,0x3372,
   0x7477,0x2334,0x7777,0x7454,0x2777,0x4235,0x5747,0x2755,
   0x4777,0x7777,0x4374,0x4774,0x5437,0x7745,0x3425,0x7747,
   0x3337,0x7455,0x5334,0x7577,0x4442,0x7753,0x3374,0x7474,
   0x4777,0x7455,0x7777,0x3423,0x7577,0x4575,0x4775,0x5757,
   0x7777,0x7744,0x7577,0x4477,0x7777,0x6666,0x7777,0x6777,

   0x4424,0x7553,0x3474,0x7637,0x5447,0x7674,0x7455,0x7665,
   0x4344,0x7566,0x6664,0x7776,0x6666,0x7676,0x7777,0x7777,
   0x6667,0x6666,0x5566,0x7665,0x3235,0x5555,0x7723,0x5577,
   0x5771,0x7775,0x1577,0x2221,0x2255,0x5222,0x7723,0x2777,
   0x6666,0x7666,0x7777,0x6677,0x7775,0x6557,0x5577,0x7777,
   0x7777,0x7555,0x7732,0x7557,0x5555,0x5555,0x7553,0x5577,
   0x7677,0x7577,0x5557,0x7447,0x4456,0x4442,0x4445,0x4444,
   0x4345,0x4434,0x4447,0x4444,0x4444,0x4444,0x4247,0x7454,

   0x5775,0x7777,0x7547,0x7777,0x7444,0x7774,0x5744,0x7777,
   0x5444,0x7777,0x7474,0x7755,0x4744,0x7777,0x5444,0x7775,
   0x5777,0x7555,0x3155,0x7322,0x1212,0x5531,0x7777,0x2217,
   0x3237,0x7777,0x5212,0x5555,0x1120,0x2332,0x1400,0x0221,
   0x7775,0x7777,0x6777,0x5556,0x7775,0x7577,0x7553,0x7777,
   0x7777,0x5555,0x7755,0x5777,0x5121,0x0555,0x2000,0x0061,
   0x4464,0x4444,0x7446,0x7444,0x4676,0x4644,0x5447,0x6575,
   0x7577,0x7555,0x5757,0x5777,0x7777,0x7777,0x7777,0x7777,

   0x7444,0x7757,0x7747,0x7777,0x7575,0x7775,0x7767,0x7777,
   0x5757,0x7777,0x7777,0x7777,0x7777,0x7777,0x7777,0x7777,
   0x7772,0x7321,0x4421,0x7774,0x2272,0x4443,0x7421,0x1777,
   0x4710,0x2144,0x2110,0x3443,0x1200,0x5177,0x0000,0x0022,
   0x2747,0x2773,0x3222,0x1247,0x4773,0x7214,0x7667,0x2722,
   0x1773,0x0144,0x5005,0x0443,0x0000,0x0032,0x0000,0x0000,
   0x4473,0x4774,0x4777,0x0444,0x7744,0x0447,0x4432,0x0047,
   0x4477,0x0044,0x4444,0x0000,0x0047,0x0000,0x0004,0x0000,

   0x2420,0x2211,0x4412,0x4432,0x2140,0x3773,0x7740,0x2277,
   0x2710,0x7221,0x2000,0x4212,0x0000,0x2271,0x0000,0x7210,
   0x5600,0x1356,0x5600,0x1356,0x5600,0x1356,0x5600,0x1356,
   0x5600,0x1356,0x5600,0x1356,0x5600,0x1356,0x5600,0x1356,
   0x4542,0x0065,0x4542,0x0065,0x4542,0x0065,0x4542,0x0065,
   0x4542,0x0065,0x4542,0x0065,0x4542,0x0065,0x4542,0x0065,
   0x0000,0x0000,0x0000,0x0000,0x6666,0x6666,0x5555,0x5555,
   0x4444,0x4444,0x5555,0x5555,0x3333,0x3333,0x1111,0x1111,

   0x2222,0x2222,0x4444,0x4444,0x5555,0x5555,0x6666,0x6666,
   0x5555,0x5555,0x6666,0x6666,0x0000,0x0000,0x0000,0x0000,
   0x2130,0x0222,0x1113,0x1111,0x4411,0x4444,0x2412,0x4446,
   0x6412,0x4446,0x4411,0x1112,0x4413,0x7774,0x4420,0x1112,
   0x2120,0x0322,0x1111,0x6331,0x4444,0x6644,0x4444,0x6662,
   0x4444,0x6666,0x5553,0x6644,0x7777,0x6644,0x5553,0x0644,
   0x4420,0x7774,0x4413,0x1112,0x4412,0x7774,0x4422,0x4444,
   0x2412,0x4446,0x6412,0x4446,0x6633,0x6666,0x6660,0x0666,

   0x7777,0x0644,0x5553,0x6644,0x7777,0x6644,0x4444,0x6644,
   0x4444,0x6663,0x4444,0x6666,0x6666,0x6666,0x6660,0x0666,
   0x5660,0x1355,0x5660,0x1355,0x5660,0x1355,0x7700,0x7777,
   0x5600,0x1355,0x5600,0x1355,0x5600,0x1355,0x6600,0x4566,
   0x4542,0x0655,0x4542,0x0655,0x4542,0x0655,0x7777,0x0077,
   0x4542,0x0065,0x4542,0x0065,0x4542,0x0065,0x5654,0x0066,
   0x1220,0x1266,0x4441,0x4554,0x1142,0x1121,0x4146,0x4444,
   0x4156,0x2111,0x4252,0x4441,0x4141,0x2142,0x4242,0x4241,

   0x6612,0x0322,0x4544,0x0644,0x1212,0x0643,0x4444,0x0646,
   0x4312,0x0666,0x4644,0x0646,0x4643,0x0046,0x4646,0x0646,
   0x4141,0x7642,0x4152,0x4443,0x4252,0x7776,0x4346,0x4444,
   0x7642,0x7777,0x4443,0x4446,0x6660,0x6660,0x0000,0x0000,
   0x4647,0x0666,0x4634,0x0646,0x4777,0x0046,0x3444,0x0646,
   0x7777,0x0647,0x6644,0x0634,0x0666,0x0066,0x0000,0x0000,
};

const unsigned short brinMap[2048]=
{
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3001,0x3002,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3001,0x3002,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3001,0x3002,0x0000,0x0000,0x3001,0x3002,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3003,0x3004,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3003,0x3004,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3003,0x3004,0x0000,0x0000,0x3003,0x3004,0x0000,0x0000,

   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3001,0x3002,0x3005,0x3006,0x3007,0x3008,0x3001,0x3002,
   0x3007,0x3008,0x3001,0x3002,0x3007,0x3008,0x0000,0x0000,
   0x3005,0x3006,0x3007,0x3008,0x3005,0x3006,0x3005,0x3006,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3003,0x3004,0x3009,0x300A,0x300B,0x300C,0x3003,0x3004,
   0x300B,0x300C,0x3003,0x3004,0x300B,0x300C,0x0000,0x0000,
   0x3009,0x300A,0x300B,0x300C,0x3009,0x300A,0x300D,0x300E,

   0x3803,0x3804,0x3005,0x3006,0x3005,0x3006,0x3005,0x3006,
   0x3806,0x300F,0x3010,0x3009,0x3005,0x3006,0x3806,0x300F,
   0x3005,0x3006,0x3005,0x3006,0x3806,0x300F,0x3005,0x3006,
   0x3005,0x3006,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3801,0x3802,0x3009,0x300A,0x3009,0x300A,0x3009,0x300A,
   0x300F,0x0000,0x0000,0x3010,0x3009,0x300A,0x300F,0x0000,
   0x300D,0x300E,0x3009,0x300A,0x300F,0x0000,0x3009,0x300A,
   0x3009,0x300A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

   0x3809,0x380A,0x3809,0x380A,0x3809,0x380A,0x3809,0x380A,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x3005,0x3006,0x0000,0x0000,0x3005,0x3006,
   0x3005,0x3006,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x3009,0x300A,0x0000,0x0000,0x300D,0x300E,
   0x3009,0x300A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

   0x3011,0x3012,0x3001,0x3002,0x3809,0x380A,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3005,0x3006,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3011,0x3012,0x3003,0x3004,0x3805,0x3806,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3009,0x300A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

   0x3011,0x3012,0x3809,0x380A,0x3809,0x380A,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3005,0x3006,0x0000,0x0000,0x3809,0x380A,0x3013,0x3013,
   0x3011,0x3012,0x3805,0x3806,0x3805,0x3806,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x300D,0x300E,0x0000,0x0000,0x3805,0x3806,0x3014,0x3014,

   0x3809,0x380A,0x3809,0x380A,0x3011,0x3012,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x3011,0x3012,0x3001,0x3002,
   0x3805,0x3806,0x3805,0x3806,0x3011,0x3012,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x3011,0x3012,0x3003,0x3004,

   0x3001,0x3002,0x3809,0x380A,0x3809,0x380A,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x3011,0x3012,0x3809,0x380A,
   0x3003,0x3004,0x3805,0x3806,0x3805,0x3806,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x3011,0x3012,0x3805,0x3806,

   0x3809,0x380A,0x3809,0x380A,0x3011,0x3012,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x3809,0x380A,0x3809,0x380A,
   0x3805,0x3806,0x3805,0x3806,0x3011,0x3012,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x3805,0x3806,0x3805,0x3806,

   0x3007,0x3008,0x3809,0x380A,0x3809,0x380A,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x3809,0x380A,0x3809,0x380A,
   0x300B,0x300C,0x3805,0x3806,0x3805,0x3806,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x3805,0x3806,0x3805,0x3806,

   0x3809,0x380A,0x3011,0x3012,0x3809,0x380A,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3015,0x3016,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3011,0x3012,
   0x3805,0x3806,0x3011,0x3012,0x3805,0x3806,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3017,0x3018,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3011,0x3012,

   0x3001,0x3002,0x3011,0x3012,0x3809,0x380A,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3019,0x301A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3809,0x380A,
   0x3003,0x3004,0x3011,0x3012,0x3805,0x3806,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3011,0x3012,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3805,0x3806,

   0x3809,0x380A,0x3809,0x380A,0x3809,0x380A,0x0000,0x0000,
   0x0000,0x0000,0x3015,0x3016,0x3015,0x3016,0x0000,0x0000,
   0x3011,0x3012,0x0000,0x0000,0x3015,0x3016,0x3015,0x3016,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,0x0000,0x0000,
   0x0000,0x0000,0x3017,0x3018,0x3017,0x3018,0x0000,0x0000,
   0x3011,0x3012,0x0000,0x0000,0x3017,0x3018,0x3017,0x3018,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

   0x3001,0x3002,0x3809,0x380A,0x3809,0x380A,0x380D,0x380E,
   0x380D,0x380E,0x380D,0x380E,0x380D,0x380E,0x380D,0x380E,
   0x3809,0x380A,0x3809,0x380A,0x380D,0x380E,0x380D,0x380E,
   0x380D,0x380E,0x3809,0x380A,0x3809,0x380A,0x380D,0x380E,
   0x3003,0x3004,0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,
   0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,
   0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,
   0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,

   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3809,0x380A,
   0x3809,0x380A,0x3001,0x3002,0x3007,0x3008,0x3809,0x380A,
   0x3001,0x3002,0x3809,0x380A,0x3809,0x380A,0x3809,0x380A,
   0x3001,0x3002,0x3001,0x3002,0x3809,0x380A,0x3809,0x380A,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3805,0x3806,
   0x3805,0x3806,0x3003,0x3004,0x300B,0x300C,0x3805,0x3806,
   0x3003,0x3004,0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,
   0x3003,0x3004,0x3003,0x3004,0x3805,0x3806,0x3805,0x3806,

   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

   0x0000,0x0000,0x3001,0x3002,0x0000,0x0000,0x3001,0x3002,
   0x3001,0x3002,0x3001,0x3002,0x0000,0x0000,0x3001,0x3002,
   0x3001,0x3002,0x3001,0x3002,0x0000,0x0000,0x0000,0x0000,
   0x3001,0x3002,0x3001,0x3002,0x3007,0x3008,0x0000,0x0000,
   0x0000,0x0000,0x3003,0x3004,0x0000,0x0000,0x3003,0x3004,
   0x3003,0x3004,0x3003,0x3004,0x0000,0x0000,0x3003,0x3004,
   0x3003,0x3004,0x3003,0x3004,0x0000,0x0000,0x0000,0x0000,
   0x3003,0x3004,0x3003,0x3004,0x300B,0x300C,0x0000,0x0000,

   0x3007,0x3008,0x3005,0x3006,0x3005,0x3006,0x3005,0x3006,
   0x3001,0x3002,0x3001,0x3002,0x3007,0x3008,0x3005,0x3006,
   0x3007,0x3008,0x3005,0x3006,0x0000,0x0000,0x0000,0x0000,
   0x3005,0x3006,0x3001,0x3002,0x3007,0x3008,0x3005,0x3006,
   0x300B,0x300C,0x3009,0x300A,0x3009,0x300A,0x3009,0x300A,
   0x3003,0x3004,0x3003,0x3004,0x300B,0x300C,0x3009,0x300A,
   0x300B,0x300C,0x3009,0x300A,0x0000,0x0000,0x0000,0x0000,
   0x3009,0x300A,0x3003,0x3004,0x300B,0x300C,0x3009,0x300A,

   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3010,0x3009,0x3005,0x3006,0x3005,0x3006,0x3005,0x3006,
   0x3005,0x3006,0x3005,0x3006,0x3005,0x3006,0x3005,0x3006,
   0x3005,0x3006,0x3005,0x3006,0x3005,0x3006,0x3005,0x3006,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x3010,0x3009,0x300A,0x3009,0x300A,0x300D,0x300E,
   0x3009,0x300A,0x3009,0x300A,0x3009,0x300A,0x3009,0x300A,
   0x3009,0x300A,0x3009,0x300A,0x300D,0x300E,0x3009,0x300A,

   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x3005,0x3006,0x0000,0x0000,
   0x3010,0x3009,0x3806,0x300F,0x0000,0x0000,0x0000,0x0000,
   0x3010,0x3009,0x3806,0x300F,0x0000,0x0000,0x3005,0x3006,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x3009,0x300A,0x0000,0x0000,
   0x0000,0x3010,0x300F,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x3010,0x300F,0x0000,0x0000,0x0000,0x300D,0x300E,

   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x301B,0x301C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x301B,0x301C,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3019,0x301A,
   0x301D,0x301E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x301D,0x301E,0x3019,0x301A,0x0000,0x0000,

   0x3013,0x3013,0x3809,0x380A,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x301B,0x301C,
   0x3809,0x380A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x3809,0x380A,0x301B,0x301C,0x0000,0x0000,
   0x3014,0x3014,0x3805,0x3806,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x301D,0x301E,
   0x3805,0x3806,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x3805,0x3806,0x301D,0x301E,0x0000,0x0000,

   0x3809,0x380A,0x3011,0x3012,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3809,0x380A,
   0x3011,0x3012,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x3809,0x380A,0x3011,0x3012,0x0000,0x0000,
   0x3805,0x3806,0x3011,0x3012,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3805,0x3806,
   0x3011,0x3012,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x3805,0x3806,0x3011,0x3012,0x0000,0x0000,

   0x3007,0x3008,0x3011,0x3012,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3011,0x3012,
   0x3011,0x3012,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x3011,0x3012,0x3011,0x3012,0x0000,0x0000,
   0x300B,0x300C,0x3011,0x3012,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3011,0x3012,
   0x3011,0x3012,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x3011,0x3012,0x3011,0x3012,0x0000,0x0000,

   0x3013,0x3013,0x3013,0x3013,0x3809,0x380A,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3809,0x380A,
   0x3809,0x380A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x3809,0x380A,0x3809,0x380A,0x0000,0x0000,
   0x3014,0x3014,0x3014,0x3014,0x3805,0x3806,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3805,0x3806,
   0x3805,0x3806,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x3805,0x3806,0x3805,0x3806,0x0000,0x0000,

   0x3001,0x3002,0x3007,0x3008,0x3011,0x3012,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3003,0x3004,0x300B,0x300C,0x3011,0x3012,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

   0x3809,0x380A,0x3809,0x380A,0x3809,0x380A,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

   0x3809,0x380A,0x3809,0x380A,0x3809,0x380A,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3015,0x3016,
   0x3015,0x3016,0x3015,0x3016,0x0000,0x0000,0x0000,0x0000,
   0x3015,0x3016,0x3015,0x3016,0x3015,0x3016,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3017,0x3018,
   0x3017,0x3018,0x3017,0x3018,0x0000,0x0000,0x0000,0x0000,
   0x3017,0x3018,0x3017,0x3018,0x3017,0x3018,0x0000,0x0000,

   0x380D,0x380E,0x380D,0x380E,0x380D,0x380E,0x380D,0x380E,
   0x380D,0x380E,0x380D,0x380E,0x380D,0x380E,0x3015,0x3016,
   0x3015,0x3016,0x3015,0x3016,0x3015,0x3016,0x3015,0x3016,
   0x3015,0x3016,0x3015,0x3016,0x3015,0x3016,0x380D,0x380E,
   0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,
   0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,0x3017,0x3018,
   0x3017,0x3018,0x3017,0x3018,0x3017,0x3018,0x3017,0x3018,
   0x3017,0x3018,0x3017,0x3018,0x3017,0x3018,0x3805,0x3806,

   0x3007,0x3008,0x3809,0x380A,0x3809,0x380A,0x3809,0x380A,
   0x3809,0x380A,0x3001,0x3002,0x3001,0x3002,0x3007,0x3008,
   0x3809,0x380A,0x3809,0x380A,0x3809,0x380A,0x3001,0x3002,
   0x3809,0x380A,0x3809,0x380A,0x3001,0x3002,0x3809,0x380A,
   0x300B,0x300C,0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,
   0x3805,0x3806,0x3003,0x3004,0x3003,0x3004,0x300B,0x300C,
   0x3805,0x3806,0x3805,0x3806,0x3805,0x3806,0x3003,0x3004,
   0x3805,0x3806,0x3805,0x3806,0x3003,0x3004,0x3805,0x3806,

   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
};

//}}BLOCK(brin)

#150753 - Cearn - Tue Feb 12, 2008 12:41 am

There are two problems here. The first is that the map uses two screen-blocks, so using ScreenBlock(31) will also use SBB 32, which is actually part of the object VRAM. Use 30 or lower.

Second, the size parameter of DMAFastCopy() is the number of 16-bit or 32-bit transfers. By passing it the number of bytes (brinMapLen and such), you're copying 2x or 4x the amount of data you should and thereby overwriting the memory that comes after the destination. Again, you'd be overwriting object VRAM when copying the map.

#150754 - yaazz - Tue Feb 12, 2008 2:10 am

Thanks that fixed my problem!
Also I didnt even notice that brinMapLen was in u8 and not u16! thanks for pointing that out too!