Add sixth sequential asset expansion batch

This commit is contained in:
2026-06-26 02:50:03 +09:00
parent 0c80c455f0
commit dfafb338f6
30 changed files with 64 additions and 9 deletions

View File

@@ -6,9 +6,9 @@ generated, connected, validated, built, flow-tested, committed, and pushed.
## Current Baseline
- Story images: 76 files after Batch 5.
- Portraits: 38 files after Batch 5.
- Unit sheets: 132 files, 66 complete base/action design pairs after Batch 5.
- Story images: 88 files after Batch 6.
- Portraits: 44 files after Batch 6.
- Unit sheets: 142 files, 71 complete base/action design pairs after Batch 6.
- Target direction:
- Story: about 5 images per major campaign chapter across 65 campaign stages.
- Portraits: one portrait for every important `scenario.ts` speaker.
@@ -192,3 +192,46 @@ late-campaign speakers, and strengthens low-variant unit families.
- `unit-wei-officer-iron.png` + `unit-wei-officer-iron-actions.png`
- `unit-wu-infantry-river.png` + `unit-wu-infantry-river-actions.png`
- `unit-rebel-archer-veteran.png` + `unit-rebel-archer-veteran-actions.png`
## Batch 6 Priority
Status: complete. Visual contact sheets, image dimensions, unit base/action pairs,
`pnpm build`, and `pnpm verify:flow` passed. `sun-qian-campaign.png` was
regenerated once for clearer character differentiation. Code connection uses the
existing story, portrait, and unit variant discovery paths.
This batch expands mid-campaign and late northern-campaign story backgrounds,
adds campaign variants for supporting speakers, and improves the lowest-count
unit families.
### Story
- `77-xuzhou-gate-council.png`
- `78-xuzhou-night-evacuation.png`
- `79-anti-dong-coalition-council.png`
- `80-anti-dong-night-assault.png`
- `81-chengdu-surrender-court.png`
- `82-chengdu-outer-gate-surrender.png`
- `83-wudu-yinping-cloud-road.png`
- `84-chencang-siege-fortress-standoff.png`
- `85-chencang-siege-engineering-camp.png`
- `86-weishui-camps-logistics.png`
- `87-weishui-camps-night-alarm.png`
- `88-lucheng-pursuit-valley-road.png`
### Portraits
- `mi-zhu-campaign.png`
- `jian-yong-campaign.png`
- `sun-qian-campaign.png`
- `pang-tong-campaign.png`
- `fa-zheng-campaign.png`
- `meng-huo-campaign.png`
### Units
- `unit-wu-strategist-river.png` + `unit-wu-strategist-river-actions.png`
- `unit-nanman-infantry-jungle.png` + `unit-nanman-infantry-jungle-actions.png`
- `unit-rebel-cavalry-veteran.png` + `unit-rebel-cavalry-veteran-actions.png`
- `unit-rebel-leader-warlord.png` + `unit-rebel-leader-warlord-actions.png`
- `unit-shu-officer-council.png` + `unit-shu-officer-council-actions.png`

View File

@@ -8955,7 +8955,10 @@ try {
const storyState = await page.evaluate(() =>
window.__HEROS_GAME__?.scene.getScene('StoryScene')?.getDebugState?.()
);
if (storyState?.background === 'story-lucheng-pursuit') {
if (
storyState?.requestedBackground === 'story-lucheng-pursuit' &&
storyState?.background?.startsWith('story-lucheng-pursuit')
) {
break;
}
await page.keyboard.press('Space');
@@ -8965,7 +8968,8 @@ try {
window.__HEROS_GAME__?.scene.getScene('StoryScene')?.getDebugState?.()
);
if (
luchengPursuitStoryState?.background !== 'story-lucheng-pursuit' ||
luchengPursuitStoryState?.requestedBackground !== 'story-lucheng-pursuit' ||
!luchengPursuitStoryState?.background?.startsWith('story-lucheng-pursuit') ||
luchengPursuitStoryState?.backgroundReady !== true
) {
throw new Error(`Expected Lucheng pursuit story to lazy-load its new generated background: ${JSON.stringify(luchengPursuitStoryState)}`);
@@ -9134,7 +9138,10 @@ try {
const storyState = await page.evaluate(() =>
window.__HEROS_GAME__?.scene.getScene('StoryScene')?.getDebugState?.()
);
if (storyState?.background === 'story-weishui-camps') {
if (
storyState?.requestedBackground === 'story-weishui-camps' &&
storyState?.background?.startsWith('story-weishui-camps')
) {
break;
}
await page.keyboard.press('Space');
@@ -9144,7 +9151,8 @@ try {
window.__HEROS_GAME__?.scene.getScene('StoryScene')?.getDebugState?.()
);
if (
weishuiCampsStoryState?.background !== 'story-weishui-camps' ||
weishuiCampsStoryState?.requestedBackground !== 'story-weishui-camps' ||
!weishuiCampsStoryState?.background?.startsWith('story-weishui-camps') ||
weishuiCampsStoryState?.backgroundReady !== true ||
weishuiCampsStoryState?.portraitKey !== 'zhugeLiang' ||
!weishuiCampsStoryState?.portraitTextureKey?.startsWith('portrait-zhuge-liang')
@@ -9315,7 +9323,10 @@ try {
const storyState = await page.evaluate(() =>
window.__HEROS_GAME__?.scene.getScene('StoryScene')?.getDebugState?.()
);
if (storyState?.background === 'story-weishui-northbank') {
if (
storyState?.requestedBackground === 'story-weishui-northbank' &&
storyState?.background?.startsWith('story-weishui-northbank')
) {
break;
}
await page.keyboard.press('Space');
@@ -9331,7 +9342,8 @@ try {
};
const northbankExpectedPortrait = northbankExpectedPortraits[northbankStoryState?.currentPageId];
if (
northbankStoryState?.background !== 'story-weishui-northbank' ||
northbankStoryState?.requestedBackground !== 'story-weishui-northbank' ||
!northbankStoryState?.background?.startsWith('story-weishui-northbank') ||
northbankStoryState?.backgroundReady !== true ||
!northbankExpectedPortrait ||
northbankStoryState?.portraitKey !== northbankExpectedPortrait[0] ||

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1013 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB