|
;[FC][忍者神龟3代标题选关程序]
: x/ e) C2 B5 J. v;作者:FlameCyclone 2017.4.1
, C& g( }; V5 z1 h; V, Y) H9 m, Z o# C* E- [9 h
6 w6 J5 I5 l, x6 Q3 Q4 v
;配置数据2 x( W5 Y" t2 Z5 g. y
KEY_ADDR = $F8 ;按键地址8 O3 {9 [7 p+ v6 ?3 v. p
STAGE_TEMP = $6010 ;关卡临时地址
' w9 ?$ C5 X G! l8 j1 d* E- L) i- R& ESTAGE_MAX = $0E ;最大关卡数4 L" E! `# L% _: S( p
TITLE_A = $20 ;标题条件A
, q" A6 q- y* E& K1 R9 pTITLE_A_ON = $02 ;标题条件A有效状态判定
" h3 I& K3 s+ I7 q, H$ zTITLE_B = $21 ;标题条件B
0 ^5 p- R1 @- [) k) N3 qTITLE_B_ON = $03 ;标题条件B有效状态判定
2 `! A4 I9 v2 K: C' PPPU_END = $FF ;PPU结束符
5 s* x1 i% J3 r5 s, r2 j/ bTIME_LAY = $4A ;标题显示延时地址
5 j) M" s# H A" a2 H# h, x/ EBUTTON_DEC = $42 ;关卡减少按键
1 ?" s% L$ b& G3 o/ T& Z9 DBUTTON_INC = $81 ;关卡增加按键
7 N" V5 H" s& R5 J1 J5 bNUMBER_A = $06 ;数字A距离STAGE偏移量
, Y- Y- ]# e7 ?! Z$ E! [& PNUMBER_B = $08 ;数字B距离STAGE偏移量' P: |8 s# s0 |# Y% t- }! O; z
PPU_ADDR_H = $23 ;STAGE写入地址高位5 k* R$ i" Q, e. n( A; ?
PPU_ADDR_L = $8C ;STAGE写入地址低位$ U6 ^" D2 ?& s( h
CHAR_S = $A2 ;字符'S'. q2 g' @( t* T+ E/ x/ d5 x2 p' j
CHAR_T = $A3 ;字符'T'
' ?9 d$ r& V0 H& i5 g) _) KCHAR_A = $90 ;字符'A'
/ _1 t5 G. u8 \& p5 A. }CHAR_G = $96 ;字符'G'
6 {, F" q' _4 T# l- @CHAR_E = $94 ;字符'E'
6 t: {; [+ M6 m" Y9 G0 MCHAR_SPA = $00 ;字符空格3 u% b! U* _$ }1 ~6 w
CHAR_LIN = $AE ;字符'-'
, a6 i3 X: ]+ F8 D4 VCHAR_O = $9E ;字符'o'
! g, H! d/ @0 u4 F1 kNUM_1 = $81 ;数字'1'
7 `$ S; I* W7 J$ h. tNUM_2 = $82 ;数字'2'" ^, F" N) M; w, w2 f
NUM_3 = $83 ;数字'3'
) N# C# S3 X3 }% v1 }" ONUM_4 = $84 ;数字'4'% p. u/ I" Z1 f4 x9 B8 F
NUM_5 = $85 ;数字'5'
( k2 @: l: z; b6 j1 n, y) oNUM_6 = $86 ;数字'6'1 Q- a: P3 H& a9 ~ c# Q4 u% A
NUM_7 = $87 ;数字'7' g8 L& A/ x( w: y
NUM_8 = $88 ;数字'8'
4 V& r, b, u. C$ Y6 h8 lNUM_9 = $89 ;数字'9'
( w& f) Z3 p6 LNUM_0 = $80 ;数字'0'; k" Z5 }* |$ j
. F) E6 F. m+ b3 n .ORG $F82A
0 B2 C+ M+ [( C5 K- v& ~" E' \ JSR $E700/ M: ^# p( p& v, v
B$ m5 S" Z6 ~- [# K , m ?( Y5 o2 \% E2 Q/ T, @
.ORG $E700
! r( T( C4 f/ ?$ Y4 E& _
/ v( k5 j, ^: _/ i; ~ STY $4014 ;补上覆盖的精灵写入指令
% H* o# }7 D H8 x4 ]" m5 RPROTECT_DATA: ;数据保护
3 X1 Y. ~7 E$ o& a+ n. K: h PHA ;数据保护开始
% o3 x( l" {' i( V TXA
- q: H& r! W- o, f" j PHA
0 L8 s9 S& `$ u4 p' K ?$ Q TYA
' P" ? J: n6 G% ~. n1 x8 U PHA ;数据保护结束
/ z1 O. i, C' |% C* r# W4 Q# r" N LDA TITLE_A
- l( t+ l1 ]: ^+ P" o CMP #TITLE_A_ON ;比较是否为标题画面
4 ]5 W: O) s) s3 ` BNE RET
+ L$ f) ^3 n& W* r+ N* y# _ LDA TITLE_B
0 i" @4 x, T+ K9 i. p3 n CMP #TITLE_B_ON ;比较是否为标题画面5 Y8 `5 n9 V' P% ~( P" \
BEQ PPU_STAGE
6 ~( k' B3 {$ M, F, rRET: ;恢复数据
: b8 B4 _" r+ X9 u/ r6 n. O PLA ;恢复数据开始
# ]; ~) i, W M1 Y$ z7 n! d TAY. h4 d" U6 k" G6 y( p4 }8 d" p- O
PLA
! R0 `" @% \: K0 B TAX
7 j! C) k1 k1 o+ r; k8 ?* w% n* I+ L PLA ;恢复数据结束4 q0 U i8 x% U1 T' ^* y
RTS ;返回/ L4 |0 A, _' K6 ^, y9 z! p" [& ^
PPU_STAGE: ;字符STAGE写入程序
7 D3 O% {/ q! ^7 N5 X LDA #PPU_ADDR_H / X9 D2 J3 z* c5 M8 b
STA $2006 ;设置PPU字符写入高位地址: d& F* z. ?) f2 @8 _2 k8 H
LDA #PPU_ADDR_L/ T+ ?) z4 F; D% l E2 I3 ^
STA $2006 ;设置PPU字符写入低位地址0 k1 J2 z' n; F; ]' o. }6 z# n
LDX #$001 I1 g; u! I7 p5 m4 N* q
PPU_STAGE_WROTE: ;写入STAGE字模
$ D3 ?% \: G" i! Q2 s% a LDA STAGE_DATA,X
- G% z" y7 w4 a7 j CMP #PPU_END ;判断是否写入结束- V: p" x3 o' \% v
BEQ STAGE_CMP
9 y ?' p7 A' I3 W5 o: k STA $2007
$ K& P& [+ L/ Z* g6 K, \1 A INX; W" s( ^, ]! `' n
BCC PPU_STAGE_WROTE* |5 }0 f: `& h4 I" k0 u& e) Y
STAGE_CMP: ;选关操作4 {8 m& ~' ~; X! w3 w: _% l
LDA STAGE_TEMP
5 P& k. O4 D) w; o% p CMP #$FF ;关卡数据初始化条件判断
( i. ]8 M {) S) }! F0 T BNE KEY_B# \1 D; q2 Q% {1 O+ U# v
LDA #$00- z4 r, ?5 X/ I6 h$ f* f
STA STAGE_TEMP ;关卡数据初始化 M) q- v$ ^( ? G8 @; W2 m
KEY_B: ;关卡减少. O* K7 [* T% K' t2 S# G6 N( i
LDA KEY_ADDR7 L- V+ f2 T7 ^; @7 V
AND #BUTTON_DEC ;按键B或左减关
/ T( y7 } U" Q9 s. z. h/ K BEQ KEY_A
( T" ?0 Z, a5 {! n LDA #$FF0 h" e3 X% k/ @0 K! e1 j, ?& S
STA TIME_LAY ;重设标题延时2 I4 r5 N. T2 i; l- D; ?
LDA STAGE_TEMP
8 {+ G1 q. e5 W. g6 T CMP #$00 ;关卡比较
) ^* y$ c) x7 E: r+ Y BEQ KEY_A
& l4 W0 t4 D2 X8 @ DEC STAGE_TEMP ;减关, D4 E3 r5 m8 c7 D/ s" c! A w
JSR MUSIC ;按键音效2 H) R0 d) d! d3 I# C2 ^6 M
KEY_A: ;关卡增加" K% G( Q1 p6 i: s' t; B
LDA KEY_ADDR
9 u" f; |$ p% Q/ f% ] R8 b. U AND #BUTTON_INC ;按键A或右加关
. @' [+ v" _9 t BEQ PPU_NUM_WRITE/ L x/ t/ I/ H* \
LDA #$FF
( I+ w* s% n$ g+ c STA TIME_LAY ;重设标题延时+ i, n7 }/ Y! k" n# |4 I' `
LDA STAGE_TEMP0 a$ A8 \; X5 \8 E! k* Y
CMP #STAGE_MAX ;关卡比较
% [1 n( s9 D( ^ t" D3 o# H; e" l) Q: [ BEQ PPU_NUM_WRITE, X5 k% G$ c4 f7 J t; G; T
INC STAGE_TEMP ;加关
7 [0 T1 Q: e5 v: _5 C JSR MUSIC ;按键音效8 _6 {* i: X( g1 v4 K7 e
PPU_NUM_WRITE: ;关卡数字写入地址' v. | z* Z* e3 k9 |" ?
LDA #PPU_ADDR_H% b" N/ c2 g" T
STA $2006 ;设置PPU数字写入高位地址
* {) b0 B& }2 T/ ^# a: e LDA #PPU_ADDR_L7 Y$ [1 t4 L& W5 w O+ T
CLC. U& g( P, P/ h. c
ADC #NUMBER_A" ~9 a) W v4 {- x( H* T; [
STA $2006 ;设置PPU字符写入低位地址, I- d7 N6 P3 Y. \
LDA STAGE_TEMP
, z! B; o4 |7 a$ f9 ~ TAX
0 t s d* K3 ]4 Q2 E/ }; m LDA STAGE_D1,X ;写入数字
8 F+ v2 h/ S8 v1 Q1 i STA $2007% G6 X" G5 s( J* W8 r
LDA #PPU_ADDR_H$ l+ V0 |# V/ w3 R: v- Z8 d
STA $2006 ;设置PPU数字写入高位地址1 q5 I! a* Z9 v9 k- }1 Q. A
LDA #PPU_ADDR_L
. l' h" y) Y. O8 b CLC6 F& s N% ?9 C* J2 d
ADC #NUMBER_B
1 x. w+ [0 F$ t STA $2006 ;设置PPU字符写入低位地址
! \ s8 B2 t7 ~* P LDA STAGE_TEMP
6 D2 M7 F- y% r) H) I! K" t# Z' S5 o" A TAX9 ]/ n. k# {7 X- ?0 x. Q
LDA STAGE_D2,X ;写入数字
7 N7 c6 Y& C* s! J STA $20073 d% M- A& d: D" g
STAHE_WRITE:2 j! J$ @1 p' `/ }
LDA STAGE_TEMP% Z) w9 M: s) A" n
STA $2D ;初始关卡写入5 v8 \/ Z& s5 D7 e9 r' H
PPU_RTS: ;恢复数据
9 X/ w2 [+ n$ G, Q. t+ R' Y PLA# B3 }! V, `7 z8 x) B
TAY i9 L6 e) Q7 x8 m2 x
PLA# G8 G0 ^& a& i9 [' ~
TAX+ z1 l; z% x" \0 b% c; D
PLA
% G2 ~ D; K3 ? RTS* a' a% Q% ~# Q$ p3 b0 p; G
/ ~+ X+ t3 o. h6 b* E0 \6 T
STAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据
3 U: `+ m- N4 {; _ .BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END( w; I9 U/ Z) {5 ~- w
8 h% Y8 E7 T) \3 f+ \1 s/ k
STAGE_D1: ;关卡数字
, i+ P9 ^4 `1 w9 x7 C0 Q! @/ s4 c .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
9 H# R& ]" H" N8 a" I7 }% J5 R% R7 b+ A$ `/ G
STAGE_D2: ;场景数字. ~* | s8 j/ j9 U& t
.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
1 X5 a' b: j8 F( U! J" c$ i8 l) r - M# r" `9 X7 r0 x( C
' ?% W1 X5 q5 T! I
MUSIC: ;按键音效
# D2 Y9 _1 f6 Z3 N LDA #$3B ;音乐号- l/ c! h D) X) R4 a
JSR $919E ;系统音乐调用
. v$ p) G8 J0 d9 ^5 I# F RTS |
|