Open BraedonWooding opened 7 years ago
Well, to the broader question of the topic, my general approach has been to look at it more piecemeal. Does a given "realistic" approach potentially add interesting gameplay? Will a player need to be exposed to the underlying complexities to understand what is going on (and thereby players less knowledgeable about a given topic potentially be overwhelmed)? Will the realistic approach require additional computation that may strain the game engine (or require compromises elsewhere to preserve performance)? Is there a more simplified approximation that can still get most (if not all) of the gameplay possibilities, without being as difficult to understand/requiring as much computation/be easier to to incorporate into the code?
And I would summarise the the levels of realism differently, as three points (of course on a spectrum, but these I feel are the notable turning points.
The first is "Arcade gameplay", where the fun of play is the primary focus, with at best a vague nod towards realism, our needs system would be an example of this (and any other game with similar needs, such as Sims or Rimworld), where needs decay at a fairly steady rate, sometimes are affected by outside factors, and certain other actions increase them. And for some systems I think this is perfectly acceptable, the concept of needs covers a very wide array of things, many of them being incredibly complex, and there being no real satisfactory way to present them in an understandable way to the user (especially in a consistent way, such as for the two currently implemented, oxygen and sleep, they are widely different things, but are both things a player would want to be able to quickly understand when caring for Crew.
The second is Believable gameplay, which is the balance point between arcade and full realism. Full realism is sacrificed for gameplay, but systems are made in such a way that while they may not be absolutely technically accurate, a look at the effects of them seem to create circumstances in a way that the player believes is realistic. This I believe roughly corresponds with your "gamified realism". Personally, as a standard, I find this the sweet spot, but certain elements may benefit more going further one way or another.
The third of course is full realism, in which case gameplay may be sacrificed for realism. Done well of course a game can be built around this and dealing with the effects of realism can be built as part of the fun, though it may make it appeal to a more limited set of players. And if done only in area where it can minimize gameplay sacrifices (and maybe even create new unique gameplay) it can minimize that effect. For example, with the atmospheric system, as long as the player doesn't need to know the details of formulas involved, it would be fine to have a fair degree of realism, I suspect a player not interested in the scientific details could still play without suffering from lack of knowledge or being bored, but a scientifically minded player may be able to get some extra play out of it.
Note, that as what I am describing is intended to be on a spectrum, the ones at either end sound worse because I am describing the "far end" of them, whereas the middle is a balance between the two, so the description benefits it more.
I value gameplay more than I value realism. I want a game that has well thought out game design than one that only relies on realism. But realism can be a tool for good game design so going too unrealistic can take away from the experience.
I'm "against" too much realism. I mean Kerbal Space Program is an awesome game but the realism is basically the game idea whereas Porcupine is a "Base Builder" and as such I would prefer the simplified reality in general. In terms of ideas for the gas I can highly recommend the game Oxygen Not Incuded where the gas flow is part of the base mechanic. (Quill18 actually made a short Let's Play if you want to get an impression)
Oxygen Not Included was actually the game I was basing most of my points off its a great example and uses a lot of the systems I discussed. I thoroughly enjoy those systems since they are integral to survival, you have to make sure that gas flows nicely and that you have simplistic pipes to control that flow, something Project Porcupine could benefit from.
Now I'm all for non-realism in a lot of cases since realism can often just overcomplicate things that really should stay simple, but based of your comments and me thinking I thought perhaps for our gas and liquids we could have essentially the same system and regard them as entities (i.e. physical objects) that move around and interact with the 'world' so to speak.
Gases are entities rather than being part of the room, so they float around and so on? This means having leaks in certain places could pump steam or toxic clouds into other areas causing damage and so on? This would also massively simplify the process, since well liquids and gases expand the same (with gases just expanding upwards and well liquids do too but only with more liquid if you get what I mean), and it makes it very clear to the player. Then diffusion and stuff can mostly be ignored since in reality it's just the gas escaping through doors (only a small amount and air locks having 0 or whatever), and that gas carries heat? So essentially it's like a mix between the tile by tile method of gas and temperature and a room by room, you would have a radius of gas, that expands and loses density and when it reaches a wall it can slowly transfer through that wall depending on a certain rate, and transfer heat obviously? This is quite an easy system and well it wouldn't be 'gas exists on this tile' it would be 'gas originated on x, y and has radius a, b, and c (multi radii since it's more of a polygonal ellipse)' then parts can drift off and become new sources for gas which will combine together. I can even see a lot of this being handled by a GPU and not by the core CPU through some nifty tricks later on!!
What do you guys think? Is this too realistic or too gamified?
@Kjarrigan Kerbal actually is a pretty good example of what I was talking about with a mixed approach. While they are more on the realistic side, there are plenty of decisions they made more towards the arcade side of the spectrum, either for gameplay or performance reasons. For example, orbits and spheres of influence are vastly simplified because doing the full calculations would degrade performance, and I believe it's the aeronautics that is vastly simplified because they said a more complex and realistic version wouldn't be fun for the player.
@BraedonWooding I think you may have found the bad side of a balanced approach, I feel it's gamified in the wrong ways and realistic in the wrong ways. Gas as an ellipsoid entity I would think would have some issues conforming to room shapes, and while it could possibly be tweaked to effectively conform, that would be an extra layer of "massaging" the data, and by the sounds of it, it would need to check every gas entity to figure out the gas and temp at a given location. Aside from what I feel are sacrifices in realism (in a way I feel will negatively impact gameplay), I think it will be very bad for performance, and while I believe it would be possible to push some (or even all) of that onto the GPU (I've seen some amazing things people have done pushing unexpected things onto the gpu), that is also very advanced stuff, and I don't think we can let performance ride on the possibility of an expert in compute shaders (I think that's what they call it when you push calculations onto the GPU) or an existing contributor figuring it out.
I think sticking to the degree of "resolutions" (tile or room) that we have is best. I haven't had the opportunity to look into what the current state of the code is, but from @abackwood's description of his intent (having the gas mix and temperature a part of a single object), that should give a good enough level of detail, and also handle one side of temperature mixing by virtue of riding along with gas leaking between rooms.
If we were able to get things done on the GPU, I think things would be better served doing a tile based approach, as that's the degree of resolution the game works in anyways. But for now I think we are better served sticking with room level calculations for complex things like gas and temperature (perhaps with the possibility of having room joins take a little bit of time and other trickery with temporary rooms to have gas mixing and loss not happen immediately.
Yeh fair enough, I still feel that could be insanely cool but I can't deny it's possible impact and not really fitting in with the whole room/tile stuff. Abackwood's code is a bit everywhere, I've been piecing it back together and he has used a lot of random equations and has some weird data structures like a dictionary of a dictionary which he iterates through every frame (which sucks up performance a little) though beside that as I've said before it works kinda really well. I am currently just fixing up the mess, he did say in his original pr that it was majorly WIP and he had something called 'Fix mess of structures' in his todo list so I'm presuming this was just his plan eventually to fix it.
Despite this I still think having gas as an entity at some level is still quite important, like having gas traps to let off steam towards invaders or toxic fumes, but these are often very small and isolated occurrences and probably can be done independently of the gas/temperature systems and probably part of an effect system like what has been discussed before.
There are two types of realism that games can take; the first being 'gamified realism' where often a trend of data or a dynamic is expressed through a simplistic relational formula rather than a set of laws and formulas, an example of this would be to express temperature as a relational of kinetic energy / total gas. I couldn't find any location where this was even hinted at being a simplification or being real however it does provide nice results that work quite well.
Now the second way is a simulated environment where it represents idealistic realities (basically avoids any complex 'realities' like air resistance, friction, quantum mechanics and so on... often called classical/idealistic physics). This would be quite easy to achieve (though 'easy' is a relative term very much so in this case) we would simulate gases and solids as temperature holders, and what would happen is that gas would hold the atmospheric temperature for that room very much so like it currently does, most likely I'll change the equation a bit so it works nicer with less variables but it essentially will be the same (since it works so well), then the system will add flow rates (which is an inverse relation see below) based off the gas's molecular mass, this could be used for effusion/diffusion speeds and there are ways to compare different gases.
So every entity (furniture/machine/human/robot...) will face a temperature of the gas temperature in the room (very much like the current situation) however I would propose that we include the realism that not every object heats up as much as the next, and like the current system which has a thermal_diffusivity value we probably should have a relation to heat transfer/convection. So if you have a lot of metal in a room that room will be cooler since the metal will act as sinks (which is true and helps for spaceships which generally are quite cool due to the mass amount of metal), however if a machine is really hot it'll be a lot less efficient (and perhaps not accessible by humans due to its heat acting as a threat). What do you guys think?