Users browsing this thread: 1 Guest(s)
Summon Command Acts like Magicite
03-02-2017, 09:29 PM
I've been putting together my project plan for my hack, and have determined that part of it will be finishing off the Summon command ability (different than Summoning an Esper through the Magic Menu). I would like to have this ability jump to the portion of code that summons a random Esper via Magicite, but do it without using MP or an Item. (Note: This is an ability used for one storyline battle, but others may find it useful for other hacks.)
Note: The Summon Aiming fix is already applied
I've isolated the code that the command would need to jump to:
However, I can't find the section of code that controls the Summon command. I replaced what I thought it was (C2/368E to C2/3693), and it ended up replacing the Esper summoned through the battle menu. The MP deducted would be the same as the Esper you had equipped, and it would play your Esper's animation first, but with no effect. Then it would summon a random Esper and apply its effect. The same thing would happen when the Summon command was used. Interestingly enough, if you DIDN'T have an Esper equipped, the Summon command worked mostly how I wanted it to. It makes me think the Summon command jumps to C2/368E, but I can't find a place in the code that does that. Any help?
Note: The Summon Aiming fix is already applied
I've isolated the code that the command would need to jump to:
Quote:(Magicite)
C2/3FAD: 20 DC 37 JSR $37DC (Picks random Esper, not Odin or Raiden)
C2/3FB0: 8D 00 34 STA $3400 (Save the spell number)
C2/3FB3: EE 70 3A INC $3A70 (Increment the number of attacks remaining)
C2/3FB6: 60 RTS
Pick a random Esper (not Odin or Raiden)
C2/37DC: A9 19 LDA #$19
C2/37DE: 20 65 4B JSR $4B65 (random: 0 to #$18)
C2/37E1: C9 0B CMP #$0B
C2/37E3: 90 02 BCC $37E7 (Branch if A < #$0B)
C2/37E5: 1A INC (Add 2 if over #$0B)
C2/37E6: 1A INC
C2/37E7: 18 CLC
C2/37E8: 69 36 ADC #$36
C2/37EA: 60 RTS
However, I can't find the section of code that controls the Summon command. I replaced what I thought it was (C2/368E to C2/3693), and it ended up replacing the Esper summoned through the battle menu. The MP deducted would be the same as the Esper you had equipped, and it would play your Esper's animation first, but with no effect. Then it would summon a random Esper and apply its effect. The same thing would happen when the Summon command was used. Interestingly enough, if you DIDN'T have an Esper equipped, the Summon command worked mostly how I wanted it to. It makes me think the Summon command jumps to C2/368E, but I can't find a place in the code that does that. Any help?
03-03-2017, 02:15 PM
It looks like the code at C2/368E is an adjustment from the global spell index (all 256 spell listed in ff3usme) for the command and the command selection.
As example, if the spell is AuraBolt (identifier 94) then the command ($B5) is #$0A (Blitz) and the command selection ($B6) is #$01 (AuraBolt). #$00 is Pummel, #$01 is AuraBolt, #$02 is Suplex, etc. It is the move that you selected in the command menu.
It may be possible that, when you summon a esper in the magic command menu, and not by the summon command, it may internally convert it as the summon command with their respective index. If it is true, it must be a conflict between the summon command code being used by the magic command and the summon command alone.
At C2/19C7 there is a table used to define the execution for all the commands in the game. You can analyze them and try to change the summon pointer for a custom code to alter the summon command behavior.
At C2/4D89 begins a code to adjust specific commands manually. At C2/4D92 begins the summon command adjustment. You should check it, just in case. I believe it affects the espers summoned by the magic command.
As example, if the spell is AuraBolt (identifier 94) then the command ($B5) is #$0A (Blitz) and the command selection ($B6) is #$01 (AuraBolt). #$00 is Pummel, #$01 is AuraBolt, #$02 is Suplex, etc. It is the move that you selected in the command menu.
Code:
C2/368E 38 SEC
C2/368F A5 B6 LDA $B6
C2/3691 E9 36 SBC #$36 ;54, the start of the espers spells
C2/3693 60 RTS
It may be possible that, when you summon a esper in the magic command menu, and not by the summon command, it may internally convert it as the summon command with their respective index. If it is true, it must be a conflict between the summon command code being used by the magic command and the summon command alone.
At C2/19C7 there is a table used to define the execution for all the commands in the game. You can analyze them and try to change the summon pointer for a custom code to alter the summon command behavior.
At C2/4D89 begins a code to adjust specific commands manually. At C2/4D92 begins the summon command adjustment. You should check it, just in case. I believe it affects the espers summoned by the magic command.
Code:
C2/4D92: C9 19 CMP #$19
C2/4D94: D0 11 BNE $4DA7 (Branch if not Summon)
C2/4D96: 48 PHA
C2/4D97: EB XBA
C2/4D98: C9 FF CMP #$FF (Check if no Esper equipped)
C2/4D9A: D0 03 BNE $4D9F
C2/4D9C: B9 44 33 LDA $3344,Y
C2/4D9F: EB XBA
C2/4DA0: B9 18 30 LDA $3018,Y
C2/4DA3: 0C 2E 3F TSB $3F2E
C2/4DA6: 68 PLA
03-04-2017, 01:47 AM
following from the above..
- have the C2/19C7 table entry go somewhere new, where you do: "JSR $37DC / STA $B6 / JMP $1763".
- having MP be untouched for one variety of the Summon command but not the other can be tricky. if i follow a difference right, hook C2/4D9C, and branch somewhere to set Bit 6 of $B1 before doing "LDA $3344,Y".
- have the C2/19C7 table entry go somewhere new, where you do: "JSR $37DC / STA $B6 / JMP $1763".
- having MP be untouched for one variety of the Summon command but not the other can be tricky. if i follow a difference right, hook C2/4D9C, and branch somewhere to set Bit 6 of $B1 before doing "LDA $3344,Y".
03-04-2017, 01:59 AM
Assassin beat me to it but anyways:
I'm pretty sure this code does not use MP.
Code:
>> Summon Command Pointer
@ C219F9: 69 64
>> New Summon Command in free space
@ C26469:
20 DC 37 # JSR $37DC (Picks random Esper, not Odin or Raiden)
85 B6 # STA $B6 (Set spell/animation)
4C 63 17 # JMP $1763 (go summon it)
I'm pretty sure this code does not use MP.
03-05-2017, 07:24 PM
(This post was last modified: 03-05-2017, 07:25 PM by PowerPanda.)
(03-04-2017, 01:59 AM)m06 Wrote: Assassin beat me to it but anyways:
Code:>> Summon Command Pointer
@ C219F9: 69 64
>> New Summon Command in free space
@ C26469:
20 DC 37 # JSR $37DC (Picks random Esper, not Odin or Raiden)
85 B6 # STA $B6 (Set spell/animation)
4C 63 17 # JMP $1763 (go summon it)
I'm pretty sure this code does not use MP.
Well, that answers the question. First off, it worked. Here are the strange parts though:
1. It DID use MP.
2. It DID change the Summon from the Magic menu also.
3. When I used the Summon command, it counted as my "1 summon" per battle for the magic menu. However, I could continually use the Summon command from the main menu.
4. All animations and captions otherwise displayed correctly.
So it appears these commands are inseparably linked. I'll continue to test later to see if I can possibly repurpose Possess to do this. I never used that ability anyway.
03-05-2017, 09:53 PM
(03-05-2017, 07:24 PM)PowerPanda Wrote:(03-04-2017, 01:59 AM)m06 Wrote: Assassin beat me to it but anyways:
Code:>> Summon Command Pointer
@ C219F9: 69 64
>> New Summon Command in free space
@ C26469:
20 DC 37 # JSR $37DC (Picks random Esper, not Odin or Raiden)
85 B6 # STA $B6 (Set spell/animation)
4C 63 17 # JMP $1763 (go summon it)
I'm pretty sure this code does not use MP.
Well, that answers the question. First off, it worked. Here are the strange parts though:
1. It DID use MP.
2. It DID change the Summon from the Magic menu also.
3. When I used the Summon command, it counted as my "1 summon" per battle for the magic menu. However, I could continually use the Summon command from the main menu.
4. All animations and captions otherwise displayed correctly.
So it appears these commands are inseparably linked. I'll continue to test later to see if I can possibly repurpose Possess to do this. I never used that ability anyway.
there's no such thing as "inseparably linked"... you just completed the first step is all. Now you need to figure out how to differentiate the two further and where to branch or skip code.
Let's Hack FF6 Stream: https://www.twitch.tv/b_run_
FFVI - Children of Vector: http://www.ff6hacking.com/forums/showthr...p?tid=2386
Monster AI Upgrade Patch: http://www.ff6hacking.com/forums/showthr...p?tid=2673
MMMMMagic 2.0: http://www.ff6hacking.com/forums/showthr...p?tid=3330
if you do my recommended C2/4D9C hook:
1) expand it to XBA, and then "JMP $4DA6" instead of RTS. no longer counts against Summon limit.
2) have the new code reached from C2/19C7 test Bit 6 of $B1 to differentiate between the two Summon types. admittedly, you'd be expanding this bit from its original purpose, but it's a way to do things without taking a custom RAM byte. hopefully, this won't break Mimic; i think it's safe, because Mimic just sets that bit with X-Magic, and summons aren't usable with that.
alternatively, i wonder what happens if you have the C2/4D9C hook instead put a null ID [EDIT: FFh - 36h, rather] (or something outside the Esper range, at least) in top of A. if that doesn't break the queuing or anything else, maybe have the C2/19C7-linked function test for that instead.
1) expand it to XBA, and then "JMP $4DA6" instead of RTS. no longer counts against Summon limit.
2) have the new code reached from C2/19C7 test Bit 6 of $B1 to differentiate between the two Summon types. admittedly, you'd be expanding this bit from its original purpose, but it's a way to do things without taking a custom RAM byte. hopefully, this won't break Mimic; i think it's safe, because Mimic just sets that bit with X-Magic, and summons aren't usable with that.
alternatively, i wonder what happens if you have the C2/4D9C hook instead put a null ID [EDIT: FFh - 36h, rather] (or something outside the Esper range, at least) in top of A. if that doesn't break the queuing or anything else, maybe have the C2/19C7-linked function test for that instead.
03-06-2017, 10:25 AM
(03-05-2017, 11:55 PM)assassin Wrote: alternatively, i wonder what happens if you have the C2/4D9C hook instead put a null ID [EDIT: FFh - 36h, rather] (or something outside the Esper range, at least) in top of A. if that doesn't break the queuing or anything else, maybe have the C2/19C7-linked function test for that instead.
Admittedly, I haven't looked at any of the code, but changing A or B can have unforeseen consequences down the line if not restored... I ran into something similar doing magic expansion where I was breaking availability of spells in the menu 3 functions down the line because there was a value stored in B and the code ran an 8-bit A for a while keeping B in tact for a LONG time. but worth a test for sure.
Let's Hack FF6 Stream: https://www.twitch.tv/b_run_
FFVI - Children of Vector: http://www.ff6hacking.com/forums/showthr...p?tid=2386
Monster AI Upgrade Patch: http://www.ff6hacking.com/forums/showthr...p?tid=2673
MMMMMagic 2.0: http://www.ff6hacking.com/forums/showthr...p?tid=3330
03-09-2017, 12:34 AM
I have to humbly admit I'm not following most of this. I know it's possible, I just don't think I'm good enough at doing this yet.
« Next Oldest | Next Newest »
Users browsing this thread: 1 Guest(s)