-
-/* 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? */
-
-
-int issolid(float x, float y)
-{
- if (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'))
- {
- return YES;
- }
-
- return NO;
-}
-
-
-/* Is it a brick? */
-
-int isbrick(float x, float y)
-{
- if (shape(x, y) == 'X' ||
- shape(x, y) == 'x' ||
- shape(x, y) == 'Y' ||
- shape(x, y) == 'y')
- {
- return YES;
- }
-
- return NO;
-}
-
-
-/* Is it ice? */
-
-int isice(float x, float y)
-{
- if (shape(x, y) == '#')
- {
- return YES;
- }
-
- return NO;
-}
-
-
-/* Is it a full box? */
-
-int isfullbox(float x, float y)
-{
- if (shape(x, y) == 'A' ||
- shape(x, y) == 'B' ||
- shape(x, y) == '!')
- {
- return YES;
- }
-
- return NO;
-}
-
-/* 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 == NO)
- {
- counting_distros = YES;
- 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;
- }
-}
-
-