Inspecting kind/parlour · the kinds · the language · the modules
{name}
- id
- kind/parlour
- called
- {name}
- kind chain
- kind/parlour → kind/station → kind/room → record
- owner
- the town
- made by
- the town
- version
- 5
- pin
- kolaj-hasar
- state
- 4006 bytes
Its spells
To cast them, come in.
Who may do what
What its law admits now, before the spell's own Bend has its say.
| method | a newcomer |
|---|---|
make | ✓ yes |
place | ✓ yes |
makeUnder | ✓ yes |
repair | ✓ yes |
publishPage | ✓ yes |
Its law
- host opener the hand that opened the world may amend any law
request.kind == 2 and request.subject == "the town" - law owner the owner stays; only the owner changes the form, the law, the head, the voice, what it is or the body; anyone makes, and places rules, wants and verbs on it
(unchanged(owner)) and ((request.subject == new.owner) or ((((((((request.kind == 0) or (request.kind == 4)) and (unchanged(form))) and (unchanged(law))) and (unchanged(head))) and (unchanged(voice))) and (unchanged(about))) and (unchanged(body)))) - law kind kinds's law holds
under "kinds"
Its Bend
what it runs: its entry module 18 lines
layer over ./Kind.obend
edition ObjectiveBend 1
import ./Abi.obend as Abi
import ./List.obend as Lists
import ./Form.obend as Form
import ./Rows.obend as Rows
type State = Super.State
form make:
name: text 1..64
spween: text 0..16384
def make(state: State, input: MakeInput, context: Abi.Context) -> Activity<Super.Done>:
Super.making(state, Lists.List.cons({head: {name: "name", value: input.name}, tail: Lists.List.cons({head: {name: "spween", value: input.spween}, tail: Lists.List.nil()})}), "", context)
form place:
name: text 1..64
spween: text 0..16384
id: text 1..64
def place(state: State, input: PlaceInput, context: Abi.Context) -> Activity<Super.Done>:
Super.making(state, Lists.List.cons({head: {name: "name", value: input.name}, tail: Lists.List.cons({head: {name: "spween", value: input.spween}, tail: Lists.List.cons({head: {name: "id", value: input.id}, tail: Lists.List.nil()})})}), "", context)
the body this kind lays on what it makes 41 lines
Each thing of this kind runs this layer over what the kind is of.
Amend it in the workshop
Its Bend is checked and amended by the workshop's own spell, with the Bend in its block. To send it, come in; the box is here then.
Its fields
- owner
- the town
- ownerHandle
- the town
- name
- parlour
- of
- kind/station
- form
name: text 1..64 (38 characters)
name: text 1..64 spween: text 0..16384
- law
law below "kind/station's law holds": under "kind/station" (59 characters)
law below "kind/station's law holds": under "kind/station"
- head
- {name}
- voice
- two candles, one window cracked; the wax drips; the window glass ticks as it cools; the clock in the hall stopped, or nobody hears it
- about
a parlour off the night hall: two candles, a cracked window, a ouija board the hands here spell on t (166 characters)
a parlour off the night hall: two candles, a cracked window, a ouija board the hands here spell on together, stairs nobody counts the same twice; after yla.delve.town
- body
layer over ./Record.obend (3411 characters)
layer over ./Record.obend edition ObjectiveBend 1 import ./Abi.obend as Abi import ./List.obend as Lists import ./Document.obend as Document import ./Form.obend as Form import ./Plan.obend as Plans import ./World.obend as World import ./Card.obend as Card import ./Relation.obend as Relations import ./Rows.obend as Rows import ./Text.obend as Text import ./Scenes.obend as Scenes # The parlour's body, over the station's (`kind/parlour`, of kind/station: a room that keeps no time, its scene # stitched a wing a turn; yla.delve.town's séance of 2026-10-13): its board is its # planchette (`<parlour>/planchette`, kind/planchette), and what the hands at it have spelled together is read into the # scene whenever a card is shown and never kept, as the station reads its DJ's song: `spelled`, the planchette's own # moves oldest first, and `leaning`, each hand's newest nudge since it last moved. The scene's prose is yla's # (world/bodies/parlour.spween); the board's answers are only what the hands spell. type State = Super.State def seen(state: State, context: Abi.Context) -> Activity<Super.Seen>: match world.viewField::<Relations.Relation<Rows.Line>>({object: {world: context.world, object: "{context.object}/planchette"}, field: "lines"}): case viewed(v): Super.seen(extend(state, {vars: Lists.concat(state.vars, board(Lists.reverse(Relations.order(v.state, fn(l: Rows.Line) -> Nat: l.n)), "@{context.object}/planchette"))}), context) case _: Super.seen(state, context) def board(lines: Lists.List<Rows.Line>, it: String) -> Lists.List<Scenes.Var>: Lists.filter(Lists.append(Lists.append(Lists.List.nil(), {name: "spelled", value: textJoin(Lists.reverse(Lists.take(Lists.map(Lists.filter(lines, fn(l: Rows.Line) -> Bool: moved(l, it)), fn(l: Rows.Line) -> String: l.text), 24n)), " ")}), {name: "leaning", value: textJoin(Lists.map(leaningsOf(sinceMoved(lines, it)), fn(l: Rows.Line) -> String: l.text), ", ")}), fn(v: Scenes.Var) -> Bool: v.value != "") # The planchette's own moves (planchette.obend `isMove`), and its hands' nudges since the newest. def moved(l: Rows.Line, it: String) -> Bool: l.author == it && (l.verb == "moved" || l.verb == "drifted" || l.verb == "away" || l.verb == "last") def sinceMoved(lines: Lists.List<Rows.Line>, it: String) -> Lists.List<Rows.Line>: match lines: case nil(_): lines case cons(c): if moved(c.head, it) then Lists.List.nil() else if c.head.verb == "nudge" then Lists.List.cons({head: c.head, tail: sinceMoved(c.tail, it)}) else sinceMoved(c.tail, it) def leaningsOf(lines: Lists.List<Rows.Line>) -> Lists.List<Rows.Line>: match lines: case nil(_): lines case cons(c): Lists.List.cons({head: c.head, tail: leaningsOf(Lists.filter(c.tail, fn(l: Rows.Line) -> Bool: l.author != c.head.author))}) # One who comes back is told what was said here since, as the station tells it, in the parlour's words. def awayLines(state: State, since: Nat, changes: Lists.List<World.Change>, context: Abi.Context) -> Document.Document: let written = Lists.map(Lists.filter(Lists.reverse(Relations.order(state.lines, fn(l: Rows.Line) -> Nat: l.n)), fn(l: Rows.Line) -> Bool: l.at > since && l.author != context.principal), fn(l: Rows.Line) -> String: "{Card.shown(l.author, l.handle, context)}: {Super.clip(l.text)}\n") Document.text("You were away; the clock in the hall did not say how long.\n{textJoin(Lists.take(written, 3n), \"\")}\n")- made
1 rows
- object
- station/parlour
- n
- 1
- about
- empty
- count
- 1