kawaijs 0.1.7 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,UAAU,SAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAwuBlF"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+ED,wBAAgB,YAAY,CAAC,UAAU,SAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CA8zBlF"}
@@ -1,6 +1,81 @@
1
1
  import * as fs from 'node:fs';
2
2
  import * as path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
3
4
  import { compileScript, formatDiagnostic, KawaError } from '@kawaijs/parser';
5
+ function getBaseThemeCss() {
6
+ const dirname = path.dirname(fileURLToPath(import.meta.url));
7
+ const candidates = [
8
+ path.resolve(dirname, '..', '..', '..', 'renderer-dom', 'src', 'theme.css'),
9
+ path.resolve(dirname, '..', '..', '..', 'renderer-dom', 'dist', 'theme.css'),
10
+ path.resolve(dirname, '..', '..', 'node_modules', '@kawaijs', 'renderer-dom', 'src', 'theme.css'),
11
+ path.resolve(dirname, '..', '..', 'node_modules', '@kawaijs', 'renderer-dom', 'dist', 'theme.css')
12
+ ];
13
+ for (const c of candidates) {
14
+ if (fs.existsSync(c)) {
15
+ return fs.readFileSync(c, 'utf-8');
16
+ }
17
+ }
18
+ // Built-in fallback base CSS
19
+ return `
20
+ :root {
21
+ --kawa-font-family: 'Inter', system-ui, -apple-system, sans-serif;
22
+ --kawa-bg-color: #0b0f19;
23
+ --kawa-text-color: #f3f4f6;
24
+ --kawa-primary-accent: #f43f5e;
25
+ --kawa-dialogue-bg: rgba(15, 23, 42, 0.85);
26
+ --kawa-dialogue-border: rgba(244, 63, 94, 0.3);
27
+ --kawa-dialogue-radius: 12px;
28
+ --kawa-dialogue-padding: 24px 32px;
29
+ --kawa-speaker-bg: #f43f5e;
30
+ --kawa-speaker-color: #ffffff;
31
+ --kawa-speaker-radius: 6px;
32
+ --kawa-choice-bg: rgba(30, 41, 59, 0.9);
33
+ --kawa-choice-hover-bg: rgba(244, 63, 94, 0.85);
34
+ --kawa-choice-color: #ffffff;
35
+ --kawa-choice-border: 1px solid rgba(255, 255, 255, 0.15);
36
+ --kawa-choice-radius: 8px;
37
+ --kawa-choice-padding: 14px 28px;
38
+ --kawa-menu-btn-bg: rgba(15, 23, 42, 0.6);
39
+ --kawa-menu-btn-hover-bg: rgba(244, 63, 94, 0.8);
40
+ --kawa-stage-aspect-ratio: 16 / 9;
41
+ }
42
+ html, body { margin: 0; padding: 0; width: 100%; height: 100%; background: #030712; overflow: hidden; }
43
+ .kawa-root { position: relative; width: 100vw; height: 100vh; background: radial-gradient(circle at 50% 50%, #0f172a 0%, #020617 100%); color: var(--kawa-text-color); font-family: var(--kawa-font-family); display: flex; align-items: center; justify-content: center; overflow: hidden; user-select: none; box-sizing: border-box; }
44
+ .kawa-root * { box-sizing: border-box; }
45
+ .kawa-stage { position: relative; width: 100%; max-width: calc(100vh * (16 / 9)); aspect-ratio: var(--kawa-stage-aspect-ratio); background: radial-gradient(ellipse at center, #1e293b 0%, #0f172a 100%); overflow: hidden; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.8); }
46
+ .kawa-background { position: absolute; inset: 0; z-index: 1; background: radial-gradient(ellipse at center, #1e293b 0%, #0f172a 100%); overflow: hidden; }
47
+ .kawa-bg-layer { position: absolute; inset: 0; background-size: cover; background-position: center; background-repeat: no-repeat; transition: opacity 0.4s ease-in-out; opacity: 0; }
48
+ .kawa-bg-layer.active { opacity: 1; }
49
+ .kawa-characters { position: absolute; inset: 0; pointer-events: none; z-index: 2; display: flex; align-items: flex-end; }
50
+ .kawa-sprite { position: absolute; bottom: 0; height: 85%; transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.35s ease; display: flex; align-items: flex-end; justify-content: center; }
51
+ .kawa-sprite img { max-height: 100%; width: auto; object-fit: contain; filter: drop-shadow(0 10px 15px rgba(0, 0, 0, 0.5)); }
52
+ .kawa-sprite.kawa-pos-left { left: 15%; transform: translateX(-50%); }
53
+ .kawa-sprite.kawa-pos-center { left: 50%; transform: translateX(-50%); }
54
+ .kawa-sprite.kawa-pos-right { left: 85%; transform: translateX(-50%); }
55
+ .kawa-ui-layer { position: absolute; inset: 0; z-index: 10; display: flex; flex-direction: column; justify-content: flex-end; padding: 32px 48px; pointer-events: none; }
56
+ .kawa-dialogue-box { position: relative; width: 100%; min-height: 140px; background: var(--kawa-dialogue-bg); backdrop-filter: blur(12px); border: 1px solid var(--kawa-dialogue-border); border-radius: var(--kawa-dialogue-radius); padding: var(--kawa-dialogue-padding); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4); pointer-events: auto; cursor: pointer; }
57
+ .kawa-speaker-tag { display: inline-block; font-weight: 700; font-size: 1.1rem; color: var(--kawa-speaker-color); background-color: var(--kawa-speaker-bg); padding: 4px 14px; border-radius: var(--kawa-speaker-radius); margin-bottom: 10px; }
58
+ .kawa-dialogue-text { font-size: 1.15rem; line-height: 1.65; color: var(--kawa-text-color); word-break: break-word; }
59
+ .kawa-continue-indicator { position: absolute; right: 24px; bottom: 16px; font-size: 1rem; color: var(--kawa-primary-accent); animation: kawa-bounce 1.2s infinite ease-in-out; }
60
+ @keyframes kawa-bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(4px); } }
61
+ .kawa-choice-container { position: absolute; top: 45%; left: 50%; transform: translate(-50%, -50%); display: flex; flex-direction: column; gap: 14px; width: 80%; max-width: 500px; pointer-events: auto; z-index: 20; }
62
+ .kawa-choice-btn { background: var(--kawa-choice-bg); backdrop-filter: blur(8px); color: var(--kawa-choice-color); border: var(--kawa-choice-border); border-radius: var(--kawa-choice-radius); padding: var(--kawa-choice-padding); font-size: 1.05rem; font-weight: 600; cursor: pointer; text-align: center; }
63
+ .kawa-choice-btn:hover { background: var(--kawa-choice-hover-bg); transform: translateY(-2px) scale(1.02); }
64
+ .kawa-quick-menu { display: flex; gap: 10px; justify-content: flex-end; margin-top: 10px; pointer-events: auto; }
65
+ .kawa-btn { background: var(--kawa-menu-btn-bg); color: #cbd5e1; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 4px; padding: 4px 12px; font-size: 0.85rem; font-weight: 500; cursor: pointer; }
66
+ .kawa-btn:hover { background: var(--kawa-menu-btn-hover-bg); color: #ffffff; }
67
+ .kawa-modal-overlay { position: absolute; inset: 0; background: rgba(0, 0, 0, 0.82); backdrop-filter: blur(8px); z-index: 100; display: flex; align-items: center; justify-content: center; pointer-events: auto; }
68
+ .kawa-modal-card { background: #1e293b; border: 1px solid rgba(255, 255, 255, 0.15); border-radius: 14px; width: 90%; max-width: 750px; max-height: 85%; display: flex; flex-direction: column; padding: 24px 28px; }
69
+ .kawa-modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); padding-bottom: 12px; }
70
+ .kawa-modal-title { font-size: 1.35rem; font-weight: 700; color: #ffffff; }
71
+ .kawa-modal-body { overflow-y: auto; flex: 1; display: flex; flex-direction: column; gap: 12px; }
72
+ .kawa-slots-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 16px; }
73
+ .kawa-slot-card { background: rgba(15, 23, 42, 0.7); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 10px; padding: 16px; display: flex; flex-direction: column; justify-content: space-between; min-height: 130px; }
74
+ .kawa-ending-card { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(15, 23, 42, 0.9); backdrop-filter: blur(16px); border: 1px solid rgba(244, 63, 94, 0.4); border-radius: 16px; padding: 32px 48px; display: flex; flex-direction: column; align-items: center; text-align: center; z-index: 50; }
75
+ .kawa-ending-title { font-size: 2rem; font-weight: 800; color: var(--kawa-primary-accent); margin-bottom: 8px; }
76
+ .kawa-ending-subtitle { font-size: 1.1rem; color: #cbd5e1; margin-bottom: 16px; }
77
+ `;
78
+ }
4
79
  export function buildProject(projectDir = '.', options = {}) {
5
80
  const rootDir = path.resolve(process.cwd(), projectDir);
6
81
  const scriptPath = path.join(rootDir, 'game', 'script.kawa');
@@ -43,11 +118,7 @@ export function buildProject(projectDir = '.', options = {}) {
43
118
  console.log(`✅ Assets copied to dist/assets/`);
44
119
  }
45
120
  // 4. Generate Combined style.css
46
- let combinedCss = `/* Kawaijs Bundled Stylesheet */\n`;
47
- const themeCssPath = path.resolve(path.dirname(import.meta.url.replace('file:///', '')), '..', '..', '..', 'renderer-dom', 'src', 'theme.css');
48
- if (fs.existsSync(themeCssPath)) {
49
- combinedCss += fs.readFileSync(themeCssPath, 'utf-8') + '\n\n';
50
- }
121
+ let combinedCss = `/* Kawaijs Bundled Stylesheet */\n` + getBaseThemeCss() + '\n\n';
51
122
  if (fs.existsSync(stylePath)) {
52
123
  combinedCss += fs.readFileSync(stylePath, 'utf-8') + '\n';
53
124
  }
@@ -108,22 +179,34 @@ export function buildProject(projectDir = '.', options = {}) {
108
179
  const t = (cond || '').trim();
109
180
  if (!t || t === 'true') return true;
110
181
  if (t === 'false') return false;
182
+ const toNum = (v) => {
183
+ if (typeof v === 'number') return v;
184
+ if (v === true) return 1;
185
+ if (v === false || v === undefined || v === null || v === '') return 0;
186
+ const n = Number(v);
187
+ return isNaN(n) ? 0 : n;
188
+ };
111
189
  const ops = ['>=', '<=', '!=', '==', '>', '<'];
112
190
  for (const op of ops) {
113
191
  const idx = t.indexOf(op);
114
192
  if (idx !== -1) {
115
193
  const l = resolveVal(t.slice(0, idx), vars);
116
194
  const r = resolveVal(t.slice(idx + op.length), vars);
117
- if (op === '>=') return Number(l) >= Number(r);
118
- if (op === '<=') return Number(l) <= Number(r);
119
- if (op === '>') return Number(l) > Number(r);
120
- if (op === '<') return Number(l) < Number(r);
121
- if (op === '==') return l == r;
122
- if (op === '!=') return l != r;
195
+ if (op === '>=') return toNum(l) >= toNum(r);
196
+ if (op === '<=') return toNum(l) <= toNum(r);
197
+ if (op === '>') return toNum(l) > toNum(r);
198
+ if (op === '<') return toNum(l) < toNum(r);
199
+ if (op === '==') return l === r || String(l) === String(r);
200
+ if (op === '!=') return l !== r && String(l) !== String(r);
123
201
  }
124
202
  }
125
- if (t.startsWith('!')) return !Boolean(vars[t.slice(1).trim()]);
126
- return Boolean(vars[t]);
203
+ if (t.startsWith('!')) {
204
+ const v = vars[t.slice(1).trim()];
205
+ return v === false || v === 'false' || v === 0 || v === '0' || v === undefined || v === null || v === '';
206
+ }
207
+ const val = t in vars ? vars[t] : resolveVal(t, vars);
208
+ if (val === false || val === 'false' || val === 0 || val === '0' || val === undefined || val === null || val === '') return false;
209
+ return Boolean(val);
127
210
  }
128
211
  function resolveVal(token, vars) {
129
212
  const t = token.trim();
@@ -447,13 +530,15 @@ export function buildProject(projectDir = '.', options = {}) {
447
530
  }
448
531
  });
449
532
  }
450
- }
451
533
  class DOMRenderer {
452
534
  constructor(vm, container, audioManager) {
453
535
  this.vm = vm;
454
536
  this.container = container;
455
537
  this.audioManager = audioManager;
456
538
  this.isChoicePending = false;
539
+ this.activeBgLayer = 'A';
540
+ this.currentBgUrl = '';
541
+ this.activeChars = new Map();
457
542
  this.build();
458
543
  vm.onStateChange(s => this.render(s));
459
544
  this.render(vm.getState());
@@ -462,7 +547,10 @@ export function buildProject(projectDir = '.', options = {}) {
462
547
  this.container.innerHTML = \`
463
548
  <div class="kawa-root">
464
549
  <div class="kawa-stage">
465
- <div class="kawa-background"></div>
550
+ <div class="kawa-background">
551
+ <div class="kawa-bg-layer kawa-bg-a active"></div>
552
+ <div class="kawa-bg-layer kawa-bg-b"></div>
553
+ </div>
466
554
  <div class="kawa-characters kawa-sprites"></div>
467
555
  <div class="kawa-ui-layer">
468
556
  <div class="kawa-choice-container kawa-choices" style="display:none"></div>
@@ -482,7 +570,8 @@ export function buildProject(projectDir = '.', options = {}) {
482
570
  </div>
483
571
  </div>\`;
484
572
  this.rootEl = this.container.querySelector('.kawa-root');
485
- this.bgEl = this.container.querySelector('.kawa-background');
573
+ this.bgLayerA = this.container.querySelector('.kawa-bg-a');
574
+ this.bgLayerB = this.container.querySelector('.kawa-bg-b');
486
575
  this.charsEl = this.container.querySelector('.kawa-characters');
487
576
  this.boxEl = this.container.querySelector('.kawa-dialogue-box');
488
577
  this.spkEl = this.container.querySelector('.kawa-speaker-tag');
@@ -528,39 +617,94 @@ export function buildProject(projectDir = '.', options = {}) {
528
617
  render(state) {
529
618
  this.isChoicePending = false;
530
619
  this.backBtn.disabled = !this.vm.canRollback();
620
+
621
+ // 1. Dual Background Crossfade
531
622
  if (state.visual.background) {
532
- const bg = state.visual.background.replace(/^bg\\s+/, '');
533
- this.bgEl.style.backgroundImage = 'url("./assets/backgrounds/' + bg + (bg.includes('.') ? '' : '.svg') + '"), url("./assets/backgrounds/' + bg + '.png")';
534
- this.bgEl.style.opacity = '1';
623
+ const rawBg = state.visual.background;
624
+ const bg = rawBg.replace(/^bg[\s_]+/i, '').trim();
625
+ const baseName = bg.replace(/\\.(svg|png|jpg|jpeg|webp)$/i, '');
626
+ const svgUrl = './assets/backgrounds/' + (bg.includes('.') ? bg : bg + '.svg');
627
+ const pngUrl = './assets/backgrounds/' + baseName + '.png';
628
+
629
+ if (svgUrl !== this.currentBgUrl) {
630
+ this.currentBgUrl = svgUrl;
631
+ const inLayer = this.activeBgLayer === 'A' ? this.bgLayerB : this.bgLayerA;
632
+ const outLayer = this.activeBgLayer === 'A' ? this.bgLayerA : this.bgLayerB;
633
+
634
+ inLayer.style.backgroundImage = 'url("' + svgUrl + '")';
635
+ inLayer.classList.add('active');
636
+ outLayer.classList.remove('active');
637
+ this.activeBgLayer = this.activeBgLayer === 'A' ? 'B' : 'A';
638
+
639
+ const testImg = new Image();
640
+ testImg.onerror = () => {
641
+ const img2 = new Image();
642
+ img2.onload = () => {
643
+ inLayer.style.backgroundImage = 'url("' + pngUrl + '")';
644
+ };
645
+ img2.onerror = () => {
646
+ inLayer.style.backgroundImage = 'radial-gradient(ellipse at center, #334155 0%, #0f172a 100%)';
647
+ };
648
+ img2.src = pngUrl;
649
+ };
650
+ testImg.src = svgUrl;
651
+ }
535
652
  } else {
536
- this.bgEl.style.opacity = '0';
653
+ this.currentBgUrl = '';
654
+ this.bgLayerA.classList.remove('active');
655
+ this.bgLayerB.classList.remove('active');
537
656
  }
538
657
 
539
- this.charsEl.innerHTML = '';
540
- for (const [id, char] of Object.entries(state.visual.characters)) {
541
- const div = document.createElement('div');
542
- div.className = 'kawa-sprite kawa-pos-' + (char.position || 'center');
543
- const img = document.createElement('img');
658
+ // 2. Character Reconciliation
659
+ const currChars = state.visual.characters;
660
+ const currIds = new Set(Object.keys(currChars));
661
+
662
+ for (const [id, rec] of this.activeChars.entries()) {
663
+ if (!currIds.has(id)) {
664
+ rec.div.remove();
665
+ this.activeChars.delete(id);
666
+ }
667
+ }
668
+
669
+ for (const [id, char] of Object.entries(currChars)) {
670
+ const posClass = 'kawa-sprite kawa-pos-' + (char.position || 'center');
544
671
  const expr = char.expression ? '/' + char.expression : '';
545
- img.src = './assets/characters/' + id + expr + '.svg';
546
- img.alt = id;
547
- let fallback = 0;
548
- img.onerror = () => {
549
- fallback++;
550
- if (fallback === 1) img.src = './assets/characters/' + id + expr + '.png';
551
- else if (fallback === 2 && char.expression) img.src = './assets/characters/' + id + '_' + char.expression + '.svg';
552
- else if (fallback === 3 && char.expression) img.src = './assets/characters/' + id + '_' + char.expression + '.png';
553
- else {
554
- img.style.display = 'none';
555
- div.style.width = '220px'; div.style.height = '420px';
556
- div.style.background = 'rgba(244,63,94,0.25)'; div.style.border = '2px dashed #f43f5e';
557
- div.style.borderRadius = '16px'; div.style.display = 'flex'; div.style.alignItems = 'center';
558
- div.style.justifyContent = 'center'; div.style.color = '#fff'; div.style.fontWeight = '600';
559
- div.textContent = id + (char.expression ? ' (' + char.expression + ')' : '');
672
+ const primarySrc = './assets/characters/' + id + expr + '.svg';
673
+
674
+ let rec = this.activeChars.get(id);
675
+ if (!rec) {
676
+ const div = document.createElement('div');
677
+ div.className = posClass;
678
+ const img = document.createElement('img');
679
+ img.src = primarySrc;
680
+ img.alt = id;
681
+ let fallback = 0;
682
+ img.onerror = () => {
683
+ fallback++;
684
+ if (fallback === 1) img.src = './assets/characters/' + id + expr + '.png';
685
+ else if (fallback === 2 && char.expression) img.src = './assets/characters/' + id + '_' + char.expression + '.svg';
686
+ else if (fallback === 3 && char.expression) img.src = './assets/characters/' + id + '_' + char.expression + '.png';
687
+ else {
688
+ img.style.display = 'none';
689
+ div.style.width = '220px'; div.style.height = '420px';
690
+ div.style.background = 'rgba(244,63,94,0.25)'; div.style.border = '2px dashed #f43f5e';
691
+ div.style.borderRadius = '16px'; div.style.display = 'flex'; div.style.alignItems = 'center';
692
+ div.style.justifyContent = 'center'; div.style.color = '#fff'; div.style.fontWeight = '600';
693
+ div.textContent = id + (char.expression ? ' (' + char.expression + ')' : '');
694
+ }
695
+ };
696
+ div.appendChild(img);
697
+ this.charsEl.appendChild(div);
698
+ rec = { div, img, expression: char.expression, position: char.position };
699
+ this.activeChars.set(id, rec);
700
+ } else {
701
+ rec.div.className = posClass;
702
+ if (rec.expression !== char.expression) {
703
+ rec.expression = char.expression;
704
+ rec.img.style.display = 'block';
705
+ rec.img.src = primarySrc;
560
706
  }
561
- };
562
- div.appendChild(img);
563
- this.charsEl.appendChild(div);
707
+ }
564
708
  }
565
709
 
566
710
  if (state.dialogue) {
@@ -719,11 +863,27 @@ export function buildProject(projectDir = '.', options = {}) {
719
863
  body.appendChild(item);
720
864
  });
721
865
  }
722
- ov.appendChild(card);
723
- this.rootEl.appendChild(ov);
724
866
  }
725
867
  }
726
868
 
869
+ function preloadAssets(story) {
870
+ if (typeof window === 'undefined') return;
871
+ for (const list of Object.values(story.labels || {})) {
872
+ for (const inst of list) {
873
+ if (inst.type === 'scene' && inst.background) {
874
+ const clean = inst.background.replace(/^bg[\s_]+/i, '').trim();
875
+ const img = new Image();
876
+ img.src = './assets/backgrounds/' + (clean.includes('.') ? clean : clean + '.svg');
877
+ } else if (inst.type === 'show') {
878
+ const expr = inst.expression ? '/' + inst.expression : '';
879
+ const img = new Image();
880
+ img.src = './assets/characters/' + inst.character + expr + '.svg';
881
+ }
882
+ }
883
+ }
884
+ }
885
+
886
+ preloadAssets(story);
727
887
  const vm = new StoryVM(story);
728
888
  const audio = new AudioManager();
729
889
  const audioResolver = (track, channel) => {
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,UAAU,SAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,IAAI,CAqOrF"}
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA+ED,wBAAgB,cAAc,CAAC,UAAU,SAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,IAAI,CA+MrF"}
@@ -1,7 +1,82 @@
1
1
  import * as http from 'node:http';
2
2
  import * as fs from 'node:fs';
3
3
  import * as path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
4
5
  import { compileScript, formatDiagnostic, KawaError } from '@kawaijs/parser';
6
+ function getBaseThemeCss() {
7
+ const dirname = path.dirname(fileURLToPath(import.meta.url));
8
+ const candidates = [
9
+ path.resolve(dirname, '..', '..', '..', 'renderer-dom', 'src', 'theme.css'),
10
+ path.resolve(dirname, '..', '..', '..', 'renderer-dom', 'dist', 'theme.css'),
11
+ path.resolve(dirname, '..', '..', 'node_modules', '@kawaijs', 'renderer-dom', 'src', 'theme.css'),
12
+ path.resolve(dirname, '..', '..', 'node_modules', '@kawaijs', 'renderer-dom', 'dist', 'theme.css')
13
+ ];
14
+ for (const c of candidates) {
15
+ if (fs.existsSync(c)) {
16
+ return fs.readFileSync(c, 'utf-8');
17
+ }
18
+ }
19
+ // Built-in fallback base CSS
20
+ return `
21
+ :root {
22
+ --kawa-font-family: 'Inter', system-ui, -apple-system, sans-serif;
23
+ --kawa-bg-color: #0b0f19;
24
+ --kawa-text-color: #f3f4f6;
25
+ --kawa-primary-accent: #f43f5e;
26
+ --kawa-dialogue-bg: rgba(15, 23, 42, 0.85);
27
+ --kawa-dialogue-border: rgba(244, 63, 94, 0.3);
28
+ --kawa-dialogue-radius: 12px;
29
+ --kawa-dialogue-padding: 24px 32px;
30
+ --kawa-speaker-bg: #f43f5e;
31
+ --kawa-speaker-color: #ffffff;
32
+ --kawa-speaker-radius: 6px;
33
+ --kawa-choice-bg: rgba(30, 41, 59, 0.9);
34
+ --kawa-choice-hover-bg: rgba(244, 63, 94, 0.85);
35
+ --kawa-choice-color: #ffffff;
36
+ --kawa-choice-border: 1px solid rgba(255, 255, 255, 0.15);
37
+ --kawa-choice-radius: 8px;
38
+ --kawa-choice-padding: 14px 28px;
39
+ --kawa-menu-btn-bg: rgba(15, 23, 42, 0.6);
40
+ --kawa-menu-btn-hover-bg: rgba(244, 63, 94, 0.8);
41
+ --kawa-stage-aspect-ratio: 16 / 9;
42
+ }
43
+ html, body { margin: 0; padding: 0; width: 100%; height: 100%; background: #030712; overflow: hidden; }
44
+ .kawa-root { position: relative; width: 100vw; height: 100vh; background: radial-gradient(circle at 50% 50%, #0f172a 0%, #020617 100%); color: var(--kawa-text-color); font-family: var(--kawa-font-family); display: flex; align-items: center; justify-content: center; overflow: hidden; user-select: none; box-sizing: border-box; }
45
+ .kawa-root * { box-sizing: border-box; }
46
+ .kawa-stage { position: relative; width: 100%; max-width: calc(100vh * (16 / 9)); aspect-ratio: var(--kawa-stage-aspect-ratio); background: radial-gradient(ellipse at center, #1e293b 0%, #0f172a 100%); overflow: hidden; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.8); }
47
+ .kawa-background { position: absolute; inset: 0; z-index: 1; background: radial-gradient(ellipse at center, #1e293b 0%, #0f172a 100%); overflow: hidden; }
48
+ .kawa-bg-layer { position: absolute; inset: 0; background-size: cover; background-position: center; background-repeat: no-repeat; transition: opacity 0.4s ease-in-out; opacity: 0; }
49
+ .kawa-bg-layer.active { opacity: 1; }
50
+ .kawa-characters { position: absolute; inset: 0; pointer-events: none; z-index: 2; display: flex; align-items: flex-end; }
51
+ .kawa-sprite { position: absolute; bottom: 0; height: 85%; transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.35s ease; display: flex; align-items: flex-end; justify-content: center; }
52
+ .kawa-sprite img { max-height: 100%; width: auto; object-fit: contain; filter: drop-shadow(0 10px 15px rgba(0, 0, 0, 0.5)); }
53
+ .kawa-sprite.kawa-pos-left { left: 15%; transform: translateX(-50%); }
54
+ .kawa-sprite.kawa-pos-center { left: 50%; transform: translateX(-50%); }
55
+ .kawa-sprite.kawa-pos-right { left: 85%; transform: translateX(-50%); }
56
+ .kawa-ui-layer { position: absolute; inset: 0; z-index: 10; display: flex; flex-direction: column; justify-content: flex-end; padding: 32px 48px; pointer-events: none; }
57
+ .kawa-dialogue-box { position: relative; width: 100%; min-height: 140px; background: var(--kawa-dialogue-bg); backdrop-filter: blur(12px); border: 1px solid var(--kawa-dialogue-border); border-radius: var(--kawa-dialogue-radius); padding: var(--kawa-dialogue-padding); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4); pointer-events: auto; cursor: pointer; }
58
+ .kawa-speaker-tag { display: inline-block; font-weight: 700; font-size: 1.1rem; color: var(--kawa-speaker-color); background-color: var(--kawa-speaker-bg); padding: 4px 14px; border-radius: var(--kawa-speaker-radius); margin-bottom: 10px; }
59
+ .kawa-dialogue-text { font-size: 1.15rem; line-height: 1.65; color: var(--kawa-text-color); word-break: break-word; }
60
+ .kawa-continue-indicator { position: absolute; right: 24px; bottom: 16px; font-size: 1rem; color: var(--kawa-primary-accent); animation: kawa-bounce 1.2s infinite ease-in-out; }
61
+ @keyframes kawa-bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(4px); } }
62
+ .kawa-choice-container { position: absolute; top: 45%; left: 50%; transform: translate(-50%, -50%); display: flex; flex-direction: column; gap: 14px; width: 80%; max-width: 500px; pointer-events: auto; z-index: 20; }
63
+ .kawa-choice-btn { background: var(--kawa-choice-bg); backdrop-filter: blur(8px); color: var(--kawa-choice-color); border: var(--kawa-choice-border); border-radius: var(--kawa-choice-radius); padding: var(--kawa-choice-padding); font-size: 1.05rem; font-weight: 600; cursor: pointer; text-align: center; }
64
+ .kawa-choice-btn:hover { background: var(--kawa-choice-hover-bg); transform: translateY(-2px) scale(1.02); }
65
+ .kawa-quick-menu { display: flex; gap: 10px; justify-content: flex-end; margin-top: 10px; pointer-events: auto; }
66
+ .kawa-btn { background: var(--kawa-menu-btn-bg); color: #cbd5e1; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 4px; padding: 4px 12px; font-size: 0.85rem; font-weight: 500; cursor: pointer; }
67
+ .kawa-btn:hover { background: var(--kawa-menu-btn-hover-bg); color: #ffffff; }
68
+ .kawa-modal-overlay { position: absolute; inset: 0; background: rgba(0, 0, 0, 0.82); backdrop-filter: blur(8px); z-index: 100; display: flex; align-items: center; justify-content: center; pointer-events: auto; }
69
+ .kawa-modal-card { background: #1e293b; border: 1px solid rgba(255, 255, 255, 0.15); border-radius: 14px; width: 90%; max-width: 750px; max-height: 85%; display: flex; flex-direction: column; padding: 24px 28px; }
70
+ .kawa-modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); padding-bottom: 12px; }
71
+ .kawa-modal-title { font-size: 1.35rem; font-weight: 700; color: #ffffff; }
72
+ .kawa-modal-body { overflow-y: auto; flex: 1; display: flex; flex-direction: column; gap: 12px; }
73
+ .kawa-slots-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 16px; }
74
+ .kawa-slot-card { background: rgba(15, 23, 42, 0.7); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 10px; padding: 16px; display: flex; flex-direction: column; justify-content: space-between; min-height: 130px; }
75
+ .kawa-ending-card { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(15, 23, 42, 0.9); backdrop-filter: blur(16px); border: 1px solid rgba(244, 63, 94, 0.4); border-radius: 16px; padding: 32px 48px; display: flex; flex-direction: column; align-items: center; text-align: center; z-index: 50; }
76
+ .kawa-ending-title { font-size: 2rem; font-weight: 800; color: var(--kawa-primary-accent); margin-bottom: 8px; }
77
+ .kawa-ending-subtitle { font-size: 1.1rem; color: #cbd5e1; margin-bottom: 16px; }
78
+ `;
79
+ }
5
80
  export function startDevServer(projectDir = '.', options = {}) {
6
81
  const rootDir = path.resolve(process.cwd(), projectDir);
7
82
  const scriptPath = path.join(rootDir, 'game', 'script.kawa');
@@ -76,12 +151,7 @@ export function startDevServer(projectDir = '.', options = {}) {
76
151
  // 3. User & Default Stylesheet
77
152
  if (url === '/style.css') {
78
153
  res.writeHead(200, { 'Content-Type': 'text/css' });
79
- let combinedCss = `/* Kawaijs Base Theme */\n`;
80
- // Load default renderer theme CSS
81
- const themeCssPath = path.resolve(path.dirname(import.meta.url.replace('file:///', '')), '..', '..', '..', 'renderer-dom', 'src', 'theme.css');
82
- if (fs.existsSync(themeCssPath)) {
83
- combinedCss += fs.readFileSync(themeCssPath, 'utf-8') + '\n';
84
- }
154
+ let combinedCss = `/* Kawaijs Base Theme */\n` + getBaseThemeCss() + '\n\n';
85
155
  if (fs.existsSync(stylePath)) {
86
156
  combinedCss += `/* User Custom Styles */\n` + fs.readFileSync(stylePath, 'utf-8');
87
157
  }
@@ -90,17 +160,23 @@ export function startDevServer(projectDir = '.', options = {}) {
90
160
  }
91
161
  // 4. Game Assets (/assets/*)
92
162
  if (url.startsWith('/assets/')) {
93
- const relPath = decodeURIComponent(url.replace('/assets/', ''));
163
+ const cleanUrl = url.split('?')[0];
164
+ const relPath = decodeURIComponent(cleanUrl.replace(/^\/?assets\//, ''));
94
165
  let filePath = path.join(assetsDir, relPath);
95
- if (!fs.existsSync(filePath)) {
96
- // Try fallback extensions (.svg, .png, .webp, .jpg, .jpeg, .mp3, .ogg)
166
+ if (!fs.existsSync(filePath) || !fs.statSync(filePath).isFile()) {
167
+ // Try fallback extensions and strip prefixes
97
168
  const parsed = path.parse(filePath);
98
- for (const ext of ['.svg', '.png', '.webp', '.jpg', '.jpeg', '.mp3', '.ogg']) {
99
- const candidate = path.join(parsed.dir, parsed.name + ext);
100
- if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) {
101
- filePath = candidate;
102
- break;
169
+ const cleanName = parsed.name.replace(/^bg[\s_]+/i, '');
170
+ for (const nameCandidate of [parsed.name, cleanName]) {
171
+ for (const ext of ['', '.svg', '.png', '.webp', '.jpg', '.jpeg', '.mp3', '.ogg', '.wav']) {
172
+ const candidate = path.join(parsed.dir, nameCandidate + ext);
173
+ if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) {
174
+ filePath = candidate;
175
+ break;
176
+ }
103
177
  }
178
+ if (fs.existsSync(filePath) && fs.statSync(filePath).isFile())
179
+ break;
104
180
  }
105
181
  }
106
182
  if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
@@ -171,28 +247,6 @@ export function startDevServer(projectDir = '.', options = {}) {
171
247
 
172
248
  const app = mountKawaApp(story, document.getElementById('app'));
173
249
  window.__kawa_app = app;
174
-
175
- // Auto-resume state on dev live reload
176
- const DEV_SESSION_KEY = 'kawaijs_dev_state';
177
- const savedDevState = sessionStorage.getItem(DEV_SESSION_KEY);
178
- if (savedDevState) {
179
- try {
180
- const parsed = JSON.parse(savedDevState);
181
- if (parsed && parsed.currentLabel && story.labels[parsed.currentLabel]) {
182
- app.vm.state = parsed;
183
- app.vm.snapshotStack = [parsed];
184
- app.vm.notify();
185
- }
186
- } catch {}
187
- }
188
-
189
- app.vm.onStateChange((state) => {
190
- if (!state.isFinished) {
191
- sessionStorage.setItem(DEV_SESSION_KEY, JSON.stringify(state));
192
- } else {
193
- sessionStorage.removeItem(DEV_SESSION_KEY);
194
- }
195
- });
196
250
  } catch (err) {
197
251
  errorEl.style.display = 'block';
198
252
  errorEl.textContent = err.stack || err.message;
@@ -260,22 +314,34 @@ function getInlineRuntimeScript() {
260
314
  const t = (cond || '').trim();
261
315
  if (!t || t === 'true') return true;
262
316
  if (t === 'false') return false;
317
+ const toNum = (v) => {
318
+ if (typeof v === 'number') return v;
319
+ if (v === true) return 1;
320
+ if (v === false || v === undefined || v === null || v === '') return 0;
321
+ const n = Number(v);
322
+ return isNaN(n) ? 0 : n;
323
+ };
263
324
  const ops = ['>=', '<=', '!=', '==', '>', '<'];
264
325
  for (const op of ops) {
265
326
  const idx = t.indexOf(op);
266
327
  if (idx !== -1) {
267
328
  const l = resolveVal(t.slice(0, idx), vars);
268
329
  const r = resolveVal(t.slice(idx + op.length), vars);
269
- if (op === '>=') return Number(l) >= Number(r);
270
- if (op === '<=') return Number(l) <= Number(r);
271
- if (op === '>') return Number(l) > Number(r);
272
- if (op === '<') return Number(l) < Number(r);
273
- if (op === '==') return l == r;
274
- if (op === '!=') return l != r;
330
+ if (op === '>=') return toNum(l) >= toNum(r);
331
+ if (op === '<=') return toNum(l) <= toNum(r);
332
+ if (op === '>') return toNum(l) > toNum(r);
333
+ if (op === '<') return toNum(l) < toNum(r);
334
+ if (op === '==') return l === r || String(l) === String(r);
335
+ if (op === '!=') return l !== r && String(l) !== String(r);
275
336
  }
276
337
  }
277
- if (t.startsWith('!')) return !Boolean(vars[t.slice(1).trim()]);
278
- return Boolean(vars[t]);
338
+ if (t.startsWith('!')) {
339
+ const v = vars[t.slice(1).trim()];
340
+ return v === false || v === 'false' || v === 0 || v === '0' || v === undefined || v === null || v === '';
341
+ }
342
+ const val = t in vars ? vars[t] : resolveVal(t, vars);
343
+ if (val === false || val === 'false' || val === 0 || val === '0' || val === undefined || val === null || val === '') return false;
344
+ return Boolean(val);
279
345
  }
280
346
  function resolveVal(token, vars) {
281
347
  const t = token.trim();
@@ -600,14 +666,15 @@ function getInlineRuntimeScript() {
600
666
  }
601
667
  }
602
668
  });
603
- }
604
- }
605
- class DOMRenderer {
669
+ class DOMRenderer {
606
670
  constructor(vm, container, audioManager) {
607
671
  this.vm = vm;
608
672
  this.container = container;
609
673
  this.audioManager = audioManager;
610
674
  this.isChoicePending = false;
675
+ this.activeBgLayer = 'A';
676
+ this.currentBgUrl = '';
677
+ this.activeChars = new Map();
611
678
  this.build();
612
679
  vm.onStateChange(s => this.render(s));
613
680
  this.render(vm.getState());
@@ -616,7 +683,10 @@ function getInlineRuntimeScript() {
616
683
  this.container.innerHTML = \`
617
684
  <div class="kawa-root">
618
685
  <div class="kawa-stage">
619
- <div class="kawa-background"></div>
686
+ <div class="kawa-background">
687
+ <div class="kawa-bg-layer kawa-bg-a active"></div>
688
+ <div class="kawa-bg-layer kawa-bg-b"></div>
689
+ </div>
620
690
  <div class="kawa-characters kawa-sprites"></div>
621
691
  <div class="kawa-ui-layer">
622
692
  <div class="kawa-choice-container kawa-choices" style="display:none"></div>
@@ -636,7 +706,8 @@ function getInlineRuntimeScript() {
636
706
  </div>
637
707
  </div>\`;
638
708
  this.rootEl = this.container.querySelector('.kawa-root');
639
- this.bgEl = this.container.querySelector('.kawa-background');
709
+ this.bgLayerA = this.container.querySelector('.kawa-bg-a');
710
+ this.bgLayerB = this.container.querySelector('.kawa-bg-b');
640
711
  this.charsEl = this.container.querySelector('.kawa-characters');
641
712
  this.boxEl = this.container.querySelector('.kawa-dialogue-box');
642
713
  this.spkEl = this.container.querySelector('.kawa-speaker-tag');
@@ -682,39 +753,94 @@ function getInlineRuntimeScript() {
682
753
  render(state) {
683
754
  this.isChoicePending = false;
684
755
  this.backBtn.disabled = !this.vm.canRollback();
756
+
757
+ // 1. Dual Background Crossfade
685
758
  if (state.visual.background) {
686
- const bg = state.visual.background.replace(/^bg\\s+/, '');
687
- this.bgEl.style.backgroundImage = 'url("/assets/backgrounds/' + bg + (bg.includes('.') ? '' : '.svg') + '"), url("/assets/backgrounds/' + bg + '.png")';
688
- this.bgEl.style.opacity = '1';
759
+ const rawBg = state.visual.background;
760
+ const bg = rawBg.replace(/^bg[\s_]+/i, '').trim();
761
+ const baseName = bg.replace(/\\.(svg|png|jpg|jpeg|webp)$/i, '');
762
+ const svgUrl = '/assets/backgrounds/' + (bg.includes('.') ? bg : bg + '.svg');
763
+ const pngUrl = '/assets/backgrounds/' + baseName + '.png';
764
+
765
+ if (svgUrl !== this.currentBgUrl) {
766
+ this.currentBgUrl = svgUrl;
767
+ const inLayer = this.activeBgLayer === 'A' ? this.bgLayerB : this.bgLayerA;
768
+ const outLayer = this.activeBgLayer === 'A' ? this.bgLayerA : this.bgLayerB;
769
+
770
+ inLayer.style.backgroundImage = 'url("' + svgUrl + '")';
771
+ inLayer.classList.add('active');
772
+ outLayer.classList.remove('active');
773
+ this.activeBgLayer = this.activeBgLayer === 'A' ? 'B' : 'A';
774
+
775
+ const testImg = new Image();
776
+ testImg.onerror = () => {
777
+ const img2 = new Image();
778
+ img2.onload = () => {
779
+ inLayer.style.backgroundImage = 'url("' + pngUrl + '")';
780
+ };
781
+ img2.onerror = () => {
782
+ inLayer.style.backgroundImage = 'radial-gradient(ellipse at center, #334155 0%, #0f172a 100%)';
783
+ };
784
+ img2.src = pngUrl;
785
+ };
786
+ testImg.src = svgUrl;
787
+ }
689
788
  } else {
690
- this.bgEl.style.opacity = '0';
789
+ this.currentBgUrl = '';
790
+ this.bgLayerA.classList.remove('active');
791
+ this.bgLayerB.classList.remove('active');
792
+ }
793
+
794
+ // 2. Character Reconciliation
795
+ const currChars = state.visual.characters;
796
+ const currIds = new Set(Object.keys(currChars));
797
+
798
+ for (const [id, rec] of this.activeChars.entries()) {
799
+ if (!currIds.has(id)) {
800
+ rec.div.remove();
801
+ this.activeChars.delete(id);
802
+ }
691
803
  }
692
804
 
693
- this.charsEl.innerHTML = '';
694
- for (const [id, char] of Object.entries(state.visual.characters)) {
695
- const div = document.createElement('div');
696
- div.className = 'kawa-sprite kawa-pos-' + (char.position || 'center');
697
- const img = document.createElement('img');
805
+ for (const [id, char] of Object.entries(currChars)) {
806
+ const posClass = 'kawa-sprite kawa-pos-' + (char.position || 'center');
698
807
  const expr = char.expression ? '/' + char.expression : '';
699
- img.src = '/assets/characters/' + id + expr + '.svg';
700
- img.alt = id;
701
- let fallback = 0;
702
- img.onerror = () => {
703
- fallback++;
704
- if (fallback === 1) img.src = '/assets/characters/' + id + expr + '.png';
705
- else if (fallback === 2 && char.expression) img.src = '/assets/characters/' + id + '_' + char.expression + '.svg';
706
- else if (fallback === 3 && char.expression) img.src = '/assets/characters/' + id + '_' + char.expression + '.png';
707
- else {
708
- img.style.display = 'none';
709
- div.style.width = '220px'; div.style.height = '420px';
710
- div.style.background = 'rgba(244,63,94,0.25)'; div.style.border = '2px dashed #f43f5e';
711
- div.style.borderRadius = '16px'; div.style.display = 'flex'; div.style.alignItems = 'center';
712
- div.style.justifyContent = 'center'; div.style.color = '#fff'; div.style.fontWeight = '600';
713
- div.textContent = id + (char.expression ? ' (' + char.expression + ')' : '');
808
+ const primarySrc = '/assets/characters/' + id + expr + '.svg';
809
+
810
+ let rec = this.activeChars.get(id);
811
+ if (!rec) {
812
+ const div = document.createElement('div');
813
+ div.className = posClass;
814
+ const img = document.createElement('img');
815
+ img.src = primarySrc;
816
+ img.alt = id;
817
+ let fallback = 0;
818
+ img.onerror = () => {
819
+ fallback++;
820
+ if (fallback === 1) img.src = '/assets/characters/' + id + expr + '.png';
821
+ else if (fallback === 2 && char.expression) img.src = '/assets/characters/' + id + '_' + char.expression + '.svg';
822
+ else if (fallback === 3 && char.expression) img.src = '/assets/characters/' + id + '_' + char.expression + '.png';
823
+ else {
824
+ img.style.display = 'none';
825
+ div.style.width = '220px'; div.style.height = '420px';
826
+ div.style.background = 'rgba(244,63,94,0.25)'; div.style.border = '2px dashed #f43f5e';
827
+ div.style.borderRadius = '16px'; div.style.display = 'flex'; div.style.alignItems = 'center';
828
+ div.style.justifyContent = 'center'; div.style.color = '#fff'; div.style.fontWeight = '600';
829
+ div.textContent = id + (char.expression ? ' (' + char.expression + ')' : '');
830
+ }
831
+ };
832
+ div.appendChild(img);
833
+ this.charsEl.appendChild(div);
834
+ rec = { div, img, expression: char.expression, position: char.position };
835
+ this.activeChars.set(id, rec);
836
+ } else {
837
+ rec.div.className = posClass;
838
+ if (rec.expression !== char.expression) {
839
+ rec.expression = char.expression;
840
+ rec.img.style.display = 'block';
841
+ rec.img.src = primarySrc;
714
842
  }
715
- };
716
- div.appendChild(img);
717
- this.charsEl.appendChild(div);
843
+ }
718
844
  }
719
845
 
720
846
  if (state.dialogue) {
@@ -768,7 +894,6 @@ function getInlineRuntimeScript() {
768
894
  <button class="kawa-btn kawa-btn-load-end">📂 Load Slot</button>
769
895
  </div>\`;
770
896
  endCard.querySelector('.kawa-btn-replay').addEventListener('click', () => {
771
- sessionStorage.removeItem('kawaijs_dev_state');
772
897
  window.location.reload();
773
898
  });
774
899
  endCard.querySelector('.kawa-btn-load-end').addEventListener('click', () => {
@@ -878,7 +1003,24 @@ function getInlineRuntimeScript() {
878
1003
  this.rootEl.appendChild(ov);
879
1004
  }
880
1005
  }
1006
+ function preloadAssets(story) {
1007
+ if (typeof window === 'undefined') return;
1008
+ for (const list of Object.values(story.labels || {})) {
1009
+ for (const inst of list) {
1010
+ if (inst.type === 'scene' && inst.background) {
1011
+ const clean = inst.background.replace(/^bg[\s_]+/i, '').trim();
1012
+ const img = new Image();
1013
+ img.src = '/assets/backgrounds/' + (clean.includes('.') ? clean : clean + '.svg');
1014
+ } else if (inst.type === 'show') {
1015
+ const expr = inst.expression ? '/' + inst.expression : '';
1016
+ const img = new Image();
1017
+ img.src = '/assets/characters/' + inst.character + expr + '.svg';
1018
+ }
1019
+ }
1020
+ }
1021
+ }
881
1022
  function mountKawaApp(story, container) {
1023
+ preloadAssets(story);
882
1024
  const vm = new StoryVM(story);
883
1025
  const audio = new AudioManager();
884
1026
  const audioResolver = (track, channel) => {
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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S,sBAAsB;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2pBN,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kawaijs",
3
- "version": "0.1.7",
3
+ "version": "0.1.10",
4
4
  "description": "Web-native visual novel engine and toolchain inspired by Ren'Py",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -31,12 +31,12 @@
31
31
  "typecheck": "tsc --noEmit"
32
32
  },
33
33
  "dependencies": {
34
- "@kawaijs/ast": "^0.1.7",
35
- "@kawaijs/parser": "^0.1.7",
36
- "@kawaijs/runtime": "^0.1.7",
37
- "@kawaijs/renderer-dom": "^0.1.7",
38
- "@kawaijs/audio": "^0.1.7",
39
- "@kawaijs/vite-plugin": "^0.1.7"
34
+ "@kawaijs/ast": "^0.1.10",
35
+ "@kawaijs/parser": "^0.1.10",
36
+ "@kawaijs/runtime": "^0.1.10",
37
+ "@kawaijs/renderer-dom": "^0.1.10",
38
+ "@kawaijs/audio": "^0.1.10",
39
+ "@kawaijs/vite-plugin": "^0.1.10"
40
40
  },
41
41
  "keywords": [
42
42
  "kawaijs",