mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-03-10 01:23:48 -07:00
Compare commits
7 Commits
NewSoupVi-
...
0.5.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0dade05133 | ||
|
|
fcaba14b62 | ||
|
|
6073d5e37e | ||
|
|
41a7d7eeee | ||
|
|
d3a3c29bc9 | ||
|
|
0ad5b0ade8 | ||
|
|
e6e31a27e6 |
@@ -47,6 +47,17 @@ def get_flag(data, flag):
|
||||
bit = int(0x80 / (2 ** (flag % 8)))
|
||||
return (data[byte] & bit) > 0
|
||||
|
||||
def validate_read_state(data1, data2):
|
||||
validation_array = bytes([0x01, 0x46, 0x46, 0x4D, 0x51, 0x52])
|
||||
|
||||
if data1 is None or data2 is None:
|
||||
return False
|
||||
for i in range(6):
|
||||
if data1[i] != validation_array[i] or data2[i] != validation_array[i]:
|
||||
return False;
|
||||
return True
|
||||
|
||||
|
||||
|
||||
class FFMQClient(SNIClient):
|
||||
game = "Final Fantasy Mystic Quest"
|
||||
@@ -67,11 +78,11 @@ class FFMQClient(SNIClient):
|
||||
async def game_watcher(self, ctx):
|
||||
from SNIClient import snes_buffered_write, snes_flush_writes, snes_read
|
||||
|
||||
check_1 = await snes_read(ctx, 0xF53749, 1)
|
||||
check_1 = await snes_read(ctx, 0xF53749, 6)
|
||||
received = await snes_read(ctx, RECEIVED_DATA[0], RECEIVED_DATA[1])
|
||||
data = await snes_read(ctx, READ_DATA_START, READ_DATA_END - READ_DATA_START)
|
||||
check_2 = await snes_read(ctx, 0xF53749, 1)
|
||||
if check_1 != b'\x01' or check_2 != b'\x01':
|
||||
check_2 = await snes_read(ctx, 0xF53749, 6)
|
||||
if not validate_read_state(check_1, check_2):
|
||||
return
|
||||
|
||||
def get_range(data_range):
|
||||
|
||||
@@ -231,7 +231,7 @@ class HKWorld(World):
|
||||
all_event_names.update(set(godhome_event_names))
|
||||
|
||||
# Link regions
|
||||
for event_name in all_event_names:
|
||||
for event_name in sorted(all_event_names):
|
||||
#if event_name in wp_exclusions:
|
||||
# continue
|
||||
loc = HKLocation(self.player, event_name, None, menu_region)
|
||||
|
||||
@@ -34,7 +34,7 @@ def create_locations(player: int, regions_table: Dict[str, LandstalkerRegion], n
|
||||
for data in WORLD_PATHS_JSON:
|
||||
if "requiredNodes" in data:
|
||||
regions_with_entrance_checks.extend([region_id for region_id in data["requiredNodes"]])
|
||||
regions_with_entrance_checks = list(set(regions_with_entrance_checks))
|
||||
regions_with_entrance_checks = sorted(set(regions_with_entrance_checks))
|
||||
for region_id in regions_with_entrance_checks:
|
||||
region = regions_table[region_id]
|
||||
location = LandstalkerLocation(player, 'event_visited_' + region_id, None, region, "event")
|
||||
|
||||
@@ -118,7 +118,7 @@ class L2ACWorld(World):
|
||||
L2ACItem("Progressive chest access", ItemClassification.progression, None, self.player))
|
||||
chest_access.show_in_spoiler = False
|
||||
ancient_dungeon.locations.append(chest_access)
|
||||
for iris in self.item_name_groups["Iris treasures"]:
|
||||
for iris in sorted(self.item_name_groups["Iris treasures"]):
|
||||
treasure_name: str = f"Iris treasure {self.item_name_to_id[iris] - self.item_name_to_id['Iris sword'] + 1}"
|
||||
iris_treasure: Location = \
|
||||
L2ACLocation(self.player, treasure_name, self.location_name_to_id[treasure_name], ancient_dungeon)
|
||||
|
||||
@@ -1387,7 +1387,7 @@ def get_locations(world: Optional[World]) -> Tuple[LocationData, ...]:
|
||||
lambda state: logic.templars_return_requirement(state)),
|
||||
LocationData("The Host", "The Host: Victory", SC2LOTV_LOC_ID_OFFSET + 2100, LocationType.VICTORY,
|
||||
lambda state: logic.the_host_requirement(state)),
|
||||
LocationData("The Host", "The Host: Southeast Void Shard", SC2LOTV_LOC_ID_OFFSET + 2101, LocationType.VICTORY,
|
||||
LocationData("The Host", "The Host: Southeast Void Shard", SC2LOTV_LOC_ID_OFFSET + 2101, LocationType.EXTRA,
|
||||
lambda state: logic.the_host_requirement(state)),
|
||||
LocationData("The Host", "The Host: South Void Shard", SC2LOTV_LOC_ID_OFFSET + 2102, LocationType.EXTRA,
|
||||
lambda state: logic.the_host_requirement(state)),
|
||||
|
||||
@@ -43,6 +43,9 @@ class SC2Campaign(Enum):
|
||||
self.goal_priority = goal_priority
|
||||
self.race = race
|
||||
|
||||
def __lt__(self, other: "SC2Campaign"):
|
||||
return self.id < other.id
|
||||
|
||||
GLOBAL = 0, "Global", SC2CampaignGoalPriority.NONE, SC2Race.ANY
|
||||
WOL = 1, "Wings of Liberty", SC2CampaignGoalPriority.VERY_HARD, SC2Race.TERRAN
|
||||
PROPHECY = 2, "Prophecy", SC2CampaignGoalPriority.MINI_CAMPAIGN, SC2Race.PROTOSS
|
||||
|
||||
@@ -50,7 +50,7 @@ def create_vanilla_regions(
|
||||
names: Dict[str, int] = {}
|
||||
|
||||
# Generating all regions and locations for each enabled campaign
|
||||
for campaign in enabled_campaigns:
|
||||
for campaign in sorted(enabled_campaigns):
|
||||
for region_name in vanilla_mission_req_table[campaign].keys():
|
||||
regions.append(create_region(world, locations_per_region, location_cache, region_name))
|
||||
world.multiworld.regions += regions
|
||||
|
||||
@@ -233,6 +233,7 @@ class ZillionSkill(Range):
|
||||
range_start = 0
|
||||
range_end = 5
|
||||
default = 2
|
||||
display_name = "skill"
|
||||
|
||||
|
||||
class ZillionStartingCards(NamedRange):
|
||||
|
||||
Reference in New Issue
Block a user