code: def _discover_sprites(self):
      plugin_path = offshoot.config["file_paths"]["plugins"]
      sprites = dict()
  
      sprite_path = f"{plugin_path}/{self.__class__.__name__}Plugin/files/data/sprites"
  
      if os.path.isdir(sprite_path):
          files = os.scandir(sprite_path)
  
          for file in files:
              if file.name.endswith(".png"):
                  sprite_name = (
                      "_".join(file.name.split("/")[-1].split("_")[:-1])
                      .replace(".png", "")
                      .upper()
                  )
  
                  sprite_image_data = skimage.io.imread(
                      f"{sprite_path}/{file.name}"
                  )
                  sprite_image_data = sprite_image_data[..., np.newaxis]
  
                  if sprite_name not in sprites:
                      sprite = Sprite(
                          sprite_name, image_data=sprite_image_data
                      )
                      sprites[sprite_name] = sprite
                  else:
                      sprites[sprite_name].append_image_data(
                          sprite_image_data
                      )
  
      return sprites
  
imports: import warnings
  import offshoot
  import subprocess
  import signal
  import shlex
  import time
  import os, os.path
  import atexit
  from serpent.game_agent import GameAgent
  from serpent.game_launchers import *
  from serpent.window_controller import WindowController
  from serpent.input_controller import InputController, InputControllers
  from serpent.frame_grabber import FrameGrabber
  from serpent.game_frame_limiter import GameFrameLimiter
  from serpent.sprite import Sprite
  from serpent.utilities import clear_terminal, is_windows, SerpentError
  import skimage.io
  import skimage.color
  import numpy
  from redis import StrictRedis
  from serpent.config import config
label_desc: Use image node_id 21 for calling the Game obj's underlying member method code with example usage: obj._discover_sprites() and returns: sprites