top of page

Puzzle Box Palace

PuzzleBoxPalaceTrailer
Play Video
About

Puzzle Box Palace is an escape room style puzzle game where you are pulled into your grandfather's magical puzzle box. Solve puzzles, manipulate the puzzle box, and jump across furniture as you look for a way out. You find nostalgic letters from your grandfather throughout the puzzle box, reminiscing about your relationship with him as you navigate his last gift to you.

Role

Lead Programmer

Engine and Tools

Unreal Engine 4,

Blueprints, C++

Team Size

11

Development Time

4 Months

Platform

PC, PS4

Download

steam_logo_edited.jpg
Role and Responsibilities

As lead programmer on the project my most important role was communicating with the Game Designer, Producer, Lead Artist and Lead Level Designer to ensure all necessary technical features were planned and implemented. I managed 3 other programmers, making sure they knew the direction of the game and which tasks needed to get done as well as removing any blockers from their paths and helping out with the design of core gameplay systems. I also spent  time on performance, daily builds, and the PS4 port of the game.

My Contributions
Technical Design

I was heavily involved in the design process for all of the major systems in the game. As a lead, I was responsible for discussing the needs of the game with the other leads and then communicating those needs back to the members of my team. Before anyone started working on new functionality we would discuss the feature and make sure the design would fit in with the rest of our game code. These whiteboard design sessions would walk through the functionality and clarify any unknowns which allowed us to head off problems before we started coding and saved a lot of time. We would commonly pull in level designers after our initial technical discussion to make sure that what we were building would be intuitive and useful for making our levels.

Talking through features with the GD and programming team

( I'm in the blue Zelda shirt )

Planning conveyance features for interactable objects

PS4 Port

I was in charge of porting our game to PS4. Since we used Unreal 4 to develop the game, my main task was to configure a build environment to compile our game for PS4 and then export the build to a dev kit.

 

After running our game side by side on PC and a PS4 Pro dev kit, there were some bugs specific to the PS4 as well as a lot more performance issues. Targeting the PS4 throughout development required me to constantly monitor our game's performance, since I knew that if we had issues on PC it would be unplayable on PS4.

 

The port also required full controller support, so that became a higher priority for us on the project which resulted in the PC's controller support becoming more fully featured as well. By the end of development, the game was running at a consistent 30 fps on the PS4 Pro and was playable without any game breaking bugs.

Performance

Lighting issues plagued us throughout development. We had a lot of moving pieces throughout our levels, which required dynamic lighting to react to the level shifting and new shadow positions in the world. The light density tool in Unreal was critical to identifying which areas of a level were causing the most issues. I spent much of my time near the end of the project working alongside the lead artist to identify and resolve lighting performance issues.

The image above shows the lighting density map for our first puzzle, the Dining Room. Purple and white areas show a very high concentration of lights. Unfortunately, the density was unavoidable in this level since the main room moves around requiring lights to be dynamic. I was able to modify the resolution of shadow maps and selectively disable shadows for certain lights as I found that dynamic shadows were the most expensive part of the lighting. With tweaks from the art team on light configuration and my investigation into the shadow problems we were able to hit frame rate with this level even with dynamic lighting in some areas.

Post Mortem

 

What Went Well
  • Asking for ideas from everyone on the team (not just designers) led to a lot of great features and kept everyone invested in the project.

​

  • Involving the whole programming team in schedule decisions allowed me to provide a more accurate schedule to the producer.

 

  • Each programmer took ownership of different areas early so it became easier to collaborate and know who was the expert on which features.

​

  • Great communication with level designers and artists throughout development helped us provide what they needed and maximize our time and effectiveness.

What Went Wrong
  • We left some polish tasks until late in the schedule, which ended up taking more time than expected so it was stressful trying to finish those tasks.

 

  • We didn’t research everything we needed to early on in the project, which led to some unknowns about features needing to be investigated in later milestones.

​

  • The build scripts did not handle lighting, so we had to manually build lighting which became time consuming late in the project when lighting was more complex.

What I Learned
  • As a lead, be open and transparent with the team as much as possible. We kept communication lines open throughout the project and our team bonded very well and everyone was able to contribute significant features and fix problems during development.

​

  • Trust your team, especially after people settle into their roles after a few milestones. I knew we could solve any significant bugs based on the team's abilities which gave us the confidence to really push for complex features.

​

  • Integrate art assets early and throughout the project so that sizing or performance issues can be caught early.

​

  • It's important to spend a lot of time thoroughly researching potential features early in development so that you know the effort required for tasks and how to accurately schedule them.

​

  • Involving the whole team in brainstorming and feature idea generation leads to more great ideas and gives everyone on the team more a personal connection to the project.

​

  • It's crucial to understand limitations of your toolset when working on a game. We had a lot of performance issues with many dynamic lights and shadows which required us to redesign how level lighting was laid out.

​

  • Developing a game for multiple platforms requires constant consideration of how features and controls will translate to all platforms. The process can motivate certain features to be more polished and complete to cater to one platform but the benefits may be felt by the other. In our case, controller support went from an afterthought on PC to a polished experienced since the PS4 did not have a mouse and keyboard to fall back on.

bottom of page