Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- LIST OFF
- ; *** E . T. T H E E X T R A - T E R R E S T R I A L ***
- ; Copyright 1982 Atari, Inc.
- ; Designer: Howard Scott Warshaw
- ; Artist: Jerome Domurat
- ; Analyzed, labeled and commented
- ; by Dennis Debro
- ; Last Update: July 18, 2006
- ;
- ; *** 116 BYTES OF RAM USED 12 BYTES FREE
- ;
- ; NTSC ROM usage stats
- ; -------------------------------------------
- ; *** 25 BYTES OF ROM FREE IN BANK0
- ; *** 24 BYTES OF ROM FREE IN BANK1
- ; ===========================================
- ; *** 49 TOTAL BYTES FREE
- ;
- ; PAL ROM usage stats
- ; -------------------------------------------
- ; *** 23 BYTES OF ROM FREE IN BANK0
- ; *** 24 BYTES OF ROM FREE IN BANK1
- ; ===========================================
- ; *** 47 TOTAL BYTES FREE
- ; This is Howard Scott Warshaw's third game with Atari. It was conceived and
- ; developed in roughly 5 weeks! The licensing deal didn't complete until the
- ; end of July (in an interview Howard says July 25). Atari wanted this game
- ; for the Christmas season which meant Howard had to finish this game by
- ; September 1st!
- ;
- ; - Pits are arranged in the order of...
- ; 1) ID_FOUR_DIAMOND_PITS
- ; 2) ID_EIGHT_PITS
- ; 3) ID_ARROW_PITS
- ; 4) ID_WIDE_DIAMOND_PITS
- ; - Objects are never placed in the overlapping pits for ID_EIGHT_PITS
- ; - Playfield is a 2LK while sprites are a 1LK
- ; - PAL conversion adjusts E.T. movement and colors
- ; - It seems RAM location $8B is not used
- processor 6502
- ;
- ; NOTE: You must compile this with vcs.h version 105 or greater.
- ;
- TIA_BASE_READ_ADDRESS = $30 ; set the read address base so this runs on
- ; the real VCS and compiles to the exact
- ; ROM image
- include macro.h
- include vcs.h
- LIST ON
- ;============================================================================
- ; A S S E M B L E R - S W I T C H E S
- ;============================================================================
- NTSC = 0
- PAL = 1
- COMPILE_VERSION = NTSC ; change this to compile for different
- ; regions
- ;============================================================================
- ; T I A - M U S I C C O N S T A N T S
- ;============================================================================
- SOUND_CHANNEL_SAW = 1 ; sounds similar to a saw waveform
- SOUND_CHANNEL_ENGINE = 3 ; many games use this for an engine sound
- SOUND_CHANNEL_SQUARE = 4 ; a high pitched square waveform
- SOUND_CHANNEL_BASS = 6 ; fat bass sound
- SOUND_CHANNEL_PITFALL = 7 ; log sound in pitfall, low and buzzy
- SOUND_CHANNEL_NOISE = 8 ; white noise
- SOUND_CHANNEL_LEAD = 12 ; lower pitch square wave sound
- SOUND_CHANNEL_BUZZ = 15 ; atonal buzz, good for percussion
- LEAD_F4_SHARP = 13
- LEAD_E4 = 15
- LEAD_D4_SHARP = 16
- LEAD_D4 = 17
- LEAD_C4_SHARP = 18
- LEAD_H3 = 20
- LEAD_A3 = 23
- LEAD_G3_SHARP = 24
- LEAD_F3_SHARP = 27
- LEAD_E3_2 = 31
- ;============================================================================
- ; T I A - C O N S T A N T S
- ;============================================================================
- HMOVE_L7 = $70
- HMOVE_L6 = $60
- HMOVE_L5 = $50
- HMOVE_L4 = $40
- HMOVE_L3 = $30
- HMOVE_L2 = $20
- HMOVE_L1 = $10
- HMOVE_0 = $00
- HMOVE_R1 = $F0
- HMOVE_R2 = $E0
- HMOVE_R3 = $D0
- HMOVE_R4 = $C0
- HMOVE_R5 = $B0
- HMOVE_R6 = $A0
- HMOVE_R7 = $90
- HMOVE_R8 = $80
- ; values for ENAMx and ENABL
- DISABLE_BM = %00
- ENABLE_BM = %10
- ; values for RESMPx
- LOCK_MISSILE = %10
- UNLOCK_MISSILE = %00
- ; values for REFPx:
- NO_REFLECT = %0000
- REFLECT = %1000
- ; values for NUSIZx:
- ONE_COPY = %000
- TWO_COPIES = %001
- TWO_MED_COPIES = %010
- THREE_COPIES = %011
- TWO_WIDE_COPIES = %100
- DOUBLE_SIZE = %101
- THREE_MED_COPIES = %110
- QUAD_SIZE = %111
- MSBL_SIZE1 = %000000
- MSBL_SIZE2 = %010000
- MSBL_SIZE4 = %100000
- MSBL_SIZE8 = %110000
- ; values for CTRLPF:
- PF_PRIORITY = %100
- PF_SCORE = %10
- PF_REFLECT = %01
- PF_NO_REFLECT = %00
- ; values for SWCHB
- P1_DIFF_MASK = %10000000
- P0_DIFF_MASK = %01000000
- BW_MASK = %00001000
- SELECT_MASK = %00000010
- RESET_MASK = %00000001
- VERTICAL_DELAY = 1
- ; SWCHA joystick bits:
- MOVE_RIGHT = %01111111
- MOVE_LEFT = %10111111
- MOVE_DOWN = %11011111
- MOVE_UP = %11101111
- P0_NO_MOVE = %11110000
- P1_NO_MOVE = %00001111
- NO_MOVE = P0_NO_MOVE | P1_NO_MOVE
- ; values for VBLANK:
- DUMP_PORTS = %10000000
- ENABLE_LATCHES = %01000000
- DISABLE_TIA = %00000010
- ENABLE_TIA = %00000000
- ;values for VSYNC:
- START_VERT_SYNC = %10
- STOP_VERT_SYNC = %00
- ;============================================================================
- ; U S E R - C O N S T A N T S
- ;============================================================================
- BANK0TOP = $1000
- BANK1TOP = $2000
- BANK0_REORG = $B000
- BANK1_REORG = $F000
- BANK0STROBE = $FFF8
- BANK1STROBE = $FFF9
- NTSC_OVERSCAN_TIME = 45
- NTSC_VBLANK_TIME = 47
- PAL_VBLANK_TIME = 78
- PAL_OVERSCAN_TIME = 72
- IF COMPILE_VERSION = NTSC
- VBLANK_TIME = NTSC_VBLANK_TIME
- OVERSCAN_TIME = NTSC_OVERSCAN_TIME
- ; NTSC color constants
- BLACK = $00
- WHITE = $0E
- LT_RED = $20
- RED = $30
- ORANGE = $40
- ORANGE_2 = ORANGE
- RED_2 = ORANGE
- DK_PINK = $50
- DK_BLUE = $70
- BLUE = $80
- LT_BLUE = $90
- GREEN = $C0
- GREEN_2 = GREEN
- DK_GREEN = $D0
- DK_GREEN_2 = DK_GREEN
- LT_BROWN = $E0
- LT_BROWN_2 = LT_BROWN
- BROWN = $F0
- NTSC_BROWN = BROWN
- START_LANDING_TIMER = 63 ; staring value for landing timer
- FRAME_DELAY_ONE_HALF = $81 ; move 1 out of 2 frames
- FRAME_DELAY_ONE_THIRD = $5D ; move 1 out of 3 frames
- FRAME_DELAY_ONE_FORTH = $3F ; move 1 out of 4 frames
- FRAME_DELAY_ONE_FIFTH = $3B ; move 1 out of 5 frames
- ELSE
- VBLANK_TIME = PAL_VBLANK_TIME
- OVERSCAN_TIME = PAL_OVERSCAN_TIME
- ; PAL color constants
- BLACK = $00
- WHITE = $0E
- LT_RED = $20
- LT_BROWN_2 = LT_RED
- BROWN = LT_RED
- GREEN_2 = $30
- RED = $40
- RED_2 = RED + 2
- ORANGE = RED
- LT_BROWN = $50
- DK_GREEN = LT_BROWN
- ORANGE_2 = $62
- DK_BLUE = $70
- DK_PINK = $80
- LT_BLUE = $90
- BLUE = $D0
- DK_GREEN_2 = BLUE
- GREEN = $E0
- NTSC_BROWN = $F0
- START_LANDING_TIMER = 57 ; staring value for landing timer
- FRAME_DELAY_ONE_HALF = $9A ; move 1 out of 2 frames
- FRAME_DELAY_ONE_THIRD = $6F ; move 1 out of 3 frames
- FRAME_DELAY_ONE_FORTH = $4B ; move 1 out of 4 frames
- FRAME_DELAY_ONE_FIFTH = $46 ; move 1 out of 5 frames
- ENDIF
- LDA_ABS = $AD ; instruction to LDA $XXXX
- JMP_ABS = $4C ; instruction for JMP $XXXX
- XMIN = 0
- XMAX = 119
- ET_YMIN = 0
- ET_YMAX = 58
- OBJECT_IN_PIT_Y = 50
- OBJECT_IN_PIT_X = 41
- PIT_XMIN = 32
- PIT_XMAX = 88
- FBI_AGENT_VERT_MAX = 48
- ELLIOTT_VERT_MAX = 52
- SCIENTIST_VERT_MAX = 48
- FBI_AGENT_VERT_TARGET = 15
- ELLIOTT_VERT_TARGET = 47
- SCIENTIST_VERT_TARGET = 15
- FBI_AGENT_HORIZ_TARGET = 28
- ELLIOTT_HORIZ_TARGET = 60
- SCIENTIST_HORIZ_TARGET = 94
- H_ET_GRAPH = 40 ; height of E.T. face for title screen
- H_FONT = 8
- H_FBIAGENT = 28
- H_ELLIOTT = 22
- H_SCIENTIST = 28
- H_PHONE_PIECES = 10
- H_FLOWER = 14
- H_MOTHERSHIP = 32
- H_YAR = 16
- H_INDY = 20
- MAX_GAME_SELECTION = 3
- MAX_ENERGY = $99 ; maximum energy value (BCD)
- MAX_HOLD_CANDY = 9 << 4
- INIT_NUM_TRIES = 3 ; initial number of tries to get E.T. home
- NUM_PHONE_PIECES = 3
- ; screen id values
- ID_FOUR_DIAMOND_PITS = 0
- ID_EIGHT_PITS = 1
- ID_ARROW_PITS = 2
- ID_WIDE_DIAMOND_PITS = 3
- ID_FOREST = 4
- ID_WASHINGTON_DC = 5
- ID_PIT = 6
- ID_ET_HOME = 7
- ID_TITLE_SCREEN = 8
- ; pit id values
- ID_PIT_OUT_OF_RANGE = -1
- ID_TOP_DIAMOND_PIT = 0
- ID_LEFT_DIAMOND_PIT = 1
- ID_RIGHT_DIAMOND_PIT = 2
- ID_LOWER_DIAMOND_PIT = 3
- ID_TOP_EIGHT_PITS = 4
- ID_LEFT_EIGHT_PITS = 5
- ID_RIGHT_EIGHT_PIT = 6
- ID_BOTTOM_EIGHT_PIT = 7
- ID_TOP_LEFT_ARROW_PIT = 8
- ID_TOP_RIGHT_ARROW_PIT = 9
- ID_LOWER_LEFT_ARROW_PIT = 10
- ID_LOWER_RIGHT_ARROW_PIT = 11
- ID_UPPER_LEFT_WIDE_PIT = 12
- ID_UPPER_RIGHT_WIDE_PIT = 13
- ID_LOWER_LEFT_WIDE_PIT = 14
- ID_LOWER_RIGHT_WIDE_PIT = 15
- ; object ids
- ID_FBIAGENT = 0
- ID_ELLIOTT = 1
- ID_SCIENTIST = 2
- ID_H_PHONE_PIECE = 3
- ID_S_PHONE_PIECE = 4
- ID_W_PHONE_PIECE = 5
- ID_FLOWER = 6
- ID_MOTHERSHIP = 7
- ID_YAR_0 = 8
- ID_YAR_1 = 9
- ID_INDY = 10
- ; power zone indicator ids
- ID_BLANK_ZONE = 0
- ID_WARP_LEFT_ZONE = 1
- ID_WARP_RIGHT_ZONE = 2
- ID_WARP_UP_ZONE = 3
- ID_WARP_DOWN_ZONE = 4
- ID_FIND_PHONE_ZONE = 5
- ID_EAT_CANDY_ZONE = 6
- ID_RETURN_HOME_ZONE = 7
- ID_CALL_ELLIOTT_ZONE = 8
- ID_CALL_SHIP_ZONE = 9
- ID_LANDING_ZONE = 10
- ID_PIT_ZONE = 11
- ID_FLOWER_ZONE = 12
- ; candy status values
- FOUR_DIAMOND_PITS_CANDY = %0001
- EIGHT_PITS_CANDY = %0010
- ARROW_PITS_CANDY = %0100
- WIDE_DIAMOND_PITS_CANDY = %1000
- SHOW_HSW_INITIALS_VALUE = $69 ; BCD value :-)
- ; player state values
- ET_DEAD = %10000000
- ELLIOTT_REVIVE_ET = %01000000
- ; E.T. home Elliott movement values
- MOVE_ELLIOTT_RIGHT = %10000000
- ; collected candy scoring values
- COLLECT_CANDY_SCORE_INC = %01000000
- CLOSED_EATING_CANDY_ICON = %00000001
- ; E.T. motion values
- ET_RUNNING = %10000000
- ET_CARRIED_BY_SCIENTIST = %01000000
- ET_MOTION_MASK = %00001111
- ; human attribute values
- RETURN_HOME = %10000000
- MOTION_MASK = %00001111
- ; fireResetStatus values
- FIRE_BUTTON_HELD = %10000000
- RESET_SWITCH_HELD = %01000000
- ; starting screen id values
- SET_STARTING_SCREEN = %10000000
- STARTING_SCREEN_ID = %00001111
- ; phone piece attribute values
- ET_HAS_PHONE_PIECE = %10000000
- PHONE_PIECE_SCREEN_LOC = %01000000
- FBI_HAS_PHONE_PIECE = %00100000
- ELLIOTT_HAS_PHONE_PIECE = %00010000
- PHONE_PIECE_PIT_NUMBER = %00001111
- ; neck extension values
- NECK_EXTENDED = %10000000
- NECK_DECENDING = %01000000
- ; flower state values
- FLOWER_REVIVED = %10000000
- FLOWER_REVIVE_ANIMATION = %00110000
- FLOWER_PIT_NUMBER = %00001111
- ; E.T. pit status values
- FALLING_IN_PIT = %10000000
- LEVITATING = %01000000
- IN_PIT_BOTTOM = %00100000
- ; mothership status values
- MOTHERSHIP_PRESENT = %10000000
- ET_GOING_HOME = %01000000
- MOTHERSHIP_LEAVING = %00000001
- ; Easter Egg sprite values
- SHOW_YAR_SPRITE = %10000000
- SHOW_INDY_SPRITE = %11000000
- ; sound data channel 0 values
- PLAY_SOUND_CHANNEL0 = %10000000
- ; Easter Egg status values
- DONE_EASTER_EGG_CHECK = %10000000
- DONE_EASTER_EGG_STEPS = %00000111
- ;============================================================================
- ; Z P - V A R I A B L E S
- ;============================================================================
- currentScreenId = $80
- frameCount = $81
- secondTimer = $82 ; updates ~every second
- temp = $83
- ;--------------------------------------
- tempNumberFonts = temp
- ;--------------------------------------
- powerZoneIndex = temp
- ;--------------------------------------
- loopCount = temp
- ;--------------------------------------
- tempJoystickValues = temp
- ;--------------------------------------
- humanETHorizDistRange = temp
- ;--------------------------------------
- pointsTensValue = temp
- ;--------------------------------------
- pointsHundredsValue = temp
- ;--------------------------------------
- energyIncTensValue = temp
- ;--------------------------------------
- energyIncHundredsValue = temp
- ;--------------------------------------
- humanDirectionIndex = temp
- ;--------------------------------------
- newHumanDirection = temp
- ;--------------------------------------
- totalCandyCollected = temp
- ;--------------------------------------
- tempPitNumber = temp
- tempCharHolder = $84
- nextETGraphicData = $86
- ;--------------------------------------
- energyDecTensValue = nextETGraphicData
- ;--------------------------------------
- energyDecHundredsValue = energyDecTensValue
- nextObjectGraphicData = $87
- nextObjectColorData = $88
- ;--------------------------------------
- displayKernelBankSwitch = loopCount
- bankSwitchStrobe = displayKernelBankSwitch+1
- bankSwitchABSJmp = bankSwitchStrobe+2
- bankSwitchRoutinePtr = bankSwitchABSJmp+1
- fireResetStatus = $89 ; hold when fire button and RESET held
- soundDataChannel0 = $8A
- unknown = $8B
- currentSpriteHeight = $8C
- etHeight = $8D
- powerZoneColor = $8E
- timerColor = $8F
- telephoneColor = $90
- etMotionValues = $91
- etFractionalDelay = $92
- humanFractionalDelay = $93
- etNeckExtensionValues = $94
- currentObjectHorizPos = $95
- etHorizPos = $96
- etHeartHorizPos = $97
- phonePieceMapHorizPos = $98
- candyHorizPos = $99
- humanTargetHorizPos = $9A
- currentObjectVertPos = $9B
- etVertPos = $9C
- etHeartVertPos = $9D
- phonePieceMapVertPos = $9E
- candyVertPos = $9F
- humanTargetVertPos = $A0
- currentObjectId = $A1
- humanAttributes = $A2 ; $A2 - $A4
- ;--------------------------------------
- fbiAttributes = humanAttributes
- elliottAttributes = fbiAttributes+1
- scientistAttributes = elliottAttributes+1
- objectScreenId = $A5 ; $A5 - $A7
- ;--------------------------------------
- fbiScreenId = objectScreenId
- elliottScreenId = fbiScreenId+1
- scientistScreenId = elliottScreenId+1
- objectHorizPos = $A8 ; $A8 - $B1
- ;--------------------------------------
- fbiAgentHorizPos = objectHorizPos
- elliottHorizPos = fbiAgentHorizPos+1
- scientistHorizPos = elliottHorizPos+1
- objectVertPos = $AB ; $AB - $AD
- ;--------------------------------------
- fbiAgentVertPos = objectVertPos
- elliottVertPos = fbiAgentVertPos+1
- scientistVertPos = elliottVertPos+1
- objectGraphicPointers = $AE ; $AE - $B1
- ;--------------------------------------
- objectGraphicPtrs_0 = objectGraphicPointers
- objectGraphicPtrs_1 = objectGraphicPtrs_0+2
- objectColorPointers = $B2 ; $B2 - $B5
- ;--------------------------------------
- objectColorPtrs_0 = objectColorPointers
- objectColorPtrs_1 = objectColorPtrs_0+2
- etGraphicsPointers = $B6 ; $B6 - $B9
- ;--------------------------------------
- etGraphicPointers0 = etGraphicsPointers; $B6 - $B7
- etGraphicPointers1 = etGraphicPointers0+2; $B8 - $B9
- playfieldGraphicPtrs = $BA ; $BA - $BD
- ;--------------------------------------
- pf1GraphicPtrs = playfieldGraphicPtrs
- pf2GraphicPtrs = pf1GraphicPtrs+2
- graphicPointers = $BE ; $BE - $C9
- phonePieceAttributes = $CA ; $CA - $CC
- ;--------------------------------------
- h_phonePieceAttribute = phonePieceAttributes
- s_phonePieceAttribute = h_phonePieceAttribute+1
- w_phonePieceAttribute = s_phonePieceAttribute+1
- powerZonePointer = $CD ; $CD - $CE
- powerZoneIndicatorId = $CF
- shipLandingTimer = $D0
- candyStatus = $D1
- heldCandyPieces = $D2
- etEnergy = $D3 ; $D3 - $D4
- etHMOVEValue = $D5
- holdETHorizPos = $D6
- holdETVertPos = $D7
- holdETScreenId = $D8
- etPitStatus = $D9
- currentPitNumber = $DA
- callHomeScreenId = $DB
- extraCandyPieces = $DC
- collectedCandyPieces = $DD
- collectedCandyScoring = $DE
- playerScore = $DF ; $DF - $E1
- startingScreenId = $E2
- playerState = $E3
- gameState = $E4
- numberOfTries = $E5
- flowerState = $E6
- powerZoneLSBValues = $E7 ; $E7 - $E9
- ;--------------------------------------
- powerZoneLSBValue_01 = powerZoneLSBValues
- powerZoneLSBValue_02 = powerZoneLSBValue_01+1
- powerZoneLSBValue_03 = powerZoneLSBValue_02+1
- gameSelection = $EA
- mothershipStatus = $EB
- etAnimationIndex = $EC
- etHomeElliottMovement = $ED
- themeMusicNoteDelay = $EE
- themeMusicFreqIndex = $EF
- easterEggStatus = $F0
- programmerInitialFlag = $F1
- easterEggSpriteFlag = $F2
- artistInitialFlag = $F3
- ;============================================================================
- ; R O M - C O D E (BANK 0)
- ;============================================================================
- SEG Bank0
- .org BANK0TOP
- .rorg BANK0_REORG
- lda BANK0STROBE
- jmp Start
- HorizPositionObjects
- ldx #<RESBL - RESP0
- .moveObjectLoop
- sta WSYNC ; wait for next scan line
- lda currentObjectHorizPos,x ; get object's horizontal position
- tay
- lda HMOVETable,y ; get fine motion/coarse position value
- sta HMP0,x ; set object's fine motion value
- and #$0F ; mask off fine motion value
- tay ; move coarse move value to y
- .coarseMoveObject
- dey
- bpl .coarseMoveObject
- sta RESP0,x ; set object's coarse position
- dex
- bpl .moveObjectLoop
- sta WSYNC ; wait for next scan line
- sta HMOVE
- pla ; pull E.T. horizontal position from stack
- sta etHorizPos
- tax
- lda HMOVETable,x
- sta etHMOVEValue ; set E.T. horizontal move value
- jmp JumpToDisplayKernel
- SetScreenIdFromStartingScreen
- lda startingScreenId ; get starting screen id
- bpl .skipScreenIdSet ; branch if screen id already set
- and #<(~SET_STARTING_SCREEN)
- sta currentScreenId ; set screen id from starting screen id
- jsr SetCurrentScreenData
- lsr startingScreenId ; shift right to show value already set
- .skipScreenIdSet
- bit mothershipStatus ; check mothership status
- bmi .jmpToVerticalSync ; branch if Mothership is present
- lda currentScreenId ; get the current screen id
- cmp #ID_TITLE_SCREEN
- bne .checkForETHome ; branch if not on the title screen
- .jmpToVerticalSync
- jmp VerticalSync
- .checkForETHome
- lda currentScreenId ; get the current screen id
- cmp #ID_ET_HOME
- bne .checkForElliottToReviveET ; branch if not on home (game done) screen
- jmp VerticalSync
- .checkForElliottToReviveET
- bit playerState ; check the player state
- bpl .checkETNeckExtension ; branch if E.T. is not dead
- bvc .checkETNeckExtension ; branch if Elliott not reviving E.T.
- lda currentObjectId ; get the current object id
- bpl .checkETNeckExtension ; branch if current object still on screen
- ldx #ID_ELLIOTT
- stx currentObjectId ; set current object id to Elliott
- jsr SetCurrentObjectData
- lda #<(MOVE_UP >> 4)
- sta elliottAttributes ; set Elliott attributes to move up
- lda currentScreenId ; get the current screen id
- sta elliottScreenId ; place Elliott on the current screen
- lda #5
- sta elliottHorizPos
- sta elliottVertPos
- .checkETNeckExtension
- bit etNeckExtensionValues ; check neck extension value
- bpl CheckETPlayerCollisions ; branch if E.T. neck not extended
- .jmpToCheckForETOnPitScreen
- jmp CheckIfETOnPitScreen
- CheckETPlayerCollisions
- bit CXPPMM ; check player to player collisions
- bpl .jmpToCheckForETOnPitScreen ; branch if E.T. not collided with object
- ldx currentObjectId ; get the current object id
- bpl .checkCollisionObjectNotInWell; branch if object not in a well
- jmp .checkCollisionObjectInWell
- .checkCollisionObjectNotInWell
- lda humanAttributes,x ; get the human attribute value
- bmi .jmpToCheckForETOnPitScreen ; branch if returning home
- txa ; move current object id to accumulator
- bne .checkForScientistCollision ; branch if not FBI Agent
- ldx #NUM_PHONE_PIECES - 1
- .checkToTakePhoneOrCandy
- lda phonePieceAttributes,x ; get phone piece attribute value
- bmi .fbiTakePhonePieceFromET ; branch if E.T. took phone piece
- dex
- bpl .checkToTakePhoneOrCandy
- lda #$0A
- sta heldCandyPieces ; clear carried candy from E.T.
- bne .setForFBITakingObjectSound ; unconditional branch
- .fbiTakePhonePieceFromET
- lda frameCount ; get the current frame count
- and #PHONE_PIECE_PIT_NUMBER
- ora #FBI_HAS_PHONE_PIECE
- sta phonePieceAttributes,x ; set new location for phone piece
- .setForFBITakingObjectSound
- lda #PLAY_SOUND_CHANNEL0 | $1C
- sta soundDataChannel0
- jmp .setHumanToReturnHome
- .checkForScientistCollision
- cpx #ID_SCIENTIST
- bne .etCollidedWithElliott ; branch if not collided with Scientist
- lda etMotionValues ; get E.T. motion values
- ora #ET_CARRIED_BY_SCIENTIST ; set E.T. motion value to show E.T.
- sta etMotionValues ; carried by Scientist
- rol fbiAttributes ; set FBI Agent to return home
- sec
- ror fbiAttributes
- rol elliottAttributes ; set Elliott to return home
- sec
- ror elliottAttributes
- bne .setHumanToReturnHome ; unconditional branch
- .etCollidedWithElliott
- lda #PLAY_SOUND_CHANNEL0 | $0C
- sta soundDataChannel0
- bit playerState ; check the player state
- bpl .checkItemExchange ; branch if E.T. is not dead
- ldy numberOfTries ; get number of tries
- bpl .reviveET ; revive E.T. for another try
- rol gameState ; rotate game state left
- sec ; set carry and rotate value right to set
- ror gameState ; game loss state (i.e. D7 = 1)
- jsr SetCurrentScreenToETHome
- jmp VerticalSync
- .reviveET
- dec numberOfTries ; reduce number of tries
- ldx #$15
- ldy #$00
- jsr IncrementETEnergy ; give E.T. 1500 units of energy
- sty currentSpriteHeight
- sty playerState ; reset player state
- dey ; y = -1
- sty currentObjectId
- sty elliottScreenId
- sty elliottAttributes
- bne .setHumanToReturnHome ; unconditional branch
- .checkItemExchange
- ldx #0
- lda #ELLIOTT_HAS_PHONE_PIECE
- bit h_phonePieceAttribute
- bne .giveElliottPhonePieceToET ; branch if Elliott has H phone piece
- inx
- bit s_phonePieceAttribute
- bne .giveElliottPhonePieceToET ; branch if Elliott has S phone piece
- inx
- bit w_phonePieceAttribute
- beq .giveCandyPiecesToElliott ; branch if Elliott has no phone pieces
- .giveElliottPhonePieceToET
- lda #ET_HAS_PHONE_PIECE
- sta phonePieceAttributes,x
- bne .setHumanToReturnHome ; unconditional branch
- .giveCandyPiecesToElliott
- lda heldCandyPieces ; get number of candy pieces held by E.T.
- lsr ; shift upper nybbles to lower nybbles
- lsr
- lsr
- lsr
- beq .setHumanToReturnHome ; branch if no candy pieces collected
- clc
- adc collectedCandyPieces ; increment collected candy pieces
- sta collectedCandyPieces
- lda heldCandyPieces ; get number of candy pieces held by E.T.
- cmp #MAX_HOLD_CANDY ; see if E.T. is holding maximum candy
- bcc .clearNumberHeldCandyPieces ; clear held candy count if not
- ldx #NUM_PHONE_PIECES - 1
- lda #$F0
- bit w_phonePieceAttribute
- beq .givePhonePieceToElliott
- dex
- bit s_phonePieceAttribute
- beq .givePhonePieceToElliott
- dex
- bit h_phonePieceAttribute
- bne .clearNumberHeldCandyPieces
- .givePhonePieceToElliott
- lda #ELLIOTT_HAS_PHONE_PIECE
- sta phonePieceAttributes,x
- .clearNumberHeldCandyPieces
- lda heldCandyPieces ; get number of candy pieces held by E.T.
- and #$0F ; mask to clear number of candy held
- sta heldCandyPieces
- .setHumanToReturnHome
- ldx currentObjectId ; get the current object id
- rol humanAttributes,x ; shift human attribute left
- sec ; set carry and shift value right to set
- ror humanAttributes,x ; RETURN_HOME flag (i.e. D7 = 1)
- bmi CheckIfETOnPitScreen ; unconditional branch
- .checkCollisionObjectInWell
- cpx #$80 | ID_FLOWER
- bcs CheckIfETOnPitScreen ; branch if E.T. didn't pick up phone piece
- lda #PLAY_SOUND_CHANNEL0 | $0D
- sta soundDataChannel0
- txa ; move current object id to accumulator
- and #$0F ; mask pit value to keep object id
- sec
- sbc #3 ; subtract value by 3
- tax
- cmp #3
- bcs CheckIfETOnPitScreen ; branch if E.T. didn't pick up phone piece
- lda #ET_HAS_PHONE_PIECE
- sta phonePieceAttributes,x
- asl ; a = 0
- sta currentSpriteHeight
- CheckIfETOnPitScreen
- lda currentScreenId ; get the current screen id
- cmp #ID_FOREST
- bcc CheckETPitCollisions ; branch if E.T. on a pit screen
- .jmpToDetermineHumanDirection
- jmp DetermineHumanDirection
- CheckETPitCollisions
- bit etMotionValues ; check E.T. motion values
- bvs .jmpToDetermineHumanDirection; branch if E.T. carried by Scientist
- bit CXP1FB ; check E.T. and playfield collision
- bmi PlaceETInPit ; branch if E.T. collided with pit
- lda #0
- sta etPitStatus ; clear E.T. pit status flags
- beq .jmpToDetermineHumanDirection; unconditional branch
- PlaceETInPit
- bit etNeckExtensionValues ; check neck extension value
- bmi .jmpToDetermineHumanDirection; branch if E.T. neck extended
- lda etVertPos ; get E.T.'s vertical position
- sta holdETVertPos ; save for when E.T. emerges from pit
- lda etHorizPos ; get E.T.'s horizontal position
- sta holdETHorizPos ; save for when E.T. emerges from pit
- ldy #0
- ldx currentScreenId ; get the current screen id
- stx holdETScreenId ; save for when E.T. emerges from pit
- beq SetPitNumberForDiamondPits ; branch if FOUR_DIAMOND_PITS
- dex
- beq SetPitNumberForEightPits ; branch if EIGHT_PITS
- dex
- beq SetPitNumberForArrowPits ; branch if ARROW_PITS
- ldx #ID_UPPER_LEFT_WIDE_PIT
- bne CalculateCurrentPitNumber ; unconditional branch -- WIDE_DIAMOND_PITS
- SetPitNumberForArrowPits
- ldx #ID_TOP_LEFT_ARROW_PIT
- CalculateCurrentPitNumber
- stx tempPitNumber
- cmp #59 ; compare E.T.'s horizontal position
- bcc .compareETVerticalPosition
- iny ; y = 1
- .compareETVerticalPosition
- lda etVertPos ; get E.T.'s vertical position
- cmp #33
- bcc .combineTempPitNumber
- iny
- iny
- .combineTempPitNumber
- tya
- ora tempPitNumber
- bne .setCurrentPitNumber ; unconditional branch
- SetPitNumberForDiamondPits
- cmp #41 ; compare E.T.'s horizontal position
- bcs .etNotInPitOne
- lda #ID_LEFT_DIAMOND_PIT ; show that E.T. is in pit number 1
- bne .setCurrentPitNumber ; unconditional branch
- .etNotInPitOne
- cmp #81 ; compare E.T.'s horizontal position
- bcc .etNotInPitTwo
- lda #ID_RIGHT_DIAMOND_PIT ; show that E.T. is in pit number 2
- bne .setCurrentPitNumber ; unconditional branch
- .etNotInPitTwo
- lda etVertPos ; get E.T.'s vertical position
- cmp #29
- lda #ID_TOP_DIAMOND_PIT
- bcc .setCurrentPitNumber ; set E.T. to pit number 0
- lda #ID_LOWER_DIAMOND_PIT ; show that E.T. is in pit number 3
- bne .setCurrentPitNumber ; unconditional branch
- SetPitNumberForEightPits
- ldx etVertPos ; get E.T.'s vertical position
- cpx #19
- bcc .checkForOutOfRangePit
- cpx #40
- bcc .checkHorizPosForPitNumber
- ldy #3
- .checkForOutOfRangePit
- cmp #32 ; compare E.T.'s horizontal position
- bcc .setToOutOfRangePitNumber
- cmp #96 ; compare E.T.'s horizontal position
- bcs .setToOutOfRangePitNumber
- .combineIndexForPitNumber
- tya
- ora #ID_TOP_EIGHT_PITS
- bne .setCurrentPitNumber ; unconditional branch
- .setToOutOfRangePitNumber
- lda #<ID_PIT_OUT_OF_RANGE
- bne .setCurrentPitNumber ; unconditional branch
- .checkHorizPosForPitNumber
- iny ; y = 1
- cmp #64 ; compare E.T. horizontal position
- bcc .combineIndexForPitNumber
- iny ; y = 2
- bne .combineIndexForPitNumber ; unconditional branch
- .setCurrentPitNumber
- sta currentPitNumber
- lda #ID_PIT
- sta currentScreenId ; set the current screen id
- jsr SetCurrentScreenData
- DetermineHumanDirection
- lda frameCount ; get the current frame count
- and #3 ; make value 0 <= a <= 3
- cmp #ID_SCIENTIST + 1
- beq CheckForETCollectingCandy ; branch if out of human id range
- tax ; move object id to x
- lda objectScreenId,x ; get the object's screen id
- bpl .multiplyScreenIdBy8 ; branch if human is active
- lda humanAttributes,x ; get human attribute value
- bmi CheckForETCollectingCandy ; branch if returning home
- lda #ID_WASHINGTON_DC
- jsr CheckForHumanOnScreen
- bcs CheckForETCollectingCandy ; branch if human on WASHINGTON_DC screen
- sta objectScreenId,x ; set object screen id to WASHINGTON_DC
- lda HumanTargetVertPosTable,x
- sta objectVertPos,x
- lda HumanTargetHorizPosTable,x
- sta objectHorizPos,x
- lda #<(MOVE_LEFT >> 4)
- sta humanAttributes,x ; set human to move left
- lda #ID_WASHINGTON_DC
- cmp currentScreenId
- bne CheckForETCollectingCandy
- stx currentObjectId
- jsr SetCurrentObjectData
- jmp CheckForETCollectingCandy
- .multiplyScreenIdBy8
- asl
- asl
- asl
- sta humanDirectionIndex
- lda humanAttributes,x ; get human attribute value
- bpl .checkToChangeHumanDirection ; branch if not returning home
- lda #5
- clc
- bcc .setNewHumanDirection ; unconditional branch
- .checkToChangeHumanDirection
- lda currentScreenId ; get the current screen id
- cmp #ID_PIT ; if on PIT or HOME or TITLE SCREEN then
- bcs CheckForETCollectingCandy ; don't change human direction
- .setNewHumanDirection
- adc humanDirectionIndex
- tay
- lda HumanDirectionTable,y
- bmi CheckForETCollectingCandy
- sta newHumanDirection
- lda humanAttributes,x ; get human attribute value
- and #$F0 ; clear current human direction
- ora newHumanDirection ; or in new direction value
- sta humanAttributes,x ; set new direction value
- CheckForETCollectingCandy
- bit CXP1FB ; check E.T. collision with PF and BALL
- bvc .skipCandyCollection ; branch if E.T. did not collect candy
- ldx currentScreenId ; get the current screen id
- cpx #ID_FOREST
- bcs .skipCandyCollection ; branch if E.T. not on a pit screen
- lda heldCandyPieces ; get number of candy pieces held by E.T.
- cmp #MAX_HOLD_CANDY
- bcs .skipCandyCollection ; branch if E.T. holding maximum candy
- adc #1 * 16 ; increment held candy pieces by 1
- sta heldCandyPieces
- lda #PLAY_SOUND_CHANNEL0 | $1C
- sta soundDataChannel0
- lda #127 ; set candy piece vertical position to be
- sta candyVertPos ; out of visual range
- lda CandyStatusMaskTable,x
- and candyStatus
- sta candyStatus
- .skipCandyCollection
- lda secondTimer
- and #$0F
- bne CheckForETNeckExtension
- lda frameCount ; get the current frame count
- and #$3F
- cmp #23
- bne CheckForETNeckExtension
- lda candyStatus ; get candy status flag value
- and #$0F
- tax
- lda extraCandyPieces ; get extra candy pieces value
- sec
- sbc ExtraCandyReductionTable,x
- bmi CheckForETNeckExtension
- sta extraCandyPieces
- lda #$0F
- ora candyStatus
- sta candyStatus
- CheckForETNeckExtension
- bit etNeckExtensionValues ; check neck extension value
- bmi .etNeckExtended ; branch if E.T. neck extended
- jmp DeterminePitPowerZone
- .etNeckExtended
- lda frameCount ; get the current frame count
- and #3
- bne .jmpToSetPhoneHiddenLocation
- bvc ExtendedETNeck ; branch if extending E.T. neck
- bit etPitStatus ; check E.T. pit status flags
- bvs .jmpToSetPhoneHiddenLocation ; branch if E.T. levitating
- dec etNeckExtensionValues
- lda etNeckExtensionValues
- and #7
- cmp #7
- beq .reduceETNeckExtension
- inc etVertPos ; move E.T. down 1 pixel
- bne .jmpToSetPhoneHiddenLocation ; unconditional branch
- .reduceETNeckExtension
- lda #$00
- sta etNeckExtensionValues ; clear neck extension value
- inc etVertPos ; move E.T. down 1 pixel
- ldx #NUM_PHONE_PIECES - 1
- .clearHiddenPhonePieceLoc
- lda phonePieceAttributes,x ; get phone piece attribute value
- and #<(~PHONE_PIECE_SCREEN_LOC) ; clear phone piece screen location bit to
- sta phonePieceAttributes,x ; show phone not hidden (i.e. E.T. in pit)
- dex
- bpl .clearHiddenPhonePieceLoc
- .jmpToSetPhoneHiddenLocation
- jmp SetPhonePieceHiddenLocation
- ExtendedETNeck SUBROUTINE
- inc etNeckExtensionValues
- lda etNeckExtensionValues
- and #7
- cmp #4
- bcs ETNeckExtendedToMax
- lda etVertPos ; get E.T.'s vertical position
- beq .jmpToSetPhoneHiddenLocation ; branch if E.T. out of the pit
- dec etVertPos ; move E.T. up 1 pixel
- .jmpToSetPhoneHiddenLocation
- jmp SetPhonePieceHiddenLocation
- ETNeckExtendedToMax
- lda #NECK_EXTENDED | NECK_DECENDING | 3
- sta etNeckExtensionValues ; set E.T. neck to decend
- ldx #$00
- ldy #$19
- jsr DecrementETEnergy ; reduce E.T. energy by 19 units
- ldy currentScreenId ; get the current screen id
- lda powerZoneIndicatorId ; get the power zone id
- asl ; multiply value by 2
- tax
- lda PowerZoneJumpTable+1,x
- pha
- lda PowerZoneJumpTable,x
- pha
- lda gameSelection ; get the current game selection
- cmp #2
- bcs .jumpToPowerZone
- lda scientistScreenId ; get the Scientist's screen id
- bpl .jumpToPowerZone ; branch if Scientist not at home
- rol scientistAttributes ; rotate Scientist attribute left and
- clc ; clear carry and rotate right to clear
- ror scientistAttributes ; RETURN_HOME flag (i.e. D7 = 0)
- .jumpToPowerZone
- rts
- ReviveFlower
- bit flowerState ; check the flower state
- bmi .setPhonePieceHiddenLocation ; branch if flower already revived
- inc numberOfTries ; increment number of tries
- rol flowerState ; rotate flower state left
- sec ; set carry flag and rotate flower state
- ror flowerState ; right to set FLOWER_REVIVED state
- bmi .setPhonePieceHiddenLocation ; unconditional branch
- LevitateETOutOfPit
- lda #LEVITATING
- sta etPitStatus ; set status to show E.T. levitating
- dec etVertPos ; move E.T. up two pixels
- dec etVertPos
- .setPhonePieceHiddenLocation
- jmp SetPhonePieceHiddenLocation
- DetermineHiddenPhonePiece
- ldx #NUM_PHONE_PIECES - 1
- .hiddenPhonePieceLoop
- lda phonePieceAttributes,x ; get phone piece attribute value
- and #<(~PHONE_PIECE_PIT_NUMBER) ; mask PHONE_PIECE_PIT_NUMBER value
- bne .nextPhonePiece ; branch if phone piece not hidden
- lda phonePieceAttributes,x ; get phone piece attribute value
- and #PHONE_PIECE_PIT_NUMBER ; keep PHONE_PIECE_PIT_NUMBER value
- lsr ; divide pit number value by 4
- lsr
- cmp currentScreenId ; compare with current screen id value
- beq .setPhoneHiddenOnScreen ; branch if phone piece hidden on screen
- .nextPhonePiece
- dex
- bpl .hiddenPhonePieceLoop
- .setHiddenPhonePieceLocation
- jmp SetPhonePieceHiddenLocation
- .setPhoneHiddenOnScreen
- lda phonePieceAttributes,x ; get phone piece attribute value
- ora #PHONE_PIECE_SCREEN_LOC ; set value to show phone hidden on screen
- sta phonePieceAttributes,x
- bne .setHiddenPhonePieceLocation ; unconditional branch
- WarpETRight
- lda RightScreenIdTable,y
- jmp .warpETToNewScreen
- WarpETLeft
- lda LeftScreenIdTable,y
- jmp .warpETToNewScreen
- WarpETUp
- lda UpperScreenIdTable,y
- jmp .warpETToNewScreen
- WarpETDown
- lda LowerScreenIdTable,y
- .warpETToNewScreen
- sta currentScreenId ; set the current screen id
- jsr SetCurrentScreenData
- jmp SetPhonePieceHiddenLocation
- ClearElliottReturnHomeFlag
- rol elliottAttributes ; rotate Elliott attributes left
- clc ; clear carry and rotate Elliott attributes
- ror elliottAttributes ; right to clear RETURN_HOME flag
- bpl SetPhonePieceHiddenLocation ; unconditional branch
- CallMothership
- ldx currentObjectId ; get the current object id
- bmi .checkToStartShipLandingTimer; branch if current object returning home
- bit SWCHB ; check console switch values
- bvs SetPhonePieceHiddenLocation ; branch if player 1 difficulty set to PRO
- cpx #ID_ELLIOTT
- bne SetPhonePieceHiddenLocation ; branch if current object is not Elliott
- .checkToStartShipLandingTimer
- lda shipLandingTimer ; get timer value for ship landing
- bpl SetPhonePieceHiddenLocation ; branch if landing timer already started
- bit h_phonePieceAttribute ; check H phone piece value
- bpl SetPhonePieceHiddenLocation ; branch if E.T. not taken H phone piece
- bit s_phonePieceAttribute ; check S phone piece value
- bpl SetPhonePieceHiddenLocation ; branch if E.T. not taken S phone piece
- bit w_phonePieceAttribute ; check W phone piece value
- bpl SetPhonePieceHiddenLocation ; branch if E.T. not taken W phone piece
- lda #PLAY_SOUND_CHANNEL0 | $0C
- sta soundDataChannel0
- lda #START_LANDING_TIMER
- sta shipLandingTimer ; set ship landing timer value
- lda #RETURN_HOME | P1_NO_MOVE
- sta fbiAttributes ; set all human objects to return home and
- sta elliottAttributes ; don't move
- sta scientistAttributes
- bne SetPhonePieceHiddenLocation ; unconditional branch
- ReturnCurrentHumanHome
- ldx currentObjectId ; get the current object id
- bmi SetPhonePieceHiddenLocation ; branch if human set to return home
- rol humanAttributes,x ; rotate human attribute value left
- sec ; set carry and rotate value right to set
- ror humanAttributes,x ; RETURN_HOME flag (i.e. D7 = 1)
- bmi SetPhonePieceHiddenLocation ; unconditional branch
- EatCandyPiece
- lda heldCandyPieces ; get number of candy pieces held by E.T.
- sec
- sbc #1 * 16 ; reduce number of candy pieces held by 1
- bcc SetPhonePieceHiddenLocation
- sta heldCandyPieces
- ldx #$03
- ldy #$60
- jsr IncrementETEnergy ; increment energy by 360 units
- SetPhonePieceHiddenLocation
- ldx #NUM_PHONE_PIECES - 1
- bit w_phonePieceAttribute ; check W phone piece value
- bvs .setHiddenPhonePiecePosition ; branch if W phone piece present on screen
- dex
- bit s_phonePieceAttribute ; check S phone piece
- bvs .setHiddenPhonePiecePosition ; branch if S phone piece present on screen
- dex
- bit h_phonePieceAttribute ; check H phone piece
- bvc .turnOffHiddentPhonePiece ; branch if H phone piece not on screen
- .setHiddenPhonePiecePosition
- lda phonePieceAttributes,x ; get the phone piece attribute value
- and #PHONE_PIECE_PIT_NUMBER ; mask bits to keep pit number
- tay
- lda PhonePiecePitHorizPosition,y ; get phone piece pit horizontal position
- sta phonePieceMapHorizPos
- ldx PhonePiecePitVertPosition,y ; get phone piece pit vertical position
- lda frameCount ; get the current frame count
- ror ; move D2 of frame count to carry
- ror ; flash hidden phone piece every 8 frames
- ror
- bcc .setHiddenPhonePieceVertPos
- .turnOffHiddentPhonePiece
- ldx #127
- .setHiddenPhonePieceVertPos
- stx phonePieceMapVertPos
- lda powerZoneIndicatorId ; get current power zone id
- jmp .setPowerZoneGraphicPtrLSB
- DeterminePitPowerZone
- lda currentScreenId ; get the current screen id
- cmp #ID_PIT
- bne DetermineCurrentPowerZone ; branch if E.T. not in pit
- lda currentObjectId ; get the current object id
- cmp #$80 | ID_FLOWER
- bne .setPowerZoneToPitZone ; branch if the flower not present
- lda etHorizPos ; get E.T.'s horizontal position
- sbc currentObjectHorizPos ; subtract flower horizontal position
- cmp #16
- bcs .setPowerZoneToPitZone
- lda #ID_FLOWER_ZONE
- bne .setPowerZoneIndicatorId ; set power zone to flower zone
- .setPowerZoneToPitZone
- lda #ID_PIT_ZONE
- bne .setPowerZoneIndicatorId ; unconditional branch
- DetermineCurrentPowerZone
- lda etHorizPos ; get E.T.'s horizontal position
- lsr ; divide horizontal value by 8
- lsr
- lsr
- and #$0C ; a = 0 || a = 4 || a = 8 || a = 12
- sta powerZoneIndex
- lda etVertPos ; get E.T.'s vertical position
- lsr ; divide vertical value by 16 (i.e. move
- lsr ; upper nybble to lower nybble)
- lsr
- lsr
- ora powerZoneIndex ; increase value for index pointer
- lsr ; divide value by 2 (i.e. 0 <= x <= 7)
- tay
- lda (powerZonePointer),y
- bcc .checkForValidFindPhoneZone ; branch if index value was even
- lsr ; shift upper nybble to lower nybble
- lsr
- lsr
- lsr
- .checkForValidFindPhoneZone
- and #$0F
- cmp #ID_FIND_PHONE_ZONE
- bne .checkForValidCallElliottZone
- ldx currentScreenId ; get the current screen id
- cpx #ID_FOREST
- bcs .setPowerZoneToBlankZone ; set power zone to blank if in forest
- .checkForValidCallElliottZone
- cmp #ID_CALL_ELLIOTT_ZONE
- bne .checkForValidLandingZone
- ldx #ID_FOREST
- cpx currentScreenId
- beq .setPowerZoneToBlankZone ; set power zone to blank if in forest
- .checkForValidLandingZone
- cmp #ID_LANDING_ZONE
- bne .checkForValidCallShipZone
- ldx #ID_FOREST
- cpx currentScreenId
- bne .setPowerZoneToBlankZone ; set power zone to blank if not in forest
- .checkForValidCallShipZone
- cmp #ID_CALL_SHIP_ZONE
- bne .setPowerZoneIndicatorId
- ldx callHomeScreenId
- cpx currentScreenId
- beq .setPowerZoneIndicatorId ; set power zone if on call home screen
- .setPowerZoneToBlankZone
- lda #ID_BLANK_ZONE
- .setPowerZoneIndicatorId
- sta powerZoneIndicatorId
- .setPowerZoneGraphicPtrLSB
- asl ; multiply power zone indicator value by 8
- asl ; (height of Power Zone sprites) to set
- asl ; graphic pointer LSB
- sta graphicPointers
- VerticalSync SUBROUTINE
- .waitTime
- lda INTIM
- bne .waitTime
- StartNewFrame
- lda #START_VERT_SYNC
- sta WSYNC ; wait for next scan line
- sta VSYNC ; start vertical sync (D1 = 1)
- inc frameCount ; increment frame count each new frame
- bne .firstLineOfVerticalSync
- bit playerState ; check player state
- bmi .firstLineOfVerticalSync ; branch if E.T. dead
- lda gameSelection ; get the current game selection
- cmp #MAX_GAME_SELECTION
- bcs .firstLineOfVerticalSync
- lda fbiScreenId ; get FBI Agent screen id
- bpl .firstLineOfVerticalSync ; branch if FBI Agent active
- bit etMotionValues ; check E.T. motion values
- bvs .firstLineOfVerticalSync ; branch if E.T. carried by Scientist
- lda #P1_NO_MOVE
- sta fbiAttributes ; set FBI Agent not to move
- .firstLineOfVerticalSync
- sta WSYNC
- lda #$3F
- and frameCount
- bne .secondLineOfVerticalSync
- inc secondTimer ; increment ~every second (i.e 63 frames)
- lda SWCHB ; read console switches
- and #SELECT_MASK
- bne .secondLineOfVerticalSync ; branch if SELECT not pressed
- ldx gameSelection ; get the current game selection
- inx ; increment game selection
- cpx #MAX_GAME_SELECTION + 1 ; see if game selection should wrap
- bcc .setGameSelection
- ldx #1 ; set game selection to 1
- .setGameSelection
- stx gameSelection
- .secondLineOfVerticalSync
- sta WSYNC
- lda currentScreenId ; get the current screen id
- cmp #ID_TITLE_SCREEN
- bne .endVerticalSync ; branch if not on TITLE_SCREEN
- lda #24
- sta currentObjectHorizPos
- lda #65
- sta etHorizPos
- lda #58
- sta etHeartHorizPos
- lda #95
- sta phonePieceMapHorizPos
- .endVerticalSync
- lda #STOP_VERT_SYNC
- ldx #VBLANK_TIME
- sta WSYNC ; last line of vertical sync
- sta VSYNC ; end vertical sync (D1 = 0)
- stx TIM64T ; set timer for vertical blanking period
- bit mothershipStatus ; check mothership status
- bpl .checkToPlayThemeForTitleScreen; branch if mothership not present
- jmp DetermineObjectToMove
- .checkToPlayThemeForTitleScreen
- lda currentScreenId ; get the current screen id
- cmp #ID_TITLE_SCREEN
- beq PlayThemeMusic ; branch if on TITLE_SCREEN
- bit playerState ; check player state
- bpl CheckToPlayETFallingSound ; branch if E.T. not dead
- ldx currentObjectId ; get the current object id
- dex
- bne CheckToPlayETFallingSound ; branch if current object is not Elliott
- PlayThemeMusic
- lda #7
- sta AUDV1
- lda #SOUND_CHANNEL_LEAD
- sta AUDC1
- ldx themeMusicNoteDelay ; get theme music note delay value
- dex
- bpl .playCurrentThemeNote ; hold note if not negative
- ldx #11 ; initial hold note delay
- ldy themeMusicFreqIndex ; get theme music frequency index
- iny ; increment frequency index
- cpy #55
- bcc .setThemeMusicFreqIndex
- ldy #0
- .setThemeMusicFreqIndex
- sty themeMusicFreqIndex
- .playCurrentThemeNote
- stx themeMusicNoteDelay
- ldy themeMusicFreqIndex
- lda ThemeMusicFrequencyTable,y
- sta AUDF1
- lda #0
- sta AUDV0
- jmp .donePlayingSoundChannel1
- CheckToPlayETFallingSound
- bit etPitStatus ; check E.T. pit value
- bpl CheckToPlayETLevitationSound ; branch if E.T. not falling in pit
- lda #SOUND_CHANNEL_SQUARE + 1
- sta AUDC1
- asl ; multiple value by 2 to set volume
- sta AUDV1
- lda etVertPos ; get E.T.'s vertical position
- lsr ; divide value by 2 to set frequency
- sta AUDF1
- bne .donePlayingSoundChannel1 ; unconditional branch
- CheckToPlayETLevitationSound
- bvc CheckToPlayNeckExtensionSound; branch if E.T. not levitating
- lda etEnergy+1
- and #$0F
- bne .turnOffETWalkingSound
- lda #4
- sta AUDV1
- lda #$1C
- bne .setSoundChannel1AndFrequency; unconditional branch
- CheckToPlayNeckExtensionSound
- lda etNeckExtensionValues ; get neck extension value
- bpl PlayETWalkingSound ; branch if E.T. neck not extended
- sec
- rol
- sec
- rol
- sta AUDV1
- lda #$0E
- bne .setSoundChannel1AndFrequency; unconditional branch
- PlayETWalkingSound
- lda SWCHA ; read joystick values
- cmp #P0_NO_MOVE
- bcs .turnOffETWalkingSound
- bit etMotionValues ; check E.T. motion values
- bpl .playETWalkingSound ; branch if E.T. not running
- lda frameCount ; get the current frame count
- lsr ; divide value by 4
- lsr
- and #7
- sta AUDF1
- lda #SOUND_CHANNEL_SQUARE + 1
- sta AUDC1
- lda #7
- sta AUDV1
- bne .donePlayingSoundChannel1 ; unconditional branch
- .playETWalkingSound
- lda frameCount ; get the current frame count
- and #7
- bne .turnOffETWalkingSound
- lda frameCount ; get the current frame count
- lsr ; divide value by 8
- lsr
- lsr
- and #3
- beq .turnOffETWalkingSound
- ldx #7
- stx AUDV1
- adc #$16
- bne .setSoundChannel1AndFrequency
- .turnOffETWalkingSound
- lda #0
- sta AUDV1
- .setSoundChannel1AndFrequency
- sta AUDC1
- sta AUDF1
- .donePlayingSoundChannel1
- lda currentScreenId ; get the current screen id
- cmp #ID_ET_HOME
- bne .checkIfOnTitleScreen
- jmp SetSpecialSpriteForPit
- .checkIfOnTitleScreen
- cmp #ID_TITLE_SCREEN
- bne CheckForTimeToLandMothership
- jmp SetCurrentObjectXYCoordinates
- CheckForTimeToLandMothership
- lda shipLandingTimer ; get ship landing timer value
- bpl .reduceLandingTimerValue ; branch if timer set for count down
- lda #<BlankIcon
- sta graphicPointers+2
- beq MoveET ; unconditional branch
- .reduceLandingTimerValue
- lda frameCount ; get the current frame count
- and #$1F
- bne SetCountdownClockSpriteLSB
- dec shipLandingTimer ; decrement ship landing timer
- bpl PlayShipLandingTimerSound
- lda #<BlankIcon
- sta graphicPointers+2 ; clear landing timer icon
- lda powerZoneIndicatorId ; get power zone indicator id
- cmp #ID_LANDING_ZONE
- bne .dontLandMothership ; branch if E.T. not in landing zone
- lda currentObjectId ; get the current object id
- bmi .landMothership
- bit SWCHB ; check console switch values
- bvs .dontLandMothership ; branch if player 1 difficulty set to PRO
- cmp #ID_ELLIOTT ; don't land Mothership if present human
- bne .dontLandMothership ; is not Elliott
- .landMothership
- lda #PLAY_SOUND_CHANNEL0 | $0D
- sta soundDataChannel0
- lda heldCandyPieces ; get number of candy pieces held by E.T.
- lsr ; shift upper nybbles to lower nybble
- lsr
- lsr
- lsr
- clc
- adc collectedCandyPieces ; add in number of candy held by Elliott
- sta totalCandyCollected ; save total candy pieces collected
- lsr ; divide value by 2
- clc ; add collected candy value back in so
- adc totalCandyCollected ; value is multiplied by 1.5
- cmp #16
- bcs .setExtraCandyPiecesValue
- lda #16
- .setExtraCandyPiecesValue
- sta extraCandyPieces
- ldx #ID_MOTHERSHIP
- jsr SetCurrentObjectData ; set current object to the MOTHERSHIP
- lda #240
- sta currentObjectVertPos ; set Mothership's vertical position
- lda etHorizPos ; get E.T.'s horizontal position
- sec
- sbc #5
- bpl .setMothershipHorizPos
- lda #0
- .setMothershipHorizPos
- sta currentObjectHorizPos
- lda #MOTHERSHIP_PRESENT | ET_GOING_HOME
- sta mothershipStatus
- jmp DetermineObjectToMove
- .dontLandMothership
- lda #PLAY_SOUND_CHANNEL0 | $1F
- sta soundDataChannel0
- bne MoveET ; unconditional branch
- PlayShipLandingTimerSound
- lda shipLandingTimer ; get timer value for ship landing
- ldx #PLAY_SOUND_CHANNEL0 | $04
- cmp #7
- bcc .setSoundDataChannel0
- and #7
- cmp #7
- bne SetCountdownClockSpriteLSB
- ldx #PLAY_SOUND_CHANNEL0 | $0C
- .setSoundDataChannel0
- stx soundDataChannel0
- SetCountdownClockSpriteLSB
- lda shipLandingTimer ; get timer value for ship landing
- cmp #8
- bcs .setCountdownClockLSB
- asl ; multiply by 8 to speed up timer icon
- asl
- asl
- .setCountdownClockLSB
- and #$38
- clc
- adc #<CountdownClockIcons
- sta graphicPointers+2
- MoveET
- lda SWCHA ; read joystick values
- lsr ; shift player 1 joystick values to
- lsr ; lower nybbles
- lsr
- lsr
- sta tempJoystickValues
- lda etMotionValues ; get E.T. motion values
- and #<(~ET_MOTION_MASK)
- ora tempJoystickValues
- sta etMotionValues ; set new E.T. joystick direction
- bit playerState ; check current player state
- bmi .checkETMotion ; branch if E.T. dead
- bit INPT4 ; check player one fire button
- bmi .clearETRunningStatus ; branch if fire button not pressed
- lda fireResetStatus ; check to see if fire button held
- bmi .checkETMotion ; branch if fire button held
- ora #FIRE_BUTTON_HELD
- sta fireResetStatus ; set status to show fire button held
- lda SWCHA ; read joystick values
- cmp #P0_NO_MOVE
- bcs .skipSetETRunningFlag ; branch if joystick not moved
- rol etMotionValues ; rotate E.T. motion values left
- sec ; set carry and rotate value right to show
- ror etMotionValues ; E.T. is running (i.e. D7 = 1)
- bne .checkETMotion ; unconditional branch
- .skipSetETRunningFlag
- bit etMotionValues ; check E.T. motion values
- bvs .checkETMotion ; branch if E.T. carried by Scientist
- bit etNeckExtensionValues ; check neck extension value
- bmi .checkETMotion ; branch if E.T. neck extended
- dec etVertPos ; move E.T. up 1 pixel
- bpl .setETNeckExtendedValue
- inc etVertPos ; move E.T. down 1 pixel
- .setETNeckExtendedValue
- lda #NECK_EXTENDED
- sta etNeckExtensionValues ; set to show E.T. neck extended
- bne .checkETMotion ; unconditional branch
- .clearETRunningStatus
- rol fireResetStatus ; rotate fire button held status to carry
- clc ; clear carry and rotate value right to
- ror fireResetStatus ; clear fire button held status
- rol etMotionValues ; rotate E.T. motion value left
- clc ; clear carry and rotate value right to
- ror etMotionValues ; set E.T. not running (i.e. D7 = 0)
- .checkETMotion
- bit etMotionValues ; check E.T. motion values
- bvc CheckToRestrictETMovementInPit; branch if E.T. not carried Scientist
- lda scientistScreenId ; get the Scientist screen id
- cmp currentScreenId ; compare with current screen id
- beq .setETLocationToCurrentObject
- bit etMotionValues ; check E.T. motion values
- bpl .setCurrentScreenId ; branch if E.T. not running
- lda etMotionValues ; get E.T. motion values
- and #<(~ET_CARRIED_BY_SCIENTIST)
- sta etMotionValues ; release E.T. from Scientist
- bne .jmpToCheckToMoveET ; unconditional branch
- .setCurrentScreenId
- sta currentScreenId ; set the current screen id
- jsr SetCurrentScreenData
- .setETLocationToCurrentObject
- lda currentObjectVertPos ; get current object vertical position
- sta etVertPos ; set E.T. vertical position
- lda currentObjectHorizPos ; get current object horizontal position
- sta etHorizPos ; set E.T. horizontal position
- .jmpToCheckToMoveET
- jmp CheckIfOkayToMoveET
- CheckToRestrictETMovementInPit
- lda etPitStatus ; get E.T. pit status values
- bne .restrictETMovement ; branch if E.T. is in a pit
- bit etNeckExtensionValues ; check neck extension value
- bpl .jmpToCheckToMoveET ; branch if E.T. neck not extended
- .restrictETMovement
- and #IN_PIT_BOTTOM
- beq CheckForETLevitatingInPit ; branch if E.T. not reached pit bottom
- ldx etHorizPos ; get E.T.'s horizontal position
- lda etMotionValues ; get E.T. motion values
- and #ET_MOTION_MASK
- ora #[~(MOVE_DOWN & MOVE_UP) >> 4] & 15;don't allow E.T. to move vertically
- cpx #PIT_XMIN ; compare E.T. horizontal position
- bcs .checkForPitXMAX
- ora #[(~MOVE_LEFT) >> 4] & 15 ; don't allow E.T. to move left
- .checkForPitXMAX
- cpx #PIT_XMAX ; compare E.T. horizontal position
- bcc .setETPitMotionValue
- ora #[(~MOVE_RIGHT) >> 4] & 15 ; don't allow E.T. to move right
- .setETPitMotionValue
- sta etMotionValues
- jmp CheckIfOkayToMoveET
- CheckForETLevitatingInPit
- bit etPitStatus ; check E.T. pit values
- bvc ETFallingInPit ; branch if E.T. not levitating
- lda frameCount ; get the current frame count
- and #7
- bne .skipEnergyDecrement
- ldx #$00
- ldy #$01
- jsr DecrementETEnergy ; decrement energy by 1 unit
- .skipEnergyDecrement
- lda currentScreenId ; get the current screen id
- cmp #ID_FOREST
- bne CheckForETInPit ; branch if E.T. not in the forest
- lda #0
- sta etPitStatus ; clear E.T. pit status flags
- jmp DetermineObjectToMove
- CheckForETInPit
- cmp #ID_PIT
- bne CheckIfOkayToMoveET
- lda etVertPos ; get E.T.'s vertical position
- cmp #45
- bcc .checkIfETOutOfPit
- lda #IN_PIT_BOTTOM
- sta etPitStatus ; set flag to show E.T. at pit bottom
- bne .jmpToDetermineObjectToMove ; unconditional branch
- .checkIfETOutOfPit
- cmp #2 ; compare E.T.'s vertical position
- bcs .restrictETHorizMovement
- lda holdETVertPos ; get E.T. vertical position before falling
- sta etVertPos ; set E.T. vertical position
- lda holdETHorizPos ; get E.T. horiz position before falling
- sta etHorizPos ; set E.T. horizontal position
- ldx holdETScreenId ; get E.T. screen id before falling
- stx currentScreenId ; set the current screen id
- jsr SetCurrentScreenData
- .jmpToDetermineObjectToMove
- jmp DetermineObjectToMove
- .restrictETHorizMovement
- lda etMotionValues ; get E.T. motion value
- and #ET_MOTION_MASK
- ora #[~(MOVE_RIGHT & MOVE_LEFT) >> 4] & 15; don't allow E.T. to move horiz
- bne .setETPitMotionValue ; unconditional branch
- ETFallingInPit
- bpl .jmpToDetermineObjectToMove ; branch if E.T. not falling
- ldx etVertPos ; get E.T.'s vertical position
- cpx #49
- bcs ETReachedPitBottom
- inc etVertPos
- bne .jmpToDetermineObjectToMove ; unconditional branch
- ETReachedPitBottom SUBROUTINE
- lda #PLAY_SOUND_CHANNEL0 | $1F
- sta soundDataChannel0
- ldx #$02
- ldy #$69 ; reduce energy by 296 units for falling
- jsr DecrementETEnergy ; into pit
- lda #IN_PIT_BOTTOM
- sta etPitStatus ; set flag to show E.T. at pit bottom
- .jmpToDetermineObjectToMove
- jmp DetermineObjectToMove
- CheckIfOkayToMoveET
- bit playerState ; check player state
- bmi .jmpToDetermineObjectToMove ; branch if E.T. is dead
- ldx #0
- lda etMotionValues ; get E.T. motion value
- bpl .determineETFractionalDelay ; branch if E.T. not running
- inx
- .determineETFractionalDelay
- and #ET_MOTION_MASK
- cmp #$0F
- beq CheckToWrapETToAdjacentScreen; branch if E.T. not moving
- lda etFractionalDelay ; get E.T. fractional delay value
- clc
- adc ETFrameDelayTable,x
- sta etFractionalDelay ; set E.T. new fractional delay value
- bcc CheckToWrapETToAdjacentScreen; branch if not time to move E.T.
- lda etMotionValues ; get E.T. motion value
- ldx #1 ; move E.T.
- jsr ObjectDirectionCheck
- ldx #0
- ldy #1
- jsr DecrementETEnergy ; reduce energy by 1 unit
- lda etPitStatus ; get E.T. pit value flags
- bne DetermineObjectToMove ; branch if E.T. is in a pit
- lda etMotionValues ; get E.T. motion value
- bpl CheckToWrapETToAdjacentScreen; branch if E.T. not running
- ldx #1 ; move E.T. again because he's running
- jsr ObjectDirectionCheck
- ldx #0
- ldy #1
- jsr DecrementETEnergy ; reduce energy by 1 unit
- CheckToWrapETToAdjacentScreen
- ldx currentScreenId ; get the current screen id
- lda etHorizPos ; get E.T.'s horizontal position
- cmp #XMAX + 1
- bcc CheckToWrapETVertically ; branch if E.T. not on right screen border
- bpl CheckForETWrappingToRight
- lda LeftScreenIdHorizPosTable,x
- beq .setETVertPos ; never branches -- value never 0
- sta etHorizPos ; set E.T. horizontal position
- .setETVertPos
- lda LeftScreenIdVertPosTable,x
- beq .jmpToSetScreenIdToLeftScreen
- sta etVertPos ; set E.T. vertical position
- .jmpToSetScreenIdToLeftScreen
- lda LeftScreenIdTable,x
- jmp SetCurrentScreenId
- CheckForETWrappingToRight SUBROUTINE
- lda RightScreenIdHorizPosTable,x
- beq .setETVertPos
- sta etHorizPos ; set E.T. horizontal position
- .setETVertPos
- lda RightScreenIdVertPosTable,x
- beq .jmpToSetScreenIdToRightScreen
- sta etVertPos ; set E.T. vertical position
- .jmpToSetScreenIdToRightScreen
- lda RightScreenIdTable,x
- jmp SetCurrentScreenId
- CheckToWrapETVertically SUBROUTINE
- lda etVertPos ; get E.T.'s vertical position
- cmp #59
- bcc DetermineObjectToMove
- bpl CheckForETWrappingDown
- lda UpperScreenIdHorizPosTable,x
- beq .setETVertPos
- sta etHorizPos ; set E.T. horizontal position
- .setETVertPos
- lda UpperScreenIdVertPosTable,x
- beq .jmpToSetScreenIdToUpperScreen; never branches -- value never 0
- sta etVertPos ; set E.T. vertical position
- .jmpToSetScreenIdToUpperScreen
- lda UpperScreenIdTable,x
- jmp SetCurrentScreenId
- CheckForETWrappingDown SUBROUTINE
- lda LowerScreenIdHorizPosTable,x
- beq .setETVertPos
- sta etHorizPos ; set E.T. horizontal position
- .setETVertPos
- lda LowerScreenIdVertPosTable,x
- beq .jmpToSetScreenIdToLowerScreen; never branches -- value never 0
- sta etVertPos ; set E.T. vertical position
- .jmpToSetScreenIdToLowerScreen
- lda LowerScreenIdTable,x
- SetCurrentScreenId
- sta currentScreenId ; set the current screen id
- jsr SetCurrentScreenData
- DetermineObjectToMove
- bit mothershipStatus ; check Mothership status
- bmi CheckToLandMothership ; branch if Mothership is present
- jmp DetermineToMoveHumans
- CheckToLandMothership
- lda mothershipStatus ; get Mothership status
- bvs .mothershipPickingUpET
- ror ; shift D0 to carry
- bcs .mothershipLeavingWithoutET ; branch if Mothership leaving Earth
- lda frameCount ; get the current frame count
- and #3
- bne .playMothershipSound
- inc currentObjectVertPos ; move Mothership down 1 pixel
- inc etVertPos ; move E.T. down 1 pixel
- lda currentObjectVertPos ; get current object's vertical position
- bmi .playMothershipSound
- cmp #H_MOTHERSHIP
- bcc .playMothershipSound
- ror mothershipStatus ; rotate Mothership status right
- sec ; set carry and rotate Mothership status
- rol mothershipStatus ; left to set MOTHERSHIP_LEAVING status
- .playMothershipSound
- jsr PlayMothershipSound
- lda frameCount ; get the current frame count
- and #7
- bne .doneLandMothership
- ldx objectColorPtrs_0
- inx
- cpx #<MotherShipColors+6
- bcc .setMothershipColorPointer
- ldx #<MotherShipColors
- .setMothershipColorPointer
- stx objectColorPtrs_0
- .doneLandMothership
- jmp SetCurrentObjectXYCoordinates
- .mothershipLeavingWithoutET
- dec currentObjectVertPos ; move current object up 1 pixel
- lda currentObjectVertPos ; get current object vertical position
- bpl .playMothershipSound
- cmp #240
- bcs .playMothershipSound
- lda #$00
- sta mothershipStatus ; clear Mothership status flags
- sta graphicPointers+2
- beq .doneLandMothership ; unconditional branch
- .mothershipPickingUpET
- ror ; shift D0 to carry
- bcs .etGoingHome ; branch if Mothership leaving Earth
- lda frameCount ; get the current frame count
- and #3
- bne .playMothershipSound
- inc currentObjectVertPos ; move Mothership down 1 pixel
- lda #H_MOTHERSHIP * 2
- sec
- sbc currentObjectVertPos
- cmp #H_MOTHERSHIP / 2
- bcc .setMothershipHeightForLanding
- lda #H_MOTHERSHIP / 2
- .setMothershipHeightForLanding
- sta currentSpriteHeight
- lda etVertPos ; get E.T.'s vertical position
- clc ; carry clear so SBC is A = A - M ~C
- sbc #4 - 1 ; A = A - 4
- cmp currentObjectVertPos
- bne .playMothershipSound
- ror mothershipStatus ; rotate Mothership status right
- sec ; set carry and rotate Mothership status
- rol mothershipStatus ; left to set MOTHERSHIP_LEAVING status
- bne .playMothershipSound ; unconditional branch
- .etGoingHome
- dec etVertPos ; move E.T. up 1 pixel
- dec currentObjectVertPos ; move current object up 1 pixel
- lda #H_MOTHERSHIP * 2
- sec
- sbc currentObjectVertPos
- cmp #H_MOTHERSHIP / 2
- bcc .setMothershipHeightForLeaving
- lda #H_MOTHERSHIP / 2
- .setMothershipHeightForLeaving
- sta currentSpriteHeight
- lda currentObjectVertPos ; get current object's vertical position
- bpl .playMothershipSound
- cmp #240
- bcs .playMothershipSound
- lda #$00
- sta mothershipStatus ; clear Mothership status flags
- jsr SetCurrentScreenToETHome
- jmp SetCurrentObjectXYCoordinates
- DetermineToMoveHumans
- lda etNeckExtensionValues ; get neck extension value
- bmi .jmpToSetETGraphicPointers ; branch if E.T. neck extended
- lda #FRAME_DELAY_ONE_THIRD ; assume move humans 1 out of 3 frames
- bit SWCHB ; check console switch values
- bmi .calculateHumanMovementDelay ; branch if player 2 difficulty set to PRO
- lda #FRAME_DELAY_ONE_FIFTH ; move humans 1 out of 5 frames
- .calculateHumanMovementDelay
- clc
- adc humanFractionalDelay
- sta humanFractionalDelay
- bcs MoveHumanSprites
- .jmpToSetETGraphicPointers
- jmp SetETGraphicPointers
- MoveHumanSprites
- ldx #3
- MoveHumanLoop
- dex
- bmi .jmpToSetETGraphicPointers
- lda objectScreenId,x ; get the human's screen id
- bmi MoveHumanLoop
- cmp #ID_WASHINGTON_DC ; see if human is on WASHINGTON_DC screen
- bne .checkForHumanOnCurrentScreen
- ldy humanAttributes,x ; get the human's attributes
- bpl .checkForHumanOnCurrentScreen; branch if not returning home
- lda HumanTargetVertPosTable,x
- sta humanTargetVertPos
- ldy HumanTargetHorizPosTable,x
- sty humanTargetHorizPos
- cmp objectVertPos,x
- bne .moveHumanToHomeArea
- tya
- cmp objectHorizPos,x
- bne .moveHumanToHomeArea
- lda #<-1
- sta objectScreenId,x
- txa ; move object id to accumulator
- bne .checkForElliottHome ; branch if not FBI Agent
- lda #<(~FBI_HAS_PHONE_PIECE) ; have FBI Agent release phone piece
- and h_phonePieceAttribute
- sta h_phonePieceAttribute
- lda #<(~FBI_HAS_PHONE_PIECE)
- and s_phonePieceAttribute
- sta s_phonePieceAttribute
- lda #<(~FBI_HAS_PHONE_PIECE)
- and w_phonePieceAttribute
- sta w_phonePieceAttribute
- .checkForElliottHome
- cpx #ID_ELLIOTT
- bne .checkForScientistHome
- bit etMotionValues ; check E.T. motion value
- bvs .checkForScientistHome ; branch if E.T. carried by Scientist
- bit playerState ; check player state
- bmi .checkForScientistHome ; branch if E.T. is dead
- lda #ELLIOTT_HAS_PHONE_PIECE
- bit h_phonePieceAttribute
- bne .clearElliottReturnHomeFlag ; branch if Elliott has H phone piece
- bit s_phonePieceAttribute
- bne .clearElliottReturnHomeFlag ; branch if Elliott has S phone piece
- bit w_phonePieceAttribute
- beq .checkForScientistHome ; branch if Elliott has no phone pieces
- .clearElliottReturnHomeFlag
- rol elliottAttributes ; rotate Elliott attributes left and
- clc ; clear carry and rotate value right to
- ror elliottAttributes ; clear RETURN_HOME flag (i.e. D7 = 0)
- .checkForScientistHome
- cpx #ID_SCIENTIST
- bne .checkToClearCurrentHuman
- lda etMotionValues ; get E.T. motion value
- and #<(~ET_CARRIED_BY_SCIENTIST)
- sta etMotionValues ; release E.T. from Scientist
- .checkToClearCurrentHuman
- cpx currentObjectId
- bne MoveHumanLoop
- lda #<-1
- sta currentObjectId ; clear human as current object
- lda #0
- sta currentSpriteHeight
- beq MoveHumanLoop ; unconditional branch
- .moveHumanToHomeArea
- ldy #4 ; human to go to target area
- bne .moveHumanTowardTarget ; unconditional branch
- .checkForHumanOnCurrentScreen
- cmp currentScreenId
- bne MoveHumans
- ldy humanAttributes,x ; get human attribute value
- bmi MoveHumans ; branch if returning home
- lda objectVertPos,x
- cmp HumanVerticalMaxTable,x
- bcc .humanSeekOutET
- dec objectVertPos,x ; move human up 1 pixel
- .humanSeekOutET
- ldy #0
- .moveHumanTowardTarget
- jsr MoveHumanTowardTarget
- .nextHumanId
- jmp MoveHumanLoop
- MoveHumans
- lda humanAttributes,x ; get human attributes
- lsr ; shift MOVE_UP value to carry
- bcc MoveHumanUp
- lsr ; shift MOVE_DOWN value to carry
- bcc MoveHumanDown
- lsr ; shift MOVE_LEFT value to carry
- bcs .checkForMovingRight
- jmp MoveHumanLeft
- .checkForMovingRight
- lsr ; shift MOVE_RIGHT value to carry
- bcs .nextHumanId
- jmp MoveHumanRight
- MoveHumanUp SUBROUTINE
- dec objectVertPos,x ; move object up
- bpl .nextHuman ; branch if object still on screen
- ldy objectScreenId,x ; get the current screen id of the object
- lda UpperScreenIdTable,y
- jsr CheckForHumanOnScreen ; check to see if human on screen
- bcs .moveHumanDown2Pixels ; branch if human already on the screen
- sta objectScreenId,x ; set human's new screen id
- cpx currentObjectId ; see if the human is the current object
- bne .setHumanPosition ; branch if human not the current object
- lda #<-1
- sta currentObjectId ; clear human as current object (i.e. human
- lda #0 ; moved off current screen)
- sta currentSpriteHeight
- .setHumanPosition
- lda UpperScreenIdVertPosTable,y
- beq .setHumanHorizontalPosition
- cmp HumanVerticalMaxTable,x
- bcc .setHumanVerticalPosition
- lda HumanVerticalMaxTable,x
- sbc #1
- .setHumanVerticalPosition
- sta objectVertPos,x
- .setHumanHorizontalPosition
- lda UpperScreenIdHorizPosTable,y
- beq .checkToSetAsCurrentHuman
- sta objectHorizPos,x
- .checkToSetAsCurrentHuman
- lda objectScreenId,x ; get the object's screen id
- cmp currentScreenId ; see if object is on current screen
- bne .nextHuman ; branch if object not on current screen
- stx currentObjectId
- jsr SetCurrentObjectData
- .nextHuman
- jmp MoveHumanLoop
- .moveHumanDown2Pixels
- inc objectVertPos,x
- inc objectVertPos,x
- jmp MoveHumanLoop
- MoveHumanDown SUBROUTINE
- inc objectVertPos,x ; move object down
- lda HumanVerticalMaxTable,x ; get the object's vertical max value
- cmp objectVertPos,x ; compare with object vertical position
- bcs .moveNextHuman
- ldy objectScreenId,x ; get the current screen id of the object
- lda LowerScreenIdTable,y
- jsr CheckForHumanOnScreen ; check to see if human on screen
- bcs .moveHumanUp2Pixels ; branch if human already on the screen
- sta objectScreenId,x ; set human's new screen id
- cpx currentObjectId ; see if the human is the current object
- bne .setHumanPosition
- lda #<-1
- sta currentObjectId ; clear human as current object (i.e. human
- lda #0 ; moved off current screen)
- sta currentSpriteHeight
- .setHumanPosition
- lda LowerScreenIdVertPosTable,y
- beq .setHumanHorizontalPosition
- cmp HumanVerticalMaxTable,x
- bcc .setHumanVerticalPosition
- lda HumanVerticalMaxTable,x
- sbc #1
- .setHumanVerticalPosition
- sta objectVertPos,x
- .setHumanHorizontalPosition
- lda LowerScreenIdHorizPosTable,y
- beq .checkToSetAsCurrentHuman
- sta objectHorizPos,x
- .checkToSetAsCurrentHuman
- lda objectScreenId,x ; get the object's screen id
- cmp currentScreenId ; see if object is on current screen
- bne .moveNextHuman ; branch if object not on current screen
- stx currentObjectId
- jsr SetCurrentObjectData
- .moveNextHuman
- jmp MoveHumanLoop
- .moveHumanUp2Pixels
- dec objectVertPos,x
- dec objectVertPos,x
- jmp MoveHumanLoop
- MoveHumanLeft SUBROUTINE
- dec objectHorizPos,x ; move object left
- bpl .nextHuman
- ldy objectScreenId,x ; get the current screen id of the object
- lda LeftScreenIdTable,y
- jsr CheckForHumanOnScreen ; check to see if human on screen
- bcs .moveHumanRight2Pixels ; branch if human already on the screen
- sta objectScreenId,x ; set human's new screen id
- cpx currentObjectId ; see if the human is the current object
- bne .setHumanPosition
- lda #<-1
- sta currentObjectId ; clear human as current object (i.e. human
- lda #0 ; moved off current screen)
- sta currentSpriteHeight
- .setHumanPosition
- lda LeftScreenIdVertPosTable,y
- beq .setHumanHorizontalPosition
- cmp HumanVerticalMaxTable,x
- bcc .setHumanVerticalPosition
- lda HumanVerticalMaxTable,x
- sbc #1
- .setHumanVerticalPosition
- sta objectVertPos,x
- .setHumanHorizontalPosition
- lda LeftScreenIdHorizPosTable,y
- beq .checkToSetAsCurrentHuman
- sta objectHorizPos,x
- .checkToSetAsCurrentHuman
- lda objectScreenId,x ; get the object's screen id
- cmp currentScreenId ; see if object is on current screen
- bne .nextHuman ; branch if object not on current screen
- stx currentObjectId
- jsr SetCurrentObjectData
- .nextHuman
- jmp MoveHumanLoop
- .moveHumanRight2Pixels
- inc objectHorizPos,x
- inc objectHorizPos,x
- jmp MoveHumanLoop
- MoveHumanRight SUBROUTINE
- inc objectHorizPos,x ; move object right
- ldy objectHorizPos,x ; get the object's horizontal position
- cpy #XMAX + 1
- bcc .nextHuman
- ldy objectScreenId,x ; get the current screen id of the object
- lda RightScreenIdTable,y
- jsr CheckForHumanOnScreen ; check to see if human on screen
- bcs .moveHumanLeft2Pixels ; branch if human already on the screen
- sta objectScreenId,x ; set human's new screen id
- cpx currentObjectId ; see if the human is the current object
- bne .setHumanPosition
- lda #<-1
- sta currentObjectId ; clear human as current object (i.e. human
- lda #0 ; moved off current screen)
- sta currentSpriteHeight
- .setHumanPosition
- lda RightScreenIdVertPosTable,y
- beq .setHumanHorizontalPosition
- cmp HumanVerticalMaxTable,x
- bcc .setHumanVerticalPosition
- lda HumanVerticalMaxTable,x
- sbc #1
- .setHumanVerticalPosition
- sta objectVertPos,x
- .setHumanHorizontalPosition
- lda RightScreenIdHorizPosTable,y
- beq .checkToSetAsCurrentHuman
- sta objectHorizPos,x
- .checkToSetAsCurrentHuman
- lda objectScreenId,x ; get the object's screen id
- cmp currentScreenId ; see if object is on current screen
- bne .nextHuman ; branch if object not on current screen
- stx currentObjectId
- jsr SetCurrentObjectData
- .nextHuman
- jmp MoveHumanLoop
- .moveHumanLeft2Pixels
- dec objectHorizPos,x
- dec objectHorizPos,x
- jmp MoveHumanLoop
- SetETGraphicPointers
- bit playerState ; check player state
- bpl .setETGraphicPointersNotDead ; branch if E.T. is not dead
- lda #<ETDead_1
- sta etGraphicPointers1
- lda #<ETDead_0
- sta etGraphicPointers0
- lda #12 / 2
- sta etHeight
- bne .setETSpritePtrMSB ; unconditional branch
- .setETGraphicPointersNotDead
- lda etNeckExtensionValues ; get neck extension value
- bpl .setNormalETGraphicPointers ; branch if neck not extended
- and #3
- tax
- lda ETNeckExtensionHeightTable,x
- sta etHeight
- lda ETNeckExtensionLSBTable_A,x
- sta etGraphicPointers0
- lda ETNeckExtensionLSBTable_B,x
- sta etGraphicPointers1
- bne .setETSpritePtrMSB ; unconditional branch
- .setNormalETGraphicPointers
- lda #18 / 2
- sta etHeight
- lda SWCHA ; read joystick values
- cmp #P0_NO_MOVE
- bcs .setToETRestSpritePtrs ; branch if E.T. not moving
- lda #3
- bit etMotionValues ; check E.T. motion value
- bpl .determineETAnimationIndex ; branch if E.T. is not running
- lsr
- .determineETAnimationIndex
- and frameCount
- bne .setETSpritePtrMSB
- ldx etAnimationIndex ; get E.T. animation table index
- dex
- bpl .setETAnimationGraphicPtrs ; branch if index didn't wrap around
- ldx #2
- .setETAnimationGraphicPtrs
- stx etAnimationIndex
- lda ETAnimationLSBTable_A,x
- sta etGraphicPointers0
- lda ETAnimationLSBTable_B,x
- sta etGraphicPointers1
- bne .setETSpritePtrMSB ; unconditional branch
- .setToETRestSpritePtrs
- lda #<ETWalkSprite_A0
- sta etGraphicPointers0
- lda #<ETWalkSprite_B0
- sta etGraphicPointers1
- .setETSpritePtrMSB
- lda #>ETSprites
- sta etGraphicPointers0+1
- sta etGraphicPointers1+1
- SetSpecialSpriteForPit
- lda currentObjectId ; get the current object id
- cmp #$80 | ID_FLOWER
- bne DetermineObjectAnimationPtrs
- bit easterEggSpriteFlag ; check Easter Egg sprite flags
- bpl .setFlowerGrowthAnimation ; animate flower growth
- ldx #ID_INDY ; assume we are showing Indy sprite
- bvs .setEasterEggSpriteInfo ; branch if set current object data
- dex ; reduce object id to be Yar wings up
- lda frameCount ; get the current frame count
- and #2
- bne .setEasterEggSpriteInfo
- dex ; reduce object id to be Yar wings down
- .setEasterEggSpriteInfo
- jsr SetCurrentObjectData
- jmp SetCurrentObjectXYCoordinates
- .setFlowerGrowthAnimation
- lda flowerState ; get the flower state
- lsr ; move revive animation to lower nybbles
- lsr
- lsr
- lsr
- and #3
- tax
- lda FlowerAnimationLSBTable_A,x
- sta objectGraphicPtrs_0
- lda FlowerAnimationLSBTable_B,x
- sta objectGraphicPtrs_1
- jmp SetCurrentObjectXYCoordinates
- DetermineObjectAnimationPtrs
- ldx currentObjectId ; get the current object id
- bmi SetCurrentObjectXYCoordinates
- lda HumanAnimationRate,x ; get human animation rate
- and frameCount
- bne SetCurrentObjectXYCoordinates; skip animation if not time
- lda objectGraphicPtrs_0 ; get the object's graphic LSB value
- clc
- adc SpriteHeightValues,x ; increase by sprite height
- cmp HumanEndAnimationTable,x
- bcc .setHumanAnimationGraphicPtrs
- lda ObjectGraphicPointersLSB_0,x
- sta objectGraphicPtrs_0
- lda ObjectGraphicPointersLSB_1,x
- sta objectGraphicPtrs_1
- bne SetCurrentObjectXYCoordinates; unconditional branch
- .setHumanAnimationGraphicPtrs
- sta objectGraphicPtrs_0
- lda objectGraphicPtrs_1
- clc
- adc SpriteHeightValues,x
- sta objectGraphicPtrs_1
- SetCurrentObjectXYCoordinates
- lda currentScreenId ; get the current screen id
- cmp #ID_ET_HOME
- beq .setObjectsHorizPosition
- ldx currentObjectId ; get the current object id
- bmi .setObjectsHorizPosition
- lda objectVertPos,x
- sta currentObjectVertPos
- lda objectHorizPos,x
- sta currentObjectHorizPos
- .setObjectsHorizPosition
- lda etHorizPos ; get E.T.'s horizontal position
- pha ; push value on to stack
- lda #30
- sta etHorizPos ; set position for status icons
- jmp HorizPositionObjects
- SetCurrentScreenData
- ldx currentScreenId ; get the current screen id
- lda PlayfieldGraphicPointersMSB,x
- sta pf1GraphicPtrs+1
- sta pf2GraphicPtrs+1
- lda PF1GraphicPointersLSB,x
- sta pf1GraphicPtrs
- lda PF2GraphicPointersLSB,x
- sta pf2GraphicPtrs
- lda #$00
- sta easterEggSpriteFlag ; clear Easter Egg sprite flags
- sta programmerInitialFlag ; clear flag to show programmer initials
- ldy #<(~PHONE_PIECE_SCREEN_LOC)
- tya
- and h_phonePieceAttribute
- sta h_phonePieceAttribute
- tya
- and s_phonePieceAttribute
- sta s_phonePieceAttribute
- tya
- and w_phonePieceAttribute
- sta w_phonePieceAttribute
- lda #127
- sta etHeartVertPos
- sta phonePieceMapVertPos
- sta candyVertPos
- bit mothershipStatus ; check Mothership status
- bpl CheckToEnableETHeart ; branch if Mothership not present
- lda #<-1
- sta currentObjectId
- lda #61
- sta etHorizPos
- lda #244
- sta etVertPos
- lda #18 / 2
- sta etHeight
- lda #<ETWalkSprite_A0
- sta etGraphicPointers0
- lda #<ETWalkSprite_B0
- sta etGraphicPointers1
- lda #>ETSprites
- sta etGraphicPointers0+1
- sta etGraphicPointers1+1
- ldx #ID_MOTHERSHIP
- jsr SetCurrentObjectData
- lda #56
- sta currentObjectHorizPos
- lda #240
- sta currentObjectVertPos
- rts
- CheckToEnableETHeart
- cpx #ID_ET_HOME
- bne .checkForETInPit ; branch if E.T. not on HOME screen
- bit playerState ; check player state
- bpl .doneCheckForETHeart ; branch if E.T. is not dead
- lda #51
- sta etHeartVertPos
- lda #64
- sta etHeartHorizPos
- .doneCheckForETHeart
- rts
- .checkForETInPit
- cpx #ID_PIT
- beq PositionETInPit
- txa
- ldx #ID_SCIENTIST
- .findCurrentHumanLoop
- cmp objectScreenId,x ; see if human is on current screen
- beq .setCurrentHumanId ; if so then set current object attributes
- dex
- bpl .findCurrentHumanLoop
- lda #<-1
- sta currentObjectId
- lda #0
- sta currentSpriteHeight
- sta currentObjectVertPos
- beq CalculatePowerZonePointer ; unconditional branch
- .setCurrentHumanId
- stx currentObjectId ; set current object id
- jsr SetCurrentObjectData
- CalculatePowerZonePointer
- ldx currentScreenId ; get the current screen id
- cpx #ID_FOREST
- bcs .determinePowerZonePointerLSB; branch if not a well screen
- lda CandyStatusValueTable,x
- and candyStatus
- beq .determinePowerZonePointerLSB
- lda CandyVertPositionTable,x
- sta candyVertPos ; set candy vertical position
- lda CandyHorizPositionTable,x
- sta candyHorizPos ; set candy horizontal position
- .determinePowerZonePointerLSB
- lda currentScreenId ; get the current screen id
- cmp #ID_PIT
- bcs .doneCalculatePowerZonePointer; branch if in pit or game over
- lsr ; divide current screen id by 2
- tax
- lda powerZoneLSBValues,x
- bcs .multi8 ; branch if odd screen id (EIGHT_PITS, FOUR_PITS, WASH)
- lsr ; divide value by 2
- bpl .setPowerZonePointerLSB ; unconditional branch
- .multi8
- asl
- asl
- asl
- .setPowerZonePointerLSB
- and #$78
- sta powerZonePointer
- .doneCalculatePowerZonePointer
- rts
- CandyVertPositionTable
- .byte 32,32,32,32
- CandyHorizPositionTable
- .byte 60,60,38,38
- PositionETInPit
- lda #69
- sta etHorizPos
- lda #3
- sta etVertPos
- lda #FALLING_IN_PIT
- sta etPitStatus ; set status to show E.T. falling in a pit
- bit playerState ; check player state
- bmi .noObjectInCurrentPit ; branch if E.T. is dead
- ldx #NUM_PHONE_PIECES - 1
- .checkPhonePieceInCurrentPit
- lda phonePieceAttributes,x ; get phone piece attribute value
- and #<(~PHONE_PIECE_PIT_NUMBER)
- bne .checkNextPhonePiece ; branch if phone piece taken
- lda phonePieceAttributes,x ; get phone piece attribute value
- and #PHONE_PIECE_PIT_NUMBER ; keep phone piece pit number
- cmp currentPitNumber ; compare with current pit number
- beq .setCurrentObjectToPhonePiece; branch if phone piece in current pit
- .checkNextPhonePiece
- dex
- bpl .checkPhonePieceInCurrentPit
- lda flowerState ; get flower state
- and #FLOWER_PIT_NUMBER ; keep flower pit number
- cmp currentPitNumber ; compare with current pit number
- bne .noObjectInCurrentPit ; branch if flower not in current pit
- lda #$80 | ID_FLOWER
- bne .setCurrentObjectIdInPit ; unconditional branch
- .noObjectInCurrentPit
- ldx #<-1
- stx currentObjectId
- inx ; x = 0
- stx currentSpriteHeight
- rts
- .setCurrentObjectToPhonePiece
- txa
- adc #$80 | ID_H_PHONE_PIECE - 1
- .setCurrentObjectIdInPit
- sta currentObjectId
- and #$0F
- tax
- jsr SetCurrentObjectData
- lda #OBJECT_IN_PIT_Y
- sta currentObjectVertPos
- lda #OBJECT_IN_PIT_X
- sta currentObjectHorizPos
- rts
- BOUNDARY 0
- HMOVETable
- .byte HMOVE_R1,HMOVE_R2,HMOVE_R3,HMOVE_R4,HMOVE_R5,HMOVE_R6,HMOVE_R7
- COARSE_MOTION SET 0
- REPEAT 8
- COARSE_MOTION SET COARSE_MOTION + 1
- .byte HMOVE_L7 | COARSE_MOTION
- .byte HMOVE_L6 | COARSE_MOTION
- .byte HMOVE_L5 | COARSE_MOTION
- .byte HMOVE_L4 | COARSE_MOTION
- .byte HMOVE_L3 | COARSE_MOTION
- .byte HMOVE_L2 | COARSE_MOTION
- .byte HMOVE_L1 | COARSE_MOTION
- .byte HMOVE_0 | COARSE_MOTION
- .byte HMOVE_R1 | COARSE_MOTION
- .byte HMOVE_R2 | COARSE_MOTION
- .byte HMOVE_R3 | COARSE_MOTION
- .byte HMOVE_R4 | COARSE_MOTION
- .byte HMOVE_R5 | COARSE_MOTION
- .byte HMOVE_R6 | COARSE_MOTION
- .byte HMOVE_R7 | COARSE_MOTION
- REPEND
- Start
- ;
- ; Set up everything so the power up state is known.
- ;
- sei ; disable interrupts
- cld ; clear decimal mode
- ldx #$FF
- txs ; set stack to the beginning
- inx ; x = 0
- txa
- .clearLoop
- sta VSYNC,x
- dex
- bne .clearLoop
- lda #$01
- sta CTRLPF
- sta gameSelection ; set initial game selection to 1
- lda #>PowerZoneMap
- sta powerZonePointer+1
- lda #ORANGE+10
- sta telephoneColor
- lda #LT_BLUE+12
- sta powerZoneColor
- lda #BROWN+10
- sta timerColor
- lda #ID_TITLE_SCREEN
- sta currentScreenId ; set the current screen id
- jsr SetCurrentScreenData
- jmp StartNewFrame
- JumpToDisplayKernel SUBROUTINE
- .waitTime
- lda INTIM
- bne .waitTime
- sta WSYNC
- sta WSYNC
- lda #<DisplayKernel
- sta bankSwitchRoutinePtr
- lda #>DisplayKernel
- sta bankSwitchRoutinePtr+1
- lda #LDA_ABS
- sta displayKernelBankSwitch
- lda #<BANK1STROBE
- sta bankSwitchStrobe
- lda #>BANK1STROBE
- sta bankSwitchStrobe+1
- lda #JMP_ABS
- sta bankSwitchABSJmp
- jmp.w displayKernelBankSwitch
- ObjectDirectionCheck
- ror ; shift up motion flag to carry
- bcs .checkForDownMotion ; check down motion if not moving up
- dec currentObjectVertPos,x ; move object up
- .checkForDownMotion
- ror ; shift down motion flag to carry
- bcs .checkForLeftMotion ; check left motion if not moving down
- inc currentObjectVertPos,x ; move object down
- .checkForLeftMotion
- ror ; shift left motion flag to carry
- bcs .checkForRightMotion ; check right motion if not moving left
- dec currentObjectHorizPos,x ; move object left
- .checkForRightMotion
- ror ; shift right motion flag to carry
- bcs .doneObjectDirectionCheck ; done if not moving right
- inc currentObjectHorizPos,x ; move object right
- .doneObjectDirectionCheck
- rts
- MoveHumanTowardTarget
- lda objectVertPos,x ; get the object's vertical position
- cmp etVertPos,y ; compare with target's vertical position
- beq .checkTargetHorizPosition ; check horizontal position if the same
- bcs .moveObjectUpTowardTarget
- inc objectVertPos,x ; move object down
- bne .checkTargetHorizPosition ; unconditional branch
- .moveObjectUpTowardTarget
- dec objectVertPos,x ; move object up
- .checkTargetHorizPosition
- lda objectHorizPos,x ; get the object's horizontal position
- cmp etHorizPos,y ; compare with target's horizontal position
- beq .doneMoveHumanTowardTarget ; done if the same
- bcs .moveObjectLeftTowardTarget
- inc objectHorizPos,x ; move the object right
- .doneMoveHumanTowardTarget
- rts
- .moveObjectLeftTowardTarget
- dec objectHorizPos,x ; move the object left
- rts
- PhonePiecePitVertPosition
- .byte 19,32,32,44,11,32,32,52,21,21,45,45,15,15,47,47
- PhonePiecePitHorizPosition
- .byte 62,25,101,62,62,30,95,62,25,100,28,96,30,95,30,95
- .byte 0,0,0,0,0,10,9,11,0,6,5,7,0,14,13,15
- PlayfieldGraphicPointersMSB
- .byte >WideDiamondPitGraphics,>EightPitGraphics,>ArrowPitGraphics
- .byte >FourDiamondPitGraphics,>ForestGraphics,>WashingtonDCGraphics
- .byte >PitGraphics,>ETHomePFGraphics
- PF1GraphicPointersLSB
- .byte <WideDiamondPitPF1Graphics,<EightPitGraphics,<ArrowPitPF1Graphics
- .byte <FourDiamondPitGraphics,<ForestPF1Graphics,<WashingtonPF1Graphics
- .byte <PitPF1Graphics,<ETHomePF1Graphics
- PF2GraphicPointersLSB
- .byte <WideDiamondPitPF2Graphics,<EightPitGraphics,<ArrowPitPF2Graphics
- .byte <FourDiamondPitGraphics,<ForestPF2Graphics,<WashingtonPF2Graphics
- .byte <PitPF2Graphics,<ETHomePF2Graphics
- LeftScreenIdHorizPosTable
- .byte 119,119,119,119,68,68
- RightScreenIdHorizPosTable
- .byte 1,1,1,1,58,58
- UpperScreenIdHorizPosTable
- .byte 0,117,0,4,0,0
- LowerScreenIdHorizPosTable
- .byte 0,4,0,117,0,0
- LeftScreenIdVertPosTable
- .byte 0,0,0,0,4,53
- RightScreenIdVertPosTable
- .byte 0,0,0,0,4,53
- UpperScreenIdVertPosTable
- .byte 8,36,57,36,8,57
- LowerScreenIdVertPosTable
- .byte 2,28,50,28,2,50
- LeftScreenIdTable
- .byte ID_EIGHT_PITS,ID_ARROW_PITS,ID_WIDE_DIAMOND_PITS
- .byte ID_FOUR_DIAMOND_PITS,ID_WIDE_DIAMOND_PITS,ID_EIGHT_PITS
- RightScreenIdTable
- .byte ID_WIDE_DIAMOND_PITS,ID_FOUR_DIAMOND_PITS,ID_EIGHT_PITS
- .byte ID_ARROW_PITS,ID_EIGHT_PITS,ID_WIDE_DIAMOND_PITS
- UpperScreenIdTable
- .byte ID_FOREST,ID_FOREST,ID_FOREST,ID_FOREST
- .byte ID_FOUR_DIAMOND_PITS,ID_FOUR_DIAMOND_PITS
- LowerScreenIdTable
- .byte ID_WASHINGTON_DC,ID_WASHINGTON_DC,ID_WASHINGTON_DC
- .byte ID_WASHINGTON_DC,ID_ARROW_PITS,ID_ARROW_PITS
- HumanTargetHorizPosTable
- .byte FBI_AGENT_HORIZ_TARGET
- .byte ELLIOTT_HORIZ_TARGET
- .byte SCIENTIST_HORIZ_TARGET
- HumanTargetVertPosTable
- .byte FBI_AGENT_VERT_TARGET
- .byte ELLIOTT_VERT_TARGET
- .byte SCIENTIST_VERT_TARGET
- HumanVerticalMaxTable
- .byte FBI_AGENT_VERT_MAX
- .byte ELLIOTT_VERT_MAX
- .byte SCIENTIST_VERT_MAX
- FlowerAnimationLSBTable_A
- .byte <Flower_A0,<Flower_A1,<Flower_A2,<Flower_A3
- FlowerAnimationLSBTable_B
- .byte <Flower_B0,<Flower_B1,<Flower_B2,<Flower_B3
- ObjectGraphicPointersMSB
- .byte >FBIAgent_0,>Elliott_0,>Scientist_0,>H_PhonePiece_0,>S_PhonePiece_0
- .byte >W_PhonePiece_0,>Flower_A0,>MotherShip,>Yar_0,>Yar_1,>IndySprite
- ObjectGraphicPointersLSB_0
- .byte <FBIAgent_0,<Elliott_0,<Scientist_0,<H_PhonePiece_0,<S_PhonePiece_0
- .byte <W_PhonePiece_0,<Flower_A0,<MotherShip,<Yar_0,<Yar_1,<IndySprite
- ObjectGraphicPointersLSB_1
- .byte <FBIAgent_4,<Elliott_6,<Scientist_5,<H_PhonePiece_1,<S_PhonePiece_1
- .byte <W_PhonePiece_1,<Flower_B0,<MotherShip,<Yar_0,<Yar_1,<IndySprite
- ObjectColorPointersMSB
- .byte >FBIAgentColors_A
- .byte >ElliottColors_A
- .byte >ScientistColors_A
- .byte >PhonePieceColors_A
- .byte >PhonePieceColors_A
- .byte >PhonePieceColors_A
- .byte >FlowerColors
- .byte >MotherShipColors
- .byte >YarColor
- .byte >YarColor
- .byte >IndyColors
- ObjectColorPointersLSB_A
- .byte <FBIAgentColors_A
- .byte <ElliottColors_A
- .byte <ScientistColors_A
- .byte <PhonePieceColors_A
- .byte <PhonePieceColors_A
- .byte <PhonePieceColors_A
- .byte <FlowerColors
- .byte <MotherShipColors
- .byte <YarColor
- .byte <YarColor
- .byte <IndyColors
- ObjectColorPointersLSB_B
- .byte <FBIAgentColors_B
- .byte <ElliottColors_B
- .byte <ScientistColors_B
- .byte <PhonePieceColors_B
- .byte <PhonePieceColors_B
- .byte <PhonePieceColors_B
- .byte <FlowerColors
- .byte <MotherShipColors
- .byte <YarColor
- .byte <YarColor
- .byte <IndyColors
- HumanEndAnimationTable
- .byte <FBIAgent_4
- .byte <Elliott_5 + (H_ELLIOTT / 2) - 1
- .byte <Scientist_5
- SpriteHeightValues
- .byte H_FBIAGENT/2, H_ELLIOTT/2, H_SCIENTIST/2, H_PHONE_PIECES/2
- .byte H_PHONE_PIECES/2, H_PHONE_PIECES/2, H_FLOWER/2, H_MOTHERSHIP/2
- .byte H_YAR/2, H_YAR/2, H_INDY/2
- HumanAnimationRate
- .byte 3,3,3
- ETAnimationLSBTable_A
- .byte <ETWalkSprite_A0,<ETWalkSprite_A1,<ETWalkSprite_A2
- ETAnimationLSBTable_B
- .byte <ETWalkSprite_B0,<ETWalkSprite_B1,<ETWalkSprite_B2
- HumanDirectionTable
- .byte NO_MOVE,MOVE_LEFT>>4,MOVE_UP>>4,MOVE_RIGHT>>4,MOVE_UP>>4,MOVE_DOWN>>4
- .byte P0_NO_MOVE,P0_NO_MOVE,MOVE_RIGHT>>4,NO_MOVE,MOVE_LEFT>>4,MOVE_UP>>4
- .byte MOVE_UP>>4,MOVE_DOWN>>4,P0_NO_MOVE,P0_NO_MOVE
- .byte MOVE_UP>>4,MOVE_RIGHT>>4,NO_MOVE,MOVE_LEFT>>4,MOVE_UP>>4,MOVE_DOWN>>4
- .byte P0_NO_MOVE,P0_NO_MOVE,MOVE_LEFT>>4,MOVE_DOWN>>4,MOVE_RIGHT>>4,NO_MOVE
- .byte MOVE_UP>>4,MOVE_DOWN>>4,P0_NO_MOVE,P0_NO_MOVE
- .byte MOVE_UP>>4,MOVE_RIGHT>>4,MOVE_DOWN>>4,MOVE_LEFT>>4,NO_MOVE
- .byte MOVE_DOWN>>4,P0_NO_MOVE,P0_NO_MOVE,MOVE_UP>>4,MOVE_LEFT>>4
- .byte MOVE_DOWN>>4,MOVE_RIGHT>>4,MOVE_UP>>4,NO_MOVE,P0_NO_MOVE,P0_NO_MOVE
- ETFrameDelayTable
- .byte FRAME_DELAY_ONE_FORTH,FRAME_DELAY_ONE_HALF
- PowerZoneJumpTable
- .word SetPhonePieceHiddenLocation - 1
- .word WarpETLeft - 1
- .word WarpETRight - 1
- .word WarpETUp - 1
- .word WarpETDown - 1
- .word DetermineHiddenPhonePiece - 1
- .word EatCandyPiece - 1
- .word ReturnCurrentHumanHome - 1
- .word ClearElliottReturnHomeFlag - 1
- .word CallMothership - 1
- .word SetPhonePieceHiddenLocation - 1
- .word LevitateETOutOfPit - 1
- .word ReviveFlower - 1
- ETNeckExtensionLSBTable_A
- .byte <ETExtensionSprite_A0,<ETExtensionSprite_A1
- .byte <ETExtensionSprite_A2,<ETExtensionSprite_A3
- ETNeckExtensionLSBTable_B
- .byte <ETExtensionSprite_B0,<ETExtensionSprite_B1
- .byte <ETExtensionSprite_B2,<ETExtensionSprite_B3
- CandyStatusMaskTable
- .byte ~FOUR_DIAMOND_PITS_CANDY
- .byte ~EIGHT_PITS_CANDY
- .byte ~ARROW_PITS_CANDY
- .byte ~WIDE_DIAMOND_PITS_CANDY
- CandyStatusValueTable
- .byte FOUR_DIAMOND_PITS_CANDY
- .byte EIGHT_PITS_CANDY
- .byte ARROW_PITS_CANDY
- .byte WIDE_DIAMOND_PITS_CANDY
- ExtraCandyReductionTable
- .byte 4,3,3,2,3,2,2,1,3,2,2,1,2,1,1,0
- ETNeckExtensionHeightTable
- .byte 10,11,12,13
- PlayMothershipSound
- lda frameCount ; get the current frame count
- ora #$18
- sta AUDF0
- and #7
- sta AUDF1
- lda frameCount ; get the current frame count
- lsr
- and #$1F
- cmp #16
- bcc .setVolumeAndChannel
- eor #$0F
- .setVolumeAndChannel
- sta AUDV0
- eor #$0F
- sta AUDV1
- lda #$0F
- sta AUDC0
- lda #$0D
- sta AUDC1
- rts
- SetCurrentObjectData
- lda SpriteHeightValues,x
- sta currentSpriteHeight
- lda ObjectGraphicPointersLSB_0,x
- sta objectGraphicPtrs_0
- lda ObjectGraphicPointersLSB_1,x
- sta objectGraphicPtrs_1
- lda ObjectGraphicPointersMSB,x
- sta objectGraphicPtrs_0+1
- sta objectGraphicPtrs_1+1
- lda ObjectColorPointersLSB_A,x
- sta objectColorPtrs_0
- lda ObjectColorPointersLSB_B,x
- sta objectColorPtrs_1
- lda ObjectColorPointersMSB,x
- sta objectColorPtrs_0+1
- sta objectColorPtrs_1+1
- bit easterEggSpriteFlag ; check Easter Egg sprite flags
- bmi .doneSetCurrentObjectData ; branch if showing special object in pit
- lda objectHorizPos,x
- sta currentObjectHorizPos
- lda objectVertPos,x
- sta currentObjectVertPos
- .doneSetCurrentObjectData
- rts
- ThemeMusicFrequencyTable
- .byte LEAD_A3,LEAD_A3,LEAD_A3,LEAD_A3,LEAD_E4,LEAD_E4,LEAD_E4,LEAD_E4
- .byte LEAD_D4,LEAD_C4_SHARP,LEAD_H3,LEAD_C4_SHARP,LEAD_A3,LEAD_A3,LEAD_A3
- .byte LEAD_A3,LEAD_E3_2,LEAD_E3_2,LEAD_E3_2,LEAD_E3_2,LEAD_E3_2,LEAD_E3_2
- .byte LEAD_E3_2,LEAD_E3_2,LEAD_F3_SHARP,LEAD_F3_SHARP,LEAD_F3_SHARP
- .byte LEAD_F3_SHARP,LEAD_F4_SHARP,LEAD_F4_SHARP,LEAD_F4_SHARP,LEAD_F4_SHARP
- .byte LEAD_E4,LEAD_D4_SHARP,LEAD_C4_SHARP,LEAD_D4_SHARP,LEAD_H3,LEAD_H3
- .byte LEAD_H3,LEAD_H3,LEAD_F3_SHARP,LEAD_F3_SHARP,LEAD_F3_SHARP
- .byte LEAD_F3_SHARP,LEAD_G3_SHARP,LEAD_G3_SHARP,LEAD_G3_SHARP,LEAD_H3
- .byte LEAD_C4_SHARP,LEAD_A3,LEAD_E3_2,LEAD_E3_2,LEAD_E3_2,LEAD_E3_2
- .byte LEAD_E3_2
- BOUNDARY 0
- PowerZoneMap
- .byte ID_WARP_UP_ZONE << 4 | ID_RETURN_HOME_ZONE
- .byte ID_WARP_UP_ZONE << 4 | ID_CALL_SHIP_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_LANDING_ZONE
- .byte ID_FIND_PHONE_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_CALL_ELLIOTT_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_BLANK_ZONE
- .byte ID_EAT_CANDY_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_LANDING_ZONE << 4 | ID_EAT_CANDY_ZONE
- .byte ID_RETURN_HOME_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_BLANK_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_CALL_ELLIOTT_ZONE
- .byte ID_FIND_PHONE_ZONE << 4 | ID_CALL_SHIP_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_LANDING_ZONE << 4 | ID_BLANK_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_WARP_UP_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_EAT_CANDY_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_BLANK_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_FIND_PHONE_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_RETURN_HOME_ZONE
- .byte ID_CALL_SHIP_ZONE << 4 | ID_CALL_ELLIOTT_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_EAT_CANDY_ZONE << 4 | ID_FIND_PHONE_ZONE
- .byte ID_BLANK_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_LANDING_ZONE
- .byte ID_RETURN_HOME_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_CALL_ELLIOTT_ZONE
- .byte ID_CALL_SHIP_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_EAT_CANDY_ZONE << 4 | ID_CALL_ELLIOTT_ZONE
- .byte ID_CALL_SHIP_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_FIND_PHONE_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_WARP_UP_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_RETURN_HOME_ZONE << 4 | ID_LANDING_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_BLANK_ZONE
- .byte ID_WARP_UP_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_LANDING_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_WARP_UP_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_EAT_CANDY_ZONE
- .byte ID_CALL_ELLIOTT_ZONE << 4 | ID_CALL_SHIP_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_RETURN_HOME_ZONE
- .byte ID_FIND_PHONE_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_EAT_CANDY_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_CALL_ELLIOTT_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_FIND_PHONE_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_LANDING_ZONE
- .byte ID_WARP_UP_ZONE << 4 | ID_CALL_SHIP_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_RETURN_HOME_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_EAT_CANDY_ZONE
- .byte ID_RETURN_HOME_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_LANDING_ZONE << 4 | ID_FIND_PHONE_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_CALL_ELLIOTT_ZONE << 4 | ID_CALL_SHIP_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_LANDING_ZONE
- .byte ID_RETURN_HOME_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_BLANK_ZONE
- .byte ID_WARP_UP_ZONE << 4 | ID_CALL_ELLIOTT_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_FIND_PHONE_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_EAT_CANDY_ZONE
- .byte ID_CALL_SHIP_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_EAT_CANDY_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_CALL_SHIP_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_RETURN_HOME_ZONE << 4 | ID_LANDING_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_CALL_ELLIOTT_ZONE << 4 | ID_BLANK_ZONE
- .byte ID_FIND_PHONE_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_CALL_SHIP_ZONE << 4 | ID_EAT_CANDY_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_BLANK_ZONE
- .byte ID_WARP_UP_ZONE << 4 | ID_FIND_PHONE_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_WARP_UP_ZONE << 4 | ID_CALL_ELLIOTT_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_RETURN_HOME_ZONE
- .byte ID_LANDING_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_LANDING_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_RETURN_HOME_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_CALL_ELLIOTT_ZONE << 4 | ID_BLANK_ZONE
- .byte ID_EAT_CANDY_ZONE << 4 | ID_BLANK_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_FIND_PHONE_ZONE << 4 | ID_CALL_SHIP_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_FIND_PHONE_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_CALL_SHIP_ZONE << 4 | ID_EAT_CANDY_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_BLANK_ZONE
- .byte ID_LANDING_ZONE << 4 | ID_RETURN_HOME_ZONE
- .byte ID_CALL_ELLIOTT_ZONE << 4 | ID_BLANK_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_CALL_ELLIOTT_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_WARP_UP_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_FIND_PHONE_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_EAT_CANDY_ZONE << 4 | ID_CALL_SHIP_ZONE
- .byte ID_RETURN_HOME_ZONE << 4 | ID_LANDING_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_BLANK_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_WARP_RIGHT_ZONE
- .byte ID_CALL_SHIP_ZONE << 4 | ID_RETURN_HOME_ZONE
- .byte ID_CALL_ELLIOTT_ZONE << 4 | ID_FIND_PHONE_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_BLANK_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_EAT_CANDY_ZONE << 4 | ID_LANDING_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_WARP_DOWN_ZONE
- .byte ID_CALL_ELLIOTT_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_WARP_DOWN_ZONE << 4 | ID_WARP_UP_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_WARP_LEFT_ZONE
- .byte ID_EAT_CANDY_ZONE << 4 | ID_LANDING_ZONE
- .byte ID_WARP_RIGHT_ZONE << 4 | ID_CALL_SHIP_ZONE
- .byte ID_WARP_LEFT_ZONE << 4 | ID_FIND_PHONE_ZONE
- .byte ID_BLANK_ZONE << 4 | ID_RETURN_HOME_ZONE
- CheckForHumanOnScreen
- cmp fbiScreenId ; compare with FBI screen id
- beq .doneCheckForHumanOnScreen
- cmp elliottScreenId ; compare with Elliott screen id
- beq .doneCheckForHumanOnScreen
- cmp scientistScreenId ; compare with Scientist screen id
- beq .doneCheckForHumanOnScreen
- clc ; clear carry to show human not on screen
- .doneCheckForHumanOnScreen
- rts
- IncrementETEnergy
- sed
- sty energyIncTensValue
- lda etEnergy+1
- clc
- adc energyIncTensValue
- sta etEnergy+1
- stx energyIncHundredsValue
- lda etEnergy
- adc energyIncHundredsValue
- sta etEnergy
- bcc .doneEnergyIncrement
- lda #MAX_ENERGY
- sta etEnergy
- sta etEnergy+1
- .doneEnergyIncrement
- cld
- rts
- SetCurrentScreenToETHome
- lda #ID_ET_HOME
- sta currentScreenId ; set the current screen id
- sta frameCount
- jsr SetCurrentScreenData
- ldx #ID_ELLIOTT
- stx currentObjectId ; set Elliott on current screen
- jsr SetCurrentObjectData
- lda #60
- sta currentObjectHorizPos ; set Elliott's horizontal position
- sta etHorizPos ; set E.T. horizontal position
- lda #15
- sta currentObjectVertPos ; set Elliott's vertical position
- lda #48
- sta etVertPos ; set E.T. vertical position
- lda #$00
- sta collectedCandyScoring ; clear collected candy scoring flags
- sta etHomeElliottMovement ; clear Elliott movement flags
- rts
- DecrementETEnergy
- sty energyDecTensValue
- sed
- lda etEnergy+1
- sec
- sbc energyDecTensValue
- sta etEnergy+1
- stx energyDecHundredsValue
- lda etEnergy
- sbc energyDecHundredsValue
- sta etEnergy
- bcs .doneEnergyDecrement
- lda #$00
- sta etEnergy
- sta etEnergy+1
- rol playerState ; rotate E.T. death flag to carry
- sec ; set carry
- ror playerState ; rotate right to set E.T. death flag
- .doneEnergyDecrement
- cld
- rts
- IF COMPILE_VERSION = NTSC
- .org BANK0TOP + 4096 - 6, 0
- ELSE
- .org BANK0TOP + 4096 - 8, 0
- .byte 0, -1
- ENDIF
- .word Start
- .word Start
- .word Start
- ;============================================================================
- ; R O M - C O D E (BANK 1)
- ;============================================================================
- SEG Bank1
- .org BANK1TOP
- .rorg BANK1_REORG
- BANK1Start
- lda BANK0STROBE
- jmp Start
- .checkForEndGameKernel
- cpx #64 ; 2
- bcc .skipObjectDraw ; 2≥
- jmp ScoreKernel ; 3
- .skipObjectDraw
- lda #0 ; 2
- sta GRP0 ; 3 = @13
- sta nextObjectGraphicData ; 3
- lda frameCount ; 3 get the current frame count
- lsr ; 2
- and #$1F ; 2
- ora #$40 ; 2
- sta COLUP0 ; 3
- lda temp ; 3 waste 3 cycles
- nop ; 2
- jmp .checkToDrawET ; 3
- GameKernel
- cpx candyVertPos ; 3
- php ; 3 = @41 enable/disable BALL
- cpx phonePieceMapVertPos ; 3
- php ; 3 = @47 enable/disable M1
- cpx etHeartVertPos ; 3
- php ; 3 = @53 enable/disable M0
- inx ; 2 increment scan line count
- ldy nextETGraphicData ; 3
- JumpIntoGameKernel
- txa ; 2 move scan line count to accumulator
- sec ; 2
- sbc currentObjectVertPos ; 3 subtract object vertical position
- cmp currentSpriteHeight ; 3 compare with sprite height
- sty GRP1 ; 3 draw ET graphic data
- sta WSYNC
- ;--------------------------------------
- bcs .checkForEndGameKernel ; 2≥ skip object draw if greater
- tay ; 2
- lda (objectGraphicPtrs_0),y; 5
- sta GRP0 ; 3 = @12
- lda (objectColorPtrs_0),y ; 5
- sta COLUP0 ; 3 = @20
- lda (objectGraphicPtrs_1),y; 5
- sta nextObjectGraphicData ; 3
- lda (objectColorPtrs_1),y ; 5
- sta nextObjectColorData ; 3
- .checkToDrawET
- txa ; 2
- ldx #<ENABL ; 2
- txs ; 2 point stack to ENABL
- tax ; 2
- sec ; 2
- sbc etVertPos ; 3
- cmp etHeight ; 3
- bcs .skipETDraw ; 2≥
- tay ; 2
- lda (etGraphicPointers1),y ; 5
- sta nextETGraphicData ; 3
- lda (etGraphicPointers0),y ; 5
- sta GRP1 ; 3
- .drawNextObjectData
- sta WSYNC
- ;--------------------------------------
- lda nextObjectGraphicData ; 3
- sta GRP0 ; 3 = @06
- lda nextObjectColorData ; 3
- sta COLUP0 ; 3 = @12
- txa ; 2
- tay ; 2
- lda (pf1GraphicPtrs),y ; 5
- sta PF1 ; 3 = @24
- lda (pf2GraphicPtrs),y ; 5
- sta PF2 ; 3 = @32
- jmp GameKernel ; 3
- .skipETDraw
- lda #0 ; 2
- sta GRP1 ; 3 = @60
- sta nextETGraphicData ; 3
- beq .drawNextObjectData ; 3 unconditional branch
- TitleScreenKernel
- .waitLoop
- sta WSYNC
- ;--------------------------------------
- inx ; 2
- cpx #16 ; 2
- bcc .waitLoop ; 2≥
- lda #LT_RED+4 ; 2
- sta COLUP0 ; 3 = @11
- sta COLUP1 ; 3 = @14
- lda #MSBL_SIZE2 | QUAD_SIZE; 2
- sta NUSIZ0 ; 3 = @19
- sta NUSIZ1 ; 3 = @22
- lda #NO_REFLECT ; 2
- sta REFP0 ; 3 = @27
- sta REFP1 ; 3 = @30
- ldx #15 ; 2
- sta WSYNC
- ;--------------------------------------
- .drawETTitle
- lda ETTitle_E,x ; 4
- sta GRP0 ; 3 = @07
- lda ETTitle_T,x ; 4
- sta GRP1 ; 3 = @14
- cpx #2 ; 2
- bcs .nextETTileScanline ; 2≥
- lda #$0F ; 2 enable missiles for dots in E.T.
- sta ENAM0 ; 3 = @23
- sta ENAM1 ; 3 = @26
- .nextETTileScanline
- sta WSYNC
- ;--------------------------------------
- dex ; 2
- sta WSYNC
- ;--------------------------------------
- bpl .drawETTitle ; 2≥
- lda #0 ; 2
- sta GRP0 ; 3 = @07
- sta GRP1 ; 3 = @10
- sta ENAM0 ; 3 = @13
- sta ENAM1 ; 3 = @16
- ldx #47 ; 2
- .upperTitleWaitLoop
- sta WSYNC
- ;--------------------------------------
- inx ; 2
- cpx #64 ; 2
- bcc .upperTitleWaitLoop ; 2≥
- sta WSYNC
- ;--------------------------------------
- sta HMOVE ; 3
- lda #THREE_COPIES ; 2
- ldy #NO_REFLECT ; 2
- sty REFP1 ; 3 = @10
- sta NUSIZ0 ; 3 = @13
- sta NUSIZ1 ; 3 = @16
- sta VDELP0 ; 3 = @19 vertically delay players
- sta VDELP1 ; 3 = @22
- sty GRP0 ; 3 = @25 clear plaer graphics
- sty GRP1 ; 3 = @28
- sty GRP0 ; 3 = @31
- sty GRP1 ; 3 = @34
- nop ; 2
- sta RESP0 ; 3 = @39 coarse position player 0 to pixel 117
- sta RESP1 ; 3 = @42 coarse position player 1 to pixel 126
- sty HMP1 ; 3 = @45
- lda #HMOVE_R1 ; 2
- sta HMP0 ; 3 = @50 position player 0 to pixel 118
- sty REFP0 ; 3 = @53
- sta WSYNC
- ;--------------------------------------
- sta HMOVE ; 3
- lda #>TitleETGraphics ; 2
- sta graphicPointers+1 ; 3
- sta graphicPointers+3 ; 3
- sta graphicPointers+5 ; 3
- sta graphicPointers+7 ; 3
- sta graphicPointers+9 ; 3
- sta graphicPointers+11 ; 3
- lda #<TitleETGraphics_1 ; 2
- sta graphicPointers ; 3
- lda #<TitleETGraphics_2 ; 2
- sta graphicPointers+2 ; 3
- lda #<TitleETGraphics_3 ; 2
- sta graphicPointers+4 ; 3
- lda #<TitleETGraphics_4 ; 2
- sta graphicPointers+6 ; 3
- lda #<TitleETGraphics_5 ; 2
- sta graphicPointers+8 ; 3
- lda #<TitleETGraphics_0 ; 2
- sta graphicPointers+10 ; 3
- sta WSYNC
- ;--------------------------------------
- lda #LT_BROWN+10 ; 2
- sta COLUP0 ; 3 = @05
- sta COLUP1 ; 3 = @08
- lda #H_ET_GRAPH-1 ; 2
- sta loopCount ; 3
- jsr SixDigitKernel ; 6
- ldx #110 ; 2 = @08
- .lowerTitleWaitLoop
- sta WSYNC
- ;--------------------------------------
- inx ; 2
- cpx #128 ; 2
- bcc .lowerTitleWaitLoop ; 2≥
- ScoreKernel
- sta WSYNC
- ;--------------------------------------
- ldx #$FF ; 2
- txs ; 2 reset stack to beginning
- stx PF1 ; 3 = @07
- stx PF2 ; 3 = @10
- inx ; 2 x = 0
- stx GRP0 ; 3 = @15 clear player graphic data
- stx GRP1 ; 3 = @18
- stx ENAM0 ; 3 = @21 disable missile graphics
- stx ENAM1 ; 3 = @24
- stx ENABL ; 3 = @27 disable BALL
- sta WSYNC
- ;--------------------------------------
- lda frameCount ; 3 get the current frame count
- and #7 ; 2
- bne .skipFlowerAnimation ; 2≥
- lda flowerState ; 3 get flower state
- bpl .skipFlowerAnimation ; 2≥ branch if flower not revived
- and #<(~FLOWER_REVIVED) ; 2
- cmp #FLOWER_REVIVE_ANIMATION; 2
- bcs .skipFlowerAnimation ; 2≥
- adc #FLOWER_REVIVED | (1 * 16); 2 increment flower animation frame
- sta flowerState ; 3
- lda #PLAY_SOUND_CHANNEL0 | $03; 2
- sta soundDataChannel0 ; 3
- .skipFlowerAnimation
- sta WSYNC
- ;--------------------------------------
- lda #GREEN ; 2
- sta COLUP0 ; 3 = @05
- sta COLUP1 ; 3 = @08
- ldx #HMOVE_0 ; 2
- stx HMP0 ; 3 = @13
- sta WSYNC
- ;--------------------------------------
- stx PF0 ; 3 = @03 remove border from around screen
- stx COLUBK ; 3 = @06 set background color to BLACK
- stx PF1 ; 3 = @09
- stx PF2 ; 3 = @12
- sta WSYNC
- ;--------------------------------------
- sta HMOVE ; 3
- lda #THREE_COPIES ; 2
- ldy #NO_REFLECT ; 2
- sty REFP1 ; 3 = @10
- sta NUSIZ0 ; 3 = @13
- sta NUSIZ1 ; 3 = @16
- sta VDELP0 ; 3 = @19
- sta VDELP1 ; 3 = @22
- sty GRP0 ; 3 = @25
- sty GRP1 ; 3 = @28
- sty GRP0 ; 3 = @31
- sty GRP1 ; 3 = @34
- nop ; 2
- sta RESP0 ; 3 = @39 coarse position GRP0 to pixel 117
- sta RESP1 ; 3 = @42 coarse position GRP1 to pixel 126
- sty HMP1 ; 3 = @45
- lda #HMOVE_R1 ; 2
- sta HMP0 ; 3 = @50 GRP0 now set to pixel 127
- sty REFP0 ; 3 = @53
- sta WSYNC
- ;--------------------------------------
- sta HMOVE ; 3
- lda heldCandyPieces ; 3 get number of candy pieces held by E.T.
- sta tempNumberFonts ; 3
- lda etEnergy ; 3
- sta tempNumberFonts+1 ; 3
- lda etEnergy+1 ; 3
- sta tempNumberFonts+2 ; 3
- lda currentScreenId ; 3 get the current screen id
- cmp #ID_TITLE_SCREEN ; 2
- bne .setToShowScoreOrEnergy; 2≥
- bit gameState ; 3 check the game state
- bmi .setToShowScoreOrEnergy; 2≥ branch if player loss the game
- lda #>Copyright_0 ; 2 set to show copyright information
- bne .setGraphicPointersMSB ; 3 unconditional branch
- .setToShowScoreOrEnergy
- lda #>NumberFonts ; 2
- .setGraphicPointersMSB
- sta graphicPointers+1 ; 3
- sta graphicPointers+3 ; 3
- sta graphicPointers+5 ; 3
- sta graphicPointers+7 ; 3
- sta graphicPointers+9 ; 3
- sta graphicPointers+11 ; 3
- sta WSYNC
- ;--------------------------------------
- lda currentScreenId ; 3 get the current screen id
- cmp #ID_ET_HOME ; 2
- bcc .setGraphicPointers ; 2≥ branch if not showing the score
- lda playerScore ; 3
- sta tempNumberFonts ; 3
- lda playerScore+1 ; 3
- sta tempNumberFonts+1 ; 3
- lda playerScore+2 ; 3
- sta tempNumberFonts+2 ; 3
- .setGraphicPointers
- sta WSYNC
- ;--------------------------------------
- lda #LT_BLUE+10 ; 2
- sta COLUBK ; 3 = @05
- lda tempNumberFonts ; 3
- and #$F0 ; 2
- bne .setGraphicsPointerLSB ; 2≥
- lda #<Blank * 2 ; 2
- .setGraphicsPointerLSB
- lsr ; 2
- sta graphicPointers ; 3
- lda tempNumberFonts ; 3
- and #$0F ; 2
- asl ; 2
- asl ; 2
- asl ; 2
- sta graphicPointers+2 ; 3
- sta WSYNC
- ;--------------------------------------
- lda tempNumberFonts+1 ; 3
- and #$F0 ; 2
- lsr ; 2
- sta graphicPointers+4 ; 3
- lda tempNumberFonts+1 ; 3
- and #$0F ; 2
- asl ; 2
- asl ; 2
- asl ; 2
- sta graphicPointers+6 ; 3
- sta WSYNC
- ;--------------------------------------
- lda #SHOW_HSW_INITIALS_VALUE; 2
- cmp programmerInitialFlag ; 3
- bne .skipShowHSWInitials ; 2≥
- lda #[(<HSWInitials / 8) << 4] | [(<HSWInitials + 8) / 8]; 2
- sta tempNumberFonts+2 ; 3
- .skipShowHSWInitials
- lda tempNumberFonts+2 ; 3
- and #$F0 ; 2
- lsr ; 2
- sta graphicPointers+8 ; 3
- lda tempNumberFonts+2 ; 3
- and #$0F ; 2
- asl ; 2
- asl ; 2
- asl ; 2
- sta graphicPointers+10 ; 3
- sta WSYNC
- ;--------------------------------------
- ldy #<Blank ; 2
- ldx currentScreenId ; 3 get the current screen id
- cpx #ID_ET_HOME ; 2
- bcc .suppressZeroDigits ; 2≥ branch if not ET_HOME or TITLE_SCREEN
- cpy graphicPointers ; 3
- bne .checkToSetCopyrightInfo; 2≥
- lda graphicPointers+2 ; 3
- bne .checkToSetCopyrightInfo; 2≥
- sty graphicPointers+2 ; 3
- .suppressZeroDigits
- lda graphicPointers+4 ; 3
- bne .checkToSetCopyrightInfo; 2≥
- sty graphicPointers+4 ; 3
- lda graphicPointers+6 ; 3
- bne .checkToSetCopyrightInfo; 2≥
- sty graphicPointers+6 ; 3
- lda graphicPointers+8 ; 3
- bne .checkToSetCopyrightInfo; 2≥
- sty graphicPointers+8 ; 3
- .checkToSetCopyrightInfo
- sta WSYNC
- ;--------------------------------------
- lda #>Copyright_0 ; 2
- cmp graphicPointers+1 ; 3
- bne .skipSetCopyrightInfo ; 2≥
- lda #<BlankIcon ; 2
- sta graphicPointers ; 3
- lda #<Copyright_0 ; 2
- sta graphicPointers+2 ; 3
- lda #<Copyright_1 ; 2
- sta graphicPointers+4 ; 3
- lda #<Copyright_2 ; 2
- sta graphicPointers+6 ; 3
- lda #<Copyright_3 ; 2
- sta graphicPointers+8 ; 3
- lda #<Copyright_4 ; 2
- sta graphicPointers+10 ; 3
- .skipSetCopyrightInfo
- lda #H_FONT - 1 ; 2
- sta loopCount ; 3
- jsr SixDigitKernel ; 6
- sta WSYNC
- ;--------------------------------------
- lda #SELECT_MASK ; 2
- and SWCHB ; 4 check console switch value
- bne Overscan ; 2≥ branch if SELECT not pressed
- lda #SET_STARTING_SCREEN | ID_TITLE_SCREEN
- sta startingScreenId
- sta gameState
- lda #$00
- sta mothershipStatus ; clear Mothership status flags
- Overscan
- sta WSYNC
- sta WSYNC
- sta WSYNC
- sta WSYNC
- sta WSYNC
- ldx #$0F
- stx VBLANK ; disable TIA (D1 = 1)
- IF COMPILE_VERSION = NTSC
- jsr Waste12Cycles
- jsr Waste12Cycles
- ELSE
- nop ; waste 12 cycles
- nop
- nop
- nop
- nop
- nop
- ENDIF
- ldx #OVERSCAN_TIME
- stx TIM64T ; set timer for overscan period
- ror SWCHB ; shift RESET into carry
- bcs .clearResetHeldFlag ; branch if RESET not pressed
- lda #RESET_SWITCH_HELD
- bit fireResetStatus ; check RESET held status
- bvs .skipResetStatus ; branch if RESET held
- ora fireResetStatus ; set flag to show RESET held this frame
- sta fireResetStatus
- jmp StartNewGame
- .clearResetHeldFlag
- lda fireResetStatus
- and #<(~RESET_SWITCH_HELD)
- sta fireResetStatus
- .skipResetStatus
- jsr CheckForYarIndyOrHSWEasterEgg
- jsr CheckToFlyYarSprite
- jsr DetermineToShowArtistInitials
- lda soundDataChannel0 ; get sound data for channel 0
- bmi CheckToPlaySoundForChannel0 ; branch if playing sound for channel 0
- ldx currentObjectId ; get the current object id
- bmi .turnOffSoundChannel0 ; branch if not human or human not present
- lda currentScreenId ; get the current screen id
- cmp #ID_ET_HOME
- beq CheckToPlaySoundForChannel0 ; branch if E.T. is home
- lda frameCount ; get the current frame count
- and #$0F
- beq PlayHumanWalkingSound
- .turnOffSoundChannel0
- lda #PLAY_SOUND_CHANNEL0 | $00
- jmp .setChannel0SoundRegisters
- PlayHumanWalkingSound
- lda #19
- sta AUDC0
- bit frameCount
- bne .setHumanWalkingFrequency
- lda #22
- .setHumanWalkingFrequency
- sta AUDF0
- lda etHorizPos ; get E.T.'s horizontal position
- sbc currentObjectHorizPos ; subtract human's horizontal position
- bpl .setHorizDistanceRange
- eor #$FF ; get absolute value of horiz distance
- .setHorizDistanceRange
- sta humanETHorizDistRange
- lda etVertPos ; get E.T.'s vertical position
- sbc currentObjectVertPos ; subtract human's vertical position
- asl ; multiply value by 2
- bpl .compareVertAndHorizDistance
- eor #$FF ; get absolute value of vert distance
- .compareVertAndHorizDistance
- cmp humanETHorizDistRange
- bcs .divideDistanceRangeBy2
- lsr
- bpl .addWithHorizDistance ; unconditional branch
- .divideDistanceRangeBy2
- lsr humanETHorizDistRange
- .addWithHorizDistance
- clc
- adc humanETHorizDistRange
- bpl .determineHumanSoundVolume
- lda #0
- beq .setHumanWalkingVolume ; unconditional branch
- .determineHumanSoundVolume
- lsr
- lsr
- lsr
- eor #$0F
- .setHumanWalkingVolume
- sta AUDV0
- CheckToPlaySoundForChannel0
- lda soundDataChannel0 ; get sound data for channel 0
- bpl .setToDontSetChannel0Data ; branch if not player sound for channel 0
- .setChannel0SoundRegisters
- sta AUDC0 ; set sound channel 0 value
- sta AUDV0 ; set sound channel 0 volume
- sta AUDF0 ; set sound channel 0 frequency
- asl ; shift value left
- beq .setToDontSetChannel0Data ; branch if channel set to off this frame
- lda #PLAY_SOUND_CHANNEL0 | $00 ; turn off channel 0 sound next frame
- sta soundDataChannel0
- bne .doneCheckToPlaySoundChannel0; unconditional branch
- .setToDontSetChannel0Data
- lsr soundDataChannel0 ; shift value right (i.e. D7 = 0)
- .doneCheckToPlaySoundChannel0
- bit mothershipStatus ; check the Mothership status
- bmi .jmpToBANK0 ; branch if Mothership is present
- lda currentScreenId ; get the current screen id
- cmp #ID_ET_HOME
- beq DoETHomeProcessing ; branch if ET HOME screen
- cmp #ID_TITLE_SCREEN
- bne .jmpCheckForElliottToReviveET; branch if not on TITLE SCREEN
- bit INPT4 ; check player one fire button
- bmi .jmpToBANK0 ; branch if fire button not pressed
- jmp StartNewGame
- .jmpToBANK0
- jmp JumpToBank0
- .jmpCheckForElliottToReviveET
- jmp CheckForElliottToReviveET
- HeldCandyScoreLSB
- .byte $00,$90,$80,$70,$60,$50,$40,$30,$20,$10
- HeldCandyScoreMSB
- .byte $00,$04,$09,$14,$19,$24,$29,$34,$39,$44
- DoETHomeProcessing
- lda #3
- and frameCount
- bne .skipChangeElliottDirection
- bit etHomeElliottMovement ; check Elliott move values
- bpl .moveElliottLeft
- inc currentObjectHorizPos ; move Elliott right
- bne .checkToChangeElliottDirection; unconditional branch
- .moveElliottLeft
- dec currentObjectHorizPos ; move Elliott left
- .checkToChangeElliottDirection
- lda currentObjectHorizPos ; get Elliott's horizontal position
- sec
- sbc #28
- cmp #64
- bcc .skipChangeElliottDirection
- lda #MOVE_ELLIOTT_RIGHT
- eor etHomeElliottMovement ; flip the flag to determine if Elliott
- sta etHomeElliottMovement ; moves left or right on ET_HOME screen
- .skipChangeElliottDirection
- bit collectedCandyScoring ; check the collected candy scoring values
- bvs IncrementScoreForCollectedCandy; branch if scoring for collected candy
- lda frameCount ; get the current frame count
- cmp #96
- bne .checkToIncreaseScoreForHeldCandy
- ldy etEnergy+1
- ldx etEnergy
- jmp .incrementScore
- .checkToIncreaseScoreForHeldCandy
- cmp #192
- beq IncrementScoreForHeldCandy
- cmp #255
- bne .jmpToBranchToBANK0
- lda #COLLECT_CANDY_SCORE_INC
- ora collectedCandyScoring ; set flag so we increment score for
- sta collectedCandyScoring ; collected candy pieces
- bne .jmpToBranchToBANK0 ; unconditional branch
- IncrementScoreForHeldCandy
- lda heldCandyPieces ; get number of candy pieces held by E.T.
- lsr ; move upper nybbles to lower nybbles
- lsr
- lsr
- lsr
- tay
- ldx HeldCandyScoreMSB,y
- lda HeldCandyScoreLSB,y
- tay
- .incrementScore
- jsr IncrementScore
- lda #PLAY_SOUND_CHANNEL0 | $0C
- sta soundDataChannel0
- bne .jmpToBranchToBANK0 ; unconditional branch
- IncrementScoreForCollectedCandy
- ldy collectedCandyPieces ; get number of candy held by Elliott
- beq CheckIfPlayerWonGameRound ; branch if Elliott has no candy
- lda frameCount ; get the current frame count
- and #$1F
- bne .openCandyEatingAnimation
- dey ; reduce number of candy held by Elliott
- sty collectedCandyPieces
- lda #PLAY_SOUND_CHANNEL0 | $0F
- sta soundDataChannel0
- lda #6
- sta unknown ; this not used in the game
- lda #CLOSED_EATING_CANDY_ICON ; set collected candy scoring flag to
- ora collectedCandyScoring ; show closed eating candy animation
- sta collectedCandyScoring
- ldx #$07
- ldy #$70
- jsr IncrementScore ; increment score by 770 points
- .jmpToBranchToBANK0
- jmp .branchToBANK0
- .openCandyEatingAnimation
- cmp #$0F
- bne .jmpToBranchToBANK0
- lda #PLAY_SOUND_CHANNEL0 | $08
- sta soundDataChannel0
- lda collectedCandyScoring
- and #<(~CLOSED_EATING_CANDY_ICON); set collected candy scoring flag to
- sta collectedCandyScoring ; show open eating candy animation
- jmp .branchToBANK0
- CheckIfPlayerWonGameRound
- bit gameState ; check the game state
- bpl .checkToStartNextRound ; branch if player won this round
- lda #SET_STARTING_SCREEN | ID_TITLE_SCREEN
- sta startingScreenId ; set screen id to TITLE_SCREEN
- jmp JumpToBank0
- .checkToStartNextRound
- bit INPT4 ; check player one fire button
- bmi .jmpToBranchToBANK0 ; branch if fire button not pressed
- bpl .startNextGameRound ; unconditional branch
- StartNewGame
- lda #16
- sta extraCandyPieces
- sta gameState
- lda #INIT_NUM_TRIES - 1
- sta numberOfTries
- lda #0
- sta playerState ; reset player state
- sta collectedCandyPieces ; initialize number of collected candy
- sta mothershipStatus ; clear Mothership status flags
- sta etPitStatus ; clear E.T. pit status flags
- sta etNeckExtensionValues ; clear neck extension values
- sta etMotionValues ; clear E.T. motion value
- sta easterEggStatus ; clear Easter Egg status flags
- sta playerScore
- sta playerScore+1
- lda #$03
- sta playerScore+2 ; set initial score to 3
- .startNextGameRound
- rol fireResetStatus ; rotate fire button held status to carry
- sec ; set carry and rotate value right to set
- ror fireResetStatus ; fire button held status (i.e. D7 = 1)
- rol easterEggStatus ; rotate status left
- clc ; clear carry and rotate status right to
- ror easterEggStatus ; clear Easter Egg check done flag
- lda #SET_STARTING_SCREEN | ID_FOREST
- sta startingScreenId
- sta mothershipStatus
- lda #<-1
- sta fbiAttributes
- sta elliottAttributes
- sta scientistAttributes
- sta fbiAttributes
- sta elliottAttributes
- sta scientistAttributes
- sta shipLandingTimer
- lda #$0A
- sta heldCandyPieces
- lda frameCount ; get the current frame count
- eor secondTimer
- and #7
- cmp #ID_PIT
- bcc .setCallHomeScreenId ; branch if value less than ID_PIT
- sbc #ID_FOREST ; subtract value to get it below ID_PIT
- .setCallHomeScreenId
- sta callHomeScreenId
- lda secondTimer
- and #3
- tax
- lda frameCount ; get the current frame count
- and #FLOWER_PIT_NUMBER
- sta flowerState ; set flower pit number
- adc PsuedoRandomValueIncTable,x
- and #PHONE_PIECE_PIT_NUMBER
- sta s_phonePieceAttribute ; set S phone piece location
- adc PsuedoRandomValueIncTable,x
- and #PHONE_PIECE_PIT_NUMBER
- sta h_phonePieceAttribute ; set H phone piece location
- adc PsuedoRandomValueIncTable,x
- and #PHONE_PIECE_PIT_NUMBER
- sta w_phonePieceAttribute ; set W phone piece location
- lda frameCount ; get the current frame count
- and #3
- tax
- lda secondTimer
- sta powerZoneLSBValue_01
- adc PsuedoRandomValueIncTable,x
- sta powerZoneLSBValue_02
- adc PsuedoRandomValueIncTable,x
- sta powerZoneLSBValue_03
- lda extraCandyPieces ; get number of extra candy pieces
- cmp #31
- bcc .setStartingEnergyToMax
- sbc #31
- lsr ; divide value by 2
- tax
- lda NextRoundEnergyValues,x
- sta etEnergy
- sta etEnergy+1
- lda NextRoundScoreMSB,x
- tax
- ldy #$00
- jsr IncrementScore
- lda #31
- sta extraCandyPieces
- bne CheckForElliottToReviveET ; unconditional branch
- .setStartingEnergyToMax
- lda #MAX_ENERGY
- sta etEnergy
- sta etEnergy+1
- bne CheckForElliottToReviveET ; unconditional branch
- .branchToBANK0
- jmp JumpToBank0
- CheckForElliottToReviveET
- bit playerState ; check player state
- bpl JumpToBank0 ; branch if E.T. is not dead
- bvs JumpToBank0 ; branch if Elliott coming to revive E.T.
- lda #RETURN_HOME
- sta fbiAttributes ; set human objects to return home
- sta elliottAttributes
- sta scientistAttributes
- lda #$00
- sta etNeckExtensionValues ; clear neck extension values
- lda currentScreenId ; get the current screen id
- cmp #ID_PIT
- bne .setToSendElliottForET ; branch if E.T. not in a pit
- lda etPitStatus ; get E.T. pit status values
- and #IN_PIT_BOTTOM
- bne .setToSendElliottForET ; branch if E.T. reached bottom of pit
- lda #FALLING_IN_PIT
- sta etPitStatus ; set status to show E.T. falling in a pit
- ldx #<-1
- stx currentObjectId
- inx ; x = 0
- stx currentSpriteHeight
- .setToSendElliottForET
- lda #ELLIOTT_REVIVE_ET
- ora playerState
- sta playerState
- JumpToBank0
- lda #<SetScreenIdFromStartingScreen
- sta bankSwitchRoutinePtr
- lda #>SetScreenIdFromStartingScreen
- sta bankSwitchRoutinePtr+1
- lda #LDA_ABS
- sta displayKernelBankSwitch
- lda #<BANK0STROBE
- sta bankSwitchStrobe
- lda #>BANK0STROBE
- sta bankSwitchStrobe+1
- lda #JMP_ABS
- sta bankSwitchABSJmp
- jmp.w displayKernelBankSwitch
- IncrementScore
- sed
- sty pointsTensValue
- clc
- lda playerScore+2
- adc pointsTensValue
- sta playerScore+2
- stx pointsHundredsValue
- lda playerScore+1
- adc pointsHundredsValue
- sta playerScore+1
- lda playerScore
- adc #$00
- sta playerScore
- cld
- Waste12Cycles
- rts
- SixDigitKernel
- .sixDigitLoop
- ldy loopCount ; 3
- lda (graphicPointers),y ; 5
- sta GRP0 ; 3
- sta WSYNC
- ;--------------------------------------
- lda (graphicPointers+2),y ; 5
- sta GRP1 ; 3 = @08
- lda (graphicPointers+4),y ; 5
- sta GRP0 ; 3 = @16
- lda (graphicPointers+6),y ; 5
- sta tempCharHolder ; 3
- lda (graphicPointers+8),y ; 5
- tax ; 2
- lda (graphicPointers+10),y ; 5
- tay ; 2
- lda tempCharHolder ; 3
- sta GRP1 ; 3 = @34
- stx GRP0 ; 3 = @37
- sty GRP1 ; 3 = @40
- sty GRP0 ; 3 = @43
- dec loopCount ; 5
- bpl .sixDigitLoop ; 2≥
- lda #0 ; 2
- sta WSYNC
- ;--------------------------------------
- sta GRP0 ; 3 = @03
- sta GRP1 ; 3 = @06
- sta GRP0 ; 3 = @09
- sta GRP1 ; 3 = @12
- sta NUSIZ0 ; 3 = @15 set to show ONE_COPY of players
- sta NUSIZ1 ; 3 = @18
- sta VDELP0 ; 3 = @21 turn off vertical delay
- sta VDELP1 ; 3 = @24
- sta WSYNC
- ;--------------------------------------
- rts ; 6
- DisplayKernel
- StatusKernel
- lda #THREE_MED_COPIES ; 2
- sta NUSIZ1 ; 3
- lda #DK_PINK + 2 ; 2
- sta COLUBK ; 3
- lda #ENABLE_TIA ; 2
- sta WSYNC
- ;--------------------------------------
- sta VBLANK ; 3 enable TIA (D1 = 0)
- sta HMCLR ; 3
- sta CXCLR ; 3 clear all collisions
- lda #>GameIcons ; 2
- sta graphicPointers+1 ; 3
- sta graphicPointers+3 ; 3
- lda #>Telephone ; 2
- sta graphicPointers+5 ; 3
- sta WSYNC
- ;--------------------------------------
- ldx #NUM_PHONE_PIECES ; 2
- bit h_phonePieceAttribute ; 3 check H phone piece value
- bpl .checkForCarringSPiece ; 2≥ branch if E.T. not taken H piece
- dex ; 2
- .checkForCarringSPiece
- bit s_phonePieceAttribute ; 3 check S phone piece value
- bpl .checkForCarringWPiece ; 2≥ branch if E.T. not taken S piece
- dex ; 2
- .checkForCarringWPiece
- bit w_phonePieceAttribute ; 3 check W phone piece value
- bpl .setTelephoneIconLSB ; 2≥ branch if E.T. not taken W piece
- dex ; 2
- .setTelephoneIconLSB
- lda TelephoneIconLSBPtrs,x ; 4
- sta graphicPointers+4 ; 3
- sta WSYNC
- ;--------------------------------------
- lda #$00 ; 2
- ldy currentScreenId ; 3 get the current screen id
- cpy #ID_ET_HOME ; 2
- bcc .setupToDrawStatusIcons; 2≥
- sta graphicPointers+2 ; 3
- sta graphicPointers+4 ; 3
- bne .setupToDrawGameSelection; 2≥
- ldx #<EatCandyIcon_0 ; 2
- lda collectedCandyScoring ; 3 get collected candy scoring value
- ror ; 2 shift D0 to carry and branch if
- bcc .setEatingCandyLSB ; 2≥ showing open eating candy animation
- ldx #<EatCandyIcon_1 ; 2
- .setEatingCandyLSB
- stx graphicPointers ; 3
- bne .setupToDrawStatusIcons; 3 unconditional branch
- .setupToDrawGameSelection
- lda #>NumberFonts ; 2
- sta graphicPointers+1 ; 3
- lda gameSelection ; 3 get the current game selection
- asl ; 2 multiply game selection by 8 (i.e.
- asl ; 2 height of digits)
- asl ; 2
- sta graphicPointers ; 3
- .setupToDrawStatusIcons
- sta WSYNC
- ;--------------------------------------
- bit mothershipStatus ; 3 check Mothership status
- bpl .checkToDrawArtistInitials; 2≥ branch if Mothership not present
- lda #$00 ; 2
- sta graphicPointers+2 ; 3
- sta graphicPointers+4 ; 3
- .checkToDrawArtistInitials
- lda artistInitialFlag ; 3
- beq .prepareToDrawIndicators; 2≥
- lda #<ArtistInitials ; 2
- sta graphicPointers+2 ; 3
- .prepareToDrawIndicators
- lda #H_FONT - 1 ; 2
- sta loopCount ; 3
- .drawStatusKernelLoop
- ldy loopCount ; 3
- sta WSYNC
- ;--------------------------------------
- nop ; 2
- nop ; 2
- lda powerZoneColor ; 3 get power zone color
- pha ; 3 push power zone color to stack
- lda telephoneColor ; 3 get telephone color
- sta COLUP1 ; 3 = @16 color telephone icon
- lda (graphicPointers+4),y ; 5
- sta GRP1 ; 3 = @24
- lda (graphicPointers),y ; 5
- tax ; 2
- lda (graphicPointers+2),y ; 5
- tay ; 2
- pla ; 4 pull power zone color from stack
- sta COLUP1 ; 3 = @45 color power zone icon
- stx GRP1 ; 3 = @48
- lda timerColor ; 3 get the timer color
- sta COLUP1 ; 3 = @54 color timer icon
- sty GRP1 ; 3 = @57
- dec loopCount ; 5
- bpl .drawStatusKernelLoop ; 2≥
- sta WSYNC
- ;--------------------------------------
- lda #0 ; 2
- sta GRP1 ; 3 = @05
- sta NUSIZ1 ; 3 = @08
- sta WSYNC
- ;--------------------------------------
- sta WSYNC
- ;--------------------------------------
- sta WSYNC
- ;--------------------------------------
- lda #BLACK ; 2
- sta COLUBK ; 3 = @05
- ldx #<RESP1 - RESP0 ; 2
- sta WSYNC
- ;--------------------------------------
- nop ; 2
- nop ; 2
- lda etHMOVEValue ; 3
- lda etHMOVEValue ; 3
- sta HMP0,x ; 4 = @14
- and #$0F ; 2
- tay ; 2
- .coarsePositionET
- dey ; 2
- bpl .coarsePositionET ; 2≥
- sta RESP0,x ; 4
- sta WSYNC
- ;--------------------------------------
- sta HMOVE ; 3
- lda #MSBL_SIZE2 | PF_REFLECT; 2
- ldx currentScreenId ; 3 get the current screen id
- cpx #ID_WASHINGTON_DC ; 2
- bne .setPlayfieldPriority ; 2≥
- lda #MSBL_SIZE2 | PF_PRIORITY | PF_REFLECT; 2
- .setPlayfieldPriority
- sta CTRLPF ; 3
- ldx #$FF ; 2
- bit SWCHA ; 4 check joystick values
- bpl .setETReflectState ; 2≥ branch if joystick pushed right
- inx ; 2 x = 0
- .setETReflectState
- stx REFP1 ; 3
- ldx currentObjectId ; 3 get the current object id
- bmi .skipHumanReflection ; 2≥
- bit etMotionValues ; 3 check E.T. motion values
- bvs .skipHumanReflection ; 2≥ branch if E.T. carried by Scientist
- ldy #$FF ; 2
- lda humanAttributes,x ; 4 get human attribute value
- bpl .turnToFaceET ; 2≥ branch if not returning home
- lda HumanHorizReflectionTable,x; 4
- bne .determineHumanReflection; 3 unconditional branch
- .turnToFaceET
- lda etHorizPos ; 3 get E.T.'s horizontal position
- .determineHumanReflection
- cmp currentObjectHorizPos ; 3
- bcc .setHumanReflectState ; 2≥
- iny ; 2
- .setHumanReflectState
- sty REFP0 ; 3
- .skipHumanReflection
- sta WSYNC
- ;--------------------------------------
- ldx currentScreenId ; 3 get the current screen id
- cpx #ID_ET_HOME ; 2
- bne .determineETColorFromEnergy; 2≥
- bit etHomeElliottMovement ; 3 check Elliott movement value
- bpl .moveElliottBehindHouse; 2≥ branch if Elliott moving left
- lda #MSBL_SIZE2 | PF_REFLECT; 2
- sta CTRLPF ; 3
- bne .setCurrentObjectReflectState; 3 unconditional branch
- .moveElliottBehindHouse
- lda #MSBL_SIZE2 | PF_PRIORITY | PF_REFLECT; 2
- sta CTRLPF ; 3
- lda #$FF ; 2
- .setCurrentObjectReflectState
- sta REFP0 ; 3
- .determineETColorFromEnergy
- ldx #$00 ; 2
- bit playerState ; 3 check current player state
- bmi .setETColor ; 2≥ branch if E.T. is dead
- lda etEnergy ; 3 get E.T. energy level
- lsr ; 2 divide E.T. energy level by 32 to
- lsr ; 2 get E.T. color value
- lsr ; 2
- lsr ; 2
- lsr ; 2
- tax ; 2
- inx ; 2
- .setETColor
- lda ETColors,x ; 4
- sta COLUP1 ; 3 set E.T. color based on current state
- sta WSYNC
- ;--------------------------------------
- ldx currentScreenId ; 3 get the current screen id
- lda PlayfieldColors,x ; 4
- sta COLUPF ; 3 = @10
- ldy #$FF ; 2
- sty PF0 ; 3 = @15
- sty PF1 ; 3 = @18
- sty PF2 ; 3 = @21
- lda BackgroundColors,x ; 4
- sta COLUBK ; 3 = @28
- lda #MSBL_SIZE4 ; 2
- bit mothershipStatus ; 3 check Mothership status
- bpl .setCurrentObjectSize ; 2≥ branch if Mothership not present
- lda #MSBL_SIZE4 | DOUBLE_SIZE; 2 set Mothership to DOUBLE_SIZE
- .setCurrentObjectSize
- sta NUSIZ0 ; 3 = @40
- lda #MSBL_SIZE4 ; 2
- sta NUSIZ1 ; 3 = @45
- sta WSYNC
- ;--------------------------------------
- sta WSYNC
- ;--------------------------------------
- sta WSYNC
- ;--------------------------------------
- ldy currentScreenId ; 3 get the current screen id
- sta WSYNC
- ;--------------------------------------
- lda #$00 ; 2
- sta PF1 ; 3 = @05
- sta PF2 ; 3 = @08
- ldx KernelJumpTableIndex,y ; 4
- lda KernelJumpTable+1,x ; 4
- pha ; 3
- lda KernelJumpTable,x ; 4
- pha ; 3
- lda #0 ; 2
- tax ; 2
- tay ; 2
- sta nextETGraphicData ; 3
- sta nextObjectGraphicData ; 3
- sta nextObjectColorData ; 3
- rts ; 6
- CheckForYarIndyOrHSWEasterEgg
- lda flowerState ; get flower state
- and #$F0
- cmp #FLOWER_REVIVED | (1 * 16)
- bne .doneEasterEggCheck ; branch if flower not revived
- bit easterEggStatus
- bmi .doneEasterEggCheck ; branch if check done this round
- lda collectedCandyPieces ; get number of candy held by Elliott
- cmp #7
- bne .setEasterEggStepNotDone ; branch if not holding 7 pieces of candy
- lda easterEggStatus ; get Easter Egg status
- and #3
- cmp #3
- bne .checkIfETTookPhonePiece ; branch if first two steps not done
- lda #2
- .checkIfETTookPhonePiece
- tax
- lda phonePieceAttributes,x ; get phone piece attribute value
- bpl .setEasterEggStepNotDone ; branch if E.T. not taken phone piece
- ldx easterEggStatus ; get Easter Egg status
- cpx #2
- bcs .setEasterEggStepDone ; branch if at least two steps done
- lda EasterEggSpriteValues,x
- sta easterEggSpriteFlag
- lda #50
- sta currentObjectVertPos
- .setEasterEggStepDone
- sec
- bcs .setEasterEggStatusFlags ; unconditional branch
- .setEasterEggStepNotDone
- clc
- .setEasterEggStatusFlags
- lda easterEggStatus ; get Easter Egg status
- rol ; rotate carry flag into D0
- ora #DONE_EASTER_EGG_CHECK
- sta easterEggStatus ; show Easter Egg check done this round
- and #DONE_EASTER_EGG_STEPS
- cmp #DONE_EASTER_EGG_STEPS
- bne .doneEasterEggCheck ; branch if all steps not done
- lda #SHOW_HSW_INITIALS_VALUE ; set value to show HSW's initials :-)
- sta programmerInitialFlag
- .doneEasterEggCheck
- rts
- BOUNDARY 0
- TitleETGraphics
- TitleETGraphics_0
- .byte $D0 ; |XX.X....|
- .byte $00 ; |........|
- .byte $D0 ; |XX.X....|
- .byte $E0 ; |XXX.....|
- .byte $10 ; |...X....|
- .byte $E0 ; |XXX.....|
- .byte $50 ; |.X.X....|
- .byte $F0 ; |XXXX....|
- .byte $40 ; |.X......|
- .byte $F0 ; |XXXX....|
- .byte $A0 ; |X.X.....|
- .byte $D0 ; |XX.X....|
- .byte $A8 ; |X.X.X...|
- .byte $F4 ; |XXXX.X..|
- .byte $C8 ; |XX..X...|
- .byte $F0 ; |XXXX....|
- .byte $A8 ; |X.X.X...|
- .byte $D4 ; |XX.X.X..|
- .byte $EC ; |XXX.XX..|
- .byte $D8 ; |XX.XX...|
- .byte $74 ; |.XXX.X..|
- .byte $F8 ; |XXXXX...|
- .byte $B4 ; |X.XX.X..|
- .byte $F8 ; |XXXXX...|
- .byte $F4 ; |XXXX.X..|
- .byte $58 ; |.X.XX...|
- .byte $F8 ; |XXXXX...|
- .byte $D8 ; |XX.XX...|
- .byte $D0 ; |XX.X....|
- .byte $D0 ; |XX.X....|
- .byte $A0 ; |X.X.....|
- .byte $40 ; |.X......|
- .byte $80 ; |X.......|
- TitleETGraphics_1
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $01 ; |.......X|
- .byte $01 ; |.......X|
- .byte $03 ; |......XX|
- .byte $02 ; |......X.|
- .byte $07 ; |.....XXX|
- .byte $05 ; |.....X.X|
- .byte $07 ; |.....XXX|
- .byte $0D ; |....XX.X|
- .byte $0F ; |....XXXX|
- .byte $1D ; |...XXX.X|
- .byte $16 ; |...X.XX.|
- .byte $1F ; |...XXXXX|
- .byte $1B ; |...XX.XX|
- .byte $1D ; |...XXX.X|
- .byte $1E ; |...XXXX.|
- .byte $0F ; |....XXXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $03 ; |......XX|
- .byte $01 ; |.......X|
- .byte $00 ; |........|
- TitleETGraphics_2
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $01 ; |.......X|
- .byte $03 ; |......XX|
- .byte $06 ; |.....XX.|
- .byte $0D ; |....XX.X|
- .byte $08 ; |....X...|
- .byte $1B ; |...XX.XX|
- .byte $1B ; |...XX.XX|
- .byte $1F ; |...XXXXX|
- .byte $0F ; |....XXXX|
- .byte $2F ; |..X.XXXX|
- .byte $1F ; |...XXXXX|
- .byte $37 ; |..XX.XXX|
- .byte $3F ; |..XXXXXX|
- .byte $DB ; |XX.XX.XX|
- .byte $7F ; |.XXXXXXX|
- .byte $DD ; |XX.XXX.X|
- .byte $6F ; |.XX.XXXX|
- .byte $B5 ; |X.XX.X.X|
- .byte $1B ; |...XX.XX|
- .byte $1D ; |...XXX.X|
- .byte $17 ; |...X.XXX|
- .byte $3A ; |..XXX.X.|
- .byte $1D ; |...XXX.X|
- .byte $1A ; |...XX.X.|
- .byte $B5 ; |X.XX.X.X|
- .byte $5E ; |.X.XXXX.|
- .byte $F5 ; |XXXX.X.X|
- .byte $6B ; |.XX.X.XX|
- .byte $A7 ; |X.X..XXX|
- .byte $5F ; |.X.XXXXX|
- .byte $BF ; |X.XXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $FE ; |XXXXXXX.|
- .byte $7B ; |.XXXX.XX|
- TitleETGraphics_3
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $7F ; |.XXXXXXX|
- .byte $C0 ; |XX......|
- .byte $AA ; |X.X.X.X.|
- .byte $7F ; |.XXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $EF ; |XXX.XXXX|
- .byte $00 ; |........|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $DF ; |XX.XXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $DF ; |XX.XXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $DF ; |XX.XXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $FD ; |XXXXXX.X|
- .byte $27 ; |..X..XXX|
- .byte $25 ; |..X..X.X|
- .byte $FE ; |XXXXXXX.|
- .byte $FB ; |XXXXX.XX|
- .byte $FE ; |XXXXXXX.|
- .byte $7B ; |.XXXX.XX|
- .byte $D6 ; |XX.X.XX.|
- .byte $BF ; |X.XXXXXX|
- .byte $D7 ; |XX.X.XXX|
- .byte $EF ; |XXX.XXXX|
- .byte $D7 ; |XX.X.XXX|
- .byte $FF ; |XXXXXXXX|
- .byte $D7 ; |XX.X.XXX|
- .byte $E7 ; |XXX..XXX|
- .byte $D3 ; |XX.X..XX|
- .byte $A1 ; |X.X....X|
- .byte $80 ; |X.......|
- .byte $00 ; |........|
- TitleETGraphics_4
- .byte $01 ; |.......X|
- .byte $00 ; |........|
- .byte $81 ; |X......X|
- .byte $C1 ; |XX.....X|
- .byte $61 ; |.XX....X|
- .byte $30 ; |..XX....|
- .byte $98 ; |X..XX...|
- .byte $9E ; |X..XXXX.|
- .byte $0F ; |....XXXX|
- .byte $E7 ; |XXX..XXX|
- .byte $F7 ; |XXXX.XXX|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $ED ; |XXX.XX.X|
- .byte $FA ; |XXXXX.X.|
- .byte $F7 ; |XXXX.XXX|
- .byte $EF ; |XXX.XXXX|
- .byte $BF ; |X.XXXXXX|
- .byte $FD ; |XXXXXX.X|
- .byte $5A ; |.X.XX.X.|
- .byte $FF ; |XXXXXXXX|
- .byte $D5 ; |XX.X.X.X|
- .byte $A2 ; |X.X...X.|
- .byte $63 ; |.XX...XX|
- .byte $E3 ; |XXX...XX|
- .byte $67 ; |.XX..XXX|
- .byte $E3 ; |XXX...XX|
- .byte $A2 ; |X.X...X.|
- .byte $D5 ; |XX.X.X.X|
- .byte $7F ; |.XXXXXXX|
- .byte $AA ; |X.X.X.X.|
- .byte $D5 ; |XX.X.X.X|
- .byte $FB ; |XXXXX.XX|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $2A ; |..X.X.X.|
- TitleETGraphics_5
- .byte $FF ; |XXXXXXXX|
- .byte $15 ; |...X.X.X|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $4A ; |.X..X.X.|
- .byte $BF ; |X.XXXXXX|
- .byte $5F ; |.X.XXXXX|
- .byte $2D ; |..X.XX.X|
- .byte $57 ; |.X.X.XXX|
- .byte $BB ; |X.XXX.XX|
- .byte $DD ; |XX.XXX.X|
- .byte $EE ; |XXX.XXX.|
- .byte $FB ; |XXXXX.XX|
- .byte $DD ; |XX.XXX.X|
- .byte $EE ; |XXX.XXX.|
- .byte $FF ; |XXXXXXXX|
- .byte $57 ; |.X.X.XXX|
- .byte $FF ; |XXXXXXXX|
- .byte $BF ; |X.XXXXXX|
- .byte $EB ; |XXX.X.XX|
- .byte $B5 ; |X.XX.X.X|
- .byte $DF ; |XX.XXXXX|
- .byte $EA ; |XXX.X.X.|
- .byte $FF ; |XXXXXXXX|
- .byte $5A ; |.X.XX.X.|
- .byte $FF ; |XXXXXXXX|
- .byte $6D ; |.XX.XX.X|
- .byte $F7 ; |XXXX.XXX|
- .byte $BE ; |X.XXXXX.|
- .byte $5F ; |.X.XXXXX|
- .byte $B6 ; |X.XX.XX.|
- .byte $7E ; |.XXXXXX.|
- .byte $F6 ; |XXXX.XX.|
- .byte $F5 ; |XXXX.X.X|
- .byte $F4 ; |XXXX.X..|
- .byte $E8 ; |XXX.X...|
- .byte $D0 ; |XX.X....|
- .byte $80 ; |X.......|
- .byte $00 ; |........|
- .byte $00 ; |........|
- NextRoundScoreMSB
- .byte $00,$10,$22,$34,$45,$63,$78,$99
- NextRoundEnergyValues
- .byte $99,$92,$84,$76,$68,$59,$51,$42
- ETColors
- .byte WHITE,DK_GREEN+14,DK_GREEN+12,DK_GREEN+10
- .byte DK_GREEN+10,DK_GREEN+10,BLACK
- WideDiamondPitGraphics
- WideDiamondPitPF1Graphics
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- KernelJumpTableIndex
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $02 ; |......X.|
- .byte $02 ; |......X.|
- .byte $02 ; |......X.|
- .byte $02 ; |......X.|
- .byte $02 ; |......X.|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $07 ; |.....XXX|
- .byte $02 ; |......X.|
- .byte $02 ; |......X.|
- .byte $02 ; |......X.|
- .byte $02 ; |......X.|
- .byte $02 ; |......X.|
- WideDiamondPitPF2Graphics
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $80 ; |X.......|
- .byte $C0 ; |XX......|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $C0 ; |XX......|
- .byte $80 ; |X.......|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $01 ; |.......X|
- .byte $01 ; |.......X|
- .byte $01 ; |.......X|
- .byte $01 ; |.......X|
- .byte $01 ; |.......X|
- .byte $01 ; |.......X|
- .byte $01 ; |.......X|
- .byte $01 ; |.......X|
- .byte $01 ; |.......X|
- .byte $01 ; |.......X|
- .byte $01 ; |.......X|
- .byte $01 ; |.......X|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $80 ; |X.......|
- .byte $C0 ; |XX......|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $C0 ; |XX......|
- .byte $80 ; |X.......|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- ForestGraphics
- ForestPF1Graphics
- .byte $AA ; |X.X.X.X.|
- .byte $55 ; |.X.X.X.X|
- .byte $AB ; |X.X.X.XX|
- .byte $57 ; |.X.X.XXX|
- .byte $A2 ; |X.X...X.|
- .byte $C1 ; |XX.....X|
- .byte $C0 ; |XX......|
- .byte $55 ; |.X.X.X.X|
- .byte $A2 ; |X.X...X.|
- .byte $C1 ; |XX.....X|
- .byte $C0 ; |XX......|
- .byte $55 ; |.X.X.X.X|
- .byte $A2 ; |X.X...X.|
- .byte $C1 ; |XX.....X|
- .byte $C0 ; |XX......|
- .byte $55 ; |.X.X.X.X|
- .byte $A2 ; |X.X...X.|
- .byte $C1 ; |XX.....X|
- .byte $D0 ; |XX.X....|
- .byte $55 ; |.X.X.X.X|
- .byte $BA ; |X.XXX.X.|
- .byte $7D ; |.XXXXX.X|
- .byte $FC ; |XXXXXX..|
- .byte $55 ; |.X.X.X.X|
- .byte $BA ; |X.XXX.X.|
- .byte $7D ; |.XXXXX.X|
- .byte $FE ; |XXXXXXX.|
- .byte $54 ; |.X.X.X..|
- .byte $38 ; |..XXX...|
- .byte $7D ; |.XXXXX.X|
- .byte $FE ; |XXXXXXX.|
- .byte $54 ; |.X.X.X..|
- .byte $38 ; |..XXX...|
- .byte $7D ; |.XXXXX.X|
- .byte $FE ; |XXXXXXX.|
- .byte $54 ; |.X.X.X..|
- .byte $38 ; |..XXX...|
- .byte $55 ; |.X.X.X.X|
- .byte $AA ; |X.X.X.X.|
- .byte $55 ; |.X.X.X.X|
- .byte $2B ; |..X.X.XX|
- .byte $47 ; |.X...XXX|
- .byte $83 ; |X.....XX|
- .byte $01 ; |.......X|
- .byte $AB ; |X.X.X.XX|
- .byte $47 ; |.X...XXX|
- .byte $83 ; |X.....XX|
- .byte $01 ; |.......X|
- .byte $AB ; |X.X.X.XX|
- .byte $47 ; |.X...XXX|
- .byte $83 ; |X.....XX|
- .byte $01 ; |.......X|
- .byte $AB ; |X.X.X.XX|
- .byte $47 ; |.X...XXX|
- .byte $83 ; |X.....XX|
- .byte $01 ; |.......X|
- .byte $AB ; |X.X.X.XX|
- .byte $C5 ; |XX...X.X|
- .byte $82 ; |X.....X.|
- .byte $C1 ; |XX.....X|
- .byte $EA ; |XXX.X.X.|
- .byte $E5 ; |XXX..X.X|
- .byte $AA ; |X.X.X.X.|
- .byte $D5 ; |XX.X.X.X|
- ForestPF2Graphics
- .byte $55 ; |.X.X.X.X|
- .byte $AB ; |X.X.X.XX|
- .byte $57 ; |.X.X.XXX|
- .byte $2F ; |..X.XXXX|
- .byte $15 ; |...X.X.X|
- .byte $0B ; |....X.XX|
- .byte $55 ; |.X.X.X.X|
- .byte $2A ; |..X.X.X.|
- .byte $15 ; |...X.X.X|
- .byte $0E ; |....XXX.|
- .byte $5F ; |.X.XXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $15 ; |...X.X.X|
- .byte $0E ; |....XXX.|
- .byte $5F ; |.X.XXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $15 ; |...X.X.X|
- .byte $0E ; |....XXX.|
- .byte $5F ; |.X.XXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $15 ; |...X.X.X|
- .byte $0E ; |....XXX.|
- .byte $5F ; |.X.XXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $55 ; |.X.X.X.X|
- .byte $AE ; |X.X.XXX.|
- .byte $54 ; |.X.X.X..|
- .byte $A8 ; |X.X.X...|
- .byte $D0 ; |XX.X....|
- .byte $EA ; |XXX.X.X.|
- .byte $F4 ; |XXXX.X..|
- .byte $A8 ; |X.X.X...|
- .byte $D0 ; |XX.X....|
- .byte $EA ; |XXX.X.X.|
- .byte $F4 ; |XXXX.X..|
- .byte $A8 ; |X.X.X...|
- .byte $D0 ; |XX.X....|
- .byte $EA ; |XXX.X.X.|
- .byte $F4 ; |XXXX.X..|
- .byte $A8 ; |X.X.X...|
- .byte $D1 ; |XX.X...X|
- .byte $EB ; |XXX.X.XX|
- .byte $F7 ; |XXXX.XXX|
- .byte $AA ; |X.X.X.X.|
- .byte $D5 ; |XX.X.X.X|
- .byte $EB ; |XXX.X.XX|
- .byte $C7 ; |XX...XXX|
- .byte $82 ; |X.....X.|
- .byte $81 ; |X......X|
- .byte $AB ; |X.X.X.XX|
- .byte $47 ; |.X...XXX|
- .byte $82 ; |X.....X.|
- .byte $01 ; |.......X|
- .byte $AB ; |X.X.X.XX|
- .byte $47 ; |.X...XXX|
- .byte $8A ; |X...X.X.|
- .byte $1D ; |...XXX.X|
- .byte $BE ; |X.XXXXX.|
- .byte $7F ; |.XXXXXXX|
- .byte $AA ; |X.X.X.X.|
- .byte $1D ; |...XXX.X|
- .byte $BE ; |X.XXXXX.|
- .byte $7F ; |.XXXXXXX|
- .byte $AA ; |X.X.X.X.|
- KernelJumpTable
- .word JumpIntoGameKernel-1
- .word TitleScreenKernel-1
- PsuedoRandomValueIncTable
- .byte 115,13,91,213
- BOUNDARY 0
- ETSprites
- ETWalkSprite_A0
- .byte $FE ; |XXXXXXX.|
- .byte $FF ; |XXXXXXXX|
- .byte $C3 ; |XX....XX|
- .byte $0F ; |....XXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $2B ; |..X.X.XX|
- .byte $E7 ; |XXX..XXX|
- .byte $00 ; |........|
- ETExtensionSprites_A
- ETExtensionSprite_A0
- .byte $FE ; |XXXXXXX.|
- .byte $FF ; |XXXXXXXX|
- .byte $C3 ; |XX....XX|
- .byte $03 ; |......XX|
- .byte $0F ; |....XXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $2B ; |..X.X.XX|
- .byte $E7 ; |XXX..XXX|
- .byte $00 ; |........|
- ETExtensionSprite_A1
- .byte $FE ; |XXXXXXX.|
- .byte $FF ; |XXXXXXXX|
- .byte $C3 ; |XX....XX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $0F ; |....XXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $2B ; |..X.X.XX|
- .byte $E7 ; |XXX..XXX|
- .byte $00 ; |........|
- ETExtensionSprite_A2
- .byte $FE ; |XXXXXXX.|
- .byte $FF ; |XXXXXXXX|
- .byte $C3 ; |XX....XX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $0F ; |....XXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $2B ; |..X.X.XX|
- .byte $E7 ; |XXX..XXX|
- .byte $00 ; |........|
- ETExtensionSprite_A3
- .byte $FE ; |XXXXXXX.|
- .byte $FF ; |XXXXXXXX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $0F ; |....XXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $2B ; |..X.X.XX|
- .byte $E7 ; |XXX..XXX|
- .byte $00 ; |........|
- ETWalkSprite_B0
- .byte $BF ; |X.XXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $03 ; |......XX|
- .byte $1F ; |...XXXXX|
- .byte $BF ; |X.XXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $63 ; |.XX...XX|
- .byte $00 ; |........|
- .byte $00 ; |........|
- ETExtensionSprites_B
- ETExtensionSprite_B0
- .byte $BF ; |X.XXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $1F ; |...XXXXX|
- .byte $BF ; |X.XXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $63 ; |.XX...XX|
- .byte $00 ; |........|
- .byte $00 ; |........|
- ETExtensionSprite_B1
- .byte $BF ; |X.XXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $1F ; |...XXXXX|
- .byte $BF ; |X.XXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $63 ; |.XX...XX|
- .byte $00 ; |........|
- .byte $00 ; |........|
- ETExtensionSprite_B2
- .byte $BF ; |X.XXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $1F ; |...XXXXX|
- .byte $BF ; |X.XXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $63 ; |.XX...XX|
- .byte $00 ; |........|
- .byte $00 ; |........|
- ETExtensionSprite_B3
- .byte $BF ; |X.XXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $03 ; |......XX|
- .byte $1F ; |...XXXXX|
- .byte $BF ; |X.XXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $63 ; |.XX...XX|
- .byte $00 ; |........|
- .byte $00 ; |........|
- ETDead_0
- .byte $E0 ; |XXX.....|
- .byte $A2 ; |X.X...X.|
- .byte $E7 ; |XXX..XXX|
- .byte $EE ; |XXX.XXX.|
- .byte $FB ; |XXXXX.XX|
- .byte $00 ; |........|
- ETDead_1
- .byte $E0 ; |XXX.....|
- .byte $E3 ; |XXX...XX|
- .byte $EF ; |XXX.XXXX|
- .byte $ED ; |XXX.XX.X|
- .byte $FF ; |XXXXXXXX|
- .byte $00 ; |........|
- ETWalkSprite_A1
- .byte $FE ; |XXXXXXX.|
- .byte $FF ; |XXXXXXXX|
- .byte $C3 ; |XX....XX|
- .byte $0F ; |....XXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $60 ; |.XX.....|
- .byte $00 ; |........|
- ETWalkSprite_B1
- .byte $BF ; |X.XXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $03 ; |......XX|
- .byte $1F ; |...XXXXX|
- .byte $BF ; |X.XXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $27 ; |..X..XXX|
- .byte $E0 ; |XXX.....|
- .byte $00 ; |........|
- ETWalkSprite_A2
- .byte $FE ; |XXXXXXX.|
- .byte $FF ; |XXXXXXXX|
- .byte $C3 ; |XX....XX|
- .byte $0F ; |....XXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $7E ; |.XXXXXX.|
- .byte $03 ; |......XX|
- .byte $00 ; |........|
- ETWalkSprite_B2
- .byte $BF ; |X.XXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $03 ; |......XX|
- .byte $1F ; |...XXXXX|
- .byte $BF ; |X.XXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $E1 ; |XXX....X|
- .byte $07 ; |.....XXX|
- .byte $00 ; |........|
- ETTitle_E
- .byte $E0 ; |XXX.....|
- .byte $F0 ; |XXXX....|
- .byte $F8 ; |XXXXX...|
- .byte $DC ; |XX.XXX..|
- .byte $CE ; |XX..XXX.|
- .byte $C6 ; |XX...XX.|
- .byte $E0 ; |XXX.....|
- .byte $F0 ; |XXXX....|
- .byte $D8 ; |XX.XX...|
- .byte $CC ; |XX..XX..|
- .byte $C6 ; |XX...XX.|
- .byte $E0 ; |XXX.....|
- .byte $F0 ; |XXXX....|
- .byte $78 ; |.XXXX...|
- .byte $3C ; |..XXXX..|
- .byte $1E ; |...XXXX.|
- ETTitle_T
- .byte $10 ; |...X....|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $F8 ; |XXXXX...|
- .byte $78 ; |.XXXX...|
- .byte $3C ; |..XXXX..|
- .byte $1E ; |...XXXX.|
- .byte $0F ; |....XXXX|
- FlowerSpritesA
- Flower_A0
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $0A ; |....X.X.|
- .byte $1A ; |...XX.X.|
- .byte $76 ; |.XXX.XX.|
- .byte $3A ; |..XXX.X.|
- Flower_A1
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $1C ; |...XXX..|
- .byte $1C ; |...XXX..|
- .byte $20 ; |..X.....|
- .byte $1C ; |...XXX..|
- .byte $38 ; |..XXX...|
- Flower_A2
- .byte $00 ; |........|
- .byte $14 ; |...X.X..|
- .byte $1C ; |...XXX..|
- .byte $10 ; |...X....|
- .byte $1C ; |...XXX..|
- .byte $10 ; |...X....|
- .byte $18 ; |...XX...|
- Flower_A3
- .byte $14 ; |...X.X..|
- .byte $1C ; |...XXX..|
- .byte $14 ; |...X.X..|
- .byte $08 ; |....X...|
- .byte $0C ; |....XX..|
- .byte $08 ; |....X...|
- .byte $18 ; |...XX...|
- FlowerSpritesB
- Flower_B0
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $0D ; |....XX.X|
- .byte $07 ; |.....XXX|
- .byte $40 ; |.X......|
- .byte $08 ; |....X...|
- Flower_B1
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $2A ; |..X.X.X.|
- .byte $0A ; |....X.X.|
- .byte $20 ; |..X.....|
- .byte $0A ; |....X.X.|
- .byte $08 ; |....X...|
- Flower_B2
- .byte $00 ; |........|
- .byte $2A ; |..X.X.X.|
- .byte $2A ; |..X.X.X.|
- .byte $10 ; |...X....|
- .byte $12 ; |...X..X.|
- .byte $28 ; |..X.X...|
- .byte $08 ; |....X...|
- Flower_B3
- .byte $2A ; |..X.X.X.|
- .byte $2A ; |..X.X.X.|
- .byte $08 ; |....X...|
- .byte $0A ; |....X.X.|
- .byte $08 ; |....X...|
- .byte $28 ; |..X.X...|
- .byte $08 ; |....X...|
- FlowerColors
- .byte BROWN+14,BROWN+14,BROWN+12,ORANGE+10
- .byte ORANGE+8,ORANGE+6,ORANGE+4
- EasterEggSpriteValues
- .byte SHOW_YAR_SPRITE, SHOW_INDY_SPRITE
- BOUNDARY 0
- NumberFonts
- zero
- .byte $FE ; |XXXXXXX.|
- .byte $86 ; |X....XX.|
- .byte $86 ; |X....XX.|
- .byte $86 ; |X....XX.|
- .byte $82 ; |X.....X.|
- .byte $82 ; |X.....X.|
- .byte $FE ; |XXXXXXX.|
- .byte $00 ; |........|
- one
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $08 ; |....X...|
- .byte $08 ; |....X...|
- .byte $08 ; |....X...|
- .byte $00 ; |........|
- two
- .byte $FE ; |XXXXXXX.|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $FE ; |XXXXXXX.|
- .byte $02 ; |......X.|
- .byte $82 ; |X.....X.|
- .byte $FE ; |XXXXXXX.|
- .byte $00 ; |........|
- three
- .byte $FE ; |XXXXXXX.|
- .byte $86 ; |X....XX.|
- .byte $06 ; |.....XX.|
- .byte $7E ; |.XXXXXX.|
- .byte $02 ; |......X.|
- .byte $82 ; |X.....X.|
- .byte $FE ; |XXXXXXX.|
- .byte $00 ; |........|
- four
- .byte $06 ; |.....XX.|
- .byte $06 ; |.....XX.|
- .byte $FE ; |XXXXXXX.|
- .byte $82 ; |X.....X.|
- .byte $82 ; |X.....X.|
- .byte $80 ; |X.......|
- .byte $80 ; |X.......|
- .byte $00 ; |........|
- five
- .byte $FE ; |XXXXXXX.|
- .byte $86 ; |X....XX.|
- .byte $06 ; |.....XX.|
- .byte $FE ; |XXXXXXX.|
- .byte $80 ; |X.......|
- .byte $82 ; |X.....X.|
- .byte $FE ; |XXXXXXX.|
- .byte $00 ; |........|
- six
- .byte $FE ; |XXXXXXX.|
- .byte $86 ; |X....XX.|
- .byte $86 ; |X....XX.|
- .byte $FE ; |XXXXXXX.|
- .byte $80 ; |X.......|
- .byte $88 ; |X...X...|
- .byte $F8 ; |XXXXX...|
- .byte $00 ; |........|
- seven
- .byte $06 ; |.....XX.|
- .byte $06 ; |.....XX.|
- .byte $06 ; |.....XX.|
- .byte $06 ; |.....XX.|
- .byte $02 ; |......X.|
- .byte $02 ; |......X.|
- .byte $FE ; |XXXXXXX.|
- .byte $00 ; |........|
- eight
- .byte $FE ; |XXXXXXX.|
- .byte $82 ; |X.....X.|
- .byte $82 ; |X.....X.|
- .byte $FE ; |XXXXXXX.|
- .byte $44 ; |.X...X..|
- .byte $44 ; |.X...X..|
- .byte $7C ; |.XXXXX..|
- .byte $00 ; |........|
- nine
- .byte $06 ; |.....XX.|
- .byte $06 ; |.....XX.|
- .byte $06 ; |.....XX.|
- .byte $FE ; |XXXXXXX.|
- .byte $82 ; |X.....X.|
- .byte $82 ; |X.....X.|
- .byte $FE ; |XXXXXXX.|
- .byte $00 ; |........|
- Blank
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- HSWInitials
- .byte $07 ; |.....XXX|
- .byte $01 ; |.......X|
- .byte $57 ; |.X.X.XXX|
- .byte $54 ; |.X.X.X..|
- .byte $77 ; |.XXX.XXX|
- .byte $50 ; |.X.X....|
- .byte $50 ; |.X.X....|
- .byte $00 ; |........|
- .byte $07 ; |.....XXX|
- .byte $55 ; |.X.X.X.X|
- .byte $71 ; |.XXX...X|
- .byte $73 ; |.XXX..XX|
- .byte $51 ; |.X.X...X|
- .byte $55 ; |.X.X.X.X|
- .byte $57 ; |.X.X.XXX|
- .byte $00 ; |........|
- ElliottSprites
- Elliott_0
- .byte $10 ; |...X....|
- .byte $38 ; |..XXX...|
- .byte $18 ; |...XX...|
- .byte $30 ; |..XX....|
- .byte $7C ; |.XXXXX..|
- .byte $D8 ; |XX.XX...|
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $EC ; |XXX.XX..|
- .byte $82 ; |X.....X.|
- .byte $84 ; |X....X..|
- Elliott_1
- .byte $10 ; |...X....|
- .byte $38 ; |..XXX...|
- .byte $18 ; |...XX...|
- .byte $30 ; |..XX....|
- .byte $78 ; |.XXXX...|
- .byte $5C ; |.X.XXX..|
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $6C ; |.XX.XX..|
- .byte $60 ; |.XX.....|
- .byte $06 ; |.....XX.|
- Elliott_2
- .byte $00 ; |........|
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $00 ; |........|
- .byte $78 ; |.XXXX...|
- .byte $38 ; |..XXX...|
- .byte $78 ; |.XXXX...|
- .byte $18 ; |...XX...|
- .byte $38 ; |..XXX...|
- .byte $20 ; |..X.....|
- .byte $38 ; |..XXX...|
- Elliott_3
- .byte $00 ; |........|
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $00 ; |........|
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $18 ; |...XX...|
- .byte $30 ; |..XX....|
- .byte $78 ; |.XXXX...|
- .byte $00 ; |........|
- Elliott_4
- .byte $10 ; |...X....|
- .byte $38 ; |..XXX...|
- .byte $18 ; |...XX...|
- .byte $30 ; |..XX....|
- .byte $38 ; |..XXX...|
- .byte $78 ; |.XXXX...|
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $68 ; |.XX.X...|
- .byte $CC ; |XX..XX..|
- .byte $00 ; |........|
- Elliott_5
- .byte $10 ; |...X....|
- .byte $38 ; |..XXX...|
- .byte $18 ; |...XX...|
- .byte $30 ; |..XX....|
- .byte $78 ; |.XXXX...|
- .byte $DC ; |XX.XXX..|
- .byte $38 ; |..XXX...|
- .byte $18 ; |...XX...|
- .byte $68 ; |.XX.X...|
- .byte $CC ; |XX..XX..|
- ElliottColors_A
- .byte BLACK,BLACK,ORANGE_2+8,RED+10,RED+10,RED+10,LT_BLUE+10
- .byte LT_BLUE+10,LT_BLUE+10,DK_GREEN_2+14,DK_GREEN_2+14
- Elliott_6
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $00 ; |........|
- .byte $78 ; |.XXXX...|
- .byte $5C ; |.X.XXX..|
- .byte $B8 ; |X.XXX...|
- .byte $38 ; |..XXX...|
- .byte $68 ; |.XX.X...|
- .byte $CC ; |XX..XX..|
- .byte $86 ; |X....XX.|
- .byte $00 ; |........|
- Elliott_7
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $00 ; |........|
- .byte $78 ; |.XXXX...|
- .byte $5C ; |.X.XXX..|
- .byte $78 ; |.XXXX...|
- .byte $18 ; |...XX...|
- .byte $78 ; |.XXXX...|
- .byte $60 ; |.XX.....|
- .byte $06 ; |.....XX.|
- .byte $00 ; |........|
- Elliott_8
- .byte $10 ; |...X....|
- .byte $38 ; |..XXX...|
- .byte $18 ; |...XX...|
- .byte $38 ; |..XXX...|
- .byte $78 ; |.XXXX...|
- .byte $78 ; |.XXXX...|
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $28 ; |..X.X...|
- .byte $38 ; |..XXX...|
- .byte $00 ; |........|
- Elliott_9
- .byte $10 ; |...X....|
- .byte $38 ; |..XXX...|
- .byte $18 ; |...XX...|
- .byte $30 ; |..XX....|
- .byte $38 ; |..XXX...|
- .byte $30 ; |..XX....|
- .byte $38 ; |..XXX...|
- .byte $18 ; |...XX...|
- .byte $30 ; |..XX....|
- .byte $60 ; |.XX.....|
- .byte $00 ; |........|
- Elliott_10
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $00 ; |........|
- .byte $38 ; |..XXX...|
- .byte $78 ; |.XXXX...|
- .byte $38 ; |..XXX...|
- .byte $18 ; |...XX...|
- .byte $28 ; |..X.X...|
- .byte $0C ; |....XX..|
- .byte $C0 ; |XX......|
- .byte $00 ; |........|
- Elliott_11
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $00 ; |........|
- .byte $78 ; |.XXXX...|
- .byte $5C ; |.X.XXX..|
- .byte $B8 ; |X.XXX...|
- .byte $18 ; |...XX...|
- .byte $30 ; |..XX....|
- .byte $CC ; |XX..XX..|
- .byte $CC ; |XX..XX..|
- ElliottColors_B
- .byte BLACK,ORANGE_2+8,RED+4,RED+4,RED+4,LT_BLUE+10,LT_BLUE+10
- .byte LT_BLUE+10,LT_BLUE+10,DK_GREEN_2+14,DK_GREEN_2+14
- FourDiamondPitGraphics
- FourDiamondPitPF1Graphics
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $01 ; |.......X|
- .byte $03 ; |......XX|
- .byte $07 ; |.....XXX|
- .byte $0F ; |....XXXX|
- .byte $1F ; |...XXXXX|
- .byte $1F ; |...XXXXX|
- .byte $0F ; |....XXXX|
- .byte $07 ; |.....XXX|
- .byte $03 ; |......XX|
- .byte $01 ; |.......X|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $01 ; |.......X|
- .byte $03 ; |......XX|
- .byte $07 ; |.....XXX|
- .byte $0F ; |....XXXX|
- .byte $1F ; |...XXXXX|
- .byte $1F ; |...XXXXX|
- .byte $0F ; |....XXXX|
- .byte $07 ; |.....XXX|
- .byte $03 ; |......XX|
- .byte $01 ; |.......X|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- EightPitGraphics
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $C0 ; |XX......|
- .byte $F0 ; |XXXX....|
- .byte $F8 ; |XXXXX...|
- .byte $F8 ; |XXXXX...|
- .byte $F8 ; |XXXXX...|
- .byte $E0 ; |XXX.....|
- .byte $80 ; |X.......|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $01 ; |.......X|
- .byte $03 ; |......XX|
- .byte $07 ; |.....XXX|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $07 ; |.....XXX|
- .byte $03 ; |......XX|
- .byte $01 ; |.......X|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $80 ; |X.......|
- .byte $E0 ; |XXX.....|
- .byte $F8 ; |XXXXX...|
- .byte $F8 ; |XXXXX...|
- .byte $F8 ; |XXXXX...|
- .byte $F0 ; |XXXX....|
- .byte $C0 ; |XX......|
- ArrowPitGraphics
- ArrowPitPF1Graphics
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $01 ; |.......X|
- .byte $03 ; |......XX|
- .byte $07 ; |.....XXX|
- .byte $0F ; |....XXXX|
- .byte $07 ; |.....XXX|
- .byte $03 ; |......XX|
- .byte $01 ; |.......X|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $01 ; |.......X|
- .byte $07 ; |.....XXX|
- .byte $0F ; |....XXXX|
- .byte $07 ; |.....XXX|
- .byte $01 ; |.......X|
- ArrowPitPF2Graphics
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $07 ; |.....XXX|
- .byte $03 ; |......XX|
- .byte $01 ; |.......X|
- .byte $00 ; |........|
- .byte $01 ; |.......X|
- .byte $03 ; |......XX|
- .byte $07 ; |.....XXX|
- .byte $0F ; |....XXXX|
- .byte $0F ; |....XXXX|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $03 ; |......XX|
- .byte $07 ; |.....XXX|
- .byte $03 ; |......XX|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- Telephone
- .byte $3C ; |..XXXX..|
- .byte $20 ; |..X.....|
- .byte $3C ; |..XXXX..|
- .byte $20 ; |..X.....|
- .byte $3C ; |..XXXX..|
- .byte $18 ; |...XX...|
- .byte $DB ; |XX.XX.XX|
- .byte $FF ; |XXXXXXXX|
- TelephoneIconLSBPtrs
- .byte <Telephone,<Telephone - 3,<Telephone - 5,<Telephone - 9
- YarSprites
- Yar_0
- .byte $24 ; |..X..X..|
- .byte $18 ; |...XX...|
- .byte $24 ; |..X..X..|
- .byte $24 ; |..X..X..|
- .byte $7E ; |.XXXXXX.|
- .byte $5A ; |.X.XX.X.|
- .byte $DB ; |XX.XX.XX|
- .byte $3C ; |..XXXX..|
- Yar_1
- .byte $24 ; |..X..X..|
- .byte $99 ; |X..XX..X|
- .byte $A5 ; |X.X..X.X|
- .byte $E7 ; |XXX..XXX|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $3C ; |..XXXX..|
- BOUNDARY 0
- GameIcons
- BlankIcon
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- WarpLeftIcon
- .byte $18 ; |...XX...|
- .byte $30 ; |..XX....|
- .byte $60 ; |.XX.....|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $60 ; |.XX.....|
- .byte $30 ; |..XX....|
- .byte $18 ; |...XX...|
- WarpRightIcon
- .byte $18 ; |...XX...|
- .byte $0C ; |....XX..|
- .byte $06 ; |.....XX.|
- .byte $FF ; |XXXXXXXX|
- .byte $FF ; |XXXXXXXX|
- .byte $06 ; |.....XX.|
- .byte $0C ; |....XX..|
- WarpUpIcon
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $DB ; |XX.XX.XX|
- .byte $7E ; |.XXXXXX.|
- .byte $3C ; |..XXXX..|
- .byte $18 ; |...XX...|
- WarpDownIcon
- .byte $18 ; |...XX...|
- .byte $3C ; |..XXXX..|
- .byte $7E ; |.XXXXXX.|
- .byte $DB ; |XX.XX.XX|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- QuestionIcon
- .byte $38 ; |..XXX...|
- .byte $00 ; |........|
- .byte $38 ; |..XXX...|
- .byte $1C ; |...XXX..|
- .byte $0E ; |....XXX.|
- .byte $66 ; |.XX..XX.|
- .byte $7E ; |.XXXXXX.|
- .byte $3C ; |..XXXX..|
- EatCandyIcon_0
- .byte $00 ; |........|
- .byte $7E ; |.XXXXXX.|
- .byte $C3 ; |XX....XX|
- .byte $99 ; |X..XX..X|
- .byte $99 ; |X..XX..X|
- .byte $C3 ; |XX....XX|
- .byte $66 ; |.XX..XX.|
- .byte $3C ; |..XXXX..|
- WashingtonIcon
- .byte $7F ; |.XXXXXXX|
- .byte $7F ; |.XXXXXXX|
- .byte $2A ; |..X.X.X.|
- .byte $2A ; |..X.X.X.|
- .byte $2A ; |..X.X.X.|
- .byte $2A ; |..X.X.X.|
- .byte $3E ; |..XXXXX.|
- .byte $7F ; |.XXXXXXX|
- CallElliottIcon
- .byte $02 ; |......X.|
- .byte $74 ; |.XXX.X..|
- .byte $C0 ; |XX......|
- .byte $F7 ; |XXXX.XXX|
- .byte $D0 ; |XX.X....|
- .byte $F4 ; |XXXX.X..|
- .byte $62 ; |.XX...X.|
- .byte $01 ; |.......X|
- CallShipIcon
- .byte $42 ; |.X....X.|
- .byte $24 ; |..X..X..|
- .byte $7E ; |.XXXXXX.|
- .byte $BD ; |X.XXXX.X|
- .byte $FF ; |XXXXXXXX|
- .byte $5A ; |.X.XX.X.|
- .byte $3C ; |..XXXX..|
- .byte $24 ; |..X..X..|
- LandingZoneIcon
- .byte $00 ; |........|
- .byte $7F ; |.XXXXXXX|
- .byte $49 ; |.X..X..X|
- .byte $5D ; |.X.XXX.X|
- .byte $77 ; |.XXX.XXX|
- .byte $5D ; |.X.XXX.X|
- .byte $49 ; |.X..X..X|
- .byte $7F ; |.XXXXXXX|
- LevitateIcon
- .byte $FF ; |XXXXXXXX|
- .byte $00 ; |........|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $7E ; |.XXXXXX.|
- .byte $3C ; |..XXXX..|
- .byte $18 ; |...XX...|
- ReviveFlowerIcon
- .byte $00 ; |........|
- .byte $3E ; |..XXXXX.|
- .byte $63 ; |.XX...XX|
- .byte $41 ; |.X.....X|
- .byte $08 ; |....X...|
- .byte $00 ; |........|
- .byte $22 ; |..X...X.|
- .byte $22 ; |..X...X.|
- CountdownClockIcons
- CountdownClock_0
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $10 ; |...X....|
- .byte $30 ; |..XX....|
- .byte $70 ; |.XXX....|
- CountdownClock_1
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $E0 ; |XXX.....|
- .byte $D0 ; |XX.X....|
- .byte $B0 ; |X.XX....|
- .byte $70 ; |.XXX....|
- CountdownClock_2
- .byte $00 ; |........|
- .byte $80 ; |X.......|
- .byte $C0 ; |XX......|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $D0 ; |XX.X....|
- .byte $B0 ; |X.XX....|
- .byte $70 ; |.XXX....|
- CountdownClock_3
- .byte $70 ; |.XXX....|
- .byte $B0 ; |X.XX....|
- .byte $D0 ; |XX.X....|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $D0 ; |XX.X....|
- .byte $B0 ; |X.XX....|
- .byte $70 ; |.XXX....|
- CountdownClock_4
- .byte $7E ; |.XXXXXX.|
- .byte $BC ; |X.XXXX..|
- .byte $D8 ; |XX.XX...|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $D0 ; |XX.X....|
- .byte $B0 ; |X.XX....|
- .byte $70 ; |.XXX....|
- CountdownClock_5
- .byte $7E ; |.XXXXXX.|
- .byte $BD ; |X.XXXX.X|
- .byte $DB ; |XX.XX.XX|
- .byte $E7 ; |XXX..XXX|
- .byte $E0 ; |XXX.....|
- .byte $D0 ; |XX.X....|
- .byte $B0 ; |X.XX....|
- .byte $70 ; |.XXX....|
- CountdownClock_6
- .byte $7E ; |.XXXXXX.|
- .byte $BD ; |X.XXXX.X|
- .byte $DB ; |XX.XX.XX|
- .byte $E7 ; |XXX..XXX|
- .byte $E7 ; |XXX..XXX|
- .byte $D3 ; |XX.X..XX|
- .byte $B1 ; |X.XX...X|
- .byte $70 ; |.XXX....|
- CountdownClock_7
- .byte $7E ; |.XXXXXX.|
- .byte $BD ; |X.XXXX.X|
- .byte $DB ; |XX.XX.XX|
- .byte $E7 ; |XXX..XXX|
- .byte $E7 ; |XXX..XXX|
- .byte $DB ; |XX.XX.XX|
- .byte $BD ; |X.XXXX.X|
- .byte $7E ; |.XXXXXX.|
- EatCandyIcon_1
- .byte $00 ; |........|
- .byte $3C ; |..XXXX..|
- .byte $7E ; |.XXXXXX.|
- .byte $C3 ; |XX....XX|
- .byte $7E ; |.XXXXXX.|
- .byte $3C ; |..XXXX..|
- .byte $18 ; |...XX...|
- .byte $00 ; |........|
- Copyright_0
- .byte $79 ; |.XXXX..X|
- .byte $85 ; |X....X.X|
- .byte $B5 ; |X.XX.X.X|
- .byte $A5 ; |X.X..X.X|
- .byte $B5 ; |X.XX.X.X|
- .byte $85 ; |X....X.X|
- .byte $79 ; |.XXXX..X|
- .byte $00 ; |........|
- Copyright_1
- .byte $17 ; |...X.XXX|
- .byte $15 ; |...X.X.X|
- .byte $15 ; |...X.X.X|
- .byte $77 ; |.XXX.XXX|
- .byte $55 ; |.X.X.X.X|
- .byte $55 ; |.X.X.X.X|
- .byte $77 ; |.XXX.XXX|
- .byte $00 ; |........|
- Copyright_2
- .byte $71 ; |.XXX...X|
- .byte $41 ; |.X.....X|
- .byte $41 ; |.X.....X|
- .byte $71 ; |.XXX...X|
- .byte $11 ; |...X...X|
- .byte $51 ; |.X.X...X|
- .byte $70 ; |.XXX....|
- .byte $00 ; |........|
- Copyright_3
- .byte $49 ; |.X..X..X|
- .byte $49 ; |.X..X..X|
- .byte $49 ; |.X..X..X|
- .byte $C9 ; |XX..X..X|
- .byte $49 ; |.X..X..X|
- .byte $49 ; |.X..X..X|
- .byte $BE ; |X.XXXXX.|
- .byte $00 ; |........|
- Copyright_4
- .byte $55 ; |.X.X.X.X|
- .byte $55 ; |.X.X.X.X|
- .byte $55 ; |.X.X.X.X|
- .byte $D9 ; |XX.XX..X|
- .byte $55 ; |.X.X.X.X|
- .byte $55 ; |.X.X.X.X|
- .byte $99 ; |X..XX..X|
- .byte $00 ; |........|
- ArtistInitials
- .byte $1E ; |...XXXX.|
- .byte $1B ; |...XX.XX|
- .byte $7B ; |.XXXX.XX|
- .byte $DB ; |XX.XX.XX|
- .byte $DB ; |XX.XX.XX|
- .byte $1E ; |...XXXX.|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- DetermineToShowArtistInitials
- ldx #0
- lda gameSelection ; get the current game selection
- cmp currentScreenId ; compare with current screen id
- bne .setArtistInitialFlag ; don't show "JD" initials if not the same
- cmp collectedCandyPieces ; compare with candy pieces held by Elliott
- bne .setArtistInitialFlag ; don't show "JD" initials if not the same
- cmp currentObjectId
- bne .setArtistInitialFlag
- cmp #1 ; see if playing game selection 1
- bne .setArtistInitialFlag ; don't show "JD" initials if not the same
- lda heldCandyPieces ; get number of candy pieces held by E.T.
- cmp #2 * 16 ; don't show "JD" initials if E.T. carrying
- bcs .setArtistInitialFlag ; more than 1 piece of candy
- dex ; x = -1
- .setArtistInitialFlag
- stx artistInitialFlag
- rts
- BOUNDARY 0
- PitGraphics
- PitPF1Graphics
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $80 ; |X.......|
- .byte $80 ; |X.......|
- .byte $80 ; |X.......|
- .byte $80 ; |X.......|
- .byte $80 ; |X.......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $C0 ; |XX......|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $E0 ; |XXX.....|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- .byte $F8 ; |XXXXX...|
- IF COMPILE_VERSION = NTSC
- IndyColors
- ENDIF
- .byte NTSC_BROWN+8,NTSC_BROWN+8,NTSC_BROWN+8,NTSC_BROWN+12
- .byte NTSC_BROWN+12,NTSC_BROWN+14,NTSC_BROWN+15,NTSC_BROWN+15
- .byte NTSC_BROWN+15,NTSC_BROWN+15,NTSC_BROWN+15,NTSC_BROWN+15
- .byte NTSC_BROWN+15,NTSC_BROWN+15,NTSC_BROWN+15,NTSC_BROWN+15
- WashingtonDCGraphics
- WashingtonPF2Graphics
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $1F ; |...XXXXX|
- .byte $1F ; |...XXXXX|
- .byte $00 ; |........|
- .byte $1F ; |...XXXXX|
- .byte $1F ; |...XXXXX|
- .byte $04 ; |.....X..|
- .byte $04 ; |.....X..|
- .byte $04 ; |.....X..|
- .byte $04 ; |.....X..|
- .byte $04 ; |.....X..|
- .byte $04 ; |.....X..|
- .byte $04 ; |.....X..|
- .byte $04 ; |.....X..|
- .byte $04 ; |.....X..|
- .byte $04 ; |.....X..|
- .byte $04 ; |.....X..|
- .byte $04 ; |.....X..|
- .byte $0F ; |....XXXX|
- .byte $1F ; |...XXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $80 ; |X.......|
- .byte $C0 ; |XX......|
- .byte $E0 ; |XXX.....|
- .byte $F0 ; |XXXX....|
- .byte $F8 ; |XXXXX...|
- .byte $FC ; |XXXXXX..|
- .byte $F4 ; |XXXX.X..|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- .byte $B0 ; |X.XX....|
- .byte $B0 ; |X.XX....|
- .byte $F0 ; |XXXX....|
- .byte $B0 ; |X.XX....|
- .byte $B0 ; |X.XX....|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- WashingtonPF1Graphics
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $3F ; |..XXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $00 ; |........|
- .byte $3F ; |..XXXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $09 ; |....X..X|
- .byte $09 ; |....X..X|
- .byte $09 ; |....X..X|
- .byte $09 ; |....X..X|
- .byte $09 ; |....X..X|
- .byte $09 ; |....X..X|
- .byte $09 ; |....X..X|
- .byte $09 ; |....X..X|
- .byte $09 ; |....X..X|
- .byte $09 ; |....X..X|
- .byte $09 ; |....X..X|
- .byte $09 ; |....X..X|
- .byte $1F ; |...XXXXX|
- .byte $3F ; |..XXXXXX|
- .byte $7F ; |.XXXXXXX|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- PitPF2Graphics
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- IF COMPILE_VERSION = NTSC
- YarColor
- .byte BROWN+15,BROWN+15,BROWN+15,BROWN+15
- .byte BROWN+15,BROWN+15,BROWN+15,BROWN+15
- ELSE
- REPEAT 8
- .byte -1
- REPEND
- ENDIF
- PlayfieldColors
- .byte GREEN_2,GREEN_2,GREEN_2,GREEN_2,GREEN_2
- .byte BLACK+8,BLACK,DK_BLUE+2,BLACK
- BackgroundColors
- .byte DK_GREEN+4,DK_GREEN+4,DK_GREEN+4,DK_GREEN+4
- .byte DK_GREEN+4,BLUE+4,BLACK+6,LT_BLUE,BLUE
- CheckToFlyYarSprite
- bit easterEggSpriteFlag ; check Easter Egg sprite flags
- bpl .doneYarFlight ; branch if not showing special sprite
- bvs .doneYarFlight ; branch if showing Indy sprite
- ldx currentObjectVertPos ; get Yar's vertical position
- bpl .moveYarUp
- cpx #224
- bcc .doneYarFlight
- .moveYarUp
- dec currentObjectVertPos
- .doneYarFlight
- rts
- BOUNDARY 0
- ScientistSprites
- Scientist_0
- .byte $1A ; |...XX.X.|
- .byte $00 ; |........|
- .byte $1C ; |...XXX..|
- .byte $18 ; |...XX...|
- .byte $3C ; |..XXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $5E ; |.X.XXXX.|
- .byte $16 ; |...X.XX.|
- .byte $3C ; |..XXXX..|
- .byte $7E ; |.XXXXXX.|
- .byte $FE ; |XXXXXXX.|
- .byte $FE ; |XXXXXXX.|
- .byte $00 ; |........|
- .byte $E7 ; |XXX..XXX|
- Scientist_1
- .byte $1A ; |...XX.X.|
- .byte $00 ; |........|
- .byte $1C ; |...XXX..|
- .byte $18 ; |...XX...|
- .byte $38 ; |..XXX...|
- .byte $7C ; |.XXXXX..|
- .byte $5C ; |.X.XXX..|
- .byte $2E ; |..X.XXX.|
- .byte $36 ; |..XX.XX.|
- .byte $3C ; |..XXXX..|
- .byte $7E ; |.XXXXXX.|
- .byte $7E ; |.XXXXXX.|
- .byte $00 ; |........|
- .byte $7C ; |.XXXXX..|
- Scientist_2
- .byte $1A ; |...XX.X.|
- .byte $00 ; |........|
- .byte $1C ; |...XXX..|
- .byte $18 ; |...XX...|
- .byte $38 ; |..XXX...|
- .byte $3C ; |..XXXX..|
- .byte $2C ; |..X.XX..|
- .byte $2C ; |..X.XX..|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $00 ; |........|
- .byte $3C ; |..XXXX..|
- Scientist_3
- .byte $1A ; |...XX.X.|
- .byte $00 ; |........|
- .byte $1C ; |...XXX..|
- .byte $18 ; |...XX...|
- .byte $38 ; |..XXX...|
- .byte $7C ; |.XXXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $6C ; |.XX.XX..|
- .byte $38 ; |..XXX...|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $00 ; |........|
- .byte $76 ; |.XXX.XX.|
- Scientist_4
- .byte $1A ; |...XX.X.|
- .byte $00 ; |........|
- .byte $1C ; |...XXX..|
- .byte $18 ; |...XX...|
- .byte $3C ; |..XXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $5E ; |.X.XXXX.|
- .byte $36 ; |..XX.XX.|
- .byte $7C ; |.XXXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $00 ; |........|
- .byte $EE ; |XXX.XXX.|
- Scientist_5
- .byte $3E ; |..XXXXX.|
- .byte $3C ; |..XXXX..|
- .byte $1C ; |...XXX..|
- .byte $38 ; |..XXX...|
- .byte $7C ; |.XXXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $2E ; |..X.XXX.|
- .byte $3A ; |..XXX.X.|
- .byte $3E ; |..XXXXX.|
- .byte $7E ; |.XXXXXX.|
- .byte $FE ; |XXXXXXX.|
- .byte $FE ; |XXXXXXX.|
- .byte $E6 ; |XXX..XX.|
- .byte $C7 ; |XX...XXX|
- Scientist_6
- .byte $3E ; |..XXXXX.|
- .byte $3C ; |..XXXX..|
- .byte $1C ; |...XXX..|
- .byte $38 ; |..XXX...|
- .byte $7C ; |.XXXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $3E ; |..XXXXX.|
- .byte $3A ; |..XXX.X.|
- .byte $7E ; |.XXXXXX.|
- .byte $7E ; |.XXXXXX.|
- .byte $7E ; |.XXXXXX.|
- .byte $70 ; |.XXX....|
- .byte $1C ; |...XXX..|
- Scientist_7
- .byte $3E ; |..XXXXX.|
- .byte $3C ; |..XXXX..|
- .byte $1C ; |...XXX..|
- .byte $18 ; |...XX...|
- .byte $38 ; |..XXX...|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $34 ; |..XX.X..|
- .byte $38 ; |..XXX...|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $38 ; |..XXX...|
- Scientist_8
- .byte $3E ; |..XXXXX.|
- .byte $3C ; |..XXXX..|
- .byte $1C ; |...XXX..|
- .byte $18 ; |...XX...|
- .byte $7C ; |.XXXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $5C ; |.X.XXX..|
- .byte $34 ; |..XX.X..|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $76 ; |.XXX.XX.|
- .byte $70 ; |.XXX....|
- Scientist_9
- .byte $3E ; |..XXXXX.|
- .byte $3C ; |..XXXX..|
- .byte $1C ; |...XXX..|
- .byte $38 ; |..XXX...|
- .byte $7C ; |.XXXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $6E ; |.XX.XXX.|
- .byte $7A ; |.XXXX.X.|
- .byte $7C ; |.XXXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $EC ; |XXX.XX..|
- .byte $CE ; |XX..XXX.|
- ScientistColors_A
- .byte LT_BLUE+8,RED_2+6,RED_2+6,RED_2+6,WHITE,WHITE-2,WHITE-4
- .byte WHITE-4,WHITE-4,WHITE-4,WHITE-4,BLACK+8,BLACK,ORANGE+8
- ScientistColors_B
- .byte LT_BLUE+8,RED_2+6,RED_2+6,WHITE,WHITE-2,WHITE-4,WHITE-4
- .byte WHITE-4,WHITE-4,WHITE-4,BLACK+8,BLACK+8,ORANGE+8,ORANGE+8
- H_PhonePiece_0
- .byte $90 ; |X..X....|
- .byte $64 ; |.XX..X..|
- .byte $3F ; |..XXXXXX|
- .byte $64 ; |.XX..X..|
- .byte $90 ; |X..X....|
- H_PhonePiece_1
- .byte $C8 ; |XX..X...|
- .byte $32 ; |..XX..X.|
- .byte $32 ; |..XX..X.|
- .byte $C8 ; |XX..X...|
- .byte $00 ; |........|
- S_PhonePiece_0
- .byte $1F ; |...XXXXX|
- .byte $54 ; |.X.X.X..|
- .byte $54 ; |.X.X.X..|
- .byte $15 ; |...X.X.X|
- .byte $7C ; |.XXXXX..|
- S_PhonePiece_1
- .byte $3E ; |..XXXXX.|
- .byte $A8 ; |X.X.X...|
- .byte $2A ; |..X.X.X.|
- .byte $2A ; |..X.X.X.|
- .byte $F8 ; |XXXXX...|
- W_PhonePiece_0
- .byte $3C ; |..XXXX..|
- .byte $C0 ; |XX......|
- .byte $AA ; |X.X.X.X.|
- .byte $0E ; |....XXX.|
- .byte $E0 ; |XXX.....|
- W_PhonePiece_1
- .byte $60 ; |.XX.....|
- .byte $FE ; |XXXXXXX.|
- .byte $FE ; |XXXXXXX.|
- .byte $38 ; |..XXX...|
- .byte $FF ; |XXXXXXXX|
- PhonePieceColors_A
- .byte BROWN+14,BROWN+10,BROWN+6,BROWN+4,BROWN+2
- PhonePieceColors_B
- .byte BROWN+12,BROWN+8,LT_BROWN_2+6,LT_BROWN_2+4,LT_BROWN_2+2
- MotherShip
- .byte $18 ; |...XX...|
- .byte $3C ; |..XXXX..|
- .byte $7E ; |.XXXXXX.|
- .byte $FF ; |XXXXXXXX|
- .byte $42 ; |.X....X.|
- .byte $C3 ; |XX....XX|
- .byte $42 ; |.X....X.|
- .byte $C3 ; |XX....XX|
- .byte $42 ; |.X....X.|
- .byte $C3 ; |XX....XX|
- .byte $42 ; |.X....X.|
- .byte $C3 ; |XX....XX|
- .byte $7E ; |.XXXXXX.|
- .byte $5A ; |.X.XX.X.|
- .byte $42 ; |.X....X.|
- .byte $E7 ; |XXX..XXX|
- MotherShipColors
- .byte DK_PINK+8,DK_PINK+6,DK_PINK+4,DK_PINK+2,DK_PINK+4,DK_PINK+6,DK_PINK+8
- .byte DK_PINK+6,DK_PINK+4,DK_PINK+2,DK_PINK+4,DK_PINK+6,DK_PINK+8,DK_PINK+6
- .byte DK_PINK+4,DK_PINK+2,DK_PINK+4,DK_PINK+6,DK_PINK+8,DK_PINK+6,DK_PINK+4
- .byte DK_PINK+2
- IF COMPILE_VERSION = PAL
- YarColor
- IndyColors
- .byte BROWN+12,BROWN+12,BROWN+12,BROWN+12,BROWN+12
- .byte BROWN+12,BROWN+12,BROWN+12,BROWN+12,BROWN+12
- ENDIF
- BOUNDARY 0
- ETHomePFGraphics
- ETHomePF2Graphics
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $80 ; |X.......|
- .byte $C0 ; |XX......|
- .byte $E0 ; |XXX.....|
- .byte $F0 ; |XXXX....|
- .byte $F8 ; |XXXXX...|
- .byte $FC ; |XXXXXX..|
- .byte $F4 ; |XXXX.X..|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- .byte $B0 ; |X.XX....|
- .byte $B0 ; |X.XX....|
- .byte $F0 ; |XXXX....|
- .byte $B0 ; |X.XX....|
- .byte $B0 ; |X.XX....|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- .byte $F0 ; |XXXX....|
- ETHomePF1Graphics
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- .byte $00 ; |........|
- FBIAgentSprites
- FBIAgent_0
- .byte $1C ; |...XXX..|
- .byte $3E ; |..XXXXX.|
- .byte $3C ; |..XXXX..|
- .byte $1C ; |...XXX..|
- .byte $6C ; |.XX.XX..|
- .byte $78 ; |.XXXX...|
- .byte $6E ; |.XX.XXX.|
- .byte $7E ; |.XXXXXX.|
- .byte $3E ; |..XXXXX.|
- .byte $36 ; |..XX.XX.|
- .byte $7E ; |.XXXXXX.|
- .byte $FE ; |XXXXXXX.|
- .byte $FE ; |XXXXXXX.|
- .byte $E7 ; |XXX..XXX|
- FBIAgent_1
- .byte $38 ; |..XXX...|
- .byte $7C ; |.XXXXX..|
- .byte $78 ; |.XXXX...|
- .byte $38 ; |..XXX...|
- .byte $58 ; |.X.XX...|
- .byte $70 ; |.XXX....|
- .byte $7C ; |.XXXXX..|
- .byte $6C ; |.XX.XX..|
- .byte $7E ; |.XXXXXX.|
- .byte $2E ; |..X.XXX.|
- .byte $3E ; |..XXXXX.|
- .byte $3E ; |..XXXXX.|
- .byte $3E ; |..XXXXX.|
- .byte $3E ; |..XXXXX.|
- FBIAgent_2
- .byte $38 ; |..XXX...|
- .byte $7C ; |.XXXXX..|
- .byte $78 ; |.XXXX...|
- .byte $38 ; |..XXX...|
- .byte $58 ; |.X.XX...|
- .byte $F0 ; |XXXX....|
- .byte $FC ; |XXXXXX..|
- .byte $DC ; |XX.XXX..|
- .byte $FC ; |XXXXXX..|
- .byte $7C ; |.XXXXX..|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- FBIAgent_3
- .byte $1C ; |...XXX..|
- .byte $3E ; |..XXXXX.|
- .byte $3C ; |..XXXX..|
- .byte $1C ; |...XXX..|
- .byte $2C ; |..X.XX..|
- .byte $78 ; |.XXXX...|
- .byte $7E ; |.XXXXXX.|
- .byte $6E ; |.XX.XXX.|
- .byte $7E ; |.XXXXXX.|
- .byte $36 ; |..XX.XX.|
- .byte $7E ; |.XXXXXX.|
- .byte $7E ; |.XXXXXX.|
- .byte $7E ; |.XXXXXX.|
- .byte $6E ; |.XX.XXX.|
- FBIAgent_4
- .byte $1C ; |...XXX..|
- .byte $1C ; |...XXX..|
- .byte $1C ; |...XXX..|
- .byte $18 ; |...XX...|
- .byte $76 ; |.XXX.XX.|
- .byte $7E ; |.XXXXXX.|
- .byte $76 ; |.XXX.XX.|
- .byte $7C ; |.XXXXX..|
- .byte $3A ; |..XXX.X.|
- .byte $7E ; |.XXXXXX.|
- .byte $FE ; |XXXXXXX.|
- .byte $FE ; |XXXXXXX.|
- .byte $C6 ; |XX...XX.|
- .byte $E7 ; |XXX..XXX|
- FBIAgent_5
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $30 ; |..XX....|
- .byte $6C ; |.XX.XX..|
- .byte $7C ; |.XXXXX..|
- .byte $6C ; |.XX.XX..|
- .byte $7C ; |.XXXXX..|
- .byte $36 ; |..XX.XX.|
- .byte $3E ; |..XXXXX.|
- .byte $3E ; |..XXXXX.|
- .byte $3E ; |..XXXXX.|
- .byte $3C ; |..XXXX..|
- .byte $3E ; |..XXXXX.|
- FBIAgent_6
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $38 ; |..XXX...|
- .byte $30 ; |..XX....|
- .byte $EC ; |XXX.XX..|
- .byte $FC ; |XXXXXX..|
- .byte $FC ; |XXXXXX..|
- .byte $FC ; |XXXXXX..|
- .byte $FC ; |XXXXXX..|
- .byte $1C ; |...XXX..|
- .byte $3C ; |..XXXX..|
- .byte $3C ; |..XXXX..|
- .byte $38 ; |..XXX...|
- .byte $3C ; |..XXXX..|
- FBIAgent_7
- .byte $1C ; |...XXX..|
- .byte $1C ; |...XXX..|
- .byte $1C ; |...XXX..|
- .byte $18 ; |...XX...|
- .byte $76 ; |.XXX.XX.|
- .byte $7E ; |.XXXXXX.|
- .byte $7E ; |.XXXXXX.|
- .byte $74 ; |.XXX.X..|
- .byte $7E ; |.XXXXXX.|
- .byte $2E ; |..X.XXX.|
- .byte $7E ; |.XXXXXX.|
- .byte $7E ; |.XXXXXX.|
- .byte $6C ; |.XX.XX..|
- .byte $76 ; |.XXX.XX.|
- FBIAgentColors_A
- .byte LT_RED+8,LT_RED+8,RED_2+8,RED_2+8,LT_RED+10,LT_RED+10,LT_RED+10
- .byte LT_RED+10,LT_RED+8,LT_RED+8,LT_RED+8,LT_RED+8,LT_RED+6,BLACK
- FBIAgentColors_B
- .byte LT_RED+8,BLACK,RED_2+8,LT_RED+10,LT_RED+10,LT_RED+10,LT_RED+10
- .byte LT_RED+10,LT_RED+8,LT_RED+8,LT_RED+8,LT_RED+6,BLACK,BLACK
- HumanHorizReflectionTable
- .byte 28,60,94
- IndySprite
- .byte $18 ; |...XX...|
- .byte $3C ; |..XXXX..|
- .byte $00 ; |........|
- .byte $18 ; |...XX...|
- .byte $3C ; |..XXXX..|
- .byte $5A ; |.X.XX.X.|
- .byte $3C ; |..XXXX..|
- .byte $18 ; |...XX...|
- .byte $18 ; |...XX...|
- .byte $3C ; |..XXXX..|
- IF COMPILE_VERSION = NTSC
- .org BANK1TOP + 4096 - 6, 0
- ELSE
- .org BANK1TOP + 4096 - 8, 0
- .byte -1, 0
- ENDIF
- .word BANK1Start
- .word BANK1Start
- .word BANK1Start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement