-
-/* Load graphics/sounds shared between all levels: */
-
-void loadshared(void)
-{
- int i;
-
- /* Tuxes: */
- texture_load(&tux_right[0], datadir + "/images/shared/tux-right-0.png", USE_ALPHA);
- texture_load(&tux_right[1], datadir + "/images/shared/tux-right-1.png", USE_ALPHA);
- texture_load(&tux_right[2], datadir + "/images/shared/tux-right-2.png", USE_ALPHA);
-
- texture_load(&tux_left[0], datadir + "/images/shared/tux-left-0.png", USE_ALPHA);
- texture_load(&tux_left[1], datadir + "/images/shared/tux-left-1.png", USE_ALPHA);
- texture_load(&tux_left[2], datadir + "/images/shared/tux-left-2.png", USE_ALPHA);
-
- texture_load(&firetux_right[0], datadir + "/images/shared/firetux-right-0.png", USE_ALPHA);
- texture_load(&firetux_right[1], datadir + "/images/shared/firetux-right-1.png", USE_ALPHA);
- texture_load(&firetux_right[2], datadir + "/images/shared/firetux-right-2.png", USE_ALPHA);
-
- texture_load(&firetux_left[0], datadir + "/images/shared/firetux-left-0.png", USE_ALPHA);
- texture_load(&firetux_left[1], datadir + "/images/shared/firetux-left-1.png", USE_ALPHA);
- texture_load(&firetux_left[2], datadir + "/images/shared/firetux-left-2.png", USE_ALPHA);
-
-
- texture_load(&cape_right[0], datadir + "/images/shared/cape-right-0.png",
- USE_ALPHA);
-
- texture_load(&cape_right[1], datadir + "/images/shared/cape-right-1.png",
- USE_ALPHA);
-
- texture_load(&cape_left[0], datadir + "/images/shared/cape-left-0.png",
- USE_ALPHA);
-
- texture_load(&cape_left[1], datadir + "/images/shared/cape-left-1.png",
- USE_ALPHA);
-
- texture_load(&bigtux_right[0], datadir + "/images/shared/bigtux-right-0.png",
- USE_ALPHA);
-
- texture_load(&bigtux_right[1], datadir + "/images/shared/bigtux-right-1.png",
- USE_ALPHA);
-
- texture_load(&bigtux_right[2], datadir + "/images/shared/bigtux-right-2.png",
- USE_ALPHA);
-
- texture_load(&bigtux_right_jump, datadir + "/images/shared/bigtux-right-jump.png", USE_ALPHA);
-
- texture_load(&bigtux_left[0], datadir + "/images/shared/bigtux-left-0.png",
- USE_ALPHA);
-
- texture_load(&bigtux_left[1], datadir + "/images/shared/bigtux-left-1.png",
- USE_ALPHA);
-
- texture_load(&bigtux_left[2], datadir + "/images/shared/bigtux-left-2.png",
- USE_ALPHA);
-
- texture_load(&bigtux_left_jump, datadir + "/images/shared/bigtux-left-jump.png", USE_ALPHA);
-
- texture_load(&bigcape_right[0], datadir + "/images/shared/bigcape-right-0.png",
- USE_ALPHA);
-
- texture_load(&bigcape_right[1], datadir + "/images/shared/bigcape-right-1.png",
- USE_ALPHA);
-
- texture_load(&bigcape_left[0], datadir + "/images/shared/bigcape-left-0.png",
- USE_ALPHA);
-
- texture_load(&bigcape_left[1], datadir + "/images/shared/bigcape-left-1.png",
- USE_ALPHA);
-
- texture_load(&bigfiretux_right[0], datadir + "/images/shared/bigfiretux-right-0.png",
- USE_ALPHA);
-
- texture_load(&bigfiretux_right[1], datadir + "/images/shared/bigfiretux-right-1.png",
- USE_ALPHA);
-
- texture_load(&bigfiretux_right[2], datadir + "/images/shared/bigfiretux-right-2.png",
- USE_ALPHA);
-
- texture_load(&bigfiretux_right_jump, datadir + "/images/shared/bigfiretux-right-jump.png", USE_ALPHA);
-
- texture_load(&bigfiretux_left[0], datadir + "/images/shared/bigfiretux-left-0.png",
- USE_ALPHA);
-
- texture_load(&bigfiretux_left[1], datadir + "/images/shared/bigfiretux-left-1.png",
- USE_ALPHA);
-
- texture_load(&bigfiretux_left[2], datadir + "/images/shared/bigfiretux-left-2.png",
- USE_ALPHA);
-
- texture_load(&bigfiretux_left_jump, datadir + "/images/shared/bigfiretux-left-jump.png", USE_ALPHA);
-
- texture_load(&bigcape_right[0], datadir + "/images/shared/bigcape-right-0.png",
- USE_ALPHA);
-
- texture_load(&bigcape_right[1], datadir + "/images/shared/bigcape-right-1.png",
- USE_ALPHA);
-
- texture_load(&bigcape_left[0], datadir + "/images/shared/bigcape-left-0.png",
- USE_ALPHA);
-
- texture_load(&bigcape_left[1], datadir + "/images/shared/bigcape-left-1.png",
- USE_ALPHA);
-
-
- texture_load(&ducktux_right, datadir +
- "/images/shared/ducktux-right.png",
- USE_ALPHA);
-
- texture_load(&ducktux_left, datadir +
- "/images/shared/ducktux-left.png",
- USE_ALPHA);
-
- texture_load(&skidtux_right, datadir +
- "/images/shared/skidtux-right.png",
- USE_ALPHA);
-
- texture_load(&skidtux_left, datadir +
- "/images/shared/skidtux-left.png",
- USE_ALPHA);
-
- texture_load(&duckfiretux_right, datadir +
- "/images/shared/duckfiretux-right.png",
- USE_ALPHA);
-
- texture_load(&duckfiretux_left, datadir +
- "/images/shared/duckfiretux-left.png",
- USE_ALPHA);
-
- texture_load(&skidfiretux_right, datadir +
- "/images/shared/skidfiretux-right.png",
- USE_ALPHA);
-
- texture_load(&skidfiretux_left, datadir +
- "/images/shared/skidfiretux-left.png",
- USE_ALPHA);
-
-
- /* Boxes: */
-
- texture_load(&img_box_full, datadir + "/images/shared/box-full.png",
- IGNORE_ALPHA);
- texture_load(&img_box_empty, datadir + "/images/shared/box-empty.png",
- IGNORE_ALPHA);
-
-
- /* Water: */
-
-
- texture_load(&img_water, datadir + "/images/shared/water.png", IGNORE_ALPHA);
-
- texture_load(&img_waves[0], datadir + "/images/shared/waves-0.png",
- USE_ALPHA);
-
- texture_load(&img_waves[1], datadir + "/images/shared/waves-1.png",
- USE_ALPHA);
-
- texture_load(&img_waves[2], datadir + "/images/shared/waves-2.png",
- USE_ALPHA);
-
-
- /* Pole: */
-
- texture_load(&img_pole, datadir + "/images/shared/pole.png", USE_ALPHA);
- texture_load(&img_poletop, datadir + "/images/shared/poletop.png",
- USE_ALPHA);
-
-
- /* Flag: */
-
- texture_load(&img_flag[0], datadir + "/images/shared/flag-0.png",
- USE_ALPHA);
- texture_load(&img_flag[1], datadir + "/images/shared/flag-1.png",
- USE_ALPHA);
-
-
- /* Cloud: */
-
- texture_load(&img_cloud[0][0], datadir + "/images/shared/cloud-00.png",
- USE_ALPHA);
-
- texture_load(&img_cloud[0][1], datadir + "/images/shared/cloud-01.png",
- USE_ALPHA);
-
- texture_load(&img_cloud[0][2], datadir + "/images/shared/cloud-02.png",
- USE_ALPHA);
-
- texture_load(&img_cloud[0][3], datadir + "/images/shared/cloud-03.png",
- USE_ALPHA);
-
-
- texture_load(&img_cloud[1][0], datadir + "/images/shared/cloud-10.png",
- USE_ALPHA);
-
- texture_load(&img_cloud[1][1], datadir + "/images/shared/cloud-11.png",
- USE_ALPHA);
-
- texture_load(&img_cloud[1][2], datadir + "/images/shared/cloud-12.png",
- USE_ALPHA);
-
- texture_load(&img_cloud[1][3], datadir + "/images/shared/cloud-13.png",
- USE_ALPHA);
-
-
- /* Bad guys: */
-
- /* (BSOD) */
-
- texture_load(&img_bsod_left[0], datadir +
- "/images/shared/bsod-left-0.png",
- USE_ALPHA);
-
- texture_load(&img_bsod_left[1], datadir +
- "/images/shared/bsod-left-1.png",
- USE_ALPHA);
-
- texture_load(&img_bsod_left[2], datadir +
- "/images/shared/bsod-left-2.png",
- USE_ALPHA);
-
- texture_load(&img_bsod_left[3], datadir +
- "/images/shared/bsod-left-3.png",
- USE_ALPHA);
-
- texture_load(&img_bsod_right[0], datadir +
- "/images/shared/bsod-right-0.png",
- USE_ALPHA);
-
- texture_load(&img_bsod_right[1], datadir +
- "/images/shared/bsod-right-1.png",
- USE_ALPHA);
-
- texture_load(&img_bsod_right[2], datadir +
- "/images/shared/bsod-right-2.png",
- USE_ALPHA);
-
- texture_load(&img_bsod_right[3], datadir +
- "/images/shared/bsod-right-3.png",
- USE_ALPHA);
-
- texture_load(&img_bsod_squished_left, datadir +
- "/images/shared/bsod-squished-left.png",
- USE_ALPHA);
-
- texture_load(&img_bsod_squished_right, datadir +
- "/images/shared/bsod-squished-right.png",
- USE_ALPHA);
-
- texture_load(&img_bsod_falling_left, datadir +
- "/images/shared/bsod-falling-left.png",
- USE_ALPHA);
-
- texture_load(&img_bsod_falling_right, datadir +
- "/images/shared/bsod-falling-right.png",
- USE_ALPHA);
-
-
- /* (Laptop) */
-
- texture_load(&img_laptop_left[0], datadir +
- "/images/shared/laptop-left-0.png",
- USE_ALPHA);
-
- texture_load(&img_laptop_left[1], datadir +
- "/images/shared/laptop-left-1.png",
- USE_ALPHA);
-
- texture_load(&img_laptop_left[2], datadir +
- "/images/shared/laptop-left-2.png",
- USE_ALPHA);
-
- texture_load(&img_laptop_right[0], datadir +
- "/images/shared/laptop-right-0.png",
- USE_ALPHA);
-
- texture_load(&img_laptop_right[1], datadir +
- "/images/shared/laptop-right-1.png",
- USE_ALPHA);
-
- texture_load(&img_laptop_right[2], datadir +
- "/images/shared/laptop-right-2.png",
- USE_ALPHA);
-
- texture_load(&img_laptop_flat_left, datadir +
- "/images/shared/laptop-flat-left.png",
- USE_ALPHA);
-
- texture_load(&img_laptop_flat_right, datadir +
- "/images/shared/laptop-flat-right.png",
- USE_ALPHA);
-
- texture_load(&img_laptop_falling_left, datadir +
- "/images/shared/laptop-falling-left.png",
- USE_ALPHA);
-
- texture_load(&img_laptop_falling_right, datadir +
- "/images/shared/laptop-falling-right.png",
- USE_ALPHA);
-
-
- /* (Money) */
-
- texture_load(&img_money_left[0], datadir +
- "/images/shared/bag-left-0.png",
- USE_ALPHA);
-
- texture_load(&img_money_left[1], datadir +
- "/images/shared/bag-left-1.png",
- USE_ALPHA);
-
- texture_load(&img_money_right[0], datadir +
- "/images/shared/bag-right-0.png",
- USE_ALPHA);
-
- texture_load(&img_money_right[1], datadir +
- "/images/shared/bag-right-1.png",
- USE_ALPHA);
-
-
-
- /* Upgrades: */
-
- texture_load(&img_mints, datadir + "/images/shared/mints.png", USE_ALPHA);
- texture_load(&img_coffee, datadir + "/images/shared/coffee.png", USE_ALPHA);
-
-
- /* Weapons: */
-
- texture_load(&img_bullet, datadir + "/images/shared/bullet.png", USE_ALPHA);
-
- texture_load(&img_red_glow, datadir + "/images/shared/red-glow.png",
- USE_ALPHA);
-
-
-
- /* Distros: */
-
- texture_load(&img_distro[0], datadir + "/images/shared/distro-0.png",
- USE_ALPHA);
-
- texture_load(&img_distro[1], datadir + "/images/shared/distro-1.png",
- USE_ALPHA);
-
- texture_load(&img_distro[2], datadir + "/images/shared/distro-2.png",
- USE_ALPHA);
-
- texture_load(&img_distro[3], datadir + "/images/shared/distro-3.png",
- USE_ALPHA);
-
-
- /* Tux life: */
-
- texture_load(&tux_life, datadir + "/images/shared/tux-life.png",
- USE_ALPHA);
-
- /* Herring: */
-
- texture_load(&img_golden_herring, datadir + "/images/shared/golden-herring.png",
- USE_ALPHA);
-
-
- /* Super background: */
-
- texture_load(&img_super_bkgd, datadir + "/images/shared/super-bkgd.png",
- IGNORE_ALPHA);
-
-
- /* Sound effects: */
-
- /* if (use_sound) // this will introduce SERIOUS bugs here ! because "load_sound"
- // initialize sounds[i] with the correct pointer's value:
- // NULL or something else. And it will be dangerous to
- // play with not-initialized pointers.
- // This is also true with if (use_music)
- Send a mail to me: neoneurone@users.sf.net, if you have another opinion. :)
- */
- for (i = 0; i < NUM_SOUNDS; i++)
- sounds[i] = load_sound(datadir + soundfilenames[i]);
-
- /* Herring song */
- herring_song = load_song(datadir + "/music/SALCON.MOD");
-}
-
-
-/* Free shared data: */
-
-void unloadshared(void)
-{
- int i;
-
- for (i = 0; i < 3; i++)
- {
- texture_free(&tux_right[i]);
- texture_free(&tux_left[i]);
- texture_free(&bigtux_right[i]);
- texture_free(&bigtux_left[i]);
- }
-
- texture_free(&bigtux_right_jump);
- texture_free(&bigtux_left_jump);
-
- for (i = 0; i < 2; i++)
- {
- texture_free(&cape_right[i]);
- texture_free(&cape_left[i]);
- texture_free(&bigcape_right[i]);
- texture_free(&bigcape_left[i]);
- }
-
- texture_free(&ducktux_left);
- texture_free(&ducktux_right);
-
- texture_free(&skidtux_left);
- texture_free(&skidtux_right);
-
- for (i = 0; i < 4; i++)
- {
- texture_free(&img_bsod_left[i]);
- texture_free(&img_bsod_right[i]);
- }
-
- texture_free(&img_bsod_squished_left);
- texture_free(&img_bsod_squished_right);
-
- texture_free(&img_bsod_falling_left);
- texture_free(&img_bsod_falling_right);
-
- for (i = 0; i < 3; i++)
- {
- texture_free(&img_laptop_left[i]);
- texture_free(&img_laptop_right[i]);
- }
-
- texture_free(&img_laptop_flat_left);
- texture_free(&img_laptop_flat_right);
-
- texture_free(&img_laptop_falling_left);
- texture_free(&img_laptop_falling_right);
-
- for (i = 0; i < 2; i++)
- {
- texture_free(&img_money_left[i]);
- texture_free(&img_money_right[i]);
- }
-
- texture_free(&img_box_full);
- texture_free(&img_box_empty);
-
- texture_free(&img_water);
- for (i = 0; i < 3; i++)
- texture_free(&img_waves[i]);
-
- texture_free(&img_pole);
- texture_free(&img_poletop);
-
- for (i = 0; i < 2; i++)
- texture_free(&img_flag[i]);
-
- texture_free(&img_mints);
- texture_free(&img_coffee);
-
- for (i = 0; i < 4; i++)
- {
- texture_free(&img_distro[i]);
- texture_free(&img_cloud[0][i]);
- texture_free(&img_cloud[1][i]);
- }
-
- texture_free(&img_golden_herring);
-
- for (i = 0; i < NUM_SOUNDS; i++)
- free_chunk(sounds[i]);
-
- /* free the herring song */
- free_music( herring_song );
-}
-
-
-/* Draw a tile on the screen: */
-
-void drawshape(float x, float y, unsigned char c)
-{
- int z;
-
- if (c == 'X' || c == 'x')
- texture_draw(&img_brick[0], x, y, NO_UPDATE);
- else if (c == 'Y' || c == 'y')
- texture_draw(&img_brick[1], x, y, NO_UPDATE);
- else if (c == 'A' || c =='B' || c == '!')
- texture_draw(&img_box_full, x, y, NO_UPDATE);
- else if (c == 'a')
- texture_draw(&img_box_empty, x, y, NO_UPDATE);
- else if (c >= 'C' && c <= 'F')
- texture_draw(&img_cloud[0][c - 'C'], x, y, NO_UPDATE);
- else if (c >= 'c' && c <= 'f')
- texture_draw(&img_cloud[1][c - 'c'], x, y, NO_UPDATE);
- else if (c >= 'G' && c <= 'J')
- texture_draw(&img_bkgd_tile[0][c - 'G'], x, y, NO_UPDATE);
- else if (c >= 'g' && c <= 'j')
- texture_draw(&img_bkgd_tile[1][c - 'g'], x, y, NO_UPDATE);
- else if (c == '#')
- texture_draw(&img_solid[0], x, y, NO_UPDATE);
- else if (c == '[')
- texture_draw(&img_solid[1], x, y, NO_UPDATE);
- else if (c == '=')
- texture_draw(&img_solid[2], x, y, NO_UPDATE);
- else if (c == ']')
- texture_draw(&img_solid[3], x, y, NO_UPDATE);
- else if (c == '$')
- {
-
- z = (frame / 2) % 6;
-
- if (z < 4)
- texture_draw(&img_distro[z], x, y, NO_UPDATE);
- else if (z == 4)
- texture_draw(&img_distro[2], x, y, NO_UPDATE);
- else if (z == 5)
- texture_draw(&img_distro[1], x, y, NO_UPDATE);
- }
- else if (c == '^')
- {
- z = (frame / 3) % 3;
-
- texture_draw(&img_waves[z], x, y, NO_UPDATE);
- }
- else if (c == '*')
- texture_draw(&img_poletop, x, y, NO_UPDATE);
- else if (c == '|')
- {
- texture_draw(&img_pole, x, y, NO_UPDATE);
-
- }
- else if (c == '\\')
- {
- z = (frame / 3) % 2;
-
- texture_draw(&img_flag[z], x + 16, y, NO_UPDATE);
- }
- else if (c == '&')
- texture_draw(&img_water, x, y, NO_UPDATE);
-}
-
-
-/* What shape is at some position? */
-
-unsigned char shape(float x, float y)
-{
-
- int xx, yy;
- unsigned char c;
-
- yy = ((int)y / 32);
- xx = ((int)x / 32);
-
- if (yy >= 0 && yy < 15 && xx >= 0 && xx <= current_level.width)
- {
- c = current_level.tiles[yy][xx];
- }
- else
- c = '.';
-
- return(c);
-}
-
-/* Is is ground? */
-
-
-bool issolid(float x, float y)
-{
- return (isbrick(x, y) ||
- isice(x, y) ||
- (shape(x, y) == '[') ||
- (shape(x, y) == '=') ||
- (shape(x, y) == ']') ||
- (shape(x, y) == 'A') ||
- (shape(x, y) == 'B') ||
- (shape(x, y) == '!') ||
- (shape(x, y) == 'a'));
-}
-
-/* Is it a brick? */
-
-bool isbrick(float x, float y)
-{
- return (shape(x, y) == 'X' ||
- shape(x, y) == 'x' ||
- shape(x, y) == 'Y' ||
- shape(x, y) == 'y');
-}
-
-
-/* Is it ice? */
-
-bool isice(float x, float y)
-{
- return (shape(x, y) == '#');
-}
-
-/* Is it a full box? */
-
-bool isfullbox(float x, float y)
-{
- return (shape(x, y) == 'A' ||
- shape(x, y) == 'B' ||
- shape(x, y) == '!');
-}
-
-/* Break a brick: */
-
-void trybreakbrick(float x, float y)
-{
- if (isbrick(x, y))
- {
- if (shape(x, y) == 'x' || shape(x, y) == 'y')
- {
- /* Get a distro from it: */
-
- add_bouncy_distro(((int)(x + 1) / 32) * 32,
- (int)(y / 32) * 32);
-
- if (!counting_distros)
- {
- counting_distros = true;
- distro_counter = 50;
- }
-
- if (distro_counter <= 0)
- level_change(¤t_level,x, y, 'a');
-
- play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER);
- score = score + SCORE_DISTRO;
- distros++;
- }
- else
- {
- /* Get rid of it: */
-
- level_change(¤t_level,x, y,'.');
- }
-
-
- /* Replace it with broken bits: */
-
- add_broken_brick(((int)(x + 1) / 32) * 32,
- (int)(y / 32) * 32);
-
-
- /* Get some score: */
-
- play_sound(sounds[SND_BRICK], SOUND_CENTER_SPEAKER);
- score = score + SCORE_BRICK;
- }
-}
-
-