跳到主要内容

遭遇战创作

Guide

一场遭遇战就是完整的战斗配方:玩家、有序敌人、奖励池和规则

玩家角色由 Squire 定义,Iron Resolve 是它的 Starting Deck,敌人 HP、Intent 与 Behavior 则保存在 Strawman

Encounter 模式会把这些引用组合进 The Threshing Field,这份 GameEncounter 会保存名称、说明、难度、横幅、玩家、按行动顺序排列的敌人、奖励卡组与 Battle Rules,角色、卡牌和敌人的具体配置仍然保留在各自的原始资产中

先确认当前场景的 GameCardManager 已启用至少一个 Encounter Database,数据库配置决定 Game Card Editor 能够列出、创建和编辑哪些遭遇战

打开 Game Card Editor

Tools > TinyGiants > GCS > Game Card Editor

在窗口顶部选择 Encounter,再从左侧定位 The Threshing Field

Game Card Editor Encounter 模式中的 The Threshing Field,左侧为遭遇战列表,中间为玩家、敌人、奖励卡组与规则,右侧为四项静态预览

上图呈现了 Encounter 从资产选择到启动前核对的完整创作界面,在 List 中选定 GameEncounter 后,Inspector 会绑定参战单位、奖励与规则,PreviewUsed By 分别显示配置摘要和内容层级,四个区域共享当前选择,把分散的内容资产组合成一份可以继续校验和启动的战斗配方

从 List 选择 The Threshing Field

Encounter 模式只会读取当前 GameCardManager 已启用的 Encounter Database,先在 Database 中选择要写入的数据库,再用 + 创建空白遭遇战、用复制按钮基于当前结构创建副本,或用 删除当前遭遇战

搜索框会按遭遇战子资产名过滤,DifficultyTags 可以进一步筛选结果

每个列表行都会显示 16:9 战斗图片、名称、难度与敌人槽位数量,无需打开 Inspector 就能比较同一数据库中的战斗规模与分类

PresetEncounterDatabase 中的 Encounter List,The Threshing Field 显示 Normal 与 1 Enemy

当前列表已经选中 The Threshing Field,修改 Inspector 中的 NameDifficultyIconEnemy Units 后,列表项中的名称、难度、图片与敌人数量都会同步刷新

先建立战斗身份,再组装参战阵容

Basic

Basic 先确定这场战斗在编辑器、遭遇战选择界面和项目流程中的身份

字段配置结果
NameWorkbench 与项目 UI 使用的显示名称,填写非空值时也会同步更新子资产名
Description面向玩家的战斗地点、目标或对手说明
Difficulty内置 NormalEliteBoss 或项目自定义标签,只负责分类与显示,不会自动缩放战斗数值
Tags供 Workbench 筛选以及项目自己的进度、分组或选择逻辑读取的标签

Name 设为 The Threshing Field,将 Difficulty 设为 Normal,再填写玩家实际会看到的场景说明与 Warrior 标签,Basic 中的身份信息会立即同步显示在 List 与 Preview 中

The Threshing Field 的 Basic 配置,包含名称、战斗说明、Normal 难度与 Warrior 标签

Basic 已经确定战斗名称、场景与难度,Visual 会继续为当前 Encounter 指定战斗横幅

Visual

Icon 中选择一张 Sprite 后,Workbench 会把这张图片以 16:9 缩略图显示在 List 和 Display 预览中,项目的遭遇战选择页、加载界面或背景表现也可以直接复用这项引用

The Threshing Field 的 Visual 配置,Icon 引用 Background

身份与画面确定后,这场遭遇战仍然需要一名参战玩家和至少一个敌人槽位,二者共同决定运行时会创建哪些单位

Player

Player 中选择 Squire,当前卡片会显示角色头像、名称、HP 70Energy 3,这两个数值分别来自角色的 Max HP 与 Base Energy

The Threshing Field 的 Player 配置,Squire 显示 70 HP 与 3 Energy

需要调整 Player 引用时,选择按钮可以替换角色,打开按钮会切换到 Player 模式继续编辑,× 会清空当前引用

战斗启动时,运行时会根据 Squire 的 Max HP 与 Base Energy 创建玩家状态,场景表现层可以使用它的 Template 创建单位画面

当前 Run 的 Master Deck 为空时,运行时才会使用 Iron Resolve Starting Deck 构建抽牌堆,角色字段与两类卡组来源分别见玩家创作卡组创作

Enemy Units

参战玩家确定后,在 Enemy Units 中加入 Strawman,当前配置会显示槽位 1Normal Tier 与 14–18 HP

The Threshing Field 的 Enemy Units 配置,槽位 1 为 Strawman,Normal,HP 14–18

每一行都代表一个独立战斗槽位,同一个敌人添加两次会在运行时创建两个单位

拖动行可以调整槽位顺序,选择按钮可以替换当前敌人,打开按钮会切换到 Enemy 模式,× 会移除当前槽位

运行时会按照槽位顺序创建敌人,敌人阶段也会按同一顺序执行各单位的行动,战斗启动时,每个 Strawman 实例的实际 HP 会从 14–18 中随机确定

场景布局和单位 View 应当保持相同的槽位映射,避免画面顺序与实际行动顺序脱节,敌人创作说明了 HP 范围、Intent 与 Behavior 怎样共同定义每个槽位中的敌人

用 Reward Deck 与 Battle Rules 完成战斗配方

参战双方确定后,Reward Deck 会决定胜利时可以生成哪些卡牌候选,Battle Rules 则会决定开局资源、回合抽牌、手牌处理、Intent 显示与奖励数量

Reward Deck

Reward Deck 中选择 Spoils of Battle,卡片会显示卡组名称、11 cards1.73 平均费用

The Threshing Field 的 Reward Deck 配置,Spoils of Battle 显示 11 cards 与 1.73 平均费用

需要调整 Reward Deck 引用时,选择按钮可以替换奖励卡组,打开按钮会切换到 Deck 模式,× 会清空当前引用

每个 Reward Deck Entry 的 Copies 都会提供对应卡牌的抽取权重,Card Reward Count 则会决定本次请求的候选数量,运行时会据此带权且不重复地抽取条目

实际候选数量不会超过有效条目数,参与计算的 CopiesCard Reward Count 低于 1 时都会按 1 处理

Reward Deck 缺失或没有有效条目时不会产生卡牌候选,但胜利流程仍会进入奖励等待,项目的奖励 UI 需要提交其他奖励或调用 GCSApi.SkipReward(),本场胜利流程才会结束

候选生成与四类奖励结果见战斗循环

Battle Rules

奖励池只决定胜利后可以出现哪些卡牌,Battle Rules 则会把开局资源与手牌上限的创作基值、回合循环规则、Intent 显示范围和可供项目表现层读取的节奏参数保存在当前 Encounter 中

规则运行结果
Starting Hand Size战斗初始化时请求的起手数量,最小为 0Innate 卡牌会优先参与起手抽取,OnDrawCards Hook 可以改写请求数量,最终进入手牌的数量仍受手牌上限约束
Draw Per Turn从第 2 回合开始,每次 PlayerTurnStart 请求抽取的卡牌数,最小为 0,实际抽取数仍会经过 OnDrawCards Hook
Max Hand Size手牌上限的创作基值,最小为 1OnHandSizeLimit Hook 会解析最终上限,开局与回合抽牌会把超出部分送入弃牌堆,其他抽牌调用达到上限后会停止
Starting Energy大于 0 时作为每回合基础能量,0 会改用玩家角色的 Base Energy,随后仍会叠加 Run Energy Bonus 并经过 Energy Per Turn Hook
Card Reward Count胜利时请求的卡牌候选数,存在有效 Reward Deck 时,运行时会把低于 1 的值按 1 处理
Armor DecayResetOnTurnStart 会在玩家回合开始和每个敌人行动开始时处理护甲重置,Persist 会保留护甲,Armor Reset Hook 仍可以改写或取消结果
Hand Discard回合结束时先把 Ethereal 手牌移入 Exhaust Pile,DiscardOnTurnEnd 再保留 Retain 并弃掉其余手牌,Persist 会保留剩余手牌
Enemy Intent DisplayHidden 不发送 OnEnemyUnitIntentChangedIconOnly 会发送标签但把数值设为 -1Full 会同时发送标签与数值,GCSApi.PendingIntents 仍可读取原始 Intent
Animation Gap以秒保存并显示在 Preview 中的表现节奏参数,项目表现层可以读取该值,当前内置状态机不会据此自动插入等待

The Threshing FieldStarting Hand SizeDraw Per Turn 都设为 5,将 Max Hand Size 设为 10,并将 Enemy Intent Display 设为 Full

Starting Energy0,因此 Squire3 点 Base Energy 会成为每回合能量的计算起点

The Threshing Field 的 Battle Rules 配置,起手 5 张、每回合抽 5 张、能量 0、奖励 3

状态机会在初始化阶段应用 Starting Hand Size,第一回合不会再叠加一次 Draw Per Turn

从第 2 回合开始,状态机才会在 PlayerTurnStart 应用每回合抽牌规则,完整执行顺序见战斗阶段与执行顺序

在 Preview 中核对最终战斗

完成 Inspector 配置后,Preview 会直接呈现当前 Encounter 的身份、阵容与规则摘要,进入 Play Mode 前即可核对引用和数值是否一致

Display

Display 会把 16:9 IconNameDescriptionDifficulty 组合成一张玩家可识别的遭遇战信息卡,先确认画面与文字确实描述当前战斗

The Threshing Field 的 Display 预览,显示背景、名称、说明与 Normal 难度

The Threshing Field 的横幅、名称、场景说明与 Normal 已经保持一致,继续在 Lineup 中核对 Player 与 Enemy Units 是否属于同一场战斗

Lineup

Lineup 会把当前 Player 与按槽位顺序排列的 Enemy Units 放在同一块预览中,直接呈现这场战斗的完整阵容

The Threshing Field 的 Lineup 预览,Squire 以 70 HP 对战 HP 14–18 的 Strawman

当前阵容已经确认为 Squire 对战 Strawman,战斗启动时,运行时会从预览所示区间内确定敌人的实际 HP

继续检查 Player 引用、槽位数量和排列顺序是否符合设计,并确认阵容与遭遇战身份一致

Battle Rules

阵容正确后,Preview 中的 Battle Rules 会将九项规则汇总为标签,需要对比多场遭遇战时,可以直接核对手牌、抽牌、能量、奖励、护甲、弃牌、Intent 与表现参数

The Threshing Field 的 Battle Rules 预览,显示 Hand 5、Draw 5、Energy 0、Reward 3 等九项标签

这些标签与 Inspector 使用同一份 BattleRules 数据,Inspector 中的任何字段改动都会同步到对应标签,逐项对照即可确认规则摘要与输入值一致

Used By

Encounter 在 GCS 内容模型中属于由外部入口直接启动的顶层内容,不会作为子配置嵌套在另一份创作资产中,因此 Used By 会固定显示它没有父级内容资产

The Threshing Field 的 Used By,说明 Encounter 是不被其他内容资产引用的顶层对象

Used ByGameEncounter 只显示内容模型中的固定顶层提示,不会扫描场景中的 Bootstrap 或项目代码

实际启动入口仍需要在场景与项目流程中单独配置,固定场景可以保存 Encounter 引用,地图、任务和关卡流程则可以在运行时选择任意一场已创作的战斗

完成校验并接入启动流程

Workbench 会在保存和编辑期间检查 Encounter 的四项基础配置,Error 表示这份战斗缺少形成有效阵容所需的引用,Warning 表示分类或奖励配置仍不完整

这些校验只负责报告问题,不会拦截 StartBattle

级别条件需要完成的配置
ErrorPlayer Unit 为空在 Player 中选择一个有效角色
ErrorEnemy Units 中没有任何非空敌人至少加入一个有效敌人槽位
WarningReward Deck 为空需要卡牌候选时选择一份有效奖励卡组
WarningDifficulty 为空选择内置难度或填写项目自定义标签

校验不会检查 Reward Deck 是否包含有效条目,也不会判断场景是否已经配置可用的 Manager、所选启动入口与表现层,消除表中的问题后,还要继续检查奖励池内容与场景入口

常见校验信息和修复路径见内容创作错误

校验完成后,固定战斗场景可以用 GameCardEncounterBootstrap 保存当前 Encounter,地图、任务或关卡流程则可以在 GCSApi.IsReady 后调用 GCSApi.StartBattle(encounter),两种入口都依赖场景中可用的 GameCardManager

任一入口以 The Threshing Field 启动战斗后,运行时都会按其中的玩家、敌人顺序、奖励池和 Battle Rules 创建单位与牌堆、抽取起手牌、解析首组 Intent,并进入第一个玩家回合

场景中的棋盘、单位 View 与手牌 UI 会把这些运行状态呈现为可以操作的战场

Bootstrap 的 Default EncounterAuto Start On Play 与动态入口的生命周期见战斗启动,Manager、棋盘、单位 View、手牌 UI 与 Choice Presenter 的职责见战斗场景

进入 Play Mode 后,在 Game Card Monitor 中核对 BattlePileUnitPhase,确认当前 Encounter、玩家、敌人顺序、起手数量、能量、Intent 与阶段转换都对应 The Threshing Field

由外部系统读取或启动遭遇战的完整接口见 GCSApi 与战斗控制