コード例 #1
0
ファイル: combat_init.cpp プロジェクト: ultravolt/SAIS
void combat_deinitsprites()
{
	free_spritepak(spr_ships);
	free_spritepak(spr_shipsilu);
	free_spritepak(spr_weapons);
	free_spritepak(spr_explode1);
	free_spritepak(spr_shockwave);
	free_spritepak(spr_shield);

	del_image(combatbg1);
	del_image(combatbg2);
}
コード例 #2
0
ファイル: scm-scene.cpp プロジェクト: rlk/scm
scm_scene::~scm_scene()
{
    scm_log("scm_scene destructor");

    while (get_image_count())
        del_image(0);

    if (label)
        delete label;
}
コード例 #3
0
ファイル: startgame.cpp プロジェクト: ultravolt/SAIS
int32 startgame()
{
	int32 end;
	int32 c, mc;
	int32 bx=192, by=88, h=300;
	int32 y;
	int32 upd=1;
	int32 mx, my;
	int32 cn=0;
	int32 ti, ot;
	t_ik_image *bg;
	char name[32];

	loadconfig();

	start_ik_timer(1, 31);
	while (get_ik_timer(1) < 2 && !must_quit)
	{
		ik_eventhandler();
	}
	Play_Sound(WAV_MUS_TITLE, 15, 1, 100, 22050,-1000);
	while (get_ik_timer(1) < 4 && !must_quit)
	{
		ik_eventhandler();
	}
	Play_Sound(WAV_MUS_TITLE, 14, 1, 80, 22050, 1000);


	if (settings.random_names & 1)
		strcpy(settings.captname, captnames[rand()%num_captnames]);

	if (settings.random_names & 2)
		strcpy(settings.shipname, shipnames[rand()%num_shipnames]);

	bg = ik_load_pcx("graphics/starback.pcx", NULL);

	end = 0; ti = get_ik_timer(2);
	while (!end && !must_quit)
	{
		ik_eventhandler();
		c = ik_inkey();
		mc = ik_mclick();
		mx = ik_mouse_x - bx; 
		my = ik_mouse_y - by;

		ot = ti;
		ti = get_ik_timer(2);
		if (ti != ot)
		{
			prep_screen();
			ik_blit();
		}

		if (c==13 || c==32)
			end = 2;
		if ((mc & 1) && mx > 0 && mx < 240)
		{
			if (my > h-24 && my < h-8) // buttons
			{
				if (mx > 16 && mx < 64) // cancel
					end = 1;
				else if (mx > 176 && mx < 224) // ok
				{	end = 2; Play_SoundFX(WAV_DOT); }
			}
			else if (my > 32 && my < 40) // captain
			{
				if (mx < 216)
				{
					cn |= 1;
					prep_screen();
					ik_drawbox(screen, bx+70, by+32, bx+215, by+39, STARMAP_INTERFACE_COLOR*16+3);
					ik_blit();
					strcpy(name, settings.captname);
					ik_text_input(bx+70, by+32, 14, font_6x8, "", name, STARMAP_INTERFACE_COLOR*16+3, STARMAP_INTERFACE_COLOR);
					if (strlen(name)>0)
						strcpy(settings.captname, name);
				}
				else
				{
					settings.random_names ^= 1;
					Play_SoundFX(WAV_LOCK,0);
				}
				upd = 1;must_quit=0;
			}
			else if (my > 40 && my < 48) // ship
			{
				if (mx < 216)
				{
					cn |= 2;
					prep_screen();
					ik_drawbox(screen, bx+70, by+40, bx+215, by+47, STARMAP_INTERFACE_COLOR*16+3);
					ik_blit();
					strcpy(name, settings.shipname);
					ik_text_input(bx+70, by+40, 14, font_6x8, "", name, STARMAP_INTERFACE_COLOR*16+3, STARMAP_INTERFACE_COLOR);
					if (strlen(name)>0)
						strcpy(settings.shipname, name);
				}
				else
				{
					settings.random_names ^= 2;
					Play_SoundFX(WAV_LOCK,0);
				}
				upd = 1;must_quit=0;
			}
			else if (my > 64 && my < 96)	// ship
			{
				settings.dif_ship = (mx - 16)/72;
				Play_SoundFX(WAV_SLIDER,0);
				upd = 1; 
			}
			else if (my > 112 && my < 176) // nebula
			{
				settings.dif_nebula = (mx - 16)/72;
				Play_SoundFX(WAV_SLIDER,0);
				upd = 1; 
			}
			else if (my > 192 && my < 224) // enemies
			{
				settings.dif_enemies = (mx - 16)/72;
				Play_SoundFX(WAV_SLIDER,0);
				upd = 1; 
			}
			else if (my > 232 && my < 240)	// easy/hard
			{
				c = (mx-40)/32; 
				if (c < 0) c=0;
				if (c > 4) c=4;
				settings.dif_nebula = (c+1)/2;
				settings.dif_enemies = c/2;
				upd = 1;
				Play_SoundFX(WAV_SLIDER,0);
			}
			else if (my > 256 && my < 264)	// enable tutorial
			{
				if (mx > 16 && mx < 24)
				{
					settings.random_names ^= 4;
					Play_SoundFX(WAV_LOCK,0);
					upd = 1;
				}
			}
		}
		if (upd)
		{
			upd = 0;
			prep_screen();
			ik_copybox(bg, screen, 0, 0, 640, 480, 0,0);

			y = by+16;
			interface_drawborder(screen, bx, by, bx+240, by+h, 1, STARMAP_INTERFACE_COLOR, "Start new adventure");
			ik_print(screen, font_6x8, bx+16, y+=8, 0, textstring[STR_STARTGAME_IDENTIFY]);
			ik_print(screen, font_6x8, bx+16, y+=8, 0, textstring[STR_STARTGAME_CAPTAIN]);
			ik_print(screen, font_6x8, bx+70, y, 3, settings.captname);
			if (!(cn&1))
				ik_print(screen, font_4x8, bx+216-strlen(textstring[STR_STARTGAME_RENAME])*4, y, 3, textstring[STR_STARTGAME_RENAME]);
			ik_dsprite(screen, bx+216, y, spr_IFslider->spr[8+(settings.random_names&1)], 2+((3-3*(settings.random_names&1))<<8));

			ik_print(screen, font_6x8, bx+16, y+=8, 0, textstring[STR_STARTGAME_STARSHIP]);
			ik_print(screen, font_6x8, bx+70, y, 3, settings.shipname);
			if (!(cn&2))
				ik_print(screen, font_4x8, bx+216-strlen(textstring[STR_STARTGAME_RENAME])*4, y, 3, textstring[STR_STARTGAME_RENAME]);
			ik_dsprite(screen, bx+216, y, spr_IFslider->spr[8+(settings.random_names&2)/2], 2+((3-3*(settings.random_names&2)/2)<<8));

			ik_print(screen, font_6x8, bx+16, y+=16, 0, textstring[STR_STARTGAME_LOADOUT], textstring[STR_STARTGAME_LOADOUT1+settings.dif_ship]);
			y += 8;
			for (c = 0; c < 3; c++)
			{
				ik_dsprite(screen, bx+16+c*72, y, spr_IFdifenemy->spr[c+3], 0);
				ik_dsprite(screen, bx+16+c*72, y, spr_IFborder->spr[20], 2+(3<<8)*(c==settings.dif_ship));
			}

			ik_print(screen, font_6x8, bx+16, y+=40, 0, textstring[STR_STARTGAME_NEBULA]);
			y += 8;
			for (c = 0; c < 3; c++)
			{
				ik_dsprite(screen, bx+16+c*72, y, spr_IFdifnebula->spr[c], 0);
				ik_dsprite(screen, bx+16+c*72, y, spr_IFborder->spr[18], 2+(3<<8)*(c==settings.dif_nebula));
			}

			ik_print(screen, font_6x8, bx+16, y+=72, 0, textstring[STR_STARTGAME_ENEMIES]);
			y += 8;
			for (c = 0; c < 3; c++)
			{
				ik_dsprite(screen, bx+16+c*72, y, spr_IFdifenemy->spr[c], 0);
				ik_dsprite(screen, bx+16+c*72, y, spr_IFborder->spr[20], 2+(3<<8)*(c==settings.dif_enemies));
			}

			y+=40;
			ik_print(screen, font_6x8, bx+16, y, 0, textstring[STR_STARTGAME_EASY]);
			ik_print(screen, font_6x8, bx+224-6*strlen(textstring[STR_STARTGAME_HARD]), y, 0, textstring[STR_STARTGAME_HARD]);
			ik_print(screen, font_6x8, bx+16, y+12, 0, textstring[STR_STARTGAME_LOSCORE]);
			ik_print(screen, font_6x8, bx+224-6*strlen(textstring[STR_STARTGAME_HISCORE]), y+12, 0, textstring[STR_STARTGAME_HISCORE]);
			interface_drawslider(screen, bx+56, y, 0, 128, 4, settings.dif_enemies+settings.dif_nebula, STARMAP_INTERFACE_COLOR);

			y+=24;
			ik_dsprite(screen, bx+12, y-5, spr_IFbutton->spr[(settings.random_names&4)>0], 0);
			ik_print(screen, font_6x8, bx+32, y, 0, "TUTORIAL MODE");


			interface_drawbutton(screen, bx+16, by+h-24, 48, STARMAP_INTERFACE_COLOR, textstring[STR_CANCEL]);
			interface_drawbutton(screen, bx+240-64, by+h-24, 48, STARMAP_INTERFACE_COLOR, textstring[STR_OK]);

			ik_blit();
			update_palette();
		}
	}

	interface_cleartuts();

	if (must_quit)
		end = 1;

	if (settings.opt_mucrontext & 1)
	{


	if (end > 1)
	{
		bx = 192; by = 72; h = 328;
		by = 220 - h/2;

		prep_screen();
		ik_copybox(bg, screen, 0, 0, 640, 480, 0,0);

		y = 3;
		interface_drawborder(screen, bx, by, bx+256, by+h, 1, STARMAP_INTERFACE_COLOR, textstring[STR_STARTGAME_TITLE1]);
		y +=  1 + interface_textbox(screen, font_6x8, bx+84, by+y*8, 160, 88, 0, 
								textstring[STR_STARTGAME_MUCRON1]);
		y +=  1 + interface_textbox(screen, font_6x8, bx+16, by+y*8, 224, 88, 0, 
								textstring[STR_STARTGAME_MUCRON2]);
		y +=  1 + interface_textbox(screen, font_6x8, bx+16, by+y*8, 224, 88, 0, 
								textstring[STR_STARTGAME_MUCRON3]);
		y +=  1 + interface_textbox(screen, font_6x8, bx+16, by+y*8, 224, 88, 0, 
								textstring[STR_STARTGAME_MUCRON4]);
		interface_drawbutton(screen, bx+256-64, by+h-24, 48, STARMAP_INTERFACE_COLOR, textstring[STR_OK]);
		ik_dsprite(screen, bx+16, by+24, spr_SMraces->spr[race_unknown], 0);
		ik_dsprite(screen, bx+16, by+24, spr_IFborder->spr[18], 2+(STARMAP_INTERFACE_COLOR<<8));

		ik_blit();
		update_palette();
		end = waitclick(bx+256-64, by+h-24, bx+256-16, by+h-8);
	}

	if (end > 1)
	{
		bx = 192; by = 96; h = 168;
		by = 220 - h/2;

		prep_screen();
		ik_copybox(bg, screen, 0, 0, 640, 480, 0,0);

		y = 3;
		interface_drawborder(screen, bx, by, bx+256, by+h, 1, STARMAP_INTERFACE_COLOR, textstring[STR_STARTGAME_TITLE2]);
		y +=  1 + interface_textbox(screen, font_6x8, bx+84, by+y*8, 160, 88, 0, 
								textstring[STR_STARTGAME_MUCRON5]);
		y +=  1 + interface_textbox(screen, font_6x8, bx+16, by+y*8, 224, 88, 0, 
								textstring[STR_STARTGAME_MUCRON6]);
		interface_drawbutton(screen, bx+256-64, by+h-24, 48, STARMAP_INTERFACE_COLOR, textstring[STR_OK]);
		ik_dsprite(screen, bx+16, by+24, spr_IFdifnebula->spr[1], 0);
		ik_dsprite(screen, bx+16, by+24, hulls[shiptypes[0].hull].sprite, 0);
		ik_dsprite(screen, bx+16, by+24, spr_IFborder->spr[18], 2+(STARMAP_INTERFACE_COLOR<<8));

		ik_blit();
		update_palette();
		end = waitclick(bx+256-64, by+h-24, bx+256-16, by+h-8);
	}



	if (end > 1)
	{
		bx = 192; by = 120; h = 112;
		by = 220 - h/2;

		prep_screen();
		ik_copybox(bg, screen, 0, 0, 640, 480, 0,0);

		y = 3;
		interface_drawborder(screen, bx, by, bx+256, by+h, 1, STARMAP_INTERFACE_COLOR, textstring[STR_STARTGAME_TITLE3]);
		y +=  1 + interface_textbox(screen, font_6x8, bx+84, by+y*8, 160, 88, 0, 
								textstring[STR_STARTGAME_MUCRON7]);
		interface_drawbutton(screen, bx+256-64, by+h-24, 48, STARMAP_INTERFACE_COLOR, textstring[STR_OK]);
		ik_dsprite(screen, bx+16, by+24, spr_SMraces->spr[RC_PLANET], 4);
		ik_dsprite(screen, bx+16, by+24, spr_IFborder->spr[18], 2+(STARMAP_INTERFACE_COLOR<<8));

		ik_blit();
		update_palette();
		end = waitclick(bx+256-64, by+h-24, bx+256-16, by+h-8);
	}

	}

	del_image(bg);

	if (end > 1)
	{
		starmap_create();
		player_init();
	}

	saveconfig();
	
	return end-1;
}
コード例 #4
0
ファイル: combat_init.cpp プロジェクト: ultravolt/SAIS
void combat_initsprites()
{
	t_ik_image *pcx;	
	int x, y, n; 

	spr_ships = load_sprites("graphics/ships.spr");
	spr_shipsilu = load_sprites("graphics/shipsilu.spr");
	spr_weapons = load_sprites("graphics/weapons.spr");
	spr_explode1 = load_sprites("graphics/explode1.spr");
	spr_shockwave = load_sprites("graphics/shockwav.spr");
	spr_shield = load_sprites("graphics/shield.spr");

	combatbg1 = ik_load_pcx("graphics/combtbg1.pcx", NULL);
	combatbg2 = ik_load_pcx("graphics/combtbg2.pcx", NULL);

	if (!spr_ships)
	{
		spr_ships = new_spritepak(24);
		pcx = ik_load_pcx("ships.pcx", NULL);
		for (n=0;n<24;n++)

		{
			x = n%5; y = n/5;
			spr_ships->spr[n] = get_sprite(pcx, x*64, y*64, 64, 64);
		}

		del_image(pcx);
		save_sprites("graphics/ships.spr", spr_ships);
	}

	if (!spr_shipsilu)
	{
		spr_shipsilu = new_spritepak(24);
		pcx = ik_load_pcx("silu.pcx", NULL);
		for (n=0;n<24;n++)

		{
			x = n%5; y = n/5;
			spr_shipsilu->spr[n] = get_sprite(pcx, x*128, y*128, 128, 128);
		}

		del_image(pcx);
		save_sprites("graphics/shipsilu.spr", spr_shipsilu);
	}

	if (!spr_weapons)
	{
		spr_weapons = new_spritepak(19);
		pcx = ik_load_pcx("weaponfx.pcx", NULL);

		for (n=0;n<5;n++)
		{
			spr_weapons->spr[n] = get_sprite(pcx, n*32, 0, 32, 32);
		}
		for (n=0;n<5;n++)
		{
			spr_weapons->spr[n+5] = get_sprite(pcx, n*32, 32, 32, 32);
		}
		for (n=0;n<4;n++)
		{
			spr_weapons->spr[n+10] = get_sprite(pcx, n*32, 64, 32, 32);
		}
		spr_weapons->spr[14] = get_sprite(pcx, 192, 64, 128, 128);
		spr_weapons->spr[15] = get_sprite(pcx, 0, 96, 32, 32);
		spr_weapons->spr[16] = get_sprite(pcx, 160, 0, 32, 32);
		spr_weapons->spr[17] = get_sprite(pcx, 128, 64, 32, 32); 
		spr_weapons->spr[18] = get_sprite(pcx, 32, 96, 32, 32); 

		del_image(pcx);
		save_sprites("graphics/weapons.spr", spr_weapons);
	}

	if (!spr_explode1)
	{
		spr_explode1 = new_spritepak(10);
		pcx = ik_load_pcx("xplosion.pcx", NULL);
		
		for (n=0; n<10; n++)
		{
			x = n%5; y = n/5;
			spr_explode1->spr[n] = get_sprite(pcx, x*64, y*64, 64, 64);
		}

		del_image(pcx);
		save_sprites("graphics/explode1.spr", spr_explode1);
	}

	if (!spr_shockwave)
	{
		spr_shockwave = new_spritepak(5);
		pcx = ik_load_pcx("shock.pcx", NULL);
		
		for (n=0; n<5; n++)
		{
			spr_shockwave->spr[n] = get_sprite(pcx, (n%3)*128, (n/3)*128, 128, 128);
		}

		del_image(pcx);
		save_sprites("graphics/shockwav.spr", spr_shockwave);
	}

	if (!spr_shield)
	{
		spr_shield = new_spritepak(5);
		pcx = ik_load_pcx("shields.pcx", NULL);
		
		for (n=0; n<5; n++)
		{
			spr_shield->spr[n] = get_sprite(pcx, n*128, 0, 128, 128);
		}

		del_image(pcx);
		save_sprites("graphics/shield.spr", spr_shield);
	}

}
コード例 #5
0
void chargement_jeu(SEcran **ptr_e, SEntite **entites)
{
    int cont = 1, choix = 1;
    SEcran *ecran_ch = new_ecran(NB_COLONNES, NB_LIGNES);
    SImage *v1, *v2, *s1, *s2, *d1, *d2, *d3;

    v1 = new_image(3, 3, "=\\`oX>=/`"); // Vaisseau 1
    s1 = new_image(3, 3, "21 32221 ");
    v2 = new_image(3, 3, "#=-#> #=-");  // Vaisseau 2
    s2 = new_image(3, 3, "44455 444");
    d3 = new_image(8, 5, "  ____   /    \\ | o  O | \\ '' /   ||||  ");
    d2 = new_image(8, 5, "\\X\\  /X/ \\X\\/X/   >XX<   /X/\\X\\ /X/  \\X\\");
    d1 = new_image(8, 5, "   ||      ||      ||      ||      ||   ");
    etat_jeu.largeur_ecran = NB_COLONNES;
    etat_jeu.hauteur_ecran = NB_LIGNES;

    // Initialisation de l'écran
    // Un pointeur sur pointeur a du être utilisé puisqu'on modifie ici la valeur d'un pointeur sur SEcran.
    *ptr_e = new_ecran(etat_jeu.largeur_ecran, etat_jeu.hauteur_ecran);

    // Initialisation des variables globales
    etat_jeu.fin=0;
    etat_jeu.score=0;
    etat_jeu.etape=0;
    etat_jeu.nb_entites=0;//DEBUG
    etat_jeu.combo=0;
    etat_jeu.dec_combo=0;
    etat_jeu.coef_vitesse=1.0;
    etat_jeu.coef_vie=1.0;
    etat_jeu.stat_nb_tir = 0;

    // Choix du vaisseau
    while(cont)
    {
        // Affichage du titre
        clr_ecran(ecran_ch);
        mv_curseur(ecran_ch, 0, 0);
        afficher_contour(ecran_ch);
        mv_curseur(ecran_ch, etat_jeu.largeur_ecran/6, 1);
        afficher_str(ecran_ch, "Choisissez votre vaisseau, guerrier intergalactique !");
        // Affichage des vaisseaux
        mv_curseur(ecran_ch, NB_COLONNES/4, 6);
        blit_image(ecran_ch, v1);
        mv_curseur(ecran_ch, NB_COLONNES*3/4-5, 6);
        blit_image(ecran_ch, v2);
        // Affichage du curseur
        if(choix == 1)
            mv_curseur(ecran_ch, NB_COLONNES*1/4+1, 10);
        else
            mv_curseur(ecran_ch, NB_COLONNES*3/4-4, 10);
        afficher_char(ecran_ch, 'X');
        // Affichage des infos
        mv_curseur(ecran_ch, NB_COLONNES/4-5, 12);
        afficher_str(ecran_ch, "Vaisseau : resistant");
        mv_curseur(ecran_ch, NB_COLONNES/4-5, 13);
        afficher_str(ecran_ch, "Arme : missiles");
        mv_curseur(ecran_ch, NB_COLONNES*3/4-10, 12);
        afficher_str(ecran_ch, "Vaisseau : vulnerable");
        mv_curseur(ecran_ch, NB_COLONNES*3/4-10, 13);
        afficher_str(ecran_ch, "Arme : lasers");
        mv_curseur(ecran_ch, NB_COLONNES*3/4-15, 14);
        afficher_str(ecran_ch, "(puissante mais detruit les bonus)");
        actualiser_ecran(ecran_ch);

        // Gestion du clavier pour choisir entre deux choix :
        cont = gestion_clavier_menuchoix(&choix, 2);

        delais_ms(10);
    }

    // Initialisation du joueur
    etat_jeu.ijoueur = new_entite(entites, 3, 3);
    entites[etat_jeu.ijoueur]->vie = 5 * etat_jeu.coef_vie;
    entites[etat_jeu.ijoueur]->x = 4;
    entites[etat_jeu.ijoueur]->y = 8;
    entites[etat_jeu.ijoueur]->mort = mort_joueur;
    entites[etat_jeu.ijoueur]->niv_arme = 1;

    if(choix == 1)
    {
        entites[etat_jeu.ijoueur]->type_arme = ARME_MISSILE;
        entites[etat_jeu.ijoueur]->img = v1;
        entites[etat_jeu.ijoueur]->shape = s1;
        del_image(v2);
        del_image(s2);
    }
    else
    {
        entites[etat_jeu.ijoueur]->type_arme = ARME_LASER;
        entites[etat_jeu.ijoueur]->img = v2;
        entites[etat_jeu.ijoueur]->shape = s2;
        del_image(v1);
        del_image(s1);
    }

    // Chargement des murs
    chargement_murs();

    // Initialisation nombre aléatoires
    srand(time(NULL));

    // Choix de la difficulte
    cont = choix = 1;
    while(cont)
    {
        // Affichage du titre
        clr_ecran(ecran_ch);
        mv_curseur(ecran_ch, 0, 0);
        afficher_contour(ecran_ch);
        mv_curseur(ecran_ch, etat_jeu.largeur_ecran/6, 1);
        afficher_str(ecran_ch, "Quelle sera la difficulte de votre mission ?");

        // Affichage des difficultes
        mv_curseur(ecran_ch, NB_COLONNES/4-4, 6);
        blit_image(ecran_ch, d1);
        mv_curseur(ecran_ch, NB_COLONNES*2/4-4, 6);
        blit_image(ecran_ch, d2);
        mv_curseur(ecran_ch, NB_COLONNES*3/4-4, 6);
        blit_image(ecran_ch, d3);

        // Affichage du curseur
        mv_curseur(ecran_ch, NB_COLONNES*choix/4, 12);
        afficher_char(ecran_ch, 'X');

        // Affichage des informations
        mv_curseur(ecran_ch, NB_COLONNES/4-3, 14);
        afficher_str(ecran_ch, "Newbie ");
        mv_curseur(ecran_ch, NB_COLONNES*2/4-8, 14);
        afficher_str(ecran_ch, "Hardcore G4m3rZ");
        mv_curseur(ecran_ch, NB_COLONNES*3/4-4, 14);
        afficher_str(ecran_ch, "God-like");


        actualiser_ecran(ecran_ch);

        // Gestion du clavier pour choisir entre deux choix :
        cont = gestion_clavier_menuchoix(&choix, 3);

        delais_ms(10);
    }
    // Réglages de difficulté
    etat_jeu.difficulte = choix;
    if(etat_jeu.difficulte>=2)
    {
        etat_jeu.coef_vitesse=1.2;
    }
    if(etat_jeu.difficulte==3)
    {
        etat_jeu.coef_vie=2;
    }

}