Quantcast
Channel: nesdev.org
Viewing all articles
Browse latest Browse all 746

Ultimate Air Combat

$
0
0
Hello, first time posting here.

This game is an interesting case and I have not found any references to it in the forums or in the wiki. It was firstly released in NA, later in JAP as Aces: Iron Eagle III and finally in the EU with the original title.

During the combat phase of a mission, it does a PPU_SCROLL update in each of the scanlines 2-127, during HBLANK, in order for the following scanline to trigger a horizontal nametable change at the appropriate time and create the tilted horizon effect. Consequently, it is a very timing sensitive game and prone to visual artifacts if timing is incorrect. An additional timing factor is that the game utilizes the DMC channel for various sound effects during the combat, so the DMC DMA stalls (both individual and while in OAM DMA) must be taken into account.

But that is not the most interesting part, it's the timing synchronization part. Although the game is MMC3 based (Mapper 4), the NA version, which was the first released version, interestingly enough does not have any cart IRQs. It relies on a sprite 0 hit in scanline 1, cycle 249, to synchronize the timing in each frame during the combat. Because the game uses DMC as mentioned above, the PPU_SCROLL accesses may not happen in the exact same cycle in every frame if a DMC playback is taking place at that time.

In the JAP version, for some reason, they decided to replace the sprite 0 hit with a cart IRQ that fires in scanline 1 cycle 261. I presume that's the main reason that PPU_SCROLL accesses have been shifted to later cycles. Now the second PPU_SCROLL access usually happens during the first cycles of the new scanline. That is not a problem, since the horizontal scroll value is loaded in cycle 257 of the previous scanline. The problem is that sometimes, due to DMC DMA, the PPU_SCROLL accesses may get an additional shift, so the first PPU_SCROLL access, which sets fine x, may happen during the first cycles of the scanline. Although the first 8 pixels are clipped, the first access may happen so late that it introduces in a small visual artifact in the beginning of that scanline, as pictured below in scanline 13 (screenshot taken with Mesen).
Aces - Iron Eagle 3 (Japan)_000.png
I searched for footage of this game played on console to crosscheck and found https://www.youtube.com/watch?v=gOfwzGQdsL4. You can see a similar artifact around 1:01:50 mark.

And lastly is the EU version. This version uses a cart IRQ in the same manner as the JAP vesion. At first, I was thinking that there is something terribly wrong with the timing of my emu as this version displayed severe artifacts. Then I noticed that most emus exhibited the same behavior, as pictured below (screenshot taken with Mesen).
Ultimate Air Combat (Europe) (En,Fr,De)_001.png
Performing the same analysis as above, revealed that in this version the PPU_SCROLL accesses happen well within the visible part of a scanline. So either all emus are off with the timing of this particular game or it was horribly ported to the PAL NES. In fact, the artifacts are so severe and out of the ordinary, that I highly doubted that there is something so wrong with a game, especially when there are already two other versions working as intended (minus the minor, sparse, artifacts of the JAP version). Luckily enough, I managed to find footage and it seems that it might actually be a horrible port: https://www.youtube.com/watch?v=oqN_lmOi7Rk.

It would be great if someone could independently confirm the above behavior of the JAP and EU versions and maybe an entry in Game Bugs section of the wiki for those two.

Statistics: Posted by olddog — Fri Sep 06, 2024 3:12 pm — Replies 2 — Views 158



Viewing all articles
Browse latest Browse all 746

Trending Articles