Editors

# Editors

armor]=[

# Armor

The armor editor is intact from its FFHackster incarnation.

Select the armor to edit in the list to the left, and edit the fields as follows:

Field | Range | Detail
--- | --- | ---
Price | 0-65535 | The purchase cost of the item
Spell Cast | Droplist | The spell the armor casts if used in battle
Defense | 0-255 | The armor's ABSORB rating (reduces damage)
Evade % | 0-255 | The armor's EVADE rating (avoid attacks)
Special Defense | Flags | Elemental flags against which the armor reduces damage
Equipped By | Flags | Flags to mark which classes can requip the armor
Equipped By | Flags | Flags to mark which classes can requip the armor

attacks]=[

# Special Attacks

The attacks editor is largely unchanged from FFH; it now exposes all 8 bits of the "negative effect" effectivity flags.
Select the attack to edit in the list to the left, and edit the fields as follows:

Field | Range | Detail
--- | --- | ---
Target whole party | Check | Check to have the attack hit all player characters
Accuracy | 0-FF (hex) | The accuracy value of the attack
Element | Flags | Elemental flags used by the attack
Damage/Neg Effect | Radio | Determine if tthe attack inflicts damage or an effect
Damage | 0-255 | Base damage inflicted by the attack
Effect | Flags | Effect flags to inflict on the target

battles]=[

# Battles

This editor hasn't functionally changed. The UI is slightly different.
A new button was added to display a usage window, see below for more info.
See Battle Settings for information on the settings for this editor.

Field | Detail
--- | ---
Enemy Arrangement | Specifies which arrangement this enemy group uses, affecting the max number of enemies and how they are displayed. This option must match the pattern table used for the battle, or the enemies will display incorrectly. For example, a pattern table formatted as a FIEND must use the Fiend option, or the fiends using the table will be misdrawn (usually in pieces).
Can't Run | checked, the player can't run from the battle, and the surprise factor is ignored.
Surprise | A byte value, this is the chance for the enemy group to ambush the player party. Typical range 0-90, the higher the number, the more likely an ambush becomes. See the GameFaqs FF Formulas thread for more detail on how this value is used in battle. https://gamefaqs.gamespot.com/boards/522595-final-fantasy/41701255
Views | Choose to view the minimum, mean (average), or maximum enemy arrangement. The game stops adding enemies once it reaches 9, and this editor follows suit.
Formation 1-2 | Choose the formation for this battle. All battles have two formations, with the second formation only using Enemy tpes 1 and 2. The second formation has its own Quantities for Enemy types 1 and 2, but all other settings are shared between the two formations.
Pattern Tables | The pattern table (i.e. tiles) used for enemy graphics. One or more enemy graphics are represented on a pattern table, depending on the type. Chaos has his own table, and Fiend tables define graphics for two fiends. Otherwise, there are four enemies on a table - 2 large and 2 small. There's an editor for these that allows exporting to and importing from bitmaps. Be very careful using this editor, as improperly formatted graphics will display incorrectly.
Palettes 1-2 | Palettes available for this enemies in this battle.
Change Palette | Change which palette is used in this palette slot.
Edit Pattern Tables | Invokes the pattern table subeditor on the currently selected pattern table.
Enemy 1-4 | The enemy type used in this slot.
Quantity | The range (0-9) of enemies of this type that can appear in battle.
Palette 1/2 | Select the palette used for this enemy. Fiends and Chaos use both palettes.
Pic 1-4 | Select the picture used for this enemy.
View Usage | Click the button to view where the battle is used. The window that appears will display any Overworld encounter domains, Standard map encounters, spiked square encounters, and Sprite initiated battles. Note that both formations are represented, where: F1 = Formation 1 F2 = formation 2 For example, Battle 7F Formation 1 is used for a sprite battle (Garland), while Formation 2 is used as a Standard map enconter on TOFR's Air floor (IronGol).

classes]=[

# Classes

The classes editor has been tweaked to make editing class groupings and ranges easier to handle.

- Copy/Paste class data with a right-click (see below);
- Class selections for MPRange now use dropdowns instead of edits
- Class selections for HoldMP now use dropdowns instead of checkboxes
- Added dropdowns for BBMA bonus and doubled hits (2xHits)
- HoldMP and BBMA selections can be individually reassigned
- HoldMP and BBMA can also be individually disabled
- Added HP max edit field
- Mouse scroll wheel works in the level data area
- Check/uncheck all SAIVL stats for a level via Stat column right-click
- Check/uncheck all spell charges for a level via Magic column right-click

See Class Settings for information on the settings for this editor.

Select the class to edit in the list to the left.

The tables below describe the fields in each part of the editor.

### Class Designations

These settings can be disabled via Class Settings. An info icon will appear to remind you of the settings that have been disabled.
You would want to disable these settings if the ROM you are editing has made code changes that are incompatible with the code this editor recognizes (usually the code from the original game).

Field | Range | Detail
--- | --- | ---
BBMA 1 and 2 | Dropdowns | Select the two classes that will receive the BB/MA stat calculations. For each, choose any class to give that class the calculations. Choosing the same class for both simply means that only that class uses the calculations. Choosing "<IGNORE>" for either slot means that no class will use the calculations. This includes the calculations (upon level-up) for damage, absorb, and critical rate but NOT doubled hits. NOTE: if the bytes/code for this feature differs from what the app expects, then this feature will be disabled. The info button icon will appear to inform the user of this. NOTE: This feature can be disabled (and will be ignored when loading and saving) via Class Settings.
2xHits 1 and 2 | Dropdowns | Select the two classes that will receive the BB/MA doubled hits. For each, choose any class to give that class the bonus. Choosing the same class for both simply means that only that class gets the bonus. Choosing "<IGNORE>" for either slot means that no class will get the bonus. This only includes the doubled hit count, not the other calculations. NOTE: This feature can be disabled (and will be ignored when loading and saving) via Class Settings.
HoldMP 1 and 2 | Dropdowns | Select the two classes that will have MP gains blocked. For each, choose any class to block MP gains. Choosing the same class for both simply means that only that class has MP gains blocked. Choosing "<IGNORE>" for either slot means that no class will have MP gains blocked. The classes assigned to these slots will prevent those classes from gaining spell charges upon level-up. NOTE: This feature can be disabled (and will be ignored when loading and saving) via Class Settings.
PostHold CapMP 1 and 2 | Dropdowns | Select the two classes that will have MP gains restored. Choosing the same class for both simply means that only that class has MP gains restored. Choosing "<IGNORE>" for either slot means that no class will do this behavior. This goes hand-in-hand with the HoldMP slots; the two classes selected here are semantically treated as magic-using upgrades from classes that could not not use magic. e.g. in the original game, Fighter and Thief are the HoldMP classes that don't use magic, while Knight and Ninja are the Post-HoldMP classes that gain magic ability with a lower spell charge max limit than the Wizards. NOTE: This feature can be disabled (and will be ignored when loading and saving) via Class Settings.
Starting MP Range | Dropdowns | Identifies the first and last class that will have starting spell charges in a new game. All classes in between (if any) will also get starting spell charges. The class in the second list must be at the same position or later than the class in the first list; if it's not, then the classes will be set to the same value. NOTE: This feature can be disabled (and will be ignored when loading and saving) via Class Settings.

### HP Settings

Field | Range | Detail
--- | --- | ---
HP Strong Bonus Range | 0-255 | The range of HP added during a Strong level-up. Each time the player reaches a level with the Strong check box checked, a random amount of HP within this range is added to the normal HP gain.
Max HP | 0-999* | Max player HP * NOTE: while there's no hard limit below 65535, displaying more than 3 digits (i.e. a value > 999) requires a ROM.Asm hack.

### Spell Charges

Field | Range | Detail
--- | --- | ---
Start | 0-255* | Level 1 Spell charge count for classes in the MP Range when starting a new game. * NOTE: While there's no hard limit below 255, displaying more than 1 digit (i.e. a value > 9) requires a ROM/Asm hack.
Max | 0-255* | Max spell charges for classes in the MP Range. * NOTE: While there's no hard limit below 255, displaying more than 1 digit (i.e. a value > 9) requires a ROM/Asm hack.
Post HoldMP | 0-255* | Max spell charges for the two Post-Hold CapMP classes. * NOTE: while there's no hard limit below 255, displaying more than 1 digit (i.e. a value > 9) requires a ROM/Asm hack.

fi-th-code]=[Class Editor: About the Fighter/Thief MP Code...

# Class Editor: About the Fighter/Thief MP Code...

FFH (and therefore FFHEX) stores the bytes of code that carry out the instructions for the lock on Fighter and Thief HP. The idea is that if the feature is active (as in the original game), then upon clicking Save or Done those code bytes are written to the appropriate ROM address.
Otherwise, NOPs are written to prevent the behavior from happening.

These bytes come in two flavors:

- Hold MP, which blocks MP gains for (by default) the Fighter and Thief;
- Capped MP, which sets the max MP for(by default) the Knight and Ninja.

However, this breaks if either the bytes are moved around or the functonality is changed. FFHEX attempts to help with this by allowing the bytes and their location to be specified in the values editor.

The code entries are a formatted array of bytes that will be written to the ROM. There are also code offsets and a code length (for a sanity check).
FFHEX behaves slightly differently from FFH. If the bytes at the location are neither NOPs nor the original code, FFHEX will not alter the bytes at all. This should help avoid overwriting those bytes when (say) the feature has been removed and that section of code has been completely rewritten.

Bear in mind that this feature is still experimental, so ALWAYS save your work before using any modification tool.

Save at multiple points during editing sessions to ensure you have at least one good recent copy to roll back to if the unthinkable happens.

classes-paste-targets]=[Class Editor: Class List Paste and Swap Targets

# Class Editor: Paste and Swap Targets

Right-click any class in the list and a context menu appears.
The copy option always appears, marking the selected class as a copy source.
If a copy has already been established, then two additional menu items appear: Paste and Swap.

Both choices invoke the same options dialog.
Paste overwrites the target with the selected data from the source.
Swap swaps the selected data between the copy source and selected target.

Field | Detail
--- | ---
Startup Data | All startup stats (in the Starting Stats area). This includes Hit% and "MagDef" increases. Reminder: this excludes starting MP, which is a shared stat.
SAIVL/Strong level data | The SAIVL and Strong flags for all levels. These are respectively found in the Stat and Strong columns in the level progression grid.
Spell charge level data | The spell charge increase flags for all levels. These are found in the Magic column in the level progression grid.
Battle graphics | The battle sprites for this class. TODO: document if it also copies the palette assignment
Mapman graphics | The overworld map sprites for this class.
Mapman palette | The character-specific palette colors for the overworld sprites. Note that overworld ("mapman") palettes use both sprite-specific and sharedcolors in the palette. See Map Sprites for more info.
Weapon permissions | Flags dictating the weapons the class can equip.
Armor permissions | Flags dictating the armor the class can equip.
Magic permissions | Flags dictating the spells the class learn.
All | Check or uncheck to toggle all other flags on or off.

Paste overwrites the target with the selected data from the source.
For example, if you decide to make the Ninja's starting stats stronger, then you could:

1. Copy the starting data from the Fighter
2. Paste it onto the Ninja, overwriting the Ninja's original starting stats.

Remember that this is a destructive operation: once saved it can't be undone.

Swap swaps the selected data between the copy source and selected target.
For example, if you want to switch the positions of the Thief and BlackBelt (and likewise the Ninja and Master) then you could:

1. Copy the Thief
2. Right-click BlackBelt, select the Swap option
3. On the Swap options dialog, check All, then click OK
   This effectively swaps everything about them except the class names, which can be swapped in the Text editor.
4. Copy the Ninja
5. Right-click Master, select the Swap option
6. On the Swap options dialog, check everything EXCEPT SAIVL and Spell data
7. Click OK
   This swaps eveything except level up data.
   This is important, because in the original game, the base and promoted classes share level up data, so swapping the promoted classes in this step would actually swap the Thief/Ninja level data back to the BlackBelt/Master and vice-versa.
8. Save the changes in the Class editor
9. Open the Text editor
10. Switch the class names
    - Swap THIEF with Bl.Belt
    - Swap NINJA with MASTER
At this point, the two classes have swapped positions.

enemies]=[

# Enemies

The enemies editor has received a couple of minor changes:

- Exposed all 8 bits of the Added Effect byte;
- Allows byte 15 to be edited as either a value or flags.

Enemies Settings for information on the settings for this editor.

Field | Detail
--- | ---
Byte 15 | Select the enemy to edit in the list to the left. Byte 15 represents the Attack Element (which I believe is unused in the original game due to a bug). A setting will change the editor to display this byte as 8 check boxes, representing element flags.
View Usage | Click the button to view where the enemy is used. The window that appears will display any Overworld encounter domains, Standard map encounters, spiked square encounters, and Sprite initiated battles. Unlike the Battle editor, only battles with this specific enemy are included. For example, Garland is in Battle 7F Formation 1 (used by his TOF sprite), but not Formation 2 (IronGol on TOFR's Air floor), so only the Sprite initiated battle is shwon here.

shops]=[

# Shops

No functional changes have occurred in the shops editor.

Field | Detail
--- | ---
Shop Type | Specifies the types of shops, which will determine the controls show for this shop.
Location | The location hosting the shop.
Item List | The items available in the shop. These are display for all shop types except Clinic and Inn.
Shop Price | For the Clinic and Inn, this is the service price.
Item Prices | Prices of the items, range 0-65535.
Remove Item | Remove this item from the Item List. Any items under this slide up a slot.
Pointer | The ROM address of the shop's item list. To change the pointer, type in a new address, and then click the Change Ptr button when it becomes active. CAUTION! This is an expert feature; unless you understand how pointers work, it's best to avoid using this feature. BACK UP YOUR PROJECT BEFORE ALTERING POINTER VALUES! Be VERY careful using this, as you could create an unusable store, or crash the game if the edited pointer value is off by even one byte.
Edit Label | Edit the Shop Location label.
New Slot | Add a new Shop Location slot if there's a free slot.
Delete Slot | Removes the selected Shop Location, freeing up its slot.
Starting Gold | Start with this much gold in a new game. A 24-bit value, but limit it to 999999 to avoid display problems.

magic]=[

# Magic

The magic editor now exposes the unused byte 7.
See Magic Settings for information on the settings for this editor.

Field | Length | Detail
--- | --- | ---
Effect | Radio | The type of effect the spell has when cast.
Effectivity (Damage) | 0-255 | Strength of the spell relative to it's Effect type.
Effectivity (Negative Effect) | Flags | The ailments inflicted on enemy targets.
Effectivity (Positive Effect) | Flags | The ailments removed from player targets.
Accur (hex) | 0-FF | Affects the ability for the spell to hit (i.e. reach its upper damage range).
Price | 0-65535 | Shop cost of the spell.
Byte 7 | 0-255 | An unused by in the spell's data block. Allows ROM hacks to edit this value as a decimal number.
Element | Flags | Elements used with the spell (typically for targeting enemies)
Base | 0-255 | Used in out-of-battle calculations for Cure and Heal. It's best to keep the base values as powers of 2. Other values can produce unexpected results.
Range | 0-255 | Used as in out-of-battle calculations for Cure and Heal. These values determine the range of the spell. It's best to keep the range values as (powers of 2) - 1 (e.g. 7, 15, 31, etc.). Other values can produce unexpected results.

weapons]=[

# Weapons

The weapons editor now displays the critical hit rate as a decimal number.

text]=[

# Text

The text editor has received a handful of changes:

- Added 4 new categories (see below)
- Double-newline was added to the Standard and DTE tables as \2
- A Find feature to search the text list

Select the text type to edit in the list to the left, then select an entry in the right-hand list.

Field | Detail
--- | ---
Text category | The category of the text to edit.
Text entry | An in-game text string in the selected category.
Ptr | ROM Offset to the start of the actual text.
Change Ptr | Enter a new value in the Ptr field, then click this button to update the ROM offset marking the start of the text for this slot. CAUTION! This is an expert feature; unless you understand how pointers work, it's best to avoid using this feature. BACK UP YOUR PROJECT BEFORE ALTERING POINTER VALUES! Invalid pointers will ruin the in-game text and likely crash the game.
Delete Slot | Removes the selected slot from the list of text entries
New Slot | Adds a new slot to the text entry list
View with DTE | Views the text using Dual Tile Encoding (instead of {hex} placeholders}
KAB label | Known available bytes: the number of free bytes left for text in this category
Find | A text field with an adjacent Find button, that when clicked will search the text list for a match. Two things to consider: For the Intro category, the multiline text box is searched instead. For non-Intro categories, to make find more effective, turn on the setting to show game text in the text list instead of game labels. You can turn it off after seaching if desired. Pressing ENTER while the text field is focused will also perform a search (as if the Find button was pressed). The search highlights the next item it finds, and loops to the beginning when the end of the list or search text is reached.
Text | Field to edit the contents of the selected text entry. Can be single line or multiline.

### New Categories

The Intro category allows editing of the text displayed in the intro, normally shown when the game is powered on.

The Shop category edits text shown in shop menus.

The Status Menu category edits text shown in the inventory screen menus.

The Story category edits text in the Bridge scene and the Ending.
Use the up/down arrows to change the break point between bridge and Ending pages.
There are 25 pages; in the original game, the Bridge scene uses 4 pages and all pages after that are used by the Ending.
The arrows change the last page number used by the prologue.

startingitems]=[Starting Items

# Starting Items

Choose the key items and consumables to give the party when starting a new game.
Also allows the choice of timing of Bridge intro event to be set.

Field | Range | Detail
--- | --- | ---
Bridge Scene | Dropdown | Select if or when the bridge scene occurs: Not Set: when the bridge is stepped on (normal behavior) Trigger at Startup: when the overworld first displays BEFORE player takes control Set: never
Canoe Flag | Check | Allows the use of the canoe on the Overworld Map
CANOE | Check | The CANOE inventory item (not the canoe on the Overworld map). In the original game, this item triggers the display of the item "CANOE" in the inventory screen. Note that if the Canoe flag isn't checked, then the canoe is not usable on the overworld screen. NOTE: pay attention in the sprite/event editor when changing events, as it's possible to give the CANOE item without setting the CANOE flag and vice versa.
Consumables | 0-255* | *Displaying more than 2 digits (i.e. a value > 99) requires a ROM hack

spritedialogue]=[Sprite Dialogue Editor

# Sprite Dialogue

Inspired by Paulygon's FFHackster Companion (aka FFHackster Plus), this editor allows you to edit the dialogue events of the game's sprites.
See Sprite Dialogue Settings for information on the settings for this editor.

Select the sprite on the left, then select the events in the right-hand list.

#### List

The list contains an entry for each of the game's sprites. The names of the sprites are loaded from the sprite labels stored with the project.

#### Dialog Routine dropdown

The dropdown is populated with the names of the recognized routines in the dialogue file.

#### Grid

The grid contains the elements that make up the event. These are defined in the project's dialogue file. See Sprite Dialogue Data for more information about the data that populates this editor.

Field | Detail
--- | ---
Sprite | The sprite to edit
Type | The type of the event.
Value | The value to change (either dropdown or integer)
Desc | A customizable description for the event

NOTE The dialogue editor now allows selection of battles in the range 80-FF.

#### Issues

The .dialogue INI file is used to help the editor understand how to locate and edit the handler routines for both Assembly and ROM projects.
If there are discrepancies between the routines listed in the INI and the routines found in the game, then the editor will (depending on settings) either issue a warning or prevent the editor from launching.

If warning, then the editor will launch, but sprites using handlers that aren't declared in the INI file will be disabled.

standardmaps]=[Standard Maps

# Standard Maps

No processing changes were made, but the window was widened and made slightly shorter to more easily fit on smaller monitors.

For more info on the custom map tools, see Custom Map Tools.
For more info on the Coords, see Coords.

Function | Detail
--- | ---
Palettes | Click a cell to alter that color for the given palette.
Encounter Rate | The lower the value, the less likely a battle occurs with each step. Set to 0 to disable battles Set to 255 for a battle with every step In the original game, standard maps set this to 8 except: Sky Castle 5f (the bridge) is 24 TOFR Earth floor is 9 TOFR Fire floor is 10 TOFR Water floor is 11 TOFR Air floor is 12 TOFR Chaos floor is 1 The lower rate on TOFR Chaos is moot since the walkable tiles on that floor don't trigger battles in the original game.
Tile set dropdown | Selects the tile set to use with this map. Click Edit Label button to the right of the dropdown to edit the label. NOTE The palettes DO NOT change when change the tile set.
Tile Data | Edits the data properties of the currently selected cell in the tile set. In the main map, right click a tile to highlight its corresponding cell in the tile set. Alternatively, click the cell in the tile set with either button to select it directly. Then, select one of the options in the Tile Data section to change the properties of the tile set cell. Doing so will immediately update all tile map tiles using that cell.
Tiles | Edit the tile set, which furnishes tiles used by this map. Double left click to edit the tile graphics. Double right click to edit the tile tint (used only in the editor). For more on editing tiles, see Tiles.
Sprites | Update the positioning, appearance , and behaviour of sprites. Assign the sprite dialogue ID of the behavior you want for the sprite on the map. e.g. In the original game's Coneria map, Arylon the dancer has sprite dialogue ID 0x35 (hex).
Import / Export | Also, you can export the pattern table to a bitmap, edit that with an external editor, and import the result. Take care to respect the expectation that this bitmap should be either 16 color (4-bit) or 256 colors (8-bit). Both bit sizes are quantized to be NES palette-compatible.
Domain | Set up the battles encountered for the map. Select the battle from the first dropdown. Check F-2 to use formation 2 for the battle on that line. The probability values next to the "/64" labels are global, shared by the Overworld and all Standard maps. The total of the 8 values should be 64.

overworldmaps]=[Overworld Maps

# Overworld Map

No processing changes were made, but the window was widened and made slightly shorter to more easily fit on smaller monitors.

For more info on the custom map tools, see Custom Map Tools.
For more info on the battle backdrops, see Battle Backdrops.
For more info on the Coords, see Coords.

Function | Detail
--- | ---
Battle Backdrop | Select and edit the backdrop used in battles on this tile. NOTE If the tile is a teleport to a standard map, then the backdrop specified here will be used for all standard map battles until returning to the Overworld - even if teleporting from one standard map to another. This is notable in the Sky Castle and TOFR. Since TOFR is accessed while inside the Temple of Fiends, TOFR uses the Temple of Fiends battle backdrop. Since Sky Castle is accessed while inside the desert Tower, Sky Castle uses the Tower battle backdrop.
Palettes | Click a cell to alter that color for the given palette.
Encounter Rates | The lower the value, the less likely a battle occurs with each step. Set to 0 to disable battles Set to 255 for a battle with every step In the original game: Land is set to 10 Sea is set to 3 (less frequent battles while sailing)
Tile Data | Edits the data properties of the currently selected cell in the tile set. In the main map, right click a tile to highlight its corresponding cell in the tile set. Alternatively, click the cell in the tile set with either button to select it directly. Then, select one of the options in the Tile Data section to change the properties of the tile set cell. Doing so will immediately update all tile map tiles using that cell.
Tiles | Edit the tile set, which furnishes tiles used by this map. Double left click to edit the tile graphics. Double right click to edit the tile tint (used only in the editor). For more on editing tiles, see Tiles.
Import / Export | Also, you can export the pattern table to a bitmap, edit that with an external editor, and import the result. Take care to respect the expectation that this bitmap should be either 16 color (4-bit) or 256 colors (8-bit). Both bit sizes are quantized to be NES palette-compatible.
Domain | Set up the battles encountered for this domain grid square. Select the battle from the first dropdown. Check F-2 to use formation 2 for the battle on that line. The probability values next to the "/64" labels are global, shared by the Overworld and all Standard maps. The total of the 8 values should be 64.

partysetup]=[Party Setup

# Party Setup

Configure the default party settings, and control how many initial classes are selectable on the new party screen.

Field | Detail
--- | ---
# of Classes | The number of classes available to select in a new game. *Note that the first 6 classes display fine, others after that have display errors. A ROM hack is needed to fix those display errors.
Char Class | The default class for the given character slot.
Fixed Party | If checked, the classes cannot be changed on the new party screen. This forces the player to start the game with the default party.

NOTE: Fields in tables with this tinted backgroundrequire some assembly/ROM hacking to work properly. Modifying values in the editor will not trigger visible changes in the game; code/hex changes are required to accomplish that.