Author Topic: Developing FF4kster: a comprehensive editor for FF4  (Read 235897 times)

Pinkpuff

  • Flan Princess
  • *
  • Posts: 923
  • Find a Megalixir in Unprecedented Crisis!
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #585 on: December 16, 2013, 05:25:36 AM »
I tried to do something a little nicer, but I kept the old "Note" format above and this version which includes the descriptions underneath the main line. Please let me know which method you prefer.

Actually neither TBH ^_^; I prefer the note being in the preamble. Right now it's just listing the variables, then the list directly below lists them again. The point of the preamble was to establish the meaning of all the variables (what they do, how they interact with each other, etc. to create the effect of the command), then you can just have the list below that specify the addresses. If those variables take values that aren't obvious, they should be listed indented under that variable's description. So what I would prefer would be something more like:

Dark Wave

Deal an attack to all enemies. Then, if Stat Loss Enabled, subtract 1/8 of Read Stat from Write Stat.
  • Stat Loss Enabled: 1EBFF
    • ON: ??????
    • OFF: EAEAEA
  • Read Stat: 1EBF2
  • Write Stat: 1EBFB, 1EC00

Also you may notice I converted the addresses to those of a headered rom; this to help prevent the likely scenario where I forget to convert these (or forget that I have to convert them) such as what happened recently.

Do you see how easy that instruction to change spell links is? – 100% Amazing – I mean it when I say had I not come upon your editor I’d probably not even be into this at all other than dreaming and maybe some hex futzing. I remember first looking into this long ago and being frustrated that I couldn’t mix and match battle commands - Not a problem anymore!  :happy:

 :childish: Thanks! Glad to hear it's useful.

That’s the plan in a nutshell – but in this scheme I’d have to then make sure either the Job pointer is also changed or I also change what “Bard” corresponds to in terms of available commands – otherwise RacerX will have “Sing” & “Hide”

Actually commands go by actor, not job. You can have two different Edwards with two different sets of commands; this is how, for example, Tellah loses Recall.

Just go into the actor editor and mess with the commands and you should be able to get what you're trying to achieve.
Let's dance!

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,682
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #586 on: December 16, 2013, 02:35:10 PM »
Ahem... I somehow completely forgot about that. Hehe, my apologies. Then I will rewrite these using what you have listed here.

Dark Wave

Deal an attack to all enemies. Then, if Stat Loss Enabled, subtract 1/8 of Read Stat from Write Stat.
  • Stat Loss Enabled: 1EBFF
    • ON:9D0720
    • OFF: EAEAEA
  • Read Stat: 1EBF2,1EBFB
  • Write Stat:  1EC00

Kick

Deal an attack to all enemies using Read Stat and Read Stat and Variable including Read Stat which resists Dark Wave and the Read Stat which nullifies Kick and Dark Wave.
  • Read Stat:1E91C,1E931,1E99F,1E997
  • The Read Stats are as Follows in this order...
    • Physical Attack Multiplier
    • Physical Attack Base
    • Creature Type - Resist Dark Wave
    • Creature Type - Nullify Kick/Dark Wave
  • Variable:1E924
    Damage /2 IF Kick
    • ON:46DF
    • OFF: EAEA


    Is that better, or is there still room for improvement?

Pinkpuff

  • Flan Princess
  • *
  • Posts: 923
  • Find a Megalixir in Unprecedented Crisis!
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #587 on: December 16, 2013, 06:01:16 PM »
Is that better, or is there still room for improvement?

Well, yes to both ^_^;

There isn't anything special about the word "read stat" or "write stat"; I was just using those as variable names. When naming variables, it is important that each variable have a unique name. So, if you use Read Stat for the name of a variable then you shouldn't call any other variables Read Stat, even if they're also being read (that's beside the point). The name can be anything you like (Foo, Bar, etc) but generally it's better to have names that relate to the function/purpose of the variable. In the case of Dark Wave, you have one stat that's being used as part of a division calculation but not actually modified so that's why I chose the name "Read Stat" for it. The other value is being modified so I called it "Write Stat" for that reason. They could just as easily have been called "Stat 1" and "Stat 2", though those wouldn't have been very helpful names.

The list of two addresses after Write Stat in the Dark Wave example meant that when that value changes, it changes two different addresses in memory (to the same value). In other words, if Write Stat (Current HP by default) were to get the value 2F (Steal Evade), then 2F would be written to both 1EBFB and 1EC00. For the kick example, it looks like several addresses are listed together that all take different values. So I would have imagined something more like this:

Kick

Deal a group physical attack with damage equal to Multiplier Stat * Base Stat. If Half Damage Enabled, divide the damage by 2. Resist Race monsters resist it and Immune Race monsters are immune to it.
  • Multiplier Stat: 1E91C
  • Base Stat: 1E931
  • Half Damage Enabled: 1E924
    • ON: 46DF
    • OFF: EAEA
  • Resist Race: 1E99F
  • Immune Race: 1E997

Basically, you should be able to read it as a regular sentence when you replace the variable names with their values. If they all have their default values, the sentence would read in such a way that it describes the default behaviour of the command.

Am I making any sense?
Let's dance!

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,682
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #588 on: December 16, 2013, 06:30:46 PM »
Ah yes, I think I have it now. That makes a lot more sense than what I posted, heh.

LordGarmonde

  • Baigan
  • *
  • Posts: 271
  • Gender: Male
  • "Power only breeds war..."
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #589 on: December 17, 2013, 08:50:03 PM »
Hey everyone,

Actually Chillyfeez it's double-theoretical because I'm pretty sure I'd never actually use this anyway. It is my opinion that this game, while amazing, has too many playable characters. I always feel like Edward and Cid were just NPCs that you got to control for a while - I never felt like they were part of the core. It's also possible that I'm writing this as a 28-year old cynic who has played this game so often that I wore out the battery in my FF2 cart. I might just feel that way now because of how quickly I can move the game along. Anyway it's still an interesting puzzle to work on and since puzzles hook me every time I'm sure I'll be back around this way again. Should I add another character, I imagine it will be at someone's expense - but I think that I'd endeavor to try and keep everyone + 1.

But in fairness I do think I will write a patch to free up one shadow slot - it will be nice to have a bit of room to play with if I want to save any data. (more inventory space, for example - goes with equipment stripping) It's nice that isn't too complicated, just a few code changes and a bit of my own. My plan with adding in new characters was way more involved - basically (in my mind) patching the game while you are playing so the whole patch would need to already be in the ROM and then called when needed. It'd certainly be a challenge.

Also, Grimoire - what you were saying about Cecil: when it is looking for the Dark Knight vs when it needs the Paladin  :wtf:

I looked into that before too - total fail. My answer to that is "Perhaps another day, but not today." Hopefully it won't come up (for me at least) anyway - I don't plan on ever having Cecil not be my main man; one of the things I love most about this game is the solid story, well established. Having freedom in games is nice, but it's harder to write around that.

Though if you want to test something event-wise Immediately at a new game, you would change...

In Unheadered Rom this is at...

281 - A9 10 - Starting Event.

- Very nice! That does speed things up in a much more consistent way - usually I'd load a save state outside a town (or whatever) and then walk in knowing the game won't load the map until I enter - so if I load a given from a savestate that actually came from a different version of the ROM then usually the game is none-the-wiser...usually - so yeah changing the starting event call: Good deal  :childish:

One thing though - 281 is the Headered Address - I found it at 81 in my Unheadered 1.1 ROM  :tongue:

That's it for now, I guess. Pinkpuff pointed out the Job/Actor discrepancy - my mistake, failed use of nomenclature on my part - sorry if anyone got confused by that.
"Now I know; and knowing makes it even more confusing..."

LordGarmonde

  • Baigan
  • *
  • Posts: 271
  • Gender: Male
  • "Power only breeds war..."
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #590 on: December 17, 2013, 08:58:09 PM »
Oh Grimoire I did think of something else - regarding your FFI spell routines, I could see Temper working - in my head it's got the advantage of Berserk without losing control - probably not granting the speed benefit would balance it out and make the two spells less overlapping.
"Now I know; and knowing makes it even more confusing..."

LordGarmonde

  • Baigan
  • *
  • Posts: 271
  • Gender: Male
  • "Power only breeds war..."
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #591 on: December 18, 2013, 04:09:54 PM »
I just came across this old post:

When you fight Golbez, you "start" losing control of your own characters because of Hold Gas. I hadn't really thought it through before, but if you want the Hold Gas to not be effective.. you want to cast Mute/Silence on yourself. Since Mute status has a priority over Hold, it has no power over you. How's this useful? Well, it allows Cecil get ready his ATB bar while he does his scripted speech stuff... allowing you to revive other party members or get an early shot at Golbez.

I just went though that battle (with LV 99 characters so no speed trouble) - and yep absolutely right. I knew about that sort of priority selection/exclusion - always fun to wear a confusion-preventative head-band to negate Bad-Breath. My question (apologies if this was already answered) is I feel like I read that resistance bits are factored in when damage (etc.) routines are called; but is that universal, or is there a way to change that? Since I started thinking of the game from a programming stand point I've been thinking of things like: "Should I mix and match Fire/Ice Shields/Armor?" Looking at Deathlike's killer FAQ I found:

FF4A (GBA)
Immunity > Weakness > Absorb/Resistance
FF2/4/4ET (SNES)
Weakness > Immunity > Absorb/Resistance

But I was just wondering how much this has been investigated. It's just something that popped into mind.
"Now I know; and knowing makes it even more confusing..."

vivify93

  • Liquid Flame
  • *
  • Posts: 303
  • Gender: Male
  • White Wizard
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #592 on: December 19, 2013, 09:38:18 AM »
I discovered a problem. The first magic called upon for Sing gets its byte, A9, changed to 2F somehow if you open a ROM and save it in FF4kster.
Hacking is hard. :sad:

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,682
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #593 on: December 19, 2013, 12:55:51 PM »
Eh heh, yes I was mistaken on that I should have said headered Rom. I'm not sure how I keep on confusing those two.

Advantage of Berserk without losing control? Hmm...

That's a difficult idea to set up. Here is the relevant data from the normal battle code...

Code: [Select]
$03/C6C4 8E 02 39 STX $3902  [$7E:3902] A:0028 X:0028 Y:0000 P:envMxdizC - Place the Attack Base 7E3902.
$03/C6C7 AD 84 26 LDA $2684  [$7E:2684] A:0028 X:0028 Y:0000 P:envMxdizC - Load Status Anomalies (Byte 2) from Caster's Data Copy into A.
$03/C6CA 29 04 AND #$04 A:0000 X:0028 Y:0000 P:envMxdiZC - Is the Status Berserk?
$03/C6CC F0 19 BEQ $19    [$C6E7] A:0000 X:0028 Y:0000 P:envMxdiZC - If not Jump to 03C6E7.
---------------------------------------------------------------------------------------------------------------------
03/C6CE 86 A9 STX $A9    [$00:00A9] A:0004 X:0028 Y:0000 P:envMxdizC - Store the X 0028 for later.
$03/C6D0 46 AA LSR $AA    [$00:00AA] A:0004 X:0028 Y:0000 P:envMxdizC - divide the value in AA by 2.
$03/C6D2 66 A9 ROR $A9    [$00:00A9] A:0004 X:0028 Y:0000 P:envMxdiZc - divide the value in A9 by 2
$03/C6D4 18 CLC A:0004 X:0028 Y:0000 P:envMxdizc - Clear Z Flag
$03/C6D5 AD 02 39 LDA $3902  [$7E:3902] A:0004 X:0028 Y:0000 P:envMxdizc - Load A from 7E3902
$03/C6D8 65 A9 ADC $A9    [$00:00A9] A:0028 X:0028 Y:0000 P:envMxdizc - Add the value from 00A9
$03/C6DA 8D 02 39 STA $3902  [$7E:3902] A:003C X:0028 Y:0000 P:envMxdizc - Store the new value in 7E3902
$03/C6DD AD 03 39 LDA $3903  [$7E:3903] A:003C X:0028 Y:0000 P:envMxdizc - Load A from 7E3903
$03/C6E0 65 AA ADC $AA    [$00:00AA] A:0000 X:0028 Y:0000 P:envMxdiZc - Add the value from 00AA
$03/C6E2 8D 03 39 STA $3903  [$7E:3903] A:0000 X:0028 Y:0000 P:envMxdiZc - Store the new value in 7E3903 (Berserk therefore gains 1 1/2 xdamage as DeathLike theorized)
$03/C6E5 80 0D BRA $0D    [$C6F4] A:0000 X:0028 Y:0000 P:envMxdiZc - Branch Always to 03C6F4...

Now the game looks at a Status to make this occur. That alone is easy enough to change, but that would make the Berserk status not do anything but lose control (which I guess could be interesting on its own). If this is placed into a custom formula there might be a way to make it work...

It seems *pretty sure* that Steal Prevention doesn't do anything for characters, so you could tie a value that this formula writes to "Steal Prevention" and have the game look at that for its 1 1/2x Power rather than the Berserk status. That would be the easy way to deal with it.

If I were to modify Temper to make it more inline with FFIV, I think what I would do is take Target's Wisdom*2 + X = new Attack Power. That way it couldn't be continually increased and it would remain useful the entire game through. I do agree though that the best way to balance all stat+ skills in this game are to use % increments. As the way the game is currently set up it seems like it can be too easily askewed out of balance.

Now resistance/drain/immune/ have been covered at some length in my ASM logs in the normal sense it looks at status immune bytes, see what is inflicted, and decides from there. I cannot explain why Silence protects from Golbez's Hold Gas... let me check that formula... No, nothing that I can see why it works that way in the formula.

The Elemental dealings are covered pretty well in their respective areas. Even formulas that you wouldn't expect to have Elemental Ability have things in place.

Code: [Select]
$03/C658 AD 99 26 LDA $2699  [$7E:2699] A:0002 X:0300 Y:0000 P:envMxdizC - Load A from Caster's Attack Elemental Copy Data.
$03/C65B 8D 00 36 STA $3600  [$7E:3600] A:0008 X:0300 Y:0000 P:envMxdizC - Store A in 7E3600.
$03/C65E 2D 21 27 AND $2721  [$7E:2721] A:0008 X:0300 Y:0000 P:envMxdizC - Check the value of A against the Target's Very Weak Elemental.
$03/C661 F0 07 BEQ $07    [$C66A] A:0000 X:0300 Y:0000 P:envMxdiZC - Branch if there is no match to 03C66A.
--------------------------------------------------------------------------------------------------------------------------------
$03/C663 A9 08 LDA #$08 A:0008 X:0400 Y:0000 P:envMxdizC - Load a 08 into A.
$03/C665 8D FE 38 STA $38FE  [$7E:38FE] A:0008 X:0400 Y:0000 P:envMxdizC - Store A in 7E38FE (Presumably a data altering field - x4 Power)
$03/C668 80 2B BRA $2B    [$C695] A:0008 X:0400 Y:0000 P:envMxdizC - Always Branch to 7EC695.
--------------------------------------------------------------------------------------------------------------------------------
$03/C66A AD 99 26 LDA $2699  [$7E:2699] A:0000 X:0300 Y:0000 P:envMxdiZC - Load Caster's Attack Elemental from Data Copy into A.
$03/C66D 2D 20 27 AND $2720  [$7E:2720] A:0008 X:0400 Y:0000 P:envMxdizC - Check the value of A against the Target's Elemental Weakness.
$03/C670 F0 07 BEQ $07    [$C679] A:0008 X:0400 Y:0000 P:envMxdizC - Branch if there is no match to 03C66A.
-------------------------------------------------------------------------------------------------------------------------------
$03/C672 A9 04 LDA #$04 A:0008 X:0400 Y:0000 P:envMxdizC - Load 04 into A.
$03/C674 8D FE 38 STA $38FE  [$7E:38FE] A:0004 X:0400 Y:0000 P:envMxdizC Store it at 38FE (x2 Power)
$03/C677 80 1C BRA $1C    [$C695] A:0004 X:0400 Y:0000 P:envMxdizC - Always Branch to 03C695.
---------------------------------------------------------------------------------------------------------------------------------
$03/C679 AD 99 26 LDA $2699  [$7E:2699] A:0000 X:0000 Y:0000 P:envMxdiZC - Load Caster's Elemental Attack from Data Copy into A.
$03/C67C 2D 26 27 AND $2726  [$7E:2726] A:0000 X:0000 Y:0000 P:envMxdiZC - Check it against Target's Elemental Immunity.
$03/C67F F0 07 BEQ $07    [$C688] A:0000 X:0000 Y:0000 P:envMxdiZC - Branch if there is no match to 03C688.
----------------------------------------------------------------------------------------------------------------------------------
$03/C681 A9 00 LDA #$00 A:0008 X:0400 Y:0000 P:envMxdizC - Load 00 into A.
$03/C683 8D FE 38 STA $38FE  [$7E:38FE] A:0000 X:0400 Y:0000 P:envMxdiZC - Store A in 38FE (x0 Power=1 Damage no matter what)
$03/C686 80 0D BRA $0D    [$C695] A:0000 X:0400 Y:0000 P:envMxdiZC - Branch to 03C695.
------------------------------------------------------------------------------------------------------------------------------------
$03/C688 AD 99 26 LDA $2699  [$7E:2699] A:0000 X:0400 Y:0000 P:envMxdiZC - Load A from Caster's Elemental Attack Data in Data Copy.
$03/C68B 2D 25 27 AND $2725  [$7E:2725] A:0008 X:0400 Y:0000 P:envMxdizC - Check it against the Target's Resistance Byte in Data Copy.
$03/C68E F0 05 BEQ $05    [$C695] A:0008 X:0400 Y:0000 P:envMxdizC - Branch to 03C695 if there is no match.
-------------------------------------------------------------------------------------------------------------------------------------
$03/C690 A9 01 LDA #$01 A:0008 X:0400 Y:0000 P:envMxdizC - Load 01 into A.
$03/C692 8D FE 38 STA $38FE  [$7E:38FE] A:0001 X:0400 Y:0000 P:envMxdizC Store it in a damage altering field (x1 (1/2) Power

So it goes as DeathLike2 said...

Very Weak/Weakness/Immune/Resistance/Creature Type Weakness/Resisting Creature Type/Absorb (handled at the very end of those dealings)


chillyfeez

  • FF4 Hacker
  • *
  • Posts: 1,234
  • Gender: Male
  • Go ahead, ask me about Angel Feathers!
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #594 on: December 19, 2013, 01:59:56 PM »
Actually, you could also mess with the ASM to take away the control loss that comes with berserk status. That's part of the same coding that initiates auto-hide, I believe. I've never tried it , but I am pretty sure it can be done.
Fun little tidbit - if you add Hide status, but keep the character on-screen, you get controllable invincible characters! That's part of one of my upcoming limit skills.

LordGarmonde

  • Baigan
  • *
  • Posts: 271
  • Gender: Male
  • "Power only breeds war..."
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #595 on: December 19, 2013, 05:20:06 PM »
It seems *pretty sure* that Steal Prevention doesn't do anything for characters, so you could tie a value that this formula writes to "Steal Prevention" and have the game look at that for its 1 1/2x Power rather than the Berserk status. That would be the easy way to deal with it.

That's the way I was thinking about it too; set up some dummy flag to be able to check against for easier code altering. Another spell I was thinking about was Hastaga - I changed Haste to be forced to target everyone (and technically the spell was originally Sight) just to see if the game had any trouble. Everything was fine - as suspected: some enemies can split Haste - but they have a special algorithm to do so right: "Perform Special Monster Technique" - Anyway, what I was kicking around there was to make it cost 99, and take a good time to cast rather than go one by one - because I find often that's what Rosa's spending her time doing when not healing - which is not unreasonable for a White Mage. I was wondering if that made sense to anyone else or is it just me being lazy?  :tongue:

That's pretty nifty about Hiding + Not Hiding = Invincible - Do they have all the same targeting rules as if they were anyone else; what happens if they are hit: "Miss" I'd think as if trying to attack 1st form Zeromus. But yeah, very intersting; I'm excited to see what you are cooking up. I just came due for a new mod to play as it happens since I just finished Project II.  :yabin:

" Rosa: Lunarians
  Fusoya: Yes...
  Edge: This is insane!"

I feel like I'd have the exact same reaction if I was in that situation.  :tongue: Nice mod vivify93! It was very enjoyable. I'm also in agreement about the use of Theodor - a "nice touch" as HCBailly might say.  :wink:

Also something over on you Project II thread gave me an idea related to what I had been sketching out about repurposing characters to add new people to the game:

Any reason Tellah and FuSoYa can't both be Sages?

Any reason why they can't share a Level-Up table? I wonder if it would make any sense to cap Tellah @ 45 (I could imagine writing the ASM hook to deal with that) and then from 50 onwards for FuSoYa - just a thought  :hmm:
"Now I know; and knowing makes it even more confusing..."

Pinkpuff

  • Flan Princess
  • *
  • Posts: 923
  • Find a Megalixir in Unprecedented Crisis!
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #596 on: December 19, 2013, 05:32:47 PM »
Any chance we can keep the discussion here about FF4kster? Not that it isn't interesting stuff, just, if it's not related, maybe it could use its own thread...

I discovered a problem. The first magic called upon for Sing gets its byte, A9, changed to 2F somehow if you open a ROM and save it in FF4kster.

Interesting, I'll look into this soon.
Let's dance!

LordGarmonde

  • Baigan
  • *
  • Posts: 271
  • Gender: Male
  • "Power only breeds war..."
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #597 on: December 19, 2013, 07:45:30 PM »
I would say good chance Pinkpuff; it's already done  :tongue:

Nothing critical just something I noticed earlier today: in editing messages there are the six sub-headings Bank 1-3, Battle, Alerts, & Statuses (as you know) - but when they display they show different list lengths:

Bank 1: Shows 10 entries on screen

Bank 2: Shows 8 (But they are drawing from location so that might be it)

Bank 3: Shows 55 which bottoms out my list with the edge of the window
   Then Battle & Alerts are the same as Bank 3: All the way to the bottom

Like I said, nothing vital just a bit of inconsistency that I just noticed after my last post
"Now I know; and knowing makes it even more confusing..."

Deathlike2

  • Moderator
  • *
  • Posts: 3,538
  • I'm looking at you, bitch!
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #598 on: December 20, 2013, 01:52:59 AM »
I just came across this old post:

When you fight Golbez, you "start" losing control of your own characters because of Hold Gas. I hadn't really thought it through before, but if you want the Hold Gas to not be effective.. you want to cast Mute/Silence on yourself. Since Mute status has a priority over Hold, it has no power over you. How's this useful? Well, it allows Cecil get ready his ATB bar while he does his scripted speech stuff... allowing you to revive other party members or get an early shot at Golbez.

I personally have forgotten a lot of stuff that I've said.  :tongue:

Quote
I just went though that battle (with LV 99 characters so no speed trouble) - and yep absolutely right. I knew about that sort of priority selection/exclusion - always fun to wear a confusion-preventative head-band to negate Bad-Breath. My question (apologies if this was already answered) is I feel like I read that resistance bits are factored in when damage (etc.) routines are called; but is that universal, or is there a way to change that? Since I started thinking of the game from a programming stand point I've been thinking of things like: "Should I mix and match Fire/Ice Shields/Armor?" Looking at Deathlike's killer FAQ I found:

FF4A (GBA)
Immunity > Weakness > Absorb/Resistance
FF2/4/4ET (SNES)
Weakness > Immunity > Absorb/Resistance

But I was just wondering how much this has been investigated. It's just something that popped into mind.

I think in LD's code dump of the attack algos (both physical+magical) has explained it. It's in one of the bigger code dump threads.

Although, my GBA analysis could be wrong in the sense that they "fixed" physical elemental weaknesses in the armor this making immunity kinda irrelevant.
Working on the next Yet To Be Named FF4 "Hardtype" Hack Download Latest: v1.48

Video Demos: #1 #2 #3

Pinkpuff

  • Flan Princess
  • *
  • Posts: 923
  • Find a Megalixir in Unprecedented Crisis!
    • View Profile
Re: Developing a comprehensive editor for FF4
« Reply #599 on: December 20, 2013, 03:38:04 AM »
Nothing critical just something I noticed earlier today: in editing messages there are the six sub-headings Bank 1-3, Battle, Alerts, & Statuses (as you know) - but when they display they show different list lengths:

Bank 1: Shows 10 entries on screen

Bank 2: Shows 8 (But they are drawing from location so that might be it)

Bank 3: Shows 55 which bottoms out my list with the edge of the window
   Then Battle & Alerts are the same as Bank 3: All the way to the bottom

Like I said, nothing vital just a bit of inconsistency that I just noticed after my last post

Oh yeah I forgot about that. I just tried changing Bank 1's menu to go to the bottom of the screen and it seems to run just fine.

My general rule for menu lengths (at least for those side menus) is the full length of the list, or as many will fit on the screen, whichever is lesser. For Bank 2, it will only list as many as there are for the selected map since there are so few, but for Bank 3 it will show as many as will fit on the screen since there are so many. The list of maps in the Bank 2 editor would fill up the entire screen if it followed this rule so I made it sort of a top menu and limited its size to something reasonable for the given screen space.

What was going on with Bank 1 was that at one point in history the menus were being coded in an inefficient and wasteful way and I didn't notice it until I think the monster editor when someone pointed out the huge memory leak that was happening (which happened to be mostly due to something else but the menus were partly responsible as well). Anyway, due to the inefficiencies, the Bank 1 menu was being super slow when it filled the screen, but for some reason, limiting it to a few entries (10 was picked arbitrarily) seemed to alleviate the problem enough that it was usable. Anyway now it seems as though having it go all the way to the bottom no longer causes slowdown. I have yet to test it on Windows (I use Ubuntu as my main platform) but if there aren't any issues there either this will be fixed in the next upload.

 :edit:
I discovered a problem. The first magic called upon for Sing gets its byte, A9, changed to 2F somehow if you open a ROM and save it in FF4kster.

Interesting, I'll look into this soon.

This isn't happening for me. Anyone else?

Incidentally the only bytes read or written by FF4kster for Sing are the spell indexes, none of which are A9 by default.
« Last Edit: December 20, 2013, 03:45:39 AM by Pinkpuff »
Let's dance!