hide results

    Save Game Hacking Guide by NeoKamek

    Version: 1.0 | Updated: 02/01/05 | Printable Version | Search This Guide

    ===============================================================================
    DISGAEA: HOUR OF DARKNESS
    SAVE GAME HACKING FAQ
    version 1.0 (February 01 2005)
    Author: Kamek (kspamsink@gmail.com)
    Copyright 2005 by Rick Foltz ("Kamek"). All rights reserved.
    ===============================================================================
    This may be not be reproduced under any circumstances except for personal,
    private use. It may not be placed on any web site or otherwise distributed
    publicly without advance written permission. Use of this guide on any other web
    site or as a part of any public display is strictly prohibited, and a violation
    of copyright. All trademarks and copyrights contained in this document are
    owned by their respective trademark and copyright holders.
    
    gamefaqs.com is the only web site authorized to host this FAQ.
    ===============================================================================
    TABLE OF CONTENTS
    =================
    1. Version History
    2. Introduction
    3. What You Need
    4. Extracting the Save
    5. Character Hacking
    6. Item Hacking
    7. Unlocked Character Class Hacking
    8. Restoring the Save
    9. Credits
    
    APPENDIX
    ========
    A. Disgaea Data Structures for Hex Workshop
    B. Hex Values for Text Characters
    C. Hex Values for Spells/Skills
    D. Hex Values for Specialist Jobs
    E. Hex Values for Character Classes
    ===============================================================================
    1. VERSION HISTORY
    ==================
    Version 1.0: first public release. Appendices included but incomplete.
    ===============================================================================
    2. INTRODUCTION
    ===============
    This FAQ is a guide for those who wish to hack their saved game files for
    Disgaea: Hour of Darkness. This is not a simple task. This guide is for
    advanced players who wish to delve into the internals of the Disgaea game.
    Those with limited or no knowledge of hacking or computer programming should
    stop reading this FAQ now and instead obtain a cheat device such as
    Codebreaker.
    
    If you wish to continue, I strongly suggest that you have a general working
    knowledge of the following.
    
    * General hex editing and basic computer programming, especially the
    hexadecimal numbering system
    * A basic understanding of the C++ computer language, used for structure 
    definitions in Hex Workshop and possibly other hex editors
    * A thorough understanding of the Disgaea battle system, including character 
    stats/abilities and the Item World. The best sources for this information are 
    bend's Item Guide and JungleJim's Training FAQ, both available on this site
    (gamefaqs.com).
    
    This guide is a work in progress. It will outline the basics of the character 
    and item structures, as well as methods to unlock secret character classes that 
    can't normally be used during play.
    
    To my knowledge, myself and Pyriel are the only ones who have any working 
    knowledge of the save file structure. As such there are lots of unknowns about 
    the save file structure as well as the internal character and item structures. 
    Feel free to tinker with the unknown values. If you discover something, please 
    let me know and I'll update this FAQ and the structures accordingly.
    ===============================================================================
    3. WHAT YOU NEED
    ================
    In order to hack save files, you'll need some special equipment and software.
    At a minimum you will need the following:
    
    * The obvious: a PS2, a copy of Disgaea (US version) and a PS2 memory card
    * A good hex editor. I strongly suggest Hex Workshop, because the structures I 
    will define in this document can be imported into Hex Workshop to make the 
    editing process a lot easier.
    * A save file transfer kit, such as SharkPort, XPort, ARMax, etc. I use the 
    SharkPort, which is rather old and outperformed by some of the newer devices 
    such as ARMax, which accept a simple USB Flash Drive for save transfers.
    * A cheat device. I currently use CodeBreaker. The cheat device is necessary to
    bypass the checksum validation performed by Disgaea when you load a save file.
    * A program called PS2 Save Builder. This program allows you to dissect the
    game save and pull out the actual save data. This can be downloaded from
    www.ps2savetools.com or do a Google search on it.
    * A lot of patience. Hacking in general can be a hit-or-miss process. If it
    doesn't turn out the way you like it at first, don't lose your cool.
    ===============================================================================
    4. EXTRACTING THE SAVE
    ======================
    After you've obtained the above equipment and software, you're ready to start 
    hacking. First, you'll need a Disgaea save file on your PS2 memory card. Just 
    save the file like you normally would. I highly recommend saving to a different 
    slot than you normally save to. If the **** hits the fan and you break your
    save, you won't lose your hundreds of hours of play time you've probably racked 
    up by now.
    
    In fact, you might find it easier just to use a brand new blank memory card
    exclusively for save hacking. This way, you won't get save files confused with 
    one another and end up hacking the wrong save.
    
    Now that you have a save file, you need to get the save from your memory card
    to your computer's hard drive. This is where your SharkPort, ARMax, etc. comes
    in. With the SharkPort, you have a USB cord that connects from your PS2 to
    your computer and special software to be run on the PS2 and your computer
    simultaneously. With the ARMax, it's a bit easier, because you can simply load
    the ARMax and transfer your save to a USB flash drive. For instructions,
    consult the manual for your save transfer kit.
    
    Now you have a Disgaea save on your hard drive. Next, you need to use the PS2 
    Save Builder. PS2 Save Builder supports virtually every type of save transfer 
    kit there is. First, locate the Disgaea save. It might have an extension like
    .sps or .npo or something. Open the file using PS2 Save Builder.
    
    Now you'll see three files in the left window pane, and the save game icon in
    the right window pane. The file you want is the one called "BASLUS-20666xx".
    The xx will vary depending on the ID number of the save. If it's the first or
    only save on your memory card, it will be 00. If it's the fifth save it will
    be 04. Right-click on that file and hit EXTRACT. You can save it wherever you
    want, but I recommend creating a folder just for Disgaea save hacks. Pick the
    location and hit SAVE.
    
    Now, you have the actual "meat" of the save. This is the file you're going to
    be using your hex editor on.
    
    *** MAKE A BACKUP OF THIS FILE BEFORE YOU DO ANYTHING ELSE!!! *** I can't
    stress the importance of backing up your files. One wrong move and your
    legendary Level 100 Yoshitsuna with 12 maxed out Gladiators will turn into an
    ABC Gum with no specialists, I kid you not. You'll have a reference so that
    you can undo your changes or start over if you screw something up.
    
    Now that you have your save file, you can begin your hacking. Open up your hex 
    editor, find the BASLUS-20666xx file, and open it up for editing.
    ===============================================================================
    5. CHARACTER HACKING
    ====================
    To my knowledge, there is nothing "dynamic" to a Disgaea save. In other words, 
    any offsets I give you should be constant throughout any Disgaea saves you
    might be hacking. In the event that there is a discrepancy, please notify me
    and send any details you think might be causing the offset to be different.
    
    Anyway, the first offset you're going to hack is at 0x00000BA8. This offset 
    marks the beginning of the very first character in your lineup. Chances are, 
    that character is Laharl, unless you've been training a Divine Majin or some 
    other character and that character is at the beginning of the lineup.
    
    For reference, I recommend that while you hack, have your Disgaea game running
    with the exact same save file open. This allows you to verify that any data you 
    come across in the save file is indeed correct.
    
    Warning: it's going to get pretty dry from here on out. Try to keep up. I'm a 
    hacker, not a teacher, although I will try my best to keep things clear.
    
    At 0x00000BA8 is the EXP value of the first character in your lineup. This is
    a 64-bit number. Example: C0F9 C105 0000 0000. Remember that the data here is
    Intel byte order, meaning the first byte is low and the second byte is high.
    Therefore, FF00 0000 0000 0000 would be 255, not 18374686479671623680. (You
    may want to have a hexadecimal calculator available. The built-in Windows
    Calculator actually does a decent job here.)
    
    Depending on your hex editor, you may have a window pane that shows what the
    value of the cursor number is. In that case, simply highlight the eight bytes
    and your hex editor will tell you the value of your EXP. Compare this with
    your Disgaea game. If you want to max out your character's EXP, simply set it
    to FFFF FFFF FFFF FFFF. The game will compensate the next time you take that
    character into battle and you should wind up at Level 9999, with the
    appropriate stats and all.
    
    The next few pages of data refer to your character's equipped weaponry and
    accessories. For now let's skip this and instead jump to 0x00000ED0. You might
    see something like:
    
    826B 8281 8288 8281 8292 828C 0000
    
    What does this mean? This is the name of your character. The numbers I just
    gave you translate to "Laharl". Yes, you can now rename Laharl into anything
    you want! Since I can't think of anything witty, for now we're going to change
    his name to "Harlie", which happens to be Jennifer's pet name for him. Plus,
    it also happens to be exactly the same length as Laharl's regular name, so
    you won't run into any conflicts there. Here is the hex data for "Harlie":
    
    8267 8281 8292 828C 8289 8285 0000
    H    a    r    l    i    e    *end*
    
    If you want to use a different name, see Appendix B for an incomplete list of 
    what hex bytes convert to what text characters.
    
    Next is the character's job class, at offset 0x00000EF2. For Laharl's case,
    this is Demon Prince:
    
    8263 8285 828D 828F 828E 8140 826F 8292 8289 828E 8283 8285 0000
    D    e    m    o    n    *sp* P    r    i    n    c    e    *end*
    
    However, if you've defeated Baal the Lord of Terror, it will be Tyrant:
    
    8273 8299 8292 8281 828E 8294 0000 8292 8289 828E 8283 8285 0000
    T    y    r    a    n    t    *end*r    i    n    c    e    *end*
    
    Let's give him a title change, too. Here are the hex values for "Overlord":
    
    826E 8296 8285 8292 828C 828F 8292 8284 0000
    O    v    e    r    l    o    r    d    *end*
    
    Again, refer to Appendix B if you want to put something more witty there.
    
    After the names are some unknown bytes that I haven't deciphered yet. Next is
    status resistance! Status resistance values are unsigned shorts (16-bit) and
    are located at the following offsets:
    
    0x00000F36: Poison
    0x00000F38: Sleep
    0x00000F3A: Deprave
    0x00000F3C: Forget
    0x00000F3E: Paralyze
    
    Note that these values take into account class resistance as well as any 
    Specialists you have equipped. The maximum effective value is 99 (6300).
    
    After the status resistance values are more unknown bytes, followed by
    information about your character's learned skills. To date, I have had no
    success in getting the game to accept any changes I make to a character's
    learned skills. Apparently, the game dynamically recalculates these values and
    rearranges them based on your weapon mastery, character class, and so on.
    However, you CAN alter the experience and level of your learned skills. Skill
    levels max out at 99. I'm not sure what experience this corresponds to, but I
    do know that 50 experience puts you at level 1. If your character is learning
    magic through pupils, the EXP value will be less than 50 and the Level will
    actually be 255, not 0. I think Level 0 is like an "off" bit for that
    particular skill.
    
    Anyway, here are the appropriate offsets for learned skills.
    
    Skill EXP: 4 bytes (32 bits)
    0x00000FB0: EXP for Skill #1
    0x00000FB4: EXP for Skill #2
    0x00000FB8: EXP for Skill #3
    .
    .
    .
    0x0000112C: EXP for Skill #96
    
    Actual Skills: 2 bytes (16 bits)
    0x00001130: Skill #1
    0x00001132: Skill #2
    0x00001134: Skill #3
    .
    .
    .
    0x000011EE: Skill #96
    
    Skill Levels: 1 byte (8 bits)
    0x000011F0: Level for Skill #1
    0x000011F1: Level for Skill #2
    0x000011F2: Level for Skill #3
    .
    .
    .
    0x000012F4: Level for Skill #96
    
    Now the fun part: your character's stat values! In this section, there are 2
    different stat values. The first set of stats includes equipment, and the
    second set of stats is your "actual" stat value. Editing the first set of
    stats is a waste of time because they change immediately upon level up or
    adding/removing equipment, but here is the info anyway.
    
    Stat Values including Equipment: 4 bytes (32 bits)
    0x00001250: Current HP
    0x00001254: Current SP
    0x00001258: Maximum HP
    0x0000125C: Maximum SP
    0x00001260: Attack
    0x00001264: Defense
    0x00001268: Intelligence
    0x0000126C: Speed
    0x00001270: Hit
    0x00001274: Resistance
    
    Any changes made to the above values (except for Current HP and Current SP)
    will revert immediately after performing an attack in battle or altering your
    equipment.
    
    The following values are your character's "actual" stats. The game will never
    "recompute" these stat values, so any changes you make are considered
    permanent.
    
    Actual Stats: 4 bytes (32 bits)
    0x00001278: Maximum HP
    0x0000127C: Maximum SP
    0x00001280: Attack
    0x00001280: Defense
    0x00001288: Intelligence
    0x0000128C: Speed
    0x00001290: Hit
    0x00001294: Resistance
    
    WARNING: The maximum value for any stat is 2147483648 (VERIFY), or 2^31. After
    this value the stat will "roll over". This value should never be reached during 
    regular play, however.
    
    After the character's resistance is 32 bytes of unknown data, and then a 4 byte
    value containing the character's current Mana:
    
    0x000012B8: Mana
    
    Following the Mana value are some more unknowns, and then the character's base 
    stats. The base stats are what you see on the transmigration/create new 
    character screen, including both blue and yellow bars. To my knowledge they're 
    used only for computing stat gain at level up, and have no impact on 
    transmigration.
    
    Base Stats: 1 byte (8 bits)
    0x000012E4: Maximum HP
    0x000012E5: Maximum SP
    0x000012E6: Attack
    0x000012E7: Defense
    0x000012E8: Intelligence
    0x000012E9: Speed
    0x000012EA: Hit
    0x000012EB: Resistance
    
    After that is about 36 more bytes of unknown data, and then the next character 
    record starts at 0x00001370.
    
    Want to hack another character? You can use this formula to determine what 
    offset to hack at based on the above offsets for the first character.
    
    ACTUAL OFFSET = BASE OFFSET + 0x07C8 * (CHARACTER NUMBER - 1)
    
    The Character Number is determined by counting down from the top of the roster.
    The first character in the roster is Character Number 1, then the next
    character is Number 2, and so on.
    
    So, if you wanted to edit the Mana value of Character Number 5, you would use:
    
    ACTUAL OFFSET = 0x000012B8 + 0x07C8 * (5 - 1)
    = 0x12B8 + 0x07C8 * 4
    = 0x12B8 + 0x1F20
    = 0x31D8
    
    This can be quickly verified by comparing the data at 0x000031D8 with the
    actual Mana file of Character Number 5 according to your saved game.
    
    The maximum number of characters in your party is 200 (VERIFY).
    
    --------------------------
    = STILL TO BE DISCOVERED =
    --------------------------
    * Transmigration counter
    * Number of stored levels
    * Mentor/Pupil information
    * Character Class and/or Portrait
    * Weapon Masteries
    * Elemental Affinities
    * Aptitude values
    * Demon Ranking in the Dark Congress
    
    If you manage to find this data, please email me so I can update the FAQ and
    structure libraries with the info.
    ===============================================================================
    6. ITEM HACKING
    ===============
    ** This info courtesy of Pyriel from the CMGSCCC Forums **
    
    Item structures are simpler than character structures. They are much shorter
    and there are fewer unknown values.
    
    Items can be found equipped on characters, in your Item Bag, or in the
    Warehouse.
    
    The following offsets are for Character 1's items:
    
    0x00000BB0: Equipped Weapon
    0x00000C78: Equipped Accessory #1
    0x00000D40: Equipped Accessory #2
    0x00000E08: Equipped Accessory #3
    
    To edit another character's items, simply use the formula from Section 5.
    
    The offset 0x000472C8 points to your stored items. The first 16 items are your 
    Item Bag, and the remaining 256 are your Warehouse. Each item consists of the 
    following offsets (using Item Bag Item #1 as reference):
    
    Specialists. Each Item has 16 slots for specialists, but the number of 
    specialists used depends on the item. The specialists take the following form:
    
    0x000472C8: Item #1 Specialist #1 Level (2 bytes, 16 bits)
    0x000472CA: Item #1 Specialist #1 Job Identifier (1 byte)
    0c000472CB: Item #1 Specialist #1 Name/Character Class (1 byte)
    
    The specialist Level is a number from 1 to 19999. If the Level is above 9999,
    the specialist is counted as Subdued and the actual level is determined by
    (UNKNOWN).
    
    The specialist Job Identifier determines the type of Specialist, whether it be
    a Gladiator, Marksman, or what have you. Quantity digits are forthcoming.
    
    The specialist Name/Character Class is a number from 0 to 255. Each number 
    corresponds to a random monster name and character class.
    
    After the 16 specialists is the item's EXP. Currently, it is unknown what role 
    the item's EXP plays in its development.
    
    0x00047308: Item #1 EXP (8 bytes)
    
    After the EXP are two unknown values and then the item's actual stat values.
    The actual stat values take into account the item's Level, base stats, and
    what Specialists are equipped. These values are (VERIFY) dynamically recomputed
    if the item's specialists are moved or the item gains a level.
    
    Item Stats: 4 bytes each
    0x00047318: HP
    0x0004731C: SP
    0x00047320: Atk
    0x00047324: Def
    0x00047328: Int
    0x0004732C: Spd
    0x00047330: Hit
    0x00047334: Res
    
    Immediately after these stats are the item's base stat values. The base stat
    values are initially set when the item is created and take into account the
    rarity of the item (normal, rare, or legendary). Also, if the item is leveled
    up in the Item World, these values are subject to change depending on whether
    Specialists are present at the time that an Item General, King, God, or God 2
    is defeated. For additional information, see bend's Item FAQ. It's old but
    has very useful information.
    
    Item Base Stats: 2 bytes each
    0x00047338: Base HP
    0x0004733A: Base SP
    0x0004733C: Base Atk
    0x0004733E: Base Def
    0x00047340: Base Int
    0x00047342: Base Spd
    0x00047344: Base Hit
    0x00047346: Base Res
    
    The next two values, 2 bytes each, determine the item's type and its current 
    Level.
    
    0x00047348: Item Type
    0x0004734A: Item Level
    
    The Item Type tells the game what kind of item it is, whether it's a Cosmic
    Blade, Super Robo Suit, Horse Wiener, etc. The Item Level determines what
    level the item is, and whether you can enter the Item World on that level or
    level it up any further. It is unknown what the impact on the item's stats is
    by changing this value.
    
    0x00047350: Item Rarity (1 byte)
    
    The item Rarity is a value from 0 to 255. If the value is 0-7, it is a
    Legendary item. If the value is 8-31, it is a Rare item. Otherwise, it is a
    normal item. The item rarity determines what color the item should flash (at
    all) and the maximum Level of the item.
    
    0x00047353: Number of Specialist Slots (1 byte)
    
    This is a number from 4 (VERIFY) to 16. Obviously it determines how many 
    Specialists can fit on the item. Setting this number above 16 will have adverse 
    effects by causing the game to read invalid Specialist data. Altering the 
    invalid Specialists will cause damage to the item by altering its base stats, 
    current stats, item name, or some other item value.
    
    And finally, you can rename your item.
    
    0x00047363: Item Name (32 bytes)
    
    Again, see Appendix B if you want to rename your item.
    
    Armed with this information, you can proceed to customize every item you have
    on hand. If you don't like the Horse Wiener's base stats, you can beef them
    up and make them equivalent to that of Crowdia's Beauty. Or you can create 16
    maxed Gladiators for your Yoshitsunas, or rename your Super Robo Suit to your
    favorite Gundam.
    
    To hack other items, use this formula:
    
    ACTUAL OFFSET = BASE OFFSET + 0x727C8 * (CHARACTER NUMBER - 1)
    
    --------------------------
    = STILL TO BE DISCOVERED =
    --------------------------
    * Bit that causes the blue flashing vice gold
    * Item leveling variables mentioned in bend's FAQ
    * Item icon (possibly determined by the Type)
    ===============================================================================
    7. UNLOCKED CHARACTER CLASS HACKING
    ===================================
    The info regarding the character classes you have unlocked starts at 0x000003F8
    (VERIFY) and ends at 0x00000BA8.
    
    Each structure is 10 bytes long and follows this pattern:
    
    2 bytes: Number of enemies of this class killed (monster units only)
    2 bytes: Character class
    2 bytes: Unknown
    2 bytes: Unknown
    2 bytes: Unknown
    
    This repeats until 0x00000BA8. There is no other information currently
    available regarding this data structure. See Appendix E for a list of known
    good values for the character class.
    ===============================================================================
    8. RESTORING THE SAVE
    =====================
    Now that you've hacked up a storm, it's time to upload the data back to your 
    memory card. Save any changes you made to the BASLUS-20666xx file, then go back 
    to the PS2 Save Builder.
    
    Re-open the original transfer file from your save game transfer if necessary.
    Now, you want to delete the current BASLUS-20666xx file in the save and replace
    it with the one you just hacked. Right-click on the BASLUS-20666xx file in the
    left window pane and hit Delete.
    
    After doing this, click on Edit and then Add File. Locate your hacked version
    of the BASLUS-20666xx file and add it in. The file must be exactly the same
    name as the BASLUS-20666xx file that was already there, or else Disgaea won't
    recognize the file. After doing this, click on File and Save As. Save it to
    your hard drive, preferably under a new name, then click OK.
    
    Now you want to use SharkPort, ARMax, or whatever you used to get the new save 
    back to your memory card. Consult the manual for your save transfer kit to do
    so.
    
    Now you have a hacked Disgaea save on your memory card. There's one problem, 
    though. Disgaea will not load the save file in its current form. Most games, 
    Disgaea included, run a checksum on the file to ensure that it is not corrupted 
    before loading the data. Corrupt data in itself will likely not harm your
    system, but what we have done with the hex editor has corrupted our file, 
    because we did not fix the checksum. Info regarding checksum calculation is 
    still unknown. Therefore, we have to use a Cheat Device to bypass the checksum.
    
    The Enable Code for Disgaea built-in to most Cheat Devices will do the job.
    However, it may still come back as corrupt when you attempt to load the save.
    If so, use the following CodeBreaker code to bypass the checksum:
    
    0E3C7DF2 1853E59E
    EE8DCA42 BCBAC7D2
    
    I do not have this code in any other form. If you have some other type of Cheat 
    Device and the enable code isn't working for you, you'll have to find some way 
    of converting this CodeBreaker code to your particular Cheat Device. 
    Unfortunately that is beyond the scope of this FAQ, not to mention I don't have
    a clue on how to do it anyway, so you're on your own here.
    
    After inputting the code and loading Disgaea, you may now load your save file.
    If all goes well, you will arrive at the Overlord's Castle. Check out any
    characters or items you made any changes to and ensure they are what you
    wanted. If not, you may have to open up the hex editor again.
    
    The good part is you do not have to use the Cheat Device again if you don't do
    any more hacking. When you load the save under the Cheat Device, immediately
    save your game, and the checksum will be re-calculated. The new save will load
    even without the above code.
    ===============================================================================
    9. CREDITS
    ==========
    Major thanks to Pyriel, who gave me the Item Structure and encouraged my
    Disgaea save game editor. The editor is not currently available for download
    due to some bugs, though.
    
    Thanks to Atlus for bringing us this awesome Nippon-Ichi game, and Nippon-Ichi
    for continuing to make awesome strategy RPGs.
    
    Thanks to JungleJim and bend for their excellent FAQs regarding items and
    transmigration.
    
    And finally, thanks to GameFAQs for hosting this FAQ.
    ===============================================================================
    - APPENDIX -
    ===============================================================================
    A. DISGAEA DATA STRUCTURES FOR HEX WORKSHOP
    ===========================================
    If you are using Hex Workshop, you can use these Structure Libraries to make
    your life easier. Simply create a text file called "disgaea.hsl" and load it up
    in Hex Workshop. Then you can associate offsets with their appropriate
    structures, making editing certain values a lot easier.
    
    // Begin Disgaea: Hour of Darkness Data Structure
    // Kamek Feb 01, 2005
    
    // Note: "UNKNOWN" values have been compressed into arrays for easier editing
    // of known values.
    
    #include "standard-types.hsl"
    
    struct Text
    {
    	ushort chara[16];
    };
    
    struct Specialist
    {
     	ushort Level;
     	ubyte Job;
     	ubyte Unknown;
    };
    
    struct Item
    {
     	struct Specialist Specialists[16];
    
     	uquad EXP;
    
     	ulong Unknown;
     	ulong Unknown;
    
     	ulong HP;
     	ulong SP;
     	ulong Atk;
     	ulong Def;
     	ulong Int;
     	ulong Spd;
     	ulong Hit;
     	ulong Res;
    
     	ushort HP_base;
     	ushort SP_base;
     	ushort Atk_base;
     	ushort Def_base;
     	ushort Int_base;
     	ushort Spd_base;
     	ushort Hit_base;
     	ushort Res_base;
    
     	ushort Type;
    
    	ushort Level;
    
    	ulong Unknown;
    
    	ubyte Rarity;
    	
    	ubyte Unknown;
    	ubyte Unknown;
    	
    	ubyte SpecialistSlots;
    	
    	ushort Unknown;
    	ubyte Unknown;
    	ubyte Unknown;
    	uquad Unknown;
    	ubyte Unknown;
    	ubyte Unknown;
    	ubyte Unknown;
    
    	struct Text Name;
    	
    	ubyte Unknown[13];
    };
    
    struct StoredItems
    {
     	struct Item ItemBag[16];
     	struct Item Warehouse1[128];
     	struct Item Warehouse2[128];
    };
    
    struct Character
    {
    	uquad EXP;
    
    	struct Item Weapon;
    	struct Item Etc1;
    	struct Item Etc2;
    	struct Item Etc3;
    
    	struct Text Name;
    	ushort Unknown;
    	struct Text Class;
    	ushort Unknown;
    	ubyte Unknown[34];
    	ushort PoisonResistance;
    	ushort SleepResistance;
    	ushort DepraveResistance;
    	ushort ForgetResistance;
    	ushort ParalyzeResistance;
    	ubyte Unknown[112];
    	ulong SkillEXP[96];
    	ushort Skills[96];
    	ubyte SkillLevel[96];
    	ulong HP_current;
    	ulong SP_current;
    	ulong HP;
    	ulong SP;
    	ulong Atk;
    	ulong Def;
    	ulong Int;
    	ulong Spd;
    	ulong Hit;
    	ulong Res;
    	ulong HP_actual;
    	ulong SP_actual;
    	ulong Atk_actual;
    	ulong Def_actual;
    	ulong Hit_actual;
    	ulong Spd_actual;
    	ulong Int_actual;
    	ulong Res_actual;
    	ubyte Unknown[32];
    	ulong Mana;
    	ulong Unknown;
    	ubyte Unknown[12];
    	ubyte Unknown[24];
    	
    	ubyte HP_base;
    	ubyte SP_base;
    	ubyte Atk_base;
     	ubyte Def_base;
     	ubyte Int_base;
     	ubyte Spd_base;
     	ubyte Hit_base;
     	ubyte Res_base;
    
    	ubyte Unknown[36];
    };
    
    // End Disgaea: Hour of Darkness Data Structure
    ===============================================================================
    B. HEX VALUES FOR TEXT CHARACTERS
    =================================
    The following is a list of known Hex Values and the Text Characters they
    correspond to.
    
    Byte order is Intel, as you would enter it into your hex editor.
    
    A: 8260    B: 8261    C: 8262    D: 8263    E: 8264
    F: 8265    G: 8266    H: 8267    I: 8268    J: 8269
    K: 826A    L: 826B    M: 826C    N: 826D    O: 826E
    P: 826F    Q: 8270    R: 8271    S: 8272    T: 8273
    U: 8274    V: 8275    W: 8276    X: 8278    Y: 8279
    Z: 827A
    
    a: 8281    b: 8282    c: 8283    d: 8284    e: 8285
    f: 8286    g: 8287    h: 8288    i: 8289    j: 828A
    k: 828B    l: 828C    m: 828D    n: 828E    o: 828F
    p: 8290    q: 8291    r: 8292    s: 8293    t: 8294
    u: 8295    v: 8296    w: 8297    x: 8298    y: 8299
    z: 829A
    
    (space): 8140   (colon): 8146
    -: 817C    ': 8166    .: 8144
    
    Other hex values are forthcoming.
    ===============================================================================
    C. HEX VALUES FOR SPELLS/SKILLS
    ===============================
    The following is a list of known Hex Values and the magic spells, weapon
    skills,  or monster skills they correspond to.
    
    Byte order is BACKWARDS -- if you are entering these into the hex editor you
    will have to put the second byte first (e.g., for Triple Strike, enter 6500
    instead of 0065).
    
    These values are courtesy of cmgsccc.com.
    
    FIST ATTACKS
    0065 - Triple Strike    0066 - Tiger Charge      0067 - Lion's Roar
    0068 - King of Beasts   0069 - Rising Dragon     006A - Big Bang
    
    SWORD ATTACKS
    00C9 - Blade Rush       00CA - Hurricane Slash   00CB - Wind Cutter
    00CC - Winged Slayer    00CD - Nightsever        00CE - Dimension Slash
    
    SPEAR ATTACKS
    012D - Impaler          012E - Sky Lunge         012F - Asteroid Drop
    0130 - Avalanche        0131 - Turbulence        0132 - Spear Storm
    
    ARROW ATTACKS
    0191 - Poison Arrow     0192 - Dark Flash        0193 - Delta Split
    0194 - Sturmhimmel      0195 - Zielregen         0196 - Doppelganger
    
    GUN ATTACKS
    01F5 - Tri-Burst        01F6 - Rapidfire         01F7 - Proximal Shot
    01F8 - Bullet Storm     01F9 - Totenkreuz        01FA - Inferno
    
    AXE ATTACKS
    0259 - Boulder Crush    025A - Skull Splitter    025B - Colossal Fissure
    025C - Violent Storm    025D - Graviton Bomb     025E - Calamity Drive
    
    RED MAGIC
    02BD - Fire             02BE - Mega Fire         02BF - Giga Fire
    02C0 - Omega Fire       02C1 - Tera Fire
    
    GREEN MAGIC
    02C7 - Wind             02C8 - Mega Wind         02C9 - Giga Wind
    02CA - Omega Wind       02CB - Tera Wind
    
    BLUE MAGIC
    02D1 - Ice              02D2 - Mega Ice          02D3 - Giga Ice
    02D4 - Omega Ice        02D5 - Tera Ice
    
    STAR MAGIC
    02DB - Star             02DC - Mega Star         02DD - Giga Star
    02DE - Omega Star       02DF - Tera Star
    
    HEAL MAGIC
    0321 - Heal             0322 - Mega Heal
    0323 - Giga Heal        0324 - Omega Heal
    
    MISC. MAGIC
    0325 - Espoir           032B - Braveheart        032C - Shield
    032D - Magic Boost      032E - Magic Wall
    
    ?????
    032F - Enfeeble         0330 - Armor Break
    
    SCOUT SPECIALS
    0385 - Geo Change       0386 - Dark Cannon
    
    DEMON PRINCE/TYRANT (LAHARL) SPECIALS
    03E9 - Blazing Knuckle  03EA - Overlord's Wrath  03EB - Meteor Impact
    
    VASSAL SPECIALS
    03F3 - Prinny Raid      03F4 - Sexy Beam         03F5 - Chaos Impact
    
    ANGEL (FLONNE) SPECIALS
    03FD - Power of Love    03FE - Holy Arrows       03FF - Divine Ray
    
    DEFENDER SPECIALS
    0407 - Gordon Spark     0408 - Gordon Punch      0409 - Gordon Blitz
    
    SIDEKICK SPECIALS
    0411 - Star Buster      0412 - Cosmic Arrow      0413 - Terminus Omega
    
    FAERIE SPECIALS
    07D1 - Petit Flare      07D2 - Demon's Breath
    07D3 - Camaraderie      07D4 - Chomper Combo
    
    SPIRIT SPECIALS
    07DB - Pixie Magic      07DC - Shock Magic
    07DD - Bomb Magic       07DE - Ice Magic
    
    GOLEM SPECIALS
    07E5 - Golem Dunk       07E6 - Golem Cannon
    07E7 - Psionic Wave     07E8 - Golem Smash
    
    TREANT SPECIALS
    07EF - Putrid Breath    07F0 - Stomp-o-rama
    07F1 - Pounding Spree   07F2 - Paranoia
    
    WINGED SPECIALS
    07F9 - Hell Pepper      07FA - Holy Dust
    07FB - Ionize           07FC - Air Assault
    
    DARK KNIGHT SPECIALS
    0803 - Power Slice      0804 - Lightning Slash
    0805 - Gigantic Slash   0806 - Blade Frenzy
    
    LANTERN SPECIALS
    080D - Jackknife        080E - Jack the Ripper
    080F - Jack Rush        0810 - Jackpot
    
    GARGOYLE SPECIALS
    0817 - Minimize         0818 - Soul Eater
    0819 - Cannonball       081A - Eruption
    
    SHADOW SPECIALS
    0821 - Fire Dance       0822 - Ice Dance
    0823 - Light Dance      0824 - Fire & Ice
    
    UNDEAD SPECIALS
    0849 - Zombie Puke      084A - Zombie Twister
    084B - Zombie Gatling   084C - Zombie Swarm
    
    NETHER NOBLE SPECIALS
    0853 - Spinning Slash   0854 - Darkness Slash
    0855 - Earthshaker      0856 - Megaton Crush
    
    TYRANT (BAAL) SPECIALS
    085D - Sword Rain       085E - Gran Sword
    
    BEAST SPECIALS
    0867 - Stinger Strike   0868 - Beast Rend
    0869 - Devour           086A - Beast Ray
    
    SUCCUBUS SPECIALS
    0871 - Hip Attack       0872 - Thunderbolt
    0873 - Evil Healing     0874 - Flying Sparks
    
    KITKAT SPECIALS
    087B - Rapid Kick       087C - Fists of Fury
    087D - Mystic Blast     087E - Delta Kick
    
    NOSFERATU SPECIALS
    0885 - Chaos Fire       0886 - Chaos Swarm
    0887 - Chaos Force      0888 - Chaos Plasma
    
    SUPER ROBOT SPECIALS
    0899 - Robo Attack      089A - Robo Crush
    089B - Robo Bazooka     089C - Arigato Roboto
    
    PRINNY SPECIALS
    08A3 - Prinny Barrage   08A4 - Prinny Dance
    08A5 - Prinny Bomb      08A6 - Pringer Beam
    
    RIVAL (PRINNY KURTIS) SPECIALS
    08AD - Rocket Punch     08AE - Final Punch
    08AF - Nuclear Fusion   08B0 - Pringer Beam
    
    UBER PRINNY SPECIALS
    097F - Prinny Barrage   0980 - Prinny Dance
    0981 - Prinny Bomb      0982 - Pringer Beam
    
    MID-BOSS SPECIALS
    09C5 - Adonic Shot      09CF - Adonic Blast
    09D9 - Adonic Fury      09E3 - Adonic Buster
    
    ARCHANGEL SPECIALS
    0A0B - Divine Anger     0A0C - Angelic Gospel    0A0D - Holy Lightning
    
    SERAPH SPECIALS
    0A15 - Judgment         0A16 - Armageddon
    
    RIVAL (HUMAN KURTIS) SPECIALS
    0A1F - Rocket Punch     0A20 - Final Punch       0A21 - Nuclear Fusion
    
    1ST DEFENDER SPECIALS
    0A29 - Hero Slash       0A2A - Galactic Power
    
    PRISM RANGER SPECIAL
    0A33 - Swift Justice
    
    OVERLORD (PRIERE) SPECIALS
    0BB9 - Dragon's Rage    0BBA - Requiem Aeternam 
    
    WITCH SPECIAL
    0BC3 - Dark Conjuration
    
    SERPENT SPECIALS
    0DAD - Flap Dance       0DAE - Quadra Nosedive
    0DAF - Death Drop       0DB0 - Supernova
    
    0DB7 - Flap Dance       0DB8 - Quadra Nosedive
    0DB9 - Death Drop       0DBA - Supernova
    
    0DC1 - Flap Dance       0DC2 - Quadra Nosedive
    0DC3 - Death Drop       0DC4 - Supernova
    
    0DCB - Flap Dance       0DCC - Quadra Nosedive
    0DCD - Death Drop       0DCE - Supernova
    
    0DD5 - Flap Dance       0DD6 - Quadra Nosedive
    0DD7 - Death Drop       0DD8 - Supernova
    
    0DDF - Flap Dance       0DE0 - Quadra Nosedive
    0DE1 - Death Drop       0DE2 - Supernova
    
    GALACTIC DEMON SPECIALS
    0E11 - Magnetic Wave    0E12 - Magnetic Blast
    0E13 - Magnetic Field   0E14 - Magnetic Flash
    
    0E1B - Magnetic Wave    0E1C - Magnetic Blast
    0E1D - Magnetic Field   0E1E - Magnetic Flash
    
    0E25 - Magnetic Wave    0E26 - Magnetic Blast
    0E27 - Magnetic Field   0E28 - Magnetic Flash
    
    0E2F - Magnetic Wave    0E30 - Magnetic Blast
    0E31 - Magnetic Field   0E32 - Magnetic Flash
    
    0E39 - Magnetic Wave    0E3A - Magnetic Blast
    0E3B - Magnetic Field   0E3C - Magnetic Flash
    
    0E43 - Magnetic Wave    0E44 - Magnetic Blast
    0E45 - Magnetic Field   0E46 - Magnetic Flash
    
    DRAGON SPECIALS
    0E75 - Bloody Talons    0E76 - Ice Breath
    0E77 - Blue Nova        0E78 - Dragonic Furor
    
    0E7F - Bloody Talons    0E80 - Ice Breath
    0E81 - Blue Nova        0E82 - Dragonic Freeze
    
    0E89 - Bloody Talons    0E8A - Fire Breath
    0E8B - Red Nova         0E8C - Dragonic Flare
    
    0E93 - Bloody Talons    0E94 - Fire Breath
    0E95 - Red Nova         0E96 - Dragonic Flare
    
    0E9D - Bloody Talons    0E9E - Ice Breath
    0E9F - Blue Nova        0EA0 - Dragonic Flare
    
    0EA7 - Bloody Talons    0EA8 - Ice Breath
    0EA9 - Red Nova         0EAA - Dragonic Flare
    
    GREAT WYRM SPECIALS
    0ED9 - Fiery Dance      0EDA - Fiery Column
    0EDB - Fiery Roar       0EDC - Fiery Burst
    
    0EE3 - Raging Dance     0EE4 - Raging Column
    0EE5 - Raging Roar      0EE6 - Raging Burst
    
    0EED - Frigid Dance     0EEE - Frigid Column
    0EEF - Frigid Roar      0EF0 - Frigid Burst
    
    0EF7 - Astral Dance     0EF8 - Astral Column
    0EF9 - Astral Roar      0EFA - Astral Burst
    
    0F01 - Diabolic Dance   0F02 - Diabolic Column
    0F03 - Diabolic Roar    0F04 - Diabolic Burst
    
    0F0B - Fiery Dance      0F0C - Fiery Column
    0F0D - Fiery Roar       0F0E - Fiery Burst
    ===============================================================================
    D. HEX VALUES FOR SPECIALIST JOBS
    =================================
    (COMING SOON)
    ===============================================================================
    E. HEX VALUES FOR CHARACTER CLASSES
    ===================================
    All of the following hex values are considered "valid" even though I may not 
    know exactly what produces what. There are probably some missing values, too. 
    However, invalid values will cause your character creation/transmigration 
    screens to freeze.
    
    Byte order is Intel, as you would enter it into your hex editor.
    
    ---------------------
    = KNOWN GOOD VALUES =
    ---------------------
    The following are verified values and are known to work.
    
    FAERIE CLASSES
    D007 - Hobbit           D107 - Puck              D207 - Brownie
    D307 - Koropokkuru      D407 - Lilliput          D507 - Phooka
    
    SPIRIT CLASSES
    DA07 - Ghost            DB07 - Boggart           DC07 - Specter
    DD07 - Wraith           DE07 - Fiend             DF07 - Phantom
    
    GOLEM CLASSES
    E407 - Golem            E507 - Spriggan          E607 - Ekim
    E707 - Djinn            E807 - Ullikummi         E907 - Gogmagog
    
    TREANT CLASSES
    EE07 - Man-Eater        EF07 - Oakrot            F007 - Treant
    F107 - Zakkum           F207 - Erl King          F307 - Yggdrasil
    
    WINGED CLASSES
    F807 - Imp              F907 - Gremlin           FA07 - Agathion
    FB07 - Alp              FC07 - Incubus           FD07 - Daemon
    
    DARK KNIGHT CLASSES
    0208 - Killer Armor     0308 - Dark Knight       0408 - Dullahan
    0508 - Avenger          0608 - Demonic Suit      0708 - Executioner
    
    LANTERN CLASSES
    0C08 - Pumpkin          0D08 - Decoy             0E08 - Mandrake
    0F08 - Scarecrow        1008 - Jack              1108 - Halloween
    
    GARGOYLE CLASSES
    1608 - Gargoyle         1708 - Guardian          1808 - Nebiros
    1908 - Balrog           1A08 - Seth              1B08 - Pazuzu
    
    SHADOW CLASSES
    2008 - Nightmare        2108 - Shade             2208 - Lich
    2308 - Chernobog        2408 - Death             2508 - Thanatos
    
    SERPENT CLASSES
    2A08 - Serpent          2B08 - Mizuchi           2C08 - Sea Dragon
    2D08 - Rahab            2E08 - Leviathan         2F08 - Midgardsorm
    
    GALACTIC DEMON CLASSES
    3408 - Cyclops          3508 - Sentinel          3608 - Nataku
    3708 - Talos            3808 - Ravana            3908 - Argus
    
    DRAGON CLASSES
    3E08 - Dragon           3F08 - Fafnir            4008 - Nidhogg
    4108 - Azhi Dahaka      4208 - Tiamat            4308 - Bahamut
    
    UNDEAD CLASSES
    4808 - Zombie           4908 - Ghoul             4A08 - Corpse
    4B08 - Ghast            4C08 - Wight             4D08 - Zombie King
    
    NETHER NOBLE CLASSES
    5208 - Brute            5308 - Death Boar        5408 - Minotaur
    5508 - Humbaba          5608 - Archdemon         5708 - Behemoth
    
    BEAST CLASSES
    6608 - Manticore        6708 - Nue               6808 - Myrmecoleo
    6908 - Chimera          6A08 - Tao Tieh          6B08 - Sphinx
    
    SUCCUBUS CLASSES
    7008 - Empusa           7108 - Lilim             7208 - Succubus
    7308 - Carmilla         7408 - Hecate            7508 - Lilith
    
    KITKAT CLASSES
    7A08 - Nekomata         7B08 - Cait Sith         7C08 - Werecat
    7D08 - Tailring         7E08 - Elbacky           7F08 - Bastet
    
    NOSFERATU CLASSES
    8408 - Vampire          8508 - Strigoi           8608 - Neuntoter
    8708 - Varcolaci        8808 - Nosferatu         8908 - Unholy King
    
    GREAT WYRM CLASSES
    8E08 - Efreet           8F08 - Shaitan           9008 - Marid
    9108 - Flamberg         9208 - Surt              9308 - Kagutsuchi
    
    ---------------------
    = UNVERIFIED VALUES =
    ---------------------
    The following identifier values were inferred using existing save data and have 
    not been verified.
    
    EDF SOLDIER CLASSES
    7E04 - Recruit          7F04 - Officer           8004 - Cyborg
    8104 - Psi-Soldier      8204 - Space Police      8304 - Space Marine
    
    CLERIC (MALE) CLASSES
    6004 - Cleric           6104 - Priest            6204 - Bishop
    6304 - Sage             6404 - Prophet           6504 - Savior
    
    THIEF CLASSES
    9204 - Rogue            9304 - Thief             9404 - Bandit
    9504 - Prowler          9604 - Raider            9704 - Space Pirate
    
    ANGEL CLASSES
    8804 - Angel            8904 - Angel Cadet       8A04 - Angel Soldier
    8B04 - Crusader         8C04 - Avenger           8D04 - Paladin
    
    SCOUT CLASSES
    7404 - Scout            7504 - Surveyor          7604 - Ranger
    7704 - Strider          7804 - Geo Master        7904 - Lord
    
    CLERIC (FEMALE) CLASSES
    6A04 - Cleric           6B04 - Priest            6C04 - Bishop
    6D04 - Sage             6E04 - Prophet           6F04 - Savior
    
    MAGE CLASSES
    5604 - Red Mage         5704 - Green Mage        5804 - Blue Mage
    5904 - Star Mage        5A04 - Prism Mage        5B04 - Galaxy Mage
    
    ------------------
    = UNKNOWN VALUES =
    ------------------
    The following values are valid, but it is unknown which classes they correspond 
    to.
    
    4F04 - ?????            5004 - ?????             5104 - ?????
    
    320A - ?????            330A - ?????             340A - ?????
    350A - ?????            360A - ?????             370A - ?????
    
    0100 - ?????            0200 - ?????             0300 - ?????
    0400 - ?????            0500 - ?????
    
    0104 - ?????            0A0A - ?????             140A - ?????
    1E0A - ?????            280A - ?????             5C08 - ?????
    6009 - ?????            6A09 - ?????             7409 - ?????
    7E09 - ?????            9808 - ?????             A708 - ?????
    A808 - ?????            B80B - ?????             C20B - ?????
    C409 - ?????            CE09 - ?????             D809 - ?????
    E209 - ?????            F203 - ?????
    
    The following are classes for which there should be identifier values, but
    have  not been discovered or are uncertain. Some of the above values may fit
    into some  of the blanks below.
    
    SKULL CLASSES
    ???? - Red Skull        ???? - Green Skull       ???? - Blue Skull
    ???? - Star Skull       ???? - Prism Skull       ???? - Galaxy Skull
    
    ARCHER CLASSES
    ???? - Archer           ???? - Sniper            ???? - Striker
    ???? - Valkyrie         ???? - Ace Archer        ???? - Freischutz
    
    RUNE KNIGHT CLASSES
    ???? - Knight           ???? - Vanquisher        ???? - Rune Knight
    ???? - Chaos Knight     ???? - High Knight       ???? - Space Knight
    
    RONIN CLASSES
    ???? - Ronin            ???? - Samurai           ???? - Bushi
    ???? - Kengo            ???? - Blademaster       ???? - Shogun
    
    NINJA CLASSES
    ???? - Ninja            ???? - Adept Ninja       ???? - Elite Ninja
    ???? - Shadow Ninja     ???? - Master Ninja      ???? - Shinobi
    
    MAJIN CLASSES
    ???? - Majin            ???? - Mega Majin        ???? - Giga Majin
    ???? - Omega Majin      ???? - Tera Majin        ???? - Divine Majin
    
    WARRIOR (FEMALE) CLASSES
    ???? - Warrior          ???? - Battler           ???? - Centurion
    ???? - Champion         ???? - Hero              ???? - Galactic Hero
    
    WARRIOR (MALE) CLASSES
    ???? - Warrior          ???? - Battler           ???? - Centurion
    ???? - Champion         ???? - Hero              ???? - Galactic Hero
    
    MONK (FEMALE) CLASSES
    ???? - Brawler          ???? - Pugilist          ???? - Fighter
    ???? - Black Belt       ???? - Wushu Master      ???? - Eternal Fist
    
    MONK (MALE) CLASSES
    ???? - Brawler          ???? - Pugilist          ???? - Fighter
    ???? - Black Belt       ???? - Wushu Master      ???? - Eternal Fist
    
    PRINNY CLASSES
    ???? - Pvt. Prinny      ???? - Cpt. Prinny       ???? - Gen. Prinny
    ???? - Prinny King      ???? - Prinny God
    ???? - Mother Prinny    ???? - Rival (Kurtis)
    
    STORY CHARACTER CLASSES
    ???? - Demon Prince     ???? - Vassal            ???? - Angel (Flonne)
    ???? - Defender         ???? - Sidekick          ???? - Super Robot
    ???? - Rich Demon       ???? - Demon Sire        ???? - Tyrant (Laharl)
    
    SECRET CHARACTER CLASSES
    ???? - Overlord (Priere)               ???? - Witch
    
    PRISM RANGER CLASSES
    ???? - Prism Ranger (Red)              ???? - Prism Ranger (Blue)
    ???? - Prism Ranger (Yellow)           ???? - General
    ???? - Defender? (Lt.Grey)             ???? - Defender? (Dk.Grey)
    
    MID-BOSS CLASSES
    ???? - Mid-Boss (1st)   ???? - Mid-Boss (2nd)    ???? - Mid-Boss (3rd)
    ???? - Mid-Boss (4th)
    
    ENEMY CLASSES
    ???? - Demonslayer      ???? - Rival (Human Kurtis)
    ???? - Tyrant (Baal)    ???? - Uber Prinny
    ???? - Alt. Overlord    ???? - 1st Defender
    ???? - Archangel        ???? - Seraph
    ???? - Item God         ???? - Item God 2
    
    MISC. CLASSES
    ???? - (Pleinair)
    ===============================================================================
    END OF FILE.
    ===============================================================================