mist: can now get the white page

This commit is contained in:
Vince Weaver 2020-07-12 00:45:49 -04:00
parent bd07286014
commit 97495d0266
10 changed files with 201 additions and 77 deletions

View File

@ -117,7 +117,7 @@ mist.o: mist.s zp.inc hardware.inc common_defines.inc common_routines.inc \
draw_pointer.s \
end_level.s \
mist_puzzles.s \
gr_copy.s audio.s text_print.s decompress_fast_v2.s
handle_pages.s
ca65 -o mist.o mist.s -l mist.lst
####

View File

@ -71,3 +71,4 @@
.byte $00 ; PILLAR_ON = $BE
.byte $00 ; GREEN_BOOK_PROGRESS = $BF
.byte $00 ; DNI_PROGRESS = $C0
.byte $00 ; COMPARTMENT_OPEN = $C1

View File

@ -1,8 +1,3 @@
; FIXME
; handle dropping pages
; handle white page
;==============================
; Take Blue Page
;==============================
@ -22,6 +17,12 @@ take_blue_page:
sta HOLDING_PAGE
rts
;==============================
; Take Red Page
;==============================
; A should be page to take (i.e. MECHE_PAGE or similar)
take_red_page:
pha
jsr drop_current_page
@ -36,6 +37,10 @@ take_red_page:
sta HOLDING_PAGE
rts
;==============================
; Take White Page
;==============================
take_white_page:
pha
jsr drop_current_page
@ -50,7 +55,9 @@ take_white_page:
sta HOLDING_PAGE
rts
;==============================
; Drop current page
;==============================
; clicked on a page while holding another
drop_current_page:
lda HOLDING_PAGE

View File

@ -11,6 +11,13 @@ init_state_loop:
iny
cpy #END_OF_SAVE
bne init_state_loop
; FIXME: testing
lda #$ff
sta MARKER_SWITCHES
rts
.else

View File

@ -53,7 +53,7 @@ location1:
.byte BG_NORTH|BG_SOUTH
.byte DIRECTION_N ; special exit
.byte 23,30 ; special x
.byte 25,32 ; special y
.byte 25,44 ; special y
.word click_switch_dock-1 ; special function
; MIST_DOCK_STEPS -- dock steps

View File

@ -18,7 +18,6 @@ locations:
; OCTAGON_TEMPLE_DOORWAY -- temple doorway
location0:
.byte OCTAGON_TEMPLE_CENTER ; north exit
; .byte 9 ; south exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte $ff ; west exit

View File

@ -40,6 +40,19 @@ click_marker_switch:
eor MARKER_SWITCHES ; toggle switch
sta MARKER_SWITCHES
cmp #$FE ; all but dock
bne dont_open_secret
lda #1
bne done_handle_secret
dont_open_secret:
lda #0
done_handle_secret:
sta COMPARTMENT_OPEN
rts
marker_sprite_off:
@ -212,3 +225,5 @@ actually_draw_marker:
done_draw_marker:
rts

View File

@ -85,6 +85,7 @@ game_loop:
; handle marker switch drawing
jsr draw_marker_switch
; handle gear opening
lda GEAR_OPEN
@ -92,16 +93,26 @@ game_loop:
jsr check_gear_delete
not_gear_related:
; handl pillars
; handle pillars
lda LOCATION
cmp #MIST_PILLAR_EYE
bcc check_if_clock
bcc check_if_compartment_open
jsr draw_pillar
jmp nothing_special
; handle white page
check_if_compartment_open:
cmp #MIST_DOCK_SWITCH
bne check_if_clock
jsr draw_white_page
jmp nothing_special
; handle clock puzzles
check_if_clock:
lda LOCATION
cmp #MIST_CLOCK_PUZZLE ; clock puzzle
beq location_clock
cmp #MIST_CLOCK_INSIDE
@ -302,9 +313,6 @@ read_letter:
;===========================
; marker switch clicks
click_switch_dock:
lda #MARKER_DOCK
jmp click_marker_switch
click_switch_gear:
lda #MARKER_GEARS
jmp click_marker_switch
@ -315,6 +323,30 @@ click_switch_clock:
lda #MARKER_CLOCK
jmp click_marker_switch
; also handle white page
click_switch_dock:
lda CURSOR_Y
cmp #33
bcc flip_dock_switch
; pick up white page
lda COMPARTMENT_OPEN
bne grab_it
rts
grab_it:
jmp grab_white_page
flip_dock_switch:
lda #MARKER_DOCK
jmp click_marker_switch
;==========================
; includes
;==========================
@ -327,5 +359,7 @@ click_switch_clock:
.include "marker_switch.s"
.include "mist_puzzles.s"
.include "handle_pages.s"
; level data
.include "leveldata_mist.inc"

View File

@ -635,3 +635,47 @@ into_generator:
sta LEVEL_OVER
rts
;=================================
; marker switch compartment stuff
;=================================
draw_white_page:
lda DIRECTION
cmp #DIRECTION_N
bne no_white_page
lda COMPARTMENT_OPEN
beq no_white_page
lda WHITE_PAGE_TAKEN
bne no_white_page
lda #<white_page_sprite
sta INL
lda #>white_page_sprite
sta INH
lda #25
sta XPOS
lda #34
sta YPOS
jsr put_sprite_crop
no_white_page:
rts
grab_white_page:
lda WHITE_PAGE_TAKEN
bne missing_page
jmp take_white_page
missing_page:
rts

View File

@ -48,8 +48,8 @@ BTC_H = $6D
; We have to save/restore the following values
; when loading/storing from disk
WHICH_LOAD = $80
DIRECTION = $81
WHICH_LOAD = $80 ; which file to load
DIRECTION = $81 ; direction we are pointing
DIRECTION_N = $1
DIRECTION_S = $2
DIRECTION_E = $4
@ -57,19 +57,20 @@ DIRECTION = $81
DIRECTION_ANY=$f
DIRECTION_ONLY_POINT = $40 ; do not change pointer to grab
DIRECTION_SPLIT = $80 ; split text/graphics
LOCATION = $82
RED_PAGES_TAKEN = $83
LOCATION = $82 ; location on the map
RED_PAGES_TAKEN = $83 ; red pages that have been picked up
OCTAGON_PAGE = 1
MECHE_PAGE = 2
SELENA_PAGE = 4
STONEY_PAGE = 8
CHANNEL_PAGE = 16
FINAL_PAGE = 32
BLUE_PAGES_TAKEN= $84
CLOCK_BRIDGE = $85
GEAR_OPEN = $86
MARKER_SWITCHES = $87
BLUE_PAGES_TAKEN= $84 ; blue pages that have been picked up
CLOCK_BRIDGE = $85 ; is the clock island bridge raised
GEAR_OPEN = $86 ; is the big gear open
MARKER_SWITCHES = $87 ; state of the marker switches
MARKER_DOCK = $01
MARKER_GEARS = $02
MARKER_SPACESHIP = $04
@ -79,63 +80,72 @@ MARKER_SWITCHES = $87
MARKER_POOL = $40
MARKER_DENTIST = $80
CLOCK_HOUR = $88
CLOCK_MINUTE = $89
TREE_FURNACE_ON = $8A
FIREPLACE_GRID0 = $8B
CLOCK_HOUR = $88 ; hour on the mist clock
CLOCK_MINUTE = $89 ; minute on the mist clock
TREE_FURNACE_ON = $8A ; furnace in the cabin on
FIREPLACE_GRID0 = $8B ; fireplace grid puzzle state
FIREPLACE_GRID1 = $8C
FIREPLACE_GRID2 = $8D
FIREPLACE_GRID3 = $8E
FIREPLACE_GRID4 = $8F
FIREPLACE_GRID5 = $90
CLOCK_COUNT = $91
CLOCK_TOP = $92
CLOCK_MIDDLE = $93
CLOCK_BOTTOM = $94
CLOCK_LAST = $95
BREAKER_TRIPPED = $96
GENERATOR_VOLTS = $97
ROCKET_VOLTS = $98
SWITCH_TOP_ROW = $99
SWITCH_BOTTOM_ROW = $9A
GENERATOR_VOLTS_DISP = $9B
ROCKET_VOLTS_DISP = $9C
ROCKET_HANDLE_STEP = $9D
ROCKET_NOTE1 = $9E
ROCKET_NOTE2 = $9F
ROCKET_NOTE3 = $A0
ROCKET_NOTE4 = $A1
MECHE_ELEVATOR = $A2
MECHE_ROTATION = $A3
MECHE_LEVERS = $A4
CLOCK_COUNT = $91 ; clock puzzle (turns taken)
CLOCK_TOP = $92 ; clock puzzle (top dial)
CLOCK_MIDDLE = $93 ; clock puzzle (middle dial)
CLOCK_BOTTOM = $94 ; clock puzzle (bottom dial)
CLOCK_LAST = $95 ; clock puzzle (last dial turned)
BREAKER_TRIPPED = $96 ; generator (circuit breakers status)
GENERATOR_VOLTS = $97 ; generator (total volts)
ROCKET_VOLTS = $98 ; generator (rocket volts)
SWITCH_TOP_ROW = $99 ; generator (switch top row)
SWITCH_BOTTOM_ROW = $9A ; generator (switch bottom row)
GENERATOR_VOLTS_DISP = $9B ; generator (total volts on display)
ROCKET_VOLTS_DISP = $9C ; generator (rocket volts on display)
ROCKET_HANDLE_STEP = $9D ; organ (which knob is lit) [why zp?]
ROCKET_NOTE1 = $9E ; organ (note slider 1)
ROCKET_NOTE2 = $9F ; organ (note slider 2)
ROCKET_NOTE3 = $A0 ; organ (note slider 3)
ROCKET_NOTE4 = $A1 ; organ (note slider 4)
MECHE_ELEVATOR = $A2 ; fortress elevator state
MECHE_ROTATION = $A3 ; fortress rotation state
MECHE_LEVERS = $A4 ; fortress rotation levers
LEFT_LEVER = 1
RIGHT_LEVER = 2
MECHE_LOCK1 = $A5
MECHE_LOCK2 = $A6
MECHE_LOCK3 = $A7
MECHE_LOCK4 = $A8
HOLDING_PAGE = $A9
MECHE_LOCK1 = $A5 ; meche lock symbol1
MECHE_LOCK2 = $A6 ; meche lock symbol2
MECHE_LOCK3 = $A7 ; meche lock symbol3
MECHE_LOCK4 = $A8 ; meche lock symbol4
HOLDING_PAGE = $A9 ; which page in hand
HOLDING_RED_PAGE = $80
HOLDING_BLUE_PAGE = $40
HOLDING_WHITE_PAGE = $C0
RED_PAGE_COUNT = $AA
BLUE_PAGE_COUNT = $AB
VIEWER_CHANNEL = $AC
VIEWER_LATCHED = $AD
TOWER_ROTATION = $AE
RED_PAGE_COUNT = $AA ; # of red pages in book
BLUE_PAGE_COUNT = $AB ; # of blue pages in book
VIEWER_CHANNEL = $AC ; viewer: current channel
VIEWER_LATCHED = $AD ; viewer: latched channel
TOWER_ROTATION = $AE ; tower rotation: which
ROTATION_GEARS = 2
ROTATION_DOCK = 3
ROTATION_TREE = 4
ROTATION_SPACESHIP = 8
SHIP_RAISED = $AF
; stoneship
PUMP_STATE = $B0
BATTERY_CHARGE = $B1
COMPASS_ANGLE = $B2
CRANK_ANGLE = $B3
WHITE_PAGE_TAKEN= $B4
CHANNEL_SWITCHES= $B5
SHIP_RAISED = $AF ; ship raised or not
PUMP_STATE = $B0 ; stoneship pump state
BATTERY_CHARGE = $B1 ; stoneship battery charge
COMPASS_ANGLE = $B2 ; stoneship compass angle
CRANK_ANGLE = $B3 ; stoneship crank angle
WHITE_PAGE_TAKEN= $B4 ; white page taken
CHANNEL_SWITCHES= $B5 ; channelwood switches
CHANNEL_BRIDGE_UP = $01
CHANNEL_PIPE_EXTENDED = $02
CHANNEL_BOOK_ELEVATOR_UP= $04
@ -144,21 +154,24 @@ CHANNEL_SWITCHES= $B5
CHANNEL_SW_GATE_BOTTOM = $20
CHANNEL_SW_WINDMILL = $40
CHANNEL_SW_FAUCET = $80
CHANNEL_VALVES = $B6
CHANNEL_VALVES = $B6 ; channelwood valves
CHANNEL_VALVE1 = $01
CHANNEL_VALVE2 = $02
CHANNEL_VALVE3 = $04
CHANNEL_VALVE4 = $08
CHANNEL_VALVE5 = $10
CHANNEL_VALVE6 = $20
DENTIST_LIGHT = $B7
DENTIST_MONTH = $B8
DENTIST_DAY = $B9
DENTIST_CENTURY = $BA
DENTIST_YEAR = $BB
DENTIST_HOURS = $BC
DENTIST_MINUTES = $BD
PILLAR_ON = $BE
DENTIST_LIGHT = $B7 ; dentist lightswitch
DENTIST_MONTH = $B8 ; dentist panel: month
DENTIST_DAY = $B9 ; dentist panel: day
DENTIST_CENTURY = $BA ; dentist panel: century
DENTIST_YEAR = $BB ; dentist panel: year
DENTIST_HOURS = $BC ; dentist panel: hours
DENTIST_MINUTES = $BD ; dentist panel: minutes
PILLAR_ON = $BE ; pillars: which on/off
PILLAR_EYE = $01
PILLAR_SNAKE = $02
PILLAR_BUG = $04
@ -167,10 +180,14 @@ PILLAR_ON = $BE
PILLAR_LEAF = $20
PILLAR_CROSS = $40
PILLAR_EMU = $80
GREEN_BOOK_PROGRESS = $BF
DNI_PROGRESS = $C0
END_OF_SAVE = $C1
GREEN_BOOK_PROGRESS = $BF ; green book: what's ben seen
DNI_PROGRESS = $C0 ; dni: atrus status
COMPARTMENT_OPEN = $C1 ; dock marker switch compartment
END_OF_SAVE = $C2
; done game puzzle state