From abd7ac6243f5b7d18e58ee9e6f157b036cf02646 Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Mon, 4 Mar 2024 21:34:37 +0200 Subject: [PATCH] SendouQ how to play page Closes #1556 --- app/features/sendouq/q.css | 19 +++ app/features/sendouq/routes/q.info.tsx | 211 ++++++++++++++++++++++--- app/features/sendouq/routes/q.tsx | 15 +- app/utils/urls.ts | 1 + content/articles/sendouq-faq.md | 2 + locales/en/q.json | 2 + vite.config.ts | 2 +- 7 files changed, 227 insertions(+), 25 deletions(-) diff --git a/app/features/sendouq/q.css b/app/features/sendouq/q.css index 6019ff936..8f028bd68 100644 --- a/app/features/sendouq/q.css +++ b/app/features/sendouq/q.css @@ -544,3 +544,22 @@ .q-info__container p { margin-block: var(--s-2); } + +.q-info__table-of-contents ul { + padding-left: 0; +} + +.q-info__table-of-contents li { + list-style: none; + font-size: var(--fonts-sm); + font-weight: var(--semi-bold); +} + +.q-info__table-of-contents li:has(button) { + margin-block-start: var(--s-2); +} + +.q-info__table-of-contents li:not(:has(button)) { + margin-inline-start: var(--s-2); + font-size: var(--fonts-xs); +} diff --git a/app/features/sendouq/routes/q.info.tsx b/app/features/sendouq/routes/q.info.tsx index 19d190ef5..4e6860d40 100644 --- a/app/features/sendouq/routes/q.info.tsx +++ b/app/features/sendouq/routes/q.info.tsx @@ -13,10 +13,12 @@ import "../q.css"; import { Image } from "~/components/Image"; import { MATCHES_COUNT_NEEDED_FOR_LEADERBOARD } from "~/features/leaderboards/leaderboards-constants"; import { USER_LEADERBOARD_MIN_ENTRIES_FOR_LEVIATHAN } from "~/features/mmr/mmr-constants"; +import { Button } from "~/components/Button"; export default function SendouQInfoPage() { return (
+ @@ -28,10 +30,115 @@ export default function SendouQInfoPage() { ); } +function TableOfContents() { + const handleTitleClick = (id: string) => () => { + const element = document.getElementById(id); + if (!element) return; + + const pos = element.getBoundingClientRect().top; + const headerOffset = 45; + window.scrollTo({ + top: pos + window.scrollY - headerOffset, + behavior: "smooth", + }); + }; + + return ( + + ); +} + function GeneralInfo() { return (
-

General info

+

General info

SendouQ is a community made matchmaking system. It features leaderboards and a season system. Everyone is free to join no matter if they are new @@ -47,7 +154,7 @@ function GeneralInfo() { function BeforeJoining() { return (

-

Before joining

+

Before joining

Make a sendou.ink account

Click “log in” on the front page (mobile) or top right (desktop). Agree @@ -64,7 +171,7 @@ function BeforeJoining() { way. Prefer means you like this mode over neutral modes. These choices later affect what modes you will be playing. In SendouQ you might play a set with SZ/TC/RM/CB or only TC or TC/RM or any other combination. It - all depends on what people have chosen. + all depends on what players in that match have chosen.

For each mode that you didn't avoid also choose 7 maps. Again the @@ -96,7 +203,7 @@ function BeforeJoining() { accessibility reasons. Toggling this option means screen will be banned in all sets you play. But also note that groups challenging your group will see that screen would be banned in your set so it's not - adviced to select this option unnecessarily. + advised to select this option unnecessarily.

Bio

@@ -124,7 +231,7 @@ function BeforeJoining() { function JoiningTheQueue() { return (

-

Joining the queue

+

Joining the queue

Joining solo

Click “Join solo” on the SendouQ front page.

Joining with 1-3 mates

@@ -141,12 +248,12 @@ function JoiningTheQueue() { function FindingAGroup() { return (

-

Finding a group

+

Finding a group

If you didn't join with a full group of 4 next you will join a screen where the aim is to get a full group. You do this by getting - other people join your group or morphing with other groups. Click the + other people join your group or merging with other groups. Click the “Invite” button for any group you would like to group up with considering the weapons, skill level and other factors. There is no downside in sending more invites so it's not advised to only send @@ -182,6 +289,13 @@ function FindingAGroup() { marked inactive and hidden. Click the prompt that you are still looking to be visible again.

+

Group managers

+

+ Only the group owner or manager can send invites. When groups merge then + the previous owner and manager will have it in the new group as well. + Group owner can give the manager role by clicking the star icon and + selecting "Give manager". +

); } @@ -189,10 +303,21 @@ function FindingAGroup() { function FindingAnOpponent() { return (
-

TODO

-

Finding an opponent

+

Finding an opponent

+

+ Like with finding a group you will get presented a list of groups you + can challenge. Typically choosing a group with similar skill level might + result in the best match but you are free to challenge group of any + level (and they are free to not accept). You will also see the modes the + set would have before deciding on challenging/accepting. +

Rechallenging

-

TODO

+

+ Sometimes it can take a while for a group to accept your challenge. If + you don't have a strong preference about modes you might consider + "Rechallenging" the team on their mode preferences. In some + cases it might help you get into a match faster. +

); } @@ -200,16 +325,58 @@ function FindingAnOpponent() { function PlayingTheMatch() { return (
-

TODO, info about hosting & how to join a room in S3

-

Playing the match

+

Playing the match

+

+ When you have a match it's time to join the room. The person who + first volunteers in the match chat will host the room. Use the pool and + password provided. As host remember to use the Y button (letter icon) to + send invites periodically as if people joined the pool after you by + default they don't see the room. As a player joining the room the + room will appear in the "letter tab". Press X to refresh the + view and if you are not seeing it then ask the host to send you an + invite. +

+

+ Then just play matches till either team has reached 4 wins and report + the score. Your SP will be adjusted after both teams report the score. +

Canceling the match

-

TODO

+

+ Match can be canceled if both teams agree to (read the rules). Click the + cancel button to request canceling the match. If the other team agrees + then they can also click it to confirm and lock the match. +

+

Enemy not reporting

+

+ As the first measure contact the opponent and politely remind them to. + If that is not working then come to the helpdesk channel on our Discord + to get help from admin. +

Private note

-

TODO

+

+ After the set you can leave private notes about your teammates. If you + had good experience with someone why not leave a positive reminder so + you remember to group up with them in future as well? Likewise if you + did not have such a good time playing with someone you can leave a + negative note. The sentiment affects their sorting in the group up + phase. Clicking their avatar in the group up phase will show what you + wrote about them. +

Joining again with the same group

-

TODO

+

+ As a group owner you can use the "Look again with same group" + to instantly join the queue with the same roster. Note that this button + should only be used if you checked with all your mates that they can + still play another set. +

Stats

-

TODO

+

+ While reporting the score you can also report weapons. You can view + statistics on your user profile. You can for example see your win rate + with different weapons on each stage by clicking its row on the + "Stages" tab or view your winrates with different mates on the + "Teammates" tab. +

); } @@ -217,7 +384,7 @@ function PlayingTheMatch() { function OtherTopics() { return (
-

Other topics

+

Other topics

Ranking algorithm

The ranking algorithm used is called OpenSkill. Most common question @@ -235,6 +402,10 @@ function OtherTopics() { {" "} on a longer explanation.

+

+ Only the whole set's result matters so points gained/lost are the + same whether the set ends 4-3 or 4-0. +

Ranking tiers

@@ -255,8 +426,8 @@ function OtherTopics() { There is also a tier recalculation in the first week of the season that can change your ranking tier significantly. When there are less than{" "} {USER_LEADERBOARD_MIN_ENTRIES_FOR_LEVIATHAN} entries on the leaderboard - tiers are calculated based everyone's powers. After crossing that - threshold tiers switch being calculated based on players on the + tiers are calculated based on everyone's powers. After crossing + that threshold tiers switch being calculated based on players on the leaderboard only.

Rank history

@@ -287,7 +458,7 @@ function OtherTopics() { on sendou.ink. If on the registration page it has the “Ranked” badge then you know it is a ranked tournament. In ranked tournaments each set is counted as a SendouQ set. Ranking changes are applied when the - tournament ends and is finalised by the TO. + tournament ends and is finalized by the TO.

If you sub around then note that only the people who played in the set diff --git a/app/features/sendouq/routes/q.tsx b/app/features/sendouq/routes/q.tsx index c8457f1af..b16aaf21c 100644 --- a/app/features/sendouq/routes/q.tsx +++ b/app/features/sendouq/routes/q.tsx @@ -44,6 +44,7 @@ import { assertUnreachable } from "~/utils/types"; import { LEADERBOARDS_PAGE, LOG_IN_URL, + SENDOUQ_INFO_PAGE, SENDOUQ_LOOKING_PAGE, SENDOUQ_LOOKING_PREVIEW_PAGE, SENDOUQ_PAGE, @@ -220,7 +221,6 @@ export default function QPage() { ) : null} - {data.season ? ( <> {data.groupInvitedTo === null ? ( @@ -285,6 +285,7 @@ export default function QPage() { )} ) : null} +

); } @@ -460,9 +461,9 @@ function QLinks() {
{user ? ( ) : null} +
); } diff --git a/app/utils/urls.ts b/app/utils/urls.ts index da17afb19..00d9b3487 100644 --- a/app/utils/urls.ts +++ b/app/utils/urls.ts @@ -100,6 +100,7 @@ export const LEADERBOARDS_PAGE = "/leaderboards"; export const LINKS_PAGE = "/links"; export const SENDOUQ_PAGE = "/q"; export const SENDOUQ_RULES_PAGE = "/q/rules"; +export const SENDOUQ_INFO_PAGE = "/q/info"; export const SENDOUQ_SETTINGS_PAGE = "/q/settings"; export const SENDOUQ_PREPARING_PAGE = "/q/preparing"; export const SENDOUQ_LOOKING_PAGE = "/q/looking"; diff --git a/content/articles/sendouq-faq.md b/content/articles/sendouq-faq.md index 358632e6d..121691311 100644 --- a/content/articles/sendouq-faq.md +++ b/content/articles/sendouq-faq.md @@ -4,6 +4,8 @@ date: 2023-09-28 author: Joy --- +Update 5th February 2024: Check the new [SendouQ info page](https://sendou.ink/q/info). + ## What is SendouQ? SendouQ is a third-party matchmaking service for Splatoon 3, offering a more competitive alternative to the in-game matchmaking. Matches are conducted in a first-to-4 format, with maps and modes selected by the players. The service is free and open to all players. diff --git a/locales/en/q.json b/locales/en/q.json index e8060aba5..befa4bb2d 100644 --- a/locales/en/q.json +++ b/locales/en/q.json @@ -30,6 +30,8 @@ "front.upcomingSeason.date": "Join Season {{nth}} starting {{date}}", "front.nav.rules.title": "Rules", "front.nav.rules.description": "Read these before playing", + "front.nav.info.title": "Info", + "front.nav.info.description": "What is SendouQ and how to use it", "front.nav.settings.title": "Settings", "front.nav.settings.description": "Map preferences, weapon pool, voice chat & sounds", "front.nav.leaderboards.title": "Leaderboards", diff --git a/vite.config.ts b/vite.config.ts index cc8eb0068..3fe44fbc4 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -209,7 +209,7 @@ export default defineConfig({ route("/play", "features/sendouq/routes/play.tsx"); route("/q", "features/sendouq/routes/q.tsx"); route("/q/rules", "features/sendouq/routes/q.rules.tsx"); - // route("/q/info", "features/sendouq/routes/q.info.tsx"); + route("/q/info", "features/sendouq/routes/q.info.tsx"); route("/q/looking", "features/sendouq/routes/q.looking.tsx"); route("/q/preparing", "features/sendouq/routes/q.preparing.tsx"); route("/q/match/:id", "features/sendouq/routes/q.match.$id.tsx");