Hello comrades. Recently, I have been trying to create an isometric RTS game and game engine from scratch. Specifically, I am looking to recreate something similar to one of the 3d fixed perspective “2.5d” Command and Conquer games like Red Alert 2. My initial goal is just to have my engine use the assets from that game and behave more or less identically. Another thing I intend for this project to be is to be an experiment in unusual game engine architecture. I’m looking to simplify my code as much as possible and to do more with less code.
I have been trying to model the internal game simulation in terms of materialist dialectics. More specifically, in representing the development of the state of the simulation as the result of contradictions between things in the game world, as well as their own internal contradictions. But I have been having a lot of trouble trying to concretize these ideas into something. It reminds me of what Mao Zedong said: that we can find contradiction in everything but contradiction expresses itself in different ways depending on what one is dealing with.
I was wondering if anyone has any experience with trying to model systems on a computer dialectically or would know of any references that could help me with my project. Search engines haven’t been so helpful. Also, is this even worth pursuing? Thanks for reading.
i think this is interesting, but i’m not sure how possible it is. what language are you using?
i’m curious what a programmatic contradiction looks like in this model? anyway, as i understand the goal, it seems like you probably need to define a series of abstract states representing different systems, define their interactions as some disagreement in state that needs resolved, and then programmatically define how to resolve them. So like, perhaps a Labor
type representing a factions productive output, a BuildQueue
type that represents what needs to be built in what location, and maybe some kind of Resolve<T, U>
type interface that defines how to resolve the two states, and for this example of Resolve<Labor, BuildQueue>
you start building what’s in the build queue if there’s enough labor available. You’d need to ensure that Resolve<T, U> === Resolve<U, T>
in terms of behavior.
C on Unix/Plan 9.
Part of the issue is I’m not sure myself how contradiction would manifest in this program. I’ve restarted and thrown away my previous code like 5 times already. Though, that’s very interesting, a general interface for resolving contradictions. It would have to map onto a variety of different situations. For example, the contradiction between 2 factions/players is resolved by conflict but conflict itself in this game is a contradiction between 1 or more units of different players. Also, the contradiction between 2 players is antagonistic. If someone wins that means their enemies have lost and it would result in a game end and scoring. Maybe that is what I need: an interface for resolving contradictions throughout the program. Whether it be between players themselves or their units for example. Thank you for the input!
yeah, it seems like you’re just trying to find a nice interface for encapsulating this idea. To that end, you might be interested in looking at entity component systems. it’s a pattern used in game design that separates out entities that exist, components that they have, and systems that describe interactions. Otherwise, I think you’re looking for the basic idea of a resolve interface like I suggested, in which case you might have more luck implementing something like that with Rust that supports generic typing.
Yeah most of my attempts so far have started to just look like ECS x3
I’d love to use Rust but I’m just really concerned about portability. Rust support gets worse and worse the more one deviates from Windows or Linux. So instead I make myself suffer with an old language with very sharp edges.