øAslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;area=showposts;u=122e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/index302f.htmlslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;u=122e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/index302f.html.zx¾Üg^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈàlÕOKtext/htmlISO-8859-1gzip8:ÖlÕÿÿÿÿÿÿÿÿTue, 10 Mar 2020 18:46:46 GMT0ó°° ®0®P®€§²ð®¾Üg^ÿÿÿÿÿÿÿÿË/lÕ Show Posts - Shinryuu

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Shinryuu

Pages: 1 2 »
1
Oh, sorry my bad, lol. I'll try to find some free space in the rom then. Thanks again.

2
Basically, it pauses code execution where you currently are, jumps to a different spot, executes there until it hits a "return" (RTL in this case) and then unpauses.

It happens roughly like so.
Code: [Select]
$C1/6BDE 22 34 12 D8       JSL $D8/1234
$D8/1234 <do some stuff here>
...
$D8/12FF 6B                       RTL //returns to where you stopped
$C1/6BE2 <continue here like normal>

There is also a "small" counterpart JSR that functions the same but can't leave the current bank.
The target area of JSL doesn't have to be in the ROM, you can also move to the RAM and execute that (for your own sanity, don't), which is basically like a regular language's eval.
Now here's the thing that separates JSL from a regular function call: you do not have to move to the start of a function, you can go wherever you want.
Start of a "function", middle of it or heck execute a data table if you want, asm doesn't stop you, only the crashes will.

Thanks, I'll try it right away. One more question, though; is the space at D8/1234 really unused (it doesn't seem like that)? Can I just replace the code there with the one you posted without screwing up anything else?

3
Wow, amazing work, Praetarius5018! Do you by any chance have your fixes available as an ips patch?
Because I'm unsure of how you replaced the original code of 4 bytes with a much longer code... What is JSL?

4
Whops, forget what I said, I found the problem. It seems it was working after all, but stupid me was using X-Fight instead of the regular Fight command when playtesting.

Interesting fact, though:

Since I modified both X-Fight and Magic Sword weaknesses to use Defense/2 instead of Defense = 0, the effects seem to stack, so the defense is cut in half twice and the end result was Defense/4. The damage seemed so high that I just assumed that defense was still ignored, but after testing with the regular fight command instead, the difference was much more apparent.

Quote
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.

Yep, I tested against Omega (but had to change his evade to 0 with FFV Editor in order to even hit him with normal attacks). Anyway, thanks for all your help.

5
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.

6
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.

7
That should be all there is to it. You might have to erase the name that's already there first before you type the new one.

Oh, thanks, I finally did it! I didn't delete the old name (stupid me, lol). But now I have a question related to that: some names use those double characters, you know where two letters are in one space, how do I use them? Because sometimes space becomes an issue.

8
Hello guys,

I got a question: how exactly do you change spell names or monster names? In both submenus, the editor gives you the option to select "Name" in the upper right corner, but then it seems I just can't simply enter a new name no matter what I do. Sorry if this is a really dumb question.

9
Sorry for double-posting, but here's a small uptade on the steal/drop data that Maeson has already written about in his document. I'll try to further elaborate on this after a bit of playtesting:

Monster Steal/drop data is located from 21B90 to 21C8F, 8 bytes per table.  The first 4 bytes are the items that can always be stolen/dropped, the second 4 bytes are the items that are only available when 20 is added to the steal/drop index in the monster data, then the monster item drop is selected from all 8 bytes.

Let's make an example with the first item drop table:

21B90 to 97 -> table 20 (Potion, Potion, Potion, Potion), (Hi-Potion, Hi-Potion, Phoenix Down, Elixir)

Enemy A has a steal/drop value of 20, which means he has only 4 potions to steal/drop.
Enemy B has a steal/drop value of 40, which means he has the four potions to steal, but for drops he also has the 4 following items (2 Hi-Potions, Fenix Down and Elixir) available. Also, it appears that the item slots are arranged in ascending steal/drop difficulty, e.g. the item in the first slot is stolen/dropped much easier than the item in the fourth slot.

Following is a list of all steal/drop tables and the items they contain:

21B98 to 9F -> table 21 (Potion, BombShard, BombShard, Pillow), (OtterHead, LamiaScale, Bomb R. Arm, Bomb R. Arm)
21BA0 to A7 -> table 22 (Potion, SouthWind, SouthWind, Midget Bread), (OtterHead, God's Wine, NorthWind, NorthWind)
21BA8 to AF -> table 23 (Potion, Zeus' Rage, Zeus', Rage, Devil's Sigh), (OtterHead, SplitShell, God's Rage, God's Rage)
21BB0 to B7 -> table 24 (BombShard, SouthWind, Zeus' Rage, Potion), (MuteCharm, Paralyzer, Devil's Sigh, Devil's Sigh)
21BB8 to BF -> table 25 (Wooden Arrow, Holy Arrow, Iron Arrow, Light Arrow), (Fire Arrow, Ice Arrow, Medusa Arrow, Yoichi Arrow)
21BC0 to C7 -> table 26 (Soft, Soft, Soft, Soft), (Soft, Soft, Soft, Soft)
21BC8 to CF -> table 27 (EyeDrop, EyeDrop, Antidote, Antidote), (EyeDrop, EyeDrop, Antidote, Antidote)
21BD0 to D7 -> table 28 (Potion, MaidKiss, EchoHerb, LuckMallet), (MaidKiss, EchoHerb, LuckMallet, Hi-Potion)
21BD8 to DF -> table 29 (Hi-Potion, Hi-Potion, Hi-Potion, Hi-Potion), (Phoenix Down, Phoenix Down, Elixir, Elixir)
21BE0 to E7 -> table 2A (Hi-Potion, Bomb R. Arm, Bomb R. Arm, Paralyzer), (OtterHead, MuteCharm, LilithKiss, LilithKiss)
21BE8 to EF -> table 2B (Hi-Potion, NorthWind, NorthWind, Turtle Shell), (OtterHead, BlackHole, Imp's Yawn, Imp's Yawn)
21BF0 to F7 -> table 2C (Hi-Potion, God's Rage, God's Rage, Paralyzer), (OtterHead, Barrier, ChocoRage, Dark Scent)
21BF8 to FF -> table 2D (Bomb R. Arm, NorthWind, God's Rage, Potion), (LamiaScale, God's Wine, Turtle Shell, Earthdrum)
21C00 to 07 -> table 2E (Hi-Potion, BlackHole, LilithKiss, Imp's Yawn), (Barrier, SplitShell, Dark Scent, ChocoRage)

Tables 2F to 3C (from 21C08 to 21C77) are unused and can be used to create additional steal/drop tables!

21C78 to 7F -> table 3D (Elixir, Elixir, Elixir, Elixir), (Onion Sword, Onion Sword, Onion Sword, Onion Shield)
21C80 to 87 -> table 3E (Elixir, Elixir, Elixir, Elixir), (Onion Shield, Onion Helm, Onion Armor, Onion Sword)
21C88 to 8F -> table 3F (Elixir, Elixir, Elixir, Elixir), (Onion Gloves, Onion Armor, Onion Helm, Onion Sword)

The sad thing is, as Maeson has already pointed out, that virtually no enemy in the game uses this ability to drop an additional 4 items, leaving the second half of almost all tables completely unused. In fact, the only three enemies in the game that make use of this feature are the Green, Yellow, and Red Dragons in the Sylx Tower. They all have 4 Elixirs in the first part of their table, but have the ability to drop items from the second half enabled. This is the reason why they can drop Onion equipment, even though you can steal only Elixirs from them. (At least I have been unable to steal from a second half of a table so far, which leads me to believe that even when the enemy has the additional 20 in its steal/drop byte, stealing is only possible from the first 4 items, while the last 4 items can only be dropped. Can anyone confirm this?).

10
Ah, I see, thanks for clarifying that. I'll also take a look at the Namingway edition then, because I also prefer the original save point graphics.

11
Great editor PinkPuff, this is truly awesome! Do you plan on adding compatibility with the inofficial FF4 Hardtype translation? That would be even better, seeing how the Hardtype translation is just infinitely better than that of FF2us (not to mention all the missing stuff in FF2us), so I'd like to continue using that one. I don't know how difficult that would be, but right now FF4kster can load the hardtype ROM and reads most stuff correctly, but it can't save. Whenever I try to save, I'm getting the message that Bank 1 and Bank 2 are overflowing, and the save fails. It works fine with FF2us, but that version just lacks so much content (and I don't know of any patch that restores ALL the missing items, spells, abilities, dialogue and monster stats), so it would be very much appreciated if support for the hardtype version could be added.

The J2E translation is Far from accurate... (Can't really be considered "HardType either, it's the original difficulty of the game) I suggest you check out legendsoflocalization.com to see how bad the fan translation of FFIV actually was.

A more faithful script has been put into the game by Vivify93 for his Project II which restores everything you had just mentioned.

The way they hacked FFIV is rather complicated and their expanded banks, names, etc wouldn't work kindly with the editor and as such would be extremely difficult to add compatibility for.

Project II's translation is a lot better than J2E's by a landslide. It's the reason I used it as a base for Namingway Edition to bring the names and the like closer to the JP version.

Ah, okay, I didn't know the details about the J2E translation, but I found it was more accurate than FF2us and the Playstation version (the only two others I've played so I can only compare it to those). But if you both say Project II is even better, then I think I'll give it a try. It looks promising, even though it doesn't restore the developer's room.

One more question, Vivify93 also said that he didn't restore the original maps, what does that mean? Does it mean that the "hidden" paths in certain dungeons are still visible, or is it about something else?

12
Great editor PinkPuff, this is truly awesome! Do you plan on adding compatibility with the inofficial FF4 Hardtype translation? That would be even better, seeing how the Hardtype translation is just infinitely better than that of FF2us (not to mention all the missing stuff in FF2us), so I'd like to continue using that one. I don't know how difficult that would be, but right now FF4kster can load the hardtype ROM and reads most stuff correctly, but it can't save. Whenever I try to save, I'm getting the message that Bank 1 and Bank 2 are overflowing, and the save fails. It works fine with FF2us, but that version just lacks so much content (and I don't know of any patch that restores ALL the missing items, spells, abilities, dialogue and monster stats), so it would be very much appreciated if support for the hardtype version could be added.


13
Since I couldn't find this info anywhere else, I thought I might post it here. I found the ranks (or sometimes referred to as Skill Levels) for the enemies in FF2 for the NES. In the rom, they're located from offset 17710 to 1778F, 1 byte per enemy. Since there are different translation versions of the NES rom and I'm not sure whether the offsets are the same in each version, I thought I'd post a picture of it so everyone can search for the byte sequence if need be.



The enemies are in the same order as in the Jade editor, so for example the first byte is LegEater's rank, the second byte is Vampthorn's rank, and so forth. By playing around with these you can change the number of uses needed to level up weapons/spells. It always bugged me that in the original game, weapons and spells could hardly increase beyond level 8 due to the way the skill point system works. Reaching the maximum of level 16 was pretty much impossible since no enemy in the game has a higher rank than 7. Anyway, I hope this information is useful to some of you.

14
Yeah, I realised some similarities, too, especially the attack and defense tables. To complement Maeson's list of status effects, I looked a bit more into them by changing around the status attack byte of some enemies, and this is what I came up with:

01 = unknown (seems to do absolutely nothing, but then I wonder why the Elven/Faerie Claw would have it?)
02 = Poison
03 = 1/3 Petrification
04 = Blind
05 = 1/2 Petrification
07 = 2/3 Petrification
08 = Mini
10 = Mute
20 = Frog
28 = Frog
29 = Cured? (this one is wierd. When you get hit it gives the "Cured" message that you normally get when Confusion or Paralysis wear off, even if you don't have these statuses)
31 = Confusion
40 = Petrify
51 = Sleep
80 = Death
91 = Paralyze
99 = Paralyze

There seem to be 2 possible values each for Frog and Paralysis, and there doesn't seem to be a difference between them. At least I couldn't find one.
28 is used by the Lamia Harp according to Maeson, but I don't recall any harp causing the Frog status. It's been a long time since I fully played through the game though, so maybe my memory is a bit fuzzy?

15
Hi all, that's some great work on FF3 you've made here, many thanks for these useful informations. Recently, I've also collected some data on FF3 and thought I'd share it here, since this is most probably the best place to do it. Some of the stuff in my documentation may be already covered by you or elsewhere, but I hope you'll find it helpful nonetheless. Here it is:

http://speedy.sh/jDscd/FF3-Data.doc

Pages: 1 2 »