饥荒地图生成--海洋的形成(虚空转海洋)
发布时间:2024-04-19 20:47 浏览量:8
width:世界地图宽度 height:世界地图高度 data:是下面的各步骤所使用的参数,数据在\scripts\map\ocean_gen_config.lua文件里。
以下坐标是指地皮坐标, 几近说明还有地图边缘没有加入执行,是从0到max-1
shallowRadius:浅海半径,数值默认是4,没有就为10。
几近遍历全图每个坐标位置的地皮,进行检查。 检查项目1,是陆地类型的地皮 检查项目2,这个坐标点半径周围是否存在一个海洋类型地皮或者不可通行地皮。 通过检查后,遍历以点为中心、以参数为半径的正方形区域,非地图边界且非陆地地皮,则替换为GROUND.OCEAN_COASTAL地皮(201号地皮,是浅海地皮)
fillTile:替换地皮类型,默认是浅海地皮GROUND.OCEAN_COASTAL。 fillOffset:间距,每次填充与上次填充位置的距离。 fillDepth:递归最大次数。 landRadius:已废弃
几近遍历全图,对每个是陆地坐标的点,朝该点的四向一格的位置进行fillGroundType函数(递归填充)。 该fillGroundType函数,会根据提供的坐标位置,进行判断最大递归次数非0、非地图边界外且非陆地地皮的情况。通过检查后,替换当前坐标地皮(浅海地皮),最大递归次数-1,朝四向fillOffset间距的位置进行递归。
转换海水步骤2_单独转换海水步骤2转换海水步骤2_细节几近遍历全图,将全部不可通行地皮,进行一个simplexnoise2d函数后替换为GROUND.OCEAN_SWELL地皮(203号中海:蓝发白)、GROUND.OCEAN_HAZARDOUS(207号危海:浅灰,数量较少且零散分布)、GROUND.OCEAN_ROUGH(204号深海:最蓝,数量最多)
提示:海洋布局在转换海水函数执行前,故地图上显示的其他非陆地的黑块就已经填充了海洋地皮,OCEAN_BRINEPOOL 205号是盐堆使用,OCEAN_WATERLOG 208号是水中木使用
转换海水步骤3_单独转换海水步骤3几近遍历全图,非陆地地皮的位置,根据提供参数给底层,返回三张生成的一维表(包含2维地图大小的数据):el(盐堆、浅中深危海、无法通行),cm(盐堆),g(危海)表。地图坐标所在el表的数据不受任何影响,其他两张受位置影响。三表综合影响了,最终地图每个坐标位置的地皮。
① 每个位置的el数据,有70%概率执行②。执行:水中木海洋保持不变,盐堆海洋有cm有80%保持不变,其他变成浅海。 ②该位置的el数据,有0.4%概率执行③。执行:此位置设置为中海 ③该位置的g有70%概率设置为深海,其他为危海。
将地图均分4块小正方形,越靠近小正方形中心部分,混合程度越大,对应的cm和g越趋近原来的值;越靠近小正方形边缘部分,混合程度越小,对应的cm和g值越趋近于0。
下图有误。使用了水中木没有的地图生成方法,导致错误显示,实际上水中木区域是可能浅海、中海、深海、危海、水中木海洋地皮的混合区域,而非下图显示的全浅海地皮。
几近遍历全图,每个海洋地皮的周围8格存在一个陆地且非盐堆海洋地皮,那么设置为WORLD_TILES.OCEAN_COASTAL_SHORE(202号海岸地皮)。
遍历地图四条边,边上的每个位置,都计算出一个深度值,这个点开始朝地图内的深度值范围,设置为不可通行(虚空),且深度值+2范围内,非虚空的位置设置为深海。越是靠近地图边缘拐角处,深度值越大。
OCEAN_WATERFALL_MAX_DIST全局参数影响深度值大小,设置为0,那么边缘将无不规则化。
每次计算深度变化都在1范围内波动,即上一个点位置的深度值最多+1-1,且小于等于OCEAN_WATERFALL_MAX_DIST。
转换海水步骤6转换海水仅执行步骤4及以后的结果