Added 13 new Coots
note: Faint and Hurt abilities NYI, and none of these are tested
13
index.html
|
@ -57,6 +57,19 @@
|
||||||
<link rel="prefetch" href="Victory Button.png" />
|
<link rel="prefetch" href="Victory Button.png" />
|
||||||
<link rel="prefetch" href="Defeat Button.png" />
|
<link rel="prefetch" href="Defeat Button.png" />
|
||||||
<link rel="prefetch" href="Tie Button.png" />
|
<link rel="prefetch" href="Tie Button.png" />
|
||||||
|
<link rel="prefetch" href="cdawg va.png" />
|
||||||
|
<link rel="prefetch" href="chessboxing coots.png" />
|
||||||
|
<link rel="prefetch" href="frog Coots.png" />
|
||||||
|
<link rel="prefetch" href="hasan coots.png" />
|
||||||
|
<link rel="prefetch" href="ironmouse coots.png" />
|
||||||
|
<link rel="prefetch" href="luddy Coots.png" />
|
||||||
|
<link rel="prefetch" href="mario coots.png" />
|
||||||
|
<link rel="prefetch" href="mr beast coots.png" />
|
||||||
|
<link rel="prefetch" href="nick coots.png" />
|
||||||
|
<link rel="prefetch" href="SlimeCoots.png" />
|
||||||
|
<link rel="prefetch" href="smash coots.png" />
|
||||||
|
<link rel="prefetch" href="streamer award coots.png" />
|
||||||
|
<link rel="prefetch" href="aimen coots.png" />
|
||||||
|
|
||||||
<title>Profectus</title>
|
<title>Profectus</title>
|
||||||
<meta name="description" content="A project made in Profectus"/>
|
<meta name="description" content="A project made in Profectus"/>
|
||||||
|
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
public/SlimeCoots.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
public/aimen coots.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
public/cdawg va.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
public/chessboxing coots.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
public/frog Coots.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
public/hasan coots.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
public/ironmouse coots.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
public/luddy Coots.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
public/mario coots.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
public/mr beast coots.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
public/nick coots.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
public/smash coots.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
public/streamer award coots.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
|
@ -37,6 +37,19 @@ import tieButton from "../../public/Tie Button.png";
|
||||||
import vespa from "../../public/Vespa Coots.png";
|
import vespa from "../../public/Vespa Coots.png";
|
||||||
import victoryButton from "../../public/Victory Button.png";
|
import victoryButton from "../../public/Victory Button.png";
|
||||||
import victoryFace from "../../public/win face.png";
|
import victoryFace from "../../public/win face.png";
|
||||||
|
import connor from "../../public/cdawg va.png";
|
||||||
|
import chessboxing from "../../public/chessboxing coots.png";
|
||||||
|
import frog from "../../public/frog Coots.png";
|
||||||
|
import hasan from "../../public/hasan coots.png";
|
||||||
|
import ironmouse from "../../public/ironmouse coots.png";
|
||||||
|
import luddy from "../../public/luddy Coots.png";
|
||||||
|
import mario from "../../public/mario coots.png";
|
||||||
|
import beast from "../../public/mr beast coots.png";
|
||||||
|
import nick from "../../public/nick coots.png";
|
||||||
|
import slime from "../../public/SlimeCoots.png";
|
||||||
|
import smash from "../../public/smash coots.png";
|
||||||
|
import awards from "../../public/streamer award coots.png";
|
||||||
|
import aimen from "../../public/aimen coots.png";
|
||||||
import CharacterSlot from "./CharacterSlot.vue";
|
import CharacterSlot from "./CharacterSlot.vue";
|
||||||
import "./common.css";
|
import "./common.css";
|
||||||
import "./socket";
|
import "./socket";
|
||||||
|
@ -57,7 +70,8 @@ export const characters: Record<string, CharacterInfo> = {
|
||||||
<>
|
<>
|
||||||
<i>Livestream joined</i>: Deal {char.exp >= 6 ? 6 : char.exp >= 3 ? 4 : 2}{" "}
|
<i>Livestream joined</i>: Deal {char.exp >= 6 ? 6 : char.exp >= 3 ? 4 : 2}{" "}
|
||||||
<img src={heart_small} />
|
<img src={heart_small} />
|
||||||
<span style="color: red">Relevancy</span> damage to every character on a stream
|
<span style="color: red">Relevancy</span> damage to every Coots on either
|
||||||
|
livestream
|
||||||
</>
|
</>
|
||||||
)),
|
)),
|
||||||
performAbility(char) {
|
performAbility(char) {
|
||||||
|
@ -80,7 +94,7 @@ export const characters: Record<string, CharacterInfo> = {
|
||||||
<>
|
<>
|
||||||
<i>Livestream joined</i>: Gain {char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1}{" "}
|
<i>Livestream joined</i>: Gain {char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1}{" "}
|
||||||
<img src={star_small} />
|
<img src={star_small} />
|
||||||
<span style="color: gold">Presence</span> for every character on that livestream
|
<span style="color: gold">Presence</span> for every Coots on that livestream
|
||||||
</>
|
</>
|
||||||
)),
|
)),
|
||||||
performAbility(char) {
|
performAbility(char) {
|
||||||
|
@ -117,6 +131,86 @@ export const characters: Record<string, CharacterInfo> = {
|
||||||
main.gold.value += goldGain;
|
main.gold.value += goldGain;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
mario: {
|
||||||
|
nickname: "Mario Coots",
|
||||||
|
initialPresence: 1,
|
||||||
|
initialRelevancy: 1,
|
||||||
|
display: mario,
|
||||||
|
abilityType: "LivestreamJoined",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Livestream joined</i>: Deal {char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1}{" "}
|
||||||
|
<img src={star_small} />
|
||||||
|
<span style="color: gold">Presence</span> damage to 2 Coots that most recently
|
||||||
|
joined the enemy livestream
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
if (main.battle.value == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const damage = char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1;
|
||||||
|
let opposingTeam: Character[];
|
||||||
|
if (main.battle.value.streamers.includes(char)) {
|
||||||
|
opposingTeam = main.battle.value.enemyStreamers;
|
||||||
|
} else {
|
||||||
|
opposingTeam = main.battle.value.streamers;
|
||||||
|
}
|
||||||
|
for (let i = 0; i < 2 && i < opposingTeam.length; i++) {
|
||||||
|
opposingTeam[i].presence -= damage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aimen: {
|
||||||
|
nickname: "Aimen Coots",
|
||||||
|
initialPresence: 1,
|
||||||
|
initialRelevancy: 2,
|
||||||
|
display: aimen,
|
||||||
|
abilityType: "Sold",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Sold</i>: Give {char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1}{" "}
|
||||||
|
<img src={heart_small} />
|
||||||
|
<span style="color: red">Relevancy</span> to leftmost Coots
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
const team = main.team.value.filter(m => m != null);
|
||||||
|
if (team.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const relevancyGain = char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1;
|
||||||
|
team[team.length - 1]!.relevancy += relevancyGain;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
nick: {
|
||||||
|
nickname: "Nick Coots",
|
||||||
|
initialPresence: 2,
|
||||||
|
initialRelevancy: 1,
|
||||||
|
display: nick,
|
||||||
|
abilityType: "LivestreamEnded",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Livestream ended</i>: Each coots on this livestream gain{" "}
|
||||||
|
{char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1} <img src={star_small} />
|
||||||
|
<span style="color: gold">Presence</span>
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
if (main.battle.value == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const gain = char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1;
|
||||||
|
if (main.battle.value.streamers.includes(char)) {
|
||||||
|
main.battle.value.streamers.forEach(s => (s.presence += gain));
|
||||||
|
} else {
|
||||||
|
main.battle.value.enemyStreamers.forEach(s => (s.presence += gain));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
// Tier 2
|
// Tier 2
|
||||||
maid: {
|
maid: {
|
||||||
nickname: "Maid Coots",
|
nickname: "Maid Coots",
|
||||||
|
@ -127,7 +221,7 @@ export const characters: Record<string, CharacterInfo> = {
|
||||||
abilityDescription: char =>
|
abilityDescription: char =>
|
||||||
jsx(() => (
|
jsx(() => (
|
||||||
<>
|
<>
|
||||||
<i>Level up</i>: Every character gains {char.exp >= 3 ? 2 : 1}{" "}
|
<i>Level up</i>: Give every Coots {char.exp >= 3 ? 2 : 1}{" "}
|
||||||
<img src={heart_small} />
|
<img src={heart_small} />
|
||||||
<span style="color: red">Relevancy</span> and <img src={star_small} />
|
<span style="color: red">Relevancy</span> and <img src={star_small} />
|
||||||
<span style="color: gold">Presence</span>
|
<span style="color: gold">Presence</span>
|
||||||
|
@ -153,10 +247,10 @@ export const characters: Record<string, CharacterInfo> = {
|
||||||
jsx(() => (
|
jsx(() => (
|
||||||
<>
|
<>
|
||||||
<i>Livestream joined</i>: Summon a lv{" "}
|
<i>Livestream joined</i>: Summon a lv{" "}
|
||||||
{char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1} Ludwig Coots with this character's
|
{char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1} Ludwig Coots with this Coots'
|
||||||
<img src={heart_small} />
|
<img src={heart_small} />
|
||||||
<span style="color: red">Relevancy</span> and <img src={star_small} />
|
<span style="color: red">Relevancy</span> and <img src={star_small} />
|
||||||
<span style="color: gold">Presence</span>.
|
<span style="color: gold">Presence</span>
|
||||||
</>
|
</>
|
||||||
)),
|
)),
|
||||||
performAbility(char) {
|
performAbility(char) {
|
||||||
|
@ -189,9 +283,9 @@ export const characters: Record<string, CharacterInfo> = {
|
||||||
<>
|
<>
|
||||||
<i>Livestream ended</i>: Gain {char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1}{" "}
|
<i>Livestream ended</i>: Gain {char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1}{" "}
|
||||||
<img src={heart_small} />
|
<img src={heart_small} />
|
||||||
<span style="color: red">Relevancy</span> for every character on either
|
<span style="color: red">Relevancy</span> for every Coots on either livestream
|
||||||
livestream with more <img src={heart_small} />
|
with more <img src={heart_small} />
|
||||||
<span style="color: red">Relevancy</span>.
|
<span style="color: red">Relevancy</span>
|
||||||
</>
|
</>
|
||||||
)),
|
)),
|
||||||
performAbility(char) {
|
performAbility(char) {
|
||||||
|
@ -206,6 +300,135 @@ export const characters: Record<string, CharacterInfo> = {
|
||||||
.length);
|
.length);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
chessbox: {
|
||||||
|
nickname: "Chessboxing Coots",
|
||||||
|
initialRelevancy: 3,
|
||||||
|
initialPresence: 2,
|
||||||
|
display: chessboxing,
|
||||||
|
abilityType: "StreamStarted",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Stream started</i>: Permanently gain{" "}
|
||||||
|
{char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1} <img src={heart_small} />
|
||||||
|
<span style="color: red">Relevancy</span> and swap <img src={heart_small} />
|
||||||
|
<span style="color: red">Relevancy</span> and <img src={star_small} />
|
||||||
|
<span style="color: gold">Presence</span>
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
const gain = char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1;
|
||||||
|
const temp = char.relevancy + gain;
|
||||||
|
char.relevancy = char.presence;
|
||||||
|
char.presence = temp;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
hasan: {
|
||||||
|
nickname: "Chessboxing Coots",
|
||||||
|
initialRelevancy: 2,
|
||||||
|
initialPresence: 3,
|
||||||
|
display: hasan,
|
||||||
|
abilityType: "StartTurn",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Turn started</i>: If you won the last battle, all Coots gain
|
||||||
|
{char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1} <img src={heart_small} />
|
||||||
|
<span style="color: red">Relevancy</span>
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
if (main.outcome.value !== "Victory") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const gain = char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1;
|
||||||
|
main.team.value.forEach(m => {
|
||||||
|
if (m != null) {
|
||||||
|
m.relevancy += gain;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
beast: {
|
||||||
|
nickname: "Mr.Beast Coots",
|
||||||
|
initialRelevancy: 2,
|
||||||
|
initialPresence: 2,
|
||||||
|
display: beast,
|
||||||
|
abilityType: "StartTurn",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Turn started</i>: Gain
|
||||||
|
{char.exp >= 6 ? 6 : char.exp >= 3 ? 4 : 2} <img src={money_small} />
|
||||||
|
<span style="color: yellow">Moguls</span>
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
const gain = char.exp >= 6 ? 6 : char.exp >= 3 ? 4 : 2;
|
||||||
|
main.gold.value += gain;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
frog: {
|
||||||
|
nickname: "Mr.Beast Coots",
|
||||||
|
initialRelevancy: 1,
|
||||||
|
initialPresence: 2,
|
||||||
|
display: frog,
|
||||||
|
abilityType: "Faint",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Either stat hits 0</i>: Summon a lv{" "}
|
||||||
|
{char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1} Mogul Mail Coots with this Coots'
|
||||||
|
<img src={heart_small} />
|
||||||
|
<span style="color: red">Relevancy</span> and <img src={star_small} />
|
||||||
|
<span style="color: gold">Presence</span>
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
if (main.battle.value == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const level = char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1;
|
||||||
|
const newChar = {
|
||||||
|
type: "mail",
|
||||||
|
exp: level === 3 ? 6 : level === 2 ? 3 : 1,
|
||||||
|
presence: char.presence,
|
||||||
|
relevancy: char.relevancy
|
||||||
|
};
|
||||||
|
main.queue.value.push({ action: "LivestreamJoined", target: newChar });
|
||||||
|
if (main.battle.value.streamers.includes(char)) {
|
||||||
|
main.battle.value.streamers.push(newChar);
|
||||||
|
} else {
|
||||||
|
main.battle.value.enemyStreamers.push(newChar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
moves: {
|
||||||
|
nickname: "Mogul Moves Coots",
|
||||||
|
initialRelevancy: 1,
|
||||||
|
initialPresence: 2,
|
||||||
|
display: moves,
|
||||||
|
abilityType: "LivestreamJoined",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Livestream joined</i>: Gain {char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1}{" "}
|
||||||
|
<img src={heart_small} />
|
||||||
|
<span style="color: red">Relevancy</span> for every battle you've won
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
if (main.battle.value == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const gain = char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1;
|
||||||
|
if (main.battle.value.streamers.includes(char)) {
|
||||||
|
char.relevancy += gain * main.wins.value;
|
||||||
|
} else {
|
||||||
|
char.relevancy += gain * main.battle.value.enemyWins;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
// Tier 3
|
// Tier 3
|
||||||
money: {
|
money: {
|
||||||
nickname: "Mogul Money Coots",
|
nickname: "Mogul Money Coots",
|
||||||
|
@ -220,7 +443,7 @@ export const characters: Record<string, CharacterInfo> = {
|
||||||
{char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1} <img src={star_small} />
|
{char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1} <img src={star_small} />
|
||||||
<span style="color: gold">Presence</span> if you have 2 or more
|
<span style="color: gold">Presence</span> if you have 2 or more
|
||||||
<img src={money_small} />
|
<img src={money_small} />
|
||||||
<span style="color: yellow">Moguls</span>.
|
<span style="color: yellow">Moguls</span>
|
||||||
</>
|
</>
|
||||||
)),
|
)),
|
||||||
performAbility(char) {
|
performAbility(char) {
|
||||||
|
@ -239,10 +462,10 @@ export const characters: Record<string, CharacterInfo> = {
|
||||||
abilityDescription: () =>
|
abilityDescription: () =>
|
||||||
jsx(() => (
|
jsx(() => (
|
||||||
<>
|
<>
|
||||||
<i>Livestream joined</i>: Set the character that most recently joined the enemy
|
<i>Livestream joined</i>: Set the Coots that most recently joined the enemy
|
||||||
livestream's <img src={star_small} />
|
livestream's <img src={star_small} />
|
||||||
<span style="color: gold">Presence</span> to 0. This effect does not improve on
|
<span style="color: gold">Presence</span> to 0. This effect does not improve on
|
||||||
level up.
|
level up
|
||||||
</>
|
</>
|
||||||
)),
|
)),
|
||||||
performAbility(char) {
|
performAbility(char) {
|
||||||
|
@ -263,6 +486,184 @@ export const characters: Record<string, CharacterInfo> = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
smash: {
|
||||||
|
nickname: "Smash Coots",
|
||||||
|
initialRelevancy: 2,
|
||||||
|
initialPresence: 4,
|
||||||
|
display: smash,
|
||||||
|
abilityType: "Hurt",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Hurt</i>: Gain {char.exp >= 6 ? 6 : char.exp >= 3 ? 4 : 2}{" "}
|
||||||
|
<img src={star_small} />
|
||||||
|
<span style="color: gold">Relevancy</span>
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
if (main.battle.value == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const gain = char.exp >= 6 ? 6 : char.exp >= 3 ? 4 : 2;
|
||||||
|
char.relevancy += gain;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
connor: {
|
||||||
|
nickname: "CDawgVA Coots",
|
||||||
|
initialRelevancy: 2,
|
||||||
|
initialPresence: 2,
|
||||||
|
display: connor,
|
||||||
|
abilityType: "Faint",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Either stat hits 0</i>: Summon a lv{" "}
|
||||||
|
{char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1} Ironmouse Coots
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
if (main.battle.value == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const level = char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1;
|
||||||
|
const newChar = {
|
||||||
|
type: "ironmouse",
|
||||||
|
exp: level === 3 ? 6 : level === 2 ? 3 : 1,
|
||||||
|
presence: characters.ironmouse.initialPresence,
|
||||||
|
relevancy: characters.ironmouse.initialRelevancy
|
||||||
|
};
|
||||||
|
main.queue.value.push({ action: "LivestreamJoined", target: newChar });
|
||||||
|
if (main.battle.value.streamers.includes(char)) {
|
||||||
|
main.battle.value.streamers.push(newChar);
|
||||||
|
} else {
|
||||||
|
main.battle.value.enemyStreamers.push(newChar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
luddy: {
|
||||||
|
nickname: "Luddy Coots",
|
||||||
|
initialRelevancy: 2,
|
||||||
|
initialPresence: 3,
|
||||||
|
display: luddy,
|
||||||
|
abilityType: "LivestreamEnded",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Livestream ended</i>: Deal {char.exp >= 6 ? 9 : char.exp >= 3 ? 6 : 3}{" "}
|
||||||
|
<img src={star_small} />
|
||||||
|
<span style="color: gold">Presence</span> damage to the Coots on the enemy
|
||||||
|
livestream with the highest <img src={star_small} />
|
||||||
|
<span style="color: gold">Presence</span>
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
if (main.battle.value == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (main.battle.value.streamers.includes(char)) {
|
||||||
|
const m = main.battle.value.enemyStreamers.reduce((a, b) => {
|
||||||
|
if (a.presence > b.presence) {
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
});
|
||||||
|
if (m != null) {
|
||||||
|
m.presence -= 3;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const m = main.battle.value.streamers.reduce((a, b) => {
|
||||||
|
if (a.presence > b.presence) {
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
});
|
||||||
|
if (m != null) {
|
||||||
|
m.presence -= 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
slime: {
|
||||||
|
nickname: "Slime Coots",
|
||||||
|
initialRelevancy: 3,
|
||||||
|
initialPresence: 3,
|
||||||
|
display: slime,
|
||||||
|
abilityType: "LivestreamJoined",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Livestream joined</i>: Give {char.exp >= 6 ? 4 : char.exp >= 3 ? 3 : 2}{" "}
|
||||||
|
<img src={heart_small} />
|
||||||
|
<span style="color: red">Relevancy</span> and <img src={star_small} />
|
||||||
|
<span style="color: gold">Presence</span> to the Coots who most recently joined
|
||||||
|
this livestream.
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
if (main.battle.value == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const gain = char.exp >= 6 ? 4 : char.exp >= 3 ? 3 : 2;
|
||||||
|
if (main.battle.value.streamers.includes(char)) {
|
||||||
|
if (main.battle.value.streamers.length > 1) {
|
||||||
|
main.battle.value.streamers[1].relevancy += gain;
|
||||||
|
main.battle.value.streamers[1].presence += gain;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (main.battle.value.enemyStreamers.length > 1) {
|
||||||
|
main.battle.value.enemyStreamers[1].relevancy += gain;
|
||||||
|
main.battle.value.enemyStreamers[1].presence += gain;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
awards: {
|
||||||
|
nickname: "Streamer Awards Coots",
|
||||||
|
initialRelevancy: 3,
|
||||||
|
initialPresence: 3,
|
||||||
|
display: awards,
|
||||||
|
abilityType: "StartTurn",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Turn Started</i>: If you won the last battle, gain{" "}
|
||||||
|
{char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1} <img src={money_small} />
|
||||||
|
<span style="color: yellow">Moguls</span> for every battle you've won
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
if (main.outcome.value !== "Victory") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const gain = char.exp >= 6 ? 3 : char.exp >= 3 ? 2 : 1;
|
||||||
|
main.gold.value += gain * main.wins.value;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Other
|
||||||
|
ironmouse: {
|
||||||
|
nickname: "Ironmouse Coots",
|
||||||
|
initialRelevancy: 5,
|
||||||
|
initialPresence: 5,
|
||||||
|
display: ironmouse,
|
||||||
|
abilityType: "LivestreamJoined",
|
||||||
|
abilityDescription: char =>
|
||||||
|
jsx(() => (
|
||||||
|
<>
|
||||||
|
<i>Livestream joined</i>: Gain {char.exp >= 6 ? 6 : char.exp >= 3 ? 4 : 2}{" "}
|
||||||
|
<img src={heart_small} />
|
||||||
|
<span style="color: red">Relevancy</span> and <img src={star_small} />
|
||||||
|
<span style="color: gold">Presence</span>
|
||||||
|
</>
|
||||||
|
)),
|
||||||
|
performAbility(char) {
|
||||||
|
if (main.battle.value == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const gain = char.exp >= 6 ? 6 : char.exp >= 3 ? 4 : 2;
|
||||||
|
char.relevancy += gain;
|
||||||
|
char.presence += gain;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,13 @@ function setupSocket(socket: Socket<ServerToClientEvents, ClientToServerEvents>)
|
||||||
}, 0);
|
}, 0);
|
||||||
main.showRefreshAnim.value = true;
|
main.showRefreshAnim.value = true;
|
||||||
setTimeout(() => (main.showRefreshAnim.value = false), 500);
|
setTimeout(() => (main.showRefreshAnim.value = false), 500);
|
||||||
|
setTimeout(() => {
|
||||||
|
main.team.value.forEach(m => {
|
||||||
|
if (m != null && characters[m.type].abilityType === "StartTurn") {
|
||||||
|
characters[m.type].performAbility(m);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 1250);
|
||||||
});
|
});
|
||||||
socket.on("reroll", shop => {
|
socket.on("reroll", shop => {
|
||||||
main.gold.value--;
|
main.gold.value--;
|
||||||
|
|
8
src/data/types.d.ts
vendored
|
@ -1,6 +1,12 @@
|
||||||
import { CoercableComponent } from "features/feature";
|
import { CoercableComponent } from "features/feature";
|
||||||
|
|
||||||
type AbilityTypes = "LivestreamJoined" | "Sold" | "LevelUp" | "LivestreamEnded" | "StreamStarted";
|
type AbilityTypes =
|
||||||
|
| "LivestreamJoined"
|
||||||
|
| "Sold"
|
||||||
|
| "LevelUp"
|
||||||
|
| "LivestreamEnded"
|
||||||
|
| "StreamStarted"
|
||||||
|
| "StartTurn";
|
||||||
|
|
||||||
interface CharacterInfo {
|
interface CharacterInfo {
|
||||||
nickname: string;
|
nickname: string;
|
||||||
|
|