Player can now dance! Closes #69.

This commit is contained in:
eichhornchen 2021-01-10 17:10:00 +01:00
parent dfb591d410
commit 3d48c43886
6 changed files with 42 additions and 1 deletions

View File

@ -498,7 +498,7 @@ class ScrollofDamage(Item):
class ScrollofWeakening(Item): class ScrollofWeakening(Item):
""" """
A scroll that, when used, reduces the damage of the ennemies for 3 turn. A scroll that, when used, reduces the damage of the ennemies for 3 turns.
""" """
def __init__(self, name: str = "scroll_of_weakening", price: int = 13, def __init__(self, name: str = "scroll_of_weakening", price: int = 13,
*args, **kwargs): *args, **kwargs):

View File

@ -7,6 +7,7 @@ from math import log
from .items import Item from .items import Item
from ..interfaces import FightingEntity, InventoryHolder from ..interfaces import FightingEntity, InventoryHolder
from ..translations import gettext as _, Translator
class Player(InventoryHolder, FightingEntity): class Player(InventoryHolder, FightingEntity):
@ -62,6 +63,32 @@ class Player(InventoryHolder, FightingEntity):
self.recalculate_paths() self.recalculate_paths()
self.map.compute_visibility(self.y, self.x, self.vision) self.map.compute_visibility(self.y, self.x, self.vision)
def dance(self) -> None:
"""
Dancing has a certain probability or making ennemies unable
to fight for 2 turns. That probability depends on the player's
charisma.
"""
diceroll = randint(1, 10)
found = False
if diceroll <= self.charisma:
for entity in self.map.entities:
if entity.is_fighting_entity() and not entity == self \
and entity.distance(self)<=3:
found = True
entity.confused = 1
entity.effects.append(["confused", 1, 3])
if found:
self.map.logs.add_message(_(
"It worked! Nearby ennemies will be confused for 3 turns."))
else:
self.map.logs.add_message(_(
"It worked, but there is no one nearby..."))
else:
self.map.logs.add_message(
_("The dance was not effective..."))
def level_up(self) -> None: def level_up(self) -> None:
""" """
Add as many levels as possible to the player. Add as many levels as possible to the player.

View File

@ -50,6 +50,7 @@ class KeyValues(Enum):
WAIT = auto() WAIT = auto()
LADDER = auto() LADDER = auto()
LAUNCH = auto() LAUNCH = auto()
DANCE = auto()
@staticmethod @staticmethod
def translate_key(key: str, settings: Settings) -> Optional["KeyValues"]: def translate_key(key: str, settings: Settings) -> Optional["KeyValues"]:
@ -88,4 +89,6 @@ class KeyValues(Enum):
return KeyValues.LADDER return KeyValues.LADDER
elif key == settings.KEY_LAUNCH: elif key == settings.KEY_LAUNCH:
return KeyValues.LAUNCH return KeyValues.LAUNCH
elif key == settings.KEY_DANCE:
return KeyValues.DANCE
return None return None

View File

@ -179,6 +179,9 @@ class Game:
self.map.tick(self.player) self.map.tick(self.player)
elif key == KeyValues.LADDER: elif key == KeyValues.LADDER:
self.handle_ladder() self.handle_ladder()
elif key == KeyValues.DANCE:
self.player.dance()
self.map.tick(self.player)
def handle_ladder(self) -> None: def handle_ladder(self) -> None:
""" """
@ -291,6 +294,7 @@ class Game:
if self.player.equipped_main: if self.player.equipped_main:
self.player.equipped_main.throw(direction) self.player.equipped_main.throw(direction)
def handle_key_pressed_inventory(self, key: KeyValues) -> None: def handle_key_pressed_inventory(self, key: KeyValues) -> None:
""" """
In the inventory menu, we can interact with items or close the menu. In the inventory menu, we can interact with items or close the menu.

View File

@ -707,6 +707,7 @@ class FightingEntity(Entity):
constitution: int constitution: int
level: int level: int
critical: int critical: int
confused: int # Seulement 0 ou 1
def __init__(self, maxhealth: int = 0, health: Optional[int] = None, def __init__(self, maxhealth: int = 0, health: Optional[int] = None,
strength: int = 0, intelligence: int = 0, charisma: int = 0, strength: int = 0, intelligence: int = 0, charisma: int = 0,
@ -723,6 +724,7 @@ class FightingEntity(Entity):
self.level = level self.level = level
self.critical = critical self.critical = critical
self.effects = [] # effects = temporary buff or weakening of the stats. self.effects = [] # effects = temporary buff or weakening of the stats.
self.confused = 0
@property @property
def dead(self) -> bool: def dead(self) -> bool:
@ -750,6 +752,10 @@ class FightingEntity(Entity):
The entity deals damage to the opponent The entity deals damage to the opponent
based on their respective stats. based on their respective stats.
""" """
if self.confused:
return _("{name} is confused, it can not hit {opponent}.")\
.format(name=_(self.translated_name.capitalize()),
opponent=_(opponent.translated_name))
diceroll = randint(1, 100) diceroll = randint(1, 100)
damage = max(0, self.strength) damage = max(0, self.strength)
string = " " string = " "

View File

@ -36,6 +36,7 @@ class Settings:
self.KEY_WAIT = ['w', 'Key used to wait'] self.KEY_WAIT = ['w', 'Key used to wait']
self.KEY_LADDER = ['<', 'Key used to use ladders'] self.KEY_LADDER = ['<', 'Key used to use ladders']
self.KEY_LAUNCH = ['l', 'Key used to use a bow'] self.KEY_LAUNCH = ['l', 'Key used to use a bow']
self.KEY_DANCE = ['y', 'Key used to dance']
self.TEXTURE_PACK = ['ascii', 'Texture pack'] self.TEXTURE_PACK = ['ascii', 'Texture pack']
self.LOCALE = [locale.getlocale()[0][:2], 'Language'] self.LOCALE = [locale.getlocale()[0][:2], 'Language']