跳至内容

Jixun's Blog 填坑还是开坑,这是个好问题。

(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 国际许可协议进行许可。

评论区