• 您的当前位置:首页 > HACK教程 > [ 投稿 ][ 教程 ] 如何让KOF增加按BCD键 畜气系统源代码 注释

[ 投稿 ][ 教程 ] 如何让KOF增加按BCD键 畜气系统源代码 注释

  • 作者:Aillis
  • 2021-05-15 16:22:17

今天,Aillis兄弟又来和大家分享近期捣鼓的好东东,就是为KOF97的ADV模式中增加按BCD键 畜气系统,厉害了,小编沉迷了,手感超爽!

Aillis兄弟的作品下载在这:http://www.hackrom.cn/html/7/371.html

现在Aillis兄弟,把源代码贴出来了,希望对大家抛砖引玉,在别的KOF系统也用上,这确实是一个难得的干货啊!小编现在对这堆代码,还一头雾水!

代码开始:

ORG 0xF4D0
JMP 0x88900

ORG 0x88900 || 增加:蓄气测试和执行 || 参数: A4:攻方基址
K000: | 蓄气测试
BSR L000 | <<-- 蓄气按键及条件测试
BNE.S K100 | 不为零 -->> 蓄气动作执行
JMP 0xF4DA | -->> 继续原来的处理

K100: | 蓄气动作执行 | 设置音效
LEA 0xA3610,A0
JSR 0x16190
MOVE.W D1,(0x1BC,A4)
MOVE.W #0x90,D0
JSR 0x7700
MOVE.W #0x90,(0x1BE,A4)
MOVE.B #0x2,(0x1BA,A4)

|| 设置属性
JSR 0x15692 | <<-- 清空部分标志
JSR 0x122C8 | <<-- 更新角色的朝向

|| 蓄气启动
MOVE.W #0x42,(0x72,A4) | (蓄气启动动作)
MOVE.W #0xFFFF,(0x78,A4)
JSR 0x584C | <<-- 动作数据处理
MOVE.L #K101,(A4)

K101:
BSR T000 | <<-- 蓄气持续共通处理
BEQ K300 | 为零 -->> 蓄气结束 (终止蓄气跳出)

|| 动作中止测试
TST.B (0x7C,A4)
BPL K400 | 非负数 -->> 执行动作

|| 设置光效
LEA 0x10E12,A0
MOVE.W (0x2C,A4),D1
ADDQ.W #2,D1
MOVE.W #0x20,D2
MOVE.W #0x4A,D3
MOVE.W #0x0,D5
MOVE.W #0x0,D6
JSR 0x1E374 | <<-- 创建子对象

|| 蓄气持续
MOVE.W #0x43,(0x72,A4) | (蓄气持续动作)
MOVE.L #K103,(A4)
BRA K400 | -->> 执行动作

K103:
BSR T000 | <<-- 蓄气持续共通处理
BEQ K300 | 为零 -->> 蓄气结束 (终止蓄气跳出)
BRA K400 | -->> 执行动作

K200: || Extra模式蓄气满值进入MAX状态
JSR 0x10E5C | <<-- Extra模式进入MAX状态
MOVE.W #0x10,(0xEC,A4) | MAX状态能量槽的消耗速度:0x10

K300: || 蓄气结束
JSR 0x161B0 | <<-- 停止重复音效
MOVE.W #0x44,(0x72,A4) | (蓄气结束动作)
MOVE.L #K301,(A4)

K301: || 可通过任意输入来取消蓄气结束动作
TST.B (0x1,A6) | 测试输入
BNE.S K302 | 不为零 -->> 回到站立状态 (有输入跳出) | 动作中止测试
TST.B (0x7C,A4)
BPL K400 | 非负数 -->> 执行动作

K302: || 回到站立状态
JMP 0xF43E

K400: || 执行动作
JMP 0xF382

|| 蓄气按键及条件测试 | 返回: D0:1-可蓄气/0-不可蓄气
L000: MOVE.B (A6),D0 | D0:持续输入
ANDI.B #0xF0,D0 | 保留ABCD
TST.B (0x1D5,A4) | 测试模式 (0:Advanced/1:Extra)
BEQ.S L100 | 为零 -->> Advanced (Advanced跳出)

|| Extra
CMPI.B #0x70,D0 | 测试按住ABC
BNE.S L300 | 不相等 -->> 不可蓄气 (ABC以外跳出)

|| MAX状态不许蓄气
MOVE.W (0xE0,A4),D0
ANDI.W #0x1002,D0
BNE.S L300 | 不为零 -->> 不可蓄气 (MAX状态跳出)
BRA.S L200 | -->> 可蓄气

L100: || Advanced
CMPI.B #0xE0,D0 | 测试按住BCD
BNE.S L300 | 不相等 -->> 不可蓄气 (BCD以外跳出)
JSR 0x1169C | <<-- 能量珠上限测试
BEQ.S L300 | 为零 -->> 不可蓄气 (已抵达上限跳出)

L200: || 可蓄气
MOVEQ #0x1,D0
RTS

L300: || 不可蓄气
MOVEQ #0x0,D0
RTS

|| 蓄气持续共通处理 | 返回: D0:1-继续蓄气/0-终止蓄气
T000:
BSR L000 | <<-- 蓄气按键及条件测试
BEQ K300 | 为零 -->> 终止蓄气 (不可蓄气跳出)

|| 两种模式的蓄气速度
ADDI.W #0x180,(0xE8,A4) | 能量值 += 0x180
TST.B (0x1D5,A4) | 测试模式 (0:Advanced/1:Extra)
BNE.S T101 | 不为零 -->> 测试能量是否满值 (Extra跳出)
SUBI.W #0x100,(0xE8,A4) | 能量值 -= 0x100 (减慢ADV模式的蓄气速度)

T101: || 测试能量是否满值
JSR 0x10E44 | <<-- 能量是否已满值的测试
BNE.S T200 | 为零 -->> 能量满值后的分支处理 (能量已满跳出)

|| 继续蓄气
MOVEQ #0x1,D0
RTS

T200: || 能量满值后的分支处理
TST.B (0x1D5,A4) | 测试模式 (0:Advanced/1:Extra)
BNE.S T201 | 为零 -->> 进入MAX状态 (Extra跳出) | Advance模式蓄气满值增加能量珠
JSR 0x10F1C | <<-- 能量珠+1

|| 继续蓄气
MOVEQ #0x1,D0
RTS

T201: || Extra模式蓄气满值进入MAX状态
JSR 0x10E5C | <<-- 进入MAX状态
MOVE.W #0x10,(0xEC,A4) | MAX状态能量槽的消耗速度:0x10

T300: || 终止蓄气
MOVEQ #0x0,D0
RTS

*_*
互动小天地
点击加载更多...
关闭 更换头像