1. City Game Studio
  2. News

City Game Studio News

Optimization From 2300ms to 44ms!

Hey folks!

Another excellent week just wrapped up!
I worked hard, but not on saves. As the v1.26.0 release date approaches, I took the time to do a pass on bug reports. And I'll tell you all about it right now

[h3]This Week's Recap[/h3]
To sum up, there weren't that many bug reports, barely 5 over the last 30 days. But each of these bugs was valid and needed my attention.

First, the in-game gauges. I'm not talking about gauges for making a game, but gauges for adjusting sound, microtransaction prices... Well, I made fixes so they work better and respond better. But I introduced a few bugs, which are now fixed.

There's a fairly complex bug that was affecting the studio director, and it's fixed. Actually, if you were developing a game manually but the studio director was handling the port, then the game would have a bug. The price wouldn't have been set correctly. But as I mentioned, it's fixed.

Another small change, but one that'll please you I'm sure, concerns changes in the number of fans. Before, this number stayed at 0, and now it changes correctly and it's nice to watch I think.

I made a few more fixes on missing fonts or even a crash (fairly rare) when launching a game while keeping hints from previous games. But I'd rather talk to you about optimization.

V1.26 is dedicated to saves, but I spent a non-negligible amount of time doing optimization. In a previous RC I was optimizing game launch, and now I took the time to optimize the game itself.

Actually, more and more of you have large companies. With many employees, so I took the time to optimize this part. Previously, when you had over 1000 employees, you could notice regular slowdowns. This was due to a single function that handled balancing your employees' happiness.

So I worked on that and reviewed a few small things. First, the way the function is called. Instead of being called in the middle of other functions, it'll have its own dedicated cycle. Which will allow the game engine to do other things in the meantime. On top of that, I did caching, simple calculations that saved a few milliseconds. But the biggest thing was changing data access, which previously meant this function could take 2300 milliseconds to execute. And that's noticeable. Your game literally freezes for a few seconds. But with all the changes I made, we go from 2300 milliseconds to 44 milliseconds. Let's just say you're going to notice the difference!

Otherwise there's another small change concerning the employee panel - from now on, you'll see the number of employees and available offices directly in the studio names.

[h3]What's Coming[/h3]
Given that I haven't worked on saves at all, I plan to tackle it. It's high time you could at least load your games even if you're already in-game. I know that just that alone is going to require quite a bit of work. Because the game isn't designed for that. So I don't know yet how I'm going to approach it, but I'm going to have to rip out and rewrite quite a bit of code!

Well well, it was a long post for not much in the end, mostly fixes and optimization, but at least you know what I did this week!

See you next week, in the meantime take care of yourselves
Xavier aka Binogure

Patch v1.26.0-rc5

[p][/p]
[p]Default version of the game, we want to make sure to have a chance to discover bugs and adjust the balancing, to give you the best game experience possible.

Access the Unstable branch on Steam by right clicking City Game Studio in your Steam library, and then select ‘Properties’. In the new window, select ‘Betas’. The Unstable branch should now be available for you to choose from.

Please leave any feedback you may have in the appropriate channel in our Discord, or in the subforum on Steam.

As always, remember to be considerate towards players not partaking in the Unstable, in case they want to avoid spoilers.

Please make sure to make backups of your save files before playing.[/p]

[h2]Changelog - rc5[/h2]
[h3]Bugfixes[/h3]
  • Fixed mouse wheel not working for microtransaction price adjustment
  • Fixed an issue with the double slider (studio renting)
  • Fixed an issue where some save games wouldn't account for game pricing correctly (studio director related)
  • Fixed the studio director porting games that haven't been released yet
  • Fixed the fanbase change label always displaying 0 (incorrect value)
  • Fixed a rare crash on startup when loading save games with persistent hints
  • Added missing font size definition (Godot 2.1 requires individual font size management)

[h3]Optimization[/h3]
  • Optimized the 'compute_employee_happiness' function from ~2300ms to ~66ms with over 1000 employees (35x faster). This function runs every 3 seconds to update staff happiness.

[h3]Staff Panel[/h3]
  • Added studio size information to studio names

[h2]Previously[/h2]
[h3]Rendering[/h3]
  • Use higher resolution for platform sprites (1024px instead of 512px)

[h3]Platforms[/h3]
  • Add the Steam Frame
  • Balance the Nintendo Switch units sold
  • Balance the PlayStation 5
  • Balance the Xbox Series X
  • Adjust the end of life of the first Steam Machine

[h3]Updates & DLC[/h3]
  • Redesigned the game update interface
  • Redesigned the game DLC interface

[h3]Interface[/h3]
  • Added the GOTY award to the "Misc" filter in the shop menu
  • Added a way to access the devkit panel from the bottom menu
  • The email panel now uses more colors to help you manage messages
  • When unlocking a new game engine component, added a button to navigate directly to the game engine update panel
  • Added a grid overlay when furnishing studios

[h3]Custom-platforms[/h3]
  • Add a copy-protection parameter to avoid the 1983 market crash

[h3]Quality of Life[/h3]
  • The game now remembers the sorting filter when opening the game genre panel
  • The game now remembers the sorting filter when opening the platform panel

[h3]Optimization[/h3]
  • Reworked the tips thread to stop once completed
  • Optimized startup time (39% faster on high-end computers, 55% faster on low-end computers)
  • Replaced the `call` function with direct function calls (250% performance improvement)
  • Optimized label refresh to only update visible labels
  • Optimized the bouncing animation (switched from animation node to process)

[h3]Clean-up[/h3]
  • Removed 108 unused textures
  • Closed all open I/O operations

[h3]Modding[/h3]
  • Add a new parameter when creating a new difficulty (copy_protection_costs)
  • Add a new parameter when adding a new platform (copy_protection)
  • Add a new parameter when adding a new platform (backward_compatibility)
  • Add a new parameter when editing an existing platform (backward_compatibility)

[h3]Staff Panel[/h3]
  • Added a new filter to display employees not assigned to any studio

[h3]Balancing[/h3]
  • Added a new threshold for additional cost reduction on custom platform manufacturing

[h3]Save Game[/h3]
  • Redesigned the save game panel
  • Added ability to name save games when duplicating
  • Added ability to name save games when creating new slots
  • The game now warns and asks for confirmation when overwriting existing saves

[h3]Misc[/h3]
  • Add support for 3440 x 1440 resolution
  • Removed a yield while loading scenes (fixed memory leak and other issues)
  • Configuration files are now only written when changes are detected

[h3]Bugfixes[/h3]
  • Fixed fullscreen mode (Windows only)
  • Digital store: Fixed an issue where updating the assigned studio for a digital store feature wouldn't update the in-development panel
  • Fixed a rare crash when closing in-game messages
  • Fixed achievement unlocking incorrectly when releasing games on competitor-made consoles instead of own consoles
  • Fixed the progress bar for manufacturing cost reduction on released custom platforms not progressing correctly
  • Fixed an issue preventing GOTY awards from being placed
  • Added migration to update the count of GOTY awards won
  • Fixed mouse wheel scrolling the page when adjusting sliders
  • Fixed slider mouse input positioning issues preventing accurate adjustment
  • Fix a crash when updating a "green" game

Duplicate and Rename Your Saves

Hey everyone!

I hope you're doing well! As for me, I've been working hard and I think v1.26 already has tons of new ultra-quality changes!

[h3]This Week's Recap[/h3]
That's it, I did it. City Game Studio now has a save system that rivals AAA games. You can duplicate saves, but also rename them. And that's honestly awesome. It's what I'd been planning to do for quite a while, and now it's done.

Cherry on top, I took the opportunity to move a thread and clean up the code. Result: the game is only more stable on long sessions. On top of that, there's an improvement to the load game panel. Since you can rename your saves, I thought it was important to display it, so I took the opportunity to make a few changes. It's subtle, but it makes a visual difference I think.

I also optimized file writing a bit so the game no longer constantly writes to a config file when there's no need to. Your hard drives are going to be happy!

On top of that, there's a last-minute fix that concerned game publishing. Indeed, when you hire another competing studio to make your games and you want to update those games, it would crash City Game Studio. Thanks to Boerkovic for reporting this problem to me. It's now fixed!

[h3]What's Next[/h3]
I plan to continue working on saves, but not really saves - more like loading games. Actually, I'd like to offer you the ability to load a game while you're already playing.

Now you're going to tell me you can already do that by going back to the main menu. Which is true, but it's not super convenient. Being able to load a game while you're already in-game would be ideal. I'm going to do everything I can to make it available next week, but it's going to require quite a few adjustments.

Rest assured, I still plan to add options for the banker, but that'll come once the saves are finished!

Well, thanks for being more numerous each day to buy and play City Game Studio, see you next week for more!

In the meantime, take care of yourselves
Xavier aka Binogure

Patch v1.26.0-rc4

[p][/p]
[p]Default version of the game, we want to make sure to have a chance to discover bugs and adjust the balancing, to give you the best game experience possible.

Access the Unstable branch on Steam by right clicking City Game Studio in your Steam library, and then select ‘Properties’. In the new window, select ‘Betas’. The Unstable branch should now be available for you to choose from.

Please leave any feedback you may have in the appropriate channel in our Discord, or in the subforum on Steam.

As always, remember to be considerate towards players not partaking in the Unstable, in case they want to avoid spoilers.

Please make sure to make backups of your save files before playing.[/p]

[h2]Changelog - rc4[/h2]
[h3]Misc[/h3]
  • Removed a yield while loading scenes (fixed memory leak and other issues)
  • Configuration files are now only written when changes are detected

[h3]Save Game[/h3]
  • Redesigned the save game panel
  • Added ability to name save games when duplicating
  • Added ability to name save games when creating new slots
  • The game now warns and asks for confirmation when overwriting existing saves

[h3]Bugfixes[/h3]
  • Fix a crash when updating a "green" game

[h2]Previously[/h2]
[h3]Rendering[/h3]
  • Use higher resolution for platform sprites (1024px instead of 512px)

[h3]Platforms[/h3]
  • Add the Steam Frame
  • Balance the Nintendo Switch units sold
  • Balance the PlayStation 5
  • Balance the Xbox Series X
  • Adjust the end of life of the first Steam Machine

[h3]Updates & DLC[/h3]
  • Redesigned the game update interface
  • Redesigned the game DLC interface

[h3]Interface[/h3]
  • Added the GOTY award to the "Misc" filter in the shop menu
  • Added a way to access the devkit panel from the bottom menu
  • The email panel now uses more colors to help you manage messages
  • When unlocking a new game engine component, added a button to navigate directly to the game engine update panel
  • Added a grid overlay when furnishing studios

[h3]Custom-platforms[/h3]
  • Add a copy-protection parameter to avoid the 1983 market crash

[h3]Quality of Life[/h3]
  • The game now remembers the sorting filter when opening the game genre panel
  • The game now remembers the sorting filter when opening the platform panel

[h3]Optimization[/h3]
  • Reworked the tips thread to stop once completed
  • Optimized startup time (39% faster on high-end computers, 55% faster on low-end computers)
  • Replaced the `call` function with direct function calls (250% performance improvement)
  • Optimized label refresh to only update visible labels
  • Optimized the bouncing animation (switched from animation node to process)

[h3]Clean-up[/h3]
  • Removed 108 unused textures
  • Closed all open I/O operations

[h3]Modding[/h3]
  • Add a new parameter when creating a new difficulty (copy_protection_costs)
  • Add a new parameter when adding a new platform (copy_protection)
  • Add a new parameter when adding a new platform (backward_compatibility)
  • Add a new parameter when editing an existing platform (backward_compatibility)

[h3]Staff Panel[/h3]
  • Added a new filter to display employees not assigned to any studio

[h3]Balancing[/h3]
  • Added a new threshold for additional cost reduction on custom platform manufacturing

[h3]Misc[/h3]
  • Add support for 3440 x 1440 resolution

[h3]Bugfixes[/h3]
  • Fixed fullscreen mode (Windows only)
  • Digital store: Fixed an issue where updating the assigned studio for a digital store feature wouldn't update the in-development panel
  • Fixed a rare crash when closing in-game messages
  • Fixed achievement unlocking incorrectly when releasing games on competitor-made consoles instead of own consoles
  • Fixed the progress bar for manufacturing cost reduction on released custom platforms not progressing correctly
  • Fixed an issue preventing GOTY awards from being placed
  • Added migration to update the count of GOTY awards won
  • Fixed mouse wheel scrolling the page when adjusting sliders
  • Fixed slider mouse input positioning issues preventing accurate adjustment

Revamped DLC Interface and Placement Grid

Hey everyone!

Thanks for being so many to still read me, it really makes me happy! And this week I kept my promises and even a little bit more!
Let me tell you all about it!

[h3]This Week's Recap[/h3]
Last week I promised to work on in-game notifications. And that's what I did. Now when you get info that a new component for your game engine is available, you can click directly in the notification to open the game engine panel! It's a detail, but it makes notifications a bit more dynamic, and that's beautiful.

It's been a while since I had to do it, so I spent a full day reworking the update and DLC interfaces. I like the result, I think it's more consistent with the rest of the game. You now see the three stages of game development, which makes everything much more readable.

I also got feedback from games with over 1000 employees. And if you didn't know, City Game Studio supports up to 1000 employees - beyond that, it's going to start lagging. But since I felt like it, and it makes you happy, I spent a few hours looking at what I could optimize so the game runs better when you have over 1000 employees. And the improvements are visible. In debug mode, which is slower than release mode, the game barely manages to reach 30 fps with 1500 employees, where before it had barely 7 fps. The gain is interesting, and these numbers should be taken with a grain of salt since I didn't test with the production version, but with a debug version, which is much slower. So I think you should be able to play with a bit over 1000 employees without too much lag with this version.

Oh, one last change that should make you happy. I added a grid when you place furniture in your studios. I tested it, and it's true that having a simple grid makes it easier to place furniture. It's crazy how a small change can bring so much comfort!

[h3]What's Coming[/h3]
I'm going to have to tackle it, and I think the coming week will allow me to start working on saves. I'm not talking about optimization, but about how saves work.

The idea is to have an auto-save that will allow you to create autosave files, which will be offered when you load your game. So, rather than having an auto-save that overwrites your save, you'll have an auto-save that creates a new save.

I still have work to do, because after the save system I'll have to work on the banker to enrich his proposals. I'll talk to you about it when the time comes.

Well, I'm already done, I'm really happy to be able to continue working on City Game Studio, already 9 years I've been working on this project, and I still have some great updates to offer you!

Thank you for reading me.
See you next week, in the meantime take care of yourselves
Xavier aka Binogure