A complete game shell built on Luna + the CupkekGames sibling packages — main menu, in-game shell with persistent top-bar (currency + XP/level chips, AutoSave HUD, action dock), modal views (Inventory, Save/Load, Settings, Pause, Tutorial, Notifications, Speech Bubble, Visual Novel), drop-table-driven loot, RPG stats, Ink dialogue, settings panel with input rebinding.
This is the "what does a real Luna game look like?" demo. Heavier than Showcase — it requires the full CupkekGames sibling-package set installed via the Package Manager window.
Lives at Samples~/GameFull/ in com.cupkekgames.luna.
Three-step path after importing Luna from the Asset Store:
Window > Package Manager > In Project > LunaUI > Samples. GameFull's UXML references Essentials sample assets (theme, fonts, Panel Settings, prefab LunaUIManager.prefab, UXML primitives, audio) via sibling-relative paths, so both samples must land as siblings under Assets/Samples/LunaUI/<version>/.Tools > CupkekGames > Package Manager. The window auto-opens on first project load if any sibling packages are missing. Click Install GameFull Packages — it adds the CupkekGames UPM scoped registry (https://www.docs.cupkek.games/upm) to your Packages/manifest.json and installs the required CupkekGames sibling packages atomically (one manifest write, one domain reload).00_LunaUIDemoFullInitialization.unity (at the GameFull sample root, sorts first) and press Play. The Sequencer boots service registrations, then loads the main menu, then the in-game shell.The Tools > CupkekGames > LunaUI Panel window auto-opens on sample import and provides per-sample setup helpers (scene wiring, Unity dep checks, troubleshooting).
All domain CupkekGames sibling packages, plus the Luna package itself (with its foundation deps bundled transitively):
| Required | Where it ships |
|---|---|
Foundation primitives (singletons, pool, fadeables, keyvaluedatabases, prefabloaders, assetfinder, editorui, editorinspector, packagemanager, input) | bundled with Luna (transitive deps) |
com.cupkekgames.luna | Asset Store |
com.cupkekgames.services | UPM scoped registry (Package Manager) |
com.cupkekgames.data | UPM scoped registry |
com.cupkekgames.resources | UPM scoped registry — Wallet + ExperienceTracker live here |
com.cupkekgames.gamesave + com.cupkekgames.gamesave.luna | UPM scoped registry — save manager + AutoSaveView |
com.cupkekgames.newtonsoft | UPM scoped registry — JSON adapter |
com.cupkekgames.rpgstats | UPM scoped registry |
com.cupkekgames.inventory | UPM scoped registry |
com.cupkekgames.addressableassets | UPM scoped registry |
com.cupkekgames.scenemanagement | UPM scoped registry |
com.cupkekgames.sequencer | UPM scoped registry |
com.cupkekgames.settings | UPM scoped registry |
com.cupkekgames.inkbridge | UPM scoped registry |
Plus Unity registry packages: com.unity.nuget.newtonsoft-json, com.unity.localization, com.unity.addressables, com.unity.inputsystem. The LunaUI Panel's GameFull section flags any of these that are missing.
| Order | Scene | What it does |
|---|---|---|
| 1 | 00_LunaUIDemoFullInitialization.unity (sample root) | Boot scene. Runs the Sequencer to register services + load the next scene. Sorts first in the Hierarchy so build settings pick it up. |
| 2 | Scenes/01_LunaUIDemoFullMainMenu.unity | Main menu — Continue, New Game, Load, Credits, Settings, Quit. |
| 3 | Scenes/02_LunaUIDemoFullBase.unity | In-game shell — hosts the persistent GameShell prefab. |
The PrefabsUI/GameShell.prefab is the load-bearing piece for the in-game experience. It composes:
UXML/Shared/GameTopBar.uxml) — chips bound reactively to save data. Gold + Gem chips listen to Wallet.OnChanged; level chip + XP bar listen to ExperienceTracker.OnExperienceChanged / OnLevelUp — both via Scripts/UI/ResourceChipBinder.cs. Updates animate (count-up tween, level-up burst).UIPrefabLoaderString (Scripts/UI/GameShellView.cs): Inventory, SaveLoad, Settings, Pause, TutorialModal, VisualNovel, SpeechBubble, Notification.ScriptableObjects/Items/Droptable/DropTable.asset, routes the resulting DropResult list through Scripts/Loot/DropResultRouter.cs (splits by CatalogKey.Catalog into currency / experience / items), applies each via Wallet.Add / ExperienceTracker.AddExp / Inventory.AddItem, fires notifications, and triggers autosave. Implementation in Scripts/Loot/LootCardController.cs.AutoSaveView (from com.cupkekgames.gamesave.luna) subscribes to GameSaveEvents.AutosaveStart / AutosaveComplete and animates a RadialLoading indicator in the corner.GameFull/
├── README.md
├── IMPROVEMENT_PLAN.md ← remaining work (effect passes)
├── CupkekGames.Luna.Demo.Game.Full.asmdef
├── 00_LunaUIDemoFullInitialization.unity ← boot scene (sample root, sorts first)
├── Scenes/
│ ├── 01_LunaUIDemoFullMainMenu.unity
│ └── 02_LunaUIDemoFullBase.unity
├── Scripts/
│ ├── GamePrefabs.cs ← scene-lifecycle prefab spawner
│ ├── Inventory/ ← LunaInventoryDragDefaults, tooltip helpers
│ ├── Loot/ ← DropResultRouter, LootCardController
│ ├── SaveSystem/ ← GameFullSaveData (+ SO + Metadata + Manager + SerializationTypesSO)
│ ├── UI/ ← Game-specific UI controllers
│ │ ├── GameShellView.cs ← action-dock controller for the persistent shell
│ │ ├── ResourceChipBinder.cs ← reactive top-bar binding (Wallet + ExperienceTracker)
│ │ ├── MainMenuViewExample.cs, PauseMenuViewExample.cs
│ │ ├── EquipmentViewPagination.cs, GameSaveViewListExample.cs
│ │ ├── NotificationHistoryViewExample.cs
│ │ ├── SpeechBubbleExample.cs, TutorialModalExample.cs, VisualNovelExample.cs
│ │ └── SceneTransition/ ← circle + fade scene-transition presets
│ └── UI.Generic/ ← nested asmdef (NotificationView, Pause helpers — UI bridges that don't need GameSave)
├── ScriptableObjects/
│ ├── GameFullSaveDataSO.asset, GameFullSaveManager.asset
│ ├── Items/ ← inventory items + categories + droptable + database + data provider
│ ├── Resources/ ← Currencies (Gold, Gem catalog) + Experiences (Hero catalog + curves)
│ ├── RPGStats/ ← attributes, modifiers, data provider
│ ├── Sequencer/ ← startup sequences (service registration, scene load)
│ ├── Serialization/ ← Newtonsoft JSON service registry + serialization manager registrar + types SO
│ └── Settings/SettingsCurrent + SettingsDefault
├── PrefabsUI/ ← GameShell, Pause, Credits, SpeechBubble, TutorialModal, VisualNovel, Inventory, SaveLoad, Settings, Notification, PauseMenuEscapeAction
├── UXML/
│ ├── GameShell.uxml + .uss ← persistent shell layout
│ ├── MainGameFull.uxml + Main.uss ← main menu
│ ├── SettingsGameFull.uxml + .uss ← settings panel
│ ├── Components/ ← ChoicePopup
│ └── Shared/ ← GameTopBar.uxml + .uss + GameTokens.uss (design tokens)
├── Fonts/ ← DelaGothicOne SDF (for Japanese localization)
├── Setup/Localization/ ← LocalizationTheme.tss + PanelSettings (Japanese rendering)
├── Audio/ ← demo audio
└── URP/ ← render-pipeline configsGameFull is the place to see the full save loop driven by Newtonsoft JSON:
Scripts/SaveSystem/GameFullSaveData.cs — the save payload. Holds Wallet (currencies) + ExperienceTracker (XP/level tracks) from com.cupkekgames.resources, plus inventory, RPG stats, settings.ScriptableObjects/Serialization/GameFull Serialization Types SO.asset — registers every type that needs polymorphic deserialization (save metadata, save data, all IItemFeature / IUnitFeature implementations).ScriptableObjects/Serialization/GameFull Serialization Manager Registrar.asset — wires the serializer into the Service Locator at startup.ScriptableObjects/Serialization/GameFull Service Registry Newtonsoft.asset — registers the Newtonsoft adapter as the active IDataSerializer.Autosaves raise GameSaveEvents.AutosaveStart / AutosaveComplete which AutoSaveView listens to for the HUD animation.
MainGameFull.uxml and SettingsGameFull.uxml still carry LocalizedString bindings to a deleted asset table. The Japanese font and theme survived under Fonts/ + Setup/Localization/; the locale assets + string tables did not. Pending repair.Samples~/GameFull/IMPROVEMENT_PLAN.md Parts 1 + 2.Settings
Theme
Light
Contrast
Material
Dark
Dim
Material Dark
System
Sidebar(Light & Contrast only)
Font Family
DM Sans
Wix
Inclusive Sans
AR One Sans
Direction