Development history of the Dynamic Rally

The birth of idea

The inspiration for the game development was the rally of production cars (Stage of All Ukrainian auto rally 2021), where a variety of tuned and styled cars fought for the trophy:

Requirements and limits

The preference for the development was the fast implementation (1-2 month) of the main features and publishing with availability to as many mobile devices as possible (at least - version 4.4). 3D graphics adds realism, especially, a depth of exploring the virtual landscape.

Thanks to the folks who released many free ready-to-use 3D models, textures and music to the website (www.opengameart.org). They saved a lot of time. On the other hand, if the game needs a custom 3D model, one can use free Blender to create 3D geometry and apply textures.

Software stack

Kotlin/Java and OpenGL ES 2, MVVM, Room, Hilt, Firebase:

  1. Among available options the OpenGL ES 2 (version 1 has too many limitations) was chosen as time-proven standard for 3D games and easy-to-learn library. Also there was a little experience of using it:

2. The game locally stores a time of race and car trajectory (to show a shadow in the future releases). The modern way to save any data is using of Room persistence library.

3. Hilt library helps to maintain app component dependencies. Even a small game has few components (Renderer, User Interface, ViewModel, Input Processor, Storage Access and others), which depend on each other. This dependencies requires more time to properly follow their life-time. The other benefit of using dependency injection library is simplified component testing.

4. Kotlin programming language reduced code base and accelerated game development

Car physics

Initially the game uses nonphysical car motion - just kinematics. The next step will be adding a simple dynamics, which will make the game more realistic.

Multiplayer

One of the ways to make multiplayer mode for a game is storing a virtual room or party on the server to exchange a real time data between players. The link of the party could be easily shared to friends, which join the party and wait for others to start the race. ID of the party is randomly generated (using UUID) six-letter string one can easily copy (Android App Links). Player nickname is also generated using predefined array of adjectives and animals.

Leader board displays list of players ranked by count of passed milestones and the time of the last pass.

Firebase provides real time connection and has free quota. Firebase requires the minimum supported version of Android - 4.4. So it was chosen as easy-to-use back-end for multiplayer.

Localization

SDK has built-in feature to select string resources from xml, which corresponds to language chosen in the system settings. After user switches the language the game changes UI immediately. The game supports three languages and can support more in future depending on usage rating by countries. The default language is English.

A caption for the photo

Where we are today

What has your team accomplished? What are you most proud of? Tell site viewers some of your project's latest accomplishments.

Day/night sky and lighting
Headlights