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); }
scm_scene::~scm_scene() { scm_log("scm_scene destructor"); while (get_image_count()) del_image(0); if (label) delete label; }
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; }
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); } }
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; } }