int main(int argc, char ** argv) { // General initializations PA_Init(); PA_InitVBL(); PA_InitRand(); #ifndef DEBUG // Sound init to play mp3 and/or sfx PA_InitASLibForMP3(AS_MODE_MP3 | AS_MODE_SURROUND | AS_MODE_16CH); #endif // Initialize the Wifi handler l_wifi.initialize(); #ifndef DEBUG // Set the sound settings AS_SetDefaultSettings(AS_PCM_8BIT, 44100, AS_SURROUND); #endif // Initialize the background transitions PA_InitBgTrans(0); PA_BgTransDiag(0, TRANSITION_TYPE, 0, 1, 0); // Load sprite palettes PA_LoadSpritePal(1, PALETTE_NB_CASTLE, (void*)castle_Pal); PA_LoadSpritePal(1, PALETTE_NB_ITEM, (void*)item_Pal); // Enable alpha blending at the bottom and top screens PA_EnableSpecialFx(0, SFX_ALPHA, 0, SFX_BG0 | SFX_BG1 | SFX_BG2 | SFX_BG3 | SFX_BD); PA_SetSFXAlpha(0, 7, 15); PA_EnableSpecialFx(1, SFX_ALPHA, 0, SFX_BG0 | SFX_BG1 | SFX_BG2 | SFX_BG3 | SFX_BD); PA_SetSFXAlpha(1, 7, 15); // Main menu object CMenu l_menu; while(1) { // Display the menu l_menu.displayMenu(); } return 0; }
// Function: main() int main(int argc, char ** argv) { u8 i; PA_Init(); // Initializes PA_Lib PA_InitVBL(); // Initializes a standard VBL // Load 8bit palettes for sprites... PA_LoadSpritePal(0,0,(void*)ds_Pal); PA_LoadSpritePal(0,1,(void*)giz_Pal); PA_LoadSpritePal(0,2,(void*)gp_Pal); PA_LoadSpritePal(0,3,(void*)psp_Pal); // Create sprites PA_CreateSprite(0,0,(void*)ds_Sprite,OBJ_SIZE_64X64,1,0,PA_Rand()%192,PA_Rand()%128); PA_CreateSprite(0,1,(void*)giz_Sprite,OBJ_SIZE_64X64,1,1,PA_Rand()%192,PA_Rand()%128); PA_CreateSprite(0,2,(void*)gp_Sprite,OBJ_SIZE_64X64,1,2,PA_Rand()%192,PA_Rand()%128); PA_CreateSprite(0,3,(void*)psp_Sprite,OBJ_SIZE_64X64,1,3,PA_Rand()%192,PA_Rand()%128); //Set the main palette BG_PALETTE[0] = PA_RGB(27,27,27); // Infinite loop to keep the program running while (1) { PA_WaitForVBL(); for(i=0;i<4;i++) PA_MoveSprite(i); } return 0; } // End of main()
void initMinimap(int selStage) { PA_ResetBgSysScreen(SUB_SCREEN); if(selStage == FINALDESTINATION) { PA_EasyBgLoad(SUB_SCREEN, 3, finaldestinationminimap); } else if(selStage == POKEMONSTADIUM) { PA_EasyBgLoad(SUB_SCREEN, 3, pokemonstadiumminimap); } // else if(selStage == CORNERIA) { // PA_EasyBgLoad(SUB_SCREEN, 3, corneria); // } // else if(selStage == CASTLESIEGE) { // PA_EasyBgLoad(SUB_SCREEN, 3, castleseige); // } PA_LoadSpritePal(SUB_SCREEN, 1, (void*)charminis_Pal); for(int n = 0; n < (int)players.size(); n++) { PA_CreateSprite(SUB_SCREEN, n+1, (void*)charminis, OBJ_SIZE_16X16, COLOR256, 1, -16, -16); if(players[n] -> name == "kirby") PA_StartSpriteAnimEx(SUB_SCREEN, n+1, KIRBY, KIRBY, 1, ANIM_LOOP, -1); else if(players[n] -> name == "mewtwo") PA_StartSpriteAnimEx(SUB_SCREEN, n+1, MEWTWO, MEWTWO, 1, ANIM_LOOP, -1); else if(players[n] -> name == "mario") PA_StartSpriteAnimEx(SUB_SCREEN, n+1, MARIO, MARIO, 1, ANIM_LOOP, -1); else if(players[n] -> name == "ike") PA_StartSpriteAnimEx(SUB_SCREEN, n+1, IKE, IKE, 1, ANIM_LOOP, -1); } PA_LoadSpritePal(SUB_SCREEN, 0, (void*)visibleminimap_Pal); PA_CreateSprite(SUB_SCREEN, 0, (void*)visibleminimap_Sprite, OBJ_SIZE_64X64, COLOR256, 0, -64, -64); // loads the sprite icons for the minimap } // initializes the minimap display on the sub screen
// Main function int main(void) { PA_Init(); PA_InitVBL(); PA_InitText(1, 0); PA_LoadSpritePal(0, 0, (void*)sprite0_Pal); // Load the sprite palette // Load a few sprites... u8 i = 0; for (i = 0; i < 16; i++) PA_CreateSprite(0, i,(void*)mollusk_Sprite, OBJ_SIZE_32X32,1, 0, i << 3, i << 3); PA_InitSpriteExtPrio(1); // Enable extended priorities PA_OutputSimpleText(1, 0, 10, "Please move the sprites to see how their priorities change"); while(1) { // Now we'll test every sprite to see if we touch it... for (i = 0; i < 16; i++) { PA_MoveSprite(i); // move the sprites. s16 y = PA_GetSpriteY(0, i); if (y > 192) y-=256; // if higher than 0... PA_SetSpriteExtPrio(0, i, 192-y); // Top priority when at the bottom ! } PA_WaitForVBL(); } return 0; }
//Fonction principale du code int main(void){ PA_Init(); //Initialision of PAlib PA_InitVBL(); PA_InitText(0,0); PA_LoadSpritePal(0, // Screen 0, // Palette number (void*)sprite0_Pal); // Palette name //Create the sprite PA_CreateSprite(0, 0,(void*)vaisseau_Sprite, OBJ_SIZE_32X32,1, 0, 0, 0); while(1){ // Main loop // Update the position according to the keypad... x += Pad.Held.Right - Pad.Held.Left; y += Pad.Held.Down - Pad.Held.Up; // Set the sprite's position PA_SetSpriteXY(0, // screen 0, // sprite x, // x position y); // y... PA_WaitForVBL(); } return 0; }
int main(void){ PA_Init(); PA_InitVBL(); PA_InitText(1,0); // On the top screen PA_LoadSpritePal(0, 0, (void*)sprite0_Pal); // This'll be the movable sprite... PA_CreateSprite(0, 0,(void*)circle_Sprite, OBJ_SIZE_32X32,1, 0, 16, 16); s32 x = 16; s32 y = 16; // Sprite's center position // This will be the fixed circle PA_CreateSprite(0, 1,(void*)circle_Sprite, OBJ_SIZE_32X32,1, 0, 128-16, 96-16); while(1) { if (PA_MoveSprite(0)){ x = PA_MovedSprite.X; y = PA_MovedSprite.Y; } // Collision ? if (PA_Distance(x, y, 128, 96) < 32*32) PA_OutputText(1, 2, 10, "Collision !!"); else PA_OutputText(1, 2, 10, " "); PA_WaitForVBL(); } return 0; }
int main(void){ PA_Init(); //PAlib inits PA_InitVBL(); PA_InitText(1, 0); PA_OutputSimpleText(1, 2, 6, "BinFile example"); PA_LoadSpritePal(0, // Screen 0, // Palette number (void*)sprite0_Pal); // Palette name PA_CreateSprite(0, // Screen 0, // Sprite number (void*)vaisseau_Sprite, // Sprite name OBJ_SIZE_32X32, // Sprite size 1, // 256 color mode 0, // Sprite palette number 50, 50); // X and Y position on the screen while (1) // Infinite loop { PA_WaitForVBL(); } return 0; }
void PlayerBrowser::draw(){ s8 i = 0; PA_SetBrightness(0, -31); // all black PA_SetBrightness(1, -31); // all black PA_ResetSpriteSys(); PA_Init16cBg(1, 0); PA_Init16cBg(0, 0); PA_LoadTiledBg(1, 1, bgplayer1); PA_LoadTiledBg(0, 1, bgplayer0); PA_LoadSpritePal(0, 1, (void*)pbutton_Pal); PA_KeyboardOut(); PA_CreateSprite(0, TERM_SCREEN, (void*)term_Sprite, OBJ_SIZE_64X32, 1, 1, 0, 0); PA_CreateSprite(0, PLAYERS_SCREEN, (void*)players_Sprite, OBJ_SIZE_64X32, 1, 1, 64, 0); PA_CreateSprite(0, GAMES_SCREEN, (void*)games_Sprite, OBJ_SIZE_64X32, 1, 1, 128, 0); PA_CreateSprite(0, OPTIONS_SCREEN, (void*)options_Sprite, OBJ_SIZE_64X32, 1, 1, 192, 0); PA_SetSpriteAnim(0, 11, 1); for(i = -31; i < 0 ; i++){ PA_SetBrightness(0, i); PA_SetBrightness(1, i); PA_WaitForVBL(); } PA_16cText(0, 6, 85, 80, 95, "NAMEXXXXXX", 1, 1, 100); PA_16cText(0, 88, 85, 127, 95, "[12k*]", 1, 1, 100); PA_16cText(0, 128, 85, 136, 95, "X", 1, 1, 100); PA_16cText(0, 6, 95, 80, 115, "NAMEXXXXXX", 1, 1, 100); PA_16cText(0, 88, 95, 127, 115, "[12k*]", 1, 1, 100); PA_16cText(0, 128, 95, 136, 115, "X", 1, 1, 100); }
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; }
// Function: main() int main(int argc, char ** argv){ PA_Init(); // PA Init... PA_InitVBL(); // VBL Init... // Init the sound system AS_Init(AS_MODE_SURROUND | AS_MODE_16CH); AS_SetDefaultSettings(AS_PCM_8BIT, 11025, AS_SURROUND); PA_SetBgColor(0, PA_RGB(31, 31, 31)); // White background color // First, convert the gif to a sprite format... u8 *spritegfx = PA_GifToTiles((void*)Mollusk, // Gif file spritepal); // our palette // Next, load the sprite... PA_CreateSprite(0, 0, spritegfx, OBJ_SIZE_64X64, 1, 0, 64, 64); // Just like plain sprites ! PA_LoadSpritePal(0, 0, spritepal); // Just like plain palettes ! // spritegfx can be used over and over again to load other sprites... // If you do not need it anymore, use free(spritegfx); to free the memory it uses ! s32 spritex = -64; // Sprite position s32 pan = 0; // Audio panning PA_SetSpriteHflip(0, 0, 1); // Turn sprite around... again... while(1) { int channel0 = PA_PlaySimpleSound(Zoom); // Play sound... for (spritex = -64; spritex < 256; spritex +=2){ pan = spritex/2; if (pan < 0) pan = 0; if (pan > 127) pan = 127; // Limit range... PA_SetSpriteX(0, 0, spritex); PA_SetSoundChannelPan(channel0, pan); PA_WaitForVBL(); } PA_SetSpriteHflip(0, 0, 0); // Turn sprite around... int channel1 = PA_PlaySimpleSound(Zoom); for (spritex = 256; spritex > -65; spritex -=2){ pan = spritex/2; if (pan < 0) pan = 0; if (pan > 127) pan = 127; // Limit range... PA_SetSpriteX(0, 0, spritex); PA_SetSoundChannelPan(channel1, pan); PA_WaitForVBL(); } PA_SetSpriteHflip(0, 0, 1); // Turn sprite around... again... } return 0; } // End of main()
void init() { PA_Init(); PA_InitVBL(); PA_InitText(0, 0); PA_InitText(1, 0); PA_LoadSpritePal(0, // Screen 0, // Palette number (void*)btn_palette); // Palette name }
/* 메인 화면 */ 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, 140); PA_StartSpriteAnim(UP_SCREEN, BG2, 0, 1, 1);// 애니메이션 동작 실행 PA_LoadSpritePal(DOWN_SCREEN, BG2, (void*) START_Pal);// 하단에 START 팔레트 생성 PA_CreateSprite(DOWN_SCREEN, BG2, (void*) START_Sprite, OBJ_SIZE_64X32, 1, BG2, 55, 103); PA_LoadSpritePal(DOWN_SCREEN, BG3, (void*) EXIT_Pal);// 하단에 EXIT 팔레트 생성 PA_CreateSprite(DOWN_SCREEN, BG3, (void*) EXIT_Sprite, OBJ_SIZE_64X32, 1, BG3, 145, 103); AS_SoundDefaultPlay((u8*) start, (u32) start_size, 127, 64, TRUE, 0);//start 배경음 시작 while (1) { if (Stylus.Newpress) { // 화면이 눌렸을 때 if (PA_SpriteTouched(BG2)) {// BG2의 sprite 가 눌렸을 때(START) UnLoad_Sound(); UnLoad_Screen(); AS_SoundDefaultPlay((u8*) clk, (u32) clk_size, 50, 64, FALSE,0); PA_LoadBackground(UP_SCREEN, BG1, &up); PA_LoadBackground(DOWN_SCREEN, BG1, &down); break; // 화면의 출력된 모든 파일들 정리 후 일반 게임 배경 출력 후 break } if (PA_SpriteTouched(BG3)) // BG3의 sprite 가 눌렸을 때(EXIT) return GAMEEXIT; } PA_WaitForVBL(); } return 0; }
portTASK_FUNCTION(Screen_Task, pvParameters) { PA_LoadSpritePal(UP_SCREEN, UPSCR_BODY_PAL, (void*) man_Pal); PA_LoadSpritePal(UP_SCREEN, NUM_PAL, (void*) number_Pal); PA_LoadSpritePal(UP_SCREEN, WORD_PAL, (void*) word_Pal); PA_CreateSprite(UP_SCREEN, WORD, (void*) word_Sprite, OBJ_SIZE_32X32, TRUE, WORD_PAL, 8, 22); PA_CreateSprite(UP_SCREEN, WORD+1, (void*) word_Sprite, OBJ_SIZE_32X32, TRUE, WORD_PAL, 40, 22); PA_CreateSprite(UP_SCREEN, WORD+2, (void*) number_Sprite, OBJ_SIZE_32X32, TRUE, NUM_PAL, 72, 22); PA_CreateSprite(UP_SCREEN, WORD+3, (void*) number_Sprite, OBJ_SIZE_32X32, TRUE, NUM_PAL, 97, 22); PA_SetSpriteAnim (UP_SCREEN, WORD, 2); PA_SetSpriteAnim (UP_SCREEN, WORD+1, 3); PA_SetSpriteAnim (UP_SCREEN, WORD+2, MAX_BODY_LENGTH/10); PA_SetSpriteAnim (UP_SCREEN, WORD+3, MAX_BODY_LENGTH%10); PA_CreateSprite(UP_SCREEN, UPSCRBODY, (void*) man_Sprite, OBJ_SIZE_16X32, TRUE, UPSCR_BODY_PAL, 12, 52); PA_CreateSprite(UP_SCREEN, UPSCRNUM, (void*) number_Sprite, OBJ_SIZE_32X32, TRUE, NUM_PAL, 30, 58); PA_SetSpriteAnim (UP_SCREEN, UPSCRNUM, 10); PA_CreateSprite(UP_SCREEN, UPSCRNUM+1, (void*) number_Sprite, OBJ_SIZE_32X32, TRUE, NUM_PAL, 55, 58); PA_CreateSprite(UP_SCREEN, UPSCRNUM+2, (void*) number_Sprite, OBJ_SIZE_32X32, TRUE, NUM_PAL, 80, 58); PA_StartSpriteAnim(UP_SCREEN,UPSCRBODY,8, 10, 3); while (1) { PA_SetSpriteAnim (UP_SCREEN, UPSCRNUM+1, length/10); PA_SetSpriteAnim (UP_SCREEN, UPSCRNUM+2, length%10); vTaskDelay(MSEC2TICK(100)); } }
void initMap(mapTile map[][MAX_MAP_Y_LENGTH]) { //int count=0; int i, j, wallCount=0; PA_LoadSpritePal(DOWN_SCREEN, FIRE_PAL, (void*) fire_Pal); for (i = 0; i < MAX_MAP_X_LENGTH; i++) for (j = 0; j < MAX_MAP_Y_LENGTH; j++) { map[i][j].x = i * BOX_X_SIZE; map[i][j].y = j * BOX_Y_SIZE; map[i][j].state = MAP_STATE_NULL; if (i == 0 || i == (MAX_MAP_X_LENGTH - 1) || j == 0 || j == (MAX_MAP_Y_LENGTH - 1)) { map[i][j].state = MAP_STATE_WALL; PA_CreateSprite(DOWN_SCREEN, FIRE + wallCount, (void*) fire_Sprite, OBJ_SIZE_16X16, TRUE, FIRE_PAL, map[i][j].x, map[i][j].y); PA_StartSpriteAnim(DOWN_SCREEN, FIRE + wallCount, 0, 3, ((i+j)%6)+1); wallCount++; } } }
// Main function int main(void) { // PAlib init PA_Init(); PA_InitVBL(); PA_InitText(1, 0); PA_LoadSpritePal(0, 0, (void*)sprite0_Pal); // Palette.... s32 x = 120; s32 y = 64; PA_CreateSprite(0, 0,(void*)som_Sprite, OBJ_SIZE_16X32,1, 0, x, y); // Sprite while(1) { // Animation code... if(Pad.Newpress.Up) PA_StartSpriteAnim(0, 0, 0, 3, 4); if(Pad.Newpress.Down) PA_StartSpriteAnim(0, 0, 8, 11, 4); if(Pad.Newpress.Right) { PA_StartSpriteAnim(0, 0, 4, 7, 4); PA_SetSpriteHflip(0, 0, 0); } if(Pad.Newpress.Left) { PA_StartSpriteAnim(0, 0, 4, 7, 4); PA_SetSpriteHflip(0, 0, 1); } if(!((Pad.Held.Left)||(Pad.Held.Up)||(Pad.Held.Down)||(Pad.Held.Right))) PA_SpriteAnimPause(0, 0, 1); // Moving Code y += Pad.Held.Down - Pad.Held.Up; x += Pad.Held.Right - Pad.Held.Left; PA_SetSpriteXY(0, 0, x, y); PA_WaitForVBL(); } return 0; }
CDeck::CDeck(void) { PA_LoadSpritePal(1, PALETTE_NB_CARD, (void*)card_Pal); PA_CreateSprite(1, SPRITE_NB_BACKCARD_PART1, (void*)backcard_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_CARD, 67, 1); PA_CloneSprite(1, SPRITE_NB_BACKCARD_PART2, SPRITE_NB_BACKCARD_PART1); PA_SetSpriteVflip(1, SPRITE_NB_BACKCARD_PART2, 1); PA_SetSpriteXY(1, SPRITE_NB_BACKCARD_PART2, 67, 1+26); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)emptycard_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_CARD, 129, 1); PA_CloneSprite(1, SPRITE_NB_EMPTYCARD_PART2, SPRITE_NB_EMPTYCARD_PART1); PA_SetSpriteVflip(1, SPRITE_NB_EMPTYCARD_PART2, 1); PA_SetSpriteXY(1, SPRITE_NB_EMPTYCARD_PART2, 129, 1+26); PA_SetSpritePrio (1, SPRITE_NB_BACKCARD_PART1, 2); PA_SetSpritePrio (1, SPRITE_NB_BACKCARD_PART2, 2); PA_SetSpritePrio (1, SPRITE_NB_EMPTYCARD_PART1, 2); PA_SetSpritePrio (1, SPRITE_NB_EMPTYCARD_PART2, 2); }
portTASK_FUNCTION(Item_Task, pvParameters ) { int i,j; u8 itemOnMap; portTickType xLastWakeTime = xTaskGetTickCount(); portTickType rand; PA_LoadSpritePal(DOWN_SCREEN, ITEM_PAL, (void*)ITEM_Pal); while(1) { if(length<MAX_BODY_LENGTH) { int itemOnMap = FALSE; for(i=0; i<MAX_MAP_X_LENGTH; i++) for(j=0; j<MAX_MAP_Y_LENGTH; j++) if(map[i][j].state==MAP_STATE_ITEM) itemOnMap = TRUE; if(itemOnMap==FALSE) { u8 x; u8 y; do{ x = xTaskGetTickCount()%MAX_MAP_X_LENGTH; y = xTaskGetTickCount()%MAX_MAP_Y_LENGTH; }while((map[x][y].state!=MAP_STATE_NULL)|| (x==1) || x==(MAX_MAP_X_LENGTH-2) || (y==1) || y==(MAX_MAP_Y_LENGTH-2)); map[x][y].state = MAP_STATE_ITEM; PA_CreateSprite(DOWN_SCREEN, ITEM, (void*)ITEM_Sprite, OBJ_SIZE_32X16, TRUE, ITEM_PAL, map[x][y].x-8, map[x][y].y); rand = xTaskGetTickCount(); rand = (rand%2)*2; //0 or 2 PA_StartSpriteAnim(DOWN_SCREEN, ITEM, rand, rand+1, 1); map[x][y].itemSpriteNum = ITEM; } } vTaskDelayUntil(&xLastWakeTime, MSEC2TICK(5555)); } }
int main(void){ PA_Init(); //PAlib inits PA_InitVBL(); PA_LoadSpritePal(0, // Screen 0, // Palette number (void*)sprite0_Pal); // Palette name // We'll create 2 sprites PA_CreateSprite(0, 0, (void*)mollusk_Sprite, OBJ_SIZE_32X32, 1, 0, 0, 50); PA_CreateSprite(0, 1, (void*)mollusk_Sprite, OBJ_SIZE_32X32, 1, 0, 64, 50); PA_SetSpriteMode(0, // Screen 0, // Sprite 1); // Alphablending s16 alpha = 7; // Transparency level // Enable the alpha-blending PA_EnableSpecialFx(0, // Screen SFX_ALPHA, // Alpha blending mode 0, // Nothing SFX_BG0 | SFX_BG1 | SFX_BG2 | SFX_BG3 | SFX_BD); // Everything normal while(1) // Infinite loops { alpha += Pad.Newpress.Up - Pad.Newpress.Down; PA_SetSFXAlpha(0, // Screen alpha, // Alpha level, 0-15 15); // Leave this to 15 PA_WaitForVBL(); } return 0; }
void dropshipCreate(mapTile map[][MAX_MAP_Y_LENGTH]){ u8 i, j; u8 x, y; for(i=0; i<fireCount; i++) PA_DeleteSprite(DOWN_SCREEN, FIREINMAP + i); for(i=0; i<MAX_MAP_X_LENGTH; i++) for(j=0; j<MAX_MAP_Y_LENGTH; j++) { if (i != 0 && i != (MAX_MAP_X_LENGTH - 1) && j != 0 && j != (MAX_MAP_Y_LENGTH - 1)) map[i][j].state = MAP_STATE_NULL; } x = MAX_MAP_X_LENGTH / 2 - 2; y = MAX_MAP_Y_LENGTH / 2 - 2; PA_LoadSpritePal(DOWN_SCREEN, DROPSHIP_PAL, (void*) dropship_Pal); PA_CreateSprite(DOWN_SCREEN, DROPSHIP, (void*) dropship_Sprite, OBJ_SIZE_64X64, TRUE, DROPSHIP_PAL, map[x][y].x, map[x][y].y); PA_StartSpriteAnimEx (DOWN_SCREEN, DROPSHIP, 0, 4, 3, ANIM_UPDOWN, -1); for(i=1; i<3; i++) for(j=1; j<3; j++) map[x+i][y+j].state = MAP_STATE_EXIT; AS_SoundQuickPlay(dropship); }
int main(void){ PA_Init(); PA_InitVBL(); PA_InitText(1,0); // On the top screen PA_LoadSpritePal(0, 0, (void*)sprite0_Pal); PA_CreateSprite(0, 0,(void*)vaisseau_Sprite, OBJ_SIZE_32X32,1, 0, 128-16, 96-16); // Create the ship in the center... PA_SetSpriteRotEnable(0,0,0);// Enable rotations and use Rotset 0... s32 x = (128) << 8; // ship x position in 8bit fixed point s32 y = (96) << 8; // Y u16 angle = 0; // direction in which to move ! while(1) { angle = PA_GetAngle(x>>8, y>>8, Stylus.X, Stylus.Y); PA_SetRotsetNoZoom(0, 0, angle); // Turn the ship in the correct direction if (Stylus.Held){ // Move forward x += PA_Cos(angle); y -= PA_Sin(angle); } PA_OutputText(1, 5, 10, "Angle : %d ", angle); PA_SetSpriteXY(0, 0, (x>>8)-16, (y>>8)-16); // Sprite position converted to normal... PA_WaitForVBL(); } return 0; }
int main() { int heroX=0; srand(time(NULL)); Dong dong1={rand()%255,0}; Dong dong2={rand()%255,0}; Dong dong3={rand()%255,0}; Dong dong4={rand()%255,0}; Dong dong5={rand()%255,0}; Dong dong6={rand()%255,0}; Dong dong7={rand()%255,0}; PA_Init(); // Initializes PA_Lib PA_InitVBL(); // Initializes a standard VBL PA_InitSound(); PA_PlayMod(modfile); // Infinite loop to keep the program running while (1) { int score=0; static int scoreRank1=0, scoreRank2=0, scoreRank3=0; PA_EasyBgLoad(UP_SCREEN, BG2, mainup); PA_EasyBgLoad(DOWN_SCREEN, BG2, Menu); int selnum=0; selnum = sel_menu(); if(selnum == 1){ GAMESTART: //�������� PA_EasyBgLoad(UP_SCREEN, BG2, backgroundUp); PA_EasyBgLoad(DOWN_SCREEN, BG2, backgroundDown); PA_WaitForVBL(); //ij���� ���� PA_LoadSpritePal(DOWN_SCREEN,0,(void*)frames_Pal); PA_CreateSprite(DOWN_SCREEN,0,(void*)frames_Sprite, OBJ_SIZE_16X32, 1, 0, 128-16, 192-32); PA_DualLoadSpritePal(2,(void*)dong_Pal); PA_DualLoadSpritePal(3,(void*)dong_Pal); PA_DualLoadSpritePal(4,(void*)dong_Pal); PA_DualLoadSpritePal(5,(void*)dong_Pal); PA_DualLoadSpritePal(6,(void*)dong_Pal); PA_DualLoadSpritePal(7,(void*)dong_Pal); PA_DualLoadSpritePal(8,(void*)dong_Pal); PA_DualCreateSprite(2,(void*)dong_Sprite, OBJ_SIZE_16X16,1,2,0,0); PA_DualCreateSprite(3,(void*)dong_Sprite, OBJ_SIZE_16X16,1,3,0,0); PA_DualCreateSprite(4,(void*)dong_Sprite, OBJ_SIZE_16X16,1,4,0,0); PA_DualCreateSprite(5,(void*)dong_Sprite, OBJ_SIZE_16X16,1,5,0,0); PA_DualCreateSprite(6,(void*)dong_Sprite, OBJ_SIZE_16X16,1,6,0,0); PA_DualCreateSprite(7,(void*)dong_Sprite, OBJ_SIZE_16X16,1,6,0,0); PA_DualCreateSprite(8,(void*)dong_Sprite, OBJ_SIZE_16X16,1,6,0,0); /* �ؽ�Ʈ ���� �κ� */ PA_InitText(UP_SCREEN, BG0); PA_SetTextTileCol(UP_SCREEN, 9); PA_OutputText(DOWN_SCREEN, 1, 21, "test"); //PA_DualSetSpriteAnim(2,2); //PA_DualSetSpriteAnim(3,3); while(true){ if(Pad.Held.Right && heroX<256-16){ PA_SetSpriteAnim(0,0,1); heroX+=10; } if(Pad.Held.Left && heroX>0){ PA_SetSpriteAnim(0,0,3); heroX-=10; } PA_SetSpriteXY(DOWN_SCREEN,0,heroX,192-32); PA_WaitForVBL(); //--------------------------------------------------------------- dong1.y+=10; if(dong1.y>410){ score+=100; dong1.y=0; dong1.x =rand()%255; } dong2.y+=11; if(dong2.y>410){ score+=100; dong2.y=0; dong2.x =rand()%255; } dong3.y+=12; if(dong3.y>410){ score+=100; dong3.y=0; dong3.x =rand()%255; } dong4.y+=13; if(dong4.y>410){ score+=100; dong4.y=0; dong4.x =rand()%255; } dong5.y+=14; if(dong5.y>410){ score+=100; dong5.y=0; dong5.x =rand()%255; } dong6.y+=15; if(dong6.y>410){ score+=100; dong6.y=0; dong6.x =rand()%255; } dong7.y+=16; if(dong7.y>410){ score+=100; dong7.y=0; dong7.x =rand()%255; } PA_OutputText(UP_SCREEN, 0, 0, "score = %d",score); PA_WaitForVBL(); PA_DualSetSpriteXY(2,dong1.x,dong1.y); PA_WaitForVBL(); PA_DualSetSpriteXY(3,dong2.x,dong2.y); PA_WaitForVBL(); PA_DualSetSpriteXY(4,dong3.x,dong3.y); PA_WaitForVBL(); PA_DualSetSpriteXY(5,dong4.x,dong4.y); PA_WaitForVBL(); PA_DualSetSpriteXY(6,dong5.x,dong5.y); PA_WaitForVBL(); PA_DualSetSpriteXY(7,dong6.x,dong6.y); PA_WaitForVBL(); PA_DualSetSpriteXY(8,dong7.x,dong7.y); if(dong1.y>390 && (heroX+16)>dong1.x && heroX<(dong1.x+16)) break; if(dong2.y>390 && (heroX+16)>dong2.x && heroX<(dong2.x+16)) break; if(dong3.y>390 && (heroX+16)>dong3.x && heroX<(dong3.x+16)) break; if(dong4.y>390 && (heroX+16)>dong4.x && heroX<(dong4.x+16)) break; if(dong5.y>390 && (heroX+16)>dong5.x && heroX<(dong5.x+16)) break; if(dong6.y>390 && (heroX+16)>dong6.x && heroX<(dong6.x+16)) break; if(dong7.y>390 && (heroX+16)>dong7.x && heroX<(dong7.x+16)) break; } PA_WaitForVBL(); PA_EasyBgLoad(UP_SCREEN, BG2, gameoverUp); //����ȭ�� gameover PA_EasyBgLoad(DOWN_SCREEN, BG2, gameoverDown); //����ȭ�� gameover PA_DeleteSprite(DOWN_SCREEN, 0); //���� ������ PA_DualDeleteSprite(2); //�������� PA_DualDeleteSprite(3); //�������� PA_DualDeleteSprite(4); //�������� PA_DualDeleteSprite(5); //�������� PA_DualDeleteSprite(6); //�������� PA_DualDeleteSprite(7); //�������� PA_DualDeleteSprite(8); //�������� PA_InitText(UP_SCREEN, BG0); //�ؽ�Ʈ �ʱ�ȭ PA_SetTextTileCol(UP_SCREEN, 9); //�ؽ�Ʈ �� ������ ���� PA_OutputText(UP_SCREEN, 10, 13, "score = %d",score); ret_next(); //�Է´��� //--------�ʱ�ȭ if(score>=scoreRank1){ //1�� scoreRank3=scoreRank2; scoreRank2=scoreRank1; scoreRank1=score; } else if(score>=scoreRank2){//2�� scoreRank3=scoreRank2; scoreRank2=score; } else if(score>=scoreRank3){//3�� scoreRank3=score; } score=0; dong1.x=rand()%255; dong1.y=0; dong2.x=rand()%255; dong2.y=0; dong3.x=rand()%255; dong3.y=0; dong4.x=rand()%255; dong4.y=0; dong5.x=rand()%255; dong5.y=0; dong6.x=rand()%255; dong4.y=0; dong7.x=rand()%255; dong5.y=0; PA_InitText(UP_SCREEN, BG0); //�ؽ�Ʈ �ʱ�ȭ PA_WaitForVBL(); } else if(selnum == 2){ //��ũ ȭ�� PA_WaitForVBL(); PA_EasyBgLoad(UP_SCREEN, BG2, rankingUp); //����ȭ�� rankingUp PA_EasyBgLoad(DOWN_SCREEN, BG2, rankingDown); //����ȭ�� rankingDown PA_InitText(UP_SCREEN, BG0); //�ؽ�Ʈ �ʱ�ȭ PA_SetTextTileCol(UP_SCREEN, 9); //�ؽ�Ʈ �� ������ ���� PA_OutputText(UP_SCREEN, 10, 13, "Rank 1! = %d",scoreRank1); PA_OutputText(UP_SCREEN, 10, 15, "Rank 2! = %d",scoreRank2); PA_OutputText(UP_SCREEN, 10, 17, "Rank 3! = %d",scoreRank3); ret_next(); //�Է´��� PA_InitText(UP_SCREEN, BG0); //�ؽ�Ʈ �ʱ�ȭ goto GAMESTART; } else ; PA_WaitForVBL(); } return 0; }
int main(){ // Initialisation de la PAlib de l'affichage et du son PA_Init(); // Initialisation de la PALib PA_InitVBL(); // Initialisation de l'affichage AS_Init(AS_MODE_16CH); //son AS_SetDefaultSettings(AS_PCM_8BIT, 16384, 0); //son (type,rate) splash(); //Splashscreen // Initialisation du texte PA_LoadDefaultText(0, 0); //bas PA_LoadDefaultText(1, 0); //haut PA_SetTextTileCol(1, TEXT_BLACK); // texte en noir (haut) PA_SetTextTileCol(0, TEXT_BLACK); // texte en noir (bas) //Palettes des couleurs pour les sprites des boutons (une seule suffit) (numéro 1) PA_LoadSpritePal(0, 1, (void*)plus_Pal); PA_LoadBackground(1, 1, &titre); // background de l'écran du haut //Accueil AS_SoundDefaultPlay(pinball, pinball_size, 127, 64, true, 0); //musique de fond en boucle fonduentree(); //fondu d'entrée if(PA_UserInfo.Language == 2) { PA_LoadBackground(0, 1, &jouer); } else { PA_LoadBackground(0, 1, &play); } PA_OutputText(1, 17, 8, "2.1"); //version PA_WaitFor(Pad.Newpress.Anykey || Stylus.Newpress); AS_SoundQuickPlay(clic); fondusortie(); //Nouvelle partie : etiquette et reset debut: PA_ClearTextBg(0); //efface tout le texte PA_ResetSpriteSys(); //efface tout les sprites PA_OutputText(1,1,22," "); // Les variables u32 nmax = 0; //Nombre maximal u32 nmin = 0; //Nombre minimal u32 coup = 0; //Nombre de coups u32 nombre = 0; //Nombre (valeur de départ) u32 diff = 0; u32 temps = 0; //Sélection de la difficulté. fonduentree(); PA_LoadBackground(0, 1, &niveau); while(1) { if(PA_UserInfo.Language == 2) { PA_OutputText(0,5,4,"Facile (B)"); PA_OutputText(0,5,5,"(entre 10 et 25)"); PA_OutputText(0,5,11,"Normal (Y)"); PA_OutputText(0,5,12,"(entre 10 et 60)"); PA_OutputText(0,5,18,"Difficile (X)"); PA_OutputText(0,5,19,"(entre 10 et 95)"); } else { PA_OutputText(0,5,4,"Easy (B)"); PA_OutputText(0,5,5,"(between 10 and 25)"); PA_OutputText(0,5,11,"Normal (Y)"); PA_OutputText(0,5,12,"(between 10 and 60)"); PA_OutputText(0,5,18,"Hard (X)"); PA_OutputText(0,5,19,"(between 10 and 95)"); } if((PA_StylusInZone(29, 21, 227, 57) && Stylus.Newpress) || Pad.Newpress.A) { nombre = 12; nmax = 25; nmin = 10; diff = 1; break; } if((PA_StylusInZone(29, 79, 227, 115) && Stylus.Newpress) || Pad.Newpress.A) { nombre = 35; nmax = 60; nmin = 10; diff = 2; break; } if((PA_StylusInZone(29, 135, 227, 170) && Stylus.Newpress) || Pad.Newpress.A) { nombre = 52; nmax = 95; nmin = 10; diff = 3; break; } PA_WaitForVBL(); } u32 dsnum = PA_RandMinMax(nmin, nmax); //La valeur aléatoire entre 40 et 70 PA_LoadBackground(0, 1, &jeu); //chargement du bg de jeu //Reset pour effacer l'écran de choix de la difficulté PA_ClearTextBg(0); //Bouton + - et +5 -5 PA_CreateSprite(0, 0, (void*)plus_Sprite, OBJ_SIZE_32X32, 1, 1, 40, 33); PA_CreateSprite(0, 1, (void*)moins_Sprite, OBJ_SIZE_32X32, 1, 1, 40, 110); PA_CreateSprite(0, 2, (void*)okb_Sprite, OBJ_SIZE_32X32, 1, 1, 218, 157); PA_CreateSprite(0, 4, (void*)moins5_Sprite, OBJ_SIZE_32X32, 1, 1, 75, 110); PA_CreateSprite(0, 5, (void*)plus5_Sprite, OBJ_SIZE_32X32, 1, 1, 75, 33); // Boucle principale PA_VBLCounterStart(0); while (1) { PA_OutputText(0,8,22,"%d", coup); //PA_OutputText(1,1,20,"La DS pense à : %d", dsnum); // Débug //PA_OutputText(1,1,19,"Temps : %d", PA_VBLCounter[0]/60); // Débug if(PA_UserInfo.Language == 2) { if(diff == 1) { PA_OutputText(1,1,22,"Facile (entre %d et %d)",nmin, nmax); } if(diff == 2) { PA_OutputText(1,1,22,"Normal (entre %d et %d)",nmin, nmax); } if(diff == 3) { PA_OutputText(1,1,22,"Difficile (entre %d et %d)",nmin, nmax); } } else { if(diff == 1) { PA_OutputText(1,1,22,"Easy (between %d and %d)",nmin, nmax); } if(diff == 2) { PA_OutputText(1,1,22,"Normal (between %d and %d)",nmin, nmax); } if(diff == 3) { PA_OutputText(1,1,22,"Hard (between %d and %d)",nmin, nmax); } } if(PA_UserInfo.Language == 2) { PA_OutputText(0,4,10,"Votre nombre:"); } else { PA_OutputText(0,4,10,"Your number:"); } PA_OutputText(0,4,12,"%d", nombre); if(PA_UserInfo.Language == 2) { PA_OutputText(0,1,22,"Coups:"); } else { PA_OutputText(0,1,22,"Tries:"); } if(Pad.Newpress.Up || (Stylus.Newpress && PA_SpriteTouched(0))) { nombre++; AS_SoundQuickPlay(clic); } if(Pad.Newpress.Down || (Stylus.Newpress && PA_SpriteTouched(1))) { nombre--; AS_SoundQuickPlay(clic); } if(Pad.Newpress.Left || (Stylus.Newpress && PA_SpriteTouched(4))) { nombre = nombre - 5; AS_SoundQuickPlay(clic); } if(Pad.Newpress.Right || (Stylus.Newpress && PA_SpriteTouched(5))) { nombre = nombre + 5; AS_SoundQuickPlay(clic); } if(nombre < nmin) { nombre = nmin; } if(nombre > nmax) { nombre = nmax; } if((PA_SpriteTouched(2) && Stylus.Newpress) || Pad.Newpress.A) { coup++; AS_SoundQuickPlay(clic); if (dsnum > nombre) { PA_OutputText(0,25,11," "); PA_OutputText(0,25,11,"Plus !"); } if (dsnum < nombre) { PA_OutputText(0,25,11," "); if(PA_UserInfo.Language == 2) { PA_OutputText(0,25,11,"Moins !"); } else { PA_OutputText(0,25,11,"Minus !"); } } if (dsnum == nombre) { temps = PA_VBLCounter[0]/60; PA_WaitFor(Stylus.Released || Pad.Released.A); PA_ResetSpriteSys(); PA_LoadBackground(0, 1, &gagne); PA_ClearTextBg(0); //efface tout le texte AS_SoundQuickPlay(ok); //Smiley qui applaudit PA_LoadSpritePal(0, 0, (void*)applaudissement_Pal); // la palette du smiley (num 0) PA_CreateSprite(0, 3,(void*)applaudissement_Sprite, OBJ_SIZE_32X32,1, 0, 180, 45); PA_StartSpriteAnimEx(0, 3, 0, 4, 12, ANIM_LOOP, 7); if(PA_UserInfo.Language == 2) { PA_OutputText(0,15,6,"Gagné !"); PA_OutputText(0,6,8,"Vous avez trouvé %d", dsnum); PA_OutputText(0,6,9,"en %d secondes", temps); PA_OutputText(0,6,10,"et %d coups.", coup); PA_OutputText(0,6,16,"START ou touchez"); PA_OutputText(0,6,17,"l'écran pour rejouer."); } else { PA_OutputText(0,15,6,"Win !"); PA_OutputText(0,6,9,"You find %d", dsnum); PA_OutputText(0,6,10,"in %d seconds", temps); PA_OutputText(0,6,11,"and %d tests. ", coup); PA_OutputText(0,6,15,"START or touch"); PA_OutputText(0,6,16,"the screen to replay."); } //Recommencer le jeu avec l'etiquette debut PA_WaitFor(Stylus.Newpress || Pad.Newpress.Start); AS_SoundQuickPlay(clic); goto debut; } } PA_WaitForVBL(); //Rafraichissement à ne pas bouger/enlever } return 0; }
portTASK_FUNCTION(Unit_Task, pvParameters ) { body bd[MAX_BODY_LENGTH]; int i; u8 x = 5; u8 y = 5; unit.x = 5; unit.y = 5; u8 pfx; u8 pfy; u8 pfDirection; u8 tempx; u8 tempy; u8 tempDirection; unit.direction = D_DOWN; portTickType xLastWakeTime = xTaskGetTickCount(); PA_LoadSpritePal(DOWN_SCREEN, C_PAL, (void*) C_Pal); PA_LoadSpritePal(DOWN_SCREEN, BODY_PAL, (void*) man_Pal); PA_CreateSprite(DOWN_SCREEN, C, (void*) C_Sprite, OBJ_SIZE_32X32, TRUE, C_PAL, map[unit.x][unit.y].x-8, map[unit.x][unit.y].y-16); while (1) { x = unit.x; y = unit.y; switch (unit.direction) { case D_UP: y--; break; case D_DOWN: y++; break; case D_LEFT: x--; break; case D_RIGHT: x++; break; default: break; } if ((map[x][y].state == MAP_STATE_NULL) || (map[x][y].state == MAP_STATE_ITEM)) { pfx = unit.x; pfy = unit.y; pfDirection = unit.direction; if ((map[x][y].state == MAP_STATE_ITEM)) { if (length < MAX_BODY_LENGTH) // to max length { length++; fireCreate(map); } if (length == MAX_BODY_LENGTH) { dropshipCreate(map); } map[x][y].state = MAP_STATE_NULL; PA_StopSpriteAnim(DOWN_SCREEN,map[x][y].itemSpriteNum); PA_DeleteSprite(DOWN_SCREEN, map[x][y].itemSpriteNum); PA_CreateSprite(DOWN_SCREEN, BODY + (length-1), (void*) man_Sprite, OBJ_SIZE_16X32, TRUE, BODY_PAL, 0, 0); } unit.x = x; unit.y = y; PA_SetSpriteXY(DOWN_SCREEN, C, map[unit.x][unit.y].x - 8, map[unit.x][unit.y].y - 16); for (i = 0; i < length; i++) { tempx = bd[i].x; tempy = bd[i].y; tempDirection = bd[i].direction; map[tempx][tempy].state = MAP_STATE_NULL; bd[i].x = pfx; bd[i].y = pfy; map[pfx][pfy].state = MAP_STATE_C_BODY; bd[i].direction = pfDirection; pfx = tempx; pfy = tempy; pfDirection = tempDirection; PA_SetSpriteXY(DOWN_SCREEN, BODY + i, map[bd[i].x][bd[i].y].x, (map[bd[i].x][bd[i].y].y)-16); if(pfDirection!=bd[i].direction) PA_StartSpriteAnim(DOWN_SCREEN, BODY + i, bd[i].direction, bd[i].direction+2, 7); } } if((map[x][y].state == MAP_STATE_WALL) || map[x][y].state == MAP_STATE_C_BODY) //실패 { AS_SoundQuickPlay(die); PA_ResetSpriteSys (); PA_ResetBgSysScreen (DOWN_SCREEN); PA_LoadBackground(DOWN_SCREEN, 3, &FAILSCREEN); vTaskSuspend(NULL); } if(map[x][y].state == MAP_STATE_EXIT) //클리어 { PA_ResetSpriteSys (); PA_ResetBgSysScreen (DOWN_SCREEN); PA_LoadBackground(DOWN_SCREEN, 3, &CLEARSCREEN); vTaskSuspend(NULL); } vTaskDelayUntil(&xLastWakeTime, MSEC2TICK(300-(length*10)) ); } }
//------------------------------------------------------------ //------------------------------------------------------------ static int l_SpriteLoadPalette(lua_State * lState) { const int nScreenNum = luaL_checkint(lState, 1); const int nPaletteNum = luaL_checkint(lState, 2); const char * szFName = luaL_checkstring(lState, 3); unsigned int nSize; // check parameters if((nScreenNum < 0) || (nScreenNum > 1)) { return luaL_error(lState, "Use 0 for bottom screen and 1 for top screen"); } if((nPaletteNum < 0) || (nPaletteNum > 15)) { return luaL_error(lState, "Palette number has to be 0 through 15"); } // open palette file in binary mode FILE * dsfPal = fopen(szFName, "rb"); if(NULL == dsfPal) { return luaL_error(lState, "Failed to open palette file '%s'", szFName); } // check file size nSize = getFileSize(dsfPal); if((nSize < 1) || (nSize % 2)) { fclose(dsfPal); return luaL_error(lState, "Incorrect palette file size: %d", nSize); } // load palette into memroy // char *cbTemp = new char[ nSize ]; // char *cbTemp = ( char* )malloc( nSize ); AlignedMemory * amMem = new AlignedMemory(5, nSize); char * cbTemp = (char *)(amMem->vpAlignedMem); size_t nRead; #ifdef DEBUG char szTemp[64]; sprintf(szTemp, "P:%p (%p)", cbTemp, amMem->vpRealMem); SimpleConsolePrintStringCR(SCREEN_TOP, szTemp); #endif //DEBUG // make sure we have a valid pointer if(NULL == cbTemp) { fclose(dsfPal); return luaL_error(lState, "Unable to allocate %d bytes for palette memory", nSize); } // init the memory acquired and read in the data // memset( cbTemp, 0, nSize ); // int i; // cbTemp[0] = 0; // cbTemp[1] = 0; // for ( i=1;i<256; ++i ) { // cbTemp[i<<1] = 0x7F; // cbTemp[(i<<1)+1] = 0x7F; // } nRead = fread(cbTemp, 1, nSize, dsfPal); // make sure we read in something if(nRead != nSize) { // free( cbTemp ); delete (amMem); fclose(dsfPal); return luaL_error(lState, "Can only read in %d bytes of palette data", nRead); } // set palette // PA_LoadSpritePal( nScreenNum, nPaletteNum, ( void* )( &tempBuffer[0] ) ); // waitVBLDelay( 10 ); waitUntilDMAFree(3); PA_LoadSpritePal(nScreenNum, nPaletteNum, (void *)cbTemp); waitUntilDMAFree(3); // for ( i=1;i<256; ++i ) { //assert( cbTemp[i<<1] == 0x7F ); //assert( cbTemp[(i<<1)+1] == 0x7F ); // } // free mem, close the file when we are done // free( cbTemp ); delete (amMem); fclose(dsfPal); return 0; }
void spaceInvaders() { PA_Init(); PA_InitVBL(); PA_InitText(1,0); PA_InitText(0,0); PA_InitSound(); PA_WaitForVBL();PA_WaitForVBL();PA_WaitForVBL(); PA_SetScreenSpace(8); // ESPACE ENTRE LES 2 écrans = 8 pixels !! // des compteurs utilisables dans des boucles int i,cpt; // les constantes pas globales int nbEnnemisMax=50; PA_EasyBgLoad(0,1,espace);//declaration et initialisation du background PA_EasyBgLoad(1,1,espace); // PA_DualLoadPAGfxLargeBg(1,backg); //pour les deux écrans /* INITIALISATION DES PALETTES */ PA_LoadSpritePal(1,0,(void*)sprites_Pal);// //// pour ecran haut PA_LoadSpritePal(0,0,(void*)sprites_Pal);// //// pour ecran bas PA_LoadSpritePal(1,1,(void*)ennemis_Pal);// //// pour ecran haut PA_LoadSpritePal(0,1,(void*)ennemis_Pal);// //// pour ecran bas PA_LoadSpritePal(1,2,(void*)tir_Pal);// //// pour ecran haut PA_LoadSpritePal(0,2,(void*)tir_Pal);// //// pour ecran bas PA_DualLoadSpritePal(0,(void*)sprites_Pal); PA_DualLoadSpritePal(1,(void*)ennemis_Pal); PA_DualLoadSpritePal(2,(void*)tir_Pal); /* INITIALISATION TYPE-SPRITE ET tabParcours */ TypeSprite tabTS[19]; initialisationTableauTypeSpriteGlobal(tabTS); int /*nbEtapes1=6, nbEtapes2= 6, nbEtapes3=6,*/ nbEtapes1Charles=4, nbEtapes2Charles=4, nbEtapes3Charles=6, nbEtapes4Charles=5, /*nbEtapes5Charles=4, nbEtapes6Charles=4, nbEtapes7Charles=5, nbEtapes8Charles=5,*/ nbEtapes9Charles=4, nbEtapes10Charles=4, vitesse1=1, vitesse2=1, vitesse3=1, //tabParcours1[10][4]={{0,0,5,0},{200,0,vitesse1,0},{200,100,vitesse1,0},{50,100,vitesse1,0},{50,20,vitesse1,0},{150,20,vitesse1,0},{30,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, // tab[i][1] == x , tab[i][2] == y , tab[i][3] == vitesse, tab[0][3] = nbPV , tab[i][4] = temps entre i et i+1 //tabParcours2[10][4]={{0,0,5,0},{200,0,vitesse2,0},{200,100,vitesse2,0},{50,100,vitesse2,0},{50,20,vitesse2,0},{150,20,vitesse2,0},{30,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, //tabParcours3[10][4]={{0,0,5,0},{200,0,vitesse3,0},{200,100,vitesse3,0},{50,100,vitesse3,0},{50,20,vitesse3,0},{150,20,vitesse3,0},{30,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, tabParcours1Charles[10][4]={{0,0,5,0},{210,10,vitesse1,0},{210,100,vitesse1,0},{5,100,vitesse1,0},{-30,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, tabParcours2Charles[10][4]={{0,0,5,0},{256,90,vitesse1,0},{15,30,vitesse1,0},{232,30,vitesse1,0},{30,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, tabParcours3Charles[10][4]={{256,128,5,0},{32,128,vitesse1,0},{245,96,vitesse1,0},{130,64,vitesse1,0},{245,32,vitesse1,0},{3,10,vitesse1,0},{-30,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, tabParcours4Charles[10][4]={{3,32,5,0},{190,32,vitesse1,0},{32,64,vitesse1,0},{190,96,vitesse1,0},{3,126,vitesse1,0},{-30,5,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, // tabParcours5Charles[10][4]={{117,0,5,0},{117,325,vitesse1,0},{58,245,vitesse1,0},{10,325,vitesse1,0},{-30,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, // Depart Ligne rouge (117.0) haut de l'écran 1 au centre et fini sa course écran 0 a gauche en son centre (10.325) // tabParcours6Charles[10][4]={{256,325,5,0},{140,325,vitesse1,0},{140,110,vitesse1,0},{205,110,vitesse1,0},{30,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, // Depart Ligne rouge (256.325) de l'Ecran 0 du centre droit et fini sa course ecran 1 au millieu droit (205.110) //tabParcours7Charles[10][4]={{0,258,5,0},{50,180,vitesse1,0},{100,180,vitesse1,0},{100,32,vitesse1,0},{0,32,vitesse1,0},{-30,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, // Depart Ligne bleu (0.258) de l'Ecran 0 du centre gauche et fini sa course ecran 1 en haut a gauche (0.32) //tabParcours8Charles[10][4]={{256,32,5,0},{160,32,vitesse1,0},{160,180,vitesse1,0},{205,180,vitesse1,0},{252,258,vitesse1,0},{30,20,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, // Depart Ligne bleu (256.32) de l'Ecran 1 en haut a droite et fini sa course en haut a droite de l Ecran 0 (252.258) tabParcours9Charles[10][4]={{0,0,5,0},{90,167,vitesse1,0},{220,26,vitesse1,0},{70,167,vitesse1,0},{-30,30,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, // refait pour faire une étoile branche haut droite tabParcours10Charles[10][4]={{256,0,5,0},{152,167,vitesse1,0},{30,26,vitesse1,0},{174,167,vitesse1,0},{30,30,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}; // refait pour faire une étoile branche haut gauche PA_CreateSprite(0,1,(void*)miniTir_Sprite,OBJ_SIZE_32X16,1,0,255,193); PA_SetSpriteXY(0,1,255,193);// un sprite inutile mais qui se prends un bug d'affichage ... // le bug apparait qu'avec le boss et doit venir d'un des trucs touchants aux tirs. Mais impossible à trouver :( /* SPRITE JOUEUR */ // initialisation du Joueur // la position du vaisseau au départ = {x=50} et {y=160} // numEcran = 0 et numSprite = 1 Sprite Joueur; Joueur.numEcran = 0; Joueur.numSprite = 2; Joueur.x=50; Joueur.y=160; Joueur.nbPV=30; Joueur.numEtape=0; Joueur.temps=0; Joueur.typeSprite=&tabTS[11]; // pas de palette pour les sprites 16bits // PA_Create16bitSprite(Joueur.numEcran, // Screen // Joueur.numSprite, // Sprite number // (void*)ship_Sprite, // image to load, 128 pixels wide ! // OBJ_SIZE_32X32, // sprite size // Joueur.x, // x // Joueur.y); //y PA_CreateSprite(Joueur.numEcran,Joueur.numSprite,(void*)ship_Sprite,OBJ_SIZE_32X32,1,0,Joueur.x,Joueur.y); PA_SetSpriteXY(Joueur.numEcran,Joueur.numSprite,(Joueur.x+=50),Joueur.y); // ancien : PA_CreateSprite(Joueur.numEcran,Joueur.numSprite,(void*)yata_Sprite,OBJ_SIZE_32X64,1,0,Joueur.x,Joueur.y); /* ENNEMIS */ int nbEnnemi0=18, nbEnnemi=18, spriteReference=1; // maximum d'ennemis pour écran 0 Sprite tabEnnemi0[nbEnnemisMax], tabEnnemi[nbEnnemisMax]; // tableau d'ennemi, nbEnnemisMax est une constante donner au début du programme cpt=0; PA_WaitForVBL();PA_WaitForVBL(); //* // 45-50 : Crab int nbSpriteDbt=45; for(i=0;i<6;i++) { tabEnnemi0[i].numEcran=0; tabEnnemi0[i].numSprite=(i+nbSpriteDbt); tabEnnemi0[i].x=256; tabEnnemi0[i].y=192; tabEnnemi0[i].nbPV=0; tabEnnemi0[i].numEtape=0; tabEnnemi0[i].temps=0; tabEnnemi0[i].typeSprite=&tabTS[0]; if(i==0) { PA_CreateSprite(tabEnnemi0[i].numEcran,nbSpriteDbt,(void*)Crab_Sprite,OBJ_SIZE_32X32,1,1,tabEnnemi0[i].x,tabEnnemi0[i].y); spriteReference=tabEnnemi0[i].numSprite; } else PA_CloneSprite(tabEnnemi0[i].numEcran,tabEnnemi0[i].numSprite,spriteReference); PA_SetSpriteXY(tabEnnemi0[i].numEcran,tabEnnemi0[i].numSprite,tabEnnemi0[i].x,tabEnnemi0[i].y); PA_StartSpriteAnim(tabEnnemi0[i].numEcran,tabEnnemi0[i].numSprite,0,1,1); } // 51-56 : Octopus for(i=6;i<12;i++) { tabEnnemi0[i].numEcran=0; tabEnnemi0[i].numSprite=(i+nbSpriteDbt); tabEnnemi0[i].x=256; tabEnnemi0[i].y=192; tabEnnemi0[i].nbPV=0; tabEnnemi0[i].numEtape=0; tabEnnemi0[i].temps=0; tabEnnemi0[i].typeSprite=&tabTS[2]; if(i==6) { PA_CreateSprite(tabEnnemi0[i].numEcran,tabEnnemi0[i].numSprite,(void*)Octopus_Sprite,OBJ_SIZE_16X16,1,1,tabEnnemi0[i].x,tabEnnemi0[i].y); spriteReference=tabEnnemi0[i].numSprite; } else PA_CloneSprite(tabEnnemi0[i].numEcran,tabEnnemi0[i].numSprite,spriteReference); PA_SetSpriteXY(tabEnnemi0[i].numEcran,tabEnnemi0[i].numSprite,tabEnnemi0[i].x,tabEnnemi0[i].y); PA_StartSpriteAnim(tabEnnemi0[i].numEcran,tabEnnemi0[i].numSprite,0,1,1); } // 57-62 : Squid for(i=12;i<nbEnnemi0;i++) { tabEnnemi0[i].numEcran=0; tabEnnemi0[i].numSprite=(i+nbSpriteDbt); tabEnnemi0[i].x=256; tabEnnemi0[i].y=192; tabEnnemi0[i].nbPV=0; tabEnnemi0[i].numEtape=0; tabEnnemi0[i].temps=0; tabEnnemi0[i].typeSprite=&tabTS[4]; if(i==12) { PA_CreateSprite(tabEnnemi0[i].numEcran,tabEnnemi0[i].numSprite,(void*)Squid_Sprite,OBJ_SIZE_32X32,1,1,tabEnnemi0[i].x,tabEnnemi0[i].y); spriteReference=tabEnnemi0[i].numSprite; } else PA_CloneSprite(tabEnnemi0[i].numEcran,tabEnnemi0[i].numSprite,spriteReference); PA_SetSpriteXY(tabEnnemi0[i].numEcran,tabEnnemi0[i].numSprite,tabEnnemi0[i].x,tabEnnemi0[i].y); PA_StartSpriteAnim(tabEnnemi0[i].numEcran,tabEnnemi0[i].numSprite,0,1,1); } //*/ // ecran -1 // 63-68 : Crab int nbSpriteDbt2=63; i=0; for(i=0;i<6;i++) { tabEnnemi[i].numEcran=-1; tabEnnemi[i].numSprite=(i+nbSpriteDbt2); tabEnnemi[i].x=256; tabEnnemi[i].y=392; tabEnnemi[i].nbPV=0; tabEnnemi[i].numEtape=0; tabEnnemi[i].temps=0; tabEnnemi[i].typeSprite=&tabTS[0]; if(i==0) { PA_DualCreateSprite(nbSpriteDbt2,(void*)Crab_Sprite,OBJ_SIZE_32X32,1,1,tabEnnemi[i].x,tabEnnemi[i].y); spriteReference=tabEnnemi[i].numSprite; } else PA_DualCloneSprite(tabEnnemi[i].numSprite,nbSpriteDbt2); PA_DualSetSpriteXY(tabEnnemi[i].numSprite,tabEnnemi[i].x,tabEnnemi[i].y); PA_DualStartSpriteAnim(tabEnnemi[i].numSprite,0,1,1); } // 69-74 : Octopus for(i=6;i<12;i++) { tabEnnemi[i].numEcran=-1; tabEnnemi[i].numSprite=(i+nbSpriteDbt2); tabEnnemi[i].x=256; tabEnnemi[i].y=392; tabEnnemi[i].nbPV=0; tabEnnemi[i].numEtape=0; tabEnnemi[i].temps=0; tabEnnemi[i].typeSprite=&tabTS[2]; if(i==6) { PA_DualCreateSprite(tabEnnemi[i].numSprite,(void*)Octopus_Sprite,OBJ_SIZE_16X16,1,1,tabEnnemi[i].x,tabEnnemi[i].y); spriteReference=tabEnnemi[i].numSprite; } else PA_DualCloneSprite(tabEnnemi[i].numSprite,spriteReference); PA_DualSetSpriteXY(tabEnnemi[i].numSprite,tabEnnemi[i].x,tabEnnemi[i].y); PA_DualStartSpriteAnim(tabEnnemi[i].numSprite,0,1,1); } // 75-80 : Squid for(i=12;i<nbEnnemi;i++) { tabEnnemi[i].numEcran=-1; tabEnnemi[i].numSprite=(i+nbSpriteDbt2); tabEnnemi[i].x=256; tabEnnemi[i].y=392; tabEnnemi[i].nbPV=0; tabEnnemi[i].numEtape=0; tabEnnemi[i].temps=0; tabEnnemi[i].typeSprite=&tabTS[4]; if(i==12) { PA_DualCreateSprite(tabEnnemi[i].numSprite,(void*)Squid_Sprite,OBJ_SIZE_32X32,1,1,tabEnnemi[i].x,tabEnnemi[i].y); spriteReference=tabEnnemi[i].numSprite; } else PA_DualCloneSprite(tabEnnemi[i].numSprite,spriteReference); PA_DualSetSpriteXY(tabEnnemi[i].numSprite,tabEnnemi[i].x,tabEnnemi[i].y); PA_DualStartSpriteAnim(tabEnnemi[i].numSprite,0,1,1); } //PA_CreateSprite(0,102,(void*)Squid_Sprite,OBJ_SIZE_32X32,1,0,110,100); //PA_StartSpriteAnim(0,100,0,1,1); //PA_StartSpriteAnim(0,101,0,1,1); //PA_StartSpriteAnim(0,102,0,1,1); //* // boss test Boss boss; boss.nombredeSprite=4; boss.sprite1.numEcran=-1; boss.sprite1.numSprite=124; boss.sprite1.x=-124; boss.sprite1.y=0; boss.sprite1.typeSprite=&tabTS[15]; boss.sprite2.numEcran=-1; boss.sprite2.numSprite=125; boss.sprite2.x=-64; boss.sprite2.y=0; boss.sprite2.typeSprite=&tabTS[16]; boss.sprite3.numEcran=-1; boss.sprite3.numSprite=126; boss.sprite3.x=-124; boss.sprite3.y=32; boss.sprite3.typeSprite=&tabTS[17]; boss.sprite4.numEcran=-1; boss.sprite4.numSprite=127; boss.sprite4.x=-64; boss.sprite4.y=32; boss.sprite4.typeSprite=&tabTS[18]; boss.typeTir=0; boss.typeTir2=2; //origine des tirs boss.origineTir1[0]=64; boss.origineTir1[1]=64; boss.origineTir2[0]=8; boss.origineTir2[1]=32; boss.origineTir3[0]=115; boss.origineTir3[1]=32; PA_DualCreateSprite(boss.sprite1.numSprite,(void*)Boss_Sprite,OBJ_SIZE_64X32,1,1,boss.sprite1.x,boss.sprite1.y); PA_DualCreateSprite(boss.sprite2.numSprite,(void*)Boss2_Sprite,OBJ_SIZE_64X32,1,1,boss.sprite2.x,boss.sprite2.y); PA_DualCreateSprite(boss.sprite3.numSprite,(void*)Boss3_Sprite,OBJ_SIZE_64X32,1,1,boss.sprite3.x,boss.sprite3.y); PA_DualCreateSprite(boss.sprite4.numSprite,(void*)Boss4_Sprite,OBJ_SIZE_64X32,1,1,boss.sprite4.x,boss.sprite4.y); PA_DualSetSpriteXY(boss.sprite1.numSprite,boss.sprite1.x,boss.sprite1.y); PA_DualSetSpriteXY(boss.sprite2.numSprite,boss.sprite2.x,boss.sprite2.y); PA_DualSetSpriteXY(boss.sprite3.numSprite,boss.sprite3.x,boss.sprite3.y); PA_DualSetSpriteXY(boss.sprite4.numSprite,boss.sprite4.x,boss.sprite4.y); //*/ /* TIR */ // initialisation du tableau de tir et le premier tir sera impair int numDebutTir=5, numDebutTirBoss=81, numTir=25, numTirMax=60; Tir tabTir[numTirMax]; // les tirs sont envoyés hors de l'écran. Les numéros 10 à 30 sont réservés aux Tirs. Le Tir est initialement non actif // les indices sont de numTir (ATTENTION : numSPrite = numTir+10) // typeTir : 0=miniTir, 1=salveTir, 2=tir // de 0 à 10 = miniTir for(i=0;i<10;i++) { tabTir[i].coordonnees.numEcran=-1; tabTir[i].coordonnees.numSprite=(numDebutTir+i); tabTir[i].coordonnees.x=256; tabTir[i].coordonnees.y=392; tabTir[i].tirActif=false; tabTir[i].vitesseTir=2; tabTir[i].puissanceTir=2; tabTir[i].typeTir=0; tabTir[i].coordonnees.typeSprite=&tabTS[6]; if(i==0) { PA_DualCreateSprite(tabTir[i].coordonnees.numSprite,(void*)miniTir_Sprite,OBJ_SIZE_8X8,1,2,tabTir[i].coordonnees.x,tabTir[i].coordonnees.y); spriteReference=tabTir[i].coordonnees.numSprite; } else PA_DualCloneSprite((tabTir[i].coordonnees.numSprite),spriteReference); PA_DualSetSpriteXY(tabTir[i].coordonnees.numSprite,tabTir[i].coordonnees.x,tabTir[i].coordonnees.y); // pour l'instant, vitesse et puissance = 2 } // de 10 à 15 = tir for(i=10;i<15;i++) { tabTir[i].coordonnees.numEcran=-1; tabTir[i].coordonnees.numSprite=(numDebutTir+i); tabTir[i].coordonnees.x=256; tabTir[i].coordonnees.y=392; tabTir[i].tirActif=false; tabTir[i].vitesseTir=1; tabTir[i].puissanceTir=10; tabTir[i].typeTir=2; tabTir[i].coordonnees.typeSprite=&tabTS[8]; if(i==10) { PA_DualCreateSprite(tabTir[i].coordonnees.numSprite,(void*)tir_Sprite,OBJ_SIZE_16X16,1,2,tabTir[i].coordonnees.x,tabTir[i].coordonnees.y); spriteReference=tabTir[i].coordonnees.numSprite; } else PA_DualCloneSprite((tabTir[i].coordonnees.numSprite),spriteReference); PA_DualSetSpriteXY(tabTir[i].coordonnees.numSprite,tabTir[i].coordonnees.x,tabTir[i].coordonnees.y); // pour l'instant, vitesse et puissance = 2 } // de 15 à 25 = salveTir for(i=15;i<numTir;i++) { tabTir[i].coordonnees.numEcran=-1; tabTir[i].coordonnees.numSprite=(numDebutTir+i); tabTir[i].coordonnees.x=256; tabTir[i].coordonnees.y=392;//192*2=384+8=392 le 8 est l'espace entre les 2 écrans tabTir[i].tirActif=false; tabTir[i].vitesseTir=2; tabTir[i].puissanceTir=6; tabTir[i].typeTir=1; tabTir[i].coordonnees.typeSprite=&tabTS[7]; //DOUBLESPRITE if(i==15) { PA_DualCreateSprite(tabTir[i].coordonnees.numSprite,(void*)salveTir_Sprite,OBJ_SIZE_16X16,1,2,tabTir[i].coordonnees.x,tabTir[i].coordonnees.y); spriteReference=tabTir[i].coordonnees.numSprite; } else PA_DualCloneSprite((tabTir[i].coordonnees.numSprite),spriteReference); PA_DualSetSpriteXY(tabTir[i].coordonnees.numSprite,tabTir[i].coordonnees.x,tabTir[i].coordonnees.y); // pour l'instant, vitesse et puissance = 2 } // LES TIRS DES BOSS // les structures sont initialisés mais les sprites pas encore créé // ils vont de numSprite=81 à 109 et ils seront créés lorsque les sprites ennemis seront detruits pour faire de la place for(i=30;i<40;i++) { tabTir[i].coordonnees.numEcran=-1; tabTir[i].coordonnees.numSprite=(numDebutTirBoss+i-30); tabTir[i].coordonnees.x=256; tabTir[i].coordonnees.y=392; tabTir[i].tirActif=false; tabTir[i].vitesseTir=2; tabTir[i].puissanceTir=2; tabTir[i].typeTir=0; tabTir[i].coordonnees.typeSprite=&tabTS[6]; } // de 10 à 20 = tir for(i=40;i<50;i++) { tabTir[i].coordonnees.numEcran=-1; tabTir[i].coordonnees.numSprite=(numDebutTirBoss+i-30); tabTir[i].coordonnees.x=256; tabTir[i].coordonnees.y=392; tabTir[i].tirActif=false; tabTir[i].vitesseTir=1; tabTir[i].puissanceTir=10; tabTir[i].typeTir=2; tabTir[i].coordonnees.typeSprite=&tabTS[8]; } // de 20 à 25 = salveTir for(i=50;i<numTirMax;i++) { tabTir[i].coordonnees.numEcran=-1; tabTir[i].coordonnees.numSprite=(numDebutTirBoss+i-30); tabTir[i].coordonnees.x=256; tabTir[i].coordonnees.y=392;//192*2=384+8=392 le 8 est l'espace entre les 2 écrans tabTir[i].tirActif=false; tabTir[i].vitesseTir=2; tabTir[i].puissanceTir=6; tabTir[i].typeTir=1; tabTir[i].coordonnees.typeSprite=&tabTS[7]; } // END SPRITE PA_WaitForVBL();PA_WaitForVBL();PA_WaitForVBL(); int numMusique=1, numMusiqueMax=2; char tabMusique[4][20]={"Pas de Musique","phoenixIngame","lotus","rien"}; // PA_PlayMod(lotus); // lecture d'un fichier Mod // PA_PauseMod(u8); u8 = 0 pour enlever ou 1 pour mettre en pause NE MARCHE PAS, faut une release communautaire ... // PA_StopMod() PA_PlayMod(phoenixIngame); // la condition pour que le jeu continue bool sortir=false; PA_WaitForVBL();PA_WaitForVBL();PA_WaitForVBL();PA_WaitForVBL(); // les variables et instructions necessaire pour gerer le temps sur la DS PA_VBLCounterStart(0); // le début du jeu PA_VBLCounterStart(1); // pour les étapes PA_VBLCounterStart(2); PA_VBLCounterStart(3); //PA_VBLCounterStart(10); // pour le cheat PA_VBLCounterStart(15); // pour les tirs aléatoires des ennemis PA_VBLCounterStart(16); // pour les tirs du Joueur //unsigned int debutDuJeu=getTicks(); // le début du jeu, au cas ou ... int cptTirActif=1, cptTirActifEnnemi=1; // cptTirActif est le nombre (premier, second ...) du prochain tir int niveauTir=0, actionTir=1, numEtape=1, numEtapeBoss1=16, numEtapeMax=17; int debutParcours=1,debutParcours2=1,debutParcours3=1, debutParcours4=1,propreteAffichageTir=0; // = 1 si debut, 0 si jeu en cours, 2 si fini int vitesseBoss=1; // actionTir est à 1 si le tir doit être activé, 0 sinon //int cheatCode=0, tpsDernierEssaiCheatCode=PA_VBLCounter[10]/15; //unsigned int TempsDernierChoix=getTicks();//seconde courante while(!sortir) { // sécurité pour les tirs ennemis if(cptTirActifEnnemi>=50) { cptTirActifEnnemi=0; PA_VBLCounterStart(15); } /* if(Pad.Newpress.A && (cheatCode==1 || cheatCode==2) && tpsDernierEssaiCheatCode!=(PA_VBLCounter[10]/15)) { if(cheatCode==1 && PA_VBLCounter[10]/60!=0) { PA_VBLCounterStart(10); } cheatCode++; tpsDernierEssaiCheatCode=PA_VBLCounter[10]/15; } if(Pad.Newpress.B && (cheatCode==0 || cheatCode==3) && tpsDernierEssaiCheatCode!=(PA_VBLCounter[10]/15)) { cheatCode++; tpsDernierEssaiCheatCode=PA_VBLCounter[10]/15; } if(cheatCode==4) { Joueur.nbPV+=50; cheatCode=0; } if(cheatCode!=0 && PA_VBLCounter[10]/60==3) { cheatCode=0; } //*/ // numEtape nous sert à savoir à quel étape du jeu on se situe // cptTemps nous sert pour savoir ou en est le jeu et pour les déplacements /* PREMIERE ETAPE */ if(numEtape==1 || numEtape==2 || numEtape==3) // Crab { // première étape du jeu if(debutParcours==1) { debutParcours=0; PA_VBLCounterStart(1); // reinitialisation du compteur PA_VBLCounterStart(15); // pour les tirs tabEnnemi[0].x=tabParcours1Charles[0][0]; tabEnnemi[0].y=tabParcours1Charles[0][1]; tabEnnemi[0].nbPV=5; tabEnnemi[0].numEtape=1; PA_DualSetSpriteXY(tabEnnemi[0].numSprite,tabEnnemi[0].x,tabEnnemi[0].y); //PA_SetSpriteXY(tabEnnemi[0].numEcran,tabEnnemi0[0].numSprite,tabEnnemi0[0].x,tabEnnemi0[0].y); } // le premier script if(nouveauParcours(tabEnnemi, 0, 5, tabParcours1Charles, nbEtapes1Charles, 1) && debutParcours!=2) { numEtape++; debutParcours=2; } } if(numEtape==1 || numEtape==2 || numEtape==3) // Octopus { // première étape du jeu if(debutParcours2==1) { debutParcours2=0; PA_VBLCounterStart(2); // reinitialisation du compteur tabEnnemi[6].x=tabParcours2Charles[0][0]; tabEnnemi[6].y=tabParcours2Charles[0][1]; tabEnnemi[6].nbPV=5; tabEnnemi[6].numEtape=1; PA_DualSetSpriteXY(tabEnnemi[6].numSprite,tabEnnemi[6].x,tabEnnemi[6].y); //PA_SetSpriteXY(tabEnnemi0[8].numEcran,tabEnnemi0[8].numSprite,tabEnnemi0[8].x,tabEnnemi0[8].y); } // le premier script if(nouveauParcours(tabEnnemi, 6, 5, tabParcours2Charles, nbEtapes2Charles, 2) && debutParcours2!=2) { numEtape++; debutParcours2=2; } } if(numEtape==1 || numEtape==2 || numEtape==3) // Squid { // première étape du jeu if(debutParcours3==1) { debutParcours3=0; PA_VBLCounterStart(3); // reinitialisation du compteur tabEnnemi[12].x=tabParcours3Charles[0][0]; tabEnnemi[12].y=tabParcours3Charles[0][1]; tabEnnemi[12].nbPV=5; tabEnnemi[12].numEtape=1; PA_DualSetSpriteXY(tabEnnemi[12].numSprite,tabEnnemi[12].x,tabEnnemi[12].y); } // le premier script if(nouveauParcours(tabEnnemi, 12, 5, tabParcours3Charles, nbEtapes3Charles, 3) && debutParcours3!=2) { numEtape++; debutParcours3=2; } } if(actionTir && (numEtape==1 || numEtape==2 || numEtape==3) && cptTirActifEnnemi==(PA_VBLCounter[15]/60)) { // première étape du jeu int spritealeatoire = PA_RandMinMax(0,5), spritealeatoire2 = PA_RandMinMax(6,11), spritealeatoire3 = PA_RandMinMax(12,17); int ylanceur=tabEnnemi[spritealeatoire].y+15, ylanceur2=tabEnnemi[spritealeatoire2].y+15, ylanceur3=tabEnnemi[spritealeatoire3].y+15; if(tabEnnemi[spritealeatoire].numEcran==0) { ylanceur+=200; } if(tabEnnemi[spritealeatoire].numEcran==0) { ylanceur2+=200; } nouveauTir(tabTir,10,2,tabEnnemi[spritealeatoire].x+5,ylanceur); nouveauTir(&tabTir[15],10,2,tabEnnemi[spritealeatoire2].x+5,ylanceur2); nouveauTir(tabTir,10,2,tabEnnemi[spritealeatoire3].x+5,ylanceur3); cptTirActifEnnemi++; } /* DEUXIEME ETAPE */ if(numEtape==4) // initialisation de l'étape 5 et 6 { if(debutParcours==2 && debutParcours2==2 && debutParcours3==2) // si les 3 etapes sont finis { PA_VBLCounterStart(1); // reinitialisation du compteur d'étapes debutParcours=0; debutParcours2=0; debutParcours3=0; PA_OutputText(0,0,10,"NIVEAU 1 TERMINE !!!"); actionTir=false; } if((PA_VBLCounter[1]/60)==3) { PA_ClearTextBg(0); numEtape++; PA_VBLCounterStart(1); debutParcours=1; debutParcours2=1; PA_VBLCounterStart(1); PA_VBLCounterStart(15); PA_VBLCounterStart(16); cptTirActif=0; cptTirActifEnnemi=0; actionTir=true; } } if(numEtape==5 || numEtape==6) // Crab { // deuxième étape du jeu if(debutParcours==1) { debutParcours=0; PA_VBLCounterStart(1); // reinitialisation du compteur tabEnnemi0[0].x=tabParcours9Charles[0][0]; tabEnnemi0[0].y=tabParcours9Charles[0][1]; tabEnnemi0[0].nbPV=5; tabEnnemi0[0].numEtape=1; PA_SetSpriteXY(tabEnnemi0[0].numEcran,tabEnnemi0[0].numSprite,tabEnnemi0[0].x,tabEnnemi0[0].y); } // le premier script if(nouveauParcours(tabEnnemi0, 0, 6, tabParcours2Charles, nbEtapes2Charles, 1) && debutParcours!=2) { numEtape++; debutParcours=2; } } if(numEtape==5 || numEtape==6) // Octopus { // deuxième étape du jeu if(debutParcours2==1) { debutParcours2=0; PA_VBLCounterStart(2); // reinitialisation du compteur tabEnnemi0[6].x=tabParcours10Charles[0][0]; tabEnnemi0[6].y=tabParcours10Charles[0][1]; tabEnnemi0[6].nbPV=5; tabEnnemi0[6].numEtape=1; PA_SetSpriteXY(tabEnnemi0[6].numEcran,tabEnnemi0[6].numSprite,tabEnnemi0[6].x,tabEnnemi0[6].y); } // le premier script if(nouveauParcours(tabEnnemi0, 6, 6, tabParcours3Charles, nbEtapes3Charles, 2) && debutParcours2!=2) { numEtape++; debutParcours2=2; } } if(actionTir && (numEtape==5 || numEtape==6) && cptTirActifEnnemi==(PA_VBLCounter[15]/60)) { // deuxième étape du jeu int spritealeatoire = PA_RandMinMax(0,6), spritealeatoire2 = PA_RandMinMax(6,12); int ylanceur=tabEnnemi0[spritealeatoire].y+15, ylanceur2=tabEnnemi0[spritealeatoire2].y+15; if(tabEnnemi0[spritealeatoire].numEcran==0) { ylanceur+=200; } if(tabEnnemi0[spritealeatoire].numEcran==0) { ylanceur2+=200; } nouveauTir(tabTir,10,2,tabEnnemi0[spritealeatoire].x+5,ylanceur); nouveauTir(&tabTir[15],10,2,tabEnnemi0[spritealeatoire2].x+5,ylanceur2); cptTirActifEnnemi++; } if(numEtape==7) { if(debutParcours==2 && debutParcours2==2) // bricolage { PA_VBLCounterStart(1); // reinitialisation du compteur d'étapes debutParcours=0; PA_OutputText(0,0,10,"NIVEAU 2 TERMINE !!!"); PA_StopMod(); } if((PA_VBLCounter[1]/60)==3) { numMusique=2; PA_PlayMod(lotus); PA_ClearTextBg(0); numEtape++; PA_VBLCounterStart(1); debutParcours=1; debutParcours2=1; debutParcours3=1; debutParcours4=1; PA_VBLCounterStart(1); PA_VBLCounterStart(15); PA_VBLCounterStart(16); cptTirActif=0; cptTirActifEnnemi=0; actionTir=true; } } if(numEtape==8 || numEtape==9 || numEtape==10 || numEtape==11) // sprites en 0 { // troisième étape du jeu if(debutParcours==1) { debutParcours=0; PA_VBLCounterStart(1); // reinitialisation du compteur tabEnnemi0[0].x=tabParcours1Charles[0][0]; tabEnnemi0[0].y=tabParcours1Charles[0][1]; tabEnnemi0[0].nbPV=5; tabEnnemi0[0].numEtape=1; PA_SetSpriteXY(tabEnnemi0[0].numEcran,tabEnnemi0[0].numSprite,tabEnnemi0[0].x,tabEnnemi0[0].y); } // le premier script if(nouveauParcours(tabEnnemi0, 0, 5, tabParcours1Charles, nbEtapes1Charles, 1) && debutParcours!=2) { numEtape++; debutParcours=2; } } if(numEtape==8 || numEtape==9 || numEtape==10 || numEtape==11) // sprites en -1 { // troisième étape du jeu if(debutParcours2==1) { debutParcours2=0; PA_VBLCounterStart(2); // reinitialisation du compteur tabEnnemi[6].x=tabParcours3Charles[0][0]; tabEnnemi[6].y=tabParcours3Charles[0][1]; tabEnnemi[6].nbPV=5; tabEnnemi[6].numEtape=1; PA_SetSpriteXY(tabEnnemi[6].numEcran,tabEnnemi[6].numSprite,tabEnnemi[6].x,tabEnnemi[6].y); } // le premier script if(nouveauParcours(tabEnnemi, 6, 5, tabParcours3Charles, nbEtapes3Charles, 2) && debutParcours2!=2) { numEtape++; debutParcours2=2; } } if(numEtape==8 || numEtape==9 || numEtape==10 || numEtape==11) // sprites en 0 { // troisième étape du jeu if(debutParcours3==1) { debutParcours3=0; PA_VBLCounterStart(1); // reinitialisation du compteur tabEnnemi0[6].x=tabParcours2Charles[0][0]; tabEnnemi0[6].y=tabParcours2Charles[0][1]; tabEnnemi0[6].nbPV=5; tabEnnemi0[6].numEtape=1; PA_SetSpriteXY(tabEnnemi0[6].numEcran,tabEnnemi0[6].numSprite,tabEnnemi0[6].x,tabEnnemi0[6].y); } // le premier script if(nouveauParcours(tabEnnemi0, 6, 5, tabParcours2Charles, nbEtapes2Charles, 1) && debutParcours3!=2) { numEtape++; debutParcours3=2; } } if(numEtape==8 || numEtape==9 || numEtape==10 || numEtape==11) // sprites en -1 { // troisième étape du jeu if(debutParcours4==1) { debutParcours4=0; PA_VBLCounterStart(2); // reinitialisation du compteur tabEnnemi[12].x=tabParcours4Charles[0][0]; tabEnnemi[12].y=tabParcours4Charles[0][1]; tabEnnemi[12].nbPV=5; tabEnnemi[12].numEtape=1; PA_SetSpriteXY(tabEnnemi[12].numEcran,tabEnnemi[12].numSprite,tabEnnemi[12].x,tabEnnemi[12].y); } // le premier script if(nouveauParcours(tabEnnemi, 12, 5, tabParcours4Charles, nbEtapes4Charles, 2) && debutParcours4!=2) { numEtape++; debutParcours4=2; } } if(actionTir && (numEtape==8 || numEtape==9 || numEtape==10 || numEtape==11) && cptTirActifEnnemi==(PA_VBLCounter[15]/60)) { // troisième étape du jeu int spritealeatoire = PA_RandMinMax(0,5), spritealeatoire2 = PA_RandMinMax(6,11), spritealeatoire3 = PA_RandMinMax(6,11), spritealeatoire4 = PA_RandMinMax(12,17); int ylanceur=tabEnnemi0[spritealeatoire].y+15, ylanceur2=tabEnnemi[spritealeatoire2].y+15, ylanceur3=tabEnnemi0[spritealeatoire3].y+15, ylanceur4=tabEnnemi[spritealeatoire4].y+15; if(tabEnnemi0[spritealeatoire].numEcran==0) { ylanceur+=200; } if(tabEnnemi[spritealeatoire2].numEcran==0) { ylanceur2+=200; } if(tabEnnemi0[spritealeatoire3].numEcran==0) { ylanceur3+=200; } if(tabEnnemi[spritealeatoire4].numEcran==0) { ylanceur4+=200; } nouveauTir(tabTir,10,2,tabEnnemi0[spritealeatoire].x+5,ylanceur); nouveauTir(tabTir,10,2,tabEnnemi[spritealeatoire2].x+5,ylanceur2); nouveauTir(&tabTir[15],10,2,tabEnnemi0[spritealeatoire3].x+5,ylanceur3); nouveauTir(&tabTir[15],10,2,tabEnnemi[spritealeatoire4].x+5,ylanceur4); cptTirActifEnnemi++; } if(numEtape==12) { if(debutParcours==2 && debutParcours2==2 && debutParcours3==2 && debutParcours4==2) // bricolage { PA_VBLCounterStart(1); // reinitialisation du compteur d'étapes debutParcours=0; PA_OutputText(0,0,10,"NIVEAU 3 TERMINE !!!"); } if((PA_VBLCounter[1]/60)==3) { PA_ClearTextBg(0); numEtape++; PA_VBLCounterStart(1); debutParcours=1; debutParcours2=1; PA_VBLCounterStart(1); PA_VBLCounterStart(15); PA_VBLCounterStart(16); cptTirActif=0; cptTirActifEnnemi=0; actionTir=true; } } if(numEtape==13 || numEtape==14) // Crab { // quatrième étape du jeu if(debutParcours==1) { debutParcours=0; PA_VBLCounterStart(1); // reinitialisation du compteur tabEnnemi[0].x=tabParcours9Charles[0][0]; tabEnnemi[0].y=tabParcours9Charles[0][1]; tabEnnemi[0].nbPV=5; tabEnnemi[0].numEtape=1; PA_SetSpriteXY(tabEnnemi[0].numEcran,tabEnnemi[0].numSprite,tabEnnemi[0].x,tabEnnemi[0].y); } // le premier script if(nouveauParcours(tabEnnemi, 0, 6, tabParcours9Charles, nbEtapes9Charles, 1) && debutParcours!=2) { numEtape++; debutParcours=2; } } if(numEtape==13 || numEtape==14) // Octopus { // quatrième étape du jeu if(debutParcours2==1) { debutParcours2=0; PA_VBLCounterStart(2); // reinitialisation du compteur tabEnnemi[6].x=tabParcours10Charles[0][0]; tabEnnemi[6].y=tabParcours10Charles[0][1]; tabEnnemi[6].nbPV=5; tabEnnemi[6].numEtape=1; PA_SetSpriteXY(tabEnnemi[6].numEcran,tabEnnemi[6].numSprite,tabEnnemi[6].x,tabEnnemi[6].y); } // le premier script if(nouveauParcours(tabEnnemi, 6, 6, tabParcours10Charles, nbEtapes10Charles, 2) && debutParcours2!=2) { numEtape++; debutParcours2=2; } } if(actionTir && (numEtape==13 || numEtape==14) && cptTirActifEnnemi==(PA_VBLCounter[15]/60)) { // quatrième étape du jeu int spritealeatoire = PA_RandMinMax(0,6), spritealeatoire2 = PA_RandMinMax(6,12); int ylanceur=tabEnnemi[spritealeatoire].y+15, ylanceur2=tabEnnemi[spritealeatoire2].y+15; if(tabEnnemi[spritealeatoire].numEcran==0) { ylanceur+=200; } if(tabEnnemi[spritealeatoire].numEcran==0) { ylanceur2+=200; } nouveauTir(tabTir,10,2,tabEnnemi[spritealeatoire].x+5,ylanceur); nouveauTir(&tabTir[15],10,2,tabEnnemi[spritealeatoire2].x+5,ylanceur2); cptTirActifEnnemi++; } if(numEtape==numEtapeBoss1-1) // BOSS { // cinquième étape du jeu if(debutParcours==2 && debutParcours2==2) // bricolage { PA_VBLCounterStart(1); // reinitialisation du compteur d'étapes debutParcours=0; PA_OutputText(0,0,10,"NIVEAU 4 TERMINE !!!"); } if((PA_VBLCounter[1]/60)==3) { PA_ClearTextBg(0); numEtape++; debutParcours=1; debutParcours2=1; debutParcours3=1; debutParcours4=1; PA_VBLCounterStart(1); PA_VBLCounterStart(15); PA_VBLCounterStart(16); cptTirActif=0; cptTirActifEnnemi=0; actionTir=true; boss.sprite1.nbPV=90; boss.sprite2.nbPV=90; boss.sprite3.nbPV=90; boss.sprite4.nbPV=90; preparationBoss(tabTir); /*for(i=51;i<62;i++)// destruction de tout les ennemis du bas { PA_DeleteSprite(0,i); } for(i=63;i<80;i++)// destruction de tout les ennemis en haut { PA_DualDeleteSprite(i); } // CREATION DES TIRS DU BOSS PA_DualCreateSprite(tabTir[30].coordonnees.numSprite,(void*)miniTir_Sprite,OBJ_SIZE_8X8,1,2,tabTir[30].coordonnees.x,tabTir[30].coordonnees.y); spriteReference=tabTir[30].coordonnees.numSprite; PA_DualSetSpriteXY(tabTir[30].coordonnees.numSprite,tabTir[30].coordonnees.x,tabTir[30].coordonnees.y); for(i=31;i<40;i++) { PA_DualCloneSprite((tabTir[i].coordonnees.numSprite),spriteReference); PA_DualSetSpriteXY(tabTir[i].coordonnees.numSprite,tabTir[i].coordonnees.x,tabTir[i].coordonnees.y); } PA_DualCreateSprite(tabTir[40].coordonnees.numSprite,(void*)tir_Sprite,OBJ_SIZE_16X16,1,2,tabTir[40].coordonnees.x,tabTir[40].coordonnees.y); spriteReference=tabTir[40].coordonnees.numSprite; PA_DualSetSpriteXY(tabTir[40].coordonnees.numSprite,tabTir[40].coordonnees.x,tabTir[40].coordonnees.y); for(i=41;i<50;i++) { PA_DualCloneSprite((tabTir[i].coordonnees.numSprite),spriteReference); PA_DualSetSpriteXY(tabTir[i].coordonnees.numSprite,tabTir[i].coordonnees.x,tabTir[i].coordonnees.y); } PA_DualCreateSprite(tabTir[50].coordonnees.numSprite,(void*)salveTir_Sprite,OBJ_SIZE_16X16,1,2,tabTir[50].coordonnees.x,tabTir[50].coordonnees.y); spriteReference=tabTir[50].coordonnees.numSprite; PA_DualSetSpriteXY(tabTir[50].coordonnees.numSprite,tabTir[50].coordonnees.x,tabTir[50].coordonnees.y); for(i=51;i<numTirMax;i++) { PA_DualCloneSprite((tabTir[i].coordonnees.numSprite),spriteReference); PA_DualSetSpriteXY(tabTir[i].coordonnees.numSprite,tabTir[i].coordonnees.x,tabTir[i].coordonnees.y); } */ } } if(numEtape==numEtapeBoss1) { // cinquième étape du jeu if(debutParcours2==1) { // les premiers paternes (déplacements) switch(PA_VBLCounter[1]/60)// permet un affichage plus propre de la vie du joueur { // ici debutParcours indique la direction à prendre case 0 : debutParcours=6;vitesseBoss=1;break; case 2 : debutParcours=6;vitesseBoss=1;break; case 4 : debutParcours=1;vitesseBoss=1;break; case 6 : debutParcours=3;vitesseBoss=1;break; case 7 : debutParcours=5;vitesseBoss=1;break; case 10 : debutParcours=8;vitesseBoss=2;break; case 11 : debutParcours=5;vitesseBoss=1;break; case 12 : debutParcours=5;vitesseBoss=1;break; case 15 : debutParcours=6;vitesseBoss=1;break; case 17 : debutParcours=7;vitesseBoss=1;break; case 19 : debutParcours=1;vitesseBoss=1;break; case 21 : debutParcours=6;vitesseBoss=1;break; case 23 : debutParcours=5;vitesseBoss=1;actionTir=2;break; case 28 : debutParcours=5;actionTir=1;break; case 30 : debutParcours2++;PA_VBLCounterStart(1);break;// 6-60 == 6 secondes. On boucle sur le parcours default: break; } } else { // paternes qui se répétent switch(PA_VBLCounter[1]/60)// permet un affichage plus propre de la vie du joueur { // ici debutParcours indique la direction à prendre case 0 : debutParcours=1;vitesseBoss=1;break; case 1 : debutParcours=8;vitesseBoss=1;break; case 2 : debutParcours=3;vitesseBoss=2;break; case 3 : debutParcours=8;vitesseBoss=1;break; case 4 : debutParcours=5;vitesseBoss=1;break; case 7 : debutParcours=7;vitesseBoss=2;actionTir=2;break; case 8 : debutParcours=1;vitesseBoss=1;actionTir=1;break; case 9 : debutParcours=5;vitesseBoss=1;break; case 12 : debutParcours=3;vitesseBoss=1;break; case 13 : debutParcours=6;vitesseBoss=1;break; case 14 : debutParcours=5;vitesseBoss=1;break; case 18 : debutParcours=6;vitesseBoss=1;break; case 20 : debutParcours=7;vitesseBoss=1;actionTir=2;break; case 22 : debutParcours=1;vitesseBoss=1;actionTir=1;break; case 24 : debutParcours=6;actionTir=1;break; case 26 : debutParcours=8;actionTir=1;actionTir=2;break; case 27 : debutParcours=5;actionTir=1;actionTir=1;break; case 30 : PA_VBLCounterStart(1);debutParcours2++; break; default: break; } } //* if(debutParcours!=5) { deplacementBoss(&boss,debutParcours,vitesseBoss); } if(boss.sprite1.nbPV<=0 && boss.sprite2.nbPV<=0 && boss.sprite3.nbPV<=0 && boss.sprite4.nbPV<=0) { numEtape++;//il est mort debutParcours=2; } } if(actionTir && numEtape==numEtapeBoss1 && cptTirActifEnnemi==(PA_VBLCounter[15]/15)) { // cinquième étape du jeu int X=boss.sprite1.x, Y=boss.sprite1.y; int lanceurX1=X+boss.origineTir1[0], lanceurY1=Y+boss.origineTir1[1], lanceurX2=X+boss.origineTir2[0], lanceurY2=Y+boss.origineTir2[1], lanceurX3=X+boss.origineTir3[0], lanceurY3=Y+boss.origineTir3[1]; if(actionTir==1 && (cptTirActifEnnemi)%2 == 0)// tirs normaux et moment de les tirer { if(boss.sprite4.nbPV>0){nouveauTir(&tabTir[50],10,2, lanceurX3, lanceurY3);}//celui du milieu // 2 fois moins de grosse boulette if(boss.sprite3.nbPV>0){nouveauTir(&tabTir[30],10,2, lanceurX2, lanceurY2);}//celui à gauche if((cptTirActifEnnemi)%4 == 0){nouveauTir(&tabTir[40],10,2, lanceurX1-15, lanceurY1-15);}//celui à droite } else { if(actionTir==2)// boulettes 2 fois plus souvent { if(boss.sprite4.nbPV>0){nouveauTir(&tabTir[50],10,2, lanceurX3, lanceurY3);}//celui du milieu // 2 fois moins de grosse boulette if(boss.sprite3.nbPV>0){nouveauTir(&tabTir[30],10,2, lanceurX2, lanceurY2);}//celui à gauche if((cptTirActifEnnemi)%2 == 0){nouveauTir(&tabTir[40],10,2, lanceurX1-15, lanceurY1-15);}//celui à droite } } //*/ cptTirActifEnnemi++; } if(numEtape==numEtapeBoss1+1 && debutParcours2==2) { destructionBoss(tabTir); debutParcours=1; } if(numEtape==numEtapeMax)//fin du jeu { if(debutParcours!=0) // bricolage { PA_VBLCounterStart(1); // reinitialisation du compteur d'étapes debutParcours=0; PA_OutputText(0,0,10,"DERNIER NIVEAU TERMINE !!!"); } if((PA_VBLCounter[1]/60)==3) { PA_ClearTextBg(0); numEtape++; PA_VBLCounterStart(1); debutParcours=1; debutParcours2=1; debutParcours3=1; PA_VBLCounterStart(1); PA_VBLCounterStart(15); PA_VBLCounterStart(16); cptTirActif=0; cptTirActifEnnemi=0; actionTir=true; PA_OutputText(1,1,17," END GAME\nMerci d'avoir joué \nSi tu a vu des bugs-problèmes \nMerci de me les parvenir\nMail : [email protected]\nStart -> Quitter"); } } /* DETECTION DES COLLISIONS !!! */ //deplacementSprite(0,100,&(sprite1.x),&(sprite1.y)); if(niveauTir!=0) // si peace, alors juste observation { for(i=0;i<numTir;i++)// pour tout les tirs { if(tabTir[i].tirActif)// si le tir est à l'écran { if(tabTir[i].directionTir==1)// il doit attaquer les ennemis { if(numEtape==numEtapeBoss1)//combat contre boss { if(boss.sprite1.nbPV>0) { detectionCollisionSprite_tir_et_destruction(&(boss.sprite1),&(tabTir[i])); } if(boss.sprite2.nbPV>0) { detectionCollisionSprite_tir_et_destruction(&(boss.sprite2),&(tabTir[i])); } if(boss.sprite3.nbPV>0) { detectionCollisionSprite_tir_et_destruction(&(boss.sprite3),&(tabTir[i])); } if(boss.sprite4.nbPV>0) { detectionCollisionSprite_tir_et_destruction(&(boss.sprite4),&(tabTir[i])); } } else//detection normale { for(cpt=0;cpt<nbEnnemi0;cpt++)// detection pour les ennemis du bas { if(tabEnnemi0[cpt].nbPV>0) { detectionCollisionSprite_tir_et_destruction(&(tabEnnemi0[cpt]),&(tabTir[i])); } } for(cpt=0;cpt<nbEnnemi;cpt++)// et du haut { if(tabEnnemi[cpt].nbPV>0) { detectionCollisionSprite_tir_et_destruction(&(tabEnnemi[cpt]),&(tabTir[i])); } } } } else { if(tabTir[i].directionTir==2 && numEtape!=numEtapeBoss1)// il doit attaquer le Joueur et hors combat contre boss { detectionCollisionSprite_tir_et_destruction(&(Joueur),&(tabTir[i])); } } } } if(numEtape==numEtapeBoss1)// si combat contre boss, y'a plein d'autres tirs menaçant pour le joueur ... { int compteurDeTir; for(compteurDeTir=30;compteurDeTir<numTirMax;compteurDeTir++) { detectionCollisionSprite_tir_et_destruction(&(Joueur),&(tabTir[compteurDeTir])); } } } //*/ switch(propreteAffichageTir)// permet un affichage plus propre de la vie du joueur { case 0 : if(Joueur.nbPV<=1000){propreteAffichageTir++;PA_ClearTextBg(1);}break; case 1 : if(Joueur.nbPV<=100){propreteAffichageTir++;PA_ClearTextBg(1);}break; case 2 : if(Joueur.nbPV<=10){propreteAffichageTir++;PA_ClearTextBg(1);}break; case 3 : if(Joueur.nbPV<=0){propreteAffichageTir++;PA_OutputText(1,0,0,"VIE 0",Joueur.nbPV);}break; case 4 : propreteAffichageTir=0;break; default: break; } PA_OutputText(1,0,0,"VIE %d",Joueur.nbPV); /* DETECTION DES TIRS DU JOUEUR !!! */ //if(PA_CheckLid()) // Checks the lid, and pauses if closed... Returns 1 when it unpauses // PA_WaitForVBL(); if(niveauTir==0) { PA_OutputText(0,27,23,"peace"); } // verification des tirs pour les miniTirs if(actionTir && niveauTir==1 && Pad.Newpress.A && (PA_VBLCounter[16]/15)>=cptTirActif) // PA_VBLCounter[1]/30 = toutes les 1/2 secondes { nouveauTir(tabTir,10,1,Joueur.x+10,Joueur.y+200);//un tir a été tiré, +200 car joueur est dans écran du bas cptTirActif++; PA_OutputText(0,31,23,"*"); if(cptTirActif<(PA_VBLCounter[16]/30)) { cptTirActif=0; PA_VBLCounterStart(16); } } // verification des tirs pour les salveTirs if(actionTir && niveauTir==2 && Pad.Newpress.A && (PA_VBLCounter[16]/60)>=cptTirActif)// toutes les secondes { nouveauTir(&(tabTir[15]),10,1,Joueur.x+10,Joueur.y+200);//un tir a été tiré, +200 car joueur est dans écran du bas cptTirActif++; PA_OutputText(0,30,23,"**"); if(cptTirActif<(PA_VBLCounter[16]/60)) { cptTirActif=0; PA_VBLCounterStart(16); } } if(Pad.Newpress.B) { PA_ClearTextBg(0); // pour réinitialisé les indications de tirs PA_ClearTextBg(1); niveauTir++; PA_VBLCounterStart(16); // reinitialisation cptTirActif=1; if(niveauTir==3) { niveauTir=0; } // maximim atteint, on reprends de 0 } /* DEPLACEMENT DE TOUT LES TIRS !!! */ // verification des tirActif de tout les tirs for(i=0;i<numTir;i++) { deplacementTir(&tabTir[i]); } if(numEtape==numEtapeBoss1) { for(i=30;i<numTirMax;i++) { deplacementTir(&tabTir[i]); } } /* DEPLACEMENT DU JOUEUR !!! */ if(Joueur.nbPV>0) { // deplacement du vaisseau grâce au stylet //deplacementSpriteStylet (Joueur.numEcran,Joueur.numSprite,&Joueur.x,&Joueur.y); // ou des touches gauches et droite de la DS deplacementSpritePad (Joueur.numEcran,Joueur.numSprite,&Joueur.x,&Joueur.y); } /* SORTIE DU JEU !!! */ // appuie de Start pour confirmer la fin du jeu if(Pad.Newpress.Start || Joueur.nbPV<=0) { PA_ClearTextBg(1); PA_ClearTextBg(0); int compteur0=PA_VBLCounter[0], compteur1=PA_VBLCounter[1], compteur2=PA_VBLCounter[2], compteur3=PA_VBLCounter[3], compteur10=PA_VBLCounter[10]; PA_StopMod(); // neccessaire pour quitter le jeu : // verif = verifie si un choix a été effectué bool verif=false; PA_OutputText(1,2,20,"Appuyez sur A pour continuer\n B pour quitter le jeu\n X pour les options"); if(Joueur.nbPV<=0) { for(i=0;i<60;i++) { PA_WaitForVBL(); } } while(!verif) { PA_WaitForVBL(); // A pour quitter if(Pad.Newpress.B) { PA_ClearTextBg(1); sortir=true; verif=true; } // B pour quitter if(Pad.Newpress.A) { PA_ClearTextBg(1); verif=true; } if(Pad.Newpress.X) { PA_ClearTextBg(1); while(!verif) { PA_OutputText(1,2,20,"Appuyez sur GAUCHE ou DROITE\n A pour sortir des options"); if(Pad.Newpress.Left) // changement { PA_ClearTextBg(1); if((numMusique-1)>=0) { numMusique--; } } if(Pad.Newpress.Right) { PA_ClearTextBg(1); if((numMusique+1)<=numMusiqueMax) { numMusique++; } else { PA_OutputText(1,2,17,"Musique Max atteinte !"); } } if(Pad.Newpress.A) // on sort { PA_ClearTextBg(1); verif=true; } if(numMusique>=0 && numMusique<=numMusiqueMax) { PA_OutputText(1,2,18,"Musique : %s", tabMusique[numMusique]); } PA_WaitForVBL(); } PA_ClearTextBg(1); PA_OutputText(1,2,20,"Appuyez sur A pour continuer\n B pour quitter le jeu\n X pour les options"); verif=false; } } if(Joueur.nbPV<=0 && !sortir) // nouvelle partie { // mise à jour du Joueur Joueur.x=100; Joueur.y=160; Joueur.nbPV=50; Joueur.numEtape=0; Joueur.temps=0; PA_SetSpriteXY(Joueur.numEcran,Joueur.numSprite,Joueur.x,Joueur.y); // mise à jour des tirs PA_ClearTextBg(0); // pour réinitialisé les indications de tirs PA_ClearTextBg(1); } // le cheat code est remis à 0 //cheatCode=0; if(!sortir) // MUSIQUES { switch(numMusique) { case 1 : PA_PlayMod(phoenixIngame);break; case 2 : PA_PlayMod(lotus);break; default : numMusique=0; } } // compteur remis par défaut PA_VBLCounter[0]=compteur0; PA_VBLCounter[1]=compteur1; PA_VBLCounter[2]=compteur2; PA_VBLCounter[3]=compteur3; PA_VBLCounter[10]=compteur10; PA_VBLCounterStart(16);cptTirActifEnnemi=1;// pour les tirs des ennemis PA_VBLCounterStart(15);cptTirActif=0; // pour les tirs du Joueur } PA_WaitForVBL(); } // fin du while(!sortir) // suppression des sprites utilisés pour le jeu PA_DeleteSprite(0,1); for(i=0;i<128;i++) { PA_DeleteSprite(0,i); PA_DeleteSprite(1,i); PA_DualDeleteSprite(i); if(i%10==0)PA_WaitForVBL(); } //sans ces WaitForVBL, on a un bug d'algo for(i=0;i<10;i++) { PA_WaitForVBL(); } PA_StopMod();// fin de la musique //PA_OutputText(1,2,18,"Ce jeu vidéo est fini !!", tabMusique[numMusique]); //PA_OutputText(1,0,19,"Veuillez eteindre votre console et reprendre une activité normale ...", tabMusique[numMusique]); }
// Main function int main(void) { // PAlib init PA_Init(); PA_InitVBL(); PA_InitText(0, 0); // Initialise the text system on the top screen PA_InitText(1, 0); // Initialise the text system on the top screen PA_OutputSimpleText(1, 0, 5, "Please insert your DS Motion and press any key"); // Ask to insert the DS Motion... PA_WaitFor(Pad.Newpress.Anykey); // Wait for any key to be pressed before continuing... PA_ClearTextBg(1); // Erase text screen... // Turn on the DS Motion... PA_MotionInit(); while ( !PA_CheckDSMotion()) { // Checks for the DS Motion, continues looking for it until it actually finds it... PA_WaitForVBL(); // If no DSMotion found... PA_OutputText(1, 0, 5, " DS Motion not found ! \nPlease insert your DS Motion and press any key"); // Ask to insert the DS Motion... again... PA_WaitFor(Pad.Newpress.Anykey); // Wait for any key to be pressed before continuing... PA_MotionInit(); } PA_ClearTextBg(1); // erase the text... PA_MotionToPad(1); // Overrides the pad keys and puts the DS Motion instead PA_LoadSpritePal(0, 0, (void*)sprite0_Pal); // Palette.... s32 x = 120; s32 y = 64; PA_CreateSprite(0, 0,(void*)som_Sprite, OBJ_SIZE_16X32,1, 0, x, y); // Sprite while(1) { // Animation code... if(Pad.Newpress.Up) PA_StartSpriteAnim(0, 0, 0, 3, 6); if(Pad.Newpress.Down) PA_StartSpriteAnim(0, 0, 8, 11, 6); if(Pad.Newpress.Right) { PA_StartSpriteAnim(0, 0, 4, 7, 6); PA_SetSpriteHflip(0, 0, 0); } if(Pad.Newpress.Left) { PA_StartSpriteAnim(0, 0, 4, 7, 6); PA_SetSpriteHflip(0, 0, 1); } if(!((Pad.Held.Left)||(Pad.Held.Up)||(Pad.Held.Down)||(Pad.Held.Right))) PA_SpriteAnimPause(0, 0, 1); // Moving Code y += Pad.Held.Down - Pad.Held.Up; x += Pad.Held.Right - Pad.Held.Left; PA_SetSpriteXY(0, 0, x, y); PA_OutputText(1, 3, 7, "Up : %d-%d-%d", Pad.Newpress.Up, Pad.Held.Up, Pad.Released.Up); PA_OutputText(1, 3, 8, "Down : %d-%d-%d", Pad.Newpress.Down, Pad.Held.Down, Pad.Released.Down); PA_OutputText(1, 3, 9, "Left : %d-%d-%d", Pad.Newpress.Left, Pad.Held.Left, Pad.Released.Left); PA_OutputText(1, 3, 10, "Right : %d-%d-%d", Pad.Newpress.Right, Pad.Held.Right, Pad.Released.Right); PA_WaitForVBL(); } return 0; }
int main() { PA_Init(); // Initialisation de la PALib PA_InitVBL(); // Initialisation de l'affichage splash(); // Initialisation du texte, de la palette et du son PA_LoadDefaultText(0, 0); //bas PA_LoadDefaultText(1, 0); //haut PA_SetTextTileCol(1, TEXT_BLACK); // texte en noir (haut) PA_SetTextTileCol(0, TEXT_BLACK); // texte en noir (bas) PA_LoadSpritePal(0, 1, (void*)feu_Pal); // palette du feu PA_LoadSpritePal(0, 2, (void*)mario_Pal); //palette pour mario PA_LoadSpritePal(0, 3, (void*)boite_Pal); //palette pour la boite PA_LoadSpritePal(0, 4, (void*)piece_Pal); //palette pour la piece AS_Init(AS_MODE_16CH); //son AS_SetDefaultSettings(AS_PCM_8BIT, 8000, 0); //son (type,rate) AS_SoundDefaultPlay(fond_smgboss1, fond_smgboss1_size, 50, 64, true, 0); //musique de fond en boucle //Accueil accueil: fonduentree(); //fondu d'entrée PA_LoadBackground(0, 1, &jeu); PA_LoadBackground(1, 1, &titre); if(PA_UserInfo.Language == 2) { PA_OutputText(0, 3, 6, "Le but est d'appuyer"); PA_OutputText(0, 3, 7, "sur les boutons le"); PA_OutputText(0, 3, 8, "plus vite possible."); PA_OutputText(0, 3, 9, "Quand vous appuyez sur"); PA_OutputText(0, 3, 10, "un bouton, votre score"); PA_OutputText(0, 3, 11, "augmente de un."); PA_OutputText(0, 3, 16, "Appuyez sur un bouton"); PA_OutputText(0, 3, 17, "pour commencer !"); } else { PA_OutputText(0, 3, 6, "The aim is to press the"); PA_OutputText(0, 3, 7, "buttons as fast as you can."); PA_OutputText(0, 3, 8, "When a button is pressed,"); PA_OutputText(0, 3, 9, "it add 1 point to"); PA_OutputText(0, 3, 10, "your score."); PA_OutputText(0, 3, 16, "Press any button to start !"); } PA_WaitFor(Pad.Newpress.Anykey || Stylus.Newpress); //Variables u32 coups = 0; //A vos marques, pret, partez ! PA_ClearTextBg(0); //efface tout le texte du bas PA_VBLCounterStart(0); // compteur //A vos marques AS_SoundQuickPlay(un); PA_CreateSprite(0, 0, (void*)feu_Sprite, OBJ_SIZE_32X64, 1, 1, 200, 30); //feu, sprite 0 if(PA_UserInfo.Language == 2) { PA_OutputText(0, 3, 6, "A vos marques..."); } else { PA_OutputText(0, 3, 6, "Ready ?"); } PA_WaitFor(PA_VBLCounter[0]/60 == 2); //Pret AS_SoundQuickPlay(deux); PA_SetSpriteAnim(0, 0, 2); if(PA_UserInfo.Language == 2) { PA_OutputText(0, 3, 8, "Prêt ?"); } else { PA_OutputText(0, 3, 8, "Steady..."); } PA_WaitFor(PA_VBLCounter[0]/60 == 4); //Partez AS_SoundQuickPlay(trois); PA_SetSpriteAnim(0, 0, 1); if(PA_UserInfo.Language == 2) { PA_OutputText(0, 3, 10, "Partez !"); } else { PA_OutputText(0, 3, 10, "Go !"); } PA_WaitFor(PA_VBLCounter[0]/60 == 6); PA_ClearTextBg(0); //efface tout le texte du bas PA_DeleteSprite(0, 0); PA_CreateSprite(0, 1, (void*)mario_Sprite, OBJ_SIZE_32X32, 1, 2, 100, 100); //mario, sprite 1 avec palette 2 PA_CreateSprite(0, 2, (void*)boite_Sprite, OBJ_SIZE_16X16, 1, 3, 110, 84); //boite, sprite 2 avec palette 3 PA_CreateSprite(0, 3, (void*)piece_Sprite, OBJ_SIZE_8X16, 1, 4, 114, 68); //boite, sprite 2 avec palette 3 PA_VBLCounterStart(1); //compteur pour la partie à venir while(1) { PA_OutputText(0, 3, 7, "Score : %d", coups); if(PA_UserInfo.Language == 2) { PA_OutputText(0, 3, 6, "Partie en cours..."); PA_OutputText(0, 3, 8, "Temps : %d ", 20-(PA_VBLCounter[1]/60)); } else { PA_OutputText(0, 3, 6, "Game in progress..."); PA_OutputText(0, 3, 8, "Time : %d ", 20-(PA_VBLCounter[1]/60)); } //Incrémentation du score si la partie n'est pas fini if((Pad.Newpress.A || Pad.Newpress.B || Pad.Newpress.X || Pad.Newpress.Y || Pad.Newpress.L || Pad.Newpress.R || Stylus.Newpress || Pad.Newpress.Left || Pad.Newpress.Right || Pad.Newpress.Up || Pad.Newpress.Down) && PA_VBLCounter[1]/60 < 20) { PA_SetSpriteAnim(0, 1, 1); //fait sauter mario PA_SetSpriteAnim(0, 3, 1); //fait apparaitre une piece coups++; } //Lors du relachement des touches/stylet, les sprites reviennent a la normale if(Pad.Released.Anykey || Stylus.Released) { PA_SetSpriteAnim(0, 1, 0);//mario revient au sol PA_SetSpriteAnim(0, 3, 0); //et la piece disparait } //Fin de la partie if(PA_VBLCounter[1]/60 == 20) { //On efface le txt et les sprites PA_ClearTextBg(0); PA_DeleteSprite(0, 1); PA_DeleteSprite(0, 2); PA_DeleteSprite(0, 3); if(PA_UserInfo.Language == 2) { PA_OutputText(0, 3, 6, "Partie terminée !"); PA_OutputText(0, 3, 7, "Votre score : %d", coups); PA_OutputText(0, 3, 9, "Appuyez sur une touche"); PA_OutputText(0, 3, 10, "pour rejouer..."); } else { PA_OutputText(0, 3, 6, "End of the game !"); PA_OutputText(0, 3, 7, "Your score : %d", coups); PA_OutputText(0, 3, 9, "Press a button to"); PA_OutputText(0, 3, 10, "replay..."); } PA_WaitFor(PA_VBLCounter[1]/60 == 22); PA_WaitFor(Pad.Newpress.Anykey || Stylus.Newpress); goto accueil; } PA_CheckLid(); PA_WaitForVBL(); } return 0; }
void CDeck::discardCard(const typecard card, const bool discarded) { m_cardfrequency[card]++; // Delete the previously played card sprite at the top screen PA_DeleteSprite(1, SPRITE_NB_EMPTYCARD_PART2); PA_DeleteSprite(1, SPRITE_NB_EMPTYCARD_PART1); // Create a sprite for the card that has been discarded at the top screen switch (card.first) { case 0: switch (card.second) { case 0: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)attack1_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)attack1_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)attack1_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 1: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)attack2_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)attack2_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)attack2_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 2: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)attack3_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)attack3_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)attack3_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 3: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)attack4_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)attack4_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)attack4_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 4: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)attack5_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)attack5_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)attack5_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 5: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)attack6_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)attack6_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)attack6_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 6: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)attack7_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)attack7_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)attack7_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 7: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)attack8_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)attack8_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)attack8_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 8: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)attack9_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)attack9_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)attack9_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 9: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)attack10_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)attack10_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)attack10_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; default: PA_OutputText(1,0,0,"This card number does not exist."); break; } break; case 1: switch (card.second) { case 0: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)defense1_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)defense1_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)defense1_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 1: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)defense2_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)defense2_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)defense2_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 2: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)defense3_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)defense3_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)defense3_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 3: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)defense4_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)defense4_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)defense4_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 4: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)defense5_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)defense5_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)defense5_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 5: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)defense6_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)defense6_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)defense6_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 6: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)defense7_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)defense7_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)defense7_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 7: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)defense8_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)defense8_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)defense8_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 8: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)defense9_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)defense9_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)defense9_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 9: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)defense10_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)defense10_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)defense10_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; default: PA_OutputText(1,0,0,"This card number does not exist."); break; } break; case 2: switch (card.second) { case 0: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)magic1_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)magic1_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)magic1_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 1: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)magic2_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)magic2_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)magic2_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 2: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)magic3_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)magic3_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)magic3_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 3: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)magic4_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)magic4_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)magic4_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 4: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)magic5_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)magic5_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)magic5_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 5: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)magic6_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)magic6_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)magic6_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 6: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)magic7_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)magic7_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)magic7_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 7: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)magic8_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)magic8_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)magic8_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 8: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)magic9_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)magic9_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)magic9_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; case 9: PA_LoadSpritePal(1, PALETTE_NB_LAST_PLAYED_CARD, (void*)magic10_Pal); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART1, (void*)magic10_1_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1); PA_CreateSprite(1, SPRITE_NB_EMPTYCARD_PART2, (void*)magic10_2_Sprite, OBJ_SIZE_64X64, 1, PALETTE_NB_LAST_PLAYED_CARD, 129, 1+45); break; default: PA_OutputText(1,0,0,"This card number does not exist."); break; } break; default: PA_OutputText(1,0,0,"This card type does not exist."); break; } PA_SetSpritePrio (1, SPRITE_NB_BACKCARD_PART1, 2); PA_SetSpritePrio (1, SPRITE_NB_BACKCARD_PART2, 2); PA_SetSpritePrio (1, SPRITE_NB_EMPTYCARD_PART1, 2); PA_SetSpritePrio (1, SPRITE_NB_EMPTYCARD_PART2, 2); // Set the sprite's mode to alpha blending if the card is discarded if (discarded) { PA_SetSpriteMode(1, SPRITE_NB_EMPTYCARD_PART1, 1); PA_SetSpriteMode(1, SPRITE_NB_EMPTYCARD_PART2, 1); } else { PA_SetSpriteMode(1, SPRITE_NB_EMPTYCARD_PART1, 0); PA_SetSpriteMode(1, SPRITE_NB_EMPTYCARD_PART2, 0); } }
/** * Inits things for the game */ void init() { // Init PA PA_Init(); PA_InitVBL(); // Init Sound PA_InitSound(); // Init Text PA_InitText(SCREEN_TOP, 0); // debug(); // Roll pre-game credits if(false) { // Code I wish I could put into rollPreCredits(); u8 counter=0; // used to count till timeout // Text clear_text(); print(5,3,PRECREDITS); // logo on bottom screen PA_EasyBgLoad(SCREEN_BOTTOM,3, splash_pong); // Wait & fade out counter = 0; PA_WaitFor(Pad.Newpress.A || Pad.Newpress.Start || Stylus.Newpress || counter++>IDLETIME); fadeOut(); // run DSX/Comp screen PA_EasyBgLoad(SCREEN_TOP, 3, splash_comp); PA_EasyBgLoad(SCREEN_BOTTOM,3, splash_comp2); // Wait & fade out counter = 0; PA_WaitFor(Pad.Newpress.A || Pad.Newpress.Start || Stylus.Newpress || counter++>IDLETIME); fadeOut(); // run PA_Lib & Eclipse screens PA_EasyBgLoad(SCREEN_TOP, 3, splash_palib); PA_EasyBgLoad(SCREEN_BOTTOM,3, splash_eclipse); // Wait & fade out counter = 0; PA_WaitFor(Pad.Newpress.A || Pad.Newpress.Start || Stylus.Newpress || counter++>IDLETIME); fadeOut(); //rollPreCredits(); } PA_InitText(SCREEN_TOP, 0); PA_SetTextCol(SCREEN_TOP, 0, 0, 0); // Some variables game.smartAI = 0; game.score = 0; game.lives = 3; game.rank = ""; game.gameover = false; // Load Palletes PA_LoadSpritePal(SCREEN_TOP, 1, (void*)ball_Pal); PA_LoadSpritePal(SCREEN_BOTTOM, 2, (void*)ball_Pal); PA_LoadSpritePal(SCREEN_TOP, 3, (void*)paddle_a_Pal); PA_LoadSpritePal(SCREEN_BOTTOM, 4, (void*)paddle_b_Pal); // create sprites PA_CreateSprite(SCREEN_BOTTOM, BALL_BOTTOM, (void*)ball_Sprite, OBJ_SIZE_16X16, 1, 1, -BALL_WIDTH, -BALL_HEIGHT); PA_CreateSprite(SCREEN_TOP, BALL_TOP, (void*)ball_Sprite, OBJ_SIZE_16X16, 1, 2, -BALL_WIDTH, -BALL_HEIGHT); PA_CreateSprite(SCREEN_BOTTOM, PADDLE1, (void*)paddle_a_Sprite, OBJ_SIZE_32X16, 1, 3, -PADDLE_WIDTH, -PADDLE_HEIGHT); PA_CreateSprite(SCREEN_TOP, PADDLE2, (void*)paddle_b_Sprite, OBJ_SIZE_32X16, 1, 4, -PADDLE_WIDTH, -PADDLE_HEIGHT); // create backgrounds PA_EasyBgLoad(SCREEN_TOP, 2, background_top); PA_EasyBgLoad(SCREEN_BOTTOM, 2, background_bottom); // Init high score to 0. (Should probably read from a save) highscore.points = 0; highscore.name = "No one"; highscore.submitted = false; }