Is this game feasible?

J

Jacob T Wharton

Guest
Hello!

Before I begin, I have to say I do not have Game Maker: Studio. I am using GM8.0 Pro. Unless I finally decide to get Studio, that is.

I have an idea for a game.

What do you think the efficacy is, of making this game in game maker:

A simple, yet emergently complex, highly interactive, turn-based, somewhat of a 2D "roguelike" game along the lines of Nethack. But the thing is, I want the entire world to be interacting with itself; every turn, the entire world will be updated, not just the instances nearby. So the whole world is one big "room." I want to make graphics, sound, and everything as simple as possible to focus totally on really fun gameplay and interactivity.

Now as you know, in most traditional games, the game world is usually broken into multiple "rooms," and/or far away objects are deactivated in order to simplify things, so that the processor is not overloaded with thousands of instances at all times. But I want the whole world interacting with itself and changing while the player is elsewhere doing other things.

And in a turn based game, no matter how much time it takes to update the current frame, the game will still be playable. In other words, though a slower computer might take longer to update, it would not, in theory, be like the gamebreaking lag or framerate drops you'd see in real-time games when your computer isn't beefy enough. It would just take longer for the computer to calculate the changes made every turn.

But then again, even in a slow tactical game that requires a lot of thought, if every turn update takes several seconds, that could get annoying quickly for those with less patience, especially when nothing is happening and you are just walking around in the world.

I know game maker is not very fast, but I was wondering if you think it could be optimized for maximum speed to allow for a rich, highly interactive world in which, for example: factions go to war, people have routines, towns have events, entities are born and die, and tons of unscripted stuff happens due to the emergent complexity. All entities are treated just like the player, so NPCs will interact with each other greatly.


Some optimization ideas I had:

-obviously no D&D, and optimizing code to the best of my ability
-use one object "obj_update" to update all entities each turn
-all entities are actually only one object (it's probably not worth it to do this, I think, but I could be wrong)
-no animations, only small 16x16 sprites/ tiles
-do not draw objects outside the view
-keep AI as simple as possible. Pathfinding used only when necessary.
-no step events at all unless absolutely necessary; entities do nothing until updated by obj_update. So while the game is not updating, it should hopefully run perfectly smoothly.
-no collision events
-draw events all controlled by one object (is this necessary?)
-use tiles whenever possible (even destructible terrain can be made of tiles, yes?)
-maybe I will opt out of a lighting system, because I remember how costly that was to the CPU the last time I tried to make one. But it would be a shame to miss out on this feature. Anyone know of an optimized way to do roguelike lighting in gml?


With these optimizations (and any other you can share), could you imagine a simple, 2D, turn-based game feasibly working with potentially thousands of entities all being updated every turn, no matter how far away they are from the player?

My dream is to make a "world" that works kind of independently of the player, with some chance added in, but the world is also affected greatly by the player's actions in exciting ways that make replayability high.

Is game maker too weak for this?

Is any platform powerful enough to run such a big game?

Am I way in over my head? I was going to just start off very simple and grow from there, so as not to overwhelm myself. I want to hear from anyone, but especially those who have had experience making sandbox or roguelike games.

Oh, and would it run smoother on GM Studio?

One last question: does simply having instances in the room put a strain on the CPU? Even if a bunch of instances are not doing anything at all, will the framerate drop? I mean no collision events, no step events, no draw events, nothing. It is my understanding that the collision and step events are the most CPU-intensive aspects of objects in GM.

Thanks for reading and thanks in advance for sharing!
Peace and love
Jake
 

JackTurbo

Member
My first thought is that from an optimisation perspective this is a nightmare.

My second thought is that you would want to stagger the updates of the various entities across each turn to spread the cpu load a bit

My third thought is that although I consider myself decent at gml, I'm probably not good enough to have any further insights.
 

Genetix

Member
Almost definitely better to approach this with GMS or possibly GMS2. I wouldn't have each object instance doing the math (especially if using more then one room) I would keep it all tracked with one global persistent data keeper and have the corresponding objects update themselves according to that math when they are on screen or in range of the players perspective.

I'd approach it all using 1 room and a well built chunking system to simulate the entire world from - complex but absolutely possible with Game Maker if done properly.
 
J

Jacob T Wharton

Guest
Steady, thank you :)

Jackturbo, thanks for your input. I think that's a good idea to spread the update over multiple frames.

Genetix, thanks for your reply. I was also thinking of having one object controlling all the entities every time the game updates. But having them only update while near the player means that when you are far away, they won't be interacting with other entities besides the player. Doesn't it? Also, how would you suggest using chunks to make this game?


Edit: I realized I should deactivate all instances outside the view while the game (and the view) is not being updated. Genetix, if this is what you meant, I apologize. This will make the game run perfectly smoothly until it has to update.

I also had an idea to use pathfinding at the start of an entity's journey to discover the best path for the entity to take, then have the entity remember that path so it doesn't have to recalculate it every turn. Instead it updates the pathfinding only if the entity runs into an unexpected wall. This way, I hope, I can use complex pathfinding without straining the CPU too much.
 
Last edited by a moderator:
Top