《人族前沿》开发更新
《人族前沿》开发更新:探索全新空间站、商店类别与程序化世界生成算法,支持模组自定义,打造独特星际文明体验!
我被一系列项目分散了注意力,没有写博客介绍即将推出的新功能。我计划在未来多写一些,因为关于引擎中已有的新内容我还没说完。然而,过去几周让我分心的项目值得单独讨论,所以下面是我最近所做的一切的详细说明。这一切始于...
...于是我得到了机库的艺术资源。
它又大又好,看起来像是你降落飞船的地方,以便将其打包成物品,然后去购物。这意味着我花了很多时间重新映射整个游戏中的每一个空间站。这非常有趣。同时还在那里创建了一些新的空间站。
我现在已经准备好了所有需要由世界生成器放置的空间站。其中包括:
单一公司物品商店
采矿站
一级大型购物中心贸易枢纽站
二级大型购物中心贸易枢纽站
大学站
图书馆
居住站
农业站
医院
工厂
军事基地
等等。
最近重新映射了游戏中所有空间站资源后,我开始思考船厂和在我映射的空间站中销售物品的商店,以及你在贸易站买卖的贸易商品。这让我花了一些时间制作了大量与游戏中各种公司相关联的不同船厂和物品商店类别。
一级飞船供应商
起始站出售特定飞船
二级飞船供应商
派系声望奖励军事供应商
销售经过调整和调校、内部重新映射的飞船的专业商店
销售炮塔的商店
销售消耗品的商店
销售工具的商店
销售制作配方的商店
等等。
这些商店类别在 SQLite 数据库表中定义,目标是让模组制作者尽可能轻松地定义自己的商店。
我还开始思考如何将这些商店放置到世界中,并想出了一个花哨的新系统来实际用内容填充世界引擎。如果世界引擎是一个将故事生成的内容流式传输到会话中的框架,那么我需要制作的是一个构建这些故事的系统。具体来说,我的系统必须解决一些尚未解决的问题,比如..
生产哪些贸易物品?需要哪些贸易物品?
基于人口,一个星系中应该存在多少个采矿站?
模组制作者将如何仅使用数据库字段设计自己的程序化恒星文明?
最后一个对我来说是最有趣的。基本上,我制作了一些硬编码的故事,这些故事只是将商店、采矿站和其他物品放入星系中,但我真正想要的是玩家能够提供输入参数,这些参数将决定一个文明如何程序化地生成其空间。
我想出的系统内部使用一副卡牌和一些针对不同星系的加权优先级,其基本工作原理如下:
首先,你定义哪些恒星将被你的恒星帝国占据。这意味着将一些 X 和 Y 坐标放入 SQLite 数据库表中,这些坐标代表被拥有的星系的坐标。同时,每个恒星被分配一个优先级,这只是一个数字,代表该星系应该“发达”的程度。
接下来,你定义一副“人口”卡牌。每张卡牌代表一种人口类型,对星系的开发有特定影响。例如,零售商卡牌如果尚不存在市场区则创建一个,然后添加一个销售特定物品的商店。勘探者卡牌设置一个采矿区并向其添加一个采矿站。殖民者卡牌殖民一颗行星,或将行星的人口增加 1。
然后,系统在分配给恒星帝国的星系上出牌,以便用人口和基础设施建设这些星系。
这些卡牌还在全系统范围内创造和消耗资源。因此,各区知道它们对某些物品类型有本地需求,而星系有一个它们短缺或大量生产的物品列表,这允许创建程序化的贸易路线,这些路线将派遣 NPC 代理贸易飞船在银河系中飞行。
此外(这是所有这一切中最重要的一点)这个系统让我可以程序化地设置贸易站贸易商品的价格。我绝对不想手动设置银河系中的每一个价格。然而,我确实希望你能够通过在一个地方廉价购买贸易商品并在另一个地方以更高价格出售来获利。
卡牌在数据库表中定义为一堆非常易于修改的字符串值,卡牌的酷之处在于每张卡牌都为其公司定义了一个名称字段、人口应该使用的资源以及它应该创建的商店类别。当被世界生成器使用时,这些字段决定了将什么艺术资源放置到世界中,而这些艺术资源也在数据库中定义,这意味着你可以插入自己的自定义飞船和空间站艺术资源,给它一个独特的名称,并将其分配给任何卡牌。
结果是,恒星帝国使用来自世界参数数据库的资源建设其所有空间站和所有 NPC 代理,模组制作者可以定义任意数量的世界参数数据库以包含在世界生成中。
这意味着你需要做的就是修改 SQLite 数据库中的一些表,你就可以构建一个完整的恒星帝国,为每个空间站和飞船、每个商店的内容以及军队使用的飞船、声望奖励和军阀等提供自定义艺术资源。
这些资源存在于世界引擎数据库中,意味着引擎支持尽可能多的自定义内容,只要你的硬盘能装下。在会话中显示的每个资源都是从数据库实时加载的,内存或显存的唯一限制是在任何给定时刻生成到单个会话中的东西的数量。除了构建世界时世界生成所需的时间外,你制作自定义世界生成的大小或复杂程度应该没有限制。


