docs: def print(
          self,
          x: int,
          y: int,
          string: str,
          fg: Optional[Tuple[int, int, int]] = None,
          bg: Optional[Tuple[int, int, int]] = None,
          bg_blend: int = tcod.constants.BKGND_SET,
          alignment: int = tcod.constants.LEFT,
      ) -> None:
          """Print a string on a console with manual line breaks.
  
          `x` and `y` are the starting tile, with ``0,0`` as the upper-left
          corner of the console.  You can use negative numbers if you want to
          start printing relative to the bottom-right corner, but this behavior
          may change in future versions.
  
          `string` is a Unicode string which may include color control
          characters.  Strings which are too long will be truncated until the
          next newline character ``"\\n"``.
  
          `fg` and `bg` are the foreground text color and background tile color
          respectfully.  This is a 3-item tuple with (r, g, b) color values from
          0 to 255.  These parameters can also be set to `None` to leave the
          colors unchanged.
  
          `bg_blend` is the blend type used by libtcod.
  
          `alignment` can be `tcod.LEFT`, `tcod.CENTER`, or `tcod.RIGHT`.
  
          .. versionadded:: 8.5
  
          .. versionchanged:: 9.0
              `fg` and `bg` now default to `None` instead of white-on-black.
          """
          x, y = self._pythonic_index(x, y)
          string_ = string.encode("utf-8")  # type: bytes
          lib.console_print(
              self.console_c,
              x,
              y,
              string_,
              len(string_),
              (fg,) if fg is not None else ffi.NULL,
              (bg,) if bg is not None else ffi.NULL,
              bg_blend,
              alignment,
          )