Obsidian Moon

Obsidian Moon is a text-based detective adventure-simulator set in the 1930s, where you take on the role of a homicide detective in Obsidian City. Using a unique card-based system, you’ll uncover clues by combining different cards—each representing key elements like people, locations, objects, and more—to generate new leads. With time running out, you must piece together the evidence and solve each case before it’s too late.

It is being developed by Lost Cabinet Games and the demo is published on Itch.io.

As part of Lost Cabinet Games, I was the sole developer and was assigned with the implementation of all the games’ functionalities. Furthermore, I contributed with the game design of the game.
Some of the features impletemented were:

  • Stacking & combining cards
  • Grid system
  • Time control
  • Day & night cycle

Challenge faced:
The cards are snapping into positions in order to be placed in a grid enviroment. When a card is attampted to be placed on an already taken position, it should look the closest empty spot. In the beginning the method used was using a BoxCast. Searching every position starting from closest to farthest. This worked, however, there was a performance issue when the closest possible position needed 100 or more box casts in a single frame.

Solution:
I created a Grid Manager where every possible position was assigned in to a 2D bool array. When the cards changed positions the grid would update accordingly. This would remove the BoxCasts search with a simple bool statement. Using the System.Diagnostics it was measured 3 up to 10 times performance increase.

The 2D array updating the card’s position in real-time
There is the option to see the exact positions of the grid