模拟城市中文网

 找回密码
 入住
搜索
查看: 9162|回复: 22

新建一个piece类nam的简要过程

[复制链接]
发表于 2007-12-29 23:21 | 显示全部楼层 |阅读模式
具体的明年再说,先写个简要的。
新建之前当然的先想清楚将做的piece需要实现什么功能。

第一步,网格化。
游戏里图象和交通网络都是以Tile为单位的,因此需要将待做的piece网格化。包括三个部分:
1.图象的切割。需要将图象切割为Tile,分别制作s3d组。
2.道路类型的网格化。将每一个Tile包含的部分转换为九种基本道路类型的组合(对于特定的Tile,一般不超过两种)
3.路线的网格化。确定每一条行车路线通过了哪些Tile,分别从这些Tile的哪个方向入,哪个方向出。
网格化是必要的。对于一个玩家,看到交通工具可能走出的是一条弧线,但对于计算机处理来说,需要是通过一系列点的折线,路线的网格化就是完成这个工作。至于道路类型的网格化,就是Tile中某一道路类型用一个三十二位整型数描述它的通勤属性,这个数的规则和lot中通勤object第十五个参数是相同的。补充一句,以前我写教程时在通勤object第十五个参数列参数表时,引用的是sc4tool里的说明,现在审视一下,其中关于01和03的说明是不确切的,01和03表示的是斜角
┏━━━┓应当定义如下:游戏中Tile朝上的面依旧朝上,然后面向一条边从Tile内部朝向Tile外部。
┃ 1 ┃直行02,左转01,右转03。
┃0 2┃
┃ ↓ ┃
┗━━━┛
03┘↓└01

第二步,制作Piece。
游戏里任何一个对象的基础都是exemplar,nam还必须有sc4path。包括两个部分:
1.每一个Tile需要有一个exemplar引用s3d,这些exemplar组成了piece。
2.每一个Tile需要有一个sc4path描述通过该tile的行车路线在该tile范围内的路线类型、进出方向和路线曲线。
需要说明的是:A.exemplar的类型是heighway,一般用resourcekeytype3引用s3d组。这个property的值由七个数组成,如果用该property引用,那么每个tile的s3d组就应当由五个s3d组成,且group相同,表示五个视距。那么游戏中四个角度看到将是同一个s3d,这一点与一般bat的s3d组不同,例如一般bat的s3d中一个长方体只需要七个点,这里就必须是八个点,且贴图将其全包裹;B.exemplar组group一般相同,instance十六进制的高五位一般相同,高位数第六位表示在Tile组成的Table(矩阵)中的X值(列值),第七位表示Y值(行值),第八位一般为0;C.sc4path的instance的规则同上,一般处理为与对应的exemplar同。

第三步,描述Piece。
控制Piece类nam的rulfile是0x0a5bcf4b-0xaa5bc57-0x10000000,新版nam在namcontroller中。
先要为每个Piece确定一个十六位的ID,然后写一个描述段,描述段以
[HighwayIntersectionInfo_0x0000????] 打头,其中????便位该Piece的ID。描述段包括四个部分:
1.Preview,就是在Plop某个piece前看到的那个阴影。一般使用两个属性:A.Piece,包括五个参数:第一个x-offset,第二个y-offset,第三个rotate,第四个还不清楚用0好了,第五个意义不大;B.PreviewEffect,用一个字符串(注意:不是TGI)指向一个effectdir,这个字符串是啥呢,用reader打开effectdir文件就是section13里的那个str,通过该effectdir引用一个s3d,我们看到的阴影就是那个s3d啦,其instance是effectdir文件中section1里的那个resourcekey。
2.道路类型的网格化。实现四个功能:A.在地区交通总图和城市交通一览中转化为基本道路类型;B.使用optional语句可以确定与piece相邻Tile的道路类型,我们经常使用piece可以在相邻格引出一小段道路就是这么实现的;C.将一个piece plop到某一位置且原位置已存在道路,如果网格化的结果匹配就可以覆盖,否则不能plop,这一点与lot同;D.将一个piece plop到某一位置,如果该位置周遍一圈的网格化结果与piece边缘的网格化结果不匹配的话就不能plop。后两项不能plop时游戏一般会在同ring中选择该piece后第一个可以plop的piece(一般是改变方向),这样可以减少home和end的次数。
3.该piece占用了哪些位置,当然某Tile占用的前提是上一条中该Tile的网格化有效且不是optional。这两部分细说挺麻烦的,大家看该rul前面的说明吧,不过不需要那么多字符的意义,只需要记住'.'、'<'、'^'、其他字符这四种就够了。
4.其他属性。AutoTileBase引用的是exemplar组,rotate、transpose描述是否对上面所述的一切旋转和翻转,cost是建造价格。
需要说明的是,现有编辑器实现这一步有一定麻烦。1.reader和datgen都无法编辑effectdir,我的办法是用reader对effectdir进行hex editor(decode file)直接十六进制编辑;2.该rul是一个纯文本的大文件,已接近reader的编辑上限,而datgen经常保存失败,我的办法reader在十六进制编辑环境下先加长,然后编辑。

第四步,注册Piece。
Piece需要能够被从菜单中引用。我们从菜单中选择group,在group中我们按tab选择ring,在ring中按home/end选择piece。
1.建立一个group。在该rul中使用"RotationRing"语句,后面跟的是该group第一个ring包含的piece的id组。
2.在group中添加ring,在"RotationRing"语句后添加"AddTypes"语句,后面跟该ring包含的piece的id组。
3.菜单中引用group。建立一个misc catalog类型的exemplar,用submenukey这个property表示所属的菜单,用Iten button ID这个property引用group。该值为一个三十二位整型数,十六进制下高四位是6A47,第四位是该group中某piece的id,其ring循环从该piece所属的ring开始。

[ 本帖最后由 rszxh 于 2007-12-29 23:24 编辑 ]

评分

参与人数 1威望 +3 收起 理由
天唐永thianz + 3 感謝

查看全部评分

发表于 2007-12-30 10:31 | 显示全部楼层
看了两遍,晕晕的~

还是一边实践一边学习了~
 楼主| 发表于 2007-12-30 12:55 | 显示全部楼层
我写得也是晕乎晕乎的,这样吧,偶写一个case
用这个

里面的piece是这个。

case的所有编辑在ilivereader下完成。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
 楼主| 发表于 2007-12-30 13:30 | 显示全部楼层
第一步:网格化。

该piece占用了四个Tile。

┏━━━┳━━━┳━━━┓
┃   ┃   ┃   ┃
┃ 00 ┃ 01 ┃ 02 ┃
┃   ┃   ┃   ┃
┗━━━╋━━━╋━━━┛
    ┃   ┃
    ┃ 11 ┃
    ┃   ┃
    ┗━━━┛

对每个Tile建立s3d组。
    

道路类型网格化
┏━━━┳━━━┳━━━┓
┃ 01 ┃ 02 ┃ 03 ┃
┃  02┃02 02┃02  ┃
┃   ┃ 02 ┃   ┃
┗━━━╋━━━╋━━━┛
    ┃ 02 ┃
    ┃   ┃
    ┃ 02 ┃
    ┗━━━┛

路线网格化
路线编号:A.train:(1)00(2)→(0)01(3)→(1)11(3)
     B.train:(3)11(1)→(3)01(0)→(2)00(1)
     C.train:(1)01(3)→(1)01(3)→(1)11(3)
     D.train:(3)11(1)→(3)01(1)→(3)01(1)
     E.train:(1)02(0)→(2)01(3)→(1)11(3)
     F.train:(3)11(1)→(3)01(2)→(0)02(1)
     G.train:(1)00(2)→(0)01(2)→(0)02(1)
     H.train:(1)02(0)→(2)01(0)→(2)00(1)
变换描述方式:
Tile00:train(A)1→2 train(B)2→1 train(G)1→2 train(H)2→1
Tile01:trian(A)0→3 train(B)3→0 train(C)1→3 train(D)3→1
    train(E)2→3 train(F)3→2 train(G)0→2 train(H)2→0
Tile02:train(E)1→0 train(F)0→1 train(G)0→1 train(H)1→0
Tile11:train(A)1→3 train(B)3→1 train(C)1→3 train(D)3→1 train(E)1→3 train(F)3→1
令0 = 路线A、B 1 = 路线C、D、G、H 2 = 路线E、F
再次变换描述方式:
Tile00:train(1→2)0、1 train(2→1)0、1
Tile02:train(1→0)1、2 train(0→1)1、2
Tile11:train(1→3)0、1、2 train(3→1)0、1、2
Tile01:train(0→2)1 train(2→0)1 train(0→3)0 train(3→0)0
    train(1→3)1 train(3→1)1 train(2→3)1 train(3→2)1

[ 本帖最后由 rszxh 于 2007-12-30 16:05 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
 楼主| 发表于 2007-12-30 13:41 | 显示全部楼层
第二步,制作piece。

每一个Tile需要一个exemplar引用s3d组。

Instance的规则(QQ截的图,颜色比较淡)

sc4pathfile
Tile00Tile01
Tile11Tile02
需要注意,允许变轨的格,version需要为1.2,相关段第五个参数需要为1。
同时,变轨的几条岔道至多一条是直线,变轨箭头区分左右好象不是通过计算线路的斜率,而是计算弧度。

[ 本帖最后由 rszxh 于 2007-12-30 16:48 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
 楼主| 发表于 2007-12-30 13:53 | 显示全部楼层
第三步,描述piece。
往rul添加段落

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
 楼主| 发表于 2007-12-30 13:55 | 显示全部楼层
第四步,注册Piece。
这里没有新建group,而是加入了已有的group。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
发表于 2007-12-30 15:50 | 显示全部楼层
原帖由 rszxh 于 2007-12-30 13:30 发表
路线编号:A.train:(1)00(2)→(0)01(3)→(1)11(3)
     B.train:(3)11(1)→(3)01(0)→(2)00(1)
     C.train:(1)01(3)→(1)01(3)→(1)11(3)
     D.train:(3)11(1)→(3)01(1)→(3)11(1)
     E.train:(1)02(0)→(2)01(3)→(1)11(3)
     F.train:(3)11(1)→(3)01(2)→(0)02(1)
     G.train:(1)00(2)→(0)01(2)→(0)02(1)
     H.train:(1)02(0)→(2)01(0)→(2)00(1)
   ...

这一行有些看不懂,最后的(3)11(1)是否应为(3)01(1)?
 楼主| 发表于 2007-12-30 16:04 | 显示全部楼层
//shy
恩……
发表于 2007-12-30 18:52 | 显示全部楼层

提一个关于resourcekeytype3引用s3d组的问题~

目前看到的s3d文件都是一个立方体七个点的那种~

3d模型文件是如何被切割成tile的呢?

即便是一格一格的建模,渲染出来的仍然是一组20个文件的啊?

有什么特殊的方法么?
发表于 2007-12-30 20:20 | 显示全部楼层
給tnt:

SC4模型分兩種,一種是不能隨意轉角度的。如大多數建築。

另一種可以隨意轉角度,如大多數交通工具,你不會發現有交通工具像建築一樣只給你切四個角度;交通工具都是可以轉來轉去開來開去的,因為他們是真3D。
給交通工具行駛的高架橋等當然也是真3D,要不然就開不上去了(不能轉的假3D外觀是箱子的,和真3d不同)

可以轉的交通工具可參考:
那個格式一樣的:
[转]"可动的"全3D"交通工具"制作


目前…中文沒有的…起碼沒看有人做過
发表于 2008-1-28 19:26 | 显示全部楼层
似乎是应用于其它游戏的~

但是如何导入sc4~

似乎还是有很大困难的~
发表于 2008-4-5 21:18 | 显示全部楼层
晕头转向……
发表于 2009-9-21 20:09 | 显示全部楼层
不错不错!!!
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2009-9-21 20:29 | 显示全部楼层
原帖由 天唐永thianz 于 2007-12-30 20:20 发表
……

目前…中文沒有的…起碼沒看有人做過 ...

不知道三叶做的那几座桥算不算?
http://www.simcity.cn/thread-63168-1-3.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-22 05:36 | 显示全部楼层
叶子,你看看天唐的发帖时间呀……
如果我没记错的话,你也是在我发了下面这个帖以后才开始量产的……
http://www.simcity.cn/forum.php?mod=viewthread&tid=31138
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2009-9-22 11:47 | 显示全部楼层

回复 16# 的帖子

时间……噢,这贴不知道是哪个盗掘出来的……
回复 支持 反对

使用道具 举报

发表于 2009-9-22 13:24 | 显示全部楼层
其实,这个帖子我一直收藏着,并且经常会翻出来看~

有些现在还不明白……
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2009-9-22 15:03 | 显示全部楼层
LS有空做一个北京南站吧?
回复 支持 反对

使用道具 举报

发表于 2010-1-28 17:15 | 显示全部楼层
看得我头都大了………………
回复 支持 反对

使用道具 举报

发表于 2010-10-5 21:29 | 显示全部楼层
暈頭轉向…
先留名後學習
回复 支持 反对

使用道具 举报

发表于 2010-10-6 19:48 | 显示全部楼层
放一個流程圖
做Piece的流程倒過來就是了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x

评分

参与人数 1威望 +1 收起 理由
rszxh + 1 给你这张图的

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2011-1-3 01:04 | 显示全部楼层
楼主你那火车是怎么爬上捷运高架的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 入住

本版积分规则

小黑屋|手机版|模拟城市中文网

GMT+8, 2024-11-18 16:23 , Processed in 0.041457 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表