(GBA) 最终幻想 I - 锁血补丁
适用于 最终幻想 I & II 的 D商 汉化版;日版未测试。
- 实测能防御战斗时的普通攻击、魔法伤害;不确定毒性能否防御。
- 不防御战斗外伤害(如毒地)。
使用 IPS 补丁程序打入即可。
IPS 下载:Final.Fantasy.I+II.Advanced.(GBA)(C).FF1.1HP.Lock.ips
相关实现代码:
; ------------------------------------------------------------------------------
; 游戏: (GBA) 最终幻想 I & II
; 类型: 战斗时锁血不死 (1HP)
; 说明: 如果伤害超过当前血量则锁定血量为 1。
; 地形扣血依旧有效,记得嗑药;
; 魔法伤害未测试。
; ------------------------------------------------------------------------------
; 作者: Jixun
; 地址: https://jixun.moe/ -- 季寻日志
; ------------------------------------------------------------------------------
.gba
.open "FF1&2_PATCH_BASE_CN.gba", "FF1&2_LOCK_1HP.gba", 0x08000000
; ------------------------------------------------------------------------------
; 补丁原始指令 (FF1 的扣钱函数)
; ------------------------------------------------------------------------------
.org 0x0807B2AE
.thumb
FF1_ROUTE_PLAYER_TAKE_DMG:
; $#14 bytes to use here.
; 0807B2AE: 464B mov r3, r9
; 0807B2B0: 4343 mul r3, r0
; 0807B2B2: 1C18 add r0, r3, #0
; 0807B2B4: 4B00 ldr r3, =$4890
; 0807B2B6: E007 b $0807B2C8
; .pool
; 0807B2BC: ; DO NOT OVERWRITE THIS ADDRESS
LDR r3, =FF1_HOOKED_PLAYER_TAKE_DMG + 1
BX r3
.pool
.org 0x0807B2D6
.thumb
FF1_PLAYER_TAKE_DMG_CONTINUE:
; Nothing to do.
.org 0x081B4990
.thumb
FF1_HOOKED_PLAYER_TAKE_DMG:
mov r3, r9 ; 0807B2AE
mul r3, r0 ; 0807B2B0
add r0, r3, #0 ; 0807B2B2
ldr r3, =$4890 ; 0807B2B4
add r0, r0, r3 ; 0807B2C8
add r1, r1, r0 ; 0807B2CA
; 0807B2D6: 8908 ldrh r0, [r1, #8]
; ^ hp
; r2 = dmg
; 修改逻辑:
; 如果伤害超过 HP,则将伤害值修改为 HP - 1
ldrh r3, [r1, #8]
cmp r3, r2 ; If r3(hp) > r2(cost)
bhi skip_dmg_patch ; then jump
; cost = hp - 1
sub r2, r3, #1
skip_dmg_patch:
ldr r3, =FF1_PLAYER_TAKE_DMG_CONTINUE + 1
bx r3
.pool
; ------------------------------------------------------------------------------
.Close
; ------------------------------------------------------------------------------
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。