diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/actions.py b/actions.py index 9fa6837..ebeeeb4 100644 --- a/actions.py +++ b/actions.py @@ -3,11 +3,11 @@ from typing import Optional, Tuple, TYPE_CHECKING if TYPE_CHECKING: from engine import Engine - from entity import Entity + from entity import Entity, Actor class Action: - def __init__(self, entity: Entity) -> None: + def __init__(self, entity: Actor) -> None: super().__init__() self.entity = entity @@ -31,47 +31,66 @@ class EscapeAction(Action): def perform(self) -> None: raise SystemExit() + +class WaitAction(Action): + def perform(self) -> None: + pass + + class ActionWithDirection(Action): - def __init__(self, entity: Entity, dx: int, dy: int): + def __init__(self, entity: Actor, dx: int, dy: int): super().__init__(entity) self.dx = dx self.dy = dy @property - def dest_xy(self) -> Tuple[int,int]: + def dest_xy(self) -> Tuple[int, int]: return self.entity.x + self.dx, self.entity.y + self.dy + @property + def target_actor(self) -> Optional[Actor]: + return self.engine.gamemap.get_actor_at_location(*self.dest_xy) + @property def blocking_entity(self) -> Optional[Entity]: - return self.engine.game_map.get_blocking_entity_at_location(*self.dest_xy) + return self.engine.gamemap.get_blocking_entity_at_location(*self.dest_xy) def perform(self) -> None: raise NotImplementedError() + class MeleeAction(ActionWithDirection): def perform(self) -> None: - target = self.blocking_entity + target = self.target_actor if not target: - return # no entity to blockj - print(f"You kick {target.name}, much to its annoyance") + return # no entity to blockj + damage = self.entity.fighter.power - target.fighter.defense + + attack_desc = f"{self.entity.name.capitalize()} attacks {target.name}" + if damage > 0: + print(f"{attack_desc} for {damage} hit points.") + target.fighter.hp -= damage + else: + print(f"{attack_desc} but does no damage.") class MovementAction(ActionWithDirection): def perform(self) -> None: dest_x, dest_y = self.dest_xy - if not self.engine.game_map.in_bounds(dest_x, dest_y): + if not self.engine.gamemap.in_bounds(dest_x, dest_y): return # OOB - if not self.engine.game_map.tiles["walkable"][dest_x, dest_y]: + if not self.engine.gamemap.tiles["walkable"][dest_x, dest_y]: return # can't walk - if self.engine.game_map.get_blocking_entity_at_location(dest_x, dest_y): - return # Blocked + if self.engine.gamemap.get_blocking_entity_at_location(dest_x, dest_y): + return # Blocked self.entity.move(self.dx, self.dy) + class BumpAction(ActionWithDirection): def perform(self) -> None: - if self.blocking_entity: + if self.target_actor: return MeleeAction(self.entity, self.dx, self.dy).perform() else: return MovementAction(self.entity, self.dx, self.dy).perform() diff --git a/components/__init__.py b/components/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/components/ai.py b/components/ai.py new file mode 100644 index 0000000..7c6b5a3 --- /dev/null +++ b/components/ai.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from typing import List, Tuple, TYPE_CHECKING + +import numpy as np # type: ignore +import tcod + +from actions import Action, MeleeAction, MovementAction, WaitAction +from components.base_components import BaseComponent + +if TYPE_CHECKING: + from entity import Actor + + +class BaseAI(Action, BaseComponent): + entity: Actor + + def perform(self) -> None: + raise NotImplementedError() + + def get_path_to(self, dest_x: int, dest_y: int) -> List[Tuple[int, int]]: + """computer and return path""" + cost = np.array(self.entity.gamemap.tiles["walkable"], dtype=np.int8) + for entity in self.entity.gamemap.entities: + # Check that an enitiy blocks movement and the cost isn't zero (blocking.) + if entity.blocks_movement and cost[entity.x, entity.y]: + # Add to the cost of a blocked position. + # A lower number means more enemies will crowd behind each other in + # hallways. A higher number means enemies will take longer paths in + # order to surround the player. + cost[entity.x, entity.y] += 10 + + graph = tcod.path.SimpleGraph(cost=cost, cardinal=2, diagonal=3) + pathfinder = tcod.path.Pathfinder(graph) + + pathfinder.add_root((self.entity.x, self.entity.y)) + + path: List[List[int]] = pathfinder.path_to((dest_x, dest_y))[1:].tolist() + + return [(index[0], index[1]) for index in path] + + +class HostileEnemy(BaseAI): + def __init__(self, entity: Actor): + super().__init__(entity) + self.path: List[Tuple[int, int]] = [] + + def perform(self) -> None: + target = self.engine.player + dx = target.x - self.entity.x + dy = target.y - self.entity.y + distance = max(abs(dx), abs(dy)) + + if self.engine.gamemap.visible[self.entity.x, self.entity.y]: + if distance <= 1: + return MeleeAction(self.entity, dx, dy).perform() + + self.path = self.get_path_to(target.x, target.y) + + if self.path: + dest_x, dest_y = self.path.pop(0) + return MovementAction( + self.entity, + dest_x - self.entity.x, + dest_y - self.entity.y, + ).perform() + + return WaitAction(self.entity).perform() diff --git a/components/base_components.py b/components/base_components.py new file mode 100644 index 0000000..0460d76 --- /dev/null +++ b/components/base_components.py @@ -0,0 +1,14 @@ +from __future__ import annotations +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from engine import Engine + from entity import Entity + + +class BaseComponent: + entity: Entity + + @property + def engine(self) -> Engine: + return self.entity.gamemap.engine diff --git a/components/fighter.py b/components/fighter.py new file mode 100644 index 0000000..5dfc774 --- /dev/null +++ b/components/fighter.py @@ -0,0 +1,44 @@ +from __future__ import annotations +from typing import TYPE_CHECKING + +from components.base_components import BaseComponent +from input_handlers import GameOverEventHandler +from render_order import RenderOrder + +if TYPE_CHECKING: + from entity import Actor + + +class Fighter(BaseComponent): + entity: Actor + def __init__(self, hp: int, defense: int, power: int): + self.max_hp = hp + self._hp = hp + self.defense = defense + self.power = power + + @property + def hp(self) -> int: + return self._hp + + @hp.setter + def hp(self, value: int) -> None: + self._hp = max(0, min(value, self.max_hp)) + if self._hp == 0 and self.entity.ai: + self.die() + + 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) diff --git a/engine.py b/engine.py index a7abaaa..46c061a 100644 --- a/engine.py +++ b/engine.py @@ -5,34 +5,42 @@ from tcod.context import Context from tcod.console import Console from tcod.map import compute_fov -from input_handlers import EventHandler +from input_handlers import MainGameEventHandler if TYPE_CHECKING: - from entity import Entity + from entity import Actor + from input_handlers import EventHandler from game_map import GameMap class Engine: - game_map: GameMap + gamemap: GameMap - def __init__(self, player: Entity): - self.event_handler: EventHandler = EventHandler(self) + def __init__(self, player: Actor): + self.event_handler: EventHandler = MainGameEventHandler(self) self.player = player def handle_enemy_turns(self) -> None: - for entity in self.game_map.entities - {self.player}: - print(f'the {entity.name} wonders when it will move') + for entity in set(self.gamemap.actors) - {self.player}: + if entity.ai: + entity.ai.perform() def update_fov(self) -> None: - self.game_map.visible[:] = compute_fov( - self.game_map.tiles["transparent"], + self.gamemap.visible[:] = compute_fov( + self.gamemap.tiles["transparent"], (self.player.x, self.player.y), radius=8, ) - self.game_map.explored |= self.game_map.visible + self.gamemap.explored |= self.gamemap.visible def render(self, console: Console, context: Context) -> None: - self.game_map.render(console) + self.gamemap.render(console) + + console.print( + x=1, + y=47, + string=f"HP: {self.player.fighter.hp}/{self.player.fighter.max_hp}", + ) context.present(console) console.clear() diff --git a/entity.py b/entity.py index 04f9394..444bc89 100644 --- a/entity.py +++ b/entity.py @@ -1,9 +1,13 @@ from __future__ import annotations import copy -from typing import Tuple, TypeVar, TYPE_CHECKING, Optional +from typing import Tuple, TypeVar, TYPE_CHECKING, Optional, Type + +from render_order import RenderOrder if TYPE_CHECKING: + from components.ai import BaseAI + from components.fighter import Fighter from game_map import GameMap T = TypeVar("T", bound="Entity") @@ -16,14 +20,16 @@ class Entity: gamemap: GameMap - def __init__(self, - gamemap: Optional[GameMap] = None, - x: int = 0, - y: int = 0, - char: str = "?", - color: Tuple[int, int, int] = (255,255,255), - name: str = "", - blocks_movement: bool = False, + def __init__( + self, + gamemap: Optional[GameMap] = None, + x: int = 0, + y: int = 0, + char: str = "?", + color: Tuple[int, int, int] = (255, 255, 255), + name: str = "", + blocks_movement: bool = False, + render_order: RenderOrder = RenderOrder.CORPSE, ): self.x = x self.y = y @@ -31,6 +37,7 @@ class Entity: self.color = color self.name = name self.blocks_movement = blocks_movement + self.render_order = render_order if gamemap: self.gamemap = gamemap gamemap.entities.add(self) @@ -56,3 +63,36 @@ class Entity: def move(self, dx: int, dy: int) -> None: self.x += dx self.y += dy + + +class Actor(Entity): + def __init__( + self, + *, + x: int = 0, + y: int = 0, + char: str = "?", + color: Tuple[int, int, int] = (255, 255, 255), + name: str = "", + ai_cls: Type[BaseAI], + fighter: Fighter + ): + super().__init__( + x=x, + y=y, + char=char, + color=color, + name=name, + blocks_movement=True, + render_order=RenderOrder.ACTOR, + ) + + self.ai: Optional[BaseAI] = ai_cls(self) + + self.fighter = fighter + self.fighter.entity = self + + @property + def is_alive(self) -> bool: + """returns as long as can return actions.""" + return bool(self.ai) diff --git a/entity_factories.py b/entity_factories.py index bb00c99..155a9dd 100644 --- a/entity_factories.py +++ b/entity_factories.py @@ -1,7 +1,27 @@ -from entity import Entity +from components.ai import HostileEnemy +from components.fighter import Fighter +from entity import Actor -player = Entity(char="@", color=(255, 255, 255), name="Player", blocks_movement=True) +player = Actor( + char="@", + color=(255, 255, 255), + name="Player", + ai_cls=HostileEnemy, + fighter=Fighter(hp=30, defense=2, power=5), +) -orc = Entity(char="o", color=(63, 127, 63), name="Orc", blocks_movement=True) -troll = Entity(char="T", color=(0, 127, 0), name="Troll", blocks_movement=True) +orc = Actor( + char="o", + color=(63, 127, 63), + name="Orc", + ai_cls=HostileEnemy, + fighter=Fighter(hp=10, defense=0, power=3), +) +troll = Actor( + char="T", + color=(0, 127, 0), + name="Troll", + ai_cls=HostileEnemy, + fighter=Fighter(hp=16, defense=1, power=4), +) diff --git a/game_map.py b/game_map.py index e3bc94e..84d5e71 100644 --- a/game_map.py +++ b/game_map.py @@ -1,9 +1,10 @@ from __future__ import annotations -from typing import Iterable, TYPE_CHECKING, Optional +from typing import Iterable, TYPE_CHECKING, Optional, Iterator import numpy as np # type: ignore from tcod.console import Console +from entity import Actor import tile_types if TYPE_CHECKING: @@ -12,11 +13,8 @@ if TYPE_CHECKING: class GameMap: - def __init__(self, - engine: Engine, - width: int, - height: int, - entities: Iterable[Entity] = () + def __init__( + self, engine: Engine, width: int, height: int, entities: Iterable[Entity] = () ): self.engine = engine self.width, self.height = width, height @@ -30,18 +28,32 @@ class GameMap: (width, height), fill_value=False, order="F" ) # Tiles the player has seen before + @property + def actors(self) -> Iterator[Actor]: + yield from ( + entity + for entity in self.entities + if isinstance(entity, Actor) and entity.is_alive + ) + def get_blocking_entity_at_location( - self, location_x: int, location_y: int + self, location_x: int, location_y: int ) -> Optional[Entity]: for entity in self.entities: if ( - entity.blocks_movement - and entity.x == location_x - and entity.y == location_y + entity.blocks_movement + and entity.x == location_x + and entity.y == location_y ): return entity return None + def get_actor_at_location(self, x: int, y: int) -> Optional[Actor]: + for actor in self.actors: + if actor.x == x and actor.y == y: + return actor + return None + def in_bounds(self, x: int, y: int) -> bool: return 0 <= x < self.width and 0 <= y < self.height @@ -52,6 +64,12 @@ class GameMap: default=tile_types.SHROUD, ) - for entity in self.entities: + entities_sorted_for_rendering = sorted( + self.entities, key=lambda x: x.render_order.value + ) + + for entity in entities_sorted_for_rendering: if self.visible[entity.x, entity.y]: - console.print(entity.x, entity.y, entity.char, fg=entity.color) + console.print( + x=entity.x, y=entity.y, string=entity.char, fg=entity.color + ) diff --git a/input_handlers.py b/input_handlers.py index 2125cdc..4019afd 100644 --- a/input_handlers.py +++ b/input_handlers.py @@ -3,15 +3,60 @@ from typing import Optional, TYPE_CHECKING import tcod.event -from actions import Action, EscapeAction, BumpAction +from actions import Action, EscapeAction, BumpAction, WaitAction + if TYPE_CHECKING: from engine import Engine +MOVE_KEYS = { + # Arrow keys. + tcod.event.K_UP: (0, -1), + tcod.event.K_DOWN: (0, 1), + tcod.event.K_LEFT: (-1, 0), + tcod.event.K_RIGHT: (1, 0), + tcod.event.K_HOME: (-1, -1), + tcod.event.K_END: (-1, 1), + tcod.event.K_PAGEUP: (1, -1), + tcod.event.K_PAGEDOWN: (1, 1), + # Numpad keys. + tcod.event.K_KP_1: (-1, 1), + tcod.event.K_KP_2: (0, 1), + tcod.event.K_KP_3: (1, 1), + tcod.event.K_KP_4: (-1, 0), + tcod.event.K_KP_6: (1, 0), + tcod.event.K_KP_7: (-1, -1), + tcod.event.K_KP_8: (0, -1), + tcod.event.K_KP_9: (1, -1), + # Vi keys. + tcod.event.K_h: (-1, 0), + tcod.event.K_j: (0, 1), + tcod.event.K_k: (0, -1), + tcod.event.K_l: (1, 0), + tcod.event.K_y: (-1, -1), + tcod.event.K_u: (1, -1), + tcod.event.K_b: (-1, 1), + tcod.event.K_n: (1, 1), +} + +WAIT_KEYS = { + tcod.event.K_PERIOD, + tcod.event.K_KP_5, + tcod.event.K_CLEAR, +} + class EventHandler(tcod.event.EventDispatch[Action]): def __init__(self, engine: Engine): self.engine = engine + def handle_events(self) -> None: + raise NotImplementedError() + + def ev_quit(self, event: tcod.event.Quit) -> Optional[Action]: + raise SystemExit() + + +class MainGameEventHandler(EventHandler): def handle_events(self) -> None: for event in tcod.event.wait(): action = self.dispatch(event) @@ -23,25 +68,36 @@ class EventHandler(tcod.event.EventDispatch[Action]): self.engine.handle_enemy_turns() self.engine.update_fov() - def ev_quit(self, event: tcod.event.Quit) -> Optional[Action]: - raise SystemExit() - def ev_keydown(self, event: tcod.event.KeyDown) -> Optional[Action]: action: Optional[Action] = None key = event.sym player = self.engine.player - if key == tcod.event.K_UP: - action = BumpAction(player, dx=0, dy=-1) - elif key == tcod.event.K_DOWN: - action = BumpAction(player, dx=0, dy=1) - elif key == tcod.event.K_LEFT: - action = BumpAction(player, dx=-1, dy=0) - elif key == tcod.event.K_RIGHT: - action = BumpAction(player, dx=1, dy=0) - - elif key == tcod.event.K_ESCAPE: - action = EscapeAction(player) + if key in MOVE_KEYS: + dx, dy = MOVE_KEYS[key] + action = BumpAction(player, dx, dy) + elif key == WAIT_KEYS: + action = WaitAction(player) + + return action + +class GameOverEventHandler(EventHandler): + def handle_events(self) -> None: + for event in tcod.event.wait(): + action = self.dispatch(event) + + if action is None: + continue + + action.perform() + + def ev_keydown(self, event: tcode.event.KeyDown) -> Optional[Action]: + action: Optional[Action] = None + + key = event.sym + + if key == tcod.event.K_ESCAPE: + action = EscapeAction(self.engine.player) return action diff --git a/main.py b/main.py index 8280d20..674dd2c 100644 --- a/main.py +++ b/main.py @@ -28,7 +28,7 @@ def main(): player = copy.deepcopy(entity_factories.player) engine = Engine(player=player) - engine.game_map = generate_dungeon( + engine.gamemap = generate_dungeon( max_rooms=max_rooms, room_min_size=room_min_size, room_max_size=room_max_size, @@ -39,7 +39,6 @@ def main(): ) engine.update_fov() - with tcod.context.new_terminal( screen_width, screen_height, diff --git a/procgen.py b/procgen.py index 09d3b8c..df1abd1 100644 --- a/procgen.py +++ b/procgen.py @@ -55,19 +55,21 @@ def tunnel_between( for x, y in tcod.los.bresenham((corner_x, corner_y), (x2, y2)).tolist(): yield x, y + def place_entities( - room: RectangularRoom, dungeon: GameMap, maximum_monsters: int - ) -> None: + room: RectangularRoom, dungeon: GameMap, maximum_monsters: int +) -> None: number_of_monsters = random.randint(0, maximum_monsters) for i in range(number_of_monsters): - x = random.randint(room.x1 + 1, room.x2 -1) - y = random.randint(room.y1 + 1, room.y2 -1) + x = random.randint(room.x1 + 1, room.x2 - 1) + y = random.randint(room.y1 + 1, room.y2 - 1) if not any(entity.x == x and entity.y == y for entity in dungeon.entities): if random.random() <= 0.8: - entity_factories.orc.spawn(dungeon, x,y) + entity_factories.orc.spawn(dungeon, x, y) else: - entity_factories.troll.spawn(dungeon, x,y) + entity_factories.troll.spawn(dungeon, x, y) + def generate_dungeon( max_rooms: int, diff --git a/render_order.py b/render_order.py new file mode 100644 index 0000000..da5e292 --- /dev/null +++ b/render_order.py @@ -0,0 +1,7 @@ +from enum import auto, Enum + + +class RenderOrder(Enum): + CORPSE = auto() + ITEM = auto() + ACTOR = auto() diff --git a/tags b/tags index 017e8a4..3ede742 100644 --- a/tags +++ b/tags @@ -121,6 +121,7 @@ ABI venv/lib/python3.10/site-packages/pip/_vendor/distlib/wheel.py /^ABI = sysco ACCEPT_ENCODING venv/lib/python3.10/site-packages/pip/_vendor/urllib3/util/request.py /^ACCEPT_ENCODING = "gzip,deflate"$/;" v ACF venv/lib/python3.10/site-packages/numpy/typing/tests/data/pass/literal.py /^ACF = frozenset({None, "A", "C", "F"})$/;" v ACO venv/lib/python3.10/site-packages/pip/_vendor/chardet/latin1prober.py /^ACO = 5 # accent capital other$/;" v +ACTOR render_order.py /^ ACTOR = auto()$/;" v class:RenderOrder ACV venv/lib/python3.10/site-packages/pip/_vendor/chardet/latin1prober.py /^ACV = 4 # accent capital vowel$/;" v AC_BACK venv/lib/python3.10/site-packages/tcod/event.py /^ AC_BACK = 1073742094$/;" v class:KeySym AC_BACK venv/lib/python3.10/site-packages/tcod/event.py /^ AC_BACK = 270$/;" v class:Scancode @@ -285,6 +286,7 @@ AbstractTest venv/lib/python3.10/site-packages/numpy/core/tests/test_cpu_feature Action actions.py /^class Action:$/;" c ActionWithDirection actions.py /^class ActionWithDirection(Action):$/;" c ActiveFormattingElements venv/lib/python3.10/site-packages/pip/_vendor/html5lib/treebuilders/base.py /^class ActiveFormattingElements(list):$/;" c +Actor entity.py /^class Actor(Entity):$/;" c AdjacentTempDirectory venv/lib/python3.10/site-packages/pip/_internal/utils/temp_dir.py /^class AdjacentTempDirectory(TempDirectory):$/;" c AfterAfterBodyPhase venv/lib/python3.10/site-packages/pip/_vendor/html5lib/html5parser.py /^ class AfterAfterBodyPhase(Phase):$/;" c function:getPhases file: AfterAfterFramesetPhase venv/lib/python3.10/site-packages/pip/_vendor/html5lib/html5parser.py /^ class AfterAfterFramesetPhase(Phase):$/;" c function:getPhases file: @@ -531,12 +533,14 @@ Bar venv/lib/python3.10/site-packages/numpy/core/tests/test_multiarray.py /^ Bar venv/lib/python3.10/site-packages/pip/_vendor/progress/bar.py /^class Bar(Progress):$/;" c Base venv/lib/python3.10/site-packages/blib2to3/pytree.py /^class Base(object):$/;" c Base venv/lib/python3.10/site-packages/numpy/random/tests/test_direct.py /^class Base:$/;" c +BaseAI components/ai.py /^class BaseAI(Action, BaseComponent):$/;" c BaseAction venv/lib/python3.10/site-packages/pip/_vendor/tenacity/__init__.py /^class BaseAction:$/;" c BaseAdapter venv/lib/python3.10/site-packages/pip/_vendor/requests/adapters.py /^class BaseAdapter(object):$/;" c BaseCache venv/lib/python3.10/site-packages/pip/_vendor/cachecontrol/cache.py /^class BaseCache(object):$/;" c BaseCandidate venv/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/candidates.py /^BaseCandidate = Union[$/;" v BaseCommand venv/lib/python3.10/site-packages/click/__init__.py /^from .core import BaseCommand as BaseCommand$/;" x nameref:unknown:BaseCommand BaseCommand venv/lib/python3.10/site-packages/click/core.py /^class BaseCommand:$/;" c +BaseComponent components/base_components.py /^class BaseComponent:$/;" c BaseConfigurator venv/lib/python3.10/site-packages/pip/_vendor/distlib/compat.py /^ class BaseConfigurator(object):$/;" c BaseDistribution venv/lib/python3.10/site-packages/pip/_internal/metadata/base.py /^class BaseDistribution(Protocol):$/;" c BaseDownloadProgressBar venv/lib/python3.10/site-packages/pip/_internal/cli/progress_bars.py /^class BaseDownloadProgressBar(WindowsMixin, InterruptibleMixin, DownloadProgressMixin):$/;" c @@ -897,6 +901,7 @@ CONVERT_PATTERN venv/lib/python3.10/site-packages/pip/_vendor/distlib/compat.py COORD venv/lib/python3.10/site-packages/pip/_vendor/colorama/win32.py /^ COORD = wintypes._COORD$/;" v COPY venv/lib/python3.10/site-packages/tcod/event.py /^ COPY = 1073741948$/;" v class:KeySym COPY venv/lib/python3.10/site-packages/tcod/event.py /^ COPY = 124$/;" v class:Scancode +CORPSE render_order.py /^ CORPSE = auto()$/;" v class:RenderOrder COUNTER venv/lib/python3.10/site-packages/numpy/f2py/symbolic.py /^COUNTER = _counter()$/;" v CO_NEWLOCALS venv/lib/python3.10/site-packages/numpy/compat/_inspect.py /^CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS = 1, 2, 4, 8$/;" v CO_OPTIMIZED venv/lib/python3.10/site-packages/numpy/compat/_inspect.py /^CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS = 1, 2, 4, 8$/;" v @@ -1836,6 +1841,7 @@ False_ venv/lib/python3.10/site-packages/numpy/core/numeric.py /^False_ = bool_( FancyGetopt venv/lib/python3.10/site-packages/setuptools/_distutils/fancy_getopt.py /^class FancyGetopt:$/;" c Feature venv/lib/python3.10/site-packages/black/mode.py /^class Feature(Enum):$/;" c FieldExpr venv/lib/python3.10/site-packages/cffi/recompiler.py /^class FieldExpr:$/;" c +Fighter components/fighter.py /^class Fighter(BaseComponent):$/;" c File venv/lib/python3.10/site-packages/click/__init__.py /^from .types import File as File$/;" x nameref:unknown:File File venv/lib/python3.10/site-packages/click/types.py /^class File(ParamType):$/;" c File venv/lib/python3.10/site-packages/pip/_internal/operations/install/wheel.py /^ class File(Protocol):$/;" c @@ -1969,6 +1975,7 @@ GT venv/lib/python3.10/site-packages/numpy/f2py/symbolic.py /^ GT = 5$/;" v c GUI venv/lib/python3.10/site-packages/tcod/event.py /^ GUI = LGUI | RGUI$/;" v class:Modifier G_FLAGS venv/lib/python3.10/site-packages/cffi/cffi_opcode.py /^G_FLAGS = dict([('_CFFI_' + _key, globals()[_key])$/;" v GameMap game_map.py /^class GameMap:$/;" c +GameOverEventHandler input_handlers.py /^class GameOverEventHandler(EventHandler):$/;" c GenericAlias venv/lib/python3.10/site-packages/typing_extensions.py /^ GenericAlias = typing._GenericAlias$/;" v GenericMeta venv/lib/python3.10/site-packages/typing_extensions.py /^ GenericMeta = type$/;" v GenericObject venv/lib/python3.10/site-packages/numpy/testing/print_coercion_tables.py /^class GenericObject:$/;" c @@ -2143,6 +2150,7 @@ Hlist venv/lib/python3.10/site-packages/numpy/polynomial/tests/test_hermite.py / HookMissing venv/lib/python3.10/site-packages/pip/_vendor/pep517/in_process/_in_process.py /^class HookMissing(Exception):$/;" c HookMissing venv/lib/python3.10/site-packages/pip/_vendor/pep517/wrappers.py /^class HookMissing(Exception):$/;" c HostChangedError venv/lib/python3.10/site-packages/pip/_vendor/urllib3/exceptions.py /^class HostChangedError(RequestError):$/;" c +HostileEnemy components/ai.py /^class HostileEnemy(BaseAI):$/;" c I venv/lib/python3.10/site-packages/numpy/matrixlib/defmatrix.py /^ def I(self):$/;" m class:matrix I venv/lib/python3.10/site-packages/tcod/event.py /^ I = 12 # noqa: E741$/;" v class:Scancode IBM855_RUSSIAN_CHAR_TO_ORDER venv/lib/python3.10/site-packages/pip/_vendor/chardet/langrussianmodel.py /^IBM855_RUSSIAN_CHAR_TO_ORDER = {$/;" v @@ -2270,6 +2278,7 @@ IS_PYPY venv/lib/python3.10/site-packages/setuptools/_distutils/sysconfig.py /^I IS_PYSTON venv/lib/python3.10/site-packages/numpy/testing/_private/utils.py /^IS_PYSTON = hasattr(sys, "pyston_version_info")$/;" v IS_S390X venv/lib/python3.10/site-packages/numpy/f2py/tests/test_return_character.py /^IS_S390X = platform.machine() == 's390x'$/;" v IS_SECURETRANSPORT venv/lib/python3.10/site-packages/pip/_vendor/urllib3/util/ssl_.py /^IS_SECURETRANSPORT = False$/;" v +ITEM render_order.py /^ ITEM = auto()$/;" v class:RenderOrder ITER_CHUNK_SIZE venv/lib/python3.10/site-packages/pip/_vendor/requests/models.py /^ITER_CHUNK_SIZE = 512$/;" v ITS_ME venv/lib/python3.10/site-packages/pip/_vendor/chardet/enums.py /^ ITS_ME = 2$/;" v class:MachineState I_arr_10 venv/lib/python3.10/site-packages/numpy/typing/tests/data/pass/random.py /^I_arr_10: np.ndarray[Any, np.dtype[np.int_]] = np.array([10], dtype=np.int_)$/;" v typeref:typename:np.ndarray[Any, np.dtype[np.int_]] @@ -3338,6 +3347,7 @@ MODULE venv/lib/python3.10/site-packages/pkg_resources/__init__.py /^MODULE = re MOUSEWHEEL venv/lib/python3.10/site-packages/tcod/event_constants.py /^MOUSEWHEEL = 1027$/;" v MOUSEWHEEL_FLIPPED venv/lib/python3.10/site-packages/tcod/event_constants.py /^MOUSEWHEEL_FLIPPED = 1$/;" v MOUSEWHEEL_NORMAL venv/lib/python3.10/site-packages/tcod/event_constants.py /^MOUSEWHEEL_NORMAL = 0$/;" v +MOVE_KEYS input_handlers.py /^MOVE_KEYS = {$/;" v MSBuild venv/lib/python3.10/site-packages/setuptools/msvc.py /^ def MSBuild(self):$/;" m class:EnvironmentInfo MSVCCompiler venv/lib/python3.10/site-packages/numpy/distutils/msvc9compiler.py /^class MSVCCompiler(_MSVCCompiler):$/;" c MSVCCompiler venv/lib/python3.10/site-packages/numpy/distutils/msvccompiler.py /^class MSVCCompiler(_MSVCCompiler):$/;" c @@ -3365,6 +3375,7 @@ Macro venv/lib/python3.10/site-packages/pycparser/ply/cpp.py /^class Macro(objec MacroExpander venv/lib/python3.10/site-packages/setuptools/_distutils/msvc9compiler.py /^class MacroExpander:$/;" c MacroExpander venv/lib/python3.10/site-packages/setuptools/_distutils/msvccompiler.py /^class MacroExpander:$/;" c MagicFinder venv/lib/python3.10/site-packages/black/handle_ipynb_magics.py /^class MagicFinder(ast.NodeVisitor):$/;" c +MainGameEventHandler input_handlers.py /^class MainGameEventHandler(EventHandler):$/;" c Manifest venv/lib/python3.10/site-packages/pip/_vendor/distlib/manifest.py /^class Manifest(object):$/;" c Map venv/lib/python3.10/site-packages/numpy/core/tests/test_multiarray.py /^ class Map:$/;" c member:TestCreation.test_non_sequence_sequence file: Map venv/lib/python3.10/site-packages/tcod/map.py /^class Map(object):$/;" c @@ -6080,6 +6091,7 @@ ReleaseRange venv/lib/python3.10/site-packages/blib2to3/pgen2/driver.py /^class RemoteNotFoundError venv/lib/python3.10/site-packages/pip/_internal/vcs/versioncontrol.py /^class RemoteNotFoundError(Exception):$/;" c RemoteNotValidError venv/lib/python3.10/site-packages/pip/_internal/vcs/versioncontrol.py /^class RemoteNotValidError(Exception):$/;" c RemovedCommandError venv/lib/python3.10/site-packages/setuptools/errors.py /^class RemovedCommandError(DistutilsError, RuntimeError):$/;" c +RenderOrder render_order.py /^class RenderOrder(Enum):$/;" c Replacement venv/lib/python3.10/site-packages/black/handle_ipynb_magics.py /^class Replacement:$/;" c Report venv/lib/python3.10/site-packages/black/report.py /^class Report:$/;" c Repository venv/lib/python3.10/site-packages/numpy/lib/_datasource.py /^class Repository (DataSource):$/;" c @@ -8214,6 +8226,7 @@ Visitor venv/lib/python3.10/site-packages/black/nodes.py /^class Visitor(Generic VoidType venv/lib/python3.10/site-packages/cffi/model.py /^class VoidType(BaseType):$/;" c VsTDb venv/lib/python3.10/site-packages/setuptools/msvc.py /^ def VsTDb(self):$/;" m class:EnvironmentInfo W venv/lib/python3.10/site-packages/tcod/event.py /^ W = 26$/;" v class:Scancode +WAIT_KEYS input_handlers.py /^WAIT_KEYS = {$/;" v WARN venv/lib/python3.10/site-packages/setuptools/_distutils/log.py /^WARN = 3$/;" v WAVELET venv/lib/python3.10/site-packages/tcod/noise.py /^ WAVELET = 4$/;" v class:Algorithm WHEEL_BUILT_MARKER venv/lib/python3.10/site-packages/pip/_vendor/pep517/in_process/_in_process.py /^WHEEL_BUILT_MARKER = 'PEP517_ALREADY_BUILT_WHEEL'$/;" v @@ -8252,6 +8265,7 @@ WRITE_SUPPORT venv/lib/python3.10/site-packages/pkg_resources/__init__.py /^ WS_TRANS venv/lib/python3.10/site-packages/setuptools/_distutils/fancy_getopt.py /^WS_TRANS = {ord(_wschar) : ' ' for _wschar in string.whitespace}$/;" v WWW venv/lib/python3.10/site-packages/tcod/event.py /^ WWW = 1073742088$/;" v class:KeySym WWW venv/lib/python3.10/site-packages/tcod/event.py /^ WWW = 264$/;" v class:Scancode +WaitAction actions.py /^class WaitAction(Action):$/;" c WeirdArrayInterface venv/lib/python3.10/site-packages/numpy/core/tests/test_deprecations.py /^ class WeirdArrayInterface:$/;" c class:TestSpecialAttributeLookupFailure WeirdArrayLike venv/lib/python3.10/site-packages/numpy/core/tests/test_deprecations.py /^ class WeirdArrayLike:$/;" c class:TestSpecialAttributeLookupFailure Wheel venv/lib/python3.10/site-packages/pip/_internal/models/wheel.py /^class Wheel:$/;" c @@ -10369,11 +10383,14 @@ __index__ venv/lib/python3.10/site-packages/numpy/random/tests/test_random.py /^ __index__ venv/lib/python3.10/site-packages/numpy/typing/tests/data/pass/array_constructors.py /^ def __index__(self) -> int:$/;" m class:Index typeref:typename:int __index__ venv/lib/python3.10/site-packages/numpy/typing/tests/data/pass/scalars.py /^ def __index__(self) -> int:$/;" m class:D typeref:typename:int __index__ venv/lib/python3.10/site-packages/typing_extensions.py /^ def __index__(self) -> int:$/;" m class:SupportsIndex typeref:typename:int -__init__ actions.py /^ def __init__(self, entity: Entity) -> None:$/;" m class:Action typeref:typename:None -__init__ actions.py /^ def __init__(self, entity: Entity, dx: int, dy: int):$/;" m class:ActionWithDirection -__init__ engine.py /^ def __init__(self, player: Entity):$/;" m class:Engine -__init__ entity.py /^ def __init__(self,$/;" m class:Entity -__init__ game_map.py /^ def __init__(self,$/;" m class:GameMap +__init__ actions.py /^ def __init__(self, entity: Actor) -> None:$/;" m class:Action typeref:typename:None +__init__ actions.py /^ def __init__(self, entity: Actor, dx: int, dy: int):$/;" m class:ActionWithDirection +__init__ components/ai.py /^ def __init__(self, entity: Actor):$/;" m class:HostileEnemy +__init__ components/fighter.py /^ def __init__(self, hp: int, defense: int, power: int):$/;" m class:Fighter +__init__ engine.py /^ def __init__(self, player: Actor):$/;" m class:Engine +__init__ entity.py /^ def __init__($/;" m class:Actor +__init__ entity.py /^ def __init__($/;" m class:Entity +__init__ game_map.py /^ def __init__($/;" m class:GameMap __init__ input_handlers.py /^ def __init__(self, engine: Engine):$/;" m class:EventHandler __init__ procgen.py /^ def __init__(self, x: int, y: int, width: int, height: int):$/;" m class:RectangularRoom __init__ venv/lib/python3.10/site-packages/black/handle_ipynb_magics.py /^ def __init__(self) -> None:$/;" m class:MagicFinder typeref:typename:None @@ -17011,6 +17028,7 @@ acos venv/lib/python3.10/site-packages/numpy/array_api/_elementwise_functions.py acosh venv/lib/python3.10/site-packages/numpy/array_api/_elementwise_functions.py /^def acosh(x: Array, \/) -> Array:$/;" f typeref:typename:Array activate venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py /^ def activate(self, path=None, replace=False):$/;" m class:Distribution activate venv/lib/python3.10/site-packages/pkg_resources/__init__.py /^ def activate(self, path=None, replace=False):$/;" m class:Distribution +actors game_map.py /^ def actors(self) -> Iterator[Actor]:$/;" m class:GameMap typeref:typename:Iterator[Actor] add venv/lib/python3.10/site-packages/numpy/array_api/_elementwise_functions.py /^def add(x1: Array, x2: Array, \/) -> Array:$/;" f typeref:typename:Array add venv/lib/python3.10/site-packages/numpy/core/defchararray.py /^def add(x1, x2):$/;" f add venv/lib/python3.10/site-packages/numpy/f2py/func2subr.py /^ def add(line, ret=ret):$/;" f function:createfuncwrapper file: @@ -20236,7 +20254,7 @@ description venv/lib/python3.10/site-packages/setuptools/command/upload_docs.py description_of venv/lib/python3.10/site-packages/pip/_vendor/chardet/cli/chardetect.py /^def description_of(lines, name='stdin'):$/;" f descriptors venv/lib/python3.10/site-packages/numpy/core/include/numpy/experimental_dtype_api.h /^ PyArray_Descr **descriptors;$/;" m struct:__anoncd93f9d90408 typeref:typename:PyArray_Descr ** dest_path venv/lib/python3.10/site-packages/pip/_internal/operations/install/wheel.py /^ dest_path = None # type: str$/;" v class:File -dest_xy actions.py /^ def dest_xy(self) -> Tuple[int,int]:$/;" m class:ActionWithDirection typeref:typename:Tuple[int,int] +dest_xy actions.py /^ def dest_xy(self) -> Tuple[int, int]:$/;" m class:ActionWithDirection typeref:typename:Tuple[int,int] det venv/lib/python3.10/site-packages/numpy/array_api/linalg.py /^def det(x: Array, \/) -> Array:$/;" f typeref:typename:Array det venv/lib/python3.10/site-packages/numpy/dual.py /^det = linpkg.det$/;" v det venv/lib/python3.10/site-packages/numpy/linalg/linalg.py /^def det(a):$/;" f @@ -20294,6 +20312,7 @@ dict_iteritems venv/lib/python3.10/site-packages/pip/_vendor/msgpack/fallback.py dict_to_sequence venv/lib/python3.10/site-packages/pip/_vendor/requests/utils.py /^def dict_to_sequence(d):$/;" f dictappend venv/lib/python3.10/site-packages/numpy/f2py/auxfuncs.py /^def dictappend(rd, ar):$/;" f dictionary venv/lib/python3.10/site-packages/pip/_vendor/distlib/metadata.py /^ def dictionary(self):$/;" m class:Metadata +die components/fighter.py /^ def die(self) -> None:$/;" m class:Fighter typeref:typename:None diff venv/lib/python3.10/site-packages/black/output.py /^def diff(a: str, b: str, a_name: str, b_name: str) -> str:$/;" f typeref:typename:str diff venv/lib/python3.10/site-packages/black/report.py /^ diff: bool = False$/;" v class:Report typeref:typename:bool diff venv/lib/python3.10/site-packages/numpy/lib/function_base.py /^def diff(a, n=1, axis=-1, prepend=np._NoValue, append=np._NoValue):$/;" f @@ -20859,6 +20878,7 @@ endprogs venv/lib/python3.10/site-packages/blib2to3/pgen2/tokenize.py /^endprogs endswith venv/lib/python3.10/site-packages/numpy/core/defchararray.py /^ def endswith(self, suffix, start=0, end=None):$/;" m class:chararray endswith venv/lib/python3.10/site-packages/numpy/core/defchararray.py /^def endswith(a, suffix, start=0, end=None):$/;" f engine actions.py /^ def engine(self) -> Engine:$/;" m class:Action typeref:typename:Engine +engine components/base_components.py /^ def engine(self) -> Engine:$/;" m class:BaseComponent typeref:typename:Engine english_capitalize venv/lib/python3.10/site-packages/numpy/core/_string_helpers.py /^def english_capitalize(s):$/;" f english_lower venv/lib/python3.10/site-packages/numpy/core/_string_helpers.py /^def english_lower(s):$/;" f english_upper venv/lib/python3.10/site-packages/numpy/core/_string_helpers.py /^def english_upper(s):$/;" f @@ -20993,7 +21013,8 @@ eta_td venv/lib/python3.10/site-packages/pip/_vendor/progress/__init__.py /^ etree venv/lib/python3.10/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py /^import lxml.etree as etree$/;" I nameref:module:lxml.etree etree_builders venv/lib/python3.10/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py /^from . import etree as etree_builders$/;" x nameref:unknown:etree ev_ venv/lib/python3.10/site-packages/tcod/event.py /^ def ev_(self, event: Any) -> Optional[T]:$/;" m class:EventDispatch typeref:typename:Optional[T] -ev_keydown input_handlers.py /^ def ev_keydown(self, event: tcod.event.KeyDown) -> Optional[Action]:$/;" m class:EventHandler typeref:typename:Optional[Action] +ev_keydown input_handlers.py /^ def ev_keydown(self, event: tcod.event.KeyDown) -> Optional[Action]:$/;" m class:MainGameEventHandler typeref:typename:Optional[Action] +ev_keydown input_handlers.py /^ def ev_keydown(self, event: tcode.event.KeyDown) -> Optional[Action]:$/;" m class:GameOverEventHandler typeref:typename:Optional[Action] ev_keydown venv/lib/python3.10/site-packages/tcod/event.py /^ def ev_keydown(self, event: tcod.event.KeyDown) -> Optional[T]:$/;" m class:EventDispatch typeref:typename:Optional[T] ev_keyup venv/lib/python3.10/site-packages/tcod/event.py /^ def ev_keyup(self, event: tcod.event.KeyUp) -> Optional[T]:$/;" m class:EventDispatch typeref:typename:Optional[T] ev_mousebuttondown venv/lib/python3.10/site-packages/tcod/event.py /^ def ev_mousebuttondown(self, event: tcod.event.MouseButtonDown) -> Optional[T]:$/;" m class:EventDispatch typeref:typename:Optional[T] @@ -22304,6 +22325,7 @@ getTreeBuilder venv/lib/python3.10/site-packages/pip/_vendor/html5lib/treebuilde getTreeWalker venv/lib/python3.10/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py /^def getTreeWalker(treeType, implementation=None, **kwargs):$/;" f get_abi3_suffix venv/lib/python3.10/site-packages/setuptools/command/build_ext.py /^def get_abi3_suffix():$/;" f get_active_window venv/lib/python3.10/site-packages/tcod/sdl.py /^def get_active_window() -> Window:$/;" f typeref:typename:Window +get_actor_at_location game_map.py /^ def get_actor_at_location(self, x: int, y: int) -> Optional[Actor]:$/;" m class:GameMap typeref:typename:Optional[Actor] get_adapter venv/lib/python3.10/site-packages/pip/_vendor/requests/sessions.py /^ def get_adapter(self, url):$/;" m class:Session get_additional_deps venv/lib/python3.10/site-packages/numpy/typing/mypy_plugin.py /^ def get_additional_deps($/;" m class:_NumpyPlugin typeref:typename:list[tuple[int,str,int]] get_all venv/lib/python3.10/site-packages/pip/_vendor/urllib3/_collections.py /^ get_all = getlist$/;" v class:HTTPHeaderDict @@ -22922,6 +22944,7 @@ get_path_for_link venv/lib/python3.10/site-packages/pip/_internal/cache.py /^ get_path_for_link venv/lib/python3.10/site-packages/pip/_internal/cache.py /^ def get_path_for_link(self, link):$/;" m class:WheelCache get_path_from_frame venv/lib/python3.10/site-packages/numpy/distutils/misc_util.py /^def get_path_from_frame(frame, parent_path=None):$/;" f get_path_names venv/lib/python3.10/site-packages/pip/_vendor/distlib/_backport/sysconfig.py /^def get_path_names():$/;" f +get_path_to components/ai.py /^ def get_path_to(self, dest_x: int, dest_y: int) -> List[Tuple[int, int]]:$/;" m class:BaseAI typeref:typename:List[Tuple[int,int]] get_path_uid venv/lib/python3.10/site-packages/pip/_internal/utils/compat.py /^def get_path_uid(path: str) -> int:$/;" f typeref:typename:int get_paths venv/lib/python3.10/site-packages/numpy/distutils/system_info.py /^ def get_paths(self, section, key):$/;" m class:agg2_info get_paths venv/lib/python3.10/site-packages/numpy/distutils/system_info.py /^ def get_paths(self, section, key):$/;" m class:atlas_info @@ -23387,6 +23410,8 @@ handle_display_options venv/lib/python3.10/site-packages/setuptools/_distutils/d handle_display_options venv/lib/python3.10/site-packages/setuptools/dist.py /^ def handle_display_options(self, option_order):$/;" m class:Distribution handle_enemy_turns engine.py /^ def handle_enemy_turns(self) -> None:$/;" m class:Engine typeref:typename:None handle_events input_handlers.py /^ def handle_events(self) -> None:$/;" m class:EventHandler typeref:typename:None +handle_events input_handlers.py /^ def handle_events(self) -> None:$/;" m class:GameOverEventHandler typeref:typename:None +handle_events input_handlers.py /^ def handle_events(self) -> None:$/;" m class:MainGameEventHandler typeref:typename:None handle_extra_path venv/lib/python3.10/site-packages/setuptools/_distutils/command/install.py /^ def handle_extra_path(self):$/;" m class:install handle_extra_path venv/lib/python3.10/site-packages/setuptools/command/install.py /^ def handle_extra_path(self):$/;" m class:install handle_line venv/lib/python3.10/site-packages/pip/_internal/req/req_file.py /^def handle_line($/;" f typeref:typename:Optional[ParsedRequirement] @@ -23664,6 +23689,8 @@ host venv/lib/python3.10/site-packages/pip/_vendor/urllib3/connection.py /^ d hostname venv/lib/python3.10/site-packages/pip/_vendor/urllib3/util/url.py /^ def hostname(self):$/;" m class:Url hosttype venv/lib/python3.10/site-packages/numpy/core/tests/test_errstate.py /^hosttype = sysconfig.get_config_var('HOST_GNU_TYPE')$/;" v hour venv/lib/python3.10/site-packages/numpy/core/include/numpy/ndarraytypes.h /^ npy_int32 month, day, hour, min, sec, us, ps, as;$/;" m struct:__anonbeb738b31208 typeref:typename:npy_int32 +hp components/fighter.py /^ def hp(self) -> int:$/;" m class:Fighter typeref:typename:int +hp components/fighter.py /^ def hp(self, value: int) -> None:$/;" m class:Fighter typeref:typename:None hsplit venv/lib/python3.10/site-packages/numpy/lib/shape_base.py /^def hsplit(ary, indices_or_sections):$/;" f hsplit venv/lib/python3.10/site-packages/numpy/ma/extras.py /^hsplit = _fromnxfunction_single('hsplit')$/;" v hstack venv/lib/python3.10/site-packages/numpy/core/shape_base.py /^def hstack(tup):$/;" f @@ -24247,6 +24274,7 @@ isSurrogatePair venv/lib/python3.10/site-packages/pip/_vendor/html5lib/_utils.py is_ venv/lib/python3.10/site-packages/pip/_vendor/tomli/_parser.py /^ def is_(self, key: Key, flag: int) -> bool:$/;" m class:Flags typeref:typename:bool is_ venv/lib/python3.10/site-packages/tomli/_parser.py /^ def is_(self, key: Key, flag: int) -> bool:$/;" m class:Flags typeref:typename:bool is_64bit venv/lib/python3.10/site-packages/setuptools/command/easy_install.py /^def is_64bit():$/;" f +is_alive entity.py /^ def is_alive(self) -> bool:$/;" m class:Actor typeref:typename:bool is_appengine venv/lib/python3.10/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py /^def is_appengine():$/;" f is_appengine venv/lib/python3.10/site-packages/pip/_vendor/urllib3/contrib/appengine.py /^is_appengine = _appengine_environ.is_appengine$/;" v is_appengine_sandbox venv/lib/python3.10/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py /^def is_appengine_sandbox():$/;" f @@ -26661,6 +26689,7 @@ notmasked_edges venv/lib/python3.10/site-packages/numpy/ma/extras.py /^def notma nout venv/lib/python3.10/site-packages/numpy/core/include/numpy/experimental_dtype_api.h /^ int nin, nout;$/;" m struct:__anoncd93f9d90308 typeref:typename:int nout venv/lib/python3.10/site-packages/numpy/core/include/numpy/ufuncobject.h /^ int nin, nout, nargs;$/;" m struct:_tagPyUFuncObject typeref:typename:PyObject_HEAD int nout venv/lib/python3.10/site-packages/numpy/core/include/numpy/ufuncobject.h /^ int nout;$/;" m struct:__anond4dee2850108 typeref:typename:int +np components/ai.py /^import numpy as np # type: ignore$/;" I nameref:module:numpy np game_map.py /^import numpy as np # type: ignore$/;" I nameref:module:numpy np tile_types.py /^import numpy as np # type: ignore$/;" I nameref:module:numpy np venv/lib/python3.10/site-packages/numpy/_pytesttester.py /^ import numpy as np$/;" I function:_show_numpy_info file: nameref:module:numpy @@ -27390,7 +27419,7 @@ options venv/lib/python3.10/site-packages/setuptools/_distutils/util.py /^ op options venv/lib/python3.10/site-packages/setuptools/command/easy_install.py /^ options = []$/;" v class:CommandSpec optrule venv/lib/python3.10/site-packages/pycparser/plyparser.py /^ def optrule(self, p):$/;" f member:PLYParser._create_opt_rule file: orange venv/lib/python3.10/site-packages/tcod/constants.py /^orange = Color(255, 127, 0)$/;" v -orc entity_factories.py /^orc = Entity(char="o", color=(63, 127, 63), name="Orc", blocks_movement=True)$/;" v +orc entity_factories.py /^orc = Actor($/;" v order venv/lib/python3.10/site-packages/numpy/lib/polynomial.py /^ def order(self):$/;" m class:poly1d order venv/lib/python3.10/site-packages/pip/_internal/exceptions.py /^ order = -1 # type: int$/;" v class:HashError order venv/lib/python3.10/site-packages/pip/_internal/exceptions.py /^ order = 0$/;" v class:VcsHashUnsupported @@ -28074,6 +28103,9 @@ perform actions.py /^ def perform(self) -> None:$/;" m class:BumpAction typer perform actions.py /^ def perform(self) -> None:$/;" m class:EscapeAction typeref:typename:None perform actions.py /^ def perform(self) -> None:$/;" m class:MeleeAction typeref:typename:None perform actions.py /^ def perform(self) -> None:$/;" m class:MovementAction typeref:typename:None +perform actions.py /^ def perform(self) -> None:$/;" m class:WaitAction typeref:typename:None +perform components/ai.py /^ def perform(self) -> None:$/;" m class:BaseAI typeref:typename:None +perform components/ai.py /^ def perform(self) -> None:$/;" m class:HostileEnemy typeref:typename:None perm venv/lib/python3.10/site-packages/numpy/core/include/numpy/ndarraytypes.h /^ npy_intp perm, stride;$/;" m struct:__anonbeb738b31808 typeref:typename:npy_intp permutation_index venv/lib/python3.10/site-packages/setuptools/_vendor/more_itertools/more.py /^def permutation_index(element, iterable):$/;" f permute_dims venv/lib/python3.10/site-packages/numpy/array_api/_manipulation_functions.py /^def permute_dims(x: Array, \/, axes: Tuple[int, ...]) -> Array:$/;" f typeref:typename:Array @@ -28155,7 +28187,7 @@ platform_skip venv/lib/python3.10/site-packages/numpy/core/tests/test_umath_comp platform_tags venv/lib/python3.10/site-packages/pip/_vendor/packaging/_manylinux.py /^def platform_tags(linux: str, arch: str) -> Iterator[str]:$/;" f typeref:typename:Iterator[str] platform_tags venv/lib/python3.10/site-packages/pip/_vendor/packaging/_musllinux.py /^def platform_tags(arch: str) -> Iterator[str]:$/;" f typeref:typename:Iterator[str] platforms venv/lib/python3.10/site-packages/pip/_internal/cli/cmdoptions.py /^platforms: Callable[..., Option] = partial($/;" v typeref:typename:Callable[..., Option] -player entity_factories.py /^player = Entity(char="@", color=(255, 255, 255), name="Player", blocks_movement=True)$/;" v +player entity_factories.py /^player = Actor($/;" v plugin venv/lib/python3.10/site-packages/numpy/typing/mypy_plugin.py /^ def plugin(version: str) -> type[_NumpyPlugin]:$/;" f typeref:typename:type[_NumpyPlugin] plugins venv/lib/python3.10/site-packages/numpy/typing/tests/data/mypy.ini /^plugins = numpy.typing.mypy_plugin$/;" k section:mypy poetry venv/lib/python3.10/site-packages/black_primer/primer.json /^ "poetry": {$/;" o object:projects @@ -31282,6 +31314,7 @@ tan venv/lib/python3.10/site-packages/numpy/array_api/_elementwise_functions.py tan venv/lib/python3.10/site-packages/numpy/ma/core.py /^tan = _MaskedUnaryOperation(umath.tan, 0.0,$/;" v tanh venv/lib/python3.10/site-packages/numpy/array_api/_elementwise_functions.py /^def tanh(x: Array, \/) -> Array:$/;" f typeref:typename:Array tanh venv/lib/python3.10/site-packages/numpy/ma/core.py /^tanh = _MaskedUnaryOperation(umath.tanh)$/;" v +target_actor actions.py /^ def target_actor(self) -> Optional[Actor]:$/;" m class:ActionWithDirection typeref:typename:Optional[Actor] target_cpu venv/lib/python3.10/site-packages/setuptools/msvc.py /^ def target_cpu(self):$/;" m class:PlatformInfo target_dir venv/lib/python3.10/site-packages/setuptools/msvc.py /^ def target_dir(self, hidex86=False, x64=False):$/;" m class:PlatformInfo target_is_x86 venv/lib/python3.10/site-packages/setuptools/msvc.py /^ def target_is_x86(self):$/;" m class:PlatformInfo @@ -37483,7 +37516,7 @@ triu venv/lib/python3.10/site-packages/numpy/array_api/_creation_functions.py /^ triu venv/lib/python3.10/site-packages/numpy/lib/twodim_base.py /^def triu(m, k=0):$/;" f triu_indices venv/lib/python3.10/site-packages/numpy/lib/twodim_base.py /^def triu_indices(n, k=0, m=None):$/;" f triu_indices_from venv/lib/python3.10/site-packages/numpy/lib/twodim_base.py /^def triu_indices_from(arr, k=0):$/;" f -troll entity_factories.py /^troll = Entity(char="T", color=(0, 127, 0), name="Troll", blocks_movement=True)$/;" v +troll entity_factories.py /^troll = Actor($/;" v true_divide venv/lib/python3.10/site-packages/numpy/ma/core.py /^true_divide = _DomainedBinaryOperation(umath.true_divide,$/;" v true_intent_list venv/lib/python3.10/site-packages/numpy/f2py/crackfortran.py /^def true_intent_list(var):$/;" f true_vals venv/lib/python3.10/site-packages/numpy/core/tests/test_multiarray.py /^ true_vals = [True, np._CopyMode.ALWAYS, np.True_]$/;" v class:TestArrayCreationCopyArgument