@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
package/README.md
CHANGED
|
@@ -1,3 +1,58 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @origingame/create-game
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Scaffolds an Origin Engine game from the project template (`templates/game`
|
|
4
|
+
of the engine repository): `project.ogt`, `src/`, `assets/`, `tests/`,
|
|
5
|
+
`package.json` and `tsconfig.json`, with the game's name and id filled in.
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
bun packages/create/bin/create.ts my-game --name "My Game" # in the engine repository
|
|
9
|
+
cd my-game && bun install && og cook && og run .
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
`create [dir] [--name "Name"] [--id slug] [--archetype name] [--premise "one line"] [--look slug] [--force]`: the
|
|
13
|
+
id defaults to the name in lowercase-hyphen form (or the directory's name);
|
|
14
|
+
a directory that is not empty is refused unless `--force` is given.
|
|
15
|
+
`--archetype` starts from a complete game of `templates/archetypes/`
|
|
16
|
+
instead of the template: `runner`, `match3`, `topdown`, `tower-defense`,
|
|
17
|
+
`roguelike`, `idle`, `rhythm` or `third-person` (the published package carries them under
|
|
18
|
+
`archetypes/`).
|
|
19
|
+
|
|
20
|
+
Every game gets its look: `assets/looks/<id>.ogt`, an `.ogt` of `type look`
|
|
21
|
+
(og-taste §12 of the knowledge package) that `GameDesc.look` in the entry
|
|
22
|
+
names, applied before `start` runs. It `extends` a preset of the style
|
|
23
|
+
catalogue (`packages/knowledge/looks/catalogue.json`, 37 styles):
|
|
24
|
+
|
|
25
|
+
- `--look <slug>` names it (`anime-cel-3d`, `16bit-pixel`, …; a slug with
|
|
26
|
+
no preset is refused, listing those that have one);
|
|
27
|
+
- `--premise "<one line>"` picks the style whose premise fits best (a word
|
|
28
|
+
of the premise in a style's genre counts 3, in its mood 2, in its era,
|
|
29
|
+
audience, name or descriptor 1; a tie goes to a style the engine draws
|
|
30
|
+
whole, then to catalogue order). On a terminal, with neither flag, create
|
|
31
|
+
asks for the premise (`--no-prompt` does not);
|
|
32
|
+
- otherwise the template's own look stays: the plain template extends
|
|
33
|
+
`faceted-low-poly`, the idle archetype carries its skin and render
|
|
34
|
+
settings, and the other archetypes get a look that extends nothing (their
|
|
35
|
+
frames stay as their `references/` recorded them).
|
|
36
|
+
|
|
37
|
+
The template's look file is renamed to the game's id, the blocks it sets
|
|
38
|
+
are kept under the chosen preset (they win field by field), and an entry
|
|
39
|
+
that names no look gets `look: "looks/<id>.ogt"` after `export default
|
|
40
|
+
og.game({`. The game's README gains a "The look" section: where the file
|
|
41
|
+
is, what it extends and how to change it. For an archetype, a preset moves
|
|
42
|
+
the frames its `references/` hold; create says so and how to record them
|
|
43
|
+
again.
|
|
44
|
+
|
|
45
|
+
The published package carries the template under `template/` and the style
|
|
46
|
+
catalogue under `looks/`, copied by the `prepack` script
|
|
47
|
+
(`scripts/pack-template.ts`); build output (`cooked/`,
|
|
48
|
+
`dist/`, `node_modules/`) is never copied. The template's `gitattributes`
|
|
49
|
+
(media through Git LFS) is written as the project's `.gitattributes`: under
|
|
50
|
+
its own name it would route the engine repository's plain-blob media through
|
|
51
|
+
LFS too. `bun run test` scaffolds into a
|
|
52
|
+
temporary directory and checks the result.
|
|
53
|
+
|
|
54
|
+
Note on the name: npm maps `npm create @origingame/game` to the package
|
|
55
|
+
`@origingame/create-game` and `npm create @origingame` to `@origingame/create-game`.
|
|
56
|
+
This package is `@origingame/create-game` (design §9); publishing it also as
|
|
57
|
+
`@origingame/create-game`, or documenting `npm create @origingame`, is the
|
|
58
|
+
publisher's choice.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Archetypes
|
|
2
|
+
|
|
3
|
+
Complete games a Maker starts from, each a project like `templates/game`
|
|
4
|
+
(`project.ogt`, `src/`, `assets/`, `tests/`, `package.json`,
|
|
5
|
+
`tsconfig.json`) that `og run`, `og test` and `og build` take as is. They
|
|
6
|
+
rebuild the platform's six Godot Discover prototypes on Origin Engine,
|
|
7
|
+
keeping each prototype's premise and lessons and none of its code or art,
|
|
8
|
+
and add a top-down room built for the engine's 2D and game-feel modules
|
|
9
|
+
and a third-person vale, the engine's mid-size 3D slice.
|
|
10
|
+
|
|
11
|
+
| Directory | Game | Profile | Input | Core loop |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `runner/` | Rooftop Run | 2d | one button: tap to hop, hold to jump | read the next crate or fence, time the jump, keep the pace |
|
|
14
|
+
| `match3/` | Tile Swap | 2d | taps or drags | spot a line, swap, chase the cascade, beat the target in the moves |
|
|
15
|
+
| `topdown/` | Tomb Room | 2d | WASD or arrows, Space to strike, Shift to dash | cross two rooms of a Tiled map, beat the slime, collect the coins and the key, open the door |
|
|
16
|
+
| `tower-defense/` | Path Guard | 2d | taps, or the arrows and Space, or a pad | pick a plant, set it on the lawn, watch the visitors re-route round it, hold five waves |
|
|
17
|
+
| `roguelike/` | Lamp Dive | 2d | the arrows or WASD, a tap on the next cell, a pad, or the HUD's d-pad | step a turn at a time through a fresh tomb, strike what the lamp shows, take what it finds, reach the relic on floor 2 with one life |
|
|
18
|
+
| `idle/` | Spark Orb | 2d | taps or Space on the orb, 1–4 or the cards to buy, a pad | tap for sparks, buy generators that make them, double each kind every tenth, collapse into a supernova for stardust, come back to what it made while away |
|
|
19
|
+
| `rhythm/` | Three-Lane Beat | 2d | A S D or the arrows, fingers on the lanes, a pad | read the notes falling to the line, hit each on its time, keep the combo and the groove, clear the song |
|
|
20
|
+
| `third-person/` | Ember Vale | 3d | WASD or the arrows, Shift, Space, hold F, Q and E; a pad; a touch joystick, Jump and Kindle | walk, wade and jump a lake vale at dusk, kindle four beacons before night while stone sentinels on their rounds hunt you |
|
|
21
|
+
|
|
22
|
+
Each archetype's README has its rules, components, systems, tunables, the
|
|
23
|
+
commands its playtests use and what a Maker changes first.
|
|
24
|
+
|
|
25
|
+
## What they share (and what each owns)
|
|
26
|
+
|
|
27
|
+
- **Pixel-art sprites, flipbooks and tilemaps.** `tools/make-assets.py`
|
|
28
|
+
draws every sheet texel by texel (standard library only, through its
|
|
29
|
+
`tools/oglite.py`, the same file in every archetype) and writes its
|
|
30
|
+
`type flipbook` sheet (clips, modes, frame events), the tilesets and maps, and a `texture { kind pixel }`
|
|
31
|
+
import for each PNG; two runs give the same bytes. Drawn entities carry
|
|
32
|
+
`og.Sprite` (y-sorted, blob shadows) and play `og.Flipbook` clips; the
|
|
33
|
+
runner's skyline is three parallax `og.Tilemap` strips, the board's
|
|
34
|
+
checker a tilemap, the tomb a Tiled `.tmj` with 47-blob auto-tiled walls
|
|
35
|
+
and merged colliders. The same script makes the sounds and subsets a
|
|
36
|
+
font to the HUD's characters.
|
|
37
|
+
- **Game feel from the engine.** `og.tween` (with the squash and flash
|
|
38
|
+
presets and completion events by tag), `og.time.hitStop`,
|
|
39
|
+
`og.camera.shake`/`kick`/`punch`, `og.render.floatingText` and
|
|
40
|
+
`og.Afterimage`; each README's Feel table names where each is used and
|
|
41
|
+
how much. The amounts follow the og-feel skill.
|
|
42
|
+
- **One row shape.** Every drawn entity carries the same components, and
|
|
43
|
+
the round's state and tuning ride on every row with one row (the runner,
|
|
44
|
+
the board) as the authority: a system sees one query and cannot reach
|
|
45
|
+
another entity or a game resource yet. Each README says how this changes
|
|
46
|
+
once it can. The four later archetypes (tower-defense, roguelike, idle,
|
|
47
|
+
rhythm) keep the play in game resources (`Game`, `Tuning`, `Prefs`)
|
|
48
|
+
that every system reads and writes; a system still writes only the rows
|
|
49
|
+
its query declares, so what another system's rows must show is asked for
|
|
50
|
+
through a resource field and done by the owner the same tick.
|
|
51
|
+
- **The platform and the screens.** The later four keep their settings
|
|
52
|
+
through `og.platform.loadSettings`/`saveSettings` and a record (a best,
|
|
53
|
+
a save) in the store at the revision read, merged after a stale write;
|
|
54
|
+
their title, pause, settings and end cards are og-ui widgets on a
|
|
55
|
+
recoloured style pack from `templates/ui-kit`, with every string in
|
|
56
|
+
`assets/strings/en.ogt` and `zh-CN.ogt`, and a phone layout inside the
|
|
57
|
+
safe area. Their `og polish` reports are in the engine repository's
|
|
58
|
+
`tests/evidence/P2/archetypes/`.
|
|
59
|
+
- **The 3D one.** `third-person/` is the exception to the pixel-art
|
|
60
|
+
sprites: a heightmap terrain with water, the engine's CC0 humanoids on
|
|
61
|
+
og.CharacterController with blend trees and IK, navmesh sentinels on
|
|
62
|
+
og.ai, particles, decals and the post stack, on the fantasy style pack
|
|
63
|
+
(its README).
|
|
64
|
+
- **The look as data.** `idle/` names its frame treatment and skin in
|
|
65
|
+
`assets/looks/idle.ogt` through `GameDesc.look` (og-taste §12); the
|
|
66
|
+
others set theirs in `start` until they move to a look. A look that
|
|
67
|
+
extends a catalogue preset changes the frames, so `references/` are
|
|
68
|
+
recorded again with it.
|
|
69
|
+
- **Pools, not spawning in systems.** Obstacles, coins and tiles are spawned
|
|
70
|
+
in `start` and recycled by systems.
|
|
71
|
+
- **Tunables.** The `Tuning` block (the scene's, or the component's
|
|
72
|
+
defaults in the topdown) holds them; `set:<entity>.Tuning.<field>=<value>` and Tune write
|
|
73
|
+
them live.
|
|
74
|
+
- **Playtests through real input.** `tests/*.og.ts` drive keys, taps and
|
|
75
|
+
drags through the command channel, plus a game command or two (`place`,
|
|
76
|
+
`deal`, `swap`) for states a test needs at once, and assert on
|
|
77
|
+
`dump_entity` of the authority row. `tests/frames.og.ts` compares frames
|
|
78
|
+
with `references/<tier>/` (`OG_FX_CAPTURE=1 og test .` records them) and
|
|
79
|
+
`tests/replay.og.ts` runs the same input twice in fresh processes and
|
|
80
|
+
requires one world hash. `og test .` runs them.
|
|
81
|
+
|
|
82
|
+
## Scaffolding one
|
|
83
|
+
|
|
84
|
+
`@origingame/create-game` scaffolds `templates/game`, or an archetype with
|
|
85
|
+
`--archetype <directory>`:
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
bun packages/create/bin/create.ts my-dive --archetype roguelike --name "My Dive" # in the engine repository
|
|
89
|
+
cd my-dive && bun install && og test . && og run .
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
It copies the directory (without `cooked/`, `dist/`, `og-out/` and
|
|
93
|
+
`.og/`), sets `name` and `id` in `project.ogt` and `package.json`, and
|
|
94
|
+
writes the archetype's `gitattributes` (media through Git LFS) as
|
|
95
|
+
`.gitattributes`. It gives the game its look, `assets/looks/<id>.ogt`
|
|
96
|
+
named by `GameDesc.look` (the archetype's own carried over, or one that
|
|
97
|
+
sets nothing), and `--look <slug>` or `--premise "<line>"` makes it extend
|
|
98
|
+
a catalogue preset: the archetype's reference frames then no longer match,
|
|
99
|
+
and create says to record them again (`packages/create/README.md`).
|
|
@@ -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,12 @@
|
|
|
1
|
+
# Asset licences
|
|
2
|
+
|
|
3
|
+
| File | Licence | Origin |
|
|
4
|
+
|---|---|---|
|
|
5
|
+
| `assets/sprites/*.png`, `assets/sprites/*.ogt` | CC0 1.0 | self-made: the orb (computed per pixel), the glow, the spark and the four motes, by `tools/make-assets.py` (standard library only, deterministic), with their import settings |
|
|
6
|
+
| `assets/fx/*.ogt` | CC0 1.0 | self-made: the tap, milestone, supernova, drift and stars emitters, same script |
|
|
7
|
+
| `assets/audio/*.wav` | CC0 1.0 | self-made: synthesised bells, tones and noise and the orbit's music loop, same script |
|
|
8
|
+
| `assets/audio/*.ogt` | CC0 1.0 | `og sfx` presets (click, select, back, error, levelup) that `og cook` synthesises, written by the same script |
|
|
9
|
+
| `assets/strings/*.ogt` | CC0 1.0 | self-made: the English and Chinese string tables |
|
|
10
|
+
| `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` |
|
|
11
|
+
| `assets/skins/sparkorb/*` | CC0 1.0 art, SIL OFL 1.1 fonts | the engine's neon style pack (`templates/ui-kit/assets/skins/neon`, `assets/skins/sparkorb/LICENSES.md`) with this game's palette; `atlas.png` is the pack's atlas with its magenta frames turned violet by the same script |
|
|
12
|
+
| `references/*/*.png` | CC0 1.0 | frames of this game recorded by `tests/frames.og.ts` |
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
# Spark Orb — the idle archetype (2D)
|
|
2
|
+
|
|
3
|
+
A glowing orb in the night. Tap it for sparks; spend them on generators
|
|
4
|
+
(embers, storms, crystals, stars) that make sparks on their own and circle
|
|
5
|
+
the orb as motes; every tenth of a kind doubles that kind. When a run has
|
|
6
|
+
made enough, the orb can collapse into a supernova: the sparks and the
|
|
7
|
+
generators go, stardust stays, and every stardust makes everything 10 %
|
|
8
|
+
stronger. Close the game and come back: the orb kept going at half its
|
|
9
|
+
rate while you were away.
|
|
10
|
+
|
|
11
|
+
星火球:夜空里一颗发光的球。点它得到火花;用火花购买生成器(余烬、风暴、晶簇、星辰),它们会自己产出火花,并化作光点绕着星火球转;同一种每满十个,产出翻倍。一轮攒够了,星火球可以坍缩成超新星:火花和生成器都会消失,留下星尘,每一点星尘让一切产出提升 10%。关掉游戏再回来:你离开的这段时间,星火球以一半的速度继续产出。
|
|
12
|
+
|
|
13
|
+
This is a complete Origin Engine project: `og run .` plays it headless,
|
|
14
|
+
`og build .` makes the play page, `og test .` runs its playtests and
|
|
15
|
+
`og polish .` scores them. It rebuilds the platform's retired Discover
|
|
16
|
+
idle prototype on the engine: its premise (one big tap target, generators,
|
|
17
|
+
prestige, progress while away) and none of its code or art.
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
og cook . # assets/ into cooked/ (og run and og build cook too)
|
|
21
|
+
og run . --headless --commands "0.3:play;0.5:own:0:12;0.5:own:1:4;1.5:screenshot:orb.png;1.6:quit"
|
|
22
|
+
og test . # tests/*.og.ts through og run --headless --commands
|
|
23
|
+
og polish . # the playtests scored against og-taste and og-feel
|
|
24
|
+
og build . --publish # dist/: the play page as it ships
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## What it demonstrates, and the skills it exercises
|
|
28
|
+
|
|
29
|
+
- **An economy as pure functions** (og-core §1, §5): prices, rates,
|
|
30
|
+
milestones, the tap's value, the supernova's stardust and the time away's
|
|
31
|
+
credit are functions of the counts and `Tuning` in `src/numbers.ts`, so
|
|
32
|
+
the systems, the HUD and the save's merge agree on every number, and
|
|
33
|
+
`set:Tuning.<field>` retunes the curve live.
|
|
34
|
+
- **Generators and prestige**: four generators at a price growing 15 % per
|
|
35
|
+
purchase, a doubling every tenth of a kind, the supernova (sparks and
|
|
36
|
+
generators reset, stardust kept, +10 % to everything per stardust), and
|
|
37
|
+
the run's card.
|
|
38
|
+
- **Progress while away through og.platform's store** (og-platform-sdk
|
|
39
|
+
§1–§4): the save (`orb`) is written at the revision read every 10 s of
|
|
40
|
+
play, on pause, on quitting to the title and after a supernova; on launch
|
|
41
|
+
it is read back and the time away credited at half the rate (capped at
|
|
42
|
+
eight hours) with a welcome back; a write refused as stale (another
|
|
43
|
+
device played meanwhile) is read again and the save with more lifetime
|
|
44
|
+
sparks kept and written back. The time away is the host's to give: the
|
|
45
|
+
save carries `og.platform.now` when it was written, and the store
|
|
46
|
+
answer's `time` (the host's clock, as host input like a key press) less
|
|
47
|
+
that is how long the game was closed.
|
|
48
|
+
- **Big numbers in the locale's words** (og-i18n §1–§5): `big` in
|
|
49
|
+
`src/numbers.ts` reads the unit size and the units from the string
|
|
50
|
+
tables, so English groups by thousands (`9,999`, `12.3K`, `1.20M`,
|
|
51
|
+
`4.56e15`) and Chinese by ten-thousands (`12.3万`, `1.23亿`, `4.56亿亿`);
|
|
52
|
+
`{n, number}` groups the small ones. Every string is a key of
|
|
53
|
+
`assets/strings/en.ogt` and `zh-CN.ogt`; the Chinese font is Noto Sans SC
|
|
54
|
+
subset to exactly the table's characters.
|
|
55
|
+
- **A satisfying tap** (og-feel §5–§7, §9): the orb squashes and flashes,
|
|
56
|
+
the sparks made rise from where the finger landed, a burst of sparks is
|
|
57
|
+
thrown out, and the chime climbs a quarter tone a tap through a quick run
|
|
58
|
+
of taps (twelve at most), the number turning gold and bigger from the
|
|
59
|
+
eighth. A
|
|
60
|
+
purchase floats the rate it added from the ring its mote joins; a
|
|
61
|
+
milestone flings a ring of sparks, punches the camera and plays a
|
|
62
|
+
fanfare; the supernova bursts 200 sparks, holds the world 10 ticks,
|
|
63
|
+
shakes and punches it.
|
|
64
|
+
- **og.ui counters on the tokens** (og-ui §2–§6, og-taste §1–§7): the
|
|
65
|
+
engine's neon pack recoloured as `assets/skins/sparkorb` (the orb's gold
|
|
66
|
+
as the one accent on night violet: a burnished amber under the buttons'
|
|
67
|
+
cream labels, the bright gold `accentInk` for gold words and icons); the wallet and the rate top left, the
|
|
68
|
+
stardust (an `og.ui.counter`) and Pause top right, the four generators
|
|
69
|
+
along the bottom (a touch-sized button each, the count of each an
|
|
70
|
+
`og.ui.counter`, the price in gold when it can be paid), the supernova's
|
|
71
|
+
progress (`og.ui.meter`) then its button, a card that shakes with the
|
|
72
|
+
error sound when its purchase is refused and bursts at a milestone,
|
|
73
|
+
`og.ui.pauseMenu`, a settings dialog, the supernova's question, its card
|
|
74
|
+
and the welcome back built from widgets, an iris between screens (a fade
|
|
75
|
+
with reduced motion).
|
|
76
|
+
- **Sound** (og-audio §1–§5): the tap's chime on the ui bus (the orb is
|
|
77
|
+
the game's one big button), a purchase's bell, a milestone's arpeggio,
|
|
78
|
+
the supernova's boom, the UI's sounds from `og sfx` presets, and a slow
|
|
79
|
+
72 BPM loop of pads and bells on the music bus ducked under the effects.
|
|
80
|
+
|
|
81
|
+
`og polish .` (2026-10-19, og and the native addon built release from
|
|
82
|
+
this checkout, load 28): taste 97, feel 94 (frame time 81: the p95 follows
|
|
83
|
+
the machine's load, `tests/evidence/P2/archetypes/frame-time.md`; the
|
|
84
|
+
median step and render are 2 ms each), in
|
|
85
|
+
`tests/evidence/P2/archetypes/idle/` of the engine repository. Hit feedback
|
|
86
|
+
is n/a: nothing here takes damage.
|
|
87
|
+
|
|
88
|
+
## Rules
|
|
89
|
+
|
|
90
|
+
- **Taps.** A press on the orb, Space, Enter or the pad's A makes the
|
|
91
|
+
tap's sparks: 1 (times the stardust's multiplier) plus 5 % of the rate.
|
|
92
|
+
- **Generators.** 1–4, a card's button, or the pad's X on the one the
|
|
93
|
+
d-pad (or the arrows) chose buys the next one at its price.
|
|
94
|
+
|
|
95
|
+
| Generator | Makes | First price |
|
|
96
|
+
|---|---|---|
|
|
97
|
+
| Ember | 0.5 a second | 15 |
|
|
98
|
+
| Storm | 4 a second | 110 |
|
|
99
|
+
| Crystal | 26 a second | 1,200 |
|
|
100
|
+
| Star | 160 a second | 13,000 |
|
|
101
|
+
|
|
102
|
+
Each one bought makes the next 15 % dearer; every tenth of a kind
|
|
103
|
+
doubles what that kind makes. A purchase the sparks cannot cover is
|
|
104
|
+
refused and costs nothing.
|
|
105
|
+
- **Supernova.** Stardust is the floor of the square root of the run's
|
|
106
|
+
sparks over 100,000 (one at 100,000, two at 400,000, three at 900,000…).
|
|
107
|
+
N, the pad's Y or the Supernova button asks; Collapse resets the sparks
|
|
108
|
+
and the generators, keeps the stardust, and shows the run's card.
|
|
109
|
+
- **Away.** On launch, the save's rate times half the seconds away (at most
|
|
110
|
+
eight hours) is added, with a welcome back.
|
|
111
|
+
|
|
112
|
+
Everything is deterministic: the clock is the fixed tick, the numbers are
|
|
113
|
+
pure functions, the stars come from an og.Rng stream forked by name, and
|
|
114
|
+
`tests/replay.og.ts` replays a run to the same hash.
|
|
115
|
+
|
|
116
|
+
## How it feels
|
|
117
|
+
|
|
118
|
+
| Moment | What happens | Where |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| a tap | the orb squashes 1.12 × 0.9 and flashes, `+n` rises from the tap (gold and bigger from the eighth quick tap), 12 sparks burst out, a bell climbing a quarter tone per quick tap | `Orb`, `Bursts`, `Voices` |
|
|
121
|
+
| a purchase | the rate it adds floats up from its ring in the generator's colour, a mote joins the ring, a bright bell | `purchase`, `Motes` |
|
|
122
|
+
| a refusal | the card shakes with the error sound | `hud` |
|
|
123
|
+
| a milestone | `Storm ×2!` over the orb, a ring of 48 sparks, a 0.06 punch, a burst from the card, an arpeggio | `purchase`, `hud` |
|
|
124
|
+
| the supernova | 200 sparks, a 10-tick hit stop, trauma 0.6, a 0.2 punch, a boom; an iris to the run's card | `nova`, `Ui` |
|
|
125
|
+
| idle | the orb breathes, sparks drift up off it, motes circle on four rings at their own speeds, stars twinkle | `Orb`, `Motes`, `fx/drift.ogt`, `fx/stars.ogt` |
|
|
126
|
+
|
|
127
|
+
## State
|
|
128
|
+
|
|
129
|
+
| Type | Kind | What it holds |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| `Game` | resource | the phase, the sparks (now, this run, ever), the generators owned, stardust and supernovas, the rate and the tap's value, the counts (taps, purchases, refusals), the chosen generator, the dialogs, the time away and its credit, the save's requests and revision, sound and burst requests |
|
|
132
|
+
| `Tuning` | resource | the knobs below |
|
|
133
|
+
| `Prefs` | resource | the volumes, the language, reduced motion, the settings request |
|
|
134
|
+
| `Orb` | the orb | its taps |
|
|
135
|
+
| `Mote` | the 48 motes | the generator and the place in its ring |
|
|
136
|
+
| `Burst` | the burst pools | the kind |
|
|
137
|
+
| `Sfx` | one row per sound | its `Sound.*` bit, its plays |
|
|
138
|
+
|
|
139
|
+
## Systems (in tick order)
|
|
140
|
+
|
|
141
|
+
| System | Job |
|
|
142
|
+
|---|---|
|
|
143
|
+
| `Ui` | the screens, the camera for the surface, the buses, the pause and the supernova's keys, the platform's answers, the save |
|
|
144
|
+
| `Orb` | taps (a press on the orb, Space, Enter, the pad's A), the orb's breath and squash |
|
|
145
|
+
| `Economy` | the generators' sparks, choosing and buying, refusals, milestones, the supernova |
|
|
146
|
+
| `Motes` | one mote per generator owned (twelve a kind at most) on its ring |
|
|
147
|
+
| `Bursts` | fires the burst asked for this tick from its pool |
|
|
148
|
+
| `Voices` | plays each requested sound once |
|
|
149
|
+
|
|
150
|
+
## Tunables (`Tuning`)
|
|
151
|
+
|
|
152
|
+
| Field | Default | What it changes |
|
|
153
|
+
|---|---|---|
|
|
154
|
+
| `emberRate`, `emberCost` … `starRate`, `starCost` | 0.5, 15; 4, 110; 26, 1,200; 160, 13,000 | each generator |
|
|
155
|
+
| `costGrowth` | 1.15 | how much dearer each one bought makes the next |
|
|
156
|
+
| `milestone` | 10 | every this many of a kind doubles it |
|
|
157
|
+
| `tapBase`, `tapShare` | 1, 0.05 | the tap: a base, plus seconds of the rate |
|
|
158
|
+
| `dustBonus`, `novaScale` | 0.1, 100,000 | stardust's worth, and the run sparks its first one needs |
|
|
159
|
+
| `offlineShare`, `offlineCap` | 0.5, 28,800 s | the time away's credit |
|
|
160
|
+
| `saveEvery` | 600 ticks | how often play saves |
|
|
161
|
+
|
|
162
|
+
## What a Maker changes first
|
|
163
|
+
|
|
164
|
+
1. **The curve**: the generators' numbers and `costGrowth` in `Tuning`;
|
|
165
|
+
`src/numbers.ts` is the whole economy.
|
|
166
|
+
2. **More generators**: a name in `GENERATORS`, its strings, an icon in
|
|
167
|
+
`ICONS` (src/ui.ts), a case in `base`, a mote in `tools/make-assets.py`,
|
|
168
|
+
an `owned<n>` field.
|
|
169
|
+
3. **Prestige**: `novaGain`, `dustMultiplier`.
|
|
170
|
+
4. **The look**: `assets/looks/idle.ogt` (named by `GameDesc.look`) holds
|
|
171
|
+
the frame's treatment and names the skin; `extends "<slug>"` there
|
|
172
|
+
starts from a style of the catalogue (og-taste §12), and the reference
|
|
173
|
+
frames are then recorded again (`OG_FX_CAPTURE=1 og test .`). The
|
|
174
|
+
skin's palette is `assets/skins/sparkorb/skin.ogt`, the art
|
|
175
|
+
`tools/make-assets.py`: `python3 tools/make-assets.py && og cook .`.
|
|
176
|
+
5. **Words and numbers**: `assets/strings/*.ogt` (a locale's `num.step`
|
|
177
|
+
and units make its big numbers); a new Chinese string needs the script
|
|
178
|
+
run again to subset the font.
|
|
179
|
+
|
|
180
|
+
## Commands (for scripts and agents)
|
|
181
|
+
|
|
182
|
+
| Action | Does |
|
|
183
|
+
|---|---|
|
|
184
|
+
| `play` | from the title to the orb, as Play does |
|
|
185
|
+
| `sparks:<n>` | sets the sparks (the rise counts as made this run) |
|
|
186
|
+
| `own:<generator 0-3>:<n>` | sets how many of a generator are owned |
|
|
187
|
+
| `supernova` | collapses now, as Collapse does (refused under one stardust) |
|
|
188
|
+
| `relaunch:<seconds>` | closes and reopens the game that much later in this process (for tests; a real launch reads the time away from the host's clock): the save read again, the time away credited |
|
|
189
|
+
| `stale_save` | another device writes a save with more progress |
|
|
190
|
+
| `viewport:<desktop\|phone>` | lays the UI out for a phone in portrait (390 × 844 at 3×) |
|
|
191
|
+
| `language:<en\|zh-CN>` | switches the language |
|
|
192
|
+
| core actions | `touch_move_to:play`, `Shop/Gen#0/Buy`…, `Nova/Supernova`, `Collapse`, `Later`, `Again`, `Collect`, `Pause`; `Space`, `Enter`, `1`–`4`, arrows, `B`, `N`, `Escape`; `gamepad:a` … |
|
|
193
|
+
|
|
194
|
+
`facts` (the probe's `state()`) reports the phase, the sparks, the rate,
|
|
195
|
+
the tap's value, the generators owned, stardust, supernovas, the run's and
|
|
196
|
+
the lifetime's sparks, taps, purchases, refusals, saves, stale writes, the
|
|
197
|
+
last time away's credit and the language. The playtests read the same
|
|
198
|
+
values from the `Game` resource with `get:Game`.
|
|
199
|
+
|
|
200
|
+
## Playtests (`og test .`)
|
|
201
|
+
|
|
202
|
+
| File | Proves |
|
|
203
|
+
|---|---|
|
|
204
|
+
| `tests/flow.og.ts` | Play; clicks on the orb, Space and Enter make a spark each and a click beside it none; 1 and the card's button buy embers at 15 and 18; the embers make a spark a second; a Star too dear is refused |
|
|
205
|
+
| `tests/milestone.og.ts` | the tenth Storm doubles storms (36 → 80 a second); the wallet reads `1.23M` |
|
|
206
|
+
| `tests/nova.og.ts` | N asks, Not yet keeps everything, Supernova and Collapse reset the run for one stardust, the card shows the run, Ignite again runs 10 % stronger; the telemetry and the save |
|
|
207
|
+
| `tests/offline.og.ts` | Escape saves; `relaunch:7200` reads it back with Continue on the title and a welcome back of 64.8K sparks for two hours at half of 18 a second; a stale write is merged, the other device's progress kept |
|
|
208
|
+
| `tests/away.og.ts` | two processes over one kept store (`store: "keep"`): ten embers and two storms saved by Escape at the first run's host time; the second launches two hours later by its own clock, offers Continue and welcomes back two hours at half of 18 a second, with no relaunch command |
|
|
209
|
+
| `tests/pause.og.ts` | Escape holds the orb (time scale 0); settings switch to 简体中文 and move the music; Done saves; numbers read `1.23亿` and `每秒 +2`; Resume; Quit writes the save on the title |
|
|
210
|
+
| `tests/pad.og.ts` | a gamepad alone plays, taps, chooses, buys, is refused, asks for and declines the supernova, pauses and resumes |
|
|
211
|
+
| `tests/phone.og.ts` | 390 × 844 at 3×: the wallet and Pause below the notch, the generators above the home bar with touch-sized buttons, taps on the orb, a card bought |
|
|
212
|
+
| `tests/frames.og.ts` | the title, the orb with every kind of mote and the supernova's card match `references/<tier>/` (`OG_FX_CAPTURE=1 og test .` records them) |
|
|
213
|
+
| `tests/replay.og.ts` | a run with taps, purchases and a milestone, run twice, ends on one hash |
|
|
214
|
+
|
|
215
|
+
Each one fails when the behaviour it names is broken (one was broken on
|
|
216
|
+
purpose and restored: `tests/evidence/P2/archetypes/break-and-restore.md`
|
|
217
|
+
in the engine repository).
|
|
218
|
+
|
|
219
|
+
## Assets
|
|
220
|
+
|
|
221
|
+
`tools/make-assets.py` regenerates every asset byte for byte (two runs
|
|
222
|
+
give the same bytes): the orb, the glow, the spark and the motes, the
|
|
223
|
+
emitters, the sounds and the music, the `og sfx` preset files of the UI's
|
|
224
|
+
sounds, the font subset and the skin's recoloured atlas. `LICENSES.md`
|
|
225
|
+
lists them; the skin's are in `assets/skins/sparkorb/LICENSES.md`.
|
|
226
|
+
|
|
227
|
+
## Known limits (engine gaps, not design)
|
|
228
|
+
|
|
229
|
+
- og.ui's `idleHud` writes `Lv` and `/s` and formats numbers in English of
|
|
230
|
+
its own, and fills a 340 px panel, so this game builds its HUD from
|
|
231
|
+
widgets to keep every word and number in its tables.
|
|
232
|
+
- og.ui's `counter` counts again from where it is on every change, so the
|
|
233
|
+
sparks, which change every tick, are a label; the counters show what
|
|
234
|
+
jumps (the stardust, the generators owned).
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type import
|
|
2
|
+
version 1
|
|
3
|
+
---
|
|
4
|
+
# Latin-1, CJK punctuation and every character of assets/strings/zh-CN.ogt (tools/make-assets.py).
|
|
5
|
+
font {
|
|
6
|
+
charset latin cjk-punct
|
|
7
|
+
chars "–…。一万下与个中串为之乐买了产亮亿会位体余你停全共再减出击分切制加动升单可后和唤器回坍夜大失始字完对将小少尘已应开得态总成提收效数文新时星晶暂暴本来果标格欢段每消火点烬照燃球生用的离秒空符等简簇继续缩置花获言设语购超轮辰迎返这进部都醒重量键间音题风!(),:;?"
|
|
8
|
+
em_px 32
|
|
9
|
+
px_range 4
|
|
10
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
https://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type particles
|
|
2
|
+
version 1
|
|
3
|
+
---
|
|
4
|
+
# Sparks drifting up off the orb's skin, always.
|
|
5
|
+
maxParticles 60
|
|
6
|
+
shape sphere 1.2
|
|
7
|
+
rate 14
|
|
8
|
+
lifetime 1.2 2.2
|
|
9
|
+
speed 0.2 0.6
|
|
10
|
+
size 0.06 0.14
|
|
11
|
+
sizeOverLife 0 0.4 0.3 1 1 0
|
|
12
|
+
colorOverLife {
|
|
13
|
+
key 0 1 0.85 0.5 0
|
|
14
|
+
key 0.2 1 0.75 0.35 0.9
|
|
15
|
+
key 1 1 0.4 0.15 0
|
|
16
|
+
}
|
|
17
|
+
gravity 0 0.6 0
|
|
18
|
+
noise 0.4 0.5 0.4
|
|
19
|
+
texture "sprites/spark.png"
|
|
20
|
+
blend additive
|
|
21
|
+
render sprite 2
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type particles
|
|
2
|
+
version 1
|
|
3
|
+
---
|
|
4
|
+
# A milestone: a ring of sparks flung out from the orb.
|
|
5
|
+
maxParticles 72
|
|
6
|
+
shape sphere 0.3
|
|
7
|
+
spread 180
|
|
8
|
+
burst 0 48
|
|
9
|
+
duration 0.1
|
|
10
|
+
lifetime 0.5 0.8
|
|
11
|
+
speed 3 4.5
|
|
12
|
+
size 0.12 0.24
|
|
13
|
+
sizeOverLife 0 1 1 0
|
|
14
|
+
colorOverLife {
|
|
15
|
+
key 0 1 1 0.85 1
|
|
16
|
+
key 1 1 0.55 0.2 0
|
|
17
|
+
}
|
|
18
|
+
drag 1.8
|
|
19
|
+
texture "sprites/spark.png"
|
|
20
|
+
blend additive
|
|
21
|
+
render sprite 21
|