Guide 11 — MythoClash

Fozaan Sheikh


What you're building

You are Hero. You battle monsters drawn from many mythologies, earn Drachma, and unlock levels. You may skip a fight — but skipping raises the chance the next monster is worse, and you only get three skips.

That fight-or-skip gamble is your design, and it's the whole reason your game isn't just a boss rush. This guide builds it exactly as you pitched it.

You already have pixel art for the hero, a hydra, an Ammit-style crocodile, a wolf, and a serpent, plus a loading-screen banner. Build against those from the start.

Time: about three hours.


1. Before you start


2. Scripts you'll use

Core — Guide B
PlayerController2D · PlayerAnimatorBridge · Health · DamageOnContact · CameraTargetAssigner · SceneLoader · GameManager · AudioManager · HUDController

Combat (Tier 2)
Team · Hurtbox · Hitbox · Knockback · MeleeAttack · Projectile · ProjectileShooter · BossController

Progression (Tier 4)
ChoiceFlagManager · LevelData · LevelSet · LevelProgress · LevelSelectButton · LevelSelectMenu

Saving (Tier 7)
SaveData · SaveSystem

Your signature mechanics (Tier 8)
MonsterEntry · ExperienceWallet · EncounterManager


3. Decide your currency plan first

You have two systems that could both mean "Drachma," and you must pick one. Two things meaning the same currency is a bug factory.

Option How it works Best for
ExperienceWallet (recommended) A simple running total. EncounterManager adds to it on every kill. You read CanAfford / Spend from your level-select buttons. Your game — it matches your pitch's rule that Drachma can't be taken away by monsters
ItemType + LevelProgress Drachma is a collectible; LevelData.unlockCost spends it Games where currency is picked up in the world

This guide uses ExperienceWallet. Your pitch says "Drachma cannot be taken from you, but you can gain more as you fight more opponents" — that's exactly what the wallet does.


4. Build the arena

Your game is one-on-one fights, not platforming levels, so the arena is simple.

  1. A flat floor on Layer → Ground with a collider.
  2. Walls at both edges so nobody falls off.
  3. Two empty GameObjects: PlayerStart (left) and MonsterSpawn (right).
  4. Camera: because the arena is one screen, use a static camera. Main Camera, Orthographic, Size ~5, positioned to frame the whole arena. Don't add CameraTargetAssigner — a camera chasing a fighter in a fixed arena is distracting.

5. Build Hero

Guide B §B1 with your hero sprite:

Component Setting Value
Health Max Health 6
Invulnerability Time 0.8
PlayerController2D Move Speed 7
Jump Force 13

Add Knockback (Stun 0.2, Resistance 0).

Children:

Add MeleeAttack: Hitbox → AttackHitbox, Windup 0.08, Active 0.12, Recovery 0.2, Animator Trigger Attack.


6. Create the monster roster

This is the heart of your content. Right-click in Project → Create → GAME1303 → Monster Entry, once per monster.

Example: the Hydra

Field Value
Monster Name Hydra
Pantheon Greek
Lore Text "Cut one head and two answer. Lerna's curse still breathes."
Portrait your hydra sprite
Monster Prefab see below
Difficulty Tier 3
Max Health 14
Experience Reward 25
Roar Sound a hiss, if you have one

Suggested starting roster

Monster Pantheon Tier Health Reward
Wolf Norse 1 6 10
Serpent Greek 2 9 16
Ammit Egyptian 3 12 22
Hydra Greek 3 14 25
(add more) 4–5 18+ 35+

Spread the tiers. The skip mechanic only works if there's something worse to draw. A roster where everything is tier 3 makes skipping meaningless.

Each monster needs a prefab

  1. Empty GameObject, Tag → Enemy, your monster sprite.
  2. Rigidbody2D (Freeze Rotation Z) + Capsule Collider 2D.
  3. Health — Max Health is overwritten by the MonsterEntry at spawn, but set Invulnerability 0 and Destroy On Death ✗.
  4. Knockback — Resistance 1 for big monsters, 0 for small ones.
  5. Child Hurtbox — Team = Enemy, layer Hurtbox.
  6. Child BodyHitbox — Target Team Player, Damage 1, Repeat Delay 1, layer Hitbox, enabled.
  7. For monsters that attack: add BossController with phases (Guide 7 §9 is the full recipe), or just EnemyChase for a simpler charging monster.

Every monster prefab needs Health and a Hurtbox or it can't be defeated. EncounterManager wires the death event automatically — you don't do that part.


7. Set up the encounter loop

  1. Empty GameObject EncounterManager + the component.
Field Value
Roster drag in all your MonsterEntry assets
Filter By Pantheon Greek (or leave blank for all)
Avoid Immediate Repeats ✓
Spawn Point drag MonsterSpawn
Player Start drag PlayerStart
Base Tier 1
Tier Per Skip 0.8
Max Skips 3
Tier Per Encounter 0.15
Encounters Per World 12
Auto Start ✓
Delay Between Encounters 1.5
  1. Empty GameObject Wallet + ExperienceWallet, Persist Across Scenes ✓, Starting Amount 0.
  2. Add a ChoiceFlagManager and a SaveSystem to the scene.

How the draw works

The threat tier is:

Base Tier + (skips used × 0.8) + (fights cleared × 0.15)

Monsters are then weighted by how close their tier is to that number — so a high threat makes tough monsters likely without making weak ones impossible. Three skips takes you from tier 1 to roughly tier 3.4, which is a real difference.

Tier Per Encounter 0.15 means the game also creeps up as you clear fights, so a twelve-fight world ends harder than it started even if you never skip.


8. Build the fight/skip UI

This is where your design becomes visible. Don't skimp here.

  1. Canvas → Panel named EncounterPanel, centred.
  2. Inside it:
Object Type Shows
MonsterPortrait Image the monster you're about to face
MonsterName TMP Text its name
PantheonText TMP Text which mythology
LoreText TMP Text the flavour line
FightButton Button
SkipButton Button
SkipsRemaining TMP Text Skips: 3
ThreatText TMP Text Threat: 1
  1. A separate always-visible HUD: DrachmaText (Drachma: 0), a health bar, and ProgressText (3 / 12).

Make the risk visible

OnThreatLevelChanged exists specifically so the player can see the gamble. A skip that silently makes things worse isn't a decision — it's a trap. Show the threat number, and make it change colour as it climbs (green → amber → red). If the player can see "Threat: 1 → 2" happen when they skip, skipping becomes a real choice.

Same for SkipsRemaining. Three skips is a resource; treat it like one.


9. Wire it up

On this object Event Drag in Choose
FightButton On Click EncounterManager EncounterManager.ChooseFight
SkipButton On Click EncounterManager EncounterManager.ChooseSkip
EncounterManager On Monster Presented EncounterPanel GameObject.SetActive ✓
EncounterManager On Fight Started EncounterPanel GameObject.SetActive ✗
EncounterManager On Monster Defeated AudioManager PlaySFX (string) → victory
EncounterManager On Out Of Skips AudioManager PlaySFX (string) → denied
EncounterManager On World Cleared GameManager GameManager.LevelComplete
Player → Health On Health Changed HUD HUDController.UpdateHealth (Dynamic)
Wallet → ExperienceWallet On Total Changed (see note)

Rows 3 and 4 are the loop. The panel appears when a monster is presented and hides when the fight starts. Without them the UI covers your fight.

Row 9 note: OnTotalChanged sends an int, and TMP's text wants a string — they don't connect directly. Simplest fix: show Drachma as a row of coin icons you enable, or ask your instructor for the one-line text helper. Same situation Chris has in Guide 5.

The portrait, name, lore and threat texts have the same issue — they need a small display script. Ask for it as one script that takes a MonsterEntry and fills all four fields. That's about eight lines and it's the single most useful custom script in your project.


10. Level select and worlds

Each world is one pantheon. Once one arena works, this is asset creation.

  1. Per world, create a LevelSet (right-click → Create → GAME1303 → Level Set):
    • Set Id greek, Display Name Greek
    • Levels: three LevelData assets
  2. Each LevelData:
    • Level Id greek_1 (never rename this — it's the save key)
    • Scene Name → your arena scene
    • Unlocked From Start ✓ for the first
    • Unlock Cost for later ones — but see the note below
  3. Level select scene: Canvas + Panel with a Grid Layout Group, LevelSelectMenu on it, your LevelSelectButton prefab assigned.

The currency catch

LevelData.unlockCost spends an ItemType through CollectionTracker — not your ExperienceWallet. Since you chose the wallet, set Unlock Cost to 0 on all your LevelData and gate levels by Requires Cleared instead (clear greek_1 to open greek_2).

If you want Drachma to actually buy levels, ask for a small script that checks ExperienceWallet.CanAfford on the button. Four lines. Otherwise, "clear to unlock" is a perfectly good progression and it's zero extra work.


11. First playtest

Build one arena with three monsters in the roster (tiers 1, 2 and 3).

  1. The encounter panel appears with a monster shown.
  2. Fight spawns the monster and the panel hides.
  3. You can hurt it and it can hurt you.
  4. Killing it awards Drachma — check the wallet total goes up.
  5. The next monster is presented after the delay.
  6. Skip works, and the skips counter drops 3 → 2 → 1.
  7. The threat number climbs when you skip.
  8. After three skips, skipping is refused (OnOutOfSkips fires).
  9. Tougher monsters appear more often at high threat. Skip three times and watch what you draw.
  10. After 12 fights, the world clears.

Step 9 is your whole design. If skipping doesn't visibly change what you face, spread your roster's tiers wider.


12. Then add

  1. More monsters. This is your content, and it's pure asset creation.
  2. A second pantheon — a LevelSet with Filter By Pantheon set to Norse.
  3. Boss phases on your bigger monsters (Guide 7 §9).
  4. Dialogue using Guide 10 §5's panel — lore before a fight, a line when you skip.
  5. The loading-screen banner you already made, as a scene between worlds.
  6. Save — you already have SaveSystem; tick Save Flags so cleared monsters persist.

13. Design notes for your game specifically

Show the gamble or it isn't one. This is the single most important note in your guide. OnThreatLevelChanged fires every time the threat moves. If the player can see "Threat: 1" become "Threat: 2" the instant they skip, they're making a decision. If they can't, they're rolling dice blind and the mechanic reads as unfair randomness.

Your roster needs a real spread of tiers. Skipping is only tempting if there's something you'd rather not face, and only risky if there's something worse. Aim for at least one monster at each tier from 1 to 5. Two tier-3 monsters and nothing else means skipping does nothing.

Three skips is a good number — don't raise it. You said so in your pitch and you were right. More than three and a player can skip past every hard fight; fewer and it's not a resource worth thinking about. Twelve fights and three skips means you can dodge a quarter of the game, which is exactly enough to feel like a choice.

Multiple pantheons is your best differentiator. Hades and God of War each commit to one mythology. Yours doesn't, which means a player can meet Fenrir and the Hydra in the same run. Lean into that in the lore text — a line acknowledging the strangeness of these creatures sharing a world is worth writing.

Drachma that can't be taken away is a kind design. It means a bad fight costs you health but never progress. Combined with unlimited retries, your game asks for persistence rather than perfection, and that's a friendlier difficulty curve than the games you cited.


14. Common problems

What you see What's wrong
No monster is presented Roster empty, or Filter By Pantheon doesn't match any entry's Pantheon string
Same monster every time Only one matches your filter, or Avoid Immediate Repeats unticked
Monster spawns but can't be hurt Prefab has no Hurtbox, or teams are the same, or wrong layers
Monster can't be killed Prefab has no Health component
Panel stays up during the fight OnFightStarted → SetActive(false) not wired
Panel never reappears OnMonsterPresented → SetActive(true) not wired
Skipping doesn't change difficulty Tier Per Skip too low, or roster tiers too similar
Skip works forever Max Skips is 0 (meaning unlimited in effect) — set it to 3
Drachma never increases Experience Reward is 0 on your MonsterEntry assets
Drachma resets between scenes Wallet Persist Across Scenes unticked
Level select shows nothing LevelSet has no levels, or Button Prefab unassigned
Cleared levels forget LevelData.levelId was renamed after playtesting

15. Checklist