Game Designer

Experiments

 
 


On this page, you will find a
selection of experiments and prototypes I have created over the years. Please note that the ones listed here represent only a fraction of the projects I have worked on professionally, for personal enjoyment, or as case studies of other games. Also, the solutions I used are by far not the only ways to solve the problems I have outlined; these are just the ones I choose based on the needs of the projects and my skillset.

Unless otherwise specified, you can assume I am solely responsible for the design, code, artwork, and other elements presented in these projects.

 
 

Modular level generation

Problem: How to sustainably make handcrafted environments while preserving replayability?

Solution: Level generation with replaceable modular handcrafted chunks that fit into a static map layout. This achieves the goal but makes encounters in the chunk self-contained which can add dev cost or be taken as a design constraint.

3rd person aiming case study

Problem: How to make a stable cursor in a 3rd person isometric game that will not jump up and down when raycasting from the camera to the ground, similar to how it works in Foxhole.

Solution: Set the cursor slightly closer to the camera along the ray cast path to the ground rather than at the ray cast hit or as an offset from the ray cast hit position. This can be done with a cast to a plane or even better with some trigonometry on the right angle triangle.

 

Points on a plane

Problem: How to nicely distribute points on a plane?

Solution: Use Poisson distribution (note that the number of points will be somewhat random). Alternatively, spawn points on a grid with padding if you want explicit control over the number of points (FTL uses that).

Constraint Solvers

Problem: How to make a game about limiting where tiles can be placed based on neighbors?

Solution: Use constraint-solving algorithms or a simplified version of them.

Tile art by SirCarma

 

Borders generator

Problem: How to create editable borders around groups of points?

Solution: Use the Delaunue algorithm (Unity Package Delauniator) to find circumcenters around the points (centroids) and connect them using splines. Splines can be made curved using Bilinear interpolation.

IMGUI tools Undo/Replay

Problem: what is the fastest way to create a debug interface that will be preserved in builds and not just the Editor inspector?

Solution: Use IMGUI (DearIMGUI for Unity). Note that you should still build proper game UI and not rely on IMGUI for game UI. It is a common dev trap as the tools and hooks are already there, but IMGUI will be too hard to make a “player-friendly” UI unless you are making Dwarf Fortress.

Example: Saving and loading tools for a WFC map editor.

 

Submarine game experiment

Problem: How to make it so that the state of the map can be viewed from the perspective of any entity on the map when each entity has limited knowledge and vision of other entities?

Solutions: Decouple entity view from the controller and create a dedicated managed that would render entities based on the information supplied by the selected entity.

2D Hex & Triangle grid WFC

Problem: How to make a hex tile-based map that seamlessly interconnects when edited?

Solution: Use constraint-solving algorithms like Wave Function Collapse (WFC)to make a generator and editor for hex grids. Note that you are making a triangular grid solver in practice, as triangles are supersets of hexes.

Note: For this to work, there needs to be an art asset for each tile combination which creates an exponential dev cost based on the number of tile types. There is a workaround by invalidating some of the tile variations as part of gameplay constraints. This reduces asset creep substantially.

 

2D Square grid WFC

Problem: How to make a square tile-based map that seamlessly interconnects when edited?

Solution: Use constraint-solving algorithms like Wave Function Collapse (WFC)to make a generator and editor for tile grids.

Magnifying lens effect

Problem: How to make a magnifying glass effect?

Solitons: have a separate camera with the desired lens setting that outputs to a texture that can be placed on a 3d plane or a 2d used in UI image. Make sure that the camera used for the lens does not render the plain that acts as the lens.

 

Collapsible world experiment

Problem: How to make a world that is built in front of the player and collapses behind them.

Solution: The logic for popping out chunks is easy; the issue is the performance. Focusing on building a robust system for loading chunks of the level and operating on tiles as a contiguous chunk of memory is critical for making this run fast. Look into how ECS works and leverage that approach for storing each tile as a part of a contiguous collection that is processed all at once on multiple threads.

Pixel perfect 3D world

Problem: How to make a 3D world that looks pixel-perfect to an orthographic camera while allowing the camera to rotate. (this is an entertaining problem).

Solution: First, everything in the world needs to be stretched out in the camera-facing direction and up by about two times to make it loop pixel-perfect. as Ortho cameras squish objects that are in 3d space (The first game that did this was Dungeon of the endless; there is a great talk.). As the camera rotates, its forward direction changes, so everything in the world must be compressed back to 1.0 and stretched again in the new direction.

Note: if you have a physics-based mechanic, the scaling will mess with them; using interpolation of vectors is much safer and saves a lot of headaches.

 

Rendering 3d Geometry as pixel art

Problem: How to use 3d models and PBR materials to make a pixel art game?

Solutions: Make a postprocessing shader or write camera output into a texture, scale the texture down, and render that scaled-down texture in front of another camera. A very similar technique to the Lense example.