Idraluna Archives

Slightly Simplified OD&D Lair Treasure Tables

I find the OD&D lair treasure tables on M&T p. 22 challenging to decipher & use, so I reformatted them in a way that makes more sense to me.

It's not as big as an overhaul as I'd like but maybe (hopefully) it'll be useful to someone.

To generate a lair, just roll a d20 for each line of the table & add the corresponding treasure if the result is less than or equal to the target number.

Here's a pdf:

And here's the Typst source code:

#set page(margin: 0.5in)

#set table(stroke: none, align:(right, left), gutter: 0em)
#set table.cell(inset: 3pt)
#show table.cell: it => {
  set text(size: 11pt) 
  set par(justify: false)
  if it.y==0 {underline(strong(it))}else{it}
}

#show "g.p.": text(fill: rgb(225, 185, 0))[*β˜‰*] // 🜚 or β˜‰
#show "s.p.": text(fill: rgb(155, 159, 170))[*☽*]
#show "c.p.": text(fill: rgb(180, 110, 48))[*♀*]

// Define the treasure tables as variables that can be invoked later, or copy-pasted to manually define treasure for bandits, giants, etc.
#let Aland = [#table(
  columns: (auto, auto),
  table.header([d20], [A (land)]),
  [#[#sym.lt.eq]5], [1d6x1,000 c.p.],
  [#[#sym.lt.eq]6], [1d6x1,000 s.p.],
  [#[#sym.lt.eq]7], [2d6x1,000 g.p.],
   [#[#sym.lt.eq]10], [6d6 gems],
   [#[#sym.lt.eq]10], [6d6 jewelry],
  [#[#sym.lt.eq]8], [3 maps/magic (d4: 1-3 magic item, 4 map)],
  [If Bandits], [1 prisoner / 10 Bandits],
  [If Brigands], [1 important prisoner / 20 Brigands]
)]

#let Awater = [#table(
  columns: (auto, auto),
  table.header([d20], [A (water)]),
  [#[#sym.lt.eq]12], [5d6x1,000 g.p.],
  [#[#sym.lt.eq]12], [1d6x10 gems],
  [#[#sym.lt.eq]12], [1d6x10 jewelry],
  [#[#sym.lt.eq]10], [1 treasure map],
  [If Pirates], [1 prisoner / 10 Pirates],
  [If Buccaneers], [1 important prisoner / 20 Buccaneers]
)]

#let Adesert = [#table(
  columns: (auto, auto),
  table.header([d20], [A (desert)]),
  [#[#sym.lt.eq]4], [1d4x1,000 c.p.],
   [#[#sym.lt.eq]5], [1d4x1,000 s.p.],
   [#[#sym.lt.eq]6], [1d6x1,000 g.p.],
   [#[#sym.lt.eq]10], [10d4 gems],
   [#[#sym.lt.eq]10], [10d4 jewelry],
  [#[#sym.lt.eq]12], [3 magic items],
  [If Nomads], [1 prisoner / 25 Nomads]
)]

#let Btreasure = [#table(
  columns: (auto, auto),
  table.header([d20], [B]),
  [#[#sym.lt.eq]10], [1d8x1,000 c.p.],
  [#[#sym.lt.eq]5], [1d6x1,000 s.p.],
  [#[#sym.lt.eq]5], [1d3x1,000 g.p.],
  [#[#sym.lt.eq]5], [1d6 gems],
  [#[#sym.lt.eq]5], [1d6 jewelry],
  [#[#sym.lt.eq]2], [1 weapon or armor]
)]

#let Ctreasure = [#table(
  columns: (auto, auto),
  table.header([d20], [C]),
  [#[#sym.lt.eq]4], [1d12x1,000 c.p.],
  [#[#sym.lt.eq]6], [1d4x1,000 s.p.],
  [#[#sym.lt.eq]5], [1d4 gems],
  [#[#sym.lt.eq]5], [1d4 jewelry],
  [#[#sym.lt.eq]2], [2 magic items],
  [If Ogres], [1,000 g.p.]
)]

#let Dtreasure = [#table(
  columns: (auto, auto),
  table.header([d20], [D]),
  [#[#sym.lt.eq]2], [1d8x1,000 c.p.],
  [#[#sym.lt.eq]3], [1d12x1,000 s.p.],
  [#[#sym.lt.eq]12], [1d6x1,000 g.p.],
  [#[#sym.lt.eq]6], [1d8 gems],
  [#[#sym.lt.eq]6], [1d8 jewelry],
   [#[#sym.lt.eq]4], [2 magic items & 1 potion]
)]

#let Etreasure = [#table(
  columns: (auto, auto),
  table.header([d20], [E]),
  [#[#sym.lt.eq]1], [1d10x1,000 c.p.],
  [#[#sym.lt.eq]6], [1d12x1,000 s.p.],
  [#[#sym.lt.eq]5], [1d8x1,000 g.p.],
  [#[#sym.lt.eq]2], [1d10 gems],
  [#[#sym.lt.eq]2], [1d10 jewelry],
  [#[#sym.lt.eq]6], [3 magic items & 1 scroll],
  [If Giants], [5,000 g.p.]
)]

#let Ftreasure = [#table(
  columns: (auto, auto),
  table.header([d20], [F]),
  [#[#sym.lt.eq]2], [2d10x1,000 s.p.],
  [#[#sym.lt.eq]9], [1d12x1,000 g.p.],
  [#[#sym.lt.eq]4], [2d12 gems],
  [#[#sym.lt.eq]4], [2d12 jewelry],
  [#[#sym.lt.eq]4], [3 magic items (excluding weapons), 1 potion, & 1 scroll]
)]

#let Gtreasure = [#table(
  columns: ( auto, auto),
  table.header( [d20], [G]),
  [#[#sym.lt.eq]15], [10d4x1,000 g.p.],
   [#[#sym.lt.eq]5], [3d6 gems],
   [#[#sym.lt.eq]5], [1d10 jewelry],
   [#[#sym.lt.eq]8], [4 magic items & 1 scroll]
)]

#let Htreasure = [#table(
  columns: (auto, auto),
  table.header([d20], [H]),
   [#[#sym.lt.eq]5], [3d8x1,000 c.p.],
   [#[#sym.lt.eq]10], [1d100x1,000 s.p.],
  [#[#sym.lt.eq]15], [10d6x1,000 g.p.],
   [#[#sym.lt.eq]10], [1d100 gems],
   [#[#sym.lt.eq]10], [10d4 jewelry],
   [#[#sym.lt.eq]4], [4 magic items, 1 scroll & 1 potion]
)]

#let Itreasure = [#table(
  columns: (auto, auto),
  table.header([d20], [I]),
  [#[#sym.lt.eq]10], [2d8 gems],
  [#[#sym.lt.eq]10], [2d8 jewelry],
  [#[#sym.lt.eq]4], [1 magic item]
)]

=== Lair Treasure Types
To generate a hoard, roll a d20 for _each_ row of a table and include the given quantity of treasure only if the roll is less than or equal to the target number. 

#grid(
  columns: (auto, auto, auto),
  inset: 1em,
  [#Aland],
  [#Adesert],
  [#Awater],
  [#Btreasure],
  [#Ctreasure],
  [#Dtreasure],
  [#Etreasure],
  [#Ftreasure],
  [#Gtreasure],
  [#Htreasure],
  [#Itreasure],
)

#Typst #odnd #random-tables