<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://mdtwiki.top/index.php?action=history&amp;feed=atom&amp;title=JSON%E6%A8%A1%E7%BB%84%E6%95%99%E7%A8%8B-%E8%A1%8C%E6%98%9F%E3%80%81%E5%8C%BA%E5%9D%97%E3%80%81%E7%94%9F%E6%88%90%E5%99%A8%E3%80%81%E7%8E%AF%E5%A2%83%E6%96%B9%E5%9D%97</id>
	<title>JSON模组教程-行星、区块、生成器、环境方块 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://mdtwiki.top/index.php?action=history&amp;feed=atom&amp;title=JSON%E6%A8%A1%E7%BB%84%E6%95%99%E7%A8%8B-%E8%A1%8C%E6%98%9F%E3%80%81%E5%8C%BA%E5%9D%97%E3%80%81%E7%94%9F%E6%88%90%E5%99%A8%E3%80%81%E7%8E%AF%E5%A2%83%E6%96%B9%E5%9D%97"/>
	<link rel="alternate" type="text/html" href="https://mdtwiki.top/index.php?title=JSON%E6%A8%A1%E7%BB%84%E6%95%99%E7%A8%8B-%E8%A1%8C%E6%98%9F%E3%80%81%E5%8C%BA%E5%9D%97%E3%80%81%E7%94%9F%E6%88%90%E5%99%A8%E3%80%81%E7%8E%AF%E5%A2%83%E6%96%B9%E5%9D%97&amp;action=history"/>
	<updated>2026-05-16T01:17:58Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://mdtwiki.top/index.php?title=JSON%E6%A8%A1%E7%BB%84%E6%95%99%E7%A8%8B-%E8%A1%8C%E6%98%9F%E3%80%81%E5%8C%BA%E5%9D%97%E3%80%81%E7%94%9F%E6%88%90%E5%99%A8%E3%80%81%E7%8E%AF%E5%A2%83%E6%96%B9%E5%9D%97&amp;diff=2587&amp;oldid=prev</id>
		<title>硫缺铅：​创建页面，内容为“&lt;span id=&quot;行星区块生成器环境方块&quot;&gt;&lt;/span&gt; = 行星、区块、生成器、环境方块 =  这一节负责“战役与世界”的部分：行星、区块、天气与环境方块。JSON 能做的事情不少，但行星生成器和复杂规则仍建议以原版为参考，尤其是跨行星玩法与地图生成逻辑。  &lt;span id=&quot;行星planet&quot;&gt;&lt;/span&gt; == 行星（Planet） ==  行星文件位于 &lt;code&gt;content/planets&lt;/code&gt;。行星负责定义“战…”</title>
		<link rel="alternate" type="text/html" href="https://mdtwiki.top/index.php?title=JSON%E6%A8%A1%E7%BB%84%E6%95%99%E7%A8%8B-%E8%A1%8C%E6%98%9F%E3%80%81%E5%8C%BA%E5%9D%97%E3%80%81%E7%94%9F%E6%88%90%E5%99%A8%E3%80%81%E7%8E%AF%E5%A2%83%E6%96%B9%E5%9D%97&amp;diff=2587&amp;oldid=prev"/>
		<updated>2026-02-01T13:34:28Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;lt;span id=&amp;quot;行星区块生成器环境方块&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; = 行星、区块、生成器、环境方块 =  这一节负责“战役与世界”的部分：行星、区块、天气与环境方块。JSON 能做的事情不少，但行星生成器和复杂规则仍建议以原版为参考，尤其是跨行星玩法与地图生成逻辑。  &amp;lt;span id=&amp;quot;行星planet&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; == 行星（Planet） ==  行星文件位于 &amp;lt;code&amp;gt;content/planets&amp;lt;/code&amp;gt;。行星负责定义“战…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;span id=&amp;quot;行星区块生成器环境方块&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= 行星、区块、生成器、环境方块 =&lt;br /&gt;
&lt;br /&gt;
这一节负责“战役与世界”的部分：行星、区块、天气与环境方块。JSON 能做的事情不少，但行星生成器和复杂规则仍建议以原版为参考，尤其是跨行星玩法与地图生成逻辑。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;行星planet&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 行星（Planet） ==&lt;br /&gt;
&lt;br /&gt;
行星文件位于 &amp;lt;code&amp;gt;content/planets&amp;lt;/code&amp;gt;。行星负责定义“战役大地图”的形态与规则入口。基础字段包括 &amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt;（父天体）、&amp;lt;code&amp;gt;radius&amp;lt;/code&amp;gt;（行星半径）、&amp;lt;code&amp;gt;orbitTime&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;rotateTime&amp;lt;/code&amp;gt;（公转/自转周期）、&amp;lt;code&amp;gt;atmosphereColor&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;lightColor&amp;lt;/code&amp;gt;（大气与光照颜色）以及 &amp;lt;code&amp;gt;defaultEnv&amp;lt;/code&amp;gt;（默认环境标志）。其中 &amp;lt;code&amp;gt;defaultEnv&amp;lt;/code&amp;gt; 影响区块默认环境，例如是否允许氧气、是否启用孢子环境等。&lt;br /&gt;
&lt;br /&gt;
除了视觉参数，行星还有一些影响战役体验的规则字段。&amp;lt;code&amp;gt;startSector&amp;lt;/code&amp;gt; 可以指定玩家初始的区块编号；&amp;lt;code&amp;gt;launchCapacityMultiplier&amp;lt;/code&amp;gt; 会影响发射时核心携带物资上限；&amp;lt;code&amp;gt;allowLaunchSchematics&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;allowLaunchLoadout&amp;lt;/code&amp;gt; 决定玩家是否可以选择发射蓝图与携带物品。它们不会改变地图生成，但会显著影响“进入战役时的节奏”。&lt;br /&gt;
&lt;br /&gt;
行星还决定“默认环境”。&amp;lt;code&amp;gt;defaultEnv&amp;lt;/code&amp;gt; 是一组环境标记，会影响氧气、孢子、地面油水等规则是否启用；&amp;lt;code&amp;gt;defaultAttributes&amp;lt;/code&amp;gt; 则提供地形属性的基线值。视觉层面上，&amp;lt;code&amp;gt;hasAtmosphere&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;updateLighting&amp;lt;/code&amp;gt; 控制是否有大气与昼夜变化，&amp;lt;code&amp;gt;atmosphereRadIn/Out&amp;lt;/code&amp;gt; 决定大气层厚度。玩法层面上，&amp;lt;code&amp;gt;clearSectorOnLose&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;allowSectorInvasion&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;enemyInfiniteItems&amp;lt;/code&amp;gt; 等字段会改变战役难度与节奏，这些都属于“行星级规则”，比单独区块的参数更“宏观”。&lt;br /&gt;
&lt;br /&gt;
需要注意的是，JSON 里目前只会把 &amp;lt;code&amp;gt;generator&amp;lt;/code&amp;gt; 反序列化成 &amp;lt;code&amp;gt;AsteroidGenerator&amp;lt;/code&amp;gt;。写 &amp;lt;code&amp;gt;SerpuloPlanetGenerator&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;ErekirPlanetGenerator&amp;lt;/code&amp;gt; 并不会生效。如果你想复用“塞普罗”或“埃里克尔”的生成器，需要用 Java 或 JavaScript 接管生成器字段。&lt;br /&gt;
&lt;br /&gt;
“饱和火力 3.3.0”就是用脚本来解决生成器限制的。它在 &amp;lt;code&amp;gt;scripts/planets/泰伯利亚.js&amp;lt;/code&amp;gt; 中手动创建行星并指定生成器，例如：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;const TBLY = new Planet(&amp;quot;泰伯利亚&amp;quot;, Planets.sun, 1, 3.3);&lt;br /&gt;
TBLY.generator = extend(SerpuloPlanetGenerator, {&lt;br /&gt;
    getDefaultLoadout() {&lt;br /&gt;
        return Schematics.readBase64(&amp;quot;bXNjaAF4nA3JMQ6AIBAAwQXFRr9i4XuMBR5XkCAYkP9LphwcbmLO/lHMwRq0SY3vF0sGluRvTQ17XoZNStU9d0na20gDduAHAc0Org==&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
});&amp;lt;/pre&amp;gt;&lt;br /&gt;
这个片段说明了“行星生成器只能靠脚本”这一点：JSON 负责静态字段，生成器与规则则由 JS 或 Java 接管。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;文件：content/planets/tutorial-planet.json&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;示例行星&amp;quot;,&lt;br /&gt;
    &amp;quot;parent&amp;quot;: &amp;quot;sun&amp;quot;,&lt;br /&gt;
    &amp;quot;radius&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;orbitTime&amp;quot;: 60,&lt;br /&gt;
    &amp;quot;rotateTime&amp;quot;: 30,&lt;br /&gt;
    &amp;quot;atmosphereColor&amp;quot;: &amp;quot;7db6ff&amp;quot;,&lt;br /&gt;
    &amp;quot;lightColor&amp;quot;: &amp;quot;ffd37f&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
这个例子只设置了最基本的轨道与颜色参数，适合快速验证行星是否能被正确加载。&lt;br /&gt;
&lt;br /&gt;
== 行星与科技树关系 ==&lt;br /&gt;
&lt;br /&gt;
行星不仅是“背景”，还决定战役科技树的展示与解锁方式。&amp;lt;code&amp;gt;techTree&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;autoAssignPlanet&amp;lt;/code&amp;gt; 让原版内容在不同星球下有不同的解锁顺序。你在 JSON 里新增的方块或单位，如果没有明确指定研究位置，可能会跟随默认行星显示，导致玩家在不合适的阶段就能解锁。解决办法要么是在内容上设置合适的 &amp;lt;code&amp;gt;research&amp;lt;/code&amp;gt;，要么在行星层面控制哪些内容在该星球可用。&lt;br /&gt;
&lt;br /&gt;
还有一些与发射相关的字段，例如 &amp;lt;code&amp;gt;allowLaunchSchematics&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;allowLaunchLoadout&amp;lt;/code&amp;gt;，它们决定玩家是否可以带蓝图与物资进入区块。对战役节奏影响很大：允许蓝图会让玩家更快建立基地，禁止蓝图则会强化“开局规划”的重要性。你可以把它当作一种“难度调节器”。&lt;br /&gt;
&lt;br /&gt;
行星的“可见性与入口”也值得关注。&amp;lt;code&amp;gt;visible&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;accessible&amp;lt;/code&amp;gt; 决定它是否出现在行星列表中，&amp;lt;code&amp;gt;iconColor&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;launchMusic&amp;lt;/code&amp;gt; 影响 UI 体验；&amp;lt;code&amp;gt;defaultCore&amp;lt;/code&amp;gt; 会影响发射时默认核心类型，&amp;lt;code&amp;gt;allowCampaignRules&amp;lt;/code&amp;gt; 决定玩家能否在行星界面调整规则。这些字段偏 UI 与流程，但对战役体验影响很直接。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;区块sectorpreset&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 区块（SectorPreset） ==&lt;br /&gt;
&lt;br /&gt;
区块文件位于 &amp;lt;code&amp;gt;content/sectors&amp;lt;/code&amp;gt;。每个区块必须指定 &amp;lt;code&amp;gt;sector&amp;lt;/code&amp;gt; 编号，&amp;lt;code&amp;gt;planet&amp;lt;/code&amp;gt; 可选。区块对应的地图文件必须放在 &amp;lt;code&amp;gt;maps/&amp;amp;lt;name&amp;amp;gt;.msav&amp;lt;/code&amp;gt;，文件名要和 JSON 文件名一致，否则区块不会生成地图。原版的“零号地区”“冰冻森林”“盐碱荒滩”等都是 &amp;lt;code&amp;gt;SectorPreset&amp;lt;/code&amp;gt; 的实例。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SectorPreset&amp;lt;/code&amp;gt; 的常见字段包括 &amp;lt;code&amp;gt;difficulty&amp;lt;/code&amp;gt;（难度 0-10）、&amp;lt;code&amp;gt;captureWave&amp;lt;/code&amp;gt;（达到多少波算占领）、&amp;lt;code&amp;gt;startWaveTimeMultiplier&amp;lt;/code&amp;gt;（开局波次时间倍率）、&amp;lt;code&amp;gt;addStartingItems&amp;lt;/code&amp;gt;（是否提供初始物资）、&amp;lt;code&amp;gt;noLighting&amp;lt;/code&amp;gt;（禁用光照）、&amp;lt;code&amp;gt;requireUnlock&amp;lt;/code&amp;gt;（是否需要解锁才能登陆）、&amp;lt;code&amp;gt;isLastSector&amp;lt;/code&amp;gt;（是否为最终区块）、&amp;lt;code&amp;gt;attackAfterWaves&amp;lt;/code&amp;gt;（波次结束后进入攻击模式）。这些字段大多是“规则开关”，不会影响地图本身，但会影响玩家进入后的玩法节奏。&lt;br /&gt;
&lt;br /&gt;
如果你希望某个区块“独立于行星规则”，可以用 &amp;lt;code&amp;gt;overrideLaunchDefaults&amp;lt;/code&amp;gt; 并在区块里单独设定 &amp;lt;code&amp;gt;allowLaunchSchematics&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;allowLaunchLoadout&amp;lt;/code&amp;gt;。&amp;lt;code&amp;gt;showHidden&amp;lt;/code&amp;gt; 控制隐藏区块是否显示名字与图标，适合做彩蛋或剧情节点。&amp;lt;code&amp;gt;requireUnlock&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;shieldSectors&amp;lt;/code&amp;gt;（在 JS/Java 中常用）用于限制登陆顺序，避免玩家过早进入高难区块。区块本身无法写复杂 &amp;lt;code&amp;gt;rules&amp;lt;/code&amp;gt;，但你可以在 JS/Java 里通过 &amp;lt;code&amp;gt;rules&amp;lt;/code&amp;gt; 回调做深度定制。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;文件：content/sectors/tutorial-sector.json&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;示例区块&amp;quot;,&lt;br /&gt;
    &amp;quot;planet&amp;quot;: &amp;quot;serpulo&amp;quot;,&lt;br /&gt;
    &amp;quot;sector&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
如果你希望写复杂的波次、敌人行为或特殊胜负条件，通常需要地图脚本或 Java/JS 来实现，JSON 只负责基础的入口与一些通用开关。&lt;br /&gt;
&lt;br /&gt;
== 区块与地图文件的配合 ==&lt;br /&gt;
&lt;br /&gt;
区块本身只是“入口”，真正的地图形态由 &amp;lt;code&amp;gt;.msav&amp;lt;/code&amp;gt; 文件决定。你可以把区块理解为“战役菜单里的按钮”，而地图文件则是“战场本体”。这也意味着区块的 &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; 与地图文件名必须严格一致，否则区块会显示但无法进入。若你想做自定义战役，建议先把地图在编辑器里跑通，再回到 JSON 里配置区块参数。&lt;br /&gt;
&lt;br /&gt;
地图文件里还包含波次、规则与脚本等信息，它们对战斗节奏影响比 &amp;lt;code&amp;gt;SectorPreset&amp;lt;/code&amp;gt; 更直接。&amp;lt;code&amp;gt;SectorPreset&amp;lt;/code&amp;gt; 主要管“能不能进入、入口怎么显示”，而 &amp;lt;code&amp;gt;.msav&amp;lt;/code&amp;gt; 才是真正的“关卡设计”。因此当你发现区块规则写了但不生效，优先检查地图本身是否覆盖了规则。&lt;br /&gt;
&lt;br /&gt;
在原版中，很多区块还会设置 &amp;lt;code&amp;gt;requireUnlock&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;showHidden&amp;lt;/code&amp;gt;，用于控制玩家在战役地图上看到哪些区域。即使你不写这些字段，默认规则也会生效，但写清楚可以避免“解锁顺序混乱”。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;天气weather&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 天气（Weather） ==&lt;br /&gt;
&lt;br /&gt;
天气文件位于 &amp;lt;code&amp;gt;content/weathers&amp;lt;/code&amp;gt;。&amp;lt;code&amp;gt;Weather&amp;lt;/code&amp;gt; 的核心字段包括 &amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt;（持续时间，单位为刻）、&amp;lt;code&amp;gt;opacityMultiplier&amp;lt;/code&amp;gt;（覆盖层不透明度）、&amp;lt;code&amp;gt;sound&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;soundVol&amp;lt;/code&amp;gt;（音效与音量）、&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;statusDuration&amp;lt;/code&amp;gt;（施加的状态与持续时间）以及 &amp;lt;code&amp;gt;statusAir&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;statusGround&amp;lt;/code&amp;gt;（作用对象）。这些字段决定天气的“强度与范围”。&lt;br /&gt;
&lt;br /&gt;
不同天气子类会有自己的表现参数，例如 &amp;lt;code&amp;gt;RainWeather&amp;lt;/code&amp;gt; 关注雨线速度、密度与颜色，&amp;lt;code&amp;gt;ParticleWeather&amp;lt;/code&amp;gt; 会关心粒子大小与飘动。大多数情况下，你可以先复刻原版天气，再逐步替换颜色与状态，以保证效果不会过强或过于杂乱。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;模组示例饱和火力-3.3.0-的天气&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 模组示例：饱和火力 3.3.0 的天气 ==&lt;br /&gt;
&lt;br /&gt;
“电离层异常”是一个 &amp;lt;code&amp;gt;ParticleWeather&amp;lt;/code&amp;gt;，它把 &amp;lt;code&amp;gt;statusGround&amp;lt;/code&amp;gt; 设为 &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;，表示只影响空中单位，同时通过 &amp;lt;code&amp;gt;sound&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;soundVol&amp;lt;/code&amp;gt; 强化氛围感：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;电离层异常&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ParticleWeather&amp;quot;,&lt;br /&gt;
    &amp;quot;particleRegion&amp;quot;: &amp;quot;circle-small&amp;quot;,&lt;br /&gt;
    &amp;quot;color&amp;quot;: &amp;quot;c0ecff&amp;quot;,&lt;br /&gt;
    &amp;quot;density&amp;quot;: 5000,&lt;br /&gt;
    &amp;quot;statusGround&amp;quot;: false,&lt;br /&gt;
    &amp;quot;sound&amp;quot;: &amp;quot;shootArc&amp;quot;,&lt;br /&gt;
    &amp;quot;soundVol&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;statusDuration&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;status&amp;quot;: &amp;quot;unmoving&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
“腐蚀性尘降风”则展示了 &amp;lt;code&amp;gt;attrs&amp;lt;/code&amp;gt; 对地形属性的影响，它通过削弱孢子属性来改变生产环境，同时施加状态：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;腐蚀性尘降风&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ParticleWeather&amp;quot;,&lt;br /&gt;
    &amp;quot;attrs&amp;quot;: {&amp;quot;spores&amp;quot;: -0.5},&lt;br /&gt;
    &amp;quot;color&amp;quot;: &amp;quot;a0b46e&amp;quot;,&lt;br /&gt;
    &amp;quot;density&amp;quot;: 3000,&lt;br /&gt;
    &amp;quot;opacityMultiplier&amp;quot;: 0.4,&lt;br /&gt;
    &amp;quot;statusDuration&amp;quot;: 10,&lt;br /&gt;
    &amp;quot;status&amp;quot;: &amp;quot;corroded&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
这两个例子分别强调了“作用对象”和“属性联动”，也说明天气不仅是视觉特效，更是战役节奏的控制器。&lt;br /&gt;
&lt;br /&gt;
== 天气与状态的联动 ==&lt;br /&gt;
&lt;br /&gt;
天气的 &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;statusDuration&amp;lt;/code&amp;gt; 会周期性施加在单位上，且可以区分空中与地面（&amp;lt;code&amp;gt;statusAir&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;statusGround&amp;lt;/code&amp;gt;）。这会导致某些单位“天然吃亏”，例如纯地面单位在持续减速天气里会明显受限，而飞行单位可能几乎不受影响。你在设计天气时需要考虑这一点，否则战役的难度会出现“对某类单位极不友好”的偏差。&lt;br /&gt;
&lt;br /&gt;
天气的 &amp;lt;code&amp;gt;attrs&amp;lt;/code&amp;gt; 还可以影响地形属性，例如降低或增加某些属性值，从而间接影响生产方块的效率。虽然这类设计较少见，但在特殊关卡中很有表现力。&lt;br /&gt;
&lt;br /&gt;
另外，&amp;lt;code&amp;gt;opacityMultiplier&amp;lt;/code&amp;gt; 会影响覆盖层的可见度，数值太高会让地图过暗、视线压抑；&amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt; 则控制天气维持时间，过短会显得“像闪一下”，过长又会让玩家觉得被强制压制。天气是“节奏控制器”，不是单纯装饰，建议配合波次设计一起调。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;环境方块environment&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 环境方块（Environment） ==&lt;br /&gt;
&lt;br /&gt;
环境方块通常位于 &amp;lt;code&amp;gt;content/blocks/environment&amp;lt;/code&amp;gt;，常见类型包括 &amp;lt;code&amp;gt;Floor&amp;lt;/code&amp;gt;（地板）、&amp;lt;code&amp;gt;OreBlock&amp;lt;/code&amp;gt;（矿物）、&amp;lt;code&amp;gt;StaticWall&amp;lt;/code&amp;gt;（环境墙）和 &amp;lt;code&amp;gt;Prop&amp;lt;/code&amp;gt;（装饰物）。它们的贴图必须放在 &amp;lt;code&amp;gt;sprites/blocks/environment/&amp;lt;/code&amp;gt;，否则会触发 &amp;lt;code&amp;gt;Wrong Texture Folder&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Floor&amp;lt;/code&amp;gt; 的字段很丰富。&amp;lt;code&amp;gt;speedMultiplier&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;dragMultiplier&amp;lt;/code&amp;gt; 会改变单位移动手感，&amp;lt;code&amp;gt;damageTaken&amp;lt;/code&amp;gt; 会造成持续伤害，&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;statusDuration&amp;lt;/code&amp;gt; 能让地板“踩上去就中状态”，&amp;lt;code&amp;gt;liquidDrop&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;liquidMultiplier&amp;lt;/code&amp;gt; 决定泵类方块的抽取效率。若地板是液体，还会用到 &amp;lt;code&amp;gt;isLiquid&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;overlayAlpha&amp;lt;/code&amp;gt; 控制显示效果。&amp;lt;code&amp;gt;variants&amp;lt;/code&amp;gt; 决定贴图变体数量，&amp;lt;code&amp;gt;oreScale&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;oreThreshold&amp;lt;/code&amp;gt; 则用于矿物的地图生成参数。&lt;br /&gt;
&lt;br /&gt;
除了数值字段，&amp;lt;code&amp;gt;Floor&amp;lt;/code&amp;gt; 还有不少“观感型”参数。&amp;lt;code&amp;gt;walkEffect&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;walkSound&amp;lt;/code&amp;gt; 可以塑造“踩上去的反馈”，&amp;lt;code&amp;gt;walkSoundPitchMin/Max&amp;lt;/code&amp;gt; 用于随机音高避免机械重复；&amp;lt;code&amp;gt;drownTime&amp;lt;/code&amp;gt; 会影响单位在深液体中的生存；&amp;lt;code&amp;gt;blendGroup&amp;lt;/code&amp;gt; 影响与其他地板的边缘过渡；&amp;lt;code&amp;gt;supportsOverlay&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;needsSurface&amp;lt;/code&amp;gt; 则决定能否叠加覆盖层或放置特殊装饰。这些字段不一定提高强度，但会让地形更“有存在感”。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;OreBlock&amp;lt;/code&amp;gt; 的核心字段是 &amp;lt;code&amp;gt;itemDrop&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;variants&amp;lt;/code&amp;gt;，前者决定掉落物，后者决定贴图变体数量。若你需要控制矿物生成密度，通常会调整 &amp;lt;code&amp;gt;oreScale&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;oreThreshold&amp;lt;/code&amp;gt;，并结合 &amp;lt;code&amp;gt;oreDefault&amp;lt;/code&amp;gt; 来决定是否参与地图默认生成。&amp;lt;code&amp;gt;StaticWall&amp;lt;/code&amp;gt; 更关注 &amp;lt;code&amp;gt;health&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;variants&amp;lt;/code&amp;gt; 与破坏音效；&amp;lt;code&amp;gt;Prop&amp;lt;/code&amp;gt; 则多用于纯装饰。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;文件：content/blocks/environment/tutorial-ore.json&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;OreBlock&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;示例矿&amp;quot;,&lt;br /&gt;
    &amp;quot;itemDrop&amp;quot;: &amp;quot;copper&amp;quot;,&lt;br /&gt;
    &amp;quot;variants&amp;quot;: 3&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;模组示例饱和火力-3.3.0-的环境方块&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 模组示例：饱和火力 3.3.0 的环境方块 ==&lt;br /&gt;
&lt;br /&gt;
“铬”矿展示了 &amp;lt;code&amp;gt;oreDefault&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;oreScale&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;oreThreshold&amp;lt;/code&amp;gt; 的组合用法，同时用 &amp;lt;code&amp;gt;playerUnmineable&amp;lt;/code&amp;gt; 禁止玩家手动开采，避免早期获取高阶资源：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;OreBlock&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;铬&amp;quot;,&lt;br /&gt;
    &amp;quot;itemDrop&amp;quot;: &amp;quot;铬&amp;quot;,&lt;br /&gt;
    &amp;quot;playerUnmineable&amp;quot;: true,&lt;br /&gt;
    &amp;quot;oreDefault&amp;quot;: true,&lt;br /&gt;
    &amp;quot;oreThreshold&amp;quot;: 0.9,&lt;br /&gt;
    &amp;quot;oreScale&amp;quot;: 20&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
“雪沙”则是一个带属性的地板，它在 &amp;lt;code&amp;gt;attributes&amp;lt;/code&amp;gt; 里增加油与水属性，让这类地形在生产效率上更有意义：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;floor&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;雪沙&amp;quot;,&lt;br /&gt;
    &amp;quot;itemDrop&amp;quot;: &amp;quot;sand&amp;quot;,&lt;br /&gt;
    &amp;quot;speedMultiplier&amp;quot;: 0.95,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: {&amp;quot;oil&amp;quot;: 0.5, &amp;quot;water&amp;quot;: 0.2},&lt;br /&gt;
    &amp;quot;variants&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;playerUnmineable&amp;quot;: true&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
这两个例子说明了“环境方块并非只有装饰用途”，它们也可以直接参与生产与战役节奏的塑造。&lt;br /&gt;
&lt;br /&gt;
如果你希望玩家“走上去就能感觉到地形差异”，可以配合 &amp;lt;code&amp;gt;walkEffect&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;walkSound&amp;lt;/code&amp;gt;，让移动反馈成为环境设计的一部分。&lt;br /&gt;
&lt;br /&gt;
== 环境方块与地图生成 ==&lt;br /&gt;
&lt;br /&gt;
环境方块的 &amp;lt;code&amp;gt;oreScale&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;oreThreshold&amp;lt;/code&amp;gt; 并不会直接“生成矿物”，它们只是告诉地图生成器在什么情况下使用该矿。真正的生成逻辑由生成器决定，因此你在 JSON 里设置这些字段之后，只有在对应生成器中引用了该矿，地图里才会出现它。这也是为什么很多自定义矿物“写了却不生成”的原因。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;oreDefault&amp;lt;/code&amp;gt; 是一个很重要的开关：它决定该矿物是否参与“默认矿物池”。如果你希望它只出现在特定地图，&amp;lt;code&amp;gt;oreDefault&amp;lt;/code&amp;gt; 就应该设为 &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;，然后在地图脚本或生成器里手动引用；否则它可能会在所有地图里随机出现，破坏战役节奏。类似的还有 &amp;lt;code&amp;gt;wallOre&amp;lt;/code&amp;gt;，它允许矿物生成在墙体上，常用于“墙矿”或特殊地形，但玩家视角会更难察觉，需要配合明显的贴图。&lt;br /&gt;
&lt;br /&gt;
对于液体地面，&amp;lt;code&amp;gt;liquidDrop&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;liquidMultiplier&amp;lt;/code&amp;gt; 会影响泵类方块的效率，也会影响“水洼”扩散。若你希望某种液体地面更有威胁，可以提高 &amp;lt;code&amp;gt;damageTaken&amp;lt;/code&amp;gt; 或直接设置 &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;。这些字段结合起来，能让地面从“背景”变成“机制”。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;生成器generator&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 生成器（Generator） ==&lt;br /&gt;
&lt;br /&gt;
行星生成器决定地形、矿物与噪声分布。原版中常见的生成器有 &amp;lt;code&amp;gt;SerpuloPlanetGenerator&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;ErekirPlanetGenerator&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;AsteroidGenerator&amp;lt;/code&amp;gt;，但 JSON 目前只能反序列化出 &amp;lt;code&amp;gt;AsteroidGenerator&amp;lt;/code&amp;gt;。如果你想在 JSON 里“复用原版生成器”，需要用 JS/Java 接管生成器字段，再回到 JSON 配置行星或区块。&lt;br /&gt;
&lt;br /&gt;
区块的生成器则是 &amp;lt;code&amp;gt;FileMapGenerator&amp;lt;/code&amp;gt;，它直接读取 &amp;lt;code&amp;gt;.msav&amp;lt;/code&amp;gt; 地图文件。因此当你使用自定义区块时，真正影响地形与矿物的是地图文件本身，而不是 JSON 字段。理解这点有助于避免“在 JSON 里调矿物密度却不生效”的困惑。&lt;br /&gt;
&lt;br /&gt;
== 小结 ==&lt;br /&gt;
&lt;br /&gt;
行星和区块决定战役的“大地图”，天气与环境方块决定“战场体验”。当你想做更复杂的生成逻辑时，优先参照 Java 教程，再回到 JSON 实现，会少走很多弯路。&lt;br /&gt;
&lt;br /&gt;
如果目标已经超出 JSON 能力，比如自定义生成器或复杂规则，就该直接转向脚本或 Java。&lt;br /&gt;
&lt;br /&gt;
合理使用天气和环境，还能把战役“讲得更像一个世界”。&lt;/div&gt;</summary>
		<author><name>硫缺铅</name></author>
	</entry>
</feed>