Including an issue doesn’t mean I will definitely work on it. It is more like, “I want to write this down so I don’t forget about it” π
But at some point I’ll want to go through the list and prioritize what to work on first. If you have a “favourite issue” that you want done first, let me know π
Of course, anyone with a GitHub account is welcome to add new issues, or comment on the existing ones.
Or if you don’t have a GitHub account, leave a comment below, and I’ll paste your comments into GitHub for you (with attribution of course).
There’s also a bunch of stuff that I didn’t bother to add to the list because I plan to work on it over the next couple of weeks. For example:
Steam overlay seems a bit laggy, investigate
Maybe display “(typing)” when someone is typing
Allow copy/paste in text boxes (shouldn’t be too hard to add)
Various other stuff! (hopefully not too much)
I guess the plan would be – let’s try and release on Steam fairly soon (once we’re confident most of the bugs are solved) – then think about planning future tasks!
Until next time…
About Knights
Knights is a multiplayer game in which players must explore randomly generated dungeons and race to complete various quests. For more information please visit https://www.knightsgame.org.uk/.
Progress on Knights continues. In the last (roughly) two weeks I added the following:
Fixed various bugs, e.g. fixed a crash on the “Loser” screen at the end of the game, and the “desync” error should be fixed now. Also fixed some issues with non-English keyboard layouts.
Added support for Steam’s “recently played with” feature (View -> Players in the Steam client).
Added an option to disable the screen flash effect from wands and pentagrams.
Changed the in-game font. I now ship a font file with the game (as opposed to getting a font from the OS) – this simplifies the code and also means that the look of the game will be consistent between different OS’s.
Work on the Lua modding system is ongoing. For example, each mod now has its own self-contained folder on disk (in knights_data/modules/). The Lua require and module functions were removed (in favour of a new depends.txt file) and mods can now include localized text in different languages.
Eventually the plan is to connect this up to Steam Workshop so that users can easily browse and download mods for the game.
This does mean some slight changes to existing mods will be needed, but that shouldn’t be too hard to do. Ideally I’d like to get the existing community-made mods (e.g. spiders, telewand, rat rider) working again and available on Steam Workshop before too long.
There now isn’t that much left to do before the first release, but I want to do the following at least:
Need to do some artwork for the Steam store/library pages. I will probably just take some images from the game (e.g. the “Winner” image) and slap the word “Knights” over the top and see what that looks like! (Unless any graphic designers are reading and want to help me with this? π )
I still want to add tooltips to the game. I don’t want to put tooltips everywhere, but putting them in one or two key places might help, e.g. it might help to have tooltips to explain the various quest options (like “Type of Book” or “Number of Gems” etc).
I want to do a “text pass” and update some of the in-game text strings, “credits” text, and so on.
See you in the dungeons!
P.S. If anyone would like to try out a pre-release version of the game, just email me and I can give you a Steam key.
About Knights
Knights is a multiplayer game in which players must explore randomly generated dungeons and race to complete various quests. For more information please visit https://www.knightsgame.org.uk/.
After a “month off” in January, I have been back to working on the upcoming Steam version of Knights. Here is what was accomplished so far this month:
Restart game feature: You can now press ESC then R in-game to vote to restart (i.e., end the current game and go back to quest selection). A majority of players must vote for this to happen. This provides a way to “abort” a quest without everyone having to actually leave and then rejoin the game.
Chat filtering: Chat now passes through Steam’s servers, and offensive words are filtered out, according to your Steam settings.
Localization: The in-game UI now supports Unicode characters, and almost all in-game strings are now in the localization.txt file. This enables the game to be translated to other languages – maybe some people will volunteer to do translations π (I think ZaRR already mentioned he might be willing to help with a Russian translation.)
The LAN Games option has been added back into the Steam version. I also reworked it somewhat, e.g. the LAN discovery code now uses mDNS instead of broadcast packets (this makes it more likely to work with modern routers and firewalls).
The Connect to Server game option was removed.
I did think about keeping this option, but in the end, in view of things like the Online Safety Act (in the UK), and increasing focus on online safety generally, I don’t think it makes sense to support game servers run by random people on the Internet any more. The main venue for online multiplayer Knights, going forward, should really be Steam. This allows users to take advantage of Steam’s safety features like user blocking, chat filtering, user reporting, etc., which should hopefully mean a safer experience for everybody. (Of course, the Knights community has been very good and completely non-toxic in the past, but we don’t know what will happen when we open the floodgates to Steam players π )
Some bug fixes were done, e.g. I fixed a bug where the display would not update properly after a player was eliminated in a wand of securing quest. Also some extra security checks were added to the network code.
The remaining things that need to be done are:
Mods: I want to at least have a plan for supporting Knights mods (through Steam Workshop) in the future. There were a lot of good mods made by the community back in the day (rat rider, spiders, teleport wands, etc) and it would be nice to make these available again. This might not be in the release on day one but it should be part of the plan.
Tool tips: I had an idea to add tool tips to the UI. This might e.g. help explain to new players what all the different quest options do. (Especially since no-one reads game manuals any more, so we do need some way for players to find out what the options do!)
Bug fixes: There are still lots of bugs and other small tweaks that need to be dealt with. For example, I’m currently looking at a bug with non-English keyboard layouts that ZaRR mentioned to me.
Playtest: Probably we should get a few people together for a playtest, in a couple of months time, once I have fixed all the bugs I already know about π
Steam store page: I still need to come up with text and images for the Steam store and library pages. I’m also not sure if Steam requires you to include a video, or if it’s optional – will have to look into that.
But, to summarize, it’s mostly just small tweaks and bug fixes to be done at this point. I guess it will take around 1-2 months to get these done, but we’ll see how it goes. Exciting times ahead!
About Knights
Knights is a multiplayer game in which players must explore randomly generated dungeons and race to complete various quests. For more information please visit https://www.knightsgame.org.uk/.
I’ve realised it has been about 4 months since the last update (and I said I would update every 2-3 months) so sorry about that!
Since the last update, I’ve done the following:
I created the Knights app on Steam, although it hasn’t been made public yet.
I figured out how to upload builds to Steam, so that part is working.
The integration with Steam is progressing well, e.g. we now use Steam’s P2P networking features, and inviting friends to games works.
Fixed some Lua build issues (this was causing the Makefile to not work properly on non-Debian Linux distributions).
Fixed a bug where Invulnerability wasn’t working (due to a Lua error).
Begun adding Unicode support for the in-game text rendering (although it’s not finished yet).
Probably made a whole bunch of other minor tweaks/fixes that I have forgotten about!
What is still left to do:
Review safety and security – e.g. I want to try to make the network code as secure and hacking-resistant as possible; also Steam themselves have some safety features (e.g. chat filtering, blocking, privacy options) that I need to make sure that Knights supports.
Add a “Vote to End Game” button (or similar), in case players want to end a quest early.
Maybe make some small tweaks to the UI. E.g., adding tool tips in one or two places might make sense.
Need to add “LAN” and “Online server” modes back into the game (I temporarily removed those while getting the Steam integration working, but it would be good to put them back).
Fix any remaining bugs, and do some testing.
Hopefully it shouldn’t take too long to do most of those. I also now have some Steam keys for the game that I can give to people, in case we want to do a multiplayer test, before the full public release of the game.
After that the only thing left would be making the artwork and videos for the Steam store page. I’ll figure that out once we get there π
I guess that about covers the current state of things so I’ll wrap up for now. Hope everyone reading has a good Christmas, and I’ll report back in the new year!
Just a quick note to say what I have been working on for the last couple of months.
I’ve added a “reconnect” feature to the game. Previously, if a player left a game for any reason, they would just be removed from the game entirely — and would not be allowed to rejoin. Now, if a player leaves, their knight remains in the dungeon, but they appear as “(Disconnected)” in the player list. If they later reconnect, they can jump back in and resume from where they left off. Meanwhile, the other, non-disconnected players can continue playing, until one of them wins the quest in the normal way. (Players could also kill the disconnected knight and take their stuff, but some might consider that unchivalrous!)
Unfortunately, one side-effect of this change is that it is now quite hard to actually “abort” a quest and start a new one. (Pressing ESC-Q no longer works, because that now just makes you leave the game, with a possibility of returning later, instead of actually ending the game.) I was thinking of adding some kind of “Vote to restart” feature to address this. Basically, one player would click a button to call a vote, and if enough players agree, then the current quest would be abandoned, and the game would return to the quest selection menu. (This isn’t done yet, but hopefully I can add it soon.)
The other thing I’ve been working on is beginning the integration with Steam’s matchmaking features — or at least preparing the ground for this. I have been working on creating the concept of a “lobby” in the code. A player can create a “lobby” on their local machine, which encapsulates the state of a Knights game. Other players can join the lobby, and the lobby state can also be transferred from one machine to another, allowing for host migration. This is still work in progress, but is going reasonably well. Once I get that working, I will try hooking it up to the actual Steam APIs, so that, for example, a player could create a game and invite a friend to join it, or allow other players to join via Steam’s matchmaking system. (This will also mean creating the actual Steam app id for the game, which I think costs $100 at the moment, but that shouldn’t be too big of a deal.) This is probably still a couple of months away at least, but it will be cool to see it finally working!
Thanks for reading. I’ll try and keep posting updates here every 2-3 months or so.
About Knights
Knights is a multiplayer game in which players must explore randomly generated dungeons and race to complete various quests. For more information please visit https://www.knightsgame.org.uk/.
I made various optimizations and code tweaks, to try to make the in-game animation smoother, reduce latency, and reduce CPU usage. For example, on my (relatively slow) computer, the game now uses about 30% of one CPU core in-game, instead of 40-50% previously.
I’ve begun work on adding a “host migration” feature. To explain why this is needed:
Currently the game uses either a server model (for online games) or a host/client model (for LAN games).
For Steam, the plan is to move away from the server model and use a host/client model, based around the Steam P2P networking features.
To make this work smoothly, I want to add a “host migration” feature so that if the host player leaves the game, another player can take over as host. (The alternative would be for the game to just close if the host player leaves, but that would not be very user-friendly.)
For host migration to work, there needs to be a way to smoothly transfer the “game state” from one machine to another, so that the new machine can take over hosting duties. I don’t want to go into all the technical details here, but suffice to say, I have a plan for doing this, and have started working on it, but the work is not yet complete.
The next steps will be:
Complete the “host migration” feature as described above.
Add support for “reconnect”. Currently if a player leaves the game and rejoins, they will be added as an “observer” and won’t be able to continue playing from where they left off. This is annoying, as sometimes you get disconnected accidentally and want to come back in, but can’t currently.
At this point, we will probably be about ready to get a dev version of the game onto Steam and start integrating with actual Steam features. This is still a little way off, but it will be a good milestone when it does happen π
There are also a couple of bugs that have crept in, that I want to look at. The most annoying is that the Invulnerability effect doesn’t seem to work any more (a Lua error message is displayed). I assume this must be a result of updating Lua to the latest version (which I did a while back) but unfortunately didn’t notice at the time. Hopefully this will be relatively straightforward to fix, though.
So, to summarize: Work is continuing on getting Knights ready to be put on Steam. The basic plan is to do a couple more months of “prep” work (e.g. improving the networking systems, fixing bugs), before beginning the integration with Steam proper once that is done.
I will continue to post updates here as things progress.
About Knights
Knights is a multiplayer game in which players must explore randomly generated dungeons and race to complete various quests. For more information please visit https://www.knightsgame.org.uk/.
I have decided to go ahead and attempt to make a Steam release of Knights!
This will be as a free game on Steam. Whilst I could conceivably try to charge money for it (and, indeed, some people have suggested that in the past), personally I think free is better, because:
Knights has always been free.
Keeping it free will mean that more people get to experience the game (and this is especially important for a multiplayer game, where you want as large a playerbase as possible, ideally).
It’s not clear that a remake of a 30+ year old Amiga game would make much money anyway, so there isn’t much point trying to charge for it, in my opinion.
(If the game does somehow become popular and people start asking for a way to support the developers, then I could consider setting up a ko-fi or patreon or something, but we’ll cross that bridge when we come to it.)
The advantages of a Steam release would be:
No need for me to host any server infrastructure myself — we can leverage Steam’s infrastructure instead. (See previous blog post for why this is a good thing.)
Easier installation — people can just click and play, rather than having to install a separate EXE file from the internet, which they might not trust.
Improved multiplayer features — we can leverage Steam matchmaking, “invite friends” features, etc.
Spreading the word — people might see their friends playing Knights on Steam and decide to try it out for themselves.
I have now asked Kalle Marjola (the original Knights creator) for his permission to do this, and he has agreed, provided that I mention his name somewhere, which of course I will. (In fact, his exact words were, “Oh that sounds great!”)
So what needs to happen next?
The first thing I want to do is finish off the Lua scripting documentation, which is still a work in progress. The point of this is to make it easier for people to make mods for Knights. (Perhaps we can even integrate with Steam Workshop to allow easier installation of mods, although I will focus on getting the base game working first!) This documentation work will take a couple of weeks at least.
I then need to think about how the multiplayer will work (technically) on the Steam platform. My version of Knights has always been server-based, but on Steam there is no “game server”, instead just peer-to-peer connections between players. The obvious solution is to designate one player to be the “host”, and then that player acts as a “game server”. (This does give a slight “host advantage” to that player, since their ping time to the “server” will be zero, but we will have to live with that for now.) Then the technical challenges are as follows:
We probably need some kind of “host migration” feature — otherwise the game would just end if the host player leaves, which isn’t ideal. This is technically challenging, but I think I can see a way of doing it.
It would also be nice to allow new players to join a game after it has started, or existing players to reconnect after a disconnection (neither of these are possible with the current implementation), so I’ll have to think about how those could be implemented.
We also need to integrate with the Steam lobby and friends APIs, which means e.g. adding UIs to create a new game (either private or publicly visible), view existing games (and join them), invite a friend to a game, or respond to an invite. This will need a bit of work, but there are no major technical difficulties here — it is just a case of doing the work basically.
There are other Steam features to consider as well:
Steam Community (e.g. we could set up a Steam based discussion forum for the game)
Rich Presence (I have only a vague idea what this is, but it might be interesting to set up, if it doesn’t take too long)
Steam Input (supporting different controller types, basically) — this could be good as there are all kinds of controllers that people use nowadays, not just keyboard and mouse (although I guess keyboard and mouse remains the most popular).
Voice Chat — may be worth researching a bit at least
Achievements — not sure, but maybe we could have some simple ones like “complete a destroy book with wand quest” or “kill 100 zombies” or something.
Ranked online games and leaderboards — might be interesting I suppose, but not an immediate priority.
Maybe some other stuff I haven’t thought of yet.
The game might also need a slight UI overhaul as well, just to make it a little bit more presentable for Steam. If it’s only going to be a free game, then we don’t need to put an enormous amount of effort into this, but maybe sprucing it up a little bit would be reasonable. Can think about this once the technical side is worked out.
There’s also stuff like setting up the store page, and whatnot, but again, we can cross that bridge when we come to it.
For those who are wondering, I’m currently working part-time, which gives me at least 1-2 days per week to work on Knights, so there is time for me to work on this stuff. Even so, it’s going to take a long time – it could be months or even years before we get to a release – so don’t expect anything soon. But I felt it would be worth announcing something here so that the Knights community (such as it is) can know where the game is heading next.
The next few months could be an exciting time, so stay tuned and I will try to keep people updated as things progress π
About Knights
Knights is a multiplayer game in which players must explore randomly generated dungeons and race to complete various quests. For more information please visit https://www.knightsgame.org.uk/.
With great regret I must announce that, as of today, I have taken the official Knights server offline and made the Knights forum read-only.
The reason is the Online Safety Act, which is a piece of legislation which has recently come into effect here in the UK. The aim of the Act is to protect users of “user-to-user services” (which includes online games), and especially children, from various forms of online harm.
While this is a well-meaning goal, which I agree with in principle, the way the legislation has been implemented presents challenges for operators of small online services such as Knights.
All operators — regardless of whether they are a huge company, or a one-person operation like myself — are required to comply, and apparently the duties are quite extensive, including things like completing risk assessments and implementing safety measures to deal with any identified risks. There are also fines of up to Β£18 million for non-compliance.
Unfortunately, I do not currently have the time to read through the 84-page code of practice and figure out exactly what I would need to do in order to comply. Moreover, given the large potential fines, I would want to hire a lawyer to make sure that everything was being done “properly”, and this would add substantial financial costs.
Therefore, with regret, I feel that the only practical option for now is to close down those aspects of the Knights service that allow user-to-user interaction (and thus would be caught by the legislation) — this includes the posting and messaging features of the Knights forum, as well as the online Knights server itself.
However, according to my understanding, there is an exemption in the Act for blog comments (or other scenarios where users are directly commenting on “provider content”, e.g. online product reviews). (A more detailed discussion is here.) Therefore, I believe it is safe for me to leave blog comments open for now, as long as I “police” the comments section to remove anything off-topic or spammy (which is something I have always been doing anyway).
Longer term, I am wondering if the right thing to do would be to port the game to Steam. Then we could use the Steam multiplayer features and discussion forums and I would no longer have to run those features myself on this website. (Effectively, Steam would be responsible for complying with online safety rules, instead of me.) In fact, a number of people have suggested a Steam version of Knights in the past, but I have not followed up on that because (a) it would require getting back in touch with Mr. Kalle Marjola, the original creator of Knights, to get his permission (I expect he would be fine with it, but it still needs to be done); and (b) it would need quite a bit of work on my part to integrate the game with all the Steam APIs and do any other work required for a Steam release. So, up until now, I have not done that, but maybe now is the time to start considering it.
Anyway, I hope that this is not too much of a disappointment for any Knights fans out there, but I feel I have no choice at the moment, for the reasons outlined above.
Knights is a multiplayer game in which players must explore randomly generated dungeons and race to complete various quests. For more information please visit https://www.knightsgame.org.uk/.
This makes some changes to potions and staffs, which were requested on the forums, and which make the gameplay closer to the original Amiga version of the game.
I have also updated the Lua and ENet versions used and made a couple of other minor changes.
The game can be downloaded from the download page as usual.
Summary: In the next release of Knights I will be upgrading the versions of ENet (a networking library) and Lua that are used by Knights. I will also be removing some custom patches to Lua that were being used previously. This will have the following effects:
Users will have to upgrade their game client (because the new ENet version is incompatible with the old one).
The Lua code for mods might need to be updated.
Lua Change
I have updated the version of Lua used to the latest version, 5.4.6 (previously it was 5.1.4).
The previous versions of Knights also included a custom Lua patch (written by me) which added a new “&” operator to the language. This was used for merging tables, for example one could write code like the following:
This would make an ItemType that had all of the properties from the “basic_wand” table, together with the new properties shown.
Adding the “&” operator to Lua seemed like a good idea at the time — but it does cause problems, because it means I can’t easily upgrade to newer versions of Lua (as I would have to port my patch across to the new codebase every time).
So, from now on I am removing this patch, and the “&” table-merge operator will no longer be available.
Instead I have written a Lua function that does the same thing:
function table_merge(a, b)
local result = {}
for k, v in pairs(a) do
result[k] = v
end
for k, v in pairs(b) do
result[k] = v
end
return result
end
This function is available as “kts.table_merge”. Therefore the above “wand of destruction” code must now be written like this instead:
This does make the code a little bit uglier I suppose, but it is not a big problem and I think this is a small price to pay, in exchange for making it much easier to do Lua upgrades in the future.
Of course, any mods that were using “&”, must now be modified (no pun intended) to use “kts.table_merge” instead, but this shouldn’t be too difficult.
ENet change
I have also taken the opportunity to upgrade ENet from version 1.2.5 to the latest available version (on Windows this will be 1.3.17, as this is the latest VCPKG package available; on Linux it will be whatever is installed on your local system, which will hopefully be reasonably up to date).
The main issue here is that ENet 1.3.x is incompatible with 1.2.x, so users running the older versions of Knights will not be able to connect to the new Knights server. They won’t even get any message telling them they need to upgrade; the connection will just fail completely.
To mitigate this, I’ve arranged for the “Connect to Server” screen to show a message like the following when players try to connect:
Hopefully this will be enough to let players know what they have to do, and it won’t be a huge issue.