From 7652ec58585c89e5dd33a01eb22a838b55c82891 Mon Sep 17 00:00:00 2001 From: StewBC Date: Tue, 21 Apr 2020 14:02:31 -0700 Subject: [PATCH] Initial Revision Manic Miner for Apple II --- .gitignore | 10 + Makefile | 349 ++++ Makefile-dsk.mk | 21 + README.md | 274 +++ apple2/template.dsk | Bin 0 -> 143360 bytes src/apple2.loader/loader.cfg | 14 + src/apple2.loader/loader.s | 179 ++ src/apple2/audio.inc | 141 ++ src/apple2/defs.inc | 116 ++ src/apple2/game.inc | 849 +++++++++ src/apple2/input.inc | 231 +++ src/apple2/level.inc | 123 ++ src/apple2/logo.hgr | Bin 0 -> 8192 bytes src/apple2/logo.inc | 41 + src/apple2/mminer.asm | 89 + src/apple2/mminer.cfg | 19 + src/apple2/roaudio.inc | 68 + src/apple2/rofont.inc | 971 ++++++++++ src/apple2/rolevels.inc | 578 ++++++ src/apple2/rosprites.inc | 3209 ++++++++++++++++++++++++++++++++++ src/apple2/rosystem.inc | 106 ++ src/apple2/rotext.inc | 60 + src/apple2/rotiles.inc | 563 ++++++ src/apple2/screen.inc | 1117 ++++++++++++ src/apple2/sprite.inc | 384 ++++ src/apple2/text.inc | 332 ++++ src/apple2/tiles.inc | 448 +++++ src/apple2/ui.inc | 425 +++++ src/apple2/variables.inc | 117 ++ src/apple2/willy.inc | 541 ++++++ 30 files changed, 11375 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 Makefile-dsk.mk create mode 100644 README.md create mode 100644 apple2/template.dsk create mode 100644 src/apple2.loader/loader.cfg create mode 100644 src/apple2.loader/loader.s create mode 100644 src/apple2/audio.inc create mode 100644 src/apple2/defs.inc create mode 100644 src/apple2/game.inc create mode 100644 src/apple2/input.inc create mode 100644 src/apple2/level.inc create mode 100644 src/apple2/logo.hgr create mode 100644 src/apple2/logo.inc create mode 100644 src/apple2/mminer.asm create mode 100644 src/apple2/mminer.cfg create mode 100644 src/apple2/roaudio.inc create mode 100644 src/apple2/rofont.inc create mode 100644 src/apple2/rolevels.inc create mode 100644 src/apple2/rosprites.inc create mode 100644 src/apple2/rosystem.inc create mode 100644 src/apple2/rotext.inc create mode 100644 src/apple2/rotiles.inc create mode 100644 src/apple2/screen.inc create mode 100644 src/apple2/sprite.inc create mode 100644 src/apple2/text.inc create mode 100644 src/apple2/tiles.inc create mode 100644 src/apple2/ui.inc create mode 100644 src/apple2/variables.inc create mode 100644 src/apple2/willy.inc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9254ed3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace +/obj/ +/Makefile.options +/mminer.dsk +/mminer.apple2* diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9ad3cd4 --- /dev/null +++ b/Makefile @@ -0,0 +1,349 @@ +############################################################################### +### Generic Makefile for cc65 projects - full version with abstract options ### +### V1.3.0(w) 2010 - 2013 Oliver Schmidt & Patryk "Silver Dream !" Ɓogiewa ### +############################################################################### + +############################################################################### +### In order to override defaults - values can be assigned to the variables ### +############################################################################### + +# Space or comma separated list of cc65 supported target platforms to build for. +# Default: c64 (lowercase!) +TARGETS := apple2 + +# Name of the final, single-file executable. +# Default: name of the current dir with target name appended +PROGRAM := mminer + +# Path(s) to additional libraries required for linking the program +# Use only if you don't want to place copies of the libraries in SRCDIR +# Default: none +LIBS := + +# Custom linker configuration file +# Use only if you don't want to place it in SRCDIR +# Default: none +CONFIG := + +# Additional C compiler flags and options. +# Default: none +CFLAGS = + +# Additional assembler flags and options. +# Default: none +ASFLAGS = + +# Additional linker flags and options. +# Default: none +LDFLAGS = +ifeq ($(PROGRAM),) + NAME := $(notdir $(CURDIR)) +else + NAME := $(PROGRAM) +endif +$(NAME).apple2: LDFLAGS += + +# Path to the directory containing C and ASM sources. +# Default: src +SRCDIR := + +# Path to the directory where object files are to be stored (inside respective target subdirectories). +# Default: obj +OBJDIR := + +# Command used to run the emulator. +# Default: depending on target platform. For default (c64) target: x64 -kernal kernal -VICIIdsize -autoload +EMUCMD := + +# On Windows machines VICE emulators may not be available in the PATH by default. +# In such case, please set the variable below to point to directory containing +# VICE emulators. +#VICE_HOME := "C:\Program Files\WinVICE-2.2-x86\" +VICE_HOME := +#APPLEWIN_HOME := c:\users\swessels\apps\applewin + +# Optional commands used before starting the emulation process, and after finishing it. +# Default: none +# Examples +#PREEMUCMD := osascript -e "tell application \"System Events\" to set isRunning to (name of processes) contains \"X11.bin\"" -e "if isRunning is true then tell application \"X11\" to activate" +#PREEMUCMD := osascript -e "tell application \"X11\" to activate" +#POSTEMUCMD := osascript -e "tell application \"System Events\" to tell process \"X11\" to set visible to false" +#POSTEMUCMD := osascript -e "tell application \"Terminal\" to activate" +#PREEMUCMD := sed "s/^al \([[0-9A-F]\+\)\ \./\1 /g" $(NAME).apple2.lbl > $(APPLEWIN_HOME)\A2_USER1.SYM +POSTEMUCMD := + + +# Options state file name. You should not need to change this, but for those +# rare cases when you feel you really need to name it differently - here you are +STATEFILE := Makefile.options + +################################################################################### +#### DO NOT EDIT BELOW THIS LINE, UNLESS YOU REALLY KNOW WHAT YOU ARE DOING! #### +################################################################################### + +################################################################################### +### Mapping abstract options to the actual compiler, assembler and linker flags ### +### Predefined compiler, assembler and linker flags, used with abstract options ### +### valid for 2.14.x. Consult the documentation of your cc65 version before use ### +################################################################################### + +# Compiler flags used to tell the compiler to optimise for SPEED +define _optspeed_ + CFLAGS += -Oris +endef + +# Compiler flags used to tell the compiler to optimise for SIZE +define _optsize_ + CFLAGS += -Or +endef + +# Compiler and assembler flags for generating listings +define _listing_ + CFLAGS += --listing $$(@:.o=.lst) + ASFLAGS += --listing $$(@:.o=.lst) + REMOVES += $(addsuffix .lst,$(basename $(OBJECTS))) +endef + +# Linker flags for generating map file +define _mapfile_ + LDFLAGS += --mapfile $$@.map + REMOVES += $(PROGRAM).map +endef + +# Linker flags for generating VICE label file +define _labelfile_ + ASFLAGS += --debug-info + LDFLAGS += -Ln $$@.lbl + REMOVES += $(PROGRAM).lbl +endef + +# Linker flags for generating a debug file +define _debugfile_ + LDFLAGS += -Wl --dbgfile,$$@.dbg + REMOVES += $(PROGRAM).dbg +endef + +############################################################################### +### Defaults to be used if nothing defined in the editable sections above ### +############################################################################### + +# Presume the C64 target like the cl65 compile & link utility does. +# Set TARGETS to override. +ifeq ($(TARGETS),) + TARGETS := c64 +endif + +# Presume we're in a project directory so name the program like the current +# directory. Set PROGRAM to override. +ifeq ($(PROGRAM),) + PROGRAM := $(notdir $(CURDIR)) +endif + +# Presume the C and asm source files to be located in the subdirectory 'src'. +# Set SRCDIR to override. +ifeq ($(SRCDIR),) + SRCDIR := src +endif + +# Presume the object and dependency files to be located in the subdirectory +# 'obj' (which will be created). Set OBJDIR to override. +ifeq ($(OBJDIR),) + OBJDIR := obj +endif +TARGETOBJDIR := $(OBJDIR)/$(TARGETS) + +# Default emulator commands and options for particular targets. +# Set EMUCMD to override. +c64_EMUCMD := $(VICE_HOME)x64 -kernal kernal -VICIIdsize -autoload +c128_EMUCMD := $(VICE_HOME)x128 -kernal kernal -VICIIdsize -autoload +vic20_EMUCMD := $(VICE_HOME)xvic -kernal kernal -VICdsize -autoload +pet_EMUCMD := $(VICE_HOME)xpet -Crtcdsize -autoload +plus4_EMUCMD := $(VICE_HOME)xplus4 -TEDdsize -autoload +# So far there is no x16 emulator in VICE (why??) so we have to use xplus4 with -memsize option +c16_EMUCMD := $(VICE_HOME)xplus4 -ramsize 16 -TEDdsize -autoload +cbm510_EMUCMD := $(VICE_HOME)xcbm2 -model 510 -VICIIdsize -autoload +cbm610_EMUCMD := $(VICE_HOME)xcbm2 -model 610 -Crtcdsize -autoload +atari_EMUCMD := atari800 -windowed -xl -pal -nopatchall -run +cx16_EMUCMD := x16emu -run -prg +apple2_EMUCMD := $(APPLEWIN_HOME)\AppleWin.exe -d1 $(CURDIR)\$(NAME).dsk + +ifeq ($(EMUCMD),) + EMUCMD = $($(CC65TARGET)_EMUCMD) +endif + +############################################################################### +### The magic begins ### +############################################################################### + +# The "Native Win32" GNU Make contains quite some workarounds to get along with +# cmd.exe as shell. However it does not provide means to determine that it does +# actually activate those workarounds. Especially $(SHELL) does NOT contain the +# value 'cmd.exe'. So the usual way to determine if cmd.exe is being used is to +# execute the command 'echo' without any parameters. Only cmd.exe will return a +# non-empty string - saying 'ECHO is on/off'. +# +# Many "Native Win32" programs accept '/' as directory delimiter just fine. How- +# ever the internal commands of cmd.exe generally require '\' to be used. +# +# cmd.exe has an internal command 'mkdir' that doesn't understand nor require a +# '-p' to create parent directories as needed. +# +# cmd.exe has an internal command 'del' that reports a syntax error if executed +# without any file so make sure to call it only if there's an actual argument. +ifeq ($(shell echo),) + MKDIR = mkdir -p $1 + RMDIR = rmdir $1 + RMFILES = $(RM) $1 +else + MKDIR = mkdir $(subst /,\,$1) + RMDIR = rmdir $(subst /,\,$1) + RMFILES = $(if $1,del /f $(subst /,\,$1)) +endif +COMMA := , +SPACE := $(N/A) $(N/A) +define NEWLINE + + +endef +# Note: Do not remove any of the two empty lines above ! + +TARGETLIST := $(subst $(COMMA),$(SPACE),$(TARGETS)) + +ifeq ($(words $(TARGETLIST)),1) + +# Set PROGRAM to something like 'myprog.c64'. +override PROGRAM := $(PROGRAM).$(TARGETLIST) + +# Set SOURCES to something like 'src/foo.c src/bar.s'. +# Use of assembler files with names ending differently than .s is deprecated! +SOURCES := $(wildcard $(SRCDIR)/*.c) +SOURCES += $(wildcard $(SRCDIR)/*.s) +SOURCES += $(wildcard $(SRCDIR)/*.asm) +SOURCES += $(wildcard $(SRCDIR)/*.a65) + +# Add to SOURCES something like 'src/c64/me.c src/c64/too.s'. +# Use of assembler files with names ending differently than .s is deprecated! +SOURCES += $(wildcard $(SRCDIR)/$(TARGETLIST)/*.c) +SOURCES += $(wildcard $(SRCDIR)/$(TARGETLIST)/*.s) +SOURCES += $(wildcard $(SRCDIR)/$(TARGETLIST)/*.asm) +SOURCES += $(wildcard $(SRCDIR)/$(TARGETLIST)/*.a65) + +# Set OBJECTS to something like 'obj/c64/foo.o obj/c64/bar.o'. +OBJECTS := $(addsuffix .o,$(basename $(addprefix $(TARGETOBJDIR)/,$(notdir $(SOURCES))))) + +# Set DEPENDS to something like 'obj/c64/foo.d obj/c64/bar.d'. +DEPENDS := $(OBJECTS:.o=.d) + +# Add to LIBS something like 'src/foo.lib src/c64/bar.lib'. +LIBS += $(wildcard $(SRCDIR)/*.lib) +LIBS += $(wildcard $(SRCDIR)/$(TARGETLIST)/*.lib) + +# Add to CONFIG something like 'src/c64/bar.cfg src/foo.cfg'. +CONFIG += $(wildcard $(SRCDIR)/$(TARGETLIST)/*.cfg) +CONFIG += $(wildcard $(SRCDIR)/*.cfg) + +# Select CONFIG file to use. Target specific configs have higher priority. +ifneq ($(word 2,$(CONFIG)),) + CONFIG := $(firstword $(CONFIG)) + $(info Using config file $(CONFIG) for linking) +endif + +.SUFFIXES: +.PHONY: all test clean zap love + +all: $(PROGRAM) + +-include $(DEPENDS) +-include $(STATEFILE) + +# If OPTIONS are given on the command line then save them to STATEFILE +# if (and only if) they have actually changed. But if OPTIONS are not +# given on the command line then load them from STATEFILE. Have object +# files depend on STATEFILE only if it actually exists. +ifeq ($(origin OPTIONS),command line) + ifneq ($(OPTIONS),$(_OPTIONS_)) + ifeq ($(OPTIONS),) + $(info Removing OPTIONS) + $(shell $(RM) $(STATEFILE)) + $(eval $(STATEFILE):) + else + $(info Saving OPTIONS=$(OPTIONS)) + $(shell echo _OPTIONS_=$(OPTIONS) > $(STATEFILE)) + endif + $(eval $(OBJECTS): $(STATEFILE)) + endif +else + ifeq ($(origin _OPTIONS_),file) + $(info Using saved OPTIONS=$(_OPTIONS_)) + OPTIONS = $(_OPTIONS_) + $(eval $(OBJECTS): $(STATEFILE)) + endif +endif + +# Transform the abstract OPTIONS to the actual cc65 options. +$(foreach o,$(subst $(COMMA),$(SPACE),$(OPTIONS)),$(eval $(_$o_))) + +# Strip potential variant suffix from the actual cc65 target. +CC65TARGET := $(firstword $(subst .,$(SPACE),$(TARGETLIST))) + +# The remaining targets. +$(TARGETOBJDIR): + $(call MKDIR,$@) + +vpath %.c $(SRCDIR)/$(TARGETLIST) $(SRCDIR) + +$(TARGETOBJDIR)/%.o: %.c | $(TARGETOBJDIR) + cl65 -t $(CC65TARGET) -c --create-dep $(@:.o=.d) $(CFLAGS) -o $@ $< + +vpath %.s $(SRCDIR)/$(TARGETLIST) $(SRCDIR) + +$(TARGETOBJDIR)/%.o: %.s | $(TARGETOBJDIR) + cl65 -t $(CC65TARGET) -c --create-dep $(@:.o=.d) $(ASFLAGS) -o $@ $< + +vpath %.asm $(SRCDIR)/$(TARGETLIST) $(SRCDIR) + +$(TARGETOBJDIR)/%.o: %.asm | $(TARGETOBJDIR) + cl65 -t $(CC65TARGET) -c --create-dep $(@:.o=.d) $(ASFLAGS) -o $@ $< + +vpath %.a65 $(SRCDIR)/$(TARGETLIST) $(SRCDIR) + +$(TARGETOBJDIR)/%.o: %.a65 | $(TARGETOBJDIR) + cl65 -t $(CC65TARGET) -c --create-dep $(@:.o=.d) $(ASFLAGS) -o $@ $< + +$(PROGRAM): $(CONFIG) $(OBJECTS) $(LIBS) + cl65 -t $(CC65TARGET) $(LDFLAGS) -o $@ $(patsubst %.cfg,-C %.cfg,$^) + +test: $(PROGRAM) + $(PREEMUCMD) + $(EMUCMD) + $(POSTEMUCMD) + +clean: + $(call RMFILES,$(OBJECTS)) + $(call RMFILES,$(DEPENDS)) + $(call RMFILES,$(REMOVES)) + $(call RMFILES,$(PROGRAM)) + +else # $(words $(TARGETLIST)),1 + +all test clean: + $(foreach t,$(TARGETLIST),$(MAKE) TARGETS=$t $@$(NEWLINE)) + +endif # $(words $(TARGETLIST)),1 + +OBJDIRLIST := $(wildcard $(OBJDIR)/*) + +zap: + $(foreach o,$(OBJDIRLIST),-$(call RMFILES,$o/*.o $o/*.d $o/*.lst)$(NEWLINE)) + $(foreach o,$(OBJDIRLIST),-$(call RMDIR,$o)$(NEWLINE)) + -$(call RMDIR,$(OBJDIR)) + -$(call RMFILES,$(basename $(PROGRAM)).* $(STATEFILE)) + +love: + @echo "Not war, eh?" + +################################################################### +### Place your additional targets in the additional Makefiles ### +### in the same directory - their names have to end with ".mk"! ### +################################################################### +-include *.mk diff --git a/Makefile-dsk.mk b/Makefile-dsk.mk new file mode 100644 index 0000000..806e049 --- /dev/null +++ b/Makefile-dsk.mk @@ -0,0 +1,21 @@ +DSK = $(NAME).dsk + +# For this one, see https://applecommander.github.io/ +AC ?= ac.jar + +# Unix or Windows +ifeq ($(shell echo),) + CP = cp $1 +else + CP = copy $(subst /,\,$1) +endif + +REMOVES += $(DSK) + +.PHONY: dsk +dsk: $(DSK) + +$(DSK): $(NAME).apple2 + $(call CP, apple2/template.dsk $@) + java -jar $(AC) -p $@ $(NAME).system sys < $(NAME).apple2.loader + java -jar $(AC) -as $@ $(NAME) bin < $(NAME).apple2 diff --git a/README.md b/README.md new file mode 100644 index 0000000..b0dbec9 --- /dev/null +++ b/README.md @@ -0,0 +1,274 @@ +# Manic Miner + Remake of the ZX Spectrum game for the Apple II. + +1. INTRODUCTION + +This is a game I have always loved, from the moment I saw it in a computer shop +back in the 80's. I once made an okay Commodore 64 version, in C, but this +version is a rewrite from the ground up for the Apple II, in 6502 assembly +language and I am very pleased with the outcome. + +This is my first color program for the Apple II. Another learning experience :) + +2. CURRENT STATUS + +The game is complete. + +There's a pre-built Apple II disk of the project, mminer.dsk under the +releases tab. This can be played directly in emulators. + +3. DIFFERENCES FROM THE ORIGINAL + +There are several differences that all have to do with Apple II hardware +limitations. + +In the Apple II version, the title screen is not the high resolution picture +with the animated piano keyboard. Instead it uses the ZX Spectrum loading +screen, which has the words Manic and Miner bounce up and down. I do use the +hires screen for loading though, so it is just the opposite way ;) + +The reason for not using the high resolution picture is due to a memory +limitation. If I did use some of the ROM memory for RAM, I could probably fix +this, but I didn't want to trash ProDOS and I didn't want to have to reboot the +Apple II when the program is quit. + +The biggest differences have to do with the screen and keys. + +The ZX Spectrum has a 32 column, 8 pixel per column, color display (256 pixels). +The Apple II can only display 20 7-pixel color columns (140 pixels). This means +I cannot fit the level on-screen at any given time. The level does need to +scroll as you play through it. + +I have settled on a 3 zone scrolling method. As Willy enters a zone, the screen +will quickly scroll to the proper "camera position" for the zone Willy is in. +However, if you press the C key, the scrolling method toggles to one where the +game tries to keep Willy more or less in the middle of the screen - so as you +move around the center of the room, the game scrolls the screen all the time. +This method may be better suited to learning a room. + +The scrolling method I use scrolls the game in "game columns" which means 2 +bytes at a time. This is a rather coarse scroll. I did spend a lot of effort +on making run-time duplicates off all instanced data that allowed me to do a +1-byte scroll. Sadly, this turned out to be even worse as the motion became +very jerky a lot more frequently. + +For the curious - if you want to draw a green line on the Apple II, starting at +column 0, for 7 pixels, you need to write the following 2 bytes (bit +representation): %00101010 %01010101. However, if you want that green line +starting at column 1, you need to write the bytes in the other order, i.e. +%01010101 %00101010. To get the speed I need, I have all data to be rendered +stored as instances that I can "blast" to the screen quickly. For a 1-byte +scroll, the whole screen needs to be rendered with the image bytes reversed, so +I needed more memory to make the reverse second set. And then that didn't pay +off :( + +About the keys - The ZX Spectrum version requires keys to be held down to move. +The Apple II doesn't have a concept of keys being held down. You only know when +a key is pressed, not when it's released so you cannot tell what state a key is +in. You can also only detect one key press at a time. + +In order to make the game play with the key limitation, I use the keys as +toggles. If you press P, Willy will start and keep walking, as though you are +keeping the key down. Pressing P again will stop Willy, as though you had let +go of the P key. My Apple IIe does have auto-repeat so actually holding down +the P key has an undesirable effect of stutter-walking. + +I also made the game remember keys so that you can anticipate a key-press (like +you would steer early in Pac Man). This works very well but it can also cause +grief. For example, if you press Jump while in a jump, but you land somewhere +unexpected, you will still jump because of the stored anticipated jump. If, of +course, you are quick enough, just pressing the key again before it activates +would cancel the anticipation. + +All in all, the key and scroll system makes the game fun and playable, I think, +as much as is possible given the limitations. + +4. TECHNICAL DETAILS + +The game is written in 6502 assembly language using the ca65 assembler. The +game uses memory from $0800 to $B52C. + +Below is a CPU cycle profile of 1 game frame in stage 1 after a couple of +seconds of being on the level. The door isn't visible so this renders only the +one enemy and Willy, as well as the level tiles. The auidoPlayNote includes an +artificial delay that's based on the number of tiles rendered. If I didn't have +that, the really empty levels such as SkyLab would play the in-game music way +too fast. However, this does mean that the game experience is smoother with the +music turned off, since there's no artificial delay. + +Hex | Dec | Frame % | Item +--- | --- | --- | --- +18A72 | 100978 | 100% | Total Frame +18 | 24 | 0% | inputGet +E8 | 232 | 0% | willyMove +80 | 128 | 0% | gameAI +5EF3 | 24307 | 24% | screenClear +123 | 291 | 0% | tilesAnimateKeys +47 | 71 | 0% | tilesAnimateConveyor +6EB | 1771 | 2% | screenDrawSprites +C55 | 3157 | 3% | screenDrawWilly +C6FD | 50941 | 50% | screenDrawLevel +DDA | 3546 | 4% | uiUpdate +3A | 58 | 0% | screenDrawSprite (door) +26 | 38 | 0% | screenSwap +51BD | 20925 | 21% | audioPlayNote + +As can be seen, clearing the area where the world will be drawn takes almost 24% +of the frame and drawing the level tiles takes about 50% of the frame! + +5. KEYS + +After the intro music on the title screen, the game has a scrolling ticker that +shows help and keys, but these are the keys: + +* Q or O - Move Willy left +* W or P - Move Willy right +* Space - Jump +* B - Toggle Black and White / Color mode +* C - Toggle scrolling mode +* M - Turn the music on/off +* S - Turn in-game audio on/off +* ESC - Quit level or in UI, return to ProDOS + +The game also supports the cheat mode, as in the original. In game, enter the +cheat code 6031769 and a boot will appear next to the lives at the bottom of the +screen. Cheat mode is now enabled. Press the 6 key to start the cheat. Now +use the keys 12345 to enter the binary value for the level (0 through 19). Key +one sets bit 0, so it's reversed. + +Once the appropriate room has been selected, press 6 again to start playing that +level. Note that the cheat cannot be turned off and also that the Game Win +Sequence (once you beat the last level) is disabled if you cheated. To see +that, you really have to beat all levels! + +Here's a "cheat sheet" for the binary to access a level. If you enter a room +number greater than 20, the room is reset to room 0. + +Cheat Key (binary 0-19 reverse) | 12345 +--- | --- +Central Cavern | 00000 +The Cold Room | 10000 +The Menagerie | 01000 +Abandoned Uranium Workings | 11000 +Eugenes Lair | 00100 +Processing Plant | 10100 +The Vat | 01100 +Miner Willy meets the Kong | 11100 +Wacky Amoebatrons | 00010 +The Endorian Forest | 10010 +Attack of the Mutant Telephones | 01010 +Return of the Alien Kong Beast | 11010 +Ore Refinery | 00110 +Skylab Landing Bay | 10110 +The Bank | 01110 +The Sixteenth Cavern | 11110 +The Warehouse | 00001 +Amoebatrons Revenge | 10001 +Solar Power Generator | 01001 +The Final Barrier | 11001 + +6. THE FILES + +I tried to thoroughly comment all the code. + +There are actually 2 programs in this. The 1st is the game, and it's in +src/apple2. + +* audio.inc - Routines to make the speaker beep +* defs.inc - Constants and definitions used throughout +* game.inc - The in-game logic, AI etc. The bulk of the "game" +* input.inc - User controls for game and editor +* level.inc - Decompress a level and place the keys +* logo.hgr - 8Kb splash screen in HGR format +* logo.inc - File that simply does an incbin on logo.hgr +* mminer.asm - Where the game starts, initial setup, etc. +* mminer.cfg - ca65 configuration file +* roaudio.inc - Frequency and timing data for music and SFX +* rofont.inc - A ZX Spectrum font +* rolevels.inc - Level layout, tile usage, sprite positions, etc. +* rosprites.inc - Sprite definitions +* rosystem.inc - Helper tables (multiplication, color masks, etc.) +* rotext.inc - All text used in the game +* rotiles.inc - Background tile definitions +* screen.inc - Code related to drawing tiles, sprites, etc. +* sprite.inc - Code for making instances of sprites, coloring them, etc. +* text.inc - In game text and print functions +* ui.inc - User facing screens (title, scroller) +* variables.inc - All variables (scores, instance buffers, positions, etc.) +* Willy.inc - All logic relating to the movement of the main character, Willy + +The second is the ProDos loader that will auto-load the game. It's in the +src/apple2.loader folder. It has these files (all provided to me by Oliver +Schmidt) + +* loader.cfg - ca65 configuration file +* loader.s - file to load and start the game + +7. BUILDING THE GAME + +Making the game has a few steps. Use make and the Makefile on all OSs, that +would be the easiest. + +Start by making the loader - this needs to be done once only. +make TARGETS=apple2.loader + +Next, make the game with: +make + +The next step is to make a bootable disk image. For this, you will need 3rd +party software. I use AppleCommander. This software will put the loader and +game into the disk image. You will need to install Java to use AppleCommander. + +The apple2/template.dsk is a "blank ProDos floppy" that has the loader and the +game placed on it by AppleCommander. + +To make the disc image, set an environment variable to point at apple commander +(see notes) and then use the command: +make dsk + +This will make a disc named mminer.dsk which can be loaded up in an emulator. + +If you want to edit the code and get into some iterative development/testing, +you can edit the Makefile. Look for, and change, apple2_EMUCMD. It is +currently configured to work with AppleWin and the path to AppleWin is expected +to be in an environment variable called APPLEWIN_HOME. Edit variables as +necessary. + +If you use AppleWin and you have sed installed, you can also uncomment the +PREEMUCMD := sed... command which will copy the game symbols to the emulator for +use. + +Once done, you can build and play the game with the command: make dsk test + +NOTES: +1) Find AppleCommander here (I used Version 1.6.0): +https://github.com/AppleCommander/AppleCommander/releases +2) Set the environment variable (or change the Makefile-dsk.md) to point at the +apple commander jar file. Here's how it's done for different shell's: + Powershell: + $env:AC = "path to apple commander.jar" + cmd.exe + set AC="path to apple commander.jar" + bash (Unix or MacOS terminal): + export AC="path to apple commander.jar" + +8. CREDITS + +* Matthew Smith and BUG-BYTE for creating and publishing the game in + 1983. Matthew later re-released the game with minor tweaks under the + Software Projects banner. This is not that version. +* A special call-out to Oliver Schmidt who provided me with invaluable + advice and support. +* Bill Buckels for Bmb2HDR which I used to make the logo HGR from my + GIMP exported BMP. +* Everyone involved in the Apple II projects (AppleWin | AppleCommander). +* Everyone involved in making the cc65 tools, it's very good. + +9. CONTACT + +Feel free to contact me at swessels@email.com if you have thoughts or +suggestions. + +Thank you +Stefan Wessels +21 April 2020 - Initial Revision diff --git a/apple2/template.dsk b/apple2/template.dsk new file mode 100644 index 0000000000000000000000000000000000000000..a6b5adbc0b919c3b15ae755a5c9823085d78c4a2 GIT binary patch literal 143360 zcmeFad3+Psxi>!2$hIWgST+U(0Wx8=fFw@HqOh7>Hev}7wrolp8kqp0Ep18K-Z-g6 zRmbDVZPM5z3W`9kNAZ|(5)y=^k%2%Zmu0{#c4D>!92>A1_I>nzj|6FMf4%P?@4cVT z`@8S0Vx%)?KhN`==X{^%oHJ3G1={-XM{6cUX>EyVWdT0A21mXpR&2?M)LEoaLN|_P zDQ(+WU%rKV+G2C$IV_$Z*I6px(M1~0NLRec!G5~XAYJ7JU1+$@{kp!<(8cK-`P>>0 z6}>Jz=&%&qiVKRZ#WRbiMT#dzil=gEju#x$nJk@PZ+ij%P4!KUCcDn@R9d0dm(_=QOE4AN3B($a>RZ8J%hI;&$^W`Xpbm13+~ojx@!y<3JM zGpl=ckDk4Zz5CqLw_pEznfnF|95i?c^{>zW`xH>c{Jhk_Y$dMNx_GZ-=IYOfISp5>Gjx8x-*a%!)@{3Xcn<9K?Ap8aOOLdF@0WX< zJV^1)HPOS8hWkTB4crKCW}|ewLnU3U8gBDVHKjx~CR(e{8Ri)4n^xePy0oCcF+uNm z(l^C1v}$j-Z@9!W7In3%c0T+!_EKug#Z6Z53FU3^)1HgWVXuk*;Afq zRJw4EaBH*Y$|tp-)qZlZ^TgS+p1RF^Tx?9^kdcvm=qce%nP`4-Y_= z+D~sDPnM>0)-S?VI&7PG*qV0Sdhi&v{^%&Ay5%saz*iA>f}#}ci@anGP;Z|bHo?&4UZ;hI+! z>ZILoB6!s|Q63i62>tSD$3$7XVVcz4H#Ikdqu5TGQ?p&Pd9yWpJ2zBPbHm|3;wYom z;!O<|$KD--diXbEBWyNg<$o7LUVDy>O=|E^bz{mW){QIAb4r(4O#}B;ye{j=f28N% z31sn2VdsbKjwyDF$sidq%=~6q4UV&6c0rg6Te#U4PGjM2ShxumkcdAVv+##v7HcH- z!VT6L=I4hUQ~0+U$lrpnwJBWsUbu8^*v7sWX7O{A{#)$*Sapb^Ofl+=?iuQBfjVI< zOr_qgrcPA6{RwrVkfPr9Qzt(D*nBg`wqEtSl=bT0Y3+797o*HC|Gl68sgS2KK;2(S z#heW>>9UtvGp2FPIPa5d#N=qpoH8W^9M>BcDUEkU4_A29s-dxOVt1@iJynp8VqZ-~DQbWscVm>z6i+qz~(de~I+FzyI-2wX2Ocx8=TNv0S34O9twa z>Y+=j5!GL2aLRU(U5okNmtd>m3yOL{u`)EOMz9le+Ia@^A> zFE6Ve9;q|1+;BgB-2UO14H!KMfAWLy77}KPht*aOKTgZtn6_ce+rz8}O;{oO4ri_n zv*r&&Do1VTC8t%FXGf%)Z9R7Ok}hxPDQn5|mpxtAksW!Ev%Z4 zsnQ5v){bl!Ee*15=v84{(%sP=-#r{XNO5OfR(W=XbZuvko!xi#GRQU$w0eA!vLN|fTcsh)-KxwCTPK*9 zP>!HAds6BQlFDdXV<^tV;0)0u;b(+}j%@PPgM9TQU%hglEs=jrLRk)D#AsmhinP8= zQ;NPCl{3E@nzPiPX-5-f4~6yoFNdHV7hTDO`Ckn|YY5&KwlSaN_%hjF4M8&dlN@6q z&3>DMboOKp`%(_+qhk`8yN=0@sc=Ob98(yI^4zR5nAEcFd*b~g&E-K+HKRer(H&B6 zLhkGYBhsT9ZW}13$>DZ5GOgE#c$7K=ann1pYckmH=07a4>Sv@*6vSxZQTx5#L zJ@y%-%y#KI;jTY)YiN39n5~4;l(b9^wUAyphEi*^ng&+gK)`}7*OBH+HFqRAQU&!+ zz0tMn$Y*ic;NmtkgEOG#%Kn zd(n+WvBlO!G5k?^)R}N%VYXqSq!BD;mWLnTDi1v_$pg8f~|GdMp>Ni!%(>X=DM+*2fUjAN40tVO8N@F>>>(81E+UmA9= zu(uTLlDc)H()7EjG%0B}rIl#2pfa+gt9L&18(It^8KAVQ;}SNhGUGc@2C@_7FbF;H z=Npvm zD_Fis=MR+Y+|?& z>RAY8GsVpIuHdhAcvHRUqT2SMvie?o!Z)?14Bm#lA%ghWu?zQi0;+{ zQSjE&)^YZf9^A&~M{H^XpR}Fm7CvP=R7+nzb$e7L_2ARC$2ChDUlBGu!r#~)9UKj;91N&41#A~%i-)*&K_iBxlQZO?fVCNBaA*Y~(>9&-FADtTdjyDXHGvoTq>x^3> zoGJ~mZw`=?&}|!G*A9B1VCCOXn=<4ng(}Dp_aOU*8VNg71_~qnYqC9R2xJd7ePC&~ zfn^y3ky4}|DD?Kwb=iJrX11JGmtF1aVJuWfvt5U+l$HfOV4C*}EM+Qdh-sdycv1sb z2ULEZ9DmrqW8cB({vA!8<0BewYGEopo-fo4~NW27H&P0x|PvxHF`Ckv;d_xr8q|E^-D(SUsb8i9m2b#oKDQ+w(5eV zOP3~%VO?RZ>E2gAKI~E#(&mm7;Z|YFsnLSEFr_-M`EbrKwmj?`%l;|s8^``JY)2Dr zbCQj^cl6@b?`>+jkUjFrtX@5PWM_AW{C$%PtCp=eY}yOMmH=6fqAd7$>2!iozhU@_ z!$`5)NlmEI9(@s5=*6OIXv5wI9kKTzh(n+53gh7cMB2?aZB#-2jDiV^rcaqOXVH)u z`O~KmQU9l((skjoOJVkMxY_7c?C(ze?ej<6AByeLrLv5$M^%?ckcRQ6d8T{)b$LgA zbzAyXq%O~be~t-uN1lfYy?0ygzb{XEG4!k3dP5&!KtXhgtT)ljrK8qYk7_8`)=Y93 z!Gc1SVB1S$a2IlM!xERcKewd_QdW^X{;P{~%0oV(o|Fnss=(6t;T8 zTn?iPb1E2{8m9TEu+x*IU0s(~IgxTo*Q%zhnbqFzn=Gr^A@72g`TD3p=NN6Ih;Ncf zc1%M5{UJk`-KT^y!|Z-#**?WFu|OE%r9=M~mU=4euN8isV($Dk3Ar+&Y9W>PC@tB| z(D7qB11ZfiJX5YT>xxd#no6pfn`E{jk}XjJ+GbOpoWzXn5(;b9D1q!|I44k5=^jOTHjvirm>NiLwm#fRN*AH@>@HzAa>0lgjFJUfE+t2Lj`>k% zBThD)>J&0ivu|o;w`Sk8%8X{$2pf_}{8f^Pl) zv%OO|K(e6erFXOC`K7U(YG*#G?5%CC)HW9sFn#*A$fLx*E$tjpUB! zVcm-H)jlok`%2)RmO_gCK;a++0EiZTtpY{Czppr^@*gOUY5c6y%wNv7sjn-kuZ85^)K`_%S6oqgr2;~9eWpls z*Cs-y#bz6+5e}=;3MD{&CH09&*Sac{uJ`ctwUkDl-cy*%r(H*ErGHlV_Z0RwN`?M` z-zazg`OSQVA}1lYK%;_T0^Kg%C~(~_`?XSAp-4$+SEkX4yNweLWVdvvDzjSzt=OZb zv81v`i;@4eQu7%zT zD>gc%i$=R2LxdL5>;SsfpK~-JKlPPWShe&HRykaLLl5=Nc&}6io?GdEJ2WKiJ9K(=ITiIH57Aqmfg4DaL(9*vb?`d@x3{OmmZM z+*BKL?|1SN*pC)qKS^r$WI~@#jj*#6qF3433hB?i{NPr$RN;rTvaG^qw|Xh_Fqf)b zFWoqvBx|?=%=M?+tm{s}BYID(dmL7Pt3(83A=Rr14QX|cA~8088rF$21!{3FG(7vH z;+w|Kfs7%ZEmOEwoS@SW6J1yO95SLYm_4(t)U$U^++HE zmM=MUl4bYCAsi2#XE#{e%ybDfa zFYOr=a)rw+;QLjk@{G{OGq}zY*)i2IRZ6b2?3gBRB18ZMTs1asj@iajt?8;(=@JpL z$A2#~4^QcRgD$dfE6fO?}1_qh&{g%R%x4CS5snYqD;?hZm-K-)HmUMeq#h~Gy zG~2)t(g-Snc}KU(XKLwI@YuE8Mre1>_wkt^HBYyK)_{a_mE-cG-u|I^id)l)Vdv+v znpW8N*KWJBTSM1xyBWlu_o~a5DxoJ8_fV1tbY+LNGKHsw$Jr%H=}#c4#nTAAa=I); z2jwfwFHQ>gSSOxI47zr%Vr-Ok%cm-?Yi;?$MTf;k=$#4x;tIQe0c~@Y|Cy5h7lr+q z!q1Gai%%-Ga}*+=2f-YW(;1kjfG=>Z&r)_wl~VZG3fN&Fjed%#TF50bS9??ei&8nb z6?EsPDC~e%l3^ZUkDM>dFYu;T445C*%1%}Ip{=z!ggzQB-;C`yi*K3*LxM+cn%yzA zL^#f>TT4MeRB+I%-ZaG>`#Pj*eRoQubg{&(h88-~F2#l93x2dxJBGAhJNAy$#z#9& zaa~P}*3-St^6K&1<(5cAzEQeJsw}ha`o>F@xT!l8!JCs;`Jz&indf&lq(~P^q&w7E zMyOMl2NxLJqnreR??)YmsNfK&5y}Y4<}gGE+UyD}p*#=}$drANd{?ee8j__e{Po-H zN`=31oBb)__e%=M#lEV5fb44ukBUlnDW$tf0h0`UA*XN#b{FB|ZiN|rOSr#gm*Om+ zDcyw1A^N62^iGKd8V7lq8Q<_Vim}juG`qji@Eyb-nr5_@;?#s34xq_us2eHS9bZ-} z1m=4Ul*W{|3z^)45!Fhr9yy`;xd&YRElk5V_DK26=mNQ5nZoppzy16vbbjg4mjC>Km_H9K@vA+5( zHyyKgw30qXkzD#3XbvlLHiq&uPa%JvG>#BP%9o^(HMO7x|6aJ--1$c(+TeP}&s>ZV zA%zXNL}A}i_@5~3yJRhJQ->q%(iJQTs2eaRPE*HBVkykx@<3BU&Ql%=mHA~&eymVk zK2z?AHQ{jiOp`2WxCgNyO6MZngJdMc@{pg7>VyTB4vN@Z>>8!o-a<7?69TEt%$1w9 zk|GaXGrhfiO@2Vt3~umy6-R*s%a5U@Mb#`D;w$udPS2!;xm0`+(w`|Ki#SK!f$>b$ zc@HH-x46`W$?TU&F2xUYX}6bv(#LM=*(${}-XHqnHnAKw--hMDG3;LyR}wSlxX`Ox z6$$)J~f+Ce0dGIs|Y>@wI!%)b) zk^8v+E$pnzbN@D6Qs6AlGuqnQkEg<&HW)V7T#PBsj?3_=(zpH#Sl3=+SoR8vjNZ7$0m#4P! zUmRnvrC6o#U8{CkQFz&#;bq0)WoyEIIBxkT8~7NYK*IMruffxuV=5m`s(d&(FjT4h z1U`{-C8i8rr|Stu+X;k4RYOBznuP5{mcUOtg&Y`S zFd-rluR4&`?0!=TeW+AsHDm3RjlKeh6^55dwPdlI|ZhzOfg)_t;Tj7p0cov15&OfC)Oi4uCC#%*owp9c5eaG)G25y z4a6wSY_@qViRU{;qK#NgOlp^K1ugrg!k8MtsVrPtI+;RVi(_Jdf)$EMBI%+O2%QE( zV-7i{X;*Ke9FsSx98*Y_eyK8K6eM(OGt5C zN^ndi?Ua!x<}WveK}_8V{+%!@DK_YnYMFsxzY=z@2t&2BOGl{HSZ=2pWtI+@?$H#qT*g_f)q&$w> z=NOBvoH1V7iOuwJ*aO6InDICpk?^IL;XuFzI#AS7J}v?{Y+x_a`9Ag%ZKVue+BcCM zc3VpGoGqU0IaE9a)lH4klG-Z_stG7^vQz3?vl*sKC3Pes-9VJ2!*eCoiYII385>`x z)PAB^v8;Wfz^tfKEX;QuKnlPMLO%dOwoc)xBkU&%B)R;ing3MjFtDF0SnRPFB;ZA9 zIo65Rs7j=cNNQIq$_x6Ma=^Nq5$RjwUF2coo3P~gC(l!5xwJVL(Byt%2czyGPT+7n+^s;|Iatu{Gk!*PYwMA@CHDhc&F4yldGV%jg+!mnliULhIi`|!zCk+)9G+@pa&HRz zNso5de4#{O6r;>GQYM7wAC#&6zKp>}M$<+Lnov+-|9}y7U?s6g_mf#w1eGw8Xs85c z=uOsnFc<6mCvm_egFwl`%Vh3?!QLbc@>3WzH*hW_pma4UO!AFAO^VPBg2LA+gv&H^ z0@>}Hr|c#Gc~8Ew$D%N6t^+3f?Qr)*Rm35|f2O>e-2!(7ze#zuM+>|akjB0(HrMAc z#4N;nG7(*YSqQ)#Hw#C?48uY;q!lWabQs8;47@LpepChU4t{k$zq%%>DnWRmD-KAnvV&_F)#mEsU|T7 ztfwKWmDt08pslio%QMGqpS$SmJXThqDWL;;j+-rfLkOD(1veA83)l*_rK|-VVJu3W zqyt;gfJhy#c$GR#8gRobO6WV2?C%{%yvHS+fLWr{{v;0d%M%^a9cTV}O(?cHPI@UA zFp2J7!F(mFdcUyfp(aFuz~b$M`Cfh29NODARaCic9mj*vxWURELvoINwLF` z!`g|s5PgjrJeh$Wis^Mf3@sc0YM=!<-jBijyWxE1eh`O1D^I%E15QTtfmnsKaNcAD zWkE7x9>_FCY5m1XSeUM{z^Fz-w(h{LaTdK!It4$BhKMC`9Ua!mgfxZNsfMo$fGEXH zwE&=EhdjY+*dDnWM8qLvRlyn}5qB2zBOfZRUXlh&Inf?oDzUOh+KO{ zpE3IdmUsv~@w2j@D=WTG_{~Z>RA)b^4s(YJ>6}_f-}AX*(1L`YlLE+2L@%uwa|(`N z%qgUNrm&mHywO_Bi3aPG%CzQyvHA9AN~N(m(q3XxNvENs2sM!d>mP9guepx!T>$c- zl3$d-ALp6tXIv?Mdrpa2Yhg}ZX1=)e{Ugp|C0wOF?z&3!kucn%#v8=mOQ3*6fDeC7lf&sDuMV){~hz~Md6#fLq`{0C!VS+9*q}r?Ea8ET=l9$uPcO)Ns_VAaPf{K7|A`F z8=Vbm;j;D8b2as-(?(LciV)<4E8SXr8Qt2b5c}g|f+)v8+T0Z8 zPnS(A{SUay;h(5#rYsS8@oA_aOMa3y3)mJZ;Qd=Pk_U^Ne!dZc-ENE#(o}8x6dd zz8j>nz9Ykign*vHlmnndJ1O#u*y}HlZk5J0CRSDnO+rdf1 z0=6AT~XXj_<8Go&?bGp0Bkn}R z1>&?^XT5)eGGo0W?f566u~OAeq{CQoS0-|7uz6qgdX>kP9BtJUu52q zu^VPJOMRFzolKujXrPdxxx4_#!O)ET8k~l}u{l;I7?0hhuph;}IJ*_r8`qUOu#hZK zcbo}CR#IT}P)1^ReW<|n`t2^o{cEKpUo8`j-VRQ-V5=uNp~7uU_5~;d@HX@&vCxnc zOzuQ1({!H6mRFt-&VvF4@)@>DAxz1WPOv`3H`7tzn}uu27|D-;#|eG$hbcm42_Y-E zl&>n-Q>94hjO9H4k&+HNPL?(ZyT0ciaUQqjXIhMs234Ag^(fTBGVv+$U$m=1t|_Agf5^MO%t9NKo*A@R?D@0_w}LTcUwiYj{J%_R+6 zw{8D&$Iib-qK$vswR_KAO4_$yjT^~o+)JiuN|T~er|8ux6-{e2DwSFtQ>)dxzBzwQ zxcchV9#?OkxPAPo6DzvttKM^cFZ8;!=2GjKoo7D0eE!NWZ@qNO^O1LbaZ+-MGrwT^ zi2G;Gn*HRQxhe{0dVWDs+lQv37a8#za9XM;k1=R9YE@dgu{Z9)_cz?j6#eNPatoeZ ziDz(DJ*1j``;U{O=U|;Vml1G;H{Y`yY5P_o0VJKJw^ekDH$uHTu8P z5dO1$<$Id8MGrK!cs$!$b|ekj)}m(`Yq#y+yZ3KR83U!-ojdmLkM77CxPQligZuYv zY1*-C$Myrg(swj%-?DA%_P_Nq9@x6AX8o2uI}Upe?cLQYr|I*WFYC5Y$s4zAZHhMC zIr^uj-cXYhf~l0|M)EDqr!h}-+tvd-|DWyqe?@s|!y?~8N#BqyB{$}7x4vOGt{1L! zWC))*U3FFStsU7 zZf4n3IM%1maM(D{m$rzIT(?+PH2C@QoQ6!Plgn7L*s&NxeY*X4w(Iw6OibGCC@Z~& zk~?o_2~Ssp0xuQ6=4ICWI%+dz2=|vi)3(aVyp!e3&8ppE;I_MyXip5!J6Aak<2)I4 z&r~Ke*uTOV9UM@sUb4Wkz+d-_yGV__?5lciqx%gUmO=Ik`3Q65=7t4zKX=M0e#5om z1-UdLtV;}4&qd#r9&g70pOO0>*Snr-Tja^BTex#kwOrs^xM5LY1}-5u78WnE{?3qp zZJ2+``~r!FPmY&+n5eMETS+9D{;7tqOUDPODX9nDA8|=yEJ}S@I^n$yH=3*zG!^!8x zj%R#NJD%mnJD$g8@#5Tjq!f>#d~vm$LY6h+v;0MOKA{h{OgEP?qXWbfC2U`-j7DhtpP_9zp_c{u;GXooC-w^p*I^s#SNh~xDz-LSjOO+S~aa~ev_=jgozqmz!OH> zKi3xK5Ze$cYcSB(V+VPv$uSDsF>g2YD{b&-PFw62JM-N^r*w@w$g~~g{N#(rSA}Q3 zgi|<8i(>o9Agji?QAufoQ##`t<)IdVaPh%=ZHahLG9q>OM$2=2kMD@{PkE1TdsLN`6PN?*p* zO6q#KNuHk=;z8-$-^uNv6On(GzFQ5vy{swzIE;Nc5xD>5rpo0_GnO?u4c}HvJra43 zN@?F$0Jn?TR-!A#nEtG$sP_O0*8-cq4`}FCtEmrFYHA&=rm83v^%u2@`dFo+YG@V3 zn^ctgbDC0rL8;XN;L|O@sr9s49i&w1kXoe{0bIkh zO8qyAR_|8R>OCr2y_crdz`?3RYD#q&i%|I_Y*&f@-lr<$U>R1|%VrsxZln!c!3)0b3g`ZBGiuTU!b zs#--~2YkLktLU2)P2W<}^lhMNg{J9PeD)6meXLg{J^M-%Gk725C$y-EUEIXK(gZ_6->!KoXDEFxCv+Ce%7>mag%HX*78$wl)oH(?iBU2SH5zc29fCZf20+GIp!f!~k^a90Z9*NAG!)#!0VnN^LmQJPpx zn-()<8-dFkVzIsq?14c!BXS>!#mr;!CR?nr+4B}YV|&p~F^1fu{xjqSM$2L=SFOhH zZ(^~c;+V74^-jeH9!jf8i*2Z`i3y)=4mNxliN$tF2bx=t$4<7Nl`mbp)y#;8pd?P8 zW~4*H5Kof+f%#2N>AK#f*2QlbSs1fq7j$h?3e^bhoWd_`vf)|*9Au?So7e?S(7-Dl zhCP_HqF>4CI5Jywbv^s&Pz3ldI33!Y0EdZs?w+P0}b3%Azkc#FM3NHLo=7 z0xL2|Y=xd_I$%e&t_Z)PY4?IA>94+t1+FaSc9Rg|D9Ow&M1>*T8)vA4t}br4)QLx^ zsxgjn@;!V5?HKDA&xdL9%x|R~lN=M`PNKZF@of`q%tJJ@U2Q!|b7|~WnmMJeF2@!e zC}oRk0LoINZqW?aS6=LOMW1ygbJADH(?nv{F`k3BhHk zr9xIaD~!vx(t4)hhgA#Rna5~PMqnFVK8Ap%c)R#UtAJ7yE4R^zMOW_VBf|T?f0T=J zCd`PNb~N>RVq?&5pmA%#iupltlgYJPaxK?LuJBS6Z)~vO(gG~qiS7`Mb946xY3Yfo zsa!W^B<-OC`{_zeH-I!wVfWD$o^GUZ=|<@`+LIDEL{|5 zEa;=jaFCVK)`_$q{niRIOQL%Pjm{t?v%hN~f5_QDTWZ5JIkBI{Hqe+);W%Y~cvBeX z_rtUusX2meIvxicXUzk=Dm`>j*;r9OY}hbU3Oh#hZpEg2Wkw|8Te@$YkWx2p`8W0D<7~`* z9-+{;+Flg`jPb4Ppzy|u<>XDw~B4AKQ)#;TaO+7cq7Io zg^uNXyp<(O9V>i=jxo#I>K!lpmO92R|E}J#jPF48{ONkfXy*C#d}qCJ$tcGwzR`u0 zW2M=*s*?n~2xe4*OgEfP6$F(9W# zaLn1$T`bg~6Ej3yc3H)KLAtiNp1&#XSS3HqNcyUhWi~8CbqCDV8SH0B7 zw~Cp+o>}KLBep{mFJs0gTzS5gj?tZ)>Y*4``d)F20(*acY7`NIRi{Qn z0ziA*hew74twF3W>dB*Hm9bF6ep?Snh2aYp-zp*pg-|eeYcZdCB~i^vQVnE7gDQ+m zRykIIXZ*MIp!Wz1p|IY!3N)6J;d6we)y_smcUL_$V?+#Hsb~Kxa{HN;qR<95-~33J zYU!ZCFOrLty$}2#9r>c3u*twj#RQ)aDAc&VYLwa$B0Np^YVW3ePfX3p@$!9lX?YT~ zJPv>SxZPjXyP9`@U5`Ts!H-;fU`7$5UWY$Eo|H5_Pb&< zwrzBybiua!aJ?&~^KiX!IkJs*){S$Fa+-awoFC_SB~m^vJ~LM$;6#e7t0waF3gpSi zAE`gJ(gqG}s%I<}R(UN>B^HQsHrpbWekF2$1A)nLg#yuz3!-s`-siKk$Lf7Au}8@S zX|Bf%Z>jgKWKR&z9It2o;2}Qmqj%y-4kR9{H=kM&O>y-BkC1ysAw}X>omyF_+TBtw z#3NUs3g6FBh2s@szwjsO9ndH2SM|vJH7TQFkJS4LJCYsad`lry<9#oKbo^KKyN}ho z#&x#Tvxm`C=U4Th0y$GjC_?jxNwSc{AFGeo#Z-P&wT!vx5mK3lK0;a4?E08Xv&AQq zL^(#XR*_%6nKg_2ip}g3qSOy3$VN)Na4>(Qlv!cj|6%C_5jz+YL?>6^xKLqbnmNjG zv_krnq1NK!T<7hoU-*8>4C>@OM9;Hp&DO>bxo>fHa6P+ZU4>Lit!KxHW#h%tJkiFF z6KltdH3*eW6k(vfu({GKViQOsU9we+Z){;cTUR?>EXxcs8`p8aXX@5r|6QfVZ~NKI zpz9LHT03uJN|#O-nM3QOBz)-%)qy{6kyC4?i_mjj(?#i&E%f;oAxlms{tvUQ9Z&3Z zv0duGtqHO_;ZaH58I8v^u-a~4xemSBFj7u)$~vcA5%jbV+LA{zQ*_0jAYDd)mpw!t?t z8sk{k2h6o~>=cn>rI8kXvY0+qG-!Pzb((0gJlKx>{dSC$dZQKSVcffl=Ov`=!K8_3 z6CJXnGJ3aF1g9i$#nu*(G;N#ZYu?zJkyY2$j+h|k{v1pP~ zdj=6pj^X-4i-T-dF!Xeg?H+_OF{%7~L^OBx40dJ(g=>xSWoE)BE<+TKvS^aDZO<$b zZ;5L9fZ4yndietkl(sH>9}-ZWgJ!3SwY`F&UO{(Eh5HZ)bF7V5>e)jgjuJJC+&Od% z*}f9l!=equi55$}2yLc|>|_ztL`=KB{5O&#kQ1N*Y&MI`8kWxtFpBM2^dsqxnY9jU+bUfiA z|FtOhG%i0Z`a?05>2(~?*76HP>?NrhITkW!w4w6Li4wEe%pkXy)b|SzIz1{%_k%jK zL}quL@Z-Bo;j@D7#X-J%(EW6f$*GI4{u~P$K#R^2<#D;)y%bm>w*eY>4VYox+0s{d zVe-9*1cmQXlRYYOyGT=6m>fbnQgA#Hak~+h#XAsR9$OqTyo&Jh|hoK=NAakA&0%z5*BS)3l@#Q44|zqyGKkWzdb*| zqLe#`5MBN&GGpi<17o-ybxNs-6=k|aKFv9;?Ar32`15GOl1#899nJF-Md=CLewQC% z%G}Jd4}`&J!KG;g-Qh>2)Fn8!gB~1QJ7TVAXtj|{mJeK4nN6QSMlF0U0g4Y1p!l%p zF!Lit#}jsV{4q}76T2T5A+zh(`X1l?s3`wZdT#fUbrMrXQ~*s>z=K2+G)tfkvhz#U zLChe7cP6S4lQ!EoNJ`?3!RUC76;fOD&gZzmu@>JG>`2jP zW*-)PkFyVnzQ@>H(Qe@%Azgfwbn!9L#mD1aBnx>mMrz&oKB*AYVx_)##)u)}7;A2- zkO?|+PA>(2Gf2;_#ln>#I*x*3QI(d<0E7RJ5&!=y1;s@-DA7ubJVQu(A4pr9%(O!n z9bj|=^vTRWj#Kr>0M&z(dS(2b2^8Lrap(1RWW#H_=lgs0TlaXjO46jJIfb ze(?Es1?p-)|2}E^Ua4h&^skWvcZ%M5o7yM;*oFVfXKYniTp8HdH;9#th_fYP<$Yo# z(r%Z&wwWV;3R%ew{f!)FBXRtZB8cmK00%pEv4p$*O5LaaLU*A{w4Z3#UM-5ec*)3l7S zii;=N5n&|9YxP>RodXBH6ICGDS=%j$gVLeli5kv!3rZI`9<@~_shwyFOZM0*W8sS^ z6~W8AGMM32c%2vizW{gc%8+)s4fwW|r3P7jka@a_PY>z@63^>{>8Zi=v>-NTyhbb` z=|Sd{|AF+N8Cg2?u4F`X>4S|(<~-h6Zk4*xaKi?OF;~R(8ch(dfk+B6CO=V`6W~w1 zU#6|os+mB&aE++>RDO~uB{Lt~BIuA}=ZowDku?UfUCNIU*%w59tjPXI1V;b1zIKk- z-d>gzj^jAqCxjB+VEjTm6a={{G_OQQQ~eHSsQ z@$vIT>hx)%dr{EzdUdqFOU?CzA^*Hc7Hpe{1-m^^q{feP=O}VGm7fnx1%ILecUb`j zdzZ}=*Nlec$L#-1N~t0tqpb?Y&uI|CkO{a%5_F*7On@QjIG1I%C7KN_3Zhe{*LP#4 z4*b4h0^efw1in%6hL1e`ccap!qU@j>87o=&|NU5N_ljj#$k5n0LIXl%_lvawvFv#f zbOW`Rr$6IfXPZPW3K9__(z2HM<0cnv-Si2%HwmbQbU8KNQ8J(&n{2`piQ#Io+Pc<( zr39SIY4J#$jC=btL3RbnXX+b+Rttlr9t<9A<6^q z@SQA@aasV;VfaADM+rbq^g<6Q018&vs94i8$Wgnx2VMH=(w@PtsE9wOF*jv-R?u}- zxB#;}B652`9HDmt2W9~^6CaH%2lr$LaW1|`(6(&0NX9vA#7xm}AF=j{;g8DE%S72E z{;#6+Zx)~)2p}Ow!bS7)r-F`%qej*c>JYiT9xqDotVd)T!tP8F@oocb z-Gw6N`XbRW8viSl23HTUbRVV0n(!+oNR!23rU20KVi1i2`>vssQ-ZK2mogMXlxJOUdSCjl3QML8mjd;(UjoT%q zag89V>p^gd^~HO)NMx%>@3`c|xZ-L->PAMEN@$(Tsip2j^Dq-@h3m}tTBB_l`ls^Z zc;qKSd+kE8W)abScqw8)tl1(a%3Baqc33QJ76}P6;2IUNHp5!q3^A$|?tu`p8$|DRk1CoWsXggs>&4Q)h+G4if@x#{EGXc%2}xM?xvhu; z;rTB_(- zlF1B-FEBCq4U9I|Bc!Adb%~CV2}b}>M!y|}2DC|X|px&{H>n7|=@QTRaPC~h@Oi@kk zBC%$nxJD@6Xfyj>>I{f*G}}A3h>o#IV~p~Ys+WBBHKU+4RCS}AnWN-K>P9UY<1Zf- z!SC4eQAXD{r1M%Mb}j9qV>VwXI-X?u95VXeFN`@h`#!*T07D#r*KPfMexj3cDF-{_ zLQbSQpHsuz=h2qV5kuQH8jMP1NVLN-VL-oe*KUExC9(5G>!Y>tH;`SmRtiusKzE1gYfslVu35zl zsHr_vzh;%NjIga}1JFYc$lqjQ;zA%?Jqb%^BhAswd|m^e4|C~b>;A)VNyJ?f1a@kJ z)q#rvvjW^8b}L9@xCm~R(;Td+pd7g_`|Vw z`)~C@w?5cjl27Ap38(yaq5E<@!P%~E#;(+$r0oK_#vU%N`6n)dcZ**HpO&b(BiWSU z#g?dFID-AM^msvAH+}Gd)Zhc)j`!ZOxgu8K{QFVQT#=oFo#g1eILPKS_X8?3=>XO9 ziTc+Dxhz%}WGsI9M0Ak67_H=4zvRqZsx5FVAm4NUQ=)tUEKa+BfheV8Mg5V;Y0`nm z7l?t5fQd#0_{H_FL>==`N6#|2ZI}98n%sP0G6;^krL%Hx(!`@ADM*qY5KMQIyy~;s zpsWRjaE(X0SfdLfSh-LnW)Je<*1)uC>$1Ois7ie>(m-Pu2^C(HJ5ZOG;fWMaqCJVZvJ^xn$e2&LBKj(<=y&)acCBVKTanL94qOuLO(- zAz9>&GIPafs{ClQr~FVAosT0NTh1nf1`-a;6hT7Uf%Ep6)_4DcR}E;u+=m;vHvxSLV1Pl=@Ao@Pfznivg+Q+$CI$BS8wq)}uAgD#1;S&X zJ?R8qvSF?I3#==-D>^|gK+UDvpr?DOE{HQ4^F?L_C+PW?q4`}S$s$(Z8bH{+Ezy`q z#dPyKou%*+&}b>%z+YUMB!`E&QY}cN#Xk$@KreYK7LO3fCvS$o;WI-0`wCaCmOtni--c&{Yq#Y_9}jzEW=qT&Z_o!P6D8{{!tB~OKRI+(A zNra(ex9yoB#_hN?*l`J?$0f(NitgBxyT}5E7VX5Y*e?>#@^hq1| zX&I_mOL0}CN?R#=&Q3MdKPpX{G)?tW}Wkkd-#FWil#QVG|TSEMxI2G$T{*p=~6$;%kEJZ8w-uGR*^3CJI3q6M1Cr% zKD*&RnMvv?naqFe^all zdbrY*o)eX;R8tRgPSj$wVakbqxoGOy$dQ@Sl8fc4SEqGqv3$O-)YMXUDDoX`@Y&v& z+UWoLX~9rzi}@FMg_U>OYv%v8uO(4;weW@c?>D`=z>}EP9iLnqE{gxayX?@_IrrP< zq+JhRi|kHR_8J>5v0JZQda+{j2MtzFVnce)PbOEjZ;SWWP0n3iYJV^NzGuyw6BV03 za@hPk>@S^=c>;PZ?bSoA&#Lnib;CXl`T@U}w=1nZM zy^tTjw%%X6P1=~8Yj?;~rrkNYas8J1(CbE*)mtPoni%QRGv%fc#tQ(Jw zj0~KWv9Ck1;Zp-A&c#Mz`pCK1#L(FA(Ae47*y)P{`uUTi!{^8211F=y=j-FK(E+XC z!9sVDr&uXjzQSATTj?(=uSm1HGBdO7_VgJU)15YpW9B`X(?V;X+VuSMTej`0-PhRJ zKX_r{y^lVP86$!RjnTj(qhs|Z(}~k(-qA0PU%EWe*4WhA`+&{SZAlw;l|ANvVCxU# z{nvB-CfD)$(8oqsK4bdUt|b*7(?busci7jhx(SfqW)#|Ld)XT+QavR{~T%TDCz!7 zxTy8BNLx!r*Y1w0&PUtk_B`FQDzZP)AE}A7M}FDStcKfu-Lx<~%!rX3L(HKfmC6j}$6*zPSDQKmMM$*KWP}&DmK-IdZ4|u9PR8S<&1?fy76W z6^J%Vgmfb-+PEv%NbH@__8LjOWXg3zGBa+eY;sg}YE5z7$T(?QRlinsT&s#1ft@Tq zDS_R_hqaB5Y7f=*)-5{t+&=xlbNk*tP#^v0?zjI-1?8=o>$%l*q|IN1TJAS+K zce`GmRaO0mn%Y-(zq;qOKkofg-MoS|YbuN}+;1NG{@aaB_qT*it!--i;f~I(?w%t@ zO?@+tY5mK8oV(~7$Ceg2-Fao(oYs<``JP;S=;sTw*FECiIj8G#QMtQ933^MODDnl| z#fnb}DMe2x9(Ty?3oH-F??}?cQ<2_I*Qe^yR7_>gHRcMEu+DXNSm&}fNy$rgc&f}I zL7vQ*Wzj#Jv?M-ArH3c;CcD*l<)TI-D=(R2iOm$r)EM=LOADING + jsr PRINT + lda #<(PATHNAME+1) + ldx #>(PATHNAME+1) + jsr PRINT + lda #ELLIPSES + jsr PRINT + + jsr MLI + .byte OPEN_CALL + .word OPEN_PARAM + bcc :+ + jmp ERROR + + ; Copy file reference number +: lda OPEN_REF + sta READ_REF + sta CLOSE_REF + + ; Turn off 80-column firmware + lda VERSION + cmp #$06 ; //e ? + bne :+ + lda #$15 + jsr $C300 + + ; Switch to hires page 2 +: bit TXTCLR + bit MIXCLR + bit HISCR + bit HIRES + + jsr MLI + .byte READ_CALL + .word READ_PARAM + bcs ERROR + + jsr MLI + .byte CLOSE_CALL + .word CLOSE_PARAM + bcs ERROR + + ; Go for it ... + jmp $6000 + +PRINT: + sta A1L + stx A1H + ldx VERSION + ldy #$00 +: lda (A1L),y + beq :++ + cpx #$06 ; //e ? + beq :+ + cmp #$60 ; lowercase ? + bcc :+ + and #$5F ; -> uppercase +: ora #$80 + jsr COUT + iny + bne :-- ; BRA +: rts + +ERROR: + bit TXTSET + bit LOWSCR + cmp #FILE_NOT_FOUND_ERR + bne :+ + lda #FILE_NOT_FOUND + jsr PRINT + beq :++ ; BRA +: pha + lda #ERROR_NUMBER + jsr PRINT + pla + jsr PRBYTE +: lda #PRESS_ANY_KEY + jsr PRINT + jsr RDKEY + jsr MLI + .byte QUIT_CALL + .word QUIT_PARAM diff --git a/src/apple2/audio.inc b/src/apple2/audio.inc new file mode 100644 index 0000000..a92afef --- /dev/null +++ b/src/apple2/audio.inc @@ -0,0 +1,141 @@ +;----------------------------------------------------------------------------- +; audio.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "CODE" + +;----------------------------------------------------------------------------- +.proc audioPlayTitleNote + + fixedDuration = srcPtrL + noteDuration = srcPtrH + freqTimer1 = dstPtrL + freqTimer2 = dstPtrH + + + ldy #0 ; load the duration + lda (musicL), y + beq reset ; on 0, the song is done + sta noteDuration + + lda audioMask ; see if the note should be played or simply delayed + and #AUDIO_MUSIC + bne :+ ; audio is on, go play + jsr uiDelay ; waste time as though a note was played + jmp leave ; and move the audio pointer along + +: + iny ; load the 1st timer + lda (musicL), y + sta freqTimer1 + iny ; load the second timer + lda (musicL), y + sta freqTimer2 + +preplay: + lda #$8A ; repeat minimum this much + sta fixedDuration +play: + lda SPEAKER ; toggle the speaker + dec freqTimer1 ; timer1 down + bne :++ ; not zero, go to timer 2 + ldy #1 ; reset timer 1 + lda (musicL), y + sta freqTimer1 + ldx #11 ; delay about 20 clock cycles +: + dex + bne :- +: + dec freqTimer2 ; dec timer 2 + bne :++ ; not zero? + ldy #2 ; at zero, reset timer 2 + lda (musicL), y + sta freqTimer2 + ldx #11 ; and waste 20 clock cycles +: + dex + bne :- +: + dec fixedDuration ; dec the fixed repeat count + bne play ; not zero, do another loop + dec noteDuration ; dec the note delay + bne preplay ; do more loops of at least fixedDuration + +leave: + clc + lda musicL ; add 3 to the music pointer + adc #3 + sta musicL + bcc :+ + inc musicH + clc ; leave with carry clear +: + rts + +reset: + lda #titleMusic + sta musicH + + sec ; and leave with carry set + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc audioPlayNote + + delayTime = tmpBot + 0 + + lda audioMask ; see if the music is on + and #AUDIO_MUSIC + bne :+ + rts ; if not, return + +: + lda #$FF ; calculate a delay + sec ; based on how many tiles were rendered + sbc tilesRendered ; this lets the music sound + cmp #80 ; better, esp. when a level is + bcc :+ ; very sparse (SkyLab for example) + lsr + lsr + lsr + lsr + tay + jsr uiDelay::ySet +: + ldx musicL ; get the index into the in-game music + inc musicL ; and advance that index + lda inGameMusic, x ; get the note at the index + bne :+ ; if non-zero it's a valid note + sta musicL ; reset the index to the start of the song + beq :- +: + ldy #$08 ; fixed number of iterations + +freq: ; external entry point for custom fixed iterations/delay + sta delayTime ; store it in a delay counter + lda audioMask ; see if + and #AUDIO_SOUND ; audio is enabled + bne loop ; and play or ignore audio accordingly + rts + +loop: + lda SPEAKER ; toggle the speaker + ldx delayTime ; and load the delay +: + dex ; count down + bne :- ; to zero + dey ; then repeat + bne loop ; for the fixed iterations + + rts ; and return + +.endproc diff --git a/src/apple2/defs.inc b/src/apple2/defs.inc new file mode 100644 index 0000000..6c51081 --- /dev/null +++ b/src/apple2/defs.inc @@ -0,0 +1,116 @@ +;----------------------------------------------------------------------------- +; defs.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +HGRPage1 := $2000 +HGRPage2 := $4000 +MLI := $BF00 +SPEAKER := $C030 +PLACEHOLDER := $FFFF + +;----------------------------------------------------------------------------- +; Cheat Key (binary 0-19 reverse) 12345 +LEVEL_Central_Cavern := 0 ; 00000 +LEVEL_The_Cold_Room := 1 ; 10000 +LEVEL_The_Menagerie := 2 ; 01000 +LEVEL_Abandoned_Uranium_Workings := 3 ; 11000 +LEVEL_Eugenes_Lair := 4 ; 00100 +LEVEL_Processing_Plant := 5 ; 10100 +LEVEL_The_Vat := 6 ; 01100 +LEVEL_Miner_Willy_meets_the_Kong := 7 ; 11100 +LEVEL_Wacky_Amoebatrons := 8 ; 00010 +LEVEL_The_Endorian_Forest := 9 ; 10010 +LEVEL_Attack_of_the_Mutant_Telephones := 10 ; 01010 +LEVEL_Return_of_the_Alien_Kong_Beast := 11 ; 11010 +LEVEL_Ore_Refinery := 12 ; 00110 +LEVEL_Skylab_Landing_Bay := 13 ; 10110 +LEVEL_The_Bank := 14 ; 01110 +LEVEL_The_Sixteenth_Cavern := 15 ; 11110 +LEVEL_The_Warehouse := 16 ; 00001 +LEVEL_Amoebatrons_Revenge := 17 ; 10001 +LEVEL_Solar_Power_Generator := 18 ; 01001 +LEVEL_The_Final_Barrier := 19 ; 11001 +LEVEL_Game_Over := 20 + +;----------------------------------------------------------------------------- +DATA_BLANK := $00 +DATA_FLOOR1 := $10 +DATA_FLOOR2 := $20 +DATA_CONVEYOR := $30 +DATA_WALL := $40 +DATA_BUSH := $50 +DATA_ROCK := $60 +DATA_COLLAPSE := $70 +DATA_KEY := $80 +DATA_SWITCH1 := $90 +DATA_SWITCH1_OPEN := $A0 +DATA_SWITCH2 := $B0 +DATA_SWITCH2_OPEN := $C0 +DATA_DOOR := $D0 + +;----------------------------------------------------------------------------- +START_LIVES := 2 +MAX_LIVES := 5 + +PLAY_ROWS := 16 +PLAY_COLS := 32 +VISIBLE_COLS := 20 + +TILES_PER_LEVEL := 8 +TILE_BYTES := 16 +CONVEYOR_FRAMES := 7 +KEYS_FRAMES := 4 + +MAX_SPRITES := 10 +SPRITE_BYTES := 64 +MAX_SPRITE_IFRAMES := 36 + +AIR_STR_LEN := 5 +AIR_SPEED := 14 + +DEMO_TIMER_DURATION := 2 +DEMO_TIMER_INITAL := 18 + +;----------------------------------------------------------------------------- +CLASS_MOVE_Y := 0 overflow) + beq stepLeft ; if it is, move the col left + cmp #3 ; if it's 3, (7,6,5,4 -> 3 overflow) + bne next ; if not, done with this sprite + +stepLeft: + dec spriteXPos, x ; move the column left + lda spriteXPos, x ; load it + cmp spriteMin, x ; compare to minimum + bcc leftEnd ; if less than minimum, too far, past the left edge + lda #7 ; keep going, load 7 + sta spriteFrame ,x ; set frame back to 7 + bne fix4 ; BRA, and check for a 4-frame sprite + +leftEnd: + inc spriteXPos, x ; put the column back to in range + lda #0 ; load 0 + sta spriteDir, x ; set as direction (right) + sta spriteFrame, x ; and frame (most left frame) + beq next ; BRA, done with this sprite + +postVMove: + lda spriteClass, x ; after a vertical update check these special cases + bit CLASS_EUGENE ; Eugene + bne eugene + bit CLASS_KONG ; Kong + beq :+ + jmp kong +: + bit CLASS_SKYLAB ; skylab + beq :+ + jmp skylab +: + inc spriteFrame, x ; otherwise go to next frame + lda spriteFrame, x + and #3 + sta spriteFrame, x + +next: + dex ; get previous sprite + bpl goTop ; if ge 0 then still a sprite to process + rts ; all sprites done - exit + +goTop: + jmp loop + +vertical: + lda spriteDir, x ; get direction 1 = UP, 0 = DOWN + beq down + bmi postVMove ; if the spriteDir is lt $ff, stationary sprite + +up: + lda spriteYPos, x ; get the Y position + sec + sbc spriteSpeed, x ; move up by the speed + cmp spriteMin, x ; see if at top + bcc upEnd ; overshot top + sta spriteYPos, x ; update Y position + bcs postVMove ; BRA + +upEnd: + lda spriteClass, x ; get the class + bit CLASS_HOLDATEND ; should it stop or bounce + bne stop ; HOLDATEND means stop + lda #0 ; change direction + sta spriteDir, x ; to DOWN (0) + beq postVMove ; BRA + +down: + lda spriteYPos, x ; get the Y + clc + adc spriteSpeed, x ; add the speed + cmp spriteMax, x ; see of at end + bcs downEnd ; at or past end + sta spriteYPos, x ; still good, update Y position + bcc postVMove ; BRA + +downEnd: + lda spriteClass, x ; same as upEnd + bit CLASS_HOLDATEND + bne stop + lda #1 ; but mark for moving UP (1) + sta spriteDir, x + bne postVMove ; BRA maybe down? +stop: + lda #$ff ; set the direction to -1 (lt 0) + sta spriteDir, x + bne postVMove ; BRA + +door: + lda keysToCollect ; check if all keys have been collected + bne next ; no - nothing more to do +frameToggle: + dec spriteTick, x ; count down for animation + bpl next ; gt 0, nothing more + lda spriteFrame, x ; get the frame + eor #1 ; toggle between 1 and 0 + sta spriteFrame, x ; update the frame + lda spriteSpeed, x ; get the anim speed + sta spriteTick, x ; save it to the tick + jmp next + +eugene: + lda keysToCollect ; eugene changes behavior when all keys collected + bne eugeneNormal ; not all keys, carry on + lda #0 ; all keys - force eugene down + sta spriteDir, x + inc spriteFrame, x ; cycle through the 5 colors + lda spriteFrame, x + cmp #4 + bcc :+ + lda #0 +: + sta spriteFrame, x ; save the new frame +eugeneNormal: + jmp next + +kong: + lda spriteMax, x ; if kong's max is 0 he's still up + beq frameToggle + lda spriteDir, x ; if he's not up see what his direction is + bpl kongFall ; gt 0, then he's still falling + cmp #$FE ; $fe he's been erased so done with him + beq kongDone ; $ff he's just reached the bottom + dec spriteDir, x ; turn $ff into $fe + txa ; put the sprite index into a + pha ; and save it + lda spriteFramesIdx, x ; get the index to the 1st kong frame + tax ; put that in x + inx ; and skip the 2 frames where + inx ; kong is standing + ldy #2 ; want to clear 2 frames + jsr spriteClearFrames ; and make the falling frames blank + pla ; get the sprite index + tax ; and put it back in x +kongDone: + jmp next +kongFall: + ldx #3 ; digit 3 (100's) + lda #1 ; add 1 + jsr textAddScore ; add to score + lda #UI_COMPONENT_SCORE ; show changes + jsr uiUpdateComponent + jmp frameToggle + +skylab: + lda spriteDir, x ; get the direction of the falling satellite + cmp #$ff ; see if it's reached its end + beq :+ ; yes it has + jmp next +: + inc spriteFrame, x ; advance the collapsing frame + lda spriteFrame, x ; load that frame + cmp #8 ; see if it's the last + bcs :+ ; yes + jmp next +: + lda spriteTick, x ; get the tick (hich is an index in this case) + clc + adc #3 ; advance by 3 (3 satellites at a time) so next index for this satellite + cmp #12 ; (3*4 is 12) - there are 4 stating locations per satellite + bcc :+ ; not rolled over + and #3 ; reset this satellite to 1st starting location (index) +: + sta spriteTick, x ; save the tick + tay ; put into Y + lda skylabXPos, y ; get the actual start position, based on y, for this satellite + sta spriteXPos, x ; put that into the satellite + lda #0 ; reset the frame, position and direction all to 0 + sta spriteFrame, x + sta spriteYPos, x + sta spriteDir, x + jmp next + +.endproc + + +;----------------------------------------------------------------------------- +.proc gameDemoTick + + dec demoTimer ; timer counts down + bne :+ ; if not yet zero, nothing to do + lda #DEMO_TIMER_DURATION ; reset the timer + sta demoTimer + lda #UI_COMPONENT_NAME ; mark the level name as needing an update + jsr uiUpdateComponent + lda leftEdge ; scroll the screen + clc + adc demoDirection ; based on the scrolling direction + sta leftEdge + beq nextDemoLevel ; if the edge is 0 then done with level + cmp #12 ; at 12, the level flips scroll direction + bne :+ + lda #$ff ; at 12, the scroll direction becomes -1 + sta demoDirection +: + rts + +nextDemoLevel: + lda #DEMO_TIMER_INITAL ; set for a longer initial hold at a new level + sta demoTimer + lda #1 ; set the scroll direction to be right (1) + sta demoDirection + lda #0 ; set the edge to be the very left + sta leftEdge + lda #EVENT_NEXT_LEVEL ; fire a new level event + ora eventState + sta eventState + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc gameEvent + + bit bit0Mask ; EVENT_DIED + beq :+ ; if not, must be end of level + dec lives ; died, so take a life + bmi died ; all lives lost ends the game + lda #0 + sta tmpBot + jsr screenInvertVisibleScreen + lda #EVENT_LEVEL_RESTART ; still alive so restart the level + rts + +: + bit bit4Mask ; EVENT_CHEAT_JUMP + bne done ; if jumping, just go + lda currLevel ; check the level + cmp #19 ; is this the last level + bcc :+ ; if not, go to screen invert + lda cheatActive ; last level - got here by cheating? + bne :+ ; yes - go screen invert + lda demoMode ; is this demo mode? + bne :+ ; yes - go to screen invert + jsr gameVictory ; played properly through, get the victory +: + ldx #8 ; do an inverse screen effect +: + stx sizeL + txa + and #3 + clc + adc #1 + sta tmpBot + jsr screenInvertVisibleScreen + ldx sizeL + dex + bne :- + + lda demoMode ; is this demo mode + bne incLevel ; skip the air/score, just go to next level + +nextLevel: + jsr screenSwap::valueSwap ; do the air countdown/add score routine now, on front screen + +airLoop: + ldx #5 ; digit 5 (1's) + lda #7 ; add 7 + jsr textAddScore ; add to score + ldx #4 ; digit 4 (10's) + lda #1 ; add 1 (so add 17 per tick) + jsr textAddScore ; add to score + jsr gameAirDecrease ; run the decrease air + lda airCols ; get the remaining bar length + asl ; mult * 4 + asl + eor #$7f ; and reverse (ignore MSB which is 0) - this is the freq + ldy #6 ; duration for the freq + jsr audioPlayNote::freq ; make a sound of this freq and duration + jsr uiUpdate ; and show the updates + lda eventState ; get the event state + bit bit0Mask ; check for EVENT_DIED + beq airLoop ; not dead means more air left + + jsr screenSwap::valueSwap ; go back to the back screen + +incLevel: + inc currLevel ; set the current level to the next + ldx currLevel + cpx #20 ; see if this is the last level + 1 + bcc done ; if not, all is well + lda demoMode ; check again for demo + beq :+ ; if not, roll over to level 1 and keep playing +died: + lda #EVENT_DIED ; demo also ends with a death event + rts +: + ldx #0 ; not demo, past last level, start at 1st level again + stx currLevel + +done: + lda #EVENT_NEXT_LEVEL ; return in a the action (next level) + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc gameAirDecrease + + lda #AIR_SPEED + sta airFlow + lda #UI_COMPONENT_AIR ; tick the air down, so update the UI + jsr uiUpdateComponent + ldx airCols ; see if it's an odd or even column + inx ; but the air draws from an odd column so the 1 bit is backwards + txa + and #1 + tax ; x 0 is even, x 1 is odd + lda airTipGfx ; see what the tip looks like + cmp maskGreen, x ; if it's all green, time to drop another column + beq colDec + lsr ; not all green, so adjust the tip by dropping 2 bits (1 white pixel) + lsr + ora maskGreenHi, x ; and replace that with a green pixel (appropriate for odd/even column) + bne airOk + +colDec: + dec airCols ; one less bar + bpl :+ + lda eventState ; out of air causes death + ora #EVENT_DIED + sta eventState + lda #0 + sta airCols ; lock airCols at 0 + lda maskGreen, x ; lock to all green for the tip + bne airOk +: + lda maskNewTip, x ; start a new (mostly white) tip, appropriate for odd/even + +airOk: + sta airTipGfx + + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc gameOver + + iter = currLevel ; how many times to loop + +bootPart: + ldx #20 ; game over level is 20 (0 based) + stx currLevel + jsr gameInitStage + + ldx #0 ; clear the top part of the screen + jsr screenClear + + ldx #0 ; draw the boot + jsr screenDrawSprite + + ldx #$60 ; start of boot-drop freq + stx iter + + lda #1 ; pretend there's a key so Boot (EUGENE) doesn't animate + sta keysToCollect ; and the "door" doesn't switch to the second frame + + tax ; also draw the pedestal (door) + jsr screenDrawSprite ; draw the boot + + lda #2 ; set willy to frame 2 + sta willyFrame + + jsr screenDrawWilly ; show willy on the pedestal + jsr screenSwap ; make it all visible + jsr screenSwap::valueSwap ; fake the front as the back +bootLoop: + jsr gameAI ; run the AI to move the boot down + + dec iter ; raise freq + dec iter + + lda audioMask ; see if the audio will play or skip + and #AUDIO_SOUND + beq otherDelay ; audio won't delay so "fake" an audio delay + + lda iter ; get the freq + ldy #$80 ; duration for the freq (also slows the boot down) + jsr audioPlayNote::freq ; make a sound of this freq and duration + jmp :+ + +otherDelay: + lda iter + lsr + lsr + tay + jsr uiDelay::ySet +: + + ldx #0 ; go draw the boot + jsr screenDrawSprite + + lda spriteDir ; see if the boot has reached the pedestal + bpl bootLoop ; net yet, keep going + +gameOverPart: + color = tmpBot + 1 ; index into color masks arrays + xPos = tmpBot + 2 ; x for string + yPos = tmpBot + 3 ; y for string + textL = tmpBot + 4 ; string pointer + textH = tmpBot + 5 + len = tmpBot + 6 ; how many characters (0 based) + + lda #$20 + sta iter ; how many times to loop + lda #(7*8) ; Y for string + sta yPos + lda #4 ; starting color + sta color +cycleLoop: + lda #4 ; print GAME at x 4 + sta xPos + lda #roTextGame + sta textH + lda #4 ; 0-3 characters + sta len + jsr textColorCycle ; show the text in color + + lda #13 ; print OVER at x 13 + sta xPos + lda #roTextOver + sta textH + lda #4 ; also 0-3 characters in length + sta len + jsr textColorCycle ; and show over with color + + ldy #$30 ; delay the iteration of color + jsr uiDelay::ySet + dec iter ; one less iteration to do + bpl cycleLoop ; do all iterations + + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc gameVictory + + lda #19 ; put willy above the door + sta willyXPos ; outside the caverns + lda #0 + sta willyFrame + lda #2*8 + sta willyYPos + + ldx fullScreenClearCount ; get the flag for what level of screen clear is needed + jsr screenClear ; and clear the screen + + jsr screenDrawSprites ; draw all the enemies + jsr screenDrawWilly ; not demo - draw willy with collision detection + jsr screenDrawLevel ; show all the tiles + ldx numSprites ; The door's index + inx + jsr screenDrawSprite ; render the door over everything else, no collision + jsr screenSwap ; swap to the newly rendered screen + +audioPart: + freq = tmpBot + 0 ; freq + duration = tmpBot + 1 ; duration + iteration = tmpBot + 2 ; iteration + + lda #50 ; 50 iterations + sta iteration + lda #0 ; init freq and duration + sta freq + sta duration + +loop: + lda duration ; start with the duration + adc iteration ; add the iteration counter * 3 + adc iteration + adc iteration + sta freq ; save as the freq + ldy duration ; put duration in Y + + lda audioMask ; see if the audio will play or skip + and #AUDIO_SOUND + bne audioOn ; if on, use the freq "API" +: + ldx freq ; a bit ridiculous to redo playNote stuff here +: + dex ; but I want the audio code to all go through the + bne :- ; same "API" for consistency + dey + bne :-- + beq postFreq + +audioOn: + lda freq + jsr audioPlayNote::freq ; make the sound if sound enabled + +postFreq: + dec iteration ; dec the iterations + bne loop ; loop till all iterations done + rts + +.endproc diff --git a/src/apple2/input.inc b/src/apple2/input.inc new file mode 100644 index 0000000..a508496 --- /dev/null +++ b/src/apple2/input.inc @@ -0,0 +1,231 @@ +;----------------------------------------------------------------------------- +; input.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "CODE" + +;----------------------------------------------------------------------------- +.proc inputGet + + lda KBD + bmi hasKey + + lda cheatActive ; is the cheat code active + beq :+ ; no - normal play + lda cheatIndex ; is the 6 down + beq :+ ; no - normal play + jmp setJmpEvent ; cheat active and 6 down - keep resetting to this level +: + rts + +hasKey: + bit KBDSTRB + and #$5f ; strip MSB and upper/lower case (to upper) + + tax + lda demoMode + beq :+ + jmp premusic +: + txa + bne right ; $5f clears space so a is 0 for jump + +jump: + lda userKeyMask + eor #MASK_AIR ; AIR marks the start of a jump + sta userKeyMask + rts + +right: + cmp #'W' ; go right with w (left handed) or P + beq :+ + cmp #'P' + bne left +: + lda userKeyMask + and #<~MASK_LEFT ; clear left + eor #MASK_RIGHT ; activate right + sta userKeyMask + rts + +left: + cmp #'Q' ; go left with q (left handed) or o + beq :+ + cmp #'O' + bne camera +: + lda userKeyMask + and #<~MASK_RIGHT ; clear right + eor #MASK_LEFT ; activate left + sta userKeyMask + rts + +camera: + cmp #'C' ; c toggles the scroll mode + bne cheat ; if not c maybe cheat? + lda #1 ; xor the camera mode with 1 + eor cameraMode + sta cameraMode + rts ; done, can't be any other key + +cheat: + ora #%00100000 ; make "normal" characters + ldx cheatActive ; see if the cheat mode is on + bne checkJump ; if yes, see if a jump needs to happen + + ldx cheatIndex ; active, not on + cmp roTextCheatCode, x ; is this the next cheat code character + bne resetCheat ; no, reset the cheat + inx ; yes + stx cheatIndex ; inc the index + cpx #7 ; all 7 typed + beq :+ ; yes + rts ; not yet, so done here +: + ldx #1 ; make the cheat active + stx cheatActive + +resetCheat: + ldx #0 ; set the cheat index to 0 + stx cheatIndex +jumpNotActive: + and #%11011111 ; restore the acc to uppercase + bne music ; BRA + +checkJump: + cmp #'6' ; is this a 6 + beq jumpToggle ; if yes, toggle the jump mode on/off + bcs jumpNotActive ; gt 6, then nothing to do with cheat + ldx cheatIndex ; is 6 down + beq jumpNotActive ; no, process as non-cheat key + cmp #'1' + bcc jumpNotActive ; less than 1, not cheat code + sec + sbc #'1' ; make key 0 based + tax ; and index in x + lda bitMasks, x ; get the appropriate bit + eor currLevel ; and toggle in the current level + cmp #20 ; if the level ge 20 then set to 0 + bcc :+ + lda #0 +: + sta currLevel +setJmpEvent: + lda #EVENT_CHEAT_JUMP ; set the jump event active + ora eventState + sta eventState + rts + +jumpToggle: + lda #1 ; prep to toggle the jump state + eor cheatIndex + sta cheatIndex ; save it + beq :+ ; is it off, just leave + lda #0 ; just turned on, reset + sta currLevel ; the level to level 0 +: + rts + +premusic: + txa ; restore the read-key +music: + cmp #'M' ; m toggles music on/off + bne :+ + LDA audioMask + eor #AUDIO_MUSIC + sta audioMask + rts + +: + cmp #'B' + bne :+ + lda #1 + eor monochrome + sta monochrome + jmp tilesPrepForLevel + +: + cmp #'S' ; s toggles in-game sound on/off + bne :+ + LDA audioMask + eor #AUDIO_SOUND + sta audioMask + rts + +: + cmp #$1B ; ESC + beq quit ; quit game or demo + + lda demoMode ; see if this is demo + beq done ; if not, ignore all other keys, demo quit on any key + +quit: + lda #0 ; set lives to zero so this die event quits + sta lives + inc demoMode ; turn demo mode if not on, so there's no end-of-level stuff + lda eventState ; and make a death event + ora #EVENT_DIED + sta eventState + +done: + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc inputUI + + loop = currLevel + + lda KBD ; Get the keyboard + bpl okay ; and ignore no keys + bit KBDSTRB ; reset the keyboard + and #$5f ; strip MSB and case bit + cmp #'M' ; see if it's the music toggle + bne :+ + lda audioMask + eor #AUDIO_MUSIC + sta audioMask +okay: + lda #0 ; no key or M or m returns 0 + rts + +: + cmp #'B' ; b in the UI toggles color/mono + bne :+ + lda #1 + sta currLevel ; in UI so abuse currLevel as a counter + eor monochrome ; toggle mono/color + sta monochrome + beq showColor +showMono: + printXY #7, #(17*8), roTextMono, #4 ; show Mono on screen + jsr screenSwap::valueSwap ; fake swap + dec currLevel ; and do twice so both buffers updated + bpl showMono + jmp doneB + +showColor: + printXY #7, #(17*8), roTextColor, #4 ; show Color on in both buffers + jsr screenSwap::valueSwap + dec currLevel + bpl showColor +doneB: + lda #0 ; if all is well, return with 0 in a + rts + +: ; non-music/color toggle key + cmp #$1b ; see if it's esc + beq exit ; exit if it is +stop: + lda #1 ; non-M, B or ESC (non toggle) returns 1 (start game) + rts +exit: + lda #$ff ; -1 on ESC (quit application) + rts + +.endproc diff --git a/src/apple2/level.inc b/src/apple2/level.inc new file mode 100644 index 0000000..917bd66 --- /dev/null +++ b/src/apple2/level.inc @@ -0,0 +1,123 @@ +;----------------------------------------------------------------------------- +; level.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "CODE" + +;----------------------------------------------------------------------------- +; "decompress" the stored level into a usable level in levelLayout +.proc levelUnpack + + value = sizeL + len = sizeH + + ldx currLevel + + lda #levelLayout + sta store + 2 + + lda levelsL, x ; get the start of the level data intp srcPtr + sta srcPtrL + lda levelsH, x + sta srcPtrH + + ldx #0 ; start at 0 in read and write area + ldy #0 + +loop: + lda (srcPtrL), y ; read the first level byte (repeat counts) + beq done ; $00 ends level + pha ; save + iny ; point y at next byte + + lsr ; get high repeat nibble into low nibble + lsr + lsr + lsr + tax ; but result in X + + lda (srcPtrL), y ; read the next byte from level (values) + sta value ; save + iny ; advance y to next rep counts + + lsr ; get high value nibble into low nibble + lsr + lsr + lsr + jsr :+ ; store value repeat times into level decode area + + pla ; restore the rep byte + and #$0f ; only the low nibble + tax ; put in x + lda value ; restore values + and #$0f ; only low nibble + jsr :+ ; store value repeat times into level decode area + jmp loop ; repeat + +: + stx len ; save the repeat count + tax ; value into x (value is a tile index) + lda mult16, x ; mult value by 16 as that's how wide a tile is + ldx len ; restore the repeat count + dex ; store index is 0+ but count is 1+ so pre-dec + +store: + sta PLACEHOLDER, x ; store the tile offset into the level decode area + dex ; from back to front and + bpl store ; repeat for all repetitions + + lda len ; get the repeat length + clc + adc store + 1 ; advance the stor pointer by the length + sta store + 1 + bcc done + inc store + 2 + +done: + rts ; return to self or caller + +.endproc + +;----------------------------------------------------------------------------- +.proc levelPlaceKeys + + lda #0 + sta keysToCollect ; init to 0 keys to collect + + lda currLevel + asl ; * 2 + asl ; * 4 + adc currLevel ; * 5 - index into key table + tax ; keep index in x + + lda #4 ; Need to do 5 keys, 0-4 + sta sizeL ; save count in sizeL + ldy #0 ; keep offst from ptr at 0 +: + lda keyyH, x ; get the key Y hi (y=row*32 in key table) + bmi next ; if $ff then skip + inc keysToCollect ; count the key + sta dstPtrH ; save the hi + lda keyyL, x ; get the y lo + adc keyx, x ; and add the x (no carry still) + sta dstPtrL ; save as dst pointer + lda #>levelLayout ; get the scratch hi (the lo is 0 as it's aligned) + adc dstPtrH ; and add to the Y hi (and any carry) + sta dstPtrH ; and save as the dst Pointer Hi + lda #8*16 ; key tile offset * width of a tile + sta (dstPtrL), y ; poke into the unpacked level + +next: + inx ; next key + dec sizeL ; one less key to do + bpl :- ; all keys done? + + rts + +.endproc diff --git a/src/apple2/logo.hgr b/src/apple2/logo.hgr new file mode 100644 index 0000000000000000000000000000000000000000..90e819e87e94027ffb72864c11e0293dd6f8a88e GIT binary patch literal 8192 zcmd^^O=ufO6vy2|AcP*H9(wA^T^ipjcaZDS0k z5QFF;&Lv=tuq0@6k%Oh;^jI7l4+4Xbd}s}8kPYr4+p)C$zuBGrkXNy6ni||4B#mZQ zdi&nY@4Yu~JDEl;YJUXZ1s7b6pxaiH|E7NQfzJ--xNct)CO-!`4!wA#5+LO-3 zY31X;BOUmErX_oDE3v1&BvCe3{=-4m%|%M2tW4=pY{L#lDOF6@4UsExkuw{mYB^&X z^+nSt>1`fLe|GotNXJ)fZA0U)+4_(z`O9yp#Vi~n-#vKD2JdTa>0joeFt)szO-xtx z@pvV>A0L(pyS`$ZBVKcu!(}-8-eR(slPvfGXd`Mm6 zg0$~-jPI9C{kHVSU9@R_SN<&1E`2eeEeOu>nq`(d{lPn!*)L4Id6BK`jiI*{AAi#* zjIB((sl;E*Bz6yQ4ri!;TKPdKt-s|Pdvp25(ZSvpdRr^#)4O#*J&dAfkDgY3r(^Fh zv(u!i@pkRsT7%#jHUAF(Ov!oXUFPx^>56(6VvGo0!@wlF^>~2aL-SrQh!9QCk{*%HW`Gd*;{!c02%++|U zS_c0X_%|K?&2%y6=f4t9WE0DqyK}@pe2wFSblvHP@PAM85AFZ%QwyQ#vmO2En$xcT zS4_Ko?Q1P6cv1-didmLlYp;J%`A7VtMzQZ$`w#h#I?^9m-U6`s!(B!0eAdNHtClf& z`LLF$b76^{a;E;?qKJbzFMR*w)bp3?^SWL*ro?fz8pjGqO8=uGLeP>v{we+!m&z{x_-^x`w`}>-iQT!qEj#`@%)|TWmAv!? zd1(!0f5`vzR(Gt41NGyOPi6n6{6A*N3{?KW4atBQj|7HH4D;g^Pm(n$x ze+#ogT4xhk{g=Opf4rRdua6%&xquFf`23&7u69I|*!vLw{Ji*Qf6Dj|-F*qD-x3!! z{yX0O-1vw5PqYDzIWFSnlUP&!jY*LCe`(RO`QH{P(>Iw(lK(R0-`fK9H_8QyRb&CkxUur5R&|R1&nJIBEB{QpNBnoQ*pnvyY5z|vAa7D8 zaO@}>$a(!ueoNPzHK54 zH&y&SwE6QR(6Sz-*1zIE*~4GU3TO)k934^bY~8RYp!i>z*+&Hedw>G!5P|%k>VI3P z0^%Z1{&mU!2Jw%V?)3aa zKH@*qWc~eD_ULKfXy2$4|K;-shyT_Z2hU)CPkf{DhWMX|%lMB9m}S@BcU#ooPvF0Q z$cg^}{v96x{+<1|ff31{T=>MFK2BZiINSsMecGWY`(v79{O|mO3+%$_Sxabhw1kIg z-KZMl3X&bF^!tv4eLpnf%I}B$qg?z<+MFx@NpUXx3$3ko4)uR~qMhZ?de(zy!dK7n zQ8oWqZ;{K`UptHL+hHI7l0W=Z=KmD+5dS6rVw;}7)e!%Wt;ge%!bg;RhyQ;2`5V)Q zdq*v`|34G|i1?C!)Vs0?_xT(4{HJ*S77afCyR9+BKc2tslr7XDswG1-%GhxTkAElr zBl{-8DEsz!qY*m5Kc4>i_;dJ=+~MLOOy%aoOHGRPage1 ; set the current hidden (back) page to page 1 + sta currPageH ; (page 2 was made visible by the loader) + + lda #$80 ; make a zero-page bit mask area for checking bits + ldx #7 ; from 1 to 128, set each bit (backwards) +: + sta bitMasks, x ; set the bits in the area called bitMasks + lsr + dex + bpl :- + + rts + +.endproc diff --git a/src/apple2/mminer.cfg b/src/apple2/mminer.cfg new file mode 100644 index 0000000..32edab5 --- /dev/null +++ b/src/apple2/mminer.cfg @@ -0,0 +1,19 @@ +SYMBOLS { + __EXEHDR__: type = import; + __FILETYPE__: type = export, value = $0006; +} +MEMORY { + ZP: file = "", start = $0050, size = $0100 - $0050; + HEADER: file = %O, start = $4000 - $003A, size = $003A; + MAIN: file = %O, define = yes, start = $4000, size = $BF00 - $4000; + LOW: file = "", start = $0800, size = $2000 - $0800; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + EXEHDR: load = HEADER, type = ro; + HGR: load = MAIN, type = rw; + CODE: load = MAIN, type = rw, start = $6000; + RODATA: load = MAIN, type = ro, align = $10; + DATA: load = MAIN, type = rw; + LOWMEM: load = LOW, type = rw; +} diff --git a/src/apple2/roaudio.inc b/src/apple2/roaudio.inc new file mode 100644 index 0000000..627fe8e --- /dev/null +++ b/src/apple2/roaudio.inc @@ -0,0 +1,68 @@ +;----------------------------------------------------------------------------- +; roaudio.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "RODATA" + +;----------------------------------------------------------------------------- +titleMusic: +.byte $50, $80, $81, $50, $66, $67, $50, $56 +.byte $57, $32, $56, $57, $32, $AB, $CB, $32 +.byte $2B, $33, $32, $2B, $33, $32, $AB, $CB +.byte $32, $33, $40, $32, $33, $40, $32, $AB +.byte $CB, $32, $80, $81, $32, $80, $81, $32 +.byte $66, $67, $32, $56, $57, $32, $60, $56 +.byte $32, $AB, $C0, $32, $2B, $30, $32, $2B +.byte $30, $32, $AB, $C0, $32, $30, $44, $32 +.byte $30, $44, $32, $AB, $C0, $32, $88, $89 +.byte $32, $88, $89, $32, $72, $73, $32, $4C +.byte $4D, $32, $4C, $4D, $32, $AB, $C0, $32 +.byte $26, $30, $32, $26, $30, $32, $AB, $C0 +.byte $32, $30, $44, $32, $30, $44, $32, $AB +.byte $C0, $32, $88, $89, $32, $88, $89, $32 +.byte $72, $73, $32, $4C, $4D, $32, $4C, $4D +.byte $32, $AB, $CB, $32, $26, $33, $32, $26 +.byte $33, $32, $AB, $CB, $32, $33, $40, $32 +.byte $33, $40, $32, $AB, $CB, $32, $80, $81 +.byte $32, $80, $81, $32, $66, $67, $32, $56 +.byte $57, $32, $40, $41, $32, $80, $AB, $32 +.byte $20, $2B, $32, $20, $2B, $32, $80, $AB +.byte $32, $2B, $33, $32, $2B, $33, $32, $80 +.byte $AB, $32, $80, $81, $32, $80, $81, $32 +.byte $66, $67, $32, $56, $57, $32, $40, $41 +.byte $32, $80, $98, $32, $20, $26, $32, $20 +.byte $26, $32, $80, $98, $32, $26, $30, $32 +.byte $26, $30, $32, $00, $00, $32, $72, $73 +.byte $32, $72, $73, $32, $60, $61, $32, $4C +.byte $4D, $32, $4C, $99, $32, $4C, $4D, $32 +.byte $4C, $4D, $32, $4C, $99, $32, $5B, $5C +.byte $32, $56, $57, $32, $33, $CD, $32, $33 +.byte $34, $32, $33, $34, $32, $33, $CD, $32 +.byte $40, $41, $32, $66, $67, $64, $66, $67 +.byte $32, $72, $73, $64, $4C, $4D, $32, $56 +.byte $57, $32, $80, $CB, $19, $80, $00, $19 +.byte $80, $81, $32, $80, $CB, $00 + +inGameMusic: +.byte $E6, $CD, $B7, $AC, $9A, $B7, $9A, $9A +.byte $91, $AC, $91, $91, $9A, $B7, $9A, $9A +.byte $E6, $CD, $B7, $AC, $9A, $B7, $9A, $9A +.byte $91, $AC, $91, $91, $9A, $9A, $9A, $9A +.byte $E6, $CD, $B7, $AC, $9A, $B7, $9A, $9A +.byte $91, $AC, $91, $91, $9A, $B7, $9A, $9A +.byte $E6, $CD, $B7, $AC, $9A, $B7, $9A, $73 +.byte $9A, $B7, $E6, $B7, $9A, $9A, $9A, $9A +.byte $00 + +jumpFreq: +.byte $40, $40, $38, $38, $30, $30, $28, $28 +.byte $20, $20, $28, $28, $30, $30, $38, $38 +.byte $40, $40 + +fallFreq: +.byte $F4, $FF, $4C, $58, $64, $70, $7C, $88 +.byte $94, $A0, $AC, $B8, $C4, $D0, $DC, $E8 diff --git a/src/apple2/rofont.inc b/src/apple2/rofont.inc new file mode 100644 index 0000000..8d5b991 --- /dev/null +++ b/src/apple2/rofont.inc @@ -0,0 +1,971 @@ +;----------------------------------------------------------------------------- +; rofont.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "RODATA" + +;----------------------------------------------------------------------------- +font: +font00: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +font01: +.byte $80, $80 ; -------------- = -------------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $80, $80 ; -------------- = -------------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $80, $80 ; -------------- = -------------- + +font02: +.byte $80, $80 ; -------------- = -------------- +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +font03: +.byte $80, $80 ; -------------- = -------------- +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $80, $80 ; -------------- = -------------- + +font04: +.byte $80, $80 ; -------------- = -------------- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $F0, $9F ; XXX------XXXXX = ----XXXXXXXX-- +.byte $CC, $81 ; X--XX--------X = --XX--XX------ +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $C0, $99 ; X--------XX--X = ------XX--XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $C0, $81 ; X------------X = ------XX------ + +font05: +.byte $80, $80 ; -------------- = -------------- +.byte $8F, $98 ; ---XXXX--XX--- = XXXX------XX-- +.byte $8F, $86 ; ---XXXX----XX- = XXXX----XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $8C, $9E ; ---XX----XXXX- = --XX----XXXX-- +.byte $83, $9E ; -----XX--XXXX- = XX------XXXX-- +.byte $80, $80 ; -------------- = -------------- + +font06: +.byte $80, $80 ; -------------- = -------------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $CC, $81 ; X--XX--------X = --XX--XX------ +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $83, $86 ; -----XX----XX- = XX------XX---- +.byte $FC, $99 ; XXXXX----XX--X = --XXXXXX--XX-- +.byte $80, $80 ; -------------- = -------------- + +font07: +.byte $80, $80 ; -------------- = -------------- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +font08: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $80, $80 ; -------------- = -------------- + +font09: +.byte $80, $80 ; -------------- = -------------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $80, $80 ; -------------- = -------------- + +font0A: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $B0, $86 ; -XX--------XX- = ----XX--XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $B0, $86 ; -XX--------XX- = ----XX--XX---- +.byte $80, $80 ; -------------- = -------------- + +font0B: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $80 ; -------------- = -------------- + +font0C: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $B0, $80 ; -XX----------- = ----XX-------- + +font0D: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +font0E: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $F0, $81 ; XXX----------X = ----XXXX------ +.byte $F0, $81 ; XXX----------X = ----XXXX------ +.byte $80, $80 ; -------------- = -------------- + +font0F: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $80, $80 ; -------------- = -------------- + +font10: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $9E ; -----XX--XXXX- = XX------XXXX-- +.byte $C3, $99 ; X----XX--XX--X = XX----XX--XX-- +.byte $B3, $98 ; -XX--XX--XX--- = XX--XX----XX-- +.byte $8F, $98 ; ---XXXX--XX--- = XXXX------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font11: +.byte $80, $80 ; -------------- = -------------- +.byte $F0, $81 ; XXX----------X = ----XXXX------ +.byte $CC, $81 ; X--XX--------X = --XX--XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $80, $80 ; -------------- = -------------- + +font12: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $80, $80 ; -------------- = -------------- + +font13: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $C0, $87 ; X----------XXX = ------XXXX---- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font14: +.byte $80, $80 ; -------------- = -------------- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $F0, $81 ; XXX----------X = ----XXXX------ +.byte $CC, $81 ; X--XX--------X = --XX--XX------ +.byte $C3, $81 ; X----XX------X = XX----XX------ +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $80 ; -------------- = -------------- + +font15: +.byte $80, $80 ; -------------- = -------------- +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $FF, $87 ; XXXXXXX----XXX = XXXXXXXXXX---- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font16: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $FF, $87 ; XXXXXXX----XXX = XXXXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font17: +.byte $80, $80 ; -------------- = -------------- +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $80, $80 ; -------------- = -------------- + +font18: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font19: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font1A: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $80, $80 ; -------------- = -------------- + +font1B: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $8C, $80 ; ---XX--------- = --XX---------- + +font1C: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $80, $80 ; -------------- = -------------- + +font1D: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +font1E: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $80, $80 ; -------------- = -------------- + +font1F: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $80 ; -------------- = -------------- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $80 ; -------------- = -------------- + +font20: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $C3, $99 ; X----XX--XX--X = XX----XX--XX-- +.byte $B3, $9E ; -XX--XX--XXXX- = XX--XX--XXXX-- +.byte $F3, $9F ; XXX--XX--XXXXX = XX--XXXXXXXX-- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font21: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $80, $80 ; -------------- = -------------- + +font22: +.byte $80, $80 ; -------------- = -------------- +.byte $FF, $87 ; XXXXXXX----XXX = XXXXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FF, $87 ; XXXXXXX----XXX = XXXXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FF, $87 ; XXXXXXX----XXX = XXXXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font23: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $83, $80 ; -----XX------- = XX------------ +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font24: +.byte $80, $80 ; -------------- = -------------- +.byte $FF, $81 ; XXXXXXX------X = XXXXXXXX------ +.byte $83, $86 ; -----XX----XX- = XX------XX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $86 ; -----XX----XX- = XX------XX---- +.byte $FF, $81 ; XXXXXXX------X = XXXXXXXX------ +.byte $80, $80 ; -------------- = -------------- + +font25: +.byte $80, $80 ; -------------- = -------------- +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $FF, $87 ; XXXXXXX----XXX = XXXXXXXXXX---- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $83, $80 ; -----XX------- = XX------------ +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $80, $80 ; -------------- = -------------- + +font26: +.byte $80, $80 ; -------------- = -------------- +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $FF, $87 ; XXXXXXX----XXX = XXXXXXXXXX---- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $83, $80 ; -----XX------- = XX------------ +.byte $83, $80 ; -----XX------- = XX------------ +.byte $80, $80 ; -------------- = -------------- + +font27: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $C3, $9F ; X----XX--XXXXX = XX----XXXXXX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font28: +.byte $80, $80 ; -------------- = -------------- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $80, $80 ; -------------- = -------------- + +font29: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $80, $80 ; -------------- = -------------- + +font2A: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font2B: +.byte $80, $80 ; -------------- = -------------- +.byte $83, $86 ; -----XX----XX- = XX------XX---- +.byte $C3, $81 ; X----XX------X = XX----XX------ +.byte $BF, $80 ; -XXXXXX------- = XXXXXX-------- +.byte $C3, $81 ; X----XX------X = XX----XX------ +.byte $83, $86 ; -----XX----XX- = XX------XX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $80, $80 ; -------------- = -------------- + +font2C: +.byte $80, $80 ; -------------- = -------------- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $83, $80 ; -----XX------- = XX------------ +.byte $83, $80 ; -----XX------- = XX------------ +.byte $83, $80 ; -----XX------- = XX------------ +.byte $83, $80 ; -----XX------- = XX------------ +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $80, $80 ; -------------- = -------------- + +font2D: +.byte $80, $80 ; -------------- = -------------- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $8F, $9E ; ---XXXX--XXXX- = XXXX----XXXX-- +.byte $F3, $99 ; XXX--XX--XX--X = XX--XXXX--XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $80, $80 ; -------------- = -------------- + +font2E: +.byte $80, $80 ; -------------- = -------------- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $8F, $98 ; ---XXXX--XX--- = XXXX------XX-- +.byte $B3, $98 ; -XX--XX--XX--- = XX--XX----XX-- +.byte $C3, $99 ; X----XX--XX--X = XX----XX--XX-- +.byte $83, $9E ; -----XX--XXXX- = XX------XXXX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $80, $80 ; -------------- = -------------- + +font2F: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font30: +.byte $80, $80 ; -------------- = -------------- +.byte $FF, $87 ; XXXXXXX----XXX = XXXXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FF, $87 ; XXXXXXX----XXX = XXXXXXXXXX---- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $83, $80 ; -----XX------- = XX------------ +.byte $80, $80 ; -------------- = -------------- + +font31: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $B3, $98 ; -XX--XX--XX--- = XX--XX----XX-- +.byte $C3, $99 ; X----XX--XX--X = XX----XX--XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font32: +.byte $80, $80 ; -------------- = -------------- +.byte $FF, $87 ; XXXXXXX----XXX = XXXXXXXXXX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FF, $87 ; XXXXXXX----XXX = XXXXXXXXXX---- +.byte $83, $86 ; -----XX----XX- = XX------XX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $80, $80 ; -------------- = -------------- + +font33: +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font34: +.byte $80, $80 ; -------------- = -------------- +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $80 ; -------------- = -------------- + +font35: +.byte $80, $80 ; -------------- = -------------- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font36: +.byte $80, $80 ; -------------- = -------------- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $F0, $81 ; XXX----------X = ----XXXX------ +.byte $80, $80 ; -------------- = -------------- + +font37: +.byte $80, $80 ; -------------- = -------------- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $F3, $99 ; XXX--XX--XX--X = XX--XXXX--XX-- +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $80, $80 ; -------------- = -------------- + +font38: +.byte $80, $80 ; -------------- = -------------- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $F0, $81 ; XXX----------X = ----XXXX------ +.byte $F0, $81 ; XXX----------X = ----XXXX------ +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $80, $80 ; -------------- = -------------- + +font39: +.byte $80, $80 ; -------------- = -------------- +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $B0, $86 ; -XX--------XX- = ----XX--XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $80 ; -------------- = -------------- + +font3A: +.byte $80, $80 ; -------------- = -------------- +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $80, $80 ; -------------- = -------------- + +font3B: +.byte $80, $80 ; -------------- = -------------- +.byte $C0, $9F ; X--------XXXXX = ------XXXXXX-- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $9F ; X--------XXXXX = ------XXXXXX-- +.byte $80, $80 ; -------------- = -------------- + +font3C: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $83, $80 ; -----XX------- = XX------------ +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $80, $80 ; -------------- = -------------- + +font3D: +.byte $80, $80 ; -------------- = -------------- +.byte $BF, $80 ; -XXXXXX------- = XXXXXX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $BF, $80 ; -XXXXXX------- = XXXXXX-------- +.byte $80, $80 ; -------------- = -------------- + +font3E: +.byte $80, $80 ; -------------- = -------------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $FC, $81 ; XXXXX--------X = --XXXXXX------ +.byte $B3, $86 ; -XX--XX----XX- = XX--XX--XX---- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $80, $80 ; -------------- = -------------- + +font3F: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + +font40: +.byte $80, $80 ; -------------- = -------------- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $FF, $81 ; XXXXXXX------X = XXXXXXXX------ +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $80, $80 ; -------------- = -------------- + +font41: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $F0, $9F ; XXX------XXXXX = ----XXXXXXXX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $F0, $9F ; XXX------XXXXX = ----XXXXXXXX-- +.byte $80, $80 ; -------------- = -------------- + +font42: +.byte $80, $80 ; -------------- = -------------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font43: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font44: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $F0, $9F ; XXX------XXXXX = ----XXXXXXXX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $F0, $9F ; XXX------XXXXX = ----XXXXXXXX-- +.byte $80, $80 ; -------------- = -------------- + +font45: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font46: +.byte $80, $80 ; -------------- = -------------- +.byte $C0, $87 ; X----------XXX = ------XXXX---- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $F0, $81 ; XXX----------X = ----XXXX------ +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $80, $80 ; -------------- = -------------- + +font47: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $F0, $9F ; XXX------XXXXX = ----XXXXXXXX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $F0, $9F ; XXX------XXXXX = ----XXXXXXXX-- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- + +font48: +.byte $80, $80 ; -------------- = -------------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $80, $80 ; -------------- = -------------- + +font49: +.byte $80, $80 ; -------------- = -------------- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $80 ; -------------- = -------------- +.byte $F0, $81 ; XXX----------X = ----XXXX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font4A: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $F0, $81 ; XXX----------X = ----XXXX------ + +font4B: +.byte $80, $80 ; -------------- = -------------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $CC, $81 ; X--XX--------X = --XX--XX------ +.byte $BC, $80 ; -XXXX--------- = --XXXX-------- +.byte $BC, $80 ; -XXXX--------- = --XXXX-------- +.byte $CC, $81 ; X--XX--------X = --XX--XX------ +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $80, $80 ; -------------- = -------------- + +font4C: +.byte $80, $80 ; -------------- = -------------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $C0, $87 ; X----------XXX = ------XXXX---- +.byte $80, $80 ; -------------- = -------------- + +font4D: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $BC, $86 ; -XXXX------XX- = --XXXX--XX---- +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $80, $80 ; -------------- = -------------- + +font4E: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $80, $80 ; -------------- = -------------- + +font4F: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font50: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $8C, $80 ; ---XX--------- = --XX---------- + +font51: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $83, $86 ; -----XX----XX- = XX------XX---- +.byte $83, $86 ; -----XX----XX- = XX------XX---- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $80, $98 ; ---------XX--- = ----------XX-- + +font52: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $80, $80 ; -------------- = -------------- + +font53: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font54: +.byte $80, $80 ; -------------- = -------------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $FC, $81 ; XXXXX--------X = --XXXXXX------ +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $C0, $87 ; X----------XXX = ------XXXX---- +.byte $80, $80 ; -------------- = -------------- + +font55: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $80, $80 ; -------------- = -------------- + +font56: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $B0, $86 ; -XX--------XX- = ----XX--XX---- +.byte $B0, $86 ; -XX--------XX- = ----XX--XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $80 ; -------------- = -------------- + +font57: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $B0, $86 ; -XX--------XX- = ----XX--XX---- +.byte $80, $80 ; -------------- = -------------- + +font58: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $B0, $86 ; -XX--------XX- = ----XX--XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $B0, $86 ; -XX--------XX- = ----XX--XX---- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $80, $80 ; -------------- = -------------- + +font59: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $F0, $9F ; XXX------XXXXX = ----XXXXXXXX-- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- + +font5A: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $80, $80 ; -------------- = -------------- + +font5B: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $9E ; ---------XXXX- = --------XXXX-- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $BC, $80 ; -XXXX--------- = --XXXX-------- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $9E ; ---------XXXX- = --------XXXX-- +.byte $80, $80 ; -------------- = -------------- + +font5C: +.byte $80, $80 ; -------------- = -------------- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $80 ; -------------- = -------------- + +font5D: +.byte $80, $80 ; -------------- = -------------- +.byte $BC, $80 ; -XXXX--------- = --XXXX-------- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $9E ; ---------XXXX- = --------XXXX-- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $BC, $80 ; -XXXX--------- = --XXXX-------- +.byte $80, $80 ; -------------- = -------------- + +font5E: +.byte $80, $80 ; -------------- = -------------- +.byte $B0, $86 ; -XX--------XX- = ----XX--XX---- +.byte $CC, $81 ; X--XX--------X = --XX--XX------ +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +font5F: +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX +.byte $B3, $E0 ; -XX--XXXX----- = XX--XX------XX +.byte $B3, $E0 ; -XX--XXXX----- = XX--XX------XX +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- diff --git a/src/apple2/rolevels.inc b/src/apple2/rolevels.inc new file mode 100644 index 0000000..4b19efb --- /dev/null +++ b/src/apple2/rolevels.inc @@ -0,0 +1,578 @@ +;----------------------------------------------------------------------------- +; rolevels.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "RODATA" + +level_01: +.byte $1A, $40, $14, $60, $1E, $60, $2F, $40, $F2, $04, $FF, $00, $2F, $40, $F2, $04 +.byte $F7, $00, $13, $50, $13, $50, $2D, $41, $41, $71, $48, $71, $2F, $40, $F2, $04 +.byte $3F, $10, $C2, $04, $F1, $00, $31, $40, $19, $50, $24, $41, $3F, $03, $53, $30 +.byte $2F, $40, $D2, $01, $2F, $40, $F2, $04, $B1, $05, $73, $04, $53, $71, $24, $40 +.byte $FB, $10, $2F, $40, $F2, $04, $FF, $11, $01, $04 +.byte $00 + + +level_02: +.byte $1F, $40, $3E, $04, $FE, $00, $12, $64, $FF, $00, $2F, $40, $53, $07, $16, $10 +.byte $2F, $40, $F2, $04, $F4, $11, $81, $04, $22, $04, $F5, $00, $41, $14, $21, $74 +.byte $22, $04, $15, $17, $F3, $00, $12, $40, $12, $40, $2F, $40, $91, $04, $21, $74 +.byte $22, $04, $87, $01, $91, $04, $21, $74, $22, $04, $F3, $00, $42, $70, $12, $47 +.byte $12, $40, $22, $40, $4F, $30, $31, $04, $21, $74, $22, $04, $D4, $01, $71, $04 +.byte $21, $74, $22, $04, $74, $07, $F4, $00, $2F, $40, $F2, $04, $FF, $11, $01, $04 +.byte $00 + + +level_03: +.byte $19, $40, $17, $60, $18, $20, $13, $60, $2F, $40, $21, $06, $C2, $04, $FF, $00 +.byte $2F, $40, $F2, $04, $FF, $00, $24, $41, $FB, $77, $2F, $40, $F2, $04, $6F, $10 +.byte $54, $01, $21, $42, $FE, $00, $21, $42, $46, $03, $F4, $00, $21, $42, $F8, $00 +.byte $62, $14, $1C, $60, $5C, $10, $24, $40, $6F, $10, $52, $04, $F5, $00, $A2, $14 +.byte $FF, $00, $2F, $41, $F1, $14 +.byte $00 + + +level_04: +.byte $16, $40, $16, $60, $F4, $44, $FF, $00, $2F, $40, $F2, $04, $F3, $00, $66, $10 +.byte $2F, $40, $B4, $01, $21, $41, $51, $01, $91, $01, $D2, $04, $B2, $01, $73, $01 +.byte $72, $04, $3F, $70, $C2, $04, $62, $01, $F2, $00, $32, $10, $2F, $40, $23, $01 +.byte $A2, $04, $3F, $30, $B1, $01, $2B, $40, $37, $10, $36, $10, $25, $40, $2F, $10 +.byte $14, $60, $32, $14, $F2, $00, $2B, $10, $2F, $40, $F2, $04, $FF, $11, $01, $04 +.byte $00 + + +level_05: +.byte $1F, $40, $41, $06, $A2, $04, $FF, $00, $2F, $40, $F2, $04, $FF, $00, $2F, $40 +.byte $81, $05, $62, $04, $D4, $10, $46, $71, $32, $04, $FD, $00, $22, $14, $F5, $00 +.byte $19, $50, $2F, $40, $2A, $03, $32, $04, $3A, $01, $F2, $00, $2F, $40, $F2, $04 +.byte $2B, $71, $47, $01, $51, $01, $27, $40, $1F, $40, $72, $04, $25, $10, $15, $40 +.byte $12, $40, $1D, $40, $24, $40, $12, $50, $15, $40, $12, $40, $72, $45, $52, $04 +.byte $7F, $14, $17, $41, $01, $04 +.byte $00 + + +level_06: +.byte $1F, $40, $F2, $04, $FF, $00, $2F, $40, $F2, $04, $FF, $00, $2F, $40, $51, $06 +.byte $92, $04, $73, $01, $42, $01, $45, $01, $52, $04, $22, $01, $B1, $04, $B3, $01 +.byte $2F, $40, $1E, $40, $2F, $40, $75, $01, $32, $04, $2F, $10, $D2, $04, $69, $01 +.byte $19, $41, $52, $04, $F1, $04, $1D, $60, $22, $40, $1C, $50, $1B, $40, $32, $14 +.byte $24, $03, $F2, $01, $72, $04, $FF, $00, $2F, $41, $F1, $14 +.byte $00 + + +level_07: +.byte $1D, $40, $F4, $44, $FF, $00, $2F, $40, $F2, $04, $E2, $01, $1C, $47, $12, $04 +.byte $F1, $00, $1D, $47, $26, $40, $52, $30, $31, $14, $A1, $76, $22, $74, $3D, $10 +.byte $12, $47, $1A, $07, $2F, $40, $11, $04, $91, $70, $32, $74, $1F, $10, $15, $47 +.byte $17, $67, $2D, $40, $31, $14, $D2, $74, $B5, $10, $11, $47, $18, $07, $12, $67 +.byte $2F, $40, $11, $04, $C1, $70, $2D, $40, $45, $47, $17, $67, $28, $40, $32, $10 +.byte $1F, $40, $12, $04, $D1, $04, $F1, $00, $2D, $41, $F3, $44 +.byte $00 + + +level_08: +.byte $11, $40, $17, $60, $16, $60, $12, $40, $1A, $40, $2F, $40, $11, $04, $21, $04 +.byte $A2, $04, $E2, $01, $1B, $40, $22, $14, $F1, $00, $1D, $40, $2F, $40, $11, $04 +.byte $D2, $04, $35, $10, $62, $10, $12, $41, $B2, $04, $F1, $00, $13, $40, $45, $10 +.byte $12, $14, $13, $01, $C1, $04, $91, $01, $32, $04, $73, $01, $61, $04, $D2, $04 +.byte $F1, $00, $15, $41, $82, $04, $1A, $10, $32, $10, $19, $40, $42, $14, $82, $01 +.byte $61, $04, $D2, $04, $32, $01, $B1, $04, $45, $01, $42, $04, $A3, $03, $12, $40 +.byte $12, $41, $B2, $04, $D1, $04, $21, $04, $51, $05, $72, $04, $FF, $11, $01, $04 +.byte $00 + + +level_09: +.byte $12, $40, $1F, $40, $C2, $04, $FF, $00, $2F, $40, $F2, $04, $FF, $00, $2F, $40 +.byte $F2, $04, $42, $10, $32, $10, $82, $10, $32, $10, $22, $10, $2F, $40, $F2, $04 +.byte $FD, $00, $22, $14, $22, $01, $23, $01, $28, $03, $B2, $04, $F6, $00, $32, $10 +.byte $22, $10, $22, $41, $FD, $00, $2F, $40, $F2, $04, $22, $01, $23, $01, $28, $01 +.byte $23, $01, $22, $01, $22, $04, $FD, $00, $22, $14, $FF, $00, $2F, $41, $F1, $14 +.byte $00 + + +level_10: +.byte $1A, $40, $11, $60, $31, $14, $11, $06, $11, $06, $A2, $14, $F1, $04, $41, $06 +.byte $92, $04, $69, $10, $1A, $40, $42, $14, $21, $06, $C1, $04, $E2, $04, $F1, $04 +.byte $4A, $10, $27, $40, $17, $17, $16, $40, $82, $14, $4B, $10, $1E, $40, $2F, $40 +.byte $17, $41, $34, $70, $25, $41, $A1, $04, $E2, $04, $17, $60, $71, $14, $C2, $01 +.byte $24, $41, $29, $70, $17, $41, $61, $06, $2F, $40, $16, $40, $13, $67, $42, $04 +.byte $7A, $02, $D2, $04, $3F, $10, $93, $01, $2F, $40, $F1, $04, $FF, $22, $02, $02 +.byte $00 + + +level_11: +.byte $7C, $40, $1B, $60, $2F, $40, $31, $05, $B2, $04, $FF, $00, $24, $41, $FB, $00 +.byte $2F, $40, $F2, $04, $46, $01, $42, $01, $72, $21, $52, $04, $F8, $00, $14, $60 +.byte $22, $14, $F8, $00, $16, $60, $22, $41, $22, $03, $F2, $00, $14, $60, $22, $14 +.byte $A9, $01, $41, $05, $62, $04, $B1, $06, $61, $06, $81, $01, $22, $04, $53, $07 +.byte $12, $10, $16, $60, $1B, $50, $2B, $40, $1F, $50, $32, $14, $2F, $10, $53, $01 +.byte $52, $04, $FF, $00, $2F, $41, $F1, $14 +.byte $00 + + +level_12: +.byte $11, $40, $17, $60, $16, $60, $13, $40, $19, $40, $2F, $40, $F2, $04, $E2, $07 +.byte $E2, $04, $FF, $00, $2F, $40, $F2, $04, $35, $10, $51, $74, $21, $04, $62, $71 +.byte $52, $04, $D1, $04, $21, $04, $C1, $01, $25, $40, $26, $10, $12, $40, $1D, $40 +.byte $22, $40, $1A, $10, $12, $40, $17, $40, $62, $14, $94, $01, $12, $40, $1D, $40 +.byte $25, $40, $1A, $10, $13, $41, $A2, $04, $F1, $00, $17, $40, $24, $10, $26, $41 +.byte $A1, $04, $51, $05, $41, $05, $22, $04, $A3, $01, $12, $40, $1B, $43, $22, $04 +.byte $D1, $04, $21, $04, $D2, $04, $D4, $14, $D1, $14 +.byte $00 + + +level_13: +.byte $FF, $44, $32, $40, $1F, $20, $C2, $04, $21, $02, $FC, $00, $22, $40, $13, $20 +.byte $F3, $11, $24, $01, $22, $40, $1F, $20, $C2, $04, $21, $02, $FC, $00, $22, $40 +.byte $13, $20, $22, $10, $42, $10, $52, $10, $42, $10, $12, $14, $21, $02, $FC, $00 +.byte $22, $40, $1F, $20, $C2, $04, $21, $02, $35, $01, $23, $01, $35, $01, $24, $01 +.byte $22, $40, $1F, $20, $C2, $04, $21, $02, $FC, $00, $22, $40, $13, $20, $32, $10 +.byte $32, $10, $42, $10, $42, $10, $22, $14, $21, $02, $FC, $00, $22, $40, $1F, $20 +.byte $C2, $04, $2F, $13, $B2, $31, $01, $04 +.byte $00 + + +level_14: +.byte $1F, $40, $F2, $04, $FF, $00, $2F, $40, $F2, $04, $FF, $00, $2F, $40, $F2, $04 +.byte $E1, $01, $1E, $20, $22, $40, $11, $12, $61, $01, $16, $20, $11, $12, $61, $01 +.byte $12, $20, $26, $40, $11, $12, $E1, $01, $16, $20, $2F, $40, $F2, $04, $41, $01 +.byte $16, $20, $11, $12, $61, $01, $16, $20, $11, $12, $2F, $40, $F2, $04, $11, $12 +.byte $61, $01, $14, $20, $64, $30, $11, $12, $42, $04, $FF, $00, $26, $40, $11, $12 +.byte $F7, $00, $2F, $40, $FF, $04, $F3, $44 +.byte $00 + + +level_15: +.byte $15, $40, $FC, $44, $FD, $00, $22, $24, $FD, $00, $22, $24, $7F, $03, $15, $31 +.byte $22, $24, $71, $06, $F4, $00, $12, $62, $25, $41, $21, $05, $F4, $00, $12, $62 +.byte $2F, $40, $82, $01, $21, $06, $22, $24, $61, $07, $42, $01, $E1, $06, $22, $24 +.byte $22, $01, $D2, $01, $81, $06, $22, $24, $F9, $00, $21, $10, $12, $62, $22, $41 +.byte $92, $01, $E1, $05, $22, $24, $F2, $00, $29, $10, $22, $24, $43, $01, $F2, $01 +.byte $42, $02, $2B, $40, $2F, $10, $22, $24, $FD, $00, $22, $24, $FF, $11, $01, $04 +.byte $00 + + +level_16: +.byte $1F, $40, $F2, $04, $FF, $00, $2F, $40, $F2, $04, $FF, $00, $2F, $40, $F2, $04 +.byte $14, $10, $14, $10, $12, $40, $17, $40, $36, $10, $2A, $40, $12, $40, $2F, $40 +.byte $23, $40, $16, $10, $12, $40, $38, $40, $62, $14, $A1, $04, $24, $04, $D2, $04 +.byte $2F, $73, $94, $30, $2F, $40, $F2, $04, $92, $04, $2C, $10, $14, $10, $29, $41 +.byte $F6, $00, $2F, $40, $41, $01, $51, $01, $42, $04, $F7, $00, $35, $50, $2F, $41 +.byte $F1, $14 +.byte $00 + + +level_17: +.byte $1F, $40, $D4, $04, $FF, $00, $2F, $40, $F2, $04, $FF, $00, $25, $40, $12, $50 +.byte $13, $50, $12, $50, $15, $50, $11, $50, $16, $50, $22, $41, $72, $70, $72, $70 +.byte $31, $70, $22, $70, $22, $14, $21, $76, $62, $70, $72, $70, $62, $70, $22, $74 +.byte $92, $70, $31, $70, $32, $70, $51, $76, $22, $07, $22, $47, $25, $07, $22, $07 +.byte $52, $30, $62, $70, $22, $74, $11, $07, $25, $07, $27, $07, $26, $07, $22, $07 +.byte $22, $47, $25, $07, $27, $07, $12, $07, $14, $67, $22, $07, $22, $47, $24, $07 +.byte $12, $60, $E3, $70, $22, $74, $22, $70, $52, $70, $F2, $70, $22, $74, $FF, $00 +.byte $2F, $40, $B4, $01, $2F, $41, $F1, $14 +.byte $00 + + +level_18: +.byte $1F, $40, $C1, $04, $22, $04, $FF, $00, $2F, $40, $F2, $04, $FF, $00, $2F, $40 +.byte $F2, $04, $22, $01, $23, $01, $28, $01, $23, $01, $24, $01, $2F, $40, $F2, $04 +.byte $2F, $10, $D2, $04, $B8, $01, $23, $01, $22, $01, $22, $04, $22, $01, $23, $01 +.byte $F6, $00, $2F, $40, $D2, $01, $2F, $40, $F2, $04, $22, $01, $23, $01, $28, $01 +.byte $23, $01, $22, $01, $22, $04, $2F, $10, $D2, $04, $FF, $00, $1F, $41, $F2, $11 +.byte $00 + + +level_19: +.byte $3F, $40, $D2, $04, $FF, $00, $2F, $40, $F2, $04, $FF, $00, $2F, $40, $F2, $04 +.byte $22, $01, $46, $01, $97, $01, $2F, $40, $F2, $04, $F3, $00, $39, $10, $22, $41 +.byte $A3, $01, $87, $01, $2F, $40, $F2, $04, $F3, $00, $2A, $10, $24, $41, $F4, $00 +.byte $72, $14, $64, $03, $35, $01, $C2, $04, $FF, $00, $4F, $40, $D4, $04, $F5, $11 +.byte $17, $41, $01, $04 +.byte $00 + + +level_20: +.byte $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FB, $00, $EF, $40, $31, $04, $21, $04 +.byte $91, $04, $F3, $00, $12, $40, $19, $40, $F5, $44, $21, $04, $92, $04, $FD, $00 +.byte $22, $14, $FF, $00, $2F, $43, $73, $30, $14, $70, $28, $40, $12, $50, $14, $50 +.byte $13, $50, $16, $50, $12, $10, $22, $41, $FD, $00, $24, $40, $2F, $10, $92, $04 +.byte $FF, $00, $2F, $41, $F1, $14 +.byte $00 + +;----------------------------------------------------------------------------- +levelsL: +.byte level_01, >level_02, >level_03, >level_04, >level_05, >level_06 +.byte >level_07, >level_08, >level_09, >level_10, >level_11, >level_12 +.byte >level_13, >level_14, >level_15, >level_16, >level_17, >level_18 +.byte >level_19, >level_20 + + +;----------------------------------------------------------------------------- +; This table maps tiles (1-8) to tile representations, per level. +; space is 00, floor1 is 1 and collapse is 7 & key is 8. Only 0 through 7 +; encoded in the level data. Key, door and switch added programatically to +; the level. The switch looks the same in both kong levels (only place it +; is present) so it doesn't need/get an entry. The door "tile" isn't seen, +; so isn't rendered. It's below the door sprite for collision purposes only. +; +; floor1, floor2, conveyor, wall, bush, rock, collapse, key - door & switch not here +levelTiles: +.byte $31, $00, $1C, $1F, $0D, $28, $27, $09 ; Level 1 +.byte $31, $00, $1C, $1F, $0D, $28, $27, $10 ; Level 2 +.byte $2E, $03, $1E, $15, $0D, $05, $2D, $09 ; Level 3 +.byte $31, $00, $1C, $1F, $0D, $34, $27, $09 ; Level 4 +.byte $31, $00, $07, $1F, $0D, $13, $27, $08 ; Level 5 +.byte $2F, $00, $1C, $1F, $0D, $0B, $31, $09 ; Level 6 +.byte $31, $00, $16, $1F, $0D, $17, $26, $09 ; Level 7 +.byte $31, $35, $1D, $1F, $0D, $13, $27, $14 ; Level 8 +.byte $31, $00, $07, $18, $0D, $13, $27, $09 ; Level 9 +.byte $12, $30, $1C, $1B, $0D, $0F, $20, $01 ; Level 10 +.byte $31, $33, $21, $1A, $04, $03, $27, $0A ; Level 11 +.byte $31, $35, $1D, $1F, $0D, $13, $27, $14 ; Level 12 +.byte $29, $23, $07, $18, $0D, $13, $31, $06 ; Level 13 +.byte $2C, $2B, $07, $22, $00, $00, $31, $19 ; Level 14 +.byte $32, $2A, $21, $1A, $04, $03, $27, $11 ; Level 15 +.byte $31, $31, $1D, $1B, $0E, $13, $27, $02 ; Level 16 +.byte $31, $00, $1C, $25, $0D, $0C, $26, $09 ; Level 17 +.byte $31, $00, $1C, $24, $0D, $13, $27, $09 ; Level 18 +.byte $31, $00, $1C, $1F, $0D, $13, $27, $09 ; Level 19 +.byte $31, $00, $1C, $1F, $04, $13, $27, $09 ; Level 20 + +; This table says which color index to use, to color a +; tile (1-8), per level. The colors are: +; 00 White - 01 Green - 02 Orange - 03 Purple - 04 Blue +; The keys are done as a color animation so at inctance +; time they are left white. +; +; floor1, floor2, conveyor, wall, bush, rock, collapse, key - door & switch not here +levelMasks: +.byte $01, $02, $03, $02, $01, $02, $04, $00 ; Level 1 +.byte $03, $02, $03, $02, $01, $02, $04, $00 ; Level 2 +.byte $04, $00, $03, $04, $01, $03, $01, $00 ; Level 3 +.byte $02, $00, $03, $04, $01, $00, $04, $00 ; Level 4 +.byte $04, $02, $02, $01, $00, $02, $01, $00 ; Level 5 +.byte $01, $00, $04, $02, $01, $00, $04, $00 ; Level 6 +.byte $03, $02, $01, $04, $01, $00, $02, $00 ; Level 7 +.byte $02, $00, $01, $00, $01, $02, $04, $00 ; Level 8 +.byte $03, $02, $01, $02, $01, $02, $04, $00 ; Level 9 +.byte $01, $00, $01, $02, $01, $01, $02, $00 ; Level 10 +.byte $04, $00, $03, $02, $02, $00, $01, $00 ; Level 11 +.byte $03, $00, $00, $02, $01, $02, $04, $00 ; Level 12 +.byte $04, $03, $01, $02, $01, $02, $04, $00 ; Level 13 +.byte $04, $03, $00, $04, $01, $02, $04, $00 ; Level 14 +.byte $04, $02, $00, $00, $02, $00, $04, $00 ; Level 15 +.byte $02, $03, $00, $03, $01, $02, $04, $00 ; Level 16 +.byte $01, $02, $01, $02, $01, $00, $04, $00 ; Level 17 +.byte $02, $02, $03, $03, $01, $02, $04, $00 ; Level 18 +.byte $01, $02, $00, $02, $01, $02, $04, $00 ; Level 19 +.byte $02, $02, $04, $01, $00, $02, $04, $00 ; Level 20 + +collapseHeight: +.byte 8, 7, 6, 5, 4, 3, 2, 1 + +conveyorDirections: +.byte 2, 1, 2, 1, 2, 2, 2, 1, 1, 2, 2, 1, 1, 2 +.byte 2, 2, 1, 2, 2, 1 + +skylabXPos: +.byte $01, $15, $0B, $09, $1D, $13, $11, $05 +.byte $1B, $19, $0D, $03 + +willyx: +.byte $02, $02, $02, $1D, $01, $0F, $02, $02 +.byte $01, $01, $03, $02, $1D, $1D, $02, $02 +.byte $01, $1D, $0E, $1B, $0F + +willyy: +.byte $68, $68, $68, $68, $18, $18, $68, $68 +.byte $68, $20, $08, $68, $68, $68, $68, $68 +.byte $18, $68, $50, $68, $58 + +willyStartDir: +.byte 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 +.byte 0, 0, 1, 1, 0, 1, 0 + +doorL: +.byte <(levelLayout + $1BE) ; level 0 +.byte <(levelLayout + $1DE) ; level 1 +.byte <(levelLayout + $17E) ; level 2 +.byte <(levelLayout + $03E) ; level 3 +.byte <(levelLayout + $1CF) ; level 4 +.byte <(levelLayout + $01E) ; level 5 +.byte <(levelLayout + $1CF) ; level 6 +.byte <(levelLayout + $1CF) ; level 7 +.byte <(levelLayout + $001) ; level 8 +.byte <(levelLayout + $1CC) ; level 9 +.byte <(levelLayout + $021) ; level 10 +.byte <(levelLayout + $1CF) ; level 11 +.byte <(levelLayout + $1C1) ; level 12 +.byte <(levelLayout + $010) ; level 13 +.byte <(levelLayout + $061) ; level 14 +.byte <(levelLayout + $0CC) ; level 15 +.byte <(levelLayout + $03E) ; level 16 +.byte <(levelLayout + $03E) ; level 17 +.byte <(levelLayout + $041) ; level 18 +.byte <(levelLayout + $0B3) ; level 19 + +doorH: +.byte >(levelLayout + $1BE) ; level 0 +.byte >(levelLayout + $1DE) ; level 1 +.byte >(levelLayout + $17E) ; level 2 +.byte >(levelLayout + $03E) ; level 3 +.byte >(levelLayout + $1CF) ; level 4 +.byte >(levelLayout + $01E) ; level 5 +.byte >(levelLayout + $1CF) ; level 6 +.byte >(levelLayout + $1CF) ; level 7 +.byte >(levelLayout + $001) ; level 8 +.byte >(levelLayout + $1CC) ; level 9 +.byte >(levelLayout + $021) ; level 10 +.byte >(levelLayout + $1CF) ; level 11 +.byte >(levelLayout + $1C1) ; level 12 +.byte >(levelLayout + $010) ; level 13 +.byte >(levelLayout + $061) ; level 14 +.byte >(levelLayout + $0CC) ; level 15 +.byte >(levelLayout + $03E) ; level 16 +.byte >(levelLayout + $03E) ; level 17 +.byte >(levelLayout + $041) ; level 18 +.byte >(levelLayout + $0B3) ; level 19 + +door_color1: +.byte $01, $03, $01, $02, $03, $04, $01, $02 +.byte $03, $04, $00, $01, $01, $01, $01, $01 +.byte $01, $01, $01, $01, $01 + +door_color2: +.byte $02, $04, $04, $03, $02, $01, $01, $02 +.byte $03, $04, $01, $02, $02, $02, $02, $02 +.byte $02, $02, $02, $02, $02 + +keyx: +.byte $09, $1D, $10, $18, $1E +.byte $07, $18, $1A, $03, $13 +.byte $06, $0F, $17, $1E, $15 +.byte $01, $0C, $19, $10, $1E +.byte $1E, $0A, $1D, $07, $09 +.byte $0F, $11, $1E, $01, $0D +.byte $1E, $14, $1B, $13, $1E +.byte $0D, $0E, $02, $1D, $FF +.byte $10, $FF, $FF, $FF, $FF +.byte $15, $0E, $0C, $12, $1E +.byte $18, $1E, $01, $13, $1E +.byte $0F, $10, $02, $1D, $1A +.byte $1A, $0A, $13, $1A, $0B +.byte $17, $03, $1B, $10, $FF +.byte $19, $0C, $1A, $FF, $FF +.byte $1E, $0D, $01, $11, $FF +.byte $18, $0F, $01, $13, $1A +.byte $10, $FF, $FF, $FF, $FF +.byte $1E, $01, $1E, $FF, $FF +.byte $17, $1E, $0A, $0E, $13 + +keyyL: +.byte $00, $00, $20, $80, $C0 +.byte $20, $20, $E0, $20, $80 +.byte $00, $00, $00, $C0, $C0 +.byte $00, $20, $20, $C0, $C0 +.byte $20, $C0, $E0, $80, $80 +.byte $C0, $C0, $E0, $40, $60 +.byte $60, $C0, $E0, $40, $60 +.byte $40, $C0, $00, $A0, $E0 +.byte $20, $E0, $E0, $E0, $E0 +.byte $40, $20, $C0, $00, $20 +.byte $00, $20, $80, $C0, $A0 +.byte $60, $E0, $C0, $A0, $A0 +.byte $60, $C0, $20, $20, $80 +.byte $40, $00, $E0, $E0, $E0 +.byte $40, $C0, $C0, $E0, $E0 +.byte $40, $E0, $00, $40, $E0 +.byte $A0, $E0, $20, $40, $60 +.byte $20, $E0, $E0, $E0, $E0 +.byte $20, $A0, $80, $E0, $E0 +.byte $A0, $C0, $60, $60, $60 + +keyyH: +.byte $00, $00, $00, $00, $00 +.byte $00, $00, $00, $01, $01 +.byte $00, $00, $00, $00, $00 +.byte $00, $00, $00, $00, $00 +.byte $00, $00, $00, $01, $01 +.byte $00, $00, $00, $01, $01 +.byte $00, $00, $00, $01, $01 +.byte $00, $00, $01, $01, $FF +.byte $00, $FF, $FF, $FF, $FF +.byte $00, $00, $00, $01, $00 +.byte $00, $00, $00, $00, $01 +.byte $00, $00, $00, $01, $00 +.byte $00, $00, $01, $01, $01 +.byte $00, $01, $00, $00, $FF +.byte $00, $00, $01, $FF, $FF +.byte $00, $00, $00, $01, $FF +.byte $00, $00, $01, $01, $01 +.byte $00, $FF, $FF, $FF, $FF +.byte $00, $00, $01, $FF, $FF +.byte $00, $00, $01, $01, $01 + +sprites_x: +.byte $08, $1D, $12, $1D, $1D, $13, $10, $12 +.byte $1D, $01, $07, $1D, $0C, $04, $0F, $0F +.byte $06, $0E, $08, $18, $1D, $0F, $0A, $11 +.byte $0F, $09, $0B, $12, $0F, $0F, $0C, $10 +.byte $05, $0A, $14, $19, $01, $09, $0C, $08 +.byte $12, $0C, $0F, $0E, $0F, $0C, $03, $15 +.byte $1A, $01, $09, $0B, $19, $0F, $0F, $07 +.byte $10, $14, $12, $05, $01, $00, $00, $00 +.byte $0F, $11, $09, $0F, $15, $01, $09, $01 +.byte $12, $1A, $0C, $05, $0C, $03, $0A, $13 +.byte $1B, $1D, $0C, $10, $10, $10, $05, $0A +.byte $14, $19, $1D, $18, $1C, $1D, $10, $05 +.byte $0B, $10, $01, $07, $18, $13, $13, $0F +.byte $0F + +sprites_y: +.byte $38, $68, $18, $68, $68, $68, $18, $18 +.byte $58, $68, $68, $08, $18, $38, $01, $68 +.byte $40, $40, $68, $68, $00, $08, $40, $68 +.byte $68, $68, $58, $38, $00, $68, $18, $50 +.byte $08, $08, $08, $08, $00, $38, $50, $68 +.byte $28, $68, $18, $38, $68, $08, $20, $30 +.byte $30, $08, $68, $58, $30, $00, $68, $08 +.byte $20, $38, $50, $08, $68, $00, $00, $00 +.byte $00, $68, $28, $40, $50, $18, $68, $50 +.byte $38, $28, $28, $68, $68, $40, $40, $30 +.byte $00, $08, $18, $50, $30, $68, $08, $08 +.byte $08, $08, $00, $18, $30, $48, $68, $40 +.byte $38, $50, $08, $68, $30, $28, $28, $00 +.byte $68 + +sprites_min: +.byte $08, $1D, $01, $0C, $1D, $01, $01, $12 +.byte $1D, $01, $06, $1D, $01, $04, $01, $0F +.byte $06, $0E, $08, $18, $1D, $0F, $02, $11 +.byte $0F, $01, $0B, $12, $00, $0F, $0C, $0C +.byte $05, $05, $05, $05, $01, $09, $08, $04 +.byte $11, $0C, $0F, $0E, $05, $02, $20, $30 +.byte $04, $01, $01, $0B, $19, $00, $0F, $07 +.byte $07, $0A, $07, $08, $01, $00, $00, $00 +.byte $0F, $11, $24, $24, $20, $01, $01, $01 +.byte $12, $19, $0C, $05, $0C, $40, $03, $01 +.byte $04, $1D, $0C, $0C, $0C, $0C, $05, $05 +.byte $05, $05, $1D, $17, $16, $17, $0D, $02 +.byte $30, $04, $01, $07, $28, $13, $13, $00 +.byte $0F + +sprites_max: +.byte $10, $1E, $13, $1E, $1E, $14, $11, $1E +.byte $1E, $0B, $10, $1E, $0D, $0D, $58, $10 +.byte $0E, $16, $15, $1E, $1E, $1E, $0B, $1E +.byte $10, $0A, $10, $16, $00, $10, $13, $13 +.byte $65, $65, $65, $65, $02, $0F, $0F, $1B +.byte $16, $0D, $19, $13, $14, $39, $65, $65 +.byte $65, $02, $0A, $10, $1D, $00, $10, $1E +.byte $1E, $1B, $1E, $65, $02, $49, $39, $21 +.byte $10, $14, $67, $67, $69, $02, $13, $08 +.byte $18, $1E, $0D, $09, $1A, $67, $61, $41 +.byte $61, $1E, $13, $12, $12, $13, $69, $69 +.byte $69, $69, $1E, $1E, $1E, $1E, $1E, $67 +.byte $67, $51, $02, $17, $68, $14, $14, $59 +.byte $10 + +sprites_speed: +.byte $02, $04, $02, $02, $04, $02, $02, $02 +.byte $04, $02, $02, $04, $02, $02, $01, $04 +.byte $02, $02, $02, $02, $04, $02, $02, $02 +.byte $04, $02, $01, $02, $04, $04, $02, $01 +.byte $01, $02, $01, $02, $04, $02, $01, $02 +.byte $02, $04, $02, $01, $02, $02, $01, $01 +.byte $02, $04, $02, $01, $02, $04, $04, $02 +.byte $01, $02, $01, $02, $04, $03, $02, $01 +.byte $04, $02, $02, $01, $02, $04, $02, $02 +.byte $02, $01, $04, $01, $02, $02, $02, $01 +.byte $04, $04, $01, $01, $02, $02, $03, $02 +.byte $04, $01, $04, $02, $02, $01, $02, $03 +.byte $02, $01, $04, $02, $01, $04, $04, $02 +.byte $04 + +sprites_dir: +.byte $00, $00, $01, $01, $00, $01, $01, $00 +.byte $00, $00, $00, $00, $01, $00, $00, $00 +.byte $00, $01, $01, $01, $00, $00, $01, $00 +.byte $00, $01, $00, $00, $00, $00, $00, $00 +.byte $00, $00, $00, $00, $00, $00, $00, $00 +.byte $00, $00, $00, $00, $01, $00, $00, $00 +.byte $01, $00, $01, $00, $00, $00, $00, $00 +.byte $00, $01, $00, $00, $00, $00, $00, $00 +.byte $00, $00, $00, $00, $01, $00, $00, $00 +.byte $00, $00, $00, $00, $00, $00, $01, $00 +.byte $00, $00, $00, $00, $00, $01, $00, $00 +.byte $00, $00, $00, $00, $00, $01, $00, $00 +.byte $01, $00, $00, $00, $00, $00, $00, $00 +.byte $00 + +sprites_bitmaps: +.byte $00, $93, $09, $09, $94, $12, $12, $12 +.byte $95, $1A, $1A, $96, $23, $23, $22, $97 +.byte $2B, $2B, $2B, $2B, $98, $33, $33, $33 +.byte $99, $3F, $3F, $3F, $3B, $9A, $47, $47 +.byte $43, $43, $43, $43, $9B, $4B, $4B, $4B +.byte $4B, $9C, $57, $57, $57, $53, $53, $53 +.byte $53, $9D, $3F, $3F, $3F, $3B, $9E, $5F +.byte $5F, $5F, $5F, $5B, $9F, $63, $63, $63 +.byte $A0, $6F, $6B, $6B, $6B, $A1, $73, $73 +.byte $73, $73, $A2, $7F, $7F, $7B, $7B, $7B +.byte $7B, $A3, $47, $47, $47, $47, $83, $83 +.byte $83, $83, $A4, $8B, $8B, $8B, $8B, $87 +.byte $87, $87, $A5, $8F, $5B, $A6, $A7, $11 +.byte $08 + +sprites_colors: +.byte $02, $00, $02, $04, $00, $01, $03, $02 +.byte $00, $02, $01, $00, $02, $00, $00, $00 +.byte $02, $03, $04, $02, $00, $04, $03, $02 +.byte $00, $01, $03, $04, $01, $00, $01, $04 +.byte $03, $01, $04, $02, $00, $02, $00, $03 +.byte $04, $00, $02, $01, $00, $03, $01, $02 +.byte $04, $00, $01, $02, $04, $01, $00, $03 +.byte $01, $02, $04, $00, $00, $00, $02, $04 +.byte $00, $04, $02, $00, $01, $00, $01, $02 +.byte $03, $04, $00, $00, $04, $04, $02, $00 +.byte $03, $00, $01, $04, $03, $02, $03, $01 +.byte $04, $00, $00, $00, $04, $03, $00, $00 +.byte $02, $04, $00, $02, $00, $00, $04, $00 +.byte $00 + +sprites_class: +.byte $00, $82, $00, $00, $82, $00, $00, $00 +.byte $82, $00, $00, $82, $00, $00, $13, $82 +.byte $00, $00, $00, $00, $82, $00, $00, $00 +.byte $82, $02, $06, $02, $2B, $82, $02, $02 +.byte $03, $03, $03, $03, $82, $00, $00, $00 +.byte $00, $82, $02, $02, $02, $03, $03, $03 +.byte $03, $82, $02, $06, $02, $2B, $82, $02 +.byte $02, $02, $02, $03, $82, $49, $49, $49 +.byte $82, $02, $03, $03, $03, $82, $00, $00 +.byte $00, $00, $82, $02, $02, $03, $03, $03 +.byte $03, $82, $02, $02, $02, $02, $03, $03 +.byte $03, $03, $82, $02, $02, $02, $02, $03 +.byte $03, $03, $82, $02, $03, $82, $00, $19 +.byte $82 + +level_sprites_offset: +.byte $00, $02, $05, $09, $0C, $10, $15, $19 +.byte $1E, $25, $2A, $32, $37, $3D, $41, $46 +.byte $4B, $52, $5B, $63, $67 + +level_sprites_count: +.byte $02, $03, $04, $03, $04, $05, $04, $05 +.byte $07, $05, $08, $05, $06, $04, $05, $05 +.byte $07, $09, $08, $04, $02 diff --git a/src/apple2/rosprites.inc b/src/apple2/rosprites.inc new file mode 100644 index 0000000..2c0b909 --- /dev/null +++ b/src/apple2/rosprites.inc @@ -0,0 +1,3209 @@ +;----------------------------------------------------------------------------- +; rosprites.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "RODATA" + +;----------------------------------------------------------------------------- +; The Willy sprites and the cheat-boot are stored in white, 2bpp since they are +; not re-instanced. They are drawn from where they reside when loaded. +; To save memory, the other sprites are stored as 1 bpp. The single bits +; get doubled in the instance, and the high bit is set in the bytes, before color +; is applied. The method for bit doubling is not quite a double, but a lookup +; table is used. The "bit" format the sprites are stored in works like this: Each +; byte is composed of 2 nibbles that will each become a 7 bit byte, and the msb +; will automatically be turned on. Assume the nibbles are: abcd efgh then the +; "decompression" will make 2 bytes that will have the format 1abbccdd 1eeffggh. +; a and h together form the "split" pixel, 1 is the msb that's turned on and +; bcdefg are doubled through the 16 byte lookup table named binDouble. +sprites: +sprite00: +.byte $00, $1E, $00, $00 ; ---------XXXX--------------- = --------XXXX---------------- +.byte $70, $1F, $00, $00 ; XXX------XXXXX-------------- = ----XXXXXXXX---------------- +.byte $7C, $07, $00, $00 ; XXXXX------XXX-------------- = --XXXXXXXX------------------ +.byte $30, $06, $00, $00 ; -XX--------XX--------------- = ----XX--XX------------------ +.byte $70, $1F, $00, $00 ; XXX------XXXXX-------------- = ----XXXXXXXX---------------- +.byte $70, $07, $00, $00 ; XXX--------XXX-------------- = ----XXXXXX------------------ +.byte $40, $01, $00, $00 ; X------------X-------------- = ------XX-------------------- +.byte $70, $07, $00, $00 ; XXX--------XXX-------------- = ----XXXXXX------------------ +.byte $7C, $1F, $00, $00 ; XXXXX----XXXXX-------------- = --XXXXXXXXXX---------------- +.byte $7C, $1F, $00, $00 ; XXXXX----XXXXX-------------- = --XXXXXXXXXX---------------- +.byte $3F, $7E, $00, $00 ; -XXXXXXXXXXXX--------------- = XXXXXX--XXXXXX-------------- +.byte $7F, $79, $00, $00 ; XXXXXXXXXXX--X-------------- = XXXXXXXX--XXXX-------------- +.byte $70, $07, $00, $00 ; XXX--------XXX-------------- = ----XXXXXX------------------ +.byte $3C, $1E, $00, $00 ; -XXXX----XXXX--------------- = --XXXX--XXXX---------------- +.byte $7C, $1F, $00, $00 ; XXXXX----XXXXX-------------- = --XXXXXXXXXX---------------- +.byte $3C, $7E, $00, $00 ; -XXXX--XXXXXX--------------- = --XXXX--XXXXXX-------------- + +sprite01: +.byte $00, $60, $03, $00 ; -------XX----------XX------- = ------------XXXX------------ +.byte $00, $7E, $03, $00 ; -------XXXXXX------XX------- = --------XXXXXXXX------------ +.byte $40, $7F, $00, $00 ; X------XXXXXXX-------------- = ------XXXXXXXX-------------- +.byte $00, $66, $00, $00 ; -------XX--XX--------------- = --------XX--XX-------------- +.byte $00, $7E, $03, $00 ; -------XXXXXX------XX------- = --------XXXXXXXX------------ +.byte $00, $7E, $00, $00 ; -------XXXXXX--------------- = --------XXXXXX-------------- +.byte $00, $18, $00, $00 ; ---------XX----------------- = ----------XX---------------- +.byte $00, $7E, $00, $00 ; -------XXXXXX--------------- = --------XXXXXX-------------- +.byte $40, $67, $03, $00 ; X------XX--XXX-----XX------- = ------XXXX--XXXX------------ +.byte $40, $67, $03, $00 ; X------XX--XXX-----XX------- = ------XXXX--XXXX------------ +.byte $40, $67, $03, $00 ; X------XX--XXX-----XX------- = ------XXXX--XXXX------------ +.byte $40, $7F, $03, $00 ; X------XXXXXXX-----XX------- = ------XXXXXXXXXX------------ +.byte $00, $7E, $00, $00 ; -------XXXXXX--------------- = --------XXXXXX-------------- +.byte $00, $18, $00, $00 ; ---------XX----------------- = ----------XX---------------- +.byte $00, $18, $00, $00 ; ---------XX----------------- = ----------XX---------------- +.byte $00, $78, $00, $00 ; -------XXXX----------------- = ----------XXXX-------------- + + +sprite02: +.byte $00, $00, $3C, $00 ; ---------------XXXX--------- = ----------------XXXX-------- +.byte $00, $60, $3F, $00 ; -------XX------XXXXXX------- = ------------XXXXXXXX-------- +.byte $00, $78, $0F, $00 ; -------XXXX------XXXX------- = ----------XXXXXXXX---------- +.byte $00, $60, $0C, $00 ; -------XX--------XX--------- = ------------XX--XX---------- +.byte $00, $60, $3F, $00 ; -------XX------XXXXXX------- = ------------XXXXXXXX-------- +.byte $00, $60, $0F, $00 ; -------XX--------XXXX------- = ------------XXXXXX---------- +.byte $00, $00, $03, $00 ; -------------------XX------- = --------------XX------------ +.byte $00, $60, $0F, $00 ; -------XX--------XXXX------- = ------------XXXXXX---------- +.byte $00, $78, $3F, $00 ; -------XXXX----XXXXXX------- = ----------XXXXXXXXXX-------- +.byte $00, $78, $3F, $00 ; -------XXXX----XXXXXX------- = ----------XXXXXXXXXX-------- +.byte $00, $7E, $7C, $01 ; -------XXXXXX-XXXXX--------X = --------XXXXXX--XXXXXX------ +.byte $00, $7E, $73, $01 ; -------XXXXXX-XXX--XX------X = --------XXXXXXXX--XXXX------ +.byte $00, $60, $0F, $00 ; -------XX--------XXXX------- = ------------XXXXXX---------- +.byte $00, $78, $3C, $00 ; -------XXXX----XXXX--------- = ----------XXXX--XXXX-------- +.byte $00, $18, $3F, $00 ; ---------XX----XXXXXX------- = ----------XX--XXXXXX-------- +.byte $00, $78, $7C, $01 ; -------XXXX---XXXXX--------X = ----------XXXX--XXXXXX------ + +sprite03: +.byte $00, $00, $40, $07 ; --------------X----------XXX = --------------------XXXX---- +.byte $00, $00, $7C, $07 ; --------------XXXXX------XXX = ----------------XXXXXXXX---- +.byte $00, $00, $7F, $01 ; --------------XXXXXXX------X = --------------XXXXXXXX------ +.byte $00, $00, $4C, $01 ; --------------X--XX--------X = ----------------XX--XX------ +.byte $00, $00, $7C, $07 ; --------------XXXXX------XXX = ----------------XXXXXXXX---- +.byte $00, $00, $7C, $01 ; --------------XXXXX--------X = ----------------XXXXXX------ +.byte $00, $00, $30, $00 ; ---------------XX----------- = ------------------XX-------- +.byte $00, $00, $7C, $01 ; --------------XXXXX--------X = ----------------XXXXXX------ +.byte $00, $00, $7F, $07 ; --------------XXXXXXX----XXX = --------------XXXXXXXXXX---- +.byte $00, $60, $7F, $1F ; -------XX-----XXXXXXX--XXXXX = ------------XXXXXXXXXXXXXX-- +.byte $00, $78, $7F, $7F ; -------XXXX---XXXXXXXXXXXXXX = ----------XXXXXXXXXXXXXXXXXX +.byte $00, $78, $7C, $79 ; -------XXXX---XXXXX--XXXX--X = ----------XXXX--XXXXXX--XXXX +.byte $00, $00, $7C, $07 ; --------------XXXXX------XXX = ----------------XXXXXXXX---- +.byte $00, $00, $4F, $67 ; --------------X--XXXXXX--XXX = --------------XXXX--XXXX--XX +.byte $00, $60, $03, $7E ; -------XX----------XXXXXXXX- = ------------XXXX------XXXXXX +.byte $00, $60, $0F, $18 ; -------XX--------XXXX--XX--- = ------------XXXXXX------XX-- + +sprite04: +.byte $70, $01, $00, $00 ; XXX----------X-------------- = ----XXXX-------------------- +.byte $70, $1F, $00, $00 ; XXX------XXXXX-------------- = ----XXXXXXXX---------------- +.byte $40, $7F, $00, $00 ; X------XXXXXXX-------------- = ------XXXXXXXX-------------- +.byte $40, $19, $00, $00 ; X--------XX--X-------------- = ------XX--XX---------------- +.byte $70, $1F, $00, $00 ; XXX------XXXXX-------------- = ----XXXXXXXX---------------- +.byte $40, $1F, $00, $00 ; X--------XXXXX-------------- = ------XXXXXX---------------- +.byte $00, $06, $00, $00 ; -----------XX--------------- = --------XX------------------ +.byte $40, $1F, $00, $00 ; X--------XXXXX-------------- = ------XXXXXX---------------- +.byte $70, $7F, $00, $00 ; XXX----XXXXXXX-------------- = ----XXXXXXXXXX-------------- +.byte $7C, $7F, $03, $00 ; XXXXX--XXXXXXX-----XX------- = --XXXXXXXXXXXXXX------------ +.byte $7F, $7F, $0F, $00 ; XXXXXXXXXXXXXX---XXXX------- = XXXXXXXXXXXXXXXXXX---------- +.byte $4F, $1F, $0F, $00 ; X--XXXX--XXXXX---XXXX------- = XXXX--XXXXXX--XXXX---------- +.byte $70, $1F, $00, $00 ; XXX------XXXXX-------------- = ----XXXXXXXX---------------- +.byte $73, $79, $00, $00 ; XXX--XXXXXX--X-------------- = XX--XXXX--XXXX-------------- +.byte $3F, $60, $03, $00 ; -XXXXXXXX----------XX------- = XXXXXX------XXXX------------ +.byte $0C, $78, $03, $00 ; ---XX--XXXX--------XX------- = --XX------XXXXXX------------ + +sprite05: +.byte $00, $1E, $00, $00 ; ---------XXXX--------------- = --------XXXX---------------- +.byte $00, $7E, $03, $00 ; -------XXXXXX------XX------- = --------XXXXXXXX------------ +.byte $00, $78, $0F, $00 ; -------XXXX------XXXX------- = ----------XXXXXXXX---------- +.byte $00, $18, $03, $00 ; ---------XX--------XX------- = ----------XX--XX------------ +.byte $00, $7E, $03, $00 ; -------XXXXXX------XX------- = --------XXXXXXXX------------ +.byte $00, $78, $03, $00 ; -------XXXX--------XX------- = ----------XXXXXX------------ +.byte $00, $60, $00, $00 ; -------XX------------------- = ------------XX-------------- +.byte $00, $78, $03, $00 ; -------XXXX--------XX------- = ----------XXXXXX------------ +.byte $00, $7E, $0F, $00 ; -------XXXXXX----XXXX------- = --------XXXXXXXXXX---------- +.byte $00, $7E, $0F, $00 ; -------XXXXXX----XXXX------- = --------XXXXXXXXXX---------- +.byte $40, $1F, $3F, $00 ; X--------XXXXX-XXXXXX------- = ------XXXXXX--XXXXXX-------- +.byte $40, $67, $3F, $00 ; X------XX--XXX-XXXXXX------- = ------XXXX--XXXXXXXX-------- +.byte $00, $78, $03, $00 ; -------XXXX--------XX------- = ----------XXXXXX------------ +.byte $00, $1E, $0F, $00 ; ---------XXXX----XXXX------- = --------XXXX--XXXX---------- +.byte $00, $7E, $0C, $00 ; -------XXXXXX----XX--------- = --------XXXXXX--XX---------- +.byte $40, $1F, $0F, $00 ; X--------XXXXX---XXXX------- = ------XXXXXX--XXXX---------- + +sprite06: +.byte $00, $60, $03, $00 ; -------XX----------XX------- = ------------XXXX------------ +.byte $00, $60, $3F, $00 ; -------XX------XXXXXX------- = ------------XXXXXXXX-------- +.byte $00, $00, $7F, $01 ; --------------XXXXXXX------X = --------------XXXXXXXX------ +.byte $00, $00, $33, $00 ; ---------------XX--XX------- = --------------XX--XX-------- +.byte $00, $60, $3F, $00 ; -------XX------XXXXXX------- = ------------XXXXXXXX-------- +.byte $00, $00, $3F, $00 ; ---------------XXXXXX------- = --------------XXXXXX-------- +.byte $00, $00, $0C, $00 ; -----------------XX--------- = ----------------XX---------- +.byte $00, $00, $3F, $00 ; ---------------XXXXXX------- = --------------XXXXXX-------- +.byte $00, $60, $7F, $01 ; -------XX-----XXXXXXX------X = ------------XXXXXXXXXX------ +.byte $00, $60, $73, $01 ; -------XX-----XXX--XX------X = ------------XXXX--XXXX------ +.byte $00, $60, $73, $01 ; -------XX-----XXX--XX------X = ------------XXXX--XXXX------ +.byte $00, $60, $73, $01 ; -------XX-----XXX--XX------X = ------------XXXX--XXXX------ +.byte $00, $00, $3F, $00 ; ---------------XXXXXX------- = --------------XXXXXX-------- +.byte $00, $00, $0C, $00 ; -----------------XX--------- = ----------------XX---------- +.byte $00, $00, $0C, $00 ; -----------------XX--------- = ----------------XX---------- +.byte $00, $00, $0F, $00 ; -----------------XXXX------- = --------------XXXX---------- + +sprite07: +.byte $00, $00, $3C, $00 ; ---------------XXXX--------- = ----------------XXXX-------- +.byte $00, $00, $7C, $07 ; --------------XXXXX------XXX = ----------------XXXXXXXX---- +.byte $00, $00, $70, $1F ; --------------XXX------XXXXX = ------------------XXXXXXXX-- +.byte $00, $00, $30, $06 ; ---------------XX--------XX- = ------------------XX--XX---- +.byte $00, $00, $7C, $07 ; --------------XXXXX------XXX = ----------------XXXXXXXX---- +.byte $00, $00, $70, $07 ; --------------XXX--------XXX = ------------------XXXXXX---- +.byte $00, $00, $40, $01 ; --------------X------------X = --------------------XX------ +.byte $00, $00, $70, $07 ; --------------XXX--------XXX = ------------------XXXXXX---- +.byte $00, $00, $7C, $1F ; --------------XXXXX----XXXXX = ----------------XXXXXXXXXX-- +.byte $00, $00, $7C, $1F ; --------------XXXXX----XXXXX = ----------------XXXXXXXXXX-- +.byte $00, $00, $3F, $7E ; ---------------XXXXXXXXXXXX- = --------------XXXXXX--XXXXXX +.byte $00, $00, $4F, $7F ; --------------X--XXXXXXXXXXX = --------------XXXX--XXXXXXXX +.byte $00, $00, $70, $07 ; --------------XXX--------XXX = ------------------XXXXXX---- +.byte $00, $00, $3C, $1E ; ---------------XXXX----XXXX- = ----------------XXXX--XXXX-- +.byte $00, $00, $7C, $19 ; --------------XXXXX----XX--X = ----------------XXXXXX--XX-- +.byte $00, $00, $3F, $1E ; ---------------XXXXXX--XXXX- = --------------XXXXXX--XXXX-- + +sprite08: +.byte $8F, $91 ; X---XXXXX--X---X = ------XXXXXXXXXX----XX------ +.byte $C3, $F1 ; XX----XXXXXX---X = ----XXXXXX----XXXXXXXX------ +.byte $83, $F1 ; X-----XXXXXX---X = ------XXXX----XXXXXXXX------ +.byte $0E, $91 ; ----XXX-X--X---X = --------XXXXXXXX----XX------ +.byte $9F, $10 ; X--XXXXX---X---- = XX----XXXXXXXXXX------------ +.byte $AF, $30 ; X-X-XXXX--XX---- = --XX--XXXXXXXXXXXX---------- +.byte $FF, $70 ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- +.byte $AF, $00 ; X-X-XXXX-------- = --XX--XXXXXXXX-------------- +.byte $9F, $70 ; X--XXXXX-XXX---- = XX----XXXXXXXXXXXXXX-------- +.byte $8F, $30 ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ +.byte $DB, $B1 ; XX-XX-XXX-XX---X = XX--XXXXXX--XXXXXX--XX------ +.byte $E1, $70 ; XXX----X-XXX---- = --XXXXXX------XXXXXX-------- +.byte $40, $20 ; -X--------X----- = ----XX----------XX---------- +.byte $81, $10 ; X------X---X---- = ------XX------XX------------ + +sprite09: +.byte $0E, $34 ; ----XXX---XX-X-- = --------XXXXXXXXXX------XX-- +.byte $87, $E7 ; X----XXXXXX--XXX = ------XXXXXX----XXXXXXXXXX-- +.byte $06, $E7 ; -----XX-XXX--XXX = --------XXXX----XXXXXXXXXX-- +.byte $2C, $34 ; --X-XX----XX-X-- = --XX------XXXXXXXX------XX-- +.byte $4E, $30 ; -X--XXX---XX---- = ----XX--XXXXXXXXXX---------- +.byte $4E, $70 ; -X--XXX--XXX---- = ----XX--XXXXXXXXXXXX-------- +.byte $EF, $F1 ; XXX-XXXXXXXX---X = --XXXXXXXXXXXXXXXXXXXX------ +.byte $4E, $F1 ; -X--XXX-XXXX---X = ----XX--XXXXXXXXXXXXXX------ +.byte $4E, $F1 ; -X--XXX-XXXX---X = ----XX--XXXXXXXXXXXXXX------ +.byte $2E, $70 ; --X-XXX--XXX---- = --XX----XXXXXXXXXXXX-------- +.byte $0C, $10 ; ----XX-----X---- = ----------XXXXXX------------ +.byte $0C, $10 ; ----XX-----X---- = ----------XXXXXX------------ +.byte $06, $30 ; -----XX---XX---- = --------XXXX--XXXX---------- +.byte $06, $30 ; -----XX---XX---- = --------XXXX--XXXX---------- +.byte $C3, $E1 ; XX----XXXXX----X = ----XXXXXX------XXXXXX------ +.byte $06, $30 ; -----XX---XX---- = --------XXXX--XXXX---------- + +sprite0A: +.byte $08, $F9 ; ----X---XXXXX--X = ------------XXXXXXXXXX----XX +.byte $0C, $9F ; ----XX--X--XXXXX = ----------XXXXXX----XXXXXXXX +.byte $08, $9F ; ----X---X--XXXXX = ------------XXXX----XXXXXXXX +.byte $00, $F9 ; --------XXXXX--X = --------------XXXXXXXX----XX +.byte $89, $F1 ; X---X--XXXXX---X = ------XX----XXXXXXXXXX------ +.byte $0A, $F3 ; ----X-X-XXXX--XX = --------XX--XXXXXXXXXXXX---- +.byte $8F, $F7 ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- +.byte $0A, $70 ; ----X-X--XXX---- = --------XX--XXXXXXXX-------- +.byte $89, $F7 ; X---X--XXXXX-XXX = ------XX----XXXXXXXXXXXXXX-- +.byte $08, $F3 ; ----X---XXXX--XX = ------------XXXXXXXXXXXX---- +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ + +sprite0B: +.byte $00, $FB ; --------XXXXX-XX = --------------XXXXXXXXXX--XX +.byte $08, $3E ; ----X-----XXXXX- = ------------XXXXXX----XXXXXX +.byte $00, $3E ; ----------XXXXX- = --------------XXXX----XXXXXX +.byte $00, $EB ; --------XXX-X-XX = ----------------XXXXXXXX--XX +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $00, $FF ; --------XXXXXXXX = --------------XXXXXXXXXXXXXX +.byte $0E, $F3 ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $00, $FF ; --------XXXXXXXX = --------------XXXXXXXXXXXXXX +.byte $00, $E1 ; --------XXX----X = ----------------XXXXXX------ +.byte $00, $E1 ; --------XXX----X = ----------------XXXXXX------ +.byte $00, $B3 ; --------X-XX--XX = --------------XXXX--XXXX---- +.byte $00, $B3 ; --------X-XX--XX = --------------XXXX--XXXX---- +.byte $0C, $1E ; ----XX-----XXXX- = ----------XXXXXX------XXXXXX +.byte $00, $B3 ; --------X-XX--XX = --------------XXXX--XXXX---- + +sprite0C: +.byte $DF, $00 ; XX-XXXXX-------- = XX--XXXXXXXXXX-------------- +.byte $7C, $10 ; -XXXXX-----X---- = XXXXXX----XXXXXX------------ +.byte $7C, $00 ; -XXXXX---------- = XXXXXX----XXXX-------------- +.byte $D7, $00 ; XX-X-XXX-------- = XX--XXXXXXXX---------------- +.byte $CF, $00 ; XX--XXXX-------- = ----XXXXXXXXXX-------------- +.byte $FF, $00 ; XXXXXXXX-------- = XXXXXXXXXXXXXX-------------- +.byte $CF, $70 ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- +.byte $8F, $00 ; X---XXXX-------- = ------XXXXXXXX-------------- +.byte $CF, $00 ; XX--XXXX-------- = ----XXXXXXXXXX-------------- +.byte $FF, $00 ; XXXXXXXX-------- = XXXXXXXXXXXXXX-------------- +.byte $87, $00 ; X----XXX-------- = ------XXXXXX---------------- +.byte $87, $00 ; X----XXX-------- = ------XXXXXX---------------- +.byte $CD, $00 ; XX--XX-X-------- = ----XXXX--XXXX-------------- +.byte $CD, $00 ; XX--XX-X-------- = ----XXXX--XXXX-------------- +.byte $78, $30 ; -XXXX-----XX---- = XXXXXX------XXXXXX---------- +.byte $CD, $00 ; XX--XX-X-------- = ----XXXX--XXXX-------------- + +sprite0D: +.byte $9F, $10 ; X--XXXXX---X---- = XX----XXXXXXXXXX------------ +.byte $F9, $30 ; XXXXX--X--XX---- = XXXXXXXX----XXXXXX---------- +.byte $F9, $10 ; XXXXX--X---X---- = XXXXXXXX----XXXX------------ +.byte $9F, $00 ; X--XXXXX-------- = XX----XXXXXXXX-------------- +.byte $8F, $91 ; X---XXXXX--X---X = ------XXXXXXXXXX----XX------ +.byte $CF, $50 ; XX--XXXX-X-X---- = ----XXXXXXXXXXXX--XX-------- +.byte $EF, $F1 ; XXX-XXXXXXXX---X = --XXXXXXXXXXXXXXXXXXXX------ +.byte $0E, $50 ; ----XXX--X-X---- = --------XXXXXXXX--XX-------- +.byte $EF, $91 ; XXX-XXXXX--X---X = --XXXXXXXXXXXXXX----XX------ +.byte $CF, $10 ; XX--XXXX---X---- = ----XXXXXXXXXXXX------------ +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ + +sprite0E: +.byte $2C, $70 ; --X-XX---XXX---- = --XX------XXXXXXXXXX-------- +.byte $E7, $E1 ; XXX--XXXXXX----X = --XXXXXXXXXX----XXXXXX------ +.byte $E7, $60 ; XXX--XXX-XX----- = --XXXXXXXXXX----XXXX-------- +.byte $2C, $34 ; --X-XX----XX-X-- = --XX------XXXXXXXX------XX-- +.byte $0C, $72 ; ----XX---XXX--X- = ----------XXXXXXXXXX--XX---- +.byte $0E, $72 ; ----XXX--XXX--X- = --------XXXXXXXXXXXX--XX---- +.byte $8F, $F7 ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- +.byte $8F, $72 ; X---XXXX-XXX--X- = ------XXXXXXXXXXXXXX--XX---- +.byte $8F, $72 ; X---XXXX-XXX--X- = ------XXXXXXXXXXXXXX--XX---- +.byte $0E, $74 ; ----XXX--XXX-X-- = --------XXXXXXXXXXXX----XX-- +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $0C, $60 ; ----XX---XX----- = ----------XXXX--XXXX-------- +.byte $0C, $60 ; ----XX---XX----- = ----------XXXX--XXXX-------- +.byte $87, $C3 ; X----XXXXX----XX = ------XXXXXX------XXXXXX---- +.byte $0C, $60 ; ----XX---XX----- = ----------XXXX--XXXX-------- + +sprite0F: +.byte $89, $F1 ; X---X--XXXXX---X = ------XX----XXXXXXXXXX------ +.byte $8F, $C3 ; X---XXXXXX----XX = ------XXXXXXXX----XXXXXX---- +.byte $8F, $C1 ; X---XXXXXX-----X = ------XXXXXXXX----XXXX------ +.byte $89, $70 ; X---X--X-XXX---- = ------XX----XXXXXXXX-------- +.byte $08, $F9 ; ----X---XXXXX--X = ------------XXXXXXXXXX----XX +.byte $0C, $F5 ; ----XX--XXXX-X-X = ----------XXXXXXXXXXXX--XX-- +.byte $0E, $FF ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX +.byte $00, $F5 ; --------XXXX-X-X = --------------XXXXXXXX--XX-- +.byte $0E, $F9 ; ----XXX-XXXXX--X = --------XXXXXXXXXXXXXX----XX +.byte $0C, $F1 ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $8D, $DB ; X---XX-XXX-XX-XX = ------XX--XXXXXX--XXXXXX--XX +.byte $0E, $87 ; ----XXX-X----XXX = --------XXXXXX------XXXXXX-- +.byte $04, $02 ; -----X--------X- = ----------XX----------XX---- +.byte $08, $81 ; ----X---X------X = ------------XX------XX------ + +sprite10: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $E9, $97 ; XX-X--X--X-XXX = --XXXXXX----XXXX----XXXXXX-- +.byte $1A, $58 ; --XX-X-X-XX--- = XX------XX--XXXX--XX------XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $2A, $54 ; -X-X-X-X-X-X-- = --XX----XX--XXXX--XX----XX-- +.byte $89, $91 ; ---X--X--X---X = ------XX----XXXX----XX------ +.byte $48, $12 ; X--X-----X--X- = ----XX------XXXX------XX---- +.byte $4A, $52 ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- +.byte $4A, $52 ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- +.byte $4A, $52 ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- +.byte $4A, $52 ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- +.byte $4A, $52 ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- +.byte $4A, $52 ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- +.byte $4A, $52 ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- +.byte $4A, $52 ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- +.byte $4A, $52 ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- + +sprite11: +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $8F, $00 ; X---XXXX-------- = ------XXXXXXXX-------------- +.byte $8B, $10 ; X---X-XX---X---- = ------XXXX--XXXX------------ +.byte $8F, $60 ; X---XXXX-XX----- = ------XXXXXXXX--XXXX-------- +.byte $C3, $10 ; XX----XX---X---- = ----XXXXXX----XX------------ +.byte $C9, $00 ; XX--X--X-------- = ----XXXX----XX-------------- +.byte $CB, $00 ; XX--X-XX-------- = ----XXXXXX--XX-------------- +.byte $C7, $10 ; XX---XXX---X---- = ----XXXXXXXX--XX------------ +.byte $66, $10 ; -XX--XX----X---- = --XXXX--XXXX--XX------------ +.byte $62, $10 ; -XX---X----X---- = --XXXX--XX----XX------------ +.byte $62, $10 ; -XX---X----X---- = --XXXX--XX----XX------------ +.byte $60, $10 ; -XX--------X---- = --XXXX--------XX------------ +.byte $E1, $10 ; XXX----X---X---- = --XXXXXX------XX------------ +.byte $DF, $00 ; XX-XXXXX-------- = XX--XXXXXXXXXX-------------- +.byte $02, $00 ; ------X--------- = --------XX------------------ +.byte $8F, $00 ; X---XXXX-------- = ------XXXXXXXX-------------- + +sprite12: +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $0C, $60 ; ----XX---XX----- = ----------XXXX--XXXX-------- +.byte $0C, $B3 ; ----XX--X-XX--XX = ----------XXXXXXXX--XXXX---- +.byte $0E, $40 ; ----XXX--X------ = --------XXXXXX----XX-------- +.byte $06, $20 ; -----XX---X----- = --------XXXX----XX---------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $06, $70 ; -----XX--XXX---- = --------XXXX--XXXXXX-------- +.byte $8B, $50 ; X---X-XX-X-X---- = ------XXXX--XXXX--XX-------- +.byte $8B, $50 ; X---X-XX-X-X---- = ------XXXX--XXXX--XX-------- +.byte $8D, $40 ; X---XX-X-X------ = ------XX--XXXX----XX-------- +.byte $83, $40 ; X-----XX-X------ = ------XXXX--------XX-------- +.byte $87, $40 ; X----XXX-X------ = ------XXXXXX------XX-------- +.byte $4E, $30 ; -X--XXX---XX---- = ----XX--XXXXXXXXXX---------- +.byte $04, $50 ; -----X---X-X---- = ----------XX--XX--XX-------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- + +sprite13: +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $08, $D1 ; ----X---XX-X---X = ------------XXXX--XXXX------ +.byte $08, $76 ; ----X----XXX-XX- = ------------XXXXXXXX--XXXX-- +.byte $0C, $91 ; ----XX--X--X---X = ----------XXXXXX----XX------ +.byte $0C, $40 ; ----XX---X------ = ----------XXXX----XX-------- +.byte $0C, $50 ; ----XX---X-X---- = ----------XXXXXX--XX-------- +.byte $0C, $B1 ; ----XX--X-XX---X = ----------XXXXXXXX--XX------ +.byte $06, $B1 ; -----XX-X-XX---X = --------XXXX--XXXX--XX------ +.byte $06, $91 ; -----XX-X--X---X = --------XXXX--XX----XX------ +.byte $06, $91 ; -----XX-X--X---X = --------XXXX--XX----XX------ +.byte $06, $81 ; -----XX-X------X = --------XXXX--------XX------ +.byte $0E, $81 ; ----XXX-X------X = --------XXXXXX------XX------ +.byte $8D, $72 ; X---XX-X-XXX--X- = ------XX--XXXXXXXXXX--XX---- +.byte $04, $A1 ; -----X--X-X----X = ----------XX----XX--XX------ +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + +sprite14: +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ +.byte $00, $B3 ; --------X-XX--XX = --------------XXXX--XXXX---- +.byte $00, $FD ; --------XXXXXX-X = --------------XXXXXXXX--XXXX +.byte $08, $32 ; ----X-----XX--X- = ------------XXXXXX----XX---- +.byte $08, $91 ; ----X---X--X---X = ------------XXXX----XX------ +.byte $08, $B1 ; ----X---X-XX---X = ------------XXXXXX--XX------ +.byte $08, $72 ; ----X----XXX--X- = ------------XXXXXXXX--XX---- +.byte $0C, $62 ; ----XX---XX---X- = ----------XXXX--XXXX--XX---- +.byte $0C, $42 ; ----XX---X----X- = ----------XXXX----XX--XX---- +.byte $0C, $42 ; ----XX---X----X- = ----------XXXX----XX--XX---- +.byte $0C, $02 ; ----XX--------X- = ----------XXXX--------XX---- +.byte $0C, $12 ; ----XX-----X--X- = ----------XXXXXX------XX---- +.byte $0A, $F1 ; ----X-X-XXXX---X = --------XX--XXXXXXXXXX------ +.byte $00, $52 ; ---------X-X--X- = --------------XX--XX--XX---- +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ + +sprite15: +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $8F, $00 ; X---XXXX-------- = ------XXXXXXXX-------------- +.byte $CD, $00 ; XX--XX-X-------- = ----XXXX--XXXX-------------- +.byte $BF, $00 ; X-XXXXXX-------- = XXXX--XXXXXXXX-------------- +.byte $4C, $10 ; -X--XX-----X---- = ----XX----XXXXXX------------ +.byte $89, $10 ; X---X--X---X---- = ------XX----XXXX------------ +.byte $8D, $10 ; X---XX-X---X---- = ------XX--XXXXXX------------ +.byte $4E, $10 ; -X--XXX----X---- = ----XX--XXXXXXXX------------ +.byte $46, $30 ; -X---XX---XX---- = ----XX--XXXX--XXXX---------- +.byte $42, $30 ; -X----X---XX---- = ----XX--XX----XXXX---------- +.byte $42, $30 ; -X----X---XX---- = ----XX--XX----XXXX---------- +.byte $40, $30 ; -X--------XX---- = ----XX--------XXXX---------- +.byte $48, $30 ; -X--X-----XX---- = ----XX------XXXXXX---------- +.byte $8F, $50 ; X---XXXX-X-X---- = ------XXXXXXXXXX--XX-------- +.byte $4A, $00 ; -X--X-X--------- = ----XX--XX--XX-------------- +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ + +sprite16: +.byte $0C, $00 ; ----XX---------- = ----------XXXX-------------- +.byte $0E, $10 ; ----XXX----X---- = --------XXXXXXXX------------ +.byte $8B, $10 ; X---X-XX---X---- = ------XXXX--XXXX------------ +.byte $6E, $10 ; -XX-XXX----X---- = --XXXX--XXXXXXXX------------ +.byte $89, $30 ; X---X--X--XX---- = ------XX----XXXXXX---------- +.byte $02, $30 ; ------X---XX---- = --------XX----XXXX---------- +.byte $0A, $30 ; ----X-X---XX---- = --------XX--XXXXXX---------- +.byte $8D, $30 ; X---XX-X--XX---- = ------XX--XXXXXXXX---------- +.byte $8D, $60 ; X---XX-X-XX----- = ------XX--XXXX--XXXX-------- +.byte $89, $60 ; X---X--X-XX----- = ------XX----XX--XXXX-------- +.byte $89, $60 ; X---X--X-XX----- = ------XX----XX--XXXX-------- +.byte $81, $60 ; X------X-XX----- = ------XX--------XXXX-------- +.byte $81, $70 ; X------X-XXX---- = ------XX------XXXXXX-------- +.byte $4E, $B1 ; -X--XXX-X-XX---X = ----XX--XXXXXXXXXX--XX------ +.byte $85, $20 ; X----X-X--X----- = ------XX--XX----XX---------- +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + +sprite17: +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $06, $30 ; -----XX---XX---- = --------XXXX--XXXX---------- +.byte $CD, $30 ; XX--XX-X--XX---- = ----XXXX--XXXXXXXX---------- +.byte $02, $70 ; ------X--XXX---- = --------XX----XXXXXX-------- +.byte $04, $60 ; -----X---XX----- = ----------XX----XXXX-------- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $0E, $60 ; ----XXX--XX----- = --------XXXXXX--XXXX-------- +.byte $0A, $D1 ; ----X-X-XX-X---X = --------XX--XXXX--XXXX------ +.byte $0A, $D1 ; ----X-X-XX-X---X = --------XX--XXXX--XXXX------ +.byte $02, $B1 ; ------X-X-XX---X = --------XX----XXXX--XX------ +.byte $02, $C1 ; ------X-XX-----X = --------XX--------XXXX------ +.byte $02, $E1 ; ------X-XXX----X = --------XX------XXXXXX------ +.byte $0C, $72 ; ----XX---XXX--X- = ----------XXXXXXXXXX--XX---- +.byte $0A, $20 ; ----X-X---X----- = --------XX--XX--XX---------- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + +sprite18: +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ +.byte $08, $D1 ; ----X---XX-X---X = ------------XXXX--XXXX------ +.byte $06, $F1 ; -----XX-XXXX---X = --------XXXX--XXXXXXXX------ +.byte $08, $C3 ; ----X---XX----XX = ------------XX----XXXXXX---- +.byte $00, $93 ; --------X--X--XX = --------------XX----XXXX---- +.byte $00, $D3 ; --------XX-X--XX = --------------XX--XXXXXX---- +.byte $08, $E3 ; ----X---XXX---XX = ------------XX--XXXXXXXX---- +.byte $08, $66 ; ----X----XX--XX- = ------------XX--XXXX--XXXX-- +.byte $08, $46 ; ----X----X---XX- = ------------XX----XX--XXXX-- +.byte $08, $46 ; ----X----X---XX- = ------------XX----XX--XXXX-- +.byte $08, $06 ; ----X--------XX- = ------------XX--------XXXX-- +.byte $08, $87 ; ----X---X----XXX = ------------XX------XXXXXX-- +.byte $00, $FB ; --------XXXXX-XX = --------------XXXXXXXXXX--XX +.byte $00, $40 ; ---------X------ = ------------------XX-------- +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ + +sprite19: +.byte $4A, $60 ; -X--X-X--XX----- = ----XX--XX--XX--XXXX-------- +.byte $C5, $50 ; XX---X-X-X-X---- = ----XXXX--XX--XX--XX-------- +.byte $CF, $70 ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $8F, $00 ; X---XXXX-------- = ------XXXXXXXX-------------- +.byte $89, $00 ; X---X--X-------- = ------XX----XX-------------- +.byte $89, $00 ; X---X--X-------- = ------XX----XX-------------- +.byte $89, $00 ; X---X--X-------- = ------XX----XX-------------- +.byte $44, $10 ; -X---X-----X---- = ----XX----XX--XX------------ +.byte $48, $E1 ; -X--X---XXX----X = ----XX------XX--XXXXXX------ +.byte $A3, $22 ; X-X---XX--X---X- = --XX--XXXX------XX----XX---- +.byte $24, $14 ; --X--X-----X-X-- = --XX------XX--XX--------XX-- +.byte $24, $04 ; --X--X-------X-- = --XX------XX------------XX-- +.byte $24, $04 ; --X--X-------X-- = --XX------XX------------XX-- +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite1A: +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $0C, $20 ; ----XX----X----- = ----------XXXX--XX---------- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $DF, $60 ; XX-XXXXX-XX----- = XX--XXXXXXXXXX--XXXX-------- +.byte $78, $30 ; -XXXX-----XX---- = XXXXXX------XXXXXX---------- +.byte $20, $10 ; --X--------X---- = --XX----------XX------------ +.byte $5A, $10 ; -X-XX-X----X---- = XX--XX--XX--XXXX------------ +.byte $EF, $10 ; XXX-XXXX---X---- = --XXXXXXXXXXXXXX------------ +.byte $CF, $00 ; XX--XXXX-------- = ----XXXXXXXXXX-------------- +.byte $02, $00 ; ------X--------- = --------XX------------------ +.byte $02, $00 ; ------X--------- = --------XX------------------ +.byte $02, $00 ; ------X--------- = --------XX------------------ +.byte $85, $00 ; X----X-X-------- = ------XX--XX---------------- + +sprite1B: +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $B1 ; --------X-XX---X = --------------XXXX--XX------ +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $C1 ; --------XX-----X = ------------------XXXX------ +.byte $00, $83 ; --------X-----XX = --------------------XXXX---- +.byte $4E, $B3 ; -X--XXX-X-XX--XX = ----XX--XXXXXXXXXX--XXXX---- +.byte $C3, $E1 ; XX----XXXXX----X = ----XXXXXX------XXXXXX------ +.byte $83, $60 ; X-----XX-XX----- = ------XXXX------XXXX-------- +.byte $C1, $60 ; XX-----X-XX----- = ----XXXX--------XXXX-------- +.byte $85, $70 ; X----X-X-XXX---- = ------XX--XX--XXXXXX-------- +.byte $0A, $20 ; ----X-X---X----- = --------XX--XX--XX---------- +.byte $85, $10 ; X----X-X---X---- = ------XX--XX--XX------------ +.byte $08, $00 ; ----X----------- = ------------XX-------------- +.byte $04, $10 ; -----X-----X---- = ----------XX--XX------------ +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite1C: +.byte $00, $C1 ; --------XX-----X = ------------------XXXX------ +.byte $00, $62 ; ---------XX---X- = ----------------XXXX--XX---- +.byte $00, $E7 ; --------XXX--XXX = ----------------XXXXXXXXXX-- +.byte $00, $C1 ; --------XX-----X = ------------------XXXX------ +.byte $00, $83 ; --------X-----XX = --------------------XXXX---- +.byte $00, $06 ; -------------XX- = ----------------------XXXX-- +.byte $8D, $76 ; X---XX-X-XXX-XX- = ------XX--XXXXXXXXXX--XXXX-- +.byte $87, $C3 ; X----XXXXX----XX = ------XXXXXX------XXXXXX---- +.byte $02, $81 ; ------X-X------X = --------XX----------XX------ +.byte $85, $D1 ; X----X-XXX-X---X = ------XX--XX--XX--XXXX------ +.byte $0E, $F1 ; ----XXX-XXXX---X = --------XXXXXXXXXXXXXX------ +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $00, $10 ; -----------X---- = --------------XX------------ +.byte $08, $20 ; ----X-----X----- = ------------XX--XX---------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite1D: +.byte $00, $83 ; --------X-----XX = --------------------XXXX---- +.byte $00, $C5 ; --------XX---X-X = ------------------XXXX--XX-- +.byte $00, $CF ; --------XX--XXXX = ------------------XXXXXXXXXX +.byte $08, $A3 ; ----X---X-X---XX = ------------XX--XX--XXXX---- +.byte $04, $56 ; -----X---X-X-XX- = ----------XX--XX--XX--XXXX-- +.byte $08, $AD ; ----X---X-X-XX-X = ------------XX--XX--XX--XXXX +.byte $06, $DD ; -----XX-XX-XXX-X = --------XXXX--XX--XXXX--XXXX +.byte $0E, $06 ; ----XXX------XX- = --------XXXXXX--------XXXX-- +.byte $04, $83 ; -----X--X-----XX = ----------XX--------XXXX---- +.byte $0E, $F3 ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- +.byte $0C, $F3 ; ----XX--XXXX--XX = ----------XXXXXXXXXXXXXX---- +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $00, $20 ; ----------X----- = ----------------XX---------- +.byte $00, $20 ; ----------X----- = ----------------XX---------- +.byte $00, $50 ; ---------X-X---- = --------------XX--XX-------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite1E: +.byte $C1, $00 ; XX-----X-------- = ----XXXX-------------------- +.byte $A3, $00 ; X-X---XX-------- = --XX--XXXX------------------ +.byte $F3, $00 ; XXXX--XX-------- = XXXXXXXXXX------------------ +.byte $C5, $10 ; XX---X-X---X---- = ----XXXX--XX--XX------------ +.byte $6A, $20 ; -XX-X-X---X----- = --XXXX--XX--XX--XX---------- +.byte $B5, $10 ; X-XX-X-X---X---- = XXXX--XX--XX--XX------------ +.byte $BB, $60 ; X-XXX-XX-XX----- = XXXX--XXXX--XX--XXXX-------- +.byte $60, $70 ; -XX------XXX---- = --XXXX--------XXXXXX-------- +.byte $C1, $20 ; XX-----X--X----- = ----XXXX--------XX---------- +.byte $CF, $70 ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- +.byte $CF, $30 ; XX--XXXX--XX---- = ----XXXXXXXXXXXXXX---------- +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ +.byte $04, $00 ; -----X---------- = ----------XX---------------- +.byte $04, $00 ; -----X---------- = ----------XX---------------- +.byte $0A, $00 ; ----X-X--------- = --------XX--XX-------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite1F: +.byte $83, $00 ; X-----XX-------- = ------XXXX------------------ +.byte $46, $00 ; -X---XX--------- = ----XX--XXXX---------------- +.byte $E7, $00 ; XXX--XXX-------- = --XXXXXXXXXX---------------- +.byte $83, $00 ; X-----XX-------- = ------XXXX------------------ +.byte $C1, $00 ; XX-----X-------- = ----XXXX-------------------- +.byte $60, $00 ; -XX------------- = --XXXX---------------------- +.byte $6E, $B1 ; -XX-XXX-X-XX---X = --XXXX--XXXXXXXXXX--XX------ +.byte $C3, $E1 ; XX----XXXXX----X = ----XXXXXX------XXXXXX------ +.byte $81, $40 ; X------X-X------ = ------XX----------XX-------- +.byte $8B, $A1 ; X---X-XXX-X----X = ------XXXX--XX--XX--XX------ +.byte $8F, $70 ; X---XXXX-XXX---- = ------XXXXXXXXXXXXXX-------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $08, $00 ; ----X----------- = ------------XX-------------- +.byte $04, $10 ; -----X-----X---- = ----------XX--XX------------ +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite20: +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $8D, $00 ; X---XX-X-------- = ------XX--XXXX-------------- +.byte $CF, $00 ; XX--XXXX-------- = ----XXXXXXXXXX-------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $83, $00 ; X-----XX-------- = ------XXXX------------------ +.byte $C1, $00 ; XX-----X-------- = ----XXXX-------------------- +.byte $CD, $72 ; XX--XX-X-XXX--X- = ----XXXX--XXXXXXXXXX--XX---- +.byte $87, $C3 ; X----XXXXX----XX = ------XXXXXX------XXXXXX---- +.byte $06, $C1 ; -----XX-XX-----X = --------XXXX------XXXX------ +.byte $06, $83 ; -----XX-X-----XX = --------XXXX--------XXXX---- +.byte $0E, $A1 ; ----XXX-X-X----X = --------XXXXXX--XX--XX------ +.byte $04, $50 ; -----X---X-X---- = ----------XX--XX--XX-------- +.byte $08, $A1 ; ----X---X-X----X = ------------XX--XX--XX------ +.byte $00, $10 ; -----------X---- = --------------XX------------ +.byte $08, $20 ; ----X-----X----- = ------------XX--XX---------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite21: +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $04, $30 ; -----X----XX---- = ----------XX--XXXX---------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $0C, $00 ; ----XX---------- = ----------XXXX-------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $FB ; -----XX-XXXXX-XX = --------XXXX--XXXXXXXXXX--XX +.byte $0C, $1E ; ----XX-----XXXX- = ----------XXXXXX------XXXXXX +.byte $08, $04 ; ----X--------X-- = ------------XX----------XX-- +.byte $08, $5A ; ----X----X-XX-X- = ------------XXXX--XX--XX--XX +.byte $08, $F7 ; ----X---XXXX-XXX = ------------XXXXXXXXXXXXXX-- +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $00, $40 ; ---------X------ = ------------------XX-------- +.byte $00, $40 ; ---------X------ = ------------------XX-------- +.byte $00, $40 ; ---------X------ = ------------------XX-------- +.byte $00, $A1 ; --------X-X----X = ----------------XX--XX------ + +sprite22: +.byte $0C, $10 ; ----XX-----X---- = ----------XXXXXX------------ +.byte $0A, $30 ; ----X-X---XX---- = --------XX--XXXXXX---------- +.byte $89, $70 ; X---X--X-XXX---- = ------XX----XXXXXXXX-------- +.byte $89, $70 ; X---X--X-XXX---- = ------XX----XXXXXXXX-------- +.byte $89, $70 ; X---X--X-XXX---- = ------XX----XXXXXXXX-------- +.byte $0A, $30 ; ----X-X---XX---- = --------XX--XXXXXX---------- +.byte $0C, $10 ; ----XX-----X---- = ----------XXXXXX------------ +.byte $00, $10 ; -----------X---- = --------------XX------------ +.byte $0C, $10 ; ----XX-----X---- = ----------XXXXXX------------ +.byte $04, $10 ; -----X-----X---- = ----------XX--XX------------ +.byte $0C, $10 ; ----XX-----X---- = ----------XXXXXX------------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $2E, $30 ; --X-XXX---XX---- = --XX----XXXXXXXXXX---------- +.byte $AF, $70 ; X-X-XXXX-XXX---- = --XX--XXXXXXXXXXXXXX-------- +.byte $FF, $60 ; XXXXXXXX-XX----- = XXXXXXXXXXXXXX--XXXX-------- +.byte $C7, $40 ; XX---XXX-X------ = ----XXXXXXXX------XX-------- + +sprite23: +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $08, $E1 ; ----X---XXX----X = ------------XX--XXXXXX------ +.byte $04, $72 ; -----X---XXX--X- = ----------XX--XXXXXX--XX---- +.byte $04, $72 ; -----X---XXX--X- = ----------XX--XXXXXX--XX---- +.byte $04, $72 ; -----X---XXX--X- = ----------XX--XXXXXX--XX---- +.byte $08, $E1 ; ----X---XXX----X = ------------XX--XXXXXX------ +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $00, $40 ; ---------X------ = ------------------XX-------- +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $00, $50 ; ---------X-X---- = --------------XX--XX-------- +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ +.byte $48, $F1 ; -X--X---XXXX---X = ----XX------XXXXXXXXXX------ +.byte $4E, $F3 ; -X--XXX-XXXX--XX = ----XX--XXXXXXXXXXXXXXXX---- +.byte $EF, $B3 ; XXX-XXXXX-XX--XX = --XXXXXXXXXXXXXXXX--XXXX---- +.byte $8F, $12 ; X---XXXX---X--X- = ------XXXXXXXXXX------XX---- + +sprite24: +.byte $00, $E1 ; --------XXX----X = ----------------XXXXXX------ +.byte $00, $72 ; ---------XXX--X- = --------------XXXXXX--XX---- +.byte $08, $74 ; ----X----XXX-X-- = ------------XXXXXXXX----XX-- +.byte $08, $74 ; ----X----XXX-X-- = ------------XXXXXXXX----XX-- +.byte $08, $74 ; ----X----XXX-X-- = ------------XXXXXXXX----XX-- +.byte $00, $72 ; ---------XXX--X- = --------------XXXXXX--XX---- +.byte $00, $E1 ; --------XXX----X = ----------------XXXXXX------ +.byte $00, $81 ; --------X------X = --------------------XX------ +.byte $00, $E1 ; --------XXX----X = ----------------XXXXXX------ +.byte $00, $A1 ; --------X-X----X = ----------------XX--XX------ +.byte $00, $E1 ; --------XXX----X = ----------------XXXXXX------ +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $28, $F3 ; --X-X---XXXX--XX = --XX--------XXXXXXXXXXXX---- +.byte $2E, $F7 ; --X-XXX-XXXX-XXX = --XX----XXXXXXXXXXXXXXXXXX-- +.byte $FF, $76 ; XXXXXXXX-XXX-XX- = XXXXXXXXXXXXXXXXXXXX--XXXX-- +.byte $8F, $34 ; X---XXXX--XX-X-- = ------XXXXXXXXXXXX------XX-- + +sprite25: +.byte $00, $C3 ; --------XX----XX = ------------------XXXXXX---- +.byte $00, $66 ; ---------XX--XX- = ----------------XXXX--XXXX-- +.byte $00, $3C ; ----------XXXX-- = --------------XXXX------XXXX +.byte $00, $3C ; ----------XXXX-- = --------------XXXX------XXXX +.byte $00, $3C ; ----------XXXX-- = --------------XXXX------XXXX +.byte $00, $66 ; ---------XX--XX- = ----------------XXXX--XXXX-- +.byte $00, $C3 ; --------XX----XX = ------------------XXXXXX---- +.byte $00, $02 ; --------------X- = ----------------------XX---- +.byte $00, $C3 ; --------XX----XX = ------------------XXXXXX---- +.byte $00, $42 ; ---------X----X- = ------------------XX--XX---- +.byte $00, $C3 ; --------XX----XX = ------------------XXXXXX---- +.byte $00, $C7 ; --------XX---XXX = ------------------XXXXXXXX-- +.byte $81, $E7 ; X------XXXX--XXX = ------XX--------XXXXXXXXXX-- +.byte $89, $FF ; X---X--XXXXXXXXX = ------XX----XXXXXXXXXXXXXXXX +.byte $CF, $FD ; XX--XXXXXXXXXX-X = ----XXXXXXXXXXXXXXXXXX--XXXX +.byte $0E, $78 ; ----XXX--XXXX--- = --------XXXXXXXXXXXX------XX + +sprite26: +.byte $C3, $00 ; XX----XX-------- = ----XXXXXX------------------ +.byte $66, $00 ; -XX--XX--------- = --XXXX--XXXX---------------- +.byte $3C, $00 ; --XXXX---------- = XXXX------XXXX-------------- +.byte $3C, $00 ; --XXXX---------- = XXXX------XXXX-------------- +.byte $3C, $00 ; --XXXX---------- = XXXX------XXXX-------------- +.byte $66, $00 ; -XX--XX--------- = --XXXX--XXXX---------------- +.byte $C3, $00 ; XX----XX-------- = ----XXXXXX------------------ +.byte $40, $00 ; -X-------------- = ----XX---------------------- +.byte $C3, $00 ; XX----XX-------- = ----XXXXXX------------------ +.byte $42, $00 ; -X----X--------- = ----XX--XX------------------ +.byte $C3, $00 ; XX----XX-------- = ----XXXXXX------------------ +.byte $E3, $00 ; XXX---XX-------- = --XXXXXXXX------------------ +.byte $E7, $81 ; XXX--XXXX------X = --XXXXXXXXXX--------XX------ +.byte $FF, $91 ; XXXXXXXXX--X---X = XXXXXXXXXXXXXXXX----XX------ +.byte $BF, $F3 ; X-XXXXXXXXXX--XX = XXXX--XXXXXXXXXXXXXXXXXX---- +.byte $1E, $70 ; ---XXXX--XXX---- = XX------XXXXXXXXXXXX-------- + +sprite27: +.byte $87, $00 ; X----XXX-------- = ------XXXXXX---------------- +.byte $4E, $00 ; -X--XXX--------- = ----XX--XXXXXX-------------- +.byte $2E, $10 ; --X-XXX----X---- = --XX----XXXXXXXX------------ +.byte $2E, $10 ; --X-XXX----X---- = --XX----XXXXXXXX------------ +.byte $2E, $10 ; --X-XXX----X---- = --XX----XXXXXXXX------------ +.byte $4E, $00 ; -X--XXX--------- = ----XX--XXXXXX-------------- +.byte $87, $00 ; X----XXX-------- = ------XXXXXX---------------- +.byte $81, $00 ; X------X-------- = ------XX-------------------- +.byte $87, $00 ; X----XXX-------- = ------XXXXXX---------------- +.byte $85, $00 ; X----X-X-------- = ------XX--XX---------------- +.byte $87, $00 ; X----XXX-------- = ------XXXXXX---------------- +.byte $CF, $00 ; XX--XXXX-------- = ----XXXXXXXXXX-------------- +.byte $CF, $14 ; XX--XXXX---X-X-- = ----XXXXXXXXXXXX--------XX-- +.byte $EF, $74 ; XXX-XXXX-XXX-X-- = --XXXXXXXXXXXXXXXXXX----XX-- +.byte $6E, $FF ; -XX-XXX-XXXXXXXX = --XXXX--XXXXXXXXXXXXXXXXXXXX +.byte $2C, $F1 ; --X-XX--XXXX---X = --XX------XXXXXXXXXXXX------ + +sprite28: +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $87, $10 ; X----XXX---X---- = ------XXXXXX--XX------------ +.byte $4E, $20 ; -X--XXX---X----- = ----XX--XXXXXX--XX---------- +.byte $4E, $20 ; -X--XXX---X----- = ----XX--XXXXXX--XX---------- +.byte $4E, $20 ; -X--XXX---X----- = ----XX--XXXXXX--XX---------- +.byte $87, $10 ; X----XXX---X---- = ------XXXXXX--XX------------ +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $02, $00 ; ------X--------- = --------XX------------------ +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $0A, $00 ; ----X-X--------- = --------XX--XX-------------- +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $8F, $00 ; X---XXXX-------- = ------XXXXXXXX-------------- +.byte $8F, $12 ; X---XXXX---X--X- = ------XXXXXXXXXX------XX---- +.byte $CF, $72 ; XX--XXXX-XXX--X- = ----XXXXXXXXXXXXXXXX--XX---- +.byte $CD, $F7 ; XX--XX-XXXXX-XXX = ----XXXX--XXXXXXXXXXXXXXXX-- +.byte $48, $F1 ; -X--X---XXXX---X = ----XX------XXXXXXXXXX------ + +sprite29: +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $0C, $50 ; ----XX---X-X---- = ----------XXXXXX--XX-------- +.byte $0E, $91 ; ----XXX-X--X---X = --------XXXXXXXX----XX------ +.byte $0E, $91 ; ----XXX-X--X---X = --------XXXXXXXX----XX------ +.byte $0E, $91 ; ----XXX-X--X---X = --------XXXXXXXX----XX------ +.byte $0C, $50 ; ----XX---X-X---- = ----------XXXXXX--XX-------- +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $08, $00 ; ----X----------- = ------------XX-------------- +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $08, $20 ; ----X-----X----- = ------------XX--XX---------- +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $0C, $74 ; ----XX---XXX-X-- = ----------XXXXXXXXXX----XX-- +.byte $0E, $F5 ; ----XXX-XXXX-X-X = --------XXXXXXXXXXXXXX--XX-- +.byte $06, $FF ; -----XX-XXXXXXXX = --------XXXX--XXXXXXXXXXXXXX +.byte $02, $E3 ; ------X-XXX---XX = --------XX------XXXXXXXX---- + +sprite2A: +.byte $0C, $30 ; ---XX---XX---- = ----------XXXXXXXX---------- +.byte $0E, $70 ; ---XXX-XXX---- = --------XXXXXXXXXXXX-------- +.byte $8F, $F1 ; ---XXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $8F, $F1 ; ---XXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $C9, $93 ; X--X--X--X--XX = ----XXXX----XXXX----XXXX---- +.byte $06, $60 ; ----XX-XX----- = --------XXXX----XXXX-------- +.byte $6E, $76 ; XX-XXX-XXX-XX- = --XXXX--XXXXXXXXXXXX--XXXX-- +.byte $56, $6A ; X-X-XX-XX-X-X- = XX--XX--XXXX----XXXX--XX--XX +.byte $D9, $9B ; X-XX--X--XX-XX = XX--XXXX----XXXX----XXXX--XX +.byte $9F, $F9 ; --XXXXXXXXX--X = XX----XXXXXXXXXXXXXXXX----XX +.byte $9D, $B9 ; --XXX-X-XXX--X = XX----XX--XXXXXXXX--XX----XX +.byte $12, $48 ; --X--X-X--X--- = XX------XX--------XX------XX +.byte $2E, $74 ; -X-XXX-XXX-X-- = --XX----XXXXXXXXXXXX----XX-- +.byte $04, $20 ; ----X---X----- = ----------XX----XX---------- +.byte $04, $20 ; ----X---X----- = ----------XX----XX---------- +.byte $06, $60 ; ----XX-XX----- = --------XXXX----XXXX-------- + +sprite2B: +.byte $30, $00 ; --XX------------ = XXXX------------------------ +.byte $30, $00 ; --XX------------ = XXXX------------------------ +.byte $30, $00 ; --XX------------ = XXXX------------------------ +.byte $30, $00 ; --XX------------ = XXXX------------------------ +.byte $30, $00 ; --XX------------ = XXXX------------------------ +.byte $30, $00 ; --XX------------ = XXXX------------------------ +.byte $30, $00 ; --XX------------ = XXXX------------------------ +.byte $BF, $70 ; X-XXXXXX-XXX---- = XXXX--XXXXXXXXXXXXXX-------- +.byte $BF, $70 ; X-XXXXXX-XXX---- = XXXX--XXXXXXXXXXXXXX-------- +.byte $FF, $70 ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- +.byte $8F, $70 ; X---XXXX-XXX---- = ------XXXXXXXXXXXXXX-------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $ED, $30 ; XXX-XX-X--XX---- = --XXXXXX--XXXXXXXX---------- +.byte $FF, $10 ; XXXXXXXX---X---- = XXXXXXXXXXXXXXXX------------ +.byte $BF, $10 ; X-XXXXXX---X---- = XXXX--XXXXXXXXXX------------ +.byte $BF, $10 ; X-XXXXXX---X---- = XXXX--XXXXXXXXXX------------ + +sprite2C: +.byte $C1, $00 ; XX-----X-------- = ----XXXX-------------------- +.byte $C1, $00 ; XX-----X-------- = ----XXXX-------------------- +.byte $C1, $00 ; XX-----X-------- = ----XXXX-------------------- +.byte $C1, $00 ; XX-----X-------- = ----XXXX-------------------- +.byte $C1, $81 ; XX-----XX------X = ----XXXX------------XX------ +.byte $C1, $60 ; XX-----X-XX----- = ----XXXX--------XXXX-------- +.byte $C9, $10 ; XX--X--X---X---- = ----XXXX----XXXX------------ +.byte $C5, $00 ; XX---X-X-------- = ----XXXX--XX---------------- +.byte $CD, $F3 ; XX--XX-XXXXX--XX = ----XXXX--XXXXXXXXXXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $0C, $F3 ; ----XX--XXXX--XX = ----------XXXXXXXXXXXXXX---- +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $87, $F1 ; X----XXXXXXX---X = ------XXXXXX--XXXXXXXX------ +.byte $CF, $70 ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- +.byte $CD, $70 ; XX--XX-X-XXX---- = ----XXXX--XXXXXXXXXX-------- +.byte $CD, $70 ; XX--XX-X-XXX---- = ----XXXX--XXXXXXXXXX-------- + +sprite2D: +.byte $83, $00 ; X-----XX-------- = ------XXXX------------------ +.byte $83, $00 ; X-----XX-------- = ------XXXX------------------ +.byte $83, $40 ; X-----XX-X------ = ------XXXX--------XX-------- +.byte $83, $20 ; X-----XX--X----- = ------XXXX------XX---------- +.byte $83, $20 ; X-----XX--X----- = ------XXXX------XX---------- +.byte $83, $10 ; X-----XX---X---- = ------XXXX----XX------------ +.byte $83, $10 ; X-----XX---X---- = ------XXXX----XX------------ +.byte $8B, $00 ; X---X-XX-------- = ------XXXX--XX-------------- +.byte $8B, $F7 ; X---X-XXXXXX-XXX = ------XXXX--XXXXXXXXXXXXXX-- +.byte $8F, $F7 ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- +.byte $08, $F7 ; ----X---XXXX-XXX = ------------XXXXXXXXXXXXXX-- +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $0E, $E3 ; ----XXX-XXX---XX = --------XXXXXX--XXXXXXXX---- +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $8B, $F1 ; X---X-XXXXXX---X = ------XXXX--XXXXXXXXXX------ +.byte $8B, $F1 ; X---X-XXXXXX---X = ------XXXX--XXXXXXXXXX------ + +sprite2E: +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $04 ; -----XX------X-- = --------XXXX------------XX-- +.byte $06, $83 ; -----XX-X-----XX = --------XXXX--------XXXX---- +.byte $06, $60 ; -----XX--XX----- = --------XXXX----XXXX-------- +.byte $06, $10 ; -----XX----X---- = --------XXXX--XX------------ +.byte $06, $FF ; -----XX-XXXXXXXX = --------XXXX--XXXXXXXXXXXXXX +.byte $0E, $FF ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX +.byte $00, $FF ; --------XXXXXXXX = --------------XXXXXXXXXXXXXX +.byte $00, $E7 ; --------XXX--XXX = ----------------XXXXXXXXXX-- +.byte $0C, $D7 ; ----XX--XX-X-XXX = ----------XXXXXX--XXXXXXXX-- +.byte $0E, $F3 ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- +.byte $06, $F3 ; -----XX-XXXX--XX = --------XXXX--XXXXXXXXXX---- +.byte $06, $F3 ; -----XX-XXXX--XX = --------XXXX--XXXXXXXXXX---- + +sprite2F: +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $20, $60 ; --X------XX----- = --XX------------XXXX-------- +.byte $C1, $60 ; XX-----X-XX----- = ----XXXX--------XXXX-------- +.byte $06, $60 ; -----XX--XX----- = --------XXXX----XXXX-------- +.byte $08, $60 ; ----X----XX----- = ------------XX--XXXX-------- +.byte $FF, $60 ; XXXXXXXX-XX----- = XXXXXXXXXXXXXX--XXXX-------- +.byte $FF, $70 ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- +.byte $FF, $00 ; XXXXXXXX-------- = XXXXXXXXXXXXXX-------------- +.byte $E7, $00 ; XXX--XXX-------- = --XXXXXXXXXX---------------- +.byte $EB, $30 ; XXX-X-XX--XX---- = --XXXXXXXX--XXXXXX---------- +.byte $CF, $70 ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- +.byte $CF, $60 ; XX--XXXX-XX----- = ----XXXXXXXXXX--XXXX-------- +.byte $CF, $60 ; XX--XXXX-XX----- = ----XXXXXXXXXX--XXXX-------- + +sprite30: +.byte $00, $83 ; --------X-----XX = --------------------XXXX---- +.byte $00, $83 ; --------X-----XX = --------------------XXXX---- +.byte $04, $83 ; -----X--X-----XX = ----------XX--------XXXX---- +.byte $08, $83 ; ----X---X-----XX = ------------XX------XXXX---- +.byte $08, $83 ; ----X---X-----XX = ------------XX------XXXX---- +.byte $00, $93 ; --------X--X--XX = --------------XX----XXXX---- +.byte $00, $93 ; --------X--X--XX = --------------XX----XXXX---- +.byte $00, $A3 ; --------X-X---XX = ----------------XX--XXXX---- +.byte $CF, $B3 ; XX--XXXXX-XX--XX = ----XXXXXXXXXXXXXX--XXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $CF, $30 ; XX--XXXX--XX---- = ----XXXXXXXXXXXXXX---------- +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ +.byte $8F, $E1 ; X---XXXXXXX----X = ------XXXXXXXX--XXXXXX------ +.byte $0E, $F3 ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- +.byte $0E, $B3 ; ----XXX-X-XX--XX = --------XXXXXXXXXX--XXXX---- +.byte $0E, $B3 ; ----XXX-X-XX--XX = --------XXXXXXXXXX--XXXX---- + +sprite31: +.byte $00, $06 ; -------------XX- = ----------------------XXXX-- +.byte $00, $06 ; -------------XX- = ----------------------XXXX-- +.byte $00, $06 ; -------------XX- = ----------------------XXXX-- +.byte $00, $06 ; -------------XX- = ----------------------XXXX-- +.byte $02, $06 ; ------X------XX- = --------XX------------XXXX-- +.byte $0C, $06 ; ----XX-------XX- = ----------XXXX--------XXXX-- +.byte $00, $36 ; ----------XX-XX- = --------------XXXX----XXXX-- +.byte $00, $46 ; ---------X---XX- = ------------------XX--XXXX-- +.byte $8F, $76 ; X---XXXX-XXX-XX- = ------XXXXXXXXXXXXXX--XXXX-- +.byte $8F, $F7 ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- +.byte $8F, $70 ; X---XXXX-XXX---- = ------XXXXXXXXXXXXXX-------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $0E, $D3 ; ----XXX-XX-X--XX = --------XXXXXXXX--XXXXXX---- +.byte $0C, $F7 ; ----XX--XXXX-XXX = ----------XXXXXXXXXXXXXXXX-- +.byte $0C, $76 ; ----XX---XXX-XX- = ----------XXXXXXXXXX--XXXX-- +.byte $0C, $76 ; ----XX---XXX-XX- = ----------XXXXXXXXXX--XXXX-- + +sprite32: +.byte $00, $0C ; ------------XX-- = ------------------------XXXX +.byte $00, $0C ; ------------XX-- = ------------------------XXXX +.byte $00, $0C ; ------------XX-- = ------------------------XXXX +.byte $00, $0C ; ------------XX-- = ------------------------XXXX +.byte $00, $0C ; ------------XX-- = ------------------------XXXX +.byte $00, $0C ; ------------XX-- = ------------------------XXXX +.byte $00, $0C ; ------------XX-- = ------------------------XXXX +.byte $0E, $FD ; ----XXX-XXXXXX-X = --------XXXXXXXXXXXXXX--XXXX +.byte $0E, $FD ; ----XXX-XXXXXX-X = --------XXXXXXXXXXXXXX--XXXX +.byte $0E, $FF ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX +.byte $0E, $F1 ; ----XXX-XXXX---X = --------XXXXXXXXXXXXXX------ +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $0C, $B7 ; ----XX--X-XX-XXX = ----------XXXXXXXX--XXXXXX-- +.byte $08, $FF ; ----X---XXXXXXXX = ------------XXXXXXXXXXXXXXXX +.byte $08, $FD ; ----X---XXXXXX-X = ------------XXXXXXXXXX--XXXX +.byte $08, $FD ; ----X---XXXXXX-X = ------------XXXXXXXXXX--XXXX + +sprite33: +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ +.byte $EF, $70 ; XXX-XXXX-XXX---- = --XXXXXXXXXXXXXXXXXX-------- +.byte $E9, $F1 ; XXX-X--XXXXX---X = --XXXXXX----XXXXXXXXXX------ +.byte $F9, $30 ; XXXXX--X--XX---- = XXXXXXXX----XXXXXX---------- +.byte $FF, $00 ; XXXXXXXX-------- = XXXXXXXXXXXXXX-------------- +.byte $F3, $00 ; XXXX--XX-------- = XXXXXXXXXX------------------ +.byte $FF, $00 ; XXXXXXXX-------- = XXXXXXXXXXXXXX-------------- +.byte $FF, $30 ; XXXXXXXX--XX---- = XXXXXXXXXXXXXXXXXX---------- +.byte $EF, $F1 ; XXX-XXXXXXXX---X = --XXXXXXXXXXXXXXXXXXXX------ +.byte $EF, $70 ; XXX-XXXX-XXX---- = --XXXXXXXXXXXXXXXXXX-------- +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ +.byte $0A, $00 ; ----X-X--------- = --------XX--XX-------------- +.byte $0A, $00 ; ----X-X--------- = --------XX--XX-------------- +.byte $0A, $00 ; ----X-X--------- = --------XX--XX-------------- +.byte $0A, $00 ; ----X-X--------- = --------XX--XX-------------- +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ + +sprite34: +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $8F, $F3 ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- +.byte $8F, $C3 ; X---XXXXXX----XX = ------XXXXXXXX----XXXXXX---- +.byte $CF, $C7 ; XX--XXXXXX---XXX = ----XXXXXXXXXX----XXXXXXXX-- +.byte $CF, $F7 ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- +.byte $CF, $00 ; XX--XXXX-------- = ----XXXXXXXXXX-------------- +.byte $CF, $F7 ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- +.byte $CF, $F7 ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- +.byte $8F, $F3 ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- +.byte $8F, $F3 ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $08, $20 ; ----X-----X----- = ------------XX--XX---------- +.byte $08, $20 ; ----X-----X----- = ------------XX--XX---------- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite35: +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $0E, $F7 ; ----XXX-XXXX-XXX = --------XXXXXXXXXXXXXXXXXX-- +.byte $0E, $CF ; ----XXX-XX--XXXX = --------XXXXXX----XXXXXXXXXX +.byte $8F, $C3 ; X---XXXXXX----XX = ------XXXXXXXX----XXXXXX---- +.byte $8F, $70 ; X---XXXX-XXX---- = ------XXXXXXXXXXXXXX-------- +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ +.byte $8F, $70 ; X---XXXX-XXX---- = ------XXXXXXXXXXXXXX-------- +.byte $8F, $F3 ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- +.byte $0E, $FF ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX +.byte $0E, $F7 ; ----XXX-XXXX-XXX = --------XXXXXXXXXXXXXXXXXX-- +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite36: +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $0C, $9F ; ----XX--X--XXXXX = ----------XXXXXX----XXXXXXXX +.byte $0C, $97 ; ----XX--X--X-XXX = ----------XXXXXX----XXXXXX-- +.byte $0E, $F3 ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $0E, $F3 ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- +.byte $0C, $F7 ; ----XX--XXXX-XXX = ----------XXXXXXXXXXXXXXXX-- +.byte $0C, $FF ; ----XX--XXXXXXXX = ----------XXXXXXXXXXXXXXXXXX +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $00, $A1 ; --------X-X----X = ----------------XX--XX------ +.byte $00, $A1 ; --------X-X----X = ----------------XX--XX------ +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite37: +.byte $CF, $00 ; XX--XXXX-------- = ----XXXXXXXXXX-------------- +.byte $F9, $30 ; XXXXX--X--XX---- = XXXXXXXX----XXXXXX---------- +.byte $E9, $30 ; XXX-X--X--XX---- = --XXXXXX----XXXXXX---------- +.byte $CF, $70 ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $CF, $70 ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- +.byte $EF, $30 ; XXX-XXXX--XX---- = --XXXXXXXXXXXXXXXX---------- +.byte $FF, $30 ; XXXXXXXX--XX---- = XXXXXXXXXXXXXXXXXX---------- +.byte $CF, $00 ; XX--XXXX-------- = ----XXXXXXXXXX-------------- +.byte $85, $00 ; X----X-X-------- = ------XX--XX---------------- +.byte $85, $00 ; X----X-X-------- = ------XX--XX---------------- +.byte $CF, $00 ; XX--XXXX-------- = ----XXXXXXXXXX-------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite38: +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $CF, $F1 ; XX--XXXXXXXX---X = ----XXXXXXXXXXXXXXXXXX------ +.byte $E7, $E1 ; XXX--XXXXXX----X = --XXXXXXXXXX----XXXXXX------ +.byte $87, $E3 ; X----XXXXXX---XX = ------XXXXXX----XXXXXXXX---- +.byte $0C, $F3 ; ----XX--XXXX--XX = ----------XXXXXXXXXXXXXX---- +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $0C, $F3 ; ----XX--XXXX--XX = ----------XXXXXXXXXXXXXX---- +.byte $8F, $F3 ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- +.byte $EF, $F1 ; XXX-XXXXXXXX---X = --XXXXXXXXXXXXXXXXXXXX------ +.byte $CF, $F1 ; XX--XXXXXXXX---X = ----XXXXXXXXXXXXXXXXXX------ +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite39: +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $8F, $F3 ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- +.byte $87, $E3 ; X----XXXXXX---XX = ------XXXXXX----XXXXXXXX---- +.byte $C7, $E7 ; XX---XXXXXX--XXX = ----XXXXXXXX----XXXXXXXXXX-- +.byte $CF, $F7 ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- +.byte $00, $E7 ; --------XXX--XXX = ----------------XXXXXXXXXX-- +.byte $CF, $F7 ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- +.byte $CF, $F7 ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- +.byte $8F, $F3 ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- +.byte $8F, $F3 ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $08, $20 ; ----X-----X----- = ------------XX--XX---------- +.byte $08, $20 ; ----X-----X----- = ------------XX--XX---------- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite3A: +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $0E, $F7 ; ----XXX-XXXX-XXX = --------XXXXXXXXXXXXXXXXXX-- +.byte $8F, $97 ; X---XXXXX--X-XXX = ------XXXXXXXXXX----XXXXXX-- +.byte $0C, $9F ; ----XX--X--XXXXX = ----------XXXXXX----XXXXXXXX +.byte $00, $FF ; --------XXXXXXXX = --------------XXXXXXXXXXXXXX +.byte $00, $CF ; --------XX--XXXX = ------------------XXXXXXXXXX +.byte $00, $FF ; --------XXXXXXXX = --------------XXXXXXXXXXXXXX +.byte $0C, $FF ; ----XX--XXXXXXXX = ----------XXXXXXXXXXXXXXXXXX +.byte $8F, $F7 ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- +.byte $0E, $F7 ; ----XXX-XXXX-XXX = --------XXXXXXXXXXXXXXXXXX-- +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $00, $50 ; ---------X-X---- = --------------XX--XX-------- +.byte $00, $50 ; ---------X-X---- = --------------XX--XX-------- +.byte $00, $50 ; ---------X-X---- = --------------XX--XX-------- +.byte $00, $50 ; ---------X-X---- = --------------XX--XX-------- +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ + +sprite3B: +.byte $83, $00 ; X-----XX-------- = ------XXXX------------------ +.byte $87, $00 ; X----XXX-------- = ------XXXXXX---------------- +.byte $0A, $20 ; ----X-X---X----- = --------XX--XX--XX---------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $87, $00 ; X----XXX-------- = ------XXXXXX---------------- +.byte $8F, $00 ; X---XXXX-------- = ------XXXXXXXX-------------- +.byte $87, $10 ; X----XXX---X---- = ------XXXXXX--XX------------ +.byte $C7, $00 ; XX---XXX-------- = ----XXXXXXXX---------------- +.byte $CF, $00 ; XX--XXXX-------- = ----XXXXXXXXXX-------------- +.byte $CF, $00 ; XX--XXXX-------- = ----XXXXXXXXXX-------------- +.byte $6E, $00 ; -XX-XXX--------- = --XXXX--XXXXXX-------------- +.byte $24, $00 ; --X--X---------- = --XX------XX---------------- +.byte $28, $00 ; --X-X----------- = --XX--------XX-------------- +.byte $10, $10 ; ---X-------X---- = XX------------XX------------ +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite3C: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $0C, $00 ; ----XX---------- = ----------XXXX-------------- +.byte $0C, $10 ; ----XX-----X---- = ----------XXXXXX------------ +.byte $08, $A1 ; ----X---X-X----X = ------------XX--XX--XX------ +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $0C, $10 ; ----XX-----X---- = ----------XXXXXX------------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $0C, $50 ; ----XX---X-X---- = ----------XXXXXX--XX-------- +.byte $0E, $10 ; ----XXX----X---- = --------XXXXXXXX------------ +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $8B, $30 ; X---X-XX--XX---- = ------XXXX--XXXXXX---------- +.byte $C9, $10 ; XX--X--X---X---- = ----XXXX----XXXX------------ +.byte $20, $60 ; --X------XX----- = --XX------------XXXX-------- + +sprite3D: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $00, $52 ; ---------X-X--X- = --------------XX--XX--XX---- +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $08, $B1 ; ----X---X-XX---X = ------------XXXXXX--XX------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $E7, $F3 ; XXX--XXXXXXX--XX = --XXXXXXXXXX--XXXXXXXXXX---- + +sprite3E: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $00, $A5 ; --------X-X--X-X = ----------------XX--XX--XX-- +.byte $00, $E7 ; --------XXX--XXX = ----------------XXXXXXXXXX-- +.byte $00, $E1 ; --------XXX----X = ----------------XXXXXX------ +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ +.byte $00, $72 ; ---------XXX--X- = --------------XXXXXX--XX---- +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $0C, $F1 ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ +.byte $0C, $60 ; ----XX---XX----- = ----------XXXX--XXXX-------- +.byte $06, $83 ; -----XX-X-----XX = --------XXXX--------XXXX---- +.byte $81, $00 ; X------X-------- = ------XX-------------------- + +sprite3F: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $0C, $00 ; ----XX---------- = ----------XXXX-------------- +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $A5, $00 ; X-X--X-X-------- = --XX--XX--XX---------------- +.byte $E7, $00 ; XXX--XXX-------- = --XXXXXXXXXX---------------- +.byte $87, $00 ; X----XXX-------- = ------XXXXXX---------------- +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $8F, $00 ; X---XXXX-------- = ------XXXXXXXX-------------- +.byte $4E, $00 ; -X--XXX--------- = ----XX--XXXXXX-------------- +.byte $0E, $10 ; ----XXX----X---- = --------XXXXXXXX------------ +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ +.byte $8F, $30 ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- +.byte $06, $30 ; -----XX---XX---- = --------XXXX--XXXX---------- +.byte $C1, $60 ; XX-----X-XX----- = ----XXXX--------XXXX-------- +.byte $00, $81 ; --------X------X = --------------------XX------ + +sprite40: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $85, $10 ; X----X-X---X---- = ------XX--XX--XX------------ +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ +.byte $0C, $10 ; ----XX-----X---- = ----------XXXXXX------------ +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $0A, $30 ; ----X-X---XX---- = --------XX--XXXXXX---------- +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $0C, $F1 ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ +.byte $8F, $DF ; X---XXXXXX-XXXXX = ------XXXXXXXXXX--XXXXXXXXXX + +sprite41: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $0A, $20 ; ----X-X---X----- = --------XX--XX--XX---------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $04, $70 ; -----X---XXX---- = ----------XX--XXXXXX-------- +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $08, $B3 ; ----X---X-XX--XX = ------------XXXXXX--XXXX---- +.byte $00, $36 ; ----------XX-XX- = --------------XXXX----XXXX-- +.byte $0C, $08 ; ----XX------X--- = ----------XXXX------------XX + +sprite42: +.byte $00, $C1 ; --------XX-----X = ------------------XXXX------ +.byte $00, $E1 ; --------XXX----X = ----------------XXXXXX------ +.byte $04, $50 ; -----X---X-X---- = ----------XX--XX--XX-------- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $E1 ; --------XXX----X = ----------------XXXXXX------ +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ +.byte $08, $E1 ; ----X---XXX----X = ------------XX--XXXXXX------ +.byte $00, $E3 ; --------XXX---XX = ----------------XXXXXXXX---- +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $00, $76 ; ---------XXX-XX- = --------------XXXXXX--XXXX-- +.byte $00, $24 ; ----------X--X-- = ----------------XX------XX-- +.byte $00, $14 ; -----------X-X-- = --------------XX--------XX-- +.byte $08, $08 ; ----X-------X--- = ------------XX------------XX +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite43: +.byte $4C, $32 ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- +.byte $CB, $D3 ; XX--X-XXXX-X--XX = ----XXXXXX--XXXX--XXXXXX---- +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $06, $60 ; -----XX--XX----- = --------XXXX----XXXX-------- +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $CD, $B3 ; XX--XX-XX-XX--XX = ----XXXX--XXXXXXXX--XXXX---- +.byte $6C, $36 ; -XX-XX----XX-XX- = --XXXX----XXXXXXXX----XXXX-- +.byte $24, $24 ; --X--X----X--X-- = --XX------XX----XX------XX-- +.byte $42, $42 ; -X----X--X----X- = ----XX--XX--------XX--XX---- +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + +sprite44: +.byte $8D, $B1 ; X---XX-XX-XX---X = ------XX--XXXXXXXX--XX------ +.byte $8B, $D1 ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $06, $60 ; -----XX--XX----- = --------XXXX----XXXX-------- +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $EF, $F7 ; XXX-XXXXXXXX-XXX = --XXXXXXXXXXXXXXXXXXXXXXXX-- +.byte $7C, $3E ; -XXXXX----XXXXX- = XXXXXX----XXXXXXXX----XXXXXX +.byte $1C, $38 ; ---XXX----XXX--- = XX--------XXXXXXXX--------XX +.byte $3C, $3C ; --XXXX----XXXX-- = XXXX------XXXXXXXX------XXXX +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $C3, $C3 ; XX----XXXX----XX = ----XXXXXX--------XXXXXX---- + +sprite45: +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- +.byte $06, $60 ; -----XX--XX----- = --------XXXX----XXXX-------- +.byte $64, $26 ; -XX--X----X--XX- = --XXXX----XX----XX----XXXX-- +.byte $48, $12 ; -X--X------X--X- = ----XX------XXXX------XX---- +.byte $6C, $36 ; -XX-XX----XX-XX- = --XXXX----XXXXXXXX----XXXX-- +.byte $CD, $B3 ; XX--XX-XX-XX--XX = ----XXXX--XXXXXXXX--XXXX---- +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $06, $60 ; -----XX--XX----- = --------XXXX----XXXX-------- +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $8B, $D1 ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ +.byte $8D, $B1 ; X---XX-XX-XX---X = ------XX--XXXXXXXX--XX------ + +sprite46: +.byte $E1, $87 ; XXX----XX----XXX = --XXXXXX------------XXXXXX-- +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $06, $60 ; -----XX--XX----- = --------XXXX----XXXX-------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $68, $16 ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- +.byte $4C, $32 ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- +.byte $6C, $36 ; -XX-XX----XX-XX- = --XXXX----XXXXXXXX----XXXX-- +.byte $CD, $B3 ; XX--XX-XX-XX--XX = ----XXXX--XXXXXXXX--XXXX---- +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $46, $62 ; -X---XX--XX---X- = ----XX--XXXX----XXXX--XX---- +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $8B, $D1 ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- + +sprite47: +.byte $02, $00 ; ------X--------- = --------XX------------------ +.byte $04, $10 ; -----X-----X---- = ----------XX--XX------------ +.byte $02, $20 ; ------X---X----- = --------XX------XX---------- +.byte $44, $10 ; -X---X-----X---- = ----XX----XX--XX------------ +.byte $22, $20 ; --X---X---X----- = --XX----XX------XX---------- +.byte $40, $10 ; -X---------X---- = ----XX--------XX------------ +.byte $26, $00 ; --X--XX--------- = --XX----XXXX---------------- +.byte $C9, $10 ; XX--X--X---X---- = ----XXXX----XXXX------------ +.byte $24, $20 ; --X--X----X----- = --XX------XX----XX---------- +.byte $24, $20 ; --X--X----X----- = --XX------XX----XX---------- +.byte $12, $40 ; ---X--X--X------ = XX------XX--------XX-------- +.byte $14, $40 ; ---X-X---X------ = XX--------XX------XX-------- +.byte $22, $20 ; --X---X---X----- = --XX----XX------XX---------- +.byte $22, $20 ; --X---X---X----- = --XX----XX------XX---------- +.byte $C9, $10 ; XX--X--X---X---- = ----XXXX----XXXX------------ +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- + +sprite48: +.byte $08, $00 ; ----X----------- = ------------XX-------------- +.byte $81, $91 ; X------XX--X---X = ------XX------XX----XX------ +.byte $0A, $40 ; ----X-X--X------ = --------XX--XX----XX-------- +.byte $81, $91 ; X------XX--X---X = ------XX------XX----XX------ +.byte $0A, $40 ; ----X-X--X------ = --------XX--XX----XX-------- +.byte $81, $81 ; X------XX------X = ------XX------------XX------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $06, $60 ; -----XX--XX----- = --------XXXX----XXXX-------- +.byte $81, $81 ; X------XX------X = ------XX------------XX------ +.byte $81, $C1 ; X------XXX-----X = ------XX----------XXXX------ +.byte $48, $22 ; -X--X-----X---X- = ----XX------XX--XX----XX---- +.byte $44, $12 ; -X---X-----X--X- = ----XX----XX--XX------XX---- +.byte $83, $81 ; X-----XXX------X = ------XXXX----------XX------ +.byte $81, $81 ; X------XX------X = ------XX------------XX------ +.byte $06, $60 ; -----XX--XX----- = --------XXXX----XXXX-------- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ + +sprite49: +.byte $00, $20 ; ----------X----- = ----------------XX---------- +.byte $04, $40 ; -----X---X------ = ----------XX------XX-------- +.byte $02, $22 ; ------X---X---X- = --------XX------XX----XX---- +.byte $04, $44 ; -----X---X---X-- = ----------XX------XX----XX-- +.byte $02, $22 ; ------X---X---X- = --------XX------XX----XX---- +.byte $04, $04 ; -----X-------X-- = ----------XX------------XX-- +.byte $00, $32 ; ----------XX--X- = --------------XXXX----XX---- +.byte $0C, $C1 ; ----XX--XX-----X = ----------XXXX----XXXX------ +.byte $02, $02 ; ------X-------X- = --------XX------------XX---- +.byte $02, $02 ; ------X-------X- = --------XX------------XX---- +.byte $8D, $24 ; X---XX-X--X--X-- = ------XX--XXXX--XX------XX-- +.byte $81, $D5 ; X------XXX-X-X-X = ------XX------XX--XXXX--XX-- +.byte $02, $02 ; ------X-------X- = --------XX------------XX---- +.byte $02, $02 ; ------X-------X- = --------XX------------XX---- +.byte $0C, $C1 ; ----XX--XX-----X = ----------XXXX----XXXX------ +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- + +sprite4A: +.byte $00, $12 ; -----------X--X- = --------------XX------XX---- +.byte $04, $24 ; -----X----X--X-- = ----------XX----XX------XX-- +.byte $02, $12 ; ------X----X--X- = --------XX----XX------XX---- +.byte $04, $24 ; -----X----X--X-- = ----------XX----XX------XX-- +.byte $02, $12 ; ------X----X--X- = --------XX----XX------XX---- +.byte $04, $04 ; -----X-------X-- = ----------XX------------XX-- +.byte $02, $60 ; ------X--XX----- = --------XX------XXXX-------- +.byte $08, $93 ; ----X---X--X--XX = ------------XXXX----XXXX---- +.byte $04, $14 ; -----X-----X-X-- = ----------XX--XX--------XX-- +.byte $04, $24 ; -----X----X--X-- = ----------XX----XX------XX-- +.byte $02, $48 ; ------X--X--X--- = --------XX--------XX------XX +.byte $02, $28 ; ------X---X-X--- = --------XX------XX--------XX +.byte $04, $44 ; -----X---X---X-- = ----------XX------XX----XX-- +.byte $04, $85 ; -----X--X----X-X = ----------XX--------XX--XX-- +.byte $08, $93 ; ----X---X--X--XX = ------------XXXX----XXXX---- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- + +sprite4B: +.byte $85, $40 ; X----X-X-X------ = ------XX--XX------XX-------- +.byte $46, $62 ; -X---XX--XX---X- = ----XX--XXXX----XXXX--XX---- +.byte $08, $A1 ; ----X---X-X----X = ------------XX--XX--XX------ +.byte $E9, $68 ; XXX-X--X-XX-X--- = --XXXXXX----XX--XXXX------XX +.byte $3A, $3E ; --XXX-X---XXXXX- = XXXX----XX--XXXXXX----XXXXXX +.byte $0C, $B1 ; ----XX--X-XX---X = ----------XXXXXXXX--XX------ +.byte $FF, $7E ; XXXXXXXX-XXXXXX- = XXXXXXXXXXXXXXXXXXXX--XXXXXX +.byte $0E, $F1 ; ----XXX-XXXX---X = --------XXXXXXXXXXXXXX------ +.byte $7E, $74 ; -XXXXXX--XXX-X-- = XXXXXX--XXXXXXXXXXXX----XX-- +.byte $1E, $FF ; ---XXXX-XXXXXXXX = XX------XXXXXXXXXXXXXXXXXXXX +.byte $8D, $F1 ; X---XX-XXXXX---X = ------XX--XXXXXXXXXXXX------ +.byte $64, $56 ; -XX--X---X-X-XX- = --XXXX----XX--XX--XX--XXXX-- +.byte $32, $5C ; --XX--X--X-XXX-- = XXXX----XX----XX--XX----XXXX +.byte $99, $58 ; X--XX--X-X-XX--- = XX----XX----XXXX--XX------XX +.byte $44, $91 ; -X---X--X--X---X = ----XX----XX--XX----XX------ +.byte $66, $93 ; -XX--XX-X--X--XX = --XXXX--XXXX--XX----XXXX---- + +sprite4C: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $0A, $40 ; ----X-X--X------ = --------XX--XX----XX-------- +.byte $0C, $20 ; ----XX----X----- = ----------XXXX--XX---------- +.byte $68, $E5 ; -XX-X---XXX--X-X = --XXXX------XX--XXXXXX--XX-- +.byte $CB, $36 ; XX--X-XX--XX-XX- = ----XXXXXX--XXXXXX----XXXX-- +.byte $0C, $B1 ; ----XX--X-XX---X = ----------XXXXXXXX--XX------ +.byte $EF, $76 ; XXX-XXXX-XXX-XX- = --XXXXXXXXXXXXXXXXXX--XXXX-- +.byte $0E, $F5 ; ----XXX-XXXX-X-X = --------XXXXXXXXXXXXXX--XX-- +.byte $EF, $70 ; XXX-XXXX-XXX---- = --XXXXXXXXXXXXXXXXXX-------- +.byte $3E, $F7 ; --XXXXX-XXXX-XXX = XXXX----XXXXXXXXXXXXXXXXXX-- +.byte $8D, $F1 ; X---XX-XXXXX---X = ------XX--XXXXXXXXXXXX------ +.byte $64, $56 ; -XX--X---X-X-XX- = --XXXX----XX--XX--XX--XXXX-- +.byte $22, $54 ; --X---X--X-X-X-- = --XX----XX----XX--XX----XX-- +.byte $8D, $91 ; X---XX-XX--X---X = ------XX--XXXXXX----XX------ +.byte $C5, $B3 ; XX---X-XX-XX--XX = ----XXXX--XX--XXXX--XXXX---- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- + +sprite4D: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $04, $40 ; -----X---X------ = ----------XX------XX-------- +.byte $89, $60 ; X---X--X-XX----- = ------XX----XX--XXXX-------- +.byte $0A, $32 ; ----X-X---XX--X- = --------XX--XXXXXX----XX---- +.byte $0C, $B1 ; ----XX--X-XX---X = ----------XXXXXXXX--XX------ +.byte $CF, $70 ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- +.byte $0E, $F3 ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- +.byte $CF, $70 ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- +.byte $4E, $F3 ; -X--XXX-XXXX--XX = ----XX--XXXXXXXXXXXXXXXX---- +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $44, $52 ; -X---X---X-X--X- = ----XX----XX--XX--XX--XX---- +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $85, $D1 ; X----X-XXX-X---X = ------XX--XX--XX--XXXX------ +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite4E: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $0A, $40 ; ----X-X--X------ = --------XX--XX----XX-------- +.byte $0C, $20 ; ----XX----X----- = ----------XXXX--XX---------- +.byte $68, $E5 ; -XX-X---XXX--X-X = --XXXX------XX--XXXXXX--XX-- +.byte $CB, $36 ; XX--X-XX--XX-XX- = ----XXXXXX--XXXXXX----XXXX-- +.byte $0C, $B1 ; ----XX--X-XX---X = ----------XXXXXXXX--XX------ +.byte $EF, $76 ; XXX-XXXX-XXX-XX- = --XXXXXXXXXXXXXXXXXX--XXXX-- +.byte $0E, $F5 ; ----XXX-XXXX-X-X = --------XXXXXXXXXXXXXX--XX-- +.byte $EF, $70 ; XXX-XXXX-XXX---- = --XXXXXXXXXXXXXXXXXX-------- +.byte $3E, $F7 ; --XXXXX-XXXX-XXX = XXXX----XXXXXXXXXXXXXXXXXX-- +.byte $8D, $F1 ; X---XX-XXXXX---X = ------XX--XXXXXXXXXXXX------ +.byte $64, $56 ; -XX--X---X-X-XX- = --XXXX----XX--XX--XX--XXXX-- +.byte $22, $54 ; --X---X--X-X-X-- = --XX----XX----XX--XX----XX-- +.byte $8D, $91 ; X---XX-XX--X---X = ------XX--XXXXXX----XX------ +.byte $C5, $B3 ; XX---X-XX-XX--XX = ----XXXX--XX--XXXX--XXXX---- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- + +sprite4F: +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $FF, $70 ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $60, $30 ; -XX-------XX---- = --XXXX--------XXXX---------- +.byte $B9, $60 ; X-XXX--X-XX----- = XXXX--XX----XX--XXXX-------- +.byte $D9, $50 ; XX-XX--X-X-X---- = XX--XXXX----XXXX--XX-------- +.byte $60, $30 ; -XX-------XX---- = --XXXX--------XXXX---------- + +sprite50: +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $44, $62 ; -X---X---XX---X- = ----XX----XX----XXXX--XX---- +.byte $C7, $62 ; XX---XXX-XX---X- = ----XXXXXXXX----XXXX--XX---- +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ + +sprite51: +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $8F, $F7 ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $06, $83 ; -----XX-X-----XX = --------XXXX--------XXXX---- +.byte $8D, $C5 ; X---XX-XXX---X-X = ------XX--XXXX----XXXX--XX-- +.byte $8B, $46 ; X---X-XX-X---XX- = ------XXXX--XX----XX--XXXX-- +.byte $06, $83 ; -----XX-X-----XX = --------XXXX--------XXXX---- + +sprite52: +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $0E, $FF ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $0C, $06 ; ----XX-------XX- = ----------XXXX--------XXXX-- +.byte $02, $9B ; ------X-X--XX-XX = --------XX----XX----XXXX--XX +.byte $0E, $9B ; ----XXX-X--XX-XX = --------XXXXXXXX----XXXX--XX +.byte $0C, $06 ; ----XX-------XX- = ----------XXXX--------XXXX-- + +sprite53: +.byte $E1, $00 ; XXX----X-------- = --XXXXXX-------------------- +.byte $A1, $00 ; X-X----X-------- = --XX--XX-------------------- +.byte $E7, $00 ; XXX--XXX-------- = --XXXXXXXXXX---------------- +.byte $C5, $00 ; XX---X-X-------- = ----XXXX--XX---------------- +.byte $CF, $00 ; XX--XXXX-------- = ----XXXXXXXXXX-------------- +.byte $CF, $00 ; XX--XXXX-------- = ----XXXXXXXXXX-------------- +.byte $83, $00 ; X-----XX-------- = ------XXXX------------------ +.byte $C7, $00 ; XX---XXX-------- = ----XXXXXXXX---------------- +.byte $EF, $00 ; XXX-XXXX-------- = --XXXXXXXXXXXX-------------- +.byte $EF, $00 ; XXX-XXXX-------- = --XXXXXXXXXXXX-------------- +.byte $FD, $10 ; XXXXXX-X---X---- = XXXXXXXX--XXXXXX------------ +.byte $FB, $10 ; XXXXX-XX---X---- = XXXXXXXXXX--XXXX------------ +.byte $C7, $00 ; XX---XXX-------- = ----XXXXXXXX---------------- +.byte $ED, $00 ; XXX-XX-X-------- = --XXXXXX--XXXX-------------- +.byte $6E, $00 ; -XX-XXX--------- = --XXXX--XXXXXX-------------- +.byte $ED, $10 ; XXX-XX-X---X---- = --XXXXXX--XXXXXX------------ + +sprite54: +.byte $87, $00 ; X----XXX-------- = ------XXXXXX---------------- +.byte $85, $00 ; X----X-X-------- = ------XX--XX---------------- +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ +.byte $06, $10 ; -----XX----X---- = --------XXXX--XX------------ +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $0C, $00 ; ----XX---------- = ----------XXXX-------------- +.byte $0E, $10 ; ----XXX----X---- = --------XXXXXXXX------------ +.byte $8B, $30 ; X---X-XX--XX---- = ------XXXX--XXXXXX---------- +.byte $8B, $30 ; X---X-XX--XX---- = ------XXXX--XXXXXX---------- +.byte $8B, $30 ; X---X-XX--XX---- = ------XXXX--XXXXXX---------- +.byte $87, $30 ; X----XXX--XX---- = ------XXXXXX--XXXX---------- +.byte $0E, $10 ; ----XXX----X---- = --------XXXXXXXX------------ +.byte $0C, $00 ; ----XX---------- = ----------XXXX-------------- +.byte $0C, $00 ; ----XX---------- = ----------XXXX-------------- +.byte $0C, $10 ; ----XX-----X---- = ----------XXXXXX------------ + +sprite55: +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $0A, $00 ; ----X-X--------- = --------XX--XX-------------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $0C, $20 ; ----XX----X----- = ----------XXXX--XX---------- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $8F, $E1 ; X---XXXXXXX----X = ------XXXXXXXX--XXXXXX------ +.byte $8F, $D1 ; X---XXXXXX-X---X = ------XXXXXXXXXX--XXXX------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $0E, $60 ; ----XXX--XX----- = --------XXXXXX--XXXX-------- +.byte $06, $70 ; -----XX--XXX---- = --------XXXX--XXXXXX-------- +.byte $0E, $E1 ; ----XXX-XXX----X = --------XXXXXX--XXXXXX------ + +sprite56: +.byte $0C, $10 ; ----XX-----X---- = ----------XXXXXX------------ +.byte $04, $10 ; -----X-----X---- = ----------XX--XX------------ +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $08, $50 ; ----X----X-X---- = ------------XXXX--XX-------- +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $0C, $F1 ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ +.byte $0E, $F3 ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- +.byte $8F, $F7 ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- +.byte $8B, $76 ; X---X-XX-XXX-XX- = ------XXXX--XXXXXXXX--XXXX-- +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $0C, $D5 ; ----XX--XX-X-X-X = ----------XXXXXX--XXXX--XX-- +.byte $06, $87 ; -----XX-X----XXX = --------XXXX--------XXXXXX-- +.byte $0E, $02 ; ----XXX-------X- = --------XXXXXX--------XX---- + +sprite57: +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $0C, $20 ; ----XX----X----- = ----------XXXX--XX---------- +.byte $0E, $30 ; ----XXX---XX---- = --------XXXXXXXXXX---------- +.byte $0A, $10 ; ----X-X----X---- = --------XX--XXXX------------ +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ +.byte $0C, $00 ; ----XX---------- = ----------XXXX-------------- +.byte $0E, $10 ; ----XXX----X---- = --------XXXXXXXX------------ +.byte $8F, $30 ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- +.byte $CF, $70 ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- +.byte $EF, $F1 ; XXX-XXXXXXXX---X = --XXXXXXXXXXXXXXXXXXXX------ +.byte $6E, $D1 ; -XX-XXX-XX-X---X = --XXXX--XXXXXXXX--XXXX------ +.byte $8F, $10 ; X---XXXX---X---- = ------XXXXXXXXXX------------ +.byte $AB, $30 ; X-X-X-XX--XX---- = --XX--XXXX--XXXXXX---------- +.byte $E1, $60 ; XXX----X-XX----- = --XXXXXX--------XXXX-------- +.byte $40, $70 ; -X-------XXX---- = ----XX--------XXXXXX-------- + +sprite58: +.byte $00, $E1 ; --------XXX----X = ----------------XXXXXX------ +.byte $00, $B1 ; --------X-XX---X = --------------XXXX--XX------ +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $08, $60 ; ----X----XX----- = ------------XX--XXXX-------- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $0C, $70 ; ----XX---XXX---- = ----------XXXXXXXXXX-------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $0C, $F1 ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ +.byte $0C, $F1 ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ +.byte $0E, $E3 ; ----XXX-XXX---XX = --------XXXXXX--XXXXXXXX---- +.byte $06, $F3 ; -----XX-XXXX--XX = --------XXXX--XXXXXXXXXX---- +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $0C, $E1 ; ----XX--XXX----X = ----------XXXX--XXXXXX------ +.byte $0C, $D1 ; ----XX--XX-X---X = ----------XXXXXX--XXXX------ +.byte $0E, $E1 ; ----XXX-XXX----X = --------XXXXXX--XXXXXX------ + +sprite59: +.byte $00, $C3 ; --------XX----XX = ------------------XXXXXX---- +.byte $00, $62 ; ---------XX---X- = ----------------XXXX--XX---- +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $00, $D1 ; --------XX-X---X = --------------XX--XXXX------ +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $08, $F1 ; ----X---XXXX---X = ------------XXXXXXXXXX------ +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ +.byte $08, $F3 ; ----X---XXXX--XX = ------------XXXXXXXXXXXX---- +.byte $08, $B3 ; ----X---X-XX--XX = ------------XXXXXX--XXXX---- +.byte $08, $B3 ; ----X---X-XX--XX = ------------XXXXXX--XXXX---- +.byte $08, $D3 ; ----X---XX-X--XX = ------------XXXX--XXXXXX---- +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $70 ; ---------XXX---- = --------------XXXXXX-------- + +sprite5A: +.byte $00, $87 ; --------X----XXX = --------------------XXXXXX-- +.byte $00, $C5 ; --------XX---X-X = ------------------XXXX--XX-- +.byte $00, $E7 ; --------XXX--XXX = ----------------XXXXXXXXXX-- +.byte $00, $A3 ; --------X-X---XX = ----------------XX--XXXX---- +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $00, $F3 ; --------XXXX--XX = --------------XXXXXXXXXX---- +.byte $00, $C1 ; --------XX-----X = ------------------XXXX------ +.byte $00, $E3 ; --------XXX---XX = ----------------XXXXXXXX---- +.byte $00, $F7 ; --------XXXX-XXX = --------------XXXXXXXXXXXX-- +.byte $00, $F7 ; --------XXXX-XXX = --------------XXXXXXXXXXXX-- +.byte $08, $BF ; ----X---X-XXXXXX = ------------XXXXXX--XXXXXXXX +.byte $08, $DF ; ----X---XX-XXXXX = ------------XXXX--XXXXXXXXXX +.byte $00, $E3 ; --------XXX---XX = ----------------XXXXXXXX---- +.byte $00, $B7 ; --------X-XX-XXX = --------------XXXX--XXXXXX-- +.byte $00, $76 ; ---------XXX-XX- = --------------XXXXXX--XXXX-- +.byte $08, $B7 ; ----X---X-XX-XXX = ------------XXXXXX--XXXXXX-- + +sprite5B: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $68, $16 ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- +.byte $7A, $5E ; -XXXX-X--X-XXXX- = XXXXXX--XX--XXXX--XX--XXXXXX +.byte $72, $4E ; -XXX--X--X--XXX- = XXXXXX--XX--------XX--XXXXXX +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $06, $60 ; -----XX--XX----- = --------XXXX----XXXX-------- +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $8B, $D1 ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + +sprite5C: +.byte $C7, $00 ; XX---XXX-------- = ----XXXXXXXX---------------- +.byte $EF, $10 ; XXX-XXXX---X---- = --XXXXXXXXXXXXXX------------ +.byte $EF, $F1 ; XXX-XXXXXXXX---X = --XXXXXXXXXXXXXXXXXXXX------ +.byte $68, $16 ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- +.byte $02, $5E ; ------X--X-XXXX- = --------XX----XX--XX--XXXXXX +.byte $02, $4E ; ------X--X--XXX- = --------XX--------XX--XXXXXX +.byte $0E, $7E ; ----XXX--XXXXXX- = --------XXXXXXXXXXXX--XXXXXX +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $06, $60 ; -----XX--XX----- = --------XXXX----XXXX-------- +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $8B, $D1 ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + +sprite5D: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $68, $16 ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- +.byte $7A, $5E ; -XXXX-X--X-XXXX- = XXXXXX--XX--XXXX--XX--XXXXXX +.byte $72, $4E ; -XXX--X--X--XXX- = XXXXXX--XX--------XX--XXXXXX +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $06, $60 ; -----XX--XX----- = --------XXXX----XXXX-------- +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $8B, $D1 ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + +sprite5E: +.byte $00, $E3 ; --------XXX---XX = ----------------XXXXXXXX---- +.byte $08, $F7 ; ----X---XXXX-XXX = ------------XXXXXXXXXXXXXX-- +.byte $8F, $F7 ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- +.byte $68, $16 ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- +.byte $7A, $40 ; -XXXX-X--X------ = XXXXXX--XX--XX----XX-------- +.byte $72, $40 ; -XXX--X--X------ = XXXXXX--XX--------XX-------- +.byte $7E, $70 ; -XXXXXX--XXX---- = XXXXXX--XXXXXXXXXXXX-------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $06, $60 ; -----XX--XX----- = --------XXXX----XXXX-------- +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $8B, $D1 ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + +sprite5F: +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $8D, $00 ; X---XX-X-------- = ------XX--XXXX-------------- +.byte $46, $10 ; -X---XX----X---- = ----XX--XXXX--XX------------ +.byte $26, $20 ; --X--XX---X----- = --XX----XXXX----XX---------- +.byte $16, $40 ; ---X-XX--X------ = XX------XXXX------XX-------- +.byte $16, $40 ; ---X-XX--X------ = XX------XXXX------XX-------- +.byte $26, $20 ; --X--XX---X----- = --XX----XXXX----XX---------- +.byte $46, $10 ; -X---XX----X---- = ----XX--XXXX--XX------------ +.byte $8D, $00 ; X---XX-X-------- = ------XX--XXXX-------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $CD, $10 ; XX--XX-X---X---- = ----XXXX--XXXXXX------------ +.byte $26, $00 ; --X--XX--------- = --XX----XXXX---------------- +.byte $EF, $70 ; XXX-XXXX-XXX---- = --XXXXXXXXXXXXXXXXXX-------- +.byte $FF, $70 ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- +.byte $20, $20 ; --X-------X----- = --XX------------XX---------- +.byte $4E, $00 ; -X--XXX--------- = ----XX--XXXXXX-------------- + +sprite60: +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $04, $30 ; -----X----XX---- = ----------XX--XXXX---------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $04, $30 ; -----X----XX---- = ----------XX--XXXX---------- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $0E, $60 ; ----XXX--XX----- = --------XXXXXX--XXXX-------- +.byte $08, $91 ; ----X---X--X---X = ------------XXXX----XX------ +.byte $CF, $F1 ; XX--XXXXXXXX---X = ----XXXXXXXXXXXXXXXXXX------ +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $81, $81 ; X------XX------X = ------XX------------XX------ +.byte $0C, $50 ; ----XX---X-X---- = ----------XXXXXX--XX-------- + +sprite61: +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $10 ; -----------X---- = --------------XX------------ +.byte $00, $10 ; -----------X---- = --------------XX------------ +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $08, $B1 ; ----X---X-XX---X = ------------XXXXXX--XX------ +.byte $02, $32 ; ------X---XX--X- = --------XX----XXXX----XX---- +.byte $8F, $F7 ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- +.byte $8F, $F3 ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- +.byte $00, $02 ; --------------X- = ----------------------XX---- +.byte $0C, $D1 ; ----XX--XX-X---X = ----------XXXXXX--XXXX------ + +sprite62: +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $B1 ; --------X-XX---X = --------------XXXX--XX------ +.byte $08, $62 ; ----X----XX---X- = ------------XX--XXXX--XX---- +.byte $08, $62 ; ----X----XX---X- = ------------XX--XXXX--XX---- +.byte $04, $64 ; -----X---XX--X-- = ----------XX----XXXX----XX-- +.byte $04, $64 ; -----X---XX--X-- = ----------XX----XXXX----XX-- +.byte $08, $62 ; ----X----XX---X- = ------------XX--XXXX--XX---- +.byte $08, $62 ; ----X----XX---X- = ------------XX--XXXX--XX---- +.byte $00, $B1 ; --------X-XX---X = --------------XXXX--XX------ +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $08, $E1 ; ----X---XXX----X = ------------XX--XXXXXX------ +.byte $04, $64 ; -----X---XX--X-- = ----------XX----XXXX----XX-- +.byte $0E, $FF ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX +.byte $0C, $FF ; ----XX--XXXXXXXX = ----------XXXXXXXXXXXXXXXXXX +.byte $04, $00 ; -----X---------- = ----------XX---------------- +.byte $08, $D3 ; ----X---XX-X--XX = ------------XXXX--XXXXXX---- + +sprite63: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $40, $02 ; -X------------X- = ----XX----------------XX---- +.byte $20, $04 ; --X----------X-- = --XX--------------------XX-- +.byte $10, $08 ; ---X--------X--- = XX------------------------XX +.byte $10, $08 ; ---X--------X--- = XX------------------------XX +.byte $10, $08 ; ---X--------X--- = XX------------------------XX +.byte $20, $04 ; --X----------X-- = --XX--------------------XX-- +.byte $50, $0A ; -X-X--------X-X- = XX--XX----------------XX--XX +.byte $A3, $C5 ; X-X---XXXX---X-X = --XX--XXXX--------XXXX--XX-- +.byte $9D, $B9 ; X--XXX-XX-XXX--X = XX----XX--XXXXXXXX--XX----XX +.byte $44, $22 ; -X---X----X---X- = ----XX----XX----XX----XX---- +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- + +sprite64: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $40, $02 ; -X------------X- = ----XX----------------XX---- +.byte $20, $04 ; --X----------X-- = --XX--------------------XX-- +.byte $10, $08 ; ---X--------X--- = XX------------------------XX +.byte $F1, $8F ; XXXX---XX---XXXX = XXXXXXXX------------XXXXXXXX +.byte $5E, $7A ; -X-XXXX--XXXX-X- = XX--XX--XXXXXXXXXXXX--XX--XX +.byte $AD, $B5 ; X-X-XX-XX-XX-X-X = --XX--XX--XXXXXXXX--XX--XX-- +.byte $44, $22 ; -X---X----X---X- = ----XX----XX----XX----XX---- +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite65: +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $44, $22 ; -X---X----X---X- = ----XX----XX----XX----XX---- +.byte $9D, $B9 ; X--XXX-XX-XXX--X = XX----XX--XXXXXXXX--XX----XX +.byte $A3, $C5 ; X-X---XXXX---X-X = --XX--XXXX--------XXXX--XX-- +.byte $4C, $32 ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- +.byte $2E, $74 ; --X-XXX--XXX-X-- = --XX----XXXXXXXXXXXX----XX-- +.byte $16, $68 ; ---X-XX--XX-X--- = XX------XXXX----XXXX------XX +.byte $16, $68 ; ---X-XX--XX-X--- = XX------XXXX----XXXX------XX +.byte $1E, $78 ; ---XXXX--XXXX--- = XX------XXXXXXXXXXXX------XX +.byte $2C, $34 ; --X-XX----XX-X-- = --XX------XXXXXXXX------XX-- +.byte $40, $02 ; -X------------X- = ----XX----------------XX---- +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite66: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $44, $22 ; -X---X----X---X- = ----XX----XX----XX----XX---- +.byte $A5, $A5 ; X-X--X-XX-X--X-X = --XX--XX--XX----XX--XX--XX-- +.byte $DF, $FB ; XX-XXXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX +.byte $76, $EF ; -XXX-XX-XXX-XXXX = XXXXXX--XXXX----XXXXXXXXXXXX +.byte $1E, $78 ; ---XXXX--XXXX--- = XX------XXXXXXXXXXXX------XX +.byte $2C, $34 ; --X-XX----XX-X-- = --XX------XXXXXXXX------XX-- +.byte $40, $02 ; -X------------X- = ----XX----------------XX---- +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite67: +.byte $60, $30 ; -XX-------XX---- = --XXXX--------XXXX---------- +.byte $D9, $40 ; XX-XX--X-X------ = XX--XXXX----XX----XX-------- +.byte $D9, $70 ; XX-XX--X-XXX---- = XX--XXXX----XXXXXXXX-------- +.byte $60, $30 ; -XX-------XX---- = --XXXX--------XXXX---------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $FF, $70 ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- +.byte $A9, $20 ; X-X-X--X--X----- = --XX--XX----XX--XX---------- +.byte $89, $00 ; X---X--X-------- = ------XX----XX-------------- +.byte $89, $00 ; X---X--X-------- = ------XX----XX-------------- +.byte $8F, $00 ; X---XXXX-------- = ------XXXXXXXX-------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $8F, $00 ; X---XXXX-------- = ------XXXXXXXX-------------- +.byte $CF, $10 ; XX--XXXX---X---- = ----XXXXXXXXXXXX------------ + +sprite68: +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $44, $62 ; -X---X---XX---X- = ----XX----XX----XXXX--XX---- +.byte $C7, $62 ; XX---XXX-XX---X- = ----XXXXXXXX----XXXX--XX---- +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $85, $A1 ; X----X-XX-X----X = ------XX--XX----XX--XX------ +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite69: +.byte $06, $83 ; -----XX-X-----XX = --------XXXX--------XXXX---- +.byte $8B, $C7 ; X---X-XXXX---XXX = ------XXXX--XX----XXXXXXXX-- +.byte $8B, $44 ; X---X-XX-X---X-- = ------XXXX--XX----XX----XX-- +.byte $06, $83 ; -----XX-X-----XX = --------XXXX--------XXXX---- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $8F, $F7 ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- +.byte $0A, $42 ; ----X-X--X----X- = --------XX--XX----XX--XX---- +.byte $08, $40 ; ----X----X------ = ------------XX----XX-------- +.byte $08, $40 ; ----X----X------ = ------------XX----XX-------- +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $0C, $F1 ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite6A: +.byte $0C, $06 ; ----XX-------XX- = ----------XXXX--------XXXX-- +.byte $0E, $9D ; ----XXX-X--XXX-X = --------XXXXXXXX----XX--XXXX +.byte $02, $9D ; ------X-X--XXX-X = --------XX----XX----XX--XXXX +.byte $0C, $06 ; ----XX-------XX- = ----------XXXX--------XXXX-- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $0E, $FF ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX +.byte $04, $95 ; -----X--X--X-X-X = ----------XX--XX----XX--XX-- +.byte $00, $91 ; --------X--X---X = --------------XX----XX------ +.byte $00, $91 ; --------X--X---X = --------------XX----XX------ +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ +.byte $08, $F3 ; ----X---XXXX--XX = ------------XXXXXXXXXXXX---- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite6B: +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $5A, $5A ; -X-XX-X--X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $89, $91 ; X---X--XX--X---X = ------XX----XXXX----XX------ +.byte $42, $42 ; -X----X--X----X- = ----XX--XX--------XX--XX---- +.byte $85, $A1 ; X----X-XX-X----X = ------XX--XX----XX--XX------ +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $85, $A1 ; X----X-XX-X----X = ------XX--XX----XX--XX------ +.byte $42, $42 ; -X----X--X----X- = ----XX--XX--------XX--XX---- +.byte $81, $81 ; X------XX------X = ------XX------------XX------ + +sprite6C: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $5A, $5A ; -X-XX-X--X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $89, $91 ; X---X--XX--X---X = ------XX----XXXX----XX------ +.byte $42, $42 ; -X----X--X----X- = ----XX--XX--------XX--XX---- +.byte $85, $A1 ; X----X-XX-X----X = ------XX--XX----XX--XX------ +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $04, $20 ; -----X----X----- = ----------XX----XX---------- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $44, $20 ; -X---X----X----- = ----XX----XX----XX---------- +.byte $2A, $52 ; --X-X-X--X-X--X- = --XX----XX--XXXX--XX--XX---- +.byte $85, $A5 ; X----X-XX-X--X-X = ------XX--XX----XX--XX--XX-- + +sprite6D: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $0E ; ------------XXX- = ----------------------XXXXXX +.byte $08, $FB ; ----X---XXXXX-XX = ------------XXXXXXXXXXXX--XX +.byte $FF, $5E ; XXXXXXXX-X-XXXX- = XXXXXXXXXXXXXXXX--XX--XXXXXX +.byte $5A, $F1 ; -X-XX-X-XXXX---X = XX--XX--XX--XXXXXXXXXX------ +.byte $FF, $10 ; XXXXXXXX---X---- = XXXXXXXXXXXXXXXX------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $85, $22 ; X----X-X--X---X- = ------XX--XX----XX----XX---- +.byte $2A, $54 ; --X-X-X--X-X-X-- = --XX----XX--XXXX--XX----XX-- +.byte $04, $22 ; -----X----X---X- = ----------XX----XX----XX---- +.byte $48, $14 ; -X--X------X-X-- = ----XX------XXXX--------XX-- +.byte $0A, $50 ; ----X-X--X-X---- = --------XX--XXXX--XX-------- +.byte $44, $A1 ; -X---X--X-X----X = ----XX----XX----XX--XX------ + +sprite6E: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $20 ; ----------X----- = ----------------XX---------- +.byte $08, $04 ; ----X--------X-- = ------------XX----------XX-- +.byte $00, $4A ; ---------X--X-X- = ------------------XX--XX--XX +.byte $08, $97 ; ----X---X--X-XXX = ------------XXXX----XXXXXX-- +.byte $0E, $52 ; ----XXX--X-X--X- = --------XXXXXXXX--XX--XX---- +.byte $3A, $91 ; --XXX-X-X--X---X = XXXX----XX--XXXX----XX------ +.byte $DD, $14 ; XX-XXX-X---X-X-- = XX--XXXX--XXXXXX--------XX-- +.byte $78, $91 ; -XXXX---X--X---X = XXXXXX------XXXX----XX------ +.byte $C1, $08 ; XX-----X----X--- = ----XXXX------------------XX +.byte $0C, $32 ; ----XX----XX--X- = ----------XXXXXXXX----XX---- +.byte $38, $91 ; --XXX---X--X---X = XXXX--------XXXX----XX------ +.byte $8D, $14 ; X---XX-X---X-X-- = ------XX--XXXXXX--------XX-- +.byte $48, $F3 ; -X--X---XXXX--XX = ----XX------XXXXXXXXXXXX---- + +sprite6F: +.byte $00, $00 ; ---------------- = -------------------------- +.byte $00, $00 ; ---------------- = -------------------------- +.byte $00, $00 ; ---------------- = -------------------------- +.byte $02, $10 ; ------X----X---- = --------XX----XX---------- +.byte $00, $00 ; ---------------- = -------------------------- +.byte $00, $00 ; ---------------- = -------------------------- +.byte $40, $02 ; -X------------X- = ----XX----------------XX-- +.byte $00, $24 ; ----------X--X-- = ----------------XX------XX +.byte $08, $42 ; ----X----X----X- = ------------XX----XX--XX-- +.byte $0E, $20 ; ----XXX---X----- = --------XXXXXX--XX-------- +.byte $2A, $00 ; --X-X-X--------- = --XX----XX--XX------------ +.byte $CD, $02 ; XX--XX-X------X- = ----XXXX--XXXX--------XX-- +.byte $68, $00 ; -XX-X----------- = --XXXX------XX------------ +.byte $C1, $04 ; XX-----X-----X-- = ----XXXX----------------XX +.byte $04, $12 ; -----X-----X--X- = ----------XX--XX------XX-- +.byte $38, $81 ; --XXX---X------X = XXXX--------XX------XX---- + +sprite70: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $08, $00 ; ----X----------- = ------------XX-------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $20 ; ----------X----- = ----------------XX---------- +.byte $81, $81 ; X------XX------X = ------XX------------XX------ +.byte $0A, $02 ; ----X-X-------X- = --------XX--XX--------XX---- +.byte $00, $20 ; ----------X----- = ----------------XX---------- +.byte $64, $00 ; -XX--X---------- = --XXXX----XX---------------- +.byte $48, $B1 ; -X--X---X-XX---X = ----XX------XXXXXX--XX------ +.byte $02, $20 ; ------X---X----- = --------XX------XX---------- +.byte $08, $50 ; ----X----X-X---- = ------------XXXX--XX-------- +.byte $8D, $30 ; X---XX-X--XX---- = ------XX--XXXXXXXX---------- + +sprite71: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $08, $00 ; ----X----------- = ------------XX-------------- +.byte $00, $20 ; ----------X----- = ----------------XX---------- +.byte $81, $00 ; X------X-------- = ------XX-------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $04, $40 ; -----X---X------ = ----------XX------XX-------- +.byte $00, $B1 ; --------X-XX---X = --------------XXXX--XX------ +.byte $48, $20 ; -X--X-----X----- = ----XX------XX--XX---------- +.byte $06, $50 ; -----XX--X-X---- = --------XXXX--XX--XX-------- + +sprite72: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $20 ; ----------X----- = ----------------XX---------- +.byte $02, $00 ; ------X--------- = --------XX------------------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- + +sprite73: +.byte $60, $06 ; -XX----------XX- = --XXXX----------------XXXX-- +.byte $9F, $F9 ; X--XXXXXXXXXX--X = XX----XXXXXXXXXXXXXXXX----XX +.byte $9F, $F9 ; X--XXXXXXXXXX--X = XX----XXXXXXXXXXXXXXXX----XX +.byte $60, $06 ; -XX----------XX- = --XXXX----------------XXXX-- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $10, $08 ; ---X--------X--- = XX------------------------XX +.byte $5A, $A9 ; -X-XX-X-X-X-X--X = XX--XX--XX--XX--XX--XX----XX +.byte $9F, $FB ; X--XXXXXXXXXX-XX = XX----XXXXXXXXXXXXXXXXXX--XX +.byte $D5, $D9 ; XX-X-X-XXX-XX--X = XX--XXXX--XX--XX--XXXX----XX +.byte $91, $8B ; X--X---XX---X-XX = XX----XX------------XXXX--XX +.byte $D5, $D9 ; XX-X-X-XXX-XX--X = XX--XXXX--XX--XX--XXXX----XX +.byte $9F, $FB ; X--XXXXXXXXXX-XX = XX----XXXXXXXXXXXXXXXXXX--XX +.byte $5A, $A9 ; -X-XX-X-X-X-X--X = XX--XX--XX--XX--XX--XX----XX +.byte $10, $08 ; ---X--------X--- = XX------------------------XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite74: +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $48, $72 ; -X--X----XXX--X- = ----XX------XXXXXXXX--XX---- +.byte $48, $72 ; -X--X----XXX--X- = ----XX------XXXXXXXX--XX---- +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $B5, $5A ; X-XX-X-X-X-XX-X- = XXXX--XX--XX--XX--XX--XX--XX +.byte $DF, $FF ; XX-XXXXXXXXXXXXX = XX--XXXXXXXXXXXXXXXXXXXXXXXX +.byte $7A, $AB ; -XXXX-X-X-X-X-XX = XXXXXX--XX--XX--XX--XXXX--XX +.byte $D1, $0E ; XX-X---X----XXX- = XX--XXXX--------------XXXXXX +.byte $74, $9B ; -XXX-X--X--XX-XX = XXXXXX----XX--XX----XXXX--XX +.byte $D1, $0E ; XX-X---X----XXX- = XX--XXXX--------------XXXXXX +.byte $7A, $AB ; -XXXX-X-X-X-X-XX = XXXXXX--XX--XX--XX--XXXX--XX +.byte $DF, $FF ; XX-XXXXXXXXXXXXX = XX--XXXXXXXXXXXXXXXXXXXXXXXX +.byte $B5, $5A ; X-XX-X-X-X-XX-X- = XXXX--XX--XX--XX--XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite75: +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $B5, $5E ; X-XX-X-X-X-XXXX- = XXXX--XX--XX--XX--XX--XXXXXX +.byte $70, $0C ; -XXX--------XX-- = XXXXXX------------------XXXX +.byte $3A, $2E ; --XXX-X---X-XXX- = XXXX----XX--XX--XX----XXXXXX +.byte $7C, $7C ; -XXXXX---XXXXX-- = XXXXXX----XXXXXXXXXX----XXXX +.byte $3A, $2E ; --XXX-X---X-XXX- = XXXX----XX--XX--XX----XXXXXX +.byte $70, $0C ; -XXX--------XX-- = XXXXXX------------------XXXX +.byte $B5, $5E ; X-XX-X-X-X-XXXX- = XXXX--XX--XX--XX--XX--XXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite76: +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $4E, $12 ; -X--XXX----X--X- = ----XX--XXXXXXXX------XX---- +.byte $4E, $12 ; -X--XXX----X--X- = ----XX--XXXXXXXX------XX---- +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $5A, $AD ; -X-XX-X-X-X-XX-X = XX--XX--XX--XX--XX--XX--XXXX +.byte $30, $08 ; --XX--------X--- = XXXX----------------------XX +.byte $95, $5C ; X--X-X-X-X-XXX-- = XX----XX--XX--XX--XX----XXXX +.byte $3E, $F9 ; --XXXXX-XXXXX--X = XXXX----XXXXXXXXXXXXXX----XX +.byte $9B, $6C ; X--XX-XX-XX-XX-- = XX----XXXX--XX--XXXX----XXXX +.byte $3E, $F9 ; --XXXXX-XXXXX--X = XXXX----XXXXXXXXXXXXXX----XX +.byte $95, $5C ; X--X-X-X-X-XXX-- = XX----XX--XX--XX--XX----XXXX +.byte $30, $08 ; --XX--------X--- = XXXX----------------------XX +.byte $5A, $AD ; -X-XX-X-X-X-XX-X = XX--XX--XX--XX--XX--XX--XXXX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite77: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $FF, $70 ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- +.byte $10, $70 ; ---X-----XXX---- = XX------------XXXXXX-------- +.byte $FF, $70 ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- +.byte $18, $40 ; ---XX----X------ = XX----------XX----XX-------- +.byte $FF, $40 ; XXXXXXXX-X------ = XXXXXXXXXXXXXX----XX-------- +.byte $FF, $70 ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- + +sprite78: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $40, $C3 ; -X------XX----XX = ----XX------------XXXXXX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $40, $22 ; -X--------X---X- = ----XX----------XX----XX---- +.byte $CF, $32 ; XX--XXXX--XX--X- = ----XXXXXXXXXXXXXX----XX---- +.byte $CF, $F3 ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite79: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $8F, $F7 ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- +.byte $81, $87 ; X------XX----XXX = ------XX------------XXXXXX-- +.byte $8F, $F7 ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- +.byte $81, $44 ; X------X-X---X-- = ------XX----------XX----XX-- +.byte $8F, $74 ; X---XXXX-XXX-X-- = ------XXXXXXXXXXXXXX----XX-- +.byte $8F, $F7 ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite7A: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $0E, $FF ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX +.byte $02, $0E ; ------X-----XXX- = --------XX------------XXXXXX +.byte $0E, $FF ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX +.byte $02, $89 ; ------X-X---X--X = --------XX----------XX----XX +.byte $0E, $F9 ; ----XXX-XXXXX--X = --------XXXXXXXXXXXXXX----XX +.byte $0E, $FF ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite7B: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $02, $00 ; ------X--------- = --------XX------------------ +.byte $85, $00 ; X----X-X-------- = ------XX--XX---------------- +.byte $4A, $00 ; -X--X-X--------- = ----XX--XX--XX-------------- +.byte $A5, $10 ; X-X--X-X---X---- = --XX--XX--XX--XX------------ +.byte $2A, $00 ; --X-X-X--------- = --XX----XX--XX-------------- +.byte $14, $00 ; ---X-X---------- = XX--------XX---------------- +.byte $10, $60 ; ---X-----XX----- = XX--------------XXXX-------- +.byte $10, $60 ; ---X-----XX----- = XX--------------XXXX-------- +.byte $20, $10 ; --X--------X---- = --XX----------XX------------ +.byte $EF, $30 ; XXX-XXXX--XX---- = --XXXXXXXXXXXXXXXX---------- +.byte $CF, $70 ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- +.byte $8F, $30 ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- +.byte $0E, $10 ; ----XXX----X---- = --------XXXXXXXX------------ +.byte $0A, $20 ; ----X-X---X----- = --------XX--XX--XX---------- +.byte $89, $40 ; X---X--X-X------ = ------XX----XX----XX-------- + +sprite7C: +.byte $4A, $00 ; -X--X-X--------- = ----XX--XX--XX-------------- +.byte $85, $10 ; X----X-X---X---- = ------XX--XX--XX------------ +.byte $4A, $00 ; -X--X-X--------- = ----XX--XX--XX-------------- +.byte $85, $10 ; X----X-X---X---- = ------XX--XX--XX------------ +.byte $40, $00 ; -X-------------- = ----XX---------------------- +.byte $40, $00 ; -X-------------- = ----XX---------------------- +.byte $40, $00 ; -X-------------- = ----XX---------------------- +.byte $40, $83 ; -X------X-----XX = ----XX--------------XXXX---- +.byte $40, $83 ; -X------X-----XX = ----XX--------------XXXX---- +.byte $81, $40 ; X------X-X------ = ------XX----------XX-------- +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $0E, $F3 ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- +.byte $0C, $F1 ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $08, $A1 ; ----X---X-X----X = ------------XX--XX--XX------ +.byte $04, $22 ; -----X----X---X- = ----------XX----XX----XX---- + +sprite7D: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $40, $00 ; -X-------------- = ----XX---------------------- +.byte $A1, $00 ; X-X----X-------- = --XX--XX-------------------- +.byte $52, $00 ; -X-X--X--------- = XX--XX--XX------------------ +.byte $A5, $00 ; X-X--X-X-------- = --XX--XX--XX---------------- +.byte $58, $00 ; -X-XX----------- = XX--XX------XX-------------- +.byte $28, $00 ; --X-X----------- = --XX--------XX-------------- +.byte $08, $06 ; ----X--------XX- = ------------XX--------XXXX-- +.byte $04, $06 ; -----X-------XX- = ----------XX----------XXXX-- +.byte $04, $81 ; -----X--X------X = ----------XX--------XX------ +.byte $0C, $F3 ; ----XX--XXXX--XX = ----------XXXXXXXXXXXXXX---- +.byte $0C, $F7 ; ----XX--XXXX-XXX = ----------XXXXXXXXXXXXXXXX-- +.byte $08, $F3 ; ----X---XXXX--XX = ------------XXXXXXXXXXXX---- +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ +.byte $00, $52 ; ---------X-X--X- = --------------XX--XX--XX---- +.byte $08, $44 ; ----X----X---X-- = ------------XX----XX----XX-- + +sprite7E: +.byte $85, $10 ; X----X-X---X---- = ------XX--XX--XX------------ +.byte $4A, $00 ; -X--X-X--------- = ----XX--XX--XX-------------- +.byte $85, $10 ; X----X-X---X---- = ------XX--XX--XX------------ +.byte $4A, $00 ; -X--X-X--------- = ----XX--XX--XX-------------- +.byte $00, $10 ; -----------X---- = --------------XX------------ +.byte $00, $10 ; -----------X---- = --------------XX------------ +.byte $00, $10 ; -----------X---- = --------------XX------------ +.byte $00, $1C ; -----------XXX-- = --------------XX--------XXXX +.byte $08, $0C ; ----X-------XX-- = ------------XX----------XXXX +.byte $08, $02 ; ----X---------X- = ------------XX--------XX---- +.byte $08, $F7 ; ----X---XXXX-XXX = ------------XXXXXXXXXXXXXX-- +.byte $08, $FF ; ----X---XXXXXXXX = ------------XXXXXXXXXXXXXXXX +.byte $00, $F7 ; --------XXXX-XXX = --------------XXXXXXXXXXXX-- +.byte $00, $E3 ; --------XXX---XX = ----------------XXXXXXXX---- +.byte $00, $A5 ; --------X-X--X-X = ----------------XX--XX--XX-- +.byte $00, $99 ; --------X--XX--X = --------------XX----XX----XX + +sprite7F: +.byte $08, $A1 ; ----X---X-X----X = ------------XX--XX--XX------ +.byte $00, $52 ; ---------X-X--X- = --------------XX--XX--XX---- +.byte $08, $A1 ; ----X---X-X----X = ------------XX--XX--XX------ +.byte $00, $52 ; ---------X-X--X- = --------------XX--XX--XX---- +.byte $08, $00 ; ----X----------- = ------------XX-------------- +.byte $08, $00 ; ----X----------- = ------------XX-------------- +.byte $08, $00 ; ----X----------- = ------------XX-------------- +.byte $38, $00 ; --XXX----------- = XXXX--------XX-------------- +.byte $30, $10 ; --XX-------X---- = XXXX----------XX------------ +.byte $40, $10 ; -X---------X---- = ----XX--------XX------------ +.byte $EF, $10 ; XXX-XXXX---X---- = --XXXXXXXXXXXXXX------------ +.byte $FF, $10 ; XXXXXXXX---X---- = XXXXXXXXXXXXXXXX------------ +.byte $EF, $00 ; XXX-XXXX-------- = --XXXXXXXXXXXX-------------- +.byte $C7, $00 ; XX---XXX-------- = ----XXXXXXXX---------------- +.byte $A5, $00 ; X-X--X-X-------- = --XX--XX--XX---------------- +.byte $99, $00 ; X--XX--X-------- = XX----XX----XX-------------- + +sprite80: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $02 ; --------------X- = ----------------------XX---- +.byte $00, $85 ; --------X----X-X = --------------------XX--XX-- +.byte $00, $4A ; ---------X--X-X- = ------------------XX--XX--XX +.byte $00, $A5 ; --------X-X--X-X = ----------------XX--XX--XX-- +.byte $00, $1A ; -----------XX-X- = --------------XX------XX--XX +.byte $00, $14 ; -----------X-X-- = --------------XX--------XX-- +.byte $60, $10 ; -XX--------X---- = --XXXX--------XX------------ +.byte $60, $20 ; -XX-------X----- = --XXXX----------XX---------- +.byte $81, $20 ; X------X--X----- = ------XX--------XX---------- +.byte $CF, $30 ; XX--XXXX--XX---- = ----XXXXXXXXXXXXXX---------- +.byte $EF, $30 ; XXX-XXXX--XX---- = --XXXXXXXXXXXXXXXX---------- +.byte $CF, $10 ; XX--XXXX---X---- = ----XXXXXXXXXXXX------------ +.byte $8F, $00 ; X---XXXX-------- = ------XXXXXXXX-------------- +.byte $4A, $00 ; -X--X-X--------- = ----XX--XX--XX-------------- +.byte $22, $10 ; --X---X----X---- = --XX----XX----XX------------ + +sprite81: +.byte $00, $52 ; ---------X-X--X- = --------------XX--XX--XX---- +.byte $08, $A1 ; ----X---X-X----X = ------------XX--XX--XX------ +.byte $00, $52 ; ---------X-X--X- = --------------XX--XX--XX---- +.byte $08, $A1 ; ----X---X-X----X = ------------XX--XX--XX------ +.byte $00, $02 ; --------------X- = ----------------------XX---- +.byte $00, $02 ; --------------X- = ----------------------XX---- +.byte $00, $02 ; --------------X- = ----------------------XX---- +.byte $C1, $02 ; XX-----X------X- = ----XXXX--------------XX---- +.byte $C1, $02 ; XX-----X------X- = ----XXXX--------------XX---- +.byte $02, $81 ; ------X-X------X = --------XX----------XX------ +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $CF, $70 ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- +.byte $8F, $30 ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- +.byte $0E, $10 ; ----XXX----X---- = --------XXXXXXXX------------ +.byte $85, $10 ; X----X-X---X---- = ------XX--XX--XX------------ +.byte $44, $20 ; -X---X----X----- = ----XX----XX----XX---------- + +sprite82: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $40 ; ---------X------ = ------------------XX-------- +.byte $00, $A1 ; --------X-X----X = ----------------XX--XX------ +.byte $00, $52 ; ---------X-X--X- = --------------XX--XX--XX---- +.byte $08, $A5 ; ----X---X-X--X-X = ------------XX--XX--XX--XX-- +.byte $00, $54 ; ---------X-X-X-- = --------------XX--XX----XX-- +.byte $00, $28 ; ----------X-X--- = ----------------XX--------XX +.byte $06, $08 ; -----XX-----X--- = --------XXXX--------------XX +.byte $06, $08 ; -----XX-----X--- = --------XXXX--------------XX +.byte $08, $04 ; ----X--------X-- = ------------XX----------XX-- +.byte $0C, $F7 ; ----XX--XXXX-XXX = ----------XXXXXXXXXXXXXXXX-- +.byte $0E, $F3 ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- +.byte $0C, $F1 ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $04, $50 ; -----X---X-X---- = ----------XX--XX--XX-------- +.byte $02, $91 ; ------X-X--X---X = --------XX----XX----XX------ + +sprite83: +.byte $A5, $5A ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $F3, $CF ; XXXX--XXXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX +.byte $A5, $5A ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $A3, $4A ; X-X---XX-X--X-X- = --XX--XXXX--------XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite84: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $A5, $5A ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $F3, $CF ; XXXX--XXXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $CF, $F7 ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- +.byte $C3, $C7 ; XX----XXXX---XXX = ----XXXXXX--------XXXXXXXX-- +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $AF, $7A ; X-X-XXXX-XXXX-X- = --XX--XXXXXXXXXXXXXX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite85: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $A5, $5A ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $C3, $C7 ; XX----XXXX---XXX = ----XXXXXX--------XXXXXXXX-- +.byte $CF, $F7 ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $F3, $CF ; XXXX--XXXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX +.byte $AF, $7A ; X-X-XXXX-XXXX-X- = --XX--XXXXXXXXXXXXXX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite86: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $A5, $5A ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $F3, $CF ; XXXX--XXXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $A5, $5A ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $E3, $CB ; XXX---XXXX--X-XX = --XXXXXXXX--------XXXXXX--XX +.byte $F3, $CF ; XXXX--XXXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX +.byte $F3, $CF ; XXXX--XXXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX +.byte $02, $40 ; ------X--X------ = --------XX--------XX-------- +.byte $A5, $5A ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $00, $00 ; ---------------- = ---------------------------- + +sprite87: +.byte $EF, $00 ; XXX-XXXX-------- = --XXXXXXXXXXXX-------------- +.byte $93, $10 ; X--X--XX---X---- = XX----XXXX----XX------------ +.byte $FF, $10 ; XXXXXXXX---X---- = XXXXXXXXXXXXXXXX------------ +.byte $BB, $10 ; X-XXX-XX---X---- = XXXX--XXXX--XXXX------------ +.byte $7C, $10 ; -XXXXX-----X---- = XXXXXX----XXXXXX------------ +.byte $EF, $00 ; XXX-XXXX-------- = --XXXXXXXXXXXX-------------- +.byte $44, $00 ; -X---X---------- = ----XX----XX---------------- +.byte $44, $00 ; -X---X---------- = ----XX----XX---------------- +.byte $44, $00 ; -X---X---------- = ----XX----XX---------------- +.byte $28, $00 ; --X-X----------- = --XX--------XX-------------- +.byte $28, $00 ; --X-X----------- = --XX--------XX-------------- +.byte $28, $00 ; --X-X----------- = --XX--------XX-------------- +.byte $10, $10 ; ---X-------X---- = XX------------XX------------ +.byte $10, $10 ; ---X-------X---- = XX------------XX------------ +.byte $38, $10 ; --XXX------X---- = XXXX--------XXXX------------ +.byte $38, $10 ; --XXX------X---- = XXXX--------XXXX------------ + +sprite88: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $8F, $30 ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- +.byte $4C, $40 ; -X--XX---X------ = ----XX----XXXX----XX-------- +.byte $CF, $70 ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- +.byte $CD, $60 ; XX--XX-X-XX----- = ----XXXX--XXXX--XXXX-------- +.byte $C3, $70 ; XX----XX-XXX---- = ----XXXXXX----XXXXXX-------- +.byte $8F, $30 ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- +.byte $81, $20 ; X------X--X----- = ------XX--------XX---------- +.byte $40, $40 ; -X-------X------ = ----XX------------XX-------- +.byte $40, $40 ; -X-------X------ = ----XX------------XX-------- +.byte $20, $81 ; --X-----X------X = --XX----------------XX------ +.byte $20, $81 ; --X-----X------X = --XX----------------XX------ +.byte $10, $02 ; ---X----------X- = XX--------------------XX---- +.byte $10, $83 ; ---X----X-----XX = XX------------------XXXX---- +.byte $30, $83 ; --XX----X-----XX = XXXX----------------XXXX---- +.byte $30, $00 ; --XX------------ = XXXX------------------------ + +sprite89: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $89, $91 ; X---X--XX--X---X = ------XX----XXXX----XX------ +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $8B, $D1 ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $0E, $70 ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- +.byte $81, $81 ; X------XX------X = ------XX------------XX------ +.byte $40, $02 ; -X------------X- = ----XX----------------XX---- +.byte $20, $04 ; --X----------X-- = --XX--------------------XX-- +.byte $10, $08 ; ---X--------X--- = XX------------------------XX +.byte $10, $08 ; ---X--------X--- = XX------------------------XX +.byte $30, $0C ; --XX--------XX-- = XXXX--------------------XXXX +.byte $30, $0C ; --XX--------XX-- = XXXX--------------------XXXX + +sprite8A: +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $0C, $F1 ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ +.byte $02, $32 ; ------X---XX--X- = --------XX----XXXX----XX---- +.byte $0E, $F3 ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- +.byte $06, $B3 ; -----XX-X-XX--XX = --------XXXX--XXXX--XXXX---- +.byte $0E, $C3 ; ----XXX-XX----XX = --------XXXXXX----XXXXXX---- +.byte $0C, $F1 ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ +.byte $04, $81 ; -----X--X------X = ----------XX--------XX------ +.byte $02, $02 ; ------X-------X- = --------XX------------XX---- +.byte $02, $02 ; ------X-------X- = --------XX------------XX---- +.byte $81, $04 ; X------X-----X-- = ------XX----------------XX-- +.byte $81, $04 ; X------X-----X-- = ------XX----------------XX-- +.byte $40, $08 ; -X----------X--- = ----XX--------------------XX +.byte $C1, $08 ; XX-----X----X--- = ----XXXX------------------XX +.byte $C1, $0C ; XX-----X----XX-- = ----XXXX----------------XXXX +.byte $00, $0C ; ------------XX-- = ------------------------XXXX + +sprite8B: +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $4C, $32 ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- +.byte $68, $16 ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- +.byte $E9, $97 ; XXX-X--XX--X-XXX = --XXXXXX----XXXX----XXXXXX-- +.byte $DF, $FB ; XX-XXXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX +.byte $9B, $D9 ; X--XX-XXXX-XX--X = XX----XXXX--XXXX--XXXX----XX +.byte $22, $54 ; --X---X--X-X-X-- = --XX----XX----XX--XX----XX-- +.byte $99, $44 ; X--XX--X-X---X-- = XX----XX----XX----XX----XX-- +.byte $A9, $89 ; X-X-X--XX---X--X = --XX--XX----XX------XX----XX +.byte $22, $95 ; --X---X-X--X-X-X = --XX----XX----XX----XX--XX +.byte $14, $2A ; ---X-X----X-X-X- = XX--------XX----XX----XX--XX +.byte $24, $A9 ; --X--X--X-X-X--X = --XX------XX----XX--XX----XX +.byte $02, $91 ; ------X-X--X---X = --------XX----XX----XX------ +.byte $81, $12 ; X------X---X--X- = ------XX------XX------XX---- +.byte $00, $20 ; ----------X----- = ----------------XX---------- + +sprite8C: +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $4C, $32 ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- +.byte $68, $16 ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- +.byte $E9, $97 ; XXX-X--XX--X-XXX = --XXXXXX----XXXX----XXXXXX-- +.byte $DF, $FB ; XX-XXXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX +.byte $9B, $D9 ; X--XX-XXXX-XX--X = XX----XXXX--XXXX--XXXX----XX +.byte $2A, $85 ; --X-X-X-X----X-X = --XX----XX--XX------XX--XX-- +.byte $12, $99 ; ---X--X-X--XX--X = XX------XX----XX----XX----XX +.byte $91, $54 ; X--X---X-X-X-X-- = XX----XX------XX--XX----XX-- +.byte $A9, $44 ; X-X-X--X-X---X-- = --XX--XX----XX----XX----XX-- +.byte $A9, $89 ; X-X-X--XX---X--X = --XX--XX----XX------XX----XX +.byte $12, $99 ; ---X--X-X--XX--X = XX------XX----XX----XX----XX +.byte $04, $22 ; -----X----X---X- = ----------XX----XX----XX---- +.byte $04, $A1 ; -----X--X-X----X = ----------XX----XX--XX------ +.byte $02, $00 ; ------X--------- = --------XX------------------ + +sprite8D: +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $4C, $32 ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- +.byte $68, $16 ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- +.byte $E9, $97 ; XXX-X--XX--X-XXX = --XXXXXX----XXXX----XXXXXX-- +.byte $DF, $FB ; XX-XXXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX +.byte $9B, $D9 ; X--XX-XXXX-XX--X = XX----XXXX--XXXX--XXXX----XX +.byte $22, $95 ; --X---X-X--X-X-X = --XX----XX----XX----XX--XX-- +.byte $24, $22 ; --X--X----X---X- = --XX------XX----XX----XX---- +.byte $24, $22 ; --X--X----X---X- = --XX------XX----XX----XX---- +.byte $12, $95 ; ---X--X-X--X-X-X = XX------XX----XX----XX--XX-- +.byte $2A, $44 ; --X-X-X--X---X-- = --XX----XX--XX----XX----XX-- +.byte $A9, $48 ; X-X-X--X-X--X--- = --XX--XX----XX----XX------XX +.byte $81, $91 ; X------XX--X---X = ------XX------XX----XX------ +.byte $02, $22 ; ------X---X---X- = --------XX------XX----XX---- +.byte $00, $20 ; ----------X----- = ----------------XX---------- + +sprite8E: +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $4C, $32 ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- +.byte $68, $16 ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- +.byte $E9, $97 ; XXX-X--XX--X-XXX = --XXXXXX----XXXX----XXXXXX-- +.byte $DF, $FB ; XX-XXXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX +.byte $9B, $D9 ; X--XX-XXXX-XX--X = XX----XXXX--XXXX--XXXX----XX +.byte $A9, $89 ; X-X-X--XX---X--X = --XX--XX----XX------XX----XX +.byte $22, $95 ; --X---X-X--X-X-X = --XX----XX----XX----XX--XX-- +.byte $14, $2A ; ---X-X----X-X-X- = XX--------XX----XX----XX--XX +.byte $24, $2A ; --X--X----X-X-X- = --XX------XX----XX----XX--XX +.byte $12, $2A ; ---X--X---X-X-X- = XX------XX------XX----XX--XX +.byte $91, $95 ; X--X---XX--X-X-X = XX----XX------XX----XX--XX-- +.byte $89, $40 ; X---X--X-X------ = ------XX----XX----XX-------- +.byte $89, $00 ; X---X--X-------- = ------XX----XX-------------- +.byte $00, $10 ; -----------X---- = --------------XX------------ + +sprite8F: +.byte $0C, $20 ; ----XX----X----- = ----------XXXX--XX---------- +.byte $8F, $E1 ; X---XXXXXXX----X = ------XXXXXXXX--XXXXXX------ +.byte $CF, $C3 ; XX--XXXXXX----XX = ----XXXXXXXXXX----XXXXXX---- +.byte $CF, $22 ; XX--XXXX--X---X- = ----XXXXXXXXXX--XX----XX---- +.byte $EF, $64 ; XXX-XXXX-XX--X-- = --XXXXXXXXXXXX--XXXX----XX-- +.byte $EF, $E5 ; XXX-XXXXXXX--X-X = --XXXXXXXXXXXX--XXXXXX--XX-- +.byte $DF, $EF ; XX-XXXXXXXX-XXXX = XX--XXXXXXXXXX--XXXXXXXXXXXX +.byte $00, $EF ; --------XXX-XXXX = ----------------XXXXXXXXXXXX +.byte $97, $00 ; X--X-XXX-------- = XX----XXXXXX---------------- +.byte $97, $FF ; X--X-XXXXXXXXXXX = XX----XXXXXX--XXXXXXXXXXXXXX +.byte $26, $F7 ; --X--XX-XXXX-XXX = --XX----XXXX--XXXXXXXXXXXX-- +.byte $20, $F5 ; --X-----XXXX-X-X = --XX----------XXXXXXXX--XX-- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $40, $02 ; -X------------X- = ----XX----------------XX---- +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $04, $30 ; -----X----XX---- = ----------XX--XXXX---------- + +sprite90: +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $CF, $52 ; XX--XXXX-X-X--X- = ----XXXXXXXXXXXX--XX--XX---- +.byte $CF, $32 ; XX--XXXX--XX--X- = ----XXXXXXXXXXXXXX----XX---- +.byte $EF, $34 ; XXX-XXXX--XX-X-- = --XXXXXXXXXXXXXXXX------XX-- +.byte $2E, $D5 ; --X-XXX-XX-X-X-X = --XX----XXXXXXXX--XXXX--XX-- +.byte $D9, $DF ; XX-XX--XXX-XXXXX = XX--XXXX----XXXX--XXXXXXXXXX +.byte $D7, $EF ; XX-X-XXXXXX-XXXX = XX--XXXXXXXX----XXXXXXXXXXXX +.byte $97, $EF ; X--X-XXXXXX-XXXX = XX----XXXXXX----XXXXXXXXXXXX +.byte $9B, $9F ; X--XX-XXX--XXXXX = XX----XXXX--XXXX----XXXXXXXX +.byte $2A, $74 ; --X-X-X--XXX-X-- = --XX----XX--XXXXXXXX----XX-- +.byte $28, $F5 ; --X-X---XXXX-X-X = --XX--------XXXXXXXXXX--XX-- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $40, $02 ; -X------------X- = ----XX----------------XX---- +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- + +sprite91: +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $CF, $D3 ; XX--XXXXXX-X--XX = ----XXXXXXXXXXXX--XXXXXX---- +.byte $4E, $32 ; -X--XXX---XX--X- = ----XX--XXXXXXXXXX----XX---- +.byte $AD, $74 ; X-X-XX-X-XXX-X-- = --XX--XX--XXXXXXXXXX----XX-- +.byte $AB, $74 ; X-X-X-XX-XXX-X-- = --XX--XXXX--XXXXXXXX----XX-- +.byte $97, $BF ; X--X-XXXX-XXXXXX = XX----XXXXXX--XXXX--XXXXXXXX +.byte $97, $CF ; X--X-XXXXX--XXXX = XX----XXXXXX------XXXXXXXXXX +.byte $93, $EF ; X--X--XXXXX-XXXX = XX----XXXX------XXXXXXXXXXXX +.byte $9D, $EF ; X--XXX-XXXX-XXXX = XX----XX--XXXX--XXXXXXXXXXXX +.byte $2E, $D7 ; --X-XXX-XX-X-XXX = --XX----XXXXXXXX--XXXXXXXX-- +.byte $28, $34 ; --X-X-----XX-X-- = --XX--------XXXXXX------XX-- +.byte $00, $02 ; --------------X- = ----------------------XX---- +.byte $40, $00 ; -X-------------- = ----XX---------------------- +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- + +sprite92: +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $8D, $F1 ; X---XX-XXXXX---X = ------XX--XXXXXXXXXXXX------ +.byte $CB, $D3 ; XX--X-XXXX-X--XX = ----XXXXXX--XXXX--XXXXXX---- +.byte $CB, $32 ; XX--X-XX--XX--X- = ----XXXXXX--XXXXXX----XX---- +.byte $EB, $74 ; XXX-X-XX-XXX-X-- = --XXXXXXXX--XXXXXXXX----XX-- +.byte $E7, $F5 ; XXX--XXXXXXX-X-X = --XXXXXXXXXX--XXXXXXXX--XX-- +.byte $D7, $78 ; XX-X-XXX-XXXX--- = XX--XXXXXXXX--XXXXXX------XX +.byte $D7, $8F ; XX-X-XXXX---XXXX = XX--XXXXXXXX--------XXXXXXXX +.byte $91, $EF ; X--X---XXXX-XXXX = XX----XX--------XXXXXXXXXXXX +.byte $1E, $EF ; ---XXXX-XXX-XXXX = XX------XXXXXX--XXXXXXXXXXXX +.byte $0E, $E7 ; ----XXX-XXX--XXX = --------XXXXXX--XXXXXXXXXX-- +.byte $28, $D5 ; --X-X---XX-X-X-X = --XX--------XXXX--XXXX--XX-- +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $40, $02 ; -X------------X- = ----XX----------------XX---- +.byte $83, $81 ; X-----XXX------X = ------XXXX----------XX------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- + +sprite93: +.byte $0C, $00 ; ----XX---------- = ----------XXXX-------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $83, $00 ; X-----XX-------- = ------XXXX------------------ +.byte $C3, $00 ; XX----XX-------- = ----XXXXXX------------------ +.byte $E5, $00 ; XXX--X-X-------- = --XXXXXX--XX---------------- +.byte $3A, $20 ; --XXX-X---X----- = XXXX----XX--XX--XX---------- +.byte $14, $70 ; ---X-X---XXX---- = XX--------XX--XXXXXX-------- +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $0C, $40 ; ----XX---X------ = ----------XXXX----XX-------- +.byte $3E, $60 ; --XXXXX--XX----- = XXXX----XXXXXX--XXXX-------- +.byte $B3, $40 ; X-XX--XX-X------ = XXXX--XXXX--------XX-------- +.byte $FF, $70 ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- +.byte $78, $00 ; -XXXX----------- = XXXXXX------XX-------------- +.byte $32, $20 ; --XX--X---X----- = XXXX----XX------XX---------- +.byte $B5, $50 ; X-XX-X-X-X-X---- = XXXX--XX--XX--XX--XX-------- +.byte $02, $20 ; ------X---X----- = --------XX------XX---------- + +sprite94: +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $0C, $00 ; ----XX---------- = ----------XXXX-------------- +.byte $0E, $00 ; ----XXX--------- = --------XXXXXX-------------- +.byte $87, $10 ; X----XXX---X---- = ------XXXXXX--XX------------ +.byte $C9, $A1 ; XX--X--XX-X----X = ----XXXX----XX--XX--XX------ +.byte $40, $D3 ; -X------XX-X--XX = ----XX--------XX--XXXXXX---- +.byte $00, $E3 ; --------XXX---XX = ----------------XXXXXXXX---- +.byte $00, $32 ; ----------XX--X- = --------------XXXX----XX---- +.byte $68, $B3 ; -XX-X---X-XX--XX = --XXXX------XXXXXX--XXXX---- +.byte $6C, $02 ; -XX-XX--------X- = --XXXX----XXXX--------XX---- +.byte $EF, $F3 ; XXX-XXXXXXXX--XX = --XXXXXXXXXXXXXXXXXXXXXX---- +.byte $E3, $20 ; XXX---XX--X----- = --XXXXXXXX------XX---------- +.byte $68, $81 ; -XX-X---X------X = --XXXX------XX------XX------ +.byte $64, $52 ; -XX--X---X-X--X- = --XXXX----XX--XX--XX--XX---- +.byte $08, $81 ; ----X---X------X = ------------XX------XX------ + +sprite95: +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $0C, $10 ; ----XX-----X---- = ----------XXXXXX------------ +.byte $0E, $20 ; ----XXX---X----- = --------XXXXXX--XX---------- +.byte $83, $52 ; X-----XX-X-X--X- = ------XXXX----XX--XX--XX---- +.byte $81, $A7 ; X------XX-X--XXX = ------XX--------XX--XXXXXX-- +.byte $00, $C7 ; --------XX---XXX = ------------------XXXXXXXX-- +.byte $00, $64 ; ---------XX--X-- = ----------------XXXX----XX-- +.byte $60, $76 ; -XX------XXX-XX- = --XXXX--------XXXXXX--XXXX-- +.byte $68, $14 ; -XX-X------X-X-- = --XXXX------XXXX--------XX-- +.byte $EF, $F7 ; XXX-XXXXXXXX-XXX = --XXXXXXXXXXXXXXXXXXXXXXXX-- +.byte $E7, $40 ; XXX--XXX-X------ = --XXXXXXXXXX------XX-------- +.byte $60, $12 ; -XX--------X--X- = --XXXX--------XX------XX---- +.byte $68, $A5 ; -XX-X---X-X--X-X = --XXXX------XX--XX--XX--XX-- +.byte $00, $12 ; -----------X--X- = --------------XX------XX---- + +sprite96: +.byte $00, $C1 ; --------XX-----X = ------------------XXXX------ +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $08, $30 ; ----X-----XX---- = ------------XXXXXX---------- +.byte $0C, $50 ; ----XX---X-X---- = ----------XXXXXX--XX-------- +.byte $06, $A5 ; -----XX-X-X--X-X = --------XXXX----XX--XX--XX-- +.byte $02, $4E ; ------X--X--XXX- = --------XX--------XX--XXXXXX +.byte $00, $8F ; --------X---XXXX = --------------------XXXXXXXX +.byte $00, $C9 ; --------XX--X--X = ------------------XXXX----XX +.byte $83, $ED ; X-----XXXXX-XX-X = ------XXXX------XXXXXX--XXXX +.byte $83, $38 ; X-----XX--XXX--- = ------XXXX----XXXX--------XX +.byte $8F, $FF ; X---XXXXXXXXXXXX = ------XXXXXXXXXXXXXXXXXXXXXX +.byte $8F, $81 ; X---XXXXX------X = ------XXXXXXXX------XX------ +.byte $83, $24 ; X-----XX--X--X-- = ------XXXX------XX------XX-- +.byte $83, $5A ; X-----XX-X-XX-X- = ------XXXX----XX--XX--XX--XX +.byte $00, $24 ; ----------X--X-- = ----------------XX------XX-- + +sprite97: +.byte $89, $00 ; X---X--X-------- = ------XX----XX-------------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $8F, $00 ; X---XXXX-------- = ------XXXXXXXX-------------- +.byte $DF, $50 ; XX-XXXXX-X-X---- = XX--XXXXXXXXXXXX--XX-------- +.byte $E9, $30 ; XXX-X--X--XX---- = --XXXXXX----XXXXXX---------- +.byte $E9, $30 ; XXX-X--X--XX---- = --XXXXXX----XXXXXX---------- +.byte $DF, $50 ; XX-XXXXX-X-X---- = XX--XXXXXXXXXXXX--XX-------- +.byte $AF, $20 ; X-X-XXXX--X----- = --XX--XXXXXXXX--XX---------- +.byte $26, $20 ; --X--XX---X----- = --XX----XXXX----XX---------- +.byte $A9, $20 ; X-X-X--X--X----- = --XX--XX----XX--XX---------- +.byte $EF, $30 ; XXX-XXXX--XX---- = --XXXXXXXXXXXXXXXX---------- +.byte $06, $00 ; -----XX--------- = --------XXXX---------------- +.byte $60, $30 ; -XX-------XX---- = --XXXX--------XXXX---------- +.byte $99, $60 ; X--XX--X-XX----- = XX----XX----XX--XXXX-------- +.byte $D9, $40 ; XX-XX--X-X------ = XX--XXXX----XX----XX-------- +.byte $60, $30 ; -XX-------XX---- = --XXXX--------XXXX---------- + +sprite98: +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $0C, $30 ; ----XX----XX---- = ----------XXXXXXXX---------- +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $CB, $D3 ; XX--X-XXXX-X--XX = ----XXXXXX--XXXX--XXXXXX---- +.byte $CB, $D3 ; XX--X-XXXX-X--XX = ----XXXXXX--XXXX--XXXXXX---- +.byte $87, $E1 ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ +.byte $8D, $B1 ; X---XX-XX-XX---X = ------XX--XXXXXXXX--XX------ +.byte $8D, $B1 ; X---XX-XX-XX---X = ------XX--XXXXXXXX--XX------ +.byte $89, $91 ; X---X--XX--X---X = ------XX----XXXX----XX------ +.byte $8F, $F1 ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $08, $10 ; ----X------X---- = ------------XXXX------------ +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ +.byte $44, $22 ; -X---X----X---X- = ----XX----XX----XX----XX---- +.byte $C5, $A3 ; XX---X-XX-X---XX = ----XXXX--XX----XX--XXXX---- +.byte $83, $C1 ; X-----XXXX-----X = ------XXXX--------XXXX------ + +sprite99: +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $08, $70 ; ----X----XXX---- = ------------XXXXXXXX-------- +.byte $08, $40 ; ----X----X------ = ------------XX----XX-------- +.byte $87, $B7 ; X----XXXX-XX-XXX = ------XXXXXX--XXXX--XXXXXX-- +.byte $8B, $76 ; X---X-XX-XXX-XX- = ------XXXX--XXXXXXXX--XXXX-- +.byte $8B, $76 ; X---X-XX-XXX-XX- = ------XXXX--XXXXXXXX--XXXX-- +.byte $87, $B7 ; X----XXXX-XX-XXX = ------XXXXXX--XXXX--XXXXXX-- +.byte $0A, $42 ; ----X-X--X----X- = --------XX--XX----XX--XX---- +.byte $0A, $72 ; ----X-X--XXX--X- = --------XX--XXXXXXXX--XX---- +.byte $0A, $72 ; ----X-X--XXX--X- = --------XX--XXXXXXXX--XX---- +.byte $0E, $F3 ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- +.byte $00, $30 ; ----------XX---- = --------------XXXX---------- +.byte $06, $83 ; -----XX-X-----XX = --------XXXX--------XXXX---- +.byte $8B, $44 ; X---X-XX-X---X-- = ------XXXX--XX----XX----XX-- +.byte $89, $C5 ; X---X--XXX---X-X = ------XX----XX----XXXX--XX-- +.byte $06, $83 ; -----XX-X-----XX = --------XXXX--------XXXX---- + +sprite9A: +.byte $00, $F1 ; --------XXXX---X = --------------XXXXXXXX------ +.byte $00, $91 ; --------X--X---X = --------------XX----XX------ +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $06, $FD ; -----XX-XXXXXX-X = --------XXXX--XXXXXXXX--XXXX +.byte $0A, $FB ; ----X-X-XXXXX-XX = --------XX--XXXXXXXXXXXX--XX +.byte $0A, $FB ; ----X-X-XXXXX-XX = --------XX--XXXXXXXXXXXX--XX +.byte $06, $FD ; -----XX-XXXXXX-X = --------XXXX--XXXXXXXX--XXXX +.byte $04, $64 ; -----X---XX--X-- = ----------XX----XXXX----XX-- +.byte $04, $95 ; -----X--X--X-X-X = ----------XX--XX----XX--XX-- +.byte $04, $F5 ; -----X--XXXX-X-X = ----------XX--XXXXXXXX--XX-- +.byte $0C, $F7 ; ----XX--XXXX-XXX = ----------XXXXXXXXXXXXXXXX-- +.byte $00, $60 ; ---------XX----- = ----------------XXXX-------- +.byte $0C, $06 ; ----XX-------XX- = ----------XXXX--------XXXX-- +.byte $0A, $9B ; ----X-X-X--XX-XX = --------XX--XXXX----XXXX--XX +.byte $02, $99 ; ------X-X--XX--X = --------XX----XX----XX----XX +.byte $0C, $06 ; ----XX-------XX- = ----------XXXX--------XXXX-- + +sprite9B: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $76, $BF ; XXX-XXX-XXXXXX = XXXXXX--XXXX--XXXX--XXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $76, $BF ; XXX-XXX-XXXXXX = XXXXXX--XXXX--XXXX--XXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $76, $BF ; XXX-XXX-XXXXXX = XXXXXX--XXXX--XXXX--XXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $76, $BF ; XXX-XXX-XXXXXX = XXXXXX--XXXX--XXXX--XXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $76, $BF ; XXX-XXX-XXXXXX = XXXXXX--XXXX--XXXX--XXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite9C: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite9D: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $12, $24 ; --X--X--X--X-- = XX------XX------XX------XX-- +.byte $C9, $93 ; X--X--X--X--XX = ----XXXX----XXXX----XXXX---- +.byte $24, $48 ; -X--X--X--X--- = --XX------XX------XX------XX +.byte $24, $48 ; -X--X--X--X--- = --XX------XX------XX------XX +.byte $C9, $93 ; X--X--X--X--XX = ----XXXX----XXXX----XXXX---- +.byte $12, $24 ; --X--X--X--X-- = XX------XX------XX------XX-- +.byte $12, $24 ; --X--X--X--X-- = XX------XX------XX------XX-- +.byte $C9, $93 ; X--X--X--X--XX = ----XXXX----XXXX----XXXX---- +.byte $24, $48 ; -X--X--X--X--- = --XX------XX------XX------XX +.byte $24, $48 ; -X--X--X--X--- = --XX------XX------XX------XX +.byte $C9, $93 ; X--X--X--X--XX = ----XXXX----XXXX----XXXX---- +.byte $12, $24 ; --X--X--X--X-- = XX------XX------XX------XX-- +.byte $12, $24 ; --X--X--X--X-- = XX------XX------XX------XX-- +.byte $C9, $93 ; X--X--X--X--XX = ----XXXX----XXXX----XXXX---- +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite9E: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $58, $89 ; X-XX--X---X--X = XX--XX------XX------XX----XX +.byte $91, $1A ; --X---X--XX-X- = XX----XX------XX------XX--XX +.byte $12, $2C ; --X--X--X-XX-- = XX------XX------XX------XXXX +.byte $34, $48 ; -XX-X--X--X--- = XXXX------XX------XX------XX +.byte $58, $89 ; X-XX--X---X--X = XX--XX------XX------XX----XX +.byte $91, $1A ; --X---X--XX-X- = XX----XX------XX------XX--XX +.byte $12, $2C ; --X--X--X-XX-- = XX------XX------XX------XXXX +.byte $34, $48 ; -XX-X--X--X--- = XXXX------XX------XX------XX +.byte $58, $89 ; X-XX--X---X--X = XX--XX------XX------XX----XX +.byte $91, $1A ; --X---X--XX-X- = XX----XX------XX------XX--XX +.byte $12, $2C ; --X--X--X-XX-- = XX------XX------XX------XXXX +.byte $34, $48 ; -XX-X--X--X--- = XXXX------XX------XX------XX +.byte $58, $89 ; X-XX--X---X--X = XX--XX------XX------XX----XX +.byte $91, $1A ; --X---X--XX-X- = XX----XX------XX------XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite9F: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $A5, $5A ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA0: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $DF, $FB ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX +.byte $DF, $FB ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX +.byte $D1, $8B ; X-X---X---X-XX = XX--XXXX------------XXXX--XX +.byte $D1, $8B ; X-X---X---X-XX = XX--XXXX------------XXXX--XX +.byte $D1, $8B ; X-X---X---X-XX = XX--XXXX------------XXXX--XX +.byte $F1, $8F ; XXX---X---XXXX = XXXXXXXX------------XXXXXXXX +.byte $F1, $8F ; XXX---X---XXXX = XXXXXXXX------------XXXXXXXX +.byte $D1, $8B ; X-X---X---X-XX = XX--XXXX------------XXXX--XX +.byte $D1, $8B ; X-X---X---X-XX = XX--XXXX------------XXXX--XX +.byte $D1, $8B ; X-X---X---X-XX = XX--XXXX------------XXXX--XX +.byte $DF, $FB ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX +.byte $DF, $FB ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA1: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA2: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $30, $0C ; -XX-------XX-- = XXXX--------------------XXXX +.byte $50, $0A ; X-X-------X-X- = XX--XX----------------XX--XX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $32, $4C ; -XX--X-X--XX-- = XXXX----XX--------XX----XXXX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $99, $99 ; --XX--X--XX--X = XX----XX----XXXX----XX----XX +.byte $32, $4C ; -XX--X-X--XX-- = XXXX----XX--------XX----XXXX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $99, $99 ; --XX--X--XX--X = XX----XX----XXXX----XX----XX +.byte $32, $4C ; -XX--X-X--XX-- = XXXX----XX--------XX----XXXX +.byte $54, $2A ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX +.byte $32, $4C ; -XX--X-X--XX-- = XXXX----XX--------XX----XXXX +.byte $99, $99 ; --XX--X--XX--X = XX----XX----XXXX----XX----XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA3: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $14, $28 ; --X-X---X-X--- = XX--------XX----XX--------XX +.byte $12, $48 ; --X--X-X--X--- = XX------XX--------XX------XX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $50, $0A ; X-X-------X-X- = XX--XX----------------XX--XX +.byte $38, $1C ; -XXX-----XXX-- = XXXX--------XXXX--------XXXX +.byte $38, $1C ; -XXX-----XXX-- = XXXX--------XXXX--------XXXX +.byte $50, $0A ; X-X-------X-X- = XX--XX----------------XX--XX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $12, $48 ; --X--X-X--X--- = XX------XX--------XX------XX +.byte $14, $28 ; --X-X---X-X--- = XX--------XX----XX--------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA4: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $F1, $1E ; XXX---X--XXXX- = XXXXXXXX------XX------XXXXXX +.byte $91, $99 ; --X---X--XX--X = XX----XX------XX----XX----XX +.byte $B5, $99 ; -XX-X-X--XX--X = XXXX--XX--XX--XX----XX----XX +.byte $B5, $9D ; -XX-X-X--XXX-X = XXXX--XX--XX--XX----XX--XXXX +.byte $95, $1C ; --X-X-X--XXX-- = XX----XX--XX--XX--------XXXX +.byte $50, $99 ; X-X---X--XX--X = XX--XX--------XX----XX----XX +.byte $5A, $DB ; X-XX-XXX-XX-XX = XX--XX--XX--XXXX--XXXXXX--XX +.byte $5A, $AD ; X-XX-XX-X-XX-X = XX--XX--XX--XX--XX--XX--XXXX +.byte $58, $2C ; X-XX----X-XX-- = XX--XX------XX--XX------XXXX +.byte $99, $CB ; --XX--XX--X-XX = XX----XX----XX----XXXXXX--XX +.byte $99, $08 ; --XX--X---X--- = XX----XX----XX------------XX +.byte $B1, $5A ; -XX---XX-XX-X- = XXXX--XX------XX--XX--XX--XX +.byte $B5, $5A ; -XX-X-XX-XX-X- = XXXX--XX--XX--XX--XX--XX--XX +.byte $95, $1A ; --X-X-X--XX-X- = XX----XX--XX--XX------XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA5: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $BB, $AD ; -XXX-XX-X-XX-X = XXXX--XXXX--XX--XX--XX--XXXX +.byte $7A, $BD ; XXXX-XX-XXXX-X = XXXXXX--XX--XXXXXX--XX--XXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA6: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $1E, $78 ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX +.byte $1E, $78 ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX +.byte $1E, $78 ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX +.byte $1E, $78 ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX +.byte $1E, $78 ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX +.byte $16, $68 ; --X-XX-XX-X--- = XX------XXXX----XXXX------XX +.byte $16, $68 ; --X-XX-XX-X--- = XX------XXXX----XXXX------XX +.byte $1E, $78 ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX +.byte $1E, $78 ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX +.byte $1E, $78 ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX +.byte $1E, $78 ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX +.byte $1E, $78 ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA7: +.byte $0C, $30 ; ---XX---XX---- = ----------XXXXXXXX---------- +.byte $0E, $70 ; ---XXX-XXX---- = --------XXXXXXXXXXXX-------- +.byte $8F, $F1 ; ---XXXXXXX---X = ------XXXXXXXXXXXXXXXX------ +.byte $89, $91 ; ---X--X--X---X = ------XX----XXXX----XX------ +.byte $89, $91 ; ---X--X--X---X = ------XX----XXXX----XX------ +.byte $0E, $70 ; ---XXX-XXX---- = --------XXXXXXXXXXXX-------- +.byte $0A, $50 ; ---X-X-X-X---- = --------XX--XXXX--XX-------- +.byte $04, $20 ; ----X---X----- = ----------XX----XX---------- +.byte $28, $14 ; -X-X-----X-X-- = --XX--------XXXX--------XX-- +.byte $F1, $8F ; XXX---X---XXXX = XXXXXXXX------------XXXXXXXX +.byte $F7, $EF ; XXX-XXXXX-XXXX = XXXXXXXXXXXX----XXXXXXXXXXXX +.byte $0A, $70 ; ---X-X-XXX---- = --------XX--XXXXXXXX-------- +.byte $0E, $50 ; ---XXX-X-X---- = --------XXXXXXXX--XX-------- +.byte $F7, $EF ; XXX-XXXXX-XXXX = XXXXXXXXXXXX----XXXXXXXXXXXX +.byte $F1, $8F ; XXX---X---XXXX = XXXXXXXX------------XXXXXXXX +.byte $20, $04 ; -X---------X-- = --XX--------------------XX-- + +spriteA8: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $F3, $CF ; XXX--XXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX +.byte $F1, $8F ; XXX---X---XXXX = XXXXXXXX------------XXXXXXXX +.byte $70, $0E ; XXX-------XXX- = XXXXXX----------------XXXXXX +.byte $30, $0C ; -XX-------XX-- = XXXX--------------------XXXX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $14, $28 ; --X-X---X-X--- = XX--------XX----XX--------XX +.byte $14, $28 ; --X-X---X-X--- = XX--------XX----XX--------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $30, $0C ; -XX-------XX-- = XXXX--------------------XXXX +.byte $70, $0E ; XXX-------XXX- = XXXXXX----------------XXXXXX +.byte $F1, $8F ; XXX---X---XXXX = XXXXXXXX------------XXXXXXXX +.byte $F3, $CF ; XXX--XXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA9: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $12, $08 ; --X--X----X--- = XX------XX----------------XX +.byte $5A, $08 ; X-XX-X----X--- = XX--XX--XX--XX------------XX +.byte $97, $8B ; --X-XXX---X-XX = XX----XXXXXX--------XXXX--XX +.byte $FF, $5E ; XXXXXXXX-XXXX- = XXXXXXXXXXXXXXXX--XX--XXXXXX +.byte $97, $08 ; --X-XXX---X--- = XX----XXXXXX--------------XX +.byte $5A, $08 ; X-XX-X----X--- = XX--XX--XX--XX------------XX +.byte $12, $08 ; --X--X----X--- = XX------XX----------------XX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteAA: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $18, $18 ; --XX-----XX--- = XX----------XXXX----------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteAB: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $DF, $FB ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX +.byte $50, $0A ; X-X-------X-X- = XX--XX----------------XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $DF, $FB ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteAC: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $D1, $8B ; X-X---X---X-XX = XX--XXXX------------XXXX--XX +.byte $50, $0A ; X-X-------X-X- = XX--XX----------------XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $50, $0A ; X-X-------X-X- = XX--XX----------------XX--XX +.byte $D1, $8B ; X-X---X---X-XX = XX--XXXX------------XXXX--XX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteAD: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $DF, $FB ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX +.byte $50, $0A ; X-X-------X-X- = XX--XX----------------XX--XX +.byte $5E, $7A ; X-XXXX-XXXX-X- = XX--XX--XXXXXXXXXXXX--XX--XX +.byte $52, $4A ; X-X--X-X--X-X- = XX--XX--XX--------XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $5A, $5A ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX +.byte $52, $4A ; X-X--X-X--X-X- = XX--XX--XX--------XX--XX--XX +.byte $5E, $7A ; X-XXXX-XXXX-X- = XX--XX--XXXXXXXXXXXX--XX--XX +.byte $50, $0A ; X-X-------X-X- = XX--XX----------------XX--XX +.byte $DF, $FB ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX +.byte $10, $08 ; --X-------X--- = XX------------------------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteAE: +.byte $00, $00 ; -------------- = ---------------------------- +.byte $0E, $70 ; ---XXX-XXX---- = --------XXXXXXXXXXXX-------- +.byte $C1, $83 ; X-----X-----XX = ----XXXX------------XXXX---- +.byte $2C, $34 ; -X-XX---XX-X-- = --XX------XXXXXXXX------XX-- +.byte $12, $48 ; --X--X-X--X--- = XX------XX--------XX------XX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $91, $89 ; --X---X---X--X = XX----XX------------XX----XX +.byte $12, $48 ; --X--X-X--X--- = XX------XX--------XX------XX +.byte $24, $24 ; -X--X---X--X-- = --XX------XX----XX------XX-- +.byte $C5, $A3 ; X---X-X-X---XX = ----XXXX--XX----XX--XXXX---- +.byte $95, $A9 ; --X-X-X-X-X--X = XX----XX--XX----XX--XX----XX +.byte $F5, $AF ; XXX-X-X-X-XXXX = XXXXXXXX--XX----XX--XXXXXXXX +.byte $14, $28 ; --X-X---X-X--- = XX--------XX----XX--------XX +.byte $F7, $EF ; XXX-XXXXX-XXXX = XXXXXXXXXXXX----XXXXXXXXXXXX +.byte $00, $00 ; -------------- = ---------------------------- + +spriteAF: +.byte $04, $50 ; -----X---X-X---- = ----------XX--XX--XX-------- +.byte $0A, $2C ; ----X-X---X-XX-- = --------XX--XX--XX------XXXX +.byte $CF, $32 ; XX--XXXX--XX--X- = ----XXXXXXXXXXXXXX----XX---- +.byte $6C, $FF ; -XX-XX--XXXXXXXX = --XXXX----XXXXXXXXXXXXXXXXXX +.byte $74, $F1 ; -XXX-X--XXXX---X = XXXXXX----XX--XXXXXXXX------ +.byte $CF, $CF ; XX--XXXXXX--XXXX = ----XXXXXXXXXX----XXXXXXXXXX +.byte $FF, $72 ; XXXXXXXX-XXX--X- = XXXXXXXXXXXXXXXXXXXX--XX---- +.byte $CF, $3C ; XX--XXXX--XXXX-- = ----XXXXXXXXXXXXXX------XXXX +.byte $00, $00 ; ---------------- = ---------------------------- +.byte $08, $00 ; ----X----------- = ------------XX-------------- +.byte $E9, $F3 ; XXX-X--XXXXX--XX = --XXXXXX----XXXXXXXXXXXX---- +.byte $9F, $04 ; X--XXXXX-----X-- = XX----XXXXXXXX----------XX-- +.byte $18, $08 ; ---XX-------X--- = XX----------XX------------XX +.byte $9F, $F7 ; X--XXXXXXXXX-XXX = XX----XXXXXXXXXXXXXXXXXXXX-- +.byte $E9, $F3 ; XXX-X--XXXXX--XX = --XXXXXX----XXXXXXXXXXXX---- +.byte $08, $00 ; ----X----------- = ------------XX-------------- + +sprite19dw: ; Double width for direct drawing when cheat-boot is active +.byte $30, $66, $03, $00 ; -XX----XX--XX------XX------- = ----XX--XX--XXXX------------ +.byte $70, $19, $03, $00 ; XXX------XX--X-----XX------- = ----XXXX--XX--XX------------ +.byte $70, $7F, $03, $00 ; XXX----XXXXXXX-----XX------- = ----XXXXXXXXXXXX------------ +.byte $00, $06, $00, $00 ; -----------XX--------------- = --------XX------------------ +.byte $00, $06, $00, $00 ; -----------XX--------------- = --------XX------------------ +.byte $40, $7F, $00, $00 ; X------XXXXXXX-------------- = ------XXXXXXXX-------------- +.byte $40, $61, $00, $00 ; X------XX----X-------------- = ------XX----XX-------------- +.byte $40, $61, $00, $00 ; X------XX----X-------------- = ------XX----XX-------------- +.byte $40, $61, $00, $00 ; X------XX----X-------------- = ------XX----XX-------------- +.byte $30, $18, $03, $00 ; -XX------XX--------XX------- = ----XX----XX--XX------------ +.byte $30, $60, $7C, $01 ; -XX----XX-----XXXXX--------X = ----XX------XX--XXXXXX------ +.byte $4C, $07, $0C, $06 ; X--XX------XXX---XX------XX- = --XX--XXXX------XX----XX---- +.byte $0C, $18, $03, $18 ; ---XX----XX--------XX--XX--- = --XX------XX--XX--------XX-- +.byte $0C, $18, $00, $18 ; ---XX----XX------------XX--- = --XX------XX------------XX-- +.byte $0C, $18, $00, $18 ; ---XX----XX------------XX--- = --XX------XX------------XX-- +.byte $7F, $7F, $7F, $7F ; XXXXXXXXXXXXXXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX diff --git a/src/apple2/rosystem.inc b/src/apple2/rosystem.inc new file mode 100644 index 0000000..8822f11 --- /dev/null +++ b/src/apple2/rosystem.inc @@ -0,0 +1,106 @@ +;----------------------------------------------------------------------------- +; rosystem.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "RODATA" + +;----------------------------------------------------------------------------- +; the lo byte for the memory at the start of every screen row +rowL: + .repeat $C0, Row + .byte Row & $08 << 4 | Row & $C0 >> 1 | Row & $C0 >> 3 + .endrep + +;----------------------------------------------------------------------------- +; the hi byte for the memory at the start of every screen row +rowH: + .repeat $C0, Row + .byte >$0000 | Row & $07 << 2 | Row & $30 >> 4 + .endrep + +;----------------------------------------------------------------------------- +; multiplication lookup tables +mult1024H: +.byte $00, $04, $08, $0C, $10, $14, $18, $1C, $20 + +mult64H: +.repeat MAX_SPRITE_IFRAMES, Row + .byte >(Row * 64) +.endrep + +mult64L: +.repeat MAX_SPRITE_IFRAMES, Row + .byte <(Row * 64) +.endrep + +mult32H: +.repeat 15, Row + .byte >(Row * 32) +.endrep + +mult32L: +.repeat 15, Row + .byte <(Row * 32) +.endrep + +mult16: +.repeat 9, Row + .byte Row * 16 +.endrep + +mult8: +.repeat 24, Row + .byte Row * 8 +.endrep + +;----------------------------------------------------------------------------- +; color masks +masksLeft: +.byte %11111111 ; 00 MSB-BITS-11..1 White +.byte %00101010 ; 01 0-BITS-01..0 Green +.byte %10101010 ; 04 1-BITS-01..0 Orange +.byte %01010101 ; 01 0-BITS-10..1 Purple +.byte %11010101 ; 02 1-BITS-10..1 Blue + +masksRight: +.byte %11111111 ; 00 MSB-BITS-11 White +.byte %01010101 ; 01 0-BITS-10..1 Green +.byte %11010101 ; 04 1-BITS-10..1 Orange +.byte %00101010 ; 01 0-BITS-01..0 Purple +.byte %10101010 ; 02 1-BITS-01..0 Blue + +maskGreen: +.byte %00101010, %01010101 ; Green + +maskOrange: +.byte %10101010, %11010101 ; Orange + +maskGreenHi: +.byte %00100000, %01000000 ; Green + +maskNewTip: +.byte %01011111, %00111111 ; White air graph tip (reversed order) + +;----------------------------------------------------------------------------- +; sprite 32 to 64 byte bit-double helper table +binDouble: +.byte %00000000 +.byte %00000011 +.byte %00001100 +.byte %00001111 +.byte %00110000 +.byte %00110011 +.byte %00111100 +.byte %00111111 +.byte %11000000 +.byte %11000011 +.byte %11001100 +.byte %11001111 +.byte %11110000 +.byte %11110011 +.byte %11111100 +.byte %11111111 diff --git a/src/apple2/rotext.inc b/src/apple2/rotext.inc new file mode 100644 index 0000000..59e7574 --- /dev/null +++ b/src/apple2/rotext.inc @@ -0,0 +1,60 @@ +;----------------------------------------------------------------------------- +; rotext.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "RODATA" + +roTextLevel: +.byte " Central Cavern " +.byte " The Cold Room " +.byte " The Menagerie " +.byte " Abandoned Uranium Workings " +.byte " Eugene's Lair " +.byte " Processing Plant " +.byte " The Vat " +.byte "Miner Willy meets the Kong Beast" +.byte " Wacky Amoebatrons " +.byte " The Endorian Forest " +.byte "Attack of the Mutant Telephones " +.byte " Return of the Alien Kong Beast " +.byte " Ore Refinery " +.byte " Skylab Landing Bay " +.byte " The Bank " +.byte " The Sixteenth Cavern " +.byte " The Warehouse " +.byte " Amoebatrons' Revenge " +.byte " Solar Power Generator " +.byte " The Final Barrier " +roTextAir: +.byte "AIR " +roTextScore: +.byte "SCORE" +roTextHighScore: +.byte "HIGH" +roTextGame: +.byte "GAME" +roTextOver: +.byte "OVER" +roTextPressEnter: +.byte "PRESS ENTER TO START" +roTextEnter := (roTextPressEnter + 6) +roTextAppleIIVersion: +.byte "Apple II version by" +roTextStefan: +.byte "Stefan Wessels, 2020" +roTextIntro: +.byte ". . . . . . . MANIC MINER . . ", $7f, " BUG-BYTE ltd. 1983 . . By " +.byte "Matthew Smith . . . Q, O & W, P = Left & Right . . Space = Jump . . M = Music " +.byte "On/Off . . S = In Game Sound On/Off . . B = Monochrome/Color . . " +.byte "C = Level scroll mode . . ESC = Quit . . . Guide Miner Willy through 20 lethal " +.byte "caverns . . . . . . ", 0 +roTextMono: +.byte " MONO" +roTextColor: +.byte "COLOR" +roTextCheatCode: +.byte "6031769" diff --git a/src/apple2/rotiles.inc b/src/apple2/rotiles.inc new file mode 100644 index 0000000..f98caf6 --- /dev/null +++ b/src/apple2/rotiles.inc @@ -0,0 +1,563 @@ +;----------------------------------------------------------------------------- +; rotiles.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "RODATA" + +;----------------------------------------------------------------------------- +.align 16 ; don't want tiles spanning boundaries + +tiles: +tile00: +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +tile01: +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $F3, $FF ; XXX--XXXXXXXXX = XX--XXXXXXXXXX +.byte $F3, $FF ; XXX--XXXXXXXXX = XX--XXXXXXXXXX +.byte $83, $FE ; -----XXXXXXXX- = XX------XXXXXX +.byte $8F, $E0 ; ---XXXXXX----- = XXXX--------XX +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- + +tile02: +.byte $C0, $FF ; X------XXXXXXX = ------XXXXXXXX +.byte $C0, $E1 ; X------XX----X = ------XX----XX +.byte $FC, $E7 ; XXXXX--XX--XXX = --XXXXXXXX--XX +.byte $8C, $FE ; ---XX--XXXXXX- = --XX----XXXXXX +.byte $BF, $86 ; -XXXXXX----XX- = XXXXXX--XX---- +.byte $F3, $87 ; XXX--XX----XXX = XX--XXXXXX---- +.byte $C3, $81 ; X----XX------X = XX----XX------ +.byte $FF, $81 ; XXXXXXX------X = XXXXXXXX------ + +tile03: +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ + +tile04: +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $CF, $F9 ; X--XXXXXXXX--X = XXXX--XX--XXXX +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $CF, $F9 ; X--XXXXXXXX--X = XXXX--XX--XXXX +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX + +tile05: +.byte $C0, $81 ; X------------X = ------XX------ +.byte $CF, $F9 ; X--XXXXXXXX--X = XXXX--XX--XXXX +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $CF, $F9 ; X--XXXXXXXX--X = XXXX--XX--XXXX +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8F, $F8 ; ---XXXXXXXX--- = XXXX------XXXX +.byte $B0, $86 ; -XX--------XX- = ----XX--XX---- + +tile06: +.byte $C0, $81 ; X------------X = ------XX------ +.byte $BC, $9E ; -XXXX----XXXX- = --XXXX--XXXX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $CF, $F9 ; X--XXXXXXXX--X = XXXX--XX--XXXX +.byte $8F, $E6 ; ---XXXXXX--XX- = XXXX----XX--XX +.byte $BC, $98 ; -XXXX----XX--- = --XXXX----XX-- +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $C0, $81 ; X------------X = ------XX------ + +tile07: +.byte $C0, $FF ; X------XXXXXXX = ------XXXXXXXX +.byte $8F, $9E ; ---XXXX--XXXX- = XXXX----XXXX-- +.byte $C0, $FF ; X------XXXXXXX = ------XXXXXXXX +.byte $8F, $9E ; ---XXXX--XXXX- = XXXX----XXXX-- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +tile08: +.byte $C0, $FF ; X------XXXXXXX = ------XXXXXXXX +.byte $B0, $F8 ; -XX----XXXX--- = ----XX----XXXX +.byte $8C, $FE ; ---XX--XXXXXX- = --XX----XXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $C3, $FF ; X----XXXXXXXXX = XX----XXXXXXXX +.byte $C3, $9F ; X----XX--XXXXX = XX----XXXXXX-- +.byte $C3, $87 ; X----XX----XXX = XX----XXXX---- +.byte $FF, $81 ; XXXXXXX------X = XXXXXXXX------ + +tile09: +.byte $F0, $81 ; XXX----------X = ----XXXX------ +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $83, $86 ; -----XX----XX- = XX------XX---- +.byte $C3, $81 ; X----XX------X = XX----XX------ +.byte $BC, $86 ; -XXXX------XX- = --XXXX--XX---- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $80, $E6 ; -------XX--XX- = --------XX--XX +.byte $80, $98 ; ---------XX--- = ----------XX-- + +tile0A: +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $FC, $99 ; XXXXX----XX--X = --XXXXXX--XX-- +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $BF, $E6 ; -XXXXXXXX--XX- = XXXXXX--XX--XX +.byte $BF, $E6 ; -XXXXXXXX--XX- = XXXXXX--XX--XX +.byte $BF, $E6 ; -XXXXXXXX--XX- = XXXXXX--XX--XX +.byte $FC, $99 ; XXXXX----XX--X = --XXXXXX--XX-- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- + +tile0B: +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $F3, $E7 ; XXX--XXXX--XXX = XX--XXXXXX--XX +.byte $BF, $FE ; -XXXXXXXXXXXX- = XXXXXX--XXXXXX +.byte $BF, $FE ; -XXXXXXXXXXXX- = XXXXXX--XXXXXX +.byte $F3, $E7 ; XXX--XXXX--XXX = XX--XXXXXX--XX +.byte $C0, $81 ; X------------X = ------XX------ +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- + +tile0C: +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8F, $FE ; ---XXXXXXXXXX- = XXXX----XXXXXX +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $BC, $E6 ; -XXXX--XX--XX- = --XXXX--XX--XX +.byte $B3, $9E ; -XX--XX--XXXX- = XX--XX--XXXX-- +.byte $FC, $E7 ; XXXXX--XX--XXX = --XXXXXXXX--XX +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $8F, $FE ; ---XXXXXXXXXX- = XXXX----XXXXXX + +tile0D: +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $B3, $80 ; -XX--XX------- = XX--XX-------- +.byte $BC, $E0 ; -XXXX--XX----- = --XXXX------XX +.byte $B0, $E6 ; -XX----XX--XX- = ----XX--XX--XX +.byte $BF, $9E ; -XXXXXX--XXXX- = XXXXXX--XXXX-- +.byte $FC, $81 ; XXXXX--------X = --XXXXXX------ +.byte $B0, $80 ; -XX----------- = ----XX-------- + +tile0E: +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $BC, $F8 ; -XXXX--XXXX--- = --XXXX----XXXX +.byte $BF, $FE ; -XXXXXXXXXXXX- = XXXXXX--XXXXXX +.byte $BF, $FE ; -XXXXXXXXXXXX- = XXXXXX--XXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + +tile0F: +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $F3, $99 ; XXX--XX--XX--X = XX--XXXX--XX-- +.byte $CC, $E7 ; X--XX--XX--XXX = --XX--XXXX--XX +.byte $C0, $99 ; X--------XX--X = ------XX--XX-- +.byte $FC, $81 ; XXXXX--------X = --XXXXXX------ +.byte $B3, $9E ; -XX--XX--XXXX- = XX--XX--XXXX-- +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $8C, $F8 ; ---XX--XXXX--- = --XX------XXXX + +tile10: +.byte $BC, $80 ; -XXXX--------- = --XXXX-------- +.byte $C3, $81 ; X----XX------X = XX----XX------ +.byte $BC, $86 ; -XXXX------XX- = --XXXX--XX---- +.byte $C3, $81 ; X----XX------X = XX----XX------ +.byte $BC, $86 ; -XXXX------XX- = --XXXX--XX---- +.byte $C0, $87 ; X----------XXX = ------XXXX---- +.byte $80, $98 ; ---------XX--- = ----------XX-- +.byte $80, $E0 ; -------XX----- = ------------XX + +tile11: +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $BC, $98 ; -XXXX----XX--- = --XXXX----XX-- +.byte $CF, $FF ; X--XXXXXXXXXXX = XXXX--XXXXXXXX +.byte $83, $FE ; -----XXXXXXXX- = XX------XXXXXX +.byte $CF, $FF ; X--XXXXXXXXXXX = XXXX--XXXXXXXX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- + +tile12: +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $CF, $FF ; X--XXXXXXXXXXX = XXXX--XXXXXXXX +.byte $F0, $9F ; XXX------XXXXX = ----XXXXXXXX-- +.byte $C0, $87 ; X----------XXX = ------XXXX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ + +tile13: +.byte $FC, $FF ; XXXXX--XXXXXXX = --XXXXXXXXXXXX +.byte $F0, $9F ; XXX------XXXXX = ----XXXXXXXX-- +.byte $C0, $9F ; X--------XXXXX = ------XXXXXX-- +.byte $C0, $87 ; X----------XXX = ------XXXX---- +.byte $C0, $87 ; X----------XXX = ------XXXX---- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $80, $86 ; -----------XX- = --------XX---- + +tile14: +.byte $83, $80 ; -----XX------- = XX------------ +.byte $8F, $80 ; ---XXXX------- = XXXX---------- +.byte $BF, $9E ; -XXXXXX--XXXX- = XXXXXX--XXXX-- +.byte $FC, $E1 ; XXXXX--XX----X = --XXXXXX----XX +.byte $B0, $86 ; -XX--------XX- = ----XX--XX---- +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $83, $E6 ; -----XXXX--XX- = XX------XX--XX +.byte $83, $F8 ; -----XXXXXX--- = XX--------XXXX + +tile15: +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $8F, $F8 ; ---XXXXXXXX--- = XXXX------XXXX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $8F, $F8 ; ---XXXXXXXX--- = XXXX------XXXX +.byte $83, $E0 ; -----XXXX----- = XX----------XX + +tile16: +.byte $C3, $FF ; X----XXXXXXXXX = XX----XXXXXXXX +.byte $8F, $9E ; ---XXXX--XXXX- = XXXX----XXXX-- +.byte $C3, $FF ; X----XXXXXXXXX = XX----XXXXXXXX +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +tile17: +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $CF, $F9 ; X--XXXXXXXX--X = XXXX--XX--XXXX +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $B0, $86 ; -XX--------XX- = ----XX--XX---- + +tile18: +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX + +tile19: +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX + +tile1A: +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- + +tile1B: +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $F3, $E7 ; XXX--XXXX--XXX = XX--XXXXXX--XX +.byte $F3, $F9 ; XXX--XXXXXX--X = XX--XXXX--XXXX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $8F, $E6 ; ---XXXXXX--XX- = XXXX----XX--XX +.byte $8F, $E6 ; ---XXXXXX--XX- = XXXX----XX--XX + +tile1C: +.byte $8F, $F8 ; ---XXXXXXXX--- = XXXX------XXXX +.byte $BC, $9E ; -XXXX----XXXX- = --XXXX--XXXX-- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $BC, $9E ; -XXXX----XXXX- = --XXXX--XXXX-- +.byte $80, $80 ; -------------- = -------------- +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $80, $80 ; -------------- = -------------- + +tile1D: +.byte $8F, $F8 ; ---XXXXXXXX--- = XXXX------XXXX +.byte $BC, $9E ; -XXXX----XXXX- = --XXXX--XXXX-- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +tile1E: +.byte $8F, $F8 ; ---XXXXXXXX--- = XXXX------XXXX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $BC, $9E ; -XXXX----XXXX- = --XXXX--XXXX-- +.byte $BC, $9E ; -XXXX----XXXX- = --XXXX--XXXX-- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +tile1F: +.byte $CF, $E7 ; X--XXXXXX--XXX = XXXX--XXXX--XX +.byte $80, $80 ; -------------- = -------------- +.byte $BC, $FE ; -XXXX--XXXXXX- = --XXXX--XXXXXX +.byte $80, $80 ; -------------- = -------------- +.byte $CF, $E7 ; X--XXXXXX--XXX = XXXX--XXXX--XX +.byte $80, $80 ; -------------- = -------------- +.byte $BC, $FE ; -XXXX--XXXXXX- = --XXXX--XXXXXX +.byte $80, $80 ; -------------- = -------------- + +tile20: +.byte $FF, $87 ; XXXXXXX----XXX = XXXXXXXXXX---- +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $83, $FE ; -----XXXXXXXX- = XX------XXXXXX +.byte $C0, $87 ; X----------XXX = ------XXXX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ + +tile21: +.byte $FF, $E7 ; XXXXXXXXX--XXX = XXXXXXXXXX--XX +.byte $BC, $F8 ; -XXXX--XXXX--- = --XXXX----XXXX +.byte $F3, $FF ; XXX--XXXXXXXXX = XX--XXXXXXXXXX +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +tile22: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $F0, $E7 ; XXX----XX--XXX = ----XXXXXX--XX +.byte $C0, $F9 ; X------XXXX--X = ------XX--XXXX +.byte $C0, $FF ; X------XXXXXXX = ------XXXXXXXX +.byte $B0, $FE ; -XX----XXXXXX- = ----XX--XXXXXX +.byte $8C, $F8 ; ---XX--XXXX--- = --XX------XXXX +.byte $83, $E0 ; -----XXXX----- = XX----------XX + +tile23: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $83, $E0 ; -----XXXX----- = XX----------XX + +tile24: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + +tile25: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX +.byte $F3, $F9 ; XXX--XXXXXX--X = XX--XXXX--XXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX +.byte $F3, $F9 ; XXX--XXXXXX--X = XX--XXXX--XXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + +tile26: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX + +tile27: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $CF, $E7 ; X--XXXXXX--XXX = XXXX--XXXX--XX +.byte $B3, $F8 ; -XX--XXXXXX--- = XX--XX----XXXX +.byte $B0, $98 ; -XX------XX--- = ----XX----XX-- +.byte $CC, $E1 ; X--XX--XX----X = --XX--XX----XX +.byte $B0, $80 ; -XX----------- = ----XX-------- +.byte $80, $86 ; -----------XX- = --------XX---- +.byte $80, $80 ; -------------- = -------------- + +tile28: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $9F ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $FC, $87 ; XXXXX------XXX = --XXXXXXXX---- +.byte $CC, $87 ; X--XX------XXX = --XX--XXXX---- +.byte $CC, $87 ; X--XX------XXX = --XX--XXXX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ + +tile29: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $C0, $E1 ; X------XX----X = ------XX----XX +.byte $B0, $98 ; -XX------XX--- = ----XX----XX-- +.byte $8C, $86 ; ---XX------XX- = --XX----XX---- +.byte $C3, $81 ; X----XX------X = XX----XX------ +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + +tile2A: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ + +tile2B: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $8C, $9E ; ---XX----XXXX- = --XX----XXXX-- +.byte $B0, $9E ; -XX------XXXX- = ----XX--XXXX-- +.byte $C0, $9F ; X--------XXXXX = ------XXXXXX-- +.byte $80, $9E ; ---------XXXX- = --------XXXX-- +.byte $80, $9E ; ---------XXXX- = --------XXXX-- +.byte $80, $9E ; ---------XXXX- = --------XXXX-- + +tile2C: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $BC, $98 ; -XXXX----XX--- = --XXXX----XX-- +.byte $BC, $86 ; -XXXX------XX- = --XXXX--XX---- +.byte $FC, $81 ; XXXXX--------X = --XXXXXX------ +.byte $BC, $80 ; -XXXX--------- = --XXXX-------- +.byte $BC, $80 ; -XXXX--------- = --XXXX-------- +.byte $BC, $80 ; -XXXX--------- = --XXXX-------- + +tile2D: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $BC, $9E ; -XXXX----XXXX- = --XXXX--XXXX-- +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $FF, $99 ; XXXXXXX--XX--X = XXXXXXXX--XX-- +.byte $80, $80 ; -------------- = -------------- + +tile2E: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $BC, $9E ; -XXXX----XXXX- = --XXXX--XXXX-- +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX +.byte $BC, $9E ; -XXXX----XXXX- = --XXXX--XXXX-- +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $80, $80 ; -------------- = -------------- + +tile2F: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $C3, $E1 ; X----XXXX----X = XX----XX----XX +.byte $BC, $9E ; -XXXX----XXXX- = --XXXX--XXXX-- +.byte $80, $80 ; -------------- = -------------- + +tile30: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $CF, $99 ; X--XXXX--XX--X = XXXX--XX--XX-- +.byte $8C, $E6 ; ---XX--XX--XX- = --XX----XX--XX +.byte $B3, $98 ; -XX--XX--XX--- = XX--XX----XX-- +.byte $CC, $81 ; X--XX--------X = --XX--XX------ +.byte $83, $98 ; -----XX--XX--- = XX--------XX-- +.byte $80, $80 ; -------------- = -------------- + +tile31: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $CF, $F9 ; X--XXXXXXXX--X = XXXX--XX--XXXX +.byte $FC, $9F ; XXXXX----XXXXX = --XXXXXXXXXX-- +.byte $8F, $E6 ; ---XXXXXX--XX- = XXXX----XX--XX +.byte $8C, $80 ; ---XX--------- = --XX---------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +tile32: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $CF, $E7 ; X--XXXXXX--XXX = XXXX--XXXX--XX +.byte $FC, $FF ; XXXXX--XXXXXXX = --XXXXXXXXXXXX +.byte $B3, $9B ; -XX--XX--XX-XX = XX--XX-XX-XX-- +.byte $CC, $E4 ; X--XX--XX--X-- = --XX--X--X--XX +.byte $B0, $98 ; -XX------XX--- = ----XX----XX-- +.byte $80, $80 ; -------------- = -------------- + +tile33: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $B3, $E6 ; -XX--XXXX--XX- = XX--XX--XX--XX +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- +.byte $80, $80 ; -------------- = -------------- + +tile34: +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $C0, $81 ; X------------X = ------XX------ +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $CF, $F9 ; X--XXXXXXXX--X = XXXX--XX--XXXX +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $CC, $99 ; X--XX----XX--X = --XX--XX--XX-- + +tile35: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $BC, $80 ; -XXXX--------- = --XXXX-------- +.byte $BC, $80 ; -XXXX--------- = --XXXX-------- + +tile36: +.byte $FF, $FF ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $83, $E0 ; -----XXXX----- = XX----------XX +.byte $8C, $98 ; ---XX----XX--- = --XX------XX-- +.byte $F0, $87 ; XXX--------XXX = ----XXXXXX---- +.byte $C0, $81 ; X------------X = ------XX------ +.byte $80, $9E ; ---------XXXX- = --------XXXX-- +.byte $80, $9E ; ---------XXXX- = --------XXXX-- diff --git a/src/apple2/screen.inc b/src/apple2/screen.inc new file mode 100644 index 0000000..bc241cb --- /dev/null +++ b/src/apple2/screen.inc @@ -0,0 +1,1117 @@ +;----------------------------------------------------------------------------- +; screen.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "CODE" + +;----------------------------------------------------------------------------- +; Swap visible HGR pages and update currPageH to the back page hi byte +.proc screenSwap + + lda backPage + beq :+ + bit HISCR + jmp valueSwap +: + bit LOWSCR + +valueSwap: + + lda backPage ; pretend flip the screen + eor #1 + sta backPage + lda #$60 ; pretend flip the screen Hi value so all drawing + eor currPageH ; happens on the front screen + sta currPageH + rts + +.endproc + +;----------------------------------------------------------------------------- +; x 0 cleats top (play area minus 8 pixel row), x non-0 clears whole screen +.proc screenClear + + lda #$00 + + ldy backPage + beq page1 + jmp page2 + +page1: + cpx #0 + bne :+ + jmp p1p2 +: + ldx #39 +p1l1: + .repeat $48, Row + sta $100 * (>HGRPage1 + (Row + $78) & $07 << 2 | (Row + $78) & $30 >> 4) | (Row + $78) & $08 << 4 | (Row + $78) & $C0 >> 1 | (Row + $78) & $C0 >> 3, x + .endrepeat + dex + bmi p1p2 + jmp p1l1 + +p1p2: + ldx #39 +p1l2: + .repeat $78, Row + sta $100 * (>HGRPage1 + Row & $07 << 2 | Row & $30 >> 4) | Row & $08 << 4 | Row & $C0 >> 1 | Row & $C0 >> 3, x + .endrepeat + dex + bmi done0 + jmp p1l2 + +done0: + rts + +page2: + cpx #0 + bne :+ + jmp p2p2 +: + ldx #39 + +p2l1: + .repeat $48, Row + sta $100 * (>HGRPage2 + (Row + $78) & $07 << 2 | (Row + $78) & $30 >> 4) | (Row + $78) & $08 << 4 | (Row + $78) & $C0 >> 1 | (Row + $78) & $C0 >> 3, x + .endrepeat + dex + bmi p2p2 + jmp p2l1 + +p2p2: + ldx #39 +p2l2: + .repeat $78, Row + sta $100 * (>HGRPage2 + Row & $07 << 2 | Row & $30 >> 4) | Row & $08 << 4 | Row & $C0 >> 1 | Row & $C0 >> 3, x + .endrepeat + dex + bmi done1 + jmp p2l2 + +done1: + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc screenDrawLevelName + + clc + lda #20 ; screen is 20 "characters" wide + adc leftEdge ; but maybe is offset from the left + asl ; mult by 2 for columns + tay ; put into y + dey ; but 0 based so 0-39 or whatever (not 1-40) + ldx #39 ; screen index is 0-39 + + lda currPageH + cmp #$20 + bne page2 + +: + lda levelNameGfx0 + $0000, y ; load the cache + sta $2050, x ; store to the screen (the hi byte is updated) + + lda levelNameGfx0 + $0040, y ; but the lo byte ($50) is correct for row 16 (0 based) + sta $2450, x + + lda levelNameGfx0 + $0080, y ; the cache is linear so each line is $40 from previous + sta $2850, x + + lda levelNameGfx0 + $00C0, y + sta $2C50, x + + lda levelNameGfx0 + $0100, y + sta $3050, x + + lda levelNameGfx0 + $0140, y + sta $3450, x + + lda levelNameGfx0 + $0180, y + sta $3850, x + + lda levelNameGfx0 + $01C0, y + sta $3C50, x + + dey ; previous cache byte + dex ; previous screen byte + bpl :- ; keep going till all 40 columns copied + + rts + +page2: + lda levelNameGfx0 + $0000, y ; load the cache + sta $4050, x ; store to the screen (the hi byte is updated) + + lda levelNameGfx0 + $0040, y ; but the lo byte ($50) is correct for row 16 (0 based) + sta $4450, x + + lda levelNameGfx0 + $0080, y + sta $4850, x + + lda levelNameGfx0 + $00C0, y + sta $4C50, x + + lda levelNameGfx0 + $0100, y + sta $5050, x + + lda levelNameGfx0 + $0140, y + sta $5450, x + + lda levelNameGfx0 + $0180, y + sta $5850, x + + lda levelNameGfx0 + $01C0, y + sta $5C50, x + + dey ; previous cache byte + dex ; previous screen byte + bpl page2 ; keep going till all 40 columns copied + + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc screenDrawAirFrame + + lda currPageH ; see if this is to page 1 or 2 + cmp #$20 + bne page2 + + ldx #28 ; draw the long green lines that outline the bar +: + lda #%00101010 ; green left + sta $20DA, x + sta $24DA, x + sta $38DA, x + sta $3CDA, x + + lda #%01010101 ; green right + sta $20DB, x + sta $24DB, x + sta $38DB, x + sta $3CDB, x + + dex ; step back in 2's for left/right + dex + bpl :- + + ldx #31 ; draw the even longer white bar that counts down + lda #%01111111 ; white left & right +: + sta $28D7, x + sta $2CD7, x + sta $30D7, x + sta $34D7, x + + dex ; in 1's since left/right is the same $7f + bpl :- + + rts + +page2: ; the same as page 1, just diff buffer + ldx #28 +: + lda #%0101010 + sta $40DA, x + sta $44DA, x + sta $58DA, x + sta $5CDA, x + + lda #%01010101 + sta $40DB, x + sta $44DB, x + sta $58DB, x + sta $5CDB, x + + dex + dex + bpl :- + + ldx #31 + lda #%01111111 ; white left & right +: + sta $48D7, x + sta $4CD7, x + sta $50D7, x + sta $54D7, x + + dex + bpl :- + + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc screenDrawAirRemaining + + lda airTipGfx ; the "graphic" to use + ldx airCols ; where to draw the tip of the graph + cpx #3 ; last few cols are against orange + bpl :+ + ora #$80 ; in the last few cols so make green orange +: + ldy currPageH ; which page + cpy #$20 + bne page2 + + sta $28D7, x ; write the tip into page 1 + sta $2CD7, x + sta $30D7, x + sta $34D7, x + + rts + +page2: + sta $48D7, x ; write the tip into page 2 + sta $4CD7, x + sta $50D7, x + sta $54D7, x + + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc screenDrawLevel + + tileReadL = srcPtrL ; tile to draw's data + tileReadH = srcPtrH + scrnPtrL = dstPtrL ; location in screen buffer to draw to + scrnPtrH = dstPtrH + rows = sizeL ; rows to draw (15 -> 0) + cols = sizeH ; cols to draw (20 + leftEdge -> leftEdge) + willyYRowEnd = tmpBot + 0 ; row where willy overlaps ends (+1) + willyXPosStart = tmpBot + 1 ; col where willy overlaps start + willyXPosEnd = tmpBot + 2 ; row where willy overlaps ends (+1) + rowStartL = tmpBot + 3 ; current screen draw row start + rowStartH = tmpBot + 4 + height = tmpBot + 5 ; normally 8 except for collapsing platforms + + lda #0 + sta tilesRendered + lda willyYPos ; see if willy is across 2 or 3 rows + and #7 + beq :+ + lda #3 + bne :++ +: + lda #2 +: + clc + adc willyYRow ; and set up the end row (+1) + sta willyYRowEnd + + lda willyXPos ; calculate the cols that willy overlaps + sec + sbc leftEdge + sta willyXPosStart + clc + adc #2 + sta willyXPosEnd + clc ; in demo-mode, the prev didn't make sense and carry is set + + lda leftEdge ; col where to start drawing (right, bottom) + adc #<(levelLayout + (PLAY_ROWS - 1) * PLAY_COLS) + sta colLoop + 1 + lda #>(levelLayout + (PLAY_ROWS - 1) * PLAY_COLS) + sta colLoop + 2 ; levelLayout aligned so carry always clear + + lda #PLAY_ROWS - 1 ; zero based rows to process + sta rows ; draw rows bottom up + +rowLoop: + clc + ldy rows ; rows are 8 lines high + lda mult8, y + tay + + lda rowL, y ; put the row in screen space + sta rowStartL ; and save in a temp place + lda rowH, y + adc currPageH + sta rowStartH + + ldx #VISIBLE_COLS - 1 ; draw 20 columns (0 based) + +colLoop: + lda PLACEHOLDER, x ; get the tile from the unpacked level + bne :+ ; if non-zero process that tile + jmp prevCol ; 0 (space) - skip to next tile to process +: + cmp #DATA_COLLAPSE ; see if the tile is a collapsing tile + bcc notCollapse ; the $70 could be $71->$77 for the collapsed state + cmp #DATA_KEY + bcc isCollapse ; if it's less than $80 it is a collapsing platform + beq notCollapseClc ; is it a key + cmp #DATA_DOOR ; if not a key, is it a door + bcc setupSwitch ; if < door then it's a switch + jmp prevCol ; door tile isn't a rendered tile, only a collision tile + +isCollapse: + and #7 ; get the level of collapse + tay + lda collapseHeight, y ; see how many lines remain to draw + sta height + lda mult1024H, y ; and move the screen pointer down as well + sta scrnPtrH + lda #DATA_COLLAPSE ; and set up to draw the tile from the top (for fewer lines) + bne setupTile ; BRA + +setupSwitch: + ldy #0 ; this code duplicated from notCollapse since setupTile is skipped + sty scrnPtrH ; not a collapsing tile so set the screen ptr to top + ldy #8 ; and set the height to 8 lines to draw + sty height + + and #1 ; is this an on switch? + beq :+ ; no + lda #16 ; yes - the image is 16 bytes further (tile36) +: + adc #tile35 ; and set the hi byte too + adc #0 ; turns out tile36 is in a different block (if I remove these 2 bytes ;) + sta tileReadH ; points at the tile data + bne :+ ; skip the portion where the tile pointer is setup + +notCollapseClc: + clc +notCollapse: + ldy #0 ; not a collapsing tile so set the screen ptr to top + sty scrnPtrH + ldy #8 ; and set the height to 8 lines to draw + sty height + +setupTile: + adc #<(tilesInstances - TILE_BYTES) ; Index 1 has it's bytes at + 0, so move start 1 tile back + sta tileReadL + lda #>(tilesInstances - TILE_BYTES) + 1 ; carry always set, so + 1 + sta tileReadH ; points at the tile data + +: + inc tilesRendered + txa ; get the col + asl ; * 2 for 2-byte wide tiles and clears carry + adc rowStartL ; add to screen row start to get tile screen dest + sta scrnPtrL + lda rowStartH + adc scrnPtrH ; add the hi offset for collapsed tiles + sta scrnPtrH + +intersect: + lda rows ; see if willy intersects this row + cmp willyYRow + bcc noOverlap ; is willy below this row? + cmp willyYRowEnd + bcs noOverlapClc ; is willy's end above this row + txa ; rows intersect, now check the cols + cmp willyXPosStart + bcc noOverlap ; is col < willyStartCol + cmp willyXPosEnd + bcs noOverlapClc ; is col > willyEndCol (>= willyEnd + 1) + +overlap: ; willy will be "under" these tiles, so "or" in the + ldy #0 ; tile to the screen. Since willy's bits are 11, willy + lda (tileReadL), y ; will "appear" as though he's in front of the tile + ora (scrnPtrL), y ; see noOverlap for code explanation + sta (scrnPtrL), y + ldy #1 + lda (tileReadL), y + ora (scrnPtrL), y + sta (scrnPtrL), y + + lda tileReadL + adc #2 + sta tileReadL + lda scrnPtrH + adc #$04 + sta scrnPtrH + dec height + bne overlap + beq prevCol + +noOverlapClc: + clc +noOverlap: ; tile's don't intercept with willy so just write to screen + ldy #0 ; start with a byte at 0 offset (left) + lda (tileReadL), y ; read tile byte + sta (scrnPtrL), y ; write to screen + ldy #1 ; do the same for the right byte at offset 1 + lda (tileReadL), y + sta (scrnPtrL), y + + lda tileReadL ; advance the tile ptr by 2 for the 2 just written + adc #2 + sta tileReadL + lda scrnPtrH ; advance the screen ptr to next row ($400) + adc #$04 + sta scrnPtrH + + dec height ; done one more row + bne noOverlap ; keep going till all rows done + +prevCol: + dex ; go to col to the left + bmi :+ ; reached the end of the row? + jmp colLoop ; not yet end of row so go do this col +: + dec rows ; done another row + bmi done ; done all rows? + + lda colLoop + 1 ; not yet - setp up a row in the unpacked tile area + sec + sbc #32 + sta colLoop + 1 + bcs :+ + dec colLoop + 2 +: + jmp rowLoop ; go do the next row's worth of tiles + +done: + lda currLevel + cmp #LEVEL_Solar_Power_Generator ; Is this the solar room + bne :+ ; if not, move on + jmp screenSolarBeam ; solar room needs a solar beam +: + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc screenDrawSprites + + count = sizeL + + ldx numSprites ; render the AI + dex ; ignore the door + stx count +: + jsr screenDrawSprite + dec count + ldx count + bpl :- + + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc screenDrawSprite + + col = sizeH + lines = tmpBot + 0 + + lda #0 + sta read + 1 ; in case of left clipping, reset read + lda #3 + sta stripLen + 1 ; in case of right clipping, reset length + + lda spriteXPos, x ; col in 0..31 range + sec + sbc leftEdge ; move by the left edge + bpl leftOK ; if ge 0 then no clipping left + cmp #$ff + beq lClip + +drawOffScreen: + sta lines + lda spriteClass, x + bit CLASS_MOVE_Y + beq :+ ; if yes, ignore + jmp screenDrawOffscreenSprite ; an off-screen amoeba gets an indicator +: + rts + +lClip: + lda #2 + sta read + 1 + lda #1 + sta stripLen + 1 + lda #0 + bne rightOK ; BRA + +leftOK: + cmp #19 ; clip on the right + bcc rightOK + beq rClip + bne drawOffScreen ; BRA + +rClip: + lda #1 + sta stripLen + 1 + lda #19 + +rightOK: + asl ; multiply times 2 + sta col ; screen column for where to start draw + + lda spriteFrame, x + adc spriteFramesIdx, x + tay + lda mult64H, y ; and add the 64 * frame hi + adc #>spriteInstances ; add the hi offset + sta read + 2 + lda mult64L, y + adc #sprites + sta srcPtrH ; save as srcPtr + + txa ; how many lives (0 based) into a for column offset calc + +oloop: + asl ; mult * 4 to set them apart + asl + sta sizeH ; store the column in sizeH + lda #16 ; draw 16 lines + sta dstPtrL ; store the lines in dstPrkL + + ldy #22 * 8 ; Draw the lives in row 19 (0 based) + + lda srcPtrL ; copy the srcPtr to where to read from + sta read + 1 + lda srcPtrH + sta read + 2 + +loop: + lda sizeH ; start with the column + adc rowL, y ; add the row start + sta write + 1 + lda rowH, y + adc currPageH ; and the page + sta write + 2 ; "write" points at the line to copy 4 bytes to + + ldx #3 ; copy offsets 0..3 +read: + lda PLACEHOLDER, x ; get the willy bytes +write: + sta PLACEHOLDER, x ; put them on screen + dex + bpl read ; do all the bytes + dec dstPtrL ; one more line done + beq next ; all lines done, see if more lives to draw + lda read + 1 ; not all done, advance read by 4 bytes + adc #4 + sta read + 1 + bcc :+ + inc read + 2 + clc +: + iny ; and go to next line + bne loop ; BRA + +next: + dec sizeL ; dec the count of lives to draw + lda sizeL ; get it in a to calc the column + bpl oloop ; and go do that if ge 0 + + lda allDone ; sentinel to stop looping when cheat active + beq maybeCheat ; if not set then check if cheat is active + +done: + rts ; exit + +maybeCheat: + lda cheatActive ; see if cheat mode is on + beq done ; if not then done + sta allDone ; set sentinel + + ldx lives ; get the column to draw the boot + txa + asl ; mult * 4 to set them apart + asl + sta sizeH ; store the column in sizeH + lda #16 ; draw 16 lines + sta dstPtrL ; store the lines in dstPrkL + + ldy #22 * 8 ; Draw the lives in row 19 (0 based) + + lda #sprite19dw + sta read + 2 + jmp loop + +.endproc + +;----------------------------------------------------------------------------- +.proc screenDrawWilly + + count = sizeL + col = sizeH + lines = tmpBot + 0 + willyByte = tmpBot + 1 + collision = tmpBot + 2 + + lda #0 + sta collision + + lda willyXPos ; col in 0..31 range + sec + sbc leftEdge ; move by the left edge + asl ; multiply times 2 + sta col ; screen column for where to start draw + + lda willyFrame ; get the frame + tay ; index through y + lda mult64L, y ; get the frame * 64 lo + + adc #sprite00 ; add the hi offset + adc mult64H, y ; and add the 64 * frame hi + sta willyRead + 2 ; willyRead now a pointer at the frame to show + + lda willyYPos ; get the y position of the sprite + tay + + lda #16 ; sprites are 16 high + sta lines + +loop: + lda col ; start with the column + adc rowL, y ; add the row start + sta screenRead + 1 + sta write + 1 + lda rowH, y + adc currPageH ; and the page + sta screenRead + 2 ; write points at the line to copy 4 bytes to + sta write + 2 ; write points at the line to copy 4 bytes to + +stripLen: + ldx #3 ; copy offsets 0..3 +willyRead: + lda PLACEHOLDER, x ; get the bytes from src instance + sta willyByte +screenRead: + lda PLACEHOLDER, x + eor willyByte +write: + sta PLACEHOLDER, x ; put them on screen + and willyByte + cmp willyByte + beq :+ + inc collision +: + dex + bpl willyRead ; do all the bytes + dec lines ; one more line done + beq done + clc + lda willyRead + 1 ; not all done, advance read by 4 bytes + adc #4 + sta willyRead + 1 + bcc :+ + inc willyRead + 2 + clc +: + iny ; and go to next line + bne loop ; BRA + +done: + lda collision + beq :+ + sec + rts +: + clc + rts + +.endproc + +;----------------------------------------------------------------------------- +; Mask the front screen with the color index passed in at tmpBot + 0 (colIdx) +.proc screenInvertVisibleScreen + + colIdx = tmpBot + 0 + rows = tmpBot + 1 + hiresRows = tmpBot + 2 + colL = tmpBot + 3 + colR = tmpBot + 4 + + jsr screenSwap::valueSwap + + ldx colIdx ; load the color mask based on the index + lda masksLeft, x + sta colL + lda masksRight, x + sta colR + + lda #PLAY_ROWS ; init a counter for how many rows to do + sta rows + lda #0 ; init the index to the starting hires row for the same "text" row + sta hiresRows + clc + +rowLoop: + ldy hiresRows ; init the pointer to the top line of the hires row + lda rowL, y + sta dstPtrL + lda currPageH + adc rowH, y + sta dstPtrH + + ldy #2 * (VISIBLE_COLS - 1) ; start at column 38 +colLoop: + ldx #8 ; 8 hires rows per text row +: + lda (dstPtrL), y ; get the left col/byte on screen + and #%01111111 ; ignore the msb + eor colL ; eor with the color + sta (dstPtrL), y ; write it back + iny ; go to the right col + lda (dstPtrL), y + and #%01111111 + eor colR + sta (dstPtrL), y + dey ; back to left + dex ; one more hires row done + beq :+ ; all done? + lda dstPtrH ; not yet + adc #4 ; move hires row down by 1 + sta dstPtrH + bne :- ; BRA to do all 8 hires rows +: + lda dstPtrH ; move the hires ptr back to the top row + sec ; for the text row being processed + sbc #7*4 + sta dstPtrH + clc ; clear carry from last set + +next: + dey ; move to the prev col right + dey ; and move to the prev col left + bpl colLoop ; and repeat for all columns ge 0 + + dec rows ; done a row + beq done ; stop when all rows done + + lda hiresRows ; more to do so move the hires + clc ; starting row down by 8 to be at the + adc #8 ; start of the next "text" row + sta hiresRows + jmp rowLoop ; go back and do this row now + +done: + jsr screenSwap::valueSwap ; put the screen buffer info back + rts ; all done + +.endproc + +;----------------------------------------------------------------------------- +.proc screenSolarBeam + + worldPtrL = srcPtrL + worldPtrH = srcPtrH + screenPtrL = dstPtrL + screenPtrH = dstPtrH + column = sizeL + row = sizeH + screenCol = tmpBot + 0 + direction = tmpBot + 1 + collision = tmpBot + 2 + isWilly = tmpBot + 3 + + lda #0 ; init some local variables to 0 + sta row + sta direction + sta collision + sta isWilly + + lda #23 ; column where solar beam starts + sta column + sta worldPtrL ; also the column in levelLayout (aligned in mem) + lda #>levelLayout ; make worldPtr point at the start of the beam + sta worldPtrH + +while: + lda column ; start with the column + sec + sbc leftEdge ; and see if it's on screen + bmi beamLeft ; if c - le <= 0 then c is left of screen and done + sta screenCol ; save this + cmp #20 ; if c - le >= 20 then c is to right of screen + bcc onScreen ; c - l1 >= 0 and < 20 so visible + +offScreen: + ldy #0 ; beam is to the right so may become visible + lda (worldPtrL), y ; see if beam hits a world tile + beq :+ ; if not, process beam +beamLeft: + jmp done +: + ldx numSprites ; need to see if beam hits a sprite (not door) to bend +checkLoop: + dex + bmi checkCollision ; checked all sprites + lda spriteXPos, x ; get the sprite x + cmp column ; compare to the beam x + beq matchX ; if it matches it's a hit + bcs checkLoop ; sprite is to the right of the beam + adc #1 ; right col of the sprite + cmp column ; is it in the beam? + bne checkLoop ; if not this sprite is out +matchX: + lda spriteYPos, x ; see if y also matches + cmp row ; test against beam height + beq matchy + bcs checkLoop ; sprite top is lower than beam + adc #16 ; prep to test bottom of sprite + cmp row ; against the beam + bcc checkLoop ; sprite bottom is above beam +matchy: + inc collision ; set the collision + bne checkCollision ; and exit the check since sprites don't overlap + +onScreen: + lda willyYPos ; see if the beam intersects willy + adc #16 ; if willyY + 16 >= row and willyY <= row + 8 + cmp row ; then willy intersects in Y + bcc drawBlock + clc + lda row + adc #8 + cmp willyYPos + bcc drawBlock + lda column ; if col >= willyX and col < willyX + 3 + cmp willyXPos ; then willy intersects in X also, so hitting willy + bcc drawBlock + lda willyXPos + clc + adc #2 + cmp column + bcc drawBlock + sta isWilly ; set isWIlly to true when hitting willy + clc + +drawBlock: + ldy row ; set up to draw + lda screenCol ; on screen + asl ; which is 2 bytes per column + adc rowL, y + sta screenPtrL + lda rowH, y + adc currPageH + sta screenPtrH + + ldx #8 ; beam block is 8 rows high + ldy #0 ; y 0 and 1 for left and right +blockLoop: + lda (screenPtrL), y ; get what's on screen (sprite) + beq nocol ; if nothing just overwrite + inc collision ; hit a sprite +nocol: + ora #%10101010 ; orange left + sta (screenPtrL), y ; write to screen + + iny ; go to right column + + lda (screenPtrL), y ; repeat for right col + beq :+ + inc collision +: + ora #%11010101 + sta (screenPtrL), y + + dey ; set y back to 0 + dex ; done one more row + beq checkCollision ; if all rows done, then done with plot + + lda screenPtrH ; move down a row by adding $0400 + adc #$04 + sta screenPtrH + bne blockLoop ; BRA + +checkCollision: + lda isWilly ; was willy hit + beq chkDirChng ; if not, normal collision checks + lda #2 ; don't set airflow to less than 2 so both + cmp airFlow ; buffers get to draw + bcs :+ + sta airFlow +: + lda #0 ; willy was hit so reset locals + sta isWilly + beq setCollision ; go move the beam +chkDirChng: + lda collision ; see if there was a collision + beq moveBeam ; if there wasn't move the beam + lda direction ; there was a sprite collision + eor #1 ; so change the direction of the beam + sta direction + lda #0 +setCollision: + sta collision ; reset the collision counter +moveBeam: + lda direction ; get the beam direction + beq down ; 0 is down and 1 is left +left: + dec column ; move a world column left + lda worldPtrL ; and move the pointer as well + bne :+ + dec worldPtrH +: + dec worldPtrL + jmp checkWorld ; see that the new location isn't a world tile + +down: + clc + lda row ; move the row + adc #8 ; down by 8 (1 block height) + sta row + lda worldPtrL ; and move the world pointer as well + adc #32 + sta worldPtrL + bcc checkWorld + inc worldPtrH + +checkWorld: + lda (worldPtrL), y ; load a world location + bne done ; if occupied, beam dies + jmp while ; keep going till beam dies +done: + rts + +.endproc diff --git a/src/apple2/sprite.inc b/src/apple2/sprite.inc new file mode 100644 index 0000000..8e17f8d --- /dev/null +++ b/src/apple2/sprite.inc @@ -0,0 +1,384 @@ +;----------------------------------------------------------------------------- +; sprite.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "CODE" + +;----------------------------------------------------------------------------- +; Copy bytes from srcPtr to dstPtr +; IN: - srcPtr - start of copy +; dstPtr - start of non-overlapping destination +; size - number of bytes to copy +; Clobbers: a, y +.proc spriteCopyMemSrcToDst + + ldy #0 +hiCopy: + dec sizeH + bmi lowCopy +: + lda (srcPtrL), y + sta (dstPtrL), y + dey + bne :- + inc srcPtrH + inc dstPtrH + bne hiCopy + +lowCopy: + ldy sizeL + dey + bmi done +: + lda (srcPtrL), y + sta (dstPtrL), y + dey + bpl :- + +done: + rts + +.endproc + +;----------------------------------------------------------------------------- +; Look up the color, and apply those masks to the frames +; IN: x = start frame +; y = num frames +; a = color index +; Clobbers: a, y +.proc spriteApplyMaskToFrames + + instanceIdx = tmpBot + 0 + colMaskL = tmpBot + 1 + colMaskR = tmpBot + 2 + numFrames = tmpBot + 3 + + sty numFrames ; save y + tay ; put color index in y + + lda masksLeft, y ; look up the masks for the color + sta colMaskL + lda masksRight, y + sta colMaskR + + lda mult64L, x ; build a pointer to the frame + sta srcPtrL + lda mult64H, x + adc #>spriteInstances + sta srcPtrH + + ldy numFrames ; convert frames to bytes + lda mult64H, y + sta sizeH + lda mult64L, y + sta sizeL + + ldy #0 ; do blocks of 256 +hiPass: + dec sizeH ; see if there's a hi block to do + bmi lowPass ; if none (remain) to do, move on +: + lda (srcPtrL), y ; do a left hand byte + and colMaskL + sta (srcPtrL), y + dey + lda (srcPtrL), y ; then a right hand byte + and colMaskR + sta (srcPtrL), y + dey + bne :- ; for 256 bytes + inc dstPtrH ; advance the dest ptr Hi + bne hiPass ; BRA + +lowPass: + ldy sizeL ; do bytes remaining lt 256 + dey + bmi done ; keep going till all done +: + lda (srcPtrL), y + and colMaskL + sta (srcPtrL), y + dey + lda (srcPtrL), y + and colMaskR + sta (srcPtrL), y + dey + bpl :- + +done: + rts + +.endproc + +;----------------------------------------------------------------------------- +; Copy one frame to another +; IN: +; originalFrame = tmpBot + 4 +; newFrame = tmpBot + 5 +; Clobbers: a, x, y +.proc spriteCopyFrameToFrame + + originalFrame = tmpBot + 4 + newFrame = tmpBot + 5 + + clc + + ldx originalFrame ; point srcPtr at the original frame + lda mult64L, x + sta srcPtrL + lda mult64H, x + adc #>spriteInstances + sta srcPtrH + + ldx newFrame ; point dstPtr at the target frame + lda mult64L, x + sta dstPtrL + lda mult64H, x + adc #>spriteInstances + sta dstPtrH + + lda #0 ; 256 or less bytes (no Hi) + sta sizeH + lda #64 ; just 64 bytes to copy + sta sizeL + jsr spriteCopyMemSrcToDst ; use copymem to copy a 64 byte frame + + rts + +.endproc + +;----------------------------------------------------------------------------- +; Invert the pixels of a frame +; IN: +; x = frame number +.proc spriteInvertFrame + + clc + lda mult64L, x ; make srcPtr point at the frame + sta srcPtrL + lda mult64H, x + adc #>spriteInstances + sta srcPtrH + + ldy #SPRITE_BYTES - 1 ; do for a whole frame (0 based) +: + lda (srcPtrL), y ; get the frame byte + eor #%01111111 ; invert except for the MSB + sta (srcPtrL), y ; and save the byte + dey ; one less byte to do + bpl :- ; do for all bytes + + rts + +.endproc + +;----------------------------------------------------------------------------- +; Clear all the pixels of a frame +; IN: +; x = frame number +; y = number of frames to clear +.proc spriteClearFrames + + count = sizeL + + lda mult64L, y ; turn the number of frames into num bytes + sta count ; save as a count + + clc ; and clear carry + lda mult64L, x ; make srcPtr point at the + sta srcPtrL + lda mult64H, x + adc #>spriteInstances + sta srcPtrH + + ldy count ; how many bytes to clear + dey ; make zero based + lda #0 ; value to write +: + sta (srcPtrL), y ; write 0 to frame + dey ; previous byte in frame + bpl :- ; do for all, incl. zero'th byte + + rts + +.endproc + +;----------------------------------------------------------------------------- +; Make an instance of the bitmap (index in a) into the spriteInstance buffer +; while expanding the bitmap from 32 byte 1bpp into 64 byte 2bpp and masking +; the instance for the required color. +; IN: +; a - bitmapIdx +; x - instanceIdx +.proc spriteInstanceSpriteFrames + +; count = tmpBot + 0 +; spriteIdx = tmpBot + 1 + instanceIdx = tmpBot + 2 + srcIdx = tmpBot + 3 + dstIdx = tmpBot + 4 + colMaskL = tmpBot + 5 + colMaskR = tmpBot + 6 + + ldy #0 + sty srcPtrH + sty dstPtrH + + ldy #5 ; mult * 32 (shl 5 times) since each src frame is 32 bytes +: + asl ; shift the low + rol srcPtrH ; and the hi, and move carry into hi if needed + dey ; do for all 6 iterations + bne :- + + adc #sprite08 + adc srcPtrH + sta srcPtrH ; src ptr now points at the 1st frame + + lda spriteFramesIdx, x ; get the sprite dest frame + ldy #6 ; mult * 64 (shl 6 times) since each frame is 64 bytes +: + asl ; shift the lo + rol dstPtrH ; and the hi, and move carry into hi if needed + dey ; do for all 6 iterations + bne :- + sta dstPtrL ; save the lo + lda dstPtrH ; get the hi + adc #>spriteInstances ; and make relative to the buffer + sta dstPtrH ; and save the hi + + lda #1 ; assume 4 frames = 256 bytes + sta sizeH + lda spriteClass, x ; get the class + bit bit1Mask ; CLASS_FOUR_FRAME is it 4 frames + bne :+ ; yes, all set + inc sizeH ; 8 frames = 512 bytes = 2 Hi + +: + ldy instanceIdx ; get the instance + lda spriteColor, y ; and get the color for the instance + tay ; put the color index in y + lda masksLeft, y ; get the color mask + sta colMaskL + lda masksRight, y ; do the same for the right + sta colMaskR ; SQW - look at comments but save for second (inverse) buffer + + ldy #0 + sty dstIdx ; set the src and dst indices to start at 0 + sty srcIdx ; srcIndex moves at 1/2 of dstIndex + +copyFrames: + ldy srcIdx ; get the source index + lda (srcPtrL), y ; get a (left) src byte at the source index + pha ; save so the right nibble can be expanded later + lsr ; make the left nibble the low nibble + lsr + lsr + lsr + tax ; put the value in x + lda binDouble, x ; look up the "pixel doubled" value + ora #$80 ; and set the color msb "on" + and colMaskL ; mask it with appropriate color + ldy dstIdx ; get the destination offset + sta (dstPtrL), y ; and save to instance destination + iny ; move the destination along one + pla ; get the source byte + and #$0f ; mask so only right nibble + tax ; put it in x + lda binDouble, x ; and look up the "doubled" pixel values + sec ; set carry so a rotate will be equiv to or #$80 + ror ; and rotate, making it a "right" byte + and colMaskR ; mask it with appropriate color + sta (dstPtrL), y ; and save to instance destination + iny ; move the dest index along again + sty dstIdx ; and save the index + bne :+ ; if the index rolled over + inc dstPtrH ; move the hi byte along + dec sizeH ; check if moved all required 4 * 32 src byte blocks + beq done +: + inc srcIdx ; move the src index along + bne copyFrames ; do max 256 bytes = 8 * 32 byte src frames + +done: + rts + +.endproc + +;----------------------------------------------------------------------------- +; Copy the door frame, invert the copy, mask both and combine +.proc spriteDoorSetup + + originalFrame = tmpBot + 4 + newFrame = tmpBot + 5 + + ldx numSprites ; numSprites is the door sprite index + lda spriteFramesIdx, x + tax + stx originalFrame + inx + stx newFrame + jsr spriteCopyFrameToFrame ; make a copy y = instanceIdx, a = srcFrame, x = dstFrame + + ldx newFrame + jsr spriteInvertFrame ; invert the instance frame bits (leave msb alone) + + ldx currLevel + lda door_color1, x + beq :+ + ldx originalFrame + ldy #1 + jsr spriteApplyMaskToFrames + + ldx currLevel + lda door_color2, x + beq :+ + ldx newFrame + ldy #1 + jmp spriteApplyMaskToFrames + +: + rts + +.endproc + +;----------------------------------------------------------------------------- +; Make 4 copies of Eugene frame 0 into frames 1-4 and apply a different +; color mask to the additional frames +.proc spriteEugeneSetup + + originalFrame = tmpBot + 4 + newFrame = tmpBot + 5 + count = tmpBot + 6 + + ldx numSprites + dex ; eugene is sprite before the door + + lda spriteFramesIdx, x ; get the frame where eugene is + tax ; put in x + stx originalFrame ; and call it the original + inx ; and go to the next frame + stx newFrame ; and call it the new frame + ldx #3 ; and set the loop count to 3 + stx count +: + jsr spriteCopyFrameToFrame ; make a copy of eugene, x = ori, y = new + + lda count ; get the count in a (as a color mask index) + ldx newFrame ; the frame in x + ldy #1 ; and the number of frames to process in Y + jsr spriteApplyMaskToFrames ; mask the new eugene to the "count" color + + inc newFrame ; go up a frame + dec count ; and dec the loop counter + bne :- ; and do for the number of loops (3) + + rts ; there are now 4 eugenes, White, Green, Orange & Purple + +.endproc diff --git a/src/apple2/text.inc b/src/apple2/text.inc new file mode 100644 index 0000000..56305b2 --- /dev/null +++ b/src/apple2/text.inc @@ -0,0 +1,332 @@ +;----------------------------------------------------------------------------- +; text.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "CODE" + +;----------------------------------------------------------------------------- +.proc textSHowText + + xpos = srcPtrL + ypos = srcPtrH + rows = sizeH + strIndex = sizeL + color = dstPtrL ; and H + fontL = charGfx + 1 + fontH = charGfx + 2 + + stx xpos + sty ypos + +loop: + lda #0 + sta fontH ; init the pointer hi to 0 for later mult rol's + ldx strIndex ; get the index into the string + +read: + lda PLACEHOLDER, x ; get the character in the string + sec + sbc #32 ; the font only starts at space (char 32 or $20) + asl ; mult by 16 as that's how wide a char is in bytes + asl + rol fontH + asl + rol fontH + asl + rol fontH ; srcPtr now points at the char but $0000 based + adc #font + sta fontH ; srcPtr now point at the actual character memory + + lda #8 ; font is 8 rows high + sta rows + ldy ypos ; start each character on the same line + +iLoop: + lda strIndex ; strIndex is also col offset from xpos + asl ; but font is 2 cols wide + adc xpos ; add the xpos to get screen col + adc rowL, y ; and add the row + sta write + 1 ; lo byte of where to write to screen buffer + lda currPageH ; get the hi page + adc rowH, y ; add the row + sta write + 2 ; and complete the screen buffer write address + + ldx #1 ; set up for copying 2 font bytes (1 char) +charGfx: + lda PLACEHOLDER, x ; get the font +eorMask: + eor #$00 ; eor to invert if necessary + and color, x ; and to get the color needed +write: + sta PLACEHOLDER, x ; and write to screen memory + dex ; go left a byte + bpl charGfx ; and repeat to do 2 bytes + dec rows ; done one of the 8 rows needed + beq nextChar ; repeat for all 8 rows, then done + iny ; more rows - next row in y + lda fontL ; move along 2 in the font + adc #2 + sta fontL + bcc iLoop + inc fontH + bcs iLoop ; BRA + +nextChar: + dec strIndex ; string done from the back, so move left in string + bpl loop ; if not all of string done, loop + +done: + rts + +.endproc + +;----------------------------------------------------------------------------- +; Macro that takes a lo and hi for the text with optional color and invert wanted +; sets up what's needed to call textShow which does the printing +.macro printXYlh xpos, ypos, textL, textH, len, colorMask, inverse + + .local color, strIndex + + color = dstPtrL ; textShow expects color masks in dstPtr(L and H) + strIndex = sizeL + + .ifblank colorMask + lda #$ff ; no color (white) is a mask of $ff left and right + sta color + sta color + 1 + .else + ldx colorMask ; this is an index into mask[Left|Right] + lda masksLeft, x + sta color + lda masksRight, x + sta color + 1 + .endif + + .ifblank inverse + lda #0 ; eor o is not inverse + .else + lda #$7f ; eor $7f inverts the color (leave MSB) + .endif + + sta textSHowText::eorMask + 1 ; set the eor in the code + + lda textL ; set the string pointer in the code + sta textSHowText::read + 1 + lda textH + sta textSHowText::read + 2 + ldx len ; 0 based + stx strIndex + lda xpos ; and x/y coords in x and y registers + asl + tax + ldy ypos + jsr textSHowText ; print that string + +.endmacro + +;----------------------------------------------------------------------------- +; macro to take text address and split it into lo and hi (shorthand) +.macro printXY xpos, ypos, text, len, colorMask, inverse + printXYlh xpos, ypos, #text, len, colorMask, inverse +.endmacro + +;----------------------------------------------------------------------------- +; Build a memory cache of the level name since this is re-drawn much more - +; every time the level scrolls left or right and copying from a cache is +; much faster than doing a text print +.proc textSetLevelText + + lda #0 + sta sizeL ; index into string + sta read + 2 ; hi byte of string address + + lda currLevel ; start with the level + asl ; multiply by 32 + asl + asl + asl + rol read + 2 + asl + rol read + 2 + adc #roTextLevel + adc read + 2 + sta read + 2 ; read + 1 as a ptr now points at the string for this level + + lda #levelNameGfx0 + sta write + 2 + + lda #32 ; These strings are 32 characters wide + sta dstPtrL + +loop: + lda #0 + sta srcPtrH ; init the pointer hi to 0 for later mult rol's + ldx sizeL ; get the index into the string +read: + lda PLACEHOLDER, x ; get the character in the string + sec + sbc #32 ; the font only starts at space (char 32 or $20) + asl ; mult by 16 as that's how wide a char is in bytes + asl + rol srcPtrH + asl + rol srcPtrH + asl + rol srcPtrH ; srcPtr now points at the char but $0000 based + adc #font + sta srcPtrH ; srcPtr now point at the actual character memory + + lda #8 ; copy 8 rows / character + sta sizeH + ldy #1 ; start at the right hand side character +lrLoop: + ldx #1 ; load x for the right hand side as well +copyLoop: + lda (srcPtrL), y ; get the line pixel + eor #$7f ; invert +maskName: + and maskGreen, x ; mask for color (always green but left vs right hand side) +write: + sta PLACEHOLDER, x ; store to the cache + dey ; back up a byte + dex + bpl copyLoop ; do 2 bytes, right and left hand + lda write + 1 ; get the cache ptr low + clc +step: + adc #64 ; step to the next line - 64 bytes along + sta write + 1 ; update the pointer + bcc :+ + inc write + 2 ; if it wrapped, update the hi byte +: + iny ; y is now at minus 1 the last byte written + iny ; so advance it by 4 to get to the next right hand side byte + iny + iny + dec sizeH ; done one line + bne lrLoop ; if any lines left, keep going + + sec + lda write + 1 + sbc #<((64*8)-2) + sta write + 1 + lda write + 2 + sbc #>((64*8)-2) + sta write + 2 + clc + + inc sizeL ; move to the next character in the string + dec dstPtrL ; see if 32 characters were done + bne loop ; if not, keep going + +done: + rts + +.endproc + +;----------------------------------------------------------------------------- +; x has digit (5 means 1's, 4 means 10's, etc) +; a is the number to add 0..9 +.proc textAddScore + + clc + adc score, x ; get the current digit + cmp #'9'+1 ; has it rolled over + bcc okay ; then simply increment + sec + sbc #10 + sta score, x ; and save over the 9 + lda #1 + dex ; previous digit + bmi over ; if it rolls over 999999 + cpx #1 ; if the digit is now the 010000 (1) + bne textAddScore ; no, then work with this digit + ldy lives + cpy #9 ; max out at 9 lives (keeps cheat boot on-screen) + bcs textAddScore + inc lives ; yes, then add a life + bne textAddScore ; and then work with this digit +okay: + sta score, x ; and store it +over: + lda #UI_COMPONENT_SCORE ; mark the score texts as needing an update + jmp uiUpdateComponent + +done: + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc textCheckHighScore + + ldx #0 ; start at the most significant digit +: + lda score, x ; get the score + cmp highScore, x ; compare to the high score + bcc done ; if smaller then highscore gt score + bne newHigh ; if ne then highscore gt score + inx ; digits equal so check next digit + cpx #6 ; compare x to max digits (+ 1) + bcc :- ; x is 5 or less, keep checking digits + +done: + rts + +newHigh: + ldx #5 ; copy the 6 score digits over the highscore digits +: + lda score, x + sta highScore, x + dex + bpl :- + lda #UI_COMPONENT_HIGHSCORE + jmp uiUpdateComponent + +.endproc + +;----------------------------------------------------------------------------- +.proc textColorCycle + + color = tmpBot + 1 + xPos = tmpBot + 2 + yPos = tmpBot + 3 + textL = tmpBot + 4 + textH = tmpBot + 5 + len = tmpBot + 6 + +prntLoop: + printXYlh xPos, yPos, textL, textH, #0, color + + dec len ; one less character to color + beq done ; all characters done? + inc xPos ; move to the next character on screen + inc textL ; and move to the next character in the sting + bne :+ ; did the string wrap a buffer + inc textH ; yes, up the Hi +: + dec color ; prev color + bpl :+ ; still ge 0 + lda #4 ; no, wrap to index 4 + sta color ; and save that as the color +: + jmp prntLoop ;and print this character + +done: + rts + +.endproc diff --git a/src/apple2/tiles.inc b/src/apple2/tiles.inc new file mode 100644 index 0000000..de2cacc --- /dev/null +++ b/src/apple2/tiles.inc @@ -0,0 +1,448 @@ +;----------------------------------------------------------------------------- +; tiles.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "CODE" + +;----------------------------------------------------------------------------- +.proc tilesPrepForLevel + + jsr tilesMakeInstances ; copy tile data to instance area + + lda monochrome ; see if the game should render for monochrome + beq color ; no, apply all masks +mono: + ldy #(DATA_COLLAPSE / $10) - 1 ; apply color mask only to the conveyor tile + ldx #((DATA_COLLAPSE / $10) -1) * TILE_BYTES + lda #1 + bne mask +color: + ldy #0 + ldx #0 + lda #TILES_PER_LEVEL + +mask: + jsr tilesColorInstances ; color instance tiles by applying appropriate color masks + jsr tilesPrepKeysTiles ; make animated keys from the key tile + jmp tilesPrepConveyorTiles ; Make rotated conveyor tiles into conveyorAnimTiles + +.endproc + +;----------------------------------------------------------------------------- +.proc tilesMakeInstances + + numTiles = sizeL + iLevelTile = sizeH + iWrite = dstPtrL + tileMemL = srcPtrL + tileMemH = srcPtrH + + lda #TILES_PER_LEVEL ; for all tiles used in a level + sta numTiles + + lda #TILE_BYTES - 1 ; start at the end of tile memory + sta iWrite + + ldx currLevel ; find index into tile table + lda mult8, x ; 8 tiles per level + sta iLevelTile ; gives entry for the 1st tile + +loop: + lda #0 ; set the hi for reading tile memory to 0 + sta tileMemH + + ldx iLevelTile ; get the index into the table + lda levelTiles, x ; and get the id for the tile from the table + + asl ; mult tile offset * 16 (width of a tile) + asl + asl + rol tileMemH + asl + rol tileMemH ; offset of tile start (from background) now in tileMem ptr + adc #tiles + adc tileMemH + sta tileMemH ; tileMem pointer now points at memory for the tile + + ldy #TILE_BYTES - 1 ; 0 based, copy all the bytes of the tile + ldx iWrite + +: + lda (tileMemL), y ; get the tile byte + sta tilesInstances, x ; and save it to instance 0 + dex ; back up the tile write pointer + dey ; and completed one byte + bpl :- ; do for all bytes of a tile + + dec numTiles ; done a tile + beq copyDone ; see if all tiles done + + lda iWrite ; more tiles to do, adjust the tile write ptr + clc + adc #TILE_BYTES ; by moving it to the end of the next tile + sta iWrite + inc iLevelTile ; and advance the index into the table to the next tile + bne loop ; BRA to do the next tile + +copyDone: + rts + +.endproc + +.proc tilesColorCollapsing + rts +.endproc + +;----------------------------------------------------------------------------- +; Color tile instances +; IN: a - number of tiles to color +; y - index of first tile to color +; x - write address of first tile data (16 * y) +.proc tilesColorInstances + + numTiles = sizeL + iLevelTile = sizeH + colMaskL = dstPtrL + 0 + colMaskR = dstPtrL + 1 + tileMemL = srcPtrL + tileMemH = srcPtrH + + sta numTiles ; save the register parameters + sty iLevelTile + + ldy currLevel ; get the offset of the tiles in the level tile table + lda mult8, y + clc + adc iLevelTile ; and add the parameter offset (0 for color and 3 for mono) + sta iLevelTile + +loop: + ldy iLevelTile ; get the index + lda levelMasks, y ; and extract the masks for this tile + tay + lda masksLeft, y + sta colMaskL + lda masksRight, y + sta colMaskR + + ldy #(TILE_BYTES / 2) ; 2 masks at one time, so bytes / 2 +: + lda colMaskL ; instance 0 mask the left side with a left mask + and tilesInstances, x + sta tilesInstances, x + + inx ; next byte + + lda colMaskR ; instance 0 mask the right side with a right mask + and tilesInstances, x + sta tilesInstances, x + + inx ; next byte + + dey ; one more column done + bne :- ; keep going till all columns done + + inc iLevelTile ; go to the next table entry + dec numTiles ; done one more tile + bne loop ; keep going till all tiles done + + rts + +.endproc + + +;----------------------------------------------------------------------------- +.proc tilesPrepKeysTiles + + keyByte = tmpBot + 0 + + lda #4 ; init the key animation to frame 4 + sta keysFrameNum + + ldy #0 ; start at the 1st key byte + +maskLoop: + lda tilesInstances + DATA_KEY - TILE_BYTES, y + sta keyByte ; get a byte and save it + + clc + ldx #4 ; make 4 color variations +colorLoopLeft: + lda keyByte ; start with the white key byte + and masksLeft, x ; mask it for left + sta keyAnimTiles, y ; and save it to the first key frame instance 0 + + tya ; move y along to the next key instance + adc #TILE_BYTES + tay + dex ; and do the next color for that instance + bne colorLoopLeft ; repeat for all 4 color frames + tya ; move Y back 63 bytes, to the next white key byte + sec + sbc #63 + tay + + lda tilesInstances + DATA_KEY - TILE_BYTES, y + sta keyByte ; get the second (right hand byte) + + clc + ldx #4 ; repeat the above but swap color masks +colorLoopRight: + lda keyByte + and masksRight, x + sta keyAnimTiles, y + + tya + adc #TILE_BYTES + tay + dex + bne colorLoopRight + + tya + sec + sbc #63 + tay ; y is now pointing at the next left byte + cpy #TILE_BYTES ; see if the whole key has been processes + bne maskLoop + + rts + +.endproc + +;----------------------------------------------------------------------------- +; Makes animated copies of the conveyor tile. Instead of making full tile +; copies, this should really just do the two lines affected (so use 1 tile +; of memory, not 7 * TILE_BYTES) +.proc tilesPrepConveyorTiles + + frame = sizeL + count = sizeH + dir = tmpBot + 0 + carry = tmpBot + 1 + + lda #6 ; init the conveyor frame counter + sta conveyorFrameNum + + ldx currLevel + lda conveyorDirections, x ; get a local copy of the conveyor direction + sta dir + + clc ; point srcPtr at the conveyor tile + lda #DATA_CONVEYOR - TILE_BYTES + sta srcPtrL + lda #>tilesInstances + sta srcPtrH + + lda #conveyorAnimTiles + sta dstPtrH + + ldy #TILE_BYTES - 1 ; copy the tile to the animated tiles +: + lda (srcPtrL), y + and #$7F ; clear the MSB, will be fixed later + sta (dstPtrL), y + dey + bpl :- + + ldy #CONVEYOR_FRAMES - 1 ; set a counter for how many frames to process + +processTile: + sty frame + + clc ; move srcPtr to dstPtr (the new src) + lda dstPtrL ; and move dstPtr to the next frame to animate + sta srcPtrL + adc #TILE_BYTES + sta dstPtrL + lda dstPtrH + sta srcPtrH + bcc :+ + inc dstPtrH +: + ldy #TILE_BYTES - 1 ; process a tile's bytes (0 based) +: + lda (srcPtrL), y ; copy the source + sta (dstPtrL), y ; save to the dest + dey ; copy the whole tile + bpl :- + + lda dir ; different algorithm for each direction + cmp #2 + beq left + +right: + ldy #0 ; top row + jsr shiftLeft ; move "left" which is "wrong", the processing is going 0..CONVEYOR_FRAMES + ldy #4 ; 3rd row down, 0 based (2) * 2 byes/row is 4 + jsr shiftRight ; but the animation plays back CONVEYOR_FRAMES..0 + jmp nextFrame ; so this is all reversed + +left: + ldy #0 + jsr shiftRight + ldy #4 + jsr shiftLeft + +nextFrame: + ldy frame + dey ; another frame processed + bne processTile ; have all tiles been animated (0 is original the rest shifted) + + jmp finalFix ; fix the MSB + +shiftRight: + lda (dstPtrL), y ; left byte scroll right (apple pixels are reversed, so asl) + asl ; shift msb away, bit 0 clear + asl ; shift 1/2 a pixel, bit 1 and 0 clear + sta (dstPtrL), y ; save left shifted. carry has a pixel bit that needs to move + + iny + lda (dstPtrL), y + rol ; shift right byte once, carry goes in, MSB bit out in carry + asl ; shift second time, bit 0 is now a zero, carry bit needs moving left + sta (dstPtrL), y + + dey + lda #0 ; start fresh + rol ; move carry into bit 0 + asl ; carry into bit 1, carry clear, bit 0 now 0 + ora (dstPtrL), y ; add bit 1 to the left byte + sta (dstPtrL), y ; save the left byte + and #$80 ; extract bit 8 left that should be in right bit0 + asl ; put bit 8 in carry and acc now clear + rol ; put bit 8 in bit 0 + iny + ora (dstPtrL), y ; add it to the right byte + sta (dstPtrL), y ; store the right byte + and #$80 ; extract bit 8 right which should be bit 0 left + asl ; move into carry + rol ; move carry into bit 0, carry now clear + dey + ora (dstPtrL), y ; add to bit0 of left byte + sta (dstPtrL), y ; and save + + rts + +shiftLeft: + ldx #1 + lda (dstPtrL), y ; get left byte +: + lsr ; move bit out + sta (dstPtrL), y ; save byte + + lda #0 ; move bit in for next byte to bit 6 + ror + lsr + sta carry + iny + lda (dstPtrL), y + ror ; move right byte one over (carry needs to go left now) + ora carry ; add bit from left + sta (dstPtrL), y ; save + lda #0 ; start fresh + ror ; move carry to bit 6 + lsr + dey + ora (dstPtrL), y ; add to left byte + dex + bpl :- + sta (dstPtrL), y ; save + + rts + +finalFix: + ldy #(CONVEYOR_FRAMES * TILE_BYTES) - 1 + lda tilesInstances + (DATA_CONVEYOR - TILE_BYTES) + and #$80 ; load a byte from original + beq clear ; and see if color bit is set +: + lda #$80 ; if set, set color on for all frames + ora conveyorAnimTiles, y + sta conveyorAnimTiles, y + dey + bpl :- + bmi done + +clear: + lda #$7f ; if not set, make sure color isn't on for all + and conveyorAnimTiles, y + sta conveyorAnimTiles, y + dey + bpl clear + +done: + rts + +.endproc + +;----------------------------------------------------------------------------- +; Copy a pre-animated key tile into the tilesInstances so it looks as +; though the key is animating +.proc tilesAnimateKeys + + ldx keysFrameNum ; get the frame + dex ; step + bpl :+ ; underflow + ldx #3 ; reset - frames are 0 to 6, but go to render + 1 +: + stx keysFrameNum ; save the new frame + inx ; go one frame past + lda mult16, x ; get the byte offset to the frame + tax ; put it in x + dex ; and go to the last byte of the frame needed + + ldy #TILE_BYTES - 1 ; set y to copy a whole tile + +: + lda keyAnimTiles, x ; read the frame and write to key tile + sta tilesInstances + DATA_KEY - TILE_BYTES, y + dex + dey + bpl :- + + rts + +.endproc + +;----------------------------------------------------------------------------- +; Copy a pre-animated conveyor lines over the lines in the conveyor frame tile, +; in the tilesInstances area +.proc tilesAnimateConveyor + + ldx conveyorFrameNum ; get the frame + dex ; step + bpl :+ ; underflow + ldx #6 ; reset - frames are 0 to 6, but go to render + 1 +: + stx conveyorFrameNum ; save the new frame + lda mult16, x ; get the byte offset to the frame + tax ; put it in x + + lda conveyorAnimTiles, x ; copy the 4 animated bytes for + sta tilesInstances + DATA_CONVEYOR - TILE_BYTES + + inx + lda conveyorAnimTiles, x ; instance 0 over + sta tilesInstances + DATA_CONVEYOR - TILE_BYTES + 1 + + inx ; to the tile area 0 + inx + inx + lda conveyorAnimTiles, x + sta tilesInstances + DATA_CONVEYOR - TILE_BYTES + 4 + + inx + lda conveyorAnimTiles, x + sta tilesInstances + DATA_CONVEYOR - TILE_BYTES + 5 + + rts + +.endproc diff --git a/src/apple2/ui.inc b/src/apple2/ui.inc new file mode 100644 index 0000000..155ed36 --- /dev/null +++ b/src/apple2/ui.inc @@ -0,0 +1,425 @@ +;----------------------------------------------------------------------------- +; ui.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "CODE" + +;----------------------------------------------------------------------------- +.proc uiUpdateComponent + + ora uiComponent + sta uiComponent + lda #2 + sta updateUICount + + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc uiUpdate + + lda uiComponent + + bit bit0Mask ; UI_COMPONENT_NAME + beq :+ + jsr screenDrawLevelName + lda uiComponent +: + bit bit1Mask ; UI_COMPONENT_AIR_NAME + beq :+ + printXY #0, #(17*8), roTextAir, #4, #2, 1 + jsr screenDrawAirFrame + lda uiComponent +: + bit bit2Mask ; UI_COMPONENT_AIR + beq :+ + jsr screenDrawAirRemaining + lda uiComponent +: + bit bit3Mask ; UI_COMPONENT_SCORE_NAME + beq :+ + printXY #4, #(19*8), roTextHighScore, #3 + printXY #11, #(19*8), roTextScore, #4 + lda uiComponent +: + bit bit4Mask ; UI_COMPONENT_SCORE + beq :+ + printXY #11, #(20*8), score, #5 + lda uiComponent +: + bit bit5Mask ; UI_COMPONENT_LIVES + beq :+ + jsr screenDrawLives + lda uiComponent +: + bit bit6Mask ; UI_COMPONENT_HIGHSCORE + beq :+ + printXY #3, #(20*8), highScore, #5 +: + dec updateUICount + bne :+ + lda #0 + sta uiComponent +: + rts + +.endproc + +;----------------------------------------------------------------------------- +; 28209 cycle delay from start till after rts +.proc uiDelay + + ldy #$80 +ySet: + ldx #0 +: + dex + bne :- + dey + bne :- + + rts + +.endproc + +;----------------------------------------------------------------------------- +; This routine shows the MANIC and MINER text on screen. +; the macro uiShowMMTextXY puts specific values appropriate for each right +; into the routine (such as the address of the character width array) +; The Manic & Miner words are stored in a "compressed" form, this also decodes +; that. Each letter "pixel" is stored as a bit. +.proc uiShowMMText + + row = srcPtrL + col = srcPtrH + offset = dstPtrL + index = dstPtrH + colMaskL = sizeL + colMaskR = sizeH + width = tmpBot + 0 + height = tmpBot + 1 + dataByte = tmpBot + 2 + dr = tmpBot + 3 + dc = tmpBot + 4 + dw = tmpBot + 5 + pr = tmpBot + 6 + + sty row + stx col + lda #0 + sta offset + sta index + +strLoop: + ldx index +colorLoc: + lda PLACEHOLDER, x ; unpack the color masks + tay + lda masksLeft, y + sta colMaskL + lda masksRight, y + sta colMaskR + lda #6 ; the text is 6 rows high + sta height + lda row + sta dr ; set the working counter to the row + +charLoop: + lda col + sta dc ; set the working counter to the column + ldx index ; get the index to the character in the string +widthLoc: + lda PLACEHOLDER, x ; get the width of the character + sta width ; save + sta dw ; and init the working width + ldx offset ; the offset is into the encoded data +dataLoc: + lda PLACEHOLDER, x ; get the next encoded character + inc offset ; and move the index + sta dataByte ; save the character +colLoop: + lda dataByte ; load the character + asl ; shift out the MSB to get the bit + sta dataByte ; save the new shifted encoded character + bcc skipPlot ; if bit was 0, blank, nothing to do + lda #8 ; 1-bit to be drawn. "pixel" is 8 pixel-rows high + sta pr ; save row draw counter + lda dr ; load the screen draw row where drawing should happen + asl ; * 8 + asl + asl + tay ; store the row in Y + lda dc ; get the column + and #1 ; and see if the column is odd or even (for color mask) + tax +: + lda dc ; start with the column + adc rowL, y ; and calculate the hi-res row/col address + sta write + 1 + lda rowH, y + adc currPageH ; add the page to draw to + sta write + 2 + lda #$ff ; assume all bits on + and colMaskL, x ; but then mask to get appropriate color +write: + sta PLACEHOLDER ; write to the screen + iny ; next hi-res pixel-row + dec pr ; and one less row to draw + bne :- ; do all 8 rows + +skipPlot: + inc dc ; go to the next column + dec dw ; one less to do in the width of the character + bpl colLoop ; if not done the whole character, keep going + inc dr ; move down to the next row of the character + dec height ; one less row to do + bpl charLoop ; keep going till the whole character height done + lda width ; move the draw col by the width of the character just drawn + clc + adc col + sta col + inc index ; and move the string index to the next character + lda index + cmp #6 + bcc strLoop ; if not all 5 characters (MANIC or MINER) done, keep going + + rts + +.endproc + +;----------------------------------------------------------------------------- +; Prep uiShowMMText internal variables with data relevant for the +; specific text the macro is called with +.macro uiShowMMTextXY column, row, data, widths, colors + + lda #data + sta uiShowMMText::dataLoc + 2 + lda #widths + sta uiShowMMText::widthLoc + 2 + lda #colors + sta uiShowMMText::colorLoc + 2 + ldx column ; screen location passed in x/y + ldy row + jsr uiShowMMText ; show the word on-screen + +.endmacro + +;----------------------------------------------------------------------------- +.proc uiTitleScreen + + scrollPtrL = 0 ;tmpBot + 0 + scrollPtrH = 1 ;tmpBot + 1 + scrollLen = 2 ;tmpBot + 2 + scrollIdx = 3 ;tmpBot + 3 + titleState = 4 ;currLevel + + + lda #0 + sta leftEdge ; reset the left edge + + lda #11*8 ; position willy for the UI + sta willyYPos + lda #0 + sta willyFrame + lda #18 + sta willyXPos + + lda #titleMusic + sta musicH + + ldx #1 ; do a full screen clear of both buffers + jsr screenClear + jsr screenSwap + ldx #1 + jsr screenClear + + lda #0 + sta titleState ; set to bounce manic miner / audio + sta uiComponent ; and init the ui update to nothing + lda #UI_COMPONENT_SCORE_NAME | UI_COMPONENT_SCORE | UI_COMPONENT_HIGHSCORE + jsr uiUpdateComponent ; add an update for bottom part of screen + + jsr screenDrawWilly ; show willy on this screen + uiShowMMTextXY #6, #6, manicText, manicCharWidth, manicColors + printXY #0, #22*8, roTextAppleIIVersion, #19 + printXY #0, #23*8, roTextStefan, #19 + jsr uiUpdate ; show the UI on the Manic screen + jsr screenSwap + + jsr screenDrawWilly ; show willy on the other screen + uiShowMMTextXY #6, #6, minerText, minerCharWidth, minerColors + printXY #0, #22*8, roTextAppleIIVersion, #19 + printXY #0, #23*8, roTextStefan, #19 + jsr uiUpdate ; show the UI on the Miner screen + + lda KBDSTRB + +mainLoop: + jsr screenSwap ; swap screens (manic/miner) or scroll text + jsr inputUI ; read keys -1 - quit, 0 - no key, 1 - go to game + beq stayInUI ; no key + bpl playGame ; go to game + lda #EVENT_EXIT_GAME ; quit + bne exit +playGame: + lda #EVENT_OK +exit: + jmp done + +stayInUI: + lda titleState ; get the state (bounce vs scroll) + beq bounce + jmp introScroll ; 0 - bounce, 1 - scroll + +bounce: + jsr audioPlayTitleNote ; play the tune + bcc mainLoop ; tune done when carry is set, else bounce + + lda #2 + sta titleState ; use this as a temporary counter +: + ldx #0 ; clear the upper portion of the screen + jsr screenClear ; show both manic & miner + uiShowMMTextXY #6, #0, manicText, manicCharWidth, manicColors + uiShowMMTextXY #6, #8, minerText, minerCharWidth, minerColors + jsr screenDrawWilly ; show willy as well + + jsr screenSwap + dec titleState ; do for both buffers + lda titleState + bne :- + + lda #1 ; set the state to the scrolling screen + sta titleState + + lda #roTextIntro + sta scrollPtrH + lda #0 + sta scrollLen + lda #19 + sta scrollIdx + +introScroll: ; show the scrolling message + ldy willyYPos ; start by erasing willy so the eor draw works + lda #16 ; 16 rows from his Y + sta sizeL ; track rows in sizeL +: + clc + lda willyXPos ; start with his X + asl ; * 2 for screen coordinates + adc rowL, y ; get the hires coordinates + sta writeZero + 1 + lda rowH, y + adc currPageH + sta writeZero + 2 + lda #0 ; write 4 zero-bytes to each row + ldx #3 +writeZero: + sta PLACEHOLDER, x + dex + bpl writeZero + iny ; next hi-res row + dec sizeL ; one more row done + bne :- + + lda willyFrame ; get the current frame + clc + adc #2 ; advance by 2 + and #7 ; and keep in the frame range + sta willyFrame ; update the frame + jsr screenDrawWilly ; and draw willy in the new pose + + printXYlh scrollIdx, #16*8, scrollPtrL, scrollPtrH, scrollLen + lda scrollIdx ; see if scrolled all the way into the screen + beq :+ ; if printing at 0, then scrolled all the way in + dec scrollIdx ; not scrolled in all the way, so move the start left + inc scrollLen ; and increase the length to print by 1 + bne :++ ; and skip moving the start of the message +: + inc scrollPtrL ; move the scroller so the left disappears off + bne :+ ; the left end of the screen + inc scrollPtrH +: + jsr uiDelay ; wait a bit so the message can be read + + ldy scrollLen ; see if this is the end of the message + lda (scrollPtrL), y + bne :+ ; if not a zero, still in message + dec scrollLen ; start printing less of the message so the tail scrolls across + bmi demoTime ; when completely done, go to demo mode +: + jmp mainLoop ; repeat till fully scrolled + +demoTime: + lda #DEMO_TIMER_INITAL ; set up the demo variables + sta demoTimer + lda #1 + sta demoDirection + +done: + sta demoMode + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc uiWaitForIntroEnter + + iter = tmpBot + 0 ; how many times to loop + color = tmpBot + 1 ; the starting color for the string + xPos = tmpBot + 2 ; x for string + yPos = tmpBot + 3 ; y for string + textL = tmpBot + 4 ; string pointer + textH = tmpBot + 5 + len = tmpBot + 6 ; how many characters (0 based) + + lda KBDSTRB ; clear the keyboard + + jsr screenSwap::valueSwap + printXY #0, #22*8, roTextPressEnter, #19 + lda #$28 ; intentionally outside the range + sta color ; it gives an interesting "materialize" effect + lda #22*8 + sta yPos + +cycleLoop: + lda #6 ; print ENTER at x 4 + sta xPos + lda #roTextEnter + sta textH + lda #5 + sta len + jsr textColorCycle ; show the text in color + ldy #$40 + jsr uiDelay::ySet + + lda KBD ; hold the load screen graphic till a key is pressed + bpl cycleLoop + + lda KBDSTRB ; clear the keyboard + jsr screenSwap::valueSwap + + ldx #1 ; for clear-screen, x = 1 is all clear, x = 0 is partial + jsr screenClear + jsr screenSwap ; swap to see page 1 + ldx #1 + jmp screenClear ; all clear page 2 + +.endproc diff --git a/src/apple2/variables.inc b/src/apple2/variables.inc new file mode 100644 index 0000000..b8e9387 --- /dev/null +++ b/src/apple2/variables.inc @@ -0,0 +1,117 @@ +;----------------------------------------------------------------------------- +; variables.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "ZEROPAGE" + +;----------------------------------------------------------------------------- +currPageH: .res 1 ; $02 or $04 - Hi for screen buffer to draw t0 +backPage: .res 1 ; 0 or 1 - just used to toggle HISCR or LOSCR +monochrome: .res 1 ; 0 for color, 1 for black and white +leftEdge: .res 1 ; distance the screen has scrolled to the right +cameraMode: .res 1 +tilesRendered: .res 1 ; count the number of tiles shown in a screen. Used to time music delay + +willyXPos: .res 1 ; column for willy +willyYPos: .res 1 ; pixel-row for willy +willyYRow: .res 1 ; row (YPos / 8) for willy +willyFrame: .res 1 ; willy animation frame +willyDir: .res 1 ; direction willy is facing +willyJumpCounter: .res 1 ; what phase of a jump willy is in +willyFallFromJump: .res 1 ; 0 or 1. 1 when willy starts jumping. Affects falling death + +numSprites: .res 1 ; how many sprites (excl. willy) to draw in a level (door is last) +spriteXPos: .res MAX_SPRITES ; col position of the sprite +spriteYPos: .res MAX_SPRITES ; pixel row +spriteDir: .res MAX_SPRITES ; facing direction +spriteMin: .res MAX_SPRITES ; min (turn/hold) point for path +spriteMax: .res MAX_SPRITES ; max point for path +spriteSpeed: .res MAX_SPRITES ; speed (frames/pixels) to move the sprite +spriteTick: .res MAX_SPRITES ; counter how often a sprite animates (spritespeed as init) +spriteFramesIdx: .res MAX_SPRITES ; Index into +spriteFrame: .res MAX_SPRITES ; which frame the sprite is on +spriteClass: .res MAX_SPRITES ; see CLASS_* in defs.inc for masks +spriteColor: .res MAX_SPRITES ; index into masks in rosystem.inc + +movementMask: .res 1 ; movement that happened in willyMove. See MASK_* in defs.inc +userKeyMask: .res 1 ; user desire to move based on keys pressed. See MASK_* in defs.inc +conveyorMask: .res 1 ; 0, willy not on conveyor, 2 for left, 1 for right + +currLevel: .res 1 ; level that's active +lives: .res 1 ; lives in reserve +airCols: .res 1 ; screen columns that have an air bar in them +airTipGfx: .res 1 ; the bit pattern for the tip of the air bar +airFlow: .res 1 ; the "tick" till a unit of air is decreased +livesFrame: .res 1 ; anim frame for the walking willy's at the bottom +keysFrameNum: .res 1 ; animation frame for keys in the level (color) +conveyorFrameNum: .res 1 ; animation frame for conveyor tile to be active +keysToCollect: .res 1 ; number of keys that remain to be collected + +eventState: .res 1 ; see EVENT_* in defs.inc for bitmask values +updateUICount: .res 1 ; updateUI is called when non-zero +uiComponent: .res 1 ; See UI_COMPONENT_* in defs.inc for mask values. What UI to update +fullScreenClearCount: .res 1 ; 0 - clear only top, non-zero all. Is counted down by gameAI + +musicL: .res 1 ; pointer or index for playing music +musicH: .res 1 ; hi pointer for playing UI music +audioMask: .res 1 ; see AUDIO_* in defs.inc + +demoMode: .res 1 ; 0 - not a demo, 1 when demo mode active +demoTimer: .res 1 ; in demo mode, scroll when counter is 0 +demoDirection: .res 1 ; direction the demo scroll will move the screen + +cheatIndex: .res 1 ; count cheat code entry or when active, if 6 is down +cheatActive: .res 1 ; non-zero when the cheat was successfully entered + +;----------------------------------------------------------------------------- +tempBlock: .res 13 ; widely used z-page general memory +srcPtrL := tempBlock + 0 ; often a pointer Lo +srcPtrH := tempBlock + 1 ; often a pointer Hi +dstPtrL := tempBlock + 2 ; often a pointer Lo +dstPtrH := tempBlock + 3 ; often a pointer Hi +sizeL := tempBlock + 4 ; sometimes a size used in ptr operations +sizeH := tempBlock + 5 ; sometimes a size used in ptr operations +tmpBot := tempBlock + 6 ; start of block of 6 zp values used randomly + +;----------------------------------------------------------------------------- +bitMasks: ; constant - used mostly for bit instruction +bit0Mask: .res 1 ; 1 +bit1Mask: .res 1 ; 2 +bit2Mask: .res 1 ; 4 +bit3Mask: .res 1 ; 8 +bit4Mask: .res 1 ; 16 +bit5Mask: .res 1 ; 32 +bit6Mask: .res 1 ; 64 +bit7Mask: .res 1 ; 128 + +;----------------------------------------------------------------------------- +.segment "LOWMEM" + +; These are instance buffers for sprites / tiles. They are copied into this +; area and then masked for color from where they are rendered +levelLayout: .res PLAY_COLS * PLAY_ROWS ; Unpacked level (tile) info - keep 1st for alignment + +; Instances for display +spriteInstances: .res MAX_SPRITE_IFRAMES * SPRITE_BYTES +tilesInstances: .res TILES_PER_LEVEL * TILE_BYTES ; instances of tiles in use bitmaps +keyAnimTiles: .res KEYS_FRAMES * TILE_BYTES ; color instances of key tile +conveyorAnimTiles: .res CONVEYOR_FRAMES * TILE_BYTES ; instances of conveyor animated tiles + +; cache of 8 pixel-rows for 32 double-byte characters. The level name is centered in here, and drawn from here +levelNameGfx0: .res PLAY_COLS * 2 * 8 + +;----------------------------------------------------------------------------- +.segment "DATA" + +; The scores are updated in these text strings directly +highScore: +.byte "000000" +score: +.byte "000000" + +;----------------------------------------------------------------------------- +.segment "HIMEM" \ No newline at end of file diff --git a/src/apple2/willy.inc b/src/apple2/willy.inc new file mode 100644 index 0000000..90cf80d --- /dev/null +++ b/src/apple2/willy.inc @@ -0,0 +1,541 @@ +;----------------------------------------------------------------------------- +; willy.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +.segment "CODE" + +;----------------------------------------------------------------------------- +; Moves willy. Incorporates user desire (userKeyMask) and conveyor direction +; in movement and does movement and collision resolution. This code was juggled a +; whole lot to make the outcome match that of the original game. It's quite +; possibly sub-optimal, but it does what it is meant to do. +.proc willyMove + + willyYPosBackup = tmpBot + 1 + willyXPosBackup = tmpBot + 2 + willyFrameBackup = tmpBot + 3 + willyFloor = tmpBot + 4 + + lda movementMask + bit bit2Mask ; MASK_AIR + beq checkHorzKeys ; on ground - check horizontal keys + jmp selectDirection ; in air - check horizontal motion + +checkHorzKeys: + lda userKeyMask ; get the user Key + ldx conveyorMask ; and get the conveyor direction + beq notOnConveyor ; ignore conveyor code if not on a conveyor + + and conveyorMask ; and user desire with conveyor + bne onConveyor ; if same, user conveyor direction for actual + lda userKeyMask ; get the user mask and + and #<~MASK_AIR ; if it's got no horizontal component + beq onConveyor ; willy is following the conveyor + + lda movementMask ; user key horiz and not same as conveyor + jmp selectDirection ; so simply keep the current movement going + +onConveyor: + lda movementMask ; actual is now conveyor direction + and #<~(MASK_LEFT | MASK_RIGHT) ; clear current + ora conveyorMask ; add conveyor direction + sta movementMask ; store as actual + jmp selectDirection ; use the conveyor for sideways + +notOnConveyor: + and #<~MASK_AIR ; clear the jump desire + sta movementMask ; make actual user desire + +selectDirection: + and #(MASK_LEFT | MASK_RIGHT) ; see if willy is moving horizontally + bne :+ ; yes - handle horizontal movement + jmp vertical +: + and #MASK_RIGHT ; check MASK_RIGHT + bne right ; if set, move to the right + +left: + lda willyDir ; see if already heading left + bne moveLeft ; if so, keep moving left + lda #0 ; when turning, no direction + sta movementMask + lda #1 ; was facing right, so turn around + sta willyDir + lda willyFrame ; flip the facing frame to left + ora #4 + sta willyFrame + bne vertical + +moveLeft: + ldx willyFrame ; get the frame + stx willyFrameBackup ; back it up + dex ; move one left + cpx #4 ; wrapped? + bcc :+ ; yes, move to previous column + stx willyFrame ; not wrapped, save the frame + bcc :+ + jmp vertical +: + ldx #7 ; keep going, load right most frame + stx willyFrame ; set frame + ldx willyXPos ; get the column + stx willyXPosBackup ; save it + dex ; previous column + stx willyXPos ; make that current + ldy #0 ; check side (left) collisions column + beq hCollision ; BRA + +right: + lda willyDir ; see if willy's already facing right + beq moveRight ; if so, move + lda #0 ; turn willy to the right + sta willyDir + sta movementMask ; and clear the movement mask + lda willyFrame + and #3 ; set right facing frame + sta willyFrame + jmp vertical + +moveRight: + ldx willyFrame ; back up the animation frame + stx willyFrameBackup + inx ; next frame (to the right) + cpx #4 ; wrapped? + bcs :+ ; yes, move to next (right) column + stx willyFrame ; save the frame + bcc vertical +: + ldx #0 + stx willyFrame ; set frame 0 + ldx willyXPos ; back up the column + stx willyXPosBackup + inx ; move right + stx willyXPos ; save this column + ldy #1 ; check the right-hand column for collisions + +hCollision: + jsr willySetWorldPtr ; set up the world pointer to check collisions + ldx #2 ; assume checking 2 rows + lda willyYPos ; get the height in pixels + and #7 ; see if willy is aligned + beq colLoop ; yes, go with 2 rows + inx ; if not aligned, willy crosses 3 rows +colLoop: + lda (srcPtrL), y ; load the world byte + beq :+ ; if air then no collision + jsr willyWorldCollision ; resolve the collision if needed + bcc :+ ; if carry clear, can move (didn't hit a wall) + lda willyXPosBackup ; hit a wall, so restore position (column) + sta willyXPos + lda willyFrameBackup ; and also restore the frame + sta willyFrame + jmp vertical +: + tya ; Y is 0 or 1 (left or right), put in a + adc #32 ; move down a row + tay ; and put back in y + dex ; x has the number of rows remaining to check + bne colLoop ; do till all rows checked + +vertical: + lda movementMask + bit bit2Mask ; MASK_AIR + bne vertMove ; in the air already then move vertically + + lda userKeyMask ; get the user desire + bit bit2Mask ; MASK_AIR see if user wants to jump + beq willyCollisionFeet ; if not then check feet + + and #<~MASK_AIR ; clear jump from desire + sta userKeyMask ; and save + + lda movementMask ; update actual + ora #MASK_AIR ; by adding a jump + sta movementMask + + lda #1 ; mark this as a fall starting + sta willyFallFromJump ; from a jump - willy dies easier + +vertMove: + lda willyYPos ; save the current Y position + sta willyYPosBackup + + lda willyJumpCounter ; get the current jump counter for height calculation + cmp #18 ; see sbc #4 below for why 18 (up/down curve length) + bcs falling ; if jump counter gt 17 then falling (0-17 is jump) + + lsr ; / 2 + sec + sbc #4 ; -4, so -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 + clc + adc willyYPos ; adjust willy height + sta willyYPos + + ldx willyJumpCounter ; get the current jump counter for height calculation + lda jumpFreq, x + ldy #$08 ; duration for the freq + jsr audioPlayNote::freq ; make a sound of this freq and duration + inc willyJumpCounter + + lda willyJumpCounter + cmp #9 + bcs willyCollisionFeet ; and move the jump counter along + +willyCollisionTop: + lda willyYPosBackup ; see where willy was + and #7 ; if aligned with a row, now entering a new row so check collision + bne willyCollisionFeet ; not aligned, no collision, go to feet check + jsr willySetWorldPtr ; set the srcPtr to point into the world + ldy #0 ; start with the head left + lda (srcPtrL), y ; read the world byte + beq :+ ; if air then do nothing + jsr willyWorldCollision ; not air so handle the potential collision + bcs hitHead ; carry set means wall collision, so fall +: + ldy #1 ; check the right as well + lda (srcPtrL), y + beq willyCollisionFeet ; if air, ignore + jsr willyWorldCollision + bcc willyCollisionFeet ; carry clear means no collision + +hitHead: + lda willyYPosBackup + sta willyYPos + lda #18 + sta willyJumpCounter + jmp willyCollisionFeet ; and check for landing immediately + +falling: + lda willyJumpCounter ; get the current jump counter for height calculation + and #$0f + tax + lda fallFreq, x + ldy #$08 ; duration for the freq + jsr audioPlayNote::freq ; make a sound of this freq and duration + inc willyJumpCounter ; and move the jump counter along + + lda movementMask ; strip horizontal from actual + and #<~(MASK_LEFT | MASK_RIGHT) + sta movementMask + lda willyYPos ; get willy's height + clc + adc #4 ; move him 4 down (fall speed) + sta willyYPos + +willyCollisionFeet: + lda #0 ; assume not on a conveyor + sta conveyorMask + + lda willyYPos ; see if willy is level with a floor + and #7 + bne positionScreen ; if not, don't check the feet + + lda willyJumpCounter ; see if still going up in jump + beq :+ ; if 0 then not jumping + cmp #10 ; if still going up in the jump, don't check the feet + bcc positionScreen + +: + jsr willySetWorldPtr ; set up the world pointer + ldy #64 ; check the ground below willy, left + lda (srcPtrL), y + sta willyFloor ; store the byte + beq :+ ; if air, don't resolve + jsr willyFloorCollision ; resolve the collision +: + ldy #65 ; check the floor right + lda (srcPtrL), y + beq checkFloor ; if air, done with feet + tax ; save the byte + ora willyFloor ; and update the floor + sta willyFloor + txa ; restore the world byte + jsr willyFloorCollision ; and resolve it + +checkFloor: + lda willyFloor ; was there something under willy's feet + bne positionScreen ; if yes, then position willy + + lda willyJumpCounter ; see if willy is in a jump or fall + bne positionScreen ; yes, position screen + + lda #18 ; willy was walking, so set him to fall + sta willyJumpCounter + lda movementMask ; strip horizontal from actual + and #<~(MASK_LEFT | MASK_RIGHT) ; clear left and right + ora #MASK_AIR ; set the mask that he's now in the air (fall) + sta movementMask + + +positionScreen: ; this is also called from gameInitStage + lda cameraMode ; see which "camera mode" is active + bne cameraScroll ; non zero is scroll mode + +camera3Zone: ; zone 1: 0-19, 2: 6-25, 3: 12-31 + lda willyXPos ; see where Willy is + cmp #10 ; 10 divides zones 1 and 2 + bcs zone2or3 ; ge 10 means zone 2 or 3 + lda leftEdge ; zone 1 - see where the edge is + cmp #0 ; if it's at 0 all is well + beq done +cameraLess: + dec leftEdge ; edge is gt 0, so move it left + bpl moveName ; BRA +zone2or3: + cmp #20 ; 20 divides zones 2 and 3 + bcs cameraRight ; ge 20 means zone 3 + lda leftEdge ; see where the edge is (in zone 2) + cmp #6 ; zone 2 edge wants to be at 6 + beq done ; if it's there, all is well + bcs cameraLess ; if it's gt 6, then move it left + inc leftEdge ; move the edge right + bne moveName ; BRA +cameraRight: + lda leftEdge ; zone 3, see where the edge is + cmp #$0c ; if it's at 12 + beq done ; then it's all good + inc leftEdge ; otherwise move it right towards 12 + +moveName: ; if the edge moves the text needs to move as well + lda #UI_COMPONENT_NAME ; and mark the name as needing to scroll too + jsr uiUpdateComponent + + rts + +cameraScroll: + lda willyXPos + sec ; col is in accumulator + sbc #$0a ; see if willy is past column 10 + bcs :+ + lda #0 ; not, so set the left edge to the left + bne :++ ; BRA +: + cmp #$0d ; see if the col is less than 13 + bcc :+ + lda #$0c ; col is 13 or greater, so clamp to 12 +: + cmp leftEdge ; see if the edge needs to move + beq :+ ; don't move + sta leftEdge ; set the new left edge + lda #UI_COMPONENT_NAME ; and mark the name as needing to scroll too + jsr uiUpdateComponent +done: + rts ; done with willy's movement + +.endproc + +;----------------------------------------------------------------------------- +; resolves collisions for willy. Used by feet but foot collision entry is +; from willyFloorCollision. on exit, carry set means wall collision +.proc willyWorldCollision + + clc + cmp #DATA_BUSH ; bushes kill willy + beq willyDies + cmp #DATA_ROCK ; rocks kill willy + bne :+ + +willyDies: + lda #EVENT_DIED ; simply set the die event + ora eventState + sta eventState + rts + +: + cmp #DATA_WALL ; walls block willy + bne :+ + rts ; carry was set by the cmp and equality. set means wall collision + +: + cmp #DATA_KEY ; key's need to be counted + bne :+ + jmp willyHitKey ; clears carry + +: + cmp #DATA_DOOR ; added dynamically when last key found + bne :+ + lda #EVENT_NEXT_LEVEL ; set event to move to next cavern/level + ora eventState + sta eventState + rts + +: + cmp #DATA_SWITCH1 ; added at level init for kong screens + bne :+ + jmp willyHitSwitch1 + +: + cmp #DATA_SWITCH2 ; added at level init for kong screens + bne done + jmp willyHitSwitch2 + +done: + clc ; for unhandled (floor tiles), just clear carry + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc willyFloorCollision + + cmp #DATA_FLOOR1 ; floors are landed on + beq landed + + cmp #DATA_WALL ; walls can be walked on + beq landed + + cmp #DATA_FLOOR2 ; special can be walked on + bne :+ + +landed: + lda movementMask ; see landing from a jump/fall + and #MASK_AIR + beq notFromAir ; just a foot-fall from walking, no action + clc + lda willyFallFromJump ; see if a jump + adc willyJumpCounter ; and how far + cmp #18+9 ; compare to death height + bcc fellNotTooFar ; not too far + jmp willyWorldCollision::willyDies ; fell to far, kill willy +fellNotTooFar: + lda #0 ; reset the fall from jump + sta willyFallFromJump + sta willyJumpCounter ; and reset the willy jump counter + lda #<~MASK_AIR ; clear the air bit + and movementMask + sta movementMask +notFromAir: + rts + +: + cmp #DATA_CONVEYOR ; landed on a conveyor + bne :+ + ldx currLevel ; get the level + lda conveyorDirections, x ; get the direction of the conveyor + sta conveyorMask ; set it as the conveyor mask (which is reset each frame) + bne landed ; and do landing code + +: + cmp #DATA_COLLAPSE ; check for collapsing tiles + bcc willyWorldCollision ; less than, not collapsing + cmp #DATA_COLLAPSE + 9 ; in the collapse range + bcs willyWorldCollision ; no, check non-walk/floor tiles + jsr willyCollapse ; collapse a platform tile, returns with carry clear + bcc landed ; BRA to land code + +.endproc + +;----------------------------------------------------------------------------- +.proc willyHitSwitch1 + + clc + adc #1 ; DATA_SWITCH1 becomes DATA_SWITCH1_OPEN + sta (srcPtrL), y ; make this switch draw open + + lda #0 + sta levelLayout+11*32+17 ; make a hole in the wall + sta levelLayout+12*32+17 + + ldx #1 ; sprite 1 barrel needs to go further + lda #19 ; this is the new max for return-kong +extend: + sta spriteMax, x ; make the new max active + clc ; must leave with carry clear - not a wall collision + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc willyHitSwitch2 + + clc + adc #1 ; DATA_SWITCH2 becomes DATA_SWITCH2_OPEN + sta (srcPtrL), y ; make this switch draw open + + lda #0 + sta levelLayout+2*32+15 ; remove kong's platform + sta levelLayout+2*32+16 + + ldx #3 ; kong is at index 3 + lda #14*8-5 ; put the fallen-down destination for kong in place + sta spriteMax, x + + lda #2 ; turn kong upside down + sta spriteFrame, x + + lda #0 ; set kong's direction to down + sta spriteDir, x + + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc willyCollapse + + clc + adc #1 ; move the tile-top one down + cmp #DATA_COLLAPSE + 7 ; is it all the way down + bcc :+ ; not yet + lda #0 ; yes, so erase the tile + clc +: + sta (srcPtrL), y ; make the change in the level + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc willyHitKey + + tempX = tmpBot + 5 + + stx tempX ; save x - it may be an index in left/right col + lda #0 ; erase the key tile in the level + sta (srcPtrL), y + ldx #3 ; add 100 (digit 3 of 6, zero based 000100) + lda #1 + jsr textAddScore + dec keysToCollect ; 1 less key to collect + bne done ; all keys collected? + + ldx currLevel ; get the level + lda doorL, x ; get the door location in the level (lo) + sta putDoor + 1 + lda doorH, x ; and hi + sta putDoor + 2 + lda #DATA_DOOR ; get the door tile +putDoor: + sta PLACEHOLDER ; and add the door tile to the level + + done: + ldx tempX ; restore the saved x + clc ; make sure carry is clear + rts + +.endproc + +;----------------------------------------------------------------------------- +.proc willySetWorldPtr + + lda willyYPos ; get the height + lsr ; divide by 8 + lsr + lsr + sta willyYRow ; save the row willy's in + tax ; put the row in Y + clc + lda mult32L, x ; row * 32 + adc willyXPos ; and add the X position (levelLayout is aligned so no need to add lo) + sta srcPtrL ; the low byte of the pos in the level + lda mult32H, x ; get the high byte + adc #>levelLayout ; and offset into the level + sta srcPtrH ; and now srcPtr points at willy in the level + + rts + +.endproc