Early Development Prototype

RiftLink Proximity Chat

A real-time proximity voice chat prototype for League of Legends custom games.

RiftLink is a game companion prototype that connects player distance to voice volume. It combines a position-tracking pipeline, a real-time backend, and a browser-based voice client to create proximity-style communication for custom games.

Project Overview

RiftLink Proximity Chat explores how real-time position data, WebRTC voice communication, and Discord-style lobby features can be combined to create proximity-based communication for custom League of Legends games.

The core architecture for receiving and processing player position data has been defined. The next planned milestone is building the voice communication layer and testing Discord/WebRTC integration for proximity-based audio.

Problem & Solution

The Problem

Normal voice chat treats every player the same. Everyone can hear everyone at equal volume, regardless of where they are in the game. For custom games, that removes spatial tension and makes communication less immersive.

The Solution

RiftLink receives player positions, calculates distances, and sends each voice client a volume value so nearby players sound clear while distant players fade out.

Player positions
Backend engine
Voice clients
Dynamic volume

Architecture

League Custom Game
Spectator Position Source
Position Parser and Coordinate Normalization
Node.js Backend Server with Lobby and Proximity Engine
WebSocket Updates to Browser Voice Clients
WebRTC Voice Layer and Planned Discord Integration

Core Features

Real-Time Position Feed

Receives player coordinates from a spectator-side source and normalizes them into a shared map coordinate system.

Proximity Engine

Calculates player-to-player distances and converts them into smooth audio volume values.

Browser Voice Client

Allows players to join a lobby through a link, enable their microphone, and receive dynamic voice volume updates.

Discord Integration

Planned Discord support for login, lobby invites, user linking, bot commands, and optional channel-movement fallback.

Lobby System

Backend-managed lobbies map browser users to in-game player identities and distribute proximity updates.

Custom-Game Focus

Designed for private League of Legends custom games with friends and experimental gameplay modes.

Development Roadmap

Phase 1 - Position Feed

Define the coordinate model, receive position updates, display players on a test map, and calculate distances.

Phase 2 - Backend Lobby

Create lobbies, add join links, match players to identities, and broadcast proximity updates.

Phase 3 - Voice Prototype

Add microphone support, connect players with WebRTC, and apply dynamic volume locally.

Phase 4 - Discord Integration

Add Discord login, bot commands, lobby invites, identity linking, and channel movement experiments.

Phase 5 - Demo & Polish

Add the dashboard UI, settings, demo video, screenshots, and portfolio-ready testing notes.

Project Details

Project Type

Full-stack real-time prototype

Status

Early development and architecture stage

Focus

Proximity voice, lobbies, and realtime player position logic

Role

System design and full-stack development

Technologies Used

React TypeScript WebRTC Socket.IO Node.js Express Discord.js Discord OAuth2 Tailwind CSS

Proximity Logic

function getVolume(playerA, playerB) {
  const distance = Math.hypot(
    playerA.x - playerB.x,
    playerA.y - playerB.y
  );

  const fullVolumeDistance = 120;
  const maxHearingDistance = 600;

  if (distance <= fullVolumeDistance) return 1;
  if (distance >= maxHearingDistance) return 0;

  return 1 - (distance - fullVolumeDistance)
    / (maxHearingDistance - fullVolumeDistance);
}

Skills Demonstrated

Full-stack Development Real-time Networking WebSockets WebRTC Audio Discord Bot Development System Design Multiplayer Lobby Design

Project Links

GitHub Repository
Demo Coming Soon

Disclaimer

RiftLink is an independent prototype project inspired by custom-game experiences. It is not affiliated with, endorsed by, or connected to Riot Games. The project is designed as a portfolio proof of concept and does not modify the League of Legends client.