Short: Convert BMP images to NES formats Author: Bob Rost, AmigaOS 4.0 compile by Spot / Up Rough Uploader: spot triad se (Spot / Up Rough) Type: dev/cross Architecture: ppc-amigaos >= 4.0.0 NES Sprite Tools March 18, 2004 Note: The Windows versions of these tools require the cygwin1.dll file. This file is available from Bob Rost's NES development resources page. Included tools (and author): bmp2chr Bob Rost bmp2level Bob Rost bmp2palette Bob Rost bmp2sprite Bob Rost bmp2table Bob Rost bmpmerge Bob Rost chr2bmp Bob Rost sprites2chrsprite Joey Echeverria General Usage: These tools convert between various kinds of bitmaps images and other data formats useful in creating games for the NES. Due to the BMP image loader used in these tools, any BMP image used must be 24-bit uncompressed color. This is the standard Windows bitmap output by applications such as Photoshop. The tools themselves may impose further restrictions on size and number of colors allowed in the images. All of these tools are command line applications. If you do not understand how to use them, consult appropriate documentation for using a command line in your computer's operating system. Source Code: These tools are released with source code into the public domain. They come with no warranty. Each of the included tools makes use of the BMPImage class, written for public domain by Bob Rost. They have been tested under Mac OSX and should work without modification on most popular operating systems. Under standard C++ development environments, you should be able to compile all of the tools with the Makefile. bmp2chr: This command line application converts a BMP image file into a NES CHR file. The input image size must be 128x128 pixels, and it may contain only the following colors: Black 000000 becomes sub-palette color 0 White FFFFFF becomes sub-palette color 1 Red FF0000 becomes sub-palette color 2 Blue 0000FF becomes sub-palette color 3 Usage: bmp2chr input.bmp output.chr bmp2level: This tool allows you to input bitmaps with information about your desired level, which can then be automatically converted into usable level data to draw and use the level in a game. The levels currently supported by the tool may be one or two screens wide. Usage: bmp2level map.bmp pattern.bmp palette.bmp collision.bmp special.bmp output.dat map.bmp A full-color screenshot of what your level should look like. The tool supports one or two screens at a time, which means that your image should be either 256x240 pixels, or 512x240 pixels. The tool relies on 16x16 pixel major blocks to create the map, so your map data should consist of sections of that size from your pattern table. pattern.bmp A standard 4-color pattern table, as created by bmp2pattern or chr2bmp, or required for bmp2chr. The image should be 128x128 pixels. Colors 0, 1, 2, and 3 map to black, white, red, and blue. palette.bmp An image 16 pixels wide. Pixels 0, 4, 8, and 12 must all be the same color, to conform with standard Nintendo color palettes. Only the first row of 16 pixels will be used in order to load the palette. collision.bmp An image the same size as your map data. It should consist of 16x16 pixel squares of solid color. Black squares indicate no collision at that point, and white squares indicate collision, meaning that game characters are expected to be able to stand on the square and not go through it. special.bmp An image the same size as your map data. Like the collision image, it should consist of 16x16 pixel squares of solid color. The color indicates that a special object of a particular type exists at that location. Each type is simply a number, which should be interpreted by your program. The colors map to type numbers as shown below. black 000000 no data white ffffff 1 red ff0000 2 blue 0000ff 3 green 00ff00 4 yellow ffff00 5 magenta ff00ff 6 cyan 00ffff 7 output.dat The output data file for your level. You may include this file directly in your rom to use in your game. The binary format is as follows: 1024 or 2048 bytes Name and Attribute table data to draw the level. If the level is on screen wide, then the 1024 bytes may be copied directly to PPU memory at a nametable starting address, such as $2000, in order to load the nametable and attribute table correctly. If your level is two screens wide, then the first 1024 bytes will be the lefthand screen, and the next 1024 bytes will be the righthand screen. 256 or 512 bytes Collision data corresponding to the level. Data is 256 bytes for a one-screen level, or 512 bytes for a two-screen level. Each byte represents a single major block from the collision map, and its value is 0 for passable blocks and 1 for solid blocks. Blocks are addressed in row order from far left to the far right of the map, from top to bottom. 3n +1 bytes for n special items Each 3 bytes represents a single special item. The first byte is the item type, the second byte is the x coordinate, and the third byte is the y coordinate. Coordinates are in major blocks from the upper left of the map, right and downward. The list is null-terminated by a single zero. bmp2palette: Usage: bmp2palette flag palette.bmp output.dat flag optional You may optionally specify which system palette to use for designating colors. The available palettes are by Chris Covell, Loopy, and Matthew Conte. If no flag is specified, then Chris Covell's palette is used by default. The flags for each palette are as follows: -covell -loopy -conte palette.bmp This image should by 16 pixels wide, and either 1 or 2 pixels tall. It may consist of any colors you wish, to be matched to the NES palette. However, every fourth pixel (starting with the upper left pixel) must be the same color, to conform to NES system restrictions. output.dat optional If you wish, you may specify an output filename. This file will be binary data, 16 or 32 bytes, where each byte is the NES system color of the corresponding pixel, as read in standard row order. If you do not specify an output file, then the colors will output to the console as an nbasic data statement. bmp2sprite: This tool converts a BMP image file to a NES-style tile layout version. The program does not check for color restrictions. Usage: bmp2sprite input.bmp output.bmp input.bmp An image file that is a multiple of 8x16 pixels. output.bmp The output file. It will be a horizontal arrangement of the input file, 8 pixels tall. The 8x8 pixel tiles will be read column order from the input and laid into the output as encountered. bmp2table: This tool converts a pattern table to a 4-color NES compatible pattern table, based on the provided palette. The user will be alerted of ambiguous palette matches, and it is the user's responsibility to resolve them manually. Usage: bmp2table input.bmp palette.bmp output.bmp input.bmp A 128x128 pixel image in full color. palette.bmp An image containing multiple sub palettes, to which the full color image will be matched. The image may contain any number of sub palettes, each one 4x1 pixels. The palette image may be any multiple of 4x1 pixels. output.bmp A 128x128 pixel image in NES 4 color, consisting of black, white, red, and blue. This image may be fed to bmp2chr. bmpmerge: This tool merges two bitmaps. It compares 8x8 tiles. For each tile which is blank (solid color) in one of the input tiles and non-blank in the other, the output file will contain the non-blank tile. Usage: bmp2table input1.bmp input2.bmp output.bmp input1.bmp A 128x128 pixel image. input2.bmp A 128x128 pixel image. output.bmp A 128x128 pixel image, created as a result of merging the two input pictures. chr2bmp: This command line application converts a NES CHR file to a BMP image. The input file must be a single-bank CHR ROM (4096 bytes), or else only the first bank will be used. The output image will be a conversion into 4-color space from the NES sub-palette entries, with a size of 128x128 pixels. Palette color 0 becomes black, 1 becomes white, 2 becomes red, and 3 becomes blue. Usage: chr2bmp input.chr output.bmp input.chr output.bmp sprites2chrsprite: Takes a number of input bitmaps and arranges them, in the order provided, into an output pattern table. It does not attempt to alter any colors. Usage: sprites2chrsprite input1.bmp [input2.bmp [...]] output.bmp input1.bmp An image 8 pixels tall, and a multiple of 8 pixels wide. input2-n.bmp Optional input images, also 8 pixels tall and a multiple of 8 pixels wide. output.bmp A 128x128 pixel pattern table. It will have the same colors as the input files. The input bitmap images will be concatenated row order into the pattern table, in rows of 16 tiles.