.include "zp.inc"
.include "hardware.inc"
.include "qload.inc"

	;=====================
	; show inventory
	;=====================
show_inventory:

	lda	#0
	sta	INVENTORY_Y

	;=================
	; save bg

	lda	#20
	sta	BOX_Y1
	sta	SAVED_Y1
	lda	#135
	sta	BOX_Y2
	sta	SAVED_Y2

;	jsr	hgr_partial_save


	;====================
	; draw text box
draw_inv_box:

	lda	#0
	sta	BOX_X1H
	lda	#14
	sta	BOX_X1L
	lda	#20
	sta	BOX_Y1

	lda	#1
	sta	BOX_X2H
	lda	#5		; ?
	sta	BOX_X2L
	lda	#135
	sta	BOX_Y2

	jsr	draw_box

	;===================
	; draw main text
draw_inv_text:
	lda	#<inventory_message
	sta	OUTL
	lda	#>inventory_message
	sta	OUTH

	jsr	disp_put_string


	lda	#<press_esc_message
	sta	OUTL
	lda	#>press_esc_message
	sta	OUTH

	jsr	disp_put_string


	;===============
	; draw text
	;===============

	lda	#28
	sta	CURSOR_Y

	ldy	#0			; row

inv_reset_mask:
	lda	#1			; start at low item
	sta	INVENTORY_MASK

draw_inv_loop:

	cpy	#9			; if <9, left column >=9, right
	bcs	right_column		; bge

left_column:
	lda	#4			; left column is #4
	bne	done_column		; bra
right_column:
	lda	#23			; right column is #23
done_column:
	sta	CURSOR_X

	tya
	pha				; save Y

	jsr	have_item_y		; check if have item

	beq	questionmarks

we_have_item:
	clc
	lda	item_offsets,Y
	adc	#<item_strings
	sta	OUTL
	lda	#0
	adc	#>item_strings

	jmp	print_item

questionmarks:
	lda	#<unknown_string
	sta	OUTL
	lda	#>unknown_string

print_item:
	sta	OUTH

	jsr	disp_one_line


	lda	CURSOR_Y	; incrememnt cursor location
	clc
	adc	#8

	cmp	#100
	bne	inv_cursory_good
	lda	#28
inv_cursory_good:
	sta	CURSOR_Y

	asl	INVENTORY_MASK

	pla

	tay
	iny

	tya
	and	#$7
	beq	inv_reset_mask

	cpy	#18
	bne	draw_inv_loop

	;=================
	; draw strikeouts
	;=================
draw_strikeouts:

	ldy	#0
draw_strikeouts_loop:

	tya
	pha

	jsr	lost_item_y

	pla
	tay

	bcs	draw_strikeouts_continue


	; actually strike it out
	tya
	pha

	lda	#$7f
	sta	overwrite_char_smc+1

	lda	invert_smc1+1
	eor	#$7f
	sta	invert_smc1+1

	jsr	overwrite_entry

	lda	invert_smc1+1
	eor	#$7f
	sta	invert_smc1+1

	lda	#$20
	sta	overwrite_char_smc+1

	pla
	tay

draw_strikeouts_continue:
	iny
	cpy	#18
	bne	draw_strikeouts_loop



	;=======================
	; draw initial highlight
	;=======================

	ldy	INVENTORY_Y
	jsr	overwrite_entry

	;===========================
	; handle inventory keypress
	;===========================

handle_inv_keypress:

	;================
	; draw item

	jsr	draw_inv_sprite

	lda	KEYPRESS
	bpl	handle_inv_keypress	; no keypress

	bit	KEYRESET		; clear keyboard strobe

	pha

	;=================
	; erase old

	ldy	INVENTORY_Y
	jsr	overwrite_entry

	pla

	and	#$5F			; clear top bit, make uppercase

	cmp	#27
	beq	urgh_done		; ESCAPE
	cmp	#$7f
	bne	inv_check_down		; DELETE

urgh_done:
	jmp	done_inv_keypress

inv_check_down:
	cmp	#$0A
	beq	inv_handle_down
	cmp	#'S'
	bne	inv_check_up
inv_handle_down:

	ldx	INVENTORY_Y
	cpx	#8
	beq	inv_down_wrap
	cpx	#17
	beq	inv_down_wrap

	inx

	jmp	inv_down_done
inv_down_wrap:
	txa
	sec
	sbc	#8
	tax

inv_down_done:
	stx	INVENTORY_Y
	jmp	inv_done_moving

inv_check_up:
	cmp	#$0B
	beq	inv_handle_up
	cmp	#'W'
	bne	inv_check_left_right
inv_handle_up:

	ldx	INVENTORY_Y
	beq	inv_up_wrap
	cpx	#9
	beq	inv_up_wrap

	dex
	jmp	inv_up_done

inv_up_wrap:
	txa
	clc
	adc	#8
	tax

inv_up_done:
	stx	INVENTORY_Y
	jmp	inv_done_moving


inv_check_left_right:
	cmp	#$15
	beq	inv_handle_left_right
	cmp	#'D'
	beq	inv_handle_left_right
	cmp	#$08
	beq	inv_handle_left_right
	cmp	#'A'
	bne	inv_check_return
inv_handle_left_right:
	lda	INVENTORY_Y
	clc
	adc	#9
	cmp	#18
	bcc	inv_lr_good
	sec
	sbc	#18

inv_lr_good:
	sta	INVENTORY_Y
	jmp	inv_done_moving

inv_check_return:
	jsr	have_item
	beq	inv_done_moving

	jsr	show_item
	jmp	draw_inv_box

inv_done_moving:

	;================
	; draw new
	ldy	INVENTORY_Y
	jsr	overwrite_entry

	;================
	; repeat

	jmp	handle_inv_keypress

done_inv_keypress:

	rts


	;==================
	; have_item
	;==================
	; do we have Inventory Y
	; ZERO if no
	; not zero if yes
have_item:
	ldy	INVENTORY_Y
have_item_y:
	tya				; move to A
	and	#$7			; mask off to bottom 2?
	tax
	lda	masks,X			; load in mask
	sta	INVENTORY_MASK

	tya

	lsr
	lsr
	lsr		; Y/8
	tax

	lda	INVENTORY_1,X
	and	INVENTORY_MASK

	rts


	;==================
	; lost_item
	;==================
	; do we no longer have Inventory Y
	; CC if no
	; CS if yes
lost_item:
	ldy	INVENTORY_Y
lost_item_y:
	tya
	and	#$7
	tax
	lda	masks,X
	sta	INVENTORY_MASK

	tya

	lsr
	lsr
	lsr		; Y/8
	tax

	lda	INVENTORY_1_GONE,X
	and	INVENTORY_MASK
	beq	really_gone

	clc
	rts

really_gone:
	sec
	rts



	;=======================
	; draw inventory sprite
	;=======================
draw_inv_sprite:

	jsr	have_item

	bne	do_draw_inv_sprite

no_draw_inv_sprite:
	lda	#<no_sprite
	sta	INL
	lda	#>no_sprite
	jmp	done_draw_inv_sprite

do_draw_inv_sprite:
	lda	inv_sprite_table_low,Y
	sta	INL
	lda	inv_sprite_table_high,Y
done_draw_inv_sprite:
	sta	INH

	lda	#18
	sta	CURSOR_X
	lda	#88
	sta	CURSOR_Y

	jsr	hgr_draw_sprite_2x16

	rts


	;====================
	;====================
	; show item
	;====================
	;====================
show_item:

	lda	#0
	sta	BOX_X1H
	lda	#14
	sta	BOX_X1L
	lda	#20
	sta	BOX_Y1

	lda	#1
	sta	BOX_X2H
	lda	#5		; ?
	sta	BOX_X2L
	lda	#135
	sta	BOX_Y2

	jsr	draw_box


	lda	#<item_message
	sta	OUTL
	lda	#>item_message
	sta	OUTH

	jsr	disp_put_string

	lda	#<press_esc_message
	sta	OUTL
	lda	#>press_esc_message
	sta	OUTH

	jsr	disp_put_string

	ldy	INVENTORY_Y

	lda	descriptions_low,Y
	sta	OUTL
	lda	descriptions_high,Y
	sta	OUTH

	lda	#4
	sta	CURSOR_X
	lda	#32
	sta	CURSOR_Y

	jsr	disp_put_string_cursor

	;==========================
	; print no longer message

	jsr	lost_item
	bcs	skip_no_longer

	lda	#<no_longer_message
	sta	OUTL
	lda	#>no_longer_message
	sta	OUTH
	jsr	disp_put_string

skip_no_longer:

	;=======================
	; display sprite

	jsr	draw_inv_sprite



handle_item_keypress:

	lda	KEYPRESS
	bpl	handle_item_keypress	; no keypress

	bit	KEYRESET		; clear keyboard strobe


	rts


;======================
; text
;======================
;
; Note, greyed out could maybe print ---- for strikethrough

; printed after description
no_longer_message:
.byte	4,86,"You no longer    has this item.",0

item_message:
.byte	5,106,"Hit RETURN to go back to list",0

; first is only printed if have in inventory, though still can
inventory_message:
.byte	6,106,"Press RETURN for description",0
press_esc_message:
.byte 	6,115,"Press ESC or DELETE to exit",0

;====================
; Inventory Strings
;====================

unknown_string:
.byte	"???",0

item_offsets:
.byte	(item_arrow-item_strings)
.byte	(item_baby-item_strings)
.byte	(item_kerrek_belt-item_strings)
.byte	(item_chicken_feed-item_strings)
.byte	(item_funbow-item_strings)
.byte	(item_monster_mask-item_strings)
.byte	(item_pebbles-item_strings)
.byte	(item_pills-item_strings)
.byte	(item_riches-item_strings)
.byte	(item_robe-item_strings)
.byte	(item_soda-item_strings)
.byte	(item_meatball_sub-item_strings)
.byte	(item_super_trinket-item_strings)
.byte	(item_troghelmet-item_strings)
.byte	(item_trogshield-item_strings)
.byte	(item_trogsword-item_strings)
.byte	(item_impossible-item_strings)
.byte	(item_shirt-item_strings)



item_string_lens:
.byte	5	; arrow
.byte	4	; baby
.byte	11	; kerrek belt
.byte	12	; chicken feed
.byte	18	; SuprTime FunBow TM
.byte	14	; monster maskus
.byte	7	; pebbles
.byte	5	; pills
.byte	6	; riches
.byte	4	; robe
.byte	4	; soda
.byte	12	; meatball sub
.byte	13	; super trinket
.byte	10	; TrogHelmet
.byte	10	; TrogShield
.byte	9	; TrogSword
.byte	3	; ???
.byte	5	; shirt

item_strings:

item_arrow:
.byte	"arrow",0
item_baby:
.byte	"baby",0
item_kerrek_belt:
.byte	"kerrek belt",0
item_chicken_feed:
.byte	"chicken feed",0
item_funbow:
.byte	"SuprTime FunBow TM",0	; should be Super, makes column too wide
item_monster_mask:
.byte	"monster maskus",0
item_pebbles:
.byte	"pebbles",0
item_pills:
.byte	"pills",0
item_riches:
.byte	"riches",0
item_robe:
.byte	"robe",0
item_soda:
.byte	"soda",0
item_meatball_sub:
.byte	"meatball sub",0
item_super_trinket:
.byte	"super trinket",0
item_troghelmet:
.byte	"TrogHelmet",0
item_trogshield:
.byte	"TrogShield",0
item_trogsword:
.byte	"TrogSword",0
item_impossible:
.byte	"???",0
item_shirt:
.byte	"shirt",0

descriptions_low:
	.byte <arrow_description
	.byte <baby_description
	.byte <kerrek_belt_description
	.byte <chicken_feed_description
	.byte <funbow_description
	.byte <monster_maskus_description
	.byte <pebbles_description
	.byte <pills_description
	.byte <riches_description
	.byte <robe_description
	.byte <soda_description
	.byte <meatball_sub_description
	.byte <super_trinket_description
	.byte <troghelmet_description
	.byte <trogshield_description
	.byte <trogsword_description
	.byte <map_description
	.byte <tshirt_description

descriptions_high:
	.byte >arrow_description
	.byte >baby_description
	.byte >kerrek_belt_description
	.byte >chicken_feed_description
	.byte >funbow_description
	.byte >monster_maskus_description
	.byte >pebbles_description
	.byte >pills_description
	.byte >riches_description
	.byte >robe_description
	.byte >soda_description
	.byte >meatball_sub_description
	.byte >super_trinket_description
	.byte >troghelmet_description
	.byte >trogshield_description
	.byte >trogsword_description
	.byte >map_description
	.byte >tshirt_description

.include "text/lookup.inc"
.include "text/inventory.inc.lookup"

.if 0

; arrow
arrow_description:
.byte "Boy, you sure know how to pick",13
.byte "em! This arrow's kinda pointy",13
.byte "even!!",0

; baby
baby_description:
.byte "Awww! Peasant babies are",13
.byte "adorable. No wonder they fetch",13
.byte "such a pretty penny on the black",13
.byte "market.",0

; kerrek belt
kerrek_belt_description:
.byte "Phew! This thing stinks like all",13
.byte "getout. Why couldn't the Kerrek",13
.byte "have kidnapped a hot wench or",13
.byte "something that you coulda saved?",0

; chicken feed
chicken_feed_description:
.byte "Woah! Gold nuggets! Oh",13
.byte "wait...This is just chicken",13
.byte "feed. Crap.",0

; SuperTime FunBow TM
funbow_description:
.byte "This is a pretty fancy bow.",13
.byte "You're suprised those shady",13
.byte "archers give away such decent",13
.byte "prizes. You half-expected gold",13
.byte "fish in a bag.",0

; monster maskus
monster_maskus_description:
.byte "Man, those pagans sure can make",13
.byte "a freaky lookin mask when they",13
.byte "want to. It's like those theatre",13
.byte "masks' evil uncle or something.",0

; pebbles
pebbles_description:
.byte "Woah! Gray chicken feed! Oh",13
.byte "wait... those are just pebbles.",13
.byte "Heavier than they look, though.",0

; pills
pills_description:
.byte "The innkeeper's medication says",13
.byte "it's supposed to treat ",34,"general",13
.byte "oldness.  May cause checkers",13
.byte "playing, hiked-up pants, and",13
.byte "overall pee smell.",34,0

; riches
riches_description:
.byte "Riches, dude. Riches. That",13
.byte "peasant lady totally has to",13
.byte "share some of this with you,",13
.byte "right? At least that shiny,",13
.byte "clawed sceptre thing.",0

; robe
robe_description:
.byte "A propa peasant robe. It smells",13
.byte "freshly washed and has the",13
.byte "initials 'N.N' sewn onto the",13
.byte "tag.",0

; soda
soda_description:
.byte "A full bottle of popular soda.",0

; meatball sub
meatball_sub_description:
.byte "A piping hot meatball sub fresh",13
.byte "from the bottom of a dingy old",13
.byte "well. All you need is a bag of",13
.byte "chips and you've got a combo",13
.byte "meal!",0

; super trinket
super_trinket_description:
.byte "This super trinket is weird. It",13
.byte "looks like it could either kill",13
.byte "you or make you the hit of your",13
.byte "Christmas party.",0

; TrogHelmet
troghelmet_description:
.byte "The TrogHelmet is not screwing",13
.byte "around. It's a serious helmet.",13
.byte "It also protects against",13
.byte "harmful UV rays.",0

; TrogShield
trogshield_description:
.byte "Behold the TrogSheild! No",13
.byte "seriously, behold it. There's",13
.byte "no way Trogdor's fire breath can",13
.byte "penetrate this thing.",0

; TrogSword
trogsword_description:
.byte "The TrogSword is for real.",13
.byte "Hands-down the coolest item in",13
.byte "this whole game. You can't wait",13
.byte "to lop off that beefy arm of",13
.byte "Trogdor's with this guy.",0

; ???
map_description:

; t-shirt
tshirt_description:
.byte "This has got to be your favorite",13
.byte "T-Shirt ever. Oh, the times you",13
.byte "had at Scalding Lake. Canoeing,",13
.byte "fishing, stoning heathens. What",13
.byte "a Blast!",0

.endif

	;========================
	; overwrite entry
	;========================
	; Y = which

overwrite_entry:

;	lda	#$7f
;	sta	invert_smc1+1

	lda	invert_smc1+1
	eor	#$7f
	sta	invert_smc1+1

overwrite_set_mask:

	;==============
	; set X

	cpy	#9
	bcs	overwrite_right_column		; bge

overwrite_left_column:
	lda	#4
	sta	CURSOR_X

	tya

	jmp	overwrite_done_column


overwrite_right_column:
	lda	#23
	sta	CURSOR_X

	tya
	sec
	sbc	#9


overwrite_done_column:
	asl
	asl
	asl
	clc
	adc	#28

	sta	CURSOR_Y

	tya

	;===================
	; check if have item

	jsr	have_item_y

	beq	overwrite_not_have

overwrite_have:
	ldx	item_string_lens,Y
	bne	overwrite_have_loop

overwrite_not_have:
	ldx	#3

overwrite_have_loop:
	txa
	pha
overwrite_char_smc:
	lda	#$20
	jsr	hgr_put_char_cursor
	inc	CURSOR_X
	pla
	tax
	dex
	bne	overwrite_have_loop


;	lda	#$00
;	sta	invert_smc1+1

	lda	invert_smc1+1
	eor	#$7f
	sta	invert_smc1+1

	rts


masks:
	.byte $01,$02,$04,$08, $10,$20,$40,$80

no_sprite:
	.byte $7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f
	.byte $7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f
	.byte $7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f
	.byte $7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f

inv_sprite_table_low:
	.byte	<arrow_sprite
	.byte	<baby_sprite
	.byte	<kerrek_belt_sprite
	.byte	<chicken_feed_sprite
	.byte	<bow_sprite
	.byte	<mask_sprite
	.byte	<pebbles_sprite
	.byte	<pills_sprite
	.byte	<riches_sprite
	.byte	<robe_sprite
	.byte	<soda_sprite
	.byte	<sub_sprite
	.byte	<trinket_sprite
	.byte	<troghelm_sprite
	.byte	<trogshield_sprite
	.byte	<trogsword_sprite
	.byte	<no_sprite
	.byte	<tshirt_sprite

inv_sprite_table_high:
	.byte	>arrow_sprite
	.byte	>baby_sprite
	.byte	>kerrek_belt_sprite
	.byte	>chicken_feed_sprite
	.byte	>bow_sprite
	.byte	>mask_sprite
	.byte	>pebbles_sprite
	.byte	>pills_sprite
	.byte	>riches_sprite
	.byte	>robe_sprite
	.byte	>soda_sprite
	.byte	>sub_sprite
	.byte	>trinket_sprite
	.byte	>troghelm_sprite
	.byte	>trogshield_sprite
	.byte	>trogsword_sprite
	.byte	>no_sprite
	.byte	>tshirt_sprite




.include "sprites/inventory_sprites.inc"

.include "hgr_2x16_sprite.s"