|
|
;[FC][忍者神龟3代标题选关程序]
" n2 z, g0 M/ `2 X$ Q+ _/ Z;作者:FlameCyclone 2017.4.16 x } l4 X3 V5 s( S7 p8 g- A4 ]
) A8 F) t# I8 R" M2 h1 ?
. b* E9 _4 q6 s# a( b+ v;配置数据( K) C: U( I( D- F/ Y$ l
KEY_ADDR = $F8 ;按键地址
" |8 U- P& p. ~STAGE_TEMP = $6010 ;关卡临时地址
+ E9 @% }3 u1 w5 ]+ [" D+ O8 s2 A$ WSTAGE_MAX = $0E ;最大关卡数/ x$ _6 p: A# U; u& p/ ?
TITLE_A = $20 ;标题条件A* s9 k) w7 p/ q: d5 {! G& Q
TITLE_A_ON = $02 ;标题条件A有效状态判定
4 [* ?" n6 X4 |7 J* hTITLE_B = $21 ;标题条件B
! R; u, m5 O' L6 vTITLE_B_ON = $03 ;标题条件B有效状态判定7 \3 A2 o' u' U0 f
PPU_END = $FF ;PPU结束符' q1 |: H* c+ K5 V
TIME_LAY = $4A ;标题显示延时地址5 y3 G. c: i! r, W2 C# S
BUTTON_DEC = $42 ;关卡减少按键
& g$ t" M( D$ T+ f3 z. wBUTTON_INC = $81 ;关卡增加按键3 @8 }) E2 D9 F' @ E- Y& `4 N- i0 C
NUMBER_A = $06 ;数字A距离STAGE偏移量1 S% v) @; p+ Z2 L
NUMBER_B = $08 ;数字B距离STAGE偏移量
; y8 f F2 A1 O# o1 [6 z* DPPU_ADDR_H = $23 ;STAGE写入地址高位
3 Z+ G: H3 N, e$ x6 p# l$ e+ KPPU_ADDR_L = $8C ;STAGE写入地址低位
1 }# R* b# ], m) J1 B* R9 F: n0 kCHAR_S = $A2 ;字符'S'5 e$ C8 g1 W2 Q' f% z9 Y9 Q
CHAR_T = $A3 ;字符'T'* C& y3 }7 R1 ? C
CHAR_A = $90 ;字符'A') }& `3 X% j0 R6 r% Z) m
CHAR_G = $96 ;字符'G'
* [7 ~! s7 \" s+ P9 A/ yCHAR_E = $94 ;字符'E'
' _! \$ @% A7 z, A( v; @CHAR_SPA = $00 ;字符空格
6 k; J2 Y; c2 D3 a5 sCHAR_LIN = $AE ;字符'-'
' a! q# F5 Q; lCHAR_O = $9E ;字符'o') g8 F6 w6 Y. {+ B$ r$ f' ^
NUM_1 = $81 ;数字'1'
( c/ m, ] g9 @& P$ w, c, PNUM_2 = $82 ;数字'2'+ w# U6 a5 S) k3 U* [+ a5 r4 G
NUM_3 = $83 ;数字'3'
$ H3 Y: _& z+ H# oNUM_4 = $84 ;数字'4'
2 S/ ^7 y; ~ Z' o$ O0 K8 NNUM_5 = $85 ;数字'5'
7 d( g6 l x5 SNUM_6 = $86 ;数字'6'
* H- E F+ [9 |1 eNUM_7 = $87 ;数字'7'
4 f: r, y9 k8 ^# BNUM_8 = $88 ;数字'8'4 t* X. X& _1 }/ n
NUM_9 = $89 ;数字'9'' \2 \0 d( T3 @$ H
NUM_0 = $80 ;数字'0'! i4 _& T) d3 w6 p2 G
* l; P% S0 \: ~ .ORG $F82A
/ H# s1 F" e5 p+ T1 ?3 S JSR $E700
w; ]6 h7 O' B( z J# ]
9 ], t3 a9 n" s$ d w- o0 Q
: c3 `& }- _, y \) p1 {% E2 F .ORG $E700" D# \$ e: F5 B. _6 V1 P
5 Z! X6 s |& j4 q. h$ N* p STY $4014 ;补上覆盖的精灵写入指令0 @% f2 N% V% a
PROTECT_DATA: ;数据保护
# N& |) p8 d6 f5 V PHA ;数据保护开始* }0 v% F0 M& A1 x+ q: H) p
TXA: j& J1 S& U/ \& K+ z5 M
PHA/ d8 d* M* S6 T
TYA+ l K6 \ B* R: A
PHA ;数据保护结束' y8 u. z) W1 E8 T: {) g' T- [& ~. Q
LDA TITLE_A: x& c- i3 J! {9 Y
CMP #TITLE_A_ON ;比较是否为标题画面
) n: g, p/ j8 H3 T4 @* p" m. l BNE RET
8 q+ v0 B0 c5 W7 o% h6 N) ] LDA TITLE_B2 T2 k4 S7 t0 I6 h8 T$ ?: I# K2 L7 p
CMP #TITLE_B_ON ;比较是否为标题画面9 \5 N7 q2 u: k- |: W% w+ v* g* e
BEQ PPU_STAGE3 M I, U) d; t* T, K/ i
RET: ;恢复数据- k2 K1 ~2 T" |8 T, k& A
PLA ;恢复数据开始
2 g. u' W; t. q% S. n( G! ` TAY4 p+ N0 b u% q8 |9 b
PLA
* ?% m* f/ ~ f. {/ ?, S6 Z TAX' R9 f. n4 t2 b& u+ x
PLA ;恢复数据结束
8 m) j. c/ I) b RTS ;返回+ q! l1 G) {: H0 o
PPU_STAGE: ;字符STAGE写入程序& \+ o$ o/ b2 A {
LDA #PPU_ADDR_H 6 `3 \* x! {. I
STA $2006 ;设置PPU字符写入高位地址/ Y# D* e) }- a% Q/ A
LDA #PPU_ADDR_L
1 Z" I3 N# R4 c1 p0 G, y! J STA $2006 ;设置PPU字符写入低位地址
# U' S! h1 ?% J& W+ U+ x LDX #$00
4 M; o5 @) ?7 |' e# VPPU_STAGE_WROTE: ;写入STAGE字模
- ]5 w) q0 k$ L) F$ E: O: c2 F6 n LDA STAGE_DATA,X2 n6 k, \( c1 W6 g t! w( U& E
CMP #PPU_END ;判断是否写入结束7 K& q5 v* W$ w7 Y D- |- |. z
BEQ STAGE_CMP8 W* h8 O. L0 f! M- y
STA $20074 d8 c; T0 p* ^8 }" s
INX" |" s. D; C* u9 S' Z; A
BCC PPU_STAGE_WROTE
- b/ n* E9 |2 c2 @! X# M+ WSTAGE_CMP: ;选关操作7 L, G1 d* Q/ F6 V; x- U9 D: ?) t
LDA STAGE_TEMP
2 O3 ^( [% ?& _. { CMP #$FF ;关卡数据初始化条件判断) ?. D7 C3 @5 }/ ~3 b. K
BNE KEY_B
; p' r+ t2 o$ J3 N) R7 F( }- b, ~ LDA #$00: P J0 i+ {; A5 W& Y
STA STAGE_TEMP ;关卡数据初始化- |6 m) J! W' U0 F# z# c6 B
KEY_B: ;关卡减少
a- V( Q" n3 i0 x- b/ x" }. P LDA KEY_ADDR
1 R9 l3 P9 o! y0 o9 t; v" A- m3 j AND #BUTTON_DEC ;按键B或左减关8 M: P+ d& g( v" [, P
BEQ KEY_A
$ N9 X4 R& x- O* M LDA #$FF
( ?5 A* D/ k% z STA TIME_LAY ;重设标题延时
9 }5 z4 P3 l) W3 I1 O$ _ LDA STAGE_TEMP
7 F/ R1 e7 T; A+ [ CMP #$00 ;关卡比较
& [. q! s. ]. U% d* i BEQ KEY_A
8 G' k' e. v2 _. E* O DEC STAGE_TEMP ;减关8 j% ~8 g0 c* S5 j! o, W/ P6 N
JSR MUSIC ;按键音效
( f! ^& k) r& ~" u0 [' [KEY_A: ;关卡增加: D6 C& e6 N: W& s# T* n
LDA KEY_ADDR
p/ V! P( u3 l0 L4 z/ m1 w! ]; t, C AND #BUTTON_INC ;按键A或右加关4 R/ |, K. W4 P/ ?
BEQ PPU_NUM_WRITE
9 {/ C( ?# t" n$ o2 A7 r LDA #$FF* r4 h9 |. `- [" o' Z, ~
STA TIME_LAY ;重设标题延时
, P+ u9 Q) S! T5 _/ `. g: a; a LDA STAGE_TEMP
y0 `" v$ z7 Y# c CMP #STAGE_MAX ;关卡比较
! H! ^* A: H% X4 q7 T4 S* H7 W BEQ PPU_NUM_WRITE
! O$ F# @1 e5 B' [. N4 d2 L INC STAGE_TEMP ;加关
0 q3 d8 o- O% Y8 p8 \1 o+ Y JSR MUSIC ;按键音效* p- C! p" v9 r: a+ r# [! o
PPU_NUM_WRITE: ;关卡数字写入地址5 Y( K$ S- l: A! [% q6 M- d. @5 P
LDA #PPU_ADDR_H, z* J8 ^. t6 _# P0 ?+ _4 W7 d3 M7 q
STA $2006 ;设置PPU数字写入高位地址8 n7 J' v' n% I- ^0 h3 P- G# @
LDA #PPU_ADDR_L
! q" g, ]5 m3 s0 B, Y$ K CLC( |+ {; ^! S4 p2 F: x5 c* f9 E
ADC #NUMBER_A" q8 k$ q# Z; ?1 c8 T O0 V6 t
STA $2006 ;设置PPU字符写入低位地址/ F4 V" i* A2 b' X5 m- z% @2 b
LDA STAGE_TEMP- s. o; ?% ?6 |$ a; ^
TAX
& [' G T( [" [; c LDA STAGE_D1,X ;写入数字" b" t# E/ j d
STA $2007
2 O7 r( r3 A+ Z4 ~* f* z/ X LDA #PPU_ADDR_H" S+ Q& ^3 Y- A9 ?; ]+ R6 ^6 Z
STA $2006 ;设置PPU数字写入高位地址5 _# @* a3 L' E; s7 L0 Z
LDA #PPU_ADDR_L4 \1 | I6 z1 y, i
CLC" z( ?% q7 c# v8 Y; v9 u( j
ADC #NUMBER_B. u3 L( [' X% @1 o
STA $2006 ;设置PPU字符写入低位地址: C, k0 T8 J9 ^; A
LDA STAGE_TEMP- K% q# Y9 z* ?# |
TAX
& f0 u& i2 v" n LDA STAGE_D2,X ;写入数字1 O4 w( C, O8 P1 C& }
STA $2007+ b% N' w/ k% g d/ {2 C2 t
STAHE_WRITE:# U3 |- z$ c- f
LDA STAGE_TEMP
. M" Z+ f# h0 i+ i1 K5 f STA $2D ;初始关卡写入
3 p% }4 Q! { {6 }, T1 X4 u' FPPU_RTS: ;恢复数据; @" W4 B, g2 R- S$ s, S$ A1 k
PLA" Q- ~- W5 { M
TAY4 \+ f; T. ]) T6 d
PLA& H$ C# s, r2 }
TAX
s. u h3 O. e# P2 \( f7 P PLA7 e8 I; z( D% f- o3 {
RTS
) D! f7 A7 _- R- l
. j7 s: \1 x2 c0 |8 o0 v- sSTAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据
* b* s! B# N& j/ Q9 a1 b .BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END& Y0 b, w$ J9 V% J! [
, W, U5 t6 i5 `, j% H9 p9 E! n
STAGE_D1: ;关卡数字
& L' ^/ b% o$ o& 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
6 S( z. z' ?( `$ ]7 y+ `
0 e; ~" N4 z6 r4 [2 ~! \8 ySTAGE_D2: ;场景数字$ K& g; }9 S+ p9 C& H% m5 ]
.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
8 E; `, n. E! |! t& N. z
& N( d' u9 n# G! {6 n - Y, F+ j; f d. E# q
MUSIC: ;按键音效% q* q- m% e' c0 [8 A5 S/ p$ q1 _
LDA #$3B ;音乐号
6 T( w& U( q1 h JSR $919E ;系统音乐调用- s$ F0 K7 [0 Q" x1 [4 Z2 \" A
RTS |
|