Create an Archipelago generation for Geoguessr
ploki122 GameDev DK30 Fall 2023 0 1
Description
Archipelago is a multigame and multiplayer randomizer tool. The way it works is that various games have specifications for “locations” (things you do in game) and “items” (things you receive in game), and it associates items to locations across games. Every AP-compatible game needs a way to generate a world (a .apworld file) and a way to communicate with the server (a mod or patch). As part of this DK30, I plan on making the apworld part of a Geoguessr integreation.
Recent Updates
Post week 1 : I’ve definitely laid the ground work for what the Regions/Items/Locations/Options/etc. should be.
I’ve already started my branch of the main project, so that I can start creating the various files to manage them. Options are already done (they’re the easiest since they don’t really interact with anything else), and I’m currently trying to structure the rest of my data in a way that makes sense.
A few people over on the AP Discord suggested that I change my approach to start by creating a manual (what I intended to be step #4) to “see if it’s fun”, and then go from the manual to a fully fledged logic, but I’ve discarded that idea since it feels like it’d hinder my learning process. We’ll see in ~3 weeks how I feel in hindsight.
EDIT : And to clarify, I do think that if my end goal was to create a Geoguessr APWorld, starting from the manual would probably make more sense. However, my end goal is to understand Archipelago’s structure, which makes that approach unproductive imo (since I’d be trying to jam my Manual into AP’s structure, rather than creating a structure that fits AP, and molding it into a Manual).
Clarified my assumptions about the 4 basic concepts (Items, Locations, Regions, Rules), and this is the summary after that discussion.
Items
What the player will receive, that helps them progress toward their goal. Can be :
- Progression : Potentially unlocks new content. Anything that is included in an access rule is Progression, anything that isn’t isn’t progression.
- Useful : Empowers the player but doesn’t unlock anything that a better player couldn’t do without it.
- Normal/Filler : Intended to be useful, but doesn’t change how the game is played.
- Trap : Hinders the player, ideally in a fun way.
In my case, Items could be the different Geoguessr maps (different countries), the various movement upgrades (allow the player to zoom, pan, and move), and time upgrades.
Locations
Tasks that the player must complete to progress the world. These are more or less the steps to beat the game. Since Archipelago doesn’t include any “filler balancing”, every game must generate the same number of locations that they do items (since every location grants an item).
In my case, locations would be scores.
Regions
Regions are mostly a group of locations+items. The Region structure allows you to spread access_rules to the things contained in it (makes generation faster) and, by putting access_rules on entrances, allows you to handle complex access rules (different requirements based on different paths traveled). The only requirement, in term of regions, is having a “Menu” region that’s the start point of the game.
In my case, regions could be the various maps that get unlocked.
Rules
This is the logic of the APWorld, and dictates what AP can put where, and when the goal is reached. It sets the access rules for all the different locations and regions/entrances.
Luckily, my rules should be pretty straight forward, with simply movement+time => minimum score matching.
Estimated Timeframe
May 2nd - May 31st
Week 1 Goal
I need to correctly understand and define what the requirements for the world are. I know that I need :
- Regions : They’re “zones” in the game, but I need to clarify what that means.
- Items : This is really clear, but I still need to define what Geoguessr’s items will be.
- Locations : This is also clear, but I also need to define what they will be.
- Options : These change the generations. They will evolve over time, but I will need to try and see what’s possible.
- Nuisances : Worlds can have deathlink implemented (when one player with Deathlink dies, all other players with Deathlink also die), or can have Trap items (items that hinder the player, temporarily or not). I’ll need to see what is reasonable to add for Geoguessr.
There might be others I’m missing, I’ll learn this during the first week.
Week 2 Goal
Once the requirements are understood, I’ll have to code the actual Python files that are used by Archipelago to generate the Geoguessr worlds. The code will be tested in isolation, and doesn’t need to integrate into Archipelago for now. I simply need to be able to generate a parsable list of items, locations, regions, etc.
Week 3 Goal
I’ll Implement the logic that tells Archipelago what locations are accessible at any given time, what items are “progression” vs “useful” vs “normal”. At this point, I’ll have to make sure that the code integrates with the core of Archipelago.
Week 4 Goal
Generate a couple “manuals” (worlds with no game integration, you simply evaluate the conditions yourself and ask the server to mark locations as checked, or grant players items), and make sure that generation functions; adjust otherwise. Also submit my code for Code Review by AP World devs to make sure that I follow the coding standards, and that I haven’t goofed off.