Here i will add a update to whats happening at the games i develop. The older stuff i will move away to the "old Blog" section.
Due to i found some places without person tooltips, i aligned all tooltips for Persons, so all showing the details. I also added the resource icon to the productivity popup to make it faster understandable.
I also found the reason why sometimes the tooltips were flickering on the top and fixed it.
After that i improved the worker line in the activity, to show the relevant values, so its more clear why the productivity is not so low.
To make later translations to different languages possible, i changed the font to noto. It should support all languages over the world. Personaly i find it not as good readable as the roboto i used before. I played around with the special characters and it was very confusing, when a char was shown or not... There are special font files for all languages, but suddenly it worked with the regular one, even if the browser not showing it... All translation files got now a font value, where some predefined fonts can be used. For now its NotoSans (default), NotoSansJP (japanese) and NotoSansSC (chinese).
To make the development easier, i created a cheat window when pressing F9 with an selected building. It will open a popup to setup the person. If the building has a worker slot the new persons workplace will be the selected building building.
I also added some problem markers for service activities that are not usable, e.g. for used slots and private rooms, to make this more obvious to see.
I also had an idea to improve the change values of the air-values. Most of the times, they are equal, and shown consumer and producers the same, so only one yellow +- value could be fine. While implementing that i found also that it can be good to highlight the larger value if both are shown a bit more, so i bold that.
After adding more and more resource containers, the MultiSelection of many persons looked not good anymore. To improve that i changed the style of the skills to the icon style and just added the basic lvl1 needs to the multiselection row.
I fixed some more things i found in my playtest and played around with more post processing effects. I got a hint from reddit to add bloom, so i tried it again and was able to add volumes and a bloom effect, here the difference:
I also worked on the UI and improved the Buildmenu for BluePrint Buildings. When adding 4 identical items, it showed all including all work details, ending up in a way to large details popup. I added the Interior Items of the Blueprint and grouped them instead.
I also fixed some minor bugs with highlighting and layout of the Shuttlebay. I also split up all building and their storage to separate entities, to prevent bugs with overwritten entityproblems (happens at storage full warning) and removed the details when clicked on a to configured room due to it was blocking the view to the new opened popup.
I'm back from vaccation and back to the game development. After that long break i started a long playtest to see from a more distance view the game. I took 2.5h to finish the game, and as always i found several things to improve, and just 1 crash at the new changed choose activity with a shuttlebay appeared.
I fixed some of the findings. One of it was to randomize the unloading order of the supply ships, so its unloading more different things to the general storages, to prevent e.g. all glass stuck in the supplyship when unloading all steel first. I also found a unity ui bug where the focus out event was not triggered, when the element is removed... So i added a workaround for that.
Afterwards i started with some modeling, i plan to do each day a bit of models, to fasten up the creation of new content from now on. First is the personal desk.
After 2.5 years, I will be now in the first vacation for around 3 weeks 🙂
I wanted to show the reason why an interior item could not be choosen from a player as activity. To make this possible, i added support for the World-Elements on the choose activities. I started to just show the Icon, to build the basic algorithms for it to not use too much performance.
Than it was easy to add the problem why it couldn't choose.
I had an idea, to move the SkillRequirement to the machine instead of the activity. That makes way more sense and brings additional features. So there can be a more simple machine, that is less efficient but requires less skills. So i moved it to the interior item.
Afterwards, i worked on the Person List by adding the needs, skills and the current activity. Also some better "Selected" and "Not available" i have added to it.
I found the combined skill icons not realy nice, so i tried a different aproach by designing uniforms for the icons to have a identifiable work to represent the skills.
I added the Skill Requirement to the UI and thought that its fitting better on the interior, than at the activity. This will make it possible to add more general inefficient machines and machines, that needs experts but are way more efficient.
After adding the colors more and more to the UI, i found it confusing, to have red at a "good"-State, so i tried another style of a known color order: Medals. So the level colors are now bronce, silver and gold. To make silver not equal to the basic white, i changed that to blue.
Thanks to CodeByte i got a lot of feedback here and the final version looks now way nicer:
While creating a small teaser for the Timewarp while building, i used the new estimation hours to calculate a better estimation, so its not slowing down too much. I also got some feedback to the release date and due to KSP2 and other related games comming out at the end of this year, i moved my release date to early 2023.
I continued the work on the Skills and added Activity Requirements to the Configuration and Simulation. I thought how to show that in an easier way, maybe i will add kind of medals
To make the supply popup can show also the skills of the persons, i needed to adjust that a bit. It was also not so good, due to the size of the window changed while adding something. I changed the style and interation of that window, to make it look also nicer and make it easier to add or remove things. To let the player see also details, they are hidden in the tooltips of the weight, space and cost. I also planned the "Landing" Target, for that i will make the launch button smaller and add the target. Maybe i will group the Resources somewhen later when its needed. To make it easy to see whats added, i changed the background color, to prevent forget something.
I started with the Skills of the persons. I decided to have the following:
Each of the category will have a value between 0 and 1. Its improving over time and activities can have a min, max and influence value. The min value is most used for activities, so e.g. a construction activity needs 50% of the engeneer skill, to be able to be done by the person.
The max value will be used later for education, so some way to educate persons can just be done up to a specific level.
The influence value defines how much the skill will influence the productivity in the given work.
I reused the container logic, due to its also a 0.1 value, effected by the activities. To make them easier to work with them i added another enum to the type, so i can define them now as a regular resource, need, advanced need, or now as skill. For the simulation, it will be no difference, but for the UI it can be very helpful to structure and show it different.
I started with updating to the new unity and a newer visual studio. Took a bit time, till the VS settings were back. No idea, how the regular process is, but none of my tries worked so i did it by hand...
The hygiene and fun should be also effected by the activity. But this would lead to very large not intuitive UI for the activity. To make this easier visible, i changed the ui for the activity. Due to there is now more space (due to the storage and other activities are moved out to other interior items) i plan to convert the users from a horizontal to a vertical layout and show the boxes directly at the user. This is also a preparation for skills, what i might plan in the next iteration.
Today i did a last playtest, created the update video and did a release.
I polished the new behavior of the requestpartial at 1% by adding an event at 1% fill state, so its checking the storages when its full enough. While creating tests for it, i found some special cases and fixed them also.
I also added some phone like on/off buttons. They are way nicer and smaller than the text buttons. Due to the small size i added them also for the ones with the productivity, so they are faster to turn on/off. It also alignes the activity styles and should make it for new players easier to understand.
I did another playtest before the release and found some things i want to improve first like adjustments to the metrics of persons, missing icons and this kind of things. I fixed today 10 issues there and keep going. Stay tuned, the next update will be out the next days
I finished the work for the dynamic resources at the purification plant and continued to adapt the tutorial to fit to the new interior selection and workingplace behavior, to be able to release a new version soon.
Also fixed some small isues and polished the changes in the last updates, hide the activities that are not droppable yet and improved some small ui things.
I also finally added a popup to load F11 and error reports in the compiled game version. Till now, when breaking changes happened, it was hard to test them.
I also fixed my infrastructure here. Due to the broken nas, i needed to recover a lot of stuff and make it work again. I could also improve my server stack here, so its more reliable than before.
The part of the dynamic quality was a bit more tricky than the fixed quality, so the input quality will define the output quality or amounts. One example is the purificatication plant, that creates less biomass when the brown water not contained so much. I also added it very simple to the UI, till i have a good idea how to show that in a nicer way i just show the percentage with a resource type specific description of the meaning below. Maybe each type needs their own icons for the quality to show the content: Biomass for the BrownWater, Iron for the iron ore and stars for the food.
The hygiene uses the sink to increase the hygiene, like in reality, they using washcloths to keep this high in zero gravity environments. To make the difference to the drink activity, i created a new water dispenser model instead.
I also found my NAS not working anymore, so i need to spend some time on my infrastructure to recover the data and get it work again.
I started to implement the resource quality. It was more complex than i thought, but it seems working so far. I started to use it for the new wash activity with fix quality adding. So toilet will fill up 100% "quality" (with a lot of potential biomass) and the shower would fill it with 0% quality,so it just converts the water to brown water without biomass.
I updated the blueprint tutorial to work with the new configurator and finished the adaption needed for the med bay. The old mechanism would just let a customer use a service, when it will work with the customer. Due to this is similar to the workers, the med bay would never work. Workers reject, due to no customers and customers reject, due to no workers. Now they check if the current problem is the customer to work. Now the work is available when the customer laying on the bed. Big thanks to BlueSky-wr for the Bed Model
I thought also how to implement the washing. The problem is, that all resourceboxes of one type contains the same mixture of atoms. So there is no way at the moment, to split a heavy dirty water from the toilet from the washing place with way less biomass resources. I thought about several aproaches, from just adding a quality value over complex resource types, containing others.
After thinking how to implement the more complex solutions and struggling with a lot of things already, i decided to go with the simple "quality" aproach. So each Resource gets a Quality. Similar as now the "effected by efficiency" (where interiors can reduce e.g. the energy) i will add an "effected by quality". The limitations of this would be that there can be just one quality dependent input of an activity, deciding the other values with that setting. Quality related can effect some atoms of the resource, so e.g. the shugger part of the CookedFood, or the "stone" part of the IronOre harvested in later stages from the moon. It will not be possible to create a general "Ore" or "Garbage" resource and each resource can have exactly one Quality.
I added some tests for the new Resident and Interior feature and adapted the multi-selection view to group the activities and sum up the customers and workers, to deal with many activities. I removed the storage, to make it shorter. If someone used this, please tell me
My family is now back, so i take a few days vacation.
In the morning, i fixed the problems with the shuttlebay. Due to the very big changes in the last time, a lot of things were not working anymore. The partial Resources were not send out so i changed it so this effect should just for real working storages, so for Dock and Shuttlebay also partial ones will be pushed out.
To make the Configurator better with large Buildings, i added a grouping to the Interior items.
After that i created a new Room overview. Due to the resent changes, there got more and more activites in a building. The last change now splits the activities up and makes it unusable. To solve that, i decided to show now directly the interior. Due to each one had a separate activity, its a nice matching and i could show in one line all important details of it. Due to the Storages are also interior items, they got a small version of the storage ui, including the connections. Its not visible in the screenshot, but the worker and user slots are also visible next to the problem icons.
I also started to migrate the shuttlebay. I broke it when i changed the interior-activity mapping. I started to fix the outdated model, added real lights in it and also updated the shuttle.
I add a filter for the choosable icons for the buildings, so just useful icons for a Crew room are shown there. I thought about adding a "All Icons" button, but i will not do it for now, till some players requests it
I also added the new edit icon behind all changable names, to hint that its changable. Due to i added these nice popups tooltips to change something, i also added them to the floor and wall setup and converted the style of the upper configurator part similar to the other detail panels. Thats also a preparation for the more complex floor/wall part when adding environment in later stages.
Today, i updated the trailer by using the new font, added a lot more buildings to have a large ship and polishing some animations. The trailer ends now in a better sun lighting and the game speed is also reduced, due to some reports of sickness due to the spinning background
The rest of the day i needed to fix my infrastructure. The webpage update leads to a problem with GIT LFS, leading to a problem that the Gitea Server not starting anymore, leading to postgress not starting anymore, than jenkins failed again... Horrible... But in the end it worked again.
Today i cleaned up all the test and the obsolete things, collected due to the big changes over the last year.
I worked on the mesh splitting algorithm to finaly get rid of these holes and render issues there. I found some small merging issues and problems in some special cases. I also found a possible problem with rounding issues with that i could get rid off. I also changed the strategy how to cut the new created rectangle so less verticies are created. For this example it got down from 58 verticies down to 48.
Due to the new gameplay to let drop everything in a room, the icon was not usable anymore. So i added a set of preconfigured icons to be selected by the player. Also with a small pen icon to show the edit action. To make this nice i added a special TooltipPopup, that is like a popup, but not centered and adjusting like a tooltip.
After all of that i thought how to implement the environmental effects, to prevent dropping big machines in a crew room. I came to the conclusion that it will not work well and easy enough. I searched for other games doing similar, but most of them have specific rooms with some limitations to drop things. I decided to not add another new game mechanic experiment and go with the usual approach. Each Interior has now a list of rooms where it can be dropped. Most of them will have exactly one, the environment have nothing to allow it everywhere. Thats simple, easy to understand and fine enough 🙂 Environmental effects are maybe added later, so the noise or smell will spread out to other buildings effecting the efficiency there. I merged some of the buildings, so bath and crewroom will be one, but i keep the idea of the different icons, so the player can still choose it for more flexibility.
It also helps to reduce the amount of droppable items per room, so its easier to decide in the menus and split them to more menus.
I finished the last performance updates on the ChooseSystem and continued with improving the next performance improvement for the PersonOverview. It took 0.7ms in startship, but was not parallel executed and it took way longer on a larger ship. To make this easier work, i added a better support for jobs to the VisualElement Update System, so it can also handle JobHandles. In total, this 2 updates gains another 5 fps in the editor (so now 45fps). I also tried it in the compiled version and found 120fps, wonderful
I started with migrating the Force Activity to the new system. Before the player chose the building and getting a popup to choose the activity in the building. Due to the several singele activitis, this is not usable anymore. I changed it to the interior instead, so its more nice to choose exactly where he should go. The send to missions is broken now, due to there is no interior yet, so i need to update the shuttlebay this iteration also to make this nice.
After that i debugged a bit and saw several updates of the UI where is no need for. Especially the chooseActivity cost a lot of performance, due to the button also need to check for possible values to gray out or not. I played a bit with a new approach of hiding the elements by directly removing them from the hirarchy, but with a wrapping approach, so all the code can stay good readable and should still work. The idea is to save all children in a separate list and do all actions on the children also on that list. Intercepting all methods so if its intercepting, the writing tasks are just done on the new list, so all the updates will work even when they are not attached. I added support of my custom Display function for this wrapper, so its directly informed about the display state and added it to the 2 elements that used for all panels, dealing with entitiy updates already.
Before that approach, there were 290 updated things at 37fps. Afterwards 87 updates with 40fps (in the editor). Due to this is all on the main thread, on larger ships, this could have a bigger impact!
After that i came a gain to the chooseActivity. In the Profiler it looked very heavy and i decided to refactor it again, to make it more clean and able to do more work in paralell. After preparing the code by refactoring in several steps i migrated most of them to job based checks, to in a chunked bursted paralell run job all entities are checked. Before it was done on the maintread going through an entity array what is also fast, but run in paralell doesn't care much about the amount of affected entities, so its way faster for larger ships.
I finished the last details of the new construction and maintenance architecture, so its now default, that the separate works will all work on the same building.
After that i worked on the Problem Overlay Icons, and added an algorithm to find a good position: centered above the target entity. I converted the activity problems to the new EntityProblem architecture and polished the view.
I started the big gameplay change by changing the UI of the configurator. There is now a interior menu at the side where the player can drop all possible interiors. The work is now handled similar as the users of an activity and its added just when a person is walking to or working at it. The persons search ship wide for activities, they can work on (so same as for the services). To make it still work similar as before, i changed the workingActivity to a workingBuilding, that acts as a work activity filter, so it just treats the activities inside of a building. Later i will add more filters like the activity type.
It goes pretty good, without much trouble, also the test updates were still way faster than expected. The main difficulty was to make the persons move to the work, when a work is available. Due to its not assigned workers anymore it needed to handled different. By updating it, i found that i should give the merge of the different activity kinds another try so the code there is cleaned up now.
After that i rethought the current complex logic of building and maintaining and updated it to newer systems i created in the meantime. While changing that, i also reworked the construction effort calculation. Till now it was calculated by the construction building. The display was a bit confusing for the players, so the "work left" meassured in hours per worker and 100% efficiency was too confusing. I changed it by adding an "effort" unit that is used as a container with users like the others. So the construction activity is a container user adding "effort" to the construction value of the target building. With that its now also easy visible who and how many are working on a building.
I started to finish the new Medical Bed designed by BlueSky-WR and added it into the game and added an animation to let the person lay on the new bed. This took time, to get back into that animations after half a year.
After that i thought how to implement that new behavior with a worker and a user at the same interior. I thought it can be a good idea to make a last big change to the gameplay of the game by moving the activity to the interior. Current its in the building and the interior items just setting the activities speed, workers and users up. This was caused due to the old architecture, but the refactorings the last iterations make it now easier possible to rethink that concept too. The activities are now separated from the building, the interior are separate entities, the storages support multi activity usage and more. All in all it looks like its the next logical step to do it!
This will have several improvements, e.g. its easy to drop interior items into existing rooms and the animations are more easy to structure, so its easier to decide if lights of an interior is on (e.g. for greenhouse). Each of the items can than handle their own internal containers, to know the state.
The downside of that is that it will effect several other parts, like assigning the person to an activity (so than to a single interior item) is now not usefull anymore, and a new concept is needed for that. One idea is to setup a list of activity types the person should do, like "Construction" or "Grow Plants" and the person search than an interior to work on. The other way would be just assigning it to a room and its searching for things to do in that room. Maybe both and make the room assignment optional?
The next big thing is to replace the current configurator for the rooms, and make it updatable. Maybe the player first creates an empty room and can place things separate, so maybe the buildmenu is obsolete and the blueprints needs to be structured in a different way.
The next big effort would be to change the construction and maintenance activity. Its not longer useful to let the building condition effect the activities, so the activities will get an condition by its own. And the maintenance need also to maintain that interiors.
To drop not finished interiors to rooms needs also a new kind of item construction animation, like the inflatable walls, maybe build it in a tent, or i can think about other shader options to build it mesh by mesh
I thought about the BasicBuildings too, they currently have a possible activity list, but that would be annoying. Maybe the better way is to do another apporach i wanted to add in the next iteration: Environment. The activities are influencing and should be influenced by building values like hygniene, smell or others. I plan to add them like containers and when activities are working, they effect this ones, so in the end: Using toilet will reduce hygiene of the room and the kitchen will stop working when it drops lower than 80% hygiene. With that concept it can be possible to allow the player to build everything everywhere, but he need to be careful what he did.
After another test of a player i released the new version with the new update video, i created yesterday.
I tried to update to the new Entity Version 0.50 of Unity released yesterday, but it looks like its just supporting the 2 year old version... So i need to wait till they are up to date with it and i need to stick to the latest 1 year old version 0.17
I played around with an ambient occlusion filter to add a cheap shadow effect to the interior. Its not heavy visible, but it looks a bit more realistic
I also found another unity bug with the pointers, where some tooltip workarounds happens: When the UI Element is moved away from the cursor, the mouseLeave is not fired. Its just fired, when the mouse is realy moving in that time... So i needed to add another check there to workaround also this bug.
I found another problem with the metabolism restarting calculation in a test. It could run in an endless task loop, when one value is 0 and the activity can not add enough to enable the metabolism. In the game it should not happen, but just to make sure, i calculate this now more reasonable :slight_smile:
I found more graphic bugs related to the changes to use the unity engine instead of my own one... meshes keeps rendering even if the entities are destroyed, showing wrong meshes that are disabled and it looks completely broken... The strange part is, that its not happeing, if the scene window is also open. I guess, due to more render calls with other camera distances or something, than all looks as expected. Also zoom or move the camera fix the issues... I think i need to go back to the original approach to render it by myself... And still no answer from unity since 1.5 Months to that topic...
After so many performance updates the last 3 iterations, i think i need to make it more stable and error-tollerant and create more tests in the next iteration before adding more features. I will try to update to the new unity and create more assets for the persons, where at least hygiene and fun are planned.
While fixing some bugs from the yesterdays playtest i got another anoying exception. A method to find the activity of a building outside of a job uses the regular EntityManager. I got an exception, that a scheduled job is reading that, so its not allowed. Thats strange, because i didn't write to that, but the EntityManager has no option to get a read only version of it. I changed it to the method like inside of a job, so from EntityManager.GetBuffer<Child>(entity) to system.GetBufferFromEntity<Child>(isReadonly:true)(entity) and it works. Seems thats the better way to do that from now on, to prevent this conflicts...
I also migrated the draw logic of the planned buildings, so its now also done with unity and improved the shader to be able to support the different colors.
In the afternoon i updated the Steam store page by generating new animated gifs with the new intro ship and the new fonts. If you haven't already, please follow and wishlist the game on steam, that realy helps me to push the game to a further level
The connections were very usefull at the playtest, but sometimes a bit annoying. To make it good usable, i added it to the overlay section of the ui, so the player can now turn it on and off, depending what he wants. It just effects the selection overlays, so the hover is still showing it.
Today i also did some cleanups, split up the icons to separate blend files to work on them faster in the future. I updated all icons, while doing that i changed the construction to a single hammer and the condition to a wrench. I also make a big renaming from work to activity, construction template to blueprint and interior to interior item.
I fixed some bugs related to the latest performance improvements and make a custom logic for showing the productivity bar, so it stays visible, when dragging out of it the player target efficiency. It needed some special cases, due to it seems there is no mouse leave event, when leaving it with a caputured mouse.
Due to i'm changing more and more things to errors happening in the simulation, the big exception popup will get more rare. The new concept is to use log for more normal info logging, warnings for serious things that can lead to bugs and errors just if its buggy. To make the player see that and make it easy to report, i added a ui element below the fps debugging area. Clicking on it will open a popup and shows the player the warnings and errors. To prevent big memory usage i restrict the maximum stored values to 100. I refactored the error popup, to have a separate part ui element for the report and reused it there.
After fixing some bugs i increased added more LevelOfDetails to a lot of meshes, to reduce the drawn verticies.
I started with the next performance improvement, updating the world positions of the entities. In the editor, this was also one of the largest things. I created that also a long time ago and it where i didn't had child nodes and packed all in single entities. After improving the algorithm several times, it become a very easy update mechanism, just updating the LocalToParent. Due to that things are not changing when the ship is rotating, it don't realy need to be updated every frame.
In the picture, shown the very large ship of the logo and the root updates at front, dealing with the rotation and the thousends of childs, where is no need.
I split up the parents and children and added the dirty mechanism like at the x-rotation and hole updates, so its only done when something in the scene has been changed, like dropping a big building. It would be possible to do more optimisations, like only update the related entities, but to prevent bugs and make it stable, i keep it like that. So i could push the updates down from 12ms to 0.3ms in the editor (without burst and profiling)
I got some troubles when building walkways. It took a long time to figure out, that it was again that unity bug, updating the children too late... But now it looks fine and fast
While trying to improve the ray system again, i saw, that the earth is a possible target at the first level of the algorithm, so also all boxes and other irrelevant things. To improve that, i added another tag to reduce the amount of processed elements to the needed ones, and also non rendered ones (just in case..). Due to the change of the execution order, i could also reuse the now finish calculated data of the world transform and reduce the cpu usage even more.
The last update of this iteration was the light update. It took ~12ms for the logo ship in the edtor to update all light components. This is a lot of effort, for rare changes in the lights. Even when the day-night cycle is turned on, they will not update so fast. To make this efficient, i precalculate the changed values and just update.
I added also the new connection visualisation to the connectedStorages, so it can directly show it when overing. I also added it to the resourceoverview icons below, to see all connections of that type. With that overlay i found some other path calculation problems and fixed them.
I tried to increase the performance by adding more caching/dirty mechanisms to some elements and moved the complex calculation to a place where another slow system of unity runs, so it uses the other cpus in that time.
Than i concentrated more to support Lod levels on the walkway. Till now, they used the one mesh and exchanged the mesh and material. Due to it gets way more complex with lod levels, i decided to try another approach to use different children and just show or hide them. This cost a bit more children, but adds easy changable abilities. I can also remove the cutting on higher zoom levels, to improve it more later.
I continued with the work a few days ago to show the visualisation of the connections. Due to the methods in unity are not working like i need it, i decided to create it by myown. There are some third party addons, but usualy this took longer and more workarounds to set this up. Due to i have already a customized animation framework, i could just reuse the path calculated for e.g. the persons walking path. And just render every n seconds an icon. I added some size to the target when they appear to make it a bit nicer.
Out of this working sample, i created 2 systems and a async job to calculate the points, so the main thread is not responsible for the heavier calculation.
For the connections, i didn't had a an existing path, but due to the code runs in a bursted job, i could just let the animationPath completely calculate for all connections like a box is in. I removed the y axis movements (height) to make it a bit smoother, and added a kind of delay to them, so when multiple starting at the same point, they are splitted from each other. All in all it went better and easier as i thought 🙂
One downside is, that i need to draw all by hand, and couldn't let the gpu draw a big batch. Looks like the render pipeline is still not supporting this yet, but it should not effect the performance too much 😦
I also worked again on the capsule to improve the rendering quality there. Looks like the change to the other engine changed some settings, thats why it looked a bit pixelig 🙂
I started with bugfixes and make the simulation not crash on special cases, and log errors instead, even if we are in a not good state afterwards, its better than killing the game. I also added more auto-repair things to improve the playability after errors appears.
Today is the marketing day, so i spend the rest of the day creating a nicer logo. While improveing the intro scene with a larger ship i needed to update the performance for this generation. I got it from 20s to 7s generation time with a kind of batch mode.
I started the day with bugfixing again. There was a missconfigured storage standing at the wrong place and some exceptions at the new optimizsation of the resourcebox scheduling i compensate and added more checks to it. I also added that task checks to the F5 and added an automatic consistency check after the game was loaded, to repair the broken things if needed.
I also set an maximum and fix amount of residents, depending on the bed number. I implemented it like the customers, so double beds can be added easy in the future. This should prevent confusion to new players and make it easier to handle.
Some days ago i got another report, that its not possible to change the Construction Module working on a building. Acutually the auto-choose is just done when the player setup didn't turn off the building, but its not obvious. After trying a lot of things, i decided to let the player overwrite the target of others. It will just stop the other one than. I improved the UI in a similar way than in the person. The right space next to it is now free for a building queue later on, to add smaller rectangles.
I started also with the first steps to visualize the connections on the screen.
I tried to analyse an reported animation bug, that i also experienced sometimes. To make the debugging easier, i finaly added the current Entity to the path, so i can see when and where the box is. This makes it now also easy to find the target storage. It was a special case, where 2 box-changes happened directly in one simulation run, so the sync was not set yet, so the animation calculation used a wrong starting place. In the players savegame, that was more dramatic, due to the expected target was far away, so the box took a long time, stopping the storage working for some minutes.
After that fixes, i started to make workers not working, when there is nothing to work. This leads to way more changes than i expected, also a lot of tests needed to be updated, expecting the persons to work. I showed now also the reason, why the person is not working. It ends up in a big restructuring of how the current animation is calculated.
I also added a distance panalty for the maintenance and construction activity, so its better to spread them to the other bases and try to build compact. In the next iteration, i plan to add building effects, to make the opposite effect, like noise or smell to separate them.
After finishing the Thoughts by adding icons and externalize the settings to set it up easier, i did some improvements of the UI. The Person details looked a bit too unstructured, so i changed the design of residence and workingplace to a better usable way.
Even if the Floor filling system runs extremely fast, i added an dirty mechanism to only update if needed. Its running through all items and calculates the positions where shader cuts out the floor positions, e.g. for the storage interior items. I added another LOD level for boxes to reduce ~60% when zoomed out. I also checked the Person LODs, but it looks hard to realise for now, so ill keep it at the ~20k.
I also got a report, that there was an airleak, but no building was leaking. Due to performance, i updated this, and it looks that there is a special case, where its not updating correct. It was not possible in the game to fix that issue. To make this better in the future, i added a complete consistency check also to the F5 button. That checks try to fix these caching bugs as good as possible and log errors (at least i try to migrate to this strategy as good as possible). So if there is a bug, players can just F5 and get rid of that cases till they are fixed. In the end i found a case where the problem could happen and fixed it.
After that bugfixing and perfomance improvements i started with the task i wanted to add today: Person Thoughts. Some States and Events of the person will add thoughts to them. They can have a duration and usualy a mood effect. I added some basic ones for now, so new crew members get a positive bonus on the mood, when no resitent is assigned the mood goes down with that system. I also added thoughts when getting unconcious or pee themself over a longer time (1-2 days) a negative mood panalty. Later i plan to add more than that, but for now its a start to polish this feature
I analysed more reported bugs and found a strange Unity exception. After some debugging with try and error i came to a wrong part uss file, causing this strange bug... it was already in for several months, i guess it happened due to a reason unity update. Than i added some compensation at loading time some mesh and material names to find the one of the new version of the game.
I started with the main feature of this iteration: Residence. The Idea is, that persons can have their own rooms, that is not allowed to be used from non residents. They prefere using the services of their own room. To do that, the distance part of the metric calculation is reduced, so the prefere a 10 tiles away. For sleep, this would be even higher, so they prefere sleeping in their own bed. I also plan to add an effect on the mood, if they have their own room, depending on the environment inside (added later).
The building will be able to use as a residence, when there exists a sleep activity. If no residents are added, its used as a public building for everyone, when the first person is assigned, it will switch to a private one, not allowing others to use it anymore.
In the afternoon i worked on the performance again. I found, that i didn't respect the lod levels at my own renderer and also didn't do the camera culling. Due to my latest renderer analyser code it was pretty fast to add that. I also added easy lod colling to the boxes, box-content and to the door.
I fix some bugs in the simulation and some rare cases found by BlueSky-WR. Also Escape now leaving the walkInCamera mode instead of showing a buggy mainmenu and also hide the problem icons over the buildings to not confuse the player.
Then i started with the next camera feature i wanted to add, a free camera, so the player can look around. Its added on the middle mouse button and directly starts where the current camera is. Its just working, when the player is in the selection mode (so no planning or confituration). To make it even nicer, i added a walking feature, so WASD will move the camera around. It wasn't so easy due to its in the space and the roll/yaw model came to place. The roll of the camera is a bit anoying, i plan to do an auto-roll to the floor somewhen later, till now its via Q and E controlled by the player.
I also found a problem in the code, done at the very start of the project. There was a rare case that could get some invalid states in the Task queueing, just happened at the end of a year. I was able to use the full gametime now in the queue, so this all that year logic has been removed. Found from BlueSky-WR playing over 2 game years
After that i got to touch another old code, the Pathfinding for the Persons. It looks the heuristic was not respecting the cylinder, so it could happen, that when the circle is filled, at bad start/end values, its very broken and the person walked the whole circle to the target.
I got some feedback to my request, turns out, unity is using border-box as a calculation but css defines content-box as default. Its pretty anoying, that they did a special thing there and have no support for the other model yet. I hope they would fix that.
I continued with the walk in ship camera. It took longer than expected to keep the camera in the ships bounds, due to there are no interior tiles at the doors to walk on, and need to handle closed doors also. To make sure the player can handle bugs with stucking cameras, i added the alt key as a "ignore walls" modifier, so the player can fly back to the ship. Its not perfect polished yet, so the player will not move along the interior its just stopping the complete movement there.
I also improved the camera transition when entering that mode, so the camera is first going streight down, before getting to the first person angle, due to it looked realy annoying otherwise.
The next task was to add a sandbox mode. Instead of that i decided to just add my cheats used in the editor to the compiled version. To make the player not use it, i added a cheat button to the options. Its stored in the savegame and adds a big warning confirm popup before enable. It will stop the steam achievements, the highscore and possible other statistic features later. Till now, i had some plus buttons on the storages, but this looked to bad, so i just used the ctrl key like in the planning mode to finish a building instant also for the resources. So Ctrl click an empty resource will create new ones.
In a playtest, the crewmember could not recover the mood, due to 2 things i changed afterwards. First was the health, that had a negative mood impact. That was as planned, but due to there is no way to recover the health yet i disabled that. The second problem was the crewquarter at 50% condition, causing a big impact on the person, so all activities need 3 times longer, so the person was 20h busy sleeping a day and could not recover any needs well. With the new architecture it was pretty easy to add the condition effect similar as the gravity effect to fix that. All Service Activities got no panelty with bad condition for now.
I also found the reason for the flickering Person. It was still using the old mechanism, that could have problems in some special cases. I changed it to the new shader based aproach, using the same mesh, so it also saves some vertex renderings when the person is highlighted. The other positive sideeffect is, that it looks way nicer, without the see through feature
The resource icons has been adjusted due to the resize in the last iteration, at some places they not fit in their box well and it looked not so nice. While doing that i added a bit transparency to them, so the fillingbar is visible behind them. I hope this improves the visibility of the fillingbar.
Than i found another very annoying unity ui bug... It looks like the size calculation of the elements are calculated different than in browsers. Usualy the padding,border and margin is additionaly to the width, so the width just effects the content of the element. It looks unity just do that for the margin, so for all calculations of icon sizes, i need to reduce the border and padding, resulting in anoying calculations all over the code... I wrote in the unity forum and hope that i just made a miss configuration somehow.
After that 2 days of playtest bugfixing and polishing i could publish a new release and start with the next bigger tasks.
Than I started with the in ship camera. The idea is a first person camera that the player can control. I thought about how to add gameplay mechanics to it and my best idea till now is a repair drone, controlled by the AI (player). So it would be a separate Building, where a repair drone can spawn and is just controllable by the player. The main usage would be in case of emergencies to be able to fix things. Maybe it can be also to enhance the efficiency of persons inside of buildings, so the AI overwatch the person, but pusing the mood down or something. For this release, i just wanted to have the visual effect, so it would be a 4. Camera perspective, Maybe as an follow person option, to see what the person sees. It went pretty good so far with the basics.
Due to the playtest i found that the generator turns off due to full co2 storage in the 3. week. To prevent that, i added the option for the autothrowout to the template mechanism. For now, its just available for the default buildings, not sure if i should add that also as a button in the world-elements at the interior configuration to reduce the complexity, and should also store the setting, when creating a template out of an existing buidling. Oppinions are welcome.
I also continued with some other not so critical changes till the test is done. I let the camera move to an entity when clicking on the big icon in the details panel moving and zoom to it. This should help to find things in bigger ships. I also added a follow feature for persons when clicking to it. It can be stopped by just moving the camera with WASD or switching the camera perspective. Zoom and rotate is supported in this mode.
I created also some more icons for Drink and for chemical, to have this a bit nicer and fixed some wrong rotated icons for the resources.
After that i did another small playtest and found some crash bugs and a lot of small improvements to do today. As expected some due to the big changes, but also some wired ones with lights turned on in the planning mode, results in the workaround for the async savegame. Also a ton of small ui improvements and fixes i didn't realise the last weeks, like the connectedStoreages were not colored anymore and not respecting single box storages correct. I also moved the feedback dialog above the tooltips and much more.
I also adapted the WorkingSlot behavior. I didn't realise, that its not easy possible to remove a worker from the slot. The way to rightclick to choose a new work for him and than click on the space is not obvious enough (thanks BurritoBotV3000). I changed the choose new work to middleclick and make rightclick to clear the slot like in other tools/games. Also i adapted the photovoltaic panels to be build like the other buildings, so they block the area of the panels, and show this clear even when folded.
When started this morning i made a small chage to prevent the game crashing in some cases in burst, and log an error instead. But this caused a stackoverflow and unity didn't tell me where... After a longer debugging, restarting unity every minute, it looked like the changed caused a massive addition to the stack in the bursted simulation. I found an easy solution, that should also make it maybe more efficient.
I tried to make the floor not look like there are so many tiles. To improve that, i calculated the object rotation in the shader, to rotate the floor texture always to the same direction. But it was not so easy as expected and it spinned wrong. I did a small playtest and released a Test version. It would be great if some players can test this version first, before i release it. It has just too many possible bugs, the last week i did very large changes, so i want at least some to test it before i need to do some hotfixes again
I cleaned up a bit more the ResourceContainer and delta calculations. While trying to add the other Container Mode "clamp" it was also needed to clean the changingValue up, so i could more savely add the new feature. Due to the plan to add more kind of deltas to the mood later, i also improved the users type to declare more clear what it is. This results in an improved ui at the users also.
I could than add the mood and sending an update event to the Building, to regulate there the efficiency also. The Metric for the Work (so how much the persons wants to work or do other things) was also adapted to that. The main Task for this now is now to balance this a bit. I'm not sure yet how much the mood should change.
Due to the recent Simulation changes it could happen, that some special cases didn't update well. To prevent the game is not playable anymore, i decided to add a full update for buildings triggered by the player for now. It can be done with pressing F5 on the selected buidlings. I hope its not needed to be used 🙂
I also thought i can try again the activity user logic change, when i'm already pushing this so much around. Till now, the activity had special calculations with customers. The productivity is not reflecting the real state. Its just reflecting it for each single customer and than being multiplyed. This is not very intuitive and leads to higher complexity, when comes e.g. to animations. With the new architecture its now possible to check if a building would work when a customer is inside without much overhead, so the productivity will stay now at 0 when no customers are in and a hint, that no customers are served is shown. The calculation is turned around, so just the customer containers are effected by the productivity and all others calculated in the regular way.
After those optimizings, the simulation speedup finally to from ~2d/s up to ~5d/s for the starting satellite in the Editor without burst and with all consistency checks. In the compiled version, i could speedup to 90d/s with the starting satelite without any breaks. The optimisations are way more effective in larger ships, so it should be a huge improvement.
After that, i thought how to add the effect on the productivity of workers. It result in a new internal person container "Mood", reflecting it. The efficiency will directly use it. It has some special cases, so its allowed the delta to be positive or negative above the borders. It will have users like the other containers but the user would be different things. One can be the building, so working can have a negative impact. For that, i need the option to hide parts of that in the UI. More users would be low or high needs, so a low food value would cause a negative delta on the mood. The third part could be events, having a long term effect on it, like Pee in trowsers or bad news from earth. They would be added and removed within a given time, so over 1 week an effect of 5%/day or something. This can be displayed in an easy way with icons and hints to it to make this clear to the player. It also covers the "Persons thoughts" part i wanted to add anyway :slight_smile:
It looks like my generation scenes were broken, due to the changing of the rendering engine to deferred rendering. Turns out, that the different light layers are not well supported, so i switched to forward rendering for the text only. This causes other troubles in some scenes and i took a long try and error session to figure out, that the main lights for the text are not rendered, due to forward rendering using the nearest lights, that were the tiny ones inside of the ship... So moving the text 10km away from the ship fixed it...
After that marketing things i started with the updating approach of the activities. The plan is to gain also performance by just updating the productivity when really needed. This usually cost a lot of calls to figure out if there are e.g. resource boxes or ship-resources available, even if there was no change event detected. This would make way more updates possible, like the target feature of person productivities effecting it also. It wasn't easy, due to the construction and maintenance work had a lot of special cases to deal with, but i had automated test for them, so it was perfect to detect that problems early.
I also allowed the target to be null, to clear the target of one of the tests. Till now, there were some special cases added, that the target could be overtaken from other buildings, when the building is turned off by the player, but it would be way more obvious to clear it instead :slight_smile: All in all, it is a lot to do, but it got way cleaner and just needed things are done. There is a high chance that some bugs will appear in the next iterations, but i hope i got most of them already fixed with the tests.
There was a problem in the latest test version with savegames. Turns out, unity did not properly do the parent/child relationship, causing the normal game to work fine. While/After loading the relation was set correct, so unity failed. I looks like all children are forced to have a world position, or it just crashs the game. I added this to the consistency checks, to see it earlier next time. I'm also using a custom function to set the parent, dealing with those several issues to prevent that happens again.
After improving that there was the next problem at destroying, that unity did not remove childs when destroying them... All need to be done by hand by myself...
While adding that checks, i also found another issue with the persons, but it didn't seemed to be a problem for the game.
When i tried to fix some issues at the order of the Productivity calculations, i run into a problem with the calculation. The only solution i found was to add grouping of the workers, to be used as one minimum value. This should be now also easier for the player to understand.
I also prepared the Youtube presence, updating name name and logos, due to i plan to start some advatising with the trailer. Hope works well 🙂
I got a lot of ideas from some players for a new UI style. Thanks for all that effort, but it would be too much effort for now, to change that much in the UI, causing even more additional work. I'm always happy to see new ideas but the focus this year is on content, to make the first release end of the year possible. But i'm always open to apply new ideas within the current design But i got some hints where to improve, like the resource overview.
When trying around, i found the new zoom to mouse can be sometimes not feel right. I'm not sure if its just due that i'm not used to it, or it was in general not a good idea. I decided to make it configurable by the player AND add the other zoom mode on the ALT key. I'll turn it on by default, to hopefully get some feedback about it.
I also fixed the issue, that the camera moves unexpected the first time entering the configuration (was moving first out, than changed hard).
I tested the latest changes in the compiled version and got up to 30d/s and still not stopped the simulation. Looks like the performance increase as already very good.
After that basic stuff, i started to do the main task for today. The new Person effects on the activities (what was one reason for the big refactoring the last days). At the moment, to calculate the efficiency, its doing a lot of stuff all over again. My idea is to cache that part, maybe also promote that part to be a component in the activity. This would make it possible to easier calculate the needed things from it, without much overhead. Updates on the gravity e.g. would not cause a recalculation of the ship-resource maxima. It should remove also a lot of special cases in the code to reduce complexity in that parts, e.g. to check if a worker would turn the activity on, so he can fast check if he can fulfill his needs instead.
After all test run successfull again, i started the next step, to split the activity from the building in the simulation too. This leads also to more refactorings, related to the workingPlace Slots and much more. But all in all it goes better than expected, and i could finish it. The tests are again extremly valuable, so after each step i could fix already a lot of bugs without much manual testing effort. From the LOC it was close to a perfect split, the building is now 1300, the activity 1600 lines.
I just render the Tiles in the Interopr placement when there is something to be dropped, or if there is a problem within, that is not reachable. This should allow a better view. Than i started to refactor the work/activity part and though about a better concept. Till now, the work is a part of the building, and everyone dealing with it is using the worktype to identify it. I found a lot of usecases that are inefficient doing it this way, so maybe its time to promote that to a separate child entity of the building.
It effects a lot of classes, from the UI choosing systems, assignings, templating setup, the simulation and a lot more. So it is a lot of effortand cost the hole day, to get through all the code and update the logic, even i just did the first part of the big change.
I started to adapt the trailer to the new Buildings and random building creator from last week. I also made the generation syncronous, due to the big framedrop will not be visible in the videos and it would be great to see more persons in the trailer.
While adding the single interior to the trailer, i thought about it, and it looked very annoying to update, so i created a template and used that template data instead to place it more dynamic. Here the new Version
After a try of the new save load system i got exceptions, that just happen in the compiled version... worst case... a nullpointer again something with the companions, deep in the copy method of unity. Due to i don't need the companions for the save anyway now, i copied the package and added a simple null check to fix it for now.
To reach buildings easier, i tried again the zoom to mouse inside of a view, so the player can easy zoom out, move the mouse to the target he wants to see and zoom in. Till now it just zoomed to the center of the camera. After the main calculation was done, it felt wrong with the animation, but without it didn't look as good as before, so i played around a longer time to make it nice. It also feld wrong when scrolling while moving the camera, so i disabled the ZoomToMouse when the player moves the camera.
I also refactored the Person-Metric algorithms, to be more clean and performant. I found that this was one of the main performance problems in the big ship. To make the player know, why the system could be slower, i added also a hint, when the person generator is running, at the same place where the autosave appears. I fixed some last issues with the camera system and also fixed the broken transition to other views when scrolling far down or out.
I started to fix some bugs after updating the element updates yesterday. Turns out it was a problem when one update removes a listener of a already queued up one. The removed update was still executed, even it didn't expected that (Entity was deleted). After fixing that i made it also more error esistent, so an exception in one update is not blocking other updates, that prevented showing the exception all over the place.
Than i got some feedback, that for new players, the energy run out very early, due to the recent reduction of the starting methane, caused by too less space in the generator module. To prevent that, i have added a starting resources and starting connected storages setup to the generator and set this up. I might also setup autothrowout if its needed later.
After that player had trouble with the energy, the water pipe run empty, due to long toilet sessions without energy ^^. He couldn't figure out what the problem was, so i added possible reasons to the event element, showing the pumps that have problems.
I continued working on the event panels, by adding a ui only option to the Events. Thanks for the idea to BurritoBotV3000. I created 2 icons for simulation break and ignore, so its clearly visible how it behaves. I also added tooltips for both including a detailed description and converted the annoying confirm popup to a simple confirm button (click twice needed).
I also experiment with another thing BurritoBotV3000 was mentioning. Hinting more the dangerous of the dismantle button. Making it always red focused too much attention on it, so i try for now to change the style when overing, so its clear dangerous, but not focusing it in the normal gameplay.
After that ui stuff, i got to a more core topic. The savegames of the big ships took way too long to create. It cannot block the ui for several seconds, so i thought about other ways, to do this async. I found a unity method, that could copy the complete entities to another world, so the idea is to copy them away, and than to it async there. Due to i also serialize system things this would need to be done directly. Copying all entities by hand to the other world (even using the fast unity method) took already 1s, the fast version is ~100ms, what would be totaly fine. The downside of it, is, that the behaviors are not supported yet, so i needed to do something additional, to work around that.
After the main part was done, i spend the rest of the day with a unity bug. I'm using a performant copy what said, that the lights is not supported. In the copy, the light is not accessable, as expected, but it copied the light, so the scene brigthen up... Worst case... My fix at the end is turn all lights off before copy and directly turn them on again...
I added a popup to show the saving process for the dialoge and a simple item to show the autosave on the screen.
I make the old savegames work for with the new simulation optimisations, with a rescheduling of the container tasks. After analysing the profiler i found, that my own element update could be improved. Each update listener checked before fire if its visible, cost a more or less complicated calculation. I changed that to be only done by events, so when something changed. This speeds up the Visual Element update alot, due to there are usualy several hundreds of listeners attached. This increased the fps in my editor already to 25% to 40 🙂 I also reduced the fast update of the UI to 30fps (from 50) so less UI is updated each frame and it has more chanche to be balanced to more frames. I also found some easy wins in some expensive ui updates, gained another ms per frame in total.
I also added a nice feature due to the suggestion of BurritoBotV3000 to select all related buildings, when clicking on a Resource of the the ResourceOverview. Later, it will be replaced with a popup with statistics and a nicer list of the buildings.
I got a big bunch of new ideas and bug reports from BurritoBotV3000 (thanks a lot) i worked the morning on.
One thing waas that unity not destroying children correct, instead pushing the children to the root. Usualy i just destroy root entities, than its using the linkedEntities (all children) and it worked fine. So the result was a left over mesh at zero world position, when deleting an interior.
I improved the UI at a lot of places.
After that, i improved the error reports. Added an autosave enabled option (till now, it was not visible, that its turned off), don't stop sending the data when the error-popup is closed, to make sure, we get all the data we need, Fixed some double F11 problems, enhanced the crash detection popup and more. I also updated the server, so it spams less the discord channel and improved my error-view page for the details, to get a better workflow.
I already improved the resource containers a lot of times, ending till now in a big list and could manage all of them at once without much specialcases. I could reduce more of the specialcases like for persons and had an idea to prevent toggling too many tasks when updating. The idea is just to have the next one as a task, so if something happens at the next day, its not triggering the task changes (cancel and new schedule). It just stores the nextTime and its done. For sure, its checking if the new nextTime would be the next and reschedule the next task instead.
The editor now runs in the slow mode at 4-5d/s at the starting ship, what is more than a 200% increase . For larger ships it should be way more. And i still had some improvement options, like storing more than just the next one, so storing a list of the next 5 or so, so its no need to run through all containers every time. Can also think about an ordered list to store the gametimes directly, so it would be like the taskqueue, just for the containers. But for now, that should be fine.
In the evening, i also added the serializing for it. While doing that i figured some problems with updating the entity, so i decided to also add the separate dirty mechanism. Till now, when some container changed, make it completely dirty forcing all components to update. In the new version its now just updating the resource container part of the entity, causing less full updates..
I got some nice ideas for more flexible timespeed and other feedback from the release a few days ago. While debugging, i found already some more isses with the person icons and found that the gender of the persons were not fitting to the names. The name generation was separated from the mesh generation, so both used random Another problem were the other values of tasks when loading a savegame. E.g. the WorkType was serialized as a number there. Due to i changed the order of the work ids, this caused strange exceptions on loading the savegame. For the Entity i fixed this already a longer time ago, by storing the name instead of the id, so the order is not relevant, but not so for the tasks.
Due to save RAM i decided to keep the float there and depending on the task it will be interpreted. This caused a very large refactoring of the scheduling calls, using an aproach to still save the ram and fail fast when giving or requesting wrong values.
I tried to use some custom cursors, when hover over the changable labels, but it looks unity didn't have a propper support for that in the new UI Elements yet and its not supported in uss. The only chanche looks like to have custom cursors. I created a task for further updates, maybe unity enhance there
In the evening, i tried around with the new Geometry nodes of Blender 3 and use it for easier adding screws. Before, i just copy pasted the models around and placed them at the correct positions, now i can just add some points and it calculates the nearest position on the interior to place it. I also added a debugging mode, so its faster. This should speed up the modeling again, so i'm able to create way nicer ones in faster time, but still need to experiment a bit more I plan to add also procedural vents and maybe more.
Another usecase of the randomised buildings will be the normal tests. Till now, i needed to create a predevined template with the stuff for each test. This took a lot of effort and is not realy flexible. Due to so many usecases, i started with the building-generation. Its just needed to give a WorkType and the generator drops everything. Its using a seed, so its reproducable.
After m igrating all the tests to the new generated buildings, i decided to improve the algorithm. First i tried to detect the smallest building possible for the interior to be added. This should make it look nicer packed.
Due to the placement looks very chaotic, i also tried to place the interior and storages more reasonable and prefered not in the middle of the room. So e.g. prefered on the walls, facing away from the walls.
I fixed an exception from a new report. The person left the working room to go to toilet and somehow get another update. The check if the currentbuilding can fulfill the current work failed. I guess it was a change in one of the last animation improvements, where i changed to calculate the real current building.
Due to the big change of the basic buildings, the old savegames will still not work in the next iteration, but i could enhance the loading process, so the exceptions are gethered up now and continues with other components and entities. Most of the things should be loading fine now and the game could still work fine for debugging or even playing.
I worked on the new Update video and needed to improve the starting music, other building creations for it and the dynamic update of the shadow distance for the video rendering. I had also an idea, to create random ships. It could be used for screenshots or performance tests later.
After i build the new version, i did a short playtest and found too many anoying problems, like some of the icons are wrong, or due to the new tooltip mechanism, some tooltips are not opening in the tutorial. Also the new smaller storages results in a too fast empty power generator. The biggest problem was the selection of inflatable walls. They were rendered absolute, but the selection was done relative to the parent... Due to i moved it as children, to make it easier to work with the selection, i missed that.
I played around with the new Blender 3 release and found the library very very useful. Till now, i used a separate material file and import it all the time. The old library of blender was very buggy and didn't work well for me, but the new one realy looks nice so far. I created and categorised all my materials i'm using. It also feels way faster and it looks my plugins i used are still working
After i was happy so far with the icons, i worked checked all open tickets and get some other small things to this iteration. First was the I18n live update, so players can directly modify the language file outside of the game and the game will recognise and update it in game, without a reload.
Atht he end, i created also some room icons, to have a clear visible differenciate between the other buildings and the templates.
While doing the icons, i found it a bit anoying, that i need to create icons for every combination of other icons, like Fuelcell is a mix from a waterdrop and a lighting. I think, this kind of icons will be created way more in the future, like produce tools or recycle iron garbage. To make this easier possible, i created a Icon3D class and a nice editor for it. Its also supporting 3d, e.g. for the problem overlay over the building.
The other day, i spend updating the overlay system, so the new icons are shown there also. It was a bit difficult to deal with the matrix calculations to get a perfect layering of the meshes and transform them, so its equal to the 2D UI Icon.
I adapted the colors to have now just 1 Material and show the ProblemIcon in the warning or problem color, and showing the work-icon in the tint-colors. Till now, its using the sunlight for some fancy effects, due to i can't use a 2. lighting with the current setup of unity...
I got some editor warnings, that not all holes of the start buildings are cutted well. Till now, there were max 4 holes possible. With a simple change i could fix that for most of the cases, so every part of the new generic buildings can cut 4 holes now. At big middle parts (6x2) it can still happen, but than its like that, till unity inprove the support for passing matrix4x4 to the shaders.
I also fixed some flickering of the tutorial, caused by the new initial mechanic and render system. Than i added the last autosave of the game also to the error report. There were situations, where the savegame broke due to some actions and i could just saw the end-result. So i hope it helps next times to see also the state before and can reproduce the situations easier.
To make it look more realistic, i added a simple logic, that moves the boxes of stacked storges to the ground level, so its always filled. There are also the connections for e.g. gas to supply the machines of the building.
Next task were to improve the entity pictures. I started with the persons, to give them a more personal touch. I use the generated model to create a picture of them. It was a bit tricky to find the right camera spot, due to all persons are differnt, so i'm searching the nose and use this as a base.
I added it to the general PersonIcon, so in all UI Elements, its now used.
I also hide the mainsection part and updated the HideOptions for them. I figured out that there is still no hint, when a tube is empty and found, that there is not even a problem icon for it. The reason here were the problem algorithm, that deals already with a lot of special cases. To fix that i made a manual setup for it, so it can be customized easy for any specialcase.
While working on the problems i improved the editor for it struggling with the Unity Editor API to get a nice work. Needed some workarounds and basic utils to make it work nice and usable.
While doing that, i found, that its not clear what to do, when the water pipes are empty and when to show this ship section part. So i added a special event like energy depleted and show the ui when this appears. I also cleaned the other help tutorials, due to they are not fitting anymore, and most of it will be done in special tutorials later.
I fixed a lot of small things, like the shortcut handling at text inputs like pressing b at the savegame dialog.
I wanted to start creating the pump to the machine room. Due to less space, i decided to add the single storage first. I needed to refactor some code to make this part easier and added a single in and out storage. The single is known from the old toilet or canteen, now its back. It can just contain 1 box and cost half of the resources. The advantage is that its just need 1 space blocked and 1 walkable, instead of 2 what the stack version take. I might add another bigger one using even more space later.
I also created a water pump and removed it from the storage, i had it at the first place. Its now also going direct from a box to the ship, so there is no need to have 2 works, or even changable ones.
I worked more on the performance for bigger ships and found a selection problem. It seems, the unity world bounds are updated too late also, so on very high speed (~1d/s) its completely wrong and not hitting anything. Due to the improvement of the code of the other selection checks, i just removed that for now. As i checked why my fps in the editor are just at 16, when placing more buildings, i found, that the selection algorithm was not running in paralell, and took ~30ms in the non bursted editor mode.. I could spread this paralell out to my 23 worker cores so its down to 2ms in the editor now. This is all without burst, so in the real game it should be go to close to zero.
To idendify potential problems, i added a time-tracking to my taskmanager and added some profiler points. I was realy shocked about the numbers, at the big section, it got up to 60ms for adding one building. I could improve the startup of my testscene a lot moving some updates and calculations at the end of the current task list, so they are not executed after every building init call. Its very hard to work with it, due to its very very slow on deep profiling, and without it, there are no details visible. For now it looks fine so far, the real performance tests some more caches, i will do at a later stage. Also the tests run 20% faster than before
I found also some problems with the cuts of the new generic modular buildings. I took a while to figure out, how to transform the positions and changed the layouts several times, but it looks working fine and easy. Due to the new selection mechanic and new generic modular buildings, a lot of tests failed again, so i spend some time to fix them.
At the last video rendering i found a big performance issue, when creating big ships for my test. It took several seconds to generate the ship in the first screen of the videos. To prevent that, i improved the initialisation process of the simulation, and found also other bad performance code. I also changed the starting ship from code to a configuration, so i can create simple configurations for big ships to test the performance.
I fixed a lot of small issues, resulting in the change of the UI Update changes and some other update problems for the new Interior UI. I also added the interior ui for storages, also structuring the ui like at the building and added the storage option buttons to the ui.
I found it a bit wrong how the storage behaves for selection, so i needed to readd the selectionboundingbox, to customize the selection boxes for special buildings.
I also fixed some problems that the default emission colors of materials got overwritten now, due to the generic aproach of adding the material components, so i added the possibility to add defaults.
After these small improvements were done, i started with the bigger topic for today: Custom Templates. As i wrote a few weeks ago, i prepared already the system to have Templates created by the user. Now i added a button to create them at buildings that were customized. To easy add a possibilty to remove the templates, i added a delete shortcut, when the mouse is over the template button on the buildmenu. Its not realy inteuitive, but i had no better idea yet
I started to promote the Interior to be selectable. To do that i cleaned up the selection system, to be more generic. Till now there were special scripts running for the different selectable types with their specialities. I tried to refactor them to work all with one simple system without specialcases.
The selection worked from top to bottom, so it checked all "Buildings" and "Persons" to figure out what is selected. This was checking than the children for selectable things, what causing the complicated algorithms. The new way is now to just check all meshes on the screen if the cursor ray hits it. If a hit is detected, it will calculate backwards to find the "Object" to be selected, so e.g. an interior entity.
With that preparation the interior could easy made selectable. For now, i just plan to show the related activity. It acts like a simple filter to the building content.
Today, i created a Smelting Interior to convert the irongarbage to steel. It cost a lot of energy.
I also continued converting the other buildings like you see in the picture. They are now only available as interior in the Chemical and Recycling room. I also added a ElectoRoom for the Generator and the FuelCell Module.
I worked more on the Modular Basic Modules and added 2 new Side tiles with Windows and some of the old design. Than i could finish the replacement of the 1x1 building, created out of the new parts. It cost a bit effort, do adapt the mechanic for setting the walls and floors to deal with multiple elements instead of one big one.
After that i started to deal with bigger buildings than 1x1 tile. This caused an adjustment of the shader, to deal with rotated and moved children objects. I did it for one level only for now, so its working for the normal usage and it looks not its working fine so far :slight_smile:
After finishing the FactoryRoom setup for the Tool creation, i worked on the efficiency calculation. It was not very intuitive and hard to get all specialcases in the algorithm, so i decided to just do this for each resource by hand. Now all resources inside of a work can be marked as "effected by efficiency". It reduces the complexity a lot. To find conversion problems early, i improved the editor for that, so its instant visible if something is wrong.
While working i always saw the errors in the basic buildings and find it more and more anoying. So i decided to try again the modular aproach, by creating a building with separated wall parts, that can be merged together to the final building. This has the advantage, that i design them in detail, and just baking them once for all modules. It also reduces the amount of errors i can make. Its also possible to vary the modules, so they don't look all the same and maybe let the player design the basic building by himself.
The last times, i struggled with the cuttings, but while working more and more with the systems, i came to the conclusion that its possible with just a few changes. After some iterations i got a pretty cool design, where also not all of the parts needs all things and i could reduce the amount to the minimum. The example below contains 16 parts: 8 walls and entrances and 6 corners, and 2 connectors between long walls. In total, there are 5 different kind of elements to design, so similar than the current 5 basic buildings
I could finish the first full generic Building with plain sides as a start, i could manage, that the floor and walls transitions are not visible, just some small visual bugs at the glass area till now. So far it looks very good to me and i will continue tomorrow, adding different sides with some windows or tubes, so it looks better 🙂
I started to refactor the Problem icons for entities. Till now the system that renders them was checking specific problem values of different components. I added now also a newer way to set them just in a simple list. This makes it possible to add them to any kind of entities, like persons or interior, e.g. showing "storage full" at the storage, or like in the example not assigned works directly above the person. It should also show the reason for unconcious directly to make it more obvious. To make it look better, i changed the color for the reason and main problem.
To make the doors more easier to use, i converted them to WorldElements to show it directly above them. I plan to add more of these ui elements e.g. for machines or storages. To make this work easier, i make it also work with direct gridpositions and analysed the problem in the delay. It was very hard to figure out, but in the end i found, that the ui-layouting is done in a "preLateUpdate", with no chanche for me to interact in the lateupdate anymore. So the real movement was done 1 frame too late, causing that anoying delay (in the editor more extreme than in real, due to 20fps ). So i created a system that calles the visualElement updates at the very end of the normal update instead. Another delay way caused by a just 60fps update of it due to the reused Tooltip logic. After a long time, its instant reacting
The afternoon i used to create a new Interior for creating Tools. The 3D printer 3x2m big and will be used by 1 person. I try to use a dark glass style for the middle openable door, so i prevent to need to do some animations in the inside, and added a small monitor at the side.
I started with the old problem with mouseover detection, what worked pretty bad with the new UI elements, so i thought i can give it another try this year with newer versions of the framework. First it looked pretty similar bad, but than i found more events that i can use. Looks mouseevents just have 2 not well usable events, but pointers have the stuff i need, respecting the parents and at least the enter event fires when the element is added. So with these two and the detach event i think it should work well. This remove a complex logic, having still multiple problems.
I worked more on the Animation System by removing the old Slot Mechanic, where workers were divided to slots inside of the building and assigned specific interior to work on. Now they use a random interior assigned to the work and assign int to them, so the other persons will not work at the same point. The main use is e.g. for the Greenhouse, where multiple interiors need to be worked on.
Next part was just enabling the working lights of an interior, when the person is realy working on it. I shows it here at the greenhouse, even in know its not very useful, and this seems a needs a special method, but the activity simulation is not ready for it yet. Its also working for other lights like the effect lights of the workingbench, and will also used for laters use of interior animations.
I finished the animation tasks for this iteration by improving the idle animation. When the person is working he is always idling in the building for now, but non assigned persons were just standing in the dock, or whereever they were. To make this more nice, i made them also able to walk around the ship. They can choose the neighbor building where they want to go, prefering the Walkways, to make them stay there most of the time for now. I also added a random waiting time after they arrive at the interior tile with the idle animation i had already added. It looks way nicer now to have a bit fuzzy moving around .
Today i did a short playtest to polish the the big changes made in this iteration and fixed ~20 things i found. Most of them were small things, and some ui polishing. Than i could do a release, it is taking very long time to build (20min for each platform). Due to a small bug i needed to do it 2 times... So i think to retry the buildserver to create a proper CI system could worth it, but maybe already with Kubernetis isntead of direct docker.
I could finish the release and created a short update video, what also needed some fixes, due to the new initialize mechanism in the game.
I started with the merging of boxes and found more and more special cases i need to handle. To reduce possible errors, i decided to make it easier. I skip all animations i planned for merging and instead i just add a action for "Merge". This will be executed automatically once, when the storage is full and all resources arrived, or maybe later via a button triggered the player, or on every resource arrival.
While starting with the tutorial update, i saw, that alredy the predefined room templates are destroying the layout of the template-chooser, so i did another task first, to add the templates to the buildmenu instead. With that, it should be easier to find something, and i can use the categories again way more useful than before. It's showing the templates as a kind of a tree-structure, to be identified easy. Also search is working for them now. To make this work, i needed to adapt the details popup to also deal with templates, not just for BuildingTypes.
I also added some interior support to the help system and enhanced the tutorial for the Air-Values. Its now just all in one achievement, to create a backup system for the starting lifesupport. Many players skipped the tutorials for the other air-buildings, due to it looked always the same. To show all in one, it should make it less boring. Later more achievements will come, when more buildings are available for the persons. Than i will also do the advanced one for creating food.
I also added support for test-templates, so templates, that are not added at normal games, to prevent getting too many of them. So the old Air-Buildings are completely removed for them, but the tests, that needs them still working
I found it very anoying at the testing, that i need to use ~12 clicks to create/cheat a full building. To make this faster, i had the idea to add another cheatoption. If i finish a planning with Ctrl key, it finishes the complete plan already. Holding also Shift its filling up the resources and with additional alt its creating workers for the building. This should speedup testing a lot for me. This was now possible after several cleanups and refactorings in the last months. Before it would be not so easy.
Randomly i detected another big problem in the rendering. For the problem Icons above the buildings, i just used the ones i used for the icons. But these had extreme amount of vertexies and are not game-ready. So e.g. the icon for the humidity work have already 400k verticies and is not realy big. For the icon scene it doesn't matter but for the game itself, its not feasable. I needed an easy way to figure this kind of things out, but it looks unity didn't have a support for that. So i created a unity window using the entity data and my own drawing system to detect all rendered elements, calculating also the camera distance and created an easy metric to identify bad ones, so e.g. 20k verticies are fine when being close to the entity but its bad, when its 100m away and the object is maybe just 10px size on the screen . With that i should find also things that needs LOD groups.
To detect this not even when the game is running, i added a generic validating to all meshes defined in the settings to log a warning on too high vertex count.
I worked on the BoxModel to remove the ugly and unrealistic wood out of the game and replaced it with a futuristic style box. I also added some lamps, for now, it should just look fine, later i plan to change the color depending on the fillstate or delta, so maybe red=>full or decreasing.
I also worked on the last interior of the rooms for this iteration: The Greenhouse. I found it goes faster and faster to build the models, my feeling is that the quality is way higher, the workflow is faster than a month ago.
And converted the greenhouse to the new Interior System as a template.
The game loading has been improved, so when exceptions raised while loading, the game is not stucking in a undefined state anymore. It should show the right exception and continue as good as possible. I also found that ichao was right with the autosave. Just the regular time based autosave was checking for the exception, not the game closing one or change to mainmenu autosave. I also found the lighting different when a game was loaded and realised, that the save/load of the sunlight is missing the shadow setting :.
The Bigger versions of the Air Machines are also finished. I improved the base to reduce the vertex count and added big versions of the 2 small machines on top of them. They now can do x10 times of the small version and are 2 times more efficient (less energy usage).
Than i converted more buildings and did made a quick change of the soil machine, to convert all the buildings. Also the kitchen i converted. This was fast, due to i had the interior already prepared.
The naming of the Entities is now also adapted to the new Setup and seems working. I also updated the planning overview, so when just 1 room is dropped, its the name of the building instead of the buildingtype, so "Kitchen" instead of "Working Room". I'm still not sure, how i will split up the rooms, or if i completely restructure this things again. It looks its pretty easy now to deal with the changes, getting more and more stable and fast changing.
I checked the simulation by trying to remove all warnings raised at the tests or playtest, to see better potential bugs. I did a test-release, but there the tutorial and achievements are not updated yet. I also improved the shadows and worked hard to remove all annoying bugs found till now. Thanks again to all testers reporting them
I found some issues with the LOD again... This time after loading, some of the content was hidden, caused by empty children in the middle of the hirarchy, that i need to workaround the unity bug . I found a simple general fix for the serializer, so this kind should not happen again.
While trying to debug i found a new way to create entities by using more generic systems. So there is no need anymore to add special components to do something for all MeshRenderer for example. This will prevent bugs in the future, without having too much components added (what will also make the later planned modding easier).
After improving the highlight, i checked again the drawn verticies and it didn't change. I searched a long time, before i found, that the UI also adding vertecies... So it looks fine so far
I got a bug report where the person was not moving out of the building, so i checked and it was a small mistake while trying to fix the anoying mac bug at the last release. But i checked why the test didn't fail and there was no customer in. While improving the test it failed i found some problems on high speed with the animation and person position calculations and fixed that also.
Than i found other failing tests, caused due to a internal unity bug in culling rendered LODs... I could reproduce it and reported the bug to unity... Due to that i guess i need to turn off the LOD feature for now
After that long fight, i entered another one against unity. It was extremely strange behavior.... After Destroying an Entity its still Exists in the EntityManager. I couldn't figure out why. Sometimes its working, sometimes not... After several hours of debugging, it looks like unity just mark it as "ToBeDestroyed" and remove close to all components... One Frame later its realy destroyed than. Due to my optimization in the Test, i wait till its not existing anymore, causing an endless waiting... Horrible...
I also improved a testing feature, to wait for something and it looks some tests were wrong too
I created a machine room and adapted the starting scene to use it. First thing what i found is, that the small machines lookes pretty ugly, due to they are so far away from the wall and too small, so i decided to change it again. I increased the size of the base building using also the new technic i figured out yesterday and adapted it. The good part is, that it also saves a lot of verticies
I improved the algorithm to detect the next to place item in the works and also restructured the starting buildings again to have a common crew room instead of a sleeping and a canteen. Soon i plan to add environment and effects for different works, so when someone is eating, the sleeping is bad. For now, it should be fine to have that.
I fixed the auto-align of the buildings in the debug scene and added also the basicbuildings and interior, to be auto-aligned in a nice way.
Modeling takes time. I'm not used to it, so i could "just" finish the 4 small machines today
After fixing the tests due to the last changes i made i started with modeling the new buildings. First of all, to make it more realistic, i added a docking port to the Box-Stack. It has a big one in the middle and 2 small ones at the side for gas. (or others). Its pump in or out the stuff in the boxes to the ground area of the building (where the hidden tubes of the buildings are). The new Interior using that stuff have also tubes to the floor, to show the connection.
I started creating the air-machines and designed a base for the small and large versions. They have a pump inside and small or big tubes. The small one will be 1x2-, the big one 1x3 tiles blocked and each 1 walkable in front to maintain. The tube size and the base part where the pump is has different sizes. On top of that will be special ones for the 4 air-buildings. With that size, the 1x1 building can hold 2 big ones or 4 small ones, that should be reasonable.
I could finish the game ready mesh for the small air-pump socket (above the co2 filter i will do tomorrow)
After finishing the basics for the new Type Conversions (instead of using the GameObjects as setup), i started to do some LODs. I did it for the GridStructure and the Box-Content. The startscene had around 1.2mio vertex, after doing the LOD for the resource and grid its alreds reduced to 500k. On the Overview (so further away and more lower LOD and cutout) it goes down to 300k.
In the afternoon, i created a generic Test, testing all serializers to check for the mapping, to prevent bugs like in the last iterations. Its creating a test component and try to serialize and deserialize it to and from json. In the end it checks, if all values are converted fine. Its a non-unity test, so its running very fast (0.6s). And i found already one wrong mapping at the interior with it, but this shouldn't have a big impact, due to this is generated at startup and updating is not implemented yet In total already ~125 Serializers. Wow.
In the evening, i found my test running very slow, so i analyed a bit and found that my last change of the new initialisation system is extermely slow (1s on startup). For normal games or single tests its fine, but running all the 500 tests took already 8min always the same initialize... Thats already ~50% of the time.
So the plan is to use the refractored initialize process now to prevent scripts being executed a 2. time and kill them at startup. Due to most of the expensive things are now in entities, i used a 2. World to store them there after the first time an initialize is finished. The refactored Type system was also an important thing, so it was easy to get the data they need from the world and directly destroying the setting game objects. It ends up with ~200ms initialization process (the first test is always ~2s). So in the end, running all test run time goes down from 16 minutes to 5.5min => just 33% of the time
I finished the polishing of the EntityInspector, so hiding the panals when not needed, improved the update mechanism for performance, added an antity jump so its easy to navigate around and a simple filtering by id, name or contained component via the searchbar on the top.
I finaly could analyse the loading problem and found a simple missing property i added last iteration. I planned a task for this iteration to create a generic test for this, to prevent this kind of bugs in the future. Happenes too often...
While continue with the LOD stuff, i found that the Entity Inspector also missing Companion Componentsm, so i added that also to complete the support for it. I added a pick button to show the companion object in the real inspector (what was also broken in the inspector...). To make it nicer, i use the RenderMesh Value to preview most of the Entities without specific icons, like the doors or inflatable walls. I also show behind the name the number of children if the entity have some. It gets more and more complete. Now i can continue with the original stuff
I started the day with analysing bugs and it was very anoying, that the Unity Inspector was extreme slow and i couldn't see the content, due to its readonly and nothing is clickable (no idea why, since a few month). So i decided to create a own one, fullfilling my needs and is customizable. I began with the basics and used tostring to show all the values. I also added some hardcoded custom values like MaterialReference that it shows also the linked material-name.
Due to it was always a big mess finding the elements, i just show the root entities and add a side-panel of the selected one with the children. When clicking the children its replacing the content to the children panel (and there if its there another children panel), so its visible.
I plan to extend this to preview also the material/meshes, adding icons and more to get a faster usage out of it. Its already way faster without any optimisations.
After a long time fighting with reflection and optimizing the UI Designing, i'm close to be finished. A better dirty mechanism is still missing and easy jumping to entities, but so far it looks fine
Still worked the whole day to migrate the setup to be able to remove them while running the game. All the GameObjects are converted to Prototype Entities and all got a separate Settings file for easy and fast converted and easy and fast access from e.g. the UI or some Systems. So some shared settings of a type is now also not an gameobject anymore. It felt like i touched all the UI code and migrated a lot
I could finish everything so far and started to fix some issues with the LOD System of the entities to be able to save/load it.
I started to play around with LOD (Level of Detail). Current if the mesh is somehow visible on the screen, the full mesh is used to render on the graphicscard. This ended up in ~3mio vertex for my playtest scene. Due to unity, this is already the maximum, what could explain the low fps i had. If the object is further away, its the single vertxes are not realy visible anymore, so its a good practice, to reduce it or even cull it away. Unity has some support for it, but i need to integrate with it. I started with some easy wins: the planets each had ~200k vertex to make it nice and round. Due to the player is not flying around for now, i reduced it to a reasonable fixed size, so e.g. the sun is now down to 100 vertex.
Next point was the resource content. This need to use the LOD so i tried it with the tools and it worked pretty well reducing the details from 11k to 4k and 500 for further away and culled out if its far away.
One downside is, that my prototype need to be removed from the screen, to prevent it gets rendered. Due to the UI is using the settings configured in it a lot till now, i need to work on it. Its also a preparation for dynamic settings, e.g. via configuration or later mods. The GameObjects should just be used for Setting everything up.
Due to this was done at the first days of programming the game, it took a longer time to get rid of it.
I fixed some last small issues and fixed also the trailer and screenshot for steam. Due to the removed buildings, it needed some small changes. I also created the update video for the release showing the new interior placement. When trying to release i got bugs compiling for MAC. Same as before its horrible to debug and took 2min and don't show any hint of a problem. After 2h of debugging, i give it up and disabled the burst mode for the simulation for MAC for now. I hope it can get fixed by unity soon. At least, that i can see the problem in the error messages.
I also created a review for this year of development. I also want to thank all of you partisipating and trying out the game. Your feedback is very valuable.
I wish all of you a happy new year
I tried a lot to enable the burst mode for the simulation again, to improve the speed. It takes a long time, due to there is no good exception from unity and its a bad "removing code till it works" with a ~5m tryout time... After several hours, i found something, so the easy part is working again. So in general its possible. I checked all string creations in the main simulation items and i got better exceptions that i could fix fast. It looks its ALL related to the string creations, when there is too complicated things in the string concatenation. Its working again, so the performance for my got from 6h/s up to 3d/s. Its a ~x10d speed, but i guess its not enough, when the ship gets larger, so i need to do some performance optimizations first.
I found also that a problem with the resourceboxes had way more internal problems than thought. First i thought its just the icon, but it was a general entity-update missing.
A lot of small things found in my playtest has been also fixed, including template names, shuttlebay fixes, rounding values, some problem with the new heights and many more.
I improved the code for the planning drawing, so there is no more flickering and nicer (not blended) colors. I also fixed some small issues and did a full playtest. The game took ~1.5h to get artificial gravity and i didn't had breaking bugs. Loading also workes fine so far and i created some new custom buildings I got a big list of things to improve and small bugs and figured out, that the performance got realy bad... With the base at the end, it got max 10h/s in the simulation, and frames were visible dropping down somewhen.
So for all Steam Playtesters with windows: You can change to the test channel to try it, till i finish all the small issues
After fixing the infaltable walls, that were not adjusted to the new building y position, i added the needed resources to the construction storages. Due to now it can need partial resource boxes, it was needed to show the needed amount.
Due to tha dark design, the fillstate was not good visible anymore. I decided to also show better the delta. Till now it the bar was colored, what was not realy visible, when it had low values. I made the resource fill full size and just a bit brighter. If its not full or empty, its now clear visible. To hint the delta, i just added the + or - icon like at the resource containers, to also align it to the other style.
In the afternoon, i tried to improve the Highlighting while planning. I found my very old shader for a generic holographic grid and played around with it. Before i removed it, due to the buildings need to be visible through the walls, and it looked too unstructured for that purpuse. Now the player just builds in one layer, so i can use it again
After that very big change, ~80 tests failed. I fixed several issues found with them and cleanup the old stuff. To migrate to the new templates it also needs time to update all the tests, and make them support the templates also. Also the tutorial and help system needed updates, due to there are now 2 construction rooms (1 construction and 1 maintenance) and it should choose it by the possible work also.
I started to add ctrl support when dropping interior, to drop more than one. Also when adding a work, it directly start to drop the first storage. Its changing than to all required things, so the player don't need to click so often.
I started with the supprot of partial ResourceBoxes for buildinglots. The main problem was, that the buildingResources could just be done with full boxes. Till now, there is no merge or split support for them, so its pretty hard to add this now.
I added the preconfigured templates to the UI of creating a room, so the player can choose from a template or start to configure a custom one. I also added the interesting details to it like the added works, their efficiency, workingslots,... and also added the construction resources and needed buildtime to the button. I also did the I18n for the default templates.
First i wanted to generate some icons for the templates, but i think all the added details makes it clear enough. The next steps would be migrating technic room, but i think i will do a release first before doing that. The tutorial has been also adapted to the new Template Mechanism.
While developing, i removed the configured building by accident, due to the configuration takes time and i forgot to be in the planning mode. To prevent the effort is just lost, due to a bad click, i added a simple confirm button, if there are buildings to removed that were configured before.
I started with several small fixes like the slotIndex so a work with multiple persons is good animated, fixed a refresh of the customer slots, broken metabolism and much more. After this was cleaned up, i migrated the old modules to the new generic room concept by using them instead of the other modules for the starting scene. I found, that adding a templating mechanism for them would be way cleaner and should not be so much effort. I decided to build it with entities and add the default templates at the start. Creating new ones from existing buildings should work easy later and its directly stored in the savegame without much more additional effort. Its a pretty easy setup, so maybe i can also store it in the playersettings somewhen. The canteen, sleeping module, toilet and the constructionroom now using templates
I started the day improving the editor. To make it easier and more error tolerant to configure the interior and work, i created a generic annotation, that can call a method to identify possible values for a string. I also migrated the old Resource Editor (that did similar things) to the new generic version, so its now easy to configure also later for possible mods. It took a long time to respect all the special cases in the usages, but it ends up with an easy to use editor :slight_smile:
After that i improved the style and behavior of the new ConfigureBuilding Dialog, to make it more intuitive. I also moved the ground 0 of the scenes to the walking area. Till now, the gridstructure was 0, but due to the changed building system half a year ago, its now more useful to use the walking area for that. It fixed some strange position offsets when trying to select on high camera zooms. To do that, i needed to change all the models, to have a clean base. Also a lot of configurations need to be adjusted, hope i hit everything
When zooming away from the building while configuring it, the panels overlapped. So i added a general feature, to show/hide the panels on different distances to the object from the camera. I did it that also multiple of these can be added to the panel, so it now can easy switch to different styles, depending on the zoom level. For high zooms, i just show the work and a delete button, to prevent overlapping.
I started to add other RoomTypes and added a crew room for sleep, eat and drink and a bathroom for the toilet.
After some days of break and working on another project, i came back very motivated :slight_smile: I added support for rotate the interior with middle mouse button like to be able to place with mouse only.
A problem was the air-volume, due to it was done static at the constructions. Due to the room (as a construction) can have different values here, it needed some refactoring. Doing that, i also changed the way the constructionResources are used, so the data stay at the place to not get into problems later when updating buildings.
After that i had an idea to add UI Elements directly in the Scene with world-coordinates. The first usage are panels at the placed interior, to show the data, and a remove button. I plan to change the style when its zoomed out to hide details. Maybe just leave the work icon and the delete button. Later i will also use this architecture to show the seal buttons to the door of selected buildings and maybe to the resourceboxes the fill-status.
I added a new efficiency icon and improved the calculation of it and also show the converted resources. A minimum speed and efficiency is also added, and the customers summary is hidden, when the work didn't have customers. I improved the usage of the speed and polished the UI for it. The efficiency is a bit more complicated, due to in usual conversions, its just effecting the energy, but on construction and maintenance it effects everything.
To make it not just like dropping the needed things, i added some effects to the interior. To make it more clear, i changed the current efficiency to productivity, due to that discribes it better. Efficiency is now only used for resource efficiency, so the amount of tools per maintenance or the power-usage of the building. In addition to that, i added a speed value to make something faster or slower. I also added a lowering value as more items are placed in the room. It can be setup for each iterior by itself, so its very flexible. Also the amount of worker slots and customer slots can be adapted.
After adding the maintenance work, i remembered, that its not possible to have 2 workingplaces in one room yet. So i adapted the simulation and interaction systems to support that also. A lot of things were already prepared while i did multiple customer slots a few months ago, so it was pretty easy.
I added a legend and added i18n to everything whats new. I found some cases, where not reachable parts were allowed, so i also improved the algorithm of the problems and make it also reusable for different parts of the game (pathfinding, rendering, validation).
There was also a problem with not walkable areas, that are blocked from Interior. Persons just walked through interior to reach it. I added an algorithm to detect the reachable areas and mark them on the interior tiles as a bit darker green, due to this is allowed. Later i want to use this as "free walking space" to improve the building-stats. For now its just used for the visual grid and to prevent persons walking there.
To make it more configurable, i added the maintenance work also. Its sharing the storages but need a separate working place. I improved the UI, to have big buttons to add the work and for placing / removing the interior. The finish button is now disabled, till all requirements are fulfilled for all added works (and minimum 1 added work).
After that last basics, i started to polish everything a bit, like storing the rotation to place e.g. multiple storages faster next to each other and improving the texture-buttons. It also highlights the current selection and uses the one from the configuration, to have good defaults.
Next step to make it easier to set it up was to hide the upper part of the building. Hiding the glass by material was easy by just disabling the rendering of that materials. The hiding of the upper part i prepared already the other time using the shader. Just adding support for it to the entity and it was done easy 🙂
I improved the tile-view to show also problems and prevent the drop of a interior on top of other and outside. I also added at the entrance and exit walking blocking settings, to prevent blocking the door. Its now also checking for the path to the entrance/exit to make sure, all positions are reachable. Missing a hint to the player yet, why its not working.
I added a configuration for the work, to say, what interior is needed for it, and calculate the needed storages and add them also in a generic way to the list.
I added some basic BuildingResources to the size of the building. Later the interior will also cost some resources to drop. To make it work, i needed to update the animation positions and the resource-paths, so the resourceboxes are working well. So the current state is already a working construction center build with the generic room. Its going to be finished
Due to the custom rotation, it was now also needed to support 90° rotation of the Stacked Storages. It was easier than thought at the first time
While testing the code, i found it very anoying, that i need to click always throgh the menu, so i decided to show the often needed buildings when opening the buildmenu. At #1 is the Walkway and below, all generic buildings will be shown.
I polished everything a bit and added rotation. I found an anoying bug with the position calculation of the child objects and fixed it, so they now are at the correct place.
Before starting with the Interior placing, i added the camera for the configuration. The original camera is not fitting well, due to the angle causing walls in the way on lower zoom levels. Its also not so nice showing the player, that he is in another mode. Its now moving an zooming to the building, and keep the camera in the building to be configured.
I added an overlay for the interior, so the tiles are represented. To do that, i refactored the current pathfinding, to also have the core calculation better readable. The Rendering was pretty fast than, but maybe needs a bit polishing in showing the grid more clear.
After that, i started to do the switchable tiles and floors. It needed a bit more effort, to prevent generating hundrets of materials, its now generating it on realtime, when its not yet created. For now, there are buttons, tomorrow, i want to add some round preview pictures instead, matching defaults and highlighting for it.
I started with the new Generic Building, so the player should be able to configure the buildings by placing interior. I planned to do in this iteration a simple placement mode, where the player can just set the position of the needed items. I planned all the needed steps and started.
The Interior and BasicBuildings have been promoted to a configurable Object, so it can be used easy. I added them to the Image-Creation process and started with the configuring of the first generic Room.
After choosing the new Room, its showing a popup to select the building-type.
Finished the last open things found while developing, like flickering some parts of the ui or animations when enter/leave a building.
I also did some playtests and fixed some smaller issues i found. After that i did a release. The buildtime with the new rendering is way higher than for the forward rendering. It took ~1h in total to build (before ~20min)... But it worked fine so far
I worked more on the new UI Design. It take a lot of things to adapt. Close to all colors have to be adapted to the new style. Still a few things to change, but progressing fast, so it will be in the new release
After finishing the migration to separate the Work from the Buildings, i started a generator for the lights. This was needed to have a balanced lighting inside of the building. It generates it depending on the Tile setup, so it should work for any kind of structure. Its also a base for a possible "custom buildings" feature in the future. Its also grid based, so its bending to the correct points in the circle.
I started by removing the old animationArea to replace it with the new algorithm to find a free tile in the building. So its no more needed to set this up and it should also work later, when the player can setup the interior by himself.
The next big refactoring step is to move the Work out of the Buildings. The main part here is to adapt the UI. This part was also done very early, so it take a bit longer to refactor to the newer architecture decicions.
While implementing the Animation Paths inside of a building, i found it very anoying, that i used y-z wrong in the GridPosition. Originaly i thought its good to have x,y for the grid and z for the hight. But converting it to different coordinate systems took a lot of effort with a lot of errors in it, so i spend half of the day to migrate to a more standart coordinate system in the grid. It took so long, due to its used in tons of systems, everything related to animations, the icons, inflating walls, settings, paths, editors and much more.
After all this preparation, it was easy to apply the pathfinding for the area moving and the move to action-point. It should now avoid obstacles in the way . Its not optimized yet, so when they try to walk diagonal, they walk just streight on the tiles. I plan to add an algorithm to detect if a streight way is possible to use it like before, but i will plan this to a further iteration for now.
To round everything up i added interior bounds. Later, players can place there the interior, but till now its static predefined buildings, i need that to calculate the paths of the persons in side of the buildings. I implemented the A* in a more simple way than on the big tiles, due to its a bit different usecase. For the big tiles, i implemented it using the entity graph and also highly cache the value. This cache was needed, due to its calcualted each time a storage connection is checked. For the interior path finding, this seems not needed due to the small building size and veriety of start/end positions. The Animation creation could just use the A* every time, but maybe i will cache some parts of the calculation. I plan to add the usage of this path finding tomorrow. Till now i just created some simple Tests for it.
Due to the new Interior grid, it looked a bit anoying, that there is now space to the walls. I decided to create a new one for all of them. I started with new ideas of the basic design, but all were not so nice, so i stick to the current design. To the walkway, i added a separate connection, to deal with the new space. The first 1x1 model took already 1 complete day... I tried around with baked normals and added some more details.
After that was done, i copied that part and created all filled buildings.
I added interior tile settings to the different interior items. For now, its just used for an automatic cutoff detection i created afterwards, so its not needed anymore to setup the cut of the floor in front. Its caluclated at runtime. This is needed when later the player can set this up. I added also an editor to debug it easy and moved the 0/0 position so the grid is aligned to the big building tile settings.
In the afternoon, i thought about how to deal with the walls/floors. Its the last part to reuse the basic parts of the building. I played around with several ideas doing it in the shader. So it will stay One render call, but the shader is using now multiple textures. One for the basic stuff, one for the floor and one for the walls. After trying to do it similar as green-screen in the television, it failed when the baking merges the colors, so i found a way easier way: The UV-Value. If its inside of 0..1 its the regular texture. If its above it, its wall, below its floor. This makes it very precice AND easy to define directly in blender.
The last 2 days, i did some refactoring, to make the migration to the new building system easier. Using more entity data and less prototype stuff and trying to migrate the conversion logic to a event-based aproach so the storages can be also used from multiple works. The Storages have now also a separate Animation Position, so animation errors due to wrong configuration cannot happen anymore.
After that Simulation stuff, i migrated all interiors to a new interior position. The idea is, to let the player choose create the buildings by himself. To make this work, the first step is to align the interior to a grid. The buildings will get a bit smaller, due to i leave 0.5m space on all sides. So inside the 5x5 meter tiles, there will be 4x4m space. A long building will have 5x4 space due to the middle are. Some Buildings still fit well, others didn't fit so well, but step by step it gets more close to that target
I continued to try to create Generic / Reusable Buildings. One Problem there is the floor, so different parts of the Mesh needs to be hidden, depending on the Storage-Stacks. To have a space for the boxes to move from below the floor to the top. After several ideas, i found doing this with a shader would be the ideal part, due to its not cost any additional render calls or even vertex count. Its also so generic, that it can be done for any mesh. I can now pass a bounds to the shader and its cutting of all pixels inside of that 3d bounds. Till now i can just pass 1 element, so its not so generic yet, due to some limitations of unity... But i can do a fix number of them by hand Maybe i can use one Matrix4x4 easy pass 8 holes at once and calculate the positions with the shader also.
I worked more on the Migration to the new Rendering System and finished migrating most of the normal Buildings. While doing that, i accidentaly make the yellow parts of the box-stacks more green and red, but i liked that way to symbolize IN and OUT storage, so i keep it
I created a small comparison for the change in example the maintenance module before and after the change.
I also needed to update more lighting effects, e.g. to disable them when the general rendering is disabled. I also want to give them a special effect, so they can start/turn on, when the building is working, or in other conditions. Due to i also planned to add a "Day-Night" schedule for the crew i plan to directly plan for that case. As a short background: Humans have a ~24h internal clock cycle, so in the ISS, the lights are adjusted to this so in the night-time, the lights are reduced and more red, on daytime always on max brightness. I added the change of the light as an experiment now, it goes to red to ~21 o'clock and turns bright on 6 in the morning.
I also tried hard on the sun-shadow and found several problems i had in the scene, due to some limitations and internal techniques to render them. Its only working for the main light, that wasn't set well, and also some distances that are needed in space are problematic. I found that the main problem is the maxShadowDistance. If this is too low, it will not render shadows further away: So the station is enlighed completely for the sun. If its too high, it has a very poor quality. In closer zoom levels i need a different value than on higher zooms. Good, that it was possible to set this on runtime.
Due to the sunlight can be very anoying to the day-night cycle, i thought about turning the glasses darker in the night mode. I also thought about a different orbit, so its orbiting slower with 1 turn per day.
While thinking how to migrate to the new Lighing concept and use the advantages of it, i had a good discussion with Hokay about a possible feature. The plan is to let the player place the interior things. Its a very big change and will take some time, but i have a plan to do this step by step. I first start to migrate to the new lighting concept with one building. It was again very challanging to make the save-process work well, due to its storing companion game objects in unity. This is very hard to do, due to till now, i stored the path to it to make this work well. For all lights, this would be a mess, so i did this in an easier way. Now simple Companions can be stored without big overhead.
I fixed some small things i found and tried to create a more dark style. I didn't finish it, but its prepared and easy switchable.
I found that the new unity version get out of beta. After fixing some issues with the UI Toolkit, i tried to compile, but the burst compiler crashed withh a bad memory error from windows... I analysed that the problem is the burst compile of the big Simulation System. After removing that its not crashing anymore. I reported a bug to unity and hope the best. After disabling, it still looks running very fast, so i will keep it disabled for now.
Today, i finished the last things to be done in this iteration, created a very short update video and released everything. Here the video and article. Next iteration, i plan to do the factories, to have more content to play. I plan to do a "Workshop", maybe a bigger factory and maybe also a recycling center to have a closed circle for resources.
Due to the new UI, it took always a deselect to open the buildmenu. To make this faster, i added "b" as a shortcut, to deselecct and open the buildmenu. Than its opening another new feature, that makes it possible to search for buildings. So the player can just press "b Wal" and the Walkway will be shown. If he is pressing enter or just clicking in the screen, the building is automaticaly selected as to be planned, so he can directly drop it.
After this big changes the last days, i did a short test and found several small UI and Tutorial improvements needed to be done. I also found some bigger bug i needed to solve, related to the new seal feature and changed neighbor algorithms.
I also started to refactor the BuildMenu to add a search bar. This should make it way easier to find buildings, at least when more comming soon
I fixed the problem where the buildinglot problems were inside of the inflatable-walls, by adding a customizable offset for the icons. This also makes it nicer for bigger buildings, so the icons are now centered over it, or are drawn at good spots instead.
I also fixed some small things like the highlight on a button or handle easy thrown out the uma context sometimes over the day while development.
Finaly finished the seal topic today, by making the persons-overview next to the section dependent on the section and fixing a last bug. I cleaned the obsolete stuff in the code away and polished that part a bit. Than i fixed and improved a lot of small things like the flickering selections and instant showing the complete supply popup, without loading things afterwards in, so it looks more polished. The sideMenu is not not flickering when changing the selection. If its hidden, it waits for the mouse-up now, so it stop looking broken. The h2o container of the person-need was also at 50%, due to its an optional container, but that looked very bad there, so i make this like the others.
I found more wrong stuff: After sealing, the target N2 values were wrong. Also problems with the Humidity effect that is now dealed by the sections. I added some more automated tests for it and finaly finished this section after ~1 week of development... Now its time to clean it a bit up. Now just some UI elements need to be polished, i started with the seal buttons. To make it easy to see what it is, i highlight the neighbor related to it. I also hide them, when there is no neighbor, so for walkways are not always 4 visible. The Building is also added as an icon, to identify easy what it is. A tooltip has been also added with a big icon and the building name in.
I added more consistency checks to make sure everything runs fine in the simulation. With that i found some more small issues with destroying buildings. The main part now works fine, now need to deal with the special cases of the seal, when the player splits the ship into 2 sections. E.g. the constructionModules need to stop/restart work and also the persons need to deal with it.
I found, that one test failed due to a missing special case in the gridNeighbor calculation, so i decided to add a consistency check job there to make sure its logging better errors and prevent this in the future. Another bug in a special case of the construction with savegames leads to another bigger problem that took a longer time.
There was also another bug in the mass-construct-walkway integration test, that some mass was lost. After analysing, i found, that its an wanted feature. Due to there is still air in when unsealing, the air is drifting to space. When deflating, the building is separated to a new section with the amount of air and water in the tubes. This is than destroyed, when the building is destroyed
Today, i migrated the Air Leaks to the new Sections instead of the ship. Than i tried to check all tests. A lot of them failed, due to several issues, needed to be fixed one at the other. For example the mass calculation not respecting them, or some work-updates were missing. So good to have these tests
It looks already way better than in the morning, but still a few things open, like assigning the persons metabolism to use also the air of other sections, when they migrated. After that big work, it needs than some more tests and checks to make it stable. I expected a lot of changes, but i didn't expect to be so much.
I migrated the Air and Tubes to the new Sections instead of the global ship. There is now just the electricity left. I also used the section-containers for the bottom UI. For the testing now, i can change it when selecting a building. Later i will add a popup to change between them also. I also moved the work-stuff to the new sections when change and working on more adaptions. Its a realy big simulation change...
Before starting with the Sections, i did some performance analytics and found something realy big for the editor. As a test, i just used the testscene and fast forwarded one month. I found several things to optimize. One big thing is the sync. The simulation gets it's own simulation values where its calculating. To migrate this to work directly on entites can be possible (maybe just partialy first) can be an idea to optimize that AND make it simpler. The second part, where a lot of performance was lost was a bad placed sort for the history item. Instead of sorting before showing the values, it was done after adding an entry. When running with 1week/s, there come hundreds of sort calls on big lists, what causing in the editor already 0.3ms for each sort. It looks like it could pushed the performance x5 already
Than i continued with the creation of the ShipSections and got pretty good progress so far. I hope i can finish that tomorrow.
I also did an algorithm to push the buildings to separate sections. This is using the neighbor calculation and try to identify current used ones and try to split or merge them as intelligent as possible using bigger groups as priority.
I played around with naming the new Sections in an intelligent way, but this seems not feasable to be high performant in a Burst Job, so i decided a simple way instead. New sections get simple names. Sections with names get priority when picking a name. The new sections names get reused, but they are still created as new, so when settings are added, they will not applyed to them.
The calculation with the basic ship needed in the editor already 0.6ms (without burst). I tried to make it more performant, due to it was running in every frame, but than i decided to use the mechanism of the gridNeighborSystems reclaculation, to also trigger this update. If this is just running very rare, 1ms is fine enough for now
I finished the last polishings for the new UI structure and could finaly start with the seal. It takes a big refactoring, to make it fitting to the new requirements. This part of the tile/neighbour code was also created in the first weeks of development, but it it workes pretty easy without bigger problems.
Today, i redid the photo scene, to improve the speed generating new icons. Its now migrated completely to new UI Elements and showing the icons with the real backgrounds, to make sure they are good visible later. I added some new Icons for the new Menu also.
I finished the structure refactoring of the game ui. A lot of things are changed and aligned. There is now just one panel style, aligned with all ui elements around the screen. Also the Buttons directly on the gameplay get a separate style, that is (without highlight or active state) the same as a panel. The section part below also got the same border style as all others.
Due to the planned Sections in this Iteration, i also need to rearrange the UI and split up the section element from the ship elements.
While doing that, i came up to completely redo the basic structure of the Game. The header and footer is removed. Instead, there are several single items, so it looks more open and clean than before. I also had now space for a mainmenu button and moved the feedback and help button there. To gain even more space, the buildmenu will be moved to the left, to have space below for the new sections elements. Other things for overlays, camera or the supply-button have been also moved to the new side menu. Its hidden, when something is selected. Special Thanks to Hokay helping with it . Here a work in progress screenshot for some previews.
I refactored the ResourceContainer Management, so instead of multiple ones, we just got 1 big manager now, dealing with all of them. Each Instance got some callback methods for the events. More logic has been moved to it. For now, just for the building-specialcase but i want to migrate the other logic also to it, to cleanup and possible optimize the stuff easier later and simplify the code. I created a special test for the building container and tried to use the new system and it worked pretty well. I released a patch version with that fix and it was tested sucessfully (thanks to Ichao for testing).
This iteration will contain a very big simulation change, related to the splitup of the ship into different ship-sections, so it will also use the new container logic. It also has influence on the upper UI, so it needs to support multiple ship sections. I'm thinking on a way also to name them and keep the names when open/closing air-locks. Also critical, if persons should be allowed to go through. Maybe they need some different options like disabled/enabled open/closed. This will have a bigger visual problem for the animation of the doors.
I started to bake the trailer and needed to update a bit, so the persons working in the building while showing them. I also found it a bit strange, that the engine-destruction lots are still visible and changed that. While updating it, i also improved the first part, so the building-cycle is also visible.
I also did a new Release with an article and an update video again:
Thanks to ichao, i directly got a bugreport, that something causing again an endless loop in the simulation when updating the tubes... Due to so many problems with that part (also last time when i changed that) i decided to completely rethink the architecture there, to prevent that in the future. Too many special cases. I have already some ideas to make this simpler and more error tollerant: Current there is a big logic calculating the next update of a work. I want to change it to external events, so not the work calculates when the resourcebox will be full, just the resourcebox get an event, when its full triggering an update of the work. I work just on that now and release a patch release for it.
There was a problem at the lighting of the new bone-animation-shader. If the animation got too big in rotation, it looked completely wrong. The model was dark, but all around were bright enlighted by the sun. I idendified the normals as the problem, i didn't do it in the shader yet, due to it looked fine so far and is very complicated. As i thought it was like that, but in the end, it worked
Next problem was the generation of the Animations. It was very inperformant. Due to a lot of new animations, the baking time increased to ~1.3s, what makes it very laggy. I started to optimize it, using at the expensive parts multi threading and prevent too expensive things and could reduce it to ~300ms, so a 75% reduction. In total including the person-mesh generation its now at ~400ms, so not perfect, but a bit better. I first tried to generate on eperson per frame, but it was still lagging too much, so i needed to split it to multiple frames instead, making everything in the row supporting async generation. It ends up in a system, where i can setup the maximum time per frame what i setup to ~30fps what hited in the profiler very well. Only disadvantage: the Person is invisible, till this is done. But the person is anyway in the supplyship in this time. Just at loading, it looks like they are loaded async afterwards, what i think is also fine.
After a short test i didn't see any lags anymore, so i guess everything is ready for the release
Do more small bugfixes and added some holders to the storage-module, so the water-boxes looks nicer attached to it. I also decided how to deal with the resources in the containers of buildings, that are dismantled. They will just be lost, due to i plan to add more internal resources e.g. for the greenhouse of the canteen. These cannot imported easy to other buildings, so they will be removed. To protect the user of unwanted destruction of resources, i added a warning, showing the resources and let him confirm another time.
I did a long playtest and found a lot small things, that i fixed afterwards directly. Things like loading problems with doors or resourceboxes not rotated with the ship, but also smaller other things like outdated text in the tutorial. "Humidity" was listed in the supply-resources and so on. I also make the Photovolitaic panel buidling just selectable via the main part of the building. It was too anoying always selecting it by accident.
A bigger bug was that the container was bugged. It didn't start automatically when the ship using water in the new pipes. I decided to test this in more detail and write automated tests for that new system. This lead to several other improvements for tests i will working on firstly. Each Test took ~3s, so for 400 of this tests it got way to long. Main part is the person generation. I need to use a default person for the tests instead of creating everything at once...
Another thing what i found was, that there is a big lag, when a supplyship arrived, caused by 3 person generations. Each one took ~1.3s with all the new animations... Need to do this async instead. When loading a bigger game (8 persons the game will hang completely ~15s, what needs to be done async and maybe more performant (maybe also when the game is started, due to its not effecting the simulation).
I also need also to animate normals. I thought its not so visible and fine, but its very very visible at the solarpanels, having completely wrong sun reflection.
I found a potential bottleneck for the i18n init. I changed the architecture, to initialize it not completely at startup. Due to it got a lot of values, so when the first usage of a I18n translation is done, it lookup in the json.
It could happen, that the connection amount is >3 for the normal buildings, when using the new shortcuts added in the last iteration, so i fixed that. After that, i let the persons just use the actionpoints, when the building is realy working. So in the construction module they are not working, when no building is working, or no resources are there.
After trying a Playtest, i found a flickering in the selection, that was very anoying. After long debugging, i still couldn't find a reason, so i changed some of the models to the shader-highlighting, without rendering around.
I finished with the sleeping module improvements. I added a separate bed and a sleep animation.
I also created a separate Water-Tank Model as a replacement of the box.
I improved the Trailer by adding more buildings and also speech. Its reading with a deep voice generated like for the other things with the google AI.
Afterwards, i created some more animations for the canteen. Eat and Drink animation is also done. To test this easier, i added a possibility to show the building in the testscene and autoamticly spawn persons doing the actions on each action point. This simplified the testing a lot.
I tried to add the inner looping feature, where the inner loop can be defined inside of the animation clip. E.g. sitdown-do something-standup is in one clip. The inner loop would be here "do something". To make this smoother work i decided to change the defaultpose algorithm (where the animation tries to move to before switching) to a more convinient "blend" feature, where 2 clips can be blended into each other. One part was, that the shader accept 2 clippositions and a fading value. The second part was refactoring the algorithm on the CPU.
Afterwards, i added the looping in range feature.
Also the Toilet has been adapted and now just has 1 output garbage storage for the Brown Water. I also left a bit space for a small shower if this comes in one of the next iterations. I also added a sit-down animation.
I tried to setup different worker and customer slot action points, but the customers were stored without an index. So if customer 1 left, customer 2 become customer1. This was not a problem till now for the simulation. Now i need that info for the animation. To do that, i refactored the part, so the building also stores that info in the entities, and with it a slot Index. It can be also improved now, that the player could assign persons to explicit slots, instead of just adding them somewhere.
It was pretty straight forward to add that, and was easier than expected. Hope i didn't break something there, tests are still green :slight_smile: And now its using this new slotIndex to get the correct animation. After finishing, i found, that its also nice for differentiate the working slots. So when the specialization for persons are added its possible to setup different requirements for different work-slots. Like one leader and 2 helpers, or similar more complicated things. Also its a preparation for assigning workers to a workingSlot instead of a complete building.
I started with creating a Debug scene for the Persons, to have a better view for the other. I also added a work-index and a slot-index to separate different actionspoints for different customers and work-types. E.g. in the canteen, there are one for eating, and 1 action for drinking. In the construction module, there is one for each working place. Need to think about how to make an open one usable when just 1 slot is used, otherwise it would look bad, if he just works on one station.
Also finished the new interior of the canteen. Added a chair and table and moved the tripplebox to 3 single boxes, that uses way less space with same resources. I replaced the big water storage with the srink.
I tired to use a tool for animations. Its adding IK Bones to a mesh. The original mesh of the tool was not working well, but it was possible to use the UMA Default Mesh with it. Its in Blender and pretty cool so far. I figured out a Workflow to create multiple animations in one file. It needed to be exported, to see all, but it works.
After redo the old animations for idle and ScreenTap i started with a more complex one. Unconscious for the persons, including a standing up. Not perfect, but as a starting one to test the process i'm happy with it 🙂
So happy, that the deferred rendering now works with the Entity system, so i can get rid of the prerendered lighting in blender. It didn't look good and looked like very low quality. With the new Lights i can create the buildings in a new way without having all things in the building and can do more in unity. E.g. i plan to move the boxcontainers to a separate model, so they can be reused now. Before that was not possible, due to the baked lighting they all had different textures. This makes it very hard and time consuming to deal with the models. Now i can put them together in unity. There will be way more render calls and more gpu usage due to more lighting than before, but all batched through the Entity system, that usualy can handle millions of calls.
BUT after i tried to compile, it fails... Need to wait a bit more, but its very promising, that it starts to work soon
I continued the Iteration improving some small things like the headline of the buildingUI was crushed a bit when the content was too large and using the new emission_color part of the shader to setup the color instead of duplicating the material. I also created a queue for the speech, so its not canceling an old played clip when a new one come.
I also started with a bigger topic: a visible resourcebox fill state. I had an idea to solve that easy by using a shader. So i can setup how many items are stacked inside of the box and the shader calculates with a simple value what vertex are visible. So i just need to create a system to set this shader-value and it should work fine for all of them. Tomorrow i will add another shader, for e.g. the rendering of liquids like water by just scaling it.
I also started to redo the models for the new requirements. First i changed the Storage Module by adding a water-barrel and added 2 more box-positions for the water pump. The FillState of the Storage is representing the current fill state, similar than in the boxes. I want to add an "walk through camera" later, so its now also important to see something when walking through the ship, so i also added a big window where the persons can see the stored resources.
Due to i want to redo most of the buildings, i thought about trying also the lighting again. This would improve the quality of the game a lot, but i did this already several times and failed all the way long on the hybrid renderer. This time updating to the new unity beta it seems it works. They added defered renderer technique and my hybrid renderer seems respecting the light So i need to experiment a bit tomorrow. A bit sad, that Runtime Global Illumination is not working, but i will go for regular lights instead.
I did some last polishings for the new UI for Optimum Boxes (like the Air). Also there were a lot of small details left for the new Building Containers, e.g. to adapt the mass calculations and hide problems for the pumps, if they are at maximum.
There were also more parts to adapt in the Buildmenu and MultiSelection Details, a lot stuff to update
Due to the new Internal storage things, the working process gets more and more unclear. I started a redesign of that part and come to 100x100px boxes containing the resource. All have the same size, so it should look more structured. I also packed the storages and connections to the 100x100px to have them together and not so separated.
With this design its now easy possible to push small combinations to one line to make it look nicer. To Separate the others, i added big background images. The Ship is shown as a circle, so inside the container is also a circle now, to see easy the ship resources. I need to think about how to show the Air-Values, due to they have no maximum. I also want to improve the person and the in building storage a bit more, but the UIElements are very limited .
I found, that the colors for the boxes and containers were different. This looked not good, so i aligned them.
To start with the tube system, i created a new work-resource type for the storage, so buildings can have internal storages and can push/pull the resources into it.
I also added the feature, to toggle between different working modes. This was anyway needed later for e.g. the refinary or factory, to prevent building specialised buidlings for each resource type.
I updated to the new Unity Versions and thought about the tube system. To make a tube for all Liqids would be a big change and i guess more effort. Instead i thaught what is realy needed and come to the conclusion, that O2 Tubes are not useful. The Buildings needing O2 can just grab it from the air. The only stuff what usualy cannot get from the air is water, so i make a separate "Humidity" resource, just for the Air of the ship, so the H2O will be free for a tube-system.
It can be also useful. For the Mass-Balancer its anyway needed, so i might just need to add box->internal storage (a resource container) converters and creating special works that are able to balance them. The player should be able to setup a target-value for the internal storage and it should be somehow visible in the Mesh (e.g. a transparent bottle to see the fill-state. This might also useful for the big engines, to store fuel, and they could act as a fuel storage.
I played a bit around with the new Idea to have tubes and with a fast try reusing the current system it seems working fine so far. The main issue is to make the UI nice for it and think how to make it work. I'm thinking to make a separate logik and make it togglable, so it can be used as an input OR outputstorage, that can be switched by the player. There are 2 pumps in the buildings. One for box->internal container and one for internal container to the tubes of the ship. Both should be toggled separate. The mass balancer maybe just needs the internal storage, so no waterboxes need to be transfered to it.
I fixed some last things due to the new Init process and decided just to release it now, to start with new topics.
I found and solved some problems with the new Persons, e.g. Missing selection and some save load problems, related to the new game-init architecture. Afterwards i tried to paralise the Game Init, so at one run, a lot of mesh-splittings getting scheduled in paralell and reduced to 1 calculation. So it reduced the startup in the editor from 1.7s to 1s. At loading its down to 0.5s, due to the cache.
As a last thing for the persons, i respect the the generated name to the gender of the model. I updated also the other buildings to work with the bone-animations and fixed some tests. It was a very long iteration and not so much visible, but it was the base work to make the next iterations nice
I started to add a serialize support to the UMA, so after loading a game, the model can be recreated. DNA Changes are also supported now, and i randomized the DNA, so the person-meshes also looks different.
The Main part was done so far, so i started to integrate it to the game, and it worked so far very well. All system seems working good with the UMA-Models.
While i tried to add the save system, i had an good idea for a better integration. I created Entity Components out of the data and a system to update the Entity. Now its just needed to add the Race/Slot components and the System is generating or updating the character. With that it could be also easy possible to add a "fittness", or "thick" component, based on the player stats, and the mesh is also reflecting that.
I needed to adapt a lot of my shaders to the different kind of requirements of the UMA-Materials and changed a lot of them. I also support the Animation for multi-material meshes. This was not so easy, due to unity creates "by magic" new noded and it looks there is no way at the generation to manipulate them.
After that was done, i tried to reuse the baked animation, but it seems, the bones depends on the slots, so its not working well. I need to bake one Animation for each bone and each mesh, what is not realy nice So my next task is to hash the slots for the persons to reuse the meshes and animations.
I tired a small performance test with individual generations. Each generation cost ~200ms in the editor. After all is done, its running with 30fps at 400 persons.
I randomize the colors fo the cloths and add a bit random tane to the persons.
I played around with the UMA Framework and try to extract the needed data out of it, to push it to my framework. Its evolved very well so far, also due to my gained experiences in unity, it turns way easier than some years ago
I created a testscene with several generated and a bit randomized characters, changing the shirt color. But it should also work to add other cloths and changing other colors. Its generated and than pushed through my animation-baker to gain an Entity ready, shader animated, high performance version out of it. Adding the Animations worked as before with the other models
The DMA is something special, due to UMA using bones to manipulate the meshes. To make that work, i need to apply additional DMA Manipulation Matrix to the animation-shader, so e.g. a bigger head or bigger belly will be applyed.
I recognised, that some meshes were not shown correct. The reason was, that still multiple materials were used, even they said its just 1... E.g. for hair, eyebrown and eyelash was not rendered, due to more than just 1 material was added. In my systems i just supported single materials for now, so i need to check how to adapt to that
I finished the skeleton animation shader, using bones by updating also the normals and tangents (no extra data needed). While cleanup the code i found, that there are always the same repeating lines in the animation-data. Turns out, that the last line is always fix in a 4x4 transform matrix, so i removed that part from the data and saved again 25% of the animation data
I start playing a bit with UMA, a Mesh-Generator for persons, i also used for some testings some years ago. Hope it can replace the dummy with individual meshes and skins. This was the main reason to do the skeleton animation shader, so the animation data can be reused.
I worked also on the editor. Before it used the unity inspect, what causeing very low fps while selecting something. I changed that to the selection and extracted the elements from the debugging scene to separate windows, so i can also use them for the regular play-scene. All working now on selection and i have a separate Inspect button to view the entity itself.
I thought a bit how to deal with the person animations. Till now, its a bit anoying, that all vertex values are baked. Till now (4 small animations) its already 33mb animation data to be used in the graficcard. When more are comming and more nicer meshes are added, it could blow up a lot. To deal with that i thaught about using directly the bones, and just baking the bones, this would reduce the size dramaticly, but seems a big effort to get it work. But if this is working, it could be possible to use a character generator to create completely different meshes for each person.
It was a long way, but it looks working so far. A big mess with matrix multiplications and try and error ends up in a very nice way to do it
Before: Person-Model including prerendered vertex animation: 500kb model + 3*12 MB Animation => 35MB
After: Person-Model with bone infos including prerendered bone animation: 780kb model + 1x 80kb => 860kb
So in total 97% less, AND its working with mesh changes with the same animation-data without rebaking. For the technicans: Each vertex has bones and weights. There is a default pose and the changes for each bone in each prerendered frame stored as a Texture2D for the matrix4x4 transform. These matrix are stored. I use 2 additional UV Layers with 4byte each to store the highest 4 bones with the 4 weights attached to them. This is why the model is larger than at the vertex one, there i just stored the index of the vertex (1 byte), now i store 8byte for each vertex instead. What was a big mess are the default-poses. That one HAS to match with the original blender mesh, otherwise its just not working well, due to the distances to the bones are different... This tooks a long time to figure out
Special thanks to https://webglfundamentals.org/webgl/lessons/webgl-skinning.html where i got most of the infos to learn from
To make the docking Animations better respecting the ship spin, i needed to change a bit the method that is used to spin the buildings. Before all were aligned with the ship, but that killed the information for not attached elements like the ships. I changed that, so all buildings know the current rotation offset of the ship, and added some systems to update them. The new Method makes it easy possible to just unattach without moving away to 0.
It's all not perfect as i wanted it, but the alternative way would be a complete physics system with calculations to the target values, what is a very big task. Due to its "just" the visuals, i hope its not so important. I adapted the animations of the Shuttlebay to the new system.
Due to the new way of docking the shuttlebay is so much better when rotating the ship, i also plan to replace the current dock, with an animated, more flat version. It will be at the front of the ship and a bit wider. Not sure if i do this still in this, or in the next iteration.
Added more person animations and started with the effects. I created a new System, that can work with EffectEvents, so anyone can add an enable or disable timestamp to the events. I also needs an adjustment to the positioning systems i created a 1.5 years ago.
I added the persons with their animation to the debugging scene and fixed several things for it and refactored the general animationpaths, so its using now easier settings. I also adapted the walking animation, so the foots are now fitting to the speed.
I created a simple tapping animation, so i can use it maybe for a screen later, it should be an example for now.
After that, i added AnimationActionPoints, so a point in the building, where a crew member will do a specific animation for a while, and setup the constructioncenter for it.
I started to fix the person animation and added also sub entities to the animation debugger.
I also improved the Debugpaths, so they are shown when an entity is selected. Also have simple 3D arrows instead of the strange line indicators before.
I updated the doors also for constructionSites and walkways. While doing that, i found that the doors had some smaller issues, leading to a bigger problem with the walkways. I refactored that so the doors are not changing the position anymore. Due to the many changes, the savegames will not work when updating to the next release
For the constructionSites, it turns out very unrealistic, so i changed the logic here and not adding some doors. instead its just closed walls when its not connected. It can be opened from the persons when the door of the existing building openes (not animated, but in reality ).
In the evening, i also found another problem, that dead ends of the walkway are not closed and fixed it. Hopefully the last fix for the new doors now
I started with the next bigger topic: New doors. Before there were just door-meshes shown, that were not realy realistic. Also there were a lot of problems when to show them. With Hokay we found a way nicer layout that can be animated and can be realistic. Its like at an elevator, but for the round shape. Its fitting in all current buildings at the connections, so all buildings can stay as they are.
I needed to adjust a lot of the game initialisation, to make it nicely integrated and reusable but it looks now working very well.
After it was working, there were still a lot of stuff left to adjust. I changed the Neighbor state calculation, so its now more reflecting the "accessable" state so for the building layer the "atmosphere" when persons can walk into it. Than i started to add the doors also to the walkways (what is another bigger topic )
I fixed last issues with the mesh-deform of the inflatable walls, so the deformation is now calculated correct. I also added additional tile with heights to the settings, to cover also very large buildings correct.
I started with an very old ticket created in march 2020 (GEN-267). The inflatableWalls were one of the first things added very early and got small refactorings over the time. Now i finaly improved the complete animation, so its inflating step by step, starting from the connected building. Its inflating new walls at already inflated walls, so also from left to right or from top to bottom, to make it look more realistic. Also due to that big buildings take also longer to inflate all walls.
I finished the part where the TargetAnimation is set by the efficiency. This visualises now more building values, so the player can see more direct whats happening, without selecting the buildings.
I refactored the Animation System. To be more flexiable, it will not work easy in the shader, so i changed it to a bursted job instead. This job calculates for the animation once the position inside of the baked clip. It looks working fine so far.
I added also a "Target" value, to set the clip and pct value of the clip. All clips have a default-pose position, where the system go first. It supports loop and non-loop animations and goes than smooth to the other animation. All still in a multithreadded burst-job to be as efficient as possible. The real vertex moving than in the shader. I also found and fixed some algorithm problems while baking the materials. I guess thats why the person had 1 frame wrong in the animation
After a long Debugging and tryout session, i finally made it to create also the bones and weights correct for the automatic splitted meshes. This means the animation can be done easy with the non split mesh and afterwards the systems generate all whats needed, to run in the shader the animated complexer meshes.
I optimized a bit more, and now it looks fine so far, so i can continue with the next level, to make the animations game related, so when happens what, when do they loop, when stop, move to separate parts of a clip and so on. E.g. i plan to open the panels step by step, to show the current power-usage.
I also started to create a debug scene, to make the development of the animations faster. Otherwise it will take a long time each time to reproduce the situations of the animations. I started with an empty scene adding the single building on pause. I will not do the simulation, but setting some values with new debug ui elements in the scene, like working efficiency. This is usualy done by the simulation and can be overwritten than to reproduce the simulation with an easy ui.
Due to some problems with the new meshes, i moved the bending logic from a generator to the shader, so it can be done after the animation changed the vertexes. This was pretty straight forward, but took a bit time. Also the new SkinnedMeshes behave different than the normal meshes (x,y,z values are different...), so it needed a bit more adaption.
I made the shader more powerful and added the grid-deform logic into it, so after it's animated, it will be deformed to the grid.
I started iwth the new animations by refactoring the way to deal with the working-materials and effects. Till now, it was in the sync part of the simulation, and i moved it aside to a separate System with multiple high concurrent jobs updating all the time. I did that a longer time ago, before i had the animation for the person, so it i plan to extend this method a bit, to be able to do it similar for the buildings, so the animations will run in the graphicscard.
I plan to do some door animations, at least for the shuttlebay, the solarpanels sould unfold , maybe to show also the current used energy (without the condition effect). Also maybe its a nice idea to move the mass-balancer down, to realy show the balancing. But for that i need to check how to calculate that
This is only the first part of the animations, the other part will be improving the inflatable walls and more person animations, so e.g. they can lay down in a bed, or fall over when getting unconciousness.
I did some last fixes a small test, an release with an update video this morning. I planned for the next iteration, to do some more and better animations, so everything will look a bit nicer. After that the next bigger topic will start. For now, its between some factories (combined with more complex moon missions) and Person Buildings (like relaxing areas) and more needs for the crew.
When using the choose feature it was just shown in one color. It is useful, to see more details there, so i make the highlight individual and action specific. So e.g. for Person Activities its differenciate the work and service buildings (and later the livingquarter). For Maintenance it will show the current condition and for building a difference between dismantle and construction.
Due to we see the condition in the choosing now, i allowed the player to choose to maintain also >80% buildings, so the player has more options. For the automatic choosing it's still waiting for <80% condition to autopick.
I also fixed a bug where the simulation not stopped well at some timewarps. It happened, that at long timewarps the person was already located in the next building. It could also happen in other situations. It was also happening, that the timewarp of a person was not working, due to a negative time estimation. I chagned that to a default one instead, to make at least a small timewarp working.
I also updated the screenshots of the steam page, to show the current state.
I found another issue with the new UI-Toolkit. the sliders look now extremely uggly. So i played a bit around, to make it fitting to the UI again.
Also a lot of small fixes: line breaks, air out of ship causes strange behaviors, tutorial layers improvements, overlapping consultant icon and more.
I also reduced the default Timewarp to 10min/s (from 1h/s), to prevent new players timewarping too far to the future, when there is a problem at the timewarp. Usually this is used when waiting for resources, so even 1min/s should be fine enough.
I also try to make the i18n files external, so they can be changed after compile. I hope someone with linux and someone with mac can try this out, due to unity didn't support this by default. I also didn't have a linux or mac installed
I started the day with showing the current speed if the simulation got too slow. It's now the same as for timewarps, where this was already added.
The Center of mass Overlay now shows the current center of mass. Before it was shown the center with 0 balancing activators, to make the mass balancers look working, the ui is moving now the center of mass point, where the mass balancers pushed it.
Its now easier at the startup to connect the storages.
So if the player presses CTRL and SHIFT, and just clicking on all Buildings, he can do that setup now in a very short time. Thanks to acidbeats for the hint.
I also added a warning icon to the overlay for general storages, when they are full. Depending on the player usage, it meight be a problem to be full.
Till now, all air values had the optimum value calculated for 1 bar. This ment, that when the pressure is low/high e.g the Oxygen was not adjusted to 20% causing troubles for the crew. I update now the optima, so this value is updated and there should be no strange problems with that values anymore.
I also changed the requirements when construction sites inflating the walls. Till now, it needed a gridstructure connection. Due to this is not realy realistic and leads to questions from players, i changed it to need a building-connection, so for now always finished walkways. This can than inflate due to the connection tubes. It took some effort, to fix all tests for that, but reduces the code a lot
When coming to the later game, it was a bit annoying, to transfer the water to the mass balancers, so i added a ctrl support to transfer multiple boxes. Its just possible for boxes of the same storage and just for the same resourceType. I also changed the transfer to the left mouse key, due to this feels way more convenient.
Ships gets bigger, crew increases. This caused a remake of the multiSelection logik. Its now unfolding as much as possible, up to the maximum amount. Means, when e.g. 30 walkways are selected, 20 of them will be unfolded, and just the 21. item will be "10 Walkways" more that can be selected also. It has also a priority for less selected buildings, so non-walkways will be unfolded more likely.
To cancel buildings, i added the cancel button to the multiSelection view. But when a lot was planned, it was still annoying to cancel them. Thanks to a good idea from Melodie i added a shortcut to cancel the selected Buidlings. Its showing a summary popup to prevent unwanted cancels.
After knowing how to do a clickthrough in Unity, it was possible again to move all Elements to one panel, to reduce the mess. But i still needed layers, so i added a LayeredVisualElement container as a root for the different things. All Add methods needs a layer to be added, so its now easy possible to stack elements, and e.g. the highlights are not in front of the mainmenu anymore. It should be now way less bugs in category
I also added the restrictions and game-ending popups. Its bound to a achievement. To prevent also building the other stuff, i removed the "show all" buttons. In all of this popups its showing the dicsord register field, so it should be easy for the player to join.
I finished with the Discord bot. Compared to the webtokens, they can upload images and check for roles of Members. I plan to add a demo version and gain more access to features, when players joined to discord. For that the bot will send a message to the player to confirm the account. I also added a "Demo" popup with an easy UI to connect to discord. Its 100% automated, so no waiting time or additional approve from me is needed for that. I also added the possibility to have a playtest role to gain more access in the future, for players who contribute and report a lot . I made a [test] Release so it would be great if some of you can try it out already.
Players accidentialy dismantled buildings, due to they are used to doubleclick. To make this less, i changed the behavior of the Timewarp button. It now just needs a single click. When pressed, its turning to a stop button, due to players who clicked it by accident can just click again to stop it. I hope the old players are not too annoyed to use it, due to they learned to doubleclick on them
I also played around with the Discord API and created a bots, that can check and grant permissions. Also uploading an image is working. This will improve the performance of the highscores and i can prepare for now permissions
I fixed the air-leak panel, that didn't remove dismantling buildings. I also make it a warning panel, instead of a simple info so the player will see that better.
I saw playtests, where players ignored the important warning panels. So i added a Help Panel to the Events when an specialEvent appears the first time. It's showing a help text next to it (with speech) with reasons and solutions.
A tester reported a serious problem with the new Shuttlebay. It crashed, when the building resource entered the building, due to i forgot, that construction storages are also in-storages... So i need an hotfix release. Due to i just updated the UI Framework:\
After several bugfixes due to the issues happened, i hope now its fine so far. I released the Hotfix branch 0.60.1. Already workarounded 3 unity bugs in the new UI Framework... Horrible...
After some day rest, i started working on the Bug that the workingplace react on a click in the choose worker panel. While doing it more generic and improving it, i improved selveral other things too, like the highlight effect for the choosing panels, so it feels more interactive.
Many Testers complained about broken ships during/after tutorial, or that the generator runs out. All of them already skipped ~1 month, but should have passed a day maximum. So I added a warning popup when the player wants to increase the speed a lot and is still in the tutorial.
After the last fixes, i did a new Release.
After the release, i tried to update to the new UI-Toolkit again, due to i got a response, that the css value for ignore events was not working. It seems, its supported, but under a complete different property... Not even in the style, and called PickingMode=Ignore... Now it seems working, so i try to migrate back to the original way, to fix also the bugs where things shown behind some layers.
After all new features are finished, i started to fix the last bugs. I make the Water in a person to an non-maximum value, so persons can still eat even when the water is full. It took a bit time to deal with some followup issues due to that change. I created tests for all of that, so its not breaking on further issues.
I also found, that the visible rotation of the ship was not working anymore after the last iteration and fixed it. On loaded games its now also updating the center of mass area again.
I finished basic Mission Planning. It shows up when a mission should start.
Started with the UI stuff for the Missions. When a mission starts, it shows the Crew and the required Mission Resources behind the storages. The Storage UI has been also optimized for that usage.
Also it should now not possible anymore to move the person to some other task by the player, while the person is on the mission. I also created a Icon for the Shuttle Missions. I also make it possible to choose the ShuttleBay as target, when the person is in the crew. This was a bit difficult, due to till now it was always a work assigned, as worker or user, now also another task type is possible.
I also finished to adapt the dismantle process. Its now removing the shuttle also and the UI can deal with it.
The UI for the Missions are also prepared. From the Design it's already a bit prepared for the next planets and further features. I will implement it in 2 steps. This iteration it will be just 1 simple "Drill for resources" Mission available. I plan for the next iteration to do more missions, so that players need to explore first in the orbit of the moon with a newly created scanner over the moon, to detect places. I plan to do that random. I will preadd some locations, with different type and amount of resources. For this steps, the resources like steel will be directly harvested, till i finish a refinary in one of the next iterations, to process ore.
I plan also to add different resource-strategies, like minimum, normal, more than enough, to gain more resources per run. Maybe also increasing success chanche, or increase people injured/diing chanches.
All of that will be done in the next iterations. For this iteration, it will be simple with 1 preknown location, 1 mission and 1 resoruce strategy1 to test the basic implementation.
While trying to make the person metabolism stop when they are on the mission, i figured out, that it would be easier to not abuse the workers for it and directly do a assign mission crew separate from the work. This would also more like in real world, where the crew is assigned for each mission different.
For now, the UI for it appears in the building, later it will be moved to the mission-choosing popup to assign it first.
It depends now also on the mission, how many persons are needed for the crew. Later i will add there also special needs, like engeneer skills. If a person has an assigned mission, it's forced to go to the mission, to make sure they not doing not urgent tasks. I also hide them, when the mission is starting and block several other things they would do.
In the late morning i started to check some bug reports from a player. Turns out, the Maintenance Module throws an Exception, when the target building gets dismantled. This causes several fails afterwards.
I started with the mission workflow and animation. For the workflow, i devided in in seperate parts like the Dock. After starting the mission, the boxes are used to fill the ship. So its directly removed from the box. If the box is empty its showing red as usual and waiting for a new box. The crew for the Shuttle i implemented as Workers of the Building for now. I plan to change that later, so for each mission the persons can be choosen and they will leave the work.
I also had an error report with chineese system settings. Seems Unity fails here while calculating the height of a element... They have a fix in the new version, but everything feels like a big mess there. Tons of things to do to migrate to it, and the clickthrough is "fixed", so my complete effect system would not work anymore. They also didn't provide a way to reenable this function... This is css basic function is needed for the kind of effects and overlays i have. Till that version it was possible to add multiple layers where the clickthrough was working, by just not using the effect layers event.
Besides that also a ton of other errors appears and they have a 5page migration guide with tons of text.... Seems i need to wait till that version gets out of beta and hope its getting better... Downgrading...
I started to plan the Task for the missons. It would be a similar aproach than the dock, where several steps are next to each other. I added a single storage of boxes, that is used to equip the ship when a mission is choosen. It can just store 1 of each box, to have more space to walk inside of the bay. I think also 1 is enough, depending on the mission it will use just partial boxes. Its than just transported into the ship. The gained resources from a mission will be in a general storage inside of the ship and needs to be emptied like at the dock.
I also got more error reports from Melodie, that i fixed most of them today. The Color of the Gas-Boxes were wrong and some namings were missleading. I also found the problem that persons were not finish eating due to their waterstorage is full. Thanks a lot
I created some test for the detected bugs from the playtests and fixed some of them. To make it easier to use the uploaded savegames in the report, i created a "Load By Url" including credentials for the server. Its downloading it at start and loading the scene, so i just need to place the ID of the error to see the game.
I fixed a lot of bugs reported by Melodie and Hokay, including storage filters were sometimes not working, maintenance priorities were wrong, duplicated shown container users and a better view for them. Thanks for the long testing
To make it easier to see that a resource of a building belongs to the ship (like energy or air-values) i added the ship icon in front.
Players complained also about the different units. The current way is to use the time to get a readable number. So instead of 0.0001kg/s its changing it to kg/d. Problem with that is, that the player see some values in perDay, and some perHour. This makes it hard to calculate with the values. So i had the idea to change all to /d and just change the weight value instead. So the player see 5g/d or 5kg/d instead. This should make it easy to calculate the needs.
Many players reported power outage very early in the game, in or close after the tutorial. I couldn't change the generators oxygen usage, to keep the physics. No more energy in the methane and it just needs the oxygen for the chemical reaction. To still let him not fail so fast, i increased the boxsize of the oxygen to 250kg. The CO2 boxsize is also increased.
Also watched and discussed with playtesters and figured out several improvements and some bugs i will fix now before continuing with the moon missions. They suggested also a tube system and adding a termal control, what i also planned in the first place but skipped a year ago. After the latest refactorings to the internal resource simulation, maybe its now easy to implement.
I had an idea to srink down the shuttle bay, so its now using 2x2 tiles in the normal area, 2x2 in the air lock and 2x2 at the catching arm. Another 5-6 tiles i will block for flying. I guess i have to update the planning mode to just allow the drop in the circle, till now, just a fix 0° (and 180°) is supported.
I improved also the design of the ship, and i'm happy with it so far. Next step will be adding some details, textures and all of that. I guess i also need to add animation to the hangar doors, or maybe i will just add them without animation and plan more animation for the next iteration. I also want to add some animation for unfolding the solar panels and the mass balancer anyway.
I also did more fixes for things the testers mentioned in the morning. One was the wrong model for the Walkways, that i also found some days ago.
I started to design the shuttle bay. To make it possible to land without stopping spinning, it will only be possible to build it in one direction. It needs a lot of space in x direction, so the shuttle can prepare for the dock easy. Starting is always easy, landing not
The shuttle will have space for 2-4 crew members and undefined cargo. I plan to not do boxes here, due to limited space in the ship. It will be designed with an open cargo space, where the crew will unload it when landed. I designed as compact as possible, with small wings to be able to land on planets with atmosphere.
The Shuttle Bay will be used to repair the shuttle, so they need tools and iron garbage, as the maintenance center. I'm not yet sure, how to store the resources, the shuttle needs for the missions. Current idea: Its requesting by itself to special storages and the load invisible (crew member inside of the ship?)
It will have a air lock at the front and a catching arm to be able to land easier. When the ship is rotating, the ship will just move at the height of the arm. (In game, the arm will be bended like the ship.
I added a tutorial for finishing the maintenance to make it more smooth and teach the player the target button of a Task. I also a small verify fix, due to outdated checks related to the new construction-module process a few iterations ago
The BuildingOverlay (condition) is now disabled during a choose action, to make it easier visible.
After that part was done, it was time for a new release, to bring the easier startup to the players.
Till now, the details popups were just visible at the Selection panel. Due to the resent changes it was also useful to show them somewhere else like at the Event Panels at the upper right. To deal with that, i restructured the architecture of them so they can now also shown as tooltips everywhere in the ui. For the Selection Panels its like before, due to its a nicer ui, and its posisble to show multiple (e.g. for resource connections).
I added an EventPanel when a person have a serious problem. A lot of testers complained, they didn't know why people dying. To help with that and deal with that situations better, i added now an simulation stopping event when a person has that kind of problem. This happens, when the person run out of water, nutrition or oxygen. Its also shown directly in the panel as a icon with tooltip in front of the person.
When everything breaks down, players didn't know why buildings are not working. I added now also a "No Power" Icon for that. The general one was removed, due to its very complicated to detect if its realy a problem. For this special case now its easy, so i added it.
Timewarping till something is repaired was using the default task timewarp. Problem with that one is, that its stopping, when the worker stops working. To fix that, i did something similar than for the construction timewarp, so its now warping till the target of the work changed.
To know, what players did to get to specific situations, i added more logging. Its also sent also with the F11 report or bug reports.
In the morning i finished the german translation with the new I18n updater. Took a lot of effort but i hope its the only big work. For now, just updates to that are needed.
I also checked for the problem of many playtesters that the humidity goes high very fast, resulting in a lost game. Turns out, the humidity goes bad due to the fast degenerating of the Lifesupport module. It was setup to 30d to make it inefficient, but results in a 22d to humidity increasing at the start of the game. That causes several building damages that new players cannot deal with. So I increased it by x4 to 120d, so the first 2 months it should not be a problem there.
Due to the second language, i needed a mechanism to update it easier. The import from the translator killed a lot of polishings, so i added an updater for it. Its checking if the text has been changed, before updating it.
I improved also the TextToSpeech by adding these values also to it, so its now easy to see what is spoken by the english language. I also finished the updater for the text and the speech. It will check all fields and ask for each dif the user and provedes a suggestion via google translate.
Till now, the intro was done with a timeline. But due to the new speech, it needed precice timings of the text. Due to i plan to translate it to different languages, it should also adapt to that. I tried around with the timeline, but it was way too complicated, so i decided to throw it away and do it completely new with a more programatic aproach. Its now messuring the speech and time it perfect to the video and the events.
I also improved the sound volumes to have a better balance and added a default ambiance sound as envelupo also suggested, to keep a more general loudness for the ambience.
Till now, the intro was done with a timeline. But due to the new speech, it needed precice timings of the text. Due to i plan to translate it to different languages, it should also adapt to that. I tried around with the timeline, but it was way too complicated, so i decided to throw it away and do it completely new with a more programatic aproach. Its now messuring the speech and time it perfect to the video and the events.
Big thanks to envelupo for the help with the english texts in the game. I worked also half of the day to adapt that to the game and renew all the speech.
I continued with the Speech creation also for the achievements and improved the speech creation widget, to detect the correct speeker from the context. I set for all consultants a specific speeker.
I also swaped the problem with the overlay icon, to make the problem more obvious. I asked the community for the oppinion
I also hide more elements at the startup to make the start screen even more easier. Now the Problem overlay panel and the shortcuts are also hidden.
After that i worked on the tutorials. I got feedback, that the camera tutorial is needed, so i added a simple tutorial for it to the start. I also start the tutorial now directly and simplified the init.plan text. Its starting by showing the tutorial window and hint to skip here.
I tried again to add the text to speech and this time it seems working. After several hours trying to add the google api, its not finaly working to call it via the unity editor. I added it for all tutorials and for the intro. Its just a click on the button in the Editor and it calls the google API, download and store the mp3 file. I needed to adjust the timings for the intro a bit to make it fit to the times but the rest worked pretty streight forward.
At the end of the iteration, i added also the reason to the panel where people get unconscious.
Than i did the next update video and the next release. Feeling a bit sick, so not so much today.
The problem with line breaks is still there. Its not relayouting well. I researched again and found another possible fix that seems working well now. I also found a unity-ticket fixed, so hopefully at the next version (hope for it soon), the problem could be gone.
I also added a red border around the ship resources, to highlight problems there.
I refactoed the special events, created by the simulation. I moved out the UI and all logic from the manager and have one generic and individual customizable ones. At start i added a more details description to the "Energy depleted" panel, so its directly showing inefficient energy producers, or producers that have problems. I hope with that data, its easier visible, how to solve it. I skipped the idea to add a help there, due to its to individual in most of the cases. I also make it red for the major ones and yellow for the ones to take care.
I added an short achievement for showing the energy usage, and improved several other tutorials. I also improved the workflow for the walkway, to not get stuck there anymore. Its skipping the "place" step, when there is already one build. I added also the option for tooltip spawning left/right from the bottom, to have the storage visible in the problem.train.
I also found a problem on the current efficiency marker, that was not updated.
At one of my tests, i found, that the construction sites get resources without a finished railway. Turns out they connecting through unfinished construction storages, due to some strange things happening. I made the construction storages now also "unfinished" hand updated the path finding algorithm to deal with it.
I added support for info and warning panels to my RichText and improved the style for it, to make it more obvious. I updated all helps to the new system, now just using 1 Help Text for each element.
The construction times of all buildings have been increased min x2 to balance a bit the new removed infrastructure.
I added also a highlight animation, when a person warning appears, so players can detect that faster.
At all playtest for now, players couldn't figure out the problems so good, so i added also a red border for the working storage, if it has a problem (out-full or in-empty), to see faster where the problem is.
Another problem players had was, that they tried stop the planning via esc but they didn't want. Now the first Esc button is clearing the current selection. If nothing is selected, its showing another confirm popup. Is this poup open, another Esc will unplan everything.
In the morning, i finished the last parts of the infrastructure removing. Everything looks fine so far. Over 100 automated tests were adapted (of total 480)
Afterwards, i worked on the Maintanence module and adapted also the model of the construction module, due to its need less storages now. I choose a long building, to have a bit difference in the shape of the buildings. In further iterations its planned to have also "big" versions of the buildings with higher workercount and better efficiency. A good idea of a player was also to have requirements for lvl2 buildings, that needs more specialized parts. For now thats are not needed but i added it to my future feature list .
I continued with throwing out the infrastructure related stuff from the game. Removing all that done and polished work makes a bit sad, but also happy to remove so much complexity
I could finish the big changes today and also added a basic Maintenance Module and adapted all tutorials to the new gameplay. Just small stuff is missing, to finish this big change. I already moved the Moon missions to the next sprint, to focus now on more help and other polishings.
Yesterday i had an idea to make the building more convinient. After watching some playtest sessions i had the feeling, that most players struggling most at the constructions. To see why a building could not be build it takes not very intuitive selection of the grid. Keeping the infrastructure module and the construction module working at the same time seems over complicated (at least for the start).
The grid and railway system was one of the first things implemented 1.5 years ago and the game went to a direction, where now all buildings are connected to walkways, and all walkways have a grid and a railway below. More railways were not needed also in my playtests.
The idea is now to just combine the gridstructures and railways into the buidings above and remove the infrastructure module. Instead i will create a separate maintainance module, that is built at the start. I will leave all logic with the layers in for now and just change the configs of the buildings.
Changing the configs and the main challange to add the railway to the walkway went easier than expected. After that change, over 100 tests failed. This was expected, due to close to all test scenarios are wrong now . It took the whole rest of the day to fix one problem after another but everything very streight forward.
At the end of the day, 2 major tasks missing: Updating the simulation to give better problems and updating the tutorials achievement storyline.
In the morning, i got help for the discord Server from Brightlight to setup some bots and we changed the structure of the channels to be more game-related.
I also got a report from a mac user. After a bit configuration, it finaly worked.
After the update yesterday, i recieved an error report, due to i missed checking the starting popup for new players. I did a short hotfix for that (also to try out the regular hotfix procedure) what worked close to be perfect. It looked the game is crashing, when compiled with a new unity version, but setted up with the old one...
I started to improve the Steam capsule and first needed to fix the scene, due to a lot of changes in the astronomics. For now, i did 2 improvements, added a frame around to make it more visible, and added the new moon to the top.
In the morning, i fixed the last tests and released the new version.
I updated unity and all packages to the newest versions and started with the translation to german. The import/export from the last iteration helped a lot, and google translate did a very good job. Just some translations needed to be adapted.
I started with the Help Content, and found that i need to do some syntax support instead of creating several monobehaviours. I tried something and it worked very easy, so i decided to implement some simple standard syntax for it. I choose markdown, like in my wiki, due to its very easy to implement. The UI Toolkit already supports bold and italic, so i just converted that. For the others, i changed my I18nLabel to a visualElement, creating subelements, to create seperate elements for headlines and lists.
I started to create the update video for the release, planned for tomorrow. I also found it a nice idea, to add an animation, when a new element is getting visible, so the player have a chanche to see it. Due to the nice api, i just needed 1 line of code for that
Today, i added the basics for another helping system. Besides the new Tutorial and the help in the achievements, i added a "?"-Button to the bottom right. This will open a popup with different sections for new players. There are some basic controls like camera and more advanced topics in. Its reusing the interactive help system from the tutorial and the achievements. After enabling, the "?"-Button will turn into a "Stop help" button where the player can cancel it if he wants. Next step is to add some content to it.
I added the moon model to the astronomy. I also changed the spinning direction of the ship, so its in the more relaistic orbit. The moon is the preparation for the next iteration, where i plan to add the moon missions. Due to the tutorial improvement, it took 2 weeks longer to get to there, but i hope the new tutorial is worth it.
I changed the way the editor-name of the entity is set, so i use the gameobject now to set an additional value. This should make it possible to read also savegames from players. Before it was just loading with the names, when it was saved in the editor.
I also added, that the Resources in the Overview are also shown, when there is an input-storage, that awaiting that resource. It was a bit bad, that e.g. steel was not shown, when there is no steel, but several construction sites awaiting it. During that implementation, i converted the algorithm to a job, so its now running on another thread, so its not impact the performance anymore.
I also added the last missing output storage to the construction module model and adapted the animation for it.
Than i worked on the reliablity of the error popup. I give him a separate UiDocument with priority to make sure, its can be shown in allways. It can also show now in scenes without an UiDocument. Before it just searched for an existing one and added it on it. Due to some recent improvements of Unities UiToolkit, its now possible with the new more reliable architecture.
I found a big performance issue, when the game is minimized. It looks like the schedule.execute of the UiFramework is not executed, but the normal unity update works normal. This caused a stacking up of the execute methods in one of my elements... Internal in unity, was a list.contains using 99% of the performance.
I improved some buttons and fixed some minor issues with the new Tutorial and Achievement Flow. Also fixed some issues with the new effect layer, moved more stuff on it, separate the Esc-Menu and Error reports.
I worked more on the tutorials and added the mouse-key-icon for the actions, to make it faster to detect what to do. I think it also looks nicer now . Hope the tutorial is so far good enough. I will do a final test at the end of the iteration to double check it with a bit distance.
I played around with some spell checking websites, to improve the checks. Till now, i just had a dictionary check. The webpages also have some grammar and way better checks than the simple one i used inside of unity. Due to they can not analyse a json and would kill the keys of the translation, i added a simple export / export format, so i can export all data use that in the apps and import the corrected version afterwards.
I added a new System, that deals with hidden Elements. All VisualElements have now the possibility to be hidden related to an Type, e.g. "element.HideElementType(Type.Energy)". This should prevent overwelming the player with too much not yet needed information. I also added support ho hide buildings.
To prevent annoying experienced players too much, these Types can be enabled in the tutorials or all together in the in-game options. Its NOT an Tech-Tree, its just to help new players to learn the game easier.
Than i changed the achievements, so they start to appear after the tutorials are done, to not give too much tasks to the player in that time. I also start to redo the flow a bit and leading more to the first buildings by adding a gridstructure, walkway achievement with railway explains.
I used the gameStartedVersion from the Achievement system to check for highscores also for the metadata of the savegames. With that its possible to improve the Load Dialog. Most of the Bug reports from playtesters were related to loading old games. When they were started and saved, they were marked as "current version" in the loading dialog. Now, its marked as "yellow" and the started version is shown in the metadata. I also forgot to add the "old version" warning to the Continue button, what maybe caused that some players didn't see that warning.
I also disable all systems while loading the game. Due to i load a game async since a few iterations, some systems could cause some warnings while loading, due to the entities are not fully initialized. I did this generic, and not just for the effected system, to prevent these kind of problems in the future also.
Also a new playtester tested and couldn't continue with the tutorials. He was stuck after starting the dismantle. He was a bit frustrated. No idea why he didn't start the next timewarp tutorial, that should have shown up. To prevent that i maybe autostart the helps for the tutorials. The first highlight should highlight the tutorial intro.
I fixed the last bugs, found in some tests and did the next release, with just a part of what i planned. Due to that big problem yesterday, where i also couldn't do a simple hotfix, due to unity updates and way too much related problems, its now a release of the current state. It includes the new Achievement-Helping and the refactored Help system of the Tutorial.
It also includes bugfixes of an error with dead persons, and other strange behaviors, when they get unconcious and sleepy.
I got another bug report from someone. After analysing, it seems its related due to a loaded game from 0.55.0. Maybe he used the continue button, so no warning for bugs are shown.
I thaught about that and added a bunch of tickets, to make savegames more stable in the future.
When trying to load it, i figured also some more bugs in savegames, when its stored and loaded in different cultures. So all values were completely broken, due to c# stored it with a dot at the player, and here used comma for that, so instead of 0.1000000000 it was 100000000 and way to high... C# has a realy unintuitive bad architecture for storing and parsing strings...
A help icon was added to the Achievement Panel, so the player can also start the mini-tutorial when he closed the achievement-intro. This help button is also auto-resetting, so it can be redone as often the player needs it. The other ones keep the state, so he can continue where he were. Not sure if i should auto-reset all help buttons, might not so good for the tutorial, when a part is already done.
After something i tried, i found out, that the save/load mechanism is broken. The save/load test was not covering the sunsystem :\ so i needed to revert the default branch on steam to the old version. It took the whole day to figure out one bug in that system after another, all related to the new ecs astronomic sunsystems i created at the end of last iteration. I improved the automated test and in the end, i redo the companion creation completely and it looks now working. A bit sad, that the savegames will stay broken. Sry for that
Due to i fixed a lot of things already in this iteration with the simulation, and now the saveload, i plan to do a normal release instead of a hotfix.
I found and fixed some issues related to the report. First, the server just accepted 255 chars for the comment, than it was added to wrong layers and this multiple times... Also the feedback couldn't create the screenshot correct in the new Unity version.
After that i started to refactor the Tutorial Helping System to create a general "Help System". I plan to also use that for the Achievements, e.g. when the Environment Submodule is started. It should behave similar than the tutorial. Maybe its a good idea, to convert most of the advanced Tutorials to Achievements. I will keep the basic starting one, to make sure, the basics are done.
I finished migrating it to the new Help System. All Achievements are migrated, and i could finish an example for the environment H²O module. The player has the choise to get the Task better explained by an Interaction, that is similar than the one in the Tutorial.
The last 2 days i migrated the Astronomic calculations to the ECS System, to make it work easier than before and have the lights also in ECS. This meight help increasing the graphics later. This is also the preparation for the Moon missions, planned to be implemented this month.
I planned the next iteration and did a new release with the new interactive tutorial, hope that its now easier to catch up and players play a bit longer
I also did another Release with the new Interactive Tutorial.
I worked also on the Animation Paths Debug. It was not respecting the world-rotation, leading to wrong positioning in the editor. Due to the last code-quality updates, it was now easy to add that.
After the Release i also updated to some new packages and saw that the new 2021 unity version has some interesting improvements for UDP rendering, so i updated it to that. Besides an error with rpc calls without content, it went fine so far.
Afterwards, i checked some wired error logs and found some issues with persons and air. One was, that a died person was still in the container users, so using o², so the 0²value could go below 0. Others were that the person not fall asleep, even the value was 0. This just happened, when its already at 0 and get unconcious. Also some other problems with active metabolism, even if it shouldn't be. All in all it seems fixed now.
I played around with the Steam Achievements and it looks pretty easy to use with the framework i choose. I added some basic achievements for a finished grid and winning the game. More will come later from time to time, this should be enough for now, due to i will focus more on gameplay and new content now.
The last days, i finished the new tutorial. It looks way more interactive and way easier to follow, hope the players also like it same as me
To make this work, it was way harder than the old one, due to it needs to react on e.g. "Unselect" and other things that can happen. I hope i catched most of the special cases.
I also added some Highlights to the Consultants, to move the players attention to that place, if something happens like a tutorial part is finished or a achievement is done.
I started to change to a new Tutorial approach. It will now show in the first line the task, and below a short description. Below is a big "Help me" Button. When the player press that button, the old steps appear dirctly next to the buttons he need to press with short explains and hints. After he did the step, its showing the next one, till its done.
I hope, this makes it way easier to know, what the player should do.
I needed to redo the effect panel again, due to it seems just the lowes ui-documents layers getting some of the events and all "Click" events were broken. Others were working fine, like mouseUp, but behaved very buggy. After changing to another aproach it worked as before.
I had an idea how to calculate the boundingBox of an entity and its now also higlighting it with the rectangle element.
After that was done, i started with the highlight effect. I added them for the Tasks on the top right and for appearing consultant tabs. I wanted to have it over ~half of the screen, so its pretty obvious for the player that something happened there. At the consultant-tabs (round icons) i discovered a unity problem that they aleays using just 5 lines for a border radius, what looks very very ugly when scaling that over half of the screen. Turns out: Its hardcoded... So i just make it smaller to not use an more ugly workaround using circle images.
I also played around with my astronomics calculation, to refactor them to ECS Systems. As expected its very hard to do and will took more time. I already have the Rotation and a simple Orbit done so far.
I improved the Video endings, thanks to a tip of envelupo from subrow. I added a fading to the company logo and let the music fade out also, to have a nicer ending.
During the implementation, i played around with making some VisualElements clickthrough, and i found a solution with using separate PanelSettings. That was the major blocker for UI Effects I refactored the current System, to make use of the new Effect layers to try it out in a bigger scale and prepare for the usage.
I also added Credit Costs for the Supply Ship. The player for now is starting with 1 mio credits, so it should be way more than enough. I will see how much the players are using till the end of the game to adjust it a bit. I plan to add some additional credits for fulfilled achievements or other static events, e.g. the war on earth goes well. Its also planned to separate the Supply Rockets from the Docks, so the credits can be used for buy more supplyships in further iterations. He can than decide to go with just 1 ship with more supply over time, or faster and more often supply.
I also highlight all ResourceBoxes, when hover over the ResourceOverview Icon. This should make it easier for the player to find the boxes when searching for it.
![2021-06-30_generationship_-highlight_all_resourceboxes.jpg](/blog/2021-06-30_generationship-_highlight_all_resourceboxes.jpg = 600x)
To assign the workers easier to buildings, its now possible to just click on an empty worker slot, and a popup is showing up where the player can choose one. Persons already working in the building are grayed out. This gets even more valuable, when the persons getting skills like "engineer" what effects the work efficiency (planned for later).
In the morning, i finished the I18N of the ResourceOverview Tooltip and fixed the construction icon.
Afterwards, i removed the maximum docking time from the supplyship. The player can keep it in space as long as he wants now, with the disadvantage, not to get more supply, due to the ship is not available. I plan to restructure the "ship" at the next iteration, so they are not related to a special dock anymore. The player should than be able to buy more supply ships with credits, using one or more docks. I also added an "Undock" Button, what just causes to throw out all resourceboxes, to make it start again.
Than i make a small test and everything looked fine, so i did a release. Including Video rendering, build, Upload, News Articles to several pages and social media it took ~1h in total.
Than i fixed some bugs with the animations at throwout. They didn't respect the storages Next time, causing all boxes colliding while animated, and throw out all in the supplyship looked as 1 box.
I also found a simple way to fix an very old issue (GEN-765 ~1 year old) to make the Infrastructures usable in the "on the way" state, when they leave the infrastructure module. Now they still shown at the construction site and are still clickable there.
Started with more bugfixes, forcing the tooltip in the window and add resource wrapping for construction-storages. I also try to analyse some exceptions from the testers. I couldn't reproduce or figure out a reason that the dead persons are still using air of the ship, but there were other errors with some wrong scheduled Tasks, moving the time back, that meight cause that. I added some warnings so i meight figure it out in the next iteration. Hope i got that bug at my own playtests to debug it better
In the afternoon, i did the Resource Overview Tooltip. I got a feedback that its hard to find the resources, and don't know, how much e.g. Steel is missing for the constructions. So i had the idea to add the tooltip for "Steel", showing all storages. Its also including the construction sites and general storages, if they have some.
Fixed some small bugs related to construction storage connection and click sounds. I also checked for another case while renaming, that the tooltip is shown and could not be removed on bad timings. Reason was, that unity even on hidden elements still have a big world-bounds... So i needed to check that by myself also...
I finished the renaming of persons and buildings. With a simple Click on the name, the player can rename them. I found also a bad thing of the unity FixStrings, it seems "ö" is taking 2 bytes, so the UTF8MaxLengthByte is not giving the maximum characters but i found a solution.
In the morning, i just added the german translation to the steam page.
I also played around with the new FixedStrings of Unity and it finally seems working fine now, so i can implement the entity-naming in easy way directly using the Entities. I finished the first part today implementing the internal systems and using the new Name in several places (# indicates the new name).
I reuse the UnderConstruction Timewarp behavior now also for the timewarp in the construction building. Before it stopped when no worker is in, now its continuing till its done.
I also fixed another timewarp issue, that it was jumping too far when resources get unloaded from the supplyship.
I also fixed some camera jumping issue with the new zoom to mouse feature.
Due to the feedback yesterday i added the UnderConstruction problems also to the Overlay like Work Problems.
I also played around with the steam cloud save, and it seems working pretty easy. I added it to the playtest and the real game.
I implemented the two storage options from yesterday with some tests.
Yesterday, i approved more Playtest players and already got 2 good feedbacks. If i understand it correct, both wanted some better "resources overview details". i had an idea for that, so i might add some popups for the Resource Overview Resources at the bottom right. Hovering over them will show a popup with all storages, the resource is used, so it should be easy visible, how much to order from earth, or what is short.
Also both had trouble with Problems of the construction lots. I will add the problem overlays also for the construction, so its easier visible, that e.g. Resources are missing.
Another very good idea was to show a Popup when clicking on an empty slot at the worker-list. Opening a popup showing all possible persons. This will be very good when in later stages the person specialization will be added.
I fixed that the selection and highlighting was enabled during the intro. Also to see how much power is realy used, the consumed and produced delta values have been added to the UI. With that, it should be easier visible if new power plants are needed. I also added it for the other Air-Values.
I also added the UI for the Storage Settings. I moved the sort icon a bit down and placed the storage options there. If more are coming, maybe i will replace it with a popup later, but for now, its just 1 possible option.
For Input storages, there is an "Request partial if empty", that makes it possible to request also not finished boxes from other output storages. Before they were hold in the storage, till they are full, to prevent hundrets of small boxes. Maybe this option will get default in further releases.
For Output storages, it happened often, that resources, that are not useful for the player yet (e.g. due to not build recycling buildings) that the storages were running full of e.g. IronGarbage. The player needed to throw them out by hand, or move it to a "Garbage" storage, to throw them out there by hand. The new option should make it possible, that when there is no space in the outputs, and the storage running full, the boxes are thrown out automatically.
The last days, just worked on my internal infrastructure. No much progress on the game
In the morning, i analysed a bug added in this iteration. The SelectionMesh was flickering on higher zoom levels. After analysing everything seems correct. I end up in deep debugging and tryouts in the Unity Renderer and after several tries i found its about a RenderBounds was a bit smaller. I already added it, but it seemed the new used Unity Utility was overwriting it. I have no idea why this causes the flickering, overwriting it with the old value after the utils function fixed it...
After this was fixed, i did also a release.
Not done so much today, just the update video and a playtest, where i figured out a strange flickering on the selection. It seems it just came in this iteration, need to analyse it first, before i release
I used the already created SpecialEvent System some iterations ago to create a simple Person History Bar. Its updating live, showing different colors for "Work", "Use Service", "Idle" and others in different colors. Via mouse hover the type and the duration can be inspected. The Walking times are also included, but due to small times not visible. I plan to add also a summary below it, sum up the times to make it easier to see problems.
More detailed values, like separate sleep from eating is planned for further iterations.
I found also another bug in the timewarp calculations and redo all the setup for the different times.
The ConstructionStorages to request for Building Resources or pushing out the Dismantled resoruces was used as build as normal storages with connections. This had several problems. Once initialized with a constructionStorage, its not reacting on changes anymore. The storage was also flooded with many connections. The build Priority could not be handled and much more.
To improve that, i changed the behavior of the constructionStorages instead. The Storage for constructions have now a separate connection for "Building lots" checking for it. This means, it can be prioritized as normal, without handling every building lot.
It causes big changes in all parts of storage-handling, so it took a while to fix all of it.
I wondered, that it looks a bit dark in the compiled version, seems there are some Entity-Renderers missing.. Even if adding them by hand, it wasn't working as the original converted GameObjects. I figured out a way, calling a utils of unity instead. I also do that now when loading a game, so it looks fine now.
To make the development faster, i decided to create a Cheat Window to create Buildings. Before, i used a special scene with several buildings in it, but the loading time was too long, and i didn't need everything all the time. By clicking the button, it creates the new building, connected grid, railways and walkways to it. It also creates Resources and Workers if the building needs some, so its directly working.
I did another playtest with the new Timewarp algorithm, and its way faster pace. Players need to be way more careful using the timewarp, but i just took 1:15h for completing the game now. I just used 2 docking ports. I think about removing that multiple rocket-ports feature and replace it with a "buy another rocket" after the credits are added. It seems not longer needed, and with just 1 rocket, players needs to be way more careful. Otherwise they can use the 2. dock as a "backup" if they forgot something.
I found a lot to improve again, and could reproduce the "legend not disappearing" bug
One of the Feedback from the Playtest was, that the rocket is missing a texture. When i created them, it was not realy needed to make them mroe detail. But due to the supplyrocket is one of the highlights in the Trailer, i felt i should improve them a bit I also enahnced the starting Rocket of the Intro too, even its just 1 time visible.
I also added some animated Gifs for the Long Description. Below i added a short text to make it look nicer.
I also started to make it easier to skip tutorials for the development. It was not easy, due to the tutorial needs e.g. the infrastructure module. I added a simple scritpt, that follows the tasks of the tutorial and e.g. start dismantle, wait for finish and so on.
After that i fixed the problem tutorials. Its now highlighting just the first not done step, but ALL highlights at the same time, what should makes it easier to see whats relevant.
I also fixed an Exception from a player, when going to mainmenu when the overlay is active.
After some refactorings of the Achievement-Task UI i added the consultant also to the UI, to make it nicer.
Finlized the new Timewarp algorithm and make the start and end more smooth. Also prevent hard cuts in several situations.
I tried to increase the game pace and found the main part is waiting for the timewarps. So i worked on the TimeWarp speed, due to it was a bit unstable. The ending minute looked very long. After some tests, it was proven, that it took 9s to warp 1d forward, but most of it in the last minute. I improved it, so its now way smoother and consistent. In the algorithm, the smoothness of the time is a fix value, so i might add it later to a configurable value of the player. It was also FPS dependent, what makes it even harder to work with it. I completely redo the algorithm end end up with the following times.
I also fixed a bug with Linux. Seemed unity using by default an OpenGL driver, but the Hybrid Renderer of Unity i'm using is just supporting Vulcan... So all entities that were rendered were not visible...
I also added zoom to MousePosition from the overview, so its easier to jump to different places of the ship.
I got some feedback, where players couldn't figure out something, or something was not working. They had no easy way to report that feedback. I enhanced the ErrorHandler-Ui to be also used for that purpose, changed a bit the text and buttons. Its than also sending the savegame, log and a screenshot, so its easier to see problems, even without exceptions.
I add it to F11 as a shortcut and hinted that at the startup.
Today there was a last boost on the Playtest registrations. It ends up with 112 Players awaiting access. I prepared everything in the morning, published and tried the playtest. At 14:00 I could give access to the first 10 players through steam. I'll wait till tomorrow, due to the timezone delay, for some results.
After some discussions about the game name, i realised, that "Generationship" is missleading in englisch. They thaught its some strange wording joke like "relationship". So i changed it to "Generation Ship". It should also help to get found by the steam search and will reduce the missunderstanding problems.
I also updated the short description in the steam store to:
You're the AI, responsible for a generation ship, mankind's last hope for survival. Build efficient raw material cycles and help your crew to survive a long journey in a realistic real-time simulation and find a new home for the human race.
I found that the old capsule was very dark, so i tried to improve it. I also wanted to improve the earth a long time, due to the earth is on the logo, i did this first. I completely created a new one, using shaders and an atmosphere. Added some highlights and checking the main-light of the scene to identify where to add the city lights.
Afterwards, i go to the logos, and changed the sun-position and earth rotation, to look nicer. I also increased the text-lights and make them aligned to all others (News-Header, Trailer, Update-Video and so on). Seems there was duplicate lights, what made it so lightblue
I added a "noProblem" Space for the UnderConstruction, to prevent flickering the whole window, when its on highspeed and waiting for finishing. I also added a Header for the efficiency popup.
I did another short playtest without big findings. Maybe i got blind for the problems or its getting fine
In the morning i fixed several bugs, that i found in the playtest yesterday evening. I also found a problem pressing esc in the intro, due to there is no ui for the errorhandler initialized, but game is paused. I also found, that the highlighter was FPS dependent, due to i used the performance improved method to update it.
I fixed some small bugs like that the deflate wall will wait the correct time, till all resources are moved out.
I also created an Anouncement for the Steam Playtest for next Firday.
I worked more on the update video and found a flickering at the start of a scene, where its not finaly initialized. So i created a small script, turning the camera off for the first screen. I also implemented the Highlighter a bit different, so the rounding problems are gone, causing horizontal flickerings.
I worked on the Steam playtest, so i added a startup popup for the first time, its launched with steam, to ask for permission for the metrics. If its not launched through steam, i notice the player and show a big steam button. For now, the game is still working without it, e.g. for itch.io downloads. I also added a detection if the player has already bought the game or just playtesting it.
I added a new Tutorial marker for the "Where". Its now not needed anymore to hover over the "where" buttons. Its identifying what the user needs to click, and highlights it in the UI. The Entities are also highlighted different, if they are there.
I also prepared the next update video and fixed the issue with the overlay is behind the gray-out on highlights. It was hard to solve, but i now render the overlay to a separate texture, and adding it to another document. Rendering the new ui documents to a texture was not working well.
I worked on the Doors of the Walkway. It seemed, they were in a wrong position, so i fixed that. Afterwards, i added a Sabatier Module, to generate methane on the ship.
After ~1 week on Steam, we hit the 200 wishlists. I did a bit of reasearch, and it didn't sound so bad so far Also get ~35 interested people in the playTest queue. Hope the Iteration will finish soon, so i can release the first playtest version.
Today, some consultant tabs are added. Before, if multiple consultans wanted to talk to the player at the same time, they just queue up. Now they get a tab at the side, so the player is able to switch to them.
Changed the Domain to generationship.scifanstudios.com to remove the short version from everywhere. I added a forward, so the old domains will still be fine.
I also merged the containerUsers if there are too many, to make bigger ships possible.
After i run in an exception, i found, the Error-Reporting not nice enough, so i decided to restructure it to have it way more clean. All details are hidden and can be opened with one click. The Button is also increased and green now, to hint the user to press it.
I fixed some bugs, where the aging not recreated after the building is maintained and started with the air leaking. If a building get low condition, the building is marked as "leaking" and a fixed amount of air is removed from the ship.
I fixed a problem when a building is at condition=0 and the humidity is still pushing the condition <0%. I also make the ResourceContainers updating faster.
A new Overlay was added, to see fast what buildings needs attention. It colorize the buildings to visualize the condition. If the condition is low, the building will not work not so effective anymore. This happens over time, and in high humidity envirionments and can be fixed by maintainance.
I added it to the overlay section.
Thank i thaught to improve them, so multiple ones are shown way nicer.
I removed the overlays from the GameEnd screenshots and busy a bit with marketing the steam page. I hope i can continue working on new Features at the weekend.
I also created the DeveloperPage, so people can follow early.
Today, the SteamPage was published with Wishlist and Registering for the Playtest.
I also updated the Trailer to the new version.
I got some feedback from steam for the shop and game, so i needed to update the screenshots. To easy update them, if something changes in the game, i created a generator for it.
Create steam logos with "Playtest" addition. It worked very fast, it worth it to build the generator for it
Some logos with very widescreen looked very bad at the sides. To fix that, i make now a 1:1 picture and crop the part out of it, now its not stretched anymore.
I also added some auto-generations for Images for the Steam Update Page. Again different formats...
I make the GameSettings (by player) overwritable by script, so e.g. the test is setup the burst mode off and consistency-checks to full. The videoScenes are also using it e.g. for setting the new ShortcutArea-Visible to false, to make the videos looks cleaner.
After that i worked on the trailer, to make the first 10s better (Steams default suggestion). I think, the expanding and the timewarp part is most likely the main points of the game for now, so i removed the "Start small" part and replaced it throug a rough 3s story. the next 5s showing the building process, first fast infrastructure and dismantle, than some buildings to be dropped. After that (in the last second moving to the overview perspective to show the timewarp. Than continuing as before, just with more camera closeups (suggested from a reddit user).
My plan is to create some screenshots while doing that, like for the update videos, to make the title-page pictures also consistent and up to date.
I added a simple spellchecker to my application, to be able to see fast if something is spelled wrong. I added it to my I18N window, and corrected some text.
Than i tried to integrate the steamworks api to the game. It worked pretty well, and i tried different ones to find a good one to use. I could show the users playername and avatar and have access to the steamId. I couldn't access steams highscore system yet, maybe due to its not completely published yet and valve needs to approve, so i will try it later.
I finished with the basic setup for steam, the integration in my CI, added a Snapshot branch to test, and setup all other stuff what is needed.
I also needed to create several kinds of logos, so i improved my logo creation, and played a lot around with it. Ending up in 25 generated Logos with some improvements.
I finished the next playtest and made it in ~2h playtime. 1 time the crew died, and had always something to do with unconnected storages and the handling of it at the start. Was fun, but i also found some ui-update problems that i fixed it and published it.
After publishing the hotfix i found, that my highscore is recorded, and it seems not very good, to have that for every version, so i will change the behavior to ignore the Patch version instead, so the highscore will be recorded for 0.52, not for 0.52.1.
I improved the TimeWarp for Docks, so they timewarp till the ship is docked or ready to launch on earth. It was a bit anoying to press this so often, till the storage of the supplyship is available. It should be way more convinient now.
There were some strange exceptions from unity, due to the buildpipeline i'm using. They want to force to use the build menu instead, what is not working well for me. Good that the bug area could be disabled so i added my own Default World Creator.
Due to the removed autoconnection i needed to add another tutorial, connecting the storage with the infrastructure-steel storage.
I did also another playtest and due to the removed autoconnecting storages, way more things happened, but the game stopped well and the red problem overlays hinted well to the problems.
The release is also done, and close before, we reached the 100 downloads
I did some work for the statistics and a lot of tiny fixes and improvements. Afterwards i added a system, that is counting the seconds that the game was played. It just counts, when the game is not on pause, so it should also deal pause of the player (if he is not letting it run). I also added it to the metadata of the savegame and added it to the Loading UI.
I refactored the core part of the Tutorial System again, to prepare for the new consultant system. I also migrated the Achievement System to the new aproach and added a Leader Consultant that leads through the Achievements in a small story. I tried to let him act like a non-technical person talking to an AI. The Achievement is now in multiple steps. 1. Waiting for the requirements, than adding the Consultant and await the playerinput. After its done, there will be another Finish consultant talk.
I also added already, that just 1 consultant is appearing at once. More will be queued and shown, when the other one is done. Maybe i add some kind of "Tabs" in later iterations, to switch between them.
I played also with some statistics, maybe i add selveral entries in the database, to show, when some events happened. Its interesting in realtime, in playtime and gametime. Still don't know how to do that right.
I also improved the Itch Page, to have less but more precice text to awake interrest.
After some feedback about the Performance, i found, that the burst and consistency options were set to detect problems. I could increase the speed of a game at the highscore from 2h/s to up to 7d/s, so 100x faster.
Due to the game looks very stable now, i decided to turn it to performance on default. I found a way to detect crashes by setting a hidden settings value at startup and mark the game as running. If a game is stopped at a regular quit, it will set this value back.
I also improved the timewarp for the constructions (or general for specialEvents). Its now using the old estimation if its >1h/s, so its not pushing the time hard back to 1h/s. When the worker come back.
Also some small improvements of tooltips and the rotation of the persons, so they rotate now on the spot instead of on the way to the goal, what makes it not look so broken.
I improved the splashscreen, by using another image.
I fixed selveral bugs, one of it was, that an overlay icon was overlapping. The real reson was, that the icons were 180° wrong rotated.
I started moving the Needs to t he top of the container, to have them same layouted as the selected Building Window, and started to refactore the code of that part.
While playing, i found it very difficult to deal with steel, due to its directly used for buildings, but i wanted it to be used for the grids. The first step to deal with that is to separate the dock-storage connections to be more specific to the storages. If this kind of connections are created, a popup will appear to setup what resources should be transfered. The "all" option was the default. Next steps are to remove the auto-assignment of the storages.
To have still a kind of autoassign, i added a "ConstructionStorage" availability for the General Storages. If this is turned on, the storage can be autoassigned to new building-lots like before. By default this is off, but for the starting storage its turned on to not confuse the new players too much.
In the morning, i did some improvements to make the development easier and fixed some small bugs. I also changed the Admin area to a dark-mode, so i can work easier in the night with it
I started to migrate the other Choose Actions, so all choose actions are now using the new system including a visual feedback whats changing. This is also a preparation for the more detailed storage-connection setup.
I did another playtest and fixed more issues, now it should be more stable. I also found 5 more small layouting issues with the new font-size and added tooltips to the keys of the shortcut-keys, due to the font-size is now reduced a lot. After all that fixes, i did an release, and did another playtest. ~1.5h and 8month ingame time without big findings now, added highscore and left a sample feedback. All seems fine now.
I fixed some last issues i found with loading games and other findings. And did another playtest, but due to the new fontsize i found several things in the ui, to adapt again that i fixed, so i moved the release to another time.
Tooltips now recognise the best display by themselfs. They open where more space is and also setting the maxSize so the tooltipText is not getting out of the screen.
I removed the GridStructure Missing problem. It was not needed anymore, due to its autodropped.
Also some text has been added to the Choose-Overlay, so its now visible what the targetAction will be on a click.
I added a Scene when the player closes the Game, to ask for some feedback. I decided to just add a plain textfield, with some prefilled questions. So he can enter any feedback. Its stored on the server and send to a private discord channel.
I also added support for Linux and MacOS. At the tries last year, it wasn't working well, but now it seems fine so far.
Due to some feedback, i increased the fontsize from unity default 12 to 16, and relayouted several things, that break.
I finished the highscore system and used another camera to create the screenshot. I also added some text to it to make it more likely, that the player share it around, to get more players.
I checked the api of Twitter and FB, but it seems very hard to share an image. I found some ways, but they took more time than i want to spend for it now. I will do that not in further iterations.
Today, i worked on the main part of this Iteration: Highscore. I improved the Serverside to support that, and added a upload part to the endscreen, when all achievements are fulfilled. Due to a lot of changes in the game, it will not be fair comparing all versions, but also not to clear the highscore every iteration. So the highscore counts for each version of the game, and i added a "all time" favourite to it, so the #1 of each version is shown always. Its also uploading a screenshot of the game, to show the result.
Its shown in
It was a lot of work, so tomorrow is polishing, creating a better screenshot and some other polishings in the ui. The basic part should work now
I refactored this iteration also the Main UI inside of the Game to the new System. Removing Unities Ui-Binder classes and do them in code.
Also hide the dismantle-storage ui when its not useful anymore. Also removed highlight on dismantle stage, due to it has no sense anymore.
I also fixed the size of the infrastructure Module, it was 10cm too large, so it was visible throught the inflatable walls.
Another fix was that the confirm button is not srinking anymore, when it changes to the "confirm" text.
At the end of the day, i created a method to rename the I18nKeys. Key are auto-generated by Fields of Classes, so when renaming the class, it kills the connection to the json files. To prevent that, i added a [I18nRename("NEWNAME")] Property. So the workflow is adding this with the new name, letting unity create refresh, than rename the class and remove the annotation again. It will create a duplicate key to it, so its save to remove it afterwards.
I finished the new tutorial. It looks way easier to get through and trust the players more, to learn in game, instead of explaining everything. It just leads where to click. Feels more like you are an AI. I needed ~10min to go through (before ~30min) so the player get way faster to the playing of the game.
I did another release with the new Tutorial.
The tutorial i created was a bit long and text-driven. I improved the Tutorial System and added several features, to also split up the text and the steps a bit, and make some parts more easy to create. I removed tons of text and replaced by a more "programmer to AI" talking, with short clear commands, what to do. I hope, that the user will figure the other stuff out with trying, and just lead them through the parts and explain the most not so obvious things. The Layout is not perfect yet, this i will do tomorrow. Than fixing some last bugs i found and next release can be done.
I just wanted to add more links to the menu, to add the new communities and itch page, but it ends up in a big refactoring. I removed the UI-Builder and did it via code. To have a spearate style, i changed all buttons in the page to USS Styles, to be able to overwrite them. Its new way more clean, and i don't need the buggy ui-builder anymore, that just create problems.
I also added a +1min Button. In my playtest, it was a bit annoying, when moving boxes and than wanted to wait for the boxes to arrive. This takes maxbe 30s, what is too slow for realtime, and +1h is too fast. Normal gamespeed is also hard to wait precice, so a +1min button solve that. They are also bigger, to hit them more easy, due to the new style.
I started to fix a bug, that the CO2 Filter didn't stop, after the Optimum was reached, and added Tests for it.
Than i started with the main goal of this iteration: to add some Achievements. But i needed to improve the Achievement system first. For now, it was just working for single achievement items and int-values, but i want a "Grow Food", where 3 buildingTypes needs to be added. Also the API is a bit outdated, so i updated that first a bit. Than i added the planned achievements to have a plan for the player what to target next.
I also did a bit balancing. Reduced the size of the H2O Barrels, due to it was hard with just 1box a month to fill up the buildings. All needed to be done by hand, due to they took forever to get full. Also the Generator needs now way more Fuel. Its now using ~1 boxes methan a day, if running at 100%.
I also fixed more bugs, that the dismantle problems are not shown correct. It was just implemented for the construction stages. It was fast to add it also to the dismantle process.
Played around with the Highlighter and tried to find a bug, that the highlight was not disappearing. It seems unity fires the mouseOver, but not the mouseMove, when the game is not focused...
I also fixed the problem with too big savegames in later stages. Reduced the size from 40000entries by removing old ones when its saved, so i shrink the savegame down from 800kb to 100kb (already gzip json)
The first tutorial steps are merged together. Due to the feedback, these were way too long, showing boring ui stuff and basic controls. There is now just 1 camera and 1 selection tutorial left instead of earlier 7 ones.
Also fixed a problem that the timewarp was not stopping at the correct time. It was just a missing event.
Another point from a tester was, that he started a timewarp for a building process, and he didn't got, that there is no GridStructure connected. So i added the problem also big to the timewarp for constructions, so its more obvious.
I found also the problem for the bounce effect of the camera, when using the camera overflow and fixed it.
I had a strange loading error with the game. It just appears in the Runtime, what makes it very complicated. After a long debug session it turns out, that the visualEffect was created at the wrong scene. In the editor, it was created at scene -1, not at the active scene, so it was never destroyed... I found, that loading the 1.5h game took a long time, to figure out why, i added some logging to the loading procedure to the screen, so its not freezing the game. This needed other changes to make the game load properly.
I also got some feedback via reddit what leads to 2 new features. A Problem label below the timewarp, to add one more hint to problems and a better skip of the first tutorials, to not make experienced players not ignore the whole one. Thanks u/Kenji_03
I created a new Update Video and updated the Trailer to the new smaller satelite and fixed some timings and camera-transitions. Creating the update video took <1h. The ones, i did in another video software before took ~4h, and they also look nicer, so it seems it worth the effort of the in game video-framework
I also added a border to the highlight, so its better visible, when its moving over the dark space background.
I also created a reddit account an posted the video on /indiegames
While creating the tutorial, i found several outdated things in the ui, that i fixed today. I also use the real used airvolume and mass values for the ui now, so it should be correct now.
I also added more tooltips and added the feature, that the popup can appear over the element, instead of below.
The rendering of the current amount is also improved, due to the excrements is very low and was shown as 0.0kg. If thats the case now gram is used.
The Multi Selection Panel is also updated, so multiple works are shown better. The related things are now moved to a seperated box, so its clear what relates to which work
I also did another playtest, took ~ 1.5h, and ~9 Months of gametime, to get the ship rotating. I had a crew of 8 people and a basic food supply setup already. No big bugs or crashes again. I started to do the tutorial completely, continuing building lifesupport and foodsupply than the mass balancers.
I finished the new Tutorial, leading the player through 46 interactive steps.
I changed the animationclip from walking to idle, when no animationPath is set. Later maybe i also add there some custom animations, but that seems not needed for the next stage of the game. To save some time this is moved to an iteration after the game is better playable, so i changed a bit the target of the iteration from animation and move more to tutorial and achievement. Due to there was the bigger change in the starting satellite, the tutorial needs to get an update anyway now
I also started to replan the tutorial. Due to there is no infrastructuremodule at the start anymore, its highly needed to do this in this interation also. I started by enhancing the Editor for it, to directly setup the I18n values at the correct places and removed the need for the stepname in the highlight, using the next higher component for it.
At the end of the day, i finished the first part of the new one. Hope to finish tomorrow.
I started to work on the Highlights, so its also working for animated meshes. It was a big effort to get into all needed details. Trying to force to render at front, adding the highlight to the shader as an optional value, resetup the URP rendering for it, and many other things. In the end, i get back to my original approach and use separate own draw calls for the selection, but copy the animation value from the entities and using a custom highlighting.
Adapted the Dock to the new GridSize.
The starting satelite is reduced to a smaller size, so the start is harder than before, and the size of the ship is not so big. The Air-Volume at start is reduced to more than half to ~600m³, so its less air in than before.
To do that, the InfrastructureModule and some walkways were removed. The InfrastructureCenter should be now the first building to build on start of a new game.
I improved also the AirVolume icon
I also added the min/max values for O2 and CO2 to the descriptiontext. Its directly showing the configuration values.
I also improved the Time-conversions, its now fine for the algorithm to show 0.5kg/d, and not converting it to 153kg/y, what makes it very wired to calculate back and forth. Maybe i need to make the timespan fix and vary the mass instead, would be happy about some feedback whats more convenient.
I added the ships finished mass and the airvolume of the building (including a tooltip) to the Build-Preview.
I refactored the ContainerEvents, the code goes more and more to that kind of concept, so the Resource Container Manager now take care about most of the needed events, and the events are way more precice. This makes the code more simple and performant, due to less useless updates are done and if something happens.
I added some tests for the new Update Mechanism of the Events, and found some specialcases, when its hit one of the eventvalues, and than causing a change due to some updates, its not updating it again.
I removed the AirVolume of the Gridstructures and also hide it in the UI, when the building didn't have air inside.
I balanced the O² Releaser, so it can add way more air to the ship, up to 1 box a day. In the tests with 4 persons, i needed 3-4 to fill up my ship faster, what was a bit a mess. Due to the releaser, just "opens a bottle" its was way too less. Due to in later stages, the O² releaser is not so needed anymore, due to the greenhouses, it can be fine just to have 1. Its aging also fast, so maybe its good to have 2 emergency ones for the player, if one breaks fast.
I added more gifs and created a small feature text with the gifs and updated the itch page. I also updated the https://generationship.scifanstudios.com to now link the current download button to itch.io . It can still be downloaded from our server by pressing the old-versions button, but due to limited bandwidth its moved to itch for now. I also added the twitter link and the trailer.
I fixed some small issues with selecting the person wasn't working with the new model anymore and did a release. I also did the first Update-Video since a long time, this time rendered by script in unity itself.
I also did a playtest, again without big erros . I found again a lot of improvements, that i planned for the next iteration. The main point of the next iteration will be animations, so improving the person and maybe other buildings. I also plan to adapt all other old buildings, that were out of date after the grid-size change.
I also started to build some animated gifs for the project pages and plan to update the homepage with similar content than the itch page, maybe link to there and just move the older downloads to our own server for now.
(Due to large content size, see discord, Twitter of the Games Page )
I added a consequence for high humidity values. If the humidity raising >70% all buildings are damaged way faster. Its increasing till 100% humidity, up to 100% damage in 1 week. Its also shown in the ui of the buildings condition box.
I also worked more on the Update Video system and improved the Highlighter i used for the Tutorial. Its now animated and fading a bit to the target, so the eye of the player is forced a bit to that direction, and he don't need to search so much. Its also supporting to fade between elements or back to full, so in the update-video its showing smoothly different things in a row.
I did the base for the update video.
While trying to add the feature for the Person consequences, when the o2 and co2 is bad, i redo the design of the headline of a building. I moved the calculation to a popup and adapted the style a bit to the repair icon.
I added unconscious to the persons. If the air goes too bad, they loose unconscious and cannot do anything, till the air is good again. Due to the big ship and less people, this state this takes a lot of time. More problematic will be the H²O value.
I added some nicer Persons and tried around with Animations. It was not easy, due to i'm using 100% ECS System of Unity, so just a shader with baked animations is possible. I can simply switch between multiple baked animations, in the same shader, and the baking is done at starttime
It took a bit time, but its now also working with Timescale and runtime changed animations
I wanted to build a simulator for the Persons, but i had an easier and better idea. I make the needs changable in the editor for the persons. This makes it easier possible to force situations for debugging, and live check the metric changes of them.
With that new editor, it was pretty easy to test and adjust the person idle behavior. The persons are idling now longer, this killed the performance in previous versions.
I also added a more random aging, so the buildings don't need to be maintained all at the same time.
I added some nicer Persons and tried around with Animations. It was not easy, due to i'm using 100% ECS System of Unity, so just a shader with baked animations is possible. I can simply switch between multiple baked animations, in the same shader, and the baking is done at starttime
I improved the calculation popup by adding some icons to it.
I also updated the Trailer a bit. Added camera effects and 2 more topics, to get more of the current state in. I also improved the Architecture for it a lot, so its prepared for the other Update videos.
I finished the basic part of the trailer today. I added some more support for easy creating it. Its all setup in a script file, where i can control the camera gamespeed, buildings and set the text to display. I will extend the trailer in the next iterations, and plan to do more at the end of the iteration, maybe a short iteration video. With the framework i build it should be fast.
I improved the UI at several parts, what i found a bit strange while playing. Namings, missing details, for the resource details.
I also added the N² Releaser, similar to the O² Releaser, that just pushes Nitrogen to the ships air.
I also started with an achitecture for a trailer. I setup a unity-scene, that could render the trailer using the unity-recording feature. It needed a bit tweeking, but its going forward. Still some timing things needs to be fixed, but the rough setup is done.
I played a bit around with the new Unity Recorder and found some APIs i could use well. After some unity bugs, that caused broken gifs (due to Timescale change seems not supported), i could make a my TestScene as a Recording Scene, to create several screenshots, gifs and videos with different camera-angles, aspect ratios and resolutions. Its now updating the games Icon and the splashscreen, that i have also improved a bit. I also updated all community icons and pictures to the new version. All in all it took a complete workingday for that, i hope it worth it
I also did another playtest, with ~1.5h playtime. In Game it was ~4months, where i could finish the Food-Production. I expanded a bit too fast, so the Pressure were ~.6Bar at the end. The Oxygen dropped very low and the Humidity goes to 100%. After the next iteration, where its planned to add some consequences to low oxygen and high humidity, i would have lost. Due to its a survival game, i think its going to a nice gameplay. There were no major bugs anymore, just some performance issues with idling persons dropping the max-speed to 4h/s down, due to they using servicebuildings without needs.
So i did another release and looking forward for the next iteration. The Release Process worked very well this time, including the new Wiki-Updater.
I added a new Building, that can absorb H²O out of the Ships air. The mechanic is similar, than the one in the lifesupport, just more capacity. I reused the basics of the CO² Filter Module, to do that as fast as possible for now
I also created a small script, that autoarange the Buildings in the Editor-Scene, to debug easier. It sorts it and checks the tile-size to create an even distance between them.
I added the AirVolume of the ship. I added for each building an estimated volume and added it to the simulation, so when new buildings are finished or dismantled, the volume will change, and the bar value will update. Also e.g. the N2 Releaser will start releasing more N2 to fill up the air pressure.
I added the effect of buildings to the conditions. I tried again to use the direct calculation algorithm of the efficiency, to show to the user, instead of doing a second calculation (that meight probably is wrong after updates). Last time i struggled with it, but this time it worked well. I planned to polish that in later iterations, like adding icons to it.
Today, i added the Maintenance Work. It works similar than the construction work. If a building reaches 80% Condition, its checking for possible maintainers. The maintainers also checking, if they can do something. I added it as a 2. work to the Construction Module, maybe they get a separate Building later.
I started with the main task in this iteration, the maintenance of buildings. First i added a building condition. I improved the ResourceContainers and just used a container for that, like for the health of persons. I continued adding a configurable damageOverTime "Aging" to the buildings, starting when the construction is finished. Now Buildings also have ResourceContainers showed in the headline on selection. Its sharing the same ui as the other resources, so a lot of data without much effort.
Today, i started with some small fixes and adapted the camera angle while zooming to the new smaller gridsize, so its more over the buildings, and not coming too early too flat. I thaught about a new Work Type for the Greenhouse, but i couldn't find an easy solution yet. Everything is very hard to setup, show to the player and implement, so its moved to further iterations for now.
I also readded the target marker for the gravity and also added some for the other air-values, so its more clear, where the optimum is.
I created a generator for a Wiki and setup a new Wiki for the game. Its automaticaly updated with a release and using the internal data. For this iteration, just some basics are added to try out if its working well. Its using a own written generator, generating markup files for wikijs, than pushing it to a git repo, where the page is in sync with.
This was a very early created ticket #260 (of now total 1333 Tickets).
I also added it to the CI System, so with the release button, it will generate the new wiki and update it on the server.
I also did another playtest with the new version, and it seems very stable and i didn't find much things to improve this time. I stuck on some bugs with the greenhouse, it seems the optimum resource stopping the work.
I did a big refactoring of the ResourceDetails panel. Its not static called anymore, due to from creation of it and now, i created a lot of more utils function, that makes it easier to do it without. I also refactored the general update mechanism and updated it.
It has a special view for the optimum resources. The others with a maximum will stay as a bar.
I improved also the layout, so its way more structured.
Additionally i added the users for resources that have that (like ships air or the energy)
Today, i got the monitoring working. Its using a TLS Secured WebsocketConnection to a nodeJs server, using OpenTSDB and Grafana for displaying it. Current its just showing the current opened games and a testing value. I will add some other statistics later, e.g. when in the game totorials are done or skipped, to see problems, or improve balancings by sending the amount of buildings, and when they are started to build. I will think about in further iterations. For now the basics are done
I also srink down the start satellite, due to the new airpressure changes, and support for multiple works in one building, it don't need to be so big anymore. The next srink step would be removing the infrastructure building, but than new players will not know how it works, so the tutorial needs to be updated at the same time.
I added more work icons for Power, Electroyse and Gas releasers.
I also improved the Overlay, so multiple problem icons are shown well. Also it looks now way better, when the aligning to cameras.
I also started to setup Grafana with OpenTSDB to monitor some statistics from the game.
I finished the Model for the Lifesupport Module today.
I kept improving the AirPressure UI and came to the conclution, that the unity Gradient implementation is very buggy, so i created my own one. I improved the API to create the colors by defining zones and improved the layout a bit.
Afterwards, i started to build the work for the new Balancers. The Logic before stopped, when the container reaches 100%. Due to e.g. the oxygen in the ships air has no maximum, it changes the logic a bit. The 100% value is now just the "Optimal" value to reach the target of ~22% Oxygen relative to all others. The Resources can now have an optimal mode, where they stop, when the optimal value is reached. If not, it continues producing the stuff.
I added the AirPressure feature and adapted a bit the simulation. Its still not working smooth, but i added today the UI for it, what took way longer than expected.
After i changed the metabolism, it was now needed to have a new building for drinking water. Due to this should be also done in the caffeteria, i created a 2. work there and adapted the simulations and UI to deal with it. I also improved the Choosing System, so future choosings with multiple different things in the entity can be implemented way faster.
The new System is now also more prepared for Performance optimizing, and the filtering can be done in jobs if needed.
I started to add the AirPreasure Feature and thaught about the Architecture, and what is needed to do it. I checked if the CO² consumption of the greenhouse is reasonable and found some science paper to it. It seems weed is consuming 1.3kg/year/m². Due to in our greenhouse its always "summer", i used ~100 days for the calculation, and end up in 2kg/day for my ~150m² greenhouse, what makes it support 2 persons. With the new work-mechanism of the greenhouse, that is planned it could produce 24h with 1 person, so 1 person can support ~4 other ones, what should be fine for now. I plan to add another kind of greenhouse later, that uses more power and a special co2 environment to grow plants faster.
To achieve the new AirPreasure system, i will try to improve the containers, so they can be "endless" size. The airpreasure of the ship is calculated by all "air"-containers, relative to the volume of the ship. Depending on that, in later iterations, the persons will loose health or be less efficient at high CO² levels.
At high 100% humidity, maybe i add some faster damaging of the buildings (also in further iterations).
The current system can just balance to 0 or 100% filling state, so i need a new kind of Work-Algorithm to reach a target state. Also till now, i just converted things, so i had in and out storages. Now, i will have a in/out storage, so similar like the generalStorage, but its used for a work.
All in all it seems way more work than i expected, but i hope it worth it
To have easier and correct calculation, i will change from custom "units" to "mol"mass of the SubResources, so it can be calculated more correct.
I fixed and improved a lot of small things, including ui updates, selecting the dock after a rocket is launched by the popup, mainmenu hover effects and removing the supplyship popup earlier.
I also worked on the Problem Icon Overlay, so the they are aligned with the camera now.
While checking why the crew needs ~5kg food a day, i found a nice paper of nasa, how much the astronauts in the ISS need. There are a lot of numbers close to as i need them for the game, so i started to play around with it and adapted my simulation. My time run out today, so i plan to finish it tomorrow. In short whats changed:
I tried also the itch App and found issues with the installs. So i checked a bit and it seems, the Windows Compress leading to a problem with folders without files. I also found that itch provides a CI tool for new releases and it looks pretty nice and easy so far.
I also did another playtest and it worked pretty well this time, no crashes, no big findings, more times, to had some stuff to react on and i found 10 small things to improve.
Due to a lot of downloads via itch.io i fixed the tutorial, so its not crashing and showing better positions for the buildings to drop and disabled very outdated ones. For now, i will not update the tutorials the new GamePlay mechanics and simulation, due to there will be still a lot of changes in the next time.
I checked a bit why in my editor the speed of the game is very low. I added the checkConsistency option also for every frame, when its turned off, so its not done all the time in the simulation, just once afterwards. This kills the precise tracking, but gains a lot of performance. In the editor it goes with burst up to 10d/s at the starting scene without lagging.
I also refactored the Release-Window, to work with the new ui system, and be separated from the Window, so it can be also called by commandline. For now, its not working via commandline, but i added a button, to do the release more automated.
At the last unity update, they showed that the profiler can be customized with own values now. So i decided to migrate from my old approach of using a customized third party monitoring editor-tool to the native unity profiler.
I added also a simple balancing tool, to see problems, and detected that to create food for 1 person, there were 2 persons needed to produce it. Its calculated with an working time per day and the gravity value, and shows, how long persons need to work for the needed resources. I balanced due to that for now.
I added a specialEvent for Energy depleted so the simulation. Due to the importance of the energy, there could bad things happen, when that is the case, so the player can setup to stop the timewarps when that happened. Another new Event will be fired, when new persons are arrived at the ship. I always forgot to assign them to a workingplace when they arrived, so now there is a popup. The Persons disapearing from it, when a workplace has been assigned.
While playing, i found, that the automatic update of the userActivty was overwriting the players choise. This was a bit anoying, due to the person keeps doing something else. I added a "force" mode, so the normal autoupdate will not be done. E.g. if the player force the person to work, the work will just be stopped, when there is a Problem like some needs are too low.
I started with a basic History System, and tried it with the PersonActivity. The first challenge, getting the data out of the simulation, without disturbing the performance, was already close to be solved before. I created a second System, that stores that data, so in later iterations, the UI can directly use it and show it to the player.
I improved the ChooseTargetButtons, to disable the button, if there are no possible choise. It was a bit confusing when clicking had no effect. Doing that i found the problem, why the infrastructure was not shown at targetselection.
I improved the highlight of the Actions, and the general Selecting mechanism. All related entities (e.g. customers or workers) are shown, when they move to or are in the building now.
I also turned back to the on/off button instead of the slider for those buildings, where it did not make sens, like SleepingQuarter.
After that i turned to blender and created the ElectrolysisModule, that can convert Water to H2 and O2, using electrical power.
I refactored more at the resource containers, due to there was some strange calculations, that maximum was smaller than the current value. The code of it shrunk down a lot and it looks way cleaner and more performant. Before i did a "clear" before every working update, and deal with just AddDelta calls. It was easier to build at the first place, and closer to the aproach before, but it leads to very complicated situations, scheduled a lot of updates and made testing very hard. The new structure keep track of the old data inside of the resourceContainer, so it knows who is doing what with it. With that consistency checks are way better and a lot of specialcases and scheduling could be removed.
In the evening, i had some other ideas for the problem with the release upload and tried some hours again to make it work, and sucessed with a small script, letting the IEnumerators run in Editor-Mode, that failed at my last try half a year ago. Now i can release again completely from unity, not using another upload tool
In the morning i had also some motivation to try again the CI system, and after several hours it seems working now for the basic example giving a source folder and recieving the packed build. I got it so far, that i could give my sources and the docker-container pushes out the build as a zip file. BUT it was not working... it seems the blender-files are not imported well. Due to this cost now way too much effort i stop this for now, and continue with the game development.
The classical problem: Floats are not precise enough... It was a big mess to deal with the delta values and efficiencies, due to the deltas are already very low values, the precision of float was already very close to it. This lead to very hard debugging and not precise values. I cleaned everything up there and changed the efficiency and delta calculations to double, to get the values way lower (from ~1e-9 to ~1e-20) and added more hard cuttings when 1e-16 is reached.
It was a lot of work, but it looks now way better, less scheduling, just updating the buildings, that needs it, and prepared for the "Priority" of resource usage/production, to automatically turn off/on buildings with a priority. For now, just "random" ones are turned on/off, the ones first in the userlist.
I found some Unity-Docker Container from unity itself, but it looks still very annoying to use, due to license issues and not well documented usage. But i made it to run a windows mono build inside of the container, that i can fill over my nas. A bit sad, that there is still manual work needed to activate the license. It ends up with "Display failed" on the Server, so i gave it up for the next time...
For the infrastructure, i reused the setTarget Method i created, and just enhanced it by the special resource, that is needed to build the infrastructure. So its also working now for the Infrastructure.
I also improved the UI for it, added an icon for the Target and the choose button, and moved the ProblemIcon to the Headline of the Work and add details to the tooltip for it, to prevent the UI jumping often on high speed or actions.
I also added special bounds for the selection of some buildings, due to the big boundingBox created by unity is sometimes not useful. E.g. at the Photovoltaic Panels, the boundingbox is extrem big, covering all tiles also above the solarPanel. I added a Component with an Custom Editor to edit them easy.
At the end of the day, i hit against some anoying simulation update problems again, so i made that part new again, getting it more simple.
After finishing most of the tickets of the iteration, i did another playtest and found just 1 bigger exception related to dismantle. The other playing was way nicer than before, so its going to a good direction, but still a long way to go. I just fall to 1 exception, related to the order of Systems again. The SelectionSystem was scheduling a change for an entity, that the taskmanager, that was running afterwards destroyed. The Unities CmdBuffer cannot deal with it, even if the change is just useless.
I also added the FuelCellModule, to have the first step of a "Battery". Later an Electrolytic is also coming, to gain H2 and O2 out of Water. I plan to do every Iteration at least 1 Building, so i don't break too long with blender
In the afternoon i did a bigger refactoring for the Construction Work. It went well and i could finish it without bigger problems. The goal is, that the construction building will keep the target, and not switching around. It will be also possible for the player to directly set the target Building, so he can better control, what he want to build next. This is additional to the priority, the construction priority will stay for the auto detection after a slot is finished.
I fixed a lot of bugs and improved the UI again. In the afternoon, i analysed a long time a bug with the selection. Due to the ship is rotating around itself, and around the earth, rotating very crazy in the scene, somewhere is a problem with the updating. I used the World-location of the entity, that seemed wrong. I end up in the order of the systems, and found the reason in the SunSystem update. But there was no good place to do that for now. Main problem is, that the sunsystem was copied from an old game of mine, where the Jobs system didn't exist yet. The migration is an effort, i will not take now, maybe later. I end up in recalculating the world-location in the selection, like i do in the update, and it worked well.
I thought a bit about the selections of building, and strugled with the ray intersection to the real boundingbox. I found an way easier way, just transforming the Ray to the local object space and try the intersection there. Due to i can use the bounds i could reuse the unity function for that.
I also fixed a lot of small issues and did the first playtest with the smaller gird. It felt way better, but needs some balance ajustments. I also think, the building selection is not good enough. Due to the smaller size, its way likely to miss the grid at 0 level. For clicking it should be similar like the persons, even if its more complicated to do, due to i cannot use the worldbounds for it.
I also added the working hours left for a construction, and added a summary line to the tooltip of the ship resources.
I released the new version and start with some updates and simulation changes.
After that i started with the big change of the iteration, the ship resources. Due to the current method to update was not so performant, i decided to refactor this to another aproach. It also allows to show the producers and consumers of E.g. Energy in the UI and maybe adds priority for producers. E.g. if you have 2 energy producers, the player can let one produce all the resources. It should be also way faster to update when something has changed, and prevent update loops.
The old approach was just a AddDelta Call from e.g. buildings. That ment, that they also need to remove the deltas when they not need it. It has to be exact and the ship just knew the current value. If the energy goes down, the ship find and update all possible energy producers, that may balance the detla to 0 again (same for consumers). The new aproach is, to save the single values also and the buildings can pass a maximum. E.g. The generator produces current 1kW, but max is 10kW. With the list of all current and maximum values, the ship logic can update specific buildings.
I also added some tooltips for the buildings, added the current efficiency to the tooltip of the table-details of the buildings, and other small stuff.
I fixed all the failing tests, due to that big refactoring and updated the I18N for the new Buildings. I also fixed alot of bugs found in the last playtest, 2 weeks ago, including the new slider, animation of the infrastructure, selection of persons, ui updates and more.
I played a bit around with the selection of the Buildings, but it was not so successful. Due to the rotating buildings, the bounds of unity are very large and overlapping, so always the wrong building was selected. Other ideas also failed
Today, i finished the last models, so i can continue with the other tasks again. For now, there are just 1 kind of each building, later i want to add "big" versions of them, but for now it should work to try playing with it.
I converted several other Models to fit to the new Grid and the new Storage-Architecture. I was close to finish the updates of the Models and GameObjects to the new grid today, hope i can finish the models tomorrow, to do more coding.
I also improved a bit the editor, to make it easier to update the models. It was a bit messy to deal with these 10 components, all in different order and without icons
With the Dock, i finished the remodeling of the Buildings, i needed to adapt the rest of the systems to the new gridsize. I found already a problem with the selection visualization and some animations, so this is the next task, before i finish the "just visual" buildings of the satellite. In total it was now ~13 models.
I thought a bit how to do the new Box-Positions. The old Animation System got very complex and hard to debug, due to its live calculated for the positions. I'm thinking to pre-calculate the inner building paths it for the persons and boxes, to make it also easier to debug. It could be done with special MonoBehaviors, creating the relative paths. Due to the last refactoring, it could be easy. It was easier than expected, due to the animation refactoring in the last iteration, so multiple storages can be setup now. I also improved the editor, so Problems are easier visible without starting the game. I also could quickly add the animation for the other buildings in a small amount of time
I created the new ConstructionModule and InfrastructureModule. Due to the new size, the old idea to build it rotated is not working anymore. I also finished the new simple storage building.
I finished also the 1x1 sized Buildings for the starting Satelite, that is the SleepingModule, ToiletModule and CanteenModule. Each space for 1 user.
The stacked storage outside were hiding a lot and looked bit ugly, due to the big size, so i make it more loose, a bit like the old storage model, to get a bit "air" in. I think it looks way better, i hope i didn't forget anything for now, and continue with the other "1x0.5" Modules like the Oxygenreleaser and CO2 Filter.
I also created the other similar Models, and make use of the new technique. It seems it works fine, i just needed ~1.5h to create the other 2 models from creating the blender File to game-ready and added GameObject.
I created the Generatormodul with the new approach, but it turns out, the ambient in the room did not fill my expectation, due to no baked light in the model (see "separate Object" Image). I tried another approach, with back to one big baked model again, reusing the data in the main blender file, this took way longer to bake and will create lower resolutions, but way nicer ambient.
In the Game, the generator was not really visible, so i decided to do it again more with the original approach with the generator outside.
I also created a stacked version for the BuildingStorages, to save some space for the simple modules. I added also different lights for in and out storages. Maybe i add an pipe system for the gas/liquid storages.
I started with a generic Module, that can be reused. The plan is to make just design the machines inside of the generic modules, so they can be reused fast and easy till better ones are created. I used the stacked storages, it can pack up to 4 storages (e.g. for the Generator just fine). When Storages are used, there is ~2.5m x 4.5m space for a machine or other things, that will be added in different models.
I started with some reusable parts for buildings. One is the storage System. I plan to make the resourceBoxes in each Building visible through glass or something similar. Its a small elevator for the boxes from the underground level of a building to the upper visible area. Usually buildings have 3 boxes in their in or out storage, so it has space for exactly this 3 boxes.
I finished the basic models for the small grid and rendered the textures for the game it and hooked it up together in the game. Here the new models. The Fundament has no texture yet, due to this will be just used as copy paste in the buildings, to fasten up creating new ones. It contains the correct holes and the walkway connection.
After playing around with the basic models, i decided, that a 5x5 meter grid is easier to deal with. So i started to change the Gridsize including the 2 basic infrastructure types, to see how it will look. After creating so many other models, it felt way easier to update and Redo the models in a good way. Here the new smaller Gridstructure with a railway.
I did another playtest and had some improvement ideas. It looked, there is not so much way to optimize for the player, and due to the big size of the Buildings, its very streight forward, what to drop where. Also due to the long buildingTimes of the big buildings, it was very clear to build as less walkways as possible. Also below every walkway, there has to be a railway, for the construction. Maybe this also needs to be changed in the future, so the builders could grab the resources from the storage and bring them there.
So i thaught a bit what can improve the building experience. I had a lot of ideas, the one with the most success chanche meight be reducing the gridsize. Due to the current size of 10x10, its very hard to structure the buildings better. I thaught about to reduce it to reduce it to 3x3, to have a btter control, but the walkways are already not too big and are current 4m width. Due to i have a flexible implementation for the grid, i can just reduce it to 4x4, without a big effort in the simulation. But it will take a big effort to update all the models, animation and gamedata
I planned a bit with the new idea, to prevent making special buidlings for the satelite, the start satelite will consist in reusable buildings. It contains all mandatory "small" buildings, that can be also builded by the player. In a 2. step, i will create also bigger and very big versions for it. The small versions regulary can be used by 1 person, and most of them are 1x1 tile (so now 4x4m) in size. Here a rough plan, how the satelite will look like.
I plan to prevent the underground connection of buildings, so all buildings will have underground layer connection, what also makes it easier. Also the constructions have now all setup gridConnections as mandatory instead of a single one is fine.
Its going to be a big change, so i will first think about if it worth it. I anyway planned to redo the buildings somewhen with my new knowlage, so maybe its a good time to focus on that. I plan to reuse more things, and hope, its getting faster. I need ~30 Tickets updating everything, that meight be take min 2 weeks more than planned.
I did another Playtest and found again a lot of improvements, and one bigger balancing problem. I fixed close to all findings today, here a small summary:
I found out, that the BuildingSpeed of the Constructions were way too slow. The constructionCenter tooks 2month to build with 2 workers, so i improved it again. The BuildTime is now for 1 worker and 100% efficiency. So the 1d means it took 24h with 1 worker in the normal ConstructionCenter with full gravity, so ~ 2.5 days gametime with a 10h working day. At the start of the game it will be x66% constructionEfficiency -30% gravity impact, so ~ 5days.
I also added the hint for the slower constructionModifier for the satelite modules to the UI.
I had some problems with the default Unity Slider when leaving the screen. There was no end of the capture when coming back, leads to a unwanted movement of it. I didn't find a quick fix for that. There was also a problem with matching the progressbar to the slider. The min and max points were not at the end of the VisualElement... Due to the big slider on the top was not so nice, i decided to implement an own slider. Its addable to any kind of VisualElement and is just an arrow on the top. The API is more or less similar than the Unity one but it behaves better when leaving the screen. Due to i did this kind of slider already in several other languages (gwt, js, unity-canvas and more) it was straight forward and fast to do that.
I also added an Overlay when the player goes to the ChooseTarget (like assign a workplace or transferring a resource). So its clear, what the player can do now.
I improved tooltips by making the timewarp-tooltips updating to the new states, before it was a fixed text. I also added the problem-text to the tooltip of the MultiSelection Table.
After dropping some buildings, it took a lot of clicks to redo the construction or prioritize multiple Items. So i decided to add the Cancel and Priority buttons also to the selection Table. So now the player can just select all buildings he wants to prioritize or cancel and click fast through.
I changed the usage of the Power, due to the starting power generator last till the end of my playtest, and just had 10% usage. I found that its a bit wired, that the used power depends on the efficiency. So i changed the usage of the power related to the TargetEfficiency set by the player. So if the player not need the complete greenhouse, he can adjust it to e.g. 50%, to just use 50% of the power.
To do that, i added a TargetEfficiency Slider to the UI instead of the On/Off Button.
After trying that way, it seems very strange, due to if the player adjusts the efficiency to the current efficiency due to gravity and workers, the energy was way less. So i changed it to use the efficiency calculated values. Instead i adjusted the power using of the buildings. For that, i adjusted the Construction buildings, so one worker in the modules work ~15% and in the new ones ~33% and the gravity effect is for both 30%.
I fixed a problem, that the need changing plus and minus markers were not visible for the small need-icons, and added support for changing the workers from the building itself with rightclick, due to it was a bit anoying, to always select the persons first, when changing their workingplace.
I also changed the size of the ResourceBoxes, due to i just had 1m space between the normal building-floor and the grid. This leads to problems with storing the boxes, causes a lot of ugly boxes in the middle of the buildings where it can be stored. Increasing this space ment increasing the walkways a lot, so i came to the idea, just reducing the size of the boxes, so they fit now easy in this space. Before the boxes were 1m height + 20cm carrier, now in total they are 90cm large.
I also baked the Carrier into the boxes, so they use less Entities and less renderings. I increased the Texture size for the boxes instead and improved the Texture bake, so they look nicer.
The greenhouse was very unbalanced, it created way too much oxygen, causing a very low efficiency, due to the air is already full. I changed the values so i'll try again in the next playtest.
Due to new thoughts, i readded the feature with multiple works. It was removed, due to too high complexity, but after several refactorings and cleanups, it was now ready to readd that feature again. I think its needed e.g. for the Recycling center, or for adding maintenance to the constructionCenter. I also thaught about merging the Infrastructure Module with the constructionCenter and make them way slower than the other ones. Maybe the workers will split up when both works are active.
I also created a way better skymap, that has not the problems at the side of the 6cube image.
After the next playtest, i improved several things in the UI. E.g. Hiding some SelectionDetails in ConstructionStage, showing the needed items of a construction instead of the current ones, readded the duration to the timewarp-buttons and overlays and several others.
I also added a ResourceOverview panel to the Top of the UI. In the playtest i found out, that i needed to check for the main resources all the time when setting up a supplyship. This causes always opening/closing the popups and clicking and checking a lot. Now its easy visible, even when the popup is open. It counts also partial Boxes and have a tooltip with the name of the resource.
I also added an algorithm for each Special-Event-Alert so they disappear automatically when its not useful anymore, e.g. when the Supplyship is already on the way back to earth, the "Arrived" Alert disappears.
I also did another playtest with the new release, with again a lot of new findings and improvements. I could play around 1.5h and it feels time running fast, what is a good sign . There were still some exceptions, but nothing, that blocked the further playing, so i could build till the greenhouse now, and around half a year gametime. It seems its on a good way, but still a long way to go
The Timewarp stop was not working so well, due to a lot of things could cancel the tasks, so i changed it a bit, to be able to warp to a specialEvent. This meight be userdefined or internal events like ActivityChanged. If this is registered, the deep simulation will be stopped when this happens. Due to it was a fixed end time for the algorigm, it needed to be changed. It looked very ugly when its after the estimation. Due to the complex simulation, its not possible to calculate the real endtime for most of the things. Due to the player e.g. wants to wait for the end of the construction, it needed to be changed. I'm using now the timespeed and lerp over it like at the gamespeed. It end up in a big refactoring, moving all the TimeWarp logic out, separate them into Time, Task and Event TimeWarps and get rid of the old code parts to make the TaskManager easy.
The Constructions can now also be timewarped. In case no builder is working on it, the speed will be reduced to 1h/s, till someone work on it again. This works also for other Timewarps, i hope its good usable and makes it more smooth to deal with time.
I refactored the Simulation Core, due to it got too large (~1000 LOC), so i splitted the task-logic out and merged a bit, to have a cleaner usage.
The consistency checks can be disabled now, so the simulation can run way faster (~x4) so in the editormode i can speed it up to 4d/s with the starting scene. In the final compiled version i couldn't touch the maximum even when fast warping a year. The +1Month button react instant
I also added an ignore Button for the SpecialEvents and an animation for the Tasks when they appear, to make it more obvious for the player, why the warp stopped.
I did another release and tried to update to the newest versions, but this time, it failes everywhere in the unity-packages. First the ui-package is not compatable with the new beta-unity-version, than the hybrid renderer not renders my shaders anymore, due to some problems with some internal shader graph problems. The old hybrid renderer is not compatible with the new entity system and so on... So i stay on the old (last month) versions for now.
I did a small playtest and it looked pretty stable for now. I found some small possible improvements and some bigger things. It seems the persons loosing a lot of health, and are too low to work after around 4 months. I plan to analyse the reason and improve that so they have better workflows. I found also some stuck situations for the persons, when all needs are ~20%, the tasks are so balanced, that the person is busy going from one facility to another. I plan to increase the metric of the current service. So this iteration, i will focus on that part.
I added more debugging for the Person-Activity, so it shows a statistic of what the person is doing. I found already, that 2h/d toilet is too much, and reduced it by 2
I added specialEvents deep to the simulation, so if something critical to the gameplay happened, the simulation can instant break to real time. All timewarp or time-accelerations are stopping and a alert will pop up. Later also some animations can be added to make it more nice. When the simulation should break can be configured in detail the options, so when something happened too often and the player wants to ignore it, he can just configure it.
When clicking on the alert, the effected persons or buildings are selected. I also fixed some bugs and added a special alert, that is not disappearing automatically when the person is destroyed.
I checked a bit for the performance of the game, due to in my playtest i came with some builings and 5 persons only to 2h/s gamespeed. I found that the sleeping causes a lot of updates, and due to the persons are not sleeping so long, it pushes the performance a lot. I also prevent creating and canceling not needed tasks and scheduled 2 tickets for the next iteration to increase the performance again. For now, also the Consistency checks are enabled in the release, so i decicded to add an option to disable it. I could also just disable it for the release easy, but this would be hard for found problems for now.
After fixing this, i could increase it from 2h/s to 2d/s, so ~24 times speedup.
I added a new Editor-window to see the current metric values for the Activity of the Person. This should help to debug way easier and add the features like the motivation in later iterations faster.
I fixed several problems at the animation of boxes and supplyship and make these systems easier to maintain. Also adapted the intro to the new camera-settins and starting satellite.
In the morning, i did quick tickets like dismantle have also a priority now, the selection is not selecting all buildings on the tile, when the mouse is not moved. I also increased the resource usage of the generaot, due to at the start of the satelite, its used just 20% of one box in 4 months. The dismangle time is now 10% of the construction time. I think about creating garbageIron boxes instead of reusable steel boxes, what would make it more realistic. There were also problems connecting and unconnecting 2 general storages that i fixed. There were also other small bugs for choosing targets i fixed. In total it was ~9 Tickets.
I also added a cheat button, to fasten the testing.
I fixed several findings from yesterday including a bigger problem with the energy production. Also the infrastructureBuilding didn't stop working, when the worker left. Also fixing some small problems like not updated icons in the selection-details or no mass was shown on loading a game.
I added a mechanism to use more autosaves. I rename the old autosaves to one number higher till it reaches the maximum (5 for now). I also hide the autosaves in the save dialog, so the players saves are visible at the top, to make it more convenient.
I also improved the animation of the Infrastructure, so its created 45° rotated. This makes it possible to build it in smaller space and the buildings could be smaller.
I could also add constructionTimes to be different for each building and added it to the UI, so bigger buildings took longer to build. It also works for infrastructure.
The front part of the satellite also got a bit refactoring, due to the connected Modules at the infrastructureModule were not good treatable. When dismantle the infrastructureModule, they were hanging around. It was needed to build grid and railway, to dismantle them. Due to the more compact infrastructure construction (the 45° rotation) it was now possible to shrink the infrastructureModule.
To make it prevent need to build 5 not needed GridStructures at the start, the infrastructure module has also an exit at the inner side of the satellite .
I could also make another playtest and found a lot of small things that can be improved and still some bugs with specific situations i fixed.
I make it possible to setup the construction priority also in early building states, e.g. when the grid is not there, to make it easier possible to set them, not waiting for the grid.
I also migrated the Save/Load Dialog to the new UI-Architecture to make the changes in the following iterations easier.
Due to some bugs in the Animation paths, i decided to rework on it, to make it easier configurable and also support more entrances per building. I found and fixed the main bug in it, where in some situations, the entrance value of the box was calculated wrong. I also updated all Buildings to work with the new configuration and added missing ones for all buildings.
I added some details for the multi-selection panel, so its shown the working-efficiency or the problem of the building, the storages, workers and customers, to get a quicker overview of the building, without clicking everything through.
I also searched for a place to show the player the resources that he gets back when he dismantle a building. I choose to add a Tooltip to the dismantle Button where this could be added.
I finished the simulation for consequences of low needs. The last part was, that a person is dying when the health reach 0. Now all are finished. I scheduled for the next iteration some more ui and interaction features for that, so the player will get noticed when something important happened. Also its planned to stop the time warping/highspeed when that happened, to prevent fast gameovers.
I changed also the behavior of the persons. Before, they prioritize work, whenever they could work. This leads to very low values, causing easy staving or other problems. I added the working activity to the other service-activities with a default metric. This could also be done by person, like a "motivation" value, defining how much the person wants to work. For now, its fixed. There was also a problem, where persons were staving, when sleeping. I also worked on that so its updated more frequent. Leading to if something is at 80% fulfilled, the activity will most probably stop now.
I started to add consequences for person needs, that reaches 0. If the excrements reaches 0, its directly set back to 1. Later the hygiene will set to the 0 and a "bad memory" will be added or something like this, increasing the rebellion and unhappiness. The excrement resources are just lost. Everything else would be too complicated now (cleaning, or adding this resource to shower).
Afterwards, i added a consequence for no food or water. If one of that is 0, the person-metabolism will stop, and the person looses health. For that i added health as a resourcecontainer like the other ones. If the metabolism stops, the health is reduced. If the health reaches 0, the person will die and is gone forever. In later iterations, i will add a clinic to increase the health again. Also other factors to the health are possible like radiation or diseases. Maybe age can also be a factor, that the health is reduced over time faster as older the person is. I also make the metabolism stop, when no oxygen or 100% CO2 is in the air of the ship.
I worked a bit on the Monitoring of the TaskManager i needed to fix some things in the component to make it work again and increased the speed in the editor a lot, from from ~50Tasks/s to ~360Tasks/s. Both without burst and with all consistency checks.
I also added some Resource and building descriptions to the Detail-Popups.
I also improved the Supply from earth. Due to the last balance updates, it was a bit wired, that the supplyship can hold ~250 boxes of oxygen, or ~80 steel boxes. Its just too big to carry for that small rocket, so i checked a bit the real values and added a size maximum. I used the Dragon 2 cargo as the values, so its now way less stuff that can be shipped with one fly to the ship.
I fixed some problems with the tooltips in the mainmenu, added help texts to some items in the options, and added a raw Building Details Popup. For now, its empty, i first need to figure out, what is important to see there, to not overload the ui.
I fixed the last findings from the last playtest and did another one. It looks way more stable than before and i found no more big bugs. So i published another release. In the next Iteration i will focus on more playability like rebalance the supplyship, adding consequences for persons when the values are hitting 0 and showing more infos to the new players e.g. at the selection area and detail-popups.
I changed the production lables on the working resources to show the actual usage/production instead of the maximum. It was a bit tricky to show it also correct for the service-buildings, due to there its calculated by the customers, i hope its easy understandable in the UI now
I also improved the resourcecontainer of the ship, so less tasks are created when something changes.
I also updated the Infrastructure Construction Center, so they also need some other resources over time (tools and energy). It also fixed the UI showing the needed steel by time, instead of per finished building.
I fixed some problems related to the game-loading mechanism. Till now, the current scene was reused, that leads to some problems with existing ui-elements and other potential issues. I changed it, so the current scene is completely destroyed and replaced by a new one, so it should be fine now.
I did some more playtests and fixed some major bugs related to the big migration updates. I did a new Release on the new server, what worked not so well. It seems the new Unity had some problems uploading it to my server. Using the API directly via swagger worked fine . I tried several things, but the DotNet API is horrible and just said it was canceled due to it was aborted.... No Details, no infos. All tips from the internet failed... So for now, manual upload the new Version 0.37.0
The last days i fixed some problems with consistency checks and improved them so they are running at more reasonable times after tasks, instead of more random positions. This goes very deep to the task-management and took a while. They also run more often, so its easier to debug. I also did other Codequality improvements before i started the next playtest. While doing that, some test failed due to other bugs in the simulation, so it helped to find them doing that
Till now, i created the person entities programaticly. I changed it to gameObjects, to have an easier code, due to in the next iterations, more person stuff is planned. Its also easier to change the resources and metabolism values. After a short tryout i found that some meshes were black, due to i updated to the new rendering engine. After some research and several tryouts, it turns out that there should be some ShaderProperties added to the entities...
I changed the internal weight of resources to G instead of KG. Its calculated for each atom included in the resource, so 1 unit atom was 1kg. It end up, that cookedFood, contained out of 25 atoms had a minimum weight of 25kg. I also split up the BrownWater from Excrements, to make toilets needs water. The metabolism of persons is also increased, due to i found that one person should need ~ 600g oxygen a day, and it was just at 200g in my simulation. I also split up cookedFood for the Person, so they now need Water and Nutrition. This should be more clear to the player. For now, both are reduced and added in canteen at the same speed.
I had big troubles with the lobs in postgres that andi did last year. After restore, most of them were down, and also the backup was already 13gb big, full of old releases. To do a backup with that size sounds very frustrating for now, so i decided to change it to a simple file-based system. With docker, i mounted that on the nas. Its also easier possible to move it easy to a cdn with that strategy, to be able to handle a huge amount of users for downloading later.
After so many infrastructure stuff, i hope i can get back to the game tomorrow.
The last 2 days i worked on the server-setup, had some issues with the docker swarm, that took a bit time. I migrated now everything to the new server. In total there are 25 container on 2 Servers running. One Raspberry Pi 4 and one bigger one. including monitoring tools, repository, ticket-management, CI Pipelines and all webpages. Also 6 container for my own inhouse stuff, not related to the game-development. I also get some backup-services for the databases work, but i need to test a bit more on them.
All is setup on 2 domains with in total 13 subdomains and routings.
Today, i fixed more bugs found in the last playtests, like some exceptions when transferring resources or other small things, that persons not leaving the supplyship. I also make the only-blocker tiles not part of the selection process, what was a bit strange, that at empty fields, the spinningengines were highlighted. I also speedup the editor a bit to be faster in development.
I also received the new Ram for my own server, that is now finaly working. I use a AsRock j5040-ITX Board with 16GB ram. I started to configure the stuff on it with my existing Docker-Swarm and try around with Jenkins and Docker.
Today i did some fixes for some building position problems with the grid connectors and refactored the popup-logic, due to the popups were not shown when get back to mainmenu and start a new game. I fixed it by moving it to the newer ui aproach. I also analysed a bit other problems i found and added some more tests.
The first year is over. One year i am working now on the game and got a good progress. Most of the Basic things and the gameplay and simulation mechanic for the alpha is finished, so next year i can focus more on the content and playability of the game. Means adding more content, a lot of play tests and polishings. My target is to have a good alpha end of the year in steam.
Last week i created a more detailed report what and played around with my infrastructure and monitoring, but most of it was more a vacation week.
The next big problem with the update was, that my custom drawings seemed not working. It seems the new Rendering version don't render just emissions, when the basecolor is transparent. So i needed to change all my overlay-materials to be black transparent. To prevent the Lightning, i turned all to 100% metal. So all are now complete black mirrors, that have a emission. Due to the Setting is adaptive transparent, the new rendering still renders them similar than before.
Another bug appears, when hiding elements. Till now, i just removed the RenderMesh component, so the Renderer System will not draw it. This leads to exceptions now, so i used the new DisableRendering Component instead. Due to this logic was just in 1 place in the game, it was easy.
It seemed running so far, excluding the tests. The one using the MouseCursor fails. After some analyzing, it turns out, the new UI system ignores the test-override, when the new input-system is attached. There is no way to overwrite it, when the package is attached.... So it seems i need also to do my own inputsystem. The new one of unity looks like a big mess for me. Static usages, listener, that can't be removed, heavy complex key-strokes, and a lot of other problems turns me already at the start of the year to build a simple own one. Unities one is extrem complex in the code structure (i analysed it a bit to figure out some bugs).
After removing it out of the code, it was still not working well. In the end, i found another way to simulate the mouse-events...
I tried to split up the Code in multiple assemblies to get faster compile cycles. It ends up, that i could not easy split it up. After splitting some of the code away, it turns out, that there are alot of fails with the generic i18n module
I'm now trying to update to the newest packages and unity versions also for the UI-Package and the Rendering Engine, that both had big problems the last time i tried. It seems some problems are still there. The big exceptions at the new Rendering-Engine seems gone, so i will try to upgrade.
First, the UI-Package send wrong MouseLeave commands, when resizing something in the UI. At the next MouseMove the MouseEnter was coming again. So if something in the UI Resizes and the user clicks a button, it will not detect, that the player is above a menu and handle it as a click in the space and deselect the things... I fixed that by adapting my current workaround for the Mouse-Overs to this new bug.
I did another playtest and figured out more improvements.
E.g. it was not so obvious that there are empty working-slots. I changed that by adding empty slots, like at the resource-storage, instead of using the not directly visible x/x text value.
I also figured out a gameplay problem with dismantle. If a person is stucked in a building, where the building in front is dismantling already, there is an exception. For now, i have no idea, what to do in this situation, due to there is no walkable neighbor for this person. One way is to prevent the user to dismantle that building.
I added a toggle for the visualization of the centerOfMass when clicking on the icon in the header and fixed a small bugs with unitys event-system. I also reduced the size of a cookedFood package and figured out, that i should use gram instead of kilogram for each unit. Due to cookedFood contains sugar and water, it already have 21 units, so minimum of a box is 21kg. But for not its not needed and i scheduled it for early next year.
I fixed the last bugs i found in the last playtest and started to design a new Tutorial with the new aspects of the game.
I fixed the last big issues i found for the new Meshgrid Splitter. And started with some Playtests. I found alot of small things, to improve but i created a new release first. So the next iteration till end of the year is planned to be a balancing and polishing sprint, to have a playable version for the end of the first development year.
For the next year, i plan to start with big infrastructure things like trying to updating to the unity-ui package (current i use a very early non-official preview with some own fixes and workarounds), increasing the compile time by e.g. splitting up the code in more modules and start with implementing the generated wiki.
I also setup my old laptop as a ubuntu server, to try and play a bit more with docker swarm and figured out how shared filesystems can work with it.
Summary of the Algorithm: The new Grid Splitter is splitting the models one of the axis. Another deformer will bend the points than to the ships circle, so all points will fit perfectly together. E.g. if one line goes from 1 to 3 in the ship, the middle of it should not be 2, it should be a bit lower, due to the circle ship. My deformer till now just moved 1 and 3 to the correct points, but the middle point is still not moved, due to i can just move real vertices. The new algorithm now is able to split this line to 1-2 and 2-3, so the point 2 can be moved, and we get a more circular view, without adding this point to the model by hand.
Today, i redo the main part of the algorithm to cut the triangles first into rectangles before cutting it into triangles again. With that strategy now, i don't have these very small triangles as before, and cutting in the biggest triangles possible. The biggest challenge was to get the face-directions right, due to its important if its a-b-c or a-c-b. Including the rectangles needed to be split correct into the corresponding triangles. I did some conversions of my models and fixed some last small issues, but now it seems working well. It was a big effort of ~10h, but now it seems working and all models should look perfect bend.
Till now, i created the models with manual splits, so it was a bit time consuming to cut all the models correct through all layers in the model. Also changes were not so easy possible. I refactored a lot the deform-algorithms and make them way simpler and enhanced them afterwards, so also new verticies can be added with the deformers. I created a first deformer that find triangles to cut, so afterwards, they can be bended nice around the ship. I started with just creating triangles, but it creates alot and still have problems. I have an idea for another solution, cutting it to rectangles first to make it easier and more error proven. Here an example of the current algorigm with a simple plane from today.
I recreated the showers building and added a new virtual hygiene resource for the persons. For now, it has no effect, the plan was, to reduce the efficiency of the worker in one of the next iterations, or effect the mood that effects the efficiency. The mood can effected by other things that could be added later, like fun or social values.
I also added the person-popup when hovering over the selection, to see more details of the person. I added a ticket to create that kind also for buildings in further iterations.
I added some icons of the Persons in the selection-details, so the player can see easier who is working where and where are problems. I also make the person-icon in the top clickable, to select all persons in the ship.
I thought about whats next and want to get faster to a playable version now. So i moved the Person-Skills planned in this iteration further behind, i think this is not a main part for the first step. Its more important to have missions to the moon to get water for balancing the centerofmass easier than launching it all from earth. So i changed this iteration to get a stable version and starting with balancing and the next iteration will be the missions. Afterwards some story can be added. Than a final polishing with tutorials, balancing and this kind of stuff.
Today, i added some moving paths inside of a building for persons. If the Building has a area configured, the persons will move around inside while e.g. working. This looks way nicer than before, where they just stand around in the middle of the room.
I fixed some issues with circling updates when 2 buildings effecting 2 different resources and reaching both bounds. I also checked for other ide bugs i found, so i can have a faster progress for the next features and performance optimizations.
I refactored the Working-Resource settings to have a separate ResourceProcessing Config for the Settings, to be able to reuse them for the Persons. I changed the hardcoded metabolism settings to easy changable configs, so its easy visible if there are problems with the calculations, and be able to ajust easier.
I fixed all the tests failing, due to the new models i created in the last week and clean up the code-coverage problems of unity. I created a release and start a new iteration. At the end of the next one, i'm trying to have a playable game again. The main topic of the next iteration are that, cleanups and starting with person skills.
I finished the modeling and importing of the new satelite to Unity. It took a bit longer, due to its actually 11 Buildings, creating textures mapping everything right and rendering 6 textures each.
Today, i worked on the new satelite. I improved a lot and tried a lot around. I found, that my original design of the walkways is a bit bad, due to a box with carrier is not fitting between the original walking area. This means that all default buildings with resource entrance from below need to deal with that and have a lot of special cases for the person-walking. It would be good to change all buidlings to a higher value, but this would mean, i need to rework all buildings
I started to think how to implement the new needs for the new satelite design and came to the conclusion, that its too complicated. I decided to just rethink the design and came to a brand new structure. The Docking needs a lot of space, due to the ramp to the supply ship. The infrastructure Center also needs 2 layers, so these buildings are outside now. In the middle part, default railways are used to move the boxes. The middle buildings are consistent, so persons can walk as in normal walkways. In the picture the infrastructure part of the satelite is visible, all buildings, that need resources have separate entrances, what makes the normal mechanisms reusable.
I added another model for the constructioncenter, that constructs buildings. I tried a to make the windows look nicer, by adding a small border to it. The Building still looks too simple, i will first try more stuff and techniques with each new building and plan to update all models at the end, so they look all with a similar style.
The new Satellite needs some changes to the Animation system, due to it has different doors and other special things needed for it. I started to improve the editor for it, to have a easier work.
I started to model the new Greenhouse Laboratory, that should create prepare earth. I researched again a bit what plants need and how to create fertilizer, and checked how these cycles are working. It seams there are several circles to deal with. There is a carbon, a nitrogen and a sulfur cycle. Due to this is the first step, i will just keep it simple and focus for now on the carbon. My big cycle will be
brownwater -> BioMass -> PreparedEarth -> RawVegie -> CookedFood
Due to the there is no more shower possibility in the sanitation facility, i migrated it to a toilet only building. I also renamed the sanitation-module of the satellite to toilet module.
I also added the change of the metabolism for different works. After some research i found, that while sleeping, the metabolism of the human body is reduced just by 15%, but for the game, this effect would be not enough to make a big difference. I implemented it and set it up for sleeping to -30% and e.g. for working +20% for now. With the resource containers, that feature was now very easy to add
While working with the need and testing it, it was a bit confusing, that the bodywaste need is shown with lowIsGood (so resource is good), so i changed it, so it looks the same in the need-icon as the others. In the details, the resource is still shown as a resource.
I started to make energy to a ship-resource. Till now, energy was produced as normal resource-boxes moving around in the ship. Due to that is not realistic, due to i added ship-resource-containers for O2 and CO2, i could add an energy container too. The ship acts now as a small battery. I fixed some issues with reaching the bounds and using multiple ship resources at once and it seems working fine now. I added the energy-bar to the ui and efficiency calculations to the popup. E.g. the energyproduction is just enough to serve 50% efficiency of a building.
I also added better units to the resources, so energy is now calculated in kW and kWh.
In the morning, i optimized the Customer provideServices. Before the resource based needs it was very complicated and it needed to reschedule and update a lot of times, to prevent circles and wrong calculations. Now its way easier and i could refactor the code, so its just added or removed without updating the work itself.
Its now also possible, that the efficiency of a service providing building gets below 100%, before this was also very complicated to do and skipped due to that.
In the editorMode, the performance of my testscene was down to 10h/s, now its back to 4d/s, so it gained a lot of performance
I fixed some bugs and decided to do a release, due to it was already a lot for this iteration. Its not tested and still a lot of things like new models and game-data setups are open, but it will take a longer time to do all of that stuff.
After updating to the new Unity version and updating all dependency packages, i started to add the person-resource-changes to the UI. To make that easy and have a more consistent storage layout, i changed the working-storages, to be always horizontal layout. This should make it more clear, what is produced and what is consumed. The customers are now "resource-container-slots" of the building. So they have the same states as the resourceBoxes: NotAssigned, InTransit and arrived. The code is also refactored a lot, so its now way easier and clear.
I readded the last features of the new person needs, prioritize activities with lower needs first. Now all tests are green again I polished the UI a bit: changed all change-amounts to kg instead of boxes, to have better understanding whats happening.
I also did a simple kitchen-model. For now, its very very simple, i didn't spend time on polishing, due to i want to get this iteration done. The idea is, that it has a storage in the back of the building and its spitted into some areas.
Due to the canteen was split up. The canteen will stay the same, the old kitchen can be just a small storage room for now.
I started to migrate the ProvideService work that increased the needs for the persons. Its now way more simple using the resources. It was a long way, due to i rewrite the complete logic of how persons do their stuff.
I also updated the UI for the Persons, so overing over the needs shows the resource-container. I' thinking to make the needs again "positive" driven instead of resource driven in the UI. At the moment, the BrownWater has "lowIsGood" option, so without using the toilet, brownWater is produced, so its a "+" in the ui.
I reduced the complexity of my metabolism plan and calculated a bit around. The found human body have 2 main metabolism parts. First is to gain energy in the cells, using O² and Shugger (C6H12O6) and burning it to H²O and CO². The second part is some complex internal creations ends up in poop (What can be defined as BrownWater in the simulation with complex moleculs mostly contained out of C, H and O. So to make it easier it can be defined as (H²O + C6 + H12 + O6). After sum up these 2 functions, i end up in:
6O² + 2C6H12O6 => (6H²O + C6H12O6) +6*CO²
So the ships oxygen + Nutrition (got from food) ends up in ships CO² and brown-water. Afterwards, i added H²O usage to make it a bit more relaistic.
It was a bit anoying to calculate always the resourceBoxes, so i decided to improve that part, before i continue. I added a boxSize to the Resources, so its striped down to the basic atoms in the subResource setup. I also changed the Works, so now its very clear visible, whats happening, without back and forward calculations.
I also split up the constructionCenter, Greenhouse and Canteen into 2 buildings, to separate the works. First i just copied the models, to try the refactoring, later this iteration, i start to create new models.
After all buildings now just have 1 work, i needed to update a lot of tests, that used the satellite, construction buildings or others. Than i started refactoring the work from an array element to a normal component.
After i started to migrate the ProvideService work (that is way more difficult), i needed to add a work to the person, to see what he is working. I taught about, if the concept with multiple works is really needed and i think it just costs performance and complexity.. The main building that needed that is the starting satellite. Others like Canteen (cooking/eating) or Greenhouse (prepareEarth and growing) can be easy spitted, due to its already 2 parts in the model itself.
So it seems, the only special case, costing that complexity is the start satellite. I guess its possible to split it up in different "modules" and maybe add just some special cases for them instead. Maybe i need to increase the size a bit, to have a bit space left and right next to the satellite space for the modules. It can be also nice, to recycle the satellite module by module, instead of once completely for the game play.
I improved the works for the buildings. Before, there was just 1 workingType (e.g. Filter, construction, resourcesconversion) possible. I changed that, to make it possible to split the Provide Service work from the satellite to different works, as a preparation for the resource based needs of persons.
I finished the work on the ship resources. The Buildings now adjust to the needed level, if the resource container limits reached (empty/full). They adjust the efficiency to meet the needed production/consumption to balance it.
I taught about increasing the amount of possible oxygen in the air, depending on the finished buildings. I researched a bit and found that O² weights ~1.3kg/m³ at normal pressure and temperature. Due to the air has 20% O² i came to 0.25kg/m³. I planned this feature to increase that in further iterations, and set a current level of 100kg for now (1 box).
I started to implement the feature, that the resources are not destroyed. Due to that, the ship has now a O2 and CO2 resourcecontainer. The AirFilter will now just move the O2/CO2 from boxes to the ships resoruce container and vise versa. Maybe i can split it into 2 buildings now, an O2 adding one and a separate CO2 filter later.
Next step is to add this containers also to persons and add internal body functions converting o2 and c to co2. the c will come from food, that is being migrated after that.
I changed the weight of the resources, so its calculated out of the subresources. This makes it not easy to see in the editor, whats the weight. So i tried a bit around with the CustomInspectors of Unity and found a good way to add some details to it, without needing to implement it completely by myself. I added a header to the ResourcePrototype with the details. There i could also add more infos, hints and errors, to prevent getting that problems just at the automated test.
I also created that for the work-setup and splitted these into separete components, instead of one big one with an array. I added the icon and the analytics table for it to see and edit it faster.
For an easy setup i decided to do a simple parser for equations defining what to do and where to convert the stuff to. The parser with some tests are already done so far, including a lot of checks to prevent configuration misstakes, such as not 100% on both sides or missing Atomic mappings. Each line in the parser will be one atomic-value, and all resources that contains that, needs to be in. Its also possible to set the target, such as box person or ship to each resource.
The next step will be a setup for tests and the calculations outsourced from the simulation, to create tests for that. I also added the Atomic Resources and setup the old ResourceType setup.
After thinking about the algorithm how to calculate the conversion, i figured out some problems with deadlocks and other calculations. Especially to fill up some main resources equaly (e.g. for brown water) made a problem. So i worked a bit more on the concept and try to make the subresources all fixed. In the new concept, they are just used for verifying the speed, and i can leave most of the conversion-algorithms as they are and get the main advantage of the new concept. I still try to make the ship and the person to special containers for resources, so the resources will stay there, instead of being destroyed and created. This is still a big task by its own
While creating an analytics tool for the weight, i found out, that some buildings create heavy mass out of nothing. This balancing looks already now very complicated and takes a long time, what brings me to the target to automate this better.
Maybe its good to break the resources into sub-resources, so e.g. H2O contains a bucket of H and O. When converting the resource, this can be used to calculate the others, so there is nothing created or destroyed, and the mass will stay the automaticly balanced.
This would also need, that the persons would have these resources. E.g. the person has H2O while drinking inside and adds C out of the food and make dirty water out of it, containing these. In the sanitation facility, this is combined to the brown water output. Many needs including the weight of the person could be calculated out of these resources, so also the person would not effect something.
For further needs, the person may carry their "phone" or other service devices, so this is also not destroyed. At the end, i will create a "garbage" resource, containing the stuff.
The basic idea was already in a preview concept a long time ago, but it looked too overkill and complicated, but maybe it worth it to make balancing easy and everything more realistic?
I think for the player it could be the same complexity, if he is not watching the insides. When we want to optimize something, it can help to see that. So its for beginners not a problem, and for advanced player a nice addon.
This will be a huge change in the resources and their management, but brings nice features, such as a full bucket of brown water can contain alot of garbage or just a bit (e.g. shower or toilet).
With that it could be simple to implement the lifetime of the resources, e.g. food should go bad after 1 month, by directly converting it to "garbage". All buildings needs to have garbage as an output-storage (or being a generalStorage) This "garbage" could contain than the original contained resources. These could be recyclable with a new building to basic resources.
As more i worked on the idea, as better it sounds to me. Its creating interesting effects and possibilities and also reducing complexity of balancing the resources with needs and so on. I created a multi-layer concept, where lvl 1 is atomic and simple, such as H,O,C. The next level are the current ResourceBoxes, but now contains multiple lvl 1 atom-buckets, that can be filled. The lvl3 is the person and the ship. They contains resource-boxes for example persons for cookedFood and H2O or the Ship as O2 and CO2. These boxes can have an "amount", so persons can just have e.g. 0.05boxes (50kg) of regular water, cause they cannot drink 1ton of water.
The spinningengines are now accelerating depending on the mass of the ship, so its good for the player to build an efficient mass balance, to not need too big filled mass balancers.
I tried to migrate to gitlab, bit its a very huge application, that needs minimum 530 Threads on the Server. My one is limited to 1100 threads so just gitlab and the basic other services already reaching the max So at least i replaced confluence, setup portainer for container management and learned a lot about docker
I also tried a lot around with docker, docker swarm, reverse proxies, cloud configuration and so on. I think, i got a deeper understanding of that while configuring my home-network with it. I also improved the scifanstudios server to deal with that. A bit sad, that it seems, that stratos V-Server are not supporting the Docker-Swarm, due to some network setup restrictions when trying to start something.
Due to Atlassian started to get crazy and force people using their cloud, i decided to migrate to other tools. I will tryout gitlab and wiki.js for now. Also for the planned generated wiki it seems very good, due to the git support.