貌似新版本的反编译项目已经有这个功能了,但由于我自己做改版的时候,还是老版本,并没有禁止逃跑的功能,于是自己手动添加了这样的功能。
首先,功能的实现是通过设置全局flag,setflag之后只要不clear就一直生效。
第一步:在标志定义中添加
在 include/config/battle.h 文件中添加了新的标志定义:
#define B_FLAG_NO_ESCAPE_WILD 0
后面的0需要改成一个没有使用过的flag,具体在
include\constants\flags.h
这个文件查找。第二步:在游戏代码中实现功能
需要在battle_util.c文件中添加config/battle.h的包含语句,然后修改CanBattlerEscape函数来检查新添加的B_FLAG_NO_ESCAPE_WILD标志。
#include "config/battle.h"
修改 CanBattlerEscape 函数,添加了对新标志的检查逻辑:
// 检查是否是野生对战且设置了禁止逃跑标志
else if (B_FLAG_NO_ESCAPE_WILD != 0 && FlagGet(B_FLAG_NO_ESCAPE_WILD) && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER)))
return FALSE;
这个实现的工作原理是:当 B_FLAG_NO_ESCAPE_WILD 不为0且该标志被设置,同时当前对战不是训练师对战、链接对战或边境对战时,玩家将无法从野生精灵对战中逃跑。
使用方法:将 B_FLAG_NO_ESCAPE_WILD 的值替换为一个未使用的flag ID(例如 FLAG_UNUSED_0x264 ),然后在游戏脚本中通过设置该flag来启用禁止逃跑功能。接触该功能,只需要正常在游戏脚本中写clearflag即可。
代码示例: