@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.
- package/README.md +2 -2
- package/archetypes/README.md +2 -1
- package/archetypes/arena/.origin/setup +14 -0
- package/archetypes/arena/LICENSES.md +8 -0
- package/archetypes/arena/README.md +67 -0
- package/archetypes/arena/assets/audio/coin.ogt +9 -0
- package/archetypes/arena/assets/audio/dash.ogt +9 -0
- package/archetypes/arena/assets/audio/win.ogt +9 -0
- package/archetypes/arena/assets/fx/coin.ogt +20 -0
- package/archetypes/arena/assets/looks/arena.ogt +10 -0
- package/archetypes/arena/gitattributes +22 -0
- package/archetypes/arena/gitignore +8 -0
- package/archetypes/arena/host.d.ts +46 -0
- package/archetypes/arena/package.json +18 -0
- package/archetypes/arena/project.ogt +14 -0
- package/archetypes/arena/src/game.ts +314 -0
- package/archetypes/arena/src/main.ts +100 -0
- package/archetypes/arena/tests/duel.og.ts +32 -0
- package/archetypes/arena/tests/solo.og.ts +22 -0
- package/archetypes/arena/tsconfig.json +17 -0
- package/archetypes/idle/LICENSES.md +1 -1
- package/archetypes/idle/README.md +5 -5
- package/archetypes/idle/assets/looks/idle.ogt +2 -2
- package/archetypes/idle/assets/{skins → styles}/sparkorb/LICENSES.md +6 -6
- package/archetypes/idle/assets/{skins/sparkorb/skin.ogt → styles/sparkorb/style.ogt} +47 -47
- package/archetypes/idle/package.json +1 -1
- package/archetypes/idle/project.ogt +1 -1
- package/archetypes/idle/references/metal/card.png +0 -0
- package/archetypes/idle/references/metal/orbit.png +0 -0
- package/archetypes/idle/references/metal/title.png +0 -0
- package/archetypes/idle/src/components.ts +1 -1
- package/archetypes/idle/src/main.ts +5 -5
- package/archetypes/idle/src/ui.ts +13 -13
- package/archetypes/idle/tools/make-assets.py +5 -5
- package/archetypes/match3/package.json +1 -1
- package/archetypes/match3/project.ogt +1 -1
- package/archetypes/rhythm/LICENSES.md +1 -1
- package/archetypes/rhythm/README.md +5 -5
- package/archetypes/rhythm/assets/{skins → styles}/lanebeat/LICENSES.md +6 -6
- package/archetypes/rhythm/assets/{skins/lanebeat/skin.ogt → styles/lanebeat/style.ogt} +45 -45
- package/archetypes/rhythm/package.json +1 -1
- package/archetypes/rhythm/project.ogt +1 -1
- package/archetypes/rhythm/references/metal/results.png +0 -0
- package/archetypes/rhythm/references/metal/title.png +0 -0
- package/archetypes/rhythm/src/components.ts +1 -1
- package/archetypes/rhythm/src/main.ts +3 -3
- package/archetypes/rhythm/src/ui.ts +12 -12
- package/archetypes/roguelike/LICENSES.md +1 -1
- package/archetypes/roguelike/README.md +5 -5
- package/archetypes/roguelike/assets/{skins → styles}/lampdive/LICENSES.md +6 -6
- package/archetypes/roguelike/assets/{skins/lampdive/skin.ogt → styles/lampdive/style.ogt} +41 -41
- package/archetypes/roguelike/package.json +1 -1
- package/archetypes/roguelike/project.ogt +1 -1
- package/archetypes/roguelike/references/metal/over.png +0 -0
- package/archetypes/roguelike/references/metal/title.png +0 -0
- package/archetypes/roguelike/src/components.ts +1 -1
- package/archetypes/roguelike/src/main.ts +2 -2
- package/archetypes/roguelike/src/ui.ts +8 -8
- package/archetypes/runner/package.json +1 -1
- package/archetypes/runner/project.ogt +1 -1
- package/archetypes/third-person/LICENSES.md +1 -1
- package/archetypes/third-person/README.md +4 -4
- package/archetypes/third-person/assets/{skins → styles}/ember/LICENSES.md +4 -4
- package/archetypes/third-person/assets/{skins/ember/skin.ogt → styles/ember/style.ogt} +40 -41
- package/archetypes/third-person/package.json +1 -1
- package/archetypes/third-person/project.ogt +1 -1
- package/archetypes/third-person/references/metal/beacon.png +0 -0
- package/archetypes/third-person/references/metal/dawn.png +0 -0
- package/archetypes/third-person/references/metal/title.png +0 -0
- package/archetypes/third-person/references/webgl2/beacon.png +0 -0
- package/archetypes/third-person/src/components.ts +1 -1
- package/archetypes/third-person/src/main.ts +3 -3
- package/archetypes/third-person/src/sound.ts +1 -1
- package/archetypes/third-person/src/ui.ts +11 -11
- package/archetypes/topdown/package.json +1 -1
- package/archetypes/topdown/project.ogt +1 -1
- package/archetypes/tower-defense/LICENSES.md +1 -1
- package/archetypes/tower-defense/README.md +5 -5
- package/archetypes/tower-defense/assets/{skins → styles}/pathguard/LICENSES.md +4 -4
- package/archetypes/tower-defense/assets/styles/pathguard/atlas.png +0 -0
- package/archetypes/tower-defense/assets/styles/pathguard/style.ogt +111 -0
- package/archetypes/tower-defense/package.json +1 -1
- package/archetypes/tower-defense/project.ogt +1 -1
- package/archetypes/tower-defense/references/metal/end.png +0 -0
- package/archetypes/tower-defense/references/metal/title.png +0 -0
- package/archetypes/tower-defense/references/metal/wave.png +0 -0
- package/archetypes/tower-defense/src/components.ts +1 -1
- package/archetypes/tower-defense/src/main.ts +2 -2
- package/archetypes/tower-defense/src/ui.ts +20 -18
- package/bin/create.ts +11 -8
- package/looks/catalogue.json +40 -40
- package/package.json +2 -2
- package/template/README.md +2 -1
- package/template/assets/audio/sting.ogt +10 -0
- package/template/assets/timelines/intro.ogt +101 -0
- package/template/assets/timelines/narration.srt +11 -0
- package/template/host.d.ts +46 -0
- package/template/package.json +1 -1
- package/template/project.ogt +1 -1
- package/template/references/metal/intro-4.png +0 -0
- package/template/references/metal/intro-8.png +0 -0
- package/template/src/main.ts +1 -1
- package/template/tests/frames.ts +134 -0
- package/template/tests/intro.og.ts +65 -0
- package/template/tests/smoke.og.ts +30 -36
- package/template/tsconfig.json +1 -1
- package/template-2d/LICENSES.md +1 -0
- package/template-2d/README.md +6 -2
- package/template-2d/assets/rigs/keeper.ogt +292 -0
- package/template-2d/assets/rigs/keeper.png +0 -0
- package/template-2d/assets/rigs/keeper.png.ogt +7 -0
- package/template-2d/package.json +1 -1
- package/template-2d/project.ogt +1 -1
- package/template-2d/src/main.ts +240 -4
- package/template-2d/tests/keeper.og.ts +178 -0
- package/archetypes/tower-defense/assets/skins/pathguard/atlas.png +0 -0
- package/archetypes/tower-defense/assets/skins/pathguard/skin.ogt +0 -111
- /package/archetypes/idle/assets/{skins → styles}/sparkorb/ChakraPetch-BoldItalic.ttf +0 -0
- /package/archetypes/idle/assets/{skins → styles}/sparkorb/ChakraPetch-BoldItalic.ttf.ogt +0 -0
- /package/archetypes/idle/assets/{skins → styles}/sparkorb/OFL.txt +0 -0
- /package/archetypes/idle/assets/{skins → styles}/sparkorb/Orbitron-Medium.ttf +0 -0
- /package/archetypes/idle/assets/{skins → styles}/sparkorb/Orbitron-Medium.ttf.ogt +0 -0
- /package/archetypes/idle/assets/{skins → styles}/sparkorb/Rajdhani-Bold.ttf +0 -0
- /package/archetypes/idle/assets/{skins → styles}/sparkorb/Rajdhani-Bold.ttf.ogt +0 -0
- /package/archetypes/idle/assets/{skins → styles}/sparkorb/atlas.png +0 -0
- /package/archetypes/idle/assets/{skins → styles}/sparkorb/atlas.png.ogt +0 -0
- /package/archetypes/idle/assets/{skins → styles}/sparkorb/icons.png +0 -0
- /package/archetypes/idle/assets/{skins → styles}/sparkorb/icons.png.ogt +0 -0
- /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/ChakraPetch-Medium.ttf +0 -0
- /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/ChakraPetch-Medium.ttf.ogt +0 -0
- /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/JetBrainsMono-Regular.ttf +0 -0
- /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/JetBrainsMono-Regular.ttf.ogt +0 -0
- /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/OFL.txt +0 -0
- /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/Orbitron-Bold.ttf +0 -0
- /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/Orbitron-Bold.ttf.ogt +0 -0
- /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/atlas.png +0 -0
- /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/atlas.png.ogt +0 -0
- /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/icons.png +0 -0
- /package/archetypes/rhythm/assets/{skins → styles}/lanebeat/icons.png.ogt +0 -0
- /package/archetypes/roguelike/assets/{skins → styles}/lampdive/DotGothic16-Regular.ttf +0 -0
- /package/archetypes/roguelike/assets/{skins → styles}/lampdive/DotGothic16-Regular.ttf.ogt +0 -0
- /package/archetypes/roguelike/assets/{skins → styles}/lampdive/OFL.txt +0 -0
- /package/archetypes/roguelike/assets/{skins → styles}/lampdive/atlas.png +0 -0
- /package/archetypes/roguelike/assets/{skins → styles}/lampdive/atlas.png.ogt +0 -0
- /package/archetypes/roguelike/assets/{skins → styles}/lampdive/icons.png +0 -0
- /package/archetypes/roguelike/assets/{skins → styles}/lampdive/icons.png.ogt +0 -0
- /package/archetypes/third-person/assets/{skins → styles}/ember/Cinzel-Bold.ttf +0 -0
- /package/archetypes/third-person/assets/{skins → styles}/ember/Cinzel-Bold.ttf.ogt +0 -0
- /package/archetypes/third-person/assets/{skins → styles}/ember/Newsreader-Medium.ttf +0 -0
- /package/archetypes/third-person/assets/{skins → styles}/ember/Newsreader-Medium.ttf.ogt +0 -0
- /package/archetypes/third-person/assets/{skins → styles}/ember/OFL.txt +0 -0
- /package/archetypes/third-person/assets/{skins → styles}/ember/atlas.png +0 -0
- /package/archetypes/third-person/assets/{skins → styles}/ember/atlas.png.ogt +0 -0
- /package/archetypes/third-person/assets/{skins → styles}/ember/icons.png +0 -0
- /package/archetypes/third-person/assets/{skins → styles}/ember/icons.png.ogt +0 -0
- /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/Fredoka-SemiBold.ttf +0 -0
- /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/Fredoka-SemiBold.ttf.ogt +0 -0
- /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/LilitaOne-Regular.ttf +0 -0
- /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/LilitaOne-Regular.ttf.ogt +0 -0
- /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/OFL.txt +0 -0
- /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/atlas.png.ogt +0 -0
- /package/archetypes/tower-defense/assets/{skins → styles}/pathguard/icons.png +0 -0
- /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
|
|
74
|
-
engine's sci-fi pack recoloured as `assets/
|
|
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/
|
|
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
|
|
225
|
-
are in `assets/
|
|
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
|
|
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 `
|
|
4
|
-
game's edits by hand; the rest is the pack as `templates/
|
|
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-
|
|
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
|
-
| `
|
|
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
|
-
|
|
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
|
|
1
|
+
type style
|
|
2
2
|
version 1
|
|
3
3
|
---
|
|
4
|
-
# Three-Lane Beat's
|
|
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
|
-
|
|
8
|
-
atlas "
|
|
7
|
+
scheme dark
|
|
8
|
+
atlas "styles/lanebeat/atlas.png" 384 256
|
|
9
9
|
scale 1
|
|
10
10
|
palette {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 "
|
|
71
|
-
display "
|
|
72
|
-
numeric "
|
|
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 "
|
|
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
|
|
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
|
|
91
|
+
corner 320 104 32 32 18 18 primary 4
|
|
92
92
|
corners panel card slot
|
|
93
|
-
divider 4 172 128 24 128 24
|
|
94
|
-
flourish 136 172 64 24 32 14
|
|
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
|
|
98
|
-
glow panel 10
|
|
99
|
-
glow
|
|
100
|
-
textGlow display 1.5
|
|
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 {
|
|
Binary file
|
|
Binary file
|
|
@@ -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
|
|
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
|
|
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
|
|
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, {
|
|
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
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
237
|
-
og.ui.label("Multiplier", say(world, "hud.multiplier", { n: multiplier }), { step: "caption", color: { token: "
|
|
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: "
|
|
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: "
|
|
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 ? "
|
|
316
|
-
if (g.newBest) og.ui.label("NewBest", say(world, "results.newBest"), { color: { token: "
|
|
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: "
|
|
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
|
|
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/
|
|
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
|
|
65
|
-
engine's pixel pack recoloured as `assets/
|
|
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/
|
|
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
|
|
241
|
-
are in `assets/
|
|
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
|
|
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
|
-
`
|
|
5
|
-
`templates/
|
|
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-
|
|
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
|
-
| `
|
|
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
|
-
|
|
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
|
|
1
|
+
type style
|
|
2
2
|
version 1
|
|
3
3
|
---
|
|
4
|
-
# Lamp Dive's
|
|
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
|
-
|
|
8
|
-
atlas "
|
|
7
|
+
scheme dark
|
|
8
|
+
atlas "styles/lampdive/atlas.png" 384 256
|
|
9
9
|
scale 1
|
|
10
10
|
palette {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 "
|
|
75
|
-
display "
|
|
76
|
-
numeric "
|
|
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 "
|
|
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
|
|
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
|
|
96
|
-
flourish 136 172 64 24 32 12
|
|
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
|
|
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"
|
|
Binary file
|
|
Binary file
|
|
@@ -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
|
|
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
|
|
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, {
|
|
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;
|