Strpix3可以使您对官方的关卡编辑器所使用的TR WAD文件做编辑修改工作.
- 工具作者:Turbo Pascal(Cyber_pascal@yahoo.com)
- 文档翻译:Yew(古墓丽影中文站:工作组)
- 下载:文件:Strpix 395 rev 11.zip
怎样安装
将Strpix3.exe和solid.bmp置于同一文件夹. 当然您还需要确定在您的Windows\system文件夹下存在Opengl32.dll和Glu32.dll这两个dll文件, 通常所有的Windows版本都已经包含有这些dll文件了.
Strpix3设计运行于普通字体大小,32位色,800x600屏幕分辨率. 如果您在运行程序中遇到问题,请参阅"Strpix3与某些显卡的兼容问题"部分.
Strpix3的工作布局
Strpix3布局分布是这样的:
- 左边,您可以看到WAd调用的全部材质, 这些材质以"页"编组, 每一页是256x256像素大小. 使用材质窗口下面的"页集合框"选择页面.
- 材质窗口下方,您可以看到WAd下定义的材质块列表, 您可以从列表中选择任何材质, Strpix3会在材质窗口显示您按规定的页和相应的材质块. 在材质列表中选定的材质块称作"当前材质".
- 屏幕右边是"对象窗口", 您可以看到WAD中所包含的对象. 对象分解成许多片段, 您会看到Lara的腿,Lara的手,Lara的头,等等. 静态对象(椅子,桌子,柱子,塑像等等)一般就是一个对象. 使用对象窗口下方的集合框控制来选择某对象在对象窗口中显示. 当前显示的对象称作"当前对象". 您可以以线框架模式,实体模式,和材质模式观察对象. 使用控制以选择您需要的模式. 在线框架/实体模式下您会发现每一个对象被分解成许多片称作"面". 有一些面是正方形的而有一些则是三角形的.
快捷键
选择对象后 您可以使用如下键设置:
- , 按住此键不放同时在对象窗口移动鼠标可以旋转当前对象. - + , 按住此键不放同时在对象窗口移动鼠标可以延展当前对象.
- + , 按住此键不放同时在对象窗口移动鼠标可以缩/放当前对象.
- , 点击对象的面以应用"当前材质" 到该面.
- + , 按住此键同时鼠标套住对象的面可以提取该面的材质并设之为"当前材质".
- + , 按住此键同时鼠标套住对象的面可以翻转上面的材质.
- + , 按住此键同时鼠标套住对象的面可以旋转上面的材质.
- + + , 按住此键同时鼠标套住对象的三角形面可以选择一个三角形面的材质类型. (详见下)
旧版Strpix2的功能
在旧版的strpix,您只能提取Wad使用的全部材质并保存为Windows Bitmap位图格式, 然后再用您惯的图形软件打开和编辑Bitmap位图,之后再把修改后的Bitmap位图导入回wad.
在Strpix3版中您依然可以那样做:
- 在菜单中选择"文件", "打开" 打开一个WAd文件.
- 在菜单中选择"材质", "导出为Bitmap位图", 保存全部材质.
- 修改完Bitmap位图后, 在菜单中选择"材质", "从Bitmap位图导入", 打开您修改后的Bitmap位图.
- 保存修改后的WAd文件.
新版Strpix3的提取材质功能
Strpix2很难找全对应于每个对象的材质块. 现在strpix3提取对象的材质块s变得异常简单.
- 在对象窗口选择您需要的对象.
- Ctrl + 单击对象面以获取材质
- 点击材质表下方的按钮保存当前材质为Bitmap位图. 用您惯用的图形软件编辑材质块 .
- 现在,再次点击按钮以导回并替换当前材质为新修改后的材质.
- 保存修改后的WAd文件.
Re-texturing对象
上述2种方法的主要问题是, 如果所有的对象共用相同的材质块的话,您在导入/导出时就会出现相互影响的现象.即,假设您编辑了Lara的腿部的材质块, 那么Lara其它的身体部件就会受到影响, 如手臂或者脸部. 解决的方法很简单, 您只需要重新应用腿和手臂不同的材质透明度.
- 在材质窗口点击一个材质以选择该材质为当前材质.
- 选择您想重编辑材质的对象并单击每一个面以应用当前材质. 记住,您可以翻转和旋转材质.
- 保存您的Wad.
导入/导出对象到CAD软件
Strpix3允许您导出当前对象到CAD软件作进一步的修改, 并重新导入对象到WAD.
编辑修改一个3D对象 (一个模型)不是一件简单的事情, 一个好的CAD软件非常昂贵, 您还必须懂得使用它.如果您不很感兴趣或者您从未使用过CAD软件,那么您可以跳过这一部分,而且在您获得CAD软件并且熟悉它之前绝对不要尝试修改对象的多边型. 请阅读下面的"DXF格式" 以了解该使用哪些CAD软件 .
DXF格式
DXF格式是Autodesk公司发明并被许多CAD软件所支持的格式. 这类文件可以很大, 但不过是TXT文档而已, 因此可以压缩到很小.而且因为是TXT文档, 该格式可以很容易读/写,不幸的是您无法保存材质图,您也就心全部材质无法打开模型.
在DXF文件中所有对象的面皆可以2种途径存储:
- 独立3D面, 所有的面皆由4维数据来确定和区分.如果面是三角形,那么第4维的数据就等于第3维的数据.
- 极点列表, 所有的面通过一个连续极点列表数据来定义.
Strpix3只能以"独立3D面"方式读取DXF文件,请注意将您的CAD软件以这种方式书写DXF文件. 我所知符合以上要求的CAD软件有: AUTOCAD 13或更高版本, Rhinoceros, Lightwave, Caligiary TRue space, Metasoquiola. 至于3Dstudio Max 似乎无法以"独立3D面"方式书写DXF文件, 因此无用武之地,真是遗憾.
Strpix3的DXF文件的材质
Strpix3的DXF文件使用命名的层来保存每一个面的材质信息.
在绝大部分CAD软件中, 面是可以编成组的,称作"层次", 当您为某层指定属性比如颜色, 曲线类型,等等. 那么所有与此层相指定的面也具有相同的属性了.
Strpix3的DXF文件会把面编成许多层, 每一层都记录了模型要调用不同的材质信息. 层以这种规则命名:
- Textur_xxxx_y_z 对应的是普通 (非翻转的) 材质.
- Fliped_xxxx_y_z 对应的是翻转过的材质.
- xxxx : 该面使用的材质号(不足位补0)比如"0256", "0010", "1132"等.
- y : 该面使用材质的map方式. (说明详见下)
- z : 材质透明度. 0=不透明, 1=半透明, 2=透明.
y值定义如下:
- 0 = 正方形面.
- 1 = 三角形面 类型 1
*-------
|
|
- 2 = 三角形面 类型 2
|
|
----*
- 3 = 三角形面 类型 3
|
|
*------
- 4 = 三角形面 类型 4
-----*
|
|
如果您要建立新对象, 一定要记住以如上规则为指定该面的层命名; 比如: Textur_0025_0_0, Textur_1342_1_0, Fliped_0035_2_0等等.
在Strpix3中, 按住+ + over a 三角形面, 就可以改变三角形类型1-4. 如果您自定义的三角形面与材质的透明度方式不同的,您就可以像这样来修改.
对象 Dimensions
如果您要建立新对象, 请先问您自己"我怎么知道我制作的对象在TR游戏中会有多大?" 不错, 您怎么知道您的杰作是太大了还是太小了?.
我不知道TR游戏所使用的单位制, (英尺,米,码?)
我只知道每一个在关卡编辑器中一块地板是10.24 x 10.24个单位.
一个典型的(可推动的)箱子是10.24x10.24x10.24个单位,Lara的身高大约是10.24个单位. 因此当您在创建您的对象时请据此数据来参考.
高级用户注意: 不错, 也许您已经注意到在TR4和WAD文件中尺度为1000/1亦即一块地板实际上是1024x1024x1024, 但是这个尺寸对于CAD处理来说过于大了 (对于Strpix3也是)所以我在导入DXF时,把尺度调整为100/1.
关于TR对象的一些限制
您不能直接用您的CAD软件创建一整个房子并把它加入到WAD文件的对象列表中去, 因为对于对象存在着一些容量限制.
每个对象是由许多极点来建立的(用来定义每一个面的点), 有些面拥有共同的极点,Strpix3会自动建立一个极点表.
我发现255是每个对象的最大可用极点数,我不知道是否也有最大可用面数的限制. Strpix3会在状态栏显示当前对象已使用的极点数和面数. 如果从CAD软件导入的对象使用极点数超过了255,那么游戏运行时会自动崩溃.
导出/导入 DXF
- 在对象窗口中选定对象.
- 在菜单中选择"文件", "导出DXF"以导出当前对象.
- 用您的CAD软件打开, 编辑并保存DXF.
- 在菜单中选择"文件", "导入DXF"以导入回模型.
您也可以用该选项将对象移植到其它对象,比如 您可以选择Baddy的头, 导出到DXF, 然后选择Lara的头部对象再导入Baddy的头部DXF覆盖Lara的头部.
如果您在导入DXF时出现错误信息:
- "Defa" is not a valid integer value.
这说明DXF中的层是以"默认名称"命名的. 使用您的CAD软件以有效的Strpix3层命名方式重命名所有层.
也许您会遇到这样的错误信息:
- "xxxx" is not a valid integer value.
这说明您的CAD软件在创建极点值时都是使用"," (逗号)来表示小数. 而Strpix3是以"." (点)来表示的.进入控制面板,更改设置, 选择以"点"来表示小数值, 然后使用您的CAD软件重新创建DXF.
创建新对象
如果您要创建新对象,那么:
- 您在使用CAD软件的时候, 定义至少1个名为Texture_xxxx_y_z的层(如Texture_250_0_0 ).
- 使用那一层建立对象 .
- 确定您的对象正位于中央0,0的位置,上/下位置必须从0开始.
- 请注意您的模型大小,记住以10.24个单位做参考.
- 务必以3D面方式保存DXf.
- 在Strpix3中选择将要被替换的对象.
- 导入您的新DXF.
- 如果您的对象超过了250个极点, 强行使用该对象会导致游戏崩溃 .
Colision编辑器
在WAD文件中存在2类对象, 活动的和静态的. 活动的就是由块s组合建立的动态对象. 静态mesh就是不活动的对象(所以是不动的).
只有静态的才有bounding box data. 这类对象有2个bounding box,1个用于visibility porpuse(我猜是用于AI的), 另一个用于colisional测试(实体bound).
- 在combox box选择关卡中要用到的静态mesh. 您可以看到相应对象及它的bounding box.
- 您可以选择检查/编辑visibility或者colisional bounding box.
- boundig box是使用cordinates来定义的: x1,y1,z1 以及 x2,y2,z2. 编辑这些cordinates您会立刻看到改变.
- 您从CAD软件导入新对象时, 可以单击按钮让strpix3自动计算新模型的bounding box.
PIX文件格式
您传播您的工作成果的最佳途径就是发布整个WAD, 当然WAD的体积可能是个问题.
另外的办法就是使用合适的针对Strpix的文件格式,称作PIX格式. PIX文件只存储对象的面和使用的材质数, PIX的体积都很小,因为它并不记录当前材质数据, 动作以及其它包含在WAD的信息.
如果您是使用WAD本身原始材质来修改WAD的,您只需要发布PIX文件并告诉别人哪个WAD要应用这些PIx文件. 如果您要用图形软件编辑材质, 您需要在菜单中选择"材质"以提取全部材质, "导出为Bitmap" 然后把Bitmap转换成JPG格式(这样体积会小些). 然后发布JPG和PIX文件并告诉别人哪个WAD要它们.
Strpix3和自定义WADs
我还没有用TRWEST,TR2WAd或者WADMERGER等创建的WAD来全面地测试Strpix3, 因此还无法确定这些个WAd是否总能兼容Strpix3.当我破解原始WAD的文件时,我发现在某些情况下, 如果某Mesh后需要填充2个字节(1个字)的话,Strpix3就会在读/写此mesh时预先寻找这2个字节,如果应该出现而没有出现2个字节时,Strpix3或者WAD就会出现崩溃.
我发现TRwest创建的一种mesh_pointer表很特别, 在某些时候一个mesh entry会被复制许多次, 从3.7版的Strpix3开始已经注意到此问题因此可以正确地打开和保存wad, 当然,我不确定这是与TRwest唯一的不兼容情况. 如果您使用Strpix3遇到了自定义WADs文件的问题,我建议您在原始的WAd中修改对象,在您完成后,用生成该WAD的builders程序提取对象.
Strpix3与某些显卡的兼容问题
编写实时3D程序不是件轻松的事情,主要有2条路,使用Microsoft的Direct3D API,要么使用SGI的Opengl API.
我选择Opengl因为它容易学, 几天时间就能学会起步并画一些简单的3D图形, 而且可以找到许多关于Opengl方面写得不错的文档,更何况Opengl的API是如此的强大!!.
坏消息是显卡制造商更愿意支持Microsoft的Direct3D技术,于是某些显卡在Opengl上会出现问题.
我家有一台Pentium 150Mhz,16M内存,基于S3芯片的显卡的老爷机, 可以飞快地运行strpix3, 但是就有一些显卡不能运行Strpix3, (像某些Voodoo卡和ATI的显卡). 眼下, 我还无法修理这个问题,等我手边有Voodoo卡和ATI的显卡时再说吧.
如果您在运行Strpix3时遇到这些问题您可以:
- 以参量<24>运行strpix3 如C:>Strpix3 24
- 升级您的显卡驱动.
- 禁止您的显卡设置程序中的所有功能.
- 使用SCitech的GLdirect软件. (免费下载30天试用版).
致谢
- 我要感谢Toby Gard和Paul Douglas把Lara Croft介绍给我. 还有EIDOS & Core的那帮使Lara永褒青春的家伙们.
- 我要感谢Philp Campbell, 他制作了许多很棒的关卡, 我整晚都在玩那些关卡.
- 感谢JhonyBoy和我共享他的WAD文件信息,非常感谢Jhon.
- 感谢Eidos论坛上的家伙使我对这个题裁如此感兴趣, 尤其是ROBBASE.
- 最后感谢我在JHN论坛上最要好的朋友, Bart, Kev, Quad, Biker...
Turbo Pascal
2001年6月8日.