[FC][忍者神龟3][END选关]
本帖最后由 yandagui 于 2017-4-2 13:23 编辑[忍者神龟3]
时间:2017.3.30
作者:FlameCyclone
内容:
1.关卡选择: 标题时,左或B减,右或A加;
2.全屏击杀: 暂停后,按A键切换;
3.一击必杀: 暂停后,按B键切换; .ORG $FEA0
ora_data:
.BYTE $08,$04,$02,$01,$80,$40,$20,$10
and_data:
.BYTE $F7,$FB,$FD,$FE,$7F,$BF,$DF,$EF
button = $F8
flag = $6000
pause = $0045
.ORG $F90D
JSR $FEC0
.ORG $FEC0
STA $54,X
STY $FA,X
PHA
TXA
PHA
TYA
PHA
JSR KEY_OPERATE
JSR INV
JSR LIFE
JSR BLOOD
PLA
TAY
PLA
TAX
PLA
RTS
KEY_OPERATE:
data_protect:
PHA
TXA
PHA
TYA
PHA
FLAG_CMP:
LDA $600F
CMP #$7F ;标志数据初始化条件判断
BEQ pause_cmp
LDA #$80
STA $A001 ;6000-7FFF写入启用
LDA #$00
STA $6000 ;数据初始化
STA $6001 ;数据初始化
LDA #$7F
STA $600F
pause_cmp:
LDA pause
CMP #$01
BEQ button_press
PLA
TAY
PLA
TAX
PLA
RTS
button_press:
ini_Y:
LDY #$00
button_cmp:
LDA button,X
CMP ora_data,Y
BNE count_Y_cmp
flag_cmp:
LDA flag,X
AND ora_data,Y
BNE flag_and
flag_ora:
LDA flag,X
ORA ora_data,Y
STA flag,X
BNE count_Y_cmp
flag_and:
LDA flag,X
AND and_data,Y
STA flag,X
count_Y_cmp:
INY
CPY #$08
BCC button_cmp
data_extract:
PLA
TAY
PLA
TAX
PLA
return:
RTS
INV: ;无敌
LDA $6000,X
AND #$08
BEQ INV_RTS
LDA #$05
STA $04FF,X
INV_RTS:
RTS
LIFE: ;生命
LDA $6000,X
AND #$04
BEQ LIFE_RTS
LDA #$09
STA $6A,X
LIFE_RTS:
RTS
BLOOD: ;血量
LDA $6000,X
AND #$01
BEQ BLOOD_RTS
LDA #$7F
STA $04F1,X
BLOOD_RTS:
RTS
.ORG $D29F
JSR $FF80
.ORG $FF80
KILLBOSS_BY_ONE ;BOSS一击必杀
STA $0628
PHA
LDA $6000
AND #$40
BEQ ADDRFF8E
PLA
CLC ;敌方死亡状态判定
RTS
ADDRFF8E:
PLA
RTS
.ORG $D151
JMP $FFA0
.ORG $FFA0
KILL_BY_ONE: ;杂兵一击必杀
STA $0621,X
LDA $6000
AND #$40
BEQ ADDRFFAD
JMP $D19A ;敌方死亡程序跳转
ADDRFFAD:
JMP $D154
.ORG $A7F6
JSR $FFB0
.ORG $FFB0 ;全屏攻击
PHA
LDA $6000
AND #$80
BNE ADDRFFBD
PLA
LDA $0015
SEC
RTS
ADDRFFBD:
PLA
JMP $A826
.ORG $AA6A
JMP $FFD0
.ORG $FFD0 ;敌兵动作忽略
PHA
LDA $6000
AND #$80
BEQ ADDRFFDC
PLA
JMP $AA72
ADDRFFDC:
PLA
LDA $0629,X
JMP $AA6D
;[忍者神龟3代标题选关程序]
;作者:FlameCyclone 2017.4.1
;配置数据
KEY_ADDR = $F8 ;按键地址
STAGE_TEMP = $6010 ;关卡临时地址
STAGE_MAX = $0E ;最大关卡数
TITLE_A = $20 ;标题条件A
TITLE_A_ON = $02 ;标题条件A有效状态判定
TITLE_B = $21 ;标题条件B
TITLE_B_ON = $03 ;标题条件B有效状态判定
PPU_END = $FF ;PPU结束符
TIME_LAY = $4A ;标题显示延时地址
BUTTON_DEC = $42 ;关卡减少按键
BUTTON_INC = $81 ;关卡增加按键
NUMBER_A = $06 ;数字A距离STAGE偏移量
NUMBER_B = $08 ;数字B距离STAGE偏移量
PPU_ADDR_H = $23 ;STAGE写入地址高位
PPU_ADDR_L = $8C ;STAGE写入地址低位
CHAR_S = $A2 ;字符'S'
CHAR_T = $A3 ;字符'T'
CHAR_A = $90 ;字符'A'
CHAR_G = $96 ;字符'G'
CHAR_E = $94 ;字符'E'
CHAR_SPA = $00 ;字符空格
CHAR_LIN = $AE ;字符'-'
CHAR_O = $9E ;字符'o'
NUM_1 = $81 ;数字'1'
NUM_2 = $82 ;数字'2'
NUM_3 = $83 ;数字'3'
NUM_4 = $84 ;数字'4'
NUM_5 = $85 ;数字'5'
NUM_6 = $86 ;数字'6'
NUM_7 = $87 ;数字'7'
NUM_8 = $88 ;数字'8'
NUM_9 = $89 ;数字'9'
NUM_0 = $80 ;数字'0'
.ORG $F82A
JSR $E700
.ORG $E700
STY $4014 ;补上覆盖的精灵写入指令
PROTECT_DATA: ;数据保护
PHA ;数据保护开始
TXA
PHA
TYA
PHA ;数据保护结束
LDA TITLE_A
CMP #TITLE_A_ON ;比较是否为标题画面
BNE RET
LDA TITLE_B
CMP #TITLE_B_ON ;比较是否为标题画面
BEQ PPU_STAGE
RET: ;恢复数据
PLA ;恢复数据开始
TAY
PLA
TAX
PLA ;恢复数据结束
RTS ;返回
PPU_STAGE: ;字符STAGE写入程序
LDA #PPU_ADDR_H
STA $2006 ;设置PPU字符写入高位地址
LDA #PPU_ADDR_L
STA $2006 ;设置PPU字符写入低位地址
LDX #$00
PPU_STAGE_WROTE: ;写入STAGE字模
LDA STAGE_DATA,X
CMP #PPU_END ;判断是否写入结束
BEQ STAGE_CMP
STA $2007
INX
BCC PPU_STAGE_WROTE
STAGE_CMP: ;选关操作
LDA STAGE_TEMP
CMP #$FF ;关卡数据初始化条件判断
BNE KEY_B
LDA #$00
STA STAGE_TEMP ;关卡数据初始化
KEY_B: ;关卡减少
LDA KEY_ADDR
AND #BUTTON_DEC ;按键B或左减关
BEQ KEY_A
LDA #$FF
STA TIME_LAY ;重设标题延时
LDA STAGE_TEMP
CMP #$00 ;关卡比较
BEQ KEY_A
DEC STAGE_TEMP ;减关
JSR MUSIC ;按键音效
KEY_A: ;关卡增加
LDA KEY_ADDR
AND #BUTTON_INC ;按键A或右加关
BEQ PPU_NUM_WRITE
LDA #$FF
STA TIME_LAY ;重设标题延时
LDA STAGE_TEMP
CMP #STAGE_MAX ;关卡比较
BEQ PPU_NUM_WRITE
INC STAGE_TEMP ;加关
JSR MUSIC ;按键音效
PPU_NUM_WRITE: ;关卡数字写入地址
LDA #PPU_ADDR_H
STA $2006 ;设置PPU数字写入高位地址
LDA #PPU_ADDR_L
CLC
ADC #NUMBER_A
STA $2006 ;设置PPU字符写入低位地址
LDA STAGE_TEMP
TAX
LDA STAGE_D1,X ;写入数字
STA $2007
LDA #PPU_ADDR_H
STA $2006 ;设置PPU数字写入高位地址
LDA #PPU_ADDR_L
CLC
ADC #NUMBER_B
STA $2006 ;设置PPU字符写入低位地址
LDA STAGE_TEMP
TAX
LDA STAGE_D2,X ;写入数字
STA $2007
STAHE_WRITE:
LDA STAGE_TEMP
STA $2D ;初始关卡写入
PPU_RTS: ;恢复数据
PLA
TAY
PLA
TAX
PLA
RTS
STAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据
.BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END
STAGE_D1: ;关卡数字
.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
STAGE_D2: ;场景数字
.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
MUSIC: ;按键音效
LDA #$3B ;音乐号
JSR $919E ;系统音乐调用
RTS4.无敌锁定: 暂停后,按上键切换;
5.生命加满: 暂停后,按下键切换;
6.血量锁满: 暂停后,按右键切换;
http://www.emu618.org/data/attachment/album/201703/31/144018zll24zzy4sjxo4yy.png
http://www.emu618.org/data/attachment/album/201703/31/144019hm5m0miafb0255im.png
http://www.emu618.org/data/attachment/album/201703/31/144019t2b26uxp6g6hpiqo.png
http://www.emu618.org/data/attachment/album/201703/31/144020vyolz3q2qwe11zoz.png
FlameCyclone.ys168.com
www.nesbbs.com
**** Hidden Message *****
感谢修改,辛苦了 这也是个好游戏啊。谢谢修改。 感谢分享新游戏 这个有意思,比30人版的还要简便 2和3改的很强悍 {:4_103:}哇塞,真心不错,楼主辛苦了,终于圆了我的梦,多谢多谢! 这个修改超爽啊..太感激了 这个修改的好阿弱弱的问下不是说隐退了吗 楼主改的太棒了,谢谢分享 感谢楼主分享! 感谢楼主分享 简单很多了,感谢修改 老规矩,先回后下!!!!!!!
以前在实体机上老被BOSS虐 现在好了 搞死BOSS 哈哈哈 好东西收藏了 来看看貌似没人下载 已经适配nestopia模拟器 感谢游戏 研究研究