Sharpee
Chord / Standard Library / Manipulation / pushing, pulling, touching

pushing, pulling, touching

push (pushing) covers the verbs push, press, shove, move, each with or without a direction (push X north, shove X east, move X up). Needs the pushable trait; pushing anything else gets fixed_in_place (scenery) or pushing_does_nothing. With no direction the push is a press: if the thing is also switchable, pushing toggles it (button_clicks when it is a button, switch_toggled otherwise), and anything else just takes the push (button_pushed) and lets its on the player pushing clause say what happened. With a direction the push moves the thing through the room's exit into the next room, with the player, when the way admits pushing (ADR-378): admits pushing on the exit line or the room's admits: list for any pushable thing, or the thing's own pushing block of room pairs for that one thing. The player's own step is the going action's, so every refusal going knows refuses the push in going's words — no exit, a hidden way, the room's blocked phrase, a closed or locked door, a vehicle the player is riding — and both on the player pushing on the thing and on the player going on the room fire. A way that exists but does not admit pushing refuses cannot_push_that_way; a carried thing refuses carrying_it. On success pushed_direction prints, then the new room's description with the thing in it. The trait carries no fields: the thing says it can be pushed, the way says whether a push moves it.

pull (pulling) covers the verbs pull, drag, yank, tug. Needs pullable. A successful pull sets the trait's state to pulled (a second pull refuses already_pulled) and bumps its pullCount; a worn item refuses worn. Everything a pull means (the lever opens the sluice) is story logic reacting to pulled or written as an on the player pulling / after the player pulling clause.

touch (touching) covers the verbs touch, feel, rub, pat, stroke, poke, prod. No trait needed, no state changed; the reply is inferred from what the thing is: a lit light source feels_hot, a running device feels_warm (or device_vibrating), wearables feels_soft, doors feels_smooth, containers and supporters feels_hard (a container with drink in it sloshes, liquid_container), drinkables feels_wet, scenery immovable_object. Otherwise the verb itself answers (poked, patted, stroked, touched_gently, touched).

The author writes:

create the Signal Box
  a room

  A cramped cabin of levers and brass above the junction.

create the signal lever
  aka lever
  a thing, pullable
  scenery
  in the Signal Box

  A tall iron lever, worn bright at the grip.

  after the player pulling
    phrase lever-thrown
  end after

  phrase lever-thrown:
    Somewhere down the line, the semaphore arm clanks to clear.

create the brass button
  aka button
  a thing, pushable
  scenery
  in the Signal Box

  A brass button labelled BELL.

create the iron stove
  aka stove
  a thing, scenery
  in the Signal Box

  A squat iron stove, cold since spring.

create the stationmaster's cap
  aka cap
  a thing, wearable
  in the Signal Box

  A red wool cap with a shiny peak.

create Alex
  a person
  playable
  starts in the Signal Box

before the game starts
  change the player to Alex
end before

The player sees:

> push the stove
The iron stove is fixed in place.

> move the button north
You push the brass button.

> pull the lever
You pull the signal lever.

Somewhere down the line, the semaphore arm clanks to clear.

> pull the lever
The signal lever has already been pulled.

> touch the cap
The stationmaster's cap feels soft.

> touch the stove
The iron stove is solid and immovable.

The platform owns everything stateful here (the scenery refusal, the button push under move's manipulation channel, the already_pulled gate, the wool and iron inferences), and the one line that changes anything beyond the signal box is the story's after the player pulling reaction.

push (pushing-*)pull (pulling-*)touch (touching-*)
Refusalsno_target · fixed_in_place · pushing_does_nothing · cannot_push_that_way (the way does not admit pushing) · carrying_it · wearing_it · going's own lines for the step (no_exit_that_way, door_closed, door_locked, movement_blocked, vehicle_ride)no_target · cant_pull_that · already_pulled · wornno_target (touch refuses almost nothing)
Successbutton_pushed · button_clicks · switch_toggled · pushed_direction (then the new room's description)pulled · nothing_happensfeels_hot · feels_warm · device_vibrating · feels_soft · feels_smooth · feels_hard · liquid_container · feels_wet · feels_normal · immovable_object · touched · touched_gently · poked · prodded · patted · stroked
Eventspushedpulledtouched / touch_blocked

Interceptors: on/after the player pushing, pulling it, touching it on the target. Touching, with no state of its own, is a favorite probe to hang flavor on (on the player touching). Listening plays the same role for sound.