void CMenu::displayInstructions() { // Display the first instructions screen PA_DeleteBg (0, 0); PA_EasyBgLoad(0, 0, instructions1); PA_WaitForVBL(); while(!Stylus.Released) PA_WaitForVBL(); // Display the second instructions screen PA_DeleteBg (0, 0); PA_EasyBgLoad(0, 0, instructions2); PA_WaitForVBL(); while(!Stylus.Released) PA_WaitForVBL(); PA_DeleteBg (0, 0); // Display the third instructions screen PA_EasyBgLoad(0, 0, instructions3); // Display the sprites of the example card at the center of the bottom screen PA_DualLoadSpritePal(PALETTE_NB_CARD, (void*)defense9_Pal); PA_DualCreateSprite(SPRITE_NB_BACKCARD_PART1, (void*)defense9_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_CARD, 97, 42+48+192); PA_DualCreateSprite(SPRITE_NB_BACKCARD_PART2, (void*)defense9_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_CARD, 97, 42+45+48+192); PA_WaitForVBL(); while(!Stylus.Released) PA_WaitForVBL(); // Delete the sprites of the example card PA_DualDeleteSprite(SPRITE_NB_BACKCARD_PART1); PA_DualDeleteSprite(SPRITE_NB_BACKCARD_PART2); // Replace the third instruction screen with the main menu PA_DeleteBg (0, 0); PA_EasyBgLoad(0, 0, menu2); m_itemTouched = NO_MODE; PA_WaitForVBL(); }
void StartScreen() { PA_LoadBackground(UP_SCREEN, BACKGROUND_UP, &UPSTARTSCREEN); PA_LoadSpritePal(DOWN_SCREEN, START_NUM, (void*) START_Pal); PA_CreateSprite(DOWN_SCREEN, START_NUM, (void*) START_Sprite, OBJ_SIZE_64X32, 1, START_NUM, 96, 50); PA_StartSpriteAnim(DOWN_SCREEN, START_NUM, 0, 1, 2); while (1) { PA_WaitForVBL(); if (Stylus.Newpress) { if (PA_SpriteTouched(START_NUM)) { PA_DeleteBg(UP_SCREEN, BACKGROUND_UP); PA_DeleteSprite(DOWN_SCREEN, START_NUM); PA_LoadBackground(UP_SCREEN, BACKGROUND_UP, &UPGAMESCREEN); PA_LoadBackground(DOWN_SCREEN, BACKGROUND_DOWN, &DOWNGAMESCREEN); break; } } if (Pad.Newpress.Start) { PA_DeleteBg(UP_SCREEN, BACKGROUND_UP); PA_DeleteSprite(DOWN_SCREEN, START_NUM); PA_LoadBackground(UP_SCREEN, BACKGROUND_UP, &UPGAMESCREEN); PA_LoadBackground(DOWN_SCREEN, BACKGROUND_DOWN, &DOWNGAMESCREEN); break; } } AS_SoundDefaultPlay((u8*)bgm, (u32)bgm_size, 127, 64, true, 0); }
/* 게임메인 */ int scr_Main() { /* 화면초기화 및 갱신 */ UnLoad_Screen(); PA_Init(); PA_InitVBL(); PA_LoadBackground(UP_SCREEN, BG1, &up_main); // 상단 디스플레이-타이틀화면 설정. PA_LoadBackground(DOWN_SCREEN, BG1, &down_main); // 하단 디스플레이-타이틀화면 설정. PA_LoadSpritePal(UP_SCREEN, BG2, (void*) GameName_Pal); PA_CreateSprite(UP_SCREEN, BG2, (void*) GameName_Sprite, OBJ_SIZE_64X32, 1, BG2, 74, 135); PA_StartSpriteAnim(UP_SCREEN, BG2, 0, 1, 1); PA_LoadSpritePal(DOWN_SCREEN, BG2, (void*) START_Pal); PA_CreateSprite(DOWN_SCREEN, BG2, (void*) START_Sprite, OBJ_SIZE_64X32, 1, BG2, 50, 100); PA_LoadSpritePal(DOWN_SCREEN, BG3, (void*) EXIT_Pal); PA_CreateSprite(DOWN_SCREEN, BG3, (void*) EXIT_Sprite, OBJ_SIZE_64X32, 1, BG3, 140, 100); if ( ismain==FALSE ) { AS_SoundDefaultPlay((u8*)start, (u32)start_size, 127, 64, TRUE, 0); ismain = TRUE; } while (1) { if (Stylus.Newpress) { if (PA_SpriteTouched(BG2)) { PA_DeleteBg(UP_SCREEN, BG1); PA_DeleteBg(DOWN_SCREEN, BG1); PA_DeleteSprite(DOWN_SCREEN, BG2); PA_DeleteSprite(DOWN_SCREEN, BG3); PA_DeleteSprite(UP_SCREEN, BG2); PA_LoadBackground(UP_SCREEN, BG1, &up); PA_LoadBackground(DOWN_SCREEN, BG1, &down); break; } if (PA_SpriteTouched(BG3)) { return GAMEEXIT; } } PA_WaitForVBL(); } return 0; }
void PA_EasyBgLoadEx(u8 screen, u8 bg_number, u32 *Infos, void *Tiles, u32 TileSize, void *Map, u32 MapSize, void *Palette) { PA_StoreEasyBgInfos(screen, bg_number, Infos[0], Infos[1], Infos[2], Tiles, TileSize, Map, MapSize, Palette); // PA_BgInfo[screen][bg_number].BgMode = Infos[0]; PA_LoadBgPal(screen, bg_number, Palette); PA_DeleteBg(screen, bg_number); if (PA_BgInfo[screen][bg_number].BgMode == BG_TILEDBG) { PA_LoadBgTilesEx(screen, bg_number, Tiles, TileSize>>1); PA_LoadBgMap(screen, bg_number, Map, PA_GetPAGfxBgSize(Infos[1], Infos[2])); PA_InitBg(screen, bg_number, PA_GetPAGfxBgSize(Infos[1], Infos[2]), 0, 1); }
void PA_Default16bitInit(u8 screen, u8 bg_priority){ PA_DeleteBg(screen, 3); PA_nBit[screen] = 1; // 16 bit PA_BGXPA(screen, 3) = 1 << 8; PA_BGXPB(screen, 3) = 0; PA_BGXPC(screen, 3) = 0; PA_BGXPD(screen, 3) = 1 << 8; PA_BGXX(screen, 3) = 0; PA_BGXY(screen, 3) = 0; _REG16(REG_BGSCREEN(screen)) &= ~7; _REG16(REG_BGSCREEN(screen)) |= (0x100 << (3)) | MODE_3_2D; }
void mainScreen() { while (1) { if (Pad.Newpress.Start) { PA_DeleteBg(DOWN_SCREEN, BACKGROUND_DOWN); PA_DeleteSprite(DOWN_SCREEN, START_NUM); PA_LoadBackground(UP_SCREEN, BACKGROUND_UP, &map); break; } PA_WaitForVBL(); } }
void CMenu::displayMenu(void) { u16 position_castle(36); s8 l_i; // Reset the background system PA_ResetBgSys(); // Initialize the text at the top and bottom screens PA_InitText(1,0); PA_Init16cBg(1, 1); //PA_Init16cBg(1, 1); //PA_InitCustomText(1, 0, PA_Text); //PA_InitText(0,0); PA_Init16cBg(0, 1); // Load the grass background at the top screen PA_EasyBgLoad(1, 2, grass); // Set the screens' brightness to white PA_SetBrightness(1, 31); PA_SetBrightness(0, 31); // Load the title background at the top screen PA_EasyBgLoad(1, 3, title); // Change the brightness of the top screen to neutral (fading) for (l_i = 31; l_i >= 0; l_i--) { PA_SetBrightness(1, l_i); PA_WaitForVBL(); PA_WaitForVBL(); } // Create the sprites for the two castles below the grass level PA_DualCreateSprite(SPRITE_NB_CASTLE1_PART1, (void*)topcastle_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_CASTLE, 69, 192-position_castle); PA_DualCreateSprite(SPRITE_NB_CASTLE1_PART2, (void*)castle_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_CASTLE, 69, 192+64-position_castle); PA_DualCreateSprite(SPRITE_NB_CASTLE2_PART1, (void*)topcastle_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_CASTLE, 151, 192-position_castle); PA_DualCreateSprite(SPRITE_NB_CASTLE2_PART2, (void*)castle_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_CASTLE, 151, 192+64-position_castle); // Display the castle sprites behind the grass PA_DualSetSpritePrio (SPRITE_NB_CASTLE1_PART1, 3); PA_DualSetSpritePrio (SPRITE_NB_CASTLE1_PART2, 3); PA_DualSetSpritePrio (SPRITE_NB_CASTLE2_PART1, 3); PA_DualSetSpritePrio (SPRITE_NB_CASTLE2_PART2, 3); // Move gradually the castle sprites above the grass for (position_castle = 36; position_castle <= 90; position_castle++) { PA_WaitForVBL(); PA_DualSetSpriteXY(SPRITE_NB_CASTLE1_PART1, 69, 192-position_castle); PA_DualSetSpriteXY(SPRITE_NB_CASTLE1_PART2, 69, 192+64-position_castle); PA_DualSetSpriteXY(SPRITE_NB_CASTLE2_PART1, 151, 192-position_castle); PA_DualSetSpriteXY(SPRITE_NB_CASTLE2_PART2, 151, 192+64-position_castle); } // Display the main menu PA_EasyBgLoad(0, 0, menu2); PA_SetBrightness(0, 0); // Wait for a player's action m_itemTouched = NO_MODE; while ((m_itemTouched == NO_MODE) || (m_itemTouched == MODE_TWOPLAYERS) || (m_itemTouched == BACK)) { m_itemTouched = itemTouched(); if (m_itemTouched == MODE_INSTRUCTIONS) displayInstructions(); if (m_itemTouched == MODE_TWOPLAYERS) { PA_DeleteBg (0, 0); PA_EasyBgLoad(0, 0, hotseat_wifi); } if (m_itemTouched == BACK) { PA_DeleteBg (0, 0); PA_EasyBgLoad(0, 0, menu2); } PA_WaitForVBL(); } // Delete the castle sprites PA_DualDeleteSprite(SPRITE_NB_CASTLE1_PART1); PA_DualDeleteSprite(SPRITE_NB_CASTLE1_PART2); PA_DualDeleteSprite(SPRITE_NB_CASTLE2_PART1); PA_DualDeleteSprite(SPRITE_NB_CASTLE2_PART2); // Load the empty bottom screen PA_EasyBgLoad(0, 3, bottomscreen); // Activate the Wifi if (m_itemTouched == MODE_WIFI) { PA_DeleteBg (0, 0); PA_EasyBgLoad(1, 2, opponentchoice); l_wifi.goToState(WIFI_STATE_ACTIVE); m_playerOrder = l_wifi.connection(); } // Fading to white at the top screen for (l_i = 0; l_i <=31; l_i++) { PA_SetBrightness(1, l_i); PA_WaitForVBL(); PA_WaitForVBL(); } // Start to play the music #ifndef DEBUG AS_SetMP3Loop(true); AS_SetMP3Volume(m_musicVolume); AS_MP3DirectPlay((u8*)sound9, (u32)sound9_size); #endif CGame l_game; // Main game object // Initialise the game object where m_itemTouched corresponds to the game mode l_game.initGame(m_musicVolume, m_cardSpeed, m_itemTouched, m_playerOrder); // Infinite loop to keep the program running bool finish = false; while(!finish) { // Play the game finish = l_game.play(&m_musicVolume, &m_cardSpeed); PA_WaitForVBL(); } // Stop the music #ifndef DEBUG AS_MP3Stop(); #endif }