Working with the PS5 devkit presented a unique challenge, as we had no prior experience with the hardware or SDK. Our learning resources included official SDK documentation available only on university machines, a small set of sample projects, and a series of Moodle guides tailored to console programming. However, much of the PS5 documentation was written with the assumption of prior expertise, which made navigation difficult. To contextualise our experience, we compared the PlayStation documentation with that of the Nintendo Switch. The PS5 system offered more sample projects and stronger in-line code comments, but its documentation search system was poor, and developer forums were inaccessible.
C++
-
Game Implementation
We began the project with a sample file included with the devkit, which demonstrated controller input by moving simple squares on-screen. We modified this foundation to represent Pong paddles, adjusting size, colour, and position. The ball was implemented using the same sprite-drawing utilities, with research into the graphics API revealing that ‘fillOval’ could be used to create a true circular ball rather than a placeholder square. Once the core objects were drawn, we wrote the Pong logic in standard C++, handling ball velocity, collisions, and paddle interaction through basic mathematics. This ensured the game behaved as expected, with responsive input from the DualSense controller driving the core gameplay loop.
-
Libraries, Menus & Data Handling
A major technical hurdle was our attempt to implement the PS5 SaveData library. Following the SDK’s threading-based documentation, we attempted to link and use the library for persistent data but found the examples difficult to replicate. Despite extensive troubleshooting and consultation of unviersity threading guides, we failed to achieve a working implementation before deadlines, a valuable lesson in recognising when to pivot. Instead, we implemented the MsgDialog library, which provided a simple in-game message system using the PS5’s native UI. This allowed us to display a custom message when the player pressed the triangle button, prompting them with a confirmation dialog before the game closed. Closing the application itself required research beyond the SDK; we eventually solved the problem by using the ‘std::quick_exit’ utility documented on cppreference.com. While not our original plan, this shift gave us a functional user flow and highlighted the importance of adaptability in console development.
-
Optimisation & Profiling
To evaluate performance, we used a profiling tool available on the devkit. Our baseline sample project included unnecessary systems, such as audio, which we removed to streamline performance. By capturing profiling snapshots of both the unoptimised and optimised builds, we could quantitatively compare their CPU usage. While improvements were modest, they were measurable: a small reduction in system and user core utilisation, fewer active threads, and a decrease in ‘syscall’ activity. The optimised code ran on fewer cores and threads overall, demonstrating how even simple adjustments – such as stripping unused features – can lead to measurable efficiency gains. Although our analysis could have been deepened with additional snapshots, the exercise gave us experience in methodical optimisation and reinforced the need for profiling tools in professional development.
