Skip to content

Instantly share code, notes, and snippets.

@bsidhom
Last active January 7, 2024 00:34
Show Gist options
  • Save bsidhom/b47c7a9a6219ffe9327dc10d7688fb60 to your computer and use it in GitHub Desktop.
Save bsidhom/b47c7a9a6219ffe9327dc10d7688fb60 to your computer and use it in GitHub Desktop.
Extract Gemcraft: Chasing Shadows level metadata
// Extract level metadata from https://gemcraft.fandom.com/wiki/GemCraft_Chapter_2:_Chasing_Shadow_Fields
let extractLevels = () => {
const extractGemTypes = (cell) => {
const anchors = [...cell.querySelectorAll("a")];
return anchors.map((a) => a.title);
};
const extractText = (cell) => {
const s = cell.innerText.trim();
if (s.length == 0) {
return null;
}
return s;
};
const extractLevelInfo = (cells) => {
const field = extractText(cells[1]);
const waves = extractText(cells[2]);
const firstWaveHp = extractText(cells[3]);
const gemTypes = extractGemTypes(cells[4]);
const special = extractText(cells[5]);
const challenge = extractText(cells[6]);
const prereq = cells.length >= 9 ? extractText(cells[8]) : null;
return { field, waves, firstWaveHp, gemTypes, special, challenge, prereq };
};
const rows = [...document.querySelectorAll("table tr:nth-child(n+4)")];
const levelInfo = rows
.map((row) => row.querySelectorAll("td"))
.filter((cells) => cells.length >= 8)
.map(extractLevelInfo);
// NOTE: The data URL below is apparently too large for most browsers, so I
// had to use a BLOB url.
// const url = `data:text/plain;charset=UTF-8,${JSON.stringify(levelInfo)}`;
const json = JSON.stringify(levelInfo);
const blob = new Blob([json], { type: "text/plain;charset=utf8" });
const url = URL.createObjectURL(blob);
window.open(url);
};
#!/usr/bin/env python3
# Find the shortest path to all tome chambers from the starting field (F1).
import argparse
import collections
import json
def main():
parser = argparse.ArgumentParser(
"Find shortest paths to all tome chambers")
parser.add_argument("--file",
help="Levels metadata JSON file",
required=True)
args = parser.parse_args()
levels = read_levels_file(args.file)
chamber_levels = find_tome_chamber_levels(levels)
levels = create_map(levels)
paths = find_shortest_paths("F1", chamber_levels, levels)
paths.sort(key=lambda x: len(x[1]))
for field, path in paths:
level = levels.get(field)
tome = level["special"]
path = [
field if difficulty == "looming" else f"{field}(g)"
for (field, difficulty) in path
]
path_str = "->".join(path)
print(f"{field} ({tome}) {path_str}")
def find_shortest_paths(start, goals, levels):
null = object()
goals = set(goals)
results = []
visited = set()
fringe = collections.deque()
fringe.append((start, ()))
while len(fringe) > 0 and len(goals) > 0:
field, path = fringe.popleft()
if field in visited:
continue
visited.add(field)
if field in goals:
results.append((field, path))
goals.remove(field)
level = levels.get(field)
edges = level.get("edges", null)
if edges is null:
continue
for (next_field, difficulty) in edges:
fringe.append((next_field, path + ((field, difficulty), )))
if len(goals) > 0:
raise Exception(f"unreachable goals: {goals}")
return results
def create_map(levels):
null = object()
levels = {level["field"]: level for level in levels}
for level in levels.values():
parent = level["prereq"]
if parent is None:
continue
if parent.endswith("(glaring)"):
parent = parent.split()[0]
difficulty = "glaring"
else:
difficulty = "looming"
parent = levels.get(parent)
field = level["field"]
edge = (field, difficulty)
edges = parent.get("edges", null)
if edges is null:
parent["edges"] = [edge]
else:
edges.append(edge)
return levels
def find_tome_chamber_levels(levels):
return [
level["field"] for level in levels if level["special"] is not None
and level["special"].lower().startswith("tome chamber")
]
def read_levels_file(fname):
with open(fname) as f:
return json.load(f)
if __name__ == "__main__":
main()
[{"field":"A1","waves":"35","firstWaveHp":"34","gemTypes":["Red - Chain Hit","Blue - Slowing"],"special":null,"challenge":"Don't use any strike spells.","prereq":"E6"},{"field":"A2","waves":"37","firstWaveHp":"38","gemTypes":["Purple - Armor Tearing","Green - Poison"],"special":null,"challenge":"Don't build any towers.","prereq":"A1"},{"field":"A3","waves":"40","firstWaveHp":"47","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Green - Poison"],"special":"Tome Chamber (Armor Tearing)","challenge":"Have 33 gems on the battlefield.","prereq":"A2"},{"field":"A4","waves":"50","firstWaveHp":"41","gemTypes":["Purple - Armor Tearing"],"special":null,"challenge":"Don't have any gem higher than grade 6 on glaring difficulty.","prereq":"A2"},{"field":"A5","waves":"48","firstWaveHp":"49","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit"],"special":null,"challenge":"Don't have any gem higher than grade 4.","prereq":"A3"},{"field":"A6","waves":"60","firstWaveHp":"91","gemTypes":["Yellow - Critical Hit","Blue - Slowing"],"special":null,"challenge":null,"prereq":"A4 (glaring)"},{"field":"A7","waves":"48","firstWaveHp":"49","gemTypes":["Orange - Mana Leeching","Green - Poison","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"A6"},{"field":"V15","waves":"28","firstWaveHp":"24","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit","Black - Bloodbound"],"special":"Vision","challenge":null,"prereq":"A5"},{"field":"B1","waves":"30","firstWaveHp":"32","gemTypes":["Orange - Mana Leeching","Cyan - Suppressing"],"special":null,"challenge":"Beat 60 waves.","prereq":"E7"},{"field":"B2","waves":"25","firstWaveHp":"38","gemTypes":["Red - Chain Hit","Purple - Armor Tearing"],"special":"Story-Related (Markings and \"1 tower + 8 amplifiers\" combo)","challenge":null,"prereq":"B1"},{"field":"B3","waves":"32","firstWaveHp":"35","gemTypes":["Yellow - Critical Hit","Purple - Armor Tearing"],"special":null,"challenge":"Deliver 140 one hit kills.\nDon't use any strike spells.","prereq":"B1"},{"field":"B4","waves":"40","firstWaveHp":"41","gemTypes":["Yellow - Critical Hit","Green - Poison","Blue - Slowing"],"special":null,"challenge":null,"prereq":"B2"},{"field":"B5","waves":"35","firstWaveHp":"37","gemTypes":["Orange - Mana Leeching","Red - Chain Hit","Green - Poison"],"special":"Tome Chamber (Mana Leeching)","challenge":"Break a tomb open before wave 24.","prereq":"B3"},{"field":"B6","waves":"30","firstWaveHp":"79","gemTypes":["Red - Chain Hit","Green - Poison","Cyan - Suppressing"],"special":null,"challenge":null,"prereq":"B1 (glaring)"},{"field":"B7","waves":"46","firstWaveHp":"41","gemTypes":["White - Poolbound","Red - Chain Hit","Black - Bloodbound","Blue - Slowing","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"B4"},{"field":"V21","waves":"26","firstWaveHp":"82","gemTypes":["Yellow - Critical Hit","Red - Chain Hit","Green - Poison","Cyan - Suppressing","Blue - Slowing","Purple - Armor Tearing"],"special":"Vision\n(Features 4 Arcane Guardians)","challenge":null,"prereq":"B7"},{"field":"C1","waves":"45","firstWaveHp":"84","gemTypes":["Green - Poison","Purple - Armor Tearing"],"special":null,"challenge":"Don't use any gem enhancement spells.","prereq":"G3"},{"field":"C2","waves":"50","firstWaveHp":"88","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit"],"special":"Tome Chamber (Fury)\nMysterious Compass","challenge":"Create a grade 9 pure slowing gem.\nHave the giant domination trait set to level 7.","prereq":"C1"},{"field":"C3","waves":"60","firstWaveHp":"90","gemTypes":["Cyan - Suppressing","Blue - Slowing"],"special":null,"challenge":"Beat 75 waves.","prereq":"C2"},{"field":"C4","waves":"60","firstWaveHp":"80","gemTypes":["Red - Chain Hit","Green - Poison","Cyan - Suppressing","Black - Bloodbound","Blue - Slowing","Purple - Armor Tearing"],"special":"Story-Related (Beacons, Indestructible Monster Nests)","challenge":null,"prereq":"C2"},{"field":"C5","waves":"75","firstWaveHp":"82","gemTypes":["Yellow - Critical Hit","Green - Poison"],"special":null,"challenge":"Destroy 2 monster nests before wave 13.","prereq":"C4"},{"field":"C6","waves":"55","firstWaveHp":"102","gemTypes":["Orange - Mana Leeching","Green - Poison","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"C5"},{"field":"C7","waves":"45","firstWaveHp":"162","gemTypes":["White - Poolbound","Green - Poison"],"special":null,"challenge":null,"prereq":"C3"},{"field":"V3","waves":"228","firstWaveHp":"84","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","White - Poolbound","Red - Chain Hit","Green - Poison","Cyan - Suppressing","Black - Bloodbound","Blue - Slowing","Purple - Armor Tearing"],"special":"Vision","challenge":null,"prereq":"C4"},{"field":"D1","waves":"30","firstWaveHp":"42","gemTypes":["Orange - Mana Leeching","Blue - Slowing","Purple - Armor Tearing"],"special":null,"challenge":"Build 18 amplifiers.","prereq":"H3"},{"field":"D2","waves":"36","firstWaveHp":"45","gemTypes":["Red - Chain Hit","Blue - Slowing"],"special":null,"challenge":"Don't spend any points on skills.","prereq":"D1"},{"field":"D3","waves":"32","firstWaveHp":"48","gemTypes":["Yellow - Critical Hit","Green - Poison","Cyan - Suppressing"],"special":null,"challenge":"Don't use any strike or gem enhancement spells.","prereq":"D1"},{"field":"D4","waves":"28","firstWaveHp":"47","gemTypes":["Yellow - Critical Hit","Green - Poison","Cyan - Suppressing","Blue - Slowing"],"special":"Tome Chamber (Beam)","challenge":"Don't have any gem higher than grade 4.","prereq":"D2"},{"field":"D5","waves":"35","firstWaveHp":"52","gemTypes":["Red - Chain Hit","Cyan - Suppressing"],"special":"Tome Chamber (Demolition)","challenge":"Open the tome chamber before wave 12 starts.","prereq":"D3"},{"field":"D6","waves":"54","firstWaveHp":"192","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","White - Poolbound","Red - Chain Hit","Green - Poison","Cyan - Suppressing"],"special":"Secret","challenge":null,"prereq":null},{"field":"D7","waves":"65","firstWaveHp":"284","gemTypes":["Yellow - Critical Hit","Red - Chain Hit","Black - Bloodbound"],"special":null,"challenge":null,"prereq":"D6 (glaring)"},{"field":"V4","waves":"19","firstWaveHp":"24","gemTypes":["Yellow - Critical Hit","Green - Poison"],"special":"Vision","challenge":null,"prereq":"D5"},{"field":"E1","waves":"20","firstWaveHp":"15","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit"],"special":null,"challenge":"Beat 45 waves.\nDon't have any gem higher than grade 1.","prereq":"F4"},{"field":"E2","waves":"22","firstWaveHp":"18","gemTypes":["Orange - Mana Leeching","Purple - Armor Tearing"],"special":null,"challenge":"Don't have any gem higher than grade 4 on glaring difficulty.","prereq":"E1"},{"field":"E3","waves":"24","firstWaveHp":"17","gemTypes":["Yellow - Critical Hit","Cyan - Suppressing"],"special":"Mysterious Compass","challenge":"Don't spend any points on skills on glaring difficulty.","prereq":"E2"},{"field":"E4","waves":"24","firstWaveHp":"30","gemTypes":["Green - Poison"],"special":"Tome Chamber (Poison)","challenge":"Open the tome chamber before wave 7 starts.","prereq":"E2"},{"field":"E5","waves":"33","firstWaveHp":"24","gemTypes":["Yellow - Critical Hit","Purple - Armor Tearing"],"special":"Apparitions Introduced","challenge":null,"prereq":"E4"},{"field":"E6","waves":"30","firstWaveHp":"28","gemTypes":["Orange - Mana Leeching","Red - Chain Hit","Blue - Slowing","Purple - Armor Tearing"],"special":"Wizard Tower (Adaptive Carapace)","challenge":"Create a grade 6 pure mana leeching gem before wave 2.","prereq":"E5"},{"field":"E7","waves":"32","firstWaveHp":"28","gemTypes":["Yellow - Critical Hit","Red - Chain Hit","Green - Poison"],"special":null,"challenge":"Don't have any gem higher than grade 2.","prereq":"E6"},{"field":"E8","waves":"28","firstWaveHp":"38","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"E4"},{"field":"F1","waves":"3","firstWaveHp":"4\nSteam: 10","gemTypes":["Orange - Mana Leeching","Green - Poison","Purple - Armor Tearing"],"special":"Wizard Hideout","challenge":"Don't spend any points on skills on glaring difficulty.\nHave 295 monsters on the battlefield at the same time on field F1.","prereq":null},{"field":"F2","waves":"7","firstWaveHp":"6","gemTypes":["Red - Chain Hit","Blue - Slowing"],"special":null,"challenge":"Create a grade 6 pure bloodbound gem before wave 6.","prereq":"F1"},{"field":"F3","waves":"9","firstWaveHp":"8","gemTypes":["Yellow - Critical Hit","Green - Poison"],"special":null,"challenge":"Don't have any gem higher than grade 3 on glaring difficulty.","prereq":"F2"},{"field":"F4","waves":"16","firstWaveHp":"11","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Purple - Armor Tearing"],"special":"Wizard Tower (Haste)","challenge":"Destroy all wizard locks before wave 2 starts.","prereq":"F3"},{"field":"F5","waves":"11","firstWaveHp":"11","gemTypes":["Cyan - Suppressing","Blue - Slowing","Purple - Armor Tearing"],"special":null,"challenge":"Don't have any gem higher than grade 2.","prereq":"F3"},{"field":"F6","waves":"10","firstWaveHp":"10","gemTypes":["Red - Chain Hit","Green - Poison","Cyan - Suppressing"],"special":"Tome Chamber (Traps)","challenge":"Kill an apparition.","prereq":"F5"},{"field":"F7","waves":"16","firstWaveHp":"18","gemTypes":["Yellow - Critical Hit","Cyan - Suppressing","Blue - Slowing"],"special":null,"challenge":null,"prereq":"F6"},{"field":"V14","waves":"32","firstWaveHp":"423","gemTypes":["Orange - Mana Leeching","Red - Chain Hit","Purple - Armor Tearing"],"special":"Vision","challenge":null,"prereq":"G3"},{"field":"G1","waves":"35","firstWaveHp":"74","gemTypes":["Yellow - Critical Hit","Green - Poison","Blue - Slowing"],"special":"Story-Related (Corrupted Mana Shard)","challenge":null,"prereq":"J3"},{"field":"G2","waves":"40","firstWaveHp":"64","gemTypes":["Orange - Mana Leeching","White - Poolbound","Black - Bloodbound"],"special":"Tome Chamber (Curse)","challenge":"Open 3 drop holders before wave 5.","prereq":"G1"},{"field":"G3","waves":"42","firstWaveHp":"67","gemTypes":["Cyan - Suppressing","Purple - Armor Tearing"],"special":null,"challenge":"Build 60 walls before wave 3.","prereq":"G2"},{"field":"G4","waves":"45","firstWaveHp":"118","gemTypes":["Yellow - Critical Hit","Red - Chain Hit"],"special":null,"challenge":"Use only slowing gems.","prereq":"G5 (glaring)"},{"field":"G5","waves":"50","firstWaveHp":"70","gemTypes":["Green - Poison","Blue - Slowing"],"special":null,"challenge":"Don't use any strike or gem enhancement spells.","prereq":"G2"},{"field":"G6","waves":"43","firstWaveHp":"68","gemTypes":["Orange - Mana Leeching","Red - Chain Hit"],"special":null,"challenge":"Have the swarmling domination trait set to level 7.","prereq":"G1"},{"field":"G7","waves":"52","firstWaveHp":"128","gemTypes":["Orange - Mana Leeching","Green - Poison","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"G4"},{"field":"V16","waves":"46","firstWaveHp":"42","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit","Cyan - Suppressing","Purple - Armor Tearing"],"special":"Vision","challenge":null,"prereq":"G5"},{"field":"H1","waves":"25","firstWaveHp":"28","gemTypes":["Red - Chain Hit","Black - Bloodbound"],"special":"Story-Related (The Scythe Gate)","challenge":"Don't build anything.","prereq":"I5"},{"field":"H2","waves":"30","firstWaveHp":"32","gemTypes":["White - Poolbound","Cyan - Suppressing","Blue - Slowing"],"special":null,"challenge":"Harvest 1.300 mana from shards before wave 2 starts.","prereq":"H1"},{"field":"H3","waves":"40","firstWaveHp":"40","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit","Purple - Armor Tearing"],"special":"Wizard Tower (Giant Domination)\nSpecters Introduced","challenge":"Don't have any gem higher than grade 3.","prereq":"H5"},{"field":"H4","waves":"30","firstWaveHp":"33","gemTypes":["Red - Chain Hit","Green - Poison"],"special":"Tome Chamber (Freeze)","challenge":"Beat 60 waves.","prereq":"H2"},{"field":"H5","waves":"32","firstWaveHp":"38","gemTypes":["Orange - Mana Leeching","Black - Bloodbound"],"special":"Story-Related (Possession Obelisk)","challenge":null,"prereq":"H2"},{"field":"H6","waves":"48","firstWaveHp":"73","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","White - Poolbound","Red - Chain Hit","Green - Poison","Cyan - Suppressing","Black - Bloodbound","Blue - Slowing","Purple - Armor Tearing"],"special":"Secret","challenge":null,"prereq":null},{"field":"H7","waves":"34","firstWaveHp":"38","gemTypes":["Red - Chain Hit","Green - Poison","Cyan - Suppressing","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"V11"},{"field":"V11","waves":"24","firstWaveHp":"7","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit"],"special":"Vision","challenge":null,"prereq":"H4"},{"field":"I1","waves":"15","firstWaveHp":"14","gemTypes":["Yellow - Critical Hit","Red - Chain Hit"],"special":null,"challenge":"Build 19 towers.","prereq":"F4"},{"field":"I2","waves":"18","firstWaveHp":"18","gemTypes":["Green - Poison","Purple - Armor Tearing"],"special":null,"challenge":"Don't spend any points on skills on glaring difficulty.","prereq":"I1"},{"field":"I3","waves":"30","firstWaveHp":"25","gemTypes":["Orange - Mana Leeching","Cyan - Suppressing","Purple - Armor Tearing"],"special":"Tome Chamber (Bolt)","challenge":"Create a grade 6 pure suppressing gem before wave 5.","prereq":"I2"},{"field":"I4","waves":"12","firstWaveHp":"19","gemTypes":["Yellow - Critical Hit","Blue - Slowing"],"special":null,"challenge":"Don't have any gem higher than grade 2.","prereq":"I1"},{"field":"I5","waves":"20","firstWaveHp":"24","gemTypes":["Red - Chain Hit","Cyan - Suppressing"],"special":"Wizard Tower (Mana Lock)\nApparitions Introduced","challenge":null,"prereq":"I4"},{"field":"I6","waves":"30","firstWaveHp":"25","gemTypes":["Orange - Mana Leeching","Green - Poison"],"special":null,"challenge":"Don't have any gem higher than grade 3.","prereq":"I4"},{"field":"I7","waves":"33","firstWaveHp":"28","gemTypes":["Orange - Mana Leeching","Green - Poison","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"I6"},{"field":"V23","waves":"38","firstWaveHp":"64","gemTypes":["White - Poolbound","Green - Poison","Blue - Slowing","Purple - Armor Tearing"],"special":"Vision\n(Features 5 Arcane Guardians)","challenge":null,"prereq":"L7 (glaring)"},{"field":"J1","waves":"35","firstWaveHp":"58","gemTypes":["Green - Poison","Cyan - Suppressing","Blue - Slowing","Purple - Armor Tearing"],"special":null,"challenge":"Beat 60 waves.","prereq":"M6"},{"field":"J2","waves":"45","firstWaveHp":"65","gemTypes":["Red - Chain Hit","Green - Poison","Cyan - Suppressing"],"special":"Story-Related (Possession Obelisk, Tombs)\nMysterious Compass","challenge":null,"prereq":"J1"},{"field":"J3","waves":"60","firstWaveHp":"70","gemTypes":["Orange - Mana Leeching","Blue - Slowing"],"special":"Wizard Tower (Swarmling Domination, many specters)","challenge":"Don't have any gem higher than grade 4.","prereq":"J2"},{"field":"J4","waves":"42","firstWaveHp":"64","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit"],"special":"Tome Chamber (Amplifiers)","challenge":"Don't use any gem enhancement spells.","prereq":"J1"},{"field":"J5","waves":"40","firstWaveHp":"73","gemTypes":["Red - Chain Hit","Purple - Armor Tearing"],"special":null,"challenge":"Don't get any mana from mana shards.","prereq":"J3"},{"field":"J6","waves":"40","firstWaveHp":"73","gemTypes":["Black - Bloodbound","Blue - Slowing","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"V18"},{"field":"V8","waves":"40","firstWaveHp":"24","gemTypes":["Yellow - Critical Hit","Red - Chain Hit","Green - Poison","Black - Bloodbound"],"special":"Vision","challenge":null,"prereq":"J5"},{"field":"V18","waves":"40","firstWaveHp":"80","gemTypes":["Orange - Mana Leeching"],"special":"Vision","challenge":null,"prereq":"J4"},{"field":"K1","waves":"30","firstWaveHp":"46","gemTypes":["Orange - Mana Leeching","Red - Chain Hit","Cyan - Suppressing"],"special":null,"challenge":"Destroy 3 monster nests before wave 7.","prereq":"H3"},{"field":"K2","waves":"32","firstWaveHp":"53","gemTypes":["Green - Poison","Blue - Slowing"],"special":"Mysterious Compass","challenge":"Don't spend any points on skills.","prereq":"K1"},{"field":"K3","waves":"40","firstWaveHp":"68","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit","Green - Poison"],"special":"Story-Related (Ruined Ensnaring Socket)","challenge":"Create a grade 9 pure critical hit gem.","prereq":"K2"},{"field":"K4","waves":"44","firstWaveHp":"60","gemTypes":["Green - Poison","Cyan - Suppressing"],"special":"Wizard Tower (Glaring difficulty)\nShadows Introduced","challenge":"Don't use any strike spells.","prereq":"K3"},{"field":"K5","waves":"42","firstWaveHp":"66","gemTypes":["Yellow - Critical Hit","White - Poolbound","Red - Chain Hit"],"special":null,"challenge":"Harvest 24.000 mana from shards before wave 18 starts.","prereq":"K4"},{"field":"K6","waves":"45","firstWaveHp":"74","gemTypes":["Blue - Slowing"],"special":"Tome Chamber (Slowing)","challenge":"Don't have any gem higher than grade 5 on glaring difficulty.\nOpen the tome chamber before wave 11 starts.","prereq":"K5"},{"field":"K7","waves":"50","firstWaveHp":"74","gemTypes":["Orange - Mana Leeching","Green - Poison","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"K5 (glaring)"},{"field":"V1","waves":"99","firstWaveHp":"38","gemTypes":["Yellow - Critical Hit","Green - Poison","Blue - Slowing"],"special":"Vision","challenge":null,"prereq":"K3"},{"field":"L1","waves":"42","firstWaveHp":"74","gemTypes":["Yellow - Critical Hit","Purple - Armor Tearing"],"special":null,"challenge":"Don't build anything.","prereq":"K4"},{"field":"L2","waves":"30","firstWaveHp":"77","gemTypes":["Green - Poison","Blue - Slowing"],"special":null,"challenge":null,"prereq":"L1"},{"field":"L3","waves":"40","firstWaveHp":"81","gemTypes":["White - Poolbound","Black - Bloodbound"],"special":null,"challenge":"Don't build any towers.","prereq":"L2"},{"field":"L4","waves":"50","firstWaveHp":"83","gemTypes":["Red - Chain Hit","Green - Poison","Blue - Slowing","Purple - Armor Tearing"],"special":null,"challenge":"Create a grade 9 pure poolbound gem.","prereq":"L2"},{"field":"L5","waves":"35","firstWaveHp":"131","gemTypes":["Cyan - Suppressing","Purple - Armor Tearing"],"special":"Story-Related (Ruined Ensnaring Socket)","challenge":"Beat 75 waves.","prereq":"L2 (glaring)"},{"field":"L6","waves":"40","firstWaveHp":"94","gemTypes":["Red - Chain Hit"],"special":"Tome Chamber (Poolbound)","challenge":null,"prereq":"L3"},{"field":"L7","waves":"55","firstWaveHp":"108","gemTypes":["Orange - Mana Leeching","White - Poolbound","Red - Chain Hit","Black - Bloodbound"],"special":null,"challenge":null,"prereq":"V5"},{"field":"V5","waves":"46","firstWaveHp":"68","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","White - Poolbound","Red - Chain Hit","Green - Poison","Cyan - Suppressing","Black - Bloodbound","Blue - Slowing","Purple - Armor Tearing"],"special":"Vision","challenge":null,"prereq":"L4"},{"field":"M1","waves":"27","firstWaveHp":"32","gemTypes":["Yellow - Critical Hit","Red - Chain Hit","Green - Poison","Blue - Slowing","Orange - Mana Leeching","Purple - Armor Tearing"],"special":"Tome Chamber (True Colors)","challenge":"Don't have any gem higher than grade 3.","prereq":"I5"},{"field":"M2","waves":"30","firstWaveHp":"40","gemTypes":["Orange - Mana Leeching","Purple - Armor Tearing"],"special":null,"challenge":"Build 21 towers before wave 5.","prereq":"M1"},{"field":"M3","waves":"35","firstWaveHp":"44","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Blue - Slowing"],"special":null,"challenge":"Beat 45 waves.","prereq":"M4"},{"field":"M4","waves":"32","firstWaveHp":"50","gemTypes":["White - Poolbound","Red - Chain Hit"],"special":"Story-Related (Sleeping Hive)","challenge":null,"prereq":"M2"},{"field":"M5","waves":"45","firstWaveHp":"50","gemTypes":["Green - Poison","Purple - Armor Tearing"],"special":"Wizard Tower (Steam: Orblets)\nSpecters Introduced","challenge":"Destroy all wizard locks before wave 10 starts.","prereq":"M3"},{"field":"M6","waves":"40","firstWaveHp":"45","gemTypes":["Yellow - Critical Hit","Cyan - Suppressing","Purple - Armor Tearing"],"special":null,"challenge":"Don't spend any points on skills.","prereq":"M5"},{"field":"M7","waves":"36","firstWaveHp":"62","gemTypes":["Red - Chain Hit","Cyan - Suppressing"],"special":null,"challenge":"Kill an apparition.","prereq":"M5"},{"field":"M8","waves":"42","firstWaveHp":"68","gemTypes":["Orange - Mana Leeching","Green - Poison","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"M7"},{"field":"N1","waves":"40","firstWaveHp":"58","gemTypes":["Green - Poison","Cyan - Suppressing"],"special":null,"challenge":"Use only suppressing gems.","prereq":"M5"},{"field":"N2","waves":"40","firstWaveHp":"64","gemTypes":["Orange - Mana Leeching","Blue - Slowing","Purple - Armor Tearing"],"special":null,"challenge":"Kill an apparition.","prereq":"N1"},{"field":"N3","waves":"35","firstWaveHp":"68","gemTypes":["Yellow - Critical Hit","Green - Poison"],"special":null,"challenge":null,"prereq":"N1"},{"field":"N4","waves":"50","firstWaveHp":"72","gemTypes":["Yellow - Critical Hit","Purple - Armor Tearing"],"special":"Tome Chamber (Ignition)","challenge":"Have 22 gems on the battlefield before wave 9.\nUse only poison gems.","prereq":"N3"},{"field":"N5","waves":"30","firstWaveHp":"75","gemTypes":["Orange - Mana Leeching","Red - Chain Hit"],"special":null,"challenge":"Don't build anything.","prereq":"N1"},{"field":"N6","waves":"42","firstWaveHp":"70","gemTypes":["Yellow - Critical Hit","Red - Chain Hit","Black - Bloodbound"],"special":null,"challenge":"Don't use any strike or gem enhancement spells.","prereq":"N2"},{"field":"N7","waves":"44","firstWaveHp":"97","gemTypes":["Yellow - Critical Hit","White - Poolbound"],"special":"Secret","challenge":"Have the Hatred trait set to level 3 or higher.","prereq":null},{"field":"V10","waves":"36","firstWaveHp":"25","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit","Green - Poison","Blue - Slowing"],"special":"Vision","challenge":null,"prereq":"N6"},{"field":"O1","waves":"50","firstWaveHp":"78","gemTypes":["Black - Bloodbound","Purple - Armor Tearing"],"special":"Story-Related (Ruined Ensnaring Socket)","challenge":null,"prereq":"K4"},{"field":"O2","waves":"30","firstWaveHp":"74","gemTypes":["Orange - Mana Leeching","Blue - Slowing"],"special":"Story-Related (Corrupted Mana Shard)","challenge":"Don't get any mana from mana shards on glaring difficulty.","prereq":"O1"},{"field":"O3","waves":"39","firstWaveHp":"77","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit"],"special":"Mysterious Compass","challenge":"Don't use any gem enhancement spells.","prereq":"O2"},{"field":"O4","waves":"43","firstWaveHp":"79","gemTypes":["White - Poolbound","Cyan - Suppressing","Black - Bloodbound"],"special":null,"challenge":null,"prereq":"O2"},{"field":"O5","waves":"48","firstWaveHp":"77","gemTypes":["Yellow - Critical Hit","White - Poolbound","Red - Chain Hit","Black - Bloodbound"],"special":"Story-Related (Sealed Gem of Eternity Replica)","challenge":null,"prereq":"O4"},{"field":"O6","waves":"60","firstWaveHp":"80","gemTypes":["Green - Poison","Cyan - Suppressing","Blue - Slowing","Purple - Armor Tearing"],"special":"Wizard Tower (Corrupted Banishment)\nSpires Introduced","challenge":"Destroy all wizard locks before wave 18 starts.\nUse only bloodbound gems.","prereq":"O5"},{"field":"O7","waves":"44","firstWaveHp":"84","gemTypes":["White - Poolbound","Cyan - Suppressing","Black - Bloodbound","Blue - Slowing"],"special":null,"challenge":null,"prereq":"O3"},{"field":"V20","waves":"45","firstWaveHp":"78","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit","Green - Poison","Cyan - Suppressing","Purple - Armor Tearing"],"special":"Vision\n(Features 6 Arcane Guardians)","challenge":null,"prereq":"O7"},{"field":"P1","waves":"64","firstWaveHp":"88","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit"],"special":"Story-Related (Ruined Summoning Socket)","challenge":"Use only mana leeching gems.","prereq":"O6"},{"field":"P2","waves":"70","firstWaveHp":"94","gemTypes":["Black - Bloodbound","Blue - Slowing","Purple - Armor Tearing"],"special":"Story-Related (Sealed Gem of Eternity Replica)","challenge":null,"prereq":"P1"},{"field":"P3","waves":"44","firstWaveHp":"102","gemTypes":["White - Poolbound","Red - Chain Hit","Cyan - Suppressing","Blue - Slowing"],"special":"Tome Chamber (Barrage)","challenge":null,"prereq":"P1"},{"field":"P4","waves":"25","firstWaveHp":"96","gemTypes":["Orange - Mana Leeching","Purple - Armor Tearing"],"special":"Story-Related (Sleeping Hive)","challenge":null,"prereq":"P3"},{"field":"P5","waves":"57","firstWaveHp":"103","gemTypes":["Red - Chain Hit","Green - Poison","Blue - Slowing"],"special":"Story-Related (Ruined Ensnaring Socket)","challenge":null,"prereq":"P4"},{"field":"P6","waves":"74","firstWaveHp":"223","gemTypes":["Yellow - Critical Hit","White - Poolbound","Green - Poison","Cyan - Suppressing"],"special":"Secret","challenge":"Build 60 walls.","prereq":null},{"field":"P7","waves":"44","firstWaveHp":"143","gemTypes":["Yellow - Critical Hit","Red - Chain Hit","Cyan - Suppressing","Blue - Slowing"],"special":null,"challenge":null,"prereq":"P5"},{"field":"P8","waves":"55","firstWaveHp":"308","gemTypes":["Yellow - Critical Hit","Cyan - Suppressing","Black - Bloodbound","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"P6"},{"field":"V2","waves":"99","firstWaveHp":"52","gemTypes":["Orange - Mana Leeching","Red - Chain Hit"],"special":"Vision","challenge":null,"prereq":"P1"},{"field":"Q1","waves":"45","firstWaveHp":"82","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","White - Poolbound"],"special":null,"challenge":"Have the mana lock trait set to level 7.","prereq":"M7"},{"field":"Q2","waves":"40","firstWaveHp":"89","gemTypes":["Red - Chain Hit","Green - Poison","Purple - Armor Tearing"],"special":null,"challenge":"Use only poolbound gems.","prereq":"Q1"},{"field":"Q3","waves":"50","firstWaveHp":"98","gemTypes":["Orange - Mana Leeching","Red - Chain Hit"],"special":null,"challenge":null,"prereq":"Q2"},{"field":"Q4","waves":"48","firstWaveHp":"96","gemTypes":["Cyan - Suppressing","Blue - Slowing"],"special":null,"challenge":"Harvest 48.000 mana from shards before wave 24 starts.","prereq":"Q2"},{"field":"Q5","waves":"44","firstWaveHp":"110","gemTypes":["Cyan - Suppressing"],"special":"Tome Chamber (Suppressing)","challenge":null,"prereq":"Q3"},{"field":"Q6","waves":"64","firstWaveHp":"115","gemTypes":["Yellow - Critical Hit","Purple - Armor Tearing"],"special":"Wizard Tower (Hatred)\nThe Forgotten can enrage 2-3 wavestones","challenge":null,"prereq":"Q3"},{"field":"Q7","waves":"54","firstWaveHp":"141","gemTypes":["Green - Poison","Blue - Slowing"],"special":"Secret","challenge":"Build 30 traps.","prereq":null},{"field":"Q8","waves":"77","firstWaveHp":"334","gemTypes":["Orange - Mana Leeching","Green - Poison","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"Q7"},{"field":"V7","waves":"40","firstWaveHp":"24","gemTypes":["Yellow - Critical Hit","Green - Poison","Black - Bloodbound","Blue - Slowing"],"special":"Vision","challenge":null,"prereq":"Q4"},{"field":"V19","waves":"38","firstWaveHp":"620","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Cyan - Suppressing","Blue - Slowing"],"special":"Vision\n(Features 5 Arcane Guardians)","challenge":null,"prereq":"Q8"},{"field":"R1","waves":"60","firstWaveHp":"86","gemTypes":["Yellow - Critical Hit"],"special":"Tome Chamber (Critical Hit)","challenge":null,"prereq":"O6"},{"field":"R2","waves":"62","firstWaveHp":"90","gemTypes":["Green - Poison","Blue - Slowing"],"special":null,"challenge":null,"prereq":"R1"},{"field":"R3","waves":"59","firstWaveHp":"106","gemTypes":["Orange - Mana Leeching","Red - Chain Hit","Black - Bloodbound"],"special":"Story-Related (Sealed Gem of Eternity Replica)","challenge":null,"prereq":"R1"},{"field":"R4","waves":"52","firstWaveHp":"97","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","White - Poolbound","Red - Chain Hit","Green - Poison","Cyan - Suppressing","Black - Bloodbound","Blue - Slowing","Purple - Armor Tearing"],"special":null,"challenge":"Use only armor tearing gems.","prereq":"R1"},{"field":"R5","waves":"63","firstWaveHp":"101","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","White - Poolbound","Red - Chain Hit"],"special":"Story-Related (Ruined Ensnaring Socket)","challenge":null,"prereq":"R2"},{"field":"R6","waves":"61","firstWaveHp":"148","gemTypes":["Yellow - Critical Hit","Red - Chain Hit","Green - Poison","Cyan - Suppressing","Blue - Slowing"],"special":null,"challenge":null,"prereq":"R2 (glaring)"},{"field":"R7","waves":"51","firstWaveHp":"101","gemTypes":["White - Poolbound","Green - Poison","Black - Bloodbound","Blue - Slowing"],"special":null,"challenge":null,"prereq":"V17"},{"field":"R8","waves":"64","firstWaveHp":"186","gemTypes":["White - Poolbound","Red - Chain Hit","Cyan - Suppressing","Black - Bloodbound","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"R3"},{"field":"V13","waves":"40","firstWaveHp":"134","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","White - Poolbound","Green - Poison","Cyan - Suppressing","Black - Bloodbound"],"special":"Vision","challenge":null,"prereq":"R6"},{"field":"T1","waves":"56","firstWaveHp":"125","gemTypes":["Green - Poison","Blue - Slowing"],"special":"Story-Related (Corpse of a Fellow Wizard)\nWake of Eternity","challenge":"Don't build any towers.","prereq":"Q6"},{"field":"T2","waves":"60","firstWaveHp":"142","gemTypes":["Yellow - Critical Hit","Red - Chain Hit"],"special":null,"challenge":null,"prereq":"T1"},{"field":"T3","waves":"66","firstWaveHp":"156","gemTypes":["Yellow - Critical Hit","Green - Poison"],"special":null,"challenge":"Have the haste trait set to level 7.","prereq":"T4"},{"field":"T4","waves":"47","firstWaveHp":"176","gemTypes":["Orange - Mana Leeching","White - Poolbound","Cyan - Suppressing","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"T2"},{"field":"T5","waves":"70","firstWaveHp":"170","gemTypes":["Orange - Mana Leeching","Red - Chain Hit"],"special":"Tome Chamber (Resonance)","challenge":"Use only critical hit gems.","prereq":"T3"},{"field":"T6","waves":"70","firstWaveHp":"180","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Green - Poison","Blue - Slowing","Purple - Armor Tearing"],"special":"Wizard Tower (Haunting difficulty)\nThe Forgotten can now blacken the UI","challenge":null,"prereq":"T3"},{"field":"T7","waves":"68","firstWaveHp":"193","gemTypes":["Cyan - Suppressing","Blue - Slowing"],"special":"Story-Related (Broken Orb Base, Corpse of a Fellow Wizard, lots of Apparitions)","challenge":"Destroy 8 beacons before wave 15.","prereq":"T6"},{"field":"T8","waves":"75","firstWaveHp":"188","gemTypes":["Yellow - Critical Hit","Green - Poison","Black - Bloodbound"],"special":"Story-Related (Sealed Gem of Eternity Replica)","challenge":null,"prereq":"T7"},{"field":"T9","waves":"73","firstWaveHp":"236","gemTypes":["Orange - Mana Leeching","Green - Poison","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"T8 (glaring)"},{"field":"V22","waves":"40","firstWaveHp":"449","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit","Blue - Slowing","Purple - Armor Tearing"],"special":"Vision\n(Features 7 Arcane Guardians)","challenge":null,"prereq":"T1"},{"field":"U1","waves":"60","firstWaveHp":"118","gemTypes":["Orange - Mana Leeching","Cyan - Suppressing","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"Q6"},{"field":"U2","waves":"50","firstWaveHp":"125","gemTypes":["Orange - Mana Leeching","Red - Chain Hit","Green - Poison"],"special":null,"challenge":null,"prereq":"U1"},{"field":"U3","waves":"54","firstWaveHp":"132","gemTypes":["Blue - Slowing","Purple - Armor Tearing"],"special":"Most intact tombs","challenge":null,"prereq":"U1"},{"field":"U4","waves":"67","firstWaveHp":"141","gemTypes":["Yellow - Critical Hit","Red - Chain Hit","Green - Poison","Cyan - Suppressing"],"special":"Story-Related (Sleeping Hive)\nMysterious Compass","challenge":null,"prereq":"U3"},{"field":"U5","waves":"51","firstWaveHp":"136","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Blue - Slowing"],"special":null,"challenge":null,"prereq":"U2"},{"field":"U6","waves":"66","firstWaveHp":"142","gemTypes":["Orange - Mana Leeching","White - Poolbound"],"special":"Story-Related (Ruined Ensnaring Socket)","challenge":null,"prereq":"U5"},{"field":"U7","waves":"42","firstWaveHp":"200","gemTypes":["Green - Poison","Cyan - Suppressing","Black - Bloodbound"],"special":null,"challenge":null,"prereq":"U6 (glaring)"},{"field":"U8","waves":"36","firstWaveHp":"121","gemTypes":["Orange - Mana Leeching","Green - Poison","Purple - Armor Tearing"],"special":"Tome Chamber (Chain Hit)","challenge":null,"prereq":"U4"},{"field":"V6","waves":"29","firstWaveHp":"35","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Cyan - Suppressing","Black - Bloodbound","Blue - Slowing"],"special":"Vision","challenge":null,"prereq":"U7"},{"field":"W1","waves":"57","firstWaveHp":"114","gemTypes":["Orange - Mana Leeching","Green - Poison","Blue - Slowing","Purple - Armor Tearing"],"special":null,"challenge":"Use only chain hit gems.","prereq":"R5"},{"field":"W2","waves":"56","firstWaveHp":"101","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"W1"},{"field":"W3","waves":"77","firstWaveHp":"143","gemTypes":["Orange - Mana Leeching","White - Poolbound","Red - Chain Hit","Black - Bloodbound"],"special":null,"challenge":null,"prereq":"W2 (glaring)"},{"field":"W4","waves":"72","firstWaveHp":"117","gemTypes":["Black - Bloodbound"],"special":"Story-Related (Sealed Gem of Eternity Replica)","challenge":null,"prereq":"W2"},{"field":"W5","waves":"72","firstWaveHp":"122","gemTypes":["Green - Poison","Cyan - Suppressing","Black - Bloodbound"],"special":"Tome Chamber (Bloodbound)","challenge":null,"prereq":"W2"},{"field":"W6","waves":"72","firstWaveHp":"126","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","White - Poolbound","Green - Poison","Black - Bloodbound","Blue - Slowing","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"W2"},{"field":"W7","waves":"84","firstWaveHp":"197","gemTypes":["Orange - Mana Leeching","Red - Chain Hit","Blue - Slowing","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"W3"},{"field":"V17","waves":"48","firstWaveHp":"76","gemTypes":["Yellow - Critical Hit","Red - Chain Hit","Green - Poison","Black - Bloodbound","Purple - Armor Tearing"],"special":"Vision","challenge":null,"prereq":"W4"},{"field":"X1","waves":"70","firstWaveHp":"200","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","White - Poolbound","Red - Chain Hit","Green - Poison","Cyan - Suppressing","Black - Bloodbound","Blue - Slowing","Purple - Armor Tearing"],"special":"Story-Related (Towers controlled from inside the Spiritforge)","challenge":null,"prereq":"T7"},{"field":"X2","waves":"72","firstWaveHp":"215","gemTypes":["White - Poolbound","Red - Chain Hit","Cyan - Suppressing"],"special":"Story-Related (Possession Obelisk)","challenge":null,"prereq":"X1"},{"field":"X3","waves":"75","firstWaveHp":"250","gemTypes":["Green - Poison","Black - Bloodbound","Blue - Slowing"],"special":"Story-Related (Corrupted Mana Shard)","challenge":null,"prereq":"X2"},{"field":"X4","waves":"90","firstWaveHp":"280","gemTypes":["Yellow - Critical Hit","Green - Poison","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"X3"},{"field":"X5","waves":"99","firstWaveHp":"299","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","White - Poolbound","Red - Chain Hit","Green - Poison","Cyan - Suppressing","Black - Bloodbound","Blue - Slowing","Purple - Armor Tearing"],"special":"Story-Related (Climax Level, lots of Apparitions and Specters)\nChasing Shadows","challenge":null,"prereq":"X4"},{"field":"X6","waves":"78","firstWaveHp":"222","gemTypes":["Green - Poison","Black - Bloodbound","Blue - Slowing"],"special":"Secret","challenge":null,"prereq":null},{"field":"X7","waves":"70","firstWaveHp":"220","gemTypes":["Orange - Mana Leeching","Cyan - Suppressing","Black - Bloodbound"],"special":"Mysterious Compass","challenge":null,"prereq":"X4"},{"field":"V12","waves":"32","firstWaveHp":"24","gemTypes":["White - Poolbound","Red - Chain Hit","Cyan - Suppressing","Black - Bloodbound"],"special":"Vision","challenge":null,"prereq":"X7"},{"field":"Y1","waves":"50","firstWaveHp":"180","gemTypes":["Green - Poison","Cyan - Suppressing"],"special":null,"challenge":null,"prereq":"X2"},{"field":"Y2","waves":"62","firstWaveHp":"195","gemTypes":["Yellow - Critical Hit","Red - Chain Hit"],"special":null,"challenge":null,"prereq":"Y1"},{"field":"Y3","waves":"56","firstWaveHp":"210","gemTypes":["White - Poolbound"],"special":null,"challenge":null,"prereq":"Y2"},{"field":"Y4","waves":"90","firstWaveHp":"230","gemTypes":["Yellow - Critical Hit","Green - Poison"],"special":null,"challenge":null,"prereq":"X5"},{"field":"Y5","waves":"94","firstWaveHp":"268","gemTypes":["Orange - Mana Leeching","Red - Chain Hit"],"special":null,"challenge":null,"prereq":"Y4"},{"field":"Y6","waves":"98","firstWaveHp":"300","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","White - Poolbound","Red - Chain Hit","Green - Poison","Cyan - Suppressing","Black - Bloodbound","Blue - Slowing","Purple - Armor Tearing"],"special":"Story-Related (Final Level)\nPermanent +10 Wake of Eternity Skill Level","challenge":null,"prereq":"Y5"},{"field":"Y7","waves":"77","firstWaveHp":"170","gemTypes":["Orange - Mana Leeching","Green - Poison","Purple - Armor Tearing"],"special":null,"challenge":null,"prereq":"Y3"},{"field":"V9","waves":"50","firstWaveHp":"240","gemTypes":["Orange - Mana Leeching","Yellow - Critical Hit","Red - Chain Hit","Purple - Armor Tearing"],"special":"Vision","challenge":null,"prereq":"Y6"}]
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
#!/usr/bin/env bash
set -euo pipefail
function make_dot() {
echo "digraph {"
jq -rM '.[] | (.prereq // "" | test("(glaring)")) as $glaring | (.prereq // "" | match("^(\\S+)") | .captures[0]) as $prereq | if .prereq == null then "\(.field)" else if $glaring then "\($prereq.string) -> \(.field)[label=\"glaring\"]" else "\($prereq.string) -> \(.field)" end end' gemcraft-chasing-shadows-levels.json
echo "}"
}
function main() {
make_dot | dot -Tsvg >graph.svg
}
main "$@"
F6 (Tome Chamber (Traps)) F1->F2->F3->F5
E4 (Tome Chamber (Poison)) F1->F2->F3->F4->E1->E2
I3 (Tome Chamber (Bolt)) F1->F2->F3->F4->I1->I2
M1 (Tome Chamber (True Colors)) F1->F2->F3->F4->I1->I4->I5
H4 (Tome Chamber (Freeze)) F1->F2->F3->F4->I1->I4->I5->H1->H2
A3 (Tome Chamber (Armor Tearing)) F1->F2->F3->F4->E1->E2->E4->E5->E6->A1->A2
B5 (Tome Chamber (Mana Leeching)) F1->F2->F3->F4->E1->E2->E4->E5->E6->E7->B1->B3
D4 (Tome Chamber (Beam)) F1->F2->F3->F4->I1->I4->I5->H1->H2->H5->H3->D1->D2
D5 (Tome Chamber (Demolition)) F1->F2->F3->F4->I1->I4->I5->H1->H2->H5->H3->D1->D3
J4 (Tome Chamber (Amplifiers)) F1->F2->F3->F4->I1->I4->I5->M1->M2->M4->M3->M5->M6->J1
N4 (Tome Chamber (Ignition)) F1->F2->F3->F4->I1->I4->I5->M1->M2->M4->M3->M5->N1->N3
K6 (Tome Chamber (Slowing)) F1->F2->F3->F4->I1->I4->I5->H1->H2->H5->H3->K1->K2->K3->K4->K5
Q5 (Tome Chamber (Suppressing)) F1->F2->F3->F4->I1->I4->I5->M1->M2->M4->M3->M5->M7->Q1->Q2->Q3
G2 (Tome Chamber (Curse)) F1->F2->F3->F4->I1->I4->I5->M1->M2->M4->M3->M5->M6->J1->J2->J3->G1
L6 (Tome Chamber (Poolbound)) F1->F2->F3->F4->I1->I4->I5->H1->H2->H5->H3->K1->K2->K3->K4->L1->L2->L3
R1 (Tome Chamber (Critical Hit)) F1->F2->F3->F4->I1->I4->I5->H1->H2->H5->H3->K1->K2->K3->K4->O1->O2->O4->O5->O6
C2 (Tome Chamber (Fury) Mysterious Compass) F1->F2->F3->F4->I1->I4->I5->M1->M2->M4->M3->M5->M6->J1->J2->J3->G1->G2->G3->C1
U8 (Tome Chamber (Chain Hit)) F1->F2->F3->F4->I1->I4->I5->M1->M2->M4->M3->M5->M7->Q1->Q2->Q3->Q6->U1->U3->U4
P3 (Tome Chamber (Barrage)) F1->F2->F3->F4->I1->I4->I5->H1->H2->H5->H3->K1->K2->K3->K4->O1->O2->O4->O5->O6->P1
T5 (Tome Chamber (Resonance)) F1->F2->F3->F4->I1->I4->I5->M1->M2->M4->M3->M5->M7->Q1->Q2->Q3->Q6->T1->T2->T4->T3
W5 (Tome Chamber (Bloodbound)) F1->F2->F3->F4->I1->I4->I5->H1->H2->H5->H3->K1->K2->K3->K4->O1->O2->O4->O5->O6->R1->R2->R5->W1->W2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment