- 注册时间
- 2004-11-26
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2004-11-27 11:42:00
|
显示全部楼层
这么冷清啊。看来wqx汇编的确要淡出舞台了。
先抛砖引玉吧。《末日传说》的一个文件。
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_log
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_log
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
log
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
[em05] |
|