@origingame/create-game 0.0.0-stage → 0.1.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 +57 -2
- package/archetypes/README.md +99 -0
- package/archetypes/idle/.origin/setup +14 -0
- package/archetypes/idle/LICENSES.md +12 -0
- package/archetypes/idle/README.md +234 -0
- package/archetypes/idle/assets/audio/buy.wav +0 -0
- package/archetypes/idle/assets/audio/milestone.wav +0 -0
- package/archetypes/idle/assets/audio/nova.wav +0 -0
- package/archetypes/idle/assets/audio/orbit.wav +0 -0
- package/archetypes/idle/assets/audio/tap.wav +0 -0
- package/archetypes/idle/assets/audio/ui-close.ogt +9 -0
- package/archetypes/idle/assets/audio/ui-error.ogt +9 -0
- package/archetypes/idle/assets/audio/ui-open.ogt +9 -0
- package/archetypes/idle/assets/audio/ui-press.ogt +9 -0
- package/archetypes/idle/assets/audio/ui-success.ogt +9 -0
- package/archetypes/idle/assets/fonts/NotoSansSC-subset.ttf +0 -0
- package/archetypes/idle/assets/fonts/NotoSansSC-subset.ttf.ogt +10 -0
- package/archetypes/idle/assets/fonts/OFL.txt +93 -0
- package/archetypes/idle/assets/fx/drift.ogt +21 -0
- package/archetypes/idle/assets/fx/milestone.ogt +21 -0
- package/archetypes/idle/assets/fx/nova.ogt +22 -0
- package/archetypes/idle/assets/fx/stars.ogt +20 -0
- package/archetypes/idle/assets/fx/tap.ogt +23 -0
- package/archetypes/idle/assets/looks/idle.ogt +17 -0
- package/archetypes/idle/assets/skins/sparkorb/ChakraPetch-BoldItalic.ttf +0 -0
- package/archetypes/idle/assets/skins/sparkorb/ChakraPetch-BoldItalic.ttf.ogt +9 -0
- package/archetypes/idle/assets/skins/sparkorb/LICENSES.md +19 -0
- package/archetypes/idle/assets/skins/sparkorb/OFL.txt +95 -0
- package/archetypes/idle/assets/skins/sparkorb/Orbitron-Medium.ttf +0 -0
- package/archetypes/idle/assets/skins/sparkorb/Orbitron-Medium.ttf.ogt +9 -0
- package/archetypes/idle/assets/skins/sparkorb/Rajdhani-Bold.ttf +0 -0
- package/archetypes/idle/assets/skins/sparkorb/Rajdhani-Bold.ttf.ogt +9 -0
- package/archetypes/idle/assets/skins/sparkorb/atlas.png +0 -0
- package/archetypes/idle/assets/skins/sparkorb/atlas.png.ogt +7 -0
- package/archetypes/idle/assets/skins/sparkorb/icons.png +0 -0
- package/archetypes/idle/assets/skins/sparkorb/icons.png.ogt +7 -0
- package/archetypes/idle/assets/skins/sparkorb/skin.ogt +113 -0
- package/archetypes/idle/assets/sprites/glow.png +0 -0
- package/archetypes/idle/assets/sprites/glow.png.ogt +8 -0
- package/archetypes/idle/assets/sprites/mote-crystal.png +0 -0
- package/archetypes/idle/assets/sprites/mote-crystal.png.ogt +7 -0
- package/archetypes/idle/assets/sprites/mote-ember.png +0 -0
- package/archetypes/idle/assets/sprites/mote-ember.png.ogt +7 -0
- package/archetypes/idle/assets/sprites/mote-star.png +0 -0
- package/archetypes/idle/assets/sprites/mote-star.png.ogt +7 -0
- package/archetypes/idle/assets/sprites/mote-storm.png +0 -0
- package/archetypes/idle/assets/sprites/mote-storm.png.ogt +7 -0
- package/archetypes/idle/assets/sprites/orb.png +0 -0
- package/archetypes/idle/assets/sprites/orb.png.ogt +7 -0
- package/archetypes/idle/assets/sprites/spark.png +0 -0
- package/archetypes/idle/assets/sprites/spark.png.ogt +7 -0
- package/archetypes/idle/assets/strings/en.ogt +62 -0
- package/archetypes/idle/assets/strings/zh-CN.ogt +62 -0
- package/archetypes/idle/gitattributes +22 -0
- package/archetypes/idle/host.d.ts +46 -0
- package/archetypes/idle/package.json +18 -0
- package/archetypes/idle/project.ogt +14 -0
- 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 +139 -0
- package/archetypes/idle/src/main.ts +247 -0
- package/archetypes/idle/src/numbers.ts +126 -0
- package/archetypes/idle/src/systems.ts +340 -0
- package/archetypes/idle/src/ui.ts +412 -0
- package/archetypes/idle/tests/away.og.ts +42 -0
- package/archetypes/idle/tests/flow.og.ts +57 -0
- package/archetypes/idle/tests/frames.og.ts +33 -0
- package/archetypes/idle/tests/frames.ts +134 -0
- package/archetypes/idle/tests/lib.ts +74 -0
- package/archetypes/idle/tests/milestone.og.ts +32 -0
- package/archetypes/idle/tests/nova.og.ts +52 -0
- package/archetypes/idle/tests/offline.og.ts +60 -0
- package/archetypes/idle/tests/pad.og.ts +55 -0
- package/archetypes/idle/tests/pause.og.ts +68 -0
- package/archetypes/idle/tests/phone.og.ts +50 -0
- package/archetypes/idle/tests/replay.og.ts +28 -0
- package/archetypes/idle/tools/make-assets.py +448 -0
- package/archetypes/idle/tools/oglite.py +285 -0
- package/archetypes/idle/tsconfig.json +17 -0
- package/archetypes/match3/.origin/setup +14 -0
- package/archetypes/match3/LICENSES.md +7 -0
- package/archetypes/match3/README.md +205 -0
- package/archetypes/match3/assets/audio/cascade.wav +0 -0
- package/archetypes/match3/assets/audio/clear.wav +0 -0
- package/archetypes/match3/assets/audio/lost.wav +0 -0
- package/archetypes/match3/assets/audio/refused.wav +0 -0
- package/archetypes/match3/assets/audio/select.wav +0 -0
- package/archetypes/match3/assets/audio/swap.wav +0 -0
- package/archetypes/match3/assets/audio/won.wav +0 -0
- package/archetypes/match3/assets/fonts/OFL.txt +93 -0
- package/archetypes/match3/assets/fonts/ui.ttf +0 -0
- package/archetypes/match3/assets/fonts/ui.ttf.ogt +11 -0
- package/archetypes/match3/assets/scenes/main.ogt +24 -0
- package/archetypes/match3/assets/sprites/backdrop.png +0 -0
- package/archetypes/match3/assets/sprites/board.ogt +21 -0
- package/archetypes/match3/assets/sprites/cells.ogt +7 -0
- package/archetypes/match3/assets/sprites/cells.png +0 -0
- package/archetypes/match3/assets/sprites/cells.png.ogt +7 -0
- package/archetypes/match3/assets/sprites/gems.ogt +75 -0
- package/archetypes/match3/assets/sprites/gems.png +0 -0
- package/archetypes/match3/assets/sprites/panel.png +0 -0
- package/archetypes/match3/assets/sprites/ring.png +0 -0
- package/archetypes/match3/gitattributes +22 -0
- package/archetypes/match3/host.d.ts +46 -0
- package/archetypes/match3/package.json +18 -0
- package/archetypes/match3/project.ogt +18 -0
- package/archetypes/match3/references/metal/cascade.png +0 -0
- package/archetypes/match3/references/metal/clearing.png +0 -0
- package/archetypes/match3/references/metal/dealt.png +0 -0
- package/archetypes/match3/src/art.ts +54 -0
- package/archetypes/match3/src/board.ts +112 -0
- package/archetypes/match3/src/components.ts +95 -0
- package/archetypes/match3/src/layout.ts +25 -0
- package/archetypes/match3/src/main.ts +199 -0
- package/archetypes/match3/src/systems.ts +631 -0
- package/archetypes/match3/tests/drag.og.ts +31 -0
- package/archetypes/match3/tests/endings.og.ts +40 -0
- package/archetypes/match3/tests/frames.og.ts +49 -0
- package/archetypes/match3/tests/frames.ts +134 -0
- package/archetypes/match3/tests/hidpi.og.ts +41 -0
- package/archetypes/match3/tests/lib.ts +64 -0
- package/archetypes/match3/tests/replay.og.ts +28 -0
- package/archetypes/match3/tests/sounds.og.ts +50 -0
- package/archetypes/match3/tests/swap.og.ts +67 -0
- package/archetypes/match3/tools/make-assets.py +404 -0
- package/archetypes/match3/tools/oglite.py +285 -0
- package/archetypes/match3/tsconfig.json +17 -0
- package/archetypes/rhythm/.origin/setup +14 -0
- package/archetypes/rhythm/LICENSES.md +13 -0
- package/archetypes/rhythm/README.md +235 -0
- package/archetypes/rhythm/assets/audio/bass0.wav +0 -0
- package/archetypes/rhythm/assets/audio/bass1.wav +0 -0
- package/archetypes/rhythm/assets/audio/bass2.wav +0 -0
- package/archetypes/rhythm/assets/audio/bass3.wav +0 -0
- package/archetypes/rhythm/assets/audio/chords0.wav +0 -0
- package/archetypes/rhythm/assets/audio/chords1.wav +0 -0
- package/archetypes/rhythm/assets/audio/chords2.wav +0 -0
- package/archetypes/rhythm/assets/audio/chords3.wav +0 -0
- package/archetypes/rhythm/assets/audio/clear.wav +0 -0
- package/archetypes/rhythm/assets/audio/click.wav +0 -0
- package/archetypes/rhythm/assets/audio/drums.wav +0 -0
- package/archetypes/rhythm/assets/audio/fail.wav +0 -0
- package/archetypes/rhythm/assets/audio/leadA.wav +0 -0
- package/archetypes/rhythm/assets/audio/leadB.wav +0 -0
- package/archetypes/rhythm/assets/audio/miss.wav +0 -0
- package/archetypes/rhythm/assets/audio/tap0.wav +0 -0
- package/archetypes/rhythm/assets/audio/tap1.wav +0 -0
- package/archetypes/rhythm/assets/audio/tap2.wav +0 -0
- package/archetypes/rhythm/assets/audio/ui-close.ogt +9 -0
- package/archetypes/rhythm/assets/audio/ui-error.ogt +9 -0
- package/archetypes/rhythm/assets/audio/ui-open.ogt +9 -0
- package/archetypes/rhythm/assets/audio/ui-press.ogt +9 -0
- package/archetypes/rhythm/assets/audio/ui-success.ogt +9 -0
- package/archetypes/rhythm/assets/charts/neon-pulse.ogt +919 -0
- package/archetypes/rhythm/assets/fonts/NotoSansSC-subset.ttf +0 -0
- package/archetypes/rhythm/assets/fonts/NotoSansSC-subset.ttf.ogt +10 -0
- package/archetypes/rhythm/assets/fonts/OFL.txt +93 -0
- package/archetypes/rhythm/assets/fx/hit.ogt +22 -0
- package/archetypes/rhythm/assets/skins/lanebeat/ChakraPetch-Medium.ttf +0 -0
- package/archetypes/rhythm/assets/skins/lanebeat/ChakraPetch-Medium.ttf.ogt +9 -0
- package/archetypes/rhythm/assets/skins/lanebeat/JetBrainsMono-Regular.ttf +0 -0
- package/archetypes/rhythm/assets/skins/lanebeat/JetBrainsMono-Regular.ttf.ogt +9 -0
- package/archetypes/rhythm/assets/skins/lanebeat/LICENSES.md +17 -0
- package/archetypes/rhythm/assets/skins/lanebeat/OFL.txt +95 -0
- package/archetypes/rhythm/assets/skins/lanebeat/Orbitron-Bold.ttf +0 -0
- package/archetypes/rhythm/assets/skins/lanebeat/Orbitron-Bold.ttf.ogt +9 -0
- package/archetypes/rhythm/assets/skins/lanebeat/atlas.png +0 -0
- package/archetypes/rhythm/assets/skins/lanebeat/atlas.png.ogt +7 -0
- package/archetypes/rhythm/assets/skins/lanebeat/icons.png +0 -0
- package/archetypes/rhythm/assets/skins/lanebeat/icons.png.ogt +7 -0
- package/archetypes/rhythm/assets/skins/lanebeat/skin.ogt +110 -0
- package/archetypes/rhythm/assets/sprites/lane.png +0 -0
- package/archetypes/rhythm/assets/sprites/lane.png.ogt +7 -0
- package/archetypes/rhythm/assets/sprites/note.png +0 -0
- package/archetypes/rhythm/assets/sprites/note.png.ogt +7 -0
- package/archetypes/rhythm/assets/sprites/ring.png +0 -0
- package/archetypes/rhythm/assets/sprites/ring.png.ogt +7 -0
- package/archetypes/rhythm/assets/sprites/spark.png +0 -0
- package/archetypes/rhythm/assets/sprites/spark.png.ogt +7 -0
- package/archetypes/rhythm/assets/strings/en.ogt +61 -0
- package/archetypes/rhythm/assets/strings/zh-CN.ogt +61 -0
- package/archetypes/rhythm/gitattributes +22 -0
- package/archetypes/rhythm/host.d.ts +46 -0
- package/archetypes/rhythm/package.json +18 -0
- package/archetypes/rhythm/project.ogt +14 -0
- package/archetypes/rhythm/references/metal/highway.png +0 -0
- package/archetypes/rhythm/references/metal/results.png +0 -0
- package/archetypes/rhythm/references/metal/title.png +0 -0
- package/archetypes/rhythm/src/components.ts +147 -0
- package/archetypes/rhythm/src/main.ts +202 -0
- package/archetypes/rhythm/src/systems.ts +490 -0
- package/archetypes/rhythm/src/ui.ts +421 -0
- package/archetypes/rhythm/tests/band.og.ts +45 -0
- package/archetypes/rhythm/tests/calibrate.og.ts +49 -0
- package/archetypes/rhythm/tests/clear.og.ts +51 -0
- package/archetypes/rhythm/tests/fail.og.ts +40 -0
- package/archetypes/rhythm/tests/flow.og.ts +54 -0
- package/archetypes/rhythm/tests/frames.og.ts +35 -0
- package/archetypes/rhythm/tests/frames.ts +134 -0
- package/archetypes/rhythm/tests/lib.ts +123 -0
- package/archetypes/rhythm/tests/pad.og.ts +41 -0
- package/archetypes/rhythm/tests/pause.og.ts +77 -0
- package/archetypes/rhythm/tests/phone.og.ts +44 -0
- package/archetypes/rhythm/tests/replay.og.ts +27 -0
- package/archetypes/rhythm/tests/timing.og.ts +37 -0
- package/archetypes/rhythm/tools/make-assets.py +383 -0
- package/archetypes/rhythm/tools/oglite.py +285 -0
- package/archetypes/rhythm/tsconfig.json +17 -0
- package/archetypes/roguelike/.origin/setup +14 -0
- package/archetypes/roguelike/LICENSES.md +14 -0
- package/archetypes/roguelike/README.md +256 -0
- package/archetypes/roguelike/assets/ai/foe.ogt +28 -0
- package/archetypes/roguelike/assets/ai/guardian.ogt +26 -0
- package/archetypes/roguelike/assets/audio/bump.wav +0 -0
- package/archetypes/roguelike/assets/audio/drink.wav +0 -0
- package/archetypes/roguelike/assets/audio/fall.wav +0 -0
- package/archetypes/roguelike/assets/audio/hit.wav +0 -0
- package/archetypes/roguelike/assets/audio/hurt.wav +0 -0
- package/archetypes/roguelike/assets/audio/item.wav +0 -0
- package/archetypes/roguelike/assets/audio/kill.wav +0 -0
- package/archetypes/roguelike/assets/audio/pickup.wav +0 -0
- package/archetypes/roguelike/assets/audio/roar.wav +0 -0
- package/archetypes/roguelike/assets/audio/stairs.wav +0 -0
- package/archetypes/roguelike/assets/audio/step.ogt +9 -0
- package/archetypes/roguelike/assets/audio/telegraph.wav +0 -0
- package/archetypes/roguelike/assets/audio/tomb.wav +0 -0
- package/archetypes/roguelike/assets/audio/ui-close.ogt +9 -0
- package/archetypes/roguelike/assets/audio/ui-error.ogt +9 -0
- package/archetypes/roguelike/assets/audio/ui-open.ogt +9 -0
- package/archetypes/roguelike/assets/audio/ui-press.ogt +9 -0
- package/archetypes/roguelike/assets/audio/ui-success.ogt +9 -0
- package/archetypes/roguelike/assets/audio/won.wav +0 -0
- package/archetypes/roguelike/assets/fonts/NotoSansSC-subset.ttf +0 -0
- package/archetypes/roguelike/assets/fonts/NotoSansSC-subset.ttf.ogt +10 -0
- package/archetypes/roguelike/assets/fonts/OFL.txt +93 -0
- package/archetypes/roguelike/assets/maps/dive.ogt +106 -0
- package/archetypes/roguelike/assets/skins/lampdive/DotGothic16-Regular.ttf +0 -0
- package/archetypes/roguelike/assets/skins/lampdive/DotGothic16-Regular.ttf.ogt +9 -0
- package/archetypes/roguelike/assets/skins/lampdive/LICENSES.md +16 -0
- package/archetypes/roguelike/assets/skins/lampdive/OFL.txt +93 -0
- package/archetypes/roguelike/assets/skins/lampdive/atlas.png +0 -0
- package/archetypes/roguelike/assets/skins/lampdive/atlas.png.ogt +7 -0
- package/archetypes/roguelike/assets/skins/lampdive/icons.png +0 -0
- package/archetypes/roguelike/assets/skins/lampdive/icons.png.ogt +7 -0
- package/archetypes/roguelike/assets/skins/lampdive/skin.ogt +115 -0
- package/archetypes/roguelike/assets/sprites/dive.ogt +50 -0
- package/archetypes/roguelike/assets/sprites/dive.png +0 -0
- package/archetypes/roguelike/assets/sprites/dive.png.ogt +7 -0
- package/archetypes/roguelike/assets/sprites/glow.png +0 -0
- package/archetypes/roguelike/assets/sprites/glow.png.ogt +7 -0
- package/archetypes/roguelike/assets/strings/en.ogt +57 -0
- package/archetypes/roguelike/assets/strings/zh-CN.ogt +57 -0
- package/archetypes/roguelike/assets/tiles/tomb.ogt +31 -0
- package/archetypes/roguelike/assets/tiles/tomb.png +0 -0
- package/archetypes/roguelike/assets/tiles/tomb.png.ogt +7 -0
- package/archetypes/roguelike/gitattributes +22 -0
- package/archetypes/roguelike/host.d.ts +46 -0
- package/archetypes/roguelike/package.json +18 -0
- package/archetypes/roguelike/project.ogt +14 -0
- package/archetypes/roguelike/references/metal/dive.png +0 -0
- package/archetypes/roguelike/references/metal/over.png +0 -0
- package/archetypes/roguelike/references/metal/title.png +0 -0
- package/archetypes/roguelike/src/art.ts +23 -0
- package/archetypes/roguelike/src/components.ts +169 -0
- package/archetypes/roguelike/src/dive.ts +144 -0
- package/archetypes/roguelike/src/foes.ts +174 -0
- package/archetypes/roguelike/src/main.ts +258 -0
- package/archetypes/roguelike/src/systems.ts +620 -0
- package/archetypes/roguelike/src/ui.ts +350 -0
- package/archetypes/roguelike/tests/flow.og.ts +54 -0
- package/archetypes/roguelike/tests/foes.og.ts +45 -0
- package/archetypes/roguelike/tests/frames.og.ts +32 -0
- package/archetypes/roguelike/tests/frames.ts +134 -0
- package/archetypes/roguelike/tests/lib.ts +83 -0
- package/archetypes/roguelike/tests/lose.og.ts +44 -0
- package/archetypes/roguelike/tests/pad.og.ts +54 -0
- package/archetypes/roguelike/tests/pause.og.ts +59 -0
- package/archetypes/roguelike/tests/phone.og.ts +54 -0
- package/archetypes/roguelike/tests/replay.og.ts +24 -0
- package/archetypes/roguelike/tests/win.og.ts +60 -0
- package/archetypes/roguelike/tools/make-assets.py +518 -0
- package/archetypes/roguelike/tools/oglite.py +285 -0
- package/archetypes/roguelike/tsconfig.json +17 -0
- package/archetypes/runner/.origin/setup +14 -0
- package/archetypes/runner/LICENSES.md +10 -0
- package/archetypes/runner/README.md +225 -0
- package/archetypes/runner/assets/audio/coin.wav +0 -0
- package/archetypes/runner/assets/audio/crash.wav +0 -0
- package/archetypes/runner/assets/audio/hold.ogt +9 -0
- package/archetypes/runner/assets/audio/jump.wav +0 -0
- package/archetypes/runner/assets/audio/start.wav +0 -0
- package/archetypes/runner/assets/fonts/OFL.txt +93 -0
- package/archetypes/runner/assets/fonts/ui.ttf +0 -0
- package/archetypes/runner/assets/fonts/ui.ttf.ogt +11 -0
- package/archetypes/runner/assets/maps/far.ogt +25 -0
- package/archetypes/runner/assets/maps/near.ogt +25 -0
- package/archetypes/runner/assets/maps/roofs.ogt +19 -0
- package/archetypes/runner/assets/scenes/main.ogt +35 -0
- package/archetypes/runner/assets/sprites/coin.ogt +11 -0
- package/archetypes/runner/assets/sprites/coin.png +0 -0
- package/archetypes/runner/assets/sprites/coin.png.ogt +7 -0
- package/archetypes/runner/assets/sprites/courier.ogt +32 -0
- package/archetypes/runner/assets/sprites/courier.png +0 -0
- package/archetypes/runner/assets/sprites/courier.png.ogt +7 -0
- package/archetypes/runner/assets/sprites/props.ogt +21 -0
- package/archetypes/runner/assets/sprites/props.png +0 -0
- package/archetypes/runner/assets/sprites/props.png.ogt +7 -0
- package/archetypes/runner/assets/sprites/sky.png +0 -0
- package/archetypes/runner/assets/sprites/sky.png.ogt +7 -0
- package/archetypes/runner/assets/tiles/city.ogt +18 -0
- package/archetypes/runner/assets/tiles/city.png +0 -0
- package/archetypes/runner/assets/tiles/city.png.ogt +7 -0
- package/archetypes/runner/gitattributes +22 -0
- package/archetypes/runner/host.d.ts +46 -0
- package/archetypes/runner/package.json +18 -0
- package/archetypes/runner/project.ogt +18 -0
- package/archetypes/runner/references/metal/frames-coin.png +0 -0
- package/archetypes/runner/references/metal/frames-crash.png +0 -0
- package/archetypes/runner/references/metal/frames-title.png +0 -0
- package/archetypes/runner/src/art.ts +57 -0
- package/archetypes/runner/src/components.ts +94 -0
- package/archetypes/runner/src/main.ts +241 -0
- package/archetypes/runner/src/systems.ts +553 -0
- package/archetypes/runner/tests/coins.og.ts +30 -0
- package/archetypes/runner/tests/flow.og.ts +72 -0
- package/archetypes/runner/tests/frames.og.ts +37 -0
- package/archetypes/runner/tests/frames.ts +134 -0
- package/archetypes/runner/tests/jump.og.ts +44 -0
- package/archetypes/runner/tests/lib.ts +42 -0
- package/archetypes/runner/tests/records.og.ts +43 -0
- package/archetypes/runner/tests/replay.og.ts +36 -0
- package/archetypes/runner/tests/sounds.og.ts +43 -0
- package/archetypes/runner/tests/tune.og.ts +36 -0
- package/archetypes/runner/tools/make-assets.py +603 -0
- package/archetypes/runner/tools/oglite.py +285 -0
- package/archetypes/runner/tsconfig.json +17 -0
- package/archetypes/third-person/.origin/setup +14 -0
- package/archetypes/third-person/LICENSES.md +23 -0
- package/archetypes/third-person/README.md +249 -0
- package/archetypes/third-person/assets/ai/sentinel-east.ogt +69 -0
- package/archetypes/third-person/assets/ai/sentinel-north.ogt +69 -0
- package/archetypes/third-person/assets/ai/sentinel-west.ogt +69 -0
- package/archetypes/third-person/assets/anims/humanoid-clips.glb +0 -0
- package/archetypes/third-person/assets/audio/alarm.wav +0 -0
- package/archetypes/third-person/assets/audio/dawn.wav +0 -0
- package/archetypes/third-person/assets/audio/grab.wav +0 -0
- package/archetypes/third-person/assets/audio/ignite.wav +0 -0
- package/archetypes/third-person/assets/audio/jump.wav +0 -0
- package/archetypes/third-person/assets/audio/night.wav +0 -0
- package/archetypes/third-person/assets/audio/splash.wav +0 -0
- package/archetypes/third-person/assets/audio/step.ogt +9 -0
- package/archetypes/third-person/assets/audio/ui-close.ogt +9 -0
- package/archetypes/third-person/assets/audio/ui-error.ogt +9 -0
- package/archetypes/third-person/assets/audio/ui-open.ogt +9 -0
- package/archetypes/third-person/assets/audio/ui-press.ogt +9 -0
- package/archetypes/third-person/assets/audio/ui-success.ogt +9 -0
- package/archetypes/third-person/assets/audio/vale.wav +0 -0
- package/archetypes/third-person/assets/fonts/NotoSansSC-subset.ttf +0 -0
- package/archetypes/third-person/assets/fonts/NotoSansSC-subset.ttf.ogt +10 -0
- package/archetypes/third-person/assets/fonts/OFL.txt +93 -0
- package/archetypes/third-person/assets/fx/burst.ogt +25 -0
- package/archetypes/third-person/assets/fx/fire.ogt +24 -0
- package/archetypes/third-person/assets/fx/smoke.ogt +24 -0
- package/archetypes/third-person/assets/fx/splash.ogt +24 -0
- package/archetypes/third-person/assets/luts/teal-orange.cube +4917 -0
- package/archetypes/third-person/assets/models/stout.glb +0 -0
- package/archetypes/third-person/assets/models/strider.glb +0 -0
- package/archetypes/third-person/assets/models/strider.glb.ogt +9 -0
- package/archetypes/third-person/assets/nav/vale.ogt +43 -0
- package/archetypes/third-person/assets/rigs/strider.ogt +6 -0
- package/archetypes/third-person/assets/skins/ember/Cinzel-Bold.ttf +0 -0
- package/archetypes/third-person/assets/skins/ember/Cinzel-Bold.ttf.ogt +9 -0
- package/archetypes/third-person/assets/skins/ember/LICENSES.md +13 -0
- package/archetypes/third-person/assets/skins/ember/Newsreader-Medium.ttf +0 -0
- package/archetypes/third-person/assets/skins/ember/Newsreader-Medium.ttf.ogt +9 -0
- package/archetypes/third-person/assets/skins/ember/OFL.txt +94 -0
- package/archetypes/third-person/assets/skins/ember/atlas.png +0 -0
- package/archetypes/third-person/assets/skins/ember/atlas.png.ogt +7 -0
- package/archetypes/third-person/assets/skins/ember/icons.png +0 -0
- package/archetypes/third-person/assets/skins/ember/icons.png.ogt +7 -0
- package/archetypes/third-person/assets/skins/ember/skin.ogt +109 -0
- package/archetypes/third-person/assets/strings/en.ogt +47 -0
- package/archetypes/third-person/assets/strings/zh-CN.ogt +47 -0
- package/archetypes/third-person/assets/terrain/vale-control.png +0 -0
- package/archetypes/third-person/assets/terrain/vale.ogt +42 -0
- package/archetypes/third-person/assets/terrain/vale.png +0 -0
- package/archetypes/third-person/assets/textures/decals.png +0 -0
- package/archetypes/third-person/assets/textures/flame.png +0 -0
- package/archetypes/third-person/assets/textures/smoke.png +0 -0
- package/archetypes/third-person/assets/textures/spark.png +0 -0
- package/archetypes/third-person/assets/textures/terrain-grass.png +0 -0
- package/archetypes/third-person/assets/textures/terrain-path.png +0 -0
- package/archetypes/third-person/assets/textures/terrain-rock.png +0 -0
- package/archetypes/third-person/assets/textures/terrain-sand.png +0 -0
- package/archetypes/third-person/gitattributes +22 -0
- package/archetypes/third-person/host.d.ts +46 -0
- package/archetypes/third-person/package.json +18 -0
- package/archetypes/third-person/project.ogt +14 -0
- 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/anim.ts +87 -0
- package/archetypes/third-person/src/beacons.ts +80 -0
- package/archetypes/third-person/src/components.ts +148 -0
- package/archetypes/third-person/src/hero.ts +293 -0
- package/archetypes/third-person/src/main.ts +164 -0
- package/archetypes/third-person/src/sentinels.ts +159 -0
- package/archetypes/third-person/src/sound.ts +66 -0
- package/archetypes/third-person/src/ui.ts +451 -0
- package/archetypes/third-person/src/world.ts +212 -0
- package/archetypes/third-person/tests/flow.og.ts +70 -0
- package/archetypes/third-person/tests/frames.og.ts +35 -0
- package/archetypes/third-person/tests/frames.ts +134 -0
- package/archetypes/third-person/tests/hitstop.og.ts +26 -0
- package/archetypes/third-person/tests/lib.ts +87 -0
- package/archetypes/third-person/tests/lose.og.ts +44 -0
- package/archetypes/third-person/tests/pause.og.ts +64 -0
- package/archetypes/third-person/tests/phone.og.ts +65 -0
- package/archetypes/third-person/tests/replay.og.ts +32 -0
- package/archetypes/third-person/tests/restart.og.ts +28 -0
- package/archetypes/third-person/tests/sentinels.og.ts +48 -0
- package/archetypes/third-person/tests/win.og.ts +62 -0
- package/archetypes/third-person/tools/make-assets.py +353 -0
- package/archetypes/third-person/tools/oglite.py +285 -0
- package/archetypes/third-person/tsconfig.json +17 -0
- package/archetypes/topdown/.origin/setup +14 -0
- package/archetypes/topdown/LICENSES.md +10 -0
- package/archetypes/topdown/README.md +235 -0
- package/archetypes/topdown/assets/ai/slime.ogt +49 -0
- package/archetypes/topdown/assets/audio/coin.wav +0 -0
- package/archetypes/topdown/assets/audio/door.wav +0 -0
- package/archetypes/topdown/assets/audio/hit.wav +0 -0
- package/archetypes/topdown/assets/audio/hurt.wav +0 -0
- package/archetypes/topdown/assets/audio/key.wav +0 -0
- package/archetypes/topdown/assets/audio/step.ogt +9 -0
- package/archetypes/topdown/assets/fonts/OFL.txt +93 -0
- package/archetypes/topdown/assets/fonts/ui.ttf +0 -0
- package/archetypes/topdown/assets/fonts/ui.ttf.ogt +9 -0
- package/archetypes/topdown/assets/maps/tomb.tmj +2183 -0
- package/archetypes/topdown/assets/sprites/hero.ogt +58 -0
- package/archetypes/topdown/assets/sprites/hero.png +0 -0
- package/archetypes/topdown/assets/sprites/hero.png.ogt +7 -0
- package/archetypes/topdown/assets/sprites/items.ogt +15 -0
- package/archetypes/topdown/assets/sprites/items.png +0 -0
- package/archetypes/topdown/assets/sprites/items.png.ogt +7 -0
- package/archetypes/topdown/assets/sprites/slime.ogt +17 -0
- package/archetypes/topdown/assets/sprites/slime.png +0 -0
- package/archetypes/topdown/assets/sprites/slime.png.ogt +7 -0
- package/archetypes/topdown/assets/tiles/dungeon.ogt +65 -0
- package/archetypes/topdown/assets/tiles/dungeon.png +0 -0
- package/archetypes/topdown/assets/tiles/dungeon.png.ogt +7 -0
- package/archetypes/topdown/gitattributes +22 -0
- package/archetypes/topdown/host.d.ts +46 -0
- package/archetypes/topdown/package.json +18 -0
- package/archetypes/topdown/project.ogt +14 -0
- package/archetypes/topdown/references/metal/crit.png +0 -0
- package/archetypes/topdown/references/metal/dash.png +0 -0
- package/archetypes/topdown/references/metal/east.png +0 -0
- package/archetypes/topdown/references/metal/start.png +0 -0
- package/archetypes/topdown/src/art.ts +48 -0
- package/archetypes/topdown/src/components.ts +128 -0
- package/archetypes/topdown/src/main.ts +275 -0
- package/archetypes/topdown/src/systems.ts +503 -0
- package/archetypes/topdown/tests/ai.og.ts +64 -0
- package/archetypes/topdown/tests/combat.og.ts +72 -0
- package/archetypes/topdown/tests/door.og.ts +62 -0
- package/archetypes/topdown/tests/flee.og.ts +49 -0
- package/archetypes/topdown/tests/frames.og.ts +45 -0
- package/archetypes/topdown/tests/frames.ts +134 -0
- package/archetypes/topdown/tests/lib.ts +71 -0
- package/archetypes/topdown/tests/replay.og.ts +40 -0
- package/archetypes/topdown/tests/walk.og.ts +46 -0
- package/archetypes/topdown/tools/make-assets.py +623 -0
- package/archetypes/topdown/tools/oglite.py +285 -0
- package/archetypes/topdown/tsconfig.json +17 -0
- package/archetypes/tower-defense/.origin/setup +14 -0
- package/archetypes/tower-defense/LICENSES.md +15 -0
- package/archetypes/tower-defense/README.md +240 -0
- package/archetypes/tower-defense/assets/ai/plant.ogt +16 -0
- package/archetypes/tower-defense/assets/audio/clear.wav +0 -0
- package/archetypes/tower-defense/assets/audio/frost.wav +0 -0
- package/archetypes/tower-defense/assets/audio/leak.wav +0 -0
- package/archetypes/tower-defense/assets/audio/lost.wav +0 -0
- package/archetypes/tower-defense/assets/audio/night.wav +0 -0
- package/archetypes/tower-defense/assets/audio/plant.wav +0 -0
- package/archetypes/tower-defense/assets/audio/pop.wav +0 -0
- package/archetypes/tower-defense/assets/audio/thorn.wav +0 -0
- package/archetypes/tower-defense/assets/audio/ui-close.ogt +9 -0
- package/archetypes/tower-defense/assets/audio/ui-error.ogt +9 -0
- package/archetypes/tower-defense/assets/audio/ui-open.ogt +9 -0
- package/archetypes/tower-defense/assets/audio/ui-press.ogt +9 -0
- package/archetypes/tower-defense/assets/audio/ui-success.ogt +9 -0
- package/archetypes/tower-defense/assets/audio/wave.wav +0 -0
- package/archetypes/tower-defense/assets/audio/won.wav +0 -0
- package/archetypes/tower-defense/assets/fonts/NotoSansSC-subset.ttf +0 -0
- package/archetypes/tower-defense/assets/fonts/NotoSansSC-subset.ttf.ogt +10 -0
- package/archetypes/tower-defense/assets/fonts/OFL.txt +93 -0
- package/archetypes/tower-defense/assets/fx/fireflies.ogt +21 -0
- package/archetypes/tower-defense/assets/fx/pop.ogt +21 -0
- package/archetypes/tower-defense/assets/maps/garden.ogt +91 -0
- package/archetypes/tower-defense/assets/skins/pathguard/Fredoka-SemiBold.ttf +0 -0
- package/archetypes/tower-defense/assets/skins/pathguard/Fredoka-SemiBold.ttf.ogt +9 -0
- package/archetypes/tower-defense/assets/skins/pathguard/LICENSES.md +13 -0
- package/archetypes/tower-defense/assets/skins/pathguard/LilitaOne-Regular.ttf +0 -0
- package/archetypes/tower-defense/assets/skins/pathguard/LilitaOne-Regular.ttf.ogt +9 -0
- package/archetypes/tower-defense/assets/skins/pathguard/OFL.txt +94 -0
- package/archetypes/tower-defense/assets/skins/pathguard/atlas.png +0 -0
- package/archetypes/tower-defense/assets/skins/pathguard/atlas.png.ogt +7 -0
- package/archetypes/tower-defense/assets/skins/pathguard/icons.png +0 -0
- package/archetypes/tower-defense/assets/skins/pathguard/icons.png.ogt +7 -0
- package/archetypes/tower-defense/assets/skins/pathguard/skin.ogt +111 -0
- package/archetypes/tower-defense/assets/sprites/garden.ogt +66 -0
- package/archetypes/tower-defense/assets/sprites/garden.png +0 -0
- package/archetypes/tower-defense/assets/sprites/garden.png.ogt +7 -0
- package/archetypes/tower-defense/assets/sprites/glow.png +0 -0
- package/archetypes/tower-defense/assets/sprites/glow.png.ogt +7 -0
- package/archetypes/tower-defense/assets/sprites/ring.png +0 -0
- package/archetypes/tower-defense/assets/sprites/ring.png.ogt +7 -0
- package/archetypes/tower-defense/assets/sprites/spark.png +0 -0
- package/archetypes/tower-defense/assets/sprites/spark.png.ogt +7 -0
- package/archetypes/tower-defense/assets/strings/en.ogt +47 -0
- package/archetypes/tower-defense/assets/strings/zh-CN.ogt +47 -0
- package/archetypes/tower-defense/assets/tiles/garden.ogt +10 -0
- package/archetypes/tower-defense/assets/tiles/garden.png +0 -0
- package/archetypes/tower-defense/assets/tiles/garden.png.ogt +7 -0
- package/archetypes/tower-defense/gitattributes +22 -0
- package/archetypes/tower-defense/host.d.ts +46 -0
- package/archetypes/tower-defense/package.json +18 -0
- package/archetypes/tower-defense/project.ogt +14 -0
- 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/art.ts +24 -0
- package/archetypes/tower-defense/src/components.ts +156 -0
- package/archetypes/tower-defense/src/main.ts +253 -0
- package/archetypes/tower-defense/src/systems.ts +658 -0
- package/archetypes/tower-defense/src/ui.ts +382 -0
- package/archetypes/tower-defense/tests/flow.og.ts +56 -0
- package/archetypes/tower-defense/tests/frames.og.ts +31 -0
- package/archetypes/tower-defense/tests/frames.ts +134 -0
- package/archetypes/tower-defense/tests/lib.ts +81 -0
- package/archetypes/tower-defense/tests/lose.og.ts +40 -0
- package/archetypes/tower-defense/tests/maze.og.ts +53 -0
- package/archetypes/tower-defense/tests/pad.og.ts +41 -0
- package/archetypes/tower-defense/tests/pause.og.ts +59 -0
- package/archetypes/tower-defense/tests/phone.og.ts +49 -0
- package/archetypes/tower-defense/tests/replay.og.ts +28 -0
- package/archetypes/tower-defense/tests/win.og.ts +58 -0
- package/archetypes/tower-defense/tools/make-assets.py +640 -0
- package/archetypes/tower-defense/tools/oglite.py +285 -0
- package/archetypes/tower-defense/tsconfig.json +17 -0
- package/bin/create.ts +496 -0
- package/looks/catalogue.json +1871 -0
- package/package.json +31 -4
- package/template/.origin/setup +14 -0
- package/template/LICENSES.md +23 -0
- package/template/README.md +37 -0
- package/template/assets/ai/guard.ogt +48 -0
- package/template/assets/audio/blip.wav +0 -0
- package/template/assets/audio/click.ogt +9 -0
- package/template/assets/fonts/NotoSansSC-Regular-subset.ttf +0 -0
- package/template/assets/fonts/NotoSansSC-Regular-subset.ttf.ogt +12 -0
- package/template/assets/fonts/OFL.txt +93 -0
- package/template/assets/looks/origin-game.ogt +12 -0
- package/template/assets/models/dropship.glb +0 -0
- package/template/assets/models/walker.glb +0 -0
- package/template/assets/nav/yard.ogt +27 -0
- package/template/assets/scenes/main.ogt +34 -0
- package/template/assets/strings/en.ogt +14 -0
- package/template/assets/textures/stone.png +0 -0
- package/template/assets/textures/stone_n.png +0 -0
- package/template/assets/textures/stone_n.png.ogt +7 -0
- package/template/gitattributes +22 -0
- package/template/package.json +18 -0
- package/template/project.ogt +25 -0
- package/template/src/main.ts +246 -0
- package/template/tests/guard.og.ts +67 -0
- package/template/tests/smoke.og.ts +43 -0
- package/template/tsconfig.json +17 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "Bundler",
|
|
6
|
+
"lib": ["ES2022"],
|
|
7
|
+
"types": [],
|
|
8
|
+
"strict": true,
|
|
9
|
+
"exactOptionalPropertyTypes": true,
|
|
10
|
+
"noFallthroughCasesInSwitch": true,
|
|
11
|
+
"isolatedModules": true,
|
|
12
|
+
"verbatimModuleSyntax": true,
|
|
13
|
+
"allowImportingTsExtensions": true,
|
|
14
|
+
"noEmit": true
|
|
15
|
+
},
|
|
16
|
+
"include": ["src/**/*.ts", "tests/**/*.ts", "host.d.ts"]
|
|
17
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Prepares this Game's cloud sandbox snapshot: Origin runs it once per
|
|
3
|
+
# snapshot build, in the checkout, without a terminal, for at most 20 minutes,
|
|
4
|
+
# and saves the result for new sandboxes of the Game. Keep it idempotent; it
|
|
5
|
+
# never receives credentials. Only ignored output is kept: node_modules/ and
|
|
6
|
+
# cooked/ (og cook is incremental, so a new sandbox starts cooked).
|
|
7
|
+
set -eu
|
|
8
|
+
if [ -f bun.lock ]; then bun install --frozen-lockfile; else bun install; fi
|
|
9
|
+
og="${ORIGIN_OG_BIN:-og}"
|
|
10
|
+
if ! command -v "$og" >/dev/null 2>&1; then
|
|
11
|
+
echo "no og on this executor class; the first og run cooks instead"
|
|
12
|
+
exit 0
|
|
13
|
+
fi
|
|
14
|
+
"$og" cook .
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Asset licences
|
|
2
|
+
|
|
3
|
+
| File | Licence | Origin |
|
|
4
|
+
|---|---|---|
|
|
5
|
+
| `assets/charts/neon-pulse.ogt` | CC0 1.0 | self-made: the song's chart, written by `tools/make-assets.py` (standard library only, deterministic) from the song's note lists |
|
|
6
|
+
| `assets/audio/*.wav` | CC0 1.0 | self-made: "Neon Pulse" as stems (drums, bass, chords, two lead phrases) synthesised from the same note lists, the metronome's click, the lanes' taps, the miss, the clear and the fail, same script |
|
|
7
|
+
| `assets/audio/*.ogt` | CC0 1.0 | `og sfx` presets (click, select, back, error, levelup) that `og cook` synthesises, written by the same script |
|
|
8
|
+
| `assets/sprites/*.png`, `assets/sprites/*.ogt` | CC0 1.0 | self-made: the note, the receptor's ring, the lane's glow and the spark, same script |
|
|
9
|
+
| `assets/fx/*.ogt` | CC0 1.0 | self-made: the hit's burst, same script |
|
|
10
|
+
| `assets/strings/*.ogt` | CC0 1.0 | self-made: the English and Chinese string tables |
|
|
11
|
+
| `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` |
|
|
12
|
+
| `assets/skins/lanebeat/*` | CC0 1.0 art, SIL OFL 1.1 fonts | the engine's sci-fi style pack (`templates/ui-kit/assets/skins/scifi`, `assets/skins/lanebeat/LICENSES.md`) with this game's palette |
|
|
13
|
+
| `references/*/*.png` | CC0 1.0 | frames of this game recorded by `tests/frames.og.ts` |
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# Three-Lane Beat — the rhythm archetype (2D)
|
|
2
|
+
|
|
3
|
+
Notes fall down three lanes to the hit line in time with "Neon Pulse"
|
|
4
|
+
(120 BPM, 24 bars). Hit each as it crosses the line. A hit is judged by
|
|
5
|
+
how far it was from the note's exact time (Perfect, Great, Good), and a
|
|
6
|
+
note let past is a Miss; hits build the combo and its multiplier and fill
|
|
7
|
+
the groove, misses drain it, and an empty groove ends the song. A
|
|
8
|
+
calibration measures how late this device's sound and picture reach you.
|
|
9
|
+
|
|
10
|
+
三道节拍:音符沿三条轨道落向判定线,与《霓虹脉冲》(120 BPM,24 小节)同拍。在音符经过判定线时击打它。每次击打按离音符准确时间的偏差判定(完美、很好、不错),漏掉的音符算失误;击中累积连击和倍率、填满律动槽,失误会让它下降,律动槽空了歌曲就结束。校准会测出这台设备的声音和画面传到你这里的延迟。
|
|
11
|
+
|
|
12
|
+
This is a complete Origin Engine project: `og run .` plays it headless,
|
|
13
|
+
`og build .` makes the play page, `og test .` runs its playtests and
|
|
14
|
+
`og polish .` scores them. It rebuilds the platform's retired Discover
|
|
15
|
+
rhythm prototype on the engine: its premise (lanes, a chart, judged hits,
|
|
16
|
+
a combo, a song to clear) and none of its code or music.
|
|
17
|
+
|
|
18
|
+
```sh
|
|
19
|
+
og cook . # assets/ into cooked/ (og run and og build cook too)
|
|
20
|
+
og run . --headless --commands "0.5:play;4:screenshot:highway.png;4.1:quit"
|
|
21
|
+
og test . # tests/*.og.ts through og run --headless --commands
|
|
22
|
+
og polish . # the playtests scored against og-taste and og-feel
|
|
23
|
+
og build . --publish # dist/: the play page as it ships
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## What it demonstrates, and the skills it exercises
|
|
27
|
+
|
|
28
|
+
- **og.Music's clock and og.MusicBeat** (og-audio §2, §5): the song's
|
|
29
|
+
clock is an `og.Music` (120 BPM, 4/4, `start` the world time of bar 1)
|
|
30
|
+
that the Clock system keeps on `Game.songStart`. The song is stems, not
|
|
31
|
+
one file: on the last beat of each bar og.MusicBeat brings, the Band
|
|
32
|
+
starts the next bar's stems with `AudioSource.startAt` on that bar line,
|
|
33
|
+
so they start to the sample and stay in step (drums every bar; bass,
|
|
34
|
+
chords and the lead's phrases two bars long on odd bars). The same
|
|
35
|
+
events schedule the notes: each beat brings every note up to two beats
|
|
36
|
+
ahead (`Tuning.scrollBeats`) onto the highway.
|
|
37
|
+
- **Hit windows in time, not ticks**: a note's time is
|
|
38
|
+
`songStart + beat × 60 / bpm` exactly; a press is judged at the time it
|
|
39
|
+
happened (its tick's world time plus its og.KeyDown's or
|
|
40
|
+
og.PointerDown's `at`, the host's event time within the tick) less the
|
|
41
|
+
output's latency (`og.audio.outputLatency`) and the calibrated offset,
|
|
42
|
+
against that time, in milliseconds (Perfect ±45, Great ±90, Good ±135,
|
|
43
|
+
`Tuning`). Early and late are shown under Great and Good.
|
|
44
|
+
- **Judgement text, a combo meter, the groove**: the judgement rises from
|
|
45
|
+
the lane in its colour; the combo counts beside the highway with its
|
|
46
|
+
multiplier (×1 to ×4, one more every ten) and an `og.ui.meter` to the
|
|
47
|
+
next; the groove (the life gauge) is an `og.ui.meter` that hits fill
|
|
48
|
+
and misses drain.
|
|
49
|
+
- **Latency calibration**: Calibrate (on the title or in the settings)
|
|
50
|
+
clicks every beat; eight taps on the clicks give the mean error, saved
|
|
51
|
+
as `Prefs.offsetMs` with the settings; the settings also take it by
|
|
52
|
+
hand (±200 ms). The output's latency is og.audio's to report and is
|
|
53
|
+
taken off before the offset, so the calibration measures the rest of
|
|
54
|
+
the chain a player perceives (the display, the hand).
|
|
55
|
+
- **A chart format in .ogt** (og-game §8): a chart is a scene,
|
|
56
|
+
`assets/charts/neon-pulse.ogt`: one entity with a `Song` (tempo, metre,
|
|
57
|
+
bars, notes) and an entity per note with a `Note` (index, lane 0–2,
|
|
58
|
+
beat from 0 at bar 1). `start` instantiates it; the rows are the
|
|
59
|
+
notes. It is text a Maker edits by hand; `tools/make-assets.py` writes
|
|
60
|
+
this one from the same note lists as the stems.
|
|
61
|
+
- **Pause and resume in time**: pausing freezes the play's clock where it
|
|
62
|
+
is and stops the band (og.audio runs on the world's ticks, which keep
|
|
63
|
+
going); Resume counts in again and carries on from the beat it paused
|
|
64
|
+
on: the stems sounding then start part-way (`AudioSource.startOffset`)
|
|
65
|
+
on the count-in's end, notes already judged staying judged.
|
|
66
|
+
- **Feel** (og-feel §4–§7): a press squashes its lane's receptor and
|
|
67
|
+
plays its lane's tick (on the ui bus); a hit flashes the receptor in the
|
|
68
|
+
lane's colour, bursts sparks from it and nudges the camera down; every
|
|
69
|
+
tenth of a combo punches it; a miss shakes it with a dull thud (a combo
|
|
70
|
+
of ten or more broken, louder); the rings breathe with the beat (not
|
|
71
|
+
with reduced motion). There is no hit stop: it would hold the picture
|
|
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
|
|
75
|
+
(Play, Calibrate, Settings), the HUD (the score as an `og.ui.counter`
|
|
76
|
+
and the groove top left, Pause top right, the combo beside the
|
|
77
|
+
highway), `og.ui.pauseMenu` (Resume, Restart, Settings, Title), the
|
|
78
|
+
settings with the offset, the calibration and the results built from
|
|
79
|
+
widgets (the grade popping in, a new best), a wipe between screens (a
|
|
80
|
+
fade with reduced motion).
|
|
81
|
+
- **Input everywhere**: A S D, J K L or the arrows (Space too for the
|
|
82
|
+
middle lane); the pad's d-pad or X A B; a finger on a lane (`og.Pointers`,
|
|
83
|
+
so chords take two fingers).
|
|
84
|
+
- **Languages and the platform** (og-i18n, og-platform-sdk §1–§4): every
|
|
85
|
+
string is a key of `assets/strings/en.ogt` and `zh-CN.ogt`; settings
|
|
86
|
+
through `loadSettings`/`saveSettings`; the best score read on tick 0 and
|
|
87
|
+
written at the revision read; the board; a `song.over` event.
|
|
88
|
+
|
|
89
|
+
`og polish .` (2026-10-19, og and the native addon built release from
|
|
90
|
+
this checkout, load 18): taste 99, feel 99, in
|
|
91
|
+
`tests/evidence/P2/archetypes/rhythm/` of the engine repository (feel 74
|
|
92
|
+
at load 27–73, frame time's p95 following the load:
|
|
93
|
+
`tests/evidence/P2/archetypes/frame-time.md`). Hit feedback is n/a: no
|
|
94
|
+
note is damage, and a hit stop would hold the picture while the music
|
|
95
|
+
runs on.
|
|
96
|
+
|
|
97
|
+
## Rules
|
|
98
|
+
|
|
99
|
+
- **Hits.** Each lane's press hits that lane's nearest unjudged note
|
|
100
|
+
within ±135 ms of its time: within 45 ms Perfect (300 points), 90 Great
|
|
101
|
+
(200), 135 Good (100), times the multiplier. A press with no note near
|
|
102
|
+
is only a sound. A note 135 ms past its time is a Miss.
|
|
103
|
+
- **Combo.** Hits in a row; the multiplier is one more every ten, up to
|
|
104
|
+
four. A Miss breaks it.
|
|
105
|
+
- **Groove.** Starts at half; a Perfect adds 0.03, a Great 0.021, a Good
|
|
106
|
+
0.012; a Miss takes 0.1. Empty, the song fails.
|
|
107
|
+
- **The end.** A beat and a half after the last note is judged, the
|
|
108
|
+
results: accuracy (a Perfect whole, a Great 70 %, a Good 40 %), the
|
|
109
|
+
grade (S from 95 %, A 85, B 70, C 50, else D), the counts, the best
|
|
110
|
+
combo, a new best kept and submitted.
|
|
111
|
+
|
|
112
|
+
Everything is deterministic: the clock is the world's ticks, the chart is
|
|
113
|
+
data, and `tests/replay.og.ts` replays a play to the same hash.
|
|
114
|
+
|
|
115
|
+
## How it feels
|
|
116
|
+
|
|
117
|
+
| Moment | What happens | Where |
|
|
118
|
+
|---|---|---|
|
|
119
|
+
| a press | the lane's receptor squashes 1.12 × 0.82, the lane's tick (C, E or G) | `Lanes`, `Voices` |
|
|
120
|
+
| a hit | the receptor flashes in the lane's colour, 14 sparks, the judgement rises (and early or late), a 0.04 m nudge down | `judge`, `Lanes` |
|
|
121
|
+
| every tenth of a combo | a 0.03 punch | `judge` |
|
|
122
|
+
| a miss | `Miss` in red, trauma 0.18, a dull thud (louder when a combo of ten or more breaks) | `judge` |
|
|
123
|
+
| the beat | the receptors' rings brighten and fade | `Lanes` |
|
|
124
|
+
| the count-in | four clicks, `4 3 2 1` over the middle lane | `Band`, `Play` |
|
|
125
|
+
| the end | a fanfare (cleared) or a falling tone (failed, the band stops), a wipe to the results, the grade popping in | `Play`, `results` |
|
|
126
|
+
|
|
127
|
+
## State
|
|
128
|
+
|
|
129
|
+
| Type | Kind | What it holds |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| `Game` | resource | the phase, the clock (`songStart`, the pause, the count-in), the score, the combo, the counts by judgement, the groove, the end, the calibration's taps, the best, the layout, sound requests, the band's requests |
|
|
132
|
+
| `Tuning` | resource | the knobs below |
|
|
133
|
+
| `Prefs` | resource | the volumes, the language, reduced motion, the offset, the settings request |
|
|
134
|
+
| `Song` | the chart's song row | tempo, metre, bars, notes |
|
|
135
|
+
| `Note` | the chart's note rows | index, lane, beat; live, judgement, error |
|
|
136
|
+
| `Stem` | the 15 stems (and clicks) | the part, starts |
|
|
137
|
+
| `Receptor` | the three receptors | lane, presses |
|
|
138
|
+
| `Sfx` | one row per sound | its `Sound.*` bit, its plays |
|
|
139
|
+
|
|
140
|
+
## Systems (in tick order)
|
|
141
|
+
|
|
142
|
+
| System | Job |
|
|
143
|
+
|---|---|
|
|
144
|
+
| `Ui` | the screens, the layout for the surface, the buses, starting, pausing, resuming and ending a play, the calibration, the platform's answers |
|
|
145
|
+
| `Clock` | keeps the og.Music clock on `Game.songStart` |
|
|
146
|
+
| `Play` | presses, judgements, misses, the notes og.MusicBeat schedules, the highway, the count-in's numbers, the end |
|
|
147
|
+
| `Band` | starts the stems on their bar lines (og.MusicBeat), the count-in's and the calibration's clicks; stops them |
|
|
148
|
+
| `Lanes` | the receptors' squash, flash, burst and beat |
|
|
149
|
+
| `Voices` | plays each requested sound once |
|
|
150
|
+
|
|
151
|
+
og.music (before og.audio) writes the clock and sends og.MusicBeat.
|
|
152
|
+
|
|
153
|
+
## Tunables (`Tuning`)
|
|
154
|
+
|
|
155
|
+
| Field | Default | What it changes |
|
|
156
|
+
|---|---|---|
|
|
157
|
+
| `perfectMs`, `greatMs`, `goodMs` | 45, 90, 135 ms | the hit windows |
|
|
158
|
+
| `scrollBeats` | 2 | how far ahead notes appear (so how fast they fall) |
|
|
159
|
+
| `countInBeats` | 4 | the count-in's clicks |
|
|
160
|
+
| `grooveStart`, `grooveGain`, `grooveLoss` | 0.5, 0.03, 0.1 | the groove |
|
|
161
|
+
| `perfectPoints`, `greatPoints`, `goodPoints` | 300, 200, 100 | the points |
|
|
162
|
+
| `comboStep` | 10 | the combo per multiplier step |
|
|
163
|
+
|
|
164
|
+
## What a Maker changes first
|
|
165
|
+
|
|
166
|
+
1. **The chart**: `assets/charts/neon-pulse.ogt` by hand (a `Note` entity
|
|
167
|
+
per note), or the note lists in `tools/make-assets.py`.
|
|
168
|
+
2. **The song**: its stems in `tools/make-assets.py` (or recorded ones,
|
|
169
|
+
bar-aligned) and `partsAt` in `src/systems.ts`, which says which stem
|
|
170
|
+
starts on which bar.
|
|
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'
|
|
173
|
+
colours (`LANE_COLOURS`) and the art in `tools/make-assets.py`.
|
|
174
|
+
5. **Words**: `assets/strings/*.ogt`; a new Chinese string needs the
|
|
175
|
+
script run again to subset the font.
|
|
176
|
+
|
|
177
|
+
## Commands (for scripts and agents)
|
|
178
|
+
|
|
179
|
+
| Action | Does |
|
|
180
|
+
|---|---|
|
|
181
|
+
| `play[:<bar>]` | starts the song now, as Play does; from a later bar, the earlier notes skipped |
|
|
182
|
+
| `hit:<lane>` | presses a lane this tick, as a key or a finger does |
|
|
183
|
+
| `groove:<0-1>` | sets the groove |
|
|
184
|
+
| `offset:<ms>` | sets the calibrated offset |
|
|
185
|
+
| `calibrate` | opens the calibration |
|
|
186
|
+
| `hold`, `unhold` | pauses and resumes, as Escape and Resume do |
|
|
187
|
+
| `viewport:<desktop\|phone>` | lays the UI out for a phone in portrait (390 × 844 at 3×) |
|
|
188
|
+
| `language:<en\|zh-CN>` | switches the language |
|
|
189
|
+
| core actions | `touch_move_to:play`, `Pause`, `resume`, `Again`, `Title`, `Done`; keys `A S D`, `J K L`, arrows, `Space`, `Escape`; `gamepad:left` …; `touch_move` + `touch_start` on a lane |
|
|
190
|
+
|
|
191
|
+
`facts` (the probe's `state()`) reports the phase, the song's time, the
|
|
192
|
+
score, the combo and the best combo, the counts by judgement, the notes
|
|
193
|
+
judged and in the chart, the groove, the accuracy, cleared or failed, the
|
|
194
|
+
best and the language. The playtests read the same values from the
|
|
195
|
+
`Game` resource with `get:Game`, and press the lanes at the chart's times
|
|
196
|
+
(they read `assets/charts/neon-pulse.ogt` as data).
|
|
197
|
+
|
|
198
|
+
## Playtests (`og test .`)
|
|
199
|
+
|
|
200
|
+
| File | Proves |
|
|
201
|
+
|---|---|
|
|
202
|
+
| `tests/flow.og.ts` | Play by tap; the count-in; bars 1–2 hit on time: eight Perfects, a combo of 8, 2,400 points; 80 ms late is Great, 120 ms early Good; two notes let pass are Misses; an empty press judges nothing |
|
|
203
|
+
| `tests/band.og.ts` | the four clicks on the beats before bar 1, the drums on bar 1's line, the bass and chords on bar 5's, the lead on bar 9's, each `startAt` the exact bar time |
|
|
204
|
+
| `tests/clear.og.ts` | from bar 21 every note hit: cleared, grade S, 100 %, the best kept at the revision read and submitted, the telemetry, Play again |
|
|
205
|
+
| `tests/fail.og.ts` | five notes let pass empty the groove: failed, the band stopped, the results without a grade |
|
|
206
|
+
| `tests/pause.og.ts` | Escape freezes the clock (nothing missed while paused), stops the band, holds the time scale; 简体中文 saved; Resume counts in and carries on from the paused beat, the stems sounding then started part-way to the sample; the next notes hit at their new times |
|
|
207
|
+
| `tests/timing.og.ts` | bars 1–2 pressed 44, 7 and 89 ms late and early, 20 ms late and 30 ms early (command step times within their ticks, as a page's event times are): each judgement's error is the press's to a tenth of a millisecond, Perfect within 45 and Great within 90, where a tick's start would read 44 ms as 50 |
|
|
208
|
+
| `tests/calibrate.og.ts` | eight taps 67 ms after the clicks calibrate 67 ms, saved; a play 67 ms late is then all Perfect |
|
|
209
|
+
| `tests/pad.og.ts` | the d-pad and the face buttons start the song and hit the lanes; Start pauses, A resumes |
|
|
210
|
+
| `tests/phone.og.ts` | 390 × 844 at 3×: the HUD inside the safe area, three lanes across, fingers hit eight notes on time |
|
|
211
|
+
| `tests/frames.og.ts` | the title, the highway in bar 9 and the results match `references/<tier>/` (`OG_FX_CAPTURE=1 og test .` records them) |
|
|
212
|
+
| `tests/replay.og.ts` | a play with hits on time, late and early and misses, run twice, ends on one hash |
|
|
213
|
+
|
|
214
|
+
Each one fails when the behaviour it names is broken (one was broken on
|
|
215
|
+
purpose and restored: `tests/evidence/P2/archetypes/break-and-restore.md`
|
|
216
|
+
in the engine repository).
|
|
217
|
+
|
|
218
|
+
## Assets
|
|
219
|
+
|
|
220
|
+
`tools/make-assets.py` regenerates every asset byte for byte (two runs
|
|
221
|
+
give the same bytes): the chart and the stems from one set of note lists,
|
|
222
|
+
the click, the taps, the miss, the clear and the fail, the note, the ring,
|
|
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`.
|
|
226
|
+
|
|
227
|
+
## Known limits (engine gaps, not design)
|
|
228
|
+
|
|
229
|
+
- A gamepad's press has no time within the tick: the shell polls the
|
|
230
|
+
pads once a display frame, so a pad press is judged at its tick's start
|
|
231
|
+
(keys and fingers carry the host's event time).
|
|
232
|
+
- og.ui's `resultsScreen` and `settingsScreen` carried English labels of
|
|
233
|
+
their own when this game was written, so it builds its results and
|
|
234
|
+
settings from widgets (both now take a field for each of their words:
|
|
235
|
+
og-i18n §2).
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|