Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Code for editing decrypted Disgaea 2 saves
Ruby JavaScript
branch: master
Failed to load latest commit information.
app few last fixes for beta release
config validating uploaded files
data/saves moved weapon skills into their own structure class
db save storages
doc initial commit
lib/tasks specs added
public few last fixes for beta release
script specs added
spec more notes, validation added
vendor start of save editor
.gitignore pre-alpha release deployed
Capfile changes for deployment
FIXME start of items editor, no thanks to inherited resources >: (
README
Rakefile initial commit

README

Disgaea 2 Save Editor
Code for editing decrypted Disgaea 2 PSP save games.
(c) Copyright Luke Mcildoon 2009, licenced under the MIT licence.

Now usable in beta at http://disgaea-2-save-editor.twofiftyfive.net/
Sample save game in repo at http://github.com/lmc/disgaea-2-save-editor/raw/master/data/saves/ULUS10461DISGAEA000/SDDATA.BIN

TODO
Make specialist and weapon skills editable
Make all strings editable
Further documentation and reverse-engineering of game structures
Better front-end for examining unknown values
Overall appearance improved, with sprites added, general UI design, etc.
Howtos and tutorials

Lots of love to the guys here who already documented quite a bit of the PS2 save format:
http://akurasu.net/wiki/index.php?title=Makai_Senki_Disgaea_2/Save_Hacking

Do note you need DECRYPTED saves, made available using the CFW plugin SGDeemer. Saves from an unmodified PSP will not work. I'm planning to add encryption/decryption code later, but for now you'll have to do it yourself.


Developer/hacker info follows

USAGE
Really only disassembles through script/console for now, use this as a starting point:
s = Save.new.disassemble
s.header
s.characters
s.characters.first
s.characters.first.items
s.characters.first.items.first

REVERSE ENGINEERING
Includes a useful comparison class for comparing unknown blocks of structures.
Example, comparing the first 5 character's unknown04 blocks, displaying them as int16s

characters = Save.new.disassemble.characters
compare = Compare.new(*characters[0...5])
compare.map = [:unknown04,:as_int16]
compare.compare_string

Gives output like the following:

0	2048	1536	0	3072	2304
1	3604	3602	0	2060	3341
2	1552	2318	0	3598	2317
3	778	  4108	0	1539	3337
4	2048	1536	0	3072	2304
5	3604	3602	0	2060	3341
6	1552	2318	0	3598	2317
7	778	  4108	0	1539	3337

Something went wrong with that request. Please try again.