Merge pull request #133 from PretendoNetwork/feature-docs

feature: docs
This commit is contained in:
Jonathan Barrow
2022-09-17 21:32:16 -04:00
committed by GitHub
81 changed files with 1398 additions and 271 deletions

View File

@@ -0,0 +1,26 @@
{
"juxt": [
"JXT-598-0009",
"JXT-598-0010",
"JXT-598-0011",
"JXT-598-0020",
"SYS-015-2004",
"SYS-015-5001",
"SYS-015-5002",
"SYS-015-5003",
"SYS-015-5004",
"SYS-015-5005",
"SYS-015-5006",
"SYS-015-5007",
"SYS-015-5015",
"SYS-115-2004",
"SYS-115-5001",
"SYS-115-5002",
"SYS-115-5003",
"SYS-115-5004",
"SYS-115-5005",
"SYS-115-5006",
"SYS-115-5007",
"SYS-115-5015"
]
}

View File

@@ -1,12 +0,0 @@
# Installing Juxt
The first step to installing Juxt is playing a round of Among Us as an impostor. I promise it will all make sense ina second.
```
.    。    •   ゚  。   .
.      .     。   。 .
.   。      ඞ 。 .    •     •
゚   Red was not An Impostor.  。 .
'    1 Impostor remains     。
゚   .   . ,    .  .
```

View File

@@ -1,75 +0,0 @@
# Other documentation
We are a bunch of programmers spending our free time reverse engineering and coding game servers for 3ds and wiiu.
We are a bunch of programmers spending our free time reverse engineering and coding game servers for 3ds and wiiu.
We are a bunch of programmers spending our free time reverse engineering and coding game servers for 3ds and wiiu.
```javascript
function returnTrue() {
class trueOrFalseObject {
constructor(trueOrFalse) {
this.trueOrFalse = trueOrFalse;
}
get trueOrFalse() {
return this.trueOrFalse();
}
convertNumberToBoolean(trueOrFalse) {
if (convertStringToNumber(trueOrFalse) === 0) {
return true;
} else if (convertStringToNumber(trueOrFalse) == 1) {
return false;
}
}
convertStringToNumber(trueOrFalse) {
if (trueOrFalse === "true") {
return 0;
} else if (trueOrFalse === "false") {
return true * 69 - 1 - false * 69 * 420 - 69 + 2;
}
}
trueOrFalse() {
return this.convertNumberToBoolean(trueOrFalse);
}
}
let objectWhichWeKnowIsTrue = new trueOrFalseObject("true");
function checkIfTrueOrFalse(objectToCheckIfTrueOrFalse) {
if (objectToCheckIfTrueOrFalse === objectWhichWeKnowIsTrue.trueOrFalse) {
return objectWhichWeKnowIsTrue.trueOrFalse;
console.log(
"Successfully checked if the object is true or false. Result: the object is true."
);
// TODO: fix text not console logging
} else {
objectWhichWeKnowIsTrue = new trueOrFalseObject("false");
if (objectToCheckIfTrueOrFalse === objectWhichWeKnowIsTrue.trueOrFalse) {
return objectWhichWeKnowIsTrue.trueOrFalse;
console.log(
"Successfully checked if the object is true or false. Result: the object is false."
);
// TODO: fix text not console logging
} else {
// something went horribly wrong
}
objectWhichWeKnowIsTrue = new trueOrFalseObject("true");
}
}
const isTrueTrueOrFalse = checkIfTrueOrFalse("true");
const isfalseTrueOrFalse = checkIfTrueOrFalse("false");
const trueOrFalseJSON = {
true: isTrueTrueOrFalse,
false: isfalseTrueOrFalse,
};
return trueOrFalseJSON.true
}
console.log(returnTrue())
```

View File

@@ -0,0 +1,16 @@
# Error Code: 598-0009
**Applies to:** Wii U, 3DS Family of Systems
---
Your Pretendo Network ID has been limited from posting on Juxt.
This typically occurs because of a violation of the Juxt Code of Conduct, or other offense on the Network or the Discord server.
For more information, launch the Miiverse app, or request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,16 @@
# Error Code: 598-0010
**Applies to:** Wii U, 3DS Family of Systems
---
Your Pretendo Network ID has been temporarily banned from Juxt.
This typically occurs because of a violation of the Juxt Code of Conduct, or other offense on the Network or the Discord server.
For more information, launch the Miiverse app, or request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,16 @@
# Error Code: 598-0011
**Applies to:** Wii U, 3DS Family of Systems
---
Your Pretendo Network ID has been permanently banned from Juxt.
This typically occurs because of a violation of the Juxt Code of Conduct, or other offense on the Network or the Discord server.
For more information, launch the Miiverse app, or request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,16 @@
# Error Code: 598-0020
**Applies to:** Wii U, 3DS Family of Systems
---
- "Unable to parse service Token. Are you using a Nintendo Network ID?"
This typically occurs because you are attempting to connect to Juxt with a **Nintendo Network ID** instead of a **Pretendo Network ID**.
Please ensure that the account you are using is indeed the one created for the Pretendo Network, and that you have either selected Pretendo in the 3DS Patch `nimbus.3dsx`, or have launched your Wii U with the `30_nimble.rpx` module.
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,22 @@
# Error Code: 015-2004
**Applies to:** 3DS Family of Systems
---
- "Unable to connect to the server. Please try again later. If the problem persists, please make a note of the error code and visit support.nintendo.com."
This error indicates a connection problem with the server.
### Possible Solutions
- **Check our network status information**
> Check our [Network Status page](https://stats.uptimerobot.com/R7E4wiGjJq) and ensure that there are no ongoing service outages.
- **Ensure your Wii U can connect to the internet and try again**
> Try performing a connection test in system settings. If the connection test fails, there is likely another issues on your network
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,24 @@
# Error Code: 015-5001
**Applies to:** 3DS Family of Systems
---
- "A system update is required. Go to System Settings to perform a system update."
This error should not occur under normal conditions when connected to the Pretendo Network. Follow the steps below to troubleshoot.
### Possible Solutions
- **Check that you are patched**
1. Open System Settings on the 3DS HOME Menu
2. Click on `Nintendo Network ID Settings`
3. Navigate to the 3RD Page, and select `Other`
4. Click on `Network Services Agreement`
- If the top of the lower screen says `Pretendo Network Services Agreement`, then you are connected to the Pretendo Network.
- If the top of the lower screen says something else, then you are not connected to the Pretendo Network. Follow [these](/docs/install/3ds) instructions to get started.
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,15 @@
# Error Code: 115-5002
**Applies to:** 3DS Family of Systems
---
- "You must have started Miiverse at least once before you can use this online service. Please Start Miiverse from the 3DS HOME Menu and set up your user information."
This error occurs when you have never opened the Miiverse app before attempting to use online features. Open the Miiverse app from the HOME Menu to get started.
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,15 @@
# Error Code: 015-5003
**Applies to:** 3DS Family of Systems
---
- "The server is currently undergoing maintenance. Please Try again later."
Juxtaposition is currently undergoing maintenance. Check our [Network Status page](https://stats.uptimerobot.com/R7E4wiGjJq) or join our [Discord server](https://invite.gg/pretendo) for updates.
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,24 @@
# Error Code: 015-5004
**Applies to:** 3DS Family of Systems
---
- "The Miiverse service has ended. Miiverse and any software features that make use of Miiverse will no longer be available. Thank you for your Interest."
This error should not occur under normal conditions when connected to the Pretendo Network. Follow the steps below to troubleshoot.
### Possible Solutions
- **Check that you are patched**
1. Open System Settings on the 3DS HOME Menu
2. Click on `Nintendo Network ID Settings`
3. Navigate to the 3RD Page, and select `Other`
4. Click on `Network Services Agreement`
- If the top of the lower screen says `Pretendo Network Services Agreement`, then you are connected to the Pretendo Network.
- If the top of the lower screen says something else, then you are not connected to the Pretendo Network. Follow [these](/docs/install/3ds) instructions to get started.
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,37 @@
# Error Code: 015-5005
**Applies to:** 3DS Family of Systems
---
- "You cannot use Miiverse because it has been restricted in Parental Controls."
This error occurs when Miiverse has been disallowed by Parental Controls. Follow the steps below to re-enable Miiverse.
### Steps to Remove Miiverse Parental Control Limits
1. On the 3DS HOME Menu, open the `System Settings` app.
<img src="/assets/images/docs/errors/pc-3ds-1.png" width=50% height=auto/><br><br>
2. Click on `Parental Controls` on the bottom screen.
<img src="/assets/images/docs/errors/pc-3ds-2.png" width=50% height=auto/><br><br>
3. Click on `Change` and enter your pin.
<img src="/assets/images/docs/errors/pc-3ds-3.png" width=50% height=auto/><br><br>
4. Click on `Set Restrictions`.
<img src="/assets/images/docs/errors/pc-3ds-4.png" width=50% height=auto/><br><br>
5. Scroll down to the `Miiverse` button.
<img src="/assets/images/docs/errors/pc-3ds-5.png" width=50% height=auto/><br><br>
6. Click the `Miiverse` button, and then select `Do Not Restrict`.
<img src="/assets/images/docs/errors/pc-3ds-6.png" width=50% height=auto/><br><br>
Parental Controls should now be disabled for Miiverse.
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,37 @@
# Error Code: 015-5005
**Applies to:** 3DS Family of Systems
---
- "You may not post to Miiverse due to a restriction in Parental Controls"
This error occurs when posting to Miiverse has been disallowed by Parental Controls. Follow the steps below to re-enable posting.
### Steps to Remove Miiverse Parental Control Limits
1. On the 3DS HOME Menu, open the `System Settings` app.
<img src="/assets/images/docs/errors/pc-3ds-1.png" width=50% height=auto/><br><br>
2. Click on `Parental Controls` on the bottom screen.
<img src="/assets/images/docs/errors/pc-3ds-2.png" width=50% height=auto/><br><br>
3. Click on `Change` and enter your pin.
<img src="/assets/images/docs/errors/pc-3ds-3.png" width=50% height=auto/><br><br>
4. Click on `Set Restrictions`.
<img src="/assets/images/docs/errors/pc-3ds-4.png" width=50% height=auto/><br><br>
5. Scroll down to the `Miiverse` button.
<img src="/assets/images/docs/errors/pc-3ds-5.png" width=50% height=auto/><br><br>
6. Click the `Miiverse` button, and then select `Do Not Restrict`.
<img src="/assets/images/docs/errors/pc-3ds-6.png" width=50% height=auto/><br><br>
Parental Controls should now be disabled for Miiverse.
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,18 @@
# Error Code: 015-5007
**Applies to:** 3DS Family of Systems
---
- ""Miiverse function are unavailable to this Nintendo Network ID. For details, please start Miiverse."
This typically occurs because you are attempting to connect to Juxt with a **Nintendo Network ID** instead of a **Pretendo Network ID**.
This can also occur if your Pretendo Network ID has been banned from using Juxt.
For more information, launch the Miiverse app, or request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,23 @@
# Error Code: 015-5015
**Applies to:** 3DS Family of Systems
---
- "Unable to connect to the server. Please try again later. If the problem persists, please make a note of the error code and visit support.nintendo.com."
This error indicates a connection problem with the server.
### Possible Solutions
- **Check our network status information**
> Check our [Network Status page](https://stats.uptimerobot.com/R7E4wiGjJq) and ensure that there are no ongoing service outages.
- **Ensure your 3DS can connect to the internet and try again**
> Try performing a connection test in system settings. If the connection test fails, there is likely another issues on your network
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,22 @@
# Error Code: 115-2004
**Applies to:** Wii U
---
- "Unable to connect to the server. Please try again later. If the problem persists, please make a note of the error code and visit support.nintendo.com."
This error indicates a connection problem with the server.
### Possible Solutions
- **Check our network status information**
> Check our [Network Status page](https://stats.uptimerobot.com/R7E4wiGjJq) and ensure that there are no ongoing service outages.
- **Ensure your Wii U can connect to the internet and try again**
> Try performing a connection test in system settings. If the connection test fails, there is likely another issues on your network
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,27 @@
# Error Code: 115-5001
**Applies to:** Wii U
---
- "A system update is required. Go to System Settings to perform a system update."
This error should not occur under normal conditions when connected to the Pretendo Network. Follow the steps below to troubleshoot.
### Possible Solutions
- **Check that you are patched**
1. On the Wii U System Menu, click on your Mii in the top left corner.
2. Scroll down and select `View Network Services Agreement` button.
3. Select the language of your choice.
- If the top of the screen says `Pretendo Network Services Agreement`, then you are connected to the Pretendo Network.
- If the top of the screen says something else, then you are not connected to the Pretendo Network. Follow [these](/docs/install/wiiu) instructions to get started.
- **Update your console**
- As of now, version 5.5.6 is safe to update for homebrew.
- By default, modern homebrew environments block updates to ensure patches are not broken. You can follow [this](https://wiiu.hacks.guide/#/unblock-updates) guide to unblock updates.
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,14 @@
# Error Code: 115-5002
**Applies to:** Wii U
---
- "You must have started Miiverse at least once before you can use this online service. Please Start Miiverse from the HOME Menu and set up your user information."
This error occurs when you have never opened the Miiverse app before attempting to use online features. Open the Miiverse app from the HOME Menu to get started.
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,15 @@
# Error Code: 115-5003
**Applies to:** Wii U
---
- "The server is currently undergoing maintenance. Please Try again later."
Juxtaposition is currently undergoing maintenance. Check our [Network Status page](https://stats.uptimerobot.com/R7E4wiGjJq) or join our [Discord server](https://invite.gg/pretendo) for updates.
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,24 @@
# Error Code: 115-5004
**Applies to:** Wii U
---
- "The Miiverse service has ended. Miiverse and any software features that make use of Miiverse will no longer be available. Thank you for your Interest."
This error should not occur under normal conditions when connected to the Pretendo Network. Follow the steps below to troubleshoot.
### Possible Solutions
- **Check that you are patched**
1. On the Wii U System Menu, click on your Mii in the top left corner.
2. Scroll down and select `View Network Services Agreement` button.
3. Select the language of your choice.
- If the top of the screen says `Pretendo Network Services Agreement`, then you are connected to the Pretendo Network.
- If the top of the screen says something else, then you are not connected to the Pretendo Network. Follow [these](/docs/install) instructions to get started.
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,31 @@
# Error Code: 115-5005
**Applies to:** Wii U
---
- "You cannot use Miiverse because it has been restricted in Parental Controls."
This error occurs when Miiverse has been disallowed by Parental Controls. Follow the steps below to re-enable Miiverse.
### Steps to Remove Miiverse Parental Control Limits
1. On the Wii U System Menu, open the `Parental Controls` app
<img src="/assets/images/docs/errors/pc-wiiu-1.jpeg" width=100% height=auto/><br><br>
2. Click `Next` on the Wii U Gamepad, and enter your pin.
<img src="/assets/images/docs/errors/pc-wiiu-2.jpeg" width=100% height=auto/><br><br>
3. Click on `Parental Controls Settings`
<img src="/assets/images/docs/errors/pc-wiiu-3.jpeg" width=100% height=auto/><br><br>
4. Find the user account you wish to change, and then scroll down to the `Miiverse` button.
<img src="/assets/images/docs/errors/pc-wiiu-4.jpeg" width=100% height=auto/><br><br>
5. Click the `Miiverse` button, and then select `Do Not Restrict`.
<img src="/assets/images/docs/errors/pc-wiiu-5.jpeg" width=100% height=auto/><br><br>
Parental Controls should now be disabled for Miiverse.
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,31 @@
# Error Code: 115-5006
**Applies to:** Wii U
---
- "You may not post to Miiverse due to a restriction in Parental Controls"
This error occurs when posting to Miiverse has been disallowed by Parental Controls. Follow the steps below to re-enable posting.
### Steps to Remove Miiverse Parental Control Limits
1. On the Wii U System Menu, open the `Parental Controls` app
<img src="/assets/images/docs/errors/pc-wiiu-1.jpeg" width=100% height=auto/><br><br>
2. Click `Next` on the Wii U Gamepad, and enter your pin.
<img src="/assets/images/docs/errors/pc-wiiu-2.jpeg" width=100% height=auto/><br><br>
3. Click on `Parental Controls Settings`
<img src="/assets/images/docs/errors/pc-wiiu-3.jpeg" width=100% height=auto/><br><br>
4. Find the user account you wish to change, and then scroll down to the `Miiverse` button.
<img src="/assets/images/docs/errors/pc-wiiu-4.jpeg" width=100% height=auto/><br><br>
5. Click the `Miiverse` button, and then select `Do Not Restrict`.
<img src="/assets/images/docs/errors/pc-wiiu-5.jpeg" width=100% height=auto/><br><br>
Parental Controls should now be disabled for Miiverse.
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,18 @@
# Error Code: 115-5007
**Applies to:** Wii U
---
- ""Miiverse function are unavailable to this Nintendo Network ID. For details, please start Miiverse."
This typically occurs because you are attempting to connect to Juxt with a **Nintendo Network ID** instead of a **Pretendo Network ID**.
This can also occur if your Pretendo Network ID has been banned from using Juxt.
For more information, launch the Miiverse app, or request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

View File

@@ -0,0 +1,23 @@
# Error Code: 115-5015
**Applies to:** Wii U
---
- "Unable to connect to the server. Please try again later. If the problem persists, please make a note of the error code and visit support.nintendo.com."
This error indicates a connection problem with the server.
### Possible Solutions
- **Check our network status information**
- Check our [Network Status page](https://stats.uptimerobot.com/R7E4wiGjJq) and ensure that there are no ongoing service outages.
- **Ensure your Wii U can connect to the internet and try again**
- Try performing a connection test in system settings. If the connection test fails, there is likely another issues on your network
---
If you have not yet connected to Pretendo, please follow the instructions [here](/docs/install) to get started.
If you are still unable to connect, please request to speak to a moderator in the [Discord server](https://invite.gg/pretendo).

35
docs/en_US/install/3ds.md Normal file
View File

@@ -0,0 +1,35 @@
# 3DS/2DS Family
<div class="tip">
This guide assumes that you have a <b>Homebrewed System</b>, if you don't please follow this <a href="https://3ds.hacks.guide/" target="_blank">guide</a> on how to homebrew your system first.
</div>
To connect to Pretendo Network using a 3DS/2DS system you must use the Nimbus homebrew and Luma patches
Navigate to the [releases](https://github.com/PretendoNetwork/Nimbus) page on the Nimbus GitHub repository
<img src="/assets/images/docs/install/3ds/releases-highlight.png" width=100% height=auto/>
Now download the `nimbus.zip` file from the latest release
<img src="/assets/images/docs/install/3ds/zip-highlight.png" width=100% height=auto/>
Extract `nimbus.zip` and copy the `3ds` and `luma` folders to the root of your SD card. You should now have the `0004013000002F02`, `0004013000003202`, and `0004013000003802` Luma patches along with the `nimbus.3dsx` homebrew
<img src="/assets/images/docs/install/3ds/sd-card-luma.png" width=100% height=auto/>
<img src="/assets/images/docs/install/3ds/sd-card-3ds.png" width=100% height=auto/>
Place your SD card back into your console. Boot your console and ensure Luma patches are enabled. Run the Nimbus homebrew and select the network you wish to use (Nintendo Network, or Pretendo Network)
## Luma patches
We make use of 3 Luma patches to connect your console to Pretendo:
1) `0004013000002F02` - SSL system module. This patch disables SSL verification, allowing your console to establish an SSL connection with our servers
2) `0004013000003202` - Friends system module. This patch replaces the `https://nasc.nintendowifi.net` URL with our servers URL
3) `0004013000003802` - act system module. This patch replaces the `https://account.nintendo.net/v1/api/` URL with our servers URL
## How does it work?
Nimbus will create a 2nd local account set to the `test` NASC environment. The IPS patches will set the `test` NASC environment URLs to point to Pretendo. You may freely switch between Pretendo and Nintendo. Your selected mode will persist between reboots.
## 2nd local account?
You may have thought to yourself; _"2nd local account? What's that? I thought the 3DS only had one account?"_ And you'd be half right. The 3DS only _normally_ supports one account, and you may only have one account active at a time. However Nintendo implemented support for multiple local accounts on the 3DS/2DS which remains unused on all retail units. On a normal retail unit only one local account is ever made, which is set to the `prod` NASC environment. Local accounts may be set to `prod`, `test` or `dev`. Nimbus makes use of this unused feature to create sandboxed local accounts with different environments

View File

@@ -0,0 +1,38 @@
<div class="tip green">This Guide may be missing some info or incomplete.</div>
# Cemu
<div class="tip red">
<strong>Cemu support is experimental!</strong>
Cemu does not currently have a (working) way of redriecting to custom servers. Because of this, we must hook into the Cemu process and patch parts of the program memory, much like how our Wii U patch works. This is not officially supported by Cemu or it's developers, and may have issues or fail to work entirely.
</div>
## Online files
Cemu requires the use of several files obtained via dumping from real hardware. You may use those files if you have a physical Wii U, they will work just fine. If you _don't_ have a real Wii U navigate to [your account page](/account) and select <strong>`Download account files`</strong>
<center><img src="/assets/images/docs/install/cemu/download-account-files.png"/></center>
## Setup Cemu for online
After obtaining the files needed for online play refer to the official [Cemu Online Play](https://cemu.cfw.guide/online-play.html) guide
<div class="tip">
<strong>Note! If you downloaded the account files from your Pretendo Network account you may skip the steps on the Cemu guide which dumps them from a console. However these files will not work on Nintendo Network. For compatibility with both servers, use files dumped from a real console</strong>
</div>
## Installing Pretendo
Once you have Cemu setup for online play navigate to our [Cemu Patcher](https://github.com/PretendoNetwork/cemu-patcher) repository. To build from scratch, clone the repository and open in Visual Studio and build the solution. To download the latest pre-built release, head to the [releases](https://github.com/PretendoNetwork/cemu-patcher/releases) page and download the latest `cemuhook.dll`
Place `cemuhook.dll` in the same folder as `Cemu.exe` and run Cemu. Cemu should automatically detect `cemuhook.dll` and load it. You may now go online with Pretendo!
## The patch doesn't seem to work?
Due to the experimental state of Cemu support, our patch may fail to load at times. This could be caused by changes in Cemu, your systems anti-virus, bugs in our programming, and more. We are looking into more stable patches. If the hook fails to load, try renaming `cemuhook.dll` to `dbghelp.dll` and restarting Cemu. If this does not work, you may need to contact a developer. Please be patient as we try to figure out the cause of the issue and any potential solutions
<div class="tip">
<strong>Please be warned that in some cases the patch fails for completely unknown reasons. There have been cases where different users on the same operating system, using the same Cemu version, playing the same game, experience different results. In these cases there is not much to do besides trying a different machine or Cemu version.</strong>
</div>
## What about Cemuhook by Rajkosto?
You may have noticed that Cemu automatically searches for loads DLL files named `cemuhook.dll`. This is intended for use with Cemuhook developed by Rajkosto. We hijack the DLL name in order to get Cemu to load our hook automatically. If you would like to still use Cemuhook by Rajkosto with Pretendo, name the Cemuhook by Rajkosto DLL to `true_cemuhook.dll` while keeping the Pretendo hook named `cemuhook.dll`. Our patcher will look for a DLL named `true_cemuhook.dll` and load it automatically. This is not officially supported by Rajkosto and may cause issues. Use at your own risk.
## Wine/Linux support?
The Pretendo patches do work under wine. Rename `cemuhook.dll` to `dbghelp.dll` and place `dbghelp.dll` in the same folder as `Cemu.exe`. Run `winecfg` and navigate to `Libraries` and make sure `dbghelp` is added to the override list. Select it and click `Edit` and ensure the override is set to `Native then Builtin`. Wine should now allow your local `dbghelp.dll` override the built-in DLL

View File

@@ -0,0 +1,5 @@
# Citra
At the moment Citra does not support true online play, so it doesn't work with Pretendo. Moreover, it shows no sign of supporting true play in the future.
Mikage, a 3DS emulator for mobile devices, may provide support in the future, though this is far from certain.

View File

@@ -0,0 +1,67 @@
# Installing Juxtaposition
<div class="tip">
This guide assumes that you have a <b>Homebrewed System</b>, and have already connected to Pretendo. If you have not yet set up your Pretendo Network ID, follow this <a href="/docs/install" target="_blank">guide</a> to get started.
</div>
## Select your console
- ### [Wii U](#wii-u-1)
- ### [3DS](#3ds-1)
# Wii U
### In Game Patches
Nimble and Inkay already take care of in game patches for miiverse, so you're already good to go!
<br>
### Applet Patch
Navigate to the [releases](https://github.com/PretendoNetwork/Martini/releases) page on the Martini GitHub repository
<img src="/assets/images/docs/install/juxt/martini-highlight.png" width=100% height=auto/>
Select the `martini-juxt-patcher.rpx` to download it
<img src="/assets/images/docs/install/juxt/martini-download.png" width=100% height=auto/>
Copy `martini-juxt-patcher.rpx` and place it on your SD card at `sd:/wiiu/apps/`
<img src="/assets/images/docs/install/juxt/martini-sd-card.png" width=100% height=auto/>
Place your SD card back into your console and boot like normal.
Open the Homebrew Launcher and launch `martini-juxt-patcher.rpx`
<img src="/assets/images/docs/install/juxt/martini-hbl.png" width=100% height=auto/>
After confirming the state of the Miiverse applet, press A to apply the patches.
<img src="/assets/images/docs/install/juxt/martini-install.png" width=100% height=auto/>
Once the patcher is done running and your console has rebooted, you're done! Have fun in Juxt!
<img src="/assets/images/docs/install/juxt/martini-success.png" width=100% height=auto/>
If you encountered any errors, try [searching](/docs/search) for the error code. If that doesn't work, get in touch with a developer in our [Discord](https://invite.gg/pretendo).
# 3DS
### In Game Patches
Nimbus already takes care of most in game patches for miiverse, so you're already good to go!
### Applet Patch
First, download `Juxt.zip` from [here](https://cdn.discordapp.com/attachments/911878047895023637/937516295069515866/Juxt.zip).
Extract `Juxt.zip` and copy the `3ds` and `luma` folders to the root of your SD card. You should now have the `000400300000BC02`, `000400300000BD02`, and `000400300000BE02` Luma patches along with the `juxt.pem` cert
<img src="/assets/images/docs/install/juxt/3ds-sd-card.png" width=100% height=auto/>
Place your SD card back into your console. Boot your console and ensure Luma patches are enabled.
That's it! Have fun in Juxt!

View File

@@ -0,0 +1,93 @@
# Wii U
<div class="tip">
This guide assumes that you have a <b>Homebrewed System</b>, if you don't please follow this <a href="https://wiiu.hacks.guide/" target="_blank">guide</a> on how to homebrew your system first.
</div>
## Select your homebrew environment
- ### [Tiramisu](#tiramisu-1)
- ### [Aroma](#aroma-1)
- ### [Legacy](#legacy-1)
# Tiramisu
To connect to Pretendo Network using Tiramisu you must use the [Nimble](https://github.com/PretendoNetwork/Nimble) set up module. There are 2 ways of obtaining the patch, either the stable release version or the bleeding edge version.
### Tiramisu - Stable
Navigate to the [releases](https://github.com/PretendoNetwork/Nimble/releases) page on the Nimble GitHub repository
<img src="/assets/images/docs/install/wiiu/tiramisu/releases-highlight.png" width=100% height=auto/>
Now download the `30_nimble.rpx` file from the latest release
<img src="/assets/images/docs/install/wiiu/tiramisu/rpx-highlight.png" width=100% height=auto/>
Place the downloaded `30_nimble.rpx` file on your SD card at `sd:/wiiu/environments/tiramisu/setup`
<img src="/assets/images/docs/install/wiiu/tiramisu/sd-card.png" width=100% height=auto/>
Place your SD card back into your console and boot like normal. You should now be connected to Pretendo Network
### Tiramisu - Bleeding Edge
Navigate to the [actions](https://github.com/PretendoNetwork/Nimble/actions) page on the Nimble GitHub repository
<img src="/assets/images/docs/install/wiiu/tiramisu/actions-highlight.png" width=100% height=auto/>
Select the `Nimble-CI` workflow and select the latest workflow run. _**Note:** At this stage you may also use the provided filters to only grab builds from specific branches, events, etc. By default the latest build, regardless of branch, is always shown._
<img src="/assets/images/docs/install/wiiu/tiramisu/workflow-highlight.png" width=100% height=auto/>
Select the `nimble` artifact. This will download a `nimble.zip` zip file
<img src="/assets/images/docs/install/wiiu/tiramisu/artifact-highlight.png" width=100% height=auto/>
Extract `nimble.zip` and place the extracted `30_nimble.rpx` file on your SD card at `sd:/wiiu/environments/tiramisu/setup`
<img src="/assets/images/docs/install/wiiu/tiramisu/sd-card.png" width=100% height=auto/>
Place your SD card back into your console and boot like normal. You should now be connected to Pretendo Network
# Aroma
To connect to Pretendo Network using Aroma you must use the [Inkay](https://github.com/PretendoNetwork/Inkay) plugin. There are 2 ways of obtaining the patch, either the stable release version or the bleeding edge version.
### Aroma - Stable
Navigate to the [releases](https://github.com/PretendoNetwork/Aroma/releases) page on the Aroma GitHub repository
<img src="/assets/images/docs/install/wiiu/aroma/releases-highlight.png" width=100% height=auto/>
Now download the `Inkay-pretendo.wps` file from the latest release
<img src="/assets/images/docs/install/wiiu/aroma/wps-highlight.png" width=100% height=auto/>
Place the downloaded `Inkay-pretendo.wps` file on your SD card at `sd:/wiiu/environments/aroma/plugins`
<img src="/assets/images/docs/install/wiiu/aroma/sd-card.png" width=100% height=auto/>
Place your SD card back into your console and boot like normal. You should now be connected to Pretendo Network
### Aroma - Bleeding Edge
Navigate to the [actions](https://github.com/PretendoNetwork/Aroma/actions) page on the Aroma GitHub repository
<img src="/assets/images/docs/install/wiiu/aroma/actions-highlight.png" width=100% height=auto/>
Select the `Inkay-CI` workflow and select the latest workflow run. _**Note:** At this stage you may also use the provided filters to only grab builds from specific branches, events, etc. By default the latest build, regardless of branch, is always shown._
<img src="/assets/images/docs/install/wiiu/aroma/workflow-highlight.png" width=100% height=auto/>
Select the `inkay` artifact. This will download a `inkay.zip` zip file
<img src="/assets/images/docs/install/wiiu/aroma/artifact-highlight.png" width=100% height=auto/>
Extract `inkay.zip` and place the extracted `Inkay-pretendo.wps` file on your SD card at `sd:/wiiu/environments/aroma/plugins`
<img src="/assets/images/docs/install/wiiu/aroma/sd-card.png" width=100% height=auto/>
Place your SD card back into your console and boot like normal. You should now be connected to Pretendo Network
# Legacy
Pretendo does not officially support legacy homebrew environments (Haxchi/CBHC) anymore. Legacy releases of the patcher may be found in old [releases](https://github.com/PretendoNetwork/Nimble/releases), and the source code may be found in the [old_hbl](https://github.com/PretendoNetwork/Nimble/tree/old_hbl) and [old_hbl_inkay](https://github.com/PretendoNetwork/Nimble/tree/old_hbl_inkay) branches on GitHub. However you will need to build these patches from source, and they will _**not**_ be receiving any updates or technical support. Please consider upgrading to Tiramisu/Aroma

View File

@@ -1,48 +1,60 @@
html,
body {
body,
div.main-body {
height: 100%;
background: var(--bg-shade-0);
}
a.logo-link {
margin: auto;
margin-left: 36px;
height: 40px;
text-decoration: none;
}
.docs-wrapper header {
width: calc(100% - 72px);
background: var(--bg-shade-0);
padding: 12px 36px;
margin: 18px 0;
}
header a.logo-link {
button#openSidebar {
display: none;
}
header nav a:first-child {
margin-left: -24px;
.docs-wrapper .content:not(.search) a {
text-decoration: none;
font-weight: bold;
color: var(--accent-shade-1);
}
.docs-wrapper header {
box-sizing: border-box;
margin: 20px;
margin-left: 0;
}
.docs-wrapper header a.logo-link {
display: none;
}
.docs-wrapper header nav a:first-child {
margin-left: 0;
}
.docs-wrapper {
display: grid;
grid-template-columns: repeat(2, fit-content(100%));
grid-template-rows: repeat(2, fit-content(100%));
height: 100vh;
grid-template-columns: fit-content(100%) auto;
grid-template-rows: fit-content(100%) auto;
height: 100%;
}
.docs-wrapper .sidebar {
display: flex;
flex-flow: column;
align-items: center;
width: clamp(270px, 30vw, 500px);
background: var(--bg-shade-0);
max-height: calc(100vh - 69px);
width: clamp(270px, 25vw, 500px);
overflow-y: scroll;
overflow-x: hidden;
min-height: 100%;
}
.docs-wrapper .sidebar .section {
display: flex;
flex-flow: column;
width: 200px;
margin-left: 138px;
margin-left: clamp(60px, 10vw, 138px);
margin-bottom: 72px;
}
.docs-wrapper .sidebar .section:first-child {
@@ -72,15 +84,15 @@ header nav a:first-child {
brightness(99%) contrast(92%);
position: absolute;
left: -30px;
content: url(../images/arrow-right.svg);
content: url(../images/docs/arrow-right.svg);
}
.docs-wrapper .content {
width: calc(100vw - clamp(270px, 30vw, 500px) - (72px * 2));
background: var(--bg-shade-1);
padding: 72px;
max-height: calc(100vh - 69px - (72px * 2));
max-height: 100%;
overflow-y: scroll;
border-top-left-radius: 8px;
}
.docs-wrapper .content-inner {
max-width: 900px;
@@ -126,32 +138,251 @@ header nav a:first-child {
margin-left: auto;
}
.docs-wrapper .content-inner div.tip {
position: relative;
width: 100%;
padding: 36px;
background: var(--bg-shade-2);
border-radius: 8px;
overflow: hidden;
border: var(--accent-shade-2);
margin: 24px 0;
box-sizing: border-box;
}
.docs-wrapper .content-inner div.tip::after {
content: "";
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 12px;
background: var(--accent-shade-2);
opacity: 1;
}
.docs-wrapper .content-inner div.tip.red::after {
background: var(--red-shade-1);
}
.docs-wrapper .content-inner div.tip.green::after {
background: var(--green-shade-1);
}
.docs-wrapper .content .missing-in-locale-notice {
background: var(--bg-shade-2);
padding: 24px;
border-radius: 6px;
}
.search .purple-card {
padding: 36px;
}
.search .purple-card h1 {
margin-top: 0;
}
.search .purple-card p {
margin-bottom: 2em;
}
.search .purple-card input::placeholder {
color: var(--text-shade-0);
}
.search .purple-card input:focus {
background-color: var(--bg-shade-4);
color: #fff;
transition: 200ms;
outline: none;
}
.search .input-wrapper {
position: relative;
margin-top: 8px;
}
.search .input-wrapper .matches {
display: flex;
flex-flow: column;
font-size: 1rem;
background-color: var(--bg-shade-2);
border: none;
border-radius: 0 0 4px 4px;
max-height: 204px;
overflow-y: auto;
overflow-x: hidden;
}
.search .input-wrapper .matches * {
padding: 12px;
margin: 0;
text-decoration: none;
color: var(--text-shade-3);
}
.search .input-wrapper .matches a:hover {
background-color: var(--bg-shade-1);
}
.search input.has-matches {
border-radius: 4px 4px 0 0;
}
.platform-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 24px;
margin-top: 36px;
}
.docs-wrapper .platform-grid a {
text-decoration: none;
background: var(--bg-shade-3);
border-radius: 12px;
color: var(--text-shade-4) !important;
display: grid;
grid-template-rows: auto fit-content(100%);
align-items: center;
justify-content: center;
text-align: center;
padding: 36px;
padding-bottom: 24px;
gap: 24px;
}
.platform-grid a img {
width: 180px;
max-width: 100%;
height: auto;
}
.platform-grid a span {
margin-top: auto;
font-size: 1.2rem;
}
@media screen and (max-width: 1296px) {
.docs-wrapper .content {
padding: 48px;
}
}
@media screen and (max-width: 1080px) {
.docs-wrapper .header-wrapper {
position: absolute;
top: 0;
left: 0;
display: flex;
width: 100vw;
}
button#openSidebar {
display: block;
padding: 0;
margin: 0;
margin-left: 20px;
background: none;
}
.docs-wrapper header {
margin-left: 20px;
width: 100%;
}
.docs-wrapper {
margin-top: 80px;
height: calc(100% - 80px);
}
a.logo-link {
display: none;
}
.docs-wrapper header a.logo-link {
display: block;
height: 40px;
margin: 0;
margin-right: 34px;
}
.docs-wrapper .sidebar {
grid-column: 1 / span 1;
grid-row: 2 / span 1;
width: 0;
transition: width 250ms;
}
.docs-wrapper .sidebar.open {
width: min(300px, 100vw);
}
.docs-wrapper .content {
width: 100vw;
box-sizing: border-box;
border-top-left-radius: 0;
grid-column: 2 / span 1;
grid-row: 2 / span 1;
}
.docs-wrapper .content.open-sidebar {
border-top-left-radius: 8px;
}
.docs-wrapper .content-inner {
max-width: none;
}
}
@media screen and (max-width: 820px) {
.docs-wrapper .content .quick-links-grid,
.platform-grid {
grid-template-columns: 1fr;
grid-auto-rows: 1fr;
}
}
@media screen and (max-width: 492px) {
.docs-wrapper .content {
padding: 36px;
}
header .logo-link svg text {
display: none;
}
header .logo-link svg {
width: 39.876px;
}
.docs-wrapper header a.logo-link {
margin-right: 0;
}
}
@media screen and (max-width: 360px) {
.docs-wrapper .content {
padding: 24px;
}
}
/* Scrollbar styling 'cause it's fancy */
.docs-wrapper .sidebar::-webkit-scrollbar,
.docs-wrapper .content::-webkit-scrollbar,
.docs-wrapper .content pre code::-webkit-scrollbar {
.docs-wrapper .content pre code::-webkit-scrollbar,
.search .input-wrapper .matches::-webkit-scrollbar {
width: 12px;
height: 12px;
}
.docs-wrapper .sidebar::-webkit-scrollbar-track,
.docs-wrapper .content::-webkit-scrollbar-track,
.docs-wrapper .content pre code::-webkit-scrollbar-track {
.docs-wrapper .content pre code::-webkit-scrollbar-track,
.search .input-wrapper .matches::-webkit-scrollbar-track {
background: none;
}
.docs-wrapper .sidebar::-webkit-scrollbar-thumb,
.docs-wrapper .content::-webkit-scrollbar-thumb,
.docs-wrapper .content pre code::-webkit-scrollbar-thumb {
.docs-wrapper .content pre code::-webkit-scrollbar-thumb,
.search .input-wrapper .matches::-webkit-scrollbar-thumb {
background-color: var(--text-shade-0);
border-radius: 24px;
border: 3px solid var(--bg-shade-1);
border: 3px solid var(--bg-shade-0);
}
.docs-wrapper .content::-webkit-scrollbar-thumb {
border: 3px solid var(--bg-shade-1);
}
.docs-wrapper .content pre code::-webkit-scrollbar-thumb {
border: 3px solid var(--bg-shade-0);
.docs-wrapper .content pre code::-webkit-scrollbar-thumb,
.search .input-wrapper .matches::-webkit-scrollbar-thumb {
border: 3px solid var(--bg-shade-2);
}
.docs-wrapper .sidebar {
.docs-wrapper .sidebar,
.search .input-wrapper .matches {
scrollbar-width: thin;
scrollbar-color: var(--text-shade-0) var(--bg-shade-1);
}
@@ -163,59 +394,3 @@ header nav a:first-child {
scrollbar-width: thin;
scrollbar-color: var(--text-shade-0) var(--bg-shade-0);
}
.docs-wrapper .content .missing-in-locale-notice {
background: var(--bg-shade-2);
padding: 24px;
border-radius: 6px;
}
.input-wrapper {
display: flex;
margin-top: 8px;
}
.localization-form input {
appearance: none;
-webkit-appearance: none;
border: 0;
font-family: Poppins, Arial, Helvetica, sans-serif;
font-size: 1rem;
background-color: var(--bg-shade-3);
border: none;
border-radius: 4px 0 0 4px;
padding: 12px 24px;
color: var(--text-shade-1);
width: 20px;
flex: 2 10%;
}
.search input::placeholder {
color: var(--text-shade-0);
}
.search input:focus {
background-color: #fff;
color: var(--bg-shade-3);
transition: 200ms;
outline: none;
}
.search button {
appearance: none;
-webkit-appearance: none;
border: 0;
font-family: Poppins, Arial, Helvetica, sans-serif;
font-size: 1rem;
color: var(--text-shade-3);
padding: 12px 36px;
background: var(--accent-shade-0);
cursor: pointer;
}
@media screen and (max-width: 1080px) {
.docs-wrapper .sidebar .section {
margin-left: 60px;
width: 184px;
}
}

View File

Before

Width:  |  Height:  |  Size: 315 B

After

Width:  |  Height:  |  Size: 315 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1018 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 541 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 679.06 692"><defs><style>.d{stroke-width:2px;}.d,.e,.f,.g,.h,.i,.j,.k,.l{stroke:#673db6;}.d,.e,.f,.g,.h,.i,.j,.k,.l,.m{stroke-miterlimit:10;}.d,.g,.l{fill:none;}.n{fill:#e4d8fd;}.e{stroke-width:5.5px;}.e,.h,.i,.j{fill:#cab1fb;}.f{stroke-width:9px;}.f,.k,.o{fill:#9d6ff3;}.p{fill:#673db6;}.g{stroke-width:4px;}.h{stroke-width:5px;}.i{stroke-width:3px;}.j{stroke-width:6px;}.k{stroke-width:8px;}.l{stroke-width:2.5px;}.m{fill:#fff;stroke:#fff;stroke-width:44px;}</style></defs><g id="a"/><g id="b"><g id="c"><g><path class="m" d="M62.99,346c-22.64,0-40.99,18.35-40.99,40.99v242.03c0,22.64,18.35,40.99,40.99,40.99H616.07c22.64,0,40.99-18.35,40.99-40.99v-242.03c0-22.64-18.35-40.99-40.99-40.99,22.64,0,40.99-18.35,40.99-40.99V62.99c0-22.64-18.35-40.99-40.99-40.99H62.99c-22.64,0-40.99,18.35-40.99,40.99v242.03c0,22.64,18.35,40.99,40.99,40.99Z"/><rect class="p" x="21.99" y="22" width="635.06" height="324" rx="40.99" ry="40.99"/><rect class="n" x="31.6" y="31.24" width="615.84" height="285.52" rx="35.36" ry="35.36"/><rect class="k" x="120.12" y="45.65" width="438.79" height="256.7" rx="5.15" ry="5.15"/><rect class="p" x="21.99" y="346" width="635.06" height="324" rx="40.99" ry="40.99"/><rect class="n" x="31.61" y="355.47" width="615.84" height="303.39" rx="36.45" ry="36.45"/><rect class="f" x="162.85" y="377.21" width="353.36" height="259.91" rx="4.65" ry="4.65" transform="translate(679.06 1014.34) rotate(180)"/><circle class="h" cx="590.1" cy="454.78" r="14.56"/><circle class="h" cx="559.71" cy="485.84" r="14.56"/><circle class="i" cx="559.71" cy="412.09" r="11.66"/><g><path class="e" d="M100.88,555.63v18.05c0,3.56-2.89,6.45-6.45,6.45h-11.28c-3.56,0-6.45-2.89-6.45-6.45v-18.05h-17.73c-3.56,0-6.45-2.89-6.45-6.45v-11.28c0-3.56,2.89-6.45,6.45-6.45h17.73v-18.05c0-3.56,2.89-6.45,6.45-6.45h11.28c3.56,0,6.45,2.89,6.45,6.45v18.05h17.73c3.56,0,6.45,2.89,6.45,6.45v11.28c0,3.56-2.89,6.45-6.45,6.45h-17.73Z"/><line class="l" x1="88.79" y1="531.45" x2="88.79" y2="515.42"/><line class="l" x1="100.88" y1="543.54" x2="116.91" y2="543.54"/><line class="l" x1="88.79" y1="555.63" x2="88.79" y2="571.66"/><line class="l" x1="76.7" y1="543.54" x2="60.67" y2="543.54"/></g><g><circle class="j" cx="88.79" cy="432.53" r="25.94"/><circle class="d" cx="88.79" cy="432.53" r="43.67"/></g><circle class="i" cx="559.71" cy="589.16" r="11.66"/><circle class="h" cx="590.1" cy="518.57" r="14.56"/><circle class="h" cx="620.48" cy="487.51" r="14.56"/><circle class="i" cx="559.71" cy="628.26" r="11.66"/><circle class="i" cx="120.55" cy="628.26" r="11.66"/><rect class="o" x="120.12" y="326.34" width="438.79" height="19.76" rx="9.88" ry="9.88" transform="translate(679.04 672.45) rotate(-180)"/><circle class="g" cx="339.52" cy="336.22" r="5.64"/><circle class="p" cx="381.41" cy="336.22" r="2.39"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 478.83 478.83"><defs><style>.d{fill:#fff;}.e{fill:#9d6ff3;}</style></defs><g id="a"/><g id="b"><g id="c"><g><rect class="d" width="478.83" height="478.83" rx="123.95" ry="123.95"/><rect class="e" x="20.37" y="20.37" width="438.1" height="438.1" rx="111.02" ry="111.02"/><path class="d" d="M342.8,293l44.76,11.3c-9.38,36.76-26.26,64.79-50.64,84.09-24.38,19.3-54.18,28.95-89.4,28.95s-66.1-7.42-88.94-22.26c-22.84-14.84-40.22-36.34-52.14-64.48-11.92-28.15-17.88-58.37-17.88-90.67,0-35.22,6.73-65.94,20.19-92.17,13.46-26.22,32.61-46.14,57.45-59.75,24.84-13.61,52.18-20.42,82.02-20.42,33.83,0,62.29,8.62,85.36,25.84,23.07,17.23,39.14,41.45,48.22,72.67l-44.07,10.38c-7.84-24.61-19.23-42.53-34.14-53.75-14.92-11.23-33.68-16.84-56.29-16.84-25.99,0-47.72,6.23-65.17,18.69-17.46,12.46-29.73,29.18-36.8,50.18-7.08,21-10.61,42.65-10.61,64.94,0,28.76,4.19,53.87,12.57,75.33,8.38,21.46,21.42,37.49,39.1,48.1,17.69,10.61,36.83,15.92,57.45,15.92,25.07,0,46.29-7.23,63.68-21.69,17.38-14.46,29.14-35.91,35.3-64.37Z"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 587.02 330.39"><defs><style>.d{stroke-width:2px;}.d,.e,.f,.g,.h,.i,.j,.k,.l,.m,.n{stroke:#673db6;}.d,.e,.f,.g,.h,.i,.j,.k,.l,.m,.n,.o{stroke-miterlimit:10;}.d,.g,.l{fill:none;}.e{stroke-width:5.5px;}.e,.i,.j,.k,.m{fill:#cab1fb;}.f,.h{fill:#9d6ff3;}.f,.n{stroke-width:9px;}.g,.m{stroke-width:4px;}.h,.j{stroke-width:3px;}.i{stroke-width:5px;}.k{stroke-width:6px;}.l{stroke-width:2.5px;}.n{fill:#e4d8fd;}.o{fill:#fff;stroke:#fff;stroke-width:44px;}</style></defs><g id="a"/><g id="b"><g id="c"><g><path class="o" d="M31.65,67.79c-6.16,11.69-9.65,25.01-9.65,39.15v117.38c0,46.43,37.64,84.07,84.07,84.07H480.95c46.43,0,84.07-37.64,84.07-84.07V106.94c0-14-3.42-27.2-9.47-38.81,0,0-.94-22.55-17.86-35.94-18.95-14.99-43.19-8.24-43.19-8.24-4.41-.71-8.93-1.08-13.54-1.08H106.07c-4.59,0-9.09,.37-13.47,1.07h0c-1.92-.6-24.32-7.17-43.26,7.82-16.92,13.39-17.63,33.33-17.68,36.03h0Z"/><rect class="n" x="22.31" y="22.96" width="543.02" height="285.52" rx="84.07" ry="84.07"/><rect class="f" x="145.22" y="81.43" width="296.58" height="168.57" rx="3.43" ry="3.43"/><circle class="k" cx="509.39" cy="99.01" r="26.21"/><circle class="d" cx="509.39" cy="99.01" r="19.14"/><rect class="k" x="215.56" y="42.47" width="155.89" height="19.44" rx="9.72" ry="9.72"/><path class="e" d="M107.41,175.5v12.93c0,2.55-2.07,4.62-4.62,4.62h-8.09c-2.55,0-4.62-2.07-4.62-4.62v-12.93h-12.71c-2.55,0-4.62-2.07-4.62-4.62v-8.09c0-2.55,2.07-4.62,4.62-4.62h12.71v-12.93c0-2.55,2.07-4.62,4.62-4.62h8.09c2.55,0,4.62,2.07,4.62,4.62v12.93h12.71c2.55,0,4.62,2.07,4.62,4.62v8.09c0,2.55-2.07,4.62-4.62,4.62h-12.71Z"/><line class="l" x1="98.74" y1="158.17" x2="98.74" y2="146.69"/><line class="l" x1="107.41" y1="166.84" x2="118.89" y2="166.84"/><line class="l" x1="98.74" y1="175.5" x2="98.74" y2="186.99"/><line class="l" x1="90.08" y1="166.84" x2="78.59" y2="166.84"/><circle class="k" cx="77.94" cy="99.01" r="26.21"/><circle class="d" cx="77.94" cy="99.01" r="19.14"/><circle class="k" cx="293.51" cy="279.24" r="10"/><circle class="g" cx="293.82" cy="52.2" r="5.64"/><circle class="i" cx="493.74" cy="150.72" r="9.55"/><circle class="i" cx="472.63" cy="171.74" r="9.55"/><circle class="i" cx="493.74" cy="192.76" r="9.55"/><circle class="i" cx="514.38" cy="171.74" r="9.55"/><circle class="m" cx="429.25" cy="279.24" r="8.35"/><rect class="m" x="395.94" y="271.34" width="15.81" height="15.81" rx="1.52" ry="1.52"/><line class="g" x1="468.19" y1="279.24" x2="477.74" y2="279.24"/><circle class="j" cx="464.21" cy="215.04" r="7.12"/><circle class="j" cx="464.21" cy="237.48" r="7.12"/><line class="g" x1="119.45" y1="279.24" x2="109.9" y2="279.24"/><rect class="d" x="85.47" y="216.24" width="29.48" height="18.59" rx="4.23" ry="4.23"/><path class="h" d="M31.97,67.88c3.43-6.58,10.34-17.7,22.89-27.42,15.11-11.7,30.44-15.21,38.04-16.42-1.92-.6-24.32-7.17-43.26,7.81-16.92,13.39-17.63,33.33-17.68,36.03Z"/><path class="h" d="M555.67,68.32c-3.43-6.58-10.34-17.7-22.89-27.42-15.11-11.7-30.44-15.21-38.04-16.42,1.92-.6,24.32-7.17,43.26,7.81,16.92,13.39,17.63,33.33,17.68,36.03Z"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@@ -0,0 +1,7 @@
const openSidebarBtn = document.querySelector('#openSidebar');
const content = document.querySelector('div.content');
openSidebarBtn.addEventListener('click', function() {
const sidebar = document.querySelector('.sidebar');
sidebar.classList.toggle('open');
content.classList.toggle('open-sidebar');
});

View File

@@ -49,7 +49,7 @@ document.addEventListener('scroll', () => {
localeDropdownOptions.forEach((el) => el.classList.remove('active'));
localeDropdownToggle.classList.remove('active');
userWidget.classList.remove('active');
userWidget?.classList.remove('active');
});
// click outside of dropdown will close all dropdowns
@@ -59,17 +59,17 @@ document.addEventListener('click', (e) => {
let found = false;
if (
localeDropdown == targetElement ||
localeDropdown.contains(targetElement)
localeDropdown?.contains(targetElement)
) {
found = true;
userWidget.classList.remove('active');
userWidget?.classList.remove('active');
}
if (
userWidget == targetElement ||
userWidget.contains(targetElement) ||
userWidget?.contains(targetElement) ||
userWidgetToggle == targetElement ||
userWidgetToggle.contains(targetElement)
userWidgetToggle?.contains(targetElement)
) {
found = true;
localeDropdownToggle.classList.remove('active');
@@ -79,7 +79,7 @@ document.addEventListener('click', (e) => {
if (found) return;
// click outside of dropdowns
userWidget.classList.remove('active');
userWidget?.classList.remove('active');
localeDropdownToggle.classList.remove('active');
localeOptionsContainer.classList.remove('active');
});

View File

@@ -1,63 +1,73 @@
const { Router } = require('express');
const router = new Router();
const util = require('../util');
const fs = require('fs');
const path = require('path');
const { marked } = require('marked');
const errorList = require('../../docs/common/errorList.json');
router.get('/', async (request, response) => {
response.redirect('/docs/welcome');
});
router.get('/search', async (request, response) => {
const renderData = {
currentPage: request.params.slug
router.get('/welcome', async (request, response) => {
const renderData = {
currentPage: 'welcome',
};
response.render('docs/welcome', renderData);
});
router.get('/install', async (request, response) => {
const renderData = {
currentPage: 'install',
};
response.render('docs/install', renderData);
});
router.get('/search', async (request, response) => {
const renderData = {
errorList: JSON.stringify(errorList),
currentPage: 'search',
};
response.render('docs/search', renderData);
});
router.get('/:slug', async (request, response, next) => {
const renderData = {
currentPage: request.params.slug
router.get('/:page', async (request, response, next) => {
const renderData = {};
const locale = response.locals.localeString;
const pageName = request.params.page;
renderData.currentPage = pageName;
const { content, MDLocale } = util.getRawDocs(locale, '', pageName);
if (content) {
renderData.content = content;
} else {
return next();
}
renderData.missingInLocale = locale !== MDLocale;
response.render('docs/docs', renderData);
});
router.get('/:subpath/:page', async (request, response, next) => {
const locale = response.locals.localeString;
const pageName = request.params.page;
const subpath = request.params.subpath;
const renderData = {
currentPage: `${subpath}/${pageName}`
};
// Get the name of the page from the URL
const pageName = request.params.slug;
const { content, MDLocale } = util.getRawDocs(locale, subpath, pageName);
let markdownLocale = response.locals.localeString;
let missingInLocale = false;
// Check if the MD file exists in the user's locale, if not try en-US and show notice, or finally log error and show 404.
if (fs.existsSync(path.join('docs', markdownLocale, `${pageName}.md`))) {
null;
} else if (fs.existsSync(path.join('docs', 'en-US', `${pageName}.md`))) {
markdownLocale = 'en-US';
missingInLocale = true;
if (content) {
renderData.content = content;
} else {
next();
return;
return next();
}
renderData.missingInLocale = missingInLocale;
let content;
// Get the markdown file corresponding to the page.
content = fs.readFileSync(path.join('docs', markdownLocale, `${pageName}.md`), 'utf-8');
// Replace [yt-iframe](videoID) with the full <iframe />
content = content
.replace(/(?<!`)\[yt-iframe]\(/g, '<div class="aspectratio-fallback"><iframe src="https://www.youtube-nocookie.com/embed/')
.replace(/(?<=<iframe src="https:\/\/www\.youtube-nocookie\.com\/embed\/.{11})\)/g, '" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>');
// Convert the content into HTML
content = marked.parse(content);
renderData.content = content;
// A boolean to show the quick links grid or not.
let showQuickLinks = false;
if (pageName === 'welcome') {
showQuickLinks = true;
}
renderData.showQuickLinks = showQuickLinks;
renderData.missingInLocale = locale !== MDLocale;
response.render('docs/docs', renderData);
});

View File

@@ -1,12 +1,15 @@
const path = require('path');
const fs = require('fs-extra');
const got = require('got');
const crypto = require('crypto');
const Stripe = require('stripe');
const { marked } = require('marked');
const mailer = require('./mailer');
const database = require('./database');
const logger = require('./logger');
const config = require('../config.json');
const stripe = new Stripe(config.stripe.secret_key);
function fullUrl(request) {
@@ -25,6 +28,45 @@ function getLocale(language, region) {
return require(`${__dirname}/../locales/en_US.json`);
}
function getRawDocs(locale, subpath, pageName) {
const localePath = path.join(__dirname, '../docs', locale.replace('-', '_'), subpath, `${pageName}.md`);
const defaultPath = path.join(__dirname, '../docs', 'en_US', subpath, `${pageName}.md`);
if (fs.existsSync(localePath)) {
return {
content: parseDocs(fs.readFileSync(localePath, 'utf8')),
MDLocale: locale,
};
} else if (fs.existsSync(defaultPath)) {
return {
content: parseDocs(fs.readFileSync(defaultPath, 'utf8')),
MDLocale: 'en-US'
};
}
return {
content: null,
MDLocale: null
};
}
function parseDocs(rawDocs) {
if (!rawDocs) {
return null;
}
let markedContent = marked(rawDocs);
markedContent = markedContent.replaceAll(/\[yt-iframe\]\(.{11}\)/g, (match) => {
const videoIDRegex = /(?<=\[yt-iframe\]\().*(?=\))/g;
const videoID = match.match(videoIDRegex)[0];
return `<div class="aspectratio-fallback"><iframe src="https://www.youtube-nocookie.com/embed/${videoID}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>`;
});
const htmlContent = marked.parse(markedContent);
return htmlContent;
}
function apiGetRequest(path, headers) {
return got.get(`https://api.pretendo.cc${path}`, {
responseType: 'json',
@@ -342,6 +384,8 @@ async function handleStripeEvent(event) {
module.exports = {
fullUrl,
getLocale,
getRawDocs,
parseDocs,
apiGetRequest,
apiPostGetRequest,
apiDeleteGetRequest,

View File

@@ -27,42 +27,35 @@
</svg>
</a>
{{> header}}
<div class="header-wrapper">
<button id="openSidebar" class="nostyle">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg>
</button>
{{> header}}
</div>
{{> docs-sidebar}}
<div class="content">
<div class="content-inner">
<div class="tip red">
<strong>Note!</strong>
<br>
Pretendo Network is currently in closed beta! The servers are only accessible to testers. To become a tester,
upgrade your <a href="/account/upgrade" target="_blank">PNID here</a>
</div>
{{#if missingInLocale}}
<p class="missing-in-locale-notice">{{ localeHelper locale "docs.missingInLocale" }}</p>
{{/if}}
{{#if showQuickLinks}}
<h1>{{ localeHelper locale "docs" "quickLinks" "header" }}</h1>
<div class="quick-links-grid">
<a href="/docs/troubleshoot-errors">
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-download"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg> <div>
<p class="header">{{ localeHelper locale "docs.quickLinks.links[0]header" }}</p>
<p>{{ localeHelper locale "docs.quickLinks.links[0]caption" }}</p>
</div>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"><polyline points="9 18 15 12 9 6"></polyline></svg>
</a>
<a href="/docs/beans">
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg> <div>
<p class="header">{{ localeHelper locale "docs.quickLinks.links[1].header" }}</p>
<p>{{ localeHelper locale "docs.quickLinks.links[1].caption" }}</p>
</div>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"><polyline points="9 18 15 12 9 6"></polyline></svg>
</a>
</div>
{{/if}}
{{{ content }}}
</div>
</div>
</div>
<script src="/assets/js/docssidebarhandler.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/styles/default.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/highlight.min.js"></script>
<link rel="stylesheet" href="/assets/css/highlightjs.css">

View File

@@ -0,0 +1,72 @@
<link rel="stylesheet" href="/assets/css/documentation.css" />
<div class="docs-wrapper">
<a href="/" class="logo-link">
<svg xmlns="http://www.w3.org/2000/svg" width="120" height="39.876">
<g id="logo_type" data-name="logo type" transform="translate(-553 -467)">
<g id="logo" transform="translate(553 467)">
<rect id="XMLID_158_" width="39.876" height="39.876" fill="#9d6ff3" opacity="0" />
<g id="XMLID_6_" transform="translate(8.222 1.418)">
<path id="XMLID_15_"
d="M69.149,28.312c-1.051.553-.129,2.139.922,1.585a12.365,12.365,0,0,1,8.794-.571,10.829,10.829,0,0,1,6.342,4.166c.645,1,2.231.074,1.585-.922C83.308,27.169,74.7,25.436,69.149,28.312Z"
transform="translate(-64.246 -23.389)" fill="#9d6ff3" />
<path id="XMLID_14_"
d="M82.64,14.608A15.565,15.565,0,0,0,73.5,8.45a17.535,17.535,0,0,0-12.647.9c-1.051.553-.129,2.139.922,1.585,3.411-1.788,7.6-1.714,11.209-.719,3.1.848,6.268,2.544,8.038,5.309C81.681,16.543,83.267,15.622,82.64,14.608Z"
transform="translate(-57.476 -7.693)" fill="#9d6ff3" />
<path id="XMLID_9_"
d="M55.68,47.8a10.719,10.719,0,0,0-6.71,2.3H45.983A1.336,1.336,0,0,0,44.6,51.376V75.84a1.431,1.431,0,0,0,1.383,1.383h3.023a1.367,1.367,0,0,0,1.309-1.383V68.392A10.993,10.993,0,1,0,55.68,47.8Zm0,17.182a6.213,6.213,0,1,1,6.213-6.213A6.216,6.216,0,0,1,55.68,64.982Z"
transform="translate(-44.6 -40.406)" fill="#9d6ff3" />
</g>
</g>
<text id="Pretendo" transform="translate(593 492)" fill="#fff" font-size="17"
font-family="Poppins-Bold, Poppins" font-weight="700">
<tspan x="0" y="0">Pretendo</tspan>
</text>
</g>
</svg>
</a>
<div class="header-wrapper">
<button id="openSidebar" class="nostyle">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg>
</button>
{{> header}}
</div>
{{> docs-sidebar}}
<div class="content">
<div class="content-inner">
<h1>Installation</h1>
<p>
Please choose your platform below.
</p>
<div class="platform-grid">
<a href="/docs/install/wiiu">
<img src="/assets/images/docs/install/icons/wiiu-gamepad.svg" alt="Illustration of a Wii U Gamepad" />
<span>Wii U</span>
</a>
<a href="/docs/install/3ds">
<img src="/assets/images/docs/install/icons/2ds.svg" alt="Illustration of a New Nintendo 2DS XL" />
<span>3DS Family</span>
</a>
<a href="/docs/install/cemu">
<img src="/assets/images/docs/install/icons/cemu.svg" alt="Cemu logo" />
<span>Cemu</span>
</a>
<a href="/docs/install/citra">
<img src="/assets/images/docs/install/icons/citra.svg" alt="Citra logo" />
<span>Citra</span>
</a>
</div>
</div>
</div>
</div>
<script src="/assets/js/docssidebarhandler.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/styles/default.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/highlight.min.js"></script>
<link rel="stylesheet" href="/assets/css/highlightjs.css">
<script>hljs.highlightAll();</script>

View File

@@ -27,13 +27,89 @@
</svg>
</a>
{{> header}}
<div class="header-wrapper">
<button id="openSidebar" class="nostyle">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg>
</button>
{{> header}}
</div>
{{> docs-sidebar}}
<div class="content">
<div class="content search">
<div class="content-inner">
<div class="card"></div>
<div class="purple-card">
<h1>Got an error code?</h1>
<p>Type it in the box below to get information on your issue!</p>
<label for="errorCode">Error code</label>
<div class="input-wrapper">
<input id="errorCode" placeholder="ABC-012-3456" required />
<div class="matches">
</div>
</div>
</div>
</div>
</div>
</div>
<script src="/assets/js/docssidebarhandler.js"></script>
<script id="errorList" type="application/json">
{{{errorList}}}
</script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@6.6.2/dist/fuse.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/cleave.js@1.6.0/dist/cleave.min.js"></script>
<script>
// Get the error list from the script tag
let rawErrorList = JSON.parse(document.getElementById('errorList').innerHTML);
// Convert the error list to a single flat array
rawErrorList = Object.values(rawErrorList).flat();
// We remove the unknown characters (e.g. the X in JXT-598-2XXX), so fuse.js will be able to match the error codes
const errorList = rawErrorList.map(error => {
return error.replace(/X*$/g, '');
});
const fuse = new Fuse(errorList, {includeMatches: true, threshold: 0.4});
const cleave = new Cleave('input#errorCode', {
delimiter: '-',
blocks: [3, 3, 4],
uppercase: true
});
const matchesContainer = document.querySelector('.matches');
const input = document.querySelector('input#errorCode');
input.addEventListener('input', (e) => {
const errorCode = e.target.value;
const matches = fuse.search(errorCode);
if (!errorCode) {
matchesContainer.innerHTML = '';
input.classList.remove('has-matches');
return
}
matchesContainer.innerHTML = '';
input.classList.add('has-matches');
if (matches.length > 0) {
matches.forEach(match => {
const errorCode = match.item.padEnd(12, 'X');
const matchLink = document.createElement('a');
matchLink.innerText = errorCode;
matchLink.href = `/docs/errors/${errorCode}`;
matchesContainer.appendChild(matchLink);
});
} else {
const noMatch = document.createElement('p');
noMatch.innerText = 'No matches found';
matchesContainer.appendChild(noMatch);
}
});
</script>

View File

@@ -0,0 +1,100 @@
<link rel="stylesheet" href="/assets/css/documentation.css" />
<div class="docs-wrapper">
<a href="/" class="logo-link">
<svg xmlns="http://www.w3.org/2000/svg" width="120" height="39.876">
<g id="logo_type" data-name="logo type" transform="translate(-553 -467)">
<g id="logo" transform="translate(553 467)">
<rect id="XMLID_158_" width="39.876" height="39.876" fill="#9d6ff3" opacity="0" />
<g id="XMLID_6_" transform="translate(8.222 1.418)">
<path id="XMLID_15_"
d="M69.149,28.312c-1.051.553-.129,2.139.922,1.585a12.365,12.365,0,0,1,8.794-.571,10.829,10.829,0,0,1,6.342,4.166c.645,1,2.231.074,1.585-.922C83.308,27.169,74.7,25.436,69.149,28.312Z"
transform="translate(-64.246 -23.389)" fill="#9d6ff3" />
<path id="XMLID_14_"
d="M82.64,14.608A15.565,15.565,0,0,0,73.5,8.45a17.535,17.535,0,0,0-12.647.9c-1.051.553-.129,2.139.922,1.585,3.411-1.788,7.6-1.714,11.209-.719,3.1.848,6.268,2.544,8.038,5.309C81.681,16.543,83.267,15.622,82.64,14.608Z"
transform="translate(-57.476 -7.693)" fill="#9d6ff3" />
<path id="XMLID_9_"
d="M55.68,47.8a10.719,10.719,0,0,0-6.71,2.3H45.983A1.336,1.336,0,0,0,44.6,51.376V75.84a1.431,1.431,0,0,0,1.383,1.383h3.023a1.367,1.367,0,0,0,1.309-1.383V68.392A10.993,10.993,0,1,0,55.68,47.8Zm0,17.182a6.213,6.213,0,1,1,6.213-6.213A6.216,6.216,0,0,1,55.68,64.982Z"
transform="translate(-44.6 -40.406)" fill="#9d6ff3" />
</g>
</g>
<text id="Pretendo" transform="translate(593 492)" fill="#fff" font-size="17"
font-family="Poppins-Bold, Poppins" font-weight="700">
<tspan x="0" y="0">Pretendo</tspan>
</text>
</g>
</svg>
</a>
<div class="header-wrapper">
<button id="openSidebar" class="nostyle">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
class="feather feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</button>
{{> header}}
</div>
{{> docs-sidebar}}
<div class="content">
<div class="content-inner">
<h1>{{ localeHelper locale "docs" "quickLinks" "header" }}</h1>
<div class="quick-links-grid">
<a href="/docs/install">
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
class="feather feather-download">
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
<polyline points="7 10 12 15 17 10"></polyline>
<line x1="12" y1="15" x2="12" y2="3"></line>
</svg>
<div>
<p class="header">{{ localeHelper locale "docs" "quickLinks" "links" 0 "header" }}</p>
<p>{{ localeHelper locale "docs" "quickLinks" "links" 0 "caption" }}</p>
</div>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
class="feather feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</a>
<a href="/docs/search">
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
class="feather feather-search">
<circle cx="11" cy="11" r="8"></circle>
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
</svg>
<div>
<p class="header">{{ localeHelper locale "docs" "quickLinks" "links" 1 "header" }}</p>
<p>{{ localeHelper locale "docs" "quickLinks" "links" 1 "caption" }}</p>
</div>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
class="feather feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</a>
</div>
<h1>Welcome</h1>
<p>Welcome to the official documentation for Pretendo Network. Here you'll be able to find installation instructions, error
codes, and more.</p>
<p>To begin, check out the quick links or take a look at the sidebar</p>
</div>
</div>
</div>
<script src="/assets/js/docssidebarhandler.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/styles/default.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/highlight.min.js"></script>
<link rel="stylesheet" href="/assets/css/highlightjs.css">
<script>hljs.highlightAll();</script>

View File

@@ -2,40 +2,26 @@
<div class="section">
<h5>Getting started</h5>
<a href="/docs/welcome">Welcome</a>
<a href="/docs/installing-juxt" >Installing Juxt</a>
<a href="/docs/install">Install Pretendo</a>
<a href="/docs/search">Search</a>
</div>
<div class="section">
<h5>Error codes - Juxt</h5>
<a href="/docs/JXT-598-0000">JXT-598-0000</a>
<a href="/docs/JXT-598-0001">JXT-598-0001</a>
<a href="/docs/JXT-598-0002">JXT-598-0002</a>
<a href="/docs/JXT-598-0003">JXT-598-0003</a>
<a href="/docs/JXT-598-0009">JXT-598-0009</a>
<a href="/docs/JXT-598-0010">JXT-598-0010</a>
<a href="/docs/JXT-598-0011">JXT-598-0011</a>
<a href="/docs/JXT-598-0015">JXT-598-0015</a>
<a href="/docs/JXT-598-0020">JXT-598-0020</a>
<a href="/docs/JXT-598-1XXX">JXT-598-1XXX</a>
<a href="/docs/JXT-598-2XXX">JXT-598-2XXX</a>
<a href="/docs/JXT-598-3XXX">JXT-598-3XXX</a>
<a href="/docs/JXT-598-4XXX">JXT-598-4XXX</a>
<a href="/docs/JXT-598-5XXX">JXT-598-5XXX</a>
<h5>Install</h5>
<a href="/docs/install/wiiu">Wii U</a>
<a href="/docs/install/3ds">3DS</a>
<a href="/docs/install/cemu">Cemu</a>
<a href="/docs/install/citra">Citra</a>
<a href="/docs/install/juxt">Juxt</a>
</div>
<div class="section">
<h5>Error codes - Beans</h5>
<a href="/docs/Black Beans">Black Beans</a>
<a href="/docs/black-eyed-peas">Black-Eyed Peas</a>
<a href="/docs/Cannellini Beans">Cannellini Beans</a>
<a href="/docs/Chickpeas (Garbanzo Beans)">Chickpeas (Garbanzo Beans)</a>
<a href="/docs/Great Northern Beans">Great Northern Beans</a>
<a href="/docs/Kidney Beans">Kidney Beans</a>
<a href="/docs/Lima Beans">Lima Beans</a>
<a href="/docs/Pinto Beans">Pinto Beans</a>
<a href="/docs/Fava Beans">Fava Beans</a>
<a href="/docs/Navy Beans">Navy Beans</a>
<h5>Error codes - Juxt</h5>
<a href="/docs/en_US/errors/JXT-598-0009">JXT-598-0009</a>
<a href="/docs/en_US/errors/JXT-598-0010">JXT-598-0010</a>
<a href="/docs/en_US/errors/JXT-598-0011">JXT-598-0011</a>
<a href="/docs/en_US/errors/JXT-598-0015">JXT-598-0015</a>
<a href="/docs/en_US/errors/JXT-598-0020">JXT-598-0020</a>
</div>
</div>
@@ -46,5 +32,4 @@
}
selectSidebarElement(document.querySelector("div.sidebar a[href='/docs/{{currentPage}}']"));
</script>