FF6 Hacking
Runic question - Printable Version

+- FF6 Hacking (https://www.ff6hacking.com/forums)
+-- Forum: Discussion Forums (https://www.ff6hacking.com/forums/forum-5.html)
+--- Forum: Magitek Research Facility (https://www.ff6hacking.com/forums/forum-9.html)
+--- Thread: Runic question (/thread-4049.html)



Runic question - Hashimo - 09-19-2020

So i was trying to find a way to make runic more user friendly i have the runic forever hack v 2.1 By Hatzen80

Then i found this https://www.ff6hacking.com/forums/thread-2323-page-3.html?highlight=runic+enemy post # 24
It would make runic only effect enemy spells.

So first off would those 2 things work together or conflict since they alter the same ability.

Second i have absolutley no idea how to do the second part coding wise is there a way to get an ips patch or an instruction?


RE: Runic question - madsiur - 09-19-2020

I don't have the answer to your first question. To use GrayShadow's code, you need to use an assembler like xkas 0.06. Then you copy his code into a text file you rename the extension to .asm and you assemble it using the windows command prompt. The only thing that needs to be changed is "org $C2xxxx" to free space in bank $C2, such as "org $C26469" for a vanilla ROM. Note that if you use xkas, you'll need to write "hirom" at the top of your file and "header" if your ROM has a header.


RE: Runic question - C-Dude - 09-19-2020

They likely conflict, because they probably hook into the same section of code in different ways. If using them both doesn't outright cause the game to crash on activating Runic, it may behave as if only one is applied, or may behave in a way entirely unexpected.

Interestingly enough, Hatzen's Runic Forever--at least the last version I saw--is set up to check if the target is the runicker and bypass the spell block if so. It might be possible to change that segment to check if the target is not a monster, and if so let the spells go past.

Code:
;-------------------------------------------------------------------------------
; check runic for fighter Y
;-------------------------------------------------------------------------------
check_runic:

        LDA $3AA0,Y
        LSR                 ;check for valid target
        BCC .runic_no       ;don't runic if invalid target
        
        PEA $80C0           ;check for sleep, death, petrify
        PEA $2210           ;check for freeze, hide, stop
        JSR $5864           ;routine to check for status
        BCC .runic_no       ;don't runic if any status found
        
        LDA $3E4C,Y
        BIT #$06            ;check for runic flags
        BEQ .runic_no       ;don't runic if spell can't be absorbed

        STX $EE             ;spell target
             TXA                 ;caster
             CMP #$08             ;check if battle slot is a party slot?
             BCC .runic_no       ;don't runic if target is a party member?

    .runic_yes
        SEC
        RTS
        
    .runic_no
        CLC
        RTS
The three further indented lines are what would need to be changed. I'm going off Runic Forever 2_1, and those lines seem to be what let the runicker get their spells past themselves. Changing the comparison to caster against a static #08 and branching if the number is less makes runic ignore your party as far as I can tell.

However, this will make runic one-sided, as it will ALWAYS favor your party. It effectively breaks the Air Force Bit... you'll need to change that boss battle to make the bit do something else (perhaps a lot of HP and then it casts Exploder after a while?).


RE: Runic question - Hashimo - 09-20-2020

Yeah I didn't Think of that probably better to leave it as the runic forever 2.1 has it otherwise it probably ruins quite a few boss fights


RE: Runic question - C-Dude - 09-20-2020

...Perhaps the check could be made more comprehensive.  It'd take more freespace, though.

Code:
;-------------------------------------------------------------------------------
; check runic for fighter Y
;-------------------------------------------------------------------------------
check_runic:

       LDA $3AA0,Y
       LSR                 ;check for valid target
       BCC .runic_no       ;don't runic if invalid target
       
       PEA $80C0           ;check for sleep, death, petrify            80E1        [Adds Blind and Moogle to the restrictions]
            C2/3544:    F4 E1 80
                            80E0        [Remove the blind restriction, since Cover doesn't have that]
       PEA $2210           ;check for freeze, hide, stop
            C2/3547:    
       JSR $5864           ;routine to check for status
       BCC .runic_no       ;don't runic if any status found
       
       LDA $3E4C,Y                                                        $3EF8,Y
            C2/354F:    B9 F8 3E
       BIT #$06            ;check for runic flags                        BIT #$10        [Former STOP bit]
            C2/3552:    89 10
       BEQ .runic_no       ;don't runic if spell can't be absorbed

       STX $EE             ;spell target

       TYA                 ;target
       CMP #$08             ;check if battle slot is a party slot?
       BCC .party_yes       ;handle party runicker
       BRA .party_no       ;handle monster runicker

   .party_yes
       TXA                 ;caster
       CMP #$08             ;check if battle slot is a party slot?
       BCC .runic_no       ;don't runic for party caster
        BRA .runic_yes       ;otherwise runic
       
   .party_no
       TXA                 ;caster
       CMP #$08             ;check if battle slot is a party slot?
       BCS .runic_no       ;don't runic for monster caster
                            ;don't need an otherwise branch here since .runic_yes is next
   .runic_yes
       SEC
       RTS
       
   .runic_no
       CLC
       RTS
I think this would check if the target is a monster or not, then runic so long as the caster is on the OPPOSITE team.  It would replace the section by the same name in Hatzen08's RunicForever2_1.  I'd test this like I did with the other post, but I'd have to put it in by hand (because xkas doesn't like me and Asar likes introducing errors) and I don't have the room near the RunicForever code in my rom.

EDIT: If you assemble this and your characters runic their own spells, that means .party_yes and .party_no are labelled wrong and need to be swapped.  If you assemble it and it crashes... then I have no idea!
EDIT: Hopefully you didn't grab this in the middle of the night. I forgot a BRA command.