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

📄 juqing.s

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

	public	run_juqing
	public	run_juqing0
	public	if_juqing

	extrn	get_object
	extrn	show_talk0
	extrn	disp_sprite
	extrn	move_map
	extrn	delay
	extrn	clear_sprite
	extrn	refreshmap
	extrn	add_friend
	extrn	get_cur_object
	extrn	get_flag
	extrn	set_flag
	extrn	clear_flag
	extrn	fight
	extrn	block_draw
	extrn	scroll_to_lcd
	extrn	goods_inc
	extrn	goods_decn
	extrn	lcd_to_scroll
	extrn	write_32x32x
	extrn	play_staff
	extrn	wait_key
	extrn	start0
	extrn	get_friend_addr

MOVE_TIME	equ	235

if_juqing:
	jsr	get_cur_object
	bcc	if_juqing_rts
	tya
	and	#40h
	beq	if_juqing_rts
	tya
	and	#3fh
	cmp	#JUQING_CLASS
	bne	if_juqing_rts
	jmp	run_juqing0
if_juqing_rts:
	rts

run_juqing:
	tax
run_juqing0:
	lda	#JUQING_CLASS
	jsr	get_object
	jsr	ram_get256
	ldy	#2
run_juqing01:
	lda	data_read_buf,y
	bmi	run_juqing02
	sta	a1h
	lda	data_read_buf+1,y
	jsr	get_flag
	eor	a1h
	bne	if_juqing_rts
	iny
	iny
	bne	run_juqing01
run_juqing02:
	iny
	sty	temp1
run_juqing1:
	ldy	temp1
	lda	data_read_buf,y
	beq	run_juqing_rts0
	asl	a
	tax
	lda	TokenSerAddr,x
	sta	a1
	lda	TokenSerAddr+1,x
	sta	a1h
	jsr	run_token
	jmp	run_juqing1
run_juqing_rts0:
	inc	step_count
run_juqing_rts:
	jsr	clear_sprite
	lm	spriteid,#0
	jmp	refreshmap
run_token:
	jsr	inc_addr
	jmp	(a1)

inc_addr:
	inc	temp1
	bne	inc_addr1
inc_addr0:
	inc	bank_data_ptr+1
	jsr	ram_get256
inc_addr1:
	rts

get_one:
	stx	temp_x
	sty	temp_y
	ldy	temp1
	lda	data_read_buf,y
	pha
	jsr	inc_addr
	ldx	temp_x
	ldy	temp_y
	pla
	rts

SAY_ser:
	ldy	temp1
	ldx	#0
SAY_ser1:
	lda	data_read_buf,y
	sta	juqing_buf,x
	beq	SAY_ser2
	inx
	iny
	bne	SAY_ser1
	jsr	inc_addr0
	ldy	#0
	jmp	SAY_ser1
SAY_ser2:
	sty	temp1
	jsr	inc_addr
	la	string_ptr,juqing_buf
	jmp	show_talk0

PUT_ser:
	jsr	PUTX_ser	
	PUSHD
	jsr	refreshmap
PUT_ser1:
	PULLD
PAUSE_ser:
	ldx	#MOVE_TIME
	jmp	delay

PUTX_ser:
	jsr	get_one
	asl	a
	asl	a	
	tay	
	jsr	get_one
	sta	manid,y
	jsr	get_one
	sta	mandir,y
	jsr	get_one
	sta	manx,y
	jsr	get_one
	sta	many,y
	rts

MOVE_ser:
	jsr	get_one
	sta	spriteid
	jsr	get_one
	sta	movedir
	PUSHD
	jsr	move_map
	jmp	PUT_ser1

TURN_ser:
	jsr	get_one
	asl	a
	asl	a
	tay
	jsr	get_one
	sta	mandir,y
	PUSHD
	jsr	refreshmap
	jmp	PUT_ser1

KILL_ser:
	jsr	get_one
	asl	a
	asl	a
	tay
	lda	#0ffh
	sta	manx,y
	PUSHD
	jsr	refreshmap
	jmp	PUT_ser1

ADDMAN_ser:
	ldy	#0ffh
ADDMAN_ser1:
	iny
	lda	friends,y
	bpl	ADDMAN_ser1
	jsr	get_one
	sta	friends,y
	sty	a3
	tax
	PUSHD
	txa
	jsr	add_friend
	PULLD
	inc	man_num
	rts

LEAVE_ser:
	jsr	get_one
	sta	a1
	ldy	#0ffh
LEAVE_ser1:
	iny
	lda	friends,y
	bmi	LEAVE_ser2
	cmp	a1
	bne	LEAVE_ser1
	lda	#0ffh
	sta	friends,y
	dec	man_num
LEAVE_ser2:
	rts

READD_ser:
	jsr	get_one
	sta	a1
	ldy	#0ffh
READD_ser1:
	iny
	lda	friends,y
	bpl	READD_ser1
	lda	a1
	sta	friends,y
	inc	man_num
	rts

SET_ser:
	jsr	get_one
	jmp	set_flag

CLEAR_ser:
	jsr	get_one
	jmp	clear_flag

FIGHT_ser:
	jsr	get_one
	sta	fight_set
	jsr	get_one
	sta	enemyid
	jsr	get_one
	sta	enemyid+1
	jsr	get_one
	sta	enemyid+2
	jsr	get_one
	sta	enemyid+3
	PUSHD
	jsr	fight
	jsr	refreshmap
	PULLD
	rts

REFRESH_ser:
	PUSHD
	jsr	refreshmap
	PULLD
	rts

BLACK_ser:
	lm	x0,#1
	lm	x1,#159
	lm	y0,#0
	lm	y1,#79
	lm	lcmd,#1
	jsr	block_draw
	jmp	scroll_to_lcd

MAP_ser:
	jsr	get_one
	sta	mapid
	jsr	get_one
	sta	mapx
	jsr	get_one
	sta	mapy
	rts

KILLAX_ser:
	jmp	clear_sprite

GET_ser:
	jsr	get_one
	jsr	goods_inc
	rts

GIVE_ser:
	jsr	get_one
	jsr	goods_decn
	rts

IF_ser:
	jsr	get_one
	bmi	if_true
	sta	a1h
	jsr	get_one
	jsr	get_flag
	eor	a1h
	beq	IF_ser
if_false:
	jsr	get_one
	bmi	if_false1
	jsr	get_one
	jmp	if_false
if_false1:
ELSE_ser:
	jsr	get_one
	cmp	#J_ELSE
	beq	if_true
	cmp	#J_ENDIF
	bne	if_false2
if_true:
ENDIF_ser:
	rts
if_false2:
	cmp	#J_SAY
	bne	if_false5
	ldy	temp1
if_false3:
	lda	data_read_buf,y
	beq	if_false4
	iny
	bne	if_false3
	jsr	inc_addr0
	ldy	#0
	jmp	if_false3
if_false4:
	sty	temp1
	jsr	inc_addr
	jmp	if_false1
if_false5:
	tax
	lda	TokenLen,x
	beq	if_false1
	sta	a1
if_false6:
	jsr	inc_addr
	dec	a1
	bne	if_false6
	jmp	if_false1	

PLAY_ser:
	PUSHD
	jsr	get_one
	tax
	pha
	lda	#INIT_CLASS
	jsr	get_object
	jsr	ram_get256
	pla
	cmp	#STAFFMENU
	bne	PLAY_ser1
	lda	#1
	db	2ch
PLAY_ser1:
	lda	#0ffh
	jsr	play_staff
	PULLD
	rts

WAIT_ser:
	jmp	wait_key

EXIT_ser:
	ldx	#StackTop
	txs
	jmp	start0

SHOWBOSS_ser:
	lm	x0,#80
	lm	y0,#25
	lm	circle_r,#0
	lm	lcmd,#0
SHOWBOSS_ser1:
	if	nc1020
	BREAK_BBS	_Bcircle_draw
	else
	extrn	_Bcircle_draw
	jsr	_Bcircle_draw
	endif

	inc	circle_r
	cmp1	circle_r,#25
	bcc	SHOWBOSS_ser1
	jsr	lcd_to_scroll
	PUSHD
	jsr	get_one
	pha
	jsr	get_one
	sta	bank_data_ptr+1
	pla
	sta	bank_data_ptr
	lm	x0,#64
	lm	y0,#9
	jsr	write_32x32x
	jsr	scroll_to_lcd
	PULLD
	rts

MAGIC_ser:
	jsr	get_one
	ldx	#3
MAGIC_1:	
	cmp	friends,x
	beq	MAGIC_2
	dex
	bpl	MAGIC_1
MAGIC_rts:	
	jsr	get_one
	rts
MAGIC_2:
	txa
	jsr	get_friend_addr
	ldy	#MAGIC_OFF
MAGIC_3:	
	lda	(a1),y
	beq	MAGIC_4
	iny
	cpy	#MAGIC_OFF+12
	bcc	MAGIC_3
	jmp	MAGIC_rts
MAGIC_4:
	jsr	get_one
	sta	(a1),y
	rts

TokenSerAddr:
	dw	0
	dw	SAY_ser ;对话
	dw	PUT_ser ;放sprite
	dw	MOVE_ser ;移动sprite
	dw	TURN_ser ;sprite改变方向
	dw	KILL_ser ;sprite消失
	dw	ADDMAN_ser ;队伍加人
	dw	LEAVE_ser ;人物暂时离队
	dw	SET_ser ;设置旗标
	dw	PAUSE_ser
	dw	FIGHT_ser
	dw	BLACK_ser ;黑屏
	dw	MAP_ser ;地图转换
	dw	PUTX_ser ;放sprite(但不立即显示)
	dw	KILLAX_ser ;主角外全部kill(不显示)
	dw	GET_ser ;获得物品
	dw	GIVE_ser ;失去物品
	dw	READD_ser ;人物归队
	dw	CLEAR_ser ;清除旗标
	dw	SHOWBOSS_ser ;32*32的boss的显示
	dw	REFRESH_ser
	dw	PLAY_ser ;播放字幕
	dw	WAIT_ser ;等待按任意键
	dw	EXIT_ser ;退出游戏
	dw	IF_ser
	dw	ELSE_ser
	dw	ENDIF_ser
	dw	MAGIC_ser
TokenLen:
	db	0
	db	0
	db	5 ;放sprite(5个参数)
	db	2 ;移动sprite
	db	2 ;sprite改变方向
	db	1 ;sprite消失
	db	1 ;队伍加人
	db	1 ;人物暂时离队
	db	1 ;设置旗标
	db	0
	db	5
	db	0 ;黑屏
	db	3 ;地图转换
	db	5 ;放sprite(但不立即显示)
	db	0 ;主角外全部kill(不显示)
	db	1 ;获得物品
	db	1 ;失去物品
	db	1 ;人物归队
	db	1 ;清除旗标
	db	2 ;32*32的boss的显示
	db	0
	db	1 ;播放字幕
	db	0 ;等待按任意键
	db	0 ;退出游戏
	db	0
	db	0
	db	0
	db	2

	end

⌨️ 快捷键说明

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