dos33fsprogs/games/peasant/inn_actions.s

632 lines
12 KiB
ArmAsm

.include "tokens.inc"
;=======================
;=======================
;=======================
; Inside Inn
;=======================
;=======================
;=======================
inside_inn_verb_table:
.byte VERB_LOOK
.word inside_inn_look-1
.byte VERB_TALK
.word inside_inn_talk-1
.byte VERB_GIVE
.word inside_inn_give-1
.byte VERB_USE
.word inside_inn_give-1
.byte VERB_GET
.word inside_inn_get-1
.byte VERB_ASK
.word inside_inn_ask-1
.byte VERB_RING
.word inside_inn_ring-1
.byte VERB_SLEEP
.word inside_inn_sleep-1
.byte VERB_OPEN
.word inside_inn_open-1
.byte VERB_LIGHT
.word inside_inn_light-1
.byte 0
;=================
; look
;=================
inside_inn_look:
lda GAME_STATE_1
and #NIGHT
beq inside_inn_look_day
jmp inside_inn_look_night
inside_inn_look_day:
lda CURRENT_NOUN
cmp #NOUN_PILLOW
beq inn_look_at_pillow
cmp #NOUN_NOTE
beq inn_look_at_paper
cmp #NOUN_PAPER
beq inn_look_at_paper
cmp #NOUN_PAINTING
beq inn_look_at_painting
cmp #NOUN_DUDE
beq inn_look_at_man
cmp #NOUN_GUY
beq inn_look_at_man
cmp #NOUN_MAN
beq inn_look_at_man
cmp #NOUN_WINDOW
beq inn_look_at_window
cmp #NOUN_PILLOW
beq inn_look_at_pillow
cmp #NOUN_RUG
beq inn_look_at_rug
cmp #NOUN_CARPET
beq inn_look_at_rug
cmp #NOUN_BED
beq inn_look_at_bed
cmp #NOUN_MATTRESS
beq inn_look_at_bed
cmp #NOUN_BELL
beq inn_look_at_bell
cmp #NOUN_DESK
beq inn_look_at_desk
cmp #NOUN_DOOR
beq inn_look_at_door
cmp #NOUN_NONE
beq inn_look_at
jmp parse_common_look
inn_look_at:
ldx #<inside_inn_look_message
ldy #>inside_inn_look_message
jmp finish_parse_message
inn_look_at_window:
ldx #<inside_inn_look_window_message
ldy #>inside_inn_look_window_message
jmp finish_parse_message
inn_look_at_man:
ldx #<inside_inn_look_man_message
ldy #>inside_inn_look_man_message
jmp finish_parse_message
inn_look_at_painting:
ldx #<inside_inn_look_painting_message
ldy #>inside_inn_look_painting_message
jmp finish_parse_message
inn_look_at_paper:
ldx #<inside_inn_look_paper_message
ldy #>inside_inn_look_paper_message
jmp finish_parse_message
inn_look_at_pillow:
ldx #<inside_inn_look_pillow_message
ldy #>inside_inn_look_pillow_message
jmp finish_parse_message
inn_look_at_rug:
ldx #<inside_inn_look_rug_message
ldy #>inside_inn_look_rug_message
jmp finish_parse_message
inn_look_at_bed:
ldx #<inside_inn_look_bed_message
ldy #>inside_inn_look_bed_message
jmp finish_parse_message
inn_look_at_bell:
ldx #<inside_inn_look_bell_message
ldy #>inside_inn_look_bell_message
jmp finish_parse_message
inn_look_at_desk:
ldx #<inside_inn_look_desk_message
ldy #>inside_inn_look_desk_message
jmp finish_parse_message
inn_look_at_door:
ldx #<inside_inn_open_door_message
ldy #>inside_inn_open_door_message
jmp finish_parse_message
inside_inn_look_night:
lda CURRENT_NOUN
cmp #NOUN_PILLOW
beq inn_look_at_pillow
cmp #NOUN_NOTE
beq inn_look_at_paper
cmp #NOUN_PAPER
beq inn_look_at_paper
cmp #NOUN_PAINTING
beq inn_look_at_painting
cmp #NOUN_DUDE
beq inn_look_at_man_night
cmp #NOUN_GUY
beq inn_look_at_man_night
cmp #NOUN_MAN
beq inn_look_at_man_night
cmp #NOUN_WINDOW
beq inn_look_at_window
cmp #NOUN_PILLOW
beq inn_look_at_pillow
cmp #NOUN_RUG
beq inn_look_at_rug
cmp #NOUN_CARPET
beq inn_look_at_rug
cmp #NOUN_BED
beq inn_look_at_bed
cmp #NOUN_MATTRESS
beq inn_look_at_bed
cmp #NOUN_BELL
beq inn_look_at_bell
cmp #NOUN_DESK
beq inn_look_at_desk
cmp #NOUN_POT
beq inn_look_at_pot_night
cmp #NOUN_NONE
beq inn_look_at_night
jmp parse_common_look
inn_look_at_night:
ldx #<inside_inn_look_night_message
ldy #>inside_inn_look_night_message
jmp finish_parse_message
inn_look_at_man_night:
ldx #<inside_inn_look_man_night_message
ldy #>inside_inn_look_man_night_message
jmp finish_parse_message
inn_look_at_pot_night:
ldx #<inside_inn_look_pot_night_message
ldy #>inside_inn_look_pot_night_message
jmp finish_parse_message
inn_look_at_desk_night:
ldx #<inside_inn_look_desk_night_message
ldy #>inside_inn_look_desk_night_message
jmp finish_parse_message
inn_look_at_candle_night:
ldx #<inside_inn_look_candle_night_message
ldy #>inside_inn_look_candle_night_message
jmp finish_parse_message
;=================
; talk
;=================
inside_inn_talk:
; no talking at night
lda GAME_STATE_1
and #NIGHT
bne inn_talk_no_one
lda CURRENT_NOUN
cmp #NOUN_NONE
beq inn_talk_man
cmp #NOUN_MAN
beq inn_talk_man
cmp #NOUN_GUY
beq inn_talk_man
cmp #NOUN_DUDE
beq inn_talk_man
inn_talk_no_one:
jmp parse_common_talk
inn_talk_man:
ldx #<inside_inn_talk_man_message
ldy #>inside_inn_talk_man_message
jmp finish_parse_message
;=================
; give
;=================
inside_inn_give:
; no giving at night
lda GAME_STATE_1
and #NIGHT
bne inn_give_no_one
lda CURRENT_NOUN
cmp #NOUN_BABY
beq inn_give_baby
inn_give_no_one:
jmp parse_common_give
inn_give_baby:
lda INVENTORY_1
and #INV1_PILLS ; check if have pills
bne inn_give_baby_have_pills
lda INVENTORY_1
and #INV1_BABY
bne inn_give_baby_have_baby
inn_give_baby_no_baby:
ldx #<inside_inn_give_baby_before_message
ldy #>inside_inn_give_baby_before_message
jmp finish_parse_message
inn_give_baby_have_baby:
ldx #<inside_inn_give_baby_message
ldy #>inside_inn_give_baby_message
jsr partial_message_step
; add 5 points to score
lda #5
jsr score_points
; get pills
lda INVENTORY_1
ora #INV1_PILLS
sta INVENTORY_1
ldx #<inside_inn_give_baby2_message
ldy #>inside_inn_give_baby2_message
jmp finish_parse_message
inn_give_baby_have_pills:
ldx #<inside_inn_give_baby_already_message
ldy #>inside_inn_give_baby_already_message
jmp finish_parse_message
;=================
; get
;=================
inside_inn_get:
lda CURRENT_NOUN
cmp #NOUN_PAPER
beq inn_get_paper
cmp #NOUN_NOTE
beq inn_get_paper
cmp #NOUN_PARCHMENT
beq inn_get_paper
cmp #NOUN_PAINTING
beq inn_get_painting
cmp #NOUN_RUG
beq inn_get_rug
cmp #NOUN_CARPET
beq inn_get_rug
cmp #NOUN_DOING_SPROINGS
beq inn_get_doing
cmp #NOUN_PILLOW
beq inn_get_pillow
cmp #NOUN_BELL
beq inn_get_bell
cmp #NOUN_BED
beq inn_get_bed
cmp #NOUN_POT
beq inn_get_pot
cmp #NOUN_GREASE
beq inn_get_grease
cmp #NOUN_CANDLE
beq inn_get_candle
cmp #NOUN_RUB
beq inn_get_rub
cmp #NOUN_ROOM
beq inn_get_room
jmp parse_common_get
inn_get_paper:
ldx #<inside_inn_get_paper_message
ldy #>inside_inn_get_paper_message
jmp finish_parse_message
inn_get_painting:
ldx #<inside_inn_get_painting_message
ldy #>inside_inn_get_painting_message
jmp finish_parse_message
inn_get_rug:
ldx #<inside_inn_get_rug_message
ldy #>inside_inn_get_rug_message
jmp finish_parse_message
inn_get_doing:
ldx #<inside_inn_get_doing_message
ldy #>inside_inn_get_doing_message
jmp finish_parse_message
inn_get_pillow:
ldx #<inside_inn_get_pillow_message
ldy #>inside_inn_get_pillow_message
jmp finish_parse_message
inn_get_bell:
ldx #<inside_inn_get_bell_message
ldy #>inside_inn_get_bell_message
jmp finish_parse_message
inn_get_bed:
ldx #<inside_inn_get_bed_message
ldy #>inside_inn_get_bed_message
jmp finish_parse_message
inn_get_pot:
inn_get_grease:
lda GAME_STATE_1
and #NIGHT
bne inn_do_get_grease
jmp parse_common_get
inn_do_get_grease:
lda GAME_STATE_2
and #GREASE_ON_HEAD
beq inn_finally_get_grease
inn_grease_already:
ldx #<inside_inn_grease_already_message
ldy #>inside_inn_grease_already_message
jmp finish_parse_message
inn_finally_get_grease:
ldx #<inside_inn_get_grease_message
ldy #>inside_inn_get_grease_message
jsr partial_message_step
lda #2
jsr score_points
lda GAME_STATE_2
ora #GREASE_ON_HEAD
sta GAME_STATE_2
lda GAME_STATE_1
ora #POT_ON_HEAD
sta GAME_STATE_1
ldx #<inside_inn_get_grease_message2
ldy #>inside_inn_get_grease_message2
jmp finish_parse_message
inn_get_candle:
ldx #<inside_inn_get_candle_message
ldy #>inside_inn_get_candle_message
jmp finish_parse_message
inn_get_rub:
ldx #<inside_inn_get_rub_message
ldy #>inside_inn_get_rub_message
jmp finish_parse_message
inn_get_room:
lda GAME_STATE_1
and #WEARING_ROBE ; check if wearing robe
bne inn_get_room_have_robe
inn_get_room_no_robe:
ldx #<inside_inn_get_room_no_robe_message
ldy #>inside_inn_get_room_no_robe_message
jmp finish_parse_message
inn_get_room_on_fire:
ldx #<inside_inn_get_room_on_fire_message
ldy #>inside_inn_get_room_on_fire_message
jmp finish_parse_message
inn_get_room_have_robe:
lda GAME_STATE_1
and #NIGHT
beq inn_get_room_have_room_day
jmp parse_common_get
inn_get_room_have_room_day:
lda GAME_STATE_2
and #ON_FIRE ; check if on fire
bne inn_get_room_on_fire
ldx #<inside_inn_get_room_message
ldy #>inside_inn_get_room_message
jsr partial_message_step
; add 3 points to score
; only do this once though
lda GAME_STATE_1
and #ALREADY_GOT_ROOM
bne inn_get_room_skip_points
lda #3
jsr score_points
inn_get_room_skip_points:
; Make it night
lda GAME_STATE_1
ora #(NIGHT|ALREADY_GOT_ROOM)
sta GAME_STATE_1
ldx #<inside_inn_get_room2_message
ldy #>inside_inn_get_room2_message
jsr partial_message_step
ldx #<inside_inn_get_room3_message
ldy #>inside_inn_get_room3_message
jmp finish_parse_message
;=================
; ask about
;=================
inside_inn_ask:
lda GAME_STATE_1
and #NIGHT
beq inn_ask_day
jmp parse_common_ask
inn_ask_day:
lda CURRENT_NOUN
cmp #NOUN_FIRE
beq inn_ask_about_fire
cmp #NOUN_NED
beq inn_ask_about_ned
cmp #NOUN_ROBE
beq inn_ask_about_robe
cmp #NOUN_SMELL
beq inn_ask_about_smell
cmp #NOUN_TROGDOR
beq inn_ask_about_trogdor
inn_ask_about_unknown:
ldx #<inside_inn_ask_about_unknown_message
ldy #>inside_inn_ask_about_unknown_message
jmp finish_parse_message
inn_ask_about_fire:
ldx #<inside_inn_ask_about_fire_message
ldy #>inside_inn_ask_about_fire_message
jmp finish_parse_message
inn_ask_about_ned:
ldx #<inside_inn_ask_about_ned_message
ldy #>inside_inn_ask_about_ned_message
jmp finish_parse_message
inn_ask_about_robe:
ldx #<inside_inn_ask_about_robe_message
ldy #>inside_inn_ask_about_robe_message
jmp finish_parse_message
inn_ask_about_smell:
ldx #<inside_inn_ask_about_smell_message
ldy #>inside_inn_ask_about_smell_message
jmp finish_parse_message
inn_ask_about_trogdor:
ldx #<inside_inn_ask_about_trogdor_message
ldy #>inside_inn_ask_about_trogdor_message
jmp finish_parse_message
;=================
; ring
;=================
inside_inn_ring:
lda CURRENT_NOUN
cmp #NOUN_BELL
beq inn_ring_bell
jmp parse_common_unknown
inn_ring_bell:
ldx #<inside_inn_ring_bell_message
ldy #>inside_inn_ring_bell_message
jmp finish_parse_message
;=================
; sleep
;=================
inside_inn_sleep:
lda GAME_STATE_1
and #NIGHT
bne inn_sleep_no_one
lda CURRENT_NOUN
cmp #NOUN_BED
beq inn_sleep_bed
cmp #NOUN_NONE
beq inn_sleep_bed
inn_sleep_no_one:
jmp parse_common_unknown
inn_sleep_bed:
ldx #<inside_inn_sleep_bed_message
ldy #>inside_inn_sleep_bed_message
jmp finish_parse_message
;=================
; open
;=================
inside_inn_open:
lda CURRENT_NOUN
cmp #NOUN_DOOR
beq inn_open_door
jmp parse_common_unknown
inn_open_door:
ldx #<inside_inn_open_door_message
ldy #>inside_inn_open_door_message
jmp finish_parse_message
;=================
; light
;=================
inside_inn_light:
lda GAME_STATE_1
and #NIGHT
beq inn_light_day
lda CURRENT_NOUN
cmp #NOUN_CANDLE
beq inn_light_candle
inn_light_day:
jmp parse_common_unknown
inn_light_candle:
ldx #<inside_inn_get_candle_message
ldy #>inside_inn_get_candle_message
jmp finish_parse_message
.include "dialog_inn.inc"