|
|
;[FC][忍者神龟3代标题选关程序]0 V9 f/ _. D, a; Z, o) W7 k& n
;作者:FlameCyclone 2017.4.1
3 \+ f$ |) g% R* x0 F
/ F6 H- Y" ~- s/ J
z* ]# @* c! G;配置数据! K, Y1 b2 [6 W6 d
KEY_ADDR = $F8 ;按键地址, ~( j7 a( [2 X+ D
STAGE_TEMP = $6010 ;关卡临时地址
" @: f8 n) i: ]. {0 q: @ vSTAGE_MAX = $0E ;最大关卡数
) h' N/ w. g! k* N0 i! y: g3 _TITLE_A = $20 ;标题条件A
/ Q8 f5 b% Q, F( STITLE_A_ON = $02 ;标题条件A有效状态判定
, c' ^5 x4 @0 k! H' t& GTITLE_B = $21 ;标题条件B
: Z& y- u; C6 m: a7 g! ` U/ e" dTITLE_B_ON = $03 ;标题条件B有效状态判定; G7 X4 ^' V6 m5 x$ d. g* A
PPU_END = $FF ;PPU结束符; \; q" L/ q- o1 L( R: \9 y. m
TIME_LAY = $4A ;标题显示延时地址2 w$ t( z, m& u3 J
BUTTON_DEC = $42 ;关卡减少按键2 k2 ]) ], s# T
BUTTON_INC = $81 ;关卡增加按键. s$ T- A1 c8 q& S9 P% A# P
NUMBER_A = $06 ;数字A距离STAGE偏移量) \3 _: j. l* j1 e/ V2 b8 R0 B
NUMBER_B = $08 ;数字B距离STAGE偏移量
5 t4 _: P7 Q/ G5 KPPU_ADDR_H = $23 ;STAGE写入地址高位
2 c+ V; I5 x+ C+ A: I, H* R, ?PPU_ADDR_L = $8C ;STAGE写入地址低位6 o2 z/ L! e1 x- _- s: V
CHAR_S = $A2 ;字符'S'( T% J& }$ h, x1 _, ]! ^, u6 {! m
CHAR_T = $A3 ;字符'T'
( W/ E; L0 i1 _CHAR_A = $90 ;字符'A'
; E/ f, |7 l$ w h: h' d) WCHAR_G = $96 ;字符'G'1 @! O) r& x# x5 W% Q& o: C
CHAR_E = $94 ;字符'E'
6 K! E5 i/ A! D* C# X4 ^! pCHAR_SPA = $00 ;字符空格6 Q7 P" ]( W" q/ Y7 i7 J4 k
CHAR_LIN = $AE ;字符'-'
0 K: f9 _* S9 d! }CHAR_O = $9E ;字符'o'
# i. a3 Y, o" a! @NUM_1 = $81 ;数字'1'
) `6 }4 \" K) t3 M9 U" A" nNUM_2 = $82 ;数字'2'
/ b1 N/ ~' Z. U0 A, W7 [2 wNUM_3 = $83 ;数字'3'7 N6 K+ ]$ d6 E( _9 [
NUM_4 = $84 ;数字'4') B- C. c1 J! E& j& c9 V
NUM_5 = $85 ;数字'5'
9 R2 y, X6 W& y8 `/ f9 d7 ]NUM_6 = $86 ;数字'6'
2 r% b2 [4 c6 |) UNUM_7 = $87 ;数字'7'
1 C& e0 M2 G4 `$ `: X5 E4 k/ V+ |( D) z: C# RNUM_8 = $88 ;数字'8'
) x( ]. P0 w1 K; gNUM_9 = $89 ;数字'9'8 Y2 ~* M. ]4 U6 e6 S
NUM_0 = $80 ;数字'0'3 m1 Z) b6 R3 c3 J% v
9 ~4 \8 o9 z; w3 W% u5 w
.ORG $F82A( Z+ S2 T- O% o7 z
JSR $E700
" M9 f, t4 W& J+ E7 U L
F( n, u9 b2 f) V' | % N: S2 a. F5 D8 d" w; x# f) E
.ORG $E700
. u$ ]' P% K7 d4 d7 t+ O0 u ' K5 ^( Z2 w5 ]* {* ]
STY $4014 ;补上覆盖的精灵写入指令/ X% Y5 J( R! y: e
PROTECT_DATA: ;数据保护
+ c4 I8 P) W# ^ PHA ;数据保护开始
" P9 a+ U. b& S, S$ v0 s1 H5 o h5 m TXA
4 Z9 _; k! |3 ^ E- ` PHA1 h* |7 @& [8 S6 a" S$ Q! t
TYA. R' F. x+ \! F- p
PHA ;数据保护结束; a7 ?/ e2 y/ g) R1 Q1 J
LDA TITLE_A
. i& W4 ]+ }* Q& t4 } CMP #TITLE_A_ON ;比较是否为标题画面
9 `. ?& y5 D) h5 i$ o) J! t5 f BNE RET
/ W- G# l6 Z5 t) P ]) u: G3 a/ x, g' e LDA TITLE_B
: w0 s" w; R+ T6 u0 O2 P( C: c CMP #TITLE_B_ON ;比较是否为标题画面
9 O6 F: w U+ D- @* U BEQ PPU_STAGE, A4 U: j3 V6 c
RET: ;恢复数据
" W3 Q" x' p: a, e3 M3 B PLA ;恢复数据开始3 U$ C! r7 n' r# B. u3 p
TAY
( x9 L2 C. z9 }5 D/ O1 P# a+ e PLA
6 G4 m$ c1 @" E y9 k% h TAX
, }/ x% J6 q# I X0 O( _ PLA ;恢复数据结束9 v3 D! I0 Z& `
RTS ;返回7 }" M9 F8 ~/ o* F0 @
PPU_STAGE: ;字符STAGE写入程序+ c2 I4 \; h$ y& {
LDA #PPU_ADDR_H
6 K6 F# p4 q) ^: |. l, n STA $2006 ;设置PPU字符写入高位地址2 ~0 |3 c( e' x: P( B$ n8 l
LDA #PPU_ADDR_L& X6 I1 d- ?0 y
STA $2006 ;设置PPU字符写入低位地址
: I6 P) H M- F- X1 O5 m- ~ LDX #$00% X& @9 t+ |+ d# e/ I0 Y2 X# P
PPU_STAGE_WROTE: ;写入STAGE字模) k- z, W2 t# t' f) |* M
LDA STAGE_DATA,X
u. x8 ~( x. f/ L0 o" q CMP #PPU_END ;判断是否写入结束
8 [# N V. @8 U BEQ STAGE_CMP
7 j8 t6 x" N% G0 u9 p# v STA $2007' _0 I0 S/ d0 d. l: l% ~" m, J* E
INX
, Q! m k& _! S7 G BCC PPU_STAGE_WROTE1 A7 C# ?3 g! Y$ s8 ^6 A: }
STAGE_CMP: ;选关操作; F( l" N# h4 u# ~6 u8 i
LDA STAGE_TEMP
. D' [+ l4 F& R7 X! O CMP #$FF ;关卡数据初始化条件判断
4 h; ?, ?4 v, P+ o# ~ BNE KEY_B
8 r9 k6 ?" _+ @4 B( m LDA #$00) s9 ^, x) _- S" ]# z
STA STAGE_TEMP ;关卡数据初始化
# Y2 B/ Q3 t J7 R( k8 GKEY_B: ;关卡减少
2 ~# o3 @$ z) u LDA KEY_ADDR
+ p& E. K5 k# v: @ Y( {+ i AND #BUTTON_DEC ;按键B或左减关# M. [* k7 \8 i; B. S
BEQ KEY_A
9 l8 W5 T0 n3 c- `' e LDA #$FF! P% g- ^" G8 Q/ }7 [0 k
STA TIME_LAY ;重设标题延时( g C5 T5 O. @$ Q1 X2 _* m
LDA STAGE_TEMP1 M" M- l3 D( O0 X3 k( G2 x
CMP #$00 ;关卡比较; d7 t) q) @9 B, E6 B7 e- S
BEQ KEY_A- |; L k0 D' Q" d" j1 c) T
DEC STAGE_TEMP ;减关
- ~# m/ L+ P' m5 \. T, c8 C JSR MUSIC ;按键音效0 A3 D R7 S3 ^% V% ]$ S: `+ ]
KEY_A: ;关卡增加
& }$ D1 K4 {1 Z7 a" n: |8 J/ M5 l LDA KEY_ADDR
5 @9 O6 L9 @' }: q# J AND #BUTTON_INC ;按键A或右加关
. r) v, U/ i I# E, l BEQ PPU_NUM_WRITE0 V P; u) h; @
LDA #$FF
" X" [: \$ N" u c7 i STA TIME_LAY ;重设标题延时
. R- w9 F3 n! }6 {9 v; g( u2 D LDA STAGE_TEMP+ x- I# r# o4 T' o- x& F
CMP #STAGE_MAX ;关卡比较
8 j5 M2 l5 b" Z- g BEQ PPU_NUM_WRITE6 D& {7 q) O( H3 [2 X
INC STAGE_TEMP ;加关' u( r8 r3 z% k9 H
JSR MUSIC ;按键音效( A7 I9 _' }( d2 H
PPU_NUM_WRITE: ;关卡数字写入地址
) a% c, }6 I% v LDA #PPU_ADDR_H. Y% N6 B0 T1 s
STA $2006 ;设置PPU数字写入高位地址
" L3 P/ h( H" h, u! ?& V LDA #PPU_ADDR_L4 F/ b& W8 B- T4 K6 e. b
CLC
$ u$ b2 h' Y9 ]+ g o& N: w ADC #NUMBER_A
+ e: |5 {, ^0 N$ S" Q3 Y8 T STA $2006 ;设置PPU字符写入低位地址/ B" @' z) O- I9 Y' D$ p
LDA STAGE_TEMP' f4 M- G2 O# Z/ P I: Q
TAX3 a8 J/ C& {9 d* T# [
LDA STAGE_D1,X ;写入数字
) Q0 ]7 z' m) Y STA $2007
8 o7 R, m5 J' } `* M. P LDA #PPU_ADDR_H" K4 E% K5 z7 T4 g! r0 X2 \9 S8 u
STA $2006 ;设置PPU数字写入高位地址
# ?+ H8 {1 `2 w LDA #PPU_ADDR_L
$ P% q, o7 K: s* z* S1 C/ g CLC1 E) s( U8 M. v' c* V. A5 U6 G
ADC #NUMBER_B
- |, O6 m5 g( z: \" O' S+ ? STA $2006 ;设置PPU字符写入低位地址
/ y2 \) `7 j$ d; v LDA STAGE_TEMP, ^$ B( P% j3 q! O" v
TAX
* M( v4 d; f) G2 V& x/ H LDA STAGE_D2,X ;写入数字. x" N2 F' I- @6 U
STA $20075 A5 P0 `- x2 H; Y( g: w7 B9 t: { T
STAHE_WRITE:
& Z$ ~, f& G' T2 n2 b% _ LDA STAGE_TEMP0 X) d% S. ^- I/ Y) ~9 R0 ]6 ^) p
STA $2D ;初始关卡写入
* ~& `% d. d4 c, B" e7 I" DPPU_RTS: ;恢复数据 O; k) S, P, {; f/ G/ b# C
PLA
w) `. J- {( d5 d0 H0 g1 i TAY
' R9 i+ G" u" r. W n# @ PLA
1 J4 R* Y+ N2 @ b TAX
; K: X }8 {+ {% B6 y, e6 q3 t$ P PLA, N3 a) M) R9 T9 u2 A6 h
RTS
; {2 m7 d! A$ Q: U 0 E8 S2 u$ ^6 A* t2 K* I
STAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据4 O- j. |+ j7 h: t; f2 O
.BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END
/ e; ~2 X) J8 e5 G, @) X8 m2 n7 o" d, e' T3 `% R
STAGE_D1: ;关卡数字
' W& `2 e* E$ g/ g. {* `% d .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% t) \9 u' K# O4 U5 g: U7 q
, } A% U( b5 j8 ]
STAGE_D2: ;场景数字
4 l) S5 z- z% g8 Y" 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. t/ ~* Z9 ~# J [
. B6 ~* c. x/ {" X
* C, B& z- I) Z; GMUSIC: ;按键音效
$ S4 s" t& v7 z. M5 ~; @ LDA #$3B ;音乐号
: ^/ {: {* X" x' j6 N( H JSR $919E ;系统音乐调用
) U" [$ A" C# c+ b7 V RTS |
|