// -------------------------------------------------- void BoxViewer::drawPokemonScale(pkm_s* pkm, int16_t x, int16_t y, float scale) // -------------------------------------------------- { if (pkm->speciesID == 0) return; sf2d_texture* pkmIcons = PHBanku::texture->pkmIcons; if (pkm->isShiny) pkmIcons = PHBanku::texture->pkmShinyIcons; // Draw the shadow { sf2d_draw_texture_part_scale_blend(pkmIcons, x + 2 * scale, y + 2 * scale, (pkm->speciesID % 25) * 40, (pkm->speciesID / 25) * 30, 40, 30, scale, scale, RGBA8(0x00,0x00,0x00,0x55)); } if (pkm->isEggy) { // Draw the egg+Pokémon icon sf2d_draw_texture_part_scale(pkmIcons, x, y, (pkm->speciesID % 25) * 40, (pkm->speciesID / 25) * 30, 40, 30, scale, scale); sf2d_draw_texture_part(pkmIcons, x, y + 30 * (scale - 0.5f), (EGG_ID % 25) * 40, (EGG_ID / 25) * 30, 40, 30); } else { // Draw the Pokémon icon sf2d_draw_texture_part_scale(pkmIcons, x, y, (pkm->speciesID % 25) * 40, (pkm->speciesID / 25) * 30, 40, 30, scale, scale); // Draw the item if (pkm->itemID > 0) { // TODO: Draw item sf2d_draw_texture_part(PHBanku::texture->itemIcons, x + 5, y + 30 * (scale - 0.5f), (pkm->itemID % 34) * 30, (pkm->itemID / 34) * 30, 30, 30); } } }
void render16c(s32 xp, s32 yp, u32 xTile, u32 yTile, u8 bits, float scaleX,float scaleY) { xp -= offsetX; yp -= offsetY; xp *= scaleX; yp *= scaleY; if ((bits & 1) > 0) { xp += 16 * scaleX; scaleX = -scaleX; } if ((bits & 2) > 0) { yp += 16 * scaleY; scaleY = -scaleY; } sf2d_draw_texture_part_scale(icons, xp, yp, xTile, yTile,16, 16, scaleX, scaleY); }
void render16(s32 xp, s32 yp, u32 xTile, u32 yTile, u8 bits) { xp -= offsetX; yp -= offsetY; int scaleX = 2, scaleY = 2; if ((bits & 1) > 0) { scaleX = -2; xp += 16; } if ((bits & 2) > 0) { scaleY = -2; yp += 16; } sf2d_draw_texture_part_scale(icons, xp << 1, yp << 1, xTile, yTile, 16, 16, scaleX, scaleY); }
void renderFrame(int x1, int y1, int x2, int y2, u32 bgColor) { int startX = x1; int startY = y1; sf2d_draw_rectangle((x1 << 4) + 4 - (offsetX << 1), (y1 << 4) + 4 - (offsetY << 1), ((x2 - x1) << 4) - 8, ((y2 - y1) << 4) - 8, bgColor); while (x1 < x2) { y1 = startY; while (y1 < y2) { int xp = (x1 << 4) - (offsetX << 1); int yp = (y1 << 4) - (offsetY << 1); sf2d_draw_texture_part_scale(icons, xp, yp, getFrame(x1, x2, startX), 200 + getFrame(y1, y2, startY), 8, 8, 2.0, 2.0); ++y1; } ++x1; } }
void renderMenu(int menu,int xscr,int yscr){ int i = 0; switch(menu){ case MENU_LOADGAME: sf2d_start_frame(GFX_TOP, GFX_LEFT); if(!enteringName){ // World select offsetX = 0;offsetY = (currentSelection * 32) - 48; drawText("Select a file",122,-16); for(i = 0; i < worldFileCount + 1; ++i){ int color = 0x201092FF; char * text = fileNames[i]; if(i == worldFileCount){ text = "Generate New World"; color = 0x109220FF; } if(i != currentSelection) color &= 0x7F7F7FFF; // Darken color. else { if(areYouSure)color = 0xDF1010FF; } char scoreText[24]; sprintf(scoreText,"Score: %d",fileScore[i]); renderFrame(1,i*4,24,(i*4)+4,color); if(i != worldFileCount){ drawText(text,(400-(strlen(text)*12))/2,i*64+12); drawText(scoreText,(400-(strlen(scoreText)*12))/2,i*64+32); } else { drawText(text,(400-(strlen(text)*12))/2,i*64+24); } if(fileWin[i] && i != worldFileCount) render16(18,i*32+8,24,208,0); // Render crown } offsetX = 0;offsetY = 0; } else { // Enter new world name. drawText("Enter a name",128,16); drawText(fileNames[worldFileCount],(400-(strlen(fileNames[worldFileCount])*12))/2, 48); if(errorFileName > 0){ switch(errorFileName){// Error: Filename cannot already exist. case 1: drawTextColor("ERROR: Length cannot be 0!",(400-26*12)/2,200,0xAF1010FF); break; case 2: drawTextColor("ERROR: You need Letters/Numbers!",(400-32*12)/2,200,0xAF1010FF); break; case 3: drawTextColor("ERROR: Filename already exists!",(400-31*12)/2,200,0xAF1010FF); break; } } } sf2d_end_frame(); sf2d_start_frame(GFX_BOTTOM, GFX_LEFT); if(!enteringName){ // World select if(!areYouSure){ drawTextColor("Load World",100,12,0xFFFF3FFF); drawText("Press or to scroll", 28, 50); renderButtonIcon(k_up.input & -k_up.input, 98, 48, 1); renderButtonIcon(k_down.input & -k_down.input, 160, 48, 1); drawText("Press to load world", (320-21*12)/2, 100); renderButtonIcon(k_accept.input & -k_accept.input, 104, 98, 1); drawText("Press to return", 58, 150); renderButtonIcon(k_decline.input & -k_decline.input, 128, 148, 1); if(currentSelection != worldFileCount){ drawText("Press to delete",(320-17*12)/2, 200); renderButtonIcon(k_delete.input & -k_delete.input, 128, 198, 1); } } else { drawTextColor("Delete File?",88,12,0xFF3F3FFF); drawText("Press to confirm", (320-18*12)/2, 100); renderButtonIcon(k_accept.input & -k_accept.input, 122, 98, 1); drawText("Press to return", 58, 150); renderButtonIcon(k_decline.input & -k_decline.input, 128, 148, 1); } } else { // Draw the "keyboard" drawTextColor("Touch the keypad below",(320-22*12)/2,12,0xFFFF33FF); sf2d_draw_rectangle(0, 50, 320, 110, 0xBF7F7FFF); drawSizedText(guiText0,4, 60, 2); drawSizedText(guiText1,4, 80, 2); drawSizedText(guiText2,12, 100, 2); drawSizedText(guiText3,28, 120, 2); drawSizedText(guiText4,12, 140, 2); if(touchDelay > 0){ sf2d_draw_rectangle(touchX, touchY, touchW, touchH, 0xAF); } drawText("Press to confirm", (320-18*12)/2, 180); renderButtonIcon(k_accept.input & -k_accept.input, 122, 178, 1); drawText("Press to return", 58, 210); renderButtonIcon(k_decline.input & -k_decline.input, 128, 208, 1); } sf2d_end_frame(); break; case MENU_SETTINGS: sf2d_start_frame(GFX_TOP, GFX_LEFT); drawTextColor("Rebind Buttons",116,12,0xAFAF00FF); drawText("Button",16,32); drawText("Game",140,32); drawText("Menus",280,32); char gameButText[34]; char menuButText[34]; for(i = 0; i < 5; ++i){ if((currentSelection-2) + i > 21 || (currentSelection-2) + i < 0) continue; renderButtonIcon(keys[(currentSelection-2) + i], 16, (i * 18) + 30, 2); int ccol = 0x7F7F7FFF; sprintf(gameButText,"%s",getButtonFunctionGame(keys[(currentSelection-2) + i])); sprintf(menuButText,"%s",getButtonFunctionMenu(keys[(currentSelection-2) + i])); if(i == 2){ if(!selBut)ccol = 0xFFFFFFFF; else{ ccol = 0x00FF00FF; if(left)sprintf(gameButText,"<%s>",getButtonFunctionGame(keys[(currentSelection-2) + i])); else sprintf(menuButText,"<%s>",getButtonFunctionMenu(keys[(currentSelection-2) + i])); } } if(left){ drawTextColor(gameButText, 112, (i * 33) + 80, ccol); drawTextColor(menuButText, 280, (i * 33) + 80, 0x7F7F7FFF); } else { drawTextColor(gameButText, 112, (i * 33) + 80, 0x7F7F7FFF); drawTextColor(menuButText, 280, (i * 33) + 80, ccol); } } if(bindOpt){ renderFrame(1,1,24,14,0x1010BFFF); drawTextColor("Save changes?",122,32,0xAFAF00FF); for(i = 2; i >= 0; --i){ char* msg = keybOptions[i]; u32 color = 0x4F4F4FFF; if(i == curSaveSel) color = 0xFFFFFFFF; drawTextColor(msg,(400 - (strlen(msg) * 12))/2, (i * 24) + 92, color); } drawText("Press to return", 98, 190); renderButtonIcon(k_decline.input & -k_decline.input, 168, 188, 1); if(errorBut >= 0 && errorBut < 9){ char errorText[30]; switch(errorBut){ case 0: sprintf(errorText, "Error: Missing 'Move up'"); break; case 1: sprintf(errorText, "Error: Missing 'Move down'"); break; case 2: sprintf(errorText, "Error: Missing 'Move right'"); break; case 3: sprintf(errorText, "Error: Missing 'Move left'"); break; case 4: sprintf(errorText, "Error: Missing 'Attack'"); break; case 5: sprintf(errorText, "Error: Missing 'Toggle Menu'"); break; case 6: sprintf(errorText, "Error: Missing 'Pause'"); break; case 7: sprintf(errorText, "Error: Missing 'Accept'"); break; case 8: sprintf(errorText, "Error: Missing 'Decline'"); break; case 9: sprintf(errorText, "Error: Missing 'Delete'"); break; } drawTextColor(errorText,(400 - (strlen(errorText) * 12))/2,50,0xFF0000FF); } } sf2d_end_frame(); sf2d_start_frame(GFX_BOTTOM, GFX_LEFT); if(!selBut){ drawText("Press to select", 58, 80); renderButtonIcon(k_accept.input & -k_accept.input, 128, 78, 1); drawText("Press to return", 58, 130); renderButtonIcon(k_decline.input & -k_decline.input, 128, 128, 1); } else { drawText("Press or to scroll", 28, 50); renderButtonIcon(k_left.input & -k_left.input, 98, 48, 1); renderButtonIcon(k_right.input & -k_right.input, 160, 48, 1); drawText("Press to unselect", 46, 100); renderButtonIcon(k_accept.input & -k_accept.input, 118, 98, 1); drawText("Press to return", 58, 150); renderButtonIcon(k_decline.input & -k_decline.input, 128, 148, 1); } sf2d_end_frame(); break; case MENU_PAUSED: sf2d_start_frame(GFX_TOP, GFX_LEFT); if(currentLevel == 0){ sf2d_draw_texture_part_scale(minimap[1],(-xscr/3)-256,(-yscr/3)-32,0,0,128,128,12.5,7.5); sf2d_draw_rectangle(0,0,400,240, 0xDFDFDFAF); } offsetX = xscr;offsetY = yscr; renderMenuBackground(xscr,yscr); offsetX = 0;offsetY = 0; renderFrame(1,1,24,14,0xAF1010FF); drawText("Paused",164,32); for(i = 2; i >= 0; --i){ char* msg = pOptions[i]; u32 color = 0x7F7F7FFF; if(i == currentSelection) color = 0xFFFFFFFF; drawTextColor(msg,(400 - (strlen(msg) * 12))/2, (i * 24) + 100, color); } if(pauseSaveDisplayTimer > 0) drawTextColor("Game Saved!", (400-(11*12))/2, 64,0x20FF20FF); if(areYouSure || areYouSureSave){ if(areYouSure)renderFrame(6,5,19,10,0x8F1010FF); else renderFrame(6,5,19,10,0x108F10FF); drawText("Are you sure?",122,96); drawText(" Yes", 164, 117); renderButtonIcon(k_accept.input & -k_accept.input, 166, 114, 1); drawText(" No", 170, 133); renderButtonIcon(k_decline.input & -k_decline.input, 166, 130, 1); } sf2d_end_frame(); break; case MENU_WIN: sf2d_start_frame(GFX_TOP, GFX_LEFT); if(currentLevel == 0){ sf2d_draw_texture_part_scale(minimap[1],(-xscr/3)-256,(-yscr/3)-32,0,0,128,128,12.5,7.5); sf2d_draw_rectangle(0,0,400,240, 0xDFDFDFAF); } offsetX = xscr;offsetY = yscr; renderMenuBackground(xscr,yscr); offsetX = 0;offsetY = 0; renderFrame(5,3,21,12,0x1010FFFF); if(!rev){ opacity+=5; if(opacity == 255) rev = true; } else { opacity-=5; if(opacity == 100) rev = false; } sprintf(scoreText,"Score: %d", player.p.score); drawTextColor("You Win!",158,76,0xAFAF0000 + opacity); drawText(scoreText, 200-((strlen(scoreText)-1)*6), 100); drawText("Press to continue", 96, 150); renderButtonIcon(k_attack.input & -k_attack.input, 166, 148, 1); //printf("0x%08X",k_attack.input & -k_attack.input); sf2d_end_frame(); break; case MENU_LOSE: sf2d_start_frame(GFX_TOP, GFX_LEFT); if(currentLevel == 0){ sf2d_draw_texture_part_scale(minimap[1],(-xscr/3)-256,(-yscr/3)-32,0,0,128,128,12.5,7.5); sf2d_draw_rectangle(0,0,400,240, 0xDFDFDFAF); } offsetX = xscr;offsetY = yscr; renderMenuBackground(xscr,yscr); offsetX = 0;offsetY = 0; renderFrame(5,3,21,12,0x1010FFFF); if(!rev){ opacity+=5; if(opacity == 255) rev = true; } else { opacity-=5; if(opacity == 100) rev = false; } sprintf(scoreText,"Score: %d", player.p.score); drawTextColor("You DIED!",158,76,0xAF000000 + opacity); drawText(scoreText, 200-((strlen(scoreText)-1)*6), 100); drawText("Press to continue", 96, 150); renderButtonIcon(k_attack.input & -k_attack.input, 166, 148, 1); //printf("0x%08X",k_attack.input & -k_attack.input); sf2d_end_frame(); break; case MENU_INVENTORY: sf2d_start_frame(GFX_TOP, GFX_LEFT); if(currentLevel == 0){ sf2d_draw_texture_part_scale(minimap[1],(-xscr/3)-256,(-yscr/3)-32,0,0,128,128,12.5,7.5); sf2d_draw_rectangle(0,0,400,240, 0xDFDFDFAF); } offsetX = xscr;offsetY = yscr; renderMenuBackground(xscr,yscr); offsetX = 0;offsetY = 0; renderFrame(1,1,24,14,0x1010FFFF); renderItemList(player.p.inv, 1,1,24,14, curInvSel); sf2d_end_frame(); break; case MENU_CRAFTING: sf2d_start_frame(GFX_TOP, GFX_LEFT); if(currentLevel == 0){ sf2d_draw_texture_part_scale(minimap[1],(-xscr/3)-256,(-yscr/3)-32,0,0,128,128,12.5,7.5); sf2d_draw_rectangle(0,0,400,240, 0xDFDFDFAF); } offsetX = xscr;offsetY = yscr; renderMenuBackground(xscr,yscr); offsetX = 0;offsetY = 0; renderFrame(15,1,24,4,0x1010FFFF); renderFrame(15,5,24,14,0x1010FFFF); renderFrame(1,1,14,14,0x1010FFFF); renderRecipes(currentRecipes, 1, 1, 14, 14, curInvSel); Recipe* rec = ¤tRecipes->recipes[curInvSel]; renderItemIcon(rec->itemResult,rec->itemAmountLevel,128,16); char craftText[12]; sprintf(craftText,"%d",countItemInv(rec->itemResult,rec->itemAmountLevel, player.p.inv)); drawText(craftText,274,34); if(rec->numOfCosts > 0){ int i; for(i = 0; i < rec->numOfCosts; i++){ int amnt = countItemInv(rec->costs[i].costItem,0, player.p.inv); int ttlCst = rec->costs[i].costAmount; int col = 0xFFFFFFFF; if(amnt<ttlCst) col = 0x7F7F7FFF; renderItemIcon(rec->costs[i].costItem,1,128,48+(i*8)); sprintf(craftText,"%d/%d",amnt,ttlCst); drawTextColor(craftText,274,96+(i*18),col); } } sf2d_end_frame(); break; case MENU_CONTAINER: sf2d_start_frame(GFX_TOP, GFX_LEFT); if(currentLevel == 0){ sf2d_draw_texture_part_scale(minimap[1],(-xscr/3)-256,(-yscr/3)-32,0,0,128,128,12.5,7.5); sf2d_draw_rectangle(0,0,400,240, 0xDFDFDFAF); } offsetX = xscr;offsetY = yscr; renderMenuBackground(xscr,yscr); if (curChestEntity->entityFurniture.r == 1){ offsetX = 48;offsetY = 0;} else {offsetX = 0;offsetY = 0;} renderFrame(1,1,14,14,0x1010FFFF); renderItemList(curChestEntity->entityFurniture.inv,1,1,14,14, curChestEntity->entityFurniture.r == 0 ? curInvSel : -curChestEntity->entityFurniture.oSel - 1); renderFrame(15,1,28,14,0x1010FFFF); renderItemList(player.p.inv,15,1,28,14, curChestEntity->entityFurniture.r == 1 ? curInvSel : -curChestEntity->entityFurniture.oSel - 1); offsetX = 0;offsetY = 0; sf2d_end_frame(); break; case MENU_ABOUT: sf2d_start_frame(GFX_TOP, GFX_LEFT); drawText("About Minicraft",110,12); drawSizedText("Minicraft was made by Markus Persson for the",24,36,1.0); drawSizedText("22'nd ludum dare competition in december 2011.",16,48,1.0); drawSizedText("it is dedicated to my father. <3",72,60,1.0); drawSizedText("- Markus \"Notch\" Persson",104,76,1.0); drawTextColor("3DS Homebrew Edition",74,120,0x00FF00FF); drawSizedTextColor("This port was made by David Benepe (Davideesk)",16,144,1.0,0x00FF00FF); drawSizedTextColor("just for fun in September/October 2015.",44,156,1.0,0x00FF00FF); drawSizedTextColor("TY Notch for creating a fun game to remake!",28,180,1.0,0x00FF00FF); sf2d_end_frame(); sf2d_start_frame(GFX_BOTTOM, GFX_LEFT); drawTextColor("Special Thanks to:",52,12,0xFF7F7FFF); drawTextColor("Smea",136,60,0xFF2020FF); drawSizedTextColor("for ctrulib",116,80,1.0,0xFF2020FF); drawTextColor("Xerpi",130,120,0x2020FFFF); drawSizedTextColor("for sf2dlib",116,140,1.0,0x2020FFFF); drawText("Press to return", 58, 220); renderButtonIcon(k_decline.input & -k_decline.input, 128, 218, 1); sf2d_end_frame(); break; case MENU_TITLE: /* Top Screen */ sf2d_start_frame(GFX_TOP, GFX_LEFT); renderTitle(76,16); for(i = 4; i >= 0; --i){ char* msg = options[i]; u32 color = 0x7F7F7FFF; if(i == currentSelection) color = 0xFFFFFFFF; drawSizedTextColor(msg,(200 - (strlen(msg) * 8))/2, ((8 + i) * 20 - 50) >> 1,2.0, color); } drawText(versionText,2,225); sf2d_end_frame(); /* Bottom Screen */ sf2d_start_frame(GFX_BOTTOM, GFX_LEFT); int startX = 0, startY = 0;// relative coordinates ftw switch(currentSelection){ case 0: // "Start Game" startX = 20;startY = 50; render16(startX,startY+12,0,128,0);//Player(Carrying) render16(startX,startY,128,128,0);//Workbench startX = 120;startY = 20; render16b(startX,startY,16,96,0,0x001DC1FF);// water pit render16b(startX+16,startY,32,96,0,0x001DC1FF); render16b(startX,startY+16,48,96,0,0x001DC1FF); render16b(startX+16,startY+16,64,96,0,0x001DC1FF); renderc (startX+8,startY+12,48,160,16,8,0);//Waves renderc (startX+8,startY+8,0,112,16,8,0);//Player (Top-Half) startX = 110;startY = 76; render16 (startX,startY,48,112,0);//Player renderc (startX+12,startY,40,160,8,16,0);//Slash render (startX+14,startY+4,152,144,0);//Pickaxe render16b(startX+18,startY,80,0,0,0xDCC6AEFF);//Iron ore startX = 40;startY = 90; render16b (startX,startY,128,112,0,0xADFFADFF);//Slime render16 (startX+18,startY,48,112,1);//Player (Mirrored) renderc (startX+14,startY,32,160,8,16,0);//Slash render (startX+12,startY+4,104,144,1);//Sword startX = 64;startY = 40; render16b(startX,startY,16,80,0,0x69B569FF);// grass pit render16b(startX+16,startY,32,80,0,0x69B569FF); render16b(startX,startY+16,48,80,0,0x69B569FF); render16b(startX+16,startY+16,64,80,0,0x69B569FF); render16 (startX+8,startY+4,0,16,0);//Tree render (startX+1,startY+14,80,152,0);// Apple render16 (startX+9,startY+18,16,112,0);//Player renderc (startX+9,startY+14,16,160,16,8,0);//Slash drawTextColor("Play minicraft",24,24,0xFFFF7FFF); break; case 1: // "How To Play" startX = 72;startY = 54; render16(startX,startY,96,208,0);//C-PAD startX = 72;startY = 37; render16(startX,startY-16,16,112,0);//Player render16(startX,startY,112,208,0);//C-PAD up startX = 72;startY = 71; render16(startX,startY+16,0,112,0);//Player render16(startX,startY,144,208,0);//C-PAD down startX = 39;startY = 54; render16(startX,startY,48,112,1);//Player render16(startX+16,startY,128,208,0);//C-PAD left startX = 89;startY = 54; render16(startX+16,startY,48,112,0);//Player render16(startX,startY,160,208,0);//C-PAD right drawTextColor("Learn the basics",64,24,0xFFFF7FFF); break; case 2: // "Settings" break; case 3: // "About" break; } sf2d_end_frame(); break; } }
void TextureManager::drawLoadingText(int rx, int ry) { sf2d_draw_texture_part_scale(this->ballLoadingScreen, rx - 64 * 4, ry - 8 * 4, 0, 16, 64, 8, 4.0f, 4.0f); }
void TextureManager::drawLoadingUltraball(int x, int y) { sf2d_draw_texture_part_scale(this->ballLoadingScreen, x, y, 32, 0, 16, 16, 2.0f, 2.0f); }
int main() { sf2d_init(); csndInit(); noItem = newItem(ITEM_NULL,0); currentMenu = MENU_TITLE; currentSelection = 0; quitGame = false; icons = sfil_load_PNG_buffer(icons2_png, SF2D_PLACE_RAM); font = sfil_load_PNG_buffer(Font_png, SF2D_PLACE_RAM); //consoleInit(GFX_BOTTOM, NULL); // printf("Press 'Start' to exit.\n"); loadSound(&snd_playerHurt, "resources/playerhurt.raw"); loadSound(&snd_playerDeath, "resources/playerdeath.raw"); loadSound(&snd_monsterHurt, "resources/monsterhurt.raw"); loadSound(&snd_test, "resources/test.raw"); loadSound(&snd_pickup, "resources/pickup.raw"); loadSound(&snd_bossdeath, "resources/bossdeath.raw"); loadSound(&snd_craft, "resources/craft.raw"); int i; for(i = 0;i < 5;++i){ minimap[i] = sf2d_create_texture(128,128,TEXFMT_RGBA8,SF2D_PLACE_RAM); sf2d_texture_tile32(minimap[i]); } sf2d_set_vblank_wait(true); sf2d_set_clear_color(0xFF); /* Default inputs */ k_up.input = KEY_DUP | KEY_CPAD_UP | KEY_CSTICK_UP; k_down.input = KEY_DDOWN | KEY_CPAD_DOWN | KEY_CSTICK_DOWN; k_left.input = KEY_DLEFT | KEY_CPAD_LEFT | KEY_CSTICK_LEFT; k_right.input = KEY_DRIGHT | KEY_CPAD_RIGHT | KEY_CSTICK_RIGHT; k_attack.input = KEY_A | KEY_B | KEY_L | KEY_ZR; k_menu.input = KEY_X | KEY_Y | KEY_R | KEY_ZL; k_pause.input = KEY_START; k_accept.input = KEY_A; k_decline.input = KEY_B; k_delete.input = KEY_X; FILE * file; /* If btnSave exists, then use that. */ if ((file = fopen("btnSave.bin", "rb"))){ fread(&k_up.input, sizeof(int), 1, file); fread(&k_down.input, sizeof(int), 1, file); fread(&k_left.input, sizeof(int), 1, file); fread(&k_right.input, sizeof(int), 1, file); fread(&k_attack.input, sizeof(int), 1, file); fread(&k_menu.input, sizeof(int), 1, file); fread(&k_pause.input, sizeof(int), 1, file); fread(&k_accept.input, sizeof(int), 1, file); fread(&k_decline.input, sizeof(int), 1, file); fread(&k_delete.input, sizeof(int), 1, file); fclose(file); } //screenShot = false; tickCount=0; initRecipes(); defineTables(); while (aptMainLoop()) { ++tickCount; hidScanInput(); tickKeys(hidKeysHeld(),hidKeysDown()); //if (quitGame || hidKeysHeld() & KEY_SELECT) break; if (quitGame) break; //if (hidKeysDown() & (KEY_L | KEY_R)) screenShot = true; // else screenShot = false; if(initGame > 0) setupGame(initGame == 1 ? true : false); if(currentMenu == 0){ tick(); sprintf(fpsstr, " FPS: %.0f, X:%d, Y:%d, E:%d", sf2d_get_fps(),player.x, player.y,eManager.lastSlot[currentLevel]); sf2d_start_frame(GFX_TOP, GFX_LEFT); if(currentLevel == 0){ sf2d_draw_texture_part_scale(minimap[1],(-xscr/3)-256,(-yscr/3)-32,0,0,128,128,12.5,7.5); sf2d_draw_rectangle(0,0,400,240, 0xDFDFDFAF); } offsetX = xscr;offsetY = yscr; renderBackground(xscr,yscr); renderEntities(player.x, player.y, &eManager); renderPlayer(); offsetX = 0;offsetY = 0; renderItemWithText(player.p.activeItem, 10, 205); // drawText(debugText,2,208); drawText(fpsstr,2,225); sf2d_end_frame(); sf2d_start_frame(GFX_BOTTOM, GFX_LEFT); if(currentLevel == 0 && airWizardHealthDisplay > 0){ sprintf(bossHealthText, "BOSS: %.0f%%", ((float)airWizardHealthDisplay/2000.0)*100); drawText(bossHealthText,2,225); } renderGui(); sf2d_draw_texture(minimap[currentLevel], 192, 112);//y:56 sf2d_end_frame(); } else{ tickMenu(currentMenu); renderMenu(currentMenu,xscr,yscr); } sf2d_swapbuffers(); } freeRecipes(); sf2d_free_texture(icons); sf2d_free_texture(minimap[0]); sf2d_free_texture(minimap[1]); sf2d_free_texture(minimap[2]); sf2d_free_texture(minimap[3]); sf2d_free_texture(minimap[4]); freeSounds(); csndExit(); sf2d_fini(); return 0; }
void renderTitle(int x, int y) { sf2d_draw_texture_part_scale(icons, (x - 26) << 1, y << 1, 0, 240, 104, 16, 2.0, 2.0); // MINICRAFT sf2d_draw_texture_part(icons, x + 48, y + 52, 104, 240, 152, 16); // 3DS HOMEBREW EDITION }
void clim_draw_texture(const sf2d_texture *texture, int x, int y) { sf2d_draw_texture_part_scale(texture, x, y+texture->height, 0, next_pow2(texture->height) - texture->height, texture->width, texture->height, 1, -1); }