sig
  type 'a t
  and 'a set
  and ('a, 'b) table
  val create :
    ?set:'Sprite.set ->
    '-> Video.t -> ?width:int -> int * int -> 'Sprite.t
  val move_to : 'Sprite.t -> int * int -> unit
  val move : 'Sprite.t -> int * int -> unit
  val get_pos : 'Sprite.t -> int * int
  val set_data : 'Sprite.t -> '-> unit
  val get_data : 'Sprite.t -> 'a
  val get_size : 'Sprite.t -> int * int
  val delete : 'Sprite.t -> unit
  module Set :
    sig
      val create : int -> 'Sprite.set
      val add : 'Sprite.set -> 'Sprite.t -> unit
      val del : 'Sprite.set -> 'Sprite.t -> unit
      val clear : 'Sprite.set -> unit
      val iter : ('Sprite.t -> unit) -> 'Sprite.set -> unit
      val iter_data : ('Sprite.t -> '-> unit) -> 'Sprite.set -> unit
      val set_boundary : 'Sprite.set -> int -> int -> int -> int -> unit
      val set_collision : 'Sprite.set -> int -> int -> unit
      val mem : 'Sprite.set -> 'Sprite.t -> bool
      val fold : ('-> 'Sprite.t -> 'a) -> 'Sprite.set -> '-> 'a
      val fold_data :
        ('-> 'Sprite.t -> '-> 'a) -> 'Sprite.set -> '-> 'a
    end
  val add_collision_fun :
    'Sprite.set ->
    'Sprite.set ->
    ?alpha_bias:int -> bool -> ('Sprite.t -> 'Sprite.t -> unit) -> unit
  val check_collisions : 'Sprite.t -> unit
  val collides_with :
    'Sprite.t ->
    ?alpha_bias:int -> bool -> 'Sprite.set -> 'Sprite.t list
  val in_bounds : 'Sprite.t -> bool
  val move_in_bounds :
    'Sprite.t -> ?chk:('Sprite.t -> bool) -> int * int -> int * int
  val draw : ?on:Video.t -> 'Sprite.t -> unit
  val set_animation_frame : 'Sprite.t -> int -> unit
  val get_animation_frame : 'Sprite.t -> int
  val set_frames : 'Sprite.t -> ?width:int -> Video.t -> unit
  val get_frames : 'Sprite.t -> Video.t
  val mask_cut : 'Sprite.t -> 'Sprite.t -> int -> unit
  module Table :
    sig
      val create : int -> ('a, 'b) Sprite.table
      val add : ('a, 'b) Sprite.table -> '-> 'Sprite.t -> unit
      val del : ('a, 'b) Sprite.table -> '-> unit
      val clear : ('a, 'b) Sprite.table -> unit
      val iter : ('-> 'Sprite.t -> unit) -> ('a, 'b) Sprite.table -> unit
      val iter_data :
        ('-> 'Sprite.t -> '-> unit) -> ('a, 'b) Sprite.table -> unit
      val fold :
        ('-> 'Sprite.t -> '-> 'c) -> ('a, 'b) Sprite.table -> '-> 'c
      val fold_data :
        ('-> 'Sprite.t -> '-> '-> 'c) ->
        ('a, 'b) Sprite.table -> '-> 'c
      val find : ('a, 'b) Sprite.table -> '-> 'Sprite.t
      val set : ('a, 'b) Sprite.table -> 'Sprite.set
    end
end