News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Author Topic: Mega Man 3 ROM Hacking questions  (Read 1365 times)


  • Newbie
  • *
  • Posts: 2
    • View Profile
Mega Man 3 ROM Hacking questions
« on: September 23, 2018, 01:16:21 am »
Hello everyone!

I guess this'll be my first post on the forum.

Before I ask my questions: I'm new to ROM hacking and have no prior experience to HEX editing and such.
I'm attempting a ROM hack, building upon Kuja Killer's Mega Man 3 Improvement hack. I've got a bunch of his documents and have tinkered around enough to somewhat familiarize myself with the environment I'm working in.
I've played around with Matrixz MegaFLE X editor, the Tile Layer Pro by SnowBro and YY-CHR by YY just to name a few programs. I learn as I go here.
-Just thought I'd throw it out there before I go on.

I have a couple of brick walls I've run into though, and I thought I'd see if any kind spirits in this community knows of ways around them. I'm actively avoiding a big wall of text here, and since I tend to ramble I'll make a single post of this one thing only... I have other questions aswell, but this will be a big enough insert for now.

Matrixz's Capcom Sprite Assembler only displays the tiles from GFX Set '2F' to me, namely Bank 0 = '11' and Bank 1 = '16'. Temporarily moving tiles to those locations using TM while I'm editing is my current work-around to see what I'm actually doing.

What I'm trying to do now is edit the Flashman Doc Robot boss to display Flashmans sprites from MM2. You can probably see where I'm going here.
The problem is: if I make these edits, Flashman's graphics will be applied to all Doc Robots, so I need a way to assign Doc Flashman to his own sprites.
Here's the info I've been trying to work with:

Info from MegaFLE X Enemy Editor:
  • EnemyID: '68'
  • GFX Set: '2F'
  • Bank 0: '20'
  • Bank 1: '22'
-Ofc. I intend to give him his own two banks at FE and FF. There's plenty of free space within the expanded ROM.

Info from CSA:
  • Sprite Bank: '2A010'
Doc Robot's sprites used by Doc Flashman are:
  • Standing: Sprite '00' at address '8300'(or/and perhaps '01' cause they're identical and share address, and maybe '1D' at address '837C')
  • Shooting: Sprite '02' at address '8304'
  • Jumping: Sprite '03' at address '830A'
  • Walking: Sprite '05' at address '8310'
  ..and perhaps Sprite '06' at address '8316' as he's getting "possessed" by the essence of Flashman.

...What I'm looking at in CSA is the graphics for all Doc Robots, I know.

So, I've copied the Doc Robot tiles to unused space in the CHR bank to build Flashmans unique sprites off of, and hereby are the things that puzzle me:
  • Where is the code for the Sprites?
      How do I copy the Doc Robot Sprite ID's to use as a template?
      How do I tell my new Sprite ID's to use my custom Flashman tiles instead of defaulting to Doc Robot's default tiles?
  • Where is the code for Enemies?
      How do I assign these sprites to be used by the Doc Flashman Enemy ID?
  • And a third thing here: Is the hit/collision "box" of a sprite depending on the size of the sprite, i.e. the tiles that makes up it's size?
Also, if you have any suggestions regarding programs, methods, documentations etc. I'm all ears!

Thanks for reading!
Have a wonderful.. whatever time of day it is.. whatever day it is..

September 23, 2018, 03:27:26 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
Hmmm... Okay, here comes a follow-up post..

I'm with the assumption that a defined object gets coded and assigned a sprite seperately in a nice and tidy fashion, but then this all looks a bit backwards to me...

It would seem to me that (some of) the Doc Robots coding starts at around '8010'.
Looking at Kuja Killers 'Boss Database.rtf'-document, pointers for both Doc Woodman, Doc Crashman and Doc Metalman seem to be fairly adjacent here along with, what I'm assuming, is at least another one of the Doc Robots.
In this higgledy-piggledy hosh-posh back-and-forth mish-mash, they do have seperate sections for AI behavior, (and mostly) seperate calls to - what is described as "Sprite Tile ID's" (walking, shooting, jumping, standing etc.).

..Kuja Killers document continues by mapping out both Doc Airmans and Doc Bubblemans (and I'm also assuming other Doc Robots) pointers being introduced in a loosely braided fashion at, for some reason, around 'A010'.. Why them here(?), I do not know. It appears very scrambled and messy to me. It doesn't provide me with a clear pattern to "decipher".
-Honnestly... I'm a bit lost.

So anyways... "Sprite Tile ID's" point towards the Doc Robot sprites found immediately in the Boss Sprite Bank, '2A010', easily accessed with CSA.
Here are the known calls to the sprites:

838801StandingMetalman, WoodmanAnimated. Don't know why this is shared... Yikes! How many others are like this?
84C005WalkingCrashmanAnimated. Used when the battle starts. Changing this caused Crashman to stand still before I did anything against him.
856905WalkingCrashmanAnimated. I guess this is the regular walking cycle.
858004Shoot in AirCrashmanStatic - one frame only.
876C03JumpMetalmanStatic - one frame only.
87BD1DLandingMetalmanThe value '1D' represents something very similar to '00' & '01' only with a reversed frame order. This only comes into play whenever Metalman has jumped away because you closed in on him.
882004Shoot in AirMetalmanStatic - one frame only. Only used when you close in on him and he tries to jump away from you.
A2C21CShoot in AirBubblemanAnimated.
A58800StandingAirmanThe value '00' is identical to '01'. Why both exist beats me. If the value is changed, Airman always has this sprite whenever not jumping.
A5AE03JumpAirmanStatic - one frame only.
A69601StandingAirmanAnimated. Only after he has jumped once. If changed, Airman always has this sprite whenever not jumping. I don't know if this one is higher prioritized than 'A588' or otherwise.
XXXX02Shoot on GroundVarious Doc Robot MastersAnimated.
XXXX06Standing, FlashingFlashmanAnimated. Used right before Doc Flashman stops time.
XXXX07Standing, BurningHeatmanAnimated. Used right before Doc Heatman transforms into flying fire.
XXXX00/01 (?)Init. PoseAll Doc Robot MastersAs the MM2 Robot Master enters the Doc Robot.

(XXXX) Means they are animation/sprite-variations of the Doc Robots I have not yet stumbled upon for any of them...

I guess what I need to do is:
  1. Locate each call to the Doc Robot sprites.
  2. Somehow seperate the sprites to individual objects (bosses), should they happen to be shared, as with the case of '8388'. :S
  3. Figure out a way to create new entries among the sprites, I guess, in '2A010'...

I have no clue how to handle the two latter ones, but as for the first, I hope there's a good, efficient method do this without spending hours, or possibly days(!) on trial and error-ing.
Changing every '00', '01', '02', '03', '04', '05', '06', '07', '1C' and '1D' between '8010' and, let's just say 'BXXX' just to see if something happens on each one, or more, of the 8 Doc Robots it... sure sounds like a tedious drag to me...
Any ideas and insights would be very much appreciated!

Also, as a side note: I don't know if anyone else stumbled upon this, but I discovered two very strange blunders in the AI..
Apparently, after the initial AI activation, if Megaman is located above, or below Doc Bubbleman when he has landed, he doesn't do anything. His AI is frozen until Megaman arrives at the exact same vertical level as him.
And Doc Crashmans AI doesn't activate if Megaman does not move upon entering his boss chamber. If so, he'll just keep walking back and forth indefinetly.
« Last Edit: September 23, 2018, 03:27:26 pm by knekt »