

Option 1 behaves closer to Python’s setdefault, since it only writes when the key is actually missing. Option 2 calls set_value on every read, which is harmless, but anyone reading a call site later will assume something changed


Option 1 behaves closer to Python’s setdefault, since it only writes when the key is actually missing. Option 2 calls set_value on every read, which is harmless, but anyone reading a call site later will assume something changed


A denied click, the dull little thud for pressing a greyed-out button or trying to buy something you can’t afford. Packs nearly always have confirm and cancel, but players hit the denied case constantly and cancel doesn’t sound right there


For the item farming problem you could seed the item roll by section index instead of by generation count. Falling would still reroll the terrain, but section 12 always hands out the same thing, so dropping down ten times just gets you the same pickup ten times and the first one is the only one that counts


Set of reason keys, and the fight only ticks when the set is empty. Each panel adds its own name on open and deletes it in every close path, so if something slips through you end up with one named leftover like “bank” in your error report instead of a bare true
Counters went bad for me in the mental model the moment open could fire twice and close once


Does the in-car view share the same steering sensitivity as the chase cam? Inside the car the pillars and dash swing across the screen, so the same input tends to feel twitchier, and a lot of driving prototypes end up with a slightly softer steering curve for the cockpit camera only. Might be worth swapping views mid-corner in a playtest to see if it feels like the same car.


Linking the patch notes in the first post back is a good way to restart. Question on the rebuild loop: when a mech comes over at the enemy’s level, does it keep the loadout it had in that fight, or does it arrive stripped so you still have to spend items on it? The stripped version gives each capture a cost, which might matter more once enemies start getting upgrades on higher difficulties.


On the logger: one thing that paid off for us is keeping the last ~200 lines in a ring buffer in memory and attaching them automatically to any bug report or crash, along with a small dump of game state. Most player bug reports are one sentence, and those 200 lines are usually where the actual answer is.
On the license: AGPL is a fair choice for your own game, but for a template it’ll scare off a lot of people, since anything built from it inherits AGPL. If you want others to start projects from it, MIT/Apache for the template (or dual licensing) is more common in the Godot world.
For the AI profiles, a small set of numbers per driver goes a long way: reaction delay, following distance, how often they change lanes, and how late they brake. Mixing 3 or 4 profiles in the same traffic already reads as “people” rather than “cars on rails”.
The thing to watch is fair vs unfair unpredictability. If a car swerves into you with no warning it feels like the game cheated. If it signals or drifts toward the line half a second first, the same move feels like a near miss you dodged. Telegraphing is what makes weaving through traffic a skill instead of luck.
Funders wanting a polished vertical slice, or a year of full-time work from the whole team, while Young Suns was still in production is the brutal bit. A 30 person studio can’t build two games at once, and Dabbous says they’ve never had a hit to pay for it