From 62eb113419123d9a3a63606107bbf85230c5dd2f Mon Sep 17 00:00:00 2001 From: sganggs Date: Fri, 9 Oct 2026 03:09:33 +0800 Subject: [PATCH] =?UTF-8?q?feedback7:=20version=200.2.2=20=E2=80=94=20pack?= =?UTF-8?q?age.json=20/=20package-lock.json=20/=20APP=5FVERSION=20(DEV=5FB?= =?UTF-8?q?UILD=20turns=20false),=20README=20release=20form,=20CHANGELOG?= =?UTF-8?q?=200.2.2=20=E2=80=94=202026-10-09,=20DESIGN=20versions=20line?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 114 ++++++++++++++++++++++++++++++++++++++++++ README.md | 9 +--- docs/DESIGN.md | 4 +- docs/history/0.2.2.md | 2 +- package-lock.json | 4 +- package.json | 2 +- shared/constants.js | 2 +- 7 files changed, 123 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61814704..f285a80f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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.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))。 diff --git a/README.md b/README.md index 58f6ca1a..f5a47641 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,8 @@ # 卫戍协议:盟约 · 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 人联机合作。 -![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) ![node](https://img.shields.io/badge/node-22%20%7C%2024-339933) @@ -42,7 +37,7 @@ English summary: [below](#english). - **独立模拟**(单人)与**同盟模拟**(1–4 人**合作**,没有 PvP;空位可以加 AI 队友)。 - 服务器是一个 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 里反馈。 ## 功能一览 diff --git a/docs/DESIGN.md b/docs/DESIGN.md index 62f5d4b4..683a09d9 100644 --- a/docs/DESIGN.md +++ b/docs/DESIGN.md @@ -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. -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 | | §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 | -| §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) | diff --git a/docs/history/0.2.2.md b/docs/history/0.2.2.md index 1a065c8d..483d4fe7 100644 --- a/docs/history/0.2.2.md +++ b/docs/history/0.2.2.md @@ -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 -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 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 diff --git a/package-lock.json b/package-lock.json index 03c963cb..b1d317fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "stronghold-protocol-alliance", - "version": "0.2.2-dev", + "version": "0.2.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "stronghold-protocol-alliance", - "version": "0.2.2-dev", + "version": "0.2.2", "hasInstallScript": true, "license": "GPL-3.0-or-later", "dependencies": { diff --git a/package.json b/package.json index aa34bb0f..f66f61e7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "stronghold-protocol-alliance", - "version": "0.2.2-dev", + "version": "0.2.2", "private": true, "description": "明日方舟「卫戍协议:盟约」非官方同人联机网页复刻(1–4 人合作,Node.js 服务器 + 浏览器客户端)", "license": "GPL-3.0-or-later", diff --git a/shared/constants.js b/shared/constants.js index b6375ee1..aa7ac5fe 100644 --- a/shared/constants.js +++ b/shared/constants.js @@ -5,7 +5,7 @@ import { N_ } from './i18n.js'; export const PROTOCOL_VERSION = 1; /** 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. */ -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 * tools/package.mjs refuses to build a release zip from it without --allow-dev. */ export const DEV_BUILD = /-dev$/.test(APP_VERSION);