empathie fonctionnant, et brouillard sur 6 tours
This commit is contained in:
parent
06c13a8747
commit
be03e157a5
2 changed files with 164 additions and 33 deletions
|
|
@ -189,7 +189,7 @@ Choisie une pièce qui sort du plateau pendant deux tours. Ce après quoi elle t
|
||||||
## a reflechir
|
## a reflechir
|
||||||
|
|
||||||
### empathie
|
### empathie
|
||||||
On retourne le plateau' // pendant X tours ?
|
On échange de place pendant 6 tours'
|
||||||
|
|
||||||
### effet domino'
|
### effet domino'
|
||||||
La pièce désigner peut rejouer tant qu'elle capture"
|
La pièce désigner peut rejouer tant qu'elle capture"
|
||||||
|
|
|
||||||
145
server.js
145
server.js
|
|
@ -291,6 +291,9 @@ function endTurnAfterCard(room, senderId) {
|
||||||
shouldDecrement = e.playerId !== senderId;
|
shouldDecrement = e.playerId !== senderId;
|
||||||
} else if (e.decrementOn === "owner") {
|
} else if (e.decrementOn === "owner") {
|
||||||
shouldDecrement = e.playerId === senderId;
|
shouldDecrement = e.playerId === senderId;
|
||||||
|
} else if (e.decrementOn === "both") {
|
||||||
|
// explicit "both" means decrement on every end-of-turn
|
||||||
|
shouldDecrement = true;
|
||||||
} else {
|
} else {
|
||||||
shouldDecrement = e.playerId === senderId;
|
shouldDecrement = e.playerId === senderId;
|
||||||
}
|
}
|
||||||
|
|
@ -304,6 +307,22 @@ function endTurnAfterCard(room, senderId) {
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
if (e.remainingTurns <= 0) {
|
if (e.remainingTurns <= 0) {
|
||||||
room.activeCardEffects.splice(i, 1);
|
room.activeCardEffects.splice(i, 1);
|
||||||
|
try {
|
||||||
|
// If empathie expires, revert the players' swapped colors
|
||||||
|
if (e && e.type === "empathie") {
|
||||||
|
try {
|
||||||
|
(room.players || []).forEach((pl) => {
|
||||||
|
if (!pl || !pl.color) return;
|
||||||
|
if (pl.color === "white") pl.color = "black";
|
||||||
|
else if (pl.color === "black") pl.color = "white";
|
||||||
|
});
|
||||||
|
// bump board version and notify clients
|
||||||
|
try {
|
||||||
|
if (room.boardState) room.boardState.version = (room.boardState.version || 0) + 1;
|
||||||
|
} catch (_) {}
|
||||||
|
} catch (_) {}
|
||||||
|
}
|
||||||
|
} catch (_) {}
|
||||||
try {
|
try {
|
||||||
io.to(room.id).emit("card:effect:removed", {
|
io.to(room.id).emit("card:effect:removed", {
|
||||||
roomId: room.id,
|
roomId: room.id,
|
||||||
|
|
@ -312,6 +331,10 @@ function endTurnAfterCard(room, senderId) {
|
||||||
playerId: e.playerId,
|
playerId: e.playerId,
|
||||||
});
|
});
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
|
try {
|
||||||
|
// ensure clients receive the updated room state after effect expiry
|
||||||
|
sendRoomUpdate(room);
|
||||||
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -421,117 +444,164 @@ function buildDefaultDeck() {
|
||||||
"Les déplacements en diagonales de la pièce sélectionnée peuvent rebondir une fois sur les bords",
|
"Les déplacements en diagonales de la pièce sélectionnée peuvent rebondir une fois sur les bords",
|
||||||
"rebond",
|
"rebond",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Adoubement",
|
"Adoubement",
|
||||||
"La pièce sélectionnée peut maintenant faire les déplacements du cavalier en plus",
|
"La pièce sélectionnée peut maintenant faire les déplacements du cavalier en plus",
|
||||||
"adoubement",
|
"adoubement",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Folie",
|
"Folie",
|
||||||
"La pièce sélectionnée peut maintenant faire les déplacements du fou en plus",
|
"La pièce sélectionnée peut maintenant faire les déplacements du fou en plus",
|
||||||
"folie",
|
"folie",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Fortification",
|
"Fortification",
|
||||||
"La pièce sélectionnée peut maintenant faire les déplacements de la tour en plus",
|
"La pièce sélectionnée peut maintenant faire les déplacements de la tour en plus",
|
||||||
"fortification",
|
"fortification",
|
||||||
],
|
],
|
||||||
|
|
||||||
["L'anneau", "Le plateau devient un anneau pendant un tour", "anneau"],
|
["L'anneau", "Le plateau devient un anneau pendant un tour", "anneau"],
|
||||||
[
|
[
|
||||||
"Brouillard de guerre",
|
"Brouillard de guerre",
|
||||||
"Les joueur ne peuvent voir que au alentour de leurs pièces pendant 4 tours",
|
"Les joueur ne peuvent voir que au alentour de leurs pièces pendant 6 tours",
|
||||||
"brouillard",
|
"brouillard",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Jouer deux fois",
|
"Jouer deux fois",
|
||||||
"Le joueur peut déplacer deux pièces. Ne peut pas capturer pendant son deuxième tour",
|
"Le joueur peut déplacer deux pièces. Ne peut pas capturer pendant son deuxième tour",
|
||||||
"double",
|
"double",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Totem d'immunité",
|
"Totem d'immunité",
|
||||||
"Annule l'effet de la prochaine carte jouée par l'adversaire",
|
"Annule l'effet de la prochaine carte jouée par l'adversaire",
|
||||||
"totem",
|
"totem",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Placement de mines",
|
"Placement de mines",
|
||||||
"Le joueur place une mine sur une case vide sans la révéler au joueur adverse. Une pièce qui se pose dessus explose et est capturée par le joueur ayant placé la mine",
|
"Le joueur place une mine sur une case vide sans la révéler au joueur adverse. Une pièce qui se pose dessus explose et est capturée par le joueur ayant placé la mine",
|
||||||
"mine",
|
"mine",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Vole d'une pièce",
|
"Vole d'une pièce",
|
||||||
"Désigne une pièce non roi qui change de camp.\n\nCompte comme un mouvement",
|
"Désigne une pièce non roi qui change de camp.\n\nCompte comme un mouvement",
|
||||||
"vole_piece",
|
"vole_piece",
|
||||||
],
|
],
|
||||||
["Promotion", "Un pion au choix est promu", "promotion"],
|
|
||||||
|
[
|
||||||
|
"Promotion",
|
||||||
|
"Un pion au choix est promu",
|
||||||
|
"promotion"
|
||||||
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Vole d'une carte",
|
"Vole d'une carte",
|
||||||
"Vole une carte aléatoirement au joueur adverse",
|
"Vole une carte aléatoirement au joueur adverse",
|
||||||
"vole_carte",
|
"vole_carte",
|
||||||
],
|
],
|
||||||
["Resurection", "Ressucite la dernière pièce perdue", "resurection"],
|
|
||||||
["Carte sans effet", "N'a aucun effet", "sans_effet"],
|
[
|
||||||
|
"Resurection",
|
||||||
|
"Ressucite la dernière pièce perdue",
|
||||||
|
"resurection"
|
||||||
|
],
|
||||||
|
|
||||||
|
[
|
||||||
|
"Carte sans effet",
|
||||||
|
"N'a aucun effet",
|
||||||
|
"sans_effet"
|
||||||
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Kamikaze",
|
"Kamikaze",
|
||||||
"Détruit une de ses pièces, détruisant toutes les pièces adjacentes.\n\nCompte comme un mouvement",
|
"Détruit une de ses pièces, détruisant toutes les pièces adjacentes.\n\nCompte comme un mouvement",
|
||||||
"kamikaze",
|
"kamikaze",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Invisible",
|
"Invisible",
|
||||||
"Une des pièces devient invisible pour l'adversaire",
|
"Une des pièces devient invisible pour l'adversaire",
|
||||||
"invisible",
|
"invisible",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Coin-Coin",
|
"Coin-Coin",
|
||||||
"Possibilité de se téléporter depuis un coin vers n'importe quel autre coin",
|
"Possibilité de se téléporter depuis un coin vers n'importe quel autre coin",
|
||||||
"coincoin",
|
"coincoin",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Téléportation",
|
"Téléportation",
|
||||||
"Téléporte n'importe quelle pièce de son camp sur une case vide",
|
"Téléporte n'importe quelle pièce de son camp sur une case vide",
|
||||||
"teleportation",
|
"teleportation",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Toucher c'est jouer",
|
"Toucher c'est jouer",
|
||||||
"Toucher une pièce adverse qu'il sera obligé de jouer",
|
"Toucher une pièce adverse qu'il sera obligé de jouer",
|
||||||
"toucher",
|
"toucher",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Sniper",
|
"Sniper",
|
||||||
"Capturer une pièce sans avoir à bouger la pièce capturante",
|
"Capturer une pièce sans avoir à bouger la pièce capturante",
|
||||||
"sniper",
|
"sniper",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Échange",
|
"Échange",
|
||||||
"Échange la position d'une pièce avec une pièce adverse.\n\nCompte comme un mouvement",
|
"Échange la position d'une pièce avec une pièce adverse.\n\nCompte comme un mouvement",
|
||||||
"inversion",
|
"inversion",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Mélange",
|
"Mélange",
|
||||||
"La position de toutes les pièces sont échangées aléatoirement",
|
"La position de toutes les pièces sont échangées aléatoirement",
|
||||||
"melange",
|
"melange",
|
||||||
],
|
],
|
||||||
["La parrure", "Une reine est dégradée en pion", "parrure"],
|
|
||||||
|
[
|
||||||
|
"La parrure",
|
||||||
|
"Une reine est dégradée en pion",
|
||||||
|
"parrure"
|
||||||
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Tout ou rien",
|
"Tout ou rien",
|
||||||
"Une pièce choisie ne peut maintenant se déplacer que si elle capture.",
|
"Une pièce choisie ne peut maintenant se déplacer que si elle capture.",
|
||||||
"tout",
|
"tout",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Tous les mêmes",
|
"Tous les mêmes",
|
||||||
"Au yeux de l ennemie, toutes les pièces se ressemblent pendant 2 tours.",
|
"Au yeux de l ennemie, toutes les pièces se ressemblent pendant 2 tours.",
|
||||||
"pareil",
|
"pareil",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Révolution",
|
"Révolution",
|
||||||
"Tous les pions sont aléatoirement changés en Cavalier, Fou ou Tour et les Cavaliers, Fous et Tours sont changés en pions.",
|
"Tous les pions sont aléatoirement changés en Cavalier, Fou ou Tour et les Cavaliers, Fous et Tours sont changés en pions.",
|
||||||
"revolution",
|
"revolution",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
"Doppelganger",
|
"Doppelganger",
|
||||||
"Choisis une pièce. À partir de maintenant, devient chacune des pièces qu'elle capture.",
|
"Choisis une pièce. À partir de maintenant, devient chacune des pièces qu'elle capture.",
|
||||||
"doppelganger",
|
"doppelganger",
|
||||||
],
|
],
|
||||||
|
|
||||||
|
[
|
||||||
|
"Empathie",
|
||||||
|
"On échange de place pendant 6 tours",
|
||||||
|
"empathie"
|
||||||
|
],
|
||||||
|
|
||||||
// facile et intéresssant
|
// facile et intéresssant
|
||||||
// ["intrication quantique","Deux pièces sont intriquées. Quand l'une bouge, l'autre bouge de la même manière."],
|
// ["intrication quantique","Deux pièces sont intriquées. Quand l'une bouge, l'autre bouge de la même manière."],
|
||||||
// ['kurby','Choisis une pièce. À sa prochaine capture, récupère tous les mouvements de la pièce capturée.'],
|
// ['kurby','Choisis une pièce. À sa prochaine capture, récupère tous les mouvements de la pièce capturée.'],
|
||||||
|
|
@ -566,7 +636,6 @@ function buildDefaultDeck() {
|
||||||
// ['vacances','Choisie une pièce qui sort du plateau pendant deux tours. Ce après quoi elle tente de revenir: si la case est occupée, alors la pièce vacancière est capturée par la pièce occupant la case.'],
|
// ['vacances','Choisie une pièce qui sort du plateau pendant deux tours. Ce après quoi elle tente de revenir: si la case est occupée, alors la pièce vacancière est capturée par la pièce occupant la case.'],
|
||||||
|
|
||||||
// a reflechir
|
// a reflechir
|
||||||
["Empathie", "Change la couleur associée à chaque joueur.", "empathie"],
|
|
||||||
// ['effet domino', "La pièce désigner peut rejouer tant qu'elle capture"]
|
// ['effet domino', "La pièce désigner peut rejouer tant qu'elle capture"]
|
||||||
// ['reversi','Si deux pions encadrent parfaitement une pièce adverse, cette dernière change de camp'],
|
// ['reversi','Si deux pions encadrent parfaitement une pièce adverse, cette dernière change de camp'],
|
||||||
// ['plus on est de fous','Si le joueur possède deux fous dans la même diagonale, alors toutes les pièces adverses encadrées par ces deux fous sont capturés'],
|
// ['plus on est de fous','Si le joueur possède deux fous dans la même diagonale, alors toutes les pièces adverses encadrées par ces deux fous sont capturés'],
|
||||||
|
|
@ -1876,6 +1945,8 @@ io.on("connection", (socket) => {
|
||||||
shouldDecrement = e.playerId !== senderId;
|
shouldDecrement = e.playerId !== senderId;
|
||||||
} else if (e.decrementOn === "owner") {
|
} else if (e.decrementOn === "owner") {
|
||||||
shouldDecrement = e.playerId === senderId;
|
shouldDecrement = e.playerId === senderId;
|
||||||
|
} else if (e.decrementOn === "both") {
|
||||||
|
shouldDecrement = true;
|
||||||
} else {
|
} else {
|
||||||
shouldDecrement = e.playerId === senderId;
|
shouldDecrement = e.playerId === senderId;
|
||||||
}
|
}
|
||||||
|
|
@ -1889,6 +1960,21 @@ io.on("connection", (socket) => {
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
if (e.remainingTurns <= 0) {
|
if (e.remainingTurns <= 0) {
|
||||||
room.activeCardEffects.splice(i, 1);
|
room.activeCardEffects.splice(i, 1);
|
||||||
|
try {
|
||||||
|
// If empathie expires, revert the players' swapped colors
|
||||||
|
if (e && e.type === "empathie") {
|
||||||
|
try {
|
||||||
|
(room.players || []).forEach((pl) => {
|
||||||
|
if (!pl || !pl.color) return;
|
||||||
|
if (pl.color === "white") pl.color = "black";
|
||||||
|
else if (pl.color === "black") pl.color = "white";
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
if (room.boardState) room.boardState.version = (room.boardState.version || 0) + 1;
|
||||||
|
} catch (_) {}
|
||||||
|
} catch (_) {}
|
||||||
|
}
|
||||||
|
} catch (_) {}
|
||||||
try {
|
try {
|
||||||
io.to(room.id).emit("card:effect:removed", {
|
io.to(room.id).emit("card:effect:removed", {
|
||||||
roomId: room.id,
|
roomId: room.id,
|
||||||
|
|
@ -1897,6 +1983,9 @@ io.on("connection", (socket) => {
|
||||||
playerId: e.playerId,
|
playerId: e.playerId,
|
||||||
});
|
});
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
|
try {
|
||||||
|
sendRoomUpdate(room);
|
||||||
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2328,6 +2417,8 @@ io.on("connection", (socket) => {
|
||||||
shouldDecrement = e.playerId !== senderId;
|
shouldDecrement = e.playerId !== senderId;
|
||||||
} else if (e.decrementOn === "owner") {
|
} else if (e.decrementOn === "owner") {
|
||||||
shouldDecrement = e.playerId === senderId;
|
shouldDecrement = e.playerId === senderId;
|
||||||
|
} else if (e.decrementOn === "both") {
|
||||||
|
shouldDecrement = true;
|
||||||
} else {
|
} else {
|
||||||
shouldDecrement = e.playerId === senderId;
|
shouldDecrement = e.playerId === senderId;
|
||||||
}
|
}
|
||||||
|
|
@ -2341,6 +2432,20 @@ io.on("connection", (socket) => {
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
if (e.remainingTurns <= 0) {
|
if (e.remainingTurns <= 0) {
|
||||||
room.activeCardEffects.splice(i, 1);
|
room.activeCardEffects.splice(i, 1);
|
||||||
|
try {
|
||||||
|
if (e && e.type === "empathie") {
|
||||||
|
try {
|
||||||
|
(room.players || []).forEach((pl) => {
|
||||||
|
if (!pl || !pl.color) return;
|
||||||
|
if (pl.color === "white") pl.color = "black";
|
||||||
|
else if (pl.color === "black") pl.color = "white";
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
if (room.boardState) room.boardState.version = (room.boardState.version || 0) + 1;
|
||||||
|
} catch (_) {}
|
||||||
|
} catch (_) {}
|
||||||
|
}
|
||||||
|
} catch (_) {}
|
||||||
try {
|
try {
|
||||||
io.to(room.id).emit("card:effect:removed", {
|
io.to(room.id).emit("card:effect:removed", {
|
||||||
roomId: room.id,
|
roomId: room.id,
|
||||||
|
|
@ -2349,6 +2454,9 @@ io.on("connection", (socket) => {
|
||||||
playerId: e.playerId,
|
playerId: e.playerId,
|
||||||
});
|
});
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
|
try {
|
||||||
|
sendRoomUpdate(room);
|
||||||
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3435,6 +3543,10 @@ io.on("connection", (socket) => {
|
||||||
id: played.id,
|
id: played.id,
|
||||||
type: "empathie",
|
type: "empathie",
|
||||||
playerId: senderId,
|
playerId: senderId,
|
||||||
|
// lasts 6 turns (decrement on every end-of-turn)
|
||||||
|
remainingTurns: 6,
|
||||||
|
decrementOn: "both",
|
||||||
|
imposedBy: senderId,
|
||||||
ts: Date.now(),
|
ts: Date.now(),
|
||||||
};
|
};
|
||||||
room.activeCardEffects = room.activeCardEffects || [];
|
room.activeCardEffects = room.activeCardEffects || [];
|
||||||
|
|
@ -4176,7 +4288,7 @@ io.on("connection", (socket) => {
|
||||||
type: "brouillard",
|
type: "brouillard",
|
||||||
playerId: targetPlayer.id,
|
playerId: targetPlayer.id,
|
||||||
ts: Date.now(),
|
ts: Date.now(),
|
||||||
remainingTurns: (payload && payload.turns) || 4,
|
remainingTurns: (payload && payload.turns) || 6,
|
||||||
veiledSquares: all,
|
veiledSquares: all,
|
||||||
playCounts,
|
playCounts,
|
||||||
};
|
};
|
||||||
|
|
@ -4827,6 +4939,8 @@ io.on("connection", (socket) => {
|
||||||
shouldDecrement = e.playerId !== senderId;
|
shouldDecrement = e.playerId !== senderId;
|
||||||
} else if (e.decrementOn === "owner") {
|
} else if (e.decrementOn === "owner") {
|
||||||
shouldDecrement = e.playerId === senderId;
|
shouldDecrement = e.playerId === senderId;
|
||||||
|
} else if (e.decrementOn === "both") {
|
||||||
|
shouldDecrement = true;
|
||||||
} else {
|
} else {
|
||||||
shouldDecrement = e.playerId === senderId;
|
shouldDecrement = e.playerId === senderId;
|
||||||
}
|
}
|
||||||
|
|
@ -4840,6 +4954,20 @@ io.on("connection", (socket) => {
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
if (e.remainingTurns <= 0) {
|
if (e.remainingTurns <= 0) {
|
||||||
room.activeCardEffects.splice(i, 1);
|
room.activeCardEffects.splice(i, 1);
|
||||||
|
try {
|
||||||
|
if (e && e.type === "empathie") {
|
||||||
|
try {
|
||||||
|
(room.players || []).forEach((pl) => {
|
||||||
|
if (!pl || !pl.color) return;
|
||||||
|
if (pl.color === "white") pl.color = "black";
|
||||||
|
else if (pl.color === "black") pl.color = "white";
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
if (room.boardState) room.boardState.version = (room.boardState.version || 0) + 1;
|
||||||
|
} catch (_) {}
|
||||||
|
} catch (_) {}
|
||||||
|
}
|
||||||
|
} catch (_) {}
|
||||||
try {
|
try {
|
||||||
io.to(room.id).emit("card:effect:removed", {
|
io.to(room.id).emit("card:effect:removed", {
|
||||||
roomId: room.id,
|
roomId: room.id,
|
||||||
|
|
@ -4848,6 +4976,9 @@ io.on("connection", (socket) => {
|
||||||
playerId: e.playerId,
|
playerId: e.playerId,
|
||||||
});
|
});
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
|
try {
|
||||||
|
sendRoomUpdate(room);
|
||||||
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue