sganggs
558fcedf90
feedback5 K1: Sharp's stand-in kit (char_609_acguad, for 忍冬 / 银灰 / 百炼嘉维尔 / 隐德来希 / 归溟幽灵鲨 / 佩佩) — S1 快刀 double hits, S2 亮剑 DEF to 0 / max HP / 160-180 % attacks, S3 力战不竭 layers (one before each attack, reset on a new target) and HP never below 1, both talents, DRE-X 115 % on blocked enemies
2026-10-05 18:23:51 +08:00
sganggs
ed2b679f83
feedback5 WD: the sim fields a 补位 stand-in — getChess(id, { standIn: true }) over data/backups.json, PlayerBattleInput standIn: true, kits by the stand-in's charId (never the replaced operator's), kits/ops/standin-<codename>.js registry, harness standIn
...
- simdata: DataSource keeps `backups` (rawBackups follows the fallback chain); getStandIn = shared/standIn.js
standInRecord normalised (the chess's ids / bonds / 特质 / tier, the stand-in's body, def.standInFor); a PRESET / DIY
chess or a source without backups fields itself; the per-battle view maps id-only lookups.
- spec.js keeps `standIn` only when exactly true (never on a token); Battle passes it to getChess; syncUnitLoadout
carries it; UnitInfo `standInFor`.
- content/index.js kitOf: a stand-in's kit is KITS[def.charId] only; no default skill (a stand-in kit writes `skills`);
without a kit the generic kit plus genericTalents. kits/index.js STANDIN_KIT_FILES / STANDIN_KITS, merged after the
tier groups (old keys keep their order; golden unchanged).
- server/data.js and tools/setup.mjs expect backups.json.
- test/content/standin.test.js: the plumbing and the eight 预备干员 on all 28 chess records they replace.
2026-10-05 17:44:58 +08:00
sganggs
a325fb41ad
feedback5 WD: generic kit — an ON_DEPLOY passive without a duration key lasts the skill's own duration from every deployment (一击即退, 10 s), 冲锋号令 gives its DP at full SP, genericTalents for the stand-ins without a kit
...
Every pool skill these rules meet already has a hand-authored spec (checked over all 266 chess records x skills and the
22 tokens), so only the 补位 stand-ins change; golden fast and full unchanged.
2026-10-05 17:44:33 +08:00
sganggs
6a7a23765a
feedback5: merge R4 — operator kits one file per chess (kits/ops/*, kits/shared/*, kits/index.js in the old registry order) + kits/README.md with the fidelity checklist; golden unchanged
...
# Conflicts:
# .git-blame-ignore-revs
# test/docs-consistency.test.js
2026-10-05 16:30:29 +08:00
sganggs
920624e743
feedback5 R4: kits/README.md — how a kit file is built, what it may use (shared helpers, the battle API of docs/SIM.md), naming, registration, tests, the fidelity rule and a ten-item fidelity checklist per operator with example kits and tests (for the stand-ins, self-select 6★ operators and GitHub #136 ); test/content/kits_layout.test.js checks that every ops/ file is listed in kits/index.js, named after its chess id and charId, registers exactly its kit, and imports nothing Node-only or server-only and no clock / Math.random
2026-10-05 16:26:29 +08:00
sganggs
5024559028
feedback5 R3: docs and comments follow the split — DESIGN §2 and SIM.md list server/sim/battle/ and content/enemies/, SIM.md and research 08 name the new homes (archetypes.js frontGuard / ep / dmgZone / pollution, helpers.js areaAllies / zone / setForm, fly.js kitShell), code comments that pointed at moved code say where it lives now (enemies.js header, battle/blocking.js, battle/queries.js, sim constants / snapshot / units / ai / targeting / devices / bosses, shared constants / protocol, render style / interp); .git-blame-ignore-revs lists the two pure-move commits
2026-10-05 16:20:06 +08:00
sganggs
37b1c0a644
feedback5 R4: paths after the kit split — DESIGN §7 and SIM.md (layout, §7.2 kit contract, kit citations), research 09, code comments (content/generic, tokens, items/battle, shared/loadoutRecord, render fx / demo), test comments, and the kits' own comments that named tierN.js; DESIGN §17–§23 history citations are left as they are
2026-10-05 16:18:58 +08:00
sganggs
560328cacc
feedback5 R3: content/enemies.js → content/enemies/*.js, a pure move — every declaration verbatim with its comments: helpers.js (shared constants, per-battle state, ability bookkeeping, selection / damage helpers), archetypes.js (ability archetypes and the archetype kits reused by several keys), one file per kit family with its kit-only constants and its part of KITS (invisible, times, element, dot, reflection, fly, special, leaders — the kitLeaderMisc entries that closed the SPECIAL section open the leaders part, so the order stands); enemies.js keeps the header, the dispatch hooks and dispatchers, STATS_ONLY and the chalice share, builds KITS from the parts (188 keys, same order, same functions) and re-exports all 43 names it exported before. docs-consistency pins kitMace's inR in enemies/leaders.js
2026-10-05 16:16:37 +08:00
sganggs
8924007e55
feedback5 R4: content/index.js takes the kit registry from kits/index.js (one guarded import per kit file) instead of loading the six tier shims; KITS is the same object kits/index.js exports — same keys, order and builders, golden unchanged
2026-10-05 16:14:39 +08:00
sganggs
1169102d46
feedback5 R4: one file per operator kit — kits/tier1..6.js split into kits/ops/<chessId>-<codename>.js (129 kits), kits/shared/tier1..6.js (the helpers two or more kits of a tier use, and each tier's header notes) and kits/index.js (the registry, same keys in the same order); the tier files become re-export shims
...
Pure move: every line of a kit, of a helper and of the tier headers is copied verbatim (only the headers' first
line names the new file); a helper used by one kit moved into that kit's file. Glue only: the generated imports,
`export default { … }` around each registry entry, `export { … }` lists in shared/tier2..6.js, and tier4's
`(bb, chess, def)` default-argument wrapper as shared/tier4.js `withDefaults` (applied in each tier-4 kit file).
kits/index.js loads every kit file with a guarded dynamic import (browser-safe, no directory listing); tierN.js
re-export the tier registry (TIER_KITS) and their old named exports (tier1 helpers + tinmanKit, tier6
PITHST_ELEMENTS). The merged registry, every tier default and named export have the same keys, order, frozenness
and function sources as before. test/docs-consistency.test.js reads the moved code at its new paths.
Golden: GOLDEN_FULL=1 node --test test/golden.test.js unchanged.
2026-10-05 16:13:56 +08:00
sganggs
723755e3a5
feedback4: 引星棘刺 S1 度算浪波 (an AUTO skill thrown at an ally) fires as soon as its SP is full, with no enemy around (GitHub #124 )
2026-10-05 14:37:23 +08:00
shanzhaikabi
763e224b8d
A 咒愈师's trait heals on every damage she deals; 收割者 / 武者 heal on their skill hits too ( #115 )
...
The official trait buffs fire on output damage, not only on a normal attack (buff_template_data vendla_tr / reed2_tr / titi_tr ON_AFTER_OUTPUT_DAMAGE; etlchi_trait etc. ON_OUTPUT_DAMAGE, attackType BUFF filtered for 隐德来希). Skill damage now heals: 缇缇's 凝固的时光 ticks, 焰影苇草 S2 fireballs and 刺玫 S2's counter heal the one ally the skill names (DamageInfo.traitAlly); 隐德来希's S2 blood sickles heal her, capped at her block count per instant. PRTS 分支特性信息 §咒愈师: the heal depends only on the damage value. Contributed by @shanzhaikabi.
2026-10-05 14:20:59 +08:00
sganggs
1005754bf3
feedback3: merge WH — ground operators are melee-position, 叙拉古 rolls on every normal hit, off bonds show as disabled, prep-end items merge next prep
2026-10-04 21:26:10 +08:00
sganggs
a3ebca0ddf
feedback3: merge WI — 乌尔比安 S3 move and return are free redeploys, 波登可's spore radius is 0.9, 琳琅诗怀雅 S3 shoots at 10 coins when an enemy is in her attack range
2026-10-04 21:25:44 +08:00
sganggs
3500ef2d32
feedback3: merge WG — nest enemies pulse instead of attacking, children carry no bounty, a 隐匿 blocker is skipped by areas, stacked cold freezes for the longer duration
2026-10-04 21:25:40 +08:00
sganggs
627bb6d4c1
feedback3 WI: 琳琅诗怀雅 S3 shoots at 10 coins only when an enemy is in her attack range
2026-10-04 21:11:41 +08:00
sganggs
ab56ea01b1
feedback3 WI: 琳琅诗怀雅 S3 shoots her coins when the purse reaches 10
2026-10-04 21:05:23 +08:00
sganggs
473b8eb5b0
feedback3 WI: 琳琅诗怀雅 S3 does not close itself when her coins are full (GitHub #89 )
2026-10-04 20:35:50 +08:00
sganggs
9aaba7708c
feedback3 WH: an item gained as prep ends waits in hand and merges at the next prep start
2026-10-04 20:34:03 +08:00
sganggs
f9e2c49954
feedback3 WI: 波登可's spore cloud radius is 0.9, as the PRTS note says
2026-10-04 20:33:54 +08:00
sganggs
13e71fccba
feedback3 WG: a 隐匿 blocker is hit only by the blocked enemy's attacks, not by its areas, zones or auras (GitHub #97 )
2026-10-04 20:33:35 +08:00
sganggs
819a5ad4ea
feedback3 WI: 乌尔比安 S3 【移动】 and 【返回】 are free redeploys, and the return clears his SP
2026-10-04 20:33:29 +08:00
sganggs
bc721b4981
feedback3 WF: a 联防 阿戈尔 who enters down keeps the revive slot their position earned (the forced exit is not a 击倒); helper order ranks the layers the combat reached; a 替身 switch is 禁疗, so a self-heal does not land
2026-10-04 20:27:14 +08:00
sganggs
95b8a24d28
feedback3 WG: a split or summoned child does not carry the kill bounty, and 联防 pays a bounty card only when the leaked enemy is that card's enemy
2026-10-04 20:15:12 +08:00
sganggs
bedeac6f52
feedback3 WG: 深溟巢涌者 and 富营养的巢涌者 do not attack — they walk while a 1 s aura pulse hits allies in range, and the pulse pauses while hidden; a revealed unblocked 节日爵士乐手 only attacks what it blocks
...
The same pass also stops 漩涡形态 attacking and dealing spin damage while it cannot attack, stops 拥霜羽兽 attacking after it loses its egg (and at flyers), and disarms 碎铳之簧 for its dash at the official 0.35 trample radius.
2026-10-04 20:12:59 +08:00
sganggs
e444bc3c3f
feedback3 WH: 叙拉古 6's true-damage chance rolls on every 普通伤害 hit of a member, not only on normal attacks — 荒芜拉普兰德's S3 drone bites, 德克萨斯 剑雨 and other skill hits now roll; 溅射, 持续 (the S3 per-second hit), 附加 and item procs still do not (community report 「叙拉古盟约真伤概率数值没有正确递增成长」, GitHub #79 )
2026-10-04 20:08:01 +08:00
sganggs
d77148962b
feedback3 WH: 「地面干员」 means a melee-position operator on any tile — 不屈 (both lines), the 战栗维式重锤 proc and 休谟斯 回收利用 no longer read the tile, so a ranged operator on a melee tile gets none of them and 歌蕾蒂娅 on a 高台 gets all (community report 「不屈盟约效果高台干员也错误的吃到了」)
2026-10-04 20:08:01 +08:00
sganggs
ca3d0572ad
feedback3 WF: the initial deployment goes by column — the left column first, top to bottom within a column (PRTS 从上到下>从左到右 read as a scan, the 阿戈尔 devour's order; mirrored boss side from its own left); a merge's elite among several deployed copies follows it (server and client); tests whose target was the latest deployed keep it
2026-10-04 19:50:42 +08:00
sganggs
21eb496e02
feedback3 WF: the 阿戈尔 5-tier revives go to the first 3 members by position (the devour / deployment order, fixed at battle start), each on its own first knock-out — no longer to the first 3 knocked out, which the devour's food spent at t = 0 (community report #24 )
2026-10-04 19:25:00 +08:00
sganggs
2729a2137e
feedback3: merge W3B — 碎骨's grenade (community report #14 ) and the enemy numbers from the 0.1.2 review against PRTS (扎罗, 复仇者, 庞贝, 巨大的丑东西, 墓碑, 烹泉, 集团军重型火炮, 清明, 重弩突袭者); 圣聆初雪 S2 freezes the blue gate ( #32 ); 琳琅诗怀雅 S1 heals without an attack (owner's decision, #5 )
2026-10-04 18:19:16 +08:00
sganggs
7d3d7318d5
feedback3 WB: 琳琅诗怀雅 S1 heals an injured ally beside her without needing an attack or an enemy, at most once per attack cycle (owner's decision 2026-10-04, community report #5 )
2026-10-04 18:18:18 +08:00
sganggs
d1a2696e44
feedback3 WB: a 溶血骇惧 ends when its 扎罗 leaks or leaves the field (no more drain), 烹泉 / 沏虹's attack splash can be dodged (法术普通伤害), 集团军重型火炮's 燃烧区域 spares flying allies (不可对空) — fixes from the review
2026-10-04 18:14:12 +08:00
sganggs
dcc44712ad
feedback3: merge W3A — 联防 carries HP ratio and SP only (GitHub #82 ); down operators take part in the 联防 devour (players' reports, owner's decision); 不屈 on 撤退 / 替身 switches; SP recovers during stun (洛洛 S2)
2026-10-04 17:57:44 +08:00
sganggs
dff0676dee
feedback3 W3A: a 联防 operator down since its own combat resolves its own devour marks (the unit in front takes the 物理流失, a 5-tier revive is spent); the carried SP is set again after the deploy hook, so 独行 / 黄沙罗盘 no longer add to it (review fixes)
2026-10-04 17:56:59 +08:00
sganggs
3e9f81fcbf
feedback3 WB: 圣聆初雪 S2 freezes the protection point (the blue gate) once it holds 5 snow layers, deploy attributes ignored, and no other tile; the frozen gate shows as an ice diamond instead of her own face (PRTS 备注, community report #32 )
2026-10-04 17:38:07 +08:00
sganggs
e53a181ae9
feedback3 WB: 碎骨's unblocked grenade deals 26 % ATK to its target and the 8 tiles around it, DEF −50 % for 5 s (PRTS 碎骨, community report #14 ); 扎罗, “复仇者”, “庞贝”, “巨大的丑东西”, “墓碑”, 烹泉 / 沏虹, 集团军重型火炮, 清明 / 堂皇 and 重弩突袭者 follow their PRTS numbers (splash attacks, radii, durations, 溶血骇惧's loss and 静默)
2026-10-04 17:38:07 +08:00
sganggs
57060ed054
feedback3 WA: 不屈 also rolls on a 撤退 (retreat, 行商's withdrawal) and on a 傀儡师 替身 switch — a switch zeroes her next deployment; no roll on the 突袭 jump or the 联防 forced exit (PRTS 修正, owner's decision 2026-10-04)
2026-10-04 17:27:11 +08:00
sganggs
0e2133de69
feedback3 WA: 联防 阿戈尔 devour counts the operators down since their own combat — they mark and are marked as if they stood (base ATK / block gains), then stay forced out (per players' reports, owner's decision 2026-10-04)
2026-10-04 17:27:11 +08:00
sganggs
6bf03d07d5
feedback3 WC: 远见's −1 price has no floor but 0 — 至简 (price 1) costs 0 at 150 layers, a 远见 operator at 1 costs 0 at 80
2026-10-04 17:09:30 +08:00
sganggs
130266553d
feedback2 WK: a ranged enemy's attack stand holds only its walking — route WAIT legs keep running and DISAPPEAR / APPEAR legs still happen, hiding ends the stand; the [ASSUMED] form-clip note names 扎罗 and 特战术师; 暴鸰's hover comment (review of GitHub #58 )
2026-10-04 03:23:23 +08:00
sganggs
42d9c3744b
feedback2 WK: an operator forced off the field (史尔特尔's 余烬, 耀骑士临光 S2, 骑士戒律 + 竞技旗, 伊内丝 S3, a 商人 that cannot pay) lies down on its tile and redeploys there like a knocked-out one, still no kill (PRTS 卫戍协议/帮助; GitHub #60 )
2026-10-04 02:55:48 +08:00
sganggs
0623336f30
feedback2 WK: an unblocked ranged enemy stands for each attack's clip (its wind-up and the rest of the clip), then walks on; build-data copies each enemy's attack clip into enemies.json attackAnim (GitHub #58 )
2026-10-04 02:49:25 +08:00
sganggs
50c9b5b1b6
feedback2: merge WH — 荒芜拉普兰德 S3's drones attack (GitHub #32 item 7); 余 S2 pulls leaders, no pull effect when nobody moves, and casts with an enemy on its x-1 (owner's deliberate deviation; GitHub #32 item 1)
...
# Conflicts:
# data/chess.json
# docs/PLAYING.md
2026-10-04 02:21:47 +08:00
sganggs
a168c99e6a
feedback2: merge WJ — enemy splash, blasts, area skills, zones and auras skip a 隐匿 operator that does not block them; 迷彩 is still hit by splash (GitHub #32 item 6)
...
# Conflicts:
# docs/DESIGN.md
# docs/SIM.md
# server/sim/content/enemies.js
2026-10-04 02:21:15 +08:00
sganggs
79bbd51525
feedback2: WG review — a chain healer's bounces skip 禁疗 / noHeal units (史尔特尔 in 余烬); PLAYING and DESIGN say 隐匿 returns 3 s after a block; 山海众头目's mark comment
2026-10-04 02:19:40 +08:00
sganggs
e0b51e0310
feedback2: merge WG — 史尔特尔's 余烬 brings 禁疗 (GitHub #52 ); enemies re-enter 隐匿 3 s after a block ends, a blocked 深池逐火's ember stays visible ~2 s (GitHub #43 )
...
# Conflicts:
# public/js/render/style.js
# public/js/render/textures.js
2026-10-04 02:18:01 +08:00
sganggs
5f83d30cd1
feedback2: merge GitHub master (PR #48 : 要塞 cannot hit air units — issue #35 ; 莫斯提马's slow shows its status icon — issue #16 )
...
# Conflicts:
# data/chess.json
2026-10-04 02:17:02 +08:00
Y-PaP-Y
052e906753
要塞分支不再攻击空中单位;莫斯提马的减速显示状态图标 ( #48 )
...
要塞分支(灰毫 chess_char_2_18、号角 chess_char_5_08,普通与精锐)按官方不能攻击空中单位:build-data 不再把 fortress 归为可对空,重新生成 data/chess.json(只改这 4 条记录的 canHitFly),DESIGN §21.29 的技能释放调整保持不变。莫斯提马天赋的减速补上可见的减速状态图标(减速本身 0.1.1 已生效)。fix #35
2026-10-04 02:16:20 +08:00
sganggs
275e1c5711
feedback2 WJ: areaAllies' comment — 迷彩 is not checked, a locked target goes through targetAndArea
2026-10-04 00:42:46 +08:00
sganggs
b0c98fea31
feedback2 WJ: docs — buff auras and 蚀裂's 毒雾 vs 隐匿, locked targets as direct picks, 迷彩 only where PRTS backs it (the rest [ASSUMED]), 异常效果 §无法选择 instead of the 选择器 draft text; PLAYING: all-in-range normal attacks skip 迷彩
2026-10-04 00:41:51 +08:00