diff --git a/docs/adding games.md b/docs/adding games.md index e1d7bf0e..69f2bfb0 100644 --- a/docs/adding games.md +++ b/docs/adding games.md @@ -8,7 +8,7 @@ There are two key steps to incorporating a game into Archipelago: Refer to the following documents as well: - [network protocol.md](https://github.com/ArchipelagoMW/Archipelago/blob/main/docs/network%20protocol.md) for network communication between client and server. -- [api.md](https://github.com/ArchipelagoMW/Archipelago/blob/main/docs/api.md) for documentation on server side code and creating a world package. +- [world api.md](https://github.com/ArchipelagoMW/Archipelago/blob/main/docs/world%20api.md) for documentation on server side code and creating a world package. # Game Modification @@ -337,6 +337,7 @@ fields in the class being extended. This is also a good place to put game-specific quirky behavior that needs to be managed, as it tends to make things a bit cluttered if you put these things elsewhere. -The various methods and attributes are documented in `/worlds/AutoWorld.py[World]`, +The various methods and attributes are documented in `/worlds/AutoWorld.py[World]` and +[world api.md](https://github.com/ArchipelagoMW/Archipelago/blob/main/docs/world%20api.md), though it is also recommended to look at existing implementations to see how all this works first-hand. Once you get all that, all that remains to do is test the game and publish your work. diff --git a/docs/api.md b/docs/world api.md similarity index 97% rename from docs/api.md rename to docs/world api.md index 7c81adb3..b6f4478e 100644 --- a/docs/api.md +++ b/docs/world api.md @@ -114,14 +114,21 @@ Special locations with ID `None` can hold events. Items are all things that can "drop" for your game. This may be RPG items like weapons, could as well be technologies you normally research in a research tree. -Each item has a `name`, an `id` (can be known as "code"), and an `advancement` -flag. An advancement item is an item which a player may require to advance in -their world. Advancement items will be assigned to locations with higher +Each item has a `name`, an `id` (can be known as "code"), and a classification. +The most important classification is `progression` (formerly advancement). +Progression items are items which a player may require to progress in +their world. Progression items will be assigned to locations with higher priority and moved around to meet defined rules and accomplish progression balancing. Special items with ID `None` can mark events (read below). +Other classifications include +* filler: a regular item or trash item +* useful: generally quite useful, but not required for anything logical +* trap: negative impact on the player +* skip_balancing: add to progression to skip balancing; e.g. currency or tokens + ### Events Events will mark some progress. You define an event location, an @@ -346,7 +353,7 @@ from .Options import mygame_options # the options we defined earlier from .Items import mygame_items # data used below to add items to the World from .Locations import mygame_locations # same as above from ..AutoWorld import World -from BaseClasses import Region, Location, Entrance, Item, RegionType +from BaseClasses import Region, Location, Entrance, Item, RegionType, ItemClassification from Utils import get_options, output_path class MyGameItem(Item): # or from Items import MyGameItem @@ -453,7 +460,9 @@ from .Items import is_progression # this is just a dummy def create_item(self, item: str): # This is called when AP wants to create an item by name (for plando) or # when you call it from your own code. - return MyGameItem(item, is_progression(item), self.item_name_to_id[item], + classification = ItemClassification.progression if is_progression(item) else \ + ItemClassification.filler + return MyGameItem(item, classification, self.item_name_to_id[item], self.player) def create_event(self, event: str):