This commit is contained in:
Tyrel Souza 2022-01-02 16:43:44 -05:00
parent 6e02cfcf13
commit 77a090ff1c
15 changed files with 410 additions and 82 deletions

0
__init__.py Normal file
View File

View File

@ -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,8 +31,14 @@ 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
@ -41,37 +47,50 @@ class ActionWithDirection(Action):
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")
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):
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()

0
components/__init__.py Normal file
View File

68
components/ai.py Normal file
View File

@ -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()

View File

@ -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

44
components/fighter.py Normal file
View File

@ -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)

View File

@ -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()

View File

@ -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,7 +20,8 @@ class Entity:
gamemap: GameMap
def __init__(self,
def __init__(
self,
gamemap: Optional[GameMap] = None,
x: int = 0,
y: int = 0,
@ -24,6 +29,7 @@ class Entity:
color: Tuple[int, int, int] = (255, 255, 255),
name: str = "<Unnamed>",
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 = "<Unnamed>",
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)

View File

@ -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),
)

View File

@ -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,6 +28,14 @@ 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
) -> Optional[Entity]:
@ -42,6 +48,12 @@ class GameMap:
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
)

View File

@ -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

View File

@ -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,

View File

@ -55,6 +55,7 @@ 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:
@ -69,6 +70,7 @@ def place_entities(
else:
entity_factories.troll.spawn(dungeon, x, y)
def generate_dungeon(
max_rooms: int,
room_min_size: int,

7
render_order.py Normal file
View File

@ -0,0 +1,7 @@
from enum import auto, Enum
class RenderOrder(Enum):
CORPSE = auto()
ITEM = auto()
ACTOR = auto()

51
tags
View File

@ -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:
@ -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