@@ -38,7 +38,7 @@ def create_item(self, item: str) -> EnderLiliesItem:
38
38
def create_items (self ) -> None :
39
39
starting_item = assign_starting_item (self .multiworld , self .player , items )
40
40
41
- filter_items_to_locations_number (self .multiworld , items )
41
+ filter_items_to_locations_number (self .multiworld , self . player , items )
42
42
43
43
for item , data in items .items ():
44
44
if item != starting_item :
@@ -98,22 +98,28 @@ def fill_slot_data(self) -> Dict[str, Any]:
98
98
slot_data [location .name ] = f"AP.{ location .address } "
99
99
return slot_data
100
100
101
- def filter_items_to_locations_number (multiworld : MultiWorld , items ):
102
- # Not sure how to differ locations with item and entrance. Using address for now...
103
- nb_locations_items = len ([x for x in locations if locations [x ].address is not None ])
104
- nb_items = sum ([items [x ].count for x in items ])
105
- nb_excedant_items = nb_items - nb_locations_items
106
- if nb_excedant_items > 0 :
107
- items_valid_to_discard = sorted (x for x in items if items [x ].classification == ItemClassification .filler )
108
- for i in range (nb_excedant_items ):
109
- discard_candidate = multiworld .random .choice (items_valid_to_discard )
110
- if items [discard_candidate ].count == 1 :
111
- del items [discard_candidate ]
112
- items_valid_to_discard .remove (discard_candidate )
113
- else :
114
- items [discard_candidate ] = ItemData (code = items [discard_candidate ].code ,
115
- count = items [discard_candidate ].count - 1 ,
116
- classification = items [discard_candidate ].classification )
101
+ def filter_items_to_locations_number (multiworld : MultiWorld , player : int , items ):
102
+ val = get_option_value (multiworld , player , "item_filter_behavior" )
103
+ if val != 2 :
104
+ # Not sure how to differ locations with item and entrance. Using address for now...
105
+ nb_locations_items = len ([x for x in locations if locations [x ].address is not None ])
106
+ nb_items = sum ([items [x ].count for x in items ])
107
+ nb_excedant_items = nb_items - nb_locations_items
108
+ if nb_excedant_items > 0 :
109
+ if val == 0 :
110
+ discard_candidates = sorted (x for x in items if items [x ].classification == ItemClassification .filler )
111
+ elif val == 1 :
112
+ discard_candidates = sorted (x for x in items if (items [x ].classification == ItemClassification .filler
113
+ or items [x ].classification == ItemClassification .useful ))
114
+ for i in range (nb_excedant_items ):
115
+ curr_candidate = multiworld .random .choice (discard_candidates )
116
+ if items [curr_candidate ].count == 1 :
117
+ del items [curr_candidate ]
118
+ discard_candidates .remove (curr_candidate )
119
+ else :
120
+ items [curr_candidate ] = ItemData (code = items [curr_candidate ].code ,
121
+ count = items [curr_candidate ].count - 1 ,
122
+ classification = items [curr_candidate ].classification )
117
123
118
124
def assign_starting_item (multiworld : MultiWorld , player : int , items ) -> str :
119
125
non_local_items = multiworld .non_local_items [player ].value
0 commit comments