📄 menu.s
字号:
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 + -