Interstellar Racing League


This slideshow requires JavaScript.


Interstellar racing league is a 3D racing game featuring four unique karts and tracks where players compete with AIs and other players.


  • Role: AI Lead
  • Team Size: 56 (15 programmers – 4 AI, 4 Physics, 4 Gameplay/Camera/Build, 1 SFX, 1 Audio, 1 UI)
  • Engine: Unreal Engine 4
  • Language/Tool: C++, UE4 Blueprints
  • Platform: PC
  • Dev Time: 4 months


  • Implemented AI architecture given the software framework agreed by all programming leads
  • Maintained the data-driven rubber-banding system
  • Supervised on performance throughout the project; optimized implementations based on observations on profiling data
  • Assisted programmers with implementation and debugging issues
  • Communicated two-way between the AI team and other departments
  • Set up the bug tracking and fixing pipeline with Jira at the late phase of production
  • Committed the Agile Development and SCRUM

Architecture and Systems

AI Architecture

  • As AI Lead I communicated with other programming leads to agree on the software framework
  • Given that, we discussed structure of each modules(AI, Physics, etc) and agreed on their interfaces


  • To add dynamics to ranking, we designed the data-driven rubberbanding system
  • Each kart had a set of data for its base properties, which was exposed to designers for tweaking
  • Also we provided an easy/medium/hard status for the kart based on its ranking, and provided modifiers for each status


Profiling Pipeline

  • The time we were give per kart was about 0.85ms, which meant 5.95ms for 7 AI karts
  • Performance mattered, and we started with UE4 profiler in editor with the game running in background
  • After selecting frames, the profiler provides profiling data of each call, including exclusive and inclusive time
  • If the inclusive time jumps abruptly for certain call, it can be a good place to start optimizing
  • For instance, we found we were casting everywhere in the rubberbanding update, so we ended up casting once during initialization


Post Mortem

What went well

  • Had a new leadership experience to manage and support hands-on programming
  • Had more experiences in setting up pipelines, for either technical purposes like planning a software framework or non-technical ones like facilitating cross-team communications
  • Delved into the concept of profiling, its general techniques and specifically the UE4 profiler

What went wrong

  • Communicated not as well on the prioritizations of features which caused cross-teams confusions
  • The formal pipeline of proposing new features was not well executed

Action Plan

  • Always have a clear and updated agreement on prioritizations of features throughout the development, from the start of its proposal
  • Always bear in mind the feature pipeline when setting up meetings and committing discussions. Have a deadline for adding new features.