@origingame/create-game 0.2.0 → 0.3.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 +1 -0
- 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 +3 -3
- package/archetypes/idle/assets/looks/idle.ogt +1 -1
- package/archetypes/idle/assets/{skins → styles}/sparkorb/LICENSES.md +4 -4
- 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/main.ts +2 -2
- package/archetypes/idle/src/ui.ts +11 -11
- package/archetypes/idle/tools/make-assets.py +4 -4
- 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 +3 -3
- package/archetypes/rhythm/assets/{skins → styles}/lanebeat/LICENSES.md +4 -4
- 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/main.ts +2 -2
- package/archetypes/rhythm/src/ui.ts +11 -11
- package/archetypes/roguelike/LICENSES.md +1 -1
- package/archetypes/roguelike/README.md +3 -3
- package/archetypes/roguelike/assets/{skins → styles}/lampdive/LICENSES.md +4 -4
- 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/main.ts +2 -2
- package/archetypes/roguelike/src/ui.ts +7 -7
- 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 +3 -3
- package/archetypes/third-person/assets/{skins → styles}/ember/LICENSES.md +2 -2
- 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/main.ts +2 -2
- package/archetypes/third-person/src/ui.ts +10 -10
- 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/main.ts +2 -2
- package/archetypes/tower-defense/src/ui.ts +19 -17
- package/bin/create.ts +11 -8
- package/looks/catalogue.json +40 -40
- package/package.json +1 -1
- 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 +5 -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 +159 -4
- package/template-2d/tests/keeper.og.ts +93 -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
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
type
|
|
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-
|
|
4
|
+
# Three-Lane Beat's skin: 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
|
|
@@ -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.
|
|
35
|
+
const skin = 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: 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") } }));
|
|
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/
|
|
1
|
+
// Three-Lane Beat's screens on og.ui and the skin 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";
|
|
@@ -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` |
|
|
@@ -62,7 +62,7 @@ og build . --publish # dist/: the play page as it ships
|
|
|
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
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/
|
|
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.
|
|
@@ -238,7 +238,7 @@ in the engine repository).
|
|
|
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
240
|
the footstep, and the font subset. `LICENSES.md` lists them; the skin's
|
|
241
|
-
are in `assets/
|
|
241
|
+
are in `assets/styles/lampdive/LICENSES.md`.
|
|
242
242
|
|
|
243
243
|
## Known limits (engine gaps, not design)
|
|
244
244
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# Lamp Dive's skin (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
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
type
|
|
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-
|
|
4
|
+
# Lamp Dive's skin: 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
|
|
@@ -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.
|
|
40
|
+
const skin = 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: 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") } }));
|
|
43
43
|
|
|
44
44
|
const settings = must(world.resource(og.RenderSettings));
|
|
45
45
|
settings.environmentIntensity = 0;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Lamp Dive's screens on og.ui and the skin in assets/
|
|
1
|
+
// Lamp Dive's screens on og.ui and the skin in assets/styles/lampdive (the
|
|
2
2
|
// engine's pixel pack in tomb colours): the title, the HUD (health, strike,
|
|
3
3
|
// armour and gold in the top-left corner, the floor and pause in the
|
|
4
4
|
// top-right, the draught and, on a touch screen, Wait and a d-pad along the
|
|
@@ -167,7 +167,7 @@ function platform(world: World, g: GameV, p: PrefsV): void {
|
|
|
167
167
|
}
|
|
168
168
|
|
|
169
169
|
function capsule(id: string, build: () => void): void {
|
|
170
|
-
og.ui.row(id, { gap: S.xs, cross: "center", padding: { left: S.sm, top: S.xs, right: S.md, bottom: S.xs }, frame: "
|
|
170
|
+
og.ui.row(id, { gap: S.xs, cross: "center", padding: { left: S.sm, top: S.xs, right: S.md, bottom: S.xs }, frame: "hud", background: { token: "panel" } }, build);
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
function hud(world: World, g: GameV): void {
|
|
@@ -176,7 +176,7 @@ function hud(world: World, g: GameV): void {
|
|
|
176
176
|
og.ui.setNavigation(false);
|
|
177
177
|
og.ui.anchor("Status", { anchor: "topLeft", direction: "column", gap: S.sm }, () => {
|
|
178
178
|
capsule("Health", () => {
|
|
179
|
-
og.ui.icon("Heart", "heart", { size: 22, tint: { token: g.hp * 3 <= g.hpMax ? "danger" : "
|
|
179
|
+
og.ui.icon("Heart", "heart", { size: 22, tint: { token: g.hp * 3 <= g.hpMax ? "danger" : "ink" } });
|
|
180
180
|
og.ui.meter("Bar", g.hp, g.hpMax, { kind: "health", label: `${g.hp}/${g.hpMax}`, width: px(touch ? 110 : 150) });
|
|
181
181
|
});
|
|
182
182
|
capsule("Stats", () => {
|
|
@@ -184,7 +184,7 @@ function hud(world: World, g: GameV): void {
|
|
|
184
184
|
og.ui.counter("Attack", g.attack, { font: "mono", width: px(22) });
|
|
185
185
|
og.ui.icon("Shield", "shield", { size: 20 });
|
|
186
186
|
og.ui.counter("Armour", g.armour, { font: "mono", width: px(22) });
|
|
187
|
-
og.ui.icon("Coin", "coin", { size: 20, tint: { token: "
|
|
187
|
+
og.ui.icon("Coin", "coin", { size: 20, tint: { token: "gold" } });
|
|
188
188
|
og.ui.counter("Gold", g.gold, { font: "mono", width: px(40) });
|
|
189
189
|
});
|
|
190
190
|
});
|
|
@@ -229,7 +229,7 @@ function settings(world: World, g: GameV, p: PrefsV): void {
|
|
|
229
229
|
p.master = slider("Master", "settings.master", p.master);
|
|
230
230
|
p.music = slider("Music", "settings.music", p.music);
|
|
231
231
|
p.effects = slider("Effects", "settings.effects", p.effects);
|
|
232
|
-
og.ui.label("LanguageLabel", say(world, "settings.language"), { color: { token: "
|
|
232
|
+
og.ui.label("LanguageLabel", say(world, "settings.language"), { color: { token: "inkMuted" } });
|
|
233
233
|
const r = og.ui.radio("Language", LANGUAGES.map((l) => say(world, l.key)), p.language, { horizontal: true });
|
|
234
234
|
if (r.selected !== p.language) setLanguage(world, p, r.selected);
|
|
235
235
|
p.reducedMotion = og.ui.toggle("Motion", p.reducedMotion, say(world, "settings.motion")).on;
|
|
@@ -250,7 +250,7 @@ function summary(world: World, g: GameV): "again" | "menu" | null {
|
|
|
250
250
|
let chose: "again" | "menu" | null = null;
|
|
251
251
|
og.ui.modal("Summary", g.phase === Phase.Over, { title: g.won ? say(world, "over.won") : say(world, "over.lost", { n: g.floor }), locked: true, width: px(Math.min(400, og.ui.frameViewport().width - 32)) }, () => {
|
|
252
252
|
og.ui.row("Mark", { width: grow, align: "center" }, () => {
|
|
253
|
-
og.ui.transition("Icon", true, { kind: "pop" }, () => og.ui.icon("Glyph", g.won ? "crown" : "skull", { size: 48, tint: { token: g.won ? "
|
|
253
|
+
og.ui.transition("Icon", true, { kind: "pop" }, () => og.ui.icon("Glyph", g.won ? "crown" : "skull", { size: 48, tint: { token: g.won ? "primary" : "inkMuted" } }));
|
|
254
254
|
if (g.won && g.overTicks === OVER_DELAY + 20) og.ui.burst({ count: 12 });
|
|
255
255
|
});
|
|
256
256
|
og.ui.column("Stats", { width: grow, gap: 0 }, () => {
|
|
@@ -261,7 +261,7 @@ function summary(world: World, g: GameV): "again" | "menu" | null {
|
|
|
261
261
|
og.ui.keyValue("Finds", say(world, "over.finds"), `${g.finds}`, true);
|
|
262
262
|
if (!g.won) og.ui.keyValue("By", say(world, "over.by"), say(world, g.killedBy >= 0 ? `foe.${FOES[g.killedBy]}` : "foe.none"), false);
|
|
263
263
|
});
|
|
264
|
-
og.ui.label("Record", say(world, "over.record", { dives: g.dives, relics: g.relics }), { color: { token: "
|
|
264
|
+
og.ui.label("Record", say(world, "over.record", { dives: g.dives, relics: g.relics }), { color: { token: "inkMuted" }, align: "center", width: grow });
|
|
265
265
|
og.ui.row("Actions", { width: grow, gap: S.sm }, () => {
|
|
266
266
|
if (og.ui.button("Again", say(world, "over.again"), { variant: "primary", width: grow }).clicked) chose = "again";
|
|
267
267
|
if (og.ui.button("Menu", say(world, "over.menu"), { width: grow }).clicked) chose = "menu";
|
|
@@ -19,5 +19,5 @@ Origin Engine authors or one of the engine's CC0 assets.
|
|
|
19
19
|
| `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 |
|
|
20
20
|
| `assets/strings/*.ogt` | CC0 1.0 | self-made: the English and Chinese string tables |
|
|
21
21
|
| `assets/fonts/NotoSansSC-subset.ttf` | SIL Open Font License 1.1 (`assets/fonts/OFL.txt`) | Noto Sans SC Regular, subset to Latin-1, CJK punctuation and the characters of `assets/strings/zh-CN.ogt` by the same script from the project template's `assets/fonts/NotoSansSC-Regular-subset.ttf` |
|
|
22
|
-
| `assets/
|
|
22
|
+
| `assets/styles/ember/*` | CC0 1.0 art, SIL OFL 1.1 fonts | the engine's fantasy style pack (`templates/ui-kit`), `assets/styles/ember/LICENSES.md` |
|
|
23
23
|
| `references/*/*.png` | CC0 1.0 | frames of this game recorded by `tests/frames.og.ts` |
|
|
@@ -60,7 +60,7 @@ og build . --publish # dist/: the play page as it ships (behind "tap to
|
|
|
60
60
|
vignette, the teal-orange LUT and film grain, the sky, height fog and
|
|
61
61
|
`og.DayNight` running from late afternoon to night as the run's clock.
|
|
62
62
|
- **Screens on og.ui with tokens and MSDF text** (og-ui §2–§6, og-taste):
|
|
63
|
-
the engine's fantasy pack as `assets/
|
|
63
|
+
the engine's fantasy pack as `assets/styles/ember` (Cinzel and Newsreader,
|
|
64
64
|
Noto Sans SC as the fallback, every font an MSDF atlas at cook time); the
|
|
65
65
|
title over an orbit of the vale, the HUD (hearts and beacons top-left,
|
|
66
66
|
the dusk clock and Pause top-right, the kindling prompt and its progress
|
|
@@ -180,7 +180,7 @@ stages.
|
|
|
180
180
|
2. **The pressure**: `duskSeconds`, the sentinels' speeds and sight, their
|
|
181
181
|
minds in `assets/ai/`, `HEARTS` in `src/components.ts`.
|
|
182
182
|
3. **The look**: the post stack, fog and sky in `buildVale`, the water's
|
|
183
|
-
colours, the skin's palette in `assets/
|
|
183
|
+
colours, the skin's palette in `assets/styles/ember/style.ogt`.
|
|
184
184
|
4. **The characters**: another CC0 humanoid in `assets/models/` with the
|
|
185
185
|
clip library retargeted onto it (`src/anim.ts`), the graphs' thresholds.
|
|
186
186
|
5. **Words**: `assets/strings/*.ogt`; a new Chinese string needs the script
|
|
@@ -231,7 +231,7 @@ heightmap and control map, the sounds and music, the `og sfx` presets, the
|
|
|
231
231
|
sentinels' minds and the font subset byte for byte; the characters, the
|
|
232
232
|
clip library, the textures and the beacon's effects are the engine's own
|
|
233
233
|
CC0 assets. `LICENSES.md` lists every file; the skin's are in
|
|
234
|
-
`assets/
|
|
234
|
+
`assets/styles/ember/LICENSES.md`.
|
|
235
235
|
|
|
236
236
|
## Known limits (engine gaps, not design)
|
|
237
237
|
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
| File | Licence | Origin |
|
|
4
4
|
|---|---|---|
|
|
5
|
-
| `atlas.png` | CC0 1.0 | self-made by the Origin Engine authors: drawn by `templates/ui-kit/tools/make-
|
|
5
|
+
| `atlas.png` | CC0 1.0 | self-made by the Origin Engine authors: drawn by `templates/ui-kit/tools/make-styles.py` (deterministic) |
|
|
6
6
|
| `icons.png` | CC0 1.0 | self-made: the kit's 32 icons (`tools/make-assets.py`) restyled by the same script |
|
|
7
|
-
| `
|
|
7
|
+
| `style.ogt`, `*.ogt` | CC0 1.0 | written by the same script |
|
|
8
8
|
| `Cinzel-Bold.ttf` | SIL Open Font License 1.1 (`OFL.txt`) | Cinzel Bold (github.com/NDISCOVER/Cinzel); unmodified. Copyright 2020 The Cinzel Project Authors (https://github.com/NDISCOVER/Cinzel) |
|
|
9
9
|
| `Newsreader-Medium.ttf` | SIL Open Font License 1.1 (`OFL.txt`) | Newsreader (github.com/productiontype/Newsreader); a static instance (wght 500, opsz 16) of the variable font, subset to Latin-1 with fontTools. Copyright 2020 The Newsreader Project Authors (http://github.com/productiontype/Newsreader) |
|
|
10
10
|
|