diff --git a/WebHostLib/static/assets/player-settings.js b/WebHostLib/static/assets/player-settings.js
index a4a6815eb8..fe66ae9ab2 100644
--- a/WebHostLib/static/assets/player-settings.js
+++ b/WebHostLib/static/assets/player-settings.js
@@ -137,7 +137,7 @@ const getSettingValue = (settings, keyString) => {
if(typeof(key) === 'string' && currentVal.hasOwnProperty(key)){
currentVal = currentVal[key];
}else{
- return false;
+ currentVal = false;
}
});
return currentVal;
diff --git a/WebHostLib/static/assets/tutorial.js b/WebHostLib/static/assets/tutorial.js
index b38e952766..b05f16e32c 100644
--- a/WebHostLib/static/assets/tutorial.js
+++ b/WebHostLib/static/assets/tutorial.js
@@ -1,4 +1,5 @@
const availableLanguages = {
+ de: 'Deutsch',
en: 'English',
es: 'Español',
fr: 'Français',
@@ -25,7 +26,8 @@ window.addEventListener('load', () => {
ajax.send();
}).then((results) => {
// Build the language selector
- const currentLanguage = window.location.href.split('/').pop();
+ let currentLanguage = window.location.href.split('/').pop();
+ if (Object.keys(availableLanguages).indexOf(currentLanguage) === -1) { currentLanguage = 'en' }
const languageSelectorWrapper = document.createElement('div');
languageSelectorWrapper.setAttribute('id', 'language-selector-wrapper')
const languageSelector = document.createElement('select');
diff --git a/WebHostLib/static/assets/tutorial/tutorial_de.md b/WebHostLib/static/assets/tutorial/tutorial_de.md
new file mode 100644
index 0000000000..4ba994b889
--- /dev/null
+++ b/WebHostLib/static/assets/tutorial/tutorial_de.md
@@ -0,0 +1,160 @@
+# A Link to the Past Randomizer Setup Guide
+
+
+
+
+
+## Benötigte Software
+- [MultiWorld Utilities](https://github.com/Berserker66/MultiWorld-Utilities/releases)
+- [QUsb2Snes](https://github.com/Skarsnik/QUsb2snes/releases) (Included in the above Utilities)
+- Hardware oder Software zum Laden und Abspielen von SNES Rom-Dateien
+ - Einen Emulator, der lua-scripts abspielen kann
+ ([snes9x Multitroid](https://drive.google.com/drive/folders/1_ej-pwWtCAHYXIrvs5Hro16A1s9Hi3Jz),
+ [BizHawk](http://tasvideos.org/BizHawk.html))
+ - Ein SD2SNES, [FXPak Pro](https://krikzz.com/store/home/54-fxpak-pro.html), oder andere kompatible Hardware
+- Die Japanische Zelda 1.0 ROM-Datei, mit folgendem Namen: `Zelda no Densetsu - Kamigami no Triforce (Japan).sfc`
+
+## Installation Schritt für Schritt
+
+### Windows
+1. Lade die Multiworld Utilities herunter und führe die Installation aus. Sei sicher, dass du immer die
+aktuellste Version installiert hast.**Die Datei befindet sich im "assets"-Kasten unter der jeweiligen Versionsinfo!**.
+Für normale Multiworld-Spiele lädst du die `Setup.BerserkerMultiworld.exe` herunter.
+ - Für den Doorrandomizer muss die alternative doors-Variante geladen werden.
+ - Während der Installation fragt dich das Programm nach der japanischen 1.0 ROM-Datei. Wenn du die Software
+ bereits installiert hast und einfach nur updaten willst, wirst du nicht nochmal danach gefragt.
+ - Es kann auch sein,dass der Installer Microsoft Visual C++ installieren möchte.
+ Wenn du das bereits installiert hast (durch Steam oder andere Programme), wirst du nicht nochmal danach gefragt.
+
+2. Wenn du einen Emulator benutzt, so ist es sinnvoll, ihn als Standard zum Abspielen für .sfc-dateien einzustellen.
+ 1. Entpacke oder Installiere deinen Emulator(-Ordner) an einen Ort, den du auch wiederfindest
+ 2. Rechtsklicke auf eine .sfc-Datei und wähle **Öffnen mit...**
+ 3. Mache einen Haken in die Box bei **Immer diese App zum Öffnen von .sfc Dateien benutzen **.
+ 4. Scrolle zum Ende und wähle **Weitere Apps** und nochmal am Ende **Andere App auf diesem PC suchen** auswählen.
+ 5. Suche nach der .exe-Datei des Emulators deiner Wahl und wähle **Öffnen**.
+ Diese Datei befindet sich dort, wo den Emulator in Schritt 1 enpackt/installiert hast.
+
+### Macintosh
+- Es werden freiwillige Helfer gesucht! Meldet euch doch bei **Farrak Kilhn** auf Discord, wenn ihr helfen wollt!
+
+## Erstellen deiner YAML-Datei
+
+### Was ist eine YAML-Datei und wofür brauche ich die?
+Deine persönliche YAML-Datei beinhaltet eine Reihe von Einstellungen, die der Zufallsgenerator zum erstellen
+von deinem Spiel benötigt. Jeder Spieler einer Multiworld stellt seine eigene YAML-Datei zur Verfügung. Dadurch kann
+jeder Spieler sein Spiel nach seinem eigenen Geschmack gestalten, während andere Spieler unabhängig davon ihre eigenen
+Einstellungen wählen können!
+
+### Wo bekomme ich so eine YAML-Datei her?
+Die [Player Settings](/player-settings) Seite auf der Website ermöglicht das einfache Erstellen und Herunterladen
+deiner eigenen `yaml` Datei. Drei verschiedene Voreinstellungen können dort gespeichert werden.
+
+### Deine YAML-Datei ist gewichtet!
+Die **Player Settings** Seite hat eine Menge Optionen, die man per Schieber einstellen kann. Das ermöglicht es,
+verschiedene Optionen mit unterschiedlichen Wahrscheinlichkeiten in einer Kategorie ausgewürfelt zu werden
+
+Als Beispiel kann man sie die Option "Map Shuffle" als einen Eimer mit Zetteln zur Abstimmung Vorstellen.
+So kann man beispielsweise für die Option "On" 20 Zettel mit dieser Option einwerfen und 40 Zettel mit "Off".
+
+Entsprechend in diesem Beispiel liegen dann 60 Zettel im Eimer. 20 für "On" und 40 für "Off". Um die Option
+festzulegen, "greift" der Generator in den Eimer und holt sich zufällig einen Zettel heraus. Entsprechend ist die
+Wahrscheinlichkeit für "Off" bei einem Map Shuffle höher, als "O"
+
+Wenn du eine Option nicht gewählt haben möchtest, setze ihren Wert einfach auf Null.
+(Es muss aber mindestens eine Option pro Kategorie einen Wert größer Null besitzen, sonst funktioniert es nicht!)
+
+### Überprüfung deiner YAML-Datei
+Wenn man sichergehen will, ob die YAML-Datei funktioniert, kann man dies
+bei der [YAML Validator](/mysterycheck) Seite tun.
+
+## ein Einzelspielerspiel erstellen
+1. Navigiere zur [Generator Seite](/generate) und lade dort deine YAML-Datei hoch.
+2. Dir wird eine "Seed Info"-Seite angezeigt, wo du deine Patch-Datei herunterladen kannst.
+3. Doppelklicke die Patchdatei und der Emulator sollte nach kurzer Verzögerung mit dem gepatchten Rom starten.
+ Der Client ist soweit unnötig für Einzelspielerspiele, also kannst diesen und das WebUI einfach schließen.
+
+## Einem MultiWorld-Spiel beitreten
+
+### Erhalte deine Patch-Datei und erstelle dein ROM
+Wenn du an einem MultiWorld-Spiel teilnehmen möchtest, wirst du in der Regel vom Host nach deiner YAML-Datei gefragt.
+Sobald du diese weitergegeben hast, wird der Host einen Link bereitstellen, wo du deinen Patch oder eine .zip-Datei
+mit allen Patches herunterladen kannst. Die Patch-Datei hat immer die Endung `.bmbp`.
+
+### Mit dem Client verbinden
+
+#### Via Emulator
+Wenn der client den Emulator automatisch gestartet hat, wird QUsb2Snes ebenfalls im Hintergrund gestartet.
+Wenn dies das erste Mal ist, wird möglicherweise ein Fenster angezeigt, wo man bestätigen muss, dass das Programm
+durch die Windows Firewall kommunizieren darf.
+
+##### snes9x Multitroid
+1. Lade die Entsprechende ROM-Datei, wenn sie nicht schon automatisch geladen wurde.
+2. Klicke auf den Reiter "File" oben im Menü und wähle **Lua Scripting**
+3. Klicke auf **New Lua Script Window...**
+4. Im sich neu öffnenden Fenster, klicke auf **Browse...**
+5. Navigiere zum Ort, wo du snes9x Multitroid installiert hast, öffne den `lua`-Ordner und öffne `multibridge.lua`
+6. Schaue im Lua-Fenster nach einem Namen, der dir zugeteilt wird und schaue im Client (WebUI im Browser), ob dort
+ "Snes Device: Connected" mit demselben Namen dort steht (in der oberen linken Ecke).
+
+##### BizHawk
+1. Stelle sicher, dass der BSNES-Core in Bizhawk geladen wird. Dazu musst du auf das Tools-Menü in Bizhawk klicken
+ und folgende Optionen wählen:
+ `Config --> Cores --> SNES --> BSNES`
+2. Lade die entsprechende ROM-Datei, wenn sie nicht schon automatisch geladen wurde.
+3. Klicke auf das Tools-Menü und klicke auf **Lua Console**
+4. Klicke auf den Button um ein neues Lua-Script zu öffnen.
+5. Navigiere zum Verzeichnis, wo du die Multiworld Utilities installiert hast und dort in folgende Ordner:
+ `QUsb2Snes/Qusb2Snes/LuaBridge`
+6. Wähle dort die `luabridge.lua` und klicke auf Öffnen.
+7. Schaue im Lua-Fenster nach einem Namen, der dir zugeteilt wird und schaue im Client (WebUI im Browser), ob dort
+ "Snes Device: Connected" mit demselben Namen dort steht (in der oberen linken Ecke)
+
+#### Mit (Original-)Hardware
+Dieser Guide setzt voraus, dass du schon die entsprechende Firmware für dein Gerät heruntergeladen hast! Wenn du
+das noch nicht getan hast, so tue dies am besten jetzt! SD2SNES und FXPak Pro Nutzer finden die passende Firmware
+[hier](https://github.com/RedGuyyyy/sd2snes/releases). Nutzer ähnlicher Hardware finden Hilfestellung
+[auf dieser Seite](http://usb2snes.com/#supported-platforms).
+
+**UM MIT HARDWARE ZU VERBINDEN WIRD AKTUELL EINE ALTE VERSION VON QUSB2SNES BENÖTIGT
+([v0.7.16](https://github.com/Skarsnik/QUsb2snes/releases/tag/v0.7.16)).**
+Neuere Versionen funktionieren möglicherweise nur eingeschränkt, fehlerhaft oder gar nicht!
+
+1. Schließe deinen Emulator, falls er automatisch gestartet haben sollte.
+2. Schließe QUsb2Snes, welches automatisch mit dem Client gestartet wurde (in der Taskleiste zu finden).
+3. Starte die richtige version von QUsb2Snes (v0.7.16).
+4. Starte deine (Original-)Konsole und lade die ROM-Datei.
+5. Schaue auf dein Clientfenster, welches nun "Snes Device: Connected" und den namen deiner Konsole
+ zeigen sollte.
+
+### Mit dem MultiServer verbinden
+Die Patch-Datei, welche auch den Client gestartet hat, sollte dich automatisch mit dem MultiServer verbunden haben.
+Manchmal ist dies nicht der Fall, auch wenn das Spiel auf der Webseite gehostet wird, aber woanders erstellt wurde.
+Wenn die WebUI vom Client "Server Status: Not Connected" zeigt, frag deinen Host nach der passenden Adresse
+und trage sie einfach in das Textfeld neben "Server" ein und drücke Enter.
+
+Der Client wird versuchen auf die neue Adresse zu verbinden und nach einer Weile "Server Status: Connected" zeigen.
+Sollte nach einer Weile der Client sich nicht verbunden haben, lade die Seite neu.
+
+### Spiele das Spiel!
+Wenn der Client anzeigt, dass sowohl das SNES-Gerät (oder Emulator) und der Server verbunden sind,
+können du und deine Freunde loslegen! Glückwunsch zum erfolgreichen Beitritt zu einem Multiworld-Spiel ;)
+
+## Ein Multiworld-Spiel hosten
+Die Empfohlene Art, ein Spiel zu hosten, ist, den Service auf
+[der website](https://berserkermulti.world/generate) zu nutzen. Das Ganze ist recht einfach:
+
+1. Lasse dir von deinen Mitspielern die YAML-Datei zuschicken.
+2. Erstelle einen Zip-komprimierten Ordner´, in den du alle YAML-Dateien deiner Spieler einfügst.
+3. Lade diesen Zip-Ordner auf der oben genannten Website hoch.
+4. Warte einen Moment, wenn das Spiel erstellt wird.
+5. Wenn das Spiel erstellt wurde, wirst du auf eine "Seed Info"-Seite weitergeleitet.
+6. Klicke auf "Create New Room". Du wirst auf die Serverseite gebracht. Gib diesen Link deinen Mitspielern,
+ sodass sie ihre Patch-Dateien von dort herunterladen können.
+ **Anmerkung:** Die Patch-Dateien von dieser Seite ermöglichen es den Spielern,
+ automatisch auf den Server zu verbinden. Die Patch-Dateien von der "Seed Info"-Seite tun dies nicht!
+7. Oben auf der Serverseite ist ein Link zum MultiWorld-Tracker zum aktuellen Spiel zu finden. Gib diesen Link
+ ebenfalls deinen Mitspielern, so dass ihr alle den Fortschritt eures Spiels verfolgen könnt! Ihr könnt ihn
+ auch an Zuschauer weitergeben.
+8. Wenn alle Spieler verbunden sind, könnt ihr mit dem Spiel loslegen! Viel Spaß!
diff --git a/WebHostLib/static/static/playerSettings.json b/WebHostLib/static/static/playerSettings.json
index fa2d8afb9f..91a2274c20 100644
--- a/WebHostLib/static/static/playerSettings.json
+++ b/WebHostLib/static/static/playerSettings.json
@@ -205,7 +205,8 @@
"none": {
"keyString": "accessibility.none",
"friendlyName": "Required Only",
- "description": "Guarantees only that the game is beatable. You may not be able to access all locations or acquire all items."
+ "description": "Guarantees only that the game is beatable. You may not be able to access all locations or acquire all items.",
+ "defaultValue": 0
}
}
},
@@ -342,7 +343,8 @@
"local_ganon_triforce_hunt": {
"keyString": "goals.local_ganon_triforce_hunt",
"friendlyName": "Local Triforce hunt /w Ganon",
- "description": "Same as Local Triforce Hunt, but you need to defeat Ganon in his lair instead of talking with Murahadala."
+ "description": "Same as Local Triforce Hunt, but you need to defeat Ganon in his lair instead of talking with Murahadala.",
+ "defaultValue": 0
}
}
},
@@ -723,7 +725,8 @@
"swordless": {
"keyString": "weapons.swordless",
"friendlyName": "Swordless",
- "description": "Your swords are replaced with rupees. Gameplay changes are made to accommodate this change."
+ "description": "Your swords are replaced with rupees. Gameplay changes are made to accommodate this change.",
+ "defaultValue": 0
}
}
},
@@ -1226,19 +1229,19 @@
"1": {
"keyString": "intensity.1",
"friendlyName": "Level 1",
- "description": "Doors and Spiral cases will be shuffled amongst themselves.",
+ "description": "Doors and spiral staircases will be shuffled amongst themselves.",
"defaultValue": 50
},
"2": {
"keyString": "intensity.2",
"friendlyName": "Level 2",
- "description": "Doors, Open Edges, and Straight stair cases shuffled amongst each other. Spiral cases will be shuffled amongst themselves.",
+ "description": "Doors, open edges, and straight stair cases are shuffled amongst each other. Spiral staircases will be shuffled amongst themselves.",
"defaultValue": 0
},
"3": {
"keyString": "intensity.3",
"friendlyName": "Level 3",
- "description": "(Coming soon) Everything in Level 2 plus lobby shuffling, using any non-dead-end super-tiles with a south facing door to become a dungeon entrance. (for example, EP Cannonball chest, TR Pipe Maze, Mire Hub, etc...)",
+ "description": "Level 2 plus lobby shuffling, which means any non-dead-end supertile with a south-facing door may become a dungeon entrance.",
"defaultValue": 0
},
"random": {
diff --git a/WebHostLib/static/static/playerSettings.yaml b/WebHostLib/static/static/playerSettings.yaml
index ba8e167e8e..98f7b26da0 100644
--- a/WebHostLib/static/static/playerSettings.yaml
+++ b/WebHostLib/static/static/playerSettings.yaml
@@ -10,7 +10,7 @@
# on: 5
# off: 15
#
-# Means you have 5 chances for map shuffle to not occur, and 15 chances for map shuffle to be turned on
+# Means you have 5 chances for map shuffle to occur, and 15 chances for map shuffle to be turned off
# I've never seen a file like this before. What characters am I allowed to use?
# This is a .yaml file. You are allowed to use most characters.
@@ -90,14 +90,14 @@ triforce_pieces_mode: #Determine how to calculate the extra available triforce p
extra: 0 # available = triforce_pieces_extra + triforce_pieces_required
percentage: 0 # available = (triforce_pieces_percentage /100) * triforce_pieces_required
available: 50 # available = triforce_pieces_available
-triforce_pieces_extra: # Set to how many extra triforces pieces are available to collect in the world.
+triforce_pieces_extra: # Set to how many extra triforces pieces are available to collect in the world.
# Format "pieces: chance"
0: 0
5: 50
10: 50
15: 0
20: 0
-triforce_pieces_percentage: # Set to how many extra triforces pieces according to a percentage of the required ones, are available to collect in the world.
+triforce_pieces_percentage: # Set to how many extra triforces pieces according to a percentage of the required ones, are available to collect in the world.
# Format "pieces: chance"
100: 0 #No extra
150: 50 #Half the required will be added as extra
@@ -171,16 +171,16 @@ boss_shuffle:
full: 0 # 3 bosses can occur twice
random: 0 # Any boss can appear any amount of times
singularity: 0 # Picks a boss, tries to put it everywhere that works, if there's spaces remaining it picks a boss to fill those
-enemy_shuffle: # randomize enemy placement
+enemy_shuffle: # Randomize enemy placement
on: 0
off: 50
-killable_thieves: # make thieves killable.
- on: 0 # usually turned on together with enemy_shuffle to make annoying thief placement more manageable
+killable_thieves: # Make thieves killable
+ on: 0 # Usually turned on together with enemy_shuffle to make annoying thief placement more manageable
off: 50
-tile_shuffle: # randomize the tile layouts in flying tile rooms
+tile_shuffle: # Randomize the tile layouts in flying tile rooms
on: 0
off: 50
-bush_shuffle: # randomize the chance that bushes have enemies and the enemies under said bush
+bush_shuffle: # Randomize the chance that bushes have enemies and the enemies under said bush
on: 0
off: 50
enemy_damage:
@@ -204,12 +204,12 @@ beemizer: # Remove items from the global item pool and replace them with single
4: 0 # 100% of the non-essential item pool is replaced with bee traps
shop_shuffle:
none: 50
- i: 0 # shuffle the inventories of the shops around
- p: 0 # randomize the prices of the items in shop inventories
- u: 0 # shuffle capacity upgrades into the item pool (and allow them to traverse the multiworld)
- ip: 0 # shuffle inventories and randomize prices
- uip: 0 # shuffle inventories, randomize prices and shuffle capacity upgrades into the item pool
- # you can add more combos
+ i: 0 # Shuffle the inventories of the shops around
+ p: 0 # Randomize the prices of the items in shop inventories
+ u: 0 # Shuffle capacity upgrades into the item pool (and allow them to traverse the multiworld)
+ ip: 0 # Shuffle inventories and randomize prices
+ uip: 0 # Shuffle inventories, randomize prices and shuffle capacity upgrades into the item pool
+ # You can add more combos
shuffle_prizes: # aka drops
none: 0 # do not shuffle prize packs
g: 50 # shuffle "general" price packs, as in enemy, tree pull, dig etc.