📄 juqing.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 + -