top of page

Burn The Witch

Role 

Solo

Date

Oct 2024

Engine

Unity

A gothic pixel platformer where you, as Ursula the witch, cross haunted swamps, cemeteries, and an unholy church to destroy the Bringer of Death and protect the innocent.

Inspiration

The project grew from frustration with the familiar split in media where “wizard” often reads as learned and benign male, while “witch” is shorthand for female evil. Burn the Witch challenges that framing, giving the mantle to a protagonist who is powerful because she cares and disciplined because others depend on her. The historical memory of Salem provides a thematic undercurrent: crowds are easy to marshal when fear leads, and authority often cloaks cruelty in righteousness. This backdrop supports a gothic tone—ruins, candlelit stone, and a sacred space turned profane—delivered through a pixel aesthetic that keeps the world stylized and readable while preserving emotional weight.

Story

Ursula is the last survivor of a small coven of orphaned girls raised by an elderly witch on the edge of town. Their quiet life ended when a warlock–known publicly only as the Bringer of Death–grew jealous of Ursula's innate power. He abducted her sisters, sought to break their spirit for his own rituals, and left them to die. Ursula withdrew even farther from the village, both because she was unwelcome there and because distance kept the warlock's malice away from innocent people. In solitude she trained, and returned with a vow not just to avenge the fallen but to stop the cycle that produced them.


The narrative reclaims “witch” from its common villain coding: in this world, a witch's power is bound to care, responsibility, and the willingness to protect those who fear her. The dead themselves endorse her cause: spirits linger where the living failed them, guiding her path with quiet sentences carved into stone and with crystals that catch the moonlight like waypoints. By the time Ursula confronts the Bringer of Death, her arc has shifted from vengeance to stewardship—she fights to close the wound, not merely to strike back.


  • Precision platforming: Jump across gaps, moving platforms, and hazards with tight, readable control.

  • Gem collection: Pick up gems as optional rewards that subtly guide the optimal path through each stage.

  • One-hit death: Any touch from enemies or projectiles kills Ursula instantly.

  • Fireball combat: Attack at range in the facing direction to clear threats before they close in.

  • Boss objective: Progress through three levels to reach, learn, and defeat the final boss.


Together, these mechanics create a fast, punishment-heavy loop where survival depends on careful movement, smart spacing, and reading enemy and level patterns, rewarding players who master each stage in a clean, uninterrupted run.


Level 

Level 1 Swamp

Ursula’s journey begins in the wet hush of the swamp where she has lived in exile. The marsh lies deep within a forest of overgrown trees and tangled roots, long abandoned by people. Beneath the mud rest countless human remains from an age no one remembers. Early enemies are transformed fauna such as oversized spiders that lunge in sudden bursts, foreshadowing the warlock’s experiments with life long before she reaches his stronghold. This level teaches the player to cast spells, control distance, and avoid lethal contact in order to push through to the next area.


Level 2 Cemetry

The second stage turns silence into counsel. Stone statues stir just enough to speak in brief carved lines when Ursula approaches, and spirits guide her by teaching her to follow the trail of shining gems through the graves. Enemies are hostile giant mice that patrol in fixed, readable routes, demanding carefulness. The background grows heavier here: dark, crowded hills and a deep purplish-red moon hang over the scene, signaling an approaching calamity and building a somber tension as Ursula moves closer to the boss’s domain.


Level 3 Abandoned Church

The third level reveals the truth of the antagonist's power. Stained-glass windows throw fractured color. Enemies here embody a perversion of sanctity: angel-like fliers with rigid, haloed silhouettes and follower wizards who shoot fireballs. The deeper Ursula goes into the church, the clearer it becomes that the church is a manufactory of obedient creatures assembled from the dead and the barely living.


Boss Level: Bringer of Death

The final battle takes place beneath a broken stained-glass window in the church. The Death Bringer has two attack modes: a close-range reap attack and a thunder spell that targets Ursula's location. Players must closely monitor his movements, anticipate both attacks, and continuously fire while weaving through danger. Ursula's years of training have finally paid off; she severely wounds the Grim Reaper and uses her final spell to sever the life force he steals from the living, utterly destroying him. Ursula's path of revenge then shifts from simple vengeance to self-redemption and saving the world he has corrupted.


Technical Design

This section explains how the game runs under the hood: movement, camera, dialogue, environment interaction, enemies, collectibles, and the boss fight.


Player Control & Camera Follow

  • Ursula is driven by a custom PlayerController on a Rigidbody2D with ground checks and direct velocity control for tight platforming. Horizontal input sets the x-velocity within a capped speed; a grounded check (overlap at a foot point) gates jumping; facing is flipped via Y-rotation and reused for spell direction and animation states. Attacks are triggered through input, play an attack animation, and spawn a projectile from a firePoint using SpellScript. Death (enemy collision, hazards, falls) routes through a single handler that swaps layers, stops motion, plays animations/SFX, and calls into GameManager for death UI.

  • CameraFollow tracks Ursula with smoothed horizontal motion and discrete vertical bands so the view is stable but still reveals upper and lower routes. Background elements can follow only on X to create a subtle parallax feel without extra systems.


Dialogue System (Ink Integration)

  • Dialogue uses an Ink-based system wrapped by DialogueManager and DialogueTrigger

  • DialogueTrigger volumes show an interaction icon and call DialogueManager.EnterDialogueMode() when the interact button is pressed with a specific Ink-generated JSON asset.

  • DialogueManager is a singleton that creates an Ink Story from JSON, shows a dialogue canvas, steps lines on E, and parses tags (e.g. speaker:) to update speaker labels. It also displays multiple-choice options via pooled buttons and uses the EventSystem so keyboard/gamepad navigation “just works.” When the story ends, it hides the UI and returns control.


Materials2D: Wind & Fluid Zones

  • Wind zones are implemented as trigger areas using WindTrigger, which starts/stops a wind AudioSource when the player enters or leaves, tying ambience directly to level regions without extra state management.

  • Fluid/swamp areas are defined via tilemaps with colliders and appropriate physics/material settings: visually distinct tiles mark slow/dangerous ground, and movement/penalties are handled through collider configuration plus existing player physics, keeping the system data-driven rather than hard-coded.


Tilemap, Enemies, Spells, Collectibles

  • Levels are built on Unity Tilemaps with 2D colliders for solid ground and hazards. Moving/platform behavior is enhanced by PlatformSticky, which temporarily parents Ursula to moving platforms while she stands on them, preventing sliding or desync.

  • Enemies use EnemyScript and EnemyTrigger on prefabs with Rigidbody2D. They patrol horizontally, flip based on direction, and respond to SuccessfulHit() by playing hurt/death, disabling colliders, and destroying themselves after a delay. Collisions with the player call the shared death routine in PlayerController, keeping fail states consistent.

  • Spells (SpellScript) are spawned from Ursula’s attack animation, move in her facing direction, and destroy themselves on impact or timeout. 

  • Collectibles (CoinCollect) use triggers to increment a gem counter in GameManager, update the UI, play SFX, and self-destroy.


Boss Fight

  • The boss encounter is activated by BossFightStart, which enables the boss object when Ursula enters a trigger, ensuring the fight scene loads seamlessly from exploration.

  • BossScript manages autonomous behavior: it orients toward the player, closes distance when far, and switches between melee and ranged attacks based on horizontal distance bands. Melee attacks check an overlap circle; ranged attacks spawn thunderPrefab with a short delay at the player’s position, using ThunderScript to define the hit zone and call SuccessfulHit() on anything in range.

  • BossHealthScript links the boss’s HP to a UI Slider, initialized from BossScript.HP and updating on every hit. The bar color shifts from green toward red at low health, and the UI is destroyed when HP reaches zero. On death, BossScript plays a dedicated sequence: stop BGM, play boss death SFX, trigger death animation, destroy the boss object after a delay, and notify GameManager to show the win screen.



Arts

Most visual elements are built from online asset packs, selected to match a consistent pixel-based, gothic aesthetic that fits the dark, witch-centric story and echoes classic side-scrolling platformers. The pixel style keeps shapes clear and readable, while the gothic elements support the themes of persecution, corruption, and quiet resilience. This approach lets me focus on composition, lighting, and mood rather than custom asset volume, while maintaining coherence across sources.


References

Arts


Evil Wizard 3 by Luiz Melo

https://assetstore.unity.com/packages/2d/characters/evil-wizard-3-284492


Monsters_Creatures_Fantasy by Luiz Melo

https://assetstore.unity.com/packages/2d/characters/monsters-creatures-fantasy-167949


Bringer Of Death (free) by Clembod

https://assetstore.unity.com/packages/2d/characters/bringer-of-death-free-195719


GothicVania Cemetery by Ansimuz

https://assetstore.unity.com/packages/2d/characters/gothicvania-cemetery-120509


GothicVania Church Pack by Ansimuz

https://assetstore.unity.com/packages/2d/characters/gothicvania-church-pack-147117


GothicVania Swamp by Ansimuz

https://assetstore.unity.com/packages/2d/characters/gothicvania-swamp-152865


Gothicvania Bridge expansion by Ansimuz

https://assetstore.unity.com/packages/2d/environments/gothicvania-bridge-expansion-237630#content


GothicVania Town by Ansimuz

https://assetstore.unity.com/packages/2d/characters/gothicvania-town-101407


2D Pixel Item Asset Pack by Startled Pixels

https://assetstore.unity.com/packages/2d/gui/icons/2d-pixel-item-asset-pack-99645


2D Animated Coin - 2D RPK by Marco Siino

https://assetstore.unity.com/packages/2d/environments/2d-animated-coin-2d-rpk-22009#content


Pixel Art Gem Pack - Animated by karsiori

https://assetstore.unity.com/packages/2d/environments/pixel-art-gem-pack-animated-277559#content


Font

Jacquard 24 by Sarah Cardigan-Fried from Google Fonts

https://fonts.google.com/specimen/Jacquard+24?categoryFilters=Appearance:%2FTheme%2FPixel&query=Jacquard+24 


Jacques Francois by Cyreal

https://fonts.google.com/specimen/Jacques+Francois?query=jac&preview.text=Credits



bottom of page