Let captured Leader Skill owners revive other leaders
User ruling 13 October 2026: the original faction keeps its existing Skill assignment while its trained leader is captured. Reviving a different eligible own leader is legal and simply draws no replacement card while that assignment exists (selected reading of authorized supplied Advanced physical p21 "if you have no Leader Skill Card"). Not a new publisher ruling; captor lower-band use, card movement and death-return unchanged. Remove the replacement-question veto that suppressed the entire ordinary/Ghola revival: leaderSkillRevivalBlocked/requireLeaderSkillRevival, the gholaLeaders early return, the view revival.leaders: [] filter and the beginRevival/Ghola/ Emperor-special-Karama call sites are gone. offerRevivedLeaderSkill is unchanged and still suppresses a second assignment or draw. Rewrote the two committed rejection assertions (tests/advanced-native-skills.test.ts, tests/leader-skills-capture.test.ts) and added native regressions covering ordinary paid, held-Ghola and Emperor special Karama revival from a genuinely captured skilled state: exact cost, no draw or offer, retained captive/card/controller and a conserved all14 deck. Docs: RULE_DECISIONS, LEADER_SKILLS_CAPTURE, LEADER_SKILLS_RULES, LEADER_SKILLS_RUNTIME, NEXUS_CARD_RULES, CURRENT_STATUS, IMPLEMENTATION_STATUS and the game/reference.ts leader-skills topic.
This commit is contained in:
1 parent
ea12a68e56
commit
adb00358dd
16 files changed
+852
-77
No files matched your search
@@ -243,7 +243,7 @@ void test('Advanced native admission assigns Atreides Suk and rejects a forged I
|
||||
reject(game, actor, { type: 'ready' });
|
||||
});
|
||||
|
||||
void test('captured native trainer blocks replacement revival, retaining the physical skill and Tanks leader', () => {
|
||||
void test('a captured native trainer keeps its physical skill while another own leader revives with no replacement offer', () => {
|
||||
let game = completedAdvancedNativeSkillsGame({ family: 'ixians', requestedSkill: 'warmaster', opponents: ['harkonnen', 'emperor'] });
|
||||
game = advanceAdvancedNativeSkillsToPhase(game, 4);
|
||||
const owner = player(game, 'ixians');
|
||||
@@ -254,10 +254,21 @@ void test('captured native trainer blocks replacement revival, retaining the phy
|
||||
leader.dead = true;
|
||||
leader.deaths = 1;
|
||||
} // Controlled captured trainer and all other native leaders in Tanks.
|
||||
owner.spice = 20;
|
||||
owner.leaderRevived = false;
|
||||
// User ruling 13 October 2026: the original assignment survives the capture;
|
||||
// only the replacement draw is suppressed, so the ordinary revival is legal.
|
||||
assert.ok(viewGame(game, owner.id).revival.leaders.some(l => l.id === dead.id));
|
||||
const skills = structuredClone(game.leaderSkills);
|
||||
reject(game, owner.id, { type: 'reviveLeader', leader: dead.id }, /replacement-skill ruling/);
|
||||
assert.equal(dead.dead, true);
|
||||
assert.equal(trained.capturedBy, player(game, 'harkonnen').id);
|
||||
assert.deepEqual(game.leaderSkills, skills);
|
||||
custody(game);
|
||||
let revived = applyAction(game, owner.id, { type: 'reviveLeader', leader: dead.id });
|
||||
while (revived.response) {
|
||||
const responder = revived.players.find(p => !revived.response!.passed.includes(p.id));
|
||||
assert.ok(responder);
|
||||
revived = applyAction(revived, responder.id, { type: 'passResponse' });
|
||||
}
|
||||
assert.equal(player(revived, 'ixians').leaders.find(l => l.id === dead.id)!.dead, false);
|
||||
assert.equal(player(revived, 'ixians').leaders.find(l => l.id === trained.id)!.capturedBy, player(revived, 'harkonnen').id);
|
||||
assert.deepEqual(revived.leaderSkills, skills);
|
||||
assert.equal(revived.leaderSkills!.offers[owner.id], undefined);
|
||||
custody(revived);
|
||||
});
|
||||
Reference in new issue
Block a user