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 - Grond

Pages: [1]
ROM Hacking Discussion / An old abandoned version of Final Fantasy++
« on: December 26, 2015, 09:11:45 pm »
NOTE: I do not consider this a replacement for the version of FF++ (v1.5) available in the ROM Hacks section of this site, so I am not submitting it in the normal fashion.

Screenshots (right-click -> Open in new tab)
Download (right-click -> Save as)

Once upon a time, this was going to be FF++ 2.0, but I quit working on it--mostly because I didn't like the way the new class system ended up, and it had gotten too difficult by that point to redo it thanks to tons of confusing spaghetti code I had scattered all throughout the ROM.

No documentation is included, because I either lost it or never made any in the first place (can't remember now--I think it's been about 5 years since I last worked on this). However, these are the major things it has that v1.5 doesn't:
- Vastly different job classes* & class change system**
- Completely rewritten script
- Slightly aesthetically-enhanced maps/areas
- Equipment and magic spells are greatly changed
- Poorer gameplay balance, probably
- Minor errors (most obvious is glitchy palettes when lighting some Crystals)
- General incompatibility with the FF++ World of Chaos pseudo-sequel hack
*Any class can use any spell/ability (if they have learned it and have enough MP), but generally a class uses its "own" abilities better than other classes (e.g. a Black Mage gets a bonus to black magic, a Dragoon gets a bonus to Jump, etc.)
**The system functions normally until you have completed Bahamut's quest, then you can cycle through all 12 available classes by speaking to him repeatedly (he only changes the party leader; press select to cycle the party order). Avatars of Bahamut will also appear in each town to avoid having to return to Bahamut's cave constantly.

Anyway, since this has just been sitting around on my drive for years "collecting dust", I figured I might as well make it available, because why not? Merry Christmas (a day late and a dollar short)!

P.S. - Don't even bother trying to use FFHackster to edit this; it will completely break the ROM because so many things are expanded and/or relocated. It's protected against being opened in Hackster, anyway.

I didn't know CaptainMuscles' original patch had this bug. I haven't actually used it much yet, but I assumed lots of other people were using it and I hadn't heard of any problems with it until now. Unfortunately, I think it's beyond my ability to fix it. Maybe some 6502 guru will take up the cause?

I also wanted to make it so that your characters stay stepped-forward as attack/healing animations play out and only step back afterwards (like in more recent FF games), but I couldn't come up with an easy way to do that. That would be another nice update if someone does more work on this.


Interestingly and somewhat relatedly, a while back I stumbled upon a cool Japanese FF1 hack that includes a retargeting feature like the one in the newer games, which will also prevent the dreaded "Ineffective" attacks. The hack is called "Final Fantasy Revised", by YaneBANU. It also has some other cool features--for instance there is a party-wide "stock" menu for holding extra weapons and armor.

I would possibly submit it to this site, but the readme seems to indicate that he doesn't want it hosted anywhere else (via machine translation; I can't really read Japanese).

(Note: It seems that you need to either use a proxy or be located in Japan to even access the site.)
-Hack's intro page
-Link to patch
-Doc on hack's edits (search for 32376 to find the auto-retarget code)

If you go to the site's top page there are links to several other hacks as well, though none seem as impressive as FF Revised.

Anyway, I am thinking of using the relevant code from this hack in the next version of my GFF hack (with some additions/edits to reduce its overpoweredness). I could perhaps submit the auto-retarget code as a seperate patch--I assume that would be acceptable if proper credit is given--but I'd like for one of the Japanese-speakers here to read around on the site and verify that YaneBANU is the person who wrote the new code or if it was someone else, so I can give proper credit.

Personal Projects / Re: Final Fantasy 1 Project
« on: April 08, 2014, 08:30:26 pm »
I finally got around to doing something with this. I had to skip over about half of your requests, though, because I don't know how to do a lot of it. I might add more in later if/when I figure it out (no promises, though).

Ship Game payouts
if Warrior 1 (other 3 aren't checked) is below L50:
0x377f3: low byte (0-255) / 0x377f7: mid byte (256-65535) / 0x377fb: high byte (65536-16777215)
if Warrior 1 is L50:
0x37802: low / 0x37806: mid / 0x3780a: high

Black Belt/Natural Attack and Absorb growth rate***
Black Belt/Natural Attack + Weapon combined (instead of Str2/Dmg1)***
Black Belt/Natural Hit% + Weapon combined***
Black Belt/Natural Absorb + Armor combined***
0x2d996: 0a->ea to make dmg=level; 0a->4a to make dmg=level/2
0x2d9ae: 0a->ea to make absorb=level; 0a->4a to make absorb=level/2

Item cap past 99
Don't know yet.

Base Effectivity
Dunno yet.

Set Magic Damage Range
Don't know this.

Set to always double, to tighten the range
Don't know how yet.

Direct Damage Spells - Critical Hit parameters
Don't understand this.

INT Contribution to Invoked Weapons/Armors
Can't remember.

SLEP Waking Threshold: 254 HP

MUTE Prevents Magic and Invoked Weapons/Armors
From anomie in a gamefaqs post:
Code: [Select]
By setting 0x333fe and 0x333ff to appropriate values, you can choose from any of these possibilities:
00 d0 = MUTE only prevents Magic
01 d0 = MUTE only prevents Drink
02 d0 = MUTE only prevents Item
00 f0 = MUTE prevents Drink & Item
01 f0 = MUTE prevents Magic & Item
02 f0 = MUTE prevents Magic & Drink

FAST Stacking Max
This is handled differently than in FF1. Now you get an added #hits based on Warrior 1's level.
Code: [Select]
a sample of my inefficient coding:
AD 26 61 ;load warrior 1's level
C9 10 ;check if his level is 17*
B0 08 ;skip 8 bytes if it's greater or equal
A9 02 ;otherwise put 2 in memory
8D 7D 68 ;and store that as hit additive (default is 00 not 01, so 02 is only +1 hit)
4C F4 B8 ;finished?
C9 18 ;still here? check if his level is 25
B0 08 ;skip 8 bytes if it's greater or equal
A9 03 ;otherwise put 3 in memory
8D 7D 68 ;and store that as hit additive
4C F4 B8
C9 20 ;level 33?
B0 08
A9 04
8D 7D 68
4C F4 B8
C9 28 ;level 41?
B0 08
A9 05
8D 7D 68
4C F4 B8
C9 30 ;level 49?
B0 08
A9 06
8D 7D 68
4C F4 B8
A9 07 ;must be level 50 if all previous level checks failed, so put 7 in memory
8D 7D 68 ;and store that as hit additive
4C F4 B8
*level in-game is RAM value $6126/6166/61a6/61e6 +1, so a value of e.g. 00 there is L1, 10 is L17

Personal Projects / Re: Final Fantasy 1 Project
« on: March 11, 2014, 12:20:47 pm »
Sorry I've been ignoring this thread, but I've been too preoccupied with other things to locate/figure out the info you're looking for. I'll try to get around to it soonish, though.

Yo Disch! Good to see you show up on the RH scene again (though I've hardly ever been part of it myself, always sort of lurking at the edge).

You want to make an editor, eh... my first instinct is to suggest that you add a music editor to FF Hackster, but you'd probably find it boring and tedious revisiting that game, whereas I can't keep away from it (even though I'm not working with it at the moment; rather I'm doing a FF Tactics hack).

Hmm... I'm trying to think of decent NES games that don't seem to have editors yet. How about Dragon Warrior III or IV, Battletoads, TMNT II, DuckTales, Little Nemo, Willow, Ninja Gaiden II, Clash at Demonhead, Wizards & Warriors I or II?

If you decide to go SNES, what about one of the Castlevanias? I don't think they have any editors. It would be cool if that 'Dracula X' game could be made into something closer to Rondo of Blood. Super CV IV is more deserving of an editor, though, and would probably inspire better hacks.

Well, whatever you decide to do, just try to have fun with it and don't stress over it :)

Personal Projects / Re: Final Fantasy 1 Project
« on: November 06, 2013, 07:58:31 pm »
It's cool. Don't let me discourage you if you're determined :)

One important thing I forgot to mention: Altering the size of standard map data from 3043 KAB will corrupt both the title screen gfx and Bahamut's battle gfx. You can make the map data smaller, though (i.e. more than 3043 KAB free), and use this patch to restore the gfx when they get corrupted.

Yes, I think the battle editor still works fine, apart from the palettes, and battles 77-7A which are used by the new enemies (minus Bahamut)--best not to edit those four. But if they get messed up you can restore them by putting 81/82/83/84 at 0x2CB82/92/A2/B2.

Also the armor editor is still okay as far as I can remember, and while the weapon editor messes up the brightened palettes I'm using, I think it works normally otherwise. Haven't actually checked either, though.

Unfortunately there's another problem on the horizon--when I expand the ROM for future versions of GFF, Hackster will trim off anything after 256kb when saving, taking the ROM back down to its original size (I've already verified that this happens). So Hackster will become completely useless for this hack at that point... I'll have to try to tweak the program to make it play better with GFF somehow.

Personal Projects / Re: Final Fantasy 1 Project
« on: November 05, 2013, 09:39:16 pm »
All that kind of stuff is hard-coded. There are a lot of things like that in this hack. And hardly anything can really be edited with Hackster without corrupting the data in some way--whether because I relocated it, or simply expanded it and then Hackster trims it back to its normal size when saving.

Honestly, I hate to say it (and I hope it doesn't make me look bad)... but I'm starting to think you should abandon this particular project.
 Excellent FF1 hacks are perfectly possible when built from a fresh ROM, considering the availability of Hackster for basic editing and two commented disassemblies to aid hacks that aim for something more advanced.
 Also, there must be a greater sense of pride/accomplishment to be had by building a hack to completion starting from scratch, instead of building off someone else's.
 Continue this if you like, of course, but I doubt I'll be able to help much more because I just don't have enough time.

Personal Projects / Re: Final Fantasy 1 Project
« on: November 04, 2013, 05:58:14 pm »
Yes, there are currently 133 enemies. The 5 new data sequences are at:
0x30EF0 Bahamut
0x30F04 Hades
0x30F18 Echidna
0x30F2C Typhon
0x30F40 Ladon

Their names start at 0x2F796.
The name pointers are at 0x2F732, arranged like this:
9ab7 Bahamut
86b7 Hades
8ab7 Echidna
90b7 Typhon
96b7 Ladon

Garland's Soul isn't a "new" enemy like the other 5, he replaced Ooze a.k.a. Ochre Jelly, a rarely-encountered but unremarkable enemy.

As for spell effect 12's HP limit, it's pretty straightforward:
0x339E8: low byte (0-255)
0x339ED: high byte (256+)
Currently you have (swapped to "normal" order) 0190 hexadecimal which is 400 decimal.


I suppose I could, e.g., convert the existing 3-bytes-per-level experience table into a 2-bytes-per-level one and multiply the new, smaller values by 16 in the code to get final numbers approximate to what's there now. I don't think I can do anything more advanced than that, though :)

Personal Projects / Re: Final Fantasy 1 Project
« on: November 03, 2013, 12:42:14 am »

Phoenix Down Effectivity
0x3895D-65: (zeros) -> A9 xx 9D 0A 61 20 0D B3 60
0x3B2A8-9: 0D B3 -> 4D 89
The existing routine doesnt support HP restoration at all, but it's easy to JSR to some free space and add it in, which this will do.

Magic Evade up to 255
0x3DFE8: C8 -> FB
0x3DFF7: C8 -> FB
These are caps used by the Spellbook item. This sets them to 250, since the leveling cap (also used by hit% gain) is already at 250 (not 255 to prevent rollover to 0).
Values over 200 evidently don't do anything, though. That's why I capped it where I did.

Character stats to exceed 99
HP to exceed 999
Gold to exceed 999,999
Not so easy to change right now. The game currently doesn't support displaying numbers over a certain amount of digits in certain places, and it would take some added code to make it do so. And there is the issue of menu windows having to be expanded/rearranged to contain the larger numbers in an aesthetically pleasing way.

Character level to exceed 50
Doable, but may not be very easy. The current experience table will have to double in size (more or less), and the stat and MP level up tables will also have to double in size, or maybe the code can be changed to read those tables over again from their beginning starting at level 51... not sure how practical that would be.


Related to the above issues... I have lately been considering going through all FF1's code with the help of the available disassemblies and expanding its data-reading capabilities, i.e. permitting twice as many maps, enemies, equipment, classes, level-ups, you name it. I want to do this specifically for my FF++ and WoC hacks, to fit them comfortably into a single ROM (probably MMC3, not sure yet. Or maybe one of the advanced mappers with improved sound capability) when I get around to updating/overhauling them*. Doing this could also let me add more of everything to GFF as well, but it would mean shifting lots of code & data around which would heavily interfere with your project here :\ That may be a while from now, though, and might not happen at all.

*Actually, I have already pretty heavily overhauled FF++, but I stopped working on it (3 years ago) because I wasn't pleased with the way it was turning out. Maybe I should start my own thread here for my projects and post that dead version up for dl as a curiosity... I'm not submitting it to the site normally, though.

Personal Projects / Re: Final Fantasy 1 Project
« on: October 11, 2013, 11:18:14 pm »
Okay. Hope this is helpful.
Spells - base chance to hit
Enemy Added Effect - base chance to hit
High nybble of enemies' "attack element" byte (left digit; right digit is attack element).
Example (Werewolf's data): 87004300440078ff200601110e01420484228000
The added effect chance is 40h (64) and the attack element is 02h (poison/stone).
Sleeping Bag and Tent - base healing parameters
These don't have base parameters as such; they're hardcoded to fill all HP and MP now. But it's easy enough to do this:
Make Tent restore XXh HP (but no MP):
0x3b2d5-a: 20 73 84 20 d2 ab -> a9 XX 20 3f b5 ea
Make Sleeping Bag restore no MP:
0x38a55-7: 20 f3 ab -> ea ea ea
Make Sleeping Bag restore XXh HP to one character:
0x38a58-63: bd 0c ... 0b 61 -> a9 XX 20 61 b5 ea ea ea ea ea ea ea
Mind Plus, Stamina Plus, Luck Plus, and Spellbook - effectivity
It will be easy to reduce these to +1, but raising them to +3 or more (without risking overflow past 99 {or 199 for m-eva.}) would be difficult because of the way I coded them.
Mind Plus: 0x3f179: 01 -> 00
Stam. Plus: 0x3f15f: 01 -> 00
Luck Plus: 0x38b15: 01 -> 00
Spellbook: 0x3dfef: 01 -> 00
Life 1 - effectivity
I NOPed out the HP restoration from its code, so it actually restores 0 HP, not 1 :) But you can make it restore XXh HP like this:
0x3b03e: ea ea ea ea ea -> a9 XX 9d 0a 61

Personal Projects / Re: Final Fantasy 1 Project
« on: October 10, 2013, 03:34:28 pm »
If there are some important offsets that you can't seem to locate, just say so and I'll try to help (though I can barely find my own ROM edits sometimes because I often don't write them down and then forget how I did them :D )

But anyone can use the "INT Patch" in their own hacks right now; hacking over GFF isn't required. It's included in anomie's disassembly in "magic-bugs.2.ips", although with its default parameters magic doesn't do more damage with higher INT like you might expect. But that can be changed with the info from the second of these two Gamefaqs posts. (It's "base damage Int contribution (X/32)" found near the end there. Those posts are the contents of "magic-bugs.2.ips" in raw hex form, btw.)

One thing he didn't mention about the "Enemy INT" part of that patch is that it can easily be changed to something besides enemy MagDef/4 by changing the number of LSRs (hex code 4a) in the code snippet given. Each 4a halves the final result, so if you want enemy INT to be MagDef/2 use this: ad 89 6c 20 be b4 a0 11 b1 92 4a 8d 73 68 60
Or for MagDef/8 (what GFF uses) use this: ad 89 6c 20 be b4 a0 11 b1 92 4a 4a 4a 8d 73 68 60

Also, something I noticed that doesn't seem to be mentioned in his documentation with his disassembly: his "ice-cave-warp-bug.ips" and "extra-teleports.ips" conflict, so don't use both (though I used neither for GFF).

Another thing--his "door-bug.ips" doesn't work properly because he ANDed when he should have EORed. So you can open the .ips patch itself in a hex editor and make these changes to make it work properly:
0x1c: 29 -> 49
0x1d: c0 -> 3f
0x22: 29 -> 49

One last thing: I plan to keep updating GFF until I feel there are no more improvements I can make, but I think (hope) I can avoid shifting too much code/data around and interfering with your project by expanding the ROM and putting most of the additional changes in the new free space.

I made the 1st unofficial update (#1595), but not the 2nd one, so I can't vouch for that one working correctly. But it seemed extremely buggy when I tested it just now (garbled gfx & such).

On the other hand, I can't vouch for (any of) my own patch(es) working correctly on real hardware (GFF's animated title screen messes up on Nintendulator, which is reputed to be accurate, and I have no idea why), so you might want to test on a PowerPak first (or get someone else to do it for you if you don't have one).

I made a hack to do this very thing several years ago, but it was pretty unoptimized and took up lots of ROM space. But oddly enough, I'm 100% certain that someone else (I forget who) made this same hack independently soon after and released it as a patch. But where this person's patch is now I don't know--I thought it was on this very site, yet it doesn't seem to be here any more... but I could be wrong about it being on rh.net. At any rate, I couldn't find it by Googling, either, so I dug up my own version and spent a little while optimizing it. I'll post it as raw hex--hopefully it works without problems.

enable all 12 classes at new game:
0x39d4c: 06 -> 0c

read 1 row of tiles instead of 2 when drawing class gfx:
0x39f87: 0a -> ea

insert jump to new subroutine...
0x3eae3-7: a2 0c 20 65 e9 -> 85 12 20 d0 ff

...to load 1 row of gfx tiles 12 times (alternating rows):
0x3ffe0-ef: ff...ff -> a2 01 20 65 e9 e6 11 e6 12 a5 12 c9 0c 90 f1 60

Pages: [1]