2
2
import os
3
3
4
4
from worlds .AutoWorld import World
5
- from BaseClasses import ItemClassification , Region , Item , Location
5
+ from BaseClasses import ItemClassification , Region , Item , Location , MultiWorld
6
6
from worlds .generic .Rules import set_rule , add_item_rule
7
- from typing import Any , Dict
7
+ from typing import Any , Dict , List
8
8
9
9
from .Items import items
10
10
from .Locations import locations
11
11
from .Rules import get_rules
12
12
from .Names import names as el
13
+ from .Options import el_options , get_option_value
13
14
14
15
ENDERLILIES = "Ender Lilies"
15
16
@@ -24,6 +25,7 @@ class EnderLiliesWorld(World):
24
25
Ender Lilies: QUIETUS OF THE KNIGHTS
25
26
"""
26
27
game = ENDERLILIES
28
+ option_definitions = el_options
27
29
location_name_to_id = { name : data .address for name , data in locations .items () }
28
30
item_name_to_id = { name : data .code for name , data in items .items () }
29
31
@@ -34,9 +36,12 @@ def create_item(self, item: str) -> EnderLiliesItem:
34
36
return EnderLiliesItem (item , ItemClassification .progression , None , self .player )
35
37
36
38
def create_items (self ) -> None :
39
+ starting_item = assign_starting_item (self .multiworld , self .player , items )
40
+
37
41
for item , data in items .items ():
38
- for i in range (data .count ):
39
- self .multiworld .itempool .append (self .create_item (item ))
42
+ if item != starting_item :
43
+ for i in range (data .count ):
44
+ self .multiworld .itempool .append (self .create_item (item ))
40
45
41
46
def create_regions (self ) -> None :
42
47
regions = {
@@ -90,3 +95,27 @@ def fill_slot_data(self) -> Dict[str, Any]:
90
95
else :
91
96
slot_data [location .name ] = f"AP.{ location .address } "
92
97
return slot_data
98
+
99
+ def assign_starting_item (multiworld : MultiWorld , player : int , items ) -> str :
100
+ non_local_items = multiworld .non_local_items [player ].value
101
+
102
+ val = get_option_value (multiworld , player , "starting_spirit" )
103
+ if val == 0 :
104
+ spirit_list = ['Spirit.s5000' ]
105
+ elif val == 1 :
106
+ spirit_list = [x for x in list (items .keys ()) if x .startswith ('Spirit.s5' )]
107
+ elif val == 2 :
108
+ spirit_list = [x for x in list (items .keys ()) if x .startswith ('Spirit.s' )]
109
+
110
+ avail_spirit = sorted (item for item in spirit_list if item not in non_local_items )
111
+ if not avail_spirit :
112
+ raise Exception ("At least one spirit must be local" )
113
+
114
+ spirit_name = multiworld .random .choice (avail_spirit )
115
+
116
+ item = EnderLiliesItem (spirit_name , items [spirit_name ].classification ,
117
+ items [spirit_name ].code , player )
118
+
119
+ multiworld .get_location ('starting_weapon' , player ).place_locked_item (item )
120
+
121
+ return spirit_name
0 commit comments