|
|
;[FC][忍者神龟3代标题选关程序]
& Q( I8 k& r- P! K1 d+ [1 X;作者:FlameCyclone 2017.4.1; ^/ x; d- {5 u: Y' X/ J, p! v6 `
0 Q: p( S. a) H1 c9 d4 w. e
+ g9 s+ P3 X3 D. }4 D4 ~4 T;配置数据
2 ]9 R& ^+ V; s- ]6 A0 U( IKEY_ADDR = $F8 ;按键地址
/ j4 [& {) J7 G6 F: fSTAGE_TEMP = $6010 ;关卡临时地址
- j2 `. D- J8 v" @% Q! T$ W- P @STAGE_MAX = $0E ;最大关卡数
# X8 `$ q" q9 C$ A$ N) E' J' t# h$ ~TITLE_A = $20 ;标题条件A
( Z. J4 u# n9 F% cTITLE_A_ON = $02 ;标题条件A有效状态判定
! \( b# b4 Q- f1 {2 B1 S4 Z. d Y; kTITLE_B = $21 ;标题条件B) n$ V' O) w* D0 b) y/ @
TITLE_B_ON = $03 ;标题条件B有效状态判定; f( }* b- g% _. Q5 z
PPU_END = $FF ;PPU结束符
& g- U( h' ^% qTIME_LAY = $4A ;标题显示延时地址4 p- o+ E8 F( p$ q" n
BUTTON_DEC = $42 ;关卡减少按键
7 v. r; t) t% _- W+ _8 W) zBUTTON_INC = $81 ;关卡增加按键
) I5 T9 M2 P* g8 g2 C3 hNUMBER_A = $06 ;数字A距离STAGE偏移量
! n& Y* k/ T2 m0 G3 HNUMBER_B = $08 ;数字B距离STAGE偏移量
( `( R. n- ]8 |- L' QPPU_ADDR_H = $23 ;STAGE写入地址高位9 v& }! v" `+ n2 K/ R5 }3 y# l
PPU_ADDR_L = $8C ;STAGE写入地址低位5 T# E% ]" i7 ~% v7 y8 k
CHAR_S = $A2 ;字符'S'2 `) o: u2 F0 V# b- D
CHAR_T = $A3 ;字符'T'1 ~- s1 r# g' j1 V
CHAR_A = $90 ;字符'A'
4 B5 w9 G' J* [# N$ lCHAR_G = $96 ;字符'G'# [+ ?2 q1 T: R
CHAR_E = $94 ;字符'E'
* T" Y4 i' y! S5 {# ACHAR_SPA = $00 ;字符空格
, {+ m" d9 Q2 m" j9 p G0 K% cCHAR_LIN = $AE ;字符'-') v/ R) k: k9 |. E
CHAR_O = $9E ;字符'o'5 H4 P* `7 a# C q( l/ v
NUM_1 = $81 ;数字'1'7 T4 v# j" S% ^/ l8 @
NUM_2 = $82 ;数字'2'
* E5 l9 _7 f& A! [/ E; YNUM_3 = $83 ;数字'3': x" x! S5 y4 ]7 ]) Q0 U+ L( N
NUM_4 = $84 ;数字'4'
6 m( X7 C' R$ K" [& `5 VNUM_5 = $85 ;数字'5'' `& X) l$ _1 k" Z+ {
NUM_6 = $86 ;数字'6'
6 I) ^% y( }3 ~/ m6 p# XNUM_7 = $87 ;数字'7'
* p/ S) u" c/ B- R& MNUM_8 = $88 ;数字'8'& L9 o1 B" h7 N7 t
NUM_9 = $89 ;数字'9'$ o2 I% s3 s7 T8 d o
NUM_0 = $80 ;数字'0': q1 i0 w( h& |3 P$ D8 S, T6 U
. s: S( o/ t1 R- J' [8 H .ORG $F82A
3 s R' K. D" X1 D; j JSR $E700! a8 J/ \ F+ O# e3 A w0 y
. w/ @/ r. \, e& G8 N$ v. m: f3 h 1 ]. o4 ?3 x' h6 N9 @, b
.ORG $E700$ I0 l6 m+ T( `4 U5 r/ D+ [
" S! l6 Q1 ~& Y7 O" S
STY $4014 ;补上覆盖的精灵写入指令& e, b. j# z2 F ^
PROTECT_DATA: ;数据保护6 V: Q E y1 X8 {- a
PHA ;数据保护开始
6 f! y7 {* M& N- B, O9 Z- q TXA: n/ P8 w4 P2 Q) B( r- D: r
PHA
# |: W: ?: ?, }; O6 a! B TYA
# G0 G; J g+ D& G8 ? PHA ;数据保护结束
( T8 f+ ?. ?1 c, _( @ LDA TITLE_A
$ O$ j6 C! F0 ^/ L9 Y* T! h CMP #TITLE_A_ON ;比较是否为标题画面4 X8 O4 G f! C+ {) I- f
BNE RET
7 Q% |2 C+ U4 ^- w, H# S }7 k- n LDA TITLE_B. h2 |6 w) @! v) i8 ^. p
CMP #TITLE_B_ON ;比较是否为标题画面( u; q! g6 {2 [/ V& L+ E/ I: [/ T
BEQ PPU_STAGE
4 W( z5 z8 g% i' \RET: ;恢复数据$ x" {/ B! [, E( ]% k/ u3 ^9 X
PLA ;恢复数据开始
0 N( m9 G2 Q: P# _" e TAY- X# `" W* \4 V( o# Q0 v) }
PLA
1 ?/ w- l8 f. q, `9 _ H% o- r TAX
4 d0 Q* K' f* N2 X4 X. u PLA ;恢复数据结束' a8 I$ T2 \7 t6 z& f
RTS ;返回" {( k B1 l' b. G' e
PPU_STAGE: ;字符STAGE写入程序
! S$ d& ?5 m% D8 [$ H1 B. [5 S3 { LDA #PPU_ADDR_H & m1 @0 j$ M1 U, N
STA $2006 ;设置PPU字符写入高位地址0 G5 s+ V5 H- P g6 p; ~( a
LDA #PPU_ADDR_L
/ r) Q) f# ?6 V- A$ N STA $2006 ;设置PPU字符写入低位地址
, L# L) M, F$ i1 L LDX #$00: M. q: j' ^. L/ w w
PPU_STAGE_WROTE: ;写入STAGE字模5 d& E4 B3 K( g# ~( o( ~+ e
LDA STAGE_DATA,X
. o: |" A7 y, x. J6 a CMP #PPU_END ;判断是否写入结束$ a& P# j Q# O
BEQ STAGE_CMP
# O3 \+ S/ Q4 R" m$ g STA $2007
& s! S3 ~5 R! f" i1 z, M. t INX" a1 x9 ?* ^5 U+ I+ _, L
BCC PPU_STAGE_WROTE1 G* r8 o% e+ Y7 b5 Y
STAGE_CMP: ;选关操作
9 O) @& u$ J" l LDA STAGE_TEMP
% N! N" E. |; l9 a: J2 ]- c CMP #$FF ;关卡数据初始化条件判断
/ f2 `+ V# w8 e) t; u BNE KEY_B0 a( H! x& H! ]' T6 H6 m! ^* u" r$ ^& ~
LDA #$001 @& ?* ^" z; k' M, p( S7 [1 \6 T
STA STAGE_TEMP ;关卡数据初始化2 U! M/ c- K6 j7 E# m% l
KEY_B: ;关卡减少
' e- N# V9 n# l K LDA KEY_ADDR
+ ]0 Q+ Q" ~) e/ U" n+ u AND #BUTTON_DEC ;按键B或左减关
d' X/ H; A" X BEQ KEY_A
' y' B% j' a% v( q5 R3 h2 R LDA #$FF4 r2 s4 N8 z, t- l
STA TIME_LAY ;重设标题延时7 |! `8 `' g: D
LDA STAGE_TEMP; c" e0 y4 H$ P l, O! F/ w
CMP #$00 ;关卡比较9 T; M0 Q& n+ Y* M l7 X
BEQ KEY_A
# y9 P9 T6 S5 `8 ]( L* p DEC STAGE_TEMP ;减关
$ c& g# O0 C/ ]1 { JSR MUSIC ;按键音效
# v# g) ^5 E. g7 ?KEY_A: ;关卡增加+ ]0 L" J* g- H& f" Z/ n; j1 R
LDA KEY_ADDR
; \# } Z3 K2 v" Q AND #BUTTON_INC ;按键A或右加关3 E5 A k% f6 ?7 p" `) `
BEQ PPU_NUM_WRITE; b' s/ s+ I' `2 x; y! V
LDA #$FF
& f9 ], ]4 C" o) P1 S3 `: b2 ]' Y STA TIME_LAY ;重设标题延时4 Z/ s, Q( `4 x1 | O; s: l
LDA STAGE_TEMP
7 F. ]) I' C/ y+ L CMP #STAGE_MAX ;关卡比较6 \1 X% g8 s* d) R0 k
BEQ PPU_NUM_WRITE' w I+ ]' _" T) Z3 a# y, n& N# }
INC STAGE_TEMP ;加关
0 M0 R1 x" Z ~/ i, u JSR MUSIC ;按键音效
* h2 Z+ i+ e7 ^- r7 R7 _PPU_NUM_WRITE: ;关卡数字写入地址
6 f5 U9 i+ R" q7 i- q3 V LDA #PPU_ADDR_H
0 t4 L' J3 z! d% m3 f3 E STA $2006 ;设置PPU数字写入高位地址
0 _0 K$ Y7 {5 n LDA #PPU_ADDR_L7 n: t) M7 G9 G; ~
CLC% M1 B6 V5 D8 Q4 `; V4 h2 U
ADC #NUMBER_A3 c0 z& X9 G9 ^2 P$ Y
STA $2006 ;设置PPU字符写入低位地址
2 v7 r3 }6 ]& i" Z LDA STAGE_TEMP
( y" Y6 a- Z+ }6 A' ~0 E TAX
" h! I. d! @1 W6 i1 i. b LDA STAGE_D1,X ;写入数字8 W9 ]# |/ P# ^; \% [1 F0 g. o3 J: `
STA $2007
5 h. d& Z& L: o* Z& g* f LDA #PPU_ADDR_H
1 u0 {+ h- m9 u$ Y STA $2006 ;设置PPU数字写入高位地址
' A/ j& n* |% t* z LDA #PPU_ADDR_L
& Y. _6 L9 J9 a q CLC
2 G- C# K# m6 {( \5 i: d ADC #NUMBER_B
5 ^% W! N+ L4 l. ]" _+ L; ]0 A STA $2006 ;设置PPU字符写入低位地址5 Z0 t; @( y9 P( u& ~
LDA STAGE_TEMP
7 }! w6 W4 v- P; e A; j9 ^ TAX8 q, ]; g6 m7 Z, R b- x
LDA STAGE_D2,X ;写入数字
5 J N) f2 K' Y# |0 @6 L+ E# s1 K STA $2007! r" j6 d$ h" a2 A2 x# g# w$ Q
STAHE_WRITE:1 m3 W* f% B1 `/ _! s* U
LDA STAGE_TEMP
# L0 ?( H' R# g' K9 x STA $2D ;初始关卡写入
/ {% N J* i: `. xPPU_RTS: ;恢复数据4 P, j( X9 z' G0 N# b, K
PLA
( T2 x y: H8 Q0 l3 ^ TAY9 Q6 J5 X& l. O2 v0 [7 Z
PLA+ q: w+ U, F& U) p. f
TAX
- Y. D- X1 X$ W+ K% `3 M PLA w' t9 X( b" V$ }: @$ e& a
RTS
p) l8 a. [: k2 a! Z8 q* k " R' a: p5 u5 }( s. m8 y# p
STAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据
, N' v6 N9 N) n |# X, D .BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END0 G! v9 M" _1 ^$ H% }
) C7 r& b1 N: _1 S6 `3 V4 e
STAGE_D1: ;关卡数字
. J- h5 a) U) ?4 L .BYTE NUM_1,NUM_2,NUM_2,NUM_3,NUM_4,NUM_4,NUM_5,NUM_5,NUM_6,NUM_6,NUM_7,NUM_7,NUM_8,NUM_8,NUM_8
; b" _7 r4 k a& D6 I Z7 |/ D, ~7 P
STAGE_D2: ;场景数字
' a! u6 D% v t7 S3 ?! Q .BYTE NUM_1,NUM_1,NUM_2,NUM_1,NUM_1,NUM_2,NUM_1,NUM_2,NUM_1,NUM_2,NUM_1,NUM_2,NUM_1,NUM_2,NUM_3! d: N" x6 [ k2 @
- s# L" J& r7 x" q" `0 z$ {
& {% Q6 G! n, MMUSIC: ;按键音效- O2 K, E0 J$ I6 H3 v
LDA #$3B ;音乐号$ {/ t, z2 [& G6 b1 K" p7 G
JSR $919E ;系统音乐调用
, }! b" g4 `6 v. J1 H RTS |
|