julianxhokaxhiu / FFNx

Next generation modding platform for Final Fantasy VII and Final Fantasy VIII ( with native Steam 2013 release support! )
GNU General Public License v3.0
371 stars 49 forks source link

[ FF7 ] True X/O swap. #742

Open zaphod77 opened 1 month ago

zaphod77 commented 1 month ago

Summary

Would be nice to swap ok and cancel, EXCEPT in minigames. Currently minigames only have intended controls if ok, cancel, switch, and men are in their intended spots.

Basic example

Currently remapping the controls simply changes the position of the buttons, but not their function. I'm hoping it's possible to make a different sort of remapping that actually does change the functions. Final Fantasy VII Windows edition does this. it makes A/Cross into confirm, and B/Circle into cancel, while still leaving swing right as circle/B in the bike minigame.

Motivation

I saw video of the windows edition from the microsoft store, and saw that A was ok and B was cancel, but B was still swing right in the bike minigame. Just the way it would have been if ok and cancel had been swapped on the psx version. Square proves it with the xbox/windows/ps4 editions of final fantasy vii. Min game controls work by position, while outside of minigame controls work by function. switch version uses a for confirm, b for cancel, x for menu, and y for switch, and still has the minigame controls correct.

There is already intelligence in the driver to detect xinput and internally mess with the button assignments so that it matches a ps3/ps4 controller on PC. I'm willing to provide more useful info on proper controller assignment for various controllers to make them work as intended, and allow for proper button prompts. I'm familiar with official sony mapping, xinput mapping, the usual psx to usb converter mapping (which is what the ACTUAL default mapping for pc98 version is, it works correctly with old chinese psx to usb converters), etc. When/if i get a 8bitdo pro 2, i can fetch the switch mapping too.

zaphod77 commented 1 month ago

Okay, i've looked at the windows edition, and have some idea of how they did it.

They edited the field scripts. Here's what they did. they replaced all [refences] with {codes}

{SQUARE} = square {TRIANGLE} = triangle {CIRCLE} = circle, when used as OK. if x/o swap is on (and it IS for non switch versions) it will show a cross. {CIRCLE}0 = Actual Circle button, used for minigame prompts. this is ALWAYS circle/ {CROSS} = cross button. BUT if {CIRCLE}0 is present in the field script, then it actually means cross. otherwise it shows circle when x/o swap is on Both {CIRCLE} and {CIRCLE}0 are never in the same field script chunk, which is how the trick works. {CIRCLE}1 = L1 {CIRCLE}2 = R1 {CIRCLE}3 = L2 {CIRCLE}4 = R2 {CIRCLE}5 = start {CIRCLE}6 = select {CIRCLE}7 = Up {CIRCLE}8 = Down {CIRCLE}9 = Left {CIRCLE}: = Right

Based on this, the game clearly scans for circle 1 through circle: first. Then after inserting the button graphics in for them, it look for circle0. if present, it then inserts the button graphics for circle and cross. if it doesn't find it, then it inserts the prompts swapped, unless it's the switch version, then it doesn't swap. i don't know if the switch version has both {CIRCLE} and {CIRCLE}0, but it might. ps4, xbox, and windows edition clearly do. There is additional code to detect in or out of minigame, and undo the X/O swap if its' on. That I don't know how it's done. but i suspect there's some way to do it.

I hope this information is useful.