Prison Architect Guide

[人人都能做MOD]-总纲篇 for Prison Architect

[人人都能做MOD]-总纲篇

Overview

这篇指南不仅仅只针对《监狱建筑师》这一款游戏的MOD制作。因此无论你对这款游戏是否有兴趣,只要了解了这些方法,你可以将其运用到其他游戏的简易MOD分析与制作上。我花了一个星期来筹备这个系列的指南,旨在帮助更多的中国人掌握一些基础的MOD制作/分析方法,哪怕他们也许并不会任何编程知识。你也许可能要质疑道:什么?!不会任何编程知识?那怎么可能?!是的,不会任何编程知识也可以制作MOD。游戏开发商们已经将游戏拆成了一个又一个的小块,以供MOD作者们便于制作他们自己的MOD,这也就使得人们其实并不用掌握精湛的编程技巧,就能制作属于他们自己的MOD。可以说,今天,这篇指南的目的,是教你们如何拼积木。若本指南有错误,望不吝赐教;若对您有帮助,别忘了点个赞、关注作者或是收藏,都是对我的社区工作的一种鼓励和支持。若是想查看更多的[中文指南]系列,可以到我个人资料页面的-[指南]中查看。另外,[关注]作者可以得到第一时间的推送。By Attack.On.Pika

准备工作

如果你想拼积木,首先你得先去买一套积木,并打开它的包装。
现在,我们手头有一套叫做《监狱建筑师》的积木。
我们打开游戏的本地地址[右键-属性-本地文件-浏览本地文件]

现在,你会看到这里有着这么多的文件,而其中有一个叫做main.dat的主要文件。那就是我们需要拆开的包装。

有时候,游戏的厂商会试着给游戏加密,也就是上了一道锁,目的是为了让你不那么容易地获取游戏文件。但作为一个支持创意工坊的游戏,游戏厂商并不会给它加锁。所以,针对这一款游戏,我们可以用这样一种特殊的方法这样拆开它的包装:右键-其他压缩命令-用压缩软件打开。

我们打开了文件,看到了如此之多的文件。我为这些文件列了个清单,也将以清单中的内容作为讲解。

  • Language文件夹,存放着游戏的文本
  • biographies.txt,存放着罪犯的罪名/特性/(一般)姓名的信息。
  • needs.txt以及needs-female.txt,存放着罪犯的需求相关的信息。
  • prefabs.txt,存放着预设快速建造的信息。
  • research.txt,存放着科技树的信息。
  • reform_programs.txt,存放着改造方案的信息。
  • production.txt,存放着生产方案的信息。
  • materials.txt,存放着游戏中各类物体/房间的信息。
  • objects.png以及people.png,存放着游戏中所显示的图标。
  • objects.spritebank,存放着图标调用显示方法的文件。
  • ui.png,存放着UI图标,如房间图标。
  • interface.spritebank,存放着UI图标调用显示方法的文件。


很多,是吗?
但是不要害怕,我将慢慢为你讲解每一个文件的具体修改方案。
让我们先从最简单的开始……
不过在此之前,把所有东西,都解压到一个独立文件夹里去。

具体实践-汉化

没有什么能比得过修改游戏语言文件更让你感到兴奋和开心的事了。
想想吧,定义游戏中每一个物体的叫法,把囚犯称为”贱民”,把狱警称为”老菊”……
哦,我说的可不是”太阳监狱”……或许我们可以将其称为”月亮监狱改造计划”。

I.初步认识文件
打开datalanguage,您会在此看到一个名为base-language.txt(称呼为A)的文件,是的,这就是语言文本。接着,打开datalanguagesimplifiedchinese,您也会在此看见一个base-language.txt(称呼为B)文件,这是为什么?

A文件存放的是游戏的纯英文文本,而B文件存放的是官方已汉化好的部分中文文本文件。

但B文件中的汉化文本仍有缺失。
您可以想象B文件是一张带孔的纸,孔就是缺失的文本。我们将B覆盖在A上,没有孔的地方是中文,所以你看到的是中文,而有孔的地方你会通过这个孔看见A上写着的英文文本。这就是你为何会在游戏中既看到英文文本又看到中文文本的原因了。

而补全汉化的实质就是,把那些孔补上。如果你有兴趣或是有什么地方没弄懂,可以进一步参考我在CN的这两篇文章:
[link]
[link]

现在,你可以直接修改B文件中的文本(把中文随意更改)。
但在你进入游戏查看您的”杰作”之前,我们还需要做一件事:让游戏识别这个MOD。

ps:你可以参考我做的这个简中翻译MOD完成你的汉化:
[link]

具体实践-创建MOD

让我们先进入
C:Users您的系统用户名AppDataLocalIntroversionPrison Architectmods
在这个文件夹下任意创建一个以数字命名的文件夹。比如文件夹-“89757″。
在这个文件夹下,我们需要创建三个文件:

  • thumbnail.png
  • manifest.txt
  • data

我们一个文件一个文件来说。

I.thumbnail.png

文件是您的MOD在创意工坊显示时的标题图,在这个游戏中,这个图片必须为.png格式。

II.manifest.txt

是您MOD的简介信息,包含了作者信息、更新时间等,内容只能用英文填写。您所需要了解的几个各项属性见下:

属性
属性描述
Name
MOD的名字
Author
作者的名字
Description
关于MDO的简介
Version
MOD的版本号
Date
更新或发布时间
URL
如果你想的话,您可以在此填写您的个人主页
isTranslation
该项只有两个值:true或是false,代表您的这个MOD是否是一个”汉化”MOD

作为例子,您可以这么填写:

在MOD发布后,这个文件中将会自动填写三个您不需要亲自掌握但只需稍微了解一下的值:

  • FileID:MOD在工坊中的编号
  • UpdateTime:更新时间
  • SteamAuthor:A+您的steam64位ID
III.”data”文件夹

把你刚刚做好的文本文件,按照原data(就是你解压出来的那个data文件夹)文件夹里的文件顺序复制粘粘到这个文件夹中。
正如刚刚所说的AB文件的区别,这个MOD对于原游戏文件就是B文件,它将直接覆盖住A文件中相应位置的文件。所以,注意您的文件在该文件中的放置位置。

一切大功告成,现在,我们进入游戏,然后启动您的MOD,你就可以看见您的成果啦。
事实上,对于其他游戏,创建MOD的方法也是大同小异,这也就是我说的,为什么只要看完了这篇指南,您就能初步掌握其他MOD的做法了。

如果您对这一部分还有任何疑问或是不解,可进一步参考我在CN的帖子:
[link]
您还可以在工坊中下载任意MOD,然后看看他们的做法。聪明的你一定会参透的。

进阶实践-认识句法/添加文本/修改文件

让我们打开biographies.txt文件

你会看到这部分文件由三部分组成。

第一部分:
BEGIN Names Forename Christopher … FemaleName Sophia … Surname Woollven … END

这是一般犯人的随机名字组合。
我们现在借它来了解一下一般语句的组织结构:

BEGIN Names … END
  • 这是一个段落的起始(BEGIN)与终结(END)。Name是一个类型名,代表着这个段落中的语句属于哪一系列。你可以想象一堆积木中有着各种形状的积木,而这个类型名则定义并指向其中一种形状的积木。要想选到正确形状的积木,就必须先写好类型名。
Forename Christopher
  • Forename是句子的起始,定义了一个物体的信息。做一个类比,你可以想象这是积木的颜色类型,而Christopher自然就代表了积木的具体颜色——>积木的颜色是(Forename) 黄色(Christopher)。
  • 你可以随意改变颜色的值(Christopher),而游戏系统自然也就会识别你的更变,并在游戏中做出相应变化。比如现在将Christopher改为PIKA,将该文件加载至MOD文件夹89757,进游戏后你就有可能遇到PIKA。

第二部分:

想为游戏中的囚犯添加罪名吗?比如…策划了”一场银行大劫案”。
我们先看看下面的语句段落(积木):

BEGIN Crime Name Possession MinSentence 2 MaxSentence 7 Risk Medium Trait Narcotics END

借用刚刚的分析办法,你一定已经了解了”BEGIN”、”END”、”Crime”及”Name Possession”的意义了。
它的具体参数,它的各项具体参数(积木的颜色类型及可用颜色的值),请参考下面这篇指南,这里就不再多说了:
[link]
我们现在来讲讲如何为游戏添加内容(罪名)。

首先,在89757文件夹-data文件夹里创建一个biographies.txt,我们仿照上面的语法,写如下代码:

BEGIN Crime Name HitTheBank MinSentence 2 MaxSentence 7 Risk High Trait Violent END

如果你看过电影《Hit the Bank》,您一定知道我在说什么233
我相信你看了我刚才提到的那篇指南,所以你已经可以读懂它的含义为:(如果还没看,回去看一遍)

  • 罪名:抢银行
  • 最低判刑年限:2
  • 最高判刑年限:7
  • 犯下此罪的囚犯为:重刑犯
  • 犯下此罪的囚犯是一个:暴力分子

那么这就够了么?我现在已经可以在游戏中看见你自己定义的这条罪名了吗?
不,还不行。现在,你要学会如何添加文本。

让我们找到刚刚提及的文本文件——base-language.txt,Ctrl+F搜索例子中的罪名”Possession”;
你会看到官方是这么为这条罪名添加文本的。

crime_possession Possession

分析之后,我们不难发现其格式为:

crime_{Name} {文本}

所以,为了给我们刚刚写好的文件添加文本,我们在”89757″文件里创建一个”Language”文件夹,并在里面创建一个base-language.txt,然后我们仿照此句子如此写道:

crime_HitTheBank 抢银行

好的,现在大功告成了。您可以进游戏体验一下了。(希望您能有足够的运气遇到您想遇见的那个罪犯)

第三部分:
BEGIN CriminalTrait Name Lethal ChanceLow 0 ChanceMedium 10 ChanceHigh 90 END

这部分段落语句,定义了犯人的特性,正如上文提到的暴力分子(Violent)一样,你可以在此定义它的值并将其赋予”Trait {Violent}”。

试着修改它并在游戏中体验您的发明创造吧。

这一部分的内容还没有结束,我们分析完了一整个biographies.txt,像搭积木一样把它一个拆开来,并创造出了我们自己的元件(积木),最后再把它们拼合进去。
同时我们还学习了如何添加文本,让你的元件(积木)在游戏中有自己的名字。

但是别忘了,世界上除了我们中国人,还有一些使用着拉丁字符的国家。
对于英文来说,要想让你的MOD支持多文本开发,参考我们刚刚关于AB文件的知识,细细分析一下关于Language里各个文件夹的意义,你一定能自行参透。
如果您对此仍旧留有疑问,可以到这里看看这一篇指南:
[link]
而关于biographies.txt中所有代码的具体参数,可以到这里进一步查询和下载有关材料:
[link]

进阶实践-为游戏添加图标

什么是游戏的贴图?
就拿这个游戏来说,你在游戏中看到的所有画面,都是由一层又一层的贴图重叠放置所显示的。
他们中大部分是背景色为”透明”的PNG图片。
我们以《监狱建筑师》为例。

让我们打开objects.png,先了解四个概念:
①像素点的概念
这个图片的尺寸为2048×2048,既在横向与纵向分别为2^11个px(像素点)。
②格的概念
这个游戏以32px即2^5为1格的横纵长度,那么横向(纵向)共有2^6=64格
③坐标的概念
如图所示:

图片为分为64格,坐标也以给出。其中,左上角第一个格子的坐标为(0,0),此后每个方向伸长1格,坐标加一。
④锁定坐标
举个例子,如果我想锁定图中左上角第一个小箱子,那么我需要知道它的基点坐标,以及相对坐标。

  • 基点坐标(x,y):基点坐标既要显示物体的左上角坐标。如图中左上角第一个箱子的基点坐标为(0,0)。
  • 相对坐标(w,h):也可理解为要显示物体的(宽,高),如果我要锁定显示这个箱子,那么它的相对坐标为(2,2)。

有了基点坐标及相对坐标,那么我就可以给出我要显示的图像的范围为面积是[x+w]*[y+h]的一个小矩形。再比如说我要锁定左侧第一个囚犯床,那么它的坐标为(0,6)+(2,4)。/*(x,y)+(w,h)*/。

而要弄清这些图片是如何通过坐标锁定并贴进游戏里的,请接着往下看。
以《监狱建筑师》为例,游戏主要有objects.png || people.png || ui.png 三张贴图文件。其中objects.png || people.png 的导入文件为objects.spritebank。
(*PS:在链接形式上,你可以理解为people.png是objects.png在Y方向上的链接图,既people.png左上角第一格的坐标为(0,64)。)

让我们打开objects.spritebank,打开方式为右键-以txt打开。(当然如果你有Notepad++自然是最好)
以刚刚说的左上角第一个箱子为例,其代码为:(在文件第45行)

BEGIN “[i 41]” Name Box x 0 y 0 w 2 h 2 RotateType 0 TopAligned false END

让我们来理解一下这段代码:

  • BEGIN … END
    +代表着一段的开始与结束,你可以认为这是一个前括号和后括号,把每段信息包在一个区域内。
  • “[i 41]”
    +代表着这段信息在整个文件中的顺序,如上一段信息就是”[i 40]”
  • Name Box
    +这个物体的名字,这个物体的名字Box将会作为一个索引标志,与其他所有文件中与Box有关的内容相连接,并将此段代码所锁定的图像,对应到其他文件中去。如果我把Box改成AK47,那么原本应该显示AK47步枪的地方,就会显示这个箱子的图像。
  • x 0 y 0 w 2 h 2
    +既这个物体的基点坐标与相对坐标/*(x,y)+(w,h)*/。
  • RotateType 0
    +RotateType + 数字(0,1,2,3,4)。该项物品的旋转类型。
    -0为不旋转。
    -1为上下翻转及左侧翻,图像应在x方向上连续排列,左侧翻旋转基点为原始图最右下角的点。参考Bed的图像排列。
    -2为水平与纵向翻转。图像应在x方向上连续排列,侧翻旋转基点为原始图最右下角的点。参考Bench及StaffDoor的图像。
    -3为上下翻转及左侧翻,与2不同的是,该翻转所需的三个连续图案在x方向上连续排列,且旋转所占空间大小一致。参考Bin及DrinkMachine的图像。
    -4为涉及到互动用品的旋转方式,如食物、材料、电椅、木匠桌等,具体运作形式不明。
  • TopAligned false
    +TopAligned + false/true。是否顶端对齐,大部分时候填false;当x、y均为奇数时,为了美观,该项为true。
  • (*特别说明)… Name _______Toolbar ….
    +该物品在工具栏中显示的缩略图,如果不定义,默认显示为一个蓝框。

———————–
有了这些基础知识,不妨试试将原本绿床的贴图换成这个紫色的贴图吧,作为一个小实践。

———————————————-

[附加内容·sprites.png]

除了以这种方法锁定图像,《监狱建筑师》还以一种特殊的方法以锁定图像.
你可以为游戏添加一个自制的sprites.png图片,图片中放上你需要的素材。
例如我想为游戏添加一份装备-钓鱼竿(Equipment,此项内容在materials.txt中,下文中有具体参数)。
那么我需要在materials.txt增加以下代码:

BEGIN Equipment Name FishingPole Properties Metal Properties Tools BEGIN Sprite x 0 y 0 w 2 h 2 RotateType 0 TopAligned false END END

其中,关于sprites.png的内容主要是这段代码:

BEGIN Sprite x 0 y 0 w 2 h 2 RotateType 0 TopAligned false END

它以[BEGIN Sprite…]作为前后”括号”(参考上文理解),并将(x,y)+(w,h)等有效信息写入装备-FishingPole。
刚刚提及了sprites.png,通过这段代码,游戏会将该物品的图像锁定住,并从自己添加的sprites.png图片中以相同的规律(背景色为透明,32px为一格等)锁定并显示图像。
如图,为sprites.png文件的内容。

关于这部分内容,将不详细展开,因为其或许并不通用。目前支持sprites.png的文件有:

  • research.txt,存放着科技树的信息。
  • materials.txt,存放着游戏中各类物体/房间的信息。

摸索与探究-更多的文件

从上文中,我们已经了解了:
①如何为游戏添加内容、文本。
②如何为游戏添加图片并将图片与内容链接起来。

相信有了这些例子,只要稍加研究,各位也一定能举一反三,得出其他文件的修改法则。

那么,余下的还有哪些文件呢?
不妨就拿开头我举出的例子,拿刚刚学过的知识,参考我做的这些文件,各位尝试着自行摸索吧。
如果仍有疑问,可以留言咨询。

(*注意,以下文件仅供参考学习,均由本人整理总结。谢绝转载。)
  • needs.txt || female-needs.txt
    分别为男女囚犯的需求设定档。它的参考文件见下:
    {LINK REMOVED}http://pan.baidu.com/s/1hsueptq 密码:tscb
  • research.txt
    监狱各项研究的设定档。它的参考文件见下:
    {LINK REMOVED}http://pan.baidu.com/s/1slnGqnV 密码:b8uo
  • reform_programs.txt
    监狱各项改造方案的设定档。它的参考文件见下:
    {LINK REMOVED}http://pan.baidu.com/s/1sljC6Dn 密码:4yue
  • production.txt
    监狱中各类加工生产的设定档。它的参考文件见下:
    {LINK REMOVED}http://pan.baidu.com/s/1jIGuNkU 密码:b0i0
  • grants.lua
    监狱中补助政策的设定档。它的写法直接参考原文本。(此内容仅推荐程序员)
  • prefabs.txt
    监狱中预设快速建造建筑的设定档。它的写法直接参考原文本。
  • materials.txt
    游戏中各类物件的设定档。它的内容比较复杂,将其分为下列诸项:
    ①Equipment
    游戏中的各类装备,如刀、枪、锤子等。它的参考文件见下:
    {LINK REMOVED}http://pan.baidu.com/s/1pLaTi9l 密码:u3r8
    ②Rooms
    游戏中的房间设定档。它的参考文件见下:
    {LINK REMOVED}http://pan.baidu.com/s/1jHQTVmu 密码:d2od
    ③Object
    游戏中的实体物件。它的参考文件见下:(暂缺个人整理文件,参考官方wiki)

    (点击看大图)
    ④Material
    游戏中的各类材料。它的参考文件见下:(暂缺个人整理文件,参考官方wiki)

    (点击看大图)
    ⑤Callout
    游戏中的紧急呼叫项目。它的写法直接参考原文本。

更多的wiki可见:
{LINK REMOVED}http://pan.baidu.com/s/1dFBLqVJ 密码:0322

由于本指南是一个对”mod制作的通用指南”,而不是对某一个游戏的特用指南,因此本节内容写得较为缩略。但配合上我给出的那些资料,加上一部分自己的思考,相信各位能对于《监狱建筑师》的MOD制作及其他游戏的MOD制作能有一个基础乃至拔高的认识。

高级程序-Lua脚本

我相信一定有些人会好奇,工坊中那么多神奇的MOD都是怎样制作的。
这一章节将讲解Lua脚本的应用。

注意:本章节适合有一定编程能力的程序员观看使用。

首先,我们打开data文件下的[grants.lua]文件,这是游戏中”补助政策”的详细应用。
您可以通过学习研究这一文件,以初步了解Lua在这个游戏中的运作方式。
同时,data文件夹中的lua_function_list.txt文件给出了大部分在Lua脚本中可调用的函数。但它们还远远不是全部。
在个人Wiki:
[link]
而相关PDF下载地址为:
{LINK REMOVED}http://pan.baidu.com/s/1eSbRgps 密码:i8pt
这里给出十分详细的函数表,您可以利用这些函数完成诸如游戏剧本、游戏模式等等内容的创作。

这里将主要讲述如何使自创的Lua脚本起效。
在您的MOD文件夹里创建”scripts”文件夹,里面放进你的Lua脚本.如图所示:

千万别忘了为你的Obeject创建脚本链接,如以下代码

BEGIN Object Name VegetableSeeds Price -50 Width 1 Height 1 ConstructionTime 1.00000 MoveSpeedFactor 0.250000 Toughness 2.0000 RenderDepth 1 Properties Scripted #受脚本控制的标志 Properties RoomSpecific Properties StaticObject Group StaticObject WorkGroup VegetablePatch BlockedBy Wall BlockedBy StaticObject BlockedBy UtilityStation Sprite #物品图像 BEGIN Marker x 7 y 0 orientation.x 0.0 orientation.y 0.0 Index 0 END ToolbarSprite TreeInPots Research Farming END

细心的你也一定注意到了Sprite在此处的应用,是的,Sprite的写法同样可用于脚本的写作。
而作为学习例子,我推荐您下载工坊里的一个名为”Real-time Basketball”的MOD。

Q&A及其他

2016.8.1记:

这篇指南到此就完结了,算上草稿,写了大概两万字,历时2个礼拜。 要知道,不同的游戏都有不同的汉化方法及MOD制作方法,这么短短一篇指南仍旧无法穷尽世上所有汉化及MOD的制作方法,特别是汉化,由于中文字符的特殊性,更是有着千万种不同的情况需要去解决。 我写这篇指南,是希望诸位能够掌握一定的游戏文件分析方法以及一定的类比思维。 希望这篇指南,可以使各位对MOD的制作有一个基础的印象,并融会贯通到其他游戏的MOD/建议汉化制作中。
如果您觉得有帮助,不妨点个收藏、关注作者,或是Like,都是对我的一种鼓励。谢谢。

I.当然若对文章中的内容有没弄懂的地方,欢迎留言。
II.文章中的内容若有错误,欢迎指出。
III.有意一同完善、补充指南,补全更多内容的,欢迎联系我,我会把你加入贡献者的栏目中。

法律声明

This guide (C) 2015-2016 Attack.On.Pika (Steam 64-bit ID:76561198104963431)
Prison Architect (C) 2015 Introversion Software

The following site/services have permission to host this guide:
– Steam Community

此文章仅在steam社区发布。
如果你在除了steam社区之外的地方见到了此文章,请联系我。

本指南所选用材料部分取自官方WIKI:
[link]
其余大部分由本人测试、整理,并独立完成,谢绝任何转载。
我保留对所有文中提供图片、下载材料的所有权,任何未经单独授权的引用及转载均不被允许。
By Attack.On.Pika
2016.7.25

如您有意向把该指南翻译成其他语言,请先联系我,并保证:
I.译文中的内容均经过译者加工、翻译,因此不完全是我(原作者)的本意。任何偏差,本人不负任何相关责任。
II.您不会在我允许之外的地方发布您的译文。
III.译文中必须有指向原地址(此处)的链接。

SteamSolo.com