City Runner
City Runner
Ubisoft Develop Mentorship Program 2023
Ubisoft Develop Mentorship Program 2023
The "City Runner" project represents a technical challenge aimed at showcasing programming skills and challenging myself in the domain of game development. As a participant in the Ubisoft Develop Mentorship program, the task was to create an Infinite Scroller game using modern C++. The challenge extended beyond mere gameplay, emphasizing the importance of clear code structure, reusability principles, efficient memory management, ownership principles and the strategic use of modern C++ concepts.
The "City Runner" project represents a technical challenge aimed at showcasing programming skills and challenging myself in the domain of game development. As a participant in the Ubisoft Develop Mentorship program, the task was to create an Infinite Scroller game using modern C++. The challenge extended beyond mere gameplay, emphasizing the importance of clear code structure, reusability principles, efficient memory management, ownership principles and the strategic use of modern C++ concepts.
About Develop at Ubisoft
The program provides mentorship opportunities for women and non-binary individuals (students or fresh graduates with less than 2 years of experience), interested in video games to develop their skill set in Game Design and Programming.
"With more people playing video games than ever before, it is important for us to help build an inclusive entertainment industry that reflects the diversity of our players. With this mentorship, we have an exciting opportunity to support talents from different backgrounds, bringing fresh perspectives and new ideas.
The selected candidates will be able to create a project around a pre-set theme. They will be mentored by a Ubisoft expert for four to eight weeks, receiving feedback from them to build their project."
Ubisoft.com

The brief
The brief
For this challenge the main goal was to create an Infinite Scroller game. An infinite scroller is a platformer-type game, where the main character or object moves non-stop and needs to avoid obstacles by jumping, ducking, sliding etc.
Participants were tasked with developing a game that stands out for the following features:
A moving avatar navigating obstacles, with basic actions such as jumping, ducking, or attacking.
Implementation of a health system for the avatar, with damage inflicted by obstacles or enemies.
A scoring system and collectible items to enhance player interest.Reactive enemies and power-ups distributed throughout the game world.
Optionally, additional actions for the avatar, a main menu, and environmental elements to enrich the gaming experience.
The brief highlights the technical aspect of the challenge, overlooking artistic merit, to focus on participants' programming skills. Projects will be evaluated based on code structure, technical challenge, and playability.
For this challenge the main goal was to create an Infinite Scroller game. An infinite scroller is a platformer-type game, where the main character or object moves non-stop and needs to avoid obstacles by jumping, ducking, sliding etc.
Participants were tasked with developing a game that stands out for the following features:
A moving avatar navigating obstacles, with basic actions such as jumping, ducking, or attacking.
Implementation of a health system for the avatar, with damage inflicted by obstacles or enemies.
A scoring system and collectible items to enhance player interest.Reactive enemies and power-ups distributed throughout the game world.
Optionally, additional actions for the avatar, a main menu, and environmental elements to enrich the gaming experience.
The brief highlights the technical aspect of the challenge, overlooking artistic merit, to focus on participants' programming skills. Projects will be evaluated based on code structure, technical challenge, and playability.
For this challenge the main goal was to create an Infinite Scroller game. An infinite scroller is a platformer-type game, where the main character or object moves non-stop and needs to avoid obstacles by jumping, ducking, sliding etc.
Participants were tasked with developing a game that stands out for the following features:
A moving avatar navigating obstacles, with basic actions such as jumping, ducking, or attacking.
Implementation of a health system for the avatar, with damage inflicted by obstacles or enemies.
A scoring system and collectible items to enhance player interest.Reactive enemies and power-ups distributed throughout the game world.
Optionally, additional actions for the avatar, a main menu, and environmental elements to enrich the gaming experience.
The brief highlights the technical aspect of the challenge, overlooking artistic merit, to focus on participants' programming skills. Projects will be evaluated based on code structure, technical challenge, and playability.
Game Overview
Game Overview
"City Runner" takes place in an urban environment where players must navigate obstacles, defeat enemies, with the primary objective of collecting money and surviving as long as possible. The game is dynamically generated with random creation of city platforms and landscapes, ensuring a diverse and intriguing gaming experience. Furthermore, various pickups and power-ups are available, which will be detailed further in the subsequent sections of this document.
"City Runner" takes place in an urban environment where players must navigate obstacles, defeat enemies, with the primary objective of collecting money and surviving as long as possible. The game is dynamically generated with random creation of city platforms and landscapes, ensuring a diverse and intriguing gaming experience. Furthermore, various pickups and power-ups are available, which will be detailed further in the subsequent sections of this document.
"City Runner" takes place in an urban environment where players must navigate obstacles, defeat enemies, with the primary objective of collecting money and surviving as long as possible. The game is dynamically generated with random creation of city platforms and landscapes, ensuring a diverse and intriguing gaming experience. Furthermore, various pickups and power-ups are available, which will be detailed further in the subsequent sections of this document.


Technical Overview
Technical Overview
Key Features of the Architecture
Key Features of the Architecture
Entity-Driven Architecture: This project adopts an entity-driven design philosophy, where the fundamental building blocks are entities that encapsulate specific functionalities. Each entity serves as a cohesive unit, embodying a unique set of behaviors through the incorporation of modular components. These entities, whether representing game objects or system elements, are distinctly identified by a unique identifier, facilitating seamless communication and management within the system.
Component Pattern: The project leverages a modular component pattern to define and organize entity behaviors. In this design paradigm, functionalities are decomposed into independent and reusable components. Each component encapsulates a specific aspect of an entity's behavior. This approach not only promotes code reusability but also simplifies the addition, removal, or modification of functionalities, contributing to overall system scalability and adaptability.
Flexible Event Management System: In addition to the modular architecture, City Runner's incorporates a flexible event management system. This system is based on various event types, each represented by individual data structs. The concept of event management will be explored further in the subsequent chapters, providing a comprehensive understanding of its implementation.
Entity-Driven Architecture: This project adopts an entity-driven design philosophy, where the fundamental building blocks are entities that encapsulate specific functionalities. Each entity serves as a cohesive unit, embodying a unique set of behaviors through the incorporation of modular components. These entities, whether representing game objects or system elements, are distinctly identified by a unique identifier, facilitating seamless communication and management within the system.
Component Pattern: The project leverages a modular component pattern to define and organize entity behaviors. In this design paradigm, functionalities are decomposed into independent and reusable components. Each component encapsulates a specific aspect of an entity's behavior. This approach not only promotes code reusability but also simplifies the addition, removal, or modification of functionalities, contributing to overall system scalability and adaptability.
Flexible Event Management System: In addition to the modular architecture, City Runner's incorporates a flexible event management system. This system is based on various event types, each represented by individual data structs. The concept of event management will be explored further in the subsequent chapters, providing a comprehensive understanding of its implementation.
Entity-Driven Architecture: This project adopts an entity-driven design philosophy, where the fundamental building blocks are entities that encapsulate specific functionalities. Each entity serves as a cohesive unit, embodying a unique set of behaviors through the incorporation of modular components. These entities, whether representing game objects or system elements, are distinctly identified by a unique identifier, facilitating seamless communication and management within the system.
Component Pattern: The project leverages a modular component pattern to define and organize entity behaviors. In this design paradigm, functionalities are decomposed into independent and reusable components. Each component encapsulates a specific aspect of an entity's behavior. This approach not only promotes code reusability but also simplifies the addition, removal, or modification of functionalities, contributing to overall system scalability and adaptability.
Flexible Event Management System: In addition to the modular architecture, City Runner's incorporates a flexible event management system. This system is based on various event types, each represented by individual data structs. The concept of event management will be explored further in the subsequent chapters, providing a comprehensive understanding of its implementation.