📚 Docs

地图模组:阶段 2

更新于 v252 - 2020 年 4 月 作者:Marcos Elias

简介

Proton Bus 地图模组系统的第 2 阶段允许游戏中拥有乘客、交通和其他更多内容!这将其提升到了另一个层次,实际上可以将此功能前后的 Proton 分开。这几乎就像一个新游戏!

警告: 由于时间限制,无法在转换和编辑过程中提供个人支持。我们建议您自己尝试,看看其他地图是如何制作的,并探索文件结构。最好在 Facebook 游戏群组中发布相关问题,这样解决方案可以帮助每个人,其他模组制作者也可以帮助您。

如果您尚未订阅,请加入制作人的频道:www.youtube.com/marquinhosxp。 一些视频和教程发布在那里。

PBSU 官方 Facebook 页面:https://www.facebook.com/protonbusoficial 以及 PBSR:https://www.facebook.com/protonbusrod.oficial/

Facebook 群组

模组创作者的独家群组: https://www.facebook.com/groups/pbsmods/ 如果您只是玩家,请避免加入此群组,以免因离题帖子(将被删除)而造成混乱!

用户群组: 在这些群组中,从玩家的角度自由发布截图、提示、视频、各种教程等:

获取模组纹理的好网站提示: http://www.textures.com


关于第 1 阶段的说明

在开始第 2 阶段的地图之前,您必须掌握第 1 阶段的基本制作水平。如果您还不熟悉,请不要担心,您可以跟随本指南以及示例地图进行操作。最大的要求是拥有 Blender 的基础知识,因为我们将使用它来导出地图。

关于第 1 阶段的旧文档在这里,针对地图: http://blog.protonbus.com.br/2019/09/experimental-mods-de-mapas-no-pbs.html

针对巴士: http://blog.protonbus.com.br/2018/09/primeira-fase-do-sistema-de-mods-de.html

始终使用最新版本的游戏总是好的!旧版本不再受支持,beta 版本在不断发展,所以我们总是考虑最新的。您可以在 http://pbsu.busmods.com 找到最新的城市版构建,在 http://pbsr.busmods.com 找到公路版。

基本上,我们使用 Blender 2.79 来制作场景,以 3ds 格式导出模型,并为 Proton Bus 系统创建文件夹和文件结构。

重要提示:使用 BLENDER 2.79! 当前游戏格式所需的导出器在 Blender 2.8 中不起作用,显然它已被停止使用,并且至今没有人更新它。也许将来它会再次起作用,有些人正在尝试。

您可以在这里下载 Blender 2.79:https://download.blender.org/release/Blender2.79/ 最新版本通常是名称中带有“b”的版本。平台无关紧要,这取决于您的系统(Windows、Linux 或 Mac)和架构(32 或 64 位)。

如果您已经在 2.8 中开始了地图,建议导出为 2.79 可以打开的某种中间格式,然后从那里导出到游戏。

重要提示:修改 PROTON 的 3DS 导出器! Blender 中的默认 3ds 导出器会将对象和纹理名称截断为 12 个字符。我们要避免某些部件名称和/或纹理名称出现错误,通常需要的字符数不止于此。

下载用于导出的修改后的 Blender 插件(Blender 2.79 的文件): http://proton.viamep.com/coisas/export_3ds_protonbus_blender279.zip

关于如何更改插件的教程: https://youtu.be/0EokFmSjGdA

如果您愿意,不用下载这个,而是更改 Blender 的 scripts\addons\io_scene_3ds 文件夹中的 export_3ds.py 文件。查找 [:12] 并将 12 更改为一个大得多的数字,如 999。这是字符限制。没有这个,导出到游戏可能会失败。

提示: 下载 BLENDER 时,您可以选择 zip 中的“便携式”版本,以便同时保留多个版本。


地图模组的文件结构

Proton 中的地图由几个 txt 文件(纯文本)和一些文件夹组成。基本的和主要的结构是一个地图定义 txt 和一个文件夹,两者都位于 maps 文件夹中,而该文件夹又位于游戏的 mods 文件夹中。

PC 上的结构示例:

文件夹结构

地图定义 txt 必须以 .map.txt 结尾(例如:Estrada Longa.map.txt)。必须是一个唯一的名称!

重要提示: 切勿在模组文件名中使用重音符号、变音符或特殊字符!

在这个 txt 中,我们将拥有基本结构:

[map]
baseDir=Estrada Longe 
; 地图的基本文件夹,与 .map.txt 一起位于 maps 中

modelsDir=Rota 1 
; 模型文件夹,位于 tiles 文件夹内

textures=textures 
; 纹理文件夹

mapModVersion=2 
; 在第 2 阶段使用数字 2!

preview=preview.png 
; 选择屏幕图像(16:9,例如:640x360)

在地图的基本文件夹中,必须有其他文件夹:

基本文件夹

  • dest:存储标志和牌照。
  • skins:存储地图巴士皮肤(在 skins/0/pbc 内)。
  • textures:存储纹理。 避免 JPG,使用 PNG!
  • tiles:必须强制使用此名称。其中包含模型文件夹 (modelsDir)。

重要提示: PROTON BUS 地图模组是完全加载的!它们不能太重。如果您要做几条长线,请将它们分成几部分。

modelsDir 中定义的文件夹内,是导出的 .3ds 文件和配置:

Tiles 文件夹

模型文件夹的内部结构:

模型子文件夹

  • aipeople:行人设置。
  • aitrains:火车设置。
  • aivehicles:交通设置。
  • busstops:巴士站设置。
  • entrypoints.txt:高级入口点设置。
  • entrypoints_list.txt:入口点的简单列表。

重要提示: 模组不受保护!从技术上讲,没有任何游戏是受保护的。防止您的模组被编辑或泄露的唯一方法是不发布它。


配置入口点

入口点定义了开始游戏时巴士出现的位置。它们必须具有唯一的名称(例如:351F-10 TPGaragem Central)。

重要提示: 切勿在这些名称中使用重音符号或特殊字符!也不要使用斜杠。

entrypoints_list.txt

简单列表,每行一个名称。

入口点列表

entrypoints.txt

定义地图上的位置和物理旋转。

入口点配置

请记住: 在 Blender 中,Y 是前/后,Z 是高度。在 Unity(游戏)中,Y 是高度,Z 是前/后。复制坐标时反转 Y 和 Z!

要找出坐标,请在 Blender 中使用一个 Empty 对象:

Blender 中的 Empty

标志和目的地

dest 文件夹中,创建与 txt 中定义的 entrypoints 名称完全相同的文件夹。

Dest 文件夹

在每个目的地文件夹内是图像:

目的地图像

重要提示: 避免手机图像大于 2048 像素!

建议的标志文件名:

  • 1.png, 2.png, 3.png (电子标志 1024x128)
  • capelinhaDigital.png, capelinhaPVC.png (256x128)
  • lonaDestino.png, lonaLinha.png (卷帘标志)
  • placa1.png, placa2.png, placa3.png (侧面和前面牌照)

配置乘客

每个站点在 3D 中必须有一个唯一的名称(例如:zzPonto1)。

在 Blender (3D) 中

站点包括:

  1. 一个名为 nomedoponto_trigger 的不可见立方体(触发器)。
  2. 用于乘客位置的小物体(平面/立方体),称为 nomedoponto.000, nomedoponto.001 等。

Blender 中的站点

提示: 使用简单的平面作为乘客以节省多边形。

正确的触发器:

正确的触发器

位置良好的触发器示例:

触发器示例

位置不佳的触发器示例(不能做!):

错误的触发器

重叠(不能做!):

重叠的触发器

在相反站点正确:

相反的站点

在调试模式下可视化:

调试模式

在 .txt 文件 (busstops) 中

busstops 文件夹中创建一个与站点同名的 txt。

Busstop Txt

[busstop]
name=广场站
isLeft=0
paxAmount=15

[from_3d]
readFrom3D=1
prefix=zzPonto1
maxPathsToCheck=30
defPaxRotY=90
  • prefix:必须与 3D 中使用的名称完全匹配(.000 之前)。
  • defPaxRotY:默认乘客旋转(测试 0, 90, 180, -90)。

配置行人

工作原理类似于站点:定义路径 (path) 的一系列对象。 示例:xxCalcada1.000, xxCalcada1.001 等。

行人路径 Blender 行人

aipeople 文件夹中创建一个 txt:

行人 Txt

[automatic_setup]
enabled=1
loop=0
reverse=0

[defaults]
isSpawner=1
spawnInterval=5
allowBicycle=0
  • loop=1:最后一个点连接到第一个点(圆形)。
  • loop=0:路径在最后一个点结束(线性)。

配置交通车辆

就像行人一样!aivehicles 文件夹。

交通 Txt

  • isBusSpawner=1:使巴士出现。
  • spawnInterval:增加以减少交通。
  • speedMultiplier:更改速度(例如:0.5 一半,2 双倍)。

配置地图巴士皮肤

将皮肤 (PNG) 放在 skins/0/pbc 中。游戏随机选择。 PBC 皮肤基础:http://omsi.viamep.com/proton/base-skins-pbc-protonbussimulator.zip


配置火车

同样的逻辑,aitrains 文件夹。 建议:在 defaults 中 isSpawner=0,并定义间隔开的手动生成器。

火车 Txt

  • randomTimeToWaitAtStart=1:在随机时间开始。
  • spawnTimeInterval:火车之间的间隔(例如:120 秒)。

重要提示: 火车不停车!它们会碾过一切。不要做平交道口。


3D 模型中的特殊命令和名称

  • 透明度: 在对象名称中使用 _transparent_(例如:grade_transparent_)。
  • 碰撞器: 使用 _gencol_ 生成自动碰撞器(街道、人行道)。 适度使用!
  • 不可见碰撞器: 使用 _gencol_invisible_(例如:barreira_gencol_invisible_)。
  • 自发光: 对常亮对象使用 _emissive_
  • 低速区: 终点站的对象 _low_speed_zone_(避免投诉)。

Low Speed Zone

  • 强制退出: 终点站附近的对象 _force_exit_

Force Exit

  • 额外细节:_det1.3ds 结尾的 3DS 文件(例如:arvores_det1.3ds)。仅当用户启用“额外细节”时加载。

闪闪发光的纹理配置

为了避免地面上的纹理闪烁 (z-fighting/flickering),在纹理旁边创建一个 .config.txt 文件。 例如:asfalto.png.config.txt

配置 Txt


附加功能 - 优化技巧

  • 小纹理: 对重复纹理使用 256x256 或 512x512。
  • 最大 2048px: 切勿在手机上使用大于 2048px 的纹理!

纹理警告

  • 碰撞器: 避免复杂的碰撞器。仅在地面和主墙上使用 _gencol_
  • 材质: 避免同一对象上有许多材质。
  • 合并对象: 合并具有相同材质的附近树木以减少绘制调用。

目前就这些!玩得开心!