Skip to content

Commit

Permalink
Merge pull request #1 from Exempt-Medic/aquaria-edits
Browse files Browse the repository at this point in the history
Various fixes/changes
  • Loading branch information
tioui authored May 17, 2024
2 parents 3d963a7 + eabd14d commit b280e13
Show file tree
Hide file tree
Showing 9 changed files with 89 additions and 89 deletions.
20 changes: 12 additions & 8 deletions worlds/aquaria/Items.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@
from enum import Enum
from BaseClasses import Item, ItemClassification


class ItemType(Enum):
"""
Used to indicate to the multi-world if an item is usefull or not
Used to indicate to the multi-world if an item is useful or not
"""
NORMAL = 0
PROGRESSION = 1
JUNK = 2


class ItemGroup(Enum):
"""
Used to group items
Expand All @@ -28,6 +30,7 @@ class ItemGroup(Enum):
SONG = 5
TURTLE = 6


class AquariaItem(Item):
"""
A single item in the Aquaria game.
Expand All @@ -40,22 +43,23 @@ def __init__(self, name: str, classification: ItemClassification,
"""
Initialisation of the Item
:param name: The name of the item
:param classification: If the item is usefull or not
:param classification: If the item is useful or not
:param code: The ID of the item (if None, it is an event)
:param player: The ID of the player in the multiworld
"""
super().__init__(name, classification, code, player)


class ItemData:
"""
Data of an item.
"""
id:int
count:int
type:ItemType
group:ItemGroup
id: int
count: int
type: ItemType
group: ItemGroup

def __init__(self, id:int, count:int, type:ItemType, group:ItemGroup):
def __init__(self, id: int, count: int, type: ItemType, group: ItemGroup):
"""
Initialisation of the item data
@param id: The item ID
Expand All @@ -68,6 +72,7 @@ def __init__(self, id:int, count:int, type:ItemType, group:ItemGroup):
self.type = type
self.group = group


"""Information data for every (not event) item."""
item_table = {
# name: ID, Nb, Item Type, Item Group
Expand Down Expand Up @@ -207,4 +212,3 @@ def __init__(self, id:int, count:int, type:ItemType, group:ItemGroup):
"Transturtle Simon says": ItemData(698132, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_forest05
"Transturtle Arnassi ruins": ItemData(698133, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_seahorse
}

2 changes: 1 addition & 1 deletion worlds/aquaria/Locations.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ class AquariaLocations:

locations_openwater_bl = {
"Open water bottom left area, bulb behind the chomper fish": 698011,
"Open water bottom left area, bulb inside the downest fish pass": 698010,
"Open water bottom left area, bulb inside the lowest fish pass": 698010,
}

locations_skeleton_path = {
Expand Down
44 changes: 23 additions & 21 deletions worlds/aquaria/Options.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@

class IngredientRandomizer(Choice):
"""
Randomize Ingredients. Select if the simple ingredients (that does not have
a recipe) should be randomized. If 'common_ingredients' is selected, the
randomization will exclude the "Red Bulb", "Special Bulb" and "Rukh Egg".
Select if the simple ingredients (that do not have a recipe) should be randomized.
If "Common Ingredients" is selected, the randomization will exclude the "Red Bulb", "Special Bulb" and "Rukh Egg".
"""
display_name = "Randomize Ingredients"
option_off = 0
Expand Down Expand Up @@ -43,13 +42,13 @@ class EarlyEnergyForm(DefaultOnToggle):


class AquarianTranslation(Toggle):
"""Translate to English the Aquarian scripture in the game."""
"""Translate the Aquarian scripture in the game into English."""
display_name = "Translate Aquarian"


class BigBossesToBeat(Range):
"""
A number of big bosses to beat before having access to the creator (the final boss). The big bosses are
The number of big bosses to beat before having access to the creator (the final boss). The big bosses are
"Fallen God", "Mithalan God", "Drunian God", "Sun God" and "The Golem".
"""
display_name = "Big bosses to beat"
Expand All @@ -60,60 +59,63 @@ class BigBossesToBeat(Range):

class MiniBossesToBeat(Range):
"""
A number of Minibosses to beat before having access to the creator (the final boss). Mini bosses are
The number of minibosses to beat before having access to the creator (the final boss). The minibosses are
"Nautilus Prime", "Blaster Peg Prime", "Mergog", "Mithalan priests", "Octopus Prime", "Crabbius Maximus",
"Mantis Shrimp Prime" and "King Jellyfish God Prime". Note that the Energy statue and Simon says are not
mini bosses.
"Mantis Shrimp Prime" and "King Jellyfish God Prime".
Note that the Energy Statue and Simon Says are not minibosses.
"""
display_name = "Mini bosses to beat"
display_name = "Minibosses to beat"
range_start = 0
range_end = 8
default = 0


class Objective(Choice):
"""
The game objective can be only to kill the creator or to kill the creator
and having obtained the three every secret memories
The game objective can be to kill the creator or to kill the creator after obtaining all three secret memories.
"""
display_name = "Objective"
option_kill_the_creator = 0
option_obtain_secrets_and_kill_the_creator = 1
default = 0


class SkipFirstVision(Toggle):
"""
The first vision in the game; where Naija transform to Energy Form and get fload by enemy; is quite cool but
The first vision in the game, where Naija transforms into Energy Form and gets flooded by enemies, is quite cool but
can be quite long when you already know what is going on. This option can be used to skip this vision.
"""
display_name = "Skip first Naija's vision"
display_name = "Skip Naija's first vision"


class NoProgressionHardOrHiddenLocation(Toggle):
"""
Make sure that there is no progression items at hard to get or hard to find locations.
Those locations that will be very High location (that need beast form, soup and skill to get), every
location in the bubble cave, locations that need you to cross a false wall without any indication, Arnassi
race, bosses and mini-bosses. Usefull for those that want a casual run.
Make sure that there are no progression items at hard-to-reach or hard-to-find locations.
Those locations are very High locations (that need beast form, soup and skill to get),
every location in the bubble cave, locations where need you to cross a false wall without any indication,
the Arnassi race, bosses and minibosses. Useful for those that want a more casual run.
"""
display_name = "No progression in hard or hidden locations"


class LightNeededToGetToDarkPlaces(DefaultOnToggle):
"""
Make sure that the sun form or the dumbo pet can be aquired before getting to dark places. Be aware that navigating
in dark place without light is extremely difficult.
Make sure that the sun form or the dumbo pet can be acquired before getting to dark places.
Be aware that navigating in dark place without light is extremely difficult.
"""
display_name = "Light needed to get to dark places"


class BindSongNeededToGetUnderRockBulb(Toggle):
"""
Make sure that the bind song can be aquired before having to obtain sing bulb under rocks.
Make sure that the bind song can be acquired before having to obtain sing bulbs under rocks.
"""
display_name = "Bind song needed to get sing bulbs under rocks"


class UnconfineHomeWater(Choice):
"""
Open the way out of Home water area so that Naija can go to open water and beyond without the bind song.
Open the way out of the Home water area so that Naija can go to open water and beyond without the bind song.
"""
display_name = "Unconfine Home Water Area"
option_off = 0
Expand Down
13 changes: 3 additions & 10 deletions worlds/aquaria/Regions.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"""

from typing import Dict, Optional
from BaseClasses import MultiWorld, Region, Entrance, ItemClassification, LocationProgressType, CollectionState
from BaseClasses import MultiWorld, Region, Entrance, ItemClassification, CollectionState
from .Items import AquariaItem
from .Locations import AquariaLocations, AquariaLocation
from .Options import AquariaOptions
Expand Down Expand Up @@ -223,8 +223,6 @@ def __add_region(self, hint: str,
region.add_locations(locations, AquariaLocation)
return region



def __create_home_water_area(self) -> None:
"""
Create the `verse_cave`, `home_water` and `song_cave*` regions
Expand Down Expand Up @@ -941,7 +939,7 @@ def __add_event_secrets(self) -> None:
"""
Add secrets events to the `world`
"""
self.__add_event_location(self.first_secret, # Doit ajouter une région pour le "first secret"
self.__add_event_location(self.first_secret, # Doit ajouter une région pour le "first secret"
"First secret",
"First secret obtained")
self.__add_event_location(self.mithalas_city,
Expand Down Expand Up @@ -1095,12 +1093,10 @@ def __adjusting_light_in_dark_place_rules(self) -> None:
add_rule(self.multiworld.get_entrance("Veil left of sun temple to Sun temple left area", self.player),
lambda state: _has_light(state, self.player) or _has_sun_crystal(state, self.player))



def __adjusting_manual_rules(self) -> None:
add_rule(self.multiworld.get_location("Mithalas cathedral, Mithalan Dress", self.player),
lambda state: _has_beast_form(state, self.player))
add_rule(self.multiworld.get_location("Open water bottom left area, bulb inside the downest fish pass", self.player),
add_rule(self.multiworld.get_location("Open water bottom left area, bulb inside the lowest fish pass", self.player),
lambda state: _has_fish_form(state, self.player))
add_rule(self.multiworld.get_location("Kelp forest bottom left area, Walker baby", self.player),
lambda state: _has_spirit_form(state, self.player))
Expand Down Expand Up @@ -1133,9 +1129,6 @@ def __adjusting_manual_rules(self) -> None:
lambda state: _has_fish_form(state, self.player) and
_has_spirit_form(state, self.player))




def __no_progression_hard_or_hidden_location(self) -> None:
self.multiworld.get_location("Energy temple boss area, Fallen god tooth",
self.player).item_rule =\
Expand Down
4 changes: 2 additions & 2 deletions worlds/aquaria/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"""

from typing import List, Dict, ClassVar, Any
from ..AutoWorld import World, WebWorld
from worlds.AutoWorld import World, WebWorld
from BaseClasses import Tutorial, MultiWorld, ItemClassification
from .Items import item_table, AquariaItem, ItemType, ItemGroup
from .Locations import location_table
Expand Down Expand Up @@ -114,7 +114,7 @@ def create_regions(self) -> None:

def create_item(self, name: str) -> AquariaItem:
"""
Create an AquariaItem using `name' as item name.
Create an AquariaItem using 'name' as item name.
"""
result: AquariaItem
try:
Expand Down
54 changes: 27 additions & 27 deletions worlds/aquaria/docs/en_Aquaria.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,39 +11,39 @@ options page link: [Aquaria Player Options Page](../player-options).
## What does randomization do to this game?
The locations in the randomizer are:

- All sing bulbs;
- All Mithalas Urns;
- All Sunken City crates;
- Collectible treasure locations (including pet eggs and costumes);
- Beating Simon says;
- Li cave;
- Every Transportation Turtle (also called transturtle);
- Locations where you get songs,
* Erulian spirit cristal,
* Energy status mini-boss,
* Beating Mithalan God boss,
* Fish cave puzzle,
* Beating Drunian God boss,
* Beating Sun God boss,
* Breaking Li cage in the body
- All sing bulbs
- All Mithalas Urns
- All Sunken City crates
- Collectible treasure locations (including pet eggs and costumes)
- Beating Simon says
- Li cave
- Every Transportation Turtle (also called transturtle)
- Locations where you get songs:
* Erulian spirit cristal
* Energy status mini-boss
* Beating Mithalan God boss
* Fish cave puzzle
* Beating Drunian God boss
* Beating Sun God boss
* Breaking Li cage in the body

Note that, unlike the vanilla game, when opening sing bulbs, Mithalas urns and Sunken City crates,
nothing will come out of them. The moment those bulbs, urns and crates are opened, the location is considered received.
nothing will come out of them. The moment those bulbs, urns and crates are opened, the location is considered checked.

The items in the randomizer are:
- Dishes (used to learn recipes*);
- Some ingredients;
- The Wok (third plate used to cook 3 ingredients recipes everywhere);
- All collectible treasure (including pet eggs and costumes);
- Li and Li song;
- All songs (other than Li's song since it is learned when Li is obtained);
- Transportation to transturtles.
- Dishes (used to learn recipes)<sup>*</sup>
- Some ingredients
- The Wok (third plate used to cook 3-ingredient recipes everywhere)
- All collectible treasure (including pet eggs and costumes)
- Li and Li's song
- All songs (other than Li's song since it is learned when Li is obtained)
- Transportation to transturtles

Also, there is the option to randomize every ingredient drops (from fishes, monsters
or plants).

*Note that, unlike in the vanilla game, the recipes for dishes (other than the Sea Loaf)
cannot be cooked (and learn) before being obtained as randomized items. Also, enemies and plants
<sup>*</sup> Note that, unlike in the vanilla game, the recipes for dishes (other than the Sea Loaf)
cannot be cooked (or learned) before being obtained as randomized items. Also, enemies and plants
that drop dishes that have not been learned before will drop ingredients of this dish instead.

## What is the goal of the game?
Expand All @@ -57,8 +57,8 @@ Any items specified above can be in another player's world.
No visuals are shown when finding locations other than collectible treasure.
For those treasures, the visual of the treasure is visually unchanged.
After collecting a location check, a message will be shown to inform the player
what has been collected, and who will receive it.
what has been collected and who will receive it.

## When the player receives an item, what happens?
When you receive an item, a message will pop up to inform you where you received
the item from, and which one it is.
the item from and which one it was.
Loading

0 comments on commit b280e13

Please sign in to comment.