Skip to content
Chengzhi Tan edited this page Apr 18, 2018 · 3 revisions

SimCivil 项目策划书

目录

  1. 设定概述
  2. 核心概念
  3. 功能清单
  4. 任务分配

设定概述

A C# game server simulating a civilization world allowing roles free interacting. The key goals of the game are to dynamically generate any skills, technologies, recipes, and objects according to role behavior, and imitating real-world roles interacting logic as much as possible.

游戏设定主要是模拟从原始时代到近代以前文明的进化过程。可以有除了人类以外各种种族,这些玩家通过技术和资源的获取与其他玩家竞争。所以npc只有各种动物,不会有怪物,鼓励玩家间的战斗。玩家死亡会彻底gg,但是为了降低难度,大部分情况是让玩家重伤,只要有其他人及时救治就不会gg。

新玩家的创建比较硬核,依靠其他玩家 啪啪啪 结合产生新玩家的空余位置.创建玩家时有一个空余位置队列,按照队列依次投胎,父母角色的属性决定新角色的初始属性。如果没有空余位置则随机生成初始属性,一般属性较差。

技能的生成依靠两种机制:一种分解成各种buff,然后生成过程就是依照玩家的行为按照一定概率组合相关的buff,这些buff可能产生效率或者属性方面的加成。buff的强度也是依据玩家在某一方面的熟练度决定。还有一种是是允许玩家做某些行为或者允许制造一类东西,这个就和普通技能接近一些。生成的技能同时会附加有一些前置技能要求,这些要求这是根据技能发现人的已有相关技能随机抽取。因为技能是随机生成的所以第一个获得技能的人可以命名,其他人要学习这个技能要么要由会这个技能的人教授,要么阅读这个记录这个技能的书籍。自创技能的概率很低,只有学习别人的才最快。让玩家创建技能,并且标注作者,玩家会更主动传播这个技能,从而自发形成帮派或者组织。

装备都是由玩家制造的。所以玩家的技能、熟练度和材料会决定制造出来的道具的品质。

客户端可能主要是渲染、同步还有处理帧与帧之间的插值。目前的同步方式是帧同步,每一帧发送角色视野范围内的物品状态和地图,因为逻辑在服务端处理,所以有很多状态是按条件隐藏的。客户端就需要处理怎么应对那些不可知的状态,比如身体器官状态、地块矿物含量,以及当角色因为一些能力可以获取这些状态以后怎么显示。还有寻路算法也是在客户端做,服务端不会发送所有地图,所以需要客户端缓存记录去过的地方,然后计算寻路。

核心概念

地图

Map地图是利用Perlin算法生成的无限大范围的二维地图(或者三维?),生成地图数据包含

  1. 高度
  2. 表面类型
  3. 温度
  4. 湿度
  5. 矿物含量
  6. 植物
  7. 遗迹、宝藏
  8. 其他 待补充

由于地图是原则上无限大,所以为了便于存储和运算,按照一定大小(N×N待定)将地图划分为若干Atlas地图集,每个图集单独存储为一个文件按需加载,未活动图集自动从内存中卸载保存。

地块

地图是由一个个地块Area构成,每一个地块除了包含上述信息外,还拥有五个slot和四个side

  • 五个slot分别位于一个地块的中间、左上角、左下角、右上角、右下角,可以存放 存储人物、NPC、 掉落物以及人造物(家具、台阶之类的),slot是独占的也就是说一旦一个slot有东西存在其他物体不能再存于这个位置。
  • 四个side位于地块的上下左右,可以存储墙体等障碍物。
  • 除此以外,整个地块也可以存储一个大型的物体,此时数据存放于中间slot,其余四个slot和side均不可用。

整个地图模式参考自过山车大亨2以及minecraft。

实体

地图上所有可以不存放于slot或者side的物体统称为实体Entity,实体可以静止也可以移动,静止时必须位于地块中心,移动时沿着地块的中轴线上下左右八方向的移动,除非遇到障碍物,实体不具有碰撞体积,实体之间可以相互穿越。

玩家角色

所有的 人形生物 都是由玩家直接或间接操作的

NPC

游戏中的动物或怪物等可以自主活动但主要用于为玩家提供资源或难度的生物都是NPC,NPC由服务器控制,拥有简单的AI。

功能清单

  • 游戏主框架和规则设计 #5
  • 基础网络框架 #3
  • 地图生成算法设计 #4

任务分配

  • 游戏逻辑:@tcz717
  • 网络:@panyz522 @tcz717
  • 地图生成与存储:@zhzago