KCDS 0.3.3

Milestone 0.3.3: web views, events, animations and world features for servers with large resource sets, an audit of resource stops and restarts, and a long two-player soak.

Servers and players both need 0.3.3: 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.

Web views

  • Files over 48 kB served from a resource (kcds://resources/...) load: the game receives them in parts (#490).
  • kcds:// URLs with ?query or #hash are accepted (#492).
  • Web.focus right after Web.open gives the page the keyboard once the browser exists (#491).
  • <select> dropdowns and other popups of a page are drawn (#493).
  • A page always reports a failed load: a file the resource runtime does not answer within 30 seconds ends the load with webViewFailed instead of leaving the page waiting with no event (#494).

Events and resources

  • A payload that is not JSON arrives as that string instead of being dropped (#497).
  • playerResourcesReady(player) on the server once a player's client resources run (#496).
  • Runtime.serverDir: the server's own folder, for data that must survive a redeploy of the resource (#508).
  • World.level and the level's areas are ready in resourceStart (#507).
  • A stopped or restarted resource removes everything it spawned, as documented: props, effects, ground items, chests and virtual stock, carts, areas, blips, markers, patrol routes and siege objects (they used to stay, and a restart could not create a named patrol route again; #123).
  • player.learnRecipe of a recipe that no perk teaches (a row added by a recipe table patch) returns false instead of throwing.
  • The events guide lists every event a handler can refuse, and that only a synchronous false refuses (#120).

Animations, NPCs and props

  • NPCs play the game's animation fragments with tags, as players do: npc.playAnimation('Greetings', { tags: 'bowBig' }), looped with loop: true, reported by npcAnimationEnd; LocalNpc.playAnimation too (#498).
  • Animation props accept names from Animations.props(), and model paths work with or without objects/ and .cgf (#500).
  • Props move (position, rotation, setPose) and can be shown to some players only (showOnlyTo) (#505).
  • Client scripts have Vfx: effects in the player's own game only (spawn, burst, burstFrom) (#510).

Camera and world

  • Camera.startShot({ ease: false }) moves at one speed, so chained shots run on without stopping (#502).
  • NoClip look: 'rightButton' turns the free camera only while the right mouse button is held, so a focused page keeps the pointer (#503).
  • The level's houses (AreaUnion) are areas too: one area entered from any of its rooms, with its member areas (#506).

Game client

  • Alt+F4 and the window's close button quit the game as the menu's Quit does (#509).
  • An unsupported game version is reported as such when joining, instead of as an internal error (#124).

SDK types

  • Typed Events.on/once/off per event, typed event parameters, handles that extend Entity, and more exact fields (#511).
  • shared.d.ts declares KeyHandler, WebEventHandler, ActionHintHandler and the NativeUI handler types, used by Key.bind, Web.on/off, ActionHint.create and the NativeUI on() methods (#119, #511).

Not in this release

  • Level chests as stashes (#504), animation-driven props (#499) and the hand props of the animation catalog (#501) move to 0.3.4.
  • Lights, smart objects, scripted doors, prop physics, custom buff and recipe definitions and more are planned in 0.3.4 (#512 to #522).