Add fourth sequential asset expansion batch

This commit is contained in:
2026-06-25 21:54:09 +09:00
parent f2ae6f3a80
commit 7aa35baeb6
27 changed files with 76 additions and 10 deletions

View File

@@ -65,6 +65,16 @@ export function portraitTextureKey(key: string) {
return portraitAssets[slug] ? `portrait-${slug}` : undefined;
}
export function portraitTextureKeysForKey(key: string) {
const slug = portraitSlugForKey(key);
const prefix = `${slug}-`;
const slugs = Object.keys(portraitAssets)
.filter((candidate) => candidate === slug || candidate.startsWith(prefix))
.sort();
return Array.from(new Set(slugs.map((candidate) => `portrait-${candidate}`)));
}
export function portraitKeyForSpeaker(speaker?: string) {
return speaker ? speakerPortraitKeys[speaker] : undefined;
}

View File

@@ -1,6 +1,6 @@
import Phaser from 'phaser';
import { soundDirector } from '../audio/SoundDirector';
import { portraitKeyForSpeaker, portraitTextureKey } from '../data/portraitAssets';
import { portraitKeyForSpeaker, portraitTextureKeysForKey } from '../data/portraitAssets';
import { storyBackgroundAssets, storyBackgroundKeysFor } from '../data/storyAssets';
import { prologuePages, type PortraitKey, type StoryPage } from '../data/scenario';
import { palette } from '../ui/palette';
@@ -238,8 +238,7 @@ export class StoryScene extends Phaser.Scene {
this.applyBackground(page);
this.chapterText?.setText(page.chapter);
const portraitKey = this.pagePortraitKey(page);
const textureKey = portraitKey ? portraitTextureKey(portraitKey) : undefined;
const textureKey = this.pagePortraitTextureKey(page);
if (textureKey && this.textures.exists(textureKey)) {
this.portraitFrame?.setVisible(true);
@@ -268,6 +267,20 @@ export class StoryScene extends Phaser.Scene {
return page.portrait ?? portraitKeyForSpeaker(page.speaker);
}
private pagePortraitTextureKey(page: StoryPage) {
const portraitKey = this.pagePortraitKey(page);
if (!portraitKey) {
return undefined;
}
const keys = portraitTextureKeysForKey(portraitKey).filter((key) => this.textures.exists(key));
if (keys.length <= 1) {
return keys[0];
}
return keys[this.hashString(page.id) % keys.length];
}
private pageBackgroundKey(page: StoryPage) {
const keys = storyBackgroundKeysFor(page.background).filter((key) => this.textures.exists(key));
if (keys.length <= 1) {