KCDS 0.4.1

Milestone 0.4.1: board and card games at a table, haggling with server shops, the level's people talking and going home at night, and fixes for horses, getting up and combat.

Servers and players both need 0.4.1: a client and a server of different versions refuse each other when joining. The launcher updates itself on the next start; servers update from their update channel or the new packages. Scripts written for 0.4.0 run as they are.

Tabletop games

  • Tables (#840): kcds.world.Tabletop puts a board of rows and columns in the world, with pieces on its cells, seats and a turn order with its timer. You write only the game's rules. Players sit down with U, point at a cell and click; their game only sends the click and your handlers decide, so nobody can cheat. With a camera shot of the table's or the seat's, the view stays on the board and the mouse pointer picks, as the game's dice players do; while seated the game's fighting is held off. controls sets the pointer (cursor, crosshair or keys) and the actions held off. highlight marks cells flat on the board as a frame, a tinted cell or a dot. Pieces move smoothly, and everyone, players who join later included, sees the same board. save() and load() keep a game across restarts. The Tabletop guide builds tic-tac-toe and checkers.
  • Limited look (#966): Player.playAnimation's lockRotation takes { yaw, up, down }, how far the seated player's view turns, in degrees. The view begins facing where the body faces, so a player at a board looks at it. Camera.startShot takes a look of the same kind: the mouse turns the shot's view, as the game's dice players look about their table.
  • Chair seats (#966): a Tabletop seat with chair: true is the game's own chair or bench there. Players sit on it with the game's E and its walk up and sit-down, and the table seats them.
  • Controls.cursorPosition() (client): where the mouse pointer is while your resource shows it, as Camera.rayFromScreen takes a screen position.

Shops

  • Haggling with server shops (#965): Vendor.create({ haggle }) makes a shop haggle in the game's own haggle with its NPC. The player chooses a price on the haggle panel, and the trader answers in a dialogue with its price and mood. The server decides every answer: a new vendorHaggle(vendor, player, basket, offered) handler can take the offer, ask another price or refuse. Without an answer, the shop follows the game's own rule, made fair for multiplayer: the player's Speech, a tolerance it never goes below and the rounds it listens to. A basket agreed in the haggle settles at the agreed price. See Shops and player trade.
  • vendorTrade reports a haggle: a sixth argument, haggled, is true when the basket settled at the agreed price. The guide now spells out the lines of bought and sold, and that balance is the money the player got (negative: what they paid); the reference had the sign the wrong way round.

NPCs

  • Lines the level's people say (#259): now and then one of the level's people near a player says a line to them in the game's speech bubble, the same for every player there. The lines are yours, in people-lines.json in the resources folder: general ones and ones per name, with {player} for the player's nickname, how often and how near. The game's own people (levelPeople) keep their own barks as well. See NPCs.
  • Where the level's people spend the night (#260): npcHouses in server.json. true, the default, keeps their houses: the game's own people go home at night by their routines. false: at night they walk out of the map to the nearest of the level's road exits and come back in the morning, on both maps. people-night.json sets the hours. See NPCs.

Inventories

  • Another player's inventory (#967): Stash.playerInventory(player, { put }) opens a connected player's own inventory to another player, from anywhere, in the game's own transfer screen: for admins and the like. What the viewer takes leaves the player, worn armour, clothes and weapons too, and with put: true the viewer can give them things. playerInventoryTake and playerInventoryGive can refuse each move. See Stashes.

Horses

  • Thrown riders (#968): when Horse.buckRider throws a rider, the other players now see them fly off and fall as the rider does, instead of sliding off over the horse's neck.
  • Getting up (#970): a player who gets up from the ground after a fall or a knock-out now rolls over and stands up the same way on everyone's screen, facing where they do, instead of spinning round on the ground with the legs in the air.
  • Horses at rest (#969): a horse standing idle grazes, looks round and shakes its head at the same moment on everyone's screen; it no longer drifts out of step with its owner's game.

Combat

  • Women players are lock-on targets: a player locks on to a woman player in a fight, with fists too, as to a man. The game's own women are still never fought.

Conversations

  • Keys of a server conversation's list: E picks a row again when the NPC has a World.addInteraction prompt (its prompt took the press), and the arrow keys move one row, the right way, as W and S do (a press counted twice).