diff --git a/.gitignore b/.gitignore index 88f94777..8558a1a1 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,11 @@ venv/* build/* # Generated data -# _includes/_readme/* +_videos/ +_includes/_readme/ +_data/rdv.yml +_games/ +assets/games # Local Site Directories _site/ diff --git a/README.md b/README.md index f4bd2609..595b6c27 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -This is the repository for the website at https://randovania.github.io/. +This is the repository for the website at https://randovania.org/. -It's created from html files at `static_website`, with the exported logic videos from the current Randovania release. \ No newline at end of file +It's built using Jekyll. To build and test locally, first run `ci.sh` then follow the [Github Pages instructions for local testing](https://docs.github.com/en/pages/setting-up-a-github-pages-site-with-jekyll/testing-your-github-pages-site-locally-with-jekyll). diff --git a/_config.yml b/_config.yml index b1c5cf7b..43087bea 100644 --- a/_config.yml +++ b/_config.yml @@ -19,6 +19,7 @@ nav_exclude: # The following paths ar - pages/tags.html - pages/404.html - pages/index.md + - pages/experimental-games.md ### Social Media Info ### @@ -39,6 +40,9 @@ collections: redirects: output: true permalink: /:path + videos: + output: true + permalink: /games/:path/videos ### Analytics ### @@ -60,6 +64,11 @@ defaults: type: "redirects" values: layout: "redirect" + - scope: + path: "" + type: "videos" + values: + layout: "video_db" - scope: path: "" type: "posts" @@ -76,3 +85,5 @@ exclude: - ci.sh - Gemfile - Gemfile.lock + - venv/ + - build/ \ No newline at end of file diff --git a/_data/rdv.yml b/_data/rdv.yml deleted file mode 100644 index c2a23ab6..00000000 --- a/_data/rdv.yml +++ /dev/null @@ -1 +0,0 @@ -version: 7.4.0 diff --git a/_games/am2r.md b/_games/am2r.md deleted file mode 100644 index 943b5d12..00000000 --- a/_games/am2r.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -short-name: am2r -long-name: AM2R -randomize: | - - All items can be randomized - - Starting location - - Door locks - - A new goal has been added (DNA Hunt) -need-to-play: | - - AM2R version 1.5.5 -multiworld: true ---- \ No newline at end of file diff --git a/_games/cave_story.md b/_games/cave_story.md deleted file mode 100644 index 7fb4d6f7..00000000 --- a/_games/cave_story.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -short-name: cave_story -long-name: Cave Story -randomize: | - - All items can be randomized -need-to-play: | - - Windows or Wine. The game is included in Randovania -multiworld: true ---- \ No newline at end of file diff --git a/_games/dread.md b/_games/dread.md deleted file mode 100644 index 11a370d7..00000000 --- a/_games/dread.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -short-name: dread -long-name: Metroid Dread -randomize: | - - All items can be randomized - - Elevator and shuttle destinations - - Door locks - - A new goal has been added (DNA Hunt) -need-to-play: | - - A modded Switch with Atmosphere and SimpleModManager; or Ryujinx - - A dumped RomFS of your original game. Either version 1.0.0 or 2.1.0 -multiworld: true ---- \ No newline at end of file diff --git a/_games/prime1.md b/_games/prime1.md deleted file mode 100644 index 17bad4e0..00000000 --- a/_games/prime1.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -short-name: prime1 -long-name: Metroid Prime -randomize: | - - All items including Artifacts - - Elevator destinations - - Starting locations - - Door locks -need-to-play: | - - An ISO of any Gamecube release of the game - - A modded Wii, or Dolphin Emulator -multiworld: true ---- \ No newline at end of file diff --git a/_games/prime2.md b/_games/prime2.md deleted file mode 100644 index f0a94ff2..00000000 --- a/_games/prime2.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -short-name: prime2 -long-name: "Metroid Prime 2: Echoes" -randomize: | - - All items including Temple Keys - - Elevator destinations - - Starting locations - - Door locks - - Translator gate requirements -need-to-play: | - - An ISO of any Gamecube release of the game - - A modded Wii, or Dolphin Emulator -multiworld: true ---- \ No newline at end of file diff --git a/_includes/_readme/credits.md b/_includes/_readme/credits.md deleted file mode 100644 index 156d61b9..00000000 --- a/_includes/_readme/credits.md +++ /dev/null @@ -1,102 +0,0 @@ -# Credits - -GUI and logic written by [Henrique Gemignani](https://github.com/henriquegemignani/), with contributions -by [SpaghettiToastBook](https://www.twitch.tv/spaghettitoastbook), [gollop](https://github.com/gollop) and [many others](https://github.com/randovania/randovania/graphs/contributors). - -[BashPrime](https://www.twitch.tv/bashprime), [Pwootage](https://github.com/Pwootage), and [April Wade](https://github.com/aprilwade) made , from which the GUI was based. - -Website created by [Hugoshido](https://twitch.tv/hugoshido) and [duncathan_salt](https://twitter.com/duncathan_salt). portfolYOU Jekyll theme by Youssef Raafat. Free for personal and commercial use under the [MIT license](https://github.com/YoussefRaafatNasry/portfolYOU/blob/master/LICENSE). - -Installer is powered by [Advanced Installer](https://www.advancedinstaller.com/), which has graciously provided us with an open source license. - -Linux Flatpak build contributed by [Ethan Lee](https://flibitijibibo.com/). - -## Games - -### Metroid Prime 1 -* Game patching via [randomprime](https://github.com/randovania/randomprime). Originally authored by [April Wade](https://github.com/aprilwade), it is now maintained and developed by [toasterparty](https://github.com/toasterparty) with contributions from [others](https://github.com/randovania/randomprime/graphs/contributors) -* Room data collected by UltiNaruto, [EthanArmbrust](https://github.com/EthanArmbrust) and [SolventMercury](https://github.com/SolventMercury). -* Converting Metroid Prime 2 models by [Migs](https://www.twitch.tv/migslive). - -### Metroid Prime 2: Echoes -* Game patching written by [Claris](https://www.twitch.tv/claris). -* Room data initially collected by Claris, revamped by [Dyceron](https://www.twitch.tv/dyceron). -* [Menu Mod](https://www.dropbox.com/s/yhqqafaxfo3l4vn/Echoes%20Menu.7z) created by Claris. For more information, see the -[Menu Mod README](https://www.dropbox.com/s/yhqqafaxfo3l4vn/Echoes%20Menu.7z?file_subpath=%2FEchoes+Menu%2Freadme.txt). -* Converting Metroid Prime models by [Migs](https://www.twitch.tv/migslive). - -### Metroid Prime 3: Corruption -* Game patching written by [gollop](https://github.com/gollop). -* Room data collected by [Dyceron](https://www.twitch.tv/dyceron) and [KirbymastaH](https://www.twitch.tv/kirbymastah). - -### Super Metroid -* Game Patching and Logic Database by [SolventMercury](https://github.com/SolventMercury). -* Custom Item PLMs patch by [Kazuto](https://github.com/Kazuto88). -* Skip Intro Saves patch by [PHOSPHOTiDYL](https://metroidconstruction.com/resource.php?id=265). -* Other individual patches by [Total](https://github.com/tewtal), Foosda, Leodox, and others. - -### Cave Story -* Patcher and logic written by [duncathan_salt](https://twitter.com/duncathan_salt). -* Based on the [original randomizer](https://shru.itch.io/cave-story-randomizer) by shru. -* Features contributions from [many others](https://github.com/cave-story-randomizer/cave-story-randomizer/graphs/contributors). - -### Metroid Dread -* Game Patching by: - * [Henrique "Darkszero" Gemignani](https://github.com/henriquegemignani/) - * [duncathan_salt](https://twitter.com/duncathan_salt) - * [ScorelessPine](https://github.com/ScorelessPine) - * [Arcanox](https://twitter.com/ArcanoxDragon) - * [Migs](https://www.twitch.tv/migslive) - * [hyperbola0](https://github.com/steven11sjf) - * [Thanatos](https://github.com/ThanatosGit) - -* Logic Database by: - * [KirbymastaH](https://www.twitch.tv/kirbymastah) - * [Dyceron](https://www.twitch.tv/dyceron) - * [XenoWars](https://www.twitch.tv/xenowars1) - * [Mayberry](https://github.com/Isachu) - * [Hugoshido](https://twitch.tv/hugoshido) - * [Tyranisaur](https://github.com/Tyranisaur) - -* Assets by: - * Morph Ball and Speed Booster pickup textures created by [BigSharkZ](https://www.youtube.com/BigSharkZ). - * Spider Magnet pickup texture by duncathan_salt with help from BigSharkZ. - * New map icons by [SkyTheLucario](https://github.com/TheSkyknight100). - -### Another Metroid 2 Remake -* Game Patching by: - * [Miepee](https://github.com/Miepee) - * [JesRight](https://github.com/Jesright73) - -* Logic Database by: - * [Miepee](https://github.com/Miepee) - * [DruidVorse](https://www.youtube.com/@DruidVorse) - * [JeffGainsNGames](https://www.youtube.com/@jeffgainsngames) - -* Assets by: - * Morph Ball, and the Missile Launcher sprites were made by ShirtyScarab554 licensed under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). - * Power Grip and the Shiny Nothing Orb were made by ShirtyScarab554, used under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/), modified by [AbyssalCreature](https://github.com/AbyssalCreature) and licensed under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). - * New door sprites and other AM2R item sprites were made by [AbyssalCreature](https://github.com/AbyssalCreature) licensed under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). - -## Auto Tracker -* Game theme assets were provided by [MaskedTAS](https://twitter.com/MaskedTAS). -* Pixel theme assets were provided by [Uncle Reggie](https://www.twitch.tv/unclereggie). -* AM2R 1.5.5 item sprites were made by [Eskimode7](https://twitter.com/shmegleskimo) licensed under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). -* The AM2R DNA sprite was made by [AbyssalCreature](https://github.com/AbyssalCreature) licensed under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). -* The AM2R Morph Ball and Power Grip sprites were made by ShirtyScarab554 licensed under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). - -## Multiworld -Server and logic written by [Henrique "Darkszero" Gemignani](https://github.com/henriquegemignani/). - -### Primes -Dolphin and Nintendont integrations written by [Henrique "Darkszero" Gemignani](https://github.com/henriquegemignani/). These were based on [Dolphin Memory Engine](https://github.com/aldelaro5/Dolphin-memory-engine) and Pwootage's Nintendont fork, respectively. In-game message alert initially written by [encounter](https://github.com/encounter). - -### Cave Story -Cave Story Doukutsu and CSE2 Tweaked integations written by [duncathan_salt](https://twitter.com/duncathan_salt), [periwinkle](https://github.com/periwinkle9) and [ikuyo](https://github.com/calvarado194). - -### Metroid Dread -Integration written by [Thanatos](https://github.com/ThanatosGit) and [Henrique "Darkszero" Gemignani](https://github.com/henriquegemignani/). -The "unplug" icon is by tezar tantular from [Noun Project](https://thenounproject.com/browse/icons/term/unplug/) (licensed under [CC BY 3.0](https://creativecommons.org/licenses/by/3.0/)). - -### Another Metroid 2 Remake -Integration written by [Miepee](https://github.com/Miepee). Offworld sprites are licensed under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) and are made by [AbyssalCreature](https://github.com/AbyssalCreature), ShirtyScarab554 and [many others](https://github.com/randovania/YAMS/blob/main/YAMS-LIB/sprites/Attribution.md). diff --git a/_includes/_readme/welcome.md b/_includes/_readme/welcome.md deleted file mode 100644 index 896f58ee..00000000 --- a/_includes/_readme/welcome.md +++ /dev/null @@ -1,15 +0,0 @@ -Here you will be able to randomize many aspects of either game, while still being ensured it's possible to -finish without any trick or glitch! What can be randomized? - -* Randomize what can be found in each pickup location, including major upgrades, expansions, keys and artifacts. - -* Play with multiple people, via multiworld sessions. Your pickups will be shuffled among the games of -everyone involved, no matter what game they're playing! - -* Randomize where each teleporter goes, or what you need to unlock a translator gate. In either case, -there's advanced options for how they're shuffled. - -* The location you start the game in as well as the items you start with. If you're feeling brave, -you can even shuffle items you normally start with, like the Power Beam and Scan Visor. - -So have fun and start randomizing. \ No newline at end of file diff --git a/_includes/blog/single-tag.html b/_includes/blog/single-tag.html index 9470f045..25a09f02 100644 --- a/_includes/blog/single-tag.html +++ b/_includes/blog/single-tag.html @@ -1,10 +1,12 @@ {% assign tag = include.tag %} +{% assign any-posts = false %} +
{% if include.show-header == true %} {% assign tag-name = tag | capitalize %} {% for game in site.games %} - {% if game.short-name == tag %} + {% if game.game-id == tag %} {% assign tag-name = game.long-name %} {% endif %} {% endfor %} @@ -13,6 +15,7 @@

{{ tag-name }}

\ No newline at end of file diff --git a/_includes/games.html b/_includes/games.html index d00be414..058da5b5 100644 --- a/_includes/games.html +++ b/_includes/games.html @@ -1,9 +1,16 @@
-
+
{% for game in site.games %} -
+ + {% unless game.development-state == "stable" or include.show-experimental %} + {% continue %} + {% endunless %} + {% endfor %} diff --git a/_includes/videos/region.html b/_includes/videos/region.html new file mode 100644 index 00000000..96f82c68 --- /dev/null +++ b/_includes/videos/region.html @@ -0,0 +1,46 @@ +{% assign region = include.region %} + + +
+

Table of Contents

+
+ {% for area in region.value %} + {{ area.key }} +
    + {% for node in area.value %} + {% for connection in node.value %} + {%- capture connection-name -%} + {{ node.key }} → {{ connection.key }} + {%- endcapture -%} +
  • + + {{ connection-name }} + +
  • + {% endfor %} + {% endfor %} +
+ {% endfor %} +
+
+ +{% for area in region.value %} +
+

{{ area.key }}

+
+ {% for node in area.value %} + {% for connection in node.value %} + {%- capture connection-name -%} + {{ node.key }} → {{ connection.key }} + {%- endcapture -%} +
{{ connection-name }}
+ {% for video in connection.value %} +

{{ video.difficulty }}

+ {% include videos/video-embed.html yt-id=video.video_id start-time=video.start_time %} +

Back to top

+ {% endfor %} + {% endfor %} + {% endfor %} +
+
+{% endfor %} \ No newline at end of file diff --git a/_includes/videos/video-embed.html b/_includes/videos/video-embed.html new file mode 100644 index 00000000..52e6ffa5 --- /dev/null +++ b/_includes/videos/video-embed.html @@ -0,0 +1,63 @@ +{%- capture vid-src -%} + https://www.youtube.com/embed/{{ include.yt-id }}?start={{ include.start-time | 0 }}&autoplay=1 +{%- endcapture -%} + +{%- capture vid-srcdoc -%} + + +
+ {{ include.title | +
▶️
+
+
+{%- endcapture -%} + +
+ +
\ No newline at end of file diff --git a/_layouts/game.html b/_layouts/game.html index b5ae534d..8341e5a4 100644 --- a/_layouts/game.html +++ b/_layouts/game.html @@ -7,28 +7,59 @@

{{ game.long-name }}

- +

What can be randomized?

- {{ game.randomize | markdownify }} +
    + {% for entry in game.randomize %} +
  • {{ entry }}
  • + {% else %} +
  • Undefined
  • + {% endfor %} +

What do I need to play?

- {{ game.need-to-play | markdownify }} + {% for entry in game.need-to-play %} +
  • {{ entry }}
  • + {% else %} +
  • Undefined
  • + {% endfor %}

    - + Click here to view this game's video database.

    Related guides

    - {% include blog/single-tag.html tag=game.short-name %} + {% include blog/single-tag.html tag=game.game-id %}
    + {% if game.faq != empty %} +

    Frequently asked questions

    +
    + {% for faq in game.faq %} +
    +
    + + + +

    {{ faq.question }}

    +
    +
    + {{ faq.answer | newline_to_br | markdownify }} +
    +
    + {% endfor %} +
    + {% endif %}
    \ No newline at end of file diff --git a/_layouts/video_db.html b/_layouts/video_db.html new file mode 100644 index 00000000..5b03b00e --- /dev/null +++ b/_layouts/video_db.html @@ -0,0 +1,60 @@ +--- +layout: page +--- + +{% if page.regions == blank %} +

    This game has no videos. Perhaps you could + contribute some?

    +{% else %} + + +{% endif %} \ No newline at end of file diff --git a/_sass/_base.scss b/_sass/_base.scss index b646c44b..32055876 100644 --- a/_sass/_base.scss +++ b/_sass/_base.scss @@ -42,3 +42,11 @@ body { --bs-btn-disabled-bg: #{var(--rdv-themed-secondary)}; --bs-btn-disabled-border-color: #{var(--rdv-themed-secondary)}; } + +.fa-bottom { + vertical-align: text-bottom; +} + +.faq-card p { + margin-bottom: 0; +} \ No newline at end of file diff --git a/assets/games/am2r.png b/assets/games/am2r.png deleted file mode 100644 index 32680f26..00000000 Binary files a/assets/games/am2r.png and /dev/null differ diff --git a/assets/games/cave_story.png b/assets/games/cave_story.png deleted file mode 100644 index 5673f19e..00000000 Binary files a/assets/games/cave_story.png and /dev/null differ diff --git a/assets/games/dread.png b/assets/games/dread.png deleted file mode 100644 index 81f98dc4..00000000 Binary files a/assets/games/dread.png and /dev/null differ diff --git a/assets/games/prime1.png b/assets/games/prime1.png deleted file mode 100644 index 6a29a4e4..00000000 Binary files a/assets/games/prime1.png and /dev/null differ diff --git a/assets/games/prime2.png b/assets/games/prime2.png deleted file mode 100644 index 9c5f5b09..00000000 Binary files a/assets/games/prime2.png and /dev/null differ diff --git a/assets/js/theme.js b/assets/js/theme.js index d8ea287f..5260d50a 100644 --- a/assets/js/theme.js +++ b/assets/js/theme.js @@ -43,4 +43,5 @@ function getTheme() { function setTheme(value) { document.documentElement.setAttribute(THEME_ATTR, value); + document.documentElement.setAttribute('data-bs-theme', value); } diff --git a/ci.sh b/ci.sh index 13405a55..addd5f92 100755 --- a/ci.sh +++ b/ci.sh @@ -7,32 +7,34 @@ cd "$(dirname "$(realpath "${BASH_SOURCE[0]}")")" randovania_version=7.5.0 echo "Installing Requirements" -python -m pip install randovania[website]==$randovania_version cryptography + +# python -m pip install randovania[website]==$randovania_version +# FIXME: hack for missing README +python -m pip download randovania==$randovania_version --no-deps --no-binary randovania +tar xf randovania-$randovania_version.tar.gz +python -m pip install -e ./randovania-$randovania_version[website] + +echo "Building video database pages" +rm -rf _videos +mkdir _videos +python -m randovania development export-videos-yaml --output-dir _videos --as-frontmatter + +echo "Copying readme sections" +rm -rf _includes/_readme +mkdir _includes/_readme +for section in WELCOME CREDITS +do python -m randovania development export-readme-section --section $section --output-dir _includes/_readme +done + +echo "Extracting game data" +rm -rf assets/games +rm -rf _games +mkdir assets/games +mkdir _games +python -m randovania development extract-game-data --games-dir _games --covers-dir assets/games echo "Copying Jekyll source" -echo "version: $randovania_version" >> _data/rdv.yml +echo "version: $randovania_version" > _data/rdv.yml rm -rf build mkdir build cp -ar !(build) build -echo "Building video database pages" -mkdir videos -python -m randovania database export-videos --output-dir videos - -# FIXME: insanely ugly hack!!! refactor ASAP!!! -declare -A games -games["Another Metroid 2 Remake"]=am2r -games["Cave Story"]=cave_story -games["Metroid Dread"]=dread -games["Metroid Prime"]=prime1 -games["Metroid Prime 2 Echoes"]=prime2 -games["Metroid Prime 3 Corruption"]=prime3 -games["Metroid Samus Returns"]=samus_returns -games["Super Metroid"]=super_metroid - -for i in "${!games[@]}" -do - long="$i" - short="${games[$i]}" - mkdir -p "build/games/$short/videos" - cp -ar "videos/$long/." "build/games/$short/videos" -done diff --git a/pages/experimental-games.md b/pages/experimental-games.md new file mode 100644 index 00000000..a5c1d12b --- /dev/null +++ b/pages/experimental-games.md @@ -0,0 +1,6 @@ +--- +layout: page +title: Games +permalink: /games/experimental/ +--- +{% include games.html show-experimental=true %} \ No newline at end of file