|
|
;[FC][忍者神龟3代标题选关程序]
9 ]/ b; W5 t# ^. d) i5 X; X;作者:FlameCyclone 2017.4.1
) O4 W4 _7 ~3 M% c X# W) s* E( ^- c/ a' \) e) Y; B @
3 y2 K' U/ C% Q- I% {$ Q9 g5 U' I
;配置数据1 E% L+ D( H# I( ?
KEY_ADDR = $F8 ;按键地址" l, H& w( H/ Q4 b% E6 `& i
STAGE_TEMP = $6010 ;关卡临时地址5 n+ Y: G" [ s: q* n- m1 Z
STAGE_MAX = $0E ;最大关卡数7 Z7 R' `) P- J+ m/ p1 ^# h# Y
TITLE_A = $20 ;标题条件A1 [' T) Q- w1 O3 R( I* Z, r9 N
TITLE_A_ON = $02 ;标题条件A有效状态判定
6 Q% U. n$ R* `8 V I( QTITLE_B = $21 ;标题条件B, t, j& \0 ~$ n6 K3 m8 `- {
TITLE_B_ON = $03 ;标题条件B有效状态判定' o! G+ b/ l6 j, ?* h
PPU_END = $FF ;PPU结束符! `8 K5 ~' H, X# X7 e
TIME_LAY = $4A ;标题显示延时地址
9 O$ [, u7 U( b4 NBUTTON_DEC = $42 ;关卡减少按键: _, A4 c' D8 J7 t
BUTTON_INC = $81 ;关卡增加按键& J; F! i8 S" a) H& Y; j
NUMBER_A = $06 ;数字A距离STAGE偏移量+ `! i- G& u0 M. F/ E# v% P1 ^ H
NUMBER_B = $08 ;数字B距离STAGE偏移量
9 N! v. N# f8 [' i) h0 T! c- _PPU_ADDR_H = $23 ;STAGE写入地址高位
* o$ @3 z* T' ]3 ZPPU_ADDR_L = $8C ;STAGE写入地址低位
3 G# [. J* Z5 s9 g& j$ tCHAR_S = $A2 ;字符'S'
3 I6 l. y2 b9 L/ B: ~2 f7 fCHAR_T = $A3 ;字符'T'3 H# q% ^, p3 n+ M
CHAR_A = $90 ;字符'A'% a: w8 }2 ~4 U) [8 z
CHAR_G = $96 ;字符'G'2 r" @) S! w L* l" v3 J3 o" N
CHAR_E = $94 ;字符'E'
6 H) N9 j, R* |9 O$ X/ V/ L4 pCHAR_SPA = $00 ;字符空格
6 G+ j3 x: E5 D' L1 eCHAR_LIN = $AE ;字符'-'" H, }8 J2 |3 Y
CHAR_O = $9E ;字符'o'1 j3 K! W& |. b, _! q8 F* d
NUM_1 = $81 ;数字'1'6 r; t+ i+ E8 N: g, D, s( `
NUM_2 = $82 ;数字'2'! z3 g, x( Y, j; b" h
NUM_3 = $83 ;数字'3'
% N6 U& u! ^+ C q7 [. oNUM_4 = $84 ;数字'4'
0 A7 U3 L* X, F2 t! yNUM_5 = $85 ;数字'5'9 @" _4 K- d2 x: @( y3 S
NUM_6 = $86 ;数字'6'
; J" v' L+ c5 c5 {* |5 Y- ], gNUM_7 = $87 ;数字'7'
0 E8 B. X# X( I% q9 T1 oNUM_8 = $88 ;数字'8'
l& t, p* Z+ U- t1 b- w; LNUM_9 = $89 ;数字'9'
; Z. v4 j3 j/ \8 n# \/ e7 `NUM_0 = $80 ;数字'0'% y! Y1 Z/ I# j- }( g
+ |) X% x3 }5 b" j6 z; @
.ORG $F82A& U! F4 C! X8 @! o# f
JSR $E700
5 O& ]; n$ y: o8 ~* E# A ( j, P* ~* z/ h
7 q' [: F8 h, C4 k .ORG $E7002 q6 W" s: c% \+ {) k6 ~
; I/ I; U/ ^( P STY $4014 ;补上覆盖的精灵写入指令7 z) z4 _4 ]! K/ b8 ~& U0 e" Q4 P9 N
PROTECT_DATA: ;数据保护/ T) A& C5 e" |3 f( t6 _
PHA ;数据保护开始4 y- I: _* s4 s. X
TXA
+ j8 l h, x4 g# A$ D PHA$ {, G# Q' I4 ?, Z0 \
TYA' z0 ?! k, U# H# _. ?! K
PHA ;数据保护结束
- Q% W' n- Z P+ @1 c; c* f LDA TITLE_A
4 }: l% R3 V2 G. j/ R8 N* [ CMP #TITLE_A_ON ;比较是否为标题画面2 {8 s9 \5 E/ K9 F8 E' ]8 S5 x! ]
BNE RET
' ?. T/ L* }0 T6 u/ t& E, L8 ^$ U LDA TITLE_B
r, V! t% ^& j CMP #TITLE_B_ON ;比较是否为标题画面6 x( `; `* M8 }: [
BEQ PPU_STAGE ~" {1 n. p6 k2 i8 s# w
RET: ;恢复数据9 r/ P E" P' y. e6 q2 W: G
PLA ;恢复数据开始4 J1 m1 K; c. t! j4 W& H- t1 F/ x+ Q
TAY: F2 w; q7 w# Q) ]
PLA
4 N, N3 |3 e4 h TAX$ A5 ?$ z6 ?# C9 }' }, h M
PLA ;恢复数据结束
+ Y4 v K1 u8 V# F, j" {0 p T RTS ;返回
8 N+ H2 p x# b( B U+ m+ C# YPPU_STAGE: ;字符STAGE写入程序
" q/ g" U7 }/ W LDA #PPU_ADDR_H
+ I# N7 M+ u( P# y* C STA $2006 ;设置PPU字符写入高位地址9 U' I6 ~+ L& d6 _4 d/ l$ }
LDA #PPU_ADDR_L
6 r# q1 I: r" o* J$ g STA $2006 ;设置PPU字符写入低位地址, v& Y/ E2 L* u9 k* q
LDX #$00
9 A/ s0 s" M9 i% a' wPPU_STAGE_WROTE: ;写入STAGE字模+ W. b& X' B4 _; w p7 ?
LDA STAGE_DATA,X
/ d' B# B% @( ]4 _$ s: ?# `2 k- C CMP #PPU_END ;判断是否写入结束' I" n3 D. L* }1 r
BEQ STAGE_CMP
9 k8 J: a9 R7 d- X; H STA $2007& Q3 s8 k9 w( c; m. n. `
INX
7 k* g2 }/ a3 @1 b* u6 z BCC PPU_STAGE_WROTE3 Y1 _; H! L. |
STAGE_CMP: ;选关操作
2 k5 K+ d; L7 @4 Q4 \, [ LDA STAGE_TEMP/ }7 F: d6 s: Z+ W, ~1 C8 g8 P
CMP #$FF ;关卡数据初始化条件判断1 g/ d. o( W: }* ~$ E4 P
BNE KEY_B# g+ L7 _) [) d* Y/ I$ j& X7 X b
LDA #$005 X7 h% k% r& I( @* `
STA STAGE_TEMP ;关卡数据初始化) v3 b7 H" l4 T1 s/ @# X
KEY_B: ;关卡减少
5 V" n1 I( @/ m5 [; r- b9 b LDA KEY_ADDR# [7 C% ^1 o4 a% K# K
AND #BUTTON_DEC ;按键B或左减关
1 ~* \, [) b3 ~' Z7 G) u4 |/ L BEQ KEY_A
4 P& S& i6 r; d LDA #$FF; J4 T8 z4 y K2 s$ W
STA TIME_LAY ;重设标题延时
, g# N5 o- f! j! r, f( z LDA STAGE_TEMP! M9 j) ^6 v% h; @, |
CMP #$00 ;关卡比较% l1 c) H1 l4 q4 w [1 O
BEQ KEY_A) {6 y. m0 Q; t$ Y
DEC STAGE_TEMP ;减关
) \# R% [$ e0 z+ {- M2 K% c JSR MUSIC ;按键音效( E( b$ _: S7 \2 U) L! T2 M% |
KEY_A: ;关卡增加8 b3 N+ s# L9 Y, f7 z2 X
LDA KEY_ADDR m% c. W+ G6 K, j0 w
AND #BUTTON_INC ;按键A或右加关- G! w8 m5 x' b9 c
BEQ PPU_NUM_WRITE- }' O% @1 V* Q+ O Q. P: e1 {
LDA #$FF& m* q& ^/ E( h2 K
STA TIME_LAY ;重设标题延时$ o4 ~( v7 J) J% I4 i
LDA STAGE_TEMP3 m v; K3 a/ B( D1 Y: g0 f* }) Y
CMP #STAGE_MAX ;关卡比较
% X7 f, W& M0 P& W8 ?/ |% X BEQ PPU_NUM_WRITE0 a5 l- s$ z% d; _
INC STAGE_TEMP ;加关4 ^: d6 H8 l9 r: ^' S$ J* k- p
JSR MUSIC ;按键音效1 O' y4 w! s+ N# W: @% l$ [' ]; J
PPU_NUM_WRITE: ;关卡数字写入地址
1 G7 E% O+ v2 @% q2 x& D LDA #PPU_ADDR_H
/ @2 b1 X& o$ z3 I STA $2006 ;设置PPU数字写入高位地址4 }( k' L5 p! n. e& @
LDA #PPU_ADDR_L8 p6 l( p7 i1 M) m3 Q8 _
CLC
+ r4 l, _) k" `- X ADC #NUMBER_A5 k# I6 f; x; [1 _6 G
STA $2006 ;设置PPU字符写入低位地址
4 h* Q6 S6 c3 {2 l0 X LDA STAGE_TEMP" [4 h& Y. |8 L i( [6 @) Z2 @
TAX2 I0 V6 E6 z& G* e
LDA STAGE_D1,X ;写入数字
; v7 [- r. @+ @7 H& Q STA $20070 a0 [2 ]6 ]8 U7 b* D& U& {6 a
LDA #PPU_ADDR_H' F y" S" a3 K1 f- R; b* U
STA $2006 ;设置PPU数字写入高位地址
$ S! X" i2 e$ T& r* f) ?0 E LDA #PPU_ADDR_L
" B3 x/ N! y8 X5 J1 R( K CLC
8 H) w4 H2 W! r& `3 d ADC #NUMBER_B
- @9 b) p( m$ E' [ STA $2006 ;设置PPU字符写入低位地址
- x. v6 d7 ?, B1 Y: b: n8 v LDA STAGE_TEMP
! d8 e( P: s& o) ]) ~ TAX/ v9 ~8 I% p1 G3 ~
LDA STAGE_D2,X ;写入数字
8 h4 |5 ]5 E9 Y% b; w STA $2007
: V" E; A3 M3 ]STAHE_WRITE:
5 u) k" {7 g9 A* o9 p LDA STAGE_TEMP
- x& T9 @6 @! x1 A6 | STA $2D ;初始关卡写入( F2 G( x+ Q; f
PPU_RTS: ;恢复数据
) o1 s6 Z2 ^8 K6 b, P PLA& x' j2 u6 u% b! S% W
TAY
, N0 W7 N- V7 | PLA6 Q, i1 O( o+ ^! J7 |+ X( F
TAX; ?) V: I5 l2 y8 O/ P2 e7 x
PLA
0 f: |7 l, @* N' d; m9 i6 S: ], { RTS
c: j5 V9 n5 A5 G 6 L3 J9 o+ o5 `! H1 ]" o9 X1 s
STAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据
; j# y& A; p! ^( R, @: y .BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END9 M2 m: Y9 r2 {% q0 u% x
5 @4 L" v: W3 M0 `, }5 [! DSTAGE_D1: ;关卡数字! h$ `" _- U( v4 [8 x
.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* o; L6 _* A5 k3 g5 Y$ z
$ u, S( g+ | ^: }1 q* nSTAGE_D2: ;场景数字
, K O% e* H9 K* v .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
( I1 U9 `, `% n& M% ?+ v
9 i5 d3 H" Z% I! x
6 h. s3 a1 d# `. ?( v- SMUSIC: ;按键音效: v0 D2 T: A5 C) }, |
LDA #$3B ;音乐号
2 A5 D) M: S, { JSR $919E ;系统音乐调用
0 b n) V2 k6 c7 O9 j1 P8 I- b- ~ RTS |
|