| |||
Views: 88,482,419 |
Main | FAQ | Uploader | IRC chat | Radio | Memberlist | Active users | Latest posts | Calendar | Stats | Online users | Search | 04-25-24 04:02 PM |
|
Guest: Register | Login |
0 users currently in ROM Hacking | 2 guests | 1 bot |
Main - ROM Hacking - General Megaman Hacking Thread | New thread | New reply |
za909 |
| ||
Cheep-cheep Level: 32 Posts: 135/196 EXP: 189057 Next: 17385 Since: 04-27-11 Last post: 3052 days Last view: 2763 days |
Oh so it's the same as that. Thank you! And so I suppose bullets and stuff like that come after, which only show up as megaman sprites in the editor. |
kuja killer |
| ||
Level: 55 Posts: 295/628 EXP: 1243797 Next: 70392 Since: 03-20-07 From: Lake Havasu City, Arizona Last post: 281 days Last view: 6 days |
objects like bullets, projectiles, anything enemies actually shoot and throw and whatever, or anything changes once an enemy has appeared... no.
The only way to change THOSE...are in those enemies actual own AI code. That 210-30F table is just basically the "default" for when they first spawn on the screen for the first time. |
za909 |
| ||
Cheep-cheep Level: 32 Posts: 137/196 EXP: 189057 Next: 17385 Since: 04-27-11 Last post: 3052 days Last view: 2763 days |
Is this possible?
Now this is just me thinking what I'd like to attempt in the future, and seeing how only Rockman 4 MI was the only hack to do it, it might be a very difficult thing to do (even though it doesn't seem like it) but once I get familiar with 6502 asm, I might try to modify the sound engine to allow DPCM samples (just two very short and basic drums would take less than $1FF bytes). I guess it's possible to move all the pointer and instrument tables in the sound engine to squeeze in the samples to the right place in PRG-ROM. Based on this documentation it would be really easy to set this up, I'd just have to make a fifth similar "channel data checking" routine that handles the data similarly to the other 4 channels. The DMC channel, commonly referred to as the 'PCM' channel, uses two methods of digital audio playback: DMA and RAW. The DMA method is most commonly used. The steps for playback are as follows: 1) Set $4012 (DMC Address Register) to the 64-byte aligned offset within PRG-ROM $C000-FFFF. For instance, if $8E is written here, the sample data will be loaded from ($8E*64)+C000, or $E380. 2) Set $4013 (DMC Length Register) to the length of the sample data. The sample length is defined as (16*x)+1, where x is the value written. 3) Set $4010 (DMC Frequency Register) to whatever 4-bit frequency you desire. 4) Set Bit #4 of $4015 (Channel Control) to 1, enabling the DMC channel. This looks like I could very easily LDA & STA the correct values to these registers. Could it be that easy? |
kuja killer |
| ||
Level: 55 Posts: 296/628 EXP: 1243797 Next: 70392 Since: 03-20-07 From: Lake Havasu City, Arizona Last post: 281 days Last view: 6 days |
Really wish i knew za909... but my lack of anything-music.
but... i want to share something with everyone. http://acmlm.kafuka.org/uploader/get.php?id=4298 If anyone in the near future plans on making a new Rockman 5 hack, take this patch if you want. I expanded, and converted the entire Rockman 5 ROM, to the MMC5 mapper within less than 6 hours. It expands the ROM to 1 MB, and enables battery-backed SaveRAM. Which means, double the amount of programming, and graphics space. The IPS patch is all setup and ready to go for any new rockman 5 hacks in the future. megaman 5 has not been tested, im not sure if it'll work on Megaman 5 roms. |
NARFNra |
| ||
Koopa Level: 25 Posts: 32/114 EXP: 87644 Next: 1976 Since: 02-13-10 From: Texas Last post: 1805 days Last view: 1805 days |
Posted by kuja killer W-woah... I may have to look into Rockman 5 hacking in the future, gosh, I plan to do another one after Memento... Thank you so much! So when you say double the graphics space, how would one be able to access that? |
kuja killer |
| ||
Level: 55 Posts: 299/628 EXP: 1243797 Next: 70392 Since: 03-20-07 From: Lake Havasu City, Arizona Last post: 281 days Last view: 6 days |
Mentioned in the readme.
Graphics now start at 80,010 hex. 80010 to BFFFF is normal background tiles graphics. C0010 to FFFFF is sprites graphics. BG is only allowed to go in 80010 ~ ~ Sprites only allowed to in C0010 ~ ~ |
za909 |
| ||
Cheep-cheep Level: 32 Posts: 139/196 EXP: 189057 Next: 17385 Since: 04-27-11 Last post: 3052 days Last view: 2763 days |
Actually what I asked was stupid from the get-go. Since none of the sound banks are loaded to $C000-$FFFF I could not address the samples with the DMC register, so I'd have to swap everything to load normal stuff to $8000-$BFFF and read from here and I have no idea how to do that now. |
Matrixz |
| ||
Ninji Level: 35 Posts: 208/225 EXP: 266357 Next: 13579 Since: 04-07-07 From: Norway Last post: 3105 days Last view: 1783 days |
Posted by za909 If you have enough space in the last $4000-byte bank of the PRG-ROM, you could place them there and play them back. That bank is always placed in memory $C000-$FFFF. DPCM samples must actually be in a bank which is not swapped until its finished playing.. because the NES CPU goes back to do other things, but at certain intervals, reads more data from the sample as its being played. About the registers, you only need to write the correct data to registers $4010-$4013 and $4015. The NES will play back the sample on its own. Its that simple. |
za909 |
| ||
Cheep-cheep Level: 32 Posts: 140/196 EXP: 189057 Next: 17385 Since: 04-27-11 Last post: 3052 days Last view: 2763 days |
Well yeah, that's why I'd only put samples in the same bank as the sound engine or duplicate them and have them in both of the other two sound banks. I'd be more than willing to sacrifice song data space for the engine code and just $1B2 bytes of samples. But unfortunately none of them are loaded in the $C000-$FFFF range and I suppose the actual game stuff uses that, that's why I said I'd have to edit every single instruction that reads from PRG-ROM and swap the "workspace" for the game program and the music banks. Or maybe there's a bank in the correct range that's always loaded? |
Matrixz |
| ||
Ninji Level: 35 Posts: 209/225 EXP: 266357 Next: 13579 Since: 04-07-07 From: Norway Last post: 3105 days Last view: 1783 days |
Yes, the last bank of the ROM is always loaded into $C000-$FFFF. For the Mega Man 3 rom, it's the one at $3C010 to $4000F. What i meant in my previous post is.. if you can locate any free space there, you can use it for DPCM samples. I don't know about MM3, but i know Megaman 4 has lots of continous, unused space in the same kind of location of the ROM. |
za909 |
| ||
Cheep-cheep Level: 32 Posts: 141/196 EXP: 189057 Next: 17385 Since: 04-27-11 Last post: 3052 days Last view: 2763 days |
Alright, well my idea is to play back a TAS run with the trace logger on to see which parts are unused because there aren't any fields of $00s so if anything, it's unused junk data (I don't have any kind of disassembly for the game) But I'm not sure if that stuff is the same in the Rockman 3 version too.
EDIT: Yes, according to THIS, there's $261 bytes of unused junk at $3F32E - $3F58F ($F31E - $F57F in RAM) and that's even a bit more than I need for my samples, so it's just a matter of diving into asm a bit more, thanks for helping me out! Actually, once my sample finished playing, can I play the next one (whether it's the same or the other one) by simply updating the register values, or do I need to disable the channel and re-enable it? |
Matrixz |
| ||
Ninji Level: 35 Posts: 210/225 EXP: 266357 Next: 13579 Since: 04-07-07 From: Norway Last post: 3105 days Last view: 1783 days |
When you start playing a new sample, you need to enable its bit by writing to $4015. Actually, if you want to cancel a playing sample and start a new one, you first disable the bit in $4015, then update registers $4010-$4013, and then enable the bit again through $4015.
|
za909 |
| ||
Cheep-cheep Level: 32 Posts: 142/196 EXP: 189057 Next: 17385 Since: 04-27-11 Last post: 3052 days Last view: 2763 days |
I'm terribly sorry for turning this topic into a programming board and for constantly asking stupid little things.
I won't have enough time to rewrite everything, I'm just thinking, if this is the right way to start, built into the engine later of course. According to the disassembly, $F2 and $F3 in RAM tells which bank was swapped to $8000-$9FFF and $A000-$BFFF by the MMC3 but it's never read. Kuja killer if you could confirm that, and maybe tell me if there are any more unused zero page offsets, it would help a lot.
|
kuja killer |
| ||
Level: 55 Posts: 300/628 EXP: 1243797 Next: 70392 Since: 03-20-07 From: Lake Havasu City, Arizona Last post: 281 days Last view: 6 days |
I really wish I actually had a RAM Map document for mm3, but I don't.
I do... but it's only Odyssey. And soooo so so much is drastically different compared to an mm3 rom. That very little is left of it. But... yes, F2 and F3 is unused and can be used for whatever you want. In my RAM notes for odyssey, i used F2 and F3 as apart of my custom "game time/play time" counters, not mmc3 stuff. So you can use those. Other unused RAM slots: 5B, 5C, 63, 68, 6C, 74, 7E and others. Just a warning one more time, this is based on Odyssey, not un-modified mm3. So if any of those happen to actually be used, take caution. Im not going to spend a long time searching the rom myself trying to see if they are all "maybe" used somewhere. ------------------- Also about F2 and F3, make sure to delete any traces of those that existed originally in the rom. it should only be in the bankswap routine somewhere near the very end of the rom only. Just replace those STA $F2 and F3's with "NOP" ... hex code EA |
Insectduel |
| ||
Hammer Brother Level: 68 Posts: 757/1069 EXP: 2687589 Next: 41211 Since: 02-16-08 From: Insectduel's office Last post: 1256 days Last view: 1255 days |
I never thought Yosaku was active again with his continued project! I just checked Rockman 4 STH today!
Also for Mega Man IV fans, you guys ever want to code a feature like Fast Scrolling, Haikei, and Effect Enemy EX in your Mega Man IV game, you just ask me and I'll insert it by hand with the .ASM file free of charge. It depends how much space you have in your MM4 rom. I'll be forking these 2 codes except Haikei which is broken into RHDN. And, I think Rockman 1 needs more features in level header banks like visine such as changing graphics in doors open and close because Rock n' roll don't have that or even set door GFX positions! Last time in my MM1 project, I got Bombman stage door GFX positioned like other stages instead of upwards. |
Zieldak |
| ||
Crow Level: 42 Posts: 50/387 EXP: 512350 Next: 9012 Since: 12-01-11 From: Hungary Last post: 1310 days Last view: 1201 days |
I'm asking for a little help, huh.
I think some of you read in the MMR Progress Thread, I want to make the boss halls shorter before the boss rooms, like in MM2-10 and in other games. I have a small problem with it. I shortened the scroll data by 2 rooms for every levels and replaced the doors to be on the next screen after the first door. (except Elec Man's and Bomb Man's doors.) When I die at a boss, and go back to the end checkpoint, for some reasons, the scrolling will be like the original, it will go forward for 3 screens then it scrolls to an empty boss room, but it should be only 1 room with an openable door and after it, the boss room. Any advice, information or help on fixing it? |
NetSplit |
| ||
Level: 32 Posts: 166/178 EXP: 188019 Next: 18423 Since: 02-26-07 Last post: 2216 days Last view: 2141 days |
Zieldak: Like I just posted in Googie's thread, you have to keep your checkpoint data synced up with your changes to scrolling and enemy data. This is covered in this post. It sounds like you just shortened the 3 screen corridor to 1 screen, but because you didn't change the table at $15422 that contains the last screen in the corridor, the game will ignore that change when starting at the checkpoint in that corridor. Either update that table or change $150F7 to 4CF690 in order to ignore that table entirely and use a correct value that is automatically calculated, instead. Depending on what all you've changed, you might have to do more than just adjust that table, but this will probably get you at least part of the way there. If it's a bug that happens only after you've started at a checkpoint, you almost certainly need to change one of the checkpoint tables. |
Zieldak |
| ||
Crow Level: 42 Posts: 52/387 EXP: 512350 Next: 9012 Since: 12-01-11 From: Hungary Last post: 1310 days Last view: 1201 days |
Thanks NetSplit, I forgot about those notes.
And... I can't beleive this. Everything what I should have done is changing 4 freaking bytes in the data to make it work! It isn't even hard, is it? It seems I still have to learn a lot, huh. Everything is fully functioning as it should, thanks again! |
Insectduel |
| ||
Hammer Brother Level: 68 Posts: 767/1069 EXP: 2687589 Next: 41211 Since: 02-16-08 From: Insectduel's office Last post: 1256 days Last view: 1255 days |
I need to ask something about Mega Man / Rockman 1.
I created an ASM boss rush stage of Wily 4 and the coding is switched into a free slot than the original slot so I can fit the screen number, and boss numbers in one (or maybe) two levels. How do special objects work and I'm talking about 01. Whenever I defeat the rematch boss, the 01 special block won't clear and stays solid. Can you tell me what the problem is! |
Zieldak |
| ||
Crow Level: 42 Posts: 58/387 EXP: 512350 Next: 9012 Since: 12-01-11 From: Hungary Last post: 1310 days Last view: 1201 days |
That happened for me too once when I started hacking. I deleted the lift from the stage and that caused it. But replacing it didn't fix the problem.
I don't know how to fix it. Maybe NetSplit can say something about it. |
Main - ROM Hacking - General Megaman Hacking Thread | New thread | New reply |
© 2005-2023 Acmlm, blackhole89, Xkeeper et al. |
MySQL - queries: 107, rows: 147/147, time: 0.038 seconds. |