Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/main' into ladx-generate
Browse files Browse the repository at this point in the history
  • Loading branch information
hatkirby committed Jun 16, 2024
2 parents 7dbcaa8 + 898509e commit 9ab992a
Show file tree
Hide file tree
Showing 29 changed files with 82 additions and 82 deletions.
2 changes: 1 addition & 1 deletion AdventureClient.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ def on_package(self, cmd: str, args: dict):
if ': !' not in msg:
self._set_message(msg, SYSTEM_MESSAGE_ID)
elif cmd == "ReceivedItems":
msg = f"Received {', '.join([self.item_names.lookup_in_slot(item.item) for item in args['items']])}"
msg = f"Received {', '.join([self.item_names.lookup_in_game(item.item) for item in args['items']])}"
self._set_message(msg, SYSTEM_MESSAGE_ID)
elif cmd == "Retrieved":
if f"adventure_{self.auth}_freeincarnates_used" in args["keys"]:
Expand Down
3 changes: 3 additions & 0 deletions CommonClient.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,9 @@ def lookup_in_game(self, code: int, game_name: typing.Optional[str] = None) -> s
def lookup_in_slot(self, code: int, slot: typing.Optional[int] = None) -> str:
"""Returns the name for an item/location id in the context of a specific slot or own slot if `slot` is
omitted.
Use of `lookup_in_slot` should not be used when not connected to a server. If looking in own game, set
`ctx.game` and use `lookup_in_game` method instead.
"""
if slot is None:
slot = self.ctx.slot
Expand Down
9 changes: 5 additions & 4 deletions Generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ def get_seed_name(random_source) -> str:
return f"{random_source.randint(0, pow(10, seeddigits) - 1)}".zfill(seeddigits)


def main(args=None):
def main(args=None) -> Tuple[argparse.Namespace, int]:
# __name__ == "__main__" check so unittests that already imported worlds don't trip this.
if __name__ == "__main__" and "worlds" in sys.modules:
raise Exception("Worlds system should not be loaded before logging init.")
Expand Down Expand Up @@ -237,8 +237,7 @@ def main(args=None):
with open(os.path.join(args.outputpath if args.outputpath else ".", f"generate_{seed_name}.yaml"), "wt") as f:
yaml.dump(important, f)

from Main import main as ERmain
return ERmain(erargs, seed)
return erargs, seed


def read_weights_yamls(path) -> Tuple[Any, ...]:
Expand Down Expand Up @@ -547,7 +546,9 @@ def roll_alttp_settings(ret: argparse.Namespace, weights):
if __name__ == '__main__':
import atexit
confirmation = atexit.register(input, "Press enter to close.")
multiworld = main()
erargs, seed = main()
from Main import main as ERmain
multiworld = ERmain(erargs, seed)
if __debug__:
import gc
import sys
Expand Down
4 changes: 2 additions & 2 deletions UndertaleClient.py
Original file line number Diff line number Diff line change
Expand Up @@ -247,8 +247,8 @@ async def process_undertale_cmd(ctx: UndertaleContext, cmd: str, args: dict):
with open(os.path.join(ctx.save_game_folder, filename), "w") as f:
toDraw = ""
for i in range(20):
if i < len(str(ctx.item_names.lookup_in_slot(l.item))):
toDraw += str(ctx.item_names.lookup_in_slot(l.item))[i]
if i < len(str(ctx.item_names.lookup_in_game(l.item))):
toDraw += str(ctx.item_names.lookup_in_game(l.item))[i]
else:
break
f.write(toDraw)
Expand Down
6 changes: 3 additions & 3 deletions WargrooveClient.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ def on_package(self, cmd: str, args: dict):
if not os.path.isfile(path):
open(path, 'w').close()
# Announcing commander unlocks
item_name = self.item_names.lookup_in_slot(network_item.item)
item_name = self.item_names.lookup_in_game(network_item.item)
if item_name in faction_table.keys():
for commander in faction_table[item_name]:
logger.info(f"{commander.name} has been unlocked!")
Expand All @@ -197,7 +197,7 @@ def on_package(self, cmd: str, args: dict):
open(print_path, 'w').close()
with open(print_path, 'w') as f:
f.write("Received " +
self.item_names.lookup_in_slot(network_item.item) +
self.item_names.lookup_in_game(network_item.item) +
" from " +
self.player_names[network_item.player])
f.close()
Expand Down Expand Up @@ -342,7 +342,7 @@ def update_commander_data(self):
faction_items = 0
faction_item_names = [faction + ' Commanders' for faction in faction_table.keys()]
for network_item in self.items_received:
if self.item_names.lookup_in_slot(network_item.item) in faction_item_names:
if self.item_names.lookup_in_game(network_item.item) in faction_item_names:
faction_items += 1
starting_groove = (faction_items - 1) * self.starting_groove_multiplier
# Must be an integer larger than 0
Expand Down
4 changes: 2 additions & 2 deletions Zelda1Client.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ def get_payload(ctx: ZeldaContext):


def reconcile_shops(ctx: ZeldaContext):
checked_location_names = [ctx.location_names.lookup_in_slot(location) for location in ctx.checked_locations]
checked_location_names = [ctx.location_names.lookup_in_game(location) for location in ctx.checked_locations]
shops = [location for location in checked_location_names if "Shop" in location]
left_slots = [shop for shop in shops if "Left" in shop]
middle_slots = [shop for shop in shops if "Middle" in shop]
Expand Down Expand Up @@ -190,7 +190,7 @@ async def parse_locations(locations_array, ctx: ZeldaContext, force: bool, zone=
locations_checked = []
location = None
for location in ctx.missing_locations:
location_name = ctx.location_names.lookup_in_slot(location)
location_name = ctx.location_names.lookup_in_game(location)

if location_name in Locations.overworld_locations and zone == "overworld":
status = locations_array[Locations.major_location_offsets[location_name]]
Expand Down
5 changes: 2 additions & 3 deletions docs/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,6 @@
# Lingo
/worlds/lingo/ @hatkirby

# Links Awakening DX
/worlds/ladx/ @zig-for

# Lufia II Ancient Cave
/worlds/lufia2ac/ @el-u
/worlds/lufia2ac/docs/ @wordfcuk @el-u
Expand Down Expand Up @@ -218,6 +215,8 @@
# Final Fantasy (1)
# /worlds/ff1/

# Links Awakening DX
# /worlds/ladx/

## Disabled Unmaintained Worlds

Expand Down
3 changes: 2 additions & 1 deletion test/hosting/generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ def _generate_local_inner(games: Iterable[str],
with TemporaryDirectory() as players_dir:
with TemporaryDirectory() as output_dir:
import Generate
import Main

for n, game in enumerate(games, 1):
player_path = Path(players_dir) / f"{n}.yaml"
Expand All @@ -42,7 +43,7 @@ def _generate_local_inner(games: Iterable[str],
sys.argv = [sys.argv[0], "--seed", str(hash(tuple(games))),
"--player_files_path", players_dir,
"--outputpath", output_dir]
Generate.main()
Main.main(*Generate.main())
output_files = list(Path(output_dir).glob('*.zip'))
assert len(output_files) == 1
final_file = dest / output_files[0].name
Expand Down
7 changes: 4 additions & 3 deletions test/programs/test_generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from tempfile import TemporaryDirectory

import Generate
import Main


class TestGenerateMain(unittest.TestCase):
Expand Down Expand Up @@ -58,7 +59,7 @@ def test_generate_absolute(self):
'--player_files_path', str(self.abs_input_dir),
'--outputpath', self.output_tempdir.name]
print(f'Testing Generate.py {sys.argv} in {os.getcwd()}')
Generate.main()
Main.main(*Generate.main())

self.assertOutput(self.output_tempdir.name)

Expand All @@ -67,7 +68,7 @@ def test_generate_relative(self):
'--player_files_path', str(self.rel_input_dir),
'--outputpath', self.output_tempdir.name]
print(f'Testing Generate.py {sys.argv} in {os.getcwd()}')
Generate.main()
Main.main(*Generate.main())

self.assertOutput(self.output_tempdir.name)

Expand All @@ -86,7 +87,7 @@ def test_generate_yaml(self):
sys.argv = [sys.argv[0], '--seed', '0',
'--outputpath', self.output_tempdir.name]
print(f'Testing Generate.py {sys.argv} in {os.getcwd()}, player_files_path={self.yaml_input_dir}')
Generate.main()
Main.main(*Generate.main())
finally:
user_path.cached_path = user_path_backup

Expand Down
4 changes: 2 additions & 2 deletions worlds/alttp/Client.py
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ async def track_locations(ctx, roomid, roomdata) -> bool:
def new_check(location_id):
new_locations.append(location_id)
ctx.locations_checked.add(location_id)
location = ctx.location_names.lookup_in_slot(location_id)
location = ctx.location_names.lookup_in_game(location_id)
snes_logger.info(
f'New Check: {location} ' +
f'({len(ctx.checked_locations) + 1 if ctx.checked_locations else len(ctx.locations_checked)}/' +
Expand Down Expand Up @@ -552,7 +552,7 @@ async def game_watcher(self, ctx):
item = ctx.items_received[recv_index]
recv_index += 1
logging.info('Received %s from %s (%s) (%d/%d in list)' % (
color(ctx.item_names.lookup_in_slot(item.item), 'red', 'bold'),
color(ctx.item_names.lookup_in_game(item.item), 'red', 'bold'),
color(ctx.player_names[item.player], 'yellow'),
ctx.location_names.lookup_in_slot(item.location, item.player), recv_index, len(ctx.items_received)))

Expand Down
19 changes: 0 additions & 19 deletions worlds/alttp/OverworldGlitchRules.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,26 +220,7 @@ def get_invalid_bunny_revival_dungeons():
yield 'Sanctuary'


def no_logic_rules(world, player):
"""
Add OWG transitions to no logic player's world
"""
create_no_logic_connections(player, world, get_boots_clip_exits_lw(world.mode[player] == 'inverted'))
create_no_logic_connections(player, world, get_boots_clip_exits_dw(world.mode[player] == 'inverted', player))

# Glitched speed drops.
create_no_logic_connections(player, world, get_glitched_speed_drops_dw(world.mode[player] == 'inverted'))

# Mirror clip spots.
if world.mode[player] != 'inverted':
create_no_logic_connections(player, world, get_mirror_clip_spots_dw())
create_no_logic_connections(player, world, get_mirror_offset_spots_dw())
else:
create_no_logic_connections(player, world, get_mirror_offset_spots_lw(player))


def overworld_glitch_connections(world, player):

# Boots-accessible locations.
create_owg_connections(player, world, get_boots_clip_exits_lw(world.mode[player] == 'inverted'))
create_owg_connections(player, world, get_boots_clip_exits_dw(world.mode[player] == 'inverted', player))
Expand Down
3 changes: 1 addition & 2 deletions worlds/alttp/Rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from .Bosses import GanonDefeatRule
from .Items import item_factory, item_name_groups, item_table, progression_items
from .Options import small_key_shuffle
from .OverworldGlitchRules import no_logic_rules, overworld_glitches_rules
from .OverworldGlitchRules import overworld_glitches_rules
from .Regions import LTTPRegionType, location_table
from .StateHelpers import (can_extend_magic, can_kill_most_things,
can_lift_heavy_rocks, can_lift_rocks,
Expand All @@ -33,7 +33,6 @@ def set_rules(world):
'WARNING! Seeds generated under this logic often require major glitches and may be impossible!')

if world.players == 1:
no_logic_rules(world, player)
for exit in world.get_region('Menu', player).exits:
exit.hide_path = True
return
Expand Down
2 changes: 1 addition & 1 deletion worlds/cv64/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ async def game_watcher(self, ctx: "BizHawkClientContext") -> None:
text_color = bytearray([0xA2, 0x0B])
else:
text_color = bytearray([0xA2, 0x02])
received_text, num_lines = cv64_text_wrap(f"{ctx.item_names.lookup_in_slot(next_item.item)}\n"
received_text, num_lines = cv64_text_wrap(f"{ctx.item_names.lookup_in_game(next_item.item)}\n"
f"from {ctx.player_names[next_item.player]}", 96)
await bizhawk.guarded_write(ctx.bizhawk_ctx,
[(0x389BE1, [next_item.item & 0xFF], "RDRAM"),
Expand Down
4 changes: 2 additions & 2 deletions worlds/dkc3/Client.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ async def game_watcher(self, ctx):

for new_check_id in new_checks:
ctx.locations_checked.add(new_check_id)
location = ctx.location_names.lookup_in_slot(new_check_id)
location = ctx.location_names.lookup_in_game(new_check_id)
snes_logger.info(
f'New Check: {location} ({len(ctx.locations_checked)}/{len(ctx.missing_locations) + len(ctx.checked_locations)})')
await ctx.send_msgs([{"cmd": 'LocationChecks', "locations": [new_check_id]}])
Expand All @@ -99,7 +99,7 @@ async def game_watcher(self, ctx):
item = ctx.items_received[recv_index]
recv_index += 1
logging.info('Received %s from %s (%s) (%d/%d in list)' % (
color(ctx.item_names.lookup_in_slot(item.item), 'red', 'bold'),
color(ctx.item_names.lookup_in_game(item.item), 'red', 'bold'),
color(ctx.player_names[item.player], 'yellow'),
ctx.location_names.lookup_in_slot(item.location, item.player), recv_index, len(ctx.items_received)))

Expand Down
4 changes: 2 additions & 2 deletions worlds/factorio/Client.py
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ async def game_watcher(ctx: FactorioContext):
if ctx.locations_checked != research_data:
bridge_logger.debug(
f"New researches done: "
f"{[ctx.location_names.lookup_in_slot(rid) for rid in research_data - ctx.locations_checked]}")
f"{[ctx.location_names.lookup_in_game(rid) for rid in research_data - ctx.locations_checked]}")
ctx.locations_checked = research_data
await ctx.send_msgs([{"cmd": 'LocationChecks', "locations": tuple(research_data)}])
death_link_tick = data.get("death_link_tick", 0)
Expand Down Expand Up @@ -360,7 +360,7 @@ async def factorio_server_watcher(ctx: FactorioContext):
transfer_item: NetworkItem = ctx.items_received[ctx.send_index]
item_id = transfer_item.item
player_name = ctx.player_names[transfer_item.player]
item_name = ctx.item_names.lookup_in_slot(item_id)
item_name = ctx.item_names.lookup_in_game(item_id)
factorio_server_logger.info(f"Sending {item_name} to Nauvis from {player_name}.")
commands[ctx.send_index] = f"/ap-get-technology {item_name}\t{ctx.send_index}\t{player_name}"
ctx.send_index += 1
Expand Down
4 changes: 2 additions & 2 deletions worlds/kdl3/Client.py
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ async def game_watcher(self, ctx) -> None:
item = ctx.items_received[recv_amount]
recv_amount += 1
logging.info('Received %s from %s (%s) (%d/%d in list)' % (
color(ctx.item_names.lookup_in_slot(item.item), 'red', 'bold'),
color(ctx.item_names.lookup_in_game(item.item), 'red', 'bold'),
color(ctx.player_names[item.player], 'yellow'),
ctx.location_names.lookup_in_slot(item.location, item.player), recv_amount, len(ctx.items_received)))

Expand Down Expand Up @@ -415,7 +415,7 @@ async def game_watcher(self, ctx) -> None:

for new_check_id in new_checks:
ctx.locations_checked.add(new_check_id)
location = ctx.location_names.lookup_in_slot(new_check_id)
location = ctx.location_names.lookup_in_game(new_check_id)
snes_logger.info(
f'New Check: {location} ({len(ctx.locations_checked)}/'
f'{len(ctx.missing_locations) + len(ctx.checked_locations)})')
Expand Down
8 changes: 7 additions & 1 deletion worlds/ladx/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import bsdiff4

import settings
from BaseClasses import Entrance, Item, ItemClassification, Location, Tutorial
from BaseClasses import Entrance, Item, ItemClassification, Location, Tutorial, MultiWorld
from Fill import fill_restrictive
from worlds.AutoWorld import WebWorld, World
from .Common import *
Expand Down Expand Up @@ -435,6 +435,12 @@ def guess_icon_for_other_world(self, other):

return "TRADING_ITEM_LETTER"

@classmethod
def stage_assert_generate(cls, multiworld: MultiWorld):
rom_file = get_base_rom_path()
if not os.path.exists(rom_file):
raise FileNotFoundError(rom_file)

def generate_output(self, output_directory: str):
# copy items back to locations
for r in self.multiworld.get_regions(self.player):
Expand Down
2 changes: 1 addition & 1 deletion worlds/lufia2ac/Client.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ async def game_watcher(self, ctx: SNIContext) -> None:
snes_items_received += 1

snes_logger.info("Received %s from %s (%s) (%d/%d in list)" % (
ctx.item_names.lookup_in_slot(item.item),
ctx.item_names.lookup_in_game(item.item),
ctx.player_names[item.player],
ctx.location_names.lookup_in_slot(item.location, item.player),
snes_items_received, len(ctx.items_received)))
Expand Down
3 changes: 3 additions & 0 deletions worlds/pokemon_rb/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -661,6 +661,9 @@ def fill_slot_data(self) -> dict:
"dark_rock_tunnel_logic": self.multiworld.dark_rock_tunnel_logic[self.player].value,
"split_card_key": self.multiworld.split_card_key[self.player].value,
"all_elevators_locked": self.multiworld.all_elevators_locked[self.player].value,
"require_pokedex": self.multiworld.require_pokedex[self.player].value,
"area_1_to_1_mapping": self.multiworld.area_1_to_1_mapping[self.player].value,
"blind_trainers": self.multiworld.blind_trainers[self.player].value,

}

Expand Down
4 changes: 2 additions & 2 deletions worlds/pokemon_rb/docs/setup_en.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ As we are using BizHawk, this guide is only applicable to Windows and Linux syst

## Optional Software

- [Pokémon Red and Blue Archipelago Map Tracker](https://github.com/j-imbo/pkmnrb_jim/releases/latest), for use with [PopTracker](https://github.com/black-sliver/PopTracker/releases)
- [Pokémon Red and Blue Archipelago Map Tracker](https://github.com/coveleski/rb_tracker/releases/latest), for use with [PopTracker](https://github.com/black-sliver/PopTracker/releases)


## Configuring BizHawk
Expand Down Expand Up @@ -109,7 +109,7 @@ server uses password, type in the bottom textfield `/connect <address>:<port> [p

Pokémon Red and Blue has a fully functional map tracker that supports auto-tracking.

1. Download [Pokémon Red and Blue Archipelago Map Tracker](https://github.com/j-imbo/pkmnrb_jim/releases/latest) and [PopTracker](https://github.com/black-sliver/PopTracker/releases).
1. Download [Pokémon Red and Blue Archipelago Map Tracker](https://github.com/coveleski/rb_tracker/releases/latest) and [PopTracker](https://github.com/black-sliver/PopTracker/releases).
2. Open PopTracker, and load the Pokémon Red and Blue pack.
3. Click on the "AP" symbol at the top.
4. Enter the AP address, slot name and password.
Expand Down
4 changes: 2 additions & 2 deletions worlds/pokemon_rb/docs/setup_es.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Al usar BizHawk, esta guía solo es aplicable en los sistemas de Windows y Linux

## Software Opcional

- [Tracker de mapa para Pokémon Red and Blue Archipelago](https://github.com/j-imbo/pkmnrb_jim/releases/latest), para usar con [PopTracker](https://github.com/black-sliver/PopTracker/releases)
- [Tracker de mapa para Pokémon Red and Blue Archipelago](https://github.com/coveleski/rb_tracker/releases/latest), para usar con [PopTracker](https://github.com/black-sliver/PopTracker/releases)


## Configurando BizHawk
Expand Down Expand Up @@ -101,7 +101,7 @@ Ahora ya estás listo para tu aventura en Kanto.

Pokémon Red and Blue tiene un mapa completamente funcional que soporta seguimiento automático.

1. Descarga el [Tracker de mapa para Pokémon Red and Blue Archipelago](https://github.com/j-imbo/pkmnrb_jim/releases/latest) y [PopTracker](https://github.com/black-sliver/PopTracker/releases).
1. Descarga el [Tracker de mapa para Pokémon Red and Blue Archipelago](https://github.com/coveleski/rb_tracker/releases/latest) y [PopTracker](https://github.com/black-sliver/PopTracker/releases).
2. Abre PopTracker, y carga el pack de Pokémon Red and Blue.
3. Haz clic en el símbolo "AP" en la parte superior.
4. Ingresa la dirección de AP, nombre del slot y contraseña (si es que hay).
Expand Down
Loading

0 comments on commit 9ab992a

Please sign in to comment.