øAslickproductions.org/forum/index.php?PHPSESSID=so1iojs5ocdn0o2vf0tti7fbu6&action=recent;start=40e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexff72.htmlslickproductions.org/forum/index.php?PHPSESSID=so1iojs5ocdn0o2vf0tti7fbu6&action=recente:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexff72.html.zxög^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈà•¤i¦OKtext/htmlISO-8859-1gzip@øÕi¦ÿÿÿÿÿÿÿÿTue, 10 Mar 2020 20:34:36 GMT0ó°° ®0®P®€§²ð®ög^Øi¦ Recent Posts

Recent Posts

Pages: « 1 2 3 4 5 6 7 8 9 10 »
41
Final Fantasy V Research & Development / Re: Magic Sword subroutine change?
« Last post by Praetarius5018 on April 11, 2018, 01:50:58 PM »
Did you hit the elemental weakness with the spellblade?
And did the target in fact have more than 0 defense? A lot of enemies have 0.

Perhaps easiest would be to use a debugger and see if any of those three addresses really triggers.
42
Final Fantasy V Research & Development / Re: FF5 Bugs & Glitches
« Last post by Lumiere77 on April 11, 2018, 12:19:55 PM »
I think this is unintended but, you make a weapon double grip only & set it to be double grip OK, the double grip ability will apply it's bonus. Unfortunately, this only works on weapons that are double grip only anyway.
43
Final Fantasy V Research & Development / Re: FFV Damage Calculator
« Last post by x0_000 on April 11, 2018, 03:22:36 AM »
Whoops, meant the Cover skill.
44
Final Fantasy V Research & Development / Re: FFV Damage Calculator
« Last post by Squall on April 11, 2018, 01:43:46 AM »
!Guard also redirects physical attacks (although self damage probably can't occur from various coding.)
No Guard reduce physical damage but doesn't redirect it :)
45
Final Fantasy V Research & Development / Re: FFV Damage Calculator
« Last post by x0_000 on April 11, 2018, 12:20:43 AM »
!Guard also redirects physical attacks (although self damage probably can't occur from various coding.)

Edit: I did a quick memory hack of FFVA and made it so confused player characters can cover their own attacks, so it's very technically possible.
46
Final Fantasy V Research & Development / Re: Magic Sword subroutine change?
« Last post by Shinryuu on April 10, 2018, 12:09:10 PM »
Thanks for your replies, guys. I guess I'll have no choice but to start learning a bit of assembly, then. I took a look at those guides that you recommended and will try to get into it, though it seems a bit complicated at first. However, I've tried your suggestion, 13375K31C43R,

Quote
This only handles the case of a target absorbing an element. You'll also need to make these edits and nothing else:

Code: [Select]

C2/86F6: 46 54        LSR $54

C2/871F: 46 54        LSR $54

C2/872F: 46 54        LSR $54


Do this and it should work.

but it didn't seem to change anything, the damage output remained the same. Hm... There must be something else at work here, but I can't seem to figure it out.
47
Final Fantasy V Research & Development / Re: Magic Sword subroutine change?
« Last post by 13375K31C43R on April 10, 2018, 02:13:58 AM »
it seems like the second byte is a certain stat/parameter, and the first byte is how that stat/parameter is modified.

So it seems the second byte meanings are: 50 is the parameter for damage, 52 is for Damage multiplier, and 54 is defense
And the first byte meanings are: 06 = multiply by 2, 46 = divide by 2, and 86 = set to 0, correct?

You're sort of right. The first byte is the opcode (06 = ASL $dp, 46 = LSR $dp, 86= STX $dp) and the second byte is the parameter 'dp'. These opcodes, respectively, perform an arithmetic left bitshift on a RAM address, perform a logical right bitshift on a RAM address, or store the value in the X register to a RAM address, where the RAM address is specified by a "direct page" combined with the value of the direct page register, so only two bytes are needed in the instruction instead of three. Furthermore, as assassin pointed out, the values themselves that are affected may be either 8-bit or 16-bit depending on the CPU flags for the accumulator register (ASL, LSR) or the X & Y registers (STX). You can learn more about SNES operations by clicking here.

Code: [Select]
C2/86C0: 64 54        STZ $54      (Defense = 0)
C2/86C2: 64 55        STZ $55

This only handles the case of a target absorbing an element. You'll also need to make these edits and nothing else:

Code: [Select]
C2/86F6: 46 54        LSR $54

C2/871F: 46 54        LSR $54

C2/872F: 46 54        LSR $54

Do this and it should work.
48
Final Fantasy V Research & Development / Re: Magic Sword subroutine change?
« Last post by Squall on April 10, 2018, 02:02:38 AM »
it seems like the second byte is a certain stat/parameter, and the first byte is how that stat/parameter is modified.

So it seems the second byte meanings are: 50 is the parameter for damage, 52 is for Damage multiplier, and 54 is defense
And the first byte meanings are: 06 = multiply by 2, 46 = divide by 2, and 86 = set to 0, correct?
First byte as you called it is an assembler instruction. Always the first byte is the instruction.
The second byte is a param. Always all bytes after the first are params.
$86 mean STX Param, STX = Store (register) X. Param in this case is a memory location. So $50, $52, $54 are actually memory addresses!
$86 would mean Store 0 at XX ONLY if X register = 0

Quote
So all I did was change the '86 54' to '46 54', and the result was that X-Fight no longer ignores defense but instead uses half the enemy's defense (I playtested against Omega and his very impressive 190 defense). 'Simple enough' I thought, so I was trying to do the same with Magic Sword, yet for some reason it didn't seem to work. Here's the subroutine for Magic Sword:
Hehe you got lucky for the X-Fight :)

My advice to you is:
try to learn the ASM. That is like an alphabet - if you don't know it you cant write.
Don't try to learn all the commands at once - in a good tutorial commands are grouped so when a task is given you have enough knowledge to make it.
49
Final Fantasy V Research & Development / Re: Magic Sword subroutine change?
« Last post by assassin on April 09, 2018, 03:24:51 PM »
Quote
In the Magic Sword Level 1 and Level 3 blocks: 64 54

"STZ $54" means Store Zero to variable $54.

Quote
In the Magic Sword Level 2 block: 85 54

"STA $54" saves the A (Accumulator) register in variable $54.  A currently holds 0 because of the "TDC" right before it.  that instruction transfers the Direct Page register to 16-bit A, and said register *usually* (but not always) holds 0, making TDC a quick and small way to zero A.

Quote
In the command modification subroutine: 86 54

"STX $54" saves the X register in variable $54.  right before that, we zeroed A, and then copied A into X with the "TAX".

-----------

learn about 65816 assembly language with TheGun's handy tutorial:
http://assassin17.brinkster.net/thegun.htm

---------

Code: [Select]
C2/86C0: 64 54        STZ $54      (Defense = 0)
C2/86C2: 64 55        STZ $55

in most areas you're editing, the CPU is in 16-bit mode.  but here, it's in 8-bit mode, so we need to alter the two halves of $54 separately.  do this:
LSR $55  (46 55)
ROR $54  (66 54)
50
Final Fantasy V Research & Development / Magic Sword subroutine change?
« Last post by Shinryuu on April 09, 2018, 11:26:53 AM »
Hi guys,

I hope you can help me with my problem, as my knowledge about assembly is a bit... let's call it amateur newbie level, lol. Anyway, I was trying to change a couple ability subroutines to rebalance some overpowered (in my opinion) abilities like X-Fight or Magic Sword. In particular, I'm trying to make enemy defense matter in these cases, by using 'Defense = Defense /2' or 'Defense = Defense /4' instead of 'Defense = 0'. I already did it successfully for X-Fight by looking at the disassembly (thanks to all those who helped in uncovering all that, by the way):

Code: [Select]
Command modifications to damage
C2/83BD: A6 32        LDX $32
C2/83BF: BD 1F 20     LDA $201F,X
C2/83C2: 29 40        AND #$40
C2/83C4: F0 06        BEQ $83CC
C2/83C6: C2 20        REP #$20
C2/83C8: 06 50        ASL $50      (Damage = Damage * 2)
C2/83CA: E2 20        SEP #$20
C2/83CC: BD 1F 20     LDA $201F,X
C2/83CF: 29 20        AND #$20
C2/83D1: F0 07        BEQ $83DA
C2/83D3: C2 20        REP #$20
C2/83D5: 46 50        LSR $50      (Damage = Damage / 2)
C2/83D7: 7B           TDC
C2/83D8: E2 20        SEP #$20
C2/83DA: BD 1F 20     LDA $201F,X
C2/83DD: 29 10        AND #$10
C2/83DF: F0 06        BEQ $83E7
C2/83E1: C2 20        REP #$20
C2/83E3: 06 52        ASL $52      (M = M * 2)
C2/83E5: E2 20        SEP #$20
C2/83E7: BD 1F 20     LDA $201F,X
C2/83EA: 29 08        AND #$08
C2/83EC: F0 07        BEQ $83F5
C2/83EE: C2 20        REP #$20
C2/83F0: 46 52        LSR $52      (M = M / 2)
C2/83F2: 7B           TDC
C2/83F3: E2 20        SEP #$20
C2/83F5: BD 1F 20     LDA $201F,X
C2/83F8: 29 04        AND #$04
C2/83FA: F0 04        BEQ $8400
C2/83FC: 7B           TDC
C2/83FD: AA           TAX
C2/83FE: 86 54        STX $54      (Defense = 0)
C2/8400: A6 49        LDX $49
C2/8402: BD 65 20     LDA $2065,X  (Target Creature Type = Human?)
C2/8405: 10 0F        BPL $8416
C2/8407: A6 32        LDX $32
C2/8409: BD 1F 20     LDA $201F,X
C2/840C: 29 01        AND #$01
C2/840E: F0 06        BEQ $8416
C2/8410: C2 20        REP #$20
C2/8412: 06 50        ASL $50      (Damage = Damage * 2)
C2/8414: E2 20        SEP #$20
C2/8416: A6 49        LDX $49
C2/8418: BD 1E 20     LDA $201E,X
C2/841B: 10 07        BPL $8424    (If Target is Defending)
C2/841D: C2 20        REP #$20
C2/841F: 46 52        LSR $52      (M = M / 2)
C2/8421: 7B           TDC
C2/8422: E2 20        SEP #$20
C2/8424: BD 1E 20     LDA $201E,X
C2/8427: 29 40        AND #$40
C2/8429: F0 04        BEQ $842F    (If Target is Guarding)
C2/842B: 7B           TDC
C2/842C: AA           TAX
C2/842D: 86 50        STX $50      (Damage = 0)
C2/842F: 60           RTS

Now, from what I understand by looking at these pieces:

C2/83C8: 06 50        ASL $50      (Damage = Damage * 2)
C2/83D5: 46 50        LSR $50      (Damage = Damage / 2)
C2/83E3: 06 52        ASL $52      (M = M * 2)
C2/83F0: 46 52        LSR $52      (M = M / 2)
C2/83FE: 86 54        STX $54      (Defense = 0)
C2/842D: 86 50        STX $50      (Damage = 0)

it seems like the second byte is a certain stat/parameter, and the first byte is how that stat/parameter is modified.

So it seems the second byte meanings are: 50 is the parameter for damage, 52 is for Damage multiplier, and 54 is defense
And the first byte meanings are: 06 = multiply by 2, 46 = divide by 2, and 86 = set to 0, correct?

So all I did was change the '86 54' to '46 54', and the result was that X-Fight no longer ignores defense but instead uses half the enemy's defense (I playtested against Omega and his very impressive 190 defense). 'Simple enough' I thought, so I was trying to do the same with Magic Sword, yet for some reason it didn't seem to work. Here's the subroutine for Magic Sword:

Code: [Select]
Magic Sword Modifiers to Physical
C2/8684: A6 32        LDX $32
C2/8686: BD 50 20     LDA $2050,X 
C2/8689: 1D 51 20     ORA $2051,X
C2/868C: 1D 52 20     ORA $2052,X
C2/868F: 85 4D        STA $4D      ($4D = Magic Sword Element)
C2/8691: 1D 53 20     ORA $2053,X
C2/8694: 1D 54 20     ORA $2054,X
C2/8697: 1D 55 20     ORA $2055,X
C2/869A: F0 02        BEQ $869E
C2/869C: E6 60        INC $60
C2/869E: BD 55 20     LDA $2055,X
C2/86A1: 10 12        BPL $86B5
C2/86A3: C2 20        REP #$20
C2/86A5: 18           CLC
C2/86A6: A5 50        LDA $50
C2/86A8: 69 64 00     ADC #$0064   (Damage = Damage + 100)
C2/86AB: 85 50        STA $50
C2/86AD: 46 54        LSR $54
C2/86AF: 46 54        LSR $54      (Defense = Defense / 4)
C2/86B1: 7B           TDC
C2/86B2: E2 20        SEP #$20
C2/86B4: 60           RTS

C2/86B5: A6 49        LDX $49
C2/86B7: BD 30 20     LDA $2030,X  (Target has Elemental Absorb?)
C2/86BA: 25 4D        AND $4D
C2/86BC: F0 07        BEQ $86C5
C2/86BE: E6 62        INC $62
C2/86C0: 64 54        STZ $54      (Defense = 0)
C2/86C2: 64 55        STZ $55
C2/86C4: 60           RTS

C2/86C5: BD 32 20     LDA $2032,X  (Target has Elemental Immunity?)
C2/86C8: 25 4D        AND $4D
C2/86CA: F0 03        BEQ $86CF
C2/86CC: E6 56        INC $56      (Attack Misses)
C2/86CE: 60           RTS

C2/86CF: BD 33 20     LDA $2033,X  (Target has Elemental Half?)
C2/86D2: 25 4D        AND $4D
C2/86D4: F0 05        BEQ $86DB
C2/86D6: 46 53        LSR $53
C2/86D8: 66 52        ROR $52      (M = M / 2)
C2/86DA: 60           RTS

C2/86DB: BD 34 20     LDA $2034,X  (Target has Elemental Weakness)
C2/86DE: 85 0E        STA $0E
C2/86E0: A6 32        LDX $32
C2/86E2: 3D 52 20     AND $2052,X   (Level 3 Magic Sword?)
C2/86E5: F0 26        BEQ $870D
C2/86E7: A6 49        LDX $49
C2/86E9: BD 65 20     LDA $2065,X
C2/86EC: 29 20        AND #$20      (Target Creature type = Heavy?)
C2/86EE: F0 0B        BEQ $86FB
C2/86F0: C2 20        REP #$20
C2/86F2: 06 50        ASL $50
C2/86F4: 06 50        ASL $50       (Damage = Damage * 4)
C2/86F6: 64 54        STZ $54       (Defense = 0)
C2/86F8: E2 20        SEP #$20
C2/86FA: 60           RTS

C2/86FB: BD 1A 20     LDA $201A,X
C2/86FE: 29 02        AND #$02      (Target Status1 = Zombie?)
C2/8700: D0 31        BNE $8733
C2/8702: BD 1A 20     LDA $201A,X
C2/8705: 09 80        ORA #$80
C2/8707: 9D 1A 20     STA $201A,X   (Inflict Dead Status on Target)
C2/870A: E6 61        INC $61
C2/870C: 60           RTS

C2/870D: A5 0E        LDA $0E
C2/870F: 3D 51 20     AND $2051,X   (Level 2 Magic Sword?)
C2/8712: F0 10        BEQ $8724
C2/8714: C2 20        REP #$20
C2/8716: A5 50        LDA $50
C2/8718: 0A           ASL           (Damage = Damage * 2)
C2/8719: 18           CLC
C2/871A: 65 50        ADC $50       Damage = Damage + Damage * 2
C2/871C: 85 50        STA $50
C2/871E: 7B           TDC
C2/871F: 85 54        STA $54       Defense = 0
C2/8721: E2 20        SEP #$20
C2/8723: 60           RTS

C2/8724: A5 0E        LDA $0E
C2/8726: 3D 50 20     AND $2050,X   (Level 1 Magic Sword?)
C2/8729: F0 08        BEQ $8733
C2/872B: C2 20        REP #$20
C2/872D: 06 50        ASL $50       (Damage = Damage * 2)
C2/872F: 64 54        STZ $54       Defense = 0
C2/8731: E2 20        SEP #$20
C2/8733: 60           RTS

Here I am a bit confused as to the meaning of certain operations, because according to this description, there are several different ways to write 'Defense = 0'.

In the Magic Sword Level 1 and Level 3 blocks: 64 54
In the Magic Sword Level 2 block: 85 54
In the command modification subroutine: 86 54

Three different values, yet according to this disassembly, all of them mean 'Defense = 0'?

My first attempt was to replace all these bold bytes with 46 (which I identified as 'divide by 2' above), but this didn't seem to work. The damage from an elemental-charged Magic Sword was still ignoring defense completely, so I must be missing something. Any ideas? As I said I'm just a beginner with no assembly knowledge at all, so any help is greatly appreciated.
Pages: « 1 2 3 4 5 6 7 8 9 10 »