Friday Blog 144 - Do you want Artificial Extinction?
A couple of months ago, someone from our Discord sent me a PM with some questions about Steam Announcements. He was asking for a friend who was developing a game. That’s how I got into contact with the developer behind Artificial Extinction, a new game that released exactly one week ago. The game quickly scored a “Very Positive” rating according to the Steam Reviews, and it’s well deserved, especially for a game developed single-handedly in 14 months!
We decided to team up and we’re both hosting contests. Here, you can win 1 out of 10 free Steam Keys for Artificial Extinction. At their place, you can win 1 out of 10 Steam Keys for Colony Survival!
Artificial Extinction takes place on a distant, alien planet. If you want to journey there, you’ll first have to make the world of Colony Survival look remote and extraterrestrial. Here are the exact rules:
The contest lasts nearly two weeks, until Friday April 3, 10AM Amsterdam time.
You participate by uploading one image of your most alien looking Colony Survival world to #submissions on our Discord
Discord allows you to add a text description to images. You’re allowed but not required to make use of this
You’re allowed to use Photoshop to adjust, manipulate and merge screenshots
You’re allowed to use texture packs and mods
You’re certainly allowed to manipulate the terrain generation
Zun, Vobbert and I will be the jury and pick our ten favorites. The winners will be announced in April 3’s Friday Blog!
Statistics
Work on statistics has continued, and we’ve made good progress. A new algorithm is used to generate the lines, which makes them much more smooth and less pixelated. There’s an option to show only “deltas” - which means you’ll see relative changes to the stockpile instead of only the total number of items in the stockpile.
There’s also a new system where you can highlight specific items by hovering over time. Last but not least, Zun did some massive refactoring to prepare the graph for other kinds of data different than “# in stockpile” - data like happiness.
Last week, we had screenshots of the work-in-progress Statistics Menu in the blog. It was a messy combination of many thin, pixelated lines. It required a lot of technical work behind the scenes to make it work, but it wasn’t very clear or beautiful.
Well, that’s obviously a problem so we’ve tried to improve that. It’s going in the right direction! Here’s a screenshot of the current menu (only available in an internal testbuild):
You’re now able to select and deselect individual items. That makes it a lot easier to discover the specific trends you’re looking for. Using this system for a moment does instantly lead to the desire for a decent amount of improvements:
More info on the axes, changing the color of the background to indicate whether it’s day or night
Displaying information that’s not ”# in stockpile”, data like “total amount of calories”
Making it clear which items you’ve selected even if they aren’t visible in the window on the left: perhaps something like the mock-up below
So there’s still plenty of work to do, but that should result in a very useful Statistics Menu!
Mock-up, not functional yet
[Colony Survival news ends here]
Virtual Reality
The fundamentals of hardware for gaming haven’t changed in at least twenty years. You’re going to need a keyboard & mouse or a controller and a stationary rectangular screen, and that’s it. There have been all kinds of attempts to innovate like Wii-style motion controllers, Kinect and 3D screens, but these trends have stayed small or even died down again.
There have been attempts to introduce VR headsets for a long time now, but they never seemed to gain a lot of traction. They had all kinds of problems: they were expensive, the resolution was low, in-game movement was difficult and resulted in motion sickness, there was too much lag. And there was a problematic vicious cycle: because barely anybody owned VR headsets, there was a shortage of decent VR games, and because of that shortage of games, nobody bought VR headsets.
But we might be reaching the knee of the curve, and VR might become a lot more popular in the coming years. 2019 saw the release of popular VR-only games like Boneworks and Beat Saber, and in ten days Half-Life: Alyx will release. Last Monday, the Valve Index, Valve’s new VR headset, became available for purchase in Europe [again, apparently, after earlier stock was depleted a couple of months ago]. I instantly tried to order one, but the product is so popular that I was put on a waiting list. The shipping time seems to regularly change between 2-4 weeks and 8-10 weeks, so there’s no telling when I will finally be able to use it, but I’m really looking forward to it.
The implications of VR are more than just ”strapping a screen to your face”. Nearly all (‘traditional’, non-VR) first person games work by letting you rotate the camera with your mouse, and allowing you to interact with the thing in the center of your screen. And that interaction is nearly always constrained to pressing a handful of mouse buttons and keys like LMB and F.
Now, don’t read this as criticism of Arma - I love it tremendously and will purchase the $100 Deluxe Edition of Arma IV as soon as it’s available for pre-order. But Arma is a great example of what happens when you want a complex world with many options with traditional hardware. When you want to open a door, you’ve got to look at it, press a button, and select the right option from a list. It’s not very natural, intuitive or smooth. (Hardcore Arma fans will correct me that there are shortcuts, and that’s probably true, but the core of the problem remains)
The Valve Index comes with two motion controllers that track their locations in 3D space, and they know with which fingers you’re touching them. This means that you gain a lot of the freedom of motion you’ve got in real life. You don’t have to look at the thing you want to interact with: you can look to the left while firing at a zombie to the right. And instead of reducing interactions to mere button presses, you can do things like a physical grabbing motion in real life which will be correctly repeated in-game. This opens up a lot of new gaming possibilities.
Don’t expect instant VR-support for Colony Survival. This is a long-term thing. We started working on this current project in 2013 - so our first VR-product might be a 2027 thing.
Covid-19
Two weeks ago, we wrote quite extensively about the new Coronavirus. We worried about it a lot that week, and we felt like we were an outlier in a world that wasn’t really concerned. Well, today everyone seems to be very worried, so writing about our own worries here doesn’t really add much. Some statistics for posterity’s sake:
804 confirmed infections in the Netherlands (+31% since yesterday), 10 deaths (+50% since yesterday)- smoothly following a curve that results in Italian situations in ~2 weeks
And new since last week, 6 infections in the province where we live, 3 in the city where I live
The amount of infections and the consequences for events, the economy and daily life are rapidly growing. Luckily, governments and other organizations are taking measures, and countries like South Korea show that these can be highly effective. We wish all of you good luck and good health.
We made good progress on statistics this week! It’s definitely not finished, but the underlying systems are mostly functional and they're giving interesting results.
There’s an increasing number of options. It’s now possible to display results from the past 24 hours, the past four days, or the past 24 days. There’s an “Auto-scale” option that automatically adjusts the graph to the size of the most numerous item. But there’s also the alternative option to use a custom scale, limiting the graph to only display items up to a number like for example 100 or 2000. Many older colonies will have large excesses of certain items like straw or leaves, making an alternative to auto-scale very useful!
Last but not least, there’s a toggle to “Only show changed”. Some items like dirt and torches can stay unchanged for a long time, resulting in pretty meaningless horizontal lines across the graph. This toggle allows players to quickly remove them from the results.
The image above is an example of the current work-in-progress menu (only available in internal testbuilds). You can see that the first one-third of the graph covers nighttime, and it’s clearly visible when colonists start working. Most lines are stagnant during the night, but you can see the amount of gunpowder pouches and lead bullets drop, while the amount of linen pouches rises: the clear effect of musket guards.
But other data is pretty unclear, a lot of the lines are hard to “read”. So that’s our task for the coming weeks: make this more useful and legible. There will be an option to turn on/off specific items and categories, you should be able to highlight items by hovering over them, we’ll update the look of the lines and the colors and the background.
There’s also some other data we’d like to track and display. One thing Zun really wants to know is the %-idleness. How many of your cooks/blacksmiths/etc are idling because they miss ingredients or have completed all orders, and when? You can imagine some jobs working hard at the start of the day to make projectiles, but spending the rest of the time idling. Having that data would be very useful to optimize your production.
A longer period of time is visible in this graph
Corona
Last week, we wrote quite a bit about Corona. When I started writing that blog, we had just received news of the first infection in the Netherlands. Yesterday, the amount of officially confirmed infections here jumped from 38 to 82. During the same day, Italian authorities confirmed that the amount of mortalities there jumped from ~100 to 148 (with nearly 4000 infections). And just before writing this blog, Corona claimed its first deadly victim in the Netherlands.
Last week’s blog received quite a lot of reactions. Some people shared the same concerns, others thought people panicked way too much, and some wondered why a development blog about a game talked extensively about Corona.
To answer that last question: there’s multiple reasons. Firstly, we’re Dutch while a large part of Colony Survival players seem to be located in North America. Europe was initially hit more severe than North America, and it seems that Corona got relatively little attention there while we were pretty concerned about it. We wanted to explain our local problems to people who didn’t know about them yet. Since the last blog, Corona has spread further in the United States as well and it seems to be getting a lot more attention there as well now.
Secondly, we’re not a massive studio with offices spread around the world. We don’t have separate departments where one focuses on game development and another focuses on practical stuff like health risks, human resources and risk management. Companies like Twitter have announced all kinds of measures to deal with Corona, and I’m sure they’ve got experts who are currently focused fulltime on this problem. Every hour we spend researching, thinking and talking about Corona is an hour where we’re not doing the same thing in regards to Colony Survival. And I can assure you that we’ve spent quite a couple of hours worried about Corona.
We’re not worried too excessively - even if we personally get infected, it’ll probably act like a regular flu because we’re young and healthy. But this is the first time in our lives that we experience a epidemic like this, and the quickly rising number of deaths is pretty scary. We’re worried about more vulnerable older relatives, and problems like hospitals getting too crowded to deal with both Corona and regular health concerns at once. So we expect Corona to stay around the coming weeks and months, which will probably have some impact on the development of Colony Survival. We’ll keep you updated!
Last week's blog again generated quite a lot of feedback! We've read a lot of useful suggestions. Thanks everybody for the continued support!
Sadly, we didn’t make much progress on statistics this week. On the weekend, Zun got an idea about Unity’s Burst Compiler, and he spent much of the week trying to get it to work. The image below is a screenshot of that little project.
Like Zun, I’ve been working on a little voxel project. It’s teaching me a lot about Unity and programming! Here’s a GIF of the project.
Corona & the Netherlands
Last Sunday, I was driving in a rented van listening to the radio - something I seldom do. The news came on and it reported about Corona in Northern Italy and a rapidly rising number of infections. We had seen pretty terrifying videos from China, but China is far away. Northern Italy is only 11 hours of driving removed from us here in the Netherlands. I got a bit concerned.
In the following days, reports of Corona infections came closer and closer to home - soon arriving in German regions close to the Dutch border. Last weekend, people in the south of the Netherlands have been celebrating carnaval, and there were stories of Corona-infected Germans participating there.
Yesterday evening, officials confirmed the news: a Dutch person has been infected in the south of the Netherlands. He and everyone who he has been in contact with will be isolated.
That might be the end of Corona in the Netherlands, but it seems unlikely. The amount of infections outside of China is growing exponentially, and a handful of people have quickly spread the disease to many hundreds in countries like Italy. That first Dutch carrier has probably already infected others - who have also infected others.
Which means that right now, we might be on the precipice of a massive wave of Corona in the Netherlands. But there are a lot of unknowns in regards to Corona. What’s the exact mortality rate? Do only people with severely weakened immune systems die, or is it capable of killing healthy and younger people as well? Are Western nations with modern healthcare systems able to nip this in the bud, or will this eventually infect a large part of the population? Relatively mild scenarios are possible, but more severe scenarios aren’t unrealistic either.
[At this exact moment we learned about the second confirmed Corona infection in the Netherlands. It’s separate from the person in the south of the Netherlands, it’s somebody who had also visited northern Italy, and it’s a person who lives in Amsterdam]
Apart from the disease itself and its deadly consequences, there’s another problem. Systems are being disrupted. Supermarkets already face shortages of products like disposable gloves, disinfectants and rice. One of the biggest Dutch online retailers has pulled its advertising and raised its prices, fearing disruptions in the supply line from China. And of course we’ve seen footage of deserted cities where everybody is forced to stay indoors.
So we’re a bit anxious about the near future. Should we stockpile food and other supplies - and if so, how much? Should we already try to self-isolate as much as possible? They’re tough questions with unclear answers. We’d love to know how you’re dealing with this problem! I hope you understand that this news has been a bit disruptive to our workflow.
This week, we released the last two 0.7.2.x updates and started working on 0.7.3. The updates contain some minor fixes (check #small-patch-changelog on Discord) and an overhaul of the personal torch. It now uses the same system as stationary torches, significantly improving the visuals. When you’re playing with others and they activate their own personal torches, this will actually be visible in your world! And that includes the colored effects of the lanterns. An example of this can be seen in the screenshot above.
For 0.7.3, Zun has started working on statistics! They should give you a lot more insight into the long term trends of your colony. Which resources are increasing, which items are depleting? The image below is very primitive work-in-progress after only one day of work; the end product will look very different.
Last week’s blog was a long complicated rant about some of the weirder aspects of game design. It got quite a lot of comments - thanks for all the feedback and encouragement! :D So by popular demand, I’ll try to write Into Weirdness II. It’s a complex and fuzzy subject, so be warned: this might get vague.
Zun and I haven’t done any formal study related to game design or development. But that didn’t mean we were completely unprepared. We did have lots of experience with computers and games, including messing around with videos, websites and audio. I had quite a bit of experience with photography and Photoshop, which proved highly useful for making textures. I studied history and have always been interested in the general development of civilization - focusing on long term trends instead of specific kings and generals. We think that definitely shows in Colony Survival.
What this means is that we found useful information and inspiration in all kinds of random and unintended ways. One clear example: Fort Bourtange. It’s a star fort located close to our birthplace and we’ve visited it often. Here’s a photo:
I don’t think I was conscious of the link between Colony Survival and Fort Bourtange until literally five minutes ago. But now that I notice the link, it seems extremely relevant. We’ve spent plenty of time exploring a small historical village surrounded by multiple layers of walls, moats, gates and bridges when we were young. And then we decided to spend years working on a game that’s focused on building a village-fortress with walls and moats. I don’t think these two things are unrelated!
So obviously, inspiration like this is extremely valuable. But you can’t just order a manual that contains pure concentrated 100% Extremely Valuable Game Design Inspiration. You’ve got to go looking for it in all kinds of random directions.
In the past, I was inspired by random places, hobbies, games and TV/movies. In 2017/2018, I’ve barely played any games that weren’t Colony Survival. But in the past twelve months, I’ve played a lot of new games. Not just for entertainment (although that was certainly part of it), but with a deliberate aim to study and learn from them.
One could do this in a very careful and systematic fashion. Make a list of games, make a timetable, play each of them for 25 hours and write a detailed report on UI / gameplay / graphics / sound. But that can get boring and because I did this in my free time, I didn’t want to make it too much of a burden.
So I played randomly and erratically. Ragequitting one game and binging another. So perhaps it became more a study of me than of the games. Why do I want to keep playing game X? Why am I bored of Y? What’s frustrating me in Z? Giving detailed, realistic and accurate answers to these questions is harder than you think! A majority of human decisions and preferences are unconscious, and fully explaining them verbally/consciously is very difficult.
Of course, this mindset can be applied anywhere. We’ve got a lot of options in the way we run our company. How do we communicate, how do we use marketing, how do we build a community, what’s an interesting story, what is a beautiful building, what is great music, what’s a good trailer - all of these questions have relevant answers that would be useful to us. I notice that nowadays, I’m constantly deconstructing a lot of what I see ánd my own reactions to that, and seeing what I can learn from that.
A while ago, I watched a video that I still regularly think about and that seems highly relevant. It’s a one hour talk by Jeff Vogel at the GDC. I didn’t know him or his games, but he’s been an indie dev since 1994 - and has kept his small company afloat that entire period. Instead of promising some Quick Tips to Instant Fame and Wealth, Vogel just talks about his experiences and lets you do the concluding. In some ways, he’s extremely different from us. He gets really demotivated from online criticism, so he barely has any interaction with his community. He releases a game, checks bug reports, fixes that, and goes on to the next game. We work in a completely different way - we read pretty much everything that is directed towards us and even scour the internet for discussions about Colony Survival. But if it works for him - it works! There doesn’t seem to be one perfect way to approach this, with all others paths being invalid. Here's a link to the video:
https://youtu.be/stxVBJem3Rs So, let’s act like all these things are related and write a nice summary for this. In 2017/2018, the sudden success of Colony Survival was a bit of an “emergency”, and we worked hard to pick all the low-hanging fruit, all the simple improvements that could ASAP boost the fun of the game. Since then, things have started to shift more towards “long term mode”. The emergency is over so we’re establishing a routine. Simultaneously, the low-hanging fruit is gone so we’ve got to build a ladder, allowing us to reach higher than before. Making this transition requires us to go “Into Weirdness” into some areas. Does that make sense? :)
Zun and I are pretty big fans of logic, rationality and research. Before committing to something, e.g. a diet, exercise, buying a product, we're used to doing a decent investigation. What are the "rules" of weightlifting? What are the best and worst food options, and why?
Of course there's a debate about these subjects. But there are still very important truths out there. Having some muscles and endurance is good for your metabolism and hormonal systems. Deadlifting with an arched back is terrible. Processed food with lots of added sugars and fructose aren't good for you.
I've got a background as a historian, Zun mostly has programmer experience. These are pretty rational and constrained fields. It's very clear when the performance of a code has been optimized - or when it has gone in the wrong direction. Napoleon didn't use tanks or weaponized dinosaurs; the Romans didn't have an electrical grid or airplanes. You know the direction in which you want to go, and you know how to get there, you've just got to do the work.
For a large part, this still holds true for Colony Survival. We've got a relatively clear idea of where we want to go, and there are standards for success or failure. There are some 'rules' in regards to which games are good and which aren't.
But parts of the job are pretty vague. We're not making a product with a clear purpose like "transport persons/goods", "provide shelter", "generate energy" or anything like that. We're producing "entertainment". And where stories have to be engaging and theater productions have to be visually impressive, games are... weirder. It's perhaps closest to a puzzle. Although solving the puzzle is the goal, this shouldn't be an easy straightforward task. Having to put quite a lot of time and effort to overcome the puzzle is a big part of the appeal.
Now, if you get a bit disappointed when we describe Colony Survival as a puzzle game: I understand you completely, I'm not a fan of explicit puzzle games either. I love a good challenge, but it needs to "dress up". Crusader Kings could probably work as some kind of "pure" puzzle game where you've got to fill an abstract map with your color with some clever maneuvering, without any historical theme. But a big part of the fun is imagining that you’re a royal family that’s marrying, scheming and backstabbing their way to power, wealth and fame.
In fifteen years of time, roughly our youth, we went from Wolfenstein 3D (1992) to Call of Duty 4: Modern Warfare (2007). Wolfenstein was an experiment in 3D graphics and severely limited in all kinds of aspects. In CoD4, everything was possible. Loads of enemies, crashing helicopters, nuclear explosions, multiplayer. Now, I don’t want to insult CoD4, it’s very impressive in lots of ways. But this stunning technological progress might’ve also led to some wrong ideas about good games. The value of a game can’t be measured in the amount of polygons, the size of the explosions or the length of the cutscenes. Ultimately, it’s 100% subjective. A theme that might fascinate one person might repel someone else. Something that’s difficult to solve for one person might be very easy for another. One person might like the fact that it’s easy while the other hates the lack of challenge. One and the same person might be interested in a challenge some periods of the year or times of the day while preferring easier games the rest of the time.
The sane answer might be to look for averages, to appeal to majorities, or to look at what’s popular. That might be wise to do when you’re selling for example a house. But here’s the catch: every house is unique by the virtue of its location. If you want to have a home with size X in Manhattan or near that awesome forest in the mountains, there’s only a limited amount of options. But that’s not true for games. We’ve got to compete with tens of thousands of different games, and they’re all infinitely available - Portal is not going to run out of copies this year.
So if we’re going to do the sensible, average thing that appeals to majorities, we might be in direct competition with dozens or hundreds of similar games. This turns things around: the sensible thing might be to do the insensible, to do the thing that nobody else does, so that we can fill a niche that has been underserved.
And if this isn’t problematic enough, here’s the next weird thing to deal with. This entire industry is brand new. Videogames themselves are still young, but large scale digital distribution has barely reached puberty. Ten years ago, I was still prowling through the streets, moving from store to store to find good deals on videogames on discs. My current PC can’t even play discs and I haven’t missed that feature once. The fact that games can be continuously updated with new content instead of having one specific release date is a massive revolution and we don’t know how it plays out yet. It’s been less than three years since Steam was “opened for the masses”. We don’t know what the industry will look like in 2025 or 2030 - yet it’s what my mortgage (end date: 2049, four years post-singularity) depends on.
For a long time, we’ve been looking for the ‘manual’ of ‘objectively good’ game development. Now we've realized that there is no tried-and-trusted in this industry. Everything is constantly changing and there’s no perfect metric that can be trusted 100%. The best game isn’t necessarily the one that makes the most profits, or the one that has the most views on YouTube, or the one with the highest Metacritic score. Whether the Early Access labels helps or hinders us, whether free updates, DLC, a sequel or an in-game market for skins and other cosmetic items is the best option for long term revenue: nobody knows the answer with any definite certainty.
With this lack of clear, objective rules, we need other sources of guidance and inspiration. There’s a lot I could write about that, but this blog is already getting quite long! If there’s any interest, I’ll gladly continue the rant in a future blog :)
Last Week
One week ago we released 0.7.2! Luckily, it has caused no serious problems. Thanks to some helpful players on Discord we did figure out that the new handheld lantern colors didn’t match the actual lantern color. This was fixed in a hotpatch released Saturday evening. Since then, Zun noticed some other minor unintended effects and offsets in the lighting that were fixed in 0.7.2.2, released today. Apart from that, Zun has done lots of playtesting and we’ve been thinking about how to start implementing the planned UI changes. We’re looking forward to making it a lot more streamlined and intuitive!
Update 0.7.2 is now available for everybody! The biggest change concerns lighting, especially torch/lantern lighting. Torch lag was a frequent complaint. Torches aren’t significantly faster per torch now, but they do cover a bigger area. This means you need less torches per colony, which does improve performance.
Ambient lighting has also changed - it’s dynamic now. The game will constantly analyze your surroundings and determine the appropriate level of ambient lighting. This means caves are finally dark!
Another common complaint was the too much bloom / blocks like sand being way too bright in the sun. This has also been dramatically reduced. 0.7.2 contains a bunch of other simple fixes and improvements like this. For example, you can now activate your ‘player light’ by selecting a torch or lantern in your hotbar. Colored lanterns each have a unique effect! Text rendering in the chat menu has been improved, and there’s now a scrollbar allowing you to check older messages.
For a full list of all changes, see the in-game changelog. Let us know how you feel about the update in the comments or on Discord! Does this fix common issues? Do you like or hate the new lighting? How is the performance? Did new bugs appear?
Friday Blog 137 - 0.7.2 Release Scheduled for Next Week
PatateNouille's castle with the new lighting
With the new lighting done, focus has shifted to some small but necessary tweaks. The biggest changes happened to the chatbox - it finally has a scrollbar, among other improvements! Here’s a full changelog of this week’s progress:
Added "/debug texturecheck" - spawns all blocks that have no mesh but have a texturemapping set around you (requires cheats on)
Added "/debug generateiconmapping {path/to/icons} {path/to/mapping.json}" - generates a types json file filled with overrides for types where the icon file name matches an icon file in the indicated folder (requires cheats on)
Added "/debug generateiconmapping {path/to/albedo} {path/to/emissive} {path/to/normal} {path/to/height} {path/to/result_mapping.json}" - generates a texture mapping json file filled with mappings overriding existing ones where the texture files match files in the indicated folders (requires /cheats on)
Added "/colony printhere" - prints a list of unique colonies overlapping your position
Added "/colony setleader {player} [colony]" - sets the player as the leader of the colony (duh)
Fix mods not being shown in the server browser if they did not have a dll associated with them
Redid client chat box: -- Use the new render method for text (no more blurry text) -- Add the ability to scroll, and keep some history
Added the ability to scroll to the server interface log, and keep some history there
Added "/teleport player {name}" - teleports you to that player if found (even if offline)
Added "/teleport spawn" - teleports you to .. spawn
Added "/setspawn" - sets .. spawn
Added rotation support for sending positions to the client
Added rotation support to spawn position setting
Saved player rotation on exit & load it back
Fixed trading menu breaking when making a rule with a few added zeroes to the standard billion item limit
Vary chatbox transparency based on how it's opened
We're testing a private build with a small group of players now. We'll tweak things according to their feedback, and if we don’t run into major issues, we’re planning to launch 0.7.2 next Friday!
The new torch/lantern lighting is pretty awesome :D
As explained before, I’m working to improve my C# and Unity skills, so that eventually I can work at the core of features instead of only supplying parts like models, textures and icons. Last week, I’ve been following Brackeys RPG tutorial. It’s very helpful and I’ve been learning a lot. And it’s really helpful to make me understand what things are problematic in game development - and what things aren’t.
The tutorials explain some very fundamental parts of most games: moving around, interacting with objects, storing stuff in your inventory, equipping and unequipping it. Here’s a short GIF of those things in my little project. But if you’ve got to code these things from scratch, these fundamental things are not easy.
In game engines like Unity, there is not this one single long list of code that determines how stuff works. It might sound silly, but that is how I imagined it! In reality, you can make lots of scripts, and attach them to all kinds of different items. Your enemy probably has his own script, and when he equips a weapon, that weapon also has its own scripts with unique instructions and data. And when the enemy uses that weapon to fire a rocket in your direction, that rocket also has a script that determines how it moves and when it explodes. Last but not least, when the rocket hits an objects and explodes and generates a whole lot of smoke, that smoke is probably also a separate GameObject with its own unique script attached!
As you can imagine, all of these things are related, so all of these scripts have to communicate. The enemy needs to know what kind of weapon it’s wielding, and when the rocket spawns it needs to know the position of the weapon. Etcetera, etcetera. To give an example of a script like that, here’s part of the script “EquipmentManager” in Brackey’s RPG, the tutorial I just mentioned:
This part of the code is called a “method”. This means it’s a special part of code that can be invoked somewhere else, by for example pressing a key or a button on the screen, which then executes all of the code in the method.
The name of the method is “equip”, which makes sense, because the method is used to equip stuff. Between the round brackets is written “Equipment newItem”. This means that the method accepts anything labeled “Equipment” as input, and that input can be used in the method with the keyword “newItem”.
This means that somewhere else I need to have a script called “Equipment”, and that script is used for items like “Equipment Helmet” and “Equipment Sword”. These can now be equipped by calling the EquipmentManager, invoking the Equip method, and entering the name of the specific object, e.g.: “Equip(Helmet)”. When called like that, the method will use the referenced item and its properties wherever "newItem" is mentioned inside of the method.
In the second line of code (don’t worry, I’m not going to do the entire block line by line), it defines a new Int, a number. This new Int slotIndex is set to newItem.equipSlot. This means that the Equipment script contains data called “equipSlot”.
As you can see, all of this code is highly interlinked. On one hand, it’s building a lot of structures to store data. On the other hand, it’s a complex set of interrelationships that modify and transmit that data from one place to another. And in general, these interrelationships are pretty “dumb”. The Equip() method requires Equipment specified in exactly the right way, otherwise it won’t work. This means that changing one little thing in one place might mean having to fix a dozen or a hundred other little things in as many different places.
I hope you can imagine why that can be very difficult to set up and change. The example here is from a very simple tutorial prototype, but “real” games also have to deal with things like multiplayer, savegames, translations, key bindings and mods, making the structure even more complicated.
It’s a high price, but it does come with enormous benefits! Programming scales really, really well. Compare writing 1 Friday Blog vs writing 100 Friday Blogs, walking 1 Mile vs walking 100 Miles, preparing 1 Meal vs preparing 100 Meals. As you’re getting more experienced you might become a bit quicker, but not a lot. Multiply the things above by 100 and the time and cost involved will probably also increase with roughly that number.
That doesn’t have to be true with programming. Setting up the EquipmentManager in the example above takes a pretty long time, but once that task is finished it’s a relatively flexible thing that can handle a lot of content, as long as it’s formulated in the right way. Adding new swords, helmets, shields and other equipment items with varying stats should be easy. The difference between making sure 100 pieces of equipment can be stored, equipped and unequipped properly isn’t that much higher than the cost of doing the same for 1 piece of equipment.
The tutorial world in the editor, with multiple pieces of Equipment on the ground
So, how are all these technical details relevant to you? Well, as you had probably guessed, Colony Survival also contains a whole lot of programming and scripts and complex interconnected systems. Within certain limits, they’re very flexible, and all kinds of parameters can be adjusted or content added with little effort. New items and jobs similar to existing content require barely any effort on our side. On the other hand, some changes that might sound fairly simple would actually be very costly in terms of development time and/or performance.
This is not an excuse to safeguard us against all changes. But you’ve probably noticed that there are some relatively common feature suggestions that keep getting ignored. For most of them, the reason lies somewhere in the explanation above - changing the system to accommodate that feature would just be too costly. There’s plenty more to write about the practical implications of this. The importance of refactoring, the difficulty with changing the NPCs, etcetera. If you would like to hear more about this, please let us know in the comments or on Discord!
Friday Blog 136 - For the first time in CS History: Dark Mines!
There's now a reasonably functional internal development build of the game with the new lighting system! As explained a couple of blogs ago, Colony Survival has two lighting values: one for direct lighting and one for ambient lighting. These values change throughout the day - to make sure that sunrises aren't as bright as the middle of the day.
The ambient lighting affects everythings in the shadows. These all had the exact same shade of darkness, whether it was the interior of a house or a deep mine. And this also means that you could track the day/night cycle while in that deep mine: the ambient lighting would pretty obviously change during the day.
The new flexible system analyzes your surroundings and tries to choose an appropriate value based on that. This means that mines are finally properly dark!
Choosing the right values is tremendously difficult. We've got to rebalance the strength of direct lighting with the flexible ambient lighting ánd eye adaptation. We don't want to change the look of the game too much, but of course we'll improve things whenever that's possible. I feel like sunrises and sunsets have become a bit 'softer' - something I mostly like and slightly dislike.
Bloom has been reduced. This is something that got quite a lot of complaints as well, with things like sand being very bright. I actually kind of liked that, so we'll probably rebalance it a some more in the coming days.
Together with the floodfill torches/lanterns, this is quite a big change to the lighting system. Performance has been optimized a lot. Update 0.7.2 is nearly ready for release, but we'd still like to do some minor UI improvements before we release it.
Last week, we've asked you to participate in our survey. Over 400 people did so. Thanks a lot to all of you! The data is very useful, and lots of you left kind words and/or insightful comments at the end :) Let’s jump right into the results.
94.8% of the voters can see the benefits of our current course, so that’s good news. Only a very small minority was vehemently opposed to our plans.
It’s a tight race between satisfaction with the current art style, and a desire for a bit more realism. The opposite of the last option is a relatively popular third: some players would instead appreciate a more abstract look. Only a handful of players want a radical change from the current style, but this group is split between those who want a lot more realism and those who want to go in the opposite direction.
We’ve also asked a complex question about potential methods of monetization. You had the option to agree with multiple options, so you could simultaneously vote for example “very positive” and “contribute”, or “awful”, “cringy” and “would not contribute”. It was a bit hard to understand, but the results are very interesting - and polarizing!
We proposed two methods of voluntary donations: we could set up a Patreon account, or share a PayPal/Bitcoin donation link. Patreon was considered to be way more cringy and awful than PayPal/Bitcoin - yet the amount of people that voted they would contribute to Patreon was a lot higher than the amount of PayPal/Bitcoin-donators.
The price raise had polarized results as well. Out of 4, it’s #2 in the categories “awful”, “very positive” and “would contribute”. It also has the lowest score in “would not contribute” - which is positive.
Merchandise had more positive results than we had expected, scoring #1 in “would contribute” and “very positive” (and #2 “cringy”). We’re going to think about it and see if we can come up with something that would be fun.
The last three options are a lot less likely than the first four, certainly at the current stage of development. They all scored high in the “awful” category.
In general, a majority of players tend to agree with us, so that’s good news. An exception is the third question about the length of Early Access. We got a lot of detailed responses about that specific question. Some players argued that the “Early Access” label has a negative connotation for a lot of gamers. Because we’ve already got a decent amount of content and relatively few bugs, they thought that it would be better to lose that label as soon as possible.
Others argued that taking your time in Early Access is fine, and that the definitive release would lead to a lot of new players, and that it would be wise to provide them with the best, most polished, most impressive experience possible. We understand both viewpoints, but we tend to lean towards the latter.
The last question led to quite the discussion. It would have been better phrased as ”A moderate price with rare discounts is better than a high price with frequent discounts”. Apart from a discussion about the phrasing, there were also interesting responses about this dilemma. Those who left feedback about this question often shared that moderate prices are more consumer friendly, but that the frequent discount strategy does tend to lead towards more visibility and more revenue. We haven’t had a sale since July 2018, and I think we’re going to take a more balanced approach after the UI updates. When we raise the price to $24.95, there’s room for more frequent 10%/20%/25% off discounts.
The last question allowed voters to input a long written answer. Hundreds took the effort to write useful, kind and often long feedback. I’ve read it all and I really appreciate it! I hope you all know that I read every single comment on every single blog, so if there’s anything specific you want to share, that’s a good place to do so. Of course, we’re also very active on Discord and try to follow Reddit/Twitter/Facebook, but it’s a bit easier for things to fall through the cracks there.
This week's progress
A couple of weeks ago, Zun started working on floodfill lighting for torches/lanterns. He got it to work pretty quickly ánd decently. This week, he tried to apply floodfill lighting to the sun/moon. It has been highly problematic.
Torches only need to keep track of what's happening in ~16 blocks of range. That range is a lot bigger for the sun/moon. If you build a large roof 300 blocks above the ground, that should have an effect on how those blocks on the ground are lit. So every spot in the map has to check countless spots in a long range around it. We're not going to be able to make that work performance-wise in a reasonable timescale.
Zun did think of a feasible alternative. He's working on a system that checks the air blocks in the vicinity of the player. To what degree are they lit by the sun? Do they have a straight connection to the open sky? More air blocks with higher scores translate into a higher ambient light value - this is the value that determines how dark shadows are.
So when you're in the middle of the open desert, the ambient lighting will be pretty strong, meaning that shadows on the side of blocks won't appear as harsh. When you walk into a building, shadows will appear darker. And when you descent into a deep mine, shielded from the outside world by lots and lots of blocks, ambient lighting will be (nearly) nonexistent, making those mines truly dark. That should solve two of the biggest problems that currently exist with the lighting system!
Here's our rough roadmap for the next month:
We hope to be able to share some great pictures/videos of the new flexible ambient lighting in the next blog
We hope to release 0.7.2 1-3 weeks later, which should include torch/lantern floodfill, improved ambient lighting and some minor improvements to the UI (like new sounds in the main menu)
Afterwards, we want to start working on bigger changes to the UI