narrat 2.0.0-test-4 → 2.0.2

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 (99) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +38 -38
  3. package/dist/app.vue.d.ts +106 -0
  4. package/dist/components/MainMenu.vue.d.ts +12 -0
  5. package/dist/components/Skills.vue.d.ts +22 -0
  6. package/dist/components/debug/debug-menu.vue.d.ts +48 -0
  7. package/dist/components/dialog-picture.vue.d.ts +9 -0
  8. package/dist/components/game-dialog.vue.d.ts +65 -0
  9. package/dist/components/hud.vue.d.ts +12 -0
  10. package/dist/components/inventory-ui.vue.d.ts +30 -0
  11. package/dist/components/loading-bar.vue.d.ts +10 -0
  12. package/dist/components/menu-buttons.vue.d.ts +26 -0
  13. package/dist/components/notification-toast.vue.d.ts +6 -0
  14. package/dist/components/quests-ui.vue.d.ts +20 -0
  15. package/dist/components/utils/modal.vue.d.ts +6 -0
  16. package/dist/components/volume-controls.vue.d.ts +7 -0
  17. package/dist/config.d.ts +151 -0
  18. package/dist/constants.d.ts +1 -0
  19. package/dist/data/characters.json +62 -62
  20. package/dist/data/config.json +182 -176
  21. package/dist/data/example.rpy +360 -356
  22. package/dist/data/refactor.rpy +30 -30
  23. package/dist/defaultConfig.d.ts +2 -0
  24. package/dist/demo/demo.d.ts +1 -0
  25. package/dist/dialog-box.vue.d.ts +37 -0
  26. package/dist/exports/config.d.ts +1 -0
  27. package/dist/exports/display.d.ts +2 -0
  28. package/dist/exports/plugins.d.ts +20 -0
  29. package/dist/fonts/OpenDyslexic.ttf.svg +2326 -2326
  30. package/dist/gameloop.d.ts +3 -0
  31. package/dist/lib/lib.d.ts +15 -0
  32. package/dist/lib.css +1 -1
  33. package/dist/main.d.ts +5 -0
  34. package/dist/narrat.es.js +19015 -21676
  35. package/dist/narrat.umd.js +112 -112
  36. package/dist/plugins/NarratPlugin.d.ts +11 -0
  37. package/dist/stores/audio-store.d.ts +12 -0
  38. package/dist/stores/dialog-store.d.ts +31 -0
  39. package/dist/stores/hud-stats-store.d.ts +22 -0
  40. package/dist/stores/inventory-store.d.ts +37 -0
  41. package/dist/stores/main-store.d.ts +276 -0
  42. package/dist/stores/notification-store.d.ts +12 -0
  43. package/dist/stores/quest-log.d.ts +39 -0
  44. package/dist/stores/rendering-store.d.ts +13 -0
  45. package/dist/stores/screens-store.d.ts +23 -0
  46. package/dist/stores/skills.d.ts +36 -0
  47. package/dist/stores/vm-store.d.ts +148 -0
  48. package/dist/types/app-types.d.ts +4 -0
  49. package/dist/types/character-types.d.ts +27 -0
  50. package/dist/types/dialog-box-types.d.ts +10 -0
  51. package/dist/types/game-save.d.ts +21 -0
  52. package/dist/types/parser.d.ts +92 -0
  53. package/dist/types/state.d.ts +3 -0
  54. package/dist/utils/ajax.d.ts +1 -0
  55. package/dist/utils/audio-loader.d.ts +13 -0
  56. package/dist/utils/characters.d.ts +5 -0
  57. package/dist/utils/data-helpers.d.ts +19 -0
  58. package/dist/utils/debounce.d.ts +14 -0
  59. package/dist/utils/error-handling.d.ts +3 -0
  60. package/dist/utils/helpers.d.ts +6 -0
  61. package/dist/utils/images-loader.d.ts +6 -0
  62. package/dist/utils/logger.d.ts +11 -0
  63. package/dist/utils/object-iterators.d.ts +8 -0
  64. package/dist/utils/promises.d.ts +1 -0
  65. package/dist/utils/randomId.d.ts +1 -0
  66. package/dist/utils/skillchecks.d.ts +17 -0
  67. package/dist/utils/string-helpers.d.ts +3 -0
  68. package/dist/utils/time-helpers.d.ts +2 -0
  69. package/dist/vm/commands/arithmetic-commands.d.ts +17 -0
  70. package/dist/vm/commands/audio-commands.d.ts +8 -0
  71. package/dist/vm/commands/choice.d.ts +37 -0
  72. package/dist/vm/commands/clear_dialog.d.ts +2 -0
  73. package/dist/vm/commands/command-helpers.d.ts +2 -0
  74. package/dist/vm/commands/command-plugin.d.ts +30 -0
  75. package/dist/vm/commands/flow-commands.d.ts +14 -0
  76. package/dist/vm/commands/if.d.ts +10 -0
  77. package/dist/vm/commands/index.d.ts +2 -0
  78. package/dist/vm/commands/inventory-commands.d.ts +15 -0
  79. package/dist/vm/commands/logic-command.d.ts +42 -0
  80. package/dist/vm/commands/notify.d.ts +4 -0
  81. package/dist/vm/commands/quest-commands.d.ts +30 -0
  82. package/dist/vm/commands/screen-commands.d.ts +8 -0
  83. package/dist/vm/commands/set.d.ts +6 -0
  84. package/dist/vm/commands/skill-commands.d.ts +33 -0
  85. package/dist/vm/commands/stats-commands.d.ts +12 -0
  86. package/dist/vm/commands/string-commands.d.ts +9 -0
  87. package/dist/vm/commands/text-field.d.ts +7 -0
  88. package/dist/vm/commands/text.d.ts +13 -0
  89. package/dist/vm/commands/wait.d.ts +4 -0
  90. package/dist/vm/vm-helpers.d.ts +16 -0
  91. package/dist/vm/vm-parser.d.ts +19 -0
  92. package/dist/vm/vm-parser.test.d.ts +1 -0
  93. package/dist/vm/vm.d.ts +19 -0
  94. package/package.json +79 -73
  95. package/CHANGELOG.md +0 -730
  96. package/dist/.DS_Store +0 -0
  97. package/dist/img/.DS_Store +0 -0
  98. package/dist/music/.DS_Store +0 -0
  99. package/dist/sounds/.DS_Store +0 -0
@@ -0,0 +1,151 @@
1
+ export declare function setConfig(conf: Config): void;
2
+ export declare function getConfig(): Config;
3
+ export declare function getSkillConfig(id: string): SkillData;
4
+ export declare function getItemConfig(id: string): ItemData;
5
+ export declare function getQuestConfig(questId: string): QuestData;
6
+ export declare function getObjectiveConfig(quest: string, objectiveId: string): ObjectiveData;
7
+ export interface AppOptions {
8
+ logging: boolean;
9
+ debug: boolean;
10
+ }
11
+ export interface Config {
12
+ gameTitle: string;
13
+ images: {
14
+ [key: string]: string;
15
+ };
16
+ layout: {
17
+ backgrounds: {
18
+ width: number;
19
+ height: number;
20
+ };
21
+ dialogBottomPadding: number;
22
+ minTextWidth: number;
23
+ mobileDialogHeightPercentage: number;
24
+ verticalLayoutThreshold: number;
25
+ portraits: {
26
+ width: number;
27
+ height: number;
28
+ };
29
+ };
30
+ screens: {
31
+ [key: string]: {
32
+ background: string;
33
+ buttons: string[];
34
+ };
35
+ };
36
+ buttons: {
37
+ [key: string]: ButtonConfig;
38
+ };
39
+ skills: {
40
+ [key: string]: SkillData;
41
+ };
42
+ skillOptions: {
43
+ xpPerLevel: number;
44
+ };
45
+ skillChecks: {
46
+ rollRange: number;
47
+ skillMultiplier: number;
48
+ failureChance: number;
49
+ difficultyText: Array<[number, string]>;
50
+ };
51
+ scripts: string[];
52
+ audio: {
53
+ [key: string]: AudioConfig;
54
+ };
55
+ audioOptions: {
56
+ volume: number;
57
+ defaultMusic?: string;
58
+ musicFadeInTime: number;
59
+ musicFadeInDelay: number;
60
+ musicFadeOutTime: number;
61
+ };
62
+ sound?: {
63
+ [key: string]: AudioConfig;
64
+ };
65
+ music?: {
66
+ [key: string]: AudioConfig;
67
+ };
68
+ notifications: {
69
+ timeOnScreen: number;
70
+ alsoPrintInDialogue?: boolean;
71
+ };
72
+ hudStats: {
73
+ [key: string]: HudStatConfig;
74
+ };
75
+ items: {
76
+ [key: string]: ItemData;
77
+ };
78
+ interactionTags: {
79
+ [key: string]: {
80
+ onlyInteractOutsideOfScripts: boolean;
81
+ };
82
+ };
83
+ quests: {
84
+ [key: string]: QuestData;
85
+ };
86
+ audioTriggers: {
87
+ [key: string]: string;
88
+ };
89
+ menuButtons: {
90
+ [key: string]: MenuButtonData;
91
+ };
92
+ }
93
+ export interface MenuButtonData {
94
+ text: string;
95
+ }
96
+ export interface QuestData {
97
+ title: string;
98
+ description: string;
99
+ objectives: {
100
+ [key: string]: ObjectiveData;
101
+ };
102
+ }
103
+ export interface ObjectiveData {
104
+ description: string;
105
+ hidden?: boolean;
106
+ }
107
+ export interface ItemData {
108
+ name: string;
109
+ description: string;
110
+ icon: string;
111
+ onUse?: {
112
+ action: 'jump' | 'run';
113
+ label: string;
114
+ };
115
+ tag?: string;
116
+ }
117
+ export interface HudStatConfig {
118
+ name: string;
119
+ icon: string;
120
+ startingValue: number;
121
+ minValue?: number;
122
+ maxValue?: number;
123
+ }
124
+ export interface AudioConfig {
125
+ src: string;
126
+ path?: string;
127
+ volume?: number;
128
+ rate?: number;
129
+ html5?: boolean;
130
+ }
131
+ export interface MusicConfig extends AudioConfig {
132
+ loop?: boolean;
133
+ }
134
+ export interface ButtonConfig {
135
+ enabled: boolean;
136
+ background: string;
137
+ position: {
138
+ left: number;
139
+ top: number;
140
+ width: number;
141
+ height: number;
142
+ };
143
+ action: string;
144
+ }
145
+ export interface SkillData {
146
+ name: string;
147
+ description: string;
148
+ startingLevel: number;
149
+ hidden?: boolean;
150
+ icon: string;
151
+ }
@@ -0,0 +1 @@
1
+ export declare const SAVE_FILE = "gameSave";
@@ -1,62 +1,62 @@
1
- {
2
- "config": {
3
- "imagesPath": "./img/characters/"
4
- },
5
- "characters": {
6
- "game": {
7
- "name": "",
8
- "color": "white"
9
- },
10
- "player": {
11
- "style": {
12
- "color": "orange"
13
- },
14
- "name": "You"
15
- },
16
- "cat": {
17
- "sprites": {
18
- "idle": "cat_idle.jpg"
19
- },
20
- "style": {
21
- "color": "white"
22
- },
23
- "name": "Generic Cat"
24
- },
25
- "shopkeeper": {
26
- "sprites": {
27
- "idle": "music_cat.jpeg"
28
- },
29
- "style": {
30
- "color": "white"
31
- },
32
- "name": "Shopkeeper"
33
- },
34
- "helper": {
35
- "sprites": {
36
- "idle": "helper_cat.png"
37
- },
38
- "style": {
39
- "color": "green"
40
- },
41
- "name": "Helper Cat"
42
- },
43
- "music_cat": {
44
- "sprites": {
45
- "idle": "music_cat.jpeg"
46
- },
47
- "style": {
48
- "color": "green"
49
- },
50
- "name": "Music Cat"
51
- },
52
- "inner": {
53
- "sprites": {
54
- "idle": "inner_voice.png"
55
- },
56
- "style": {
57
- "color": "red"
58
- },
59
- "name": "Inner Voice"
60
- }
61
- }
62
- }
1
+ {
2
+ "config": {
3
+ "imagesPath": "./img/characters/"
4
+ },
5
+ "characters": {
6
+ "game": {
7
+ "name": "",
8
+ "color": "white"
9
+ },
10
+ "player": {
11
+ "style": {
12
+ "color": "orange"
13
+ },
14
+ "name": "You"
15
+ },
16
+ "cat": {
17
+ "sprites": {
18
+ "idle": "cat_idle.jpg"
19
+ },
20
+ "style": {
21
+ "color": "white"
22
+ },
23
+ "name": "Generic Cat"
24
+ },
25
+ "shopkeeper": {
26
+ "sprites": {
27
+ "idle": "music_cat.jpeg"
28
+ },
29
+ "style": {
30
+ "color": "white"
31
+ },
32
+ "name": "Shopkeeper"
33
+ },
34
+ "helper": {
35
+ "sprites": {
36
+ "idle": "helper_cat.png"
37
+ },
38
+ "style": {
39
+ "color": "green"
40
+ },
41
+ "name": "Helper Cat"
42
+ },
43
+ "music_cat": {
44
+ "sprites": {
45
+ "idle": "music_cat.jpeg"
46
+ },
47
+ "style": {
48
+ "color": "green"
49
+ },
50
+ "name": "Music Cat"
51
+ },
52
+ "inner": {
53
+ "sprites": {
54
+ "idle": "inner_voice.png"
55
+ },
56
+ "style": {
57
+ "color": "red"
58
+ },
59
+ "name": "Inner Voice"
60
+ }
61
+ }
62
+ }
@@ -1,176 +1,182 @@
1
- {
2
- "gameTitle": "Narrat Game Example",
3
- "images": {
4
- "narrat": "img/backgrounds/narrat.png",
5
- "map": "img/backgrounds/map.png",
6
- "shopButton": "img/ui/shop-button.png",
7
- "parkButton": "img/ui/park-button.png"
8
- },
9
- "layout": {
10
- "backgrounds": {
11
- "width": 880,
12
- "height": 720
13
- },
14
- "dialogBottomPadding": 70,
15
- "minTextWidth": 475,
16
- "mobileDialogHeightPercentage": 60,
17
- "verticalLayoutThreshold": 1000,
18
- "portraits": {
19
- "width": 100,
20
- "height": 100
21
- }
22
- },
23
- "screens": {
24
- "default": {
25
- "background": "narrat"
26
- },
27
- "map": {
28
- "background": "map",
29
- "buttons": ["shopButton", "parkButton"]
30
- }
31
- },
32
- "buttons": {
33
- "shopButton": {
34
- "enabled": false,
35
- "background": "shopButton",
36
- "position": {
37
- "left": 38,
38
- "top": 6,
39
- "width": 255,
40
- "height": 226
41
- },
42
- "action": "shopButton"
43
- },
44
- "parkButton": {
45
- "enabled": false,
46
- "background": "parkButton",
47
- "position": {
48
- "left": 632,
49
- "top": 86,
50
- "width": 255,
51
- "height": 226
52
- },
53
- "action": "parkButton"
54
- }
55
- },
56
- "skills": {
57
- "agility": {
58
- "name": "Agility",
59
- "description": "How good you are at moving around.",
60
- "startingLevel": 0,
61
- "icon": "img/skills/agility.jpg",
62
- "hidden": true
63
- },
64
- "haggling": {
65
- "name": "Haggling",
66
- "description": "Get good prices on items",
67
- "icon": "img/skills/logic.jpg",
68
- "startingLevel": 1
69
- }
70
- },
71
- "skillChecks": {
72
- "rollRange": 100,
73
- "skillMultiplier": 10,
74
- "failureChance": 1,
75
- "difficultyText": [
76
- [0, "Very Easy"],
77
- [10, "Easy"],
78
- [30, "Medium"],
79
- [50, "Hard"],
80
- [70, "Very Hard"],
81
- [80, "Extremely Hard"],
82
- [90, "Near Impossible"]
83
- ]
84
- },
85
- "scripts": ["data/example.rpy"],
86
- "audio": {
87
- "calm": {
88
- "loop": true,
89
- "src": "music/calm.mp3"
90
- },
91
- "click": {
92
- "src": "audio/click.ogg"
93
- },
94
- "game_start": {
95
- "src": "audio/game_start.ogg"
96
- },
97
- "failure": {
98
- "src": "audio/failure.ogg"
99
- },
100
- "success": {
101
- "src": "audio/success.wav"
102
- }
103
- },
104
- "audioOptions": {
105
- "volume": 0.5,
106
- "musicFadeInTime": 0.5,
107
- "musicFadeInDelay": 0.5,
108
- "musicFadeOutTime": 0.5
109
- },
110
- "notifications": {
111
- "timeOnScreen": 2.5,
112
- "alsoPrintInDialogue": true
113
- },
114
- "hudStats": {
115
- "money": {
116
- "icon": "img/ui/money.png",
117
- "name": "Money",
118
- "startingValue": 10,
119
- "minValue": 0
120
- },
121
- "energy": {
122
- "icon": "img/ui/energy.png",
123
- "name": "Energy",
124
- "startingValue": 10,
125
- "minValue": 0,
126
- "maxValue": 10
127
- }
128
- },
129
- "items": {
130
- "bread": {
131
- "name": "Bread",
132
- "description": "A bread in the game.",
133
- "icon": "img/items/bread.png",
134
- "onUse": {
135
- "action": "jump",
136
- "label": "eat_bread"
137
- }
138
- },
139
- "book": {
140
- "name": "Ominous Book",
141
- "description": "An ominous book. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sed ullamcorper turpis. Aliquam tincidunt dolor sed mollis aliquet. Duis in odio eros. Maecenas sapien arcu, fermentum id tincidunt non, accumsan vel metus. Nullam pretium molestie accumsan. In ut rutrum tellus. Integer vitae nisl eleifend lorem tristique auctor quis sed nulla. Cras gravida viverra tristique. Mauris imperdiet tortor purus, fringilla vehicula metus ullamcorper eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla porta imperdiet justo, sed blandit orci. Aenean accumsan hendrerit arcu, laoreet vestibulum turpis vulputate eu. Etiam dignissim nibh dictum pharetra congue. Nulla ultrices, augue a blandit laoreet, metus enim sodales arcu, eget pellentesque lorem justo et ipsum. ",
142
- "icon": "img/items/book.png",
143
- "onUse": {
144
- "action": "run_label",
145
- "label": "read_book"
146
- },
147
- "tag": "always_interactable"
148
- }
149
- },
150
- "interactionTags": {
151
- "default": {
152
- "onlyInteractOutsideOfScripts": true
153
- }
154
- },
155
- "quests": {
156
- "breadShopping": {
157
- "title": "Bread Shopping",
158
- "description": "The helper cat asked you to buy bread for him.",
159
- "objectives": {
160
- "bread": {
161
- "description": "Buy bread for the helper cat."
162
- },
163
- "delivery": {
164
- "hidden": true,
165
- "description": "Deliver the bread to the helper cat."
166
- }
167
- }
168
- }
169
- },
170
- "audioTriggers": {
171
- "onPlayerAnswered": "click",
172
- "onPressStart": "game_start",
173
- "onSkillCheckFailure": "failure",
174
- "onSkillCheckSuccess": "success"
175
- }
176
- }
1
+ {
2
+ "gameTitle": "Narrat Game Example",
3
+ "images": {
4
+ "narrat": "img/backgrounds/narrat.png",
5
+ "map": "img/backgrounds/map.png",
6
+ "shopButton": "img/ui/shop-button.png",
7
+ "parkButton": "img/ui/park-button.png"
8
+ },
9
+ "layout": {
10
+ "backgrounds": {
11
+ "width": 880,
12
+ "height": 720
13
+ },
14
+ "dialogBottomPadding": 70,
15
+ "minTextWidth": 475,
16
+ "mobileDialogHeightPercentage": 60,
17
+ "verticalLayoutThreshold": 1000,
18
+ "portraits": {
19
+ "width": 100,
20
+ "height": 100
21
+ }
22
+ },
23
+ "screens": {
24
+ "default": {
25
+ "background": "narrat"
26
+ },
27
+ "map": {
28
+ "background": "map",
29
+ "buttons": ["shopButton", "parkButton"]
30
+ }
31
+ },
32
+ "buttons": {
33
+ "shopButton": {
34
+ "enabled": false,
35
+ "background": "shopButton",
36
+ "position": {
37
+ "left": 38,
38
+ "top": 6,
39
+ "width": 255,
40
+ "height": 226
41
+ },
42
+ "action": "shopButton"
43
+ },
44
+ "parkButton": {
45
+ "enabled": false,
46
+ "background": "parkButton",
47
+ "position": {
48
+ "left": 632,
49
+ "top": 86,
50
+ "width": 255,
51
+ "height": 226
52
+ },
53
+ "action": "parkButton"
54
+ }
55
+ },
56
+ "skills": {
57
+ "agility": {
58
+ "name": "Agility",
59
+ "description": "How good you are at moving around.",
60
+ "startingLevel": 0,
61
+ "icon": "img/skills/agility.jpg",
62
+ "hidden": true
63
+ },
64
+ "haggling": {
65
+ "name": "Haggling",
66
+ "description": "Get good prices on items",
67
+ "icon": "img/skills/logic.jpg",
68
+ "startingLevel": 1
69
+ }
70
+ },
71
+ "skillChecks": {
72
+ "rollRange": 100,
73
+ "skillMultiplier": 10,
74
+ "failureChance": 1,
75
+ "difficultyText": [
76
+ [0, "Very Easy"],
77
+ [10, "Easy"],
78
+ [30, "Medium"],
79
+ [50, "Hard"],
80
+ [70, "Very Hard"],
81
+ [80, "Extremely Hard"],
82
+ [90, "Near Impossible"]
83
+ ]
84
+ },
85
+ "scripts": ["data/example.rpy"],
86
+ "audio": {
87
+ "calm": {
88
+ "loop": true,
89
+ "src": "music/calm.mp3"
90
+ },
91
+ "click": {
92
+ "src": "audio/click.ogg"
93
+ },
94
+ "game_start": {
95
+ "src": "audio/game_start.ogg"
96
+ },
97
+ "failure": {
98
+ "src": "audio/failure.ogg"
99
+ },
100
+ "success": {
101
+ "src": "audio/success.wav"
102
+ }
103
+ },
104
+ "audioOptions": {
105
+ "volume": 0.5,
106
+ "musicFadeInTime": 0.5,
107
+ "musicFadeInDelay": 0.5,
108
+ "musicFadeOutTime": 0.5
109
+ },
110
+ "notifications": {
111
+ "timeOnScreen": 2.5,
112
+ "alsoPrintInDialogue": true
113
+ },
114
+ "hudStats": {
115
+ "money": {
116
+ "icon": "img/ui/money.png",
117
+ "name": "Money",
118
+ "startingValue": 10,
119
+ "minValue": 0
120
+ },
121
+ "energy": {
122
+ "icon": "img/ui/energy.png",
123
+ "name": "Energy",
124
+ "startingValue": 10,
125
+ "minValue": 0,
126
+ "maxValue": 10
127
+ }
128
+ },
129
+ "items": {
130
+ "bread": {
131
+ "name": "Bread",
132
+ "description": "A bread in the game.",
133
+ "icon": "img/items/bread.png",
134
+ "onUse": {
135
+ "action": "jump",
136
+ "label": "eat_bread"
137
+ }
138
+ },
139
+ "book": {
140
+ "name": "Ominous Book",
141
+ "description": "An ominous book. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sed ullamcorper turpis. Aliquam tincidunt dolor sed mollis aliquet. Duis in odio eros. Maecenas sapien arcu, fermentum id tincidunt non, accumsan vel metus. Nullam pretium molestie accumsan. In ut rutrum tellus. Integer vitae nisl eleifend lorem tristique auctor quis sed nulla. Cras gravida viverra tristique. Mauris imperdiet tortor purus, fringilla vehicula metus ullamcorper eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla porta imperdiet justo, sed blandit orci. Aenean accumsan hendrerit arcu, laoreet vestibulum turpis vulputate eu. Etiam dignissim nibh dictum pharetra congue. Nulla ultrices, augue a blandit laoreet, metus enim sodales arcu, eget pellentesque lorem justo et ipsum. ",
142
+ "icon": "img/items/book.png",
143
+ "onUse": {
144
+ "action": "run",
145
+ "label": "read_book"
146
+ },
147
+ "tag": "always_interactable"
148
+ }
149
+ },
150
+ "interactionTags": {
151
+ "default": {
152
+ "onlyInteractOutsideOfScripts": true
153
+ }
154
+ },
155
+ "quests": {
156
+ "breadShopping": {
157
+ "title": "Bread Shopping",
158
+ "description": "The helper cat asked you to buy bread for him.",
159
+ "objectives": {
160
+ "bread": {
161
+ "description": "Buy bread for the helper cat."
162
+ },
163
+ "delivery": {
164
+ "hidden": true,
165
+ "description": "Deliver the bread to the helper cat."
166
+ }
167
+ }
168
+ }
169
+ },
170
+ "audioTriggers": {
171
+ "onPlayerAnswered": "click",
172
+ "onPressStart": "game_start",
173
+ "onSkillCheckFailure": "failure",
174
+ "onSkillCheckSuccess": "success"
175
+ },
176
+ "menuButtons": {
177
+ "menu": {
178
+ "text": "Menu",
179
+ "cssId": "my-custom-id"
180
+ }
181
+ }
182
+ }