davoodinator / ff12doc

FF12 Zodiac Age VBF Documentation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

some item data

shinseikuevangerion opened this issue · comments

found some item data. Hopefully it can be used to find license data, since usually in RPGs the way the data is presented for say, items, is configured like other entries so can be used to search for stuff. I'd do a pull request but it seems better as an issue until more can be committed to what everything does.

in: /ps2data/image/ff12/test_battle/in/binaryfile: eitm_data.bin:

address 0x00007b7c: mirage vest

20 03 00 00 00 00 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
^ note that this reads "backwards" for doubles
each item entry is 24 xx's long

what I've figured out so far: the order goes:
hpA, hpB, mpA, mpB, strength, magic power, vitality, speed, xx, xx, equip: status effect, xx, xx, xx, xx, xx, xx, immunity, half-damage, weakness, potency, xx, xx, xx
xx = haven't figured it out yet.

elements:
01 - fire
02 - lightning
04 - ice
10 - water
20 - wind
40 - holy
80 - dark

statuses:
04 - protect
20 - bravery
80 - reflect

so to give it 800 hp, 120 mp, etc etc just count out the number of times you need to move after finding the values you need in the gear around it (it more or less follows the wiki). I should note that this area of the file does NOT seem to have defense, magick resist, evasion, sales price, license requirements, models/gearwindow sprites, internal ID pointers, whether-or-not-it's-metal, the "counter" bonus from genji gear, and probably other stuff I haven't thought of yet - anywhere around it.

commented

Looks like the first 34 Bytes is the file header
73 74 32 65 | 2d 02 00 00 34 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 44 71 00 00 00 00 00 00 00 00

If you remove that then you get to item data in 52 byte chunks. Still guessing on some stuff, but I did find shields.
Zodiac Shield // da 08 12 00 13 20 11 12 00 00 00 00 00 00 02 ff 40 9c 00 00 00 00 4b 2d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60 03 00 00 00 00 00 00 5b 00 77 00 00 00

So far the struct is something like this:

struct 52*8 = 416 Bytes {
    uint16 ID // Reference ID
    uint8 // Item Type? (0x12 = Shield)
    uint16 // Item ID (related to type, possibly for ordering)
    uint8 // ENUM (Power of 4?)
    uint8 // Order ?
    uint8 // Order Type ?
    uint8
    uint8
    uint8
    uint8
    uint8 // ENUM
    uint8 // ENUM
    uint16 // Gil Value
    uint8
    uint8
    uint8
    uint8
    uint8 // Physical Stat (Defense / Eva)
    uint8 // Magical Stat (M.Resist / M.Eva)
    uint8// ?
    uint8 // ENUM Special Properties?
    uint8*13 Various ENUM?
    uint8 //
    uint8 // ENUM?
    uint8*12
}

Around byte 0x00007123 is when @shinseikuevangerion discovery starts. Seems there is some 0 padding then additional data related to the items. How they link I haven't figured out yet.

As an update to this, several posts will be made to cover some of the missing information (to keep it digestable).

new markup for the schedule:
hpA hpB mpA mpB str mag vit spd xx bfx ef1 ef2 if1 if2 xx xx abs imm hlf wkn pot xx xx xx
hp, mp, str, magpwr, vit, spd, xx, bad-equip:status, equip:status1, equip:status2, immunstat1, immunstat2, xx, xx, absorb, elem.immunity, halfdmg, weakness, potency, xx, xx, xx

I have a feeling that it goes "bad fx group 1, bad fx group 2, eq fx 1, eq fx 2, immunity fx 1, immunity fx 2, things-that-you-normally-don't-want-to-be-immune-to 1, TTYNDWTBIT 2. ribbon has an 01 for it's TTYNDWTBIT 1, which i'm assuming is Lure. Berserk is in that table, so not all of them are necessarily things you want.
for this area of the eitm_data.bin file found /ps2data/image/ff12/test_battle/in/binaryfile: eitm_data.bin:

genji armor: 0x00007e4c63
genji helm: 0x000079cc
e3
dueling mask: 0x000076b4~
demon shield: 0x00007474~ ?
*as a further note, all work done for items will probably use this file, simply for size and address strings. See further posts for important modifying details. This file is purely for discovery purposes, in short.

elements:
01 - fire
02 - lightning
04 - ice
08 - earth (confirmed by dragon shield)
10 - water
20 - wind
24 - wind + ice (this confirms grouping; just add digits up)
40 - holy
80 - dark
^ you'll notice that elements pool in a logical way. so, if i wanted to take half from both fire and lightning, my value would be 03 - both fire and lightning.

equipnegative group (presumably group 2):
02 - silence
^ this is probably a direct copy of "status immunities group 2"

equip on-statuses group 1:
01 - ?
02 - regen
04 - protect
08 - shell
10 - haste
20 - bravery
40 - ?
80 - reflect

equip on-statuses group 2:
01 - ?
02 - regen?
04 - float
08 - berserk
10 - bubble
20 - ?
40 - libra
42 - ? if ribbon is accurate, libra and regen
80 - ?

status immunities group one:
01 - ? < ribbon doesn't cover this
02 - ? < ribbon doesn't cover this
04 - petrify
08 - stop
10 - sleep
20 - confuse
40 - doom
80 - blind

status immunities group two:
01 - poison?
02 - silence
04 - sap
05 - poison + sap
08 - oil
10 - ? < ribbon doesn't cover this
20 - disable?
40 - immobilize
60 - immobilize + disable
80 - slow

status immunities group three: probably inverse of good immunities to have e.g. lure, protect, shell
01 - ? < ribbon has this (probably lure)

there's probably a group 4 for the same concept as the other xx in the schedule.

I'll post again to keep it not-ungodly-long.

robes carry defense/mdef at 0x00004104 (black robes), 0x00004138 (glimmering robes),
0x0000416c (lordly robes) as 38 05 ff
to get to the next DEF/MDEF entry, press either left or right arrow 52 times. you'll be on the next one in again, more-or-less the order that the wiki has. accessories break this rule in a bad way.

opal ring's def/mdef is at 0x00004548 and reads 02 00 1f

example:
0x000044e0 40 01 ff for def/mdef < maximilian
subtract 52 (hex: 34): 44e0 - 34 = 44ac
genji armor: 0x000044ac ; you'll note that genji armor lists its defensive values as 3f 00 07
it's important to note most of the "normal" gear ends in FF. only accessories and genji seem to break that rule, so it's probably got something to do with special effects, but again, I should stress that "go 52 places in X direction" isn't the same as knowing the breakpoints for items. i don't know which item+direction the data 'belongs' to yet.

in regards to modifying HP/MP/stats/status immunities portion of the file:
if you go to turtleshell choker 0x00007fe4
count out your 24 places (going right) and you'll be at leather gorget. then jade collar, then rose corsage. this means cheatengine's table, which suggests Nihopalaoa and Steel Gorget are supposed to be sammiched in there, doesn't match the file's data structure. The last item in the file is Ribbon. Thief's cuffs seem to be right under Burning Bow and right before Empyrean Rod, unless there's a 1 magick power rod I'm not aware of.

known accessories order (not for def/mdef, purely HP/MP effects etc.)
grand armor (last armor; the file going upwards lists all heavy, then all mage (GOING UP FROM HERE!), then all light, then all heavy helms, mage hats, light hats, then shields)
opal ring
ruby ring
tourmaline ring
sage's ring
ring of renewal
agate ring
bangle
orrachea armlet
power armlet
argyle armlet
amber armlet
berserker bracers
magick gloves
gauntlets
turtleshell choker
leather gorget
jade collar
rose corsage
indigo pendant
bowline sash
firefly
sash
bubble belt
nishijin belt
black belt
germinas boots
hermes' sandals
gillie boots
winged boots
quasimodo boots
manufactured nethicite
cat-eared hood
fuzzy miter
ribbon

The Important Post

Discovered by steam user watafuzz, any changes made to (seemingly) any portion of final fantasy xii: the zodiac age (pc) must be done in your copy's localized /test_battle/xx/binaryfile/battle_pack.bin and that's where you have to make the change, according to your game's language. For example, if you have a U.S. edition of the game, you would use the VBF browser to go to /ps2data/image/ff12/test_battle/us/binaryfile/ and then you would "find" via hex editor or cheatengine the whole of eitm_data.bin within battle_pack.bin, and in battle_pack.bin is where you'll make your changes if you want them reflected in the game.
Any decent hex editor should let you copy a few lines into a notepad (or open both files, etc.) to find these items in the battle_pack.

you'll find zodiac escutcheon's eva/meva at 0x00002c80.
52 away, at at 0x00002c4c, is venetian shield's.

seitengrat: 0x00002462 : e0 00 19 4b 00 00 (e0 = attack 19 = crit/combo rate, 4b = evasion)
keep in mind that's the bottom "zodiac age" item, so reserves follow it and don't make much sense.
52 before it, on the other hand: 0x0000242e (trango sword): 99 0a 1e 00 00 00 (I don't know what the 0a does)
52 before that: tula
52 before that (0x000023c6: 64 00 05 0a (bone of byblos)
probably follows cheatengine though for order. remember: you can just multiply to move your addresses. if you know the item you want is 18 items away, 52 * 18 = 936 / in hex = 3A8; address +/- 3A8.

Discovered by steam user swarna: (this is a direct quote of their post, and permission was given)

Weapons start at test_battle/in/binaryfile/eitm_data.bin from at most offset 0x6C (Broadsword).
Weapon Format (52 bytes):
Not sure about start and end-points per weapon but each is definitely 52 bytes in length:

Known Weapon Fields per Byte (Starting from offset 0x6C and repeating every 52 bytes):
Weapon Type? (0x0A for melee, 0x64 for ranged, 0x14 for Kumbha, 0xC8 for Seitengrat)
Damage Formula
ATK
??? (0x00 or 0x0A depending on weapon type, e.g. all Spears are 0A and all Ninja Swords are 00)
Combo Rate
Evasion
Elemental Effect
On-Hit Status Effect Inflict Chance
On-Hit "Bad" Status Effect Group 1
On-Hit "Bad" Status Effect Group 2
On-Hit "Good" Status Effect Group 1 (e.g. Faith=0x20)
On-Hit "Good" Status Effect Group 2 (e.g. Berserk=0x80, Regen=0x02)
4 Bytes -> Weapon Classifications/Icons? Haven't explored in-depth (For example, Spears are equal to eachother here, but 2H and 1H swords get differentiated)
Special Property Group(s) (I've looked at stat and elemental potency boosts so far)
^ Probably spans more than 1 byte

Status and elemental effects seem to share the same values/arithmetic system as in armor and accessories.
Multiple effects correspond to an addition of their respective values.

Damage Formula Values :
http://finalfantasy.wikia.com/wiki/List_of_Final_Fantasy_XII_weapons#Damage_formula
0x14 Strength(Sword, Spear, Rod)
0x15 Speed (Ninja Sword, Dagger)
0x16 Magick (Katana, Staff)
0x17 Vitality (Axe, Hammer, Hand-bomb)
0x18 Pole
0x19 Bow
0x1A Cross-bow
0x1B Pierce (Gun, Measures, healing Rods)
0x68 Mace

Some observed Special Properties in the first byte (unverified but probably correct):
0x18: Potency: Water (Fumarole, Six-fluted Pole)
0x30: Potency: Fire (Burning Bow)
0x60: +2 MAG (most Rods, Oak Staff)
0xC0: +3 MAG and Wind Boost (Cherry Staff)
I don't know if these use the same kind of arithmetic as other item properties.

values update:

equip on-statuses group 1:
01 - disease
02 - lure
04 - protect
08 - shell
10 - haste
20 - bravery
40 - faith
80 - reflect

equip on-statuses group 2:
01 - vanish
02 - regen
04 - float
08 - berserk
10 - bubble
20 - critical HP
40 - libra
80 - x-zone

status immunities group one:
01 - death/instant KO
02 - stone
04 - petrify
08 - stop
10 - sleep
20 - confuse
40 - doom
80 - blind

status immunities group two:
01 - poison
02 - silence
04 - sap
08 - oil
10 - reverse
20 - disable
40 - immobilize
80 - slow

if you're looking in watafuzz's eitm_end.ods spreadsheet (or otherwise just want to know the order of the HP/stats/resistances etc area of the file)...

gendarme (line 32)
shell shield (line 33)
ice shield (line 34)
flame shield (line 35)
dragon shield (line 36)
demon shield (line 37)
venetian shield (line 38)
zodiac escutcheon (line 39)
ensanguined shield (line 40)


leather cap (line 41)
headgear (line 42)
headguard (line 43)
leather headgear (line 44)
horned hat (line 45)
balaclava (line 46)
soldier's cap (line 47)
green beret (line 48)
red cap (line 49)
headband (line 50)
pirate hat (line 51)
goggle mask (line 52)
adamant hat (line 53)
officer's hat (line 54)
chakra band (line 55)
thief's cap (line 56)
gigas hat (line 57)
chaperon (line 58)
crown of laurels (line 59)
renewing morion (line 60)
dueling mask (line 61)


cotton cap (line 62)
magick curch (line 63)
pointy hat (line 64)
topkapi hat (line 65)
calot hat (line 66)
wizard's hat (line 67)
lambent hat (line 68)
feathered cap (line 69)
mage's hat (line 70)
lamia's tiara (line 71)
sorcerer's hat (line 72)
black cowl (line 73)
astrakhan hat (line 74)
gaia hat (line 75)
hypnocrown (line 76)
gold hairpin (line 77)
celebrant's miter (line 78)
black mask (line 79)
white mask (line 80)
golden skullcap (line 81)
circlet (line 82)


leather helm or bronze helm (line 83)
iron helm or sallet (line 84)
barbut (line 85)
winged helm (line 86)
close helmet or golden helm (line 87)
bone helm (line 88)
diamond helm (line 89)
steel mask (line 90)
platinum helm (line 91)
giant's helm (line 92)
dragon helm (line 93)
genji helm (line 94)
magepower shishak (line 95)
grand helm (line 96)

--

ringmail (line 97)
windbreaker (line 98)
heavy coat (line 99)
survival vest (line 100)
brigandine (line 101)
jujitsu gi (line 102)
viking coat (line 103)
metal jerkin (line 104)
adamant vest (line 105)
barrel coat (line 106)
power vest (line 107)
ninja gear (line 108)
gigas chestplate (line 109)
minerva bustier (line 110)
rubber suit (line 111)
mirage vest (line 112)
brave suit (line 113)


cotton shirt (line 114)
light woven shirt (line 115)
silken shirt (line 116)
kilimweave shirt (line 117)
wizard's robes (line 118)
chanter's djellaba (line 119)

traveler's vestment (line 120)
mage's habit (line 121)
enchanter's habit (line 122)
sorcerer's habit (line 123)
black garb (line 124)

carmagnole (line 125)
maduin gear (line 126)
jade gown (line 127)
gaia gear (line 128)
cleric's robes (line 129)

white robes (line 130)
black robes (line 131)
glimmering robes (line 132)
lordly robes (line 133)


scale armor (line 134)
shielded armor (line 135)
demon mail (line 136)
diamond armor (line 137)
mirror mail (line 138)

platinum armor (line 139)
carabineer mail (line 140)
dragon mail (line 141)
genji armor (line 142)
maximillian (line 143)
grand armor (line 144)


opal ring (line 145)
ruby ring (line 146)
tourmaline ring (line 147)
sage's ring (line 148)

ring of renewal (line 149)
agate ring (line 150)
bangles (line 151)
orrachea armlet (line 152)
power armlet (line 153)

argyle armlet (line 154)
amber armlet (line 155)
berserker bracers (line 156)
magick gloves (line 157)
gauntlets (line 158)

turtleshell choker (line 159)
leather gorget (line 160)
jade collar (line 161)
rose corsage (line 162)
indigo pendant (line 163)

bowline sash (line 164)
firefly (line 165)
sash (line 166)
bubble belt (line 167)
nishijin belt (line 168)

black belt (line 169)
germinas boots (line 170)
hermes sandals (line 171)
gillie boots (line 172)
winged boots (line 173)

quasimodo boots (line 174)
manufactured nethicite (line 175)
cat-eared hood (line 176)
fuzzy miter (line 177)
ribbon (line 178)
EOF

missing from this area:
missing shields:
leather shield
buckler
bronze shield
round shield
golden shield
diamond shield
platinum shield
crystal shield
genji shield
kaiser shield
aegis shield

missing headgear:
burgonet
close helm or golden helm
leather helm or bronze helm
iron helm or sallet

missing armor:
leather clothing
chromed leathers
leather breastplate
bronze chestplate
shepherd's bolero
leather armor
bronze armor
iron armor
linen cuirass
chainmail
golden armor
bone mail

missing accessories:
blazer gloves
steel gorget
battle harness
golden amulet
cameo belt
genji gloves
steel poleyns
goddess's magicite
diamond armlet
thief's cuffs
pheasant netsuke
nihopalaoa
embroidered tippet
dawn shard

commented

Some notes I've taken. Haven't had a chance to fully cross check with other findings but seems in line so far.

This follows byte number for the structure of Weapon/Armor. If the first 34 Bytes are removed from the file you get nice rows that line up and translate below
Edit Header is 32 Bytes and not 34. Follow the @watafuzz spreadsheets. All of my values below are 2 bytes off. The ID should be 4 bytes instead of 2.

0x00-0x03 uint weapon_id // If you add 2048 to this number it will match up in the XMLs
0x04-0x05 ushort item_type // Item Type or Category
0x06 uchar // ?? Follows grouping of item type
0x07 uchar // ENUM (4 ^ 1, 2, 3, 4 ...)
0x08 uchar order_byte_a
0x09 uchar order_byte_b
0x0a-0x0f uchar[6] // Padding
0x10 uchar metal_value // 0x00, 0x01, 0x02, 0x03, 0x05
0x11 uchar ?? // Values 0x12, 0x17, 0x18, 0x19, 0x12, 0x1a, 0xff
0x12-0x13 ushort gil_value
0x14-0x17 uchar[4] // Padding
0x18 uchar shield_eva, armor_def // Something different for weapons
0x19 uchar weap_dmg_formula, shield_meva, armor_mresist
0x1a uchar weap_atk // Something different for armor
0x1b uchar weap_knockback // Something different for armor
0x1c uchar crit_combo_rate
0x1d uchar weap_eva
0x1e uchar elm_effect
0x1f uchar on_hit_chance
0x20 uchar bad_effect_1
0x21 uchar bad_effect_2
9x22 uchar good_effect_1
0x23 uchar good_effect_2
0x24 uchar ?? // 
0x25 uchar ?? // THese three bytes may be related to icons and models
0x26 uchar ?? //
0x27 uchar ct
0x28-0x2b uint attributes // Offset to attribute (attribute_start_byte + this value)
0x2c uchar ??
0x2d uchar ?? // 0x00 or 0x80
0x2e-0x2f uchar[2] // Padding
0x30 uchar // ??
0x31 uchar // ?? Flag (0x00, 0x01) or part of uchar before to make a ushort value
0x32 uchar render_model // 0x00 or 0x77
0x33 uchar // Padding for 52 byte

Re: missing items

Some line lines in eitm_end seem to handle multiple items, like changing the health bonus on line 42 headgear also change the health bonus on the chromed leather

For the file header I went with 32 bytes on my spreadsheet, since it's what it is for a lot of the files in test_battle/ and the whole file make sense with that. 28964 bytes in 557 groups of 52 bytes and then 4224 bytes in 176 groups of 24 bytes. Tho obviously I could be wrong.

Speaking of spreadsheets I may as well put hem here:

eitm_data.zip

For the byte that is either 77 or 00, I think it has to do with the game looking for a model or not.

I took the blood sword and swapping the model (0xDA) to another worked fine but removing the model without also turning the 77 in 00 crashed the game. Same deal if trying to make the invisible weapons visible: had to make the 0x00 in 0x77 or else crash

So the 24 byte portion is extra data for items depending on their POINTER value in the 52 byte portion.

The field I mentioned as "Special Property Group(s)" (or alternatively 0x22-0x23 in phoenik's ordering, 0x28-0x29 in watafuzz's spreadsheets) points to the corresponding address (2 bytes, possibly also uses the 3rd too).

Notice that the default values "0x00" points to the very first row of the 24-byte portion (which is all 0's). This is for items with no extra special properties.

The value 0x18 (i.e. address 24, the very next row) is used by Six-fluted Pole. The row is all 0's except for a single 0x10 value (Potency: Water effect). The next value 0x30 (48, the next row after that) is used by Burning Bow and the 24-byte row holds a single 0x01 (Potency: Fire effect). The reason some items are affected by the same row is because those items point to the same row.

Full properties of 24-byte portion:

0x00-0x01 HP
0x02-0x03 MP
0x04 STR
0x05 MAG
0x06 VIT
0x07 SPD
0x08-0x09 Bad Status Propogation
0x0A-0x0B Good Status Propogation
0x0C-0x0D Bad Status Immunity
0x0E EOF flag? (0x01 for Ribbon, 0x00 for the rest)
0x0F 0x00 for all
0x10 Absorb
0x11 Immune
0x12 Half
0x13 Weak
0x14 Potency
0x15-0x17 0x00 for all

@SwarnaD: I don't have a ribbon in any of my playthroughs, but changing the status portion from 0x0A-F to read: 7c 57 ff ff 01 88 = should give you immunity to everything bad and on-equip every beneficial with the exceptions of reflect, lure, and critical HP. For the purposes of this, reverse and berserk are bad. Ribbon is the only item that, to my knowledge, protects against disease (for it's 01 in position 0x0E), though I can't test this without cheatengine'ing in a ribbon first. Will actually begin testing today, as mostly I've been digging around the files instead. ^^

commented

@SwarnaD Great finds! I'm going to adjust what I'm working with to a 32 Byte header so we're all in line (since the other files all use 32 byte headers).

commented

Examining the header more:

0x01-0x03 File Type
0x04-0x07 Number of Items
0x08-0x0b Number of Attributes ? This may actually be the byte length of items... since the value is only 52.
0x0c-0x0f Pointer to Items
0x10-0x13 Padding ? Potentially part of pointer to items
0x14-0x17 Padding
0x18-0x1b Pointer to Attributes
0x1c-0x1f Padding ? Potentially part of pointer to attributes

This should give us the means to parse the binary file easily and allow us to add more items / attributes. How that works into the battle bin I'm not sure. Would probably need a tool for editing that as well.

commented

hey guys if you have some time. please organize this into a pull request.. this is excellent research

commented

@davoodinator I opened a PR with compiled information from this thread. I think we should keep the discussion here still until we've finalized on all of the fields.

commented

From my open PR, you can see what information we're missing in a bit of a more readable format:
https://github.com/phoenik/ff12doc/blob/master/ps2data/image/ff12/test_battle/eitm_data.bin.md

Following bytes need more information:

0x06
0x07 // It's in a power of 4. ENUM for something
0x11 // Values are 0x12, 0x17, 0x18, 0x19, 0x12, 0x1a, 0xff. Another ENUM.
0x24-0x26 // These three may be related to icon and model information?
0x2c
0x2d // 0x00 or 0x80
0x2e-0x31 // Looks like an integer for something
commented

Updated the item structure with some more information

0x11 Equip Restrictions
0x18 Weapon Range
0x25-0x26 Weapon Stance
0x30-31 Weapon Model. May also encompass 0x2e-0x2f

Still needs looking into:

0x06 // Seems to follow item type
0x07 // Power of 4 values
0x1a // Don't know what this does for armor, solved for weapons
0x24 // Needs testing. Weapons only.
0x2c // Needs testing. Weapons only.
0x2d // 0x00 or 0x80. Value for weapons is 0x80. Potentially a weapon flag.

We're very close!

commented

It looks like 0x2d is only 0x80 when it's a weapon.

Values 0x24, 0x2c, 0x2d are only used with weapons so my guess is it has to do with animations.

Edit: Values at 0x1b are only defined for weapons as well. 0x1a might have something to do with abilities on armor / accessories with 0xFF being default.

A bit of testing on a play through:
Making an item have KO immunity means that at hitting 0 hp, you get the "has fallen" animation and message but the character isn't really dead, so that's a bit buggy. Re-equipping stands the character back up if they've been healed at all.

I'm almost positive the section for attack on accessories and armor also determines what they do. If you look at the values for say, goddess's magicite and dawn shard, they share values in this field. I suspect this relates to action or ability data, but I'll need to test this more tonight (I plan to make manufactured nethicite also reduce MP to 0 so it's 24 byte end bit can be used for weapons instead)

I changed what would be armor evasion on the tournesol to 1E, in an attempt to find range (since ranged use 64 here, spears 1e, kumbha 14) but still couldn't hit a dive talon. On the other hand, changing mithuna to c8 at the same position on it's array gives it range enough to attack as soon as you can target.

commented

@shinseikuevangerion I believe bit 0x18 is weapon range, but I don't think it has an effect on hitting flying enemies.

commented

No luck testing 0x06.

Byte 0x07 with value 0x04 allows the weapon to attack flying monsters. I'm assuming this byte has more special properties behind it but I haven't had time to test. I see values 0x00, 0x04, 0x10, 0x12, 0x16 for weapons. There's additional values for armors and accessories.

Not sure what it represents for armor. Could be similar in that it gives a special property not covered by status and attributes.

commented

Update for 0x07:

0x00 None
0x02 Cannot Sell
0x04 DMG Flying
0x10 Ignore Licenses
0x20 Shield Armor
0x40 Head Armor
0x60 Body Armor
0x80 Accessory

These properties are additive, so a weapon with 0x12 cannot be sold and ignores license requirements. An accessory that cannot be sold and ignores licenses would be 0x92, which is verified by Nethicite, Magicite, and Dawn Shard accessories.

commented

Byte 0x1a for armor is the special armor effect. Added it into my new pull request. There's only 4 bytes that we need to figure out now:

0x06 // Follows item type grouping... changing this value didn't seem to do anything visually.
0x24
0x2c // Only has values for weapons. Might be sound effect related?
0x2d // Values are 0x00 for armor and accessories and 0x80 for weapons. May have to do with visuals.

Changing 0x2c didn't seem to change anything sound related for me (or anything at all really). Changing models tho changes the sound accordingly.

kumbha:
0x04/06: 03 xx 8c
0x24-26: 00 01 03
0x2c: 09
^ kumbha (line 173) uses the 0x04 (column F) of katana but the 0x06 (column H) of sword
it also uses the 0x24 (column AL) of katana but the 0x25-26 (columns AM+AN) of sword
and the 0x2c (column AT) of regular katana

I think 0x2c has something to do with model effects (like glows or elemental auras or on-hit bubbles, or whatever). For swords, they're all 02 except for Flametongue and Icebrand, which are 03 and 05. Greatswords are all 06 except excalibur, 07. So far as I've found, the only weapon I found that breaks this rule is Burning Bow (all bows are 15). gladius and zwill crossblade are the only two that share a value (both are wind), while other wind weapons (in the case of this example) use their own unique values, and not daggers. The number is always a +01 to the number of their weapon's "standard" one unless a weapon category features multiple elements, in which case they sequence in item order (flametongue 03, then icebrand 05). Measures are also all 30, despite their various "effect:" fields.

also, about the 0x1a values for armor/accessories: just about all the accessories feature augments restricted normally to enemies/guests, except for the obvious license board ones. this is interpreted by looking at this page: http://finalfantasy.wikia.com/wiki/List_of_Final_Fantasy_XII_enemy_abilities
... and matching up some of the accessory descriptions with them.

cameo belt - 02 = ignore evasion
jade collar - 04 = parry
gauntlets - 05 = last stand
battle harness/genji helm - 06 = counter (which probably means they don't stack; see amber armlet)
genji armor - 07 = counter+
leather gorget - 08 = spellbreaker
amber armlet - 09 = brawler
steel gorget - 0a = adrenaline
blazer gloves - 0b = focus
cat-eared hood - 0c = LP becomes gil instead
genji gloves - 0d = combo +80%
pheasant netsuke - 0e = item potency
nihopalaoa - 0f = reverse medicine
agate ring - 10 = ignore weather and terrain
indigo pendant - 12 = ignore magic evade
diamond armlet - 19 = better treasure chest drops (sometimes)
embroidered tippet - 1b = double xp gain
golden amulet - 1c = double LP gain
firefly - 1d = no exp gain
opal ring - 1f = ignore reflect
turtleshell choker - 20 = use gil instead of MP
sage's ring - 24 = halve MP costs
steel poleyns - 25 = avoid traps
goddess's magicite/dawn shard - 27 = 0 mp
magick gloves - 67 = serenity
orrachea armlet - 72 = ("slightly raises max hp?")

I have a feeling some of the enemy-only augments will be in this list, so tonight I'm going to start using values we don't have yet to get towards a full list to ~FE. Specifically I'd really like to find Safety, since immunity to KO doesn't work properly.

edit: added measures are 30.
edit2: forgot to mention: changing ribbon's end-section (24 byte area) at 0x0f and 0x10 to 01 88 did in fact immunize against berserk and disease.

commented

I've updated the attribute item data structure

0x0e good_immunities_1
0x0f good_immunities_2

I think we have everything for attributes now! Very close to having entire equipment structure down.