mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-09-29 08:55:10 +00:00
peasant: hook up actual parser
not sure how optimized this will be, but it's a start
This commit is contained in:
parent
7b8021116d
commit
be70f8451d
@ -1,14 +1,36 @@
|
||||
.include "tokens.inc"
|
||||
|
||||
;==========================
|
||||
; parse input
|
||||
;==========================
|
||||
; input is in input_buffer
|
||||
|
||||
parse_input:
|
||||
; jsr hgr_save
|
||||
|
||||
lda input_buffer ; get first char FIXME
|
||||
and #$DF ; make uppercase 0110 0001 -> 0100 0001
|
||||
; uppercase buffer
|
||||
|
||||
parse_copy:
|
||||
cmp #'C'
|
||||
bne parse_inventory
|
||||
ldx #0
|
||||
upcase_loop:
|
||||
lda input_buffer,X
|
||||
beq done_upcase_loop
|
||||
and #$DF
|
||||
sta input_buffer,X
|
||||
inx
|
||||
jmp upcase_loop
|
||||
done_upcase_loop:
|
||||
|
||||
jsr get_verb
|
||||
|
||||
; jsr get_noun
|
||||
|
||||
; jsr local_parser
|
||||
|
||||
lda CURRENT_VERB
|
||||
|
||||
check_copy:
|
||||
|
||||
cmp #VERB_COPY
|
||||
bne check_inventory
|
||||
|
||||
; want copy
|
||||
lda #NEW_FROM_DISK
|
||||
@ -19,29 +41,25 @@ parse_copy:
|
||||
|
||||
jmp done_parse_message
|
||||
|
||||
|
||||
parse_inventory:
|
||||
cmp #'I'
|
||||
bne parse_l
|
||||
check_inventory:
|
||||
cmp #VERB_INVENTORY
|
||||
bne check_load
|
||||
|
||||
jsr show_inventory
|
||||
|
||||
jmp restore_parse_message
|
||||
|
||||
parse_l:
|
||||
cmp #'L'
|
||||
bne parse_talk
|
||||
check_load:
|
||||
cmp #VERB_LOAD
|
||||
bne check_look
|
||||
|
||||
lda input_buffer+2
|
||||
and #$DF ; make uppercase 0110 0001 -> 0100 0001
|
||||
cmp #'O'
|
||||
beq parse_look
|
||||
parse_load:
|
||||
jsr load_menu
|
||||
|
||||
jmp restore_parse_message
|
||||
|
||||
parse_look:
|
||||
check_look:
|
||||
cmp #VERB_LOOK
|
||||
bne check_talk
|
||||
|
||||
lda #<fake_error1
|
||||
sta OUTL
|
||||
@ -49,24 +67,27 @@ parse_look:
|
||||
jmp finish_parse_message
|
||||
|
||||
|
||||
parse_talk:
|
||||
cmp #'T'
|
||||
bne parse_s
|
||||
check_talk:
|
||||
cmp #VERB_TALK
|
||||
bne check_save
|
||||
|
||||
lda #<fake_error2
|
||||
sta OUTL
|
||||
lda #>fake_error2
|
||||
lda #<fake_error2
|
||||
sta OUTL
|
||||
lda #>fake_error2
|
||||
jmp finish_parse_message
|
||||
|
||||
parse_s:
|
||||
cmp #'S'
|
||||
bne parse_version
|
||||
check_save:
|
||||
cmp #VERB_SAVE
|
||||
bne check_show
|
||||
|
||||
lda input_buffer+2
|
||||
and #$DF ; make uppercase 0110 0001 -> 0100 0001
|
||||
cmp #'A'
|
||||
beq parse_save
|
||||
parse_show:
|
||||
jsr save_menu
|
||||
|
||||
jmp restore_parse_message
|
||||
|
||||
|
||||
check_show:
|
||||
cmp #VERB_SHOW
|
||||
bne check_version
|
||||
|
||||
bit LORES
|
||||
bit PAGE1
|
||||
@ -78,21 +99,16 @@ parse_show:
|
||||
|
||||
jmp done_parse_message
|
||||
|
||||
parse_save:
|
||||
jsr save_menu
|
||||
|
||||
jmp restore_parse_message
|
||||
|
||||
parse_version:
|
||||
cmp #'V'
|
||||
bne parse_help
|
||||
check_version:
|
||||
cmp #VERB_VERSION
|
||||
bne check_help
|
||||
|
||||
lda #<version_message
|
||||
sta OUTL
|
||||
lda #>version_message
|
||||
jmp finish_parse_message
|
||||
|
||||
parse_help:
|
||||
check_help:
|
||||
lda #<help_message
|
||||
sta OUTL
|
||||
lda #>help_message
|
||||
@ -112,3 +128,69 @@ done_parse_message:
|
||||
|
||||
|
||||
rts
|
||||
|
||||
|
||||
|
||||
;===========================
|
||||
; get verb
|
||||
;===========================
|
||||
;
|
||||
get_verb:
|
||||
lda #VERB_UNKNOWN ; default
|
||||
sta CURRENT_VERB
|
||||
|
||||
lda #<verb_lookup ; reset verb pointer
|
||||
sta get_verb_loop+1
|
||||
lda #>verb_lookup
|
||||
sta get_verb_loop+2
|
||||
|
||||
next_verb_loop:
|
||||
ldx #0
|
||||
stx WORD_MATCH
|
||||
get_verb_loop:
|
||||
lda verb_lookup
|
||||
bmi done_verb
|
||||
beq done_get_verb_loop
|
||||
cmp input_buffer,X
|
||||
beq verb_char_matched
|
||||
verb_char_nomatch:
|
||||
dec WORD_MATCH
|
||||
verb_char_matched:
|
||||
jsr inc_verb_ptr
|
||||
inx
|
||||
jmp get_verb_loop
|
||||
|
||||
done_verb:
|
||||
ldx WORD_MATCH
|
||||
beq found_verb
|
||||
|
||||
no_found_verb:
|
||||
jsr inc_verb_ptr
|
||||
jmp next_verb_loop
|
||||
|
||||
found_verb:
|
||||
and #$7f
|
||||
sta CURRENT_VERB
|
||||
|
||||
done_get_verb_loop:
|
||||
|
||||
rts
|
||||
|
||||
inc_verb_ptr:
|
||||
inc get_verb_loop+1
|
||||
bne inc_verb_ptr_noflo
|
||||
inc get_verb_loop+2
|
||||
inc_verb_ptr_noflo:
|
||||
|
||||
rts
|
||||
|
||||
verb_lookup:
|
||||
.byte "COPY",VERB_COPY|$80
|
||||
.byte "INV",VERB_INVENTORY|$80
|
||||
.byte "LOAD",VERB_LOAD|$80
|
||||
.byte "LOOK",VERB_LOOK|$80
|
||||
.byte "TALK",VERB_TALK|$80
|
||||
.byte "SAVE",VERB_SAVE|$80
|
||||
.byte "SHOW",VERB_SHOW|$80
|
||||
.byte "VER",VERB_VERSION|$80
|
||||
.byte $00
|
||||
|
@ -19,17 +19,12 @@ WHICH_PEASANTRY = 2
|
||||
peasant_quest:
|
||||
lda #0
|
||||
sta GAME_OVER
|
||||
|
||||
sta FRAME
|
||||
jsr hgr_make_tables
|
||||
|
||||
jsr hgr2
|
||||
|
||||
|
||||
|
||||
|
||||
lda #0
|
||||
sta FRAME
|
||||
|
||||
; update map location
|
||||
|
||||
jsr update_map_location
|
||||
@ -204,7 +199,7 @@ fake_error2:
|
||||
|
||||
.include "graphics/graphics_peasant3.inc"
|
||||
|
||||
.include "sprites/boat_sprites.inc"
|
||||
;.include "sprites/boat_sprites.inc"
|
||||
|
||||
map_backgrounds_low:
|
||||
.byte <jhonka_lzsa ; 10 -- jhonka
|
||||
|
167
games/peasant/tokens.inc
Normal file
167
games/peasant/tokens.inc
Normal file
@ -0,0 +1,167 @@
|
||||
VERB_UNKNOWN = 0
|
||||
VERB_ASK = 1
|
||||
VERB_BOO = 2
|
||||
VERB_BREAK = 3
|
||||
VERB_BUY = 4
|
||||
VERB_CHEAT = 5
|
||||
VERB_CLIMB = 6
|
||||
VERB_CLOSE = 7
|
||||
VERB_COPY = 8
|
||||
VERB_DANCE = 9
|
||||
VERB_DEPLOY = 10
|
||||
VERB_DIE = 11
|
||||
VERB_DITCH = 12
|
||||
VERB_DRINK = 13
|
||||
VERB_DROP = 14
|
||||
VERB_ENTER = 15
|
||||
VERB_FEED = 16
|
||||
VERB_GET = 17
|
||||
VERB_GIVE = 18
|
||||
VERB_GO = 19
|
||||
VERB_HALDO = 20
|
||||
VERB_INVENTORY = 21
|
||||
VERB_JUMP = 22
|
||||
VERB_KICK = 23
|
||||
VERB_KILL = 24
|
||||
VERB_KNOCK = 25
|
||||
VERB_LIGHT = 26
|
||||
VERB_LOAD = 27
|
||||
VERB_LOOK = 28
|
||||
VERB_MAKE = 29
|
||||
VERB_MAP = 30
|
||||
VERB_NO = 31
|
||||
VERB_OPEN = 32
|
||||
VERB_PARTY = 33
|
||||
VERB_PET = 34
|
||||
VERB_PLAY = 35
|
||||
VERB_PULL = 36
|
||||
VERB_PUNCH = 37
|
||||
VERB_PUSH = 38
|
||||
VERB_PUT = 39
|
||||
VERB_PWD = 40
|
||||
VERB_QUIT = 41
|
||||
VERB_READ = 42
|
||||
VERB_RIDE = 43
|
||||
VERB_RING = 44
|
||||
VERB_SAVE = 45
|
||||
VERB_SCARE = 46
|
||||
VERB_SHOOT = 47
|
||||
VERB_SHOW = 48
|
||||
VERB_SIT = 49
|
||||
VERB_SKIP = 50
|
||||
VERB_SLEEP = 51
|
||||
VERB_SMELL = 52
|
||||
VERB_SNIFF = 53
|
||||
VERB_STEAL = 54
|
||||
VERB_SWIM = 55
|
||||
VERB_TAKE = 56
|
||||
VERB_TALK = 57
|
||||
VERB_THIS = 58
|
||||
VERB_THROW = 59
|
||||
VERB_TRY = 60
|
||||
VERB_TURN = 61
|
||||
VERB_USE = 62
|
||||
VERB_VERSION = 63
|
||||
VERB_WAKE = 64
|
||||
VERB_WEAR = 65
|
||||
VERB_WHAT = 66
|
||||
VERB_WHERE = 67
|
||||
VERB_WHY = 68
|
||||
VERB_YES = 69
|
||||
|
||||
NOUN_UNKNOWN = 0
|
||||
NOUN_ARCHER = 1
|
||||
NOUN_ARROW = 2
|
||||
NOUN_BABY = 3
|
||||
NOUN_BEADS = 4
|
||||
NOUN_BELL = 5
|
||||
NOUN_BELT = 6
|
||||
NOUN_BERRIES = 7
|
||||
NOUN_BOAT = 8
|
||||
NOUN_BONE = 9
|
||||
NOUN_BOW = 10
|
||||
NOUN_BROOM = 11
|
||||
NOUN_BUSHES = 12
|
||||
NOUN_CANDLE = 13
|
||||
NOUN_CAVE = 14
|
||||
NOUN_CHAIR = 15
|
||||
NOUN_CLIFF = 16
|
||||
NOUN_CLUB = 17
|
||||
NOUN_COLD = 18
|
||||
NOUN_COTTAGE = 19
|
||||
NOUN_CRANK = 20
|
||||
NOUN_CURTAINS = 21
|
||||
NOUN_DAN = 22
|
||||
NOUN_DESK = 23
|
||||
NOUN_DINGHY = 24
|
||||
NOUN_DOING_SPROINGS = 25
|
||||
NOUN_DOOR = 26
|
||||
NOUN_DRAWER = 27
|
||||
NOUN_DRESSER = 28
|
||||
NOUN_DUDE = 29
|
||||
NOUN_FEED = 30
|
||||
NOUN_FENCE = 31
|
||||
NOUN_FIRE = 32
|
||||
NOUN_FLIES = 33
|
||||
NOUN_FOOD = 34
|
||||
NOUN_FOOTPRINTS = 35
|
||||
NOUN_GAME = 36
|
||||
NOUN_GARY = 37
|
||||
NOUN_GREEN = 38
|
||||
NOUN_GROUND = 39
|
||||
NOUN_GUY = 40
|
||||
NOUN_HAY = 41
|
||||
NOUN_HOLE = 42
|
||||
NOUN_HORSE = 43
|
||||
NOUN_INN = 44
|
||||
NOUN_JHONKA = 45
|
||||
NOUN_KERREK = 46
|
||||
NOUN_KNIGHT = 47
|
||||
NOUN_LADY = 48
|
||||
NOUN_LAKE = 49
|
||||
NOUN_LANTERN = 50
|
||||
NOUN_LEG = 51
|
||||
NOUN_LIGHTNING = 52
|
||||
NOUN_MAN = 53
|
||||
NOUN_MAP = 54
|
||||
NOUN_MASK = 55
|
||||
NOUN_MUD = 56
|
||||
NOUN_NED = 57
|
||||
NOUN_NOTE = 58
|
||||
NOUN_OPENINGS = 59
|
||||
NOUN_PAINTING = 60
|
||||
NOUN_PAPER = 61
|
||||
NOUN_PEASANT = 62
|
||||
NOUN_PEBBLES = 63
|
||||
NOUN_PILLOW = 64
|
||||
NOUN_PILLS = 65
|
||||
NOUN_PLAGUE = 66
|
||||
NOUN_PLAQUE = 67
|
||||
NOUN_POT = 68
|
||||
NOUN_RICHES = 69
|
||||
NOUN_ROBE = 70
|
||||
NOUN_ROCK = 71
|
||||
NOUN_ROOM = 72
|
||||
NOUN_RUB = 73
|
||||
NOUN_RUG = 74
|
||||
NOUN_SAND = 75
|
||||
NOUN_SANDWICH = 76
|
||||
NOUN_SHELF = 77
|
||||
NOUN_SIGN = 78
|
||||
NOUN_SKELETON = 79
|
||||
NOUN_SKULL = 80
|
||||
NOUN_SMELL = 81
|
||||
NOUN_SODA = 82
|
||||
NOUN_STUFF = 83
|
||||
NOUN_STUMP = 84
|
||||
NOUN_SUB = 85
|
||||
NOUN_TARGET = 86
|
||||
NOUN_TRACKS = 87
|
||||
NOUN_TREE = 88
|
||||
NOUN_TRINKET = 89
|
||||
NOUN_TROGDOR = 90
|
||||
NOUN_WATER = 91
|
||||
NOUN_WATERFALL = 92
|
||||
NOUN_WELL = 93
|
||||
NOUN_WINDOW = 94
|
||||
NOUN_WOMAN = 95
|
@ -170,6 +170,10 @@ INVENTORY_2_GONE = $A4
|
||||
INVENTORY_3_GONE = $A5
|
||||
END_OF_SAVE = $A6
|
||||
|
||||
CURRENT_VERB = $B0 ; parser
|
||||
CURRENT_NOUN = $B1
|
||||
WORD_MATCH = $B2
|
||||
|
||||
INPUT_X = $C0
|
||||
BOX_X1L = $C1
|
||||
BOX_X1H = $C2
|
||||
|
Loading…
Reference in New Issue
Block a user