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

📄 fight.s

📁 这是由文曲星的开发者LEE写的汇编游戏末日传说.rar代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	include	h/mori.h
	include	../bios/h/graph.h

	public	fight
	public	disp_fight

	extrn	get_object
	extrn	get_friend_addr
	extrn	get_goods1
	extrn	clear_attr
	extrn	data_string
	extrn	gblcd12x
	extrn	update_lcd_0
	extrn	block_draw
	extrn	update_lcd
	extrn	write_ascii
	extrn	scroll_to_lcd
	extrn	write_16x16
	extrn	mul2
	extrn	random_it
	extrn	mul41
	extrn	divid42
	extrn	get_16x16
	extrn	write_16x16x
	extrn	write_32x32x
	extrn	write_64x64x
	extrn	disp_num
	extrn	delay
	extrn	wait_key
	extrn	close_screen
	extrn	open_screen
	extrn	mul_ax
	extrn	bin_10
	extrn	show_talk0
	extrn	start0
	extrn	fight_goods
	extrn	fight_magic
	extrn	proc_sys_event

fight:
	tsx
	stx	fight_stack
	jsr	close_screen
	lm	enemy_gold,#0
	sta	enemy_gold+1
	sta	enemy_level
	lm	a1,#3
fight1:
	ldy	a1
	ldx	enemyid,y
	jmi	fight2
	lda	#ENEMY_CLASS
	jsr	get_object
	jsr	ram_get256
	lda	a1
	tax
	asl	a
	tay
	lda	data_read_buf
	sta	enemy_sex,x
	bpl	fight21
	lda	fight_set
	ora	#NOESCAPE ;对boss战不允许逃跑
	sta	fight_set
fight21:
	lda	data_read_buf+1
	sta	enemy_lv,x
	cmp	enemy_level
	bcc	fight20
	sta	enemy_level
fight20:	
	lda	#0
	sta	enemy_stat,x
	lda	data_read_buf+2
	sta	enemy_graph,y
	lda	data_read_buf+3
	sta	enemy_graph+1,y
	lda	data_read_buf+4
	sta	enemy_size,x
	add	enemy_gold,data_read_buf+5
	lda	data_read_buf+7
	sta	enemy_goods,x
	lda	data_read_buf+8
	sta	enemy_at,y
	lda	data_read_buf+9
	sta	enemy_at+1,y
	lda	data_read_buf+10
	sta	enemy_df,y
	lda	data_read_buf+11
	sta	enemy_df+1,y
	lda	data_read_buf+12
	sta	enemy_int,y
	lda	data_read_buf+13
	sta	enemy_int+1,y
	lda	data_read_buf+14
	clc
	adc	#100
	sta	enemy_agi,y
	lda	data_read_buf+15
	adc	#0
	sta	enemy_agi+1,y
	lda	data_read_buf+16
	sta	enemy_hp,y
	sta	enemy_maxhp,y
	lda	data_read_buf+17
	sta	enemy_hp+1,y
	sta	enemy_maxhp+1,y
	lda	data_read_buf+18
	sta	enemy_mp,y
	sta	enemy_maxmp,y
	lda	data_read_buf+19
	sta	enemy_mp+1,y
	sta	enemy_maxmp+1,y
fight2:
	dec	a1
	jpl	fight1 ;以上获得敌方数据
	lm	my_level,#0
	lm	a3,#3
fight30:
	ldy	a3
	lda	friends,y
	jmi	fight4 ;没有此人
	lda	a3
	jsr	get_friend_addr
	ldx	a3
	ldy	#LEVEL_OFF
	lda	(a1),y
	cmp	my_level
	bcc	fight31
	sta	my_level
fight31:
	ldy	#STAT_OFF
	lda	(a1),y
	sta	my_stat,x
	ldy	#SEX_OFF
	lda	(a1),y
	sta	my_sex,x
	ldy	#MOVE_OFF
	lda	(a1),y
	sta	my_photo,x
	lda	a3
	asl	a
	tax
	ldy	#HP_OFF
	lda	(a1),y
	sta	my_hp,x
	iny
	lda	(a1),y
	sta	my_hp+1,x
	iny
	lda	(a1),y
	sta	my_maxhp,x
	iny
	lda	(a1),y
	sta	my_maxhp+1,x
	iny
	lda	(a1),y
	sta	my_mp,x
	iny
	lda	(a1),y
	sta	my_mp+1,x
	iny
	lda	(a1),y
	sta	my_maxmp,x
	iny
	lda	(a1),y
	sta	my_maxmp+1,x
	iny
	lda	(a1),y
	sta	my_at,x
	iny
	lda	(a1),y
	sta	my_at+1,x
	iny
	lda	(a1),y
	sta	my_df,x
	iny
	lda	(a1),y
	sta	my_df+1,x
	iny
	lda	(a1),y
	sta	my_int,x
	iny
	lda	(a1),y
	sta	my_int+1,x
	iny
	lda	(a1),y
	clc
	adc	#100
	sta	my_agi,x
	iny
	lda	(a1),y
	adc	#0
	sta	my_agi+1,x
fight3:
	iny
	sty	a3h
	lda	(a1),y
	jsr	get_goods1
	lda	data_read_buf+10
	adda2	my_at
	lda	data_read_buf+11
	adda2	my_df
	lda	data_read_buf+12
	adda2	my_int
	lda	data_read_buf+13
	adda2	my_agi
	ldy	a3h
	cpy	#FOOT_OFF
	bne	fight3
fight4:
	dec	a3
	jpl	fight30 ;以上获得我方数据
	ldy	#7
fight5:
	lda	hp_data,y
	sta	my_hpdisp,y
	lda	mp_data,y
	sta	my_mpdisp,y
	dey
	bpl	fight5
	ldy	#0
fight6:
	lda	friends,y
	bmi	fight7
	iny
	cpy	#4
	bcc	fight6
fight7:
	sty	total_my
	tya
	asl	a
	tay
	lda	#0ffh
	sta	my_hpdisp,y
	sta	my_mpdisp,y
	ldy	#0
fight8:
	lda	enemyid,y
	bmi	fight9
	iny
	cpy	#4
	bcc	fight8
fight9:
	sty	total_enemy
	lm	my_cur_act,#0ffh
	lm	enemy_dh,#0
	sta	enemy_dh+1
	sta	enemy_dh+2
	sta	enemy_dh+3
	sta	my_dh
	sta	my_dh+1
	sta	my_dh+2
	sta	my_dh+3
	lm	my_cur_man,#80h
	jsr	disp_fight0
	jsr	open_screen
	lm	cur_fighter,#7
fight10:
	lda	#0
	jsr	random_it
	sta	a1
	lm	a1h,#0
	asl2	a1
	asl2	a1
	asl2	a1
	lda	cur_fighter
	asl	a
	tax
	lm2x0	fighters,a1
	dec	cur_fighter
	bpl	fight10
	inc	cur_fighter
fight12:
	lda	cur_fighter
	cmp	#4
	bcs	fight14
	cmp	total_enemy
	jcs	fight17
	asl	a
	tax
	clc
	lda	fighters,x
	adc	enemy_agi,x
	sta	fighters,x
	lda	fighters+1,x
	adc	enemy_agi+1,x
	sta	fighters+1,x
	lda	fighters+1,x
	sec
	sbc	#8 ;与2048比较
	bcc	fight17
	sta	fighters+1,x
	lda	cur_fighter
	ora	#80h
	jsr	enemy_attack
	jmp	fight16
fight14:
	and	#3
	cmp	total_my
	bcs	fight17
	asl	a
	tax
	clc
	lda	fighters+8,x
	adc	my_agi,x
	sta	fighters+8,x
	lda	fighters+9,x
	adc	my_agi+1,x
	sta	fighters+9,x
	lda	fighters+9,x
	sec
	sbc	#8 ;与2048比较
	bcc	fight17
	sta	fighters+9,x
	lda	cur_fighter
	and	#3
	jsr	man_attack
fight16:
	jsr	if_win
fight17:
	inc	cur_fighter
	lda	cur_fighter
	and	#7
	sta	cur_fighter
	jmp	fight12

enemy_attack:
	sta	my_cur_man
	and	#7fh
	tax
	lda	enemy_stat,x
	cmp	#3
	bne	enemy_attack0 ;活的敌人
	rts
enemy_attack0:
	lm	my_cur_act,#0ffh
	lda	enemy_sex,x
	and	#ALL_AT
	bne	enemy_attack1 ;全体攻击
	lda	total_my
	jsr	random_it
	sta	defence_man
	jsr	get_alive_man ;取活人
	jsr	cal_attack
	lda	#0
	jmp	disp_attack
enemy_attack1:
	lm	a9,#0
enemy_attack2:
	lm	defence_man,a9
	jsr	cal_attack
	inc	a9
	lda	a9
	cmp	total_my
	bcc	enemy_attack2
	lda	#1
	jmp	disp_attack

cal_attack:
	lda	#100
	jsr	random_it
	cmp	#10
	bcs	cal_attack0
	lm	a1,#0
	sta	a1h
	jmp	cal_attack6
cal_attack0:	
	jsr	get_at
	lm2	a2,a1
	jsr	mul2
	lda	#20
	jsr	random_it
	clc
	adc	#90
	sta	a3
	jsr	mul41
	jsr	get_df
	jsr	divid42
	lm2	a3,#300
	jsr	divid42
	jsr	adj_10000	
	lda	#90
	jsr	random_it
	cmp	#85
	bcc	cal_attack3
	asl	a1
	rol	a1h
cal_attack3:
	lda	defence_man
	bmi	cal_attack5
	cmp2	a1,#1000
	bcc	cal_attack4
	lm2	a1,#999
cal_attack4:	
	jmp	cal_attack6
cal_attack5:
	cmp2	a1,#10000
	bcc	cal_attack6
	lm2	a1,#9999
cal_attack6:
	jsr	get_hp_addr
	ldy	#0
	lda	(a2),y
	sec
	sbc	a1
	sta	(a2),y
	iny
	lda	(a2),y
	sbc	a1h
	sta	(a2),y
	bcs	cal_attack7
	lda	#0
	sta	(a2),y
	dey
	sta	(a2),y
cal_attack7:
	ldy	#0
	lda	(a2),y
	iny
	ora	(a2),y
	bne	cal_attack8
	lda	defence_man
	bmi	cal_attack71
	tay
	lda	#3
	sta	my_stat,y ;设置濒死状态
	bne	cal_attack72
cal_attack71:	
	and	#3
	tay
	lda	#3
	sta	enemy_stat,y
cal_attack72:	
	lda	#0ffh ;打死
	bne	cal_attack9
cal_attack8:
	lda	a1
	ora	a1h
	beq	cal_attack9 ;落空
	lda	#1
cal_attack9:
	tay
	lda	defence_man
	asl	a
	tax
	lm2x0	at_value,a1
	txa
	lsr	a
	tax
	tya
	sta	at_result,x
	rts	

adj_10000:
	lda	a2
	bne	cal_attack1
	lda	a1
	ora	a1h
	bne	cal_attack01
	lda	my_cur_man
	bpl	adj_10001
	and	#3
	tax
	lda	enemy_lv,x
	sta	a1
	jsr	random_it
	sec
	adc	a1
	lsr	a
	sta	a1
	jmp	cal_attack2
adj_10001:
	inc	a1
	bne	cal_attack2
cal_attack01:	
	cmp2	a1,#10000
	bcc	cal_attack2
cal_attack1:	
	lm2	a1,#10000
cal_attack2:
	rts

cal_magic:
	jsr	get_inta
	jsr	mul2
	lda	#20
	jsr	random_it
	clc
	adc	#90
	sta	a3
	jsr	mul41
	jsr	get_intb
	jsr	divid42
	lm2	a3,#100
	jsr	divid42
	jsr	adj_10000
	jmp	cal_attack3

man_attack:
	sta	my_cur_man
	sta	my_cur_obj
	tax
	lda	my_stat,x
	cmp	#3
	beq	man_attack2 ;濒死
	lm	defence_man,#80h
	jsr	get_alive_enemy
	lm	my_cur_act,#0
	jsr	disp_fight
man_attack1:	
	jsr	wait_key
	SWITCH	fight_cmd_len,fight_cmd
	bcc	man_attack1
man_attack2:	
	rts

fight_cmd:
	db	LEFT_KEY
	db	RIGHT_KEY
	db	DOWN_KEY
	db	UPREC_KEY
	db	DOWNREC_KEY
	db	CR_KEY
fight_cmd_len	equ	$-fight_cmd
	dw	fight_left
	dw	fight_right
	dw	fight_next
	dw	fight_uu
	dw	fight_dd
	dw	fight_cr

fight_uu:
	dec	my_cur_obj
	bpl	fight_left1
	ldx	total_my
	dex
	stx	my_cur_obj
	jmp	fight_left1
fight_dd:
	inc	my_cur_obj
	lda	my_cur_obj
	cmp	total_my
	bcc	fight_left1
	lm	my_cur_obj,#0
	jmp	fight_left1
fight_left:
	dec	my_cur_act
	bpl	fight_left1
	lda	#4
fight_left0:	
	sta	my_cur_act
fight_left1:
	jsr	disp_fight
	pla
	pla
	clc
	rts
fight_right:
	inc	my_cur_act
	lda	my_cur_act
	cmp	#5
	bcc	fight_left1
	lda	#0
	beq	fight_left0
fight_next:
	inc	defence_man
	jsr	get_alive_enemy
	jmp	fight_left1
fight_cr:
	lda	my_cur_act
	bne	fight_cr1 ;非攻击
	jsr	cal_attack
	lda	#0
	jmp	disp_attack
fight_cr1:
	cmp	#4
	bne	fight_cr2 ;非逃跑
	lda	fight_set
	and	#NOESCAPE
	bne	escape_fail
	lda	#100
	jsr	random_it
	cmp	#65
	bcs	escape_suc
	cmp	#35
	bcc	escape_fail
	lda	my_level
	sec
	sbc	enemy_level
	bcc	escape_fail
	cmp	#5
	bcs	escape_suc
escape_fail:
	rts
escape_suc:
	ldx	fight_stack
	txs
	lm	_a4,#0
	sta	_a4+1
	jmp	upgradex
fight_cr2:
	cmp	#2
	bne	fight_cr4 ;非道具
	jsr	fight_goods
	bne	fight_cr_rts
fight_cr3:
	pla
	pla
	clc
fight_cr_rts:	
	rts
fight_cr4:
	cmp	#3
	bne	fight_cr5 ;非魔法
	jsr	fight_magic
	beq	fight_cr3
	lda	magic_attr
	cmp	#HPADD
	beq	fight_cr_rts
	lm2	a2,magic_power
	jsr	cal_magic
	lda	#0
	jmp	disp_magic
fight_cr5:	
	rts

disp_magic:
	bne	disp_magic3 ;全体攻击
	lda	my_cur_man
	bpl	disp_magic3 ;我方攻击
	jsr	disp_fight
	lm	dh_fps,#4
disp_magic1:	
	lm2	bank_data_ptr,magic_graph
	lm	x0,#72
	lda	defence_man
	and	#2
	beq	disp_magic2
	lda	#32
disp_magic2:	
	sta	y0
	jsr	write_32x32x
	jsr	scroll_to_lcd
	ldx	#60
	jsr	delay
	lda	#4
	adda2	magic_graph
	dec	dh_fps
	bne	disp_magic1
	ldx	#100
	jsr	delay
	rts
disp_magic3:	
	jsr	disp_fight
	lm	dh_fps,#4
disp_magic4:
	lm2	bank_data_ptr,magic_graph
	lm	x0,#16
	lda	defence_man
	and	#3
	sta	defence_man
	bne	disp_magic5
	lda	enemy_size
	lsr	a
	jmp	disp_magic8
disp_magic5:	
	cmp	#2
	bcc	disp_magic6
	lda	#2
	jmp	disp_magic8
disp_magic6:
	cmp1	enemy_size,#1
	bne	disp_magic7
	lda	#2
	jmp	disp_magic8
disp_magic7:
	lda	enemy_size+1
disp_magic8:	
	masl	a,4
	sta	y0
	jsr	write_32x32x
	jsr	scroll_to_lcd
	ldx	#60
	jsr	delay
	lda	#4
	adda2	magic_graph
	dec	dh_fps
	bne	disp_magic4
	ldx	#100
	jsr	delay
	jmp	disp_attack41

if_win:
	jsr	get_my_alive
	beq	my_lose
	jsr	get_enemy_alive
	beq	my_win
	rts
my_lose:
	pla
	pla
	lda	fight_set
	and	#CANLOSE
	beq	game_over
	clc
	rts
my_win:
	pla
	pla
	jsr	upgrade
	sec
	rts
game_over:
	CLS
	ldy	#9
game_over1:	
	lda	over_msg,y
	sta	ScreenBuffer+45,y
	dey
	bpl	game_over1
	lm2	lcd_mode,#0ffffh
	jsr	update_lcd
	lm	x0,#1
	lm	x1,#159
	lm	y0,#0
	lm	y1,#79
	lm	lcmd,#2
	jsr	block_draw
	jsr	scroll_to_lcd
	jsr	wait_key
	ldx	#StackTop
	txs
	jmp	start0

over_msg:
	db	'GAME  OVER'

upgrade:
	add	money,enemy_gold
	bcc	upgrade1
	lm2	money,#0ffffh
upgrade1:	
	lda	enemy_level
	tax
	jsr	mul_ax
	lm2	_a4,a1
	ldy	#51
upgrade2:
	lda	win_msg,y
	sta	ScreenBuffer,y
	dey
	bpl	upgrade2
	ldx	#36
	clc
	jsr	bin_10

⌨️ 快捷键说明

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