Merge branch 'dev' into main

added the new translation and help page
This commit is contained in:
Alberto 2021-02-01 16:59:59 +01:00
commit 17a86fc2b9
No known key found for this signature in database
GPG Key ID: 4F026F48309500A2
17 changed files with 1284 additions and 704 deletions

View File

@ -359,14 +359,22 @@ def holyday_special(sid, data):
ses: Player = sio.get_session(sid) ses: Player = sio.get_session(sid)
ses.holyday_special(data) ses.holyday_special(data)
# @sio.event @sio.event
# def get_cards(sid, data): def get_cards(sid):
# # if data == None or data == '': import bang.cards as c
# import bang.cards as c cards = c.get_starting_deck(['dodge_city'])
# sio.emit('cards_info', data=json.dumps(c.get_starting_deck(['dodge_city']), default=lambda o: o.__dict__)) cards_dict = {}
# # else: for ca in cards:
# # import bang.expansions.dodge_city.cards as c if ca.name not in cards_dict:
# # sio.emit('cards_info', data=json.dumps(c.get_starting_deck(), default=lambda o: o.__dict__)) cards_dict[ca.name] = ca
cards = [cards_dict[i] for i in cards_dict]
sio.emit('cards_info', room=sid, data=json.dumps(cards, default=lambda o: o.__dict__))
@sio.event
def get_characters(sid):
import bang.characters as ch
cards = ch.all_characters(['dodge_city'])
sio.emit('characters_info', room=sid, data=json.dumps(cards, default=lambda o: o.__dict__))
if __name__ == '__main__': if __name__ == '__main__':
eventlet.wsgi.server(eventlet.listen(('', 5001)), app) eventlet.wsgi.server(eventlet.listen(('', 5001)), app)

View File

@ -22,8 +22,8 @@ class Character(ABC):
class BartCassidy(Character): class BartCassidy(Character):
def __init__(self): def __init__(self):
super().__init__("Bart Cassidy", max_lives=4) super().__init__("Bart Cassidy", max_lives=4)
self.desc = "Ogni volta che viene ferito, pesca una carta" # self.desc = "Ogni volta che viene ferito, pesca una carta"
self.desc_eng = "Each time he is hurt, he draws a card" # self.desc_eng = "Each time he is hurt, he draws a card"
self.icon = '💔' self.icon = '💔'
def on_hurt(self, dmg): def on_hurt(self, dmg):
@ -32,108 +32,108 @@ class BartCassidy(Character):
class BlackJack(Character): class BlackJack(Character):
def __init__(self): def __init__(self):
super().__init__("Black Jack", max_lives=4) super().__init__("Black Jack", max_lives=4)
self.desc = "All'inizio del suo turno, quando deve pescare, mostra a tutti la seconda carta, se è Cuori o Quadri pesca una terza carta senza farla vedere" # self.desc = "All'inizio del suo turno, quando deve pescare, mostra a tutti la seconda carta, se è Cuori o Quadri pesca una terza carta senza farla vedere"
self.desc_eng = "At the beginning of his turn, when he has to draw, he shows everyone the second card, if it is Hearts or Diamonds he draws a third card without showing it" # self.desc_eng = "At the beginning of his turn, when he has to draw, he shows everyone the second card, if it is Hearts or Diamonds he draws a third card without showing it"
self.icon = '🎰' self.icon = '🎰'
class CalamityJanet(Character): class CalamityJanet(Character):
def __init__(self): def __init__(self):
super().__init__("Calamity Janet", max_lives=4) super().__init__("Calamity Janet", max_lives=4)
self.icon = '🔀' self.icon = '🔀'
self.desc = "Può usare i Mancato! come Bang! e viceversa" # self.desc = "Può usare i Mancato! come Bang! e viceversa"
self.desc_eng = "She can use the Missed! as Bang! and the other way around" # self.desc_eng = "She can use the Missed! as Bang! and the other way around"
class ElGringo(Character): class ElGringo(Character):
def __init__(self): def __init__(self):
super().__init__("El Gringo", max_lives=3) super().__init__("El Gringo", max_lives=3)
self.desc = "Ogni volta che perde un punto vita pesca una carta dalla mano del giocatore responsabile ma solo se il giocatore in questione ha carte in mano (una carta per ogni punto vita)" # self.desc = "Ogni volta che perde un punto vita pesca una carta dalla mano del giocatore responsabile ma solo se il giocatore in questione ha carte in mano (una carta per ogni punto vita)"
self.desc_eng = "Each time he is hurt, he draws a card from the hand of the attacking player" # self.desc_eng = "Each time he is hurt, he draws a card from the hand of the attacking player"
self.icon = '🤕' self.icon = '🤕'
# ovviamente la dinamite non è considerata danno inferto da un giocatore # ovviamente la dinamite non è considerata danno inferto da un giocatore
class JesseJones(Character): class JesseJones(Character):
def __init__(self): def __init__(self):
super().__init__("Jesse Jones", max_lives=4) super().__init__("Jesse Jones", max_lives=4)
self.desc = "All'inizio del suo turno, quando deve pescare, può prendere la prima carta a caso dalla mano di un giocatore e la seconda dal mazzo" # self.desc = "All'inizio del suo turno, quando deve pescare, può prendere la prima carta a caso dalla mano di un giocatore e la seconda dal mazzo"
self.desc_eng = "When he has to draw his cards, he may draw the first card from the hand of another player" # self.desc_eng = "When he has to draw his cards, he may draw the first card from the hand of another player"
self.icon = '😜' self.icon = '😜'
class Jourdonnais(Character): class Jourdonnais(Character):
def __init__(self): def __init__(self):
super().__init__("Jourdonnais", max_lives=4) super().__init__("Jourdonnais", max_lives=4)
self.desc = "Gioca come se avesse un Barile sempre attivo, nel caso in cui metta in gioco un Barile 'Reale' può estrarre due volte" # self.desc = "Gioca come se avesse un Barile sempre attivo, nel caso in cui metta in gioco un Barile 'Reale' può estrarre due volte"
self.desc_eng = "He plays as he had a Barrel always active, if he equips another Barrel, he can flip 2 cards" # self.desc_eng = "He plays as he had a Barrel always active, if he equips another Barrel, he can flip 2 cards"
self.icon = '🛢' self.icon = '🛢'
class KitCarlson(Character): class KitCarlson(Character):
def __init__(self): def __init__(self):
super().__init__("Kit Carlson", max_lives=4) super().__init__("Kit Carlson", max_lives=4)
self.desc = "All'inizio del suo turno, quando deve pescare, pesca tre carte, ne sceglie due da tenere in mano e la rimanente la rimette in cima la mazzo" # self.desc = "All'inizio del suo turno, quando deve pescare, pesca tre carte, ne sceglie due da tenere in mano e la rimanente la rimette in cima la mazzo"
self.desc_eng = "When he has to draw, he peeks 3 cards and chooses 2, putting the other card on the top of the deck" # self.desc_eng = "When he has to draw, he peeks 3 cards and chooses 2, putting the other card on the top of the deck"
self.icon = '🤔' self.icon = '🤔'
class LuckyDuke(Character): class LuckyDuke(Character):
def __init__(self): def __init__(self):
super().__init__("Lucky Duke", max_lives=4, pick_mod=1) super().__init__("Lucky Duke", max_lives=4, pick_mod=1)
self.desc = "Ogni volta che deve estrarre, prende due carte dal mazzo, sceglie una delle due carte per l'estrazione, infine le scarta entrambe" # self.desc = "Ogni volta che deve estrarre, prende due carte dal mazzo, sceglie una delle due carte per l'estrazione, infine le scarta entrambe"
self.desc_eng = "Every time he has to flip a card, he can flip 2 times" # self.desc_eng = "Every time he has to flip a card, he can flip 2 times"
self.icon = '🍀' self.icon = '🍀'
class PaulRegret(Character): class PaulRegret(Character):
def __init__(self): def __init__(self):
super().__init__("Paul Regret", max_lives=3, visibility_mod=1) super().__init__("Paul Regret", max_lives=3, visibility_mod=1)
self.desc = "Gioca come se avesse una Mustang sempre attiva, nel caso in cui metta in gioco una Mustang 'Reale' l'effetto si somma tranquillamente" # self.desc = "Gioca come se avesse una Mustang sempre attiva, nel caso in cui metta in gioco una Mustang 'Reale' l'effetto si somma tranquillamente"
self.desc_eng = "The other players see him at distance +1" # self.desc_eng = "The other players see him at distance +1"
self.icon = '🏇' self.icon = '🏇'
class PedroRamirez(Character): class PedroRamirez(Character):
def __init__(self): def __init__(self):
super().__init__("Pedro Ramirez", max_lives=4) super().__init__("Pedro Ramirez", max_lives=4)
self.desc = "All'inizio del suo turno, quando deve pescare, può prendere la prima carta dalla cima degli scarti e la seconda dal mazzo" # self.desc = "All'inizio del suo turno, quando deve pescare, può prendere la prima carta dalla cima degli scarti e la seconda dal mazzo"
self.desc_eng = "When he has to draw, he may pick the first card from the discarded cards" # self.desc_eng = "When he has to draw, he may pick the first card from the discarded cards"
self.icon = '🚮' self.icon = '🚮'
class RoseDoolan(Character): class RoseDoolan(Character):
def __init__(self): def __init__(self):
super().__init__("Rose Doolan", max_lives=4, sight_mod=1) super().__init__("Rose Doolan", max_lives=4, sight_mod=1)
self.icon = '🕵️‍♀️' self.icon = '🕵️‍♀️'
self.desc = "Gioca come se avesse un Mirino sempre attivo, nel caso in cui metta in gioco una Mirino 'Reale' l'effetto si somma tranquillamente" # self.desc = "Gioca come se avesse un Mirino sempre attivo, nel caso in cui metta in gioco una Mirino 'Reale' l'effetto si somma tranquillamente"
self.desc_eng = "She sees the other players at distance -1" # self.desc_eng = "She sees the other players at distance -1"
class SidKetchum(Character): class SidKetchum(Character):
def __init__(self): def __init__(self):
super().__init__("Sid Ketchum", max_lives=4) super().__init__("Sid Ketchum", max_lives=4)
self.desc = "Può scartare due carte per recuperare un punto vita anche più volte di seguito a patto di avere carte da scartare, può farlo anche nel turno dell'avversario se starebbe per morire" # self.desc = "Può scartare due carte per recuperare un punto vita anche più volte di seguito a patto di avere carte da scartare, può farlo anche nel turno dell'avversario se starebbe per morire"
self.desc_eng = "He can discard 2 cards to regain 1HP" # self.desc_eng = "He can discard 2 cards to regain 1HP"
self.icon = '🤤' self.icon = '🤤'
class SlabTheKiller(Character): class SlabTheKiller(Character):
def __init__(self): def __init__(self):
super().__init__("Slab The Killer", max_lives=4) super().__init__("Slab The Killer", max_lives=4)
self.desc = "Per evitare i suoi Bang servono due Mancato, un eventuale barile vale solo come un Mancato" # self.desc = "Per evitare i suoi Bang servono due Mancato, un eventuale barile vale solo come un Mancato"
self.desc_eng = "To dodge his Bang! cards other players need 2 Missed!" # self.desc_eng = "To dodge his Bang! cards other players need 2 Missed!"
self.icon = '🔪' self.icon = '🔪'
#vale per tutte le carte bang non solo per la carta che si chiama Bang! #vale per tutte le carte bang non solo per la carta che si chiama Bang!
class SuzyLafayette(Character): class SuzyLafayette(Character):
def __init__(self): def __init__(self):
super().__init__("Suzy Lafayette", max_lives=4) super().__init__("Suzy Lafayette", max_lives=4)
self.desc = "Appena rimane senza carte in mano pesca immediatamente una carta dal mazzo" # self.desc = "Appena rimane senza carte in mano pesca immediatamente una carta dal mazzo"
self.desc_eng = "Whenever she has an empty hand, she draws a card" # self.desc_eng = "Whenever she has an empty hand, she draws a card"
self.icon = '🔂' self.icon = '🔂'
class VultureSam(Character): class VultureSam(Character):
def __init__(self): def __init__(self):
super().__init__("Vulture Sam", max_lives=4) super().__init__("Vulture Sam", max_lives=4)
self.desc = "Quando un personaggio viene eliminato prendi tutte le carte di quel giocatore e aggiungile alla tua mano, sia le carte in mano che quelle in gioco" # self.desc = "Quando un personaggio viene eliminato prendi tutte le carte di quel giocatore e aggiungile alla tua mano, sia le carte in mano che quelle in gioco"
self.desc_eng = "When a player dies, he gets all the cards in the dead's hand and equipments" # self.desc_eng = "When a player dies, he gets all the cards in the dead's hand and equipments"
self.icon = '🦉' self.icon = '🦉'
class WillyTheKid(Character): class WillyTheKid(Character):
def __init__(self): def __init__(self):
super().__init__("Willy The Kid", max_lives=4) super().__init__("Willy The Kid", max_lives=4)
self.desc = "Questo personaggio può giocare quanti bang vuole nel suo turno" # self.desc = "Questo personaggio può giocare quanti bang vuole nel suo turno"
self.desc_eng = "He doesn't have limits to the amounts of bang he can use" # self.desc_eng = "He doesn't have limits to the amounts of bang he can use"
self.icon = '🎉' self.icon = '🎉'
def all_characters(expansions: List[str]): def all_characters(expansions: List[str]):

View File

@ -383,7 +383,7 @@ class FucileDaCaccia(Card):
return False return False
def get_starting_deck() -> List[Card]: def get_starting_deck() -> List[Card]:
return [ cards = [
Barile(Suit.CLUBS, 'A'), Barile(Suit.CLUBS, 'A'),
Binocolo(Suit.DIAMONDS, 10), Binocolo(Suit.DIAMONDS, 10),
Dinamite(Suit.CLUBS, 10), Dinamite(Suit.CLUBS, 10),
@ -425,3 +425,6 @@ def get_starting_deck() -> List[Card]:
Pepperbox(Suit.HEARTS, 'A'), Pepperbox(Suit.HEARTS, 'A'),
Howitzer(Suit.SPADES, 9), Howitzer(Suit.SPADES, 9),
] ]
for c in cards:
c.expansion_icon = '🐄️'
return cards

View File

@ -4,110 +4,110 @@ from bang.characters import *
class PixiePete(Character): class PixiePete(Character):
def __init__(self): def __init__(self):
super().__init__("Pixie Pete", max_lives=3) super().__init__("Pixie Pete", max_lives=3)
self.desc = "All'inizio del turno pesca 3 carte invece che 2" # self.desc = "All'inizio del turno pesca 3 carte invece che 2"
self.desc_eng = "He draws 3 cards instead of 2" # self.desc_eng = "He draws 3 cards instead of 2"
self.icon = '☘️' self.icon = '☘️'
class TequilaJoe(Character): class TequilaJoe(Character):
def __init__(self): def __init__(self):
super().__init__("Tequila Joe", max_lives=4) super().__init__("Tequila Joe", max_lives=4)
self.desc = "Se gioca la carta Birra recupera 2 vite invece che una sola" # self.desc = "Se gioca la carta Birra recupera 2 vite invece che una sola"
self.desc_eng = "When he plays Beer, he regains 2 Health Points" # self.desc_eng = "When he plays Beer, he regains 2 Health Points"
self.icon = '🍻' self.icon = '🍻'
class GregDigger(Character): class GregDigger(Character):
def __init__(self): def __init__(self):
super().__init__("Greg Digger", max_lives=4) super().__init__("Greg Digger", max_lives=4)
self.desc = "Quando un giocatore muore, recupera fino a 2 vite" # self.desc = "Quando un giocatore muore, recupera fino a 2 vite"
self.desc_eng = "Whenever a player dies, he regains up to 2 lives" # self.desc_eng = "Whenever a player dies, he regains up to 2 lives"
self.icon = '🦴' self.icon = '🦴'
class HerbHunter(Character): class HerbHunter(Character):
def __init__(self): def __init__(self):
super().__init__("Herb Hunter", max_lives=4) super().__init__("Herb Hunter", max_lives=4)
self.desc = "Quando un giocatore muore, pesca 2 carte" # self.desc = "Quando un giocatore muore, pesca 2 carte"
self.desc_eng = "Whenever a player dies, he draws 2 cards" # self.desc_eng = "Whenever a player dies, he draws 2 cards"
self.icon = '⚰️' self.icon = '⚰️'
class ElenaFuente(Character): class ElenaFuente(Character):
def __init__(self): def __init__(self):
super().__init__("Elena Fuente", max_lives=3) super().__init__("Elena Fuente", max_lives=3)
self.desc = "Può usare una carta qualsiasi nella sua mano come mancato" # self.desc = "Può usare una carta qualsiasi nella sua mano come mancato"
self.desc_eng = "She can use any card of her hand as missed" # self.desc_eng = "She can use any card of her hand as missed"
self.icon = '🧘‍♀️' self.icon = '🧘‍♀️'
class BillNoface(Character): class BillNoface(Character):
def __init__(self): def __init__(self):
super().__init__("Bill Noface", max_lives=4) super().__init__("Bill Noface", max_lives=4)
self.desc = "All'inizio del turno pesca 1 carta + 1 carta per ogni ferita che ha" # self.desc = "All'inizio del turno pesca 1 carta + 1 carta per ogni ferita che ha"
self.desc_eng = "Draw 1 card + 1 card for each wound he has" # self.desc_eng = "Draw 1 card + 1 card for each wound he has"
self.icon = '🙈' self.icon = '🙈'
class MollyStark(Character): class MollyStark(Character):
def __init__(self): def __init__(self):
super().__init__("Molly Stark", max_lives=4) super().__init__("Molly Stark", max_lives=4)
self.desc = "Quando usa volontariamente una carta che ha in mano, fuori dal suo turno, ne ottiene un'altra dal mazzo" # self.desc = "Quando usa volontariamente una carta che ha in mano, fuori dal suo turno, ne ottiene un'altra dal mazzo"
self.desc_eng = "When she uses a card from her hand outside her turn, she draws a card." # self.desc_eng = "When she uses a card from her hand outside her turn, she draws a card."
self.icon = '🙅‍♀️' self.icon = '🙅‍♀️'
class ApacheKid(Character): class ApacheKid(Character):
def __init__(self): def __init__(self):
super().__init__("Apache Kid", max_lives=3) super().__init__("Apache Kid", max_lives=3)
self.desc = "Le carte di quadri ♦️ giocate contro di lui non hanno effetto (non vale durante i duelli)" # self.desc = "Le carte di quadri ♦️ giocate contro di lui non hanno effetto (non vale durante i duelli)"
self.desc_eng = "Cards of diamonds ♦️ played against him, do no have effect (doesn't work in duels)." # self.desc_eng = "Cards of diamonds ♦️ played against him, do no have effect (doesn't work in duels)."
self.icon = '♦️' self.icon = '♦️'
class SeanMallory(Character): class SeanMallory(Character):
def __init__(self): def __init__(self):
super().__init__("Sean Mallory", max_lives=3) super().__init__("Sean Mallory", max_lives=3)
self.desc = "Quando finisce il suo turno può tenere fino a 10 carte in mano" # self.desc = "Quando finisce il suo turno può tenere fino a 10 carte in mano"
self.desc_eng = "He can keep up to 10 cards in his hand when ending the turn." # self.desc_eng = "He can keep up to 10 cards in his hand when ending the turn."
self.icon = '🍟' self.icon = '🍟'
class BelleStar(Character): class BelleStar(Character):
def __init__(self): def __init__(self):
super().__init__("Belle Star", max_lives=4) super().__init__("Belle Star", max_lives=4)
self.desc = "Nel suo turno le carte verdi degli altri giocatori non hanno effetto." # self.desc = "Nel suo turno le carte verdi degli altri giocatori non hanno effetto."
self.desc_eng = "During her turn the green cards of the other players do not work." # self.desc_eng = "During her turn the green cards of the other players do not work."
self.icon = '' self.icon = ''
class VeraCuster(Character): class VeraCuster(Character):
def __init__(self): def __init__(self):
super().__init__("Vera Custer", max_lives=3) super().__init__("Vera Custer", max_lives=3)
self.desc = "Prima di pescare le sue carte può scegliere l'abilità speciale di un altro giocatore fino al prossimo turno." # self.desc = "Prima di pescare le sue carte può scegliere l'abilità speciale di un altro giocatore fino al prossimo turno."
self.desc_eng = "Before drawing, she may choose the special ability on another alive player. This ability is used until next turn." # self.desc_eng = "Before drawing, she may choose the special ability on another alive player. This ability is used until next turn."
self.icon = '🎭' self.icon = '🎭'
class ChuckWengam(Character): class ChuckWengam(Character):
def __init__(self): def __init__(self):
super().__init__("Chuck Wengam", max_lives=4) super().__init__("Chuck Wengam", max_lives=4)
self.desc = "Durante il suo turno può perdere una vita per pescare 2 carte dal mazzo." # self.desc = "Durante il suo turno può perdere una vita per pescare 2 carte dal mazzo."
self.desc_eng = "On his turn he may decide to lose 1 HP to draw 2 cards from the deck." # self.desc_eng = "On his turn he may decide to lose 1 HP to draw 2 cards from the deck."
self.icon = '💰' self.icon = '💰'
class PatBrennan(Character): class PatBrennan(Character):
def __init__(self): def __init__(self):
super().__init__("Pat Brennan", max_lives=4) super().__init__("Pat Brennan", max_lives=4)
self.desc = "Invece di pescare può prendere una carta dall'equipaggiamento di un altro giocatore." # self.desc = "Invece di pescare può prendere una carta dall'equipaggiamento di un altro giocatore."
self.desc_eng = "Instead of drawing he can steal a card from the equipment of another player." # self.desc_eng = "Instead of drawing he can steal a card from the equipment of another player."
self.icon = '🤗' self.icon = '🤗'
class JoseDelgrado(Character): class JoseDelgrado(Character):
def __init__(self): def __init__(self):
super().__init__("José Delgrado", max_lives=4) super().__init__("José Delgrado", max_lives=4)
self.desc = "Può scartare una carta blu per pescare 2 carte." # self.desc = "Può scartare una carta blu per pescare 2 carte."
self.desc_eng = "He can discard a blue card to draw 2 cards." # self.desc_eng = "He can discard a blue card to draw 2 cards."
self.icon = '🎒' self.icon = '🎒'
class DocHolyday(Character): class DocHolyday(Character):
def __init__(self): def __init__(self):
super().__init__("Doc Holyday", max_lives=4) super().__init__("Doc Holyday", max_lives=4)
self.desc = "Nel suo turno può scartare 2 carte per fare un bang." # self.desc = "Nel suo turno può scartare 2 carte per fare un bang."
self.desc_eng = "He can discard 2 cards to play a bang." # self.desc_eng = "He can discard 2 cards to play a bang."
self.icon = '✌🏻' self.icon = '✌🏻'
def all_characters() -> List[Character]: def all_characters() -> List[Character]:
return [ cards = [
PixiePete(), PixiePete(),
TequilaJoe(), TequilaJoe(),
GregDigger(), GregDigger(),
@ -124,6 +124,9 @@ def all_characters() -> List[Character]:
JoseDelgrado(), JoseDelgrado(),
DocHolyday(), DocHolyday(),
] ]
for c in cards:
c.expansion_icon = '🐄️'
return cards
#Apache Kid: il suo effetto non conta nei duelli #Apache Kid: il suo effetto non conta nei duelli
#belle star: vale solo per le carte blu e verdi #belle star: vale solo per le carte blu e verdi

View File

@ -99,14 +99,14 @@ class Game:
print(self.name) print(self.name)
print(self.players[i].name) print(self.players[i].name)
print(self.players[i].character) print(self.players[i].character)
self.sio.emit('chat_message', room=self.name, data=f'_choose_character|{self.players[i].name}|{self.players[i].character.name}|{self.players[i].character.desc}|{self.players[i].character.desc_eng}') self.sio.emit('chat_message', room=self.name, data=f'_choose_character|{self.players[i].name}|{self.players[i].character.name}')
self.players[i].prepare() self.players[i].prepare()
for k in range(self.players[i].max_lives): for k in range(self.players[i].max_lives):
self.players[i].hand.append(self.deck.draw()) self.players[i].hand.append(self.deck.draw())
self.players[i].notify_self() self.players[i].notify_self()
current_roles = [type(x.role).__name__ for x in self.players] current_roles = [x.role.name for x in self.players]
random.shuffle(current_roles) random.shuffle(current_roles)
current_roles = str({x:current_roles.count(x) for x in current_roles}).replace('{','').replace('}','') current_roles = '|'.join([x + '|' + str(current_roles.count(x)) for x in current_roles])
self.sio.emit('chat_message', room=self.name, data=f'_allroles|{current_roles}') self.sio.emit('chat_message', room=self.name, data=f'_allroles|{current_roles}')
self.play_turn() self.play_turn()

View File

@ -7,14 +7,18 @@
<h2>{{$t("warning")}}</h2> <h2>{{$t("warning")}}</h2>
<p>{{$t("connection_error")}}</p> <p>{{$t("connection_error")}}</p>
</div> </div>
<select id="lang" style="position:fixed;bottom:4pt;right:4pt;" v-model="$i18n.locale" @change="storeLangPref"> <help v-if="showHelp"/>
<option <div style="position:fixed;bottom:4pt;right:4pt;display:flex;">
v-for="(lang, i) in ['it.🇮🇹.Italiano', 'en.🇬🇧.English']" <input type="button" :value="(showHelp?'X':'?')" style="min-width:28pt;border-radius:100%;cursor:pointer;" @click="getHelp"/>
:key="`lang-${i}`" <select id="lang" v-model="$i18n.locale" @change="storeLangPref">
:value="lang.split('.')[0]"> <option
{{lang.split('.')[1]}} {{lang.split('.')[2]}} v-for="(lang, i) in ['it.🇮🇹.Italiano', 'en.🇬🇧.English']"
</option> :key="`lang-${i}`"
</select> :value="lang.split('.')[0]">
{{lang.split('.')[1]}} {{lang.split('.')[2]}}
</option>
</select>
</div>
<label for="lang" style="opacity:0" >Language</label> <label for="lang" style="opacity:0" >Language</label>
<div v-if="showUpdateUI" style="position: fixed;bottom: 0;z-index: 1;background: rgba(0,0,0,0.5);padding: 20pt;" class="center-stuff"> <div v-if="showUpdateUI" style="position: fixed;bottom: 0;z-index: 1;background: rgba(0,0,0,0.5);padding: 20pt;" class="center-stuff">
<p class="update-dialog__content"> <p class="update-dialog__content">
@ -29,14 +33,17 @@
</template> </template>
<script> <script>
import Help from './components/Help.vue';
// import Vue from 'vue' // import Vue from 'vue'
export default { export default {
components: { Help },
name: 'App', name: 'App',
data: () => ({ data: () => ({
isConnected: false, isConnected: false,
c: false, c: false,
showUpdateUI: false, showUpdateUI: false,
showHelp:false,
}), }),
computed: { computed: {
}, },
@ -57,6 +64,10 @@ export default {
}, },
}, },
methods: { methods: {
getHelp() {
this.showHelp = !this.showHelp
// window.open(`${window.location.origin}/help`, '_blank')
},
storeLangPref() { storeLangPref() {
localStorage.setItem('lang', this.$i18n.locale) localStorage.setItem('lang', this.$i18n.locale)
}, },
@ -81,6 +92,9 @@ export default {
<style> <style>
@import '../node_modules/pretty-checkbox/dist/pretty-checkbox.css'; @import '../node_modules/pretty-checkbox/dist/pretty-checkbox.css';
html {
scroll-behavior: smooth;
}
#app { #app {
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;

View File

@ -4,6 +4,7 @@
<div class="emoji">{{card.icon}}</div> <div class="emoji">{{card.icon}}</div>
<div class="alt_text">{{card.alt_text}}</div> <div class="alt_text">{{card.alt_text}}</div>
<div class="suit">{{number}}{{suit}}</div> <div class="suit">{{number}}{{suit}}</div>
<div class="expansion" v-if="card.expansion_icon">{{card.expansion_icon}}</div>
</div> </div>
</template> </template>
@ -11,12 +12,13 @@
export default { export default {
name: 'Card', name: 'Card',
props: { props: {
card: Object card: Object,
donotlocalize: Boolean
}, },
computed: { computed: {
cardName(){ cardName(){
console.log(this.$t(`cards.${this.card.name}.name`)) // console.log(this.$t(`cards.${this.card.name}.name`))
if (this.$t(`cards.${this.card.name}.name`) !== `cards.${this.card.name}.name`) { if (!this.donotlocalize && this.$t(`cards.${this.card.name}.name`) !== `cards.${this.card.name}.name`) {
return this.$t(`cards.${this.card.name}.name`) return this.$t(`cards.${this.card.name}.name`)
} }
return this.card.name return this.card.name
@ -55,7 +57,7 @@ export default {
position: relative; position: relative;
transition: all 0.5s ease-in-out; transition: all 0.5s ease-in-out;
color: #333; color: #333;
overflow: hidden; /* overflow: hidden; */
text-overflow: ellipsis; text-overflow: ellipsis;
word-wrap: normal; word-wrap: normal;
/* word-wrap: break-word; */ /* word-wrap: break-word; */
@ -144,7 +146,18 @@ export default {
.cant-play { .cant-play {
filter: brightness(0.5); filter: brightness(0.5);
} }
.expansion {
position: absolute;
bottom: -5pt;
right: -5pt;
background: white;
border-radius: 100%;
transform: scale(0.8);
}
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
.expansion {
background: #181a1b;
}
:root, #app { :root, #app {
background-color: #181a1b; background-color: #181a1b;
color: rgb(174, 194, 211); color: rgb(174, 194, 211);

View File

@ -2,10 +2,12 @@
<div class="chat"> <div class="chat">
<h4 v-if="spectators > 0">{{$tc("chat.spectators", spectators)}}</h4> <h4 v-if="spectators > 0">{{$tc("chat.spectators", spectators)}}</h4>
<h3>{{$t("chat.chat")}}</h3> <h3>{{$t("chat.chat")}}</h3>
<div id="chatbox"> <transition-group name="message" tag="div" id="chatbox">
<!-- <div id="chatbox"> -->
<p style="margin:1pt;" class="chat-message selectable" v-for="(msg, i) in messages" v-bind:key="`${i}-c`" :style="`color:${msg.color}`">{{msg.text}}</p> <p style="margin:1pt;" class="chat-message selectable" v-for="(msg, i) in messages" v-bind:key="`${i}-c`" :style="`color:${msg.color}`">{{msg.text}}</p>
<p class="end">.</p> <p class="end" key="end" style="color:#0000">.</p>
</div> <!-- </div> -->
</transition-group>
<form @submit="sendChatMessage" id="msg-form"> <form @submit="sendChatMessage" id="msg-form">
<input v-model="text" style="flex-grow:2;"/> <input v-model="text" style="flex-grow:2;"/>
<input type="submit" :value="$t('submit')"/> <input type="submit" :value="$t('submit')"/>
@ -32,12 +34,20 @@ export default {
}), }),
sockets: { sockets: {
chat_message(msg) { chat_message(msg) {
console.log(msg) // console.log(msg)
if ((typeof msg === "string") && msg.indexOf('_') === 0) { if ((typeof msg === "string") && msg.indexOf('_') === 0) {
let params = msg.split('|') let params = msg.split('|')
let type = params.shift().substring(1) let type = params.shift().substring(1)
if (["flipped", "respond", "play_card", "play_card_against", "play_card_for", "spilled_beer", "diligenza", "wellsfargo", "saloon", "special_calamity"].indexOf(type) !== -1){ if (["flipped", "respond", "play_card", "play_card_against", "play_card_for", "spilled_beer", "diligenza", "wellsfargo", "saloon", "special_calamity"].indexOf(type) !== -1){
params[1] = this.$t(`cards.${params[1]}.name`) params[1] = this.$t(`cards.${params[1]}.name`)
} else if (type === "choose_character"){
params.push(this.$t(`cards.${params[1]}.desc`))
} else if (type === "allroles") {
params.forEach((p,i)=>{
if (i%2 === 0) {
params[i] = this.$t(`cards.${params[i]}.name`)
}
})
} }
this.messages.push({text:this.$t(`chat.${type}`, params)}); this.messages.push({text:this.$t(`chat.${type}`, params)});
if (type == 'turn' && params[0] == this.username) { if (type == 'turn' && params[0] == this.username) {
@ -107,6 +117,13 @@ input {
padding:0; padding:0;
display:flex; display:flex;
} }
.message-enter-active, .message-leave-active {
transition: all 1s;
}
.message-enter, .message-leave-to /* .list-leave-active below version 2.1.8 */ {
opacity: 0;
transform: translateX(30px);
}
@media only screen and (min-width:1000px) { @media only screen and (min-width:1000px) {
.chat { .chat {
height: 90vh; height: 90vh;

View File

@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<div class="deck"> <div class="deck">
<card v-if="endTurnAction && isPlaying" v-show="pending_action == 2" :card="endTurnCard" class="end-turn" @click.native="endTurnAction"/> <card v-if="endTurnAction && isPlaying" :donotlocalize="true" v-show="pending_action == 2" :card="endTurnCard" class="end-turn" @click.native="endTurnAction"/>
<div v-if="eventCard" style="position:relative"> <div v-if="eventCard" style="position:relative">
<div class="card fistful-of-cards" style="position:relative; bottom:-3pt;right:-3pt;"/> <div class="card fistful-of-cards" style="position:relative; bottom:-3pt;right:-3pt;"/>
<div class="card fistful-of-cards" style="position:absolute; bottom:-1.5pt;right:-1.5pt;"/> <div class="card fistful-of-cards" style="position:absolute; bottom:-1.5pt;right:-1.5pt;"/>
@ -10,7 +10,7 @@
<div style="position:relative"> <div style="position:relative">
<div class="card back" style="position:absolute; bottom:-3pt;right:-3pt;"/> <div class="card back" style="position:absolute; bottom:-3pt;right:-3pt;"/>
<div class="card back" style="position:absolute; bottom:-1.5pt;right:-1.5pt;"/> <div class="card back" style="position:absolute; bottom:-1.5pt;right:-1.5pt;"/>
<card :card="card" :class="{back:true, pick:pending_action === 0, draw:pending_action === 1}" @click.native="action"/> <card :card="card" :donotlocalize="true" :class="{back:true, pick:pending_action === 0, draw:pending_action === 1}" @click.native="action"/>
</div> </div>
<div style="position:relative;"> <div style="position:relative;">
<card v-if="previousScrap" :card="previousScrap" style="top: 1.5pt;right: -1.5pt;"/> <card v-if="previousScrap" :card="previousScrap" style="top: 1.5pt;right: -1.5pt;"/>
@ -88,7 +88,7 @@ export default {
methods: { methods: {
action(pile) { action(pile) {
if (this.pending_action !== false && this.pending_action < 2) { if (this.pending_action !== false && this.pending_action < 2) {
console.log('action') // console.log('action')
if (this.pending_action == 0) if (this.pending_action == 0)
this.$socket.emit('pick') this.$socket.emit('pick')
else if (this.pending_action == 1) else if (this.pending_action == 1)

View File

@ -6,7 +6,6 @@
</form> </form>
<p v-if="hintText">{{hintText}}</p> <p v-if="hintText">{{hintText}}</p>
<div style="margin-top:6pt;" class="button center-stuff" v-if="showCancelBtn && val" @click="cancel(val)"><span>{{realCancelText}}</span></div> <div style="margin-top:6pt;" class="button center-stuff" v-if="showCancelBtn && val" @click="cancel(val)"><span>{{realCancelText}}</span></div>
<p v-if="desc" style="bottom:10pt;right:0;left:0;position:absolute;margin:16pt;font-size:18pt">{{desc}}</p>
</div> </div>
</template> </template>
@ -25,7 +24,6 @@ export default {
}, },
data: () => ({ data: () => ({
val: '', val: '',
desc: '',
realCancelText: '' realCancelText: ''
}), }),
computed: { computed: {
@ -36,12 +34,6 @@ export default {
} }
}, },
methods: { methods: {
showDesc(card) {
if (card.desc)
this.desc = (this.$i18n.locale=='it'?card.desc:card.desc_eng)
else
this.desc = this.$t(`cards.${card.name}.desc`)
},
submit(e) { submit(e) {
e.preventDefault(); e.preventDefault();
this.cancel(this.val); this.cancel(this.val);

View File

@ -0,0 +1,166 @@
<template>
<div>
<h1 id="help">{{$t('help.title')}}</h1>
<h2>{{$t('help.character')}}</h2>
<p>{{$t('help.characters_special')}}</p>
<a href="#basecharacters"><p>{{$t('help.gotoallcharacters')}}</p></a>
<h2>{{$t('help.roles')}}</h2>
<div style="display:flex;">
<card :card="{name:$t('help.sheriff'), icon:'⭐️'}" :class="{back:true}"/>
<card :card="{name:$t('help.outlaw'), icon:'🐺️'}" :class="{back:true}"/>
<card :card="{name:$t('help.renegade'), icon:'🦅️'}" :class="{back:true}"/>
<card :card="{name:$t('help.vice'), icon:'🎖️'}" :class="{back:true}"/>
</div>
<h2>{{$t('help.turns')}}</h2>
<p>{{$t('help.turnstart')}}</p>
<ol>
<li><p>{{$t('help.turndraw')}} </p></li>
<li><p>{{$t('help.turnplay')}} </p></li>
<li><p>{{$t('help.turndiscard')}}</p></li>
</ol>
<h3>{{$t('help.drawthecards')}}</h3>
<p>{{$t('help.drawinstructions')}}<p>
<div style="display:flex" class="center-stuff">
<div style="position:relative">
<div class="card back" style="position:absolute; bottom:-3pt;right:-3pt;"/>
<div class="card back" style="position:absolute; bottom:-1.5pt;right:-1.5pt;"/>
<card :card="cardBack" :class="{back:true, draw:true}" @click.native="action"/>
</div>
</div>
<h3>{{$t('help.playingcards')}}</h3>
<p>{{$t('help.playingdmg')}}</p>
<p>{{$t('help.playingduringturn')}}</p>
<p><b>{{$t('help.playingifyouwant')}}</b></p>
<p>{{$t('help.playlimit')}}</p>
<ul>
<li><p>{{$t('help.playonlyonebang')}}</p></li>
<li><p>{{$t('help.maxtwocardsequip')}}</p></li>
<li><p>{{$t('help.justoneweapon')}}</p></li>
</ul>
<h3>{{$t('help.discard')}}</h3>
<p>{{$t('help.endingturn')}}</p>
<card :card="endTurnCard" class="end-turn" @click.native="alert('')"/>
<h3>{{$t('help.distance')}}</h3>
<p>{{$t('help.distancecalc')}}</p>
<h3>{{$t('help.playerdeath')}}</h3>
<p>{{$t('help.deathnobeer')}}</p>
<h3>{{$t('help.rewardspen')}}</h3>
<ul>
<li><p>{{$t('help.sheriffkillsvice')}}</p></li>
<li><p>{{$t('help.outlawreward')}}</p></li>
</ul>
<h2>{{$t('help.endgame')}}</h2>
<p>{{$t('help.endgameconditions')}}</p>
<ul>
<li><p>{{$t('help.endgameshriffdeath')}}</p></li>
<li><p>{{$t('help.endgamesheriffwin')}}</p></li>
</ul>
<h2>{{$t('help.thecards')}}</h2>
<div>
<div v-for="(c, i) in cards" v-bind:key="c.name ? (c.name+c.number) : i" style="display:flex">
<Card :card="c" @pointerenter.native="''" @pointerleave.native="''"/>
<div style="margin-left:6pt;">
<p>{{$t(`cards.${c.name}.desc`)}}</p>
<p v-if="c.is_equipment"><b>{{$t('help.equipment')}}</b></p>
<p v-if="c.is_weapon"><b>{{$t('help.weapon')}}</b></p>
</div>
</div>
</div>
<h2 id="basecharacters">{{$t('help.allcharacters')}}</h2>
<div>
<div v-for="(c, i) in characters" v-bind:key="c.name ? (c.name+c.number) : i" style="display:flex">
<Card :card="c" @pointerenter.native="''" @pointerleave.native="''"/>
<div style="margin-left:6pt;">
<p>{{$t(`cards.${c.name}.desc`)}}</p>
</div>
</div>
</div>
</div>
</template>
<script>
import Card from './Card'
export default {
name: 'Help',
components: {
Card,
},
data:()=>({
cardBack: {
name: 'PewPew!',
icon: '💥',
},
cards: [],
characters: [],
}),
computed: {
endTurnCard() {
return {
name: this.$t('end_turn'),
icon: '⛔️'
}
},
},
sockets: {
cards_info(cardsJson) {
this.cards = JSON.parse(cardsJson)
},
characters_info(cardsJson) {
this.characters = JSON.parse(cardsJson).map(x=>({
...x,
is_character:true,
}))
},
},
mounted() {
this.$socket.emit('get_cards')
this.$socket.emit('get_characters')
document.getElementById('help').scrollIntoView();
}
}
</script>
<style scoped>
@keyframes pick {
0% {
transform: translate(0,0);
z-index: 1;
}
50% {
transform: translate(-10px,0);
z-index: 1;
}
100% {
transform: translate(0,0);
z-index: 1;
}
}
@keyframes draw {
0% {
transform: translate(0,0);
z-index: 1;
}
50% {
transform: translate(0,10px);
z-index: 1;
}
100% {
transform: translate(0,0);
z-index: 1;
}
}
.pick {
animation-duration: 2s;
animation-name: pick;
animation-iteration-count: infinite;
}
.draw {
animation-duration: 2s;
animation-name: draw;
animation-iteration-count: infinite;
}
.end-turn {
box-shadow:
0 0 0 3pt rgb(138, 12, 12),
0 0 0 6pt white,
0 0 5pt 6pt #aaa !important;
}
</style>

View File

@ -13,7 +13,7 @@
</div> </div>
<div class="players-table"> <div class="players-table">
<Card v-if="startGameCard" :card="startGameCard" @click.native="startGame"/> <Card v-if="startGameCard" :donotlocalize="true" :card="startGameCard" @click.native="startGame"/>
<!-- <div style="position: relative;width:260pt;height:400pt;"> --> <!-- <div style="position: relative;width:260pt;height:400pt;"> -->
<div v-for="p in playersTable" v-bind:key="p.card.name" style="position:relative;"> <div v-for="p in playersTable" v-bind:key="p.card.name" style="position:relative;">
<transition-group v-if="p.max_lives && !p.is_ghost" name="list" tag="div" class="tiny-health"> <transition-group v-if="p.max_lives && !p.is_ghost" name="list" tag="div" class="tiny-health">
@ -23,7 +23,7 @@
<div v-else-if="p.is_ghost" class="tiny-health"> <div v-else-if="p.is_ghost" class="tiny-health">
<span>👻</span> <span>👻</span>
</div> </div>
<Card :card="p.card" :class="{is_my_turn:p.is_my_turn}"/> <Card :card="p.card" :donotlocalize="true" :class="{is_my_turn:p.is_my_turn}"/>
<Card v-if="p.character" :card="p.character" class="character tiny-character" @click.native="selectedInfo = [p.character]"/> <Card v-if="p.character" :card="p.character" class="character tiny-character" @click.native="selectedInfo = [p.character]"/>
<Card v-if="p.character && p.character.name !== p.real_character.name" style="transform:scale(0.5) translate(-90px, -50px);" :card="p.character" class="character tiny-character" @click.native="selectedInfo = [p.character]"/> <Card v-if="p.character && p.character.name !== p.real_character.name" style="transform:scale(0.5) translate(-90px, -50px);" :card="p.character" class="character tiny-character" @click.native="selectedInfo = [p.character]"/>
<tiny-hand :ncards="p.ncards" @click.native="drawFromPlayer(p.name)" :ismyturn="p.pending_action === 2"/> <tiny-hand :ncards="p.ncards" @click.native="drawFromPlayer(p.name)" :ismyturn="p.pending_action === 2"/>
@ -382,7 +382,8 @@ export default {
flex-direction: row; flex-direction: row;
} }
.chat { .chat {
max-width: 350pt; min-width: 25vw;
max-width: 25vw;
} }
} }
</style> </style>

View File

@ -16,7 +16,7 @@
<div v-else> <div v-else>
<div v-if="!isInLobby" > <div v-if="!isInLobby" >
<p>{{$t("online_players")}}{{onlinePlayers}}</p> <p>{{$t("online_players")}}{{onlinePlayers}}</p>
<Card :card="getSelfCard" style="position:absolute; top:10pt; left: 10pt;"/> <Card :card="getSelfCard" :donotlocalize="true" style="position:absolute; top:10pt; left: 10pt;"/>
<form @submit="createLobby"> <form @submit="createLobby">
<h2>{{$t("create_lobby")}}</h2> <h2>{{$t("create_lobby")}}</h2>
<p>{{$t("lobby_name")}}</p> <p>{{$t("lobby_name")}}</p>
@ -91,7 +91,7 @@ export default {
}, },
players(num) { players(num) {
this.onlinePlayers = num; this.onlinePlayers = num;
console.log('PLAYERS:' + num) // console.log('PLAYERS:' + num)
} }
}, },
methods: { methods: {

View File

@ -6,7 +6,7 @@
<Card v-if="my_role" :card="my_role" class="back" <Card v-if="my_role" :card="my_role" class="back"
@pointerenter.native="desc=($i18n.locale=='it'?my_role.goal:my_role.goal_eng)" @pointerleave.native="desc=''"/> @pointerenter.native="desc=($i18n.locale=='it'?my_role.goal:my_role.goal_eng)" @pointerleave.native="desc=''"/>
<Card v-if="character" :card="character" style="margin-left: -30pt;margin-right: 0pt;" <Card v-if="character" :card="character" style="margin-left: -30pt;margin-right: 0pt;"
@pointerenter.native="desc=($i18n.locale=='it'?character.desc:character.desc_eng)" @pointerleave.native="desc=''"/> @pointerenter.native="setDesc(character)" @pointerleave.native="desc=''"/>
<transition-group name="list" tag="div" style="display: flex;flex-direction:column; justify-content: space-evenly; margin-left: 12pt;margin-right:-10pt;"> <transition-group name="list" tag="div" style="display: flex;flex-direction:column; justify-content: space-evenly; margin-left: 12pt;margin-right:-10pt;">
<span v-for="(n, i) in lives" v-bind:key="i" :alt="i"></span> <span v-for="(n, i) in lives" v-bind:key="i" :alt="i"></span>
<span v-for="(n, i) in (max_lives-lives)" v-bind:key="`${i}-sk`" :alt="i">💀</span> <span v-for="(n, i) in (max_lives-lives)" v-bind:key="`${i}-sk`" :alt="i">💀</span>
@ -161,8 +161,8 @@ export default {
} }
}, },
self_vis(vis) { self_vis(vis) {
console.log('received visibility update') // console.log('received visibility update')
console.log(vis) // console.log(vis)
this.playersDistances = JSON.parse(vis) this.playersDistances = JSON.parse(vis)
}, },
notify_card(mess) { notify_card(mess) {
@ -306,7 +306,7 @@ export default {
this.$socket.emit('chuck_lose_hp_draw') this.$socket.emit('chuck_lose_hp_draw')
}, },
end_turn(){ end_turn(){
console.log('ending turn') // console.log('ending turn')
this.cancelEndingTurn() this.cancelEndingTurn()
this.$socket.emit('end_turn') this.$socket.emit('end_turn')
}, },
@ -379,7 +379,7 @@ export default {
with: this.handComputed.indexOf(this.card_with) > -1 ? this.handComputed.indexOf(this.card_with):null, with: this.handComputed.indexOf(this.card_with) > -1 ? this.handComputed.indexOf(this.card_with):null,
} }
this.card_with = null this.card_with = null
console.log(card_data) // console.log(card_data)
this.$socket.emit('play_card', card_data) this.$socket.emit('play_card', card_data)
}, },
choose(card) { choose(card) {

View File

@ -1,297 +1,476 @@
{ {
"trademark": "Bang! is a trademark owned by DVGiochi", "trademark": "Bang! is a trademark owned by DVGiochi",
"online_players": "Online players: ", "online_players": "Online players: ",
"choose_username": "Pick an username:", "choose_username": "Pick an username:",
"available_lobbies": "Available Lobbies:", "available_lobbies": "Available Lobbies:",
"spectate_lobbies": "Spectate ongoing games:", "spectate_lobbies": "Spectate ongoing games:",
"no_lobby_available": "No lobbies available", "no_lobby_available": "No lobbies available",
"create_lobby": "Open a lobby:", "create_lobby": "Open a lobby:",
"lobby_name": "Name:", "lobby_name": "Name:",
"leave_room": "Leave lobby", "leave_room": "Leave lobby",
"warning": "Warning!", "warning": "Warning!",
"connection_error": "Cannot connect to server.", "connection_error": "Cannot connect to server.",
"end_turn": "End Turn!", "end_turn": "End Turn!",
"start_game": "Start!", "start_game": "Start!",
"expansions": "Expansions", "expansions": "Expansions",
"details": "Details", "details": "Details",
"ok": "OK", "ok": "OK",
"you": "YOU", "you": "YOU",
"owner": "OWNER", "owner": "OWNER",
"cancel": "CANCEL", "cancel": "CANCEL",
"password": "Password: ", "password": "Password: ",
"room_password_prompt": "Lobby Password: ", "room_password_prompt": "Lobby Password: ",
"private_room": "Private Lobby", "private_room": "Private Lobby",
"room": "Lobby: ", "room": "Lobby: ",
"room_players": "Players (you are {username})", "room_players": "Players (you are {username})",
"choose_character": "Choose your character", "choose_character": "Choose your character",
"choose_card": "Choose a card", "choose_card": "Choose a card",
"choose_card_from": " from ", "choose_card_from": " from ",
"flip_card": "↙️ Flip a card", "flip_card": "↙️ Flip a card",
"draw_cards": "⏬ Draw you cards from the deck", "draw_cards": "⏬ Draw you cards from the deck",
"play_cards": "▶️ Play your cards", "play_cards": "▶️ Play your cards",
"respond_card": "↩️ Respond to the card", "respond_card": "↩️ Respond to the card",
"wait": "⏸ Wait", "wait": "⏸ Wait",
"choose_cards": "🔽 Choose a card", "choose_cards": "🔽 Choose a card",
"take_dmg": "Take damage", "take_dmg": "Take damage",
"choose_response": "Choose your response ", "choose_response": "Choose your response ",
"choose_response_to": "to ", "choose_response_to": "to ",
"choose_response_needed": "NEEDED ", "choose_response_needed": "NEEDED ",
"hand": "HAND", "hand": "HAND",
"card_against": "Who will you play your card against?", "card_against": "Who will you play your card against?",
"choose_card_to_get": "Choose a card", "choose_card_to_get": "Choose a card",
"choose_guess": "Guess the color of the suit", "choose_guess": "Guess the color of the suit",
"choose_ranch": "Choose the cards to replace", "choose_ranch": "Choose the cards to replace",
"choose_dalton": "Choose which equipment to discard", "choose_dalton": "Choose which equipment to discard",
"choose_fratelli_di_sangue": "Choose who you want to donate one of your lives", "choose_fratelli_di_sangue": "Choose who you want to donate one of your lives",
"choose_cecchino": "Choose who to shoot", "choose_cecchino": "Choose who to shoot",
"choose_rimbalzo_player": "Choose the target of the bang", "choose_rimbalzo_player": "Choose the target of the bang",
"choose_rimbalzo_card": "Choose the card to discard the bang to", "choose_rimbalzo_card": "Choose the card to discard the bang to",
"emporio_others": "{0} is choosing which card to get from the General Store", "emporio_others": "{0} is choosing which card to get from the General Store",
"you_died": "YOU DIED", "you_died": "YOU DIED",
"spectate": "SPECTATE", "spectate": "SPECTATE",
"you_win": "YOU WON", "you_win": "YOU WON",
"you_lose": "YOU LOST", "you_lose": "YOU LOST",
"special_ability": "SPECIAL ABILITY", "special_ability": "SPECIAL ABILITY",
"discard": "DISCARD", "discard": "DISCARD",
"to_regain_1_hp": "TO REGAIN 1 HP", "to_regain_1_hp": "TO REGAIN 1 HP",
"play_your_turn": "PLAY YOUR TURN", "play_your_turn": "PLAY YOUR TURN",
"you_are": "You are", "you_are": "You are",
"did_pick_as": "picked this as second card", "did_pick_as": "picked this as second card",
"blackjack_special": "If the card is diamonds or hearts, he picks another card.", "blackjack_special": "If the card is diamonds or hearts, he picks another card.",
"choose_scarp_card_to": "CHOOSE WHICH CARD TO DISCARD TO USE", "choose_scarp_card_to": "CHOOSE WHICH CARD TO DISCARD TO USE",
"pick_a_card": "FLIP A CARD", "pick_a_card": "FLIP A CARD",
"to_defend_from": "TO DEFEND YOURSELF FROM", "to_defend_from": "TO DEFEND YOURSELF FROM",
"submit": "Submit", "submit": "Submit",
"copy": "Copy invite", "copy": "Copy invite",
"no_players_in_range": "You can't see the other players, equip a weapon or a scope!", "no_players_in_range": "You can't see the other players, equip a weapon or a scope!",
"chat": { "chat": {
"spectators": " | A spectator is watching the game | {n} spectators are watching the game", "spectators": " | A spectator is watching the game | {n} spectators are watching the game",
"chat": "Chat", "chat": "Chat",
"joined": "{0} joined the lobby", "joined": "{0} joined the lobby",
"died": "{0} died", "died": "{0} died",
"died_role": "{0} was a {1}!", "died_role": "{0} was a {1}!",
"won": "{0} won!", "won": "{0} won!",
"choose_character": "{0} has {1} as character, his special ability is: {3}!", "choose_character": "{0} has {1} as character, his special ability is: {2}!",
"starting": "The game is starting!", "starting": "The game is starting!",
"sheriff": "{0} is the sheriff!", "sheriff": "{0} is the sheriff!",
"did_choose_character": "{0} did choose the character.", "did_choose_character": "{0} did choose the character.",
"turn": "It is the turn of {0}.", "turn": "It is the turn of {0}.",
"draw_from_scrap": "{0} did draw the first card from the scrap pile.", "draw_from_scrap": "{0} did draw the first card from the scrap pile.",
"draw_from_player": "{0} did draw the first card from the hand of {1}.", "draw_from_player": "{0} did draw the first card from the hand of {1}.",
"flipped": "{0} flipped a {1} {2}.", "flipped": "{0} flipped a {1} {2}.",
"explode": "{0} blew up the dynamite.", "explode": "{0} blew up the dynamite.",
"beer_save": "{0} used a beer to save his life.", "beer_save": "{0} used a beer to save his life.",
"play_card": "{0} played {1}.", "play_card": "{0} played {1}.",
"play_card_against": "{0} played {1} against {2}.", "play_card_against": "{0} played {1} against {2}.",
"play_card_for": "{0} played {1} for {2}.", "play_card_for": "{0} played {1} for {2}.",
"spilled_beer": "{0} spilled a {1}.", "spilled_beer": "{0} spilled a {1}.",
"diligenza": "{0} played {1} and draws 2 cards.", "diligenza": "{0} played {1} and draws 2 cards.",
"wellsfargo": "{0} played {1} and draws 3 cards.", "wellsfargo": "{0} played {1} and draws 3 cards.",
"saloon": "{0} player {1} and heals 1 HP to everyone alive.", "saloon": "{0} player {1} and heals 1 HP to everyone alive.",
"special_bart_cassidy": "{0} received a compensation because he was injured.", "special_bart_cassidy": "{0} received a compensation because he was injured.",
"special_el_gringo": "{0} stole a card from {1} when he was was injured.", "special_el_gringo": "{0} stole a card from {1} when he was was injured.",
"special_calamity": "{0} played {1} as Bang! against {2}.", "special_calamity": "{0} played {1} as Bang! against {2}.",
"allroles": "In the game there are: {0}.", "allroles": "In the game there are: {1} {0}, {3} {2}, {5} {4}, {7} {6}.",
"guess": "{0} guesses {1}.", "guess": "{0} guesses {1}.",
"guess_right": "{0} was right.", "guess_right": "{0} was right.",
"guess_wrong": "{0} was wrong.", "guess_wrong": "{0} was wrong.",
"fratelli_sangue": "{0} gave one of his lives to {1}.", "fratelli_sangue": "{0} gave one of his lives to {1}.",
"doctor_heal": "{0} was healed by the doctor.", "doctor_heal": "{0} was healed by the doctor.",
"respond": "{0} responded with {1}.", "respond": "{0} responded with {1}.",
"change_username": "{0} is now {1}.", "change_username": "{0} is now {1}.",
"lobby_reset": "Going back to lobby in {0} seconds...", "lobby_reset": "Going back to lobby in {0} seconds...",
"prison_free": "{0} got out of prison", "prison_free": "{0} got out of prison",
"prison_turn": "{0} stayed in prison this turn" "prison_turn": "{0} stayed in prison this turn"
}, },
"foc": { "foc": {
"leggedelwest": "He must play this card on this turn if possible." "leggedelwest": "He must play this card on this turn if possible."
}, },
"mods": "Modifiers", "mods": "Modifiers",
"bots": "Bots", "bots": "Bots",
"add_bot": "Add a bot", "add_bot": "Add a bot",
"remove_bot": "Remove a bot", "remove_bot": "Remove a bot",
"minimum_players": "The game needs at least 3 players to start", "minimum_players": "The game needs at least 3 players to start",
"mod_comp": "Competitive mode (disables automatic take damage)", "mod_comp": "Competitive mode (disables automatic take damage)",
"disconnect_bot": "Replace players that disconnect with bots", "disconnect_bot": "Replace players that disconnect with bots",
"your_turn": "Play your turn!", "your_turn": "Play your turn!",
"your_response": "Respond!", "your_response": "Respond!",
"your_choose": "Choose a card!", "your_choose": "Choose a card!",
"cards": { "cards": {
"Barile": { "Barile": {
"name": "Barrel", "name": "Barrel",
"desc": "When someone plays a Bang against you. You can flip the first card from the deck, if the suit is Hearts then it counts as a Missed card" "desc": "When someone plays a Bang against you. You can flip the first card from the deck, if the suit is Hearts then it counts as a Missed card"
}, },
"Dinamite": { "Dinamite": {
"name": "Dynamite", "name": "Dynamite",
"desc": "When playing Dynamite, place it in front of you, it will remain harmless for a whole round. At the beginning of the next turn before drawing and before any card flip (eg Prison), flip a card from the top of the deck. If a card is between 2 and 9 of spades (inclusive) then the dynamite explodes: you lose 3 lives and discard the card, otherwise pass the dynamite to the next player, who will draw in turn after you have ended your turn" "desc": "When playing Dynamite, place it in front of you, it will remain harmless for a whole round. At the beginning of the next turn before drawing and before any card flip (eg Prison), flip a card from the top of the deck. If a card is between 2 and 9 of spades (inclusive) then the dynamite explodes: you lose 3 lives and discard the card, otherwise pass the dynamite to the next player, who will draw in turn after you have ended your turn"
}, },
"Mirino": { "Mirino": {
"name": "Scope", "name": "Scope",
"desc": "You see the other players at distance -1" "desc": "You see the other players at distance -1"
}, },
"Mustang": { "Mustang": {
"name": "Mustang", "name": "Mustang",
"desc": "The other players see you at distance +1" "desc": "The other players see you at distance +1"
}, },
"Prigione": { "Prigione": {
"name": "Prison", "name": "Prison",
"desc": "Equip this card to another player, except the Sheriff. The player chosen at the beginning of his turn, must flip a card before drawing: if it's Hearts, discard this card and play the turn normally, otherwise discard this card and skip the turn" "desc": "Equip this card to another player, except the Sheriff. The player chosen at the beginning of his turn, must flip a card before drawing: if it's Hearts, discard this card and play the turn normally, otherwise discard this card and skip the turn"
}, },
"Remington": { "Remington": {
"name": "Remington", "name": "Remington",
"desc": "You can shoot another player at distance 3 or less" "desc": "You can shoot another player at distance 3 or less"
}, },
"Rev Carabine": { "Rev Carabine": {
"name": "Rev. Carabine", "name": "Rev. Carabine",
"desc": "You can shoot another player at distance 4 or less" "desc": "You can shoot another player at distance 4 or less"
}, },
"Schofield": { "Schofield": {
"name": "Schofield", "name": "Schofield",
"desc": "You can shoot another player at distance 2 or less" "desc": "You can shoot another player at distance 2 or less"
}, },
"Volcanic": { "Volcanic": {
"name": "Volcanic", "name": "Volcanic",
"desc": "You can shoot another player at distance 1 or less, however you no longer have the limit of 1 Bang" "desc": "You can shoot another player at distance 1 or less, however you no longer have the limit of 1 Bang"
}, },
"Winchester": { "Winchester": {
"name": "Winchester", "name": "Winchester",
"desc": "You can shoot another player at distance 5 or less" "desc": "You can shoot another player at distance 5 or less"
}, },
"Bang!": { "Bang!": {
"name": "Bang!", "name": "Bang!",
"desc": "Shoot a player in sight. If you do not have weapons, your is sight is 1" "desc": "Shoot a player in sight. If you do not have weapons, your is sight is 1"
}, },
"Birra": { "Birra": {
"name": "Beer", "name": "Beer",
"desc": "Play this card to regain a life point. You cannot heal more than your character's maximum limit. If you are about to lose your last life point, you can also play this card on your opponent's turn. Beer no longer takes effect if there are only two players" "desc": "Play this card to regain a life point. You cannot heal more than your character's maximum limit. If you are about to lose your last life point, you can also play this card on your opponent's turn. Beer no longer takes effect if there are only two players"
}, },
"Cat Balou": { "Cat Balou": {
"name": "Cat Balou", "name": "Cat Balou",
"desc": "Choose and discard a card from any other player." "desc": "Choose and discard a card from any other player."
}, },
"Diligenza": { "Diligenza": {
"name": "Stagecoach", "name": "Stagecoach",
"desc": "Draw 2 cards from the deck." "desc": "Draw 2 cards from the deck."
}, },
"Duello": { "Duello": {
"name": "Duel", "name": "Duel",
"desc": "Play this card against any player. In turn, starting with your opponent, you can discard a Bang! Card, the first player who does not do so loses 1 life." "desc": "Play this card against any player. In turn, starting with your opponent, you can discard a Bang! Card, the first player who does not do so loses 1 life."
}, },
"Emporio": { "Emporio": {
"name": "General Store", "name": "General Store",
"desc": "Put on the table N cards from the deck, where N is the number of alive players, in turn, starting with you, choose a card and add it to your hand" "desc": "Put on the table N cards from the deck, where N is the number of alive players, in turn, starting with you, choose a card and add it to your hand"
}, },
"Gatling": { "Gatling": {
"name": "Gatling", "name": "Gatling",
"desc": "Shoot all the other players" "desc": "Shoot all the other players"
}, },
"Indiani!": { "Indiani!": {
"name": "Indians!", "name": "Indians!",
"desc": "All the other players must discard a Bang! or lose 1 Health Point" "desc": "All the other players must discard a Bang! or lose 1 Health Point"
}, },
"Mancato!": { "Mancato!": {
"name": "Missed!", "name": "Missed!",
"desc": "Use this card to cancel the effect of a bang" "desc": "Use this card to cancel the effect of a bang"
}, },
"Panico!": { "Panico!": {
"name": "Panic!", "name": "Panic!",
"desc": "Steal a card from a player at distance 1" "desc": "Steal a card from a player at distance 1"
}, },
"Saloon": { "Saloon": {
"name": "Saloon", "name": "Saloon",
"desc": "Everyone heals 1 Health point" "desc": "Everyone heals 1 Health point"
}, },
"WellsFargo": { "WellsFargo": {
"name": "WellsFargo", "name": "WellsFargo",
"desc": "Draw 3 cards from the deck" "desc": "Draw 3 cards from the deck"
}, },
"Binocolo": { "Binocolo": {
"name": "Binocular", "name": "Binocular",
"desc": "You see the other players at distance -1" "desc": "You see the other players at distance -1"
}, },
"Riparo": { "Riparo": {
"name": "Hideout", "name": "Hideout",
"desc": "The other players see you at distance +1" "desc": "The other players see you at distance +1"
}, },
"Pugno!": { "Pugno!": {
"name": "Fist!", "name": "Fist!",
"desc": "Shoot a player at distance 1" "desc": "Shoot a player at distance 1"
}, },
"Rag Time": { "Rag Time": {
"name": "Rag Time", "name": "Rag Time",
"desc": "Steal a card from another player at any distance" "desc": "Steal a card from another player at any distance"
}, },
"Rissa": { "Rissa": {
"name": "Brawl", "name": "Brawl",
"desc": "Choose a card to discard from the hand/equipment of all the other players" "desc": "Choose a card to discard from the hand/equipment of all the other players"
}, },
"Schivata": { "Schivata": {
"name": "Dodge", "name": "Dodge",
"desc": "Use this card to cancel the effect of a bang and then draw a card." "desc": "Use this card to cancel the effect of a bang and then draw a card."
}, },
"Springfield": { "Springfield": {
"name": "Springfield", "name": "Springfield",
"desc": "Shoot a player at any distance" "desc": "Shoot a player at any distance"
}, },
"Tequila": { "Tequila": {
"name": "Tequila", "name": "Tequila",
"desc": "Heal 1 HP to a player of your choice (can be you)" "desc": "Heal 1 HP to a player of your choice (can be you)"
}, },
"Whisky": { "Whisky": {
"name": "Whisky", "name": "Whisky",
"desc": "Heal 2 HP" "desc": "Heal 2 HP"
}, },
"Bibbia": { "Bibbia": {
"name": "Bible", "name": "Bible",
"desc": "Use this card to cancel the effect of a bang and then draw a card." "desc": "Use this card to cancel the effect of a bang and then draw a card."
}, },
"Cappello": { "Cappello": {
"name": "Ten Gallon Hat", "name": "Ten Gallon Hat",
"desc": "Use this card to cancel the effect of a bang" "desc": "Use this card to cancel the effect of a bang"
}, },
"Placca Di Ferro": { "Placca Di Ferro": {
"name": "Iron Plate", "name": "Iron Plate",
"desc": "Use this card to cancel the effect of a bang" "desc": "Use this card to cancel the effect of a bang"
}, },
"Sombrero": { "Sombrero": {
"name": "Sombrero", "name": "Sombrero",
"desc": "Use this card to cancel the effect of a bang" "desc": "Use this card to cancel the effect of a bang"
}, },
"Pugnale": { "Pugnale": {
"name": "Knife", "name": "Knife",
"desc": "Shoot a player at distance 1" "desc": "Shoot a player at distance 1"
}, },
"Derringer": { "Derringer": {
"name": "Derringer", "name": "Derringer",
"desc": "Shoot a player at distance 1 and then draw a card." "desc": "Shoot a player at distance 1 and then draw a card."
}, },
"Borraccia": { "Borraccia": {
"name": "Canteen", "name": "Canteen",
"desc": "Regain 1 HP" "desc": "Regain 1 HP"
}, },
"Can Can": { "Can Can": {
"name": "Can Can", "name": "Can Can",
"desc": "Choose and discard a card from any other player." "desc": "Choose and discard a card from any other player."
}, },
"Conestoga": { "Conestoga": {
"name": "Conestoga", "name": "Conestoga",
"desc": "Steal a card from another player at any distance" "desc": "Steal a card from another player at any distance"
}, },
"Fucile Da Caccia": { "Fucile Da Caccia": {
"name": "Buffalo Rifle", "name": "Buffalo Rifle",
"desc": "Shoot a player at any distance" "desc": "Shoot a player at any distance"
}, },
"Pony Express": { "Pony Express": {
"name": "Pony Express", "name": "Pony Express",
"desc": "Draw 3 cards from the deck" "desc": "Draw 3 cards from the deck"
}, },
"Pepperbox": { "Pepperbox": {
"name": "Pepperbox", "name": "Pepperbox",
"desc": "Shoot a player in sight. If you do not have weapons, your is sight is 1" "desc": "Shoot a player in sight. If you do not have weapons, your is sight is 1"
}, },
"Howitzer": { "Howitzer": {
"name": "Howitzer", "name": "Howitzer",
"desc": "Shoot all the other players" "desc": "Shoot all the other players"
} },
} "Bart Cassidy": {
} "name": "Bart Cassidy",
"desc": "Each time he is hurt, he draws a card"
},
"Black Jack": {
"name": "Black Jack",
"desc": "At the beginning of his turn, when he has to draw, he shows everyone the second card, if it is Hearts or Diamonds he draws a third card without showing it"
},
"Calamity Janet": {
"name": "Calamity Janet",
"desc": "She can use the Missed! as Bang! and the other way around"
},
"El Gringo": {
"name": "El Gringo",
"desc": "Each time he is hurt, he draws a card from the hand of the attacking player"
},
"Jesse Jones": {
"name": "Jesse Jones",
"desc": "When he has to draw his cards, he may draw the first card from the hand of another player"
},
"Jourdonnais": {
"name": "Jourdonnais",
"desc": "He plays as he had a Barrel always active, if he equips another Barrel, he can flip 2 cards"
},
"Kit Carlson": {
"name": "Kit Carlson",
"desc": "When he has to draw, he peeks 3 cards and chooses 2, putting the other card on the top of the deck"
},
"Lucky Duke": {
"name": "Lucky Duke",
"desc": "Every time he has to flip a card, he can flip 2 times"
},
"Paul Regret": {
"name": "Paul Regret",
"desc": "The other players see him at distance +1"
},
"Pedro Ramirez": {
"name": "Pedro Ramirez",
"desc": "When he has to draw, he may pick the first card from the discarded cards"
},
"Rose Doolan": {
"name": "Rose Doolan",
"desc": "She sees the other players at distance -1"
},
"Sid Ketchum": {
"name": "Sid Ketchum",
"desc": "He can discard 2 cards to regain 1HP"
},
"Slab The Killer": {
"name": "Slab The Killer",
"desc": "To dodge his Bang! cards other players need 2 Missed!"
},
"Suzy Lafayette": {
"name": "Suzy Lafayette",
"desc": "Whenever she has an empty hand, she draws a card"
},
"Vulture Sam": {
"name": "Vulture Sam",
"desc": "When a player dies, he gets all the cards in the dead's hand and equipments"
},
"Willy The Kid": {
"name": "Willy The Kid",
"desc": "He doesn't have limits to the amounts of bang he can use"
},
"Pixie Pete": {
"name": "Pixie Pete",
"desc": "He draws 3 cards instead of 2"
},
"Tequila Joe": {
"name": "Tequila Joe",
"desc": "When he plays Beer, he regains 2 Health Points"
},
"Greg Digger": {
"name": "Greg Digger",
"desc": "Whenever a player dies, he regains up to 2 lives"
},
"Herb Hunter": {
"name": "Herb Hunter",
"desc": "Whenever a player dies, he draws 2 cards"
},
"Elena Fuente": {
"name": "Elena Fuente",
"desc": "She can use any card of her hand as missed"
},
"Bill Noface": {
"name": "Bill Noface",
"desc": "Draw 1 card + 1 card for each wound he has"
},
"Molly Stark": {
"name": "Molly Stark",
"desc": "When she uses a card from her hand outside her turn, she draws a card."
},
"Apache Kid": {
"name": "Apache Kid",
"desc": "Cards of diamonds ♦️ played against him, do no have effect (doesn't work in duels)."
},
"Sean Mallory": {
"name": "Sean Mallory",
"desc": "He can keep up to 10 cards in his hand when ending the turn."
},
"Belle Star": {
"name": "Belle Star",
"desc": "During her turn the green cards of the other players do not work."
},
"Vera Custer": {
"name": "Vera Custer",
"desc": "Before drawing, she may choose the special ability on another alive player. This ability is used until next turn."
},
"Chuck Wengam": {
"name": "Chuck Wengam",
"desc": "On his turn he may decide to lose 1 HP to draw 2 cards from the deck."
},
"Pat Brennan": {
"name": "Pat Brennan",
"desc": "Instead of drawing he can steal a card from the equipment of another player."
},
"José Delgrado": {
"name": "José Delgrado",
"desc": "He can discard a blue card to draw 2 cards."
},
"Doc Holyday": {
"name": "Doc Holyday",
"desc": "He can discard 2 cards to play a bang."
},
"Fuorilegge": {
"name": "Outlaw"
},
"Rinnegato": {
"name": "Renegade"
},
"Sceriffo": {
"name": "Sheriff"
},
"Vice": {
"name": "Deputy"
}
},
"help": {
"character": "Characters",
"characters_special": "Each character has special abilities and a number of lives that make them unique. \nLives are the number of life points you can lose before dying and also indicate the maximum number of cards you can hold in your hand.",
"deathnobeer": "When you lose your last life point and you don't have a beer 🍺️ in your hand, you die. \nYour cards are discarded and your role revealed to everyone.",
"discard": "To discard",
"distance": "Distance",
"distancecalc": "The distance is automatically calculated by the game and corresponds to the minimum distance between the player's left and right.",
"drawinstructions": "To draw cards you will need to click on the deck when you see this animation.",
"drawthecards": "Draw the cards",
"endgame": "End of the game",
"endgameconditions": "The game ends when one of the following conditions is met:",
"endgamesheriffwin": "All the outlaws 🐺️ and renegades 🦅️ are dead. \nIn this case the sheriff ⭐️ and the deputies 🎖️ win.",
"endgameshriffdeath": "Sheriff ⭐️ dies. \nIf the renegade 🦅️ is the last player alive he wins, otherwise the outlaws win.",
"endingturn": "When you have finished playing your cards, that is, when you do not want or cannot play any more cards, you must discard the cards that exceed your current number of lives.\n\nThen you pass the turn to the next player by clicking on end turn.",
"equipment": "EQUIPMENT",
"justoneweapon": "You can only have 1 weapon equipped.",
"maxtwocardsequip": "You cannot have 2 cards with the same name equipped.",
"outlawreward": "Anyone who kills an outlaw 🐺️ draws 3 cards from the deck (other outlaws too 🐺️).",
"playerdeath": "The death of a player",
"playingcards": "Play the cards",
"playingdmg": "You can play your cards for yourself or to harm other players by trying to eliminate them.",
"playingduringturn": "You can only play the cards on your turn. To play cards, click on the cards from you hand.\nWith the exception of cards used as an answer such as Missed 😅️.",
"playingifyouwant": "You are not required to play cards.",
"playlimit": "There are only 3 limitations:",
"playonlyonebang": "You can only play 1 Bang! \nper turn (refers only to cards named Bang!)",
"rewardspen": "Penalties and rewards",
"roles": "Roles",
"sheriffkillsvice": "If the sheriff ⭐️ kills a deputy, he loses all the cards in his hand and in play in front of him.",
"thecards": "Cards",
"title": "How to play",
"turndiscard": "Discard any excess cards",
"turndraw": "Draw 2 cards",
"turnplay": "Play any number of cards",
"turns": "Turns",
"turnstart": "It always starts with the Sheriff ⭐️, and the game continues clockwise, the turns are divided into 3 phases.",
"weapon": "WEAPON",
"renegade": "Renegade",
"vice": "Deputy",
"outlaw": "Outlaw",
"sheriff": "Sheriff",
"allcharacters": "All characters",
"gotoallcharacters": "Jump to all characters"
}
}

View File

@ -1,297 +1,476 @@
{ {
"trademark": "Bang! è un marchio registrato DVGiochi", "trademark": "Bang! è un marchio registrato DVGiochi",
"online_players": "Giocatori online: ", "online_players": "Giocatori online: ",
"choose_username": "Scegli un username:", "choose_username": "Scegli un username:",
"available_lobbies": "Stanze disponibili:", "available_lobbies": "Stanze disponibili:",
"spectate_lobbies": "Osserva le partite in corso:", "spectate_lobbies": "Osserva le partite in corso:",
"no_lobby_available": "Nessuna stanza disponibile", "no_lobby_available": "Nessuna stanza disponibile",
"create_lobby": "Crea una stanza:", "create_lobby": "Crea una stanza:",
"lobby_name": "Nome:", "lobby_name": "Nome:",
"leave_room": "Esci dalla stanza", "leave_room": "Esci dalla stanza",
"warning": "Attenzione!", "warning": "Attenzione!",
"connection_error": "Connessione al server assente.", "connection_error": "Connessione al server assente.",
"end_turn": "Termina turno!", "end_turn": "Termina turno!",
"start_game": "Avvia!", "start_game": "Avvia!",
"expansions": "Espansioni", "expansions": "Espansioni",
"details": "Dettagli", "details": "Dettagli",
"ok": "OK", "ok": "OK",
"you": "TU", "you": "TU",
"owner": "GESTORE", "owner": "GESTORE",
"cancel": "ANNULLA", "cancel": "ANNULLA",
"password": "Password: ", "password": "Password: ",
"room_password_prompt": "Password Stanza: ", "room_password_prompt": "Password Stanza: ",
"private_room": "Stanza Privata", "private_room": "Stanza Privata",
"room": "Stanza: ", "room": "Stanza: ",
"room_players": "Giocatori (tu sei {username})", "room_players": "Giocatori (tu sei {username})",
"choose_character": "Scegli il tuo personaggio", "choose_character": "Scegli il tuo personaggio",
"choose_card": "Scegli una carta", "choose_card": "Scegli una carta",
"choose_card_from": " da ", "choose_card_from": " da ",
"flip_card": "↙️ Estrai una carta", "flip_card": "↙️ Estrai una carta",
"draw_cards": "⏬ Pesca le tue carte", "draw_cards": "⏬ Pesca le tue carte",
"play_cards": "▶️ Gioca le tue carte", "play_cards": "▶️ Gioca le tue carte",
"respond_card": "↩️ Rispondi alla carta", "respond_card": "↩️ Rispondi alla carta",
"wait": "⏸ Attendi", "wait": "⏸ Attendi",
"choose_cards": "🔽 Scegli una carta", "choose_cards": "🔽 Scegli una carta",
"take_dmg": "Prendi Danno", "take_dmg": "Prendi Danno",
"choose_response": "Scegli come rispondere ", "choose_response": "Scegli come rispondere ",
"choose_response_to": "a ", "choose_response_to": "a ",
"choose_response_needed": "NE OCCORRONO ", "choose_response_needed": "NE OCCORRONO ",
"hand": "MANO", "hand": "MANO",
"card_against": "Contro chi vuoi giocare la carta", "card_against": "Contro chi vuoi giocare la carta",
"choose_card_to_get": "Scegli che carta pescare", "choose_card_to_get": "Scegli che carta pescare",
"choose_guess": "Indovina il colore del seme", "choose_guess": "Indovina il colore del seme",
"choose_ranch": "Scegli le carte da sostituire", "choose_ranch": "Scegli le carte da sostituire",
"choose_dalton": "Scegli che equipaggiamento scartare", "choose_dalton": "Scegli che equipaggiamento scartare",
"choose_fratelli_di_sangue": "Scegli a chi donare una delle tue vite", "choose_fratelli_di_sangue": "Scegli a chi donare una delle tue vite",
"choose_cecchino": "Scegli contro chi sparare", "choose_cecchino": "Scegli contro chi sparare",
"choose_rimbalzo_player": "Scegli contro chi scartare il bang", "choose_rimbalzo_player": "Scegli contro chi scartare il bang",
"choose_rimbalzo_card": "Scegli contro che carta scartare il bang", "choose_rimbalzo_card": "Scegli contro che carta scartare il bang",
"emporio_others": "{0} sta scegliendo che carta prendere dall'emporio", "emporio_others": "{0} sta scegliendo che carta prendere dall'emporio",
"you_died": "SEI MORTO", "you_died": "SEI MORTO",
"spectate": "SPETTATORE", "spectate": "SPETTATORE",
"you_win": "HAI VINTO", "you_win": "HAI VINTO",
"you_lose": "HAI PERSO", "you_lose": "HAI PERSO",
"special_ability": "ABILITÀ SPECIALE", "special_ability": "ABILITÀ SPECIALE",
"discard": "SCARTA", "discard": "SCARTA",
"to_regain_1_hp": "PER RECUPERARE 1 VITA", "to_regain_1_hp": "PER RECUPERARE 1 VITA",
"play_your_turn": "GIOCA IL TUO TURNO", "play_your_turn": "GIOCA IL TUO TURNO",
"you_are": "Tu sei", "you_are": "Tu sei",
"did_pick_as": "ha pescato come seconda carta", "did_pick_as": "ha pescato come seconda carta",
"blackjack_special": "Se la carta è cuori o quadri ne pesca un'altra", "blackjack_special": "Se la carta è cuori o quadri ne pesca un'altra",
"choose_scarp_card_to": "SCEGLI CHE CARTA SCARTARE PER USARE", "choose_scarp_card_to": "SCEGLI CHE CARTA SCARTARE PER USARE",
"pick_a_card": "ESTRAI UNA CARTA", "pick_a_card": "ESTRAI UNA CARTA",
"to_defend_from": "PER DIFENDERTI DA", "to_defend_from": "PER DIFENDERTI DA",
"submit": "Invia", "submit": "Invia",
"copy": "Copia invito", "copy": "Copia invito",
"no_players_in_range": "Non vedi nessun giocatore, equipaggia un arma o un mirino!", "no_players_in_range": "Non vedi nessun giocatore, equipaggia un arma o un mirino!",
"chat": { "chat": {
"spectators": " | Uno spettatore sta guardando la partita | {n} spettatori stanno guardando la partita", "spectators": " | Uno spettatore sta guardando la partita | {n} spettatori stanno guardando la partita",
"chat": "Chat", "chat": "Chat",
"joined": "{0} è entrato nella stanza", "joined": "{0} è entrato nella stanza",
"died": "{0} è morto", "died": "{0} è morto",
"died_role": "{0} era {1}!", "died_role": "{0} era {1}!",
"won": "{0} ha vinto!", "won": "{0} ha vinto!",
"choose_character": "{0} ha come personaggio {1}, la sua abilità speciale è: {2}!", "choose_character": "{0} ha come personaggio {1}, la sua abilità speciale è: {2}!",
"starting": "La partita sta iniziando!", "starting": "La partita sta iniziando!",
"sheriff": "{0} è lo sceriffo!", "sheriff": "{0} è lo sceriffo!",
"did_choose_character": "{0} ha scelto il personaggio.", "did_choose_character": "{0} ha scelto il personaggio.",
"turn": "È il turno di {0}.", "turn": "È il turno di {0}.",
"draw_from_scrap": "{0} ha pescato la prima carta dalla pila delle carte scartate.", "draw_from_scrap": "{0} ha pescato la prima carta dalla pila delle carte scartate.",
"draw_from_player": "{0} ha pescato la prima carta dalla mano di {1}.", "draw_from_player": "{0} ha pescato la prima carta dalla mano di {1}.",
"flipped": "{0} ha estratto {1} {2}.", "flipped": "{0} ha estratto {1} {2}.",
"explode": "{0} ha fatto esplodere la dinamite.", "explode": "{0} ha fatto esplodere la dinamite.",
"beer_save": "{0} ha usato una birra per recuperare una vita.", "beer_save": "{0} ha usato una birra per recuperare una vita.",
"play_card": "{0} ha giocato {1}.", "play_card": "{0} ha giocato {1}.",
"play_card_against": "{0} ha giocato {1} contro {2}.", "play_card_against": "{0} ha giocato {1} contro {2}.",
"play_card_for": "{0} ha giocato {1} per {2}.", "play_card_for": "{0} ha giocato {1} per {2}.",
"spilled_beer": "{0} ha rovesciato una {1}.", "spilled_beer": "{0} ha rovesciato una {1}.",
"diligenza": "{0} ha giocato {1} e ha pescato 2 carte.", "diligenza": "{0} ha giocato {1} e ha pescato 2 carte.",
"wellsfargo": "{0} ha giocato {1} e ha pescato 3 carte.", "wellsfargo": "{0} ha giocato {1} e ha pescato 3 carte.",
"saloon": "{0} ha giocato {1} e ha curato 1 punto vita a tutti.", "saloon": "{0} ha giocato {1} e ha curato 1 punto vita a tutti.",
"special_bart_cassidy": "{0} ha ricevuto un risarcimento perchè è stato ferito.", "special_bart_cassidy": "{0} ha ricevuto un risarcimento perchè è stato ferito.",
"special_el_gringo": "{0} rubato una carta a {1} mentre veniva colpito.", "special_el_gringo": "{0} rubato una carta a {1} mentre veniva colpito.",
"special_calamity": "{0} ha giocato {1} come un Bang! contro {2}.", "special_calamity": "{0} ha giocato {1} come un Bang! contro {2}.",
"allroles": "Nella partita ci sono: {0}.", "allroles": "Nella partita ci sono: {1} {0}, {3} {2}, {5} {4}, {7} {6}.",
"guess": "{0} pensa sia {1}.", "guess": "{0} pensa sia {1}.",
"guess_right": "{0} ha indovinato.", "guess_right": "{0} ha indovinato.",
"guess_wrong": "{0} ha sbagliato.", "guess_wrong": "{0} ha sbagliato.",
"fratelli_sangue": "{0} ha donato una delle sue vite a {1}.", "fratelli_sangue": "{0} ha donato una delle sue vite a {1}.",
"doctor_heal": "{0} è stato curato dal dottore.", "doctor_heal": "{0} è stato curato dal dottore.",
"respond": "{0} ha risposto con {1}.", "respond": "{0} ha risposto con {1}.",
"change_username": "{0} ha cambiato nome in {1}.", "change_username": "{0} ha cambiato nome in {1}.",
"lobby_reset": "Si ritorna alla stanza in {0} secondi...", "lobby_reset": "Si ritorna alla stanza in {0} secondi...",
"prison_free": "{0} è uscito di prigione", "prison_free": "{0} è uscito di prigione",
"prison_turn": "{0} rimane in prigione questo turno" "prison_turn": "{0} rimane in prigione questo turno"
}, },
"foc": { "foc": {
"leggedelwest": "Ed è obbligato a usarla nel suo turno, se possibile" "leggedelwest": "Ed è obbligato a usarla nel suo turno, se possibile"
}, },
"mods": "Modificatori", "mods": "Modificatori",
"bots": "Bot", "bots": "Bot",
"add_bot": "Aggiungi un bot", "add_bot": "Aggiungi un bot",
"remove_bot": "Rimuovi un bot", "remove_bot": "Rimuovi un bot",
"minimum_players": "Per iniziare la partita servono minimo 3 giocatori", "minimum_players": "Per iniziare la partita servono minimo 3 giocatori",
"mod_comp": "Modalità competitiva (disattiva il prendi danno automatico)", "mod_comp": "Modalità competitiva (disattiva il prendi danno automatico)",
"disconnect_bot": "Sostituisci i giocatori che si disconnettono con bot", "disconnect_bot": "Sostituisci i giocatori che si disconnettono con bot",
"your_turn": "È il tuo turno!", "your_turn": "È il tuo turno!",
"your_response": "Rispondi!", "your_response": "Rispondi!",
"your_choose": "Scegli una carta!", "your_choose": "Scegli una carta!",
"cards": { "cards": {
"Barile": { "Barile": {
"name": "Barile", "name": "Barile",
"desc": "Quando sei bersagliato da un Bang puoi estrarre la prima carta dalla cima del mazzo, se la carta estratta è del seme Cuori allora vale come un Mancato" "desc": "Quando sei bersagliato da un Bang puoi estrarre la prima carta dalla cima del mazzo, se la carta estratta è del seme Cuori allora vale come un Mancato"
}, },
"Dinamite": { "Dinamite": {
"name": "Dinamite", "name": "Dinamite",
"desc": "Giocando la Dinamite, posizionala davanti a te, resterà innocua per un intero giro. All'inizio del prossimo turno prima di pescare e prima di una eventuale estrazione (es. Prigione), estrai una carta dalla cima del mazzo. Se esce una carta tra il 2 il 9 di picche (compresi) allora la dinamite esplode: perdi 3 vite e scarta la carta, altrimenti passa la dinamite al giocatore successivo, il quale estrarà a sua volta dopo che tu avrai passato il tuo turno" "desc": "Giocando la Dinamite, posizionala davanti a te, resterà innocua per un intero giro. All'inizio del prossimo turno prima di pescare e prima di una eventuale estrazione (es. Prigione), estrai una carta dalla cima del mazzo. Se esce una carta tra il 2 il 9 di picche (compresi) allora la dinamite esplode: perdi 3 vite e scarta la carta, altrimenti passa la dinamite al giocatore successivo, il quale estrarà a sua volta dopo che tu avrai passato il tuo turno"
}, },
"Mirino": { "Mirino": {
"name": "Mirino", "name": "Mirino",
"desc": "Tu vedi gli altri giocatori a distanza -1" "desc": "Tu vedi gli altri giocatori a distanza -1"
}, },
"Mustang": { "Mustang": {
"name": "Mustang", "name": "Mustang",
"desc": "Gli altri giocatori ti vedono a distanza +1" "desc": "Gli altri giocatori ti vedono a distanza +1"
}, },
"Prigione": { "Prigione": {
"name": "Prigione", "name": "Prigione",
"desc": "Equipaggia questa carta a un altro giocatore, tranne lo Sceriffo. Il giocatore scelto all'inizio del suo turno, prima di pescare dovrà estrarre: se esce Cuori scarta questa carta e gioca normalmente il turno, altrimenti scarta questa carta e salta il turno" "desc": "Equipaggia questa carta a un altro giocatore, tranne lo Sceriffo. Il giocatore scelto all'inizio del suo turno, prima di pescare dovrà estrarre: se esce Cuori scarta questa carta e gioca normalmente il turno, altrimenti scarta questa carta e salta il turno"
}, },
"Remington": { "Remington": {
"name": "Remington", "name": "Remington",
"desc": "Puoi sparare a un giocatore che sia distante 3 o meno" "desc": "Puoi sparare a un giocatore che sia distante 3 o meno"
}, },
"Rev Carabine": { "Rev Carabine": {
"name": "Rev. Carabine", "name": "Rev. Carabine",
"desc": "Puoi sparare a un giocatore che sia distante 4 o meno" "desc": "Puoi sparare a un giocatore che sia distante 4 o meno"
}, },
"Schofield": { "Schofield": {
"name": "Schofield", "name": "Schofield",
"desc": "Puoi sparare a un giocatore che sia distante 2 o meno" "desc": "Puoi sparare a un giocatore che sia distante 2 o meno"
}, },
"Volcanic": { "Volcanic": {
"name": "Volcanic", "name": "Volcanic",
"desc": "Puoi sparare a un giocatore che sia distante 1 o meno, tuttavia puoi giocare quanti bang vuoi" "desc": "Puoi sparare a un giocatore che sia distante 1 o meno, tuttavia puoi giocare quanti bang vuoi"
}, },
"Winchester": { "Winchester": {
"name": "Winchester", "name": "Winchester",
"desc": "Puoi sparare a un giocatore che sia distante 5 o meno" "desc": "Puoi sparare a un giocatore che sia distante 5 o meno"
}, },
"Bang!": { "Bang!": {
"name": "Bang!", "name": "Bang!",
"desc": "Spara a un giocatore a distanza raggiungibile. Se non hai armi la distanza di default è 1" "desc": "Spara a un giocatore a distanza raggiungibile. Se non hai armi la distanza di default è 1"
}, },
"Birra": { "Birra": {
"name": "Birra", "name": "Birra",
"desc": "Gioca questa carta per recuperare un punto vita. Non puoi andare oltre al limite massimo del tuo personaggio. Se stai per perdere l'ultimo punto vita puoi giocare questa carta anche nel turno dell'avversario. La birra non ha più effetto se ci sono solo due giocatori" "desc": "Gioca questa carta per recuperare un punto vita. Non puoi andare oltre al limite massimo del tuo personaggio. Se stai per perdere l'ultimo punto vita puoi giocare questa carta anche nel turno dell'avversario. La birra non ha più effetto se ci sono solo due giocatori"
}, },
"Cat Balou": { "Cat Balou": {
"name": "Cat Balou", "name": "Cat Balou",
"desc": "Fai scartare una carta a un qualsiasi giocatore, scegli a caso dalla mano, oppure fra quelle che ha in gioco" "desc": "Fai scartare una carta a un qualsiasi giocatore, scegli a caso dalla mano, oppure fra quelle che ha in gioco"
}, },
"Diligenza": { "Diligenza": {
"name": "Diligenza", "name": "Diligenza",
"desc": "Pesca 2 carte dalla cima del mazzo" "desc": "Pesca 2 carte dalla cima del mazzo"
}, },
"Duello": { "Duello": {
"name": "Duello", "name": "Duello",
"desc": "Gioca questa carta contro un qualsiasi giocatore. A turno, cominciando dal tuo avversario, potete scartare una carta Bang!, il primo giocatore che non lo fa perde 1 vita" "desc": "Gioca questa carta contro un qualsiasi giocatore. A turno, cominciando dal tuo avversario, potete scartare una carta Bang!, il primo giocatore che non lo fa perde 1 vita"
}, },
"Emporio": { "Emporio": {
"name": "Emporio", "name": "Emporio",
"desc": "Scopri dal mazzo tante carte quanto il numero di giocatori vivi, a turno, partendo da te, scegliete una carta e aggiungetela alla vostra mano" "desc": "Scopri dal mazzo tante carte quanto il numero di giocatori vivi, a turno, partendo da te, scegliete una carta e aggiungetela alla vostra mano"
}, },
"Gatling": { "Gatling": {
"name": "Gatling", "name": "Gatling",
"desc": "Spara a tutti gli altri giocatori" "desc": "Spara a tutti gli altri giocatori"
}, },
"Indiani!": { "Indiani!": {
"name": "Indiani!", "name": "Indiani!",
"desc": "Tutti gli altri giocatori devono scartare un Bang! o perdere una vita" "desc": "Tutti gli altri giocatori devono scartare un Bang! o perdere una vita"
}, },
"Mancato!": { "Mancato!": {
"name": "Mancato!", "name": "Mancato!",
"desc": "Usa questa carta per annullare un bang" "desc": "Usa questa carta per annullare un bang"
}, },
"Panico!": { "Panico!": {
"name": "Panico!", "name": "Panico!",
"desc": "Pesca una carta da un giocatore a distanza 1, scegli a caso dalla mano, oppure fra quelle che ha in gioco" "desc": "Pesca una carta da un giocatore a distanza 1, scegli a caso dalla mano, oppure fra quelle che ha in gioco"
}, },
"Saloon": { "Saloon": {
"name": "Saloon", "name": "Saloon",
"desc": "Tutti i giocatori recuperano un punto vita compreso chi gioca la carta" "desc": "Tutti i giocatori recuperano un punto vita compreso chi gioca la carta"
}, },
"WellsFargo": { "WellsFargo": {
"name": "WellsFargo", "name": "WellsFargo",
"desc": "Pesca 3 carte dalla cima del mazzo" "desc": "Pesca 3 carte dalla cima del mazzo"
}, },
"Binocolo": { "Binocolo": {
"name": "Binocolo", "name": "Binocolo",
"desc": "Tu vedi gli altri giocatori a distanza -1" "desc": "Tu vedi gli altri giocatori a distanza -1"
}, },
"Riparo": { "Riparo": {
"name": "Riparo", "name": "Riparo",
"desc": "Gli altri giocatori ti vedono a distanza +1" "desc": "Gli altri giocatori ti vedono a distanza +1"
}, },
"Pugno!": { "Pugno!": {
"name": "Pugno!", "name": "Pugno!",
"desc": "Spara a un giocatore a distanza 1" "desc": "Spara a un giocatore a distanza 1"
}, },
"Rag Time": { "Rag Time": {
"name": "Rag Time", "name": "Rag Time",
"desc": "Ruba 1 carta da un giocatore a prescindere dalla distanza" "desc": "Ruba 1 carta da un giocatore a prescindere dalla distanza"
}, },
"Rissa": { "Rissa": {
"name": "Rissa", "name": "Rissa",
"desc": "Fai scartare una carta a tutti gli altri giocatori, scegli a caso dalla mano, oppure fra quelle che hanno in gioco" "desc": "Fai scartare una carta a tutti gli altri giocatori, scegli a caso dalla mano, oppure fra quelle che hanno in gioco"
}, },
"Schivata": { "Schivata": {
"name": "Schivata", "name": "Schivata",
"desc": "Usa questa carta per annullare un bang e poi pesca una carta" "desc": "Usa questa carta per annullare un bang e poi pesca una carta"
}, },
"Springfield": { "Springfield": {
"name": "Springfield", "name": "Springfield",
"desc": "Spara a un giocatore a prescindere dalla distanza" "desc": "Spara a un giocatore a prescindere dalla distanza"
}, },
"Tequila": { "Tequila": {
"name": "Tequila", "name": "Tequila",
"desc": "Fai recuperare 1 vita a un giocatore a tua scelta, anche te stesso" "desc": "Fai recuperare 1 vita a un giocatore a tua scelta, anche te stesso"
}, },
"Whisky": { "Whisky": {
"name": "Whisky", "name": "Whisky",
"desc": "Gioca questa carta per recuperare fino a 2 punti vita" "desc": "Gioca questa carta per recuperare fino a 2 punti vita"
}, },
"Bibbia": { "Bibbia": {
"name": "Bibbia", "name": "Bibbia",
"desc": "Usa questa carta per annullare un bang e poi pesca una carta" "desc": "Usa questa carta per annullare un bang e poi pesca una carta"
}, },
"Cappello": { "Cappello": {
"name": "Cappello", "name": "Cappello",
"desc": "Usa questa carta per annullare un bang" "desc": "Usa questa carta per annullare un bang"
}, },
"Placca Di Ferro": { "Placca Di Ferro": {
"name": "Placca Di Ferro", "name": "Placca Di Ferro",
"desc": "Usa questa carta per annullare un bang" "desc": "Usa questa carta per annullare un bang"
}, },
"Sombrero": { "Sombrero": {
"name": "Sombrero", "name": "Sombrero",
"desc": "Usa questa carta per annullare un bang" "desc": "Usa questa carta per annullare un bang"
}, },
"Pugnale": { "Pugnale": {
"name": "Pugnale", "name": "Pugnale",
"desc": "Spara a un giocatore a distanza 1" "desc": "Spara a un giocatore a distanza 1"
}, },
"Derringer": { "Derringer": {
"name": "Derringer", "name": "Derringer",
"desc": "Spara a un giocatore a distanza 1 e poi pesca una carta" "desc": "Spara a un giocatore a distanza 1 e poi pesca una carta"
}, },
"Borraccia": { "Borraccia": {
"name": "Borraccia", "name": "Borraccia",
"desc": "Recupera 1 vita" "desc": "Recupera 1 vita"
}, },
"Can Can": { "Can Can": {
"name": "Can Can", "name": "Can Can",
"desc": "Fai scartare una carta a un qualsiasi giocatore, scegli a caso dalla mano, oppure fra quelle che ha in gioco" "desc": "Fai scartare una carta a un qualsiasi giocatore, scegli a caso dalla mano, oppure fra quelle che ha in gioco"
}, },
"Conestoga": { "Conestoga": {
"name": "Conestoga", "name": "Conestoga",
"desc": "Ruba 1 carta da un giocatore a prescindere dalla distanza" "desc": "Ruba 1 carta da un giocatore a prescindere dalla distanza"
}, },
"Fucile Da Caccia": { "Fucile Da Caccia": {
"name": "Fucile Da Caccia", "name": "Fucile Da Caccia",
"desc": "Spara a un giocatore a prescindere dalla distanza" "desc": "Spara a un giocatore a prescindere dalla distanza"
}, },
"Pony Express": { "Pony Express": {
"name": "Pony Express", "name": "Pony Express",
"desc": "Pesca 3 carte dalla cima del mazzo" "desc": "Pesca 3 carte dalla cima del mazzo"
}, },
"Pepperbox": { "Pepperbox": {
"name": "Pepperbox", "name": "Pepperbox",
"desc": "Spara a un giocatore a distanza raggiungibile. Se non hai armi la distanza di default è 1" "desc": "Spara a un giocatore a distanza raggiungibile. Se non hai armi la distanza di default è 1"
}, },
"Howitzer": { "Howitzer": {
"name": "Howitzer", "name": "Howitzer",
"desc": "Spara a tutti gli altri giocatori" "desc": "Spara a tutti gli altri giocatori"
} },
} "Bart Cassidy": {
} "name": "Bart Cassidy",
"desc": "Ogni volta che viene ferito, pesca una carta"
},
"Black Jack": {
"name": "Black Jack",
"desc": "All'inizio del suo turno, quando deve pescare, mostra a tutti la seconda carta, se è Cuori o Quadri pesca una terza carta senza farla vedere"
},
"Calamity Janet": {
"name": "Calamity Janet",
"desc": "Può usare i Mancato! come Bang! e viceversa"
},
"El Gringo": {
"name": "El Gringo",
"desc": "Ogni volta che perde un punto vita pesca una carta dalla mano del giocatore responsabile ma solo se il giocatore in questione ha carte in mano (una carta per ogni punto vita)"
},
"Jesse Jones": {
"name": "Jesse Jones",
"desc": "All'inizio del suo turno, quando deve pescare, può prendere la prima carta a caso dalla mano di un giocatore e la seconda dal mazzo"
},
"Jourdonnais": {
"name": "Jourdonnais",
"desc": "Gioca come se avesse un Barile sempre attivo, nel caso in cui metta in gioco un Barile 'Reale' può estrarre due volte"
},
"Kit Carlson": {
"name": "Kit Carlson",
"desc": "All'inizio del suo turno, quando deve pescare, pesca tre carte, ne sceglie due da tenere in mano e la rimanente la rimette in cima la mazzo"
},
"Lucky Duke": {
"name": "Lucky Duke",
"desc": "Ogni volta che deve estrarre, prende due carte dal mazzo, sceglie una delle due carte per l'estrazione, infine le scarta entrambe"
},
"Paul Regret": {
"name": "Paul Regret",
"desc": "Gioca come se avesse una Mustang sempre attiva, nel caso in cui metta in gioco una Mustang 'Reale' l'effetto si somma tranquillamente"
},
"Pedro Ramirez": {
"name": "Pedro Ramirez",
"desc": "All'inizio del suo turno, quando deve pescare, può prendere la prima carta dalla cima degli scarti e la seconda dal mazzo"
},
"Rose Doolan": {
"name": "Rose Doolan",
"desc": "Gioca come se avesse un Mirino sempre attivo, nel caso in cui metta in gioco una Mirino 'Reale' l'effetto si somma tranquillamente"
},
"Sid Ketchum": {
"name": "Sid Ketchum",
"desc": "Può scartare due carte per recuperare un punto vita anche più volte di seguito a patto di avere carte da scartare, può farlo anche nel turno dell'avversario se starebbe per morire"
},
"Slab The Killer": {
"name": "Slab The Killer",
"desc": "Per evitare i suoi Bang servono due Mancato, un eventuale barile vale solo come un Mancato"
},
"Suzy Lafayette": {
"name": "Suzy Lafayette",
"desc": "Appena rimane senza carte in mano pesca immediatamente una carta dal mazzo"
},
"Vulture Sam": {
"name": "Vulture Sam",
"desc": "Quando un personaggio viene eliminato prendi tutte le carte di quel giocatore e aggiungile alla tua mano, sia le carte in mano che quelle in gioco"
},
"Willy The Kid": {
"name": "Willy The Kid",
"desc": "Questo personaggio può giocare quanti bang vuole nel suo turno"
},
"Pixie Pete": {
"name": "Pixie Pete",
"desc": "All'inizio del turno pesca 3 carte invece che 2"
},
"Tequila Joe": {
"name": "Tequila Joe",
"desc": "Se gioca la carta Birra recupera 2 vite invece che una sola"
},
"Greg Digger": {
"name": "Greg Digger",
"desc": "Quando un giocatore muore, recupera fino a 2 vite"
},
"Herb Hunter": {
"name": "Herb Hunter",
"desc": "Quando un giocatore muore, pesca 2 carte"
},
"Elena Fuente": {
"name": "Elena Fuente",
"desc": "Può usare una carta qualsiasi nella sua mano come mancato"
},
"Bill Noface": {
"name": "Bill Noface",
"desc": "All'inizio del turno pesca 1 carta + 1 carta per ogni ferita che ha"
},
"Molly Stark": {
"name": "Molly Stark",
"desc": "Quando usa volontariamente una carta che ha in mano, fuori dal suo turno, ne ottiene un'altra dal mazzo"
},
"Apache Kid": {
"name": "Apache Kid",
"desc": "Le carte di quadri ♦️ giocate contro di lui non hanno effetto (non vale durante i duelli)"
},
"Sean Mallory": {
"name": "Sean Mallory",
"desc": "Quando finisce il suo turno può tenere fino a 10 carte in mano"
},
"Belle Star": {
"name": "Belle Star",
"desc": "Nel suo turno le carte verdi degli altri giocatori non hanno effetto."
},
"Vera Custer": {
"name": "Vera Custer",
"desc": "Prima di pescare le sue carte può scegliere l'abilità speciale di un altro giocatore fino al prossimo turno."
},
"Chuck Wengam": {
"name": "Chuck Wengam",
"desc": "Durante il suo turno può perdere una vita per pescare 2 carte dal mazzo."
},
"Pat Brennan": {
"name": "Pat Brennan",
"desc": "Invece di pescare può prendere una carta dall'equipaggiamento di un altro giocatore."
},
"José Delgrado": {
"name": "José Delgrado",
"desc": "Può scartare una carta blu per pescare 2 carte."
},
"Doc Holyday": {
"name": "Doc Holyday",
"desc": "Nel suo turno può scartare 2 carte per fare un bang."
},
"Sceriffo": {
"name": "Sceriffo"
},
"Fuorilegge": {
"name": "Fuorilegge"
},
"Rinnegato": {
"name": "Rinnegato"
},
"Vice": {
"name": "Vice"
}
},
"help": {
"title": "Come giocare",
"character": "Personaggi",
"characters_special": "Ogni personaggio ha delle abilità speciali e un numero di vite che lo rendono unico. Le vite sono il numero di punti vita che puoi perdere prima di morire e indicano anche il numero massimo di carte che puoi tenere in mano.",
"roles": "Ruoli",
"turns": "Turni",
"turnstart": "Si inizia sempre dallo Sceriffo ⭐️, e il gioco prosegue in senso orario, i turni sono divisi in 3 fasi.",
"turndraw": "Pesca 2 carte",
"turnplay": "Gioca un numero qualsiasi di carte",
"turndiscard": "Scarta le carte in eccesso",
"drawthecards": "Pescare le carte",
"drawinstructions": "Per pescare le carte dovrai cliccare sul mazzo quando vedi questa animazione.",
"playingcards": "Giocare le carte",
"playingdmg": "Puoi giocare le tue carte per te oppure per recare danno agli altri giocatori cercando di eliminarli.",
"playingduringturn": "Puoi giocare le carte solo nel tuo turno. Per giocarle, clicca sulle carte nella tua mano.\nAd eccezzione delle carte usate come risposta tipo i mancato 😅️. ",
"playingifyouwant": "Non sei obblicato a giocare carte.",
"playlimit": "Ci sono solo 3 limitazioni:",
"playonlyonebang": "Puoi giocare 1 solo Bang! per turno (si riferisce solo alle carte con nome Bang!)",
"maxtwocardsequip": "Non puoi avere 2 carte con lo stesso nome equipaggiate.",
"justoneweapon": "Puoi avere solo 1 arma equipaggiata.",
"discard": "Scartare",
"endingturn": "Quando hai terminato di giocare le tue carte, ovvero quando non vuoi o non puoi giocare altre carte, devi scartare le carte che eccedono il tuo numero di vite attuali.\n\t\tDopodichè passi il turno al giocatore successivo cliccando su termina turno.",
"distance": "Distanza",
"distancecalc": "La distanza viene calcolata automaticamente dal gioco e corrisponde al percorso minimo tra la sinistra e la destra del giocatore.",
"playerdeath": "La morte di un giocatore",
"deathnobeer": "Quando perdi l'ultimo punto vita e non hai una birra 🍺️ in mano, muori. Le tue carte vengono scartate e il tuo ruolo rivelato a tutti.",
"rewardspen": "Penalità e ricompense",
"sheriffkillsvice": "Se lo sceriffo ⭐️ uccide un vice perde tutte le carte in mano e in gioco davanti a se.",
"outlawreward": "Chiunque uccida un fuorilegge 🐺️ pesca 3 carte dal mazzo (anche altri fuorilegge 🐺️).",
"endgame": "Fine del gioco",
"endgameconditions": "Il gioco termina quando una delle seguenti condizioni si verifica:",
"endgameshriffdeath": "Lo sceriffo ⭐️ muore. Se il rinnegato 🦅️ è l'ultimo giocatore in vita vince, altrimenti vincono i fuorilegge.",
"endgamesheriffwin": "Tutti i fuorilegge 🐺️ e i rinnegati 🦅️ sono morti. In tal caso vincono lo sceriffo ⭐️ e i vice 🎖️.",
"thecards": "Le carte",
"equipment": "EQUIPAGGIAMENTO",
"weapon": "ARMA",
"sheriff": "Sceriffo",
"outlaw": "Fuorilegge",
"renegade": "Rinnegato",
"vice": "Vice",
"gotoallcharacters": "Visualizza tutti i personaggi",
"allcharacters": "Tutti i personaggi"
}
}

View File

@ -9,6 +9,11 @@ const routes = [
name: 'Game', name: 'Game',
component: () => import(/* webpackChunkName: "game" */ '../components/Lobby.vue') component: () => import(/* webpackChunkName: "game" */ '../components/Lobby.vue')
}, },
{
path: '/help',
name: 'Help',
component: () => import(/* webpackChunkName: "helep" */ '../components/Help.vue')
},
{ {
path: '/', path: '/',
name: 'Home', name: 'Home',