mist: can now get the white page
This commit is contained in:
parent
bd07286014
commit
97495d0266
|
@ -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
|
||||
|
||||
####
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
46
mist/mist.s
46
mist/mist.s
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
141
mist/zp.inc
141
mist/zp.inc
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue