Move game names and descriptions into AutoWorld, fix option value names on player-settings pages

This commit is contained in:
Chris Wilson 2021-08-31 17:28:46 -04:00
parent 66627d8a66
commit 4fcce66505
7 changed files with 41 additions and 57 deletions

View File

@ -8,6 +8,7 @@ from pony.flask import Pony
from flask import Flask, request, redirect, url_for, render_template, Response, session, abort, send_from_directory from flask import Flask, request, redirect, url_for, render_template, Response, session, abort, send_from_directory
from flask_caching import Cache from flask_caching import Cache
from flask_compress import Compress from flask_compress import Compress
from worlds.AutoWorld import AutoWorldRegister
from .models import * from .models import *
@ -81,49 +82,6 @@ def page_not_found(err):
return render_template('404.html'), 404 return render_template('404.html'), 404
games_list = {
"A Link to the Past": ("The Legend of Zelda: A Link to the Past",
"""
The Legend of Zelda: A Link to the Past is an action/adventure game. Take on the role of
Link, a boy who is destined to save the land of Hyrule. Delve through three palaces and nine
dungeons on your quest to rescue the descendents of the seven wise men and defeat the evil
Ganon!"""),
"Factorio": ("Factorio",
"""
Factorio is a game about automation. You play as an engineer who has crash landed on the planet
Nauvis, an inhospitable world filled with dangerous creatures called biters. Build a factory,
research new technologies, and become more efficient in your quest to build a rocket and return home.
"""),
"Minecraft": ("Minecraft",
"""
Minecraft is a game about creativity. In a world made entirely of cubes, you explore, discover, mine,
craft, and try not to explode. Delve deep into the earth and discover abandoned mines, ancient
structures, and materials to create a portal to another world. Defeat the Ender Dragon, and claim
victory!"""),
"Subnautica": ("Subnautica",
"""
Subnautica is an undersea exploration game. Stranded on an alien world, you become infected by
an unknown bacteria. The planet's automatic quarantine will shoot you down if you try to leave.
You must find a cure for yourself, build an escape rocket, and leave the planet.
"""),
"Ocarina of Time": ("The Legend of Zelda: Ocarina of Time",
"""
The Legend of Zelda: Ocarina of Time was the first three dimensional Zelda game. Journey as
Link as he quests to fulfil his destiny. Journey across Hyrule and defeat the evil masters of
corrupted temples or seek out the pieces of the Triforce. Defeat the evil Ganondorf to become
the Hero of Time and save Hyrule!
"""),
"Super Metroid": ("Super Metroid",
"""
Samus is back in her first 16 bit adventure! Space pirates have attacked Ceres station and stolen
the last living Metroid. Go to planet Zebes and search out the abilities you will need to power
up your suit and defeat the villainous leader of the space pirates, Mother Brain.
"""),
# "Ori and the Blind Forest": ("Ori and the Blind Forest", "Coming Soon™"),
# "Hollow Knight": ("Hollow Knight", "Coming Soon™"),
}
# Player settings pages # Player settings pages
@app.route('/games/<string:game>/player-settings') @app.route('/games/<string:game>/player-settings')
def player_settings(game): def player_settings(game):
@ -145,7 +103,11 @@ def game_page(game):
# List of supported games # List of supported games
@app.route('/games') @app.route('/games')
def games(): def games():
return render_template("games/games.html", games_list=games_list) worlds = {}
for game, world in AutoWorldRegister.world_types.items():
if not world.hidden:
worlds[game] = world.__doc__ if world.__doc__ else "No description provided."
return render_template("games/games.html", worlds=worlds)
@app.route('/tutorial/<string:game>/<string:file>/<string:lang>') @app.route('/tutorial/<string:game>/<string:file>/<string:lang>')

View File

@ -48,7 +48,7 @@ def create():
for sub_option_name, sub_option_id in option.options.items(): for sub_option_name, sub_option_id in option.options.items():
this_option["options"].append({ this_option["options"].append({
"name": sub_option_name, "name": option.get_option_name(sub_option_id),
"value": sub_option_name, "value": sub_option_name,
}) })

View File

@ -9,9 +9,9 @@
{% include 'header/grassHeader.html' %} {% include 'header/grassHeader.html' %}
<div id="games"> <div id="games">
<h1>Currently Supported Games</h1> <h1>Currently Supported Games</h1>
{% for game, (display_name, description) in games_list.items() %} {% for game, description in worlds.items() %}
<h3><a href="{{ url_for("game_page", game=game) }}">{{ display_name}}</a></h3> <h3><a href="{{ url_for("game_page", game=game) }}">{{ game }}</a></h3>
<p>{{ description}}</p> <p>{{ description }}</p>
{% endfor %} {% endfor %}
</div> </div>
{% endblock %} {% endblock %}

View File

@ -24,6 +24,12 @@ lttp_logger = logging.getLogger("A Link to the Past")
class ALTTPWorld(World): class ALTTPWorld(World):
"""
The Legend of Zelda: A Link to the Past is an action/adventure game. Take on the role of
Link, a boy who is destined to save the land of Hyrule. Delve through three palaces and nine
dungeons on your quest to rescue the descendents of the seven wise men and defeat the evil
Ganon!
"""
game: str = "A Link to the Past" game: str = "A Link to the Past"
options = alttp_options options = alttp_options
topology_present = True topology_present = True
@ -192,8 +198,8 @@ class ALTTPWorld(World):
elif 'Bow' in item_name: elif 'Bow' in item_name:
if state.has('Silver Bow', item.player): if state.has('Silver Bow', item.player):
return return
elif state.has('Bow', item.player) and (self.world.difficulty_requirements[item.player].progressive_bow_limit >= 2 elif state.has('Bow', item.player) and (self.world.difficulty_requirements[item.player].progressive_bow_limit >= 2
or self.world.logic[item.player] == 'noglitches' or self.world.logic[item.player] == 'noglitches'
or self.world.swordless[item.player]): # modes where silver bow is always required for ganon or self.world.swordless[item.player]): # modes where silver bow is always required for ganon
return 'Silver Bow' return 'Silver Bow'
elif self.world.difficulty_requirements[item.player].progressive_bow_limit >= 1: elif self.world.difficulty_requirements[item.player].progressive_bow_limit >= 1:
@ -401,4 +407,4 @@ class ALttPLogic(LogicMixin):
return True return True
if self.world.smallkey_shuffle[player] == smallkey_shuffle.option_universal: if self.world.smallkey_shuffle[player] == smallkey_shuffle.option_universal:
return self.can_buy_unlimited('Small Key (Universal)', player) return self.can_buy_unlimited('Small Key (Universal)', player)
return self.prog_items[item, player] >= count return self.prog_items[item, player] >= count

View File

@ -24,6 +24,11 @@ all_items["Evolution Trap"] = factorio_base_id - 2
class Factorio(World): class Factorio(World):
"""
Factorio is a game about automation. You play as an engineer who has crash landed on the planet
Nauvis, an inhospitable world filled with dangerous creatures called biters. Build a factory,
research new technologies, and become more efficient in your quest to build a rocket and return home.
"""
game: str = "Factorio" game: str = "Factorio"
static_nodes = {"automation", "logistics", "rocket-silo"} static_nodes = {"automation", "logistics", "rocket-silo"}
custom_recipes = {} custom_recipes = {}

View File

@ -16,6 +16,12 @@ from ..AutoWorld import World
client_version = 6 client_version = 6
class MinecraftWorld(World): class MinecraftWorld(World):
"""
Minecraft is a game about creativity. In a world made entirely of cubes, you explore, discover, mine,
craft, and try not to explode. Delve deep into the earth and discover abandoned mines, ancient
structures, and materials to create a portal to another world. Defeat the Ender Dragon, and claim
victory!
"""
game: str = "Minecraft" game: str = "Minecraft"
options = minecraft_options options = minecraft_options
topology_present = True topology_present = True
@ -47,7 +53,7 @@ class MinecraftWorld(World):
itempool = [] itempool = []
junk_pool = junk_weights.copy() junk_pool = junk_weights.copy()
# Add all required progression items # Add all required progression items
for (name, num) in required_items.items(): for (name, num) in required_items.items():
itempool += [name] * num itempool += [name] * num
# Add structure compasses if desired # Add structure compasses if desired
if self.world.structure_compasses[self.player]: if self.world.structure_compasses[self.player]:
@ -85,9 +91,9 @@ class MinecraftWorld(World):
def MCRegion(region_name: str, exits=[]): def MCRegion(region_name: str, exits=[]):
ret = Region(region_name, None, region_name, self.player, self.world) ret = Region(region_name, None, region_name, self.player, self.world)
ret.locations = [MinecraftAdvancement(self.player, loc_name, loc_data.id, ret) ret.locations = [MinecraftAdvancement(self.player, loc_name, loc_data.id, ret)
for loc_name, loc_data in advancement_table.items() for loc_name, loc_data in advancement_table.items()
if loc_data.region == region_name] if loc_data.region == region_name]
for exit in exits: for exit in exits:
ret.exits.append(Entrance(self.player, exit, ret)) ret.exits.append(Entrance(self.player, exit, ret))
return ret return ret
@ -100,7 +106,7 @@ class MinecraftWorld(World):
with open(os.path.join(output_directory, filename), 'wb') as f: with open(os.path.join(output_directory, filename), 'wb') as f:
f.write(b64encode(bytes(json.dumps(data), 'utf-8'))) f.write(b64encode(bytes(json.dumps(data), 'utf-8')))
def fill_slot_data(self): def fill_slot_data(self):
slot_data = self._get_mc_data() slot_data = self._get_mc_data()
for option_name in minecraft_options: for option_name in minecraft_options:
option = getattr(self.world, option_name)[self.player] option = getattr(self.world, option_name)[self.player]
@ -115,7 +121,7 @@ class MinecraftWorld(World):
item.never_exclude = True item.never_exclude = True
return item return item
def mc_update_output(raw_data, server, port): def mc_update_output(raw_data, server, port):
data = json.loads(b64decode(raw_data)) data = json.loads(b64decode(raw_data))
data['server'] = server data['server'] = server
data['port'] = port data['port'] = port

View File

@ -15,6 +15,11 @@ from ..AutoWorld import World
class SubnauticaWorld(World): class SubnauticaWorld(World):
"""
Subnautica is an undersea exploration game. Stranded on an alien world, you become infected by
an unknown bacteria. The planet's automatic quarantine will shoot you down if you try to leave.
You must find a cure for yourself, build an escape rocket, and leave the planet.
"""
game: str = "Subnautica" game: str = "Subnautica"
item_name_to_id = items_lookup_name_to_id item_name_to_id = items_lookup_name_to_id
@ -53,7 +58,7 @@ class SubnauticaWorld(World):
pass pass
def fill_slot_data(self): def fill_slot_data(self):
slot_data = {} slot_data = {}
return slot_data return slot_data