diff --git a/.gitignore b/.gitignore index f99d307..ced9e07 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ *.deb *.nes *.prg -*.bin \ No newline at end of file +*.bin +src/assets/asset-game-type.txt \ No newline at end of file diff --git a/README.md b/README.md index 2559c65..5beaf6e 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,14 @@ Falcon](https://www.romhacking.net/hacks/2701/) project. ``` # Building +In addition to _Contra_ (US), this repo can also build the _Probotector_ rom. +To keep instructions simple, the section below only contains instructions for +building _Contra_ (US). + +If you are interested in building a _Probotector_ rom file, first read this +section to understand what is needed, then follow the instructions in the +section titled _Probotector_. + ## Prerequisites * This repo does not include all assets (graphics data and audio data) necessary for assembling the ROM. An existing copy of the game is required. @@ -43,11 +51,11 @@ There are 3 build scripts in this repository. All of them do the same thing. To build the resulting .nes rom file, simply execute the appropriate build script based on your environment. -``` -.\build.ps1 <-- Windows -.\build.bat <-- Windows (no PowerShell) -./build.sh <-- Unix -``` +| Environment | Command | +|-------------------------|---------------| +| Windows | `.\build.ps1` | +| Windows (no PowerShell) | `.\build.bat` | +| Mac/Unix/Linux | `./build.sh` | * `build.ps1` - PowerShell script recommended for building on Windows machines. Some users have reported needing to run the script as admin to access the @@ -216,6 +224,36 @@ exactly as the _Contra_ (US) ROM. However, this was just the prerequisite to documenting the codebase. Every label had to be given an appropriate name, and each line of assembly had to be documented. +# Probotector +This repo can also produce a _Probotector_ rom file. _Probotector_ is the +PAL-specific variation of the _Contra_ (US) game. It is mostly identical except +different sprites. For a full list of differences, see the document +`docs/Probotector.md`. + +## Building + +First read the section above for building _Contra_ (US) in general. The process +is very similar. Place a _Probotector_ rom in the root folder with the name +`baserom.nes`. It should have a MD5 hash of `7127F616C13B58087481DD9E93AEB2FF`. + +Then, depending on your environment, run one of the following commands. + +| Environment | Command | +|-------------------------|---------------------------------| +| Windows | `.\build.ps1 -Game Probotector` | +| Windows (no PowerShell) | `.\build.bat Probotector` | +| Mac/Unix/Linux | `./build.sh Probotector` | + +Notes of caution, especially for people building both _Contra_ (US) and +_Probotector_. + +1. Be sure you have the correct `baserom.nes` for the game you are building. +Otherwise, the generated rom will be incorrect. +2. If you have _Contra_ (US) assets in the `/src/assets/` folder and are +building _Probotector_, or vice versa, the build scripts will delete the graphic +asset data and re-extract it from the `baserom.nes`. This prevents accidentally +using the wrong game's assets in the result rom. + # Build Details The build scripts accomplish the following tasks: diff --git a/build.bat b/build.bat index 38d687a..d555009 100644 --- a/build.bat +++ b/build.bat @@ -1,13 +1,27 @@ @echo off rem Assembles and links the source assemblies into a .nes ROM. -rem Run this script from the windows command prompt. -rem If desired, there is also a build.ps1 powershell script -rem that can be used as well. +rem Run this script from the windows command prompt if you do not have access to +rem PowerShell. This script does not do some hashing validation that PowerShell +rem can. -IF EXIST contra.nes ( - echo Deleting contra.nes. - del contra.nes +SET ROM_NAME="contra.nes" +SET DBG_NAME="contra.dbg" +SET ASSETS_NAME=assets.txt +SET ASSET_GAME_TYPE=src\assets\asset-game-type.txt +SET GAME="%1" + +IF %GAME% == "Probotector" ( + SET ROM_NAME="probotector.nes" + SET DBG_NAME="probotector.dbg" + SET ASSETS_NAME=probotector-assets.txt +) ELSE ( + SET GAME="Contra" +) + +IF EXIST %ROM_NAME% ( + echo Deleting %ROM_NAME%. + del %ROM_NAME% ) IF NOT EXIST "obj" ( @@ -23,26 +37,47 @@ IF NOT EXIST baserom.nes ( echo No baserom.nes file found. If assets are missing, then the build will fail. ) -rem show commands run in output -echo Assembling PRG Rom Banks +rem used to know which assets were last build +SET LAST_BUILD_TYPE="Contra" +IF EXIST %ASSET_GAME_TYPE% ( + SET /p LAST_BUILD_TYPE=<%ASSET_GAME_TYPE% +) -rem loop through assets defined in assets.txt and extract bytes from baserom.nes +rem If the assets are from a different game, then delete them +rem For example, if the assets were extracted from Contra and currently building +rem Probotector, then delete the assets and extract them from the Probotector baserom.nes +IF NOT %LAST_BUILD_TYPE% == %Game% ( + echo Removing graphic asset files + del src\assets\graphic_data\*.bin +) + +rem loop through assets defined in assets.txt (or probotector-assets.txt) and extract bytes from baserom.nes echo Extracting binary data from baserom.nes -for /f "tokens=1,2,3 delims= " %%i in (assets.txt) do ( +for /f "tokens=1,2,3 delims= " %%i in (%ASSETS_NAME%) do ( cscript /nologo set_bytes.vbs %%j %%k %%i ) +rem Store game type that the assets are for +IF EXIST %ASSET_GAME_TYPE% ( + del %ASSET_GAME_TYPE% +) + +echo %GAME%>%ASSET_GAME_TYPE% + +rem show commands run in output +echo Assembling PRG Rom Banks + @echo on -ca65 -g --debug-info -o obj\constants.o src\constants.asm -ca65 -g --debug-info -o obj\ines_header.o src\ines_header.asm -ca65 -g --debug-info -o obj\bank0.o src\bank0.asm -ca65 -g --debug-info -o obj\bank1.o src\bank1.asm -ca65 -g --debug-info -o obj\bank2.o src\bank2.asm -ca65 -g --debug-info -o obj\bank3.o src\bank3.asm -ca65 -g --debug-info -o obj\bank4.o src\bank4.asm -ca65 -g --debug-info -o obj\bank5.o src\bank5.asm -ca65 -g --debug-info -o obj\bank6.o src\bank6.asm -ca65 -g --debug-info -o obj\bank7.o src\bank7.asm +ca65 -D %GAME% --debug-info -o obj\constants.o src\constants.asm +ca65 -D %GAME% --debug-info -o obj\ines_header.o src\ines_header.asm +ca65 -D %GAME% --debug-info -o obj\bank0.o src\bank0.asm +ca65 -D %GAME% --debug-info -o obj\bank1.o src\bank1.asm +ca65 -D %GAME% --debug-info -o obj\bank2.o src\bank2.asm +ca65 -D %GAME% --debug-info -o obj\bank3.o src\bank3.asm +ca65 -D %GAME% --debug-info -o obj\bank4.o src\bank4.asm +ca65 -D %GAME% --debug-info -o obj\bank5.o src\bank5.asm +ca65 -D %GAME% --debug-info -o obj\bank6.o src\bank6.asm +ca65 -D %GAME% --debug-info -o obj\bank7.o src\bank7.asm @echo off rem link assemblies together to single .nes ROM @@ -50,5 +85,5 @@ rem link assemblies together to single .nes ROM echo "Creating .nes ROM" @echo on -ld65 -C contra.cfg --dbgfile contra.dbg .\obj\constants.o .\obj\ines_header.o .\obj\bank0.o .\obj\bank1.o .\obj\bank2.o .\obj\bank3.o .\obj\bank4.o .\obj\bank5.o .\obj\bank6.o .\obj\bank7.o -o contra.nes +ld65 -C contra.cfg --dbgfile %DBG_NAME% .\obj\constants.o .\obj\ines_header.o .\obj\bank0.o .\obj\bank1.o .\obj\bank2.o .\obj\bank3.o .\obj\bank4.o .\obj\bank5.o .\obj\bank6.o .\obj\bank7.o -o %ROM_NAME% @echo off \ No newline at end of file diff --git a/build.ps1 b/build.ps1 index c59f504..46204ee 100644 --- a/build.ps1 +++ b/build.ps1 @@ -2,8 +2,23 @@ # Run this script from powershell if available, if not available use build.bat # batch file from the windows command prompt. +# Contra = [Default] US NES version +# Probotector = European NES version +param([String]$Game='Contra') + $global:SOURCE_CONTRA = $null -$US_CONTRA_HASH = "1C747C78C678F14A68D4E5FCAE065298A103F833638775860F0E5C5FFAA061F62D45FD8942148B1507C1FD57FDE950A5D83F9F84A9782EC048A56067740C48E9" +$GAME_HASH = "1C747C78C678F14A68D4E5FCAE065298A103F833638775860F0E5C5FFAA061F62D45FD8942148B1507C1FD57FDE950A5D83F9F84A9782EC048A56067740C48E9" +$ROM_NAME = "contra.nes" +$DBG_NAME = "contra.dbg" +$ASSETS_NAME = "assets.txt" +$ASSET_GAME_TYPE = "src\assets\asset-game-type.txt" + +IF ($Game -ceq "Probotector") { + $ROM_NAME = "probotector.nes" + $DBG_NAME = "probotector.dbg" + $GAME_HASH = "A4BDA4572EC8A3F520DEB4BF483510F6E41ED7665505850D22EC07CA1B25ABFF40B3368A27ECE982EA6E9C71A1B698EB2ADD16C26A7AD67DBA3C0A98C4E2BA43" + $ASSETS_NAME = "probotector-assets.txt" +} <# .SYNOPSIS @@ -29,7 +44,7 @@ function Set-Bytes { } Write-Output " Writing file $Output." - + IF ($PSVersionTable.PSVersion.Major -ge 6) { $global:SOURCE_CONTRA | Select-Object -Skip $Skip -First $Take | Set-Content $Output -AsByteStream } ELSE { @@ -37,9 +52,9 @@ function Set-Bytes { } } -IF (Test-Path -Path "contra.nes") { - Write-Output "Deleting contra.nes." - Remove-Item -Path "contra.nes" +IF (Test-Path -Path $ROM_NAME) { + Write-Output "Deleting $ROM_NAME." + Remove-Item -Path $ROM_NAME } IF (-not (Test-Path -Path "obj")) { @@ -55,18 +70,39 @@ IF (-not (Test-Path -Path "baserom.nes")) { Write-Output "No baserom.nes file found. If assets are missing, then the build will fail." } ELSE { $SHA512_HASH = (Get-FileHash baserom.nes -Algorithm SHA512).Hash - IF ($SHA512_HASH -ne $US_CONTRA_HASH) { + IF ($SHA512_HASH -ne $GAME_HASH) { Write-Warning "baserom.nes file integrity does NOT match expected result." } } -# loop through assets defined in assets.txt and extract bytes from baserom.nes +# used to know which assets were last build +$LAST_BUILD_TYPE = "Contra" +IF (Test-Path $ASSET_GAME_TYPE) { + $LAST_BUILD_TYPE = Get-Content $ASSET_GAME_TYPE -Raw +} + +# If the assets are from a different game, then delete them +# For example, if the assets were extracted from Contra and currently building +# Probotector, then delete the assets and extract them from the Probotector baserom.nes +IF ($LAST_BUILD_TYPE -ne $Game) { + Write-Output "Removing graphic asset files" + Remove-Item -Path src\assets\graphic_data\* -Include *.bin +} + +# loop through assets defined in assets.txt (or probotector-assets.txt) and extract bytes from baserom.nes Write-Output "Extracting binary data from baserom.nes" -ForEach ($line in Get-Content -Path assets.txt) { +ForEach ($line in Get-Content -Path $ASSETS_NAME) { $tokens = -split $line Set-Bytes -Skip $tokens[1] -Take $tokens[2] -Output $tokens[0] } +# Store game type that the assets are for +IF (Test-Path $ASSET_GAME_TYPE) { + Remove-Item -Path $ASSET_GAME_TYPE +} + +$Game | Set-Content -Path $ASSET_GAME_TYPE -NoNewline + # prevent write race condition Start-Sleep -Milliseconds 100 @@ -74,16 +110,16 @@ Write-Output "Assembling PRG Rom Banks" # show commands run in output Set-PSDebug -Trace 1 -ca65 -g --debug-info -o obj\constants.o src\constants.asm -ca65 -g --debug-info -o obj\ines_header.o src\ines_header.asm -ca65 -g --debug-info -o obj\bank0.o src\bank0.asm -ca65 -g --debug-info -o obj\bank1.o src\bank1.asm -ca65 -g --debug-info -o obj\bank2.o src\bank2.asm -ca65 -g --debug-info -o obj\bank3.o src\bank3.asm -ca65 -g --debug-info -o obj\bank4.o src\bank4.asm -ca65 -g --debug-info -o obj\bank5.o src\bank5.asm -ca65 -g --debug-info -o obj\bank6.o src\bank6.asm -ca65 -g --debug-info -o obj\bank7.o src\bank7.asm +ca65 -D $Game --debug-info -o obj\constants.o src\constants.asm +ca65 -D $Game --debug-info -o obj\ines_header.o src\ines_header.asm +ca65 -D $Game --debug-info -o obj\bank0.o src\bank0.asm +ca65 -D $Game --debug-info -o obj\bank1.o src\bank1.asm +ca65 -D $Game --debug-info -o obj\bank2.o src\bank2.asm +ca65 -D $Game --debug-info -o obj\bank3.o src\bank3.asm +ca65 -D $Game --debug-info -o obj\bank4.o src\bank4.asm +ca65 -D $Game --debug-info -o obj\bank5.o src\bank5.asm +ca65 -D $Game --debug-info -o obj\bank6.o src\bank6.asm +ca65 -D $Game --debug-info -o obj\bank7.o src\bank7.asm Set-PSDebug -Trace 0 @@ -91,16 +127,16 @@ Set-PSDebug -Trace 0 Write-Output "Creating .nes ROM" Set-PSDebug -Trace 1 -ld65 -C contra.cfg --dbgfile contra.dbg .\obj\constants.o .\obj\ines_header.o .\obj\bank0.o .\obj\bank1.o .\obj\bank2.o .\obj\bank3.o .\obj\bank4.o .\obj\bank5.o .\obj\bank6.o .\obj\bank7.o -o contra.nes +ld65 -C contra.cfg --dbgfile $DBG_NAME .\obj\constants.o .\obj\ines_header.o .\obj\bank0.o .\obj\bank1.o .\obj\bank2.o .\obj\bank3.o .\obj\bank4.o .\obj\bank5.o .\obj\bank6.o .\obj\bank7.o -o $ROM_NAME # compare assembled ROM hash to expected hash if file exists Set-PSDebug -Trace 0 -IF (Test-Path -Path "contra.nes") { - $SHA512_HASH = (Get-FileHash contra.nes -Algorithm SHA512).Hash +IF (Test-Path -Path $ROM_NAME) { + $SHA512_HASH = (Get-FileHash $ROM_NAME -Algorithm SHA512).Hash - IF ($SHA512_HASH -eq $US_CONTRA_HASH) { + IF ($SHA512_HASH -eq $GAME_HASH) { Write-Output "File integrity matches." } ELSE { Write-Warning "File integrity does NOT match." } -} +} \ No newline at end of file diff --git a/build.sh b/build.sh index a544d4f..58023a4 100644 --- a/build.sh +++ b/build.sh @@ -4,8 +4,33 @@ # Run this script from a bash terminal if on linux or mac. # If you are on windows, use either build.ps1, or build.bat +GAME="$1" +GAME_HASH="1c747c78c678f14a68d4e5fcae065298a103f833638775860f0e5c5ffaa061f62d45fd8942148b1507c1fd57fde950a5d83f9f84a9782ec048a56067740c48e9" +ROM_NAME="contra.nes" +DBG_NAME="contra.dbg" +ASSETS_NAME="assets.txt" +ASSET_GAME_TYPE="src/assets/asset-game-type.txt" -us_contra_hash=1c747c78c678f14a68d4e5fcae065298a103f833638775860f0e5c5ffaa061f62d45fd8942148b1507c1fd57fde950a5d83f9f84a9782ec048a56067740c48e9 +if [[ "$GAME" == "Probotector" ]] +then + ROM_NAME="probotector.nes" + DBG_NAME="probotector.dbg" + GAME_HASH="a4bda4572ec8a3f520deb4bf483510f6e41ed7665505850d22ec07ca1b25abff40b3368a27ece982ea6e9c71a1b698eb2add16c26a7ad67dba3c0a98c4e2ba43" + ASSETS_NAME="probotector-assets.txt" +else + GAME="Contra" +fi + +# function to check between different available hash functions +# mac doesn't come with sha512sum by default, but includes shasum +romHasher() { + if command -v sha512sum &> /dev/null + then + sha512sum $1 + else + shasum -a 512 $1 + fi +} setBytes(){ if test -f $3 @@ -25,10 +50,10 @@ fi mkdir -p obj -if test -f "contra.nes" +if test -f ROM_NAME then - echo "Deleting contra.nes." - rm contra.nes + echo "Deleting ${ROM_NAME}." + rm ROM_NAME fi if test -f "obj/*.o" @@ -41,14 +66,30 @@ if ! test -f "baserom.nes" then echo "No baserom.nes file found. If assets are missing, then the build will fail." else - ROM_HASH=$(sha512sum baserom.nes | awk '{print $1}') - if [[ "$ROM_HASH" != $us_contra_hash ]] + ROM_HASH=$(romHasher baserom.nes | awk '{print $1}') + if [[ "$ROM_HASH" != "$GAME_HASH" ]] then echo "baserom.nes file integrity does NOT match expected result." fi fi -# loop through assets defined in assets.txt and extract bytes from baserom.nes +# used to know which assets were last build +LAST_BUILD_TYPE="Contra" +if test -f $ASSET_GAME_TYPE +then + LAST_BUILD_TYPE=`cat $ASSET_GAME_TYPE` +fi + +# If the assets are from a different game, then delete them +# For example, if the assets were extracted from Contra and currently building +# Probotector, then delete the assets and extract them from the Probotector baserom.nes +if [[ "$LAST_BUILD_TYPE" != "$GAME" ]] +then + echo "Removing graphic asset files" + rm src/assets/graphic_data/*.bin +fi + +# loop through assets defined in assets.txt (or probotector-assets.txt) and extract bytes from baserom.nes echo "Extracting binary data from baserom.nes" while read -r line || [ -n "$p" ] do @@ -61,26 +102,28 @@ do setBytes $start $length $file done < assets.txt +echo "$GAME" > $ASSET_GAME_TYPE + echo "Assembling PRG Rom Banks" -ca65 -g --debug-info -o obj/constants.o src/constants.asm -ca65 -g --debug-info -o obj/ines_header.o src/ines_header.asm -ca65 -g --debug-info -o obj/bank0.o src/bank0.asm -ca65 -g --debug-info -o obj/bank1.o src/bank1.asm -ca65 -g --debug-info -o obj/bank2.o src/bank2.asm -ca65 -g --debug-info -o obj/bank3.o src/bank3.asm -ca65 -g --debug-info -o obj/bank4.o src/bank4.asm -ca65 -g --debug-info -o obj/bank5.o src/bank5.asm -ca65 -g --debug-info -o obj/bank6.o src/bank6.asm -ca65 -g --debug-info -o obj/bank7.o src/bank7.asm +ca65 -D $GAME --debug-info -o obj/constants.o src/constants.asm +ca65 -D $GAME --debug-info -o obj/ines_header.o src/ines_header.asm +ca65 -D $GAME --debug-info -o obj/bank0.o src/bank0.asm +ca65 -D $GAME --debug-info -o obj/bank1.o src/bank1.asm +ca65 -D $GAME --debug-info -o obj/bank2.o src/bank2.asm +ca65 -D $GAME --debug-info -o obj/bank3.o src/bank3.asm +ca65 -D $GAME --debug-info -o obj/bank4.o src/bank4.asm +ca65 -D $GAME --debug-info -o obj/bank5.o src/bank5.asm +ca65 -D $GAME --debug-info -o obj/bank6.o src/bank6.asm +ca65 -D $GAME --debug-info -o obj/bank7.o src/bank7.asm echo "Creating .nes ROM" -ld65 -C contra.cfg --dbgfile contra.dbg ./obj/constants.o ./obj/ines_header.o ./obj/bank0.o ./obj/bank1.o ./obj/bank2.o ./obj/bank3.o ./obj/bank4.o ./obj/bank5.o ./obj/bank6.o ./obj/bank7.o -o contra.nes +ld65 -C contra.cfg --dbgfile $DBG_NAME ./obj/constants.o ./obj/ines_header.o ./obj/bank0.o ./obj/bank1.o ./obj/bank2.o ./obj/bank3.o ./obj/bank4.o ./obj/bank5.o ./obj/bank6.o ./obj/bank7.o -o $ROM_NAME -if test -f "contra.nes" +if test -f $ROM_NAME then # compare assembled ROM hash to expected hash - ROM_HASH=$(sha512sum contra.nes | awk '{print $1}') - if [[ "$ROM_HASH" == $us_contra_hash ]] + ROM_HASH=$(romHasher $ROM_NAME | awk '{print $1}') + if [[ "$ROM_HASH" == "$GAME_HASH" ]] then echo "File integrity matches." else diff --git a/docs/Enemy Glossary.md b/docs/Enemy Glossary.md index e06681e..4411390 100644 --- a/docs/Enemy Glossary.md +++ b/docs/Enemy Glossary.md @@ -854,7 +854,8 @@ These 4 enemy types are very similar. They differ in the direction they fire ### 13 - Giant Boss Soldier -* Other Names: Gordea, Giant Boss Robot, Giant Armored Soldier, Boss Giant +* Other Names: Gordea, JJ, Jumping Joey, Giant Boss Robot, Giant Armored + Soldier, Boss Giant No attributes exist for this enemy. diff --git a/docs/Graphics Documentation.md b/docs/Graphics Documentation.md index a645412..b71767a 100644 --- a/docs/Graphics Documentation.md +++ b/docs/Graphics Documentation.md @@ -117,35 +117,37 @@ The PPU Address ranges are specified in interval notation. * The parentheses () represent 'open interval' and are not included in the range -| Label Name | Bank | Label In-Memory Address | PRG ROM Address | Graphics Data | PPU Addresses | Comments | -|-------------------|------|-------------------------|-----------------|-----------------------------------------|------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------| -| `graphic_data_00` | 7 | $cb36 | $1cb36 | Both nametables + Both Attribute tables | [$2000-$2800) | Sets all Nametable + Attribute table data to #$00 | -| `graphic_data_01` | 4 | $aa2d | $12a2d | Left and Right Pattern tables | [$0ce0-$1f80) | Used for intro screen, level title screens, and game over screens | -| `graphic_data_02` | 2 | $9097 | $9097 | Nametable 0 + Attribute table 0 | [$2000-$2400) | Used for intro screen | -| `graphic_data_03` | 4 | $8001 | $10001 | Left Pattern table | [$0000-$0680) | Used in every level. Contains Bill and Lance blocks, game over letters, lives medals, power-ups (SBFLRM), and explosions | -| `graphic_data_04` | 4 | $85ae | $105ae | Left Pattern table | [$0680-$08c0) | | -| `graphic_data_05` | 5 | $8001 | $14001 | Left and Right Pattern tables | [$09a0-$0a80), [$0dc0-$1200), [$1320-$1600), [$1bd0-$2000) | Character when immobile, and prone. Also has weapon zeppelin. writes to same PPU addresses as `graphic_data_07` and `graphic_data_0b` | -| `graphic_data_06` | 4 | $99fc | $119fc | Left and Right Pattern tables | [$08c0-$1100) | Most Base graphics | -| `graphic_data_07` | 5 | $8a61 | $14a61 | Left and Right Pattern tables | [$09a0-$0a80), [$0dc0-$1200), [$1320-$1600), [$1bd0-$2000) | Writes to same PPU addresses as `graphic_data_05` and `graphic_data_0b` | -| `graphic_data_08` | 4 | $886c | $1086c | Left and Right Pattern tables | [$09a0-$2000) | | -| `graphic_data_09` | 4 | $99cd | $119cd | Left Pattern table | [$0b00-$0b40) | | -| `graphic_data_0a` | 4 | $a005 | $12005 | Right Pattern table | [$1100-$1520) | | -| `graphic_data_0b` | 5 | $93e0 | $153e0 | Left and Right Pattern tables | [$09a0-$0a80), [$0dc0-$1200), [$1320-$1600), [$1bd0-$2000) | Writes to same PPU addresses as `graphic_data_05` and `graphic_data_07` | -| `graphic_data_0c` | 6 | $8001 | $18001 | Left and Right Pattern tables | [$09a0-$0a80), [$0dc0-$0ee0), [$0fc0-$1200), [$1320-$2000) | | -| `graphic_data_0d` | 6 | $8cdc | $18cdc | Left and Right Pattern tables | [$09a0-$0a80), [$0dc0-$0ee0), [$0fc0-$1200), [$1320-$2000) | | -| `graphic_data_0e` | 6 | $9bd6 | $19bd6 | Left and Right Pattern tables | [$09a0-$2000) | | -| `graphic_data_0f` | 4 | $a346 | $12346 | Right Pattern table | [$1520-$1600) | | -| `graphic_data_10` | 4 | $a003 | $12003 | Right Pattern table | [$1a20-$2000) | Same as `graphic_data_11`, but horizontally flipped | -| `graphic_data_11` | 4 | $a3e7 | $123e7 | Right Pattern table | [$1a20-$2000) | | -| `graphic_data_12` | 4 | $a940 | $12940 | Right Pattern table | [$1b90-$1ca0) | | -| `graphic_data_13` | 4 | $87a1 | $107a1 | Left Pattern table | [$08c0-$09a0) | | -| `graphic_data_14` | 5 | $a814 | $16814 | Right Pattern table | [$1600-$1bd0) | | -| `graphic_data_15` | 6 | $b07a | $1b07a | Left Pattern table | [$0ee0-$0fc0) | | -| `graphic_data_16` | 6 | $b15c | $1b15c | Right Pattern table | [$1200-$1320) | | -| `graphic_data_17` | 5 | $addf | $16ddf | Left and Right Pattern tables | [$0a60-$0fe0), [$15b0-$18a0) | | -| `graphic_data_18` | 5 | $b30d | $1730d | Nametable 0 + Attribute table 0 | [$2000-$2400) | Used in ending scene | -| `graphic_data_19` | 5 | $a31b | $1631b | Left Pattern table | [$0680-$08c0) | | -| `graphic_data_1a` | 5 | $a500 | $16500 | Left Pattern table | [$0a80-$0dc0) | | +| Label Name | Bank | Label In-Memory Address | PRG ROM Address | Graphics Data | PPU Addresses | Comments | +|-------------------|------|-------------------------|-----------------|-------------------------------------------|--------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------| +| `graphic_data_00` | 7 | `$cb36` | `$1cb36` | Both nametables and Both Attribute tables | `[$2000-$2800)` | Sets all Nametable + Attribute table data to #$00. | +| `graphic_data_01` | 4 | `$aa2d` | `$12a2d` | Left and Right Pattern tables | `[$0ce0-$1f80)` | Used for intro screen, level title screens, and game over screens. Contains Contra logo, Bill and Lance sprite tiles, letters, and falcon tiles. | +| `graphic_data_02` | 2 | `$9097` | `$9097` | Nametable 0 and Attribute table 0 | `[$2000-$2400)` | Used for intro screen, contains layout of tiles for intro screen text. | +| `graphic_data_03` | 4 | `$8001` | `$10001` | Left Pattern table | `[$0000-$0680)` | Used in every level. Contains Bill and Lance outdoor sprite tiles, game over letters, lives medals, power-ups (SBFLRM), and explosions. | +| `graphic_data_04` | 4 | `$85ae` | `$105ae` | Left Pattern table | `[$0680-$08c0)` | Used in indoor/base levels. Player sprite pattern tiles. | +| `graphic_data_05` | 5 | `$8001` | `$14001` | Left and Right Pattern tables | `[$09a0-$0a80)`, `[$0dc0-$1200)`, `[$1320-$1600)`, `[$1bd0-$2000)` | Level 1 bridge, mountain, trees, and water tiles. Player prone, and flying capsule tiles. | +| `graphic_data_06` | 4 | `$99fc` | `$119fc` | Left and Right Pattern tables | `[$08c0-$1100)` | Used in indoor/base levels. Indoor player sprites, grenades, and som indoor/base background graphics | +| `graphic_data_07` | 5 | `$8a61` | `$14a61` | Left and Right Pattern tables | `[$09a0-$0a80)`, `[$0dc0-$1200)`, `[$1320-$1600)`, `[$1bd0-$2000)` | Level 3 background and sprite pattern table tiles. Player prone, and flying capsule tiles. | +| `graphic_data_08` | 4 | `$886c` | `$1086c` | Left and Right Pattern tables | `[$09a0-$2000)` | Indoor/base boss screen background and sprite pattern table tiles. | +| `graphic_data_09` | 4 | `$99cd` | `$119cd` | Left Pattern table | `[$0b00-$0b40)` | Level 4 boss screen sprite pattern table tiles. Just 3 tiles. | +| `graphic_data_0a` | 4 | `$a005` | `$12005` | Right Pattern table | `[$1100-$1520)` | Indoor/base pattern table tiles. Same as `graphic_data_0a`, but horizontally flipped. | +| `graphic_data_0b` | 5 | `$93e0` | `$153e0` | Left and Right Pattern tables | `[$09a0-$0a80)`, `[$0dc0-$1200)`, `[$1320-$1600)`, `[$1bd0-$2000)` | Level 5 pattern table tiles. | +| `graphic_data_0c` | 6 | `$8001` | `$18001` | Left and Right Pattern tables | `[$09a0-$0a80)`, `[$0dc0-$0ee0)`, `[$0fc0-$1200)`, `[$1320-$2000)` | Level 6 pattern table tiles. | +| `graphic_data_0d` | 6 | `$8cdc` | `$18cdc` | Left and Right Pattern tables | `[$09a0-$0a80)`, `[$0dc0-$0ee0)`, `[$0fc0-$1200)`, `[$1320-$2000)` | Level 7 pattern table tiles. | +| `graphic_data_0e` | 6 | `$9bd6` | `$19bd6` | Left and Right Pattern tables | `[$09a0-$2000)` | Level 8 pattern table tiles. | +| `graphic_data_0f` | 4 | `$a346` | `$12346` | Right Pattern table | `[$1520-$1600)` | Indoor/base pattern table tiles. #$0e background tiles total. | +| `graphic_data_10` | 4 | `$a003` | `$12003` | Right Pattern table | `[$1a20-$2000)` | Indoor/base pattern table tiles. Same as `graphic_data_0a`, but horizontally flipped. | +| `graphic_data_11` | 4 | `$a3e7` | `$123e7` | Right Pattern table | `[$1a20-$2000)` | Indoor/base background pattern table tiles. | +| `graphic_data_12` | 4 | `$a940` | `$12940` | Right Pattern table | `[$1b90-$1ca0)` | Level 4 background pattern table tiles. | +| `graphic_data_13` | 4 | `$87a1` | `$107a1` | Left Pattern table | `[$08c0-$09a0)` | Player top-half aiming angled up and player aiming straight. Also contains the laser bullet sprites. | +| `graphic_data_14` | 5 | `$a814` | `$16814` | Right Pattern table | `[$1600-$1bd0)` | Rotating gun and red turret pattern table tiles. | +| `graphic_data_15` | 6 | `$b07a` | `$1b07a` | Left Pattern table | `[$0ee0-$0fc0)` | Level 5, 6, and 7 sprite pattern table tiles for turret man (basquez). | +| `graphic_data_16` | 6 | `$b15c` | `$1b15c` | Right Pattern table | `[$1200-$1320)` | Weapon box pattern table tiles. | +| `graphic_data_17` | 5 | `$addf` | `$16ddf` | Left and Right Pattern tables | `[$0a60-$0fe0)`, `[$15b0-$18a0)` | Ending scene pattern table tiles. Includes helicopter sprite tiles and island background tiles. | +| `graphic_data_18` | 5 | `$b30d` | `$1730d` | Nametable 0 and Attribute table 0 | `[$2000-$2400)` | Nametable and attribute table data for ending scene. | +| `graphic_data_19` | 5 | `$a31b` | `$1631b` | Left Pattern table | `[$0680-$08c0)` | Player killed sprite tiles: recoil from hit and lying on ground. | +| `graphic_data_1a` | 5 | `$a500` | `$16500` | Left Pattern table | `[$0a80-$0dc0)` | Enemy soldier sprite pattern table tiles. | + +Interestingly, the outdoor player prone and flying capsule sprite tiles are duplicated on all outdoor levels. ## Background Collision Data diff --git a/docs/Probotector.md b/docs/Probotector.md new file mode 100644 index 0000000..0e7b9d6 --- /dev/null +++ b/docs/Probotector.md @@ -0,0 +1,116 @@ +# 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 identity 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` \ No newline at end of file diff --git a/docs/sprite_library/README.md b/docs/sprite_library/README.md index 865579b..8aa70af 100644 --- a/docs/sprite_library/README.md +++ b/docs/sprite_library/README.md @@ -9,37 +9,77 @@ The player lives medals in the heads up display (HUD) are not in the sprite tables, but the tiles are written directly to the OAMDMA via the CPU buffer. # Sprite Table -| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f | -|---|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------| -| 0 | | | ![sprite_02](sprite_02.png?raw=true "sprite_02") ![sprite_02_p2](sprite_02_p2.png?raw=true "sprite_02_p2") | ![sprite_03](sprite_03.png?raw=true "sprite_03") ![sprite_03_p2](sprite_03_p2.png?raw=true "sprite_03_p2") | ![sprite_04](sprite_04.png?raw=true "sprite_04") ![sprite_04_p2](sprite_04_p2.png?raw=true "sprite_04_p2") | ![sprite_05](sprite_05.png?raw=true "sprite_05") ![sprite_05_p2](sprite_05_p2.png?raw=true "sprite_05_p2") | ![sprite_06](sprite_06.png?raw=true "sprite_06") ![sprite_06_p2](sprite_06_p2.png?raw=true "sprite_06_p2") | ![sprite_07](sprite_07.png?raw=true "sprite_07") | ![sprite_08](sprite_08.png?raw=true "sprite_08") ![sprite_08_p2](sprite_08_p2.png?raw=true "sprite_08_p2") | ![sprite_09](sprite_09.png?raw=true "sprite_09") ![sprite_09_p2](sprite_09_p2.png?raw=true "sprite_09_p2") | ![sprite_0a](sprite_0a.png?raw=true "sprite_0a") ![sprite_0a_p2](sprite_0a_p2.png?raw=true "sprite_0a_p2") | ![sprite_0b](sprite_0b.png?raw=true "sprite_0b") ![sprite_0b_p2](sprite_0b_p2.png?raw=true "sprite_0b_p2") | ![sprite_0c](sprite_0c.png?raw=true "sprite_0c") ![sprite_0c_p2](sprite_0c_p2.png?raw=true "sprite_0c_p2") | ![sprite_0d](sprite_0d.png?raw=true "sprite_0d") ![sprite_0d_p2](sprite_0d_p2.png?raw=true "sprite_0d_p2") | ![sprite_0e](sprite_0e.png?raw=true "sprite_0e") ![sprite_0e_p2](sprite_0e_p2.png?raw=true "sprite_0e_p2") | ![sprite_0f](sprite_0f.png?raw=true "sprite_0f") ![sprite_0f_p2](sprite_0f_p2.png?raw=true "sprite_0f_p2") | -| 1 | ![sprite_10](sprite_10.png?raw=true "sprite_10") ![sprite_10_p2](sprite_10_p2.png?raw=true "sprite_10_p2") | ![sprite_11](sprite_11.png?raw=true "sprite_11") ![sprite_11_p2](sprite_11_p2.png?raw=true "sprite_11_p2") | ![sprite_12](sprite_12.png?raw=true "sprite_12") ![sprite_12_p2](sprite_12_p2.png?raw=true "sprite_12_p2") | ![sprite_13](sprite_13.png?raw=true "sprite_13") ![sprite_13_p2](sprite_13_p2.png?raw=true "sprite_13_p2") | ![sprite_14](sprite_14.png?raw=true "sprite_14") ![sprite_14_p2](sprite_14_p2.png?raw=true "sprite_14_p2") | ![sprite_15](sprite_15.png?raw=true "sprite_15") ![sprite_15_p2](sprite_15_p2.png?raw=true "sprite_15_p2") | ![sprite_16](sprite_16.png?raw=true "sprite_16") ![sprite_16_p2](sprite_16_p2.png?raw=true "sprite_16_p2") | ![sprite_17](sprite_17.png?raw=true "sprite_17") ![sprite_17_p2](sprite_17_p2.png?raw=true "sprite_17_p2") | ![sprite_18](sprite_18.png?raw=true "sprite_18") | ![sprite_19](sprite_19.png?raw=true "sprite_19") | ![sprite_1a](sprite_1a.png?raw=true "sprite_1a") | ![sprite_1b](sprite_1b.png?raw=true "sprite_1b") | ![sprite_1c](sprite_1c.png?raw=true "sprite_1c") | ![sprite_1d](sprite_1d.png?raw=true "sprite_1d") | ![sprite_1e](sprite_1e.png?raw=true "sprite_1e") | ![sprite_1f](sprite_1f.png?raw=true "sprite_1f") | -| 2 | ![sprite_20](sprite_20.png?raw=true "sprite_20") | ![sprite_21](sprite_21.png?raw=true "sprite_21") | ![sprite_22](sprite_22.png?raw=true "sprite_22") | ![sprite_23](sprite_23.png?raw=true "sprite_23") | ![sprite_24](sprite_24.png?raw=true "sprite_24") | ![sprite_25](sprite_25.png?raw=true "sprite_25") | ![sprite_26](sprite_26.png?raw=true "sprite_26") | ![sprite_27](sprite_27.png?raw=true "sprite_27") | ![sprite_28](sprite_28.png?raw=true "sprite_28") | ![sprite_29](sprite_29.png?raw=true "sprite_29") | ![sprite_2a](sprite_2a.png?raw=true "sprite_2a") | ![sprite_2b](sprite_2b.png?raw=true "sprite_2b") | ![sprite_2c](sprite_2c.png?raw=true "sprite_2c") | ![sprite_2d](sprite_2d.png?raw=true "sprite_2d") | | ![sprite_2f](sprite_2f.png?raw=true "sprite_2f") | -| 3 | ![sprite_30](sprite_30.png?raw=true "sprite_30") | ![sprite_31](sprite_31.png?raw=true "sprite_31") | ![sprite_32](sprite_32.png?raw=true "sprite_32") | ![sprite_33](sprite_33.png?raw=true "sprite_33") | ![sprite_34](sprite_34.png?raw=true "sprite_34") | ![sprite_35](sprite_35.png?raw=true "sprite_35") | ![sprite_36](sprite_36.png?raw=true "sprite_36") | ![sprite_37](sprite_37.png?raw=true "sprite_37") | ![sprite_38](sprite_38.png?raw=true "sprite_38") | ![sprite_39](sprite_39.png?raw=true "sprite_39") | ![sprite_3a](sprite_3a.png?raw=true "sprite_3a") | ![sprite_3b](sprite_3b.png?raw=true "sprite_3b") | ![sprite_3c](sprite_3c.png?raw=true "sprite_3c") | ![sprite_3d](sprite_3d.png?raw=true "sprite_3d") | ![sprite_3e](sprite_3e.png?raw=true "sprite_3e") | ![sprite_3f](sprite_3f.png?raw=true "sprite_3f") | -| 4 | ![sprite_40](sprite_40.png?raw=true "sprite_40") | ![sprite_41](sprite_41.png?raw=true "sprite_41") | ![sprite_42](sprite_42.png?raw=true "sprite_42") | ![sprite_43](sprite_43.png?raw=true "sprite_43") | ![sprite_44](sprite_44.png?raw=true "sprite_44") | ![sprite_45](sprite_45.png?raw=true "sprite_45") | ![sprite_46](sprite_46.png?raw=true "sprite_46") | ![sprite_47](sprite_47.png?raw=true "sprite_47") | ![sprite_48](sprite_48.png?raw=true "sprite_48") | ![sprite_49](sprite_49.png?raw=true "sprite_49") | ![sprite_4a](sprite_4a.png?raw=true "sprite_4a") | ![sprite_4b](sprite_4b.png?raw=true "sprite_4b") | ![sprite_4c](sprite_4c.png?raw=true "sprite_4c") | ![sprite_4d](sprite_4d.png?raw=true "sprite_4d") | ![sprite_4e](sprite_4e.gif?raw=true "sprite_4e") | | -| 5 | ![sprite_50](sprite_50.png?raw=true "sprite_50") ![sprite_50_p2](sprite_50_p2.png?raw=true "sprite_50_p2") | ![sprite_51](sprite_51.png?raw=true "sprite_51") ![sprite_51_p2](sprite_51_p2.png?raw=true "sprite_51_p2") | ![sprite_52](sprite_52.png?raw=true "sprite_52") ![sprite_52_p2](sprite_52_p2.png?raw=true "sprite_52_p2") | ![sprite_53](sprite_53.png?raw=true "sprite_53") ![sprite_53_p2](sprite_53_p2.png?raw=true "sprite_53_p2") | ![sprite_54](sprite_54.png?raw=true "sprite_54") ![sprite_54_p2](sprite_54_p2.png?raw=true "sprite_54_p2") | ![sprite_55](sprite_55.png?raw=true "sprite_55") ![sprite_55_p2](sprite_55_p2.png?raw=true "sprite_55_p2") | ![sprite_56](sprite_56.png?raw=true "sprite_56") ![sprite_56_p2](sprite_56_p2.png?raw=true "sprite_56_p2") | ![sprite_57](sprite_57.png?raw=true "sprite_57") ![sprite_57_p2](sprite_57_p2.png?raw=true "sprite_57_p2") | ![sprite_58](sprite_58.png?raw=true "sprite_58") ![sprite_58_p2](sprite_58_p2.png?raw=true "sprite_58_p2") | | | | | ![sprite_5d](sprite_5d.png?raw=true "sprite_5d") | ![sprite_5e](sprite_5e.png?raw=true "sprite_5e") | ![sprite_5f](sprite_5f.png?raw=true "sprite_5f") | -| 6 | ![sprite_60](sprite_60.png?raw=true "sprite_60") | ![sprite_61](sprite_61.png?raw=true "sprite_61") | ![sprite_62](sprite_62.png?raw=true "sprite_62") | ![sprite_63](sprite_63.png?raw=true "sprite_63") | ![sprite_64](sprite_64.png?raw=true "sprite_64") | | | | ![sprite_68](sprite_68.png?raw=true "sprite_68") | ![sprite_69](sprite_69.png?raw=true "sprite_69") | ![sprite_6a](sprite_6a.png?raw=true "sprite_6a") | ![sprite_6b](sprite_6b.png?raw=true "sprite_6b") | ![sprite_6c](sprite_6c.png?raw=true "sprite_6c") | ![sprite_6d](sprite_6d.png?raw=true "sprite_6d") | ![sprite_6e](sprite_6e.png?raw=true "sprite_6e") | ![sprite_6f](sprite_6f.png?raw=true "sprite_6f") | -| 7 | ![sprite_70](sprite_70.png?raw=true "sprite_70") | ![sprite_71](sprite_71.png?raw=true "sprite_71") | ![sprite_72](sprite_72.png?raw=true "sprite_72") | ![sprite_73](sprite_73.png?raw=true "sprite_73") | ![sprite_74](sprite_74.png?raw=true "sprite_74") | ![sprite_75](sprite_75.png?raw=true "sprite_75") | ![sprite_76](sprite_76.png?raw=true "sprite_76") | ![sprite_77](sprite_77.png?raw=true "sprite_77") | ![sprite_78](sprite_78.png?raw=true "sprite_78") | ![sprite_79](sprite_79.png?raw=true "sprite_79") | ![sprite_7a](sprite_7a.png?raw=true "sprite_7a") | ![sprite_7b](sprite_7b.png?raw=true "sprite_7b") | ![sprite_7c](sprite_7c.png?raw=true "sprite_7c") | ![sprite_7d](sprite_7d.png?raw=true "sprite_7d") | ![sprite_7e](sprite_7e.png?raw=true "sprite_7e") | | -| 8 | | | ![sprite_82](sprite_82.png?raw=true "sprite_82") | ![sprite_83](sprite_83.png?raw=true "sprite_83") | ![sprite_84](sprite_84.png?raw=true "sprite_84") | ![sprite_85](sprite_85.png?raw=true "sprite_85") | ![sprite_86](sprite_86.png?raw=true "sprite_86") | ![sprite_87](sprite_87.png?raw=true "sprite_87") | ![sprite_88](sprite_88.png?raw=true "sprite_88") | ![sprite_89](sprite_89.png?raw=true "sprite_89") | ![sprite_8a](sprite_8a.png?raw=true "sprite_8a") | ![sprite_8b](sprite_8b.png?raw=true "sprite_8b") | ![sprite_8c](sprite_8c.png?raw=true "sprite_8c") | ![sprite_8d](sprite_8d.png?raw=true "sprite_8d") | ![sprite_8e](sprite_8e.png?raw=true "sprite_8e") | ![sprite_8f](sprite_8f.png?raw=true "sprite_8f") | -| 9 | ![sprite_90](sprite_90.png?raw=true "sprite_90") | ![sprite_91](sprite_91.png?raw=true "sprite_91") ![sprite_91_p2](sprite_91_p2.png?raw=true "sprite_91_p2") | ![sprite_92](sprite_92.png?raw=true "sprite_92") | ![sprite_93](sprite_93.png?raw=true "sprite_93") | ![sprite_94](sprite_94.png?raw=true "sprite_94") | ![sprite_95](sprite_95.png?raw=true "sprite_95") | ![sprite_96](sprite_96.png?raw=true "sprite_96") | ![sprite_97](sprite_97.png?raw=true "sprite_97") | ![sprite_98](sprite_98.png?raw=true "sprite_98") | ![sprite_99](sprite_99.png?raw=true "sprite_99") | ![sprite_9a](sprite_9a.png?raw=true "sprite_9a") | ![sprite_9b](sprite_9b.png?raw=true "sprite_9b") | ![sprite_9c](sprite_9c.png?raw=true "sprite_9c") | ![sprite_9d](sprite_9d.png?raw=true "sprite_9d") | ![sprite_9e](sprite_9e.png?raw=true "sprite_9e") | ![sprite_9f](sprite_9f.png?raw=true "sprite_9f") | -| a | ![sprite_a0](sprite_a0.png?raw=true "sprite_a0") | ![sprite_a1](sprite_a1.png?raw=true "sprite_a1") | ![sprite_a2](sprite_a2.png?raw=true "sprite_a2") | ![sprite_a3](sprite_a3.png?raw=true "sprite_a3") | ![sprite_a4](sprite_a4.png?raw=true "sprite_a4") | ![sprite_a5](sprite_a5.png?raw=true "sprite_a5") | ![sprite_a6](sprite_a6.png?raw=true "sprite_a6") | ![sprite_a7](sprite_a7.png?raw=true "sprite_a7") | ![sprite_a8](sprite_a8.png?raw=true "sprite_a8") | ![sprite_a9](sprite_a9.png?raw=true "sprite_a9") | ![sprite_aa](sprite_aa.png?raw=true "sprite_aa") | ![sprite_ab](sprite_ab.png?raw=true "sprite_ab") | ![sprite_ac](sprite_ac.png?raw=true "sprite_ac") | ![sprite_ad](sprite_ad.png?raw=true "sprite_ad") | ![sprite_ae](sprite_ae.png?raw=true "sprite_ae") | ![sprite_af](sprite_af.png?raw=true "sprite_af") | -| b | ![sprite_b0](sprite_b0.png?raw=true "sprite_b0") | ![sprite_b1](sprite_b1.png?raw=true "sprite_b1") | ![sprite_b2](sprite_b2.png?raw=true "sprite_b2") | ![sprite_b3](sprite_b3.png?raw=true "sprite_b3") | ![sprite_b4](sprite_b4.png?raw=true "sprite_b4") | ![sprite_b5](sprite_b5.png?raw=true "sprite_b5") | ![sprite_b6](sprite_b6.png?raw=true "sprite_b6") | ![sprite_b7](sprite_b7.png?raw=true "sprite_b7") | ![sprite_b8](sprite_b8.png?raw=true "sprite_b8") | ![sprite_b9](sprite_b9.png?raw=true "sprite_b9") | ![sprite_ba](sprite_ba.png?raw=true "sprite_ba") | ![sprite_bb](sprite_bb.png?raw=true "sprite_bb") | ![sprite_bc](sprite_bc.png?raw=true "sprite_bc") | ![sprite_bd](sprite_bd.png?raw=true "sprite_bd") | ![sprite_be](sprite_be.png?raw=true "sprite_be") | ![sprite_bf](sprite_bf.png?raw=true "sprite_bf") | -| c | ![sprite_c0](sprite_c0.png?raw=true "sprite_c0") | ![sprite_c1](sprite_c1.png?raw=true "sprite_c1") | ![sprite_c2](sprite_c2.png?raw=true "sprite_c2") | ![sprite_c3](sprite_c3.png?raw=true "sprite_c3") | ![sprite_c4](sprite_c4.png?raw=true "sprite_c4") | ![sprite_c5](sprite_c5.png?raw=true "sprite_c5") | ![sprite_c6](sprite_c6.png?raw=true "sprite_c6") | ![sprite_c7](sprite_c7.png?raw=true "sprite_c7") | ![sprite_c8](sprite_c8.png?raw=true "sprite_c8") | ![sprite_c9](sprite_c9.png?raw=true "sprite_c9") | ![sprite_ca](sprite_ca.png?raw=true "sprite_ca") | ![sprite_cb](sprite_cb.png?raw=true "sprite_cb") | ![sprite_cc](sprite_cc.png?raw=true "sprite_cc") | ![sprite_cd](sprite_cd.png?raw=true "sprite_cd") | ![sprite_ce](sprite_ce.png?raw=true "sprite_ce") | ![sprite_cf](sprite_cf.png?raw=true "sprite_cf") | + +## Contra (US) + +| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f | +|---|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| 0 | | | ![sprite_02](contra_sprites/sprite_02.png?raw=true "sprite_02") ![sprite_02_p2](contra_sprites/sprite_02_p2.png?raw=true "sprite_02_p2") | ![sprite_03](contra_sprites/sprite_03.png?raw=true "sprite_03") ![sprite_03_p2](contra_sprites/sprite_03_p2.png?raw=true "sprite_03_p2") | ![sprite_04](contra_sprites/sprite_04.png?raw=true "sprite_04") ![sprite_04_p2](contra_sprites/sprite_04_p2.png?raw=true "sprite_04_p2") | ![sprite_05](contra_sprites/sprite_05.png?raw=true "sprite_05") ![sprite_05_p2](contra_sprites/sprite_05_p2.png?raw=true "sprite_05_p2") | ![sprite_06](contra_sprites/sprite_06.png?raw=true "sprite_06") ![sprite_06_p2](contra_sprites/sprite_06_p2.png?raw=true "sprite_06_p2") | ![sprite_07](contra_sprites/sprite_07.png?raw=true "sprite_07") | ![sprite_08](contra_sprites/sprite_08.png?raw=true "sprite_08") ![sprite_08_p2](contra_sprites/sprite_08_p2.png?raw=true "sprite_08_p2") | ![sprite_09](contra_sprites/sprite_09.png?raw=true "sprite_09") ![sprite_09_p2](contra_sprites/sprite_09_p2.png?raw=true "sprite_09_p2") | ![sprite_0a](contra_sprites/sprite_0a.png?raw=true "sprite_0a") ![sprite_0a_p2](contra_sprites/sprite_0a_p2.png?raw=true "sprite_0a_p2") | ![sprite_0b](contra_sprites/sprite_0b.png?raw=true "sprite_0b") ![sprite_0b_p2](contra_sprites/sprite_0b_p2.png?raw=true "sprite_0b_p2") | ![sprite_0c](contra_sprites/sprite_0c.png?raw=true "sprite_0c") ![sprite_0c_p2](contra_sprites/sprite_0c_p2.png?raw=true "sprite_0c_p2") | ![sprite_0d](contra_sprites/sprite_0d.png?raw=true "sprite_0d") ![sprite_0d_p2](contra_sprites/sprite_0d_p2.png?raw=true "sprite_0d_p2") | ![sprite_0e](contra_sprites/sprite_0e.png?raw=true "sprite_0e") ![sprite_0e_p2](contra_sprites/sprite_0e_p2.png?raw=true "sprite_0e_p2") | ![sprite_0f](contra_sprites/sprite_0f.png?raw=true "sprite_0f") ![sprite_0f_p2](contra_sprites/sprite_0f_p2.png?raw=true "sprite_0f_p2") | +| 1 | ![sprite_10](contra_sprites/sprite_10.png?raw=true "sprite_10") ![sprite_10_p2](contra_sprites/sprite_10_p2.png?raw=true "sprite_10_p2") | ![sprite_11](contra_sprites/sprite_11.png?raw=true "sprite_11") ![sprite_11_p2](contra_sprites/sprite_11_p2.png?raw=true "sprite_11_p2") | ![sprite_12](contra_sprites/sprite_12.png?raw=true "sprite_12") ![sprite_12_p2](contra_sprites/sprite_12_p2.png?raw=true "sprite_12_p2") | ![sprite_13](contra_sprites/sprite_13.png?raw=true "sprite_13") ![sprite_13_p2](contra_sprites/sprite_13_p2.png?raw=true "sprite_13_p2") | ![sprite_14](contra_sprites/sprite_14.png?raw=true "sprite_14") ![sprite_14_p2](contra_sprites/sprite_14_p2.png?raw=true "sprite_14_p2") | ![sprite_15](contra_sprites/sprite_15.png?raw=true "sprite_15") ![sprite_15_p2](contra_sprites/sprite_15_p2.png?raw=true "sprite_15_p2") | ![sprite_16](contra_sprites/sprite_16.png?raw=true "sprite_16") ![sprite_16_p2](contra_sprites/sprite_16_p2.png?raw=true "sprite_16_p2") | ![sprite_17](contra_sprites/sprite_17.png?raw=true "sprite_17") ![sprite_17_p2](contra_sprites/sprite_17_p2.png?raw=true "sprite_17_p2") | ![sprite_18](contra_sprites/sprite_18.png?raw=true "sprite_18") | ![sprite_19](contra_sprites/sprite_19.png?raw=true "sprite_19") | ![sprite_1a](contra_sprites/sprite_1a.png?raw=true "sprite_1a") | ![sprite_1b](contra_sprites/sprite_1b.png?raw=true "sprite_1b") | ![sprite_1c](contra_sprites/sprite_1c.png?raw=true "sprite_1c") | ![sprite_1d](contra_sprites/sprite_1d.png?raw=true "sprite_1d") | ![sprite_1e](contra_sprites/sprite_1e.png?raw=true "sprite_1e") | ![sprite_1f](contra_sprites/sprite_1f.png?raw=true "sprite_1f") | +| 2 | ![sprite_20](contra_sprites/sprite_20.png?raw=true "sprite_20") | ![sprite_21](contra_sprites/sprite_21.png?raw=true "sprite_21") | ![sprite_22](contra_sprites/sprite_22.png?raw=true "sprite_22") | ![sprite_23](contra_sprites/sprite_23.png?raw=true "sprite_23") | ![sprite_24](contra_sprites/sprite_24.png?raw=true "sprite_24") | ![sprite_25](contra_sprites/sprite_25.png?raw=true "sprite_25") | ![sprite_26](contra_sprites/sprite_26.png?raw=true "sprite_26") | ![sprite_27](contra_sprites/sprite_27.png?raw=true "sprite_27") | ![sprite_28](contra_sprites/sprite_28.png?raw=true "sprite_28") | ![sprite_29](contra_sprites/sprite_29.png?raw=true "sprite_29") | ![sprite_2a](contra_sprites/sprite_2a.png?raw=true "sprite_2a") | ![sprite_2b](contra_sprites/sprite_2b.png?raw=true "sprite_2b") | ![sprite_2c](contra_sprites/sprite_2c.png?raw=true "sprite_2c") | ![sprite_2d](contra_sprites/sprite_2d.png?raw=true "sprite_2d") | | ![sprite_2f](contra_sprites/sprite_2f.png?raw=true "sprite_2f") | +| 3 | ![sprite_30](contra_sprites/sprite_30.png?raw=true "sprite_30") | ![sprite_31](contra_sprites/sprite_31.png?raw=true "sprite_31") | ![sprite_32](contra_sprites/sprite_32.png?raw=true "sprite_32") | ![sprite_33](contra_sprites/sprite_33.png?raw=true "sprite_33") | ![sprite_34](contra_sprites/sprite_34.png?raw=true "sprite_34") | ![sprite_35](contra_sprites/sprite_35.png?raw=true "sprite_35") | ![sprite_36](contra_sprites/sprite_36.png?raw=true "sprite_36") | ![sprite_37](contra_sprites/sprite_37.png?raw=true "sprite_37") | ![sprite_38](contra_sprites/sprite_38.png?raw=true "sprite_38") | ![sprite_39](contra_sprites/sprite_39.png?raw=true "sprite_39") | ![sprite_3a](contra_sprites/sprite_3a.png?raw=true "sprite_3a") | ![sprite_3b](contra_sprites/sprite_3b.png?raw=true "sprite_3b") | ![sprite_3c](contra_sprites/sprite_3c.png?raw=true "sprite_3c") | ![sprite_3d](contra_sprites/sprite_3d.png?raw=true "sprite_3d") | ![sprite_3e](contra_sprites/sprite_3e.png?raw=true "sprite_3e") | ![sprite_3f](contra_sprites/sprite_3f.png?raw=true "sprite_3f") | +| 4 | ![sprite_40](contra_sprites/sprite_40.png?raw=true "sprite_40") | ![sprite_41](contra_sprites/sprite_41.png?raw=true "sprite_41") | ![sprite_42](contra_sprites/sprite_42.png?raw=true "sprite_42") | ![sprite_43](contra_sprites/sprite_43.png?raw=true "sprite_43") | ![sprite_44](contra_sprites/sprite_44.png?raw=true "sprite_44") | ![sprite_45](contra_sprites/sprite_45.png?raw=true "sprite_45") | ![sprite_46](contra_sprites/sprite_46.png?raw=true "sprite_46") | ![sprite_47](contra_sprites/sprite_47.png?raw=true "sprite_47") | ![sprite_48](contra_sprites/sprite_48.png?raw=true "sprite_48") | ![sprite_49](contra_sprites/sprite_49.png?raw=true "sprite_49") | ![sprite_4a](contra_sprites/sprite_4a.png?raw=true "sprite_4a") | ![sprite_4b](contra_sprites/sprite_4b.png?raw=true "sprite_4b") | ![sprite_4c](contra_sprites/sprite_4c.png?raw=true "sprite_4c") | ![sprite_4d](contra_sprites/sprite_4d.png?raw=true "sprite_4d") | ![sprite_4e](contra_sprites/sprite_4e.gif?raw=true "sprite_4e") | | +| 5 | ![sprite_50](contra_sprites/sprite_50.png?raw=true "sprite_50") ![sprite_50_p2](contra_sprites/sprite_50_p2.png?raw=true "sprite_50_p2") | ![sprite_51](contra_sprites/sprite_51.png?raw=true "sprite_51") ![sprite_51_p2](contra_sprites/sprite_51_p2.png?raw=true "sprite_51_p2") | ![sprite_52](contra_sprites/sprite_52.png?raw=true "sprite_52") ![sprite_52_p2](contra_sprites/sprite_52_p2.png?raw=true "sprite_52_p2") | ![sprite_53](contra_sprites/sprite_53.png?raw=true "sprite_53") ![sprite_53_p2](contra_sprites/sprite_53_p2.png?raw=true "sprite_53_p2") | ![sprite_54](contra_sprites/sprite_54.png?raw=true "sprite_54") ![sprite_54_p2](contra_sprites/sprite_54_p2.png?raw=true "sprite_54_p2") | ![sprite_55](contra_sprites/sprite_55.png?raw=true "sprite_55") ![sprite_55_p2](contra_sprites/sprite_55_p2.png?raw=true "sprite_55_p2") | ![sprite_56](contra_sprites/sprite_56.png?raw=true "sprite_56") ![sprite_56_p2](contra_sprites/sprite_56_p2.png?raw=true "sprite_56_p2") | ![sprite_57](contra_sprites/sprite_57.png?raw=true "sprite_57") ![sprite_57_p2](contra_sprites/sprite_57_p2.png?raw=true "sprite_57_p2") | ![sprite_58](contra_sprites/sprite_58.png?raw=true "sprite_58") ![sprite_58_p2](contra_sprites/sprite_58_p2.png?raw=true "sprite_58_p2") | | | | | ![sprite_5d](contra_sprites/sprite_5d.png?raw=true "sprite_5d") | ![sprite_5e](contra_sprites/sprite_5e.png?raw=true "sprite_5e") | ![sprite_5f](contra_sprites/sprite_5f.png?raw=true "sprite_5f") | +| 6 | ![sprite_60](contra_sprites/sprite_60.png?raw=true "sprite_60") | ![sprite_61](contra_sprites/sprite_61.png?raw=true "sprite_61") | ![sprite_62](contra_sprites/sprite_62.png?raw=true "sprite_62") | ![sprite_63](contra_sprites/sprite_63.png?raw=true "sprite_63") | ![sprite_64](contra_sprites/sprite_64.png?raw=true "sprite_64") | | | | ![sprite_68](contra_sprites/sprite_68.png?raw=true "sprite_68") | ![sprite_69](contra_sprites/sprite_69.png?raw=true "sprite_69") | ![sprite_6a](contra_sprites/sprite_6a.png?raw=true "sprite_6a") | ![sprite_6b](contra_sprites/sprite_6b.png?raw=true "sprite_6b") | ![sprite_6c](contra_sprites/sprite_6c.png?raw=true "sprite_6c") | ![sprite_6d](contra_sprites/sprite_6d.png?raw=true "sprite_6d") | ![sprite_6e](contra_sprites/sprite_6e.png?raw=true "sprite_6e") | ![sprite_6f](contra_sprites/sprite_6f.png?raw=true "sprite_6f") | +| 7 | ![sprite_70](contra_sprites/sprite_70.png?raw=true "sprite_70") | ![sprite_71](contra_sprites/sprite_71.png?raw=true "sprite_71") | ![sprite_72](contra_sprites/sprite_72.png?raw=true "sprite_72") | ![sprite_73](contra_sprites/sprite_73.png?raw=true "sprite_73") | ![sprite_74](contra_sprites/sprite_74.png?raw=true "sprite_74") | ![sprite_75](contra_sprites/sprite_75.png?raw=true "sprite_75") | ![sprite_76](contra_sprites/sprite_76.png?raw=true "sprite_76") | ![sprite_77](contra_sprites/sprite_77.png?raw=true "sprite_77") | ![sprite_78](contra_sprites/sprite_78.png?raw=true "sprite_78") | ![sprite_79](contra_sprites/sprite_79.png?raw=true "sprite_79") | ![sprite_7a](contra_sprites/sprite_7a.png?raw=true "sprite_7a") | ![sprite_7b](contra_sprites/sprite_7b.png?raw=true "sprite_7b") | ![sprite_7c](contra_sprites/sprite_7c.png?raw=true "sprite_7c") | ![sprite_7d](contra_sprites/sprite_7d.png?raw=true "sprite_7d") | ![sprite_7e](contra_sprites/sprite_7e.png?raw=true "sprite_7e") | | +| 8 | | | ![sprite_82](contra_sprites/sprite_82.png?raw=true "sprite_82") | ![sprite_83](contra_sprites/sprite_83.png?raw=true "sprite_83") | ![sprite_84](contra_sprites/sprite_84.png?raw=true "sprite_84") | ![sprite_85](contra_sprites/sprite_85.png?raw=true "sprite_85") | ![sprite_86](contra_sprites/sprite_86.png?raw=true "sprite_86") | ![sprite_87](contra_sprites/sprite_87.png?raw=true "sprite_87") | ![sprite_88](contra_sprites/sprite_88.png?raw=true "sprite_88") | ![sprite_89](contra_sprites/sprite_89.png?raw=true "sprite_89") | ![sprite_8a](contra_sprites/sprite_8a.png?raw=true "sprite_8a") | ![sprite_8b](contra_sprites/sprite_8b.png?raw=true "sprite_8b") | ![sprite_8c](contra_sprites/sprite_8c.png?raw=true "sprite_8c") | ![sprite_8d](contra_sprites/sprite_8d.png?raw=true "sprite_8d") | ![sprite_8e](contra_sprites/sprite_8e.png?raw=true "sprite_8e") | ![sprite_8f](contra_sprites/sprite_8f.png?raw=true "sprite_8f") | +| 9 | ![sprite_90](contra_sprites/sprite_90.png?raw=true "sprite_90") | ![sprite_91](contra_sprites/sprite_91.png?raw=true "sprite_91") ![sprite_91_p2](contra_sprites/sprite_91_p2.png?raw=true "sprite_91_p2") | ![sprite_92](contra_sprites/sprite_92.png?raw=true "sprite_92") | ![sprite_93](contra_sprites/sprite_93.png?raw=true "sprite_93") | ![sprite_94](contra_sprites/sprite_94.png?raw=true "sprite_94") | ![sprite_95](contra_sprites/sprite_95.png?raw=true "sprite_95") | ![sprite_96](contra_sprites/sprite_96.png?raw=true "sprite_96") | ![sprite_97](contra_sprites/sprite_97.png?raw=true "sprite_97") | ![sprite_98](contra_sprites/sprite_98.png?raw=true "sprite_98") | ![sprite_99](contra_sprites/sprite_99.png?raw=true "sprite_99") | ![sprite_9a](contra_sprites/sprite_9a.png?raw=true "sprite_9a") | ![sprite_9b](contra_sprites/sprite_9b.png?raw=true "sprite_9b") | ![sprite_9c](contra_sprites/sprite_9c.png?raw=true "sprite_9c") | ![sprite_9d](contra_sprites/sprite_9d.png?raw=true "sprite_9d") | ![sprite_9e](contra_sprites/sprite_9e.png?raw=true "sprite_9e") | ![sprite_9f](contra_sprites/sprite_9f.png?raw=true "sprite_9f") | +| a | ![sprite_a0](contra_sprites/sprite_a0.png?raw=true "sprite_a0") | ![sprite_a1](contra_sprites/sprite_a1.png?raw=true "sprite_a1") | ![sprite_a2](contra_sprites/sprite_a2.png?raw=true "sprite_a2") | ![sprite_a3](contra_sprites/sprite_a3.png?raw=true "sprite_a3") | ![sprite_a4](contra_sprites/sprite_a4.png?raw=true "sprite_a4") | ![sprite_a5](contra_sprites/sprite_a5.png?raw=true "sprite_a5") | ![sprite_a6](contra_sprites/sprite_a6.png?raw=true "sprite_a6") | ![sprite_a7](contra_sprites/sprite_a7.png?raw=true "sprite_a7") | ![sprite_a8](contra_sprites/sprite_a8.png?raw=true "sprite_a8") | ![sprite_a9](contra_sprites/sprite_a9.png?raw=true "sprite_a9") | ![sprite_aa](contra_sprites/sprite_aa.png?raw=true "sprite_aa") | ![sprite_ab](contra_sprites/sprite_ab.png?raw=true "sprite_ab") | ![sprite_ac](contra_sprites/sprite_ac.png?raw=true "sprite_ac") | ![sprite_ad](contra_sprites/sprite_ad.png?raw=true "sprite_ad") | ![sprite_ae](contra_sprites/sprite_ae.png?raw=true "sprite_ae") | ![sprite_af](contra_sprites/sprite_af.png?raw=true "sprite_af") | +| b | ![sprite_b0](contra_sprites/sprite_b0.png?raw=true "sprite_b0") | ![sprite_b1](contra_sprites/sprite_b1.png?raw=true "sprite_b1") | ![sprite_b2](contra_sprites/sprite_b2.png?raw=true "sprite_b2") | ![sprite_b3](contra_sprites/sprite_b3.png?raw=true "sprite_b3") | ![sprite_b4](contra_sprites/sprite_b4.png?raw=true "sprite_b4") | ![sprite_b5](contra_sprites/sprite_b5.png?raw=true "sprite_b5") | ![sprite_b6](contra_sprites/sprite_b6.png?raw=true "sprite_b6") | ![sprite_b7](contra_sprites/sprite_b7.png?raw=true "sprite_b7") | ![sprite_b8](contra_sprites/sprite_b8.png?raw=true "sprite_b8") | ![sprite_b9](contra_sprites/sprite_b9.png?raw=true "sprite_b9") | ![sprite_ba](contra_sprites/sprite_ba.png?raw=true "sprite_ba") | ![sprite_bb](contra_sprites/sprite_bb.png?raw=true "sprite_bb") | ![sprite_bc](contra_sprites/sprite_bc.png?raw=true "sprite_bc") | ![sprite_bd](contra_sprites/sprite_bd.png?raw=true "sprite_bd") | ![sprite_be](contra_sprites/sprite_be.png?raw=true "sprite_be") | ![sprite_bf](contra_sprites/sprite_bf.png?raw=true "sprite_bf") | +| c | ![sprite_c0](contra_sprites/sprite_c0.png?raw=true "sprite_c0") | ![sprite_c1](contra_sprites/sprite_c1.png?raw=true "sprite_c1") | ![sprite_c2](contra_sprites/sprite_c2.png?raw=true "sprite_c2") | ![sprite_c3](contra_sprites/sprite_c3.png?raw=true "sprite_c3") | ![sprite_c4](contra_sprites/sprite_c4.png?raw=true "sprite_c4") | ![sprite_c5](contra_sprites/sprite_c5.png?raw=true "sprite_c5") | ![sprite_c6](contra_sprites/sprite_c6.png?raw=true "sprite_c6") | ![sprite_c7](contra_sprites/sprite_c7.png?raw=true "sprite_c7") | ![sprite_c8](contra_sprites/sprite_c8.png?raw=true "sprite_c8") | ![sprite_c9](contra_sprites/sprite_c9.png?raw=true "sprite_c9") | ![sprite_ca](contra_sprites/sprite_ca.png?raw=true "sprite_ca") | ![sprite_cb](contra_sprites/sprite_cb.png?raw=true "sprite_cb") | ![sprite_cc](contra_sprites/sprite_cc.png?raw=true "sprite_cc") | ![sprite_cd](contra_sprites/sprite_cd.png?raw=true "sprite_cd") | ![sprite_ce](contra_sprites/sprite_ce.png?raw=true "sprite_ce") | ![sprite_cf](contra_sprites/sprite_cf.png?raw=true "sprite_cf") | + +## Probotector +| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f | +|---|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| +| 0 | | | ![sprite_02](probotector_sprites/sprite_02.png?raw=true "sprite_02") ![sprite_02_p2](probotector_sprites/sprite_02_p2.png?raw=true "sprite_02_p2") | ![sprite_03](probotector_sprites/sprite_03.png?raw=true "sprite_03") ![sprite_03_p2](probotector_sprites/sprite_03_p2.png?raw=true "sprite_03_p2") | ![sprite_04](probotector_sprites/sprite_04.png?raw=true "sprite_04") ![sprite_04_p2](probotector_sprites/sprite_04_p2.png?raw=true "sprite_04_p2") | ![sprite_05](probotector_sprites/sprite_05.png?raw=true "sprite_05") ![sprite_05_p2](probotector_sprites/sprite_05_p2.png?raw=true "sprite_05_p2") | ![sprite_06](probotector_sprites/sprite_06.png?raw=true "sprite_06") ![sprite_06_p2](probotector_sprites/sprite_06_p2.png?raw=true "sprite_06_p2") | ![sprite_07](contra_sprites/sprite_07.png?raw=true "sprite_07") | ![sprite_08](probotector_sprites/sprite_08.png?raw=true "sprite_08") ![sprite_08_p2](probotector_sprites/sprite_08_p2.png?raw=true "sprite_08_p2") | ![sprite_09](probotector_sprites/sprite_09.png?raw=true "sprite_09") ![sprite_09_p2](probotector_sprites/sprite_09_p2.png?raw=true "sprite_09_p2") | ![sprite_0a](probotector_sprites/sprite_0a.png?raw=true "sprite_0a") ![sprite_0a_p2](probotector_sprites/sprite_0a_p2.png?raw=true "sprite_0a_p2") | ![sprite_0b](probotector_sprites/sprite_0b.png?raw=true "sprite_0b") ![sprite_0b_p2](probotector_sprites/sprite_0b_p2.png?raw=true "sprite_0b_p2") | ![sprite_0c](probotector_sprites/sprite_0c.png?raw=true "sprite_0c") ![sprite_0c_p2](probotector_sprites/sprite_0c_p2.png?raw=true "sprite_0c_p2") | ![sprite_0d](probotector_sprites/sprite_0d.png?raw=true "sprite_0d") ![sprite_0d_p2](probotector_sprites/sprite_0d_p2.png?raw=true "sprite_0d_p2") | ![sprite_0e](probotector_sprites/sprite_0e.png?raw=true "sprite_0e") ![sprite_0e_p2](probotector_sprites/sprite_0e_p2.png?raw=true "sprite_0e_p2") | ![sprite_0f](probotector_sprites/sprite_0f.png?raw=true "sprite_0f") ![sprite_0f_p2](probotector_sprites/sprite_0f_p2.png?raw=true "sprite_0f_p2") | +| 1 | ![sprite_10](probotector_sprites/sprite_10.png?raw=true "sprite_10") ![sprite_10_p2](probotector_sprites/sprite_10_p2.png?raw=true "sprite_10_p2") | ![sprite_11](probotector_sprites/sprite_11.png?raw=true "sprite_11") ![sprite_11_p2](probotector_sprites/sprite_11_p2.png?raw=true "sprite_11_p2") | ![sprite_12](probotector_sprites/sprite_12.png?raw=true "sprite_12") ![sprite_12_p2](probotector_sprites/sprite_12_p2.png?raw=true "sprite_12_p2") | ![sprite_13](probotector_sprites/sprite_13.png?raw=true "sprite_13") ![sprite_13_p2](probotector_sprites/sprite_13_p2.png?raw=true "sprite_13_p2") | ![sprite_14](probotector_sprites/sprite_14.png?raw=true "sprite_14") ![sprite_14_p2](probotector_sprites/sprite_14_p2.png?raw=true "sprite_14_p2") | ![sprite_15](probotector_sprites/sprite_15.png?raw=true "sprite_15") ![sprite_15_p2](probotector_sprites/sprite_15_p2.png?raw=true "sprite_15_p2") | ![sprite_16](probotector_sprites/sprite_16.png?raw=true "sprite_16") ![sprite_16_p2](probotector_sprites/sprite_16_p2.png?raw=true "sprite_16_p2") | ![sprite_17](probotector_sprites/sprite_17.png?raw=true "sprite_17") ![sprite_17_p2](probotector_sprites/sprite_17_p2.png?raw=true "sprite_17_p2") | ![sprite_18](probotector_sprites/sprite_18.png?raw=true "sprite_18") ![sprite_18](probotector_sprites/sprite_18_p2.png?raw=true "sprite_18_p2") | ![sprite_19](probotector_sprites/sprite_19.png?raw=true "sprite_19") ![sprite_19](probotector_sprites/sprite_19_p2.png?raw=true "sprite_19_p2") | ![sprite_1a](probotector_sprites/sprite_1a.png?raw=true "sprite_1a") ![sprite_1a](probotector_sprites/sprite_1a_p2.png?raw=true "sprite_1a_p2") | ![sprite_1b](probotector_sprites/sprite_1b.png?raw=true "sprite_1b") ![sprite_1b_p2](probotector_sprites/sprite_1b_p2.png?raw=true "sprite_1b_p2") | ![sprite_1c](probotector_sprites/sprite_1c.png?raw=true "sprite_1c") ![sprite_1c](probotector_sprites/sprite_1c_p2.png?raw=true "sprite_1c_p2") | ![sprite_1d](probotector_sprites/sprite_1d.png?raw=true "sprite_1d") ![sprite_1d](probotector_sprites/sprite_1d_p2.png?raw=true "sprite_1d_p2") | ![sprite_1e](probotector_sprites/sprite_1e.png?raw=true "sprite_1e") | ![sprite_1f](contra_sprites/sprite_1f.png?raw=true "sprite_1f") | +| 2 | ![sprite_20](contra_sprites/sprite_20.png?raw=true "sprite_20") | ![sprite_21](contra_sprites/sprite_21.png?raw=true "sprite_21") | ![sprite_22](contra_sprites/sprite_22.png?raw=true "sprite_22") | ![sprite_23](contra_sprites/sprite_23.png?raw=true "sprite_23") | ![sprite_24](contra_sprites/sprite_24.png?raw=true "sprite_24") | ![sprite_25](contra_sprites/sprite_25.png?raw=true "sprite_25") | ![sprite_26](probotector_sprites/sprite_26.png?raw=true "sprite_26") | ![sprite_27](probotector_sprites/sprite_27.png?raw=true "sprite_27") | ![sprite_28](probotector_sprites/sprite_28.png?raw=true "sprite_28") | ![sprite_29](probotector_sprites/sprite_29.png?raw=true "sprite_29") | ![sprite_2a](probotector_sprites/sprite_2a.png?raw=true "sprite_2a") | ![sprite_2b](probotector_sprites/sprite_2b.png?raw=true "sprite_2b") | ![sprite_2c](probotector_sprites/sprite_2c.png?raw=true "sprite_2c") | ![sprite_2d](probotector_sprites/sprite_2d.png?raw=true "sprite_2d") | | ![sprite_2f](contra_sprites/sprite_2f.png?raw=true "sprite_2f") | +| 3 | ![sprite_30](contra_sprites/sprite_30.png?raw=true "sprite_30") | ![sprite_31](contra_sprites/sprite_31.png?raw=true "sprite_31") | ![sprite_32](contra_sprites/sprite_32.png?raw=true "sprite_32") | ![sprite_33](contra_sprites/sprite_33.png?raw=true "sprite_33") | ![sprite_34](contra_sprites/sprite_34.png?raw=true "sprite_34") | ![sprite_35](contra_sprites/sprite_35.png?raw=true "sprite_35") | ![sprite_36](contra_sprites/sprite_36.png?raw=true "sprite_36") | ![sprite_37](contra_sprites/sprite_37.png?raw=true "sprite_37") | ![sprite_38](contra_sprites/sprite_38.png?raw=true "sprite_38") | ![sprite_39](contra_sprites/sprite_39.png?raw=true "sprite_39") | ![sprite_3a](contra_sprites/sprite_3a.png?raw=true "sprite_3a") | ![sprite_3b](probotector_sprites/sprite_3b.png?raw=true "sprite_3b") | ![sprite_3c](probotector_sprites/sprite_3c.png?raw=true "sprite_3c") | ![sprite_3d](probotector_sprites/sprite_3d.png?raw=true "sprite_3d") | ![sprite_3e](probotector_sprites/sprite_3e.png?raw=true "sprite_3e") | ![sprite_3f](probotector_sprites/sprite_3f.png?raw=true "sprite_3f") | +| 4 | ![sprite_40](probotector_sprites/sprite_40.png?raw=true "sprite_40") | ![sprite_41](probotector_sprites/sprite_41.png?raw=true "sprite_41") | ![sprite_42](probotector_sprites/sprite_42.png?raw=true "sprite_42") | ![sprite_43](probotector_sprites/sprite_43.png?raw=true "sprite_43") | ![sprite_44](probotector_sprites/sprite_44.png?raw=true "sprite_44") | ![sprite_45](probotector_sprites/sprite_45.png?raw=true "sprite_45") | ![sprite_46](probotector_sprites/sprite_46.png?raw=true "sprite_46") | ![sprite_47](contra_sprites/sprite_47.png?raw=true "sprite_47") | ![sprite_48](contra_sprites/sprite_48.png?raw=true "sprite_48") | ![sprite_49](contra_sprites/sprite_49.png?raw=true "sprite_49") | ![sprite_4a](contra_sprites/sprite_4a.png?raw=true "sprite_4a") | ![sprite_4b](probotector_sprites/sprite_4b.png?raw=true "sprite_4b") | ![sprite_4c](probotector_sprites/sprite_4c.png?raw=true "sprite_4c") | ![sprite_4d](probotector_sprites/sprite_4d.png?raw=true "sprite_4d") ![sprite_4d](probotector_sprites/sprite_4d_alt.png?raw=true "sprite_4d_alt") | ![sprite_4e](contra_sprites/sprite_4e.gif?raw=true "sprite_4e") | | +| 5 | ![sprite_50](probotector_sprites/sprite_50.png?raw=true "sprite_50") ![sprite_50_p2](probotector_sprites/sprite_50_p2.png?raw=true "sprite_50_p2") | ![sprite_51](probotector_sprites/sprite_51.png?raw=true "sprite_51") ![sprite_51_p2](probotector_sprites/sprite_51_p2.png?raw=true "sprite_51_p2") | ![sprite_52](probotector_sprites/sprite_52.png?raw=true "sprite_52") ![sprite_52_p2](probotector_sprites/sprite_52_p2.png?raw=true "sprite_52_p2") | ![sprite_53](probotector_sprites/sprite_53.png?raw=true "sprite_53") ![sprite_53_p2](probotector_sprites/sprite_53_p2.png?raw=true "sprite_53_p2") | ![sprite_54](probotector_sprites/sprite_54.png?raw=true "sprite_54") ![sprite_54_p2](probotector_sprites/sprite_54_p2.png?raw=true "sprite_54_p2") | ![sprite_55](probotector_sprites/sprite_55.png?raw=true "sprite_55") ![sprite_55_p2](probotector_sprites/sprite_55_p2.png?raw=true "sprite_55_p2") | ![sprite_56](probotector_sprites/sprite_56.png?raw=true "sprite_56") ![sprite_56_p2](probotector_sprites/sprite_56_p2.png?raw=true "sprite_56_p2") | ![sprite_57](probotector_sprites/sprite_57.png?raw=true "sprite_57") ![sprite_57_p2](probotector_sprites/sprite_57_p2.png?raw=true "sprite_57_p2") | ![sprite_58](probotector_sprites/sprite_58.png?raw=true "sprite_58") ![sprite_58_p2](probotector_sprites/sprite_58_p2.png?raw=true "sprite_58_p2") | | | | | ![sprite_5d](probotector_sprites/sprite_5d.png?raw=true "sprite_5d") | ![sprite_5e](probotector_sprites/sprite_5e.png?raw=true "sprite_5e") | ![sprite_5f](probotector_sprites/sprite_5f.png?raw=true "sprite_5f") | +| 6 | ![sprite_60](probotector_sprites/sprite_60.png?raw=true "sprite_60") | ![sprite_61](probotector_sprites/sprite_61.png?raw=true "sprite_61") | ![sprite_62](probotector_sprites/sprite_62.png?raw=true "sprite_62") | ![sprite_63](probotector_sprites/sprite_63.png?raw=true "sprite_63") | ![sprite_64](probotector_sprites/sprite_64.png?raw=true "sprite_64") | | | | ![sprite_68](probotector_sprites/sprite_68.png?raw=true "sprite_68") | ![sprite_69](probotector_sprites/sprite_69.png?raw=true "sprite_69") | ![sprite_6a](probotector_sprites/sprite_6a.png?raw=true "sprite_6a") | ![sprite_6b](probotector_sprites/sprite_6b.png?raw=true "sprite_6b") | ![sprite_6c](probotector_sprites/sprite_6c.png?raw=true "sprite_6c") | ![sprite_6d](probotector_sprites/sprite_6d.png?raw=true "sprite_6d") | ![sprite_6e](probotector_sprites/sprite_6e.png?raw=true "sprite_6e") | ![sprite_6f](probotector_sprites/sprite_6f.png?raw=true "sprite_6f") | +| 7 | ![sprite_70](probotector_sprites/sprite_70.png?raw=true "sprite_70") | ![sprite_71](probotector_sprites/sprite_71.png?raw=true "sprite_71") | ![sprite_72](contra_sprites/sprite_72.png?raw=true "sprite_72") | ![sprite_73](probotector_sprites/sprite_73.png?raw=true "sprite_73") | ![sprite_74](probotector_sprites/sprite_74.png?raw=true "sprite_74") | ![sprite_75](probotector_sprites/sprite_75.png?raw=true "sprite_75") | ![sprite_76](probotector_sprites/sprite_76.png?raw=true "sprite_76") | ![sprite_77](probotector_sprites/sprite_77.png?raw=true "sprite_77") | ![sprite_78](probotector_sprites/sprite_78.png?raw=true "sprite_78") | ![sprite_79](contra_sprites/sprite_79.png?raw=true "sprite_79") | ![sprite_7a](probotector_sprites/sprite_7a.png?raw=true "sprite_7a") | ![sprite_7b](probotector_sprites/sprite_7b.png?raw=true "sprite_7b") | ![sprite_7c](probotector_sprites/sprite_7c.png?raw=true "sprite_7c") | ![sprite_7d](probotector_sprites/sprite_7d.png?raw=true "sprite_7d") | ![sprite_7e](probotector_sprites/sprite_7e.png?raw=true "sprite_7e") | | +| 8 | | | ![sprite_82](contra_sprites/sprite_82.png?raw=true "sprite_82") | ![sprite_83](contra_sprites/sprite_83.png?raw=true "sprite_83") | ![sprite_84](contra_sprites/sprite_84.png?raw=true "sprite_84") | ![sprite_85](probotector_sprites/sprite_85.png?raw=true "sprite_85") | ![sprite_86](probotector_sprites/sprite_86.png?raw=true "sprite_86") | ![sprite_87](probotector_sprites/sprite_87.png?raw=true "sprite_87") | ![sprite_88](probotector_sprites/sprite_88.png?raw=true "sprite_88") | ![sprite_89](probotector_sprites/sprite_89.png?raw=true "sprite_89") | ![sprite_8a](probotector_sprites/sprite_8a.png?raw=true "sprite_8a") | ![sprite_8b](probotector_sprites/sprite_8b.png?raw=true "sprite_8b") | ![sprite_8c](probotector_sprites/sprite_8c.png?raw=true "sprite_8c") | ![sprite_8d](probotector_sprites/sprite_8d.png?raw=true "sprite_8d") | ![sprite_8e](probotector_sprites/sprite_8e.png?raw=true "sprite_8e") | ![sprite_8f](probotector_sprites/sprite_8f.png?raw=true "sprite_8f") | +| 9 | ![sprite_90](probotector_sprites/sprite_90.png?raw=true "sprite_90") | ![sprite_91](probotector_sprites/sprite_91.png?raw=true "sprite_91") ![sprite_91_p2](probotector_sprites/sprite_91_p2.png?raw=true "sprite_91_p2") | ![sprite_92](contra_sprites/sprite_92.png?raw=true "sprite_92") | ![sprite_93](probotector_sprites/sprite_93.png?raw=true "sprite_93") | ![sprite_94](probotector_sprites/sprite_94.png?raw=true "sprite_94") | ![sprite_95](probotector_sprites/sprite_95.png?raw=true "sprite_95") | ![sprite_96](probotector_sprites/sprite_96.png?raw=true "sprite_96") | ![sprite_97](probotector_sprites/sprite_97.png?raw=true "sprite_97") | ![sprite_98](probotector_sprites/sprite_98.png?raw=true "sprite_98") | ![sprite_99](contra_sprites/sprite_99.png?raw=true "sprite_99") | ![sprite_9a](contra_sprites/sprite_9a.png?raw=true "sprite_9a") | ![sprite_9b](contra_sprites/sprite_9b.png?raw=true "sprite_9b") | ![sprite_9c](contra_sprites/sprite_9c.png?raw=true "sprite_9c") | ![sprite_9d](contra_sprites/sprite_9d.png?raw=true "sprite_9d") | ![sprite_9e](contra_sprites/sprite_9e.png?raw=true "sprite_9e") | ![sprite_9f](contra_sprites/sprite_9f.png?raw=true "sprite_9f") | +| a | ![sprite_a0](contra_sprites/sprite_a0.png?raw=true "sprite_a0") | ![sprite_a1](contra_sprites/sprite_a1.png?raw=true "sprite_a1") | ![sprite_a2](contra_sprites/sprite_a2.png?raw=true "sprite_a2") | ![sprite_a3](contra_sprites/sprite_a3.png?raw=true "sprite_a3") | ![sprite_a4](contra_sprites/sprite_a4.png?raw=true "sprite_a4") | ![sprite_a5](contra_sprites/sprite_a5.png?raw=true "sprite_a5") | ![sprite_a6](contra_sprites/sprite_a6.png?raw=true "sprite_a6") | ![sprite_a7](contra_sprites/sprite_a7.png?raw=true "sprite_a7") | ![sprite_a8](contra_sprites/sprite_a8.png?raw=true "sprite_a8") | ![sprite_a9](contra_sprites/sprite_a9.png?raw=true "sprite_a9") | ![sprite_aa](contra_sprites/sprite_aa.png?raw=true "sprite_aa") | ![sprite_ab](probotector_sprites/sprite_ab.png?raw=true "sprite_ab") | ![sprite_ac](contra_sprites/sprite_ac.png?raw=true "sprite_ac") | ![sprite_ad](contra_sprites/sprite_ad.png?raw=true "sprite_ad") | ![sprite_ae](contra_sprites/sprite_ae.png?raw=true "sprite_ae") | ![sprite_af](contra_sprites/sprite_af.png?raw=true "sprite_af") | +| b | ![sprite_b0](contra_sprites/sprite_b0.png?raw=true "sprite_b0") | ![sprite_b1](contra_sprites/sprite_b1.png?raw=true "sprite_b1") | ![sprite_b2](contra_sprites/sprite_b2.png?raw=true "sprite_b2") | ![sprite_b3](contra_sprites/sprite_b3.png?raw=true "sprite_b3") | ![sprite_b4](contra_sprites/sprite_b4.png?raw=true "sprite_b4") | ![sprite_b5](contra_sprites/sprite_b5.png?raw=true "sprite_b5") | ![sprite_b6](contra_sprites/sprite_b6.png?raw=true "sprite_b6") | ![sprite_b7](probotector_sprites/sprite_b7.png?raw=true "sprite_b7") | ![sprite_b8](probotector_sprites/sprite_b8.png?raw=true "sprite_b8") | ![sprite_b9](probotector_sprites/sprite_b9.png?raw=true "sprite_b9") | ![sprite_ba](probotector_sprites/sprite_ba.png?raw=true "sprite_ba") | ![sprite_bb](probotector_sprites/sprite_bb.png?raw=true "sprite_bb") | ![sprite_bc](probotector_sprites/sprite_bc.png?raw=true "sprite_bc") | ![sprite_bd](probotector_sprites/sprite_bd.png?raw=true "sprite_bd") | ![sprite_be](probotector_sprites/sprite_be.png?raw=true "sprite_be") | ![sprite_bf](contra_sprites/sprite_bf.png?raw=true "sprite_bf") | +| c | ![sprite_c0](contra_sprites/sprite_c0.png?raw=true "sprite_c0") | ![sprite_c1](contra_sprites/sprite_c1.png?raw=true "sprite_c1") | ![sprite_c2](contra_sprites/sprite_c2.png?raw=true "sprite_c2") | ![sprite_c3](probotector_sprites/sprite_c3.png?raw=true "sprite_c3") | ![sprite_c4](probotector_sprites/sprite_c4.png?raw=true "sprite_c4") | ![sprite_c5](probotector_sprites/sprite_c5.png?raw=true "sprite_c5") | ![sprite_c6](probotector_sprites/sprite_c6.png?raw=true "sprite_c6") | ![sprite_c7](probotector_sprites/sprite_c7.png?raw=true "sprite_c7") | ![sprite_c8](probotector_sprites/sprite_c8.png?raw=true "sprite_c8") | ![sprite_c9](probotector_sprites/sprite_c9.png?raw=true "sprite_c9") | ![sprite_ca](probotector_sprites/sprite_ca.png?raw=true "sprite_ca") | ![sprite_cb](probotector_sprites/sprite_cb.png?raw=true "sprite_cb") | | | | ![sprite_cf](contra_sprites/sprite_cf.png?raw=true "sprite_cf") | + +For a list of sprites that are different than _Contra_ (US), see the +`probotector_sprites` directory. # Hud Sprites +# Contra * Player 1 - * ![player_1_lives_medal](player_1_lives_medal.png?raw=true "player_1_lives_medal") - * ![player_1_game_over](player_1_game_over.png?raw=true "player_1_game_over") + * ![player_1_lives_medal](contra_sprites/player_1_lives_medal.png?raw=true "player_1_lives_medal") + * ![player_1_game_over](contra_sprites/player_1_game_over.png?raw=true "player_1_game_over") * Player 2 - * ![player_2_lives_medal](player_2_lives_medal.png?raw=true "player_2_lives_medal") - * ![player_2_game_over](player_2_game_over.png?raw=true "player_2_game_over") + * ![player_2_lives_medal](contra_sprites/player_2_lives_medal.png?raw=true "player_2_lives_medal") + * ![player_2_game_over](contra_sprites/player_2_game_over.png?raw=true "player_2_game_over") + +# Probotector + +* Player 1 + * ![player_1_lives_medal](probotector_sprites/player_1_lives_medal.png?raw=true "player_1_lives_medal") + * ![player_1_game_over](probotector_sprites/player_1_game_over.png?raw=true "player_1_game_over") +* Player 2 + * ![player_2_lives_medal](probotector_sprites/player_2_lives_medal.png?raw=true "player_2_lives_medal") + * ![player_2_game_over](probotector_sprites/player_2_game_over.png?raw=true "player_2_game_over") # Sprites Not Used In Game -* ![sprite_78](sprite_78.png?raw=true "sprite_78") (`sprite_78`) exists in the +* ![sprite_78](contra_sprites/sprite_78.png?raw=true "sprite_78") (`sprite_78`) exists in the game code, but isn't used. It is identical to `sprite_74` and that is what is used insead. * `sprite_59`, `sprite_5a`, `sprite_5b`, `sprite_5c`, `sprite_65`, `sprite_66`, and `sprite_67` are all empty and not used in the game. -* `sprite_80` and `sprite_81` are defined in the game, but never used so I can't - tell which pattern tiles they are supposed to utilize. \ No newline at end of file +* `sprite_2e`, `sprite_80` and `sprite_81` are defined in the game, but never + used so I can't tell which pattern tiles they are supposed to utilize. +* `sprite_b7` is identical to `sprite_b8`, but never used. + +# Equivalent Sprites + +* `sprite_82` and `sprite_84` are equal +* `sprite_83` and `sprite_92` are equal +* `sprite_b7` and `sprite_b8` are equal \ No newline at end of file diff --git a/docs/sprite_library/player_1_game_over.png b/docs/sprite_library/contra_sprites/player_1_game_over.png similarity index 100% rename from docs/sprite_library/player_1_game_over.png rename to docs/sprite_library/contra_sprites/player_1_game_over.png diff --git a/docs/sprite_library/player_1_lives_medal.png b/docs/sprite_library/contra_sprites/player_1_lives_medal.png similarity index 100% rename from docs/sprite_library/player_1_lives_medal.png rename to docs/sprite_library/contra_sprites/player_1_lives_medal.png diff --git a/docs/sprite_library/player_2_game_over.png b/docs/sprite_library/contra_sprites/player_2_game_over.png similarity index 100% rename from docs/sprite_library/player_2_game_over.png rename to docs/sprite_library/contra_sprites/player_2_game_over.png diff --git a/docs/sprite_library/player_2_lives_medal.png b/docs/sprite_library/contra_sprites/player_2_lives_medal.png similarity index 100% rename from docs/sprite_library/player_2_lives_medal.png rename to docs/sprite_library/contra_sprites/player_2_lives_medal.png diff --git a/docs/sprite_library/sprite_02.png b/docs/sprite_library/contra_sprites/sprite_02.png similarity index 100% rename from docs/sprite_library/sprite_02.png rename to docs/sprite_library/contra_sprites/sprite_02.png diff --git a/docs/sprite_library/sprite_02_p2.png b/docs/sprite_library/contra_sprites/sprite_02_p2.png similarity index 100% rename from docs/sprite_library/sprite_02_p2.png rename to docs/sprite_library/contra_sprites/sprite_02_p2.png diff --git a/docs/sprite_library/sprite_03.png b/docs/sprite_library/contra_sprites/sprite_03.png similarity index 100% rename from docs/sprite_library/sprite_03.png rename to docs/sprite_library/contra_sprites/sprite_03.png diff --git a/docs/sprite_library/sprite_03_p2.png b/docs/sprite_library/contra_sprites/sprite_03_p2.png similarity index 100% rename from docs/sprite_library/sprite_03_p2.png rename to docs/sprite_library/contra_sprites/sprite_03_p2.png diff --git a/docs/sprite_library/sprite_04.png b/docs/sprite_library/contra_sprites/sprite_04.png similarity index 100% rename from docs/sprite_library/sprite_04.png rename to docs/sprite_library/contra_sprites/sprite_04.png diff --git a/docs/sprite_library/sprite_04_p2.png b/docs/sprite_library/contra_sprites/sprite_04_p2.png similarity index 100% rename from docs/sprite_library/sprite_04_p2.png rename to docs/sprite_library/contra_sprites/sprite_04_p2.png diff --git a/docs/sprite_library/sprite_05.png b/docs/sprite_library/contra_sprites/sprite_05.png similarity index 100% rename from docs/sprite_library/sprite_05.png rename to docs/sprite_library/contra_sprites/sprite_05.png diff --git a/docs/sprite_library/sprite_05_p2.png b/docs/sprite_library/contra_sprites/sprite_05_p2.png similarity index 100% rename from docs/sprite_library/sprite_05_p2.png rename to docs/sprite_library/contra_sprites/sprite_05_p2.png diff --git a/docs/sprite_library/sprite_06.png b/docs/sprite_library/contra_sprites/sprite_06.png similarity index 100% rename from docs/sprite_library/sprite_06.png rename to docs/sprite_library/contra_sprites/sprite_06.png diff --git a/docs/sprite_library/sprite_06_p2.png b/docs/sprite_library/contra_sprites/sprite_06_p2.png similarity index 100% rename from docs/sprite_library/sprite_06_p2.png rename to docs/sprite_library/contra_sprites/sprite_06_p2.png diff --git a/docs/sprite_library/sprite_07.png b/docs/sprite_library/contra_sprites/sprite_07.png similarity index 100% rename from docs/sprite_library/sprite_07.png rename to docs/sprite_library/contra_sprites/sprite_07.png diff --git a/docs/sprite_library/sprite_08.png b/docs/sprite_library/contra_sprites/sprite_08.png similarity index 100% rename from docs/sprite_library/sprite_08.png rename to docs/sprite_library/contra_sprites/sprite_08.png diff --git a/docs/sprite_library/sprite_08_p2.png b/docs/sprite_library/contra_sprites/sprite_08_p2.png similarity index 100% rename from docs/sprite_library/sprite_08_p2.png rename to docs/sprite_library/contra_sprites/sprite_08_p2.png diff --git a/docs/sprite_library/sprite_09.png b/docs/sprite_library/contra_sprites/sprite_09.png similarity index 100% rename from docs/sprite_library/sprite_09.png rename to docs/sprite_library/contra_sprites/sprite_09.png diff --git a/docs/sprite_library/sprite_09_p2.png b/docs/sprite_library/contra_sprites/sprite_09_p2.png similarity index 100% rename from docs/sprite_library/sprite_09_p2.png rename to docs/sprite_library/contra_sprites/sprite_09_p2.png diff --git a/docs/sprite_library/sprite_0a.png b/docs/sprite_library/contra_sprites/sprite_0a.png similarity index 100% rename from docs/sprite_library/sprite_0a.png rename to docs/sprite_library/contra_sprites/sprite_0a.png diff --git a/docs/sprite_library/sprite_0a_p2.png b/docs/sprite_library/contra_sprites/sprite_0a_p2.png similarity index 100% rename from docs/sprite_library/sprite_0a_p2.png rename to docs/sprite_library/contra_sprites/sprite_0a_p2.png diff --git a/docs/sprite_library/sprite_0b.png b/docs/sprite_library/contra_sprites/sprite_0b.png similarity index 100% rename from docs/sprite_library/sprite_0b.png rename to docs/sprite_library/contra_sprites/sprite_0b.png diff --git a/docs/sprite_library/sprite_0b_p2.png b/docs/sprite_library/contra_sprites/sprite_0b_p2.png similarity index 100% rename from docs/sprite_library/sprite_0b_p2.png rename to docs/sprite_library/contra_sprites/sprite_0b_p2.png diff --git a/docs/sprite_library/sprite_0c.png b/docs/sprite_library/contra_sprites/sprite_0c.png similarity index 100% rename from docs/sprite_library/sprite_0c.png rename to docs/sprite_library/contra_sprites/sprite_0c.png diff --git a/docs/sprite_library/sprite_0c_p2.png b/docs/sprite_library/contra_sprites/sprite_0c_p2.png similarity index 100% rename from docs/sprite_library/sprite_0c_p2.png rename to docs/sprite_library/contra_sprites/sprite_0c_p2.png diff --git a/docs/sprite_library/sprite_0d.png b/docs/sprite_library/contra_sprites/sprite_0d.png similarity index 100% rename from docs/sprite_library/sprite_0d.png rename to docs/sprite_library/contra_sprites/sprite_0d.png diff --git a/docs/sprite_library/sprite_0d_p2.png b/docs/sprite_library/contra_sprites/sprite_0d_p2.png similarity index 100% rename from docs/sprite_library/sprite_0d_p2.png rename to docs/sprite_library/contra_sprites/sprite_0d_p2.png diff --git a/docs/sprite_library/sprite_0e.png b/docs/sprite_library/contra_sprites/sprite_0e.png similarity index 100% rename from docs/sprite_library/sprite_0e.png rename to docs/sprite_library/contra_sprites/sprite_0e.png diff --git a/docs/sprite_library/sprite_0e_p2.png b/docs/sprite_library/contra_sprites/sprite_0e_p2.png similarity index 100% rename from docs/sprite_library/sprite_0e_p2.png rename to docs/sprite_library/contra_sprites/sprite_0e_p2.png diff --git a/docs/sprite_library/sprite_0f.png b/docs/sprite_library/contra_sprites/sprite_0f.png similarity index 100% rename from docs/sprite_library/sprite_0f.png rename to docs/sprite_library/contra_sprites/sprite_0f.png diff --git a/docs/sprite_library/sprite_0f_p2.png b/docs/sprite_library/contra_sprites/sprite_0f_p2.png similarity index 100% rename from docs/sprite_library/sprite_0f_p2.png rename to docs/sprite_library/contra_sprites/sprite_0f_p2.png diff --git a/docs/sprite_library/sprite_10.png b/docs/sprite_library/contra_sprites/sprite_10.png similarity index 100% rename from docs/sprite_library/sprite_10.png rename to docs/sprite_library/contra_sprites/sprite_10.png diff --git a/docs/sprite_library/sprite_10_p2.png b/docs/sprite_library/contra_sprites/sprite_10_p2.png similarity index 100% rename from docs/sprite_library/sprite_10_p2.png rename to docs/sprite_library/contra_sprites/sprite_10_p2.png diff --git a/docs/sprite_library/sprite_11.png b/docs/sprite_library/contra_sprites/sprite_11.png similarity index 100% rename from docs/sprite_library/sprite_11.png rename to docs/sprite_library/contra_sprites/sprite_11.png diff --git a/docs/sprite_library/sprite_11_p2.png b/docs/sprite_library/contra_sprites/sprite_11_p2.png similarity index 100% rename from docs/sprite_library/sprite_11_p2.png rename to docs/sprite_library/contra_sprites/sprite_11_p2.png diff --git a/docs/sprite_library/sprite_12.png b/docs/sprite_library/contra_sprites/sprite_12.png similarity index 100% rename from docs/sprite_library/sprite_12.png rename to docs/sprite_library/contra_sprites/sprite_12.png diff --git a/docs/sprite_library/sprite_12_p2.png b/docs/sprite_library/contra_sprites/sprite_12_p2.png similarity index 100% rename from docs/sprite_library/sprite_12_p2.png rename to docs/sprite_library/contra_sprites/sprite_12_p2.png diff --git a/docs/sprite_library/sprite_13.png b/docs/sprite_library/contra_sprites/sprite_13.png similarity index 100% rename from docs/sprite_library/sprite_13.png rename to docs/sprite_library/contra_sprites/sprite_13.png diff --git a/docs/sprite_library/sprite_13_p2.png b/docs/sprite_library/contra_sprites/sprite_13_p2.png similarity index 100% rename from docs/sprite_library/sprite_13_p2.png rename to docs/sprite_library/contra_sprites/sprite_13_p2.png diff --git a/docs/sprite_library/sprite_14.png b/docs/sprite_library/contra_sprites/sprite_14.png similarity index 100% rename from docs/sprite_library/sprite_14.png rename to docs/sprite_library/contra_sprites/sprite_14.png diff --git a/docs/sprite_library/sprite_14_p2.png b/docs/sprite_library/contra_sprites/sprite_14_p2.png similarity index 100% rename from docs/sprite_library/sprite_14_p2.png rename to docs/sprite_library/contra_sprites/sprite_14_p2.png diff --git a/docs/sprite_library/sprite_15.png b/docs/sprite_library/contra_sprites/sprite_15.png similarity index 100% rename from docs/sprite_library/sprite_15.png rename to docs/sprite_library/contra_sprites/sprite_15.png diff --git a/docs/sprite_library/sprite_15_p2.png b/docs/sprite_library/contra_sprites/sprite_15_p2.png similarity index 100% rename from docs/sprite_library/sprite_15_p2.png rename to docs/sprite_library/contra_sprites/sprite_15_p2.png diff --git a/docs/sprite_library/sprite_16.png b/docs/sprite_library/contra_sprites/sprite_16.png similarity index 100% rename from docs/sprite_library/sprite_16.png rename to docs/sprite_library/contra_sprites/sprite_16.png diff --git a/docs/sprite_library/sprite_16_p2.png b/docs/sprite_library/contra_sprites/sprite_16_p2.png similarity index 100% rename from docs/sprite_library/sprite_16_p2.png rename to docs/sprite_library/contra_sprites/sprite_16_p2.png diff --git a/docs/sprite_library/sprite_17.png b/docs/sprite_library/contra_sprites/sprite_17.png similarity index 100% rename from docs/sprite_library/sprite_17.png rename to docs/sprite_library/contra_sprites/sprite_17.png diff --git a/docs/sprite_library/sprite_17_p2.png b/docs/sprite_library/contra_sprites/sprite_17_p2.png similarity index 100% rename from docs/sprite_library/sprite_17_p2.png rename to docs/sprite_library/contra_sprites/sprite_17_p2.png diff --git a/docs/sprite_library/sprite_18.png b/docs/sprite_library/contra_sprites/sprite_18.png similarity index 100% rename from docs/sprite_library/sprite_18.png rename to docs/sprite_library/contra_sprites/sprite_18.png diff --git a/docs/sprite_library/sprite_19.png b/docs/sprite_library/contra_sprites/sprite_19.png similarity index 100% rename from docs/sprite_library/sprite_19.png rename to docs/sprite_library/contra_sprites/sprite_19.png diff --git a/docs/sprite_library/sprite_1a.png b/docs/sprite_library/contra_sprites/sprite_1a.png similarity index 100% rename from docs/sprite_library/sprite_1a.png rename to docs/sprite_library/contra_sprites/sprite_1a.png diff --git a/docs/sprite_library/sprite_1b.png b/docs/sprite_library/contra_sprites/sprite_1b.png similarity index 100% rename from docs/sprite_library/sprite_1b.png rename to docs/sprite_library/contra_sprites/sprite_1b.png diff --git a/docs/sprite_library/sprite_1c.png b/docs/sprite_library/contra_sprites/sprite_1c.png similarity index 100% rename from docs/sprite_library/sprite_1c.png rename to docs/sprite_library/contra_sprites/sprite_1c.png diff --git a/docs/sprite_library/sprite_1d.png b/docs/sprite_library/contra_sprites/sprite_1d.png similarity index 100% rename from docs/sprite_library/sprite_1d.png rename to docs/sprite_library/contra_sprites/sprite_1d.png diff --git a/docs/sprite_library/sprite_1e.png b/docs/sprite_library/contra_sprites/sprite_1e.png similarity index 100% rename from docs/sprite_library/sprite_1e.png rename to docs/sprite_library/contra_sprites/sprite_1e.png diff --git a/docs/sprite_library/sprite_1f.png b/docs/sprite_library/contra_sprites/sprite_1f.png similarity index 100% rename from docs/sprite_library/sprite_1f.png rename to docs/sprite_library/contra_sprites/sprite_1f.png diff --git a/docs/sprite_library/sprite_20.png b/docs/sprite_library/contra_sprites/sprite_20.png similarity index 100% rename from docs/sprite_library/sprite_20.png rename to docs/sprite_library/contra_sprites/sprite_20.png diff --git a/docs/sprite_library/sprite_21.png b/docs/sprite_library/contra_sprites/sprite_21.png similarity index 100% rename from docs/sprite_library/sprite_21.png rename to docs/sprite_library/contra_sprites/sprite_21.png diff --git a/docs/sprite_library/sprite_22.png b/docs/sprite_library/contra_sprites/sprite_22.png similarity index 100% rename from docs/sprite_library/sprite_22.png rename to docs/sprite_library/contra_sprites/sprite_22.png diff --git a/docs/sprite_library/sprite_23.png b/docs/sprite_library/contra_sprites/sprite_23.png similarity index 100% rename from docs/sprite_library/sprite_23.png rename to docs/sprite_library/contra_sprites/sprite_23.png diff --git a/docs/sprite_library/sprite_24.png b/docs/sprite_library/contra_sprites/sprite_24.png similarity index 100% rename from docs/sprite_library/sprite_24.png rename to docs/sprite_library/contra_sprites/sprite_24.png diff --git a/docs/sprite_library/sprite_25.png b/docs/sprite_library/contra_sprites/sprite_25.png similarity index 100% rename from docs/sprite_library/sprite_25.png rename to docs/sprite_library/contra_sprites/sprite_25.png diff --git a/docs/sprite_library/sprite_26.png b/docs/sprite_library/contra_sprites/sprite_26.png similarity index 100% rename from docs/sprite_library/sprite_26.png rename to docs/sprite_library/contra_sprites/sprite_26.png diff --git a/docs/sprite_library/sprite_27.png b/docs/sprite_library/contra_sprites/sprite_27.png similarity index 100% rename from docs/sprite_library/sprite_27.png rename to docs/sprite_library/contra_sprites/sprite_27.png diff --git a/docs/sprite_library/sprite_28.png b/docs/sprite_library/contra_sprites/sprite_28.png similarity index 100% rename from docs/sprite_library/sprite_28.png rename to docs/sprite_library/contra_sprites/sprite_28.png diff --git a/docs/sprite_library/sprite_29.png b/docs/sprite_library/contra_sprites/sprite_29.png similarity index 100% rename from docs/sprite_library/sprite_29.png rename to docs/sprite_library/contra_sprites/sprite_29.png diff --git a/docs/sprite_library/sprite_2a.png b/docs/sprite_library/contra_sprites/sprite_2a.png similarity index 100% rename from docs/sprite_library/sprite_2a.png rename to docs/sprite_library/contra_sprites/sprite_2a.png diff --git a/docs/sprite_library/sprite_2b.png b/docs/sprite_library/contra_sprites/sprite_2b.png similarity index 100% rename from docs/sprite_library/sprite_2b.png rename to docs/sprite_library/contra_sprites/sprite_2b.png diff --git a/docs/sprite_library/sprite_2c.png b/docs/sprite_library/contra_sprites/sprite_2c.png similarity index 100% rename from docs/sprite_library/sprite_2c.png rename to docs/sprite_library/contra_sprites/sprite_2c.png diff --git a/docs/sprite_library/sprite_2d.png b/docs/sprite_library/contra_sprites/sprite_2d.png similarity index 100% rename from docs/sprite_library/sprite_2d.png rename to docs/sprite_library/contra_sprites/sprite_2d.png diff --git a/docs/sprite_library/sprite_2f.png b/docs/sprite_library/contra_sprites/sprite_2f.png similarity index 100% rename from docs/sprite_library/sprite_2f.png rename to docs/sprite_library/contra_sprites/sprite_2f.png diff --git a/docs/sprite_library/sprite_30.png b/docs/sprite_library/contra_sprites/sprite_30.png similarity index 100% rename from docs/sprite_library/sprite_30.png rename to docs/sprite_library/contra_sprites/sprite_30.png diff --git a/docs/sprite_library/sprite_31.png b/docs/sprite_library/contra_sprites/sprite_31.png similarity index 100% rename from docs/sprite_library/sprite_31.png rename to docs/sprite_library/contra_sprites/sprite_31.png diff --git a/docs/sprite_library/sprite_32.png b/docs/sprite_library/contra_sprites/sprite_32.png similarity index 100% rename from docs/sprite_library/sprite_32.png rename to docs/sprite_library/contra_sprites/sprite_32.png diff --git a/docs/sprite_library/sprite_33.png b/docs/sprite_library/contra_sprites/sprite_33.png similarity index 100% rename from docs/sprite_library/sprite_33.png rename to docs/sprite_library/contra_sprites/sprite_33.png diff --git a/docs/sprite_library/sprite_34.png b/docs/sprite_library/contra_sprites/sprite_34.png similarity index 100% rename from docs/sprite_library/sprite_34.png rename to docs/sprite_library/contra_sprites/sprite_34.png diff --git a/docs/sprite_library/sprite_35.png b/docs/sprite_library/contra_sprites/sprite_35.png similarity index 100% rename from docs/sprite_library/sprite_35.png rename to docs/sprite_library/contra_sprites/sprite_35.png diff --git a/docs/sprite_library/sprite_36.png b/docs/sprite_library/contra_sprites/sprite_36.png similarity index 100% rename from docs/sprite_library/sprite_36.png rename to docs/sprite_library/contra_sprites/sprite_36.png diff --git a/docs/sprite_library/sprite_37.png b/docs/sprite_library/contra_sprites/sprite_37.png similarity index 100% rename from docs/sprite_library/sprite_37.png rename to docs/sprite_library/contra_sprites/sprite_37.png diff --git a/docs/sprite_library/sprite_38.png b/docs/sprite_library/contra_sprites/sprite_38.png similarity index 100% rename from docs/sprite_library/sprite_38.png rename to docs/sprite_library/contra_sprites/sprite_38.png diff --git a/docs/sprite_library/sprite_39.png b/docs/sprite_library/contra_sprites/sprite_39.png similarity index 100% rename from docs/sprite_library/sprite_39.png rename to docs/sprite_library/contra_sprites/sprite_39.png diff --git a/docs/sprite_library/sprite_3a.png b/docs/sprite_library/contra_sprites/sprite_3a.png similarity index 100% rename from docs/sprite_library/sprite_3a.png rename to docs/sprite_library/contra_sprites/sprite_3a.png diff --git a/docs/sprite_library/sprite_3b.png b/docs/sprite_library/contra_sprites/sprite_3b.png similarity index 100% rename from docs/sprite_library/sprite_3b.png rename to docs/sprite_library/contra_sprites/sprite_3b.png diff --git a/docs/sprite_library/sprite_3c.png b/docs/sprite_library/contra_sprites/sprite_3c.png similarity index 100% rename from docs/sprite_library/sprite_3c.png rename to docs/sprite_library/contra_sprites/sprite_3c.png diff --git a/docs/sprite_library/sprite_3d.png b/docs/sprite_library/contra_sprites/sprite_3d.png similarity index 100% rename from docs/sprite_library/sprite_3d.png rename to docs/sprite_library/contra_sprites/sprite_3d.png diff --git a/docs/sprite_library/sprite_3e.png b/docs/sprite_library/contra_sprites/sprite_3e.png similarity index 100% rename from docs/sprite_library/sprite_3e.png rename to docs/sprite_library/contra_sprites/sprite_3e.png diff --git a/docs/sprite_library/sprite_3f.png b/docs/sprite_library/contra_sprites/sprite_3f.png similarity index 100% rename from docs/sprite_library/sprite_3f.png rename to docs/sprite_library/contra_sprites/sprite_3f.png diff --git a/docs/sprite_library/contra_sprites/sprite_40.png b/docs/sprite_library/contra_sprites/sprite_40.png new file mode 100644 index 0000000..f968ac7 Binary files /dev/null and b/docs/sprite_library/contra_sprites/sprite_40.png differ diff --git a/docs/sprite_library/sprite_41.png b/docs/sprite_library/contra_sprites/sprite_41.png similarity index 100% rename from docs/sprite_library/sprite_41.png rename to docs/sprite_library/contra_sprites/sprite_41.png diff --git a/docs/sprite_library/sprite_42.png b/docs/sprite_library/contra_sprites/sprite_42.png similarity index 100% rename from docs/sprite_library/sprite_42.png rename to docs/sprite_library/contra_sprites/sprite_42.png diff --git a/docs/sprite_library/sprite_43.png b/docs/sprite_library/contra_sprites/sprite_43.png similarity index 100% rename from docs/sprite_library/sprite_43.png rename to docs/sprite_library/contra_sprites/sprite_43.png diff --git a/docs/sprite_library/sprite_44.png b/docs/sprite_library/contra_sprites/sprite_44.png similarity index 100% rename from docs/sprite_library/sprite_44.png rename to docs/sprite_library/contra_sprites/sprite_44.png diff --git a/docs/sprite_library/sprite_45.png b/docs/sprite_library/contra_sprites/sprite_45.png similarity index 100% rename from docs/sprite_library/sprite_45.png rename to docs/sprite_library/contra_sprites/sprite_45.png diff --git a/docs/sprite_library/sprite_46.png b/docs/sprite_library/contra_sprites/sprite_46.png similarity index 100% rename from docs/sprite_library/sprite_46.png rename to docs/sprite_library/contra_sprites/sprite_46.png diff --git a/docs/sprite_library/sprite_47.png b/docs/sprite_library/contra_sprites/sprite_47.png similarity index 100% rename from docs/sprite_library/sprite_47.png rename to docs/sprite_library/contra_sprites/sprite_47.png diff --git a/docs/sprite_library/sprite_48.png b/docs/sprite_library/contra_sprites/sprite_48.png similarity index 100% rename from docs/sprite_library/sprite_48.png rename to docs/sprite_library/contra_sprites/sprite_48.png diff --git a/docs/sprite_library/sprite_49.png b/docs/sprite_library/contra_sprites/sprite_49.png similarity index 100% rename from docs/sprite_library/sprite_49.png rename to docs/sprite_library/contra_sprites/sprite_49.png diff --git a/docs/sprite_library/sprite_4a.png b/docs/sprite_library/contra_sprites/sprite_4a.png similarity index 100% rename from docs/sprite_library/sprite_4a.png rename to docs/sprite_library/contra_sprites/sprite_4a.png diff --git a/docs/sprite_library/sprite_4b.png b/docs/sprite_library/contra_sprites/sprite_4b.png similarity index 100% rename from docs/sprite_library/sprite_4b.png rename to docs/sprite_library/contra_sprites/sprite_4b.png diff --git a/docs/sprite_library/sprite_4c.png b/docs/sprite_library/contra_sprites/sprite_4c.png similarity index 100% rename from docs/sprite_library/sprite_4c.png rename to docs/sprite_library/contra_sprites/sprite_4c.png diff --git a/docs/sprite_library/sprite_4d.png b/docs/sprite_library/contra_sprites/sprite_4d.png similarity index 100% rename from docs/sprite_library/sprite_4d.png rename to docs/sprite_library/contra_sprites/sprite_4d.png diff --git a/docs/sprite_library/sprite_4e 1.png b/docs/sprite_library/contra_sprites/sprite_4e 1.png similarity index 100% rename from docs/sprite_library/sprite_4e 1.png rename to docs/sprite_library/contra_sprites/sprite_4e 1.png diff --git a/docs/sprite_library/sprite_4e 2.png b/docs/sprite_library/contra_sprites/sprite_4e 2.png similarity index 100% rename from docs/sprite_library/sprite_4e 2.png rename to docs/sprite_library/contra_sprites/sprite_4e 2.png diff --git a/docs/sprite_library/sprite_4e 3.png b/docs/sprite_library/contra_sprites/sprite_4e 3.png similarity index 100% rename from docs/sprite_library/sprite_4e 3.png rename to docs/sprite_library/contra_sprites/sprite_4e 3.png diff --git a/docs/sprite_library/sprite_4e 4.png b/docs/sprite_library/contra_sprites/sprite_4e 4.png similarity index 100% rename from docs/sprite_library/sprite_4e 4.png rename to docs/sprite_library/contra_sprites/sprite_4e 4.png diff --git a/docs/sprite_library/sprite_4e.gif b/docs/sprite_library/contra_sprites/sprite_4e.gif similarity index 100% rename from docs/sprite_library/sprite_4e.gif rename to docs/sprite_library/contra_sprites/sprite_4e.gif diff --git a/docs/sprite_library/sprite_50.png b/docs/sprite_library/contra_sprites/sprite_50.png similarity index 100% rename from docs/sprite_library/sprite_50.png rename to docs/sprite_library/contra_sprites/sprite_50.png diff --git a/docs/sprite_library/sprite_50_p2.png b/docs/sprite_library/contra_sprites/sprite_50_p2.png similarity index 100% rename from docs/sprite_library/sprite_50_p2.png rename to docs/sprite_library/contra_sprites/sprite_50_p2.png diff --git a/docs/sprite_library/sprite_51.png b/docs/sprite_library/contra_sprites/sprite_51.png similarity index 100% rename from docs/sprite_library/sprite_51.png rename to docs/sprite_library/contra_sprites/sprite_51.png diff --git a/docs/sprite_library/sprite_51_p2.png b/docs/sprite_library/contra_sprites/sprite_51_p2.png similarity index 100% rename from docs/sprite_library/sprite_51_p2.png rename to docs/sprite_library/contra_sprites/sprite_51_p2.png diff --git a/docs/sprite_library/sprite_52.png b/docs/sprite_library/contra_sprites/sprite_52.png similarity index 100% rename from docs/sprite_library/sprite_52.png rename to docs/sprite_library/contra_sprites/sprite_52.png diff --git a/docs/sprite_library/sprite_52_p2.png b/docs/sprite_library/contra_sprites/sprite_52_p2.png similarity index 100% rename from docs/sprite_library/sprite_52_p2.png rename to docs/sprite_library/contra_sprites/sprite_52_p2.png diff --git a/docs/sprite_library/sprite_53.png b/docs/sprite_library/contra_sprites/sprite_53.png similarity index 100% rename from docs/sprite_library/sprite_53.png rename to docs/sprite_library/contra_sprites/sprite_53.png diff --git a/docs/sprite_library/sprite_53_p2.png b/docs/sprite_library/contra_sprites/sprite_53_p2.png similarity index 100% rename from docs/sprite_library/sprite_53_p2.png rename to docs/sprite_library/contra_sprites/sprite_53_p2.png diff --git a/docs/sprite_library/sprite_54.png b/docs/sprite_library/contra_sprites/sprite_54.png similarity index 100% rename from docs/sprite_library/sprite_54.png rename to docs/sprite_library/contra_sprites/sprite_54.png diff --git a/docs/sprite_library/sprite_54_p2.png b/docs/sprite_library/contra_sprites/sprite_54_p2.png similarity index 100% rename from docs/sprite_library/sprite_54_p2.png rename to docs/sprite_library/contra_sprites/sprite_54_p2.png diff --git a/docs/sprite_library/sprite_55.png b/docs/sprite_library/contra_sprites/sprite_55.png similarity index 100% rename from docs/sprite_library/sprite_55.png rename to docs/sprite_library/contra_sprites/sprite_55.png diff --git a/docs/sprite_library/sprite_55_p2.png b/docs/sprite_library/contra_sprites/sprite_55_p2.png similarity index 100% rename from docs/sprite_library/sprite_55_p2.png rename to docs/sprite_library/contra_sprites/sprite_55_p2.png diff --git a/docs/sprite_library/sprite_56.png b/docs/sprite_library/contra_sprites/sprite_56.png similarity index 100% rename from docs/sprite_library/sprite_56.png rename to docs/sprite_library/contra_sprites/sprite_56.png diff --git a/docs/sprite_library/sprite_56_p2.png b/docs/sprite_library/contra_sprites/sprite_56_p2.png similarity index 100% rename from docs/sprite_library/sprite_56_p2.png rename to docs/sprite_library/contra_sprites/sprite_56_p2.png diff --git a/docs/sprite_library/sprite_57.png b/docs/sprite_library/contra_sprites/sprite_57.png similarity index 100% rename from docs/sprite_library/sprite_57.png rename to docs/sprite_library/contra_sprites/sprite_57.png diff --git a/docs/sprite_library/sprite_57_p2.png b/docs/sprite_library/contra_sprites/sprite_57_p2.png similarity index 100% rename from docs/sprite_library/sprite_57_p2.png rename to docs/sprite_library/contra_sprites/sprite_57_p2.png diff --git a/docs/sprite_library/sprite_58.png b/docs/sprite_library/contra_sprites/sprite_58.png similarity index 100% rename from docs/sprite_library/sprite_58.png rename to docs/sprite_library/contra_sprites/sprite_58.png diff --git a/docs/sprite_library/sprite_58_p2.png b/docs/sprite_library/contra_sprites/sprite_58_p2.png similarity index 100% rename from docs/sprite_library/sprite_58_p2.png rename to docs/sprite_library/contra_sprites/sprite_58_p2.png diff --git a/docs/sprite_library/sprite_5d.png b/docs/sprite_library/contra_sprites/sprite_5d.png similarity index 100% rename from docs/sprite_library/sprite_5d.png rename to docs/sprite_library/contra_sprites/sprite_5d.png diff --git a/docs/sprite_library/sprite_5e.png b/docs/sprite_library/contra_sprites/sprite_5e.png similarity index 100% rename from docs/sprite_library/sprite_5e.png rename to docs/sprite_library/contra_sprites/sprite_5e.png diff --git a/docs/sprite_library/sprite_5f.png b/docs/sprite_library/contra_sprites/sprite_5f.png similarity index 100% rename from docs/sprite_library/sprite_5f.png rename to docs/sprite_library/contra_sprites/sprite_5f.png diff --git a/docs/sprite_library/sprite_60.png b/docs/sprite_library/contra_sprites/sprite_60.png similarity index 100% rename from docs/sprite_library/sprite_60.png rename to docs/sprite_library/contra_sprites/sprite_60.png diff --git a/docs/sprite_library/sprite_61.png b/docs/sprite_library/contra_sprites/sprite_61.png similarity index 100% rename from docs/sprite_library/sprite_61.png rename to docs/sprite_library/contra_sprites/sprite_61.png diff --git a/docs/sprite_library/sprite_62.png b/docs/sprite_library/contra_sprites/sprite_62.png similarity index 100% rename from docs/sprite_library/sprite_62.png rename to docs/sprite_library/contra_sprites/sprite_62.png diff --git a/docs/sprite_library/sprite_63.png b/docs/sprite_library/contra_sprites/sprite_63.png similarity index 100% rename from docs/sprite_library/sprite_63.png rename to docs/sprite_library/contra_sprites/sprite_63.png diff --git a/docs/sprite_library/sprite_64.png b/docs/sprite_library/contra_sprites/sprite_64.png similarity index 100% rename from docs/sprite_library/sprite_64.png rename to docs/sprite_library/contra_sprites/sprite_64.png diff --git a/docs/sprite_library/sprite_68.png b/docs/sprite_library/contra_sprites/sprite_68.png similarity index 100% rename from docs/sprite_library/sprite_68.png rename to docs/sprite_library/contra_sprites/sprite_68.png diff --git a/docs/sprite_library/sprite_69.png b/docs/sprite_library/contra_sprites/sprite_69.png similarity index 100% rename from docs/sprite_library/sprite_69.png rename to docs/sprite_library/contra_sprites/sprite_69.png diff --git a/docs/sprite_library/sprite_6a.png b/docs/sprite_library/contra_sprites/sprite_6a.png similarity index 100% rename from docs/sprite_library/sprite_6a.png rename to docs/sprite_library/contra_sprites/sprite_6a.png diff --git a/docs/sprite_library/sprite_6b.png b/docs/sprite_library/contra_sprites/sprite_6b.png similarity index 100% rename from docs/sprite_library/sprite_6b.png rename to docs/sprite_library/contra_sprites/sprite_6b.png diff --git a/docs/sprite_library/sprite_6c.png b/docs/sprite_library/contra_sprites/sprite_6c.png similarity index 100% rename from docs/sprite_library/sprite_6c.png rename to docs/sprite_library/contra_sprites/sprite_6c.png diff --git a/docs/sprite_library/sprite_6d.png b/docs/sprite_library/contra_sprites/sprite_6d.png similarity index 100% rename from docs/sprite_library/sprite_6d.png rename to docs/sprite_library/contra_sprites/sprite_6d.png diff --git a/docs/sprite_library/contra_sprites/sprite_6e.png b/docs/sprite_library/contra_sprites/sprite_6e.png new file mode 100644 index 0000000..47c050d Binary files /dev/null and b/docs/sprite_library/contra_sprites/sprite_6e.png differ diff --git a/docs/sprite_library/contra_sprites/sprite_6f.png b/docs/sprite_library/contra_sprites/sprite_6f.png new file mode 100644 index 0000000..450d0af Binary files /dev/null and b/docs/sprite_library/contra_sprites/sprite_6f.png differ diff --git a/docs/sprite_library/contra_sprites/sprite_70.png b/docs/sprite_library/contra_sprites/sprite_70.png new file mode 100644 index 0000000..91dfa1e Binary files /dev/null and b/docs/sprite_library/contra_sprites/sprite_70.png differ diff --git a/docs/sprite_library/sprite_71.png b/docs/sprite_library/contra_sprites/sprite_71.png similarity index 100% rename from docs/sprite_library/sprite_71.png rename to docs/sprite_library/contra_sprites/sprite_71.png diff --git a/docs/sprite_library/contra_sprites/sprite_72.png b/docs/sprite_library/contra_sprites/sprite_72.png new file mode 100644 index 0000000..22a99a1 Binary files /dev/null and b/docs/sprite_library/contra_sprites/sprite_72.png differ diff --git a/docs/sprite_library/sprite_73.png b/docs/sprite_library/contra_sprites/sprite_73.png similarity index 100% rename from docs/sprite_library/sprite_73.png rename to docs/sprite_library/contra_sprites/sprite_73.png diff --git a/docs/sprite_library/sprite_74.png b/docs/sprite_library/contra_sprites/sprite_74.png similarity index 100% rename from docs/sprite_library/sprite_74.png rename to docs/sprite_library/contra_sprites/sprite_74.png diff --git a/docs/sprite_library/sprite_75.png b/docs/sprite_library/contra_sprites/sprite_75.png similarity index 100% rename from docs/sprite_library/sprite_75.png rename to docs/sprite_library/contra_sprites/sprite_75.png diff --git a/docs/sprite_library/sprite_76.png b/docs/sprite_library/contra_sprites/sprite_76.png similarity index 100% rename from docs/sprite_library/sprite_76.png rename to docs/sprite_library/contra_sprites/sprite_76.png diff --git a/docs/sprite_library/sprite_77.png b/docs/sprite_library/contra_sprites/sprite_77.png similarity index 100% rename from docs/sprite_library/sprite_77.png rename to docs/sprite_library/contra_sprites/sprite_77.png diff --git a/docs/sprite_library/contra_sprites/sprite_78.png b/docs/sprite_library/contra_sprites/sprite_78.png new file mode 100644 index 0000000..4fb0ef0 Binary files /dev/null and b/docs/sprite_library/contra_sprites/sprite_78.png differ diff --git a/docs/sprite_library/sprite_79.png b/docs/sprite_library/contra_sprites/sprite_79.png similarity index 100% rename from docs/sprite_library/sprite_79.png rename to docs/sprite_library/contra_sprites/sprite_79.png diff --git a/docs/sprite_library/sprite_7a.png b/docs/sprite_library/contra_sprites/sprite_7a.png similarity index 100% rename from docs/sprite_library/sprite_7a.png rename to docs/sprite_library/contra_sprites/sprite_7a.png diff --git a/docs/sprite_library/sprite_7b.png b/docs/sprite_library/contra_sprites/sprite_7b.png similarity index 100% rename from docs/sprite_library/sprite_7b.png rename to docs/sprite_library/contra_sprites/sprite_7b.png diff --git a/docs/sprite_library/sprite_7c.png b/docs/sprite_library/contra_sprites/sprite_7c.png similarity index 100% rename from docs/sprite_library/sprite_7c.png rename to docs/sprite_library/contra_sprites/sprite_7c.png diff --git a/docs/sprite_library/sprite_7d.png b/docs/sprite_library/contra_sprites/sprite_7d.png similarity index 100% rename from docs/sprite_library/sprite_7d.png rename to docs/sprite_library/contra_sprites/sprite_7d.png diff --git a/docs/sprite_library/sprite_7e.png b/docs/sprite_library/contra_sprites/sprite_7e.png similarity index 100% rename from docs/sprite_library/sprite_7e.png rename to docs/sprite_library/contra_sprites/sprite_7e.png diff --git a/docs/sprite_library/sprite_82.png b/docs/sprite_library/contra_sprites/sprite_82.png similarity index 51% rename from docs/sprite_library/sprite_82.png rename to docs/sprite_library/contra_sprites/sprite_82.png index edb8bbd..ec661c0 100644 Binary files a/docs/sprite_library/sprite_82.png and b/docs/sprite_library/contra_sprites/sprite_82.png differ diff --git a/docs/sprite_library/sprite_83.png b/docs/sprite_library/contra_sprites/sprite_83.png similarity index 100% rename from docs/sprite_library/sprite_83.png rename to docs/sprite_library/contra_sprites/sprite_83.png diff --git a/docs/sprite_library/sprite_84.png b/docs/sprite_library/contra_sprites/sprite_84.png similarity index 51% rename from docs/sprite_library/sprite_84.png rename to docs/sprite_library/contra_sprites/sprite_84.png index edb8bbd..ec661c0 100644 Binary files a/docs/sprite_library/sprite_84.png and b/docs/sprite_library/contra_sprites/sprite_84.png differ diff --git a/docs/sprite_library/sprite_85.png b/docs/sprite_library/contra_sprites/sprite_85.png similarity index 100% rename from docs/sprite_library/sprite_85.png rename to docs/sprite_library/contra_sprites/sprite_85.png diff --git a/docs/sprite_library/sprite_86.png b/docs/sprite_library/contra_sprites/sprite_86.png similarity index 100% rename from docs/sprite_library/sprite_86.png rename to docs/sprite_library/contra_sprites/sprite_86.png diff --git a/docs/sprite_library/sprite_87.png b/docs/sprite_library/contra_sprites/sprite_87.png similarity index 100% rename from docs/sprite_library/sprite_87.png rename to docs/sprite_library/contra_sprites/sprite_87.png diff --git a/docs/sprite_library/sprite_88.png b/docs/sprite_library/contra_sprites/sprite_88.png similarity index 100% rename from docs/sprite_library/sprite_88.png rename to docs/sprite_library/contra_sprites/sprite_88.png diff --git a/docs/sprite_library/sprite_89.png b/docs/sprite_library/contra_sprites/sprite_89.png similarity index 100% rename from docs/sprite_library/sprite_89.png rename to docs/sprite_library/contra_sprites/sprite_89.png diff --git a/docs/sprite_library/sprite_8a.png b/docs/sprite_library/contra_sprites/sprite_8a.png similarity index 100% rename from docs/sprite_library/sprite_8a.png rename to docs/sprite_library/contra_sprites/sprite_8a.png diff --git a/docs/sprite_library/sprite_8b.png b/docs/sprite_library/contra_sprites/sprite_8b.png similarity index 100% rename from docs/sprite_library/sprite_8b.png rename to docs/sprite_library/contra_sprites/sprite_8b.png diff --git a/docs/sprite_library/sprite_8c.png b/docs/sprite_library/contra_sprites/sprite_8c.png similarity index 100% rename from docs/sprite_library/sprite_8c.png rename to docs/sprite_library/contra_sprites/sprite_8c.png diff --git a/docs/sprite_library/sprite_8d.png b/docs/sprite_library/contra_sprites/sprite_8d.png similarity index 100% rename from docs/sprite_library/sprite_8d.png rename to docs/sprite_library/contra_sprites/sprite_8d.png diff --git a/docs/sprite_library/sprite_8e.png b/docs/sprite_library/contra_sprites/sprite_8e.png similarity index 100% rename from docs/sprite_library/sprite_8e.png rename to docs/sprite_library/contra_sprites/sprite_8e.png diff --git a/docs/sprite_library/sprite_8f.png b/docs/sprite_library/contra_sprites/sprite_8f.png similarity index 100% rename from docs/sprite_library/sprite_8f.png rename to docs/sprite_library/contra_sprites/sprite_8f.png diff --git a/docs/sprite_library/sprite_90.png b/docs/sprite_library/contra_sprites/sprite_90.png similarity index 100% rename from docs/sprite_library/sprite_90.png rename to docs/sprite_library/contra_sprites/sprite_90.png diff --git a/docs/sprite_library/sprite_91.png b/docs/sprite_library/contra_sprites/sprite_91.png similarity index 100% rename from docs/sprite_library/sprite_91.png rename to docs/sprite_library/contra_sprites/sprite_91.png diff --git a/docs/sprite_library/sprite_91_p2.png b/docs/sprite_library/contra_sprites/sprite_91_p2.png similarity index 100% rename from docs/sprite_library/sprite_91_p2.png rename to docs/sprite_library/contra_sprites/sprite_91_p2.png diff --git a/docs/sprite_library/sprite_92.png b/docs/sprite_library/contra_sprites/sprite_92.png similarity index 100% rename from docs/sprite_library/sprite_92.png rename to docs/sprite_library/contra_sprites/sprite_92.png diff --git a/docs/sprite_library/sprite_93.png b/docs/sprite_library/contra_sprites/sprite_93.png similarity index 100% rename from docs/sprite_library/sprite_93.png rename to docs/sprite_library/contra_sprites/sprite_93.png diff --git a/docs/sprite_library/sprite_94.png b/docs/sprite_library/contra_sprites/sprite_94.png similarity index 100% rename from docs/sprite_library/sprite_94.png rename to docs/sprite_library/contra_sprites/sprite_94.png diff --git a/docs/sprite_library/sprite_95.png b/docs/sprite_library/contra_sprites/sprite_95.png similarity index 100% rename from docs/sprite_library/sprite_95.png rename to docs/sprite_library/contra_sprites/sprite_95.png diff --git a/docs/sprite_library/sprite_96.png b/docs/sprite_library/contra_sprites/sprite_96.png similarity index 100% rename from docs/sprite_library/sprite_96.png rename to docs/sprite_library/contra_sprites/sprite_96.png diff --git a/docs/sprite_library/sprite_97.png b/docs/sprite_library/contra_sprites/sprite_97.png similarity index 100% rename from docs/sprite_library/sprite_97.png rename to docs/sprite_library/contra_sprites/sprite_97.png diff --git a/docs/sprite_library/sprite_98.png b/docs/sprite_library/contra_sprites/sprite_98.png similarity index 100% rename from docs/sprite_library/sprite_98.png rename to docs/sprite_library/contra_sprites/sprite_98.png diff --git a/docs/sprite_library/sprite_99.png b/docs/sprite_library/contra_sprites/sprite_99.png similarity index 100% rename from docs/sprite_library/sprite_99.png rename to docs/sprite_library/contra_sprites/sprite_99.png diff --git a/docs/sprite_library/sprite_9a.png b/docs/sprite_library/contra_sprites/sprite_9a.png similarity index 100% rename from docs/sprite_library/sprite_9a.png rename to docs/sprite_library/contra_sprites/sprite_9a.png diff --git a/docs/sprite_library/sprite_9b.png b/docs/sprite_library/contra_sprites/sprite_9b.png similarity index 100% rename from docs/sprite_library/sprite_9b.png rename to docs/sprite_library/contra_sprites/sprite_9b.png diff --git a/docs/sprite_library/sprite_9c.png b/docs/sprite_library/contra_sprites/sprite_9c.png similarity index 100% rename from docs/sprite_library/sprite_9c.png rename to docs/sprite_library/contra_sprites/sprite_9c.png diff --git a/docs/sprite_library/sprite_9d.png b/docs/sprite_library/contra_sprites/sprite_9d.png similarity index 100% rename from docs/sprite_library/sprite_9d.png rename to docs/sprite_library/contra_sprites/sprite_9d.png diff --git a/docs/sprite_library/sprite_9e.png b/docs/sprite_library/contra_sprites/sprite_9e.png similarity index 100% rename from docs/sprite_library/sprite_9e.png rename to docs/sprite_library/contra_sprites/sprite_9e.png diff --git a/docs/sprite_library/sprite_9f.png b/docs/sprite_library/contra_sprites/sprite_9f.png similarity index 100% rename from docs/sprite_library/sprite_9f.png rename to docs/sprite_library/contra_sprites/sprite_9f.png diff --git a/docs/sprite_library/sprite_a0.png b/docs/sprite_library/contra_sprites/sprite_a0.png similarity index 100% rename from docs/sprite_library/sprite_a0.png rename to docs/sprite_library/contra_sprites/sprite_a0.png diff --git a/docs/sprite_library/sprite_a1.png b/docs/sprite_library/contra_sprites/sprite_a1.png similarity index 100% rename from docs/sprite_library/sprite_a1.png rename to docs/sprite_library/contra_sprites/sprite_a1.png diff --git a/docs/sprite_library/sprite_a2.png b/docs/sprite_library/contra_sprites/sprite_a2.png similarity index 100% rename from docs/sprite_library/sprite_a2.png rename to docs/sprite_library/contra_sprites/sprite_a2.png diff --git a/docs/sprite_library/sprite_a3.png b/docs/sprite_library/contra_sprites/sprite_a3.png similarity index 100% rename from docs/sprite_library/sprite_a3.png rename to docs/sprite_library/contra_sprites/sprite_a3.png diff --git a/docs/sprite_library/sprite_a4.png b/docs/sprite_library/contra_sprites/sprite_a4.png similarity index 100% rename from docs/sprite_library/sprite_a4.png rename to docs/sprite_library/contra_sprites/sprite_a4.png diff --git a/docs/sprite_library/sprite_a5.png b/docs/sprite_library/contra_sprites/sprite_a5.png similarity index 100% rename from docs/sprite_library/sprite_a5.png rename to docs/sprite_library/contra_sprites/sprite_a5.png diff --git a/docs/sprite_library/sprite_a6.png b/docs/sprite_library/contra_sprites/sprite_a6.png similarity index 100% rename from docs/sprite_library/sprite_a6.png rename to docs/sprite_library/contra_sprites/sprite_a6.png diff --git a/docs/sprite_library/sprite_a7.png b/docs/sprite_library/contra_sprites/sprite_a7.png similarity index 100% rename from docs/sprite_library/sprite_a7.png rename to docs/sprite_library/contra_sprites/sprite_a7.png diff --git a/docs/sprite_library/sprite_a8.png b/docs/sprite_library/contra_sprites/sprite_a8.png similarity index 100% rename from docs/sprite_library/sprite_a8.png rename to docs/sprite_library/contra_sprites/sprite_a8.png diff --git a/docs/sprite_library/sprite_a9.png b/docs/sprite_library/contra_sprites/sprite_a9.png similarity index 100% rename from docs/sprite_library/sprite_a9.png rename to docs/sprite_library/contra_sprites/sprite_a9.png diff --git a/docs/sprite_library/sprite_aa.png b/docs/sprite_library/contra_sprites/sprite_aa.png similarity index 100% rename from docs/sprite_library/sprite_aa.png rename to docs/sprite_library/contra_sprites/sprite_aa.png diff --git a/docs/sprite_library/sprite_ab.png b/docs/sprite_library/contra_sprites/sprite_ab.png similarity index 100% rename from docs/sprite_library/sprite_ab.png rename to docs/sprite_library/contra_sprites/sprite_ab.png diff --git a/docs/sprite_library/sprite_ac.png b/docs/sprite_library/contra_sprites/sprite_ac.png similarity index 100% rename from docs/sprite_library/sprite_ac.png rename to docs/sprite_library/contra_sprites/sprite_ac.png diff --git a/docs/sprite_library/sprite_ad.png b/docs/sprite_library/contra_sprites/sprite_ad.png similarity index 100% rename from docs/sprite_library/sprite_ad.png rename to docs/sprite_library/contra_sprites/sprite_ad.png diff --git a/docs/sprite_library/sprite_ae.png b/docs/sprite_library/contra_sprites/sprite_ae.png similarity index 100% rename from docs/sprite_library/sprite_ae.png rename to docs/sprite_library/contra_sprites/sprite_ae.png diff --git a/docs/sprite_library/sprite_af.png b/docs/sprite_library/contra_sprites/sprite_af.png similarity index 100% rename from docs/sprite_library/sprite_af.png rename to docs/sprite_library/contra_sprites/sprite_af.png diff --git a/docs/sprite_library/sprite_b0.png b/docs/sprite_library/contra_sprites/sprite_b0.png similarity index 100% rename from docs/sprite_library/sprite_b0.png rename to docs/sprite_library/contra_sprites/sprite_b0.png diff --git a/docs/sprite_library/sprite_b1.png b/docs/sprite_library/contra_sprites/sprite_b1.png similarity index 100% rename from docs/sprite_library/sprite_b1.png rename to docs/sprite_library/contra_sprites/sprite_b1.png diff --git a/docs/sprite_library/sprite_b2.png b/docs/sprite_library/contra_sprites/sprite_b2.png similarity index 100% rename from docs/sprite_library/sprite_b2.png rename to docs/sprite_library/contra_sprites/sprite_b2.png diff --git a/docs/sprite_library/sprite_b3.png b/docs/sprite_library/contra_sprites/sprite_b3.png similarity index 100% rename from docs/sprite_library/sprite_b3.png rename to docs/sprite_library/contra_sprites/sprite_b3.png diff --git a/docs/sprite_library/sprite_b4.png b/docs/sprite_library/contra_sprites/sprite_b4.png similarity index 100% rename from docs/sprite_library/sprite_b4.png rename to docs/sprite_library/contra_sprites/sprite_b4.png diff --git a/docs/sprite_library/sprite_b5.png b/docs/sprite_library/contra_sprites/sprite_b5.png similarity index 100% rename from docs/sprite_library/sprite_b5.png rename to docs/sprite_library/contra_sprites/sprite_b5.png diff --git a/docs/sprite_library/sprite_b6.png b/docs/sprite_library/contra_sprites/sprite_b6.png similarity index 100% rename from docs/sprite_library/sprite_b6.png rename to docs/sprite_library/contra_sprites/sprite_b6.png diff --git a/docs/sprite_library/sprite_b7.png b/docs/sprite_library/contra_sprites/sprite_b7.png similarity index 100% rename from docs/sprite_library/sprite_b7.png rename to docs/sprite_library/contra_sprites/sprite_b7.png diff --git a/docs/sprite_library/sprite_b8.png b/docs/sprite_library/contra_sprites/sprite_b8.png similarity index 100% rename from docs/sprite_library/sprite_b8.png rename to docs/sprite_library/contra_sprites/sprite_b8.png diff --git a/docs/sprite_library/sprite_b9.png b/docs/sprite_library/contra_sprites/sprite_b9.png similarity index 100% rename from docs/sprite_library/sprite_b9.png rename to docs/sprite_library/contra_sprites/sprite_b9.png diff --git a/docs/sprite_library/sprite_ba.png b/docs/sprite_library/contra_sprites/sprite_ba.png similarity index 100% rename from docs/sprite_library/sprite_ba.png rename to docs/sprite_library/contra_sprites/sprite_ba.png diff --git a/docs/sprite_library/sprite_bb.png b/docs/sprite_library/contra_sprites/sprite_bb.png similarity index 100% rename from docs/sprite_library/sprite_bb.png rename to docs/sprite_library/contra_sprites/sprite_bb.png diff --git a/docs/sprite_library/sprite_bc.png b/docs/sprite_library/contra_sprites/sprite_bc.png similarity index 100% rename from docs/sprite_library/sprite_bc.png rename to docs/sprite_library/contra_sprites/sprite_bc.png diff --git a/docs/sprite_library/sprite_bd.png b/docs/sprite_library/contra_sprites/sprite_bd.png similarity index 100% rename from docs/sprite_library/sprite_bd.png rename to docs/sprite_library/contra_sprites/sprite_bd.png diff --git a/docs/sprite_library/sprite_be.png b/docs/sprite_library/contra_sprites/sprite_be.png similarity index 100% rename from docs/sprite_library/sprite_be.png rename to docs/sprite_library/contra_sprites/sprite_be.png diff --git a/docs/sprite_library/sprite_bf.png b/docs/sprite_library/contra_sprites/sprite_bf.png similarity index 100% rename from docs/sprite_library/sprite_bf.png rename to docs/sprite_library/contra_sprites/sprite_bf.png diff --git a/docs/sprite_library/sprite_c0.png b/docs/sprite_library/contra_sprites/sprite_c0.png similarity index 100% rename from docs/sprite_library/sprite_c0.png rename to docs/sprite_library/contra_sprites/sprite_c0.png diff --git a/docs/sprite_library/sprite_c1.png b/docs/sprite_library/contra_sprites/sprite_c1.png similarity index 100% rename from docs/sprite_library/sprite_c1.png rename to docs/sprite_library/contra_sprites/sprite_c1.png diff --git a/docs/sprite_library/sprite_c2.png b/docs/sprite_library/contra_sprites/sprite_c2.png similarity index 100% rename from docs/sprite_library/sprite_c2.png rename to docs/sprite_library/contra_sprites/sprite_c2.png diff --git a/docs/sprite_library/sprite_c3.png b/docs/sprite_library/contra_sprites/sprite_c3.png similarity index 100% rename from docs/sprite_library/sprite_c3.png rename to docs/sprite_library/contra_sprites/sprite_c3.png diff --git a/docs/sprite_library/sprite_c4.png b/docs/sprite_library/contra_sprites/sprite_c4.png similarity index 100% rename from docs/sprite_library/sprite_c4.png rename to docs/sprite_library/contra_sprites/sprite_c4.png diff --git a/docs/sprite_library/sprite_c5.png b/docs/sprite_library/contra_sprites/sprite_c5.png similarity index 100% rename from docs/sprite_library/sprite_c5.png rename to docs/sprite_library/contra_sprites/sprite_c5.png diff --git a/docs/sprite_library/sprite_c6.png b/docs/sprite_library/contra_sprites/sprite_c6.png similarity index 100% rename from docs/sprite_library/sprite_c6.png rename to docs/sprite_library/contra_sprites/sprite_c6.png diff --git a/docs/sprite_library/sprite_c7.png b/docs/sprite_library/contra_sprites/sprite_c7.png similarity index 100% rename from docs/sprite_library/sprite_c7.png rename to docs/sprite_library/contra_sprites/sprite_c7.png diff --git a/docs/sprite_library/sprite_c8.png b/docs/sprite_library/contra_sprites/sprite_c8.png similarity index 100% rename from docs/sprite_library/sprite_c8.png rename to docs/sprite_library/contra_sprites/sprite_c8.png diff --git a/docs/sprite_library/sprite_c9.png b/docs/sprite_library/contra_sprites/sprite_c9.png similarity index 100% rename from docs/sprite_library/sprite_c9.png rename to docs/sprite_library/contra_sprites/sprite_c9.png diff --git a/docs/sprite_library/sprite_ca.png b/docs/sprite_library/contra_sprites/sprite_ca.png similarity index 100% rename from docs/sprite_library/sprite_ca.png rename to docs/sprite_library/contra_sprites/sprite_ca.png diff --git a/docs/sprite_library/sprite_cb.png b/docs/sprite_library/contra_sprites/sprite_cb.png similarity index 100% rename from docs/sprite_library/sprite_cb.png rename to docs/sprite_library/contra_sprites/sprite_cb.png diff --git a/docs/sprite_library/sprite_cc.png b/docs/sprite_library/contra_sprites/sprite_cc.png similarity index 100% rename from docs/sprite_library/sprite_cc.png rename to docs/sprite_library/contra_sprites/sprite_cc.png diff --git a/docs/sprite_library/sprite_cd.png b/docs/sprite_library/contra_sprites/sprite_cd.png similarity index 100% rename from docs/sprite_library/sprite_cd.png rename to docs/sprite_library/contra_sprites/sprite_cd.png diff --git a/docs/sprite_library/sprite_ce.png b/docs/sprite_library/contra_sprites/sprite_ce.png similarity index 100% rename from docs/sprite_library/sprite_ce.png rename to docs/sprite_library/contra_sprites/sprite_ce.png diff --git a/docs/sprite_library/sprite_cf.png b/docs/sprite_library/contra_sprites/sprite_cf.png similarity index 100% rename from docs/sprite_library/sprite_cf.png rename to docs/sprite_library/contra_sprites/sprite_cf.png diff --git a/docs/sprite_library/probotector_sprites/player_1_game_over.png b/docs/sprite_library/probotector_sprites/player_1_game_over.png new file mode 100644 index 0000000..ce4dcf7 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/player_1_game_over.png differ diff --git a/docs/sprite_library/probotector_sprites/player_1_lives_medal.png b/docs/sprite_library/probotector_sprites/player_1_lives_medal.png new file mode 100644 index 0000000..67d21f8 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/player_1_lives_medal.png differ diff --git a/docs/sprite_library/probotector_sprites/player_2_game_over.png b/docs/sprite_library/probotector_sprites/player_2_game_over.png new file mode 100644 index 0000000..c680e2f Binary files /dev/null and b/docs/sprite_library/probotector_sprites/player_2_game_over.png differ diff --git a/docs/sprite_library/probotector_sprites/player_2_lives_medal.png b/docs/sprite_library/probotector_sprites/player_2_lives_medal.png new file mode 100644 index 0000000..dedf06c Binary files /dev/null and b/docs/sprite_library/probotector_sprites/player_2_lives_medal.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_02.png b/docs/sprite_library/probotector_sprites/sprite_02.png new file mode 100644 index 0000000..b7e8fdf Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_02.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_02_p2.png b/docs/sprite_library/probotector_sprites/sprite_02_p2.png new file mode 100644 index 0000000..1568698 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_02_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_03.png b/docs/sprite_library/probotector_sprites/sprite_03.png new file mode 100644 index 0000000..b55477e Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_03.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_03_p2.png b/docs/sprite_library/probotector_sprites/sprite_03_p2.png new file mode 100644 index 0000000..34b122b Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_03_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_04.png b/docs/sprite_library/probotector_sprites/sprite_04.png new file mode 100644 index 0000000..b004300 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_04.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_04_p2.png b/docs/sprite_library/probotector_sprites/sprite_04_p2.png new file mode 100644 index 0000000..f37db4c Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_04_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_05.png b/docs/sprite_library/probotector_sprites/sprite_05.png new file mode 100644 index 0000000..1f441a3 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_05.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_05_p2.png b/docs/sprite_library/probotector_sprites/sprite_05_p2.png new file mode 100644 index 0000000..d0f2ddc Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_05_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_06.png b/docs/sprite_library/probotector_sprites/sprite_06.png new file mode 100644 index 0000000..2296262 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_06.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_06_p2.png b/docs/sprite_library/probotector_sprites/sprite_06_p2.png new file mode 100644 index 0000000..083769f Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_06_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_08.png b/docs/sprite_library/probotector_sprites/sprite_08.png new file mode 100644 index 0000000..c8cb70c Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_08.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_08_p2.png b/docs/sprite_library/probotector_sprites/sprite_08_p2.png new file mode 100644 index 0000000..3ff8c97 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_08_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_09.png b/docs/sprite_library/probotector_sprites/sprite_09.png new file mode 100644 index 0000000..135b398 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_09.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_09_p2.png b/docs/sprite_library/probotector_sprites/sprite_09_p2.png new file mode 100644 index 0000000..8ac9d9c Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_09_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_0a.png b/docs/sprite_library/probotector_sprites/sprite_0a.png new file mode 100644 index 0000000..47130ae Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_0a.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_0a_p2.png b/docs/sprite_library/probotector_sprites/sprite_0a_p2.png new file mode 100644 index 0000000..9dabcdf Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_0a_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_0b.png b/docs/sprite_library/probotector_sprites/sprite_0b.png new file mode 100644 index 0000000..cc01bdf Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_0b.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_0b_p2.png b/docs/sprite_library/probotector_sprites/sprite_0b_p2.png new file mode 100644 index 0000000..0b3df37 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_0b_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_0c.png b/docs/sprite_library/probotector_sprites/sprite_0c.png new file mode 100644 index 0000000..9e9fffe Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_0c.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_0c_p2.png b/docs/sprite_library/probotector_sprites/sprite_0c_p2.png new file mode 100644 index 0000000..6f4e6c8 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_0c_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_0d.png b/docs/sprite_library/probotector_sprites/sprite_0d.png new file mode 100644 index 0000000..aa225ea Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_0d.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_0d_p2.png b/docs/sprite_library/probotector_sprites/sprite_0d_p2.png new file mode 100644 index 0000000..80210d5 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_0d_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_0e.png b/docs/sprite_library/probotector_sprites/sprite_0e.png new file mode 100644 index 0000000..e858a36 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_0e.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_0e_p2.png b/docs/sprite_library/probotector_sprites/sprite_0e_p2.png new file mode 100644 index 0000000..5199bc6 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_0e_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_0f.png b/docs/sprite_library/probotector_sprites/sprite_0f.png new file mode 100644 index 0000000..bee17ef Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_0f.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_0f_p2.png b/docs/sprite_library/probotector_sprites/sprite_0f_p2.png new file mode 100644 index 0000000..b2a99eb Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_0f_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_10.png b/docs/sprite_library/probotector_sprites/sprite_10.png new file mode 100644 index 0000000..a4a8a73 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_10.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_10_p2.png b/docs/sprite_library/probotector_sprites/sprite_10_p2.png new file mode 100644 index 0000000..9ad1b9d Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_10_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_11.png b/docs/sprite_library/probotector_sprites/sprite_11.png new file mode 100644 index 0000000..84ed51e Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_11.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_11_p2.png b/docs/sprite_library/probotector_sprites/sprite_11_p2.png new file mode 100644 index 0000000..a57f21f Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_11_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_12.png b/docs/sprite_library/probotector_sprites/sprite_12.png new file mode 100644 index 0000000..0ab27e8 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_12.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_12_p2.png b/docs/sprite_library/probotector_sprites/sprite_12_p2.png new file mode 100644 index 0000000..fac7173 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_12_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_13.png b/docs/sprite_library/probotector_sprites/sprite_13.png new file mode 100644 index 0000000..b9e8665 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_13.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_13_p2.png b/docs/sprite_library/probotector_sprites/sprite_13_p2.png new file mode 100644 index 0000000..9b69505 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_13_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_14.png b/docs/sprite_library/probotector_sprites/sprite_14.png new file mode 100644 index 0000000..a87878e Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_14.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_14_p2.png b/docs/sprite_library/probotector_sprites/sprite_14_p2.png new file mode 100644 index 0000000..521ca74 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_14_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_15.png b/docs/sprite_library/probotector_sprites/sprite_15.png new file mode 100644 index 0000000..2721e94 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_15.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_15_p2.png b/docs/sprite_library/probotector_sprites/sprite_15_p2.png new file mode 100644 index 0000000..dc57a59 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_15_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_16.png b/docs/sprite_library/probotector_sprites/sprite_16.png new file mode 100644 index 0000000..c6b017b Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_16.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_16_p2.png b/docs/sprite_library/probotector_sprites/sprite_16_p2.png new file mode 100644 index 0000000..ebbc0de Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_16_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_17.png b/docs/sprite_library/probotector_sprites/sprite_17.png new file mode 100644 index 0000000..90c4c83 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_17.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_17_p2.png b/docs/sprite_library/probotector_sprites/sprite_17_p2.png new file mode 100644 index 0000000..ae6f817 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_17_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_18.png b/docs/sprite_library/probotector_sprites/sprite_18.png new file mode 100644 index 0000000..2de980d Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_18.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_18_p2.png b/docs/sprite_library/probotector_sprites/sprite_18_p2.png new file mode 100644 index 0000000..5d800a0 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_18_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_19.png b/docs/sprite_library/probotector_sprites/sprite_19.png new file mode 100644 index 0000000..548e096 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_19.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_19_p2.png b/docs/sprite_library/probotector_sprites/sprite_19_p2.png new file mode 100644 index 0000000..3990964 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_19_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_1a.png b/docs/sprite_library/probotector_sprites/sprite_1a.png new file mode 100644 index 0000000..91cc749 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_1a.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_1a_p2.png b/docs/sprite_library/probotector_sprites/sprite_1a_p2.png new file mode 100644 index 0000000..cc1d932 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_1a_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_1b.png b/docs/sprite_library/probotector_sprites/sprite_1b.png new file mode 100644 index 0000000..cf06daf Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_1b.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_1b_p2.png b/docs/sprite_library/probotector_sprites/sprite_1b_p2.png new file mode 100644 index 0000000..26b4216 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_1b_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_1c.png b/docs/sprite_library/probotector_sprites/sprite_1c.png new file mode 100644 index 0000000..eb93d73 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_1c.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_1c_p2.png b/docs/sprite_library/probotector_sprites/sprite_1c_p2.png new file mode 100644 index 0000000..36acdc1 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_1c_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_1d.png b/docs/sprite_library/probotector_sprites/sprite_1d.png new file mode 100644 index 0000000..80fa899 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_1d.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_1d_p2.png b/docs/sprite_library/probotector_sprites/sprite_1d_p2.png new file mode 100644 index 0000000..0f5feff Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_1d_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_1e.png b/docs/sprite_library/probotector_sprites/sprite_1e.png new file mode 100644 index 0000000..396867a Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_1e.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_26.png b/docs/sprite_library/probotector_sprites/sprite_26.png new file mode 100644 index 0000000..cdd0152 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_26.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_27.png b/docs/sprite_library/probotector_sprites/sprite_27.png new file mode 100644 index 0000000..25cdd5c Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_27.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_28.png b/docs/sprite_library/probotector_sprites/sprite_28.png new file mode 100644 index 0000000..25cdd5c Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_28.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_29.png b/docs/sprite_library/probotector_sprites/sprite_29.png new file mode 100644 index 0000000..5ad2b4a Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_29.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_2a.png b/docs/sprite_library/probotector_sprites/sprite_2a.png new file mode 100644 index 0000000..3dee448 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_2a.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_2b.png b/docs/sprite_library/probotector_sprites/sprite_2b.png new file mode 100644 index 0000000..d6e1b0b Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_2b.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_2c.png b/docs/sprite_library/probotector_sprites/sprite_2c.png new file mode 100644 index 0000000..747c10e Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_2c.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_2d.png b/docs/sprite_library/probotector_sprites/sprite_2d.png new file mode 100644 index 0000000..ddfc669 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_2d.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_3b.png b/docs/sprite_library/probotector_sprites/sprite_3b.png new file mode 100644 index 0000000..c165949 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_3b.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_3c.png b/docs/sprite_library/probotector_sprites/sprite_3c.png new file mode 100644 index 0000000..25cdd5c Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_3c.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_3d.png b/docs/sprite_library/probotector_sprites/sprite_3d.png new file mode 100644 index 0000000..8da8080 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_3d.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_3e.png b/docs/sprite_library/probotector_sprites/sprite_3e.png new file mode 100644 index 0000000..8da8080 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_3e.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_3f.png b/docs/sprite_library/probotector_sprites/sprite_3f.png new file mode 100644 index 0000000..c165949 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_3f.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_40.png b/docs/sprite_library/probotector_sprites/sprite_40.png new file mode 100644 index 0000000..417f211 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_40.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_41.png b/docs/sprite_library/probotector_sprites/sprite_41.png new file mode 100644 index 0000000..a923ab6 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_41.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_42.png b/docs/sprite_library/probotector_sprites/sprite_42.png new file mode 100644 index 0000000..5ad2b4a Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_42.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_43.png b/docs/sprite_library/probotector_sprites/sprite_43.png new file mode 100644 index 0000000..f52cd6b Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_43.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_44.png b/docs/sprite_library/probotector_sprites/sprite_44.png new file mode 100644 index 0000000..03d1c00 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_44.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_45.png b/docs/sprite_library/probotector_sprites/sprite_45.png new file mode 100644 index 0000000..8d73390 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_45.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_46.png b/docs/sprite_library/probotector_sprites/sprite_46.png new file mode 100644 index 0000000..152b7a3 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_46.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_4b.png b/docs/sprite_library/probotector_sprites/sprite_4b.png new file mode 100644 index 0000000..8372735 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_4b.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_4c.png b/docs/sprite_library/probotector_sprites/sprite_4c.png new file mode 100644 index 0000000..5be68e7 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_4c.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_4d.png b/docs/sprite_library/probotector_sprites/sprite_4d.png new file mode 100644 index 0000000..1791cfa Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_4d.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_4d_alt.png b/docs/sprite_library/probotector_sprites/sprite_4d_alt.png new file mode 100644 index 0000000..1367a96 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_4d_alt.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_50.png b/docs/sprite_library/probotector_sprites/sprite_50.png new file mode 100644 index 0000000..2e4ba25 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_50.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_50_p2.png b/docs/sprite_library/probotector_sprites/sprite_50_p2.png new file mode 100644 index 0000000..4a18cc7 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_50_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_51.png b/docs/sprite_library/probotector_sprites/sprite_51.png new file mode 100644 index 0000000..545d671 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_51.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_51_p2.png b/docs/sprite_library/probotector_sprites/sprite_51_p2.png new file mode 100644 index 0000000..9a04e8a Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_51_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_52.png b/docs/sprite_library/probotector_sprites/sprite_52.png new file mode 100644 index 0000000..eaf6366 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_52.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_52_p2.png b/docs/sprite_library/probotector_sprites/sprite_52_p2.png new file mode 100644 index 0000000..239abd6 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_52_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_53.png b/docs/sprite_library/probotector_sprites/sprite_53.png new file mode 100644 index 0000000..e6f400b Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_53.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_53_p2.png b/docs/sprite_library/probotector_sprites/sprite_53_p2.png new file mode 100644 index 0000000..3923b09 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_53_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_54.png b/docs/sprite_library/probotector_sprites/sprite_54.png new file mode 100644 index 0000000..0a21698 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_54.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_54_p2.png b/docs/sprite_library/probotector_sprites/sprite_54_p2.png new file mode 100644 index 0000000..6d4681a Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_54_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_55.png b/docs/sprite_library/probotector_sprites/sprite_55.png new file mode 100644 index 0000000..346a59d Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_55.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_55_p2.png b/docs/sprite_library/probotector_sprites/sprite_55_p2.png new file mode 100644 index 0000000..4f57d91 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_55_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_56.png b/docs/sprite_library/probotector_sprites/sprite_56.png new file mode 100644 index 0000000..cfe853d Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_56.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_56_p2.png b/docs/sprite_library/probotector_sprites/sprite_56_p2.png new file mode 100644 index 0000000..9479ea9 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_56_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_57.png b/docs/sprite_library/probotector_sprites/sprite_57.png new file mode 100644 index 0000000..85becde Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_57.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_57_p2.png b/docs/sprite_library/probotector_sprites/sprite_57_p2.png new file mode 100644 index 0000000..0ef3324 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_57_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_58.png b/docs/sprite_library/probotector_sprites/sprite_58.png new file mode 100644 index 0000000..bed31cb Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_58.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_58_p2.png b/docs/sprite_library/probotector_sprites/sprite_58_p2.png new file mode 100644 index 0000000..ad52907 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_58_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_5d.png b/docs/sprite_library/probotector_sprites/sprite_5d.png new file mode 100644 index 0000000..41d2992 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_5d.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_5e.png b/docs/sprite_library/probotector_sprites/sprite_5e.png new file mode 100644 index 0000000..0821776 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_5e.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_5f.png b/docs/sprite_library/probotector_sprites/sprite_5f.png new file mode 100644 index 0000000..ec0314b Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_5f.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_60.png b/docs/sprite_library/probotector_sprites/sprite_60.png new file mode 100644 index 0000000..80bfed4 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_60.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_61.png b/docs/sprite_library/probotector_sprites/sprite_61.png new file mode 100644 index 0000000..1f09648 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_61.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_62.png b/docs/sprite_library/probotector_sprites/sprite_62.png new file mode 100644 index 0000000..455f1d5 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_62.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_63.png b/docs/sprite_library/probotector_sprites/sprite_63.png new file mode 100644 index 0000000..8da54f1 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_63.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_64.png b/docs/sprite_library/probotector_sprites/sprite_64.png new file mode 100644 index 0000000..7eea210 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_64.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_68.png b/docs/sprite_library/probotector_sprites/sprite_68.png new file mode 100644 index 0000000..393a4af Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_68.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_69.png b/docs/sprite_library/probotector_sprites/sprite_69.png new file mode 100644 index 0000000..3b477d2 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_69.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_6a.png b/docs/sprite_library/probotector_sprites/sprite_6a.png new file mode 100644 index 0000000..7386621 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_6a.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_6b.png b/docs/sprite_library/probotector_sprites/sprite_6b.png new file mode 100644 index 0000000..69db9c8 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_6b.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_6c.png b/docs/sprite_library/probotector_sprites/sprite_6c.png new file mode 100644 index 0000000..d582361 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_6c.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_6d.png b/docs/sprite_library/probotector_sprites/sprite_6d.png new file mode 100644 index 0000000..7136e50 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_6d.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_6e.png b/docs/sprite_library/probotector_sprites/sprite_6e.png new file mode 100644 index 0000000..0b5d282 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_6e.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_6f.png b/docs/sprite_library/probotector_sprites/sprite_6f.png new file mode 100644 index 0000000..41907b2 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_6f.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_70.png b/docs/sprite_library/probotector_sprites/sprite_70.png new file mode 100644 index 0000000..ab54b07 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_70.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_71.png b/docs/sprite_library/probotector_sprites/sprite_71.png new file mode 100644 index 0000000..bf04c01 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_71.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_73.png b/docs/sprite_library/probotector_sprites/sprite_73.png new file mode 100644 index 0000000..2ae930d Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_73.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_74.png b/docs/sprite_library/probotector_sprites/sprite_74.png new file mode 100644 index 0000000..c2826fb Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_74.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_75.png b/docs/sprite_library/probotector_sprites/sprite_75.png new file mode 100644 index 0000000..ac35dc9 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_75.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_76.png b/docs/sprite_library/probotector_sprites/sprite_76.png new file mode 100644 index 0000000..14267cc Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_76.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_77.png b/docs/sprite_library/probotector_sprites/sprite_77.png new file mode 100644 index 0000000..e9e7634 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_77.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_78.png b/docs/sprite_library/probotector_sprites/sprite_78.png new file mode 100644 index 0000000..c2826fb Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_78.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_7a.png b/docs/sprite_library/probotector_sprites/sprite_7a.png new file mode 100644 index 0000000..dd72493 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_7a.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_7b.png b/docs/sprite_library/probotector_sprites/sprite_7b.png new file mode 100644 index 0000000..63a70ec Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_7b.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_7c.png b/docs/sprite_library/probotector_sprites/sprite_7c.png new file mode 100644 index 0000000..a2820b4 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_7c.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_7d.png b/docs/sprite_library/probotector_sprites/sprite_7d.png new file mode 100644 index 0000000..293f85a Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_7d.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_7e.png b/docs/sprite_library/probotector_sprites/sprite_7e.png new file mode 100644 index 0000000..a2820b4 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_7e.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_85.png b/docs/sprite_library/probotector_sprites/sprite_85.png new file mode 100644 index 0000000..8ae9426 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_85.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_86.png b/docs/sprite_library/probotector_sprites/sprite_86.png new file mode 100644 index 0000000..10046b1 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_86.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_87.png b/docs/sprite_library/probotector_sprites/sprite_87.png new file mode 100644 index 0000000..4ccc099 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_87.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_88.png b/docs/sprite_library/probotector_sprites/sprite_88.png new file mode 100644 index 0000000..15dd56e Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_88.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_89.png b/docs/sprite_library/probotector_sprites/sprite_89.png new file mode 100644 index 0000000..f842dab Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_89.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_8a.png b/docs/sprite_library/probotector_sprites/sprite_8a.png new file mode 100644 index 0000000..756c984 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_8a.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_8b.png b/docs/sprite_library/probotector_sprites/sprite_8b.png new file mode 100644 index 0000000..bcc116c Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_8b.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_8c.png b/docs/sprite_library/probotector_sprites/sprite_8c.png new file mode 100644 index 0000000..b2e0f41 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_8c.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_8d.png b/docs/sprite_library/probotector_sprites/sprite_8d.png new file mode 100644 index 0000000..76918ed Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_8d.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_8e.png b/docs/sprite_library/probotector_sprites/sprite_8e.png new file mode 100644 index 0000000..cebb7b4 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_8e.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_8f.png b/docs/sprite_library/probotector_sprites/sprite_8f.png new file mode 100644 index 0000000..5caf69a Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_8f.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_90.png b/docs/sprite_library/probotector_sprites/sprite_90.png new file mode 100644 index 0000000..d52e866 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_90.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_91.png b/docs/sprite_library/probotector_sprites/sprite_91.png new file mode 100644 index 0000000..7830edd Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_91.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_91_p2.png b/docs/sprite_library/probotector_sprites/sprite_91_p2.png new file mode 100644 index 0000000..b374123 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_91_p2.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_93.png b/docs/sprite_library/probotector_sprites/sprite_93.png new file mode 100644 index 0000000..7a4d029 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_93.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_94.png b/docs/sprite_library/probotector_sprites/sprite_94.png new file mode 100644 index 0000000..7a4d029 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_94.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_95.png b/docs/sprite_library/probotector_sprites/sprite_95.png new file mode 100644 index 0000000..f81b7f9 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_95.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_96.png b/docs/sprite_library/probotector_sprites/sprite_96.png new file mode 100644 index 0000000..2187ced Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_96.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_97.png b/docs/sprite_library/probotector_sprites/sprite_97.png new file mode 100644 index 0000000..3eb2e0d Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_97.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_98.png b/docs/sprite_library/probotector_sprites/sprite_98.png new file mode 100644 index 0000000..2a96fb3 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_98.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_ab.png b/docs/sprite_library/probotector_sprites/sprite_ab.png new file mode 100644 index 0000000..824b8ba Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_ab.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_b7.png b/docs/sprite_library/probotector_sprites/sprite_b7.png new file mode 100644 index 0000000..16f998d Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_b7.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_b8.png b/docs/sprite_library/probotector_sprites/sprite_b8.png new file mode 100644 index 0000000..16f998d Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_b8.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_b9.png b/docs/sprite_library/probotector_sprites/sprite_b9.png new file mode 100644 index 0000000..7c7b188 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_b9.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_ba.png b/docs/sprite_library/probotector_sprites/sprite_ba.png new file mode 100644 index 0000000..4806593 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_ba.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_bb.png b/docs/sprite_library/probotector_sprites/sprite_bb.png new file mode 100644 index 0000000..b10ae96 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_bb.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_bc.png b/docs/sprite_library/probotector_sprites/sprite_bc.png new file mode 100644 index 0000000..98c23b8 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_bc.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_bd.png b/docs/sprite_library/probotector_sprites/sprite_bd.png new file mode 100644 index 0000000..eba64f2 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_bd.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_be.png b/docs/sprite_library/probotector_sprites/sprite_be.png new file mode 100644 index 0000000..eba64f2 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_be.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_c3.png b/docs/sprite_library/probotector_sprites/sprite_c3.png new file mode 100644 index 0000000..e9fb58e Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_c3.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_c4.png b/docs/sprite_library/probotector_sprites/sprite_c4.png new file mode 100644 index 0000000..1ae687f Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_c4.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_c5.png b/docs/sprite_library/probotector_sprites/sprite_c5.png new file mode 100644 index 0000000..077ab2e Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_c5.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_c6.png b/docs/sprite_library/probotector_sprites/sprite_c6.png new file mode 100644 index 0000000..20cb8e7 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_c6.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_c7.png b/docs/sprite_library/probotector_sprites/sprite_c7.png new file mode 100644 index 0000000..0201c7a Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_c7.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_c8.png b/docs/sprite_library/probotector_sprites/sprite_c8.png new file mode 100644 index 0000000..ac1ae15 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_c8.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_c9.png b/docs/sprite_library/probotector_sprites/sprite_c9.png new file mode 100644 index 0000000..b45a365 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_c9.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_ca.png b/docs/sprite_library/probotector_sprites/sprite_ca.png new file mode 100644 index 0000000..2187c11 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_ca.png differ diff --git a/docs/sprite_library/probotector_sprites/sprite_cb.png b/docs/sprite_library/probotector_sprites/sprite_cb.png new file mode 100644 index 0000000..ec54629 Binary files /dev/null and b/docs/sprite_library/probotector_sprites/sprite_cb.png differ diff --git a/docs/sprite_library/sprite_40.png b/docs/sprite_library/sprite_40.png deleted file mode 100644 index c49d535..0000000 Binary files a/docs/sprite_library/sprite_40.png and /dev/null differ diff --git a/docs/sprite_library/sprite_6e.png b/docs/sprite_library/sprite_6e.png deleted file mode 100644 index eafa95a..0000000 Binary files a/docs/sprite_library/sprite_6e.png and /dev/null differ diff --git a/docs/sprite_library/sprite_6f.png b/docs/sprite_library/sprite_6f.png deleted file mode 100644 index 1fda18b..0000000 Binary files a/docs/sprite_library/sprite_6f.png and /dev/null differ diff --git a/docs/sprite_library/sprite_70.png b/docs/sprite_library/sprite_70.png deleted file mode 100644 index eafa95a..0000000 Binary files a/docs/sprite_library/sprite_70.png and /dev/null differ diff --git a/docs/sprite_library/sprite_72.png b/docs/sprite_library/sprite_72.png deleted file mode 100644 index 1fda18b..0000000 Binary files a/docs/sprite_library/sprite_72.png and /dev/null differ diff --git a/docs/sprite_library/sprite_78.png b/docs/sprite_library/sprite_78.png deleted file mode 100644 index 46aedf8..0000000 Binary files a/docs/sprite_library/sprite_78.png and /dev/null differ diff --git a/probotector-assets.txt b/probotector-assets.txt new file mode 100644 index 0000000..7453461 --- /dev/null +++ b/probotector-assets.txt @@ -0,0 +1,347 @@ +src\assets\graphic_data\alt_graphic_data_00.bin 37433 1408 +src\assets\graphic_data\alt_graphic_data_01.bin 38841 2976 +src\assets\graphic_data\alt_graphic_data_02.bin 41817 928 +src\assets\graphic_data\alt_graphic_data_03.bin 42745 1088 +src\assets\graphic_data\alt_graphic_data_04.bin 43833 1184 +src\assets\graphic_data\graphic_data_01.bin 76302 3167 +src\assets\graphic_data\graphic_data_02.bin 37031 402 +src\assets\graphic_data\graphic_data_03.bin 65553 1370 +src\assets\graphic_data\graphic_data_04.bin 66923 476 +src\assets\graphic_data\graphic_data_05.bin 81937 2727 +src\assets\graphic_data\graphic_data_06.bin 72222 1478 +src\assets\graphic_data\graphic_data_07.bin 84664 2435 +src\assets\graphic_data\graphic_data_08.bin 67598 4574 +src\assets\graphic_data\graphic_data_09.bin 72172 50 +src\assets\graphic_data\graphic_data_0a.bin 73702 833 +src\assets\graphic_data\graphic_data_0b.bin 87099 3911 +src\assets\graphic_data\graphic_data_0c.bin 98321 3197 +src\assets\graphic_data\graphic_data_0d.bin 101518 3822 +src\assets\graphic_data\graphic_data_0e.bin 105340 5339 +src\assets\graphic_data\graphic_data_0f.bin 74535 161 +src\assets\graphic_data\graphic_data_11.bin 74696 1369 +src\assets\graphic_data\graphic_data_12.bin 76065 237 +src\assets\graphic_data\graphic_data_13.bin 67399 199 +src\assets\graphic_data\graphic_data_14.bin 92230 1483 +src\assets\graphic_data\graphic_data_15.bin 110679 214 +src\assets\graphic_data\graphic_data_16.bin 110893 262 +src\assets\graphic_data\graphic_data_17.bin 93713 1097 +src\assets\graphic_data\graphic_data_18.bin 94810 80 +src\assets\graphic_data\graphic_data_19.bin 91010 474 +src\assets\graphic_data\graphic_data_1a.bin 91484 746 +src\assets\audio_data\sound_02.bin 18962 8 +src\assets\audio_data\sound_03.bin 18997 17 +src\assets\audio_data\sound_04.bin 19014 11 +src\assets\audio_data\sound_05.bin 19025 55 +src\assets\audio_data\sound_06.bin 19080 10 +src\assets\audio_data\sound_07.bin 19090 14 +src\assets\audio_data\sound_08.bin 19104 8 +src\assets\audio_data\sound_08_part_00.bin 19114 25 +src\assets\audio_data\sound_09.bin 19601 57 +src\assets\audio_data\sound_0a.bin 19139 41 +src\assets\audio_data\sound_0b.bin 19180 16 +src\assets\audio_data\sound_0b_part_00.bin 19198 23 +src\assets\audio_data\sound_0c.bin 19221 14 +src\assets\audio_data\sound_0c_part_00.bin 19237 29 +src\assets\audio_data\sound_0d.bin 19266 14 +src\assets\audio_data\sound_0d_part_00.bin 19282 23 +src\assets\audio_data\sound_0e.bin 19305 55 +src\assets\audio_data\sound_0f.bin 19360 99 +src\assets\audio_data\sound_10.bin 19459 12 +src\assets\audio_data\sound_10_part_00.bin 19473 6 +src\assets\audio_data\sound_11.bin 19479 10 +src\assets\audio_data\sound_11_part_00.bin 19491 6 +src\assets\audio_data\sound_12.bin 19497 14 +src\assets\audio_data\sound_13.bin 19511 90 +src\assets\audio_data\sound_14.bin 19658 10 +src\assets\audio_data\sound_14_part_00.bin 19670 14 +src\assets\audio_data\sound_15.bin 19801 45 +src\assets\audio_data\sound_16.bin 19684 35 +src\assets\audio_data\sound_17.bin 19719 37 +src\assets\audio_data\sound_18.bin 19756 13 +src\assets\audio_data\sound_18_part_00.bin 19771 8 +src\assets\audio_data\sound_19.bin 19779 22 +src\assets\audio_data\sound_1a.bin 19949 82 +src\assets\audio_data\sound_1b.bin 19846 5 +src\assets\audio_data\sound_1b_part_00.bin 19860 42 +src\assets\audio_data\sound_1b_part_02.bin 19910 39 +src\assets\audio_data\sound_1c.bin 20149 8 +src\assets\audio_data\sound_1c_part_00.bin 20159 23 +src\assets\audio_data\sound_1d.bin 20182 6 +src\assets\audio_data\sound_1d_part_00.bin 20190 21 +src\assets\audio_data\sound_1e.bin 20031 24 +src\assets\audio_data\sound_1f.bin 20055 23 +src\assets\audio_data\sound_20.bin 20078 71 +src\assets\audio_data\sound_21.bin 20211 13 +src\assets\audio_data\sound_21_part_00.bin 20224 11 +src\assets\audio_data\sound_21_part_02.bin 20250 11 +src\assets\audio_data\sound_21_part_03.bin 20263 11 +src\assets\audio_data\sound_21_part_04.bin 20276 11 +src\assets\audio_data\sound_21_part_05.bin 20289 11 +src\assets\audio_data\sound_21_part_06.bin 20302 11 +src\assets\audio_data\sound_21_part_07.bin 20315 11 +src\assets\audio_data\sound_21_part_08.bin 20328 12 +src\assets\audio_data\sound_21_part_09.bin 20342 12 +src\assets\audio_data\sound_21_part_0a.bin 20356 12 +src\assets\audio_data\sound_23.bin 20371 2 +src\assets\audio_data\sound_23_part_00.bin 20373 8 +src\assets\audio_data\sound_23_part_01.bin 20383 6 +src\assets\audio_data\sound_23_part_02.bin 20391 6 +src\assets\audio_data\sound_23_part_03.bin 20399 6 +src\assets\audio_data\sound_23_part_04.bin 20407 6 +src\assets\audio_data\sound_23_part_05.bin 20415 6 +src\assets\audio_data\sound_23_part_06.bin 20423 8 +src\assets\audio_data\sound_24.bin 20434 8 +src\assets\audio_data\sound_24_part_00.bin 20444 53 +src\assets\audio_data\sound_25.bin 20497 8 +src\assets\audio_data\sound_25_part_00.bin 20507 42 +src\assets\audio_data\sound_25_part_01.bin 20549 7 +src\assets\audio_data\sound_26.bin 20901 22 +src\assets\audio_data\sound_27.bin 20923 24 +src\assets\audio_data\sound_28.bin 20947 16 +src\assets\audio_data\sound_29.bin 20963 10 +src\assets\audio_data\sound_2a.bin 21560 29 +src\assets\audio_data\sound_2a_part_00.bin 21589 21 +src\assets\audio_data\sound_2a_part_01.bin 21612 361 +src\assets\audio_data\sound_2b_part_00.bin 21115 26 +src\assets\audio_data\sound_2b_part_01.bin 21143 415 +src\assets\audio_data\sound_2c.bin 21975 24 +src\assets\audio_data\sound_2c_part_00.bin 21999 39 +src\assets\audio_data\sound_2c_part_01.bin 22040 180 +src\assets\audio_data\sound_2c_part_02.bin 22220 5 +src\assets\audio_data\sound_2c_part_03.bin 22227 6 +src\assets\audio_data\sound_2c_part_04.bin 22235 168 +src\assets\audio_data\sound_2d.bin 22405 7 +src\assets\audio_data\sound_2d_part_00.bin 22414 4 +src\assets\audio_data\sound_2d_part_01.bin 22418 34 +src\assets\audio_data\sound_2d_part_02.bin 22454 176 +src\assets\audio_data\sound_2d_part_03.bin 22630 18 +src\assets\audio_data\sound_2d_part_04.bin 22650 13 +src\assets\audio_data\sound_2d_part_05.bin 22663 17 +src\assets\audio_data\sound_2d_part_06.bin 22682 16 +src\assets\audio_data\sound_2d_part_07.bin 22698 17 +src\assets\audio_data\sound_2d_part_08.bin 22717 12 +src\assets\audio_data\sound_2d_part_09.bin 22729 3 +src\assets\audio_data\sound_2d_part_0a.bin 22734 10 +src\assets\audio_data\sound_2e.bin 22933 20 +src\assets\audio_data\sound_2e_part_00.bin 22841 57 +src\assets\audio_data\sound_2e_part_01.bin 22900 33 +src\assets\audio_data\sound_2e_part_03.bin 22956 53 +src\assets\audio_data\sound_2e_part_04.bin 23011 85 +src\assets\audio_data\sound_2e_part_05.bin 23098 42 +src\assets\audio_data\sound_2e_part_06.bin 23142 27 +src\assets\audio_data\sound_2f.bin 23169 4 +src\assets\audio_data\sound_2f_part_00.bin 23173 17 +src\assets\audio_data\sound_2f_part_02.bin 23195 4 +src\assets\audio_data\sound_2f_part_03.bin 23199 26 +src\assets\audio_data\sound_2f_part_04.bin 23230 92 +src\assets\audio_data\sound_2f_part_05.bin 23324 32 +src\assets\audio_data\sound_2f_part_06.bin 23358 57 +src\assets\audio_data\sound_30.bin 23415 3 +src\assets\audio_data\sound_30_part_00.bin 23418 3 +src\assets\audio_data\sound_30_part_02.bin 23426 28 +src\assets\audio_data\sound_30_part_03.bin 23459 57 +src\assets\audio_data\sound_31_part_01.bin 23524 3 +src\assets\audio_data\sound_31_part_02.bin 23529 31 +src\assets\audio_data\sound_31_part_03.bin 23562 71 +src\assets\audio_data\sound_32.bin 23732 6 +src\assets\audio_data\sound_32_part_00.bin 23681 33 +src\assets\audio_data\sound_32_part_01.bin 23714 9 +src\assets\audio_data\sound_32_part_02.bin 23725 7 +src\assets\audio_data\sound_32_part_03.bin 23738 3 +src\assets\audio_data\sound_32_part_05.bin 23744 17 +src\assets\audio_data\sound_32_part_06.bin 23763 20 +src\assets\audio_data\sound_32_part_07.bin 23783 34 +src\assets\audio_data\sound_32_part_08.bin 23822 3 +src\assets\audio_data\sound_32_part_09.bin 23827 3 +src\assets\audio_data\sound_32_part_0a.bin 23832 42 +src\assets\audio_data\sound_33.bin 23874 5 +src\assets\audio_data\sound_33_part_00.bin 23879 3 +src\assets\audio_data\sound_33_part_01.bin 23884 18 +src\assets\audio_data\sound_33_part_02.bin 23904 21 +src\assets\audio_data\sound_33_part_03.bin 23925 36 +src\assets\audio_data\sound_33_part_04.bin 23966 4 +src\assets\audio_data\sound_33_part_05.bin 23972 6 +src\assets\audio_data\sound_34.bin 23978 3 +src\assets\audio_data\sound_34_part_00.bin 23981 3 +src\assets\audio_data\sound_34_part_01.bin 23986 16 +src\assets\audio_data\sound_34_part_02.bin 24004 16 +src\assets\audio_data\sound_34_part_03.bin 24022 30 +src\assets\audio_data\sound_34_part_04.bin 24022 3 +src\assets\audio_data\sound_34_part_05.bin 24057 3 +src\assets\audio_data\sound_34_part_06.bin 24062 4 +src\assets\audio_data\sound_34_part_07.bin 24068 3 +src\assets\audio_data\sound_34_part_08.bin 24071 3 +src\assets\audio_data\sound_34_part_09.bin 24076 4 +src\assets\audio_data\sound_34_part_0a.bin 24086 11 +src\assets\audio_data\sound_34_part_0b.bin 24099 11 +src\assets\audio_data\sound_35_part_00.bin 24111 3 +src\assets\audio_data\sound_35_part_02.bin 24122 11 +src\assets\audio_data\sound_35_part_03.bin 24135 10 +src\assets\audio_data\sound_35_part_04.bin 24145 11 +src\assets\audio_data\sound_35_part_05.bin 24158 9 +src\assets\audio_data\sound_35_part_06.bin 24167 11 +src\assets\audio_data\sound_35_part_07.bin 24180 11 +src\assets\audio_data\sound_36_part_00.bin 24255 54 +src\assets\audio_data\sound_36_part_01.bin 24309 17 +src\assets\audio_data\sound_36_part_02.bin 24328 19 +src\assets\audio_data\sound_36_part_03.bin 24349 55 +src\assets\audio_data\sound_37.bin 24406 6 +src\assets\audio_data\sound_37_part_00.bin 24412 8 +src\assets\audio_data\sound_37_part_01.bin 24420 20 +src\assets\audio_data\sound_37_part_02.bin 24442 4 +src\assets\audio_data\sound_37_part_03.bin 24446 9 +src\assets\audio_data\sound_37_part_04.bin 24457 11 +src\assets\audio_data\sound_37_part_05.bin 24470 48 +src\assets\audio_data\sound_38.bin 24520 4 +src\assets\audio_data\sound_38_part_00.bin 24524 6 +src\assets\audio_data\sound_38_part_01.bin 24530 5 +src\assets\audio_data\sound_38_part_02.bin 24537 3 +src\assets\audio_data\sound_38_part_03.bin 24540 5 +src\assets\audio_data\sound_38_part_04.bin 24547 5 +src\assets\audio_data\sound_38_part_05.bin 24552 7 +src\assets\audio_data\sound_38_part_06.bin 24561 10 +src\assets\audio_data\sound_38_part_07.bin 24573 20 +src\assets\audio_data\sound_39_part_00.bin 24596 3 +src\assets\audio_data\sound_39_part_01.bin 24601 4 +src\assets\audio_data\sound_39_part_02.bin 24605 12 +src\assets\audio_data\sound_39_part_03.bin 24619 10 +src\assets\audio_data\sound_39_part_04.bin 24629 12 +src\assets\audio_data\sound_39_part_05.bin 24643 10 +src\assets\audio_data\sound_39_part_06.bin 24653 12 +src\assets\audio_data\sound_39_part_07.bin 24667 11 +src\assets\audio_data\sound_39_part_08.bin 24678 5 +src\assets\audio_data\sound_39_part_09.bin 24685 5 +src\assets\audio_data\sound_3a_part_00.bin 24747 33 +src\assets\audio_data\sound_3a_part_01.bin 24782 7 +src\assets\audio_data\sound_3a_part_02.bin 24789 15 +src\assets\audio_data\sound_3a_part_03.bin 24806 16 +src\assets\audio_data\sound_3a_part_04.bin 24822 6 +src\assets\audio_data\sound_3a_part_05.bin 24830 38 +src\assets\audio_data\sound_3a_part_06.bin 24868 6 +src\assets\audio_data\sound_3a_part_07.bin 24876 39 +src\assets\audio_data\sound_3a_part_08.bin 24915 6 +src\assets\audio_data\sound_3a_part_09.bin 24923 15 +src\assets\audio_data\sound_3a_part_0a.bin 24938 6 +src\assets\audio_data\sound_3a_part_0b.bin 24946 67 +src\assets\audio_data\sound_3b.bin 25015 12 +src\assets\audio_data\sound_3b_part_00.bin 25027 30 +src\assets\audio_data\sound_3b_part_01.bin 25059 19 +src\assets\audio_data\sound_3b_part_02.bin 25080 171 +src\assets\audio_data\sound_3c.bin 25253 11 +src\assets\audio_data\sound_3c_part_00.bin 25266 8 +src\assets\audio_data\sound_3c_part_01.bin 25276 26 +src\assets\audio_data\sound_3c_part_02.bin 25302 20 +src\assets\audio_data\sound_3c_part_03.bin 25324 46 +src\assets\audio_data\sound_3c_part_04.bin 25370 6 +src\assets\audio_data\sound_3c_part_05.bin 25378 27 +src\assets\audio_data\sound_3d_part_00.bin 25408 3 +src\assets\audio_data\sound_3d_part_02.bin 25413 8 +src\assets\audio_data\sound_3d_part_03.bin 25421 24 +src\assets\audio_data\sound_3d_part_04.bin 25447 12 +src\assets\audio_data\sound_3d_part_05.bin 25461 10 +src\assets\audio_data\sound_3d_part_06.bin 25471 14 +src\assets\audio_data\sound_3d_part_07.bin 25487 90 +src\assets\audio_data\sound_3e.bin 25720 20 +src\assets\audio_data\sound_3e_part_00.bin 25644 18 +src\assets\audio_data\sound_3e_part_01.bin 25664 17 +src\assets\audio_data\sound_3e_part_02.bin 25681 20 +src\assets\audio_data\sound_3e_part_03.bin 25703 17 +src\assets\audio_data\sound_3e_part_04.bin 25742 17 +src\assets\audio_data\sound_3e_part_05.bin 25759 20 +src\assets\audio_data\sound_3e_part_06.bin 25781 16 +src\assets\audio_data\sound_3e_part_07.bin 25797 68 +src\assets\audio_data\sound_3e_part_08.bin 25867 11 +src\assets\audio_data\sound_3e_part_09.bin 25880 10 +src\assets\audio_data\sound_3e_part_0a.bin 25899 21 +src\assets\audio_data\sound_3e_part_0b.bin 25922 19 +src\assets\audio_data\sound_3e_part_0c.bin 25941 21 +src\assets\audio_data\sound_3e_part_0d.bin 25964 20 +src\assets\audio_data\sound_3f.bin 25984 3 +src\assets\audio_data\sound_3f_part_00.bin 25989 66 +src\assets\audio_data\sound_3f_part_01.bin 26057 14 +src\assets\audio_data\sound_3f_part_02.bin 26073 14 +src\assets\audio_data\sound_3f_part_03.bin 26093 3 +src\assets\audio_data\sound_3f_part_04.bin 26096 3 +src\assets\audio_data\sound_3f_part_05.bin 26101 3 +src\assets\audio_data\sound_40.bin 26107 10 +src\assets\audio_data\sound_40_part_00.bin 26119 4 +src\assets\audio_data\sound_40_part_01.bin 26125 49 +src\assets\audio_data\sound_40_part_02.bin 26176 9 +src\assets\audio_data\sound_40_part_03.bin 26187 10 +src\assets\audio_data\sound_40_part_04.bin 26206 10 +src\assets\audio_data\sound_40_part_05.bin 26218 9 +src\assets\audio_data\sound_40_part_06.bin 26227 10 +src\assets\audio_data\sound_40_part_07.bin 26239 11 +src\assets\audio_data\sound_41.bin 26250 8 +src\assets\audio_data\sound_41_part_00.bin 26260 7 +src\assets\audio_data\sound_41_part_01.bin 26267 10 +src\assets\audio_data\sound_41_part_02.bin 26279 9 +src\assets\audio_data\sound_41_part_03.bin 26288 14 +src\assets\audio_data\sound_41_part_04.bin 26304 16 +src\assets\audio_data\sound_41_part_05.bin 26322 34 +src\assets\audio_data\sound_41_part_06.bin 26356 6 +src\assets\audio_data\sound_41_part_07.bin 26364 4 +src\assets\audio_data\sound_41_part_08.bin 26368 6 +src\assets\audio_data\sound_41_part_09.bin 26376 8 +src\assets\audio_data\sound_42.bin 26531 91 +src\assets\audio_data\sound_42_part_00.bin 26624 134 +src\assets\audio_data\sound_43.bin 26760 5 +src\assets\audio_data\sound_43_part_00.bin 26437 15 +src\assets\audio_data\sound_43_part_01.bin 26454 17 +src\assets\audio_data\sound_43_part_02.bin 26473 19 +src\assets\audio_data\sound_43_part_03.bin 26494 37 +src\assets\audio_data\sound_43_part_04.bin 26770 119 +src\assets\audio_data\sound_44.bin 26891 135 +src\assets\audio_data\sound_44_part_00.bin 27028 119 +src\assets\audio_data\sound_45.bin 27166 27 +src\assets\audio_data\sound_45_part_00.bin 27149 6 +src\assets\audio_data\sound_45_part_01.bin 27155 8 +src\assets\audio_data\sound_45_part_02.bin 27195 25 +src\assets\audio_data\sound_45_part_03.bin 27231 14 +src\assets\audio_data\sound_46.bin 27298 33 +src\assets\audio_data\sound_47.bin 27331 33 +src\assets\audio_data\sound_48.bin 27364 27 +src\assets\audio_data\sound_49.bin 27391 21 +src\assets\audio_data\sound_4a.bin 27823 2 +src\assets\audio_data\sound_4a_part_00.bin 27644 179 +src\assets\audio_data\sound_4a_part_01.bin 27827 4 +src\assets\audio_data\sound_4a_part_02.bin 27833 4 +src\assets\audio_data\sound_4a_part_03.bin 27837 109 +src\assets\audio_data\sound_4b_part_00.bin 27949 3 +src\assets\audio_data\sound_4b_part_01.bin 27954 3 +src\assets\audio_data\sound_4b_part_02.bin 27957 15 +src\assets\audio_data\sound_4b_part_03.bin 27974 35 +src\assets\audio_data\sound_4b_part_04.bin 28009 14 +src\assets\audio_data\sound_4b_part_05.bin 28025 15 +src\assets\audio_data\sound_4b_part_06.bin 28042 35 +src\assets\audio_data\sound_4b_part_07.bin 28077 14 +src\assets\audio_data\sound_4b_part_08.bin 28093 88 +src\assets\audio_data\sound_4c_part_00.bin 28184 14 +src\assets\audio_data\sound_4c_part_01.bin 28200 6 +src\assets\audio_data\sound_4c_part_02.bin 28206 12 +src\assets\audio_data\sound_4c_part_03.bin 28220 10 +src\assets\audio_data\sound_4c_part_04.bin 28230 11 +src\assets\audio_data\sound_4c_part_05.bin 28243 9 +src\assets\audio_data\sound_4c_part_06.bin 28252 11 +src\assets\audio_data\sound_4c_part_07.bin 28265 10 +src\assets\audio_data\sound_4c_part_08.bin 28275 11 +src\assets\audio_data\sound_4c_part_09.bin 28288 9 +src\assets\audio_data\sound_4c_part_0a.bin 28297 11 +src\assets\audio_data\sound_4d_part_00.bin 28314 11 +src\assets\audio_data\sound_4d_part_01.bin 28327 6 +src\assets\audio_data\sound_4e.bin 27460 40 +src\assets\audio_data\sound_4f.bin 27500 42 +src\assets\audio_data\sound_50.bin 27542 44 +src\assets\audio_data\sound_51.bin 27586 32 +src\assets\audio_data\sound_52.bin 20775 83 +src\assets\audio_data\sound_53.bin 20858 43 +src\assets\audio_data\sound_54.bin 18970 26 +src\assets\audio_data\sound_55.bin 20556 25 +src\assets\audio_data\sound_56.bin 20581 8 +src\assets\audio_data\sound_56_part_00.bin 20591 53 +src\assets\audio_data\sound_57.bin 20644 4 +src\assets\audio_data\sound_58.bin 20648 68 +src\assets\audio_data\sound_59.bin 20716 8 +src\assets\audio_data\sound_59_part_00.bin 20726 49 +src\assets\audio_data\dpcm_sample_00.bin 130064 81 +src\assets\audio_data\dpcm_sample_01.bin 130256 593 diff --git a/src/bank0.asm b/src/bank0.asm index 2f4167d..8ea71ac 100644 --- a/src/bank0.asm +++ b/src/bank0.asm @@ -1,4 +1,4 @@ -; Contra US Disassembly - v1.1 +; Contra US Disassembly - v1.2 ; https://github.com/vermiceli/nes-contra-us ; Bank 0 is used exclusively for enemy routines. Enemy routines are the logic ; controlling enemy behaviors, AI, movements, and attack patterns. Almost every @@ -146,8 +146,12 @@ weapon_item_routine_00: sta ENEMY_STATE_WIDTH,x ; mark weapon item so bullets travel through it lda #$22 ; a = #$22 sta ENEMY_SCORE_COLLISION,x ; score code #$02, collision type #$02 +.ifdef Probotector + lda #$00 ; use sprite code palette +.else lda #$05 ; set sprite palette #$01, bit 2 specifies sprite code ROM data override - sta ENEMY_SPRITE_ATTR,x ; set weapon item sprite palette to palette #$01 +.endif + sta ENEMY_SPRITE_ATTR,x ; set weapon item sprite palette to palette lda LEVEL_LOCATION_TYPE ; 0 = outdoor; 1 = indoor beq @set_velocity_outdoor ; branch for outdoor level lda ENEMY_Y_POS,x ; indoor level, load y position on screen @@ -362,7 +366,7 @@ set_weapon_item_sprite: weapon_item_sprite_code_tbl: .byte $33,$34,$31,$2f,$32,$30,$4e -; pointer table for enemy bullet (#$4 * #42 = #48 bytes) +; pointer table for enemy bullet (#$4 * #$2 = #$8 bytes) enemy_bullet_routine_ptr_tbl: .addr enemy_bullet_routine_00 ; CPU address $814f (initialize collision code) .addr enemy_bullet_routine_01 ; CPU address $8161 (init palette, sprite, and velocity) @@ -666,7 +670,7 @@ weapon_box_destroyed_supertile: .byte $09,$09 ; level 7 .byte $16,$16 ; ending -; pointer table for weapon zeppelin (#43 * #$2 = #$6 bytes) +; pointer table for weapon zeppelin (#$3 * #$2 = #$6 bytes) flying_capsule_routine_ptr_tbl: .addr flying_capsule_routine_00 ; CPU address $830b .addr flying_capsule_routine_01 ; CPU address $835d @@ -1076,7 +1080,7 @@ red_turret_routine_03: sta ENEMY_FRAME,x ; initial frame code when returning to ground (#$02) jsr disable_enemy_collision ; prevent player enemy collision check and allow bullets to pass through enemy lda #$01 ; a = #$01 - jmp set_enemy_delay_adv_routine ; set ENEMY_ANIMATION_DELAY counter to #401 advance to red_turret_routine_04 + jmp set_enemy_delay_adv_routine ; set ENEMY_ANIMATION_DELAY counter to #$01 advance to red_turret_routine_04 @gen_bullet_if_appropriate: jsr red_turret_find_target_player ; find player to target, set to y @@ -3231,7 +3235,7 @@ wall_core_enable_collision_adv_routine: jsr enable_bullet_enemy_collision ; allow bullets to collide (and stop) upon colliding with wall core jmp advance_enemy_routine -; table for core opening update nametable tiles (offsets into level_2_4_tile_animation) (#43 bytes) +; table for core opening update nametable tiles (offsets into level_2_4_tile_animation) (#$03 bytes) ; #$85 wall turret / core - opening frame 1 ; #$86 core - opening frame 2 ; #$87 core - open @@ -3553,7 +3557,7 @@ jumping_soldier_routine_01: lda #$93 ; a = #$93 (sprite_93 jumping man running) cpy #$04 ; compare animation delay to #$04 bcc @set_sprite ; continue if animation delay is less than #$04 - lda #$98 ; animation delay is > #404, set a = #$98 (sprite_98 jumping man running) + lda #$98 ; animation delay is > #$04, set a = #$98 (sprite_98 jumping man running) @set_sprite: sta ENEMY_SPRITES,x ; write enemy sprite code to CPU buffer @@ -3561,10 +3565,14 @@ jumping_soldier_routine_01: lsr lsr lda #$00 ; a = #$00 (default palette) - bcc @set_sprite_attr - lda #$05 ; sprite palette #$01 (red jumping man) - ; #$00-#$03 (green normal), #$04 (blue), #$05 (red) - ; #$06 (fire), #$07 (green with green hair) + bcc @set_sprite_attr ; branch if jumping soldier doesn't drop a R weapon item +.ifdef Probotector + lda #$07 ; red jumping soldier, set sprite palette #$03 and sprite code override bit + ; jumping soldier drops R weapon, so override palette so it's red +.else + lda #$05 ; red jumping soldier, set sprite palette #$01 and sprite code override bit + ; jumping soldier drops R weapon, so override palette so it's red +.endif @set_sprite_attr: sta $08 @@ -7439,6 +7447,14 @@ boss_giant_soldier_routine_ptr_tbl: ; boss robot - pointer 0 boss_giant_soldier_routine_00: +.ifdef Probotector + stx ENEMY_CURRENT_SLOT ; backup current enemy slot number + lda #$5e ; 4th level sprite palette + sta LEVEL_PALETTE_INDEX+7 ; set 4th level sprite palette (offset into game_palettes) + lda #$20 ; a = #$20 + jsr load_palettes_color_to_cpu ; load #$20 palette colors into PALETTE_CPU_BUFFER based on LEVEL_PALETTE_INDEX + ldx ENEMY_CURRENT_SLOT ; restore current enemy slot number +.endif lda PLAYER_WEAPON_STRENGTH asl asl diff --git a/src/bank1.asm b/src/bank1.asm index 17651aa..76ae2cf 100644 --- a/src/bank1.asm +++ b/src/bank1.asm @@ -1,4 +1,4 @@ -; Contra US Disassembly - v1.1 +; Contra US Disassembly - v1.2 ; https://github.com/vermiceli/nes-contra-us ; Bank 1 is responsible for audio and sprites. The audio code takes up about ; 3/4 of the bank. The remaining 1/4 of the bank is for sprite data and code to @@ -4309,184 +4309,185 @@ sprite_ptr_tbl_0: .addr sprite_1d ; CPU address $b356 - player in water aiming forward .addr sprite_1e ; CPU address $b366 - default bullet .addr sprite_1f ; CPU address $b369 - M bullet - .addr sprite_20 ; CPU address $6cb3 - S bullet, mortar - .addr sprite_21 ; CPU address $6fb3 - boss turret bullet - .addr sprite_22 ; CPU address $72b3 - F bullet and snow field level boss ufo bomb - .addr sprite_23 ; CPU address $75b3 - L bullet (up) - .addr sprite_24 ; CPU address $78b3 - L bullet - .addr sprite_25 ; CPU address $81b3 - L bullet (angled) - .addr sprite_26 ; CPU address $84b3 - soldier crouched shooting - .addr sprite_27 ; CPU address $95b3 - soldier running 1 - .addr sprite_28 ; CPU address $a6b3 - soldier running 2 - .addr sprite_29 ; CPU address $b2b3 - soldier shooting angled up - .addr sprite_2a ; CPU address $c3b3 - hangar mine cart (frame 1) - .addr sprite_2b ; CPU address $dcb3 - hangar mine cart (frame 2) - .addr sprite_2c ; CPU address $e8b3 - soldier shooting - .addr sprite_2d ; CPU address $fdb3 - soldier shooting angled down - .addr sprite_2e ; CPU address $12b4 - unknown (doesn't seem to be used) - .addr sprite_2f ; CPU address $23b4 - S weapon item - .addr sprite_30 ; CPU address $30b4 - B weapon item - .addr sprite_31 ; CPU address $38b4 - F weapon item - .addr sprite_32 ; CPU address $40b4 - L weapon item - .addr sprite_33 ; CPU address $48b4 - R weapon item - .addr sprite_34 ; CPU address $50b4 - M weapon item - .addr sprite_35 ; CPU address $58b4 - big explosion - .addr sprite_36 ; CPU address $79b4 - explosion - .addr sprite_37 ; CPU address $8eb4 - small explosion - .addr sprite_38 ; CPU address $97b4 - round explosion - .addr sprite_39 ; CPU address $b0b4 - thick explosion ring - .addr sprite_3a ; CPU address $d1b4 - wide explosion ring - .addr sprite_3b ; CPU address $f2b4 - soldier running - .addr sprite_3c ; CPU address $03b5 - soldier running - .addr sprite_3d ; CPU address $14b5 - soldier running - .addr sprite_3e ; CPU address $25b5 - soldier running - .addr sprite_3f ; CPU address $31b5 - soldier running - .addr sprite_40 ; CPU address $3db5 - soldier shooting - .addr sprite_41 ; CPU address $4db5 - soldier shooting downward - .addr sprite_42 ; CPU address $62b5 - soldier shooting up angled - .addr sprite_43 ; CPU address $72b5 - rifle man shooting - .addr sprite_44 ; CPU address $82b5 - rifle man behind bush (frame 1) - .addr sprite_45 ; CPU address $87b5 - rifle man behind bush (frame 2) - .addr sprite_46 ; CPU address $94b5 - rifle man behind bush (frame 3) - .addr sprite_47 ; CPU address $98b5 - small ring explosion - .addr sprite_48 ; CPU address $9bb5 - floating rock (waterfall level) - .addr sprite_49 ; CPU address $b8b5 - bridge fire (waterfall level) - .addr sprite_4a ; CPU address $c1b5 - boulder (waterfall level) - .addr sprite_4b ; CPU address $dab5 - scuba soldier hiding - .addr sprite_4c ; CPU address $e3b5 - scuba soldier out of water shooting up - .addr sprite_4d ; CPU address $f0b5 - weapon zeppelin - .addr sprite_4e ; CPU address $fdb5 - flashing falcon weapon - .addr sprite_4f ; CPU address $05b6 - unused blank sprite - .addr sprite_50 ; CPU address $06b6 - indoor player facing up - .addr sprite_51 ; CPU address $23b6 - indoor player strafing (frame 1) - .addr sprite_52 ; CPU address $33b6 - indoor player strafing (frame 2) - .addr sprite_53 ; CPU address $43b6 - indoor player strafing (frame 3) - .addr sprite_54 ; CPU address $53b6 - indoor player crouch - .addr sprite_55 ; CPU address $70b6 - indoor player electrocuted - .addr sprite_56 ; CPU address $91b6 - indoor player lying dead - .addr sprite_57 ; CPU address $b2b6 - indoor player running - .addr sprite_58 ; CPU address $cbb6 - indoor player running - .addr sprite_59 ; CPU address $e4b6 - unused blank sprite - .addr sprite_59 ; CPU address $e4b6 - unused blank sprite - .addr sprite_59 ; CPU address $e4b6 - unused blank sprite - .addr sprite_59 ; CPU address $e4b6 - unused blank sprite - .addr sprite_5d ; CPU address $e5b6 - boss eye - .addr sprite_5e ; CPU address $06b7 - boss eye - .addr sprite_5f ; CPU address $1ab7 - boss eye - .addr sprite_60 ; CPU address $2eb7 - boss eye - .addr sprite_61 ; CPU address $42b7 - boss eye - .addr sprite_62 ; CPU address $4eb7 - boss eye - .addr sprite_63 ; CPU address $56b7 - small boss eye projectile (unused) - .addr sprite_64 ; CPU address $5fb7 - boss eye projectile - .addr sprite_65 ; CPU address $80b7 - unused blank sprite - .addr sprite_65 ; CPU address $80b7 - unused blank sprite - .addr sprite_65 ; CPU address $80b7 - unused blank sprite - .addr sprite_68 ; CPU address $81b7 - base 2 boss metal helmet (Godomuga) (frame 1) - .addr sprite_69 ; CPU address $a2b7 - base 2 boss metal helmet (Godomuga) (frame 2) - .addr sprite_6a ; CPU address $beb7 - base 2 boss metal helmet (Godomuga) (frame 3) - .addr sprite_6b ; CPU address $d2b7 - base 2 boss metal helmet (Godomuga) (frame 4) - .addr sprite_6c ; CPU address $deb7 - base 2 boss metal helmet (Godomuga) (frame 5) - .addr sprite_6d ; CPU address $eab7 - base 2 boss metal helmet (Godomuga) bubble projectile - .addr sprite_6e ; CPU address $f3b7 - base 2 boss metal helmet (Godomuga) bubble projectile - .addr sprite_6f ; CPU address $fcb7 - base 2 boss metal helmet (Godomuga) bubble projectile - .addr sprite_70 ; CPU address $ffb7 - base 2 boss metal helmet (Godomuga) bubble projectile - .addr sprite_71 ; CPU address $08b8 - base 2 boss metal helmet (Godomuga) bubble projectile - .addr sprite_72 ; CPU address $11b8 - base 2 boss metal helmet (Godomuga) bubble projectile - .addr sprite_73 ; CPU address $14b8 - water splash - .addr sprite_74 ; CPU address $1db8 - ice grenade - .addr sprite_75 ; CPU address $26b8 - ice grenade - .addr sprite_76 ; CPU address $2fb8 - ice grenade - .addr sprite_77 ; CPU address $38b8 - ice grenade (vertical) - .addr sprite_78 ; CPU address $41b8 - !(UNUSED) duplicate of sprite_74 (ice grenade lean right), unused in game - .addr sprite_79 ; CPU address $4ab8 - dragon boss projectile - .addr sprite_7a ; CPU address $53b8 - dragon arm interior orb (gray) - .addr sprite_7b ; CPU address $5cb8 - dragon arm hand orb (red) - .addr sprite_7c ; CPU address $65b8 - snow field boss mini UFO - .addr sprite_7d ; CPU address $72b8 - snow field boss mini UFO - .addr sprite_7e ; CPU address $7fb8 - snow field boss mini UFO - .addr sprite_7f ; CPU address $8cb8 - unknown (doesn't seem to be used) + .addr sprite_20 ; CPU address $b36c - S bullet, mortar + .addr sprite_21 ; CPU address $b36f - boss turret bullet + .addr sprite_22 ; CPU address $b372 - F bullet and snow field level boss ufo bomb + .addr sprite_23 ; CPU address $b375 - L bullet (up) + .addr sprite_24 ; CPU address $b378 - L bullet + .addr sprite_25 ; CPU address $b381 - L bullet (angled) + .addr sprite_26 ; CPU address $b384 - soldier crouched shooting + .addr sprite_27 ; CPU address $b395 - soldier running 1 + .addr sprite_28 ; CPU address $b3a6 - soldier running 2 + .addr sprite_29 ; CPU address $b3b2 - soldier shooting angled up + .addr sprite_2a ; CPU address $b3c3 - hangar mine cart (frame 1) + .addr sprite_2b ; CPU address $b3dc - hangar mine cart (frame 2) + .addr sprite_2c ; CPU address $b3e8 - soldier shooting + .addr sprite_2d ; CPU address $b3fd - soldier shooting angled down + .addr sprite_2e ; CPU address $b412 - unknown (doesn't seem to be used) + .addr sprite_2f ; CPU address $b423 - S weapon item + .addr sprite_30 ; CPU address $b430 - B weapon item + .addr sprite_31 ; CPU address $b438 - F weapon item + .addr sprite_32 ; CPU address $b440 - L weapon item + .addr sprite_33 ; CPU address $b448 - R weapon item + .addr sprite_34 ; CPU address $b450 - M weapon item + .addr sprite_35 ; CPU address $b458 - big explosion + .addr sprite_36 ; CPU address $b479 - explosion + .addr sprite_37 ; CPU address $b48e - small explosion + .addr sprite_38 ; CPU address $b497 - round explosion + .addr sprite_39 ; CPU address $b4b0 - thick explosion ring + .addr sprite_3a ; CPU address $b4d1 - wide explosion ring + .addr sprite_3b ; CPU address $b4f2 - soldier running + .addr sprite_3c ; CPU address $b503 - soldier running + .addr sprite_3d ; CPU address $b514 - soldier running + .addr sprite_3e ; CPU address $b525 - soldier running + .addr sprite_3f ; CPU address $b531 - soldier running + .addr sprite_40 ; CPU address $b53d - soldier shooting + .addr sprite_41 ; CPU address $b54d - soldier shooting downward + .addr sprite_42 ; CPU address $b562 - soldier shooting up angled + .addr sprite_43 ; CPU address $b572 - rifle man shooting + .addr sprite_44 ; CPU address $b582 - rifle man behind bush (frame 1) + .addr sprite_45 ; CPU address $b587 - rifle man behind bush (frame 2) + .addr sprite_46 ; CPU address $b594 - rifle man behind bush (frame 3) + .addr sprite_47 ; CPU address $b598 - small ring explosion + .addr sprite_48 ; CPU address $b59b - floating rock (waterfall level) + .addr sprite_49 ; CPU address $b5b8 - bridge fire (waterfall level) + .addr sprite_4a ; CPU address $b5c1 - boulder (waterfall level) + .addr sprite_4b ; CPU address $b5da - scuba soldier hiding + .addr sprite_4c ; CPU address $b5e3 - scuba soldier out of water shooting up + .addr sprite_4d ; CPU address $b5f0 - weapon zeppelin + .addr sprite_4e ; CPU address $b5fd - flashing falcon weapon + .addr sprite_4f ; CPU address $b605 - unused blank sprite + .addr sprite_50 ; CPU address $b606 - indoor player facing up + .addr sprite_51 ; CPU address $b623 - indoor player strafing (frame 1) + .addr sprite_52 ; CPU address $b633 - indoor player strafing (frame 2) + .addr sprite_53 ; CPU address $b643 - indoor player strafing (frame 3) + .addr sprite_54 ; CPU address $b653 - indoor player crouch + .addr sprite_55 ; CPU address $b670 - indoor player electrocuted + .addr sprite_56 ; CPU address $b691 - indoor player lying dead + .addr sprite_57 ; CPU address $b6b2 - indoor player running + .addr sprite_58 ; CPU address $b6cb - indoor player running + .addr sprite_59 ; CPU address $b6e4 - unused blank sprite + .addr sprite_59 ; CPU address $b6e4 - unused blank sprite + .addr sprite_59 ; CPU address $b6e4 - unused blank sprite + .addr sprite_59 ; CPU address $b6e4 - unused blank sprite + .addr sprite_5d ; CPU address $b6e5 - boss eye + .addr sprite_5e ; CPU address $b706 - boss eye + .addr sprite_5f ; CPU address $b71a - boss eye + .addr sprite_60 ; CPU address $b72e - boss eye + .addr sprite_61 ; CPU address $b742 - boss eye + .addr sprite_62 ; CPU address $b74e - boss eye + .addr sprite_63 ; CPU address $b756 - small boss eye projectile (unused) + .addr sprite_64 ; CPU address $b75f - boss eye projectile + .addr sprite_65 ; CPU address $b780 - unused blank sprite + .addr sprite_65 ; CPU address $b780 - unused blank sprite + .addr sprite_65 ; CPU address $b780 - unused blank sprite + .addr sprite_68 ; CPU address $b781 - base 2 boss metal helmet (Godomuga) (frame 1) + .addr sprite_69 ; CPU address $b7a2 - base 2 boss metal helmet (Godomuga) (frame 2) + .addr sprite_6a ; CPU address $b7be - base 2 boss metal helmet (Godomuga) (frame 3) + .addr sprite_6b ; CPU address $b7d2 - base 2 boss metal helmet (Godomuga) (frame 4) + .addr sprite_6c ; CPU address $b7de - base 2 boss metal helmet (Godomuga) (frame 5) + .addr sprite_6d ; CPU address $b7ea - base 2 boss metal helmet (Godomuga) bubble projectile + .addr sprite_6e ; CPU address $b7f3 - base 2 boss metal helmet (Godomuga) bubble projectile + .addr sprite_6f ; CPU address $b7fc - base 2 boss metal helmet (Godomuga) bubble projectile + .addr sprite_70 ; CPU address $b7ff - base 2 boss metal helmet (Godomuga) bubble projectile + .addr sprite_71 ; CPU address $b808 - base 2 boss metal helmet (Godomuga) bubble projectile + .addr sprite_72 ; CPU address $b811 - base 2 boss metal helmet (Godomuga) bubble projectile + .addr sprite_73 ; CPU address $b814 - water splash + .addr sprite_74 ; CPU address $b81d - ice grenade + .addr sprite_75 ; CPU address $b826 - ice grenade + .addr sprite_76 ; CPU address $b82f - ice grenade + .addr sprite_77 ; CPU address $b838 - ice grenade (vertical) + .addr sprite_78 ; CPU address $b841 - !(UNUSED) duplicate of sprite_74 (ice grenade lean right), unused in game + .addr sprite_79 ; CPU address $b84a - dragon boss projectile + .addr sprite_7a ; CPU address $b853 - dragon arm interior orb (gray) + .addr sprite_7b ; CPU address $b85c - dragon arm hand orb (red) + .addr sprite_7c ; CPU address $b865 - snow field boss mini UFO + .addr sprite_7d ; CPU address $b872 - snow field boss mini UFO + .addr sprite_7e ; CPU address $b87f - snow field boss mini UFO + .addr sprite_7f ; CPU address $b88c - unknown (doesn't seem to be used) sprite_ptr_tbl_1: - .addr sprite_80 ; (offset 00) CPU address $8cb8 - unknown (doesn't seem to be used) - .addr sprite_81 ; (offset 01) CPU address $95b8 - unknown (doesn't seem to be used) - .addr sprite_82 ; (offset 02) CPU address $9eb8 - l bullet indoor level - .addr sprite_83 ; (offset 03) CPU address $a3b8 - l bullet indoor level - .addr sprite_84 ; (offset 04) CPU address $a8b8 - l bullet indoor level - .addr sprite_85 ; (offset 05) CPU address $adb8 - base 2 boss blue soldier - .addr sprite_86 ; (offset 06) CPU address $c2b8 - base 2 boss blue soldier - .addr sprite_87 ; (offset 07) CPU address $d3b8 - base 2 boss blue soldier - .addr sprite_88 ; (offset 08) CPU address $e0b8 - base 2 blue soldier facing out (frame 1) - .addr sprite_89 ; (offset 09) CPU address $f1b8 - base 2 blue soldier facing out (frame 2) - .addr sprite_8a ; (offset 0a) CPU address $02b9 - base 2 blue soldier flying (frame 1) - .addr sprite_8b ; (offset 0b) CPU address $17b9 - base 2 blue soldier flying (frame 2) - .addr sprite_8c ; (offset 0c) CPU address $34b9 - base boss level 4 base 2 red soldier - .addr sprite_8d ; (offset 0d) CPU address $3cb9 - base boss level 4 base 2 red soldier - .addr sprite_8e ; (offset 0e) CPU address $44b9 - base boss level 4 base 2 red soldier - .addr sprite_8f ; (offset 0f) CPU address $4cb9 - base boss level 4 base 2 red soldier facing player - .addr sprite_90 ; (offset 10) CPU address $54b9 - base boss level 4 base 2 red soldier facing player with weapon - .addr sprite_91 ; (offset 11) CPU address $65b9 - indoor boss defeated elevator with player on top - .addr sprite_92 ; (offset 12) CPU address $75b9 - l bullet indoor level - .addr sprite_93 ; (offset 13) CPU address $7ab9 - jumping man - .addr sprite_94 ; (offset 14) CPU address $8bb9 - jumping man - .addr sprite_95 ; (offset 15) CPU address $9cb9 - jumping man - .addr sprite_96 ; (offset 16) CPU address $adb9 - indoor soldier hit by bullet (indoor soldier, jumping man, grenade launcher, group of four soldiers) - .addr sprite_97 ; (offset 17) CPU address $beb9 - jumping man in air - .addr sprite_98 ; (offset 18) CPU address $d3b9 - jumping man facing player - .addr sprite_99 ; (offset 19) CPU address $e0b9 - small indoor rolling grenade - .addr sprite_9a ; (offset 1a) CPU address $e9b9 - closer indoor rolling grenade - .addr sprite_9b ; (offset 1b) CPU address $f2b9 - even closer indoor rolling grenade - .addr sprite_9c ; (offset 1c) CPU address $ffb9 - closest indoor rolling grenade - .addr sprite_9d ; (offset 1d) CPU address $0cba - indoor base enemy kill explosion (frame 1) - .addr sprite_9e ; (offset 1e) CPU address $0fba - indoor base enemy kill explosion (frame 2) - .addr sprite_9f ; (offset 1f) CPU address $18ba - indoor base enemy kill explosion (frame 3) - .addr sprite_a0 ; (offset 20) CPU address $21ba - indoor hand grenade - .addr sprite_a1 ; (offset 21) CPU address $2aba - indoor hand grenade - .addr sprite_a2 ; (offset 22) CPU address $2fba - indoor hand grenade - .addr sprite_a3 ; (offset 23) CPU address $32ba - indoor hand grenade - .addr sprite_a4 ; (offset 24) CPU address $37ba - indoor hand grenade - .addr sprite_a5 ; (offset 25) CPU address $3cba - indoor hand grenade - .addr sprite_a6 ; (offset 26) CPU address $41ba - indoor hand grenade - .addr sprite_a7 ; (offset 27) CPU address $44ba - indoor hand grenade - .addr sprite_a8 ; (offset 28) CPU address $49ba - indoor hand grenade - .addr sprite_a9 ; (offset 29) CPU address $4cba - indoor hand grenade - .addr sprite_aa ; (offset 2a) CPU address $50ba - falcon (player select icon) - .addr sprite_ab ; (offset 2b) CPU address $59ba - Bill and Lance's hair and shirt - .addr sprite_ac ; (offset 2c) CPU address $b2ba - alien's lair bundle (crustacean-like alien) - .addr sprite_ad ; (offset 2d) CPU address $cbba - alien's lair bundle (crustacean-like alien) mouth open - .addr sprite_ae ; (offset 2e) CPU address $d7ba - alien's lair bundle (crustacean-like alien) - .addr sprite_af ; (offset 2f) CPU address $f0ba - alien's lair bundle (crustacean-like alien) - .addr sprite_b0 ; (offset 30) CPU address $fcba - poisonous insect gel - .addr sprite_b1 ; (offset 31) CPU address $05bb - poisonous insect gel (frame 1) - .addr sprite_b2 ; (offset 32) CPU address $0ebb - poisonous insect gel (frame 2) - .addr sprite_b3 ; (offset 33) CPU address $17bb - boss alien bugger insect/spider (frame 1) - .addr sprite_b4 ; (offset 34) CPU address $30bb - boss alien bugger insect/spider (frame 2) - .addr sprite_b5 ; (offset 35) CPU address $51bb - boss alien bugger insect/spider (frame 3) - .addr sprite_b6 ; (offset 36) CPU address $6ebb - boss alien eggron (alien egg) - .addr sprite_b7 ; (offset 37) CPU address $77bb - energy zone boss giant armored soldier gordea - .addr sprite_b7 ; (offset 38) CPU address $77bb - energy zone boss giant armored soldier gordea - .addr sprite_b9 ; (offset 39) CPU address $d0bb - energy zone boss giant armored soldier gordea (legs together) - .addr sprite_ba ; (offset 3a) CPU address $19bc - energy zone boss giant armored soldier gordea (running, jumping) - .addr sprite_bb ; (offset 3b) CPU address $45bc - energy zone boss projectile (spiked disk) - .addr sprite_bc ; (offset 3c) CPU address $4ebc - energy zone boss projectile (spiked disk) - .addr sprite_bd ; (offset 3d) CPU address $57bc - turret man (basquez) - .addr sprite_be ; (offset 3e) CPU address $74bc - turret man (basquez) - .addr sprite_bf ; (offset 3f) CPU address $91bc - energy zone wall fire - .addr sprite_c0 ; (offset 40) CPU address $96bc - energy zone wall fire - .addr sprite_c1 ; (offset 41) CPU address $9bbc - energy zone ceiling fire - .addr sprite_c2 ; (offset 42) CPU address $a0bc - energy zone ceiling fire - .addr sprite_c3 ; (offset 43) CPU address $a5bc - energy zone boss giant armored soldier gordea (throwing) - .addr sprite_c4 ; (offset 44) CPU address $cdbc - snow field ground separator - .addr sprite_c5 ; (offset 45) CPU address $d2bc - green helicopter ending scene (frame 1) - .addr sprite_c6 ; (offset 46) CPU address $dbbc - green helicopter ending scene (frame 2) - .addr sprite_c7 ; (offset 47) CPU address $e8bc - green helicopter ending scene (frame 3) - .addr sprite_c8 ; (offset 48) CPU address $f1bc - green helicopter ending scene (frame 4) - .addr sprite_c9 ; (offset 49) CPU address $febc - green helicopter facing forward (frame 1) - .addr sprite_ca ; (offset 4a) CPU address $13bd - green helicopter facing forward (frame 2) - .addr sprite_cb ; (offset 4b) CPU address $30bd - green helicopter facing forward (frame 3) - .addr sprite_cc ; (offset 4c) CPU address $59bd - green helicopter facing forward (frame 4) - .addr sprite_cd ; (offset 4d) CPU address $7ebd - green helicopter facing forward (frame 5) - .addr sprite_ce ; (offset 4e) CPU address $abbd - green helicopter facing forward (frame 6) - .addr sprite_cf ; (offset 4f) CPU address $d0bd - ending sequence mountains + .addr sprite_80 ; (offset 00) CPU address $b88c - unknown (doesn't seem to be used) + .addr sprite_81 ; (offset 01) CPU address $b895 - unknown (doesn't seem to be used) + .addr sprite_82 ; (offset 02) CPU address $b89e - l bullet indoor level + .addr sprite_83 ; (offset 03) CPU address $b8a3 - l bullet indoor level + .addr sprite_84 ; (offset 04) CPU address $b8a8 - l bullet indoor level + .addr sprite_85 ; (offset 05) CPU address $b8ad - base boss level 4 blue soldier + .addr sprite_86 ; (offset 06) CPU address $b8c2 - base boss level 4 blue soldier + .addr sprite_87 ; (offset 07) CPU address $b8d3 - base boss level 4 blue soldier + .addr sprite_88 ; (offset 08) CPU address $b8e0 - base boss level 4 blue soldier facing out (frame 1) + .addr sprite_89 ; (offset 09) CPU address $b8f1 - base boss level 4 blue soldier facing out (frame 2) + .addr sprite_8a ; (offset 0a) CPU address $b902 - base boss level 4 blue soldier flying (frame 1) + .addr sprite_8b ; (offset 0b) CPU address $b917 - base boss level 4 blue soldier flying (frame 2) + .addr sprite_8c ; (offset 0c) CPU address $b934 - base boss level 4 base 2 red soldier + .addr sprite_8d ; (offset 0d) CPU address $b93c - base boss level 4 base 2 red soldier + .addr sprite_8e ; (offset 0e) CPU address $b944 - base boss level 4 base 2 red soldier + .addr sprite_8f ; (offset 0f) CPU address $b94c - base boss level 4 base 2 red soldier facing player + ; Probotector uses sprite_88 rather than separately defining a sprite_8f + .addr sprite_90 ; (offset 10) CPU address $b954 - base boss level 4 base 2 red soldier facing player with weapon + .addr sprite_91 ; (offset 11) CPU address $b965 - indoor boss defeated elevator with player on top + .addr sprite_92 ; (offset 12) CPU address $b975 - l bullet indoor level + .addr sprite_93 ; (offset 13) CPU address $b97a - jumping man + .addr sprite_94 ; (offset 14) CPU address $b98b - jumping man + .addr sprite_95 ; (offset 15) CPU address $b99c - jumping man + .addr sprite_96 ; (offset 16) CPU address $b9ad - indoor soldier hit by bullet (indoor soldier, jumping man, grenade launcher, group of four soldiers) + .addr sprite_97 ; (offset 17) CPU address $b9be - jumping man in air + .addr sprite_98 ; (offset 18) CPU address $b9d3 - jumping man facing player + .addr sprite_99 ; (offset 19) CPU address $b9e0 - small indoor rolling grenade + .addr sprite_9a ; (offset 1a) CPU address $b9e9 - closer indoor rolling grenade + .addr sprite_9b ; (offset 1b) CPU address $b9f2 - even closer indoor rolling grenade + .addr sprite_9c ; (offset 1c) CPU address $b9ff - closest indoor rolling grenade + .addr sprite_9d ; (offset 1d) CPU address $ba0c - indoor base enemy kill explosion (frame 1) + .addr sprite_9e ; (offset 1e) CPU address $ba0f - indoor base enemy kill explosion (frame 2) + .addr sprite_9f ; (offset 1f) CPU address $ba18 - indoor base enemy kill explosion (frame 3) + .addr sprite_a0 ; (offset 20) CPU address $ba21 - indoor hand grenade + .addr sprite_a1 ; (offset 21) CPU address $ba2a - indoor hand grenade + .addr sprite_a2 ; (offset 22) CPU address $ba2f - indoor hand grenade + .addr sprite_a3 ; (offset 23) CPU address $ba32 - indoor hand grenade + .addr sprite_a4 ; (offset 24) CPU address $ba37 - indoor hand grenade + .addr sprite_a5 ; (offset 25) CPU address $ba3c - indoor hand grenade + .addr sprite_a6 ; (offset 26) CPU address $ba41 - indoor hand grenade + .addr sprite_a7 ; (offset 27) CPU address $ba44 - indoor hand grenade + .addr sprite_a8 ; (offset 28) CPU address $ba49 - indoor hand grenade + .addr sprite_a9 ; (offset 29) CPU address $ba4c - indoor hand grenade + .addr sprite_aa ; (offset 2a) CPU address $ba50 - falcon (player select icon) + .addr sprite_ab ; (offset 2b) CPU address $ba59 - Bill and Lance's hair and shirt (for Probotector - red splash behind Probotector title) + .addr sprite_ac ; (offset 2c) CPU address $bab2 - alien's lair bundle (crustacean-like alien) + .addr sprite_ad ; (offset 2d) CPU address $bacb - alien's lair bundle (crustacean-like alien) mouth open + .addr sprite_ae ; (offset 2e) CPU address $bad7 - alien's lair bundle (crustacean-like alien) + .addr sprite_af ; (offset 2f) CPU address $baf0 - alien's lair bundle (crustacean-like alien) + .addr sprite_b0 ; (offset 30) CPU address $bafc - poisonous insect gel + .addr sprite_b1 ; (offset 31) CPU address $bb05 - poisonous insect gel (frame 1) + .addr sprite_b2 ; (offset 32) CPU address $bb0e - poisonous insect gel (frame 2) + .addr sprite_b3 ; (offset 33) CPU address $bb17 - boss alien bugger insect/spider (frame 1) + .addr sprite_b4 ; (offset 34) CPU address $bb30 - boss alien bugger insect/spider (frame 2) + .addr sprite_b5 ; (offset 35) CPU address $bb51 - boss alien bugger insect/spider (frame 3) + .addr sprite_b6 ; (offset 36) CPU address $bb6e - boss alien eggron (alien egg) + .addr sprite_b7 ; (offset 37) CPU address $bb77 - energy zone boss giant armored soldier gordea + .addr sprite_b7 ; (offset 38) CPU address $bb77 - energy zone boss giant armored soldier gordea (sprite_b8) + .addr sprite_b9 ; (offset 39) CPU address $bbd0 - energy zone boss giant armored soldier gordea (legs together) + .addr sprite_ba ; (offset 3a) CPU address $bc19 - energy zone boss giant armored soldier gordea (running, jumping) + .addr sprite_bb ; (offset 3b) CPU address $bc45 - energy zone boss projectile (spiked disk) + .addr sprite_bc ; (offset 3c) CPU address $bc4e - energy zone boss projectile (spiked disk) + .addr sprite_bd ; (offset 3d) CPU address $bc57 - turret man (basquez) + .addr sprite_be ; (offset 3e) CPU address $bc74 - turret man (basquez) + .addr sprite_bf ; (offset 3f) CPU address $bc91 - energy zone wall fire + .addr sprite_c0 ; (offset 40) CPU address $bc96 - energy zone wall fire + .addr sprite_c1 ; (offset 41) CPU address $bc9b - energy zone ceiling fire + .addr sprite_c2 ; (offset 42) CPU address $bca0 - energy zone ceiling fire + .addr sprite_c3 ; (offset 43) CPU address $bca5 - energy zone boss giant armored soldier gordea (throwing) + .addr sprite_c4 ; (offset 44) CPU address $bccd - snow field ground separator + .addr sprite_c5 ; (offset 45) CPU address $bcd2 - green helicopter ending scene (frame 1) + .addr sprite_c6 ; (offset 46) CPU address $bcdb - green helicopter ending scene (frame 2) + .addr sprite_c7 ; (offset 47) CPU address $bce8 - green helicopter ending scene (frame 3) + .addr sprite_c8 ; (offset 48) CPU address $bcf1 - green helicopter ending scene (frame 4) + .addr sprite_c9 ; (offset 49) CPU address $bcfe - green helicopter facing forward (frame 1) + .addr sprite_ca ; (offset 4a) CPU address $bd13 - green helicopter facing forward (frame 2) + .addr sprite_cb ; (offset 4b) CPU address $bd30 - green helicopter facing forward (frame 3) + .addr sprite_cc ; (offset 4c) CPU address $bd59 - green helicopter facing forward (frame 4) + .addr sprite_cd ; (offset 4d) CPU address $bd7e - green helicopter facing forward (frame 5) + .addr sprite_ce ; (offset 4e) CPU address $bdab - green helicopter facing forward (frame 6) + .addr sprite_cf ; (offset 4f) CPU address $bdd0 - ending sequence mountains ; each sprite entry is defined as follows ; first byte (n) is number of tiles for sprite @@ -4522,56 +4523,107 @@ sprite_01: ; player walking (frame 1) sprite_02: +.ifdef Probotector + .byte $05 + .byte $ee,$28,$00,$fa + .byte $ee,$2a,$00,$02 +.else .byte $05 .byte $ee,$28,$01,$fb .byte $ee,$2a,$01,$03 +.endif ; no sprite code, only part of other sprite codes player_walking_1_bottom: +.ifdef Probotector + .byte $fe,$34,$00,$f6 + .byte $fe,$36,$00,$fe + .byte $0e,$3e,$00,$f8 +.else .byte $fe,$34,$00,$f8 .byte $fe,$36,$00,$00 .byte $0e,$40,$00,$f8 +.endif ; player walking (frame 2) sprite_03: +.ifdef Probotector + .byte $05 + .byte $ef,$2c,$00,$fa + .byte $ef,$2e,$00,$02 +.else .byte $05 .byte $ef,$2c,$01,$fc .byte $ef,$2e,$01,$04 +.endif ; no sprite code, only part of other sprite codes player_walking_2_bottom: +.ifdef Probotector + .byte $ff,$38,$00,$f5 + .byte $ff,$3a,$00,$fd + .byte $09,$40,$00,$02 +.else .byte $fd,$38,$00,$f8 .byte $fd,$3a,$00,$00 .byte $0d,$42,$00,$04 +.endif ; player walking (frame 3) sprite_04: +.ifdef Probotector + .byte $04 + .byte $ee,$30,$00,$f8 + .byte $ee,$32,$00,$00 +.else .byte $05 .byte $ee,$30,$01,$fa .byte $ee,$32,$01,$02 +.endif ; no sprite code, only part of other sprite codes player_bottom: +.ifdef Probotector + .byte $fe,$3c,$00,$fb + .byte $0e,$42,$00,$fb +.else .byte $fe,$3c,$00,$f7 .byte $fe,$3e,$00,$ff .byte $0e,$42,$00,$fe +.endif ; player walking (frame 4) ; player falling through floor, or walk off ledge sprite_05: +.ifdef Probotector + .byte $05 + .byte $ee,$30,$00,$f8 + .byte $ee,$32,$00,$00 + .byte $80 + .addr player_walking_1_bottom +.else .byte $05 .byte $ee,$30,$01,$fa .byte $ee,$32,$01,$02 .byte $80 .addr player_walking_1_bottom +.endif ; player walking (frame 5) sprite_06: +.ifdef Probotector + .byte $04 + .byte $ee,$28,$00,$fa + .byte $ee,$2a,$00,$02 + .byte $80 + .addr player_bottom +.else .byte $05 .byte $ee,$28,$01,$fb .byte $ee,$2a,$01,$03 .byte $80 .addr player_bottom +.endif ; enemy bullet (snow field) sprite_07: @@ -4579,185 +4631,362 @@ sprite_07: ; player curled up (frame 1) sprite_08: +.ifdef Probotector + .byte $02 + .byte $f8,$44,$00,$f8 + .byte $f8,$46,$00,$00 +.else .byte $04 .byte $f2,$44,$01,$f8 .byte $f2,$48,$01,$00 .byte $02,$46,$00,$f8 .byte $02,$4a,$00,$00 +.endif ; player curled up (frame 2) sprite_09: +.ifdef Probotector + .byte $02 + .byte $f7,$48,$00,$f8 + .byte $f7,$4a,$00,$00 +.else .byte $03 .byte $f8,$4c,$00,$f6 .byte $f8,$4e,$01,$fe .byte $f8,$50,$01,$06 +.endif ; player hit (frame 1) sprite_0a: +.ifdef Probotector + .byte $04 + .byte $f0,$68,$00,$f7 + .byte $00,$6c,$00,$f9 + .byte $f0,$6a,$00,$ff + .byte $00,$6e,$00,$01 +.else .byte $04 .byte $f3,$68,$01,$f6 .byte $03,$6a,$00,$f6 .byte $f7,$6c,$00,$fe .byte $f7,$6e,$00,$06 +.endif ; player hit (frame 2) sprite_0b: +.ifdef Probotector + .byte $03 + .byte $f9,$70,$00,$f5 + .byte $fb,$72,$00,$fd + .byte $f7,$74,$00,$05 +.else .byte $04 .byte $f9,$70,$00,$f8 .byte $fa,$74,$00,$ff .byte $ea,$72,$00,$fc .byte $ff,$76,$01,$fa +.endif ; player lying on ground sprite_0c: +.ifdef Probotector + .byte $04 + .byte $00,$78,$00,$f0 + .byte $07,$7a,$00,$f8 + .byte $01,$7c,$00,$00 + .byte $08,$7e,$00,$08 +.else .byte $04 .byte $00,$78,$01,$f0 .byte $00,$7a,$01,$f8 .byte $00,$7c,$00,$00 .byte $00,$7e,$00,$08 +.endif ; player walking holding weapon out (frame 1) sprite_0d: +.ifdef Probotector + .byte $06 + .byte $ee,$94,$00,$f8 + .byte $ee,$96,$00,$00 + .byte $ee,$98,$00,$08 + .byte $80 + .addr player_walking_1_bottom +.else .byte $06 .byte $ee,$94,$01,$f9 .byte $ee,$96,$01,$01 .byte $ee,$98,$01,$09 .byte $80 .addr player_walking_1_bottom +.endif ; player walking holding weapon out (frame 2) sprite_0e: +.ifdef Probotector + .byte $06 + .byte $ed,$94,$00,$f8 + .byte $ed,$96,$00,$00 + .byte $ed,$98,$00,$08 + .byte $80 + .addr player_walking_2_bottom +.else .byte $06 .byte $ef,$94,$01,$f9 .byte $ef,$96,$01,$01 .byte $ef,$98,$01,$09 .byte $80 .addr player_walking_2_bottom +.endif ; player walking holding weapon out (frame 3) sprite_0f: +.ifdef Probotector + .byte $05 +.else .byte $06 +.endif player_facing_side: +.ifdef Probotector + .byte $ee,$94,$00,$f8 + .byte $ee,$96,$00,$00 + .byte $ee,$98,$00,$08 +.else .byte $ee,$94,$01,$f9 .byte $ee,$96,$01,$01 .byte $ee,$98,$01,$09 +.endif .byte $80 .addr player_bottom ; player aiming angled up (frame 1) sprite_10: +.ifdef Probotector + .byte $05 + .byte $ee,$8c,$00,$fa + .byte $ee,$8e,$00,$02 + .byte $80 + .addr player_walking_1_bottom +.else .byte $05 .byte $ee,$8c,$01,$fb .byte $ee,$8e,$01,$03 .byte $80 .addr player_walking_1_bottom +.endif ; player aiming angled up (frame 2) sprite_11: +.ifdef Probotector + .byte $05 + .byte $ed,$8c,$00,$fa + .byte $ed,$8e,$00,$02 + .byte $80 + .addr player_walking_2_bottom +.else .byte $05 .byte $ef,$8c,$01,$fb .byte $ef,$8e,$01,$03 .byte $80 .addr player_walking_2_bottom +.endif ; player aiming angled up (frame 3) sprite_12: +.ifdef Probotector + .byte $04 + .byte $ee,$8c,$00,$fa + .byte $ee,$8e,$00,$02 + .byte $80 + .addr player_bottom +.else .byte $05 .byte $ee,$8c,$01,$fb .byte $ee,$8e,$01,$03 .byte $80 .addr player_bottom +.endif ; player aiming angled down (frame 1) sprite_13: +.ifdef Probotector + .byte $06 + .byte $ee,$86,$00,$f7 + .byte $ee,$88,$00,$ff + .byte $fe,$8a,$00,$03 + .byte $80 + .addr player_walking_1_bottom +.else .byte $06 .byte $ee,$86,$01,$f8 .byte $ee,$88,$01,$00 .byte $f3,$8a,$01,$05 .byte $80 .addr player_walking_1_bottom +.endif ; player aiming angled down (frame 2) sprite_14: +.ifdef Probotector + .byte $06 + .byte $ed,$86,$00,$f7 + .byte $ed,$88,$00,$ff + .byte $fd,$8a,$00,$03 + .byte $80 + .addr player_walking_2_bottom +.else .byte $06 .byte $ef,$86,$01,$f8 .byte $ef,$88,$01,$00 .byte $f4,$8a,$01,$05 .byte $80 .addr player_walking_2_bottom +.endif ; player aiming angled down (frame 3) sprite_15: +.ifdef Probotector + .byte $05 + .byte $ee,$86,$00,$f7 + .byte $ee,$88,$00,$ff + .byte $fe,$8a,$00,$03 + .byte $80 + .addr player_bottom +.else .byte $06 .byte $ee,$86,$01,$f8 .byte $ee,$88,$01,$00 .byte $f3,$8a,$01,$05 .byte $80 .addr player_bottom +.endif ; player aiming straight up sprite_16: +.ifdef Probotector + .byte $05 + .byte $de,$82,$00,$00 + .byte $ee,$80,$00,$f8 + .byte $ee,$84,$00,$00 + .byte $80 + .addr player_bottom +.else .byte $06 .byte $de,$82,$01,$01 .byte $ee,$80,$01,$f9 .byte $ee,$84,$01,$01 .byte $80 .addr player_bottom +.endif ; player prone sprite_17: +.ifdef Probotector + .byte $04 + .byte $ff,$9c,$00,$f0 + .byte $00,$9e,$00,$f8 + .byte $00,$a0,$00,$00 + .byte $00,$a2,$00,$08 +.else .byte $04 .byte $00,$9c,$00,$f0 .byte $00,$9e,$00,$f8 .byte $00,$a0,$01,$00 .byte $00,$a2,$01,$08 +.endif ; water splash/puddle sprite_18: .byte $02 water_splash: +.ifdef Probotector + .byte $fa,$dc,$00,$f8 + .byte $fa,$dc,$40,$00 +.else .byte $fa,$dc,$01,$f8 .byte $fa,$dc,$41,$00 +.endif ; player in water sprite_19: +.ifdef Probotector + .byte $02 + .byte $f2,$de,$00,$fa + .byte $f2,$e0,$00,$02 +.else .byte $02 .byte $f2,$de,$01,$f8 .byte $f2,$e0,$01,$00 +.endif ; player climbing out of water sprite_1a: +.ifdef Probotector + .byte $03 + .byte $f9,$e2,$00,$f7 + .byte $f7,$e4,$00,$ff + .byte $f5,$e8,$00,$07 +.else .byte $02 .byte $fa,$e2,$01,$f8 .byte $fa,$e4,$01,$00 +.endif ; player in water aiming straight up sprite_1b: +.ifdef Probotector + .byte $05 + .byte $df,$82,$00,$00 + .byte $ef,$80,$00,$f8 + .byte $ef,$84,$00,$00 + +water_splash_00: + .byte $fa,$f8,$00,$f8 + .byte $fa,$fa,$40,$00 +.else .byte $05 .byte $df,$82,$01,$01 .byte $ef,$80,$01,$f9 .byte $ef,$84,$01,$01 .byte $80 .addr water_splash +.endif ; player in water aiming angled up sprite_1c: +.ifdef Probotector + .byte $04 + .byte $ef,$8c,$00,$fa + .byte $ef,$8e,$00,$02 + .byte $80 + .addr water_splash_00 +.else .byte $04 .byte $ef,$8c,$01,$fb .byte $ef,$8e,$01,$03 .byte $80 .addr water_splash +.endif ; player in water aiming forward sprite_1d: +.ifdef Probotector + .byte $05 + .byte $ef,$94,$00,$f8 + .byte $ef,$96,$00,$00 + .byte $ef,$98,$00,$08 + .byte $80 + .addr water_splash_00 +.else .byte $05 .byte $ef,$94,$01,$f9 .byte $ef,$96,$01,$01 .byte $ef,$98,$01,$09 .byte $80 .addr water_splash +.endif ; default bullet sprite_1e: @@ -4795,37 +5024,68 @@ sprite_25: ; soldier crouching shooting sprite_26: +.ifdef Probotector + .byte $03 + .byte $01,$dc,$43,04 + .byte $00,$de,$43,$fc + .byte $fb,$e0,$43,$f4 +.else .byte $04 .byte $00,$dc,$03,$f0 .byte $00,$de,$01,$f8 .byte $00,$e0,$01,$00 .byte $00,$e2,$03,$08 +.endif ; soldier running 1 sprite_27: +.ifdef Probotector +sprite_28: + .byte $04 + .byte $ee,$be,$43,$01 + .byte $f0,$c6,$43,$f9 +.else .byte $04 .byte $f0,$d6,$01,$f8 .byte $f0,$d8,$01,$00 +.endif soldier_bottom_0: +.ifdef Probotector + .byte $00,$c8,$43,$00 + .byte $00,$ca,$43,$f8 +.else .byte $00,$ce,$03,$f8 .byte $00,$cc,$03,$00 +.endif ; soldier running 2 +.ifdef Probotector +.else sprite_28: .byte $04 .byte $f0,$be,$01,$f8 .byte $f0,$c0,$01,$00 .byte $80 .addr soldier_bottom_0 +.endif ; soldier shooting angled up sprite_29: +.ifdef Probotector + .byte $05 + .byte $f0,$ae,$01,$f8 + .byte $f0,$b0,$01,$00 + .byte $e0,$b2,$01,$01 + .byte $00,$ba,$01,$f8 + .byte $00,$bc,$01,$00 +.else .byte $04 .byte $f0,$ae,$01,$f8 .byte $f0,$b0,$01,$00 .byte $00,$ba,$01,$f8 .byte $00,$bc,$01,$00 +.endif ; hangar mine cart (frame 1) sprite_2a: @@ -4849,73 +5109,144 @@ sprite_2b: ; sniper type #$04 shooting (boss rifle man), compare sprite_43 sprite_2c: +.ifdef Probotector + .byte $05 + .byte $f0,$f2,$41,$f8 + .byte $f0,$b6,$41,$00 + .byte $f0,$b8,$01,$08 + .byte $00,$f4,$41,$f8 + .byte $00,$bc,$01,$00 +.else .byte $05 .byte $f0,$f2,$41,$f8 .byte $f0,$b6,$01,$00 .byte $f0,$b8,$01,$08 .byte $00,$f4,$41,$f8 .byte $00,$bc,$01,$00 +.endif ; soldier shooting angled down sprite_2d: +.ifdef Probotector + .byte $05 + .byte $e2,$aa,$01,$00 + .byte $f2,$ac,$01,$00 + .byte $f0,$f6,$41,$f8 + .byte $00,$bc,$01,$00 + .byte $00,$f4,$41,$f8 +.else .byte $05 .byte $f0,$f6,$41,$f8 .byte $f0,$aa,$01,$00 .byte $f8,$ac,$01,$08 .byte $00,$f4,$41,$f8 .byte $00,$bc,$01,$00 +.endif ; unknown (doesn't seem to be used) sprite_2e: +.ifdef Probotector + .byte $04 + .byte $f0,$fa,$01,$f8 + .byte $f0,$f8,$01,$00 + .byte $00,$f4,$01,$f8 + .byte $00,$fc,$01,$00 +.else .byte $04 .byte $f0,$fa,$41,$f8 .byte $f0,$f8,$41,$00 .byte $00,$f4,$41,$f8 .byte $00,$fc,$41,$00 +.endif ; S weapon item sprite_2f: +.ifdef Probotector + .byte $03 + .byte $f8,$1c,$03,$fc +.else .byte $03 .byte $f8,$1c,$01,$fc +.endif weapon_wings: +.ifdef Probotector + .byte $f8,$1a,$03,$f4 + .byte $f8,$1a,$43,$04 +.else .byte $f8,$1a,$01,$f4 .byte $f8,$1a,$41,$04 +.endif ; B weapon item sprite_30: +.ifdef Probotector + .byte $03 + .byte $f8,$1e,$03,$fc + .byte $80 + .addr weapon_wings +.else .byte $03 .byte $f8,$1e,$01,$fc .byte $80 .addr weapon_wings +.endif ; F weapon item sprite_31: +.ifdef Probotector + .byte $03 + .byte $f8,$20,$03,$fc + .byte $80 + .addr weapon_wings +.else .byte $03 .byte $f8,$20,$01,$fc .byte $80 .addr weapon_wings +.endif ; L weapon item sprite_32: +.ifdef Probotector + .byte $03 + .byte $f8,$22,$03,$fc + .byte $80 + .addr weapon_wings +.else .byte $03 .byte $f8,$22,$01,$fc .byte $80 .addr weapon_wings +.endif ; R weapon item sprite_33: +.ifdef Probotector + .byte $03 + .byte $f8,$24,$03,$fc + .byte $80 + .addr weapon_wings +.else .byte $03 .byte $f8,$24,$01,$fc .byte $80 .addr weapon_wings +.endif ; M weapon item sprite_34: +.ifdef Probotector + .byte $03 + .byte $f8,$26,$03,$fc + .byte $80 + .addr weapon_wings +.else .byte $03 .byte $f8,$26,$01,$fc .byte $80 .addr weapon_wings +.endif ; big explosion sprite_35: @@ -4980,6 +5311,14 @@ sprite_3a: ; soldier running sprite_3b: +.ifdef Probotector +sprite_3f: + .byte $04 + .byte $ef,$be,$43,$01 + .byte $f0,$c0,$43,$f9 + .byte $07,$c4,$43,$01 + .byte $00,$c2,$43,$f9 +.else .byte $04 .byte $f0,$be,$01,$f8 .byte $f0,$c0,$01,$00 @@ -4987,69 +5326,117 @@ sprite_3b: soldier_bottom_1: .byte $00,$ca,$03,$f8 .byte $00,$cc,$03,$00 +.endif ; soldier running sprite_3c: +.ifdef Probotector + .byte $04 + .byte $ee,$be,$43,$01 + .byte $f0,$c6,$43,$f9 + .byte $00,$c8,$43,$00 + .byte $00,$ca,$43,$f8 +.else .byte $04 .byte $f0,$c2,$01,$f8 .byte $f0,$c4,$01,$00 .byte $00,$ce,$03,$f8 .byte $00,$d0,$03,$00 +.endif ; soldier running sprite_3d: +.ifdef Probotector +sprite_3e: + .byte $05 + .byte $e7,$cc,$43,$f9 + .byte $ef,$be,$43,$01 + .byte $f7,$ce,$43,$fa + .byte $00,$d0,$43,$02 + .byte $07,$d2,$43,$f9 +.else .byte $04 .byte $f0,$c6,$01,$f8 .byte $f0,$c8,$01,$00 -soldier_bottom_2: +soldier_bottom_3: .byte $00,$d2,$03,$f8 .byte $00,$d4,$03,$00 +.endif -; soldier running +.ifdef Probotector +.else sprite_3e: .byte $04 .byte $f0,$be,$01,$f8 .byte $f0,$c0,$01,$00 .byte $80 - .addr soldier_bottom_2 + .addr soldier_bottom_3 +.endif -; soldier running +.ifdef Probotector +.else sprite_3f: .byte $04 .byte $f0,$c6,$01,$f8 .byte $f0,$c8,$01,$00 .byte $80 .addr soldier_bottom_1 +.endif -; soldier shooting +; soldier running sprite_40: +.ifdef Probotector + .byte $05 + .byte $ed,$d4,$43,$02 + .byte $ee,$d6,$43,$fa + .byte $f4,$d8,$43,$f7 + .byte $00,$da,$43,$f9 + .byte $07,$c4,$43,$01 +.else .byte $05 .byte $f0,$d6,$01,$f8 .byte $f0,$d8,$01,$00 .byte $f0,$da,$03,$08 .byte $80 - .addr soldier_bottom_2 + .addr soldier_bottom_3 +.endif ; soldier shooting downward sprite_41: +.ifdef Probotector + .byte $05 + .byte $f0,$a8,$01,$f8 + .byte $e2,$aa,$01,$00 + .byte $f2,$ac,$01,$00 +.else .byte $05 .byte $f0,$a8,$01,$f8 .byte $f0,$aa,$01,$00 .byte $f8,$ac,$01,$08 +.endif -soldier_bottom_3: +soldier_bottom_2: .byte $00,$ba,$01,$f8 .byte $00,$bc,$01,$00 ; soldier shooting up angled sprite_42: +.ifdef Probotector + .byte $05 + .byte $f0,$ae,$01,$f8 + .byte $f0,$b0,$01,$00 + .byte $e0,$b2,$01,$01 + .byte $80 + .addr soldier_bottom_2 +.else .byte $05 .byte $f0,$ae,$01,$f8 .byte $f0,$b0,$01,$00 .byte $e0,$b2,$01,$02 .byte $80 - .addr soldier_bottom_3 + .addr soldier_bottom_2 +.endif ; rifle man shooting (sniper type #$00 and #$01) sprite_43: @@ -5060,27 +5447,46 @@ rifle_man_top: .byte $f0,$b6,$01,$00 .byte $f0,$b8,$01,$08 .byte $80 - .addr soldier_bottom_3 + .addr soldier_bottom_2 ; rifle man behind bush (frame 1) sprite_44: +.ifdef Probotector + .byte $02 + .byte $f0,$ec,$41,$f8 + .byte $f0,$ea,$41,$00 +.else .byte $01 .byte $f0,$ea,$41,$fc +.endif ; rifle man behind bush (frame 2) sprite_45: +.ifdef Probotector + .byte $02 + .byte $f0,$f0,$41,$f8 + .byte $f0,$ee,$41,$00 +.else .byte $03 .byte $f0,$f0,$41,$f8 .byte $f0,$ee,$41,$00 .byte $f0,$ec,$41,$08 +.endif ; rifle man behind bush (frame 3) ; by specifying #$03 entries, only top half of soldier is drawn -; soldier_bottom_3 isn't used +; soldier_bottom_2 isn't used sprite_46: +.ifdef Probotector + .byte $03 + .byte $f0,$b4,$01,$f8 + .byte $f0,$b6,$01,$00 + .byte $f0,$b8,$01,$08 +.else .byte $03 .byte $80 .addr rifle_man_top +.endif ; small ring explosion sprite_47: @@ -5088,6 +5494,16 @@ sprite_47: ; floating rock (waterfall level) sprite_48: +.ifdef Probotector + .byte $07 + .byte $f0,$ee,$00,$f0 + .byte $f0,$f0,$00,$f8 + .byte $f0,$f0,$40,$00 + .byte $f0,$ee,$40,$08 + .byte $00,$f2,$00,$f4 + .byte $00,$fc,$00,$fc + .byte $00,$f2,$40,$04 +.else .byte $07 .byte $f0,$ee,$03,$f0 .byte $f0,$f0,$03,$f8 @@ -5096,6 +5512,7 @@ sprite_48: .byte $00,$f2,$03,$f4 .byte $00,$fc,$03,$fc .byte $00,$f2,$43,$04 +.endif ; bridge fire (waterfall level) sprite_49: @@ -5105,6 +5522,15 @@ sprite_49: ; boulder (waterfall level) sprite_4a: +.ifdef Probotector + .byte $06 + .byte $f0,$e6,$00,$f4 + .byte $f0,$e8,$00,$fc + .byte $f0,$d7,$00,$04 + .byte $00,$d9,$00,$f4 + .byte $00,$db,$00,$fc + .byte $00,$dd,$00,$04 +.else .byte $06 .byte $f0,$e6,$03,$f4 .byte $f0,$e8,$03,$fc @@ -5112,33 +5538,61 @@ sprite_4a: .byte $00,$d9,$03,$f4 .byte $00,$db,$03,$fc .byte $00,$dd,$03,$04 +.endif ; scuba soldier hiding sprite_4b: +.ifdef Probotector + .byte $02 + .byte $f8,$dc,$03,$f8 + .byte $f8,$de,$03,$00 +.else .byte $02 .byte $f8,$dc,$01,$f8 .byte $f8,$de,$01,$00 +.endif ; scuba soldier out of water shooting up sprite_4c: +.ifdef Probotector + .byte $03 + .byte $e9,$e2,$03,$00 + .byte $f5,$e0,$03,$f9 + .byte $f9,$e4,$03,$00 +.else .byte $03 .byte $e8,$e2,$03,$00 .byte $f8,$e0,$01,$f8 .byte $f8,$e4,$01,$00 +.endif ; weapon zeppelin sprite_4d: +.ifdef Probotector + .byte $03 + .byte $f8,$a4,$03,$f4 + .byte $f8,$a6,$03,$fc + .byte $f8,$a4,$43,$04 +.else .byte $03 .byte $f8,$a4,$01,$f4 .byte $f8,$a6,$01,$fc .byte $f8,$a4,$41,$04 +.endif ; flashing falcon weapon sprite_4e: +.ifdef Probotector + .byte $03 + .byte $f8,$00,$03,$fc + .byte $80 + .addr weapon_wings +.else .byte $03 .byte $f8,$00,$01,$fc .byte $80 .addr weapon_wings +.endif ; unused blank sprite sprite_4f: @@ -5146,6 +5600,16 @@ sprite_4f: ; indoor player facing up sprite_50: +.ifdef Probotector + .byte $07 + .byte $de,$7c,$00,$fa + .byte $ee,$7e,$00,$f8 + .byte $ee,$80,$00,$00 + .byte $fe,$78,$00,$f7 + .byte $fe,$78,$40,$ff + .byte $0e,$7a,$00,$f7 + .byte $0e,$7a,$40,$ff +.else .byte $07 .byte $de,$7c,$01,$fa .byte $ee,$7e,$01,$f8 @@ -5154,36 +5618,72 @@ sprite_50: .byte $fe,$78,$40,$ff .byte $0e,$7a,$00,$f6 .byte $0e,$7a,$40,$01 +.endif ; indoor player strafing (frame 1) sprite_51: +.ifdef Probotector + .byte $05 + .byte $de,$7c,$00,$fb + .byte $ee,$8c,$00,$f8 + .byte $ee,$8e,$00,$00 + .byte $80 + .addr player_walking_1_bottom +.else .byte $05 .byte $de,$7c,$01,$fb .byte $ee,$8c,$01,$fa .byte $ee,$8e,$01,$02 .byte $80 .addr player_walking_1_bottom +.endif ; indoor player strafing (frame 2) sprite_52: +.ifdef Probotector + .byte $06 + .byte $df,$7c,$00,$fb + .byte $ef,$8c,$00,$f8 + .byte $ef,$8e,$00,$00 + .byte $80 + .addr player_walking_2_bottom +.else .byte $06 .byte $df,$7c,$01,$fb .byte $ef,$8c,$01,$fa .byte $ef,$8e,$01,$02 .byte $80 .addr player_walking_2_bottom +.endif ; indoor player strafing (frame 3) sprite_53: +.ifdef Probotector + .byte $05 + .byte $de,$7c,$00,$fb + .byte $ee,$8c,$00,$f8 + .byte $ee,$8e,$00,$00 + .byte $80 + .addr player_bottom +.else .byte $06 .byte $de,$7c,$01,$fb .byte $ee,$8c,$01,$fa .byte $ee,$8e,$01,$02 .byte $80 .addr player_bottom +.endif ; indoor player crouch sprite_54: +.ifdef Probotector + .byte $05 + .byte $f4,$82,$00,$f8 + .byte $f4,$84,$00,$00 + .byte $04,$86,$00,$f4 + .byte $04,$86,$40,$04 + .byte $04,$88,$00,$fc +.else .byte $07 .byte $f4,$82,$01,$f8 .byte $f4,$84,$01,$00 @@ -5192,10 +5692,22 @@ sprite_54: .byte $04,$88,$00,$f8 .byte $04,$88,$40,$00 .byte $fa,$8a,$00,$fc +.endif ; indoor player electrocuted ; indoor player hit by bullet frame #$01 sprite_55: +.ifdef Probotector + .byte $08 + .byte $e0,$76,$00,$f8 + .byte $ea,$74,$00,$00 + .byte $f0,$72,$00,$fc + .byte $f4,$70,$00,$f4 + .byte $00,$78,$00,$f7 + .byte $00,$78,$40,$ff + .byte $10,$7a,$00,$f7 + .byte $10,$7a,$40,$ff +.else .byte $08 .byte $e2,$70,$01,$01 .byte $f5,$72,$01,$f0 @@ -5205,9 +5717,19 @@ sprite_55: .byte $fd,$78,$40,$ff .byte $0d,$7a,$00,$f6 .byte $0d,$7a,$40,$01 +.endif ; indoor player lying dead (frame #$02) sprite_56: +.ifdef Probotector + .byte $06 + .byte $ec,$68,$00,$f4 + .byte $ec,$68,$40,$04 + .byte $fc,$6a,$00,$f4 + .byte $fc,$6c,$00,$fc + .byte $fc,$6e,$00,$04 + .byte $0c,$8a,$00,$00 +.else .byte $08 .byte $fa,$68,$00,$f0 .byte $fa,$6a,$00,$f8 @@ -5217,9 +5739,19 @@ sprite_56: .byte $0a,$6e,$01,$f8 .byte $0a,$6e,$41,$00 .byte $0a,$6c,$41,$08 +.endif ; indoor player running sprite_57: +.ifdef Probotector + .byte $06 + .byte $f1,$94,$00,$f6 + .byte $f0,$96,$00,$fc + .byte $ea,$98,$00,$02 + .byte $00,$90,$00,$f8 + .byte $00,$92,$00,$00 + .byte $10,$be,$00,$fc +.else .byte $06 .byte $f4,$94,$01,$f4 .byte $ef,$96,$01,$fc @@ -5227,9 +5759,19 @@ sprite_57: .byte $ff,$be,$00,$f8 .byte $ff,$90,$00,$00 .byte $0f,$92,$00,$00 +.endif ; indoor player running sprite_58: +.ifdef Probotector + .byte $06 + .byte $f0,$9a,$00,$f5 + .byte $f0,$9c,$00,$fd + .byte $ed,$9e,$00,$00 + .byte $00,$92,$40,$f5 + .byte $00,$90,$40,$fd + .byte $10,$be,$40,$f9 +.else .byte $06 .byte $f1,$9a,$01,$f4 .byte $f1,$9c,$01,$fc @@ -5237,6 +5779,7 @@ sprite_58: .byte $01,$90,$40,$fa .byte $01,$be,$40,$02 .byte $11,$92,$40,$fa +.endif ; unused blank sprite sprite_59: @@ -5307,12 +5850,29 @@ sprite_62: ; small boss eye projectile (unused) sprite_63: +.ifdef Probotector + .byte $02 + .byte $f8,$b0,$02,$f8 + .byte $f8,$b2,$02,$00 +.else .byte $02 .byte $f8,$b0,$03,$f8 .byte $f8,$b2,$03,$00 +.endif ; boss eye projectile sprite_64: +.ifdef Probotector + .byte $08 + .byte $f0,$b4,$02,$f0 + .byte $f0,$b6,$02,$f8 + .byte $f0,$b8,$02,$00 + .byte $f0,$ba,$02,$08 + .byte $00,$bc,$02,$f0 + .byte $00,$be,$02,$f8 + .byte $00,$c0,$02,$00 + .byte $00,$c2,$02,$08 +.else .byte $08 .byte $f0,$b4,$03,$f0 .byte $f0,$b6,$03,$f8 @@ -5322,6 +5882,7 @@ sprite_64: .byte $00,$be,$03,$f8 .byte $00,$c0,$03,$00 .byte $00,$c2,$03,$08 +.endif ; unused blank sprite sprite_65: @@ -5473,24 +6034,45 @@ sprite_7b: ; snow field boss mini UFO sprite_7c: +.ifdef Probotector + .byte $03 + .byte $f8,$fc,$02,$f4 + .byte $f8,$33,$02,$fc + .byte $f8,$35,$02,$04 +.else .byte $03 .byte $f8,$fc,$03,$f4 .byte $f8,$33,$03,$fc .byte $f8,$35,$03,$04 +.endif ; snow field boss mini UFO sprite_7d: +.ifdef Probotector + .byte $03 + .byte $f8,$37,$02,$f4 + .byte $f8,$39,$02,$fc + .byte $f8,$3b,$02,$04 +.else .byte $03 .byte $f8,$37,$03,$f4 .byte $f8,$39,$03,$fc .byte $f8,$3b,$03,$04 +.endif ; snow field boss mini UFO sprite_7e: +.ifdef Probotector + .byte $03 + .byte $f8,$3d,$02,$f4 + .byte $f8,$3f,$02,$fc + .byte $f8,$41,$02,$04 +.else .byte $03 .byte $f8,$3d,$03,$f4 .byte $f8,$3f,$03,$fc .byte $f8,$41,$03,$04 +.endif ; unknown (doesn't seem to be used) sprite_7f: @@ -5515,6 +6097,7 @@ sprite_82: ; l bullet indoor level shot from ; * 20%-27% horizontal portion of the playable screen ; * 70%-80% horizontal portion of the playable screen +; same as sprite_92 sprite_83: .byte $01 .byte $f8,$a0,$02,$fc @@ -5528,63 +6111,131 @@ sprite_84: ; base 2 boss blue soldier sprite_85: +.ifdef Probotector + .byte $04 + .byte $f0,$fa,$00,$01 +.else .byte $05 .byte $f0,$f2,$03,$08 +.endif base_2_soldier_part: +.ifdef Probotector + .byte $f0,$c4,$00,$f9 + .byte $00,$c8,$00,$f6 + .byte $00,$ca,$00,$fe +.else .byte $f0,$ee,$03,$f8 .byte $f0,$f0,$03,$00 .byte $00,$f4,$03,$f6 .byte $00,$f6,$03,$fe +.endif ; base 2 boss blue soldier sprite_86: +.ifdef Probotector + .byte $05 + .byte $f5,$fc,$00,$00 +.else .byte $04 +.endif base_2_soldier_bottom: +.ifdef Probotector + .byte $e8,$cc,$00,$f8 + .byte $f8,$ce,$00,$f2 + .byte $f8,$ee,$00,$fa + .byte $05,$f2,$00,$04 +.else .byte $e8,$f8,$03,$fe .byte $f8,$fa,$03,$f6 .byte $f8,$ce,$03,$fe .byte $08,$dd,$03,$03 +.endif ; base 2 boss blue soldier sprite_87: +.ifdef Probotector + .byte $03 + .byte $f4,$dd,$00,$f8 +base_2_soldier_bottom_2: + .byte $f4,$f6,$00,$00 + .byte $04,$f8,$00,$fb +.else .byte $03 base_2_soldier_bottom_2: .byte $f0,$df,$03,$f8 .byte $f0,$e1,$03,$00 .byte $00,$e3,$03,$fc +.endif ; base 2 blue soldier facing out (frame 1) +.ifdef Probotector +sprite_8f: +.endif sprite_88: .byte $04 blue_soldier_facing_out: +.ifdef Probotector + .byte $f0,$e5,$00,$f9 + .byte $f0,$e5,$40,$00 + .byte $00,$e7,$00,$f9 + .byte $00,$e7,$40,$00 +.else .byte $f0,$e5,$43,$f9 .byte $f0,$e5,$03,$00 .byte $00,$e7,$43,$f9 .byte $00,$e7,$03,$00 +.endif ; base 2 blue soldier facing out (frame 2) sprite_89: +.ifdef Probotector + .byte $04 + .byte $f0,$e9,$00,$f9 + .byte $f0,$e9,$40,$00 + .byte $00,$eb,$00,$f9 + .byte $00,$eb,$40,$00 +.else .byte $04 .byte $f0,$e9,$43,$f9 .byte $f0,$e9,$03,$00 .byte $00,$eb,$43,$f9 .byte $00,$eb,$03,$00 +.endif ; base 2 blue soldier flying (frame 1) sprite_8a: +.ifdef Probotector + .byte $05 + .byte $f0,$ed,$00,$f5 + .byte $f0,$ef,$00,$fd + .byte $f0,$ed,$40,$04 + .byte $00,$f1,$00,$f8 + .byte $00,$f3,$00,$00 +.else .byte $05 .byte $f0,$ed,$03,$f4 .byte $f0,$ef,$03,$fc .byte $f0,$ed,$43,$04 .byte $00,$f1,$03,$f8 .byte $00,$f3,$03,$00 +.endif ; base 2 blue soldier flying (frame 2) sprite_8b: +.ifdef Probotector + .byte $07 + .byte $f2,$f5,$00,$f4 + .byte $f2,$f7,$00,$fc + .byte $f2,$f5,$40,$04 + .byte $02,$f9,$00,$f8 + .byte $02,$fb,$00,$00 + .byte $0f,$b0,$00,$f6 + .byte $12,$b2,$00,$fe +.else .byte $07 .byte $f2,$f5,$03,$f4 .byte $f2,$f7,$03,$fc @@ -5593,133 +6244,247 @@ sprite_8b: .byte $02,$fb,$03,$00 .byte $12,$b0,$03,$f7 .byte $12,$b2,$03,$00 +.endif ; base boss level 4 base 2 red soldier sprite_8c: +.ifdef Probotector + .byte $04 + .byte $f0,$c6,$00,$01 + .byte $80 + .addr base_2_soldier_part +.else .byte $05 .byte $f0,$fc,$02,$08 .byte $80 .addr base_2_soldier_part +.endif ; base boss level 4 base 2 red soldier sprite_8d: +.ifdef Probotector + .byte $05 + .byte $f5,$f0,$00,$00 + .byte $80 + .addr base_2_soldier_bottom +.else .byte $05 .byte $f8,$a6,$02,$04 .byte $80 .addr base_2_soldier_bottom +.endif ; base boss level 4 base 2 red soldier sprite_8e: +.ifdef Probotector + .byte $03 + .byte $f4,$f4,$00,$f8 + .byte $80 + .addr base_2_soldier_bottom_2 +.else .byte $04 .byte $ff,$c4,$02,$00 .byte $80 .addr base_2_soldier_bottom_2 +.endif ; base boss level 4 base 2 red soldier facing player +.ifdef Probotector +; Probotector uses sprite_88 instead separately defining sprite_8f +.else sprite_8f: .byte $05 .byte $00,$c6,$02,$f4 .byte $80 .addr blue_soldier_facing_out +.endif ; base boss level 4 base 2 red soldier facing player with weapon sprite_90: +.ifdef Probotector + .byte $04 + .byte $f4,$df,$00,$f9 + .byte $f5,$e1,$00,$00 + .byte $05,$e3,$00,$f8 + .byte $05,$e3,$40,$00 +.else .byte $04 .byte $f0,$c8,$42,$f9 .byte $f0,$c8,$02,$00 .byte $00,$ca,$02,$f8 .byte $00,$cc,$02,$00 +.endif ; indoor boss defeated elevator with player on top sprite_91: +.ifdef Probotector + .byte $08 + .byte $0e,$fd,$02,$f4 + .byte $0e,$fd,$02,$fc + .byte $0e,$fd,$02,$04 + .byte $80 + .addr player_facing_side +.else .byte $08 .byte $0c,$fd,$02,$f4 .byte $0c,$fd,$02,$fc .byte $0c,$fd,$02,$04 .byte $80 .addr player_facing_side +.endif ; l bullet indoor level shot from ; * <= 10% horizontal portion of the playable screen ; * >= 90% horizontal portion of the playable screen +; same as sprite_83 sprite_92: .byte $01 .byte $f8,$a0,$02,$fc ; jumping man sprite_93: +.ifdef Probotector + .byte $03 + .byte $f0,$a8,$01,$01 + .byte $f5,$aa,$01,$fb + .byte $05,$ac,$01,$fb +.else .byte $04 .byte $eb,$ce,$01,$ff .byte $ec,$a8,$03,$fb .byte $fc,$aa,$03,$f6 .byte $fb,$ac,$03,$fe +.endif ; jumping man sprite_94: +.ifdef Probotector + .byte $04 + .byte $ef,$a8,$01,$01 + .byte $f4,$ae,$01,$f9 + .byte $00,$b2,$01,$00 + .byte $04,$b0,$01,$f8 +.else .byte $04 .byte $ed,$ae,$01,$fe .byte $ed,$b0,$03,$fb .byte $fd,$b2,$03,$f7 .byte $fd,$b4,$03,$ff +.endif ; jumping man sprite_95: +.ifdef Probotector + .byte $04 + .byte $f0,$a8,$01,$01 + .byte $f5,$b4,$01,$f9 + .byte $00,$b8,$01,$01 + .byte $05,$b6,$01,$f9 +.else .byte $04 .byte $ed,$b6,$01,$ff .byte $ed,$b8,$03,$fb .byte $fd,$ba,$03,$f4 .byte $fd,$bc,$03,$fc +.endif ; indoor soldier hit by bullet sprite ; indoor soldier, jumping man, grenade launcher, group of four soldiers firing at player sprite_96: +.ifdef Probotector + .byte $03 + .byte $f0,$ba,$01,$f8 + .byte $f0,$ba,$41,$00 + .byte $00,$bc,$01,$fc +.else .byte $04 .byte $eb,$da,$01,$ff .byte $ed,$c0,$03,$fc .byte $fd,$c2,$43,$f9 .byte $fd,$c2,$03,$00 +.endif ; jumping man in air sprite_97: +.ifdef Probotector + .byte $03 + .byte $eb,$d2,$01,$03 + .byte $f2,$d0,$01,$fb + .byte $02,$d4,$01,$fb +.else .byte $05 .byte $e8,$d0,$01,$fa .byte $e8,$d2,$03,$fc .byte $f8,$d4,$03,$f4 .byte $f8,$d6,$03,$fc .byte $f8,$d8,$03,$04 +.endif ; jumping man facing player sprite_98: +.ifdef Probotector + .byte $03 + .byte $fb,$c2,$01,$ff + .byte $fc,$c0,$01,$f8 + .byte $0b,$ce,$01,$fc +.else .byte $03 .byte $f0,$da,$01,$ff .byte $fc,$dc,$03,$fb .byte $00,$de,$03,$03 +.endif ; small indoor rolling grenade sprite_99: +.ifdef Probotector + .byte $02 + .byte $fe,$e0,$03,$f8 + .byte $fe,$e0,$43,$00 +.else .byte $02 .byte $fe,$e0,$01,$f8 .byte $fe,$e0,$41,$00 +.endif ; closer indoor rolling grenade sprite_9a: +.ifdef Probotector + .byte $02 + .byte $fe,$e2,$03,$f8 + .byte $fe,$e2,$43,$00 +.else .byte $02 .byte $fe,$e2,$01,$f8 .byte $fe,$e2,$41,$00 +.endif ; even closer indoor rolling grenade sprite_9b: +.ifdef Probotector + .byte $03 + .byte $fd,$e4,$03,$f4 + .byte $fd,$e6,$03,$fc + .byte $fd,$e4,$43,$04 +.else .byte $03 .byte $fd,$e4,$01,$f4 .byte $fd,$e6,$01,$fc .byte $fd,$e4,$41,$04 +.endif ; closest indoor rolling grenade sprite_9c: +.ifdef Probotector + .byte $03 + .byte $fc,$e8,$03,$f4 + .byte $fc,$ea,$43,$fc + .byte $fc,$e8,$43,$04 +.else .byte $03 .byte $fc,$e8,$01,$f4 .byte $fc,$ea,$41,$fc .byte $fc,$e8,$41,$04 +.endif ; indoor base enemy kill explosion (frame 1) sprite_9d: @@ -5739,50 +6504,97 @@ sprite_9f: ; indoor hand grenade sprite_a0: +.ifdef Probotector + .byte $02 + .byte $f8,$ec,$03,$f8 + .byte $f8,$ee,$03,$00 +.else .byte $02 .byte $f8,$ec,$01,$f8 .byte $f8,$ee,$01,$00 +.endif ; indoor hand grenade sprite_a1: +.ifdef Probotector + .byte $01 + .byte $f8,$f0,$03,$fd +.else .byte $01 .byte $f8,$f0,$01,$fd +.endif ; indoor hand grenade sprite_a2: +.ifdef Probotector + .byte $fe,$f2,$03 +.else .byte $fe,$f2,$01 +.endif ; indoor hand grenade sprite_a3: +.ifdef Probotector + .byte $01 + .byte $f8,$f4,$03,$fb +.else .byte $01 .byte $f8,$f4,$01,$fb +.endif ; indoor hand grenade sprite_a4: +.ifdef Probotector + .byte $01 + .byte $f8,$f6,$03,$fd +.else .byte $01 .byte $f8,$f6,$01,$fd +.endif ; indoor hand grenade sprite_a5: +.ifdef Probotector + .byte $01 + .byte $f8,$f8,$03,$fd +.else .byte $01 .byte $f8,$f8,$01,$fd +.endif ; indoor hand grenade sprite_a6: +.ifdef Probotector + .byte $fe,$fa,$03 +.else .byte $fe,$fa,$01 +.endif ; indoor hand grenade sprite_a7: +.ifdef Probotector + .byte $01 + .byte $f8,$fc,$03,$fd +.else .byte $01 .byte $f8,$fc,$01,$fd +.endif ; indoor hand grenade sprite_a8: +.ifdef Probotector + .byte $fe,$c4,$03 +.else .byte $fe,$c4,$01 +.endif ; indoor hand grenade sprite_a9: +.ifdef Probotector + .byte $fe,$c6,$03,$00 +.else .byte $fe,$c6,$01,$00 +.endif ; falcon (player select icon) sprite_aa: @@ -5791,7 +6603,30 @@ sprite_aa: .byte $f8,$d0,$01,$00 ; Bill and Lance's hair and shirt +; For Probotector - red splash behind Probotector title sprite_ab: +.ifdef Probotector + .byte $13 + .byte $e3,$de,$00,$c0 + .byte $d4,$e0,$00,$cf + .byte $d1,$e2,$00,$de + .byte $d7,$e4,$00,$e6 + .byte $d4,$e0,$00,$f3 + .byte $d3,$e6,$00,$1e + .byte $d3,$e6,$00,$40 + .byte $d4,$e0,$00,$48 + .byte $e0,$e8,$00,$5e + .byte $e9,$ea,$00,$65 + .byte $f9,$ec,$00,$63 + .byte $00,$f0,$00,$38 + .byte $f0,$ee,$00,$28 + .byte $00,$fc,$00,$f6 + .byte $08,$fa,$00,$e7 + .byte $0d,$f8,$00,$df + .byte $0c,$f6,$00,$d0 + .byte $0d,$f4,$00,$c8 + .byte $00,$f2,$00,$ab +.else .byte $16 .byte $00,$da,$01,$00 .byte $00,$de,$01,$08 @@ -5815,6 +6650,7 @@ sprite_ab: .byte $24,$fa,$00,$1d .byte $34,$f2,$00,$0d .byte $34,$fc,$00,$1d +.endif ; alien's lair bundle (crustacean-like alien) sprite_ac: @@ -5915,9 +6751,26 @@ sprite_b6: ; energy zone boss giant armored soldier sprite_b7: +.ifdef Probotector + .byte $13 +.else .byte $16 +.endif giant_soldier_top: +.ifdef Probotector + .byte $e7,$b0,$03,$e5 + .byte $e3,$b2,$03,$ed + .byte $d8,$a8,$02,$f3 + .byte $d8,$aa,$02,$fb + .byte $d8,$ac,$02,$03 + .byte $e8,$b4,$02,$f4 + .byte $d2,$ae,$02,$0b + .byte $de,$ba,$03,$0c + .byte $ee,$bc,$03,$0b + .byte $e8,$b6,$02,$fc + .byte $e8,$b8,$02,$04 +.else .byte $d8,$dc,$02,$f0 .byte $d8,$de,$02,$f8 .byte $d8,$e0,$02,$00 @@ -5930,8 +6783,19 @@ giant_soldier_top: .byte $e7,$a8,$03,$06 .byte $e7,$aa,$03,$0e .byte $f7,$b4,$03,$0b +.endif giant_soldier_bottom: +.ifdef Probotector + .byte $f8,$c0,$03,$f4 + .byte $fb,$be,$03,$ef + .byte $08,$c6,$03,$f3 + .byte $0b,$c4,$03,$eb + .byte $f8,$c2,$03,$02 + .byte $08,$c8,$03,$02 + .byte $04,$ca,$03,$0a + .byte $08,$cc,$03,$0d +.else .byte $f8,$ac,$03,$e8 .byte $f8,$ae,$03,$f0 .byte $f8,$b0,$03,$f8 @@ -5942,9 +6806,28 @@ giant_soldier_bottom: .byte $08,$be,$03,$00 .byte $08,$c0,$03,$08 .byte $08,$c2,$03,$10 +.endif ; energy zone boss giant armored soldier (legs together) sprite_b9: +.ifdef Probotector + .byte $0f + .byte $e8,$b0,$03,$e5 + .byte $e4,$b2,$03,$ed + .byte $d9,$a8,$02,$f3 + .byte $d9,$aa,$02,$fb + .byte $d9,$ac,$02,$03 + .byte $e9,$b4,$02,$f4 + .byte $d3,$ae,$02,$0b + .byte $df,$ba,$03,$0c + .byte $ef,$bc,$03,$0b + .byte $e9,$b6,$02,$fc + .byte $e9,$b8,$02,$04 + .byte $f8,$ce,$03,$f8 + .byte $f8,$d0,$03,$00 + .byte $08,$d2,$03,$fb + .byte $08,$d4,$03,$03 +.else .byte $12 .byte $f9,$d8,$03,$f0 .byte $f9,$da,$03,$f8 @@ -5964,9 +6847,25 @@ sprite_b9: .byte $e9,$a8,$03,$06 .byte $e9,$aa,$03,$0e .byte $f9,$b4,$03,$0b +.endif ; energy zone boss giant armored soldier (running, jumping) sprite_ba: +.ifdef Probotector + .byte $13 + .byte $e8,$09,$02,$fc + .byte $e8,$0b,$02,$04 + .byte $f8,$9d,$03,$ec + .byte $f8,$9f,$03,$f4 + .byte $f8,$d7,$03,$fc + .byte $f8,$d9,$03,$04 + .byte $fc,$db,$03,$07 + .byte $08,$dd,$03,$f0 + .byte $08,$fd,$03,$f8 + .byte $09,$ff,$03,$05 + .byte $80 + .addr giant_soldier_top +.else .byte $15 .byte $f8,$ca,$03,$e8 .byte $f8,$cc,$03,$f0 @@ -5980,6 +6879,7 @@ sprite_ba: .byte $08,$d2,$03,$00 .byte $80 .addr giant_soldier_top +.endif ; energy zone boss projectile (spiked disk) sprite_bb: @@ -5995,6 +6895,16 @@ sprite_bc: ; mounted soldier (basquez) sprite_bd: +.ifdef Probotector + .byte $07 + .byte $f4,$ee,$01,$f0 + .byte $f4,$f0,$01,$f8 + .byte $f4,$f2,$01,$00 + .byte $f4,$f4,$01,$08 + .byte $04,$f6,$01,$f8 + .byte $04,$f8,$01,$00 + .byte $04,$fa,$01,$08 +.else .byte $07 .byte $f4,$ee,$03,$f0 .byte $f4,$f2,$03,$f8 @@ -6003,9 +6913,20 @@ sprite_bd: .byte $04,$f8,$00,$00 .byte $f4,$f6,$01,$00 .byte $f4,$fa,$01,$08 +.endif ; mounted soldier (basquez) sprite_be: +.ifdef Probotector + .byte $07 + .byte $f4,$ee,$01,$f2 + .byte $f4,$f0,$01,$fa + .byte $f4,$f2,$01,$02 + .byte $f4,$f4,$01,$0a + .byte $04,$f6,$01,$fa + .byte $04,$f8,$01,$02 + .byte $04,$fa,$01,$0a +.else .byte $07 .byte $f4,$ee,$03,$f2 .byte $f4,$f2,$03,$fa @@ -6014,6 +6935,7 @@ sprite_be: .byte $04,$f8,$00,$01 .byte $f4,$f6,$01,$01 .byte $f4,$fa,$01,$09 +.endif ; energy zone wall fire sprite_bf: @@ -6037,6 +6959,23 @@ sprite_c2: ; energy zone boss giant armored soldier (throwing) sprite_c3: +.ifdef Probotector + .byte $14 + .byte $df,$d6,$03,$e0 + .byte $d7,$d8,$03,$e8 + .byte $df,$dc,$03,$ee + .byte $e8,$e8,$03,$01 + .byte $e8,$ea,$03,$09 + .byte $f4,$06,$03,$04 + .byte $cf,$da,$02,$ee + .byte $d8,$de,$02,$f6 + .byte $d8,$e0,$02,$fe + .byte $d8,$e2,$02,$06 + .byte $e8,$e4,$02,$f5 + .byte $e8,$e6,$02,$fd + .byte $80 + .addr giant_soldier_bottom +.else .byte $13 .byte $d8,$9d,$02,$f0 .byte $d8,$d7,$02,$f8 @@ -6049,6 +6988,7 @@ sprite_c3: .byte $e8,$dd,$03,$00 .byte $80 .addr giant_soldier_bottom +.endif ; snow field ground separator sprite_c4: @@ -6057,41 +6997,78 @@ sprite_c4: ; green helicopter ending scene (frame 1) sprite_c5: +.ifdef Probotector + .byte $01 + .byte $f8,$d6,$00,$fd +.else .byte $02 .byte $f8,$a8,$00,$f8 .byte $f8,$aa,$00,$00 +.endif ; green helicopter ending scene (frame 2) sprite_c6: +.ifdef Probotector + .byte $02 + .byte $f8,$d8,$00,$f8 + .byte $f8,$da,$00,$00 +.else .byte $03 .byte $f8,$ac,$00,$f8 .byte $f8,$ae,$00,$00 .byte $f8,$a6,$01,$07 +.endif ; green helicopter ending scene (frame 3) sprite_c7: +.ifdef Probotector + .byte $01 + .byte $f8,$dc,$00,$fc +.else .byte $02 .byte $f8,$b0,$00,$f8 .byte $f8,$b2,$00,$00 +.endif ; green helicopter ending scene (frame 4) sprite_c8: +.ifdef Probotector + .byte $02 + .byte $f8,$de,$00,$f8 + .byte $f8,$e0,$00,$00 +.else .byte $03 .byte $f8,$b4,$00,$f8 .byte $f8,$b6,$00,$00 .byte $f8,$a6,$01,$05 +.endif ; green helicopter facing forward (frame 1) sprite_c9: +.ifdef Probotector + .byte $03 + .byte $ef,$e2,$00,$f6 + .byte $f8,$e4,$00,$fc + .byte $f9,$e6,$00,$04 +.else .byte $05 .byte $f8,$b8,$00,$f3 .byte $f8,$ba,$00,$fb .byte $f8,$bc,$00,$03 .byte $03,$a6,$01,$fb .byte $03,$a6,$01,$05 +.endif ; green helicopter facing forward (frame 2) sprite_ca: +.ifdef Probotector + .byte $05 + .byte $ef,$e8,$00,$f1 + .byte $f3,$ea,$00,$f9 + .byte $f6,$ec,$00,$01 + .byte $fe,$ee,$00,$08 + .byte $06,$f0,$00,$00 +.else .byte $07 .byte $f0,$be,$40,$08 .byte $f0,$c0,$40,$00 @@ -6100,9 +7077,19 @@ sprite_ca: .byte $00,$c6,$40,$08 .byte $00,$c8,$40,$00 .byte $00,$ca,$40,$f8 +.endif ; green helicopter facing forward (frame 3) sprite_cb: +.ifdef Probotector + .byte $06 + .byte $ee,$f2,$00,$ed + .byte $f2,$f4,$00,$f5 + .byte $f5,$f6,$00,$fd + .byte $f2,$f8,$00,$05 + .byte $02,$fa,$00,$03 + .byte $02,$fc,$00,$0b +.else .byte $0a .byte $f0,$cc,$00,$e8 .byte $f0,$ce,$00,$f0 @@ -6114,7 +7101,10 @@ sprite_cb: .byte $00,$da,$00,$00 .byte $04,$a6,$01,$f8 .byte $04,$a6,$01,$07 +.endif +.ifdef Probotector +.else ; green helicopter facing forward (frame 4) sprite_cc: .byte $09 @@ -6155,15 +7145,28 @@ sprite_ce: .byte $00,$e8,$40,$04 .byte $00,$ea,$40,$fc .byte $00,$ec,$40,$f4 +.endif ; ending sequence mountains sprite_cf: +.ifdef Probotector +sprite_cc: +sprite_cd: +sprite_ce: + .byte $05 + .byte $00,$81,$03,$00 + .byte $00,$83,$03,$08 + .byte $00,$83,$03,$10 + .byte $00,$83,$03,$18 + .byte $00,$85,$03,$20 +.else .byte $05 .byte $00,$63,$03,$00 .byte $00,$65,$03,$08 .byte $00,$65,$03,$10 .byte $00,$65,$03,$18 .byte $00,$89,$03,$20 +.endif ; unused #$21b bytes out of #$4,000 bytes total (96.71% full) ; unused 539 bytes out of 16,384 bytes total (96.71% full) diff --git a/src/bank2.asm b/src/bank2.asm index 37def6a..0a03aa2 100644 --- a/src/bank2.asm +++ b/src/bank2.asm @@ -1,4 +1,4 @@ -; Contra US Disassembly - v1.1 +; Contra US Disassembly - v1.2 ; https://github.com/vermiceli/nes-contra-us ; Bank 2 starts with RLE-encoded level data (graphic super tiles for the level ; screens). It then contains compressed tile data and alternate tile data and @@ -798,16 +798,28 @@ set_player_paused_sprite_attr: @invincibility_check: ldy INVINCIBILITY_TIMER,x beq @set_player_recoil_and_bg_priority ; jump if not invincible - lda #$04 ; a = #$04 + lda #$04 ; a = #$04 (sprite code palette override bit) @continue2: - sta $00 ; store sprite code for player in $00 - lda FRAME_COUNTER ; load frame counter + sta $00 ; store sprite code for player in $00 +.ifdef Probotector + lda probotector_sprite_palette,X ; player 2 sprite palette alternates between red and gray + ; instead of red and blue like player 1 (and like player 2 in Contra) + tay ; transfer sprite palette to y + lda FRAME_COUNTER ; load frame counter eor player_effect_xor_tbl,x - ldy #$04 - and $00 - beq @continue3 ; branch if sprite attribute is still #$00 - ldy #$05 ; y = #$05 (override sprite code palette with palette 1) +.else + lda FRAME_COUNTER ; load frame counter + eor player_effect_xor_tbl,x + ldy #$04 ; sprite palette #$00 (red and blue) +.endif + and $00 ; see if sprite code palette override is set + beq @continue3 ; branch if sprite attribute is still #$00 +.ifdef Probotector + ldy #$06 ; y = #$06 (override sprite code palette with palette 2) +.else + ldy #$05 ; y = #$05 (override sprite code palette with palette 1) +.endif @continue3: tya ; transfer sprite attribute to a @@ -843,6 +855,13 @@ sprite_attr_start_tbl: player_effect_xor_tbl: .byte $00,$ff +.ifdef Probotector +; first byte is player 1 +; second byte is player 2 +probotector_sprite_palette: + .byte $04,$05 +.endif + set_player_sprite: lda PLAYER_WATER_STATE,x beq @set_out_of_water_sprite diff --git a/src/bank3.asm b/src/bank3.asm index 962b97d..b098b73 100644 --- a/src/bank3.asm +++ b/src/bank3.asm @@ -1,4 +1,4 @@ -; Contra US Disassembly - v1.1 +; Contra US Disassembly - v1.2 ; https://github.com/vermiceli/nes-contra-us ; Bank 3 starts with the data that specifies which pattern table tiles comprises ; super-tiles along with the color palettes. This bank also has the routines @@ -978,10 +978,23 @@ level_8_supertile_data: .byte $00,$00,$01,$03,$00,$00,$11,$13,$9d,$9d,$2e,$2f,$ad,$ad,$90,$3f .byte $00,$00,$00,$00,$00,$00,$00,$00,$9d,$9d,$9d,$9d,$ad,$ad,$ad,$ad .byte $ef,$63,$f0,$61,$72,$73,$70,$71,$02,$03,$02,$03,$12,$13,$12,$13 - .byte $ef,$63,$f0,$61,$72,$73,$70,$71,$f1,$43,$f2,$fd,$52,$53,$50,$fe - .byte $00,$00,$00,$00,$00,$00,$00,$00,$f1,$43,$fc,$fd,$52,$53,$50,$fe +.ifdef Probotector + ; Probotector's super-tiles match the Japanese version of the game + .byte $ef,$63,$f0,$61,$72,$73,$70,$71,$f1,$43,$f2,$86,$52,$53,$50,$96 ; alien guardian wall shells + .byte $00,$00,$00,$00,$00,$00,$00,$00,$f1,$43,$fc,$86,$52,$53,$50,$96 ; alien guardian wall shells +.else + ; Contra modified the shells to be more decrepit + .byte $ef,$63,$f0,$61,$72,$73,$70,$71,$f1,$43,$f2,$fd,$52,$53,$50,$fe ; alien guardian wall shells + .byte $00,$00,$00,$00,$00,$00,$00,$00,$f1,$43,$fc,$fd,$52,$53,$50,$fe ; alien guardian wall shells +.endif .byte $00,$ac,$8e,$8f,$00,$9c,$9e,$9f,$00,$a9,$ae,$af,$00,$ac,$8c,$8d - .byte $00,$00,$f0,$61,$00,$00,$70,$71,$02,$03,$f2,$fd,$12,$13,$50,$fe +.ifdef Probotector + ; Probotector's super-tiles match the Japanese version of the game + .byte $00,$00,$f0,$61,$00,$00,$70,$71,$02,$03,$f2,$41,$12,$13,$50,$51 ; alien guardian wall shells +.else + ; Contra modified the shells to be more decrepit + .byte $00,$00,$f0,$61,$00,$00,$70,$71,$02,$03,$f2,$fd,$12,$13,$50,$fe ; alien guardian wall shells +.endif .byte $00,$00,$f0,$61,$00,$00,$70,$71,$00,$00,$f2,$41,$00,$00,$50,$51 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$fc,$41,$00,$00,$50,$51 .byte $8e,$8f,$8e,$8f,$9e,$9f,$9e,$9f,$9c,$9c,$ae,$af,$00,$a9,$8c,$8d diff --git a/src/bank4.asm b/src/bank4.asm index d444279..6562e17 100644 --- a/src/bank4.asm +++ b/src/bank4.asm @@ -1,4 +1,4 @@ -; Contra US Disassembly - v1.1 +; Contra US Disassembly - v1.2 ; https://github.com/vermiceli/nes-contra-us ; Bank 4 mostly contains compressed graphic data. The rest of bank 4 is the code ; for the ending scene animation and the ending credits, including the ending @@ -49,6 +49,7 @@ graphic_data_04: ; compressed graphics data - code 13 (#$cb bytes) ; left pattern table data - writes addresses [$08c0-$09a0) +; player top-half aiming up and aiming straight, also contains the laser sprites ; CPU address $87a1 graphic_data_13: .incbin "assets/graphic_data/graphic_data_13.bin" @@ -73,7 +74,7 @@ graphic_data_06: .incbin "assets/graphic_data/graphic_data_06.bin" ; compressed graphics data - code 10 (#$343 bytes) -; horizontal flip +; horizontal flip, different location in right pattern table ; CPU address $a003 graphic_data_10: .byte $00,$16 @@ -242,8 +243,12 @@ end_game_sequence_00: iny dex bpl @set_ending_sprite_animations +.ifdef Probotector + ; don't play helicopter sound for Probotector, ending animation uses jet +.else lda #$21 ; a = #$21 (sound_21) jsr play_sound ; play helicopter rotors sound +.endif inc END_LEVEL_ROUTINE_INDEX ; increment ending scene index (end_game_sequence_ptr_tbl) rts @@ -365,6 +370,19 @@ ending_sequence_explosion_tbl: ; table for helicopter sprite codes for animation (#$20 bytes) ; each byte is a sprite code, e.g. sprite_c5, sprite_c6, etc. +.ifdef Probotector +helicopter_sprite_anim_tbl: + .byte $c5,$c5,$c5,$c5,$c5,$c5,$c5,$c5,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cb + .byte $cb,$cb,$cb,$cb,$cb,$cb,$cb,$cb,$cb,$cb,$cb,$cb,$cb,$cb,$cb,$cb + +; pattern table tile codes and palette codes - after destruction (#$43 bytes) +destroyed_island_tile_tbl: + .byte $01,$0e,$04,$22,$29,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + .byte $00,$00,$00,$22,$49,$00,$00,$00,$00,$00,$00,$00,$00,$00,$71,$72 + .byte $73,$00,$00,$22,$69,$6f,$00,$00,$71,$00,$6f,$75,$7c,$75,$7e,$7f + .byte $75,$74,$7d,$23,$da,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa + .byte $aa,$aa,$aa +.else helicopter_sprite_anim_tbl: .byte $c5,$c6,$c7,$c5,$c6,$c7,$c5,$c6,$c7,$c5,$c8,$c9,$ca,$cb,$cc,$cd .byte $ce,$cc,$cd,$ce,$cc,$cd,$ce,$cc,$cd,$ce,$cc,$cd,$ce,$cc,$cd,$ce @@ -376,6 +394,7 @@ destroyed_island_tile_tbl: .byte $72,$00,$00,$22,$69,$7c,$00,$00,$70,$00,$7c,$74,$7e,$74,$80,$81 .byte $74,$73,$7f,$23,$da,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa .byte $aa,$aa,$aa +.endif ; tables for ending scene sprites (#$a * #$3 = #$1e bytes) ; byte 0: delay @@ -739,9 +758,15 @@ ending_credits_16: ending_credits_17: .byte $06,$0b,$4e,$40,$53,$41,$54,$4f +.ifdef Probotector +; AC TEAM +ending_credits_18: + .byte $07,$0b,$41,$43,$00,$54,$45,$41,$4d +.else ; AC CONTRA TEAM ending_credits_18: .byte $0e,$0b,$41,$43,$00,$43,$4f,$4e,$54,$52,$41,$00,$54,$45,$41,$4d +.endif ; PRESENTED BY ending_credits_1c: diff --git a/src/bank5.asm b/src/bank5.asm index a9a501e..5d0dab0 100644 --- a/src/bank5.asm +++ b/src/bank5.asm @@ -1,4 +1,4 @@ -; Contra US Disassembly - v1.1 +; Contra US Disassembly - v1.2 ; https://github.com/vermiceli/nes-contra-us ; Bank 5 mostly contains compressed graphic data. The rest of bank 5 is the ; code and lookup tables for automated input for the 3 demo (attract) levels. @@ -18,7 +18,7 @@ .byte $05 ; The PRG ROM bank number (5) ; compressed graphics data - Code 05 (#$A60 bytes) -; character when immobile, prone, weapon zeppelin +; Level 1 bridge, mountain, and water tiles ; writes to same PPU addresses as graphic_data_07 and graphic_data_0b ; pattern table data - writes addresses ; * [$09a0-$0a80) @@ -53,6 +53,7 @@ graphic_data_0b: ; compressed graphics data - Code 19 (#$1e5 bytes) ; left pattern table data - writes addresses [$0680-$08c0) +; player killed sprite tiles: recoil from hit and lying on ground ; CPU address $a31b graphic_data_19: .incbin "assets/graphic_data/graphic_data_19.bin" @@ -64,7 +65,7 @@ graphic_data_1a: .incbin "assets/graphic_data/graphic_data_1a.bin" ; compressed graphics data - Code 14 (#$5cb bytes) -; Turrets, Gray and Red +; rotating gun and red turret ; right pattern table data - writes addresses [$1600-$1bd0) ; CPU address $a814 graphic_data_14: diff --git a/src/bank6.asm b/src/bank6.asm index 6479948..26e940a 100644 --- a/src/bank6.asm +++ b/src/bank6.asm @@ -1,4 +1,4 @@ -; Contra US Disassembly - v1.1 +; Contra US Disassembly - v1.2 ; https://github.com/vermiceli/nes-contra-us ; Bank 6 contains compressed graphics data, data for short text sequences like ; level names and menu options. Bank 6 also contains the code for the players' @@ -97,24 +97,42 @@ short_text_pointer_table: ; the two bytes after $fd specify the PPU address ; "STAGE" text text_stage: - .byte $22,$0c,$53,$54,$41,$47,$45,$00,$00,$fe + .byte $22,$0c + .byte $53,$54,$41,$47,$45,$00,$00,$fe ; "GAME OVER" text text_game_over: - .byte $22,$2a,$47,$41,$4d,$45,$00,$4f,$56,$45,$52,$fe +.ifdef Probotector + .byte $22,$0a +.else + .byte $22,$2a +.endif + .byte $47,$41,$4d,$45,$00,$4f,$56,$45,$52,$fe ; "GAME OVER" text text_game_over2: - .byte $20,$c2,$47,$41,$4d,$45,$00,$4f,$56,$45,$52,$fe + .byte $20,$c2 + .byte $47,$41,$4d,$45,$00,$4f,$56,$45,$52,$fe ; "GAME OVER" text text_game_over3: - .byte $20,$d2,$47,$41,$4d,$45,$00,$4f,$56,$45,$52,$fe + .byte $20,$d2 + .byte $47,$41,$4d,$45,$00,$4f,$56,$45,$52,$fe ; "CONTINUE" text text_continue: - .byte $22,$8c,$43,$4f,$4e,$54,$49,$4e,$55,$45,$fd - .byte $22,$cc ; change to PPU address $22cc and read next text (text_end) +.ifdef Probotector + .byte $22,$6c +.else + .byte $22,$8c +.endif + .byte $43,$4f,$4e,$54,$49,$4e,$55,$45,$fd + +.ifdef Probotector + .byte $22,$ac ; change to PPU address $22ac and read next text (text_end) +.else + .byte $22,$cc ; change to PPU address $22ac and read next text (text_end) +.endif ; "END" text, written when writing previous text text_continue text_end: @@ -122,15 +140,26 @@ text_end: ; "PLAY SELECT" text text_play_select: - .byte $22,$8a,$50,$4c,$41,$59,$00,$53,$45,$4c,$45,$43,$54,$fe + .byte $22,$8a + .byte $50,$4c,$41,$59,$00,$53,$45,$4c,$45,$43,$54,$fe ; "1 PLAYER" text text_1_player: - .byte $22,$87,$31,$00,$50,$4c,$41,$59,$45,$52,$fe +.ifdef Probotector + .byte $22,$6d +.else + .byte $22,$87 +.endif + .byte $31,$00,$50,$4c,$41,$59,$45,$52,$fe ; "2 PLAYERS" text text_2_players: - .byte $22,$c7,$32,$00,$50,$4c,$41,$59,$45,$52,$53,$fe +.ifdef Probotector + .byte $22,$ad +.else + .byte $22,$c7 +.endif + .byte $32,$00,$50,$4c,$41,$59,$45,$52,$53,$fe ; "REST" text (PPU address $20c2) text_rest: @@ -158,21 +187,37 @@ text_2p: ; CPU address $b333 ; PPU address $3f00 (start of palette data) transition_screen_palettes: - .byte $3f,$00 ; PPU address $3f00 - palette address start - .byte COLOR_BLACK_0f ; universal background color - .byte COLOR_LT_GRAY_10,COLOR_LT_OLIVE_28,COLOR_MED_RED_16 ; background palette 0 +.ifdef Probotector + .byte $3f,$00 ; PPU address $3f00 - palette address start + .byte COLOR_BLACK_0f ; universal background color + .byte COLOR_LT_GRAY_10 ,COLOR_LT_ORANGE_27,COLOR_MED_RED_16 ; background palette 0 .byte $0f - .byte COLOR_WHITE_30 ,COLOR_LT_GRAY_10 ,COLOR_MED_PINK_15 ; background palette 1 + .byte COLOR_PALE_VIOLET_32,COLOR_LT_VIOLET_22,COLOR_MED_VIOLET_12 ; background palette 1 .byte $0f - .byte COLOR_LT_GRAY_10,COLOR_LT_OLIVE_28,COLOR_PALE_OLIVE_38 ; background palette 2 + .byte COLOR_DARK_VIOLET_02,COLOR_LT_VIOLET_22,COLOR_MED_VIOLET_12 ; background palette 2 .byte $0f - .byte COLOR_BLACK_0f ,COLOR_BLACK_0f ,COLOR_BLACK_0f ; background palette 3 (black, black, black) + .byte COLOR_MED_RED_16 ,COLOR_BLACK_0f ,COLOR_BLACK_0f ; background palette 3 (red, black, black) +.else + .byte $3f,$00 ; PPU address $3f00 - palette address start + .byte COLOR_BLACK_0f ; universal background color + .byte COLOR_LT_GRAY_10,COLOR_LT_OLIVE_28,COLOR_MED_RED_16 ; background palette 0 + .byte $0f + .byte COLOR_WHITE_30 ,COLOR_LT_GRAY_10 ,COLOR_MED_PINK_15 ; background palette 1 + .byte $0f + .byte COLOR_LT_GRAY_10,COLOR_LT_OLIVE_28,COLOR_PALE_OLIVE_38 ; background palette 2 + .byte $0f + .byte COLOR_BLACK_0f ,COLOR_BLACK_0f ,COLOR_BLACK_0f ; background palette 3 (black, black, black) +.endif ; sprite palettes for intro guys (#$11 bytes) ; loaded along with transition_screen_palettes intro_sprite_palettes: .byte $0f +.ifdef Probotector + .byte COLOR_WHITE_20,COLOR_LT_ORANGE_27 ,COLOR_MED_RED_16 ; sprite palette 0 +.else .byte COLOR_WHITE_30,COLOR_LT_GRAY_10,COLOR_DARK_GRAY_00 ; sprite palette 0 +.endif .byte $0f .byte COLOR_WHITE_30,COLOR_PALE_OLIVE_38,COLOR_LT_OLIVE_28 ; sprite palette 1 .byte $0f @@ -216,16 +261,29 @@ text_alien_lair: ; background palettes for intro screen (when Bill and Lance appear) (#$13 bytes) ; PPU address $3f00 intro_background_palette2: - .byte $3f,$00 ; PPU address $3f00 - .byte COLOR_BLACK_0f ; universal background color - .byte COLOR_LT_GRAY_10,COLOR_LT_OLIVE_28,COLOR_MED_RED_16 ; background palette 0 +.ifdef Probotector + .byte $3f,$00 ; PPU address $3f00 + .byte COLOR_BLACK_0f ; universal background color + .byte COLOR_LT_GRAY_10,COLOR_LT_ORANGE_27,COLOR_MED_RED_16 ; background palette 0 .byte $0f - .byte COLOR_WHITE_30 ,COLOR_LT_GRAY_10 ,COLOR_MED_PINK_15 ; background palette 1 + .byte COLOR_PALE_VIOLET_32 ,COLOR_LT_VIOLET_22 ,COLOR_MED_VIOLET_12 ; background palette 1 .byte $0f - .byte COLOR_LT_GRAY_10,COLOR_LT_OLIVE_28,COLOR_PALE_OLIVE_38 ; background palette 2 + .byte COLOR_DARK_VIOLET_02,COLOR_LT_VIOLET_22,COLOR_MED_VIOLET_12 ; background palette 2 .byte $0f - .byte COLOR_WHITE_30 ,COLOR_PALE_RED_36,COLOR_LT_RED_26 ; background palette 3 + .byte COLOR_MED_RED_16 ,COLOR_BLACK_0f,COLOR_BLACK_0f ; background palette 3 .byte $fe +.else + .byte $3f,$00 ; PPU address $3f00 + .byte COLOR_BLACK_0f ; universal background color + .byte COLOR_LT_GRAY_10,COLOR_LT_OLIVE_28,COLOR_MED_RED_16 ; background palette 0 + .byte $0f + .byte COLOR_WHITE_30 ,COLOR_LT_GRAY_10 ,COLOR_MED_PINK_15 ; background palette 1 + .byte $0f + .byte COLOR_LT_GRAY_10,COLOR_LT_OLIVE_28,COLOR_PALE_OLIVE_38 ; background palette 2 + .byte $0f + .byte COLOR_WHITE_30 ,COLOR_PALE_RED_36,COLOR_LT_RED_26 ; background palette 3 + .byte $fe +.endif ; check to see if the player is trying to fire a bullet (B button pressed) ; ensure player in valid state to fire a bullet, e.g. not being electrocuted @@ -654,16 +712,29 @@ bullet_initial_pos_ptr_tbl: ; byte #$01 - x offset from player position ; byte #$02 - y offset from player position bullet_initial_pos_00: - .byte $05,$e5 ; $05 -1b Up - .byte $0d,$f0 ; $0d -10 Up-Right - .byte $10,$fb ; $10 -05 Right - .byte $0d,$06 ; $0d 06 Down-Right - .byte $10,$09 ; $10 09 Prone Facing Right - .byte $f0,$09 ; -$10 09 Prone Facing Left - .byte $f3,$06 ; -$0d 06 Down-Left - .byte $f0,$fb ; -$10 -05 Left - .byte $f3,$f0 ; -$0d -10 Up-Left - .byte $fb,$e5 ; -$05 -1b Down (impossible) +.ifdef Probotector + .byte $03,$e5 ; $05 -1b Up + .byte $0d,$f0 ; $0d -10 Up-Right + .byte $07,$fb ; $10 -05 Right + .byte $0a,$03 ; $0d 06 Down-Right + .byte $10,$09 ; $10 09 Prone Facing Right + .byte $f0,$09 ; -$10 09 Prone Facing Left + .byte $f6,$03 ; -$0d 06 Down-Left + .byte $f3,$fb ; -$10 -05 Left + .byte $f3,$f0 ; -$0d -10 Up-Left + .byte $fd,$e5 ; -$05 -1b Down (impossible) +.else + .byte $05,$e5 ; $05 -1b Up + .byte $0d,$f0 ; $0d -10 Up-Right + .byte $10,$fb ; $10 -05 Right + .byte $0d,$06 ; $0d 06 Down-Right + .byte $10,$09 ; $10 09 Prone Facing Right + .byte $f0,$09 ; -$10 09 Prone Facing Left + .byte $f3,$06 ; -$0d 06 Down-Left + .byte $f0,$fb ; -$10 -05 Left + .byte $f3,$f0 ; -$0d -10 Up-Left + .byte $fb,$e5 ; -$05 -1b Down (impossible) +.endif ; initial bullet offset - outdoor - jumping (#$18 bytes) ; byte #$01 - x offset from player position @@ -1279,7 +1350,7 @@ player_bullet_routine_indoor_01_ptr_tbl: .addr player_shared_indoor_bullet_routine_01 ; CPU address $ba7c .addr player_bullet_collision_routine ; CPU address $bc1e -; pointer table for M (#42 * #$3 = #$6 bytes) +; pointer table for M (#$2 * #$3 = #$6 bytes) player_bullet_routine_indoor_02_ptr_tbl: .addr inc_player_bullet_routine_far_2 ; CPU address $ba2f .addr player_shared_indoor_bullet_routine_01 ; CPU address $ba7c @@ -1803,7 +1874,7 @@ set_indoor_l_bullet_sprite: @cutoff_found: lda l_bullet_indoor_sprite_code_tbl,y sta PLAYER_BULLET_SPRITE_CODE,x - lda #$40 ; #40 specifies to flip l bullet sprite horizontally + lda #$40 ; #$40 specifies to flip l bullet sprite horizontally cpy #$04 ; see if bullet x position is past midpoint of screen bcc @continue ; if on left half of screen flip l bullet sprite horizontally lda #$00 ; on right half of screen, do not flip l bullet sprite horizontally diff --git a/src/bank7.asm b/src/bank7.asm index f433848..60c5059 100644 --- a/src/bank7.asm +++ b/src/bank7.asm @@ -1,4 +1,4 @@ -; Contra US Disassembly - v1.1 +; Contra US Disassembly - v1.2 ; https://github.com/vermiceli/nes-contra-us ; Bank 7 is the core of the game's programming. Reset, NMI, and IRQ vectors are ; in this bank and is the entry point to the game. Bank 7 is always loaded in @@ -713,34 +713,63 @@ game_routine_00: jsr load_intro_graphics ; load the graphic data (pattern, nametable, and palette) to ppu, as well as palette data to cpu ldy #$00 ; y = #$00 sty KONAMI_CODE_NUM_CORRECT ; initialize konami check to #$0 (see konami_input_check) +.ifdef Probotector + sty HORIZONTAL_SCROLL ; initialize the horizontal scroll offset to #$00 + ldy #$02 + sty DELAY_TIME_HIGH_BYTE ; initialize delay high byte to #$02 (used for various delays) + lda #$b0 ; %1011 0000 (set nametable to $2000) + sta PPUCTRL_SETTINGS ; store PPUCTRL settings for next update of PPUCTRL + jmp inc_routine_index_set_timer ; move to game_routine_01 +.else iny - sty HORIZONTAL_SCROLL ; initialize the horizontal scroll offset to #$1 + sty HORIZONTAL_SCROLL ; initialize the horizontal scroll offset to #$01 iny sty DELAY_TIME_HIGH_BYTE ; initialize delay high byte to #$02 (used for various delays) lda #$b1 ; %1011 0001 (set nametable to $2400) sta PPUCTRL_SETTINGS ; store PPUCTRL settings for next update of PPUCTRL - jmp inc_routine_index_set_timer + jmp inc_routine_index_set_timer ; move to game_routine_01 +.endif ; table for y positions of intro screen cursor ; same table is used for "CONTINUE"/"END" screen during game over player_select_cursor_pos: +.ifdef Probotector + .byte $9a,$aa +.else .byte $a2,$b2 +.endif ; The 2nd game routine game_routine_pointer_table ; run once per frame for multiple frames while scrolling to right until intro screen is shown ; when scrolling complete, plays intro "explosion" sound and loads player select menu game_routine_01: - jsr konami_input_check + jsr konami_input_check ; check if current input is part of Konami code (30-lives code) + ; if completed input successfully, sets KONAMI_CODE_STATUS to #$01 +.ifdef Probotector + ldx GAME_ROUTINE_INIT_FLAG ; see if current game_routine has initialized + bne game_routine_01_scroll_complete ; no scrolling animation is done for Probotector + ; skip to complete if sound has played and routine is 'initialized' + jsr load_intro_palette2_play_intro_sound + lda #$26 ; a = #$26 (game intro tune) + jsr play_sound ; play sound_26 (game intro tune) + inc GAME_ROUTINE_INIT_FLAG ; mark game routine as initialized + rts ; exit +.else lda HORIZONTAL_SCROLL ; load horizontal component of the PPUSCROLL [#$0 - #$ff] beq game_routine_01_scroll_complete ; if scroll complete, show Bill and Lance and play sound inc HORIZONTAL_SCROLL ; add 1 to the horizontal scroll offset bne game_routine_01_exit ; if scrolling animation isn't complete, continue scrolling next frame jsr load_intro_palette2_play_intro_sound ; scrolling complete, load 2nd intro background palette and play explosion sound +.endif ; write the text "PLAY SELECT", "1 PLAYER", player select cursor, etc ; move to next game_routine once timer elapses game_routine_01_scroll_complete: +.ifdef Probotector + lda #$58 ; a = #$58 (x position of cursor in intro) +.else lda #$2c ; a = #$2c (x position of cursor in intro) +.endif sta SPRITE_X_POS ; store x position of cursor for player select (first sprite) lda #$aa ; sprite_aa: player selector cursor (yellow falcon) sta CPU_SPRITE_BUFFER ; store sprite number in CPU buffer @@ -751,10 +780,17 @@ game_routine_01_scroll_complete: sta SPRITE_ATTR ; reset sprite effect for player lda #$ab ; sprite_ab: Bill and Lance's hair and shirt sta CPU_SPRITE_BUFFER+1 ; store next sprite to load +.ifdef Probotector + lda #$80 ; a = #$80 (x position for sprite_ab) + sta SPRITE_X_POS+1 ; store x position for sprite_ab + lda #$5f ; a = #$5f (y position for sprite_ab) + sta SPRITE_Y_POS+1 ; store y position for sprite_ab +.else lda #$b3 ; a = #$b3 (x position for sprite_ab) sta SPRITE_X_POS+1 ; store x position for sprite_ab lda #$77 ; a = #$77 (y position for sprite_ab) sta SPRITE_Y_POS+1 ; store y position for sprite_ab +.endif jsr decrement_delay_timer ; decrease delay and check if it reaches 0 bne game_routine_01_exit ; timer not complete, wait jmp increment_game_routine ; timer delay complete, increase game_routine to game_routine_02 @@ -1052,9 +1088,15 @@ load_intro_palette2_play_intro_sound: lda #$a4 sta INTRO_THEME_DELAY ; set intro theme delay timer to #$a4 (~5 seconds) lda #$04 ; set background palettes for when Bill and Lance on screen (intro_background_palette2) +.ifdef Probotector + jmp load_bank_6_write_text_palette_to_mem ; write the palette data to CPU_GRAPHICS_BUFFER in CPU memory + ; sound already played in game_routine_01 for Probotector + ; so no play_sound call +.else jsr load_bank_6_write_text_palette_to_mem ; write the palette data to CPU_GRAPHICS_BUFFER in CPU memory - lda #$26 ; play intro explosion sound - jmp play_sound + lda #$26 ; a = #$26 (game intro tune) + jmp play_sound ; play sound_26 (game intro tune) +.endif ; delay INTRO_THEME_DELAY on odd frames dec_intro_theme_delay: @@ -2082,11 +2124,11 @@ ending_graphic_data: graphic_data_ptr_tbl: ; reset both PPU nametables to zeros ; bank 7 (not bank 0) - .addr blank_nametables ; $cb36 + .addr blank_nametables ; CPU address $cb36 .byte $00 ; bank 7 not bank 0 ; bank 4 - intro, level title, game over screen pattern table - .addr graphic_data_01 + .addr graphic_data_01 ; CPU address $c953 .byte $04 ; bank where data located ; bank 2 - intro screen nametable @@ -2101,8 +2143,8 @@ graphic_data_ptr_tbl: .addr graphic_data_04 .byte $04 ; bank where data located - ; bank 5 - .addr graphic_data_05 + ; bank 5 - level 1 bridge, mountain, and water tiles + .addr graphic_data_05 ; CPU address $8001 .byte $05 ; bank where data located ; bank 4 - most Base graphics @@ -2158,20 +2200,20 @@ graphic_data_ptr_tbl: .addr graphic_data_12 .byte $04 ; bank where data located - ; bank 4 ; bank where data located - .addr graphic_data_13 + ; bank 4 - player top-half aiming up and aiming straight, also contains the laser sprites + .addr graphic_data_13 ; CPU address $87a1 .byte $04 ; bank where data located - ; bank 5 - .addr graphic_data_14 + ; bank 5 - rotating gun and red turret + .addr graphic_data_14 ; CPU address $a814 .byte $05 ; bank where data located ; bank 6 .addr graphic_data_15 .byte $06 ; bank where data located - ; bank 6 - .addr graphic_data_16 + ; bank 6 - weapon box + .addr graphic_data_16 ; CPU address $b15c .byte $06 ; bank where data located ; bank 5 @@ -2182,12 +2224,12 @@ graphic_data_ptr_tbl: .addr graphic_data_18 .byte $05 ; bank where data located - ; bank 5 - .addr graphic_data_19 + ; bank 5 - player killed sprite tiles: recoil from hit and lying on ground + .addr graphic_data_19 ; CPU address $a31b .byte $05 ; bank where data located - ; bank 5 - .addr graphic_data_1a + ; bank 5 - soldier pattern table tiles + .addr graphic_data_1a ; CPU address $a500 .byte $05 ; bank where data located ; CPU address $c9a2 @@ -3351,12 +3393,12 @@ check_for_pause: lda DEMO_MODE ; #$00 not in demo mode, #$01 demo mode on ora $26 ora PPU_READY ; #$00 when PPU is ready, > #$00 otherwise - bne pause_exit ; if in demo, PPU isn't ready, or $26 > 0, then exit + bne pause_exit_00 ; if in demo, PPU isn't ready, or $26 > 0, then exit lda CONTROLLER_STATE_DIFF ; controller 1 buttons pressed ldy PAUSE_STATE ; #$01 for paused, #$00 for not paused bne @game_paused ; if game paused, jump and #$10 ; keep bits ...x .... (check for start button) - beq pause_exit ; exit if start button isn't pressed + beq pause_exit_00 ; exit if start button isn't pressed lda #$01 ; a = #$01 sta PAUSE_STATE ; #$01 for paused, #$00 for not paused lda #$54 ; a = #$54 (54 = game pausing jingle sound) @@ -3367,12 +3409,20 @@ check_for_pause: @game_paused: jsr draw_player_bullet_sprites ; draw half of the bullets in alternating frames jsr load_bank_2_set_players_paused_sprite_attr ; continue animating player sprite attributes while paused (electrocuted, invincible, etc.) +.ifdef Probotector + jsr pause_exit ; !(HUH) probably cut out code from the Japanese version +.endif lda CONTROLLER_STATE_DIFF ; controller 1 buttons pressed and #$10 ; keep bits ...x .... (check for start button) - beq pause_exit ; exit if start button isn't pressed + beq pause_exit_00 ; exit if start button isn't pressed lda #$00 ; a = #$00 sta PAUSE_STATE ; set game state to not paused +pause_exit_00: +.ifdef Probotector + rts +.endif + pause_exit: rts @@ -3619,8 +3669,13 @@ lvl_alt_collision_and_palette_tbl: .byte $00,$ff,$ff,$16,$17,$18,$17,$11,$12,$13,$16,$00,$01,$22,$21 ; level 2 .byte $07,$ff,$ff,$27,$54,$55,$54,$0b,$25,$26,$27,$00,$01,$22,$07 ; level 3 .byte $00,$ff,$ff,$1e,$1f,$20,$1f,$19,$1a,$1c,$1e,$00,$01,$22,$2b ; level 4 +.ifdef Probotector + .byte $20,$f0,$f0,$42,$42,$42,$42,$3d,$3e,$40,$42,$00,$01,$22,$07 ; level 5 + .byte $0c,$de,$de,$3a,$3b,$3a,$3c,$39,$39,$04,$3a,$00,$01,$22,$07 ; level 6 +.else .byte $20,$f0,$f0,$42,$42,$42,$42,$3d,$3e,$40,$42,$00,$01,$22,$06 ; level 5 .byte $0c,$de,$de,$3a,$3b,$3a,$3c,$39,$39,$04,$3a,$00,$01,$22,$56 ; level 6 +.endif .byte $0e,$f1,$f1,$5a,$5f,$5a,$5b,$45,$46,$59,$5f,$00,$01,$22,$07 ; level 7 .byte $05,$b6,$b6,$4b,$50,$4b,$50,$48,$49,$4a,$4b,$00,$01,$43,$44 ; level 8 .byte $00,$00,$00,$67,$68,$69,$68,$25,$65,$66,$67,$6d,$6c,$22,$64 ; ending animation @@ -3633,14 +3688,24 @@ game_palette_ptr_tbl: ; palettes ($6e * $03 = $14a bytes) ; CPU Address $d227 game_palettes: +.ifdef Probotector + .byte COLOR_WHITE_20 ,COLOR_DARK_GRAY_00 ,COLOR_BLACK_0f + .byte COLOR_PALE_VIOLET_32 ,COLOR_MED_VIOLET_12 ,COLOR_BLACK_0f +.else .byte COLOR_PALE_ORANGE_37 ,COLOR_MED_VIOLET_12 ,COLOR_BLACK_0f .byte COLOR_PALE_RED_36 ,COLOR_MED_RED_16 ,COLOR_BLACK_0f +.endif .byte COLOR_MED_FOREST_GREEN_19 ,COLOR_LT_FOREST_GREEN_29 ,COLOR_DARK_OLIVE_08 .byte COLOR_LT_OLIVE_28 ,COLOR_MED_OLIVE_18 ,COLOR_DARK_OLIVE_08 .byte COLOR_MED_RED_16 ,COLOR_WHITE_30 ,COLOR_LT_GRAY_10 .byte COLOR_MED_BLUE_11 ,COLOR_LT_BLUE_21 ,COLOR_WHITE_30 +.ifdef Probotector + .byte COLOR_PALE_GREEN_3a ,COLOR_MED_BLUE_GREEN_1b ,COLOR_BLACK_0f + .byte COLOR_PALE_RED_36 ,COLOR_MED_RED_16 ,COLOR_BLACK_0f +.else .byte COLOR_MED_RED_16 ,COLOR_WHITE_20 ,COLOR_DARK_GRAY_00 .byte COLOR_WHITE_20 ,COLOR_DARK_GRAY_00 ,COLOR_BLACK_0f +.endif .byte COLOR_MED_BLUE_11 ,COLOR_WHITE_30 ,COLOR_LT_BLUE_21 .byte COLOR_LT_GRAY_10 ,COLOR_DARK_GRAY_00 ,COLOR_DARK_FOREST_GREEN_09 .byte COLOR_DARK_GRAY_00 ,COLOR_DARK_TEAL_0c ,COLOR_WHITE_20 @@ -3666,7 +3731,11 @@ game_palettes: .byte COLOR_WHITE_20 ,COLOR_MED_OLIVE_18 ,COLOR_DARK_RED_06 .byte COLOR_WHITE_20 ,COLOR_MED_OLIVE_18 ,COLOR_MED_RED_16 .byte COLOR_WHITE_20 ,COLOR_MED_OLIVE_18 ,COLOR_LT_RED_26 +.ifdef Probotector + .byte COLOR_WHITE_20 ,COLOR_LT_VIOLET_22 ,COLOR_DARK_TEAL_0c +.else .byte COLOR_WHITE_20 ,COLOR_LT_VIOLET_22 ,COLOR_DARK_VIOLET_02 +.endif .byte COLOR_WHITE_20 ,COLOR_LT_RED_26 ,COLOR_MED_RED_16 .byte COLOR_DARK_BLUE_01 ,COLOR_WHITE_30 ,COLOR_LT_GRAY_10 .byte COLOR_PALE_RED_36 ,COLOR_DARK_RED_06 ,COLOR_DARK_VIOLET_02 @@ -3675,8 +3744,13 @@ game_palettes: .byte COLOR_DARK_PINK_05 ,COLOR_MED_OLIVE_18 ,COLOR_DARK_OLIVE_08 .byte COLOR_PALE_RED_36 ,COLOR_DARK_RED_06 ,COLOR_LT_VIOLET_22 .byte COLOR_PALE_RED_36 ,COLOR_DARK_RED_06 ,COLOR_PALE_VIOLET_32 +.ifdef Probotector + .byte COLOR_PALE_RED_36 ,COLOR_MED_RED_16 ,COLOR_BLACK_0f + .byte COLOR_WHITE_20 ,COLOR_LT_VIOLET_22 ,COLOR_DARK_TEAL_0c +.else .byte COLOR_WHITE_20 ,COLOR_MED_BLUE_GREEN_1b ,COLOR_BLACK_0f .byte COLOR_WHITE_20 ,COLOR_LT_VIOLET_22 ,COLOR_MED_TEAL_1c +.endif .byte COLOR_LT_GRAY_10 ,COLOR_DARK_GRAY_00 ,COLOR_DARK_TEAL_0c .byte COLOR_DARK_GRAY_00 ,COLOR_DARK_RED_06 ,COLOR_WHITE_20 .byte COLOR_PALE_OLIVE_38 ,COLOR_DARK_FOREST_GREEN_09 ,COLOR_DARK_RED_06 @@ -3719,7 +3793,11 @@ game_palettes: .byte COLOR_DARK_GRAY_00 ,COLOR_DARK_GRAY_00 ,COLOR_DARK_GRAY_00 .byte COLOR_MED_PINK_15 ,COLOR_MED_OLIVE_18 ,COLOR_DARK_OLIVE_08 .byte COLOR_PALE_PINK_35 ,COLOR_MED_OLIVE_18 ,COLOR_DARK_OLIVE_08 +.ifdef Probotector + .byte COLOR_PALE_GREEN_3a ,COLOR_MED_BLUE_GREEN_1b ,COLOR_BLACK_0f +.else .byte COLOR_WHITE_20 ,COLOR_MED_VIOLET_12 ,COLOR_MED_ORANGE_17 +.endif .byte COLOR_MED_PINK_15 ,COLOR_MED_BLUE_GREEN_1b ,COLOR_DARK_BLUE_GREEN_0b .byte COLOR_BLACK_0f ,COLOR_MED_BLUE_GREEN_1b ,COLOR_DARK_BLUE_GREEN_0b .byte COLOR_LT_MAGENTA_24 ,COLOR_MED_PURPLE_13 ,COLOR_DARK_PURPLE_03 @@ -3727,7 +3805,11 @@ game_palettes: .byte COLOR_MED_ORANGE_17 ,COLOR_DARK_RED_06 ,COLOR_BLACK_0f .byte COLOR_DARK_RED_06 ,COLOR_WHITE_30 ,COLOR_LT_GRAY_10 .byte COLOR_LT_RED_26 ,COLOR_WHITE_30 ,COLOR_LT_GRAY_10 +.ifdef Probotector + .byte COLOR_WHITE_20 ,COLOR_MED_VIOLET_12 ,COLOR_MED_ORANGE_17 +.else .byte COLOR_DARK_GRAY_00 ,COLOR_DARK_GRAY_00 ,COLOR_DARK_GRAY_00 +.endif .byte COLOR_WHITE_20 ,COLOR_LT_ORANGE_27 ,COLOR_MED_ORANGE_17 .byte COLOR_LT_GRAY_10 ,COLOR_LT_RED_26 ,COLOR_DARK_RED_06 .byte COLOR_LT_GRAY_10 ,COLOR_MED_RED_16 ,COLOR_DARK_ORANGE_07 @@ -3742,7 +3824,11 @@ game_palettes: .byte COLOR_LT_RED_26 ,COLOR_MED_OLIVE_18 ,COLOR_DARK_ORANGE_07 .byte COLOR_MED_RED_16 ,COLOR_MED_OLIVE_18 ,COLOR_DARK_ORANGE_07 .byte COLOR_MED_RED_16 ,COLOR_DARK_GRAY_00 ,COLOR_DARK_GRAY_00 +.ifdef Probotector + .byte COLOR_PALE_BLUE_GREEN_3b ,COLOR_MED_BLUE_GREEN_1b ,COLOR_DARK_BLUE_GREEN_0b +.else .byte COLOR_DARK_BLUE_GREEN_0b ,COLOR_MED_BLUE_GREEN_1b ,COLOR_PALE_BLUE_GREEN_3b +.endif ; executed for indoor and outdoor levels set_frame_scroll_draw_player_bullets: @@ -7976,6 +8062,10 @@ destroy_all_enemies: cmp #$03 ; see if flying capsule (weapon zeppelin) beq @continue ; skip to next enemy when enemy is flying capsule lda ENEMY_HP,x ; load enemy hp +.ifdef Probotector + beq @continue ; !(WHY?) exit if enemy HP is already #$00, not sure of game play changes + ; to have such a change between versions +.endif cmp #$f0 ; f0 = no hit beq @continue ; skip to next enemy when enemy hp is #$f0 jsr set_destroyed_enemy_routine ; regular enemy, set it to use its destroy routine @@ -10561,4 +10651,4 @@ nes_footer_maker_code: ; these are stored at known locations so the NES can point the instruction ; pointer at known locations for triggering interrupts. .segment "VECTORS" - .addr nmi_start, reset_vector, irq + .addr nmi_start, reset_vector, irq \ No newline at end of file diff --git a/src/constants.asm b/src/constants.asm index bffb481..fc3fd82 100644 --- a/src/constants.asm +++ b/src/constants.asm @@ -1,4 +1,4 @@ -; Contra US Disassembly - v1.1 +; Contra US Disassembly - v1.2 ; https://github.com/vermiceli/nes-contra-us ; constants.asm contains the list of constants with meaningful names for the ; memory addresses used by the game. It also contains constants for the various @@ -9,7 +9,7 @@ GAME_MODE = $18 ; 0 for normal, 1 for demo, 3 for intro GAME_ROUTINE_INDEX = $18 ; which part of the game routine to execute (see game_routine_pointer_table) GAME_END_ROUTINE_INDEX = $19 ; which part of the ending sequence to execute (see game_end_routine_tbl) GAME_ROUTINE_INIT_FLAG = $19 ; used to determine if the current game_routine has initialized, used in game_routine_02 and game_routine_03 -FRAME_COUNTER = $1a ; the frame counter loops from #$00 to #$ff increments once per frame +FRAME_COUNTER = $1a ; the frame counter loops from #$00 to #$ff increments once per frame. Also known as the global timer NMI_CHECK = $1b ; set to #$01 at start of nmi and #$00 at end ; used to track if nmi occurred during game loop ; bit 7 is set when inside play_sound, i.e. init_sound_code_vars diff --git a/src/ines_header.asm b/src/ines_header.asm index e31eafe..5bc8ffc 100644 --- a/src/ines_header.asm +++ b/src/ines_header.asm @@ -1,4 +1,4 @@ -; Contra US Disassembly - v1.1 +; Contra US Disassembly - v1.2 ; https://github.com/vermiceli/nes-contra-us .segment "HEADER"