This week I continued to work on my ship detailed statistics by giving crew statistics.
Some of the key things are the moral, along with the number of days of food, water, and cash that you have on board. I’m not really happy with the layout for this, I’ll have to think over it a bit more as to what I’m actually going to include on the panel. For now it will do, but…
Next up is pretty clearly the mission panel, the only one panel that doesn’t have any information there yet. As previously mentioned, that will take a re-write of the mission system, which I will start to work on soon.
It isn’t well supported now, but right now I have a number of ship types, each of which can have several configurations. It isn’t well supported at the moment, you can only upgrade the configuration if your ship is completely empty, which is very rare, but I will be adding more capabilities for this in the short term future.
In support of this, and continuing with the theme of configuring your ship, I’ve added this kind of information to the ship display.
This includes the model, configuration, and the number of hold units which are contained there, which should give good reference. Note that I also fixed the display so it shows the number of barrels of food/water used, and not just the total units.
Next up is a bit showing the status of the crew. It will show how happy they are, how long they can survive on their present rations, money, etc, and overall give some good information. That will be the top right panel. The bottom right will be the missions display, which as I previously mentioned is put on hold until I have rethought how I am storing the missions.
One of the things that has been on my list of planning improvements for a while is the missions system. Right now the system I have is very much tossed together, including stuff like hard coded mission types, no conditions upon which a contract is cancelled, etc.
As mentioned last week, I’m working on giving a status of the ship. The next thing after goods on my list was to show the missions in progress. That actually is proving more difficult than I would have suspected, primarily because I’m wanting to include different kinds of mission parameters that I actually don’t show in the dialog. So I’ve decided that I’m going to work on revamping the mission system.
The mission system will most likely have conditions for on success, on failure, and on accept changes that can happen. I have an existing conditions system which I believe I can adapt to working with this new system.
I hope to start working on this new system in earnest over the next few weeks. Hopefully I will have something nice to show by the time this is all done!
One of the biggest issues I noticed at the District Arcade was that there is no status of what is actually on the ship. I’ve been thinking a bit about how to display that information, and I’ve started on an early prototype. Here’s what I have so far:
There is still more to come. In the end, each of the 4 boxes will have some kind of information. I might well change things around, but… It’s a start!
Aside from that, I’m starting to think about how to have a real world map in game. I’m likely going to set up an import map, similar to the exported map I have earlier. If I get a chance, I’ll work on the map import sometime this week.
There is one major thing that I accomplished this week. I’ve been at it for a while, and finally, I present to you, perspective view!
The most difficult part of this was getting the minimap to look correct, which involved considerable rewriting of code.
The astute among you might also notice a new button on the lower left. I’ll leave the exact purpose of this button a mystery, but it will be the major project for the next week at least that I’m working on.
Not a lot else to really give you for now. Stay tuned next week for more!
I was able to accomplish a few things that I have long wanted to do this week. The key update was to overhaul the biome system considerably, converting a large number of code constants in to a config file. I’ve also played with the seasonal shader model a bit, and gave an indicator of the price system.
Each tile is assigned a Biome. The easiest way to see this is via the colors, as well as the tooltips that show up when you move the mouse over the biome, which will give the name. I have long wanted to assign biomes to the ocean and islands, which are used to figure out what resources are produced in a given location. Each plant, for instance, has a preferred biome. While I was at it, I also changed the moisture parameters to better balance the desert areas. In the end, this is what I ended up with.
Note the random “Tropical” seas that are lighter in color. I also added biomes for lakes and islands, so that northern islands will be different colored then other locations. I’m still going to do some tweaking, but that will come later.
I also spent time to set these up to be extended easily. While I haven’t yet set up most of these files to be modable complete, I have things set up such that they can be easily converted to a modable design. Things like new goods, ships, biomes, world generation parameters, and even goals will be able to be set up via some light modding, although I might not have how to do so well documented, at least at launch.
Another change you might notice in the above image is the top and bottom parts of the map are darker. I’ve added a system to take into account the lighting based on the axial tilt. To accomplish this, I did some tweaks to the shader. See it in action below.
Lastly, I wanted to give some kind of an indicator if a price is good when you are at a trading post. I’ve indicated “Red” for a bad price, “Green” for a good price.
As you can see, this particular port has cheap goods, which makes selling anything for profit as difficult. It will judge the prices against prices that you have actually seen, so be aware!
This week I’m planning on making the camera into a perspective camera. Just to give you an idea of what it will look like, here’s a snapshot of the progress. I’m also going to manage the biome localization, and possibly start working on the real world map.
I started a project this week that I’ve been wanting to do for a while. I’ve wanted to visualize how my world appears in terms of the key parameters I generate, namely the Altitude, Temperature, and Moisture, and to a lesser extend Wind. In so doing, I set a system to save an image of the world, which I likely will use in other places, likely for doing pre-generated worlds. Such an image looks like the following:
A typical world looks somewhat like this:
Basically I made the distribution of mountain peaks follow more of an exponential decay, such that the highest peaks are quite rare, leaving most of the land quite flat. Before the terrain was much more uniform, only slightly tapering off at the higher elevations. In other words, I tried to make it look something like this (For the above sea levels, at least)
The temperature mostly follows the latitude, but I have a parameter to tweak it by a number of degrees per km of altitude. Currently I have that set to 7, and I basically tweak it to preference.
Currently I do not have all of these parameters available for edit to the outside world, but I should be able to have them soon. Expect that coming soon!
Among other things, while do doing I fixed the bug that sometimes happened where there would be a very plain looking world, with little coastal features. While I might do a bit more tweaking of the world generation system, as a whole I am much happier with it now then I was last week!
The item of most concern with the world generation remaining is the fact that the moisture is still too high. I’m planning on working on that during the coming week, hopefully something will come out of it that looks much better!
I also did a bit of tweaking of the cost of goods, which should reduce some of the strange issues I’ve seen. Haven’t fully tested it out yet, but I’m happy overall with the way things are going!
I’m likely going to give away a copy of a class on Unreal Multiplayer development in one of my streams. Follow me on Twitch to find when I stream, and maybe you can win this course!
I’m amazed at the amount of improvements that I have been able to make after having playtested Colonial Sea Trader. It is a much improved game over where it was only a week ago, thanks to the good feedback that I was able to get, between being put in to the situation of having the game ready to play, playing it, seeing it played, and getting some direct suggestions from people.
Most of the feedback I personally collected was in the forms of bugs. I noticed a lot of things that most players didn’t, like the money could sometimes become negative, the load time was huge, the fonts displayed were wrong, and quite a few other things I noticed by watching people play. These I made some huge improvements on, and I can say that many, if not most, of these issues are addressed!
I already wrote a whole blog article on it, but I’ve improve the loading speed immensely! The load time now is only a few seconds, as you can see from the below game dev vlog.
The other big improvement is the price list, which now allows for selecting items to be prioritized. I also did a few other tweaks to how it looked, and you can see an example below:
For the next week, I’m planning on doing streams both Monday and Tuesday evenings, working on improvements to the selling dialog, some kind of a way to indicate if the good prices are better, some tweaks to the pricing model, and other UI type changes.
Aside from that, the biggest thing I’m going to work on is if I only want to allow moving to cities, and what that might entail. I am increasingly thinking that I will only allow moving to cities and other points of interest, and not just traveling to any point, but I’m not completely sure. At the very least, I will only allow moving to a city if a city is within a few tiles of a city. Let me know what you think!
One of the biggest issues I noted from the District Arcade was that the load time was absolutely horrible. I haven’t seen the same effect when I run in the Unity Editor, which was strange. Looking in to things, I remembered that I load the distance between cities in the built version, but I skipped it in the editor to save a few seconds. I allowed that bit of code to run in the editor, and proved that in fact that was the issue that was causing the game to take so long to load!
Okay, so I had figured that out, the next question then was, how can I improve it? I ran the Unity profiler, and noticed that I had a very large amount of GC memory. I figured I would try to reduce that memory footprint.
I should add that I’ve open sourced my A* algorithm. This algorithm fundamentally requires that each instance uses a class to represent that data. That whole class was included in the data queue. This could result in huge amounts of data! I decided to reduce the node to something simple that was queued, that pointed to the main node.
These smaller nodes allowed the system to run much faster, using about 10% of the memory! Running this on my computer brought a start from about a minute to about 15-20 seconds, which while acceptable, is still a long time.
Next I worked on threading. I set up the per-calculated data system in it’s own background thread, started at the earliest moment that it can be. This caused some really serious background effects. I had limited threading support in the A* algorithm. While trying to improve it, I realized I wasn’t releasing the mutex after using it. Once I started releasing the mutex, the speed delay dropped to something useable, but still a bit jerky.
Finally, I looked in to optimizing the algorithm itself. Looking at it, I determined that I had quite a bit of space that I really didn’t need to store. I reduced the data by half that is stored, giving even more speed boosts! I can now create a typical world in about 5 seconds! The jerkiness seen above disappeared almost completely!
The bottom line is, when you have something that is taking an absurd amount of time, using the profiling tools available to you, and other tricks to try and figure out how to improve your performance. You can really dramatically improve things!
As I’ve been mentioning for the last month or so, I had the opportunity to present Colonial Sea Trader at a local indie gaming convention, the District Arcade. It was a very interesting experience, and I learned a ton from it! It was quite encouraging to see people play my game, some of them for upwards of 20 minutes, and some of them better then I’ve ever played the game so far!
First of all, a few things that I wish I had done. I particularly wish I had tested more on my demonstration machine. I found a few issues that only showed up on the test machine on the day of the convention themselves which proved to be quite annoying, namely that it was far too slow, and particularly that reloading the game tended to just not work. I’ve started working on those, and I believe with only a little work I was able to identify the cause of the restart crash, but I wish I had done that before!
I learned quite a few things. I brought a notebook, and took two full pages of notes while watching people play the game. I noted areas that people clicked that didn’t do anything, confusing things that people didn’t understand right away, and generally speaking tried to help them to do the right thing. In the end, I managed to find quite a few things, of which I’ve already fixed about 20% of them.
The biggest thing that I noted that people wanted to do was to click the background to dismiss a dialog. The good news is, it now works!
Other items include continuing to improve localization support, fixing the minimap clicking that wasn’t working before, and making signs transparent if the ship is behind them.
Lastly, I fixed the scroll wheel support such that it isn’t as slow as it has been. I personally used other ways to scroll, so that was quite helpful to see.
To end on a positive note, I had at least 4 people who really seemed to like my game who played it, and quite a few others that gave some really good feedback. If you are one of those who played Colonial Sea Trader, I thank you very much!
This week I’m going to continue to tackle the slowness that happens on the start. I found some of the issues, but I’m not there by a long shot. I’m also going to consider adding some controller support, which should allow me to improve things otherwise.
I did two videos this week, one just showing the game play, and another sharing my experience in voice my experience at the District Arcade. Check them out below.