/* Generated by Pyrex 0.9.5.1a on Fri Aug  3 22:10:07 2007 */

#include "Python.h"
#include "structmember.h"
#ifndef PY_LONG_LONG
  #define PY_LONG_LONG LONG_LONG
#endif
#ifdef __cplusplus
#define __PYX_EXTERN_C extern "C"
#else
#define __PYX_EXTERN_C extern
#endif
__PYX_EXTERN_C double pow(double, double);
#include "math.h"
#include "GL/gl.h"


typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/
typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/

static PyObject *__pyx_m;
static PyObject *__pyx_b;
static int __pyx_lineno;
static char *__pyx_filename;
static char **__pyx_f;

static char __pyx_mdoc[] = "\nThe most interesting part of this module is probably the ``Sprite`` class.\n\nIf you need more specialized rendering, try subclassing from ``BaseSprite``.\n";

static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], int nargs, PyObject **args2, PyObject **kwds2); /*proto*/

static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/

static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/

static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/

static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/

static PyObject *__Pyx_UnpackItem(PyObject *); /*proto*/
static int __Pyx_EndUnpack(PyObject *); /*proto*/

static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/

static PyObject *__Pyx_GetExcValue(void); /*proto*/

static void __Pyx_WriteUnraisable(char *name); /*proto*/

static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/

static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/

static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/

static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size);  /*proto*/

static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/

static void __Pyx_AddTraceback(char *funcname); /*proto*/

/* Declarations from anims */


struct __pyx_obj_5anims_Anim {
  PyObject_HEAD
  struct __pyx_vtabstruct_5anims_Anim *__pyx_vtab;
};

struct __pyx_vtabstruct_5anims_Anim {
  float ((*g)(struct __pyx_obj_5anims_Anim *));
};
static struct __pyx_vtabstruct_5anims_Anim *__pyx_vtabptr_5anims_Anim;


struct __pyx_obj_5anims_AnimConst {
  struct __pyx_obj_5anims_Anim __pyx_base;
  float v;
};

struct __pyx_vtabstruct_5anims_AnimConst {
  struct __pyx_vtabstruct_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_5anims_AnimConst *__pyx_vtabptr_5anims_AnimConst;

static PyTypeObject *__pyx_ptype_5anims_Anim = 0;
static PyTypeObject *__pyx_ptype_5anims_AnimConst = 0;

/* Declarations from rabbyt.sprites */

struct __pyx_t_6rabbyt_7sprites_Point2d {
  float x;
  float y;
};

struct __pyx_t_6rabbyt_7sprites_float2 {
  float a;
  float b;
};


struct __pyx_obj_6rabbyt_7sprites_BaseSprite {
  PyObject_HEAD
  struct __pyx_vtabstruct_6rabbyt_7sprites_BaseSprite *__pyx_vtab;
  PyObject *__weakref__;
  struct __pyx_obj_5anims_Anim *_r;
  struct __pyx_obj_5anims_Anim *_g;
  struct __pyx_obj_5anims_Anim *_b;
  struct __pyx_obj_5anims_Anim *_a;
  struct __pyx_obj_5anims_Anim *_x;
  struct __pyx_obj_5anims_Anim *_y;
  struct __pyx_obj_5anims_Anim *_rot;
  struct __pyx_obj_5anims_Anim *_scale;
  struct __pyx_obj_5anims_Anim *_scale_y;
  float _bounding_radius;
};

struct __pyx_vtabstruct_6rabbyt_7sprites_BaseSprite {
  struct __pyx_t_6rabbyt_7sprites_Point2d ((*_convert_offset)(struct __pyx_obj_6rabbyt_7sprites_BaseSprite *,float ,float ));
};
static struct __pyx_vtabstruct_6rabbyt_7sprites_BaseSprite *__pyx_vtabptr_6rabbyt_7sprites_BaseSprite;


struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ {
  struct __pyx_obj_5anims_Anim __pyx_base;
  struct __pyx_obj_6rabbyt_7sprites_BaseSprite *sprite;
};

struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_ {
  struct __pyx_vtabstruct_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_ *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_;


struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_x {
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_x {
  struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_x *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_x;


struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_y {
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_y {
  struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_y *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_y;


struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_rot {
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_rot {
  struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_rot *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_rot;


struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_scale {
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_scale {
  struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_scale *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_scale;


struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_red {
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_red {
  struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_red *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_red;


struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_green {
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_green {
  struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_green *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_green;


struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_blue {
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_blue {
  struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_blue *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_blue;


struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha {
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha {
  struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha;


struct __pyx_obj_6rabbyt_7sprites_Sprite {
  struct __pyx_obj_6rabbyt_7sprites_BaseSprite __pyx_base;
  struct __pyx_t_6rabbyt_7sprites_Point2d (vertexes[4]);
  struct __pyx_t_6rabbyt_7sprites_Point2d (texcoords[4]);
  struct __pyx_obj_5anims_Anim *_u;
  struct __pyx_obj_5anims_Anim *_v;
  int _tex_id;
};

struct __pyx_vtabstruct_6rabbyt_7sprites_Sprite {
  struct __pyx_vtabstruct_6rabbyt_7sprites_BaseSprite __pyx_base;
  struct __pyx_t_6rabbyt_7sprites_float2 ((*_bounds_x)(struct __pyx_obj_6rabbyt_7sprites_Sprite *));
  struct __pyx_t_6rabbyt_7sprites_float2 ((*_bounds_y)(struct __pyx_obj_6rabbyt_7sprites_Sprite *));
};
static struct __pyx_vtabstruct_6rabbyt_7sprites_Sprite *__pyx_vtabptr_6rabbyt_7sprites_Sprite;


struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_ {
  struct __pyx_obj_5anims_Anim __pyx_base;
  struct __pyx_obj_6rabbyt_7sprites_BaseSprite *sprite;
};

struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_ {
  struct __pyx_vtabstruct_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_ *__pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_;


struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_u {
  struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_ __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_u {
  struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_ __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_u *__pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_u;


struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_v {
  struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_ __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_v {
  struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_ __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_v *__pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_v;

static PyTypeObject *__pyx_ptype_6rabbyt_7sprites_BaseSprite = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_ = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_x = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_y = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_rot = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_scale = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_red = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_green = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_blue = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7sprites_Sprite = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_ = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_u = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_v = 0;
static float __pyx_v_6rabbyt_7sprites_pi;
static float __pyx_v_6rabbyt_7sprites_pi_over_180;
static PyObject *__pyx_k36;
static PyObject *__pyx_k37;
static PyObject *__pyx_k38;


/* Implementation of rabbyt.sprites */

static char (__pyx_k1[]) = "\n        A tuple of the x and y coordinates\n        ";
static char (__pyx_k2[]) = " x coordinate ";
static char (__pyx_k3[]) = " y coordinate ";
static char (__pyx_k4[]) = " red, green, and blue color components ";
static char (__pyx_k5[]) = " red, green, blue, and alpha color components ";
static char (__pyx_k6[]) = " red color component ";
static char (__pyx_k7[]) = " green color component ";
static char (__pyx_k8[]) = " blue color component ";
static char (__pyx_k9[]) = " alpha color component ";
static char (__pyx_k10[]) = "\n        scale\n\n        ``1.0`` is normal size; ``0.5`` is half size, ``2.0`` is double\n        size... you get the point.\n\n        You can scale the x and y axises independently by assigning a tuple of\n        length two.\n        ";
static char (__pyx_k11[]) = " rotation ";
static char (__pyx_k12[]) = "\n        bounding_radius\n\n        This should be the distance of the farthest point from the center.  It\n        can be used for collision detection.\n        ";
static char (__pyx_k13[]) = "\n        bounding_radius_squared\n\n        This is just like ``bounding_radius``, only it\'s squared.  (duh)\n\n        ``bounding_radius`` and ``bounding_radius_squared`` are automatically\n        kept in sync with each other.\n        ";
static char (__pyx_k14[]) = "\n        The shape of the sprite.\n\n        This must either be of the form ``[left, top, right, bottom]``, or a\n        list of four coordinates, eg. ``[(0,0), (20,0), (20,20), (0,20)]``\n\n        ``[-10, -10, 10, 10]`` is the default.\n\n        When you assign to ``shape``, ``bounding_radius`` is automatically set\n        to the distance of the farthest coordinate.\n        ";
static char (__pyx_k15[]) = "\n        This defines how a texture is mapped onto the sprite.\n\n        Like ``Sprite.shape``, you can give either\n        ``[left, top, right, bottom]`` or a list of coordinates.\n\n        The default is ``[0, 1, 1, 0]``, which uses the entire texture.\n        ";
static char (__pyx_k16[]) = " u texture offset ";
static char (__pyx_k17[]) = " v texture offset ";
static char (__pyx_k18[]) = "\n        The values of ``u`` and ``v`` are added to ``tex_shape``.  This could\n        be useful if you have multiple frames of an animation on a single\n        texture.  Set ``tex_shape`` to the shape of a single frame and set\n        ``uv``, to select each frame.\n        ";
static char (__pyx_k19[]) = "\n        ``texture_id`` is a number as returned by ``rabbyt.load_texture()``.\n        (But you can use any loaded OpenGL texture.)\n\n        If ``texture_id`` is ``0``, texturing will be disabled for this sprite.\n        ";
static char (__pyx_k20[]) = " x coordinate of the left side of the sprite ";
static char (__pyx_k21[]) = " x coordinate of the right side of the sprite ";
static char (__pyx_k22[]) = " y coordinate of the bottom of the sprite ";
static char (__pyx_k23[]) = " y coordinate of the top of the sprite ";
static char (__pyx_k24[]) = "\nCopyright (C) 2007  Matthew Marshall\n\nThis library is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Library General Public\nLicense as published by the Free Software Foundation; either\nversion 2 of the License, or (at your option) any later version.\n\nThis library is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nLibrary General Public License for more details.\n\nYou should have received a copy of the GNU Library General Public\nLicense along with this library; if not, write to the Free\nFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n";
static char (__pyx_k25[]) = "Matthew Marshall <matthew@matthewmarshall.org>";
static char (__pyx_k26[]) = "rabbyt.anims";
static char (__pyx_k39[]) = "BaseSprite Sprite";

static PyObject *__pyx_n___credits__;
static PyObject *__pyx_n___author__;
static PyObject *__pyx_n_to_Anim;
static PyObject *__pyx_n__base_sprite_attr_getters;
static PyObject *__pyx_n___docs_all__;
static PyObject *__pyx_n_dict;
static PyObject *__pyx_n_x;
static PyObject *__pyx_n_y;
static PyObject *__pyx_n_rot;
static PyObject *__pyx_n_scale;
static PyObject *__pyx_n_red;
static PyObject *__pyx_n_green;
static PyObject *__pyx_n_blue;
static PyObject *__pyx_n_alpha;
static PyObject *__pyx_n_split;

static PyObject *__pyx_k24p;
static PyObject *__pyx_k25p;
static PyObject *__pyx_k26p;
static PyObject *__pyx_k39p;

static int __pyx_f_6rabbyt_7sprites_10BaseSprite___new__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite___new__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kwargs = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  static char *__pyx_argnames[] = {0};
  if (__Pyx_GetStarArgs(&__pyx_args, &__pyx_kwds, __pyx_argnames, 0, &__pyx_v_args, &__pyx_v_kwargs) < 0) return -1;
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) {
    Py_XDECREF(__pyx_args);
    Py_XDECREF(__pyx_kwds);
    Py_XDECREF(__pyx_v_args);
    Py_XDECREF(__pyx_v_kwargs);
    return -1;
  }
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":142 */
  __pyx_1 = PyInt_FromLong(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
  __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_5anims_AnimConst), __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_r));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_r = ((struct __pyx_obj_5anims_Anim *)__pyx_1);
  __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":143 */
  __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
  __pyx_2 = 0;
  __pyx_2 = PyObject_CallObject(((PyObject*)__pyx_ptype_5anims_AnimConst), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (!__Pyx_TypeTest(__pyx_2, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_g));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_g = ((struct __pyx_obj_5anims_Anim *)__pyx_2);
  __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":144 */
  __pyx_1 = PyInt_FromLong(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
  __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_5anims_AnimConst), __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_b));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_b = ((struct __pyx_obj_5anims_Anim *)__pyx_1);
  __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":145 */
  __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
  __pyx_2 = 0;
  __pyx_2 = PyObject_CallObject(((PyObject*)__pyx_ptype_5anims_AnimConst), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (!__Pyx_TypeTest(__pyx_2, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_a));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_a = ((struct __pyx_obj_5anims_Anim *)__pyx_2);
  __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":147 */
  __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
  __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_5anims_AnimConst), __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_x));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_x = ((struct __pyx_obj_5anims_Anim *)__pyx_1);
  __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":148 */
  __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
  __pyx_2 = 0;
  __pyx_2 = PyObject_CallObject(((PyObject*)__pyx_ptype_5anims_AnimConst), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (!__Pyx_TypeTest(__pyx_2, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_y));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_y = ((struct __pyx_obj_5anims_Anim *)__pyx_2);
  __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":150 */
  __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
  __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_5anims_AnimConst), __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_rot));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_rot = ((struct __pyx_obj_5anims_Anim *)__pyx_1);
  __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":151 */
  __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
  __pyx_2 = 0;
  __pyx_2 = PyObject_CallObject(((PyObject*)__pyx_ptype_5anims_AnimConst), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (!__Pyx_TypeTest(__pyx_2, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale = ((struct __pyx_obj_5anims_Anim *)__pyx_2);
  __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":152 */
  Py_INCREF(Py_None);
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale_y));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale_y = ((struct __pyx_obj_5anims_Anim *)Py_None);

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.__new__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_XDECREF(__pyx_v_args);
  Py_XDECREF(__pyx_v_kwargs);
  Py_DECREF(__pyx_v_self);
  Py_XDECREF(__pyx_args);
  Py_XDECREF(__pyx_kwds);
  return __pyx_r;
}

static PyObject *__pyx_n_items;
static PyObject *__pyx_n_TypeError;
static PyObject *__pyx_n_setattr;

static PyObject *__pyx_k40p;
static PyObject *__pyx_k41p;

static char (__pyx_k40[]) = "xy x y rgba red green blue alpha scale rot";
static char (__pyx_k41[]) = "unexpected keyword argument %r";

static int __pyx_f_6rabbyt_7sprites_10BaseSprite___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_v_names;
  PyObject *__pyx_v_name;
  PyObject *__pyx_v_value;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  int __pyx_4;
  PyObject *__pyx_5 = 0;
  static char *__pyx_argnames[] = {0};
  if (__Pyx_GetStarArgs(&__pyx_args, &__pyx_kwds, __pyx_argnames, 0, 0, &__pyx_v_kwargs) < 0) return -1;
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) {
    Py_XDECREF(__pyx_args);
    Py_XDECREF(__pyx_kwds);
    Py_XDECREF(__pyx_v_kwargs);
    return -1;
  }
  Py_INCREF(__pyx_v_self);
  __pyx_v_names = Py_None; Py_INCREF(Py_None);
  __pyx_v_name = Py_None; Py_INCREF(Py_None);
  __pyx_v_value = Py_None; Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":155 */
  __pyx_1 = PyObject_GetAttr(__pyx_k40p, __pyx_n_split); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; goto __pyx_L1;}
  __pyx_2 = PyObject_CallObject(__pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_v_names);
  __pyx_v_names = __pyx_2;
  __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":156 */
  __pyx_1 = PyObject_GetAttr(__pyx_v_kwargs, __pyx_n_items); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; goto __pyx_L1;}
  __pyx_2 = PyObject_CallObject(__pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_GetIter(__pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  for (;;) {
    __pyx_2 = PyIter_Next(__pyx_1);
    if (!__pyx_2) {
      if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; goto __pyx_L1;}
      break;
    }
    __pyx_3 = PyObject_GetIter(__pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_2 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; goto __pyx_L1;}
    Py_DECREF(__pyx_v_name);
    __pyx_v_name = __pyx_2;
    __pyx_2 = 0;
    __pyx_2 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; goto __pyx_L1;}
    Py_DECREF(__pyx_v_value);
    __pyx_v_value = __pyx_2;
    __pyx_2 = 0;
    if (__Pyx_EndUnpack(__pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":157 */
    __pyx_4 = PySequence_Contains(__pyx_v_names, __pyx_v_name); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; goto __pyx_L1;}
    __pyx_4 = !__pyx_4;
    if (__pyx_4) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":158 */
      __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_TypeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;}
      __pyx_3 = PyNumber_Remainder(__pyx_k41p, __pyx_v_name); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;}
      __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;}
      PyTuple_SET_ITEM(__pyx_5, 0, __pyx_3);
      __pyx_3 = 0;
      __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;}
      Py_DECREF(__pyx_2); __pyx_2 = 0;
      Py_DECREF(__pyx_5); __pyx_5 = 0;
      __Pyx_Raise(__pyx_3, 0, 0);
      Py_DECREF(__pyx_3); __pyx_3 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;}
      goto __pyx_L4;
    }
    __pyx_L4:;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":159 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_setattr); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; goto __pyx_L1;}
    __pyx_5 = PyTuple_New(3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; goto __pyx_L1;}
    Py_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_self);
    Py_INCREF(__pyx_v_name);
    PyTuple_SET_ITEM(__pyx_5, 1, __pyx_v_name);
    Py_INCREF(__pyx_v_value);
    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_value);
    __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_5); __pyx_5 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
  }
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_5);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_XDECREF(__pyx_v_kwargs);
  Py_DECREF(__pyx_v_names);
  Py_DECREF(__pyx_v_name);
  Py_DECREF(__pyx_v_value);
  Py_DECREF(__pyx_v_self);
  Py_XDECREF(__pyx_args);
  Py_XDECREF(__pyx_kwds);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_2xy___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_2xy___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":166 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_x->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_x)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; goto __pyx_L1;}
  __pyx_2 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_y->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_y)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_r = __pyx_3;
  __pyx_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.xy.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_10BaseSprite_2xy___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_p); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite_2xy___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_p) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_p);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":168 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; goto __pyx_L1;}
  __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; goto __pyx_L1;}
  __pyx_3 = PyObject_GetItem(__pyx_v_p, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3);
  __pyx_3 = 0;
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_x));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_x = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":169 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; goto __pyx_L1;}
  __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; goto __pyx_L1;}
  __pyx_3 = PyObject_GetItem(__pyx_v_p, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3);
  __pyx_3 = 0;
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_y));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_y = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.xy.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_p);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_1x___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_1x___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":174 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_x->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_x)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.x.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_10BaseSprite_1x___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite_1x___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_x);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":176 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; goto __pyx_L1;}
  Py_INCREF(__pyx_v_x);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_x);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_x));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_x = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.x.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_x);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_1y___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_1y___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":181 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_y->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_y)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.y.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_10BaseSprite_1y___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite_1y___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_y);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":183 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; goto __pyx_L1;}
  Py_INCREF(__pyx_v_y);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_y);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_y));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_y = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.y.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_y);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_3rgb___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_3rgb___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":188 */
  __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_red); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_green); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; goto __pyx_L1;}
  __pyx_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_blue); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; goto __pyx_L1;}
  __pyx_4 = PyTuple_New(3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_4, 1, __pyx_2);
  PyTuple_SET_ITEM(__pyx_4, 2, __pyx_3);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_3 = 0;
  __pyx_r = __pyx_4;
  __pyx_4 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.rgb.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_10BaseSprite_3rgb___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_c); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite_3rgb___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_c) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_c);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":190 */
  __pyx_1 = PyObject_GetIter(__pyx_v_c); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
  __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_red, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_green, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_blue, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.rgb.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_c);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_4rgba___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_4rgba___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":195 */
  __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_red); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_green); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; goto __pyx_L1;}
  __pyx_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_blue); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; goto __pyx_L1;}
  __pyx_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_alpha); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; goto __pyx_L1;}
  __pyx_5 = PyTuple_New(4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_5, 1, __pyx_2);
  PyTuple_SET_ITEM(__pyx_5, 2, __pyx_3);
  PyTuple_SET_ITEM(__pyx_5, 3, __pyx_4);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_3 = 0;
  __pyx_4 = 0;
  __pyx_r = __pyx_5;
  __pyx_5 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_5);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.rgba.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_10BaseSprite_4rgba___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_c); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite_4rgba___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_c) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_c);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":197 */
  __pyx_1 = PyObject_GetIter(__pyx_v_c); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; goto __pyx_L1;}
  __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_red, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_green, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_blue, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_alpha, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.rgba.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_c);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_3red___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_3red___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":202 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_r->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_r)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.red.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_10BaseSprite_3red___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_r); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite_3red___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_r) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_r);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":204 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; goto __pyx_L1;}
  Py_INCREF(__pyx_v_r);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_r);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_r));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_r = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.red.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_r);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_5green___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_5green___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":208 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_g->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_g)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.green.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_10BaseSprite_5green___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_g); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite_5green___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_g) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_g);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":210 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; goto __pyx_L1;}
  Py_INCREF(__pyx_v_g);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_g);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_g));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_g = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.green.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_g);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_4blue___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_4blue___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":214 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_b->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_b)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.blue.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_10BaseSprite_4blue___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_b); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite_4blue___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_b) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_b);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":216 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; goto __pyx_L1;}
  Py_INCREF(__pyx_v_b);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_b);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_b));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_b = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.blue.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_b);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_5alpha___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_5alpha___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":220 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_a->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_a)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.alpha.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_10BaseSprite_5alpha___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_a); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite_5alpha___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_a) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_a);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":222 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; goto __pyx_L1;}
  Py_INCREF(__pyx_v_a);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_a);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_a));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_a = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.alpha.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_a);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_5scale___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_5scale___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":235 */
  __pyx_1 = ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale_y != Py_None;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":236 */
    __pyx_2 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; goto __pyx_L1;}
    __pyx_3 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale_y->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale_y)); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; goto __pyx_L1;}
    __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; goto __pyx_L1;}
    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_2);
    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_3);
    __pyx_2 = 0;
    __pyx_3 = 0;
    __pyx_r = __pyx_4;
    __pyx_4 = 0;
    goto __pyx_L0;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":238 */
    __pyx_2 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; goto __pyx_L1;}
    __pyx_r = __pyx_2;
    __pyx_2 = 0;
    goto __pyx_L0;
  }
  __pyx_L2:;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.scale.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n_iter;

static int __pyx_f_6rabbyt_7sprites_10BaseSprite_5scale___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_s); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite_5scale___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_s) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_s);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":240 */
  /*try:*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":241 */
    __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_iter); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; goto __pyx_L2;}
    __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; goto __pyx_L2;}
    Py_INCREF(__pyx_v_s);
    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_s);
    __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; goto __pyx_L2;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
  }
  /*else:*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":246 */
    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; goto __pyx_L1;}
    __pyx_3 = PyInt_FromLong(0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; goto __pyx_L1;}
    __pyx_1 = PyObject_GetItem(__pyx_v_s, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; goto __pyx_L1;}
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
    __pyx_1 = 0;
    __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; goto __pyx_L1;}
    Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale));
    ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale = ((struct __pyx_obj_5anims_Anim *)__pyx_1);
    __pyx_1 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":247 */
    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
    __pyx_3 = PyInt_FromLong(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
    __pyx_1 = PyObject_GetItem(__pyx_v_s, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
    __pyx_1 = 0;
    __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
    Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale_y));
    ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale_y = ((struct __pyx_obj_5anims_Anim *)__pyx_1);
    __pyx_1 = 0;
  }
  goto __pyx_L3;
  __pyx_L2:;
  Py_XDECREF(__pyx_1); __pyx_1 = 0;
  Py_XDECREF(__pyx_2); __pyx_2 = 0;
  Py_XDECREF(__pyx_3); __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":242 */
  /*except:*/ {
    __Pyx_AddTraceback("rabbyt.sprites.__set__");
    __pyx_1 = __Pyx_GetExcValue(); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":243 */
    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; goto __pyx_L1;}
    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; goto __pyx_L1;}
    Py_INCREF(__pyx_v_s);
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_s);
    __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; goto __pyx_L1;}
    Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale));
    ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale = ((struct __pyx_obj_5anims_Anim *)__pyx_1);
    __pyx_1 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":244 */
    Py_INCREF(Py_None);
    Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale_y));
    ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale_y = ((struct __pyx_obj_5anims_Anim *)Py_None);
    goto __pyx_L3;
  }
  __pyx_L3:;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.scale.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_s);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_3rot___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_3rot___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":252 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_rot->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_rot)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.rot.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_10BaseSprite_3rot___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_r); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite_3rot___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_r) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_r);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":254 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; goto __pyx_L1;}
  Py_INCREF(__pyx_v_r);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_r);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_rot));
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_rot = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.rot.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_r);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_15bounding_radius___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_15bounding_radius___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":264 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_bounding_radius); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.bounding_radius.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_10BaseSprite_15bounding_radius___set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_r); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite_15bounding_radius___set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_r) {
  float __pyx_v_r;
  int __pyx_r;
  Py_INCREF(__pyx_v_self);
  __pyx_v_r = PyFloat_AsDouble(__pyx_arg_r); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":266 */
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_bounding_radius = __pyx_v_r;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.bounding_radius.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_23bounding_radius_squared___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_23bounding_radius_squared___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":278 */
  __pyx_1 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_bounding_radius * ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_bounding_radius)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.bounding_radius_squared.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_10BaseSprite_23bounding_radius_squared___set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_r2); /*proto*/
static int __pyx_f_6rabbyt_7sprites_10BaseSprite_23bounding_radius_squared___set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_r2) {
  float __pyx_v_r2;
  int __pyx_r;
  Py_INCREF(__pyx_v_self);
  __pyx_v_r2 = PyFloat_AsDouble(__pyx_arg_r2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":280 */
  ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_bounding_radius = sqrtf(__pyx_v_r2);

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.bounding_radius_squared.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static struct __pyx_t_6rabbyt_7sprites_Point2d __pyx_f_6rabbyt_7sprites_10BaseSprite__convert_offset(struct __pyx_obj_6rabbyt_7sprites_BaseSprite *__pyx_v_self,float __pyx_v_ox,float __pyx_v_oy) {
  float __pyx_v_x;
  float __pyx_v_y;
  float __pyx_v_sx;
  float __pyx_v_sy;
  float __pyx_v_r;
  float __pyx_v_co;
  float __pyx_v_si;
  struct __pyx_t_6rabbyt_7sprites_Point2d __pyx_v_out;
  struct __pyx_t_6rabbyt_7sprites_Point2d __pyx_r;
  int __pyx_1;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":286 */
  __pyx_v_x = ((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->_x->__pyx_vtab)->g(__pyx_v_self->_x);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":287 */
  __pyx_v_y = ((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->_y->__pyx_vtab)->g(__pyx_v_self->_y);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":288 */
  __pyx_v_sx = ((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->_scale->__pyx_vtab)->g(__pyx_v_self->_scale);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":289 */
  __pyx_1 = __pyx_v_self->_scale_y == Py_None;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":290 */
    __pyx_v_sy = __pyx_v_sx;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":292 */
    __pyx_v_sy = ((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->_scale_y->__pyx_vtab)->g(__pyx_v_self->_scale_y);
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":293 */
  __pyx_v_r = ((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->_rot->__pyx_vtab)->g(__pyx_v_self->_rot);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":295 */
  __pyx_v_co = cosf((__pyx_v_r * __pyx_v_6rabbyt_7sprites_pi_over_180));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":296 */
  __pyx_v_si = sinf((__pyx_v_r * __pyx_v_6rabbyt_7sprites_pi_over_180));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":297 */
  __pyx_v_out.x = ((((__pyx_v_ox * __pyx_v_sx) * __pyx_v_co) - ((__pyx_v_oy * __pyx_v_sy) * __pyx_v_si)) + __pyx_v_x);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":298 */
  __pyx_v_out.y = ((((__pyx_v_ox * __pyx_v_sx) * __pyx_v_si) + ((__pyx_v_oy * __pyx_v_sy) * __pyx_v_co)) + __pyx_v_y);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":299 */
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_convert_offset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_7sprites_10BaseSprite_convert_offset[] = "\n        ``convert_offset((x, y)) -> (x, y)``\n\n        Converts coordinates relative to this sprite to global coordinates,\n        including rotation and scaling.\n        ";
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_convert_offset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_offset = 0;
  struct __pyx_t_6rabbyt_7sprites_Point2d __pyx_v_c_offset;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  float __pyx_3;
  float __pyx_4;
  PyObject *__pyx_5 = 0;
  static char *__pyx_argnames[] = {"offset",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_offset)) return 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_offset);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":309 */
  __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; goto __pyx_L1;}
  __pyx_2 = PyObject_GetItem(__pyx_v_offset, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_3 = PyFloat_AsDouble(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_1 = PyInt_FromLong(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; goto __pyx_L1;}
  __pyx_2 = PyObject_GetItem(__pyx_v_offset, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_4 = PyFloat_AsDouble(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_v_c_offset = ((struct __pyx_vtabstruct_6rabbyt_7sprites_BaseSprite *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->__pyx_vtab)->_convert_offset(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self),__pyx_3,__pyx_4);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":310 */
  __pyx_1 = PyFloat_FromDouble(__pyx_v_c_offset.x); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; goto __pyx_L1;}
  __pyx_2 = PyFloat_FromDouble(__pyx_v_c_offset.y); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; goto __pyx_L1;}
  __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_5, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_r = __pyx_5;
  __pyx_5 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_5);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.convert_offset");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_offset);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_attrgetter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_7sprites_10BaseSprite_attrgetter[] = "\n        ``attrgetter(name)``\n\n        Returns an anim that returns the value of the given attribute name.\n\n        Perhaps this is easiest to see with an example.  The following two lines\n        will do the same thing, only the second is much, much faster:\n\n            .. sourcecode:: python\n\n                sprite.x = lambda: other_sprite.x\n\n                sprite.x = other_sprite.attrgetter(\"x\")\n\n        The anim returned by attrgetter is implemented in Pyrex (C) and\n        will retrieve the value without doing a python attribute lookup.\n\n        This doesn\'t work for all attributes -- only ``x``, ``y``, ``scale``,\n        ``rot``, ``red``, ``green``, ``blue``, and ``alpha``.  (Subclasses\n        might add others.)\n        ";
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_attrgetter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  static char *__pyx_argnames[] = {"name",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_name)) return 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_name);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":334 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n__base_sprite_attr_getters); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; goto __pyx_L1;}
  __pyx_2 = PyObject_GetItem(__pyx_1, __pyx_v_name); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_self);
  __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_r = __pyx_3;
  __pyx_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.attrgetter");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_name);
  return __pyx_r;
}

static PyObject *__pyx_n_render_after_transform;

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_render(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_7sprites_10BaseSprite_render[] = "\n        ``render()``\n\n        Renders the sprite.\n\n        By default, this method will transform the OpenGL modelview matrix\n        according to ``x``, ``y``, ``scale``, and ``rot``, and call\n        ``render_after_transform()``.\n\n        If you want transformations to be handled for you, leave this method and\n        override ``render_after_transform()``.  Otherwise, override\n        ``render()``.\n        ";
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_render(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_x;
  float __pyx_v_y;
  float __pyx_v_sx;
  float __pyx_v_sy;
  float __pyx_v_r;
  PyObject *__pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  static char *__pyx_argnames[] = {0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":352 */
  __pyx_v_x = ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_x->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_x);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":353 */
  __pyx_v_y = ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_y->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_y);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":354 */
  __pyx_v_sx = ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":355 */
  __pyx_1 = ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale_y == Py_None;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":356 */
    __pyx_v_sy = __pyx_v_sx;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":358 */
    __pyx_v_sy = ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale_y->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_scale_y);
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":359 */
  __pyx_v_r = ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_rot->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_self)->_rot);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":361 */
  __pyx_1 = (__pyx_v_x != 0);
  if (!__pyx_1) {
    __pyx_1 = (__pyx_v_y != 0);
    if (!__pyx_1) {
      __pyx_1 = (__pyx_v_sx != 1);
      if (!__pyx_1) {
        __pyx_1 = (__pyx_v_sy != 1);
        if (!__pyx_1) {
          __pyx_1 = (__pyx_v_r != 0);
        }
      }
    }
  }
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":362 */
    glPushMatrix();

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":363 */
    /*try:*/ {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":364 */
      glTranslatef(__pyx_v_x,__pyx_v_y,0);

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":365 */
      glRotatef(__pyx_v_r,0,0,1);

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":366 */
      glScalef(__pyx_v_sx,__pyx_v_sy,1);

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":367 */
      __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_render_after_transform); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; goto __pyx_L5;}
      __pyx_3 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; goto __pyx_L5;}
      Py_DECREF(__pyx_2); __pyx_2 = 0;
      Py_DECREF(__pyx_3); __pyx_3 = 0;
    }
    /*finally:*/ {
      int __pyx_why;
      __pyx_why = 0; goto __pyx_L6;
      __pyx_L5: {
        __pyx_why = 4;
        Py_XDECREF(__pyx_2); __pyx_2 = 0;
        Py_XDECREF(__pyx_3); __pyx_3 = 0;
        PyErr_Fetch(&__pyx_2, &__pyx_3, &__pyx_4);
        __pyx_1 = __pyx_lineno;
        goto __pyx_L6;
      }
      __pyx_L6:;

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":369 */
      glPopMatrix();
      switch (__pyx_why) {
        case 3: goto __pyx_L0;
        case 4: {
          PyErr_Restore(__pyx_2, __pyx_3, __pyx_4);
          __pyx_lineno = __pyx_1;
          __pyx_2 = 0;
          __pyx_3 = 0;
          __pyx_4 = 0;
          goto __pyx_L1;
        }
      }
    }
    goto __pyx_L3;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":371 */
    __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_render_after_transform); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; goto __pyx_L1;}
    __pyx_3 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
  }
  __pyx_L3:;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.sprites.BaseSprite.render");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_render_after_transform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_7sprites_10BaseSprite_render_after_transform[] = "\n        ``render_after_transform()``\n\n        This method is called by ``BaseSprite.render()`` after transformations\n        have been applied.\n\n        If you don\'t want to mess with doing transformations yourself, you can\n        override this method instead of ``render()``.\n        ";
static PyObject *__pyx_f_6rabbyt_7sprites_10BaseSprite_render_after_transform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r;
  static char *__pyx_argnames[] = {0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":383 */

  __pyx_r = Py_None; Py_INCREF(Py_None);
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_20_AnimBaseSpriteAttr____init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_7sprites_20_AnimBaseSpriteAttr____init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_6rabbyt_7sprites_BaseSprite *__pyx_v_sprite = 0;
  int __pyx_r;
  static char *__pyx_argnames[] = {"sprite",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_sprite)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_sprite);
  if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sprite), __pyx_ptype_6rabbyt_7sprites_BaseSprite, 0, "sprite")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":390 */
  Py_INCREF(((PyObject *)__pyx_v_sprite));
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ *)__pyx_v_self)->sprite));
  ((struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ *)__pyx_v_self)->sprite = __pyx_v_sprite;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.sprites._AnimBaseSpriteAttr_.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_sprite);
  return __pyx_r;
}

static float __pyx_f_6rabbyt_7sprites_21_AnimBaseSpriteAttr_x_g(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_x *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":394 */
  __pyx_r = ((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->__pyx_base.sprite->_x->__pyx_vtab)->g(__pyx_v_self->__pyx_base.sprite->_x);
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static float __pyx_f_6rabbyt_7sprites_21_AnimBaseSpriteAttr_y_g(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_y *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":398 */
  __pyx_r = ((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->__pyx_base.sprite->_y->__pyx_vtab)->g(__pyx_v_self->__pyx_base.sprite->_y);
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static float __pyx_f_6rabbyt_7sprites_23_AnimBaseSpriteAttr_rot_g(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_rot *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":402 */
  __pyx_r = ((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->__pyx_base.sprite->_rot->__pyx_vtab)->g(__pyx_v_self->__pyx_base.sprite->_rot);
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static float __pyx_f_6rabbyt_7sprites_25_AnimBaseSpriteAttr_scale_g(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_scale *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":406 */
  __pyx_r = ((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->__pyx_base.sprite->_scale->__pyx_vtab)->g(__pyx_v_self->__pyx_base.sprite->_scale);
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n__red;
static PyObject *__pyx_n_g;

static float __pyx_f_6rabbyt_7sprites_23_AnimBaseSpriteAttr_red_g(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_red *__pyx_v_self) {
  float __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  float __pyx_3;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":410 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self->__pyx_base.sprite), __pyx_n__red); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_g); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_3 = PyFloat_AsDouble(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_r = __pyx_3;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_WriteUnraisable("rabbyt.sprites._AnimBaseSpriteAttr_red.g");
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n__green;

static float __pyx_f_6rabbyt_7sprites_25_AnimBaseSpriteAttr_green_g(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_green *__pyx_v_self) {
  float __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  float __pyx_3;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":414 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self->__pyx_base.sprite), __pyx_n__green); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_g); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_3 = PyFloat_AsDouble(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_r = __pyx_3;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_WriteUnraisable("rabbyt.sprites._AnimBaseSpriteAttr_green.g");
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n__blue;

static float __pyx_f_6rabbyt_7sprites_24_AnimBaseSpriteAttr_blue_g(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_blue *__pyx_v_self) {
  float __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  float __pyx_3;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":418 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self->__pyx_base.sprite), __pyx_n__blue); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_g); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_3 = PyFloat_AsDouble(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_r = __pyx_3;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_WriteUnraisable("rabbyt.sprites._AnimBaseSpriteAttr_blue.g");
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n__alpha;

static float __pyx_f_6rabbyt_7sprites_25_AnimBaseSpriteAttr_alpha_g(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha *__pyx_v_self) {
  float __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  float __pyx_3;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":422 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self->__pyx_base.sprite), __pyx_n__alpha); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_g); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_3 = PyFloat_AsDouble(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_r = __pyx_3;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_WriteUnraisable("rabbyt.sprites._AnimBaseSpriteAttr_alpha.g");
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_6Sprite___new__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_7sprites_6Sprite___new__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kwargs = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  static char *__pyx_argnames[] = {0};
  if (__Pyx_GetStarArgs(&__pyx_args, &__pyx_kwds, __pyx_argnames, 0, &__pyx_v_args, &__pyx_v_kwargs) < 0) return -1;
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) {
    Py_XDECREF(__pyx_args);
    Py_XDECREF(__pyx_kwds);
    Py_XDECREF(__pyx_v_args);
    Py_XDECREF(__pyx_v_kwargs);
    return -1;
  }
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":462 */
  __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
  __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_5anims_AnimConst), __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_u));
  ((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_u = ((struct __pyx_obj_5anims_Anim *)__pyx_1);
  __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":463 */
  __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
  __pyx_2 = 0;
  __pyx_2 = PyObject_CallObject(((PyObject*)__pyx_ptype_5anims_AnimConst), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (!__Pyx_TypeTest(__pyx_2, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_v));
  ((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_v = ((struct __pyx_obj_5anims_Anim *)__pyx_2);
  __pyx_2 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.__new__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_XDECREF(__pyx_v_args);
  Py_XDECREF(__pyx_v_kwargs);
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_XDECREF(__pyx_args);
  Py_XDECREF(__pyx_kwds);
  return __pyx_r;
}

static PyObject *__pyx_n_load_texture_file_hook;
static PyObject *__pyx_n_isinstance;
static PyObject *__pyx_n_basestring;
static PyObject *__pyx_n_texture_id;
static PyObject *__pyx_n_int;
static PyObject *__pyx_n_long;
static PyObject *__pyx_n_ValueError;
static PyObject *__pyx_n_shape;
static PyObject *__pyx_n_tex_shape;
static PyObject *__pyx_n_list;
static PyObject *__pyx_n_pop;
static PyObject *__pyx_n___init__;

static PyObject *__pyx_k42p;
static PyObject *__pyx_k44p;
static PyObject *__pyx_k45p;

static char (__pyx_k42[]) = "rabbyt._rabbyt";
static char (__pyx_k44[]) = "texture should be either an int or str.";
static char (__pyx_k45[]) = "uv u v left right top bottom";

static int __pyx_f_6rabbyt_7sprites_6Sprite___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_7sprites_6Sprite___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_texture = 0;
  PyObject *__pyx_v_shape = 0;
  PyObject *__pyx_v_tex_shape = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_v_load_texture_file_hook;
  PyObject *__pyx_v_tex_size;
  PyObject *__pyx_v_w;
  PyObject *__pyx_v_h;
  PyObject *__pyx_v_s;
  PyObject *__pyx_v_key;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  int __pyx_4;
  PyObject *__pyx_5 = 0;
  int __pyx_6;
  PyObject *__pyx_7 = 0;
  PyObject *__pyx_8 = 0;
  static char *__pyx_argnames[] = {"texture","shape","tex_shape",0};
  __pyx_v_texture = __pyx_k36;
  __pyx_v_shape = __pyx_k37;
  __pyx_v_tex_shape = __pyx_k38;
  if (__Pyx_GetStarArgs(&__pyx_args, &__pyx_kwds, __pyx_argnames, 3, 0, &__pyx_v_kwargs) < 0) return -1;
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "|OOO", __pyx_argnames, &__pyx_v_texture, &__pyx_v_shape, &__pyx_v_tex_shape)) {
    Py_XDECREF(__pyx_args);
    Py_XDECREF(__pyx_kwds);
    Py_XDECREF(__pyx_v_kwargs);
    return -1;
  }
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_texture);
  Py_INCREF(__pyx_v_shape);
  Py_INCREF(__pyx_v_tex_shape);
  __pyx_v_load_texture_file_hook = Py_None; Py_INCREF(Py_None);
  __pyx_v_tex_size = Py_None; Py_INCREF(Py_None);
  __pyx_v_w = Py_None; Py_INCREF(Py_None);
  __pyx_v_h = Py_None; Py_INCREF(Py_None);
  __pyx_v_s = Py_None; Py_INCREF(Py_None);
  __pyx_v_key = Py_None; Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":467 */
  __pyx_1 = PyList_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; goto __pyx_L1;}
  Py_INCREF(__pyx_n_load_texture_file_hook);
  PyList_SET_ITEM(__pyx_1, 0, __pyx_n_load_texture_file_hook);
  __pyx_2 = __Pyx_Import(__pyx_k42p, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_n_load_texture_file_hook); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; goto __pyx_L1;}
  Py_DECREF(__pyx_v_load_texture_file_hook);
  __pyx_v_load_texture_file_hook = __pyx_1;
  __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":468 */
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; goto __pyx_L1;}
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_basestring); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; goto __pyx_L1;}
  Py_INCREF(__pyx_v_texture);
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_texture);
  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_1);
  __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  __pyx_4 = PyObject_IsTrue(__pyx_1); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (__pyx_4) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":469 */
    __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; goto __pyx_L1;}
    Py_INCREF(__pyx_v_texture);
    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_texture);
    __pyx_3 = PyObject_CallObject(__pyx_v_load_texture_file_hook, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_1 = PyObject_GetIter(__pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; goto __pyx_L1;}
    if (PyObject_SetAttr(__pyx_v_self, __pyx_n_texture_id, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_3 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; goto __pyx_L1;}
    Py_DECREF(__pyx_v_tex_size);
    __pyx_v_tex_size = __pyx_3;
    __pyx_3 = 0;
    if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    goto __pyx_L2;
  }
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; goto __pyx_L1;}
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; goto __pyx_L1;}
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_long); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; goto __pyx_L1;}
  __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_3);
  PyTuple_SET_ITEM(__pyx_5, 1, __pyx_1);
  __pyx_3 = 0;
  __pyx_1 = 0;
  __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; goto __pyx_L1;}
  Py_INCREF(__pyx_v_texture);
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_texture);
  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_5);
  __pyx_5 = 0;
  __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  __pyx_4 = PyObject_IsTrue(__pyx_1); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (__pyx_4) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":471 */
    if (PyObject_SetAttr(__pyx_v_self, __pyx_n_texture_id, __pyx_v_texture) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; goto __pyx_L1;}

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":472 */
    Py_INCREF(Py_None);
    Py_DECREF(__pyx_v_tex_size);
    __pyx_v_tex_size = Py_None;
    goto __pyx_L2;
  }
  if (PyObject_Cmp(__pyx_v_texture, Py_None, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; goto __pyx_L1;}
  __pyx_4 = __pyx_4 != 0;
  if (__pyx_4) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":474 */
    __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; goto __pyx_L1;}
    __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; goto __pyx_L1;}
    Py_INCREF(__pyx_k44p);
    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k44p);
    __pyx_3 = PyObject_CallObject(__pyx_5, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; goto __pyx_L1;}
    Py_DECREF(__pyx_5); __pyx_5 = 0;
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __Pyx_Raise(__pyx_3, 0, 0);
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; goto __pyx_L1;}
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":476 */
  __pyx_4 = PyObject_IsTrue(__pyx_v_shape); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; goto __pyx_L1;}
  __pyx_6 = (!__pyx_4);
  if (__pyx_6) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":477 */
    __pyx_4 = PyObject_IsTrue(__pyx_v_tex_size); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; goto __pyx_L1;}
    if (__pyx_4) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":478 */
      __pyx_1 = PyObject_GetIter(__pyx_v_tex_size); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; goto __pyx_L1;}
      __pyx_5 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; goto __pyx_L1;}
      Py_DECREF(__pyx_v_w);
      __pyx_v_w = __pyx_5;
      __pyx_5 = 0;
      __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; goto __pyx_L1;}
      Py_DECREF(__pyx_v_h);
      __pyx_v_h = __pyx_2;
      __pyx_2 = 0;
      if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; goto __pyx_L1;}
      Py_DECREF(__pyx_1); __pyx_1 = 0;

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":479 */
      __pyx_3 = PyNumber_Negative(__pyx_v_w); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;}
      __pyx_5 = PyInt_FromLong(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;}
      __pyx_2 = PyNumber_Divide(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;}
      Py_DECREF(__pyx_3); __pyx_3 = 0;
      Py_DECREF(__pyx_5); __pyx_5 = 0;
      __pyx_1 = PyInt_FromLong(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;}
      __pyx_3 = PyNumber_Divide(__pyx_v_h, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;}
      Py_DECREF(__pyx_1); __pyx_1 = 0;
      __pyx_5 = PyInt_FromLong(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;}
      __pyx_1 = PyNumber_Divide(__pyx_v_w, __pyx_5); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;}
      Py_DECREF(__pyx_5); __pyx_5 = 0;
      __pyx_5 = PyNumber_Negative(__pyx_v_h); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;}
      __pyx_7 = PyInt_FromLong(2); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;}
      __pyx_8 = PyNumber_Divide(__pyx_5, __pyx_7); if (!__pyx_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;}
      Py_DECREF(__pyx_5); __pyx_5 = 0;
      Py_DECREF(__pyx_7); __pyx_7 = 0;
      __pyx_5 = PyList_New(4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;}
      PyList_SET_ITEM(__pyx_5, 0, __pyx_2);
      PyList_SET_ITEM(__pyx_5, 1, __pyx_3);
      PyList_SET_ITEM(__pyx_5, 2, __pyx_1);
      PyList_SET_ITEM(__pyx_5, 3, __pyx_8);
      __pyx_2 = 0;
      __pyx_3 = 0;
      __pyx_1 = 0;
      __pyx_8 = 0;
      Py_DECREF(__pyx_v_shape);
      __pyx_v_shape = __pyx_5;
      __pyx_5 = 0;
      goto __pyx_L4;
    }
    /*else*/ {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":481 */
      __pyx_7 = PyFloat_FromDouble(10.); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; goto __pyx_L1;}
      Py_DECREF(__pyx_v_s);
      __pyx_v_s = __pyx_7;
      __pyx_7 = 0;

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":482 */
      __pyx_2 = PyNumber_Negative(__pyx_v_s); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; goto __pyx_L1;}
      __pyx_3 = PyNumber_Negative(__pyx_v_s); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; goto __pyx_L1;}
      __pyx_1 = PyList_New(4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; goto __pyx_L1;}
      Py_INCREF(__pyx_v_s);
      PyList_SET_ITEM(__pyx_1, 0, __pyx_v_s);
      Py_INCREF(__pyx_v_s);
      PyList_SET_ITEM(__pyx_1, 1, __pyx_v_s);
      PyList_SET_ITEM(__pyx_1, 2, __pyx_2);
      PyList_SET_ITEM(__pyx_1, 3, __pyx_3);
      __pyx_2 = 0;
      __pyx_3 = 0;
      Py_DECREF(__pyx_v_shape);
      __pyx_v_shape = __pyx_1;
      __pyx_1 = 0;
    }
    __pyx_L4:;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":483 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_shape, __pyx_v_shape) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":485 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_tex_shape, __pyx_v_tex_shape) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":487 */
  __pyx_8 = __Pyx_GetName(__pyx_b, __pyx_n_list); if (!__pyx_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; goto __pyx_L1;}
  __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; goto __pyx_L1;}
  Py_INCREF(__pyx_v_kwargs);
  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_kwargs);
  __pyx_7 = PyObject_CallObject(__pyx_8, __pyx_5); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; goto __pyx_L1;}
  Py_DECREF(__pyx_8); __pyx_8 = 0;
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  __pyx_2 = PyObject_GetIter(__pyx_7); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; goto __pyx_L1;}
  Py_DECREF(__pyx_7); __pyx_7 = 0;
  for (;;) {
    __pyx_3 = PyIter_Next(__pyx_2);
    if (!__pyx_3) {
      if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; goto __pyx_L1;}
      break;
    }
    Py_DECREF(__pyx_v_key);
    __pyx_v_key = __pyx_3;
    __pyx_3 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":488 */
    __pyx_1 = PyObject_GetAttr(__pyx_k45p, __pyx_n_split); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; goto __pyx_L1;}
    __pyx_8 = PyObject_CallObject(__pyx_1, 0); if (!__pyx_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __pyx_6 = PySequence_Contains(__pyx_8, __pyx_v_key); if (__pyx_6 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; goto __pyx_L1;}
    Py_DECREF(__pyx_8); __pyx_8 = 0;
    if (__pyx_6) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":489 */
      __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_setattr); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; goto __pyx_L1;}
      __pyx_7 = PyObject_GetAttr(__pyx_v_kwargs, __pyx_n_pop); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; goto __pyx_L1;}
      __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; goto __pyx_L1;}
      Py_INCREF(__pyx_v_key);
      PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_key);
      __pyx_1 = PyObject_CallObject(__pyx_7, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; goto __pyx_L1;}
      Py_DECREF(__pyx_7); __pyx_7 = 0;
      Py_DECREF(__pyx_3); __pyx_3 = 0;
      __pyx_8 = PyTuple_New(3); if (!__pyx_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; goto __pyx_L1;}
      Py_INCREF(__pyx_v_self);
      PyTuple_SET_ITEM(__pyx_8, 0, __pyx_v_self);
      Py_INCREF(__pyx_v_key);
      PyTuple_SET_ITEM(__pyx_8, 1, __pyx_v_key);
      PyTuple_SET_ITEM(__pyx_8, 2, __pyx_1);
      __pyx_1 = 0;
      __pyx_7 = PyObject_CallObject(__pyx_5, __pyx_8); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; goto __pyx_L1;}
      Py_DECREF(__pyx_5); __pyx_5 = 0;
      Py_DECREF(__pyx_8); __pyx_8 = 0;
      Py_DECREF(__pyx_7); __pyx_7 = 0;
      goto __pyx_L7;
    }
    __pyx_L7:;
  }
  Py_DECREF(__pyx_2); __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":490 */
  __pyx_3 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_7sprites_BaseSprite), __pyx_n___init__); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_self);
  __pyx_5 = PyEval_CallObjectWithKeywords(__pyx_3, __pyx_1, __pyx_v_kwargs); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_5); __pyx_5 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_5);
  Py_XDECREF(__pyx_7);
  Py_XDECREF(__pyx_8);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_XDECREF(__pyx_v_kwargs);
  Py_DECREF(__pyx_v_load_texture_file_hook);
  Py_DECREF(__pyx_v_tex_size);
  Py_DECREF(__pyx_v_w);
  Py_DECREF(__pyx_v_h);
  Py_DECREF(__pyx_v_s);
  Py_DECREF(__pyx_v_key);
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_texture);
  Py_DECREF(__pyx_v_shape);
  Py_DECREF(__pyx_v_tex_shape);
  Py_XDECREF(__pyx_args);
  Py_XDECREF(__pyx_kwds);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_5shape___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_5shape___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  PyObject *__pyx_6 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":507 */
  __pyx_1 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[0]).x); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; goto __pyx_L1;}
  __pyx_2 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[0]).y); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_1 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[1]).x); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; goto __pyx_L1;}
  __pyx_2 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[1]).y); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; goto __pyx_L1;}
  __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_4, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_1 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[2]).x); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; goto __pyx_L1;}
  __pyx_2 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[2]).y); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; goto __pyx_L1;}
  __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_5, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_1 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[3]).x); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; goto __pyx_L1;}
  __pyx_2 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[3]).y); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; goto __pyx_L1;}
  __pyx_6 = PyTuple_New(2); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_6, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_6, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_1 = PyTuple_New(4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_3);
  PyTuple_SET_ITEM(__pyx_1, 1, __pyx_4);
  PyTuple_SET_ITEM(__pyx_1, 2, __pyx_5);
  PyTuple_SET_ITEM(__pyx_1, 3, __pyx_6);
  __pyx_3 = 0;
  __pyx_4 = 0;
  __pyx_5 = 0;
  __pyx_6 = 0;
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_5);
  Py_XDECREF(__pyx_6);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.shape.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n_len;
static PyObject *__pyx_n_enumerate;
static PyObject *__pyx_n_bounding_radius;
static PyObject *__pyx_n_bounding_radius_squared;

static int __pyx_f_6rabbyt_7sprites_6Sprite_5shape___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_s); /*proto*/
static int __pyx_f_6rabbyt_7sprites_6Sprite_5shape___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_s) {
  PyObject *__pyx_v_l;
  PyObject *__pyx_v_t;
  PyObject *__pyx_v_r;
  PyObject *__pyx_v_b;
  int __pyx_v_i;
  float __pyx_v_d;
  PyObject *__pyx_v_v;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  int __pyx_4;
  PyObject *__pyx_5 = 0;
  PyObject *__pyx_6 = 0;
  float __pyx_7;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_s);
  __pyx_v_l = Py_None; Py_INCREF(Py_None);
  __pyx_v_t = Py_None; Py_INCREF(Py_None);
  __pyx_v_r = Py_None; Py_INCREF(Py_None);
  __pyx_v_b = Py_None; Py_INCREF(Py_None);
  __pyx_v_v = Py_None; Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":512 */
  /*try:*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":513 */
    __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; goto __pyx_L2;}
    __pyx_2 = PyObject_GetItem(__pyx_v_s, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; goto __pyx_L2;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; goto __pyx_L2;}
    __pyx_3 = PyObject_GetItem(__pyx_2, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; goto __pyx_L2;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
  }
  goto __pyx_L3;
  __pyx_L2:;
  Py_XDECREF(__pyx_2); __pyx_2 = 0;
  Py_XDECREF(__pyx_1); __pyx_1 = 0;
  Py_XDECREF(__pyx_3); __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":514 */
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_TypeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; goto __pyx_L1;}
  __pyx_4 = PyErr_ExceptionMatches(__pyx_2);
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (__pyx_4) {
    __Pyx_AddTraceback("rabbyt.sprites.__set__");
    __pyx_1 = __Pyx_GetExcValue(); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":515 */
    __pyx_3 = PyObject_GetIter(__pyx_v_s); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; goto __pyx_L1;}
    __pyx_2 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; goto __pyx_L1;}
    Py_DECREF(__pyx_v_l);
    __pyx_v_l = __pyx_2;
    __pyx_2 = 0;
    __pyx_1 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; goto __pyx_L1;}
    Py_DECREF(__pyx_v_t);
    __pyx_v_t = __pyx_1;
    __pyx_1 = 0;
    __pyx_2 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; goto __pyx_L1;}
    Py_DECREF(__pyx_v_r);
    __pyx_v_r = __pyx_2;
    __pyx_2 = 0;
    __pyx_1 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; goto __pyx_L1;}
    Py_DECREF(__pyx_v_b);
    __pyx_v_b = __pyx_1;
    __pyx_1 = 0;
    if (__Pyx_EndUnpack(__pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":516 */
    __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; goto __pyx_L1;}
    Py_INCREF(__pyx_v_l);
    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_l);
    Py_INCREF(__pyx_v_t);
    PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_t);
    __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; goto __pyx_L1;}
    Py_INCREF(__pyx_v_r);
    PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_r);
    Py_INCREF(__pyx_v_t);
    PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_t);
    __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; goto __pyx_L1;}
    Py_INCREF(__pyx_v_r);
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_r);
    Py_INCREF(__pyx_v_b);
    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_b);
    __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; goto __pyx_L1;}
    Py_INCREF(__pyx_v_l);
    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_l);
    Py_INCREF(__pyx_v_b);
    PyTuple_SET_ITEM(__pyx_5, 1, __pyx_v_b);
    __pyx_6 = PyList_New(4); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; goto __pyx_L1;}
    PyList_SET_ITEM(__pyx_6, 0, __pyx_2);
    PyList_SET_ITEM(__pyx_6, 1, __pyx_1);
    PyList_SET_ITEM(__pyx_6, 2, __pyx_3);
    PyList_SET_ITEM(__pyx_6, 3, __pyx_5);
    __pyx_2 = 0;
    __pyx_1 = 0;
    __pyx_3 = 0;
    __pyx_5 = 0;
    Py_DECREF(__pyx_v_s);
    __pyx_v_s = __pyx_6;
    __pyx_6 = 0;
    goto __pyx_L3;
  }
  goto __pyx_L1;
  __pyx_L3:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":517 */
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; goto __pyx_L1;}
  Py_INCREF(__pyx_v_s);
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_s);
  __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_5 = PyInt_FromLong(4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; goto __pyx_L1;}
  if (PyObject_Cmp(__pyx_3, __pyx_5, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; goto __pyx_L1;}
  __pyx_4 = __pyx_4 == 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  if (!__pyx_4) {
    PyErr_SetNone(PyExc_AssertionError);
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; goto __pyx_L1;}
  }

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":520 */
  __pyx_6 = __Pyx_GetName(__pyx_b, __pyx_n_enumerate); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
  Py_INCREF(__pyx_v_s);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_s);
  __pyx_1 = PyObject_CallObject(__pyx_6, __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
  Py_DECREF(__pyx_6); __pyx_6 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_3 = PyObject_GetIter(__pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  for (;;) {
    __pyx_5 = PyIter_Next(__pyx_3);
    if (!__pyx_5) {
      if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
      break;
    }
    __pyx_6 = PyObject_GetIter(__pyx_5); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
    Py_DECREF(__pyx_5); __pyx_5 = 0;
    __pyx_2 = __Pyx_UnpackItem(__pyx_6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
    __pyx_4 = PyInt_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_v_i = __pyx_4;
    __pyx_1 = __Pyx_UnpackItem(__pyx_6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
    Py_DECREF(__pyx_v_v);
    __pyx_v_v = __pyx_1;
    __pyx_1 = 0;
    if (__Pyx_EndUnpack(__pyx_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
    Py_DECREF(__pyx_6); __pyx_6 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":521 */
    __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; goto __pyx_L1;}
    __pyx_2 = PyObject_GetItem(__pyx_v_v, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; goto __pyx_L1;}
    Py_DECREF(__pyx_5); __pyx_5 = 0;
    __pyx_7 = PyFloat_AsDouble(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    (((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[__pyx_v_i]).x = __pyx_7;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":522 */
    __pyx_1 = PyInt_FromLong(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; goto __pyx_L1;}
    __pyx_6 = PyObject_GetItem(__pyx_v_v, __pyx_1); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __pyx_7 = PyFloat_AsDouble(__pyx_6); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; goto __pyx_L1;}
    Py_DECREF(__pyx_6); __pyx_6 = 0;
    (((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[__pyx_v_i]).y = __pyx_7;
  }
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":523 */
  __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_bounding_radius, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; goto __pyx_L1;}
  Py_DECREF(__pyx_5); __pyx_5 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":524 */
  for (__pyx_v_i = 0; __pyx_v_i < 4; ++__pyx_v_i) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":525 */
    __pyx_v_d = (pow((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[__pyx_v_i]).x, 2) + pow((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[__pyx_v_i]).y, 2));

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":526 */
    __pyx_2 = PyFloat_FromDouble(__pyx_v_d); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; goto __pyx_L1;}
    __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_bounding_radius_squared); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; goto __pyx_L1;}
    if (PyObject_Cmp(__pyx_2, __pyx_1, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; goto __pyx_L1;}
    __pyx_4 = __pyx_4 > 0;
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    if (__pyx_4) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":527 */
      __pyx_6 = PyFloat_FromDouble(__pyx_v_d); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; goto __pyx_L1;}
      if (PyObject_SetAttr(__pyx_v_self, __pyx_n_bounding_radius_squared, __pyx_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; goto __pyx_L1;}
      Py_DECREF(__pyx_6); __pyx_6 = 0;
      goto __pyx_L8;
    }
    __pyx_L8:;
  }

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_5);
  Py_XDECREF(__pyx_6);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.shape.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_l);
  Py_DECREF(__pyx_v_t);
  Py_DECREF(__pyx_v_r);
  Py_DECREF(__pyx_v_b);
  Py_DECREF(__pyx_v_v);
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_s);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_9tex_shape___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_9tex_shape___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  PyObject *__pyx_6 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":539 */
  __pyx_1 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[0]).x); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; goto __pyx_L1;}
  __pyx_2 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[0]).y); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_1 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[1]).x); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; goto __pyx_L1;}
  __pyx_2 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[1]).y); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; goto __pyx_L1;}
  __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_4, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_1 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[2]).x); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; goto __pyx_L1;}
  __pyx_2 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[2]).y); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; goto __pyx_L1;}
  __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_5, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_1 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[3]).x); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; goto __pyx_L1;}
  __pyx_2 = PyFloat_FromDouble((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[3]).y); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; goto __pyx_L1;}
  __pyx_6 = PyTuple_New(2); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_6, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_6, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_1 = PyTuple_New(4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_3);
  PyTuple_SET_ITEM(__pyx_1, 1, __pyx_4);
  PyTuple_SET_ITEM(__pyx_1, 2, __pyx_5);
  PyTuple_SET_ITEM(__pyx_1, 3, __pyx_6);
  __pyx_3 = 0;
  __pyx_4 = 0;
  __pyx_5 = 0;
  __pyx_6 = 0;
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_5);
  Py_XDECREF(__pyx_6);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.tex_shape.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_6Sprite_9tex_shape___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_s); /*proto*/
static int __pyx_f_6rabbyt_7sprites_6Sprite_9tex_shape___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_s) {
  PyObject *__pyx_v_l;
  PyObject *__pyx_v_t;
  PyObject *__pyx_v_r;
  PyObject *__pyx_v_b;
  PyObject *__pyx_v_i;
  PyObject *__pyx_v_coord;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  int __pyx_4;
  PyObject *__pyx_5 = 0;
  PyObject *__pyx_6 = 0;
  float __pyx_7;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_s);
  __pyx_v_l = Py_None; Py_INCREF(Py_None);
  __pyx_v_t = Py_None; Py_INCREF(Py_None);
  __pyx_v_r = Py_None; Py_INCREF(Py_None);
  __pyx_v_b = Py_None; Py_INCREF(Py_None);
  __pyx_v_i = Py_None; Py_INCREF(Py_None);
  __pyx_v_coord = Py_None; Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":544 */
  /*try:*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":545 */
    __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; goto __pyx_L2;}
    __pyx_2 = PyObject_GetItem(__pyx_v_s, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; goto __pyx_L2;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; goto __pyx_L2;}
    __pyx_3 = PyObject_GetItem(__pyx_2, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; goto __pyx_L2;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
  }
  goto __pyx_L3;
  __pyx_L2:;
  Py_XDECREF(__pyx_2); __pyx_2 = 0;
  Py_XDECREF(__pyx_1); __pyx_1 = 0;
  Py_XDECREF(__pyx_3); __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":546 */
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_TypeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; goto __pyx_L1;}
  __pyx_4 = PyErr_ExceptionMatches(__pyx_2);
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (__pyx_4) {
    __Pyx_AddTraceback("rabbyt.sprites.__set__");
    __pyx_1 = __Pyx_GetExcValue(); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":547 */
    __pyx_3 = PyObject_GetIter(__pyx_v_s); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; goto __pyx_L1;}
    __pyx_2 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; goto __pyx_L1;}
    Py_DECREF(__pyx_v_l);
    __pyx_v_l = __pyx_2;
    __pyx_2 = 0;
    __pyx_1 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; goto __pyx_L1;}
    Py_DECREF(__pyx_v_t);
    __pyx_v_t = __pyx_1;
    __pyx_1 = 0;
    __pyx_2 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; goto __pyx_L1;}
    Py_DECREF(__pyx_v_r);
    __pyx_v_r = __pyx_2;
    __pyx_2 = 0;
    __pyx_1 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; goto __pyx_L1;}
    Py_DECREF(__pyx_v_b);
    __pyx_v_b = __pyx_1;
    __pyx_1 = 0;
    if (__Pyx_EndUnpack(__pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":548 */
    __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; goto __pyx_L1;}
    Py_INCREF(__pyx_v_l);
    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_l);
    Py_INCREF(__pyx_v_t);
    PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_t);
    __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; goto __pyx_L1;}
    Py_INCREF(__pyx_v_r);
    PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_r);
    Py_INCREF(__pyx_v_t);
    PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_t);
    __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; goto __pyx_L1;}
    Py_INCREF(__pyx_v_r);
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_r);
    Py_INCREF(__pyx_v_b);
    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_b);
    __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; goto __pyx_L1;}
    Py_INCREF(__pyx_v_l);
    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_l);
    Py_INCREF(__pyx_v_b);
    PyTuple_SET_ITEM(__pyx_5, 1, __pyx_v_b);
    __pyx_6 = PyList_New(4); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; goto __pyx_L1;}
    PyList_SET_ITEM(__pyx_6, 0, __pyx_2);
    PyList_SET_ITEM(__pyx_6, 1, __pyx_1);
    PyList_SET_ITEM(__pyx_6, 2, __pyx_3);
    PyList_SET_ITEM(__pyx_6, 3, __pyx_5);
    __pyx_2 = 0;
    __pyx_1 = 0;
    __pyx_3 = 0;
    __pyx_5 = 0;
    Py_DECREF(__pyx_v_s);
    __pyx_v_s = __pyx_6;
    __pyx_6 = 0;
    goto __pyx_L3;
  }
  goto __pyx_L1;
  __pyx_L3:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":549 */
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
  Py_INCREF(__pyx_v_s);
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_s);
  __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_5 = PyInt_FromLong(4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
  if (PyObject_Cmp(__pyx_3, __pyx_5, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
  __pyx_4 = __pyx_4 == 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  if (!__pyx_4) {
    PyErr_SetNone(PyExc_AssertionError);
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
  }

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":550 */
  __pyx_6 = __Pyx_GetName(__pyx_b, __pyx_n_enumerate); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;}
  Py_INCREF(__pyx_v_s);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_s);
  __pyx_1 = PyObject_CallObject(__pyx_6, __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;}
  Py_DECREF(__pyx_6); __pyx_6 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_3 = PyObject_GetIter(__pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  for (;;) {
    __pyx_5 = PyIter_Next(__pyx_3);
    if (!__pyx_5) {
      if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;}
      break;
    }
    __pyx_6 = PyObject_GetIter(__pyx_5); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;}
    Py_DECREF(__pyx_5); __pyx_5 = 0;
    __pyx_2 = __Pyx_UnpackItem(__pyx_6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;}
    Py_DECREF(__pyx_v_i);
    __pyx_v_i = __pyx_2;
    __pyx_2 = 0;
    __pyx_1 = __Pyx_UnpackItem(__pyx_6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;}
    Py_DECREF(__pyx_v_coord);
    __pyx_v_coord = __pyx_1;
    __pyx_1 = 0;
    if (__Pyx_EndUnpack(__pyx_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;}
    Py_DECREF(__pyx_6); __pyx_6 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":551 */
    __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 551; goto __pyx_L1;}
    __pyx_2 = PyObject_GetItem(__pyx_v_coord, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 551; goto __pyx_L1;}
    Py_DECREF(__pyx_5); __pyx_5 = 0;
    __pyx_7 = PyFloat_AsDouble(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 551; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_4 = PyInt_AsLong(__pyx_v_i); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 551; goto __pyx_L1;}
    (((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[__pyx_4]).x = __pyx_7;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":552 */
    __pyx_1 = PyInt_FromLong(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; goto __pyx_L1;}
    __pyx_6 = PyObject_GetItem(__pyx_v_coord, __pyx_1); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __pyx_7 = PyFloat_AsDouble(__pyx_6); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; goto __pyx_L1;}
    Py_DECREF(__pyx_6); __pyx_6 = 0;
    __pyx_4 = PyInt_AsLong(__pyx_v_i); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; goto __pyx_L1;}
    (((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[__pyx_4]).y = __pyx_7;
  }
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_5);
  Py_XDECREF(__pyx_6);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.tex_shape.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_l);
  Py_DECREF(__pyx_v_t);
  Py_DECREF(__pyx_v_r);
  Py_DECREF(__pyx_v_b);
  Py_DECREF(__pyx_v_i);
  Py_DECREF(__pyx_v_coord);
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_s);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_1u___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_1u___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":558 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_u->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_u)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.u.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_6Sprite_1u___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_u); /*proto*/
static int __pyx_f_6rabbyt_7sprites_6Sprite_1u___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_u) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_u);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":560 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; goto __pyx_L1;}
  Py_INCREF(__pyx_v_u);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_u);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_u));
  ((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_u = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.u.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_u);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_1v___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_1v___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":565 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_v->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_v)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.v.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_6Sprite_1v___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_f_6rabbyt_7sprites_6Sprite_1v___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_v);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":567 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; goto __pyx_L1;}
  Py_INCREF(__pyx_v_v);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_v);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_v));
  ((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_v = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.v.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_v);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_2uv___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_2uv___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":577 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_u->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_u)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; goto __pyx_L1;}
  __pyx_2 = PyFloat_FromDouble(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_v->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_v)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_r = __pyx_3;
  __pyx_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.uv.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_6Sprite_2uv___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_p); /*proto*/
static int __pyx_f_6rabbyt_7sprites_6Sprite_2uv___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_p) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_p);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":579 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;}
  __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;}
  __pyx_3 = PyObject_GetItem(__pyx_v_p, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3);
  __pyx_3 = 0;
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_u));
  ((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_u = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":580 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
  __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
  __pyx_3 = PyObject_GetItem(__pyx_v_p, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3);
  __pyx_3 = 0;
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_v));
  ((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_v = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.uv.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_p);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_10texture_id___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_10texture_id___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":590 */
  __pyx_1 = PyInt_FromLong(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_tex_id); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.texture_id.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_6Sprite_10texture_id___set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_t); /*proto*/
static int __pyx_f_6rabbyt_7sprites_6Sprite_10texture_id___set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_t) {
  int __pyx_v_t;
  int __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_v_t = PyInt_AsLong(__pyx_arg_t); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":592 */
  ((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_tex_id = __pyx_v_t;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.texture_id.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_render(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_7sprites_6Sprite_render[] = "\n        ``render()``\n\n        Renders the sprite onto the screen.\n\n        This method depends on the global OpenGL state.  Keep that in mind if\n        things seem to go crazy.\n        ";
static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_render(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_x;
  float __pyx_v_y;
  float __pyx_v_u;
  float __pyx_v_v;
  float __pyx_v_sx;
  float __pyx_v_sy;
  float __pyx_v_r;
  int __pyx_v_i;
  float __pyx_v_vx;
  float __pyx_v_vy;
  float __pyx_v_co;
  float __pyx_v_si;
  PyObject *__pyx_r;
  int __pyx_1;
  static char *__pyx_argnames[] = {0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":603 */
  __pyx_1 = (((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_tex_id != 0);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":604 */
    glEnable(GL_TEXTURE_2D);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":605 */
    glBindTexture(GL_TEXTURE_2D,((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_tex_id);
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":607 */
    glDisable(GL_TEXTURE_2D);
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":608 */
  glColor4f(((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._r->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._r),((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._g->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._g),((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._b->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._b),((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._a->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._a));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":611 */
  __pyx_v_x = ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._x->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._x);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":612 */
  __pyx_v_y = ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._y->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._y);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":613 */
  __pyx_v_u = ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_u->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_u);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":614 */
  __pyx_v_v = ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_v->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->_v);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":615 */
  __pyx_v_sx = ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._scale->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._scale);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":616 */
  __pyx_1 = ((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._scale_y == Py_None;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":617 */
    __pyx_v_sy = __pyx_v_sx;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":619 */
    __pyx_v_sy = ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._scale_y->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._scale_y);
  }
  __pyx_L3:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":620 */
  __pyx_v_r = ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._rot->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._rot);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":625 */
  glBegin(GL_QUADS);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":626 */
  __pyx_1 = (__pyx_v_r == 0);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":627 */
    glTexCoord2f(((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[0]).x + __pyx_v_u),((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[0]).y + __pyx_v_v));

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":628 */
    glVertex2f((((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[0]).x * __pyx_v_sx) + __pyx_v_x),(((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[0]).y * __pyx_v_sy) + __pyx_v_y));

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":629 */
    glTexCoord2f(((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[1]).x + __pyx_v_u),((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[1]).y + __pyx_v_v));

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":630 */
    glVertex2f((((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[1]).x * __pyx_v_sx) + __pyx_v_x),(((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[1]).y * __pyx_v_sy) + __pyx_v_y));

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":631 */
    glTexCoord2f(((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[2]).x + __pyx_v_u),((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[2]).y + __pyx_v_v));

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":632 */
    glVertex2f((((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[2]).x * __pyx_v_sx) + __pyx_v_x),(((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[2]).y * __pyx_v_sy) + __pyx_v_y));

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":633 */
    glTexCoord2f(((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[3]).x + __pyx_v_u),((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[3]).y + __pyx_v_v));

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":634 */
    glVertex2f((((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[3]).x * __pyx_v_sx) + __pyx_v_x),(((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[3]).y * __pyx_v_sy) + __pyx_v_y));
    goto __pyx_L4;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":636 */
    __pyx_v_r = (__pyx_v_r * __pyx_v_6rabbyt_7sprites_pi_over_180);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":637 */
    __pyx_v_co = cosf(__pyx_v_r);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":638 */
    __pyx_v_si = sinf(__pyx_v_r);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":639 */
    for (__pyx_v_i = 0; __pyx_v_i < 4; ++__pyx_v_i) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":640 */
      glTexCoord2f(((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[__pyx_v_i]).x + __pyx_v_u),((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->texcoords[__pyx_v_i]).y + __pyx_v_v));

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":641 */
      __pyx_v_vx = ((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[__pyx_v_i]).x * __pyx_v_sx);

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":642 */
      __pyx_v_vy = ((((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->vertexes[__pyx_v_i]).y * __pyx_v_sy);

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":643 */
      glVertex2f((((__pyx_v_vx * __pyx_v_co) - (__pyx_v_vy * __pyx_v_si)) + __pyx_v_x),(((__pyx_v_vx * __pyx_v_si) + (__pyx_v_vy * __pyx_v_co)) + __pyx_v_y));
    }
  }
  __pyx_L4:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":644 */
  glEnd();

  __pyx_r = Py_None; Py_INCREF(Py_None);
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n_u;
static PyObject *__pyx_n_v;
static PyObject *__pyx_n_attrgetter;


static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_attrgetter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_7sprites_6Sprite_attrgetter[] = "\n        ``attrgetter(name)``\n\n        Returns an anim that returns the value of the given attribute name.\n\n        (See the docs for ``BaseSprite.attrgetter()`` for more information.)\n\n        Sprite adds support for ``u`` and ``v``, in addition to the attributes\n        supported by ``BaseSprite``.\n        ";
static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_attrgetter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  static char *__pyx_argnames[] = {"name",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_name)) return 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_name);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":657 */
  if (PyObject_Cmp(__pyx_v_name, __pyx_n_u, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; goto __pyx_L1;}
  __pyx_1 = __pyx_1 == 0;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":658 */
    __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; goto __pyx_L1;}
    Py_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
    __pyx_3 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_u), __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_r = __pyx_3;
    __pyx_3 = 0;
    goto __pyx_L0;
    goto __pyx_L2;
  }
  if (PyObject_Cmp(__pyx_v_name, __pyx_n_v, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 659; goto __pyx_L1;}
  __pyx_1 = __pyx_1 == 0;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":660 */
    __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; goto __pyx_L1;}
    Py_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
    __pyx_3 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_v), __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_r = __pyx_3;
    __pyx_3 = 0;
    goto __pyx_L0;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":662 */
    __pyx_2 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_7sprites_BaseSprite), __pyx_n_attrgetter); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; goto __pyx_L1;}
    __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; goto __pyx_L1;}
    Py_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_self);
    Py_INCREF(__pyx_v_name);
    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_name);
    __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_r = __pyx_4;
    __pyx_4 = 0;
    goto __pyx_L0;
  }
  __pyx_L2:;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.attrgetter");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_name);
  return __pyx_r;
}

static struct __pyx_t_6rabbyt_7sprites_float2 __pyx_f_6rabbyt_7sprites_6Sprite__bounds_x(struct __pyx_obj_6rabbyt_7sprites_Sprite *__pyx_v_self) {
  struct __pyx_t_6rabbyt_7sprites_float2 __pyx_v_bounds;
  float __pyx_v_r;
  float __pyx_v_co;
  float __pyx_v_si;
  float __pyx_v_x;
  float __pyx_v_s;
  int __pyx_v_i;
  struct __pyx_t_6rabbyt_7sprites_float2 __pyx_r;
  int __pyx_1;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":669 */
  __pyx_v_s = ((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->__pyx_base._scale->__pyx_vtab)->g(__pyx_v_self->__pyx_base._scale);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":670 */
  __pyx_v_r = (((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->__pyx_base._rot->__pyx_vtab)->g(__pyx_v_self->__pyx_base._rot) * __pyx_v_6rabbyt_7sprites_pi_over_180);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":671 */
  __pyx_v_co = cosf(__pyx_v_r);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":672 */
  __pyx_v_si = sinf(__pyx_v_r);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":674 */
  for (__pyx_v_i = 0; __pyx_v_i < 4; ++__pyx_v_i) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":675 */
    __pyx_v_x = ((((__pyx_v_self->vertexes[__pyx_v_i]).x * __pyx_v_co) - ((__pyx_v_self->vertexes[__pyx_v_i]).y * __pyx_v_si)) * __pyx_v_s);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":676 */
    __pyx_1 = (__pyx_v_i == 0);
    if (__pyx_1) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":677 */
      __pyx_v_bounds.a = __pyx_v_x;

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":678 */
      __pyx_v_bounds.b = __pyx_v_x;
      goto __pyx_L4;
    }
    /*else*/ {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":680 */
      __pyx_1 = (__pyx_v_bounds.a > __pyx_v_x);
      if (__pyx_1) {

        /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":681 */
        __pyx_v_bounds.a = __pyx_v_x;
        goto __pyx_L5;
      }
      __pyx_L5:;

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":682 */
      __pyx_1 = (__pyx_v_bounds.b < __pyx_v_x);
      if (__pyx_1) {

        /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":683 */
        __pyx_v_bounds.b = __pyx_v_x;
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    __pyx_L4:;
  }

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":684 */
  __pyx_r = __pyx_v_bounds;
  goto __pyx_L0;

  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static struct __pyx_t_6rabbyt_7sprites_float2 __pyx_f_6rabbyt_7sprites_6Sprite__bounds_y(struct __pyx_obj_6rabbyt_7sprites_Sprite *__pyx_v_self) {
  struct __pyx_t_6rabbyt_7sprites_float2 __pyx_v_bounds;
  float __pyx_v_r;
  float __pyx_v_co;
  float __pyx_v_si;
  float __pyx_v_y;
  float __pyx_v_s;
  int __pyx_v_i;
  struct __pyx_t_6rabbyt_7sprites_float2 __pyx_r;
  int __pyx_1;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":690 */
  __pyx_1 = __pyx_v_self->__pyx_base._scale_y == Py_None;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":691 */
    __pyx_v_s = ((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->__pyx_base._scale->__pyx_vtab)->g(__pyx_v_self->__pyx_base._scale);
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":693 */
    __pyx_v_s = ((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->__pyx_base._scale_y->__pyx_vtab)->g(__pyx_v_self->__pyx_base._scale_y);
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":694 */
  __pyx_v_r = (((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->__pyx_base._rot->__pyx_vtab)->g(__pyx_v_self->__pyx_base._rot) * __pyx_v_6rabbyt_7sprites_pi_over_180);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":695 */
  __pyx_v_co = cosf(__pyx_v_r);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":696 */
  __pyx_v_si = sinf(__pyx_v_r);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":698 */
  for (__pyx_v_i = 0; __pyx_v_i < 4; ++__pyx_v_i) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":699 */
    __pyx_v_y = ((((__pyx_v_self->vertexes[__pyx_v_i]).x * __pyx_v_si) + ((__pyx_v_self->vertexes[__pyx_v_i]).y * __pyx_v_co)) * __pyx_v_s);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":700 */
    __pyx_1 = (__pyx_v_i == 0);
    if (__pyx_1) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":701 */
      __pyx_v_bounds.a = __pyx_v_y;

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":702 */
      __pyx_v_bounds.b = __pyx_v_y;
      goto __pyx_L5;
    }
    /*else*/ {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":704 */
      __pyx_1 = (__pyx_v_bounds.a > __pyx_v_y);
      if (__pyx_1) {

        /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":705 */
        __pyx_v_bounds.a = __pyx_v_y;
        goto __pyx_L6;
      }
      __pyx_L6:;

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":706 */
      __pyx_1 = (__pyx_v_bounds.b < __pyx_v_y);
      if (__pyx_1) {

        /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":707 */
        __pyx_v_bounds.b = __pyx_v_y;
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    __pyx_L5:;
  }

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":708 */
  __pyx_r = __pyx_v_bounds;
  goto __pyx_L0;

  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_4left___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_4left___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":713 */
  __pyx_1 = PyFloat_FromDouble((((struct __pyx_vtabstruct_6rabbyt_7sprites_Sprite *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base.__pyx_vtab)->_bounds_x(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)).a + ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._x->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._x))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.left.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_6Sprite_4left___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
static int __pyx_f_6rabbyt_7sprites_6Sprite_4left___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_x);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":715 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_6rabbyt_7sprites_Sprite *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base.__pyx_vtab)->_bounds_x(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)).a); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; goto __pyx_L1;}
  __pyx_2 = PyNumber_Subtract(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_x, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.left.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_x);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_5right___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_5right___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":720 */
  __pyx_1 = PyFloat_FromDouble((((struct __pyx_vtabstruct_6rabbyt_7sprites_Sprite *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base.__pyx_vtab)->_bounds_x(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)).b + ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._x->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._x))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.right.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_6Sprite_5right___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
static int __pyx_f_6rabbyt_7sprites_6Sprite_5right___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_x);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":722 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_6rabbyt_7sprites_Sprite *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base.__pyx_vtab)->_bounds_x(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)).b); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; goto __pyx_L1;}
  __pyx_2 = PyNumber_Subtract(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_x, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.right.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_x);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_6bottom___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_6bottom___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":727 */
  __pyx_1 = PyFloat_FromDouble((((struct __pyx_vtabstruct_6rabbyt_7sprites_Sprite *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base.__pyx_vtab)->_bounds_y(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)).a + ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._y->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._y))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 727; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.bottom.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_6Sprite_6bottom___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static int __pyx_f_6rabbyt_7sprites_6Sprite_6bottom___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_y);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":729 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_6rabbyt_7sprites_Sprite *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base.__pyx_vtab)->_bounds_y(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)).a); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; goto __pyx_L1;}
  __pyx_2 = PyNumber_Subtract(__pyx_v_y, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_y, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.bottom.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_y);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_3top___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7sprites_6Sprite_3top___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":734 */
  __pyx_1 = PyFloat_FromDouble((((struct __pyx_vtabstruct_6rabbyt_7sprites_Sprite *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base.__pyx_vtab)->_bounds_y(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)).b + ((struct __pyx_vtabstruct_5anims_Anim *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._y->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base._y))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.top.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_6Sprite_3top___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static int __pyx_f_6rabbyt_7sprites_6Sprite_3top___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_y);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":736 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_6rabbyt_7sprites_Sprite *)((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)->__pyx_base.__pyx_vtab)->_bounds_y(((struct __pyx_obj_6rabbyt_7sprites_Sprite *)__pyx_v_self)).b); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; goto __pyx_L1;}
  __pyx_2 = PyNumber_Subtract(__pyx_v_y, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_y, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.sprites.Sprite.top.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_y);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7sprites_16_AnimSpriteAttr____init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_7sprites_16_AnimSpriteAttr____init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_6rabbyt_7sprites_Sprite *__pyx_v_sprite = 0;
  int __pyx_r;
  static char *__pyx_argnames[] = {"sprite",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_sprite)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF((PyObject *)__pyx_v_sprite);
  if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sprite), __pyx_ptype_6rabbyt_7sprites_Sprite, 0, "sprite")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":742 */
  Py_INCREF(((PyObject *)__pyx_v_sprite));
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_ *)__pyx_v_self)->sprite));
  ((struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_ *)__pyx_v_self)->sprite = ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)__pyx_v_sprite);

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.sprites._AnimSpriteAttr_.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF((PyObject *)__pyx_v_sprite);
  return __pyx_r;
}

static PyObject *__pyx_n__u;

static float __pyx_f_6rabbyt_7sprites_17_AnimSpriteAttr_u_g(struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_u *__pyx_v_self) {
  float __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  float __pyx_3;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":746 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self->__pyx_base.sprite), __pyx_n__u); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_g); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_3 = PyFloat_AsDouble(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_r = __pyx_3;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_WriteUnraisable("rabbyt.sprites._AnimSpriteAttr_u.g");
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n__v;

static float __pyx_f_6rabbyt_7sprites_17_AnimSpriteAttr_v_g(struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_v *__pyx_v_self) {
  float __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  float __pyx_3;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":750 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self->__pyx_base.sprite), __pyx_n__v); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 750; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_g); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 750; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 750; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_3 = PyFloat_AsDouble(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 750; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_r = __pyx_3;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_WriteUnraisable("rabbyt.sprites._AnimSpriteAttr_v.g");
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static __Pyx_InternTabEntry __pyx_intern_tab[] = {
  {&__pyx_n_TypeError, "TypeError"},
  {&__pyx_n_ValueError, "ValueError"},
  {&__pyx_n___author__, "__author__"},
  {&__pyx_n___credits__, "__credits__"},
  {&__pyx_n___docs_all__, "__docs_all__"},
  {&__pyx_n___init__, "__init__"},
  {&__pyx_n__alpha, "_alpha"},
  {&__pyx_n__base_sprite_attr_getters, "_base_sprite_attr_getters"},
  {&__pyx_n__blue, "_blue"},
  {&__pyx_n__green, "_green"},
  {&__pyx_n__red, "_red"},
  {&__pyx_n__u, "_u"},
  {&__pyx_n__v, "_v"},
  {&__pyx_n_alpha, "alpha"},
  {&__pyx_n_attrgetter, "attrgetter"},
  {&__pyx_n_basestring, "basestring"},
  {&__pyx_n_blue, "blue"},
  {&__pyx_n_bounding_radius, "bounding_radius"},
  {&__pyx_n_bounding_radius_squared, "bounding_radius_squared"},
  {&__pyx_n_dict, "dict"},
  {&__pyx_n_enumerate, "enumerate"},
  {&__pyx_n_g, "g"},
  {&__pyx_n_green, "green"},
  {&__pyx_n_int, "int"},
  {&__pyx_n_isinstance, "isinstance"},
  {&__pyx_n_items, "items"},
  {&__pyx_n_iter, "iter"},
  {&__pyx_n_len, "len"},
  {&__pyx_n_list, "list"},
  {&__pyx_n_load_texture_file_hook, "load_texture_file_hook"},
  {&__pyx_n_long, "long"},
  {&__pyx_n_pop, "pop"},
  {&__pyx_n_red, "red"},
  {&__pyx_n_render_after_transform, "render_after_transform"},
  {&__pyx_n_rot, "rot"},
  {&__pyx_n_scale, "scale"},
  {&__pyx_n_setattr, "setattr"},
  {&__pyx_n_shape, "shape"},
  {&__pyx_n_split, "split"},
  {&__pyx_n_tex_shape, "tex_shape"},
  {&__pyx_n_texture_id, "texture_id"},
  {&__pyx_n_to_Anim, "to_Anim"},
  {&__pyx_n_u, "u"},
  {&__pyx_n_v, "v"},
  {&__pyx_n_x, "x"},
  {&__pyx_n_y, "y"},
  {0, 0}
};

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  {&__pyx_k24p, __pyx_k24, sizeof(__pyx_k24)},
  {&__pyx_k25p, __pyx_k25, sizeof(__pyx_k25)},
  {&__pyx_k26p, __pyx_k26, sizeof(__pyx_k26)},
  {&__pyx_k39p, __pyx_k39, sizeof(__pyx_k39)},
  {&__pyx_k40p, __pyx_k40, sizeof(__pyx_k40)},
  {&__pyx_k41p, __pyx_k41, sizeof(__pyx_k41)},
  {&__pyx_k42p, __pyx_k42, sizeof(__pyx_k42)},
  {&__pyx_k44p, __pyx_k44, sizeof(__pyx_k44)},
  {&__pyx_k45p, __pyx_k45, sizeof(__pyx_k45)},
  {0, 0, 0}
};
static struct __pyx_vtabstruct_6rabbyt_7sprites_BaseSprite __pyx_vtable_6rabbyt_7sprites_BaseSprite;

static PyObject *__pyx_tp_new_6rabbyt_7sprites_BaseSprite(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = (*t->tp_alloc)(t, 0);
  struct __pyx_obj_6rabbyt_7sprites_BaseSprite *p = (struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites_BaseSprite **)&p->__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites_BaseSprite;
  p->__weakref__ = 0;
  p->_r = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  p->_g = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  p->_b = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  p->_a = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  p->_x = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  p->_y = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  p->_rot = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  p->_scale = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  p->_scale_y = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  if (__pyx_f_6rabbyt_7sprites_10BaseSprite___new__(o, a, k) < 0) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites_BaseSprite(PyObject *o) {
  struct __pyx_obj_6rabbyt_7sprites_BaseSprite *p = (struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)o;
  PyObject_ClearWeakRefs(o);
  Py_XDECREF(((PyObject *)p->_r));
  Py_XDECREF(((PyObject *)p->_g));
  Py_XDECREF(((PyObject *)p->_b));
  Py_XDECREF(((PyObject *)p->_a));
  Py_XDECREF(((PyObject *)p->_x));
  Py_XDECREF(((PyObject *)p->_y));
  Py_XDECREF(((PyObject *)p->_rot));
  Py_XDECREF(((PyObject *)p->_scale));
  Py_XDECREF(((PyObject *)p->_scale_y));
  (*o->ob_type->tp_free)(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites_BaseSprite(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_7sprites_BaseSprite *p = (struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)o;
  if (p->__weakref__) {
    e = (*v)(p->__weakref__, a); if (e) return e;
  }
  if (p->_r) {
    e = (*v)(((PyObject*)p->_r), a); if (e) return e;
  }
  if (p->_g) {
    e = (*v)(((PyObject*)p->_g), a); if (e) return e;
  }
  if (p->_b) {
    e = (*v)(((PyObject*)p->_b), a); if (e) return e;
  }
  if (p->_a) {
    e = (*v)(((PyObject*)p->_a), a); if (e) return e;
  }
  if (p->_x) {
    e = (*v)(((PyObject*)p->_x), a); if (e) return e;
  }
  if (p->_y) {
    e = (*v)(((PyObject*)p->_y), a); if (e) return e;
  }
  if (p->_rot) {
    e = (*v)(((PyObject*)p->_rot), a); if (e) return e;
  }
  if (p->_scale) {
    e = (*v)(((PyObject*)p->_scale), a); if (e) return e;
  }
  if (p->_scale_y) {
    e = (*v)(((PyObject*)p->_scale_y), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites_BaseSprite(PyObject *o) {
  struct __pyx_obj_6rabbyt_7sprites_BaseSprite *p = (struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)o;
  Py_XDECREF(p->__weakref__);
  p->__weakref__ = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->_r));
  p->_r = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->_g));
  p->_g = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->_b));
  p->_b = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->_a));
  p->_a = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->_x));
  p->_x = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->_y));
  p->_y = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->_rot));
  p->_rot = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->_scale));
  p->_scale = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->_scale_y));
  p->_scale_y = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  return 0;
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_10BaseSprite_xy(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_10BaseSprite_2xy___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_10BaseSprite_xy(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_10BaseSprite_2xy___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_10BaseSprite_x(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_10BaseSprite_1x___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_10BaseSprite_x(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_10BaseSprite_1x___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_10BaseSprite_y(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_10BaseSprite_1y___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_10BaseSprite_y(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_10BaseSprite_1y___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_10BaseSprite_rgb(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_10BaseSprite_3rgb___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_10BaseSprite_rgb(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_10BaseSprite_3rgb___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_10BaseSprite_rgba(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_10BaseSprite_4rgba___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_10BaseSprite_rgba(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_10BaseSprite_4rgba___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_10BaseSprite_red(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_10BaseSprite_3red___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_10BaseSprite_red(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_10BaseSprite_3red___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_10BaseSprite_green(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_10BaseSprite_5green___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_10BaseSprite_green(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_10BaseSprite_5green___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_10BaseSprite_blue(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_10BaseSprite_4blue___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_10BaseSprite_blue(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_10BaseSprite_4blue___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_10BaseSprite_alpha(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_10BaseSprite_5alpha___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_10BaseSprite_alpha(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_10BaseSprite_5alpha___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_10BaseSprite_scale(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_10BaseSprite_5scale___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_10BaseSprite_scale(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_10BaseSprite_5scale___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_10BaseSprite_rot(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_10BaseSprite_3rot___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_10BaseSprite_rot(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_10BaseSprite_3rot___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_10BaseSprite_bounding_radius(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_10BaseSprite_15bounding_radius___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_10BaseSprite_bounding_radius(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_10BaseSprite_15bounding_radius___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_10BaseSprite_bounding_radius_squared(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_10BaseSprite_23bounding_radius_squared___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_10BaseSprite_bounding_radius_squared(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_10BaseSprite_23bounding_radius_squared___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites_BaseSprite[] = {
  {"convert_offset", (PyCFunction)__pyx_f_6rabbyt_7sprites_10BaseSprite_convert_offset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_7sprites_10BaseSprite_convert_offset},
  {"attrgetter", (PyCFunction)__pyx_f_6rabbyt_7sprites_10BaseSprite_attrgetter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_7sprites_10BaseSprite_attrgetter},
  {"render", (PyCFunction)__pyx_f_6rabbyt_7sprites_10BaseSprite_render, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_7sprites_10BaseSprite_render},
  {"render_after_transform", (PyCFunction)__pyx_f_6rabbyt_7sprites_10BaseSprite_render_after_transform, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_7sprites_10BaseSprite_render_after_transform},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6rabbyt_7sprites_BaseSprite[] = {
  {"xy", __pyx_getprop_6rabbyt_7sprites_10BaseSprite_xy, __pyx_setprop_6rabbyt_7sprites_10BaseSprite_xy, __pyx_k1, 0},
  {"x", __pyx_getprop_6rabbyt_7sprites_10BaseSprite_x, __pyx_setprop_6rabbyt_7sprites_10BaseSprite_x, __pyx_k2, 0},
  {"y", __pyx_getprop_6rabbyt_7sprites_10BaseSprite_y, __pyx_setprop_6rabbyt_7sprites_10BaseSprite_y, __pyx_k3, 0},
  {"rgb", __pyx_getprop_6rabbyt_7sprites_10BaseSprite_rgb, __pyx_setprop_6rabbyt_7sprites_10BaseSprite_rgb, __pyx_k4, 0},
  {"rgba", __pyx_getprop_6rabbyt_7sprites_10BaseSprite_rgba, __pyx_setprop_6rabbyt_7sprites_10BaseSprite_rgba, __pyx_k5, 0},
  {"red", __pyx_getprop_6rabbyt_7sprites_10BaseSprite_red, __pyx_setprop_6rabbyt_7sprites_10BaseSprite_red, __pyx_k6, 0},
  {"green", __pyx_getprop_6rabbyt_7sprites_10BaseSprite_green, __pyx_setprop_6rabbyt_7sprites_10BaseSprite_green, __pyx_k7, 0},
  {"blue", __pyx_getprop_6rabbyt_7sprites_10BaseSprite_blue, __pyx_setprop_6rabbyt_7sprites_10BaseSprite_blue, __pyx_k8, 0},
  {"alpha", __pyx_getprop_6rabbyt_7sprites_10BaseSprite_alpha, __pyx_setprop_6rabbyt_7sprites_10BaseSprite_alpha, __pyx_k9, 0},
  {"scale", __pyx_getprop_6rabbyt_7sprites_10BaseSprite_scale, __pyx_setprop_6rabbyt_7sprites_10BaseSprite_scale, __pyx_k10, 0},
  {"rot", __pyx_getprop_6rabbyt_7sprites_10BaseSprite_rot, __pyx_setprop_6rabbyt_7sprites_10BaseSprite_rot, __pyx_k11, 0},
  {"bounding_radius", __pyx_getprop_6rabbyt_7sprites_10BaseSprite_bounding_radius, __pyx_setprop_6rabbyt_7sprites_10BaseSprite_bounding_radius, __pyx_k12, 0},
  {"bounding_radius_squared", __pyx_getprop_6rabbyt_7sprites_10BaseSprite_bounding_radius_squared, __pyx_setprop_6rabbyt_7sprites_10BaseSprite_bounding_radius_squared, __pyx_k13, 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_BaseSprite = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence_BaseSprite = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_BaseSprite = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer_BaseSprite = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites_BaseSprite = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites.BaseSprite", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites_BaseSprite), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites_BaseSprite, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_BaseSprite, /*tp_as_number*/
  &__pyx_tp_as_sequence_BaseSprite, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_BaseSprite, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_BaseSprite, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    ``BaseSprite(...)``\n\n    This class provides some basic functionality for sprites:\n\n    * transformations (x, y, rot, scale)\n    * color (red, green, blue, alpha)\n    * bounding_radius (for collision detection)\n\n    ``BaseSprite`` doesn\'t render anything itself  You\'ll want to subclass it\n    and override either ``render()`` or ``render_after_transform()``.\n\n    You can pass any of the ``BaseSprite`` properties as keyword arguments.\n    (``x``, ``y``, ``xy``, etc.)\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites_BaseSprite, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites_BaseSprite, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites_BaseSprite, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6rabbyt_7sprites_BaseSprite, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_f_6rabbyt_7sprites_10BaseSprite___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites_BaseSprite, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_ __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_;

static PyObject *__pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ *p = (struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_ **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  p->sprite = ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_(PyObject *o) {
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ *p = (struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ *)o;
  Py_XDECREF(((PyObject *)p->sprite));
  __pyx_ptype_5anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ *p = (struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ *)o;
  e = __pyx_ptype_5anims_Anim->tp_traverse(o, v, a); if (e) return e;
  if (p->sprite) {
    e = (*v)(((PyObject*)p->sprite), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_(PyObject *o) {
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ *p = (struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_ *)o;
  __pyx_ptype_5anims_Anim->tp_clear(o);
  Py_XDECREF(((PyObject *)p->sprite));
  p->sprite = ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)Py_None); Py_INCREF(Py_None);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__AnimBaseSpriteAttr_ = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__AnimBaseSpriteAttr_ = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__AnimBaseSpriteAttr_ = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__AnimBaseSpriteAttr_ = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_ = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites._AnimBaseSpriteAttr_", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__AnimBaseSpriteAttr_, /*tp_as_number*/
  &__pyx_tp_as_sequence__AnimBaseSpriteAttr_, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__AnimBaseSpriteAttr_, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__AnimBaseSpriteAttr_, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_f_6rabbyt_7sprites_20_AnimBaseSpriteAttr____init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_x __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_x;

static PyObject *__pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_x(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_x *p = (struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_x *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_x **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_x;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_x(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_x(PyObject *o, visitproc v, void *a) {
  int e;
  e = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_traverse(o, v, a); if (e) return e;
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_x(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_x[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__AnimBaseSpriteAttr_x = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__AnimBaseSpriteAttr_x = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__AnimBaseSpriteAttr_x = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__AnimBaseSpriteAttr_x = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_x = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites._AnimBaseSpriteAttr_x", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_x), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_x, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__AnimBaseSpriteAttr_x, /*tp_as_number*/
  &__pyx_tp_as_sequence__AnimBaseSpriteAttr_x, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__AnimBaseSpriteAttr_x, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__AnimBaseSpriteAttr_x, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_x, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_x, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_x, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_x, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_y __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_y;

static PyObject *__pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_y(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_y *p = (struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_y *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_y **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_y;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_y(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_y(PyObject *o, visitproc v, void *a) {
  int e;
  e = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_traverse(o, v, a); if (e) return e;
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_y(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_y[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__AnimBaseSpriteAttr_y = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__AnimBaseSpriteAttr_y = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__AnimBaseSpriteAttr_y = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__AnimBaseSpriteAttr_y = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_y = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites._AnimBaseSpriteAttr_y", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_y), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_y, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__AnimBaseSpriteAttr_y, /*tp_as_number*/
  &__pyx_tp_as_sequence__AnimBaseSpriteAttr_y, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__AnimBaseSpriteAttr_y, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__AnimBaseSpriteAttr_y, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_y, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_y, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_y, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_y, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_rot __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_rot;

static PyObject *__pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_rot(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_rot *p = (struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_rot *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_rot **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_rot;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_rot(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_rot(PyObject *o, visitproc v, void *a) {
  int e;
  e = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_traverse(o, v, a); if (e) return e;
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_rot(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_rot[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__AnimBaseSpriteAttr_rot = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__AnimBaseSpriteAttr_rot = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__AnimBaseSpriteAttr_rot = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__AnimBaseSpriteAttr_rot = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_rot = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites._AnimBaseSpriteAttr_rot", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_rot), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_rot, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__AnimBaseSpriteAttr_rot, /*tp_as_number*/
  &__pyx_tp_as_sequence__AnimBaseSpriteAttr_rot, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__AnimBaseSpriteAttr_rot, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__AnimBaseSpriteAttr_rot, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_rot, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_rot, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_rot, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_rot, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_scale __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_scale;

static PyObject *__pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_scale(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_scale *p = (struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_scale *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_scale **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_scale;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_scale(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_scale(PyObject *o, visitproc v, void *a) {
  int e;
  e = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_traverse(o, v, a); if (e) return e;
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_scale(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_scale[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__AnimBaseSpriteAttr_scale = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__AnimBaseSpriteAttr_scale = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__AnimBaseSpriteAttr_scale = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__AnimBaseSpriteAttr_scale = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_scale = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites._AnimBaseSpriteAttr_scale", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_scale), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_scale, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__AnimBaseSpriteAttr_scale, /*tp_as_number*/
  &__pyx_tp_as_sequence__AnimBaseSpriteAttr_scale, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__AnimBaseSpriteAttr_scale, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__AnimBaseSpriteAttr_scale, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_scale, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_scale, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_scale, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_scale, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_red __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_red;

static PyObject *__pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_red(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_red *p = (struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_red *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_red **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_red;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_red(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_red(PyObject *o, visitproc v, void *a) {
  int e;
  e = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_traverse(o, v, a); if (e) return e;
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_red(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_red[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__AnimBaseSpriteAttr_red = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__AnimBaseSpriteAttr_red = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__AnimBaseSpriteAttr_red = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__AnimBaseSpriteAttr_red = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_red = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites._AnimBaseSpriteAttr_red", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_red), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_red, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__AnimBaseSpriteAttr_red, /*tp_as_number*/
  &__pyx_tp_as_sequence__AnimBaseSpriteAttr_red, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__AnimBaseSpriteAttr_red, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__AnimBaseSpriteAttr_red, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_red, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_red, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_red, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_red, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_green __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_green;

static PyObject *__pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_green(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_green *p = (struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_green *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_green **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_green;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_green(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_green(PyObject *o, visitproc v, void *a) {
  int e;
  e = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_traverse(o, v, a); if (e) return e;
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_green(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_green[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__AnimBaseSpriteAttr_green = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__AnimBaseSpriteAttr_green = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__AnimBaseSpriteAttr_green = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__AnimBaseSpriteAttr_green = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_green = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites._AnimBaseSpriteAttr_green", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_green), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_green, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__AnimBaseSpriteAttr_green, /*tp_as_number*/
  &__pyx_tp_as_sequence__AnimBaseSpriteAttr_green, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__AnimBaseSpriteAttr_green, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__AnimBaseSpriteAttr_green, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_green, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_green, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_green, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_green, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_blue __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_blue;

static PyObject *__pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_blue(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_blue *p = (struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_blue *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_blue **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_blue;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_blue(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_blue(PyObject *o, visitproc v, void *a) {
  int e;
  e = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_traverse(o, v, a); if (e) return e;
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_blue(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_blue[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__AnimBaseSpriteAttr_blue = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__AnimBaseSpriteAttr_blue = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__AnimBaseSpriteAttr_blue = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__AnimBaseSpriteAttr_blue = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_blue = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites._AnimBaseSpriteAttr_blue", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_blue), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_blue, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__AnimBaseSpriteAttr_blue, /*tp_as_number*/
  &__pyx_tp_as_sequence__AnimBaseSpriteAttr_blue, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__AnimBaseSpriteAttr_blue, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__AnimBaseSpriteAttr_blue, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_blue, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_blue, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_blue, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_blue, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha;

static PyObject *__pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha *p = (struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha(PyObject *o, visitproc v, void *a) {
  int e;
  e = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_traverse(o, v, a); if (e) return e;
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__AnimBaseSpriteAttr_alpha = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__AnimBaseSpriteAttr_alpha = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__AnimBaseSpriteAttr_alpha = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__AnimBaseSpriteAttr_alpha = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites._AnimBaseSpriteAttr_alpha", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__AnimBaseSpriteAttr_alpha, /*tp_as_number*/
  &__pyx_tp_as_sequence__AnimBaseSpriteAttr_alpha, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__AnimBaseSpriteAttr_alpha, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__AnimBaseSpriteAttr_alpha, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7sprites_Sprite __pyx_vtable_6rabbyt_7sprites_Sprite;

static PyObject *__pyx_tp_new_6rabbyt_7sprites_Sprite(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_7sprites_BaseSprite->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7sprites_Sprite *p = (struct __pyx_obj_6rabbyt_7sprites_Sprite *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites_Sprite **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites_Sprite;
  p->_u = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  p->_v = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  if (__pyx_f_6rabbyt_7sprites_6Sprite___new__(o, a, k) < 0) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites_Sprite(PyObject *o) {
  struct __pyx_obj_6rabbyt_7sprites_Sprite *p = (struct __pyx_obj_6rabbyt_7sprites_Sprite *)o;
  PyObject_ClearWeakRefs(o);
  Py_XDECREF(((PyObject *)p->_u));
  Py_XDECREF(((PyObject *)p->_v));
  __pyx_ptype_6rabbyt_7sprites_BaseSprite->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites_Sprite(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_7sprites_Sprite *p = (struct __pyx_obj_6rabbyt_7sprites_Sprite *)o;
  e = __pyx_ptype_6rabbyt_7sprites_BaseSprite->tp_traverse(o, v, a); if (e) return e;
  if (p->_u) {
    e = (*v)(((PyObject*)p->_u), a); if (e) return e;
  }
  if (p->_v) {
    e = (*v)(((PyObject*)p->_v), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites_Sprite(PyObject *o) {
  struct __pyx_obj_6rabbyt_7sprites_Sprite *p = (struct __pyx_obj_6rabbyt_7sprites_Sprite *)o;
  __pyx_ptype_6rabbyt_7sprites_BaseSprite->tp_clear(o);
  Py_XDECREF(((PyObject *)p->_u));
  p->_u = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->_v));
  p->_v = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  return 0;
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_6Sprite_shape(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_6Sprite_5shape___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_6Sprite_shape(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_6Sprite_5shape___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_6Sprite_tex_shape(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_6Sprite_9tex_shape___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_6Sprite_tex_shape(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_6Sprite_9tex_shape___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_6Sprite_u(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_6Sprite_1u___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_6Sprite_u(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_6Sprite_1u___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_6Sprite_v(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_6Sprite_1v___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_6Sprite_v(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_6Sprite_1v___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_6Sprite_uv(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_6Sprite_2uv___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_6Sprite_uv(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_6Sprite_2uv___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_6Sprite_texture_id(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_6Sprite_10texture_id___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_6Sprite_texture_id(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_6Sprite_10texture_id___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_6Sprite_left(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_6Sprite_4left___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_6Sprite_left(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_6Sprite_4left___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_6Sprite_right(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_6Sprite_5right___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_6Sprite_right(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_6Sprite_5right___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_6Sprite_bottom(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_6Sprite_6bottom___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_6Sprite_bottom(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_6Sprite_6bottom___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7sprites_6Sprite_top(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7sprites_6Sprite_3top___get__(o);
}

static int __pyx_setprop_6rabbyt_7sprites_6Sprite_top(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7sprites_6Sprite_3top___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites_Sprite[] = {
  {"render", (PyCFunction)__pyx_f_6rabbyt_7sprites_6Sprite_render, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_7sprites_6Sprite_render},
  {"attrgetter", (PyCFunction)__pyx_f_6rabbyt_7sprites_6Sprite_attrgetter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_7sprites_6Sprite_attrgetter},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6rabbyt_7sprites_Sprite[] = {
  {"shape", __pyx_getprop_6rabbyt_7sprites_6Sprite_shape, __pyx_setprop_6rabbyt_7sprites_6Sprite_shape, __pyx_k14, 0},
  {"tex_shape", __pyx_getprop_6rabbyt_7sprites_6Sprite_tex_shape, __pyx_setprop_6rabbyt_7sprites_6Sprite_tex_shape, __pyx_k15, 0},
  {"u", __pyx_getprop_6rabbyt_7sprites_6Sprite_u, __pyx_setprop_6rabbyt_7sprites_6Sprite_u, __pyx_k16, 0},
  {"v", __pyx_getprop_6rabbyt_7sprites_6Sprite_v, __pyx_setprop_6rabbyt_7sprites_6Sprite_v, __pyx_k17, 0},
  {"uv", __pyx_getprop_6rabbyt_7sprites_6Sprite_uv, __pyx_setprop_6rabbyt_7sprites_6Sprite_uv, __pyx_k18, 0},
  {"texture_id", __pyx_getprop_6rabbyt_7sprites_6Sprite_texture_id, __pyx_setprop_6rabbyt_7sprites_6Sprite_texture_id, __pyx_k19, 0},
  {"left", __pyx_getprop_6rabbyt_7sprites_6Sprite_left, __pyx_setprop_6rabbyt_7sprites_6Sprite_left, __pyx_k20, 0},
  {"right", __pyx_getprop_6rabbyt_7sprites_6Sprite_right, __pyx_setprop_6rabbyt_7sprites_6Sprite_right, __pyx_k21, 0},
  {"bottom", __pyx_getprop_6rabbyt_7sprites_6Sprite_bottom, __pyx_setprop_6rabbyt_7sprites_6Sprite_bottom, __pyx_k22, 0},
  {"top", __pyx_getprop_6rabbyt_7sprites_6Sprite_top, __pyx_setprop_6rabbyt_7sprites_6Sprite_top, __pyx_k23, 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Sprite = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence_Sprite = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_Sprite = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer_Sprite = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites_Sprite = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites.Sprite", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites_Sprite), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites_Sprite, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_Sprite, /*tp_as_number*/
  &__pyx_tp_as_sequence_Sprite, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Sprite, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_Sprite, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    ``Sprite(texture=None, shape=None, tex_shape=(0,1,1,0), ...)``\n\n    This class provides a basic, four point, textured sprite.\n\n    All arguments are optional.\n\n    ``texture`` should be either the filename of an image or an OpenGL\n    texture id.  If ``shape`` is not given it will default to the\n    dimensions of the texture if they are available.  For more information\n    on ``shape`` and ``tex_shape`` read the docstrings for ``Sprite.shape``\n    and ``Sprite.tex_shape``\n\n    Additionally, you can pass values for most of the properties as keyword\n    arguments.  (``x``, ``y``, ``xy``, ``u``, ``v``, ``uv``, etc...)\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites_Sprite, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites_Sprite, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites_Sprite, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6rabbyt_7sprites_Sprite, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_f_6rabbyt_7sprites_6Sprite___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites_Sprite, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_ __pyx_vtable_6rabbyt_7sprites__AnimSpriteAttr_;

static PyObject *__pyx_tp_new_6rabbyt_7sprites__AnimSpriteAttr_(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_ *p = (struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_ *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_ **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_;
  p->sprite = ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites__AnimSpriteAttr_(PyObject *o) {
  struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_ *p = (struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_ *)o;
  Py_XDECREF(((PyObject *)p->sprite));
  __pyx_ptype_5anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites__AnimSpriteAttr_(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_ *p = (struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_ *)o;
  e = __pyx_ptype_5anims_Anim->tp_traverse(o, v, a); if (e) return e;
  if (p->sprite) {
    e = (*v)(((PyObject*)p->sprite), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites__AnimSpriteAttr_(PyObject *o) {
  struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_ *p = (struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_ *)o;
  __pyx_ptype_5anims_Anim->tp_clear(o);
  Py_XDECREF(((PyObject *)p->sprite));
  p->sprite = ((struct __pyx_obj_6rabbyt_7sprites_BaseSprite *)Py_None); Py_INCREF(Py_None);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites__AnimSpriteAttr_[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__AnimSpriteAttr_ = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__AnimSpriteAttr_ = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__AnimSpriteAttr_ = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__AnimSpriteAttr_ = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites__AnimSpriteAttr_ = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites._AnimSpriteAttr_", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites__AnimSpriteAttr_, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__AnimSpriteAttr_, /*tp_as_number*/
  &__pyx_tp_as_sequence__AnimSpriteAttr_, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__AnimSpriteAttr_, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__AnimSpriteAttr_, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites__AnimSpriteAttr_, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites__AnimSpriteAttr_, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites__AnimSpriteAttr_, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_f_6rabbyt_7sprites_16_AnimSpriteAttr____init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites__AnimSpriteAttr_, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_u __pyx_vtable_6rabbyt_7sprites__AnimSpriteAttr_u;

static PyObject *__pyx_tp_new_6rabbyt_7sprites__AnimSpriteAttr_u(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_u *p = (struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_u *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_u **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_u;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites__AnimSpriteAttr_u(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites__AnimSpriteAttr_u(PyObject *o, visitproc v, void *a) {
  int e;
  e = __pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_->tp_traverse(o, v, a); if (e) return e;
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites__AnimSpriteAttr_u(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites__AnimSpriteAttr_u[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__AnimSpriteAttr_u = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__AnimSpriteAttr_u = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__AnimSpriteAttr_u = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__AnimSpriteAttr_u = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites__AnimSpriteAttr_u = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites._AnimSpriteAttr_u", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_u), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites__AnimSpriteAttr_u, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__AnimSpriteAttr_u, /*tp_as_number*/
  &__pyx_tp_as_sequence__AnimSpriteAttr_u, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__AnimSpriteAttr_u, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__AnimSpriteAttr_u, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites__AnimSpriteAttr_u, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites__AnimSpriteAttr_u, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites__AnimSpriteAttr_u, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites__AnimSpriteAttr_u, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_v __pyx_vtable_6rabbyt_7sprites__AnimSpriteAttr_v;

static PyObject *__pyx_tp_new_6rabbyt_7sprites__AnimSpriteAttr_v(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_v *p = (struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_v *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7sprites__AnimSpriteAttr_v **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_v;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7sprites__AnimSpriteAttr_v(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7sprites__AnimSpriteAttr_v(PyObject *o, visitproc v, void *a) {
  int e;
  e = __pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_->tp_traverse(o, v, a); if (e) return e;
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7sprites__AnimSpriteAttr_v(PyObject *o) {
  __pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7sprites__AnimSpriteAttr_v[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__AnimSpriteAttr_v = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__AnimSpriteAttr_v = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__AnimSpriteAttr_v = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__AnimSpriteAttr_v = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7sprites__AnimSpriteAttr_v = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.sprites._AnimSpriteAttr_v", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7sprites__AnimSpriteAttr_v), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7sprites__AnimSpriteAttr_v, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__AnimSpriteAttr_v, /*tp_as_number*/
  &__pyx_tp_as_sequence__AnimSpriteAttr_v, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__AnimSpriteAttr_v, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__AnimSpriteAttr_v, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7sprites__AnimSpriteAttr_v, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7sprites__AnimSpriteAttr_v, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7sprites__AnimSpriteAttr_v, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7sprites__AnimSpriteAttr_v, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};

static struct PyMethodDef __pyx_methods[] = {
  {0, 0, 0, 0}
};

static void __pyx_init_filenames(void); /*proto*/

PyMODINIT_FUNC initsprites(void); /*proto*/
PyMODINIT_FUNC initsprites(void) {
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  __pyx_init_filenames();
  __pyx_m = Py_InitModule4("sprites", __pyx_methods, __pyx_mdoc, 0, PYTHON_API_VERSION);
  if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; goto __pyx_L1;};
  __pyx_b = PyImport_AddModule("__builtin__");
  if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; goto __pyx_L1;};
  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; goto __pyx_L1;};
  if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; goto __pyx_L1;};
  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; goto __pyx_L1;};
  __pyx_vtabptr_6rabbyt_7sprites_BaseSprite = &__pyx_vtable_6rabbyt_7sprites_BaseSprite;
  *(void(**)())&__pyx_vtable_6rabbyt_7sprites_BaseSprite._convert_offset = (void(*)())__pyx_f_6rabbyt_7sprites_10BaseSprite__convert_offset;
  __pyx_type_6rabbyt_7sprites_BaseSprite.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites_BaseSprite) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites_BaseSprite.tp_dict, __pyx_vtabptr_6rabbyt_7sprites_BaseSprite) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "BaseSprite", (PyObject *)&__pyx_type_6rabbyt_7sprites_BaseSprite) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; goto __pyx_L1;}
  if (__pyx_type_6rabbyt_7sprites_BaseSprite.tp_weaklistoffset == 0) __pyx_type_6rabbyt_7sprites_BaseSprite.tp_weaklistoffset = offsetof(struct __pyx_obj_6rabbyt_7sprites_BaseSprite, __weakref__);
  __pyx_ptype_6rabbyt_7sprites_BaseSprite = &__pyx_type_6rabbyt_7sprites_BaseSprite;
  __pyx_ptype_5anims_Anim = __Pyx_ImportType("anims", "Anim", sizeof(struct __pyx_obj_5anims_Anim)); if (!__pyx_ptype_5anims_Anim) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; goto __pyx_L1;}
  if (__Pyx_GetVtable(__pyx_ptype_5anims_Anim->tp_dict, &__pyx_vtabptr_5anims_Anim) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; goto __pyx_L1;}
  __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_ = &__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_.__pyx_base = *__pyx_vtabptr_5anims_Anim;
  __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_.tp_base = __pyx_ptype_5anims_Anim;
  __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_.tp_dict, __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimBaseSpriteAttr_", (PyObject *)&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_ = &__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_x = &__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_x;
  __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_x.__pyx_base = *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  *(void(**)())&__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_x.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7sprites_21_AnimBaseSpriteAttr_x_g;
  __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_x.tp_base = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_x) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_x.tp_dict, __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_x) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimBaseSpriteAttr_x", (PyObject *)&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_x) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_x = &__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_x;
  __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_y = &__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_y;
  __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_y.__pyx_base = *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  *(void(**)())&__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_y.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7sprites_21_AnimBaseSpriteAttr_y_g;
  __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_y.tp_base = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_y) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_y.tp_dict, __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_y) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimBaseSpriteAttr_y", (PyObject *)&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_y) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_y = &__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_y;
  __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_rot = &__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_rot;
  __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_rot.__pyx_base = *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  *(void(**)())&__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_rot.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7sprites_23_AnimBaseSpriteAttr_rot_g;
  __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_rot.tp_base = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_rot) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_rot.tp_dict, __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_rot) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimBaseSpriteAttr_rot", (PyObject *)&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_rot) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_rot = &__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_rot;
  __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_scale = &__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_scale;
  __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_scale.__pyx_base = *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  *(void(**)())&__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_scale.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7sprites_25_AnimBaseSpriteAttr_scale_g;
  __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_scale.tp_base = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_scale) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_scale.tp_dict, __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_scale) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimBaseSpriteAttr_scale", (PyObject *)&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_scale) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_scale = &__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_scale;
  __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_red = &__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_red;
  __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_red.__pyx_base = *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  *(void(**)())&__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_red.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7sprites_23_AnimBaseSpriteAttr_red_g;
  __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_red.tp_base = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_red) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_red.tp_dict, __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_red) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimBaseSpriteAttr_red", (PyObject *)&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_red) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_red = &__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_red;
  __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_green = &__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_green;
  __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_green.__pyx_base = *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  *(void(**)())&__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_green.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7sprites_25_AnimBaseSpriteAttr_green_g;
  __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_green.tp_base = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_green) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_green.tp_dict, __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_green) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimBaseSpriteAttr_green", (PyObject *)&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_green) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_green = &__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_green;
  __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_blue = &__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_blue;
  __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_blue.__pyx_base = *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  *(void(**)())&__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_blue.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7sprites_24_AnimBaseSpriteAttr_blue_g;
  __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_blue.tp_base = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_blue) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_blue.tp_dict, __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_blue) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimBaseSpriteAttr_blue", (PyObject *)&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_blue) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_blue = &__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_blue;
  __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha = &__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha;
  __pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha.__pyx_base = *__pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  *(void(**)())&__pyx_vtable_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7sprites_25_AnimBaseSpriteAttr_alpha_g;
  __pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha.tp_base = __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha.tp_dict, __pyx_vtabptr_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimBaseSpriteAttr_alpha", (PyObject *)&__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha = &__pyx_type_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha;
  __pyx_vtabptr_6rabbyt_7sprites_Sprite = &__pyx_vtable_6rabbyt_7sprites_Sprite;
  __pyx_vtable_6rabbyt_7sprites_Sprite.__pyx_base = *__pyx_vtabptr_6rabbyt_7sprites_BaseSprite;
  *(void(**)())&__pyx_vtable_6rabbyt_7sprites_Sprite._bounds_x = (void(*)())__pyx_f_6rabbyt_7sprites_6Sprite__bounds_x;
  *(void(**)())&__pyx_vtable_6rabbyt_7sprites_Sprite._bounds_y = (void(*)())__pyx_f_6rabbyt_7sprites_6Sprite__bounds_y;
  __pyx_type_6rabbyt_7sprites_Sprite.tp_base = __pyx_ptype_6rabbyt_7sprites_BaseSprite;
  __pyx_type_6rabbyt_7sprites_Sprite.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites_Sprite) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites_Sprite.tp_dict, __pyx_vtabptr_6rabbyt_7sprites_Sprite) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "Sprite", (PyObject *)&__pyx_type_6rabbyt_7sprites_Sprite) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; goto __pyx_L1;}
  if (__pyx_type_6rabbyt_7sprites_Sprite.tp_weaklistoffset == 0) __pyx_type_6rabbyt_7sprites_Sprite.tp_weaklistoffset = offsetof(struct __pyx_obj_6rabbyt_7sprites_Sprite, __pyx_base.__weakref__);
  __pyx_ptype_6rabbyt_7sprites_Sprite = &__pyx_type_6rabbyt_7sprites_Sprite;
  __pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_ = &__pyx_vtable_6rabbyt_7sprites__AnimSpriteAttr_;
  __pyx_vtable_6rabbyt_7sprites__AnimSpriteAttr_.__pyx_base = *__pyx_vtabptr_5anims_Anim;
  __pyx_type_6rabbyt_7sprites__AnimSpriteAttr_.tp_base = __pyx_ptype_5anims_Anim;
  __pyx_type_6rabbyt_7sprites__AnimSpriteAttr_.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites__AnimSpriteAttr_) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites__AnimSpriteAttr_.tp_dict, __pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimSpriteAttr_", (PyObject *)&__pyx_type_6rabbyt_7sprites__AnimSpriteAttr_) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_ = &__pyx_type_6rabbyt_7sprites__AnimSpriteAttr_;
  __pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_u = &__pyx_vtable_6rabbyt_7sprites__AnimSpriteAttr_u;
  __pyx_vtable_6rabbyt_7sprites__AnimSpriteAttr_u.__pyx_base = *__pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_;
  *(void(**)())&__pyx_vtable_6rabbyt_7sprites__AnimSpriteAttr_u.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7sprites_17_AnimSpriteAttr_u_g;
  __pyx_type_6rabbyt_7sprites__AnimSpriteAttr_u.tp_base = __pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites__AnimSpriteAttr_u) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites__AnimSpriteAttr_u.tp_dict, __pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_u) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimSpriteAttr_u", (PyObject *)&__pyx_type_6rabbyt_7sprites__AnimSpriteAttr_u) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_u = &__pyx_type_6rabbyt_7sprites__AnimSpriteAttr_u;
  __pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_v = &__pyx_vtable_6rabbyt_7sprites__AnimSpriteAttr_v;
  __pyx_vtable_6rabbyt_7sprites__AnimSpriteAttr_v.__pyx_base = *__pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_;
  *(void(**)())&__pyx_vtable_6rabbyt_7sprites__AnimSpriteAttr_v.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7sprites_17_AnimSpriteAttr_v_g;
  __pyx_type_6rabbyt_7sprites__AnimSpriteAttr_v.tp_base = __pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_;
  if (PyType_Ready(&__pyx_type_6rabbyt_7sprites__AnimSpriteAttr_v) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7sprites__AnimSpriteAttr_v.tp_dict, __pyx_vtabptr_6rabbyt_7sprites__AnimSpriteAttr_v) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimSpriteAttr_v", (PyObject *)&__pyx_type_6rabbyt_7sprites__AnimSpriteAttr_v) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7sprites__AnimSpriteAttr_v = &__pyx_type_6rabbyt_7sprites__AnimSpriteAttr_v;
  __pyx_ptype_5anims_AnimConst = __Pyx_ImportType("anims", "AnimConst", sizeof(struct __pyx_obj_5anims_AnimConst)); if (!__pyx_ptype_5anims_AnimConst) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; goto __pyx_L1;}
  if (__Pyx_GetVtable(__pyx_ptype_5anims_AnimConst->tp_dict, &__pyx_vtabptr_5anims_AnimConst) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":8 */
  if (PyObject_SetAttr(__pyx_m, __pyx_n___credits__, __pyx_k24p) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":26 */
  if (PyObject_SetAttr(__pyx_m, __pyx_n___author__, __pyx_k25p) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":100 */
  __pyx_1 = PyList_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; goto __pyx_L1;}
  Py_INCREF(__pyx_n_to_Anim);
  PyList_SET_ITEM(__pyx_1, 0, __pyx_n_to_Anim);
  __pyx_2 = __Pyx_Import(__pyx_k26p, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_m, __pyx_n_to_Anim, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":103 */
  __pyx_v_6rabbyt_7sprites_pi = 3.1415926535897931;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":104 */
  __pyx_v_6rabbyt_7sprites_pi_over_180 = (__pyx_v_6rabbyt_7sprites_pi / 180.0);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":425 */
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_dict); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; goto __pyx_L1;}
  __pyx_3 = PyDict_New(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_x, ((PyObject*)__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_x)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_y, ((PyObject*)__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_y)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_rot, ((PyObject*)__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_rot)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_scale, ((PyObject*)__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_scale)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_red, ((PyObject*)__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_red)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_green, ((PyObject*)__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_green)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_blue, ((PyObject*)__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_blue)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_alpha, ((PyObject*)__pyx_ptype_6rabbyt_7sprites__AnimBaseSpriteAttr_alpha)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; goto __pyx_L1;}
  __pyx_4 = PyEval_CallObjectWithKeywords(__pyx_2, __pyx_1, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  if (PyObject_SetAttr(__pyx_m, __pyx_n__base_sprite_attr_getters, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; goto __pyx_L1;}
  Py_DECREF(__pyx_4); __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":465 */
  Py_INCREF(Py_None);
  __pyx_k36 = Py_None;
  Py_INCREF(Py_None);
  __pyx_k37 = Py_None;
  __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; goto __pyx_L1;}
  __pyx_1 = PyInt_FromLong(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; goto __pyx_L1;}
  __pyx_3 = PyInt_FromLong(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; goto __pyx_L1;}
  __pyx_4 = PyInt_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; goto __pyx_L1;}
  __pyx_5 = PyTuple_New(4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_2);
  PyTuple_SET_ITEM(__pyx_5, 1, __pyx_1);
  PyTuple_SET_ITEM(__pyx_5, 2, __pyx_3);
  PyTuple_SET_ITEM(__pyx_5, 3, __pyx_4);
  __pyx_2 = 0;
  __pyx_1 = 0;
  __pyx_3 = 0;
  __pyx_4 = 0;
  __pyx_k38 = __pyx_5;
  __pyx_5 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.sprites.pyx":752 */
  __pyx_2 = PyObject_GetAttr(__pyx_k39p, __pyx_n_split); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; goto __pyx_L1;}
  __pyx_1 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (PyObject_SetAttr(__pyx_m, __pyx_n___docs_all__, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  return;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_5);
  __Pyx_AddTraceback("rabbyt.sprites");
}

static char *__pyx_filenames[] = {
  "rabbyt.sprites.pyx",
  "anims.pxd",
};

/* Runtime support code */

static void __pyx_init_filenames(void) {
  __pyx_f = __pyx_filenames;
}

static int __Pyx_GetStarArgs(
    PyObject **args, 
    PyObject **kwds,
    char *kwd_list[], 
    int nargs,
    PyObject **args2, 
    PyObject **kwds2)
{
    PyObject *x = 0, *args1 = 0, *kwds1 = 0;
    
    if (args2)
        *args2 = 0;
    if (kwds2)
        *kwds2 = 0;
    
    if (args2) {
        args1 = PyTuple_GetSlice(*args, 0, nargs);
        if (!args1)
            goto bad;
        *args2 = PyTuple_GetSlice(*args, nargs, PyTuple_Size(*args));
        if (!*args2)
            goto bad;
    }
    else {
        args1 = *args;
        Py_INCREF(args1);
    }
    
    if (kwds2) {
        if (*kwds) {
            char **p;
            kwds1 = PyDict_New();
            if (!kwds)
                goto bad;
            *kwds2 = PyDict_Copy(*kwds);
            if (!*kwds2)
                goto bad;
            for (p = kwd_list; *p; p++) {
                x = PyDict_GetItemString(*kwds, *p);
                if (x) {
                    if (PyDict_SetItemString(kwds1, *p, x) < 0)
                        goto bad;
                    if (PyDict_DelItemString(*kwds2, *p) < 0)
                        goto bad;
                }
            }
        }
        else {
            *kwds2 = PyDict_New();
            if (!*kwds2)
                goto bad;
        }
    }
    else {
        kwds1 = *kwds;
        Py_XINCREF(kwds1);
    }
    
    *args = args1;
    *kwds = kwds1;
    return 0;
bad:
    Py_XDECREF(args1);
    Py_XDECREF(kwds1);
    if (*args2) {
        Py_XDECREF(*args2);
    }
    if (*kwds2) {
        Py_XDECREF(*kwds2);
    }
    return -1;
}

static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name) {
    if (!type) {
        PyErr_Format(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if ((none_allowed && obj == Py_None) || PyObject_TypeCheck(obj, type))
        return 1;
    PyErr_Format(PyExc_TypeError,
        "Argument '%s' has incorrect type (expected %s, got %s)",
        name, type->tp_name, obj->ob_type->tp_name);
    return 0;
}

static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) {
    PyObject *__import__ = 0;
    PyObject *empty_list = 0;
    PyObject *module = 0;
    PyObject *global_dict = 0;
    PyObject *empty_dict = 0;
    PyObject *list;
    __import__ = PyObject_GetAttrString(__pyx_b, "__import__");
    if (!__import__)
        goto bad;
    if (from_list)
        list = from_list;
    else {
        empty_list = PyList_New(0);
        if (!empty_list)
            goto bad;
        list = empty_list;
    }
    global_dict = PyModule_GetDict(__pyx_m);
    if (!global_dict)
        goto bad;
    empty_dict = PyDict_New();
    if (!empty_dict)
        goto bad;
    module = PyObject_CallFunction(__import__, "OOOO",
        name, global_dict, empty_dict, list);
bad:
    Py_XDECREF(empty_list);
    Py_XDECREF(__import__);
    Py_XDECREF(empty_dict);
    return module;
}

static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
    PyObject *result;
    result = PyObject_GetAttr(dict, name);
    if (!result)
        PyErr_SetObject(PyExc_NameError, name);
    return result;
}

static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
    if (!type) {
        PyErr_Format(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (obj == Py_None || PyObject_TypeCheck(obj, type))
        return 1;
    PyErr_Format(PyExc_TypeError, "Cannot convert %s to %s",
        obj->ob_type->tp_name, type->tp_name);
    return 0;
}

static void __Pyx_UnpackError(void) {
    PyErr_SetString(PyExc_ValueError, "unpack sequence of wrong size");
}

static PyObject *__Pyx_UnpackItem(PyObject *iter) {
    PyObject *item;
    if (!(item = PyIter_Next(iter))) {
        if (!PyErr_Occurred())
            __Pyx_UnpackError();
    }
    return item;
}

static int __Pyx_EndUnpack(PyObject *iter) {
    PyObject *item;
    if ((item = PyIter_Next(iter))) {
        Py_DECREF(item);
        __Pyx_UnpackError();
        return -1;
    }
    else if (!PyErr_Occurred())
        return 0;
    else
        return -1;
}

static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
    Py_XINCREF(type);
    Py_XINCREF(value);
    Py_XINCREF(tb);
    /* First, check the traceback argument, replacing None with NULL. */
    if (tb == Py_None) {
        Py_DECREF(tb);
        tb = 0;
    }
    else if (tb != NULL && !PyTraceBack_Check(tb)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: arg 3 must be a traceback or None");
        goto raise_error;
    }
    /* Next, replace a missing value with None */
    if (value == NULL) {
        value = Py_None;
        Py_INCREF(value);
    }
    /* Next, repeatedly, replace a tuple exception with its first item */
    while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
        PyObject *tmp = type;
        type = PyTuple_GET_ITEM(type, 0);
        Py_INCREF(type);
        Py_DECREF(tmp);
    }
    if (PyString_Check(type)) {
        if (PyErr_Warn(PyExc_DeprecationWarning,
                "raising a string exception is deprecated"))
            goto raise_error;
    }
    else if (PyType_Check(type) || PyClass_Check(type))
        ; /*PyErr_NormalizeException(&type, &value, &tb);*/
    else {
        /* Raising an instance.  The value should be a dummy. */
        if (value != Py_None) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto raise_error;
        }
        /* Normalize to raise <class>, <instance> */
        Py_DECREF(value);
        value = type;
        if (PyInstance_Check(type))
            type = (PyObject*) ((PyInstanceObject*)type)->in_class;
        else
            type = (PyObject*) type->ob_type;
        Py_INCREF(type);
    }
    PyErr_Restore(type, value, tb);
    return;
raise_error:
    Py_XDECREF(value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
    return;
}

static PyObject *__Pyx_GetExcValue(void) {
    PyObject *type = 0, *value = 0, *tb = 0;
    PyObject *result = 0;
    PyThreadState *tstate = PyThreadState_Get();
    PyErr_Fetch(&type, &value, &tb);
    PyErr_NormalizeException(&type, &value, &tb);
    if (PyErr_Occurred())
        goto bad;
    if (!value) {
        value = Py_None;
        Py_INCREF(value);
    }
    Py_XDECREF(tstate->exc_type);
    Py_XDECREF(tstate->exc_value);
    Py_XDECREF(tstate->exc_traceback);
    tstate->exc_type = type;
    tstate->exc_value = value;
    tstate->exc_traceback = tb;
    result = value;
    Py_XINCREF(result);
    type = 0;
    value = 0;
    tb = 0;
bad:
    Py_XDECREF(type);
    Py_XDECREF(value);
    Py_XDECREF(tb);
    return result;
}

static void __Pyx_WriteUnraisable(char *name) {
    PyObject *old_exc, *old_val, *old_tb;
    PyObject *ctx;
    PyErr_Fetch(&old_exc, &old_val, &old_tb);
    ctx = PyString_FromString(name);
    PyErr_Restore(old_exc, old_val, old_tb);
    if (!ctx)
        ctx = Py_None;
    PyErr_WriteUnraisable(ctx);
}

static int __Pyx_InternStrings(__Pyx_InternTabEntry *t) {
    while (t->p) {
        *t->p = PyString_InternFromString(t->s);
        if (!*t->p)
            return -1;
        ++t;
    }
    return 0;
}

static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
    while (t->p) {
        *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
        if (!*t->p)
            return -1;
        ++t;
    }
    return 0;
}

static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
    PyObject *pycobj = 0;
    int result;
    
    pycobj = PyCObject_FromVoidPtr(vtable, 0);
    if (!pycobj)
        goto bad;
    if (PyDict_SetItemString(dict, "__pyx_vtable__", pycobj) < 0)
        goto bad;
    result = 0;
    goto done;

bad:
    result = -1;
done:
    Py_XDECREF(pycobj);
    return result;
}

static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, 
    long size) 
{
    PyObject *py_module_name = 0;
    PyObject *py_class_name = 0;
    PyObject *py_name_list = 0;
    PyObject *py_module = 0;
    PyObject *result = 0;
    
    py_module_name = PyString_FromString(module_name);
    if (!py_module_name)
        goto bad;
    py_class_name = PyString_FromString(class_name);
    if (!py_class_name)
        goto bad;
    py_name_list = PyList_New(1);
    if (!py_name_list)
        goto bad;
    Py_INCREF(py_class_name);
    if (PyList_SetItem(py_name_list, 0, py_class_name) < 0)
        goto bad;
    py_module = __Pyx_Import(py_module_name, py_name_list);
    if (!py_module)
        goto bad;
    result = PyObject_GetAttr(py_module, py_class_name);
    if (!result)
        goto bad;
    if (!PyType_Check(result)) {
        PyErr_Format(PyExc_TypeError, 
            "%s.%s is not a type object",
            module_name, class_name);
        goto bad;
    }
    if (((PyTypeObject *)result)->tp_basicsize != size) {
        PyErr_Format(PyExc_ValueError, 
            "%s.%s does not appear to be the correct type object",
            module_name, class_name);
        goto bad;
    }
    goto done;
bad:
    Py_XDECREF(result);
    result = 0;
done:
    Py_XDECREF(py_module_name);
    Py_XDECREF(py_class_name);
    Py_XDECREF(py_name_list);
    return (PyTypeObject *)result;
}

static int __Pyx_GetVtable(PyObject *dict, void *vtabptr) {
    int result;
    PyObject *pycobj;
    
    pycobj = PyMapping_GetItemString(dict, "__pyx_vtable__");
    if (!pycobj)
        goto bad;
    *(void **)vtabptr = PyCObject_AsVoidPtr(pycobj);
    if (!*(void **)vtabptr)
        goto bad;
    result = 0;
    goto done;

bad:
    result = -1;
done:
    Py_XDECREF(pycobj);
    return result;
}

#include "compile.h"
#include "frameobject.h"
#include "traceback.h"

static void __Pyx_AddTraceback(char *funcname) {
    PyObject *py_srcfile = 0;
    PyObject *py_funcname = 0;
    PyObject *py_globals = 0;
    PyObject *empty_tuple = 0;
    PyObject *empty_string = 0;
    PyCodeObject *py_code = 0;
    PyFrameObject *py_frame = 0;
    
    py_srcfile = PyString_FromString(__pyx_filename);
    if (!py_srcfile) goto bad;
    py_funcname = PyString_FromString(funcname);
    if (!py_funcname) goto bad;
    py_globals = PyModule_GetDict(__pyx_m);
    if (!py_globals) goto bad;
    empty_tuple = PyTuple_New(0);
    if (!empty_tuple) goto bad;
    empty_string = PyString_FromString("");
    if (!empty_string) goto bad;
    py_code = PyCode_New(
        0,            /*int argcount,*/
        0,            /*int nlocals,*/
        0,            /*int stacksize,*/
        0,            /*int flags,*/
        empty_string, /*PyObject *code,*/
        empty_tuple,  /*PyObject *consts,*/
        empty_tuple,  /*PyObject *names,*/
        empty_tuple,  /*PyObject *varnames,*/
        empty_tuple,  /*PyObject *freevars,*/
        empty_tuple,  /*PyObject *cellvars,*/
        py_srcfile,   /*PyObject *filename,*/
        py_funcname,  /*PyObject *name,*/
        __pyx_lineno,   /*int firstlineno,*/
        empty_string  /*PyObject *lnotab*/
    );
    if (!py_code) goto bad;
    py_frame = PyFrame_New(
        PyThreadState_Get(), /*PyThreadState *tstate,*/
        py_code,             /*PyCodeObject *code,*/
        py_globals,          /*PyObject *globals,*/
        0                    /*PyObject *locals*/
    );
    if (!py_frame) goto bad;
    py_frame->f_lineno = __pyx_lineno;
    PyTraceBack_Here(py_frame);
bad:
    Py_XDECREF(py_srcfile);
    Py_XDECREF(py_funcname);
    Py_XDECREF(empty_tuple);
    Py_XDECREF(empty_string);
    Py_XDECREF(py_code);
    Py_XDECREF(py_frame);
}
