After more than two months of developing, prototyping, integrating and debugging, the new building system is officially part of Software Inc.
Free form building in action
Building rooms in Software Inc. used by confined to a 1x1 meter grid, and all rooms had to be rectangular. Instead, you now place walls individually to build rooms. The grid is still in, but mostly for your convenience, as you can now move, scale and rotate the grid.
You can use the dynamic grid to align furniture to angled walls
Walls used to be made up of 1 meter wide segments, which the game would merge into a room, and as such, all doors and windows were forced to fit into these 1 meter segments. In the new system, walls can have pretty much any length, so segments can be any width and be placed anywhere on the wall, which allowed me to add double doors. To really take advantage of this new system, I added a window you can drag along a wall to make it any width you want.
Windows can have dynamic widths
Another benefit of the new system is the ease with which you can merge and split rooms. Splitting rooms was a hated mechanic in the old building system, but now you pretty much just draw a wall through a room and that’s it.
This is properly the fourth major feature I’ve added to the game, which wasn’t planned, but was requested by a lot of people and I suddenly had an idea of how to make. The traffic system is another one of those features. I’ll probably start dialling down on these large feature creeps and start actually finishing the game. I have a lot of important features I want to add, like multiple teams per work item, custom price for products, better and more market statistics, and improved heating/cooling mechanic.
Since this new feature took a lot of effort and time and is basically out of scope of the game, I’m increasing the final price of the game by 2 dollars, starting from when this building mechanic is officially released.
How computational geometry work looks
Replacing a core system in any application is a big undertaking, so I split it up into steps. The first step was proving that the algorithms I had in my head actually work. So I made a small application to test it out and ended up filling out 20 pages of geometric scribbles.
Small application to test out the new system
I took a course in computational geometry as part of my BSc in computer science. I never finished the course, though. I managed to learn that when working with geometry, it’s a good idea to make sure everything is stored in the same order. The basic principle of the new build system is that all the corners of a room are saved in counter clockwise order, this enables me to make some assumptions when writing my algorithms, e.g. knowing which room is on which side of a wall.
After working out most kinks I made a prototype in Unity, to make sure my system works in 3D as well, or put another way: to see if I could figure out how to make it work in 3D. Oddly enough, the hardest part was making sure the black part between the walls behaves properly.
Finally, I had to integrate it into Software Inc. and make sure I hadn’t introduced a host of new bugs. Looking for bugs basically took 75% of the time, so many edge cases!
I hope you'll enjoy the new system. The old rectangle room tool is still available, in any case.