@novely/core 0.12.5 → 0.14.0

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.
@@ -21,6 +21,10 @@ var Novely = (() => {
21
21
  // src/index.ts
22
22
  var src_exports = {};
23
23
  __export(src_exports, {
24
+ EN: () => EN,
25
+ JP: () => JP,
26
+ KK: () => KK,
27
+ RU: () => RU,
24
28
  localStorageStorage: () => localStorageStorage,
25
29
  novely: () => novely
26
30
  });
@@ -103,13 +107,20 @@ var Novely = (() => {
103
107
  }
104
108
  return -1;
105
109
  };
106
- var createDeferredPromise = () => {
110
+ var createControlledPromise = () => {
107
111
  let resolve, reject;
108
112
  const promise = new Promise((res, rej) => {
109
113
  resolve = res;
110
114
  reject = rej;
111
115
  });
112
- return { resolve, reject, promise };
116
+ return {
117
+ resolve,
118
+ reject,
119
+ promise,
120
+ reset() {
121
+ Object.assign(this, createControlledPromise());
122
+ }
123
+ };
113
124
  };
114
125
  var findLastPathItemBeforeItemOfType = (path, name) => {
115
126
  const index = findLastIndex(path, ([_name, _value], next) => {
@@ -131,6 +142,20 @@ var Novely = (() => {
131
142
  var isAction = (element) => {
132
143
  return Array.isArray(element) && isString(element[0]);
133
144
  };
145
+ var flattenStory = (story) => {
146
+ const entries = Object.entries(story).map(([name, items]) => {
147
+ const flat = (item) => {
148
+ return item.flatMap((data) => {
149
+ const type = data[0];
150
+ if (Array.isArray(type))
151
+ return flat(data);
152
+ return [data];
153
+ });
154
+ };
155
+ return [name, flat(items)];
156
+ });
157
+ return Object.fromEntries(entries);
158
+ };
134
159
 
135
160
  // src/global.ts
136
161
  var PRELOADED_ASSETS = /* @__PURE__ */ new Set();
@@ -256,40 +281,79 @@ var Novely = (() => {
256
281
  return val;
257
282
  }
258
283
 
259
- // ../t9n/dist/index.js
260
- var g = (e, r) => {
261
- let o = [];
262
- for (let a of r) {
263
- if (!e)
284
+ // src/translation.ts
285
+ var RGX = /{{(.*?)}}/g;
286
+ var split = (input, delimeters) => {
287
+ const output = [];
288
+ for (const delimeter of delimeters) {
289
+ if (!input)
264
290
  break;
265
- let [n, i] = e.split(a, 2);
266
- o.push(n), e = i;
291
+ const [start, end] = input.split(delimeter, 2);
292
+ output.push(start);
293
+ input = end;
267
294
  }
268
- return o.push(e), o;
269
- };
270
- var c = /{{(.*?)}}/g;
271
- var l = (e) => Array.isArray(e) ? e.map((r) => l(r)).join("<br>") : typeof e == "function" ? l(e()) : e;
272
- var x = (e, r, o, a, n) => l(e).replaceAll(c, (i, s, t) => {
273
- i = 0, t = r;
274
- let [u, S, p] = g(s.trim(), ["@", "%"]);
275
- if (!u)
276
- return "";
277
- let m = u.split(".");
278
- for (; t && i < m.length; )
279
- t = t[m[i++]];
280
- S && o && t && n && (t = o[S][n.select(t)]);
281
- let d = a && p && a[p];
282
- return d && (t = d(t)), t ?? "";
283
- });
295
+ output.push(input);
296
+ return output;
297
+ };
298
+ var unwrap = (c) => {
299
+ if (Array.isArray(c)) {
300
+ return c.map((item) => unwrap(item)).join("<br>");
301
+ }
302
+ if (typeof c === "function") {
303
+ return unwrap(c());
304
+ }
305
+ return c;
306
+ };
307
+ var replace = (str2, obj, pluralization, actions, pr) => {
308
+ return unwrap(str2).replaceAll(RGX, (x, key, y) => {
309
+ x = 0;
310
+ y = obj;
311
+ const [pathstr, plural, action] = split(key.trim(), ["@", "%"]);
312
+ if (!pathstr) {
313
+ return "";
314
+ }
315
+ const path = pathstr.split(".");
316
+ while (y && x < path.length)
317
+ y = y[path[x++]];
318
+ if (plural && pluralization && y && pr) {
319
+ y = pluralization[plural][pr.select(y)];
320
+ }
321
+ const actionHandler = actions && action && actions[action];
322
+ if (actionHandler)
323
+ y = actionHandler(y);
324
+ return y == null ? "" : y;
325
+ });
326
+ };
327
+
328
+ // src/storage.ts
329
+ var localStorageStorage = (options) => {
330
+ return {
331
+ async get() {
332
+ const fallback = { saves: [], data: {}, meta: [] };
333
+ try {
334
+ const value = localStorage.getItem(options.key);
335
+ return value ? JSON.parse(value) : fallback;
336
+ } catch {
337
+ return fallback;
338
+ }
339
+ },
340
+ async set(data) {
341
+ try {
342
+ localStorage.setItem(options.key, JSON.stringify(data));
343
+ } catch {
344
+ }
345
+ }
346
+ };
347
+ };
284
348
 
285
349
  // src/novely.ts
286
350
  var novely = ({
287
351
  characters,
288
- storage,
352
+ storage = localStorageStorage({ key: "novely-game-storage" }),
289
353
  storageDelay = Promise.resolve(),
290
354
  renderer: createRenderer,
291
355
  initialScreen = "mainmenu",
292
- t9n,
356
+ translation,
293
357
  languages,
294
358
  state: defaultState,
295
359
  data: defaultData,
@@ -301,29 +365,20 @@ var Novely = (() => {
301
365
  askBeforeExit = true,
302
366
  preloadAssets = "lazy"
303
367
  }) => {
304
- let story;
368
+ const story = {};
305
369
  const times = /* @__PURE__ */ new Set();
306
370
  const ASSETS_TO_PRELOAD = /* @__PURE__ */ new Set();
307
- const assetsLoaded = createDeferredPromise();
371
+ const assetsLoaded = createControlledPromise();
308
372
  defaultData ||= {};
309
373
  defaultState ||= {};
310
374
  const intime = (value) => {
311
375
  return times.add(value), value;
312
376
  };
313
- const withStory = async (s) => {
314
- story = Object.fromEntries(
315
- Object.entries(s).map(([name, items]) => {
316
- const flat = (item) => {
317
- return item.flatMap((data2) => {
318
- const type = data2[0];
319
- if (Array.isArray(type))
320
- return flat(data2);
321
- return [data2];
322
- });
323
- };
324
- return [name, flat(items)];
325
- })
326
- );
377
+ const script = (part) => {
378
+ Object.assign(story, flattenStory(part));
379
+ };
380
+ const withStory = async (story2) => {
381
+ script(story2);
327
382
  if (preloadAssets === "blocking" && ASSETS_TO_PRELOAD.size > 0) {
328
383
  renderer.ui.showScreen("loading");
329
384
  await renderer.misc.preloadImagesBlocking(ASSETS_TO_PRELOAD);
@@ -365,7 +420,7 @@ var Novely = (() => {
365
420
  const getDefaultSave = (state2 = {}) => {
366
421
  return [
367
422
  [
368
- [null, "start"],
423
+ ["jump", "start"],
369
424
  [null, 0]
370
425
  ],
371
426
  state2,
@@ -410,6 +465,9 @@ var Novely = (() => {
410
465
  storage.set(value);
411
466
  };
412
467
  const throttledOnStorageDataChange = throttle(onStorageDataChange, throttleTimeout);
468
+ const throttledEmergencyOnStorageDataChange = throttle(() => {
469
+ onStorageDataChange($.get());
470
+ }, 10);
413
471
  $.subscribe(throttledOnStorageDataChange);
414
472
  const getStoredData = async () => {
415
473
  let stored = await storage.get();
@@ -437,12 +495,10 @@ var Novely = (() => {
437
495
  const stack = createStack(initial);
438
496
  addEventListener("visibilitychange", () => {
439
497
  if (document.visibilityState === "hidden") {
440
- onStorageDataChange($.get());
498
+ throttledEmergencyOnStorageDataChange();
441
499
  }
442
500
  });
443
- addEventListener("beforeunload", () => {
444
- onStorageDataChange($.get());
445
- });
501
+ addEventListener("beforeunload", throttledEmergencyOnStorageDataChange);
446
502
  const save = (override = false, type = override ? "auto" : "manual") => {
447
503
  if (!$$.get().dataLoaded)
448
504
  return;
@@ -513,7 +569,10 @@ var Novely = (() => {
513
569
  const characters2 = /* @__PURE__ */ new Set();
514
570
  const blocks = [];
515
571
  for (const [type, val] of path) {
516
- if (type === null) {
572
+ if (type === "jump") {
573
+ precurrent = story;
574
+ current = current[val];
575
+ } else if (type === null) {
517
576
  precurrent = current;
518
577
  if (isNumber(val)) {
519
578
  index++;
@@ -610,7 +669,11 @@ var Novely = (() => {
610
669
  let precurrent = story;
611
670
  const blocks = [];
612
671
  for (const [type, val] of path) {
613
- if (type === null) {
672
+ console.log(type, val);
673
+ if (type === "jump") {
674
+ precurrent = story;
675
+ current = current[val];
676
+ } else if (type === null) {
614
677
  precurrent = current;
615
678
  current = current[val];
616
679
  } else if (type === "choice") {
@@ -649,6 +712,9 @@ var Novely = (() => {
649
712
  const back = () => {
650
713
  return stack.back(), restore(stack.value);
651
714
  };
715
+ const t = (key, lang) => {
716
+ return translation[lang].internal[key];
717
+ };
652
718
  const renderer = createRenderer({
653
719
  characters,
654
720
  set,
@@ -657,9 +723,9 @@ var Novely = (() => {
657
723
  newGame,
658
724
  exit,
659
725
  back,
726
+ t,
660
727
  stack,
661
728
  languages,
662
- t: t9n.i,
663
729
  $,
664
730
  $$
665
731
  });
@@ -692,11 +758,11 @@ var Novely = (() => {
692
758
  },
693
759
  dialog([character, content, emotion]) {
694
760
  const name = (() => {
695
- const c2 = character;
761
+ const c = character;
696
762
  const cs = characters;
697
763
  const lang = $.get().meta[0];
698
- if (c2 && c2 in cs) {
699
- const block = cs[c2].name;
764
+ if (c && c in cs) {
765
+ const block = cs[c].name;
700
766
  if (typeof block === "string") {
701
767
  return block;
702
768
  }
@@ -704,9 +770,9 @@ var Novely = (() => {
704
770
  return block[lang];
705
771
  }
706
772
  }
707
- return c2 || "";
773
+ return c || "";
708
774
  })();
709
- const run = renderer.dialog(unwrap(content), unwrap(name), character, emotion);
775
+ const run = renderer.dialog(unwrap2(content), unwrap2(name), character, emotion);
710
776
  run(forward, goingBack);
711
777
  },
712
778
  function([fn]) {
@@ -722,10 +788,10 @@ var Novely = (() => {
722
788
  question = "";
723
789
  }
724
790
  const unwrapped = choices.map(([content, action2, visible]) => {
725
- return [unwrap(content), action2, visible];
791
+ return [unwrap2(content), action2, visible];
726
792
  });
727
793
  const run = renderer.choices(
728
- unwrap(question),
794
+ unwrap2(question),
729
795
  unwrapped
730
796
  );
731
797
  run((selected) => {
@@ -738,7 +804,7 @@ var Novely = (() => {
738
804
  },
739
805
  jump([scene]) {
740
806
  stack.value[0] = [
741
- [null, scene],
807
+ ["jump", scene],
742
808
  [null, -1]
743
809
  ];
744
810
  match("clear", []);
@@ -764,7 +830,7 @@ var Novely = (() => {
764
830
  times.clear();
765
831
  },
766
832
  input([question, onInput, setup]) {
767
- renderer.input(unwrap(question), onInput, setup)(forward);
833
+ renderer.input(unwrap2(question), onInput, setup)(forward);
768
834
  },
769
835
  custom([handler]) {
770
836
  const result = renderer.custom(handler, goingBack, () => {
@@ -804,7 +870,7 @@ var Novely = (() => {
804
870
  match("custom", [handler]);
805
871
  },
806
872
  text(text) {
807
- renderer.text(text.map((content) => unwrap(content)).join(" "), forward, goingBack);
873
+ renderer.text(text.map((content) => unwrap2(content)).join(" "), forward, goingBack);
808
874
  },
809
875
  exit() {
810
876
  if (restoring)
@@ -869,7 +935,7 @@ var Novely = (() => {
869
935
  const next = () => {
870
936
  const path = stack.value[0];
871
937
  const last = path.at(-1);
872
- if (last && isNull(last[0]) && isNumber(last[1])) {
938
+ if (last && (isNull(last[0]) || last[0] === "jump") && isNumber(last[1])) {
873
939
  last[1]++;
874
940
  } else {
875
941
  path.push([null, 0]);
@@ -896,15 +962,19 @@ var Novely = (() => {
896
962
  const interactivity = (value = false) => {
897
963
  interacted = value ? interacted + 1 : 0;
898
964
  };
899
- const unwrap = (content, global = false) => {
965
+ const unwrap2 = (content, global = false) => {
900
966
  const {
901
967
  data: data2,
902
968
  meta: [lang]
903
969
  } = $.get();
904
970
  const obj = global ? data2 : state();
905
- const cnt = isFunction(content) ? content(lang, obj) : typeof content === "string" ? content : content[lang];
971
+ const cnt = isFunction(content) ? content() : typeof content === "string" ? content : content[lang];
906
972
  const str2 = isFunction(cnt) ? cnt() : cnt;
907
- return x(str2, obj);
973
+ const trans = translation[lang];
974
+ if (trans.actions || trans.plural) {
975
+ return replace(str2, obj, trans.plural, trans.actions, new Intl.PluralRules(trans.tag || lang));
976
+ }
977
+ return replace(str2, obj);
908
978
  };
909
979
  function data(value) {
910
980
  if (!value)
@@ -937,26 +1007,143 @@ var Novely = (() => {
937
1007
  * Unwraps translatable content to a string value
938
1008
  */
939
1009
  unwrap(content) {
940
- return unwrap(content, true);
941
- },
942
- /**
943
- * Function that is used for translation
944
- */
945
- t: t9n.t
1010
+ return unwrap2(content, true);
1011
+ }
946
1012
  };
947
1013
  };
948
1014
 
949
- // src/storage.ts
950
- var localStorageStorage = (options) => {
951
- return {
952
- async get() {
953
- const value = localStorage.getItem(options.key);
954
- return value ? JSON.parse(value) : { saves: [], data: {}, meta: [] };
955
- },
956
- async set(data) {
957
- localStorage.setItem(options.key, JSON.stringify(data));
958
- }
959
- };
1015
+ // src/translations.ts
1016
+ var RU = {
1017
+ NewGame: "\u041D\u043E\u0432\u0430\u044F \u0438\u0433\u0440\u0430",
1018
+ HomeScreen: "\u0413\u043B\u0430\u0432\u043D\u044B\u0439 \u044D\u043A\u0440\u0430\u043D",
1019
+ ToTheGame: "\u041A \u0438\u0433\u0440\u0435",
1020
+ Language: "\u042F\u0437\u044B\u043A",
1021
+ NoSaves: "\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0439 \u043D\u0435\u0442",
1022
+ LoadSave: "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C",
1023
+ Saves: "\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F",
1024
+ Settings: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438",
1025
+ Sumbit: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C",
1026
+ GoBack: "\u041D\u0430\u0437\u0430\u0434",
1027
+ DoSave: "\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435",
1028
+ Auto: "\u0410\u0432\u0442\u043E",
1029
+ Stop: "\u0421\u0442\u043E\u043F",
1030
+ Exit: "\u0412\u044B\u0445\u043E\u0434",
1031
+ Automatic: "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435",
1032
+ Manual: "\u0420\u0443\u0447\u043D\u043E\u0435",
1033
+ Remove: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C",
1034
+ LoadASaveFrom: "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u043E\u0442",
1035
+ DeleteASaveFrom: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u043E\u0442",
1036
+ TextSpeed: "\u0421\u043A\u043E\u0440\u043E\u0441\u0442\u044C \u0422\u0435\u043A\u0441\u0442\u0430",
1037
+ TextSpeedSlow: "\u041C\u0435\u0434\u043B\u0435\u043D\u043D\u0430\u044F",
1038
+ TextSpeedMedium: "\u0421\u0440\u0435\u0434\u043D\u044F\u044F",
1039
+ TextSpeedFast: "\u0411\u044B\u0441\u0442\u0440\u0430\u044F",
1040
+ TextSpeedAuto: "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0430\u044F",
1041
+ CompleteText: "\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C \u0442\u0435\u043A\u0441\u0442",
1042
+ GoForward: "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432\u043F\u0435\u0440\u0451\u0434",
1043
+ ExitDialogWarning: "\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0432\u044B\u0439\u0442\u0438? \u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u0431\u0443\u0434\u0435\u0442 \u0441\u043E\u0445\u0440\u0430\u043D\u0451\u043D.",
1044
+ ExitDialogExit: "\u0412\u044B\u0439\u0442\u0438",
1045
+ ExitDialogBack: "\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u0432 \u0438\u0433\u0440\u0443",
1046
+ OpenMenu: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043C\u0435\u043D\u044E",
1047
+ CloseMenu: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u043C\u0435\u043D\u044E"
1048
+ };
1049
+ var EN = {
1050
+ NewGame: "New Game",
1051
+ HomeScreen: "Home Screen",
1052
+ ToTheGame: "To the Game",
1053
+ Language: "Language",
1054
+ NoSaves: "No saves",
1055
+ LoadSave: "Load",
1056
+ Saves: "Saves",
1057
+ Settings: "Settings",
1058
+ Sumbit: "Submit",
1059
+ GoBack: "Go back",
1060
+ DoSave: "Save",
1061
+ Auto: "Auto",
1062
+ Stop: "Stop",
1063
+ Exit: "Exit",
1064
+ Automatic: "Automatic",
1065
+ Manual: "Manual",
1066
+ Remove: "Remove",
1067
+ LoadASaveFrom: "Load a save from",
1068
+ DeleteASaveFrom: "Delete a save from",
1069
+ TextSpeed: "Text Speed",
1070
+ TextSpeedSlow: "Slow",
1071
+ TextSpeedMedium: "Medium",
1072
+ TextSpeedFast: "Fast",
1073
+ TextSpeedAuto: "Auto",
1074
+ CompleteText: "Complete text",
1075
+ GoForward: "Go forward",
1076
+ ExitDialogWarning: "Are you sure you want to exit? Progress will be saved.",
1077
+ ExitDialogExit: "Exit",
1078
+ ExitDialogBack: "Return to game",
1079
+ OpenMenu: "Open menu",
1080
+ CloseMenu: "Close menu"
1081
+ };
1082
+ var KK = {
1083
+ NewGame: "\u0416\u0430\u04A3\u0430 \u043E\u0439\u044B\u043D",
1084
+ HomeScreen: "\u041D\u0435\u0433\u0456\u0437\u0433\u0456 \u044D\u043A\u0440\u0430\u043D",
1085
+ ToTheGame: "\u041E\u0439\u044B\u043D\u0493\u0430",
1086
+ Language: "\u0422\u0456\u043B",
1087
+ NoSaves: "\u0421\u0430\u049B\u0442\u0430\u0443 \u0436\u043E\u049B",
1088
+ LoadSave: "\u0416\u04AF\u043A\u0442\u0435\u0443",
1089
+ Saves: "\u0421\u0430\u049B\u0442\u0430\u0443",
1090
+ Settings: "\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043B\u0435\u0440",
1091
+ Sumbit: "\u0420\u0430\u0441\u0442\u0430\u0443",
1092
+ GoBack: "\u0410\u0440\u0442\u049B\u0430",
1093
+ DoSave: "\u0421\u0430\u049B\u0442\u0430\u0443",
1094
+ Auto: "\u0410\u0432\u0442\u043E",
1095
+ Stop: "\u0422\u043E\u049B\u0442\u0430",
1096
+ Exit: "\u0428\u044B\u0493\u0443",
1097
+ Automatic: "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0442\u044B",
1098
+ Manual: "\u049A\u043E\u043B\u043C\u0435\u043D",
1099
+ Remove: "\u0416\u043E\u044E",
1100
+ LoadASaveFrom: "\u0421\u0430\u049B\u0442\u0430\u0443\u0434\u044B \u0436\u04AF\u043A\u0442\u0435\u0443",
1101
+ DeleteASaveFrom: "\u0421\u0430\u049B\u0442\u0430\u0443\u0434\u044B \u0436\u043E\u044E",
1102
+ TextSpeed: "\u041C\u04D9\u0442\u0456\u043D \u0416\u044B\u043B\u0434\u0430\u043C\u0434\u044B\u0493\u044B",
1103
+ TextSpeedSlow: "\u0411\u0430\u044F\u0443",
1104
+ TextSpeedMedium: "\u041E\u0440\u0442\u0430\u0448\u0430",
1105
+ TextSpeedFast: "\u0416\u044B\u043B\u0434\u0430\u043C",
1106
+ TextSpeedAuto: "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0442\u044B",
1107
+ CompleteText: "\u041C\u04D9\u0442\u0456\u043D\u0434\u0456 \u0430\u044F\u049B\u0442\u0430\u0443",
1108
+ GoForward: "\u0410\u043B\u0493\u0430 \u0436\u044B\u043B\u0436\u0443",
1109
+ ExitDialogWarning: "\u0421\u0456\u0437 \u0448\u044B\u049B\u049B\u044B\u04A3\u044B\u0437 \u043A\u0435\u043B\u0435\u0442\u0456\u043D\u0456\u043D\u0435 \u0441\u0435\u043D\u0456\u043C\u0434\u0456\u0441\u0456\u0437 \u0431\u0435? \u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u0441\u0430\u049B\u0442\u0430\u043B\u0430\u0434\u044B",
1110
+ ExitDialogExit: "\u0428\u044B\u0493\u0443",
1111
+ ExitDialogBack: "\u041E\u0439\u044B\u043D\u0493\u0430 \u043E\u0440\u0430\u043B\u0443",
1112
+ OpenMenu: "\u041C\u04D9\u0437\u0456\u0440\u0434\u0456 \u0430\u0448\u044B\u04A3\u044B\u0437",
1113
+ CloseMenu: "\u041C\u04D9\u0437\u0456\u0440\u0434\u0456 \u0436\u0430\u0431\u0443"
1114
+ };
1115
+ var JP = {
1116
+ NewGame: "\u300C\u65B0\u3057\u3044\u30B2\u30FC\u30E0\u300D",
1117
+ HomeScreen: "\u30DB\u30FC\u30E0\u753B\u9762",
1118
+ ToTheGame: "\u300C\u30B2\u30FC\u30E0\u306B\u623B\u308B\u300D",
1119
+ Language: "\u8A00\u8A9E",
1120
+ NoSaves: "\u30CE\u30FC\u30BB\u30FC\u30D6",
1121
+ LoadSave: "\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",
1122
+ Saves: "\u4FDD\u5B58",
1123
+ Settings: "\u8A2D\u5B9A",
1124
+ Sumbit: "\u78BA\u8A8D",
1125
+ GoBack: "\u300C\u623B\u308B\u300D",
1126
+ DoSave: "\u4FDD\u5B58",
1127
+ Auto: "\u30AA\u30FC\u30C8",
1128
+ Stop: "\u6B62\u307E\u308C",
1129
+ Exit: "\u51FA\u53E3",
1130
+ Automatic: "\u81EA\u52D5",
1131
+ Manual: "\u30DE\u30CB\u30E5\u30A2\u30EB",
1132
+ Remove: "\u524A\u9664",
1133
+ LoadASaveFrom: "\u30ED\u30FC\u30C9\u30BB\u30FC\u30D6\u304B\u3089",
1134
+ DeleteASaveFrom: "\u304B\u3089\u4FDD\u5B58\u3092\u524A\u9664",
1135
+ TextSpeed: "\u30C6\u30AD\u30B9\u30C8\u30B9\u30D4\u30FC\u30C9",
1136
+ TextSpeedSlow: "\u300C\u9045\u3044\u300D",
1137
+ TextSpeedMedium: "\u30DF\u30C7\u30A3\u30A2\u30E0",
1138
+ TextSpeedFast: "\u300C\u901F\u3044\u300D",
1139
+ TextSpeedAuto: "\u81EA\u52D5",
1140
+ CompleteText: "\u30C6\u30AD\u30B9\u30C8\u3092\u5B8C\u6210\u3055\u305B\u308B",
1141
+ GoForward: "\u5148\u306B\u884C\u304F",
1142
+ ExitDialogWarning: "\u672C\u5F53\u306B\u7D42\u4E86\u3057\u307E\u3059\u304B\uFF1F\u9032\u884C\u72B6\u6CC1\u306F\u4FDD\u5B58\u3055\u308C\u307E\u3059",
1143
+ ExitDialogExit: "\u7D42\u4E86",
1144
+ ExitDialogBack: "\u30B2\u30FC\u30E0\u306B\u623B\u308B",
1145
+ OpenMenu: "\u30E1\u30CB\u30E5\u30FC\u3092\u958B\u304F",
1146
+ CloseMenu: "\u30E1\u30CB\u30E5\u30FC\u3092\u9589\u3058\u308B"
960
1147
  };
961
1148
  return __toCommonJS(src_exports);
962
1149
  })();