Git Product home page Git Product logo

dark-souls-iii-archipelago-client's Introduction

Dark-Souls-III-Archipelago-client

Dark Souls III client made for Archipelago multiworld randomizer. See archipelago.gg

How to install

This mod works with a single dll file but we also provide a way to downpatch the game.

  • Download the lastest version available here.
  • Extract DS3-Archipelago.zip into your game folder.
  • Generate a game using Archipelago.
  • Launch game by running "DS3-Archipelago.bat"

Commands

  • All client commands start with "/" and archipelago commands start with "!" :
    • /help : Prints this help message.
    • !help : to retrieve all archipelago commands
    • /connect {SERVER_IP}:{SERVER_PORT} {USERNAME} [password:{PASSWORD}]
      Connect by entering SERVER_IP, SERVER_PORT and USERNAME. You can additionaly add a PASSWORD if requested by the server.

Troubleshoots

  • The provided dll requires other dependencies so if you encounter a crash when launching the game.
  • The Windows console tends to freeze preventing you from sending or receiving any items.
    • You must Alt+Tab, click on the console and press enter to refresh it.
  • When trying to stream the Dark Souls 3 window to Discord when the Archipelago mod is used along ModEngine, the game crashes instantly with "Fatal Application Exit" window containing the ExpCode 0x80000003.
    • Change the modengine.ini file and set blockNetworkAccess=0

Credits

https://github.com/LukeYui/DS3-Item-Randomiser-OS by LukeYui
https://github.com/black-sliver/apclientpp by black-sliver

dark-souls-iii-archipelago-client's People

Contributors

agilbert1412 avatar br00ty avatar eudaimonistic avatar marechal-l avatar mightycaesar37 avatar zunawe avatar

Stargazers

 avatar

Watchers

 avatar  avatar

dark-souls-iii-archipelago-client's Issues

Issues with sending items

Hi, I have actually a pretty annoying problem with the mod.
If you pick up an item offline unintentionally (or because of a connexion problem), and then log back in, this item will be lost forever and will never be synced with the server. The only way i found to correct that is to restart a brand new save and pick the item again.

Game crashes when collecting any item

(Disclaimer, I am reporting this on behalf of the DS3 player)

We've been playing a large Archipelago randomizer for a while now, and one of our players just encountered an issue in their DS3 game: whenever they pick up any item, randomized or not, the game immediately crashes. There is no error pop up, and nothing appears in the local archipelago logs, even with /debug on. The game still connects to the server, and can send and receive messages (e.g. !hint works, and messages from other players show up). The game is at the correct version (1.15) and has not been updated or otherwise altered (that we know of) since we started playing.

Any ideas on what could be going on here? I'm happy to (try to) provide any additional resources you need to debug this, but I'm currently at a complete loss.

Releasing a DS3 world's items doesn't reach the DS3 game

I have tested it a couple of times just to make sure it wasn't a fluke:

If you release all the items in a DS3 World with the web admin console, no items are received by the DS3 client.
That effectively bricks the run.

The console will say that the items are sent and received, but it is not the case for the game itself

I can confirm that my settings are fine: If I go and loot an item manually in a game where I didn't use the Release command, the item will be correctly sent to the pool or locally in my inventory and the check will be completed online.

Note: The items will be correctly sent to the other worlds (tested with Risk of Rain 2). My buddy received all of his items on release.

image
image
image
image

Cinders of a Lord - Prince Lothric

Not sure if this is a known issue, but it seems that receiving the Cinders of a Lord - Prince Lothric before defeating three Lords of Cinder and getting teleported to Emma will crash your game. I was not on the game at the time of receiving the Cinders, and upon connecting to the server and loading the game again, I would crash immediately. I was able to load my game and then connect to the server, which would allow me to play, but I did not receive the Cinders or another item collected at the same time. I tried to use the !getitem command to give me the Cinders but got nothing. I used this command again after getting the cutscene and collecting the item before Grand Archives on the corpse (not sure if corpse items are relevant) and it worked.

Game Not Randomizing

(Copy and paste from Discord)
I followed the directions to put in the .dll file in the /Game/ directory.

When starting the game, the CMD prompt opens. I put in the details of the room, along with my ID. It then takes a moment before connecting.

Everything 'looks' like it is working, but when I pick up items they are not random. For example, the broken sword after the first boss.

The only thing I can think of, unless I'm missing something, is that the version of the game I'm running does not want to work with this randomizer. Since the Steam version is 1.15.2, and the provided downpatcher does not work, I looked online and found a 1.15 version of the game.

When I replace the original and load it up, it shows 1.15 and seems to work just fine, except for the lack of randomization.

I found out that the downpatching information on the SpeedRunner website is out of date since Steam had some kind of update.

From there, I realized I could use the Steam Console to directly download older depots.

I specifically used this:
download_depot 374320 374321 4471176929659548333

Which then downloaded it successfully. From there I deleted everything in my DS3 folder, then moved the freshly downloaded stuff into it.

The game loads, shows 1.15. I put in the AP stuff, the command prompt pops up, can connect to the server.

It still does not randomize my content. With the instructions being so short, I have no idea what I could be missing at this point.

Build dependecy handling with hard copies

Build dependencies are currently handled inconsistently.
Most are included as a submodule (minhook, asio, wswrap, websocketpp and apclientpp) but some are simple hard copies (valijson, nlohmann and openSSL is even hard copied twice https://github.com/Marechal-L/Dark-Souls-III-Archipelago-client/tree/main/archipelago-client/dep/openssl and https://github.com/Marechal-L/Dark-Souls-III-Archipelago-client/tree/main/archipelago-client/subprojects/openssl).
Hard copies are always a bit difficult in terms of licences, bloat up project size and make versioning and updating harder.
In my opinion, they should be removed.

Additionally, most inclusions of subprojects are unnecessary in my opinion (But I am admittedly pretty biased since I'm not a big fan of submodules :D ).
Except for wswrap and apclientpp, all build dependencies are very common C++ dependencies that are available through most generic C++ dependencie solution.
In my opinion, vcpkg would be a good way to handle them.
Vcpkg was made for your build system, Visual Studio, but is also compatible with most other build systems.
It is pretty easy to handle and takes care of nearly all headaches that build dependency stuff can cause.

I'm currently doing a pretty major refactor of this client and most of the current changes are probably not of interest to you since they only concern porting the build process to cmake and changing the runtime deps to mingw-64 instead of Windows, but I made a branch where I cherry-picked the parts concerning the dependency handling with vcpkg.
You would then have to adjust the VS Project to use vcpkg and maybe change some include directives (I can't make any promises that there wont be other problems, I never used VS, but considering vcpkg is made by Microsoft for VS, it should work relatively smoothly).
I'll make a pull request for that branch, but feel free to just close that request again if you don't want to use vcpkg.

Small Lothric Banner

This sorta qualifies as an issue so i thought i'd place this here.
If selecting the late basin of vows so you don't have to fight the dancer in the first 3 minutes of the game, the game then gets locked behind the Small Lothric Banner and Small Doll as the two major checks that need to occur (excluding the lord ashes to proceed to the final boss).

The problem is when this setting occurs in a multi-person randomizer it regularly places that Small Lothric Banner at about 1/3 to 1/2 of the way through the entire randomizer run for the group. This means within 10-30 minutes you can 100% all available checks, and then be stuck. Every single time i did this the game would leave me stuck unable to proceed for 5+hours.

Checking the spoiler log over multiple generations we realized its beacause it seems to not properly weigh the importance of this first check.

I'm not sure how this plays with the archipelago framework, but this really needs to have some sort of check to disable shuffling of it, or at the very least give it some sort of weighting so its not multiple hours of being unable to proceed; as even if we immediately used the spoiler log and made a b-line for all required items it still effectively seems to expect the Dark Souls 3 player to not play for multiple hours, which is bad, considering how much content exists before the Small doll check.
This is extra bad because by the time i was allowed to move forward, everyone else was then stuck as i needed to play through from that very beggining point of Vordt, all the way to archdragon peak before i was able to give out required items for everyone else; which meant even rushing at top speed I was going to be holding up the entire run because of how absolutely De-synchronized Dark Souls 3 is from the rest of the run.

DS3 crashes on stream

When I try to stream the Dark Souls 3 window to Discord when the Archipelago mod is installed, whether it's connected to the server or not, it crashes immediately with the following window:

image

Shop items are not Auto-Equipped

When purchasing items from shops, they are not Auto-Equipped (and as such useless with locked equipment slots).

I also had a couple of other notes/complaints/ideas but i felt like it was too much to make an issue for each:

Randomize starting equipment (maybe also burial gifts?)

Randomize shop items (ideally independant of randomizing npc drops), also maybe make it such that weapons are only purchable once.

Using locked equipment slots also locks consumeable items slots and arrow slots (which i feel is unintended? or atleast should be a setting)

If playing single player with locked equipment, you can get light soft locked by getting a talisman and no other weapons/miracles before iundex gundyr. This does not make him impossible, as you can strong melee for about 10 dmg, but some players might find it too hard to be fun.

I dont know if you can use other mods at the same time as this, but if possible add an enemy randomizer option such that no other third party software is needed.

Also if you enable dlc do you need to use another depot download or is the one on the archipelago website good?

sorry for being annoying

dlc not downloading properly after downpatching

I own both dlc and it says the they are installed, but when I connect to the randomizer and startup the game it gives a fatal archipelago error saying you need to own both dlc in order to use the dlc setting and then closes the game.

Concept for fully randomized overworld items

I mentioned this in the Discord, but I want to jot it down here as well so it doesn't get lost to the sands of time.

As I understand it, the reason progressive items have their own special "pick from a list"-style randomization is that the mod doesn't see item locations, it only sees item IDs. Since most overworld item locations contain things like Titanite Shards that aren't at all unique, the mod isn't able to distinguish whether the player picked up a Titanite Shard in High Wall of Lothric or bought one in Firelink Shrine.

But I think this issue could be solved without needing to access additional data in the mod itself. The parameter file and map formats are well-understood, so—before booting the game—you could edit the params to add a few hundred additional fake items that exist only to have unique IDs, and then edit the maps to point all the overworld progressive pickups at those fake items. Then you could have an option on the randomizer server to track whether progressive items have been faked out and add them to the item pool if so.

Edit: Actually, you wouldn't even need to generate the params files as part of the mod. All you'd have to do is generate them once (maybe using the C# libraries that other software uses) and provide them as a zip file for people to use along with ModEngine.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.