Beispiel #1
0
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;
}
Beispiel #2
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()
Beispiel #3
0
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
Beispiel #4
0
// 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;
}
Beispiel #5
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;
}
Beispiel #6
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;
}
Beispiel #7
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);	 
}
Beispiel #9
0
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);
}
Beispiel #10
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;
}
Beispiel #11
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()
Beispiel #12
0
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
}
Beispiel #13
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, 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;
}
Beispiel #14
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));
	}
}
Beispiel #15
0
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++;
			}
		}
}
Beispiel #16
0
// 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;
}
Beispiel #17
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);
}
Beispiel #18
0
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));
		}
}
Beispiel #19
0
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;
}
Beispiel #20
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);
}
Beispiel #21
0
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;
}
Beispiel #22
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;
}
Beispiel #23
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;
}
Beispiel #24
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)) );
	}
}
Beispiel #25
0
//------------------------------------------------------------
//------------------------------------------------------------
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;
}
Beispiel #26
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]);
}
Beispiel #27
0
// 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;
}
Beispiel #28
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;
}
Beispiel #29
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);
  }
}
Beispiel #30
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;
}