@novely/core 0.12.5 → 0.13.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.
package/README.md CHANGED
@@ -1,3 +1,5 @@
1
1
  # @novely/core
2
2
 
3
- Novely - движок визуальных новелл для создания интерактивных историй и игр.
3
+ Novely - Novel Engine for creating interactive stories
4
+
5
+ See more on [website](https://novely.pages.dev)
package/dist/index.d.ts CHANGED
@@ -1,7 +1,3 @@
1
- import * as _novely_t9n from '@novely/t9n';
2
- import { BaseTranslationStrings, SetupT9N } from '@novely/t9n';
3
- export { BaseTranslationStrings } from '@novely/t9n';
4
-
5
1
  type Name<Keys extends string = string> = string | Record<Keys, string>;
6
2
  type Emotions<Keys extends string = string> = Record<Keys, string | {
7
3
  body: Record<'left' | 'right', string>;
@@ -51,7 +47,7 @@ type CoreData = {
51
47
 
52
48
  type ValidAction = ['choice', [number]] | ['clear', [Set<keyof DefaultActionProxyProvider>?, Set<string>?]] | ['condition', [() => boolean, Record<string, ValidAction[]>]] | ['dialog', [string | undefined, Unwrappable, string | undefined]] | ['end', []] | ['showBackground', [string | NonEmptyRecord<BackgroundImage>]] | ['playMusic', [string]] | ['stopMusic', [string]] | ['jump', [string]] | ['showCharacter', [string, keyof Character['emotions'], string?, string?]] | ['hideCharacter', [string, string?, string?, number?]] | ['animateCharacter', [string, number, ...string[]]] | ['wait', [FunctionableValue<number>]] | ['function', [() => Thenable<void>]] | ['input', [string, (meta: ActionInputOnInputMeta) => void, ActionInputSetup?]] | ['custom', [CustomHandler]] | ['vibrate', [...number[]]] | ['next', []] | ['text', [...string[]]] | ['exit', []] | ['preload', [string]] | ['block', [string]] | ValidAction[];
53
49
  type Story = Record<string, ValidAction[]>;
54
- type Unwrappable = string | ((lang: string, obj: Record<string, unknown>) => string) | Record<string, string | (() => string)>;
50
+ type Unwrappable = string | Record<string, string | (() => string)>;
55
51
  type FunctionableValue<T> = T | (() => T);
56
52
  type CustomHandlerGetResultDataFunction = {
57
53
  (data?: Record<string, unknown>): Record<string, unknown>;
@@ -141,6 +137,50 @@ type ActionProxyProvider<Characters extends Record<string, Character>> = {
141
137
  type DefaultActionProxyProvider = ActionProxyProvider<Record<string, Character>>;
142
138
  type GetActionParameters<T extends Capitalize<keyof DefaultActionProxyProvider>> = Parameters<DefaultActionProxyProvider[Uncapitalize<T>]>;
143
139
 
140
+ declare const RU: {
141
+ NewGame: string;
142
+ HomeScreen: string;
143
+ ToTheGame: string;
144
+ Language: string;
145
+ NoSaves: string;
146
+ LoadSave: string;
147
+ Saves: string;
148
+ Settings: string;
149
+ Sumbit: string;
150
+ GoBack: string;
151
+ DoSave: string;
152
+ Auto: string;
153
+ Stop: string;
154
+ Exit: string;
155
+ Automatic: string;
156
+ Manual: string;
157
+ Remove: string;
158
+ LoadASaveFrom: string;
159
+ DeleteASaveFrom: string;
160
+ TextSpeed: string;
161
+ TextSpeedSlow: string;
162
+ TextSpeedMedium: string;
163
+ TextSpeedFast: string;
164
+ TextSpeedAuto: string;
165
+ CompleteText: string;
166
+ GoForward: string;
167
+ ExitDialogWarning: string;
168
+ ExitDialogExit: string;
169
+ ExitDialogBack: string;
170
+ OpenMenu: string;
171
+ CloseMenu: string;
172
+ };
173
+ type BaseTranslationStrings = keyof typeof RU;
174
+ declare const EN: Record<BaseTranslationStrings, string>;
175
+ /**
176
+ * Translated automatically
177
+ */
178
+ declare const KK: Record<BaseTranslationStrings, string>;
179
+ /**
180
+ * Translated automatically
181
+ */
182
+ declare const JP: Record<BaseTranslationStrings, string>;
183
+
144
184
  type Stored<T> = {
145
185
  subscribe: (cb: (value: T) => void) => () => void;
146
186
  update: (fn: (prev: T) => T) => void;
@@ -243,9 +283,14 @@ interface Storage {
243
283
  }
244
284
  declare const localStorageStorage: (options: LocalStorageStorageSettings) => Storage;
245
285
 
286
+ type PluralType = Intl.LDMLPluralRule;
287
+ type Pluralization = Partial<Record<PluralType, string>>;
288
+ type AllowedContent = string | (() => string | string[]) | string[] | (string | (() => string | string[]))[];
289
+ type TranslationActions = Partial<Record<string, (str: string) => string>>;
290
+
246
291
  declare const getLanguage: (languages: string[]) => string;
247
292
 
248
- interface NovelyInit<Languages extends string, Characters extends Record<string, Character<Languages>>, Inter extends ReturnType<SetupT9N<Languages>>, StateScheme extends State, DataScheme extends Data> {
293
+ interface NovelyInit<Languages extends string, Characters extends Record<string, Character<Languages>>, StateScheme extends State, DataScheme extends Data> {
249
294
  /**
250
295
  * An array of languages supported by the game.
251
296
  */
@@ -256,8 +301,9 @@ interface NovelyInit<Languages extends string, Characters extends Record<string,
256
301
  characters: Characters;
257
302
  /**
258
303
  * An object that provides access to the game's storage system.
304
+ * @default localStorage // at key `novely-game-storage`
259
305
  */
260
- storage: Storage;
306
+ storage?: Storage;
261
307
  /**
262
308
  * Delay loading data until Promise is resolved
263
309
  */
@@ -273,7 +319,15 @@ interface NovelyInit<Languages extends string, Characters extends Record<string,
273
319
  /**
274
320
  * An object containing the translation functions used in the game
275
321
  */
276
- t9n: Inter;
322
+ translation: Record<Languages, {
323
+ internal: Record<BaseTranslationStrings, string>;
324
+ /**
325
+ * IETF BCP 47 language tag
326
+ */
327
+ tag?: string;
328
+ plural?: Record<string, Pluralization>;
329
+ actions?: TranslationActions;
330
+ }>;
277
331
  /**
278
332
  * Initial state value
279
333
  */
@@ -324,7 +378,7 @@ interface NovelyInit<Languages extends string, Characters extends Record<string,
324
378
  */
325
379
  preloadAssets?: "lazy" | "blocking";
326
380
  }
327
- declare const novely: <Languages extends string, Characters extends Record<string, Character<Languages>>, Inter extends _novely_t9n.T9N<Languages, string>, StateScheme extends State, DataScheme extends Data>({ characters, storage, storageDelay, renderer: createRenderer, initialScreen, t9n, languages, state: defaultState, data: defaultData, autosaves, migrations, throttleTimeout, getLanguage, overrideLanguage, askBeforeExit, preloadAssets }: NovelyInit<Languages, Characters, Inter, StateScheme, DataScheme>) => {
381
+ declare const novely: <Languages extends string, Characters extends Record<string, Character<Languages>>, StateScheme extends State, DataScheme extends Data>({ characters, storage, storageDelay, renderer: createRenderer, initialScreen, translation, languages, state: defaultState, data: defaultData, autosaves, migrations, throttleTimeout, getLanguage, overrideLanguage, askBeforeExit, preloadAssets }: NovelyInit<Languages, Characters, StateScheme, DataScheme>) => {
328
382
  /**
329
383
  * Function to set story
330
384
  */
@@ -351,10 +405,6 @@ declare const novely: <Languages extends string, Characters extends Record<strin
351
405
  * Unwraps translatable content to a string value
352
406
  */
353
407
  unwrap(content: Unwrappable | Record<Languages, string>): string;
354
- /**
355
- * Function that is used for translation
356
- */
357
- t: Inter["t"];
358
408
  };
359
409
 
360
- export { ActionProxyProvider, AudioHandle, Character, CharacterHandle, CoreData, CustomHandler, CustomHandlerGetResult, CustomHandlerGetResultDataFunction, DefaultActionProxyProvider, Emotions, FunctionableValue, GetActionParameters, Lang, NovelyScreen, Path, Renderer, RendererInit, RendererStore, Storage, StorageData, StorageMeta, Stored, Story, Thenable, TypewriterSpeed, Unwrappable, ValidAction, localStorageStorage, novely };
410
+ export { ActionProxyProvider, AllowedContent, AudioHandle, BaseTranslationStrings, Character, CharacterHandle, CoreData, CustomHandler, CustomHandlerGetResult, CustomHandlerGetResultDataFunction, DefaultActionProxyProvider, EN, Emotions, FunctionableValue, GetActionParameters, JP, KK, Lang, NovelyScreen, Path, PluralType, Pluralization, RU, Renderer, RendererInit, RendererStore, Storage, StorageData, StorageMeta, Stored, Story, Thenable, TranslationActions, TypewriterSpeed, Unwrappable, ValidAction, localStorageStorage, novely };
@@ -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
  });
@@ -256,40 +260,79 @@ var Novely = (() => {
256
260
  return val;
257
261
  }
258
262
 
259
- // ../t9n/dist/index.js
260
- var g = (e, r) => {
261
- let o = [];
262
- for (let a of r) {
263
- if (!e)
263
+ // src/translation.ts
264
+ var RGX = /{{(.*?)}}/g;
265
+ var split = (input, delimeters) => {
266
+ const output = [];
267
+ for (const delimeter of delimeters) {
268
+ if (!input)
264
269
  break;
265
- let [n, i] = e.split(a, 2);
266
- o.push(n), e = i;
270
+ const [start, end] = input.split(delimeter, 2);
271
+ output.push(start);
272
+ input = end;
267
273
  }
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
- });
274
+ output.push(input);
275
+ return output;
276
+ };
277
+ var unwrap = (c) => {
278
+ if (Array.isArray(c)) {
279
+ return c.map((item) => unwrap(item)).join("<br>");
280
+ }
281
+ if (typeof c === "function") {
282
+ return unwrap(c());
283
+ }
284
+ return c;
285
+ };
286
+ var replace = (str2, obj, pluralization, actions, pr) => {
287
+ return unwrap(str2).replaceAll(RGX, (x, key, y) => {
288
+ x = 0;
289
+ y = obj;
290
+ const [pathstr, plural, action] = split(key.trim(), ["@", "%"]);
291
+ if (!pathstr) {
292
+ return "";
293
+ }
294
+ const path = pathstr.split(".");
295
+ while (y && x < path.length)
296
+ y = y[path[x++]];
297
+ if (plural && pluralization && y && pr) {
298
+ y = pluralization[plural][pr.select(y)];
299
+ }
300
+ const actionHandler = actions && action && actions[action];
301
+ if (actionHandler)
302
+ y = actionHandler(y);
303
+ return y == null ? "" : y;
304
+ });
305
+ };
306
+
307
+ // src/storage.ts
308
+ var localStorageStorage = (options) => {
309
+ return {
310
+ async get() {
311
+ const fallback = { saves: [], data: {}, meta: [] };
312
+ try {
313
+ const value = localStorage.getItem(options.key);
314
+ return value ? JSON.parse(value) : fallback;
315
+ } catch {
316
+ return fallback;
317
+ }
318
+ },
319
+ async set(data) {
320
+ try {
321
+ localStorage.setItem(options.key, JSON.stringify(data));
322
+ } catch {
323
+ }
324
+ }
325
+ };
326
+ };
284
327
 
285
328
  // src/novely.ts
286
329
  var novely = ({
287
330
  characters,
288
- storage,
331
+ storage = localStorageStorage({ key: "novely-game-storage" }),
289
332
  storageDelay = Promise.resolve(),
290
333
  renderer: createRenderer,
291
334
  initialScreen = "mainmenu",
292
- t9n,
335
+ translation,
293
336
  languages,
294
337
  state: defaultState,
295
338
  data: defaultData,
@@ -410,6 +453,9 @@ var Novely = (() => {
410
453
  storage.set(value);
411
454
  };
412
455
  const throttledOnStorageDataChange = throttle(onStorageDataChange, throttleTimeout);
456
+ const throttledEmergencyOnStorageDataChange = throttle(() => {
457
+ onStorageDataChange($.get());
458
+ }, 10);
413
459
  $.subscribe(throttledOnStorageDataChange);
414
460
  const getStoredData = async () => {
415
461
  let stored = await storage.get();
@@ -437,12 +483,10 @@ var Novely = (() => {
437
483
  const stack = createStack(initial);
438
484
  addEventListener("visibilitychange", () => {
439
485
  if (document.visibilityState === "hidden") {
440
- onStorageDataChange($.get());
486
+ throttledEmergencyOnStorageDataChange();
441
487
  }
442
488
  });
443
- addEventListener("beforeunload", () => {
444
- onStorageDataChange($.get());
445
- });
489
+ addEventListener("beforeunload", throttledEmergencyOnStorageDataChange);
446
490
  const save = (override = false, type = override ? "auto" : "manual") => {
447
491
  if (!$$.get().dataLoaded)
448
492
  return;
@@ -649,6 +693,9 @@ var Novely = (() => {
649
693
  const back = () => {
650
694
  return stack.back(), restore(stack.value);
651
695
  };
696
+ const t = (key, lang) => {
697
+ return translation[lang].internal[key];
698
+ };
652
699
  const renderer = createRenderer({
653
700
  characters,
654
701
  set,
@@ -657,9 +704,9 @@ var Novely = (() => {
657
704
  newGame,
658
705
  exit,
659
706
  back,
707
+ t,
660
708
  stack,
661
709
  languages,
662
- t: t9n.i,
663
710
  $,
664
711
  $$
665
712
  });
@@ -692,11 +739,11 @@ var Novely = (() => {
692
739
  },
693
740
  dialog([character, content, emotion]) {
694
741
  const name = (() => {
695
- const c2 = character;
742
+ const c = character;
696
743
  const cs = characters;
697
744
  const lang = $.get().meta[0];
698
- if (c2 && c2 in cs) {
699
- const block = cs[c2].name;
745
+ if (c && c in cs) {
746
+ const block = cs[c].name;
700
747
  if (typeof block === "string") {
701
748
  return block;
702
749
  }
@@ -704,9 +751,9 @@ var Novely = (() => {
704
751
  return block[lang];
705
752
  }
706
753
  }
707
- return c2 || "";
754
+ return c || "";
708
755
  })();
709
- const run = renderer.dialog(unwrap(content), unwrap(name), character, emotion);
756
+ const run = renderer.dialog(unwrap2(content), unwrap2(name), character, emotion);
710
757
  run(forward, goingBack);
711
758
  },
712
759
  function([fn]) {
@@ -722,10 +769,10 @@ var Novely = (() => {
722
769
  question = "";
723
770
  }
724
771
  const unwrapped = choices.map(([content, action2, visible]) => {
725
- return [unwrap(content), action2, visible];
772
+ return [unwrap2(content), action2, visible];
726
773
  });
727
774
  const run = renderer.choices(
728
- unwrap(question),
775
+ unwrap2(question),
729
776
  unwrapped
730
777
  );
731
778
  run((selected) => {
@@ -764,7 +811,7 @@ var Novely = (() => {
764
811
  times.clear();
765
812
  },
766
813
  input([question, onInput, setup]) {
767
- renderer.input(unwrap(question), onInput, setup)(forward);
814
+ renderer.input(unwrap2(question), onInput, setup)(forward);
768
815
  },
769
816
  custom([handler]) {
770
817
  const result = renderer.custom(handler, goingBack, () => {
@@ -804,7 +851,7 @@ var Novely = (() => {
804
851
  match("custom", [handler]);
805
852
  },
806
853
  text(text) {
807
- renderer.text(text.map((content) => unwrap(content)).join(" "), forward, goingBack);
854
+ renderer.text(text.map((content) => unwrap2(content)).join(" "), forward, goingBack);
808
855
  },
809
856
  exit() {
810
857
  if (restoring)
@@ -896,7 +943,7 @@ var Novely = (() => {
896
943
  const interactivity = (value = false) => {
897
944
  interacted = value ? interacted + 1 : 0;
898
945
  };
899
- const unwrap = (content, global = false) => {
946
+ const unwrap2 = (content, global = false) => {
900
947
  const {
901
948
  data: data2,
902
949
  meta: [lang]
@@ -904,7 +951,11 @@ var Novely = (() => {
904
951
  const obj = global ? data2 : state();
905
952
  const cnt = isFunction(content) ? content(lang, obj) : typeof content === "string" ? content : content[lang];
906
953
  const str2 = isFunction(cnt) ? cnt() : cnt;
907
- return x(str2, obj);
954
+ const trans = translation[lang];
955
+ if (trans.actions || trans.plural) {
956
+ return replace(str2, obj, trans.plural, trans.actions, new Intl.PluralRules(trans.tag || lang));
957
+ }
958
+ return replace(str2, obj);
908
959
  };
909
960
  function data(value) {
910
961
  if (!value)
@@ -937,26 +988,143 @@ var Novely = (() => {
937
988
  * Unwraps translatable content to a string value
938
989
  */
939
990
  unwrap(content) {
940
- return unwrap(content, true);
941
- },
942
- /**
943
- * Function that is used for translation
944
- */
945
- t: t9n.t
991
+ return unwrap2(content, true);
992
+ }
946
993
  };
947
994
  };
948
995
 
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
- };
996
+ // src/translations.ts
997
+ var RU = {
998
+ NewGame: "\u041D\u043E\u0432\u0430\u044F \u0438\u0433\u0440\u0430",
999
+ HomeScreen: "\u0413\u043B\u0430\u0432\u043D\u044B\u0439 \u044D\u043A\u0440\u0430\u043D",
1000
+ ToTheGame: "\u041A \u0438\u0433\u0440\u0435",
1001
+ Language: "\u042F\u0437\u044B\u043A",
1002
+ NoSaves: "\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0439 \u043D\u0435\u0442",
1003
+ LoadSave: "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C",
1004
+ Saves: "\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F",
1005
+ Settings: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438",
1006
+ Sumbit: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C",
1007
+ GoBack: "\u041D\u0430\u0437\u0430\u0434",
1008
+ DoSave: "\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435",
1009
+ Auto: "\u0410\u0432\u0442\u043E",
1010
+ Stop: "\u0421\u0442\u043E\u043F",
1011
+ Exit: "\u0412\u044B\u0445\u043E\u0434",
1012
+ Automatic: "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435",
1013
+ Manual: "\u0420\u0443\u0447\u043D\u043E\u0435",
1014
+ Remove: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C",
1015
+ LoadASaveFrom: "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u043E\u0442",
1016
+ DeleteASaveFrom: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u043E\u0442",
1017
+ TextSpeed: "\u0421\u043A\u043E\u0440\u043E\u0441\u0442\u044C \u0422\u0435\u043A\u0441\u0442\u0430",
1018
+ TextSpeedSlow: "\u041C\u0435\u0434\u043B\u0435\u043D\u043D\u0430\u044F",
1019
+ TextSpeedMedium: "\u0421\u0440\u0435\u0434\u043D\u044F\u044F",
1020
+ TextSpeedFast: "\u0411\u044B\u0441\u0442\u0440\u0430\u044F",
1021
+ TextSpeedAuto: "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0430\u044F",
1022
+ CompleteText: "\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C \u0442\u0435\u043A\u0441\u0442",
1023
+ GoForward: "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432\u043F\u0435\u0440\u0451\u0434",
1024
+ 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.",
1025
+ ExitDialogExit: "\u0412\u044B\u0439\u0442\u0438",
1026
+ ExitDialogBack: "\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u0432 \u0438\u0433\u0440\u0443",
1027
+ OpenMenu: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043C\u0435\u043D\u044E",
1028
+ CloseMenu: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u043C\u0435\u043D\u044E"
1029
+ };
1030
+ var EN = {
1031
+ NewGame: "New Game",
1032
+ HomeScreen: "Home Screen",
1033
+ ToTheGame: "To the Game",
1034
+ Language: "Language",
1035
+ NoSaves: "No saves",
1036
+ LoadSave: "Load",
1037
+ Saves: "Saves",
1038
+ Settings: "Settings",
1039
+ Sumbit: "Submit",
1040
+ GoBack: "Go back",
1041
+ DoSave: "Save",
1042
+ Auto: "Auto",
1043
+ Stop: "Stop",
1044
+ Exit: "Exit",
1045
+ Automatic: "Automatic",
1046
+ Manual: "Manual",
1047
+ Remove: "Remove",
1048
+ LoadASaveFrom: "Load a save from",
1049
+ DeleteASaveFrom: "Delete a save from",
1050
+ TextSpeed: "Text Speed",
1051
+ TextSpeedSlow: "Slow",
1052
+ TextSpeedMedium: "Medium",
1053
+ TextSpeedFast: "Fast",
1054
+ TextSpeedAuto: "Auto",
1055
+ CompleteText: "Complete text",
1056
+ GoForward: "Go forward",
1057
+ ExitDialogWarning: "Are you sure you want to exit? Progress will be saved.",
1058
+ ExitDialogExit: "Exit",
1059
+ ExitDialogBack: "Return to game",
1060
+ OpenMenu: "Open menu",
1061
+ CloseMenu: "Close menu"
1062
+ };
1063
+ var KK = {
1064
+ NewGame: "\u0416\u0430\u04A3\u0430 \u043E\u0439\u044B\u043D",
1065
+ HomeScreen: "\u041D\u0435\u0433\u0456\u0437\u0433\u0456 \u044D\u043A\u0440\u0430\u043D",
1066
+ ToTheGame: "\u041E\u0439\u044B\u043D\u0493\u0430",
1067
+ Language: "\u0422\u0456\u043B",
1068
+ NoSaves: "\u0421\u0430\u049B\u0442\u0430\u0443 \u0436\u043E\u049B",
1069
+ LoadSave: "\u0416\u04AF\u043A\u0442\u0435\u0443",
1070
+ Saves: "\u0421\u0430\u049B\u0442\u0430\u0443",
1071
+ Settings: "\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043B\u0435\u0440",
1072
+ Sumbit: "\u0420\u0430\u0441\u0442\u0430\u0443",
1073
+ GoBack: "\u0410\u0440\u0442\u049B\u0430",
1074
+ DoSave: "\u0421\u0430\u049B\u0442\u0430\u0443",
1075
+ Auto: "\u0410\u0432\u0442\u043E",
1076
+ Stop: "\u0422\u043E\u049B\u0442\u0430",
1077
+ Exit: "\u0428\u044B\u0493\u0443",
1078
+ Automatic: "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0442\u044B",
1079
+ Manual: "\u049A\u043E\u043B\u043C\u0435\u043D",
1080
+ Remove: "\u0416\u043E\u044E",
1081
+ LoadASaveFrom: "\u0421\u0430\u049B\u0442\u0430\u0443\u0434\u044B \u0436\u04AF\u043A\u0442\u0435\u0443",
1082
+ DeleteASaveFrom: "\u0421\u0430\u049B\u0442\u0430\u0443\u0434\u044B \u0436\u043E\u044E",
1083
+ TextSpeed: "\u041C\u04D9\u0442\u0456\u043D \u0416\u044B\u043B\u0434\u0430\u043C\u0434\u044B\u0493\u044B",
1084
+ TextSpeedSlow: "\u0411\u0430\u044F\u0443",
1085
+ TextSpeedMedium: "\u041E\u0440\u0442\u0430\u0448\u0430",
1086
+ TextSpeedFast: "\u0416\u044B\u043B\u0434\u0430\u043C",
1087
+ TextSpeedAuto: "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0442\u044B",
1088
+ CompleteText: "\u041C\u04D9\u0442\u0456\u043D\u0434\u0456 \u0430\u044F\u049B\u0442\u0430\u0443",
1089
+ GoForward: "\u0410\u043B\u0493\u0430 \u0436\u044B\u043B\u0436\u0443",
1090
+ 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",
1091
+ ExitDialogExit: "\u0428\u044B\u0493\u0443",
1092
+ ExitDialogBack: "\u041E\u0439\u044B\u043D\u0493\u0430 \u043E\u0440\u0430\u043B\u0443",
1093
+ OpenMenu: "\u041C\u04D9\u0437\u0456\u0440\u0434\u0456 \u0430\u0448\u044B\u04A3\u044B\u0437",
1094
+ CloseMenu: "\u041C\u04D9\u0437\u0456\u0440\u0434\u0456 \u0436\u0430\u0431\u0443"
1095
+ };
1096
+ var JP = {
1097
+ NewGame: "\u300C\u65B0\u3057\u3044\u30B2\u30FC\u30E0\u300D",
1098
+ HomeScreen: "\u30DB\u30FC\u30E0\u753B\u9762",
1099
+ ToTheGame: "\u300C\u30B2\u30FC\u30E0\u306B\u623B\u308B\u300D",
1100
+ Language: "\u8A00\u8A9E",
1101
+ NoSaves: "\u30CE\u30FC\u30BB\u30FC\u30D6",
1102
+ LoadSave: "\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",
1103
+ Saves: "\u4FDD\u5B58",
1104
+ Settings: "\u8A2D\u5B9A",
1105
+ Sumbit: "\u78BA\u8A8D",
1106
+ GoBack: "\u300C\u623B\u308B\u300D",
1107
+ DoSave: "\u4FDD\u5B58",
1108
+ Auto: "\u30AA\u30FC\u30C8",
1109
+ Stop: "\u6B62\u307E\u308C",
1110
+ Exit: "\u51FA\u53E3",
1111
+ Automatic: "\u81EA\u52D5",
1112
+ Manual: "\u30DE\u30CB\u30E5\u30A2\u30EB",
1113
+ Remove: "\u524A\u9664",
1114
+ LoadASaveFrom: "\u30ED\u30FC\u30C9\u30BB\u30FC\u30D6\u304B\u3089",
1115
+ DeleteASaveFrom: "\u304B\u3089\u4FDD\u5B58\u3092\u524A\u9664",
1116
+ TextSpeed: "\u30C6\u30AD\u30B9\u30C8\u30B9\u30D4\u30FC\u30C9",
1117
+ TextSpeedSlow: "\u300C\u9045\u3044\u300D",
1118
+ TextSpeedMedium: "\u30DF\u30C7\u30A3\u30A2\u30E0",
1119
+ TextSpeedFast: "\u300C\u901F\u3044\u300D",
1120
+ TextSpeedAuto: "\u81EA\u52D5",
1121
+ CompleteText: "\u30C6\u30AD\u30B9\u30C8\u3092\u5B8C\u6210\u3055\u305B\u308B",
1122
+ GoForward: "\u5148\u306B\u884C\u304F",
1123
+ ExitDialogWarning: "\u672C\u5F53\u306B\u7D42\u4E86\u3057\u307E\u3059\u304B\uFF1F\u9032\u884C\u72B6\u6CC1\u306F\u4FDD\u5B58\u3055\u308C\u307E\u3059",
1124
+ ExitDialogExit: "\u7D42\u4E86",
1125
+ ExitDialogBack: "\u30B2\u30FC\u30E0\u306B\u623B\u308B",
1126
+ OpenMenu: "\u30E1\u30CB\u30E5\u30FC\u3092\u958B\u304F",
1127
+ CloseMenu: "\u30E1\u30CB\u30E5\u30FC\u3092\u9589\u3058\u308B"
960
1128
  };
961
1129
  return __toCommonJS(src_exports);
962
1130
  })();