Skip to content

Commit c74ce70

Browse files
el-uFlySniper
authored andcommitted
lufia2ac: code cleanup (ArchipelagoMW#1971)
1 parent f40fb11 commit c74ce70

File tree

3 files changed

+21
-51
lines changed

3 files changed

+21
-51
lines changed

worlds/lufia2ac/__init__.py

+20-30
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import base64
22
import itertools
33
import os
4-
import settings
5-
64
from enum import IntFlag
7-
from random import Random
85
from typing import Any, ClassVar, Dict, get_type_hints, Iterator, List, Set, Tuple
96

10-
from BaseClasses import Entrance, Item, ItemClassification, Location, MultiWorld, Region, Tutorial
7+
import settings
8+
from BaseClasses import Item, ItemClassification, Location, MultiWorld, Region, Tutorial
119
from Options import AssembleOptions
1210
from Utils import __version__
1311
from worlds.AutoWorld import WebWorld, World
@@ -103,23 +101,21 @@ def generate_early(self) -> None:
103101

104102
def create_regions(self) -> None:
105103
menu = Region("Menu", self.player, self.multiworld)
106-
menu.exits.append(Entrance(self.player, "AncientDungeonEntrance", menu))
107104
self.multiworld.regions.append(menu)
108105

109106
ancient_dungeon = Region("AncientDungeon", self.player, self.multiworld, "Ancient Dungeon")
110-
ancient_dungeon.exits.append(Entrance(self.player, "FinalFloorEntrance", ancient_dungeon))
111107
item_count: int = int(self.o.blue_chest_count)
112108
if self.o.shuffle_capsule_monsters:
113109
item_count += len(self.item_name_groups["Capsule monsters"])
114110
if self.o.shuffle_party_members:
115111
item_count += len(self.item_name_groups["Party members"])
116112
for location_name, location_id in itertools.islice(l2ac_location_name_to_id.items(), item_count):
117113
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)
119114
for i in range(CHESTS_PER_SPHERE, item_count, CHESTS_PER_SPHERE):
120115
chest_access = \
121116
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))
123119
ancient_dungeon.locations.append(chest_access)
124120
for iris in self.item_name_groups["Iris treasures"]:
125121
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:
138134
final_floor.locations.append(boss)
139135
self.multiworld.regions.append(final_floor)
140136

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")
145139

146140
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)
149143
item_pool += [item_name for item_name, count in self.o.custom_item_pool.items() for _ in range(count)]
150144

151145
if self.o.shuffle_capsule_monsters:
@@ -155,9 +149,7 @@ def create_items(self) -> None:
155149
item_pool += self.item_name_groups["Party members"]
156150
self.o.blue_chest_count.value += len(self.item_name_groups["Party members"])
157151
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))
161153

162154
def set_rules(self) -> None:
163155
for i in range(1, self.o.blue_chest_count):
@@ -270,7 +262,7 @@ def create_item(self, name: str) -> Item:
270262

271263
def get_filler_item_name(self) -> str:
272264
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]
274266

275267
# end of overridden AutoWorld.py methods
276268

@@ -324,33 +316,31 @@ def get_enemy_floors_sprites_and_movement_patterns(self) -> Tuple[bytes, bytes,
324316
index_set: Set[int] = set(used_indices)
325317
used_pointers: List[bytes] = [pointer for index, pointer in enumerate(pointers) if index in index_set]
326318

327-
slot_random: Random = self.multiworld.per_slot_randoms[self.player]
328-
329319
d: int = 2 * 6
330320
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)
332322
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)
334324

335325
if self.o.enemy_sprites == EnemySprites.option_shuffle:
336-
slot_random.shuffle(used_sprites)
326+
self.random.shuffle(used_sprites)
337327
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))
339329
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)
341331
elif self.o.enemy_sprites.sprite:
342332
used_sprites = [self.o.enemy_sprites.sprite] * len(used_sprites)
343333

344334
if self.o.enemy_movement_patterns == EnemyMovementPatterns.option_shuffle_by_pattern:
345-
slot_random.shuffle(used_pointers)
335+
self.random.shuffle(used_pointers)
346336
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))
348338
elif self.o.enemy_movement_patterns == EnemyMovementPatterns.option_shuffle_by_sprite:
349-
slot_random.shuffle(used_indices)
339+
self.random.shuffle(used_indices)
350340
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))
352342
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)
354344
elif self.o.enemy_movement_patterns.sprite:
355345
used_indices = [indices[self.o.enemy_movement_patterns.sprite - 128]] * len(used_indices)
356346

worlds/lufia2ac/basepatch/basepatch.asm

+1-21
Original file line numberDiff line numberDiff line change
@@ -192,26 +192,6 @@ ReportLocationCheck:
192192

193193

194194
; report event flag based goal completion
195-
pushpc
196-
org $D09000
197-
DB $00,$01,$01,$02,$01,$02,$02,$03,$01,$02,$02,$03,$02,$03,$03,$04, \
198-
$01,$02,$02,$03,$02,$03,$03,$04,$02,$03,$03,$04,$03,$04,$04,$05, \
199-
$01,$02,$02,$03,$02,$03,$03,$04,$02,$03,$03,$04,$03,$04,$04,$05, \
200-
$02,$03,$03,$04,$03,$04,$04,$05,$03,$04,$04,$05,$04,$05,$05,$06, \
201-
$01,$02,$02,$03,$02,$03,$03,$04,$02,$03,$03,$04,$03,$04,$04,$05, \
202-
$02,$03,$03,$04,$03,$04,$04,$05,$03,$04,$04,$05,$04,$05,$05,$06, \
203-
$02,$03,$03,$04,$03,$04,$04,$05,$03,$04,$04,$05,$04,$05,$05,$06, \
204-
$03,$04,$04,$05,$04,$05,$05,$06,$04,$05,$05,$06,$05,$06,$06,$07, \
205-
$01,$02,$02,$03,$02,$03,$03,$04,$02,$03,$03,$04,$03,$04,$04,$05, \
206-
$02,$03,$03,$04,$03,$04,$04,$05,$03,$04,$04,$05,$04,$05,$05,$06, \
207-
$02,$03,$03,$04,$03,$04,$04,$05,$03,$04,$04,$05,$04,$05,$05,$06, \
208-
$03,$04,$04,$05,$04,$05,$05,$06,$04,$05,$05,$06,$05,$06,$06,$07, \
209-
$02,$03,$03,$04,$03,$04,$04,$05,$03,$04,$04,$05,$04,$05,$05,$06, \
210-
$03,$04,$04,$05,$04,$05,$05,$06,$04,$05,$05,$06,$05,$06,$06,$07, \
211-
$03,$04,$04,$05,$04,$05,$05,$06,$04,$05,$05,$06,$05,$06,$06,$07, \
212-
$04,$05,$05,$06,$05,$06,$06,$07,$05,$06,$06,$07,$06,$07,$07,$08
213-
pullpc
214-
215195
Goal:
216196
TDC
217197
LDA $0797 ; load EV flags $C8-$CF (iris sword, iris shield, ..., iris pot)
@@ -223,7 +203,7 @@ Goal:
223203
STA $F02031 ; report boss victory goal
224204
TYA
225205
AND.b #$01 ; test iris tiara
226-
ADC $D09000,X ; test remaining iris items via lookup table
206+
ADC $97B418,X ; test remaining iris items via predefined lookup table for number of bits set in a byte
227207
CMP $D08017 ; compare with number of treasures required
228208
BMI +
229209
LDA.b #$01
620 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)