mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-01-03 18:29:53 +00:00
peasant: more work on noun parsing
more or less works
This commit is contained in:
parent
4682749f8e
commit
a98a86590c
@ -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
|
||||||
|
|
||||||
####
|
####
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user