[FC][最终任务][END选关]
本帖最后由 yandagui 于 2017-4-21 18:58 编辑[最终任务]
时间:2017.3.29
作者:FlameCyclone
内容:
1.关卡选择: 标题时,左或B减,右或A加(1-5关);
2.无敌锁定: 暂停后,按上键切换;
3.生命加满: 暂停后,按下键切换;
4.速度调节: 暂停后,按左键减,右键加(1,2,3三级);
5.子弹切换: 非暂停,选择键切换(普通,W,L,B);
6.B弹数量: 暂停后,按A键切换(1个或2个);
7.副武器类型: 暂停后,选择键切换(普通,W,L,B),非普通时子弹方向是向右发射的;
http://www.emu618.org/data/attachment/album/201703/28/232414fnbhffvahaxvanl7.png
http://www.emu618.org/data/attachment/album/201703/29/221320vobs3zvqf3oivcf3.png
http://www.emu618.org/data/attachment/album/201703/29/221320yo44ll1aazlh1uwz.png
http://www.emu618.org/data/attachment/album/201703/29/221321in31n3bai1d21igo.png
**** Hidden Message *****
FlameCyclone.ys168.com
www.nesbbs.com;[最终任务KEY]
button = $04 ;单次按键
flag = $6000 ;功能开关标志
pause = $000E ;暂停地址
.ORG $8000
LDY #$08 ;自带的按键程序
ADDR8002:
LDA $4016,X
LSR
ROL $0021
LSR
ROL $0029
DEY
BNE $8002
LDA $0021
ORA $0029
STA $0021
LDA $0020
AND $0021
STA $0020
LDA $06,X
EOR $0020
AND $0020
STA $04,X
LDA $0020
STA $06,X
JSR KEY_OPERATE
JSR Function ;功能调用
JSR Weapon ;武器切换调用
JSR Power ;威力调用
JSR BULLET_NUM ;子弹数目
JSR BULLET ;副武器类型
RTS
.ORG $8050
Function: ;功能
WUDI: ;无敌
LDA $6000,X
AND #$08 ;开关判断
BEQ LIFE
LDA #$05
STA $05DC,X ;无敌锁定
LIFE: ;生命
LDA $6000,X
AND #$04 ;开关判断
BEQ FUNRTS
LDA #$05
STA $1C,X ;生命赋值
FUNRTS:
RTS
Weapon: ;武器切换
LDA pause ;暂停状态判断
BNE WEARTS
LDA $04,X
CMP #$20 ;选择键判断
BNE WEARTS
LDA $12,X
CMP #$03 ;武器值判断
BCC WEAINC
LDA #$FF
STA $12,X ;武器重置
WEAINC:
INC $12,X ;武器增加
WEARTS:
RTS
Power: ;威力
LDA pause ;暂停状态判断
BEQ SPERTS
BUT_LEFT:
LDA $04,X
CMP #$02 ;左按键判断
BNE BUT_RIGHT
LDA $88,X
CMP #$00 ;威力判断
BEQ SPERTS
SPEDEC
LDA $88,X ;读取武器值
SEC
SBC #$08
STA $88,X ;威力减小
BUT_RIGHT:
LDA $04,X
CMP #$01 ;右按键判断
BNE SPERTS
LDA $88,X
CMP #$10 ;威力判断
BEQ SPERTS
SPEINC:
LDA $88,X ;读取武器值
CLC
ADC #$08
STA $88,X ;威力增大
SPERTS:
RTS
BULLET_NUM: ;子弹数目
LDA pause ;暂停状态判断
BEQ BULRTS
CPX #$00 ;主机玩家判断
BNE BULRTS
LDA $04,X ;主机玩家判断
AND #$80 ;按键A比较
BEQ BULRTS
LDA $87 ;状态判断
BEQ BUL_2
BUL_1:
LDA #$00
STA $87 ;1发子弹
BEQ BULRTS
BUL_2:
LDA #$01
STA $87 ;2发子弹
BULRTS:
RTS
BULLET:
LDA pause ;判断暂停状态
BEQ BULLETRTS
LDA $04,X
CMP #$40 ;按键B比较
BNE BULLETRTS
LDA $6002,X ;读取副武器
CMP #$03
BCC BULLETADD
LDA #$FF
STA $6002,X
BULLETADD:
INC $6002,X
BULLETRTS:
LDA $6002,X
TAY
LDA BULLET_DATA,Y
STA $6004,X ;写入副武器数据
RTS
BULLET_DATA:
.BYTE $06,$02,$03,$04
KEY_OPERATE: ;按键开关操作
data_protect: ;数据保护
PHA
TXA
PHA
TYA
PHA
FLAG_INI: ;开关标志初始化
LDA $600F
CMP #$01
BEQ pause_cmp
LDA #$00
STA $6000
STA $6001
STA $6002
STA $6003
STA $6004
STA $6005
LDA #$01
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
ora_data: ;按键相或数据
.BYTE $08,$04,$02,$01,$80,$40,$20,$10
and_data: ;按键相与数据
.BYTE $F7,$FB,$FD,$FE,$7F,$BF,$DF,$EF
.ORG $C264 ;自定义的MAPPER2切页程序
PHA
TXA
PHA
LDA $0066
BNE ADDRC280
LDA #$07
LDX #$03
JSR $CD9B ;自带的切bank方法
PLA
TAX
PLA
JSR $8000
LDA #$06
LDX #$03
JSR $CD9B ;切回原该切得bank(可以不用)
RTS
ADDRC280:
PLA
TAX
PLA
RTS
;[最终任务PPU]
.ORG $C056 ;跳转到PPU重写程序
JSR $7000
.ORG $CEBF
JSR STAGE_DATA_WRITE ;跳转到关卡数据写入
.ORG $E460
JSR BULLET_DATA_WRITE ;跳转到副武器数据写入
.ORG $71F0
STAGE_DATA_WRITE:
LDA $6010
STA $1E ;关卡写入
LDA #$00
RTS
.ORG $71C0
BULLET_DATA_WRITE: ;副武器数据写入
CPX #$0E
BCS P2_BUL
P1_BUL:
LDA $6004
JSR $D7D0 ;P1副武器数据写入
RTS
P2_BUL:
LDA $6005
JSR $D7D0 ;P2副武器数据写入
RTS
.ORG $7000
STY $4014 ;补上覆盖的精灵写入指令
PHA
TXA
PHA
TYA
PHA
LDA $0C
CMP #$01 ;比较是否为标题画面
BEQ PPU_STAGE
PLA
TAY
PLA
TAX
PLA
RTS
PPU_STAGE: ;STAGE显示程序
LDA PPU_ADDR_DATA
STA $2006
LDA PPU_ADDR_DATA+1
STA $2006 ;坐标设置
LDX #$00
PPU_STAGE_WROTE: ;写入STAGE字模
LDA STAGE_DATA,X
STA $2007
INX
CPX #$06
BCC PPU_STAGE_WROTE
LDA $6010
CMP #$FF ;关卡数据初始化条件判断
BNE KEY_B
LDA #$00
STA $6010 ;关卡数据初始化
KEY_B: ;关卡减少
LDA $04
AND #$42 ;按键B或左减关
BEQ KEY_A
LDA $6010
CMP #$00 ;关卡比较
BEQ KEY_A
DEC $6010 ;减关
KEY_A: ;关卡增加
LDA $04
AND #$81 ;按键A或右加关
BEQ PPU_NUM_WRITE
LDA $6010
CMP #$04 ;关卡比较
BEQ PPU_NUM_WRITE
INC $6010 ;加关
PPU_NUM_WRITE:
LDA $6010
TAX
LDA STAGE_NUM,X ;写入数字
STA $2007
PPU_RTS:
PLA
TAY
PLA
TAX
PLA
RTS
STAGE_DATA: ;关卡文字S,T,A,G,E,字模数据
.BYTE $EC,$ED,$DA,$E0,$DE,00
STAGE_NUM: ;关卡数字1,2,3,4,5字模数据
.BYTE $D1,$D2,$D3,$D4,$D5
PPU_ADDR_DATA:
.BYTE $23,$0C
感谢分享!支持! 感谢楼主的分享 最终任务用选人秘籍选10人后B弹一次可以发2发‘,平时只能发1发.修改的子弹切换功能能不能多加上这条啊 感谢楼主分享新游戏 这个就是所谓的空中魂斗罗!网上有大神修改很强大的!感谢楼主的分享! 好东西,收下了 这是那个空中魂斗罗么 支持,楼主非常棒的实例,拿回去研究了,多亏了楼主,fc的很多东西都已经不再是秘密,我们这些后来者也可以做出更好更棒的作品,非常棒的教程!还是那句话:非常感谢! 感谢楼主分享! 楼主厉害,顶一个 nianxu 发表于 2017-3-29 10:12
最终任务用选人秘籍选10人后B弹一次可以发2发‘,平时只能发1发.修改的子弹切换功能能不能多加上这条啊
已经加上了,赶紧下载吧 这个不是空中魂斗罗吗?。。。。。 是啊,为何叫空中魂斗罗 旋风又疯狂大修改了 哈哈 九月鹰飞 发表于 2017-3-30 19:35
旋风又疯狂大修改了 哈哈
疯狂不起来,无聊了而已 非常好的修改,感谢分享。 没人看以后都不想改了 Thx for sharing 路过帮顶,呵呵,真是好作品。{:4_144:}