; The Planetarium / Dentist Office ; by deater (Vince Weaver) ; Zero Page .include "zp.inc" .include "hardware.inc" .include "common_defines.inc" .include "common_routines.inc" dentist_start: ;=================== ; init screen jsr TEXT jsr HOME bit KEYRESET bit SET_GR bit PAGE0 bit LORES bit FULLGR ;================= ; set up location ;================= lda #locations sta LOCATIONS_H lda #0 sta DRAW_PAGE sta LEVEL_OVER ; init cursor lda #20 sta CURSOR_X sta CURSOR_Y ; handle light switch jsr setup_backgrounds ; set up initial location jsr change_location lda #1 sta CURSOR_VISIBLE ; visible at first lda #0 sta ANIMATE_FRAME game_loop: ;================= ; reset things ;================= lda #0 sta IN_SPECIAL sta IN_RIGHT sta IN_LEFT ;==================================== ; copy background to current page ;==================================== jsr gr_copy_to_current ;==================================== ; handle special-case forground logic ;==================================== jsr draw_marker_switch lda LOCATION cmp #DENTIST_PANEL beq fg_draw_panel jmp nothing_special fg_draw_panel: jsr draw_date jmp nothing_special nothing_special: ;==================================== ; draw pointer ;==================================== jsr draw_pointer ;==================================== ; page flip ;==================================== jsr page_flip ;==================================== ; handle keypress/joystick ;==================================== jsr handle_keypress ;==================================== ; inc frame count ;==================================== inc FRAMEL bne room_frame_no_oflo inc FRAMEH room_frame_no_oflo: ;==================================== ; check level over ;==================================== lda LEVEL_OVER bne really_exit jmp game_loop really_exit: jmp end_level ;=========================== ;=========================== ; back to mist ;=========================== ;=========================== back_to_mist: lda DIRECTION cmp #DIRECTION_S beq go_back_to_mist oh_its_the_marker_switch: lda CURSOR_X cmp #10 bcs use_door lda CURSOR_Y cmp #28 bcc use_door cmp #40 bcs use_door lda #MARKER_DENTIST jmp click_marker_switch use_door: lda LOCATION cmp #DENTIST_OUTSIDE bne go_inside open_door: lda #DENTIST_OUTSIDE_OPEN sta LOCATION jmp change_location go_inside: lda #DENTIST_INSIDE_DOOR sta LOCATION jmp change_location go_back_to_mist: lda #MIST_STEPS_4TH_LANDING sta LOCATION lda CURSOR_X cmp #20 bcs go_west_young_man lda #DIRECTION_E jmp steps_direction go_west_young_man: lda #DIRECTION_W steps_direction: sta DIRECTION lda #LOAD_MIST sta WHICH_LOAD set_level_over: lda #$ff sta LEVEL_OVER done_door: rts ;=========================== ;=========================== ; pull down panel ;=========================== ;=========================== pull_down_panel: lda #0 sta button_smc+1 ; turn off blink lda #31 sta startup_animate_smc+1 ; start startup animation lda #DENTIST_PANEL sta LOCATION lda #DIRECTION_N|DIRECTION_SPLIT sta DIRECTION jmp change_location light_switch: lda DENTIST_LIGHT eor #$1 sta DENTIST_LIGHT jsr setup_backgrounds jmp change_location ; setup backgrounds based on light switch being on or off setup_backgrounds: lda DENTIST_LIGHT bne lights_are_off ; lights are on lights_are_on: ldy #LOCATION_NORTH_BG lda #dentist_door_open_n_lzsa sta location1+1,Y ; DENTIST_OUTSIDE_OPEN lda #chair_view_n_lzsa sta location2+1,Y ; DENTIST_INSIDE_DOOR lda #chair_close_n_lzsa sta location3+1,Y ; DENTIST_CHAIR_CLOSE lda #panel_up_lzsa sta location4+1,Y ; DENTIST_PANEL_UP ldy #LOCATION_SOUTH_BG lda #chair_view_s_lzsa sta location2+1,Y ; DENTIST_INSIDE_DOOR lda #chair_close_s_lzsa sta location3+1,Y ; DENTIST_CHAIR_CLOSE rts ; lights are off lights_are_off: ldy #LOCATION_NORTH_BG lda #dentist_door_open_dark_n_lzsa sta location1+1,Y ; DENTIST_OUTSIDE_OPEN lda #chair_view_dark_n_lzsa sta location2+1,Y ; DENTIST_INSIDE_DOOR lda #chair_close_dark_n_lzsa sta location3+1,Y ; DENTIST_CHAIR_CLOSE lda #panel_up_dark_lzsa sta location4+1,Y ; DENTIST_PANEL_UP ldy #LOCATION_SOUTH_BG lda #chair_view_dark_s_lzsa sta location2+1,Y ; DENTIST_INSIDE_DOOR lda #chair_close_dark_s_lzsa sta location3+1,Y ; DENTIST_CHAIR_CLOSE rts ;========================== ; includes ;========================== .include "gr_putsprite_raw.s" ; level graphics .include "graphics_dentist/dentist_graphics.inc" ; puzzles .include "dentist_panel.s" .include "marker_switch.s" ; level data .include "leveldata_dentist.inc" ; sound .include "simple_sounds.s"