mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-26 11:30:12 +00:00
620 lines
9.5 KiB
ArmAsm
620 lines
9.5 KiB
ArmAsm
; won't you take me to...
|
|
|
|
; right side of downtown village
|
|
|
|
;=======================
|
|
; check exit
|
|
;=======================
|
|
;
|
|
|
|
town_check_exit:
|
|
jsr update_feet_location
|
|
|
|
lda GUYBRUSH_X
|
|
cmp #2
|
|
bcc town_to_church
|
|
|
|
cmp #9
|
|
beq town_to_voodoo
|
|
|
|
cmp #32
|
|
bcc town_no_exit
|
|
|
|
town_to_bar:
|
|
lda GUYBRUSH_FEET
|
|
cmp #26
|
|
bcs town_no_exit
|
|
|
|
lda GUYBRUSH_DIRECTION
|
|
cmp #DIR_UP
|
|
bne town_no_exit
|
|
|
|
lda #MONKEY_BAR
|
|
sta LOCATION
|
|
lda #34
|
|
sta GUYBRUSH_X
|
|
sta DESTINATION_X
|
|
lda #20
|
|
sta GUYBRUSH_Y
|
|
sta DESTINATION_Y
|
|
|
|
lda #GUYBRUSH_BIG
|
|
sta GUYBRUSH_SIZE
|
|
|
|
lda #DIR_LEFT
|
|
sta GUYBRUSH_DIRECTION
|
|
jsr change_location
|
|
jmp town_no_exit
|
|
|
|
town_to_voodoo:
|
|
lda GUYBRUSH_FEET
|
|
cmp #22
|
|
bne town_no_exit
|
|
|
|
lda #MONKEY_VOODOO1
|
|
sta LOCATION
|
|
lda #11
|
|
sta GUYBRUSH_X
|
|
sta DESTINATION_X
|
|
lda #20
|
|
sta GUYBRUSH_Y
|
|
sta DESTINATION_Y
|
|
|
|
lda #GUYBRUSH_BIG
|
|
sta GUYBRUSH_SIZE
|
|
|
|
lda #DIR_RIGHT
|
|
sta GUYBRUSH_DIRECTION
|
|
jsr change_location
|
|
jmp town_no_exit
|
|
|
|
|
|
town_to_church:
|
|
lda GUYBRUSH_FEET
|
|
cmp #20
|
|
bcs town_no_exit
|
|
|
|
lda #MONKEY_CHURCH
|
|
sta LOCATION
|
|
lda #34
|
|
sta GUYBRUSH_X
|
|
sta DESTINATION_X
|
|
lda #30
|
|
sta GUYBRUSH_Y
|
|
sta DESTINATION_Y
|
|
|
|
lda #GUYBRUSH_SMALL
|
|
sta GUYBRUSH_SIZE
|
|
|
|
lda #DIR_LEFT
|
|
sta GUYBRUSH_DIRECTION
|
|
jsr change_location
|
|
|
|
town_no_exit:
|
|
rts
|
|
|
|
;=======================
|
|
; adjust destination
|
|
;=======================
|
|
|
|
town_adjust_destination:
|
|
|
|
; blah
|
|
|
|
done_tn_adjust:
|
|
rts
|
|
|
|
|
|
;=======================
|
|
; adjust bounds
|
|
;=======================
|
|
town_check_bounds:
|
|
|
|
; if x<2, y unrestricted
|
|
; if 7<x<13, y must be >20
|
|
; if 14<x<32 y must be > 22
|
|
; if 32<x<40, y must be > 16
|
|
; x can't go past 25
|
|
|
|
jsr update_feet_location
|
|
|
|
tn_check_x:
|
|
lda GUYBRUSH_X
|
|
cmp #2
|
|
bcc tn_x_gateway
|
|
|
|
cmp #7
|
|
bcc tn_x_road
|
|
|
|
cmp #12
|
|
bcc tn_x_voodoo
|
|
|
|
cmp #15
|
|
bcc tn_x_sidewalk
|
|
|
|
cmp #32
|
|
bcs tn_x_right
|
|
bcc tn_x_left
|
|
|
|
tn_x_gateway:
|
|
jmp town_adjust_height
|
|
|
|
tn_x_road:
|
|
lda GUYBRUSH_FEET
|
|
cmp #20
|
|
bcs town_adjust_height
|
|
lda #(20-2) ; assume tiny
|
|
sta GUYBRUSH_Y
|
|
sta DESTINATION_Y
|
|
lda #GUYBRUSH_TINY
|
|
sta GUYBRUSH_SIZE
|
|
jmp town_adjust_height
|
|
|
|
tn_x_voodoo:
|
|
lda GUYBRUSH_FEET
|
|
cmp #22
|
|
bcs town_adjust_height
|
|
lda #(22-4) ; assume small
|
|
sta GUYBRUSH_Y
|
|
sta DESTINATION_Y
|
|
lda #GUYBRUSH_SMALL
|
|
sta GUYBRUSH_SIZE
|
|
jmp town_adjust_height
|
|
|
|
tn_x_sidewalk:
|
|
lda GUYBRUSH_FEET
|
|
cmp #26
|
|
bcs town_adjust_height
|
|
lda #(26-8) ; assume medium
|
|
sta GUYBRUSH_Y
|
|
sta DESTINATION_Y
|
|
lda #GUYBRUSH_MEDIUM
|
|
sta GUYBRUSH_SIZE
|
|
jmp town_adjust_height
|
|
|
|
tn_x_left:
|
|
lda GUYBRUSH_FEET
|
|
cmp #32
|
|
bcs town_adjust_height
|
|
lda #(32-14) ; assume large
|
|
sta GUYBRUSH_Y
|
|
sta DESTINATION_Y
|
|
lda #GUYBRUSH_BIG
|
|
sta GUYBRUSH_SIZE
|
|
jmp town_adjust_height
|
|
|
|
tn_x_right:
|
|
lda GUYBRUSH_FEET
|
|
cmp #18
|
|
bcs town_adjust_height
|
|
lda #(18-2) ; assume tiny
|
|
sta GUYBRUSH_Y
|
|
sta DESTINATION_Y
|
|
jmp town_adjust_height
|
|
|
|
;====================
|
|
; adjust tallness
|
|
|
|
; this is based on where your feet are
|
|
|
|
town_adjust_height:
|
|
; jsr update_feet_location
|
|
|
|
lda GUYBRUSH_FEET
|
|
cmp #32
|
|
bcs town_big ; > 30, big
|
|
cmp #26 ; > 24, medium
|
|
bcs town_medium
|
|
cmp #20 ; > 20, small
|
|
bcs town_small
|
|
; else, tiny
|
|
towntiny:
|
|
lda #GUYBRUSH_TINY
|
|
jmp town_done_set_height
|
|
town_big:
|
|
lda #GUYBRUSH_BIG
|
|
jmp town_done_set_height
|
|
town_medium:
|
|
lda #GUYBRUSH_MEDIUM
|
|
jmp town_done_set_height
|
|
town_small:
|
|
lda #GUYBRUSH_SMALL
|
|
town_done_set_height:
|
|
jmp set_height
|
|
|
|
|
|
;==========================
|
|
;==========================
|
|
; set height
|
|
;==========================
|
|
;==========================
|
|
; we have to adjust destination because it's at feet
|
|
; and that changes when we get small
|
|
|
|
; A=new height
|
|
set_height:
|
|
cmp #GUYBRUSH_BIG
|
|
bne set_height_check_medium
|
|
jmp set_height_new_big
|
|
set_height_check_medium:
|
|
cmp #GUYBRUSH_MEDIUM
|
|
bne set_height_check_small
|
|
jmp set_height_new_medium
|
|
set_height_check_small:
|
|
cmp #GUYBRUSH_SMALL
|
|
bne set_height_check_tiny
|
|
jmp set_height_new_small
|
|
set_height_check_tiny:
|
|
; fallthrough
|
|
|
|
;=================================
|
|
set_height_new_tiny:
|
|
lda GUYBRUSH_SIZE
|
|
cmp #GUYBRUSH_TINY
|
|
beq done_set_new_height_tiny
|
|
cmp #GUYBRUSH_SMALL
|
|
beq set_height_new_tiny_old_small
|
|
cmp #GUYBRUSH_MEDIUM
|
|
beq set_height_new_tiny_old_medium
|
|
; fallthrough
|
|
set_height_new_tiny_old_big:
|
|
lda DESTINATION_Y
|
|
clc
|
|
adc #12
|
|
sta DESTINATION_Y
|
|
lda GUYBRUSH_Y
|
|
clc
|
|
adc #12
|
|
sta GUYBRUSH_Y
|
|
lda #GUYBRUSH_TINY
|
|
jmp set_new_height_tiny
|
|
|
|
set_height_new_tiny_old_medium:
|
|
lda DESTINATION_Y
|
|
clc
|
|
adc #6
|
|
sta DESTINATION_Y
|
|
lda GUYBRUSH_Y
|
|
clc
|
|
adc #6
|
|
sta GUYBRUSH_Y
|
|
lda #GUYBRUSH_TINY
|
|
jmp set_new_height_tiny
|
|
|
|
set_height_new_tiny_old_small:
|
|
lda DESTINATION_Y
|
|
clc
|
|
adc #2
|
|
sta DESTINATION_Y
|
|
|
|
lda GUYBRUSH_Y
|
|
clc
|
|
adc #2
|
|
sta GUYBRUSH_Y
|
|
|
|
lda #GUYBRUSH_TINY
|
|
set_new_height_tiny:
|
|
sta GUYBRUSH_SIZE
|
|
done_set_new_height_tiny:
|
|
rts
|
|
|
|
|
|
;======================================
|
|
set_height_new_small:
|
|
lda GUYBRUSH_SIZE
|
|
cmp #GUYBRUSH_SMALL
|
|
beq done_set_new_height_small
|
|
cmp #GUYBRUSH_TINY
|
|
beq set_height_new_small_old_tiny
|
|
cmp #GUYBRUSH_MEDIUM
|
|
beq set_height_new_small_old_medium
|
|
; fallthrough
|
|
set_height_new_small_old_big:
|
|
lda DESTINATION_Y
|
|
clc
|
|
adc #10
|
|
sta DESTINATION_Y
|
|
lda GUYBRUSH_Y
|
|
clc
|
|
adc #10
|
|
sta GUYBRUSH_Y
|
|
lda #GUYBRUSH_SMALL
|
|
jmp set_new_height_small
|
|
set_height_new_small_old_medium:
|
|
lda DESTINATION_Y
|
|
clc
|
|
adc #4
|
|
sta DESTINATION_Y
|
|
lda GUYBRUSH_Y
|
|
clc
|
|
adc #4
|
|
sta GUYBRUSH_Y
|
|
lda #GUYBRUSH_SMALL
|
|
jmp set_new_height_small
|
|
set_height_new_small_old_tiny:
|
|
lda DESTINATION_Y
|
|
sec
|
|
sbc #2
|
|
sta DESTINATION_Y
|
|
lda GUYBRUSH_Y
|
|
sec
|
|
sbc #2
|
|
sta GUYBRUSH_Y
|
|
lda #GUYBRUSH_SMALL
|
|
set_new_height_small:
|
|
sta GUYBRUSH_SIZE
|
|
done_set_new_height_small:
|
|
rts
|
|
|
|
|
|
;==============================
|
|
set_height_new_medium:
|
|
lda GUYBRUSH_SIZE
|
|
cmp #GUYBRUSH_MEDIUM
|
|
beq done_set_new_height_medium
|
|
cmp #GUYBRUSH_BIG
|
|
beq set_height_new_medium_old_big
|
|
cmp #GUYBRUSH_TINY
|
|
beq set_height_new_medium_old_tiny
|
|
; fallthrough
|
|
set_height_new_medium_old_small:
|
|
lda DESTINATION_Y
|
|
sec
|
|
sbc #4
|
|
sta DESTINATION_Y
|
|
lda GUYBRUSH_Y
|
|
sec
|
|
sbc #4
|
|
sta GUYBRUSH_Y
|
|
lda #GUYBRUSH_MEDIUM
|
|
jmp set_new_height_medium
|
|
set_height_new_medium_old_big:
|
|
lda DESTINATION_Y
|
|
clc
|
|
adc #6
|
|
sta DESTINATION_Y
|
|
lda GUYBRUSH_Y
|
|
clc
|
|
adc #6
|
|
sta GUYBRUSH_Y
|
|
lda #GUYBRUSH_MEDIUM
|
|
jmp set_new_height_medium
|
|
set_height_new_medium_old_tiny:
|
|
lda DESTINATION_Y
|
|
sec
|
|
sbc #6
|
|
sta DESTINATION_Y
|
|
lda GUYBRUSH_Y
|
|
sec
|
|
sbc #6
|
|
sta GUYBRUSH_Y
|
|
lda #GUYBRUSH_MEDIUM
|
|
set_new_height_medium:
|
|
sta GUYBRUSH_SIZE
|
|
done_set_new_height_medium:
|
|
rts
|
|
|
|
|
|
;===========================
|
|
set_height_new_big:
|
|
lda GUYBRUSH_SIZE
|
|
cmp #GUYBRUSH_BIG
|
|
beq done_set_new_height_big
|
|
cmp #GUYBRUSH_TINY
|
|
beq set_height_new_big_old_tiny
|
|
cmp #GUYBRUSH_MEDIUM
|
|
beq set_height_new_big_old_medium
|
|
set_height_new_big_old_small:
|
|
lda DESTINATION_Y
|
|
sec
|
|
sbc #10
|
|
sta DESTINATION_Y
|
|
lda GUYBRUSH_Y
|
|
sec
|
|
sbc #10
|
|
sta GUYBRUSH_Y
|
|
lda #GUYBRUSH_BIG
|
|
jmp set_new_height_big
|
|
set_height_new_big_old_medium:
|
|
lda DESTINATION_Y
|
|
sec
|
|
sbc #6
|
|
sta DESTINATION_Y
|
|
lda GUYBRUSH_Y
|
|
sec
|
|
sbc #6
|
|
sta GUYBRUSH_Y
|
|
lda #GUYBRUSH_BIG
|
|
jmp set_new_height_big
|
|
set_height_new_big_old_tiny:
|
|
lda DESTINATION_Y
|
|
sec
|
|
sbc #12
|
|
sta DESTINATION_Y
|
|
lda GUYBRUSH_Y
|
|
sec
|
|
sbc #12
|
|
sta GUYBRUSH_Y
|
|
lda #GUYBRUSH_BIG
|
|
jmp set_new_height_big
|
|
|
|
set_new_height_big:
|
|
sta GUYBRUSH_SIZE
|
|
done_set_new_height_big:
|
|
rts
|
|
|
|
|
|
;=====================
|
|
;=====================
|
|
; update feet
|
|
;=====================
|
|
;=====================
|
|
update_feet_location:
|
|
|
|
lda GUYBRUSH_SIZE
|
|
cmp #GUYBRUSH_TINY
|
|
beq adjust_feet_tiny
|
|
cmp #GUYBRUSH_SMALL
|
|
beq adjust_feet_small
|
|
cmp #GUYBRUSH_MEDIUM
|
|
beq adjust_feet_medium
|
|
|
|
adjust_feet_large:
|
|
lda GUYBRUSH_Y
|
|
clc
|
|
adc #14
|
|
jmp done_adjust_feet
|
|
|
|
adjust_feet_medium:
|
|
lda GUYBRUSH_Y
|
|
clc
|
|
adc #8
|
|
jmp done_adjust_feet
|
|
|
|
adjust_feet_small:
|
|
lda GUYBRUSH_Y
|
|
clc
|
|
adc #4
|
|
jmp done_adjust_feet
|
|
adjust_feet_tiny:
|
|
lda GUYBRUSH_Y
|
|
clc
|
|
adc #2
|
|
done_adjust_feet:
|
|
sta GUYBRUSH_FEET
|
|
rts
|
|
|
|
|
|
|
|
|
|
;=============================
|
|
archway_action:
|
|
lda CURRENT_VERB
|
|
asl
|
|
tay
|
|
|
|
lda archway_actions,Y
|
|
cmp #$ff
|
|
beq archway_nothing
|
|
|
|
sta MESSAGE_L
|
|
lda archway_actions+1,Y
|
|
sta MESSAGE_H
|
|
|
|
jmp do_display_message
|
|
|
|
archway_nothing:
|
|
lda #VERB_WALK
|
|
sta CURRENT_VERB
|
|
rts
|
|
|
|
archway_actions:
|
|
.word $FFFF ; give
|
|
.word doesnt_open ; open
|
|
.word doesnt_work ; close
|
|
.word cant_pick_up ; pick_up
|
|
.word not_special ; look_at
|
|
.word $FFFF ; talk_to
|
|
.word doesnt_work ; use
|
|
.word icant_move ; push
|
|
.word icant_move ; pull
|
|
|
|
|
|
;=============================
|
|
clock_action:
|
|
lda CURRENT_VERB
|
|
asl
|
|
tay
|
|
|
|
lda clock_actions,Y
|
|
cmp #$ff
|
|
beq clock_nothing
|
|
|
|
sta MESSAGE_L
|
|
lda clock_actions+1,Y
|
|
sta MESSAGE_H
|
|
|
|
jmp do_display_message
|
|
|
|
clock_nothing:
|
|
lda #VERB_WALK
|
|
sta CURRENT_VERB
|
|
rts
|
|
|
|
clock_actions:
|
|
.word $FFFF ; give
|
|
.word doesnt_open ; open
|
|
.word doesnt_work ; close
|
|
.word cant_pick_up ; pick_up
|
|
.word clock_look ; look_at
|
|
.word $FFFF ; talk_to
|
|
.word doesnt_work ; use
|
|
.word icant_move ; push
|
|
.word icant_move ; pull
|
|
|
|
clock_look:
|
|
.byte 12,21,"IT'S 10 O'CLOCK.",0
|
|
|
|
;=============================
|
|
citizen_action:
|
|
lda CURRENT_VERB
|
|
asl
|
|
tay
|
|
|
|
lda citizen_actions,Y
|
|
cmp #$ff
|
|
beq citizen_nothing
|
|
|
|
sta MESSAGE_L
|
|
lda citizen_actions+1,Y
|
|
sta MESSAGE_H
|
|
|
|
jmp do_display_message
|
|
|
|
citizen_nothing:
|
|
lda #VERB_WALK
|
|
sta CURRENT_VERB
|
|
rts
|
|
|
|
|
|
citizen_actions:
|
|
.word $FFFF ; give
|
|
.word $FFFF ; open
|
|
.word $FFFF ; close
|
|
.word $FFFF ; pick_up
|
|
.word citizen_look ; look_at
|
|
.word citizen_talk ; talk_to
|
|
.word $FFFF ; use
|
|
.word $FFFF ; push
|
|
.word $FFFF ; pull
|
|
|
|
citizen_look:
|
|
.byte 9,21,"WHAT'RE YOU LOOKING AT?",0
|
|
|
|
citizen_talk:
|
|
.byte 4,21,"DO YOU HAVE A COUSIN NAMED SVEN?",0
|
|
|
|
|
|
;=============================
|
|
town_door_action:
|
|
|
|
lda CURRENT_VERB
|
|
cmp #VERB_OPEN
|
|
bne town_door_nothing
|
|
|
|
; check if close?
|
|
|
|
; move to other door
|
|
|
|
lda #3
|
|
sta GUYBRUSH_X
|
|
lda #18
|
|
sta GUYBRUSH_Y
|
|
lda #GUYBRUSH_TINY
|
|
sta GUYBRUSH_SIZE
|
|
|
|
town_door_nothing:
|
|
lda #VERB_WALK
|
|
sta CURRENT_VERB
|
|
rts
|