Users browsing this thread: 1 Guest(s)
Umaro's Dash, Relics & Unequipping All

#1
 
Status
None
I still haven't been able to do the following:

Stop Umaro from randomly dashing in battle (I've applied the controllable Umaro patch; I can control him just fine, but he still randomly dashes when I select Fight)

Stop the Rage Ring and Blizzard Orb from making Umaro throw someone or blizzard randomly when they're equipped on Umaro and I select Fight (I'd like these to work like normal relics)

Have Umaro counted as "on the list" of characters to unequip when selecting "Unequip all / all not in party" on both airships and in the couple other storyline spots where the option is offered (I've applied the equippable Umaro patch, but when you tell the game to unequip all, it still skips unequipping Umaro)

Help!
 
 

#2
 
Status
None
Okay, so I got the Rage Ring & Blizzard Orb to behave like normal relics by NOPping C2/1654 & C2/1664, commands that allow Player Toss & Storm.

Just below that, at C2/1669, there'a a call to "always allow normal attack & charge". If I NOP that, Umaro can't attack and the whole battle glitches right up. Is there possibly a different value then 0x30 that can be used to only allow attack and not charge?


I changed the character checked at C2/1617 from Umaro (0D) to 0E, and the game bypasses all of the Rage Ring, Blizzard Orb, and Charge effects for Umaro. It's amazing sometimes what changing 1 byte can do for you (or against you...)

I still don't know how to include him in the unequip all / unequip not in party / storyline unequip events, though.
 
 

#3
Posts: 290
Threads: 3
Thanks Received: 40
Thanks Given: 1
Joined: Apr 2012
Reputation: 9
Status
None
(11-25-2013, 02:14 PM)RegalClown Wrote: I still don't know how to include him in the unequip all / unequip not in party / storyline unequip events, though.

This is a bit more complicated, since it's done through an event. In the event dump, look at CC/351E and CC/359D. These are the unequip character functions called from the guy on the airship; the first one is unequip all and the second one is unequip characters not in the party. I imagine the former is shared by the storyline events that unequip all members as well.

You may need to cross-reference this with the event bits document (found here) to make sure you're using the right bit for Umaro.


GET A SILK BAG FROM THE GRAVEYARD DUCK TO LIVE LONGER.

Brave New World
  Find
 

#4
Posts: 3,969
Threads: 279
Thanks Received: 236
Thanks Given: 57
Joined: Oct 2011
Reputation: 65
Status
Tissue-aware
Edit: Synchysi is faster than me Tongue

The "unequip all" and "unequip those who are not in the party" is done by events:

Code:
CC/3510: 4B    Display dialogue message $06DC, wait for button press
               Unequip some party members?
               ^ Those not now in your party.
               ^ All members.
               ^ Don't do a thing!
CC/3513: B6    Indexed branch based on prior dialogue selection [$CC359D, $CC351E, $CA5EB3]
CC/351D: FE    Return

Unequip all
Code:
CC/351E: 3B    Position character in a "ready-to-go" stance
CC/351F: F4    Play sound effect 79
CC/3521: 92    Pause for 30 units
CC/3522: F4    Play sound effect 79
CC/3524: 92    Pause for 30 units
CC/3525: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3526: C0    If ($1E80($1A0) [$1EB4, bit 0] is clear), branch to $CC352E
CC/352C: 8D    Remove all equipment from character $00 (Actor in stot 0)
CC/352E: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/352F: C0    If ($1E80($1A1) [$1EB4, bit 1] is clear), branch to $CC3537
CC/3535: 8D    Remove all equipment from character $01 (Actor in stot 1)
CC/3537: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3538: C0    If ($1E80($1A4) [$1EB4, bit 4] is clear), branch to $CC3540
CC/353E: 8D    Remove all equipment from character $04 (Actor in stot 4)
CC/3540: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3541: C0    If ($1E80($1A5) [$1EB4, bit 5] is clear), branch to $CC3549
CC/3547: 8D    Remove all equipment from character $05 (Actor in stot 5)
CC/3549: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/354A: C0    If ($1E80($1A2) [$1EB4, bit 2] is clear), branch to $CC3552
CC/3550: 8D    Remove all equipment from character $02 (Actor in stot 2)
CC/3552: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3553: C0    If ($1E80($1AB) [$1EB5, bit 3] is clear), branch to $CC355B
CC/3559: 8D    Remove all equipment from character $0B (Actor in stot 11)
CC/355B: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/355C: C0    If ($1E80($1A6) [$1EB4, bit 6] is clear), branch to $CC3564
CC/3562: 8D    Remove all equipment from character $06 (Actor in stot 6)
CC/3564: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3565: C0    If ($1E80($1A9) [$1EB5, bit 1] is clear), branch to $CC356D
CC/356B: 8D    Remove all equipment from character $09 (Actor in stot 9)
CC/356D: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/356E: C0    If ($1E80($1A7) [$1EB4, bit 7] is clear), branch to $CC3576
CC/3574: 8D    Remove all equipment from character $07 (Actor in stot 7)
CC/3576: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3577: C0    If ($1E80($1A8) [$1EB5, bit 0] is clear), branch to $CC357F
CC/357D: 8D    Remove all equipment from character $08 (Actor in stot 8)
CC/357F: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3580: C0    If ($1E80($1A3) [$1EB4, bit 3] is clear), branch to $CC3588
CC/3586: 8D    Remove all equipment from character $03 (Actor in stot 3)
CC/3588: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3589: C0    If ($1E80($1AA) [$1EB5, bit 2] is clear), branch to $CC3591
CC/358F: 8D    Remove all equipment from character $0A (Actor in stot 10)
CC/3591: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3592: C0    If ($1E80($1AC) [$1EB5, bit 4] is clear), branch to $CA5EB3 (simply returns)
CC/3598: 8D    Remove all equipment from character $0C (Actor in stot 12)
CC/359A: 92    Pause for 30 units
CC/359B: 3A    Enable player to move while event commands execute
CC/359C: FE    Return

Unequip those who are not in the party
Code:
CC/359D: 3B    Position character in a "ready-to-go" stance
CC/359E: F4    Play sound effect 79
CC/35A0: 92    Pause for 30 units
CC/35A1: F4    Play sound effect 79
CC/35A3: 92    Pause for 30 units
CC/35A4: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/35A5: C0    If ($1E80($1A0) [$1EB4, bit 0] is clear), branch to $CC35B4
CC/35AB: DE    Load CaseWord with the characters in the currently active party?
CC/35AC: C0    If ($1E80($1A0) [$1EB4, bit 0] is set), branch to $CC35B4
CC/35B2: 8D    Remove all equipment from character $00 (Actor in stot 0)
CC/35B4: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/35B5: C0    If ($1E80($1A1) [$1EB4, bit 1] is clear), branch to $CC35C4
CC/35BB: DE    Load CaseWord with the characters in the currently active party?
CC/35BC: C0    If ($1E80($1A1) [$1EB4, bit 1] is set), branch to $CC35C4
CC/35C2: 8D    Remove all equipment from character $01 (Actor in stot 1)
CC/35C4: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/35C5: C0    If ($1E80($1A4) [$1EB4, bit 4] is clear), branch to $CC35D4
CC/35CB: DE    Load CaseWord with the characters in the currently active party?
CC/35CC: C0    If ($1E80($1A4) [$1EB4, bit 4] is set), branch to $CC35D4
CC/35D2: 8D    Remove all equipment from character $04 (Actor in stot 4)
CC/35D4: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/35D5: C0    If ($1E80($1A5) [$1EB4, bit 5] is clear), branch to $CC35E4
CC/35DB: DE    Load CaseWord with the characters in the currently active party?
CC/35DC: C0    If ($1E80($1A5) [$1EB4, bit 5] is set), branch to $CC35E4
CC/35E2: 8D    Remove all equipment from character $05 (Actor in stot 5)
CC/35E4: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/35E5: C0    If ($1E80($1A2) [$1EB4, bit 2] is clear), branch to $CC35F4
CC/35EB: DE    Load CaseWord with the characters in the currently active party?
CC/35EC: C0    If ($1E80($1A2) [$1EB4, bit 2] is set), branch to $CC35F4
CC/35F2: 8D    Remove all equipment from character $02 (Actor in stot 2)
CC/35F4: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/35F5: C0    If ($1E80($1AB) [$1EB5, bit 3] is clear), branch to $CC3604
CC/35FB: DE    Load CaseWord with the characters in the currently active party?
CC/35FC: C0    If ($1E80($1AB) [$1EB5, bit 3] is set), branch to $CC3604
CC/3602: 8D    Remove all equipment from character $0B (Actor in stot 11)
CC/3604: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3605: C0    If ($1E80($1A6) [$1EB4, bit 6] is clear), branch to $CC3614
CC/360B: DE    Load CaseWord with the characters in the currently active party?
CC/360C: C0    If ($1E80($1A6) [$1EB4, bit 6] is set), branch to $CC3614
CC/3612: 8D    Remove all equipment from character $06 (Actor in stot 6)
CC/3614: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3615: C0    If ($1E80($1A9) [$1EB5, bit 1] is clear), branch to $CC3624
CC/361B: DE    Load CaseWord with the characters in the currently active party?
CC/361C: C0    If ($1E80($1A9) [$1EB5, bit 1] is set), branch to $CC3624
CC/3622: 8D    Remove all equipment from character $09 (Actor in stot 9)
CC/3624: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3625: C0    If ($1E80($1A7) [$1EB4, bit 7] is clear), branch to $CC3634
CC/362B: DE    Load CaseWord with the characters in the currently active party?
CC/362C: C0    If ($1E80($1A7) [$1EB4, bit 7] is set), branch to $CC3634
CC/3632: 8D    Remove all equipment from character $07 (Actor in stot 7)
CC/3634: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3635: C0    If ($1E80($1A8) [$1EB5, bit 0] is clear), branch to $CC3644
CC/363B: DE    Load CaseWord with the characters in the currently active party?
CC/363C: C0    If ($1E80($1A8) [$1EB5, bit 0] is set), branch to $CC3644
CC/3642: 8D    Remove all equipment from character $08 (Actor in stot 8)
CC/3644: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3645: C0    If ($1E80($1A3) [$1EB4, bit 3] is clear), branch to $CC3654
CC/364B: DE    Load CaseWord with the characters in the currently active party?
CC/364C: C0    If ($1E80($1A3) [$1EB4, bit 3] is set), branch to $CC3654
CC/3652: 8D    Remove all equipment from character $03 (Actor in stot 3)
CC/3654: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3655: C0    If ($1E80($1AA) [$1EB5, bit 2] is clear), branch to $CC3664
CC/365B: DE    Load CaseWord with the characters in the currently active party?
CC/365C: C0    If ($1E80($1AA) [$1EB5, bit 2] is set), branch to $CC3664
CC/3662: 8D    Remove all equipment from character $0A (Actor in stot 10)
CC/3664: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
CC/3665: C0    If ($1E80($1AC) [$1EB5, bit 4] is clear), branch to $CA5EB3 (simply returns)
CC/366B: DE    Load CaseWord with the characters in the currently active party?
CC/366C: C0    If ($1E80($1AC) [$1EB5, bit 4] is set), branch to $CA5EB3 (simply returns)
CC/3672: 8D    Remove all equipment from character $0C (Actor in stot 12)
CC/3674: 92    Pause for 30 units
CC/3675: 3A    Enable player to move while event commands execute
CC/3676: FE    Return

In both events, you have to make some room by either moving the whole routine where there is more space or inserting a B2 command at the end and put the rest of the code where you jump. The whole point of this is having and extra 8 bytes to put the case where character 0D is checked then unequip. I suggest you get the event dump (document where I got the events code) and the event command list. If necessary, compare with the code in the hex editor to understand how a check is made for another character.

As for the other unequip events, you can find them by make a search for "remove all equipment" in the event dump.
  Find
 

#5
 
Status
None
Thanks lot guys. I'm trying the first option (putting the rest of the routine into unused space and calling it from the current routine).

I've decided to use the free space at 26F640 (up to 80 bytes).

In theory, this is what I think you're saying:
Code:
____(Last bit of "Unequip All" sub)____

CC/3592: B2    Branch to (26F640)
CC/3595: EA
         EA    Skip last 4 bytes in routine
         EA
         EA


____(Subroutine @ 26F640)____

(Gogo, since I had to take him out to make room for the sub call)
C?/????: C0    If ($1E80($1AC) [$1EB5, bit 4] is clear), branch to $CC352E
C?/????: 8D    Remove all equipment from character $0C (Actor in slot 12)
C?/????: E1    Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)

(Umaro)
C?/????: C0    If ($1E80($1AD) [$1EB4, bit 5] is clear), branch to $CA5EB3 (simply returns)
C?/????: 8D    Remove all equipment from character $0D (Actor in slot 13)
CC/????: FE    Return

In order to make that happen, it looks like, line by line, the bytes would be:
Code:
@0C3792:
B2 ?? ?? ??          <--Goto new sub
EA EA EA EA          <--Skip rest of this sub


@26F640:
C0 AC 01 ?? ?? ??    <--If ($1E80($1AC) [$1EB5, bit 4] is clear), branch to $?????? (next E1 call)
8D 0C                <--Remove all equipment from character $0C (Actor in slot 12)
E1                   <--Load CaseWord with characters who are collected (excludes Veldt-jumped Gau)
C0 AD 01 B3 5E 00    <--If ($1E80($1AD) [$1EB5, bit 5] is clear), branch to $CA5EB3 (simply returns)
8D 0D                <--Remove all equipment from character $0D (Actor in slot 13)
FE                   <--Return

Am I near the mark or way off here?
 
 

#6
Posts: 3,969
Threads: 279
Thanks Received: 236
Thanks Given: 57
Joined: Oct 2011
Reputation: 65
Status
Tissue-aware
I believe your B2 call should be: B2 40 F6 1C (bank CA being 00 and now you're in E6)

Also, EA is an actual event command. This is not ASM but event code. If you want to end the sub, use FE after the B2 40 F6 1C. The game will make the jump, then read the new code and come back to the FE after the B2 command. If you want an NOP equivalent in event code, use an unused command like FC or FD, but you'll still need a FE otherwise the game will freeze.

The rest looks good at first glance.
  Find
 

#7
 
Status
None
So, would that mean

Code:
@0C3792:
B2 40 F6 1C FD FD FD FE

and

Code:
@26F640:
C0 AC 01 48 56 ??
8D 0C
E1
C0 AD 01 B3 5E ??
8D 0D
FE
?

The ??'s I'm not sure of now... the first one should be for "here in the same bank"—it points to the next E1 call, 2 "lines" ahead); the second is for the event in CA that's called at the end of the original event.

If I've understood it correctly, I guess I just need those 2 bytes Tongue
 
 

#8
Posts: 3,969
Threads: 279
Thanks Received: 236
Thanks Given: 57
Joined: Oct 2011
Reputation: 65
Status
Tissue-aware
(11-25-2013, 07:05 PM)RegalClown Wrote: The ??'s I'm not sure of now... the first one should be for "here in the same bank"—it points to the next E1 call, 2 "lines" ahead); the second is for the event in CA that's called at the end of the original event.

bank CA = 00
bank CB = 01
bank CC = 02

This is good regardless where you are, it is not relative to the bank you are in. Initial bank is CA because event are from CA/0000 to CC/FFFF. This means you can't jump to an offset prior to CA/0000. #tipoftheday
  Find
 

#9
 
Status
None
I don't think the 1C is right... when I choose to unequip all on the airship, it takes me to the cinematic where the world is torn asunder, then freezes.

Also, I'm not sure how to tell what bank something is in by its offset address, so I'm still no closer to understanding what to replace the "??"s with Sad
 
 

#10
Posts: 3,969
Threads: 279
Thanks Received: 236
Thanks Given: 57
Joined: Oct 2011
Reputation: 65
Status
Tissue-aware
Command AD shows the world tearing apart:

Code:
AD : 1    : Show cutscene with world tearing apart.

You probably missing a byte before your AD so the game is reading the AD a a command byte and not a parameter. That or something before is off, leading to what I just explained anyway. I think the jumping parameters I gave a right, because otherwise the game would have crashed (with no end of the world cutscene).

As for the bank numbers, offset 000000 is C0/0000. you just add to C0 which is 0.

Offset 100000 is D0/0000
Offset 200000 is E0/0000.
  Find
 



Forum Jump:

Users browsing this thread: 1 Guest(s)


Theme by Madsiur2017Custom Graphics by JamesWhite