News:

Don't forget to visit the main site! There's lots of helpful docs, patches, and more!

Main Menu

General Help Thread

Started by biospark, November 04, 2016, 08:31:07 PM

Previous topic - Next topic

spiffy

Got it working:



Thanks for the help.

Another triumph for excessive pedantry!  :grin:


Quietus

In short, it's a (usually) small piece of code, that you wish to insert into a ROM to change something. To apply it, see the reply here.

C-Dude

I'm having trouble finding gameplay resources for Fusion.  The main site only has a few published, and none of them are capable of doing what I'm looking for.

Basically, I want to know if anyone has made any ground on one or all of the following notions:

  • Can you force a boss to drop the right upgrade regardless of what you already have?  For instance, can you program Spore Torizo to drop Plasma Beam before you get Space Jump?
  • Can you force a boss to spawn if you already have the upgrade it drops?  Debug mode doesn't allow it, which makes me fretful.
  • Can you force a boss to drop some other kind of upgrade, like an energy tank?
  • Can you create custom clip data to create upgrade pickups for boss-source abilities, such as Wide Beam?

I know several people were working on an open Fusion, including the MAGE sorcerer Biospark. I also know there's been ground gained on unusual item order, such as with the beam splitter and the missile splitter.  But are there any patches or .asm codes floating around that play with the bosses in one or all of the ways mentioned above?

Basically, I'm thinking if you can change what the boss drops, then you can change the item order even if the boss order can't be changed (letting you limit game-breaker abilities like Space Jump until late-game).  If you can make the boss behave with the right item, you can open up boss order for sequence break level design.  If you can get the abilities by clip data pickup (a la Powerbombs/Missiles/ETs), then bosses could be removed completely to make Fusion open-progression.  And of course, if all three are possible... the sky's the limit, right?

Kazuto

Without getting too into it, the event system in Fusion is a pretty large obstacle to overcome. Partly from the fact that the game is designed completely around it, and partly from the fact that there are a lot of triggers to handle adjustments made to it to make certain events progress the way that they do.

That said... there's definitely work being done towards a more open Fusion. :wink:

Just not necessarily much that's public right now, sorry to say.

biospark

Quote from: Kazuto on June 25, 2018, 06:54:50 AM
That said... there's definitely work being done towards a more open Fusion. :wink:

Just not necessarily much that's public right now, sorry to say.
Not sure if you're referring to freedom or some other project. Freedom has already taken care of the first bullet point, though if you allow getting items out of order, you have to find workarounds for event related things, like how to trigger the end game escape. The second bullet is possible, though I don't see how it would be useful (unless you just want to make testing with debug mode easier). The third bullet is possible with a few code changes. The last bullet is possible (since I've done it for the ZM randomizer), but it's a ton of work and I don't plan on repeating it for fusion.

All that being said, I don't plan on releasing the asm for freedom until the project is complete.

C-Dude

Quote from: biospark on June 25, 2018, 12:28:27 PM
Quote from: Kazuto on June 25, 2018, 06:54:50 AM
That said... there's definitely work being done towards a more open Fusion. :wink:

Just not necessarily much that's public right now, sorry to say.
Not sure if you're referring to freedom or some other project. Freedom has already taken care of the first bullet point, though if you allow getting items out of order, you have to find workarounds for event related things, like how to trigger the end game escape. The second bullet is possible, though I don't see how it would be useful (unless you just want to make testing with debug mode easier). The third bullet is possible with a few code changes. The last bullet is possible (since I've done it for the ZM randomizer), but it's a ton of work and I don't plan on repeating it for fusion.

All that being said, I don't plan on releasing the asm for freedom until the project is complete.
Good to know.

I figured the first bullet is the most important, so it's good to know somebody has a working version of it (even if it's not public).  If the event trigger was assigned by the upgrades instead of boss defeats, you could gate the last necessary upgrade behind the others and force the end sequence when it was acquired.  10, 25, 29, 40, 51, 58, 60, 73, 78, 81, 91, and 96 [decimal] are the upgrade events, with 96 calling for the prompt to visit Ops and activate propulsion to drop orbit.  If say Screw Attack was your last necessary upgrade, then the game could be told to go to event 96 when Screw Attack is acquired.  It's not total freedom, but you only have to gate one upgrade instead of all of them.

The second bullet is primarily for changing the order of bosses and upgrades.  If Arachnus only spawns before you have morph ball, then you can't feasibly move it to a later position in the game (because morph ball is such an essential upgrade for early progression).  When paired with the fourth bullet, it'd also let you separate boss positions from upgrade positions for a more spread-out map.  But... maybe that's covered in the third bullet.

Regarding point three... I've got the offsets for the starts of boss AI from a ROM map on Data Crystal, but does anybody have notes on the specifics?  I suppose I could brute-force it, but there's other changes I'd prefer to put my muscle towards if someone else has already walked that road.

As for point four... I guess I'll be looking at the randomizer in a hex editor then!  I expect if I can learn how Fusion does it with power bombs, compare it against the boss AI for which item they drop, and then study how it works in MZM, then perhaps I might be able to cobble something together.  Such would be the biggest roadblock to making a Fusion Randomizer, but perhaps it's a "cart before the horse" situation.


...You're probably wondering why I would even be interested in fighting with Fusion when Zero Mission has more resources and freedom to it.  Well, there are a few reasons.  First is the Diffusion missile: this upgrade has all kinds of level design potential that has yet to be explored, primarily because it's woefully late in item progression and Fusion is the only game that has it.  Second is the event transitions: there's a lot of mischief that can be achieved by conditionally switching out a door's destination room.  Third is the navigation room: many people consider it annoying, but being able to add conversations to the game injects opportunity for drama or comedy, depending on the intent of the hack.  Fourth is the enemies: they're a great deal more interesting than the zebesians we've encountered in three games thus-far... particularly the zombies.  Fifth are the ladders.  And finally there's Samus's sprite: while it's certainly no more cut-up in MZM, it's definitely easier to locate and edit in Fusion.

Anyway, thank you for the information.  I suppose for the time being I'll drudge away at what I can (sprites).  Maybe if I can give a few more options for the main character, interest in Fusion will increase.

biospark

It sounds like freedom would cover your first three bullet points. With the way it's coded, abilities are assigned to bosses. For example, if I assign speed booster to Arachnus, then its core-x will give me speed booster, and it won't spawn if I already have speed booster. You can fight them in any order.

I don't know your experience with asm, but adding custom clipdata for abilities was the most difficult project I ever worked on. I also don't think fusion is well suited for a randomizer, so I don't plan on making one.

C-Dude

Quote from: biospark on June 25, 2018, 05:28:48 PM
It sounds like freedom would cover your first three bullet points. With the way it's coded, abilities are assigned to bosses. For example, if I assign speed booster to Arachnus, then its core-x will give me speed booster, and it won't spawn if I already have speed booster. You can fight them in any order.

I don't know your experience with asm, but adding custom clipdata for abilities was the most difficult project I ever worked on. I also don't think fusion is well suited for a randomizer, so I don't plan on making one.
Oh, that's cool.

I've used other programming languages, but I don't have any experience yet with ASM.  From what I've seen so far, I gather it uses conditionals to directly modify an existing hex value in the game (sort of like how an old gameshark code would work)... which would mean using it would require intimate knowledge of the game's internal works.  It actually looks quite intimidating and I anticipate I'd need to spend years working out how to use it properly.  That's why I thought I'd ask first... no point in putting in all that work if somebody else already did.

Sorry if it sounded like a request.  That was not my intent.  I only wanted to know what the community had already achieved, to see what I might be able to build on.  I'll stick to tilesets for now.

Keaton

Hey this is probably a dumb question :lol: but I'm new to ROM hacking. So you can enable patches in the patches menu but is there a way to disable patches?
For example if you turn on debug menu is there a way to turn it of?
(another ex:if you disable the intro cutscene can you turn it back on?)

biospark

Quote from: Keaton on August 03, 2018, 07:26:51 PM
Hey this is probably a dumb question :lol: but I'm new to ROM hacking. So you can enable patches in the patches menu but is there a way to disable patches?

What you can do is apply the patch to an unedited rom, then create an IPS patch with that rom as the base rom and the unmodified rom as the "changed" rom. This will essentially create an "anti-patch", which you can then apply to your hack.

Keaton

Ok since I'm a noob and haven't gotten gud yet biospark do you know of something that will help me do this like a video or software or something like that?

JumZhu

Quote from: Keaton on August 03, 2018, 08:44:02 PM
Ok since I'm a noob and haven't gotten gud yet biospark do you know of something that will help me do this like a video or software or something like that?
You can find an original rom and put no animation patch on it. The modified rom is the original, the original is the modified one, so the IPS file is produced. The patch obtained in this way can replace the data that was patched in the past.

Keaton

OK I have two questions 1st how do you make custom tiles? 2nd is there a way I can import music from zero mission or no

Cpt.Glitch

1. Create an image of a tileset using an image editor and import it, or create a graphics file and use a program like YY-CHR to create the graphics. Specifics and how to import are found in the documents that came with mage. Please read them.

2. Yes, you can. The program you'd use is called Sappy. Based on my current understanding of your skill level, this may be above you at the moment.

Keaton

Ok I'll stay away from importing music for now I just wanted to know. Thanks  :^_^:

Keaton

Hey guys is there a way to have multiple SA-X in one room?

interdpth

Off the bat, no.
Recoding each Sa-x AI to not use the special Sa-X vars, yes!

VariaPuke

Hi there!  New here, but am genuinely interested in seeing what progress can be/is being made toward eventually pseudo-unlocking Fusion from its plot-based event system.  And with that, there's one main question I want to ask:

In what all ways does Fusion handle the triggering/advancement of the event & subevent counters?  I admit this is a rather broad question, but only because I want to know everything (at least on the surface level; I don't need to know where all the stuff is in hex haha) related to how Fusion (and I guess by extension ZM) handles events and subevents.  For example: Are there instances in the game where Samus simply steps through e.g. a vertical plane to advance the event number, or is it all handled by hardcoded assembly?  Is it possible to have event triggers directly change the event number (instead of just adding +1 to the counter, or however it works)?

Thanks in advance for a response!  And apologies if I seem to be in complete misunderstanding of how any of this works lol I have zero assembly experience

FelixWright

Quote from: VariaPuke on April 04, 2019, 07:52:23 AM[spoiler]
Hi there!  New here, but am genuinely interested in seeing what progress can be/is being made toward eventually pseudo-unlocking Fusion from its plot-based event system.  And with that, there's one main question I want to ask:

In what all ways does Fusion handle the triggering/advancement of the event & subevent counters?  I admit this is a rather broad question, but only because I want to know everything (at least on the surface level; I don't need to know where all the stuff is in hex haha) related to how Fusion (and I guess by extension ZM) handles events and subevents.  For example: Are there instances in the game where Samus simply steps through e.g. a vertical plane to advance the event number, or is it all handled by hardcoded assembly?  Is it possible to have event triggers directly change the event number (instead of just adding +1 to the counter, or however it works)?

Thanks in advance for a response!  And apologies if I seem to be in complete misunderstanding of how any of this works lol I have zero assembly experience
[/spoiler]

Everyone is interested in seeing progress but who is interested in making progress?

Metroid fusion's events run on a linear counter for the 40+ scenarios that occur in the game. As one of these are completed in the order it is supposed to be, and with the correct samus value (because her equipment is set by a different counter) the event counter goes up by 1. This can occur by completing objectives, downloading item data, defeating a boss, or even being at a specific room at the right time (ex: SA-X encounters)

Going by this definition, (source: wikipedia)
QuoteHard coding (also hard-coding or hardcoding) is the software development practice of embedding data directly into the source code of a program or other executable object, as opposed to obtaining the data from external sources or generating it at run-time.
I would say that everything in ZM or MF is hard coded. Also hex tweaks could often be considered assembly work, as assembly hacking is how we generate and share those hex tweaks on the first place. It's easier to say "change this byte in a hex editor to FE 00" than say "at this address write the instruction .org 0x8F008A40
nop"

I can't answer your question about whether or not it is possible to set an arbitrary event value (though I am sure you can but the game won't like it) but I can tell you a solution to the event system is in the works. Stay tuned.

VariaPuke

Quote from: Cosmic on April 04, 2019, 08:19:19 AM
[spoiler]
Everyone is interested in seeing progress but who is interested in making progress?

Metroid fusion's events run on a linear counter for the 40+ scenarios that occur in the game. As one of these are completed in the order it is supposed to be, and with the correct samus value (because her equipment is set by a different counter) the event counter goes up by 1. This can occur by completing objectives, downloading item data, defeating a boss, or even being at a specific room at the right time (ex: SA-X encounters)

Going by this definition, (source: wikipedia)
QuoteHard coding (also hard-coding or hardcoding) is the software development practice of embedding data directly into the source code of a program or other executable object, as opposed to obtaining the data from external sources or generating it at run-time.
I would say that everything in ZM or MF is hard coded. Also hex tweaks could often be considered assembly work, as assembly hacking is how we generate and share those hex tweaks on the first place. It's easier to say "change this byte in a hex editor to FE 00" than say "at this address write the instruction .org 0x8F008A40
nop"

I can't answer your question about whether or not it is possible to set an arbitrary event value (though I am sure you can but the game won't like it) but I can tell you a solution to the event system is in the works. Stay tuned.[/spoiler]

Thanks for your answers!  And admittedly i'm also interested in making progress, but like I said, assembly is beyond me so I doubt i'd ever be able to contribute much lol

Keaton

So in MAGE whenever I set an exit distance to 0 or any other value I always appear inside the door before the door transition clipdata is there any way to fix this? Thanks for response in advance.

Cpt.Glitch

Make the exist distance not 0.

Keaton

Quote from: Cpt.Glitch on July 29, 2019, 02:37:11 PM
Make the exist distance not 0.
Sorry i wasn't clear enough I meant the just the Y exit distance even if it is set to 0 when I go through one of the doors I am stuck inside the door transition block and get stuck in an infinite loop.

Cpt.Glitch

Correct. If it's a vertical door, then make the exit distance not 0. 0 just places you on top of the exit door. If it's a horizontal hatch, modify the X exit distance until you no longer spawn inside the door.