Vincent Schwier
Open for Roles

Gameplay
Programmer

Already a shipped multiplayer game on Steam. I build server-authoritative gameplay systems that actually work.

16K+
Units Sold
1
Shipped as an Independent Dev
3+
Years Dev
C#
Primary Lang

What I've Built

Other Projects & Jam Work

✦ Finished Solo Developer
Last Chance
Singleplayer Puzzle · Unreal Engine · Blueprints
Last Chance

Puzzle game built to explore modular Blueprint-based systems with reusable interaction components and clean separation of gameplay logic.

UnrealBlueprintsSystems
View details →
✦ Finished Solo Developer
Benny's Adventure
3D Platformer · Unreal Engine · Blueprints
Benny's Adventure

3D platformer focused on player movement and gameplay feel character movement tuning, camera behavior, and Blueprint-driven core mechanics.

UnrealBlueprintsGameplay
View details →
✦ Finished Solo Developer
Estania
Narrative Exploration · Unity · C# · FMOD
Estania

Atmospheric exploration game focused on pacing and storytelling. Audio-driven mood design with FMOD and narrative pacing through gameplay.

UnityC#FMOD
View details →
✦ Finished Solo Developer
Xenite Defender
Tower Defense · Unity · C# · Windows
Xenite Defender

Sci-fi tower defense: build defenses at night to protect xenite mining operations from enemy droid fleets. Core gameplay loop with wave pacing and a simple economy.

UnityC#Tower DefenseStrategy
View details →
✦ Finished Solo Developer
Book of Dreams
2D Platformer · Unity · Pixel Art
Book of Dreams

2D pixel-platformer built to strengthen gameplay fundamentals custom 2D controller, collision and enemy logic, game-feel tuning.

Unity2DGameplay
View details →
🎮 Game Jam Team Project
Reboot Eden
Game Jam · Unity · C# · 5-Day Sprint
Reboot Eden

5-day game jam project created under heavy time pressure. Focused on rapid prototyping, team collaboration, and delivering a complete gameplay loop.

UnityC#Game JamTeam
View details →

How I Think About Problems

Real multiplayer bugs from a shipped game and exactly how I solved them.

Core Philosophy
Problem: Inconsistent game state across clients
Principle: Server owns all gameplay truth
Result: Deterministic, debuggable behavior
Every game state transition flows: client input → ServerRpc validation → ObserversRpc broadcast → client UI update. Clients never trust themselves.
Production Bug: Meeting Desync
Bug: Players saw different meeting states
Root cause: Client-side UI triggered events
Fix: Moved trigger to server-driven event system
Result: Consistent state across all clients
Found in production from player reports. Diagnosed via log comparison across clients, fixed within 48h.
Production Code — Voting System (Undercover)
Handles voting, skip logic, tie resolution, and broadcasts results to all clients. Key challenge: preventing any desync in outcomes. Solution: all decision logic runs exclusively server-side.
public enum VoteResultType { PlayerVotedOut, Tie, Skipped }

public class VoteResult
{
    public VoteResultType ResultType;
    public PlayerMovement VotedPlayer;
}

public class VotingSystem
{
    private readonly List<PlayerMovement> _players;

    public VotingSystem(List<PlayerMovement> players) => _players = players;

    public VoteResult CalculateResult(int skipVotes)
    {
        PlayerMovement topPlayer = null;

        foreach (var player in _players)
        {
            if (topPlayer == null || player.votes.Value > topPlayer.votes.Value)
                topPlayer = player;
        }

        bool isTie = _players.Any(p =>
            p != topPlayer && p.votes.Value == topPlayer.votes.Value);

        bool skipWins = skipVotes > topPlayer.votes.Value;

        if (skipWins)
            return new VoteResult { ResultType = VoteResultType.Skipped };

        if (isTie || skipVotes == topPlayer.votes.Value)
            return new VoteResult { ResultType = VoteResultType.Tie };

        return new VoteResult
        {
            ResultType = VoteResultType.PlayerVotedOut,
            VotedPlayer = topPlayer
        };
    }
}
Disconnect Handling Strategy
Host disconnects: Session terminates cleanly
Client disconnects: Treated as vote skip / removal
No ghost players: Server prunes instantly
Goal: Keep state simple, never corrupt
What I Learned Shipping Multiplayer
• Client authority = bugs you can't reproduce
• Every async operation needs a timeout path
• Log everything on the server, players don't
• Design for disconnects from day one

Technical Toolkit

🎮
Game Engines
  • Unity (primary, 3+ yrs)
  • C# scripting
  • Unreal Engine
  • Blueprints
🔗
Networking
  • Client-Server architecture
  • FishNet framework
  • ServerRpc / ObserversRpc
  • State synchronization
Systems
  • State machines
  • Gameplay loop design
  • Event-driven architecture
  • Disconnect handling
🛠
Platform & Tools
  • Steamworks SDK
  • Steam lobby / matchmaking
  • Git / GitHub
  • Post-release maintenance

Background

I'm a game development student and solo developer who shipped a multiplayer game on Steam, from blank project to 16,000+ sales. That means I've dealt with real networking bugs, real player feedback, and real post-release pressure.

My specialization is multiplayer gameplay systems. I care deeply about server-authoritative design because I've seen firsthand what happens when clients trust themselves: desync, exploits, and bugs nobody can reproduce.

I'm looking for a Junior Gameplay Programmer role where I can keep building real systems, learn from experienced developers, and contribute to games people actually play.

Status
✦ Open for Roles
Specialization
Multiplayer / Gameplay Systems
Primary Engine
Unity (C#)
Secondary Engine
Unreal Engine (Blueprints)
LinkedIn

Let's Talk

I'm actively looking for Gameplay Programmer positions. Reach out anytime.