void init(){ // Set display options. REG_DISPCNT = DCNT_MODE0 | DCNT_OBJ | DCNT_BG0 | DCNT_BG1 | DCNT_BG2 | DCNT_BG3; // Set background 0 options. REG_BG0CNT = BG_CBB(0) | BG_SBB(30) | BG_8BPP | BG_REG_32x32; REG_BG0HOFS = 0; REG_BG0VOFS = 0; // Set background 1 options. REG_BG1CNT = BG_CBB(0) | BG_SBB(29) | BG_8BPP | BG_REG_32x32; REG_BG1HOFS = 0; REG_BG1VOFS = 0; // Set background 2 options. REG_BG2CNT = BG_CBB(0) | BG_SBB(28) | BG_8BPP | BG_REG_32x32; REG_BG2HOFS = 0; REG_BG2VOFS = 0; // Set background 3 options. REG_BG3CNT = BG_CBB(0) | BG_SBB(27) | BG_8BPP | BG_REG_32x32; REG_BG3HOFS = 0; REG_BG3VOFS = 0; LoadTileData(0, 0, backgroundTiles, backgroundTilesLen); LoadPaletteBGData(0, menuBGPal, menuBGPalLen); LoadTileData(4, 0, spritesTiles, spritesTilesLen); LoadTileData(4, 64, font_bold, 8192); LoadPaletteObjData(0, spritesPal, spritesPalLen); //Clear backgrounds for (int y = 0; y < 32; ++y){ for (int x = 0; x < 32; ++x){ SetTile(30, x, y, 0); SetTile(29, x, y, 0); SetTile(28, x, y, 0); SetTile(27, x, y, 0); } } //Set-up backgrounds from maps for(int i = 0; i < cloudBGMapLen; i++){ SetTile(27, i%32, i/32, cloudBGMap[i]); }; for(int i = 0; i < buildingBGMapLen; i++){ SetTile(28, i%32, i/32, buildingBGMap[i]); }; for(int i = 0; i < fenceBGMapLen; i++){ SetTile(29, i%32, i/32, fenceBGMap[i]); }; for(int i = 0; i < girderMapLen; i++){ SetTile(30, i%32, i/32, girderMap[i]); }; }
int main() { // Set display options. // DCNT_MODE0 sets mode 0, which provides four tiled backgrounds. // DCNT_OBJ enables objects. // DCNT_OBJ_1D make object tiles mapped in 1D (which makes life easier). REG_DISPCNT = DCNT_MODE0 | DCNT_BG0 | DCNT_BG1 | DCNT_BG2 | DCNT_OBJ; REG_BG0CNT = BG_CBB(0) | BG_SBB(30) | BG_8BPP | BG_REG_32x32 | BG_PRIO(0); REG_BG1CNT = BG_CBB(0) | BG_SBB(29) | BG_8BPP | BG_REG_32x32 | BG_PRIO(1); REG_BG2CNT = BG_CBB(0) | BG_SBB(25) | BG_8BPP | BG_REG_64x64 | BG_PRIO(2); REG_BG2HOFS = 0; REG_BG2VOFS = 0; ClearObjects(); SetPaletteBG(1, RGB(31, 31, 31)); // white //Load each tile in font_bold into it's corresponding position in charblock 0 for (int i = 0; i < 128; i++) { LoadTile8(0, i, font_bold[i]); } DrawText(5, (SCREEN_HEIGHT / 16) - 2, "DECEPTIVE DIMENSIONS"); DrawText(5, (SCREEN_HEIGHT / 16), "Press start to begin"); Buttons buttons; int framecounter = 0; //Title screen (under construction) while (true) { buttons.Update(); if (buttons.StartJustPressed()) { break; } WaitVSync(); } while (true) { //Load Custom spritesheet LoadPaletteObjData(0, spritesheet4Pal, sizeof spritesheet4Pal); LoadPaletteBGData(0, backgroundnewnewPal, sizeof backgroundnewnewPal); LoadTileData(4, 0, spritesheet4Tiles, sizeof spritesheet4Tiles); LoadTileData(0, 0, backgroundnewnewTiles, sizeof backgroundnewnewTiles); int levelnumber = 1; Level level(levelnumber); for (int screenblock = 21; screenblock < 31; screenblock++) { level.FillScreenblock(screenblock, 0); } level.DrawBackground(level.curdimension); bool gamerunning = true; //Main game loop while (gamerunning) { buttons.Update(); gamerunning = level.CheckIfLevelComplete(); level.TakeInput(buttons); level.MoveObjects(); level.Draw(); level.UpdateLevelObjects(framecounter); framecounter++; WaitVSync(); FlipBuffers(); } //Reload each tile in font_bold into it's corresponding position in charblock 0 for (int i = 0; i < 128; i++) { LoadTile8(0, i, font_bold[i]); } SetPaletteBG(0, RGB(0, 0, 0)); // black SetPaletteBG(1, RGB(31, 31, 31)); // white for (int screenblock = 25; screenblock < 31; screenblock++) { for (int y = 0; y < 32; y++) { for (int x = 0; x < 32; x++) { SetTile(screenblock, x, y, 0); } } } level.player.drawx = SCREEN_WIDTH; SetObject(level.player.GetObjNum(), ATTR0_SHAPE(2) | ATTR0_8BPP | ATTR0_HIDE, ATTR1_SIZE(2) | ATTR1_X(level.player.drawx), ATTR2_ID8(0) | ATTR2_PRIO(2)); UpdateObjects(); DrawText(6, (SCREEN_HEIGHT / 16) - 2, "That's all folks!!"); DrawText(3, (SCREEN_HEIGHT / 16), "Press start to try again"); while (true) { buttons.Update(); if (buttons.StartJustPressed()) { break; } WaitVSync(); } } }
void enterMenu(int menu){ LoadPaletteBGData(0, menuBGPal, menuBGPalLen); bool active = true; int option = 0; int keyPressCoolDown = 30; if(menu == 0)ClearObjects(); //MENU LOOP while(active){ keyPressCoolDown--; if(keyPressCoolDown <= 0)keyPressCoolDown = 0; clearText(); switch(menu){ case 0://Main menu if((REG_KEYINPUT & KEY_UP) == 0){ option = 0; } if((REG_KEYINPUT & KEY_DOWN) == 0){ option = 1; } if((REG_KEYINPUT & KEY_A) == 0 && keyPressCoolDown == 0){ if(option == 0){ active = false; gameInit(); }else{ menu = 1; keyPressCoolDown = 30; } } drawText(60,20,"Super Crate Box"); drawText(105,65,"PLAY"); drawText(93,90,"CREDITS"); if(option == 0)drawText(90, 65, "> <"); if(option == 1)drawText(78, 90, "> <"); break; case 1://Credits if((REG_KEYINPUT & KEY_A) == 0 && keyPressCoolDown == 0){ menu = 0; keyPressCoolDown = 30; } if((REG_KEYINPUT & KEY_B) == 0 && keyPressCoolDown == 0){ menu = 0; keyPressCoolDown = 30; } drawText(30, 20, "GBA - Super Crate Box"); drawText(30,60, "Created by Peter Black"); drawText(70,80, "for CGA 2014"); drawText(8, 135, "Assets & Gameplay C Vlambeer"); break; case 2://Game Over if((REG_KEYINPUT & KEY_A) == 0 && keyPressCoolDown == 0){ active = false; gameInit(); } if((REG_KEYINPUT & KEY_B) == 0 && keyPressCoolDown == 0){ menu = 0; ClearObjects(); keyPressCoolDown = 30; } drawText(82,60,"GAME OVER"); drawText(85,80,"Score:"); drawText(133,80,toString(score)); drawText(77, 125,"A = Retry"); drawText(65, 135,"B = Main Menu"); break; } WaitVSync(); UpdateObjects(); } LoadPaletteBGData(0, backgroundPal, backgroundPalLen); }