• Welcome to Final Fantasy Hacktics. Please login or sign up.
 

ASM Requests

Started by The Damned, October 29, 2014, 09:16:45 pm

Emmy

Does anyone know where this menu is in the code?  Specifically this option (Max equip at job change).  I'd like to either default it to "off" or turn it off permanently in the code and not give the option to put it back on again, whichever is more feasible.  But I can't find it in the wiki. :(



  • Modding version: PSX

nitwit

Quote from: dw6561 on September 27, 2016, 11:24:51 am
What about making statuses like Undead or Confusion have a CT (without replacing the CT of another status)? I realize this would be pretty complicated (considering that it would have to expand upon at least 3 routines relating to status CT setting, decrement, and whatever else I'm missing), but I also know that it would be helpful. Let me know if this is a good idea or if it changes too much to be worthwhile in the end.

IIRC there's a hack that combines the CT of statuses that cancel each other (regen/poison, haste/slow, possibly death-sentence/reraise) to free up room for this.  Author was Pokeytax or Glain, I think.  Download latest version of FFTOrgASM and it should be present in one of the XML files.

Quote from: Emmy on September 27, 2016, 09:40:03 pm
Does anyone know where this menu is in the code?  Specifically this option (Max equip at job change).  I'd like to either default it to "off" or turn it off permanently in the code and not give the option to put it back on again, whichever is more feasible.  But I can't find it in the wiki. :(



http://ffhacktics.com/wiki/Data/Table_Locations

800473ac - Customized Options
NOTE: each of the flags uses the next bit as well, but it's just to display
either "Customize" or "Initialize" (0 = Off, 1 = On, 2 = Custom, 3 = Initial)
0x80000000 -
0x20000000 - Max Equip at Job Change
0x08000000 - Target Flashing
0x02000000 - Display Gained Exp/JP
0x800000 - Show Unequipable Items
0x400000 - Sound = Wide
0x200000 - Sound = Stereo (both off = Mono)
0x080000 - Show Effect Message
0x020000 - Show Ability Name
0x8000 - Navigation Message
0x2000 - Message Speed = Slow (both off = Fast)
0x1000 - Message Speed = Regular
0x0c00 - Finger Cursor Repeat Speed = Slowest
0x0a00 - Finger Cursor Repeat Speed = Slower
0x0800 - Finger Cursor Repeat Speed = Slow
0x0600 - Finger Cursor Repeat Speed = Regular
0x0400 - Finger Cursor Repeat Speed = Fast
0x0200 - Finger Cursor Repeat Speed = Faster
0x0000 - Finger Cursor Repeat Speed = Fastest
0x01c0 - (8 total CS on MH speeds?)
0xZ0 - Cursor speed on multiple heights
0xc0 - Cursor Speed on Multiple Heights = Stop
0x80 - Cursor Speed on Multiple Heights = Slow
0x40 - Cursor Speed on Multiple Heights = Regular
0x00 - Fast
0x0Z
0x38 - (8 total cursor reset speeds?)
0x10 - Cursor Repeat Speed = Slow
0x08 - Cursor Repeat Speed = Regular (both off = Fast)
0x07 - (8 total cursor movement types?)
0x01 - Cursor Movement Type = B (off = A)

800473b0 - Default Options


My guess is you change the default options.  I assume they use the same structure as the customized options above them.

Emmy

October 01, 2016, 01:09:36 am #142 Last Edit: October 04, 2016, 09:00:00 pm by Emmy
So I tried turning this "off" by changing the default settings.  It doesn't say "off" though but "customize" and no idea why. :(

Any idea where the code that this setting enables is actually?  If I can't disable this way, maybe the actual code can be disabled.

**EDIT**  Figured out this, also put in my asm topic:


  <Patch name="Disables equip at job change">
    <Description>Option 12 (Equip at Job Change) does nothing. Code is disabled, so game behaves as if permanently off.</Description>
    <Location file="WORLD_WORLD_BIN" offset="448a8">
      32000010
    </Location>
    <Location file="WORLD_WORLD_BIN" offset="3ee28">
      00000000
    </Location>
  </Patch>


Also updated Wiki in relevant routines.
  • Modding version: PSX

gatebuster202

Hi guys, been a bit, since I posted anywhere but Arena. Working on my mechanics portion of my patches. Anyway, I was wondering if anyone had or could whip up a Random Fire Formula that either A) Used Weapon Damage and was PE, or B) was PA*Y Based?
Preferable to override any Formula between 5E-60 in Patcher.

A might look like Dmg_Weapon #Hit(1,X)
B might be                PA*Y #Hit (1,X)

Was looking for a less overpowered form of Barrage from WotL (Yuk...) And a way to keep crossbows relevant later in the game. Also, could use the Formula for a few other skills, but those reasons are the immediate concern.
  • Modding version: PSX
Winner of the 2nd FFT Arena SCC Tourney. -Geomancers

Timbo

November 19, 2016, 04:23:07 pm #144 Last Edit: November 27, 2016, 04:46:26 pm by Jack of All Trades
I want to include a couple of conflicting ASMs in the text + mechanical changes version of my patch. Would anyone be willing to adjust these?

1. Choto's Alternate Permadeath Hack
  <Patch name="Alternate Permadeath Hack">
    <Description>
      Instead of crystallizing or treasuring, at the end of the death countdown units will become "knocked out" like guests normally

do. The unit will not be lost after, but will be inaccessible until the proposition "Destiny of the Company is done. See

http://ffhacktics.com/smf/index.php?topic=8507.0 for more info.

   Locations:
   $00   Lesalia Imperial Capital
   $01   Riovanes Castle
   $02   Igros Castle
   $03   Lionel Castle
   $04   Limberry Castle
   $05   Zeltennia Castle
   $06   Gariland Magic City
   $07   Yardow Fort City
   $08   Goland Coal City
   $09   Dorter Trade City
   $0A   Zaland Fort City
   $0B   Goug Machine City
   $0C   Warjilis Trade City
   $0D   Bervenia Free City
   $0E   Zarghidas Trade City
   $0F   Fort Zeakden
   $10   Murond Holy Place
   $11   Thieves Fort
   $12   Orbonne Monastery
   $13   Golgorand Execution Site
   $14   Murond Death City
   $15   Bethla Garrison
   $16   Deep Dungeon
   $17   Nelveska Temple
   $18   Mandalia Plain
   $19   Fovoham Plain
   $1A   Sweegy Wood
   $1B   Bervenia Volcano
   $1C   Zeklaus Desert
   $1D   Lenalia Plateau
   $1E   Zigolis Swamp
   $1F   Yuguo Wood
   $20   Araguay Wood
   $21   Grog Hill
   $22   Bed Desert
   $23   Zirekile Fall
   $24   Dolbodar Swamp
   $25   Bariaus Hill
   $26   Doguola Pas
   $27   Bariaus Valley
   $28   Finath River
   $29   Poeskas Lake
   $2A   Germinas Peak
   $2B   -blank-

   Undead try to revive each turn after KO:
   0x07: Yes
   0x09: No

   Undead try to revive each turn:
   0x01: Yes
   0x03: No

   Undead Chance to Revive:
        0x00 - 100%
   0x01 - 50% (vanilla)
   0x03 - 25%
   0x07 - 12%
   0x0F - 6%

    </Description>
    <Location offset="37f90" file="WORLD_WORLD_BIN">
      <!--Set Injured Display-->
      00F50408
      03000534
      00000000
    </Location>
    <Location offset="5d400" file="WORLD_WORLD_BIN">
      <!--Set Injured Display -->
      0400A310
      0C000534
      02004314
      0B000534
      09000534
      E65F0408
      00000000
    </Location>
    <Location offset="38Ab4" file="WORLD_WORLD_BIN">
      <!--Injured Location display? -->
      C0F40408
      0C006132
      00000000
      00000000
      00000000
      00000000
      00000000
      28002226
      020002A6
      21200000
    </Location>
    <Location offset="5d300" file="WORLD_WORLD_BIN">
      <!--Injured Location Display? -->
      16000012
      00000000
      1980103C
      CCC71026
      09003314
      0B006132
      1200A226
      000002A2
      1C002226
      020002A2
      C0000234
      080002A2
      B6620408
      00000000
      06003314
      0F00A226
      000002A2
      28002226
      020002A2
      80000234
      080002A2
      B6620408
      00000000
      C2620408
      00000000
    </Location>
  <Location offset="11C128" file="BATTLE_BIN">
      <!--Death Counter Manipulation -->
      03000392
      2C00013C
      121C2134
      FF002230
      06006210
      020A0100
      FF002230
      03006210
      020A0100
      FF002230
      03006214
      FF000134
      AD0C0608
      070001A2
      07000492
      FF000234
      C0500508
      00000000
      1000A230
      4F004010
      0100C230
      4D004010
    </Location>
    <Location offset="ED300" file="BATTLE_BIN">
      <!--Death Counter Manipulation  -->
      09008210
      21100000
      FFFF8424
      FF008330
      FF000234
      070003A2
      03004314
      25100000
      5C0C0608
      00000000
      AD0C0608
      25100000
    </Location>
    <Location file="EVENT_REQUIRE_OUT" offset="5a90">
      <!--Set units injured in party data  -->
      00480508
      00000000
    </Location>
    <Location file="BATTLE_BIN" offset="EB000">
      <!-- Set units injured in party data -->
      00001224
      BF02060C
      21204002
      07005190
      02005090
      FF001334
      07003316
      0580013C
      05001312
      747F2124
      00821000
      21080102
      03001034
      D00030A0
      01005226
      08000234
      1500422E
      EFFF4014
      01005226
      2C00BF8F
      A6120708
      2800B48F
    </Location>
    <Location file="BATTLE_BIN" offset="11C1c0">
      <!-- Set units injured in party data -->
      AD0C0608
      21100000
    </Location>

<Variable file="BATTLE_BIN" offset="ED300" default="09" name="Undead revive each turn after KO"/>
<Variable file="BATTLE_BIN" offset="ED318" default="01" name="Undead revive each turn"/>
<Variable file="BATTLE_BIN" offset="11C178" default="01" name="Undead Chance to Revive"/>


   <Location offset="1249dc" file="BATTLE_BIN">
      <!--disable revival -->
      40510508
      1980013C
    </Location>
    <Location offset="ED500" file="BATTLE_BIN">
      <!--disable revival -->
      982D238C
      FF000434
      07006190
      00000000
      07008114
      05000134
      B60160A0
      AC0160A0
      8C0160A0
      B10160A0
      8E0161A0
      900160AC
      3400BF8F
      792E0608
      3000B28F
    </Location>
<Location offset="ABBB0" file="WORLD_WORLD_BIN">
      <!--"Injured" Display -->
      11 01 00 11 01 00 00 00 00 00 00 11 01
    </Location>
  <Location offset="ABC30" file="WORLD_WORLD_BIN">
      21 01 00 21 01 00 00 00 00 00 00 21 01
    </Location>
    <Location offset="ABCB0" file="WORLD_WORLD_BIN">
      21 11 11 11 11 11 11 11 11 11 11 21 01
    </Location>
    <Location offset="ABD30" file="WORLD_WORLD_BIN">
      21 21 52 21 21 21 21 52 51 52 51 22 01
    </Location>
    <Location offset="ABDB0" file="WORLD_WORLD_BIN">
      21 21 23 21 21 21 21 21 21 21 21 21 01
    </Location>
   <Location offset="ABE30" file="WORLD_WORLD_BIN">
      21 21 21 21 21 21 21 11 21 46 21 21 01
    </Location>
    <Location offset="ABEB0" file="WORLD_WORLD_BIN">
      21 21 21 21 61 62 21 11 51 22 51 22 01
    </Location>
    <Location offset="ABF30" file="WORLD_WORLD_BIN">
      11 11 11 23 11 11 11 11 11 11 11 11 01
    </Location>
    <Location offset="ABFB0" file="WORLD_WORLD_BIN">
      00 00 41 52 01 00 00 00 00 00 00 00 00
    </Location>
    <Location offset="AC030" file="WORLD_WORLD_BIN">
      00 00 11 11 00 00 00 00 00 00 00 00 00
    </Location>
<Location offset="5D4FC" file="WORLD_WORLD_BIN"><!--Allows 0xd0 = 3 units available for Inn -->
00000000
1480013C
FCD4228C
00000134
06002214
D000C290
03000134
07004114
00000000
2AD60108
00000000
03004014
00000000
01D60108
00000000
41D60108
00000000
</Location>
<Location offset="E7FC " file="WORLD_WLDCORE_BIN"><!--Allows 0xd0 = 3 units available for Inn -->
40F50408
00000000
</Location>
<Location offset="C2c0" file="WORLD_WLDCORE_BIN"><!--Allows 0xd0 = 3 units available for Inn -->
28F50408
21888000
</Location>
<Location offset="5d4a0 " file="WORLD_WORLD_BIN"><!--Allows 0xd0 = 3 units available for Inn -->
3000BFAF
1580013C
D83124AC
1480013C
B2CC0108
FCD424AC
</Location>
<Location offset="CD60" file="WORLD_WLDCORE_BIN"><!--Allows 0xd0 = 3 units available for Inn -->
54F50408
1480013C
</Location>
<Location offset="5d550 " file="WORLD_WORLD_BIN"><!--Allows 0xd0 = 3 units available for Inn -->
FCD4228C
00000134
08002214
D0006290
03000134
03004110
00000000
6BCF0108
00000000
6ACF0108
00000000
5ACF0108
00000000
</Location>
<Location file="WORLD_WLDCORE_BIN" offset="12078"><!--Allow Inn to be repeated -->
80F50408
00000000
</Location>
<Location file="WORLD_WORLD_BIN" offset="5d600"><!--Allow Inn to be repeated -->
02006014
00000000
00000234
000022A0
20E40108
0580023C
</Location>
  <Location file="BATTLE_BIN" offset="4e39c">
      <!--Guests get death counter-->
      00000000
    </Location>
<Location file="WORLD_WLDCORE_BIN" offset="2a14"><!--Inn Locations -->
94F50408
00000000
</Location>
<Location file="WORLD_WORLD_BIN" offset="5d650"><!--Inn Locations -->
07002016
00000000
</Location>
<Variable file="WORLD_WORLD_BIN" offset="5d658" default="0A" name="Inn Location 1"/>
<Variable file="WORLD_WORLD_BIN" offset="5d659" default="0D" name="Inn Location 2"/>
<Location file="WORLD_WORLD_BIN" offset="5d66a"><!--Inn Locations -->
013C
</Location>
<Variable file="WORLD_WORLD_BIN" offset="5d65C" default="0F" name="Inn Location 3"/>
<Variable file="WORLD_WORLD_BIN" offset="5d65D" default="01" name="Inn Location 4"/>
<Location file="WORLD_WORLD_BIN" offset="5d66E"><!--Inn Locations -->
2134
FF002430
06002416
020C0100
FCFF2014
00000000
03000216
21100000
87A60108
00000000
B2A60108
00000000
</Location>
<Location file="WORLD_WLDCORE_BIN" offset="12c5c"><!--Inn always "fails" -->
ACF50408
4000B08F
</Location>
<Location file="WORLD_WORLD_BIN" offset="5d6B0"><!--Inn always "fails"  -->
00000134
05003014
02000334
0A80013C
FCF123AC
19E70108
6800BD27
</Location>
</Patch>


2. Emmy's 2 Swords Penalty
  <Patch name="2 Swords Penalty">
    <Description>3/4 damage per hit on units with 2 swords.  Affects all abilities with Formulas 01-07, no effect on other physical formulas.</Description>
    <Location file="BATTLE_BIN" offset="11EF80">
      30420508
      00000000
    </Location>
    <Location file="BATTLE_BIN" offset="E98C0">
1980023C
942D428C
00000000
91004290
00000000
01004230
0B004010
00000000
1980023C
CE384284
00000000
40180200
21186200
C2170300
21186200
83180300
1980013C
CE3823A4
1980023C
E2170608
CE384224
    </Location>
  </Patch>


3. FFMaster's Enable Sound Test
  <Patch name="Enable Sound Test">
    <Description>Sound Test</Description>
    <Location file="OPEN_OPEN_BIN" offset="0441c">
      00001724
    </Location>
    <Location file="OPEN_OPEN_BIN" offset="04434">
      94cb0108
      00000000
    </Location>
    <Location file="OPEN_OPEN_BIN" offset="05C88">
      d4
    </Location>
    <Location file="OPEN_OPEN_BIN" offset="05CBC">
      02
    </Location>
    <Location file="OPEN_OPEN_BIN" offset="0BE50">
      1000038e
      03001714
      05000234
      0fad0108
      00000000
      10ad0108
      00000000
    </Location>
    <Location file="OPEN_OPEN_BIN" offset="0CFAC">
      19322F2E
      2419322F
      2E24
    </Location>
    <Location file="OPEN_OPEN_BIN" offset="04580">
      7CF50408
    </Location>
    <Location file="WORLD_WORLD_BIN" offset="05D5F0">
      00000536
      0000A390
      0780013C
      AC3F2134
      21082400
      00002290
      00000000
      06006214
      0a000234
      01008424
      0a008228
      F5FFA014
      0100A524
      0a000234
      09008214
      05000234
      100002AE
      00000434
      FA0E010C
      60000534
      A49F010C
      20000434
      89AD0108
      01001724
      BC66010C
      00000434
      62AD0108
      00000000
    </Location>
  </Patch>
  • Modding version: PSX
  • Discord username: Timbo

Timbo

I'm not fond of all of the gender stereotyping in this game. If men want to wear female equipment I say let them. If women want to steal one another's hearts, good on them. With that in mind I propose eliminating the gender stereotyping from Zodiac Compatibility. I propose that Best Compatibility should include females and males and worst compatibility should be eliminated all together.
  • Modding version: PSX
  • Discord username: Timbo

nitwit

Quote from: Jack of All Trades on November 27, 2016, 04:50:57 pm
I'm not fond of all of the gender stereotyping in this game. If men want to wear female equipment I say let them. If women want to steal one another's hearts, good on them. With that in mind I propose eliminating the gender stereotyping from Zodiac Compatibility. I propose that Best Compatibility should include females and males and worst compatibility should be eliminated all together.

It's pretty bigoted of you to assume their gender based on what they wear.

Timbo

Quote from: nitwit on November 29, 2016, 04:21:54 pm
It's pretty bigoted of you to assume their gender based on what they wear.
I can't tell if you are joking or not. Because of the absurdity of your statement, my guess is that you are but without any emojis, there is no way to know. If so, good on you mate.  If you aren't joking then let me respond in kind.

I don't have to assume the gender of any of the characters in this game because the game outright tells you their gender. Secondly, I made absolutely no statements regarding my assumptions. I firmly believe that so long as their behavior brings no harm to anyone else people should be free to be whoever they want to be, especially if it's who they really are, and that we as a community owe it to ourselves to respect one another's identity.

Again, I am still assuming that you were joking but if you wish to fight with me on this PM me because this is not the place for it.
  • Modding version: PSX
  • Discord username: Timbo

3lric

  • Modding version: PSX

Dokurider

Hey guys, can any of you do me a quick little favor? It's super easy.


Crack open FFTPatcher
Go to Attack (0000) under Abilities
Go to the AI Behavior and select "Stop at Obstacle"
Give yourself a reliable way of Berserking yourself
Give yourself a ranged weapon
Patch it
See if the AI acts retarded anymore

...It can't have been that easy, right? Right?

Neophyte Ronin

I'm nervous to ask.  I'm talking, really, really nervous.  Having researched the BMG, I believe the proposed work-around isn't going to run into anything hard-coded.  It might, though.  Feel free to counter-argue.

Request #1: An ASM which multiplies Experience gains by 0, including rounding down to zero in case a formula delivers a minimum of 1.  Either way, ZERO EXP GAIN!  (The remaining EXP, randomly generated at run-time, can remain.  It may be useful somewhere else).  Maybe a second ASM if the Killing Blow EXP causes screw-ups.

Request #2: Another ASM which removes LV from Growth calculations (original formula: bonus = [current_RX/(C+LV)]).

Ergo, Current Raw Stat only--Character Level does not influence adjustable Stats, making Growth numbers irrelevant.  Level and Exp affect Job Point accrual and Calculator Math Skills.  Ramza at LV01, assuming no adjustments in Class data or starting growth rates as expressed in the BMG, gets between 37..39 HP.  For life.  End of story.  Everyone is dealt likewise.

Vanilla Tactics' Level System has issues like a Level-Up-and-Down trick.  With these two theoretical ASMs, parameters associated with LV & EXP (Steal EXP, Level Blast, Degenerator, Gained EXP Up, Move EXP Up, Please Eat) are freed for editing, like that Weapon Guard hack that lets Classes gain Weapon Evasion without needing the ability--what happens to the ability is up to the patch's author.

The implications reach further.

Level and Experience are not just the Calculator's domain, though being rendered immutable means they are more reliable than CT and Height.  See, for JP ([(8+(JobLV*2)+[LV / 4])*M] (M = 3/2, i.e. Gained JP Up), a non-level system may call LV "INT" instead, like D&D3.X--affecting Skill accrual and Calculator susceptibility.  High Levels learn quicker (nice if high-INT Humans appear near end-game to play catch-up if Invited), while Ramza and like company with LV 01 EXP 00 eternally duck two Calculator Abilities.

The second implication might warrant another request, because getting the AI to equip things based on a "progression" besides Story Progress or Shop Availability is another step in my envisioned patch.

Request #3: ASM which has game consider all available equipment options when outfitting AI humans.

The engine chooses equipment based on one of two things: pre-set (like Agrias and Gafgarion always getting their respective fare) or a linear numerical progression which never looks back; once Gold Armor is on the menu, it ditches Mithril and Plate Mail.  This is standard practice for a leveled system, not a non-leveled one seeking to make everything incomparable in some fashion.  Consequently, Leather Armor never gets used because it technically sucks, although most of the medieval fare that fuels a war economy is rejected after ten character levels and not even halfway through the Chapters themselves.  See the problem, right?

Adjustable stats being made static allows for greater equipment options and flavor without worrying about climbing a ladder as a hermit-crab.  The extremes of 1 & 99 still an issue?  Xifanie's min/max hack stabilizes adjustable stats further, so Speed Break doesn't need to add Slow.  Converting the economy from hermit-crab to snowflake-tonguing while maintaining balance is a chore.  Characters might get weird equipment combinations like Leather Armor and Cross Helmet, but each item has perks (Leather is cheap, flexible, and non-conductive, so no issues with Lightning, unlike metal armor), so each is stress-tested for long-term use.

Maybe the deciding factor is Character EXP instead of LV, so someone with Low EXP get stuff like Chain Mail and the upper echelons get Carabineer Plate, turning EXP into a "Prestige/Lineage" Stat that tells us they're loaded or connected.  Hell, I might even ask if this gets remade into the source of end-battle money and see if a Gil-Taking "Attack" can add EXP to the Target and thus make them cough up more cash after the battle is over!

But I'm getting ahead of myself (wouldn't adding EXP make the Enemy Level Up?  Maybe if the Money Bonus was based on 100 - EXP then Gil Taking would be remade into Steal EXP with coins flying around; Negotiate/Beg too....)

Plenty of Patches might benefit from these hacks.  Take Celdia's.  Her equipment does all kinds of things, but they must be replaced over time like every Final Fantasy Game ever, simply due to Leveling up.  Getting Equipment to upgrade with players might solve some of the problem, but not all of it.  Applying this theoretical hack and reworking every item means Celdia can turn them into snowflakes that don't melt in players' hands.  Celdia's patch is already centered on exploration, which is best when optional and never mandatory.

"TOO LONG I DIDN'T READ": two ASM hacks to nix Level and Level-Ups from stat-adjustment equations, rendering first level stats the definitive static levels for all classes and creatures and freeing several Level-associated Abilities.  It would allow a non-Leveling (i.e. "incomparable") campaign, which would necessitate revisions in the game economy and a possible third to let the AI perform extreme mix-and-match with equipment from the beginning to the end-game.

I only assume these ASMs can, in fact, happen.  I'm ready for rebuttals and public outcry.

Emmy

February 25, 2017, 09:07:48 am #151 Last Edit: February 25, 2017, 09:40:53 am by Emmy
1 has already been made:


  <Patch name="EXP Gain = 0.">
    <Location file="BATTLE_BIN" offset="1178A4">
      E73860A0
      22005192
      00000000
      00000000
      00000000
      00000000
      00000000
      210042A2
    </Location>
  </Patch>


2 - Why do you need to make that ASM when you're not gaining XP?  Also there are ways to deal with getting rid of level up and down trick without getting rid of leveling and without requiring asm in general.  You can remove degenerators and level blast, you can make every class have the same growths in every category, etc.  I have *tons* of custom formulas and r/s/m if the goal is to find something to replace steal xp, level blast, etc.  If your goal is balance, calculator should just be nuked for anything else anyway.  I don't see why you need to get rid of leveling, especially since you seem to still want some stat progression...

3.  It kinda already does consider all equipment when randomly equipping things.  Ever come across a knight with a Linen Robe in ch 4?  Well there you go...  Speed break is even more broken with static stats, so you might want to do something else with that ability (who says you need to keep vanilla's theme here?)  However I am looking into solving the problem of equipment that directly outclasses each other.  My weapons currently do that, but I need a better solution for hats/armors/shields.

Quote from: Neophyte Ronin on February 25, 2017, 03:54:42 am
I only assume these ASMs can, in fact, happen.  I'm ready for rebuttals and public outcry.


Best way for these to happen is if you start learning asm yourself. :)  No one made requests for me until I knew enough asm to be able to work through most of the problem myself.
  • Modding version: PSX

Neophyte Ronin

Thanks for replying Emmy!  I wasn't aware they got the XP = 0.

Calculators are broken, but I don't necessarily care.  Their abilities aren't really the problem--their spell selection is.

Okay, so making the ASM might be dumb if every single Growth Rate was changed to zero itself, but I had this in mind: turn LV into INT (since LV is a determinant for JP accrual).  Then, turn XP into "Prestige".  It's basically what the game would use to determine A) what equipment is in use, as if the low, low "XP" guys have the great gear as if they had a high Level, and B) determine cash yields.

Probably write a code, where we can say 100 minus XP equals the "Level" the game uses to determine how much cash is gleaned from the enemy.  This means the guys with high XP with 90 or 85 are like 100 - 90 and 100 - 85 (10 or 15), which means 100*10 and 100*15 (1000 and 1500).  The ability for Thieves that let you swipe gil or the Negotiate/Beg trick reduces XP, thereby heightening the cash yield (theoretically--unless it only decides it before the battle and not after it).

I'll have to look up a guide on all the functions and the locations of everything in the code.  That'll be painful, but maybe it's for the best....

Ansehelm

Hey y'all,
I'm looking at dealing with the relationship between spell ct and character speed by having spell ct decrease dynamically throughout the game as character speed increases. Does anyone have any insight on how to accomplish this, or where to begin?
Thanks
  • Modding version: PSX

Xifanie

Well, if you can't figure that out yourself, explaining this to you would be a LOT more trouble than just doing it ourselves... and you can see yourself how many requests in this topic have been fulfilled.

See: http://ffhacktics.com/smf/index.php?topic=11561.0

But I'm sure Emmy would be happy to help you with that.
  • Modding version: PSX
Love what you're seeing? https://supportus.ffhacktics.com/ 💜 it's really appreciated

Anything is possible as long as it is within the hardware's limits. (ie. disc space, RAM, Video RAM, processor, etc.)
<R999> My target market is not FFT mod players
<Raijinili> remember that? it was awful

Emmy

June 06, 2017, 06:34:21 pm #155 Last Edit: June 06, 2017, 07:25:37 pm by Emmy
I might be able to do it but there's no guarantees. :(

**Edit** I can't test this easily because it's incompatible with MT, but you can try this out and if it works, you're in luck! :)


  <Patch name="Charge CT = CT - Speed">
    <Description>Charge speed scales with unit speed. Original code Made by TFM, modified by Emmy.</Description>
    <Location file="BATTLE_BIN" offset="e937c">
      0C004390
      05004290
      38007292 <!-- Change stat used here -->
      40005730
      0500E012
      00000000
      22187200
      02006104
      00000000
      21180000
      14F20508
      00000000
    </Location>
    <Location file="BATTLE_BIN" offset="e93d0">
      05008390
      0C008290
      40006430
      0E008010
      00000000
      B000A48F
      C0011034
      18009000
      12200000
      1980103C
      CC081036
      21209000
      38008490 <!-- Change stat used here -->
      00000000
      22104400
      02004104
      00000000
      21100000
      94060608
      00000000
    </Location>
    <Location file="BATTLE_BIN" offset="115848">
      df400508
      00000000
    </Location>
    <Location file="BATTLE_BIN" offset="11aa48">
      f4400508
      00000000
    </Location>
  </Patch>
  • Modding version: PSX

Ansehelm

Hey, thanks for giving me something to start with.  I'm a little uncertain what you mean by "change stat used here" though.
Anyway, I applied this hack as it is and here's what happened: I didn't notice any change in ct for my units, although I noticed that enemy generic priests could instantly cast full life. I used a savegame, so I don't know if that would have stopped it from affecting my units vs randomly generated enemies.  It's interesting.
  • Modding version: PSX

Glain

I also created a hack for this when I was playing around with the same concept.  This one uses a curve where CT is affected more at lower speeds, and the effect depends on the CT factor you choose (default 5).  With CT Factor = 5, it begins taking effect at Speed = 5 and ability CT halves by Speed = 10, and would quarter by Speed = 20. 

Basically, for any ability, the CT is affected by a multiplier where ((CT Multiplier) = (CT Factor) / Speed).


  <Patch name="Speed shortens Ability CT">
    <Description>
        (New CT) = ((CT * (CT Factor))) + (Speed - 1)) / Speed    (For Speed >= (CT Factor))
        ((CT Multiplier) = (CT Factor) / Speed)
        Default (CT Factor) = 5
    </Description>
    <Location file="BATTLE_BIN" offset="15D290" mode="ASM" offsetMode="RAM">
        #   HOOK: Attack Preparation (Ability CT)
        #   Parameters:
        #       v0 = Ability data pointer
        #       s2 = Ability CT
        #       s3 = Unit (in-battle) data pointer
        #   Returns:
        #       v0 = Ability data flags 3 ( *(v0 + 5), byte )
        #       s2 = New CT value
        @attack_preparation_ability_ct_hook:
                addiu   sp, sp, -16
                sw      ra, 4(sp)
                sw      s0, 8(sp)
       
                lbu     s0, 5(v0)
               
                lbu     a1, 0x38(s3)        #   Load unit's Speed
                jal     @find_ability_ct
                move    a0, s2
               
                move    s2, v0
                move    v0, s0              #   (Requirement for calling routine)
           
                lw      s0, 8(sp)
                lw      ra, 4(sp)
                addiu   sp, sp, 16
                jr      ra
                nop
       
        #   HOOK: Load skillset ability data (Ability CT)
        #   Parameters:
        #       a0 = Current ability data block 2 pointer (Pointer into array starting at 0x8005fbf0)
        #       *(sp + 12) = Unit (in-battle) data pointer
        #   Returns:
        #       v0 = New CT value
        #       v1 = Current ability Flags 3 value (= *(a0 + 5), byte)
        @load_skillset_ability_data_ct_hook:
                lw      t2, 12(sp)          #   Unit (in-battle) data pointer
       
                addiu   sp, sp, -16
                sw      ra, 4(sp)
                sw      s1, 8(sp)
       
                lbu     t0, 12(a0)         
                lbu     s1, 5(a0)           #   (Required for calling routine)
               
                lbu     a1, 0x38(t2)        #   Load unit's Speed
                jal     @find_ability_ct
                andi    a0, t0, 0x7f        #   Ability CT
               
                move    v1, s1
               
                lw      s1, 8(sp)
                lw      ra, 4(sp)
                addiu   sp, sp, 16
                jr      ra
                nop
       
        #   ROUTINE: Find ability CT
        #   Parameters:
        #       a0 = Ability CT
        #       a1 = Speed
        #   Returns:
        #       v0 = New CT value
        @find_ability_ct:
                lbu     t1, 0x8015d28f
                move    v0, a0              #   Default: Keep CT the same
       
                sltu    t0, a1, t1          #   If (Speed is less than (CT Factor)), return with no change
                bne     t0, zero, find_ability_ct_end
                nop

                # ((CT Multiplier) = (CT Factor) / Speed)
                # CT = ((CT * (CT Factor)) + (Speed - 1)) / Speed
               
                multu   a0, t1
                mflo    t0                  #   (CT * (CT Factor))
               
                addiu   t1, a1, -1          #   (Speed - 1)
                addu    t0, t0, t1          #   (CT * (CT Factor)) + (Speed - 1)
                divu    t0, a1
                mflo    v0                  #   ((CT * (CT Factor)) + (Speed - 1)) / Speed
           
            find_ability_ct_end:
                jr      ra
                nop
    </Location>
    <Location file="BATTLE_BIN" offset="17C84C" mode="ASM" offsetMode="RAM">
        jal     @attack_preparation_ability_ct_hook
    </Location>
    <Location file="BATTLE_BIN" offset="181838" mode="ASM" offsetMode="RAM">
        sw      s0, 12(sp)
    </Location>
    <Location file="BATTLE_BIN" offset="181A48" mode="ASM" offsetMode="RAM">
        jal     @load_skillset_ability_data_ct_hook
    </Location>
    <Variable name="CT Factor" file="BATTLE_BIN" offset="F628F" bytes="1" default="05" />
  </Patch>
  • Modding version: Other/Unknown

Verdeni

So I'm using Emmy's ASM to change Wall to MP Regen and the blank status to MP Poison. I'm hoping to get an ASM That makes the blank status use Poison's effect icon, and Wall use Oil's effect icon. The icons from the FRAME.BIN. :p.
And maybe even use their pops for when the status is applied?

Is that possible at all?
  • Modding version: PSX
  • Discord username: V3rdeni

Lloyd2k4

I don't expect any of these to be done, nor do I know if they're possible, but I figured if someone wanted to take a crack at these, they may be useful for people making hacks:

Oil becomes Trouble - Afflicted target takes x% more damage from any damage source on the next attack.  Consumed when attacked like Oil, but doesn't require a Fire-elemental attack.

Blood Suck becomes Fear - Afflicted target deals x% less damage with all attacks/magic.  No more loss of control.  Would need a settable CT.

Dark/Evil Looking becomes Bloom - Target gets a countdown timer similar to Death Sentence, but when it reaches 0, the target is healed by x% of their max HP.  Needs CT mechanic equivalent to Death Sentence (# of CT = # of turns to activate effect).

Transparent becomes Focus - Damaging attacks become 100% accuracy.  No more invisibility/AI ignore.  Needs a settable CT and not removed upon attacking.

Berserk becomes Valor - Afflicted does x% more damage with damaging attacks/magic.  No more loss of control.  Needs a settable CT.

Chicken becomes Panic - Afflicted has an x% chance of their 'Act' and/or 'Move' command failing upon execution.  Could probably keep the "Less than 10(?) Brave automatically gains this status" code as it makes sense.  I don't remember the specifics of the Chicken status, but if it causes loss of control, then no more loss of control.

Innocent reduces Faith by x% instead of hard coded to 0.  Would require some patcher work on Worker 7/8 to return them to their normal status of magic immune if desired.


Basic Formula requests (Forgive me if they've already been done... there's a lot of formula requests and work done all over this forum)

Formula 13 becomes AbsorbMP MA * (WP+Y) ME Status

Formula 18 becomes DmgMP MA * (WP+Y) ME Status

Change Formula OE to Dmg(Y%) Hit F(MA+X%) 100% Status Hide Status to Dmg(Y%) Hit(X%) 100% Status Hide Status (Remove Faith and MA from Hit%)

Change Formula 12 and 15 (Quick and CT00, respectively) to no longer use Faith in the Hit% calculation.
  • Modding version: PSX