这个工具的设置被存储。
该工具使用的游戏中有设置数据。
如果将数据提取为外部资源,则包含似乎更具可扩展性的数据。
文件按以下顺序搜索。
XX包含所选语言。 en=英文, zh=中文.
file_VERSION.XX.txt
file_VERSION.txt
file_ALL.XX.txt
file_ALL.txt
同样在文件中,有些东西会打开 {J} {U}.
例如,由于FE8J FE8U中的指针值不同,因此用于此切换。
所有文件格式都是制表符分隔的TSV格式。
字符代码在UTF-8中统一。
搜索“foo” | |
游戏 | FE8 |
XX | EN |
类型 | FE8U |
if ( Exists("config/data/foo_FE8.en.txt") ) { return found; } if ( Exists("config/data/foo_FE8.txt") ) { return found; } if ( Exists("config/data/foo_ALL.en.txt") ) { return found; } if ( Exists("config/data/foo_ALL.txt") ) { return found; } return NOT_FOUND;
假设找到了 foo_ALL.txt 。
假定foo_ALL.txt的内容如下所示。
TEST1=A TEST2=B {U} TEST3=C {J}
由于在搜索指令中指定了类型== FE8U,因此获取以下内容。
TEST1=A TEST2=B
如果搜索命令是类型== FE8J,则获取以下内容。
TEST1=A TEST3=C
ai1 | Define the list of unit Placer AI1. |
ai2 | Define the list of unit Placer AI2. |
aiscript | Define the aiscript command |
asmmap | Function map. Displays hints during function map disassembly. |
base_rom_info | Define the capacity and CRC of unmodified ROM. |
battleanime_85command | Define C85 command list of battle animation. |
battleanime_auto_recolor | It is used to decide enemy color scheme with battle animation. |
battleanime_mode | Define the type of battle animation. |
event | Define the event instruction. |
eventcond | Define the type of event condition. |
func_lang | Define the languages available in FEBuilderGBA. |
item_anime_effect | Define a list of weapon animation effects. |
item_staff_use_effect | Define the effect of using items. |
item_weapon_effect | Define the additional effect of the weapon. |
item_usability_array_ | Determine whether items can be used. |
item_effect_array_ | Define the effect of using items. |
item_promotion1_array_ | Define processing when using Promotion Item. |
item_promotion2_array_ | Define whether it is a Promotion Item (FE 7 only). |
item_staff1_array_ | Define the method of target selection of items (maybe). |
item_staff2_array_ | Define the type of Staff. |
item_statbooster1_array_ | Define a message when using stat booster. |
item_statbooster2_array_ | Define Stat Booster and whether it is a Promotion Item. |
magic_command | Define the command of magic extension. |
magic_csa_spell_table | Define the condition to search for CSATABLE which defines magic animation of magic extension. |
magic_extends | Define how to judge whether magic expansion is appropriate or not. |
mappointer | Define the map pointer name. |
mapstyle | Define map style list. |
other_text | Defines an address list in which character string direct value of C language is embedded. |
skill_extends | Define how to judge whether skill extension is appropriate or not. |
skill_extends_* | For each skill extends, define the skill ID. |
song_instrument | Make the instrument information MD5 and assign the instrument name to the instrument address. |
song_instrumentset | Define how to judge whether NIMAP is right or wrong. |
sound | Define the name of the sound effect. |
sound_foot_steps | Define footsteps. FE8 only. |
tbl_cond | Define whether to use tbl or not. |
translate_textid | For translation, correspondence table of string IDs in ROMs of US and Japan. |
updater.bat.txt | It is not a configuration file. It is a batch file of automatic update. |
补丁文件是key = value的格式。
// #; 是一条注释。
附加0x时,数字数据变为十六进制。
如果你不添加任何东西,它是一个十进制数字。
- 0x08000000有或没有GBA指针,这两种情况都没有问题。
NAME=补丁名称
定义补丁的名称。
如果未定义,它将成为补丁的文件名。
TYPE=IMAGE TYPE=ADDR TYPE=STRUCT TYPE=BIN TYPE=EA TYPE=SWITCH
定义补丁的类型。
有6种类型。
详情将在稍后解释。
INFO=写更多信息\\r\\n 请尽可能描述。
写更多信息,请换行\\r\\n
IF:0xEE594=0x4B 0xFA 0x2F 0x59 0x7E 0x19
定义补丁是否可用。
在这个例子中,我们正在检查 ROM 0xEE594 是 0x4B 0xFA 0x2F 0x59 0x7E 0x19。
如果 0xEE594 是 0x4B 0xFA 0x2F 0x59 0x7E 0x19, 则可以使用此补丁。
IF_NOT:0xEE594=0x4B 0xFA 0x2F 0x59 0x7E 0x19
定义补丁是否可用。
相反,在ROM中,0xEE594将可用,除非它是 0x4B 0xFA 0x2F 0x59 0x7E 0x19.
PATCHED_IF:0x080bb182=0x45 0x46 0xE0 0xB4 PATCHED_IF_NOT:0x080bb182=0x45 0x46 0xE0 0xB4
它定义了补丁是否已被修改。
如果我们修补两次,它将主要用于坏BIN补丁。
要编写英文名称,请添加 .en
要编写中文名称,请添加 .zh
NAME=Japanese name
NAME.en=英文
NAME.zh=中文
从ver20171211开始,现在可以为所有参数指定诸如AAAA.en之类的语言。
NAME=きずぐすりの回復量 NAME.en=Recovery amount of Vulnerary NAME.zh=回复杖的回复量 TYPE=ADDR ADDRESS=0x2fe16 AUTHOR=出典:aeraさんの資料より\r\n
http://ngmansion.xyz/wiki/hackfe/index.php?%E3%83%91%E3%83%83%E3%83%81#jf501d8a
AUTHOR.zh=来源:从aera的数据\r\n
http://ngmansion.xyz/wiki/hackfe/index.php?%E3%83%91%E3%83%83%E3%83%81#jf501d8a
AUTHOR.en=Source: From aera's data\r\n
http://ngmansion.xyz/wiki/hackfe/index.php?%E3%83%91%E3%83%83%E3%83%81#jf501d8a
~
FE8J的伤药恢复量存储在0x2fe16中。
这是一个修改它的补丁。
虽然ADDR基本上只有1个字节的变化,
但可以使用组合框格式使用长字节。
NAME=フリーマップから入らないとフリーズする制約を消す NAME.en=Eliminate the constraint of freezing unless it enters from the world map. NAME.zh=消除冻结的限制,除非从免费地图进入 //作为地址补丁实施。 TYPE=ADDR ADDRESS=0xc1e7c COMBO=默认|0x47 0x2D|fix|0xB8 0xE0
最新支持DATA SIZE规格。
当DATASIZE=4,它操作为4个字节(由于它是GBA,所以数据以小端编写)。
为了兼容性,如果没有指定,它变成1个字节 DATASIZE=1。
如果指定了COMBO,则会忽略DATASIZE规范,并且COMBO规范优先。
例: 通过模式选择上FE7更改肖像的琳
NAME=MODE SELECT 顔画像 リン編 NAME.en=MODE SELECT Portrait of the Lyn Editing NAME.en=头像琳 TYPE=ADDR ADDRESS=0x4393D8 ADDRESS_TYPE=头像 DATASIZE=4 //出于某种原因,MODE SELECT的肖像ID由4个字节的DWORD存储
可以使用空格分隔符将多个地址写入
每个值都设置相同的值。
当你需要同时更改不同的地方时使用它。
NAME=幸運上限 NAME.en=Upper limit of lucky NAME.zh=幸运上限 //アドレスパッチとして実装します TYPE=ADDR ADDRESS=0x80CA0 0x29f0e 0x29f12 0x180d8 0x180dc 0x95694 0x95694 0x9585C
例如,由于幸运限制是在各地分散设置的硬编码,
如上所述,它会立即改变数值。
使用 HEX=false 如果您想要将用户界面上显示的数字显示为十进制数字。
NAME=最大レベル NAME.en=Max Level NAME.zh=最高级别 //作为地址补丁实施。 TYPE=ADDR ADDRESS=0x25132 HEX=false //它以十进制数显示它
请使用地址类型,如果有要与值关联的东西。
ADDRESS_TYPE = UNIT //将其视为人物ID(字符ID) ADDRESS_TYPE = ITEM //将其视为道具ID。 ADDRESS_TYPE = CLASS //将其视为职业ID ADDRESS_TYPE = SONG //将其视为音乐ID(歌曲ID)
For example.
NAME=進撃準備 NAME.en=MUSIC_Preparation NAME.zh=音乐_进击准备 //作为地址补丁实施。 TYPE=ADDR ADDRESS=0x080495cc 0x080af17e 0x08031654 0x08090048 0x080960b4 0x0809b880 0x0809c7f6 ADDRESS_TYPE=SONG //准备BGM被改变,它被视为音乐ID。
TYPE=IMAGE
定义补丁来改变形象。
这个补丁需要用指针写入,而不是图像地址。
这是因为图像长度可变,所以图像地址可能会改变。
以下是修改FE8J FIN的补丁。
NAME=系统_FIN TYPE=图片 WIDTH=256 HEIGHT=160 //使用的调色板数量。 PALETTE=1 //压缩的图像。 ZIMAGE_POINTER=0xBBF48 //TSA与未压缩的标题。 HEADERTSA_POINTER=0xBBF54 //未压缩的调色板。 PALETTE_POINTER=0xBBF44
未压缩的图像。
IMAGE_POINTER
压缩的图像。
ZIMAGE_POINTER
使用压缩的TSA。
ZTSA_POINTER
使用带压缩标题的TSA。
ZHEADERTSA_POINTER
将TSA与未压缩的标题一起使用。
HEADERTSA_POINTER
使用未压缩的调色板。
PALETTE_POINTER
它用于显示和导入图像。
在下面的例子中,它是一种条件,它拥有一种具有256×160尺寸图像的16色调色板。
WIDTH=256 HEIGHT=160 //使用的调色板数量。 PALETTE=1
手工编写图像补丁很难,因此您可以自动生成图像补丁。
在菜单 →工具 →图形工具中,找到图像,找到TSA等,然后单击右下角的补丁制作工具按钮。
自动制作补丁。
没有必要每次手工计算指针。
TYPE=STRUCT
结构补丁
当你想改变结构等数据时使用它。
但是,使用工具主体这样复杂的事情是不可能完成的。
如果你想做出困难的事情,如果它可以被概括,你应该在工具主体一侧。
//实现它作为一个结构补丁。 TYPE=STRUCT //指向数据的指针。 POINTER=$GREP4END 0x00 0xB5 0xC0 0x46 0x06 0x48 0xC0 0x46 0x06 0x49 0x89 0x7B 0x89 0x00 0x40 0x58 0x01 0x21 0x00 0xF0 0x02 0xF8 0x17 0x20 0x00 0xBD 0xC0 0x46 0x02 0x4B 0x9F 0x46 //单位等级0x00 0x00 [动画设置指针] = 8个字节 //数据大小(十进制数)。 DATASIZE=8 //数据的数量(十进制数)。 DATACOUNT=12 //定义数据。 B0:UNIT=人物 B1:CLASS=职业 B2=00 B3=00 P4:BATTLEANIMENAME=动画设定
FE 8补丁来设置Yugdra补丁的单个动画。
在怪盗补丁中没有额外的结构,因此我将以Yugdra为例进行说明。
B0:UNIT=人物 B1:CLASS=职业 B2=00 B3=00 P4:BATTLEANIMENAME=动画设定 ↓↓↓↓↓ struct { byte unit; // +0 byte class; // +1 byte zero1; // +2 byte zero2; // +3 void* battleanime; // +4 };
b sbyte( char ) -128 ~ 127 B byte 0 ~ 255 W word 0 ~ 65535 D dword 0 ~ 4294836225 P dword 0 ~ 4294836225
关于D和P之间的区别
在P的情况下,它总是被记录为指针。
当用户输入0x123时,D中记录0x123,但如果是P,则记录为0x08000123。
type=BIN
二进制数据和源代码
NAME=SOUND_NIMAP(本地乐器图) TYPE=BIN PATCHED_IFNOT:$GREP4 0x00 0x3C 0x00 0x00 0x68 0x27 0x50 0x08 0xFF 0xFA 0x00 0xCC 0x00 0x3C 0x00 0x00 0x18 0x7D 0x29 0x08 0xFF 0xFA 0x00 0xCC 0x00 0x3C 0x00 0x00 0x3C 0x8E 0x28 0x08 0xFF 0xF9 0x00 0xA5 0x01 0x3C 0x00 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x0F 0x00=0x00 0x3C 0x00 0x00
BIN:$FREEAREA=JAPFE8_NI_Map.bin INFO=MIDI乐器图
在这个例子中,将JAPFE8_NI_Map.bin粘贴到适当的$ FREEAREA中。
由于两次粘贴时存在问题,因此$ GREP4正在调查它是否适用。
宏 $FREEAREA自由区域(分配ROM中的可用空间) $GREP4 搜索字节字符串,但以4字节为单位(高速)。
$GREP1 搜索字节字符串,但是1个字节单位(低速)。
$GREP4_NOT 它是有条件的,它不能通过搜索字节字符串找到。 $GREP1_NOT 它是有条件的,它不能通过搜索字节字符串找到。
NAME=10分割CG表示 //作为BIN补丁实施。 TYPE=BIN //补丁适应条件。 PATCHED_IF:0x080bb182=0x45 0x46 0xE0 0xB4 BIN:$FREEAREA=show_10split_image.bin //跳转到插入10格图像显示程序的地方。 JUMP:0x080bb182:$r4=show_10split_image.asm INFO=10分割CGを表示できるようにします INFO.zh=它可以显示10个分割的CG INFO.en=It makes it possible to display 10 divided CG.
在空闲区域粘贴show_10split_image.bin。
为粘贴的数据生成跳转代码。
r4寄存器用于跳转代码。
要跳转的代码,将生成以下代码。
当地址可以被4个字节整除时。 (addr%4 == 0) ldr r4,[JUMP ADDR] //+0 mov pc,r4; //+2 JUMP ADDR //+4 -->共8个字节。
但是,如果它可以被2个字节整除,则插入NOP。
NOP //+0 ldr r4,[JUMP ADDR] //+2 mov pc,r4; //+4 JUMP ADDR //+6 -->共有10个字节。
JUMP:0x080bb182:$r4:+2=show_10split_image.bin
这样,您可以跳转到show_10split_image.bin安装位置+ 2的位置。
JUMP:0x080bb182:$NONE=show_10split_image.bin
写入show_10split_image.bin的安装地址,而不是生成跳转代码。
由于它是一个地址,它消耗4个字节
要写入的地址是小尾数格式。
作为一种实用的使用方式,我认为我使用它从设置跳转到代码
//在菜单效果中,输入GNP程序的地址。 //因为它提供了直接值,所以没有寄存器关系,所以$ NONE。 //如果是直接值,则需要将其设置为地址+1,因此+1。 JUMP:0x5C53A8:$NONE:+1=main指南本体.bin
JUMP:0x988c6:$B=0x9893a
在地址0x988c6处生成b 0x9893a的ASM操作码。
b因为是跳跃,所以我不能飞得太远。
b它消耗2个字节,因为它是跳转。
JUMP:0x340cc:$BL=0x988c8
在地址0x340cc处生成bl 0x988c8的ASM操作码。
因为这是跳跃,所以不能飞得太远。
它消耗4个字节,因为它是一个bl跳转。
EXTENDS:0xe30=TEXT //将文本表扩展为0xe30。 TEXT:0x0e01=0x0e01.txt //将0x0e01.txt的内容写入文本ID 0xe01 TEXT:0x0e02=0x0e02.txt TEXT:0x0e00=0x0e00.txt
支持文本表扩展和写入。
但是,截至目前,我们无法扩展其他表格。
NAME=没有武器显示 TYPE=SWITCH COMBO.en=no weapons|ONN|with weapons|OFF ONN:0x0802F5C0=0x00 0x20 0x00 0x20 ONN:0x080D1DE2=0x00 0x20 0x00 0x20 OFF:0x0802F5C0=0xE7 0xF7 0x86 0xF9 OFF:0x080D1DE2=0x44 0xF7 0x75 0xFD
“SWITCH补丁”是addr补丁的进一步发展
当需要使用不同的值写入不同的地址时使用它。
与BIN或EA补丁不同的是,我们处理大约几个字节的较小数据
在这个例子中,显示ON和OFF选项,
如果是ON,则将ONN定义的内容写入地址
如果为OFF,则将由OFF定义的内容写入地址
您可能希望将结构的未使用区域用作补丁的参数
在FEBuilderGBA中,它可以通过在patch目录中创建MOD _ *。txt来使用
IF:0x89268=0x00 0x4B 0x9F 0x46
FORM=UnitForm //它适用于UnitForm(FE 8) J_38=技能1 J_39=技能2 J_49=个人技能 J_38:NAME=J_38_SKILLASSIGNMENT_SCROLL1_B39 J_39:NAME=J_39_SKILLASSIGNMENT_SCROLL2_B38 J_49:NAME=J_49_SKILLASSIGNMENT_MASTERY
但是,由于要设置为MOD的参数是FEBuilderGBA的C#中使用的标签名称,因此有必要了解源代码。
而且,在欧美的改造中,我认为它不是经常使用的地方,而是经常创造出自己的结构。
如果你这么认为,MOD可能是日本重塑中经常使用的一个特征。
FEBuilderGBA.exe [ROM] [--选项=值]
除非您指定了任何选项,否则FEBuilderGBA将显示欢迎屏幕。
你可以通过指定其中一个选项来改变它。
打开指定的ROM文件名称。
如果未指定文件名或者无法读取文件,则会显示“欢迎”屏幕。
这是一样的 [ROM]。
打开上次打开的ROM。
最后一个ROM将是您退出FEBuilderGBA时打开的ROM。
(在过程结束时,记录当前打开的文件名)
强制将ROM作为特定版本打开。
通常情况下,版本与ROM的标题区分开来,但是当您想用特定版本强制打开它时会使用它。
当ROM标头由于某种原因被损坏或者当你想要加载另一个GBA游戏进行调试时使用它
通常你不需要使用它。
版本列表 |
FE8JP |
FE7JP |
FE6 |
FE8U |
FE7U |
强制从详细菜单屏幕开始。
有一些特殊的原因,当你想跳过简单的屏幕菜单时使用它。
通常你不需要使用它。