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

📄 main.s

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

	public	start
	public	start0
	public	next_game
	
	extrn	set_get_buf
	extrn	clear_sprite
	extrn	write_map
	extrn	move_map
	extrn	wait_key
	extrn	get_head_object
	extrn	show_talk
	extrn	get_object
	extrn	pop_menu
	extrn	add_friend
	extrn	run_juqing
	extrn	run_juqing0
	extrn	if_juqing
	extrn	goods_inc
	extrn	get_box_flag
	extrn	set_box_flag
	extrn	random_it
	extrn	fight
	extrn	refreshmap
	extrn	scroll_to_lcd
	extrn	delay
	extrn	write_160x80x
	extrn	continue_game
	extrn	play_staff
	extrn	get_flag
	extrn	xor_flag

start:
	ldx	#StackTop
	txs
	
	if	nc1020
	BREAK_BANK	__CloseAll
	else
	BREAK_BANK	__FileCloseAll
	endif
	
	CiAll
	lda	io_bank_switch
	sta	game_bank
	jsr	set_get_buf ;为以后读数据而把程序移到ram
	lda	game_second_m2
	eor	kbdrow
	ora	#1
	sta	my_seed ;随机数初始化
	lm	put_key,#0 ;无强制键
	sta	no_enemy ;遇敌
	jsr	disp_logo
start0:
	lm2	bank_data_ptr,#TITLE
	jsr	write_160x80x
	jsr	scroll_to_lcd
start1:
	jsr	wait_key
	cmp	#'b'
	beq	first_game
	cmp	#'n'
	beq	start2
	cmp	#'m'
	bne	start1
	lm	down_ram_set,#0 ;退出到网络,但不执行网络热键设定
	BREAK_BANK	__main
start2:
	jsr	continue_game
	jmp	start0
next_game:
	lm	juqing_id,#0ffh
	bne	next_game1
first_game:
	jsr	game_init
	lm	movedir,#0
next_game1:
	jsr	init_step ;遇敌步数初始化
	lda	mv_num
	and	#7fh
	sta	mv_num
	lda	#0
	sta	hour2
	sta	minute2
	jsr	clear_sprite
	lm	spriteid,#0
	jsr	refreshmap
	lda	juqing_id
	cmp	#0ffh
	beq	wait_for_key
	jsr	run_juqing
wait_for_key:
	jsr	wait_key
	SWITCH	rpg_cmd_len,rpg_cmd
	jsr	if_juqing

	lda	no_enemy
	bne	wait_for_key
	
	lda	step_count
	bne	wait_for_key
	lda	#MAPENEMY_CLASS
	ldx	mapid
	jsr	get_object
	jsr	ram_get256
	lda	data_read_buf
	beq	to_init_step ;本地图无随机敌人
	lda	my_data+LEVEL_OFF ;主角级别
	sec
	sbc	data_read_buf+1
	bcc	get_enemy0
	clc
	adc	#2
	jsr	random_it
	cmp	#0
	beq	to_init_step
get_enemy0:	
	lda	data_read_buf
	jsr	random_it
	asl	a
	asl	a
	tax
	ldy	#0
get_enemy:
	lda	data_read_buf+2,x
	sta	enemyid,y
	inx
	iny
	cpy	#4
	bcc	get_enemy
	lm	fight_set,#0
	jsr	fight
	jsr	refreshmap
to_init_step:
	jsr	init_step
	jmp	wait_for_key	

rpg_cmd:
	db	LEFT_KEY
	db	RIGHT_KEY
	db	UP_KEY
	db	DOWN_KEY
	db	CR_KEY
	db	F4_KEY
rpg_cmd_len	equ	$-rpg_cmd
	dw	proc_left
	dw	proc_right
	dw	proc_up
	dw	proc_down
	dw	proc_cr
	dw	pop_menu

proc_left:
	dec	step_count
	lm	movedir,#4
	lm	spriteid,#0
	jmp	move_map
proc_right:
	dec	step_count
	lm	movedir,#3
	lm	spriteid,#0
	jmp	move_map
proc_up:
	dec	step_count
	lm	movedir,#1
	lm	spriteid,#0
	jmp	move_map
proc_down:
	dec	step_count
	lm	movedir,#2
	lm	spriteid,#0
	jmp	move_map
proc_cr:
	jsr	get_head_object
	bcc	proc_cr_rts
	tya
	and	#40h
	beq	proc_cr_rts
	tya
	and	#3fh
	cmp	#SAY_CLASS
	bne	proc_cr1
	jsr	get_object
	jsr	ram_get256
	lm2	string_ptr,#data_read_buf+2
	jmp	show_talk
proc_cr1:
	cmp	#JUQING_CLASS
	bne	proc_cr2
	tya
	bpl	proc_cr_rts
	jmp	run_juqing0
proc_cr2:
	cmp	#BOX_CLASS
	bne	proc_cr6
	stx	a1h
	txa
	jsr	get_box_flag
	bne	proc_cr_rts
	lda	a1h
	jsr	set_box_flag
	ldx	a1h
	lda	#BOX_CLASS
	jsr	get_object
	jsr	ram_get256
proc_cr21:
	lda	data_read_buf
	jsr	goods_inc
	ldy	#0
proc_cr3:
	lda	get_goods_msg,y
	sta	ScreenBuffer,y
	beq	proc_cr4
	iny
	bne	proc_cr3
proc_cr4:
	ldx	data_read_buf
	lda	#GOODS_CLASS
	jsr	get_object
	jsr	ram_get256
	ldy	#5
proc_cr5:
	lda	data_read_buf+1,y
	sta	ScreenBuffer+6,y
	dey
	bpl	proc_cr5
	lm2	string_ptr,#ScreenBuffer
	jmp	show_talk
proc_cr_rts:
	rts
proc_cr6:
	cmp	#BOX2_CLASS
	bne	proc_cr7
	stx	a1h
	txa
	ora	#80h
	jsr	get_box_flag
	bne	proc_cr_rts
	lda	a1h
	ora	#80h
	jsr	set_box_flag
	ldx	a1h
	lda	#BOX2_CLASS
	jsr	get_object
	jsr	ram_get256
	lm	data_read_buf,data_read_buf+2
	jmp	proc_cr21
proc_cr7:
	cmp	#SWITCH_CLASS
	bne	proc_cr71
	jsr	get_object
	jsr	ram_get256
	lda	data_read_buf+4
	jsr	xor_flag
	jmp	refreshmap
proc_cr71:
	cmp	#RSAY_CLASS
	bne	proc_cr_75
	jsr	get_object
	jsr	ram_get256
	lda	data_read_buf+2
	jsr	random_it
	sta	a1
	ldy	#3
	lda	a1
	beq	proc_cr74
proc_cr72:
	lda	data_read_buf,y
	beq	proc_cr73
	iny
	bne	proc_cr72
proc_cr73:
	tya
	adda2	bank_data_ptr
	jsr	ram_get256
	ldy	#1
	dec	a1
	bne	proc_cr72
proc_cr74:
	jmp	proc_cr11
proc_cr_75:
	cmp	#SSAY_CLASS
	bne	proc_cr_rts
	jsr	get_object
	jsr	ram_get256
	ldy	#2
proc_cr8:
	lda	data_read_buf,y
	bmi	proc_cr10
	sta	a1h
	lda	data_read_buf+1,y
	jsr	get_flag
	eor	a1h
	bne	proc_cr9
	iny
	iny
	bne	proc_cr8
proc_cr9:
	iny
	iny
	lda	data_read_buf,y
	bpl	proc_cr9
proc_cr91:	
	iny
	lda	data_read_buf,y
	bne	proc_cr91
	tya
	adda2	bank_data_ptr
	jsr	ram_get256
	ldy	#1
	bne	proc_cr8
proc_cr10:
	iny
proc_cr11:
	tya
	clc
	adc	#<data_read_buf
	sta	string_ptr
	lda	#>data_read_buf
	adc	#0
	sta	string_ptr+1
	jmp	show_talk

get_goods_msg:
	db	'获得:攻略书',0      

game_init:
	lda	#INIT_CLASS
	ldx	#0
	jsr	get_object
	jsr	ram_get256
	ldy	#0
game_init1:
	lda	data_read_buf,y
	sta	init_data,y
	iny
	cpy	#INIT_LEN
	bcc	game_init1
	lda	door_top
	beq	not_door
	lda	#INIT_CLASS
	ldx	#INIT_DOOR
	jsr	get_object
	jsr	ram_get256
	lda	door_top
	asl	a
	asl	a
	tax
	dex
game_init2:
	lda	data_read_buf,x
	sta	door_stack,x
	dex
	bpl	game_init2
not_door:
	lm	a3,#3
game_init3:
	ldy	a3
	lda	friends,y
	bmi	next_friend
	jsr	add_friend
next_friend:
	dec	a3
	bpl	game_init3
	lda	goods_num
	beq	game_init5
	lda	#INIT_CLASS
	ldx	#INIT_GOODS
	jsr	get_object
	jsr	ram_get256
	lda	goods_num
	asl	a
	tay
	dey
game_init4:
	lda	data_read_buf,y
	sta	my_goods,y
	dey
	bpl	game_init4
game_init5:
	lda	goods_num
	asl	a
	tay
	lda	#0
game_init6:
	sta	my_goods,y
	iny
	cpy	#MAX_GOODS*2
	bcc	game_init6
	ldy	#31
	lda	#0
game_init7:
	sta	flag_buf,y
	sta	box_buf,y
	dey
	bpl	game_init7 ;清旗标区
	lm	game_hour,#0
	sta	game_min
	rts

init_step:
	lda	#6
	jsr	random_it
	clc
	adc	#8
	sta	step_count
	rts

disp_logo:
	if	nc1020
	BREAK_BANK	__clrscreen
	else
	extrn	_Bclrscreen
	jsr	_Bclrscreen
	endif
	
	lm	_a3,#90
disp_logo0:
	lm	x0,#80
	lm	y0,#40
	lm	circle_r,_a3
	lm	lcmd,#1
	
	if	nc1020
	BREAK_BBS	_Bcircle_draw
	else
	extrn	_Bcircle_draw
	jsr	_Bcircle_draw
	endif
	
	dec	_a3
	lda	_a3
	cmp	#36
	bcs	disp_logo0
	ldy	#127
disp_logo1:
	lda	logo,y
	sta	data_read_buf,y
	dey
	bpl	disp_logo1
	lm	_a3,#49
	lm	_a3h,#64
disp_logo2:	
	jsr	write_logo
	ldx	#1
	jsr	delay
	lm	x0,_a3
	lm	x1,_a3h
	lm	y0,#24
	lm	y1,#55
	lm	lcmd,#0
	
	if	nc1020
	BREAK_BBS	_Bblock_draw
	else
	extrn	_Bblock_draw
	jsr	_Bblock_draw
	endif
	
	ldx	#6
	jsr	delay
	add1	_a3,#3
	add1	_a3h,#3
	lda	_a3h
	cmp	#110
	bcc	disp_logo2
	jsr	write_logo
	lm	x0,#68
	lm	x1,#91
	lm	y0,#58
	lm	y1,#67
	lm2	fccode,#lee
	
	if 	nc1020
	BREAK_BBS	_Bw_block
	else
	extrn	_Bw_block
	jsr	_Bw_block
	endif
	
	jsr	wait_key
	ldy	#0
disp_logo3:
	lda	warning_msg,y
	sta	data_read_buf,y
	iny
	bne	disp_logo3
	lda	#0
	jsr	play_staff
	jmp	wait_key
write_logo:	
	lm	x0,#64
	lm	y0,#24
	lm	x1,#95
	lm	y1,#55
	lm2	fccode,#data_read_buf
	
	if 	nc1020
	BREAK_BBS	_Bw_block
	else
	jsr	_Bw_block
	endif

	rts

logo:
	db	07Eh,0FBh,0FFh,0FFh,0FFh,0FFh,0FFh,0BFh
	db	0FFh,0FFh,0FFh,0FBh,0FFh,0FFh,0FBh,0F7h
	db	0DFh,0FFh,0FFh,0CFh,0FFh,0FFh,0FFh,08Fh
	db	0FFh,0F0h,00Fh,01Fh,0FFh,0C0h,002h,03Fh
	db	0FFh,080h,000h,07Dh,0FFh,01Fh,080h,0FFh
	db	0FEh,07Fh,0E0h,07Fh,0FCh,0FFh,0C0h,03Fh
	db	01Dh,0FFh,080h,03Fh,0FBh,0FFh,004h,01Fh
	db	0FBh,0FEh,00Ch,01Fh,0FFh,0FCh,01Eh,01Fh
	db	0FFh,0F8h,03Eh,01Fh,0FFh,0F0h,07Eh,01Fh
	db	0FFh,0E0h,0FEh,01Fh,0FFh,0C1h,0FEh,01Fh
	db	0EFh,083h,0FEh,01Fh,0FFh,007h,0FCh,03Fh
	db	0FEh,00Fh,0FCh,03Fh,0FCh,01Fh,0F8h,07Fh
	db	0F8h,03Fh,0F0h,0FFh,0F0h,07Fh,0E1h,0FBh
	db	0E0h,0DFh,083h,0FBh,0C1h,0F0h,00Fh,0FFh
	db	083h,0FFh,0FFh,0FFh,087h,0FFh,0FFh,0BFh
	db	08Fh,0BFh,0DFh,0FFh,07Fh,0FFh,0FFh,0FFh
lee:
	db	000h,000h,000h,000h,060h,000h,000h,0A0h
	db	000h,001h,040h,000h,001h,046h,060h,002h
	db	08Ah,0A0h,004h,01Dh,0C0h,01Fh,013h,020h
	db	01Fh,0CCh,0C0h,000h,000h,000h
warning_msg:
	db	'          警  告          '
	db	'    本软件的代码由LEE独立 '
	db	'编写,其余数据归DOOM-TEAM '
	db	'所有。任何单位和个人,未经'
	db	'授权,严禁进行任何形式的反'
	db	'编译、修改、数据引用以及商'
	db	'业性质的复制、传播。违者必'
	db	'究。                      '
	db	0

	end

⌨️ 快捷键说明

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