if(monster.anim_frame >= FRAMES_PER_ANIMATION) monster.anim_frame = 0;Citationif(monster.anim_frame >= FRAMES_PER_ANIMATION) monster.anim_frame = 0;why
Citation>=, i think it must be
Citation>, because you need to do 0,1,2,3 and the constant variable is 3 too ... :-\
char sprTiles[9]={0,4,8, 12,64,68, 72,76,128};
#include <snes.h>
extern char gfxpsrite, gfxpsrite_end;
extern char palsprite;
#define FRAMES_PER_ANIMATION 3 // 3 sprites per direction
//---------------------------------------------------------------------
// The Monster sprite
//---------------------------------------------------------------------
typedef struct
{
	short x, y;
	int gfx_frame;
	int state;
	int anim_frame;
	int flipx;
} Monster;
//---------------------------------------------------------------------
// The state of the sprite (which way it is walking)
//---------------------------------------------------------------------
enum SpriteState {W_DOWN = 0, W_UP = 1, W_RIGHT = 2,  W_LEFT = 2};
//---------------------------------------------------------------------
// Screen dimentions
//---------------------------------------------------------------------
enum {SCREEN_TOP = 0, SCREEN_BOTTOM = 224, SCREEN_LEFT = 0, SCREEN_RIGHT = 256};
char sprTiles[9]={0,4,8, 12,64,68, 72,76,128};
//---------------------------------------------------------------------------------
int main(void) {
	unsigned short pad0,i;
	Monster monster = {100,100};
	
    // Initialize SNES 
	consoleInit();
	
	// Init Sprites gfx and palette with default size of 16x16
	oamInitGfxSet(&gfxpsrite, (&gfxpsrite_end-&gfxpsrite), &palsprite, 0, 0x4000, OBJ_SIZE32);
	// Define sprites parameters
	oamSet(0,  monster.x, monster.y, 0, 0, 0, 0, 0); 
	oamSetEx(0, OBJ_SMALL, OBJ_SHOW);
	
	// Now Put in 16 color mode and disable all backgrounds
	setMode(BG_MODE1,0); bgSetDisable(0); bgSetDisable(1); bgSetDisable(2);
	
	// Wait VBL 'and update sprites too ;-) )
	WaitForVBlank();
		
	// Wait for nothing :P
	while(1) {
		// Refresh pad values
		scanPads();
		
		// Get current #0 pad
		pad0 = padsCurrent(0);
		
		if (pad0) {
			// Update sprite with current pad
			if(pad0 & KEY_UP) {
				if(monster.y >= SCREEN_TOP) monster.y--;
				monster.state = W_UP;
				monster.flipx = 0;
			}
			if(pad0 & KEY_LEFT) {
				if(monster.x >= SCREEN_LEFT) monster.x--;
				monster.state = W_LEFT;
				monster.flipx = 1;
			}
			if(pad0 & KEY_RIGHT) {
				if(monster.x <= SCREEN_RIGHT) monster.x++;
				monster.state = W_LEFT;
				monster.flipx = 0;
			}
			if(pad0 & KEY_DOWN) {
				if(monster.y <= SCREEN_BOTTOM) monster.y++;
				monster.state = W_DOWN;
				monster.flipx = 0;
			}
			monster.anim_frame++;
			if(monster.anim_frame >= FRAMES_PER_ANIMATION) monster.anim_frame = 0;
		}
		
		// Now, get current sprite in current animation
		monster.gfx_frame = sprTiles[monster.anim_frame + monster.state*FRAMES_PER_ANIMATION ];
		
		oamSet(0,  monster.x, monster.y, 3, monster.flipx, 0, monster.gfx_frame, 0);
		
		// Wait VBL 'and update sprites too ;-) )
		WaitForVBlank();
	}
	return 0;
}
sprites.pic: sprites.bmp
	@echo convert bitmap ... $(notdir $@)
	$(GFXCONV) -gs16 -pc256 -po256 -n $<
/*---------------------------------------------------------------------------------
	Animated Sprite demo
	-- alekmaul
 Sprite from Stephen "Redshrike" Challener), http://opengameart.org
---------------------------------------------------------------------------------*/
#include <snes.h>
extern char gfxpsrite, gfxpsrite_end;
extern char palsprite;
#define FRAMES_PER_ANIMATION 3 // 3 sprites per direction
//---------------------------------------------------------------------
// The Monster sprite
//---------------------------------------------------------------------
typedef struct
{
	short x, y;
	int gfx_frame;
	int state;
	int anim_frame;
	int flipx;
} Monster;
//---------------------------------------------------------------------
// The state of the sprite (which way it is walking)
//---------------------------------------------------------------------
enum SpriteState {W_DOWN = 0, W_UP = 1, W_RIGHT = 2,  W_LEFT = 2};
//---------------------------------------------------------------------
// Screen dimentions
//---------------------------------------------------------------------
enum {SCREEN_TOP = 0, SCREEN_BOTTOM = 224, SCREEN_LEFT = 0, SCREEN_RIGHT = 256};
char sprTiles[9]={0,2,4, 6,8,10, 12,14,32};  // Remeber that sprites are interleave with 128 pix width,
//---------------------------------------------------------------------------------
int main(void) {
	unsigned short pad0,i;
	Monster monster = {100,100};
	Monster monster2 = {150,150}; // NEW LINE
	
    // Initialize SNES 
	consoleInit();
	
	// Init Sprites gfx and palette with default size of 16x16
	oamInitGfxSet(&gfxpsrite, (&gfxpsrite_end-&gfxpsrite), &palsprite, 0, 0x4000, OBJ_SIZE16);
	// Define sprites parameters
	oamSet(0,  monster.x, monster.y, 0, 0, 0, 0, 0); 
	oamSetEx(0, OBJ_SMALL, OBJ_SHOW);
	
	oamSet(16,  monster2.x, monster2.y, 0, 0, 0, 0, 16);  // NEW LINE
	oamSetEx(16, OBJ_SMALL, OBJ_SHOW);  // NEW LINE
	
	// Now Put in 16 color mode and disable all backgrounds
	setMode(BG_MODE1,0); bgSetDisable(0); bgSetDisable(1); bgSetDisable(2);
	
	// Wait VBL 'and update sprites too ;-) )
	WaitForVBlank();
		
	// Wait for nothing :P
	while(1) {
		// Refresh pad values
		scanPads();
		
		// Get current #0 pad
		pad0 = padsCurrent(0);
		
		if (pad0) {
			// Update sprite with current pad
			if(pad0 & KEY_UP) {
				if(monster.y >= SCREEN_TOP) monster.y--;
				monster.state = W_UP;
				monster.flipx = 0;
				if(monster2.y >= SCREEN_TOP) monster2.y--;  // NEW LINE
				monster2.state = W_UP;  // NEW LINE
				monster2.flipx = 0;  // NEW LINE
			}
			if(pad0 & KEY_LEFT) {
				if(monster.x >= SCREEN_LEFT) monster.x--;
				monster.state = W_LEFT;
				monster.flipx = 1;
				if(monster2.x >= SCREEN_LEFT) monster2.x--;  // NEW LINE
				monster2.state = W_LEFT;  // NEW LINE
				monster2.flipx = 1;  // NEW LINE
			}
			if(pad0 & KEY_RIGHT) {
				if(monster.x <= SCREEN_RIGHT) monster.x++;
				monster.state = W_LEFT;
				monster.flipx = 0;
				if(monster2.x <= SCREEN_RIGHT) monster2.x++;  // NEW LINE
				monster2.state = W_LEFT;  // NEW LINE
				monster2.flipx = 0;  // NEW LINE
			}
			if(pad0 & KEY_DOWN) {
				if(monster.y <= SCREEN_BOTTOM) monster.y++;
				monster.state = W_DOWN;
				monster.flipx = 0;
				if(monster2.y <= SCREEN_BOTTOM) monster2.y++;  // NEW LINE
				monster2.state = W_DOWN;  // NEW LINE
				monster2.flipx = 0;  // NEW LINE
			}
			monster.anim_frame++;
			if(monster.anim_frame >= FRAMES_PER_ANIMATION) monster.anim_frame = 0;
			monster2.anim_frame++;  // NEW LINE
			if(monster2.anim_frame >= FRAMES_PER_ANIMATION) monster2.anim_frame = 0;  // NEW LINE
		}
		
		// Now, get current sprite in current animation
		monster.gfx_frame = sprTiles[monster.anim_frame + monster.state*FRAMES_PER_ANIMATION ];
		oamSet(0,  monster.x, monster.y, 3, monster.flipx, 0, monster.gfx_frame, 0);
		
		monster2.gfx_frame = sprTiles[monster2.anim_frame + monster2.state*FRAMES_PER_ANIMATION ];  // NEW LINE
		oamSet(16,  monster2.x, monster2.y, 3, monster2.flipx, 0, monster2.gfx_frame, 16);  // NEW LINE
		
		// Wait VBL 'and update sprites too ;-) )
		WaitForVBlank();
	}
	return 0;
}