Skip to content

Independent Learning Paths & Technology Stack

Audience

Incoming developers who want to build competency in specific parts of the DeVILSona tech stack.

This page provides a curated, opinionated curriculum for each major technology area. Don't try to learn everything at once—identify the components you'll be working on and focus there first.


How to Use This Guide

  1. Identify your role: Will you primarily work on the UE5 client, the cloud backend, or the web launcher?
  2. Start with fundamentals: Each section has beginner resources before advanced ones. Don't skip them.
  3. Build something small first: Theory without practice is useless. Each section contains a suggested mini-project to solidify your learning.
  4. Ask for code review: Your capstone teammates are the best resource for DeVILSona-specific patterns. Read the existing source code alongside these resources.

Unreal Engine 5 VR Client & AI Interactions

Unreal Engine 5 — Core Concepts

Why it matters: Understanding UE5's architecture (actors, components, GameInstance lifecycle) is mandatory before touching anything else.

Resources:

Guides and docs:

Videos and courses:

Communities:

Suggested Mini-Project: Create a new Actor class in C++ that subscribes to a FTimerHandle and spawns a debug print every 2 seconds. This confirms you understand the Actor lifecycle and UE-flavored C++.

Key Topics for This Project:

  • GameInstance vs. GameMode vs. Actor lifecycle
  • The role of BeginPlay(), Tick(), and EndPlay()
  • How level loading affects persistent objects
  • Understanding Output Log and using UE_LOG()

C++ (Unreal-Specific)

Why it matters: The entire AI pipeline is C++. You cannot meaningfully contribute to the core systems without it.

Resources:

Guides and docs:

Videos and courses:

Suggested Mini-Project: Create a UGameInstanceSubsystem that stores a "message of the day" string, exposes a GetMessage() UFUNCTION, and allows a Blueprint to read it. This validates you understand the subsystem pattern used throughout the codebase.

Common Pitfalls:

  • Forgetting UPROPERTY() on UObject* pointers → garbage collection crash
  • Not unbinding delegates in EndPlay() → crash after Actor is destroyed
  • Using new / delete instead of NewObject<>() → memory management chaos
  • Calling subsystem methods in constructor (subsystems aren't available yet)

Virtual Reality (VR) Fundamentals

Why it matters: VR has unique constraints around rendering performance, stereo geometry, and user comfort that don't exist in flat-screen games.

Resources:

Guides and docs:

Videos and courses:

Key Concepts:

  • Fixed Foveated Rendering and why it's essential on standalone hardware
  • Single-pass stereo rendering (Mobile Multi-View)
  • Why draw calls and overdraw matter much more in VR than PC games
  • Tracking origin and floor vs. eye level tracking
  • Guardian/boundary system

Meta XR SDK

Why it matters: The project uses the Meta XR Plugin, not the generic OpenXR plugin. Meta-specific APIs enable Quest-specific features.

Resources:

Guides and docs:

Videos and courses:

Key Features Used in This Project:

  • MetaXRControllerInput — Quest controller input handling
  • Foveated rendering settings
  • Android packaging configuration for Quest

OpenAI Realtime API

Why it matters: The Realtime API is the most complex external dependency in this project. Misunderstanding its behavior causes subtle, hard-to-debug issues.

Resources:

Guides and docs:

Videos and courses:

Key Concepts for DeVILSona:

  • Server-side Voice Activity Detection (VAD) — why you don't control speech boundaries
  • Audio format requirements — the strict 24kHz PCM16 mono base64 format
  • Session configuration vs. conversation item creation
  • Tool calling schema and the function call lifecycle

WebSockets

Why it matters: Understanding WebSocket fundamentals prevents you from treating the OpenAI connection like HTTP.

Resources:

Guides and docs:

Key Concepts:

  • The HTTP Upgrade handshake
  • Full-duplex communication (both sides can send simultaneously)
  • Connection lifecycle events: OnConnected, OnMessage, OnClosed, OnError
  • Why idle connections can be closed by firewalls/load balancers (keep-alive pings)

Cloud Infrastructure & Backend

AWS DynamoDB

Why it matters: Student session data lives here. Understanding DynamoDB's data model prevents schema mistakes.

Resources:

Guides and docs:

Videos and courses:

Books:

Key Concepts for DeVILSona:

  • Partition key + sort key design (StudentID + SessionID)
  • PutItem (upsert) vs. UpdateItem (partial update)
  • NoSQL modeling constraints: you can only query on primary keys or GSIs
  • begins_with in KeyConditionExpression — used by the Login Lambda

AWS API Gateway

Why it matters: API Gateway is the public-facing endpoint that the headset talks to. Understanding it helps debug 4xx and 5xx errors.

Resources:

Guides and docs:

Videos and courses:


AWS Lambda

Why it matters: The save/load logic runs here. Understanding Lambda execution context helps optimize cold starts and debug errors.

Resources:

Guides and docs:

Videos and courses:


Terraform

Why it matters: All AWS resources are managed through Terraform. You cannot safely modify the infrastructure without understanding it.

Resources:

Guides and docs:

Videos and courses:

Key Concepts for DeVILSona:

  • terraform plan vs. terraform apply vs. terraform destroy
  • terraform output — retrieving values like API endpoint URLs
  • Dependency graph — how Terraform knows to create the DynamoDB table before the Lambda that references it
  • The source_code_hash trick for detecting Lambda code changes

Web-Based Apps (DeVILStarter & DeVILSpectator)

React

Why it matters: DeVILStarter's UI is React. DeVILSpectator (when completed) is also React.

Resources:

Guides and docs:

Videos and courses:

Key Concepts for DeVILStarter:

  • useState and useEffect hooks for managing UI state
  • Event handling from the Go backend (EventsOn from @wailsapp/runtime)
  • Async/await for calling Go functions

TypeScript

Why it matters: All web code is written in strict TypeScript. Type safety prevents an entire class of runtime bugs.

Resources:

Guides and docs:

Videos and courses:

Books:


Version Control & Deployment Tooling

Git & Git LFS

Why it matters: Large binary assets (UE5 .uasset files) are stored in Git LFS. Without understanding this, you will corrupt the repository.

Resources:

Guides and docs:

Videos and courses:

Common LFS Mistakes:

  • Cloning without LFS installed → all binary files are just text pointers
  • Forgetting to run git lfs track "*.uasset" before adding a new binary file type
  • Editing binary files in a non-LFS environment → corrupts the pointer

ADB (Android Debug Bridge) & SideQuest

Why it matters: Getting your build onto the Quest headset requires ADB knowledge.

Resources:

Guides and docs:

Videos and courses:

Essential ADB Commands for DeVILSona:

adb devices                          # List connected devices
adb install -r <path/to/app.apk>     # Install/update the APK
adb logcat -s LogTemp                # View UE5 game logs in real time
adb logcat -c                        # Clear the log buffer
adb pull /sdcard/UE4Game/ .          # Pull all game logs to local directory
adb shell pm list packages | findstr "fse100"  # Verify app is installed