📄 fight.s
字号:
lm2 binbuf,enemy_gold
ldx #10
clc
jsr bin_10
lm2 string_ptr,#ScreenBuffer
jsr show_talk0
upgradex:
lm _a3,#0
upgrade30:
ldy _a3
lda friends,y
jmi upgrade9 ;不存在此人
tya
jsr get_friend_addr
ldx _a3
ldy #STAT_OFF
lda my_stat,x
and #3
sta (a1),y
lda _a3
asl a
tax
ldy #MP_OFF
lda my_mp,x
sta (a1),y
iny
lda my_mp+1,x
sta (a1),y
ldy #HP_OFF
lda my_hp,x
sta (a1),y
iny
lda my_hp+1,x
sta (a1),y
ora my_hp,x
jeq upgrade9 ;死人不升经验
lm2 a2,_a4
ldy #LEVEL_OFF
lda (a1),y
sec
sbc enemy_level
bcc upgrade32
sbc #4
bcc upgrade32
beq upgrade32
tax
upgrade33:
lsr2 a2
dex
bne upgrade33
upgrade32:
ldy #EXP_OFF
lda (a1),y
sec
sbc a2
sta (a1),y
iny
lda (a1),y
sbc a2h
sta (a1),y
bcc upgrade31
dey
ora (a1),y
beq upgrade31
jmp upgrade9 ;不够升级
upgrade31:
ldy #LEVEL_OFF
lda (a1),y
tax
inx
cpx #100
bcc upgrade3
ldx #99
upgrade3:
txa
sta (a1),y ;LEVEL上升
push2 a1
txa
jsr mul_ax
lm2 a2,#5
jsr mul2
lm2 a2,a1
pull2 a1
ldy #EXP_OFF
lda a2
sta (a1),y
iny
lda a2h
sta (a1),y ;设置下一级升级值
ldy #0
upgrade4:
lda win_msg2,y
sta ScreenBuffer,y
beq upgrade50
iny
bne upgrade4
upgrade50:
ldx #0
ldy #NAME_OFF
upgrade5:
lda (a1),y
sta ScreenBuffer,x
iny
inx
cpx #4
bcc upgrade5
ldx #0
ldy #HP_OFF
upgrade6:
lda (a1),y
sta random_buf,x
iny
inx
cpx #16
bcc upgrade6
ldy _a3
lda my_sex,y
and #0fh
tax
lda zu_tbl,x
asl a
asl a
asl a
tax
ldy #0
upgrade7:
lda zu_tbl2,x
clc
adc random_buf,y
sta random_buf,y
iny
lda #0
adc random_buf,y
sta random_buf,y
iny
inx
cpy #16
bcc upgrade7
ldx #0
ldy #HP_OFF
upgrade8:
lda random_buf,x
sta (a1),y
iny
inx
cpx #16
bcc upgrade8
lm2 string_ptr,#ScreenBuffer
jsr show_talk0
upgrade9:
inc _a3
lda _a3
cmp #4
jcc upgrade30
rts
load_hp:
win_msg:
db '获得金钱: '
db '获得经验: ',0
win_msg2:
db 'BOSS升级了',0
zu_tbl:
db 0,0,1,1,2,4,2,2,3,3,3,3,3,3,3,3
zu_tbl2:
db 9,9,1,1,4,4,4,4
db 10,10,1,1,5,5,3,3
db 8,8,4,4,3,3,6,4
db 7,7,5,5,3,3,5,5
db 9,9,4,4,4,4,4,4
get_enemy_alive:
ldy #0
lda total_enemy
asl a
tax
dex
get_enemy_alive1:
lda enemy_hp,x
dex
ora enemy_hp,x
beq get_enemy_alive2
iny
get_enemy_alive2:
dex
bpl get_enemy_alive1
tya
rts
get_my_alive:
ldy #0
lda total_my
asl a
tax
dex
get_my_alive1:
lda my_hp,x
dex
ora my_hp,x
beq get_my_alive2
iny
get_my_alive2:
dex
bpl get_my_alive1
tya
rts
disp_attack:
bne disp_attack2 ;全体攻击
lda my_cur_man
bpl disp_attack2 ;我方攻击
lm dh_fps,#4
disp_attack0:
lda my_cur_man
and #3
tax
lda #1
sta enemy_dh,x
ldy defence_man
lda at_result,y
beq disp_attack1
lda #3
disp_attack1:
sta my_dh,y
jsr disp_fight
ldx #24
jsr delay
lda my_cur_man
and #3
tax
lda #2
sta enemy_dh,x
ldy defence_man
lda #0
sta my_dh,y
jsr disp_fight
ldx #24
jsr delay
dec dh_fps
bne disp_attack0
clear_dh:
lda #0
sta my_dh
sta my_dh+1
sta my_dh+2
sta my_dh+3
lda enemy_dh
and #80h
sta enemy_dh
lda enemy_dh+1
and #80h
sta enemy_dh+1
lda enemy_dh+2
and #80h
sta enemy_dh+2
lda enemy_dh+3
and #80h
sta enemy_dh+3
rts
disp_attack2:
ora #80h
sta my_cur_man
lda defence_man
and #3
sta defence_man
lm dh_fps,#4
disp_attack3:
lda my_cur_man
and #3
tax
lda #1
sta my_dh,x
ldy defence_man
lda at_result,y
beq disp_attack4
lda #3
disp_attack4:
sta enemy_dh,y
jsr disp_fight
ldx #24
jsr delay
lda my_cur_man
and #3
tax
lda #2
sta my_dh,x
ldy defence_man
lda #0
sta enemy_dh,y
jsr disp_fight
ldx #24
jsr delay
dec dh_fps
bne disp_attack3
disp_attack41:
ldy defence_man
lda #4
sta enemy_dh,y
jsr disp_fight
ldx #235
jsr delay
ldx defence_man
lda at_result,x
bpl disp_attack6
lda #40h
sta enemy_dh,x
disp_attack5:
jsr disp_fight
ldx defence_man
inc enemy_dh,x
ldy enemy_size,x
lda size_tbl,y
cmp enemy_dh,x
bcs disp_attack5
lda #80h
sta enemy_dh,x
disp_attack6:
jmp clear_dh
size_tbl:
db 47h,4fh,5fh
get_inta:
lda my_cur_man
asl a
tax
bcs get_inta1
lm20x a1,my_int
rts
get_inta1:
lm20x a1,enemy_int
rts
get_intb:
lda defence_man
asl a
tax
bcs get_intb1
lm20x a3,my_int
rts
get_intb1:
lm20x a3,enemy_int
rts
get_at:
lda my_cur_man
asl a
tax
bcs get_at1
lm20x a1,my_at
rts
get_at1:
lm20x a1,enemy_at
rts
get_df:
lda defence_man
asl a
tax
bcs get_df1
lm20x a3,my_df
rts
get_df1:
lm20x a3,enemy_df
rts
get_hp_addr:
lda defence_man
asl a
bcs get_hp_addr1
adc #<my_hp
sta a2
lda #>my_hp
adc #0
sta a2h
rts
get_hp_addr1:
clc
adc #<enemy_hp
sta a2
lda #>enemy_hp
adc #0
sta a2h
rts
get_alive_man: ;是活我方人,不是活敌人
lm a3,defence_man
get_alive_man1:
jsr get_hp_addr
ldy #0
lda (a2),y
iny
ora (a2),y
bne get_alive_man3
inc defence_man
lda defence_man
cmp total_my
bcc get_alive_man2
lm defence_man,#0
get_alive_man2:
cmp a3
bne get_alive_man1
clc ;没有活人
rts
get_alive_man3:
sec ;找到活人
rts
get_alive_enemy: ;是活敌人
lda defence_man
and #7fh
cmp total_enemy
bcc get_alive_enemy0
lm defence_man,#80h
get_alive_enemy0:
lm a3,defence_man
get_alive_enemy1:
jsr get_hp_addr
ldy #0
lda (a2),y
iny
ora (a2),y
bne get_alive_enemy3
inc defence_man
lda defence_man
and #7fh
cmp total_enemy
bcc get_alive_enemy2
lm defence_man,#80h
get_alive_enemy2:
lda defence_man
cmp a3
bne get_alive_enemy1
clc ;没有活人
rts
get_alive_enemy3:
sec ;找到活人
rts
disp_fight:
jsr disp_fight0
jmp scroll_to_lcd
disp_fight0:
jsr proc_sys_event
jsr clear_attr
CLS
ldy #25
disp_fight1:
lda fight_menu,y
sta ScreenBuffer+130,y
dey
bpl disp_fight1
lda #0ffh
sta lcd_mode
sta lcd_mode+1
lda my_cur_act
bmi disp_fight2
asl a
asl a
sec
adc my_cur_act
adc #130
sta 8eh
clc
adc #4
sta 90h
CONVP
disp_fight2:
jsr gblcd12x
CLS
jsr clear_attr
lm a3,#3
disp_fight3:
ldy a3
lda friends,y
bmi disp_fight4 ;没有此人
ldx hp_addr,y
lda #'H'
sta ScreenBuffer,x
lda #'P'
sta ScreenBuffer+1,x
sta ScreenBuffer+21,x
lda #'M'
sta ScreenBuffer+20,x
lda my_sex,y
and #EVIL|SPRITES
bne disp_fight4
lda #'T'
sta ScreenBuffer+20,x
disp_fight4:
dec a3
bpl disp_fight3
lm2 a6,#my_hpdisp
lm2 a7,#my_hp
jsr data_string
lm2 a6,#my_mpdisp
lm2 a7,#my_mp
jsr data_string
lda #0
sta lcd_mode
sta lcd_mode+1
sta line_mode+1
lda #0ffh
sta line_mode
jsr update_lcd_0
lm _a3,#3
disp_fight5:
ldy _a3
lda friends,y
bmi disp_fight6 ;没有此人
jsr disp_my
disp_fight6:
dec _a3
bpl disp_fight5
lm _a3,#0
sta _a3h
disp_fight7:
ldy _a3
lda enemyid,y
bmi disp_fight9 ;不存在此敌人
jsr disp_enemy
inc _a3
lda _a3
cmp #4
bcc disp_fight7
disp_fight9:
lda my_cur_man
bmi disp_fight10
lda my_cur_obj
asl a
sta scrncv
lm lcdch,#12
lda #20
jsr write_ascii
lda my_cur_man
asl a
sta scrncv
lm lcdch,#12
lda #17
jsr write_ascii ;指向我方攻击人
disp_fight10:
rts
disp_my:
lda my_photo,y
asl a
asl a
clc
adc #3
sta bank_data_ptr
lm bank_data_ptr+1,#0
lm cursor_posx,#5
ldy _a3
sty cursor_posy
lda my_dh,y
cmp #3
beq disp_my2
jsr write_16x16
ldy _a3
lda my_dh,y
beq disp_my_rts
lda my_sex,y
jsr get_weapon
lda my_dh,y
cmp #2
bne disp_my1
inc2 bank_data_ptr
disp_my1:
lm cursor_posy,_a3
lm cursor_posx,#4
jsr write_16x16
disp_my_rts:
rts
disp_my2:
lda cursor_posx
asl a
asl a
asl a
asl a
ora #2
sta x0
lda cursor_posy
asl a
asl a
asl a
asl a
sta y0
jmp write_16x16x
disp_enemy:
lda _a3
asl a
tax
lda enemy_graph,x
sta bank_data_ptr
lda enemy_graph+1,x
sta bank_data_ptr+1
lm cursor_posy,_a3h
lm cursor_posx,#1
lda enemy_size,y
cmp #2
bne disp_enemy1
dec cursor_posx ;size为2表示64*64
disp_enemy1:
lda enemy_dh,y
bmi disp_enemy_rts ;此敌人已死
cmp #3
beq disp_enemy3
jsr write_enemy
ldy _a3
lda enemy_dh,y
beq disp_enemy_rts
cmp #3
bcs disp_enemy4
lda enemy_sex,y
jsr get_weapon
ldx #2
lda enemy_dh,y
cmp #2
bne disp_enemy2
inx
disp_enemy2:
txa
adda2 bank_data_ptr
lm cursor_posy,_a3h
lda enemy_size,y
clc
adc #2
sta cursor_posx
jsr write_16x16
disp_enemy_rts:
ldy _a3
ldx enemy_size,y
lda enemy_high,x
clc
adc _a3h
sta _a3h
rts
disp_enemy3:
lda cursor_posx
asl a
asl a
asl a
asl a
ora #2
sta x0
jsr write_enemy0
jmp disp_enemy_rts
disp_enemy4:
cmp #4
bne disp_enemy5
lm lcdch,#2
ldy _a3
lda enemy_size,y
clc
adc _a3h
sec
rol a
sta scrncv
asl a
asl a
asl a
sta y0
clc
adc #7
sta y1
lm x0,#16
lm x1,#47
lm lcmd,#0
jsr block_draw
lda _a3
asl a
tax
lm20x binbuf,at_value
jsr disp_num
jmp disp_enemy_rts
disp_enemy5:
and #1fh
sec
rol a
tax
lda _a3h
asl a
asl a
asl a
asl a
sta y0
txa
clc
adc y0
sta y1
lm x0,#1
lm x1,#63
lm lcmd,#0
jsr block_draw
jmp disp_enemy_rts
write_enemy:
lda cursor_posx
asl a
asl a
asl a
asl a
sta x0
write_enemy0:
lda cursor_posy
asl a
asl a
asl a
asl a
sta y0
ldy _a3
lda enemy_size,y
asl a
tax
lm20x a1,w_enemy_tbl
jsr to_a1
lda defence_man
bpl write_enemy1
and #3
cmp _a3
bne write_enemy1
lm lcmd,#2
jsr block_draw
write_enemy1:
rts
to_a1:
jmp (a1)
w_enemy_tbl:
dw write_16x16x,write_32x32x,write_64x64x
get_weapon:
sta a1
lda #HUMAN
bit a1
beq get_weapon1
lm2 bank_data_ptr,#GUN_GRAPH
rts
get_weapon1:
lda #BEAST
bit a1
beq get_weapon2
lm2 bank_data_ptr,#HAND_GRAPH
rts
get_weapon2:
lm2 bank_data_ptr,#STAFF_GRAPH
rts
hp_addr:
db 13,53,93,133
hp_data:
db 1,16,1,56,1,96,1,136
mp_data:
db 1,36,1,76,1,116,1,156
enemy_high:
db 1,2,4
fight_menu:
db ' 攻击 防御 道具 魔法 逃跑 '
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -