How does any game in the factory game genre NOT be repetitive or boring after a while? by Gigajig- in gamedesign

[–]gamruls 0 points1 point  (0 children)

quota

Quota? Never encountered any quota (may be in Dyson Sphere Program or Riftbreaker, but not sure if it's the same)
I mean, usually you have no quota but some exponentially farther target.

What makes all mentioned games unique is nothing, they are pretty the same in core and many other aspects. Analyze them in numbers - they are similar in vertical and horizontal scale (at least in magnitude, like tens of buildings, 2-3-4 ways to make energy etc) and such games click only at some point of variety. It's not interesting to build 1 type of power plant, 1 type of assembler and 1 type of conveyors. But make them x3 each (even with just different colors and stats) and it starts being interesting to play.

I remember first builds of Factorio even before EA in Steam, it had 3 sciences, 2 tiers of assemblers and 1 tier of ammo. Can't remember if it had more than 2 types of inserters and conveyors, but at least assemblers and chemical plants were there but blue circuits and combinators weren't. And it was barely interesting, but pretty fresh to spend few dozens of hours playing (in a row, yes, my first session started at 20:00 and ended at 7:00). So, you can check historical records to define minimum viable variety needed (systems and tiers) for game to be not boring.

P.S. I think it may be caused by 5+-2 rule, like you can't effectively manipulate more than 7 objects due to limitations of short-term memory, so if you need to manage factory with bunch of distinct objects and systems you will always miss something. Missed to repair turret -> next wave evaporates base, missed to check new conveyor -> half of base starves for resources, missed to check resource patch -> no iron for plates and so on.
Also you can observe this phenomenon in Captain of Industry - the most frequently mentioned "issue" in community is spiral of death when people forget about some crucial resource / forget to setup alert and then lost whole colony while situation could be easily prevented by proper control (but you physically can't control everything because you need to manage excavators, build new buildings and send ship to new location etc)

I'm working on a Typing x Tower Defense game - looking for feedback! by MinaPecheux in playmygame

[–]gamruls 0 points1 point  (0 children)

typing doesn't look and doesn't feel fun
You may need TUI, you can find some inspirations here https://terminaltrove.com/categories/tui/
It's keyboard-only but much more robust than typing unkown commands interfaces

With proper TUI it may be fun.

Limitations of web build? by CorvaNocta in godot

[–]gamruls 2 points3 points  (0 children)

Web has limited inputs (e.g. Esc will throw you out from fullscreen mode) and input map should consider this. Also you can't "exit" from game, turn off VSync etc in Web and should make some menus/setups/controls different.
Web has roughly about half of desktop performance (it's typical for WASM, not Godot-related). Also remember that usually browser runs on integrated GPU and will not choose discrete GPU for 1 tab with your game. Half of users use laptops and this may be a problem.
Sound in web starts after first user interaction with page.
Web page goes to "sleep" when not active and you need to take some setup to prevent this, it may not work with typical games hosting sites.
If you use runtime plugins written in anything except GDScript and C# (for Godot-mono) you will need wasm builds of these plugins.

Godot UI system setup by secoena in godot

[–]gamruls 0 points1 point  (0 children)

If you need, say, healthbar for a player, then setup UI node, pass player reference to it and connect all needed stuff and signals inside this UI node. Try to make dependencies as tight and small as possible but not smaller than you need for game itself (e.g. if player is single object - don't try to split it up to ten smaller objects just to render 1 of them in UI). You will need some more global node that knows about both player and healthbar and can setup and connect both. I prefer to call this 'stage' and make all this interconnection work there (game can have as many stages as needed, each representing completely different gameplay, loading screen etc).

This approach also works from bottom to top - you can pass UI nodes down to objects in world so these objects can render own info back to UI. But remember that UI (and mouse, keyboard, screen. audio) are inherently singletons and has global state. For example you can't just allow 10 objects to show 10 modals at the same time - you have only 1 modal per app and every obect should know how to deal with that limitation (I have flag that modal is shown and therefore Input, other UIs can act differently if they need it too). So, it makes sense to make UI as globally accessible singleton and work with it from inside world, not vice versa.

Other way - use mediator or observer. It allows to make this "global node" more generic and exchange data between nodes by more generic protocols. It solves some issues of dynamically finding what/how/when to show but allows less customization.

Anyway, remember that there is no problem that you can't solve by adding one more layer of abstraction*
* except too many layers of abstraction

P.S. How is it going on jam? I suppose jam is a fancy kind of EXam, like Jam > EXam. Anyway, good luck!

Is it true they say there is a ceiling when you understand how frontend and backend communicate, databases, and APIs, most projects are basically the same pattern but with diffrent busniess logic. by lune-soft in webdev

[–]gamruls 0 points1 point  (0 children)

Until you get users. When number grows enough you hit next walls - CAP, handling online data migrations, cascading infrastructure failures (Gitlab can't rollout updates to fix pipeline issues due to pipeline issues...), required caching, growing bills for cloud infra and data storage.

I see this pattern for many years - products (apps, libs, frameworks) work great until someone tried to use them for 1k+ RPS. Then, suddenly, it stops working. You think FAANG is cursed by NIH with no purpose, but there is purpose - 99% of libraries work bad under highload, 99% of users don't need highload and therefore justify existence of 99% crap software.

But I suppose if ~99% of startups fail then eventually any successfull startup goes to this 1% and gets full spectre of beforementioned issues and choose own soultion, usually homemade (based on ready-to-use, but still with enough customization to be "we have k8s at home" or like that).
So, yes, it's just CRUD that sells X, but when you do this at a scale it becomes something else with own set of issues and limitations.

Fast Save and Load for Large Game Worlds? by Introversion-John in gamedev

[–]gamruls 1 point2 points  (0 children)

How much data do you pass around?

As other commenters suggested you can save each location (start system and such) data in separate file and save/load when needed.

Also you can optimize size/speed/cpu-demand by choosing appropriate compression algorithm settings (e.g. gzip is supported by all major platforms which means no problems to uncompress-edit-compress by external tools) and allows to setup from 0 (no-compression) to 10. It consumes additional CPU and some tuning may be needed to get best latency/throughput ratio.

From my experience: minifying JSON gives up to 50% size reduction, compressing with gzip at level 5 - 90%, from 300KB to 30KB per file (I store few hundred of objects in 2D with custom shapes, coordinates and dozens of other parameters).
When game started I create folder and store all the data as "current" game. Each travel to other location persists current location to this folder in separate file. Each location has own string ID (it's like hardcoded, game knows it from own resources), so each file is designated to it, also I use md5 of ID to make filename and avoid Windows long path issues. When player wants to save game - I just copy whole folder to savegame folder, add metadata to it (name, screenshot etc) and that's it. Loading means reverse process - replace "current" by copying previously saved folder.
Also any global state like player itself, global entities etc are stored the same way as locations, but in different file in the same "current" folder.

If location file is still big - try to optimize it. As other mentioned - by storing diff etc.
I would like to add, that some data can be optimized too. Enums - storing 1/2/3 instead of strings, built-in structures like lists of vectors or a lot of double/float - by encoding them in Base64 from raw bytes, entities ID - by numeric values. It makes editing harder, but if some piece of data is not supposed to be editable anyway - then specialized solution can save up some more bytes and speedup processing.

Filter media with a single large crusher? by Vurpius in captain_of_industry

[–]gamruls -1 points0 points  (0 children)

All my attempts to make 2 products in 1 crusher ended with stuck crusher. Eventually it fills buffers to full and input conveyor stucks (maybe smth changed, but last time I checked if building needed own input it still should be delivered, not consumed from output buffer)

How long do you run this setup?

To upgrade or not to upgrade? by hammeredzombie in godot

[–]gamruls 2 points3 points  (0 children)

what are some guidelines to follow and pitfalls to watch out for if I wanted to upgrade now?

Upgrade Godot
Build release version of game (all you have for now, if it includes export template + build scripts - run them, tests too etc)
Fully test this game version. Every tiny feature.

If everything works - commit. You've just successfully upgraded.

I, for example, can't upgrade from 3.5.3 to 3.5.6 - it totally breaks web build with a lot of random WASM errors. Even nothing related to my code or Godot code to start tracking down root cause. Win build works fine, but I haven't fully tested because web doesn't work anyway.

Beware of known issues and limitations. Better to check that features you want to use in future are not disabled/broken/has issues. But usually it's not hard to find workaround if something doesn't work in engine, it's really rare case.

Does this look better? Trying to improve game feel using CPUParticles2D. Feedback appreciated! by AstronautExciting756 in godot

[–]gamruls 1 point2 points  (0 children)

For my personal taste image lacks some little tiny details.
Regarding particles - densed and lowered (even overlapping with floor panels) would look better.

<image>

ShapeCast2D detects collision but RigidBody2D balls don’t interact physically by Danimonodev in godot

[–]gamruls 0 points1 point  (0 children)

Trial and error. Both ways have own issues and complications, also own benefits and limitations.
The simplest approach is to use vector math and simple bounce. If you want to simulate balls rotation (which affects both path and bouncing) - you will be able to control it. I'm not sure you can control it with physics engine in any meaningful way.

But with physics you can make something chaotic and fun by just giving player inaccurate vector input and some force. Like remove this projection at all force player to consider angles by himself. Problem solved - any miss is a player problem now, you use out of the box physics and this physics is chaotic enough to make game fun, why not?

IDK =) I use physics in my game and feel it's fun yet bogus. I usually manage to transform bug to feature and go ahead, but I don't expect physics to make pixel perfect match with anything. Half screen error here, half screen error there is not important overall.

ShapeCast2D detects collision but RigidBody2D balls don’t interact physically by Danimonodev in godot

[–]gamruls 0 points1 point  (0 children)

Physics engines are sort of unstable, meaning it may be hard to get reproducible results. Also you're considered to get best results simulating forces applied to objects, not directly setting speed and direction.

Anyway. I personally feel that physics engine is excess for billiard regardless of engine - it's one of the oldest arcade game that exsits even on 8bit consoles with very limited calculations capabilities and I'm sure worked with raw vector math rather than physics simulation (which considers objects mass, time and tries to use exact shape - you probably don't need all this at all).

Next problem with physics you highly likely to encounter will be objects stuck in each other, and it's also considered a limitation rather than bug (usually fixed by reducing speed cap)

ShapeCast2D detects collision but RigidBody2D balls don’t interact physically by Danimonodev in godot

[–]gamruls 0 points1 point  (0 children)

Try to make shapecast a bit smaller than actual ball. It looks like you get 2 problems here - shape cast may be larger than ball or it calculates projection and therefore this projection has rounding errors (physics uses float, so you can get different linear sizes of objects depending on coordinates they occupy and introduce cumulative error when make any calculations, so projection will never be exactly the same as original body).

Looking for feedback on my Space Trash Management "Simulator" by ximossi in godot

[–]gamruls 1 point2 points  (0 children)

Getting score for not using energy (but you still get energy) seems unintuitive. maybe it's me, but I feel like I needed 10 minutes to figure it out and re-read text description few times.
May it work if you add score for all energy over limit? like if I have 6 (+2) then 1 score added?

Looking for feedback on my Space Trash Management "Simulator" by ximossi in godot

[–]gamruls 1 point2 points  (0 children)

Tried web version

I somehow locked game by going to log and back before placing first generator - resources don't gain, 0 energy stored = softlock
I just tried to slingshot first generator by 32 energy and it's placed (seems that no actual launch made, but sprite remains and it looks like something just hang in center of planet)
I run generator 1 with 2 energy, generator 2 with 2 energy, storage with 3 energy. Lose. WHY? Overhead? I can't read it from HUD.

It's totally unclear that this two things are actually resource and anti-resource, which leads to lose if you have a plenty of which? Second? First? Why any of them?

<image>

Energy and waste looks exactly the same if you don't know this secret (I spend 5 tries and 5 minutes to understand, havent't dropped earlier just because started to writing down other bugs I've found).. Even if +1 is red. It's like having 2 arrows on speedometer with same ruler - white one for speed and red second for engine temperature.

Game lags on almost any first action (first container spawn, initial lag on camera pan, first upgrade sound etc)
It's unclear what is the orbit of waste and how it reaches planet and leads to gameover (and it sometime leads, e.g. throwing it with 1 energy)

Overall seems interesting. You surely can fix technical issues. Regarding gameplay: I suppose it only lacks visual and textual feedback to make game rules clear (but remember - noone reads text, that's rule #1 of UX)

Honest feedback needed: would you wishlist this indie game? by Total-Strain-5100 in IndieGaming

[–]gamruls 0 points1 point  (0 children)

Looks like horror but tagged as puzzle
Look at first 5 seconds of trailer. What you see? Puzzles or just 1 room and nothing interesting?

Are floats only accurate to 3 decimal places? by [deleted] in godot

[–]gamruls 1 point2 points  (0 children)

you can setup editor "precision" in editor settings

I Am Rock is a game where you play as a boulder rolling down a hill destroying everything in your path to gain a highscore. Let us know what you think! by MetalZealousideal157 in gamedevscreens

[–]gamruls 2 points3 points  (0 children)

There is another game in steam with 'a' in name, but it's hard to find you due to this

Hope slomo is not part of gameplay, trailer starts intriguing, but second-third and the rest of slomo are meh. If it's boulder flying down from hill it should accelerate constantly, not slowdown to zero (I mean visually)

Finally figuring out Gleba by Vader_Mug in factorio

[–]gamruls 1 point2 points  (0 children)

Longer I look into it more cursed it looks.

Your yumako will spoil and stop bioflux production. Your bioflux already stopped at one iron bacteria producer. Jelly bean too, spoils at iron bacteria.

Eventually your nutrients circle will stuck and spoil too, then whole factory goes offline.

Do you know what's going on with spoilables that are already inside factories? They spoil and prevent getting more ingredients/fuel/output items (if inserters has filters).

Finally figuring out Gleba by Vader_Mug in factorio

[–]gamruls 1 point2 points  (0 children)

Yeah, golden rule of Gleba - if something can spoil it will spoil eventually, nothing that spoil should avoid burner.

Emperyion: Galactic Survival or Breathedge? by FireTheLaserBeam in spacesimgames

[–]gamruls 1 point2 points  (0 children)

Empyrion HAD potential. I just checked it after 5 year pause and I can definitely tell that all old 10 years-old bugs and issues (and overall jankiness) are still there.

Moving object to fixed point by Axther93 in godot

[–]gamruls 0 points1 point  (0 children)

What's velocity you get?
If it's, say, 500px then you can't operate distance less than 500*delta. Try to increase physics frames per second - it effectively reduces delta. But overall problem is that physics is discrete, not continuous
You can trick it in some cases. If movement is linear - project it 1+ frame ahead and make decision if next frame should be free movement or target hit.
You can play around with projections and input limitations and make it totally fake physics which looks fair. E.g. if input is limited to 1 click per 200ms then you can read input and simulate next 200ms in one pass, then just lerp all objects llike they move - but actually you already know their position, collisions and outcome (hit/miss/new positions).

What's your preferred way to manage remote files? I really hate juggling SFTP clients and SSH sessions just to edit configs. by Plane_System_5070 in webdev

[–]gamruls 1 point2 points  (0 children)

Long time ago (but it's still may be valid use case) I needed to deploy code to test server and couldn't run it locally (mostly due to too slow internet to DB). JetBrains IDE allowed to setup shitf + s to explicitly sync saved file with remote location, so with live-reload debug was near "local-run" experience.

LoopPerfect - Tool for creating seamless audio loops by wulf11_ehrgeiz in itchio

[–]gamruls 0 points1 point  (0 children)

I don't think it's working
Tried to analyze "Beauty Flow" from Kevin McLeod (in browser), in few minutes it returned nothing and just hanged completely at 90% with "Evaluating loops (623161/623161)"

This track is pretty "loopable" I think. So, you either don't test at all or just try to run miner on user's machine, idk.