Survive the Wild late April update
Hello folks! The last 2 weeks have been very busy and things have gone extremely well in regards to Survive the Wild development, and the staff team and I are beginning to get very excited! I’m happy to say that we have completed 2 of the major tasks mentioned in previous posts, and I will describe those and more to you now.
The tracking system is now usable!
Wow, that took a lot longer than 1 day to accomplish, but it was very much worth doing! The amount of remaining elements to the tracking system that needed heavy brainstorming was much higher than I thought, making things very difficult. It’s a lot easier to code something if you know exactly how it should work ahead of time while coding it! I thought I did, but it became clear shortly after starting work on this a few weeks ago that my original plan for it was very flawed and was missing the solutions to several large issues. The need for brainstorming got bad enough that I ended up working on this for a few hours at a time before moving onto other things for a while so as to make sure I continued being productive rather than stuck in my mind for long periods at a time trying to figure out how this complicated system should work. I finally figured it out and coded just about all of it, before realising during testing that I’d forgot yet another element during the brainstorming that required me to have to spend at least a couple more hours redoing a significant portion of the code. The difficulty on this one was much higher than originally anticipated, but I am confident that every player is going to find it extraordinarily worth it once they have learned and warmed up to the powerful system.
Take every suggestion or idea involving animals making a constant beeping noise. Add the suggestions regarding animals making a sound if you are directly facing them. Next include the suggestions or ideas about how it would be cool if you could get items to make beeping noises on the ground when you approach them. Oh of course we can’t forget the ideas about how it would be cool if objects could speak updates when something about them changes. Now add a healthy dose of originality and multiply all that by a few dozen at least, and you’ve got Survive the Wild’s new and awesome tracking system!
Make fruit items on the ground sound different from wood or metal ones. Make a single berry on the ground sound different than all other berries on the ground. See where objects are with a hover or focus sound positioned in HRTF as you arrow over the object, or even check what tile an object is located on this way. See what objects are around you and get information about every single one right from the game keyboard area. Make the player John have a different beacon or lock indicator than the player Joe. You will be able to do all this and much more with this awesome tracking system, which we all can’t wait to show you!
Since the system was completed there were a few very good suggestions from beta members which I may implement before the release to make the tracking system experience just that much more enjoyable for all, but even if I were to not touch this system anymore sans fixing maybe one minor bug I can think of that could cause annoyance, this system would still be fully usable just about exactly as it stands, and so I pretty much consider this task complete, as it is no longer even near broken enough to prevent us from releasing the update!
Automatic daily backups established!
There is more I want to do in regards to backups, but I’m very happy to say that there are now daily off-site server backups that are automatically taking place via a cron job on the system that hosts the game and my website. This backs up all webpages on that server, any sql databases, every single bit of important and even some not so important data regarding Survive the Wild, and several more valuable bits of data on that machine which we don’t want to lose. Now that this basic though secure and effective backup infrastructure is set up, we no longer have to worry about our game data getting any more than 24 hours behind in the worst case! As for the stability of the backups? I have this thing automatically uploading compressed, incremental and securely encrypted/signed backups to actually Dropbox of all things. I’ve had pro since before I had STW, so why not? I have all this unused space just sitting here available to me, so I may as well use it. Also, I can share the folder containing the backups with anybody I trust, thus creating copies of the data on several computers around the world in a secure way, since even though I can give the data to several people, none of them will have the keys to decrypt it. That actually brings me to the things remaining which I’d like to establish regarding backups.
So as I said, if I give these system backups to administrators (which I will do for data safety), the administrators cannot decrypt the data. While it does appear I myself can pretty easily restore single bits of data from these backups, this is still not very convenient and will not help if the administrators need to access a bit of older data from within the backup should such a thing be required (though hopefully it should rarely be due to increasingly robust logging systems). Still though, I wish to establish a second, on-site, much more easily accessible backup encase something goes wrong with a single file and we wish to restore that without accessing large off-site compressed backup files. I wish for staff members to have the ability to initiate such a backup from the game, or even a full off-site one as well and be able to determine the last time such backups were made. However, since the crucial task of keeping our data automatically safe in at least one off-site location has now been achieved, the remaining improvements I wish to make to the backup infrastructure are now officially much lower priority and can be attended to post release if we wish or if it becomes clear that they would take a lot of time to implement.
Improvements regarding pathfinding/npcs/lag
So as many of these improvements were made literally earlier today, our testing data is a little sparse still and the degree to which improvements in this area are required at this point is going to remain somewhat unknown for the next couple of days as we test. However, today significant efforts were made to improve several issues regarding npcs getting stuck, and in doing so I was able to fix or at least improve this issue where npcs were getting stuck at waterlines near barriers, or really near barriers in general (I think one particular waterline barrier caused a lot of the getting stuck though thus far). I’m pretty sure though that we did succeed in our mission for today which was to get npcs to stop freezing sometimes when attacking, as well as some issues regarding finding food. A couple days ago we also removed some laggy npcs from a test area where they were left with only themselves for food, which had been slightly messing with our statistics and more to the point, the amount of lag on the server. If you remember in the last post I mentioned fixing our profiler so that we could see how long certain functions were taking to execute. We saw that the code that made npcs fall through the air was taking way longer than it should to execute, so we finally recoded this the way we intended using an event based broadcasting system to tell objects when tiles disappeared, rather than the timer we were using before that was checking the npc’s current tile every few hundred milliseconds. I’m not entirely sure why the pathfinder can request hundreds of tiles a second and not lag and then the npc falling code can take so much time to execute only checking tiles every 500ms, but it’s a thing I guess for some reason I don’t yet fully understand and so we recoded that falling logic with noticeable improvements. It’s hard to exactly measure stability as a whole, but there is 0 doubt that it has improved between the last post and this one especially when considering the general lag improvements mentioned in the last post!
Other minor improvements
As always, there were a bunch of smaller things improved upon that don’t require their own section in this post. Actually the amount of these things continues to get higher each time both because getting closer to the release simply makes them higher priority, and because the new bug report and suggestion tickets are doing absolute wonders.
We again have made improvements to the user interface for staff, I imagine this theme will continue to repeat often. As mentioned many times the old administration system on Survive the Wild was a mess putting it kindly, and we want to make absolutely certain we do it right this time which of course requires making it as easy as possible for staff members to perform tasks. This time though it’s not enough to deserve it’s own section. In this case, the only large staff UI improvement I made was the edition of a comprehensive statistics menu, which at some point may be available to players in some form with a few of the more private statistics redacted. These statistics can be anything, from something as simple as the real world date/time of the server machine, to something as useful as the amount of ram the server application is taking or the amount of space remaining on the server’s drives, to things that are just nice to know such as the total number of objects/npcs/maps/areas in the game. This statistics menu includes functions to use the profiler I mentioned above and so there are no more slash commands for that either, yay! The other 3 improvements for staff UI are indeed tiny. If you remember, I previously mentioned generalizing some dialogs regarding script editing in order to make the same dialogs work for maps and other data. It seems I broke the script rename button when I did that, and this was resolved a few days ago. Actually while writing this post, a master discovered something that didn’t work in the character administration panel regarding updating inventories, so I fixed that quick. Other than that, the only thing I can remember doing for staff UI is adding another convenient method by which characters can be manually unjailed.
Aside from the staff UI stuff, we’ve just got a giant list of random smaller fixes and improvements. You guys are about to see the effectiveness of this bug reporting and suggestion system, I have enough items here that I may as well put them in a list instead of a few wordy paragraphs. Well lets go, in the order presented to me by the new resolved bugs and suggestions menus in the game.
- Pressing ctrl+g on a player’s name in the online players list was not creating a group chat, but was instead bringing up the new go to list item dialog where you can enter the number of a list item you wish to jump to. Now the keystroke for creating a group chat takes higher priority again like it should.
- If you dragged items into a fire, the game would tell you there was no longer anything to drag like 2 minutes after the fact. Now that happens instantly as intended.
- You know how you can press control+several different keys while in the online players menu to perform actions? Staff members have a few additional keys they can press on a player to make their jobs easier, such as opening the character panel for that player. Accept if a player pressed one of these keys after pressing f6, they would be silently returned to the keyboard area instead of nothing happening. Now clients aren’t even made aware of such keys unless they are needed by a staff rank, which is how it should be.
- The suggestion was proposed that players in jail should be able to see the time remaining until they were released rather than having to calculate it based on the jailed and release dates, this was pretty easy so I decided to goahead and do it. It now hsows that info if somebody in jail clicks the why am I in jail option in the main options list.
- In the past, if a player lost health or was attacked and then went offline very shortly afterword, their client would exit normally, but their character would be left frozen online for a short time. This is a measure to prevent someone from going offline to avoid a dangerous situation, as we don’t want that happening here. Now if you end up in such a situation and try exiting, you will be told that you shouldn’t exit now because your character would be stuck online for a short time, but you can press shift+escape if you don’t care and want to do it anyway. So to be clear the behavior of freezing characters online if going offline in a dangerous situation has been a thing for years, but now it’s visible as it should be.
- If a player clicked on an offline staff members name in the find staff members menu to copy that staff member’s name to their clipboard, it would prepend a backslash to the name (an internal menu item delimiter used there). This little issue was quickly resolved.
- There were improvements with trees, they weren’t regrowing properly if partially damaged and that was fixed, and a large breakthrough with rotating tiles makes branches much more visible and fun than they were before.
- If a baseball hit a tree, it was getting destroyed instead of spawning next to the tree. That was fixed.
- If a player accesses the support tickets menu, they are now separated into 2 sections (one for open tickets and one for closed/resolved ones). Previously it was all in one giant list sorted only by modification date.
- If a support ticket, bug report or suggestion is modified while a player is offline, that player will now finally get alerted automatically when they come online that there have been changes. Staff members with permission to respond to all tickets will get alerted about any new tickets that are opened as soon as they come online, thus making it that much harder to miss support requests!
- And several other little fixes for systems and items I won’t spoil here.
I’m really excited to see how much less buggy the game gets in general after a couple months of the players using the new bug and suggestions system, you can now see how successful it has been just from those bullet points above!
I just have to mention the stw earthquake situation
Ok so if you’re short on time or are just looking for serious content, feel free to skip to the next heading. But before we get into the tasks in progress and tasks remaining sections, I wanted to pause for a not at all serious but hopefully amusing interlude.
I was working on fixing rotating map objects in the game about a week ago. These could be anything from trees with branches that rotate at all sorts of angles, to a vehicular device that takes up physical map tiles but turns, or even just to a structure that a player places at an odd angle. I mostly made a huge breakthrough, er… I thought I totally did at the time. So I published the patch to beta members and went to relax for a bit. When I came back to check on things a few hours later, what I found was absolutely hilarious, and beta members thought so too! I’d accidentally made a slight miscalculation when working on rotating objects, managing to cause all of the maps to separate by one tile. Samvil city just flat out fell into the ocean and disappeared! At least mostly, you could actually fall through a big hole in the ocean right into the sewer system, and we all started joking about how the lost coin was no longer the biggest missing item in the ocean, now it was the lost city! This little failure quickly became fondly known as the STW earthquake, as it really did look like how one beta member funnily put it, that the tectonic plates of the world had shifted apart! Animals and players could just fall forever between the gaps at the edges of the maps, such as the empty space that existed between the mainland and the ocean. It’s certainly one of those experiences we’re all going to remember, especially since it was an issue long enough for several beta members to discover it and because it’s one of those unique bugs that are actually quite funny.
A similar thing happened in 2021, while we were testing the new system that let us link all the maps into one giant map. It was one of those times where I was talking to administrators and updating the beta client every 5 minutes so we could all test changes. Nearing the end of that day me and one other admin were the only ones left in the conference, and were just sitting there on the game with the latest client when the admin took a few steps and suddenly fell through the map! We were on the mainland near the pond, so this in itself was already funny because when does anybody ever fall through the middle of the island mainland of all places. But then when we began investigating it with the camera, the shear randomness of the gaps and holes we saw all over the map was absolutely eye-wateringly hilarious. The mainland didn’t look much better than the Windywolf valley bridge! There were just strips of grass or pond or whatever every few tiles, with random platforms here and there particularly near where we were standing when we logged in. It was… amazing. But the cherry on top was that we found out that all we had to do to make the mainland magically return to normal was to just move the camera more than 200 tiles backwards! We were cracking up over that one for many minutes, that one admin and I were the only ones to ever see such a thing. Never before while developing STW do I remember such an amazingly unique map bug like that appearing during development. There was an issue with the tile caching, so it was truly random seeming and awesome. Of course when it’s hard to fix, any bug is seriously annoying. But when it is pretty easy to solve, some special bugs in the map engine can tend to be unforgettably hilarious, I think because the map has so much to do with how the game world is rendered and so the broken map just flows into and entertains ones imagination quickly, naturally, and usually in a more than comical manner depending on the bug.
Anyway, this latest fluke in the map engine seemed like a perfect opportunity to share a few quite entertaining moments from behind the scenes with all of you quick. If you guys liked this, I can throw stuff like this in more when it happens or from the past, such as when an admin’s old computer caused us to spend a day finding the really obscure reason that they couldn’t run the game in March 2022. Just let me know! Some bugs are a learning experience in the end, some are so small they don’t matter, some are just flat out rage inducingly difficult to figure out. However just a small, tiny rare few like the ones mentioned here are downright unforgettably hysterical and are worth sharing, for those who are entertained by such things. 😀 Right, so now that a fair few of you have hopefully gotten a small chuckle or grin, lets get back to what you all came for.
Tasks in progress
These are the things being actively worked on at this time, or things that we have already started on and intend to finish very soon.
Documentation
This is both worldmaker documentation as well as documentation in general. I mentioned that we added more scribes to the team in the last post, and am happy to say that the documentation library is filling out great as a result! There are still some topics that could do with extra detail and/or a couple that scribes can’t right yet because they are missing some information required to do so, but generally finishing up the public documentation is going great so far!
As for worldmaker documentation, I have already spent some time properly documenting the scripting interface that worldmakers use, however there is still quite a bit to do there. I need to write function remarks for I think like 200 functions? I have like 50 of them done so far (these are very rough numbers). Luckily a worldmaker was able to write a script to print out some of the general structure of this function reference, so now I just need to finish filling in the blanks rather than writing the same structured text above each function over and over again. Another worldmaker is also working on more general documentation, however they must juggle that with their main rank of worldmaker (actually working on the game), so that’s why this isn’t complete yet. However it’s an ongoing process that gets closer to being done every day! Really, the public documentation is the only thing we must for sure finish before the release, finishing the worldmaker documentation ahead of time may just make things go faster because then more worldmakers can understand the full extent of the system’s they are working with. Since writing this blog post is flipping my brain from c++/angelscript mode into English mode, I’ll probably pound more of those out right after I finish this post before delving back into coding. In general, I’m satisfied with the documentation improvements that have taken place over the last 2 weeks!
Script conversions
As I mentioned in the last post, we are planning to save most of what’s left here for a couple of binge coding sessions near the end, and so with that said there are still several scripts that need converting, mostly having to do with cooking using spits, maybe a few food items and a couple others that I can’t remember the function of right now. We did get a couple things working (though not specifically RTig conversions), for example the cassette player used to be part of the hardcode so that I’d have to restart the server to change it, and additionally the thing just quit working anyway after the old server crashed since the audio files for cassettes used to be streamed from my old web server. As such the cassette player has been rewritten in the shared scripting engine using the much more modern audio streaming system. Also dropping 25 wood to make a wood tile for example or any other similar item drops was broken for a while and also used to be in the hardcode rather than in the shared scripting module, so that was recoded too and is now working again. Though these 2 little steps aren’t specifically about converting RTig scripts, they are very similar (instead I’m just converting from the hardcode of the server application to the shared scripting engine). As such, I figure the reports on those fixes may as well be put here considering that in the end it’s all about converting all the game items to the new scripting engine, whether they were originally sourced from RTig or not (it’s just that most of them are). A worldmaker did convert 1 or 2 of the remaining food items though. The same statement from the previous post continues to be true, I expect that this task is just going to randomly disappear in one day when we decide it’s finally time to tackle these remaining scripts.
libgit2 for tracking the changing of scripts
I’m on the fence as to whether this should be a task in progress, or a task remaining. This is because I was almost certain I was going to work on this over the last 2 weeks, but as you may be able to see by reading this post, I ended up getting a lot of other random and important stuff done instead such as backups and the object tracking system. As such, I haven’t managed to touch this one since the initial step I mentioned last time about getting the shared scripts to compile for transference between servers. I’m only keeping it up here instead of in the tasks remaining section because again the same from before continues to be true, my expectation is that I’m going to continue working on this again very shortly following the blog post. However the new bugs and suggestions system is so useful that it’s quite easy to get distracted fixing the bugs I find there, which can then lead into all sorts of random though needed areas of development. Thing is though, this one can’t be put off much longer, because soon it’s going to be the highest priority task that actually stops us from releasing the update, leaving me with nothing left but to attend to that and then a slew of random bugs. I’m not sure we’re quite to that point yet, but I think we’ll reach it extraordinarily soon. With any luck, I’ll have a much more happy update about this task in the next post.
Tasks remaining
Wow you guys but this section is getting really really hard to write! While that would be bad for literally any other section, it’s very very good for this one because it means that we’re running out of tasks remaining to write about! In fact, to write this section we must look at the remaining unresolved bug reports and suggestions submitted by beta members, meaning that once libgit2 is completed we’ve officially jumped all of the absolutely huge hurtles and almost only have small things left! The only thing I will take an extra second to mention because it’s a bit more important is the ability for administrators to subscribe to log updates. In the past, when several player events would take place (think the server releasing somebody from jail after their time expires or similar), admins would get a buffer notification called an admintell, and such events were poorly logged. Now such events are logged amazingly, but admins are not automatically notified of the events. So now we need to combine these 2 systems so that if a new log entry gets created, an admin can set it up to receive a notification instantly when an event takes place and is logged. The administrator should be able to disable and enable the notifications for certain game events based on what’s useful at a given time. So that’s really the only really important thing that’s come up, it would probably be wise to get that system working before the release. Other than that, lets see what we have here in the unresolved bug reports list, mind you very few of these are crucial or update breaking but I may as well mention them here.
- There is some small issue where you can get stuck in a dialog if you lose connection to the server while the dialog is open. It’s minor because you can just open a different dialog to close it, but it would still be good to fix quick if I can figure out why it’s happening.
- This one is a bit more critical, corpses appear to not be spawning items properly when someone dies. I tried to look for a few minutes today while writing the post, but have not yet discovered the problem and so I need to figure that out.
- This one will take a grand total of about 30 seconds to deal with, but the home and end keys in sliders are doing the reverse of what the arrow keys are doing. Left arrow decreases the slider but home increases it. Obviously not vital in the least.
- It would be nice to improve the rewritten cassette player a bit more, though it does work perfectly as it is.
- If you jump and then sit down/bend your legs while in the air, the tripping sound should play upon land rather than the footstep landing sound.
- The feature where you can have the game repeat characters as you type them in text fields is a little bit broken and could do with a bit of work.
- apparently some items are not spawning in the proper location in the windy wolf forest, but are instead spawning underground! Oops? We’ll figure it out I’m sure.
So as you can see, we’ve got that thing with log subscriptions which may take a couple hours to work out, and since there is still quite a bit left regarding this task I’ll mention libgit2 here again. After scripts can be tracked and transferred properly though, we just have to resolve those few bug reports you just finished reading and take a little bit of time to generally look over all of our work!
so… so close…
Well everyone, that’s about all the updates I can think of for you right now. As you can see, the last 2 weeks have been extremely productive and loads of progress is being made. We’re almost to the point where it’ll be time to bring up the main staging server! Right now all work is being done on the beta server which is a completely separate environment than what the players connect to. Very soon though, we’re just about to reach the point where we must actually spin up the server that everyone will be connecting to so that we can then begin preparing that server for public beta! This will involve for example making sure that no beta commands work on the main game, checking to make sure that everything is secure, we’ll have several beta members using fresh characters on this main staging server to make sure one last time that the game is fully playable for everyone etcetera. And when we’re ready, we’ll then release the client that connects to this main staging server to everybody, and that will be the official public beta!
If you’ve been keeping up with these posts, you can see just how little we have left to do now when compared with previous ones. To say that we’re getting excited is an understatement, we absolutely can’t wait to see everyone on public beta soon!