Seven Keys - Game Design


The idea behind Seven Keys came from thinking about a wizard war when learning the theme for Learn You A Game Jam, "One Inventory Item". The final product is a game where you start in what looks like a small dungeon prison cell with a table in the middle and inky black shimmering portals lining the far wall. Attached to the table by a dagger is a note informing you that you're in a magical construct that will start quickly losing air the moment you pick up one of the seven keys on the table, which are needed to open the portals. Time works differently within the construct and loops every few minutes. It is also apparent that your memory has been affected and you have most likely been at this quite a very long time already, as you're just now starting to form memories older that a few minutes. Pass through seven portals still breathing and you can have your freedom.

Gameplay mechanics:

* Air begins to dissipate immediately upon picking up a key from the table.

* You can only hold one key at a time [Game jam theme].

* You can only use a key once.

* If a key doesn't open the portal it is used on, the key and the portal are both destroyed.

* Every opened portal has a glyph above it, the glyphs indicate how much of a percentage of your current air supply is added (blue) or removed (red).

* The center portal (Portal 7), completely replenishes air up to the currently set maximum supply (adjustable in options menu).

* Air cannot exceed the maximum limit (Default: 44 seconds; Maximum 999; Minimum 11).

* All keys and their materials are randomized, as are the portals' positions.

* Each key opens a different number of portals.

* Only one key opens the center portal; this key opens every portal and therefore at least one portal will always be opened.

* Keys are more likely to open air consuming portals than air replenishing portals.


Learning:

I started this project with almost zero Unreal Engine 5 knowledge, having briefly used UE4 a few years prior... and then my spouse and I welcomed our son into the world. So time melted. That's a thing as a new parent. Almost 2 years later, we're finally starting to regularly get a full night's rest. So it's time to learn new skills again; beginning with a few Youtube tutorials from Unreal Sensei and Matt Aspland and taking off from there. There is a bit of overwhelm factor when approaching Unreal Engine, just because, like any programming language or game engine, you don't need it all. Before long, this project propelled itself out of "tutorial hell" and I began using the Unreal's Blueprint system much more effectively. Attached is a photo of some of the earliest blueprint visual scripting... it got better, then worse, then really good, then ugly due to rushing near the deadline. Somehow, I read this.

Things I'd show me first when approaching Unreal Engine for the first time:

* Use Blueprint Interfaces as opposed to casting - Casting can occupy a lot of memory. I began this game jam using a GTX980, so available memory quickly became a major issue. Blueprint interfaces help some. 

* Game Instance - Like global variables. This can carry persistent variables between different level loads unlike level blueprints, game mode, or player character. Easy to reference from anywhere using Get Game Instance.

* Game mode - A layer above Level blueprints, conceptually to me, anyway. Easy to call Blueprint interfaces that are implemented by the game mode from anywhere with Get Game Mode.

* Player controller - Also easy to reference and call blueprint interfaces implemented by this most anywhere using Get Player Character,  Get Player Controller, etc.

* Level Blueprints - Wasn't readily apparent that you have to click in the tree of square nodes icon and "Open Level Blueprint" after loading the desired level. Also easy to access.

* Make a static mesh from a blueprint - Make blueprints using combined meshes or primitives and materials, then place the blueprint in the open level, make sure it's selected, and then in the top menu select Actor-> Convert <Your Blueprint> to Static Mesh. ...Boom.

* If generating a random number and you need to loop that random generation and it only outputs one number, put the random operation in a function and loop that.

* When it comes time to build your project and you've imported 20GB+ from different marketplace asset packs and it builds horribly slow and packages to something huge, but you can only upload to itch.io 1GB max; what do you do? Don't try to drag out all the assets manually by copying the project and slowly pulling out loose threads... like I tried at first. That is the way of fail. Instead, create a new blank project with an appropriate project title, then migrate a folder full of only the level maps your project uses. You may also need to manually migrate a folder containing your game instance blueprint. You can export/import your project settings within the project settings menu, and you should set your game instance and player controller while you're there. Then, after testing quickly to make sure everything works, build your project as it's most lightweight self. Then compress the result with 7zip or whatever. I got a smaller end result file size with ultra compression with a .7z archive than a .zip archive.  You could do all this, or you could just set the level maps to include in the project settings. I knew this existed, but couldn't seem to get it to work when this was going on, so I worked around it.

I've enjoyed this process; the puzzle has been complicated and epic. Looking forward to more.

Thanks for reading.

Get Seven Keys

Leave a comment

Log in with itch.io to leave a comment.