mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
Terraria: 1.4.4 and Calamity support (#3847)
* Terraria integration * Precollected items for debugging * Fix item classification * Golem requires Plantera's Bulb * Pumpkin Moon requires Dungeon * Progressive Dungeon * Reorg, Options.py work * Items are boss flags * Removed unused option * Removed nothing * Wall, Plantera, and Zenith goals * Achievements and items * Fixed The Cavalry and Completely Awesome achievements * Made "Dead Men Tell No Tales" a grindy achievement * Some docs, Python 3.8 compat * docs * Fix extra item and "Head in the Clouds" being included when achievements are disabled * Requested changes * Fix potential thread unsafety, replace Nothing with 50 Silver * Remove a log * Corrected heading * Added incompatible mods list * In-progress calamity integration * Terraria events progress * Rules use events * Removed an intentional crash I accidentally left in * Fixed infinite loop * Moved rules to data file * Moved item rewards to data file * Generating from data file * Fixed broken Mech Boss goal * Changes Calamity makes to vanilla rules, Calamity final bosses goal * Added Deerclops, fixed Zenith goal * Final detailed vanilla pass * Disable calamity goals * Typo * Fixed some reward items not adding to item pool * In-progress unit test fixes * Unit test fixes * `.apworld` compat * Organized rewards file, made Frog Leg and Fllpper available in vanilla * Water Walking Boots and Titan Glove rewards * Add goals to slot data * Fixed Hammush logic in Post-Mech goal * Fixed coin rewards * Updated Terraria docs * Formatted * Deathlink in-progress * Boots of the Hero is grindy * Fixed zenith goal not placing an item * Address review * Gelatin World Tour is grindy * Difficulty notice * Switched some achievements' grindiness * Added "Hey! Listen!" achievement * Terarria Python 3.8 compat * Fixed Terraria You and What Army logic * Calamity minion accessories * Typo * Calamity integration * `deathlink` -> `death_link` Co-authored-by: Zach Parks <zach@alliware.com> * Missing `.` Co-authored-by: Zach Parks <zach@alliware.com> * Incorrect type annotation Co-authored-by: Zach Parks <zach@alliware.com> * `deathlink` -> `death_link` 2 Co-authored-by: Zach Parks <zach@alliware.com> * Style Co-authored-by: Zach Parks <zach@alliware.com> * Markdown style Co-authored-by: Zach Parks <zach@alliware.com> * Markdown style 2 Co-authored-by: Zach Parks <zach@alliware.com> * Address review * Fix bad merge * Terraria utility mod recommendations * Calamity minion armor logic * ArmorMinions -> Armor Minions, boss rush goal, fixed unplaced item * Fixed unplaced item * Started on Terraria 1.4.4 * Crate logic * getfixedboi, 1.4.4 achievements, shimmer, town slimes, `Rule`, `Condition`, etc * More clam getfixedboi logic, bar decraft logic, `NotGetfixedboi` -> `Not Getfixedboi` * Calamity fixes * Calamity crate ore logic * Fixed item accessibility not generating in getfixedboi, fixed not generating with incompatible options, fixed grindy function * Early achievements, separate achievement category options * Infinity +1 Sword achievement can be location in later goals * The Frequent Flyer is impossible in Calamity getfixedboi * Add Enchanted Sword and Starfury for starting inventories * Don't Dread on Me is redundant in Calamity * In Calamity getfixedboi, Queen Bee summons enemies who drop Plague Cell Canisters * Can't use Gelatin Crystal outside Hallow * You can't get the Terminus without flags * Typo * Options difficult warnings * Robbing the Grave is Hardmode * Don't reserve an ID for unused Victory item * Plantera is accessible early in Calamity via Giant Plantera's Bulbs * Unshuffled Life Crystal and Defender Medal items * Comment about Midas' Blessing * Update worlds/terraria/Options.py Co-authored-by: Scipio Wright <scipiowright@gmail.com> * Remove stray expression Co-authored-by: Scipio Wright <scipiowright@gmail.com> * Review suggestions * Option naming caps consistency, add Laser Drill, Lunatic Cultist alt reqs, fix Eldritch Soul Artifact, Ceaseless Void reqs Dungeon * Cal Clone doesn't drop Broken Hero Sword anymore, Laser Drill is weaker in Calamity Co-authored-by: Seatori <92278897+Seatori@users.noreply.github.com> * Fix Acid Rain logic * Fix XB-∞ Hekate failing accessibility checks (by commenting it out bc it doesn't affect logic) * Hardmode ores being fishable early in Calamity is not a bug anymore * Mecha Mayhem is inaccessible in getfixedboi * Update worlds/terraria/Rules.dsv Co-authored-by: Seafo <92278897+Seatori@users.noreply.github.com> --------- Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com> Co-authored-by: Zach Parks <zach@alliware.com> Co-authored-by: Scipio Wright <scipiowright@gmail.com> Co-authored-by: Seatori <92278897+Seatori@users.noreply.github.com>
This commit is contained in:
@@ -157,24 +157,57 @@ COND_FN = 2
|
|||||||
COND_GROUP = 3
|
COND_GROUP = 3
|
||||||
|
|
||||||
|
|
||||||
|
class Condition:
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
# True = positive, False = negative
|
||||||
|
sign: bool,
|
||||||
|
# See the `COND_*` constants
|
||||||
|
type: int,
|
||||||
|
# Condition name or list
|
||||||
|
condition: Union[str, Tuple[Union[bool, None], List["Condition"]]],
|
||||||
|
argument: Union[str, int, None],
|
||||||
|
):
|
||||||
|
self.sign = sign
|
||||||
|
self.type = type
|
||||||
|
self.condition = condition
|
||||||
|
self.argument = argument
|
||||||
|
|
||||||
|
|
||||||
|
class Rule:
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
name: str,
|
||||||
|
# Name to arg
|
||||||
|
flags: Dict[str, Union[str, int, None]],
|
||||||
|
# True = or, False = and, None = N/A
|
||||||
|
operator: Union[bool, None],
|
||||||
|
conditions: List[Condition],
|
||||||
|
):
|
||||||
|
self.name = name
|
||||||
|
self.flags = flags
|
||||||
|
self.operator = operator
|
||||||
|
self.conditions = conditions
|
||||||
|
|
||||||
|
|
||||||
def validate_conditions(
|
def validate_conditions(
|
||||||
rule: str,
|
rule: str,
|
||||||
rule_indices: dict,
|
rule_indices: dict,
|
||||||
conditions: List[
|
conditions: List[Condition],
|
||||||
Tuple[
|
|
||||||
bool, int, Union[str, Tuple[Union[bool, None], list]], Union[str, int, None]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
):
|
):
|
||||||
for _, type, condition, _ in conditions:
|
for condition in conditions:
|
||||||
if type == COND_ITEM:
|
if condition.type == COND_ITEM:
|
||||||
if condition not in rule_indices:
|
if condition.condition not in rule_indices:
|
||||||
raise Exception(f"item `{condition}` in `{rule}` is not defined")
|
raise Exception(
|
||||||
elif type == COND_LOC:
|
f"item `{condition.condition}` in `{rule}` is not defined"
|
||||||
if condition not in rule_indices:
|
)
|
||||||
raise Exception(f"location `{condition}` in `{rule}` is not defined")
|
elif condition.type == COND_LOC:
|
||||||
elif type == COND_FN:
|
if condition.condition not in rule_indices:
|
||||||
if condition not in {
|
raise Exception(
|
||||||
|
f"location `{condition.condition}` in `{rule}` is not defined"
|
||||||
|
)
|
||||||
|
elif condition.type == COND_FN:
|
||||||
|
if condition.condition not in {
|
||||||
"npc",
|
"npc",
|
||||||
"calamity",
|
"calamity",
|
||||||
"grindy",
|
"grindy",
|
||||||
@@ -182,43 +215,48 @@ def validate_conditions(
|
|||||||
"hammer",
|
"hammer",
|
||||||
"mech_boss",
|
"mech_boss",
|
||||||
"minions",
|
"minions",
|
||||||
|
"getfixedboi",
|
||||||
}:
|
}:
|
||||||
raise Exception(f"function `{condition}` in `{rule}` is not defined")
|
raise Exception(
|
||||||
elif type == COND_GROUP:
|
f"function `{condition.condition}` in `{rule}` is not defined"
|
||||||
_, conditions = condition
|
)
|
||||||
|
elif condition.type == COND_GROUP:
|
||||||
|
_, conditions = condition.condition
|
||||||
validate_conditions(rule, rule_indices, conditions)
|
validate_conditions(rule, rule_indices, conditions)
|
||||||
|
|
||||||
|
|
||||||
def mark_progression(
|
def mark_progression(
|
||||||
conditions: List[
|
conditions: List[Condition],
|
||||||
Tuple[
|
|
||||||
bool, int, Union[str, Tuple[Union[bool, None], list]], Union[str, int, None]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
progression: Set[str],
|
progression: Set[str],
|
||||||
rules: list,
|
rules: list,
|
||||||
rule_indices: dict,
|
rule_indices: dict,
|
||||||
loc_to_item: dict,
|
loc_to_item: dict,
|
||||||
):
|
):
|
||||||
for _, type, condition, _ in conditions:
|
for condition in conditions:
|
||||||
if type == COND_ITEM:
|
if condition.type == COND_ITEM:
|
||||||
prog = condition in progression
|
prog = condition.condition in progression
|
||||||
progression.add(loc_to_item[condition])
|
progression.add(loc_to_item[condition.condition])
|
||||||
_, flags, _, conditions = rules[rule_indices[condition]]
|
rule = rules[rule_indices[condition.condition]]
|
||||||
if (
|
if (
|
||||||
not prog
|
not prog
|
||||||
and "Achievement" not in flags
|
and "Achievement" not in rule.flags
|
||||||
and "Location" not in flags
|
and "Location" not in rule.flags
|
||||||
and "Item" not in flags
|
and "Item" not in rule.flags
|
||||||
):
|
):
|
||||||
mark_progression(
|
mark_progression(
|
||||||
conditions, progression, rules, rule_indices, loc_to_item
|
rule.conditions, progression, rules, rule_indices, loc_to_item
|
||||||
)
|
)
|
||||||
elif type == COND_LOC:
|
elif condition.type == COND_LOC:
|
||||||
_, _, _, conditions = rules[rule_indices[condition]]
|
|
||||||
mark_progression(conditions, progression, rules, rule_indices, loc_to_item)
|
mark_progression(
|
||||||
elif type == COND_GROUP:
|
rules[rule_indices[condition.condition]].conditions,
|
||||||
_, conditions = condition
|
progression,
|
||||||
|
rules,
|
||||||
|
rule_indices,
|
||||||
|
loc_to_item,
|
||||||
|
)
|
||||||
|
elif condition.type == COND_GROUP:
|
||||||
|
_, conditions = condition.condition
|
||||||
mark_progression(conditions, progression, rules, rule_indices, loc_to_item)
|
mark_progression(conditions, progression, rules, rule_indices, loc_to_item)
|
||||||
|
|
||||||
|
|
||||||
@@ -226,29 +264,7 @@ def read_data() -> Tuple[
|
|||||||
# Goal to rule index that ends that goal's range and the locations required
|
# Goal to rule index that ends that goal's range and the locations required
|
||||||
List[Tuple[int, Set[str]]],
|
List[Tuple[int, Set[str]]],
|
||||||
# Rules
|
# Rules
|
||||||
List[
|
List[Rule],
|
||||||
Tuple[
|
|
||||||
# Rule
|
|
||||||
str,
|
|
||||||
# Flag to flag arg
|
|
||||||
Dict[str, Union[str, int, None]],
|
|
||||||
# True = or, False = and, None = N/A
|
|
||||||
Union[bool, None],
|
|
||||||
# Conditions
|
|
||||||
List[
|
|
||||||
Tuple[
|
|
||||||
# True = positive, False = negative
|
|
||||||
bool,
|
|
||||||
# Condition type
|
|
||||||
int,
|
|
||||||
# Condition name or list (True = or, False = and, None = N/A) (list shares type with outer)
|
|
||||||
Union[str, Tuple[Union[bool, None], List]],
|
|
||||||
# Condition arg
|
|
||||||
Union[str, int, None],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
# Rule to rule index
|
# Rule to rule index
|
||||||
Dict[str, int],
|
Dict[str, int],
|
||||||
# Label to rewards
|
# Label to rewards
|
||||||
@@ -379,7 +395,7 @@ def read_data() -> Tuple[
|
|||||||
unexpected(line, char, id, token, pos, POS_FMT, "Rules.dsv")
|
unexpected(line, char, id, token, pos, POS_FMT, "Rules.dsv")
|
||||||
elif pos == COND_OR_SEMI:
|
elif pos == COND_OR_SEMI:
|
||||||
if id == IDENT:
|
if id == IDENT:
|
||||||
conditions.append((sign, COND_ITEM, token, None))
|
conditions.append(Condition(sign, COND_ITEM, token, None))
|
||||||
sign = True
|
sign = True
|
||||||
pos = POST_COND
|
pos = POST_COND
|
||||||
elif id == HASH:
|
elif id == HASH:
|
||||||
@@ -424,14 +440,14 @@ def read_data() -> Tuple[
|
|||||||
)
|
)
|
||||||
condition = operator, conditions
|
condition = operator, conditions
|
||||||
sign, operator, conditions = outer.pop()
|
sign, operator, conditions = outer.pop()
|
||||||
conditions.append((sign, COND_GROUP, condition, None))
|
conditions.append(Condition(sign, COND_GROUP, condition, None))
|
||||||
sign = True
|
sign = True
|
||||||
pos = POST_COND
|
pos = POST_COND
|
||||||
else:
|
else:
|
||||||
unexpected(line, char, id, token, pos, POS_FMT, "Rules.dsv")
|
unexpected(line, char, id, token, pos, POS_FMT, "Rules.dsv")
|
||||||
elif pos == COND:
|
elif pos == COND:
|
||||||
if id == IDENT:
|
if id == IDENT:
|
||||||
conditions.append((sign, COND_ITEM, token, None))
|
conditions.append(Condition(sign, COND_ITEM, token, None))
|
||||||
sign = True
|
sign = True
|
||||||
pos = POST_COND
|
pos = POST_COND
|
||||||
elif id == HASH:
|
elif id == HASH:
|
||||||
@@ -449,7 +465,7 @@ def read_data() -> Tuple[
|
|||||||
unexpected(line, char, id, token, pos, POS_FMT, "Rules.dsv")
|
unexpected(line, char, id, token, pos, POS_FMT, "Rules.dsv")
|
||||||
elif pos == LOC:
|
elif pos == LOC:
|
||||||
if id == IDENT:
|
if id == IDENT:
|
||||||
conditions.append((sign, COND_LOC, token, None))
|
conditions.append(Condition(sign, COND_LOC, token, None))
|
||||||
sign = True
|
sign = True
|
||||||
pos = POST_COND
|
pos = POST_COND
|
||||||
else:
|
else:
|
||||||
@@ -464,10 +480,10 @@ def read_data() -> Tuple[
|
|||||||
if id == LPAREN:
|
if id == LPAREN:
|
||||||
pos = FN_ARG
|
pos = FN_ARG
|
||||||
elif id == SEMI:
|
elif id == SEMI:
|
||||||
conditions.append((sign, COND_FN, function, None))
|
conditions.append(Condition(sign, COND_FN, function, None))
|
||||||
pos = END
|
pos = END
|
||||||
elif id == AND:
|
elif id == AND:
|
||||||
conditions.append((sign, COND_FN, function, None))
|
conditions.append(Condition(sign, COND_FN, function, None))
|
||||||
sign = True
|
sign = True
|
||||||
if operator is True:
|
if operator is True:
|
||||||
raise Exception(
|
raise Exception(
|
||||||
@@ -476,7 +492,7 @@ def read_data() -> Tuple[
|
|||||||
operator = False
|
operator = False
|
||||||
pos = COND
|
pos = COND
|
||||||
elif id == OR:
|
elif id == OR:
|
||||||
conditions.append((sign, COND_FN, function, None))
|
conditions.append(Condition(sign, COND_FN, function, None))
|
||||||
sign = True
|
sign = True
|
||||||
if operator is False:
|
if operator is False:
|
||||||
raise Exception(
|
raise Exception(
|
||||||
@@ -485,21 +501,21 @@ def read_data() -> Tuple[
|
|||||||
operator = True
|
operator = True
|
||||||
pos = COND
|
pos = COND
|
||||||
elif id == RPAREN:
|
elif id == RPAREN:
|
||||||
conditions.append((sign, COND_FN, function, None))
|
conditions.append(Condition(sign, COND_FN, function, None))
|
||||||
if not outer:
|
if not outer:
|
||||||
raise Exception(
|
raise Exception(
|
||||||
f"found `)` at {line + 1}:{char + 1} without matching `(`"
|
f"found `)` at {line + 1}:{char + 1} without matching `(`"
|
||||||
)
|
)
|
||||||
condition = operator, conditions
|
condition = operator, conditions
|
||||||
sign, operator, conditions = outer.pop()
|
sign, operator, conditions = outer.pop()
|
||||||
conditions.append((sign, COND_GROUP, condition, None))
|
conditions.append(Condition(sign, COND_GROUP, condition, None))
|
||||||
sign = True
|
sign = True
|
||||||
pos = POST_COND
|
pos = POST_COND
|
||||||
else:
|
else:
|
||||||
unexpected(line, char, id, token, pos, POS_FMT, "Rules.dsv")
|
unexpected(line, char, id, token, pos, POS_FMT, "Rules.dsv")
|
||||||
elif pos == FN_ARG:
|
elif pos == FN_ARG:
|
||||||
if id == IDENT or id == NUM:
|
if id == IDENT or id == NUM:
|
||||||
conditions.append((sign, COND_FN, function, token))
|
conditions.append(Condition(sign, COND_FN, function, token))
|
||||||
sign = True
|
sign = True
|
||||||
pos = FN_ARG_END
|
pos = FN_ARG_END
|
||||||
else:
|
else:
|
||||||
@@ -527,7 +543,33 @@ def read_data() -> Tuple[
|
|||||||
f"rule `{name}` on line `{line + 1}` shadows a previous rule"
|
f"rule `{name}` on line `{line + 1}` shadows a previous rule"
|
||||||
)
|
)
|
||||||
rule_indices[name] = len(rules)
|
rule_indices[name] = len(rules)
|
||||||
rules.append((name, flags, operator, conditions))
|
rules.append(Rule(name, flags, operator, conditions))
|
||||||
|
|
||||||
|
for flag in flags:
|
||||||
|
if flag not in {
|
||||||
|
"Location",
|
||||||
|
"Item",
|
||||||
|
"Goal",
|
||||||
|
"Early",
|
||||||
|
"Achievement",
|
||||||
|
"Grindy",
|
||||||
|
"Fishing",
|
||||||
|
"Npc",
|
||||||
|
"Pickaxe",
|
||||||
|
"Hammer",
|
||||||
|
"Minions",
|
||||||
|
"Armor Minions",
|
||||||
|
"Mech Boss",
|
||||||
|
"Final Boss",
|
||||||
|
"Getfixedboi",
|
||||||
|
"Not Getfixedboi",
|
||||||
|
"Calamity",
|
||||||
|
"Not Calamity",
|
||||||
|
"Not Calamity Getfixedboi",
|
||||||
|
}:
|
||||||
|
raise Exception(
|
||||||
|
f"rule `{name}` on line `{line + 1}` has unrecognized flag `{flag}`"
|
||||||
|
)
|
||||||
|
|
||||||
if "Item" in flags:
|
if "Item" in flags:
|
||||||
item_name = flags["Item"] or f"Post-{name}"
|
item_name = flags["Item"] or f"Post-{name}"
|
||||||
@@ -558,7 +600,7 @@ def read_data() -> Tuple[
|
|||||||
final_bosses.append(flags["Item"] or f"Post-{name}")
|
final_bosses.append(flags["Item"] or f"Post-{name}")
|
||||||
final_boss_loc.append(name)
|
final_boss_loc.append(name)
|
||||||
|
|
||||||
if (minions := flags.get("ArmorMinions")) is not None:
|
if (minions := flags.get("Armor Minions")) is not None:
|
||||||
armor_minions[name] = minions
|
armor_minions[name] = minions
|
||||||
|
|
||||||
if (minions := flags.get("Minions")) is not None:
|
if (minions := flags.get("Minions")) is not None:
|
||||||
@@ -572,16 +614,19 @@ def read_data() -> Tuple[
|
|||||||
goal_indices[goal] = len(goals)
|
goal_indices[goal] = len(goals)
|
||||||
goals.append((len(rules), set()))
|
goals.append((len(rules), set()))
|
||||||
|
|
||||||
for name, flags, _, _ in rules:
|
for rule in rules:
|
||||||
if "Goal" in flags:
|
if "Goal" in rule.flags:
|
||||||
_, items = goals[
|
if (name := rule.flags.get("Goal")) is not None:
|
||||||
goal_indices[
|
goal_name = name
|
||||||
name.translate(str.maketrans("", "", string.punctuation))
|
else:
|
||||||
|
goal_name = (
|
||||||
|
rule.name.translate(str.maketrans("", "", string.punctuation))
|
||||||
.replace(" ", "_")
|
.replace(" ", "_")
|
||||||
.lower()
|
.lower()
|
||||||
]
|
)
|
||||||
]
|
|
||||||
items.add(name)
|
_, items = goals[goal_indices[goal_name]]
|
||||||
|
items.add(rule.name)
|
||||||
|
|
||||||
_, mech_boss_items = goals[goal_indices["mechanical_bosses"]]
|
_, mech_boss_items = goals[goal_indices["mechanical_bosses"]]
|
||||||
mech_boss_items.update(mech_boss_loc)
|
mech_boss_items.update(mech_boss_loc)
|
||||||
@@ -589,24 +634,27 @@ def read_data() -> Tuple[
|
|||||||
_, final_boss_items = goals[goal_indices["calamity_final_bosses"]]
|
_, final_boss_items = goals[goal_indices["calamity_final_bosses"]]
|
||||||
final_boss_items.update(final_boss_loc)
|
final_boss_items.update(final_boss_loc)
|
||||||
|
|
||||||
for name, _, _, conditions in rules:
|
for rule in rules:
|
||||||
validate_conditions(name, rule_indices, conditions)
|
validate_conditions(rule.name, rule_indices, rule.conditions)
|
||||||
|
|
||||||
for name, flags, _, conditions in rules:
|
for rule in rules:
|
||||||
prog = False
|
prog = False
|
||||||
if (
|
if (
|
||||||
"Npc" in flags
|
"Npc" in rule.flags
|
||||||
or "Goal" in flags
|
or "Goal" in rule.flags
|
||||||
or "Pickaxe" in flags
|
or "Pickaxe" in rule.flags
|
||||||
or "Hammer" in flags
|
or "Hammer" in rule.flags
|
||||||
or "Mech Boss" in flags
|
or "Mech Boss" in rule.flags
|
||||||
or "Minions" in flags
|
or "Final Boss" in rule.flags
|
||||||
or "ArmorMinions" in flags
|
or "Minions" in rule.flags
|
||||||
|
or "Armor Minions" in rule.flags
|
||||||
):
|
):
|
||||||
progression.add(loc_to_item[name])
|
progression.add(loc_to_item[rule.name])
|
||||||
prog = True
|
prog = True
|
||||||
if prog or "Location" in flags or "Achievement" in flags:
|
if prog or "Location" in rule.flags or "Achievement" in rule.flags:
|
||||||
mark_progression(conditions, progression, rules, rule_indices, loc_to_item)
|
mark_progression(
|
||||||
|
rule.conditions, progression, rules, rule_indices, loc_to_item
|
||||||
|
)
|
||||||
|
|
||||||
# Will be randomized via `slot_randoms` / `self.multiworld.random`
|
# Will be randomized via `slot_randoms` / `self.multiworld.random`
|
||||||
label = None
|
label = None
|
||||||
@@ -685,16 +733,15 @@ def read_data() -> Tuple[
|
|||||||
next_id += 1
|
next_id += 1
|
||||||
|
|
||||||
item_name_to_id["Reward: Coins"] = next_id
|
item_name_to_id["Reward: Coins"] = next_id
|
||||||
item_name_to_id["Victory"] = next_id + 1
|
next_id += 1
|
||||||
next_id += 2
|
|
||||||
|
|
||||||
location_name_to_id = {}
|
location_name_to_id = {}
|
||||||
|
|
||||||
for name, flags, _, _ in rules:
|
for rule in rules:
|
||||||
if "Location" in flags or "Achievement" in flags:
|
if "Location" in rule.flags or "Achievement" in rule.flags:
|
||||||
if name in location_name_to_id:
|
if rule.name in location_name_to_id:
|
||||||
raise Exception(f"location `{name}` shadows a previous location")
|
raise Exception(f"location `{rule.name}` shadows a previous location")
|
||||||
location_name_to_id[name] = next_id
|
location_name_to_id[rule.name] = next_id
|
||||||
next_id += 1
|
next_id += 1
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@@ -1,40 +1,70 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from Options import Choice, DeathLink, PerGameCommonOptions
|
from Options import Choice, DeathLink, PerGameCommonOptions, Toggle, DefaultOnToggle
|
||||||
|
|
||||||
|
|
||||||
|
class Calamity(Toggle):
|
||||||
|
"""Calamity mod bosses and events are shuffled"""
|
||||||
|
|
||||||
|
display_name = "Calamity Mod Integration"
|
||||||
|
|
||||||
|
|
||||||
|
class Getfixedboi(Toggle):
|
||||||
|
"""Generation accomodates the secret, very difficult "getfixedboi" seed"""
|
||||||
|
|
||||||
|
display_name = """"getfixedboi" Seed"""
|
||||||
|
|
||||||
|
|
||||||
class Goal(Choice):
|
class Goal(Choice):
|
||||||
"""The victory condition for your run. Stuff after the goal will not be shuffled."""
|
"""
|
||||||
|
The victory condition for your run. Stuff after the goal will not be shuffled.
|
||||||
|
Primordial Wyrm and Boss Rush are accessible relatively early, so consider "Items" or
|
||||||
|
"Locations" accessibility to avoid getting stuck on the goal.
|
||||||
|
"""
|
||||||
|
|
||||||
display_name = "Goal"
|
display_name = "Goal"
|
||||||
option_mechanical_bosses = 0
|
option_mechanical_bosses = 0
|
||||||
# option_calamitas_clone = 1
|
option_calamitas_clone = 1
|
||||||
option_plantera = 2
|
option_plantera = 2
|
||||||
option_golem = 3
|
option_golem = 3
|
||||||
option_empress_of_light = 4
|
option_empress_of_light = 4
|
||||||
option_lunatic_cultist = 5
|
option_lunatic_cultist = 5
|
||||||
# option_astrum_deus = 6
|
option_astrum_deus = 6
|
||||||
option_moon_lord = 7
|
option_moon_lord = 7
|
||||||
# option_providence_the_profaned_goddess = 8
|
option_providence_the_profaned_goddess = 8
|
||||||
# option_devourer_of_gods = 9
|
option_devourer_of_gods = 9
|
||||||
# option_yharon_dragon_of_rebirth = 10
|
option_yharon_dragon_of_rebirth = 10
|
||||||
option_zenith = 11
|
option_zenith = 11
|
||||||
# option_calamity_final_bosses = 12
|
option_calamity_final_bosses = 12
|
||||||
# option_adult_eidolon_wyrm = 13
|
option_primordial_wyrm = 13
|
||||||
|
option_boss_rush = 14
|
||||||
default = 0
|
default = 0
|
||||||
|
|
||||||
|
|
||||||
class Achievements(Choice):
|
class EarlyAchievements(DefaultOnToggle):
|
||||||
|
"""Adds checks upon collecting early Pre-Hardmode achievements. Adds many sphere 1 checks."""
|
||||||
|
|
||||||
|
display_name = "Early Pre-Hardmode Achievements"
|
||||||
|
|
||||||
|
|
||||||
|
class NormalAchievements(DefaultOnToggle):
|
||||||
"""
|
"""
|
||||||
Adds checks upon collecting achievements. Achievements for clearing bosses and events are excluded.
|
Adds checks upon collecting achivements not covered by the other options. Achievements for
|
||||||
"Exclude Grindy" also excludes fishing achievements.
|
clearing bosses and events are excluded.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
display_name = "Achievements"
|
display_name = "Normal Achievements"
|
||||||
option_none = 0
|
|
||||||
option_exclude_grindy = 1
|
|
||||||
option_exclude_fishing = 2
|
class GrindyAchievements(Toggle):
|
||||||
option_all = 3
|
"""Adds checks upon collecting grindy achievements"""
|
||||||
default = 1
|
|
||||||
|
display_name = "Grindy Achievements"
|
||||||
|
|
||||||
|
|
||||||
|
class FishingAchievements(Toggle):
|
||||||
|
"""Adds checks upon collecting fishing quest achievements"""
|
||||||
|
|
||||||
|
display_name = "Fishing Quest Achievements"
|
||||||
|
|
||||||
|
|
||||||
class FillExtraChecksWith(Choice):
|
class FillExtraChecksWith(Choice):
|
||||||
@@ -51,7 +81,12 @@ class FillExtraChecksWith(Choice):
|
|||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class TerrariaOptions(PerGameCommonOptions):
|
class TerrariaOptions(PerGameCommonOptions):
|
||||||
|
calamity: Calamity
|
||||||
|
getfixedboi: Getfixedboi
|
||||||
goal: Goal
|
goal: Goal
|
||||||
achievements: Achievements
|
early_achievements: EarlyAchievements
|
||||||
|
normal_achievements: NormalAchievements
|
||||||
|
grindy_achievements: GrindyAchievements
|
||||||
|
fishing_achievements: FishingAchievements
|
||||||
fill_extra_checks_with: FillExtraChecksWith
|
fill_extra_checks_with: FillExtraChecksWith
|
||||||
death_link: DeathLink
|
death_link: DeathLink
|
||||||
|
@@ -121,10 +121,9 @@ Corrupt Flask; Calamity;
|
|||||||
Crimson Flask; Calamity;
|
Crimson Flask; Calamity;
|
||||||
Craw Carapace; Calamity;
|
Craw Carapace; Calamity;
|
||||||
Giant Shell; Calamity;
|
Giant Shell; Calamity;
|
||||||
Fungal Carapace; Calamity;
|
|
||||||
Life Jelly; Calamity;
|
Life Jelly; Calamity;
|
||||||
Vital Jelly; Calamity;
|
Vital Jelly; Calamity;
|
||||||
Mana Jelly; Calamity;
|
Cleansing Jelly; Calamity;
|
||||||
Giant Tortoise Shell; Calamity;
|
Giant Tortoise Shell; Calamity;
|
||||||
Coin of Deceit; Calamity;
|
Coin of Deceit; Calamity;
|
||||||
Ink Bomb; Calamity;
|
Ink Bomb; Calamity;
|
||||||
@@ -151,4 +150,11 @@ Depths Charm; Calamity;
|
|||||||
Anechoic Plating; Calamity;
|
Anechoic Plating; Calamity;
|
||||||
Iron Boots; Calamity;
|
Iron Boots; Calamity;
|
||||||
Sprit Glyph; Calamity;
|
Sprit Glyph; Calamity;
|
||||||
Abyssal Amulet; Calamity;
|
Abyssal Amulet; Calamity;
|
||||||
|
|
||||||
|
# unshuffled
|
||||||
|
|
||||||
|
Life Crystal;
|
||||||
|
Enchanted Sword;
|
||||||
|
Starfury;
|
||||||
|
Defender Medal;
|
@@ -1,43 +1,57 @@
|
|||||||
// TODO Calamity minion armor
|
// For the logic to account for all skips, these rules would need to be made much more comprehensive
|
||||||
|
|
||||||
// Starting gear
|
// Starting gear
|
||||||
Copper Shortsword;
|
Copper Shortsword;
|
||||||
Guide; Npc;
|
Guide; Npc;
|
||||||
|
|
||||||
// Immediately accessible
|
// Immediately accessible
|
||||||
Timber!!; Achievement;
|
Squire Slime; Npc;
|
||||||
Benched; Achievement;
|
Traveling Merchant; ; @npc(2);
|
||||||
Stop! Hammer Time!; Achievement;
|
Lifeform Analyzer; ; Traveling Merchant;
|
||||||
Matching Attire; Achievement;
|
DPS Meter; ; Traveling Merchant | (@calamity & Wire);
|
||||||
Fashion Statement; Achievement;
|
Stopwatch; ; Traveling Merchant;
|
||||||
Ooo! Shiny!; Achievement;
|
Timber!!; Achievement | Early;
|
||||||
No Hobo; Achievement;
|
Benched; Achievement | Early;
|
||||||
|
Stop! Hammer Time!; Achievement | Early;
|
||||||
|
Matching Attire; Achievement | Early;
|
||||||
|
Fashion Statement; Achievement | Early;
|
||||||
|
Ooo! Shiny!; Achievement | Early;
|
||||||
|
No Hobo; Achievement | Early; // When NPC shuffling is added, this shouldn't be considered early
|
||||||
Merchant; Npc;
|
Merchant; Npc;
|
||||||
Bug Net; ; @calamity | Merchant;
|
Bug Net; ; @calamity | Merchant;
|
||||||
Heavy Metal; Achievement;
|
Heavy Metal; Achievement | Early;
|
||||||
Nurse; Npc; Merchant;
|
|
||||||
The Frequent Flyer; Achievement; Nurse;
|
|
||||||
Demolitionist; Npc; Merchant;
|
|
||||||
Dye Trader; Npc; @npc(4);
|
Dye Trader; Npc; @npc(4);
|
||||||
Dye Hard; Achievement; Dye Trader;
|
Dye Hard; Achievement; Dye Trader;
|
||||||
Lucky Break; Achievement;
|
Demolitionist; Npc; Merchant;
|
||||||
Star Power; Achievement;
|
Lucky Break; Achievement | Early;
|
||||||
You Can Do It!; Achievement;
|
Star Power; Achievement | Early;
|
||||||
|
You Can Do It!; Achievement | Early;
|
||||||
|
Wulfrum Battery; Calamity;
|
||||||
|
Wulfrum Armor; Calamity | Armor Minions(1);
|
||||||
|
|
||||||
// Surface exploration
|
// Surface exploration
|
||||||
|
Cactus;
|
||||||
|
Unusual Survival Strategies; Achievement | Early;
|
||||||
Aglet;
|
Aglet;
|
||||||
|
Radar;
|
||||||
|
Wand of Sparking;
|
||||||
Heliophobia; Achievement;
|
Heliophobia; Achievement;
|
||||||
Blighted Gel; Calamity;
|
Blighted Gel; Calamity;
|
||||||
|
Evil Powder;
|
||||||
Archaeologist; Achievement | Grindy;
|
Archaeologist; Achievement | Grindy;
|
||||||
Zoologist; Npc;
|
Zoologist; Npc;
|
||||||
Cat; Npc; Zoologist;
|
Cat; Npc; Zoologist;
|
||||||
Feeling Petty; Achievement; Cat | Dog;
|
Feeling Petty; Achievement; Cat | Dog;
|
||||||
Dog; Npc; Zoologist;
|
Dog; Npc; Zoologist;
|
||||||
|
Painter; Npc; @npc(8);
|
||||||
A Rather Blustery Day; Achievement | Grindy;
|
A Rather Blustery Day; Achievement | Grindy;
|
||||||
Enchanted Sword;
|
Enchanted Sword;
|
||||||
Pretty in Pink; Achievement | Grindy;
|
Pretty in Pink; Achievement | Grindy;
|
||||||
Marathon Medalist; Achievement | Grindy;
|
Marathon Medalist; Achievement | Grindy;
|
||||||
Angler; Npc;
|
Angler; Npc;
|
||||||
|
Fisherman's Pocket Guide; ; Angler | Weather Radio;
|
||||||
|
Weather Radio; ; Angler | Sextant;
|
||||||
|
Sextant; ; Angler | Fisherman's Pocket Guide;
|
||||||
Servant-in-Training; Achievement | Fishing; Angler;
|
Servant-in-Training; Achievement | Fishing; Angler;
|
||||||
\10 Fishing Quests; Achievement | Fishing; Angler;
|
\10 Fishing Quests; Achievement | Fishing; Angler;
|
||||||
Trout Monkey; Achievement | Fishing; Angler;
|
Trout Monkey; Achievement | Fishing; Angler;
|
||||||
@@ -45,52 +59,69 @@ Glorious Golden Pole; Achievement | Fishing;
|
|||||||
Fast and Fishious; Achievement | Fishing; Angler;
|
Fast and Fishious; Achievement | Fishing; Angler;
|
||||||
Supreme Helper Minion!; Achievement | Fishing; Angler;
|
Supreme Helper Minion!; Achievement | Fishing; Angler;
|
||||||
Water Walking Boots;
|
Water Walking Boots;
|
||||||
Painter; Npc; @npc(8);
|
Aquatic Heart; Calamity;
|
||||||
|
|
||||||
// Sky exploration
|
// Sky exploration
|
||||||
Into Orbit; Achievement;
|
Into Orbit; Achievement | Early;
|
||||||
Mysterious Circuitry; Calamity;
|
Mysterious Circuitry; Calamity;
|
||||||
Dubious Plating; Calamity;
|
Dubious Plating; Calamity;
|
||||||
Charging Station; Calamity;
|
Charging Station; Calamity;
|
||||||
Codebreaker Base; Calamity;
|
Codebreaker Base; Calamity;
|
||||||
Starfury;
|
Starfury;
|
||||||
|
Celestial Magnet;
|
||||||
|
Clumsy Slime; Npc;
|
||||||
|
|
||||||
// Underground
|
// Underground
|
||||||
Watch Your Step!; Achievement;
|
Watch Your Step!; Achievement | Early;
|
||||||
Throwing Lines; Achievement;
|
Throwing Lines; Achievement | Early;
|
||||||
Torch God; Location | Item(Reward: Torch God's Favor);
|
Torch God; Location | Item(Reward: Torch God's Favor);
|
||||||
Vehicular Manslaughter; Achievement;
|
Vehicular Manslaughter; Achievement | Early;
|
||||||
Hey! Listen!; Achievement;
|
Ancient Bone Dust; Calamity;
|
||||||
|
Depth Meter;
|
||||||
|
Compass;
|
||||||
|
Hey! Listen!; Achievement | Early;
|
||||||
I Am Loot!; Achievement;
|
I Am Loot!; Achievement;
|
||||||
|
Magic Mirror;
|
||||||
Heart Breaker; Achievement;
|
Heart Breaker; Achievement;
|
||||||
Hold on Tight!; Achievement;
|
Nurse; Npc; Merchant;
|
||||||
|
The Frequent Flyer; Not Calamity Getfixedboi | Achievement; Nurse;
|
||||||
|
Feast of Midas; Achievement; Bug Net;
|
||||||
|
Hold on Tight!; Achievement | Early;
|
||||||
Feller of Evergreens; Calamity;
|
Feller of Evergreens; Calamity;
|
||||||
Gold Hammer; Hammer(55);
|
Gold Hammer; Hammer(55);
|
||||||
Gold Pickaxe; Pickaxe(55);
|
Gold Pickaxe; Pickaxe(55);
|
||||||
|
Gold Watch;
|
||||||
Like a Boss; Achievement;
|
Like a Boss; Achievement;
|
||||||
Hermes Boots;
|
Hermes Boots;
|
||||||
Jeepers Creepers; Achievement;
|
Jeepers Creepers; Achievement;
|
||||||
Stylist; Npc;
|
Stylist; Npc;
|
||||||
Funkytown; Achievement;
|
Funkytown; Achievement;
|
||||||
Deceiver of Fools; Achievement | Grindy;
|
Deceiver of Fools; Achievement | Grindy;
|
||||||
|
Metal Detector;
|
||||||
Dead Men Tell No Tales; Achievement;
|
Dead Men Tell No Tales; Achievement;
|
||||||
Bulldozer; Achievement | Grindy;
|
Bulldozer; Achievement | Grindy;
|
||||||
|
|
||||||
// Cavern
|
// Cavern
|
||||||
Obsidian;
|
Obsidian;
|
||||||
Obsidian Skull; ; Obsidian;
|
Obsidian Skull; ; Obsidian;
|
||||||
|
Raider's Talisman; Calamity; Obsidian;
|
||||||
There are Some Who Call Him...; Achievement | Grindy;
|
There are Some Who Call Him...; Achievement | Grindy;
|
||||||
Lava Charm;
|
Lava Charm;
|
||||||
Demonite Ore;
|
Demonite Ore;
|
||||||
Demonite Bar; ; Demonite Ore | (@calamity & #Calamity Evil Boss);
|
Demonite Bar; ; Demonite Ore;
|
||||||
Evil Sword; ; Demonite Bar;
|
Evil Sword; ; Demonite Bar;
|
||||||
|
Coin of Deceit; Calamity; Demonite Bar | Ruin Medallion;
|
||||||
|
|
||||||
// Underground Ice
|
// Underground Ice
|
||||||
Ice Skates;
|
Ice Skates;
|
||||||
Flinx Fur Coat; ArmorMinions(1);
|
Flinx Fur Coat; Armor Minions(1);
|
||||||
|
|
||||||
// Underground Desert
|
// Underground Desert
|
||||||
|
Stormlion Mandible; Calamity;
|
||||||
Golfer; Npc;
|
Golfer; Npc;
|
||||||
|
Party Girl; Npc; @npc(14);
|
||||||
|
Jolly Jamboree; Achievement | Grindy; Party Girl;
|
||||||
|
Cool Slime; Npc; Party Girl;
|
||||||
|
|
||||||
// Sunken Sea
|
// Sunken Sea
|
||||||
Sea Prism; Calamity;
|
Sea Prism; Calamity;
|
||||||
@@ -98,37 +129,50 @@ Navyplate; Calamity;
|
|||||||
|
|
||||||
// Underground Jungle
|
// Underground Jungle
|
||||||
Anklet of the Wind;
|
Anklet of the Wind;
|
||||||
|
Feral Claws;
|
||||||
Stinger;
|
Stinger;
|
||||||
Jungle Spores;
|
Jungle Spores;
|
||||||
Vine;
|
Vine;
|
||||||
Blade of Grass; ; Stinger & Jungle Spores & Vine;
|
Blade of Grass; ; Stinger & Jungle Spores & Vine;
|
||||||
|
Nature's Gift;
|
||||||
|
Bezoar;
|
||||||
Summoning Potion; Minions(1);
|
Summoning Potion; Minions(1);
|
||||||
|
|
||||||
|
// The Aether
|
||||||
|
A Shimmer In The Dark; Achievement;
|
||||||
|
|
||||||
// Underworld
|
// Underworld
|
||||||
It's Getting Hot in Here; Achievement;
|
It's Getting Hot in Here; Achievement;
|
||||||
Rock Bottom; Achievement;
|
Rock Bottom; Achievement;
|
||||||
Obsidian Rose;
|
Obsidian Rose;
|
||||||
Havocplate; Calamity;
|
Havocplate; Calamity;
|
||||||
|
Magma Stone;
|
||||||
|
|
||||||
// Evil
|
// Evil
|
||||||
Smashing, Poppet!; Achievement;
|
Smashing, Poppet!; Achievement;
|
||||||
Arms Dealer; Npc;
|
Arms Dealer; Npc;
|
||||||
Leading Landlord; Achievement; Nurse & Arms Dealer; // The logic is way more complex, but that doesn't affect anything
|
Leading Landlord; Achievement; Nurse & Arms Dealer; // The logic is way more complex, but that doesn't affect anything
|
||||||
Completely Awesome; Achievement; Arms Dealer;
|
Completely Awesome; Achievement; Arms Dealer;
|
||||||
|
Illegal Gun Parts; ; Arms Dealer | Flamethrower;
|
||||||
|
|
||||||
|
// Abyss
|
||||||
|
Ink Bomb; Calamity;
|
||||||
|
|
||||||
// King Slime
|
// King Slime
|
||||||
King Slime; Location | Item;
|
King Slime; Location | Item;
|
||||||
Sticky Situation; Achievement | Grindy;
|
Sticky Situation; Not Getfixedboi | Achievement | Grindy;
|
||||||
The Cavalry; Achievement;
|
The Cavalry; Achievement;
|
||||||
Solidifier; ; #King Slime;
|
Solidifier; ; #King Slime;
|
||||||
|
Nerdy Slime; Npc; #King Slime;
|
||||||
|
|
||||||
// Desert Scourge
|
// Desert Scourge
|
||||||
Desert Scourge; Calamity | Location | Item;
|
Desert Scourge; Calamity | Location | Item;
|
||||||
Pearl Shard; Calamity; #Desert Scourge;
|
Pearl Shard; Calamity; #Desert Scourge;
|
||||||
Sea Remains; Calamity; Pearl Shard;
|
Sea Remains; Calamity; Pearl Shard;
|
||||||
Reefclaw Hamaxe; Calamity | Hammer(60); Sea Remains;
|
Reefclaw Hamaxe; Calamity | Hammer(60); Sea Remains;
|
||||||
|
Victide Armor; Calamity | Armor Minions(1); Sea Remains;
|
||||||
Sandstorm; ; ~@calamity | Desert Scourge;
|
Sandstorm; ; ~@calamity | Desert Scourge;
|
||||||
Voltaic Jelly; Calamity | Minions(1); Desert Scourge; // Jelly-Charged Battery doesn't stack. This is the case for all Calamity minion accessory upgrades.
|
Voltaic Jelly; Calamity | Minions(1); Desert Scourge | Jelly-Charged Battery; // Jelly-Charged Battery doesn't stack. This is the case for all Calamity minion accessory upgrades.
|
||||||
|
|
||||||
// Giant Clam
|
// Giant Clam
|
||||||
Giant Clam; Calamity | Location | Item; Desert Scourge;
|
Giant Clam; Calamity | Location | Item; Desert Scourge;
|
||||||
@@ -136,18 +180,21 @@ Amidias; Calamity;
|
|||||||
|
|
||||||
// Blood Moon
|
// Blood Moon
|
||||||
Bloodbath; Achievement | Grindy;
|
Bloodbath; Achievement | Grindy;
|
||||||
|
Blood Orb; Calamity;
|
||||||
|
Shark Tooth Necklace;
|
||||||
Til Death...; Achievement | Grindy;
|
Til Death...; Achievement | Grindy;
|
||||||
Quiet Neighborhood; Achievement;
|
Quiet Neighborhood; Achievement | Early;
|
||||||
|
Surly Slime; Npc;
|
||||||
|
|
||||||
// Eye of Cthulhu
|
// Eye of Cthulhu
|
||||||
Eye of Cthulhu; Location | Item;
|
Eye of Cthulhu; Location | Item;
|
||||||
Dryad; Npc; Eye of Cthulhu | Evil Boss | Skeletron;
|
Dryad; Npc; Eye of Cthulhu | Evil Boss | Skeletron;
|
||||||
Pumpkin Seeds; ; Dryad;
|
Pumpkin Seeds; ; Dryad;
|
||||||
Pumpkin; ; Pumpkin Seeds;
|
Pumpkin; ; Pumpkin Seeds | Cactus;
|
||||||
Purification Powder; ; Dryad; // Shimmered from Evil Powder in 1.4.4. Not bought from Dryad in get fixed boi.
|
Purification Powder; ; (~@getfixedboi & Dryad) | Evil Powder;
|
||||||
Party Girl; Npc; @npc(14);
|
Mystic Slime; Npc; Purification Powder;
|
||||||
Jolly Jamboree; Achievement | Grindy; Party Girl;
|
And Good Riddance!; Achievement | Grindy; Dryad;
|
||||||
Acid Rain Tier 1; Calamity | Location | Item; Eye of Cthulhu;
|
Acid Rain Tier 1; Calamity | Location | Item; Eye of Cthulhu | Wall of Flesh | Aquatic Scourge;
|
||||||
|
|
||||||
// Crabulon
|
// Crabulon
|
||||||
Crabulon; Calamity | Location | Item;
|
Crabulon; Calamity | Location | Item;
|
||||||
@@ -156,112 +203,160 @@ Crabulon; Calamity | Location | Item;
|
|||||||
Evil Boss; Location | Item;
|
Evil Boss; Location | Item;
|
||||||
Evil Boss Part; ; #Evil Boss;
|
Evil Boss Part; ; #Evil Boss;
|
||||||
Evil Pickaxe; Pickaxe(65); Evil Boss Part;
|
Evil Pickaxe; Pickaxe(65); Evil Boss Part;
|
||||||
Obsidian Armor; ArmorMinions(1); Obsidian & Evil Boss Part;
|
Obsidian Armor; Armor Minions(1); Obsidian & Evil Boss Part;
|
||||||
Tavernkeep; Npc; Evil Boss;
|
Tavernkeep; Npc; Evil Boss;
|
||||||
Old One's Army Tier 1; Location | Item; Tavernkeep;
|
Old One's Army Tier 1; Location | Item; Tavernkeep;
|
||||||
Meteorite; ; Evil Boss;
|
Meteorite; ; #Evil Boss | Evil Boss | Meteorite Bar | (@calamity & Astral Infection);
|
||||||
Meteorite Bar; ; Meteorite;
|
Meteorite Bar; ; Meteorite | (@calamity & Astral Infection) | Meteor Staff;
|
||||||
Meteor Hamaxe; Hammer(60); Meteorite Bar;
|
Meteor Hamaxe; Hammer(60); Meteorite Bar;
|
||||||
Hellforge; ; @pickaxe(60);
|
Hellforge; ; @pickaxe(60);
|
||||||
Hellstone; ; @pickaxe(65) | Wall of Flesh;
|
Hellstone; ; @pickaxe(65) | Wall of Flesh | Hellstone Bar;
|
||||||
Hellstone Bar; ; Hellstone;
|
Hellstone Bar; ; Hellstone;
|
||||||
Fiery Greatsword; ; Hellstone Bar;
|
Fiery Greatsword; ; Hellstone Bar;
|
||||||
Molten Hamaxe; Hammer(70); Hellstone Bar;
|
Molten Hamaxe; Hammer(70); Hellstone Bar;
|
||||||
Molten Pickaxe; Pickaxe(100); Hellstone Bar;
|
Molten Pickaxe; Pickaxe(100); Hellstone Bar;
|
||||||
Miner for Fire; Achievement; Molten Pickaxe;
|
Miner for Fire; Achievement; Molten Pickaxe;
|
||||||
Hot Reels!; Achievement; Hellstone Bar & Bug Net; // TODO Calamity
|
Hot Reels!; Achievement; Hellstone Bar & (@calamity | Bug Net);
|
||||||
Brimstone Slag; Calamity; @pickaxe(100);
|
Brimstone Slag; Calamity; @pickaxe(100);
|
||||||
|
|
||||||
// Goblin Army
|
// Goblin Army
|
||||||
Goblin Army; Location | Item;
|
Goblin Army; Location | Item;
|
||||||
Goblin Tinkerer; Npc; Goblin Army;
|
Goblin Tinkerer; Npc; Goblin Army;
|
||||||
Tinkerer's Workshop; ; Goblin Tinkerer;
|
Tinkerer's Workshop; ; Goblin Tinkerer;
|
||||||
|
Mana Flower; ; (Tinkerer's Workshop & Nature's Gift) | (@calamity & Ethereal Talisman);
|
||||||
|
Silencing Sheath; Calamity; (Tinkerer's Workshop & Demonite Bar & Evil Boss Part) | Dark Matter Sheath;
|
||||||
Rocket Boots; ; Goblin Tinkerer;
|
Rocket Boots; ; Goblin Tinkerer;
|
||||||
Spectre Boots; ; Tinkerer's Workshop & Hermes Boots & Rocket Boots;
|
Spectre Boots; ; Tinkerer's Workshop & Hermes Boots & Rocket Boots;
|
||||||
Lightning Boots; ; Tinkerer's Workshop & Spectre Boots & Anklet of the Wind & Aglet;
|
Lightning Boots; ; Tinkerer's Workshop & Spectre Boots & Anklet of the Wind & Aglet;
|
||||||
Frostspark Boots; ; Tinkerer's Workshop & Lightning Boots & Ice Skates;
|
Frostspark Boots; ; Tinkerer's Workshop & Lightning Boots & Ice Skates;
|
||||||
Lava Waders; ; Tinkerer's Workshop & Obsidian Skull & Lava Charm & Obsidian Rose & Water Walking Boots;
|
Lava Waders; ; Tinkerer's Workshop & Obsidian Skull & Lava Charm & Obsidian Rose & Water Walking Boots;
|
||||||
Terraspark Boots; ; Tinkerer's Workshop & Frostspark Boots & Lava Waders;
|
Terraspark Boots; ; Tinkerer's Workshop & Frostspark Boots & Lava Waders;
|
||||||
|
GPS; ; Tinkerer's Workshop & Depth Meter & Gold Watch & Compass;
|
||||||
|
Goblin Tech; ; Tinkerer's Workshop & DPS Meter & Stopwatch & Metal Detector;
|
||||||
|
Fish Finder; ; Tinkerer's Workshop & Fisherman's Pocket Guide & Weather Radio & Sextant;
|
||||||
Boots of the Hero; Achievement | Grindy; Terraspark Boots;
|
Boots of the Hero; Achievement | Grindy; Terraspark Boots;
|
||||||
|
Diving Gear; ; Tinkerer's Workshop;
|
||||||
|
|
||||||
// Queen Bee
|
// Queen Bee
|
||||||
Where's My Honey?; Achievement;
|
Where's My Honey?; Achievement;
|
||||||
Queen Bee; Location | Item;
|
Queen Bee; Location | Item;
|
||||||
Bee Keeper; ; #Queen Bee;
|
Bee Keeper; ; #Queen Bee;
|
||||||
Bee Wax; ; #Queen Bee;
|
Bee Wax; ; #Queen Bee;
|
||||||
Bee Armor; ArmorMinions(2); Bee Wax;
|
Bee Armor; Armor Minions(2); Bee Wax;
|
||||||
Not the Bees!; Achievement; #Queen Bee & Bee Armor;
|
Not the Bees!; Achievement; #Queen Bee & Bee Armor;
|
||||||
Witch Doctor; Npc; Queen Bee;
|
Witch Doctor; Npc; Queen Bee;
|
||||||
Pygmy Necklace; Minions(1); Witch Doctor;
|
Pygmy Necklace; Minions(1); Witch Doctor | (@calamity & Statis' Blessing);
|
||||||
|
|
||||||
// Calamity Evil Boss
|
// Calamity Evil Boss
|
||||||
Calamity Evil Boss; Calamity | Location | Item;
|
The Hive Mind; Calamity | Location | Item;
|
||||||
Aerialite Ore; Calamity; Calamity Evil Boss & @pickaxe(65);
|
The Perforators; Calamity | Location | Item;
|
||||||
Aerialite Bar; Calamity; Aerialite Ore;
|
Blood Sample; Calamity; #The Perforators;
|
||||||
|
Aerialite Ore; Calamity; The Hive Mind | The Perforators | Cobalt Ore | Aerialite Bar; // No pick needed; can be fished
|
||||||
|
Aerialite Bar; Calamity; Aerialite Ore | Feather Crown;
|
||||||
Aerial Hamaxe; Calamity | Hammer(70); Aerialite Bar;
|
Aerial Hamaxe; Calamity | Hammer(70); Aerialite Bar;
|
||||||
Skyfringe Pickaxe; Calamity | Pickaxe(75); Aerialite Bar;
|
Skyfringe Pickaxe; Calamity | Pickaxe(75); Aerialite Bar;
|
||||||
|
Aerospec Armor; Calamity | Armor Minions(1); Aerialite Bar;
|
||||||
|
Feather Crown; Calamity; Aerialite Bar | Moonstone Crown;
|
||||||
|
|
||||||
// Skeletron
|
// Skeletron
|
||||||
Skeletron; Location | Item;
|
Skeletron; Location | Item;
|
||||||
Clothier; Npc; Skeletron;
|
Clothier; Npc; Skeletron;
|
||||||
Dungeon; ; Skeletron;
|
Dungeon; ; Skeletron;
|
||||||
Dungeon Heist; Achievement; Dungeon;
|
Dungeon Heist; Achievement; Dungeon;
|
||||||
Bone; ; Dungeon | (@calamity & #Skeletron);
|
Bone; ; Dungeon | (@calamity & (#Skeletron | (@getfixedboi & #Ravager) | Mirage Mirror));
|
||||||
Bewitching Table; Minions(1); Dungeon | (Witch Doctor & Wizard);
|
Mirage Mirror; Calamity; (Tinkerer's Workshop & Bone) | Abyssal Mirror;
|
||||||
|
Tally Counter; ; Dungeon;
|
||||||
|
R.E.K. 3000; ; Tinkerer's Workshop & Radar & Tally Counter & Lifeform Analyzer;
|
||||||
|
PDA; ; Tinkerer's Workshop & GPS & R.E.K. 3000 & Goblin Tech & Fish Finder;
|
||||||
|
Cell Phone; ; (Tinkerer's Workshop & Magic Mirror & PDA) | (@getfixedboi & @calamity & #Polterghast);
|
||||||
|
Black Mirror; Achievement | Grindy; Cell Phone;
|
||||||
|
Bewitching Table; Minions(1); Dungeon | (Witch Doctor & Wizard) | Alchemy Table;
|
||||||
|
Alchemy Table; ; Dungeon | Bewitching Table;
|
||||||
Mechanic; ; Dungeon;
|
Mechanic; ; Dungeon;
|
||||||
Wire; ; Mechanic;
|
Wire; ; Mechanic | (@calamity & Electrician's Glove);
|
||||||
Decryption Computer; Calamity; Mysterious Circuitry & Dubious Plating & Wire;
|
Decryption Computer; Calamity; Mysterious Circuitry & Dubious Plating & Wire;
|
||||||
Actuator; ; Mechanic;
|
Actuator; ; Mechanic;
|
||||||
Muramasa; ; Dungeon;
|
Muramasa; ; Dungeon;
|
||||||
|
Cobalt Shield; ; Dungeon | (@calamity & Cobalt Bar);
|
||||||
|
Obsidian Shield; ; Tinkerer's Workshop & Cobalt Shield & Obsidian Skull;
|
||||||
|
Elder Slime; Npc; Skeletron & Dungeon;
|
||||||
|
|
||||||
// Deerclops
|
// Deerclops
|
||||||
Deerclops; Location | Item;
|
Deerclops; Location | Item;
|
||||||
|
|
||||||
// The Slime God
|
// The Slime God
|
||||||
The Slime God; Calamity | Location | Item; Blighted Gel;
|
The Slime God; Calamity | Location | Item; Blighted Gel;
|
||||||
Purified Gel; Calamity; #The Slime God;
|
Purified Gel; Calamity; #The Slime God | Jelly-Charged Battery;
|
||||||
|
Jelly-Charged Battery; Calamity; (Wulfrum Battery & Voltaic Jelly & Purified Gel & Stormlion Mandible) | Star-Tainted Generator;
|
||||||
Static Refiner; Calamity; Purified Gel & Solidifier;
|
Static Refiner; Calamity; Purified Gel & Solidifier;
|
||||||
Gelpick; Calamity | Pickaxe(100); Static Refiner & Purified Gel & Blighted Gel;
|
Gelpick; Calamity | Pickaxe(100); Static Refiner & Purified Gel & Blighted Gel;
|
||||||
|
Statigel Armor; Calamity | Armor Minions(1); Static Refiner & Purified Gel & Blighted Gel;
|
||||||
Night's Edge; ; Evil Sword & Muramasa & Blade of Grass & Fiery Greatsword & (~@calamity | Purified Gel);
|
Night's Edge; ; Evil Sword & Muramasa & Blade of Grass & Fiery Greatsword & (~@calamity | Purified Gel);
|
||||||
|
|
||||||
// Wall of Flesh
|
// Wall of Flesh
|
||||||
Wall of Flesh; Location | Item(Hardmode); Guide;
|
Wall of Flesh; Location | Item(Hardmode); Guide;
|
||||||
Pwnhammer; Hammer(80); #Wall of Flesh;
|
Pwnhammer; Hammer(80); #Wall of Flesh;
|
||||||
|
Emblem; ; #Wall of Flesh | Avenger Emblem | (@calamity & (Mechanical Glove | Celestial Emblem | Statis' Blessing));
|
||||||
|
Fast Clock; ; Wall of Flesh | Trifold Map | (@calamity & Wire & Pixie Dust & Soul of Light);
|
||||||
Wizard; Npc; Wall of Flesh;
|
Wizard; Npc; Wall of Flesh;
|
||||||
Tax Collector; Npc; Purification Powder & Wall of Flesh;
|
Titan Glove; ; Wall of Flesh | Power Glove;
|
||||||
|
Power Glove; ; Tinkerer's Workshop & Titan Glove & Feral Claws;
|
||||||
|
Magic Quiver; ; Wall of Flesh | (@calamity & Elemental Quiver);
|
||||||
|
Hallowed Seeds; ; (Wall of Flesh & Dryad) | Holy Water;
|
||||||
|
Armor Polish; ; Wall of Flesh | Vitamins | (@calamity & Bone & Ancient Bone Dust);
|
||||||
|
Adhesive Bandage; ; @calamity | Wall of Flesh;
|
||||||
|
Medicated Bandage; ; Tinkerer's Workshop & Bezoar & Adhesive Bandage;
|
||||||
|
Megaphone; ; Wall of Flesh | Nazar | (@calamity & Wire & Cobalt Bar);
|
||||||
|
Pocket Mirror; ; Wall of Flesh | Blindfold | (@calamity & Crystal Shard & Soul of Night);
|
||||||
|
Trifold Map; ; Wall of Flesh | Fast Clock | (@calamity & Soul of Light & Soul of Night);
|
||||||
|
The Plan; ; Tinkerer's Workshop & Trifold Map & Fast Clock;
|
||||||
|
Tax Collector; Npc; (Purification Powder & Wall of Flesh) | @getfixedboi;
|
||||||
Spider Fangs; ; Wall of Flesh;
|
Spider Fangs; ; Wall of Flesh;
|
||||||
Spider Armor; ArmorMinions(3); Spider Fangs;
|
Spider Armor; Armor Minions(3); Spider Fangs;
|
||||||
Cross Necklace; ; Wall of Flesh;
|
Cross Necklace; ; Wall of Flesh;
|
||||||
Altar; ; Wall of Flesh & @hammer(80);
|
Altar; ; Wall of Flesh & @hammer(80);
|
||||||
Begone, Evil!; Achievement; Altar;
|
Begone, Evil!; Achievement; Altar;
|
||||||
Cobalt Ore; ; (((~@calamity & Altar) | (@calamity & Wall of Flesh)) & @pickaxe(100)) | Wall of Flesh;
|
Cobalt Ore; ; (((~@calamity & Altar) | (@calamity & Wall of Flesh)) & @pickaxe(100)) | Wall of Flesh | Mythril Ore | Cobalt Bar;
|
||||||
Extra Shiny!; Achievement; Cobalt Ore | Mythril Ore | Adamantite Ore | Chlorophyte Ore;
|
Extra Shiny!; Achievement; Cobalt Ore | Mythril Ore | Adamantite Ore | Chlorophyte Ore;
|
||||||
Cobalt Bar; ; Cobalt Ore | Wall of Flesh;
|
Cobalt Bar; ; Cobalt Ore | (@calamity & Lunic Eye) | Wall of Flesh;
|
||||||
Cobalt Pickaxe; Pickaxe(110); Cobalt Bar;
|
Cobalt Pickaxe; Pickaxe(110); Cobalt Bar;
|
||||||
Soul of Night; ; Wall of Flesh | (@calamity & Altar);
|
Blindfold; ; @calamity | Wall of Flesh | Pocket Mirror;
|
||||||
|
Reflective Shades; ; Tinkerer's Workshop & Blindfold & Pocket Mirror;
|
||||||
|
Vitamins; ; Wall of Flesh | Armor Polish | (@calamity & Alchemy Table & Blood Orb);
|
||||||
|
Armor Bracing; ; Tinkerer's Workshop & Vitamins & Armor Polish;
|
||||||
|
Nazar; ; Wall of Flesh | Megaphone | (@calamity & Soul of Night);
|
||||||
|
Countercurse Mantra; ; Tinkerer's Workshop & Nazar & Megaphone;
|
||||||
|
Ankh Charm; ; Tinkerer's Workshop & Reflective Shades & Armor Bracing & Medicated Bandage & Countercurse Mantra & The Plan;
|
||||||
|
Ankh Shield; ; Tinkerer's Workshop & Obsidian Shield & Ankh Charm;
|
||||||
|
Ankhumulation Complete; Achievement | Grindy; Ankh Shield;
|
||||||
|
Soul of Night; ; Wall of Flesh | (@calamity & (Altar | (@getfixedboi & #Duke Fishron)));
|
||||||
Hallow; ; Wall of Flesh;
|
Hallow; ; Wall of Flesh;
|
||||||
Pixie Dust; ; Hallow;
|
Pixie Dust; ; Hallow | Meteor Staff | Holy Water;
|
||||||
|
Holy Water; ; (Pixie Dust & Hallowed Seeds) | (@calamity & Statis' Blessing);
|
||||||
Unicorn Horn; ; Hallow;
|
Unicorn Horn; ; Hallow;
|
||||||
Crystal Shard; ; Hallow;
|
Crystal Shard; ; Hallow;
|
||||||
Axe of Purity; Calamity; Feller of Evergreens & Purification Powder & Pixie Dust & Crystal Shard;
|
Axe of Purity; Calamity; Feller of Evergreens & Purification Powder & Pixie Dust & Crystal Shard;
|
||||||
Soul of Light; ; Hallow | (@calamity & #Queen Slime);
|
Fabsol's Vodka; Calamity; (Pixie Dust & Crystal Shard & Unicorn Horn) | (@getfixedboi & #Empress of Light);
|
||||||
|
Soul of Light; ; Hallow | (@calamity & (#Queen Slime | (@getfixedboi & #Duke Fishron))) | Light Disc | Meteor Staff;
|
||||||
|
Meteor Staff; ; (Hardmode Anvil & Meteorite Bar & Pixie Dust & Soul of Light) | Asteroid Staff;
|
||||||
Blessed Apple; ; Hallow;
|
Blessed Apple; ; Hallow;
|
||||||
Rod of Discord; ; Hallow;
|
Rod of Discord; ; Hallow;
|
||||||
Gelatin World Tour; Achievement | Grindy; Dungeon & Wall of Flesh & Hallow & #King Slime;
|
Gelatin World Tour; Achievement | Grindy; Dungeon & Wall of Flesh & Hallow & #King Slime;
|
||||||
Soul of Flight; ; Wall of Flesh;
|
Soul of Flight; ; Wall of Flesh;
|
||||||
Head in the Clouds; Achievement; @grindy | (Soul of Flight & ((Hardmode Anvil & (Soul of Light | Soul of Night | Pixie Dust | Wall of Flesh | Solar Eclipse | @mech_boss(1) | Plantera | Spectre Bar | #Golem)) | (Shroomite Bar & Autohammer) | #Mourning Wood | #Pumpking)) | Steampunker | (Wall of Flesh & Witch Doctor) | (Solar Eclipse & Plantera) | #Everscream | #Old One's Army Tier 3 | #Empress of Light | #Duke Fishron | (Fragment & Luminite Bar & Ancient Manipulator); // Leaf Wings are Post-Plantera in 1.4.4
|
Head in the Clouds; Achievement; @grindy | (Soul of Flight & ((Hardmode Anvil & (Soul of Light | Soul of Night | Pixie Dust | Wall of Flesh | Solar Eclipse | @mech_boss(1) | Plantera | Spectre Bar | #Golem)) | (Shroomite Bar & Autohammer) | #Mourning Wood | #Pumpking)) | Steampunker | (Wall of Flesh & Plantera & Witch Doctor) | (Solar Eclipse & Plantera) | #Everscream | #Old One's Army Tier 3 | #Empress of Light | #Duke Fishron | (Fragment & Luminite Bar & Ancient Manipulator);
|
||||||
Bunny; Npc; Zoologist & Wall of Flesh; // Extremely simplified
|
Bunny; Npc; Zoologist & Wall of Flesh; // Extremely simplified
|
||||||
Forbidden Fragment; ; Sandstorm & Wall of Flesh;
|
Forbidden Fragment; ; Sandstorm & Wall of Flesh;
|
||||||
Astral Infection; Calamity; Wall of Flesh;
|
Astral Infection; Calamity; Wall of Flesh | Astrum Aureus;
|
||||||
Stardust; Calamity; Astral Infection | #Astrum Aureus | #Astrum Deus;
|
Stardust; Calamity; Astral Infection | #Astrum Aureus | #Astrum Deus | Eye of Magnus | Meld Construct;
|
||||||
|
Lunic Eye; Calamity; (Cobalt Bar & Stardust) | Eye of Magnus;
|
||||||
Trapper Bulb; Calamity; Wall of Flesh;
|
Trapper Bulb; Calamity; Wall of Flesh;
|
||||||
Titan Heart; Calamity; Astral Infection;
|
Titan Heart; Calamity; Astral Infection;
|
||||||
Essence of Sunlight; Calamity; Wall of Flesh | Golem;
|
Essence of Sunlight; Calamity; Wall of Flesh | Golem;
|
||||||
Essence of Eleum; Calamity; Wall of Flesh | Cryogen | #Cryogen; // TODO Check
|
Essence of Eleum; Calamity; Wall of Flesh | Cryogen | #Cryogen | (@getfixedboi & #Duke Fishron);
|
||||||
Essence of Havoc; Calamity; Wall of Flesh | #Calamitas Clone | #Brimstone Elemental;
|
Essence of Havoc; Calamity; Wall of Flesh | #Calamitas Clone | #Brimstone Elemental | Ruin Medallion;
|
||||||
Don't Dread on Me; Achievement; Wall of Flesh;
|
Dreadnautilus; Calamity | Location | Item; Wall of Flesh;
|
||||||
Earth Elemental; Calamity | Location | Item; Wall of Flesh;
|
Don't Dread on Me; Not Calamity | Achievement; Wall of Flesh;
|
||||||
Cloud Elemental; Calamity | Location | Item; Wall of Flesh;
|
Hardmode Giant Clam; Calamity | Location | Item; #Giant Clam & Wall of Flesh;
|
||||||
Truffle; Npc; Wall of Flesh;
|
Truffle; Npc; Wall of Flesh;
|
||||||
It Can Talk?!; Achievement; Truffle;
|
It Can Talk?!; Achievement; Truffle;
|
||||||
The First Shadowflame; Calamity | Minions(1); Goblin Army | Wall of Flesh;
|
The First Shadowflame; Calamity | Minions(1); Goblin Army | Wall of Flesh;
|
||||||
@@ -271,103 +366,125 @@ Pirate Invasion; Location | Item;
|
|||||||
Pirate; Npc; Pirate Invasion;
|
Pirate; Npc; Pirate Invasion;
|
||||||
|
|
||||||
// Queen Slime
|
// Queen Slime
|
||||||
Queen Slime; Location | Item; Hallow;
|
Queen Slime; Location | Item; Hallow | (@getfixedboi & @calamity & #Supreme Alchemist, Cirrus);
|
||||||
|
Sparkle Slime Balloon; ; #Queen Slime;
|
||||||
|
Diva Slime; Npc; Sparkle Slime Balloon;
|
||||||
|
The Great Slime Mitosis; Achievement; Nerdy Slime & Cool Slime & Elder Slime & Clumsy Slime & Diva Slime & Surly Slime & Mystic Slime & Squire Slime;
|
||||||
|
|
||||||
// Aquatic Scourge
|
// Aquatic Scourge
|
||||||
Mythril Ore; ; (((~@calamity & Altar) | (@calamity & @mech_boss(1))) & @pickaxe(110)) | (Wall of Flesh & (~@calamity | @mech_boss(1)));
|
Mythril Ore; ; (((~@calamity & Altar) | (@calamity & @mech_boss(1))) & @pickaxe(110)) | Wall of Flesh | Adamantite Ore | Mythril Bar;
|
||||||
Mythril Bar; ; Mythril Ore | (Wall of Flesh & (~@calamity | @mech_boss(1)));
|
Mythril Bar; ; Mythril Ore | Wall of Flesh | (@calamity & Electrician's Glove);
|
||||||
Hardmode Anvil; ; Mythril Bar;
|
Hardmode Anvil; ; Mythril Bar;
|
||||||
Mythril Pickaxe; Pickaxe(150); Hardmode Anvil & Mythril Bar;
|
Mythril Pickaxe; Pickaxe(150); Hardmode Anvil & Mythril Bar;
|
||||||
Adamantite Ore; ; (((~@calamity & Altar) | (@calamity & @mech_boss(2))) & @pickaxe(150)) | (Wall of Flesh & (~@calamity | @mech_boss(2)));
|
Electrician's Glove; Calamity; (Hardmode Anvil & Wire & Mythril Bar) | Nanotech;
|
||||||
|
Adamantite Ore; ; (((~@calamity & Altar) | (@calamity & @mech_boss(2))) & @pickaxe(150)) | Wall of Flesh | (~@calamity & Chlorophyte Ore) | Adamantite Bar | (@calamity & Hallowed Ore);
|
||||||
Hardmode Forge; ; Hardmode Anvil & Adamantite Ore & Hellforge;
|
Hardmode Forge; ; Hardmode Anvil & Adamantite Ore & Hellforge;
|
||||||
Adamantite Bar; ; (Hardmode Forge & Adamantite Ore) | (Wall of Flesh & (~@calamity | @mech_boss(2)));
|
Adamantite Bar; ; (Hardmode Forge & Adamantite Ore) | Wall of Flesh;
|
||||||
Adamantite Pickaxe; Pickaxe(180); Hardmode Anvil & Adamantite Bar;
|
Adamantite Pickaxe; Pickaxe(180); Hardmode Anvil & Adamantite Bar;
|
||||||
Forbidden Armor; ArmorMinions(2); Hardmode Anvil & Adamantite Bar & Forbidden Fragment;
|
Forbidden Armor; Armor Minions(2); Hardmode Anvil & Adamantite Bar & Forbidden Fragment;
|
||||||
Aquatic Scourge; Calamity | Location | Item;
|
Aquatic Scourge; Calamity | Location | Item;
|
||||||
The Twins; Location | Item | Mech Boss; (@calamity | Hardmode Anvil) & Soul of Light;
|
|
||||||
Brimstone Elemental; Calamity | Location | Item; Soul of Night & Essence of Havoc & Unholy Core;
|
|
||||||
The Destroyer; Location | Item | Mech Boss; (@calamity | Hardmode Anvil) & Soul of Night;
|
|
||||||
Cryogen; Calamity | Location | Item; Soul of Night & Soul of Light & Essence of Eleum;
|
|
||||||
Skeletron Prime; Location | Item | Mech Boss; (@calamity | Hardmode Anvil) & Soul of Night & Soul of Light & Bone;
|
|
||||||
# mechanical_bosses
|
|
||||||
Cragmaw Mire; Calamity | Location | Item; #Acid Rain Tier 2;
|
Cragmaw Mire; Calamity | Location | Item; #Acid Rain Tier 2;
|
||||||
Nuclear Rod; Calamity | Minions(1); #Cragmaw Mire;
|
Nuclear Fuel Rod; Calamity | Minions(1); #Cragmaw Mire | Star-Tainted Generator;
|
||||||
Acid Rain Tier 2; Calamity | Location | Item; #Acid Rain Tier 1 & Aquatic Scourge;
|
Acid Rain Tier 2; Calamity | Location | Item; #Acid Rain Tier 1 & (Aquatic Scourge | Acid Rain Tier 3);
|
||||||
|
Mechanical Eye; ; (@calamity | Hardmode Anvil) & Soul of Light;
|
||||||
|
Mechanical Worm; ; (@calamity | Hardmode Anvil) & Soul of Night;
|
||||||
|
Mechanical Skull; ; (@calamity | Hardmode Anvil) & Soul of Night & Soul of Light & Bone;
|
||||||
|
Ocram's Razor; Getfixedboi; (@calamity | Hardmode Anvil) & Mechanical Eye & Mechanical Worm & Mechanical Skull;
|
||||||
|
The Twins; Location | Item | Mech Boss; (~@getfixedboi & Mechanical Eye) | (@getfixedboi & Ocram's Razor);
|
||||||
|
Brimstone Elemental; Calamity | Location | Item; Soul of Night & Essence of Havoc & Unholy Core;
|
||||||
|
The Destroyer; Location | Item | Mech Boss; (~@getfixedboi & Mechanical Worm) | (@getfixedboi & Ocram's Razor);
|
||||||
|
Cryogen; Calamity | Location | Item; Soul of Night & Soul of Light & Essence of Eleum;
|
||||||
|
Skeletron Prime; Location | Item | Mech Boss; (~@getfixedboi & Mechanical Skull) | (@getfixedboi & Ocram's Razor);
|
||||||
|
# mechanical_bosses
|
||||||
|
|
||||||
// The Twins
|
// The Twins
|
||||||
Soul of Sight; ; #The Twins;
|
Soul of Sight; ; #The Twins | Avenger Emblem | (@calamity & (Mechanical Glove | Celestial Emblem));
|
||||||
Steampunker; Npc; @mech_boss(1);
|
Steampunker; Npc; @mech_boss(1);
|
||||||
Hammush; ; Truffle & @mech_boss(1);
|
Hammush; ; Truffle & @mech_boss(1);
|
||||||
Rainbow Rod; ; Hardmode Anvil & Crystal Shard & Unicorn Horn & Pixie Dust & Soul of Light & Soul of Sight;
|
Rainbow Rod; ; Hardmode Anvil & Crystal Shard & Unicorn Horn & Pixie Dust & Soul of Light & Soul of Sight;
|
||||||
Prismancer; Achievement; Rainbow Rod;
|
Prismancer; Achievement; Rainbow Rod;
|
||||||
Long Ranged Sensor Array; Calamity; Hardmode Anvil & Mysterious Circuitry & Dubious Plating & Mythril Bar & Wire & Decryption Computer & Codebreaker Base;
|
Long Ranged Sensor Array; Calamity; Hardmode Anvil & Mysterious Circuitry & Dubious Plating & Mythril Bar & Wire & Decryption Computer & Codebreaker Base;
|
||||||
Hydraulic Volt Crusher; Calamity; Hardmode Anvil & Mysterious Circuitry & Dubious Plating & Mythril Bar & Soul of Sight;
|
Hydraulic Volt Crusher; Calamity; Hardmode Anvil & Mysterious Circuitry & Dubious Plating & Mythril Bar & Soul of Sight;
|
||||||
Life Fruit; ; (@mech_boss(1) & Wall of Flesh) | (@calamity & (Living Shard | Wall of Flesh));
|
Life Fruit; ; (@mech_boss(1) & Wall of Flesh) | (@calamity & (Living Shard | Wall of Flesh | (@getfixedboi & #Plantera)));
|
||||||
Get a Life; Achievement; Life Fruit;
|
Get a Life; Achievement; Life Fruit;
|
||||||
Topped Off; Achievement; Life Fruit;
|
Topped Off; Achievement; Life Fruit;
|
||||||
Old One's Army Tier 2; Location | Item; #Old One's Army Tier 1 & ((Wall of Flesh & @mech_boss(1)) | #Old One's Army Tier 3);
|
Old One's Army Tier 2; Location | Item; #Old One's Army Tier 1 & ((Wall of Flesh & @mech_boss(1)) | #Old One's Army Tier 3);
|
||||||
|
|
||||||
// Brimstone Elemental
|
// Brimstone Elemental
|
||||||
Infernal Suevite; Calamity; @pickaxe(150) | Brimstone Elemental;
|
Infernal Suevite; Calamity; @pickaxe(150) | Brimstone Elemental;
|
||||||
Unholy Core; Calamity; Infernal Suevite & Hellstone;
|
Unholy Core; Calamity; (Infernal Suevite & Hellstone) | Brimstone Elemental;
|
||||||
|
Ruin Medallion; Calamity; (Hardmode Anvil & Coin of Deceit & Unholy Core & Essence of Havoc) | Dark Matter Sheath;
|
||||||
|
|
||||||
// The Destroyer
|
// The Destroyer
|
||||||
Soul of Might; ; #The Destroyer;
|
Soul of Might; ; #The Destroyer | Avenger Emblem | Light Disc | (@calamity & (Mechanical Glove | Celestial Emblem));
|
||||||
|
|
||||||
// Cryogen
|
// Cryogen
|
||||||
Cryonic Ore; Calamity; Cryogen & (@pickaxe(180) | @mech_boss(2));
|
Cryonic Ore; Calamity; (Cryogen & (@pickaxe(180) | @mech_boss(2))) | Cryonic Bar;
|
||||||
Cryonic Bar; Calamity; (Hardmode Forge & Cryonic Ore) | Fleshy Geode | Necromantic Geode;
|
Cryonic Bar; Calamity; (Hardmode Forge & Cryonic Ore) | Fleshy Geode | Necromantic Geode | (Cryogen & @mech_boss(2)) | Life Alloy;
|
||||||
Abyssal Warhammer; Calamity | Hammer(88); Hardmode Anvil & Cryonic Bar;
|
Abyssal Warhammer; Calamity | Hammer(88); Hardmode Anvil & Cryonic Bar;
|
||||||
Shardlight Pickaxe; Calamity | Pickaxe(180); Hardmode Anvil & Cryonic Bar;
|
Shardlight Pickaxe; Calamity | Pickaxe(180); Hardmode Anvil & Cryonic Bar;
|
||||||
|
Daedalus Armor; Calamity | Armor Minions(2); Hardmode Anvil & Cryonic Bar & Essence of Eleum;
|
||||||
|
|
||||||
// Skeletron Prime
|
// Skeletron Prime
|
||||||
Soul of Fright; ; #Skeletron Prime;
|
Soul of Fright; ; #Skeletron Prime | Avenger Emblem | Flamethrower | (@calamity & (Mechanical Glove | Celestial Emblem));
|
||||||
Inferna Cutter; Calamity; Hardmode Anvil & Axe of Purity & Soul of Fright & Essence of Havoc;
|
Inferna Cutter; Calamity; Hardmode Anvil & Axe of Purity & Soul of Fright & Essence of Havoc;
|
||||||
|
Flamethrower; ; (Hardmode Anvil & Illegal Gun Parts & Soul of Fright) | (@getfixedboi & @calamity & #Skeletron);
|
||||||
Buckets of Bolts; Achievement; #The Twins & #The Destroyer & #Skeletron Prime;
|
Buckets of Bolts; Achievement; #The Twins & #The Destroyer & #Skeletron Prime;
|
||||||
Mecha Mayhem; Achievement; #The Twins & #The Destroyer & #Skeletron Prime;
|
Mecha Mayhem; Achievement | Not Getfixedboi; #The Twins & #The Destroyer & #Skeletron Prime;
|
||||||
Hallowed Bar; ; (#The Twins | #The Destroyer | #Skeletron Prime) & (~@calamity | @mech_boss(3)); // Can't count on Hallowed Ore, since the player may be in prehardmode (TODO Check this)
|
Hallowed Ore; Calamity; (@mech_boss(3) & @pickaxe(180)) | Chlorophyte Ore | Hallowed Bar;
|
||||||
Hallowed Armor; ArmorMinions(3); Hardmode Anvil & Hallowed Bar;
|
Hallowed Bar; ; ((#The Twins | #The Destroyer | #Skeletron Prime) & (~@calamity | @mech_boss(3))) | (@calamity & Hardmode Forge & Hallowed Ore) | Light Disc;
|
||||||
|
Hallowed Armor; Armor Minions(3); Hardmode Anvil & Hallowed Bar;
|
||||||
Excalibur; ; Hardmode Anvil & Hallowed Bar;
|
Excalibur; ; Hardmode Anvil & Hallowed Bar;
|
||||||
Pickaxe Axe; Pickaxe(200); Hardmode Anvil & Hallowed Bar & Soul of Fright & Soul of Might & Soul of Sight;
|
Pickaxe Axe; Pickaxe(200); Hardmode Anvil & Hallowed Bar & Soul of Fright & Soul of Might & Soul of Sight;
|
||||||
Drax Attax; Achievement; Pickaxe Axe;
|
Drax Attax; Achievement; Pickaxe Axe;
|
||||||
True Night's Edge; ; Hardmode Anvil & Night's Edge & Soul of Fright & Soul of Might & Soul of Sight;
|
True Night's Edge; ; Hardmode Anvil & Night's Edge & Soul of Fright & Soul of Might & Soul of Sight;
|
||||||
Chlorophyte Ore; ; Wall of Flesh & @pickaxe(200);
|
Avenger Emblem; ; (Tinkerer's Workshop & Emblem & Soul of Might & Soul of Sight & Soul of Fright) | (@calamity & (Sand Shark Tooth Necklace | Sigil of Calamitas)) | (~@calamity & (Mechanical Glove | Celestial Emblem));
|
||||||
|
Mechanical Glove; ; (Power Glove & ((~@calamity & Tinkerer's Workshop & Avenger Emblem) | (@calamity & Emblem & Soul of Fright & Soul of Might & Soul of Sight))) | Fire Gauntlet;
|
||||||
|
Celestial Emblem; ; (Celestial Magnet & ((~@calamity & Tinkerer's Workshop & Avenger Emblem) | (@calamity & Emblem & Soul of Fright & Soul of Might & Soul of Sight))) | Sigil of Calamitas;
|
||||||
|
Light Disc; ; (Hallowed Bar & Soul of Light & Soul of Might) | (@getfixedboi & @calamity & #Evil Boss);
|
||||||
|
Chlorophyte Ore; ; (Wall of Flesh & @pickaxe(200)) | (~@calamity & Luminite) | Chlorophyte Bar | (@calamity & Perennial Ore);
|
||||||
Photosynthesis; Achievement; Chlorophyte Ore;
|
Photosynthesis; Achievement; Chlorophyte Ore;
|
||||||
Chlorophyte Bar; ; Hardmode Forge & Chlorophyte Ore;
|
Chlorophyte Bar; ; (Hardmode Forge & Chlorophyte Ore) | Spectre Bar | Shroomite Bar;
|
||||||
True Excalibur; ; Hardmode Anvil & Excalibur & Chlorophyte Bar;
|
True Excalibur; ; Hardmode Anvil & Excalibur & Chlorophyte Bar;
|
||||||
Chlorophyte Pickaxe; Pickaxe(200); Hardmode Anvil & Chlorophyte Bar;
|
Chlorophyte Pickaxe; Pickaxe(200); Hardmode Anvil & Chlorophyte Bar;
|
||||||
Chlorophyte Warhammer; Hammer(90); Hardmode Anvil & Chlorophyte Bar;
|
Chlorophyte Warhammer; Hammer(90); Hardmode Anvil & Chlorophyte Bar;
|
||||||
|
|
||||||
// Calamitas Clone
|
// Calamitas Clone
|
||||||
Calamitas Clone; Calamity | Location | Item | Goal; Hardmode Anvil & Hellstone Bar & Essence of Havoc;
|
Calamitas Clone; Calamity | Location | Item | Goal; Hardmode Anvil & Hellstone Bar & Essence of Havoc;
|
||||||
Plantera; Location | Item | Goal; Wall of Flesh & (@mech_boss(3) | (@calamity & Hardmode Anvil & Trapper Bulb));
|
Plantera; Location | Item | Goal; Wall of Flesh & (@mech_boss(3) | @calamity);
|
||||||
# calamitas_clone
|
# calamitas_clone
|
||||||
# plantera
|
# plantera
|
||||||
Ashes of Calamity; Calamity; #Calamitas Clone;
|
Ashes of Calamity; Calamity; #Calamitas Clone | Sigil of Calamitas;
|
||||||
|
Depth Cells; Calamity; Calamitas Clone | Abyssal Mirror;
|
||||||
|
Lumenyl; Calamity; Calamitas Clone | Abyssal Mirror;
|
||||||
|
Abyssal Mirror; Calamity; (Hardmode Anvil & Mirage Mirror & Ink Bomb & Depth Cells & Lumenyl) | Eclipse Mirror;
|
||||||
|
Fathom Swarmer Armor; Calamity | Armor Minions(2); Hardmode Anvil & Sea Remains & Depth Cells;
|
||||||
|
|
||||||
// Plantera
|
// Plantera
|
||||||
The Axe; Hammer(100); #Plantera;
|
The Axe; Hammer(100); #Plantera;
|
||||||
Seedler; ; #Plantera;
|
Seedler; ; #Plantera;
|
||||||
Living Shard; Calamity; #Plantera;
|
Living Shard; Calamity; #Plantera;
|
||||||
Tiki Armor; ArmorMinions(4); Witch Doctor & Wall of Flesh & Plantera;
|
Tiki Armor; Armor Minions(4); Witch Doctor & Wall of Flesh & Plantera;
|
||||||
Hercules Beetle; ; Witch Doctor & Wall of Flesh & Plantera;
|
Hercules Beetle; ; Witch Doctor & Wall of Flesh & Plantera;
|
||||||
You and What Army?; Achievement; @minions(8);
|
You and What Army?; Achievement; @minions(8);
|
||||||
Cyborg; Npc; Plantera;
|
Cyborg; Npc; Plantera;
|
||||||
|
To Infinity... and Beyond!; Achievement; Cyborg & Wall of Flesh;
|
||||||
Autohammer; ; Truffle & Plantera;
|
Autohammer; ; Truffle & Plantera;
|
||||||
Shroomite Bar; ; Autohammer & Chlorophyte Bar;
|
Shroomite Bar; ; Autohammer & Chlorophyte Bar;
|
||||||
Shroomite Digging Claw; Pickaxe(200); Hardmode Anvil & Shroomite Bar;
|
Shroomite Digging Claw; Pickaxe(200); Hardmode Anvil & Shroomite Bar;
|
||||||
Princess; Npc; Guide & Merchant & Nurse & Demolitionist & Dye Trader & Zoologist & Angler & Painter & Stylist & Golfer & Arms Dealer & Dryad & Party Girl & Tavernkeep & Goblin Tinkerer & Witch Doctor & Clothier & Wizard & Truffle & Tax Collector & Pirate & Steampunker & Cyborg;
|
Princess; Npc; Guide & Merchant & Nurse & Demolitionist & Dye Trader & Zoologist & Angler & Painter & Stylist & Golfer & Arms Dealer & Dryad & Party Girl & Tavernkeep & Goblin Tinkerer & Witch Doctor & Clothier & Wizard & Truffle & Tax Collector & Pirate & Steampunker & Cyborg;
|
||||||
Real Estate Agent; Achievement; Princess;
|
Real Estate Agent; Achievement; Princess;
|
||||||
Ectoplasm; ; ((Dungeon & Wall of Flesh) | @calamity) & Plantera;
|
Ectoplasm; ; (((Dungeon & Wall of Flesh) | @calamity) & Plantera) | Spectre Bar;
|
||||||
Paladin's Shield; ; Dungeon & Wall of Flesh & Plantera;
|
Paladin's Shield; ; Dungeon & Wall of Flesh & Plantera;
|
||||||
Core of Sunlight; Calamity; (Hardmode Anvil & Essence of Sunlight & Ectoplasm) | Fleshy Geode | Necromantic Geode;
|
Core of Sunlight; Calamity; (Hardmode Anvil & Essence of Sunlight & Ectoplasm) | Fleshy Geode | Necromantic Geode | Core of Calamity | Statis' Blessing;
|
||||||
Core of Eleum; Calamity; (Hardmode Anvil & Essence of Eleum & Ectoplasm) | Fleshy Geode | Necromantic Geode;
|
Core of Eleum; Calamity; (Hardmode Anvil & Essence of Eleum & Ectoplasm) | Fleshy Geode | Necromantic Geode | Core of Calamity;
|
||||||
Core of Havoc; Calamity; (Hardmode Anvil & Essence of Havoc & Ectoplasm) | Fleshy Geode | Necromantic Geode;
|
Core of Havoc; Calamity; (Hardmode Anvil & Essence of Havoc & Ectoplasm) | Fleshy Geode | Necromantic Geode | Core of Calamity;
|
||||||
Core of Calamity; Calamity; (Hardmode Anvil & Core of Sunlight & Core of Eleum & Core of Havoc & Ashes of Calamity) | Necromantic Geode;
|
Core of Calamity; Calamity; (Hardmode Anvil & Core of Sunlight & Core of Eleum & Core of Havoc & Ashes of Calamity) | Necromantic Geode | Deadshot Brooch;
|
||||||
|
Deadshot Brooch; Calamity; (Hardmode Anvil & Emblem & Core of Calamity) | Elemental Quiver;
|
||||||
Spectre Bar; ; Hardmode Forge & Chlorophyte Bar & Ectoplasm;
|
Spectre Bar; ; Hardmode Forge & Chlorophyte Bar & Ectoplasm;
|
||||||
Spectre Pickaxe; Pickaxe(200); Hardmode Anvil & Spectre Bar;
|
Spectre Pickaxe; Pickaxe(200); Hardmode Anvil & Spectre Bar;
|
||||||
Spectre Hamaxe; Hammer(90); Hardmode Anvil & Spectre Bar;
|
Spectre Hamaxe; Hammer(90); Hardmode Anvil & Spectre Bar;
|
||||||
Robbing the Grave; Achievement; Dungeon & Plantera;
|
Robbing the Grave; Achievement; Dungeon & Wall of Flesh & Plantera;
|
||||||
Evil Key; ; Plantera | (@calamity & #Wall of Flesh);
|
Evil Key; ; Plantera | (@calamity & #Wall of Flesh);
|
||||||
Frozen Key; ; Plantera | (@calamity & #Cryogen);
|
Frozen Key; ; Plantera | (@calamity & #Cryogen);
|
||||||
Jungle Key; ; Plantera | (@calamity & #Plantera);
|
Jungle Key; ; Plantera | (@calamity & #Plantera);
|
||||||
@@ -376,22 +493,25 @@ Desert Key; ;
|
|||||||
Big Booty; Achievement; Dungeon & Wall of Flesh & Plantera & (Evil Key | Frozen Key | Jungle Key | Hallowed Key | Desert Key);
|
Big Booty; Achievement; Dungeon & Wall of Flesh & Plantera & (Evil Key | Frozen Key | Jungle Key | Hallowed Key | Desert Key);
|
||||||
Rainbow Gun; ; Dungeon & Wall of Flesh & Plantera & Hallowed Key;
|
Rainbow Gun; ; Dungeon & Wall of Flesh & Plantera & Hallowed Key;
|
||||||
Rainbows and Unicorns; Achievement; Blessed Apple & Rainbow Gun;
|
Rainbows and Unicorns; Achievement; Blessed Apple & Rainbow Gun;
|
||||||
Perennial Ore; Calamity; Plantera;
|
Perennial Ore; Calamity; Plantera | Perennial Bar;
|
||||||
Perennial Bar; Calamity; Hardmode Forge & Perennial Ore;
|
Perennial Bar; Calamity; (Hardmode Forge & Perennial Ore) | Plantera | Life Alloy;
|
||||||
Beastial Pickaxe; Calamity | Pickaxe(200); Hardmode Anvil & Perennial Bar;
|
Beastial Pickaxe; Calamity | Pickaxe(200); Hardmode Anvil & Perennial Bar;
|
||||||
Armored Digger; Calamity | Location | Item; Plantera; // TODO Check
|
|
||||||
|
|
||||||
// Solar Eclipse
|
// Solar Eclipse
|
||||||
Temple Raider; Achievement; #Plantera;
|
Temple Raider; Achievement; #Plantera;
|
||||||
Lihzahrd Temple; ; #Plantera | (Plantera & Actuator) | @pickaxe(210) | (@calamity & Hardmode Anvil & Soul of Light & Soul of Night);
|
Lihzahrd Temple; ; #Plantera | (Plantera & Actuator) | @pickaxe(210) | (@calamity & Hardmode Anvil & Soul of Light & Soul of Night);
|
||||||
|
Lihzahrd Furniture; ; Lihzahrd Temple;
|
||||||
Solar Eclipse; ; Lihzahrd Temple & Wall of Flesh;
|
Solar Eclipse; ; Lihzahrd Temple & Wall of Flesh;
|
||||||
Broken Hero Sword; ; (Solar Eclipse & Plantera & @mech_boss(3)) | (@calamity & #Calamitas Clone);
|
Broken Hero Sword; ; Solar Eclipse & Plantera & @mech_boss(3);
|
||||||
Terra Blade; ; Hardmode Anvil & True Night's Edge & True Excalibur & Broken Hero Sword & (~@calamity | Living Shard);
|
Terra Blade; ; Hardmode Anvil & True Night's Edge & True Excalibur & Broken Hero Sword & (~@calamity | Living Shard);
|
||||||
Sword of the Hero; Achievement; Terra Blade;
|
Sword of the Hero; Achievement; Terra Blade;
|
||||||
|
Neptune's Shell; ; Solar Eclipse;
|
||||||
Kill the Sun; Achievement; Solar Eclipse;
|
Kill the Sun; Achievement; Solar Eclipse;
|
||||||
|
|
||||||
// Great Sand Shark
|
// Great Sand Shark
|
||||||
Great Sand Shark; Calamity | Location | Item; Hardmode Anvil & Forbidden Fragment & Core of Sunlight;
|
Great Sand Shark; Calamity | Location | Item; Hardmode Anvil & Forbidden Fragment & Core of Sunlight;
|
||||||
|
Grand Scale; Calamity; #Great Sand Shark | Sand Shark Tooth Necklace;
|
||||||
|
Sand Shark Tooth Necklace; Calamity; (Tinkerer's Workshop & Shark Tooth Necklace & Avenger Emblem & Grand Scale) | (@getfixedboi & #Desert Scourge);
|
||||||
|
|
||||||
// Leviathan and Anahita
|
// Leviathan and Anahita
|
||||||
Leviathan and Anahita; Calamity | Location | Item;
|
Leviathan and Anahita; Calamity | Location | Item;
|
||||||
@@ -404,32 +524,40 @@ Starbuster Core; Calamity | Minions(1);
|
|||||||
Golem; Location | Item | Goal; (Wall of Flesh & Plantera & Lihzahrd Temple) | (@calamity & Hardmode Anvil & Lihzahrd Temple & Essence of Sunlight);
|
Golem; Location | Item | Goal; (Wall of Flesh & Plantera & Lihzahrd Temple) | (@calamity & Hardmode Anvil & Lihzahrd Temple & Essence of Sunlight);
|
||||||
# golem
|
# golem
|
||||||
Picksaw; Pickaxe(210); #Golem;
|
Picksaw; Pickaxe(210); #Golem;
|
||||||
Lihzahrd Brick; ; @pickaxe(210);
|
Lihzahrd Brick; ; @pickaxe(210) | (Lihzahrd Furniture & Golem) | (@calamity & Lihzahrd Temple);
|
||||||
Scoria Ore; Calamity; Golem | @pickaxe(210);
|
Scoria Ore; Calamity; Golem | @pickaxe(210) | Astral Ore | Luminite | Scoria Bar;
|
||||||
Scoria Bar; Calamity; Hardmode Forge & Scoria Ore;
|
Scoria Bar; Calamity; (Hardmode Forge & Scoria Ore) | Golem | Life Alloy | Sigil of Calamitas | Fire Gauntlet;
|
||||||
Seismic Hampick; Calamity | Pickaxe(210) | Hammer(95); Hardmode Anvil & Scoria Bar;
|
Seismic Hampick; Calamity | Pickaxe(210) | Hammer(95); Hardmode Anvil & Scoria Bar;
|
||||||
Life Alloy; Calamity; (Hardmode Anvil & Cryonic Bar & Perennial Bar & Scoria Bar) | Necromantic Geode;
|
Hydrothermic Armor; Calamity | Armor Minions(2); Hardmode Anvil & Scoria Bar & Core of Havoc;
|
||||||
|
Fire Gauntlet; ; (Tinkerer's Workshop & Magma Stone & Mechanical Glove & (~@calamity | Scoria Bar)) | (@calamity & Elemental Gauntlet);
|
||||||
|
Sigil of Calamitas; Calamity; (Hardmode Anvil & Celestial Emblem & Scoria Bar & Ashes of Calamity) | Ethereal Talisman;
|
||||||
|
Life Alloy; Calamity; (Hardmode Anvil & Cryonic Bar & Perennial Bar & Scoria Bar) | Necromantic Geode | Star-Tainted Generator | (@getfixedboi & #Yharon, Dragon of Rebirth);
|
||||||
Advanced Display; Calamity; Hardmode Anvil & Mysterious Circuitry & Dubious Plating & Life Alloy & Long Ranged Sensor Array;
|
Advanced Display; Calamity; Hardmode Anvil & Mysterious Circuitry & Dubious Plating & Life Alloy & Long Ranged Sensor Array;
|
||||||
|
Star-Tainted Generator; Calamity; (Hardmode Anvil & Jelly-Charged Battery & Nuclear Fuel Rod & Starbuster Core & Life Alloy) | Nucleogenesis;
|
||||||
Old One's Army Tier 3; Location | Item; #Old One's Army Tier 1 & Wall of Flesh & Golem;
|
Old One's Army Tier 3; Location | Item; #Old One's Army Tier 1 & Wall of Flesh & Golem;
|
||||||
|
|
||||||
// Martian Madness
|
// Martian Madness
|
||||||
Martian Madness; Location | Item; Wall of Flesh & Golem;
|
Martian Madness; Location | Item; Wall of Flesh & Golem;
|
||||||
|
Laser Drill; Pickaxe(220); #Martian Madness;
|
||||||
Influx Waver; ; #Martian Madness;
|
Influx Waver; ; #Martian Madness;
|
||||||
|
|
||||||
// The Plaguebringer Goliath
|
// The Plaguebringer Goliath
|
||||||
Plague Cell Canister; Calamity; Golem;
|
Plague Cell Canister; Calamity; Golem | Alchemical Flask | (@getfixedboi & #Queen Bee);
|
||||||
Plaguebringer; Calamity | Location | Item; Golem;
|
Alchemical Flask; Calamity; (Hardmode Anvil & Bee Wax & Plague Cell Canister) | (@getfixedboi & #Queen Bee);
|
||||||
The Plaguebringer Goliath; Calamity | Location | Item; Hardmode Anvil & Plague Cell Canister;
|
The Plaguebringer Goliath; Calamity | Location | Item; Hardmode Anvil & Plague Cell Canister;
|
||||||
|
Infected Armor Plating; Calamity; #The Plaguebringer Goliath;
|
||||||
|
Plaguebringer Armor; Calamity | Armor Minions(3); Hardmode Anvil & Bee Armor & Alchemical Flask & Plague Cell Canister & Infected Armor Plating;
|
||||||
|
|
||||||
// Duke Fishron
|
// Duke Fishron
|
||||||
Duke Fishron; Location | Item; Bug Net & Wall of Flesh;
|
Duke Fishron; Location | Item; (Bug Net & Wall of Flesh) | (@getfixedboi & @calamity & #Astrum Deus);
|
||||||
|
|
||||||
// Pumpkin Moon
|
// Pumpkin Moon
|
||||||
Pumpkin Moon; ; Hardmode Anvil & Pumpkin & Ectoplasm & (@calamity | Hallowed Bar);
|
Pumpkin Moon; ; Hardmode Anvil & Pumpkin & Ectoplasm & (@calamity | Hallowed Bar);
|
||||||
Spooky Armor; ArmorMinions(4); Pumpkin Moon;
|
Spooky Armor; Armor Minions(4); Pumpkin Moon;
|
||||||
Mourning Wood; Location | Item; Pumpkin Moon;
|
Mourning Wood; Location | Item; Pumpkin Moon;
|
||||||
Necromantic Scroll; Minions(1); #Mourning Wood;
|
Necromantic Scroll; Minions(1); #Mourning Wood;
|
||||||
Papyrus Scarab; Minions(1); Tinkerer's Workshop & Hercules Beetle & Necromantic Scroll;
|
Papyrus Scarab; Minions(1); (Tinkerer's Workshop & Hercules Beetle & Necromantic Scroll) | (@calamity & Statis' Blessing);
|
||||||
|
Statis' Blessing; Calamity; (Hardmode Anvil & Papyrus Scarab & Pygmy Necklace & Emblem & Holy Water & Core of Sunlight) | Statis' Curse;
|
||||||
Pumpking; Location | Item; Pumpkin Moon;
|
Pumpking; Location | Item; Pumpkin Moon;
|
||||||
The Horseman's Blade; ; #Pumpking;
|
The Horseman's Blade; ; #Pumpking;
|
||||||
Baleful Harvest; Achievement; Pumpkin Moon;
|
Baleful Harvest; Achievement; Pumpkin Moon;
|
||||||
@@ -451,11 +579,11 @@ Ravager; Calamity | Location | Item;
|
|||||||
Fleshy Geode; Calamity; #Ravager;
|
Fleshy Geode; Calamity; #Ravager;
|
||||||
|
|
||||||
// Empress of Light
|
// Empress of Light
|
||||||
Empress of Light; Location | Item | Goal; Wall of Flesh & Hallow & (@calamity | Plantera);
|
Empress of Light; Location | Item | Goal; (Wall of Flesh & Hallow & (@calamity | Plantera)) | (@getfixedboi & @calamity & #Supreme Alchemist, Cirrus);
|
||||||
# empress_of_light
|
# empress_of_light
|
||||||
|
|
||||||
// Lunatic Cultist
|
// Lunatic Cultist
|
||||||
Lunatic Cultist; Location | Item | Goal; (@calamity | (Dungeon & Golem)) & Wall of Flesh;
|
Lunatic Cultist; Location | Item | Goal; ((@calamity | (Dungeon & Golem)) & Wall of Flesh) | (@calamity & Calamitas Clone);
|
||||||
Astrum Deus; Calamity | Location | Item | Goal; Titan Heart;
|
Astrum Deus; Calamity | Location | Item | Goal; Titan Heart;
|
||||||
# lunatic_cultist
|
# lunatic_cultist
|
||||||
# astrum_deus
|
# astrum_deus
|
||||||
@@ -463,111 +591,142 @@ Ancient Manipulator; ;
|
|||||||
|
|
||||||
// Lunar Events
|
// Lunar Events
|
||||||
Lunar Events; Location | Item; #Lunatic Cultist;
|
Lunar Events; Location | Item; #Lunatic Cultist;
|
||||||
Fragment; ; #Lunar Events | #Astrum Deus;
|
Fragment; ; #Lunar Events | #Astrum Deus | (Ancient Manipulator & (Nebula Fragment | Stardust Fragment)) | (@calamity & Galactica Singularity);
|
||||||
Galactica Singularity; Calamity; Ancient Manipulator & Fragment;
|
Nebula Fragment; ; Fragment | (@calamity & Eye of Magnus);
|
||||||
Meld Blob; Calamity; #Lunar Events | #Astrum Deus;
|
Eye of Magnus; Calamity; (Ancient Manipulator & Lunic Eye & Nebula Fragment) | (@getfixedboi & #Wall of Flesh);
|
||||||
Meld Construct; Calamity; Ancient Manipulator & Meld Blob & Stardust;
|
Stardust Fragment; ; Fragment | (@calamity & Statis' Curse);
|
||||||
|
Statis' Curse; Calamity; (Ancient Manipulator & Statis' Blessing & The First Shadowflame & Stardust Fragment) | Nucleogenesis;
|
||||||
|
Galactica Singularity; Calamity; (Ancient Manipulator & Fragment) | Elemental Gauntlet | Elemental Quiver | Nucleogenesis | Moonstone Crown | Ethereal Talisman;
|
||||||
|
Meld Blob; Calamity; #Lunar Events | #Astrum Deus | (Astral Infection & Astrum Deus) | Meld Construct;
|
||||||
|
Meld Construct; Calamity; (Ancient Manipulator & Meld Blob & Stardust) | Dark Matter Sheath;
|
||||||
|
Dark Matter Sheath; Calamity; (Ancient Manipulator & Silencing Sheath & Ruin Medallion & Meld Construct) | Eclipse Mirror;
|
||||||
|
|
||||||
// Astrum Deus
|
// Astrum Deus
|
||||||
Astral Ore; Calamity; Wall of Flesh & Astrum Deus;
|
Astral Ore; Calamity; (Astral Infection & Astrum Deus) | Astral Bar; // No pick needed; you can fish it
|
||||||
Astral Bar; Calamity; Ancient Manipulator & Stardust & Astral Ore;
|
Astral Bar; Calamity; (Ancient Manipulator & Stardust & Astral Ore) | (Astral Infection & Astrum Deus);
|
||||||
Astral Hamaxe; Calamity | Hammer(100); Ancient Manipulator & Astral Bar;
|
Astral Hamaxe; Calamity | Hammer(100); Ancient Manipulator & Astral Bar;
|
||||||
Astral Pickaxe; Calamity | Pickaxe(220); Ancient Manipulator & Astral Bar;
|
Astral Pickaxe; Calamity | Pickaxe(220); Ancient Manipulator & Astral Bar;
|
||||||
|
Astral Armor; Calamity | Armor Minions(3); Ancient Manipulator & Astral Bar & Meteorite Bar;
|
||||||
|
|
||||||
// Moon Lord
|
// Moon Lord
|
||||||
Moon Lord; Location | Item | Goal; #Lunar Events;
|
Moon Lord; Location | Item | Goal; #Lunar Events;
|
||||||
# moon_lord
|
# moon_lord
|
||||||
Slayer of Worlds; Achievement; #Evil Boss & #The Destroyer & #Duke Fishron & #Eye of Cthulhu & #Golem & #King Slime & #Lunatic Cultist & #Moon Lord & #Plantera & #Queen Bee & #Skeletron & #Skeletron Prime & #The Twins & #Wall of Flesh;
|
Slayer of Worlds; Achievement; #Evil Boss & #The Destroyer & #Duke Fishron & #Eye of Cthulhu & #Golem & #King Slime & #Lunatic Cultist & #Moon Lord & #Plantera & #Queen Bee & #Skeletron & #Skeletron Prime & #The Twins & #Wall of Flesh;
|
||||||
Luminite; ; #Moon Lord;
|
Luminite; ; #Moon Lord | (@calamity & (Exodium Cluster | Asteroid Staff)) | Luminite Bar;
|
||||||
Luminite Bar; ; Ancient Manipulator & Luminite;
|
Luminite Bar; ; (Ancient Manipulator & Luminite) | (@calamity & (Elemental Gauntlet | Elemental Quiver | Nucleogenesis | Moonstone Crown | Ethereal Talisman));
|
||||||
Luminite Hamaxe; Hammer(100); Ancient Manipulator & Fragment & Luminite Bar;
|
Luminite Hamaxe; Hammer(100); Ancient Manipulator & Fragment & Luminite Bar;
|
||||||
Luminite Pickaxe; Pickaxe(225); Ancient Manipulator & Fragment & Luminite Bar;
|
Luminite Pickaxe; Pickaxe(225); Ancient Manipulator & Fragment & Luminite Bar;
|
||||||
Genesis Pickaxe; Calamity | Pickaxe(225); Ancient Manipulator & Meld Construct & Luminite Bar;
|
Genesis Pickaxe; Calamity | Pickaxe(225); Ancient Manipulator & Meld Construct & Luminite Bar;
|
||||||
Stardust Armor; ArmorMinions(5); Ancient Manipulator & Fragment & Luminite Bar;
|
Stardust Armor; Armor Minions(5); Ancient Manipulator & Fragment & Luminite Bar;
|
||||||
|
Asteroid Staff; Calamity; (Ancient Manipulator & Meteor Staff & Luminite Bar) | (@getfixedboi & #Astrum Aureus);
|
||||||
|
Moonstone Crown; Calamity; (Ancient Manipulator & Feather Crown & Luminite Bar & Galactica Singularity) | Nanotech;
|
||||||
Terrarian; ; #Moon Lord;
|
Terrarian; ; #Moon Lord;
|
||||||
Sick Throw; Achievement; Terrarian;
|
Sick Throw; Achievement; Terrarian;
|
||||||
Meowmere; ; #Moon Lord;
|
Meowmere; ; #Moon Lord;
|
||||||
Star Wrath; ; #Moon Lord;
|
Star Wrath; ; #Moon Lord;
|
||||||
Exodium Cluster; Calamity; Moon Lord & @pickaxe(225);
|
Exodium Cluster; Calamity; Moon Lord | Uelibloom Ore; // No pick needed; can be fished
|
||||||
Normality Relocator; Calamity; Ancient Manipulator & Rod of Discord & Exodium Cluster & Fragment;
|
Normality Relocator; Calamity; Ancient Manipulator & Rod of Discord & Exodium Cluster & Fragment;
|
||||||
Unholy Essence; Calamity; Moon Lord | #Providence, the Profaned Goddess;
|
Unholy Essence; Calamity; Moon Lord | #Providence, the Profaned Goddess | (Hallow & Providence, the Profaned Goddess) | (@getfixedboi & Plantera);
|
||||||
Phantoplasm; Calamity; Moon Lord & (Wall of Flesh | Dungeon); // TODO Check
|
Polterplasm; Calamity; (Moon Lord & Wall of Flesh) | (Dungeon & (Polterghast | Moon Lord)) | #Polterghast;
|
||||||
Eldritch Soul Artifact; Calamity; Exodium Cluster & Navyplate & Phantoplasm;
|
Eldritch Soul Artifact; Calamity | Minions(1); Exodium Cluster & Navyplate & Polterplasm;
|
||||||
|
|
||||||
// Profaned Guardians
|
// Profaned Guardians
|
||||||
Profaned Guardians; Calamity | Location | Item; Ancient Manipulator & Unholy Essence & Luminite Bar;
|
Profaned Guardians; Calamity | Location | Item; Ancient Manipulator & Unholy Essence & Luminite Bar;
|
||||||
|
|
||||||
// Dragonfolly
|
// Dragonfolly
|
||||||
The Dragonfolly; Calamity | Location | Item; Ancient Manipulator & Unholy Essence & Luminite Bar;
|
The Dragonfolly; Calamity | Location | Item; (Ancient Manipulator & Unholy Essence & Luminite Bar) | (@getfixedboi & #Supreme Alchemist, Cirrus);
|
||||||
Effulgent Feather; Calamity; Moon Lord | #The Dragonfolly;
|
Effulgent Feather; Calamity; Moon Lord | #The Dragonfolly | (@getfixedboi & #Yharon, Dragon of Rebirth);
|
||||||
|
|
||||||
// Providence, the Profaned Goddess
|
// Providence, the Profaned Goddess
|
||||||
Providence, the Profaned Goddess; Calamity | Location | Item | Goal; #Profaned Guardians;
|
Providence, the Profaned Goddess; Calamity | Location | Item | Goal; #Profaned Guardians | (@getfixedboi & #Supreme Alchemist, Cirrus);
|
||||||
# providence_the_profaned_goddess
|
# providence_the_profaned_goddess
|
||||||
Divine Geode; Calamity; #Providence, the Profaned Goddess;
|
Divine Geode; Calamity; #Providence, the Profaned Goddess | (@getfixedboi & #Profaned Guardians);
|
||||||
Profaned Soul Artifact; Calamity | Minions(1); Exodium Cluster & Havocplate & Divine Geode;
|
Profaned Soul Artifact; Calamity | Minions(1); Exodium Cluster & Havocplate & Divine Geode;
|
||||||
Rune of Kos; Calamity; #Providence, the Profaned Goddess;
|
Rune of Kos; Calamity; #Providence, the Profaned Goddess;
|
||||||
Uelibloom Ore; Calamity; Providence, the Profaned Goddess;
|
Uelibloom Ore; Calamity; Providence, the Profaned Goddess | Auric Ore | Uelibloom Bar;
|
||||||
Uelibloom Bar; Calamity; Hardmode Forge & Uelibloom Ore;
|
Uelibloom Bar; Calamity; (Hardmode Forge & Uelibloom Ore) | Providence, the Profaned Goddess;
|
||||||
Grax; Calamity | Hammer(110); Ancient Manipulator & Inferna Cutter & Luminite Hamaxe & Uelibloom Bar;
|
Grax; Calamity | Hammer(110); Ancient Manipulator & Inferna Cutter & Luminite Hamaxe & Uelibloom Bar;
|
||||||
Blossom Pickaxe; Calamity | Pickaxe(250); Ancient Manipulator & Uelibloom Bar;
|
Blossom Pickaxe; Calamity | Pickaxe(250); Ancient Manipulator & Uelibloom Bar;
|
||||||
Voltage Regulation System; Calamity; Ancient Manipulator & Mysterious Circuitry & Dubious Plating & Uelibloom Bar & Luminite Bar & Advanced Display;
|
Voltage Regulation System; Calamity; Ancient Manipulator & Mysterious Circuitry & Dubious Plating & Uelibloom Bar & Luminite Bar & Advanced Display;
|
||||||
|
Tarragon Armor; Calamity | Armor Minions(3); Ancient Manipulator & Uelibloom Bar & Divine Geode;
|
||||||
Necromantic Geode; Calamity; #Ravager & Providence, the Profaned Goddess;
|
Necromantic Geode; Calamity; #Ravager & Providence, the Profaned Goddess;
|
||||||
|
Bloodstone; Calamity; Providence, the Profaned Goddess;
|
||||||
|
Bloodstone Core; Calamity; Hardmode Forge & Bloodstone & Polterplasm;
|
||||||
|
|
||||||
// Sentinels of the Devourer
|
// Sentinels of the Devourer
|
||||||
Storm Weaver; Calamity | Location | Item; Rune of Kos;
|
Storm Weaver; Calamity | Location | Item; Rune of Kos;
|
||||||
Armored Shell; Calamity; #Storm Weaver;
|
Armored Shell; Calamity; #Storm Weaver;
|
||||||
Ceaseless Void; Calamity | Location | Item; Rune of Kos;
|
Ceaseless Void; Calamity | Location | Item; Dungeon & Rune of Kos;
|
||||||
Dark Plasma; Calamity; #Ceaseless Void;
|
Dark Plasma; Calamity; #Ceaseless Void;
|
||||||
Signus, Envoy of the Devourer; Calamity | Location | Item; Rune of Kos;
|
Signus, Envoy of the Devourer; Calamity | Location | Item; Rune of Kos;
|
||||||
Twisting Nether; Calamity; #Signus, Envoy of the Devourer;
|
Twisting Nether; Calamity; #Signus, Envoy of the Devourer;
|
||||||
|
|
||||||
// Polterghast
|
// Polterghast
|
||||||
Polterghast; Calamity | Location | Item; Dungeon & ((Ancient Manipulator & Phantoplasm) | Moon Lord);
|
Polterghast; Calamity | Location | Item; Dungeon & ((Ancient Manipulator & Polterplasm) | Moon Lord);
|
||||||
Colossal Squid; Calamity | Location | Item;
|
Ruinous Soul; Calamity; #Polterghast;
|
||||||
Reaper Shark; Calamity | Location | Item;
|
Bloodflare Armor; Calamity | Armor Minions(3); Ancient Manipulator & Bloodstone Core & Ruinous Soul;
|
||||||
Eidolon Wyrm; Calamity | Location | Item;
|
Reaper Tooth; Calamity; Polterghast;
|
||||||
|
Omega Blue Armor; Calamity | Armor Minions(2); Ancient Manipulator & Reaper Tooth & Depth Cells & Ruinous Soul;
|
||||||
|
|
||||||
// The Old Duke
|
// The Old Duke
|
||||||
Mauler; Calamity | Location | Item; #Acid Rain Tier 3;
|
Mauler; Calamity | Location | Item; Acid Rain Tier 3;
|
||||||
Nuclear Terror; Calamity | Location | Item; #Acid Rain Tier 3;
|
Nuclear Terror; Calamity | Location | Item; Acid Rain Tier 3;
|
||||||
Acid Rain Tier 3; Calamity | Location | Item; #Acid Rain Tier 1 & Polterghast; // TODO Check
|
Acid Rain Tier 3; Calamity; #Acid Rain Tier 1 & Polterghast;
|
||||||
The Old Duke; Calamity | Location | Item; #Acid Rain Tier 3 | (Bug Net & Moon Lord) | (Amidias & The Old Duke);
|
The Old Duke; Calamity | Location | Item; Acid Rain Tier 3 | (Bug Net & Moon Lord) | (Amidias & The Old Duke) | (@getfixedboi & #The Destroyer);
|
||||||
|
|
||||||
// The Devourer of Gods
|
// The Devourer of Gods
|
||||||
The Devourer of Gods; Calamity | Location | Item | Goal; Ancient Manipulator & ((Armored Shell & Twisting Nether & Dark Plasma) | (Luminite Bar & Galactica Singularity & Phantoplasm));
|
The Devourer of Gods; Calamity | Location | Item | Goal; (Ancient Manipulator & ((Armored Shell & Twisting Nether & Dark Plasma) | (Luminite Bar & Galactica Singularity & Polterplasm))) | (@getfixedboi & #Supreme Alchemist, Cirrus);
|
||||||
# the_devourer_of_gods
|
# the_devourer_of_gods
|
||||||
Cosmilite Bar; Calamity; #The Devourer of Gods;
|
Cosmilite Bar; Calamity; #The Devourer of Gods;
|
||||||
Cosmic Anvil; Calamity; Ancient Manipulator & Hardmode Anvil & Cosmilite Bar & Luminite Bar & Galactica Singularity & Exodium Cluster;
|
Cosmic Anvil; Calamity; Ancient Manipulator & Hardmode Anvil & Cosmilite Bar & Luminite Bar & Galactica Singularity & Exodium Cluster;
|
||||||
Nightmare Fuel; Calamity; Pumpkin Moon & The Devourer of Gods;
|
Nightmare Fuel; Calamity; (Pumpkin Moon & The Devourer of Gods) | Occult Skull Crown;
|
||||||
|
Occult Skull Crown; Calamity | Getfixedboi; @getfixedboi & #Evil Boss; // Revengeance or getfixedboi
|
||||||
Endothermic Energy; Calamity; Frost Moon & The Devourer of Gods;
|
Endothermic Energy; Calamity; Frost Moon & The Devourer of Gods;
|
||||||
Darksun Fragment; Calamity; Solar Eclipse & The Devourer of Gods;
|
Darksun Fragment; Calamity; (Solar Eclipse & The Devourer of Gods) | Eclipse Mirror;
|
||||||
Dark Sun Ring; Calamity; Cosmic Anvil & Uelibloom Bar & Darksun Fragment;
|
Dark Sun Ring; Calamity; Cosmic Anvil & Uelibloom Bar & Darksun Fragment;
|
||||||
Ascendant Spirit Essence; Calamity; Ancient Manipulator & Phantoplasm & Nightmare Fuel & Endothermic Energy & Darksun Fragment;
|
Eclipse Mirror; Calamity; (Cosmic Anvil & Abyssal Mirror & Dark Matter Sheath & Darksun Fragment) | (@getfixedboi & #Ceaseless Void);
|
||||||
|
Ascendant Spirit Essence; Calamity; (Ancient Manipulator & Polterplasm & Nightmare Fuel & Endothermic Energy & Darksun Fragment) | (@getfixedboi & #Providence, the Profaned Goddess) | Elemental Gauntlet | Elemental Quiver | Nucleogenesis | Nanotech | Ethereal Talisman;
|
||||||
|
Fearmonger Armor; Calamity | Armor Minions(2); Cosmic Anvil & Spooky Armor & Cosmilite Bar & Soul of Fright & Ascendant Spirit Essence;
|
||||||
|
Silva Armor; Calamity | Armor Minions(5); Cosmic Anvil & Effulgent Feather & Ascendant Spirit Essence;
|
||||||
|
Elemental Gauntlet; Calamity; (Cosmic Anvil & Fire Gauntlet & Luminite Bar & Galactica Singularity & Ascendant Spirit Essence) | (@getfixedboi & #Storm Weaver);
|
||||||
|
Elemental Quiver; Calamity; (Cosmic Anvil & Magic Quiver & Deadshot Brooch & Luminite Bar & Galactica Singularity & Ascendant Spirit Essence) | (@getfixedboi & #Storm Weaver);
|
||||||
|
Nucleogenesis; Calamity; (Cosmic Anvil & Star-Tainted Generator & Statis' Curse & Luminite Bar & Galactica Singularity & Ascendant Spirit Essence) | (@getfixedboi & #Ceaseless Void);
|
||||||
|
Nanotech; Calamity; (Emblem & Raider's Talisman & Moonstone Crown & Electrician's Glove & Luminite Bar & Galactica Singularity & Ascendant Spirit Essence) | (@getfixedboi & #Signus, Envoy of the Devourer);
|
||||||
|
Ethereal Talisman; Calamity; (Cosmic Anvil & Sigil of Calamitas & Mana Flower & Luminite Bar & Galactica Singularity & Ascendant Spirit Essence) | (@getfixedboi & #Signus, Envoy of the Devourer);
|
||||||
|
|
||||||
// Yharon, Dragon of Rebirth
|
// Yharon, Dragon of Rebirth
|
||||||
Yharon, Dragon of Rebirth; Calamity | Location | Item | Goal; Ancient Manipulator & Effulgent Feather & Life Alloy;
|
Yharon, Dragon of Rebirth; Calamity | Location | Item | Goal; Ancient Manipulator & Effulgent Feather & Life Alloy;
|
||||||
# yharon_dragon_of_rebirth
|
# yharon_dragon_of_rebirth
|
||||||
Yharon Soul Fragment; Calamity; #Yharon, Dragon of Rebirth;
|
Yharon Soul Fragment; Calamity; #Yharon, Dragon of Rebirth | The Wand | Auric Bar;
|
||||||
Auric Ore; Calamity; Yharon, Dragon of Rebirth & @pickaxe(250);
|
The Wand; Calamity; (Cosmic Anvil & Wand of Sparking & Yharon Soul Fragment) | (@getfixedboi & #The Devourer of Gods);
|
||||||
Auric Bar; Calamity; Cosmic Anvil & Auric Ore & Yharon Soul Fragment;
|
Auric Ore; Calamity; (Yharon, Dragon of Rebirth & (@pickaxe(250) | Wall of Flesh)) | Auric Bar;
|
||||||
Zenith; Location | Item(Has Zenith) | Goal; Hardmode Anvil & Terra Blade & Meowmere & Star Wrath & Influx Waver & The Horseman's Blade & Seedler & Starfury & Bee Keeper & Enchanted Sword & Copper Shortsword & (~@calamity | Auric Bar);
|
Auric Bar; Calamity; (Cosmic Anvil & Auric Ore & Yharon Soul Fragment) | Shadowspec Bar;
|
||||||
|
Auric Tesla Armor; Calamity | Armor Minions(6); Cosmic Anvil & Silva Armor & Bloodflare Armor & Tarragon Armor & Auric Bar;
|
||||||
|
Infinity +1 Sword; Achievement | Grindy | Item(Has Zenith) | Goal(zenith); Hardmode Anvil & Terra Blade & Meowmere & Star Wrath & Influx Waver & The Horseman's Blade & Seedler & Starfury & Bee Keeper & Enchanted Sword & Copper Shortsword & (~@calamity | Auric Bar);
|
||||||
# zenith
|
# zenith
|
||||||
|
|
||||||
// Exo Mechs
|
// Exo Mechs
|
||||||
Auric Quantum Cooling Cell; Calamity; Cosmic Anvil & Auric Bar & Mysterious Circuitry & Dubious Plating & Endothermic Energy & Core of Eleum & Voltage Regulation System;
|
Auric Quantum Cooling Cell; Calamity; Cosmic Anvil & Auric Bar & Mysterious Circuitry & Dubious Plating & Endothermic Energy & Core of Eleum & Voltage Regulation System;
|
||||||
Exo Mechs; Calamity | Location | Item | Final Boss; Codebreaker Base & Decryption Computer & Auric Quantum Cooling Cell;
|
Exo Mechs; Calamity | Location | Item | Final Boss; Codebreaker Base & Decryption Computer & Auric Quantum Cooling Cell;
|
||||||
Supreme Witch, Calamitas; Calamity | Location | Item | Final Boss; Cosmic Anvil & Brimstone Slag & Auric Bar & Core of Calamity & Ashes of Calamity;
|
// XB-Infinity Hekate; Getfixedboi | Calamity; Codebreaker Base & Decryption Computer & Auric Quantum Cooling Cell & Blood Sample; // Currently, this boss doesn't affect logic at all
|
||||||
|
Supreme Witch, Calamitas; Calamity | Location | Item | Final Boss; (Cosmic Anvil & Brimstone Slag & Auric Bar & Core of Calamity & Ashes of Calamity) | (@getfixedboi & #Supreme Alchemist, Cirrus);
|
||||||
|
Supreme Alchemist, Cirrus; Getfixedboi | Calamity; Cosmic Anvil & Brimstone Slag & Auric Bar & Core of Calamity & Fabsol's Vodka;
|
||||||
|
THE LORDE; Getfixedboi | Calamity; Lihzahrd Temple;
|
||||||
# calamity_final_bosses
|
# calamity_final_bosses
|
||||||
Exo Prism; Calamity; #Exo Mechs;
|
Exo Prism; Calamity; #Exo Mechs | Shadowspec Bar;
|
||||||
Draedon's Forge; Calamity; Cosmic Anvil & Hardmode Forge & Tinkerer's Workshop & Ancient Manipulator & Auric Bar & Exo Prism & Ascendant Spirit Essence;
|
Draedon's Forge; Calamity; Cosmic Anvil & Hardmode Forge & Tinkerer's Workshop & Ancient Manipulator & Auric Bar & Exo Prism & Ascendant Spirit Essence;
|
||||||
|
|
||||||
// Supreme Witch, Calamitas
|
// Supreme Witch, Calamitas
|
||||||
Ashes of Annihilation; Calamity; #Supreme Witch, Calamitas;
|
Ashes of Annihilation; Calamity; #Supreme Witch, Calamitas | (@getfixedboi & #Calamitas Clone) | Shadowspec Bar;
|
||||||
Shadowspec Bar; Calamity; Draedon's Forge & Auric Bar & Exo Prism & Ashes of Annihilation;
|
Shadowspec Bar; Calamity; Draedon's Forge & Auric Bar & Exo Prism & Ashes of Annihilation;
|
||||||
Crystyl Crusher; Calamity | Pickaxe(1000); Draedon's Forge & Luminite Pickaxe & Blossom Pickaxe & Shadowspec Bar;
|
Crystyl Crusher; Calamity | Pickaxe(1000); Draedon's Forge & Luminite Pickaxe & Blossom Pickaxe & Shadowspec Bar;
|
||||||
Angelic Alliance; Calamity | Minions(2); Draedon's Forge & Hallowed Armor & Paladin's Shield & True Excalibur & Cross Necklace & Shadowspec Bar;
|
Angelic Alliance; Calamity | Minions(2); Draedon's Forge & Hallowed Armor & Paladin's Shield & True Excalibur & Cross Necklace & Shadowspec Bar;
|
||||||
|
Demonshade Armor; Calamity | Armor Minions(10); Draedon's Forge & Shadowspec Bar;
|
||||||
|
|
||||||
// Adult Eidolon Wyrm;
|
// Primordial Wyrm
|
||||||
Adult Eidolon Wyrm; Calamity | Location | Item | Goal; Rod of Discord | Normality Relocator;
|
Primordial Wyrm; Calamity | Location | Item | Goal; Rod of Discord | Normality Relocator;
|
||||||
# adult_eidolon_wyrm
|
# primordial_wyrm
|
||||||
|
|
||||||
|
// Boss Rush
|
||||||
|
Boss Rush; Calamity | Location | Item | Goal; Diving Gear | Neptune's Shell | (Aquatic Heart & Skeletron); // Might be obtainable earlier with Midas' Blessing
|
||||||
|
# boss_rush
|
||||||
|
@@ -1,11 +1,13 @@
|
|||||||
# Look at `Rules.dsv` first to get an idea for how this works
|
# Look at `Rules.dsv` first to get an idea for how this works
|
||||||
|
|
||||||
|
import logging
|
||||||
from typing import Union, Tuple, List, Dict, Set
|
from typing import Union, Tuple, List, Dict, Set
|
||||||
from worlds.AutoWorld import WebWorld, World
|
from worlds.AutoWorld import WebWorld, World
|
||||||
from BaseClasses import Region, ItemClassification, Tutorial, CollectionState
|
from BaseClasses import Region, ItemClassification, Tutorial, CollectionState
|
||||||
from .Checks import (
|
from .Checks import (
|
||||||
TerrariaItem,
|
TerrariaItem,
|
||||||
TerrariaLocation,
|
TerrariaLocation,
|
||||||
|
Condition,
|
||||||
goals,
|
goals,
|
||||||
rules,
|
rules,
|
||||||
rule_indices,
|
rule_indices,
|
||||||
@@ -25,7 +27,7 @@ from .Checks import (
|
|||||||
armor_minions,
|
armor_minions,
|
||||||
accessory_minions,
|
accessory_minions,
|
||||||
)
|
)
|
||||||
from .Options import TerrariaOptions
|
from .Options import TerrariaOptions, Goal
|
||||||
|
|
||||||
|
|
||||||
class TerrariaWeb(WebWorld):
|
class TerrariaWeb(WebWorld):
|
||||||
@@ -55,8 +57,8 @@ class TerrariaWorld(World):
|
|||||||
item_name_to_id = item_name_to_id
|
item_name_to_id = item_name_to_id
|
||||||
location_name_to_id = location_name_to_id
|
location_name_to_id = location_name_to_id
|
||||||
|
|
||||||
# Turn into an option when calamity is supported in the mod
|
|
||||||
calamity = False
|
calamity = False
|
||||||
|
getfixedboi = False
|
||||||
|
|
||||||
ter_items: List[str]
|
ter_items: List[str]
|
||||||
ter_locations: List[str]
|
ter_locations: List[str]
|
||||||
@@ -70,72 +72,100 @@ class TerrariaWorld(World):
|
|||||||
ter_goals = {}
|
ter_goals = {}
|
||||||
goal_items = set()
|
goal_items = set()
|
||||||
for location in goal_locations:
|
for location in goal_locations:
|
||||||
_, flags, _, _ = rules[rule_indices[location]]
|
flags = rules[rule_indices[location]].flags
|
||||||
|
if not self.options.calamity.value and "Calamity" in flags:
|
||||||
|
logging.warning(
|
||||||
|
f"Terraria goal `{Goal.name_lookup[self.options.goal.value]}`, which requires Calamity, was selected with Calamity disabled; enabling Calamity"
|
||||||
|
)
|
||||||
|
self.options.calamity.value = True
|
||||||
|
|
||||||
item = flags.get("Item") or f"Post-{location}"
|
item = flags.get("Item") or f"Post-{location}"
|
||||||
ter_goals[item] = location
|
ter_goals[item] = location
|
||||||
goal_items.add(item)
|
goal_items.add(item)
|
||||||
|
|
||||||
achievements = self.options.achievements.value
|
|
||||||
location_count = 0
|
location_count = 0
|
||||||
locations = []
|
locations = []
|
||||||
for rule, flags, _, _ in rules[:goal]:
|
|
||||||
if (
|
|
||||||
(not self.calamity and "Calamity" in flags)
|
|
||||||
or (achievements < 1 and "Achievement" in flags)
|
|
||||||
or (achievements < 2 and "Grindy" in flags)
|
|
||||||
or (achievements < 3 and "Fishing" in flags)
|
|
||||||
or (
|
|
||||||
rule == "Zenith" and self.options.goal.value != 11
|
|
||||||
) # Bad hardcoding
|
|
||||||
):
|
|
||||||
continue
|
|
||||||
if "Location" in flags or ("Achievement" in flags and achievements >= 1):
|
|
||||||
# Location
|
|
||||||
location_count += 1
|
|
||||||
locations.append(rule)
|
|
||||||
elif (
|
|
||||||
"Achievement" not in flags
|
|
||||||
and "Location" not in flags
|
|
||||||
and "Item" not in flags
|
|
||||||
):
|
|
||||||
# Event
|
|
||||||
locations.append(rule)
|
|
||||||
|
|
||||||
item_count = 0
|
item_count = 0
|
||||||
items = []
|
items = []
|
||||||
for rule, flags, _, _ in rules[:goal]:
|
for rule in rules[:goal]:
|
||||||
if not self.calamity and "Calamity" in flags:
|
early = "Early" in rule.flags
|
||||||
|
grindy = "Grindy" in rule.flags
|
||||||
|
fishing = "Fishing" in rule.flags
|
||||||
|
|
||||||
|
if (
|
||||||
|
(not self.options.getfixedboi.value and "Getfixedboi" in rule.flags)
|
||||||
|
or (self.options.getfixedboi.value and "Not Getfixedboi" in rule.flags)
|
||||||
|
or (not self.options.calamity.value and "Calamity" in rule.flags)
|
||||||
|
or (self.options.calamity.value and "Not Calamity" in rule.flags)
|
||||||
|
or (
|
||||||
|
self.options.getfixedboi.value
|
||||||
|
and self.options.calamity.value
|
||||||
|
and "Not Calamity Getfixedboi" in rule.flags
|
||||||
|
)
|
||||||
|
or (not self.options.early_achievements.value and early)
|
||||||
|
or (
|
||||||
|
not self.options.normal_achievements.value
|
||||||
|
and "Achievement" in rule.flags
|
||||||
|
and not early
|
||||||
|
and not grindy
|
||||||
|
and not fishing
|
||||||
|
)
|
||||||
|
or (not self.options.grindy_achievements.value and grindy)
|
||||||
|
or (not self.options.fishing_achievements.value and fishing)
|
||||||
|
) and rule.name not in goal_locations:
|
||||||
continue
|
continue
|
||||||
if "Item" in flags:
|
|
||||||
# Item
|
if "Location" in rule.flags or "Achievement" in rule.flags:
|
||||||
item_count += 1
|
# Location
|
||||||
if rule not in goal_locations:
|
location_count += 1
|
||||||
items.append(rule)
|
locations.append(rule.name)
|
||||||
elif (
|
elif (
|
||||||
"Achievement" not in flags
|
"Achievement" not in rule.flags
|
||||||
and "Location" not in flags
|
and "Location" not in rule.flags
|
||||||
and "Item" not in flags
|
and "Item" not in rule.flags
|
||||||
):
|
):
|
||||||
# Event
|
# Event
|
||||||
items.append(rule)
|
locations.append(rule.name)
|
||||||
|
|
||||||
|
if "Item" in rule.flags and not (
|
||||||
|
"Achievement" in rule.flags and rule.name not in goal_locations
|
||||||
|
):
|
||||||
|
# Item
|
||||||
|
item_count += 1
|
||||||
|
if rule.name not in goal_locations:
|
||||||
|
items.append(rule.name)
|
||||||
|
elif (
|
||||||
|
"Achievement" not in rule.flags
|
||||||
|
and "Location" not in rule.flags
|
||||||
|
and "Item" not in rule.flags
|
||||||
|
):
|
||||||
|
# Event
|
||||||
|
items.append(rule.name)
|
||||||
|
|
||||||
extra_checks = self.options.fill_extra_checks_with.value
|
|
||||||
ordered_rewards = [
|
ordered_rewards = [
|
||||||
reward
|
reward
|
||||||
for reward in labels["ordered"]
|
for reward in labels["ordered"]
|
||||||
if self.calamity or "Calamity" not in rewards[reward]
|
if self.options.calamity.value or "Calamity" not in rewards[reward]
|
||||||
]
|
]
|
||||||
while extra_checks == 1 and item_count < location_count and ordered_rewards:
|
while (
|
||||||
|
self.options.fill_extra_checks_with.value == 1
|
||||||
|
and item_count < location_count
|
||||||
|
and ordered_rewards
|
||||||
|
):
|
||||||
items.append(ordered_rewards.pop(0))
|
items.append(ordered_rewards.pop(0))
|
||||||
item_count += 1
|
item_count += 1
|
||||||
|
|
||||||
random_rewards = [
|
random_rewards = [
|
||||||
reward
|
reward
|
||||||
for reward in labels["random"]
|
for reward in labels["random"]
|
||||||
if self.calamity or "Calamity" not in rewards[reward]
|
if self.options.calamity.value or "Calamity" not in rewards[reward]
|
||||||
]
|
]
|
||||||
self.multiworld.random.shuffle(random_rewards)
|
self.multiworld.random.shuffle(random_rewards)
|
||||||
while extra_checks == 1 and item_count < location_count and random_rewards:
|
while (
|
||||||
|
self.options.fill_extra_checks_with.value == 1
|
||||||
|
and item_count < location_count
|
||||||
|
and random_rewards
|
||||||
|
):
|
||||||
items.append(random_rewards.pop(0))
|
items.append(random_rewards.pop(0))
|
||||||
item_count += 1
|
item_count += 1
|
||||||
|
|
||||||
@@ -173,9 +203,9 @@ class TerrariaWorld(World):
|
|||||||
def create_items(self) -> None:
|
def create_items(self) -> None:
|
||||||
for item in self.ter_items:
|
for item in self.ter_items:
|
||||||
if (rule_index := rule_indices.get(item)) is not None:
|
if (rule_index := rule_indices.get(item)) is not None:
|
||||||
_, flags, _, _ = rules[rule_index]
|
rule = rules[rule_index]
|
||||||
if "Item" in flags:
|
if "Item" in rule.flags:
|
||||||
name = flags.get("Item") or f"Post-{item}"
|
name = rule.flags.get("Item") or f"Post-{item}"
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
@@ -186,8 +216,8 @@ class TerrariaWorld(World):
|
|||||||
locked_items = {}
|
locked_items = {}
|
||||||
|
|
||||||
for location in self.ter_locations:
|
for location in self.ter_locations:
|
||||||
_, flags, _, _ = rules[rule_indices[location]]
|
rule = rules[rule_indices[location]]
|
||||||
if "Location" not in flags and "Achievement" not in flags:
|
if "Location" not in rule.flags and "Achievement" not in rule.flags:
|
||||||
if location in progression:
|
if location in progression:
|
||||||
classification = ItemClassification.progression
|
classification = ItemClassification.progression
|
||||||
else:
|
else:
|
||||||
@@ -202,95 +232,92 @@ class TerrariaWorld(World):
|
|||||||
for location, item in locked_items.items():
|
for location, item in locked_items.items():
|
||||||
self.multiworld.get_location(location, self.player).place_locked_item(item)
|
self.multiworld.get_location(location, self.player).place_locked_item(item)
|
||||||
|
|
||||||
def check_condition(
|
def check_condition(self, state, condition: Condition) -> bool:
|
||||||
self,
|
if condition.type == COND_ITEM:
|
||||||
state,
|
rule = rules[rule_indices[condition.condition]]
|
||||||
sign: bool,
|
if "Item" in rule.flags:
|
||||||
ty: int,
|
name = rule.flags.get("Item") or f"Post-{condition.condition}"
|
||||||
condition: Union[str, Tuple[Union[bool, None], list]],
|
|
||||||
arg: Union[str, int, None],
|
|
||||||
) -> bool:
|
|
||||||
if ty == COND_ITEM:
|
|
||||||
_, flags, _, _ = rules[rule_indices[condition]]
|
|
||||||
if "Item" in flags:
|
|
||||||
name = flags.get("Item") or f"Post-{condition}"
|
|
||||||
else:
|
else:
|
||||||
name = condition
|
name = condition.condition
|
||||||
|
|
||||||
return sign == state.has(name, self.player)
|
return condition.sign == state.has(name, self.player)
|
||||||
elif ty == COND_LOC:
|
elif condition.type == COND_LOC:
|
||||||
_, _, operator, conditions = rules[rule_indices[condition]]
|
rule = rules[rule_indices[condition.condition]]
|
||||||
return sign == self.check_conditions(state, operator, conditions)
|
return condition.sign == self.check_conditions(
|
||||||
elif ty == COND_FN:
|
state, rule.operator, rule.conditions
|
||||||
if condition == "npc":
|
)
|
||||||
if type(arg) is not int:
|
elif condition.type == COND_FN:
|
||||||
|
if condition.condition == "npc":
|
||||||
|
if type(condition.argument) is not int:
|
||||||
raise Exception("@npc requires an integer argument")
|
raise Exception("@npc requires an integer argument")
|
||||||
|
|
||||||
npc_count = 0
|
npc_count = 0
|
||||||
for npc in npcs:
|
for npc in npcs:
|
||||||
if state.has(npc, self.player):
|
if state.has(npc, self.player):
|
||||||
npc_count += 1
|
npc_count += 1
|
||||||
if npc_count >= arg:
|
if npc_count >= condition.argument:
|
||||||
return sign
|
return condition.sign
|
||||||
|
|
||||||
return not sign
|
return not condition.sign
|
||||||
elif condition == "calamity":
|
elif condition.condition == "calamity":
|
||||||
return sign == self.calamity
|
return condition.sign == self.options.calamity.value
|
||||||
elif condition == "grindy":
|
elif condition.condition == "grindy":
|
||||||
return sign == (self.options.achievements.value >= 2)
|
return condition.sign == self.options.grindy_achievements.value
|
||||||
elif condition == "pickaxe":
|
elif condition.condition == "pickaxe":
|
||||||
if type(arg) is not int:
|
if type(condition.argument) is not int:
|
||||||
raise Exception("@pickaxe requires an integer argument")
|
raise Exception("@pickaxe requires an integer argument")
|
||||||
|
|
||||||
for pickaxe, power in pickaxes.items():
|
for pickaxe, power in pickaxes.items():
|
||||||
if power >= arg and state.has(pickaxe, self.player):
|
if power >= condition.argument and state.has(pickaxe, self.player):
|
||||||
return sign
|
return condition.sign
|
||||||
|
|
||||||
return not sign
|
return not condition.sign
|
||||||
elif condition == "hammer":
|
elif condition.condition == "hammer":
|
||||||
if type(arg) is not int:
|
if type(condition.argument) is not int:
|
||||||
raise Exception("@hammer requires an integer argument")
|
raise Exception("@hammer requires an integer argument")
|
||||||
|
|
||||||
for hammer, power in hammers.items():
|
for hammer, power in hammers.items():
|
||||||
if power >= arg and state.has(hammer, self.player):
|
if power >= condition.argument and state.has(hammer, self.player):
|
||||||
return sign
|
return condition.sign
|
||||||
|
|
||||||
return not sign
|
return not condition.sign
|
||||||
elif condition == "mech_boss":
|
elif condition.condition == "mech_boss":
|
||||||
if type(arg) is not int:
|
if type(condition.argument) is not int:
|
||||||
raise Exception("@mech_boss requires an integer argument")
|
raise Exception("@mech_boss requires an integer argument")
|
||||||
|
|
||||||
boss_count = 0
|
boss_count = 0
|
||||||
for boss in mech_bosses:
|
for boss in mech_bosses:
|
||||||
if state.has(boss, self.player):
|
if state.has(boss, self.player):
|
||||||
boss_count += 1
|
boss_count += 1
|
||||||
if boss_count >= arg:
|
if boss_count >= condition.argument:
|
||||||
return sign
|
return condition.sign
|
||||||
|
|
||||||
return not sign
|
return not condition.sign
|
||||||
elif condition == "minions":
|
elif condition.condition == "minions":
|
||||||
if type(arg) is not int:
|
if type(condition.argument) is not int:
|
||||||
raise Exception("@minions requires an integer argument")
|
raise Exception("@minions requires an integer argument")
|
||||||
|
|
||||||
minion_count = 1
|
minion_count = 1
|
||||||
for armor, minions in armor_minions.items():
|
for armor, minions in armor_minions.items():
|
||||||
if state.has(armor, self.player) and minions + 1 > minion_count:
|
if state.has(armor, self.player) and minions + 1 > minion_count:
|
||||||
minion_count = minions + 1
|
minion_count = minions + 1
|
||||||
if minion_count >= arg:
|
if minion_count >= condition.argument:
|
||||||
return sign
|
return condition.sign
|
||||||
|
|
||||||
for accessory, minions in accessory_minions.items():
|
for accessory, minions in accessory_minions.items():
|
||||||
if state.has(accessory, self.player):
|
if state.has(accessory, self.player):
|
||||||
minion_count += minions
|
minion_count += minions
|
||||||
if minion_count >= arg:
|
if minion_count >= condition.argument:
|
||||||
return sign
|
return condition.sign
|
||||||
|
|
||||||
return not sign
|
return not condition.sign
|
||||||
|
elif condition.condition == "getfixedboi":
|
||||||
|
return condition.sign == self.options.getfixedboi.value
|
||||||
else:
|
else:
|
||||||
raise Exception(f"Unknown function {condition}")
|
raise Exception(f"Unknown function {condition.condition}")
|
||||||
elif ty == COND_GROUP:
|
elif condition.type == COND_GROUP:
|
||||||
operator, conditions = condition
|
operator, conditions = condition.condition
|
||||||
return sign == self.check_conditions(state, operator, conditions)
|
return condition.sign == self.check_conditions(state, operator, conditions)
|
||||||
|
|
||||||
def check_conditions(
|
def check_conditions(
|
||||||
self,
|
self,
|
||||||
@@ -310,22 +337,22 @@ class TerrariaWorld(World):
|
|||||||
return True
|
return True
|
||||||
if len(conditions) > 1:
|
if len(conditions) > 1:
|
||||||
raise Exception("Found multiple conditions without an operator")
|
raise Exception("Found multiple conditions without an operator")
|
||||||
return self.check_condition(state, *conditions[0])
|
return self.check_condition(state, conditions[0])
|
||||||
elif operator:
|
elif operator:
|
||||||
return any(
|
return any(
|
||||||
self.check_condition(state, *condition) for condition in conditions
|
self.check_condition(state, condition) for condition in conditions
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return all(
|
return all(
|
||||||
self.check_condition(state, *condition) for condition in conditions
|
self.check_condition(state, condition) for condition in conditions
|
||||||
)
|
)
|
||||||
|
|
||||||
def set_rules(self) -> None:
|
def set_rules(self) -> None:
|
||||||
for location in self.ter_locations:
|
for location in self.ter_locations:
|
||||||
|
|
||||||
def check(state: CollectionState, location=location):
|
def check(state: CollectionState, location=location):
|
||||||
_, _, operator, conditions = rules[rule_indices[location]]
|
rule = rules[rule_indices[location]]
|
||||||
return self.check_conditions(state, operator, conditions)
|
return self.check_conditions(state, rule.operator, rule.conditions)
|
||||||
|
|
||||||
self.multiworld.get_location(location, self.player).access_rule = check
|
self.multiworld.get_location(location, self.player).access_rule = check
|
||||||
|
|
||||||
@@ -336,6 +363,12 @@ class TerrariaWorld(World):
|
|||||||
def fill_slot_data(self) -> Dict[str, object]:
|
def fill_slot_data(self) -> Dict[str, object]:
|
||||||
return {
|
return {
|
||||||
"goal": list(self.goal_locations),
|
"goal": list(self.goal_locations),
|
||||||
"achievements": self.options.achievements.value,
|
|
||||||
"deathlink": bool(self.options.death_link),
|
"deathlink": bool(self.options.death_link),
|
||||||
|
# The rest of these are included for trackers
|
||||||
|
"calamity": self.options.calamity.value,
|
||||||
|
"getfixedboi": self.options.getfixedboi.value,
|
||||||
|
"early_achievements": self.options.early_achievements.value,
|
||||||
|
"normal_achievements": self.options.normal_achievements.value,
|
||||||
|
"grindy_achievements": self.options.grindy_achievements.value,
|
||||||
|
"fishing_achievements": self.options.fishing_achievements.value,
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user