Users browsing this thread: 2 Guest(s)
Finishing Off The Complete Roster Hack

#1
Posts: 614
Threads: 49
Thanks Received: 0
Thanks Given: 4
Joined: Feb 2017
Reputation: 25
Status
None
I've been reading the forums in-depth to try to fix a few things before getting a beta version of my hack out the door, and have found something surprising in the "Full Roster Hack" subforum. Namely, that we practically finished a full roster hack, but never compiled and released it! While Iris Havengard may be a bit too ambitious, the backbone is (almost) all there. 4 hacks specifically combine to give us the full effect:

1. B-Run's MMMMMagic 2.0 - This rewrites the SRAM to give a spell list to each character slot, for a full 16 characters. It also has the side-effect of allowing 10 more spells to be added to the game.
2. Madsiur's OP Code ASM - This allows hackers to use <OP$17> and <OP$18> to pull the characters' names into field dialogue. There was no hack needed to do this in battle dialogue.
3. HatZen08's "FF6RE" (I'm assuming this means FF6 Roster Expander?) - This is a re-write of HatZen's guest adder patch that ties character slots 0E and 0F to event bits, allowing the characters to be set up via events the same as any other character. In addition, it moves the Merit Award and Active While Imp flag onto 2 unused special flags, allowing profiles 0E and 0F to be fully equippable both in and out of combat. So, as long as you assign profile 0E/0F to character slot 0E/0F, and set the correct event bits, you have 2 fully-usable characters. This hack also eliminates the need for shop sprite pointers, as it replaces character sprites in the shop with names. I have made 2 small edits to this patch (changing the event flags needed for the characters to 0FE and 0FF, allowing characters to participate in the final battle).
4. Madsiur has rearranged some profile and event data so that Leo and Banon take different profiles and are assigned to character slots 0C and 0D, freeing up 0E and 0F to be used in the World of Balance. 

With these 3 together, there are only a few things that are needed yet.
1. Sprite Sheet Expansion - to allow more sprite sheets to have Chocobo/Magitek riding sprites. As it so happens, I am finished with v.1 right now, but haven't widely released it. I'm evaluating expanding Kefka's spritesheet to include a Chocobo, and then seeing if I can add unique profile pictures to Esper Terra, the Merchant, and Kefka.
2. Desperation Attacks - Gau, Umaro, and characters 0E and 0F do not have Desperation Attacks. Additionally, in order to get the benefit of 10 new spells for the MMMMMagic patch, DAs have to be overwritten. I am working on coding a single move called "Desperation" in slot $FA that all characters who have the Fight command can use.
3. The "Banon Fell..." check needs to be moved to Banon's new profile or removed.
4. (THIS IS THE ONE I NEED HELP WITH) Naming Screens for Characters 0E and 0F - Right now, characters 0E and 0F can have a name stored in the RAM, but there's no way for the player to enter a name or use a Rename Card on a profile higher than Umaro's. I've searched C3 all day today, and I can't find the check that buzzes out the screen when you try to enter names on profiles 0E and 0F. Can anyone help?

EDIT: HAH! I knew if I posted publicly asking for help, I'd immediately find the answer to question 4. I BELIEVE it is C3/8AC6 I just need to change it from "CMP 0E/ C9-0E" to "CMP 10/ C9-10"


Projects:
FFVI: Divergent Paths (Completed) - a complete storyline and gameplay hack of FF6 that adds Leo as a playable character
  Find
Quote  

#2
Posts: 3,966
Threads: 279
Thanks Received: 234
Thanks Given: 56
Joined: Oct 2011
Reputation: 65
Status
Tissue-aware
(07-10-2018, 11:05 PM)PowerPanda Wrote: HAH! I knew if I posted publicly asking for help, I'd immediately find the answer to question 4. I BELIEVE it is C3/8AC6 I just need to change it from "CMP 0E/ C9-0E" to "CMP 10/ C9-10"

Yep that's it! There may be a check for regular naming (e.g on recruit) screen but there is no possibility in vanilla game so there could be none as well, or the same code path you pointed out is used, I'm not sure.

One thig that will be required is roster / save / shop OAM expansion but this is sprite based, however only sprite $00-$0D have the full data and pointers. I've made an expansion for RotDS but it's an ASM file that won't compile alone but there are some good notes you can use and look at the structure. I'm still not sure if such an expansion work fully because Gi Nattak is the tester. Right now it theoretically allow 64 sprites to have the 2x 9 bytes of OAM data, the same sprite $00-$0D currently have.

It's cool to see someone picking up this part of the full roster hack, hopefully a full working patch will come out of this : )

I'll come back to you on your other points tomorrow, it's been a long work night for me!

Edit: OAM data placeholders $31 and $FF should be changed to what they are supposed to be, which I don't know : P

.zip  oam.zip (4.22 KB, 5 downloads)
  Find
Quote  

#3
Posts: 2,548
Threads: 98
Thanks Received: 147
Thanks Given: 156
Joined: Aug 2009
Reputation: 52
Status
Nattak\'d
I tested it tonight actually Laugh
It does in fact work in the sense that it removes the glitchyness that having a non-normal main character on the save screen caused, and allows you to load a main character sprite up to Kefka, which is the last one normally. But, the thing I'm wondering now is I don't see any way to get a non-main character/custom sprite to load up, all the values up to like $F0 are accounted for the tile index byte, and so far I can't figure out a way to load anything elsewhere in the ROM. So the OAM is expanded and it doesn't look all glitchy, the save menu, but there seems to be no way to load some sprite that's not in the main character range of spritesheets. Is there something else to this I wonder?

Also one other thing I noticed when testing this, is the party select menu (narshe battle, airship, etc.) is glitched out. Removing just this OAM patch brought it back to working correctly. Shop windows however are not glitchy, but the new characters aren't showing up in them either.. which I don't mind but I'd guess the intent of the expansion would be for that as well?


We are born, live, die and then do the same thing over again.
Quote  

#4
Posts: 3,966
Threads: 279
Thanks Received: 234
Thanks Given: 56
Joined: Oct 2011
Reputation: 65
Status
Tissue-aware
(07-11-2018, 07:04 AM)Gi Nattak Wrote: Also one other thing I noticed when testing this, is the party select menu (narshe battle, airship, etc.) is glitched out.

You can add this to the "hooks" section of the oam.asm file and it will fix line-up menu:

Code:
seek($C376BA)
   lda.b #SNES_BANK

For the rest I'm not sure what tile ID represent and what values can be used.
  Find
Quote  
[-] The following 1 user says Thank You to madsiur for this post:
  • Gi Nattak (07-11-2018)

#5
Posts: 3,966
Threads: 279
Thanks Received: 234
Thanks Given: 56
Joined: Oct 2011
Reputation: 65
Status
Tissue-aware
@PowerPanda:

For the banon check, here is a patch I made back in 2012, my very first ASM hack lol

For the desperation attack code, I cannot really help in a post, I'd need to like code it myself but the single desperation attack is a good workaround.

.7z  banondie.7z (598 bytes, 5 downloads)
  Find
Quote  

#6
Posts: 614
Threads: 49
Thanks Received: 0
Thanks Given: 4
Joined: Feb 2017
Reputation: 25
Status
None
(07-11-2018, 12:11 AM)madsiur Wrote:
(07-10-2018, 11:05 PM)PowerPanda Wrote: HAH! I knew if I posted publicly asking for help, I'd immediately find the answer to question 4. I BELIEVE it is C3/8AC6 I just need to change it from "CMP 0E/ C9-0E" to "CMP 10/ C9-10"

Yep that's it! There may be a check for regular naming (e.g on recruit) screen but there is no possibility in vanilla game so there could be none as well, or the same code path you pointed out is used, I'm not sure.
That 1-byte change allowed me to use event command $98 (invoke name change screen) on profiles $0E and $0F. It's working!
However, there's one more thing that I just noticed. Event flags 2EE (1EDD:6) and 2EF (1EDD:7) allow Gogo's status screen to check Actors 0E and 0F for useable abilities. So, in my test, I made Jump and Health useable by Gogo, then gave the abilities to Actors 0E and 0F. I found that they worked correctly on Gogo's screen, but that with a full roster, the display was way off. Both displayed on the correct horizontal axis, but the vertical axis put them on the far left, overlaying Gogo's Mag.Pwr stat. The second command was cut off on the bottom of the screen.
The behavior is a bit more difficult to describe. First off, on Gogo's list, there is space for 16 lines. With a complete roster of original characters, 15 of those lines are taken. 1 empty line for removing the ability, 3 for Fight/Magic/Item, the 12 mimicable abilities (Steal/Capture, SwdTech, Throw, Tools, Blitz, Runic, Lore, Sketch/Control, Slot/GP Rain, Dance, & Rage), and then 1 empty slot. If you have 2 more commands on his list, the cursor will go to the empty slot for the first. If you press "A", it will load the ability from character 0E. Then, if you press "down" again, the cursor will move back to the left onto the original command you selected to be replaced. If you press "A" here, it will load the ability from slot "0F". Note that if you remove abilities (such as making "Dance" and "Rage" unavailable to Gogo), these display and operate correctly.
I've got some ideas of how to address this, but I want to take a look a the code first.


Projects:
FFVI: Divergent Paths (Completed) - a complete storyline and gameplay hack of FF6 that adds Leo as a playable character
  Find
Quote  

#7
Posts: 175
Threads: 11
Thanks Received: 10
Thanks Given: 8
Joined: May 2013
Reputation: 13
Status
Well-Fed
I've been planning to take a look at that, actually, because I ran into the same problem with another patch. It's been a while, but if you want to talk through the code with someone, I'd be up for that - maybe we can solve it together?


Current Project: FF6: Tensei | Discord ID: TristanGrayse
  Find
Quote  

#8
Posts: 614
Threads: 49
Thanks Received: 0
Thanks Given: 4
Joined: Feb 2017
Reputation: 25
Status
None
(07-11-2018, 11:58 AM)GrayShadows Wrote: I've been planning to take a look at that, actually, because I ran into the same problem with another patch. It's been a while, but if you want to talk through the code with someone, I'd be up for that - maybe we can solve it together?

Yes please! I found the finger pointer hotspot data today. The 16th slot going back to the command you selected is actually a fluke, caused by this:

Code:
Hotspot data
    C3/6412:    80 00 00 01 10

Finger positioning data
    C3/6417:    F010
    C3/6419:    F01C
    C3/641B:    F028
    C3/641D:    F034
    C3/641F:    F040
    C3/6421:    F04C
    C3/6423:    F058
    C3/6425:    F064
    C3/6427:    F070
    C3/6429:    F07C
    C3/642B:    F088
    C3/642D:    F094
    C3/642F:    F0A0
    C3/6431:    F0AC
    C3/6433:    F0B8
    C3/6435:    F0C4

Data: Used by      C3/69BA
    C3/6437:    9764        (from      C3/5D60)  <---- THIS IS BEING INTERPRETED AS THE 16TH SLOT POINTER POSITION

The 16th slot pointer is reading its "position data" from a completely unrelated line of code, and it just happens to ALMOST line up with something the player did intentionally. We MAY be limited to 16 lines here, in which case that will be something we just tell the people who use the hack. There may be other creative solutions though.

Also, HatZen's extra mimic slot, which I just discovered, might point us in the right direction of what needs to be edited.
https://www.romhacking.net/hacks/1315/

(07-11-2018, 08:40 AM)madsiur Wrote: @PowerPanda:

For the banon check, here is a patch I made back in 2012, my very first ASM hack lol

That could definitely work. I also note that we can simply change this line to whichever profile we move Banon to in order to retain that functionality. I tested this with profile $0F, and it worked fine. I'd prefer to keep that functionality if possible, and allow people to apply your patch if they want to remove it.
Code:
C2/06D8: BD D8 3E     LDA $3ED8,X    (Which character)
C2/06DB: C9 0E        CMP #$0E        <--- CHANGE THIS LINE TO BANON'S PROFILE
C2/06DD: D0 05        BNE $06E4      (Branch if not Banon)
C2/06DF: A9 06        LDA #$06
C2/06E1: 8D 6E 3A     STA $3A6E      (Banon fell... "End of combat" method #6)


One other thought that I had, possibly for a "plug and play patch" for newer hackers. (Note: this would be phase 2 of the project, just writing the idea down.) If people want to add their own custom character, the easiest way to do that will be to replace an existing character with full battle sprites. The obvious choice for this is the Ghost, since it is a totally optional guest character, but has portrait data and everything. It's role could easily be replaced by a mute guest character with the Merchant sprite, as that doubles as a "Doma Guard". Heck, we could even replace it with a deceased Biggs and Wedge. Then, we could make a copy of the ghost's sprite sheet and tie it to field NPC slot $7A, which is currently empty, for all of the times the ghost appears in story sequences. Finally, we could change an existing ability (such as Possess) into a simple "cast a spell for free" like Health/Shock, and tie it to ability slot $FB or $FC, which will be unused in the final hack.

I could code a basic event that adds the new character to the party. An obvious choice for me would be replacing one of the auction items with a Bachelor/Bachelorette auction. With that, newer hackers could pretty much do everything in FF3usME, and have the satisfaction of seeing their character in game.


Projects:
FFVI: Divergent Paths (Completed) - a complete storyline and gameplay hack of FF6 that adds Leo as a playable character
  Find
Quote  

#9
Posts: 614
Threads: 49
Thanks Received: 0
Thanks Given: 4
Joined: Feb 2017
Reputation: 25
Status
None
Small update today, but I've tested, and the new characters ARE responding to Casewords (characters collected, characters collected, etc.). So that's good news.

There are a few subroutines that will need to be adjusted and expanded. I'll list them here and post their addresses when I find them.
Complicated routine for determining the number of characters in the party (found: CA/C5C1 - this one is going to be complicated)
The subroutines that determine which characters show up on the Blackjack/Falcon (found - determining best course of action)
The "Inn" subroutine that heals all characters (found - no action needed as it goes by party character)
The Unequip Subroutine from the airship (found - this one is doable if I move the sound effects to a subroutine)
The destruction of the world cutscene (found - determining if any action needs to be taken)


Projects:
FFVI: Divergent Paths (Completed) - a complete storyline and gameplay hack of FF6 that adds Leo as a playable character
  Find
Quote  

#10
Posts: 81
Threads: 12
Thanks Received: 0
Thanks Given: 0
Joined: Feb 2017
Reputation: 3
Status
Brave
This is very cool. Expanding the party roster is great, I'm a big fan. I had similar ideas before life happened and all of my free time dried up.

One of the places I got stumped was assigning musical themes for new characters and be obviously not bring able to integrate then into the game's ending character medley.

I know it's not relevant to the hack but I'm curious I you've considered this?
  Find
Quote  



Forum Jump:

Users browsing this thread: 2 Guest(s)


Theme by Madsiur2017Custom Graphics by JamesWhite