def id_pairs_func()

in minihack/agent/common/util/id_pairs.py [0:0]


def id_pairs_func(glyph):
    result = glyph_to_mon(glyph)
    if result != NO_GLYPH:
        return result
    if glyph_is_invisible(glyph):
        return NUMMONS
    if glyph_is_body(glyph):
        return glyph - GLYPH_BODY_OFF

    offset = NUMMONS + 1

    # CORPSE handled by glyph_is_body; STATUE handled by glyph_to_mon.
    result = glyph_to_obj(glyph)
    if result != NO_GLYPH:
        return result + offset
    offset += NUM_OBJECTS

    # I don't understand glyph_to_cmap and/or the GLYPH_EXPLODE_OFF definition
    # with MAXPCHARS - MAXEXPCHARS.
    if GLYPH_CMAP_OFF <= glyph < GLYPH_EXPLODE_OFF:
        return glyph - GLYPH_CMAP_OFF + offset
    offset += MAXPCHARS - MAXEXPCHARS

    if GLYPH_EXPLODE_OFF <= glyph < GLYPH_ZAP_OFF:
        return (glyph - GLYPH_EXPLODE_OFF) // MAXEXPCHARS + offset
    offset += EXPL_MAX

    if GLYPH_ZAP_OFF <= glyph < GLYPH_SWALLOW_OFF:
        return ((glyph - GLYPH_ZAP_OFF) >> 2) + offset
    offset += NUM_ZAP

    if GLYPH_SWALLOW_OFF <= glyph < GLYPH_WARNING_OFF:
        return offset
    offset += 1

    result = glyph_to_warning(glyph)
    if result != NO_GLYPH:
        return result + offset