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'
Info from CSA:
- Sprite Bank: '2A010'
- 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'
...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?
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:
|8388||01||Standing||Metalman, Woodman||Animated. Don't know why this is shared... Yikes! How many others are like this?|
|84C0||05||Walking||Crashman||Animated. Used when the battle starts. Changing this caused Crashman to stand still before I did anything against him.|
|8569||05||Walking||Crashman||Animated. I guess this is the regular walking cycle.|
|8580||04||Shoot in Air||Crashman||Static - one frame only.|
|876C||03||Jump||Metalman||Static - one frame only.|
|87BD||1D||Landing||Metalman||The 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.|
|8820||04||Shoot in Air||Metalman||Static - one frame only. Only used when you close in on him and he tries to jump away from you.|
|A2C2||1C||Shoot in Air||Bubbleman||Animated.|
|A588||00||Standing||Airman||The value '00' is identical to '01'. Why both exist beats me. If the value is changed, Airman always has this sprite whenever not jumping.|
|A5AE||03||Jump||Airman||Static - one frame only.|
|A696||01||Standing||Airman||Animated. 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.|
|XXXX||02||Shoot on Ground||Various Doc Robot Masters||Animated.|
|XXXX||06||Standing, Flashing||Flashman||Animated. Used right before Doc Flashman stops time.|
|XXXX||07||Standing, Burning||Heatman||Animated. Used right before Doc Heatman transforms into flying fire.|
|XXXX||00/01 (?)||Init. Pose||All Doc Robot Masters||As 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.