nes-contra-us/docs/Probotector.md

116 lines
4.3 KiB
Markdown

# Overview
This file outlines the differences between _Contra_ (US) and _Probotector_.
_Probotector_ is the PAL-specific variation of the _Contra_ (US) game. Note
that all of the documentation that refers to code or look up table memory
addresses were documented using _Contra_ (US) and may not be identical to the
addresses in _Probotector_. All of the addresses that are used for game logic
are the same. This includes pretty much any address defined in `constants.asm`.
# Differences
There are about 168 differences (#$a8 differences) between _Contra_ (US) and
_Probotector_. Most of these differences are sprites.
## Logic
* When destroying all enemies (cleared screen, defeated boss, or picked up
falcon weapon item), there is an additional check to not update the enemy to the
"enemy destroyed" routine if its HP is 0. This check isn't done in _Contra_
(US). This has no known effective difference in game play.
* There is a useless execution of a function that does nothing but exit in the
`check_for_pause` label.
## Audio
The helicopter sound is not played during the ending animation in _Probotector_.
This is because the helicopter was replaced with a Jet.
## Background
* The introduction screen is completely different in _Probotector_. There is no
scrolling introduction, and Bill and Lance have been replaced with a large
PROBOTECTOR graphic.
* The `level_8_supertile_data` is different between _Probotector_ and _Contra_
(US). 3 super-tiles on the wall in front of the Alien Guardian (enemy type
#$10) in Alien's Lair contain more well-formed shells in _Probotector_. The
shells in _Probotector_ are actually retained from the super-tiles from the
Japanese version.
## Palettes
A few palettes are different, causing the sprites to have been updated to use
a different palette index to maintain the same color as the _Contra_. Some of
the sprites are different colors due to the sprite changes
* Giant boss soldier's (enemy type #$13) spiked projectiles (enemy type #$14)
were changed from blue to gray.
* Enemy bullet color is red rather than white.
* Dragon orbs (enemy type #$15) are red and blue rather than grey and red.
* Ice grenades (enemy type #$11) are gray instead of blue.
* Mining carts (enemy type #$14 and #$15) have black wheels instead of blue.
* Flying capsules (enemy type #$03) on Alien's Lair are pink.
Player invincibility sprite palette pattern for player 2 alternates between red
and gray instead of red and blue like in _Contra_ (US). In _Contra_ (US) both
player 1 and player 2 flash between red and blue when have the B weapon.
## Text
* In the SPECIAL THANKS section of the credits, the to "AC CONTRA TEAM" has been
replaced with "AC TEAM".
* The location of various text on the game over screen and continue screen have
been slightly moved
* GAME OVER
* CONTINUE
* END
* 1 PLAYER
* 2 PLAYERS
* Similarly, the introduction screen cursor locations have been updated to match
the new location of CONTINUE/END.
## Sprites
Many of the sprites were changed to replace humans with robots.
Additionally, some sprite animations were simplified, making many sprites
identical, when they weren't in _Contra_ (US)
* `sprite_27`, `sprite_28`, `sprite_3c` are equal
* `sprite_29` and `sprite_42` are equal
* `sprite_3b` and `sprite_3f` are equal
* `sprite_3d`and `sprite_3e` are equal
* `sprite_93` and `sprite_94` are equal
* `sprite_b7` and `sprite_b8` are equal
* `sprite_bd` and `sprite_be` are equal
* `sprite_cc`, `sprite_cd`, `sprite_ce` are unused in _Probotector_. However,
they do exist and point to `sprite_cf` (ending animation islands).
To accommodate the player sprite changes, the initial location relative to the
center of the player where bullets are generated have been adjusted (see
`bullet_initial_pos_00`).
## Graphics
Below is the list of compressed graphics that are different. I haven't
confirmed, but these differences are most likely just sprite pattern table tile
differences (left pattern table).
* `alt_graphic_data_03`
* `graphic_data_01`
* `graphic_data_02`
* `graphic_data_03`
* `graphic_data_04`
* `graphic_data_05`
* `graphic_data_06`
* `graphic_data_07`
* `graphic_data_08`
* `graphic_data_09`
* `graphic_data_0b`
* `graphic_data_0c`
* `graphic_data_0d`
* `graphic_data_0e`
* `graphic_data_13`
* `graphic_data_15`
* `graphic_data_17`
* `graphic_data_18`
* `graphic_data_19`
* `graphic_data_1a`