⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.s

📁 这是由文曲星的开发者LEE写的汇编游戏末日传说.rar代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	cmp	#3
	beq	magic_use_rts ;濒死不加血
	jsr	cmp_hp
	jcs	magic_use_rts
	jsr	add_hp
magic_dec:
	lda	cur_man
	jsr	get_friend_addr
	ldy	#MP_OFF
	lda	(a1),y
	sec
	sbc	data_read_buf+11
	sta	(a1),y
	iny
	lda	(a1),y
	sbc	#0
	sta	(a1),y
	jmp	bell
magic_use_rts:
	rts
	
fmagic_use:
	lm	my_cur_obj,select_man
	lda	cur_man
	jsr	get_friend_addr
	lda	#MAGIC_OFF
	clc
	adc	select_magic
	tay
	lda	(a1),y
	beq	fmagic_use_rts	
	tax
	lda	#MAGIC_CLASS
	jsr	get_object
	jsr	ram_get256
	lda	cur_man
	asl	a
	tax
	lda	my_mp+1,x
	bne	fmagic_use1
	lda	my_mp,x
	cmp	data_read_buf+11
	bcc	fmagic_use_rts
fmagic_use1:
	lm2	magic_graph,data_read_buf+12
	lm2	magic_power,data_read_buf+9
	lm	magic_attr,data_read_buf+8
	cmp	#HPADD
	bne	fmagic_use2
	ldx	select_man
	lda	my_stat,x
	cmp	#3
	beq	fmagic_use_rts ;濒死不加血
	lda	select_man
	jsr	fcmp_hp
	jcs	magic_use_rts
	jsr	fadd_hp
fmagic_dec:
	lda	cur_man
	asl	a
	tax
	lda	my_mp,x
	sec
	sbc	data_read_buf+11
	sta	my_mp,x
	lda	my_mp+1,x
	sbc	#0
	sta	my_mp+1,x
	lm	fight_use,#1
fmagic_use_rts:
	lm	my_cur_obj,my_cur_man
	rts
fmagic_use2:
	cmp	#ATTACK
	bne	fmagic_use_rts
	jmp	fmagic_dec

disp_magic:
	lda	cur_man
	jsr	get_friend_addr
	ldy	#MAGIC_OFF
	lda	(a1),y
	bne	disp_magic1
	rts
disp_magic1:
	lda	#MAGIC_OFF
	adda2	a1
	jsr	my_cls
	lm	total_magic,#0
disp_magic2:	
	ldy	total_magic
	lda	(a1),y
	beq	disp_magic4
	tax
	lda	#MAGIC_CLASS
	jsr	get_object
	jsr	ram_get256
	ldx	total_magic
	lda	magic_addr,x
	tax
	ldy	#0
disp_magic3:	
	lda	data_read_buf,y
	sta	ScreenBuffer,x
	iny
	inx
	cpy	#8
	bcc	disp_magic3
	inc	total_magic
	cmp1	total_magic,#12
	bcc	disp_magic2
disp_magic4:
	jsr	clear_attr
	ldx	select_magic
	lda	magic_addr,x
	sta	8eh
	clc
	adc	#8
	sta	90h
	CONVP
	jsr	gblcd12x
	lm	total_man,#0
disp_magic5:
	ldy	total_man
	lda	friends,y
	bmi	disp_magic7
	asl	a
	sec
	rol	a
	sta	bank_data_ptr
	lm	bank_data_ptr+1,#0
	lm	x0,#141
	lda	man_yline,y
	sta	y0
	jsr	write_16x16x
	cmp1	total_man,select_man
	bne	disp_magic6
	lm	lcmd,#2
	jsr	block_draw
disp_magic6:
	inc	total_man
	cmp1	total_man,#4
	bcc	disp_magic5
disp_magic7:
	jsr	draw_bigblock
	lm	x0,#138
	sta	x1
	lm	y0,#0
	lm	y1,#79
	lm	lcmd,#1
	jsr	line_draw
	jsr	scroll_to_lcd
	lda	#1
	rts
	
equip_goods:
	lm	cur_part,#0
	lda	cur_man
	jsr	get_friend_addr
	ldy	#FOOT_OFF
	ldx	#3
equip_goods0:
	lda	(a1),y
	sta	cur_head,x
	lda	#0ffh
	sta	head_no,x
	dey
	dex
	bpl	equip_goods0
	ldy	#SEX_OFF
	lda	(a1),y
	sta	cur_man_sex
	jsr	disp_equip
equip_goods1:
	jsr	wait_key
	cmp	#ESC_KEY
	beq	equip_goods_rts
	SWITCH	equip_cmd_len,equip_cmd
	jmp	equip_goods1
equip_goods_rts:
	jsr	write_menu
	rts

equip_cmd:	
	db	UP_KEY
	db	DOWN_KEY
	db	LEFT_KEY
	db	RIGHT_KEY
	db	CR_KEY
equip_cmd_len	equ	$-equip_cmd
	dw	equip_up
	dw	equip_down
	dw	equip_left
	dw	equip_right
	dw	equip_cr

equip_up:
	lda	cur_part
	beq	equip_up1
	dec	cur_part
	jsr	disp_equip3
equip_up1:
	rts

equip_down:
	lda	cur_part
	cmp	#3
	bcs	equip_down1
	inc	cur_part
	jsr	disp_equip3
equip_down1:
	rts

equip_right:
	ldx	cur_part
	lda	head_no,x
	pha
	lda	goods_num
	beq	equip_right2
equip_right1:
	ldx	cur_part
	ldy	head_no,x
	iny
	cpy	goods_num
	bcs	equip_right2
	tya
	sta	head_no,x
	jsr	get_goods
	lda	data_read_buf
	sec
	sbc	#HEADEQUIP
	cmp	cur_part
	bne	equip_right1
	lda	data_read_buf+9 ;装备适合的种族性别
	and	#0fh
	and	cur_man_sex
	beq	equip_right1
	lda	data_read_buf+9
	and	#30h
	and	cur_man_sex
	beq	equip_right1
	ldx	cur_part
	lda	head_no,x
	asl	a
	tay
	lda	my_goods,y
	sta	cur_head,x
	pla
	jmp	disp_equip
equip_right2:
	pla
	ldx	cur_part
	sta	head_no,x
	rts
	
equip_left:
	ldx	cur_part
	lda	head_no,x
	pha
	lda	goods_num
	beq	equip_left2
equip_left1:	
	ldx	cur_part
	ldy	head_no,x
	dey
	bmi	equip_left2
	tya
	sta	head_no,x
	jsr	get_goods
	lda	data_read_buf
	sec
	sbc	#HEADEQUIP
	cmp	cur_part
	bne	equip_left1
	lda	data_read_buf+9 ;装备适合的种族性别
	and	#0fh
	and	cur_man_sex
	beq	equip_left1
	lda	data_read_buf+9
	and	#30h
	and	cur_man_sex
	beq	equip_left1
	ldx	cur_part
	lda	head_no,x
	asl	a
	tay
	lda	my_goods,y
	sta	cur_head,x
	pla
	jmp	disp_equip
equip_left2:
	pla
	ldx	cur_part
	sta	head_no,x
	rts

equip_del:	
	lda	cur_head,x
	jsr	goods_inc
	bcc	equip_del1
	lda	cur_man
	jsr	get_friend_addr
	lda	#HEAD_OFF
	clc
	adc	cur_part
	tay
	lda	#0
	sta	(a1),y
	ldx	cur_part
	sta	cur_head,x
	jmp	disp_equip
equip_del1:
	rts

equip_cr:
	ldx	cur_part
	lda	head_no,x
	bmi	equip_del
	lda	cur_man
	jsr	get_friend_addr
	lda	#HEAD_OFF
	clc
	adc	cur_part
	pha
	tay
	lda	(a1),y
	jsr	goods_inc
	pla
	tay
	bcc	equip_cr4
	ldx	cur_part
	lda	cur_head,x
	sta	(a1),y
	lda	head_no,x
	jsr	goods_decx
	ldx	cur_part
	lda	head_no,x
	sta	a1
	lda	#0ffh
	sta	head_no,x
	bcc	equip_cr3 ;没有删除物品(只是数量减少)
	ldx	#3
equip_cr1:
	lda	head_no,x
	bmi	equip_cr2
	cmp	a1
	bcc	equip_cr2 ;物品指针修正
	dec	head_no,x
equip_cr2:
	dex
	bpl	equip_cr1	
equip_cr3:
	jmp	disp_equip3
equip_cr4:	
	rts

goods_decn:
	cmp	#0
	beq	goods_decn_rts
	ldy	#0
	ldx	#0
	cpy	goods_num
	beq	goods_decn_rts
goods_decn1:
	cmp	my_goods,x
	beq	goods_decn2
	inx
	inx
	iny
	cpy	goods_num
	bcc	goods_decn1
goods_decn_rts:	
	rts
goods_decn2:
	tya
goods_decx:
	tay
	asl	a
	tax
	inx
	lda	my_goods,x
	cmp	#1
	beq	goods_decx1
	dec	my_goods,x
	clc
	rts
goods_decx1:
	iny
	cpy	goods_num
	beq	goods_decx3	
	tya
	asl	a
	tax
	tay
	dey
	dey
goods_decx2:	
	lda	my_goods,x
	sta	my_goods,y
	inx
	iny
	cpx	#MAX_GOODS*2
	bcc	goods_decx2
goods_decx3:	
	dec	goods_num
	rts
	
goods_inc:
	cmp	#0
	beq	goods_inc_suc
	ldy	#0
	ldx	#0
	cpy	goods_num
	beq	goods_inc11
goods_inc1:
	cmp	my_goods,x
	beq	goods_inc2
	inx
	inx
	iny
	cpy	goods_num
	bcc	goods_inc1
	cpy	#MAX_GOODS
	bcs	goods_inc_fail
goods_inc11:
	sta	my_goods,x
	lda	#1
	sta	my_goods+1,x
	inc	goods_num
goods_inc_suc:	
	sec
	rts
goods_inc_fail:
	clc
	rts
goods_inc2:
	lda	my_goods+1,x
	cmp	#99
	bcs	goods_inc_fail
	inc	my_goods+1,x
	sec
	rts

disp_equip:
	ldy	#7
	lda	#0
disp_equip0:
	sta	equip_value,y
	dey
	bpl	disp_equip0
	ldy	#0
disp_equip1:
	lda	equip_menu,y
	sta	ScreenBuffer,y
	iny
	cpy	#26*6
	bcc	disp_equip1
	lm	a1,#3
disp_equip20:	
	ldy	a1
	lda	cur_head,y
	jsr	get_goods1
	ldy	a1
	lda	equip_addr,y
	tax
	ldy	#1
disp_equip2:	
	lda	data_read_buf,y
	sta	ScreenBuffer,x
	iny
	inx
	cpy	#7
	bcc	disp_equip2
	lda	data_read_buf+10
	adda2	equip_value
	lda	data_read_buf+11
	adda2	equip_value+2
	lda	data_read_buf+12
	adda2	equip_value+4
	lda	data_read_buf+13
	adda2	equip_value+6
	dec	a1
	bpl	disp_equip20
	lm2	a6,#equip_data
	lm2	a7,#equip_value
	jsr	data_string
disp_equip3:
	ldy	#3
disp_equip4:	
	lda	head_no,y
	bpl	disp_equip5
	lda	cur_head,y
	beq	disp_equip5
	ldx	equip_addr2,y
	lda	#0a1h
	sta	ScreenBuffer,x
	lda	#0cch
	sta	ScreenBuffer+1,x
	jmp	disp_equip6
disp_equip5:
	ldx	equip_addr2,y
	lda	#20h
	sta	ScreenBuffer,x
	sta	ScreenBuffer+1,x
disp_equip6:	
	dey
	bpl	disp_equip4
	jsr	clear_attr
	ldx	cur_part
	lda	part_addr,x
	sta	8eh
	clc
	adc	#2
	sta	90h
	CONVP
	jsr	gblcd12x
	jsr	draw_bigblock
	jmp	scroll_to_lcd

disp_save:
	ldy	#0
disp_save1:
	lda	save_menu,y
	sta	ScreenBuffer,y
	iny
	cpy	#26*6
	bcc	disp_save1
	jsr	check_save
	lm	save_1,_a3
	lm	save_2,_a3h
disp_save2:	
	jsr	clear_attr
	ldx	cur_sel
	lda	part_addr,x
	sta	8eh
	clc
	adc	#4
	sta	90h
	CONVP
	jsr	gblcd12x
	jsr	draw_bigblock
	lm	x0,#38
	lm	x1,#38
	lm	y0,#0
	lm	y1,#79
	lm	lcmd,#1
	jsr	line_draw
	jmp	scroll_to_lcd

special:
	lda	cur_man
	jsr	cheat
	jmp	write_menu
	
load_save:
	lm	cur_sel,#0
	jsr	disp_save
load_save1:
	jsr	wait_key
	cmp	#ESC_KEY
	beq	load_save_rts
	SWITCH	save_cmd_len,save_cmd
	jmp	load_save1
load_save_rts:
	jsr	write_menu
	rts

save_cmd:	
	db	UP_KEY
	db	DOWN_KEY
	db	CR_KEY
	db	'b'
	db	'n'
save_cmd_len	equ	$-save_cmd
	dw	sys_up
	dw	sys_down
	dw	sys_cr
	dw	sys_1
	dw	sys_2

sys_up:
	lda	cur_sel
	beq	sys_up1
	dec	cur_sel
	jsr	disp_save2
sys_up1:
	rts
	
sys_down:
	lda	cur_sel
	cmp	#2
	bcs	sys_down1
	inc	cur_sel
	jsr	disp_save2
sys_down1:
	rts

sys_cr:
	lda	cur_sel
	cmp	#2
	bne	sys_cr1
	ldx	#StackTop
	txs
	jmp	start0
sys_cr1:
	rts

sys_1:
	lda	#0
	beq	sys_3
sys_2:
	lda	#1
sys_3:
	sta	cur_save
	sta	_a3
	lda	cur_sel
	cmp	#2
	bcs	sys_cr1
	cmp	#1
	beq	sys_6
	ldy	#11
sys_4:
	lda	save_menu+36,y
	sta	ScreenBuffer+36,y
	dey
	bpl	sys_4
	lm	save_level,my_data+LEVEL_OFF
	lda	minute2
	and	#3fh
	clc
	adc	game_min
	cmp	#60
	bcc	sys_41
	inc	game_hour
	sbc	#60
sys_41:	
	sta	game_min
	sta	save_min
	lda	hour2
	and	#1fh
	clc
	adc	game_hour
	sta	game_hour
	sta	save_hour
	lda	#0
	sta	hour2
	sta	minute2
	lm2	a6,#saves_data
	lm2	a7,#save_level
	jsr	data_string
	ldy	#11
sys_5:
	lda	ScreenBuffer+36,y
	sta	save_info,y
	dey
	bpl	sys_5
	jsr	save_file
	jmp	disp_save
sys_6:
	jsr	load_file
	bcs	sys_7
	rts
sys_7:
	ldx	#StackTop
	txs
	jmp	next_game

continue_game:
	lm	cur_sel,#1
	jsr	disp_save
continue_game1:
	jsr	wait_key
	cmp	#ESC_KEY
	beq	continue_game_rts
	SWITCH	continue_cmd_len,continue_cmd
	jmp	continue_game1
continue_game_rts:
	rts

continue_cmd:	
	db	'b'
	db	'n'
continue_cmd_len	equ	$-continue_cmd
	dw	sys_1
	dw	sys_2

pop_trade:
	lda	data_read_buf+2
	sta	tradelogo
	ldy	#0
	sty	select_goods
pop_trade1:
	lda	data_read_buf+3,y
	sta	trade_goods,y
	beq	pop_trade2
	iny
	bne	pop_trade1
pop_trade2:
	sty	total_trade
	cmp1	tradelogo,#3
	jeq	pop_inn ;旅店
	jsr	disp_trade
pop_trade3:	
	jsr	wait_key
	cmp	#ESC_KEY
	beq	pop_trade_rts
	SWITCH	trade_cmd_len,trade_cmd
	jmp	pop_trade3
pop_trade_rts:	
	jmp	refreshmap

trade_cmd:
	db	LEFT_KEY
	db	RIGHT_KEY
	db	UP_KEY
	db	DOWN_KEY
	db	CR_KEY
	db	F2_KEY
trade_cmd_len	equ	$-trade_cmd
	dw	trade_left
	dw	trade_right
	dw	trade_up
	dw	trade_down
	dw	trade_cr
	dw	trade_sell

trade_left:
	lda	select_goods
	sec
	sbc	#4
	bcc	trade_left1
	sta	select_goods
	jsr	disp_trade
trade_left1:
	rts

trade_right:
	lda	select_goods
	clc
	adc	#4
	cmp	total_trade
	bcs	trade_right1
	sta	select_goods
	jsr	disp_trade
trade_right1:
	rts

trade_up:
	lda	select_goods
	beq	trade_up1
	dec	select_goods
	jsr	disp_trade
trade_up1:
	rts

trade_down:
	ldx	select_goods
	inx
	cpx	total_trade
	bcs	trade_down1
	inc	select_goods
	jsr	disp_trade
trade_down1:
	rts

trade_cr:
	ldx	select_goods
	lda	trade_goods,x
	jsr	get_goods1
	cmp2	money,data_read_buf+7
	bcc	trade_cr1
	ldx	select_goods
	lda	trade_goods,x
	jsr	goods_inc
	bcc	trade_cr1
	sub	money,data_read_buf+7
	jsr	disp_trade
trade_cr1:
	rts

disp_trade:
	jsr	my_cls
	ldy	#51
disp_trade1:
	lda	trade_menu,y
	sta	ScreenBuffer+26*4,y
	dey
	bpl	disp_trade1
	lm	cur_goods,#0
disp_trade2:
	ldx	cur_goods
	lda	trade_goods,x
	beq	disp_trade4
	jsr	get_goods1
	ldx	cur_goods
	lda	trade_addr,x
	tax
	ldy	#1
disp_trade3:
	lda	data_read_buf,y
	sta	ScreenBuffer,x
	iny
	inx
	cpy	#7
	bcc	disp_trade3
	lm2	binbuf,data_read_buf+7
	inx
	clc
	jsr	bin_10
	inc	cur_goods
	jmp	disp_trade2
disp_trade4:
	lm2	binbuf,money
	ldx	#150
	clc
	jsr	bin_10
disp_trade5:
	jsr	clear_attr
	ldx	select_goods
	lda	trade_addr,x
	sta	8eh
	clc
	adc	#6
	sta	90h
	CONVP
	jsr	gblcd12x
	jsr	draw_bigblock
	lda	tradelogo
	asl	a
	tax
	lm20x	bank_data_ptr,trade_logo
	lm	x0,#8
	lm	y0,#58
	jsr	write_16x16x
	lm	x0,#1
	lm	x1,#159
	lm	y0,#52
	sta	y1
	lm	lcmd,#1
	jsr	line_draw
	jmp	scroll_to_lcd

trade_sell:
	lm	sell_flag,#1
	lda	goods_num
	beq	trade_sell_rts
	lm	start_goods,#0
	sta	select_goods	
	jsr	disp_one_page
trade_sell1:
	jsr	wait_key
	cmp	#ESC_KEY
	beq	trade_sell_rts0
	SWITCH	sell_cmd_len,sell_cmd
	lda	goods_num
	beq	trade_sell_rts0
	jmp	trade_sell1
trade_sell_rts0:
	lm	select_goods,#0
	jsr	disp_trade
trade_sell_rts:
	rts

goods_sell:
	jsr	sell_price
	lda	data_read_buf+7
	ora	data_read_buf+8
	beq	trade_sell_rts
	add	money,data_read_buf+7
	jsr	goods_dec
	jmp	disp_one_page

sell_cmd:
	db	LEFT_KEY
	db	RIGHT_KEY
	db	UP_KEY
	db	DOWN_KEY
	db	UPREC_KEY
	db	DOWNREC_KEY
	db	CR_KEY
sell_cmd_len	equ	$-sell_cmd
	dw	goods_left
	dw	goods_right
	dw	goods_up
	dw	goods_down
	dw	goods_uprec
	dw	goods_downrec
	dw	goods_sell

pop_inn:
	ldy	#51
pop_inn1:
	lda	inn_menu,y
	sta	ScreenBuffer+26*4,y
	dey
	bpl	pop_inn1
	lm2	binbuf,money
	ldx	#150
	clc
	jsr	bin_10
	lm2	binbuf,trade_goods
	ldx	#124
	clc
	jsr	bin_10
	jsr	clear_attr
	lm	line_mode+1,#11110000b
	lm	x0,#1
	lm	x1,#159
	lm	y0,#51
	lm	y1,#79
	lm	lcmd,#0
	jsr	block_draw
	jsr	gblcd12x_0
	lm	lcmd,#1
	jsr	squre_draw
	lm2	bank_data_ptr,#INNLOGO
	lm	x0,#8
	lm	y0,#58
	jsr	write_16x16x
	jsr	scroll_to_lcd
pop_inn2:
	jsr	wait_key
	cmp	#ESC_KEY
	beq	pop_inn6
	cmp	#CR_KEY
	bne	pop_inn2
pop_inn3:
	lm	a1,man_num
	lm	a1h,#0
	lm2	a2,trade_goods
	jsr	mul2
	cmp2	money,a1
	bcc	pop_inn2
	sub	money,a1
	lm2	a1,#my_data
	ldx	#0
pop_inn4:
	lda	friends,x
	bmi	pop_inn6
	ldy	#STAT_OFF
	lda	(a1),y
	cmp	#3
	beq	pop_inn5 ;濒死睡觉不恢复
	jsr	all_blood
	jsr	all_magic
pop_inn5:	
	inx
	lda	#FRIEND_LEN
	adda2	a1
	jmp	pop_inn4
pop_inn6:
	jmp	refreshmap

main_menu:
	db	' 道具 魔法 装备 特殊 辅助 '
	db	'      LV ?       力量 ?   '
	db	'      HP   ?/?   强度 ?   '
	db	'      MP   ?/?   精神 ?   '
	db	' LEE  EXP 0      敏捷 ?   '
	db	' 隐身 GOLD:?              '
stat_msg:
	db	'    中毒石化濒死'
equip_menu:
	db	'                          '
	db	' 头:项  链     攻击+?   '
	db	' 手:激光剑     防御+?   '
	db	' 身:牛仔服     精神+?   '
	db	' 脚:皮  靴     敏捷+?   '
	db	'                          '
save_menu:
	db	'                          '
	db	' 存储  1. LV 1    0:02    '
	db	' 读取  2. 超强完美存档    '
	db	' 退出                     '
	db 	'                          '
	db	'                          '
trade_menu:
	db	'     欢迎光临,买点什么? '
	db	'     F2:卖出   金钱:?     '
sell_menu:
	db	' 售价:?        金钱:?     '
inn_menu:
	db	'     欢迎光临,每位:?     '
	db	'     住店吗?  金钱:?     '
trade_logo:
	dw	WEAPONLOGO,EQUIPLOGO,ITEMLOGO
trade_addr:
	db	1,27,53,79,14,40,66,92
main_data:
	db	1,141,0,35,1,114,81h,63,1,65,81h,89,1,91
	db	1,48,1,74,1,100,1,126,0ffh
equip_data:
	db	1,48,1,74,1,100,1,126,0ffh
saves_data:
	db	0,39,80h,44,80h,47,0ffh
goods_addr:
	db	1,27,53,79,105
	db	15,41,67,93,119
magic_addr:
	db	1,27,53,79,105,131
	db	14,40,66,92,118,144
man_yline:
	db	5,23,41,59
part_addr:
	db	27,53,79,105
equip_addr:
	db	31,57,83,109
equip_addr2:
	db	38,64,90,116
func_table:
	dw	use_goods
	dw	use_magic
	dw	equip_goods
	dw	special
	dw	load_save

	end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -