Users browsing this thread: 1 Guest(s)
Modifying the "Runic Forever" hack

#1
Posts: 6
Threads: 2
Thanks Received: 0
Thanks Given: 7
Joined: Aug 2018
Reputation: 0
Status
None
Hey everyone, first time poster here, lurker for a few weeks. Apologies for wall of text, conciseness isn't my strength. 

I am using the brilliant patch for FF6 called "Runic Forever" by HatZen08 found here: https://www.romhacking.net/hacks/1001/ I love what this does for Runic and Retort, but I wanted to know if it would be possible to make two changes:

1. When Celes uses Magic, even if Runic is "on," I'd like to turn (her only if possible, though it's also fine to turn off Gogo's or an enemy's since I do not intend to have enemies using Runic) Runic off again so that her spell goes through. This will allow her to cast spells without absorbing them herself, at the cost of removing Runic protection until she puts it up again. I saw that somebody in another thread wrote a hack that turns Runic off for party members, but I think that would cause a lot of balance problems in my game. I'm not concerned about Gogo, though if there is code that makes it work for him too that would be neat (though in the case of Gogo casting Magic while Celes has Runic up, I think it would still make sense for Celes to Runic Gogo's spell, and vice versa if Gogo is the one with Runic up).

2. I would prefer for Retort to be an incredible counterattack move that the player would like to put on Cyan right away against any physical attacker (at least in the early-mid game), but not let it be  activateable by doing SwdTech twice. In the patch, the player can use Retort once, then, as long as Retort isn't triggered by an enemy attack, the player can input Retort as Cyan's next command, triggering the move. This creates a balance problem since Retort is set in my game to be slightly over twice as powerful as Dispatch, making the optimal damage dealing path using up 2 turns to tediously input Retort twice. I would prefer to remove this extra functionality, and leave it purely as a counterattack. Using Retort will only ever turn the Retort flag "on," even if it's already on.

I apologize if this is the wrong place for a thread like this. I don't expect anyone to just up and code this for me, but I did wonder if anyone had already had the same or similar thoughts and worked out on a solution on their own. Additionally, if a more knowledgeable person here knows that it just isn't possible to do these changes, it would be a huge help to know that before I try to implement fixes with my own terrible programming skills. 

If not, for the first problem, I was thinking that I would start by modifying the "Magic" function code to remove any Runic flag if Celes is the character casting Magic. I'm ok with Gogo having an inferior version of Runic in this scenario, since he is so versatile.

For the second problem, I'm still trying to figure out how to go about it. I honestly see nothing in the Runic Forever patch that is making Retort have that extra functionality. Regardless, since the first problem seems more approachable, I'm not worried about it until I figure out the first one.

If anyone needs clarification on what I mean or if it would be preferred I post the code from the Runic Forever patch here in a code block, let me know, I also lurk in the Discord as @Darist#2876 (madsiur probably remembers my silly questions). 

As an aside, you guys are amazing and I wish I had discovered this site years ago. FF6 is my favorite game of all time and I'm having a blast tweaking it to my heart's content, already incorporating a lot of the patches/hacks/fixes posted on here and other sites (don't worry, if I ever put my own patch up as a "complete" hack, every single person who worked on any code I'm using or contributed in any way with advice/help will have their user names listed before mine as the major contributors!). Special shoutouts to madsiur, seibaby (love that Skelly avatar, I've actually spent a not-insignificant amount of time trying to hexedit his spells/stats in Chrono Cross to make him a better character as a reward for finding all his bones), and Gray Shadows for having really insightful code snippets/discussions relevant to my rebalancing hack.
  Find
Quote  

#2
Posts: 257
Threads: 31
Thanks Received: 77
Thanks Given: 61
Joined: Feb 2017
Reputation: 19
Status
None
Don't have time to look at it now, but I like the direction you're going with this. I've been meaning to look into the "Runic Forever" patch myself. Currently, I've only used the small line of code from the patch that disables clearing the Runic and Retort flags, as that's all I needed to get through to the point where I am in my hack. The final version of my hack will include the whole thing.

I will not have time for a few days, but I'll look into the code to see if it would be as simple as adding a jump.


Projects:
Divergent Paths (Completed) - a redo of the 3 scenarios in the original game that gives equal time to each group. Meant to be a basis for future mods.
FFVI: Definitive Edition (In Progress) - a hack built off of Divergent Paths that changes the events in Thamasa to bring closure to Banon's story and allow Leo to permanently join your party.
  Find
Quote  
[-] The following 1 user says Thank You to PowerPanda for this post:
  • dtgenji (09-22-2018)

#3
Posts: 3,555
Threads: 261
Thanks Received: 634
Thanks Given: 251
Joined: Oct 2011
Reputation: 58
Status
Faith
Your first idea is definitely possible, the runic function is at $C2352B. It's just a matter to check first if the caster (not sure what RAM to check here) equals to #$06 (Celes ID) then if so exit function (branch to $C235AC), otherwise continue the runic code.
  Find
Quote  
[-] The following 1 user says Thank You to madsiur for this post:
  • dtgenji (09-22-2018)

#4
Posts: 141
Threads: 19
Thanks Received: 96
Thanks Given: 4
Joined: Dec 2013
Reputation: 9
Status
Auto-life
Link: Runic Forever 2.0

I reviewed the code of the 'runic forever' patch. It was one of my first hacks. At the time of the patch, i was inexperienced and could not implement these features. I didn't even know how to use a assembler compiler like asar and, in the first versions, I wrote the code manually byte by byte in a hex editor. I feel so nostalgic.

I could implement these features now. I suppose experience pays off in the long run. Give it a test.

For runic, the runic user will not runic his own magic. Celes can runic and cast magic afterwards. The runic effect will only be triggered by another magic user. Celes runic effect won't be dispelled if she uses magic. Also, if two or more runic effects are active, they will interfere with each other. As example, if Celes and Gogo use the runic command and Celes use magic, Celes will not absorb his own magic but Gogo will absorb it and vice-versa.

For swordtech, successive retort activation won't trigger the retort attack. It must be triggered by a physical attack.

I used free space from $C3/FCC0 to $C3/FCEF. If it conflicts with another patches, you can change the free spaces addresses in the source code and recompile it with asar.
  Find
Quote  
[-] The following 4 users say Thank You to HatZen08 for this post:
  • dtgenji (09-22-2018), Gi Nattak (09-22-2018), madsiur (09-22-2018), Warrax (09-22-2018)

#5
Posts: 6
Threads: 2
Thanks Received: 0
Thanks Given: 7
Joined: Aug 2018
Reputation: 0
Status
None
Wow, thank you HatZen! I applied the patch without reverting your original hack and it works perfectly so far, which is awesome.

I'd been trying to copy what was going on with the Fight command where it checks for which DA to use based on character, but every time I modified the code (using a hexeditor, which you were nostalgic for.. haha) the game would crash as soon as a spell was cast.

Thanks again to you and to those who replied earlier in the thread!
  Find
Quote  

#6
Posts: 155
Threads: 3
Thanks Received: 11
Thanks Given: 88
Joined: May 2013
Reputation: 0
Status
None
Wow that's awesome! One of the greatest patch got even better, thanks a lot HatZen08!



  Find
Quote  

#7
Posts: 6
Threads: 2
Thanks Received: 0
Thanks Given: 7
Joined: Aug 2018
Reputation: 0
Status
None
Code:
;-------------------------------------------------------------------------------
; setup new retort identifier
;-------------------------------------------------------------------------------
org     $C24CCE

   LDA #$5D

warnpc  $C24CD0


Hey HatZen, it seems as though your patch changes the identifier of the Retort (56 hex/86 dec) attack to the Pummel (5D hex/93 dec) attack. I'm curious why this change was made or if it was intended to be another identifier?
  Find
Quote  

#8
Posts: 141
Threads: 19
Thanks Received: 96
Thanks Given: 4
Joined: Dec 2013
Reputation: 9
Status
Auto-life
Quote:Hey HatZen, it seems as though your patch changes the identifier of the Retort (56 hex/86 dec) attack to the Pummel (5D hex/93 dec) attack. I'm curious why this change was made or if it was intended to be another identifier?

Internally, $B5 is used as the command identifier and $B6 is used as the command selection. For the retort sword tech, the sword tech command ($B5) is $07 and the sword tech selection ($B6) is $01 (retort).
$00 is dispatch, $01 is retort, $02 is slash, $03 is quadra slam, etc.

At the mentioned code at C2/4CC3, when the retort flag for counter attack is active, the code will queue the sword tech/retort command activation. Later, $3A7A will became $B5 and $3A7B will become $B6. However, in this specific case, $B6 will be the mentioned value minus the first sword tech spell identifier. In short, $08.

The issue is that the sword tech/retort command was designed to toggle the retort flag for the counter attack. In the original code, It makes no distinction if the retort move was queued by the fighter menu as a command or by a physical attack as a counter attack.

Instead of wasting an extra variable to determinate if the retort was triggered by the menu or by a counter attack, i used $B6 to determinate it. If $B6 is $01, it is the retort spell triggered by the menu. If $B6 is $08, it is the retort spell triggered by a counter attack. Instead of only one special case of retort for both menu and counter attacks, I split it in two special cases: one specifically for the menu and other specifically for counter attacks.
  Find
Quote  
[-] The following 1 user says Thank You to HatZen08 for this post:
  • dtgenji (09-23-2018)

#9
Posts: 155
Threads: 3
Thanks Received: 11
Thanks Given: 88
Joined: May 2013
Reputation: 0
Status
None
I'm not sure if it has something to do with your last post but the 2.0 patch seems to overwrite Retort's data (mainly Power and success rate %) with its own data which result in a pretty weak Retort in my hack. Runic Forever 1.1 doesn't do that so it's definitely a new problem.



  Find
Quote  

#10
Posts: 141
Threads: 19
Thanks Received: 96
Thanks Given: 4
Joined: Dec 2013
Reputation: 9
Status
Auto-life
Download: Runic Forever 2.1

I did an update and now the retort command, as a counter attack, reloads the attack data of the 'retort' spell. It should fix the issue.

Unfortunately, the damage of the retort counter attack is higher when compared with the original retort damage. I will be honest and confess that i don't know the reason for this. I suspect a hidden code somewhere in the rom related to retort can raise ou change the damage of the retort spell. However, I can't find or confirm it.

Fortunately, you can alter the power of the retort spell. If it is somehow too high for your liking, you can adjust the power of the retort spell with ff3usme for lower values.
  Find
Quote  
[-] The following 2 users say Thank You to HatZen08 for this post:
  • Gi Nattak (01-07-2019), Warrax (01-06-2019)



Forum Jump:

Users browsing this thread: 1 Guest(s)


Theme by Madsiur2017Custom Graphics by JamesWhite