infidelity's banner
infidelity's profile picture

infidelity

@infidelity_nes11,271 subscribers

Nintendo rom hacker since 2004. Super Nintendo Developer 2021-present. The OG porter of NES to SNES. Patreon: https://t.co/3n27yyR70y

Videos

infidelity_nes's profile picture

Hello everyone. I've been working every day on my port of Mega Man II SNES 16-BIT. I'd like to showcase the following video, what I have to do in order for the giant BG fish in Bubble Man's stage, to disappear in 16-BIT mode. I like how in Mega Man X, a defeated enemy will have it's image fluctuate from being present on the screen, to not being present on the screen during it's destruction, this happens every other frame. I needed to do something like that in my situation, since I'm using multiple BG layers, and if I simply do what the original 1988 version does, a simple palette fade to blue like the water, the bg image of the fish will still be present. So I've had to create alot of custom asm for the destruction, and non drawing, of the defeated giant bg fish. 1: create new death sequence by modifying the tilemap where the giant fish is located, and alternate it's tileset via a DMA buffer with it's tiles in 1 frame, and blank tiles in another frame 2: at the end of the death sequence, create a flag in ram indicating one of the bg giant fish (there are 2) has been defeated 3: modify the games level construction engine, to read against defeated fish flag to see if it's set, if not, allow the original 16x16 blocks to be drawn, it set, bypass the original 16x16 blocks for bg giant fish and replace with a blank 16x16 block 4: clear defeated bg fish flags when you get a game over, or when bubble man is defeated All of that I've had to code, just for that, heh.

infidelity

23,547 views • 17 days ago

infidelity_nes's profile picture

YO ADRIAN! I DID IT! Update on my TMNT SNES port. This is the most extensive OAM overhaul I've ever done with a port, and I'm damn proud of myself! Lot of reverse engineering with the OG OAM engine, and I was finally able to incorporate a new method of writing to the buffer. This game does some heavy ADC/TAX for OAM buffer rotation to try to work around the sprite flicker. But that ADC/TAX rotation was complicating things for me when I was trying to incorporate a 16-bit index engine. What is also tricky, is that this game uses 8x16 sprites, and what is special on the NES, its hardware creates the bottom 8x8 sprite tile, without the need of the OAM to have it present. You can't do that on the SNES, you have to create that 2nd 8x8 sprite tile within code. The reason this is such a big deal, is before with 8x16 titles i've worked on, I would first simply copy the games original oam buffer to my snes buffer, but that addded alot of extra cpu time, this is present in my Legend of Zelda SNES port. Later ports I've done, I don't do that anymore, I modify the games original storage of OAM values, and send them directly to my custom snes OAM buffer, eliminating extra cpu cycles. So what's the big deal? My method of doing 8x16 sprites, is using my first 256 byte oam buffer for the top 8x8 tile, and my second 256 byte oam buffer for the bottom 8x8 tile. The issue I was having, was errors with sprite priority when sprites overlap each other. I noticed this right away during the dam sequence where the turtles have to disarm the bombs. Here is a before and after my port. Now I can finally move on with the port! 🙂

infidelity

13,377 views • 9 months ago

No more content to load