1
1
import base64
2
2
import itertools
3
3
import os
4
- import settings
5
-
6
4
from enum import IntFlag
7
- from random import Random
8
5
from typing import Any , ClassVar , Dict , get_type_hints , Iterator , List , Set , Tuple
9
6
10
- from BaseClasses import Entrance , Item , ItemClassification , Location , MultiWorld , Region , Tutorial
7
+ import settings
8
+ from BaseClasses import Item , ItemClassification , Location , MultiWorld , Region , Tutorial
11
9
from Options import AssembleOptions
12
10
from Utils import __version__
13
11
from worlds .AutoWorld import WebWorld , World
@@ -103,23 +101,21 @@ def generate_early(self) -> None:
103
101
104
102
def create_regions (self ) -> None :
105
103
menu = Region ("Menu" , self .player , self .multiworld )
106
- menu .exits .append (Entrance (self .player , "AncientDungeonEntrance" , menu ))
107
104
self .multiworld .regions .append (menu )
108
105
109
106
ancient_dungeon = Region ("AncientDungeon" , self .player , self .multiworld , "Ancient Dungeon" )
110
- ancient_dungeon .exits .append (Entrance (self .player , "FinalFloorEntrance" , ancient_dungeon ))
111
107
item_count : int = int (self .o .blue_chest_count )
112
108
if self .o .shuffle_capsule_monsters :
113
109
item_count += len (self .item_name_groups ["Capsule monsters" ])
114
110
if self .o .shuffle_party_members :
115
111
item_count += len (self .item_name_groups ["Party members" ])
116
112
for location_name , location_id in itertools .islice (l2ac_location_name_to_id .items (), item_count ):
117
113
ancient_dungeon .locations .append (L2ACLocation (self .player , location_name , location_id , ancient_dungeon ))
118
- prog_chest_access = L2ACItem ("Progressive chest access" , ItemClassification .progression , None , self .player )
119
114
for i in range (CHESTS_PER_SPHERE , item_count , CHESTS_PER_SPHERE ):
120
115
chest_access = \
121
116
L2ACLocation (self .player , f"Chest access { i + 1 } -{ i + CHESTS_PER_SPHERE } " , None , ancient_dungeon )
122
- chest_access .place_locked_item (prog_chest_access )
117
+ chest_access .place_locked_item (
118
+ L2ACItem ("Progressive chest access" , ItemClassification .progression , None , self .player ))
123
119
ancient_dungeon .locations .append (chest_access )
124
120
for iris in self .item_name_groups ["Iris treasures" ]:
125
121
treasure_name : str = f"Iris treasure { self .item_name_to_id [iris ] - self .item_name_to_id ['Iris sword' ] + 1 } "
@@ -138,14 +134,12 @@ def create_regions(self) -> None:
138
134
final_floor .locations .append (boss )
139
135
self .multiworld .regions .append (final_floor )
140
136
141
- self .multiworld .get_entrance ("AncientDungeonEntrance" , self .player ) \
142
- .connect (self .multiworld .get_region ("AncientDungeon" , self .player ))
143
- self .multiworld .get_entrance ("FinalFloorEntrance" , self .player ) \
144
- .connect (self .multiworld .get_region ("FinalFloor" , self .player ))
137
+ menu .connect (ancient_dungeon , "AncientDungeonEntrance" )
138
+ ancient_dungeon .connect (final_floor , "FinalFloorEntrance" )
145
139
146
140
def create_items (self ) -> None :
147
- item_pool : List [str ] = self .multiworld . random .choices (sorted (self .item_name_groups ["Blue chest items" ]),
148
- k = self .o .blue_chest_count - self .o .custom_item_pool .count )
141
+ item_pool : List [str ] = self .random .choices (sorted (self .item_name_groups ["Blue chest items" ]),
142
+ k = self .o .blue_chest_count - self .o .custom_item_pool .count )
149
143
item_pool += [item_name for item_name , count in self .o .custom_item_pool .items () for _ in range (count )]
150
144
151
145
if self .o .shuffle_capsule_monsters :
@@ -155,9 +149,7 @@ def create_items(self) -> None:
155
149
item_pool += self .item_name_groups ["Party members" ]
156
150
self .o .blue_chest_count .value += len (self .item_name_groups ["Party members" ])
157
151
for item_name in item_pool :
158
- item_data : ItemData = l2ac_item_table [item_name ]
159
- item_id : int = items_start_id + item_data .code
160
- self .multiworld .itempool .append (L2ACItem (item_name , item_data .classification , item_id , self .player ))
152
+ self .multiworld .itempool .append (self .create_item (item_name ))
161
153
162
154
def set_rules (self ) -> None :
163
155
for i in range (1 , self .o .blue_chest_count ):
@@ -270,7 +262,7 @@ def create_item(self, name: str) -> Item:
270
262
271
263
def get_filler_item_name (self ) -> str :
272
264
return ["Potion" , "Hi-Magic" , "Miracle" , "Hi-Potion" , "Potion" , "Ex-Potion" , "Regain" , "Ex-Magic" , "Hi-Magic" ][
273
- (self .multiworld . random .randrange (9 ) + self . multiworld .random .randrange (9 )) // 2 ]
265
+ (self .random .randrange (9 ) + self .random .randrange (9 )) // 2 ]
274
266
275
267
# end of overridden AutoWorld.py methods
276
268
@@ -324,33 +316,31 @@ def get_enemy_floors_sprites_and_movement_patterns(self) -> Tuple[bytes, bytes,
324
316
index_set : Set [int ] = set (used_indices )
325
317
used_pointers : List [bytes ] = [pointer for index , pointer in enumerate (pointers ) if index in index_set ]
326
318
327
- slot_random : Random = self .multiworld .per_slot_randoms [self .player ]
328
-
329
319
d : int = 2 * 6
330
320
if self .o .enemy_floor_numbers == EnemyFloorNumbers .option_shuffle :
331
- constrained_shuffle (used_formations , d , random = slot_random )
321
+ constrained_shuffle (used_formations , d , random = self . random )
332
322
elif self .o .enemy_floor_numbers == EnemyFloorNumbers .option_randomize :
333
- used_formations = constrained_choices (used_formations , d , k = len (used_formations ), random = slot_random )
323
+ used_formations = constrained_choices (used_formations , d , k = len (used_formations ), random = self . random )
334
324
335
325
if self .o .enemy_sprites == EnemySprites .option_shuffle :
336
- slot_random .shuffle (used_sprites )
326
+ self . random .shuffle (used_sprites )
337
327
elif self .o .enemy_sprites == EnemySprites .option_randomize :
338
- used_sprites = slot_random .choices (tuple (dict .fromkeys (used_sprites )), k = len (used_sprites ))
328
+ used_sprites = self . random .choices (tuple (dict .fromkeys (used_sprites )), k = len (used_sprites ))
339
329
elif self .o .enemy_sprites == EnemySprites .option_singularity :
340
- used_sprites = [slot_random .choice (tuple (dict .fromkeys (used_sprites )))] * len (used_sprites )
330
+ used_sprites = [self . random .choice (tuple (dict .fromkeys (used_sprites )))] * len (used_sprites )
341
331
elif self .o .enemy_sprites .sprite :
342
332
used_sprites = [self .o .enemy_sprites .sprite ] * len (used_sprites )
343
333
344
334
if self .o .enemy_movement_patterns == EnemyMovementPatterns .option_shuffle_by_pattern :
345
- slot_random .shuffle (used_pointers )
335
+ self . random .shuffle (used_pointers )
346
336
elif self .o .enemy_movement_patterns == EnemyMovementPatterns .option_randomize_by_pattern :
347
- used_pointers = slot_random .choices (tuple (dict .fromkeys (used_pointers )), k = len (used_pointers ))
337
+ used_pointers = self . random .choices (tuple (dict .fromkeys (used_pointers )), k = len (used_pointers ))
348
338
elif self .o .enemy_movement_patterns == EnemyMovementPatterns .option_shuffle_by_sprite :
349
- slot_random .shuffle (used_indices )
339
+ self . random .shuffle (used_indices )
350
340
elif self .o .enemy_movement_patterns == EnemyMovementPatterns .option_randomize_by_sprite :
351
- used_indices = slot_random .choices (tuple (dict .fromkeys (used_indices )), k = len (used_indices ))
341
+ used_indices = self . random .choices (tuple (dict .fromkeys (used_indices )), k = len (used_indices ))
352
342
elif self .o .enemy_movement_patterns == EnemyMovementPatterns .option_singularity :
353
- used_indices = [slot_random .choice (tuple (dict .fromkeys (used_indices )))] * len (used_indices )
343
+ used_indices = [self . random .choice (tuple (dict .fromkeys (used_indices )))] * len (used_indices )
354
344
elif self .o .enemy_movement_patterns .sprite :
355
345
used_indices = [indices [self .o .enemy_movement_patterns .sprite - 128 ]] * len (used_indices )
356
346
0 commit comments