Game Boy Advance Tool Source Code
Edit on Github | Updated: 9th August 2026Introduction
In the Game Boy Advance SDK Version 3.0 the source code for a variety of tools are available to learn from and modify. These tools all have a command line interface (CLI) and are targeted for the Windows Operating System. They even come with Visual C++ 5.0 project files to make it really easy to build and extend, if you can still find a working version of VC++ 5.0 for your PC.
What tools have source code available?
The GBA development tools with source code available are:
| Tool Name | Description |
|---|---|
| act2agb | Converts an Adobe Photoshop .ACT (Adobe Color Table) file to a GBA Palette in C source code form |
| agbparts | Converts a bitmap image into 8x8 pixel parts useful for an optimized tileset or even sprites |
| bin2h | generates a C header file from the Binary result of objcopy |
| bmp2agb | Converts BMP images to either binary or text with optional compression |
| bmp2bin | Converts BMP files to binary formats .imb (Image Binary) and .plb (Palette Binary) |
| bmp2map | Converts BMP files to C-source code based on 8x8 pixel tiles |
| bmpgrid | Splits up a Bitmap into tiles/partitions based on input width/height (minimum 8x8) |
| bmpred | Reduces the colors of a BMP image using a specified palette |
| sgi2bmp | Converts an SGI format image into a BMP format image |
What other information is included?
Along with a directory for each of the tools mentioned above, there are also a few files and directories that provide further information:
- doc - Three text documents that provide information about the tools
- etc - Empty folder
- include - Contains the C-header files for the common tool library (libmagbx)
- lib - contains the pre-build library libmagbx.lib
- libsrc - contains the source code for libmagbx
- readme.txt - brief notes on how to setup Visual C++ to build the tools
What is libMagbX?
It seems to be a library containing common functionality used across multiple development tools for GBA development, as most of the tools operate on images there is common code to read and write image formats.
Why is the library called libmagbX?
So the first 3 letters lib is a common prefix for statically compiled libraries, the next letter M is unknown but it could be short for iMage since this library mainly handles image conversions. The next 3 letters AGB stands for Advanced Game Boy but the last letter X is unknown.
Tool Source Code
Each individual tool has its own source code folder, however the interesting logic is all in the common library known as libmagbX, all the folders contain are Visual C++ project files and a main.cpp file that calls the functionality from the common library.
Common files in each tool folder
Since each tool has its own Visual C++ project, there are a few common files that you will see across the codebase:
- *.dsp - Microsoft Developer Studio Project File
- *.dsw - Microsoft Developer Studio Workspace File
- *.ncb - Non-compiled Browse file - contains debug symbols used by Intellisense
- *.plg - Most recent Project Build Log in HTML format
- *.rc - Resource Script - contains information embedded in the tool executable
act2agb
This folder contains contains the source code for the tool that converts Adobe Photoshop Palette files into GBA compatible palette files.
There is not much of interest here as all the main.cpp source file itself does is:
- Usage Information printing to Command Line
- Parsing of command line arguments
- Calling of Palette.LoadACT from the libmagbX library
- writing out the result to a C source file
So the actual processing of the ACT file format and the conversion to GBA format is all in the Palette class of the libmagbX library.
| File Name | Extension | Description |
|---|---|---|
| act2agb | .dsp, .dsw, .ncb, .opt, .plg, .rc | see common files section for description of the files |
| main | .cpp | Just contains main function that shows the usage information, parses the arguments and calls the library functions |
| resource | .h | Include file for declaring the default macros from Visual C++ 5.0 (Nothing added by Nintendo) |
Agbparts (agbparts)
This folder contains
| File Name | Extension | Description |
|---|---|---|
| agbparts | .dsp, .dsw, .ncb, .opt, .plg, .rc | see common files section for description of the files |
| main | .cpp | |
| resource | .h | Include file for declaring the default macros from Visual C++ 5.0 (Nothing added by Nintendo) |
Bin2h (bin2h)
This folder contains
| File Name | Extension | Description |
|---|---|---|
| bin2h | .dsp, .dsw, .ncb, .opt, .plg, .rc | see common files section for description of the files |
| main | .cpp | |
| resource | .h | Include file for declaring the default macros from Visual C++ 5.0 (Nothing added by Nintendo) |
BMP to bin (bmp2bin)
This folder contains the source code to bmp2bin which is a simple tool that converts a single BMP image into a binary .IMB file that can be included inside a GBA ROM.
| File Name | Extension | Description |
|---|---|---|
| bmp2bin | .aps, .dsp, .dsw, .ncb, .opt, .plg, .rc | see common files section for description of the files |
| main | .cpp | |
| resource | .h | Include file for declaring the default macros from Visual C++ 5.0 (Nothing added by Nintendo) |
BMP to map (bmp2map)
This folder contains the source code for bmp2map which converts a BMP image into a C Source code file that can be compiled into a GBA ROM. It splits the single BMP image into 8x8 tiles that can be drawn using GBA functions.
| File Name | Extension | Description |
|---|---|---|
| bmp2map | .dsp, .dsw, .ncb, .opt, .plg, .rc | see common files section for description of the files |
| main | .cpp | |
| resource | .h | Include file for declaring the default macros from Visual C++ 5.0 (Nothing added by Nintendo) |
Split BMP into grid of images (bmpgrid)
This folder contains the source code for bmpgrid a command line tool that converts a single BMP into multiple images based on the width and height of a tile.
| File Name | Extension | Description |
|---|---|---|
| BmpGrid | .dsp, .dsw, .ncb, .opt, .plg, .rc | see common files section for description of the files |
| main | .cpp | |
| resource | .h | Include file for declaring the default macros from Visual C++ 5.0 (Nothing added by Nintendo) |
Bmp color reducer (bmpred)
This folder contains the source code for a Command Line tool known as bmpred that reduces the number of unique colors inside a BMP image, useful for getting the BMP into a good state to display on the GBA.
| File Name | Extension | Description |
|---|---|---|
| bmpred | .dsp, .dsw, .ncb, .opt, .plg | see common files section for description of the files |
| colorspace | .cpp, .h | |
| main | .cpp | |
| reduction | .cpp | |
| res | .rc | |
| resource | .h | Include file for declaring the default macros from Visual C++ 5.0 (Nothing added by Nintendo) |
colorspace.cpp
- u32 GetNearestPalette(const Palette&_Pal,const Color&_C,u16 offset)
main.cpp
- Picture CreateReductionPicture(const HPicture&_Hpic,const Palette&_Pal,u16 offset)
- void usage()
- __USING__MAGBX
reduction.cpp
- __USING__MAGBX u32 GetNearestPalette(const Palette&_Pal,const Color&_C,u16 offset)
- Picture CreateReductionPicture(const HPicture&_Hpic,const Palette&_Pal,u16 offset)
SGI to BMP converter (sgi2bmp)
This folder contains the source code for a tool that converts images from the SGI Image format to a standard BMP image format. This tool can be quite useful for any GBA or N64 development that was done on SGI machines which used the SGI image format.
| File Name | Extension | Description |
|---|---|---|
| GlobalFnc | .cpp, .h | |
| RgbLoader | .cpp, .h | |
| main | .cpp | |
| pic_create | .cpp, .h | |
| resource | .h | Include file for declaring the default macros from Visual C++ 5.0 (Nothing added by Nintendo) |
| sgi2bmp | .dsp, .dsw, .ncb, .opt, .plg, .rc | see common files section for description of the files |
GlobalFnc.cpp
- void setByte(u8,u8**)
- void setWord(u16,u8**)
- void setDword(u32,u8**)
- void getByte(u8*,u8**)
- void getChar(char*,u8**)
- void getWord(u16*,u8**)
- void getShort(short*,u8**)
- void getDword(u32*,u8**)
- void getLong(long*,u8**)
RgbLoader.cpp
- DELIVER sgiCreateDeliver(unsigned long width,unsigned long height)
- bool LoadHeader(IMAGEHEADER *pimh,MCFile *pfile)
- BOOL sgiCreateImage(DELIVER *pdlv,IMAGEHEADER *pimh,unsigned char *pSrc)
- BOOL WINAPI tvIsExtension(const char *pchExt)
- DELIVER *WINAPI tvImageToTexture(const char *pchFileName)
- BOOL sgiCreateImage(DELIVER *pdlv,IMAGEHEADER *pimh,unsigned char *pSrc)
- DELIVER sgiCreateDeliver(unsigned long width,unsigned long height)
- bool LoadHeader(IMAGEHEADER *pimh,MCFile *pfile)
main.cpp
- void usage()
pic_create.cpp
- __USING__MAGBX
- bool sgiLoadHeader(IMAGEHEADER&imh,std::ifstream&in)
- bool sgiCreateImage(HPicture&pic,IMAGEHEADER&imh,unsigned char *pSrc,char flag,short tp,Color&color)
- HPicture sgiImageLoad(FileName&filename,char flag,short tp,Color&color)
- static bool sgiCreateImage(HPicture&pic,IMAGEHEADER&imh,unsigned char *pSrc,char flag,short tp,Color&bkcolor)
Documentation (doc)
This folder contains three text documents that describe the source code for all the tools, including the shared library and the use of the Standard Template Library (STL)
The three text files are as follows:
- library.txt -
- prevcl.txt -
- tools.txt -
C Header files for libMagbX (include)
This folder contains all the C header files used by each of the tools in order to describe the functionality of the common library. This allows each tool to use common functions from the libMagbX, reducing the need for duplicate code in each tool.
| File Name | Extension | Description |
|---|---|---|
| agbtypes | .h | Include file for declaring |
| angle | .h | Include file for declaring |
| bmpstruct | .h | Include file for declaring |
| buffer | .h | Include file for declaring |
| char16set | .h | Include file for declaring |
| char256set | .h | Include file for declaring |
| character | .h | Include file for declaring |
| character16 | .h | Include file for declaring |
| character256 | .h | Include file for declaring |
| charset | .h | Include file for declaring |
| color | .h | Include file for declaring |
| filename | .h | Include file for declaring |
| hpicture | .h | Include file for declaring |
| image | .h | Include file for declaring |
| map | .h | Include file for declaring |
| map16 | .h | Include file for declaring |
| map256 | .h | Include file for declaring |
| mapsrimage | .h | Include file for declaring |
| maptextimage | .h | Include file for declaring |
| maptextunit | .h | Include file for declaring |
| palette | .h | Include file for declaring |
| pathname | .h | Include file for declaring |
| picture | .h | Include file for declaring |
| util | .h | Include file for declaring |
agbtypes.h
angle.h
- _AGB_ANGLE_PIE (3.14159265359f)
- double const m_rad2agb
- double const m_agb2rad
bmpstruct.h
- BMP_COMP_RGB (0)
- BMP_COMP_RLE8 (1)
- BMP_COMP_RLE4 (2)
- BMP_COMP_BITFIELDS (3)
buffer.h
char16set.h
char256set.h
character.h
character16.h
character256.h
charset.h
color.h
- bool operator==(Color const&,Color const&)
- bool operator!=(Color const&,Color const&)
hpicture.h
map.h
map16.h
map256.h
mapsrimage.h
maptextimage.h
maptextunit.h
- MT_NONE_FLIP (0)
- MT_H_FLIP (1)
- MT_V_FLIP (2)
- MT_HV_FLIP (3)
- bool operator==(MapTextUnit const&,MapTextUnit const&)
- bool operator!=(MapTextUnit const&,MapTextUnit const&)
- bool operator<(MapTextUnit const&,MapTextUnit const&)
- bool operator>(MapTextUnit const&,MapTextUnit const&)
- bool operator<=(MapTextUnit const&,MapTextUnit const&)
- bool operator>=(MapTextUnit const&,MapTextUnit const&)
palette.h
picture.h
util.h
- void _itoa_c_hex(char val,char *str)
- inline _Ty Min(const _Ty&_L,const _Ty&_R){ return (_L
- inline _Ty Max(const _Ty&_L,const _Ty&_R){ return (_L > _R )? _L : _R ; }
Library Source code (libmagbX)
This folder contains the actual C++ source code for the libMagbX library that is used by each of the development tools listed at the start of this page. Most of the functionality of this library is Image manipulation.
| File Name | Extension | Description |
|---|---|---|
| angle | .cpp | |
| buffer | .cpp | |
| char16set | .cpp | |
| char256set | .cpp | |
| character | .cpp | |
| character16 | .cpp | |
| charset | .cpp | |
| color | .cpp | |
| filename | .cpp | |
| hpicture | .cpp | |
| image | .cpp | |
| libsrc | .dep, .dsp, .dsw, .ncb, .opt, .plg | see common files section for description of the files |
| map | .cpp | |
| map16 | .cpp | |
| map256 | .cpp | |
| mapsrimage | .cpp | |
| maptextimage | .cpp | |
| maptextunit | .cpp | |
| palette | .cpp | Contains functions to parse Adobe ACT files and convert to GBA format palettes |
| pathname | .cpp | |
| picture | .cpp | |
| util | .cpp |
color.cpp
- bool operator==(const Color&_L,const Color&_R)
- bool operator!
filename.cpp
- FileName operator+(const PathName&_L,const FileName&_R)
image.cpp
- __USING__MAGBX u8 create_data_array_from_image4b(const Image&image)
- u8 create_data_array_from_image8b(const Image&image)
- u16 create_data_array_from_image16b(const Image&image)
- u32 create_data_array_from_image32b(const Image&image)
- u32 get_array_count_4b(const Image&image)
- u32 get_array_count_8b(const Image&image)
- u32 get_array_count_16b(const Image&image)
- u32 get_array_count_32b(const Image&image)
- u8 create_data_array_from_image4b(const Image&image)
- u8 create_data_array_from_image8b(const Image&image)
- u16 create_data_array_from_image16b(const Image&image)
- u32 create_data_array_from_image32b(const Image&image)
- u32 get_array_count_4b(const Image&image)
- u32 get_array_count_8b(const Image&image)
- u32 get_array_count_16b(const Image&image)
- u32 get_array_count_32b(const Image&image)
maptextunit.cpp
- bool operator==(const MapTextUnit&_L,const MapTextUnit&_R)
- bool operator!
util.cpp
- void _itoa_c_hex(char val,char *str)