add camposanto DarlingValentine
This commit is contained in:
parent
e68be77edc
commit
d089cce48d
@ -3,6 +3,7 @@ import random
|
||||
import bang.cards as cs
|
||||
import bang.expansions.fistful_of_cards.card_events as ce
|
||||
import bang.expansions.high_noon.card_events as ceh
|
||||
import bang.expansions.wild_west_show.card_events as cew
|
||||
import bang.expansions.gold_rush.shop_cards as grc
|
||||
from globals import G
|
||||
|
||||
@ -33,6 +34,9 @@ class Deck:
|
||||
if 'high_noon' in game.expansions:
|
||||
self.event_cards.extend(ceh.get_all_events(game.rng))
|
||||
endgame_cards.append(ceh.get_endgame_card())
|
||||
if 'wild_west_show' in game.expansions:
|
||||
self.event_cards.extend(cew.get_all_events(game.rng))
|
||||
endgame_cards.append(cew.get_endgame_card())
|
||||
if len(self.event_cards) > 0:
|
||||
game.rng.shuffle(self.event_cards)
|
||||
self.event_cards = self.event_cards[:12]
|
||||
|
@ -61,7 +61,6 @@ def get_endgame_card():
|
||||
|
||||
def get_all_events(rng=random):
|
||||
cards = [
|
||||
Bavaglio(),
|
||||
Camposanto(),
|
||||
DarlingValentine(),
|
||||
DorothyRage(),
|
||||
|
@ -12,6 +12,7 @@ from bang.deck import Deck
|
||||
import bang.roles as roles
|
||||
import bang.expansions.fistful_of_cards.card_events as ce
|
||||
import bang.expansions.high_noon.card_events as ceh
|
||||
import bang.expansions.wild_west_show.card_events as cew
|
||||
import bang.expansions.gold_rush.shop_cards as grc
|
||||
import bang.expansions.gold_rush.characters as grch
|
||||
import bang.expansions.the_valley_of_shadows.cards as tvosc
|
||||
@ -61,7 +62,7 @@ class Game:
|
||||
self.initial_players = 0
|
||||
self.password = ''
|
||||
self.expansions: List[str] = []
|
||||
self.available_expansions = ['dodge_city', 'fistful_of_cards', 'high_noon', 'gold_rush', 'the_valley_of_shadows']
|
||||
self.available_expansions = ['dodge_city', 'fistful_of_cards', 'high_noon', 'gold_rush', 'the_valley_of_shadows', 'wild_west_show']
|
||||
self.shutting_down = False
|
||||
self.is_competitive = False
|
||||
self.disconnect_bot = True
|
||||
@ -78,6 +79,7 @@ class Game:
|
||||
self.attack_in_progress = False
|
||||
self.characters_to_distribute = 2 # personaggi da dare a inizio partita
|
||||
self.debug = self.name == 'debug'
|
||||
self.dead_roles: List[roles.Role] = []
|
||||
self.is_changing_pwd = False
|
||||
self.is_hidden = False
|
||||
self.rng = random.Random()
|
||||
@ -113,6 +115,7 @@ class Game:
|
||||
self.incremental_turn = 0
|
||||
self.turn = 0
|
||||
self.pending_winners = []
|
||||
self.dead_roles: List[roles.Role] = []
|
||||
for p in self.players:
|
||||
p.reset()
|
||||
p.notify_self()
|
||||
@ -579,12 +582,16 @@ class Game:
|
||||
Metrics.send_metric('incremental_turn', points=[self.incremental_turn], tags=[f'game:{self.SEED}'])
|
||||
if self.players[self.turn].is_dead:
|
||||
pl = sorted(self.get_dead_players(), key=lambda x:x.death_turn)[0]
|
||||
if self.check_event(ce.DeadMan) and not self.did_resuscitate_deadman and pl == self.players[self.turn]:
|
||||
if self.check_event([ce.DeadMan, cew.Camposanto]) and not self.did_resuscitate_deadman and pl == self.players[self.turn]:
|
||||
print(f'{self.name}: {self.players[self.turn]} is dead, revive')
|
||||
if self.check_event(ce.DeadMan):
|
||||
self.did_resuscitate_deadman = True
|
||||
pl.lives = 2
|
||||
elif self.check_event(cew.Camposanto):
|
||||
pl.lives = 1
|
||||
pl.set_role = self.dead_roles.pop(random.randint(0, len(self.dead_roles)-1))
|
||||
pl.is_dead = False
|
||||
pl.is_ghost = False
|
||||
pl.lives = 2
|
||||
self.deck.draw(player=pl)
|
||||
self.deck.draw(player=pl)
|
||||
if (ghost := next((c for c in pl.equipment if isinstance(c, tvosc.Fantasma)), None)) is not None:
|
||||
@ -762,6 +769,7 @@ class Game:
|
||||
# if not disconnected:
|
||||
# self.dead_players.append(corpse)
|
||||
self.notify_room()
|
||||
self.dead_roles.append(player.role)
|
||||
G.sio.emit('chat_message', room=self.name, data=f'_died|{player.name}')
|
||||
for p in self.players:
|
||||
if not p.is_bot:
|
||||
@ -845,7 +853,10 @@ class Game:
|
||||
|
||||
def check_event(self, ev):
|
||||
if self.deck is None or len(self.deck.event_cards) == 0: return False
|
||||
if isinstance(ev, type):
|
||||
return isinstance(self.deck.event_cards[0], ev)
|
||||
else:
|
||||
return any(isinstance(self.deck.event_cards[0], evc) for evc in ev)
|
||||
|
||||
def get_visible_players(self, player: pl.Player): # returns a dictionary because we need to add the distance
|
||||
pls = self.get_alive_players()
|
||||
|
@ -11,6 +11,7 @@ import bang.characters as chars
|
||||
import bang.expansions.dodge_city.characters as chd
|
||||
import bang.expansions.fistful_of_cards.card_events as ce
|
||||
import bang.expansions.high_noon.card_events as ceh
|
||||
import bang.expansions.wild_west_show.card_events as cew
|
||||
import bang.expansions.gold_rush.shop_cards as grc
|
||||
import bang.expansions.gold_rush.characters as grch
|
||||
import bang.expansions.the_valley_of_shadows.cards as tvosc
|
||||
@ -453,6 +454,11 @@ class Player:
|
||||
self.has_played_bang = False
|
||||
self.special_use_count = 0
|
||||
self.bang_used = 0
|
||||
if self.game.check_event(cew.DarlingValentine):
|
||||
hand = len(self.hand)
|
||||
for _ in range(hand):
|
||||
self.game.deck.scrap(self.hand.pop(0), True, player=self)
|
||||
self.game.deck.draw(True, player=self)
|
||||
if self.game.check_event(ceh.MezzogiornoDiFuoco):
|
||||
self.lives -= 1
|
||||
if any((isinstance(c, grc.Talismano) for c in self.gold_rush_equipment)):
|
||||
|
@ -631,11 +631,14 @@ def chat_message(sid, msg, pl=None):
|
||||
sio.emit('chat_message', room=ses.game.name, data={'color': f'red','text':f'🚨 {ses.name} is in debug mode and changed event'})
|
||||
import bang.expansions.fistful_of_cards.card_events as ce
|
||||
import bang.expansions.high_noon.card_events as ceh
|
||||
import bang.expansions.wild_west_show.card_events as cew
|
||||
chs = []
|
||||
chs.extend(ce.get_all_events())
|
||||
chs.append(ce.get_endgame_card())
|
||||
chs.extend(ceh.get_all_events())
|
||||
chs.append(ceh.get_endgame_card())
|
||||
chs.extend(cew.get_all_events())
|
||||
chs.append(cew.get_endgame_card())
|
||||
ses.game.deck.event_cards.insert(int(cmd[1]), [c for c in chs if c is not None and c.name == ' '.join(cmd[2:])][0])
|
||||
ses.game.notify_event_card()
|
||||
elif '/removecard' in msg:
|
||||
|
@ -118,6 +118,10 @@ export default {
|
||||
box-shadow:
|
||||
0 0 0 3pt #6aa16e, 0 0 0 6pt var(--bg-color), 0 0 5pt 6pt #aaa
|
||||
}
|
||||
.card.wild-west-show{
|
||||
box-shadow: 0 0 0pt 4pt var(--bg-color), 0 0 5pt 4pt #aaa;
|
||||
border: 2pt dotted #987e51;
|
||||
}
|
||||
.card.high-noon{
|
||||
box-shadow: 0 0 0pt 4pt var(--bg-color), 0 0 5pt 4pt #aaa;
|
||||
border: 2pt dotted rgb(198 78 45);
|
||||
@ -230,7 +234,7 @@ export default {
|
||||
.card.must-be-used {
|
||||
filter: drop-shadow(0 0 5px red);
|
||||
}
|
||||
.fistful-of-cards .emoji, .high-noon .emoji, .exp-pack .emoji{
|
||||
.fistful-of-cards .emoji, .high-noon .emoji, .card.wild-west-show .emoji, .exp-pack .emoji{
|
||||
top:auto !important;
|
||||
bottom:15% !important;
|
||||
}
|
||||
|
@ -159,7 +159,7 @@ Card
|
||||
password: '',
|
||||
togglable_expansions: [],
|
||||
expansions: [],
|
||||
beta_expansions: ['the_valley_of_shadows'],
|
||||
beta_expansions: ['the_valley_of_shadows', 'wild_west_show'],
|
||||
hasToSetUsername: false,
|
||||
is_competitive: false,
|
||||
disconnect_bot: false,
|
||||
|
@ -4,4 +4,5 @@ export const emojiMap = {
|
||||
'high_noon': '🔥',
|
||||
'fistful_of_cards': '🎴',
|
||||
'the_valley_of_shadows': '👻',
|
||||
'wild_west_show': '🎪',
|
||||
}
|
@ -28,5 +28,11 @@ export const expansionsMap = {
|
||||
icon: '👻',
|
||||
back: true,
|
||||
expansion: 'the-valley-of-shadows',
|
||||
},
|
||||
'wild_west_show': {
|
||||
name: 'Wild West Show',
|
||||
icon: '🎪',
|
||||
back: true,
|
||||
expansion: 'wild-west-show'
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user