Repository navigation
Releases
Releases · Cloudnyco/Duel-Channel
争锋频道 v0.2.1
- 敌人攻击特效进一步还原:
- 特效自带的动画(
Animator片段)按原数据播放:刀光、法阵、剑影等网格的移动、旋转、缩放、显隐,以及颜色、透明度、溶解进度和贴图滚动随时间的变化。之前这些网格在起手 / 命中特效里不绘制,有动画的部分只按静止状态绘制。 - 起手特效的时机改用特效自带的延迟(
FxDelay,62 个起手特效有):攻击动画开始时生成,等到出手前后播放,与攻击动画命中帧的时间对得上(64 组里 45 组相差不到 0.15 秒)。之前按粒子延迟推断。特效也随攻击者加快的攻击动画加快,上限按特效自己的设置(2 倍)。 - 扭曲类着色器(Disturb 系列)的贴图扰动、乘色贴图、UV 旋转,以及特效脚本的贴图滚动(
FxUVTweener)都按原规则绘制;普通贴片粒子上的溶解、平铺和滚动也不再忽略。 - 粒子补上噪声扰动、子发射器(出生时)、继承速度、粒子拖尾(包括只显示拖尾的粒子系统)和碰撞平面(碎石落地弹起)。
- 特效素材从 1.59 MB 增加到 1.63 MB(brotli)。
- 特效自带的动画(
- 修复联机比赛开局不等待玩家连接:比赛创建后本应最多等 12 秒让所有座位连上,实际上没有连上的座位直接被跳过。连接慢于开场画面(STARTING SOON,4.5 秒)的玩家会错过载入等待;第一轮开始时若还没有任何人连上,比赛会直接结束。现在会等待尚未连上的座位,主动离开的不等。
- 支持 arm64:
- 服务端镜像同时提供
linux/amd64和linux/arm64,树莓派 4 / 5(64 位系统)、ARM 云服务器和 Apple 芯片的 Mac 可以直接docker run,之前只有 amd64。页面和依赖在构建机上做一次,镜像本身的那一步不执行命令,跨架构构建不需要模拟器。 - CI 增加 Linux arm64、Windows arm64 和 macOS(Apple 芯片)的测试与开服脚本检查,Docker 镜像在 x64 和 arm64 上分别构建、启动并检查;发布镜像后也在两种机器上各拉取运行一次。
- 服务端镜像同时提供
争锋频道 v0.2.0
此版本为大版本更新。
- 敌人的攻击特效改用游戏原版特效:攻击时攻击者身上的起手特效(刀光、枪口火光等),远程攻击的弹道(投射物预制体
_mainEffect指定的拖尾特效,按预制体的抛物线高度飞行),命中时目标身上的命中特效(投射物的_effectsWhenHit,近战按特效名对应)。之前所有敌人共用两套通用的物理 / 法术火花。共 97 种敌人用自己的特效;其余 16 种基础近战敌人(源石虫、士兵等)的特效写在敌人预制体里,现有素材中没有,这些敌人改用游戏的通用命中特效common_enemy_hit_01(法术common_magic_hit_01)。- 粒子按客户端粒子系统的数据模拟(发射、形状、速度、颜色 / 大小 / 旋转随生命周期变化、序列帧、拖尾、网格粒子),颜色与混合按游戏粒子着色器的 GLES 程序计算,刀光等网格粒子的溶解与 UV 扫动用同样规则的 WebGL 着色器绘制。特效大小按模型比例换算,与模型的相对大小与游戏一致。
- 投射物本体(箭矢、弹丸等
MeshRenderer网格,含 Unity 内置的 Quad / Plane)随弹道绘制。由 Animator 驱动的节点动画还没有还原,起手 / 命中特效里受 Animator 控制的网格暂不绘制;特效素材约 1.5 MB(brotli),在游戏开始后单独下载,下载完成前使用通用火花。
- 场地装置(奇怪的装置):三期对战关卡里的障碍物和源石祭坛按关卡的随机组出现。每轮在该期的 a / b 两个关卡里随机取一个,装置和阵容一起抽取,押注时就摆在场上,效果见 MECHANICS.md「场地装置」。两者都用游戏自己的模型和贴图绘制。关卡里的另外三种装置——弩炮、解雇者清债程序、梅什科线圈——在现有素材里没有本体模型(线圈的预制体只有放电特效),暂不加入抽取(抽到它们的那一包视为没有装置),规则已经实现。
- 关卡数据合并 a / b 两个关卡:绿藤城 b 关卡另有 2 种敌人用 1 级数据(奔跑吧!躯壳!、标枪恐鱼)。原有 40 场黄金对局中 11 场阵容随之改变,2 场胜负改变;新增 41 场带装置的黄金对局。
- 表情面板:5 个主题(对战主题 12 个;愚人节阿米娅、维什戴尔、博士和源石虫各 6 个),每页 12 格,左右拖动或点页码翻页。
- 竞猜对决的纪录改为「最佳竞猜排名」(最新一期的
modeRecordDesc):模式卡片显示打出过的最好名次,之前显示的是选对轮数;纪录改为各模式分别保存(之前自娱自乐和礼物对决共用一个)。 - 背景音乐新增《ALL!》:设置里可以在《No Bet, No Life》和《ALL!》之间切换,选择保存在浏览器里;仍可播放本地文件。
- 敌人头像改为 WebP,素材包从 18.7 MB 减到 13.8 MB(brotli 后 12.7 → 9.1 MB)。
- 押注倒计时:数字和下方提示文字之间留出约 12 像素的间距(之前几乎贴在一起);闹钟只在最后 7 秒随倒计时变红出现并摇动(官方录像里白色倒计时时没有闹钟),之前整个押注期间一直在响。
- 防作弊与公平性:
- 每轮的战斗种子改为押注结束后才公布。开局只发阵容和承诺
sha256(种子:盐),押注结束时公布种子和盐,页面核对;阵容改用另一个独立的种子(之前种子随阵容下发,页面可以在押注前算出结果)。种子改用加密随机数。 - 暗选:押注的最后 7 秒按官方「下注时间即将结束……确定你的抉择!」实现,支持者名单收起,这时的选择押注结束后才公布(名单展开动画
battle_ui_secretbet_list_out)。押注期间阵容摆在替身场地上,开战时单位滑到真实位置。 - 知道结果的 NPC(你推的∩酱、抽中 30% 的默认 NPC、竞猜对决里选对 3 次后的 NPC)只在暗选时段选择,不能再被跟注;跟风型 NPC 依据进入暗选时公开的人数。
- 限流:对局连接和大厅连接的消息都有速率上限,持续刷消息的连接会被断开;每轮最多改选 12 次;同一地址每分钟最多输错 10 次房间邀请码;
/status不再向外公开房间邀请码。 - 公开匹配:同一浏览器只能占一个座位;同一地址的玩家分到不同的桌(反向代理后面设置
TRUST_PROXY=1,局域网活动可设置QUEUE_SAME_IP=1放开)。群组房间不受影响。 - 调试模式(
npm start -- --debug或DUEL_DEBUG=1):种子随阵容提前下发,供录制使用,页面会显示调试标记(网址带?debug的页面不显示,画面干净)。页面的调试接口window.__flow.dbg只在本地文件或网址带?debug时可用。
- 每轮的战斗种子改为押注结束后才公布。开局只发阵容和承诺
- 争锋频道三期混编:青草城、蜜果城、绿藤城的全部 113 种敌人(可出场 109 种),每一轮从三期的同号轮次中随机取一个,敌人池取三期中的最高权重,NPC 选边表与关卡规则合并。敌人数值按最新一期关卡引用的等级(绿藤城调整过的 7 种用 1 级)。
- 全部敌人的技能与天赋按 PRTS 争锋频道选手信息和争锋频道版本的数据实现(详见 MECHANICS.md「敌人的技能与天赋」):
- 通用机制:嘲讽等级选敌、增益与减益、元素损伤(灼燃、凋亡)、寒冷与冻结、抵抗、屏障(三倍数据,部分只挡法术)、物理闪避、方向弱点;
- 召唤与死亡效果(大喷蛛、重生术师、匪帮欢乐船、交通亭、高敏感积藏者的分裂),被「消灭」(“门”、变异食肉植物、极饿先锋);
- 持续施法与周期技能(镜子机关枪、凋零萨卡兹、点灯骑士、贝斯手与吉他手、神拳机甲、失业萨克斯手等)、地面效果(污染区、酒桶区域、落雷);
- 修正原有敌人:自爆冰虫的死亡效果是寒冷(PRTS),爆炸半径按 PRTS(1.25 / 1.65);庞贝的周期法术伤害改为 0.8 内出现敌人后才开始、半径 1.4;杰斯顿进入杀手形态时解放全场的禁锢选手。
- 巨型领袖改按实机:站在红门右侧的场内(客户端的巨型出生点;国际服录像),身体按 PRTS 的占位矩形(岁相 3.95 × 4.95,萨米的意志 2.95 × 2.95),地面单位不能进入、从边缘攻击;岁相受到来自上下两侧的伤害减半。血条改为客户端的巨型首领面板(屏幕顶部的纹章与长血条);阵容出现时播放入场动画。
- 碰撞改为柔和推开:每个单位每秒最多被推开 0.6 格,轻的让重的,离开出生列后不会再被挤回红蓝门(之前一次推开全部重叠,人多时最快每秒 15 格,常把单位挤进门里)。
- 蜜果城的奇袭选手:有队友掩护时不随队出场,按关卡参数的概率在战斗中整批空降到对手出生列,落地 5 秒加速并显示本方颜色的光圈。
- 绿藤城:巨型领袖岁相、“萨米的意志”(攻击全场,见下条);协同选手成组出场(侠客三人行、并驾骑士与凋零骑士、凯尔希与 Mon2tr),奎隆的惩五戒。
- 阵容按 PRTS 争锋频道分配规则生成:总费用逐点随机分给各兵种,每个兵种按「基础 + 附加 × (n − 1)」逐个派出,最后一名按满足度概率出击;双方不会出现相同兵种。单兵附加费用取自 PRTS(
data/sources/prts-extra-cost.json)。 - 场地:召唤、空降、下车的单位即时出现;范围攻击、地面效果、元素爆发、冰凌、龙息、旋风等效果;押注界面的敌人信息显示附加费用和协同 / 奇袭 / 巨型说明。
- 模拟的跨引擎一致性复验:1740 场对战(覆盖三期全部轮次版本)在 Node、Chrome、Firefox、WebKit 中逐位相同。黄金对局随规则更新。
- 数据与模型改为直接从公开仓库生成(
node tools/build-data.mjs):ArknightsGameData 的数据表、Ark-Models 的敌人模型、ArknightsGameResource 的头像;骨骼解析、动画角色识别和模型缩放表移植自 Stronghold Protocol(GPL-3.0-or-later)。原有 14 种敌人的数值、伤害类型、缩放、攻击动画与命中帧和动画角色与之前完全一致。 - 敌人模型按需加载:不再放进素材包,某轮阵容用到时才下载(单文件页面仍然内联全部模型)。
- 对战计时:倒计时加上容差,攻击间隔不再因浮点误差晚一步(之前 3.5 / 4 / 7 秒的攻击每次都晚 1/30 秒,约占全部连续攻击的一半)。黄金对局随之更新;540 场对战中 23 场胜负改变。
- 模拟的跨引擎一致性:ESLint 禁止
shared/sim.js使用各引擎结果不同的数学函数;540 场对战在 Node、Chrome、Firefox、WebKit 中逐位相同。 - 场地:倒下并淡出的单位不再每帧更新骨骼动画(约占一场对战单位帧数的 40%)。
- 竞猜对决的三名领袖按 PRTS 争锋频道领袖说明和争锋频道版本的数据实现:
- 自在:纬地经天、破桎而出与屏障、第二形态;
- 依然“狼之主”:减伤、溶血骇惧、第二形态;
- 火与钢:残血强化与减伤、冲锋、重生。
场地上显示十字法术、屏障、恐惧、无敌和冲锋效果。按 PRTS 的阵容分配,青草城版第 5 轮领袖一方的胜率为 60%–82%。
- 竞猜对决(页面):模式卡解锁,匹配与群组(30 人房间按官方网格排列并可滚动)、押注界面(剩余玩家、「支持这边」、观众保护提示,淘汰后观战)、回合结束(猜对 / 观众保护抵消 / 已淘汰)、全场一个榜的阶段结算、最终结算(竞猜轮次、名次可并列、竞猜对决的评语与奖励)。联机和单机(28 名 NPC 观众)都可以玩。
- 竞猜对决的阶段结算按官方
stand_rank_state实现:全场 30 人在同一个榜上(官方网格:10 列,三行),卡片显示自己、观众保护(持有 / 破碎)、本轮选对、淘汰与冠军。 - 群组房间的成员卡片改按官方网格排列(164 × 210,间距 16),人多时可以滚动。
- 竞猜对决(服务端):最多 30 人的匹配与群组。每轮只选边,选错淘汰;每人一次观众保护,第 1–5 轮内免一次淘汰;不限轮数,只剩 1 人或全员淘汰时结束,按选对的轮数排名;NPC 补位且最多选对 3 次。规则放在
shared/sim.js,页面接入时共用。机器人支持--mode stand和--room new。页面尚未接入。 - 对局的座位列表只在入场时带头像,之后每轮的结果不再重复发送,30 人时每轮少发数 MB。
- 联机只需一个端口:对局连接改由网关转发给对战实例(
/match),实例只监听本机,防火墙和端口映射只需放行网关端口(默认 8600)。页面通过 HTTPS 打开时自动改用wss://,可以放在反向代理或内网穿透后面。 - 错误报告:页面捕获所有未处理的错误,致命错误弹出错误面板,其余在齿轮旁提示;报告包含版本(提交号)、浏览器与显卡、对局状态、每轮的阵容与种子、错误与最近的操作记录。可以复制、打开预先填好的 GitHub Issue,或在联机时发送给服务器主机(
logs/reports/);「设置 → 反馈问题」随时可用,设置底部显示版本。 - 服务端:错误记录到
logs/server-errors.log并在/status中列出;网关或实例崩溃后由启动器自动重启(退避,一分钟内超过 5 次放弃)。 - 断线重连:对局中连接中断时显示「等待自己重新联网...」,30 秒内自动重连,实例补发错过的消息,比赛从原处继续;大厅和房间 45 秒内重连会回到原来的房间或队列;刷新页面后再进入会回到正在进行的比赛。
- 战斗播放随战斗时间加快:前 15 秒 1 倍,45 秒 2 倍,90 秒起 3 倍(按玩家描述实现,见 MECHANICS.md);只影响播放,不影响结果。
- 素材包收录进仓库(
assets/),clone 后直接运行一键开服脚本即可;Release 的源码包随之包含素材包。两款显示字体不收录,构建时从公开的字体仓库下载。 - Docker 镜像在构建时用仓库素材包生成页面,开箱即玩。
- 一键开服:Windows 双击
start.cmd,Linux / macOS 运行./start.sh(逻辑在tools/host.mjs)。脚本会安装依赖、按需构建页面、询问是否开放给局域网、检查端口,然后打印可以分享的地址和需要放行的防火墙端口,并打开浏览器。 - 页面加载:网关提供的页面拆成代码(压缩后约 0.3 MB)和按内容命名的素材包(压缩后约 11 MB),都预先压缩(brotli / gzip)并带 ETag。素材包可以长期缓存:第二次打开基本秒开,更新代码也不用重新下载素材。开始页会显示素材包的下载进度。单机用的单文件
duel-flow.html不变。
争锋频道 v0.1.0
首个版本。
- 礼物对决完整流程:开始界面、浏览器、选择赛事、匹配(NPC 补位)与群组房间、即将开始、加载、10 轮押注与对战、计分板、最终结算。
- 官方数据:活动配置、关卡规则、敌人属性与技能、图鉴能力由 ArknightsGameData 生成;安全区来自客户端环境预制体。
- 确定性战斗模拟,页面与服务端共用;40 场黄金对局锁定结果。
- 联机服务器:网关 + 多实例、匹配队列、6 位邀请码房间、机器人、实时延迟、自定义头像。
- 界面:UGUI 重建(九宫格、模板遮罩、形状着色器、旧版动画、UI 粒子、UI Spine),方块溶解转场,齿轮设置面板。
- 表情:押注和对战顶栏的表情面板与屏蔽开关,官方表情主题的 12 个表情;表情以弹幕形式从画面上方飘落(官方的 9 条轨道、缓动曲线与缩放);联机时由实例转发(校验表情与 1 秒间隔),单机时 NPC 观众也会发表情。
- 最终结算:排名、个人数据与获得的争锋大礼花(官方公式);本演示没有的每日活跃与青草计划等级不显示。
- 场地:官方地块图集、出入口特效、安全区边界线、buff / 晕眩 / 冻结效果、官方样式血条。
- CI(Ubuntu / Windows × Node 22 / 24、lint、Docker 构建)、Release 与镜像发布。