NESst

Created Diff never expires
46 removals
632 lines
116 additions
710 lines
NES Screen Tool by Shiru
NES Screen Tool by Shiru






This Windows tool allows to edit NES nametables, tilemaps, attributes,
This Windows tool allows to edit NES nametables, tilemaps, attributes,
palettes, pattern graphics, and metasprites. Unlike most of similar
palettes, pattern graphics, and metasprites. Unlike most of similar
programs, it is targeted to creating of content for new homebrew projects
programs, it is targeted to creating of content for new homebrew projects
rather than editing existing games, although some of functionality of this
rather than editing existing games, although some of functionality of this
kind is also present.
kind is also present.


The program and its source code are released into the Public Domain,
The program and its source code are released into the Public Domain,
you can do whatever you want with it. The source code is for
you can do whatever you want with it. The source code is for
Borland Turbo C++ Explorer (C++ Builder).
Borland Turbo C++ Explorer (C++ Builder).






Tileset editor
Tileset editor


LMB - set tile as current
LMB - set tile as current
LMBx2 - open the tile in the CHR editor
LMBx2 - open the tile in the CHR editor


Shift+LMB - select a rectangular group of tiles
Shift+LMB - select a rectangular group of tiles
Ctrl+LMB - select random set of tiles
Ctrl+LMB - select random set of tiles
RMB - cancel selection
RMB - cancel selection


Ctrl+Z - undo
Ctrl+Z - undo
Ctrl+X - cut tile graphics
Ctrl+X - cut tile graphics
Ctrl+C - copy tile graphics
Ctrl+C - copy tile graphics
Ctrl+V - paste tile graphics
Ctrl+V - paste tile graphics


When you copy random set of tiles, they will be pasted as a linear sequence.
When you copy random set of tiles, they will be pasted as a linear sequence.
When you copy rectangular group of tiles, they will be pasted as a rectangle
When you copy rectangular group of tiles, they will be pasted as a rectangle
as well.
as well.


Only half of 8K CHR memory is visible at a time, you can switch between the
Only half of 8K CHR memory is visible at a time, you can switch between the
halfs using 'A' and 'B' buttons under the tileset.
halfs using 'A' and 'B' buttons under the tileset.


You can drag and drop tiles in the tileset using right mouse button.
This will also update nametable indexes, so no visible changes will be
done, just two tiles in the tileset will get exchanged. This allows to
rearrange order of tiles easily.

'Apply tiles' button allows to change tile numbers in the nametable. You can't
'Apply tiles' button allows to change tile numbers in the nametable. You can't
draw anything in the nametable when this button is not pressed down.
draw anything in the nametable when this button is not pressed down.


'Attr checker' button allows to check nametable attributes with a special
'Attr checker' button allows to check nametable attributes with a special
checker tile. Warning, you still can draw tiles in this mode.
checker tile. Warning, you still can draw tiles in this mode.


'Selected only' button disabled display for any tiles except the ones currently
'Selected only' button disabled display for any tiles except the ones currently
selected in the tileset (one or a few). It helps to visually see location and
selected in the tileset (one or a few). It helps to visually see location and
amount of the tile entries in the nametable.
amount of the tile entries in the nametable.


'Type in' button allows to enter a sequence of tiles into the nametable at
'Type in' button allows to enter a sequence of tiles into the nametable at
given position (click to set) either by clicking tiles in the tileset, or
given position (click to set) either by clicking tiles in the tileset, or
using keyboard. In this case tileset should contain a font with ASCII encoding,
using keyboard. In this case tileset should contain a font with ASCII encoding,
with space being tile 0.
with space being tile 0.


'Grid All', '1x', '2x', '4x' buttons controls grid displaying. There are grids
'Grid All', '1x', '2x', '4x' buttons controls grid displaying. There are grids
of three sizes that could be used at once or in any combination.
of three sizes that could be used at once or in any combination.






Palette editor
Palette editor


LMB selects current color and palette, or assigns a color to the current color
LMB selects current color and palette, or assigns a color to the current color
in the current palette. RMB allows to drag and drop colors between the main
in the current palette. RMB allows to drag and drop colors between the main
palette or BG palettes.
palette or BG palettes.


The mouse wheel can also be used to cycle through the palettes if the main
The mouse wheel can also be used to cycle through the palettes if the main
program window has focus.
program window has focus.


'Apply palettes' button enables applying current palette to the nametable.
'Apply palettes' button enables applying current palette to the nametable.


'R0','G0','B0','M0' buttons controls the color emphasis bits that alters the
'R0','G0','B0','M0' buttons controls the color emphasis bits that alters the
palette.
palette.


'A','B','C','D' buttons is four palette slots. You can load up to four palettes
'A','B','C','D' buttons is four palette slots. You can load up to four palettes
and switch between them at any time. Please be aware that Palette Save/Load
and switch between them at any time. Please be aware that Palette Save/Load
only works for active palette. The slots needed for better convinience when
only works for active palette. The slots needed for better convinience when
a few palettes needs to be designed to be used with the same graphics.
a few palettes needs to be designed to be used with the same graphics.


When Num Lock is off, you can use Numpad keys to switch between sub-palletes
When Num Lock is off, you can use Numpad keys to switch between sub-palletes
(1 and 3), sub-palette entries (7 and 9), and change current color (8,4,6,2).
(1 and 3), sub-palette entries (7 and 9), and change current color (8,4,6,2).






Nametable editor
Nametable editor


Select nametable tab to enter the nametable editor.
Select nametable tab to enter the nametable editor.


You can draw nametable with a single tile when a single tile in the CHR is
You can draw nametable with a single tile when a single tile in the CHR is
selected, or with a brush when a rectangular or random group of tiles in
selected, or with a brush when a rectangular or random group of tiles in
the CHR is selected.
the CHR is selected.


Nametable can have the standard 32x30 size, or be any size from 4x4 to 4096x4096
Nametable can have the standard 32x30 size, or be any size from 4x4 to 4096x4096
tiles. It is called map then, and saved as *.map file.
tiles. It is called map then, and saved as *.map file.


LMB - set current tile or CHR selection into nametable
LMB - set current tile or CHR selection into nametable
RMB - set the tile from the nametable as current, cancel nametable selection
RMB - set the tile from the nametable as current, cancel nametable selection


Cursor, Shift+Cursor - scroll through a large nametable
Cursor, Shift+Cursor - scroll through a large nametable


Shift+LMB - select an area of the nametable, Cursor still navigates through map
Shift+LMB - select an area of the nametable, Cursor still navigates through map
Alt+Cursor - move current selection around
Alt+Cursor - move current selection around
Caps Lock - switch between selection and drawing mode
Caps Lock - switch between selection and drawing mode


Ctrl+Cursor - rotate nametable without attributes with wrap around
Ctrl+Cursor - rotate nametable without attributes with wrap around
Ctrl+Shift+Cursor - rotate nametable with attributes (2 chars per step)
Ctrl+Shift+Cursor - rotate nametable with attributes (2 chars per step)


Ctrl+F - fill selection with current tile
Ctrl+F - fill selection with current tile
A - enable/disable the attribute checker tile
A - enable/disable the attribute checker tile


Ctrl+Z - undo
Ctrl+Z - undo
Ctrl+X - cut selection
Ctrl+X - cut selection
Ctrl+C - copy selecton
Ctrl+C - copy selecton
Ctrl+V - paste selection
Ctrl+V - paste selection


Shift+C - copy selection into the Windows clipboard as text
Shift+C - copy selection into the Windows clipboard as text
Shift+M - copy selection as a metasprite into the Windows clipboard
Shift+M - copy selection as a metasprite into the Windows clipboard
Shift+N - copy selection as a flipped metasprite into the Windows clipboard
Shift+N - copy selection as a flipped metasprite into the Windows clipboard


Ctrl + [ ] - change between nametable files that is named as xxx_NNN.nam
(000..999) as a very crude nametable animation system.





Metasprite editor
Metasprite editor


Select Metasprites tab to enter the metasprites editor.
Select Metasprites tab to enter the metasprites editor.


You can drag and drop tiles in the tileset using right mouse button.
This will also update nametable indexes, so no visible changes will be
done, just two tiles in the tileset will get exchanged. This allows to
rearrange order of tiles easily.

You can drag and drop tiles from the tileset to metasprite editor using
You can drag and drop tiles from the tileset to metasprite editor using
right mouse button. You can move sprites around in the editor using RMB
right mouse button. You can move sprites around in the editor using RMB
or Cursor keys. To select a sprite you either can click it in the editor
or Cursor keys. To select a sprite you either can click it in the editor
with LMB, or in the list. When a sprite is selected, you can change tile
with LMB, or in the list. When a sprite is selected, you can change tile
or palette assigned to it by clicking on the tileset or the palettes with
or palette assigned to it by clicking on the tileset or the palettes with
LMB.
LMB.


You can change the origin of coordinates by clicking LMB+Ctrl in the
You can change the origin of coordinates by clicking LMB+Ctrl in the
metasprite editor area. All sprite coordinates will be recalculated.
metasprite editor area. All sprite coordinates will be recalculated.
This is useful when you need to have origin at the bottom of metasprites,
This is useful when you need to have origin at the bottom of metasprites,
for example.
for example.


You can edit up to 256 metasprites at once, up to 64 sprites per
You can edit up to 256 metasprites at once, up to 64 sprites per
metasprite.
metasprite.


'<' and '>' buttons selects a metasprite.
'<' and '>' buttons selects a metasprite.


'Clear' button clears current metasprite.
'Clear' button clears current metasprite.


'Copy' button copy current metasprite into internal clipboard.
'Copy' button copy current metasprite into internal clipboard.


'Paste' button paste content of the internal clipboard into current metasprite.
'Paste' button paste content of the internal clipboard into current metasprite.


'HFlip' and 'VFlip' buttons flips current metasprite horizontally or vertically
'HFlip' and 'VFlip' buttons flips current metasprite horizontally or vertically
relatively to the origin of coordinates.
relatively to the origin of coordinates.


'All', 'Sel', 'None' buttons allow to select which sprite will have a
'All', 'Sel', 'None' buttons allow to select which sprite will have a
frame displayed around it in the editor, all sprites, only selected one,
frame displayed around it in the editor, all sprites, only selected one,
or none.
or none.


'Snap' button enables snap to the 8x8 grid when you move sprites around
'Snap' button enables snap to the 8x8 grid when you move sprites around
with the mouse or the Cursor keys.
with the mouse or the Cursor keys.


'Up' and 'Down' buttons move a sprite up or down in the list.
'Up' and 'Down' buttons move a sprite up or down in the list.


'H' and 'V' buttons toggle horizontal and vertical flip bits for
'H' and 'V' buttons toggle horizontal and vertical flip bits for
selected sprite(s), a group gets mirrored around its center.
selected sprite(s), a group gets mirrored around its center.


'Del' deletes selected sprite from the list.
'Del' deletes selected sprite from the list.


'Dup' creates a copy of selected sprites and selects added part, so it can be
'Dup' creates a copy of selected sprites and selects added part, so it can be
manipulated further by functions such as moving or flipping.
manipulated further by functions such as moving or flipping.


'All' and 'None' buttons select all or none sprites in the list.
'All' and 'None' buttons select all or none sprites in the list.




[ ] - select previous and next metasprite, these keys also work while
[ ] - select previous and next metasprite, these keys also work while
nametable editor is active.
nametable editor is active.






Main menu
Main menu




All
All


Open
Open


Load and save tileset, nametable or map, and palette of the same name at once.
Load and save tileset, nametable or map, and palette of the same name at once.


Save
Save


Save tileset, nametable or map, and palette. Names will be asked for every file.
Save tileset, nametable or map, and palette. Names will be asked for every file.


Load session
Load session


Load previously saved state of the editor.
Load previously saved state of the editor.


Save session
Save session


Save current state of the editor, including all the resources, selections,
Save current state of the editor, including all the resources, selections,
internal clipboard, undo, and settings. It could be used when you need to
internal clipboard, undo, and settings. It could be used when you need to
save your work to continue later. Warning: do not use sessions to store
save your work to continue later. Warning: do not use sessions to store
your work permanently! It only guaranteed to work within a version of the
your work permanently! It only guaranteed to work within a version of the
tool, and may not be loaded correctly between different versions.
tool, and may not be loaded correctly between different versions.




Patterns
Patterns


Open CHR
Open CHR


Load CHR file with size of 1K, 2K, 4K, 8K, or other size of multiple of 16.
Load CHR file with size of 1K, 2K, 4K, 8K, or other size of multiple of 16.
4K files always replace current tileset, smaller files loads to the current
4K files always replace current tileset, smaller files loads to the current
tile position.
tile position.


Save CHR
Save CHR


Save CHR file of latest opened size, or one of standard sizes,like the open
Save CHR file of the latest opened/saver size, as a set of one of the
function, or a selection.
standard sizes, like in the open function, or as an arbitarily sized
selection.


Find duplicates
Find duplicates


Find and select fully duplicated tiles in the tileset.
Find and select fully duplicated tiles in the tileset.


Remove duplicates
Remove duplicates


Find and remove duplicate tiles. You can select an area in the tileset before
Find and remove duplicate tiles. You can select an area in the tileset before
using this function in order to exclude the area from the process. This way
using this function in order to exclude the area from the process. This way
you can optimize the tileset without changing the selected area and keeping
you can optimize the tileset without changing the selected area and keeping
tiles in the area in place.
tiles in the area in place.


Find unused
Find unused
Find and select unused tiles in the tileset.
Find and select unused tiles in the tileset.
Remove unused
Remove unused
Find and remove unused tiles, works similar to Remove doubles.
Find and remove unused tiles, works similar to Remove doubles.
8x16 interleave
8x16 interleave
8x16 deinterleave
8x16 deinterleave


Interleave and deinterleave tiles in the tileset to simplify work with 8x16
Interleave and deinterleave tiles in the tileset to simplify work with 8x16
sprites. Draw them as two tiles one above other, then use interleave function
sprites. Draw them as two tiles one above other, then use interleave function
of Patterns menu to rearrange the tiles in the order required by NES hardware
of Patterns menu to rearrange the tiles in the order required by NES hardware
(top become left, bottom become right). Use deinterleave function if you need
(top become left, bottom become right). Use deinterleave function if you need
to rearrange the tiles back. Be careful, this function changes actual
to rearrange the tiles back. Be careful, this function changes actual
arrangement of the tiles, not just their appearance.
arrangement of the tiles, not just their appearance.


Swap colors
Swap colors


Swap colors in the graphics and/or in the palette. Shows a dialog with
Swap colors in the graphics and/or in the palette. Shows a dialog with
settings, you can swap the colors of whole tileset, in a bank, or in a
settings, you can swap the colors of whole tileset, in a bank, or in a
selection. It is possible to set the swap in a way that shifts the colors
selection. It is possible to set the swap in a way that shifts the colors
to the left or right, making graphics darker or brighter, given the pallete
to the left or right, making graphics darker or brighter, given the pallete
has a brightness gradient. There is presets for these kinds of swap.
has a brightness gradient. There is presets for these kinds of swap.


Swap banks
Swap banks


Swap 4K parts (banks A and B) of the tileset.
Swap 4K parts (banks A and B) of the tileset.


Clear
Clear


Clear tileset.
Clear tileset.


Fill with numbers
Fill with numbers


You can fill the tileset with graphics of tile numbers (00..FF) instead of
You can fill the tileset with graphics of tile numbers (00..FF) instead of
clearing it. This could help to track down sprites and tiles that are used
clearing it. This could help to track down sprites and tiles that are used
in wrong places.
in wrong places.


Generate 4x4 chunks
Generates a set of 4x4 chunks that contain all possible color combinations.
A very specific function that may come handy for some effects or blocky
graphics.

Sort by frequency
Sort by frequency
Sorts tiles by the use frequency. The most often used are placed to the
Sorts tiles by the use frequency. The most often used are placed to the
beginning of the tileset, the least common get grouped towards the end.
beginning of the tileset, the least common get grouped towards the end.


Sort by density
Sorts tiles by the pixel density, i.e. how much pixels is non-zero in
a tile. It helps to find least meaningful tiles that only has a couple
pixels set.


Nametable
Nametable




Set nametable size
Set size
Changes size of current nametable. This function allows to select either
Changes size of current nametable. This function allows to select either
the standard 32x30 size, or any other size from 4x4 to 4096x4096, in
the standard 32x30 size, or any other size from 4x4 to 4096x4096, in
4 tile steps. Contents of the nametable can be kept or cleared. This
4 tile steps. Contents of the nametable can be kept or cleared. This
operation can't be undone.
operation can't be undone.




Open nametable or map
Open nametable or map


Open a nametable or map, with or without attributes, RLE packed or not.
Open a nametable or map, with or without attributes, RLE packed or not.
Contents of the selected file get detected automatically, by the extension
Contents of the selected file get detected automatically, by the extension
and size.
and size.


Save nametable and attributes
Save as binary
Save nametable only
Save as assembly
Save attributes only
Save as C header
Save nametable of standard 32x30 size with or without attributes data
+ include nametable
(1024, 960 or 64 bytes). You can also save and load RLE-packed nametables
+ include attributes
with or without attributes. Decompressor code for NES is provided as well.
+ RLE compression
Save nametable of standard 32x30 size with or without attributes data
(1024, 960 or 64 bytes), as a binary file, an assembly code text, or
a C header. You can also save and load RLE-packed nametables with or
without attributes. Decompressor code for NES is provided as well.


Save map
Save map
Save nametable of non-standard size. This option is the only one available
Save nametable of non-standard size. This option is the only one available
for such nametables. Format is like the usual non-compressed nametable, first
for such nametables. Format is like the usual non-compressed nametable, first
tiles, then attributes, then four bytes with 16-bit width and height. Can be
tiles, then attributes, then four bytes with 16-bit width and height. Can be
used with an external converter to create simple scrolling levels.
used with an external converter to create simple scrolling levels.
Add offset
Add tile offset


Add a value to a range of tile numbers in the nametable. Dialog with settings
Add a value to a range of tile numbers in the nametable. Dialog with settings
allows to select the range of numbers that should be affected by the function,
allows to select the range of numbers that should be affected by the function,
and a value to add (could be negative). Values can be dec or hex, use $ to
and a value to add (could be negative). Values can be dec or hex, use $ to
enter hex.
enter hex.


Replace tile
Replace tile
Replace one tile number in the nametable with another.
Replace one tile number in the nametable with another.
Selection to the clipboard
Selection to clipboard


Copy current selection from the nametable into the Windows clipboard in one
Copy current selection from the nametable into Windows clipboard in one
of text formats, to be pasted into source code with Ctrl+V.
of text formats, to be pasted into source code with Ctrl+V.
> ASM code
+ ASM code
Copy as a series of db statements, to be pasted into assembly code.
Copy as a series of db statements, to be pasted into assembly code.


> C code (Shift+C)
+ C code (Shift+C)


Copy as C array definition, to be pasted into C code.
Copy as C array definition, to be pasted into C code.


> C code with RLE
+ C code with RLE


Similar to above, but the data is RLE encoded.
Similar to above, but the data is RLE encoded.


Selection as metasprite to the cliboard
Selection as metasprite to cliboard


Copy current selection from the nametable into the Windows clipboard as
Copy current selection from the nametable into the Windows clipboard as
an array definition in special metasprite format. The format:
an array definition in special metasprite format. The format:


X offset from the top left corner in pixels,
X offset from the top left corner in pixels,
Y offset from the top left corner in pixels,
Y offset from the top left corner in pixels,
tile number,
tile number,
palette number
palette number


Metasprite data ends with X offset 128.
Metasprite data ends with X offset 128.


> C code, no horizontal flip (Shift+M)
+ C code, no horizontal flip (Shift+M)
Copy as C array definition.
Copy as C array definition.
> C code, with horizontal flip (Shift+N)
+ C code, with horizontal flip (Shift+N)


The same as above, but |OAM_FLIP_H added to the palette number
The same as above, but |OAM_FLIP_H added to the palette number


Select tiles from nametable selection
Select tiles from nametable selection
Multi-select tiles in the CHR bank that were used in current nametable
Multi-select tiles in the CHR bank that were used in current nametable
selection.
selection.




Selection to current metasprite
Selection to current metasprite
Copy current selection as a metasprite into metasprite editor, into
Copy current selection as a metasprite into metasprite editor, into
the currently selected sprite, replacing its current content.
the currently selected sprite, replacing its current content.


+ auto increment
+ auto increment
Automatically increments current metasprite number after copying.
Automatically increments current metasprite number after copying.


+ skip tile zero
Do not add itle with index 0 into metasprite during copying.
+ merge to existing data
Add the seleciton to current metasprite contents rather than
replace it.
Metasprites
Metasprites


Open metasprite bank

Open bank


Opens a set of 256 metasprites from a binary file.
Opens a set of 256 metasprites from a binary file.


Save metasprite bank
Save bank


Saves a set of 256 metasprites into a binary file.
Saves a set of 256 metasprites into a binary file.


Put single metasprite to clipboard as ASM
Manage
Put single metasprite to clipboard as C
Open a metasprite manager that allows to change order of metasprites in
the bank, delete, duplicate, copy and paste them.
Add tile offset
Works similar to the nametable function, just for metasprite bank contents.
Add X/Y offset
Adds an offset to all sprites in the current metasprite, or in the whole
bank.
Put single to clipboard as ASM
Put single to clipboard as C


Copy current metasprite into the Windows clipboard as an array definition
Copy current metasprite into the Windows clipboard as an array definition
in special format, to be pasted into assembly or C code. The format is the
in special format, to be pasted into assembly or C code. The format is the
same as for similar function for the nametable, explained above.
same as for similar function for the nametable, explained above.


Put metasprite bank to clipboard as ASM
Put bank to clipboard as ASM
Put metasprite bank to clipboard as C
Put bank to clipboard as C


Copy all non-empty metasprites into the Windows clipboard in special format,
Copy all non-empty metasprites into the Windows clipboard in special format,
either in assembly code or C. For the latter, there is a separate const
either in assembly code or C. For the latter, there is a separate const
array for each metasprite, and a list of pointers to the arrays. This
array for each metasprite, and a list of pointers to the arrays. This
function asks a text prefix to be used in the array names.
function asks a text prefix to be used in the array names.




Palettes
Palettes


Open palettes
Open palette


Open palette file.
Open palette file.


Save palettes
Save palette


Save current palette to a file.
Save current palette to a file.


Put to the clipboard
Reset
Grayscale
Default A
Default B
Default C
Default D
Reset currently selected palette to one of pre-defined color sets.
Copy
Paste
Copy or paste palette to/from Window clipboard.
Put to clipboard


Copy current palette data as text into the Windows clipboard.
Copy current palette data as text into the Windows clipboard.


> 6502 assembly code
+ 6502 assembly code
Copy as an 6502 assembly code, series of LDA/STA opcodes
Copy as an 6502 assembly code, series of LDA/STA opcodes
> ASM data
+ ASM data
Copy as a set of db statements.
Copy as a set of db statements.


> C data to clipboard
+ C data to clipboard


Copy as C array definition.
Copy as C array definition.




Import
Import


BMP file as nametable
BMP as nametable


Imports smaller palettized BMP image with 16 or 256 colors, with 256 or
Imports smaller palettized BMP image with 16 or 256 colors, with 256 or
less unique tiles, as a nametable or a map. It removes duplicated tiles
less unique tiles, as a nametable or a map. It removes duplicated tiles
and creates nametable. Only two lower bits of the graphics are used. The
and creates nametable. Only two lower bits of the graphics are used. The
program also attempts to select similar colors from current NES palette
program also attempts to select similar colors from current NES palette
(altered with the color emphasis bits) and create attributes map.
(altered with the color emphasis bits) and create attributes map.
There is two import options that may be useful for importing large
There is two import options that may be useful for importing large
pictures, when pixel-exact import is not imporant, and quality can be
pictures, when pixel-exact import is not imporant, and quality can be
compromised.
compromised.
+ best offsets
+ best offsets
Shifts the source picture for 0..7 pixels vertically and horizontally,
Shifts the source picture for 0..7 pixels vertically and horizontally,
seeking for lowest number of resulting tiles. May save a few tiles in
seeking for lowest number of resulting tiles. May save a few tiles in
some cases, for example, on a mostly black title screen with a logo.
some cases, for example, on a mostly black title screen with a logo.
+ lossy import
+ lossy import
Matching all tlies between each other, dropping out ones that are the
Matching all tlies between each other, dropping out ones that are the
most similar, until only 256 tiles left. Allows to import full screen
most similar, until only 256 tiles left. Allows to import full screen
pictures, but with major quality loss. Current implementation is
pictures, but with major quality loss. Current implementation is
experimental, provides not too impressive results, and is very slow.
experimental, provides not too impressive results, and is very slow.


+ threshold
+ threshold


Throw away tiles with very few non-transparent pixels. To make it work,
Throw away tiles with very few non-transparent pixels. To make it work,
ensure that main BG color actually has index 0 in the BMP file. This
ensure that main BG color actually has index 0 in the BMP file. This
option may give an improvement when used with lossy import.
option may give an improvement when used with lossy import.


BMP file as tileset
BMP as nametable match tiles
Reconstruct a picture by matching its elements to tiles in currently
loaded tileset, without importing new tiles.
BMP nametable into a number of tiles
Lossy import into given number of tiles (1..256).
BMP as tileset


Imports a 128x128 palettized BMP image as a tileset. Nametable remains
Imports a 128x128 palettized BMP image as a tileset. Nametable remains
unchanged.
unchanged.


NES file
NES file


Import a 8K CHR bank from an iNES ROM image. If there is more than 8K of
Import a 8K CHR bank from an iNES ROM image. If there is more than 8K of
graphics in the selected file, you can select which part of the file
graphics in the selected file, you can select which part of the file
should be imported.
should be imported.




Export
Export


Nametable as BMP file
Nametable as BMP


Export current nametable as a palettized BMP file.
Export current nametable as a palettized BMP file.


Tileset as BMP file
Tileset as BMP


Export current tileset as a palettized BMP file.
Export current tileset as a palettized BMP file.


Palette as BMP file
Palette as BMP


Export current palette as a 16x1 BMP palettized file
Export current palette as a 16x1 BMP palettized file


Put CHR in NES file
Put CHR into NES file


Replace 8K CHR bank in a iNES ROM image. If there is more than 8K of graphics
Replace 8K CHR bank in a iNES ROM image. If there is more than 8K of graphics
in the selected file, you can select which part of the file should be
in the selected file, you can select which part of the file should be
replaced.
replaced.




View
View


2x 3x 4x
2x 3x 4x
Select tileset, nametable, and metasprite display scale. There is hot keys,
Select tileset, nametable, and metasprite display scale. There is hot keys,
Ctrl+2..Ctrl+4.
Ctrl+2..Ctrl+4.
CHR Editor
CHR Editor


Show CHR editor window. You can use these keys there:
Show CHR editor window. You can use these keys there:


LMB - set pixel
LMB - set pixel
RMB - set current color to the color of the pixel
RMB - set current color to the color of the pixel
Ctrl+LMB - fill an area with current color
Ctrl+LMB - fill an area with current color
Mouse wheel - cycle through tiles
Mouse wheel - cycle through tiles
Cursor - scroll tile with wrap around
Cursor - scroll tile with wrap around
H - vertical mirror
H - vertical mirror
V - horizontal mirror
V - horizontal mirror
Delete - clear tile
Delete - clear tile
L - rotate 90 degree left
L - rotate 90 degree left
R - rotate 90 degree right
R - rotate 90 degree right


Ctrl+Z - undo
Ctrl+Z - undo
Ctrl+X - cut tile graphics
Ctrl+X - cut tile graphics
Ctrl+C - copy tile graphics
Ctrl+C - copy tile graphics
Ctrl+V - paste tile graphics
Ctrl+V - paste tile graphics






Miscellaneous features
Miscellaneous features


You can place nes.pal file (192 bytes) into the program directory, if you want
You can place nes.pal file (192 bytes) into the program directory, if you want
to customize the colors of the displayed NES palette.
to customize the colors of the displayed NES palette.


You can associate the program with any file types that are supported by the
You can associate the program with any file types that are supported by the
All\Open menu item, and open them by double click.
All\Open menu item, and open them by double click.






File types
File types


There are many file types supported by the program.
There are many file types supported by the program.


*.chr - tile graphics, matches to the hardware format
*.chr - tile graphics, matches to the hardware format
*.pal - palette, 16 bytes
*.pal - palette, 16 bytes
*.nam - nametable, 960 or 1024 bytes, matches to the hardware format
*.nam - nametable, 960 or 1024 bytes, matches to the hardware format
*.map - nametable of non-standard size; last bytes are 16-bit width and height
*.map - nametable of non-standard size; last bytes are 16-bit width and height
*.atr - attributes, last 64 bytes of full nametable
*.atr - attributes, last 64 bytes of full nametable
*.rle - RLE-packed nametable
*.rle - RLE-packed nametable
*.h - standard C header, text format
*.h - standard C header, text format
*.nes - iNES ROM, supported for CHR import and export
*.nes - iNES ROM, supported for CHR import and export
*.bmp - standard graphics format, supported for import and export
*.bmp - standard graphics format, supported for import and export
*.nss - internal text-based format for saving and restoring sessions
*.nss - internal text-based format for saving and restoring sessions




History:
History:


v2.5 09.02.20 - A lot of changes, fixes, and improvements
v2.4 16.11.18 - Metasprite management, rudimentary nametable animation, minor bug fixes
v2.32 03.08.17 - Sprite duplication, group flip, four palette slots, tile density sort, and more
v2.32 03.08.17 - Sprite duplication, group flip, four palette slots, tile density sort, and more
v2.31 05.02.17 - Minor fixes, map size change with keeping its contents
v2.31 05.02.17 - Minor fixes, map size change with keeping its contents
v2.3 03.12.16 - Nametables of different sizes, another batch of fixes and improvements
v2.3 03.12.16 - Nametables of different sizes, another batch of fixes and improvements
v2.21 28.11.16 - Few more hotkeys, fix for the best offsets import option
v2.21 28.11.16 - Few more hotkeys, fix for the best offsets import option
v2.2 25.11.16 - View scale, palette drag and drop, lossy import, many fixes and improvements
v2.2 25.11.16 - View scale, palette drag and drop, lossy import, many fixes and improvements
v2.1 23.12.15 - Tile swap in tileset, with nametable update, tileset import for smaller files
v2.1 23.12.15 - Tile swap in tileset, with nametable update, tileset import for smaller files
v2.04 09.09.14 - 8x16 mode support in the metasprite editor
v2.04 09.09.14 - 8x16 mode support in the metasprite editor
v2.03 03.03.13 - Find/Remove unused tiles functions
v2.03 03.03.13 - Find/Remove unused tiles functions
v2.01 22.01.13 - Metasprite copy/paste and flip, nametable import from files with arbitrary sizes
v2.01 22.01.13 - Metasprite copy/paste and flip, nametable import from files with arbitrary sizes
v2.0 16.01.13 - Metasprite editor, type in feature, minor improvements
v2.0 16.01.13 - Metasprite editor, type in feature, minor improvements
v1.50 28.06.12 - Nametable drawing with current CHR selection, like a brush mode
v1.50 28.06.12 - Nametable drawing with current CHR selection, like a brush mode
v1.49 20.03.12 - Tile flip for 90 degree, sessions, minor bugfixes, better docs
v1.49 20.03.12 - Tile flip for 90 degree, sessions, minor bugfixes, better docs
v1.48 19.02.12 - BMP import now attempts to import palette and attributes, Save all function
v1.48 19.02.12 - BMP import now attempts to import palette and attributes, Save all function
v1.47 21.01.12 - Swap banks feature, minor bugfix for tileset import from BMP
v1.47 21.01.12 - Swap banks feature, minor bugfix for tileset import from BMP
v1.46 20.01.12 - BMP export is now 16-color, BMP as a tileset import is added
v1.46 20.01.12 - BMP export is now 16-color, BMP as a tileset import is added
v1.45 18.01.12 - CHR import/export for NES files, some other features and minor bugfixes
v1.45 18.01.12 - CHR import/export for NES files, some other features and minor bugfixes
v1.44 22.12.11 - Optimize didn't worked properly for the second bank
v1.44 22.12.11 - Optimize didn't worked properly for the second bank
v1.43 04.12.11 - Number of selected tiles now displayed in the info box
v1.43 04.12.11 - Number of selected tiles now displayed in the info box
v1.42 10.10.11 - Attributes table could be saved in a separate file
v1.42 10.10.11 - Attributes table could be saved in a separate file
v1.41 02.08.11 - Filenames of files opened through Open or double click are put into save dialogs
v1.41 02.08.11 - Filenames of files opened through Open or double click are put into save dialogs
v1.40 31.07.11 - Correct work with files that contain dots in path
v1.40 31.07.11 - Correct work with files that contain dots in path
v1.39 30.07.11 - Fixed wrong file extension and CHR size that was suggested sometimes
v1.39 30.07.11 - Fixed wrong file extension and CHR size that was suggested sometimes
v1.38 27.07.11 - Put block as a metasprite into clipboard function
v1.38 27.07.11 - Put block as a metasprite into clipboard function
v1.37 01.07.11 - Attribute checker
v1.37 01.07.11 - Attribute checker
v1.36 26.06.11 - Save and copy nametable to clipboard as C code
v1.36 26.06.11 - Save and copy nametable to clipboard as C code
v1.35 04.06.11 - Tileset and nametable export as bitmap files
v1.35 04.06.11 - Tileset and nametable export as bitmap files
v1.34 16.05.11 - CHR import from NES files, supports 24K and 40K ROMs
v1.34 16.05.11 - CHR import from NES files, supports 24K and 40K ROMs
v1.32 10.05.11 - Autofix for unsafe color $0d in palettes, color emphasis display
v1.32 10.05.11 - Autofix for unsafe color $0d in palettes, color emphasis display
v1.31 18.01.11 - Minor fixes and some small features
v1.31 18.01.11 - Minor fixes and some small features
v1.3 03.01.11 - Bugfixes, some new features
v1.3 03.01.11 - Bugfixes, some new features
v1.23 11.12.10 - CHR redundancy optimization
v1.23 11.12.10 - CHR redundancy optimization
v1.22 10.12.10 - Copy/paste tile groups in tileset
v1.22 10.12.10 - Copy/paste tile groups in tileset
v1.21 09.12.10 - One-step undo
v1.21 09.12.10 - One-step undo
v1.2 08.12.10 - 1K, 2K, and 8K CHR files support, additional features for CHR editor
v1.2 08.12.10 - 1K, 2K, and 8K CHR files support, additional features for CHR editor
v1.12 07.12.10 - Copying parts of the nametable in the clipboard as text
v1.12 07.12.10 - Copying parts of the nametable in the clipboard as text
v1.11 06.12.10 - Detailed information bar
v1.11 06.12.10 - Detailed information bar
v1.1 05.12.10 - Minor fixes and improvements, open all, nametable copy/paste functions
v1.1 05.12.10 - Minor fixes and improvements, open all, nametable copy/paste functions
v1.0 04.12.10 - Initial release
v1.0 04.12.10 - Initial release






Mail: shiru@mail.ru
Mail: shiru@mail.ru
Web: http:// shiru.untergrund.net
Web: http://shiru.untergrund.net
Donate: http://www.justgiving.com/Shiru
Support: https://www.patreon.com/shiru8bit