战团module.ini参数解释-中文版
llqs 发表于 2025-07-23 10:24
浏览 50
回复 0
Mount & Blade 引擎配置文档 (module.ini)
全文翻译 (保留变量名和术语)
起始
The Forge
文档与教程 (Documentation & Tutorials)
Modding 工具 (Modding Tools)
开源资源 (Open Source Resources)
开源代码与工具包 (Open Source Code and Kits)
Warband Modder 下载仓库 (Warband Modder's Download Repository)
知识宝库 - 脚本与工具包库 (Vault of Knowledge - Library of Scripts and Kits)
废料场 - 帖子和文章集合 (Forge Scrap Yard - Thread and Post Collection)
header_operations.py
模块通用参数 (Module General Parameters)
世界地图参数 (World Map Parameters)
战场场景参数 (Battle Scene Parameters)
其他参数与详情 (Other Parameters and Details)
文档 module.ini
INI,是 Initialization 的缩写,是微软用于程序初始化和配置的标准。使用基本的文本编辑器(如记事本)编辑 INI 文件。
该文件始终是本地化和模块化的,包含各种模组配置设置,并告知游戏加载哪些 BRF 文件。以下是 module.ini 中可以设置的选项(按类别排序;
标记 VC 表示由 Viking Conquest 引入,NW 表示由 Napoleonic Wars 引入):
模块通用参数 (Module General Parameters)
版本控制 (Versioning)
• module_name = Calradia
◦ string
◦ 用于命名您的模组。名称将显示在 rgl_log.txt 中,因此为模组命名将使您更容易了解报告错误的玩家正在玩哪个版本。[1]
• module_version = 0
◦ int
◦ 可用于多人游戏和单人游戏(存档)的模组版本控制。
• compatible_module_version = 0
◦ int
◦ 可用于多人游戏模组版本控制。
• compatible_multiplayer_version_no = 1170
◦ int
◦ 当前的多人游戏版本,与 compatible_module_version 一起使用以确定玩家是否可以连接到服务器。
• compatible_savegame_module_version = 0
◦ int
◦ 可用于单人游戏(存档)的模组版本控制。
• compatible_with_warband = 1
◦ boolean
◦ 很可能用于标记可以在 M&B Warband 中运行的原始 M&B 模组。
• operation_set_version = 1.168
◦ float
◦ 如果设置为大于或等于 1.160 的值,则触发 VC 游戏密钥检查。此值可以在游戏内通过操作 get_operation_set_version 调用。
• works_with_version_max = 1011
◦ int
◦ 已弃用,请改用 compatible_savegame_module_version 和 module_version。
• works_with_version_min = 1000
◦ int
◦ 已弃用,请改用 compatible_savegame_module_version 和 module_version。
加载资源 (Loading Resources)
除了模组配置选项外,module.ini 还用于告知引擎加载哪些 .BRF 资源文件,以及在哪里找到它们。选项 load_resource 通常用于从 Native 游戏中加载资源(即文件夹 CommonRes),而 load_mod_resource 和 load_module_resource 被模组制作者用于从模组的资源文件夹加载新添加的资源。
• load_resource = resource_name
◦ 告知引擎该资源 (.BRF) 存在于 */CommonRes/ 或 */(module-name)/Resources/ 文件夹中。它似乎不会增加太多加载时间,但比明确告诉引擎去哪里找效率低。
• load_resource_nofast = resource_name
◦ 与 load_resource 相同,没有区别。
• load_mod_resource = resource_name
◦ 明确告知引擎该资源 (.BRF) 存在于 */(module-name)/Resources/ 文件夹内。这应该会带来更快的加载时间。
• load_module_resource = resource_name
◦ load_mod_resource 的替代语法。
• scan_module_sounds = 0
◦ boolean
◦ 决定引擎是否扫描模组的 */Sounds/ 文件夹。
• scan_module_textures = 0
◦ boolean
◦ 决定引擎是否扫描模组的 */Textures/ 文件夹。
• use_case_insensitive_mesh_searches = 0
◦ boolean
◦ 决定您的模组是否允许对网格名称进行不区分大小写的引用,例如 sword_a 和 Sword_a 被视为相同引用。
启用内容 (Enabling Content)
• has_custom_battle = 0
◦ boolean
◦ 决定“自定义战斗”(Custom Battle) 是否出现在主菜单上。
• has_multiplayer = 0
◦ boolean
◦ 决定“多人游戏”(Multiplayer) 是否出现在主菜单上。
• has_single_player = 1
◦ boolean
◦ 决定“新游戏”(New Game) 和“加载游戏”(Load Game) 是否出现在主菜单上。
• has_tutorial = 0
◦ boolean
◦ 决定“教程”(Tutorial) 是否出现在主菜单上。
• enable_quick_battles = 1
◦ boolean
◦ 决定“快速战斗”(Quick Battles) 是否出现在主菜单上。快速战斗是旧版 1.011 的自定义战斗,因此此标志仅在 Vanilla M&B 中有效。
世界地图参数 (World Map Parameters)
地图常量 (Map Constants)
• map_max_distance = 175.0
◦ float
◦ 世界地图上最大的缩放量,最大值似乎是 251。
• map_min_x = -180
◦ int
◦ 决定世界地图的东部边界。地图可以继续延伸超出此边界,但镜头将无法越过此边界。
• map_max_x = 180
◦ int
◦ 决定世界地图的西部边界。地图可以继续延伸超出此边界,但镜头将无法越过此边界。
• map_min_y = -145
◦ int
◦ 决定世界地图的北部边界。地图可以继续延伸超出此边界,但镜头将无法越过此边界。
• map_max_y = 145
◦ int
◦ 决定世界地图的南部边界。地图可以继续延伸超出此边界,但镜头将无法越过此边界。
• map_min_elevation = 0.2
◦ float
◦ 设置相机在世界地图上距离地形的最小距离。也控制角度。
• map_max_elevation = 1.0
◦ float
◦ 设置相机在世界地图上距离地形的最大距离。
• map_river_direction = 140
◦ int
◦ 用于确定世界地图河流着色器流动方向的角度。
• map_river_speed_x = 0.01
◦ float
◦ 用于确定世界地图河流着色器在 X 轴上的流动速度。
• map_river_speed_y = -0.01
◦ float
◦ 用于确定世界地图河流着色器在 Y 轴上的流动速度。
• map_sea_direction = -40
◦ int
◦ 海浪泡沫方向的角度。
• map_sea_wave_rotation = 300
◦ angle
◦ module.ini 注释说“这是海面上可见撕裂伪影的地方”。
• map_sea_speed_x = 0.02
◦ float
◦ 用于确定世界地图海洋着色器在 X 轴上的流动速度。
• map_sea_speed_y = -0.02
◦ float
◦ 用于确定世界地图海洋着色器在 Y 轴上的流动速度。
与世界地图地形一样,地图树木模型的 map_trees 材质是硬编码的,无论您在相应的 brf 文件中设置什么。
对于树木类型:游戏引擎存储了下面选项中设置的树木类型数量,并尝试在资源文件中找到尽可能多的树木类型网格。
brf 文件中的网格需要根据树木类型(普通、沙漠、雪地、草原)相应地命名,并附加一个字符,例如普通树为 map_tree_a、map_tree_b 等,雪地地形中的树为 snow_tree_a、snow_tree_b 等。
如果游戏引擎根据 module.ini 设置预期的网格数量不足,则会在 rgl_log.txt 中出现警告“无法找到地图 [snow, desert, steppe] 树网格 %s”。
游戏引擎硬编码规定了在哪种地形上使用哪种树木类型。
```
rglMesh *treeMeshes[64];
rglMesh *snowTreeMeshes[64];
rglMesh *steppeTreeMeshes[64];
rglMesh *desertTreeMeshes[64];
ZeroMemory(treeMeshes, sizeof(treeMeshes));
ZeroMemory(snowTreeMeshes, sizeof(snowTreeMeshes));
ZeroMemory(steppeTreeMeshes, sizeof(steppeTreeMeshes));
ZeroMemory(desertTreeMeshes, sizeof(desertTreeMeshes));
g_moduleSettings.iMapTreeTypes = rglMin(g_moduleSettings.iMapTreeTypes, 64);
g_moduleSettings.iMapSnowTreeTypes = rglMin(g_moduleSettings.iMapSnowTreeTypes, 64);
g_moduleSettings.iMapSteppeTreeTypes = rglMin(g_moduleSettings.iMapSteppeTreeTypes, 64);
g_moduleSettings.iMapDesertTreeTypes = rglMin(g_moduleSettings.iMapDesertTreeTypes, 64);
rglString treeMeshName;
for (int i = 0; i < g_moduleSettings.iMapTreeTypes; ++i)
{
treeMeshName = "map_tree_";
treeMeshName.append('a' + i);
treeMeshes[i] = g_resourceManager.getMesh(treeMeshName);
if (!treeMeshes[i])
rglWarning("Unable to find map tree mesh %s", treeMeshName.c_str());
}
for (int i = 0; i < g_moduleSettings.iMapSnowTreeTypes; ++i)
{
treeMeshName = "snow_tree_";
treeMeshName.append('a' + i);
snowTreeMeshes[i] = g_resourceManager.getMesh(treeMeshName);
if (!snowTreeMeshes[i])
rglWarning("Unable to find map snow tree mesh %s", treeMeshName.c_str());
}
for (int i = 0; i < g_moduleSettings.iMapSteppeTreeTypes; ++i)
{
treeMeshName = "steppe_tree_";
treeMeshName.append('a' + i);
steppeTreeMeshes[i] = g_resourceManager.getMesh(treeMeshName);
if (!steppeTreeMeshes[i])
rglWarning("Unable to find map steppe tree mesh %s", treeMeshName.c_str());
}
for (int i = 0; i < g_moduleSettings.iMapDesertTreeTypes; ++i)
{
treeMeshName = "desert_tree_";
treeMeshName.append('a' + i);
desertTreeMeshes[i] = g_resourceManager.getMesh(treeMeshName);
if (!desertTreeMeshes[i])
rglWarning("Unable to find map desert tree mesh %s", treeMeshName.c_str());
}
switch (face->m_regionType)
{
case rt_forest:
treeSubMesh = treeMeshes[rglRandMod(g_moduleSettings.iMapTreeTypes)];
break;
case rt_snow_forest:
treeSubMesh = snowTreeMeshes[rglRandMod(g_moduleSettings.iMapSnowTreeTypes)];
break;
case rt_steppe_forest:
treeSubMesh = steppeTreeMeshes[rglRandMod(g_moduleSettings.iMapSteppeTreeTypes)];
break;
case rt_desert_forest:
treeSubMesh = desertTreeMeshes[rglRandMod(g_moduleSettings.iMapDesertTreeTypes)];
break;
}
```
• map_tree_types = 17
◦ int
◦ 是出现在普通地形上的树木类型数量,使用网格 map_tree_a 到 map_tree_r 作为地图树。等于地图将随机循环使用的森林树模型数量。
• map_desert_tree_types = 4
◦ int
◦ 是出现在沙漠地形上的树木类型数量,等于地图将随机循环使用的沙漠树模型数量。
• map_snow_tree_types = 3
◦ int
◦ 是出现在雪地地形上的树木类型数量,等于地图将随机循环使用的雪地树模型数量。
• map_steppe_tree_types = 5
◦ int
◦ 是出现在草原地形上的树木类型数量,等于地图将随机循环使用的草原树模型数量。
时间与日期参数 (Time and Date Parameters)
• starting_day
◦ int
◦ 已弃用,改用脚本 game_get_date_text。
• starting_month
◦ int
◦ 已弃用,改用脚本 game_get_date_text。
• starting_year
◦ int
◦ 已弃用,改用脚本 game_get_date_text。
• time_multiplier = 0.25
◦ float
◦ 地图界面上时间流逝的速度。默认值为 0.25 时,1 个游戏小时(GAME hour)等于 4 秒真实时间(REAL time),因此游戏内时间比真实生活慢 4 倍(游戏内每小时等于 1 秒真实时间除以 time_multiplier 的值)。因此,值 2.4 意味着 1 个游戏日需要 10 秒真实时间(或通过 CTRL+SPACE 为 1 秒)。
升级相关参数 (Leveling-related Parameters)
• attribute_points_per_level = 0.195
◦ float
◦ VC,设置每升一级获得的属性点数,在 Native 中为 1。
• attribute_required_per_skill_level = 2
◦ int
◦ VC,设置每点技能等级所需的属性点数,在 Native 中为 3。根据 Vjeffae 的说法,游戏内最大技能等级等于当前基础属性等级除以该值(向下取整)。
• can_run_faster_with_skills = 0
◦ boolean
◦ 决定敏捷(agility)和运动(athletics)如何影响奔跑速度。以下是引擎公式:
```
if (rglConfig::Battle::bCanRunFasterWithSkills)
troopFactor = ((agility + athletics * 6.0f + 25.0f) * 30.0f / (weightFactor + 30.0f) + 90.0f) / 100.0f;
else
troopFactor = ((agility * 0.7f + athletics * 3.0f + 25.0f) * 70.0f / (weightFactor + 70.0f) + 90.0f) / 100.0f;
```
为便于阅读:
```
if can_run_faster_with_skills = 1
troopFactor = ((agility + athletics * 6 + 25) * 30 / (weightFactor + 30) + 90) / 100;
else
troopFactor = ((agility * 0.7 + athletics * 3 + 25) * 70 / (weightFactor + 70) + 90) / 100;
```
• hero_wounded_treshold = 15
◦ int
◦ 决定英雄出现在战斗中并贡献队伍技能所需的最小生命值(hitpoints)。
• hero_xp_multiplier = 2.0
◦ float
◦ 设置英雄通过杀死敌人获得的经验值(XP)乘数(最大值可能是 10 或 15)。
• level_boundary_multiplier = 2.0
◦ float
◦ VC,设置士兵升级所需经验的乘数,在 Native 中为 1。
• player_wounded_treshold = 5
◦ int
◦ 决定玩家出现在战斗中并贡献队伍技能所需的最小生命值(hitpoints)。
• player_xp_multiplier = 2.0
◦ float
◦ 设置玩家通过杀死敌人获得的经验值(XP)乘数(最大值可能是 10 或 15)。
• regulars_xp_multiplier = 3.0
◦ float
◦ 设置普通士兵通过杀死敌人获得的经验值(XP)乘数(最大值可能是 10 或 15)。
• skill_leadership_bonus = 3
◦ int
◦ 设置每点统御(leadership)技能点可为玩家的队伍增加多少额外的士兵。
• skill_points_per_level = 2
◦ int
◦ VC,设置每升一级获得的技能点数,在 Native 中为 1。
• skill_prisoner_management_bonus = 5
◦ int
◦ 设置每点俘虏管理(prisoner management)技能点可为玩家的队伍增加多少额外的俘虏。
• track_spotting_multiplier = 0.8
◦ float
◦ 跟踪(tracking)技能的乘数。如果设置为 0,则无论技能如何,世界地图上都不会出现跟踪标记。
• weapon_points_per_level = 5
◦ int
◦ VC,设置每升一级获得的武器熟练度(weapon proficiency)点数,在 Native 中为 10。
物品参数 (Item Parameters)
• display_wp_archery = 0
◦ boolean
◦ 决定弓箭(Archery)武器熟练度在角色菜单中的可见性,但武器和使用它们的能力在游戏中仍然存在。即使显示选项设置为 0,您实际上也可以升级它们。[2]
• display_wp_crossbows = 0
◦ boolean
◦ 决定弩(Crossbows)武器熟练度在角色菜单中的可见性,但武器和使用它们的能力在游戏中仍然存在。即使显示选项设置为 0,您实际上也可以升级它们。
• display_wp_firearms = 0
◦ boolean
◦ 决定火器(Firearms)武器熟练度在角色菜单中的可见性,但武器和使用它们的能力在游戏中仍然存在。即使显示选项设置为 0,您实际上也可以升级它们。
• display_wp_one_handed = 0
◦ boolean
◦ 决定单手武器(One-Handed Weapons)熟练度在角色菜单中的可见性,但武器和使用它们的能力在游戏中仍然存在。即使显示选项设置为 0,您实际上也可以升级它们。
• display_wp_polearms = 0
◦ boolean
◦ 决定长杆武器(Polearms)熟练度在角色菜单中的可见性,但武器和使用它们的能力在游戏中仍然存在。即使显示选项设置为 0,您实际上也可以升级它们。
• display_wp_throwing = 0
◦ boolean
◦ 决定投掷武器(Throwing)熟练度在角色菜单中的可见性,但武器和使用它们的能力在游戏中仍然存在。即使显示选项设置为 0,您实际上也可以升级它们。
• display_wp_two_handed = 0
◦ boolean
◦ 决定双手武器(Two-Handed Weapons)熟练度在角色菜单中的可见性,但武器和使用它们的能力在游戏中仍然存在。即使显示选项设置为 0,您实际上也可以升级它们。
• meek_modifier_speed_bonus = 0
◦ float
◦ 设置具有温顺(meek)修饰符的马匹的速度修正值。
• timid_modifier_speed_bonus = 0
◦ float
◦ 设置具有胆小(timid)修饰符的马匹的速度修正值。
• use_crossbow_as_firearm = 0
◦ boolean
◦ 大部分已弃用,用于 WFaS 或旧版模组中的变通方法,其中使用 itp_crossbow 而不是 itp_musket 和 itp_pistol。[3] 将弩的装填动画替换为火枪的装填动画。粒子效果和声音需要使用物品触发器 ti_on_weapon_attack 手动添加。
队伍参数 (Party Parameters)
• auto_compute_party_radius = 1
◦ boolean
◦ VC,使用队伍图标模型来确定队伍半径。对于带有大型城镇图标的模组尤其重要,因为它允许队伍在预期的位置与它们交互,而不是图标的中心。没有它,当图标的中心离开屏幕时,即使它们仍然应该可见,图标也会消失。对于极大的图标,它无法避免 100% 的视觉问题,因为相机会改变视角。您需要在游戏中对大型图标进行测试,以确保它们不会太大。
• base_companion_limit = 20
◦ int
◦ 没有统御技能时玩家队伍中同伴的最大数量。
• disable_disband_on_terrain_type = 0
◦ int
◦ 用于确保队伍不能在某个特定地块(如可通行的水域)上解散。可能的区域类型(rt)(只能选择一个)如下:
```
rt_ocean = 0,
rt_mountain = 1,
rt_steppe = 2,
rt_plain = 3,
rt_snow = 4,
rt_desert = 5,
rt_bridge = 7,
rt_river = 8,
rt_mountain_forest = 9,
rt_steppe_forest = 10,
rt_forest = 11,
rt_snow_forest = 12,
rt_desert_forest = 13,
rt_shore = 21,
rt_foam = 22,
rt_waves = 23,
```
• seeing_range = 6.5
◦ float
◦ 决定队伍在世界地图上的默认视野范围(seeing range),即可见半径。
• show_party_ids_instead_of_names = 0
◦ boolean
◦ 决定是否在队伍上方显示其 ID 值而不是名称。更改为 1 以便于模组开发。
• use_strict_pathfinding_for_ships = 1
◦ boolean
◦ VC,使船只保持在海上进行海对海航线。
游戏菜单参数 (Game Menus Parameters)
• auto_create_note_indices = 0
◦ boolean
◦ 决定是否自动搜索所有部队(troops)/阵营(factions)/城镇(towns)以检查它们是否有注释(note)文本。
• disable_force_leaving_conversations = 1
◦ boolean
◦ 禁用对话中的 TAB 键结束(TAB end)。
• show_troop_upgrades_button = 0
◦ boolean
◦ VC,决定模组是否显示士兵升级(troop upgrade)按钮。
• show_quest_notes = 1
◦ boolean
◦ 决定任务(quest)屏幕上是否显示注释(notes)。
其他 (Others)
• can_adjust_camera_distance = 1
◦ boolean
◦ 决定玩家是否可以使用小键盘 + (numpad +) 和小键盘 - (numpad -) 来调整默认相机位置。
• has_accessories_for_female = 0
◦ boolean
◦ 在角色创建屏幕(Character Creation Screen)上,如果玩家部队被分配到第二个皮肤条目(通常是女性),则将字符串 ui_change_beard 替换为 ui_change_accessories。请注意,仅当第二个皮肤条目的胡须(beard)网格列表不为空时,该字符串才会显示。
• limit_hair_colors = 1
◦ boolean
◦ 如果您没有额外的头发纹理,则设置为 1。Native 中的每个人类皮肤定义都使用 hair_blonde 以及顶点着色(vertex coloring)。如果您将此值设置为 0,则游戏期望找到例如名为 hair_red、beard_black 等的材质和纹理。
• show_faction_color = 1
◦ boolean
◦ 决定世界地图上的队伍名称是否显示其阵营颜色(1)或不显示(0)。在后一种情况下,名称显示为一种棕白色。
战场场景参数 (Battle Scene Parameters)
战斗参数 (Combat Parameters)
• crush_through_treshold = 2.4
◦ float
◦ 决定需要多少伤害才能击穿(Crush Through)在其相应物品条目中包含标志 itp_crush_through 的武器上的格挡(overhead blocks)。
• shield_penetration_factor = 3.0
◦ float
◦ 与 shield_penetration_offset 结合使用,以确定导弹(箭矢/子弹)是否足够强大以穿透盾牌。
• shield_penetration_offset = 30.0
◦ float
◦ 与 shield_penetration_factor 结合使用,以确定导弹是否足够强大以穿透盾牌。
根据 module.ini 注释,您可以通过编辑以下值来修改伤害系统:前三个值(soak)决定由于护甲而直接从伤害中减去的量。接下来的三个值(reduction)决定伤害的百分比减免。额外穿透(extra_penetration)因子的作用相同,仅对在其物品条目中包含标志 itp_extra_penetration 的武器有效。此外,soak 可以是负的,意味着它实际上会增加伤害,不确定 reduction 是否也是如此,但理论上应该以相同的方式工作,但程度较轻。
• armor_soak_factor_against_cut = 0.8
◦ float
◦ 决定由于护甲而从砍伤(cut damage)中直接减去的量。
• armor_soak_factor_against_pierce = 0.65
◦ float
◦ 决定由于护甲而从刺伤(pierce damage)中直接减去的量。
• armor_soak_factor_against_blunt = 0.5
◦ float
◦ 决定由于护甲而从钝伤(blunt damage)中直接减去的量。
• armor_reduction_factor_against_cut = 1.0
◦ float
◦ 决定砍伤(cut damage)的百分比减免。
• armor_reduction_factor_against_pierce = 0.5
◦ float
◦ 决定刺伤(pierce damage)的百分比减免。
• armor_reduction_factor_against_blunt = 0.75
◦ float
◦ 决定钝伤(blunt damage)的百分比减免。
• extra_penetration_factor_reduction = 1.0
◦ float
◦ 决定对带有 itp_extra_penetration 标志的武器的减免因子(reduction factor)。最小值 0 表示护甲将被忽略。在 Native 中没有设置额外穿透标志,因此设置为 '1.0' 以保持其无效。
• extra_penetration_factor_soak = 1.0
◦ float
◦ 决定对带有 itp_extra_penetration 标志的武器的吸收因子(soak factor)。最小值 0 表示护甲将被忽略。在 Native 中没有设置额外穿透标志,因此设置为 '1.0' 以保持其无效。
根据 module.ini 注释,低于此阈值的伤害不会中断近战攻击。
• damage_interrupt_attack_threshold = 3.0
◦ float
◦ 低于此值的伤害不会中断近战攻击。
• damage_interrupt_attack_threshold_mp = 1.0
◦ float
◦ 在多人游戏中,低于此值的伤害不会中断近战攻击。
• ai_decide_direction_according_to_damage = 1
◦ boolean
◦ 设置为 1 时,AI 在决定使用什么攻击时会考虑每个方向攻击的伤害。
• apply_all_ammo_damage_modifiers = 1
◦ boolean
◦ VC,允许所有弹药应用钝器/锋利/切割(Blunt/Sharp/Cutting)修饰符伤害。
• brace_rotation_limit = 0.012
◦ float
◦ 影响带有 itp_is_pike 标志的物品,用于限制架矛(Bracing spears)时的旋转速度(例如在 NW 中)。如果绝对转向量小于 0.01 或设置的值(取较高者),游戏引擎播放长矛蹲伏动画(anim_crouch_pike),否则播放法杖蹲伏动画(anim_crouch_staff)。显然不能提供低于默认值 0.01 的值,如果您提供一个较大的值(似乎 0.5 就足够),您可以完全覆盖取消效果。
• couched_lance_damage_multiplier = 0.65
◦ float
◦ 决定骑枪冲刺(Couched lance)会造成多少额外伤害。在 Native 中设置为 0.65。
• disable_attack_while_jumping = 0
◦ boolean
◦ 决定代理(agent)是否可以在跳跃时攻击,以及当代理开始跳跃时是否应中断攻击。
• disable_zoom = 0
◦ boolean
◦ 决定玩家是否可以使用 gk_zoom(通常对应 'shift')来缩小相机的视野(FOV)。可以在游戏内通过操作 is_zoom_disabled 进行检查。
• fall_damage_multiplier = 1.0
◦ float
◦ 用于确定坠落造成的伤害量。滞空时间(airtime)可能是坠落伤害的决定因素。[4]
• horse_charge_damage_multiplier = 1.0
◦ float
◦ 用于缩放马匹撞击人类代理时造成的冲锋伤害(charge damage)。
• lance_pike_effect_speed = 3.0
◦ float
◦ 决定触发长矛动画 anim_horse_rear 所需的马匹速度。
• melee_damage_speed_power = 2.0
◦ float
◦ 将 speed_power 设置为 2.0 会使伤害与武器速度的平方成比例。您可以将其设置为 1.0 以使其线性缩放。
• missile_damage_speed_power = 1.9
◦ float
◦ 将 speed_power 设置为 2.0 会使伤害与导弹速度的平方成比例。您可以将其设置为 1.0 以使其线性缩放。
• no_friendly_fire_for_bots = 0
◦ boolean
◦ 决定多人游戏中 AI 代理是否会造成友军伤害(friendly fire)。
战场参数 (Battle Parameters)
• battle_size_min = 150
◦ int
◦ VC;模组的最小战场规模。
• battle_size_max = 750
◦ int
◦ VC,模组的最大战场规模。
• far_plane_distance = 5000
◦ float
◦ 场景内部渲染平面从相机延伸出的单位数量(以厘米计),默认为 1250。这是用户渲染对象的最大距离(以米计)。如果您想使用更大/更好/更长的边界地形并让玩家能够看到它们,请增大此值。
物理参数 (Physics Parameters)
• air_friction_arrow = 0.002
◦ float
◦ 设置阻力系数(drag coefficient)。在 Native 中该值设置为 0.002。
• air_friction_bullet = 0.002
◦ float
◦ 设置阻力系数,但专门针对火器发射的导弹。在 Native 中该值设置为 0.002。
其他 (Others)
• consider_weapon_length_for_weapon_quality = 1
◦ boolean
◦ VC,使代理在选择其物品栏中的武器时考虑武器的长度,从而增加选择较长武器的概率。
• disable_moveable_flag_optimization = 0
◦ boolean
◦ 为所有场景道具(scene props)分配 '1' 以启用可移动物理;它们将不需要 sokf_moveable 标志。[5]
• mission_object_prune_time = 180
◦ int
◦ 像射出的箭或掉落的物品这样的场景道具(scene_prop)从场景中移除所需的秒数。将其设置为 0 将防止物品在任务期间消失,但出于性能原因不推荐这样做。请注意,这不适用于通过代码生成的物品。[6]
其他参数与详情 (Other Parameters and Details)
启用功能 (Enabling Features)
• can_crouch = 0
◦ boolean
◦ 决定人类代理是否可以蹲下(crouch)。您需要将字符串 'ui_crouch|Crouch:' 添加到您的 ui.csv 中,以便在游戏按键配置(Gamekey config)菜单中正确显示。[7]
• can_objects_make_sound = 0
◦ boolean
◦ 决定场景道具(scene props)是否可以在场景内发出声音。
• can_reload_while_moving = 0
◦ boolean
◦ 决定代理是否可以在奔跑或行走时重新装填弩。不影响马背上。还需要启用 use_crossbows_as_firearms。[8]
• can_use_scene_props_in_single_player = 0
◦ boolean
◦ 决定单人游戏代理是否可以像在多人游戏模式中一样与场景道具交互(使用门和吊桥)。
• disable_food_slot = 1
◦ boolean
◦ 大部分已弃用,如果您想在物品栏窗口中保留食物槽(food slot),可以更改为 0。用于 M&B 的非常旧的版本(在 Warband 中仍然有效!)以选择队伍可以吃什么食物物品。将马放入其中会让马被屠宰。
• has_forced_particles = 0
◦ boolean
◦ 允许模组“强制”粒子。可能用于关闭粒子效果会给玩家带来不应有的优势的情况,例如浓密的火枪烟雾。
• horses_rear_with_attack = 1
◦ boolean
◦ 决定马匹在受到足够伤害时是否会扬起前蹄(rear)。
• horses_try_running_away = 0
◦ boolean
◦ 决定无骑手的马匹代理是否会尝试远离具有攻击性的代理。
• num_hints = 12
◦ int
◦ 二级加载屏幕上可见的提示总数。
• shorter_pistol_aiming = 1
◦ boolean
◦ VC,将手枪添加到例外中,就像弩和火枪一样。
• use_advanced_formation = 0
◦ boolean
◦ 决定模组是否使用 Native 的来自 NW/WFaS 的高级阵型(1) 还是 Native 的阵型(0)。这些为与阵型和武器使用相关的命令菜单添加了扩展。玩家可以让士兵排成一行到五行,并命令他们的弓箭手按他们的命令开火。为此需要在 ui.csv 中添加一些行。[9] 菜单命令如下:[10]
```
ui_order_form_1_row|Form one row
ui_order_form_2_row|Form two rows
ui_order_form_3_row|Form three rows
ui_order_form_4_row|Form four rows
ui_order_form_5_row|Form five rows
ui_order_button_fire_at_my_command|Fire at my command
ui_order_button_all_fire_now|All, Fire now
ui_order_button_left_fire_now|Left, Fire now
ui_order_button_middle_fire_now|Middle, Fire now
ui_order_button_right_fire_now|Right, Fire now
ui_order_button_weapon_usage_orders|Equipment orders
ui_order_button_use_melee_weapons|Use melee weapons
ui_order_button_use_ranged_weapons|Use ranged weapons
```
对于喊话命令显示:
```
ui_form_1_row_e_|%s, Form one row
ui_form_2_row_e_|%s, Form two rows
ui_form_3_row_e_|%s, Form three rows
ui_form_4_row_e_|%s, Form four rows
ui_form_5_row_e_|%s, Form five rows
ui_fire_at_my_command_e_|%s, Fire at my command
ui_all_fire_now_e_|%s, fire now
ui_left_fire_now_e_|%s, left side fire
ui_middle_fire_now_e_|%s, middle fire
ui_right_fire_now_e_|%s, right side fire
ui_use_melee_weapons_e_|%s, use melee weapons
ui_use_ranged_weapons_e_|%s, use ranged weapons
```
• use_phased_reload = 0
◦ boolean
◦ 决定火枪和手枪的装填是否可以分阶段(phased)完成。这意味着如果您的装填被打断,您将从装填停止的阶段开始。如果您对远程武器使用 itcf_reload_musket 或 itcf_reload_pistol,则分阶段装填有效。
图形参数 (Graphical Parameters)
• add_set_neighbors_to_tangent_flag_to_shader = 1
◦ boolean
◦ 着色器(Shader)参数。似乎传递有关相邻面切线(tangents)的信息。在 Native 中未找到示例。
• blood_multiplier = 6.0
◦ float
◦ VC,决定血液粒子效果的数量(和大小?)。
• disable_high_hdr = 0
◦ boolean
◦ 如果设置为 '1' 则禁用模组中的高 HDR 效果。
• fix_gamma_on_dx7_operation_colors = 1
◦ boolean
◦ 着色器参数,用于 set_startup_ambient_light 和 set_startup_ground_ambient_light 操作。以下是反编译代码:
```
if ( !rgl_HLSL_mode && dword_AA35C4C )
{
*(float *)v2430 = a2;
v1304 = sqrtf(*(float *)v2430);
v1305 = cur_game;
*(float *)(v2460 + 408) = v1304;
*((float *)v1305 + 103) = sqrtf(*((float *)v1305 + 103));
v1306 = cur_game;
a2 = sqrtf(*((float *)cur_game + 104));
v1298 = cur_mission;
LODWORD(v2460) = cur_game;
*((float *)v1306 + 104) = a2;
}
```
• use_bordered_shadow_sampler = 1
◦ boolean
◦ 着色器参数。引擎未使用。
• screenshot_format = 1
◦ boolean
◦ 允许模组制作者设置按下 Ctrl + Insert 时的屏幕截图文件格式,这些截图保存在 .../Mount&Blade Warband/Screenshots/<模组名称> 中。设置 0 为 jpg(默认),1 为 png,2 为 bmp。[11]
多人游戏参数 (Multiplayer Parameters)
• multiplayer_walk_enabled = 0
◦ boolean
◦ 决定多人服务器上的玩家是否可以使用 gk_walk 来行走而不是奔跑。对于 NW 风格的线列战(line battles)很重要。disable_zoom 需要设置为 1,否则缩放会在 'shift' 上优先(缩放玩家总是行走,您只是在缩放禁用时看到它?需研究)。
• restrict_attacks_more_in_multiplayer = 0
◦ boolean
◦ 如果代理正在刺击(stabbing)或做过头攻击(overhead attack),那么旋转速度的限制将设置为 11(如果设置为 1)或 16(如果设置为 0,默认值)。这在多人游戏中强制了更严格的攻击方法,应该能够将连招(spamming)和佯攻(feinting)保持在最低限度。
• show_multiplayer_gold = 0
◦ boolean
◦ 决定是否在多人游戏中显示玩家的金币。只会影响显示金币数量的文本,金币图标本身仍会出现。
• sync_block_directions = 0
◦ boolean
◦ 决定格挡方向(block directions)是否在客户端和服务器之间同步。
• sync_ragdoll_effects = 0
◦ boolean
◦ 决定布娃娃效果(ragdoll effects)是否在客户端和服务器之间同步。
性能与日志 (Performance and Logs)
• dont_supress_initial_warnings = 1
◦ boolean
◦ 应设置为 1 用于调试,0 用于公开发布版。它用于在 rgl_log.txt 中隐藏模组的加载警告,如下所示:
rgl_post_warning_line: WARNING: Unable to find material for mesh prt_mod_weapon_aim
• give_performance_warnings = 1
◦ boolean
◦ 如果启用,它会为动态物理对象上过于复杂的碰撞网格触发警告消息。它会在适当的时候给出警告 “Default game_variables.txt cannot be loaded, make sure you have Native module installed or set all game variables!” 和 “Performance Warning: Using dynamic physics with triangular meshes can decrease performance!”。
• maximum_number_of_notification_messages = 4
◦ int
◦ VC,战斗中的消息数量,常见为 10。
• reduce_texture_loader_memory_usage = 0
◦ boolean
◦ 应通过使其多线程来改善加载时间。
• supports_directx_7 = 1
◦ boolean
◦ 决定您的模组是否支持 directx7 模式。对于非常旧的 PC 是必需的。
• use_scene_unloading = 1
◦ boolean
◦ VC,一旦您离开场景,它就会从您的计算机 RAM 中卸载。如果您想快速返回此场景,则必须再次加载它。频繁访问的场景加载会更慢,但会节省一些 RAM。
• use_texture_degration_cache = 0
◦ boolean
◦ 应改善加载时间但会生成缓存文件。当您切换出游戏时间过长时,游戏会卸载大部分纹理并用那些微纹理(microtextures)替换它们。在早期版本中也是如此,但游戏没有将它们保存到磁盘。[12]
存档 (Savegames)
• dont_load_regular_troop_inventories = 1
◦ boolean
◦ 决定游戏是否也为普通士兵(即非英雄)保存物品栏(inventories)。此外,存档会稍微大一些,并可能导致崩溃。
备注与来源 (Remarks and Sources):
```
[1] kalarhan, Tweaks to modules.ini.
[2] Credits to dstn for testing all display_wp_* settings..
[3] Alternatively one can also add a new firearm category by replacing all crossbow related sounds, animations and proficienies as needed. Some notes are given here by HokieBT, Modding Q&A.
[4] Somebody, Modding Q&A.
[5] Setting that flag to 1 prevented an usual 1.143 game version crash. For more details read up at Siege Camp Icon.
[6] _Sebastian_, Modding Q&A.
[7] dunde, Modding Q&A.
[8] DarthMongol, Mount & Blade Modding Discord.
[9] dunde, Modding Q&A.
[10] Taken from reddit.
[11] The screenshot function seems to be broken when playing with Linux; Noxbru, Mount & Blade Modding Discord.
[12] jacobhinds, Modding Q&A.
```
致谢 野生链接合集 (Credits Wild Link Collection)
原网址 (Original URL): https://earendil_ardamire.gitlab.io/modding-guide
全部评论