feedback5 CB4: 自制投石机's targeting ignores its block (索敌不受阻挡影响) — blocked by an operator on the 排气格栅 with nobody else in range it does not attack, as in the official game (community report of 2026-10-06, item 24)

The 「投石车」 is 自制投石机 (enemy_10162_mnctpt), the 「蒸汽地板」 the 排气格栅 smog (隐匿 to enemy ranged attacks). PRTS
天赋 「索敌不受阻挡影响」: the blocker exception (a blocked enemy attacks its blocker whatever its selectability) does not
apply to it. New enemy profile field `blockFree` (spawns.js): attackTargets selects as if unblocked, canTargetAlly
refuses a 隐匿 / 迷彩 blocker to it, sortAllyTargets puts no blocker first. Other enemies unchanged.

Golden: standin-06 (the bounty catapult, blocked by 忍冬, now shoots by 仇恨值 — checked instrumented).
Tests: test/sim/feedback5-catapult-smog.test.js (3; 2 fail on the parent). Docs: DESIGN §25.18.7, docs/SIM.md.
This commit is contained in:
sganggs committed 2026-10-07 02:07:51 +08:00
1 parent d40cb4e79e
commit fdb3ae1b46
9 files changed
+127 -52

No files matched your search

+5 -2
View File
@@ -718,10 +718,13 @@ export function attackWindup(e) {
return a && a.dur > 0 ? clipHit(a) / clipSpeed(e, a) : 0;
}
/** The allies `e` could hit now: its blocker (and, with a range, the others in reach), passing its own target rule. */
/**
* The allies `e` could hit now: its blocker (and, with a range, the others in reach), passing its own target rule. An
* enemy whose 索敌不受阻挡影响 (profile `blockFree`: 自制投石机) selects as if unblocked: the allies in reach it may target.
*/
function attackTargets(b, e, radius, reach, own) {
let targets = [];
if (e.blockedBy) {
if (e.blockedBy && !(radius > 0 && e.profile && e.profile.blockFree)) {
const bl = e.blockedBy;
if (radius > 0) {
targets = b.alliesInRadius(e.x, e.y, reach, null).filter((a) => a === bl || canTargetAlly(e, a, true));