yandagui 发表于 2017-3-31 14:40:49

[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 *****

dabayu 发表于 2017-3-31 15:19:48

感谢修改,辛苦了

cococo8858 发表于 2017-3-31 15:57:22

这也是个好游戏啊。谢谢修改。

tariq017 发表于 2017-3-31 17:15:48

感谢分享新游戏

文子萝卜 发表于 2017-3-31 18:08:30

这个有意思,比30人版的还要简便

cheap9003 发表于 2017-3-31 18:24:11

2和3改的很强悍

街机爱好者 发表于 2017-3-31 19:13:18

{:4_103:}哇塞,真心不错,楼主辛苦了,终于圆了我的梦,多谢多谢!

多乐事 发表于 2017-3-31 21:04:59

这个修改超爽啊..太感激了

自圆其说 发表于 2017-3-31 21:30:31

这个修改的好阿弱弱的问下不是说隐退了吗

pp12 发表于 2017-3-31 21:34:31

楼主改的太棒了,谢谢分享

afti 发表于 2017-3-31 22:08:30

感谢楼主分享!

datone 发表于 2017-3-31 22:32:18

感谢楼主分享

找不到服务器 发表于 2017-4-1 02:16:39

简单很多了,感谢修改

wjb19780515 发表于 2017-4-1 11:35:44

老规矩,先回后下!!!!!!!

九月鹰飞 发表于 2017-4-1 14:07:04

以前在实体机上老被BOSS虐 现在好了 搞死BOSS 哈哈哈

狮子座 发表于 2017-4-1 15:51:06

好东西收藏了

yandagui 发表于 2017-4-2 20:42:12

来看看貌似没人下载

yandagui 发表于 2017-4-4 11:44:04

已经适配nestopia模拟器

来了来 发表于 2017-4-7 01:13:04

感谢游戏

曹的爽 发表于 2017-4-20 10:51:15

研究研究
页: [1] 2 3 4
查看完整版本: [FC][忍者神龟3][END选关]