this post was submitted on 06 Aug 2023
13 points (100.0% liked)

GameDev

638 readers
1 users here now

A community about game development.

Rules:

More rules might follow if they become necessary; general rule is don't be a pain in the butt. Have fun! ♥

GameDev Telegram chat.

founded 2 years ago
MODERATORS
 

I have this idea for a certain game development tool, but before I start another side project I want to check if something similar already exists.

An important part of game development is fine-tuning numeric values. You have some numbers that govern things like character motion, weapon impact, enemy AI, or any other game mechanic. For most of these there is no "correct" value that can be calculated (or even verified!) with some algorithm - you have to manually try different values and converge to something that "feels right".

The most naive way to fine-tune these numbers is to have them as hard-coded values, tweak them in code, and re-run the game every time you change them. This, of course, is a tedious process - especially if you have to go through long build times, game loading, and/or gameplay to reach a state where you can test these values (that last hurdle can often be skipped by programming in a special entry point, but that too can get tedious)

A better way would be to write these numbers in configuration file(s) which the game can hot-reload - at least while in development mode. That way you can just edit the file and save it, and the game will reload the new values. This is a huge improvement because it skips the building/loading/preparing which can drastically shorten the cycles - but it's still not perfect because you have to constantly switch between the game and the configuration file.

Sometimes you can use the game engine editor to tweak these while the game is running, or create your own UI. This makes the context switches hurt less, and also lets you use sliders instead of editing textual numbers, but it's still not perfect - you still have to switch back and forth between the game controls and the tweaking interface.

Which brings us to my idea.

What I envision is a local fine-tuning server. The server will either update configuration files which the game will hot-reload, or the game could connect to it via WebSocket (or some other IPC. But I like WebSocket) so that the server could push the new values to it as they get updated.

After the server deduces the structure of the configuration (or read it from a schema - but providing a schema may usually be a overkill) you could use its webapp UI to configure how the values would be tweaked. We usually want sliders, so you'll need to provide a range - even if the exact value is hard to determine, it's usually fairly easy to come up with a rough range that the value must be in (how high can a human jump? More than 5cm, less than 5m). You will also decide for each slider if it's linear or logarithmic.

The server, of course, will save all that configuration so that you won't have t reconfigure it the next time you want to tweak values (unless there are new values, in which case you'll only have to configure the sliders for them)

Since this would be a server, the tweaking of the values could be done from another device - preferably something with a touchscreen, like a smartphone or a tablet, because tweaking many sliders is easier with a touchscreen. So you have the game running on your PC/console, gamepad in hand (or keyboard+mouse, if that's your thing), and as you play you tweak the sliders on the touchscreen until you get them just right.

Does anyone know if a similar tool already exists?

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 3 points 1 year ago* (last edited 1 year ago) (1 children)

This might be overkill, but would something like etcd or zookeeper work?

After all, config is config right.

You could use any ui designed to work with them to edit.

[–] AeonFelis 1 points 1 year ago

I've looked a bit into these two tools, and they seem to be configuration-oriented databases. The UIs available for them look like general purpose row-editing UIs - so if I want sliders (which require extra configuration per field) I'll have to implement them myself. And while they do provide libraries for easy integration with various programming languages - I'll still have to write that integration.

At this point, I'll be writing an app.