旧话重提……建筑分布编
本帖最后由 lanson 于 2011-3-3 17:05 编辑前言:这个没有寒大那编《城市布局深度探索》深奥,只是在他的基础上讲得精细些,这样来说说如何实现关隘,特殊建筑,和特色城市这类修改。
正文:自从三国1.0面世后,三国一般建筑群基本完成了,但是由于建筑模型工作量太大,所以过去的柱子前辈们屏蔽了大部分特殊建筑,{:5_130:}(这个真的很累啊)这里就是说说城市,城墙布局以及特殊建筑群的解锁。
先来说说原理:决定游戏中城市里出现的建筑模型文件主要包括了对应data下的descr_walls.txt和descr_settlement_plan.txt这两个,这两个文件决定了在游戏中城市建筑的体现,但不包括主体分布(坐标)但包括了部分坐标。
先来说说descr_walls.txt,这个文件可以忽略不计,因为基本上没有改的必要,和dbb建筑文本作用差不多,但是它有个很重要的作用就是城墙直接的链接作用,以及文化划分,游戏城墙的具体体现,比如,你可以通过修伽这个文件,给木墙变石墙,把蛮族的墙壁换成罗马的,就是这样了,具体参数,表示无奈,~~~~~
重点是descr_settlement_plan.txt这个,这个文件决定了特殊建筑的分布和体现,过去的三国mod是看不到兵营等特殊建筑的,而且每个文化区建筑都基本一样,没法做到如罗马原版那样不同文化有不同建筑~~其实只要留意一下三国mod的item的修改日期,对比原版你就知道有多少建筑没有改了~~{:5_130:}
打开它,你会发现如下:
primary
{
BI_roman_governors_palace
BI_barb_pagan_religion_lvl_1
BI_barb_pagan_religion_lvl_2
BI_barb_pagan_religion_lvl_3
BI_barb_stables_lvl_4
BI_barb_stables_lvl_5
BI_catapult_range_barbarian
BI_siege_engineer_barbarian
BI_barbarian_great_forum
BI_barbarian_foundry
BI_barb_christian_academic_lvl_3
BI_barb_christian_academic_lvl_4
BI_barb_christian_academic_lvl_5
BI_barb_barracks_lvl_4
BI_barb_barracks_lvl_5
BI_government_lvl_4
BI_government_lvl_5
BI_christian_shrine
BI_christian_chapel
BI_christian_church
BI_christian_cathedral
太多了省略………………
}
这些就是实际游戏中有这个文件决定“出场”的建筑
接着就是这类
climate_groups……………………这个就是决定了城内的植被了,可是 会动的,自己做把,跟建筑一个做法,而且分冬夏季气候区。
{
; example
; group tree_A
; {
; default tree_A_deciduous_summer
; grassland winter winter_grassland_tree_A
; grassland summer summer_grassland_tree_A
; sandy_desert any tree_A_palm
; rocky_desert any tree_A_palm
带“;”的表示程序运算时忽略
group tree_A
{
default tree_A_deciduous_summer………………默认是夏季这种树
temperate_grassland_fertile winter tree_A_deciduous_winter
temperate_grassland_infertile winter tree_A_deciduous_winter
temperate_forest_open winter tree_A_deciduous_winter
temperate_forest_deep winter tree_A_deciduous_winter………………下面就是不同气候区用不同的冬季树模型了
highland winter tree_A_deciduous_winter
alpine winter tree_A_deciduous_winter
sub_arctic winter tree_A_deciduous_winter
sandy_desert any tree_A_palm
rocky_desert any tree_A_palm
}
…………………………省略了,注意每一个类型都要带上完整的大括号,比如climate_groups其实是这种样式的,以下一样
}
climate_groups
{
…………这里又包括了各种小分类一样用{}括上了……………………
}
ambient_groups……………………建筑群
{
group baggage_train_roman………………就是说baggage_train_roman这个模型其实是个组群,分别由如下组成,他们自成新的坐标体系,就是说这个小组以0,0,0,0为参数分布,然后作为一个整体(当作一个建筑),在城市分布中按照市中心进行坐标分布。四个数字意思就是,x,y,角度,z(高度)其实可以在按照max的坐标,按照max的俯视图,注意max所得xy要各自乘上-1
{
baggage_train_cart, -3, 18, 55, 0
baggage_train_cart, 5, 10, 25, 0
baggage_train_cart, 10, -10, 120, 0
baggage_train_cart, -6, -10, 145, 0
baggage_train_cart, -11, -3, 175, 0
baggage_train_cart, -10, 7, -90, 0
}
…………………以下略……………
}
现在我来举例来说明建筑群体
group roman_small_plinth_group
{
floor underlay_roman_small_plinth.cas overlay_roman_small_plinth.cas这个就是地形控制和地面贴图模型,参考寒大的城市布局深度探索
roman_small_ambient_plinth, 0, 0, 0, 0
roman_colonnaded_portico, 0, 16, 0, 16
roman_colonnaded_portico, -6, -12, 90, 16
tree_B, 14, -2, 0, 17
tree_box, 14, -2, 0, 16
roman_triumphal_column, 14, -16, 0, 16
roman_statue, -16, 16, -90, 16
}
以上就是说明了这个建筑由以上模型组成。
当然你也可以自己做个group,按照上述语法就可以了
然后我来说说实际建筑体现
以group roman_imperial_palace_group为例,最高级的roman的政府大厅,这个是我自己修改过的group
group roman_imperial_palace_group
{
roman_imperial_palace, 0, 0, 0, 0
;roman_statue, -10, -70, 0, 25
;roman_statue, 10, -70, 0, 25
tree_A, -85.00, -64.00, 55.0, 0
tree_A, 92.72, 14.86, 325.0, 0
tree_A, -104.94, -21.34, 15.0, 0
tree_A, 111.03, -11.71, 290.0, 0
tree_A, 26.65, 79.16, 215.0, 0
tree_A, 98.51, 50.60, 215.0, 0
tree_A, -90.34, 55.30, 45.0, 0
tree_A, -107.14, 14.11, 120.0, 0
tree_A, -44.67, 79.16, 135.0, 7.12
tree_B, 113.77, -72.70, 360.0, 0
tree_B, 46.34, 83.37, 360.0, 0
tree_B, -62.19, 83.37, 360.0, 0
tree_B, -95.90, -3.92, 360.0, 0
tree_C, -114.07, 49.24, 205.0, 0
tree_C, -106.98, 58.20, 205.0, 0
tree_C, -114.06, -6.88, 140.0, 0
tree_C, -84.82, 5.51, 205.0, 0
tree_C, -84.78, -26.46, 360.0, 0
tree_C, -74.08, 74.36, 205.0, 0
tree_C, 115.2, 55.67, 140.0, 0
tree_C, 69.77, 82.26, 205.0, 0
tree_C, 110.56, -56.90, 140.0, 0
tree_C, 110.33, 9.48, 140.0, 0
tree_C, 59.26, 74.36, 205.0, 0
tree_C, 94.42, -8.01, 140.0, 0
tree_E, 86.82, 79.64, 45.0, 0
tree_E, 8.62, 79.64, 125.0, 0
tree_E, -109.35, 37.14, 45.0, 0
tree_E, 111.94, 31.14, 125.0, 0
tree_E, -83.13, 79.64, 90.0, 0
tree_E, -94.73, -38.63, 2.41484e-006, 0
tree_E, 95.42, -60.74, 125.0, 0
tree_F, -92.41, 32.69, 30.0, 0
tree_F, -103.91, -57.59, 115.0, 0
tree_F, 103.23, -31.96, 210.0, 0
tree_F, 103.23, 75.13, 110.0, 0
tree_F, -104.83, 75.13, 30.0, 0
tree_F, -15.78, 81.24, 50.0, 0
}
后面先来看看原版的建筑格式
在
; *************************************************************************************************
; NON-PAVED SLOTS ( PAVED SLOTS HAVE BEEN REMOVED, AS THEY'RE OBSOLETE )
; ****************************************************************************************************
这个以下就是特殊建筑的修改了,其实很好理解,以core建筑为例子
slot slot_256x192_core_building…………数字*数字就是说明了它的占地面积,core_building字面意思,核心建筑,就是政府建筑
{
default
{
slot_256x192_empty_group_roman, 0, 0, 0, 0…………默认的占地(空)模型(不用管)
}
variant……………………这类变量会有很多格式都是一样,只要注意“{}”不要多不要少,只要正确,因为很多时候就是这类错误了{:5_136:}
{
cultures……………………文化,
{
greek……………………这里可以多加可以少减,但是注意修改了这里要注意上下,因为地形和分布,文化很多时候都不同,特别是蛮族建筑是不如roman这类占地广的,但是原版的有些文化是通用的,比如这个greek用的就是roman的地皮,这个其实语法没错,基本都没有问题,只是搭配不当最多也就屋子叠屋子,还得靠经验,改多了就懂了~~~
}
buildings
{
none………………因为上面是空地所以这里建筑也是空的~~~~
}
slot_256x192_empty_group_greek, 0, 0, 0, 0
}
variant
{
cultures
{
egyptian
}
buildings
{
none
}
slot_256x192_empty_group_egyptian, 0, 0, 0, 0
}
variant
{
cultures
{
eastern
}
buildings
{
none
}
slot_256x192_empty_group_eastern, 0, 0, 0, 0
}
variant
{
cultures
{
carthaginian
}
buildings
{
none
}
slot_256x192_empty_group_carthaginian, 0, 0, 0, 0
}
variant
{
cultures
{
barbarian
}
buildings
{
none
}
slot_256x192_empty_group_barbarian, 0, 0, 0, 0
}
……………………………………………………以上都是一个道理,只是不同文化而已……如果没有设置(上下都没有)表示默认…………
variant
{
cultures
{
roman
}
buildings
{
core_building imperial_palace………………注意这里了,这个buildings意味着在罗马中是什么级别的建筑,比如这个就是最高级的宫殿
}
floor underlay_roman_imperial_palace.cas overlay_roman_imperial_palace.cas…………同上,地形什么的
roman_imperial_palace_group, 0, 0, 0, 0………………这个就是引用上面的 roman_imperial_palace_group建筑群,表明了在整个城市布局中, roman_imperial_palace_group当作了一个建筑,而不是一个群体
}
…………………………………………………………以下同理……………………
variant
{
cultures
{
greek
}
buildings
{
core_building imperial_palace
}
;;;;floor underlay_greek_imperial_palace.cas overlay_greek_imperial_palace.cas
greek_royal_palace, 0, 0, 0, 0
}
variant
{
cultures
{
eastern
carthaginian……………………这里就是说明了两个文化公用一个建筑你可以把它分开,但是要有这个模型
}
buildings
{
core_building imperial_palace
}
floor underlay_eastern_imperial_palace.cas
eastern_imperial_palace, 0, 0, 0, 0……………………建筑名字也可以是单个,不用group
}
variant
{
cultures
{
egyptian
}
buildings
{
core_building imperial_palace
}
floor none overlay_egyptian_imperial_palace.cas
egyptian_imperial_palace, 0, 0, 0, 0
}
variant
{
cultures
{
roman
}
buildings
{
core_building proconsuls_palace………………4级政府建筑 以下相同
}
;;;;floor underlay_roman_pro-consuls_palace.cas
roman_pro-consuls_palace, 0, 0, 0, 0
}
variant
{
cultures
{
greek
}
buildings
{
core_building proconsuls_palace
}
;;;;;floor underlay_greek_pro-consuls_palace.cas
greek_councillors_chambers, 0, 0, 0, 0
tree_C, -29, 13, 0, 2
tree_C, -29, -14.3, 0, 2
tree_C, -7.5, -14.3, 0, 2
tree_C, 24, 6.5, 0, 2
tree_C, 24, -8, 0, 2
tree_C, -7.5, 13, 0, 2
}
variant
{
cultures
{
eastern
carthaginian
}
buildings
{
core_building proconsuls_palace
}
floor underlay_eastern_pro-consuls_palace.cas overlay_eastern_pro-consuls_palace.cas
eastern_pro-consuls_palace, 0, 0, 0, 0
}
variant
{
cultures
{
egyptian
}
buildings
{
core_building proconsuls_palace
}
floor underlay_egyptian_pro-consuls_palace.cas overlay_egyptian_pro-consuls_palace.cas
egyptian_pro-consuls_palace, 0, 0, 0, 0
}
}………………………………不要少了或者多了一个
本帖最后由 lanson 于 2011-3-3 17:13 编辑
slot slot_160x128_core_building………………然后就是4级面积的占地,如此类推
{
default
{
slot_160x128_empty_group_roman, 0, 0, 0, 0
}
variant……………………以下字面意思,不解释
{
cultures any
status construction
buildings
{
core_building governors_house
}
slot_160x128_construction_site, 0, 0, 0, 0
}
variant……………………这类都是同理了
{
cultures
{
greek
}
buildings
{
none
}
slot_160x128_empty_group_greek, 0, 0, 0, 0
}
………………这里略了…………
}……………………记得保留
本帖最后由 lanson 于 2011-3-3 17:23 编辑
这里我说说一些要点比如,我添加的乡勇营
;;;;;;;;;;添加乡勇营
variant
{
cultures
{
egyptian
carthaginian
greek
}
buildings
{
barracks militia_barracks
}
;floor none overlay_militia_barracks_egyptian.cas
slot_upgrade_48x32_112x64_eastern, 0, 0, 0, 0…………用的是eastern的文化区建筑,意思就是当48x32到112x64这个占地面积时,会以eastern的建筑来填充,因为 militia_barracks_eastern这个建筑本身只有占地48x32,所以需要建筑物来填充,slot_upgrade_48x32_112x64_eastern这类名字原版上就有,不能自己改,多改你就会体会到,毕竟只能意会不能言传{:5_136:}
militia_barracks_eastern, 0, 0, 0, 0
}
原三国建筑中间就是被删去了所有的特殊建筑文本~~~~~~~~~{:5_130:}修改过程是痛苦的~~~~~~
本帖最后由 lanson 于 2011-3-3 17:41 编辑
说说分布文本指引
在descr_settlement_plan.txt中包括了这方面的比如
plans
{
plan Roman_Fort roman_fort.txt
plan Roman_Village roman_village.txt
plan Roman_Town roman_town.txt
plan Roman_Large_Town roman_large_town.txt
plan Roman_City roman_city.txt
plan Roman_Large_City roman_large_city.txt
plan Roman_Huge_City roman_huge_city.txt
plan Greek_Fort greek_fort.txt
plan Greek_Village roman_village.txt
plan Greek_Town greek_town.txt
plan Greek_Large_Town greek_large_town.txt
plan Greek_City greek_city.txt
plan Greek_Large_City greek_large_city.txt
plan Greek_Huge_City greek_huge_city.txt
plan Egyptian_Fort egyptian_fort.txt
plan Egyptian_Village egyptian_village.txt
plan Egyptian_Town egyptian_town.txt
plan Egyptian_Large_Town egyptian_large_town.txt
plan Egyptian_City egyptian_city.txt
plan Egyptian_Large_City egyptian_large_city.txt
plan Egyptian_Huge_City egyptian_huge_city.txt
plan Eastern_Fort eastern_fort.txt
plan Eastern_Village egyptian_village.txt
plan Eastern_Town eastern_town.txt
plan Eastern_Large_Town eastern_large_town.txt
plan Eastern_City eastern_city.txt
plan Eastern_Large_City eastern_large_city.txt
plan Eastern_Huge_City eastern_huge_city.txt
plan Carthaginian_Fort eastern_fort.txt
plan Carthaginian_Village egyptian_village.txt
plan Carthaginian_Town carthaginian_town.txt
plan Carthaginian_Large_Town carthaginian_large_town.txt
plan Carthaginian_City carthaginian_city.txt
plan Carthaginian_Large_City carthaginian_large_city.txt
plan Carthaginian_Huge_City carthaginian_huge_city.txt
plan Barbarian_Fort barbarian_fort.txt
plan Barbarian_Village barbarian_village.txt
plan Barbarian_Town barbarian_town.txt
plan Barbarian_Large_Town barbarian_large_town.txt
plan Barbarian_City barbarian_city.txt
plan Barbarian_Large_City barbarian_city.txt
plan Barbarian_Huge_City barbarian_city.txt
}
游戏中就是根据这个文本中找到对应的文本,然后对城市进行建筑分布一目了然,不说
这个城市等级设置,不用说了
plans_by_level
{
plan_levels Roman_plan_levels
{
village Roman_Village
town Roman_Town
large_town Roman_Large_Town
city Roman_City
large_city Roman_Large_City
huge_city Roman_Huge_City
}
plan_levels Egyptian_plan_levels
{
village Egyptian_Village
town Egyptian_Town
large_town Egyptian_Large_Town
city Egyptian_City
large_city Egyptian_Large_City
huge_city Egyptian_Huge_City
}
plan_levels Eastern_plan_levels
{
village Egyptian_Village
town Eastern_Town
large_town Eastern_Large_Town
city Eastern_City
large_city Eastern_Large_City
huge_city Eastern_Huge_City
}
plan_levels Greek_plan_levels
{
village Roman_Village
town Greek_Town
large_town Greek_Large_Town
city Greek_City
large_city Greek_Large_City
huge_city Greek_Huge_City
}
plan_levels Barbarian_plan_levels
{
village Barbarian_Village
town Barbarian_Town
large_town Barbarian_Large_Town
city Barbarian_City
large_city Barbarian_Large_City
huge_city Barbarian_Huge_City
}
plan_levels Carthaginian_plan_levels
{
village Egyptian_Village
town Carthaginian_Town
large_town Carthaginian_Large_Town
city Carthaginian_City
large_city Carthaginian_Large_City
huge_city Carthaginian_Huge_City
}
………………………………………………………………
这个嘛, 就是游戏布局的索引设置,跟上面一样,有由下而上变得具体而已,在开局时这里设置,理论上可以设置特色名城,转5楼
plan_sets
{
;inland default_set
plan_set default_set
{
locale any
;default test_levels
roman Roman_plan_levels
greek Greek_plan_levels
carthaginian Carthaginian_plan_levels
egyptian Egyptian_plan_levels
eastern Eastern_plan_levels
barbarian Barbarian_plan_levels
}
;port default_port_set
plan_set default_port_set
{
locale any
default Roman_plan_levels
}
}
这里是我抽了一段ds文件的内容
settlement
{
level town
region C-1003-a-JinCheng
year_founded 194
population 1010
settlement_tax 51
plan_set default_set
faction_creator egypt
building
{
type hinterland_farms_city_0910 hrr_city_0910_eee
}
看到红字部分,你就会知道为何可以做到特色名城了(虽然是理论上的,不过貌似原版罗马城就是这样的,我没记错吧)
………………………………营寨分布…………………………………………………………
camps
{
camp
{
culture roman
locale any
plan roman_camp_small.txt
}
camp
{
culture greek
locale any
plan greek_camp.txt
}
camp
{
culture egyptian
locale any
plan egyptian_camp.txt
}
camp
{
culture eastern
locale any
plan egyptian_camp.txt
}
camp
{
culture carthaginian
locale any
plan greek_camp.txt
}
camp
{
culture barbarian
locale any
plan barbarian_camp.txt
}
}
……………………后面的不解释,因为都是字面意思,总的来说就是个索引………………
本帖最后由 lanson 于 2011-3-3 17:52 编辑
这类说说关隘系统打开三国的descr_settlement_plan.txt
涉及到关隘部分的就是plan_set部分
plan_sets
{
;inland default_set
plan_set default_set
{
locale any
;default test_levels
roman Roman_plan_levels
greek Eastern_plan_levels
carthaginian Carthaginian_plan_levels
egyptian Carthaginian_plan_levels
eastern Roman_plan_levels
barbarian Barbarian_plan_levels
}
……………………………以下就是关隘系统索引……………………………
plan_set pass_plain_set
{
locale any
roman pass_plain_levels
greek pass_plain_levels
carthaginian pass_plain_levels
egyptian pass_plain_levels
eastern pass_plain_levels
barbarian pass_plain_levels
}
…………………………………………………以上……………………………
;port default_port_set
plan_set default_port_set
{
locale any
default Roman_plan_levels
}
}
可以从上面找到关隘的级别
plan_levels pass_plain_levels
{
village pass_plain
}
对上具体再有关隘的对应分布文本及文化对应
plans
{
plan pass_plain pass_plain.txt
plan pass_cliff pass_cliff.txt
plan pass_canyon pass_canyon.txt
plan pass_cliff_horizontal pass_cliff_horizontal.txt
plan pass_canyon_horizontal pass_canyon_horizontal.txt
plan_set pass_cliff_set
{
locale any
roman pass_cliff_levels
greek pass_cliff_levels
carthaginian pass_cliff_levels
egyptian pass_cliff_levels
eastern pass_cliff_levels
barbarian pass_cliff_levels
}
plan_set pass_canyon_set
{
locale any
roman pass_canyon_levels
greek pass_canyon_levels
carthaginian pass_canyon_levels
egyptian pass_canyon_levels
eastern pass_canyon_levels
barbarian pass_canyon_levels
}
plan_set pass_cliff_horizontal_set
{
locale any
roman pass_cliff_horizontal_levels
greek pass_cliff_horizontal_levels
carthaginian pass_cliff_horizontal_levels
egyptian pass_cliff_horizontal_levels
eastern pass_cliff_horizontal_levels
barbarian pass_cliff_horizontal_levels
}
plan_set pass_canyon_horizontal_set
{
locale any
roman pass_canyon_horizontal_levels
greek pass_canyon_horizontal_levels
carthaginian pass_canyon_horizontal_levels
egyptian pass_canyon_horizontal_levels
eastern pass_canyon_horizontal_levels
barbarian pass_canyon_horizontal_levels
}
本帖最后由 lanson 于 2011-3-4 10:51 编辑
再说说特色名城的猜想与具体做法
比如在plans里添加
plans
{
plan pass_plain pass_plain.txt
plan pass_cliff pass_cliff.txt
plan pass_canyon pass_canyon.txt
plan pass_cliff_horizontal pass_cliff_horizontal.txt
plan pass_canyon_horizontal pass_canyon_horizontal.txt
plan luoyang_huge_plan luoyang_huge_plan.txt………………洛阳分布
}
然后plans_by_level添加
plans_by_level
{
;新增
plan_levels luoyang_plan_levels
{
huge_city luoyang_huge_plan
}
}
初步是意思就是不论城镇规模只有巨墙才有特色建筑
然后在plan_sets添加
plan_set luoyang_plan_set
{
locale any
roman luoyang_plan_levels
greek luoyang_plan_levels
carthaginian luoyang_plan_levels
egyptian luoyang_plan_levels
eastern luoyang_plan_levels
barbarian luoyang_plan_levels
}
最后在ds文件中洛阳城处对应改为 plan_set luoyang_plan_set
以上特色系统经过测试确实可行~~~~~~
附上寒大的
《罗马全战》城市布局深度探索
原帖由寒奔大大发表于游侠
在罗马的游戏中,你想设计故宫一样的皇家园林吗?你想设计依山傍水的荆州古城吗?你想设计巍峨险峻的巴蜀古道吗?你甚至想把城市建立在山洞,把宫殿建立在湖岛吗?我可以明确的告诉你,在罗马这款伟大的游戏,这一切都可以实现。
一万年太久,只争朝夕。让我们现在就动手吧,设计你梦想中的那一片奇迹。
以前我在游侠发表过一篇关于修改罗马建筑的文档,但要把一个建筑合理放入游戏,还应该懂得城市布局的原理,什么叫城市布局(settlement_plans)?,我们可以这样理解:是一个城市中地形、建筑、街道、树木、河流等的分布方式和感官印象。值得一提的是,城市布局的所有效果只有在游戏的攻城战或者要塞争夺战中得以体现,野战是完全另外一套mod领域。罗马的游戏中,城市布局主要包括以下几大要素:
一、 地形控制(underlays)
罗马城市中地面的高低起伏主要由两个部分融合而成,一个是大地图城市所在位置的地形状况,另外就是城市布局中underlays模型。
大地图中城市位置及周围地形的起伏,我们可以通过编辑\Data\world\maps\base\map_heights.tga这个地形高度图来实现。至于城市在这个地形高度图的具体像素位置,我们可以通过map_regions.tga文件反算得到,这个文件中标示了大地图中每个城市的真实位置,每个色块中的黑点就是城市的位置。白点代表的是港口位置。我们可以在photoshop中得到这个黑点的X,Y坐标。然后按照下面的公式:
X1 = X*2 + 1 ; Y1 = Y*2 + 1
我们就可以得到X1,Y1坐标,这个坐标就是城市在map_heights.tga的真正位置。城市所在点的灰度值(C)就是城市的海拔高度参数。然后我们打开descr_terrain.txt这个文件,可以得到一个max_land_height 参数,例如默认值是7511.272。我们把这个参数设定为(mH)。那在真实场景中海拔高度(米)可以由下面的公式得出:
城市的海拔高度(米) = C / 255 * mH。
好了。我们现在已经知道怎么控制城市的海拔高度以及城市周围的一带的山地起伏了。实现办法就是修改map_heights.tga.。但这个只完成了一部分,我们还得修改城市布局中的地形起伏,也就是城内如何实现小山?峡谷等。那我们就必须修改underlays模型。
underlays模型放在\Data\settlement_plans\underlays下。这些模型可以在3dmax中象导入兵种模型一样的打开。比如我们要修改罗马的城镇,就打开underlay_roman_town.cas这个文件。打开这个文件后,我们会发现两个主要子模型,一个是outline,另外一个是Underlay,Underlay模型就是控制城市布局中的地形起伏,而outline却是Underlay模型和前面讲到的大地图地形的融合桥梁。Underlay模型可以用max任意设定高低起伏关系,但必须遵循下面的重要原则:
1、 Outline模型是一个平面,所有顶点的Z坐标值都是0.
2、 从Z轴方向看上去,Underlay模型和outline模型的边界必须是完全重合。大小一致。
3、 Underlay模型边界中的每个点必须和outline模型边界点完全重合,一旦有点不重合,进入游戏后会在地面出现裂缝。人也会从裂缝中摔下地狱,直至死亡。
4、 Underlay凹陷度不能太低,如果城市海拔较低,Underlay也凹陷太深,游戏进入战场后会死机。
5、 Outline模型在保持边界不变的情况下。顶点数尽量少一些。Underlay模型顶点最好不要超过6000。
好,如果按照这个原则,我们就可以设定一个正确的underlays模型了。我们让underlays和outline都链结到Scene Root节点。随便分配一个贴图,就可以正常导出了。
二、 地面贴图(overlays)
地面贴图overlays模型是配合underlays而设计的。如果说underlays是负责地面的起伏,那overlays模型就是负责地面的贴图,overlays模型和underlays模型是完全一致的模型。我们还是打开\Data\settlement_plans\overlays\overlay_roman_town.cas这个文件吧。然后我们把原罗马的模型全部删除,导入我们刚刚弄好的underlay_roman_town.cas,并删除outline模型。
现在可以可以对overlays这个模型进行贴图了。贴图方法和兵种贴图方法一致。但考虑到模型比较庞大,贴图精度会很低。我们可以把overlays模型分离成多个子模型。然后运用多纹理技术对各个子模型分别贴图。(批注:我们柱子小组有自己独创的多纹理cas导入导出max脚本。可以提高建筑、地面、攻城器械,树木等模型的贴图精细度)
注意,即使你分离了这些模型。但这些模型的世界坐标都不能做丝毫修改。不然进入游戏,这些贴图模型就和地面分离开了。
好了。把这些分离的子模型全部链结Scene Root节点,然后导出到overlay_roman_town.cas文件中。
三、 街道布局(street_plans)
街道布局也是一个cas模型。存放在\Data\settlement_plans\street_plans文件夹。例如我们可以打开pathfinding_roman_town.cas,这个模型就是控制罗马城镇中街道的文件。街道模型中有很多node和link子模型。他们只需要按规则交替叠放在一起就行了。坐标不一定要求那么严格。
街道模型的作用既不是用来显示为城市中的街道,也不是控制城市中街道的起伏。城市中的街道样式和贴图都还是前面的Underlay模型控制的。街道模型作用主要有两点:
1、 便于士兵在街道中快速寻找路径。
2、 提供攻城战防守方电脑在城市中的部队布阵位置。
四、 城墙布局(borders)
城墙布局是一个大课题。涉及的内容很广泛。从简单意义上讲,就是把很多分段的城墙按照一定的链结关系围城一个圈。具体这个链结关系是什么,大家可以不用去关心。我们曾经发布过一个城墙布局编辑器layouts.exe。这个工具可以方便你实现城墙布局。
经过反复痛苦的探索研究,发现城墙布局还有另外一个特殊的作用,就是用来控制攻城战中攻城方部队默认的布阵位置。比如部队从正北方攻击城市,但部队的默认布阵位置就应该在这个城墙圈北方靠上50米左右。这点很关键。比如默认攻城方的部队在一个不可行走的区域,那进入游戏后就会死机。还有城墙圈不能太小,太小也会造成城内守方部队没有足够的空间布置部队,也会造成死机现象。
五、 行走区域(COLLISION)
行走区域就是控制部队在地面那些地方可以行走,那些地方不能行走。比如我们关隘模型。只允许士兵在山腰的盘山小路上行军,这个就需要使用行走区域来控制。
行走区域是属于“建筑路径”技术领域的一个组成部分。他也是一个cas模型。模型位置一般应该在Data\models_building\INFO下面。一般要解压PAK文件才会出现INFO目录。CA为了技术保密,没有公布任何模型的建筑路径。包括我们刚刚提及的行走区域。行走区域从3d游戏引擎的角度可以叫碰撞检测,从罗马的角度叫做一个COLLISION模型。
但BI的Data\models_building\INFO下面CA好在公布了一些基础建筑的COLLISION模型,这样使得我们对行走区域有了更清晰的控制办法。我们可以MAX打开BI\Data\models_building\INFO下面的一个建筑模型,我们可以看到里面有两个子模型,一个是COLLISION开头的,一个COLLISION3D开头的模型。
COLLISION开头的模型代表是2D行走区域的控制。COLLISION模型是一个Z轴为0的多边形平面。严格意义上讲,他是说从Z轴方向上,士兵可以行走的区域控制。比如我们在地图中弄一个圆形的岩石,并且要求士兵不能上这座岩石。那么我们就可以弄一个圆形的COLLISION模型进行控制。
COLLISION3D开头的是典型的3D碰撞检测模型,是用来自动抬升视点,避免视点砖入模型内部的作用。我们都直到。当我们把视点移动到建筑上时,视点会随着模型自动抬升。
好,我们控制攻城战场的士兵行走区域就可以用COLLISION模型来设定了。一般可以不用COLLISION3D。
六、 组装起来
好,以上说了那么多,估计有些杂乱无章和枯燥。我们上面做了这么多工作,究竟怎么让他在游戏中体现出来了。那我们就必须把这些东西分别拷贝到罗马相应的文件夹和修改相应的TXT文件。
1、 做好的underlays模型拷贝到Rome - Total War\Data\settlement_plans\underlays下。
2、 做好的overlays模型拷贝到Rome - Total War\Data\settlement_plans\overlays下。
3、 做好的street_plans模型拷贝到Rome - Total War\Data\settlement_plans\street_plans下。
4、 做好的COLLISION模型拷贝到\Rome - Total War\Data\models_building\INFO下。
5、 打开\Rome - Total War\Data\descr_building_battle\dbb_kevins_buildings.txt文件
我们可以在这个文件的尾部加入一部分内容。例如:
roman_town_collision ;名称任意
{
stat_cat indestructable ;未知
localised_name none ;未知
level
{
min_health 0 ;建筑生命
battle_stats ;不祥
item dummy ;建筑对应的ITEM模型
physical_info roman_city_collision_info.CAS ;建筑对应的COLLISION模型
}
}
6、 打开\Rome - Total War\Data\settlement_plans\roman_town.txt。
7、 文件打开以后,我们上面弄好的4个模型都可以在这个文件中设定。下面我对这个文件做一个说明。
plan ;开头字符,不能改变
{
target rectangle x -24 z 24 rot 0 width 32 height 32 ;代表攻城战的中心广场投影区域位置
floor roman_town_underlay.cas roman_town_overlay.CAS;就是underlay模型和overlay文件名
ground_types roman_town_ground.tga -288 -288 288 288 ;?不太清楚。好像没有啥用处
street_plan pathfinding_roman_town.cas ; 街道布局模型
borders ;border{}中间的就是城墙布局,里面的内容可以用layouts工具生成
{
gateway, 224, 0, 90, 0.50
tower_external_corner_link, -224, 224, -90, 0.50
tower_straight, 224, -128, 90, 0.50
straight, -224, -192, -90, 0.50
}
; COLLISION OBJECTS
roman_town_collision, 0, 0, 0, 0 ;我在前面文件设定roman_town_collision。
roman_tenamentB, -72.16, -23.75, 0.00, 0.500 ;民房 (民房的坐标类上)
roman_tenamentD, 50.83, -151.82, 180.00, 0.50 ;民房
roman_tenamentE, 154.612, 48.753, -158.308, 0.5 ;民房
tree_B, -24.74, -167.48, 0.00, 1.50 ;树木
} 果然数据狂人 果断保存到word,lanson果然强悍 果断表示 看不懂了
页:
[1]