hollow
<!-- zero:scaffolded-readme --> <!-- Replace the line below with what this module provides and who consumes it, then delete both comment lines. -->
hollow
<!-- zero:scaffolded-readme --> <!-- Replace the line below with what this module provides and who consumes it, then delete both comment lines. -->TODO: describe this module.
Interface
What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.
conforms to
zero/source-extract/v2hollow.module — the spine of HOLLOWBELL. Every slice requires this and reaches the others only through it: the constants the game is tuned by, the run state, the event bus, the damage router, the sound and speech hooks, and the systems registry the scene's entrypoint boots from. Slices register into it; nothing here knows a slice by anything but the names in SYSTEMS. local Hollow = require("game.hollow")
freshHero( ) → void
on(name: string, fn: ?) → void
| arg | type | description |
|---|---|---|
| name | string | |
| fn | ? |
emit(name: string, ...: ?) → void
| arg | type | description |
|---|---|---|
| name | string | |
| ... | ? |
clear(name: string?) → void
| arg | type | description |
|---|---|---|
| name | string? |
setPhase(phase: string) → void
Phases.
| arg | type | description |
|---|---|---|
| phase | string |
resetRun( ) → void
Called by whatever owns the title card when the player chooses to play. The staging slice takes the opening from here; without one the Director goes straight to play. Put the run back to its first frame: a full-health Lamplighter with nothing in his pockets, both gates shut, no chamber cleared and the Bellwarden asleep. Every slice hears "restart" and returns to its own start state.
start( ) → void
beginPlay( ) → void
pause( ) → void
resume( ) → void
restart( ) → void
tick(dt: number) → void
Advance the run one frame. The Director calls this from its update.
| arg | type | description |
|---|---|---|
| dt | number |
heroStat(stat: string) → number
Hero stats with relics applied.
| arg | type | description |
|---|---|---|
| stat | string |
equipRelic(relic: ?) → void
| arg | type | description |
|---|---|---|
| relic | ? |
set(ent: ?) → void
| arg | type | description |
|---|---|---|
| ent | ? |
entity( ) → void
position( ) → void
registerDamageable(id: string, handler: ?) → void
| arg | type | description |
|---|---|---|
| id | string | |
| handler | ? |
unregisterDamageable(id: string) → void
| arg | type | description |
|---|---|---|
| id | string |
damageable(id: string) → void
| arg | type | description |
|---|---|---|
| id | string |
damage(id: string, amount: number, opts: ?) → void
Returns the target's hp after the hit, or nil when nothing registered for that id. opts: { kind = "strike"|"cleave"|"flare"|"swing"|..., source = entityId, position = vec3, knockback = number }
| arg | type | description |
|---|---|---|
| id | string | |
| amount | number | |
| opts | ? |
enemiesNear(point: ?, radius: number) → void
Every registered non-hero within radius of a point, nearest first.
| arg | type | description |
|---|---|---|
| point | ? | |
| radius | number |
enemyCount( ) → number
hurtHero(amount: number, opts: ?) → void
| arg | type | description |
|---|---|---|
| amount | number | |
| opts | ? |
healHero(amount: number) → void
| arg | type | description |
|---|---|---|
| amount | number |
chamberAt(z: number) → void
Chambers and gates. The enemies slice calls chamberCleared when a chamber's last wave is dead; the Director opens the gate.
| arg | type | description |
|---|---|---|
| z | number |
chamberCleared(index: number) → void
| arg | type | description |
|---|---|---|
| index | number |
enterChamber(index: number) → void
| arg | type | description |
|---|---|---|
| index | number |
bossDied(position: ?) → void
| arg | type | description |
|---|---|---|
| position | ? |
setProvider(fn: ?) → void
| arg | type | description |
|---|---|---|
| fn | ? |
register(name: string, clip: ?) → void
A slice that made its own clip registers it under the name it plays it by; the provider plays from this table before its own library. `clip` is an AssetRef<soundClip> or the clip's identity string.
| arg | type | description |
|---|---|---|
| name | string | |
| clip | ? |
shake(strength: number, seconds: number) → void
A camera shake anyone may ask for; the staging slice answers it.
| arg | type | description |
|---|---|---|
| strength | number | |
| seconds | number |
play(name: string, opts: ?) → void
opts: { position = vec3?, volume = number?, pitch = number? }
| arg | type | description |
|---|---|---|
| name | string | |
| opts | ? |
say(key: string) → void
| arg | type | description |
|---|---|---|
| key | string |
anchor(key: string) → void
Anchors and asset presence.
| arg | type | description |
|---|---|---|
| key | string |
anchorPosition(key: string) → void
| arg | type | description |
|---|---|---|
| key | string |
assetExists(kind: string, identity: string) → boolean
Whether an asset of a kind exists in this world, by identity ("hero.Lamplighter").
| arg | type | description |
|---|---|---|
| kind | string | |
| identity | string |
boot(mode: string) → void
| arg | type | description |
|---|---|---|
| mode | string |
shutdown( ) → void
bindLocalPlayer(player: ?) → void
The local player's body: swap in the Lamplighter avatar when the hero-asset slice has shipped it, put the hero controller on it when the hero slice has, point the camera at it, and announce it.
| arg | type | description |
|---|---|---|
| player | ? |
applyCamera( ) → boolean
Put Hollow.CAMERA onto the live gameplay camera. The rig's behavior is instantiated fresh for every player, so its tuning lives here and is applied when the player binds; the staging slice calls this again after changing Hollow.CAMERA or after handing the camera back from a cinematic behavior.
Sub-parts
Everything contained inside this part. Assets are composite children (clickable cards). Files are leaf payloads. Expand any row to view its source.
Problems
Everything affecting this asset right now: its own problems, anything wrong inside it, and problems on its direct dependencies.
agent_score is exposed.+ 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".
Scoped to this part · feeds back into the world's score.