@origingame/create-game 0.2.0 → 0.4.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.
Files changed (163) hide show
  1. package/README.md +2 -2
  2. package/archetypes/README.md +2 -1
  3. package/archetypes/arena/.origin/setup +14 -0
  4. package/archetypes/arena/LICENSES.md +8 -0
  5. package/archetypes/arena/README.md +67 -0
  6. package/archetypes/arena/assets/audio/coin.ogt +9 -0
  7. package/archetypes/arena/assets/audio/dash.ogt +9 -0
  8. package/archetypes/arena/assets/audio/win.ogt +9 -0
  9. package/archetypes/arena/assets/fx/coin.ogt +20 -0
  10. package/archetypes/arena/assets/looks/arena.ogt +10 -0
  11. package/archetypes/arena/gitattributes +22 -0
  12. package/archetypes/arena/gitignore +8 -0
  13. package/archetypes/arena/host.d.ts +46 -0
  14. package/archetypes/arena/package.json +18 -0
  15. package/archetypes/arena/project.ogt +14 -0
  16. package/archetypes/arena/src/game.ts +314 -0
  17. package/archetypes/arena/src/main.ts +100 -0
  18. package/archetypes/arena/tests/duel.og.ts +32 -0
  19. package/archetypes/arena/tests/solo.og.ts +22 -0
  20. package/archetypes/arena/tsconfig.json +17 -0
  21. package/archetypes/idle/LICENSES.md +1 -1
  22. package/archetypes/idle/README.md +5 -5
  23. package/archetypes/idle/assets/looks/idle.ogt +2 -2
  24. package/archetypes/idle/assets/{skins → styles}/sparkorb/LICENSES.md +6 -6
  25. package/archetypes/idle/assets/{skins/sparkorb/skin.ogt → styles/sparkorb/style.ogt} +47 -47
  26. package/archetypes/idle/package.json +1 -1
  27. package/archetypes/idle/project.ogt +1 -1
  28. package/archetypes/idle/references/metal/card.png +0 -0
  29. package/archetypes/idle/references/metal/orbit.png +0 -0
  30. package/archetypes/idle/references/metal/title.png +0 -0
  31. package/archetypes/idle/src/components.ts +1 -1
  32. package/archetypes/idle/src/main.ts +5 -5
  33. package/archetypes/idle/src/ui.ts +13 -13
  34. package/archetypes/idle/tools/make-assets.py +5 -5
  35. package/archetypes/match3/package.json +1 -1
  36. package/archetypes/match3/project.ogt +1 -1
  37. package/archetypes/rhythm/LICENSES.md +1 -1
  38. package/archetypes/rhythm/README.md +5 -5
  39. package/archetypes/rhythm/assets/{skins → styles}/lanebeat/LICENSES.md +6 -6
  40. package/archetypes/rhythm/assets/{skins/lanebeat/skin.ogt → styles/lanebeat/style.ogt} +45 -45
  41. package/archetypes/rhythm/package.json +1 -1
  42. package/archetypes/rhythm/project.ogt +1 -1
  43. package/archetypes/rhythm/references/metal/results.png +0 -0
  44. package/archetypes/rhythm/references/metal/title.png +0 -0
  45. package/archetypes/rhythm/src/components.ts +1 -1
  46. package/archetypes/rhythm/src/main.ts +3 -3
  47. package/archetypes/rhythm/src/ui.ts +12 -12
  48. package/archetypes/roguelike/LICENSES.md +1 -1
  49. package/archetypes/roguelike/README.md +5 -5
  50. package/archetypes/roguelike/assets/{skins → styles}/lampdive/LICENSES.md +6 -6
  51. package/archetypes/roguelike/assets/{skins/lampdive/skin.ogt → styles/lampdive/style.ogt} +41 -41
  52. package/archetypes/roguelike/package.json +1 -1
  53. package/archetypes/roguelike/project.ogt +1 -1
  54. package/archetypes/roguelike/references/metal/over.png +0 -0
  55. package/archetypes/roguelike/references/metal/title.png +0 -0
  56. package/archetypes/roguelike/src/components.ts +1 -1
  57. package/archetypes/roguelike/src/main.ts +2 -2
  58. package/archetypes/roguelike/src/ui.ts +8 -8
  59. package/archetypes/runner/package.json +1 -1
  60. package/archetypes/runner/project.ogt +1 -1
  61. package/archetypes/third-person/LICENSES.md +1 -1
  62. package/archetypes/third-person/README.md +4 -4
  63. package/archetypes/third-person/assets/{skins → styles}/ember/LICENSES.md +4 -4
  64. package/archetypes/third-person/assets/{skins/ember/skin.ogt → styles/ember/style.ogt} +40 -41
  65. package/archetypes/third-person/package.json +1 -1
  66. package/archetypes/third-person/project.ogt +1 -1
  67. package/archetypes/third-person/references/metal/beacon.png +0 -0
  68. package/archetypes/third-person/references/metal/dawn.png +0 -0
  69. package/archetypes/third-person/references/metal/title.png +0 -0
  70. package/archetypes/third-person/references/webgl2/beacon.png +0 -0
  71. package/archetypes/third-person/src/components.ts +1 -1
  72. package/archetypes/third-person/src/main.ts +3 -3
  73. package/archetypes/third-person/src/sound.ts +1 -1
  74. package/archetypes/third-person/src/ui.ts +11 -11
  75. package/archetypes/topdown/package.json +1 -1
  76. package/archetypes/topdown/project.ogt +1 -1
  77. package/archetypes/tower-defense/LICENSES.md +1 -1
  78. package/archetypes/tower-defense/README.md +5 -5
  79. package/archetypes/tower-defense/assets/{skins → styles}/pathguard/LICENSES.md +4 -4
  80. package/archetypes/tower-defense/assets/styles/pathguard/atlas.png +0 -0
  81. package/archetypes/tower-defense/assets/styles/pathguard/style.ogt +111 -0
  82. package/archetypes/tower-defense/package.json +1 -1
  83. package/archetypes/tower-defense/project.ogt +1 -1
  84. package/archetypes/tower-defense/references/metal/end.png +0 -0
  85. package/archetypes/tower-defense/references/metal/title.png +0 -0
  86. package/archetypes/tower-defense/references/metal/wave.png +0 -0
  87. package/archetypes/tower-defense/src/components.ts +1 -1
  88. package/archetypes/tower-defense/src/main.ts +2 -2
  89. package/archetypes/tower-defense/src/ui.ts +20 -18
  90. package/bin/create.ts +11 -8
  91. package/looks/catalogue.json +40 -40
  92. package/package.json +2 -2
  93. package/template/README.md +2 -1
  94. package/template/assets/audio/sting.ogt +10 -0
  95. package/template/assets/timelines/intro.ogt +101 -0
  96. package/template/assets/timelines/narration.srt +11 -0
  97. package/template/host.d.ts +46 -0
  98. package/template/package.json +1 -1
  99. package/template/project.ogt +1 -1
  100. package/template/references/metal/intro-4.png +0 -0
  101. package/template/references/metal/intro-8.png +0 -0
  102. package/template/src/main.ts +1 -1
  103. package/template/tests/frames.ts +134 -0
  104. package/template/tests/intro.og.ts +65 -0
  105. package/template/tests/smoke.og.ts +30 -36
  106. package/template/tsconfig.json +1 -1
  107. package/template-2d/LICENSES.md +1 -0
  108. package/template-2d/README.md +6 -2
  109. package/template-2d/assets/rigs/keeper.ogt +292 -0
  110. package/template-2d/assets/rigs/keeper.png +0 -0
  111. package/template-2d/assets/rigs/keeper.png.ogt +7 -0
  112. package/template-2d/package.json +1 -1
  113. package/template-2d/project.ogt +1 -1
  114. package/template-2d/src/main.ts +240 -4
  115. package/template-2d/tests/keeper.og.ts +178 -0
  116. package/archetypes/tower-defense/assets/skins/pathguard/atlas.png +0 -0
  117. package/archetypes/tower-defense/assets/skins/pathguard/skin.ogt +0 -111
  118. /package/archetypes/idle/assets/{skins → styles}/sparkorb/ChakraPetch-BoldItalic.ttf +0 -0
  119. /package/archetypes/idle/assets/{skins → styles}/sparkorb/ChakraPetch-BoldItalic.ttf.ogt +0 -0
  120. /package/archetypes/idle/assets/{skins → styles}/sparkorb/OFL.txt +0 -0
  121. /package/archetypes/idle/assets/{skins → styles}/sparkorb/Orbitron-Medium.ttf +0 -0
  122. /package/archetypes/idle/assets/{skins → styles}/sparkorb/Orbitron-Medium.ttf.ogt +0 -0
  123. /package/archetypes/idle/assets/{skins → styles}/sparkorb/Rajdhani-Bold.ttf +0 -0
  124. /package/archetypes/idle/assets/{skins → styles}/sparkorb/Rajdhani-Bold.ttf.ogt +0 -0
  125. /package/archetypes/idle/assets/{skins → styles}/sparkorb/atlas.png +0 -0
  126. /package/archetypes/idle/assets/{skins → styles}/sparkorb/atlas.png.ogt +0 -0
  127. /package/archetypes/idle/assets/{skins → styles}/sparkorb/icons.png +0 -0
  128. /package/archetypes/idle/assets/{skins → styles}/sparkorb/icons.png.ogt +0 -0
  129. /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/ChakraPetch-Medium.ttf +0 -0
  130. /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/ChakraPetch-Medium.ttf.ogt +0 -0
  131. /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/JetBrainsMono-Regular.ttf +0 -0
  132. /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/JetBrainsMono-Regular.ttf.ogt +0 -0
  133. /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/OFL.txt +0 -0
  134. /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/Orbitron-Bold.ttf +0 -0
  135. /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/Orbitron-Bold.ttf.ogt +0 -0
  136. /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/atlas.png +0 -0
  137. /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/atlas.png.ogt +0 -0
  138. /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/icons.png +0 -0
  139. /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/icons.png.ogt +0 -0
  140. /package/archetypes/roguelike/assets/{skins → styles}/lampdive/DotGothic16-Regular.ttf +0 -0
  141. /package/archetypes/roguelike/assets/{skins → styles}/lampdive/DotGothic16-Regular.ttf.ogt +0 -0
  142. /package/archetypes/roguelike/assets/{skins → styles}/lampdive/OFL.txt +0 -0
  143. /package/archetypes/roguelike/assets/{skins → styles}/lampdive/atlas.png +0 -0
  144. /package/archetypes/roguelike/assets/{skins → styles}/lampdive/atlas.png.ogt +0 -0
  145. /package/archetypes/roguelike/assets/{skins → styles}/lampdive/icons.png +0 -0
  146. /package/archetypes/roguelike/assets/{skins → styles}/lampdive/icons.png.ogt +0 -0
  147. /package/archetypes/third-person/assets/{skins → styles}/ember/Cinzel-Bold.ttf +0 -0
  148. /package/archetypes/third-person/assets/{skins → styles}/ember/Cinzel-Bold.ttf.ogt +0 -0
  149. /package/archetypes/third-person/assets/{skins → styles}/ember/Newsreader-Medium.ttf +0 -0
  150. /package/archetypes/third-person/assets/{skins → styles}/ember/Newsreader-Medium.ttf.ogt +0 -0
  151. /package/archetypes/third-person/assets/{skins → styles}/ember/OFL.txt +0 -0
  152. /package/archetypes/third-person/assets/{skins → styles}/ember/atlas.png +0 -0
  153. /package/archetypes/third-person/assets/{skins → styles}/ember/atlas.png.ogt +0 -0
  154. /package/archetypes/third-person/assets/{skins → styles}/ember/icons.png +0 -0
  155. /package/archetypes/third-person/assets/{skins → styles}/ember/icons.png.ogt +0 -0
  156. /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/Fredoka-SemiBold.ttf +0 -0
  157. /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/Fredoka-SemiBold.ttf.ogt +0 -0
  158. /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/LilitaOne-Regular.ttf +0 -0
  159. /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/LilitaOne-Regular.ttf.ogt +0 -0
  160. /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/OFL.txt +0 -0
  161. /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/atlas.png.ogt +0 -0
  162. /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/icons.png +0 -0
  163. /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/icons.png.ogt +0 -0
@@ -70,8 +70,8 @@ og build . --publish # dist/: the play page as it ships
70
70
  of ten or more broken, louder); the rings breathe with the beat (not
71
71
  with reduced motion). There is no hit stop: it would hold the picture
72
72
  while the music runs on.
73
- - **Screens on og.ui with a skin** (og-ui §2–§6, og-taste §1–§7): the
74
- engine's sci-fi pack recoloured as `assets/skins/lanebeat`; the title
73
+ - **Screens on og.ui with a style** (og-ui §2–§6, og-taste §1–§7): the
74
+ engine's sci-fi pack recoloured as `assets/styles/lanebeat`; the title
75
75
  (Play, Calibrate, Settings), the HUD (the score as an `og.ui.counter`
76
76
  and the groove top left, Pause top right, the combo beside the
77
77
  highway), `og.ui.pauseMenu` (Resume, Restart, Settings, Title), the
@@ -169,7 +169,7 @@ og.music (before og.audio) writes the clock and sends og.MusicBeat.
169
169
  bar-aligned) and `partsAt` in `src/systems.ts`, which says which stem
170
170
  starts on which bar.
171
171
  3. **The difficulty**: the windows, the scroll and the groove in `Tuning`.
172
- 4. **The look**: `assets/skins/lanebeat/skin.ogt`'s palette, the lanes'
172
+ 4. **The look**: `assets/styles/lanebeat/style.ogt`'s palette, the lanes'
173
173
  colours (`LANE_COLOURS`) and the art in `tools/make-assets.py`.
174
174
  5. **Words**: `assets/strings/*.ogt`; a new Chinese string needs the
175
175
  script run again to subset the font.
@@ -221,8 +221,8 @@ in the engine repository).
221
221
  give the same bytes): the chart and the stems from one set of note lists,
222
222
  the click, the taps, the miss, the clear and the fail, the note, the ring,
223
223
  the lane's glow, the spark, the hit's burst, the `og sfx` preset files of
224
- the UI's sounds and the font subset. `LICENSES.md` lists them; the skin's
225
- are in `assets/skins/lanebeat/LICENSES.md`.
224
+ the UI's sounds and the font subset. `LICENSES.md` lists them; the style's
225
+ are in `assets/styles/lanebeat/LICENSES.md`.
226
226
 
227
227
  ## Known limits (engine gaps, not design)
228
228
 
@@ -1,17 +1,17 @@
1
- # Three-Lane Beat's skin (the engine's sci-fi style pack, recoloured): licences
1
+ # Three-Lane Beat's style (the engine's sci-fi style pack, recoloured): licences
2
2
 
3
- The palette, the body sizes and the fallback font in `skin.ogt` are this
4
- game's edits by hand; the rest is the pack as `templates/ui-kit/assets/skins/scifi` ships it.
3
+ The palette, the body sizes and the fallback font in `style.ogt` are this
4
+ game's edits by hand; the rest is the pack as `templates/styles/scifi` ships it.
5
5
 
6
6
  | File | Licence | Origin |
7
7
  |---|---|---|
8
- | `atlas.png` | CC0 1.0 | self-made by the Origin Engine authors: drawn by `templates/ui-kit/tools/make-skins.py` (deterministic) |
8
+ | `atlas.png` | CC0 1.0 | self-made by the Origin Engine authors: drawn by `templates/ui-kit/tools/make-styles.py` (deterministic) |
9
9
  | `icons.png` | CC0 1.0 | self-made: the kit's 32 icons (`tools/make-assets.py`) restyled by the same script |
10
- | `skin.ogt`, `*.ogt` | CC0 1.0 | written by the same script |
10
+ | `style.ogt`, `*.ogt` | CC0 1.0 | written by the same script |
11
11
  | `ChakraPetch-Medium.ttf` | SIL Open Font License 1.1 (`OFL.txt`) | Chakra Petch Medium (github.com/m4rc1e/Chakra-Petch); unmodified. Copyright 2018 The Chakra Petch Project Authors (https://github.com/m4rc1e/Chakra-Petch.git) |
12
12
  | `JetBrainsMono-Regular.ttf` | SIL Open Font License 1.1 (`OFL.txt`) | JetBrains Mono (github.com/JetBrains/JetBrainsMono); unmodified. Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) |
13
13
  | `Orbitron-Bold.ttf` | SIL Open Font License 1.1 (`OFL.txt`) | Orbitron Bold (github.com/theleagueof/orbitron); unmodified. Copyright 2018 The Orbitron Project Authors (https://github.com/theleagueof/orbitron), with Reserved Font Name: "Orbitron". |
14
14
 
15
15
  Characters these fonts lack (Chinese, Japanese, Korean) are drawn with the
16
- skin's `fallback` font, `fonts/NotoSansSC-subset.ttf` (Noto Sans SC subset to
16
+ style's `fallback` font, `fonts/NotoSansSC-subset.ttf` (Noto Sans SC subset to
17
17
  this game's Chinese strings, OFL 1.1, `assets/fonts/OFL.txt`).
@@ -1,52 +1,52 @@
1
- type skin
1
+ type style
2
2
  version 1
3
3
  ---
4
- # Three-Lane Beat's skin: the engine's sci-fi style pack (templates/ui-kit/tools/make-skins.py,
4
+ # Three-Lane Beat's style: the engine's sci-fi style pack (templates/ui-kit/tools/make-styles.py,
5
5
  # CC0 art, OFL fonts; LICENSES.md) with this game's palette and its Chinese fallback font, by hand.
6
6
  name "lanebeat"
7
- base dark
8
- atlas "skins/lanebeat/atlas.png" 384 256
7
+ scheme dark
8
+ atlas "styles/lanebeat/atlas.png" 384 256
9
9
  scale 1
10
10
  palette {
11
- bg "#03080f"
12
- bgSubtle "#071220"
13
- surface "#0f2a3d"
14
- surfaceRaised "#0f2a3d"
15
- surfaceHover "#16384f"
16
- materialThick "#0f2a3d"
17
- materialRegular "#0f2a3de6"
18
- materialThin "#0f2a3dcc"
19
- fg "#e2f7ff"
20
- fgMuted "#a6cde0"
21
- fgSubtle "#8fb3c6"
22
- fgInverse "#03080f"
23
- fill "#3f8fb3"
24
- fillStrong "#5aaed4"
25
- border "#2c6a88"
26
- borderStrong "#6fd3f5"
27
- accent "#38e1ff"
28
- accentHover "#30d4f0"
29
- accentActive "#16c4e6"
30
- accentFg "#e2f7ff"
31
- accentInk "#7fecff"
32
- accentSoft "#38e1ff2a"
11
+ backdrop "#03080f"
12
+ well "#071220"
13
+ panel "#0f2a3d"
14
+ panelHover "#16384f"
15
+ panelRaised "#0f2a3d"
16
+ line "#2c6a88"
17
+ lineStrong "#6fd3f5"
18
+ ink "#e2f7ff"
19
+ inkMuted "#a6cde0"
20
+ inkFaint "#8fb3c6"
21
+ inkInverse "#03080f"
22
+ control "#3f8fb3"
23
+ controlStrong "#5aaed4"
24
+ primary "#38e1ff"
25
+ primaryHover "#30d4f0"
26
+ primaryActive "#16c4e6"
27
+ onPrimary "#e2f7ff"
28
+ primarySoft "#38e1ff2a"
29
+ highlight "#7fecff"
33
30
  focus "#ffd23f"
34
- thumb "#2f7194"
31
+ knob "#2f7194"
32
+ hud "#0f2a3d"
35
33
  scrim "#010409cc"
34
+ shadow "#00000099"
35
+ sheen "#ffffff52"
36
36
  success "#3dffa0"
37
37
  warn "#ffc53d"
38
38
  danger "#ff4d6a"
39
39
  info "#38e1ff"
40
- shadow "#00000099"
40
+ health "#3dffa0"
41
+ mana "#0a84ff"
42
+ xp "#bf5af2"
43
+ gold "#38e1ff"
41
44
  }
42
45
  radius {
46
+ small 2
43
47
  control 2
44
- field 2
45
- block 2
46
- card 2
48
+ bar 2
47
49
  panel 2
48
- sheet 2
49
- button 2
50
50
  }
51
51
  ramp {
52
52
  body 16 22
@@ -67,12 +67,12 @@ durations {
67
67
  slow 360
68
68
  }
69
69
  fonts {
70
- body "skins/lanebeat/ChakraPetch-Medium.ttf"
71
- display "skins/lanebeat/Orbitron-Bold.ttf"
72
- numeric "skins/lanebeat/JetBrainsMono-Regular.ttf"
70
+ body "styles/lanebeat/ChakraPetch-Medium.ttf"
71
+ display "styles/lanebeat/Orbitron-Bold.ttf"
72
+ numeric "styles/lanebeat/JetBrainsMono-Regular.ttf"
73
73
  fallback "fonts/NotoSansSC-subset.ttf"
74
74
  }
75
- icons "skins/lanebeat/icons.png" 8 4 {
75
+ icons "styles/lanebeat/icons.png" 8 4 {
76
76
  names "heart" "star" "coin" "lock" "pause" "gear" "sword" "shield" "potion" "gem" "key" "map" "bolt" "clock" "trophy" "home" "plus" "close" "check" "play" "back" "bag" "bomb" "crown" "flag" "apple" "leaf" "fire" "drop" "skull" "music" "person"
77
77
  }
78
78
  slice panel 4 4 96 96 18 tint
@@ -84,20 +84,20 @@ slice buttonDisabled 328 4 48 48 12 tint
84
84
  slice field 4 104 48 48 8 tint
85
85
  slice slot 56 104 48 48 10 tint
86
86
  slice tooltip 108 104 32 32 8 tint
87
- slice capsule 144 104 32 32 10 tint
87
+ slice hud 144 104 32 32 10 tint
88
88
  slice track 180 104 32 16 5 tint
89
89
  slice fill 216 104 32 16 2 tint
90
90
  soft 252 104 64 64 24
91
- corner 320 104 32 32 18 18 accent 4
91
+ corner 320 104 32 32 18 18 primary 4
92
92
  corners panel card slot
93
- divider 4 172 128 24 128 24 accent
94
- flourish 136 172 64 24 32 14 accent 0
93
+ divider 4 172 128 24 128 24 primary
94
+ flourish 136 172 64 24 32 14 primary 0
95
95
  tile 204 172 64 64 64 64 0.08 3 panel
96
96
  shadow panel 0 0 18 0 "#000000aa"
97
- glow button 5 accent 0.22
98
- glow panel 10 accent 0.12
99
- glow capsule 4 accent 0.18
100
- textGlow display 1.5 accent 0.55
97
+ glow button 5 primary 0.22
98
+ glow panel 10 primary 0.12
99
+ glow hud 4 primary 0.18
100
+ textGlow display 1.5 primary 0.55
101
101
  press 0.98 0.98 0
102
102
  hover 0 1.02
103
103
  motion {
@@ -13,6 +13,6 @@
13
13
  "test": "og test ."
14
14
  },
15
15
  "dependencies": {
16
- "@origingame/engine": "0.2.0"
16
+ "@origingame/engine": "0.4.0"
17
17
  }
18
18
  }
@@ -3,7 +3,7 @@ version 1
3
3
  ---
4
4
  name "Three-Lane Beat"
5
5
  id "rhythm"
6
- engine "0.2.0"
6
+ engine "0.4.0"
7
7
  entry "src/main.ts"
8
8
  profile "2d"
9
9
  tick 60
@@ -25,7 +25,7 @@ export const Sound = { Tap0: 1, Tap1: 2, Tap2: 4, Miss: 8, Clear: 16, Fail: 32,
25
25
  /** The play: the song's clock, the judgements, the score, the groove, the calibration, the best. */
26
26
  export const Game = defineResource("Game", {
27
27
  phase: u32(Phase.Title, { doc: "Phase.* of src/components.ts." }),
28
- leftTitle: bool(false, { doc: "The player has left the title the game opened on: from then on the title enters with the skin's entrance (the opening one is built settled, og.ui.mainMenu's instant: the web draws it behind the play gate)." }),
28
+ leftTitle: bool(false, { doc: "The player has left the title the game opened on: from then on the title enters with the style's entrance (the opening one is built settled, og.ui.mainMenu's instant: the web draws it behind the play gate)." }),
29
29
  paused: bool(false),
30
30
  settingsOpen: bool(false),
31
31
  held: bool(false, { doc: "The time scale is held at 0 (paused or in the settings)." }),
@@ -9,7 +9,7 @@
9
9
  //
10
10
  // The song is its stems, started on bar lines through og.Music (src/
11
11
  // systems.ts's Band); the chart is a scene (assets/charts/neon-pulse.ogt)
12
- // of a Song row and a Note row per note. `start` loads them, the skin, the
12
+ // of a Song row and a Note row per note. `start` loads them, the style, the
13
13
  // strings and the sounds, and spawns the clock, the stems, the receptors
14
14
  // and the voices. The systems are in src/systems.ts, the screens in
15
15
  // src/ui.ts and the state in src/components.ts.
@@ -32,9 +32,9 @@ function must<T>(r: { ok: true; value?: T } | { ok: false; reason: string }): T
32
32
 
33
33
  function start(world: World): void {
34
34
  for (const l of LANGUAGES) must(og.i18n.load(world, `strings/${l.code}.ogt`));
35
- const skin = must(og.load.skin(world, "skins/lanebeat/skin.ogt"));
35
+ const style = must(og.load.style(world, "styles/lanebeat/style.ogt"));
36
36
  const sound = (path: string) => must(og.load.sound(world, path));
37
- must(og.ui.configure(world, { skin, sounds: { press: sound("audio/ui-press.ogt"), open: sound("audio/ui-open.ogt"), close: sound("audio/ui-close.ogt"), error: sound("audio/ui-error.ogt"), success: sound("audio/ui-success.ogt") } }));
37
+ must(og.ui.configure(world, { style, sounds: { press: sound("audio/ui-press.ogt"), open: sound("audio/ui-open.ogt"), close: sound("audio/ui-close.ogt"), error: sound("audio/ui-error.ogt"), success: sound("audio/ui-success.ogt") } }));
38
38
 
39
39
  const settings = must(world.resource(og.RenderSettings));
40
40
  settings.environmentIntensity = 0;
@@ -1,4 +1,4 @@
1
- // Three-Lane Beat's screens on og.ui and the skin in assets/skins/lanebeat
1
+ // Three-Lane Beat's screens on og.ui and the style in assets/styles/lanebeat
2
2
  // (the engine's sci-fi pack): the title, the HUD (the score and the groove
3
3
  // top left, Pause top right, the combo and its multiplier beside the
4
4
  // highway), the pause menu, the settings with the offset, the calibration
@@ -204,7 +204,7 @@ export function grade(acc: number): string {
204
204
  }
205
205
 
206
206
  function capsule(id: string, build: () => void): void {
207
- og.ui.row(id, { gap: S.sm, cross: "center", padding: { left: S.sm, top: S.xs, right: S.md, bottom: S.xs }, frame: "capsule", background: { token: "surface" } }, build);
207
+ og.ui.row(id, { gap: S.sm, cross: "center", padding: { left: S.sm, top: S.xs, right: S.md, bottom: S.xs }, frame: "hud", background: { token: "panel" } }, build);
208
208
  }
209
209
 
210
210
  function hud(world: World, g: GameV): void {
@@ -215,11 +215,11 @@ function hud(world: World, g: GameV): void {
215
215
  og.ui.setNavigation(g.paused || g.settingsOpen);
216
216
  og.ui.anchor("Status", { anchor: "topLeft", direction: "column", gap: S.sm }, () => {
217
217
  capsule("Score", () => {
218
- og.ui.label("Label", say(world, "hud.score"), { step: "caption", color: { token: "fgMuted" }, nowrap: true });
218
+ og.ui.label("Label", say(world, "hud.score"), { step: "caption", color: { token: "inkMuted" }, nowrap: true });
219
219
  og.ui.counter("Value", g.score, { step: "xl", font: "display", durationMs: 300, width: px(phone ? 104 : 130) });
220
220
  });
221
221
  capsule("Groove", () => {
222
- og.ui.label("Label", say(world, "hud.groove"), { step: "caption", color: { token: "fgMuted" }, nowrap: true });
222
+ og.ui.label("Label", say(world, "hud.groove"), { step: "caption", color: { token: "inkMuted" }, nowrap: true });
223
223
  og.ui.meter("Bar", g.groove, 1, { kind: "health", width: px(phone ? 90 : 130) });
224
224
  });
225
225
  });
@@ -233,8 +233,8 @@ function hud(world: World, g: GameV): void {
233
233
  og.ui.anchor("Combo", { anchor: phone ? "top" : "right", offsetY: phone ? 64 : 40, offsetX: phone ? 0 : -48, direction: "column", cross: "center", gap: S.xxs }, () => {
234
234
  og.ui.counter("Count", g.combo, { step: "displaySm", font: "display", durationMs: 120, align: "center", width: px(96) });
235
235
  og.ui.row("Head", { gap: S.xs, cross: "center" }, () => {
236
- og.ui.label("Label", say(world, "hud.combo"), { step: "caption", color: { token: "fgMuted" }, nowrap: true });
237
- og.ui.label("Multiplier", say(world, "hud.multiplier", { n: multiplier }), { step: "caption", color: { token: "accent" }, nowrap: true });
236
+ og.ui.label("Label", say(world, "hud.combo"), { step: "caption", color: { token: "inkMuted" }, nowrap: true });
237
+ og.ui.label("Multiplier", say(world, "hud.multiplier", { n: multiplier }), { step: "caption", color: { token: "primary" }, nowrap: true });
238
238
  });
239
239
  og.ui.meter("Next", multiplier >= 4 ? 1 : (g.combo % t.comboStep) / t.comboStep, 1, { width: px(96) });
240
240
  });
@@ -258,7 +258,7 @@ function settings(world: World, g: GameV, p: PrefsV): void {
258
258
  p.music = slider("Music", "settings.music", p.music);
259
259
  p.effects = slider("Effects", "settings.effects", p.effects);
260
260
  p.offsetMs = slider("Offset", "settings.offset", p.offsetMs, -200, 200, 5, (v) => say(world, "settings.ms", { n: Math.round(v) }));
261
- og.ui.label("LanguageLabel", say(world, "settings.language"), { color: { token: "fgMuted" } });
261
+ og.ui.label("LanguageLabel", say(world, "settings.language"), { color: { token: "inkMuted" } });
262
262
  const r = og.ui.radio("Language", LANGUAGES.map((l) => say(world, l.key)), p.language, { horizontal: true });
263
263
  if (r.selected !== p.language) setLanguage(world, p, r.selected);
264
264
  p.reducedMotion = og.ui.toggle("Motion", p.reducedMotion, say(world, "settings.motion")).on;
@@ -284,7 +284,7 @@ function calibration(world: World, g: GameV, p: PrefsV): void {
284
284
  og.ui.label("Body", say(world, "cal.body"), { width: grow });
285
285
  og.ui.row("Taps", { width: grow, gap: S.md, cross: "center" }, () => {
286
286
  og.ui.label("Count", say(world, "cal.taps", { n: g.calTaps }), { nowrap: true, width: grow });
287
- og.ui.label("Offset", say(world, "cal.offset", { n: Math.round(measured) }), { font: "mono", nowrap: true, color: { token: "accent" } });
287
+ og.ui.label("Offset", say(world, "cal.offset", { n: Math.round(measured) }), { font: "mono", nowrap: true, color: { token: "primary" } });
288
288
  });
289
289
  og.ui.meter("Progress", g.calTaps, 8, { width: grow });
290
290
  og.ui.row("Actions", { width: grow, gap: S.sm, align: "end" }, () => {
@@ -312,8 +312,8 @@ function results(world: World, g: GameV): "again" | "title" | null {
312
312
  const acc = accuracy(g);
313
313
  og.ui.modal("Results", true, { title: say(world, g.cleared ? "results.cleared" : "results.failed"), locked: true, width: px(Math.min(420, og.ui.frameViewport().width - 32)) }, () => {
314
314
  og.ui.row("Mark", { width: grow, align: "center", gap: S.md, cross: "center" }, () => {
315
- og.ui.transition("Grade", true, { kind: "pop" }, () => og.ui.label("Letter", g.cleared ? grade(acc) : "–", { step: "displayMd", font: "display", color: { token: g.cleared ? "accent" : "fgMuted" } }));
316
- if (g.newBest) og.ui.label("NewBest", say(world, "results.newBest"), { color: { token: "accent" }, nowrap: true });
315
+ og.ui.transition("Grade", true, { kind: "pop" }, () => og.ui.label("Letter", g.cleared ? grade(acc) : "–", { step: "displayMd", font: "display", color: { token: g.cleared ? "primary" : "inkMuted" } }));
316
+ if (g.newBest) og.ui.label("NewBest", say(world, "results.newBest"), { color: { token: "primary" }, nowrap: true });
317
317
  });
318
318
  og.ui.column("Stats", { width: grow, gap: 0 }, () => {
319
319
  og.ui.keyValue("Score", say(world, "results.score"), `${g.score}`, true);
@@ -324,7 +324,7 @@ function results(world: World, g: GameV): "again" | "title" | null {
324
324
  og.ui.keyValue("Good", say(world, "results.good"), `${g.good}`, true);
325
325
  og.ui.keyValue("Miss", say(world, "results.miss"), `${g.miss}`, true);
326
326
  });
327
- og.ui.label("Best", say(world, "results.best", { n: g.best }), { color: { token: "fgMuted" }, align: "center", width: grow });
327
+ og.ui.label("Best", say(world, "results.best", { n: g.best }), { color: { token: "inkMuted" }, align: "center", width: grow });
328
328
  og.ui.row("Actions", { width: grow, gap: S.sm }, () => {
329
329
  if (og.ui.button("Again", say(world, "results.again"), { variant: "primary", width: grow }).clicked) chose = "again";
330
330
  if (og.ui.button("Title", say(world, "results.title"), { width: grow }).clicked) chose = "title";
@@ -380,7 +380,7 @@ export const Ui = defineSystem("Ui", { reads: [Tuning, og.Input, og.Gamepad], wr
380
380
  ],
381
381
  footer: say(world, "title.footer"),
382
382
  // The title the game opens on is built settled: the web draws it behind the play gate, where
383
- // the skin's entrance would stand part-way until the tap (og-platform-sdk §3). Later titles enter.
383
+ // the style's entrance would stand part-way until the tap (og-platform-sdk §3). Later titles enter.
384
384
  instant: !g.leftTitle,
385
385
  });
386
386
  if (!g.settingsOpen && r.selected === "play") begin(world, g);
@@ -10,5 +10,5 @@
10
10
  | `assets/audio/*.ogt` | CC0 1.0 | `og sfx` presets (click, select, back, error, levelup, and a footstep) that `og cook` synthesises, written by the same script |
11
11
  | `assets/strings/*.ogt` | CC0 1.0 | self-made: the English and Chinese string tables |
12
12
  | `assets/fonts/NotoSansSC-subset.ttf` | SIL Open Font License 1.1 (`assets/fonts/OFL.txt`) | Noto Sans SC Regular, subset to Latin-1 and the characters of `assets/strings/zh-CN.ogt` by the same script from the project template's `assets/fonts/NotoSansSC-Regular-subset.ttf` |
13
- | `assets/skins/lampdive/*` | CC0 1.0 art, SIL OFL 1.1 fonts | the engine's pixel style pack (`templates/ui-kit/assets/skins/pixel`, `assets/skins/lampdive/LICENSES.md`) with this game's palette |
13
+ | `assets/styles/lampdive/*` | CC0 1.0 art, SIL OFL 1.1 fonts | the engine's pixel style pack (`templates/styles/pixel`, `assets/styles/lampdive/LICENSES.md`) with this game's palette |
14
14
  | `references/*/*.png` | CC0 1.0 | frames of this game recorded by `tests/frames.og.ts` |
@@ -61,8 +61,8 @@ og build . --publish # dist/: the play page as it ships
61
61
  flash, a squash, the red number, a hit stop and a kick; the guardian
62
62
  glows red and shows "!" the turn before a charged strike (twice the hit
63
63
  stop and trauma); its fall and the lamp going out are heavier still.
64
- - **Screens on og.ui with a skin** (og-ui §2–§6, og-taste §1–§7): the
65
- engine's pixel pack recoloured as `assets/skins/lampdive` (the tomb's
64
+ - **Screens on og.ui with a style** (og-ui §2–§6, og-taste §1–§7): the
65
+ engine's pixel pack recoloured as `assets/styles/lampdive` (the tomb's
66
66
  violet panels, the lamp's amber as the one accent); the title over the
67
67
  lamp-lit first room, the HUD as capsules in the corners (health meter,
68
68
  strike, armour, gold, the floor, Pause), the draught button (it shakes
@@ -188,7 +188,7 @@ next tick).
188
188
  and a mind.
189
189
  3. **The finds**: `LootKind`, the `finds` lists in `planFloor`, a `take`
190
190
  case.
191
- 4. **The look**: `assets/skins/lampdive/skin.ogt`'s palette and the art in
191
+ 4. **The look**: `assets/styles/lampdive/style.ogt`'s palette and the art in
192
192
  `tools/make-assets.py`, then `python3 tools/make-assets.py && og cook .`.
193
193
  5. **Words**: `assets/strings/*.ogt`; a new Chinese string needs the
194
194
  script run again to subset the font.
@@ -237,8 +237,8 @@ in the engine repository).
237
237
  `tools/make-assets.py` regenerates every asset byte for byte (two runs
238
238
  give the same bytes): the tileset, the map, the sprite sheet and the glow,
239
239
  the sounds and the music, the `og sfx` preset files of the UI's sounds and
240
- the footstep, and the font subset. `LICENSES.md` lists them; the skin's
241
- are in `assets/skins/lampdive/LICENSES.md`.
240
+ the footstep, and the font subset. `LICENSES.md` lists them; the style's
241
+ are in `assets/styles/lampdive/LICENSES.md`.
242
242
 
243
243
  ## Known limits (engine gaps, not design)
244
244
 
@@ -1,16 +1,16 @@
1
- # Lamp Dive's skin (the engine's pixel style pack, recoloured): licences
1
+ # Lamp Dive's style (the engine's pixel style pack, recoloured): licences
2
2
 
3
3
  The palette, the body text's 1 px dark shadow and the fallback font in
4
- `skin.ogt` are this game's edits by hand; the rest is the pack as
5
- `templates/ui-kit/assets/skins/pixel` ships it.
4
+ `style.ogt` are this game's edits by hand; the rest is the pack as
5
+ `templates/styles/pixel` ships it.
6
6
 
7
7
  | File | Licence | Origin |
8
8
  |---|---|---|
9
- | `atlas.png` | CC0 1.0 | self-made by the Origin Engine authors: drawn by `templates/ui-kit/tools/make-skins.py` (deterministic) |
9
+ | `atlas.png` | CC0 1.0 | self-made by the Origin Engine authors: drawn by `templates/ui-kit/tools/make-styles.py` (deterministic) |
10
10
  | `icons.png` | CC0 1.0 | self-made: the kit's 32 icons (`tools/make-assets.py`) restyled by the same script |
11
- | `skin.ogt`, `*.ogt` | CC0 1.0 | written by the same script |
11
+ | `style.ogt`, `*.ogt` | CC0 1.0 | written by the same script |
12
12
  | `DotGothic16-Regular.ttf` | SIL Open Font License 1.1 (`OFL.txt`) | DotGothic16 (github.com/fontworks-fonts/DotGothic16); subset to Latin-1 with fontTools. Copyright 2020 The DotGothic16 Project Authors (https://github.com/fontworks-fonts/DotGothic16/) |
13
13
 
14
14
  Characters these fonts lack (Chinese, Japanese, Korean) are drawn with the
15
- skin's `fallback` font, `fonts/NotoSansSC-subset.ttf` (Noto Sans SC subset to
15
+ style's `fallback` font, `fonts/NotoSansSC-subset.ttf` (Noto Sans SC subset to
16
16
  this game's Chinese strings, OFL 1.1, `assets/fonts/OFL.txt`).
@@ -1,52 +1,52 @@
1
- type skin
1
+ type style
2
2
  version 1
3
3
  ---
4
- # Lamp Dive's skin: the engine's pixel style pack (templates/ui-kit/tools/make-skins.py; CC0 art, OFL
4
+ # Lamp Dive's style: the engine's pixel style pack (templates/ui-kit/tools/make-styles.py; CC0 art, OFL
5
5
  # fonts; LICENSES.md) in tomb colours: plum stone panels, the lamp's amber as the one accent.
6
6
  name "lampdive"
7
- base dark
8
- atlas "skins/lampdive/atlas.png" 384 256
7
+ scheme dark
8
+ atlas "styles/lampdive/atlas.png" 384 256
9
9
  scale 1
10
10
  palette {
11
- bg "#100c14"
12
- bgSubtle "#17121d"
13
- surface "#2a2131"
14
- surfaceRaised "#2a2131"
15
- surfaceHover "#382c41"
16
- materialThick "#211a28f2"
17
- materialRegular "#211a28e6"
18
- materialThin "#211a28cc"
19
- fg "#f4f1de"
20
- fgMuted "#c9c2a8"
21
- fgSubtle "#b8b29a"
22
- fgInverse "#14111f"
23
- fill "#4c3d58"
24
- fillStrong "#5e4b6b"
25
- border "#5a4866"
26
- borderStrong "#a990b8"
27
- accent "#ffb347"
28
- accentHover "#ffc56e"
29
- accentActive "#e69a2e"
30
- accentFg "#14111f"
31
- accentInk "#ffc56e"
32
- accentSoft "#ffb34724"
11
+ backdrop "#100c14"
12
+ well "#17121d"
13
+ panel "#2a2131"
14
+ panelHover "#382c41"
15
+ panelRaised "#2a2131"
16
+ line "#5a4866"
17
+ lineStrong "#a990b8"
18
+ ink "#f4f1de"
19
+ inkMuted "#c9c2a8"
20
+ inkFaint "#b8b29a"
21
+ inkInverse "#14111f"
22
+ control "#4c3d58"
23
+ controlStrong "#5e4b6b"
24
+ primary "#ffb347"
25
+ primaryHover "#ffc56e"
26
+ primaryActive "#e69a2e"
27
+ onPrimary "#14111f"
28
+ primarySoft "#ffb34724"
29
+ highlight "#ffc56e"
33
30
  focus "#ffb347"
34
- thumb "#5a4866"
31
+ knob "#5a4866"
32
+ hud "#211a28f2"
35
33
  scrim "#08060bb8"
34
+ shadow "#00000099"
35
+ sheen "#ffffff52"
36
36
  success "#6fad74"
37
37
  warn "#ffa53d"
38
38
  danger "#fa7771"
39
39
  info "#5dc2ff"
40
- shadow "#00000099"
40
+ health "#6fad74"
41
+ mana "#0a84ff"
42
+ xp "#bf5af2"
43
+ gold "#ffb347"
41
44
  }
42
45
  radius {
46
+ small 0
43
47
  control 0
44
- field 0
45
- block 0
46
- card 0
48
+ bar 0
47
49
  panel 0
48
- sheet 0
49
- button 0
50
50
  }
51
51
  ramp {
52
52
  xs 12 16
@@ -71,12 +71,12 @@ durations {
71
71
  slow 320
72
72
  }
73
73
  fonts {
74
- body "skins/lampdive/DotGothic16-Regular.ttf"
75
- display "skins/lampdive/DotGothic16-Regular.ttf"
76
- numeric "skins/lampdive/DotGothic16-Regular.ttf"
74
+ body "styles/lampdive/DotGothic16-Regular.ttf"
75
+ display "styles/lampdive/DotGothic16-Regular.ttf"
76
+ numeric "styles/lampdive/DotGothic16-Regular.ttf"
77
77
  fallback "fonts/NotoSansSC-subset.ttf"
78
78
  }
79
- icons "skins/lampdive/icons.png" 8 4 {
79
+ icons "styles/lampdive/icons.png" 8 4 {
80
80
  names "heart" "star" "coin" "lock" "pause" "gear" "sword" "shield" "potion" "gem" "key" "map" "bolt" "clock" "trophy" "home" "plus" "close" "check" "play" "back" "bag" "bomb" "crown" "flag" "apple" "leaf" "fire" "drop" "skull" "music" "person"
81
81
  }
82
82
  slice panel 4 4 96 96 8 tint
@@ -88,17 +88,17 @@ slice buttonDisabled 328 4 48 48 6 tint
88
88
  slice field 4 104 48 48 4 tint
89
89
  slice slot 56 104 48 48 4 tint
90
90
  slice tooltip 108 104 32 32 4 tint
91
- slice capsule 144 104 32 32 4 tint
91
+ slice hud 144 104 32 32 4 tint
92
92
  slice track 180 104 32 16 4 tint
93
93
  slice fill 216 104 32 16 4 tint
94
94
  soft 252 104 64 64 24
95
- divider 4 172 128 24 128 24 border
96
- flourish 136 172 64 24 32 12 accent 0
95
+ divider 4 172 128 24 128 24 line
96
+ flourish 136 172 64 24 32 12 primary 0
97
97
  tile 204 172 64 64 16 16 0.06 6 panel
98
98
  shadow panel 6 6 0 0 "#000000b0"
99
99
  shadow card 4 4 0 0 "#00000080"
100
100
  shadow button 0 4 0 0 "#000000a0"
101
- shadow capsule 3 3 0 0 "#00000080"
101
+ shadow hud 3 3 0 0 "#00000080"
102
102
  shadow tooltip 3 3 0 0 "#00000080"
103
103
  textShadow display 3 3 0 "#000000c0"
104
104
  textShadow body 1 0 0 "#14111f"
@@ -13,6 +13,6 @@
13
13
  "test": "og test ."
14
14
  },
15
15
  "dependencies": {
16
- "@origingame/engine": "0.2.0"
16
+ "@origingame/engine": "0.4.0"
17
17
  }
18
18
  }
@@ -3,7 +3,7 @@ version 1
3
3
  ---
4
4
  name "Lamp Dive"
5
5
  id "roguelike"
6
- engine "0.2.0"
6
+ engine "0.4.0"
7
7
  entry "src/main.ts"
8
8
  profile "2d"
9
9
  tick 60
@@ -30,7 +30,7 @@ export const LOOT_SLOTS = 12;
30
30
  /** The dive: the lamp-bearer, the floor, the turn, the counts and the effects' bookkeeping. */
31
31
  export const Game = defineResource("Game", {
32
32
  phase: u32(Phase.Title, { doc: "Phase.* of src/components.ts." }),
33
- leftTitle: bool(false, { doc: "The player has left the title the game opened on: from then on the title enters with the skin's entrance (the opening one is built settled, og.ui.mainMenu's instant: the web draws it behind the play gate)." }),
33
+ leftTitle: bool(false, { doc: "The player has left the title the game opened on: from then on the title enters with the style's entrance (the opening one is built settled, og.ui.mainMenu's instant: the web draws it behind the play gate)." }),
34
34
  paused: bool(false),
35
35
  settingsOpen: bool(false),
36
36
  held: bool(false, { doc: "The time scale is held at 0 (paused or in the settings)." }),
@@ -37,9 +37,9 @@ function must<T>(r: { ok: true; value?: T } | { ok: false; reason: string }): T
37
37
 
38
38
  function start(world: World): void {
39
39
  for (const l of LANGUAGES) must(og.i18n.load(world, `strings/${l.code}.ogt`));
40
- const skin = must(og.load.skin(world, "skins/lampdive/skin.ogt"));
40
+ const style = must(og.load.style(world, "styles/lampdive/style.ogt"));
41
41
  const sound = (path: string) => must(og.load.sound(world, path));
42
- must(og.ui.configure(world, { skin, sounds: { press: sound("audio/ui-press.ogt"), open: sound("audio/ui-open.ogt"), close: sound("audio/ui-close.ogt"), error: sound("audio/ui-error.ogt"), success: sound("audio/ui-success.ogt") } }));
42
+ must(og.ui.configure(world, { style, sounds: { press: sound("audio/ui-press.ogt"), open: sound("audio/ui-open.ogt"), close: sound("audio/ui-close.ogt"), error: sound("audio/ui-error.ogt"), success: sound("audio/ui-success.ogt") } }));
43
43
 
44
44
  const settings = must(world.resource(og.RenderSettings));
45
45
  settings.environmentIntensity = 0;