docs: def _unpack_union(type_: int, union: Any) -> Any:
      """
          unpack items from parser new_property (value_converter)
      """
      if type_ == lib.TCOD_TYPE_BOOL:
          return bool(union.b)
      elif type_ == lib.TCOD_TYPE_CHAR:
          return union.c.decode("latin-1")
      elif type_ == lib.TCOD_TYPE_INT:
          return union.i
      elif type_ == lib.TCOD_TYPE_FLOAT:
          return union.f
      elif (
          type_ == lib.TCOD_TYPE_STRING
          or lib.TCOD_TYPE_VALUELIST15 >= type_ >= lib.TCOD_TYPE_VALUELIST00
      ):
          return _unpack_char_p(union.s)
      elif type_ == lib.TCOD_TYPE_COLOR:
          return Color._new_from_cdata(union.col)
      elif type_ == lib.TCOD_TYPE_DICE:
          return Dice(union.dice)
      elif type_ & lib.TCOD_TYPE_LIST:
          return _convert_TCODList(union.list, type_ & 0xFF)
      else:
          raise RuntimeError("Unknown libtcod type: %i" % type_)