コード例 #1
0
ファイル: main.c プロジェクト: edwinchoate/off-season
int main() {

	setupInterrupts();
    setupSounds();

    playSoundA(titleSong, TITLESONGLEN, TITLESONGFREQ, 1);

	// Start game with splash screen
	splash();


	// Main Game Loop
	while (1) {

		oldButtons = buttons;
		buttons = BUTTONS;

		// Update player row and column
		player.bigRow = player.row + vOff;
		player.bigCol = player.col + hOff;


		switch(state) {

			case SPLASH:

				// Displays splash screen
				splash();

			break;

			case INSTRUCTIONS:

				instructions();

			break;

			case GAME:

				// Game Function holds all game logic
				game();

			break;

			case SEASONCHANGE:
				
				// Warp-like animation as player changes between seasons
				warpAnimation();

				// Change game to correct season, based on prevSeason and return to gameplay
				if (vBlankCount < 1) {
					seasonChange();
					state = GAME;
				}

			break;

			case PAUSE:

				pause();

			break;

			case LOSE:

				lose();

			break;

			case WINLEVEL:

				winLevel();

			break;

			case GAMEEND:

				gameEnd();

			break;

		}

		
		// Shadow OAM Handling
		// Player Sprite
		shadowOAM[0].attr0 = (ROWMASK & player.row) | ATTR0_SQUARE;
		shadowOAM[0].attr1 = (COLMASK & player.col) | ATTR1_SIZE16 | (ATTR1_HFLIP & (player.facing << 12));
		shadowOAM[0].attr2 = (SPRITEOFFSET16(season * 2, player.currentFrame * 2)) | ATTR2_PRIORITY2;	

		// Season Icon Sprite
		shadowOAM[1].attr0 = (ROWMASK & icon.row) | ATTR0_SQUARE;
		shadowOAM[1].attr1 = (COLMASK & icon.col) | ATTR1_SIZE16;
		shadowOAM[1].attr2 = (SPRITEOFFSET16(season * 2, 6)) | (1 << 10); // Priority 1

		REG_BG2HOFS = hOff;
        REG_BG2VOFS = vOff;

       	// Set BG1 offsets - used for snow and falling leaves
		REG_BG1HOFS = bg1HOff;
		REG_BG1VOFS = bg1VOff;
        
        //Copy the shadowOAM into the OAM
        DMANow(3, &shadowOAM, OAM, 512);

		waitForVblank();

	}

	return 0;
}
コード例 #2
0
ファイル: main.c プロジェクト: zeroxiii/CS1372_Assignments
int main(void)
{
	//Initializing Program variables
    int i;
	int visible = 1;
	int press = 1;
	int oldSprite = 0;
	int currentSprite = 0;
    ObjAttr shadowOAM[128];

    REG_DISPCTL = MODE0 | BG0_ENABLE | OBJ_ENABLE;

    // Load background palette
    for(i=0; i<256; i++)
    {
        PALETTE[i] = backgroundPal[i];
    }

    // Load background tile images
    for(i=0; i<backgroundTilesLen/2; i++)
    {
        CHARBLOCKBASE[0].tileimg[i] = backgroundTiles[i];
    }

	//Make Map
    for(i=0; i<1024; i++)
	{
		SCREENBLOCKBASE[28].tilemap[i] = 1;
	}

    REG_BG0CNT = SBB(28) | CBB(0) | COLOR256 | BG_SIZE0;

	//Define Sprites
    Sprite sprites[NUMSPRITES] = {{16,16,SPRITEOFFSET16(0,0),ATTR0_SQUARE,ATTR1_SIZE32,32,32,1,1},
						{0,0,SPRITEOFFSET16(0,8),ATTR0_SQUARE,ATTR1_SIZE32,32,32,1,1},
						{0,0,SPRITEOFFSET16(0,16),ATTR0_SQUARE,ATTR1_SIZE32,32,32,1,1},
						{5,100,SPRITEOFFSET16(0,24),ATTR0_SQUARE,ATTR1_SIZE32,32,32,1,1},
						{0,0,SPRITEOFFSET16(4,0),ATTR0_SQUARE,ATTR1_SIZE32,32,32,1,1},
						{0,0,SPRITEOFFSET16(4,8),ATTR0_SQUARE,ATTR1_SIZE32,32,32,1,1},
						{0,0,SPRITEOFFSET16(4,16),ATTR0_SQUARE,ATTR1_SIZE32,32,32,1,1},
						{0,0,SPRITEOFFSET16(4,16),ATTR0_SQUARE,ATTR1_SIZE32,32,32,1,1}};

    // Load sprite palette
    for(i=0; i<256; i++)
    {
        SPRITEPAL[i] = spritePalette[i];
    }

    // Load sprite images
    for(i=0; i<8192/2; i++)
    {
        CHARBLOCKBASE[4].tileimg[i] = spriteTiles[i];
    }

    
	// Set attributes for all active sprites
	for(i=0; i<NUMSPRITES; i++)
	{
		shadowOAM[i].attr0 = sprites[i].row | ATTR0_8BPP | sprites[i].shape;
		shadowOAM[i].attr1 = sprites[i].col | sprites[i].size;
		shadowOAM[i].attr2 = sprites[i].start | ATTR2_PALETTE_BANK(0);
	}

	//Hide Sprites
	for(i=0; i<128; i++)
	{
		shadowOAM[i].attr0 = ATTR0_HIDE;
	}


	waitForVblank();

	//Move Sprites to Mem
	for(i=0; i<128; i++)
	{
		SPRITEMEM[i] = shadowOAM[i];
	}

    while(FOREVER)
    {

		//Check for Movement and change direction
		if(KEY_DOWN_NOW(BUTTON_UP))
		{
			shadowOAM[currentSprite].attr0 = ATTR0_HIDE;
			sprites[currentSprite].row -= sprites[currentSprite].rdel;
			oldSprite = currentSprite;
			currentSprite = 2;
			sprites[currentSprite].col = sprites[oldSprite].col;
			sprites[currentSprite].row = sprites[oldSprite].row;
		}


		if(KEY_DOWN_NOW(BUTTON_DOWN))
		{
			shadowOAM[currentSprite].attr0 = ATTR0_HIDE;
			sprites[currentSprite].row += sprites[currentSprite].rdel;
			oldSprite = currentSprite;
			currentSprite = 0;
			sprites[currentSprite].col = sprites[oldSprite].col;
			sprites[currentSprite].row = sprites[oldSprite].row;
		}

		if(KEY_DOWN_NOW(BUTTON_LEFT))
		{
			shadowOAM[currentSprite].attr0 = ATTR0_HIDE;
			sprites[currentSprite].col -= sprites[currentSprite].cdel;
			oldSprite = currentSprite;
			currentSprite = 6;
			sprites[currentSprite].col = sprites[oldSprite].col;
			sprites[currentSprite].row = sprites[oldSprite].row;
			
		}

		if(KEY_DOWN_NOW(BUTTON_RIGHT))
		{
			shadowOAM[currentSprite].attr0 = ATTR0_HIDE;
			sprites[currentSprite].col += sprites[currentSprite].cdel;
			oldSprite = currentSprite;
			currentSprite = 5;
			sprites[currentSprite].col = sprites[oldSprite].col;
			sprites[currentSprite].row = sprites[oldSprite].row;
		}

		//Check for second sprites visibility
		if(KEY_DOWN_NOW(BUTTON_START) && press)
		{
			if(visible)
				visible = 0;
			else
				visible = 1;
			waitForVblank();
			press = 0;
		}

		if(!KEY_DOWN_NOW(BUTTON_START))
		{
			press = 1;
		}

		//Collision Detection
		if(sprites[currentSprite].row < HEIGHTMIN)
		{
		   sprites[currentSprite].row = HEIGHTMIN;
		}

		if(sprites[currentSprite].col < WIDTHMIN)
		{
		   sprites[currentSprite].col = WIDTHMIN;
		}

		if(sprites[currentSprite].row + sprites[currentSprite].height > HEIGHTMAX)
		{
		   sprites[currentSprite].row = HEIGHTMAX - sprites[currentSprite].height;
		}

		if(sprites[currentSprite].col + sprites[currentSprite].width > WIDTHMAX)
		{
		   sprites[currentSprite].col = WIDTHMAX - sprites[currentSprite].width;
		}

		//Move Sprites to Memory
		shadowOAM[currentSprite].attr0 = sprites[currentSprite].row | ATTR0_8BPP | sprites[currentSprite].shape;
		shadowOAM[currentSprite].attr1 = (MASK&sprites[currentSprite].col) | sprites[currentSprite].size;
		shadowOAM[currentSprite].attr2 = sprites[currentSprite].start | ATTR2_PALETTE_BANK(0);

		if(visible)
		{
		   shadowOAM[3].attr0 = sprites[3].row | ATTR0_8BPP | sprites[3].shape;
		   shadowOAM[3].attr1 = (MASK&sprites[3].col) | sprites[3].size;
		   shadowOAM[3].attr2 = sprites[3].start | ATTR2_PALETTE_BANK(0);
		}
		else
		{
			shadowOAM[3].attr0 = ATTR0_HIDE;
		}

		waitForVblank();

		for(i=0; i<NUMSPRITES; i++)
		{
		   SPRITEMEM[i] = shadowOAM[i];
		}
    }
    return 0;
}
コード例 #3
0
ファイル: main.c プロジェクト: weimingtom/hw7
//=====================Main
int main(void) {
    //Set Video Control
    REG_DISPCNT = BG2_ENABLE | BG1_ENABLE | BG0_ENABLE | MODE_0 | OBJ_ENABLE;
    
    //tells the Background 0 control register
    //where the screen map is, the tiles, the color, and size0=256x256
    //background 1 is the collision map
    REG_BG0CNT=  CBB(0) | SBB(8) | COLOR16 | BG_SIZE0;
    REG_BG1CNT=  CBB(2) | SBB(10) | COLOR16 | BG_SIZE2;
    REG_BG2CNT=  CBB(3) | SBB(12) | COLOR16 | BG_SIZE2;
    
    //sets the BG's vertical and horz offsets to 0
    REG_BG0HOFS=0;
    REG_BG0VOFS=20;
    REG_BG1HOFS=0;
    REG_BG1VOFS=0;
    REG_BG2HOFS=0;
    REG_BG2VOFS=0;

    int i;
    int speed=3;
    int hoff=0;
    int voff=0;
    
     //loads the picture pallet
     //This is the same for all backgrounds
     for(i=0;i<background0PalLen/2;i++)
        PALETTE_MEM[i]=background0Pal[i];
    
    //===========================================Sprites
    ObjAttr shadowOAM[128];

    //defining sprites with room for more
    Sprite spriteArray[NUMSPRITES]={
        {WALKINGROW, 16, SPRITEOFFSET16(0,0), ATTR0_TALL, ATTR1_SIZE64, 32, 64, TRUE}
        }
        
typedef struct {
    int printRow;
    int printCol;
    int arrayLocation;
    int shape;
    int size;
    int height;
    int width;
    int active;
} Sprite;

    //Loads sprite tiles
    for(i=0; i<characterSpritesTilesLen/2; i++)
        charbase[4].tileimg[i] = characterSpritesTiles[i];

    //set attributes of the sprite in the duplicate mem
    for(i=0; i<NUMSPRITES; i++)
    {
        shadowOAM[i].attr0 = spriteArray[i].row | ATTR0_4BPP | spriteArray[i].shape;
        shadowOAM[i].attr1 = spriteArray[i].col | spriteArray[i].size;
        shadowOAM[i].attr2 = spriteArray[i].start | ATTR2_PALETTE_BANK(0);
    }

    //hides all sprites except for main guy
    for(i=0; i<128; i++)
    {
        if(!spriteArray[i].active)
            shadowOAM[i].attr0 = ATTR0_HIDE;
    }

    waitForVblank();

    // Copy shadow into real
    for(i=0; i<128; i++)
    {
        SPRITEMEM[i] = shadowOAM[i];
    }
    
    while(1) {
        //LOADS BACKGROUND 0
        //loads all the tiles and collision map
        for(i=0;i<background0TilesLen/2;i++)
            charbase[3].tileimg[i]=background0Tiles[i];
        //loads the map
        for(i=0;i<background0MapLen/2;i++)
            screenbase[12].tilemap[i]=background0Map[i];

        //LOADS BACKGROUND 1
        //loads all the tiles and collision map
        for(i=0;i<background1TilesLen/2;i++)
            charbase[2].tileimg[i]=background1Tiles[i];
        //loads the map
        for(i=0;i<background1MapLen/2;i++)
            screenbase[10].tilemap[i]=background1Map[i];

        //LOADS BACKGROUND 2
        //loads all the tiles and collision map
        for(i=0;i<background2TilesLen/2;i++)
            charbase[0].tileimg[i]=background2Tiles[i];
        //loads the map
        for(i=0;i<background2MapLen/2;i++)
            screenbase[8].tilemap[i]=background2Map[i];
        
        // these keys move the background around the screen
        if(KEY_DOWN_NOW(BUTTON_RIGHT))hoff+=speed;
        if(KEY_DOWN_NOW(BUTTON_LEFT))hoff-=speed;
        if(KEY_DOWN_NOW(BUTTON_UP))voff-=speed;
        if(KEY_DOWN_NOW(BUTTON_DOWN))voff+=speed;
        
        REG_BG0HOFS=hoff;
        //REG_BG0VOFS=voff;
        REG_BG1HOFS=hoff/20;
        //REG_BG1VOFS=voff/20;
        
        waitForVBlank();
    }
 return 0;
}
コード例 #4
0
#include "textEntry.h"

//Program Variables
const u16 *spriteTiles = cursorTiles;
const u16 *spritePalette = cursorPal;
//Sprite Variables
ObjAttr shadowOAM[128];
Sprite sprites[NUMSPRITES] = {{8,0,SPRITEOFFSET16(0,0),ATTR0_SQUARE,ATTR1_SIZE8,8,8,1,8}};
int left = 1;
int right = 1;
int press = 1;
int endInput = 0;
int letterIndex = 0;
int letterColumn = 0;

//Timer Variables
int theTime = 0;
unsigned int vblankcount = 0;
unsigned int start;    // At which vlankcount was beep started
unsigned int startBG;  // At which vlankcount was background (bg) started
int play = FALSE;   // When set to TRUE tells us to start beep
int playBG = FALSE; // This tell us if the BG is supposed to be playing
int BGplaying = FALSE; // This tells us if it is playing

// Duration in vlanks...there are 59.727 vlanks per second
int duration = BEEPLENGTH*59.727/11025;
int durationBG = FLUTELEN*59.727/FLUTEFREQ-1;

//Draws Keyboard
void drawKeyboard()
{
コード例 #5
0
ファイル: main.c プロジェクト: pigs/Dog_Rescue
int main(void)
{
    while(1)
    {
		previousSpriteState = spriteState;
        pollKeys();
		enableSounds();
		setupInterrupts();


		switch(state)
		{
			case SPLASH:
			{
				REG_DISPCNTL = BG2_ENABLE | MODE3;
				fillPicture((u16 *)splashBitmap);

				if (BUTTON_PRESSED(START_BUTTON))
				{
					state = GAME;
				}
				if (BUTTON_PRESSED(SELECT_BUTTON))
				{
					state = INSTRUCTIONS;
				}
			break;
			}

			case INSTRUCTIONS:
			{
				fillPicture((u16 *)instructionsBitmap);
				if (BUTTON_PRESSED(SELECT_BUTTON))
				{
					state = SPLASH;
				}
				break;
			}
			
			case GAME:
			{

				//load tiles
				DMA_MEMORY[3].source = backgroundTiles;
				DMA_MEMORY[3].destination = &CHARBLOCK[0];
				DMA_MEMORY[3].control = 12000 | DMA_ON;

				//load map
				DMA_MEMORY[3].source = backgroundMap;
				DMA_MEMORY[3].destination = &SCREENBLOCK[27];
				DMA_MEMORY[3].control = 4096 | DMA_ON;

				//load pallette
				DMA_MEMORY[3].source = backgroundPal;
				DMA_MEMORY[3].destination = PAL_MEM;
				DMA_MEMORY[3].control = 256 | DMA_ON;


				//load the sprites into memory
				DMA_MEMORY[3].source = playerTiles;
				DMA_MEMORY[3].destination = &CHARBLOCK[4];
				DMA_MEMORY[3].control = 16384 | DMA_ON;

				DMA_MEMORY[3].source = playerPal;
				DMA_MEMORY[3].destination = SPRITE_PALETTE;
				DMA_MEMORY[3].control = 256 | DMA_ON;
			    
			    
				//Hide all sprites
				int i;
				for(i=0; i<128; i++)
				{
					OAM[i].attr0 |= ATTR0_HIDE;
				}

				//Set Mode 0 BG 0 and Enable sprites. then set up the sprites
				REG_DISPCNTL = MODE0 | BG0_ENABLE | SPRITE_ENABLE;
				REG_BG0CNT = BG_8BPP | BG_REG_64x64 | CBB(0) | SBB(27);

				REG_TM0CNT = 0;
				DMA[1].cnt = 0;

				REG_TM0D   = timerintervalA;       
				REG_TM0CNT = TIMER_ON;

				DMA[1].src = bgsound;
				DMA[1].dst = REG_FIFO_A;
				DMA[1].cnt = DMA_ON | START_ON_FIFO_EMPTY |
							 DMA_32 | DMA_REPEAT |
							 DMA_DESTINATION_FIXED;

				startA = vblankcountA;

				while(1){

					shadowOAM[0].attr0 = (playerRow & MASKROW) | ATTR0_TALL | ATTR0_REGULAR | ATTR0_8BPP;
					shadowOAM[0].attr1 = (playerCol & MASKCOL)| ATTR1_SIZE32;
					shadowOAM[0].attr2 = (SPRITEOFFSET16(0,0));

					shadowOAM[1].attr0 = badguyRow | ATTR0_TALL | ATTR0_REGULAR | ATTR0_8BPP;
					shadowOAM[1].attr1 = badguyCol | ATTR1_SIZE32;
					shadowOAM[1].attr2 = (SPRITEOFFSET16(0,8));

					pollKeys();
					bigRow = playerRow + vOff;
					bigCol = playerCol + hOff;

				switch(spriteState)
				{
					case STILL:
					{
						shadowOAM[0].attr2 = (SPRITEOFFSET16(0,0));
						break;
					}

					case MOVING:
					{
						if((walkCounter%2)==1)
							shadowOAM[0].attr2 = (SPRITEOFFSET16(0,4));
						else if((walkCounter%2==0))
						{
						shadowOAM[0].attr2 = (SPRITEOFFSET16(0,0)); 
						}
						break;
					}

				}	
				

					if(BUTTON_HELD(A_BUTTON) && BUTTON_HELD(B_BUTTON))
					{
						//load tiles
						DMA_MEMORY[3].source = cheatbackgroundTiles;
						DMA_MEMORY[3].destination = &CHARBLOCK[0];
						DMA_MEMORY[3].control = 11456 | DMA_ON;

						//load map
						DMA_MEMORY[3].source = cheatbackgroundMap;
						DMA_MEMORY[3].destination = &SCREENBLOCK[27];
						DMA_MEMORY[3].control = 4096 | DMA_ON;

						//load pallette
						DMA_MEMORY[3].source = cheatbackgroundPal;
						DMA_MEMORY[3].destination = PAL_MEM;
						DMA_MEMORY[3].control = 256 | DMA_ON;
					}
					if (BUTTON_HELD(RIGHT_BUTTON))
					{
						spriteState=MOVING;
						walkCounter++;
						if(collisionmapBitmap[((bigRow+playerHeight)*collMapSize)+(bigCol+playerCVel+playerWidth)]==WHITE)
						{
							if(playerCol<(SCREEN_WIDTH-(playerWidth+5))){
								playerCol+=playerCVel;
							}
							else if(hOff<(collMapSize-SCREEN_WIDTH))
							{
								hOff+=playerCVel;
							}
						}
					}
					if (BUTTON_HELD(LEFT_BUTTON))
					{
						spriteState=MOVING;
						walkCounter++;
						if(collisionmapBitmap[((bigRow+playerHeight)*collMapSize)+(bigCol+playerCVel)]==WHITE)
						{
							if(playerCol>(0))
							{
								playerCol-=playerCVel;
							}
							else if(hOff>(SCREEN_WIDTH-collMapSize))
							{
								hOff-=playerCVel;
							}
						}
					}
					if (BUTTON_HELD(UP_BUTTON))
					{
						spriteState=MOVING;
						walkCounter++;
						//Check collision and move
						if((collisionmapBitmap[(((bigRow-playerRVel)*collMapSize)+(bigCol+playerWidth))]==WHITE)&&
							(collisionmapBitmap[(((bigRow-playerRVel)*collMapSize)+(bigCol))]==WHITE))
						{
							if(playerRow>30)
							{
								playerRow-=playerRVel;
							}
							else if(vOff>0)
							{
								vOff-=playerRVel;
							}
						}
						
					}
					if (BUTTON_HELD(DOWN_BUTTON))
					{
						spriteState=MOVING;
						walkCounter++;
						//Check collision and move
						if((collisionmapBitmap[(((bigRow+playerHeight+playerRVel)*collMapSize)+(bigCol+playerWidth))]==WHITE)&&
							(collisionmapBitmap[(((bigRow+playerHeight+playerRVel)*collMapSize)+(bigCol))]==WHITE))
						{

							if(playerRow<(SCREEN_HEIGHT-(playerHeight)))
							{
								playerRow+=playerRVel;
							}
							else if(vOff<(collMapSize-SCREEN_HEIGHT))
							{
								vOff+=playerRVel;
							}
						if((playerRow > 440) && (playerCol > 464))
						{
							state = WIN;
						}
						}


					}
					if (BUTTON_PRESSED(START_BUTTON))
					{
							REG_TM1CNT = 0;
							DMA[2].cnt = 0;
						
							REG_TM1D   = timerintervalB;       
							REG_TM1CNT = TIMER_ON;

							DMA[2].src = bark;
							DMA[2].dst = REG_FIFO_B;
							DMA[2].cnt = DMA_ON | START_ON_FIFO_EMPTY |
										 DMA_32 | DMA_REPEAT |
										 DMA_DESTINATION_FIXED;

							startB = vblankcountB;
					}
					if (BUTTON_PRESSED(SELECT_BUTTON))
					{
						//waitForNoKey();
						state = PAUSE;
					}
					
					waitForVBlank();
					OAM[0] = shadowOAM[0];
					OAM[1] = shadowOAM[1];

					REG_BG0HOFS = hOff;
					REG_BG0VOFS = vOff;

				}

			}

				case WIN:
				{
					while(1);
				}

				case PAUSE:
				{
					if(BUTTON_PRESSED(SELECT_BUTTON))
					{
						state=GAME;
					}
				}

		}

	}

    return 0;
}