- 好友
- 3
- 在线时间
- 27 小时
- 最后登录
- 2025-10-1
贵族[MOD作者]
  
- UID
- 3048044
- 第纳尔
- 2244
- 精华
- 0
- 互助
- 21
- 荣誉
- 3
- 贡献
- 20
- 魅力
- 515
- 注册时间
- 2018-12-15
 鲜花( 43)  鸡蛋( 0)
|
大家好啊,我是宇宙人,今天来点大家想看的东西
下面首先解析一下music和sound两个文件的header
###################################################
# header_music.py
# This file contains declarations for music tracks
# DO NOT EDIT THIS FILE! ←不用理会,music_set_situation和music_set_culture两个脚本会直接读取数值,所以理论上来说你可以随便在这个文件里改id和增减常量,但是要注意,增减flag生效的前提是你修改了会调用flag的地方,不然该不生效不生效该报错报错
###################################################
mtf_culture_1 = 0x00000001 ##字面意思,根据指定阵营设定的flag,见下方music脚本指路,在set_culture分区里
mtf_culture_2 = 0x00000002
mtf_culture_3 = 0x00000004
mtf_culture_4 = 0x00000008
mtf_culture_5 = 0x00000010
mtf_culture_6 = 0x00000020
mtf_culture_all = 0x0000003F ##任意势力,主要用于"继续"栏目,根据id猜测是个特殊值,在mod文件中没有记录
##64之后的是额外flag参数
mtf_looping = 0x00000040 ##音乐是否能循环播放,不能的话放完就停,如果符合"持续播放场景"就会一直放,不会随机到别的音乐,只在启动flag里适用
mtf_start_immediately = 0x00000080 ##音乐是否立刻开始,只在启动flag里适用
mtf_persist_until_finished = 0x00000100 ##音乐在播完之前,在符合"持续播放场景"的情况下不会被立刻打断,只在启动flag里适用
##下面的都在music_set_situation分区里,可以看出512之后的都是场景参数
mtf_sit_tavern = 0x00000200 ##酒馆
mtf_sit_fight = 0x00000400 ##默认战斗
mtf_sit_multiplayer_fight = 0x00000800 ##多人战斗
mtf_sit_ambushed = 0x00001000 ##劣势
mtf_sit_town = 0x00002000 ##城镇
mtf_sit_town_infiltrate = 0x00004000 ##潜行
mtf_sit_killed = 0x00008000 ##战斗失败
mtf_sit_travel = 0x00010000 ##大地图旅行
mtf_sit_arena = 0x00020000 ##竞技场
mtf_sit_siege = 0x00040000 ##围城
mtf_sit_night = 0x00080000 ##夜晚
mtf_sit_day = 0x00100000 ##白天
mtf_sit_encounter_hostile = 0x00200000 ##遇敌
mtf_sit_main_title = 0x00400000 ##主界面
mtf_sit_victorious = 0x00800000 ##胜利(可以看出是追加队员,佐证了对下面那个抽象script的判定)
mtf_sit_feast = 0x01000000 ##宴会音乐
mtf_module_track = 0x10000000 ##set this flag for tracks placed under module folder 如果是mod文件夹里的新music加这个tag,不过貌似没啥用就是了
|
下面说明几个关于音乐播放的script
"play_victorious_sound",抽象脚本,打开看会发现原本只打算设定一个胜利音效,不过可能后面想通了变成调用下面那个脚本的胜利flag(层层转包),导致抽象程度剧增
"music_set_situation_with_culture",这个脚本是用的最多的,可以理解成最主要的music相关脚本,用于通过music_set_situation和music_set_culture输出最后的flag,调用过程中会用到下面的脚本(们)
通过在这个脚本上增减内容可以保证你新增的flag能融入原版的flag体系,比如说如果你给场景新增了几首新的bgm而且希望对应场景只播放这些bgm,你就可以在场景里调用这个脚本+你的新flag来保证只会播放你选定的几首bgm
"combat_music_set_situation_with_culture",这个脚本会决定战斗的"状态",默认的flag为mtf_sit_fight,如果敌人总等级比我方兵种总等级的4/3还多,那么将flag转换为mtf_sit_ambushed(是的孩子们,其实这个ambushed和人数没关系,而且是根据场上现存的agent来判定的,就是说如果两边55开你把炮灰放前面也算对面伏击你)
"get_culture_with_party_faction_for_music",这个脚本用于获取遭遇敌人的faction,然后调用下面的脚本
"get_culture_with_faction_for_music",这个脚本会根据上面那个脚本获取的分类,输出对应的music阵营flag,对应上面说明的header编号
接下来说明music的格式,用于理解新增music该怎么加(不过好像已经有很多人解析过这个了)
以开头界面为例,这个music可以分为四个部分:
("mount_and_blade_title_screen", "start.ogg", mtf_sit_main_title|mtf_start_immediately, 0),
1,track名字,你问我为什么是track,因为调用music的时候默认的前缀不叫music_,叫track_,op也是play_track
2,文件名字,放在music文件夹里文件的名字
3,启动flag,在符合条件的情况下,切换到对应的文化和场景有可能会开始播放这个音乐,用开头这个举例子就是—— ——文化:无;适用情景:主界面;特殊flag:立刻开始播放
4,什么样的情况下会延续播放,设定无,这样随便换一个场景/文化就会开始播放别的音乐了
如果没看懂下面再举一个例子
("ambushed_by_nord", "ambushed_by_nord.ogg", mtf_culture_4|mtf_sit_ambushed|mtf_sit_siege, mtf_sit_fight|mtf_sit_multiplayer_fight|mtf_culture_all),
1,字面意思,被诺德人伏击
2,同字面意思,可以在根目录下面找到这个.ogg
3,文化:culture_4,在上面的script指路里可以找到文化为culture_4的条件;适用情景:被伏击/攻城战;特殊flag:无
4,在情景为战斗(比如场上等级局势逆转)/多人战斗/其他任意文化的情况下会持续放完,不会淡出然后播放别的音乐
这要是再看不懂家里得请哈基高了
###################################################
# header_sounds.py
# This file contains declarations for sounds
# DO NOT EDIT THIS FILE! sound文件个人认为没什么修改必要,因为只有各种play操作没什么太花的东西
###################################################
sf_2d = 0x00000001 ##2d,不会随着位置变化
sf_looping = 0x00000002 ##音效是否循环
sf_start_at_random_pos = 0x00000004 ##在随机地点播放,原版唯一一个使用场景是火把音效
sf_stream_from_hd = 0x00000008 ##原版没有使用范例
sf_always_send_via_network = 0x00100000 ##原版没有使用范例
sf_priority_15 = 0x000000f0 ##优先级,影响不同的音效播放时哪个音量大
sf_priority_14 = 0x000000e0
sf_priority_13 = 0x000000d0
sf_priority_12 = 0x000000c0
sf_priority_11 = 0x000000b0
sf_priority_10 = 0x000000a0
sf_priority_9 = 0x00000090
sf_priority_8 = 0x00000080
sf_priority_7 = 0x00000070
sf_priority_6 = 0x00000060
sf_priority_5 = 0x00000050
sf_priority_4 = 0x00000040
sf_priority_3 = 0x00000030
sf_priority_2 = 0x00000020
sf_priority_1 = 0x00000010
sf_vol_15 = 0x00000f00 ##音量,影响音效播放声音大小
sf_vol_14 = 0x00000e00
sf_vol_13 = 0x00000d00
sf_vol_12 = 0x00000c00
sf_vol_11 = 0x00000b00
sf_vol_10 = 0x00000a00
sf_vol_9 = 0x00000900
sf_vol_8 = 0x00000800
sf_vol_7 = 0x00000700
sf_vol_6 = 0x00000600
sf_vol_5 = 0x00000500
sf_vol_4 = 0x00000400
sf_vol_3 = 0x00000300
sf_vol_2 = 0x00000200
sf_vol_1 = 0x00000100
|
sound的修改和添加比较简单,不过有一个特殊点,一个sound可以有多个不同的源文件,在播放的时候随机选一个播放
以下例子:
("horse_walk",sf_priority_3|sf_vol_5, ["horse_walk_1.ogg","horse_walk_2.ogg","horse_walk_3.ogg","horse_walk_4.ogg"]),
翻译过来就是马匹行走,优先级3,音量5,在1/2/3/4四个文件里随机选一个播放
相比music没有太多要说的,具体玩法看op表就可以了
|
|