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

Jak and Daxter: Implement New Game #3291

Open
wants to merge 104 commits into
base: main
Choose a base branch
from

Conversation

massimilianodelliubaldini
Copy link
Contributor

@massimilianodelliubaldini massimilianodelliubaldini commented May 12, 2024

Edited OP to be more up-to-date on progress. See below for the original.

What is this fixing or adding?

This PR adds Jak and Daxter: The Precursor Legacy to Archipelago. This includes the world, the locations, the items, the text client, web world, documentation, and setup guide.

How was this tested?

  • Continuous iterative development over a 9+ month timeframe, dozens of beta testers, and extensive user-reported bug tracking and fixing.
  • Players have used all available options, from default settings to Move Randomizer + 100-cell Precursor Door goal + 1-orb Orbsanity.
  • Players have generated solo seeds and multiplayer seeds, ranging from 1v1v1 races among Jak speedrunners, to participating in multiplayer seeds with 190 300 other players.
  • Ran the WebHost locally to ensure the documentation, tutorials, and option pages all render correctly and are well organized.
  • Ran the unit tests included with Archipelago.
  • Added and ran custom unit tests.
  • Ran a stress test with a profiler with 50+ Jak players all using random settings, collated the data, and used it to optimize seed generation.
  • Streamlined new user experience to not require anything more than the standard OpenGOAL setup instructions (+mods).

If this makes graphical changes, please attach screenshots.

image
image
image
image
image
image

Original Post

This is a draft PR for code review, beta test volunteers, etc. If I've got any style issues, or use deprecated features, or have obvious logical problems, please let me know!

My origin PR squashed some 17 commits, so if you want that kind of granular history, see here.

What is this fixing or adding?

This commit adds Jak and Daxter: The Precursor Legacy to Archipelago. This includes the world, the locations, the items, the text client, web world, documentation, and setup guide.

How was this tested?

  • Ran the generic python tests included with Archipelago.
  • Generated both single-world and multi-world seeds.
  • Read several spoiler logs to ensure the game logic was being followed.
  • Manually tested the text client and the game mod itself.
    • Farthest single-world point I reached was getting 20 power cells and making it to the Blue Sage's hut (hub world 2 of 3).
    • Recorded some footage of a multi-world game here.

If this makes graphical changes, please attach screenshots.

N/A.

…gions and rules, but still missing one-way Entrances.
* Jak 1: Initial commit: Cell Locations, Items, and Regions modeled.

* Jak 1: Wrote Regions, Rules, init. Untested.

* Jak 1: Fixed mistakes, need better understanding of Entrances.

* Jak 1: Fixed bugs, refactored Regions, added missing Special Checks. First spoiler log generated.

* Jak 1: Add Scout Fly Locations, code and style cleanup.

* Jak 1: Add Scout Flies to Regions.

* Jak 1: Add version info.

* Jak 1: Reduced code smell.

* Jak 1: Fixed UT bugs, added Free The Sages as Locations.

* Jak 1: Refactor ID scheme to better fit game's scheme. Add more subregions and rules, but still missing one-way Entrances.

* Jak 1: Add some one-ways, adjust scout fly offset.

* Jak 1: Found Scout Fly ID's for first 4 maps.

* Jak 1: Add more scout fly ID's, refactor game/AP ID translation for easier reading and code reuse.

* Jak 1: Fixed a few things. Four maps to go.

* Jak 1: Last of the scout flies mapped!

* Jak 1: simplify citadel sages logic.

* Jak 1: WebWorld setup, some documentation.

* Jak 1: Initial checkin of Client. Removed the colon from the game name.

* Jak 1: Refactored client into components, working on async communication between the client and the game.

* Jak 1: In tandem with new ArchipelaGOAL memory structure, define read_memory.

* Jak 1: There's magic in the air...

* Jak 1: Fixed bug translating scout fly ID's.

* Jak 1: Make the REPL a little more verbose, easier to debug.

* Jak 1: Did you know Snowy Mountain had such specific unlock requirements? I didn't.

* Jak 1: Update Documentation.

* Jak 1: Simplify user interaction with agents, make process more robust/less dependent on order of ops.

* Jak 1: Simplified startup process, updated docs, prayed.

* Jak 1: quick fix to settings.
@ScipioWright ScipioWright added the is: new game Pull requests for implementing new games into Archipelago. label May 13, 2024
@massimilianodelliubaldini
Copy link
Contributor Author

massimilianodelliubaldini commented Nov 29, 2024

Checking in to see if anyone wants to do another code review. I'd like to get this into the next Archipelago release if possible. If anything needs more discussion, just let me know.

EDIT: I realized I never advertised this feature:

Auto Detect OpenGOAL Install

The client will now automatically find your install location of OpenGOAL and use it. You no longer have to touch the Host.yaml whatsoever after installing the apworld or mod. If it fails to find your install directory, you can still provide it manually in the Host.yaml and turn the auto-detection feature off.

Copy link
Contributor

@nicholassaylor nicholassaylor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only got partway through the PR, but this is what I found so far. Nothing too major to report so far, just some minor things that could use changes or be addressed.

"""
# ID, name, version
game = jak1_name
required_client_version = (0, 4, 6)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will very likely need to be updated due to the various changes coming for item IDs and Python 3.8 support.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I presume required_client_version = (0, 6, 0)?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's what I'd assume, but 0.5.1 would probably suffice for PRs sake. It's unclear what needs to be done now in preparation for 0.6.0

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I actually began using the icon functionality that was merged in after 0.5.1's release, so technically I think I need this to be 0.6.0.

icon_paths["precursor_orb"] = f"ap:{__name__}/icons/precursor_orb.png"

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't client version the, well, client version? Not the Archipelago version?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So it seems. I may have been using the wrong variable?

    required_client_version: Tuple[int, int, int] = (0, 1, 6)
    """
    override this if changes to a world break forward-compatibility of the client
    The base version of (0, 1, 6) is provided for backwards compatibility and does *not* need to be updated in the
    future. Protocol level compatibility check moved to MultiServer.min_client_version.
    """

    required_server_version: Tuple[int, int, int] = (0, 5, 0)
    """update this if the resulting multidata breaks forward-compatibility of the server"""

Let me ask what I should do in ap-world-dev.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jury's still out... will revisit when my brain no longer requires percussive maintenance.

Copy link
Contributor

@nicholassaylor nicholassaylor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changing my review to comment as nothing that I have viewed is particularly worrisome to me.

* Add trap items, relevant options, and citadel orb caches.

* Update REPL to send traps to game.

* Fix item counter.

* Allow player to select which traps to use.

* Fix host.yaml doc strings, ap-setup-options typing, bump memory version to 5.

* Alter some trap names.

* Update world doc.

* Add health trap.

* Added 3 more trap types.

* Protect against empty trap list.

* Reword traps paragraph in world doc.

* Another update to trap paragraph.

* Concisify trap option docstring.

* Timestamp on game log file.

* Update client to handle waiting on title screen.

* Send slot name and seed to game.

* Use self.random instead.

* Update setup doc for new title screen.

* Quick clarification of orb caches in world doc.

* Sanitize slot info earlier.

* Added to and improved unit tests.

* Light cleanup on world.

* Optimizations to movement rules, docs: known issues update.
@Exempt-Medic Exempt-Medic dismissed their stale review February 17, 2025 17:13

Outdated and was addressed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
is: new game Pull requests for implementing new games into Archipelago. waiting-on: peer-review Issue/PR has not been reviewed by enough people yet.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants