第二章 vehicle---车头篇
2.1 车体文件
从BASE.SCS中展开vehicle,有以下几个文件夹:(选取V1.03A的BASE.SCS)
它们分别表示:ai:AI车辆,driver:司机,interior:内饰,trailer:货柜,truck:卡车头,wheel:轮子。
再展开AI,可以看到:
其中,勾选到的内容:definition和traffic_storage.sii可谓是AI文件夹里的两大“护法”,它们属于筋骨文件,其它的属于实体文件。其它文件夹里面的请与此类推,比如interior,trailer,truck文件夹里面的相关筋骨文件,它们的作用和操作方法都是一样的。
公理二:18WOS的 BASE.SCS中的车体文件分为两大部分,一部分是实体文件,另一部分是引导文件,它们相辅相成,缺一不可。其中,在definition里面的 xxx.sii和xxx_storage.sii称为引导文件,亦称做筋骨文件,其它的有相关车名代号的文件夹里面的文件均是实体文件。
HNR第一定律:在18WOS的BASE.SCS中的车体文件中,实体文件由definition里面的xxx.sii文件引导,definition里面的xxx.sii文件由xxx_storage.sii文件引导。它们互相关联紧密。
推论一:在一个车体文件中,如果仅有实体文件和或xxx.sii文件,游戏仍然可以进行,但它们形同虚设,相关车体并不会在游戏中显示;
推论二:在一个车体文件中,如果仅有xxx_storage.sii文件,而没有相关的xxx.sii文件和实体文件,游戏将在进入期间呈假死状态;
推论三:在一个车体文件中,如果仅有xxx_storage.sii文件和xxx.sii文件,而没有相关的实体文件,游戏将在运行中报错。
在这里,车体文件不仅仅是可驾驶车头文件,它还包括AI车头,内饰,轮子,货柜,甚至利用推广论,它还表示以后将要说到的公司实体。
例1:现有一MOD:truck_z_kk100lf3.scs,将其放到MOD文件夹里面,进入游戏没有显示相关车头,展开此MOD,发现在 vehicle--truck文件夹里没有truck_storage.sii文件,只有相关实体:kk100lf3文件夹和definition文件夹,现将definition打开,发现里面有kk100lf3.sii,kk100lf3_traffic.sii两个文件,根据上述,可知,问题出在缺少最终引导文件:truck_storage.sii。到哪里寻找这个文件呢?假设MOD文件夹里面只有这一个MOD,打开游戏根目录的 BASE.SCS,依次展开:vehicle--truck,好了,发现truck_storage.sii,将其解压到任一临时文件夹中,用记事本或者写字板打开,在里面加入这样一行语句:“@include "definition/kk100lf3.sii"要顺着格式,然后保存。将此truck_storage.sii文件封装到原MOD中即可。封装时应严格按照Mod制作一致性定理进行,即在加入到原MOD中时,其外面必需先套上truck,vehicle两个文件夹,注意内外顺序,然后根据Mod制作第三定则:Mod的封装必须用.ZIP并采取“存储”的模式,这样制作完毕,你就可以在游戏中看到这台车头了。至于如何封装,可以采取拖拽的方式,或者先打开原MOD,添加这个文件即可。请思考:kk100lf3_traffic.sii文件是用来干什么的?
2.2引导文件详细讲解
根据2.1,不难把vehicle文件夹里面的所有引导文件找出来,它们分别存在于ai,interior,trailer,truck这些文件夹里面,作用分别代表着AI车辆的引导,可驾驶车头车内内饰的引导,可拉货柜以及AI货柜的引导,可驾驶车头以及AI车头的引导。
2.2.1 AI的引导文件
先来分析definition里面的,展开definition文件夹,可以看到:
现以ambulance.sii为例,说明里面各行语句的具体作用。打开ambulance.sii(AI救护车):
traffic_vehicle_data: traffic.ambulance
交通车辆数据指向:ambulance(这行语句非常关键,后文将详细讲解它的妙用)
{
model: "/vehicle/ai/ambulance/ambulance.pmd"
实体文件指向:/vehicle/ai/ambulance/ambulance.pmd(.pmd是实体文件的筋骨,ZM制作的核心其实就是它)
lod: "/vehicle/ai/ambulance/lod.pmd"
AI车辆辅助引导指向:/vehicle/ai/ambulance/lod.pmd(这个在后文将重点讲解)
collision: "/vehicle/ai/ambulance/ambulance.pmc"
匹配指向:/vehicle/ai/ambulance/ambulance.pmc(.pmc文件将.pmd文件和automat文件联系起来,可以用记事本打开)
fwheel_model: "/vehicle/wheel/1/wheel.pmd"
前轮实体文件指向:/vehicle/wheel/1/wheel.pmd
rwheel_model: "/vehicle/wheel/1/wheel.pmd"
后轮实体文件指向:/vehicle/wheel/1/wheel.pmd(可以刊出,本车的前,后轮是一样的,都是相关实体文件中的1号车轮。关于轮子的作用,后文将重点说明)
allowed_count: 1
系统参数,不能轻易修改,由地图.bmd和EFFECT文件决定。
speed: 60.0
平均速度 60KM/H (如果路途中交通事故频繁,那就降低点吧)
speed_class: 4
速度活动范围幅度:第四区域
}
其中,像/vehicle/wheel/1/wheel.pmd中的vehicle,wheel,1,均代表实体文件,它们是依次包含的文件夹,wheel.pmd是文件夹1里面的筋骨文件。
我们再来看看schoolbus.sii,bushnr3.sii,bushnr4.sii这几个模板,
请仔细观察:
schoolbus.sii
traffic_vehicle_data: traffic.schoolbus
{
model: "/vehicle/ai/schoolbus/schoolbus.pmd"
lod: "/vehicle/ai/schoolbus/lod.pmd"
collision: "/vehicle/ai/schoolbus/schoolbus.pmc"
fwheel_model: "/vehicle/wheel/5/wheel.pmd"
rwheel_model: "/vehicle/wheel/10/wheel.pmd"
allowed_count: 1
speed: 15.0
speed_class: 1
}
bushnr3.sii
traffic_vehicle_data: traffic.bushnr3
{
model: "/vehicle/ai/schoolbus/schoolbus.pmd"
lod: "/vehicle/ai/schoolbus/lod.pmd"
collision: "/vehicle/ai/schoolbus/schoolbus.pmc"
fwheel_model: "/vehicle/wheel/5/wheel.pmd"
rwheel_model: "/vehicle/wheel/10/wheel.pmd"
allowed_count: 1
speed: 15.0
speed_class: 1
}
bushnr4.sii
traffic_vehicle_data: traffic.bushnr4
{
model: "/vehicle/ai/schoolbus/schoolbus.pmd"
lod: "/vehicle/ai/schoolbus/lod.pmd"
collision: "/vehicle/ai/schoolbus/schoolbus.pmc"
fwheel_model: "/vehicle/wheel/5/wheel.pmd"
rwheel_model: "/vehicle/wheel/10/wheel.pmd"
allowed_count: 1
speed: 15.0
speed_class: 1
}
我们可能已经发现了,
上面的几个模板中,除了第一行:“交通车辆数据指向”不同以外,其他的引导语句都是相同的!
2.2.2 HNR第二定律:唯一性定律
HNR第二定律(唯一性定律):在Mod群系中,车体文件的引导文件XXX.SII和XXX.SII里的“交通车辆数据指向”语句必须是唯一的。
推论一:在XXX_storage.sii文件中,其语句: @include "definition/XXX.sii",这个“XXX”必须是唯一的。如果在一个XXX_storage.sii文件中,存在两个或两个以上相同的 XXX.SII语句,那么对于AI文件夹里面的definition文件,游戏将在LOADING的时候错误退出;对于truck,interior, trailer文件夹里面的definition文件,游戏将在LOGO画面停滞不前;
推论二:如果在一个definition文件夹里面的几个不同名字的XXX1.SII,XXX2.SII,XXX3.SII......文件中,它们的 “交通车辆数据指向”语句是相同的,并且这些XXX1.SII,XXX2.SII,XXX3.SII......文件已经注册到相关的 XXX_storage.sii文件中,仍然会出现推论一所述情况;
推论三:在一个MOD文件夹中如果存在多个含有vehicle文件的MOD,且这些MOD的vehicle文件夹里的definition含有两个或两个以上相同的XXX.SII文件,文件已经注册到相关的XXX_storage.sii文件中,那么所产生的后果和推论一的相同;
推论四(广义论):在DEF的公司引导文件中,其相关引导文件也必须是唯一的;
推论五(广义论):在DEF的CITY文件夹里的“城市名.sii”必须和地图中的城市名一致,唯一,双方都不能无中生有。
推论六(广义论):在def--camera文件夹里面的引导文件,将遵循推论一,二,三所述的规律进行。
例2:在ALH豪华增强版的V1.03B中,有过这样一段关于该版本的介绍(
http://game.ali213.net/thread-1868974-1-1.html): “12. 专门推出了 "Super Bruce by HNR"系列的引擎,刹车和变速箱,为了增加游戏的乐趣,这个“宝物”隐藏在一个城市里面,虽然补丁包里面有个“超级发动机”的MOD,但当你还没有在游戏里获得某件东西的时候,你把这个MOD放进MOD文件夹只会导致游戏停滞不前而无法游戏!在游戏里,特别提供了很多线索(包括视觉和听觉两个方面,所以大家要专心驾驶~)提示你找到这个城市,难度并不大,大家只要专心驾驶,不要听歌等,你会得到很多暗示的,到你揭开这个“秘密”时,得到的不仅仅是超级发动机,还有其他很多惊喜!”其实这个就是妙用了“交通车辆数据指向”语句,大家可以打开该补丁的”V1.03Bpart3.scs“,依次展开: vehicle--truck--definition--p379c.sii,其它语句大家暂时不要管,我在后文会详述,只看第一句:“交通车辆数据指向”语句。看到:
driveable_vehicle_data: vehicle.p388
{
name: "@@Peterbilt 388 Fleetclass@@"
price: 95000
#--------
# models
#--------
model: "/vehicle/truck/p388/p388.pmd"
collision: "/vehicle/truck/p388/p388.pmc"
fwheel_model: "/vehicle/wheel/5/wheel.pmd"
rwheel_model: "/vehicle/wheel/10/wheel.pmd"
wiper_model: "/vehicle/truck/p388/wips.pmd"
interior_hood_model: "/vehicle/truck/p388/hood.pmd"
#----------------
# physics params
#----------------
wheel_mass: 50.0
#-------------
# Child units
#-------------
chasis_data: chasis.0
sdata_ext: sound.0.ext
sdata_int: sound.0.int
exterior_wiper_anim: "/vehicle/truck/ws/wips.pma"
preview: "m379"
game_points: 0
vehicle_class: 3
behind_camera: camera.behind.basic
interior_camera: camera.interior.peterbitl
bumper_camera: camera.bumper.basic
cabin_camera: camera.cabin.basic
cabin_cam_off: (0.0, 4.0, 1.9)
top_camera: camera.top.basic
tv_camera: camera.tv.basic
interior_data: interior.peterbitl1
sleeper: true
}
再展开”超级发动机.scs“,依次展开:vehicle--truck--definition--p388c.sii,其它语句大家暂时不要管,我在后文会详述,只看第一句:“交通车辆数据指向”语句。看到:
driveable_vehicle_data: vehicle.p388
{
name: "@@Peterbilt 388 Fleetclass@@"
price: 95000
#--------
# models
#--------
model: "/vehicle/truck/p388/p388.pmd"
collision: "/vehicle/truck/p388/p388.pmc"
fwheel_model: "/vehicle/wheel/5/wheel.pmd"
rwheel_model: "/vehicle/wheel/10/wheel.pmd"
wiper_model: "/vehicle/truck/p388/wips.pmd"
interior_hood_model: "/vehicle/truck/p388/hood.pmd"
#----------------
# physics params
#----------------
wheel_mass: 50.0
#-------------
# Child units
#-------------
chasis_data: chasis.0
sdata_ext: sound.0.ext
sdata_int: sound.0.int
exterior_wiper_anim: "/vehicle/truck/ws/wips.pma"
preview: "m379"
game_points: 0
vehicle_class: 3
behind_camera: camera.behind.basic
interior_camera: camera.interior.peterbitl
bumper_camera: camera.bumper.basic
cabin_camera: camera.cabin.basic
cabin_cam_off: (0.0, 4.0, 1.9)
top_camera: camera.top.basic
tv_camera: camera.tv.basic
interior_data: interior.peterbitl1
sleeper: true
}
大家应该明白了吧!换句话说,只要你移除了”V1.03Bpart3.scs“就可以使用超级发动机了!这个例子充分诠释了HNR第二定律。
2.2.3 HNR递增原则
通过前面对比schoolbus.sii,bushnr3.sii,bushnr4.sii这几个模板,我们可能会有疑问?为什么要有那么多的 bushnrx.sii(x=1,2,3,4......)?有一个不就够了吗?这是原作者想在游戏中达到虽然只有一种公交车,但数量却很多的真实,热闹的氛围而刻意增加的。
HNR递增原则:可以通过修改车体文件XXX.SII的名称及其语句中的“交通车辆数据指向”语句名称,而其它语句可以保持不变,克隆出多个原XXX.SII文件的衍生文件,再将这些衍生文件注册到相关的XXX_storage.sii文件中,达到车体复制之功效。
推论一:在vehicle--ai文件夹里的复制,将复制好的XXX’.SII文件注册到相关的traffic_storage.sii文件中,所得到的效果是在游戏中,AI车辆会相应增加所复制的相应AI车辆;
推论二:在vehicle--truck文件夹里的复制,将复制好的XXX‘.SII文件注册到相应的truck_storage.sii文件中,所得到的效果是在游戏中,会得到相应增多的车头,具体的地方在游戏开始的”SHOWROOM“以及卡车管理,买卖的地方;
推论三:在vehicle--truck文件夹里的复制,将复制好的XXX’_traffic.sii文件注册到相应的traffic_storage.sii文件中,所得到的效果是在游戏中,AI卡车头会相应增加所复制的相应AI卡车头;
推论四(广义论):可以把此理论完美应用在interior,trailer,以及def--camera,def--vehicle--sound文件夹里面,所得到的效果完全一样,请充分利用此推论,让你所集合的卡车车头形式多样化!
例3:在HAULIN迷宗MOD的BUS部分,大家可能已经注意到了,每辆BUS的内饰,车内视角高低都是不同的,这就是充分利用了推论四,通过复制原 interior,以及DEF文件夹中的camera文件夹里面的XXX.SII文件,再将这些复制到的衍生文件加以修改(后文会重点介绍如何修改这些语句),最后再将它们注册到相关的XXX_storage.sii文件中,而得到的形式各异的效果!
例4:在ALH系列豪华版中,当大家使用车头递增包时,其实已经发现了,每台车的喇叭声是不一样的,警车,消防车,公交车,各种卡车头的喇叭声均是分别精心录制的,有些车头的引擎声,刹车声都不相同,那么,是如何做到各是各的,而不会重叠覆盖呢?其实,这就是充分利用了递增原理中的推论四。
2.2.4 HNR黄金组合定理
在介绍这个定理之前,我们先来了解下几个XXX.SII文件中其他语句的作用。
先来看看:vehicle--truck--definition--fcol.sii:
driveable_vehicle_data: vehicle.fcol
交通车辆数据指向:fcol(这行语句的作用前文已经详述,不再赘述)
{
name: "@@trk_fcol@@"
(车头命名,具体显示在SHOWROOM和车头管理处,可以在两个@@之间随意修改成其它任意字母型的名字)
price: 135000
(售价,可以随意修改)
#--------
# models
(实体文件部分)
#--------
model: "/vehicle/truck/fcol/fcol.pmd"
实体文件指向:/vehicle/truck/fcol/fcol.pmd(.pmd是车体实体文件的筋骨,ZM制作的核心其实就是它)
collision: "/vehicle/truck/fcol/fcol.pmc"
匹配指向:/vehicle/truck/fcol/fcol.pmc(.pmc文件将.pmd文件和automat文件联系起来,可以用记事本打开)
fwheel_model: "/vehicle/wheel/6/wheel.pmd"
前轮实体文件指向:/vehicle/wheel/6/wheel.pmd
rwheel_model: "/vehicle/wheel/8/wheel.pmd"
后轮实体文件指向:/vehicle/wheel/8wheel.pmd
wiper_model: "/vehicle/truck/fcol/wips.pmd"
雨刮实体文件指向:/vehicle/truck/fcol/wips.pmd
interior_hood_model: "/vehicle/truck/fcol/hood.pmd"
车内内饰实体文件指向:interior_hood_model: "/vehicle/truck/fcol/hood.pmd
#----------------
# physics params
物理参数
#----------------
wheel_mass: 50.0
轮子聚合:50
#-------------
# Child units
分支参数
#-------------
chasis_data: chasis.0
道路颠簸指向: 颠簸0号数据(在def--vehicle--chasis文件夹里面)
sdata_ext: sound.1.ext
车头外部声效指向:外部声效1号数据(在def--vehicle--sound文件夹里面)
sdata_int: sound.1.int
车头内部声效指向:内部声效1号数据(在def--vehicle--sound文件夹里面)
exterior_wiper_anim: "/vehicle/truck/fcol/wips.pma"
车头外部雨刮指向:/vehicle/truck/fcol/wips.pma
preview: "fcol"
全车预览指向:fcol(具体表现在SHOWROOM的那些小图片上,这个图片在:material--ui--truck里面)
game_points: 72
点数:72
vehicle_class: 3
级别:3
behind_camera: camera.behind.basic
车后视角指向:camera.behind.basic
interior_camera: camera.interior.keenworth
车内视角指向:camera.interior.keenworth
bumper_camera: camera.bumper.basic
保险杠视角指向:camera.bumper.basic
cabin_camera: camera.cabin.basic
车顶视角指向:cabin_camera: camera.cabin.basic(这个是ALH特有的,HAULIN不具备)
cabin_cam_off: (0.0, 4.2, 1.7)
(必需加上这一句,否则会造成使用车顶视角错误!)
top_camera: camera.top.basic
全车视角定义指向:camera.top.basic
tv_camera: camera.tv.basic
tv视角定义指向:camera.tv.basic
以上7行视角语句所指向的均是引导文件,具体位置在:def--camera--units里面,而在def--camera中的camera_storage.sii为它们的引导文件。
interior_data: interior.keenworth
车内模型指向: interior.keenworth 这个属于实体文件
sleeper: true
卧铺车 (如果想取消卧铺功能,只需将这一句删除即可,而不是将”true“改为”false“)
}
再来看看:vehicle--truck--definition--fcl.sii:
driveable_vehicle_data: vehicle.fcl
{
name: "@@trk_fcl@@"
price: 80000
#--------
# models
#--------
model: "/vehicle/truck/fcl/fcl.pmd"
collision: "/vehicle/truck/fcl/fcl.pmc"
fwheel_model: "/vehicle/wheel/5/wheel.pmd"
rwheel_model: "/vehicle/wheel/8/wheel.pmd"
exterior_wiper_anim: "/vehicle/truck/fcl/wips.pma"
wiper_model: "/vehicle/truck/fcl/wips.pmd"
#----------------
# physics params
#----------------
wheel_mass: 50.0
#-------------
# Child units
#-------------
chasis_data: chasis.0
sdata_ext: sound.2.ext
sdata_int: sound.2.int
exterior_wiper_anim: "/vehicle/truck/fcl/wips.pma"
preview: "fcl"
game_points: 4
vehicle_class: 1
behind_camera: camera.behind.basic
interior_camera: camera.interior.agressor
bumper_camera: camera.bumper.basic
cabin_camera: camera.cabin.basic
cabin_cam_off: (0.0, 4.0, 1.9)
top_camera: camera.top.basic
tv_camera: camera.tv.basic
interior_data: interior.agressor2
sleeper: true
}
可以发现fcl.sii和上面的fcol.sii的唯一区别就是少了一行“车内内饰实体文件指向”语句,不言而喻,车头FCL比车头FCOL少了些辅助内饰。
经验证明:在车头文件XXX.SII里面,雨刮实体文件指向语句,车内内饰实体文件指向语句,车头外部雨刮指向语句在具体的车头配置中的作用是辅助的,它们存在与否,并不会对车头造成实质性的影响,它们可有可无。
HNR对称原则:在车体文件的引导文件XXX.SII中,实体文件指向语句,AI车辆辅助引导指向语句,匹配指向语句必须在实体文件中取得一致。即它们所指向的实体车头文件必须是同一的。
HNR黄金组合定理:车头文件的引导文件XXX.SII里的所有指向语句均可和其它XXX.SII的所有指向语句任意组合。它们可以搭配出无数效果。但在组合过程中,要遵循HNR对称原则。
例5:请再次回顾例3,例4,在上面的例子中,提到不同BUS,有不同的内饰,不同车头,有不同的声效,除了应用到HNR递增原则外,其实,还充分应用了HNR黄金组合原理,请看下图中迷宗MOD的BUS部分:公交5路车的内饰:
组合了:AYATS,agressor,Cascadia(很出色的一个MOD)的内饰。
请仔细分析这台车的引导文件:
driveable_vehicle_data: vehicle.flcc(指向FLCC)
{
name: "@@bus5_KunMing@@"(名称已改)
price: 124000
#--------
# models
#--------
model: "/vehicle/ai/velven/velven.pmd"(指向的实体文件为AI文件夹里面的,根据HNR黄金组合原理,这是允许的)
collision: "/vehicle/ai/velven/velven.pmc"
fwheel_model: "/vehicle/wheel/vel_f/wheel.pmd"
rwheel_model: "/vehicle/wheel/vel_r/wheel.pmd"
wiper_model: "/vehicle/truck/fla/wips.pmd"
interior_hood_model: "/vehicle/truck/flca/hood.pmd"(内部辅助装饰用的是FLCA,也即Cascadia(很出色的一个MOD)的内饰)
#----------------
# physics params
#----------------
wheel_mass: 50.0
#-------------
# Child units
#-------------
chasis_data: chasis.0
sdata_ext: sound.0.ext (0号声效数据)
sdata_int: sound.0.int
exterior_wiper_anim: "/vehicle/truck/fla/wips.pma"(外部雨刮指向FLA)
preview: "flcc"(全车预览:FLCC)
game_points: 28
vehicle_class: 3
behind_camera: camera.behind.basic
interior_camera: camera.interior.ayats(车内视角调节指向:ayats)
bumper_camera: camera.bumper.basic
top_camera: camera.top.basic
tv_camera: camera.tv.basic
interior_data: interior.ayats(车内内饰实体文件指向:ayats)
sleeper: true(卧铺车)
}
[
本帖最後由 HNRRAN 於 2008-5-27 01:52 編輯 ]