## PelerMap 介绍
PelerGame 中的滚动地图由 PelerMap 组建构成。从它的名字就可以看出,PelerMap 和 PelerGame 的编写者是同一人(我)。
PelerMap 可以读取地图模板文件,这个文件规定了地图中房间,过道之间的相对位置。PelerMap 会根据它来读取指定的房间、过道描述文件。这些文件
用字符的方式展现了一个房间、过道的构成。读取这些文件后,PelerMap 会进行分析,从而生成在游戏中看到的地图。
我们自定义地图,就是添加或修改地图模板文件和房间、过道描述文件。
PelerMap 现在以一种捆绑形式附加在 PelerGame 中。未来会进行接口的优化,并开源。
## PelerMap Model
PelerMap Model 是用来存放地图模板文件,房间、过道描述文件的文件夹。在PelerGame中,PelerMap Model 位于 `PelerGame目录/Res/MapModel`。
以下是他的文件结构:
```
.
├── cross
│ ├── height.pheightcross
│ └── width.pwidthcross
├── info
│ ├── 1.pinfo
│ └── 2.pinfo
├── room
│ ├── 1.proom
│ ├── big_box.proom
│ ├── divided.proom
│ ├── P.proom
│ ├── square.proom
│ ├── U.proom
│ └── walls.proom
├── special
│ ├── home.proom
│ ├── next.proom
│ ├── sell.proom
│ └── treasure.proom
└── world
├── 1.pworld
└── 2.pworld
```
PelerMap Model 中的文件有着不同的后缀名,PelerMap 通过后缀名来识别每个文件的类型。以下是不同后缀名所对应的文件类型:
|名称|类型|
|-----|-----|
|pheightcross|纵过道描述文件|
|pwidthcross|横过道描述文件|
|pinfo|地图配置文件|
|proom|房间描述文件|
|pworld|地图模板文件|
## 自定义房间
> 你希望创建一个自己的房间,并命名为 `test.proom`。
> PelerMap 目前并为提供针对玩家的错误报告系统,所以如果在编写地图过程中出现错误,很可能导致游戏崩溃。
步骤:
1. 进入 room 文件架(见上),创建 `test.proom` 文件。
2. 进入编辑 `test.proom` 文件,构建出基本的框架,如下:
```
!######DDDDDD#######!
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
D@@@@@@@@@@@@@@@@@@@D
D@@@@@@@@@@@@@@@@@@@D
D@@@@@@@@@@@@@@@@@@@D
D@@@@@@@@@@@@@@@@@@@D
D@@@@@@@@@@@@@@@@@@@D
D@@@@@@@@@@@@@@@@@@@D
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
!######DDDDDD#######!
```
其中,每一个字符代表着游戏中的一个方块,对应表格如下:
|字符|方块|
|-----|-----|
|@|地板方块|
|#|墙壁方块|
|!|角落方块|
|D|门方块|
在此基础上,您可以自由调整房间的长宽高,但有以下几条需要注意:
- 房间四周必须被墙壁方块包裹
- 墙壁方块交汇处必须使用角落方块
- 门方块必须在房间的四边都有,且为连续的6个
3. 装饰房间
你还可以使用以下方块装饰房间:
|字符|方块|
|-----|-----|
|=|木块|
|-|石块|
如:
```
!######DDDDDD#######!
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@=========@@@@@#
#@@@@@=@@@@@@@=@@@@@#
#@@@@@=@@@@@@@=@@@@@#
#@@@@@=@@@@@@@=@@@@@#
D@@@@@=@@@@@@@=@@@@@D
D@@@@@=@@@@@@@=@@@@@D
D@@@@@=@@@@@@@=@@@@@D
D@@@@@=@@@@@@@=@@@@@D
D@@@@@=========@@@@@D
D@@@@@=@@@@@@@@@@@@@D
#@@@@@=@@@@@@@@@@@@@#
#@@@@@=@@@@@@@@@@@@@#
#@@@@@=@@@@@@@@@@@@@#
#@@@@@=@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@#
!######DDDDDD#######!
```
编辑结束后运行游戏,及可在游戏中使用自己的地图。但目前 PelerMap 只支持随机地图,所以在地图多的情况下可能要碰碰运气。
## 创建地图
> 你希望创建一个自己的地图,并命名为 `test.pworld`。
> PelerMap 目前并为提供针对玩家的错误报告系统,所以如果在编写地图过程中出现错误,很可能导致游戏崩溃。
步骤:
1. 进入 room 文件架(见上),创建 `test.pworld` 文件。
2. 进入编辑 `test.pworld` 文件,编辑其中内容,语法如下:
```
(
["home(开门的方向)",(名称,())],
["cross(模式)",(名称,(连接房间的名称,连接房间的方向))],
["room(开门的方向,开门的方向,...)",(名称,(连接过道的名称,连接过道的方向))],
...
["info(地图配置文件名称)",('',())]
)
```
其中,开门的方向和连接房间的方向的可选项均为:
- 'right'
- 'left'
- 'top'
- 'bottom'
`room` 还可以替换成 `treasure` 或 `sell`,分别对应战斗房间,宝箱房间,和售卖机房间。
模式可选项为:
- 'width'
- 'height'
名称为使用英文单引号包裹的英文字符,如:
```
'test'
```
地图配置文件名称需与地图配置文件相符(不包括文件名)。详细信息见下文地图配置文件编辑。
这里是一个样例:
```
(
["home('right')",('home',())],
["cross('width')",('c1',('home','right'))],
["room('left','right','bottom','top')",('r1',('c1','right'))],
["cross('width')",('c2',('r1','right'))],
["next('left')",('next',('c2','right'))],
["cross('height')",('c3',('r1','bottom'))],
["treasure('top')",('r2',('c3','bottom'))],
["cross('height')",('c4',('r1','top'))],
["sell('bottom')",('r3',('c4','top'))],
["info('1')",('',())]
)
```
## 地图配置文件编辑
> 你希望创建一个自己的地图配置文件,并命名为 `test.pinfo`。
> PelerMap 目前并为提供针对玩家的错误报告系统,所以如果在编写地图过程中出现错误,很可能导致游戏崩溃。
步骤:
1. 进入 room 文件架(见上),创建 `test.pinfo` 文件。
2. 进入编辑 `test.pinfo` 文件,编辑其中内容,语法如下:
```
{
'房间的名称':{'bad_actor_number':'auto','is_door_need_close':True,'is_give_treasure':True},
...
}
```
房间的名称对应地图文件中房间的名称,目前只有关于战斗房间的参数,按如上顺序分别为:敌人数量,战斗时房间门是否关闭,战斗结束是否生成宝箱。并非每个房间,每个参数都要设置。
敌人数量可选值为 `'auto'` 或 数字,`'auto'` 表示随机生成,填写数字则生成对应个数的敌人。
'is_door_need_close' 和 'is_give_treasure' 的可选值都为 True 或 False。
例子:
```
{
'r1':{'bad_actor_number':'auto','is_door_need_close':True,'is_give_treasure':True},
'r2':{'bad_actor_number':10,'is_door_need_close':False,'is_give_treasure':True},
'r3':{'bad_actor_number':'auto','is_door_need_close':True,'is_give_treasure':False},
}
```