|
;[FC][忍者神龟3代标题选关程序]6 N7 u8 f. v; p8 m+ a) w& I7 I
;作者:FlameCyclone 2017.4.1: F0 _8 q5 ?. j c
1 U5 \: d& O, C5 | Z% J' W
* C; I) O- B* t
;配置数据
6 s( {' B. N! X7 u3 UKEY_ADDR = $F8 ;按键地址( D/ o( t6 ^( q
STAGE_TEMP = $6010 ;关卡临时地址
1 |. x: q" M7 ~* U! N& HSTAGE_MAX = $0E ;最大关卡数
1 A" k% Q: Y- |4 C) n; cTITLE_A = $20 ;标题条件A5 i# g5 `8 w5 b3 c/ ~
TITLE_A_ON = $02 ;标题条件A有效状态判定
9 m _9 { G$ W6 v4 ITITLE_B = $21 ;标题条件B' B& r+ f0 _( s' k* ?; q+ j
TITLE_B_ON = $03 ;标题条件B有效状态判定3 u+ @' R. v- B% x
PPU_END = $FF ;PPU结束符
) w' l4 b- @0 z/ U( b& Y* S- q. HTIME_LAY = $4A ;标题显示延时地址
, j" c+ U! E, U; D4 qBUTTON_DEC = $42 ;关卡减少按键
- L q. N3 @* c/ F# ?1 d2 m6 KBUTTON_INC = $81 ;关卡增加按键* R. Q N% x1 t. |% N- t
NUMBER_A = $06 ;数字A距离STAGE偏移量
4 L. u$ z2 n5 h+ \NUMBER_B = $08 ;数字B距离STAGE偏移量
+ \0 i& B# i- [. ?( o3 W: BPPU_ADDR_H = $23 ;STAGE写入地址高位, O& c9 `! _, {- S" P4 C+ H$ A
PPU_ADDR_L = $8C ;STAGE写入地址低位
! p ?) h) `3 ~CHAR_S = $A2 ;字符'S'
. Y3 d n t$ ~CHAR_T = $A3 ;字符'T'
5 h. ^( [6 K: ^/ n$ q& [CHAR_A = $90 ;字符'A'
; N/ W3 n0 G5 X1 \- y7 m" x4 ICHAR_G = $96 ;字符'G'
4 }9 k. i$ n3 D1 u1 T" ICHAR_E = $94 ;字符'E'3 N- `4 V% C. l9 g4 {
CHAR_SPA = $00 ;字符空格
$ ~6 H' Q( } _CHAR_LIN = $AE ;字符'-'
4 b: T* x; s9 K/ K) jCHAR_O = $9E ;字符'o'! j3 d" e* C9 }: `; F# v) h Y0 H
NUM_1 = $81 ;数字'1'4 q1 e) q* D3 u5 y; J, S- C0 v
NUM_2 = $82 ;数字'2'8 z" f$ t$ n) d z# @
NUM_3 = $83 ;数字'3'
% S4 a$ `5 P7 e& f6 U4 VNUM_4 = $84 ;数字'4'" E$ k n% W g6 M5 `& |
NUM_5 = $85 ;数字'5'
5 P) n7 K: C! H& y7 q/ [NUM_6 = $86 ;数字'6'
2 S1 P' L9 }! W; c5 u0 _+ DNUM_7 = $87 ;数字'7'
- C" i& V, j$ b/ P! C! NNUM_8 = $88 ;数字'8'0 L D9 M" M( j0 _
NUM_9 = $89 ;数字'9'
8 F! D/ f, f4 z8 ?: j0 `' Z) d i, nNUM_0 = $80 ;数字'0'2 _0 P/ l9 I# K! L
# } B/ w$ _: H" A
.ORG $F82A
& Y) b' e# [, @$ Q- S5 o1 n- \ JSR $E700
6 O5 r) Q8 j. s7 H ( o2 x$ X% A9 C) n( g/ l
" B& {+ M# V: p7 s; l$ y G" G1 P3 s, y .ORG $E700
2 ^, `1 f9 v2 h6 c8 m / v4 t1 U1 G9 k
STY $4014 ;补上覆盖的精灵写入指令
0 M# `/ Q, V5 vPROTECT_DATA: ;数据保护
3 ^% W- C) P& L6 E' {: l' b! y PHA ;数据保护开始
! `4 Z. m- E5 U4 J) }% L TXA
3 f: d. Q- H1 q2 I8 D2 ]# g: w) o8 E+ T PHA1 j$ Y- |9 [% f
TYA* e {/ G& Q! l4 H6 M" r' _7 d
PHA ;数据保护结束' C5 c) z" v, [% ~# b- O; Z
LDA TITLE_A
6 P, O) d# ?7 f' X4 R' c1 A CMP #TITLE_A_ON ;比较是否为标题画面
7 t+ z( d7 M3 O/ R/ m BNE RET
3 C. _4 V* o1 N5 ~& w6 m% W0 d9 u LDA TITLE_B: m( S* |* b H% D" E$ z- Z! R% Q
CMP #TITLE_B_ON ;比较是否为标题画面
' k# u' U/ a( h, P8 v! | BEQ PPU_STAGE% B* {& A6 ~; U0 j! y
RET: ;恢复数据
1 H& T- |" u6 f# S8 X3 w) ] PLA ;恢复数据开始 e* N7 s5 c+ @9 f# z( F! y
TAY
& l" v4 A! P4 X# Y% R( o, E3 g PLA
' Z: Y3 C0 J( x+ w3 B TAX
6 V$ B( T6 V; `0 r4 F9 r" X& ]) p PLA ;恢复数据结束- l3 v \! x* e/ h, d9 {0 ?' y. j
RTS ;返回/ w' H4 R; E: B' V% Z. o$ k
PPU_STAGE: ;字符STAGE写入程序
& H* Y U' v: [+ a LDA #PPU_ADDR_H
# E# o4 f( b; i, J6 o- t STA $2006 ;设置PPU字符写入高位地址. [, [1 O; s/ M, F# I$ a$ w4 V
LDA #PPU_ADDR_L0 p3 W! |# }+ _: `9 T3 Q
STA $2006 ;设置PPU字符写入低位地址
1 l& U! Z% ]! x3 \- D" N LDX #$00
3 ^8 A b C0 R9 Q5 ^* x% J( UPPU_STAGE_WROTE: ;写入STAGE字模
5 B( n/ j/ X: q% W) g4 {: { LDA STAGE_DATA,X
) x/ g% @9 L5 }* w/ e CMP #PPU_END ;判断是否写入结束
/ V& b2 \) T' n4 j" f2 [: Z7 f" c2 ^- { BEQ STAGE_CMP
6 B1 G! b( L9 k) Q STA $2007$ F" J$ H6 m. `# q+ {4 @
INX+ B' M$ r9 Y* t4 ?" d% q. n+ g p$ E/ C* [
BCC PPU_STAGE_WROTE
0 G. l/ e% z4 i# @1 u; I' H' C7 USTAGE_CMP: ;选关操作
3 L5 I5 C% J1 k, Q2 l2 @ LDA STAGE_TEMP
8 z0 G3 `) E: V! z CMP #$FF ;关卡数据初始化条件判断
5 P3 M2 v7 ~9 ~9 Q( V* ~& f/ V- a BNE KEY_B: o1 O# t5 @. @6 ?
LDA #$00
5 B5 ]# p3 g# |- }6 ]5 }8 m STA STAGE_TEMP ;关卡数据初始化4 t! I) d8 X J6 u( r7 T
KEY_B: ;关卡减少
0 k4 ?% b3 S4 n) T9 u6 c LDA KEY_ADDR
% U- s, j! c1 K. W. {4 N; r AND #BUTTON_DEC ;按键B或左减关
4 l* t1 o' S2 p; g0 N BEQ KEY_A
- r7 `5 |4 V \6 h/ S. {8 x LDA #$FF
$ z1 ]2 A. g, ]& R' x. s STA TIME_LAY ;重设标题延时6 ^1 ?, b7 V& l+ f f5 O
LDA STAGE_TEMP" w# @$ n8 Y, R' }5 G# q( @
CMP #$00 ;关卡比较
6 d% }0 Y' u, \, _' t# i BEQ KEY_A
" A* `& p9 b' {/ a1 e( Q! a" v; t DEC STAGE_TEMP ;减关# Z- [1 P( O/ u4 H
JSR MUSIC ;按键音效
9 r2 O7 O4 T: I1 p/ `; J( KKEY_A: ;关卡增加
* H$ }5 v% S( F5 F1 Z/ [9 v LDA KEY_ADDR
T% K" t7 I# F% C" C8 m4 b AND #BUTTON_INC ;按键A或右加关( R( M/ H. a( h! ^; l& t, e
BEQ PPU_NUM_WRITE3 b: @( t) o, {
LDA #$FF6 m6 K/ c! ?) g% M
STA TIME_LAY ;重设标题延时: [4 m+ M7 K) I* |2 ]3 s7 O
LDA STAGE_TEMP' _" }8 u& ~3 Q8 [% q: V' g
CMP #STAGE_MAX ;关卡比较" [8 S# c Q! @& U0 a
BEQ PPU_NUM_WRITE
: X2 [# z8 o% s2 a INC STAGE_TEMP ;加关
/ o2 c8 C" u8 I7 K: V6 u- i& ]: Q+ X JSR MUSIC ;按键音效
2 Z9 n# F# F$ v( k/ i: fPPU_NUM_WRITE: ;关卡数字写入地址
! O! q1 X$ j& n+ P LDA #PPU_ADDR_H& v5 O+ `+ @ x9 H( n) V
STA $2006 ;设置PPU数字写入高位地址# O2 N, y# P' ?( \
LDA #PPU_ADDR_L& E$ c0 E2 ~! T: g3 h- {+ Z9 B
CLC
8 }$ ^( P: o" H* {+ Z h% ~7 q ADC #NUMBER_A3 `# l2 N* y) }0 O% d7 q: t( T
STA $2006 ;设置PPU字符写入低位地址
% J. c f* a) n9 P LDA STAGE_TEMP, a% x+ w! \' X0 x+ }
TAX4 p2 h% ^% L0 f
LDA STAGE_D1,X ;写入数字3 R, H4 k2 p7 _
STA $2007; q7 m+ f% c1 }+ H# r4 f
LDA #PPU_ADDR_H
+ ]4 J7 Z. m; Q STA $2006 ;设置PPU数字写入高位地址9 c; `- L8 K% R* g& {
LDA #PPU_ADDR_L% O4 ~. M; K3 I
CLC1 }7 m7 ^6 A& q8 w. i) {1 V
ADC #NUMBER_B
2 R9 Q- d. e5 d4 T+ L2 |# ? STA $2006 ;设置PPU字符写入低位地址
1 e& |6 E6 i# u6 s LDA STAGE_TEMP
* V! _4 X. J7 \; r+ J6 ?/ c- O1 o! i TAX
9 d5 R2 c2 E) ^# ^( H6 k3 O" X$ d( B LDA STAGE_D2,X ;写入数字6 Y+ @& Z3 ]; q) T U% O
STA $2007
$ D0 W6 k# w) p. L# RSTAHE_WRITE:" Q: K# O# G- u! N
LDA STAGE_TEMP( {6 r! X9 X5 _" i
STA $2D ;初始关卡写入
7 t- r" E2 l* a, lPPU_RTS: ;恢复数据
4 I$ o5 N+ Y& O4 P* Z, J b/ M PLA9 U/ b3 L; N3 ^1 O2 @- I$ @
TAY! y' V# j n: ]' P" q
PLA0 i% B* G7 q' d( l; W
TAX5 q5 ]$ C+ a; V; z8 m
PLA
9 M; X, ?' ^& `8 C# Q* h RTS# ]% y- E6 Z! V$ G
: v; r# D2 m9 A3 w+ GSTAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据8 @2 @. m. y- `+ w: I+ \ {$ Z
.BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END+ t6 z2 i2 Z# i! L( `3 t( T
- ]! ?' m5 J; B. X3 z/ c! s( dSTAGE_D1: ;关卡数字
( X' ` V! C( f$ 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
4 r4 c& ^0 a2 f; P
" ~. O- H" C, f+ {4 {4 q, [STAGE_D2: ;场景数字
4 T3 N- ?" ?/ D4 N .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- l4 ?# M+ i4 B6 k
6 J* @, q X% }2 Q+ u 7 t5 q& j- B5 L5 v B
MUSIC: ;按键音效, P! o( Q2 g; ~ z5 F# M1 S2 Q
LDA #$3B ;音乐号6 p6 w* u7 n4 E% @6 Z
JSR $919E ;系统音乐调用- K# {! i/ k; O, o6 s
RTS |
|