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

📄 fight.s

📁 这是由文曲星的开发者LEE写的汇编游戏末日传说.rar代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	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 + -