Dyslexic
LowFPS

Game Developer & Junior Software Engineer

Thomas Yates

Creating immersive experiences through code and creativity

What I Do

Combining technical skills with creative vision

My Journey

Key milestones in my development career

💼 November 2025
Joined BuiltByUp ↗

Became a Junior Software Engineer

🏆 July 2025
First Game Jam ↗

Created Rot&Root, a physics-based game with working Steam multiplayer

🎓 2024

Joined Access Creative College

Started my journey in game development education

Languages I Know

The programming languages in my toolkit

C#
Python
C++
GDScript
JavaScript
TypeScript
PHP
Vue
HTML/CSS
SQL
Primary
Proficient
Learning

Code Samples

A glimpse into how I write code

Unity
C#
public class PlayerController : MonoBehaviour
{
    [SerializeField] private float moveSpeed = 5f;
    private Rigidbody rb;

    void Start() => rb = GetComponent<Rigidbody>();

    void FixedUpdate()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        Vector3 move = new Vector3(h, 0, v);
        rb.MovePosition(rb.position + move * moveSpeed * Time.fixedDeltaTime);
    }
}
Vue 3
Vue
<template>
  <div class="project-grid">
    <ProjectCard
      v-for="project in filteredProjects"
      :key="project.id"
      :project="project"
      @click="openProject(project)"
    />
  </div>
</template>

<script setup lang="ts">
import { ref, computed } from 'vue'
import type { Project } from '@/types'

const projects = ref<Project[]>([])
const filter = ref('all')

const filteredProjects = computed(() =>
  filter.value === 'all'
    ? projects.value
    : projects.value.filter(p => p.category === filter.value)
)
</script>
Unreal Engine
C++
void AWeaponBase::Fire()
{
    if (!CanFire()) return;

    FHitResult Hit;
    FVector Start = MuzzleComponent->GetComponentLocation();
    FVector End = Start + (GetActorForwardVector() * Range);

    FCollisionQueryParams Params;
    Params.AddIgnoredActor(this);
    Params.AddIgnoredActor(GetOwner());

    if (GetWorld()->LineTraceSingleByChannel(Hit, Start, End, ECC_Visibility, Params))
    {
        if (AActor* HitActor = Hit.GetActor())
        {
            UGameplayStatics::ApplyDamage(HitActor, Damage, GetInstigatorController(), this, DamageType);
        }
    }
    CurrentAmmo--;
}
Unreal Visual
Blueprint
Unreal Blueprint

Let's Connect

Interested in working together or just want to chat? Feel free to reach out.