feedback7: version 0.2.2 — package.json / package-lock.json / APP_VERSION (DEV_BUILD turns false), README release form, CHANGELOG 0.2.2 — 2026-10-09, DESIGN versions line

This commit is contained in:
sganggs committed 2026-10-09 03:09:33 +08:00
1 parent c2822e6726
commit 62eb113419
7 files changed
+123 -14

No files matched your search

+114
View File
@@ -1,5 +1,119 @@
# 更新记录 # 更新记录
## 0.2.2 — 2026-10-09
0.2.1 之后的版本:干员的潜能和自持有加成改为在「干员调配」里按干员自己设置(默认满潜、精英2 60 级);新增日文语音、点选干员的语音和本机统计数据页;按官方数据和 PRTS 修正了一大批规则(被推拉的敌人进入失衡、首领场传送门、杜宾「教鞭」三选一、突袭会跳到隐匿敌人身边等),并修复了社区和 GitHub 上反馈的问题、移植了多位贡献者的 PR。战斗模拟改用与浏览器无关的数学函数,各浏览器和服务器的战斗结果逐位一致。规则对照官方数据和 PRTS 核对,详见 DESIGN §27([docs/history/0.2.2.md](docs/history/0.2.2.md));有意和官方不同的写在「有意与官方不同的调整」里。
### 新功能
- 潜能和自持有加成按官方改成每名干员自己设置:「干员调配」里每名干员(普通、精锐和自选共用)可以设潜能 1–6 和练度(未精英化 / 精英阶段1 / 精英阶段2 / 精英阶段2-60级),默认潜能 6、精英阶段2-60级(维护者 2026-10-08 的决定:默认满潜满加成)。潜能和官方一样改变部署费用、再部署时间、属性和天赋(召唤物的天赋按召唤者的潜能);练度是调度手册「加成情况」里的自持有加成,攻击、防御、生命上限单独乘算,不和其他加成相加(精英1 攻击、防御 ×1.05;精英2 攻击 ×1.1、防御和生命 ×1.05;精英2 60 级三项 ×1.1)。官方中未持有的特许干员按潜能 1、没有加成,想照官方打可以把它设成潜能 1、未精英化;补位的替补干员和自选的原型干员两样都没有,AI 队友按默认。因为默认带满加成,持有的干员的攻击、防御和生命上限都比 0.2.1 高 10%(0.2.1 是全体满潜、没有自持有加成)。设置随调配同步,服务器会校验;旧的调配存档照常可用,没设的按默认;商店卡片、详情卡、「局内数值」和队友的干员都按各自主人的设置显示(GitHub #252)。
- 战场上的场地装置也能点一下看说明了:阻隔工事、“双眼皮”炮台、射击台、源石流发生装置,说明卡的样子和点特殊地形一样;数值取自所在关卡的装置数据(炮台还列出生命、攻击、防御、攻击间隔,吹风装置列出吹风方向和对干员攻击力、敌人移动速度的加减),装置名称按当前语言显示官方译名;作战中阻隔工事和炮台的说明卡带实时血量,被摧毁后点不出来,还没启用的炮台和被机变卡移除的箱子也不显示(GitHub #228,PR #229,感谢 @rickylxw)。
- 大厅和房间的顶栏里,「玩法说明」左边多了一个「设置」按钮,在等待时也能调语言、音量和快捷键等,打开的就是标题画面和对局里的同一个设置窗口。后台播放音乐和棋盘风格选项暂不做(GitHub #238,感谢 @RushFTK)。
- 点选干员时会说官方的「选中干员」语音了:休整期在作战区、整备区点干员,或点商店、晋升奖励里的干员卡片都会说(此前只有作战中才说);连续点选时新的一句接替正在说的那句,作战中也不会打断部署、技能等更重要的语音。部署、技能、接敌和结算语音仍只在作战中播放;替补干员、原型干员、盟约·辅助干员和召唤物没有官方语音(维护者 2026-10-08 的要求)。
- 新增日文干员语音:「设置」里多了「语音语言」,可选 中文 / 日本語(默认中文,与界面语言无关)。全部 191 名有官方语音的干员都有日文的作战语音(和中文同样的 14 句:行动出发、行动开始、选中、部署、作战中 1–4、结算),个别缺失的句子播中文。完整包附带中文、日文两套语音(因此比 0.2.1 大约 76 MB,约 505 MB);精简包和源码由 setup 一并下载(日文约 85 MB,素材合计约 550 MB)(维护者 2026-10-08 的要求;GitHub #256 提出的多语种语音先做日文,感谢 @xcdoge)。
- 新增「统计数据」页:标题画面右上角、大厅和等待室顶栏的「统计」打开这台设备上的对局记录——总览(胜场、胜率、到达 / 通关隐秘核心、最远回合、累计时长、各难度、六种称号各拿过几次)、策略(每个策略用了几局、通过几局、通过率)、战斗累计、对局记录(每局一行,点一行回看那一局的结算页,最新的 30 局可以回看)。记录只存在本机浏览器里、不上传,服务器仍然不保存任何历史;最多保留最近 1000 局(约 0.8 MB),可以「导出」「导入」换设备,同盟对局里队友的代号也会存在本机(页面和玩法指南 §12 都写明了);读不出来的存档会另存为备份后重新开始。打到结算的对局,以及「放弃模拟」前至少清完 1 个回合的对局计入统计;进去就退、没清完第一个回合的对局不计入,但会留在对局记录里并标着「中途退出」和「不计入统计」(维护者 2026-10-08 的要求;GitHub PR #323,感谢 @2321Robin)。
- 「干员调配」的干员列表改成一张表:每名干员一行,技能、模组(精锐)、潜能 · 练度各占一列、上下对齐,直接点行里的技能或模组图标就能换(「不装备」在最前),不用先打开详情;点头像或名字在右边打开详情,最上面是潜能与练度,接着是这名干员的特质(与局内详情卡同一块,跟着普通 / 精锐切换)。宽度 1000 像素以下(如横屏手机)详情盖住列表,点「干员列表」返回;自选编队里持有的干员在名额卡片上设潜能与练度。快捷选择和特质预览来自 PR #301,布局改成一张表,不用三列竖排的卡片(维护者觉得三列竖排有点乱)(PR #301,感谢 @farridge)。
- 点开场上干员的详情卡时,棋盘上会画出它当前的攻击范围:休整期是自己作战区的干员(按携带的技能、模组或替补和朝向);作战中和查看队友阵地时,我方干员和召唤物(包括队友的)按此刻的位置、朝向和技能画出实际攻击范围(例如开着扩大攻击范围的技能时就是扩大后的范围);敌人、倒下的干员和整备区里的单位不画,拖动、选朝向时也不画。只显示实际的攻击范围,不做技能范围预测(GitHub PR #281,感谢 @IceCodeNew;范围显示的思路来自 @BBleae)。
- 合作房间新增「AI 队友最后选择」(默认关闭;关闭时选顺与随机不变)。(PR #368,感谢 @anAtheist987)
- 休整期双击队友头像即可查看其战场,「前往查看」仍在;没有战场时不强制打开,正在查看时单击不再重新打开。(PR #374,感谢 @shadiaojumao-hyb)
- 设置新增「问题反馈」,在本地复制诊断信息(可附上本场战斗);玩家名只替换完整名字和完全相同的 JSON 字符串。(PR #321,感谢 @Cloudnyco)
### 有意与官方不同的调整
- 琳琅诗怀雅二技能的香槟炸弹不再掉血(站在活性源石上、受到各种伤害都不会)、不会被治疗,也不会因为生命值归零而消失,只在「见面礼」炸到碰到它的第一个地面敌人后消失。官方的香槟炸弹会掉血(PRTS:即使自身生命值未满,模型下方也不会显示生命值槽),这是维护者 2026-10-08 的决定。
### 规则(按官方)
- 「同名效果取最高」的效果(减防、脆弱、虚弱、庇护等)有三个或更多同时叠在一起时,最强的结束后按强度依次接上还没到期的那一个,不再跳过中间那一档:例如先后挂上 30%、25%、20% 减防(各 5 秒),30% 结束时接上 25%,再接 20%(此前直接跳到 20%)(GitHub #342,PR #348,感谢 @siruimei07)。
- 圣约送葬人、隐德来希的模组(REA-Y)「攻击范围内存在2名及以上敌人时攻击速度+12」改由战斗引擎统一处理:范围内敌人达到 2 名的那一刻生效、少于 2 名的那一刻消失(此前最多晚约 0.2 秒生效、多留约 0.3 秒);对全部棋子、补位和自选组合的扫描确认,其他干员不会因此多出攻速(PR #293,感谢 @LimitlessHPPK)。
- 异客三技能的雷暴区域改为以目标所在格为中心的十三格菱形(官方 x-1 范围;PRTS 备注),此前是以目标位置为圆心、半径 1.5 格的圆:目标所在格上下左右第二格的敌人现在也会被雷暴劈中,斜向第二格之外的则不会(GitHub #322,PR #329,感谢 @IceCodeNew)。
- 歌蕾蒂娅三技能结束时的「捕网」只拖拽龙卷风中心 1 格内的敌人(PRTS 备注:捕网半径 1),此前沿用龙卷风的 1.5 格;龙卷风的减速和拖拽仍是 1.5 格(GitHub #324,PR #329,感谢 @IceCodeNew)。
- 信仰搅拌机一技能的补弹对象改为周围 8 格内最后部署的那名开着弹药类技能的拉特兰干员(PRTS 备注;重新部署也算最后部署),此前选离他最近的(GitHub #325,PR #329,感谢 @IceCodeNew)。
- 最终攻势和隐秘核心的领袖战场,传送门按官方会传送了:敌人沿路线走进场边角落的传送门入口时,不再当场算漏怪、扣目标生命值,而是在传送门里消失 3 秒(与数据里写明的传送一样)后从场地中央的传送出口出来,再走向入口这一侧的蓝门,走进蓝门才算漏怪;另有 4 条官方路线漏写了「出现」,敌人穿过传送门后会在出口现身,不再隐身走完剩下的路。被传回来的敌人会再经过一次防线,领袖战的战况随之变化(GitHub #336,PR #337,感谢 @2321Robin)。
- 隐秘核心「假想敌:铳」的【末日布道】:碎铳之簧追到铳身边后不再马上结束追逐,而是在 5 秒增益期间一直跟着铳移动(期间无敌、不攻击),与 PRTS 一致;场上已经没有铳时原地等增益结束。双人战场的两把铳仍各按数据的冷却施放(出场 20 秒后一次,之后每 45 秒),后喊的那把会把所有碎铳之簧叫到自己身边(PR #347,感谢 @CXUtk)。
- 策略「大帝」的加急调派不再有 20 层上限:干员每次部署后再部署时间减少 50%,第 21 次及以后的部署仍会继续减半(PRTS:该策略效果可无限叠加)(GitHub #328,PR #329,感谢 @IceCodeNew)。
- 假想敌「骨刺」按 PRTS 天赋索敌:普通攻击索敌不受阻挡影响(被阻挡后按仇恨优先级选目标,不再先打阻挡者)、不会攻击飞行单位,隐匿期间同时攻击的 3 个目标从普通攻击的范围(含干员碰撞体积)里选(GitHub #296,PR #365,感谢 @Sukvii)。
- 顶栏中间的胶囊按官方口径计数:显示「已解决 / 本回合敌人数」,打死一个、漏掉一个都算已解决(开局 0/3,漏一个 1/3,打死一个 2/3,打死会分裂的那只 3/3);分裂出来的小怪、召唤物(包括领袖召唤的敌人)不进分子也不进分母,所以会召唤的领袖关胶囊也能填满,不会再因为小怪越分越多而「永远差一截」;它们漏掉时仍然各自扣目标生命值、破坏完美作战,击杀统计和悬赏也照旧(4 只磨砻被打死、分裂出的 8 只全漏:胶囊 4/4,扣 8 点)。队友进度和观战里的胶囊同样按这个口径(PR #308,即 PR #157 的胶囊部分,感谢 @xcdoge)。
- 白铁的「铁钳号·原型机」在干员的攻击范围或技能范围内时,能作用到它的技能会像遇到敌人一样自动开启并消耗弹药:例如范围内只有铁钳号时,圣约送葬人二技能会开启、子弹打在铁钳号上,「每消耗7发子弹」的拉特兰、远见特质照常叠层(此前技能从不开启,子弹和层数都不动);蕾缪安三技能会锁定它并打完子弹,艾丽妮三技能、陈二技能会斩它,引星棘刺二技能的炼金单元会落在它身上。效果只会挑选敌人、打不到它的技能(如德克萨斯「剑雨」)和治疗技能不会为它开启,留给真正的敌人;白铁™多功能平台仍不会被攻击(社区反馈;维护者 2026-10-08 按官方体验确认)。
- 伊内丝三技能「独影归途」在突袭再部署落地后重新发动(攻击力提升、收回影哨),不再在跳跃后被吞掉;有技力消耗的技能仍按「保留技力」保留原有技力(社区反馈)。
- 引星棘刺一、二技能的炼金单元给友军的生命恢复改为提高「生命回复速度」,与锡人「大拉里」相同(PRTS 锡人备注:不受治疗加成和禁疗影响):不屈者(如折桠)和处于禁疗的干员现在也能回血,治疗量加成不再放大它(社区反馈)。
- 炎佑是飞行单位,标注「不可对空」的敌人效果不再打到它:高能源石虫、冰爆源石虫、卷心籽的死亡爆炸,水遁忍者的漩涡,鼎沸的范围伤害,“萨科塔昂首”的祈祷邀约(攻击速度 −30),以及“斩胄之剑”“破胄之锤”的攻击(社区反馈)。
- 望放在棋盘上的棋子在开战部署时就由第一天赋「铸子」在相邻格额外部署一枚棋子(跟子),可以落在不可部署的地面上,位置按 PRTS 的顺序(有敌人的格子优先;不可部署地块 > 可部署地面 > 可部署高台;同级按棋子的上 > 右 > 下 > 左);之后有单位部署到跟子所在的格子时跟子消失;三技能开启时溢出的跟子也按同样的顺序落位。此前开战时一枚跟子都没有,单独一枚棋子永远不会触发(社区反馈)。
- 升级调度中心时,新增的商品栏位立刻出现但保持空着,不再立即刷出一名干员(官方录屏:升级只开位,新位在下一次刷新——手动刷新或回合开始的自动刷新——时才会出现干员),已有的卡片不变;商店里的空栏位只画一个空框,不再写成「已招募」。0.2.0 起「升级立即补一张新卡」的做法撤回(GitHub #332,PR #333,感谢 @2321Robin)。
- 耀骑士临光的特质给自己和身前一格干员的「【卡西米尔】每叠加 3 层,再部署时间 -1.5%(精锐 -3%)」不再在基础值的 5% 处封顶:此前卡西米尔层数很高时(普通 192 层、精锐 96 层起)再部署时间停在 5%,现在按数据一直减到 0 秒为止(GitHub #370,感谢 @FrogThai)。
- 战场#08(下半) 涨潮控制的领袖战:巡逻的「假想敌:铳」和卢西恩从场地中央走向蓝门一侧时走上方的路(与官方寻路一致),不再从下方穿过两格深水区。敌人「优先走能被阻挡的路」的寻路调整现在只在不会多踩深水区时生效,其他战场已有的路线不变(GitHub #375,感谢 @FrogThai)。
- 立即生效、本身不是一次攻击的技能(如引星棘刺「度算浪波」、先锋的回费技能)两次释放之间至少隔一个攻击间隔(释放本身不占用普通攻击):攻速越快放得越勤,迅捷返还的技力再多也不会每一帧都放(此前迅捷叠高后度算浪波每帧都放,攻速不起作用)(GitHub #298,感谢 @FrogThai)。
- 琳琅诗怀雅二技能的香槟炸弹不会再被没有破隐的隐匿敌人触发:隐匿的敌人被反隐或被阻挡后才会引爆它,沉睡中的敌人醒来后才会引爆它(PRTS:隐匿使单位无法被任何敌方能力选中;此前隐匿、沉睡的敌人走上去照样引爆,沉睡时炸弹白白浪费)(社区反馈)。
- 帝国炮火先兆者、帝国炮火中枢先兆者的炮弹:干员的碰撞体积(半径 0.25)碰到半径 1.2 的落点圆就会受到伤害,也就是落点格和周围一圈共 3×3 格,此前只打中十字形的 5 格(PRTS:碰撞判定;GitHub #364,感谢 @FrogThai)。
- 速射手(特性「优先攻击空中单位」)站在近战位阻挡地面敌人时,攻击范围内有飞行敌人会先打飞行敌人;其他干员仍先打自己阻挡的敌人(维护者 2026-10-08 的决定;GitHub #220,PR #220 的思路,感谢 @TsangAsuna)。
- 策略「余」的【文火慢炖】不再给不显示层数的盟约(独行、绝技、调和、协防干员)加层:第 8 回合只激活了其中一个时什么也不加,同时激活了别的盟约时只给有层数的那些加(维护者 2026-10-08 的决定,与 PRTS「这些盟约照样吃叠层效果」的说法不同;协防、华法琳的叠层不变)。
- 杜宾的法术「教鞭」改回官方的三选一:使用后销毁,休整期里弹出 3 张战术特训悬赏(只有自己看得到,刷新页面或断线重连后还是这 3 张;绝境、终极里从 20 张里抽,标准、险境里从 15 张里抽),点一张再点一次确认,选中的那张成为接下来的悬赏;选定之前不能点「准备就绪」,同盟模式的休整期倒计时结束时还没选就随机选一张(独立模拟和只有一名玩家时休整期不限时,不会自动选);AI 队友和 AI 托管的座位按悬赏评分自己选。此前(0.1.0 起)是服务器随机抽 3 张再随机拿 1 张,文档里写作有意的简化;“神秘顾客”仍是随机悬赏(PR #353,感谢 @Sukvii;维护者 2026-10-08 决定按官方)。
- 战术特训悬赏的赏金在最终攻势和隐秘核心里也发了:本侧没有漏怪、全队获胜时,和击杀赏金一起在下一回合的资金里入账,每名玩家每张卡只算一次;此前这两场只发击杀赏金,战术特训的敌人出场了、用掉了一场,赏金却从不发。这两场的战况由浏览器上报、服务器不重新模拟,所以赏金还要求结果与浏览器战斗中自己上报的数据一致:上报时把队伍生命的损失分到了每名玩家名下(新增 b.progress 的 leaksBy,其余是领袖自身效果扣的),结果里这名玩家的漏怪列表不能比上报的少,上报了生命损失却没有分账的结果一律不发,漏怪既不能藏起来也不能推给队友(PR #353,感谢 @Sukvii)。
- 突袭盟约的干员也会再部署到隐匿(未被反隐)的地面敌人周围,范围内有隐匿的地面敌人时也算「范围内有敌人」、不会跳走;沉睡、不可选中的敌人和飞行敌人仍不算(GitHub #316,感谢 @warpgenius;维护者 2026-10-08 按官方实测确认)。
- 「画卷」复制的干员凑成三合一晋升时,目标身上的装备也会照常复制了:此前晋升先把装备收回整备区,画卷随后读到空的装备栏,复制的装备就丢了(例如两把普通维式重锤本应合成一把攻击力 +25% 的进阶锤,结果只剩原来那把 +15%)。现在复制前先记下装备:复制出的装备和收回的原装备一样放进整备区(PRTS:获得的装备为未装备状态),同名普通装备照常自动合成;晋升后的精锐干员留在原格、朝向不变、身上不带装备,已经是进阶的装备也不会再被穿回精锐身上(GitHub #389,PR #390,感谢 @Xinglan233)。
- 引星棘刺一技能「度算浪波」的防御力加成可以叠加了:两个炼金单元罩住同一名干员时防御力 +60 再 +60(精锐 +75),此前只算一个(治疗本来就会叠加);同一名引星棘刺前后两次释放、两个炼金单元重叠的那几秒也一样叠加(PRTS 备注:效果均可叠加;GitHub #388,感谢 @ChengCC0101)。
- 被推开、拉动的敌人会进入官方的「失衡」状态:这段时间里不走路、也不发动普通攻击。推开按「力度减重量」的档位持续 0.2 秒到约 1.17 秒(PRTS 推力-位移近似对应表的位移时间,例如中等力度推重量 1 的敌人 0.8 秒),拉拽持续 1 秒(力度比重量低 2 档时 0.5 秒,拉到身前后也保持到结束);失衡期间也不会放技能、闪现或执行脚本移动,弧光锋卫在失衡期间每 0.066 秒受到 400 点真实伤害(此前按推开的格数一次性扣血);推不动的空中单位(静态刚体)被推时停顿 0.1 秒、被拉时停顿整个拉力作用时间;浮空、重生和路线上的瞬移出现都会立刻解除失衡。画面上的推拉滑行也改用同样的时间(默认 2 倍速下现实时间减半)(PR #392 的思路,感谢 @xcdoge)。
- 「画卷」复制出的装备一律以未装备状态放进整备区(整备区满时进临时整备区,两处都满时和其他获得的装备一样销毁并提示),不再穿在复制出的干员身上——没有触发晋升时也一样(PRTS 画卷 备注:使用后销毁,获得的装备为未装备状态)。
- 引星棘刺一技能「度算浪波」的炼金单元在几名干员生命比例相同时投给最晚部署的那名(重新部署的按新的部署算),此前投给阻挡数多、离她近的那名(PRTS 备注:优先选择生命比例最低>最晚部署的我方单位)。
- 攻击间隔和技力消耗恰好是整数帧时不再多等 1 帧:此前 1 秒的攻击间隔实际每 31 帧一次(官方 30 帧),3 秒 91 帧、4 秒 121 帧,从 0 开始、每秒回复 1 点的 10 点技力要 301 帧才充满;敌人恰好整数帧的攻击前摇也准时了(如 0.4 秒前摇 12 帧,此前 13 帧),“双眼皮”炮台和寒檀二技能的冰凌同样准时。干员和敌人都受影响,整数秒攻击间隔的敌人更多,整体略难一点。不是整数帧的间隔仍按越过 0 的那一帧计算(向上取整,例如 20.34 帧算 21 帧),官方是四舍五入(20 帧),这一点这次不改(PRTS 作战机制「帧对齐」:一帧 1/30 秒)(PR #402,感谢 @Cloudnyco)。
### 界面
- 休整期点「准备就绪」后商店自动收起、棋盘放大到全场,取消准备时商店再展开,不用再手动点「收起」(收起和展开仍可随时手动切换)。拖动干员身体这一条还没做(GitHub #138,感谢 @blackyang40-cmd)。
- 血条下方的三项读数(只是显示,不改变战斗):弹药类技能开启时(如隐现二技能,共 14 发),技力条换成分格的黄色弹药条,一格一发、打一发少一格、补弹时回来,开启期间脚下不再有持续的金色光环;伺夜的狼群在血条下方有一排菱形,亮的是剩下的狼影(最多 3 个),进入战术点形态时消失;斩业星熊进入「我执」后绿色血条停在 1 点,超出的伤害涨成血条上的红条(PR #303、#378,感谢 @IceCodeNew;PR #383,感谢 @Convey123)。
- 梓兰「猎头顾问」每次主动刷新冻结的那张同名干员现在会显示冰霜:此前服务器已经冻结了这张卡并留到下一回合,但商店栏只看上方的冻结按钮,玩家看不出是哪一张;规则不变,再手动刷新会连它一起重抽(GitHub #354,感谢 @DuolaCCCCat)。
- 渲染器初始化超过 12 秒而改用简化视图后,不会再迟到地把画布装到简化视图上、截走点击:超时、失败或离开页面时会中止这次初始化并销毁迟到的视图,也不再清空整个宿主元素(此前这还可能把后装的新视图一起删掉)(PR #302,感谢 @siruimei07)。
- 单位部署当刻就发动的技能(如宴),第一次发动的音效此前会丢失(技能事件比单位的出现事件先到),现在等单位出现后补播一次;中途进入战场时仍只回放「谁在场」,不会把之前的死亡、部署和技能音一次放出来(PR #292,感谢 @LimitlessHPPK)。
- 战场上单位很多时,缓存图集的刷新按本帧的更新顺序错开,每帧刷新的单位数几乎相同,不再因随机相位让个别帧特别忙而出现周期性的帧耗时尖峰;不改画面和战斗(GitHub #327 第一步,PR #334,感谢 @Cloudnyco)。
- 自选干员赤刃明霄陈三技能「赤霄·天喟」的剑气看得见了:剑气在战场上前进、拐弯时一路画出剑光拖尾和朝向前进方向的月牙(此前模拟里剑气照常移动、造成伤害,画面上只有开技能时的一下和命中时的闪光);剑光是程序绘制的近似效果,不是官方的粒子特效(维护者反馈;PR #382,感谢 @Convey123)。
- 敌人攻击后摇期间(攻击动作播完、重新迈步之前的那段)画面上也原地站着,不再在两次画面更新之间往前滑;被推开、恐惧、晕眩、隐身或死亡打断后摇时照常移动。只是显示,不改变战斗(PR #381,感谢 @ZiyueW1116;取代 #307、#314)。
- 被推开、拉拽的敌人会减速滑到模拟算出的位置,不再一下子出现在路径终点(此前推开约 1.7 格只用一两帧走完,更远的拉拽直接瞬移);滑行时长是本作拟定的(官方是冲量加摩擦,没有公开的时长),推开后被打倒的敌人尸体留在被推到的位置。飞行敌人死亡时在死亡动画播完前保持在空中,淡出时才落下;死亡动画最长 1.6 秒的限制放宽到 8 秒,盐风主教昆图斯等 25 个敌人的死亡动画不再被截短。只是显示,不改变战斗(PR #380,感谢 @xcdoge)。
- 琳琅诗怀雅二技能的香槟炸弹不再显示血条(PRTS:即使自身生命值未满,模型下方也不会显示生命值槽);它的生命值、受到的伤害和能否被治疗都不变(维护者反馈)。
- 佩佩、仇白、隐德来希、琳琅诗怀雅等干员闭眼(眨眼、倒地)时眼球不再从眼皮下露出来:场上带眼部遮罩的干员不止一名、或画质不是「高」时,遮罩会关掉以节省性能,现在改为在闭眼的那几帧把眼球藏起来(GitHub #177;PR #384 的思路,感谢 @Convey123)。
- 敌人的攻击来不及提前起手时(例如画面落后后补上的攻击),只要攻击间隔放得下整段攻击动作,就从头完整播一遍:重犯的铁球会先举起再砸下,不再只剩砸下的后半段;攻击比动作快的仍从命中那一帧播起(#246,感谢 @TsangAsuna)。
- 假想敌「骨刺」被阻挡或被反隐时立刻换成另一形态(B 组模型),恢复隐匿后变回三头蛇;攻击、晕眩、冻结中切换也会立即换模型(GitHub #296,感谢 @FrogThai 反馈;PR #365,感谢 @Sukvii)。
- 联防(两位队友一起守)和双人首领场里,敌人从一位队友的半场进来、在另一位队友的半场漏掉时,战斗结束后队友界面里该战场的进度与战斗中的胶囊一致(例如 1/1),不会再跳回 0(顶栏胶囊 PR #308 的补充:战斗结束时按整个战场的数字发布,不再把两位玩家各自被截到 0 的数字相加)
- 观战队友时点开盟约详情,成员人数和高亮与外圈的数字一致了:此前休整期观战会把队友整备区、临时整备区里的干员也标成「在场」。现在只有作战区的干员标为在场;整备区的干员标为「整备区」,投资人、远见、奇迹这类含整备区的盟约照常把他们算进成员人数;临时整备区的干员哪个盟约都不算——和自己的盟约详情一样(GitHub #385,PR #387,感谢 @zasx77771)。
- 选择朝向时按 Enter 不会再误触发部署:选朝向期间按 Tab 先到轮盘上的「点击取消」,在它上面按 Enter 是取消;Tab 到准备、设置、放弃模拟等其他按钮上按 Enter 没有反应;焦点不在按钮上时 Enter 照常确认朝向。此前不管焦点在哪个按钮上,只要选了方向,Enter 都会直接部署(GitHub #394,PR #395,感谢 @Xinglan233)。
- 谢拉格盟约的「盟约寒风」改为暴风雪从战场下方往上刮(维护者 2026-10-08 确认官方就是从下往上):雪粒从屏幕底部被吹起、带着侧风翻滚,几道风痕一起刮过,寒风来时的全屏冷光也更明显;灵知三技能、麦哲伦一技能(每 3 秒一次)自身的寒气保持原来较轻的飘雪。只是显示,不改变战斗(GitHub PR #386,感谢 @leiming2333)。
- 「干员调配」里选中技能的蓝色边框恢复为正方形、完整包住技能图标:此前全局的图片宽度限制让边框比图标窄、比图标高并向左偏,两侧线条被裁细,图标的一边露在框外(GitHub #398,PR #399 的定位,感谢 @shadiaojumao-hyb)。
- 圣约送葬人装备 Y 模组(REA-Y)时,干员调配、局内数值和详情卡上的特性写回「每攻击到一个敌人回复自身50生命」,与战斗中一致;此前把模组追加那一行「攻击速度+12」的 12 误填进了回血量。只改显示,战斗一直按 50 回复(GitHub #400,感谢 @PCL1234)。
- 「干员调配 → 自选编队」里再次点中已经选中的干员,技能和模组的草稿不再被打回已保存的选择或默认值(PR #306,感谢 @Xinglan233)。
- 出售召唤者时,其召唤物栈即将空出的整备区或临时整备区格子算进容量:每个自己的栈算一格,不管叠了几只;场上的召唤物和别人的召唤物不算(PR #309,感谢 @siruimei07)。
- 导入配置等共用弹窗把 Tab 焦点圈在弹窗内,隐藏的文件选择框不再接到焦点;攻略层打开时弹窗让出键盘,Shift+Tab 不再跑到背景按钮上(PR #341,感谢 @Xinglan233)。
- 观战休整期时,机变选完后效果和下一波敌人预览会刷新给队友和观战席,不再只在棋子移动时才推送(PR #349,感谢 @siruimei07)。
- 按 D 升级调度中心之后,升级按钮上的二次确认会清掉,下一次点击只是选中新的等级,不会再升一级(PR #356,感谢 @Xinglan233)。
- 替换装备窗口里,焦点在「取消」或装备选项上时按回车走按钮自己的动作,取消不再拆掉选中的装备(PR #358,感谢 @Xinglan233)。
- 整备区已满、只剩自己的召唤物栈时,可以把干员撤退到这一格;临时整备区、场上的召唤物和别人的召唤物仍然不算空位(PR #361,感谢 @Xinglan233)。
- 「干员调配 → 自选编队」的选择列表刚打开时立刻按 Esc 也能关上:此前列表出现后一瞬间按下的 Esc 会被吞掉,列表留在屏幕上。
- 拟态物质、简易通讯机、寻呼模块拿不到干员时会提示原因:卡池里这名干员已经全部被持有(例如 1 金 2 白溯光星源已占满Ⅵ阶的 5 份),或者没有可获得的同盟约干员;道具照官方说明仍会销毁(#401)。
- 拖动干员到可以放下的格子(棋盘或整备区)上时,模型直接站在那一格上(与官方部署一致,手指在格子里移动时模型不动),不再悬在手指下方、看起来落在下一格;落点仍是指针 / 手指所在的格子,不在可放下的格子上时(例如商店栏上)模型照旧跟在指针下(感谢 @bubububaoshe 在 PR #403 的反馈)。
### 联机与大厅
- 对局开始后,顶栏延迟旁会出现观战席的小胶囊(眼睛图标 + 观战人数,没有人观战时不显示),点开是观战者名单:创建者可以在名单里用 ✕ 把观战者移出,被移出的人回到大厅、不再收到战场画面;其他玩家和观战者也能看到名单。此前对局开始后看不到谁在观战,也没法移出(房间界面的名单在对局中不显示)。观战席上限仍是 2 个,不能调整(GitHub PR #120,感谢 @salt-fishes)。
- 两个标签页错开启动时,不再把同一个重连令牌各认领一次。(PR #299,感谢 @siruimei07)
- 较慢返回的旧语言包不再盖掉更新的语言选择。(PR #304,感谢 @siruimei07)
- 未设置 HOST 时默认监听 `::`,同一端口同时接受 IPv6 和 IPv4,启动横幅列出可分享的 IPv6 地址。只移植了双栈监听,没有带上授权页、设置迁移和防火墙脚本,Docker 镜像仍绑定 `0.0.0.0`。(PR #291,感谢 @LimitlessHPPK)
- 设置了 HTTP(S)_PROXY 时,素材下载会在进程启动时打开 NODE_USE_ENV_PROXY 再走代理(Node 22.21+ / 24);更旧的 Node 会提示无法走代理,然后照旧直连下载。(PR #289,感谢 @weinibuliu)
### 人机
- 人机(和 AI 托管)摆放「没有攻击距离」的重装干员(攻击范围只有自己脚下一格:角峰、古米、泡泡、折桠、菲莱、蛇屠箱、塞雷娅、余)时,会优先把它们放在敌人必经的路径格上:它们只有站在路径上才挡得到、打得到敌人,此前阵容很满时偶尔会被随机放到路边、白占一个部署名额;路径格不够用时仍退到其他合法位置(PR #339,感谢 @IceCodeNew;该 PR 里改购买评分、人事部文档估值的部分没有采用)。
### 工具与开发
- 素材清单 `data/assets.json` 多了 `audio.voiceJp`(日文语音:ArknightsAssets2 `voice/` 目录,和中文同样的文件名,放在 `public/assets/audio/voice/jp/`);`fetch-assets` / `setup` 两套都下载。`tools/package.mjs` 顶部的开关 `FULL_ZIP_JP_VOICE` 改成 `false` 时完整包(及其更新包)不带日文语音:玩家首次启动时由 setup 下载,更新包也不会删除玩家已有的日文语音。
- `--refresh` 下载失败时直接报错,不再退回旧缓存。(PR #350,感谢 @siruimei07)
- 启动时的构建标记现在包含模拟、shared 和数据,旧页面能发现新版本(刷新仍等本局结束)。(PR #351,感谢 @siruimei07)
- 校验重放按现有的 8 毫秒预算分片,不再卡住事件循环。(PR #352,感谢 @siruimei07)
- 本地一条命令按 GitHub CI 的顺序跑检查(不含 npm ci)。(PR #367,感谢 @anAtheist987)
- 增加战斗性能基准(public/dev,默认不打进发布包)。(PR #198,感谢 @Cloudnyco)
- 增加 GitHub 议题模板(功能请求的「期望效果」补了 id,去掉不用勾的检查项,标签统一为小写 bug)。(PR #300,感谢 @Griseo-bh3rd)
- 战斗模拟改用与浏览器引擎无关的数学函数:Chrome、Firefox、Safari 和服务器算出的战斗逐位一致(sin / cos / atan2 用和 Node 相同的 fdlibm 算法,hypot 和整数次幂自己实现),模拟里禁止再用会因引擎而异的 Math 函数(PR #373,感谢 @Cloudnyco)。
- Windows 上打包、读取 zip 时中文文件名不再出错(Windows 的 tar 改为写 UTF-8 文件名,读取端也认 Info-ZIP 的 Unicode Path 字段),GitHub Actions 的 Windows 检查恢复正常;发布包本身不受影响(PR #311,感谢 @Cloudnyco)。
- 新增 AGENTS.md(CLAUDE.md 指向它):给 AI 编程助手的入口,只列出该先读的文档和仓库的硬规矩,完整说明仍在 CONTRIBUTING.md(GitHub #379,感谢 @anAtheist987)。
## 0.2.1 — 2026-10-07 ## 0.2.1 — 2026-10-07
0.2.0 之后的快速更新:联防改回在本回合的战场上进行(0.2.0 的联防地图没有任何地形,影响游玩),突袭在战场两边都有人时可以跳到队友的半场,干员按满潜能计算,并修复了 GitHub 上反馈的问题、移植了多位贡献者的 PR。从这个版本起,Releases 里除了完整包和精简包,还有只含改动文件的更新包,可以直接覆盖到用 0.2.0 整合包装好的文件夹上。规则对照官方数据和 PRTS 核对,详见 DESIGN §26([docs/history/0.2.1.md](docs/history/0.2.1.md))。 0.2.0 之后的快速更新:联防改回在本回合的战场上进行(0.2.0 的联防地图没有任何地形,影响游玩),突袭在战场两边都有人时可以跳到队友的半场,干员按满潜能计算,并修复了 GitHub 上反馈的问题、移植了多位贡献者的 PR。从这个版本起,Releases 里除了完整包和精简包,还有只含改动文件的更新包,可以直接覆盖到用 0.2.0 整合包装好的文件夹上。规则对照官方数据和 PRTS 核对,详见 DESIGN §26([docs/history/0.2.1.md](docs/history/0.2.1.md))。
+2 -7
View File
@@ -1,13 +1,8 @@
# 卫戍协议:盟约 · Stronghold Protocol: Alliance # 卫戍协议:盟约 · Stronghold Protocol: Alliance
> [!WARNING]
> **开发版(dev 分支):不稳定,请勿用于公开服务器。** 这里是 0.2.2 的开发中代码,规则、数据和存档格式随时会变,可能有未发现的问题。想玩或开服请使用 [Releases](../../releases/latest) 页面的正式版整合包,或 `master` 分支。反馈问题时请注明「dev」和版本号(标题页底部、启动横幅和 `/healthz` 都会显示 `0.2.2-dev`)。开发版与正式版在同一地址下共用浏览器里保存的设置和登录信息,来回切换后如果界面异常,清除这个网站的数据即可。开发版不提供整合包。
>
> *Development branch: unstable — do not run it as a public server. Rules, data and saved settings may change at any time. Play or host the latest release (or the `master` branch) instead; when you report a bug from this branch, say "dev" and the version shown on the title screen. It shares the browser's saved settings with a release served at the same address — clear the site's data if the interface misbehaves after switching. No release zips are built from this branch.*
《明日方舟》季节性自走棋塔防玩法「卫戍协议:盟约」的**非官方同人复刻**:浏览器即开即玩,单人或 1–4 人联机合作。 《明日方舟》季节性自走棋塔防玩法「卫戍协议:盟约」的**非官方同人复刻**:浏览器即开即玩,单人或 1–4 人联机合作。
![version](https://img.shields.io/badge/version-0.2.2--dev-orange) ![version](https://img.shields.io/badge/version-0.2.2-2ea44f)
![license](https://img.shields.io/badge/code%20license-GPL--3.0--or--later-blue) ![license](https://img.shields.io/badge/code%20license-GPL--3.0--or--later-blue)
![node](https://img.shields.io/badge/node-22%20%7C%2024-339933) ![node](https://img.shields.io/badge/node-22%20%7C%2024-339933)
@@ -42,7 +37,7 @@ English summary: [below](#english).
- **独立模拟**(单人)与**同盟模拟**(1–4 人**合作**,没有 PvP;空位可以加 AI 队友)。 - **独立模拟**(单人)与**同盟模拟**(1–4 人**合作**,没有 PvP;空位可以加 AI 队友)。
- 服务器是一个 Node.js 程序,**战斗在各玩家的浏览器里模拟**(和官方一样),服务器只管经济与回合,一台低功耗小主机就能开服。 - 服务器是一个 Node.js 程序,**战斗在各玩家的浏览器里模拟**(和官方一样),服务器只管经济与回合,一台低功耗小主机就能开服。
- 本分支是 0.2.2 开发版(未发布);最新正式版是 0.2.1,见 [CHANGELOG.md](CHANGELOG.md)。仍有少数规则按推断实现,与官方不一致的地方欢迎在 Issue 里反馈。 - 当前版本 0.2.2:干员可以单独设置潜能和练度(默认满潜、精英2 Lv.60),新增日文语音和统计数据页,按官方补上失衡、整数秒攻击间隔 30 帧等规则,并修复了 0.2.1 发布后玩家和 GitHub 上反馈的问题,详见 [CHANGELOG.md](CHANGELOG.md)。仍有少数规则按推断实现,与官方不一致的地方欢迎在 Issue 里反馈。
## 功能一览 ## 功能一览
+2 -2
View File
@@ -4,7 +4,7 @@ This is the **single source of truth** for every implementer. Research lives in
Language: player-facing text is **Simplified Chinese** by default, with an English switch since 0.2.0 (§25.2, docs/I18N.md: UI strings through `t('中文')`, game texts from the official Chinese data or the official EN client's). Code, comments and identifiers are English. Language: player-facing text is **Simplified Chinese** by default, with an English switch since 0.2.0 (§25.2, docs/I18N.md: UI strings through `t('中文')`, game texts from the official Chinese data or the official EN client's). Code, comments and identifiers are English.
Versions: the first public release was **0.1.0** (2026-10-02, the state of §0–§20.15); the releases after it add the player feedback and GitHub reports — 0.1.1 §21, 0.1.2 §22, 0.1.3 §23, 0.1.4 §24 — and **0.2.0** (2026-10-07; `CHANGELOG.md`) the maintainability refactor, two languages, 补位, 自选编队 and their fidelity work — §25 — and **0.2.1** (2026-10-07; `package.json`, `shared/constants.js APP_VERSION`) the 联防 battlefield restored, full potential and the GitHub fixes after it — §26. The 0.2.2 dev line (`package.json`, `shared/constants.js APP_VERSION`: `0.2.2-dev`) adds §27 and is the state described by this document. The labels v1 / v2 / v2.1–v2.5.2 in §0, §14–§20 and in the BALANCE / SIM comparisons name the design generations and the private playtest builds that came before it; they are kept as history. Versions: the first public release was **0.1.0** (2026-10-02, the state of §0–§20.15); the releases after it add the player feedback and GitHub reports — 0.1.1 §21, 0.1.2 §22, 0.1.3 §23, 0.1.4 §24 — and **0.2.0** (2026-10-07; `CHANGELOG.md`) the maintainability refactor, two languages, 补位, 自选编队 and their fidelity work — §25 — **0.2.1** (2026-10-07) the 联防 battlefield restored, full potential and the GitHub fixes after it — §26 — and **0.2.2** (2026-10-09; `package.json`, `shared/constants.js APP_VERSION`) per-operator 潜能 / 练度, Japanese voices, the statistics page, 失衡, whole-frame attack timing and the GitHub fixes after 0.2.1 — §27, the state described by this document. The labels v1 / v2 / v2.1–v2.5.2 in §0, §14–§20 and in the BALANCE / SIM comparisons name the design generations and the private playtest builds that came before it; they are kept as history.
--- ---
@@ -33,4 +33,4 @@ normative lines it rewrote).
| §24 | [history/0.1.4.md](history/0.1.4.md) | 0.1.4 — community reports after 0.1.3 | | §24 | [history/0.1.4.md](history/0.1.4.md) | 0.1.4 — community reports after 0.1.3 |
| §25 | [history/0.2.0.md](history/0.2.0.md) | 0.2.0 | | §25 | [history/0.2.0.md](history/0.2.0.md) | 0.2.0 |
| §26 | [history/0.2.1.md](history/0.2.1.md) | 0.2.1 — after the 0.2.0 release | | §26 | [history/0.2.1.md](history/0.2.1.md) | 0.2.1 — after the 0.2.0 release |
| §27 | [history/0.2.2.md](history/0.2.2.md) | 0.2.2 — after the 0.2.1 release | | §27 | [history/0.2.2.md](history/0.2.2.md) | 0.2.2 — after the 0.2.1 release (2026-10-09) |
+1 -1
View File
@@ -4,7 +4,7 @@ Part of [DESIGN.md](../DESIGN.md) (the index; section numbers are global).
## 27. 0.2.2 — after the 0.2.1 release ## 27. 0.2.2 — after the 0.2.1 release
0.2.2 is built on `feedback7`, branched from the 0.2.1 release (tag v0.2.1) and marked `0.2.2-dev` until it ships. Its 0.2.2 is built on `feedback7`, branched from the 0.2.1 release (tag v0.2.1) and marked `0.2.2-dev` until it shipped (2026-10-09). Its
workstreams branched off it as `fb7-*` (some carried out by Grok coding runs on statically reviewed pull requests), each workstreams branched off it as `fb7-*` (some carried out by Grok coding runs on statically reviewed pull requests), each
reviewed with an interaction pass before it was merged with its golden scenarios named; where a merge moved a scenario reviewed with an interaction pass before it was merged with its golden scenarios named; where a merge moved a scenario
neither side moved alone, the merge commit explains the interaction. Each rule was checked against the official data and neither side moved alone, the merge commit explains the interaction. Each rule was checked against the official data and
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "stronghold-protocol-alliance", "name": "stronghold-protocol-alliance",
"version": "0.2.2-dev", "version": "0.2.2",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "stronghold-protocol-alliance", "name": "stronghold-protocol-alliance",
"version": "0.2.2-dev", "version": "0.2.2",
"hasInstallScript": true, "hasInstallScript": true,
"license": "GPL-3.0-or-later", "license": "GPL-3.0-or-later",
"dependencies": { "dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "stronghold-protocol-alliance", "name": "stronghold-protocol-alliance",
"version": "0.2.2-dev", "version": "0.2.2",
"private": true, "private": true,
"description": "明日方舟「卫戍协议:盟约」非官方同人联机网页复刻(1–4 人合作,Node.js 服务器 + 浏览器客户端)", "description": "明日方舟「卫戍协议:盟约」非官方同人联机网页复刻(1–4 人合作,Node.js 服务器 + 浏览器客户端)",
"license": "GPL-3.0-or-later", "license": "GPL-3.0-or-later",
+1 -1
View File
@@ -5,7 +5,7 @@ import { N_ } from './i18n.js';
export const PROTOCOL_VERSION = 1; export const PROTOCOL_VERSION = 1;
/** Release version shown to players (title screen, server banner, /healthz). Kept equal to package.json "version" /** Release version shown to players (title screen, server banner, /healthz). Kept equal to package.json "version"
* (test/version.test.js); PROTOCOL_VERSION above is the separate wire-format number. */ * (test/version.test.js); PROTOCOL_VERSION above is the separate wire-format number. */
export const APP_VERSION = '0.2.2-dev'; export const APP_VERSION = '0.2.2';
/** A development build (the public `dev` branch): the title screen, the boot banner and the README say so, and /** A development build (the public `dev` branch): the title screen, the boot banner and the README say so, and
* tools/package.mjs refuses to build a release zip from it without --allow-dev. */ * tools/package.mjs refuses to build a release zip from it without --allow-dev. */
export const DEV_BUILD = /-dev$/.test(APP_VERSION); export const DEV_BUILD = /-dev$/.test(APP_VERSION);