Ejemplo n.º 1
0
    def die(self, cause: str = "low_hp") -> None:
        self.parent.actor_state.is_dead = True

        if cause == "low_hp":
            death_message = ""
        elif cause == "lack_of_strength":
            death_message = f"{self.parent.name} is too weak to maintain itself!\n"
        elif cause == "starvation":
            death_message = f"{self.parent.name} has no nutrition to sustain itself!\n"
        elif cause == "drowning":
            death_message = f"{self.parent.name} has no oxygen!\n"
        else:
            death_message = "UNDEFINED"

        if self.engine.player is self.parent:
            death_message += "You died!"
            death_message_color = color.player_die
            self.engine.event_handler = GameOverEventHandler(self.engine)
        elif self.engine.game_map.visible[
                self.parent.x,
                self.parent.y]:  # if dead entity is in player's visible range
            death_message += f"{self.parent.name} is dead!"
            death_message_color = color.enemy_die
        else:
            death_message_color = color.white
            pass  # Show nothing if entity is not in visible radius.

        # Drop Everything
        drop_list = []
        for item in self.parent.inventory.items:
            drop_list.append(item)
        for drop_item in drop_list:
            self.parent.inventory.drop(item=drop_item, show_msg=False)

        # Spawn corpse entity
        if self.parent.edible:  # if edible is None, no corpse is spawned.
            new_corpse = copy.deepcopy(item_factories.corpse)
            new_corpse.weight = max(
                round(self.parent.actor_state.weight / 2, 2), 0.01)
            new_corpse.name = self.parent.name + " corpse"
            new_corpse.edible = self.parent.edible  # copy edible value from parent
            new_corpse.edible.parent = new_corpse
            new_corpse.spawn(self.parent.gamemap, self.parent.x, self.parent.y)
            #TODO: might have to save self.parent to new_corpse (for resurrection feature)

        # Add messagen to log
        self.engine.message_log.add_message(death_message,
                                            fg=death_message_color,
                                            target=self.parent)

        # Remove all actor states to prevent bugs
        self.parent.actor_state.remove_all_actor_states()

        # Delete dead entity
        self.parent.remove_self()
Ejemplo n.º 2
0
    def die(self) -> None:
        if self.engine.player is self.entity:
            death_message = "You died!"
            self.engine.event_handler = GameOverEventHandler(self.engine)
        else:
            death_message = f"{self.entity.name} is dead!"

        self.entity.char = "%"
        self.entity.color = (191, 0, 0)
        self.entity.blocks_movement = False
        self.entity.ai = None
        self.entity.name = f"remains of {self.entity.name}"
        self.entity.render_order = RenderOrder.CORPSE

        print(death_message)
Ejemplo n.º 3
0
    def die(self) -> None:
        if self.engine.player is self.entity:
            death_message = 'You died!'
            death_message_color = color.player_die
            self.engine.event_handler = GameOverEventHandler(self.engine)
        else:
            death_message = f'{self.entity.name} is dead!'
            death_message_color = color.enemy_die

        self.entity.char = '%'
        self.entity.color = (191, 0, 0)
        self.entity.blocks_movement = False
        self.entity.ai = None
        self.entity.name = f'remains of {self.entity.name}'
        self.entity.render_order = RenderOrder.CORPSE

        self.engine.message_log.add_message(death_message, death_message_color)
Ejemplo n.º 4
0
    def die(self) -> None:
        if self.engine.player is self.parent:
            death_message = "You died!"
            death_message_color = color.player_die
            self.engine.event_handler = GameOverEventHandler(self.engine)
        else:
            death_message = f"{self.parent.name} is dead!"
            death_message_color = color.enemy_die

        self.parent.char = "%"
        self.parent.color = (191, 0, 0)
        self.parent.blocks_movement = False
        self.parent.ai = None
        self.parent.name = f"remains of {self.parent.name}"
        self.parent.render_order = RenderOrder.CORPSE

        self.engine.message_log.add_message(death_message, death_message_color)
Ejemplo n.º 5
0
def kill_entity(engine: Engine, entity: Actor) -> None:
    entity.char = '%'
    entity.color = (191, 0, 0)

    if engine.player == entity:
        death_message = 'You died!'
        death_message_color = (191, 0, 0)
        engine.event_handler = GameOverEventHandler(engine)
    else:
        death_message = f'{entity.name} is dead!'
        death_message_color = (255, 127, 0)
        entity.blocks_movement = False
        entity.ai = DeadAI()
        entity.name = f'remains of {entity.name}'
        entity.render_order = RenderOrder.CORPSE

    engine.message_log.add_message(death_message, death_message_color)
Ejemplo n.º 6
0
  def die(self) -> None:
    if self.engine.player is self.entity:
      death_message = "You died!"
      death_message_color = color.player_die
      self.engine.event_handler = GameOverEventHandler(self.engine)
    else:
      death_message = f"{self.entity.name} is killed!"
      death_message_color = color.enemy_die

    self.entity.char = "%"
    self.entity.color = (127, 0, 0)
    self.entity.blocks_movement = False
    self.entity.ai = None
    self.entity.name = f"{self.entity.name}'s mangled corpse"
    self.entity.render_order = RenderOrder.CORPSE

    self.engine.message_log.add_message(death_message, death_message_color)
Ejemplo n.º 7
0
    def die(self) -> None:
        if self.engine.player is self.entity:
            death_message = "You collapse. Your journey has come to an end."
            death_message_color = color.player_die
            self.engine.event_handler = GameOverEventHandler(self.engine)
        else:
            death_message = f"{self.entity.name} crumbles into dust"
            death_message_color = color.enemy_die

        self.entity.char = "%"
        self.entity.color = (250, 250, 180)
        self.entity.blocks_movement = False
        self.entity.ai = None
        self.entity.name = f"remains of {self.entity.name}"
        self.entity.render_order = RenderOrder.CORPSE

        self.engine.message_log.add_message(death_message, death_message_color)
Ejemplo n.º 8
0
    def die(self) -> None:
        '''
        Calling this method on the entity will set its attributes to a 'dead' entity.  
        - Its 'ai' is removed so its 'is_alive' property will return 'False' when called. 
        - The player can now walk over it.
        '''
        if self.engine.player is self.entity:
            death_message = "You died!"
            self.engine.event_handler = GameOverEventHandler(self.engine)
        else:
            death_message = f"{self.entity.name} is dead!"

        # Set entity's new attributes:
        self.entity.char            = "%"
        self.entity.color           = (191, 0, 0)
        self.entity.blocks_movement = False
        self.entity.ai              = None
        self.entity.name            = f"The twisted corpse of {self.entity.name}."
        self.entity.render_order    = RenderOrder.CORPSE

        print(death_message)