Skip to content

Commit

Permalink
Docs: world api general cleanup/overhaul (ArchipelagoMW#2598)
Browse files Browse the repository at this point in the history
* Docs: world api general cleanup/overhaul

* add pep-0287 to style doc

* some cleanup, reorganization, and grammar improvements

* reorder item and region creation

* address review comments

* fix indent

* linter grammar

Co-authored-by: Exempt-Medic <[email protected]>

---------

Co-authored-by: Exempt-Medic <[email protected]>
  • Loading branch information
alwaysintreble and Exempt-Medic authored Jan 30, 2024
1 parent 697deb9 commit 016c1e9
Show file tree
Hide file tree
Showing 3 changed files with 358 additions and 425 deletions.
31 changes: 26 additions & 5 deletions docs/options api.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,28 +27,49 @@ Choice, and defining `alias_true = option_full`.
- All options support `random` as a generic option. `random` chooses from any of the available values for that option,
and is reserved by AP. You can set this as your default value, but you cannot define your own `option_random`.

As an example, suppose we want an option that lets the user start their game with a sword in their inventory. Let's
create our option class (with a docstring), give it a `display_name`, and add it to our game's options dataclass:
As an example, suppose we want an option that lets the user start their game with a sword in their inventory, an option
to let the player choose the difficulty, and an option to choose how much health the final boss has. Let's create our
option classes (with a docstring), give them a `display_name`, and add them to our game's options dataclass:

```python
# options.py
from dataclasses import dataclass

from Options import Toggle, PerGameCommonOptions
from Options import Toggle, Range, Choice, PerGameCommonOptions


class StartingSword(Toggle):
"""Adds a sword to your starting inventory."""
display_name = "Start With Sword"


class Difficulty(Choice):
"""Sets overall game difficulty."""
display_name = "Difficulty"
option_easy = 0
option_normal = 1
option_hard = 2
alias_beginner = 0 # same as easy but allows the player to use beginner as an alternative for easy in the result in their options
alias_expert = 2 # same as hard
default = 1 # default to normal


class FinalBossHP(Range):
"""Sets the HP of the final boss"""
display_name = "Final Boss HP"
range_start = 100
range_end = 10000
default = 2000


@dataclass
class ExampleGameOptions(PerGameCommonOptions):
starting_sword: StartingSword
difficulty: Difficulty
final_boss_health: FinalBossHP
```

This will create a `Toggle` option, internally called `starting_sword`. To then submit this to the multiworld, we add it
to our world's `__init__.py`:
To then submit this to the multiworld, we add it to our world's `__init__.py`:

```python
from worlds.AutoWorld import World
Expand Down
7 changes: 2 additions & 5 deletions docs/style.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
* 120 character per line for all source files.
* Avoid white space errors like trailing spaces.


## Python Code

* We mostly follow [PEP8](https://peps.python.org/pep-0008/). Read below to see the differences.
Expand All @@ -18,9 +17,10 @@
* Use type annotations where possible for function signatures and class members.
* Use type annotations where appropriate for local variables (e.g. `var: List[int] = []`, or when the
type is hard or impossible to deduce.) Clear annotations help developers look up and validate API calls.
* New classes, attributes, and methods in core code should have docstrings that follow
[reST style](https://peps.python.org/pep-0287/).
* Worlds that do not follow PEP8 should still have a consistent style across its files to make reading easier.


## Markdown

* We almost follow [Google's styleguide](https://google.github.io/styleguide/docguide/style.html).
Expand All @@ -30,20 +30,17 @@
* One space between bullet/number and text.
* No lazy numbering.


## HTML

* Indent with 2 spaces for new code.
* kebab-case for ids and classes.


## CSS

* Indent with 2 spaces for new code.
* `{` on the same line as the selector.
* No space between selector and `{`.


## JS

* Indent with 2 spaces.
Expand Down
Loading

0 comments on commit 016c1e9

Please sign in to comment.