From e4f2739370cf036808d1dc01fac3dba4840ba391 Mon Sep 17 00:00:00 2001 From: Marechal-l Date: Sat, 9 Jul 2022 13:28:46 +0200 Subject: [PATCH] Add World/Options documentation and remove some unused objets --- worlds/dark_souls_3/Options.py | 18 +++++--- worlds/dark_souls_3/__init__.py | 29 ++++++++---- worlds/dark_souls_3/data/items_data.py | 29 +----------- worlds/dark_souls_3/data/locations_data.py | 50 --------------------- worlds/dark_souls_3/docs/en_Dark_Souls_3.md | 22 +++++++++ worlds/dark_souls_3/docs/setup_en.md | 35 +++++++++++++++ 6 files changed, 91 insertions(+), 92 deletions(-) create mode 100644 worlds/dark_souls_3/docs/en_Dark_Souls_3.md create mode 100644 worlds/dark_souls_3/docs/setup_en.md diff --git a/worlds/dark_souls_3/Options.py b/worlds/dark_souls_3/Options.py index 68ec378f59..6b52cf53b6 100644 --- a/worlds/dark_souls_3/Options.py +++ b/worlds/dark_souls_3/Options.py @@ -3,26 +3,31 @@ from Options import Toggle, Option class AutoEquipOption(Toggle): - display_name = "Auto Equip" + """Automatically equips any received armor or left/right weapons.""" + display_name = "Auto-equip" class LockEquipOption(Toggle): - display_name = "Lock Equip" + """Lock the equipment slots so you cannot change your armor or your left/right weapons. Works great with the + Auto-equip option.""" + display_name = "Lock Equipement Slots" class NoWeaponRequirementsOption(Toggle): + """Disable the weapon requirements by removing any movement or damage penalties. + Permitting you to use any weapon early""" display_name = "No Weapon Requirements" class RandomizeWeaponsLevelOption(Toggle): + """Enable this option to upgrade 33% ( based on the probability chance ) of the pool of weapons to a random value + between +1 and +5/+10""" display_name = "Randomize weapons level" -class PriorityLocationsPresetOption(Toggle): - display_name = "Priority locations preset" - - class LateBasinOfVowsOption(Toggle): + """Force the Basin of Vows to be located as a reward of defeating Pontiff Sulyvahn. It permits to ease the + progression by preventing having to kill the Dancer of the Boreal Valley as the first boss""" display_name = "Late Basin of Vows" @@ -31,7 +36,6 @@ dark_souls_options: typing.Dict[str, type(Option)] = { "lock_equip": LockEquipOption, "no_weapon_requirements": NoWeaponRequirementsOption, "randomize_weapons_level": RandomizeWeaponsLevelOption, - "priority_locations_preset": PriorityLocationsPresetOption, "late_basin_of_vows": LateBasinOfVowsOption, } diff --git a/worlds/dark_souls_3/__init__.py b/worlds/dark_souls_3/__init__.py index a99e9f9c5b..57f6c3eccf 100644 --- a/worlds/dark_souls_3/__init__.py +++ b/worlds/dark_souls_3/__init__.py @@ -12,14 +12,29 @@ from .data.locations_data import dictionary_table, cemetery_of_ash_table, fire_l undead_settlement_table, road_of_sacrifice_table, consumed_king_garden_table, cathedral_of_the_deep_table, \ farron_keep_table, catacombs_of_carthus_table, smouldering_lake_table, irithyll_of_the_boreal_valley_table, \ irithyll_dungeon_table, profaned_capital_table, anor_londo_table, lothric_castle_table, grand_archives_table, \ - untended_graves_table, archdragon_peak_table, firelink_shrine_bell_tower_table, main_path_location_list -from ..AutoWorld import World -from BaseClasses import MultiWorld, Location, Region, Item, RegionType, Entrance + untended_graves_table, archdragon_peak_table, firelink_shrine_bell_tower_table +from ..AutoWorld import World, WebWorld +from BaseClasses import MultiWorld, Location, Region, Item, RegionType, Entrance, Tutorial from ..generic.Rules import set_rule +class DarkSouls3Web(WebWorld): + tutorials = [Tutorial( + "Multiworld Setup Tutorial", + "A guide to setting up the Archipelago Dark Souls 3 randomizer on your computer.", + "English", + "setup_en.md", + "setup/en", + ["Marech"] + )] + + class DarkSouls3World(World): - """Insert description of the world/game here.""" + """ + Dark souls 3 is an Action role-playing game and is part of the Souls series developed by FromSoftware. + Played in a third-person perspective, players have access to various weapons, armour, magic, and consumables that + they can use to fight their enemies. + """ def __init__(self, world: MultiWorld, player: int): super().__init__(world, player) @@ -35,7 +50,6 @@ class DarkSouls3World(World): menu_region = Region("Menu", RegionType.Generic, "Menu", self.player) self.world.regions.append(menu_region) - self.main_path_locations = main_path_location_list cemetery_of_ash_region = self.create_region("Cemetery Of Ash", cemetery_of_ash_table) firelink_shrine_region = self.create_region("Firelink Shrine", fire_link_shrine_table) firelink_shrine_bell_tower_region = self.create_region("Firelink Shrine Bell Tower", firelink_shrine_bell_tower_table) @@ -106,7 +120,7 @@ class DarkSouls3World(World): new_region = Region(name, RegionType.Generic, name, self.player) if location_table is not None: for name, address in self.location_name_to_id.items(): - if location_table.get(name): # and name in self.main_path_locations: + if location_table.get(name): location = Location(self.player, name, address, new_region) new_region.locations.append(location) self.world.regions.append(new_region) @@ -118,8 +132,7 @@ class DarkSouls3World(World): self.world.itempool += [self.create_item(name)] def generate_early(self): - if self.world.priority_locations_preset[self.player]: - self.world.priority_locations[self.player].value.update(main_path_location_list) + pass def set_rules(self) -> None: set_rule(self.world.get_entrance("Goto Bell Tower", self.player), diff --git a/worlds/dark_souls_3/data/items_data.py b/worlds/dark_souls_3/data/items_data.py index 7c6a6dab25..f59f48dc0a 100644 --- a/worlds/dark_souls_3/data/items_data.py +++ b/worlds/dark_souls_3/data/items_data.py @@ -326,7 +326,7 @@ spells_table = { } -key_items_table = { +misc_items_table = { "Cell Key": 0x400007DA, "Small Lothric Banner": 0x40000836, "Mortician's Ashes": 0x4000083B, @@ -374,31 +374,6 @@ key_items_table = { "Wolf's Blood Swordgrass": 0x4000016E, } -heals_table = { - "Ashen Estus Flask": 0x400000BF, - "Estus Flask Shard #1": 0x4000085D, - "Estus Flask Shard #2": 0x4000085D, - "Estus Flask Shard #3": 0x4000085D, - "Estus Flask Shard #4": 0x4000085D, - "Estus Flask Shard #5": 0x4000085D, - "Estus Flask Shard #6": 0x4000085D, - "Estus Flask Shard #7": 0x4000085D, - "Estus Flask Shard #8": 0x4000085D, - "Estus Flask Shard #9": 0x4000085D, - "Estus Flask Shard #10": 0x4000085D, - "Estus Flask Shard #11": 0x4000085D, - "Estus Flask Shard #12": 0x4000085D, - "Undead Bone Shard #1": 0x4000085F, - "Undead Bone Shard #2": 0x4000085F, - "Undead Bone Shard #3": 0x4000085F, - "Undead Bone Shard #4": 0x4000085F, - "Undead Bone Shard #5": 0x4000085F, - "Undead Bone Shard #6": 0x4000085F, - "Undead Bone Shard #7": 0x4000085F, - "Undead Bone Shard #8": 0x4000085F, - "Undead Bone Shard #9": 0x4000085F, -} - key_items_list = { "Small Lothric Banner", "Basin of Vows", @@ -413,4 +388,4 @@ key_items_list = { "Mortician's Ashes" } -item_dictionary_table = {**weapons_upgrade_5_table, **weapons_upgrade_10_table, **shields_table, **armor_table, **rings_table, **spells_table, **key_items_table, **goods_table} +item_dictionary_table = {**weapons_upgrade_5_table, **weapons_upgrade_10_table, **shields_table, **armor_table, **rings_table, **spells_table, **misc_items_table, **goods_table} diff --git a/worlds/dark_souls_3/data/locations_data.py b/worlds/dark_souls_3/data/locations_data.py index 6c5978b50c..5011b06a08 100644 --- a/worlds/dark_souls_3/data/locations_data.py +++ b/worlds/dark_souls_3/data/locations_data.py @@ -413,56 +413,6 @@ archdragon_peak_table = { "AP: Soul of the Nameless King": 0x400002D2, } -main_path_location_list = { - "FS: Broken Straight Sword", - "HWL: Soul of Boreal Valley Vordt", - "HWL: Basin of Vows", - "HWL: Small Lothric Banner", - "HWL: Soul of the Dancer", - "US: Soul of the Rotted Greatwood", - "CD: Small Doll", - "CD: Soul of the Deacons of the Deep", - "RS: Soul of a Crystal Sage", - "CC: Soul of High Lord Wolnir", - "IBV: Soul of Pontiff Sulyvahn", - "PC: Cinders of a Lord - Yhorm the Giant", - "PC: Soul of Yhorm the Giant", - "AL: Cinders of a Lord - Aldrich", - "AL: Soul of Aldrich", - "LC: Grand Archives Key", - "LC: Soul of Dragonslayer Armour", - "CKG: Soul of Consumed Oceiros", - "GA: Cinders of a Lord - Lothric Prince", - "GA: Soul of the Twin Princes", - "UG: Soul of Champion Gundyr", - "AP: Soul of the Nameless King", -} - -heals_table = { - "Ashen Estus Flask": 0x400000BF, - "Estus Flask Shard #1": 0x4000085D, - "Estus Flask Shard #2": 0x4000085D, - "Estus Flask Shard #3": 0x4000085D, - "Estus Flask Shard #4": 0x4000085D, - "Estus Flask Shard #5": 0x4000085D, - "Estus Flask Shard #6": 0x4000085D, - "Estus Flask Shard #7": 0x4000085D, - "Estus Flask Shard #8": 0x4000085D, - "Estus Flask Shard #9": 0x4000085D, - "Estus Flask Shard #10": 0x4000085D, - "Estus Flask Shard #11": 0x4000085D, - "Estus Flask Shard #12": 0x4000085D, - "Undead Bone Shard #1": 0x4000085F, - "Undead Bone Shard #2": 0x4000085F, - "Undead Bone Shard #3": 0x4000085F, - "Undead Bone Shard #4": 0x4000085F, - "Undead Bone Shard #5": 0x4000085F, - "Undead Bone Shard #6": 0x4000085F, - "Undead Bone Shard #7": 0x4000085F, - "Undead Bone Shard #8": 0x4000085F, - "Undead Bone Shard #9": 0x4000085F, -} - dictionary_table = {**cemetery_of_ash_table, **fire_link_shrine_table, **firelink_shrine_bell_tower_table, **high_wall_of_lothric, **undead_settlement_table, **road_of_sacrifice_table, **cathedral_of_the_deep_table, **farron_keep_table, **catacombs_of_carthus_table, **smouldering_lake_table, **irithyll_of_the_boreal_valley_table, **irithyll_dungeon_table, **profaned_capital_table, **anor_londo_table, **lothric_castle_table, **consumed_king_garden_table, diff --git a/worlds/dark_souls_3/docs/en_Dark_Souls_3.md b/worlds/dark_souls_3/docs/en_Dark_Souls_3.md new file mode 100644 index 0000000000..dd63b36418 --- /dev/null +++ b/worlds/dark_souls_3/docs/en_Dark_Souls_3.md @@ -0,0 +1,22 @@ +# Dark Souls 3 + +## Where is the settings page? + +The [player settings page for this game](../player-settings) contains all the options you need to configure and export a +config file. + +## What does randomization do to this game? + +In Dark Souls 3, all unique items you can earn from a static corpse, a chest or the death of a Boss/NPC are randomized. +This exclude the upgrade materials such as the titanite shards, the estus shards and the consumables which remain at +the same location. I also added an option available from the settings page to randomize the level of the generated +weapons( from +0 to +10/+5 ) + +## What Dark Souls 3 items can appear in other players' worlds? + +Every unique items from Dark Souls 3 can appear in other player's worlds, such as a piece of armor, an upgraded weapon +or a key item. + +## What does another world's item look like in Dark Souls 3? + +In Dark Souls 3, items which need to be sent to other worlds appear as a Prism Stone. \ No newline at end of file diff --git a/worlds/dark_souls_3/docs/setup_en.md b/worlds/dark_souls_3/docs/setup_en.md new file mode 100644 index 0000000000..65139ca20a --- /dev/null +++ b/worlds/dark_souls_3/docs/setup_en.md @@ -0,0 +1,35 @@ +# Dark Souls 3 Randomizer Setup Guide + +## Required Software + +- [Dark Souls 3](https://store.steampowered.com/app/374320/DARK_SOULS_III/) +- [Dark Souls 3 AP Client](https://github.com/Marechal-L/DarkSouls3-Archipelago-client) + +## General Concept + +The Dark Souls 3 AP Client is a dinput8.dll triggered when launching Dark Souls 3. This .dll file will launch a command +prompt where you can read information about your run and write any command to interact with the Archipelago server. +The randomization is performed by the AP.json file, an output file generated by the Archipelago server. + +## Installation Procedures + +**This client has only been tested with the Official Steam version of the game (v1.15/1.35) not matter which DLCs are installed** + +Follow the installation directions at the +[Dark Souls 3 AP Client](https://github.com/Marechal-L/DarkSouls3-Archipelago-client) page where you can find the +dinput8.dll file. +Basically, you just need to add those two files at the root folder of your game "SteamLibrary\steamapps\common\DARK SOULS III\Game" : +- dinput8.dll +- AP.json renamed from the generated file AP-{SEED}-{PLAYER_NUMBER}-{PLAYER_NAME}.json + +## Joining a MultiWorld Game + +1. Run DarkSoulsIII.exe or run the game through Steam +2. Type in /connect [server ip] +3. Once connected, create a new game, choose a class and wait for the others before starting +4. You can quit and launch at anytime during a game + +## Where do I get a config file? + +The [Player Settings](../player-settings) page on the website allows you to +configure your personal settings and export them into a config file \ No newline at end of file