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

Recent Posts

Pages: [1] 2 3 4 5 6 ... 10
There are many threads on the subject. (Please read to the end.)
Help Wanted Ads / Re: CastleVania (nes) level 2 spikes removal.
« Last post by bogaabogaa on Today at 12:43:53 pm »
I am a bit late to the party but if you like to disable a routine you can just return it with a rtl before it will run. Value $60 is the equivalent of that. There are some routines running but if you have no clue just fill the section from NES ROM offset $182eb till 183a3 with the value $60 And then no hurt or animation will be run.
Else I recommend to toy with it in the debugger and see what happen when  you disable them individual. May be you have ideas to use it as decoration or you may get other ideas to do with it.

Hello I just don't know what should I do i can't connect the pipes or the warp on SMB3 i can't understand how pointers work, if you have example for it I appreciate it thank you sorry for bad english.
ROM Hacking Discussion / Re: Super Mario Bros. 2-Player Alternating?
« Last post by FAST6191 on Today at 10:14:53 am »
I would be sort of surprised if such a thing has not been made, though I imagine between straight co-op and the lives thing most are probably content, or will do something like run two instances of an emulator at once and go head to head as it were.

There is a possibility that this could be a fairly easy hack, if not terribly elegant. If you alternate on death then the trick would be to make you die at the end of each level (might be harder for warp zones) and if calling the death function makes you alternate then you have your answer. If it costs you a life then maybe add a bonus life at the start of each level. This you might be able to do with a level editor.

Two main ways I would set about this.
If you put a pit between the flag and the castle does it count, and does it allow you to start the next level?
If you fire the death routine after the timer, fireworks and whatnot happen does it shuffle you over?

Granted if you can alter the latter then you could probably be able to find the alternate character thing and do that instead. Bonus for you is the Super Mario on the NES is one of the most well hacked games with a nice commented disassembly. (warning a bit of a browser grinder)
The death routine starting at 2906 (though the bit you probably want being a bit lower) being something good there. Might be able to go to an end level function (line 1231) and add a bit more/jump to somewhere to add a bit more to do the player swap instead, looks fairly small as well (or at least is a function in the disassembly called TransposePlayers located at line 3004, which means end of level could well have a little JSR to the location of the TransposePlayers thing. You could also NOP (short for no operation) the death swap over if you wanted and have deaths continue until level end or maybe out of lives (haven't checked the code to see what goes but would be worried about a crash or something odd in that scenario).
Re 08 vs 09 in pointers.

The GBA ROM is visible in memory in a few different locations, said locations corresponding to different waitstates for reading (less important stuff then being able to be kicked to lower priority). It is also on exceptionally fast memory so

However the vast majority of GBA games use the 08000000 through 09FFFFFF region.

Traditionally GBA games are 32 megabytes or less (some video ones and some flash carts can exceed this but we will skip that for now, or you can read the video stuff ). This differs to some older devices that had to do tricky things to fit more data in directly accessible memory.

However as ROM was reasonably expensive during the GBA era then the vast vast majority of games are 16 megabytes or less. If you go for pointer level addressing (and the GBA CPU, ROM and everything else does on the GBA) that is between 000000 and FFFFFF to cover the whole area.
This then leads to a popular shorthand that GBA pointers start with 08. In practice it is more like you add 08000000 to the address in the ROM to find the pointer. If you go above 16 megabytes you then end up in the 01000000 through 01FFFFFF range. Add 08000000 to that and you end up with 09000000 through 09FFFFFF or collectively 08000000 through 09FFFFFF for the entire ROM. That is not even a complete workup if you do count the later waitstate stuff, though in practice it will probably still work as most things don't have timings issues.

Not everything will use a direct pointer like that, sometimes things get copied to memory first (including program code), sometimes it will point to the start of a section and then add values to get to the final destination (think first paragraph, second line, third word in normal human pointers, or in the case of games start of the section, here are values to either get to the first, second, third... sentences say, or maybe you get a start and it adds values each time (this 500 to start, add 10 to get to the second, add an additional 15 to get to the third...). This is pointer maths, offset pointers and relative pointers, some of which are less common on the GBA than they are on the DS where would not bet against any appearing in any random game you plucked out to have a look at but I still have GBA examples. You might have even found another such example.
There is also fixed length (common in menus -- no need for the game to play with pointers if it is just new line every 10 bytes or whatever the devs picked) and parsed wherein the game will automatically detect end of line/section and start a new one (just like your PC does when typing and probably what the web browser you are reading this on is doing). Parsed is generally viewed as a waste of resources by programmers (it is not like the game text changes after you burn the ROM) so it is seldom done beyond maybe auto new line, however that you can do with a simple counter as you are fetching data or maybe animating text being written on screen rather than having to check for control bytes.

Random 00 in the middle of data can also be a sign of compression -- some types of LZ will have a control character to say "no compression here" and then have something else when you actually have compression. Though if it is not a fixed distance apart then probably not.
Well if you're up for it, maybe make a version of that program that selectively patches again. Deleting selective patches manually is a pain in the ass.
Really looking forward to trying this, but it seems like neither link for 1.1 is working?
Awesome work guys!  :woot!:
The game is a must-have for tactical RPG fans.
Big applause for all the improvements and additions on SEGA Saturn!
Hello, I'd like to request a translation for PS1 Title called "Tokyo Mew Mew – Tojo Shin Mew Mew! – Minna Issho ni Gohoshi Suru Nyan". It is a Playstation 1 title which is a RPG video game published by Takara released on December 5th, 2002 for the Sony PlayStation. The game is Region Locked, and since there is no knowledge to it existing. I though, it'd be interesting to see it unveil.

I have only experience with one GBA game, but it's my understanding that pointers ending in 09 are for expanded ROMs. So, 58 C8 46 09 would point to offset 0x0146C858, instead of offset 0x0046C858.

Have you checked if there are relative pointers before the text block? In the game I worked with, general pointers ending in 08 only pointed to the whole text block. Then, inside that block, there were relative pointers that led to individual strings.
Pages: [1] 2 3 4 5 6 ... 10