• Welcome to Final Fantasy Hacktics. Please login or sign up.
 
April 16, 2024, 07:25:47 am

News:

Don't be hasty to start your own mod; all our FFT modding projects are greatly understaffed! Find out how you can help in the Recruitment section or our Discord!


Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - formerdeathcorps

41
1) Ramza's skillset is additive.  You never lose skills.  It's also interesting to note that ONLY Ramza has "locked skills" (not Agrias, or Mustadio, or Beowulf).  The reason is simple: only Ramza exhibits the character growth in the story that would justify such additions.  Jot5 is not really a story about character growth; we have no good means of justifying that mechanic.
Another common method of justification is time lapse wherein Chapter I and II take place 2+ years about in the game's storyline.  If something happens to certain characters in between, unlocking new skills (or losing old ones) is justified, but it has to exist in the story for its own sake and not be tacked-on.  Again, Jot5 does not do this in between chapters.
As for having each chapter not accumulate the gains of the previous, that works best when
A) The units change between chapters.  One variant is the aforementioned physical / mental changes to existing characters (or a replacement of existing characters with new ones); another is the use of generic troops (so that you cannot be sure the generics you deploy in Chapter II are the same people as in Chapter I).
B) The gains accrued are temporary.  In other words, if all the bonuses are intended to be in-battle only (and reflect temporary states of heightened physical or mental prowess), then obviously, they should wear off when combat ends.
C) The game is real time.  IN real time games, it is often possible for a good player to beat the game with average or basic gear simply due to skill.  In such games, gear and abilities often matter less than your ability to dodge attacks and find opportune moments to strike.  Thus, resetting the gear in between chapters in such games is actually a means of increasing difficulty while still being fair.
D) The situation confronting the characters in Chapter II is so different that all the abilities and gear acquired in Chapter I are useless.  This works better if each chapter can "stand alone" as separate games.
It's obvious Jot5 meets none of the above conditions.  Furthermore, the starting scene DID erase everyone's skills to 0.  I'm sure Ramza (having survived all of FFT's plot) and the other heroes (many of whom were in active combat in their worlds) should have had starting skills (which isn't THAT hard to ASM), but given that 2 years have passed for Ramza and the way the other characters entered the scene, you can justify them all starting again as novices (even though the in-game reason is that we just started a new game).  However, to find 3 more excuses for the same thing happening is to stretch the incredulity of the player.  Furthermore, games work better if the difficulty curve generally increases from beginning to end.  Resetting skills and gear in between chapters makes it harder to follow this pattern.

2) The game is being released piecemeal due to technical limitations that can only be solved with a massive amount of ASM.  Once we accepted that, it was decided to release per chapter (rather than all at once) so people wouldn't have to wait three years.  Hence, it is assumed every release is meant to be part of an integrated whole (not some glorified demo for the full version). Of course, each chapter will be properly defined with a boss and a climax of its own, but there's no reason to assume Chapter I should be anything less than Chapter IV.

3) Your job locking proposal can be accomplished without ASM, but that aside, why is the game "incomplete" because it contains features you "weren't supposed to have"?  Wouldn't the game be "more incomplete" if those features were taken away and you were left only with 6 or 8 unlockable jobs in Chapter I?  If anything, all Raven did was a milder version of what Voldemort did in 1.3; he reversed the grinding paradigm so that an "easy run" is based on the intuitive strategies of a first-time player with experience at SRPGs and a "difficult run" involves over-leveling or "early tech tree scaling" of FFT "experts".  In other words, it penalizes those who overspecialized their playing style towards vanilla FFT.  Once you mentally adjust to what "challenge" means in this new system, the fun will flow naturally.

4) Unless Raven changed it since last I played Chapter I, you do have Move-Get JP.  It's not as bad as you say, but even then, the question must be posed.  Why do you have to master ninja or samurai or whatever else immediately?  Why not just buy the necessary skills necessary to win battles on your first play-through and worry about completion after you have a grasp of the game?

5) As for game balance, Raven is probably the best FFH has at the subject.  I'm sure he knows already what the maximum damage on any given unit combination is and he already set them within acceptable bounds.
42
Changes to Unit Tables:

089b8fe8: 00161100 sll r2,r22,0x04
089b8fec: 00561023 subu r2,r2,r22
089b8ff0: 00021080 sll r2,r2,0x02
089b8ff4: 00561021 addu r2,r2,r22
089b8ff8: 000218c0 sll r3,r2,0x03           //r3 = Unit ID * 0x1e8
089b8ffc: 3c02092e lui r2,0x092e
089b9000: 24425cb4 addiu r2,r2,0x5cb4
089b9004: 00438821 addu r17,r2,r3          //r17 = 0x92e5cb4 + unit ID * 0x1e8

In other words, each unit's basic data is 0x1e8 long (0x28 longer than vanilla).  It starts at 0x92e5cb4.  For reference, this is vanilla's unit RAM table:

   0x0000: Sprite Set
      0x?? - Special Character
      0x80 - Generic Male
      0x81 - Generic Female
      0x82 - Monster
   0x0001: Unit ID (FF doesn't exist)
   0x0002: Party ID (FE prevents HP/MP growth?)
   0x0003: Job ID
   0x0004: Palette
      0x00 Default
      0x01 Hokuten
      0x02 Nanten
      0x03 Death Corps
      0x04 Glabados Church
      0x05 No Palette?
   0x0005: ENTD Flags
      0x80 - Always Present
      0x40 - Randomly Present
      0x3X - Green Team
      0x2X - Light Blue Team
      0x1X - Red Team
      0x0X - Blue Team
      0x08 - Control
      0x04 - Immortal
      0x02 - (both set by Ramza when initialized)
      0x01 -
   0x0006: Gender Byte
      0x80 - Male
      0x40 - Female
      0x20 - Monster
      0x10 - Join after event
      0x08 - Load Formation
      0x04 - ??? Stats
      0x02 -
      0x01 - Save Formation
   0x0007: Death Counter (3 for living units)
   0x0008: Bithday (days, plus bit 0 from next byte)
      0x000-0x01e - January
      0x01f-0x03a - February
      0x03b-0x059 - March
      0x05a-0x077 - April
      0x078-0x096 - May
      0x097-0x0b4 - June
      0x0b5-0x0d3 - July
      0x0d4-0x0f2 - August
      0x0f3-0x110 - September
      0x111-0x12f - October
      0x130-0x14d - November
      0x14e-0x16c - December
   0x0009: Zodiac Sign
      0xf0 -
      0xe0 -
      0xd0 -
      0xc0 - Serpentarius
      0xb0 - Pisces
      0xa0 - Aquarius
      0x90 - Capricorn
      0x80 - Sagittarius
      0x70 - Scorpio
      0x60 - Libra
      0x50 - Virgo
      0x40 - Leo
      0x30 - Cancer
      0x20 - Gemini
      0x10 - Taurus
      0x00 - Aries
   0x000a - Innate Ability 1
   0x000c - Innate Ability 2
   0x000e - Innate Ability 3
   0x0010 - Innate Ability 4
   0x0012 - Primary Skillset
   0x0013 - Secondary Skillset
   0x0014 - Reaction Ability
   0x0016 - Support Ability
   0x0018 - Movement Ability
   0x001a - Head
   0x001b - Body
   0x001c - Accessory
   0x001d - Right Hand Weapon
   0x001e - Right Hand Shield
   0x001f - Left Hand Weapon
   0x0020 - Left Hand Shield
   0x0021 - Experience
   0x0022 - Level
   0x0023 - Original Brave
   0x0024 - Brave
   0x0025 - Original Faith
   0x0026 - Faith
   0x0027 - 1 = Unit's Turn?
   0x0028 - HP
   0x002a - Max HP
   0x002c - MP
   0x002e - Max MP
   0x0030 - Original PA
   0x0031 - Original MA
   0x0032 - Original SP
   0x0033 - Bonus PA (doubles as minimum (bonus + 1) stats?)
   0x0034 - Bonus MA
   0x0035 - Bonus SP
   0x0036 - PA
   0x0037 - MA
   0x0038 - SP
   0x0039 - CT
   0x003a - Move
   0x003b - Jump
   0x003c - WP 1
   0x003d - WP 2
   0x003e - WEVA 1
   0x003f - WEVA 2
   0x0040 - Acc. PEV
   0x0041 - RH Shield PEV
   0x0042 - LH Shield PEV
   0x0043 - C-Ev
   0x0044 - Acc. MEV
   0x0045 - RH Shield MEV
   0x0046 - LH Shield MEV
   0x0047 - X Coordinate
   0x0048 - Y Coordinate
   0x0049:
      0x80 - Higher Elevation
      0x40 - Stepping Stone
      0x20 -
      0x10 -
      0x08 -
      0x04 -
      0x03 - Facing East
      0x02 - Facing North
      0x01 - Facing West
      0x00 - Facing South
   0x004a: Equippable Items 1
      0x80 - Barehanded
      0x40 - Knife
      0x20 - Ninja Blade
      0x10 - Sword
      0x08 - Knight's Sword
      0x04 - Katana
      0x02 - Axe
      0x01 - Rod
   0x004b: Equippable Items 2
      0x80 - Staff
      0x40 - Flail
      0x20 - Gun
      0x10 - Crossbow
      0x08 - Bow
      0x04 - Instrument
      0x02 - Book
      0x01 - Polearm
   0x004c: Equippable Items 3
      0x80 - Pole
      0x40 - Bag
      0x20 - Cloth
      0x10 - Shield
      0x08 - Helmet
      0x04 - Hat
      0x02 - Hair Adornment
      0x01 - Armor
   0x004d: Equippable Items 4
      0x80 - Clothing
      0x40 - Robe
      0x20 - Shoes
      0x10 - Armguard
      0x08 - Ring
      0x04 - Armlet
      0x02 - Cloak
      0x01 - Perfume
   0x004e: Innate Statuses 1
      0x80 -
      0x40 - Crystal
      0x20 - Dead
      0x10 - Undead
      0x08 - Charging
      0x04 - Jump
      0x02 - Defending
      0x01 - Performing
   0x004f: Innate Statuses 2
      0x80 - Petrify
      0x40 - Invite
      0x20 - Darkness
      0x10 - Confusion
      0x08 - Silence
      0x04 - Blood Suck
      0x02 - Cursed
      0x01 - Treasure
   0x0050: Innate Statuses 3
      0x80 - Oil
      0x40 - Float
      0x20 - Reraise
      0x10 - Transparent
      0x08 - Berserk
      0x04 - Chicken
      0x02 - Frog
      0x01 - Critical
   0x0051: Innate Statuses 4
      0x80 - Poison
      0x40 - Regen
      0x20 - Protect
      0x10 - Shell
      0x08 - Haste
      0x04 - Slow
      0x02 - Stop
      0x01 - Wall
   0x0052: Innate Statuses 5
      0x80 - Faith
      0x40 - Innocent
      0x20 - Charm
      0x10 - Sleep
      0x08 - Don't Move
      0x04 - Don't Act
      0x02 - Reflect
      0x01 - Death Sentence
   0x0053: Status Immunities 1
      0x80 -
      0x40 - Crystal
      0x20 - Dead
      0x10 - Undead
      0x08 - Charging
      0x04 - Jump
      0x02 - Defending
      0x01 - Performing
   0x0054: Status Immunities 2
      0x80 - Petrify
      0x40 - Invite
      0x20 - Darkness
      0x10 - Confusion
      0x08 - Silence
      0x04 - Blood Suck
      0x02 - Cursed
      0x01 - Treasure
   0x0055: Status Immunities 3
      0x80 - Oil
      0x40 - Float
      0x20 - Reraise
      0x10 - Transparent
      0x08 - Berserk
      0x04 - Chicken
      0x02 - Frog
      0x01 - Critical
   0x0056: Status Immunities 4
      0x80 - Poison
      0x40 - Regen
      0x20 - Protect
      0x10 - Shell
      0x08 - Haste
      0x04 - Slow
      0x02 - Stop
      0x01 - Wall
   0x0057: Status Immunities 5
      0x80 - Faith
      0x40 - Innocent
      0x20 - Charm
      0x10 - Sleep
      0x08 - Don't Move
      0x04 - Don't Act
      0x02 - Reflect
      0x01 - Death Sentence
   0x0058: Current Statuses 1
      0x80 -
      0x40 - Crystal
      0x20 - Dead
      0x10 - Undead
      0x08 - Charging
      0x04 - Jump
      0x02 - Defending
      0x01 - Performing
   0x0059: Current Statuses 2
      0x80 - Petrify
      0x40 - Invite
      0x20 - Darkness
      0x10 - Confusion
      0x08 - Silence
      0x04 - Blood Suck
      0x02 - Cursed
      0x01 - Treasure
   0x005a: Current Statuses 3
      0x80 - Oil
      0x40 - Float
      0x20 - Reraise
      0x10 - Transparent
      0x08 - Berserk
      0x04 - Chicken
      0x02 - Frog
      0x01 - Critical
   0x005b: Current Statuses 4
      0x80 - Poison
      0x40 - Regen
      0x20 - Protect
      0x10 - Shell
      0x08 - Haste
      0x04 - Slow
      0x02 - Stop
      0x01 - Wall
   0x005c: Current Statuses 5
      0x80 - Faith
      0x40 - Innocent
      0x20 - Charm
      0x10 - Sleep
      0x08 - Don't Move
      0x04 - Don't Act
      0x02 - Reflect
      0x01 - Death Sentence
   0x005d - Poison CT
   0x005e - Regen CT
   0x005f - Protect CT
   0x0060 - Shell CT
   0x0061 - Haste CT
   0x0062 - Slow CT
   0x0063 - Stop CT
   0x0064 - Wall CT
   0x0065 - Faith CT
   0x0066 - Innocent CT
   0x0067 - Charm CT
   0x0068 - Sleep CT
   0x0069 - Don't Move CT
   0x006a - Don't Act CT
   0x006b - Reflect CT
   0x006c - Death Sentence CT
   0x006d: Elemental Absorption
      0x80 - Dark
      0x40 - Holy
      0x20 - Water
      0x10 - Earth
      0x08 - Wind
      0x04 - Ice
      0x02 - Lightning
      0x01 - Fire
   0x006e: Elemental Nullification
      0x80 - Dark
      0x40 - Holy
      0x20 - Water
      0x10 - Earth
      0x08 - Wind
      0x04 - Ice
      0x02 - Lightning
      0x01 - Fire
   0x006f: Elemental Halving
      0x80 - Dark
      0x40 - Holy
      0x20 - Water
      0x10 - Earth
      0x08 - Wind
      0x04 - Ice
      0x02 - Lightning
      0x01 - Fire
   0x0070: Elemental Weakness
      0x80 - Dark
      0x40 - Holy
      0x20 - Water
      0x10 - Earth
      0x08 - Wind
      0x04 - Ice
      0x02 - Lightning
      0x01 - Fire
   0x0071: Elements Strengthened
      0x80 - Dark
      0x40 - Holy
      0x20 - Water
      0x10 - Earth
      0x08 - Wind
      0x04 - Ice
      0x02 - Lightning
      0x01 - Fire
   0x0072 - Raw HP
   0x0075 - Raw MP
   0x0078 - Raw SP
   0x007b - Raw PA
   0x007e - Raw MA
   0x0081 - HP Growth
   0x0082 - HP Multiplier
   0x0083 - MP Growth
   0x0084 - MP Multiplier
   0x0085 - SP Growth
   0x0086 - SP Multiplier
   0x0087 - PA Growth
   0x0088 - PA Multiplier
   0x0089 - MA Growth
   0x008a - MA Multiplier
   0x008b: Reactions 1
      0x80 - PA Save
      0x40 - MA Save
      0x20 - Speed Save
      0x10 - Sunken State
      0x08 - Caution
      0x04 - Dragon Spirit
      0x02 - Regenerator
      0x01 - Brave UP
   0x008c: Reactions 2
      0x80 - Face (Faith) UP
      0x40 - HP Restore
      0x20 - MP Restore
      0x10 - Critical Quick
      0x08 - Meatbone Slash
      0x04 - Counter Magic
      0x02 - Counter Tackle
      0x01 - Counter Flood
   0x008d: Reactions 3
      0x80 - Absorb Used MP
      0x40 - Gilgame Heart
      0x20 - Reflect
      0x10 - Auto Potion
      0x08 - Counter
      0x04 -
      0x02 - Distribute
      0x01 - MP Switch
   0x008e: Reactions 4
      0x80 - Damage Split
      0x40 - Weapon Guard
      0x20 - Finger Guard
      0x10 - Abandon
      0x08 - Catch
      0x04 - Blade Grasp
      0x02 - Arrow Guard
      0x01 - Hamedo
   0x008f: Support 1
      0x80 - Equip Armor
      0x40 - Equip Shield
      0x20 - Equip Sword
      0x10 - Equip Katana
      0x08 - Equip Crossbow
      0x04 - Equip Spear
      0x02 - Equip Axe
      0x01 - Equip Gun
   0x0090: Support 2
      0x80 - Half of MP
      0x40 - Gained JP-UP
      0x20 - Gained EXP-UP
      0x10 - Attack UP
      0x08 - Defense UP
      0x04 - Magic Attack UP
      0x02 - Magic Defense UP
      0x01 - Concentrate
   0x0091: Support 3
      0x80 - Train
      0x40 - Secret Hunt
      0x20 - Martial Arts
      0x10 - Monster Talk
      0x08 - Throw Item
      0x04 - Maintenance
      0x02 - Two Hands
      0x01 - Two Swords
   0x0092: Support 4
      0x80 - Monster Skill
      0x40 - Defend
      0x20 - Equip Change
      0x10 -
      0x08 - Short Charge
      0x04 - Non-Charge
      0x02 -
      0x01 -
   0x0093: Movement 1
      0x80 - Move +1
      0x40 - Move +2
      0x20 - Move +3
      0x10 - Jump +1
      0x08 - Jump +2
      0x04 - Jump +3
      0x02 - Ignore Height
      0x01 - Move-HP UP
   0x0094: Movement 2
      0x80 - Move-MP UP
      0x40 - Move-Get EXP
      0x20 - Move-Get JP
      0x10 - Cannot Enter Water
      0x08 - Teleport
      0x04 - Teleport 2
      0x02 - Any Weather
      0x01 - Any Ground
   0x0095: Movement 3
      0x80 - Walk on Water
      0x40 - Move in Water
      0x20 - Move on Lava
      0x10 - Move Underwater
      0x08 - Float
      0x04 - Fly
      0x02 - Silent Walk
      0x01 - Move-Find Item
   0x0096 - Unlocked Jobs 1-8 (all of these start at 0x80 and count down)
   0x0097 - Unlocked Jobs 9-16
   0x0098 - Unlocked Jobs 17-20
   0x0099 - Base Action Abilities 1-8
   0x009a - Base Action Abilities 9-16
   0x009b - Base R/S/M 1-6
   0x009c - Chemist Action Abilities 1-8
   0x009d - Chemist Action Abilities 9-16
   0x009e - Chemist R/S/M 1-6
   0x009F - Knight Action Abilities 1-8
   0x00A0 - Knight Action Abilities 9-16
   0x00A1 - Knight R/S/M 1-6
   0x00A2 - Archer Action Abilities 1-8
   0x00A3 - Archer Action Abilities 9-16
   0x00A4 - Archer R/S/M 1-6
   0x00A5 - Monk Action Abilities 1-8
   0x00A6 - Monk Action Abilities 9-16
   0x00A7 - Monk R/S/M 1-6
   0x00A8 - Priest Action Abilities 1-8
   0x00A9 - Priest Action Abilities 9-16
   0x00AA - Priest R/S/M 1-6
   0x00AB - Wizard Action Abilities 1-8
   0x00AC - Wizard Action Abilities 9-16
   0x00AD - Wizard R/S/M 1-6
   0x00AE - Time Mage Action Abilities 1-8
   0x00AF - Time Mage Action Abilities 9-16
   0x00B0 - Time Mage R/S/M 1-6
   0x00B1 - Summoner Action Abilities 1-8
   0x00B2 - Summoner Action Abilities 9-16
   0x00B3 - Summoner R/S/M 1-6
   0x00B4 - Thief Action Abilities 1-8
   0x00B5 - Thief Action Abilities 9-16
   0x00B6 - Thief R/S/M 1-6
   0x00B7 - Mediator Action Abilities 1-8
   0x00B8 - Mediator Action Abilities 9-16
   0x00B9 - Mediator R/S/M 1-6
   0x00BA - Oracle Action Abilities 1-8
   0x00BB - Oracle Action Abilities 9-16
   0x00BC - Oracle R/S/M 1-6
   0x00BD - Geomancer Action Abilities 1-8
   0x00BE - Geomancer Action Abilities 9-16
   0x00BF - Geomancer R/S/M 1-6
   0x00C0 - Lancer Action Abilities 1-8
   0x00C1 - Lancer Action Abilities 9-16
   0x00C2 - Lancer R/S/M 1-6
   0x00C3 - Samurai Action Abilities 1-8
   0x00C4 - Samurai Action Abilities 9-16
   0x00C5 - Samurai R/S/M 1-6
   0x00C6 - Ninja Action Abilities 1-8
   0x00C7 - Ninja Action Abilities 9-16
   0x00C8 - Ninja R/S/M 1-6
   0x00C9 - Calculator Action Abilities 1-8
   0x00CA - Calculator Action Abilities 9-16
   0x00CB - Calculator R/S/M 1-6
   0x00CC - Bard Action Abilities 1-8
   0x00CD - Bard Action Abilities 9-16
   0x00CE - Bard R/S/M 1-6
   0x00CF - Dancer Action Abilities 1-8
   0x00D0 - Dancer Action Abilities 9-16
   0x00D1 - Dancer R/S/M 1-6
   0x00D2 - Base/Chemist Job Level
   0x00D3 - Knight/Archer Job Level
   0x00D4 - Monk/Priest Job Level
   0x00D5 - Wizard/Time Mage Job Level
   0x00D6 - Summoner/Thief Job Level
   0x00D7 - Mediator/Oracle Job Level
   0x00D8 - Geomancer/Lancer Job Level
   0x00D9 - Samurai/Ninja Job Level
   0x00DA - Calculator/Bard Job Level
   0x00DB - Dancer/Mime Job Level
   0x00DC - Base Job JP
   0x00DE - Chemist Job JP
   0x00E0 - Knight Job JP
   0x00E2 - Archer Job JP
   0x00E4 - Monk Job JP
   0x00E6 - Priest Job JP
   0x00E8 - Wizard Job JP
   0x00EA - Time Mage Job JP
   0x00EC - Summoner Job JP
   0x00EE - Thief Job JP
   0x00F0 - Mediator Job JP
   0x00F2 - Oracle Job JP
   0x00F4 - Geomancer Job JP
   0x00F6 - Lancer Job JP
   0x00F8 - Samurai Job JP
   0x00FA - Ninja Job JP
   0x00FC - Calculator Job JP
   0x00FE - Bard Job JP
   0x0100 - Dancer Job JP
   0x0102 - Mime Job JP
   0x0104 - Total Base Job JP
   0x0106 - Total Chemist Job JP
   0x0108 - Total Knight Job JP
   0x010A - Total Archer Job JP
   0x010C - Total Monk Job JP
   0x010E - Total Priest Job JP
   0x0110 - Total Wizard Job JP
   0x0112 - Total Time Mage Job JP
   0x0114 - Total Summoner Job JP
   0x0116 - Total Thief Job JP
   0x0118 - Total Mediator Job JP
   0x011A - Total Oracle Job JP
   0x011C - Total Geomancer Job JP
   0x011E - Total Lancer Job JP
   0x0120 - Total Samurai Job JP
   0x0122 - Total Ninja Job JP
   0x0124 - Total Calculator Job JP
   0x0126 - Total Bard Job JP
   0x0128 - Total Dancer Job JP
   0x012A - Total Mime Job JP
   0x012C - 0x013B Unit Name
   0x013C - 0x014B Job Name
   0x014C - 0x0153 Primary Skillset Name (first 8 bytes)
   0x0154 - 0x015B Secondary Skillset Name (First 8 bytes)
   0x015c -
   0x015d - Current Ability CT
   0x015e - Graphic
   0x015f - Portrait
   0x0160 - Palette
   0x0161 - ENTD ID
   0x0162 - Special Skillset? (Specials set their skillset here)
   0x0163 - War Trophy
   0x0164 - Bonus Money Mod (* 100 = Gil)
   0x0165 - X Location? (For where AI tends to stay near)
   0x0166 - Y Location?
   0x0167 -
      0x80 - Higher Elevation Flag (for location)?
      0x40 - Focus on target?
      0x20 - Stay near X/Y? (+0x08 = never move once there)
      0x10 - more aggressive?
      0x08 - Coward-like?
      0x04 -
      0x02 -
      0x01 -
   0x0168 - Prioritized Target
   0x0169 - (ENTD)
   0x016a - (ENTD)
      0x04 - Save CT? (don't move unless needed?)
   0x016b - (ENTD)
   0x016c - Unit Name ID
      0x00XX - Special
      0x01XX - Generic Male
      0x02XX - Generic Female
      0x03XX - Generic Monster
   0x016e - Attacker/Self ID? (this data for charging attacks?)
   0x016f - Skillset of Last Attack Used
   0x0170 - Last Attack Used ID
   0x0172 - Calculator Type Ability ID
   0x0174 - Calculator Multiplier Ability ID
   0x0176 - Used Item/Equip ID?

   0x0178 -
      0x05 - Tile-Specific Ability?
      0x06 - Target-Specific Ability?
   0x0179 - Target ID?
   0x017a - Target X

   0x0???:
      0x80 -
      0x40 -
      0x20 -
      0x10 - Stepping Stone
      0x08 -
      0x04 -
      0x02 -
      0x01 - Walkable

   0x017c - Target Map Level

   0x017e - Target Y


   0x0182: Mount Info
      0x80 - Riding A Unit
      0x40 - Being Ridden
      0x20 -
      0x1f - ID of unit Riding/Being ridden by this unit
   0x0183 - Dealing with unit's ability to appear in battle?
         (FF if unit can't exist?)
         (01 if unit exists, 00 if not (but later can?)?)
      0x80 - Was active, but is now disabled?
      0x02 - Unit will be removed from party? (no longer exists, treas/cryst?)
   0x0184: Equipped Flags?
      0x80 -
      0x40 -
      0x20 -
      0x10 -
      0x08 - Sword Equipped
      0x04 - Materia Blade Equipped
      0x02 -
      0x01 -

   0x0186 - Character's turn (if 01)?
   0x0187 - Movement Taken?
   0x0188 - Action Taken?
   0x0189 -
      0x80 -
      0x40 -
      0x20 -
      0x10 -
      0x08 -
      0x04 - (set to this (and only this) if in water at some point)
      0x02 - In Water?
      0x01 - Turn ended? (wait?)
   0x018a - Unit ID (without "Unit Exists" check)
   0x018b - Ability CT

   CURRENT ACTION DATA

   0x018c/0x00 - Hit Flag
         0x00 - Miss
         0x01 - Hit
   0x018d/0x01 - Critical Hit Flag
   0x018e/0x02 - Evade Type
         0x00 - Hit
         0x01 - Guarded (Accessory) (runs "Missed!"/"Guarded" check)
         0x02 -
         0x03 - (runs "Missed!"/"Guarded" check)
         0x04 - Arrow Guard?
         0x05 - Nullified
         0x06 - Miss
         0x07 - (runs "Missed!"/"Guarded" check)
         0x08 -
         0x09 - Reflected?
         0x0a -
         0x0b - Blade Grasp? (runs "Missed!"/"Guarded" check)
         0x0c -
         0x0d - "Caught"
         0x0e -
         0x0f -
   0x018f/0x03 - Item to break/use
   0x0190/0x04 - HP Damage
   0x0192/0x06 - HP Recovery
   0x0194/0x08 - MP Damage
   0x0196/0x0a - MP Recovery
   0x0198/0x0c - Gil Stolen/Lost
   0x019a/0x0e - Reaction ID
   0x019c/0x10 - Special Flags 1
         0x80 - +1 Level
         0x40 - Switch Team
         0x20 - Poached
         0x10 - Steal Item
         0x08 -
         0x04 - Break Item
         0x02 - Malboro (moldball virus)
         0x01 - Golem
   0x019d/0x11 - Special Flags 2
         0x80 -
         0x40 -
         0x20 -
         0x10 - Katana Break?
         0x08 - Weakness?
         0x04 - Absorption?
         0x02 - Nullification? (Disabled by nullification)
         0x01 - -1 Level
   0x019e/0x12 - SP Change
         0x80 - Bonus Flag
   0x019f/0x13 - CT Change
         0xFF = "Quick"
         0x7F = "CT0"
         0x80 - Bonus Flag
        0x01a0/0x14 - PA Change
         0x80 - Bonus Flag
   0x01a1/0x15 - MA Change
         0x80 - Bonus Flag
        0x01a2/0x16 - Brave Change
         0x80 - Bonus Flag
        0x01a3/0x17 - Faith Change
         0x80 - Bonus Flag
   0x01a4/0x18 - Status Change?
         0x02 - ("Guarded"?)
         0x01 - Failed status infliction? ("Missed!")
   0x01a5/0x19 - Remove Equipment
         0x80 - Remove Helmet
         0x40 - Remove Armor
         0x20 - Remove Accessory
         0x10 - Remove Right Hand Weapon
         0x08 - Remove Right Hand Shield
         0x04 - Remove Left Hand Weapon
         0x02 - Remove Left Hand Shield
         0x01 -
   0x01a6/0x1a -
   0x01a7/0x1b - Attack's Status Infliction 1
         0x80 -
         0x40 - Crystal
         0x20 - Dead
         0x10 - Undead
         0x08 - Charging
         0x04 - Jump
         0x02 - Defending
         0x01 - Performing
   0x01a8/0x1c - Attack's Status Infliction 2
         0x80 - Petrify
         0x40 - Invite
         0x20 - Darkness
         0x10 - Confusion
         0x08 - Silence
         0x04 - Blood Suck
         0x02 - Cursed
         0x01 - Treasure
   0x01a9/0x1d - Attack's Status Infliction 3
         0x80 - Oil
         0x40 - Float
         0x20 - Reraise
         0x10 - Transparent
         0x08 - Berserk
         0x04 - Chicken
         0x02 - Frog
         0x01 - Critical
   0x01aa/0x1e - Attack's Status Infliction 4
         0x80 - Poison
         0x40 - Regen
         0x20 - Protect
         0x10 - Shell
         0x08 - Haste
         0x04 - Slow
         0x02 - Stop
         0x01 - Wall
   0x01ab/0x1f - Attack's Status Infliction 5
         0x80 - Faith
         0x40 - Innocent
         0x20 - Charm
         0x10 - Sleep
         0x08 - Don't Move
         0x04 - Don't Act
         0x02 - Reflect
         0x01 - Death Sentence
   0x01ac/0x20 - Attack's Status Removal 1
         0x80 -
         0x40 - Crystal
         0x20 - Dead
         0x10 - Undead
         0x08 - Charging
         0x04 - Jump
         0x02 - Defending
         0x01 - Performing
   0x01ad/0x21 - Attack's Status Removal 2
         0x80 - Petrify
         0x40 - Invite
         0x20 - Darkness
         0x10 - Confusion
         0x08 - Silence
         0x04 - Blood Suck
         0x02 - Cursed
         0x01 - Treasure
   0x01ae/0x22 - Attack's Status Removal 3
         0x80 - Oil
         0x40 - Float
         0x20 - Reraise
         0x10 - Transparent
         0x08 - Berserk
         0x04 - Chicken
         0x02 - Frog
         0x01 - Critical
   0x01af/0x23 - Attack's Status Removal 4
         0x80 - Poison
         0x40 - Regen
         0x20 - Protect
         0x10 - Shell
         0x08 - Haste
         0x04 - Slow
         0x02 - Stop
         0x01 - Wall
   0x01b0/0x24 - Attack's Status Removal 5
         0x80 - Faith
         0x40 - Innocent
         0x20 - Charm
         0x10 - Sleep
         0x08 - Don't Move
         0x04 - Don't Act
         0x02 - Reflect
         0x01 - Death Sentence
   0x01b1/0x25: Attack Type
         0x80 - HP Damage
         0x40 - HP Recovery
         0x20 - MP Damage
         0x10 - MP Recovery
         0x08 - Status Change?
         0x04 - ?
         0x02 - ?
         0x01 - Stat Change
   0x01b2/0x26 - Last Attack On Self?
   0x01b4/0x28 - Stolen Exp?
   0x01b5/0x29 - Stolen JP?
   0x01b6/0x2a - Hit %
   0x01b8/0x2c -
   0x01b9/0x2d - Main Target ID?
   0x01ba/0x2e - Modified ENTD Flags
         0x80 - Always Present
         0x40 - Randomly Present
         0x3X - Green Team
         0x2X - Light Blue Team
         0x1X - Red Team
         0x0X - Blue Team
         0x08 - Control
         0x04 - Immortal
         0x02 -
         0x01 -
   0x01bb/0x2f - Inflicted Status List 1
   0x01bc/0x30 - Inflicted Status List 2
   0x01bd/0x31 - Inflicted Status List 3
   0x01be/0x32 - Inflicted Status List 4
   0x01bf/0x33 - Inflicted Status List 5


At the most conservative, the following changes are necessary:

Head EQ (+1 byte)
Body EQ (+1 byte)
ACC EQ (+1 bytes)
RH WPN (+1 byte)
RH SHLD (+1 byte)
LH WPN (+1 byte)
LH SHLD (+1 byte)
New EQ Types (+1 Byte)
# of crystals eaten (+1 byte)
Unlocked Jobs 17-23 (+3 Jobs, OK, DK, OK-M...but not enough to be an extra byte)
Dark Knight A / R / S / M Abilities (+3 bytes)
OK / DK Job Level (+1 Byte)
OK / DK Job JP / Total Job JP (+8 bytes)


This accounts for 0x15 out of 0x28 new bytes.

Half of MP Check:
089b9084: 9222009a lbu r2,0x009a(r17)
089b9088: 30420080 andi r2,r2,0x0080
089b908c: 10400006 beq r2,r0,0x089b90a8                     //If not Half of MP, GOTO MP Check
089b9090: 9064000d lbu r4,0x000d(r3)
089b9094: 04810003 bgez r4,0x089b90a4                        //ELSE, halve the MP cost of the spell
089b9098: 00041043 sra r2,r4,0x01
089b909c: 24820001 addiu r2,r4,0x0001                         //An impossible branch
089b90a0: 00021043 sra r2,r2,0x01
089b90a4: 00402021 addu r4,r2,r0
089b90a8: 96220036 lhu r2,0x0036(r17)
089b90ac: 0044082a slt r1,r2,r4
089b90b0: 14200051 bne r1,r0,0x089b91f8                      //If CurMP < MP Cost, GOTO END
089b90b4: 00000000 nop

We see that there are 8 additional bytes between vanilla's current MP (0x2e) vs. WotL's (0x36).  Assuming the same order as vanilla, 7 of the 8 bytes are accounted for with the changes to equip IDs, leaving 1 mystery byte.
WE see that there are 10 additional bytes between vanilla's Half of MP (0x90) vs. WotL's (0x9a).  Assuming the same order as vanilla, 8 of the 10 bytes are accounted for with the changes to equip IDs and types, leaving 2 mystery bytes.
Assuming the number of crystals eaten per character is stored somewhere before current MP, that leaves one extra byte in WotL from curMP to Half of MP that doesn't exist in vanilla.

Innocent / EQ Sword / EQ Materia Blade Checks:
089b90d0: 9222005c lbu r2,0x005c(r17)
089b90d4: 30420040 andi r2,r2,0x0040
089b90d8: 14400047 bne r2,r0,0x089b91f8                               //If caster is Always: Innocent, GOTO END
089b90dc: 00000000 nop
089b90e0: 90630006 lbu r3,0x0006(r3)
089b90e4: 30620008 andi r2,r3,0x0008
089b90e8: 50400007 beql r2,r0,0x089b9108                              //If ability does not have EQ Sword flagged, GOTO Check Next
089b90ec: 30620004 andi r2,r3,0x0004
089b90f0: 922201a8 lbu r2,0x01a8(r17)
089b90f4: 30420008 andi r2,r2,0x0008
089b90f8: 14400009 bne r2,r0,0x089b9120                              //ELSE IF Sword is equipped, GOTO Success
089b90fc: 00000000 nop
089b9100: 1000003d beq r0,r0,0x089b91f8                              //ELSE, GOTO END
089b9104: 00000000 nop
089b9108: 10400005 beq r2,r0,0x089b9120                              //If ability does not have EQ Materia Blade flagged, GOTO Success
089b910c: 00000000 nop
089b9110: 922201a8 lbu r2,0x01a8(r17)
089b9114: 30420004 andi r2,r2,0x0004
089b9118: 10400037 beq r2,r0,0x089b91f8                             //ELSE IF Materia Blade is not equipped, GOTO END

This passage is also revealing in its own way.  We see that innocent is also transposed 10 bytes (from 0x52 in vanilla to 0x5c here).  This means we can narrow the bounds of the unknown byte mentioned above.  It is located between curMP (0x2e) and innocent (0x5c).
Similarly, the byte that detects if the unit is equipping a materia blade or sword has been transposed 36 bytes (from 0x184 in vanilla to 0x1a8 here).  Out of these 36 bytes, only the 21 bytes given in the "obvious additions" list are accounted for, so there are 15 unknown bytes located between Half of MP (0x9a) and Equipped Items Check Byte (0x1a8).
43
Maybe I'm biased here (because I originally rented FFT and played without a guide), but in all my FFT vanilla (and 1.3 runs), I never unlocked ninja until around late Chapter II or III.  Nor did I attempt the DD in vanilla on the actual console (it was my last day and I had to beat the game).
That being said, Raven's already being very fair.  Wouldn't it be better to have a small chance to unlock ninja in Chapter I rather than have the door be totally shut?  The latter implies that the game either has outlawed grinding altogether (which apparently is sacrosanct in a RPG), or there are lumps like per chapter level caps or job caps which do not flow with Jot5's plot.  (FFTA2 may be able to get away with it, but Jot5's plot isn't a coming of age story, which is the usual justification for such things.)
44
The problem is, for every person who wants to be babied with a walk-through, there's another person like me who seeks the novelty and doesn't want a walk-through precisely because it'll spoil the fun of having to think up solutions myself for battles.  I think Jot5's decision not to release an official walk-through is fair, especially since many of us are making videos of how to win for you to watch.
45
PSX FFT Hacking / Re: Formula request please?
March 10, 2014, 08:23:33 am
I was going to wait until the full version of the formula hack was out, but if you insist...

1) The below is the formula for +PA
lui r2,0x8019      
lbu r2,0x38fa(r2)        #Load Y
lui r3,0x8019      
lw r3,0x2d90(r3)      
ori r2,r2,0x0080         #Make Negative
sb r2,0x0014(r3)         #Load as 0x80 + PA decrement (bonus)
lui r3,0x8019      
lw r3,0x2d90(r3)      
ori r2,r0,0x0001         #Load as Psuedo-Status
jr r31         
sb r2,0x0025(r3)      

2) Copy the above exactly into massHex (Glain's ASM coding tool).  You can find it here.

3) Change sb r2, 0x0014 to sb r2, 0x0015 (this changes it from +PA to +MA).

4) IN the address box, type in some address in my BATTLE.BIN Kanji space (it's OK, I hardly ever use it).  NOTE: Valid addresses must be divisible by 4 (meaning they end in 0/4/8/C).  That information is found here.  Compile into hex.

5) Open your hex editor (I prefer HxD, DO NOT use Windhex) and open your patch's copy of BATTLE.BIN (by exporting it with CD Mage, found here).  Although it shouldn't matter for this small hack, as a safety notice (to prevent overlapping ASMs), you should make sure the version of BATTLE.BIN you are about to edit does not contain any ASMs you did not personally insert with this method.  Goto (Ctrl+G) the location you chose, copy the hex values created in massHex, and overwrite (Ctrl+B) the values at the existing location.

6) Open Windows Calculator and change it to hexadecimal mode (or if you are good with math, you can do it yourself).  Add 67000 to the number you just typed in the address box.  Add 80 to the front of the number and then reverse the bytes.  This means you reverse each group of 2 hex digits as a group.  I'll give an example:

Original Offset: E7420
New Offset: E7420 + 67000 = 14E420
Add "80" to the front: 8014E420
Flip Bytes:
80 | 14 | E4 | 20
becomes
20 | E4 | 14 | 80

7) IN the same BATTLE.BIN file, GOTO (Ctrl+G) the offset 125670 (we are overriding formula 18).  Type in your final result from step 6.

8) Save BATTLE.BIN and import it into your patch with CD Mage.  Formula 18 has now become +Y MA.


I believe revealing the method is more important than giving you the answer because this is the first lesson in becoming an ASMer.
46
War of the Lions Hacking / Code Documentation Thread
March 10, 2014, 03:25:07 am
PLEASE STICKY.

The main code for WotL is located in BOOT.BIN.  This thread is dedicated to its documentation.

Rafa / Malak New Hardcoding (found in 0xCF8CC in BOOT.BIN)

088d3878: 3c0408a7 lui r4,0x08a7
088d387c: 248464c0 addiu r4,r4,0x64c0
088d3880: 00853021 addu r6,r4,r5           //r6 = Ability Offset
088d3884: 90c50003 lbu r5,0x0003(r6)     //r5 = Ability Flags 1
088d3888: 90d10009 lbu r17,0x0009(r6)    //r17 = Ability X
088d388c: 3c04092f lui r4,0x092f
088d3890: 90d20008 lbu r18,0x0008(r6)    //r18 = Ability Formula
088d3894: a085975c sb r5,-0x68a4(r4)     //Store r5 in ability RAM.
088d3898: 324500ff andi r5,r18,0x00ff
088d389c: 24a4ffe2 addiu r4,r5,-0x001e
088d38a0: 2c810002 sltiu r1,r4,0x0002
088d38a4: 50200027 beql r1,r0,0x088d3944    //If not Rafa / Malak formulas, check for Formula 5E (Triple Thunder / Flame)
088d38a8: 2404005e addiu r4,r0,0x005e
088d38ac: 3c04092e lui r4,0x092e
088d38b0: 8c845b9c lw r4,0x5b9c(r4)
088d38b4: 14800022 bne r4,r0,0x088d3940      //If not during combat phase, check for Formula 5E
088d38b8: 00000000 nop
088d38bc: 3c1008a8 lui r16,0x08a8
088d38c0: 00002021 addu r4,r0,r0
088d38c4: 0e288700 jal 0x08a21c00               //Stores 0 (r4) into 0x097a7514
088d38c8: 2610b1f0 addiu r16,r16,-0x4e10      //r16 = Chance of N Hits Table Offset (see below)
088d38cc: 3c0408a8 lui r4,0x08a8
088d38d0: 2484b1fc addiu r4,r4,-0x4e04
088d38d4: 0e2886c0 jal 0x08a21b00            //Input r4 = 0x08a7b1fc, r5 = 0x155e into routine, but these values (which seem to be an offset containing a special RNG seed / multiplier) are not used
088d38d8: 2405155e addiu r5,r0,0x155e

08a21b00: 27bdfff0 addiu r29,r29,-0x0010
08a21b04: afbf000c sw r31,0x000c(r29)
08a21b08: 0e288ab0 jal 0x08a22ac0                    //r2 = Word at (0x97a7114)
08a21b0c: 00000000 nop
08a21b10: 24030001 addiu r3,r0,0x0001
08a21b14: 14430010 bne r2,r3,0x08a21b58          //If r2 isn't 1, GOTO RNG Routine  (Is this a multiplayer check?)
08a21b18: 00000000 nop
08a21b1c: 3c02097a lui r2,0x097a
08a21b20: 8c457514 lw r5,0x7514(r2)               //ELSE, override r5 with value at 0x097a7514 (0)
08a21b24: 3c03097a lui r3,0x097a
08a21b28: 3c02097a lui r2,0x097a
08a21b2c: 2442744c addiu r2,r2,0x744c            //r2 = 0x97a744c
08a21b30: 00052040 sll r4,r5,0x01                   
08a21b34: 00441021 addu r2,r2,r4                   //r2 = r2 + r5 * 2 (0x097a744c)
08a21b38: 24a40001 addiu r4,r5,0x0001           //r4 = r5 + 1 (1)
08a21b3c: 84420000 lh r2,0x0000(r2)              //r2 = halfword at the address of r2 (0 in my test run)
08a21b40: 28810064 slti r1,r4,0x0064
08a21b44: 14200006 bne r1,r0,0x08a21b60      //GOTO END if r4 < 100 and store r4 as value in 0x97a7514
08a21b48: ac647514 sw r4,0x7514(r3)
08a21b4c: 3c03097a lui r3,0x097a
08a21b50: 10000003 beq r0,r0,0x08a21b60      //ELSE, GOTO END and store 0 as value in 0x97a7514
08a21b54: ac607514 sw r0,0x7514(r3)
//Pretty much, this whole thing means that if the value at 0x97a7114 is 1, let X be the value at 0x97a7514.  X is incremented if less than 100 and set to 0 otherwise.  Return the Xth entry in the halfword table of 100 entries starting at 0x97a744c.  Since this is the RNG routine, we're talking about returning a fixed set of probabilities listed on that table.
08a21b58: 0e27c030 jal 0x089f00c0              //RNG routine

The meat of the RNG routine is performed not at 89f00c0, but at 880e338.  All 89f00c0 does is reduce the output to a value between 0000-7FFF.
0880e338: 27bdfff0 addiu r29,r29,-0x0010
0880e33c: afbf0004 sw r31,0x0004(r29)
0880e340: 0e202dc0 jal 0x0880b700            //r2 = 08a71fe8 unless value at the address (r26 + 4) is non-zero, where r26 must be non-zero.
0880e344: afb00000 sw r16,0x0000(r29)
0880e348: 0e202dc0 jal 0x0880b700            //Routine run again for stupid reason, r16 = r2.
0880e34c: 00408021 addu r16,r2,r0
0880e350: 8c4800a8 lw r8,0x00a8(r2)         //r8 = Previous RNG Seed's lower 32 bits
0880e354: 3c074c95 lui r7,0x4c95
0880e358: 34e77f2d ori r7,r7,0x7f2d           //r7 = Fixed Multiplier Lower
0880e35c: 01070019 multu r8,r7
0880e360: 3c065851 lui r6,0x5851
0880e364: 34c6f42d ori r6,r6,0xf42d          //r6 = Fixed Multiplier Upper
0880e368: 8c4900ac lw r9,0x00ac(r2)        //r9 = Previous RNG Seed's upper 32 bits
0880e36c: 00002810 mfhi r5                     //r5 = Upper 32 bits of r8 * r7 (erases input)
0880e370: 00002012 mflo r4                     //r4 = Lower 32 bits of r8 * r7 (erases input)
0880e374: 00a00013 mtlo r5                     //r5 -> LO
0880e378: 00c8001c madd r6,r8                // (HI, LO) = (r5, r5) + r6 * r8, where (rX, rY) designates a 64-bit number with rX in the upper 32 bits and rY in the lower 32
0880e37c: 24820001 addiu r2,r4,0x0001
0880e380: 0044202b sltu r4,r2,r4              //r4 = 1 if carry-over
0880e384: ae0200a8 sw r2,0x00a8(r16)      //Store New RNG seed's lower 32-bits
0880e388: 00e9001c madd r7,r9               //(HI, LO) = (r5 + UPP32(r6 * r8), r5 + LOW32(r6 * r8)) + r7 * r9
0880e38c: 00003012 mflo r6
0880e390: 00861821 addu r3,r4,r6
0880e394: 0e202dc0 jal 0x0880b700           //More retarded calls (see above for why).
0880e398: ae0300ac sw r3,0x00ac(r16)      //Store New RNG seed's upper 32-bits.
0880e39c: 8c4300ac lw r3,0x00ac(r2)
0880e3a0: 8fbf0004 lw r31,0x0004(r29)
0880e3a4: 8fb00000 lw r16,0x0000(r29)
0880e3a8: 00601021 addu r2,r3,r0             //r2 = RNG Upper 32-bits.
0880e3ac: 7c02ffc4 ins r2,r0,0x1f,0x01       //Erases the sign of r2.  Equivalent to sll r2, r2, 0x01, srl r2, r2, 0x01
0880e3b0: 03e00008 jr r31
0880e3b4: 27bd0010 addiu r29,r29,0x0010

08a21b5c: 00000000 nop
08a21b60: 8fbf000c lw r31,0x000c(r29)
08a21b64: 03e00008 jr r31
08a21b68: 27bd0010 addiu r29,r29,0x0010

088d38dc: 00021880 sll r3,r2,0x02
088d38e0: 00622021 addu r4,r3,r2
088d38e4: 00041880 sll r3,r4,0x02
088d38e8: 00831821 addu r3,r4,r3
088d38ec: 00031880 sll r3,r3,0x02                     //r3 = RN{0...7FFF} * 100
088d38f0: 04610003 bgez r3,0x088d3900            //This is guaranteed, GOTO 0x88d3900 and r5 = RN{0...99}
088d38f4: 00032bc3 sra r5,r3,0x0f
088d38f8: 24637fff addiu r3,r3,0x7fff                 //Ensures positivity, but this isn't necessary.
088d38fc: 00032bc3 sra r5,r3,0x0f
088d3900: 3c0308a8 lui r3,0x08a8
088d3904: 9064b1f0 lbu r4,-0x4e10(r3)              //Starting at 0x08a7b1f0 (or BOOT.BIN 0x277244) is a table listing the probability of for getting N hits on Rafa / Malak formulas.  There are 10 entries; thus, the maximum # of hits is hard-coded as 10.
Hit 1    5%
Hit 2    5%
Hit 3    10%
HIt 4   10%
Hit 5    20%
HIt 6    20%
HIt 7    10%
Hit 8    10%
Hit 9     5%
Hit 10    5%
088d3908: 0085082a slt r1,r4,r5
088d390c: 10200009 beq r1,r0,0x088d3934          //GOTO 0x88d3934 if failed on the first attempt
088d3910: 24110001 addiu r17,r0,0x0001             //r17 = 1
088d3914: 00a42823 subu r5,r5,r4                     //ELSE (on success), reduce RN by the probability of the previous table entry
088d3918: 26100001 addiu r16,r16,0x0001           //Increment one slot on the failure table
088d391c: 26230001 addiu r3,r17,0x0001
088d3920: 92040000 lbu r4,0x0000(r16)
088d3924: 307100ff andi r17,r3,0x00ff               //r17++
088d3928: 0085182a slt r3,r4,r5
088d392c: 5460fffa bnel r3,r0,0x088d3918         //Keep going until number of hits is determined
088d3930: 00a42823 subu r5,r5,r4
088d3934: 3c03092e lui r3,0x092e
088d3938: 10000048 beq r0,r0,0x088d3a5c       //GOTO OTHER CHECKS, store r17 as the number of hits
088d393c: a0715c4e sb r17,0x5c4e(r3)
47
1) Every form of evasion boosting stacks upon other forms of evasion stacking.
2) I had an old thread about it, but to make the long story short, you can have up to 5 possible reactions:
EQ
Innate 4
Innate 3
Innate 2
Innate 1
If a triggered reaction is higher on the priority list than abandon / weapon guard, the game will check it before it checks passive reactions, but since passive reactions are automatically calculated in the evasion routines, you'll end up with the effects of both.  However, if you set the passive reaction at higher priority, the active reaction will never trigger because the game can only trigger one reaction (which is always the passive reaction).
48
Help! / Re: not sure where to put this
March 05, 2014, 06:47:08 pm
Move this to Help!  This ASM already exists (and is used in FFT ARena).  Please ask FFMaster to provide it for you.
49
I'd like to see this project succeed, as well.  Check your PMs.
50
PSX FFT Hacking / Re: ASM Starter kit
March 02, 2014, 05:15:35 pm
Thank you for posting this.  Is Pride still AWOL?
51
Help! / Re: Spare R/S/M's
March 02, 2014, 05:07:57 pm
The spare slot between Counter and Distribute is the reaction that is triggered when reflect is activated.  The two at the end are blank, but the unit data RAM shows that those two abilities are only partly read into the table (so you'll have to write an exception for the in-battle effect and display for it to work).  I know that the three "blank" support abilities are referenced in vanilla's code, but I don't remember exactly where.
52
This isn't a bot, merely someone who believes in his religion too much.

1) The lack of certainty does not mean the lack of knowledge.  I may not remember yesterday exactly, but I know I ate two meals, did homework, and worked on my patch.  More precisely, the probability I didn't do such things is low.  Unless actively deceived, human beings remember a projection of the past that is right in general and wrong on the details.

2) Even if we assume your argument is valid, i.e. that ignorance is widespread because of the lack of certainty, your argument does not prove your Hindu faith.  If every man (including yourself) is ignorant and cannot prove the non-existence of past lives or Hindu deities, it is equally true that no proof of your belief system exists (because of ignorance).  In other words, it could be equally true that no deity or afterlife exists, or that the Christian God exists, or that some other system of religious belief is true.
All you have established is a (flawed) proof of mathematical unprovability, not a proof of existence.
53
New Project Ideas / Re: Patch Ideas Proposal Thread
February 16, 2014, 01:11:37 am
This sounds like PX's old puzzle hack idea (which inspired me to make EGCC).  This is kind of like a reverse version of my patch idea.

However, certain missions may be too easy (Velius, Elmdor, etc.)
54
Spam / Re: For all the lonely folks today...
February 15, 2014, 11:23:33 pm
Lijj, you're more handsome than the guy in the picture.  Why lie about yourself?
55
Help! / Re: Issue with an ASM outside of ePSXe.
January 31, 2014, 12:32:48 am
bht, where did you get that ASM?  I thought I deleted the old version of that ASM in the latest Patcher release (because it's known to glitch and there now exists a general ASM to cover weapon formula requests).
56
The Lounge / Re: Hey everybody!
January 24, 2014, 09:42:50 am
Quote
OrgASM is a fairly easy to use ASM hack application tool. You put hacks in the same folder the program is run in, and choose which you wish to activate from a list. The descriptions of some hacks can be vague at times, but they say what they'll do succinctly, for the most part. This is, to the typical user, a simple 'yes, yes, no, yes, no, no' checklist of a tool. You may not even wish to use it.

The latest version of orgASM is not like that.  It contains larger hacks that come with default values corresponding to the unmodified game and requires the user to read the descriptions of the hack to change given values to correspond to what they want.
57
Help! / Re: How to reflect edited data
January 22, 2014, 10:02:13 am
It doesn't work that way.  Most of the files in fftpack.bin have no function in the actual game and are simply legacy files from the Japanese PSX version.  The code that actually matters in WotL is in EBOOT.BIN.  EBOOT.BIN is encrypted, but if you replaced it with BOOT.BIN. which is unencrypted, the game will still be fine.
58
Help! / Re: Chainspell
January 20, 2014, 04:21:35 am
I cannot see the download site because I get a "403 Forbidden" error.  Is the download site restricted to only Japanese IPs?

The Chainspell (known as Doublecast outside Japan) mod, is it for PS1 FFT?  Or is it not for FFT (as you said "non-FFT")?
59
I don't understand how this will directly affect the rest of the world.  Indirectly, however, there are three effects:
1) It will discourage smart people from staying in the USA, who will have more reason to emigrate elsewhere.
2) Internet companies in other countries will try to spread this virus to other countries under the excuse that "the US does it".
3) It will further justify the snobbery of Europeans about "stupid Americans" as it is not inconceivable for the NSA, in cooperation with top ISPs, will try to black out dissident or critical sites, links, and videos that would be accessible or even widely known to most Europeans.

The latter is what really worries me.  Considering what Snowden already revealed about NSA and tech company collusion, this ruling is equivalent to de facto censorship of the Internet by both the state and corporations (there is no difference between the two when it comes to all the big issues).
60
Glain, some of the hacks currently in development will involve FFTPatcher as an editing tool for their custom hacks.  IN other words, someone may want to use FFTPatcher, but change X and Y to be a list of flags rather than unsigned bytes.  Another example would be someone wanting WotL's job requirement table in vanilla (which would require you to have the offset of said table be variable).  In other words, can you increase the flexibility of FFTPatcher's editing abilities (by adding more things editable in resources.zip) for the next version of the program?