@drincs/pixi-vn 0.6.4 → 0.6.6

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.
Files changed (266) hide show
  1. package/README.md +56 -7
  2. package/dist/classes/CharacterBaseModel.js +99 -90
  3. package/dist/classes/CharacterBaseModel.js.map +1 -1
  4. package/dist/classes/CharacterBaseModel.mjs +99 -90
  5. package/dist/classes/CharacterBaseModel.mjs.map +1 -1
  6. package/dist/classes/ChoiceMenuOption.d.mts +71 -8
  7. package/dist/classes/ChoiceMenuOption.d.ts +71 -8
  8. package/dist/classes/ChoiceMenuOption.js +160 -77
  9. package/dist/classes/ChoiceMenuOption.js.map +1 -1
  10. package/dist/classes/ChoiceMenuOption.mjs +160 -77
  11. package/dist/classes/ChoiceMenuOption.mjs.map +1 -1
  12. package/dist/classes/CloseLabel.d.mts +3 -1
  13. package/dist/classes/CloseLabel.d.ts +3 -1
  14. package/dist/classes/CloseLabel.js +77 -32
  15. package/dist/classes/CloseLabel.js.map +1 -1
  16. package/dist/classes/CloseLabel.mjs +77 -32
  17. package/dist/classes/CloseLabel.mjs.map +1 -1
  18. package/dist/classes/Label.d.mts +6 -33
  19. package/dist/classes/Label.d.ts +6 -33
  20. package/dist/classes/Label.js +74 -31
  21. package/dist/classes/Label.js.map +1 -1
  22. package/dist/classes/Label.mjs +74 -31
  23. package/dist/classes/Label.mjs.map +1 -1
  24. package/dist/classes/LabelAbstract.d.mts +50 -0
  25. package/dist/classes/LabelAbstract.d.ts +50 -0
  26. package/dist/classes/LabelAbstract.js +100 -0
  27. package/dist/classes/LabelAbstract.js.map +1 -0
  28. package/dist/classes/LabelAbstract.mjs +98 -0
  29. package/dist/classes/LabelAbstract.mjs.map +1 -0
  30. package/dist/classes/LabelJson.d.mts +30 -0
  31. package/dist/classes/LabelJson.d.ts +30 -0
  32. package/dist/classes/LabelJson.js +2766 -0
  33. package/dist/classes/LabelJson.js.map +1 -0
  34. package/dist/classes/LabelJson.mjs +2760 -0
  35. package/dist/classes/LabelJson.mjs.map +1 -0
  36. package/dist/classes/StoredClassModel.js +42 -33
  37. package/dist/classes/StoredClassModel.js.map +1 -1
  38. package/dist/classes/StoredClassModel.mjs +42 -33
  39. package/dist/classes/StoredClassModel.mjs.map +1 -1
  40. package/dist/classes/canvas/CanvasContainer.js +2 -2
  41. package/dist/classes/canvas/CanvasContainer.js.map +1 -1
  42. package/dist/classes/canvas/CanvasContainer.mjs +2 -2
  43. package/dist/classes/canvas/CanvasContainer.mjs.map +1 -1
  44. package/dist/classes/canvas/CanvasImage.js +2 -2
  45. package/dist/classes/canvas/CanvasImage.js.map +1 -1
  46. package/dist/classes/canvas/CanvasImage.mjs +2 -2
  47. package/dist/classes/canvas/CanvasImage.mjs.map +1 -1
  48. package/dist/classes/canvas/CanvasSprite.js +2 -2
  49. package/dist/classes/canvas/CanvasSprite.js.map +1 -1
  50. package/dist/classes/canvas/CanvasSprite.mjs +2 -2
  51. package/dist/classes/canvas/CanvasSprite.mjs.map +1 -1
  52. package/dist/classes/canvas/CanvasText.js +2 -2
  53. package/dist/classes/canvas/CanvasText.js.map +1 -1
  54. package/dist/classes/canvas/CanvasText.mjs +2 -2
  55. package/dist/classes/canvas/CanvasText.mjs.map +1 -1
  56. package/dist/classes/canvas/index.js +2 -2
  57. package/dist/classes/canvas/index.js.map +1 -1
  58. package/dist/classes/canvas/index.mjs +2 -2
  59. package/dist/classes/canvas/index.mjs.map +1 -1
  60. package/dist/classes/index.d.mts +6 -1
  61. package/dist/classes/index.d.ts +6 -1
  62. package/dist/classes/index.js +945 -78
  63. package/dist/classes/index.js.map +1 -1
  64. package/dist/classes/index.mjs +945 -79
  65. package/dist/classes/index.mjs.map +1 -1
  66. package/dist/classes/ticker/FadeAlphaTicker.js +42 -33
  67. package/dist/classes/ticker/FadeAlphaTicker.js.map +1 -1
  68. package/dist/classes/ticker/FadeAlphaTicker.mjs +42 -33
  69. package/dist/classes/ticker/FadeAlphaTicker.mjs.map +1 -1
  70. package/dist/classes/ticker/MoveTicker.d.mts +1 -0
  71. package/dist/classes/ticker/MoveTicker.d.ts +1 -0
  72. package/dist/classes/ticker/MoveTicker.js +42 -33
  73. package/dist/classes/ticker/MoveTicker.js.map +1 -1
  74. package/dist/classes/ticker/MoveTicker.mjs +42 -33
  75. package/dist/classes/ticker/MoveTicker.mjs.map +1 -1
  76. package/dist/classes/ticker/RotateTicker.d.mts +1 -0
  77. package/dist/classes/ticker/RotateTicker.d.ts +1 -0
  78. package/dist/classes/ticker/RotateTicker.js +42 -33
  79. package/dist/classes/ticker/RotateTicker.js.map +1 -1
  80. package/dist/classes/ticker/RotateTicker.mjs +42 -33
  81. package/dist/classes/ticker/RotateTicker.mjs.map +1 -1
  82. package/dist/classes/ticker/ZoomTicker.d.mts +1 -0
  83. package/dist/classes/ticker/ZoomTicker.d.ts +1 -0
  84. package/dist/classes/ticker/ZoomTicker.js +42 -33
  85. package/dist/classes/ticker/ZoomTicker.js.map +1 -1
  86. package/dist/classes/ticker/ZoomTicker.mjs +42 -33
  87. package/dist/classes/ticker/ZoomTicker.mjs.map +1 -1
  88. package/dist/classes/ticker/index.js +42 -33
  89. package/dist/classes/ticker/index.js.map +1 -1
  90. package/dist/classes/ticker/index.mjs +42 -33
  91. package/dist/classes/ticker/index.mjs.map +1 -1
  92. package/dist/constants.d.mts +1 -1
  93. package/dist/constants.d.ts +1 -1
  94. package/dist/constants.js +1 -1
  95. package/dist/constants.js.map +1 -1
  96. package/dist/constants.mjs +1 -1
  97. package/dist/constants.mjs.map +1 -1
  98. package/dist/decorators/CanvasElementDecorator.js +2 -2
  99. package/dist/decorators/CanvasElementDecorator.js.map +1 -1
  100. package/dist/decorators/CanvasElementDecorator.mjs +2 -2
  101. package/dist/decorators/CanvasElementDecorator.mjs.map +1 -1
  102. package/dist/decorators/LabelDecorator.d.mts +19 -5
  103. package/dist/decorators/LabelDecorator.d.ts +19 -5
  104. package/dist/decorators/LabelDecorator.js +102 -65
  105. package/dist/decorators/LabelDecorator.js.map +1 -1
  106. package/dist/decorators/LabelDecorator.mjs +102 -66
  107. package/dist/decorators/LabelDecorator.mjs.map +1 -1
  108. package/dist/decorators/index.d.mts +10 -2
  109. package/dist/decorators/index.d.ts +10 -2
  110. package/dist/decorators/index.js +98 -65
  111. package/dist/decorators/index.js.map +1 -1
  112. package/dist/decorators/index.mjs +98 -65
  113. package/dist/decorators/index.mjs.map +1 -1
  114. package/dist/functions/CanvasUtility.js +2 -2
  115. package/dist/functions/CanvasUtility.js.map +1 -1
  116. package/dist/functions/CanvasUtility.mjs +2 -2
  117. package/dist/functions/CanvasUtility.mjs.map +1 -1
  118. package/dist/functions/DialogueUtility.d.mts +10 -8
  119. package/dist/functions/DialogueUtility.d.ts +10 -8
  120. package/dist/functions/DialogueUtility.js +268 -131
  121. package/dist/functions/DialogueUtility.js.map +1 -1
  122. package/dist/functions/DialogueUtility.mjs +268 -131
  123. package/dist/functions/DialogueUtility.mjs.map +1 -1
  124. package/dist/functions/FlagsUtility.js +42 -33
  125. package/dist/functions/FlagsUtility.js.map +1 -1
  126. package/dist/functions/FlagsUtility.mjs +42 -33
  127. package/dist/functions/FlagsUtility.mjs.map +1 -1
  128. package/dist/functions/GameUtility.js +42 -33
  129. package/dist/functions/GameUtility.js.map +1 -1
  130. package/dist/functions/GameUtility.mjs +42 -33
  131. package/dist/functions/GameUtility.mjs.map +1 -1
  132. package/dist/functions/ImageUtility.js +45 -36
  133. package/dist/functions/ImageUtility.js.map +1 -1
  134. package/dist/functions/ImageUtility.mjs +45 -36
  135. package/dist/functions/ImageUtility.mjs.map +1 -1
  136. package/dist/functions/Importer.d.mts +24 -0
  137. package/dist/functions/Importer.d.ts +24 -0
  138. package/dist/functions/Importer.js +2804 -0
  139. package/dist/functions/Importer.js.map +1 -0
  140. package/dist/functions/Importer.mjs +2798 -0
  141. package/dist/functions/Importer.mjs.map +1 -0
  142. package/dist/functions/SavesUtility.d.mts +5 -3
  143. package/dist/functions/SavesUtility.d.ts +5 -3
  144. package/dist/functions/SavesUtility.js +310 -145
  145. package/dist/functions/SavesUtility.js.map +1 -1
  146. package/dist/functions/SavesUtility.mjs +310 -145
  147. package/dist/functions/SavesUtility.mjs.map +1 -1
  148. package/dist/functions/TickerUtility.d.mts +2 -1
  149. package/dist/functions/TickerUtility.d.ts +2 -1
  150. package/dist/functions/TickerUtility.js +19 -15
  151. package/dist/functions/TickerUtility.js.map +1 -1
  152. package/dist/functions/TickerUtility.mjs +19 -15
  153. package/dist/functions/TickerUtility.mjs.map +1 -1
  154. package/dist/functions/index.d.mts +7 -2
  155. package/dist/functions/index.d.ts +7 -2
  156. package/dist/functions/index.js +364 -140
  157. package/dist/functions/index.js.map +1 -1
  158. package/dist/functions/index.mjs +364 -141
  159. package/dist/functions/index.mjs.map +1 -1
  160. package/dist/index.d.mts +6 -0
  161. package/dist/index.d.ts +6 -0
  162. package/dist/index.js +453 -219
  163. package/dist/index.js.map +1 -1
  164. package/dist/index.mjs +453 -221
  165. package/dist/index.mjs.map +1 -1
  166. package/dist/interface/IHistoryStep.d.mts +3 -1
  167. package/dist/interface/IHistoryStep.d.ts +3 -1
  168. package/dist/interface/ISaveData.d.mts +3 -1
  169. package/dist/interface/ISaveData.d.ts +3 -1
  170. package/dist/interface/LabelProps.d.mts +38 -0
  171. package/dist/interface/LabelProps.d.ts +38 -0
  172. package/dist/interface/LabelProps.js +4 -0
  173. package/dist/interface/LabelProps.js.map +1 -0
  174. package/dist/interface/LabelProps.mjs +3 -0
  175. package/dist/interface/LabelProps.mjs.map +1 -0
  176. package/dist/interface/export/ExportedStep.d.mts +3 -1
  177. package/dist/interface/export/ExportedStep.d.ts +3 -1
  178. package/dist/interface/export/index.d.mts +3 -1
  179. package/dist/interface/export/index.d.ts +3 -1
  180. package/dist/interface/index.d.mts +3 -1
  181. package/dist/interface/index.d.ts +3 -1
  182. package/dist/labels/BaseCanvasElementTestLabel.d.mts +3 -1
  183. package/dist/labels/BaseCanvasElementTestLabel.d.ts +3 -1
  184. package/dist/labels/BaseCanvasElementTestLabel.js +303 -136
  185. package/dist/labels/BaseCanvasElementTestLabel.js.map +1 -1
  186. package/dist/labels/BaseCanvasElementTestLabel.mjs +304 -137
  187. package/dist/labels/BaseCanvasElementTestLabel.mjs.map +1 -1
  188. package/dist/labels/CanvasEventsTestLabel.d.mts +4 -5
  189. package/dist/labels/CanvasEventsTestLabel.d.ts +4 -5
  190. package/dist/labels/CanvasEventsTestLabel.js +313 -148
  191. package/dist/labels/CanvasEventsTestLabel.js.map +1 -1
  192. package/dist/labels/CanvasEventsTestLabel.mjs +314 -149
  193. package/dist/labels/CanvasEventsTestLabel.mjs.map +1 -1
  194. package/dist/labels/CustomTickerCanvasElementTestLabel.d.mts +3 -1
  195. package/dist/labels/CustomTickerCanvasElementTestLabel.d.ts +3 -1
  196. package/dist/labels/CustomTickerCanvasElementTestLabel.js +294 -133
  197. package/dist/labels/CustomTickerCanvasElementTestLabel.js.map +1 -1
  198. package/dist/labels/CustomTickerCanvasElementTestLabel.mjs +295 -134
  199. package/dist/labels/CustomTickerCanvasElementTestLabel.mjs.map +1 -1
  200. package/dist/labels/ImagesAnimationsTestLabel.d.mts +3 -1
  201. package/dist/labels/ImagesAnimationsTestLabel.d.ts +3 -1
  202. package/dist/labels/ImagesAnimationsTestLabel.js +298 -181
  203. package/dist/labels/ImagesAnimationsTestLabel.js.map +1 -1
  204. package/dist/labels/ImagesAnimationsTestLabel.mjs +299 -182
  205. package/dist/labels/ImagesAnimationsTestLabel.mjs.map +1 -1
  206. package/dist/labels/MarkdownTest.d.mts +3 -1
  207. package/dist/labels/MarkdownTest.d.ts +3 -1
  208. package/dist/labels/MarkdownTest.js +294 -133
  209. package/dist/labels/MarkdownTest.js.map +1 -1
  210. package/dist/labels/MarkdownTest.mjs +294 -133
  211. package/dist/labels/MarkdownTest.mjs.map +1 -1
  212. package/dist/labels/StartLabel.d.mts +3 -1
  213. package/dist/labels/StartLabel.d.ts +3 -1
  214. package/dist/labels/StartLabel.js +360 -213
  215. package/dist/labels/StartLabel.js.map +1 -1
  216. package/dist/labels/StartLabel.mjs +361 -214
  217. package/dist/labels/StartLabel.mjs.map +1 -1
  218. package/dist/labels/StepLabelTest.d.mts +11 -0
  219. package/dist/labels/StepLabelTest.d.ts +11 -0
  220. package/dist/labels/StepLabelTest.js +2861 -0
  221. package/dist/labels/StepLabelTest.js.map +1 -0
  222. package/dist/labels/StepLabelTest.mjs +2855 -0
  223. package/dist/labels/StepLabelTest.mjs.map +1 -0
  224. package/dist/labels/TestConstant.js +43 -34
  225. package/dist/labels/TestConstant.js.map +1 -1
  226. package/dist/labels/TestConstant.mjs +43 -34
  227. package/dist/labels/TestConstant.mjs.map +1 -1
  228. package/dist/labels/index.d.mts +3 -1
  229. package/dist/labels/index.d.ts +3 -1
  230. package/dist/labels/index.js +360 -213
  231. package/dist/labels/index.js.map +1 -1
  232. package/dist/labels/index.mjs +361 -214
  233. package/dist/labels/index.mjs.map +1 -1
  234. package/dist/managers/StepManager.d.mts +10 -7
  235. package/dist/managers/StepManager.d.ts +10 -7
  236. package/dist/managers/StepManager.js +300 -139
  237. package/dist/managers/StepManager.js.map +1 -1
  238. package/dist/managers/StepManager.mjs +300 -139
  239. package/dist/managers/StepManager.mjs.map +1 -1
  240. package/dist/managers/WindowManager.js +2 -2
  241. package/dist/managers/WindowManager.js.map +1 -1
  242. package/dist/managers/WindowManager.mjs +2 -2
  243. package/dist/managers/WindowManager.mjs.map +1 -1
  244. package/dist/managers/index.d.mts +7 -5
  245. package/dist/managers/index.d.ts +7 -5
  246. package/dist/managers/index.js +300 -139
  247. package/dist/managers/index.js.map +1 -1
  248. package/dist/managers/index.mjs +300 -139
  249. package/dist/managers/index.mjs.map +1 -1
  250. package/dist/types/ChoiceMenuOptionsType.d.mts +3 -1
  251. package/dist/types/ChoiceMenuOptionsType.d.ts +3 -1
  252. package/dist/types/LabelJsonType.d.mts +22 -0
  253. package/dist/types/LabelJsonType.d.ts +22 -0
  254. package/dist/types/LabelJsonType.js +4 -0
  255. package/dist/types/LabelJsonType.js.map +1 -0
  256. package/dist/types/LabelJsonType.mjs +3 -0
  257. package/dist/types/LabelJsonType.mjs.map +1 -0
  258. package/dist/types/StepLabelJsonType.d.mts +30 -0
  259. package/dist/types/StepLabelJsonType.d.ts +30 -0
  260. package/dist/types/StepLabelJsonType.js +4 -0
  261. package/dist/types/StepLabelJsonType.js.map +1 -0
  262. package/dist/types/StepLabelJsonType.mjs +3 -0
  263. package/dist/types/StepLabelJsonType.mjs.map +1 -0
  264. package/dist/types/index.d.mts +4 -0
  265. package/dist/types/index.d.ts +4 -0
  266. package/package.json +7 -6
@@ -2,9 +2,11 @@ import { Ticker } from 'pixi.js';
2
2
  import Label from '../classes/Label.mjs';
3
3
  import { T as TickerBase } from '../TickerBase-DKYzbzro.mjs';
4
4
  import '../types/LabelIdType.mjs';
5
- import '../types/StepHistoryDataType.mjs';
6
5
  import '../types/StepLabelType.mjs';
7
6
  import '@drincs/pixi-vn/dist/override';
7
+ import '../classes/LabelAbstract.mjs';
8
+ import '../types/StepHistoryDataType.mjs';
9
+ import '../interface/LabelProps.mjs';
8
10
  import '../types/StorageElementType.mjs';
9
11
  import '../types/TickerIdType.mjs';
10
12
 
@@ -2,9 +2,11 @@ import { Ticker } from 'pixi.js';
2
2
  import Label from '../classes/Label.js';
3
3
  import { T as TickerBase } from '../TickerBase-3rLpDpmb.js';
4
4
  import '../types/LabelIdType.js';
5
- import '../types/StepHistoryDataType.js';
6
5
  import '../types/StepLabelType.js';
7
6
  import '@drincs/pixi-vn/dist/override';
7
+ import '../classes/LabelAbstract.js';
8
+ import '../types/StepHistoryDataType.js';
9
+ import '../interface/LabelProps.js';
8
10
  import '../types/StorageElementType.js';
9
11
  import '../types/TickerIdType.js';
10
12
 
@@ -512,8 +512,6 @@ function getMemoryContainer(element) {
512
512
  };
513
513
  }
514
514
  function setMemoryContainer(element, memory) {
515
- memory.width && (element.width = memory.width);
516
- memory.height && (element.height = memory.height);
517
515
  memory.isRenderGroup && (element.isRenderGroup = memory.isRenderGroup);
518
516
  memory.blendMode && (element.blendMode = memory.blendMode);
519
517
  memory.tint && (element.tint = memory.tint);
@@ -546,6 +544,8 @@ function setMemoryContainer(element, memory) {
546
544
  memory.interactive && (element.interactive = memory.interactive);
547
545
  memory.interactiveChildren && (element.interactiveChildren = memory.interactiveChildren);
548
546
  memory.hitArea && (element.hitArea = memory.hitArea);
547
+ memory.width && (element.width = memory.width);
548
+ memory.height && (element.height = memory.height);
549
549
  }
550
550
 
551
551
  // src/decorators/CharacterDecorator.ts
@@ -568,19 +568,18 @@ function checkIfStepsIsEqual(step1, step2) {
568
568
  return step1 === step2;
569
569
  }
570
570
 
571
- // src/classes/Label.ts
572
- var Label = class {
571
+ // src/classes/LabelAbstract.ts
572
+ var LabelAbstract = class {
573
573
  /**
574
574
  * @param id is the id of the label
575
- * @param steps is the list of steps that the label will perform
576
- * @param onStepRun is a function that will be executed before any step is executed, is useful for example to make sure all images used have been cached
577
- * @param choiseIndex is the index of the choice that the label will perform
575
+ * @param props is the properties of the label
578
576
  */
579
- constructor(id, steps, onStepRun, choiseIndex) {
577
+ constructor(id, props) {
580
578
  this._id = id;
581
- this._steps = steps;
582
- this._onStepRun = onStepRun;
583
- this._choiseIndex = choiseIndex;
579
+ this._onStepStart = props == null ? void 0 : props.onStepStart;
580
+ this._onLoadStep = props == null ? void 0 : props.onLoadStep;
581
+ this._onStepEnd = props == null ? void 0 : props.onStepEnd;
582
+ this._choiseIndex = props == null ? void 0 : props.choiseIndex;
584
583
  }
585
584
  /**
586
585
  * Get the id of the label. This variable is used in the system to get the label by id, {@link getLabelById}
@@ -588,17 +587,6 @@ var Label = class {
588
587
  get id() {
589
588
  return this._id;
590
589
  }
591
- /**
592
- * Get the steps of the label.
593
- * This class should be extended and the steps method should be overridden.
594
- * Every time you update this list will also be updated when the other game versions load.
595
- */
596
- get steps() {
597
- if (typeof this._steps === "function") {
598
- return this._steps();
599
- }
600
- return this._steps;
601
- }
602
590
  /**
603
591
  * Get the corresponding steps number
604
592
  * @param externalSteps
@@ -617,33 +605,171 @@ var Label = class {
617
605
  return res;
618
606
  }
619
607
  /**
620
- * Get the function that will be executed before any step is executed, is useful for example to make sure all images used have been cached
608
+ * Is a function that will be executed in {@link Label#onStepStart} and when the user goes back to it or when the user laods a save file.
621
609
  * @returns Promise<void> or void
622
- * @example
623
- * ```typescript
624
- * newLabel("id", [], () => {
625
- * Assets.load('path/to/image1.png')
626
- * Assets.load('path/to/image2.png')
627
- * })
628
- * ```
629
610
  */
630
- get onStepRun() {
631
- return this._onStepRun;
611
+ get onStepStart() {
612
+ return (stepIndex, label) => __async(this, null, function* () {
613
+ if (this._onLoadStep) {
614
+ yield this._onLoadStep(stepIndex, label);
615
+ }
616
+ if (this._onStepStart) {
617
+ return yield this._onStepStart(stepIndex, label);
618
+ }
619
+ });
620
+ }
621
+ /**
622
+ * Get the function that will be executed a old step is reloaded. A step is reloaded when the user goes back to it or when the user laods a save file.
623
+ * @returns Promise<void> or void
624
+ */
625
+ get onLoadStep() {
626
+ return this._onLoadStep;
627
+ }
628
+ /**
629
+ * Is a function that will be executed when the step ends.
630
+ * @returns Promise<void> or void
631
+ */
632
+ get onStepEnd() {
633
+ return this._onStepEnd;
632
634
  }
633
635
  get choiseIndex() {
634
636
  return this._choiseIndex;
635
637
  }
636
638
  };
637
639
 
640
+ // src/classes/Label.ts
641
+ var Label = class extends LabelAbstract {
642
+ /**
643
+ * @param id is the id of the label
644
+ * @param steps is the list of steps that the label will perform
645
+ * @param props is the properties of the label
646
+ */
647
+ constructor(id, steps, props) {
648
+ super(id, props);
649
+ this._steps = steps;
650
+ }
651
+ /**
652
+ * Get the steps of the label.
653
+ */
654
+ get steps() {
655
+ if (typeof this._steps === "function") {
656
+ return this._steps();
657
+ }
658
+ return this._steps;
659
+ }
660
+ };
661
+
638
662
  // src/classes/CloseLabel.ts
639
663
  var CLOSE_LABEL_ID = "__close-label-id__";
640
664
  function newCloseLabel(choiseIndex) {
641
- return new Label(CLOSE_LABEL_ID, [], void 0, choiseIndex);
665
+ return new Label(CLOSE_LABEL_ID, [], {
666
+ choiseIndex
667
+ });
642
668
  }
643
669
 
644
670
  // src/types/CloseType.ts
645
671
  var Close = "close";
646
672
 
673
+ // src/classes/ChoiceMenuOption.ts
674
+ var ChoiceMenuOption = class {
675
+ /**
676
+ * @param text Text to be displayed in the menu
677
+ * @param label Label to be opened when the option is selected or the id of the label
678
+ * @param props Properties to be passed to the label and olther parameters that you can use when get all the choice menu options. It be converted to a JSON string, so it cannot contain functions or classes.
679
+ * @param type Type of the label to be opened. @default "call"
680
+ */
681
+ constructor(text, label, props, type = "call") {
682
+ /**
683
+ * Properties to be passed to the label and olther parameters that you can use when get all the choice menu options.
684
+ * @example
685
+ * ```tsx
686
+ * setChoiceMenuOptions([
687
+ * new ChoiceMenuOption("Hello", helloLabel, { disabled: true }),
688
+ * ])
689
+ * return <List>
690
+ * {getChoiceMenuOptions()?.map((item, index) => {
691
+ * return (
692
+ * <ChoiceButton
693
+ * disabled={item.props.disabled}
694
+ * onClick={() => {
695
+ * afterSelectChoice(item)
696
+ * }}
697
+ * >
698
+ * {item.text}
699
+ * </ChoiceButton>
700
+ * )
701
+ * })}
702
+ * </List>
703
+ * ```
704
+ */
705
+ this.props = {};
706
+ this.text = text;
707
+ this._label = label;
708
+ this.type = type;
709
+ if (props) {
710
+ this.props = props;
711
+ }
712
+ }
713
+ /**
714
+ * Label to be opened when the option is selected
715
+ */
716
+ get label() {
717
+ let label = this._label;
718
+ if (typeof label === "string") {
719
+ let res = getLabelById(label);
720
+ if (res) {
721
+ label = res;
722
+ } else {
723
+ console.error(`Label ${label} not found, so it will be closed`);
724
+ label = newCloseLabel();
725
+ }
726
+ }
727
+ return label;
728
+ }
729
+ };
730
+ var ChoiceMenuOptionClose = class {
731
+ /**
732
+ * @param text Text to be displayed in the menu
733
+ * @param closeCurrentLabel If true, the current label will be closed. @default false
734
+ */
735
+ constructor(text, closeCurrentLabel = false) {
736
+ /**
737
+ * Label to be opened when the option is selected
738
+ */
739
+ this.label = newCloseLabel();
740
+ /**
741
+ * Type of the label to be opened
742
+ */
743
+ this.type = Close;
744
+ /**
745
+ * Properties to be passed to the label and olther parameters that you can use when get all the choice menu options.
746
+ * @example
747
+ * ```tsx
748
+ * setChoiceMenuOptions([
749
+ * new ChoiceMenuOption("Hello", helloLabel, { disabled: true }),
750
+ * ])
751
+ * return <List>
752
+ * {getChoiceMenuOptions()?.map((item, index) => {
753
+ * return (
754
+ * <ChoiceButton
755
+ * disabled={item.props.disabled}
756
+ * onClick={() => {
757
+ * afterSelectChoice(item)
758
+ * }}
759
+ * >
760
+ * {item.text}
761
+ * </ChoiceButton>
762
+ * )
763
+ * })}
764
+ * </List>
765
+ * ```
766
+ */
767
+ this.props = {};
768
+ this.text = text;
769
+ this.closeCurrentLabel = closeCurrentLabel;
770
+ }
771
+ };
772
+
647
773
  // src/functions/DialogueUtility.ts
648
774
  function setDialogue(props) {
649
775
  let text = "";
@@ -678,21 +804,18 @@ function getChoiceMenuOptions() {
678
804
  d.forEach((option, index) => {
679
805
  if (option.type === Close) {
680
806
  let itemLabel = newCloseLabel(index);
681
- options.push({
682
- text: option.text,
683
- label: itemLabel,
684
- type: Close,
685
- closeCurrentLabel: option.closeCurrentLabel,
686
- props: {}
687
- });
807
+ let choice = new ChoiceMenuOptionClose(option.text, option.closeCurrentLabel);
808
+ choice.label = itemLabel;
809
+ options.push(choice);
688
810
  return;
689
811
  }
690
812
  let label = getLabelById(option.label);
691
813
  if (label) {
692
- let itemLabel = new Label(label.id, label.steps, label.onStepRun, index);
693
- options.push(__spreadProps(__spreadValues({}, option), {
694
- label: itemLabel
695
- }));
814
+ let itemLabel = new Label(label.id, label.steps, {
815
+ onStepStart: label.onStepStart,
816
+ choiseIndex: index
817
+ });
818
+ options.push(new ChoiceMenuOption(option.text, itemLabel, option.props, option.type));
696
819
  }
697
820
  });
698
821
  return options;
@@ -701,8 +824,9 @@ function getChoiceMenuOptions() {
701
824
  }
702
825
 
703
826
  // src/functions/TickerUtility.ts
704
- function updateTickerProgression(args, propertyName, progression) {
705
- if (args[propertyName] === void 0 || !progression || args[propertyName] === progression.limit) {
827
+ function updateTickerProgression(args, propertyName, progression, valueConvert) {
828
+ let limit = valueConvert && progression.limit ? valueConvert(progression.limit) : progression.limit;
829
+ if (args[propertyName] === void 0 || !progression || args[propertyName] === limit) {
706
830
  return;
707
831
  }
708
832
  if (typeof args[propertyName] === "number") {
@@ -721,22 +845,25 @@ function updateTickerProgression(args, propertyName, progression) {
721
845
  }
722
846
  }
723
847
  }
724
- function getLinearProgression(number, progression) {
725
- if (progression.limit !== void 0) {
726
- if (number > progression.limit && progression.amt > 0) {
727
- return progression.limit;
728
- } else if (number < progression.limit && progression.amt < 0) {
729
- return progression.limit;
848
+ function getLinearProgression(number, progression, valueConvert) {
849
+ let limit = valueConvert && progression.limit ? valueConvert(progression.limit) : progression.limit;
850
+ let amt = valueConvert ? valueConvert(progression.amt) : progression.amt;
851
+ if (limit !== void 0) {
852
+ if (number > limit && amt > 0) {
853
+ return limit;
854
+ } else if (number < limit && amt < 0) {
855
+ return limit;
730
856
  }
731
857
  }
732
- return number + progression.amt / 60;
858
+ return number + amt;
733
859
  }
734
- function getExponentialProgression(number, progression) {
735
- if (progression.limit !== void 0) {
736
- if (number > progression.limit && progression.percentage > 0) {
737
- return progression.limit;
738
- } else if (number < progression.limit && progression.percentage < 0) {
739
- return progression.limit;
860
+ function getExponentialProgression(number, progression, valueConvert) {
861
+ let limit = valueConvert && progression.limit ? valueConvert(progression.limit) : progression.limit;
862
+ if (limit !== void 0) {
863
+ if (number > limit && progression.percentage > 0) {
864
+ return limit;
865
+ } else if (number < limit && progression.percentage < 0) {
866
+ return limit;
740
867
  }
741
868
  }
742
869
  return number + number * progression.percentage;
@@ -779,15 +906,13 @@ var ZoomTicker = class extends TickerBase {
779
906
  let ySpeed = 0.1;
780
907
  if (args.speed) {
781
908
  if (typeof args.speed === "number") {
782
- xSpeed = args.speed;
783
- ySpeed = args.speed;
909
+ xSpeed = this.speedConvert(args.speed);
910
+ ySpeed = this.speedConvert(args.speed);
784
911
  } else {
785
- xSpeed = args.speed.x;
786
- ySpeed = args.speed.y;
912
+ xSpeed = this.speedConvert(args.speed.x);
913
+ ySpeed = this.speedConvert(args.speed.y);
787
914
  }
788
915
  }
789
- xSpeed /= 60;
790
- ySpeed /= 60;
791
916
  let tagToRemoveAfter2 = args.tagToRemoveAfter || [];
792
917
  if (typeof tagToRemoveAfter2 === "string") {
793
918
  tagToRemoveAfter2 = [tagToRemoveAfter2];
@@ -854,7 +979,10 @@ var ZoomTicker = class extends TickerBase {
854
979
  }
855
980
  });
856
981
  if (args.speedProgression)
857
- updateTickerProgression(args, "speed", args.speedProgression);
982
+ updateTickerProgression(args, "speed", args.speedProgression, this.speedConvert);
983
+ }
984
+ speedConvert(speed) {
985
+ return speed / 60;
858
986
  }
859
987
  onEndOfTicker(tag, tickerId, _element, tagToRemoveAfter2) {
860
988
  GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter2, tickerId);
@@ -1844,6 +1972,16 @@ var _GameStepManager = class _GameStepManager {
1844
1972
  static set originalStepData(value) {
1845
1973
  _GameStepManager._originalStepData = createExportableElement(value);
1846
1974
  }
1975
+ static get currentStepData() {
1976
+ let currentStepData = {
1977
+ path: window.location.pathname,
1978
+ storage: GameStorageManager.export(),
1979
+ canvas: GameWindowManager.export(),
1980
+ labelIndex: _GameStepManager.currentLabelStepIndex || 0,
1981
+ openedLabels: createExportableElement(_GameStepManager._openedLabels)
1982
+ };
1983
+ return currentStepData;
1984
+ }
1847
1985
  /* Edit History Methods */
1848
1986
  /**
1849
1987
  * Add a label to the history.
@@ -1851,19 +1989,13 @@ var _GameStepManager = class _GameStepManager {
1851
1989
  */
1852
1990
  static addStepHistory(step, choiseMade) {
1853
1991
  let stepHistory = getStepSha1(step);
1854
- let historyStep = {
1855
- path: window.location.pathname,
1856
- storage: GameStorageManager.export(),
1857
- canvas: GameWindowManager.export(),
1858
- labelIndex: _GameStepManager.currentLabelStepIndex || 0,
1859
- openedLabels: createExportableElement(_GameStepManager._openedLabels)
1860
- };
1992
+ let currentStepData = _GameStepManager.currentStepData;
1861
1993
  if (_GameStepManager.originalStepData) {
1862
- if (_GameStepManager.originalStepData.openedLabels.length === historyStep.openedLabels.length) {
1994
+ if (_GameStepManager.originalStepData.openedLabels.length === currentStepData.openedLabels.length) {
1863
1995
  try {
1864
1996
  let lastStepDataOpenedLabelsString = JSON.stringify(_GameStepManager.originalStepData.openedLabels);
1865
- let historyStepOpenedLabelsString = JSON.stringify(historyStep.openedLabels);
1866
- if (lastStepDataOpenedLabelsString === historyStepOpenedLabelsString && _GameStepManager.originalStepData.path === historyStep.path && _GameStepManager.originalStepData.labelIndex === historyStep.labelIndex) {
1997
+ let historyStepOpenedLabelsString = JSON.stringify(currentStepData.openedLabels);
1998
+ if (lastStepDataOpenedLabelsString === historyStepOpenedLabelsString && _GameStepManager.originalStepData.path === currentStepData.path && _GameStepManager.originalStepData.labelIndex === currentStepData.labelIndex) {
1867
1999
  return;
1868
2000
  }
1869
2001
  } catch (e) {
@@ -1871,7 +2003,7 @@ var _GameStepManager = class _GameStepManager {
1871
2003
  }
1872
2004
  }
1873
2005
  }
1874
- let data = deepDiff.diff(_GameStepManager.originalStepData, historyStep);
2006
+ let data = deepDiff.diff(_GameStepManager.originalStepData, currentStepData);
1875
2007
  if (data) {
1876
2008
  let dialoge = void 0;
1877
2009
  let requiredChoices = void 0;
@@ -1890,7 +2022,7 @@ var _GameStepManager = class _GameStepManager {
1890
2022
  index: _GameStepManager.lastStepIndex,
1891
2023
  choiceIndexMade: choiseMade
1892
2024
  });
1893
- _GameStepManager.originalStepData = historyStep;
2025
+ _GameStepManager.originalStepData = currentStepData;
1894
2026
  }
1895
2027
  _GameStepManager.increaseLastStepIndex();
1896
2028
  }
@@ -1981,6 +2113,9 @@ var _GameStepManager = class _GameStepManager {
1981
2113
  console.warn("[Pixi'VN] The player must make a choice");
1982
2114
  return;
1983
2115
  }
2116
+ if (_GameStepManager.currentLabel && _GameStepManager.currentLabel.onStepEnd) {
2117
+ yield _GameStepManager.currentLabel.onStepEnd(_GameStepManager.currentLabelStepIndex || 0, _GameStepManager.currentLabel);
2118
+ }
1984
2119
  _GameStepManager.increaseCurrentStepIndex();
1985
2120
  return yield _GameStepManager.runCurrentStep(props, choiseMade);
1986
2121
  });
@@ -2005,6 +2140,10 @@ var _GameStepManager = class _GameStepManager {
2005
2140
  return;
2006
2141
  }
2007
2142
  if (currentLabel.steps.length > currentLabelStepIndex) {
2143
+ let onStepRun = currentLabel.onStepStart;
2144
+ if (onStepRun) {
2145
+ yield onStepRun(currentLabelStepIndex, currentLabel);
2146
+ }
2008
2147
  let step = currentLabel.steps[currentLabelStepIndex];
2009
2148
  let result = yield step(props);
2010
2149
  _GameStepManager.addStepHistory(step, choiseMade);
@@ -2069,6 +2208,9 @@ var _GameStepManager = class _GameStepManager {
2069
2208
  if (!tempLabel) {
2070
2209
  throw new Error(`[Pixi'VN] Label ${labelId} not found`);
2071
2210
  }
2211
+ if (_GameStepManager.currentLabel && _GameStepManager.currentLabel.onStepEnd) {
2212
+ yield _GameStepManager.currentLabel.onStepEnd(_GameStepManager.currentLabelStepIndex || 0, _GameStepManager.currentLabel);
2213
+ }
2072
2214
  _GameStepManager.pushNewLabel(tempLabel.id);
2073
2215
  } catch (e) {
2074
2216
  console.error("[Pixi'VN] Error calling label", e);
@@ -2127,6 +2269,9 @@ var _GameStepManager = class _GameStepManager {
2127
2269
  if (!tempLabel) {
2128
2270
  throw new Error(`[Pixi'VN] Label ${labelId} not found`);
2129
2271
  }
2272
+ if (_GameStepManager.currentLabel && _GameStepManager.currentLabel.onStepEnd) {
2273
+ yield _GameStepManager.currentLabel.onStepEnd(_GameStepManager.currentLabelStepIndex || 0, _GameStepManager.currentLabel);
2274
+ }
2130
2275
  _GameStepManager.pushNewLabel(tempLabel.id);
2131
2276
  } catch (e) {
2132
2277
  console.error("[Pixi'VN] Error jumping label", e);
@@ -2232,24 +2377,29 @@ var _GameStepManager = class _GameStepManager {
2232
2377
  * ```
2233
2378
  */
2234
2379
  static goBack(navigate, steps = 1) {
2235
- if (steps <= 0) {
2236
- console.warn("[Pixi'VN] Steps must be greater than 0");
2237
- return;
2238
- }
2239
- if (_GameStepManager._stepsHistory.length <= 1) {
2240
- console.warn("[Pixi'VN] No steps to go back");
2241
- return;
2242
- }
2243
- let restoredStep = _GameStepManager.goBackInternal(steps, _GameStepManager.originalStepData);
2244
- if (restoredStep) {
2245
- _GameStepManager._originalStepData = restoredStep;
2246
- _GameStepManager._openedLabels = createExportableElement(restoredStep.openedLabels);
2247
- GameStorageManager.import(createExportableElement(restoredStep.storage));
2248
- GameWindowManager.import(createExportableElement(restoredStep.canvas));
2249
- navigate(restoredStep.path);
2250
- } else {
2251
- console.error("[Pixi'VN] Error going back");
2252
- }
2380
+ return __async(this, null, function* () {
2381
+ if (steps <= 0) {
2382
+ console.warn("[Pixi'VN] Steps must be greater than 0");
2383
+ return;
2384
+ }
2385
+ if (_GameStepManager._stepsHistory.length <= 1) {
2386
+ console.warn("[Pixi'VN] No steps to go back");
2387
+ return;
2388
+ }
2389
+ let restoredStep = _GameStepManager.goBackInternal(steps, _GameStepManager.originalStepData);
2390
+ if (restoredStep) {
2391
+ _GameStepManager._originalStepData = restoredStep;
2392
+ _GameStepManager._openedLabels = createExportableElement(restoredStep.openedLabels);
2393
+ if (_GameStepManager.currentLabel && _GameStepManager.currentLabel.onLoadStep) {
2394
+ yield _GameStepManager.currentLabel.onLoadStep(_GameStepManager.currentLabelStepIndex || 0, _GameStepManager.currentLabel);
2395
+ }
2396
+ GameStorageManager.import(createExportableElement(restoredStep.storage));
2397
+ GameWindowManager.import(createExportableElement(restoredStep.canvas));
2398
+ navigate(restoredStep.path);
2399
+ } else {
2400
+ console.error("[Pixi'VN] Error going back");
2401
+ }
2402
+ });
2253
2403
  }
2254
2404
  static goBackInternal(steps, restoredStep) {
2255
2405
  if (steps <= 0) {
@@ -2311,38 +2461,45 @@ var _GameStepManager = class _GameStepManager {
2311
2461
  * @param dataString The history in a JSON string.
2312
2462
  */
2313
2463
  static importJson(dataString) {
2314
- _GameStepManager.import(JSON.parse(dataString));
2464
+ return __async(this, null, function* () {
2465
+ yield _GameStepManager.import(JSON.parse(dataString));
2466
+ });
2315
2467
  }
2316
2468
  /**
2317
2469
  * Import the history from an object.
2318
2470
  * @param data The history in an object.
2319
2471
  */
2320
2472
  static import(data) {
2321
- _GameStepManager.clear();
2322
- try {
2323
- if (data.hasOwnProperty("stepsHistory")) {
2324
- _GameStepManager._stepsHistory = data["stepsHistory"];
2325
- } else {
2326
- console.warn("[Pixi'VN] Could not import stepsHistory data, so will be ignored");
2327
- }
2328
- if (data.hasOwnProperty("openedLabels")) {
2329
- _GameStepManager._openedLabels = data["openedLabels"];
2330
- } else {
2331
- console.warn("[Pixi'VN] Could not import openedLabels data, so will be ignored");
2332
- }
2333
- if (data.hasOwnProperty("lastStepIndex")) {
2334
- _GameStepManager._lastStepIndex = data["lastStepIndex"];
2335
- } else {
2336
- console.warn("[Pixi'VN] Could not import lastStepIndex data, so will be ignored");
2337
- }
2338
- if (data.hasOwnProperty("originalStepData")) {
2339
- _GameStepManager._originalStepData = data["originalStepData"];
2340
- } else {
2341
- console.warn("[Pixi'VN] Could not import originalStepData data, so will be ignored");
2473
+ return __async(this, null, function* () {
2474
+ _GameStepManager.clear();
2475
+ try {
2476
+ if (data.hasOwnProperty("stepsHistory")) {
2477
+ _GameStepManager._stepsHistory = data["stepsHistory"];
2478
+ } else {
2479
+ console.warn("[Pixi'VN] Could not import stepsHistory data, so will be ignored");
2480
+ }
2481
+ if (data.hasOwnProperty("openedLabels")) {
2482
+ _GameStepManager._openedLabels = data["openedLabels"];
2483
+ } else {
2484
+ console.warn("[Pixi'VN] Could not import openedLabels data, so will be ignored");
2485
+ }
2486
+ if (data.hasOwnProperty("lastStepIndex")) {
2487
+ _GameStepManager._lastStepIndex = data["lastStepIndex"];
2488
+ } else {
2489
+ console.warn("[Pixi'VN] Could not import lastStepIndex data, so will be ignored");
2490
+ }
2491
+ if (data.hasOwnProperty("originalStepData")) {
2492
+ _GameStepManager._originalStepData = data["originalStepData"];
2493
+ } else {
2494
+ console.warn("[Pixi'VN] Could not import originalStepData data, so will be ignored");
2495
+ }
2496
+ if (_GameStepManager.currentLabel && _GameStepManager.currentLabel.onLoadStep) {
2497
+ yield _GameStepManager.currentLabel.onLoadStep(_GameStepManager.currentLabelStepIndex || 0, _GameStepManager.currentLabel);
2498
+ }
2499
+ } catch (e) {
2500
+ console.error("[Pixi'VN] Error importing data", e);
2342
2501
  }
2343
- } catch (e) {
2344
- console.error("[Pixi'VN] Error importing data", e);
2345
- }
2502
+ });
2346
2503
  }
2347
2504
  };
2348
2505
  /**
@@ -2516,11 +2673,11 @@ var DialogueBaseModel = class {
2516
2673
 
2517
2674
  // src/decorators/LabelDecorator.ts
2518
2675
  var registeredLabels = {};
2519
- function newLabel(id, steps, onStepRun) {
2676
+ function newLabel(id, steps, props) {
2520
2677
  if (registeredLabels[id]) {
2521
2678
  console.info(`[Pixi'VN] Label ${id} already exists, it will be overwritten`);
2522
2679
  }
2523
- let label = new Label(id, steps, onStepRun);
2680
+ let label = new Label(id, steps, props);
2524
2681
  registeredLabels[id] = label;
2525
2682
  return label;
2526
2683
  }
@@ -2587,15 +2744,13 @@ var MoveTicker = class extends TickerBase {
2587
2744
  let ySpeed = 1;
2588
2745
  if (args.speed) {
2589
2746
  if (typeof args.speed === "number") {
2590
- xSpeed = args.speed;
2591
- ySpeed = args.speed;
2747
+ xSpeed = this.speedConvert(args.speed);
2748
+ ySpeed = this.speedConvert(args.speed);
2592
2749
  } else {
2593
- xSpeed = args.speed.x;
2594
- ySpeed = args.speed.y;
2750
+ xSpeed = this.speedConvert(args.speed.x);
2751
+ ySpeed = this.speedConvert(args.speed.y);
2595
2752
  }
2596
2753
  }
2597
- xSpeed /= 60;
2598
- ySpeed /= 60;
2599
2754
  let destination = args.destination;
2600
2755
  let tagToRemoveAfter2 = args.tagToRemoveAfter || [];
2601
2756
  if (typeof tagToRemoveAfter2 === "string") {
@@ -2635,7 +2790,10 @@ var MoveTicker = class extends TickerBase {
2635
2790
  }
2636
2791
  });
2637
2792
  if (args.speedProgression)
2638
- updateTickerProgression(args, "speed", args.speedProgression);
2793
+ updateTickerProgression(args, "speed", args.speedProgression, this.speedConvert);
2794
+ }
2795
+ speedConvert(speed) {
2796
+ return speed / 6;
2639
2797
  }
2640
2798
  };
2641
2799
  MoveTicker = __decorateClass([
@@ -2643,7 +2801,7 @@ MoveTicker = __decorateClass([
2643
2801
  ], MoveTicker);
2644
2802
  var RotateTicker = class extends TickerBase {
2645
2803
  fn(ticker, args, tags, tickerId) {
2646
- let speed = (args.speed === void 0 ? 1 : args.speed) / 60;
2804
+ let speed = this.speedConvert(args.speed === void 0 ? 1 : args.speed);
2647
2805
  let clockwise = args.clockwise === void 0 ? true : args.clockwise;
2648
2806
  let tagToRemoveAfter2 = args.tagToRemoveAfter || [];
2649
2807
  if (typeof tagToRemoveAfter2 === "string") {
@@ -2671,7 +2829,10 @@ var RotateTicker = class extends TickerBase {
2671
2829
  }
2672
2830
  });
2673
2831
  if (args.speedProgression)
2674
- updateTickerProgression(args, "speed", args.speedProgression);
2832
+ updateTickerProgression(args, "speed", args.speedProgression, this.speedConvert);
2833
+ }
2834
+ speedConvert(speed) {
2835
+ return speed / 60;
2675
2836
  }
2676
2837
  };
2677
2838
  RotateTicker = __decorateClass([
@@ -2682,7 +2843,7 @@ RotateTicker = __decorateClass([
2682
2843
  var juliette = new CharacterBaseModel2("___pixivn_juliette___", {
2683
2844
  name: "Juliette",
2684
2845
  age: 25,
2685
- icon: "https://firebasestorage.googleapis.com/v0/b/pixi-vn.appspot.com/o/public%2Fcharacters%2Fjuliette-square.webp?alt=media&token=5856ae7b-d99e-4563-86ec-cbc48cc9c6b4",
2846
+ icon: "https://firebasestorage.googleapis.com/v0/b/pixi-vn.appspot.com/o/public%2Fcharacters%2Fjuliette-square.webp?alt=media",
2686
2847
  color: "#ac0086"
2687
2848
  });
2688
2849
  saveCharacter(juliette);