Skip to content
KCD Multiplayer

Release notes

Changelog

Every build, newest first, and what changed in it. The same notes land in Discord the moment a build is out.

v0.22.0

Preview

For Steam 1.5.6 Protocol 38

No public download

Two games on one PC, the maps by name, the server's log

New

Two games on one PC

  • Join while a game is running starts a second one instead of refusing: the launcher numbers it by itself, its window is titled KCD:MP (2), and it keeps its own log (client-2.log). Two players at one PC, or a look at your own server from the other side.
  • The second window is not put on top of the first: with two monitors it takes the other one, on one monitor a window opens beside the first (right of it when there is room). The Options page says so under each display mode.
  • The launcher now waits in the taskbar while the game runs, instead of vanishing, so it is one click away for that second Join; it comes back to the front when the last game closes. Updates still wait until every game is closed.
  • From a console, KcdMp_launcher --connect ... does the same on its own (a -KcdMp_instance you type after -- is left alone).

Changed

  • The maps go by their names. Wherever you read where a server plays - the launcher's list and its details, the loading screen, the welcome in the chat and the name shown when you arrive - it says Trosky, Kuttenberg or Sedletz Monastery, the game's own names, instead of trosecko, kutnohorsko and klaster. The ids stay in server.toml and on the command line.
  • The chat reads better. Its backing is darker: near-opaque behind the open chat box, a softer one behind lines that are still showing, none once they have faded.
  • The small box in the top-left corner of the game - the KCD:MP version, the frame rate and the connection line - is gone from a player's screen. It shows only when the game is started with -KcdMp_console (the same switch that opens the F9 window offline), and the F9 window's Overlay tab still switches it on and off.
  • The launcher's Settings page lost its Master list field: the public list is the project's own. Server owners and testers keep the @ lines of servers.txt and --master.

Fixed

  • The red screen after a death no longer sticks. When a blow killed you, the game's own death look - the red tint and the dark edges - could stay on your screen for the rest of the session, through the respawn and a heal. It came from the game judging the blow lethal on its own; the client now keeps that judgement out of the way, and a respawn clears the screen. KcdMp_death_look clear in the F9 console clears it by hand if it ever shows again.
  • Doors and chests inside houses now sync. A door or a chest that belongs to a house carries a long name, and both the client and the server cut it off at a length most of them are over - the use never reached the other players, with no word in any log. Doors standing on their own (the ones near the spawn) always worked, which is why it looked like the sync had stopped. Every door and container in the three levels fits now, and a server that does drop one says so in its log.

For server owners

  • GetLevelName() in Lua and LevelName in C# give the level's name as a player reads it (Trosky, Kuttenberg, Sedletz Monastery); GetLevel() / Level keep the id for comparisons and file names. The freeroam mode's welcome and arrival text use it.
  • The freeroam mode has /kill [player] for admins - a death without a blow, next to /hurt - for testing respawns and the death screen.

The server's log on disk

  • Everything the server prints goes to server.log next to KcdMp.Server.exe as well - the previous run is kept as server.log.1. log_file under [server] in server.toml names another file (--log-file on the command line); "" keeps the console alone.
  • A server started by a double-click no longer vanishes with its error: the window stays until Enter is pressed, and the reason is in server.log either way.
  • A port already in use says so - cannot open udp/7777 ... is another server already listening on that port? - instead of a bare "Host creation call failed".
v0.21.0

Preview

For Steam 1.5.6 Protocol 38

No public download

The launcher updates itself, the emblem, the game window

New

The launcher keeps itself current

  • When a newer KCD:MP is out, the launcher says so: a pop-up with Update or Close, and a line at the top of the window - the version, what it is called, how big the download is - with Update, Later or skip this version. Nothing happens on its own.
  • Update downloads the release, checks it against its published checksum, puts the new launcher and client in place of the old ones in the launcher's own folder and starts the launcher anew. The game must be closed while it runs. No installer, no administrator prompt; the folder stays wherever it was unpacked. Your settings, favourites and history are kept.
  • A server that runs a newer version than the launcher says so when a join fails, and points at the update.
  • The check at start can be switched off in Settings; Check now there asks at any time, and shows a skipped version again.
  • From a console: KcdMp_launcher --update-check prints the newest release against the one running, KcdMp_launcher --update applies it.

The look

  • The KCD:MP emblem - a wax seal with two crossed swords - is the icon of the launcher, the client and the server: in Explorer, on the taskbar, in the launcher's title bar, and in a file's Properties, which now also shows the version.
  • The loading screen shows the KCD:MP key art: the company on the hill over Bohemia, with the title.

Options: how the game window comes up

  • A new Options page in the launcher: Display - the game's own video settings (as before), Windowed, or Fullscreen (a borderless window over the whole monitor, alt-tab friendly); the Monitor, when more than one is attached, by its name; the Resolution for a window, from the list the monitor supports. Saved with the other settings and applied at every join.
  • The level loads in the window the game's own settings make; the chosen shape takes over once the level is up.

Changed

  • The launcher's menu on the left reads Servers, Favourites, History, Direct connect, Options, Settings - without the roman numerals.
  • The loading screen says Loading the game and Loading local game assets instead of "Offline start" and "Loading the level".

Fixed

For server owners

  • KcdMp.Server.exe carries the KCD:MP emblem as its icon on Windows.
v0.20.0

Preview

For Steam 1.5.6 Protocol 38

No public download

Parties, world data and fifty on a server

New

Parties

  • Players can form a party of up to five: an invitation arrives as a note on screen with a countdown - Y accepts, N declines - and the game mode's own commands do the same (/invite <name>, /accept, /decline, /leave, /kick <name>, /leader <name>, /disband, /p <text> in the shipped freeroam mode).
  • Party frames under the HUD: each member sees the others' name, health and stamina, wounds and bleeding, the leader's name in gold, greyed while dead or loading - at any distance, on any part of the map.
  • Members cannot hurt each other: a swing at a party member does nothing and starts no fight.
  • The leader who leaves hands the lead to the next member; a party ends when it falls to one player.
  • KcdMp_party_keys <accept> <decline> in the console changes the two keys.

World data: the server knows the level

  • NPC actors walk around walls. On a server that carries the level's navigation mesh, an actor sent somewhere (a guard called over, an opponent giving chase) walks the way the game's own people would - through doors and around walls instead of into them. Without the mesh they walk the straight line as before.
  • Blows through walls can be refused. On a server that carries the level's collision geometry - its walls, roofs, floors, fences, rocks and trees, the way the game's own physics knows them - a hit claimed through a wall or a closed door can be refused, and a player walking through a wall pulled back. Both rules are the server owner's to turn on; until then the server only notes what it would have done.
  • Bridges and upper floors count as the ground. With the geometry, a player on a bridge, a roof or upstairs is no longer "60 m over the terrain": the floor under them is the ground, so a server can keep a much tighter rein on flying without bothering anyone on a tower.

Changed

Fifty players on one server

  • The first stress test: fifty players on one server at once - walking, running and jumping, riding, sneaking, swinging with dogs at heel, in parties - spread over the monastery grounds. The server took it at a tenth of one processor core, every tick on time; the client held 60 fps with all of them in sight after the fix below. Before the fix it fell to 20-30 fps next to thirty of them.

Fixed

  • The game window keeps its frame rate when it is not in front. A KCD:MP client behind another window ran at ~20 fps and stuttered (the game sleeps its main thread when its window loses focus - a single-player courtesy); it runs at full speed now, for a second client on one PC or a streamer's window.
  • Frame rate with many players around. With thirty-odd others in sight the game fell to 20-30 fps: half of every frame went into a check the client made eight times for every other player's movement, every frame. The check is a hundred times cheaper now and the movements go to the engine in one batch per frame - 60 fps with fifty others in sight.

For server owners

Parties

  • The server ships no party commands: it keeps the group, the invitation, the frames and the no-friendly-fire rule, and the mode writes the commands and the rules around the new callbacks (OnPartyInvite - return false to refuse, OnPartyInviteResponse, OnPartyCreate, OnPlayerJoinParty, OnPlayerLeaveParty, OnPartyLeaderChange, OnPartyDisband) and functions (InviteToParty, AcceptPartyInvite, DeclinePartyInvite, AddPlayerToParty, RemovePlayerFromParty, SetPartyLeader, DisbandParty, the getters, SetPartyName, SetPartyMemberLabel, ShowPartyFrames, SendPartyMessage, SetPartyData). The freeroam mode carries the commands as the example; the C# API has the same names, with IParty and IPlayer.Party.
  • A client script sees the party too - KcdMp.party and the hook KcdMp.on_party_change - for a mode that draws its own frames (ShowPartyFrames(pid, false) hides the server's for that player).
  • [party] in server.toml: max_size (5), invite_timeout (30 s), frames (on), leader_leaves ("next" or "disband"), friendly_fire (off).
  • The protocol number moves to 38: clients and servers update together.

World data: two new export tools, two new files

  • The level's data never ships with the server: every owner has the game, so each exports the files once per level from their own installation - the way the heightmap already works. Two tools join it in the Windows server folder's tools/, and a Linux server gets the files copied over.
  • KcdMp.ExportNavmesh writes data/navmesh/<level>.knav straight from the level's files (no game run, a second per level; --level klaster for one, --variant <n> for another of the level's quest-state variants - the default is the one a fresh world starts on). navmesh under [validation] names the file ("data/navmesh/{level}.knav" follows the level; "" = none). The monastery loads in a few MB, Trosecko and Kutnohorsko in 400-600 MB each.
  • KcdMp.ExportCollision writes data/collision/<level>.kcol: like the heightmap tool it starts the game once per level, waits half a minute for the level to settle, walks its geometry in a few passes (seconds on the monastery, a few seconds on the big levels too, on top of the game's own loading time - the tool prints the progress, leave it alone) and closes it. collision under [validation] names the file; a level loads on the server in under a second. The geometry is the level as built: things the game lets a player push or knock over (crates, barrels, carts) are not in it.
  • Two new rules, both off by default and logged in the shadow so you can watch a few sessions for false alarms before turning them on: line_of_sight refuses a hit or shot claimed through a wall or a closed door; no_clip pulls a player whose step went through a wall back to the last accepted position. The doors the server knows are open let both through. With the geometry the floor under a player is the ground of the terrain check, so max_above_terrain can come down from a tower (60) to a storey (10).
  • New scripting functions - the navigation mesh: HasNavmesh(), FindPath(x, y, z, x2, y2, z2) (the corners of the walk, or nil), IsReachable(...), GetNavmeshHeight(x, y, z) (the floor of the mesh - true indoors, where the terrain height is the ground under the building), NearestNavmeshPoint(x, y, z); the collision geometry: HasCollision(), RayCast(x, y, z, x2, y2, z2) (the nearest surface - where, which way it faces, how far, and the door or chest it belongs to), IsLineOfSight(...), GetGroundZ(x, y, z) (the floor under a point, for a spawn or a teleport). The C# API has the same names. MoveActor follows the mesh by itself.
  • In the freeroam mode: /actor come (the first demo actor walks to you along the mesh - stand round a corner), /los [name] (is the line to that player clear, or what is 30 m ahead) and /ground (the floor under you against the terrain's height).
v0.19.0

Preview

For Steam 1.5.6 Protocol 37

No public download

Game modes get a client half

New

Scripts from the server

  • A game mode can now run its own script in your game: a marker in the world, a bit of UI, a sound, a value the server cannot see. The server sends it when you join; you do nothing. The launcher and the chat say so when a server does this ("runs 1 client script in your game").
  • The script runs in a sandbox whose boundary is the game. It can draw, read the world and talk to the server; it cannot read or write files on your computer, open your browser, run console commands, save or load your game, or start a recording.

The F9 window

  • The F9 window of the overlay is closed by default. A server opens it for its players when it wants to (a development server would; a public one has no reason to). Offline, -KcdMp_console in the launcher's game arguments opens it.

For server owners

The client half of a mode

  • A mode with a client half lives in a folder of its own, with the client files in client/ next to it: gamemodes/arena/arena.lua and gamemodes/arena/client/*.lua. The server sends the folder to every joining player, in name order, and again at /reload; with watch = true a change to a client file reloads by itself. At most 64 files, 256 KB each, 2 MB together.
  • [client] scripts names another folder (for the built-in mode, or a mode in a single file); [client] console opens the players' F9 window on your server.
  • On the client side the script has the KcdMp table (events, state bags), the game's own drawing, entities, timers, clock and UI functions, and KcdMp.on_frame(fn) to draw something every frame - the game's own drawing lasts one frame. The client reference lists what the sandbox gives and what it keeps away.
  • The marker example mode ships in the server folder: a checkpoint run around the spawn, the marks drawn by the client half, the laps counted by the server - the round trip whole, to copy from.
  • Protocol 37: clients and servers must be updated together.
v0.18.0

Preview

For Steam 1.5.6 Protocol 36

No public download

One name: KcdMp

Changed

The name

KCD:MP is the name; KcdMp is how it is written wherever a name has to be typed. Everything that used to say kcd2mp now says KcdMp, and the old spelling is gone. What that means for you:

  • The launcher is KcdMp_launcher.exe and the game side is KcdMp_client.dll — replace the old pair with the new one; nothing else in the folder changes.
  • The launcher's switches start with -KcdMp_: -KcdMp_autoquit, -KcdMp_instance 2, -KcdMp_window, -KcdMp_spawn and the rest. The old -kcd2mp_ forms do nothing any more.
  • The console commands start with KcdMp_: KcdMp_exec, KcdMp_log, KcdMp_net, KcdMp_say.
  • Your data folder is %LOCALAPPDATA%\KcdMp (the log, the crash reports, the launcher's favourites and settings). The launcher moves the old kcd2mp folder there the first time it runs; nothing is lost.
  • The line at the top of the log reads [KcdMp].

Earlier release notes on this site were updated to the new names, so what they say still matches what you have.

For server owners

The server folder

  • The program is KcdMp.Server.exe (Windows) / KcdMp.Server.dll (Linux); server.toml, the game modes and the data folder are unchanged.
  • The tools are tools\KcdMp.ExportTables.exe and tools\KcdMp.ExportHeightmap.exe.
  • The environment variables that override the master list addresses are KCDMP_MASTER_URL and KCDMP_MASTER_ADDRESS.
  • The files your editor reads for the API are sdk\KcdMp.d.lua (the game mode API) and sdk\KcdMp-client.d.lua (the client script API); point .luarc.json at the new names.

Scripts and plugins

  • Client scripts: the table is KcdMpKcdMp.on_event, KcdMp.send_event, KcdMp.state, KcdMp.on_state_change, KcdMp.player_id and the rest. A script that says kcd2mp. must be changed; the server pushes client scripts, so one edit on the server reaches every player.
  • C# plugins: the API is KcdMp.Api (using KcdMp.Api;, the reference to sdk\KcdMp.Api.dll). Rebuild the plugin against the new SDK.
  • Game modes in Lua are not affected: the server-side functions and callbacks never carried the name.
v0.17.0

Preview

For Steam 1.5.6 Protocol 36

No public download

The server on Windows, the tools for its data, and an API your editor knows

For server owners

The server on Windows

  • The dedicated server ships for Windows as well as Linux: KcdMp.Server.exe, the same server.toml, the same game modes. It needs the .NET 10 runtime.
  • The server folder has one layout wherever it runs: the program, server.toml, gamemodes/ (the Lua modes and a README that says where a mode goes), sdk/ (what a C# plugin and your editor build on), data/ (the server's own files, with a README of its own).
  • server.toml is short now: a line or two per group and a link to the reference page that explains every key. The keys and their defaults are unchanged; a file from an earlier build keeps working.

The tools for the server's data

  • tools/KcdMp.ExportTables.exe writes data/combat/items.json from your own copy of the game: damage from the game's weapon and armour tables, items, souls and buffs by name, potions and ointments on the server, props by mesh name. It finds the game through Steam, or asks for its folder.
  • tools/KcdMp.ExportHeightmap.exe writes the terrain of the three levels into data/heightmaps/ - the movement check and GetTerrainHeight read them - by starting the game once per level and closing it again. It needs the KCD:MP client on the same machine and asks where it is.
  • A Linux server takes the same files: run the tools on a Windows PC that has the game and copy data/combat/items.json and data/heightmaps/*.hmap into the server's data/ folder. Without them the server runs on the numbers the clients report and knows items by their GUIDs only; its first log lines say what it found.

Your editor knows the API

  • sdk/KcdMp.d.lua in the server folder describes every function, callback and constant of the game mode API for the Lua language server (the VS Code "Lua" extension and its kin): completion, the documentation on hover, and a warning for a misspelt name or a wrong argument before the server runs the script. gamemodes/ comes with the .luarc.json that switches it on; for a mode in a folder of its own, a .luarc.json next to the script pointing at ../../sdk does the same. sdk/KcdMp-client.d.lua does it for client scripts. A coding assistant working in the folder reads the same file.

C# plugins

  • A plugin lives in a folder of its own under gamemodes/ (gamemodes/arena/Arena.dll) together with the packages it uses, built against sdk/KcdMp.Api.dll; the IDE shows every member's description now.
  • Post(action) hands a piece of work from another thread to the server's tick - the way to use a database or a web service from a plugin without stalling the players. The C# page carries a complete MySQL example and the rules that go with it.
v0.16.0

Preview

For Steam 1.5.6 Protocol 36

No public download

Dogs on the game's own AI

New

Dogs

  • Your dog is the game's own companion now: /dog gives you one that follows you on the game's dog AI, the way Mutt does - it keeps to your heel, catches up at a run when you get ahead, and waits when told to. Everyone else sees the same dog trotting after you.
  • /dog stay makes it wait where it is, /dog follow brings it back to your heel, /dog free lets it roam near you. /dog again sends it away.
  • V praises your dog, as in the single-player game.
  • The dog looks the same on every screen: the coat is picked once per dog, not rolled again on each player's game.

Fixed

  • A companion dog no longer stands still or goes invisible: the game hides a player's dog wherever the story has ruled dogs out, and that rule was in force on multiplayer maps. It is lifted for companion dogs.

For server owners

Dogs

  • SetDogMode(id, mode) tells a dog what to do: DOG_STAY, DOG_FOLLOW (what a new dog does), DOG_FREE, and the game's other modes (DOG_AGGRESSIVE, DOG_SEARCH, DOG_HUNT, DOG_GUARD, DOG_AMBUSH) as they are. GetDogMode(id) reads it back. The mode is also the dog's state bag key mode, so a mode that already watches state bags sees it there.
  • /dog stay|follow|free are built-ins, admin by default like /dog itself.
  • The protocol stays at 36: no server update is needed for the dog to follow, but this server ships the /dog mode words and the two scripting functions.
v0.15.0

Preview

For Steam 1.5.6 Protocol 36

No public download

Typed command arguments for game modes

For server owners

Scripting

  • sscanf(args, format) reads a command's arguments as typed values in one call - one letter per argument: u a player (by name, a fragment of a name, or a pid), d a whole number, f a number, s one word (or a "quoted string"), z the rest of the line; a ? after a letter makes it optional. When something is missing or wrong it returns false and the reason ("argument 2 (abc) is not a whole number", "no player called nobody"), ready for a usage line. The name is SA-MP's on purpose.
  • GetPlayerId(name) turns a name, a fragment of one or a pid into the player's id - nil when nobody or two players match, so a command never guesses between two.
  • The getting-started guide shows a complete /pay <player> <amount> command in a dozen lines; the shipped modes read their arguments this way now (/hurt, /actor hostile, /arena).
v0.14.1

Preview

For Steam 1.5.6 Protocol 36

No public download

The healed body straightens

Fixed

  • A player who is healed after a bad hit no longer stays hunched over on the other players' screens: the wounded posture follows the server's health now, and so does the other way round - a player the server has near death looks it to everyone.
v0.14.0

Preview

For Steam 1.5.6 Protocol 36

No public download

Fights seen from the side, an actor's drops for everyone

New

Hired hands

  • A hired hand that dies drops the weapon and the shield it fought with, and everyone sees them: any player can pick them up, and they are gone for everyone once taken. (The game used to lay a sword and a shield by the body on each screen separately, so one player could "take" what another still saw.)

Fixed

  • Watching two others fight now looks right. A fighting character seen from the side used to turn towards you and swing at the air; it now faces and swings at its real opponent, whoever is looking.
  • A fight you walk up to is shown as a fight: the two are locked on each other from the first moment you see them.
  • A healed player's body should stop hunching on the other screens after /heal - if it still does on your server, tell us.

For server owners

Hired hands

  • [actors] drop_weapons in server.toml (on by default): a dying hired hand's held weapon and shield fall as pickups for everyone; false and it drops nothing.
  • The free-roam mode's /actor hostile [player] sets the demo character on the player named instead of on yourself - handy for watching a fight from the side - and /hurt [player] [amount] takes health off a player without a blow (both admin).
  • The protocol moved to 36: update the server together with the clients.
v0.13.0

Preview

For Steam 1.5.6 Protocol 35

No public download

The public server list and the scripting reference

New

Server list

  • The public server list: every server you host now shows up on the KCD:MP server list by default (set url = "" under [master] in server.toml for a private server).
  • The launcher's Servers tab reads the public list; the list's page on kcd-mp.com is coming.

For server owners

Scripting reference

  • The scripting documentation is written: every callback and function a game mode or a client script can use has its own page - what it takes, what it returns, an example - with an index for the server side and one for the client side. It comes to the docs site next.
  • Reference tables come with it, one for each kind of thing a script names: every item, soul, buff, mesh, clothing and weapon preset, stat and skill, animation clip, particle effect, sound and decal, and every door and container of each level, each with the id and name the server accepts.

Server list

  • [master] url names the list a server announces to; KCDMP_MASTER_URL and KCDMP_MASTER_ADDRESS in the environment override the file, the command line overrides both.
v0.12.0

Preview

For Steam 1.5.6 Protocol 35

No public download

Sounds from a game mode

New

Sounds

  • A game mode can play the game's own sounds at a point - a lightning strike, a bell, a voice - and everyone nearby hears them where they are.

For server owners

Sounds

  • PlaySound(trigger, x, y, z [, seconds]) plays one of the game's audio triggers at a point for the players within [effects] range; seconds is how long the sound source stays (10 by default).
  • Freeroam's /sfx [trigger] (admin) plays one at your feet - a lightning strike without a name.
v0.11.0

Preview

For Steam 1.5.6 Protocol 35

No public download

Effects from a game mode

New

Effects

  • A game mode can put the game's own particle effects in the world - smoke, fire, sparks - and everyone nearby sees them.

Changed

  • The client and the server must both be on this version (the protocol moved to 35).

For server owners

Effects

  • SpawnEffect(name, x, y, z [, scale, dir]) plays one of the game's particle effects at a point; SpawnDecal(material, x, y, z [, size, seconds, normal]) puts a decal there. Both reach the players within [effects] range (150 m) and return how many got it.
  • Freeroam's /fx [effect] (admin) puts an effect two metres ahead of you - the smithy's smoke without a name.
v0.10.0

Preview

For Steam 1.5.6 Protocol 34

No public download

Lighter traffic and wounded, guarding characters

New

Network

  • The server sends only what changed: a player who stands still costs nothing on the wire, a walking one about half of what they did. A full server uses far less bandwidth for the same picture.

NPC characters

  • Characters get hurt like players: a heavy blow injures the body part it hits, a cut bleeds, and a character can bleed out. The limp and the blood show on every screen.
  • Characters block: an armed character raises its guard against your swing part of the time, and swings where your own guard is not.

Changed

  • The client and the server must both be on this version (the protocol moved to 34).

For server owners

NPC characters

  • OnActorInjury(id, attacker, part) fires when a character is wounded; GetActorInjuries, IsActorInjured, GetActorBleeding and IsActorBleeding read the wounds; HealActor makes a character whole again.
  • [actors] block_chance (0.5) is how often a character raises its guard against a swing, block_hold (0.7) how long it keeps it up.
  • Freeroam's /actor heal heals the demo character; the /actor lines list its wounds.

Diagnostics

  • The server's status line shows the snapshot traffic and how much the delta encoding saves; KcdMp_net in the client's console shows the client's side.
v0.9.0

Preview

For Steam 1.5.6 Protocol 33

No public download

Crossbows, guns, hired hands and a dog

New

Weapon sync

  • Crossbows and guns are synced: other players are shown reloading, aiming and firing.
  • Ranged damage matches the single-player game: arrows, bolts and bullets do the same damage they would in the story game. Head shots count as head shots.
  • The archer's strength limits how far a bow is drawn, as in the game.

Player bodies

  • A healed player stands up straight on every screen, not only their own.

Dog

  • /dog spawns a dog that follows its owner. Everyone sees it.

Name

  • The mod is called KCD:MP everywhere it shows its name.

Fixed

  • The body part a hit lands on is read from the game's own hit record; melee damage was re-measured against it.
  • A crossbow bolt is loaded as the reload ends; the aim no longer flashes empty.

For server owners

NPC characters

  • CreateActor creates a named, dressed character; MoveActor walks it; OnActorArrive fires at the target.
  • SetActorAnim poses it: sit, wave, bow, nod, pray, chop, sweep, smith.
  • Characters take hits and die: OnActorDamage, OnActorDeath.
  • Characters fight back: a struck or hostile character (SetActorHostile) chases the player and swings. Settings in [actors].
  • /actor demo in freeroam shows it.

Dogs

  • CreateDog and GetPlayerDog. One dog per player; it leaves with its owner.
v0.8.0

Preview

For Steam 1.5.6 Protocol 28

No public download

Bows, potions and a drink

New

Ranged combat

  • Bows are synced: a shot arrow is seen flying on every screen.
  • Ranged hits use the game's own damage. A half draw does less; a bow too strong for the archer cannot be drawn.
  • Other players are shown drawing, holding, aiming and releasing their bow.

Consumables

  • Potions and food are handled by the server: a healing potion heals over time, a bandage stops bleeding.
  • Alcohol: a player who drinks gets drunk and is shown swaying and stumbling to everyone. It wears off with a hangover.

Weather

  • Weather presets, selected by the server with /weather.

Chat

  • Alt+Up recalls the last lines typed.
  • While the chat box is open, the game ignores key presses.

Commands

  • /heal for admins.

Fixed

  • Other players no longer collapse "unconscious" at low health.
  • A dead body lies still.
  • The red low-health screen pulse is removed.

For server owners

Props

  • Game modes can place objects in the world: CreateProp, /prop, /props, static or physical.

Hot reload

  • /reload reloads the game mode without restarting the server; [gamemode] watch reloads on save.

Game modes

  • Player buffs by name (GivePlayerBuff); state bags replicated to every client.
  • Alcohol model: GetPlayerAlcohol, OnPlayerDrunk; OnPlayerUseItem.
  • Consumables are audited: using an item the server never saw the player receive is refused.
  • Player levels for stats and skills: [spawn] stat_level, SetPlayerStat, SetPlayerSkill.
v0.7.0

Preview

For Steam 1.5.6 Protocol 19

No public download

A launcher window, doors and chests

New

Launcher

  • The launcher is now a window: server list, favourites, history, direct connect, player name, settings and a Join button.
  • After the game closes, the launcher returns with the exit report.
  • A loading screen is shown from the first frame until the spawn.

In-game menu

  • The Esc menu is the game's own, reduced to Resume, Settings, Help and Quit. Save and load are gone.
  • Enter opens the chat, in addition to T.
  • Name tags are hidden behind walls.

Doors and chests

  • Doors are synced: a door opened by one player is open for everyone and swings the same way on every screen.
  • Chest contents are shared: what one player takes, the next player does not find.

Commands

  • Admin commands: /give, /item, /tp, /goto, /horse, /time, /rain, /kick, /kickban, /unban.
  • Public commands: /help, /pos, /players, /items, /uptime.
  • Items can be given by their English name: /give duelling longsword 2.
  • /horse <name> picks a breed; /horses lists them.

Accounts

  • A registered name spawns frozen in a private copy of the world until /login. Guests play immediately.
  • Every player starts with a torch.

Fixed

  • Rejoining after a dropped connection no longer gets stuck behind the old session.
  • A rider's keyboard is held briefly while mounting, so the horse cannot ride off before other players see the mount.

For server owners

Item anti-cheat

  • The server keeps its own count of every item a player legitimately received. Conjured weapons, armour or ammunition are detected; [audit] sets whether to log, kick or ban.

Admins and commands

  • Admins are listed in [accounts]; a game mode can promote with SetPlayerAdmin.
  • Built-in commands can be disabled or made public individually in [commands].

Game modes

  • Virtual worlds: players can be placed in separate copies of the map (SetPlayerVirtualWorld).
  • Zones, on-screen text and HUD elements, name-tag colours, teams, bans, script-to-client events and a server-wide key/value store.
  • The item and horse catalogues are published as tables a server owner can look an id up in.
v0.6.0

Preview

For Steam 1.5.6 Protocol 13

No public download

Swords drawn

New

Melee combat

  • Players can lock on and fight each other with the game's own combat system.
  • Swings are shown on the attacker's body in the direction they were thrown. Blocks are shown.
  • Unarmed players fight with their fists.
  • Walking up to another player no longer triggers combat mode. Fights start with /fight <name> and end with /peace.

Server-side health and damage

  • Health, death and respawn are handled by the server. A killed player falls on every screen and respawns.
  • Damage uses the game's own tables: the attacker's weapon against the armour the victim wears on the body part struck. Head hits count more, limb hits less.
  • Stamina is server-side: swings, sprints and jumps cost stamina, a tired swing does less damage, and stamina regenerates after a pause. The stamina bar shows the server's value.
  • Injuries and bleeding: a hard hit injures the limb struck; a cut bleeds until it stops, is bandaged or healed. Bleeding out counts as a death.

Equipment sync

  • Other players wear what they actually wear. A changed hood, helmet or shield shows within a second.
  • Drawing and sheathing weapons is animated on other players.
  • Items dropped from the inventory appear on the ground for everyone.

Duel mode

  • /duel joins the queue. Two players at a time are placed face to face in the arena: a countdown, a fight to the death, a score.

Movement sync

  • Other players move more smoothly, with fewer stutters.
  • Backward walking, crouching while moving and the combat stance are shown on other players.
  • The scoreboard shows pings.

For server owners

Combat settings

  • [combat]: player-versus-player on or off, damage scale, respawn timer, fight timeout, stamina costs.

Game modes

  • OnPlayerDamage and OnPlayerDeath events.
  • Heal players, read and set health and stamina, read the weapon a hit was made with.
  • Items can be referenced by name, id or GUID in scripts and chat commands.
v0.5.0

Preview

For Steam 1.5.6 Protocol 3

No public download

Horses, weather and a scoreboard

New

Chat and HUD

  • Chat lines at the bottom left of the screen. T opens the chat box.
  • Tab opens the scoreboard with every player's ping.
  • F9 opens the debug window.

World

  • Time of day and rain are set by the server. All players see the same sky.
  • Dropped items lie on the ground for everyone; a picked-up item disappears for everyone.

Horses

  • /horse spawns a horse and mounts it. Other players see the rider at a walk, trot, canter or gallop.
  • Horses stay in the world when left. Any player can take a loose horse.

Animation sync

  • Jumps, mounting, dismounting, a rearing horse and falls are shown on other players.
  • Drawn and sheathed weapons are shown on other players.

Connection and accounts

  • A lost connection or a server restart reconnects automatically, back at the same spot.
  • The server remembers players by name: visits, play time and last position.
  • /register <password> claims a name; /login <password> signs in next time.

Launcher

  • A server browser, fed by a server list file and by master lists that servers announce themselves to.
  • On a crash, a report file is written and the launcher shows it after the game closes.
  • Two copies of the game can run on one PC, in windows, for testing.

For server owners

Movement checks

  • Impossible speeds are refused and the player is pulled back.
  • With a terrain map of the level (exported from the game), players cannot move below or above the ground.

Game modes

  • /time and /rain in the freeroam mode; the [world] settings.
  • GetSavedPlayer, GetSavedData and SetSavedData for per-player saved values.
v0.4.0

Preview

For Steam 1.5.6 Protocol 2

No public download

Other players, in the flesh

New

Player bodies

  • Other players are rendered as full game characters: body, clothing, weapons and a face.
  • Faces are assigned by the server, so a name keeps the same face between visits.
  • Walking, running, sprinting, crouching and sidestepping use the game's own animations at the player's real speed.
  • A name tag is shown above every player's head.
v0.3.0

Preview

For Steam 1.5.6 Protocol 1

No public download

Two players, one world

New

Joining a server

  • The launcher joins a server by address, asks it which level it runs and starts the game on that level.
  • The server keeps the player list and sends every player the others' positions 30 times per second.
  • Other players are shown as a stand-in figure that follows their movement.
  • Chat between players.

Performance

  • Only players within about 200 m are sent to each client.
  • Tested with 100 simulated players at once.

For server owners

Configuration

  • All settings in one file, server.toml: server name, level, player limit, password, spawn point and outfit.

Game modes

  • Server rules are written as a Lua script, SA-MP style: OnPlayerConnect, SendClientMessage, SetPlayerPos, timers, per-player data. freeroam is the default mode.
  • A game mode can also be a C# plugin.
  • Test bots: simulated players that join, walk and chat.
v0.2.0

Preview

For Steam 1.5.6 Protocol 0

No public download

An empty Bohemia

New

Level loading

  • A level (the monastery, Trosecko or Kutná Hora) loads directly, without the main menu or the story, in about 20 seconds.
  • The single-player population — villagers, guards, animals — is removed. The world is empty and ready for players.
  • Players spawn at the point and with the outfit the server sets.

Multiplayer rules

  • Saving and loading are disabled.
  • Fast travel is disabled.
  • The game never pauses: menus and the inventory keep the world running.
  • Achievements and tutorial pop-ups are disabled.
  • Steam must be running. The game's own licence check is the ownership check.

Overlay and logs

  • The overlay captures the keyboard while it is open; the game's own log is shown inside it.
  • A crash log is written when the game crashes.
v0.1.0

Preview

For Steam 1.5.6 Protocol 0

No public download

First contact

New

Launcher

  • Starts Kingdom Come: Deliverance II with the mod loaded. No game files are modified.
  • Refuses to run on a game version the mod does not support; the installed version is checked first.

In-game overlay

  • An overlay drawn over the game: a frame counter, and F9 opens a log window.
  • The mod can run the game's own script and console commands from inside the game — the base of every feature that follows.

Dedicated server

  • A dedicated server for Linux, running at 30 ticks per second. Nobody can join it yet.