Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Version 3.0.0 #28

Closed
wants to merge 113 commits into from
Closed

Version 3.0.0 #28

wants to merge 113 commits into from

Conversation

nex3
Copy link

@nex3 nex3 commented Apr 11, 2024

This PR fully implements the changes discussed in #17, integrating this client with a branch of @thefifthmatt's static randomizer so that all item locations can be randomized rather than just unique items.

Major functionality changes:

  • The static randomizer now replaces all in-world item pickups with synthetic items whose paramdata encodes the Archipelago location ID and (for local items) the DS3 item ID. Specifically:

    • When a local item is picked up, this client decodes the paramdata, tells Archipelago that the corresponding location was accessed, and replaces the synthetic item with the original DS3 item before it enters the player's inventory.
    • When a foreign item is picked up, the client decodes the paramdata, tells Archipelago that the corresponding location was accessed, and deletes the item from the player's inventory.
  • Uses ModEngine2 rather than manual dinput8.dll injection to be compatible with other mods (particularly the static randomizer). This also makes it compatible with DS3 1.15.2.

  • More gracefully handles connection and disconnection:

    • Shows a banner in-game when a connection is established.
    • If foreign items are picked up while disconnected, they will be sent once reconnected.
    • More robust checks for when the player is fully loaded into the game.
  • Drops progressive item logic since that's no longer necessary to handle non-unique items.

  • Supports granting Path of the Dragon through a custom event created by the static randomizer.

Major infrastructure changes:

  • Uses vcpkg for dependencies where possible (similar to Dependency managment with vcpkg #27).
  • Uses MinHook to hook into internal DS3 functionality with AOBs, adding more version flexibility.
  • Avoids assembly in favor of explicit C code, manipulating defined structs where possible.
  • Adds a GitHub Actions workflow to automatically build and publish tagged releases.
  • Uses spdlog for compatibility with ModEngine2.

Instructions for building this client are in the README. You can test it by taking the latest beta release and overwriting its archipelago.dll with the one you built locally.

Closes #17

nex3 added 30 commits October 20, 2023 17:09
Also add documentation for getting this building locally.
This sets the stage for randomizing to all available locations, including shops.
This allows us to give multiple items in a much better way.
This still needs to be integrated into the online logic.
This doesn't use minhook from vcpkg because that version seems to be incompatible somehow, and we want to start using the ModEngine2 hook API anyway.
@nex3 nex3 force-pushed the full-rando-server branch from a3bd362 to b326078 Compare August 20, 2024 07:53
nex3 added 2 commits August 20, 2024 00:55
Turns out this downloads with the original filename, not the artifact name! Weird.
@nex3 nex3 force-pushed the full-rando-server branch from e29ea71 to a326c21 Compare August 20, 2024 08:17
@nex3 nex3 closed this Nov 30, 2024
@nex3 nex3 deleted the full-rando-server branch November 30, 2024 00:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Concept for fully randomized overworld items
4 participants