yandagui 发表于 2017-3-28 23:25:55

[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

狮子座 发表于 2017-3-29 01:16:54

感谢分享!支持!

dabayu 发表于 2017-3-29 09:18:26

感谢楼主的分享

nianxu 发表于 2017-3-29 10:12:16

最终任务用选人秘籍选10人后B弹一次可以发2发‘,平时只能发1发.修改的子弹切换功能能不能多加上这条啊

tariq017 发表于 2017-3-29 10:20:54

感谢楼主分享新游戏

千寻风 发表于 2017-3-29 11:12:57

这个就是所谓的空中魂斗罗!网上有大神修改很强大的!感谢楼主的分享!

kexiao1223 发表于 2017-3-29 11:31:41

好东西,收下了

找不到服务器 发表于 2017-3-29 12:47:42

这是那个空中魂斗罗么

曹的爽 发表于 2017-3-29 17:08:41

支持,楼主非常棒的实例,拿回去研究了,多亏了楼主,fc的很多东西都已经不再是秘密,我们这些后来者也可以做出更好更棒的作品,非常棒的教程!还是那句话:非常感谢!

afti 发表于 2017-3-29 18:15:17

感谢楼主分享!

pp12 发表于 2017-3-29 21:34:32

楼主厉害,顶一个

yandagui 发表于 2017-3-29 22:16:40

nianxu 发表于 2017-3-29 10:12
最终任务用选人秘籍选10人后B弹一次可以发2发‘,平时只能发1发.修改的子弹切换功能能不能多加上这条啊

已经加上了,赶紧下载吧

liujunbtx 发表于 2017-3-30 00:00:09

这个不是空中魂斗罗吗?。。。。。

yandagui 发表于 2017-3-30 12:58:51

是啊,为何叫空中魂斗罗

九月鹰飞 发表于 2017-3-30 19:35:27

旋风又疯狂大修改了 哈哈

yandagui 发表于 2017-3-30 21:45:08

九月鹰飞 发表于 2017-3-30 19:35
旋风又疯狂大修改了 哈哈

疯狂不起来,无聊了而已

cococo8858 发表于 2017-4-1 07:52:40

非常好的修改,感谢分享。

yandagui 发表于 2017-4-2 20:43:27

没人看以后都不想改了

tom55473220 发表于 2017-4-2 21:50:46

Thx for sharing

街机爱好者 发表于 2017-4-2 22:06:54

路过帮顶,呵呵,真是好作品。{:4_144:}
页: [1] 2 3
查看完整版本: [FC][最终任务][END选关]