Compare commits

..

3 Commits

5 changed files with 19 additions and 26 deletions

View File

@@ -335,6 +335,13 @@ class MultiWorld():
for item_name, item_count in next(iter(common_item_count.values())).items(): for item_name, item_count in next(iter(common_item_count.values())).items():
for _ in range(item_count): for _ in range(item_count):
new_item = group["world"].create_item(item_name) new_item = group["world"].create_item(item_name)
# Make sure this item is picked up even if it is not progression
# (Monkeypatching a property is kind of hard, this is one of the only ways)
class AdvancementTrue(new_item.__class__):
advancement = True
new_item.__class__ = AdvancementTrue
# mangle together all original classification bits # mangle together all original classification bits
new_item.classification |= classifications[item_name] new_item.classification |= classifications[item_name]
new_itempool.append(new_item) new_itempool.append(new_item)
@@ -1204,26 +1211,13 @@ class Location:
class ItemClassification(IntFlag): class ItemClassification(IntFlag):
filler = 0b0000 filler = 0b0000 # aka trash, as in filler items like ammo, currency etc,
""" aka trash, as in filler items like ammo, currency etc """ progression = 0b0001 # Item that is logically relevant
useful = 0b0010 # Item that is generally quite useful, but not required for anything logical
progression = 0b0001 trap = 0b0100 # detrimental item
""" Item that is logically relevant. skip_balancing = 0b1000 # should technically never occur on its own
Protects this item from being placed on excluded or unreachable locations. """ # Item that is logically relevant, but progression balancing should not touch.
# Typically currency or other counted items.
useful = 0b0010
""" Item that is especially useful.
Protects this item from being placed on excluded or unreachable locations.
When combined with another flag like "progression", it means "an especially useful progression item". """
trap = 0b0100
""" Item that is detrimental in some way. """
skip_balancing = 0b1000
""" should technically never occur on its own
Item that is logically relevant, but progression balancing should not touch.
Typically currency or other counted items. """
progression_skip_balancing = 0b1001 # only progression gets balanced progression_skip_balancing = 0b1001 # only progression gets balanced
def as_flag(self) -> int: def as_flag(self) -> int:

View File

@@ -529,7 +529,7 @@ def distribute_items_restrictive(multiworld: MultiWorld,
if excludedlocations: if excludedlocations:
raise FillError( raise FillError(
f"Not enough filler items for excluded locations. " f"Not enough filler items for excluded locations. "
f"There are {len(excludedlocations)} more excluded locations than excludable items.", f"There are {len(excludedlocations)} more excluded locations than filler or trap items.",
multiworld=multiworld, multiworld=multiworld,
) )

View File

@@ -510,7 +510,7 @@ In JSON this may look like:
| ----- | ----- | | ----- | ----- |
| 0 | Nothing special about this item | | 0 | Nothing special about this item |
| 0b001 | If set, indicates the item can unlock logical advancement | | 0b001 | If set, indicates the item can unlock logical advancement |
| 0b010 | If set, indicates the item is especially useful | | 0b010 | If set, indicates the item is important but not in a way that unlocks advancement |
| 0b100 | If set, indicates the item is a trap | | 0b100 | If set, indicates the item is a trap |
### JSONMessagePart ### JSONMessagePart

View File

@@ -248,8 +248,7 @@ will all have the same ID. Name must not be numeric (must contain at least 1 let
Other classifications include: Other classifications include:
* `filler`: a regular item or trash item * `filler`: a regular item or trash item
* `useful`: item that is especially useful. Cannot be placed on excluded or unreachable locations. When combined with * `useful`: generally quite useful, but not required for anything logical. Cannot be placed on excluded locations
another flag like "progression", it means "an especially useful progression item".
* `trap`: negative impact on the player * `trap`: negative impact on the player
* `skip_balancing`: denotes that an item should not be moved to an earlier sphere for the purpose of balancing (to be * `skip_balancing`: denotes that an item should not be moved to an earlier sphere for the purpose of balancing (to be
combined with `progression`; see below) combined with `progression`; see below)

View File

@@ -131,8 +131,8 @@ guide: [Archipelago Plando Guide](/tutorial/Archipelago/plando/en)
the location without using any hint points. the location without using any hint points.
* `start_location_hints` is the same as `start_hints` but for locations, allowing you to hint for the item contained * `start_location_hints` is the same as `start_hints` but for locations, allowing you to hint for the item contained
there without using any hint points. there without using any hint points.
* `exclude_locations` lets you define any locations that you don't want to do and prevents items classified as * `exclude_locations` lets you define any locations that you don't want to do and forces a filler or trap item which
"progression" or "useful" from being placed on them. isn't necessary for progression into these locations.
* `priority_locations` lets you define any locations that you want to do and forces a progression item into these * `priority_locations` lets you define any locations that you want to do and forces a progression item into these
locations. locations.
* `item_links` allows players to link their items into a group with the same item link name and game. The items declared * `item_links` allows players to link their items into a group with the same item link name and game. The items declared