јAslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;u=278;area=showposts;start=840e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexbd60.htmlslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;area=showposts;u=278e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexbd60.html.zxбхg^џџџџџџџџџџџџџџџџџџџџШ0P.6OKtext/htmlISO-8859-1gzip8:ж6џџџџџџџџTue, 10 Mar 2020 19:25:28 GMT0ѓАА Ў0ЎPЎ€ЇВ№Ўахg^џџџџџџџџЧ26 Show Posts - chillyfeez

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

841
Oh, wow.
It seems like a simple set of instructions, but I'm not quite sure I understand by looking at the code how the division is actually happening there. Would this theoretically work in ffiv, too?

842
So here's the patch. It should work when applied to any FFIIUS v1.1 ROM, even if it's been edited already (as long as you haven't messed with the part of the ROM that loads monster stats at the beginning of battle).

I'll eventually post a disassembly, but it is a huge amount of code.
To simplify what it does:
1) loads base monster stats as normal
2) finds the average level of the party (henceforth referred to as APL) - well, sort of. I don't know how to make SNES divide by any number but 2, so when there are 5 or 3 party members, first the game subtracts the level of the party member in the latest slot, then divides by 4 or 2 respectively. Of course, that means that if you place your highest level character in slot 5, you can minimize the amount that monsters level up (but unless your party has drastically uneven levels, you won't notice much difference).
3) determines if the monster is a boss - if so, skips the process
4) determines if the monster is a higher level than your APL - if so skips the process
5) multiplies the following stats by 1.5: Level, HP/MAX, Attack Multiplier, Attack Base, Defense Multiplier, Defense Base, M-Defense Multiplier, M-Defense Base, Speed
6) halves the determined APL
7) jumps back to step 4 and repeats until the Monster's level is higher than the APL

As in FFVIII, early monsters will still be pushovers, but more powerful monsters will get really difficult when you are at high levels.
It'll be pretty easy to alter how much more powerful the monsters get, so really, if you try this out, let me know what you think - if I should make them get even stronger, or if they get too strong. I can make adjustments.

 :edit: Created a new patch using a new formula (thanks, assassin, for the assist), available a few posts down from here

843
Yeah, you know, I hadn't even thought of that. It was more of an anti-grinding mechanism in my mind, but you're absolutely right.
I finally got it working late last night. Will have the patch up soon.

844
So anyway, I've been playing ffviii,and was inspired to create a mod that makes monsters level up as the player does. It's a massive amount of code, and has required a lot of debugging as I go, but I'm almost there. Of course I'll put up a patch when it's ready.
Unlike the chocobo encounters mod, this will be a patch that can be applied to any FFIIUS ROM,even if it's already been edited.

845
In an effort to limit the amount of new topics I start, I'm creating this thread.

An index of all of the stuff I've posted in this forum that might be of use to other FFIV hackers,
or of interest to FFIV fans who might want to see some changes/updates to the game

Please note this is not complete yet

1) My hack - Final Fantasy II: A Threat from Within
This is a work in progress, but there is a playable demo attached to the first post

2) Other Mods These may not patch cleanly into already-altered ROMs, so beware!
Random Chocobo Encounters - Meet chocobos on the field in the Overworld in order to catch and ride them!
Summon Phoenix - Turns Odin into Phoenix (fire damage to enemies, revives fallen party members). Will patch cleanly, but overwrites some Odin Graphics, so the Odin battle will have to be changed somehow.
Shadow Mod - This is a mod that allows you to add and remove characters at will without losing their stats, experience, and equipment. All characters, pretty much whenever you want. But please read the whole post linked here, as there are some weird things that happen sometimes.
Scroll Through Targets with Y - Allows the player to scroll through all available targets in a battle by pressing the Y button

3) Patches Mods that will patch cleanly into already-edited ROMs
Monsters Level Up as You Do
A Pet Black Chocobo - This will let you keep your Black Chocobo, and not fly back to its home every time.
Press L to toggle running - Does exactly what it says
Press X to defer to the next ready character in battle - Ditto
ATB Meter - allows you to switch between viewing Max HP and Battle readiness during battle (option available in the Custom menu, replaces stereo/mono). WILL NOT PATCH CLEANLY WITH "Press X to Defer!"
Enhanced ATB - combines the two previous patches(without crashing)
User Options - Combines L-to-run, X-to-defer, and ATB meter
Break Damage Limit - allows attacks to register as high as 16383 per target instead of capping damage at 9999

4) How-Tos
Alter Summoned Monsters
Alter "Special" Monster Sizes
Hacking the Music
Change which Overworld Landscape features change with Flags (such as the mountains that appear outside of Mist when Rydia calls Titan)
Same as above, but faster!
Determine Overworld Monster Encounters by Event Flag (instead of by location on the map)
Make a fully functional, any item Salve command!
Change "Call" into a five character label in the Magic Menu
Change Charging and Action stances for battle commands
More to come!

846
I think Grimoire LD discovered that you can treat "absorb" as an element as long as it's not paired with another (real) element... But I'm not positive that can be used for a reaction... I seem to recall reaction element bytes working differently than attack/defense element bytes (but I could be wrong - it's been a while).

847
Unfortunately, no.

I mean, you can change the trigger, but not to be when the [carrot], specifically, is used. Reactions can trigger by an action by a specific character, or an action of a specific element, but not a specific spell or item. Also, I don't think the carrot can be used in battle...

848
Well, OK, if you know how I work, then you know I can't just leave well enough alone, so I revised the mod ever so slightly. Now, when the chocobattle is over, you are given the option to ride the chocobo or not. Say Yes, and you'll be riding the chocobo. Say No and you won't (duh).

Serves a dual purpose: 1) gives gameplay purpose to the black screen, 2) maybe you weren't looking to ride a chocobo.

Also, as this is something I was planning anyway, there is a White Chocobo "enemy" now. I haven't added it to any of the monster formations, but you can try it out if you want. In most cases, it will do nothing but run away if you attack it. If DK Cecil (this was just for testing purposes, in my hack it will be Kella, the Blue Mage) attacks it (using Fight), though, it will heal the MP of a random party member.

Anyway, the original patch is still above, but here's the revision.

849
I changed the map name index to 80, so now you get a plain black screen, which I think I prefer. I'll stick with that and move on with my life.

850
Exactly! I can't wait to cook up sidequests.

So have you tried it? What do you think of the black screen?
Should I work to eliminate it or is that wasted effort?

851
OK, here it is.

I wasn't able to eliminate the black screen, but it's so brief that I don't find it offensive at all.

Apply this patch to a clean FFIIUS v1.1 ROM. Beware, I edited events (and monsters) using FF4kster, so it will screw up your hack if you apply it to an already edited ROM.

Essentially, if you're walking around in forest (has to be center forest tile - no edges or corners), you'll have a 25% chance of getting the chocobo encounter.

The only other difference you'll find is that I eliminated one of the Bahamut cave Behemoth battles in order to include the chocobo encounter event.

Have fun with this - let me know what you think!

For my own hack, I plan on using this and eliminating most of the Chocobo forests altogether (probably will be something about the power of the crystals having sustained the chocobo sanctuaries). This will give me the flexibility to add more location triggers to the Overworld map!

852
So I got a version of the plan up and running.
It doesn't work exactly as planned, but it does work...

So this is what will happen:
When the conditions are met for a Chocobo battle (that is, if you're in the forest and the randomization returns true), the screen will go black for a brief moment, then you'll enter a battle with three Imps and a Chocobo (chocobo forest music will play in the background).



The Imps are regular Imps and the Chocobo is, well, he's basically invincible. He has the max possible HP, and his defense and magic defense are 255. If you attack the chocobo, it will counter attack, which will likely kill the offending party member.



If you kill the three Imps, then the Chocobo will say "Kweeh!!!" and the battle will end.



The screen will go black for a moment again, except it will say "A Chocobo!" at the top of the screen.


This screen only lasts about half a second, but is absolutely necessary. I'll explain later.

Then the world map will reload and you'll have a chocobo!



So why does it happen this way, and not exactly as I originally planned?
Well it turns out that if you cue a battle event the way I had planned, the game has no idea which map to load afterward. The implication of this fact was that the only possible outcomes of the chocobattle would be dying or catching a chocobo. So instead of a "scaredy" chocobo, like in FFVII, you get an "ass-kicking" chocobo who will kill you if you don't catch him.
But then the next problem arose...
Did you ever notice that, no matter which chocobo forest you enter, the game knows where to put you when you mount the chocobo? Well, that's because the game stores (somewhere) in RAM the x,y location on the world map of the last cave/town/chocobo forest, etc that you entered. When you mount a chocobo, that's how it knows where to put you.
So the problem I ran into was, after the chocobattle was over, I'd be riding my chocobo starting from Fabul - because that was the last location I entered - instead of wherever the battle took place.
The solution - the Chocobattle event begins with loading the "Black castle background" map, effectively entering a location, then the battle begins. I had to change the location name of black castle background to "A Chocobo!" so that the displayed message would have relevance.

Of course, now that I'm typing this out, I'm having a brainstorm... What if I can just find the place in RAM where the Overworld x,y is stored?
 :hmm:

... Another update coming soon!

853
Final Fantasy IV Research & Development / Random Chocobo Encounters
« on: May 27, 2014, 05:17:53 PM »
Yes - I am really planning on making this possible!

It's going to take a while, but I think I have all the necessary info.

The research I did on affecting which Encounter Set is picked based on event flags led me to wonder what else I can do just before a battle begins. It was surprisingly easy, but I found out that I can:
1) make an event call happen just before a battle, and
2) skip the battle entirely (which can be done based on various conditions in RAM, say, event flags...)

I don't have the whole thing worked out yet, but this should be enough knowledge to do it.

For a little proof of concept, try this code out (you may notice it starts out similarly to my "Encounter Set based on Flags" code):
Code: [Select]
$00/8994 4C 31 FD    JMP $FD31  [$00:FD31]  ;Jump to custom code
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$00/FD31 5A          PHY    ;Save Register Y, in case it's important                 
$00/FD32 A9 FB       LDA #$FB                ;Load FB ("Sight" event call) into A
$00/FD34 20 63 DF    JSR $DF63  [$00:DF63]    ;Jump to event execution subroutine
$00/FD37 A9 00       LDA #$00                ;Leftover from an earlier experiment, in which encounter set 00 was selected - of no importance here
$00/FD39 FA          PLX                     
$00/FD3A 7A          PLY                     
$00/FD3B 5A          PHY                      ;Get registers X and Y exactly where they would be if a battle was about to begin
$00/FD3C 4C B2 80    JMP $80B2  [$00:80B2]    ;Jump to exactly where you would be in code immediately after the end of the battle

Plug this into your ROM and walk around in the Overworld (must be on the Overworld map, no other encounters will be affected). Pretty soon, you'll see the map zoom out like you just casted sight, then press your A-button to zoom back in, then feel free to walk around some more! You'll never encounter any enemies in the Overworld, instead the game will just cast Sight. But, walk around in the Underworld, or in a cave, or wherever else, and battles will proceed as normal.
 :laugh:

So... The plan:
The instructions I'll be coding will look like this (in plain English):
1) Check to see if we're walking in Forest
2) If so, 50% chance the following happens
3) (via event) Engage battle with chocobo
4) (This is where I'll have to figure things out a bit still) Somehow, work in battle conditions that allow for a nonviolent end to this chocobo battle, and assuming this is done, set some otherwise unused event flag (using a custom command that will be used exclusively by the chocobo)
5) (after the chocobo battle ends) check if aforementioned event flag is set, if so, do the following
6) (via event) Mount chocobo
7) (and whether the chocobo was mounted or defeated) Skip the battle

There's still quite a bit of coding to get done here, but I can't see any reason why this won't work.

This will be complicated enough that I'll be posting a patch when it's all said and done, and I'll try to keep you posted on the progress.

854
Final Fantasy IV Research & Development / Re: Event Flag log
« on: May 11, 2014, 12:42:43 PM »
So, as if the programmers actually wanted me to do this, it turns out that the code that picks encounter sets in the Overworld is entirely separate from that which picks encounter sets everywhere else (presumably the same goes for the Underworld and the Moon, but my goal was to only make this happen in the Overworld anyway). So I didn't need to make any edits to the original prototype code! (... ok, I did clean it up a bit after testing it out)

So, the original code that picks enemy encounter sets in the Overworld looks like this:
Code: [Select]
$00/8994 5A          PHY                     
$00/8995 FA          PLX                     
$00/8996 BF 42 C5 0E LDA $0EC542,x     ;Load encounter set based on current section of Overworld Map

Simple enough - observe current location, then reference the appropriate encounter set.

My custom code uses a convenient big block of empty coding space at (LoROM) 00/FD31-FFBB
Basically, it looks at flags 240-245 (normally unused) and based on which, if any, is set it will reference a different encounter set. By using this code, the hacker can then (using FF4kster) simply set one of these flags at the point in the game when they want Overworld encounters to get more difficult!

Here's the code:
Code: [Select]
$00/8994 4C 31 FD    JMP $FD31  [$00:FD31]  ;Jump to custom code
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$00/FD31 5A          PHY                     
$00/FD32 FA          PLX                    ;Make sure registers X and Y are not affected by the custom code, in case they're important (They're not used here)
$00/FD33 AD 9E 12    LDA $129E  [$00:129E]   
$00/FD36 29 3F       AND #$3F               ;Observe (only) flags 240 through 245
$00/FD38 C9 20       CMP #$20               ;Is flag 245 set?
$00/FD3A 90 04       BCC $04    [$FD40]     ;If not, skip to next check
$00/FD3C A9 06       LDA #$06               ;If so, load encounter set 6 into A
$00/FD3E 80 1E       BRA $1E    [$FD5E]     ;Jump to end
$00/FD40 C9 10       CMP #$10               ;Is flag 244 set?
$00/FD42 90 04       BCC $04    [$FD48]     ;If not, skip to next check
$00/FD44 A9 05       LDA #$05               ;If so, load encounter set 5 into A
$00/FD46 80 16       BRA $16    [$FD5E]     ;Jump to end
$00/FD48 C9 08       CMP #$08               ;Is flag 243 set?
$00/FD4A 90 04       BCC $04    [$FD50]     ;If not, skip to next check
$00/FD4C A9 04       LDA #$04               ;If so, load encounter set 4 into A
$00/FD4E 80 0E       BRA $0E    [$FD5E]     ;Jump to end
$00/FD50 C9 04       CMP #$04               ;Is flag 242 set?
$00/FD52 90 04       BCC $04    [$FD58]     ;If not, skip to next check
$00/FD54 A9 03       LDA #$03               ;If so, load encounter set 3 into A
$00/FD56 80 06       BRA $06    [$FD5E]     ;Jump to end
$00/FD58 C9 02       CMP #$02               ;Is flag 241 Set?
$00/FD5A 90 02       BCC $02    [$FD5E]     ;If not, then the appropriate encounter set (0 or 1) is already loaded into A, so jump to end
$00/FD5C A9 02       LDA #$02               ;If so, load encounter set 2 into A
$00/FD5E 4C 9A 89    JMP $899A  [$00:899A]  ;Jump back to the rest of the normal routine

By the way, this only uses three of the almost 40 lines of code in FD31-FFBB, so the same could be done for the other world maps if you wanted.

Since the code is all here, I'm going to skip the patch (I have some housework to do today). But I can put up a patch later if anyone wants it - let me know.

855
Final Fantasy IV Research & Development / Re: Event Flag log
« on: May 10, 2014, 01:10:24 PM »
So here's a thing I'm working on: Overworld encounters that are determined by game progress instead of physical location.
This was inspired by ffviii and ix, in which this does happen at certain points, but it has special significance for my hack, where much time will be spent traversing the same terrain - it'll be nice to not have to fight imps at level 25.
I wrote some prototype code this morning and it works like a charm, but I think I still need to work in the bit that tells the game only to do this on the world map and not in locations. I'll post a universal patch when this is complete.

 :edit: typos - I said "is" instead of "ix"and "t8me" instead of "time"