"""
Archipelago init file for Lingo 2
"""
from BaseClasses import ItemClassification, Item
from worlds.AutoWorld import WebWorld, World
from .items import Lingo2Item
from .options import Lingo2Options
from .player_logic import Lingo2PlayerLogic
from .regions import create_regions
from .static_logic import Lingo2StaticLogic
class Lingo2WebWorld(WebWorld):
rich_text_options_doc = True
theme = "grass"
class Lingo2World(World):
"""
Lingo 2 is a first person indie puzzle game where you solve word puzzles in a labyrinthe world. Compared to its
predecessor, Lingo 2 has new mechanics, more areas, and a unique progression system where you have to unlock letters
before using them in puzzle solutions.
"""
game = "Lingo 2"
web = Lingo2WebWorld()
topology_present = True
options_dataclass = Lingo2Options
options: Lingo2Options
static_logic = Lingo2StaticLogic()
item_name_to_id = static_logic.item_name_to_id
location_name_to_id = static_logic.location_name_to_id
player_logic: Lingo2PlayerLogic
def generate_early(self):
self.player_logic = Lingo2PlayerLogic(self)
def create_regions(self):
create_regions(self)
from Utils import visualize_regions
visualize_regions(self.multiworld.get_region("Menu", self.player), "my_world.puml")
def create_items(self):
pool = [self.create_item(name) for name in self.player_logic.real_items]
total_locations = sum(len(locs) for locs in self.player_logic.locations_by_room.values())
item_difference = total_locations - len(pool)
for i in range(0, item_difference):
pool.append(self.create_item(self.get_filler_item_name()))
self.multiworld.itempool += pool
def create_item(self, name: str) -> Item:
return Lingo2Item(name, ItemClassification.filler if name == self.get_filler_item_name() else
ItemClassification.progression,
self.item_name_to_id.get(name), self.player)
def set_rules(self):
self.multiworld.completion_condition[self.player] = lambda state: state.has("Victory", self.player)
def fill_slot_data(self):
slot_options = [
"daedalus_roof_access",
"keyholder_sanity",
"shuffle_doors",
"shuffle_letters",
"victory_condition",
]
slot_data = {
**self.options.as_dict(*slot_options),
}
return slot_data
def get_filler_item_name(self) -> str:
return "A Job Well Done"
h'>path: root/data/README.md
blob: bf0a51b93b4f930e8a896b7067249cc5f0bf0e7a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# Lingo 2 Randomizer Data
This folder contains the logic for the Lingo 2 randomizer in a human-readable
format. This data is compiled into a single file and used in the various parts
of the randomizer project (client, apworld, etc).
The data is structured using [Protocol Buffers](https://protobuf.dev/). The
schema for the human-readable format is
[located in the repository](https://code.fourisland.com/lingo2-archipelago/tree/proto/human.proto).
## Compiling
Hi.
|