Advertiser Content

Tool Nameless Sprite Editor 2.X

Started by link12552 June 2nd, 2011 4:49 PM
  • 185593 views
  • 184 replies

link12552

decade club

Age 23
Male
The blue one
Seen 3 Weeks Ago
Posted August 19th, 2018
205 posts
11.8 Years


Download Nameless Sprite Editor Here
Overview:

Nameless Sprite Editor 2.X is a tool used to thoroughly edit the graphics in ALL GBA ROM's.
With a combination of unparalleled features, a comfortable interface and limitless expandability, NSE provides unprecedented power.
Still being actively developed NSE 2.X is what you need
- and best of all... It's Free!

Region Support: Universal (Can edit any GBA game)

This tool is currently written in C# and will require the latest .net framework to function properly.

-Link12552


Version: Beta 2.0.1 pt1


Features:
  • Edit the graphics stored in the ROM
  • Super Fast load AND draw times vs NSE Classic
  • A navigator with dynamic preview
  • Grayscale
  • Full support for 16 and 256 color graphics
  • Full support for standard and Lz77 compressed data
  • Real time turbo decompression
  • Perfect, Nintendo-Quality, Compression (NSE 2.X will shrink data to as small a size as possible)
  • Re-pointing functions
  • ADVANCED Re-pointing with select-able offsets
  • SAFETY Re-pointing (offsets will end in multiples of 4)
  • Full Expanded ROM support (up to 32MB)
  • A BookMarking engine (unlimited bookmarks and folders)
  • Support for multiple BookMark files (*.nbmx)
  • Full NSL (Nameless Sprite Library *.nslx) support
  • Export sprites as indexed Bitmaps or store entire collections in a NSL
  • Import data from BMP's, PNG's, NSL's, ACT's (all with support for 16 an 256 color support)
  • Import ACT's from VBA to make editing 256 color images practical
  • Saving with free-space, auto-abort, SAFETY Re-pointing, and automagic BookMark correction!
  • Edit multiple sprites at once
  • Pencil, Re sizable Brush, Fill-Bucket, and Eyedropper
  • Real-time Palette Editing
  • X and Y Rulers
  • 10x Zoom Ctrl +Scroll or Ctrl+/-
  • Undo and Redo incorporation (Ctrl+z and Ctrl+shift+z)
  • Color swapping(ctrl) and alternating(alt) (click in palette editor)
  • Insert/Inject Image and palette data (normal or compressed)
  • PLUGINS!!! Make NSE do anything! Plug-ins are written in any .net language (C#, C++, J#, VB.net) and have full access to all NSE libraries
  • Random acts of kindness, you'll see :)
  • A ton more and more on the way!



Action Shots:

The New Interface:

The Navigate Window:

Importing a Nameless Sprite Library:

The Palette Tool:



Other:

Banner:
[URL="www.pokecommunity.com/showthread.php?t=253701"][IMG]http://i443.photobucket.com/albums/qq151/link125552/Ribbon.png[/IMG][/URL]


Download Nameless Sprite Editor Here



.net 4.0 framework Microsoft Download: http://www.microsoft.com/download/en/details.aspx?id=17851

Full Metal

C(++) Developer.

Age 24
Male
In my mind.
Seen August 19th, 2018
Posted May 27th, 2017
806 posts
11.8 Years
Well, while you're doing things with plugins...
How's a tilemap editor sound? :)
( I would write one, but I haven't a slightest clue where to start as far as making a plugin goes. { Feel free to point me in the right direction? :) }

★ full metal.

I like to push it,
and push it,
until my luck is over.

Shiny Quagsire

I'm Still Alive, Elsewhere

Age 21
Male
Hoenn Safari Zone
Seen 4 Days Ago
Posted April 17th, 2017
700 posts
10.4 Years
The plugin system will be interesting. :)

I might look into developing a few plugins.

link12552

decade club

Age 23
Male
The blue one
Seen 3 Weeks Ago
Posted August 19th, 2018
205 posts
11.8 Years
This is BEAST!!!!! You should make it so we can edit title screens and tiles... or is that too much..?
Anything really is possible now.

Well, while you're doing things with plugins...
How's a tilemap editor sound? :)
( I would write one, but I haven't a slightest clue where to start as far as making a plugin goes. { Feel free to point me in the right direction? :) }
This is actually easily possible in the new NSE.
The drawing and Lz compression functions could make this really simple.

Although I should add access to creating new editor forms from within a plugin... I'll add that sometime really soon

The plugin system will be interesting. :)

I might look into developing a few plugins.
Both of you, that's awesome. :)

-and for all developers

I'll attach the source code to an exmaple plugin for you to look through.
Most of it is pretty straight forward, I even commented the steps.
When making a plugin, you get access to ALL of NSE's core functions by referencing the NSE Framework.dll.

Best of luck, and please ask or PM for help and suggestions
(Even things you would like to see added to plugin support, I allready metioned how I have to add access to the editor form, the one that shows up after you navigate)

-Again best of luck

p.s. today's my b-day (I'm 15 now :)), so it might take a couple of days fo the next update, especially with finals.

Weavile05

Currently Hacking BW

Male
North Carolina
Seen December 5th, 2011
Posted November 28th, 2011
1,431 posts
9.4 Years
Awesome man, Awesome. I'll be sure to use it once I officially start hacking again...
EDIT: Ok how do I find the sprites to edit them? I used to be able to do this in unLzGBA when I first tried it but I must've forgotten... I'm using a FR ROM btw.
EDIT2: Nevermind, figured it out. Are you gonna make it so that we don't have to know the offset and we can look up the image number like in unLz?
In progress

Hoenn, 1 Badge
My Youtube Channel: Check out my Pokemon Red Walkthrough
Pokemon White FC: 2322 5491 2643

link12552

decade club

Age 23
Male
The blue one
Seen 3 Weeks Ago
Posted August 19th, 2018
205 posts
11.8 Years
Awesome man, Awesome. I'll be sure to use it once I officially start hacking again...
EDIT: Ok how do I find the sprites to edit them? I used to be able to do this in unLzGBA when I first tried it but I must've forgotten... I'm using a FR ROM btw.
EDIT2: Nevermind, figured it out. Are you gonna make it so that we don't have to know the offset and we can look up the image number like in unLz?
Yep, currently you have to use the naviagtor and provide the offsets.
There will be somthing similar to unLz's naviagtor for lz compressed sprites, maybe in a plugin (wouldn't be too hard).

The big plan is to bookmark Every Single Sprite (or atleast the important ones), so you'll never have to know an image number ever agian, you'll be able to just pick it from the bookmarks window.
The bookmarks are going to be allot more complicated than the old NSE,
I expect there will be reading of rom pointers and tables involved.

Wow!
This looks good! I always used you NSE1X for my overworld editing now it can do so much more! <3
Good work Link (trying out now) xD
Thanks, but play gentle it's just an alpha :D

Oh... My.... Arceus....

This is looking awesome so far, you sir deserve a reward.
On another note I shall be checking back in every so often to view progress.
I'll be sure to keep updating, and expecting a reward!

---------------------------------------------------------------------------

Now a question for everyone, slightly more so towards developers, should I implement a solution/project system? (Similar to Visual Studio, Dreamweaver and other large programs)
-this would replace the simpler "open rom" that everyone is used to with a more complicated "open project"



Pros:
  • NSE could keep track of every sprite you've ever eddited
  • You could leave sprites unfinnished (they would be saved to the project file), and save them to the ROM when you have finnished (means less repointing)
  • NSE could track and adjust to any pointers that have been changed(Means that if you repoint ,say charizard to 0x900000, the bookmarks would automagically reflect this change)
  • Bookmarks would be stored in project files, along with other data.
Cons:
  • No more simple "open rom"
  • You won't be able to easily have multiple copies of the same rom
  • You have another filetype to worry about, and whenever you wanted to edit you'd have to use the project file
  • Redistribution of projects would be weird
  • Project files and ROMs would have to stay in the same folder.
Input, suggestions, ideas?
-I kind-of need to decide before continuing

-link12552

Weavile05

Currently Hacking BW

Male
North Carolina
Seen December 5th, 2011
Posted November 28th, 2011
1,431 posts
9.4 Years
I guess for now I'll just use unLz to look up the offsets.

As for the question, there ARE more Cons than Pros, so I would say no, unless the pros turn out to be WAY more prominent than the cons. Personally, I prefer it simpler, and no more simple open rom is one of those cons. Plus, I don't plan on doing any repointing, so that Pro would be irrelevant to me.

Long story short, I personally say no.
In progress

Hoenn, 1 Badge
My Youtube Channel: Check out my Pokemon Red Walkthrough
Pokemon White FC: 2322 5491 2643

Shiny Quagsire

I'm Still Alive, Elsewhere

Age 21
Male
Hoenn Safari Zone
Seen 4 Days Ago
Posted April 17th, 2017
700 posts
10.4 Years
The big plan is to bookmark Every Single Sprite (or atleast the important ones), so you'll never have to know an image number ever agian, you'll be able to just pick it from the bookmarks window.
I believe I can help. I still have my old bookmarks file, and I've added a bunch of stuff. Weather, the each sprite for the intro scene with pallets, the Intro Message pikachu, and some others like the graphic for Surf.

Also, I cannot wait for the ability to open an editor window from a plugin. That's when I can really make some good plugins. :)

Darthatron

巨大なトロール。

Age 28
Male
Melbourne, Australia
Seen February 2nd, 2015
Posted October 28th, 2014
1,152 posts
13.8 Years
Key features this is missing:
  • Undo/Redo
  • Scrolling Zoom - in fact, the entire idea of Alt+Up/Down is annoying. You should stick with the standards here (Ctrl++/-)
  • 9-digit offsets
  • Dock-able palette
  • Palette editing
  • Multiple palette switching
  • Easy option to load full ROM

Also, the way the drawing works seems off. It should redraw the image from the data every time, rather than just drawing new pixels - when fully zoomed in you get little strands that don't get over written. It looks weird.

The concept is great, though. If you need any help with anything, let me know. I've been programming for 6 years and study it at university.
あなた は しきしゃ です
わたし は ばか です

link12552

decade club

Age 23
Male
The blue one
Seen 3 Weeks Ago
Posted August 19th, 2018
205 posts
11.8 Years
I believe I can help. I still have my old bookmarks file, and I've added a bunch of stuff. Weather, the each sprite for the intro scene with pallets, the Intro Message pikachu, and some others like the graphic for Surf.

Also, I cannot wait for the ability to open an editor window from a plugin. That's when I can really make some good plugins. :)
That's excelent, a better bookmark system will certainly be a major feature.
I've also finnished the ability to open an editor from within a plug-in. I actually converted the editor into a controll that can be placed on a form, and have it's properties changed like you would any controll.
The way I have it set up, there is a host command you can call, that will set the current editor for NSE to use.

 
Host.SetEditor(ref NSE_Framework.Controls.Editor Editor)
I might also allow access to referencing the NSE.exe, so you can create or use any form you want (Editor Forms, Naviagtors, Dialogs, really anything you see in NSE)


So how do we bookmark the sprites? Or is that unfinished?
Currently you can't, I need to know how people wan't me to handle files (projects or how it's been, see my previous post) before I can work on bookmarks






Key features this is missing:
  • Undo/Redo
  • Scrolling Zoom - in fact, the entire idea of Alt+Up/Down is annoying. You should stick with the standards here (Ctrl++/-)
  • 9-digit offsets
  • Dock-able palette
  • Palette editing
  • Multiple palette switching
  • Easy option to load full ROM
Also, the way the drawing works seems off. It should redraw the image from the data every time, rather than just drawing new pixels - when fully zoomed in you get little strands that don't get over written. It looks weird.

The concept is great, though. If you need any help with anything, let me know. I've been programming for 6 years and study it at university.
-I'm certaintly going to add Undo/Redo, hopefully more effecient than NSE Classics's old text-based system, and I originally wanted to do Ctrl + & - for zoom, but I also wanted to use the MainMenu shortcut property (which doesn't allow this for some strange reason) I'll see what I can do though... I'll also try to add scrolling zoom.

-I'll soon add support for offsets up to whatever the ROM's physical length is.

-A dockable palette would be a great idea :)

-As for palette edditing, I'm working on it, I'm going to hopefully do something with a color wheel based approach I've been working on.

-Palette switching is something I'm working on, loading palettes for edditing and importing from indexed images, .nsl (I'm working on a new format), and exported palettes from VBA (should make 256 color easier)

- I might will make a plugin to work like Tile molster, really the only reason I showed that pic of the entire rom opened was to show how fast NSE's new engine is. The sprite class isn't really meant to handle sprites that GIANT)
Now for the pianting interface, I know the bug exists (and it is quite annoying).

Now for the 0.5f px strands, the problem exists with the scaling function in .net (NSE draws a regular sized version and then up-converts it), but I seemed to have solved it, so in the next update it should be fixed.
I don't want to redraw the entire sprite again, because it's inefecient to A) redraw everything B) lock the bitmap to memory for edditing.

I wil be sure to ask any questions that will occur, so thank you :)


-Any other suggestions, comments, ideas, please post.

Full Metal

C(++) Developer.

Age 24
Male
In my mind.
Seen August 19th, 2018
Posted May 27th, 2017
806 posts
11.8 Years
Implement both.
For ROMS:
load bookmarks from:
standard INI file
specific INI file ( possibly ) found in the ROM's directory.
For projects, just store it in the project file. :)
( Use sqlite for your project files? Just a suggestion. Use the BLOB to store sprites )

★ full metal.

I like to push it,
and push it,
until my luck is over.

Dragonflye

Author of Pokémon Sovereign of the Skies

Age 24
Male
Seen 5 Days Ago
Posted October 9th, 2018
85 posts
9.8 Years
I do not know if that was mentioned, but I would hope that it has an INI file, where you can specify the unknown pointer 1 and 2. Because I am a German hacker and would find it much easier if he would do it. The offset must not look for her, you would need an INI indicating where the stop. That would be a great relief.

And I would be grateful if the new NSE would work with 7-digit offset.
Betsimmt some things you have mentioned.

I apologize for the bad English, I'm not very good at it.

Yours sincerely,
Dragonflye

Meta Paradox

Researching FireRed...

Male
Seen July 18th, 2011
Posted June 22nd, 2011
56 posts
8.5 Years
While NSE 2.X will be the hottest thing in cool (huh?), I certainly will NOT throw NSE Classic out in the dump (hmm... Recycle Bin. :D). NSE Classic is still a good tool on its own, but still, heads up to Link for making an even better graphics editor! :D
Meta Paradox On The Web:
http://metaparadox.webs.com/

link12552

decade club

Age 23
Male
The blue one
Seen 3 Weeks Ago
Posted August 19th, 2018
205 posts
11.8 Years
Implement both.
For ROMS:
load bookmarks from:
standard INI file
specific INI file ( possibly ) found in the ROM's directory.
For projects, just store it in the project file. :)
( Use sqlite for your project files? Just a suggestion. Use the BLOB to store sprites )
Projects would probably just be progromatically reflected xml files (Similar to how visual studio makes a project file)
-but then sprites would be stored outside the project file... I'm actually not familiar with sql, I might have to look into it... or just ask you...

Anywhoo, I've already finnished the new nsl system, now *.nslx, using reflection, and it works quite well.

It looks something like this, in fact this is it:

Spoiler:


using System;
 
 
using System.Collections.Generic;
 
 
using System.Linq;
 
 
using System.Text;
 
 
namespace NSE_Framework.IO
 
 
{
 
 
    [Serializable()]
 
 
     public class SpriteLibrary 
 
 
    {
 
 
        byte[] nslx = {1,0,0,0};
 
 
        public byte[] NSLx
 
 
        {
 
 
            get { return nslx; }
 
 
        }
 
 
        public List<SpriteSet> Sprites;
 
 
        string origin = "GBA";
 
 
        public string Origin { get { return origin; 
} }
 
 
        public SpriteLibrary(string Origin)
 
 
        {
 
 
            this.origin = Origin;
 
 
            Sprites = new 
List<SpriteSet>();
 
 
        }
 
 
    }
 
 
    [Serializable()]
 
 
     public class SpriteSet 
 
 
    {
 
 
        public NSE_Framework.Data.SpritePalette Palette;
 
 
        int width;
 
 
        public int Width
 
 
        {
 
 
            get { return width; }
 
 
            set { width = value; }
 
 
        }
 
 
        int height;
 
 
        public int Height
 
 
        {
 
 
            get { return height; }
 
 
            set{height = value;}
 
 
        }
 
 
        public string Name = "Sprite Set";
 
 
        public List<SpriteData> 
SpriteData;
 
 
        public SpriteSet(string Name, 
NSE_Framework.Data.SpritePalette Palette, int Width, int Height)
 
 
        {
 
 
            this.Name = Name;
 
 
            this.Palette = Palette;
 
 
            this.width = Width;
 
 
            this.height = Height;
 
 
            SpriteData = new 
List<SpriteData>();
 
 
        }
 
 
    }
 
 
    [Serializable()]
 
 
     public class SpriteData
 
 
    {
 
 
        public string Name;
 
 
        public byte[] Data;
 
 
        public bool Compressed = false;
 
 
        public SpriteData(string Name, byte[] Data, 
bool Compressed = false)
 
 
        {
 
 
            this.Name = Name;
 
 
            this.Data = Data;
 
 
            this.Compressed = 
Compressed;
 
 
        }
 
 
    }
 
 
}


It works like this:
You create a new Library simply by providing an origin (NSE reads 18 bytes from 0xA0 and converts it to a string)
Then you create a new spriteset, specifying the name, palette, width and height: and add it to the library.
Next you create a new SpriteData for each "frame" or sprite with the same dimensions and palette, possibly compress them, and add them all to the spriteset.
Repeat as nessesary, you can keep adding new SpiteSets to the Library.
Finnaly export it using the binary serializer.

So: Library>> SpriteSets >> SpriteData(s)


I do not know if that was mentioned, but I would hope that it has an INI file, where you can specify the unknown pointer 1 and 2. Because I am a German hacker and would find it much easier if he would do it. The offset must not look for her, you would need an INI indicating where the stop. That would be a great relief.

And I would be grateful if the new NSE would work with 7-digit offset.
Betsimmt some things you have mentioned.

I apologize for the bad English, I'm not very good at it.

Yours sincerely,
Dragonflye
NSE will support INIs, but I plan on just reading constant pointers from the ROM, thus eliminating the need for you to specify offsets.
(this is assuming, that moved data has been repointed properly, hence the reason for including them anyways)

I'm actually, at the time of posting, am working on more than 7-digit offsets.
When you create a new read object it stores the files size as a long
Or in regular speech: I'm working on it :)

I've gotta say that I really like the Plugin System. When I saw the download for the sample, I started writing a plugin right away! Really powerful stuff here.
Thanks, I'm focusing NSE on plugins.
I'm actually writing NSE with the same frameworks that you'll get to use as a plugin developer.

I've finnished the Editor control and the SelectColor control so you can, as soon as I release the next alpha, make some super powered plugins, NSE accelerated plugins :D

While NSE 2.X will be the hottest thing in cool (huh?), I certainly will NOT throw NSE Classic out in the dump (hmm... Recycle Bin. :D). NSE Classic is still a good tool on its own, but still, heads up to Link for making an even better graphics editor! :D
Thanks, NSE classic is in no means going to completely dissappear, it's still one of the best OW editors. I might actually just port NSE classic as a plugin into the new NSE 2.X (yes I can do that, I think so at least)

But, thanks for the heads up.





Now some news regarding NSE 2.X's progress:
  • Imports are done (bitmaps, png's, nslx)
  • So are exports (bitmap and nslx)
  • I've implemented, as Darthatron mentioned, Ctrl +/- and scrolling zoom
  • I've figured out how to properlly encode and decode bitmaps, thanks to wikipedia.
  • Now you can import AND export 256 color bitmaps (this includes importing unlz's weirdly formated exports it says it's 256 color but ITS' NOT!)
  • As I've mentioned there are some new controls
  • NSLx format is done
  • Fixed LOTS of bugs
  • more... (Just can't think of it)

Full Metal

C(++) Developer.

Age 24
Male
In my mind.
Seen August 19th, 2018
Posted May 27th, 2017
806 posts
11.8 Years
Feel free to ask me about SQL any time, by no means am I an expert, but I got my basics covered.
SELECT * FROM TABLE ( WHERE X = Y )
the * can be either a '*' or a comma delimited list of fields
TABLE specifies which table to choose from the database
The ( WHERE X = Y ) is completely optional, and basically is a filter, if field X == value y then go ahead and select the entry being evaluated.
( A database looks a lot like an excel spreadsheet in my world, btw. think of a page as a table, field as in column, and entry as in row )

★ full metal.

I like to push it,
and push it,
until my luck is over.
Advertiser Content