diff --git a/bun.lock b/bun.lock
index ff410d7..4256ecc 100644
--- a/bun.lock
+++ b/bun.lock
@@ -68,6 +68,7 @@
"recharts": "^2.15.2",
"remeda": "^2.21.2",
"server-only": "^0.0.1",
+ "slugify": "^1.6.6",
"sonner": "^2.0.3",
"superjson": "^2.2.1",
"tailwind-merge": "^3.1.0",
@@ -1033,6 +1034,8 @@
"simple-swizzle": ["simple-swizzle@0.2.2", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg=="],
+ "slugify": ["slugify@1.6.6", "", {}, "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw=="],
+
"sonner": ["sonner@2.0.3", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA=="],
"source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="],
diff --git a/content/docs/getting-started/meta.json b/content/docs/getting-started/meta.json
index 0b55923..992fc96 100644
--- a/content/docs/getting-started/meta.json
+++ b/content/docs/getting-started/meta.json
@@ -1,5 +1,5 @@
{
"title": "Getting Started",
- "pages": ["installation", "multiplayer-balance-changes", "faq"],
+ "pages": ["installation", "faq"],
"defaultOpen": true
}
diff --git a/content/docs/meta.json b/content/docs/meta.json
index 849073e..c3588d8 100644
--- a/content/docs/meta.json
+++ b/content/docs/meta.json
@@ -1,5 +1,10 @@
{
- "title": "Advanced",
- "pages": ["index", "getting-started", "advanced"],
+ "pages": [
+ "index",
+ "getting-started",
+ "rulesets",
+ "ranked-matchmaking",
+ "advanced"
+ ],
"defaultOpen": true
}
diff --git a/content/docs/rulesets/standard.mdx b/content/docs/rulesets/standard.mdx
new file mode 100644
index 0000000..df4b3fb
--- /dev/null
+++ b/content/docs/rulesets/standard.mdx
@@ -0,0 +1,328 @@
+---
+title: Standard
+description: The standard ruleset includes Multiplayer cards and changes to the base game to fit the Multiplayer meta.
+---
+
+
+## Jokers
+
+### Multiplayer Jokers
+
+There are **10 added multiplayer jokers**. All jokers added in the multiplayer mod are designed
+to **interact with your opponent** and will not show up in single player games.
+
+
+
+
+
+
Joker
+
Description
+
Notes
+
+
+
+
+
+ #### Defensive Joker [toc]
+
+
+
+ +125 Chips for every life less than your Nemesis.
+
+
+ There is a bug where this joker might appear in single player mode. To fix this, disable the multiplayer
+ mod when playing single player.
+
+
+
+
+ #### Skip-Off [toc]
+
+
+
+ +1 Hands and +1 Discards per additional blind skipped compared to your
+ Nemesis.
+
+
+
+
+
+ #### Let's Go Gambling [toc]
+
+
+
+
+ 1 in 4 chance for X4 Mult and $10
+ 1 in 8 chance to give your Nemesis $5
+
+
+
+ The effect applies on each hand played.
+
+
+
+
+ #### Speedrun [toc]
+
+
+
+ If you reach a PvP Blind before your Nemesis, create a
+ random Spectral card. Must have room.
+
+
+ There is a bug where the spectral card might not be created, but is is very rare. We're working on a
+ fix.
+
+
+
+
+ #### Conjoined Joker [toc]
+
+
+
+ While in a PvP Blind, gain
+ X1 Mult for every Hand
+ your Nemesis has left
+ (Max X5 Mult)
+
+
+
+
+
+ #### Penny Pincher [toc]
+
+
+
+ At start of shop, gain
+ $1 for every $3 your Nemesis spent last shop
+
+
+
+
+
+ #### Taxes [toc]
+
+
+
+ This Joker gains +5 Mult each time your Nemesis sells a card
+
+
+
+
+
+ #### Magnet [toc]
+
+
+
+ After 2 rounds, sell this card to Copy your Nemesis' highest sell cost Joker. Does not
+ copy Joker state.
+
+
+ If your Nemesis has multiple Jokers that have the highest sell cost, a random one will be copied.
+
+
+
+
+ #### Pizza [toc]
+
+
+
+
+ +6 Discards for all players
+ -1 Discard when any player selects a blind
+ Eaten when your Nemesis skips
+
+
+
+
+
+
+ #### Pacifist [toc]
+
+
+
+
+ X10 Mult while not in a PvP Blind
+
+
+
+
+
+
+
+
+
+ These jokers can be removed by unchecking the **"Enable Multiplayer Cards"** option in the lobby options.
+
+
+### Disabled Jokers
+The following jokers are **unavailable** in multiplayer due to their interaction with boss blinds:
+
+
+
+
+
+
Joker
+
Description
+
+
+
+
+
+ #### Chicot [toc]
+
+
+
+ Disables effect of every Boss Blind
+
+
+
+
+ #### Matador [toc]
+
+
+
+ Earn $8 if played hand triggers the Boss Blind ability
+
+
+
+
+ #### Mr. Bones [toc]
+
+
+
+ Prevents Death if chips scored are at least 25% of required chips.
+ Self destructs
+
+
+
+
+ #### Luchador [toc]
+
+
+
+ Sell this card to disable the current Boss Blind
+
+
+
+
+
+
+
+### Modified Jokers
+
+These jokers are modified versions of the original jokers.
+
+
+
+
+
+
Joker
+
Description
+
+
+
+
+
+ #### Hanging Chad [toc]
+
+
+
+ Retrigger first and second played cards used in
+ scoring 1 additional time
+
+
+
+
+
+
+## Planet cards
+
+
+
+
+
+
Card
+
Description
+
Notes
+
+
+
+
+
+ ### Asteroid [toc]
+
+
+
+ Removes one level from your Nemesis' highest level poker hand.
+
+
+
+
+
+
+
+## Tarot Cards
+
+
+
+
+
+
Card
+
Description
+
Notes
+
+
+
+
+
+ ### Justice [toc]
+
+
+
+ This card is **not available** in the standard ruleset.
+
+
+ Glass cards can only be found in
+ - Standard packs
+ - Spectral cards that spawn cards (Grim, Incantation, and Familiar)
+
+
+
+
+
+
+
+
+## Enhancements
+
+
+
+
+
+
Card
+
Description
+
Notes
+
+
+
+
+
+ ### Glass Card [toc]
+
+
+
+
+ X1.5 Mult
+ 1 in 4 chance to destroy card after all scoring is finished
+
+
+
+ Glass cards can only be found in
+ - Standard packs
+ - Spectral cards that spawn cards (Grim, Incantation, and Familiar)
+
+
+
+
+
diff --git a/package.json b/package.json
index ec76dce..7feed8a 100644
--- a/package.json
+++ b/package.json
@@ -83,6 +83,7 @@
"recharts": "^2.15.2",
"remeda": "^2.21.2",
"server-only": "^0.0.1",
+ "slugify": "^1.6.6",
"sonner": "^2.0.3",
"superjson": "^2.2.1",
"tailwind-merge": "^3.1.0",
diff --git a/public/cards/c_asteroid.png b/public/cards/c_asteroid.png
new file mode 100644
index 0000000..9f09a28
Binary files /dev/null and b/public/cards/c_asteroid.png differ
diff --git a/public/cards/c_asteroid_ru.png b/public/cards/c_asteroid_ru.png
new file mode 100644
index 0000000..a7c039c
Binary files /dev/null and b/public/cards/c_asteroid_ru.png differ
diff --git a/public/cards/e_glass.png b/public/cards/e_glass.png
new file mode 100644
index 0000000..4d48013
Binary files /dev/null and b/public/cards/e_glass.png differ
diff --git a/public/cards/j_chicot.png b/public/cards/j_chicot.png
new file mode 100644
index 0000000..c15bdba
Binary files /dev/null and b/public/cards/j_chicot.png differ
diff --git a/public/cards/j_conjoined_joker.png b/public/cards/j_conjoined_joker.png
new file mode 100644
index 0000000..7682a67
Binary files /dev/null and b/public/cards/j_conjoined_joker.png differ
diff --git a/public/cards/j_copycat.png b/public/cards/j_copycat.png
new file mode 100644
index 0000000..a0c2afa
Binary files /dev/null and b/public/cards/j_copycat.png differ
diff --git a/public/cards/j_defensive_joker.png b/public/cards/j_defensive_joker.png
new file mode 100644
index 0000000..333cb15
Binary files /dev/null and b/public/cards/j_defensive_joker.png differ
diff --git a/public/cards/j_hanging_chad.png b/public/cards/j_hanging_chad.png
new file mode 100644
index 0000000..f3cf504
Binary files /dev/null and b/public/cards/j_hanging_chad.png differ
diff --git a/public/cards/j_lets_go_gambling.png b/public/cards/j_lets_go_gambling.png
new file mode 100644
index 0000000..d2ef89d
Binary files /dev/null and b/public/cards/j_lets_go_gambling.png differ
diff --git a/public/cards/j_luchador.png b/public/cards/j_luchador.png
new file mode 100644
index 0000000..a0dc342
Binary files /dev/null and b/public/cards/j_luchador.png differ
diff --git a/public/cards/j_magnet.png b/public/cards/j_magnet.png
new file mode 100644
index 0000000..229bad3
Binary files /dev/null and b/public/cards/j_magnet.png differ
diff --git a/public/cards/j_matador.png b/public/cards/j_matador.png
new file mode 100644
index 0000000..88470b6
Binary files /dev/null and b/public/cards/j_matador.png differ
diff --git a/public/cards/j_mr_bones.png b/public/cards/j_mr_bones.png
new file mode 100644
index 0000000..29f87bd
Binary files /dev/null and b/public/cards/j_mr_bones.png differ
diff --git a/public/cards/j_pacifist.png b/public/cards/j_pacifist.png
new file mode 100644
index 0000000..8b4e43f
Binary files /dev/null and b/public/cards/j_pacifist.png differ
diff --git a/public/cards/j_penny_pincher.png b/public/cards/j_penny_pincher.png
new file mode 100644
index 0000000..3b535d7
Binary files /dev/null and b/public/cards/j_penny_pincher.png differ
diff --git a/public/cards/j_pizza.png b/public/cards/j_pizza.png
new file mode 100644
index 0000000..e018918
Binary files /dev/null and b/public/cards/j_pizza.png differ
diff --git a/public/cards/j_skip_off.png b/public/cards/j_skip_off.png
new file mode 100644
index 0000000..1d48ab5
Binary files /dev/null and b/public/cards/j_skip_off.png differ
diff --git a/public/cards/j_speedrun.png b/public/cards/j_speedrun.png
new file mode 100644
index 0000000..58941e9
Binary files /dev/null and b/public/cards/j_speedrun.png differ
diff --git a/public/cards/j_taxes.png b/public/cards/j_taxes.png
new file mode 100644
index 0000000..c007789
Binary files /dev/null and b/public/cards/j_taxes.png differ
diff --git a/public/cards/modicon.png b/public/cards/modicon.png
new file mode 100644
index 0000000..b2b8511
Binary files /dev/null and b/public/cards/modicon.png differ
diff --git a/public/cards/player_blind_row.png b/public/cards/player_blind_row.png
new file mode 100644
index 0000000..a5e1432
Binary files /dev/null and b/public/cards/player_blind_row.png differ
diff --git a/public/cards/sticker_balanced.png b/public/cards/sticker_balanced.png
new file mode 100644
index 0000000..89586ea
Binary files /dev/null and b/public/cards/sticker_balanced.png differ
diff --git a/public/cards/sticker_nemesis.png b/public/cards/sticker_nemesis.png
new file mode 100644
index 0000000..17523a3
Binary files /dev/null and b/public/cards/sticker_nemesis.png differ
diff --git a/public/cards/t_justice.png b/public/cards/t_justice.png
new file mode 100644
index 0000000..2cd6ec8
Binary files /dev/null and b/public/cards/t_justice.png differ
diff --git a/src/app/_components/chance.tsx b/src/app/_components/chance.tsx
new file mode 100644
index 0000000..ee27002
--- /dev/null
+++ b/src/app/_components/chance.tsx
@@ -0,0 +1,7 @@
+import { cn } from '@/lib/utils'
+
+export function Chance({ className, ...props }: React.ComponentProps<'span'>) {
+ return (
+
+ )
+}
diff --git a/src/app/_components/chips.tsx b/src/app/_components/chips.tsx
new file mode 100644
index 0000000..ae7b76c
--- /dev/null
+++ b/src/app/_components/chips.tsx
@@ -0,0 +1,9 @@
+'use client'
+
+import { cn } from '@/lib/utils'
+
+export function Chips({ className, ...props }: React.ComponentProps<'span'>) {
+ return (
+
+ )
+}
diff --git a/src/app/_components/hands.tsx b/src/app/_components/hands.tsx
new file mode 100644
index 0000000..dd45f9c
--- /dev/null
+++ b/src/app/_components/hands.tsx
@@ -0,0 +1,9 @@
+'use client'
+
+import { cn } from '@/lib/utils'
+
+export function Hands({ className, ...props }: React.ComponentProps<'span'>) {
+ return (
+
+ )
+}
diff --git a/src/app/_components/joker-card.tsx b/src/app/_components/joker-card.tsx
new file mode 100644
index 0000000..16c4796
--- /dev/null
+++ b/src/app/_components/joker-card.tsx
@@ -0,0 +1,27 @@
+'use client'
+
+import type { ElementType } from 'react'
+import slugify from 'slugify'
+
+type JokerCardProps = {
+ name: string
+ img: string
+ h?: number
+}
+
+export function JokerCard({ name, img, h = 3 }: JokerCardProps) {
+ const Heading = `h${h}` as ElementType
+ return (
+