Project P.Y.U.M.O.


Made in February 2024 using Unreal Engine 5.


Game Page


GitHub


Highlights

  • Developed solo in 2 weeks.
  • Developed as a scalable framework for life simulation games. includes moving NPCs and vehicles.

  • Stats updated by entering buildings where every building affects different stats. E.g. Yoga Studio refills Energy in exchange for Time and Money; Workplace refills Money in exchange for Time and Energy.
  • Building info like name, description and stats can be configured in the editor without accessing code.

  • Also includes job application mechanism and menu-based buildings such as Restaurants and Movie Theatres.
  • Has a time-of-day system with night lights that turn on/off dynamically depending on time.
  • Features an interactive tutorial and persistent difficulty modes for accessibility.

  • Used UE's Metahuman creator for the protagonist.
  • Made use of IK Rigging and IK Retargeting to animate skeletal meshes.

Description

P.Y.U.M.O. stands for 'Pick Yourself Up and Move On.' The protagonist, Priscilla, has recently had to face some difficult days and now finds herself in a bleak place. Project P.Y.U.M.O. is a chronicle of her efforts to step away from the past and make a fresh start. She must battle exhaustion and plan her finances carefully to transform into a new persona.


Technical Walkthrough

  • The primary challenge was to develop the foundational mechanic that involved the player entering different types of buildings and balancing their stats.
  • Moreover, this system had to be easily scalable such that new building types could be added without modifying existing code (the Open-Closed principle).
  • Therefore, inheritance was leveraged and a parent 'BP_Signboard', representing the building signboards, defined the basic logic which would be overridden by its children signboards.
  • In the above blueprint, the parent displays a panel if the building is closed. The function 'CreateBuildingPanel' is overridden in the child blueprints to display a panel with the building information (below blueprint samples show two children overriding this function). A reference to the signboard creating the building panel is sent as a function parameter.

  • Each child contains an Event defining what would happen if the player enters that building, and this Event is bound to the parent's 'OnBuildingEntered' event dispatcher (below).
  • This Event is called when the player clicks 'Enter' on the building panel (below)
  • The 'OnBuildingEntered' event, whose behaviour is defined by the child, updates the player stats depending on the building's configuration (below).
  • Using an event dispatcher meant that I could use the same Widget blueprint to display information irrespective of the building type, and the behaviour of its 'Enter' button could be defined at runtime.
  • This interaction system between player and buildings is the bread and butter of Project PYUMO, and its scalable and easily extensible design enabled the development to be completed within the game jam submission deadline.