Loot Dungeon is a game built for Loot holders. It allows you to stake your Loot and enter a dungeon. You will encounter a monster and can choose to fight or flee. By defeating monsters you can claim their drops, which are ERC1155 NFTs. Death penalization increases each time someone enters the dungeon, which makes drops harder to get as the game progresses.

All the action is executed in a smart contract on the Ethereum network, so there is no trust involved on a third-party.

When entering a dungeon, you transfer your Loot bag to the Dungeon smart contract. From that point, you have 24 hours to either fight or escape from the encountered monster. If you die in the battle, you lose your Loot unless you pay the Ferryman's fee (starts at 0.05 ETH for mainnet and increases linearly. Be sure to check the current value before entering the dungeon!).

Also by participating you are trusting the correctness of the implementation of the game logic in the smart contract.

The smart contract is not audited, so use it at your own risk. It is fully tested though. The link to the tests will be uploaded soon.

The encountered monster is assigned pseudo-randomly (hash function of the blockhash and the Loot token id). It is taken from the pool of remaining monsters.

Initially, there are 2000 rats, 1000 skeletons, 700 minotaurs, 350 succubus, 100 demons and 50 dragons, so the most likely scenario is that you will encounter a rat. When monsters are defeated they are removed forever from the pool. When the player escapes, the monster is returned to the pool.

Battles are inspired on Dungeon and Dragons dice rolling systems. Every monster has different stats (Hit points (HP), Armor (ARM), Attack (ATK), Agility (AGI), Dexterity (DEX)). The rarer the monster, the higher the stats. Your character also has stats, which are derived from the rarity of your Loot bag. At the start of the battle, a dice is rolled, which determines the seed for all future randomness. We use Chainlink for this random seed generation.

After we have seeded the randomness, we iterate over a maximum of 8 rounds (subject to change). Each round consists of the following:

  • The player rolls a 20-faced dice.
  • The monster rolls a 20-faced dice.
  • If the player roll + the player DEX is lower than the monster AGI, the player misses.
  • If the monster roll + the monster DEX is lower than the player AGI, the monster misses.
When a player or a monster succeeds in hitting, they roll a dice that goes from 1 to their ATK. The damage is calculated as the roll value minus the ARM of the defender.


  • The monster rolls a 4. The player AGI is 10 and the monster DEX is 5. Since (4+5) is less than 10, the monster misses.
  • The player rolls a 5. The monster AGI is 10 and the player DEX is 5. Since (5+5) is greater than or equal to 10, the player hits.
  • The player has 12 ATK, and rolls a 12-faced dice. The player rolls a 5.
  • The monster ARM is 1, so the total damage to the monster is (5-1) = 4.

This is repeated until one of the following conditions are met:

  • The player HP or the monster HP reaches 0 (or less).
  • We reach the round 8.

If the player's HP goes below or equal to 0, the player dies and loses. If the monster HP goes below or equal to 0 and the player survives, the player wins. If the round 8 is reached and there are no causalities, the monster is fatigued and the player wins.

Our initial approach calculated stats by iterating over the Loot items and assigning different values per item and modifier. However, this ended up being too expensive in gas which made it difficult to compute battle results. We switched this to use the same probability function that the original Loot contract so that rarer loots get better stats. We couldn't get as much granularity as we wanted but it was a fair tradeoff.

  • WEAPON: Determines the ATK stat
  • CHEST: Determines the ARM stat
  • HEAD: Determines the HP stat
  • WAIST: Determines the HP stat
  • FOOT: Determines the AGI stat
  • HAND: Determines the DEX stat
  • NECK: Determines a random stat to boost
  • RING: Determines how much the stat is boosted
  • Yes, except for the ARM. If a HEAD armor has the same rarity than a CHEST armor, the amount of HP given by the HEAD will be twice as much as the ARM given by the CHEST. Also, unlike other stats, there are two pieces of armor that add up to HP (HEAD and WAIST).

    Apart from gas costs, these are the fees for participating: Battling an enemy costs 0.02 ETH (this amount is used to cover the Chainlink expenses for getting random numbers). Escaping costs 0.04 ETH ETH. The death penalty is losing your Loot or paying the Ferryman's fee, which starts at 0.05 ETH and increases by 0.005 ETH everytime someone enters the dungeon.

    Nothing happens to you, since death penalties for each player are calculated when entering the dungeon. That means if you see the penalty is at 0.05ETH when entering, that's the amount you will get charged if you die.

    You can fight as many as you want, as long as you don't die. However if you die and revive you can fight again.

    Yes. You can claim a free NFT the first time you escape, and another one the first time you die. Each of these NFTs are claimable once per account.

    The owner of the contract can adjust the following variables: Monster stats, player base stats, fees, and maximum rounds per battle. However, these amounts will only be changed if there's a balancing mistake and as soon as the authors are confident on the values, they will call the `lockFromAdditionalChanges` function which locks the contract from any additional adjustment.

    The owner cannot mint new NFTs, burn NFTs, or take actions in place of the players.

    Please wait a few seconds for any changes and if still nothing happens, you can reload safely. The state is backed up at the smart contract level so never be afraid of reloading the site.

    We used an amazing GAN created by @dribnet called CLIPIT.

    Please go to our Discord and ask!

    Disclaimer: Use at your own risk. The smart contracts involved have not been audited and as such, users might experience partial or permanent loss of funds (or other types of information), delays or errors. No guarantees are being made as to the correctness of these smart contracts and the authors are not liable for any damages made by them or by the user interfaces here provided.