NICO GUTIERREZ GAME PROGRAMMER
VERTICAL SLICE

HÉROE SHOWDOWN

2D MULTIPLAYER ACTION / FIGHTING

ROLE SOLE PROGRAMMER
FRAMEWORK PHASER
PLATFORM PC
TEAM 3 DEVELOPERS
DEVELOPMENT 97 DAYS
Hero Showdown gameplay

FIGHT. COOPERATE. SURVIVE.

Héroe Showdown is a 2D multiplayer action and fighting game built around competitive and cooperative gameplay. Players can face each other in PvP battles or join forces in PvE to defeat waves of enemies and a powerful final boss.

SOLE PROGRAMMER.

I was responsible for all programming in Héroe Showdown, from player controls and combat to game modes, enemies, progression and match flow. Game design decisions were made collaboratively by the three members of the team, while the visual design and art were handled by my teammates.

PROGRAMMING

Complete implementation of the game's systems, mechanics and gameplay logic using Phaser.

GAME DESIGN

Collaborative design of the core gameplay, combat experience and game modes.

SYSTEMS FOR TWO WAYS TO PLAY.

PLAYER SYSTEMS

Player movement, character selection and local controls designed for two players.

COMBAT SYSTEM

Combat logic, health and damage management, including victory and defeat conditions.

GAME MODES

Complete implementation of competitive PvP and cooperative PvE, together with mode selection.

ENEMY SYSTEMS

Enemy behaviour, wave progression and the final boss encounter for the PvE mode.

LEVEL GENERATION

Generation of platforms, obstacles and power-ups used throughout the gameplay experience.

GAME FLOW & FEEDBACK

Score, menus, match flow, animation implementation and sound integration across the game.

PROBLEMS WORTH SOLVING.

As the sole programmer on a three-person team, I owned gameplay, input, wave logic and the online services, including the Phaser plugin that connects the game to Firebase.

CHALLENGE 01

Two players, one keyboard

PROBLEM
Versus and co-op put two players on the same keyboard, each with their own controls, and holding the attack key must not spam attacks.
SOLUTION
A data-driven InputManager: each key map (WASD + F, Arrows + K) is a config object, and every action resolves to a callback. Each scene creates one instance per player. In versus, attacks are edge-triggered: a per-player flag is consumed on attack and only reset when the key is released.
RESULT
Both modes share the same input code, remapping controls is a config change, and holding a key gives exactly one attack.
// src/scenes/Coop.js (excerpt): same class, different key map per player
this.inputManagerPlayer1 = new InputManager({
    scene: this,
    inputConfig: inputConfigs.wasd,  // W A S D + F
    callbacks: {
        left:   () => this.movePlayer(this.player1, "left"),
        right:  () => this.movePlayer(this.player1, "right"),
        action: () => this.shootBullet(this.player1, this.player1CanAttack),
        stop:   () => this.stopPlayer(this.player1)
    }
});
CHALLENGE 02

A wave director for co-op

PROBLEM
Co-op needs difficulty that escalates smoothly, but a Phaser timer event keeps the delay it was created with.
SOLUTION
Each wave schedules the next one. Enemies spawn from a random screen edge, their speed increases, and the delay between waves shrinks by 5% with a 2-second floor. Shots auto-aim at the nearest target (enemy or boss), with a 5-shot magazine and a 2-second reload.
RESULT
Pressure ramps up continuously without scripted levels, and the floor stops late waves from becoming impossible.
// src/scenes/Coop.js (simplified): end of spawnJawaWave()
this.jawaSpeed += this.speedIncrement;
this.spawnDelay = Math.max(this.spawnDelay * this.spawnMultiplier, 2000); // -5%, 2 s floor

this.eventspawnJawaWave?.destroy();
this.eventspawnJawaWave = this.time.addEvent({
    delay: this.spawnDelay,
    callback: this.spawnJawaWave,
    callbackScope: this
});
CHALLENGE 03

Online services and localization in a browser game

PROBLEM
Login, a shared leaderboard and multiple languages had to work in a static web build, without the game scenes depending on network details.
SOLUTION
I implemented the integration on the game's frontend as a Phaser plugin wrapping Firebase: Google, GitHub and anonymous sign-in, plus score storage in Firestore, exposed to every scene through one API. Text is localized at runtime from a translation API, cached in localStorage, and any missing key falls back to the local text.
RESULT
Login and the leaderboard are integrated into the game's architecture, and the game supports multiple languages from one build. A failed or partial translation never breaks the UI.

GAGLE GAMES.

NICOLÁS GUTIERREZ

Programming / Game Design

SANTIAGO ACEVEDO

Art / Game Design

PATRICIO GIUSSANI

Art / Game Design

STARTED SEPTEMBER 05, 2024
COMPLETED DECEMBER 11, 2024
DURATION 97 DAYS
STATUS VERTICAL SLICE

WATCH THE TRAILER.

WANT TO TRY IT?

PLAY HÉROE SHOWDOWN.

NEXT PROJECT GOL RUSH →