Crimson Curse

An award-winning, 2–10 player asymmetric survival-horror minigame for Hytale. Features dynamic UI overlays, scaling vampire phases, and fully destructible environment mechanics.

HytaleJavaMinigame
Crimson Curse screenshot

🏆 1st Place Winner: Hytale X Hytale Modding Contest — Horror Minigame Category

Crimson Curse Contest Banner

Night has fallen over the village. Curious villagers have awakened an ancient curse, and now hungry vampires stalk the streets. To survive, the villagers must gather firewood, light the beacons, and break the darkness before it consumes them.

Crimson Curse is an asymmetric survival-horror minigame designed for 2–10 players. Roles are assigned randomly at the start of a match (roughly one vampire for every four players), pitting a team of fragile, resourceful survivors against scaling, supernatural apex predators in a tense 20-minute struggle for survival.

Gameplay Trailer

My Contributions

I built Crimson Curse as part of a four-person team. On the engineering side, PacifictByte and I handled the codebase and programming architecture, while Hawkon and Slamma took charge of the custom art, animation, sound effects, music, and level layouts.

While working closely on core game loops, my primary ownership areas included:

  • Survivor Items HUD: Designed and coded the custom UI overlays.
  • Item Logic & Tuning: Programmed the mechanics and balance for the survivor toolkit (Lantern, Crossbow, Shield, and Bandages).
  • Torch Management Loop: Wrote the custom event system that automatically unlits out your torch if you swap items, forcing players to find fire to light it back up.
  • Configuration & Match Management: Built the in-game configuration window to control game settings.
  • Engine Bug Optimization: Found engine-level crashes tied to Hytale inventory and successfully developed workarounds.

Deep Dive: Hytale Inventory Crashing & Hotbar Restricting

One of the biggest technical roadblocks during development involved stripping the player's main inventory down and locking their interaction to a limited set of active hotbar slots. Using standard API calls to downsize inventory capacities triggered severe, repeatable client crashes.

public void restrictToHotbar(Store<EntityStore> store, Ref<EntityStore> playerRef, int slots) {
    List<ItemStack> overflowItems = new ArrayList<>();
    // Inventory
    InventoryComponent.Storage storageComponent = store.getComponent(
        playerRef, 
        InventoryComponent.Storage.getComponentType()
    );
    
    if (storageComponent != null) {
        storageComponent.ensureCapacity((short) 0, overflowItems);
        storageComponent.markDirty();
    }
    // Hot bar
    InventoryComponent.Hotbar hotbarComponent = store.getComponent(
        playerRef, 
        InventoryComponent.Hotbar.getComponentType()
    );
 
    if (hotbarComponent != null) {
        hotbarComponent.ensureCapacity((short) slots, overflowItems);
        hotbarComponent.markDirty();
    }
}

Uncovered Engine Flaws & Workarounds While this implementation successfully locked the slots down, it exposed several undocumented limitations within Hytale:

  • Selected Slot Crashes: If a player had slot 5 selected when the server restricted their hotbar capacity down to 3 slots, the game immediately crashed the client due to an index out-of-bounds error.
  • Weapon Crashes: Any items marked as a weapon markers caused the game to crash.
  • Input Desynchronization: If a player used their keyboard number row to force-select an invalid higher hotbar slot (e.g., hitting 5 when only 3 slots were allocated), the game failed to validate the reduced hotbar, causing a desync between the local client and the server.
  • Interaction Crashes: Certain world object interactions when in a restricted hotbar state consistently caused gane crashes.

Gameplay Mechanics

Survivors: Light the Beacons

Survivors must find firewood, carry it to the beacons, and light them to weaken the curse. They begin with a torch, but switching items puts it out. To keep pushing forward, they must rekindle it. Survivors cannot kill vampires, but they can fight back, slow them down, and escape.

Survivor Arsenal & HUD

Survivor HUD Layout

ItemTactical Utility
LanternBlinds and pushes vampires away.
CrossbowFires darts that slow vampires.
ShieldHelp survive longer chases and fights.
BandagesConsumable item used to recover health from damage.

Better loot is usually found farther from spawn, rewarding survivors who risk exploring deeper into the village.

Dead survivors drop their items and become spectators.

Vampires: Let the Curse Grow

Vampires must hunt survivors, delay their progress, and stop the beacons from being lit. As the curse grows, vampires unlock new powers:

  • Stage 1: Increased speed and mobility.
  • Stage 2: Break marked walls and destroy hiding spots.
  • Stage 3: Sense nearby survivors.

Core Features & Architecture

  • Asymmetric multiplayer gameplay.
  • Custom map, HUDs, items, models, sounds, and music.
  • Vampire powers and destructible walls.
  • Lobby, matchmaking, multiple instances, and podium.
  • Configurable match settings.

The Team

The Team on the Winner Stand

  • Hawkon
  • RM20
  • PacifictByte
  • Slamma