Hi! 8x8 attributes and banked tiles are planned for (wether mmc5, rainbow mapper, or anything else), but it may take a long while.
I'm struggling to find the time/finances to do significant features at this time, so i might have to take the financing of version 4.0 to kickstarter. I'm working it out, so we'll see!
FrankenGraphics
Creator of
Recent community posts
Thanks! It seems that while most graphics editors settle for PNG-8 for indexed formats regardless palette count, at least Fireworks will optimize for the unusual PNG-1 format. It's plausible some other editors i don't know of do that too.
I've added handling for importing 1-bit PNG images, it's going to be in the next release.
(3rd part)
"Bug Report:"
thanks for reporting this.
It turns out in this particular case, what happens is when you paste nametable to chr (nexxt accepting this is relatively new - it works by looking up what tiles the nametable references, and then copy those tiles to the new position in the tileset), having a copy selection larger than can fit 256 tiles will crash, because the copy buffer never was designed to handle copies larger than one tile set. I've increased the buffer to deal with 4x more tiles gracefully, and if you exceed *that* it will simply warn you and not proceed. But this should be difficult to even encounter.
So, this bug should be resolved now.
Thanks! I'll reply to just the issues i have a direct answer to for now, the others will require more research on my part.
"When importing the PPU to NEXXT, the desired screen is not always in the main "tilemap" sector. "
As of v3.0, you can select to import a specific nametable from a dump.
Choose "PPU dump (options)..." from the menu, then pick your file as usual.
You will then be shown this dialogue. Pick the "nametable source" option that suits you best (likely "1 (@ $2400)" in your shown case).
CHR Import from NES ROMs:
Old versions of NEXXT (and nesst) assumed importing from an NROM game, even though it could import from some other mappers two, this held the interface back by always importing a pair of tilesets at a time. Not all games are organized that way.
Later versions of NEXXT changed so you import 4k (256 tiles or 1 set) at a time.
This also meant the right side field was redundant, and was repurposed:
-The left side is your NES ROM file, and "bank" chooses which set to load.
-The right side represents a "set" in your current session, which is the target you're going to overwrite (if there's anything at all to overwrite, that is).
To insert both a background set and a sprite set into the same session file (usually it's just easier to keep them in separate sessions, but you can), you would repeat this action twice, first loading one tileset from ROM into set A, and then, another into set B on a second round of import.
"No, I didn't know it was possible to import OAM."
As of v.3, it "kind of" is - but there's no dedicated editing surface for raw oam.
Instead it will be interpreted as a metasprite, which will often be impractical, since the metasprite editor is designed to work with relatively small objects (a player character, etc).
A proper OAM editor is planned for the future.
"Dr. Mario in the format used by MSB (it practically just adds FF at the end of each sequence"
At least this part can be set in NEXXT so you don't have to do it externally:
Thanks for the detaoled report!
I'm going to reply to roughly half the points at this time, to keep it managable.
- "Fails if the image has fewer colors than expected, is too small, or, as in the screenshot, for unknown reasons."
I need more details. Let's begin with how it's failing. Common modes of failure are:
-silently ignore loading the asset.
-expected and designed warning messages (ie. it says something like "must be at least this size large", "must be a multiple of 8", "must be 4bpp or 8bpp").
-system error message ("access violation", "division by 0")
-freezing
-crashing (meaning, exiting unexpectedly)
Then, i'll need to know which filetype (.bmp, .png, ideally what bitdepth, what dimensions. In fact, feel free to attach the failing file). - "Navigation locks up when importing images, except for vertical scrolling with the mouse wheel, making it hard to see the result."
[ Shift + Wheel] lets you scroll horizontally; this also works while locked in the import dialogue.
That said, i'll make a note to see if i can loosen up more modes of scrolling.
Additional tip: I recommend opening the navigator prior to importing, for a good overview. It can be a bit tricky to find a good space for it on screen beforehand, but it helps. - "You can export the visible screen but can't crop the canvas from the visible area."
Sorry, I did not understand what this refers to. Perhaps i should ask:
What is it you want to do?
Meanwhile: you can export the whole map, you can export the visible screen, and you can export a selection. You can't import to a selection. You can make positive selections on the canvas, but you can't "cut out" a negative selection from canvas. - "It's not always possible to access all the graphic content of an NES ROM."
I'm not exactly sure what circumstances this refers to, but there are a few known limitations:
NEXXT currently only looks for graphics in CHR ROM, but some games store graphics in PRG ROM (for CHR RAM based games). These circumstances often have one or two, sometimes both problems:
-The chr data is compressed
-The chr data is at an unexpected offset.
NEXXT currently doesn't have the advanced controls to deal with these cases, in which case i would recommend extracting them in YY-CHR or game-specific extractor tools first. - "It would be ideal to import CHR directly from other NSS files. "
I'll see if i can add additional methods for this.
There are currently two workarounds:
-Method 1: Just open a second instance (shift + ctrl + n), open the nss there, then copy the CHR over to your first instance.
-Method 2: use the Pipelines Assistant (shift + ctrl + F8): link up another session or chr file to your session, and toggle "view / edit" ON. While you're in this linked view / edit mode, several sessions share the same CHR bank, and all of them have editing privileges. This is advanced use, and you should keep backups to minimize mistakes, but this helps you have 1 canonical chr set for several assets. - Option to share CHR between instances. (7)
See above point, method 2. - "The Metasprites screen isn't prepared for some real NES sprite cases, as seen in the screenshot where Mario's hand appears in the opposite sector, and other objects can be outside the visible work area."
Is that an OAM dump? The metasprite editor can load such cases, which is new, but it's not designed to actually edit raw OAM. That is for a future tool which focuses on OAM overlays specifically.
Ideally, metasprites shouldn't have such extreme offsets as in that GIF. - " The worst error occurs when the work area focus suddenly shifts to the Tileset when pasting screen data."
If you can record this happening, that'd be appreciated.
Without knowing, i'm maybe guessing it could be this:
The rule of thumb should be, as long as there is a nt/map selection, that takes priority. If you deselect the map (can be done with either the deselect command or by shift clicking the tileset, for example) , focus is automatically restored to the tileset.
----
As a request, could i ask you to go back and annotate under each GIF what context each is supposed to refer to/happen in?
As an addition to the previous answer, if you're curious about the inner workings of the NES palette. The picture processor produces hue differences 30 degrees apart. It just so happens that both the closest colours to pure red are 15 degrees "off" in either direction, so you have a cold 'royal' red and a 'rusty red', but no lego toy red.
The difference in the tileset you're referencing, and the red colours you can see in NEXXT, is probably because the two have been using different emulator palettes.
Some background:
On the NES, there is no 'true' RGB interpretation of its system palette, because it's generated in the analogue domain in a wholly different way. So instead, you have all these different emulator palettes that are different persons' interpretations of what they wanted the colours to look like.
Some are worse than others in terms of accuracy, and it can be difficult to trace the internet genealogy of bad palettes. FCEUX standard palette is one such inaccurate palette, though, which has some strongly misinterpreted colours, including a really vibrant slightly brownish red that mismatches the vibrancy of the rest, and that just doesn't exist on a real NES, among other problems. I can only guess, but that could be a possible source of the red you've seen in the reference tileset.
Now, some hands-on tips:
If you want to replace the system palette in NEXXT, take your favourite palette from an emulator (a .pal file, should be 192 bytes large), rename it "nes.pal", and place it in the same folder as NEXXT.exe. The next time you start it, it'll use that palette instead of its internal one.
Some personal recommendations are unsatured v6.pal and fbx_smooth.pal, which are balanced, and often bundled with popular emulators.
Sometime in the future, i'm going to make this process smoother by having a built in system palette browser, but i can't give a timetable.
Hi, and thank you.
Long story short, i love snapped half-windows, and i've thought about it.
It might happen one day, but it won't be soon, due to a few technical roadblocks.
Long version:
-NEXXT builds on the same legacy GUI library as NESST, and it hasn't received updates since the 00s. As it turns out, maximized forms encounter often encounter weird performance issues when this particular library meets the two latest versions of Windows, so i'm avoiding a situation where those issues can surface.
-The ui was designed statically, ie there aren't any dockable modules to place within a parent window. This makes development easier, but transitioning to a docked fullscreen environment would require extensive rework of all the forms. There's also the design issue that nexxt/nesst are made with using multiple instances in mind, so it kind of works best with cascaded windows anyway. Split-window would be a nice compromise to that, but again, there'd be significant rework involved.
The fix to issue 1 is to port the project from Borland Builder to Embarcadero RAD tools (its direct successor) but that entails lots of work and a costly license.
For the time being, i'm focusing on more high-gain, low-risk features until enough reasons to port it have amassed (this is also an if, rather than a when. I keep it in mind, but it must become feasible for me first).
The action only refers to CHR, that is, tile/pattern data. Each NES game uses its own convention to store nametable data (the table that holds which tile goes where on screen) in various ways.
This is outside the scope of NEXXT, which focuses on creating original assets for new games (even if it can be used partially for romhacking too).
To give some pointers where to go next, i suggest using FCEUX to figure the nametable for the titlescreen out:
1) In fceux, load your game.
2) Go to Menu > Debug > Nametable viewer
3) In Nametable viewer, hover the mouse over some easily identifiable tiles. Go left to right with the mouse as you note down their tile ID:s in a notepad.
4) Copy the string of tile ID:s from your notepad.
5) Again in fceux, go to Menu > Debug > Hex Editor
6) select View > ROM file
7) go to Edit > search...
8) Paste the string. If lucky, there's a match in ROM. Now you're very likely to have found the spot in the ROM where that nametable data is stored. You can compare the surrounding hex values with the contents of the nametable viewer to make sure.
9A) If you're extra lucky, it's a raw nametable without any compression. In this case, you can use fceux hex editor to directly insert .nam data from NEXXT into the rom here.
9B) It's also common for title screens to be RLE compressed (or other compression method). Then you'll often find that a row of blank tiles is denoted 00 00 20 or some such, to save space. (00 is the escape character, 2nd 00 the actual character to put, and 20 (in hex) the number of same tiles to draw).
10). Lastly, save a copy of your edit, and load that copy. You always need to reset or reload before seeing the changes in-game.
Best of luck!
On another note; be aware that the "put CHR in game" action is Old Code(tm) that the original author of NESST implemented for his specific goals. It copies a whole 8KiB to the ROM, which usually is 4KiB more than you'd want in most cases. Now that i'm aware of this, i'm going to change it so that just the currently active (visible) tileset in NEXXT gets copied to the specified address in future versions.
Hi! I think you may have better luck with a tool called I-CHR, which can take a PNG sequence and interpret them as NES resources. It even bakes an NES ROM if successful!
https://kasumi.itch.io/ichr
NEXXT is primarily a studio for creating NES graphics in it, and its import features are mainly for moving static images between other softwares and it.
So, while possible, it's quite manual, repetetive and inconvenient when I-CHR can solve this task in a single action.
Thanks! That clears it up.
The output *is* the intended behaviour. It takes the attribute byte of each 4x4 tile region on the map and outputs it, going left to right, iterated top to bottom. This results in 4096 bytes representing the entirety of the map.
I'll look into an action for just saving current selection. Pressing ctrl+a once, that means the currently viewed portion of the screen.
Additionally, the file helped me find another bug: It seems the status readout bar provides wrong data element on maps that aren't exactly 1 screen wide. Thanks for providing the opportunity!
I'm not saying i'm putting your judgment into question. Apologies if it came across as that. It's just that i need to narrow it down and double check to make sure what the problem is behind the phenomenon of it, so to speak, and where it may be located.
Hm. The file link says "special stage", but the file i'm getting clicking on it is the one containing your custom icons. Strange.
In any case. This is another possibility: A canvas size of 256*256 means attribute data equivalent to 8 by 8 screens, that is 64 bytes * 64 screens. Or 4096 bytes in total.
The .byte emissions in your screenshot seems to be 16 byte statements (correct) * 256 lines. In other words, 4096 bytes.
It would seem to me the attribute data is correctly sized.
That is, Unless you want the attribute data for a single screen, rather than for the total of your session.
In that case, you (currently) need to copypaste a screen-sized selection over to a secondary instance of NEXXT, whose canvas size is 32x30 or 32x32, and then export that to .asm
Let me know if that's helpful. Meanwhile, I'll put it in my todo list to look over more options that could make this process faster and more intuitive.
As of v.0.22 (now uploaded), the menu action is more appropriately named "save canvas as ASM" instead of "save screen as ASM".
I'm still not sure what's going on there. When i try to replicate the problem, i get consistent results: 64 bytes of attribute table if exporting for a single screen, 128 bytes for 2 screens, and so on.
First step, make sure you're using "save screen as asm". The "+ include names" and "+ include attributes" in the options submenu only govern the two actions belonging to the same subsection below the menu divider.
If that still fails, i recommend you send me the session file so i can have a look at what's going on. If there's a bug, the file will help me point me to it.
Yeah unfortunately Somewhere around 8 by 8 or more screens performance starts to scale poorly. Especially the Navigator is problematic so i recommend using it sparingly on such large canvases, until i've found good ways to avoid redundant calculations.
That the tileset selection should be affected by this is more than just a performance issue, though. I'll make a note to look into that specifically. Thanks for the report!
It's unlikely at this time, unfortunately. However, i've had positive reports on it working decently on Wine for MacOS and Linux users.
There has been a few attempts to port it in the past and they've been more or less abandoned by its fork maintainers. NEXXT and its predecessor is built on an antiquated framework that makes it troublesome to port. I would like to say i might turn to the issue once i have little else left on my roadmap, but making promises that far into the future seems unsound.
That does seem like a bug. I'm not able to reproduce it, unfortunately.
If you provide the session file, i can have a go at solving the mystery.
In case you prefer to do it in DM:s, my discord ID is FrankenGraphics#3272
It's certainly possible to have a look at expanding some clipboard actions in that regard. I can't say when that might happen, but it's already an item on my todo list. :)
Hi!
There was a bug in one of the previous versions where these actions you're looking for didn't perform as intended.
This may be the source of your troubles.
This has since been fixed, but i don't remember in which version, so be sure to download the latest.
In either case, you'll find the corresponding action under File > Canvas (.nam or .map) > Save screen as ASM ( or > Save screen as C header).
The options to toggle saving nametable data and attribute table data on and off is in the + options submenu, just below.
Unfortunately, this a bit out of scope both for NEXXT, and for my own personal expertise.
The only further advice i can give would be join the SMW central community, and to browse through its resources: https://www.smwcentral.net/
Hi! I'm not aware of one at this time (which isn't to say there isn't one, but i haven't heard of it). Unless this changes, i'd probably use a generic, well-featured pixel art tool like Aseprite in indexed mode, and rely on converting the assets instead.
You can use NEXXT *somewhat* for simple 2bpp mode background graphics for the SNES too (for example mode 0 graphics, like SMW uses), but you can only edit one layer at a time then. And you need to supply your own system palette to replace the default one.
YY-CHR has multiformat tile editing that works for the SNES as well, but it doesn't have the best layout capabilities, so it's virtually no good for level design.
I might expand NEXXT to deliberately cover some areas outside the NES in the future (that doesn't act counter its main objective interfacewise), but for now all attention is on making it better for NES graphics use.
Although this has been answered on my private discord, i thought i should address it here too in case someone comes across with the same question:
-For NESmaker users, i think the easiest method is using the .chr import feature instead
-Right now, if not wanting to do that, you can define an emulator palette (192 bytes) as black, red, green, blue on the 4 brightness tiers and put it as nes.pal in NEXXT:s home folder. Then, go to palettes > system palette > external [...]. Then you can export that as BMP.
-A system palette browser is on the roadmap. It's a medium-priority feature. (Examples of higher priority features is a metatile tool & a working metasprite animator).