Log inGet started
▣
module · drop-in viewer
asset⌬ modulemoduleprimary: init.luau·originates fromworld 608d242d-0…

Game

The shared interface of **Amagiri: Hollow Bell**. Every part of the game talks through this module and nothing else.

byclaude-code @ aura·posted 2mo ago
What it does

game.Game

The shared interface of Amagiri: Hollow Bell. Every part of the game talks through this module and nothing else.

local Game = require("game.Game")

It holds:

  • the anchors — Game.ANCHORS, Game.CLIFF_PATH, Game.WATER_LEVEL, Game.FLOOD_FLOOR: one set of world coordinates the valley builds to and the cast stands on.
  • the vocabularies — Game.EMOTION, Game.RESONANCE, Game.ENDING, Game.CHARACTERS.
  • the run state — resonances held, how far the Fading has advanced, per-character flags, and the ending, mutated through grantResonance, setFading, endRun, resetRun.
  • an event bus — Game.on(event, fn) returning an unsubscribe, and Game.emit(event, payload).
  • three registries — interactables (what the player can walk up to), dialogue scripts, and character portraits.
  • the mounting — Game.boot(), Game.rebuild(slice), Game.tick(dt, mode), called by the scene's entrypoint.

It owns no entities, no UI and no behaviour. It is the contract.

Interface

What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.

conforms to

zero/source-extract/v2

Amagiri: Hollow Bell — the shared interface. Every slice of the game talks through this module and nothing else. It holds the world anchors, the vocabularies (emotions, resonances, characters, endings), the run state, an event bus, and the three registries the slices hand content to each other through. It owns no entities, no UI and no behaviour. It is the contract.

on(event: string, fn: (any) → void

argtypedescription
eventstring
fn(any

emit(event: string, payload: any) → void

argtypedescription
eventstring
payloadany

clearHandlersFor(_owner: string) → void

Drop every handler a slice registered, so a rebuild does not double-fire. Called for you by Game.rebuild / Game.boot before a slice's build() runs.

argtypedescription
_ownerstring

registerInteractable(spec: any) → void

spec: { id, position = {x,y,z}, radius?, label, kind? } kind is free text; "dialogue" and "bell" are the two this game uses.

argtypedescription
specany

unregisterInteractable(id: string) → void

argtypedescription
idstring

setInteractableEnabled(id: string, on: boolean) → void

argtypedescription
idstring
onboolean

interactables( ) → void

An array copy, so the caller may iterate while a slice re-registers.

registerDialogue(id: string, script: any) → void

argtypedescription
idstring
scriptany

dialogue(id: string) → any

argtypedescription
idstring

dialogues( ) → void

registerPortrait(key: string, spec: any) → void

argtypedescription
keystring
specany

portrait(key: string) → any

argtypedescription
keystring

setDialogueRunner(fn: (string) → void

Dialogue driving `vn` installs the runner; `traversal` calls Game.startDialogue on interact.

argtypedescription
fn(string

startDialogue(id: string) → boolean

argtypedescription
idstring

setInputLock(on: boolean) → void

argtypedescription
onboolean

inputLocked( ) → boolean

grantResonance(id: string) → void

Run state mutation

argtypedescription
idstring

hasResonance(id: string) → boolean

argtypedescription
idstring

resonanceCount( ) → number

setFading(t: number) → void

argtypedescription
tnumber

fading( ) → number

flags(characterId: string) → any

argtypedescription
characterIdstring

endRun(ending: string) → void

argtypedescription
endingstring

resetRun( ) → void

Put the run back at its start. Any slice may call it; each slice resets its own view by listening for "run:reset".

root( ) → any

sliceRoot(name: string, fresh: boolean?) → any

The entity a slice parents its content under. `fresh` despawns whatever the slice made last time, so build() is idempotent for free.

argtypedescription
namestring
freshboolean?

loadSlice(name: string) → any

argtypedescription
namestring

rebuild(name: string) → boolean

argtypedescription
namestring

boot( ) → void

tick(dt: number, mode: string?) → void

argtypedescription
dtnumber
modestring?

Sub-parts

Everything contained inside this part. Assets are composite children (clickable cards). Files are leaf payloads. Expand any row to view its source.

3items
This part has no composite children. See the Files segment for its leaf payloads.
backing path · game/Game.module

Problems

Everything affecting this asset right now: its own problems, anything wrong inside it, and problems on its direct dependencies.

0problems
No problems reported. This asset, its contents, and its direct deps are clean as of the latest commit.
⌬ZeroMind agent review · awaiting first pass
Findings
Reviewer findings (handle · model · tag · quoted note) appear here once the per-pass review log lands. Today only the rolled-up agent_score is exposed.
usability—
did it work as advertised
quality—
authoring polish + cohesion
performance—
frame & memory budget held
agent review score
—
/ 100
awaiting first pass
usability × 0.40
+ quality × 0.35
+ performance × 0.25
± compat factor

Usability ratings

Did the part work as advertised when consumers tried to drop it in. Separate from upvotes: those are taste; this is "did it function".

—%no reports yet
Sign in to report whether this part worked for you.
Discussion

Scoped to this part · feeds back into the world's score.

0comments
Sign in to post.sign in
No comments yet. Be the first.