peasant: more work on noun parsing

more or less works
This commit is contained in:
Vince Weaver 2021-10-18 23:42:02 -04:00
parent 4682749f8e
commit a98a86590c
3 changed files with 130 additions and 96 deletions

View File

@ -402,6 +402,7 @@ dialog_peasant2.o: dialog_peasant2.s
dialog_peasant2.inc: generate_common dialog_peasant2 dialog_peasant2.inc: generate_common dialog_peasant2
./generate_common -a 0xe000 -s pass_look_message dialog_peasant2.lst > dialog_peasant2.inc ./generate_common -a 0xe000 -s pass_look_message dialog_peasant2.lst > dialog_peasant2.inc
./generate_common -a 0xe000 -s knight_look_message dialog_peasant2.lst >> dialog_peasant2.inc
#### ####

View File

@ -58,9 +58,8 @@ done_upcase_loop:
; quit ; quit
;================ ;================
parse_quit: parse_quit:
lda #<quit_message ldx #<quit_message
sta OUTL ldy #>quit_message
lda #>quit_message
jmp finish_parse_message jmp finish_parse_message
;================ ;================
@ -68,27 +67,24 @@ parse_quit:
;================ ;================
parse_smell: parse_smell:
parse_sniff: parse_sniff:
lda #<smell_message ldx #<smell_message
sta OUTL ldy #>smell_message
lda #>smell_message
jmp finish_parse_message jmp finish_parse_message
;================ ;================
; dan ; dan
;================ ;================
parse_dan: parse_dan:
lda #<dan_message ldx #<dan_message
sta OUTL ldy #>dan_message
lda #>dan_message
jmp finish_parse_message jmp finish_parse_message
;================ ;================
; go ; go
;================ ;================
parse_go: parse_go:
lda #<go_message ldx #<go_message
sta OUTL ldy #>go_message
lda #>go_message
jmp finish_parse_message jmp finish_parse_message
;================ ;================
@ -96,18 +92,16 @@ parse_go:
;================ ;================
parse_drop: parse_drop:
parse_throw: parse_throw:
lda #<no_baby_message ldx #<no_baby_message
sta OUTL ldy #>no_baby_message
lda #>no_baby_message
jmp finish_parse_message jmp finish_parse_message
;================ ;================
; climb ; climb
;================ ;================
parse_climb: parse_climb:
lda #<climb_cliff_message ldx #<climb_cliff_message
sta OUTL ldy #>climb_cliff_message
lda #>climb_cliff_message
jmp finish_parse_message jmp finish_parse_message
;================ ;================
@ -116,36 +110,32 @@ parse_climb:
parse_get: parse_get:
parse_take: parse_take:
parse_steal: parse_steal:
lda #<get_message ldx #<get_message
sta OUTL ldy #>get_message
lda #>get_message
jmp finish_parse_message jmp finish_parse_message
;================ ;================
; give ; give
;================ ;================
parse_give: parse_give:
lda #<give_message ldx #<give_message
sta OUTL ldy #>give_message
lda #>give_message
jmp finish_parse_message jmp finish_parse_message
;================ ;================
; haldo ; haldo
;================ ;================
parse_haldo: parse_haldo:
lda #<haldo_message ldx #<haldo_message
sta OUTL ldy #>haldo_message
lda #>haldo_message
jmp finish_parse_message jmp finish_parse_message
;================ ;================
; why ; why
;================ ;================
parse_why: parse_why:
lda #<why_message ldx #<why_message
sta OUTL ldy #>why_message
lda #>why_message
jmp finish_parse_message jmp finish_parse_message
;================ ;================
@ -153,9 +143,8 @@ parse_why:
;================ ;================
parse_this: parse_this:
parse_what: parse_what:
lda #<what_message ldx #<what_message
sta OUTL ldy #>what_message
lda #>what_message
jmp finish_parse_message jmp finish_parse_message
@ -163,27 +152,24 @@ parse_what:
; party ; party
;================ ;================
parse_party: parse_party:
lda #<party_message ldx #<party_message
sta OUTL ldy #>party_message
lda #>party_message
jmp finish_parse_message jmp finish_parse_message
;================ ;================
; map ; map
;================ ;================
parse_map: parse_map:
lda #<map_message ldx #<map_message
sta OUTL ldy #>map_message
lda #>map_message
jmp finish_parse_message jmp finish_parse_message
;================ ;================
; help ; help
;================ ;================
parse_help: parse_help:
lda #<help_message ldx #<help_message
sta OUTL ldy #>help_message
lda #>help_message
jmp finish_parse_message jmp finish_parse_message
@ -191,9 +177,8 @@ parse_help:
; boo ; boo
;================ ;================
parse_boo: parse_boo:
lda #<boo_message ldx #<boo_message
sta OUTL ldy #>boo_message
lda #>boo_message
jmp finish_parse_message jmp finish_parse_message
;================ ;================
@ -201,9 +186,8 @@ parse_boo:
;================ ;================
parse_cheat: parse_cheat:
lda #<cheat_message ldx #<cheat_message
sta OUTL ldy #>cheat_message
lda #>cheat_message
jmp finish_parse_message jmp finish_parse_message
;================= ;=================
@ -227,9 +211,8 @@ parse_copy:
parse_dance: parse_dance:
lda #<dance_message ldx #<dance_message
sta OUTL ldy #>dance_message
lda #>dance_message
jmp finish_parse_message jmp finish_parse_message
;=================== ;===================
@ -243,9 +226,8 @@ parse_die:
lda #1 lda #1
sta GAME_OVER sta GAME_OVER
lda #<die_message ldx #<die_message
sta OUTL ldy #>die_message
lda #>die_message
jmp finish_parse_message jmp finish_parse_message
@ -255,20 +237,18 @@ parse_die:
parse_drink: parse_drink:
lda #<drink_message ldx #<drink_message
sta OUTL stx OUTL
lda #>drink_message ldy #>drink_message
sta OUTH sty OUTH
jsr print_text_message jsr print_text_message
jsr wait_until_keypress jsr wait_until_keypress
jsr hgr_partial_restore jsr hgr_partial_restore
lda #<drink_message2 ldx #<drink_message2
sta OUTL ldy #>drink_message2
lda #>drink_message2
sta OUTH
jmp finish_parse_message jmp finish_parse_message
@ -309,13 +289,26 @@ parse_load:
parse_look: parse_look:
lda #<pass_look_message lda CURRENT_NOUN
sta OUTL cmp #NOUN_KNIGHT
lda #>pass_look_message beq knight_look
cmp #NOUN_NONE
beq pass_look
bne irrelevant_look
; lda #<look_irrelevant_message knight_look:
; sta OUTL ldx #<knight_look_message
; lda #>look_irrelevant_message ldy #>knight_look_message
jmp finish_parse_message
pass_look:
ldx #<pass_look_message
ldy #>pass_look_message
jmp finish_parse_message
irrelevant_look:
ldx #<look_irrelevant_message
ldy #>look_irrelevant_message
jmp finish_parse_message jmp finish_parse_message
;=================== ;===================
@ -324,9 +317,8 @@ parse_look:
parse_talk: parse_talk:
lda #<talk_noone_message ldx #<talk_noone_message
sta OUTL ldy #>talk_noone_message
lda #>talk_noone_message
jmp finish_parse_message jmp finish_parse_message
;=================== ;===================
@ -360,9 +352,8 @@ parse_show:
parse_version: parse_version:
lda #<version_message ldx #<version_message
sta OUTL ldy #>version_message
lda #>version_message
jmp finish_parse_message jmp finish_parse_message
;===================== ;=====================
@ -391,9 +382,8 @@ where_loop:
where_done: where_done:
lda #<where_message ldx #<where_message
sta OUTL ldy #>where_message
lda #>where_message
jmp finish_parse_message jmp finish_parse_message
;================== ;==================
@ -438,14 +428,14 @@ parse_wake:
parse_wear: parse_wear:
parse_yet: parse_yet:
parse_unknown: parse_unknown:
lda #<unknown_message ldx #<unknown_message
sta OUTL ldy #>unknown_message
lda #>unknown_message
jmp finish_parse_message jmp finish_parse_message
finish_parse_message: finish_parse_message:
sta OUTH stx OUTL
sty OUTH
jsr print_text_message jsr print_text_message
jsr wait_until_keypress jsr wait_until_keypress
@ -485,8 +475,8 @@ get_verb:
sta get_verb_loop+2 sta get_verb_loop+2
next_verb_loop: next_verb_loop:
ldx #0 ; set match count to none ldx #0 ; set input pointer to zero
stx WORD_MATCH stx WORD_MATCH ; set match count to zero
get_verb_loop: get_verb_loop:
lda verb_lookup ; get char from verb lda verb_lookup ; get char from verb
@ -614,35 +604,48 @@ verb_lookup:
; return UNKNOWN if no matches ; return UNKNOWN if no matches
get_noun: get_noun:
lda #NOUN_NONE ; default lda #NOUN_NONE ; if we have to second word, then none
sta CURRENT_NOUN sta CURRENT_NOUN
lda #<noun_lookup ; reset verb pointer ldx #0 ; input pointer
try_next_word:
jsr noun_next_space
bcs done_get_noun_loop
stx TEMP0 ; save input pointer
lda #<noun_lookup ; reset noun pointer
sta get_noun_smc+1 sta get_noun_smc+1
lda #>noun_lookup lda #>noun_lookup
sta get_noun_smc+2 sta get_noun_smc+2
lda #NOUN_UNKNOWN ; at this point we have second word
sta CURRENT_NOUN ; so if we hit end it's unknown
next_noun_loop: next_noun_loop:
ldx #0 ldx TEMP0 ; reset to begin of current word
stx WORD_MATCH lda #0
sta WORD_MATCH ; set match count to zero
get_noun_loop: get_noun_loop:
get_noun_smc: get_noun_smc:
lda noun_lookup lda noun_lookup ; load byte from current noun
bmi done_noun bmi done_noun ; if high bit set, hit end
beq done_get_noun_loop beq try_next_word ; if zero, end of list
cmp input_buffer,X
beq noun_char_matched cmp input_buffer,X ; compare with input buffer
beq noun_char_matched ; see if matched
noun_char_nomatch: noun_char_nomatch:
dec WORD_MATCH dec WORD_MATCH ; indicate wasn't a match
noun_char_matched: noun_char_matched:
jsr inc_noun_ptr jsr inc_noun_ptr
inx inx
jmp get_noun_loop jmp get_noun_loop ; loop
done_noun: done_noun:
ldx WORD_MATCH ldx WORD_MATCH ; if we matched noun...
beq found_noun beq found_noun
no_found_noun: no_found_noun:
@ -650,7 +653,7 @@ no_found_noun:
jmp next_noun_loop jmp next_noun_loop
found_noun: found_noun:
and #$7f and #$7f ; found, strip high bit and save
sta CURRENT_NOUN sta CURRENT_NOUN
done_get_noun_loop: done_get_noun_loop:
@ -665,6 +668,34 @@ inc_noun_ptr_noflo:
rts rts
;=========================
; noun next space
;=========================
; point X to one past next space in input_buffer
; carry set if hit end
noun_next_space:
lda input_buffer,X
beq end_of_input
cmp #' '
beq end_of_word
inx
jmp noun_next_space
end_of_word:
inx ; point one past
clc
rts
end_of_input:
sec
rts
noun_lookup: noun_lookup:
.byte "ARCHER",NOUN_ARCHER|$80 .byte "ARCHER",NOUN_ARCHER|$80
.byte "KNIGHT",NOUN_KNIGHT|$80 .byte "KNIGHT",NOUN_KNIGHT|$80

View File

@ -226,10 +226,12 @@ pass_look_message:
.byte "knight blocks the entrance.",0 .byte "knight blocks the entrance.",0
; + look knight/man/dude/guy ; + look knight/man/dude/guy
knight_look_message:
.byte "He looks way cooler than",13 .byte "He looks way cooler than",13
.byte "you.",0 .byte "you.",0
; + look sign ; + look sign
sign_look_message:
.byte "What that sign there? That",13 .byte "What that sign there? That",13
.byte "sign says 'Trogdor.'",0 .byte "sign says 'Trogdor.'",0