check me out!
BRENDEN CHOI
DESIGNER
const prefixes = [ "Game", "Character", "Narrative", "Systems" ]; const typingSpeed = 150; const erasingSpeed = 75; const delayBetweenWords = 2000; const typewriter = document.getElementById('typewriter'); let wordIndex = 0; let charIndex = 0; let isDeleting = false; function type() { const currentPrefix = prefixes[wordIndex]; if (!isDeleting) { typewriter.textContent = currentPrefix.substring(0, charIndex + 1); charIndex++; if (charIndex === currentPrefix.length) { isDeleting = true; setTimeout(type, delayBetweenWords); } else { setTimeout(type, typingSpeed); } } else { typewriter.textContent = currentPrefix.substring(0, charIndex - 1); charIndex--; if (charIndex === 0) { isDeleting = false; wordIndex = (wordIndex + 1) % prefixes.length; setTimeout(type, typingSpeed); } else { setTimeout(type, erasingSpeed); } } } setTimeout(() => { type(); }, 5000);
Assistant
const assistantText = document.getElementById('assistantText'); const phrases = { home: 'scroll down to see games ✨', games: 'pick a game and have fun 💖', about: 'learn more about this cute project 🌸', contact: 'come say hi anytime 💌' }; function detectSection() { const url = window.location.href.toLowerCase(); if (url.includes('games')) return phrases.games; if (url.includes('about')) return phrases.about; if (url.includes('contact')) return phrases.contact; return phrases.home; } function typeText(text, speed = 45) { assistantText.textContent = ''; let i = 0; const typing = setInterval(() => { assistantText.textContent += text.charAt(i); i++; if (i >= text.length) { clearInterval(typing); } }, speed); } window.addEventListener('load', () => { const currentPhrase = detectSection(); typeText(currentPhrase); });
/* ========================= CURSOR FOLLOW ========================= */ const cursor = document.querySelector('.cursor'); window.addEventListener('mousemove', (e)=>{ cursor.style.left = e.clientX + 'px'; cursor.style.top = e.clientY + 'px'; }); /* ========================= HOVER EFFECT ========================= */ document.querySelectorAll('a, button').forEach(el => { el.addEventListener('mouseenter', () => { cursor.classList.add('active'); }); el.addEventListener('mouseleave', () => { cursor.classList.remove('active'); }); });

Published Games

Brenden Choi Character Sheet
✦ MY CHARACTER SHEET ✦
BRENDENCHOI
Game Designer

Hi hi ✨ I’m a game designer obsessed with emotional worlds, dreamlike storytelling, cinematic presentation, and cozy atmospheres that feel weirdly nostalgic at 2am. I love crafting characters with personality baked into every tiny detail — from level layouts and soundscapes all the way down to UI vibes and environmental storytelling.

Profile Picturemain character energy
Workspacecurrently creating...

Current Build: Cozy Creative Multiclass

Specializes in immersive worlds, emotionally resonant character design, atmospheric storytelling, and somehow turning portfolio sections into cinematic experiences for absolutely no reason.

☕ caffeine buff
🌙 night owl mode
🎧 soundtrack goblin

INVENTORY

Tools I Use
🎮 Unity
🧩 Unreal Engine
🎨 Blender
🖌 Photoshop
🎼 FL Studio
📜 Twine
🎬 Premiere Pro
✨ After Effects
🕹 Aseprite
🎸 Composition

STAT SPREAD

Skills
Game Design96
Character Design94
Narrative Design95
Worldbuilding98
Sound & Mood92

DISPOSITION

Favorite Games
Life is Strange comfort game energy
NieR: Automata existential crisis simulator
Omori emotional damage but stylish
Persona 5 style stat maxed out
Everhood chaotic rhythm wizardry
Stardew Valley cozy healing hours

QUEST LOG

Current Objective:
Create emotionally immersive worlds where atmosphere, gameplay, music, and storytelling feel inseparable.


Side Quests:
• designing cinematic portfolio experiences
• creating memorable characters
• building cozy dreamlike worlds
• making players stare at scenery for 20 minutes

const starsContainer = document.querySelector('.stars'); for(let i = 0; i < 170; i++){ const star = document.createElement('div'); star.classList.add('star'); star.style.left = Math.random() * 100 + '%'; star.style.top = Math.random() * 100 + '%'; star.style.animationDuration = (4 + Math.random() * 8) + 's'; star.style.animationDelay = Math.random() * 5 + 's'; const size = Math.random() * 4 + 1; star.style.width = size + 'px'; star.style.height = size + 'px'; starsContainer.appendChild(star); }
Brenden Y. Choi - Navigation
function toggleMobileMenu(el) { el.classList.toggle("open"); document.getElementById("mobileMenu").classList.toggle("show"); }
document.addEventListener("DOMContentLoaded", function () { document.querySelectorAll('a[href]').forEach(function (link) { if (link.getAttribute('href').startsWith('http')) { link.setAttribute('target', '_blank'); link.setAttribute('rel', 'noopener noreferrer'); } }); });

Mino, The Volatile Conduit

Meet Mino, my latest League champion concept! A short-range mage who thrives in the chaos of battle, dashing into danger and channeling volatile magic. She doesn’t mind taking a hit, she only gets faster when she’s in the fray!Born into a family of daring artificers in Noxus, Mino embraced the chaos of unstable magic rather than fearing it. Experimenting on herself, she fused volatile energy into her body, becoming a living conduit of raw power.Now, Mino charges headfirst into battle, laughing as each hit makes her faster and more dangerous. Her magic flares uncontrollably in the heat of combat, leaving destruction in her wake. Thriving in the chaos of the crossfire, Mino is a reckless force, embracing the wild power surging within her.


Abilities

Passive – Volatile Core
-------------------------
"The closer to chaos, the stronger the storm."
Each time Mino takes damage from enemy champions, she gains a stack of Overdrive (up to 5). At 5 stacks, she enters Overdrive Mode for 4 seconds, gaining:Bonus movement speedBonus ability hasteAll abilities apply a small AoE explosion on hit
Overdrive has a cooldown per activation.
Visual: Her core crackles and pulses wildly when Overdrive is active.

Q – Arclash
----------------------
"Unstable energy, meet unstable delivery."
Mino dashes a short distance and releases a shockwave at her destination, dealing magic damage in a small cone. If she hits a champion, the cooldown is partially refunded.Damage scales with AP and missing HP of the enemyCan be cast during Overdrive for an enhanced radiusPlaystyle: Her bread-and-butter engage tool; think a mini Ekko dash but with Kled-like chaos.

W – Fracture Field
----------------------
"Reality is soft if you punch hard enough."
Mino punches the ground, creating an unstable energy field that erupts after 1 second, dealing magic damage and briefly slowing enemies caught in the center.If Mino is in Overdrive, the eruption pulls enemies slightly toward the centerThe eruption leaves behind volatile residue for a few seconds: standing in it boosts her movement speedUse: Great for zoning or comboing after Q; very skirmish-heavy utility.

E – Wild Current-----------------------------------------
"Power is momentum. Keep moving."
Passive: Mino gains stacking bonus movement speed for each nearby enemy champion (max 3).Active: Mino releases a chain of lightning between her and the nearest 3 enemies (prioritizes champions). The chain tethers them briefly, dealing damage over time and amplifying damage they take from her.Breaking the tether early deals a burst of damageEnemies who remain tethered are briefly disoriented (minor movement/attack disruption)Identity: Creates chaos in clustered fights—perfect for brawling and forcing action.

R – Cataclysm Spiral
-----------------------------------
"You call it reckless. I call it fun."
Mino channels briefly, then detonates her volatile core in a wide radius around her, dealing massive magic damage and knocking back all enemies to the edge. She then blinks to a selected enemy inside the radius, and recasts to detonate a second pulse after a delay, dealing reduced damage and slowing enemies significantly.If used while in Overdrive, the second explosion has bonus range and true damage scaling on missing HP.Big moment: Think of this as a high-risk, high-reward Kennen meets Ekko ult with a punk twist.