overgod-1.0/0000755000175000001440000000000010311636646012035 5ustar michiusersovergod-1.0/actor.c0000644000175000001440000013514310310774630013313 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: actor.c History: 11/9/2005 - Version 1.0 finalised This file contains: - functions relating to the player ships */ /* UPGRADES: Primary: Square - recycle (autofire) Circle - number Triangle - speed (proj) Secondary: Square - Damage Circle - Number Triangle - Size/Speed Drive: Square - Speed Circle - Turn Triangle - Drift Defence: Square - Armour Circle - Shield capacity Triangle - Shield recharge SHIPS: Pointy: extra-damage darts Horseshoe: Fast secondary recycle round: armour self-repairs Retro: retro-rocket instead of drag field small: smaller collision radius fins: backfire large rear wings: orbital curve: bounces off enemies (ram) */ #include "allegro.h" #include //#include #include "config.h" #include "globvars.h" #include "stuff.h" #include "enemy.h" #include "cloud.h" #include "palette.h" #include "pickup.h" #include "bullet.h" #include "sound.h" #include "display.h" #include "cmds.h" //#include "upgrades.h" #define ORBITAL_DISTANCE 25000 #define DISTINCT_WEAPON 11 void drag_actor(int i); void move_actor(int i); int detect_collision_actor_enemies(int a); int detect_collision_actor_pickups(int a); int hurt_actor(int a, int source, int hurty); void actor_destroyed(int a, int source); void actor_explodes(int a); void score_duel_kill(int a, int source); void spawn_actor(int a); void gain_upgrade_points(int who, int how_many); int get_upgrade_maximum(int a); void extra_ship(void); int acquire_target(int a); int acquire_turret_target(int a); void actor_orbital(int a); void actor_shield(int a); void actor_sidekicks(int a); int gain_symbol(int a, int abil, int symb); int new_weapon(int a); int new_secondary(int a); int duel_armour(int armour, int h); int closest_enemy(int x, int y, int range, int hide_invisible); int closest_enemy_or_actor(int a, int x, int y, int range, int hide_invisible); void reset_actor(int a); void calulate_total_power(int a); void upgrade_sidekicks(int a); void game_is_over(void); void run_actors(void) { int i; for (i = 0; i < NO_ACTORS; i ++) { if (actor[i].type == ACTORTYPE_NONE) continue; if (actor[i].in_play == 0) { actor[i].x_speed = 0; actor[i].y_speed = 0; if (actor[i].spawn_delay > 0) { actor[i].spawn_delay --; continue; } if (game.ships_left > 0) { if (arena.game_over == 0) spawn_actor(i); // ships_left will be non-zero for time attack games. } else continue; } // actor[i].energy += actor[i].recharge; // if (actor[i].energy >= actor[i].max_energy) // actor[i].energy = actor[i].max_energy; if (actor[i].screen_shake_time > 0) { if (actor[i].screen_shake_time > 4) { player[actor[i].controller].screen_shake_x = grand(7501) - 3250; player[actor[i].controller].screen_shake_y = grand(7501) - 3250; } else { player[actor[i].controller].screen_shake_x = grand(3500) - 1750; player[actor[i].controller].screen_shake_y = grand(3500) - 1750; } actor[i].screen_shake_time --; } else { player[actor[i].controller].screen_shake_x = 0; player[actor[i].controller].screen_shake_y = 0; } // screen_shake needs to be first, as many things below can affect it and we don't want them wiped. if (actor[i].repairing > 0) { actor[i].repairing --; if (actor[i].armour < actor[i].max_armour) actor[i].armour += 5; if (actor[i].armour > actor[i].max_armour) actor[i].armour = actor[i].max_armour; // + play a sound? } if (actor[i].ship == SHIP_ROUND && counter % 7 == 0) { if (actor[i].armour < actor[i].max_armour) actor[i].armour += 1; } if (actor[i].grace_period > 0) actor[i].grace_period --; if (actor[i].hurt_pulse > 0) actor[i].hurt_pulse --; if (actor[i].recycle1 > 0) actor[i].recycle1 --; if (actor[i].recycle2 > 0) actor[i].recycle2 --; if (actor[i].turret_recycle > 0) actor[i].turret_recycle --; if (actor[i].sidekick_recycle > 0) actor[i].sidekick_recycle --; if (actor[i].heavy_recycle > 0) actor[i].heavy_recycle --; if (actor[i].backfire_recycle > 0) actor[i].backfire_recycle --; if (actor[i].secondary_burst > 0) continue_secondary_burst(i); if (actor[i].just_upgraded_timeout > 0) actor[i].just_upgraded_timeout --; if (actor[i].just_collided > 0) actor[i].just_collided --; move_actor(i); detect_collision_actor_enemies(i); detect_collision_actor_pickups(i); if (actor[i].upgraded_system [UPG_SEEKER] > 0) acquire_target(i); // if (actor[i].upgraded_system [UPG_TURRET] > 0) // acquire_turret_target(i); // if (actor[i].ship == SHIP_ORBITAL && actor[i].total_power > 0) // actor_orbital(i); if (actor[i].ability [ABILITY_DEFENCE] [SYMBOL_CIRCLE] > 0) actor_shield(i); // if (actor[i].upgraded_system [UPG_SIDEKICK] > 0) // actor_sidekicks(i); if (actor[i].drive_sound [DRIVE_THRUST] > 0) actor[i].drive_sound [DRIVE_THRUST] --; if (actor[i].drive_sound [DRIVE_SLIDE] > 0) actor[i].drive_sound [DRIVE_SLIDE] --; if (actor[i].drive_sound [DRIVE_RETRO] > 0) actor[i].drive_sound [DRIVE_RETRO] --; } } void move_actor(int i) { if (actor[i].x + actor[i].x_speed <= actor[i].edge_radius || actor[i].x + actor[i].x_speed >= arena.max_x - actor[i].edge_radius - 2000)// - 3000) { actor[i].x_speed *= -1; } if (actor[i].y + actor[i].y_speed <= actor[i].edge_radius || actor[i].y + actor[i].y_speed >= arena.max_y - actor[i].edge_radius - 4000)// - 4000) { actor[i].y_speed *= -1; } actor[i].x += actor[i].x_speed; actor[i].y += actor[i].y_speed; if (game.drag != 0) drag_actor(i); } /* void drag_actor(int i) { int drag_x, drag_y; int new_x_speed, new_y_speed; new_x_speed = ((float) actor[i].x_speed * game[0].drag);// / 10000; new_y_speed = ((float) actor[i].y_speed * game[0].drag);// / 10000; drag_x = abs(actor[i].x_speed - new_x_speed); drag_y = abs(actor[i].y_speed - new_y_speed); actor[i].drag_amount = hypot(drag_x, drag_y); if (actor[i].drag_amount < 2) return; actor[i].x_speed = new_x_speed; actor[i].y_speed = new_y_speed; } */ void drag_actor(int i) { // int drag_x, drag_y; // int new_x_speed, new_y_speed; /* float drag_mult = 0.015 - (actor[i].ability [ABILITY_DRIVE] [SYMBOL_TRIANGLE] * 0.0015);//game.drag; if (actor[i].dragging > 0) { drag_mult *= (float) actor[i].brake_strength * actor[i].dragging / 20; }*/ //float drag_mult = 0.020 - (actor[i].ability [ABILITY_DRIVE] [SYMBOL_TRIANGLE] * 0.0020);//game.drag; float drag_mult = 0.025 - (actor[i].ability [ABILITY_DRIVE] [SYMBOL_TRIANGLE] * 0.0025);//game.drag; if (actor[i].dragging > 0) { drag_mult *= (float) actor[i].brake_strength * actor[i].dragging / 23; } int angle = radians_to_angle(atan2(actor[i].y_speed, actor[i].x_speed)); actor[i].moving_angle = angle; float dragged = hypot(abs(actor[i].x_speed), abs(actor[i].y_speed)) * drag_mult; if (actor[i].dragging == 0 && actor[i].ability [ABILITY_DRIVE] [SYMBOL_TRIANGLE] != 0) { if (dragged < 10 + actor[i].ability [ABILITY_DRIVE] [SYMBOL_TRIANGLE] * 5) { dragged /= 5 + actor[i].ability [ABILITY_DRIVE] [SYMBOL_TRIANGLE]; } } float change = cos(angle_to_radians(angle)) * dragged; actor[i].x_speed -= change;// * game[0].drag; change = sin(angle_to_radians(angle)) * dragged; actor[i].y_speed -= change;// * game[0].drag; if (actor[i].dragging == 20) { if (abs(actor[i].x_speed) < 20 && abs(actor[i].y_speed) < 20) { actor[i].x_speed = 0; actor[i].y_speed = 0; } } if (actor[i].dragging == 20 && grand(100) + 70 < dragged) { int passing_colours [5] = {COLOUR_YELLOW8, COLOUR_ORANGE8, COLOUR_RED8, COLOUR_RED6, COLOUR_RED4}; create_cloud(CLOUD_SPECK, actor[i].x + grand(10001) - 5000, actor[i].y + grand(10001) - 5000, 0, 0, // actor[a].x_speed + x_accel * 20 + (300 - grand(601)), // actor[a].y_speed + y_accel * 20 + (300 - grand(601)), 0, 0, 10 + grand(11),1,0, 0, 0, 0, passing_colours); } if (dragged > 250 - (actor[i].dragging == 20) * 150) { player[actor[i].controller].screen_shake_x += grand((dragged - 100) * 60) - ((dragged - 100) * 30); player[actor[i].controller].screen_shake_y += grand((dragged - 100) * 60) - ((dragged - 100) * 30); // player[actor[i].controller].screen_shake_x += grand(3500) - 1750; // player[actor[i].controller].screen_shake_y += grand(3500) - 1750; // if (dragged > 60) // { // } } actor[i].drag_amount = dragged;// * game[0].drag; /* if (actor[i].drag_amount < 2) return; actor[i].x_speed = new_x_speed; actor[i].y_speed = new_y_speed; */ } int acquire_target(int a) { actor[a].seek_x = actor[a].x + cos(angle_to_radians(actor[a].angle - ANGLE_QUARTER)) * 75000; actor[a].seek_y = actor[a].y + sin(angle_to_radians(actor[a].angle - ANGLE_QUARTER)) * 75000; if (game.type == GAME_DUEL) { actor[a].lock = closest_enemy_or_actor(a, actor[a].seek_x, actor[a].seek_y, 35000 + actor[a].upgraded_system [UPG_SEEKER] * 30000, 1); } else actor[a].lock = closest_enemy(actor[a].seek_x, actor[a].seek_y, 35000 + actor[a].upgraded_system [UPG_SEEKER] * 30000, 1); return 0; } int acquire_turret_target(int a) { if (game.type == GAME_DUEL) { actor[a].turret_lock = closest_enemy_or_actor(a, actor[a].x, actor[a].y, 80000 + actor[a].upgraded_system [UPG_TURRET] * 20000, 1); } else actor[a].turret_lock = closest_enemy(actor[a].x, actor[a].y, 80000 + actor[a].upgraded_system [UPG_TURRET] * 20000, 1); return 0; } int closest_enemy(int x, int y, int range, int hide_invisible) { int i; int dist; int retval = -1; for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[i].type == ENEMY_NONE) continue; if (hide_invisible == 1) { if ((enemy[i].type == ENEMY_SHADOW1 || enemy[i].type == ENEMY_SHADOW2) && enemy[i].attribute [0] == 0) continue; } dist = hypot(y - enemy[i].y, x - enemy[i].x); if (dist < range) { retval = i; range = dist; } } return retval; } int closest_enemy_or_actor(int a, int x, int y, int range, int hide_invisible) { int i; int dist; int retval = -1; for (i = 0; i < 2; i ++) { if (i == a) continue; if (actor[i].type == ENEMY_NONE) continue; if (actor[i].in_play == 0) continue; dist = hypot(y - actor[i].y, x - actor[i].x); if (dist < range) { if (i == 0) retval = LOCK_ACTOR0; else retval = LOCK_ACTOR1; range = dist; } } for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[i].type == ENEMY_NONE) continue; // if (enemy[i].type == ENEMY_DEAD_WANDERER) // continue; // dead fighters are still dangerous, so lock onto them // if (hide_invisible == 1) // { // if ((enemy[i].type == ENEMY_CLOAKER // || enemy[i].type == ENEMY_CLOAKER2) // && enemy[i].attribute [ATTRIB_CLOAKER_PULSE] == 0) // continue; // } dist = hypot(y - enemy[i].y, x - enemy[i].x); if (dist < range) { retval = i; range = dist; } } return retval; } void actor_orbital(int a) { if (actor[a].grace_period > 0) return; // this could make boss enemies too easy int colours [4], ox, oy; // if (actor[a].upgraded_system [UPG_ORBITAL] >= 4) // actor[a].orbital_spin = 25; // else actor[a].orbital_spin = 18; actor[a].orbital_angle += actor[a].orbital_spin; if (actor[a].orbital_angle > ANGLE_FULL) actor[a].orbital_angle -= ANGLE_FULL; if (actor[a].orbital_angle < 0) actor[a].orbital_angle += ANGLE_FULL; int damage = 500 + actor[a].total_power * 35; int special1 = 1 + actor[a].total_power / 5; if (special1 > 7) special1 = 7; colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_LGREEN; colours [3] = TRANS_DGREEN; // colours [0] = TRANS_YELLOW; // colours [1] = TRANS_ORANGE; // colours [2] = TRANS_LRED; // colours [3] = TRANS_DRED; // colours [0] = COLOUR_YELLOW8; // colours [1] = COLOUR_YELLOW8; // colours [2] = COLOUR_YELLOW6; // colours [3] = COLOUR_YELLOW4; ox = actor[a].x + xpart(actor[a].orbital_angle, ORBITAL_DISTANCE); oy = actor[a].y + ypart(actor[a].orbital_angle, ORBITAL_DISTANCE); create_bullet(BULLET_NICE_ORBITAL, ox, oy, 0, 0, a, damage, 2, 100, 0, 0, 0, colours, 1,special1,0,0,0,0); ox = actor[a].x + xpart(actor[a].orbital_angle + ANGLE_HALF, ORBITAL_DISTANCE); oy = actor[a].y + ypart(actor[a].orbital_angle + ANGLE_HALF, ORBITAL_DISTANCE); create_bullet(BULLET_NICE_ORBITAL, ox, oy, 0, 0, a, damage, 2, 100, 0, 0, 0, colours, 1,special1,0,0,0,0); } void actor_shield(int a) { actor[a].max_shield = (actor[a].ability [ABILITY_DEFENCE] [SYMBOL_CIRCLE]) * 70; //100; /* if (counter % 3 == 0) { if (actor[a].shield < actor[a].max_shield) // actor[a].shield += actor[a].upgraded_system [UPG_SHIELD] + 1; actor[a].shield += 3 + actor[a].upgraded_system [UPG_SHIELD]; // if can be increased by > 1, must not be > shield_max or layers look odd. if (actor[a].shield > actor[a].max_shield) actor[a].shield = actor[a].max_shield; }*/ if (actor[a].shield < actor[a].max_shield) { // if (counter % 3 == 0) actor[a].shield_recharge += 2 + actor[a].ability [ABILITY_DEFENCE] [SYMBOL_TRIANGLE] * 2; // if (counter % 6 - actor[a].upgraded_system [UPG_SHIELD] == 0) // actor[a].shield ++; while(actor[a].shield_recharge > 10) { actor[a].shield ++; actor[a].shield_recharge -= 10; }; if (actor[a].shield > actor[a].max_shield) actor[a].shield = actor[a].max_shield; } // if (actor[a].shield > actor[a].max_shield) // actor[a].shield = actor[a].max_shield; if (actor[a].shield_pulse > 0 && counter % 3 == 0) actor[a].shield_pulse --; } void actor_sidekicks(int a) { int i, xcos2, ysin2; int passing_colours [5]; if (actor[a].sidekick_recycle > 0) actor[a].sidekick_recycle --; int xcos = cos(angle_to_radians(actor[a].angle)) * GRAIN; int ysin = sin(angle_to_radians(actor[a].angle)) * GRAIN; // int xcos2;// = cos(angle_to_radians(actor[a].angle)) * GRAIN; // int ysin2;// = sin(angle_to_radians(actor[a].angle)) * GRAIN; // if (actor[a].sidekicks >= 2) // { // xcos2 = cos(angle_to_radians(actor[a].angle)) * GRAIN; // ysin2 = sin(angle_to_radians(actor[a].angle)) * GRAIN; // } int target_x, target_y; float speed_mult; int accel = 0; for (i = 0; i < actor[a].sidekicks; i ++) { switch(i) { case 0: target_x = actor[a].x + (cos(angle_to_radians(actor[a].angle - ANGLE_1_EIGHTH)) * GRAIN * 40); target_y = actor[a].y + (sin(angle_to_radians(actor[a].angle - ANGLE_1_EIGHTH)) * GRAIN * 40); accel = 22; passing_colours [0] = COLOUR_YELLOW8; passing_colours [1] = COLOUR_GREEN8; passing_colours [2] = COLOUR_GREEN6; passing_colours [3] = COLOUR_GREEN4; passing_colours [4] = COLOUR_GREEN2; break; case 1: target_x = actor[a].x + (cos(angle_to_radians(actor[a].angle - ANGLE_QUARTER - ANGLE_1_EIGHTH)) * GRAIN * 40); target_y = actor[a].y + (sin(angle_to_radians(actor[a].angle - ANGLE_QUARTER - ANGLE_1_EIGHTH)) * GRAIN * 40); // target_x = actor[a].x - xcos * 20; // target_y = actor[a].y - ysin * 20; accel = 22; break; case 2: target_x = actor[a].x + xcos * 40; target_y = actor[a].y + ysin * 40; accel = 12; passing_colours [0] = COLOUR_YELLOW8; passing_colours [1] = COLOUR_YELLOW6; passing_colours [2] = COLOUR_YELLOW4; passing_colours [3] = COLOUR_YELLOW3; passing_colours [4] = COLOUR_YELLOW2; break; case 3: target_x = actor[a].x - xcos * 40; target_y = actor[a].y - ysin * 40; accel = 12; break; } speed_mult = hypot(actor[a].sidekick_y [i] - target_y, actor[a].sidekick_x [i] - target_x) / 600; if (speed_mult > 200) speed_mult = 200; speed_mult *= accel; speed_mult /= 10; /* if (speed_mult < 20 && abs(actor[a].sidekick_x_speed [i]) + abs(actor[a].sidekick_y_speed [i]) < 2000) { actor[a].sidekick_angle [i] = turn_towards_angle(actor[a].sidekick_angle [i], actor[a].angle + ANGLE_QUARTER, 8); actor[a].sidekick_x_speed [i] = 0; actor[a].sidekick_y_speed [i] = 0; } else*/ { actor[a].sidekick_angle [i] = turn_towards_xy(actor[a].sidekick_x [i], actor[a].sidekick_y [i], target_x, target_y, actor[a].sidekick_angle [i], 16); // actor[a].sidekick_x_speed [i] = cos(angle_to_radians(actor[a].sidekick_angle [i])) * speed_mult; // actor[a].sidekick_y_speed [i] = sin(angle_to_radians(actor[a].sidekick_angle [i])) * speed_mult; // actor[a].sidekick_x_speed [i] += cos(angle_to_radians(actor[a].sidekick_angle [i])) * speed_mult; // actor[a].sidekick_y_speed [i] += sin(angle_to_radians(actor[a].sidekick_angle [i])) * speed_mult; xcos2 = cos(angle_to_radians(actor[a].sidekick_angle [i])) * speed_mult; ysin2 = sin(angle_to_radians(actor[a].sidekick_angle [i])) * speed_mult; actor[a].sidekick_x_speed [i] += xcos2; actor[a].sidekick_y_speed [i] += ysin2; } actor[a].sidekick_x_speed [i] *= 0.97; actor[a].sidekick_y_speed [i] *= 0.97; actor[a].sidekick_x [i] += actor[a].sidekick_x_speed [i]; actor[a].sidekick_y [i] += actor[a].sidekick_y_speed [i]; if (grand(12) == 0 && abs(actor[a].sidekick_x_speed [i]) + abs(actor[a].sidekick_y_speed [i]) > 1000) { create_cloud(CLOUD_SPECK, actor[a].sidekick_x [i] - xcos2 * 37, actor[a].sidekick_y [i] - ysin2 * 37, 0, 0, actor[a].sidekick_x_speed [i] - (xcos2 * 10) + (100 - grand(51)), actor[a].sidekick_y_speed [i] - (ysin2 * 10) + (100 - grand(51)), 10 + grand(11),1,0, 0, 0, 0, passing_colours); } } } int gain_symbol(int a, int abil, int symb) { if (actor[a].ability [abil] [symb] >= 5) { // random_symbol(a); return 0; } actor[a].ability [abil] [symb] ++; switch(abil) { case ABILITY_PRIMARY: switch(symb) { case SYMBOL_SQUARE: // send_message(actor[a].controller, "Dart Reload", COLOUR_YELLOW8); // actor[a].primary = new_weapon(a); break; case SYMBOL_CIRCLE: // send_message(actor[a].controller, "Multiple Darts", COLOUR_YELLOW8); break; case SYMBOL_TRIANGLE: // send_message(actor[a].controller, "Fast Darts", COLOUR_YELLOW8); break; } break; case ABILITY_SECONDARY: switch(symb) { case SYMBOL_SQUARE: // send_message(actor[a].controller, "Power", COLOUR_ORANGE8); // actor[a].primary = new_weapon(a); break; case SYMBOL_CIRCLE: // send_message(actor[a].controller, "Number", COLOUR_ORANGE8); break; case SYMBOL_TRIANGLE: // send_message(actor[a].controller, "Range", COLOUR_ORANGE8); break; } // actor[a].secondary = new_secondary(a); break; case ABILITY_DEFENCE: switch(symb) { case SYMBOL_SQUARE: // send_message(actor[a].controller, "Armour", COLOUR_BLUE8); actor[a].max_armour = 1000 + ARMOUR_UPGRADE * actor[a].ability [ABILITY_DEFENCE] [SYMBOL_SQUARE]; if (game.type == GAME_DUEL) { actor[a].max_armour = duel_armour(actor[a].max_armour, game.duel_handicap [actor[a].controller]); actor[a].armour += duel_armour(ARMOUR_UPGRADE, game.duel_handicap [actor[a].controller]); } else actor[a].armour += ARMOUR_UPGRADE; if (actor[a].armour > actor[a].max_armour) actor[a].armour = actor[a].max_armour; break; case SYMBOL_CIRCLE: // send_message(actor[a].controller, "Ward", COLOUR_BLUE8); break; case SYMBOL_TRIANGLE: // send_message(actor[a].controller, "Ward Restore", COLOUR_BLUE8); break; } break; case ABILITY_DRIVE: switch(symb) { case SYMBOL_SQUARE: // send_message(actor[a].controller, "Drive", COLOUR_GREEN8); break; case SYMBOL_CIRCLE: // send_message(actor[a].controller, "Turn", COLOUR_GREEN8); break; case SYMBOL_TRIANGLE: // send_message(actor[a].controller, "Drift", COLOUR_GREEN8); break; } break; // case SYMBOL_: // send_message(actor[a].controller, "++", COLOUR_GREEN8); // break; } calulate_total_power(a); return 1; } int new_weapon(int a) { return WPN_DARTS; int highest = 0; if (actor[a].ability [ABILITY_PRIMARY] [SYMBOL_SQUARE] > highest) highest = actor[a].ability [ABILITY_PRIMARY] [SYMBOL_SQUARE]; if (actor[a].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] > highest) highest = actor[a].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; if (actor[a].ability [ABILITY_PRIMARY] [SYMBOL_CIRCLE] > highest) highest = actor[a].ability [ABILITY_PRIMARY] [SYMBOL_CIRCLE]; // if (highest < 2) // return WPN_DARTS; // int wpn = WPN_DAR; if (actor[a].ability [ABILITY_PRIMARY] [SYMBOL_SQUARE] == highest) { if (highest * 10 > actor[a].ability [ABILITY_PRIMARY] [SYMBOL_CIRCLE] * DISTINCT_WEAPON && highest * 10 > actor[a].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * DISTINCT_WEAPON) return WPN_SPINES; } else { if (actor[a].ability [ABILITY_PRIMARY] [SYMBOL_CIRCLE] == highest) { if (highest * 10 > actor[a].ability [ABILITY_PRIMARY] [SYMBOL_SQUARE] * DISTINCT_WEAPON && highest * 10 > actor[a].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * DISTINCT_WEAPON) return WPN_BURST; } else if (actor[a].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] == highest) { if (highest * 10 > actor[a].ability [ABILITY_PRIMARY] [SYMBOL_CIRCLE] * DISTINCT_WEAPON && highest * 10 > actor[a].ability [ABILITY_PRIMARY] [SYMBOL_SQUARE] * DISTINCT_WEAPON) return WPN_TEETH; } } return WPN_DARTS; } int new_secondary(int a) { int highest = 0; if (actor[a].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] > highest) highest = actor[a].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE]; if (actor[a].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] > highest) highest = actor[a].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE]; if (actor[a].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] > highest) highest = actor[a].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE]; if (actor[a].ability [ABILITY_SECONDARY] [SYMBOL_CROSS] > highest) highest = actor[a].ability [ABILITY_SECONDARY] [SYMBOL_CROSS]; int wpn = 0; if (actor[a].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] == highest) wpn += 1; if (actor[a].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] == highest) wpn += 10; if (actor[a].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] == highest) wpn += 100; if (actor[a].ability [ABILITY_SECONDARY] [SYMBOL_CROSS] == highest) wpn += 1000; switch(wpn) { default: case 0: return SECOND_NONE; case 1: return SECOND_FURIOUS_ORB; case 10: return SECOND_EYE_DESOLATION; case 100: return SECOND_WORMS_SORROW; case 1000: return SECOND_FROZEN_STARS; case 11: return SECOND_BURNING_EYE; case 101: return SECOND_LARVA_NEST; case 1001: return SECOND_MANIFOLD_ORB; case 110: return SECOND_TERROR_EELS; case 1010: return SECOND_PANIC_EELS; case 1100: return SECOND_WORMS_AGONY; case 111: // return SECOND_ORB_RECTIFICATION; // case 1011: return SECOND_NONE; case 1101: return SECOND_NONE; case 1110: return SECOND_NONE; // case 1111: // return SECOND_CIRCLE_PAIN; } return SECOND_NONE; } int detect_collision_actor_enemies(int a) { if (actor[a].grace_period > 0 || actor[a].in_play == 0) return -1; int x2 = actor[a].x - actor[a].x_speed; int y2 = actor[a].y - actor[a].y_speed; int i; int angle1, angle2, angle3; int total_speed; int difference; int collision_velocity = 0; int hurty = 0; int passing_colours [5]; int xs2, ys2; for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[i].type == ENEMY_NONE) continue; if (enemy[i].radius == 0) // enemy has no collision radius - dead wanderer etc continue; if (actor[a].just_collided > 0 && enemy[i].just_collided > 0) continue; if (hypot(actor[a].x - enemy[i].x, actor[a].y - enemy[i].y) <= actor[a].radius + enemy[i].radius || hypot(x2 - enemy[i].x, y2 - enemy[i].y) <= actor[a].radius + enemy[i].radius) { /* if (actor[a].x_speed == 0) tangent = 1000; else tangent = tan(actor[a].y_speed / actor[a].x_speed); */ switch(enemy[i].type) { /* case ENEMY_SWERVER: case ENEMY_SWERVER2: case ENEMY_SWERVER3: case ENEMY_BOUNCER: case ENEMY_BOUNCER2: case ENEMY_BOUNCER3: case ENEMY_BOUNCER4: case ENEMY_BOUNCER5: hurt_enemy(i, 99999, -1, 1); return -1;*/ } // Really dodgy collision physics... collision_velocity = hypot(abs(actor[a].x_speed - enemy[i].x_speed), abs(actor[a].y_speed - enemy[i].y_speed)); // First calculate actor's post-collision velocity: angle1 = radians_to_angle(atan2(actor[a].y_speed, actor[a].x_speed)); angle2 = radians_to_angle(atan2(actor[a].y - enemy[i].y, actor[a].x - enemy[i].x)); total_speed = hypot(actor[a].y_speed, actor[a].x_speed); angle1 += ANGLE_HALF; if (angle2 > ANGLE_FULL) angle2 -= ANGLE_FULL; angle2 += ANGLE_QUARTER; if (angle2 > ANGLE_FULL) angle2 -= ANGLE_FULL; /* if (angle1 < angle2) { difference = angle2 - angle1; } else { difference = angle1 - angle2; } angle3 = angle1 - difference;*/ difference = angle2 - angle1; angle3 = angle2 - difference; // or +? xs2 = actor[a].x_speed; ys2 = actor[a].y_speed; actor[a].x_speed = cos(angle_to_radians(angle3)) * total_speed; actor[a].y_speed = sin(angle_to_radians(angle3)) * total_speed; // actor[a].x_speed = cos(angle_to_radians(angle3)) * total_speed; // actor[a].y_speed = sin(angle_to_radians(angle3)) * total_speed; actor[a].x_speed += (enemy[i].x_speed / 2) * 100 / actor[a].mass; actor[a].y_speed += (enemy[i].y_speed / 2) * 100 / actor[a].mass; // Now the enemy's angle1 = radians_to_angle(atan2(enemy[i].y_speed, enemy[i].x_speed)); angle2 = radians_to_angle(atan2(enemy[i].y - actor[a].y, enemy[i].x - actor[a].x)); total_speed = hypot(enemy[i].y_speed, enemy[i].x_speed); angle1 += ANGLE_HALF; if (angle2 > ANGLE_FULL) angle2 -= ANGLE_FULL; angle2 += ANGLE_QUARTER; if (angle2 > ANGLE_FULL) angle2 -= ANGLE_FULL; difference = angle2 - angle1; angle3 = angle2 - difference; // or +? enemy[i].x_speed = xpart(angle3, total_speed);//cos(angle_to_radians(angle3)) * total_speed; enemy[i].y_speed = ypart(angle3, total_speed);//sin(angle_to_radians(angle3)) * total_speed; enemy[i].x_speed += (xs2 * 25) / enemy[i].mass * actor[a].mass / 100; enemy[i].y_speed += (ys2 * 25) / enemy[i].mass * actor[a].mass / 100; int sanity = 0; do { actor[a].x_speed += xpart(angle2, 100);//grand(101) - 50; actor[a].y_speed += ypart(angle2, 100);//grand(101) - 50; move_actor(a); sanity ++; if (sanity >= 5000) break; // hmm } while (hypot(actor[a].x - enemy[i].x, actor[a].y - enemy[i].y) < actor[a].radius + enemy[i].radius); actor[a].just_collided = 7; enemy[i].just_collided = 7; if (actor[a].ship == SHIP_CURVE) { passing_colours [0] = TRANS_DGREEN; passing_colours [1] = TRANS_LGREEN; passing_colours [2] = TRANS_YELLOW; place_explosion(actor[a].x, actor[a].y, 0,0, 300 + crandom(150), passing_colours); blast(actor[a].x, actor[a].y, 40000, 100 + actor[a].total_power * 15, 20000, a); blast(enemy[i].x, enemy[i].y, 40000, 0, 2000, OWNER_ENEMY); play_wavf(NWAV_BURSTZ, 300 + grand(300)); // blast(bullet[b].x, bullet[b].y, 30000, 200, 1200, bullet[b].owner); } else { passing_colours [0] = TRANS_DGREY; passing_colours [1] = TRANS_LGREY; passing_colours [2] = TRANS_WHITE; place_explosion(actor[a].x, actor[a].y, 0,0, 200 + crandom(150), passing_colours); } // we cannot have any references to enemy[i] below as it may have been destroyed by the blast // call above. place_explosion(actor[a].x, actor[a].y, 0,0, 200 + crandom(150), passing_colours); play_wavf(NWAV_BUMP, 700 + grand(800)); hurty = collision_velocity / 30; if (hurty > 50) hurty = 50; if (check_shielder(i) == 0 && actor[a].ship != SHIP_CURVE) { hurt_enemy(i, hurty, a, 1); if (enemy[i].hurt_pulse < 4) enemy[i].hurt_pulse = 4; } hurt_actor(a, a, hurty); break; /* if ((angle1 < angle2 && angle2 > angle1 + ANGLE_HALF) || (angle1 > angle2 && angle2 > angle1 - ANGLE_HALF)) { difference = angle -= turning; if (angle < 0) angle += ANGLE_FULL; } else { angle += turning; if (angle > ANGLE_FULL) angle -= ANGLE_FULL; } */ } } return -1; } int detect_collision_actor_pickups(int a) { int x2 = actor[a].x - actor[a].x_speed; int y2 = actor[a].y - actor[a].y_speed; int i; char destroy = 0; for (i = 0; i < NO_PICKUPS; i ++) { if (pickup[i].type == PICKUP_NONE) continue; if (hypot(actor[a].x - pickup[i].x, actor[a].y - pickup[i].y) <= actor[a].radius + pickup[i].radius || hypot(x2 - pickup[i].x, y2 - pickup[i].y) <= actor[a].radius + pickup[i].radius) { destroy = 1; switch(pickup[i].type) { case PICKUP_PRESYMBOL: destroy = 0; break; case PICKUP_PRESECONDARY: destroy = 0; break; case PICKUP_SECONDARY: actor[a].secondary = pickup[i].subtype; actor[a].secondary_burst = 0; actor[a].secondary_burst_recycle = 0; play_wavf(NWAV_REPAIR, 1700); break; case PICKUP_SQUARE: // gain_upgrade_points(a, 1); destroy = gain_symbol(a, pickup[i].subtype, SYMBOL_SQUARE); if (destroy) // play_soundf(WAV_PICKUP_UPGRADE, 1000); play_wavf(NWAV_SYMBOL, 1000); break; case PICKUP_TRIANGLE: destroy = gain_symbol(a, pickup[i].subtype, SYMBOL_TRIANGLE); // gain_upgrade_points(a, 2); if (destroy) play_wavf(NWAV_SYMBOL, 1700); // play_soundf(WAV_PICKUP_UPGRADE, 1500); break; case PICKUP_CIRCLE: destroy = gain_symbol(a, pickup[i].subtype, SYMBOL_CIRCLE); // gain_upgrade_points(a, 3); if (destroy) play_wavf(NWAV_SYMBOL, 1300); // play_soundf(WAV_PICKUP_UPGRADE, 2000); break; case PICKUP_REPAIR: // actor[a].armour = actor[a].max_armour; actor[a].repairing += 150; // actor[a].max_armour / 10; play_wav(NWAV_REPAIR); break; case PICKUP_GRACE: actor[a].grace_period = 333; break; case PICKUP_SHIP: extra_ship(); break; } if (destroy) pickup_explodes(i, 1); } } return -1; } void extra_ship(void) { if (game.ships_left <= 20) { game.ships_left ++; play_wav(NWAV_EXTRA); if (game.users == 1) { // send_message(game.single_player, "Extra!", STYLE_UPGRADE5); } else { // send_message(0, "Extra!", STYLE_UPGRADE5); // send_message(1, "Extra!", STYLE_UPGRADE5); } } } int hurt_actor(int a, int source, int hurty) { if (actor[a].in_play == 0) return 0; // hurty *= 2; if (game.type == GAME_DUEL && game.duel_leader_handicap > 0) { if (player[actor[a].controller].duel_score > player[actor[a].controller == 0].duel_score) { hurty *= 10 + (player[actor[a].controller].duel_score - player[actor[a].controller == 0].duel_score) * game.duel_leader_handicap; hurty /= 10; } } if (actor[a].ability [ABILITY_DEFENCE] [SYMBOL_CIRCLE] > 0 && actor[a].shield > 0) { if (actor[a].shield >= 20) play_wavf(NWAV_SHIELD, 400 + actor[a].shield * 2); if (hurty > actor[a].shield) { hurty -= actor[a].shield; actor[a].shield = 0; actor[a].shield_pulse = 2 + actor[a].ability [ABILITY_DEFENCE] [SYMBOL_CIRCLE]; } else { // play_wavf(NWAV_SHIELD, 400 + actor[a].shield * 2); actor[a].shield -= hurty; actor[a].shield_pulse = 5 + actor[a].ability [ABILITY_DEFENCE] [SYMBOL_CIRCLE]; return 0; } // play_soundf(WAV_SHIELD, 1000); } // return 0; // shields go here... // int passing_colours [5]; actor[a].hurt_pulse = 4; if (hurty >= actor[a].armour) { actor[a].armour = 0; actor_explodes(a); actor_destroyed(a, source); return 0; } play_wavf(NWAV_BUMP2, 900 + grand(300)); actor[a].armour -= hurty; return 1; } void actor_destroyed(int a, int source) { actor[a].in_play = 0; actor[a].spawn_delay = 50; // actor[a].lock = -1; // actor[a].turret_lock = -1; // actor[a].x = grand(arena.max_x - 100000) + 50000; // actor[a].y = grand(arena.max_y - 100000) + 50000; actor[a].next_spawn_x = grand(arena.max_x - 100000) + 50000; actor[a].next_spawn_y = grand(arena.max_y - 100000) + 50000; int e; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[e].type == ENEMY_NONE) continue; if (enemy[e].attacking == a) enemy[e].attacking = ATTACK_NONE; } if (game.type == GAME_DUEL) { score_duel_kill(a, source); return; } if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) { arena.time_left -= 33.333 * 30; if (arena.time_left < 1) arena.time_left = 1; return; } if (game.ships_left == 0) { if (game.users == 1) game_is_over(); else { if (actor[0].in_play == 0 && actor[1].in_play == 0) game_is_over(); } } } void game_is_over(void) { arena.game_over = 132; } void score_duel_kill(int a, int source) { if (arena.game_over > 0) return; if (a == source || source == OWNER_ENEMY) { if (player[actor[a].controller].duel_score > 0) player[actor[a].controller].duel_score --; return; } int p = actor[source].controller; player[p].duel_score ++; if ((player[p].duel_score >= 10 && game.duel_mode == DUEL_10_POINTS) || (player[p].duel_score >= 30 && game.duel_mode == DUEL_30_POINTS)) { game.duel_winner = p; arena.game_over = 132; } } void actor_explodes(int a) { int passing_colours [5]; passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(actor[a].x, actor[a].y, 0,0,//actor[a].x_speed, actor[a].y_speed, 1500 + crandom(250), passing_colours); place_burstlet_burst(actor[a].x, actor[a].y, 0, 0, 4 + grand(3), 2, 6, 1000, 1500, 4, passing_colours); int i; if (actor[a].sidekicks != 0) { for (i = 0; i < actor[a].sidekicks; i ++) { place_explosion(actor[a].sidekick_x [i], actor[a].sidekick_y [i], 0,0, 500 + crandom(250), passing_colours); place_burstlet_burst(actor[a].sidekick_x [i], actor[a].sidekick_y [i], 0, 0, 2 + grand(3), 2, 6, 1000, 1500, 4, passing_colours); } actor[a].sidekicks = 0; } kill_drive_sounds(); play_wavf(NWAV_BLAST, 500 + grand(200)); } // called at start of each game void init_actor(int a, int type) { int i,j; actor[a].type = ACTORTYPE_SHIP; // redundant actor[a].ship = type; actor[a].radius = 9000; actor[a].edge_radius = 5000; // actor[a].turning = 70; now calculated dynamically actor[a].thrust = 0; actor[a].slide = 50; actor[a].mass = 100; actor[a].x = grand(494000) + 50000; actor[a].y = grand(495000) + 50000; actor[a].next_spawn_x = actor[a].x; actor[a].next_spawn_y = actor[a].y; for (i = 0; i < 4; i ++) { for (j = 0; j < 4; j ++) { actor[a].ability [i] [j] = 0; } } actor[a].total_power = 0; // for (j = 0; j < NO_UPGRADES; j ++) // { // actor[a].upgrades [j] = 0; // actor[a].upgrade_specials [j] = 0; // } // for (j = 0; j < MAX_UPGRADES; j ++) // { //actor[a].upgraded_system [j] = 0; // } // for (j = 0; j < 9; j ++) // { // actor[a].upgrade_structure [j] = upgrades [actor[a].ship] [j]; // actor[a].upgrade_specials [j] = 0; // } /* actor[a].upgrade_structure [0] = UPG_NONE; actor[a].upgrade_structure [1] = UPG_SPEED; actor[a].upgrade_structure [2] = UPG_SLIDE; actor[a].upgrade_structure [3] = UPG_RETRO; actor[a].upgrade_structure [4] = UPG_SIDEKICK; actor[a].upgrade_structure [5] = UPG_ROCKET; actor[a].upgrade_structure [6] = UPG_PROJECT; actor[a].upgrade_structure [7] = UPG_WARHEAD; actor[a].upgrade_structure [8] = UPG_SPECIAL;*/ actor[a].upgrade_slot = 0; actor[a].brakes = BRAKES_DRAG; actor[a].brake_strength = 5; actor[a].max_armour = 1000; if (game.type == GAME_DUEL) { actor[a].max_armour = duel_armour(actor[a].max_armour, game.duel_handicap [actor[a].controller]); } actor[a].armour = actor[a].max_armour; actor[a].max_shield = 0; actor[a].shield = 0; actor[a].spawn_delay = 50; actor[a].grace_period = 0; actor[a].secondary = SECOND_NONE;//D_ORB;//SECONDARY_NONE; actor[a].sidekicks = 0; // actor[a].exhaust_distance_x = 14; // actor[a].exhaust_distance_y = 15; actor[a].exhaust_distance_x = 10; actor[a].exhaust_distance_y = 10; actor[a].flash_distance = 5000; switch(actor[a].ship) { case SHIP_SMALL: actor[a].radius = 7000; actor[a].edge_radius = 3000; actor[a].exhaust_distance_x = 7; actor[a].exhaust_distance_y = 7; break; case SHIP_HORSESHOE: actor[a].exhaust_distance_x = 4; actor[a].exhaust_distance_y = 4; break; case SHIP_FINS: actor[a].exhaust_distance_x = 9; actor[a].exhaust_distance_y = 9; break; case SHIP_RETRO: actor[a].exhaust_distance_x = 9; actor[a].exhaust_distance_y = 9; break; case SHIP_ROUND: actor[a].exhaust_distance_x = 9; actor[a].exhaust_distance_y = 9; break; case SHIP_ORBITAL: actor[a].exhaust_distance_x = 1; actor[a].exhaust_distance_y = 1; actor[a].mass = 400; break; case SHIP_CURVE: actor[a].exhaust_distance_x = 3; actor[a].exhaust_distance_y = 3; break; /* case SHIP_LACEWING: actor[a].exhaust_distance_x = 1; actor[a].exhaust_distance_y = 0; actor[a].flash_distance = 4000; break; case SHIP_AETHER: actor[a].exhaust_distance_x = 1; actor[a].exhaust_distance_y = 0; actor[a].flash_distance = 7000; break; case SHIP_DESPOT: actor[a].exhaust_distance_x = 1; actor[a].exhaust_distance_y = 0; break; case SHIP_CAPYBARA: actor[a].exhaust_distance_x = 6; actor[a].exhaust_distance_y = 5; actor[a].flash_distance = 6000; break; case SHIP_LENTIL: actor[a].exhaust_distance_x = 6; actor[a].exhaust_distance_y = 5; break; case SHIP_HOOKWORM: actor[a].exhaust_distance_x = 8; actor[a].exhaust_distance_y = 7; actor[a].flash_distance = 3000; break; case SHIP_PORKUPINE: actor[a].exhaust_distance_x = 8; actor[a].exhaust_distance_y = 7; actor[a].flash_distance = 4000; break; case SHIP_SCORPION: actor[a].exhaust_distance_x = 4; actor[a].exhaust_distance_y = 3; actor[a].flash_distance = 4000; break; case SHIP_TORTFEASOR: actor[a].exhaust_distance_x = 4; actor[a].exhaust_distance_y = 3; actor[a].flash_distance = 9000; break; case SHIP_RUMSFELD: actor[a].exhaust_distance_x = 4; actor[a].exhaust_distance_y = 3; break; case SHIP_PRONG: actor[a].flash_distance = 1000; break; case SHIP_GODBOTHERER: actor[a].exhaust_distance_x = 3; actor[a].exhaust_distance_y = 2; actor[a].flash_distance = 5000; break; case SHIP_BOTULUS: actor[a].exhaust_distance_x = 3; actor[a].exhaust_distance_y = 2; actor[a].flash_distance = 6000; break; case SHIP_SLIDEWINDER: actor[a].exhaust_distance_x = 1; actor[a].exhaust_distance_y = 0; actor[a].flash_distance = 4000; break; case SHIP_DOOM: actor[a].exhaust_distance_x = 7; actor[a].exhaust_distance_y = 6; actor[a].flash_distance = 8000; break; */ } actor[a].retro_distance_x = 5; actor[a].retro_distance_y = 4; actor[a].slide_distance_x = 5; actor[a].slide_distance_y = 4; // actor[a].exhaust_displacement = 0; actor[a].primary = WPN_DARTS; } int duel_armour(int armour, int h) { switch(h) { default: armour *= 100; break; case 0: armour *= 75; break; case 1: armour *= 100; break; case 2: armour *= 120; break; case 3: armour *= 150; break; } armour /= 100; return armour; } void calulate_total_power(int a) { int i, j; actor[a].total_power = 0; for (i = 0; i < 4; i ++) { for (j = 0; j < 4; j ++) { actor[a].total_power += actor[a].ability [i] [j]; } } } // called when an actor spawns after being destroyed void spawn_actor(int a) { actor[a].in_play = 1; // actor[a].x = arena.max_x / 2; //grand(arena.max_x - 100000) + 50000; // actor[a].y = arena.max_y / 2; //grand(arena.max_y - 100000) + 50000; actor[a].x = actor[a].next_spawn_x; actor[a].y = actor[a].next_spawn_y; int passing_colours [5]; passing_colours [0] = COLOUR_WHITE; create_cloud(CLOUD_SHRINKING_CIRCLE, actor[a].x, actor[a].y, 0, 0, 0, 0, 500, -300, 10, 0, 0, 0, passing_colours); passing_colours [0] = TRANS_DBLUE; passing_colours [1] = TRANS_LBLUE; passing_colours [2] = TRANS_WHITE; place_explosion(actor[a].x, actor[a].y, 0,0, 700 + crandom(250), passing_colours); /* actor[a].x_speed = 0; actor[a].y_speed = 0; actor[a].angle = 0; actor[a].base_angle = 0; actor[a].dragging = 0; actor[a].drag_amount = 0; // actor[a].in_play = 0; actor[a].moving_angle = actor[0].angle; actor[a].just_collided = 0; // actor[a].recharge = ships[ship].recharge; actor[a].just_upgraded = 0; actor[a].just_upgraded_timeout = 0; actor[a].shield_pulse = 0; actor[a].recycle1 = 0; actor[a].recycle2 = 0; actor[a].heavy_recycle = 0; actor[a].turret_recycle = 0; actor[a].backfire_recycle = 0; actor[a].cannon_status = 0; actor[a].orbital_angle = 0; actor[a].bomb_status = 0; actor[a].upgrade_slot = 0; actor[a].spawn_delay = 0; actor[a].grace_period = 169; actor[a].armour = actor[a].max_armour; actor[a].max_shield = 0; actor[a].shield = 0; actor[a].lock = -1; actor[a].turret_lock = -1;*/ reset_actor(a); actor[a].secondary = SECOND_NONE; // not in reset_actor as we want to retain this between levels. actor[a].sidekicks = 0; // if (actor[a].upgraded_system [UPG_SIDEKICK] > 0) // upgrade_sidekicks(a); play_wavf(NWAV_SPAWN, 800); if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP || game.type == GAME_DUEL) { calculate_beat(); } if (game.type != GAME_DUEL && game.type != GAME_TIME_ATTACK && game.type != GAME_TIME_ATTACK_COOP) game.ships_left --; } void actor_new_level(int a) { actor[a].in_play = 1; // actor[a].x = arena.max_x / 2; //grand(arena.max_x - 100000) + 50000; // actor[a].y = arena.max_y / 2; //grand(arena.max_y - 100000) + 50000; actor[a].x = grand(arena.max_x - 100000) + 50000; actor[a].y = grand(arena.max_y - 100000) + 50000; actor[a].next_spawn_x = actor[a].x; actor[a].next_spawn_y = actor[a].y; // actor[a].sidekicks = 0; // if (actor[a].upgraded_system [UPG_SIDEKICK] > 0) // upgrade_sidekicks(a); reset_actor(a); } void reset_actor(int a) { int j; actor[a].x_speed = 0; actor[a].y_speed = 0; actor[a].angle = 0; actor[a].base_angle = 0; actor[a].dragging = 0; actor[a].drag_amount = 0; actor[a].moving_angle = actor[0].angle; actor[a].just_collided = 0; actor[a].lock = -1; actor[a].just_upgraded = 0; actor[a].just_upgraded_timeout = 0; actor[a].shield_pulse = 0; actor[a].recycle1 = 0; actor[a].recycle2 = 0; actor[a].heavy_recycle = 0; actor[a].turret_recycle = 0; actor[a].backfire_recycle = 0; actor[a].sidekick_recycle = 0; actor[a].orbital_angle = 0; actor[a].lock = -1; actor[a].turret_lock = -1; actor[a].cannon_status = 0; actor[a].bomb_status = 0; // actor[a].upgrade_slot = 0; actor[a].spawn_delay = 0; actor[a].grace_period = 169; actor[a].repairing = 0; actor[a].armour = actor[a].max_armour; actor[a].max_shield = 0; actor[a].shield = 0; actor[a].shield_recharge = 0; actor[a].hurt_pulse = 0; actor[a].secondary_burst = 0; actor[a].secondary_burst_recycle = 0; actor[a].screen_shake_time = 0; for (j = 0; j < 5; j ++) { actor[a].sidekick_x [j] = actor[a].x; actor[a].sidekick_y [j] = actor[a].y; actor[a].sidekick_x_speed [j] = 0; actor[a].sidekick_y_speed [j] = 0; } actor[a].drive_sound [DRIVE_THRUST] = 0; actor[a].drive_sound [DRIVE_SLIDE] = 0; actor[a].drive_sound [DRIVE_RETRO] = 0; actor[a].thrust = 0; } void gain_score(int p, int sc) { if (arena.game_over > 0) return; if (game.type == GAME_DUEL) return; int old_score = player[p].score; player[p].score += sc; if (player[p].score > MAX_SCORE) player[p].score = MAX_SCORE; /* if (game.type != GAME_COOP) { if (old_score < 1000 && player[p].score >= 1000) extra_ship(); }*/ if (old_score < 1000 && player[p].score >= 1000) extra_ship(); // if (old_score < 5000 && player[p].score >= 5000) // extra_ship(); // if (old_score < 10000 && player[p].score > 10000) // extra_ship(); if (old_score / 5000 != player[p].score / 5000) extra_ship(); } void shake_all_screens(int amount) { actor[0].screen_shake_time += amount; if (actor[0].screen_shake_time > 15) actor[0].screen_shake_time = 15; actor[1].screen_shake_time += amount; if (actor[1].screen_shake_time > 15) actor[1].screen_shake_time = 15; } overgod-1.0/actor.h0000644000175000001440000000071610133075040013305 0ustar michiusers void run_actors(void); void gain_upgrade_points(int who, int how_many); int hurt_actor(int a, int source, int hurty); void init_actor(int a, int type); void spawn_actor(int a); void actor_new_level(int a); int acquire_target(int a); int closest_enemy(int x, int y, int range, int hide_invisible); int closest_enemy_or_actor(int a, int x, int y, int range, int hide_invisible); void gain_score(int p, int sc); void shake_all_screens(int amount); overgod-1.0/bullet.c0000644000175000001440000047037110310757124013476 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: bullet.c History: 11/9/2005 - Version 1.0 finalised This file contains: - functions relating to bullets and dangerous projectiles */ #include "allegro.h" #include #include "config.h" #include "globvars.h" #include "stuff.h" #include "cloud.h" #include "enemy.h" #include "actor.h" #include "sound.h" #include "light.h" #include "stuff.h" #include "display.h" #include "palette.h" #ifdef SANITY_CHECK extern FONT *small_font; #endif extern int var1, var2, var3; // debug display vars, externed as necessary int create_bullet(int type, int x, int y, int x_speed, int y_speed, int owner, int damage, int timer, int mass, int angle, int status, int size, int colours [4], int speed_div, int special1, int special2, int special3, int special4, int special5); void manage_bullet(int b); int move_bullet(int mbull, char limited); int detect_collision(int b, int things [2]); int detect_enemy_collision(int b, int things [2]); void bullet_impact(int b, int k, int hit_what); void destroy_bullet(int b); //void apply_force_to_actor(int a, int fx, int fy); //void apply_force_to_enemy(int e, int fx, int fy); void blast(int x, int y, int radius, int damage, int force, int owner); void drag_bullet(int b, float drag_amount); extern int inflicteda, inflictede; int enemy_bullet_track_target(int b, int attacking, int turning); int closest_target(int x, int y); int nearby_target(int range, int x, int y); void bullet_sound(int b, int sound); void bullet_soundf(int b, int sound, int freq); void bullet_soundvf(int b, int sound, int vol, int freq); void enemy_sparks(int e, int b, int bx, int by, int bxs, int bys, int damage); void shield_line(int e, int bx, int by); void shielder_pulse(int e, int dam); int check_shielder(int e); void line_blast(int x, int y, int type, int target); void teleport_actor(int a); int clear_space(int x, int y, int rad); int radius_effect(int x, int y, int radius, int effect); void actor_in_beam(int i, int angle, int damage, int force, int colour1, int colour2); enum { RADEFFECT_TELEPORT, RADEFFECT_MAX }; enum { BSOUND_BOMB, BSOUND_MISSILE, BSOUND_MINE, BSOUND_SEEKMINE, BSOUND_ORBITAL, BSOUND_SEEKBLOB_BANG1, BSOUND_SEEKBLOB_BANG2, BSOUND_TUBE, BSOUND_MINE2, BSOUND_HIT }; enum { HIT_NOTHING, HIT_ACTOR, HIT_ENEMY, HIT_EDGE, HIT_WAVE }; void init_bullets(void) { int b; for (b = 0; b < NO_BULLETS; b++) { bullet[b].type = BULLET_NONE; } } /* If this function is crashing mysteriously, it's probably being called with a zero value for speed_div. */ int create_bullet(int type, int x, int y, int x_speed, int y_speed, int owner, int damage, int timer, int mass, int angle, int status, int size, int colours [4], int speed_div, int special1, int special2, int special3, int special4, int special5) { #ifdef SANITY_CHECK if (type <= BULLET_NONE || speed_div <= 0) { rectfill(screen, 370, 230, 430, 280, COLOUR_RED3); textprintf_centre_ex(screen, small_font, 400, 250, COLOUR_WHITE, -1, "create_bullet %i %i", type, speed_div); rest(1000); // exit(type); } #endif if (owner < -1 || owner >= NO_ACTORS) return -1; int b = 0; for (b = 1; b < NO_BULLETS; b++) { /* if ((bullet_type == BULLET_SPARK || bullet_type == BULLET_SPECK) && bcounter > MAX_BULLETS / 2) return -1; // these bullets just for decoration*/ if (b == NO_BULLETS - 1) return -1; if (bullet[b].type == BULLET_NONE) break; } bullet[b].type = type; // bullet[b].x = x + (x_speed - actor[owner].x_speed); // bullet[b].y = y + (y_speed - actor[owner].y_speed); if (owner == OWNER_ENEMY) { bullet[b].x = x + (x_speed / speed_div); bullet[b].y = y + (y_speed / speed_div); } else { bullet[b].x = x + (x_speed - actor[owner].x_speed) / speed_div; bullet[b].y = y + (y_speed - actor[owner].y_speed) / speed_div; // bullet[b].x = x + (x_speed) / speed_div; // bullet[b].y = y + (y_speed) / speed_div; } bullet[b].x2 = x; bullet[b].y2 = y; bullet[b].x_speed = x_speed; bullet[b].y_speed = y_speed; bullet[b].owner = owner; bullet[b].size = size; bullet[b].timeout = timer; // bullet[b].status = status; bullet[b].damage = damage; bullet[b].left_owner = 0; bullet[b].mass = mass; bullet[b].angle = angle; bullet[b].colours [0] = colours [0]; bullet[b].colours [1] = colours [1]; bullet[b].colours [2] = colours [2]; bullet[b].colours [3] = colours [3]; bullet[b].special1 = special1; bullet[b].special2 = special2; bullet[b].special3 = special3; bullet[b].special4 = special4; bullet[b].special5 = special5; switch(type) { case BULLET_PANIC_EEL: if (grand(2) == 0) bullet[b].special2 *= -1; bullet[b].special3 = 3 + grand(2); break; case BULLET_CURVE: if (grand(2) == 0) bullet[b].angle = angle + ANGLE_HALF; // else // bullet[b].angle = angle - ANGLE_QUARTER; bullet[b].angle %= ANGLE_FULL; if (grand(10) == 0) bullet[b].angle = grand(ANGLE_FULL); break; case BULLET_TORPEDO2: bullet[b].x_speed = 0; bullet[b].y_speed = 0; break; } return b; } void run_bullets(void) { int b; for (b = 1; b < NO_BULLETS; b++) { if (bullet[b].type != BULLET_NONE) manage_bullet(b); } } void manage_bullet(int b) { // int x_gain = 0; // int y_gain = 0; // char angle_change; int cx, cy, xa, ya, xb; int c2x, c2y; int passing_colour [5]; if (bullet[b].left_owner < 100) bullet[b].left_owner ++; if (bullet[b].timeout > 0) { bullet[b].timeout --; if (bullet[b].timeout <= 0) { bullet_impact(b, -1, HIT_NOTHING); return; } } switch(bullet[b].type) { case BULLET_TOXIC_SUN: drag_bullet(b, 0.08); bullet[b].special2 --; if (bullet[b].special2 <= 0) { cx = bullet[b].angle + grand(75) - grand(75) - ANGLE_QUARTER; create_bullet(BULLET_TOXIC_FLARE, bullet[b].x - xpart(cx, bullet[b].special4), bullet[b].y - ypart(cx, bullet[b].special4), xpart(cx, bullet[b].special4 + grand(3000)), ypart(cx, bullet[b].special4 + grand(3000)), bullet[b].owner, bullet[b].special1, 30 + grand(10), 10, cx, 0, 0, bullet[b].colours, 1, 0, 0, 0, 0, 0); bullet[b].special2 = 3; bullet_soundvf(b, NWAV_JET, 100, 300 + grand(100) + bullet[b].special4 / 500); } passing_colour [0] = TRANS_YELLOW; //bullet[b].colours [0]; passing_colour [1] = TRANS_LGREEN; //bullet[b].colours [1]; passing_colour [2] = TRANS_DGREEN; //bullet[b].colours [2]; passing_colour [3] = TRANS_DGREY; //bullet[b].colours [3]; cx = grand(ANGLE_FULL); create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x + xpart(cx, 4000 + grand(7000)), bullet[b].y + ypart(cx, 4000 + grand(7000)), 0, 0, bullet[b].x_speed, bullet[b].y_speed, 25 + grand(10), 1, 1, 0, 0, 0, passing_colour); break; case BULLET_TOXIC_FLARE: passing_colour [0] = TRANS_YELLOW; //bullet[b].colours [0]; passing_colour [1] = TRANS_LGREEN; //bullet[b].colours [1]; passing_colour [2] = TRANS_DGREEN; //bullet[b].colours [2]; passing_colour [3] = TRANS_DGREY; //bullet[b].colours [3]; create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x + grand(5001) - 2500, bullet[b].y + grand(5001) - 2500, 0, 0, bullet[b].x_speed, bullet[b].y_speed, 25 + grand(10), 1, 1, 0, 0, 0, passing_colour); break; // case BULLET_NUMEROUS_BLADE: case BULLET_SLIVER: // drag_bullet(b, 0.03); bullet[b].special1 += bullet[b].special2; bullet[b].special1 &= 1023; break; case BULLET_EVIL_STAR: case BULLET_FROZEN_STAR: drag_bullet(b, 0.05); // add_light(LIGHT_NORMAL, 2 + grand(3), bullet[b].x + bullet[b].x_speed, bullet[b].y + bullet[b].y_speed); break; case BULLET_ZAP_DRAG: drag_bullet(b, 0.06); if (bullet[b].special1 < 2) { bullet[b].x2 = bullet[b].x; bullet[b].y2 = bullet[b].y; bullet[b].special1 ++; } else { bullet[b].x2 = bullet[b].x - bullet[b].x_speed * 2; bullet[b].y2 = bullet[b].y - bullet[b].y_speed * 2; } if (abs(bullet[b].x_speed) + abs(bullet[b].y_speed) > 500) bullet[b].timeout = 3; break; case BULLET_ICE_DART: case BULLET_ICE_DART_SMALL: drag_bullet(b, 0.09); break; case BULLET_SNOW_DART: case BULLET_SNOW_DART_SMALL: if (grand(3) == 0) { passing_colour[0] = COLOUR_GREY5; passing_colour[1] = COLOUR_BLUE8; passing_colour[2] = COLOUR_BLUE6; passing_colour[3] = COLOUR_BLUE4; passing_colour[4] = COLOUR_BLUE2; create_cloud(CLOUD_SPECK, bullet[b].x + grand(2001) - 1000, bullet[b].y + grand(2001) - 1000, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, passing_colour); } drag_bullet(b, 0.09); break; case BULLET_FROZEN_BREATH: if (grand(2) == 0) create_cloud(CLOUD_BLUE_BLOB, bullet[b].x + grand(2001) - 1000, bullet[b].y + grand(2001) - 1000, 0, 0, 0, 0, 2 + crandom(10),1 + grand(2),0, 0, 0, 0, passing_colour); drag_bullet(b, 0.09); break; case BULLET_BURNING_DRAGGED: drag_bullet(b, 0.04); case BULLET_BURNING_SPIRIT: if (grand(2) == 0) create_cloud(CLOUD_ORANGE_BLOB, bullet[b].x + grand(2001) - 1000, bullet[b].y + grand(2001) - 1000, 0, 0, 0, 0, 2 + crandom(10),1 + grand(2),0, 0, 0, 0, passing_colour); // add_light(LIGHT_NORMAL, 7, bullet[b].x + bullet[b].x_speed, bullet[b].y + bullet[b].y_speed); break; case BULLET_BURST: create_cloud(CLOUD_ORANGE_BLOB, bullet[b].x + grand(2001) - 1000, bullet[b].y + grand(2001) - 1000, 0, 0, 0, 0, 2 + crandom(10),1 + grand(2),0, 0, 0, 0, passing_colour); break; case BULLET_PUFFY3: create_cloud(CLOUD_GREEN_BLOB, bullet[b].x + grand(2001) - 1000, bullet[b].y + grand(2001) - 1000, 0, 0, 0, 0, 2 + crandom(10),1 + grand(2),0, 0, 0, 0, passing_colour); break; case BULLET_PUFFY4: create_cloud(CLOUD_BLUE_BLOB, bullet[b].x + grand(2001) - 1000, bullet[b].y + grand(2001) - 1000, 0, 0, 0, 0, 2 + crandom(10),1 + grand(2),0, 0, 0, 0, passing_colour); break; case BULLET_GREEN_BLAT: case BULLET_BLUE_BLAT: /* if (grand(2) == 0) create_cloud(CLOUD_GREEN_BLOB, bullet[b].x + grand(2001) - 1000, bullet[b].y + grand(2001) - 1000, 0, 0, 0, 0, 2 + crandom(10),1 + grand(2),0, 0, 0, 0, passing_colour);*/ drag_bullet(b, 0.07); break; case BULLET_FLOWER: drag_bullet(b, 0.1); break; case BULLET_PETAL1: add_light(LIGHT_NORMAL, 12 + (bullet[b].special2 / 3) + grand(4), bullet[b].x, bullet[b].y); drag_bullet(b, 0.03); passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x + grand(6000) - 3000, bullet[b].y + grand(6000) - 3000, 0, 0, bullet[b].x_speed, bullet[b].y_speed, 30 + grand(20), 3, 0, 0, 10 + grand(10), 0, passing_colour); break; case BULLET_WORM_SORROW: case BULLET_WORM_AGONY: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colour); if ((bullet[b].timeout == 143 + bullet[b].special5)|| (bullet[b].special3 == -1 && bullet[b].timeout % 5 == 0)) { if (game.type == GAME_DUEL) { bullet[b].special3 = closest_enemy_or_actor(bullet[b].owner, bullet[b].x, bullet[b].y, 500000, 1); } else bullet[b].special3 = closest_enemy(bullet[b].x, bullet[b].y, 1000000, 1); if (bullet[b].timeout == 143) bullet[b].timeout -= grand(10); } if (bullet[b].special3 == LOCK_ACTOR0 || bullet[b].special3 == LOCK_ACTOR1) { if (bullet[b].special3 == LOCK_ACTOR0) cx = 0; else cx = 1; if (hypot(bullet[b].y - actor[cx].y, bullet[b].x - actor[cx].x) < 30000) // < 5000) bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, actor[cx].x, actor[cx].y, bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; else bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, actor[cx].x + (actor[cx].x_speed * bullet[b].special5), actor[cx].y + (actor[cx].y_speed * bullet[b].special5), bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; } else if (bullet[b].special3 >= 0) { // destroyed enemies have locks cleared in register_destroyed (enemy.c) if (hypot(bullet[b].y - enemy[bullet[b].special3].y, bullet[b].x - enemy[bullet[b].special3].x) < 30000) // < 5000) bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, enemy[bullet[b].special3].x, enemy[bullet[b].special3].y, bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; else bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, enemy[bullet[b].special3].x + (enemy[bullet[b].special3].x_speed * bullet[b].special5), enemy[bullet[b].special3].y + (enemy[bullet[b].special3].y_speed * bullet[b].special5), bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; // What this does: if missile is close to enemy, heads straight for it. // Otherwise, leads it slightly (to an extent specified by bullet[b].special5) // For this reason, enemy[].x_speed must be set correctly even for enemies for whom it's irrelevant // (eg crawlers). <--- old lacewing stuff if ((enemy[bullet[b].special3].type == ENEMY_SHADOW1 || enemy[bullet[b].special3].type == ENEMY_SHADOW2) && enemy[bullet[b].special3].attribute [0] == 0) bullet[b].special3 = -1; } cx = xpart(bullet[b].angle - ANGLE_QUARTER, GRAIN); cy = ypart(bullet[b].angle - ANGLE_QUARTER, GRAIN); c2x = (cx * bullet[b].special1) / GRAIN; c2y = (cy * bullet[b].special1) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; // drag_bullet(b, 0.07); if (bullet[b].type == BULLET_WORM_SORROW) drag_bullet(b, 0.24); // 14 else drag_bullet(b, 0.11); break; case BULLET_CLAW: if (bullet[b].special3 > 0) { passing_colour [0] = TRANS_DGREY; passing_colour [1] = TRANS_DGREEN; passing_colour [2] = TRANS_LGREEN; passing_colour [3] = TRANS_YELLOW; bullet[b].special3 --; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colour); } else { passing_colour [0] = TRANS_DRED; passing_colour [1] = TRANS_LRED; passing_colour [2] = TRANS_ORANGE; passing_colour [3] = TRANS_YELLOW; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colour); cx = xpart(bullet[b].special2 - ANGLE_QUARTER, GRAIN); cy = ypart(bullet[b].special2 - ANGLE_QUARTER, GRAIN); c2x = (cx * bullet[b].special1) / GRAIN; c2y = (cy * bullet[b].special1) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; } drag_bullet(b, 0.1); // 14 break; case BULLET_SPORE: if (bullet[b].special3 == -1 && bullet[b].timeout % 5 == 0) { if (game.type == GAME_DUEL) { bullet[b].special3 = closest_enemy_or_actor(bullet[b].owner, bullet[b].x, bullet[b].y, 500000, 1); } else bullet[b].special3 = closest_enemy(bullet[b].x, bullet[b].y, 1000000, 1); } if (bullet[b].special3 == LOCK_ACTOR0 || bullet[b].special3 == LOCK_ACTOR1) { if (bullet[b].special3 == LOCK_ACTOR0) cx = 0; else cx = 1; if (hypot(bullet[b].y - actor[cx].y, bullet[b].x - actor[cx].x) < 30000) // < 5000) bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, actor[cx].x, actor[cx].y, bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; else bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, actor[cx].x + (actor[cx].x_speed * bullet[b].special5), actor[cx].y + (actor[cx].y_speed * bullet[b].special5), bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; if ((enemy[bullet[b].special3].type == ENEMY_SHADOW1 || enemy[bullet[b].special3].type == ENEMY_SHADOW2) && enemy[bullet[b].special3].attribute [0] == 0) bullet[b].special3 = -1; } else if (bullet[b].special3 >= 0) { // destroyed enemies have locks cleared in register_destroyed (enemy.c) if (hypot(bullet[b].y - enemy[bullet[b].special3].y, bullet[b].x - enemy[bullet[b].special3].x) < 30000) bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, enemy[bullet[b].special3].x, enemy[bullet[b].special3].y, bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; else bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, enemy[bullet[b].special3].x + (enemy[bullet[b].special3].x_speed * bullet[b].special5), enemy[bullet[b].special3].y + (enemy[bullet[b].special3].y_speed * bullet[b].special5), bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; } cx = xpart(bullet[b].angle - ANGLE_QUARTER, GRAIN); cy = ypart(bullet[b].angle - ANGLE_QUARTER, GRAIN); c2x = (cx * bullet[b].special1) / GRAIN; c2y = (cy * bullet[b].special1) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.1); break; case BULLET_ATTRACTOR_LINE: case BULLET_CHARGE_LINE: case BULLET_HOLE_LINE: if (bullet[b].special2 != -1) { c2y = 1; // if 0, bullet isn't attracted. if (bullet[b].type == BULLET_ATTRACTOR_LINE) { if (enemy[bullet[b].special2].type != ENEMY_ATTRACTOR) c2y = 0; cx = enemy[bullet[b].special2].x; cy = enemy[bullet[b].special2].y; c2x = 15000; } if (bullet[b].type == BULLET_CHARGE_LINE) { if (enemy[bullet[b].special2].type != ENEMY_BOSS2_2) c2y = 0; cx = enemy[bullet[b].special2].x + xpart(enemy[bullet[b].special2].angle, 35000); cy = enemy[bullet[b].special2].y + ypart(enemy[bullet[b].special2].angle, 35000); c2x = 7000; } if (bullet[b].type == BULLET_HOLE_LINE) { if (bullet[bullet[b].special2].type != BULLET_HOLE) c2y = 0; cx = bullet[bullet[b].special2].x; cy = bullet[bullet[b].special2].y; c2x = 7000; } if (c2y == 1) { // { xb = hypot(bullet[b].y - cy, bullet[b].x - cx) + 1; if (xb < c2x) { destroy_bullet(b); return; // hmmm. } if (TRUE) //xb < 300000) { xa = radians_to_angle(atan2(bullet[b].y - cy, bullet[b].x - cx)); ya = 120000 / xb; if (ya > 100) ya = 100; bullet[b].x_speed -= xpart(xa, ya * GRAIN / 3); bullet[b].y_speed -= ypart(xa, ya * GRAIN / 3); /* cx = xpart(xa, ya * GRAIN); cy = ypart(xa, ya * GRAIN); c2x = (cx * bullet[b].special1) / GRAIN; c2y = (cy * bullet[b].special1) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y;*/ } // } // else // bullet[b].special2 = -1; } } // end if bullet[b].special2 != -1 passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_TRANS_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colour); drag_bullet(b, 0.07);// .11 break; case BULLET_DISRUPT2: /* passing_colour [0] = TRANS_REVERSE; create_cloud(CLOUD_MED_TRANS_CIRCLE, bullet[b].x + grand(5000) - grand(5000), bullet[b].y + grand(5000) - grand(5000), 0, 0, 0, 0, 500 + grand(400), -3, 7, 0, 0, 0, passing_colour);*/ break; case BULLET_DISRUPT3: /* passing_colour [0] = TRANS_DARKEN; create_cloud(CLOUD_MED_TRANS_CIRCLE, bullet[b].x + grand(5000) - grand(5000), bullet[b].y + grand(5000) - grand(5000), 0, 0, 0, 0, 500 + grand(400), -7, 7, 0, 0, 0, passing_colour);*/ break; case BULLET_EVIL_WORM: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colour); if (bullet[b].timeout == bullet[b].special2 || (bullet[b].special3 == -1 && bullet[b].timeout % 5 == 0)) { bullet[b].special3 = closest_target(bullet[b].x, bullet[b].y); if (bullet[b].timeout == bullet[b].special2) bullet[b].timeout -= grand(10); } if (bullet[b].special3 != -1) //== LOCK_ACTOR0 || bullet[b].special3 == LOCK_ACTOR1) { cx = bullet[b].special3; // if (bullet[b].special3 == LOCK_ACTOR0) // cx = 0; // else // cx = 1; // if (hypot(bullet[b].y - actor[cx].y, bullet[b].x - actor[cx].x) // < 30000) // { bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, actor[cx].x, actor[cx].y, bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; // } // else // bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, actor[cx].x + (actor[cx].x_speed), actor[cx].y + (actor[cx].y_speed), bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; } cx = xpart(bullet[b].angle - ANGLE_QUARTER, GRAIN); cy = ypart(bullet[b].angle - ANGLE_QUARTER, GRAIN); c2x = (cx * bullet[b].special1) / GRAIN; c2y = (cy * bullet[b].special1) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.05); break; case BULLET_SWIRL2: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colour); if (bullet[b].special3 != -1) { if (bullet[bullet[b].special3].type != BULLET_SWIRL1) bullet[b].special3 = -1; } if (bullet[b].special5 > 0) bullet[b].special5 --; if (bullet[b].special3 != -1 && bullet[b].special5 == 0) { cx = bullet[b].special3; bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, bullet[cx].x, bullet[cx].y, bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; } cx = xpart(bullet[b].angle - ANGLE_QUARTER, GRAIN); cy = ypart(bullet[b].angle - ANGLE_QUARTER, GRAIN); c2x = (cx * bullet[b].special1) / GRAIN; c2y = (cy * bullet[b].special1) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.05); break; case BULLET_FROZEN_TOOTH: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colour); cx = xpart(bullet[b].special5 - ANGLE_QUARTER, GRAIN); cy = ypart(bullet[b].special5 - ANGLE_QUARTER, GRAIN); c2x = (cx * bullet[b].special4) / GRAIN; c2y = (cy * bullet[b].special4) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; // drag_bullet(b, 0.07); drag_bullet(b, 0.03); // add_light(LIGHT_NORMAL, 3 + grand(4), bullet[b].x + bullet[b].x_speed, bullet[b].y + bullet[b].y_speed); break; case BULLET_BOLT: // if (bullet[b].timeout < 5) // break; passing_colour [0] = bullet[b].colours [3]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [0]; // passing_colour [3] = TRANS_DRED; // passing_colour [4] = TRANS_DRED; place_rocket_trail(bullet[b].x + grand(4001) - 2000, bullet[b].y + grand(4001) - 2000, 0, 0, 150, passing_colour); // place_rocket_trail(bullet[b].x + grand(3001) - 1500, bullet[b].y + grand(3001) - 1500, 0, 0, 250, passing_colour); /* if (bullet[b].timeout % 4 != 0) break; passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; place_explosion_no_light(bullet[b].x, bullet[b].y, 0, 0, 10 + grand(5), passing_colour);*/ // place_explosion(bullet[b].x + grand(bullet[b].special1 * 2) - bullet[b].special1, bullet[b].y + grand(bullet[b].special1 * 2) - bullet[b].special1, 0, 0, 100 + grand(50 + bullet[b].special2), passing_colour); break; case BULLET_YELLOW_PULSE: add_light(LIGHT_NORMAL, 9 + grand(5), bullet[b].x, bullet[b].y); if (grand(2) == 0) break; passing_colour [0] = bullet[b].colours [0]; cx = 36 + grand(12); create_cloud(CLOUD_SMALL_FADING_CIRCLE, bullet[b].x + grand(4001) - 2000, bullet[b].y + grand(4001) - 2000, 0, 0, 0, 0, cx, 3, 0, 0, cx, 0, passing_colour); break; case BULLET_WINGS1: if (bullet[b].timeout <= 1) { bullet[b].type = BULLET_WINGS2; bullet[b].timeout = 30; } break; case BULLET_WINGS2: if (bullet[b].special1 != ATTACK_NONE) bullet[b].angle = enemy_bullet_track_target(b, bullet[b].special1, 16); if (bullet[b].timeout <= 1) { bullet[b].type = BULLET_WINGS3; bullet[b].timeout = 80 + grand(20); bullet_soundf(b, NWAV_JET, 1000 + grand(300)); } break; case BULLET_WINGS3: bullet[b].angle += 5 - grand(11); bullet[b].angle &= 1023; cx = xpart(bullet[b].angle, 300); cy = ypart(bullet[b].angle, 300); bullet[b].x_speed += cx; bullet[b].y_speed += cy; drag_bullet(b, 0.03); if (grand(2) == 0) { passing_colour [0] = TRANS_DRED; passing_colour [1] = TRANS_LRED; passing_colour [2] = TRANS_YELLOW; // passing_colour [3] = TRANS_DRED; // passing_colour [4] = TRANS_DRED; // place_rocket_trail(bullet[b].x + grand(3001) - 1500 - cx * 14, bullet[b].y + grand(3001) - 1500 - cy * 14, bullet[b].x_speed - cx*2, bullet[b].y_speed - cy*2, 140, passing_colour); place_rocket_trail(bullet[b].x + grand(3001) - 1500 - cx * 14, bullet[b].y + grand(3001) - 1500 - cy * 14, bullet[b].x_speed - cx*2, bullet[b].y_speed - cy*2, 110, passing_colour); } add_light(LIGHT_NORMAL, 4 + grand(3), bullet[b].x, bullet[b].y); break; case BULLET_BIGWINGS1: if (bullet[b].timeout <= 1) { bullet[b].type = BULLET_BIGWINGS2; bullet[b].timeout = 30; } break; case BULLET_BIGWINGS2: if (bullet[b].special1 != ATTACK_NONE) bullet[b].angle = enemy_bullet_track_target(b, bullet[b].special1, 16); if (bullet[b].timeout <= 1) { bullet[b].type = BULLET_BIGWINGS3; bullet[b].timeout = 80 + grand(20); bullet_soundf(b, NWAV_JET, 600 + grand(100)); } break; case BULLET_BIGWINGS3: bullet[b].angle += 9 - grand(19); bullet[b].angle &= 1023; cx = xpart(bullet[b].angle, 300); cy = ypart(bullet[b].angle, 300); bullet[b].x_speed += cx; bullet[b].y_speed += cy; drag_bullet(b, 0.03); if (grand(3) != 0) { passing_colour [0] = TRANS_DGREEN; passing_colour [1] = TRANS_LGREEN; passing_colour [2] = TRANS_YELLOW; // passing_colour [3] = TRANS_DRED; // passing_colour [4] = TRANS_DRED; // place_rocket_trail(bullet[b].x + grand(3001) - 1500 - cx * 14, bullet[b].y + grand(3001) - 1500 - cy * 14, bullet[b].x_speed - cx*2, bullet[b].y_speed - cy*2, 140, passing_colour); place_rocket_trail(bullet[b].x + grand(4001) - 2000 - cx * 14, bullet[b].y + grand(4001) - 2000 - cy * 14, bullet[b].x_speed - cx*2, bullet[b].y_speed - cy*2, 210, passing_colour); } add_light(LIGHT_NORMAL, 7 + grand(4), bullet[b].x, bullet[b].y); break; case BULLET_CIRCLES: if (counter % 3 != 0) break; passing_colour [0] = bullet[b].colours [0]; create_cloud(CLOUD_SHRINKING_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 500,-50,10, 0, 0, 0, passing_colour); break; case BULLET_CIRCLES2: if (counter % 2 != 0) break; passing_colour [0] = bullet[b].colours [0]; create_cloud(CLOUD_SHRINKING_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 500,-50,10, 0, 0, 0, passing_colour); break; case BULLET_BIGCIRCLES: if (counter % 2 != 0) break; passing_colour [0] = bullet[b].colours [0]; create_cloud(CLOUD_SHRINKING_CIRCLE, bullet[b].x + grand(8000) - grand(8000), bullet[b].y + grand(8000) - grand(8000), 0, 0, 0, 0, 500 + grand(200),-50,10, 0, 0, 0, passing_colour); break; case BULLET_BLOCKS: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_BLOCK1, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 6 + grand(8),1,0, bullet[b].angle, 0, 0, passing_colour); break; case BULLET_OVERBLOCKS: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_BLOCK1, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 14 + ypart(bullet[b].special1, 7),1,0, bullet[b].angle, 0, 0, passing_colour); bullet[b].size = (5 + ypart(bullet[b].special1, 8)) * GRAIN; bullet[b].special1 += 145; bullet[b].special1 %= ANGLE_FULL; break; case BULLET_ZIGZAG2: /* passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_BLOCK5, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 90, 5 + grand(10), 0, bullet[b].angle, 5 + grand(5), 0, passing_colour);*/ /* create_cloud(CLOUD_BLOCK5, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 90, 10, 0, bullet[b].angle, 7, 0, passing_colour);*/ bullet[b].special2--; if (bullet[b].special2 == 0) { bullet[b].special2 = 12; if (bullet[b].special5 == 1) bullet[b].special2 = 6 + grand(10); // bullet[b].x_speed += xpart(bullet[b].special4 + bullet[b].special1, bullet[b].special3); // bullet[b].y_speed += ypart(bullet[b].special4 + bullet[b].special1, bullet[b].special3); bullet[b].x_speed += xpart(bullet[b].angle + bullet[b].special1, bullet[b].special3); bullet[b].y_speed += ypart(bullet[b].angle + bullet[b].special1, bullet[b].special3); bullet[b].special4 = radians_to_angle(atan2(bullet[b].y_speed, bullet[b].x_speed)); bullet[b].special1 *= -1; if (bullet[b].special3 == 7000) bullet[b].special3 = 14000; bullet[b].x2 = bullet[b].x; bullet[b].y2 = bullet[b].y; /* passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_BLOCK1, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 19, 1,0, bullet[b].special4, 0, 0, passing_colour);*/ } bullet[b].x2 -= bullet[b].x_speed; bullet[b].y2 -= bullet[b].y_speed; break; case BULLET_CURVEY: // if (counter % 2 == 0) // break; passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; cx = bullet[b].x - xpart(bullet[b].angle, 1 * GRAIN); cy = bullet[b].y - ypart(bullet[b].angle, 1 * GRAIN); create_cloud(CLOUD_BLOCK1, cx, cy, bullet[b].x, bullet[b].y, 0, 0, 6 + grand(7),1,0, bullet[b].angle, 0, 0, passing_colour); break; case BULLET_LINE_PULSE: // passing_colour [0] = COLOUR_ORANGE8; passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; /* if (counter % 2 != 0) break; passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; cx = bullet[b].x - xpart(bullet[b].angle, 2 * GRAIN); cy = bullet[b].y - ypart(bullet[b].angle, 2 * GRAIN); create_cloud(CLOUD_BLOCK1, cx, cy, bullet[b].x, bullet[b].y, 0, 0, 6 + grand(7), 1, 0, bullet[b].angle, 0, 0, passing_colour);*/ create_cloud(CLOUD_LINE_SHADOW, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 30 + grand(60),3 + grand(7),0, bullet[b].angle, 0, 0, passing_colour); break; case BULLET_THICK_SHOCK: bullet[b].x2 = bullet[b].x; bullet[b].y2 = bullet[b].y; bullet[b].x += grand(28001) - 14000; bullet[b].y += grand(28001) - 14000; passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; cx = 8 + grand(3); create_cloud(CLOUD_BLOCK4, bullet[b].x2 - bullet[b].x_speed, bullet[b].y2 - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, cx,1,0, bullet[b].angle, 0, 0, passing_colour); create_cloud(CLOUD_THICK_SHOCK_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, cx,1,0, bullet[b].angle, 0, 0, passing_colour); add_light(LIGHT_NORMAL, 15 + grand(15), bullet[b].x, bullet[b].y); break; case BULLET_NOVA: blast(bullet[b].x, bullet[b].y, 30000, 50, 300, bullet[b].owner); if (bullet[b].timeout <= 3) { passing_colour [0] = TRANS_LRED; passing_colour [1] = TRANS_YELLOW; passing_colour [2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 600 + grand(300), passing_colour); blast(bullet[b].x, bullet[b].y, 70000, 300, 30000, bullet[b].owner); place_burstlet_burst(bullet[b].x, bullet[b].y, 0, 0, 6, 6, 4, 1500, 1500, 7, passing_colour); simple_shockwave(TRANS_YELLOW, bullet[b].x, bullet[b].y, 0, 0, 800 + crandom(50), 30); bullet_soundf(b, NWAV_BURSTZL, 700 + grand(500)); // simple_shockwave(TRANS_YELLOW, bullet[b].x, bullet[b].y, 0, 0, 1400 + crandom(50), 25); // simple_shockwave(TRANS_YELLOW, bullet[b].x, bullet[b].y, 0, 0, 1800 + crandom(50), 50); for (xb = 0; xb < 12; xb ++) { cx = grand(ANGLE_FULL); cy = 5000 + grand(20000); create_bullet(BULLET_HOLE_LINE, bullet[b].x + xpart(cx, cy), bullet[b].y + ypart(cx, cy), xpart(cx, cy), ypart(cx, cy), bullet[b].owner, 0, 90 + grand(10), 10, 0, 0, 0, bullet[b].colours, 1, 0, b, 0, 0, 0); } bullet[b].type = BULLET_HOLE; bullet[b].timeout = 180; break; } drag_bullet(b, 0.1); c2y = grand(4000); bullet[b].size = 18000; passing_colour [0] = TRANS_WHITE; passing_colour [1] = TRANS_YELLOW; passing_colour [2] = TRANS_LRED; passing_colour [3] = TRANS_DRED; if (bullet[b].timeout <= 40) { // cx = grand(xpart(bullet[b].timeout * 7 - ANGLE_QUARTER, 70000)); cx = xpart(bullet[b].timeout * 7 - ANGLE_QUARTER, 70000); bullet[b].size = xpart(bullet[b].timeout * 7 - ANGLE_QUARTER, 60000); c2y = grand(4000) + (60 - bullet[b].timeout) * 80; passing_colour [0] = TRANS_ORANGE; passing_colour [1] = TRANS_LRED; passing_colour [2] = TRANS_DRED; passing_colour [3] = TRANS_DRED; } else { cx = 25000; /* passing_colour [0] = TRANS_WHITE; passing_colour [1] = TRANS_YELLOW; passing_colour [2] = TRANS_LRED; passing_colour [3] = TRANS_DRED;*/ } for (xb = 0; xb < 5; xb ++) { xa = grand(ANGLE_FULL); c2x = grand(cx); create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x + xpart(xa, c2x), bullet[b].y + ypart(xa, c2x), 0, 0, xpart(xa, c2y), ypart(xa, c2y), 25 + grand(10), 2, 0, 0, 0, 0, passing_colour); } break; case BULLET_HOLE: if (bullet[b].timeout == 1) { simple_shockwave(TRANS_YELLOW, bullet[b].x, bullet[b].y, 0, 0, 300 + crandom(50), 20); blast(bullet[b].x, bullet[b].y, 30000, 100, 4000, bullet[b].owner); break; } blast(bullet[b].x, bullet[b].y, 15000, 50, 0, bullet[b].owner); blast(bullet[b].x, bullet[b].y, 600000, 0, -100, OWNER_ENEMY); if (bullet[b].timeout < 10) break; cx = grand(ANGLE_FULL); cy = 10000 + grand(50000); create_bullet(BULLET_HOLE_LINE, bullet[b].x + xpart(cx, cy), bullet[b].y + ypart(cx, cy), 0, 0, bullet[b].owner, 0, 30 + grand(10), 10, 0, 0, 0, bullet[b].colours, 1, 0, b, 0, 0, 0); break; case BULLET_ORBIT: // bullet[b].x2 = bullet[b].x; // bullet[b].y2 = bullet[b].y; // bullet[b].x += grand(28001) - 14000; // bullet[b].y += grand(28001) - 14000; passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; cx = 5 + grand(7); //bullet[b].special3 + grand(bullet[b].special4); create_cloud(CLOUD_THICK_SHOCK_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, cx,1,0, bullet[b].angle, 0, 0, passing_colour); if (bullet[b].colours [0] == TRANS_WHITE) { passing_colour [0] = TRANS_LGREY; create_cloud(CLOUD_BLOCK4, bullet[b].special1,// - bullet[b].x_speed, bullet[b].special2,// - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, cx,1,0, bullet[b].angle, 0, 0, passing_colour); } add_light(LIGHT_NORMAL, 20 + grand(8), bullet[b].x, bullet[b].y); break; /* case BULLET_E_BOMB: drag_bullet(b, 0.03); if (counter % 3 != 0) break; passing_colour [0] = COLOUR_YELLOW8; //bullet[b].colours [0]; create_cloud(CLOUD_SMALL_SHRINKING_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, // 300,-30,15, 0, 0, 0, passing_colour); 400,30,3, 0, 0, 0, passing_colour); break;*/ case BULLET_E_BOMB2: drag_bullet(b, 0.06); if (abs(bullet[b].x_speed) + abs(bullet[b].y_speed) < 2000) break; // note indices reversed passing_colour [3] = COLOUR_WHITE;//bullet[b].colours [0]; passing_colour [2] = COLOUR_GREY5;//bullet[b].colours [1]; passing_colour [1] = COLOUR_BLUE8;//bullet[b].colours [2]; passing_colour [0] = COLOUR_BLUE7;//bullet[b].colours [3]; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 3,0, 0, 0, 0, passing_colour); break; case BULLET_DISRUPT1_DROP: bullet[b].special1 ++; // blast(bullet[b].x, bullet[b].y, 150000, 3, 300, bullet[b].owner); blast(bullet[b].x, bullet[b].y, 100000, 3, 300, bullet[b].owner); break; case BULLET_FORK1: case BULLET_FORK2: case BULLET_FORK3: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2 - (bullet[b].type == BULLET_FORK1),0, 0, 0, 0, passing_colour); break; case BULLET_EVIL_EEL: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colour); if (bullet[b].special3 <= 0) { bullet[b].special3 = 7 + grand(3); bullet[b].special2 *= -1; } bullet[b].special3 --; bullet[b].angle += bullet[b].special2; cx = xpart(bullet[b].angle - ANGLE_QUARTER, GRAIN); cy = ypart(bullet[b].angle - ANGLE_QUARTER, GRAIN); xa = bullet[b].special1 / 2 + grand(bullet[b].special1) / 2; c2x = (cx * xa) / GRAIN; c2y = (cy * xa) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.15); break; case BULLET_PANIC_EEL: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colour); if (bullet[b].special5 > 0) { bullet[b].special5 --; drag_bullet(b, 0.05); break; } if (bullet[b].special3 <= 0) { bullet[b].special3 = 7 + grand(3); bullet[b].special2 *= -1; } bullet[b].special3 --; bullet[b].special4 += bullet[b].special2; cx = xpart(bullet[b].special4 - ANGLE_QUARTER, GRAIN); cy = ypart(bullet[b].special4 - ANGLE_QUARTER, GRAIN); xa = bullet[b].special1 / 2 + grand(bullet[b].special1) / 2; c2x = (cx * xa) / GRAIN; c2y = (cy * xa) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.15); break; case BULLET_TURN_WORM: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colour); bullet[b].angle += bullet[b].special2; cx = xpart(bullet[b].angle - ANGLE_QUARTER, GRAIN); cy = ypart(bullet[b].angle - ANGLE_QUARTER, GRAIN); c2x = (cx * bullet[b].special1) / GRAIN; c2y = (cy * bullet[b].special1) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.15); break; case BULLET_SQUIRMY: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colour); if (bullet[b].special3 <= 0) { bullet[b].special3 = bullet[b].special4; bullet[b].special2 *= -1; } bullet[b].special3 --; bullet[b].angle += bullet[b].special2; cx = xpart(bullet[b].angle - ANGLE_QUARTER, GRAIN); cy = ypart(bullet[b].angle - ANGLE_QUARTER, GRAIN); c2x = (cx * bullet[b].special1) / GRAIN; c2y = (cy * bullet[b].special1) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.15); break; case BULLET_SEEKER1: case BULLET_SEEKER2: case BULLET_SEEKER3: add_light(LIGHT_NORMAL, (bullet[b].special2 / 3) + grand(4), bullet[b].x, bullet[b].y); if (bullet[b].special1 != ATTACK_NONE) { bullet[b].angle = enemy_bullet_track_target(b, bullet[b].special1, bullet[b].special3); cx = xpart(bullet[b].angle, bullet[b].special4); cy = ypart(bullet[b].angle, bullet[b].special4); bullet[b].x_speed += cx; bullet[b].y_speed += cy; drag_bullet(b, 0.03); } passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; /* passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; place_explosion_no_light(bullet[b].x + grand(bullet[b].special5) - bullet[b].special5 / 2, bullet[b].y + grand(bullet[b].special5) - bullet[b].special5 / 2, bullet[b].x_speed, bullet[b].y_speed, 1, passing_colour);//bullet[b].special2 * 2 + grand(20), passing_colour); */ cx = bullet[b].special2 + grand(12); // create_cloud(CLOUD_SMALL_FADING_CIRCLE, create_cloud(CLOUD_BLAST_CIRCLE, //MED_TRANS_FADING_CIRCLE, bullet[b].x + grand(bullet[b].special5) - bullet[b].special5 / 2, bullet[b].y + grand(bullet[b].special5) - bullet[b].special5 / 2, 0, 0, bullet[b].x_speed, bullet[b].y_speed, cx, 3, 0, 0, cx, 0, passing_colour); break; case BULLET_BIGSEEKER: add_light(LIGHT_NORMAL, 25 + grand(5), bullet[b].x, bullet[b].y); if (bullet[b].special1 != ATTACK_NONE) { bullet[b].angle = enemy_bullet_track_target(b, bullet[b].special1, 12); cx = xpart(bullet[b].angle, 210); cy = ypart(bullet[b].angle, 210); bullet[b].x_speed += cx; bullet[b].y_speed += cy; drag_bullet(b, 0.023); } if (bullet[b].timeout % 4 != 0) break; /* passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3];*/ passing_colour [0] = bullet[b].colours [2]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [0]; place_explosion_no_light(bullet[b].x + grand(9000) - grand(9000), bullet[b].y + grand(9000) - grand(9000), bullet[b].x_speed, bullet[b].y_speed, 1, passing_colour);//bullet[b].special2 * 2 + grand(20), passing_colour); /* cx = bullet[b].special2 + grand(12); create_cloud(CLOUD_BLAST_CIRCLE, //MED_TRANS_FADING_CIRCLE, bullet[b].x + grand(bullet[b].special5) - bullet[b].special5 / 2, bullet[b].y + grand(bullet[b].special5) - bullet[b].special5 / 2, 0, 0, bullet[b].x_speed, bullet[b].y_speed, cx, 3, 0, 0, cx, 0, passing_colour);*/ break; case BULLET_CHARGE: add_light(LIGHT_NORMAL, 25 + grand(5), bullet[b].x, bullet[b].y); // if (bullet[b].timeout % 3 != 0) // break; passing_colour [0] = bullet[b].colours [2]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [0]; passing_colour [0] = bullet[b].colours [0]; cx = bullet[b].x + grand(9001) - 4500; cy = bullet[b].y + grand(9001) - 4500; create_cloud(CLOUD_MED_TRANS_CIRCLE, cx, cy, 0, 0, 0, 0, 800 + grand(400),50,2, 0, 0, 0, passing_colour); passing_colour [0] = bullet[b].colours [1]; create_cloud(CLOUD_MED_TRANS_CIRCLE, cx, cy, 0, 0, 0, 0, 800 + grand(400),40,1, 0, 0, 0, passing_colour); passing_colour [0] = bullet[b].colours [2]; create_cloud(CLOUD_MED_TRANS_CIRCLE, cx, cy, 0, 0, 0, 0, 800 + grand(400),30,1, 0, 0, 0, passing_colour); // place_explosion_no_light(bullet[b].x + grand(9000) - grand(9000), bullet[b].y + grand(9000) - grand(9000), // 0, 0, 1, passing_colour);//bullet[b].special2 * 2 + grand(20), passing_colour); break; case BULLET_SWIRL1: add_light(LIGHT_NORMAL, 25 + grand(5), bullet[b].x, bullet[b].y); if (bullet[b].timeout % 2 == 0) break; // passing_colour [0] = bullet[b].colours [2]; // passing_colour [1] = bullet[b].colours [1]; // passing_colour [2] = bullet[b].colours [0]; passing_colour [0] = bullet[b].colours [0]; cx = bullet[b].x + grand(3001) - 1500; cy = bullet[b].y + grand(3001) - 1500; create_cloud(CLOUD_MED_TRANS_CIRCLE, cx, cy, 0, 0, 0, 0, 600 + grand(300),40,2, 0, 0, 0, passing_colour); passing_colour [0] = bullet[b].colours [1]; create_cloud(CLOUD_MED_TRANS_CIRCLE, cx, cy, 0, 0, 0, 0, 600 + grand(300),30,1, 0, 0, 0, passing_colour); passing_colour [0] = bullet[b].colours [3]; create_cloud(CLOUD_MED_TRANS_CIRCLE, cx, cy, 0, 0, 0, 0, 600 + grand(300),20,1, 0, 0, 0, passing_colour); // place_explosion_no_light(bullet[b].x + grand(9000) - grand(9000), bullet[b].y + grand(9000) - grand(9000), // 0, 0, 1, passing_colour);//bullet[b].special2 * 2 + grand(20), passing_colour); break; case BULLET_PULSE1: // add_light(LIGHT_NORMAL, (7) + grand(5), bullet[b].x, bullet[b].y); if (bullet[b].special1 != ATTACK_NONE) { bullet[b].angle = enemy_bullet_track_target(b, bullet[b].special1, 16); cx = xpart(bullet[b].angle, 260); cy = ypart(bullet[b].angle, 260); bullet[b].x_speed += cx; bullet[b].y_speed += cy; } drag_bullet(b, 0.15); break; case BULLET_PULSE2: // add_light(LIGHT_NORMAL, (7) + grand(5), bullet[b].x, bullet[b].y); if (bullet[b].special1 != ATTACK_NONE) { bullet[b].angle = enemy_bullet_track_target(b, bullet[b].special1, 32); cx = xpart(bullet[b].angle, 500); cy = ypart(bullet[b].angle, 500); bullet[b].x_speed += cx; bullet[b].y_speed += cy; } drag_bullet(b, 0.20); break; case BULLET_OVERPULSE: if (bullet[b].special1 != ATTACK_NONE) { bullet[b].angle = enemy_bullet_track_target(b, bullet[b].special1, 32); cx = xpart(bullet[b].angle, 400); cy = ypart(bullet[b].angle, 400); bullet[b].x_speed += cx; bullet[b].y_speed += cy; } drag_bullet(b, 0.17); cx = (bullet[b].timeout % 64) * 16; if (bullet[b].special2 == 1) cx = ANGLE_FULL - cx; bullet[b].size = 12000 + xpart(cx, 3); break; case BULLET_EYE_DESOLATION: cx = xpart(bullet[b].angle - ANGLE_QUARTER, GRAIN); cy = ypart(bullet[b].angle - ANGLE_QUARTER, GRAIN); c2x = (cx * bullet[b].special4) / GRAIN; c2y = (cy * bullet[b].special4) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.03); // if (crandom(bullet[b].special1) > 100) { passing_colour [0] = TRANS_DRED;//bullet[b].colours [0]; passing_colour [1] = TRANS_ORANGE;//bullet[b].colours [2]; // 1->1 passing_colour [2] = TRANS_YELLOW;//bullet[b].colours [3]; // 2->3 place_rocket_trail(bullet[b].x + grand(3001) - 1500 - cx * 3, bullet[b].y + grand(3001) - 1500 - cy * 3, bullet[b].x_speed - cx*2, bullet[b].y_speed - cy*2, 140, passing_colour); } add_light(LIGHT_NORMAL, 8 + grand(4), bullet[b].x, bullet[b].y); break; case BULLET_TRI1: cx = xpart(bullet[b].angle, GRAIN); cy = ypart(bullet[b].angle, GRAIN); c2x = (cx * 100) / GRAIN; c2y = (cy * 100) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.007); passing_colour [0] = TRANS_DRED;//bullet[b].colours [0]; passing_colour [1] = TRANS_ORANGE;//bullet[b].colours [2]; // 1->1 passing_colour [2] = TRANS_YELLOW;//bullet[b].colours [3]; // 2->3 place_rocket_trail(bullet[b].x + grand(3001) - 1500 - cx * 3, bullet[b].y + grand(3001) - 1500 - cy * 3, bullet[b].x_speed - cx*2, bullet[b].y_speed - cy*2, 110, passing_colour); add_light(LIGHT_NORMAL, 8 + grand(4), bullet[b].x, bullet[b].y); break; case BULLET_TRI2: cx = xpart(bullet[b].angle, GRAIN); cy = ypart(bullet[b].angle, GRAIN); c2x = (cx * 140) / GRAIN; c2y = (cy * 140) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.006); passing_colour [0] = TRANS_DBLUE;//bullet[b].colours [0]; passing_colour [1] = TRANS_LBLUE;//bullet[b].colours [2]; // 1->1 passing_colour [2] = TRANS_WHITE;//bullet[b].colours [3]; // 2->3 place_rocket_trail(bullet[b].x + grand(3001) - 1500 - cx * 3, bullet[b].y + grand(3001) - 1500 - cy * 3, bullet[b].x_speed - cx*2, bullet[b].y_speed - cy*2, 110, passing_colour); add_light(LIGHT_NORMAL, 10 + grand(4), bullet[b].x, bullet[b].y); break; case BULLET_TRI3: cx = xpart(bullet[b].angle, GRAIN); cy = ypart(bullet[b].angle, GRAIN); c2x = (cx * 160) / GRAIN; c2y = (cy * 160) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.005); passing_colour [0] = TRANS_ORANGE;//bullet[b].colours [0]; passing_colour [1] = TRANS_YELLOW;//bullet[b].colours [2]; // 1->1 passing_colour [2] = TRANS_WHITE;//bullet[b].colours [3]; // 2->3 place_rocket_trail(bullet[b].x + grand(3001) - 1500 - cx * 3, bullet[b].y + grand(3001) - 1500 - cy * 3, bullet[b].x_speed - cx*2, bullet[b].y_speed - cy*2, 110, passing_colour); add_light(LIGHT_NORMAL, 12 + grand(4), bullet[b].x, bullet[b].y); break; case BULLET_OVERTRI: cx = xpart(bullet[b].angle, GRAIN); cy = ypart(bullet[b].angle, GRAIN); c2x = (cx * 100) / GRAIN; c2y = (cy * 100) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.003); passing_colour [0] = TRANS_DGREEN;//bullet[b].colours [0]; passing_colour [1] = TRANS_LGREEN;//bullet[b].colours [2]; // 1->1 passing_colour [2] = TRANS_YELLOW;//bullet[b].colours [3]; // 2->3 place_rocket_trail(bullet[b].x + grand(3001) - 1500 - cx * 3, bullet[b].y + grand(3001) - 1500 - cy * 3, bullet[b].x_speed - cx*2, bullet[b].y_speed - cy*2, 180, passing_colour); add_light(LIGHT_NORMAL, 18 + grand(6), bullet[b].x, bullet[b].y); break; case BULLET_BURNING_EYE: cx = xpart(bullet[b].angle - ANGLE_QUARTER, GRAIN); cy = ypart(bullet[b].angle - ANGLE_QUARTER, GRAIN); c2x = (cx * bullet[b].special4) / GRAIN; c2y = (cy * bullet[b].special4) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.03); { passing_colour [0] = TRANS_DRED;//bullet[b].colours [0]; passing_colour [1] = TRANS_LRED;//bullet[b].colours [2]; // 1->1 passing_colour [2] = TRANS_YELLOW;//bullet[b].colours [3]; // 2->3 place_rocket_trail(bullet[b].x + grand(3001) - 1500 - cx * 3, bullet[b].y + grand(3001) - 1500 - cy * 3, bullet[b].x_speed - cx*2, bullet[b].y_speed - cy*2, 90, passing_colour); } add_light(LIGHT_NORMAL, 4 + grand(3), bullet[b].x + bullet[b].x_speed, bullet[b].y + bullet[b].y_speed); break; case BULLET_MISSILE: /* KEEP for WORMS! passing_colour [0] = COLOUR_GREY1; passing_colour [1] = COLOUR_GREY3; passing_colour [2] = COLOUR_GREY5; passing_colour [3] = COLOUR_WHITE; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 1,0, 0, 0, 0, passing_colour);*/ if (bullet[b].special3 == LOCK_ACTOR0 || bullet[b].special3 == LOCK_ACTOR1) { if (bullet[b].special3 == LOCK_ACTOR0) cx = 0; else cx = 1; if (hypot(bullet[b].y - actor[cx].y, bullet[b].x - actor[cx].x) < 30000) // < 5000) bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, actor[cx].x, actor[cx].y, bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; else bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, actor[cx].x + (actor[cx].x_speed * bullet[b].special5), actor[cx].y + (actor[cx].y_speed * bullet[b].special5), bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; } else if (bullet[b].special3 >= 0) { // destroyed enemies have locks cleared in register_destroyed (enemy.c) if (hypot(bullet[b].y - enemy[bullet[b].special3].y, bullet[b].x - enemy[bullet[b].special3].x) < 30000) // < 5000) bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, enemy[bullet[b].special3].x, enemy[bullet[b].special3].y, bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; else bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, enemy[bullet[b].special3].x + (enemy[bullet[b].special3].x_speed * bullet[b].special5), enemy[bullet[b].special3].y + (enemy[bullet[b].special3].y_speed * bullet[b].special5), bullet[b].angle - ANGLE_QUARTER, bullet[b].special4) + ANGLE_QUARTER; // What this does: if missile is close to enemy, heads straight for it. // Otherwise, leads it slightly (to an extent specified by bullet[b].special5) // For this reason, enemy[].x_speed must be set correctly even for enemies for whom it's irrelevant // (eg crawlers). } cx = xpart(bullet[b].angle - ANGLE_QUARTER, GRAIN); cy = ypart(bullet[b].angle - ANGLE_QUARTER, GRAIN); c2x = (cx * bullet[b].special1) / GRAIN; c2y = (cy * bullet[b].special1) / GRAIN; bullet[b].x_speed += c2x; bullet[b].y_speed += c2y; drag_bullet(b, 0.03); // special1 = 200 + actor[sactor].upgraded_system [UPG_ROCKET] * 50; if (crandom(bullet[b].special1) > 100) { passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [2]; // 1->1 passing_colour [2] = bullet[b].colours [3]; // 2->3 // place_rocket_trail(bullet[b].x, bullet[b].y, bullet[b].x_speed + cx*3, bullet[b].y_speed + cy*3, 5 + grand(5), passing_colour); // place_rocket_trail(bullet[b].x, bullet[b].y, bullet[b].x_speed + cx*3, bullet[b].y_speed + cy*3, 1, passing_colour); place_rocket_trail(bullet[b].x + grand(3001) - 1500 - cx, bullet[b].y + grand(3001) - 1500 - cy, bullet[b].x_speed - cx*2, bullet[b].y_speed - cy*2, 140, passing_colour); } add_light(LIGHT_NORMAL, 10, bullet[b].x, bullet[b].y); break; case BULLET_BLAST: // add_light(LIGHT_NORMAL, 8 + grand(4), bullet[b].x, bullet[b].y); passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x + grand(5001) - 2500, bullet[b].y + grand(5001) - 2500, 0, 0, bullet[b].x_speed, bullet[b].y_speed, 25 + grand(10), 1, 1, 0, 0, 0, passing_colour); break; case BULLET_BIGBALL1: // add_light(LIGHT_NORMAL, 8 + grand(4), bullet[b].x, bullet[b].y); passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; if (grand(2) == 0) create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x + grand(4001 + bullet[b].special2 * 1000) - (2000 + bullet[b].special2 * 500), bullet[b].y + grand(4001 + bullet[b].special2 * 1000) - (2000 + bullet[b].special2 * 500), //grand(10001) - 5000, 0, 0, bullet[b].x_speed, bullet[b].y_speed, 35 + grand(20), 1, 0, 0, 0, 0, passing_colour); break; case BULLET_FLAME: passing_colour [0] = bullet[b].colours [0]; cx = bullet[b].x + grand(8001) - 2000; cy = bullet[b].y + grand(8001) - 2000; c2x = 200; //300 - bullet[b].timeout * 10; add_light(LIGHT_NORMAL, 30 + grand(10), cx, cy); create_cloud(CLOUD_FLAME_CIRCLE, cx, cy, 0,0, bullet[b].x_speed, bullet[b].y_speed, c2x + crandom(200),30 + grand(3),1, 0, 0, 0, passing_colour); passing_colour [0] = bullet[b].colours [1]; create_cloud(CLOUD_FLAME_CIRCLE, cx, cy, 0,0, bullet[b].x_speed, bullet[b].y_speed, c2x + crandom(200),20 + grand(3),0, 0, 0, 0, passing_colour); passing_colour [0] = bullet[b].colours [2]; create_cloud(CLOUD_FLAME_CIRCLE, cx, cy, 0,0, 0,0, //bullet[b].x_speed, bullet[b].y_speed, c2x + crandom(200),10 + grand(3),0, 0, 0, 0, passing_colour); blast(bullet[b].x, bullet[b].y, 20000, 75, 1000, bullet[b].owner); break; case BULLET_EYE_DESOLATION_SMALL: passing_colour [0] = TRANS_YELLOW; passing_colour [1] = TRANS_ORANGE; passing_colour [2] = TRANS_LRED; passing_colour [3] = TRANS_DRED; create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x + grand(5001) - 2500, bullet[b].y + grand(5001) - 2500, 0, 0, 0, 0, 30 + grand(10), 1, 1, 0, 0, 0, passing_colour); add_light(LIGHT_NORMAL, 7 + grand(3), bullet[b].x, bullet[b].y); drag_bullet(b, 0.02); break; case BULLET_TWIRLY1: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; cx = (bullet[b].timeout % 32) * 32; if (bullet[b].special1 == 1) cx = ANGLE_FULL - cx; create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x + xpart(cx, 10000) + grand(5001) - 2500, bullet[b].y + ypart(cx, 10000) + grand(5001) - 2500, 0, 0, 0, 0, 30 + grand(10), 3, 0, 0, 0, 0, passing_colour); create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x + xpart(cx + ANGLE_HALF, 10000) + grand(5001) - 2500, bullet[b].y + ypart(cx + ANGLE_HALF, 10000) + grand(5001) - 2500, 0, 0, 0, 0, 30 + grand(10), 3, 0, 0, 0, 0, passing_colour); break; case BULLET_TWIRLY2: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; cx = (bullet[b].timeout % 32) * 32; if (bullet[b].special1 == 1) cx = ANGLE_FULL - cx; create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x + xpart(cx, 6000) + grand(5001) - 2500, bullet[b].y + ypart(cx, 6000) + grand(5001) - 2500, 0, 0, 0, 0, 20 + grand(10), 2, 0, 0, 0, 0, passing_colour); create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x + xpart(cx + ANGLE_HALF, 6000) + grand(5001) - 2500, bullet[b].y + ypart(cx + ANGLE_HALF, 6000) + grand(5001) - 2500, 0, 0, 0, 0, 20 + grand(10), 2, 0, 0, 0, 0, passing_colour); break; case BULLET_TWIRLY3: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x + grand(9001) - 4500, bullet[b].y + grand(9001) - 4500, 0, 0, 0, 0, 30 + grand(15), 2, 0, 0, 0, 0, passing_colour); break; case BULLET_TWISTY: passing_colour [0] = bullet[b].colours [1]; passing_colour [1] = bullet[b].colours [2]; passing_colour [2] = bullet[b].colours [3]; passing_colour [3] = bullet[b].colours [3]; c2x = (bullet[b].special1 % 32) * 32; c2y = xpart(c2x, 13 * GRAIN); bullet[b].size = abs(c2y) + 2000; cx = bullet[b].x + xpart(bullet[b].angle + ANGLE_QUARTER, c2y); cy = bullet[b].y + ypart(bullet[b].angle + ANGLE_QUARTER, c2y); create_cloud(CLOUD_BLAST_CIRCLE, cx + grand(5001) - 2500, cy + grand(5001) - 2500, 0, 0, 0, 0, 30 + grand(15), 3, 0, 0, 0, 0, passing_colour); cx = bullet[b].x + xpart(bullet[b].angle - ANGLE_QUARTER, c2y); cy = bullet[b].y + ypart(bullet[b].angle - ANGLE_QUARTER, c2y); create_cloud(CLOUD_BLAST_CIRCLE, cx + grand(5001) - 2500, cy + grand(5001) - 2500, 0, 0, 0, 0, 30 + grand(15), 3, 0, 0, 0, 0, passing_colour); bullet[b].special1 ++; break; case BULLET_CURVE: cx = xpart(bullet[b].angle + ANGLE_QUARTER, 200); cy = ypart(bullet[b].angle + ANGLE_QUARTER, 200); bullet[b].x_speed += cx; bullet[b].y_speed += cy; break; case BULLET_PLASMA: passing_colour [0] = bullet[b].colours [grand(4)]; cx = bullet[b].x_speed / 3; cy = bullet[b].y_speed / 3; create_cloud(CLOUD_SMALL_TRANS_CIRCLE, bullet[b].x + grand(4001) - 2000, bullet[b].y + grand(4001) - 2000, cx, cy, 0, 0, 250 + crandom(200),70,0, 0, 0, 0, passing_colour); break; case BULLET_TORPEDO: // bullet[b].angle += grand(11) - 5; cx = xpart(bullet[b].angle, 205); cy = ypart(bullet[b].angle, 205); bullet[b].x_speed += cx; bullet[b].y_speed += cy; drag_bullet(b, 0.01); if (bullet[b].timeout % 4 != 0) break; passing_colour [0] = COLOUR_YELLOW6; create_cloud(CLOUD_GROWING_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, // bullet[b].x_speed - cx*5, bullet[b].y_speed - cy*5, 0, 0, 100,3,0, 0, 100, 0, passing_colour); break; case BULLET_BOSS4: passing_colour [0] = TRANS_YELLOW;//bullet[b].colours [grand(4)]; if (grand(3) == 0) passing_colour [0] = TRANS_WHITE; cx = bullet[b].x_speed / 3; cy = bullet[b].y_speed / 3; create_cloud(CLOUD_SMALL_TRANS_CIRCLE, bullet[b].x + grand(8001) - 4000, bullet[b].y + grand(8001) - 4000, cx, cy, 0, 0, 500 + crandom(300),70,0, 0, 0, 0, passing_colour); create_cloud(CLOUD_SMALL_TRANS_CIRCLE, bullet[b].x + xpart(bullet[b].timeout * 40 + bullet[b].angle, 30000), bullet[b].y + ypart(bullet[b].timeout * 40 + bullet[b].angle, 30000), 0, 0, 0, 0, 300 + crandom(200),50,0, 0, 0, 0, passing_colour); create_cloud(CLOUD_SMALL_TRANS_CIRCLE, bullet[b].x + xpart(ANGLE_FULL - (bullet[b].timeout * 40 + bullet[b].angle), 30000), bullet[b].y + ypart(ANGLE_FULL - (bullet[b].timeout * 40 + bullet[b].angle), 30000), 0, 0, 0, 0, 300 + crandom(200),50,0, 0, 0, 0, passing_colour); // if (bullet[b].timeout % 16 == 0) // bullet_sound(b, BSOUND_MINE2); break; case BULLET_FLAK: if (counter % 3 != 0) break; passing_colour [0] = COLOUR_RED8; create_cloud(CLOUD_SHRINKING_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 500,-50,10, 0, 0, 0, passing_colour); break; case BULLET_LINES: passing_colour [0] = COLOUR_GREY6; // cx = bullet[b].x_speed / 3; // cy = bullet[b].y_speed / 3; create_cloud(CLOUD_LINE_SHADOW, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 20 + grand(60),3 + grand(7),0, bullet[b].angle, 0, 0, passing_colour); break; case BULLET_MINE1: case BULLET_MINE2: case BULLET_MINE3: // if (grand(4) == 0) if (grand(3) == 0 && grand(abs(bullet[b].x_speed) + abs(bullet[b].y_speed)) > 2000) { passing_colour[0] = COLOUR_YELLOW8; passing_colour[1] = COLOUR_YELLOW6; passing_colour[2] = COLOUR_ORANGE6; passing_colour[3] = COLOUR_RED5; passing_colour[4] = COLOUR_RED4; create_cloud(CLOUD_SPECK, bullet[b].x + grand(4001) - 2000, bullet[b].y + grand(4001) - 2000, 0, 0, 0, 0, 16 + grand(9), 1, 0, 0, 0, 0, passing_colour); } drag_bullet(b, 0.08); if (abs(bullet[b].x_speed) + abs(bullet[b].y_speed) < 1000) { bullet[b].x_speed = 0; bullet[b].y_speed = 0; } break; case BULLET_BFLAK: if (grand(3) != 0 && grand(abs(bullet[b].x_speed) + abs(bullet[b].y_speed)) > 1900) { passing_colour[0] = COLOUR_WHITE; passing_colour[1] = COLOUR_BLUE8; passing_colour[2] = COLOUR_BLUE7; passing_colour[3] = COLOUR_BLUE5; passing_colour[4] = COLOUR_BLUE3; create_cloud(CLOUD_SPECK, bullet[b].x + grand(4001) - 2000, bullet[b].y + grand(4001) - 2000, 0, 0, 0, 0, 16 + grand(9), 1, 0, 0, 0, 0, passing_colour); } drag_bullet(b, 0.06); break; case BULLET_BFLAK2: if (grand(3) != 0 && grand(abs(bullet[b].x_speed) + abs(bullet[b].y_speed)) > 1900) { passing_colour[0] = COLOUR_WHITE; passing_colour[1] = COLOUR_YELLOW8; passing_colour[2] = COLOUR_YELLOW7; passing_colour[3] = COLOUR_ORANGE6; passing_colour[4] = COLOUR_RED5; create_cloud(CLOUD_SPECK, bullet[b].x + grand(4001) - 2000, bullet[b].y + grand(4001) - 2000, 0, 0, 0, 0, 16 + grand(9), 1, 0, 0, 0, 0, passing_colour); } drag_bullet(b, 0.06); break; // case BULLET_MBOMB: case BULLET_E_BOMB: if (grand(abs(bullet[b].x_speed) + abs(bullet[b].y_speed)) > 1500) { passing_colour[0] = COLOUR_YELLOW8; passing_colour[1] = COLOUR_YELLOW6; passing_colour[2] = COLOUR_ORANGE6; passing_colour[3] = COLOUR_RED5; passing_colour[4] = COLOUR_RED4; create_cloud(CLOUD_SPECK, bullet[b].x + grand(4001) - 2000, bullet[b].y + grand(4001) - 2000, 0, 0, 0, 0, 16 + grand(9), 1, 0, 0, 0, 0, passing_colour); } drag_bullet(b, 0.03); break; case BULLET_PRESEEKMINE: // if (grand(4) == 0) if (grand(3) == 0 && grand(abs(bullet[b].x_speed) + abs(bullet[b].y_speed)) > 2000) { passing_colour[0] = COLOUR_WHITE; passing_colour[1] = COLOUR_BLUE8; passing_colour[2] = COLOUR_BLUE6; passing_colour[3] = COLOUR_BLUE4; passing_colour[4] = COLOUR_BLUE2; create_cloud(CLOUD_SPECK, bullet[b].x + grand(6001) - 3000, bullet[b].y + grand(6001) - 3000, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, passing_colour); } drag_bullet(b, 0.08); if (abs(bullet[b].x_speed) + abs(bullet[b].y_speed) < 1000) bullet[b].timeout = 1; else bullet[b].timeout ++; break; case BULLET_PREMINE: // if (grand(4) == 0 && abs(bullet[b].x_speed) + abs(bullet[b].y_speed) > 2000) if (grand(3) == 0 && grand(abs(bullet[b].x_speed) + abs(bullet[b].y_speed)) > 2000) { passing_colour[0] = COLOUR_YELLOW8; passing_colour[1] = COLOUR_RED8; passing_colour[2] = COLOUR_RED6; passing_colour[3] = COLOUR_RED4; passing_colour[4] = COLOUR_RED2; create_cloud(CLOUD_SPECK, bullet[b].x + grand(6001) - 3000, bullet[b].y + grand(6001) - 3000, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, passing_colour); } drag_bullet(b, 0.08); if (abs(bullet[b].x_speed) + abs(bullet[b].y_speed) < 1000) bullet[b].timeout = 1; else bullet[b].timeout ++; break; case BULLET_SEEKMINE: case BULLET_MINE: bullet[b].x_speed = 0; bullet[b].y_speed = 0; break; case BULLET_SEEKER_BLOB: if (bullet[b].special1 == ATTACK_NONE) break; bullet[b].angle = enemy_bullet_track_target(b, bullet[b].special1, 4); // cx = cos(angle_to_radians(bullet[b].angle) + ANGLE_QUARTER) * 1200; // cy = sin(angle_to_radians(bullet[b].angle) + ANGLE_QUARTER) * 1200; cx = xpart(bullet[b].angle, 1900); cy = ypart(bullet[b].angle, 1900); bullet[b].x_speed = cx; bullet[b].y_speed = cy; break; case BULLET_PRONG: bullet[b].x_speed += grand(201) - 100; bullet[b].y_speed += grand(201) - 100; bullet[b].angle += 64; if (bullet[b].angle > ANGLE_FULL) bullet[b].angle -= ANGLE_FULL; break; case BULLET_SEEKER_BLOB3: passing_colour [0] = TRANS_LBLUE; if (grand(3) == 0) passing_colour [0] = TRANS_DBLUE; // if (grand(4) == 0) // passing_colour [0] = TRANS_WHITE; create_cloud(CLOUD_SMALL_TRANS_CIRCLE, bullet[b].x + grand(4001) - 2000, bullet[b].y + grand(4001) - 2000, 0, 0, 0, 0, 250 + crandom(200),10,5, 0, 0, 0, passing_colour); if (bullet[b].special1 == ATTACK_NONE) break; bullet[b].angle = enemy_bullet_track_target(b, bullet[b].special1, 8); cx = xpart(bullet[b].angle, 2300); cy = ypart(bullet[b].angle, 2300); bullet[b].x_speed = cx; bullet[b].y_speed = cy; break; case BULLET_STING: if (bullet[b].timeout % 3 != 0) break; passing_colour[0] = bullet[b].colours [1]; passing_colour[1] = bullet[b].colours [1]; passing_colour[2] = bullet[b].colours [2]; passing_colour[3] = bullet[b].colours [2]; passing_colour[4] = bullet[b].colours [3]; // create_cloud(CLOUD_SPECK, bullet[b].x, bullet[b].y, 0, 0, // 0, 0, 15 + grand(15), 1, // 1, 0, 0, 0, passing_colour); create_cloud(CLOUD_SPECK, bullet[b].x + grand(5001) - 2500, bullet[b].y + grand(5001) - 2500, 0, 0, 0, 0, 15 + grand(15), 1, 1, 0, 0, 0, passing_colour); break; /* case BULLET_PRONG: bullet[b].x_speed += grand(201) - 100; bullet[b].y_speed += grand(201) - 100; bullet[b].angle += 64; if (bullet[b].angle > ANGLE_FULL) bullet[b].angle -= ANGLE_FULL; break;*/ } // other switch after move_bullet // if (counter % 5 != 0) // return; if (move_bullet(b, 1) == 0) return; // other switch before move_bullet switch(bullet[b].type) { case BULLET_HOSTILE: case BULLET_SHOCK: // bullet[b].x2 = bullet[b].x; // bullet[b].y2 = bullet[b].y; bullet[b].x += grand(20001) - 10000; bullet[b].y += grand(20001) - 10000; passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; cx = bullet[b].x;// + grand(16001) - 8000; cy = bullet[b].y;// + grand(16001) - 8000; create_cloud(CLOUD_FADING_LINE, bullet[b].x2 - bullet[b].x_speed, bullet[b].y2 - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 1,0, 0, 0, 0, passing_colour); bullet[b].x2 = cx; bullet[b].y2 = cy; break; case BULLET_ZIGZAG1: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; if (bullet[b].timeout % 2 == 0) { cx = bullet[b].x + xpart(bullet[b].angle + ANGLE_QUARTER, bullet[b].special1); cy = bullet[b].y + ypart(bullet[b].angle + ANGLE_QUARTER, bullet[b].special1); } else { cx = bullet[b].x + xpart(bullet[b].angle - ANGLE_QUARTER, bullet[b].special1); cy = bullet[b].y + ypart(bullet[b].angle - ANGLE_QUARTER, bullet[b].special1); } create_cloud(CLOUD_FADING_LINE, bullet[b].x2 - bullet[b].x_speed, bullet[b].y2 - bullet[b].y_speed, cx, cy, 0, 0, 10, 1,0, 0, 0, 0, passing_colour); bullet[b].x2 = cx; bullet[b].y2 = cy; break; /* case BULLET_SHOCK_PATH: case BULLET_GOLDEN_PATH: // case BULLET_SHOCK: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; cx = bullet[b].x + grand(12001) - 6000; cy = bullet[b].y + grand(12001) - 6000; create_cloud(CLOUD_FADING_LINE, bullet[b].x2 - bullet[b].x_speed, bullet[b].y2 - bullet[b].y_speed, cx, cy, 0, 0, 10, 2,0, 0, 0, 0, passing_colour); bullet[b].x2 = cx; bullet[b].y2 = cy; break; case BULLET_GOLDEN_PATH_SMALL: case BULLET_SHOCK_PATH_SMALL: passing_colour [0] = bullet[b].colours [0]; passing_colour [1] = bullet[b].colours [1]; passing_colour [2] = bullet[b].colours [2]; passing_colour [3] = bullet[b].colours [3]; cx = bullet[b].x + grand(6001) - 3000; cy = bullet[b].y + grand(6001) - 3000; create_cloud(CLOUD_FADING_LINE, bullet[b].x2 - bullet[b].x_speed, bullet[b].y2 - bullet[b].y_speed, cx, cy, 0, 0, 10, 3,0, 0, 0, 0, passing_colour); bullet[b].x2 = cx; bullet[b].y2 = cy; break; case BULLET_TORPEDO2: if (bullet[b].timeout < 35) { if (bullet[b].timeout == 34) bullet_sound(b, BSOUND_TUBE); cx = xpart(bullet[b].angle, 400 + (35 - bullet[b].timeout) * 20); cy = ypart(bullet[b].angle, 400 + (35 - bullet[b].timeout) * 20); bullet[b].x_speed += cx; bullet[b].y_speed += cy; // drag_bullet(b, 0.01); passing_colour [0] = COLOUR_GREY1; passing_colour [1] = COLOUR_GREY3; passing_colour [2] = COLOUR_GREY5; passing_colour [3] = COLOUR_WHITE; create_cloud(CLOUD_FADING_LINE, bullet[b].x2 - bullet[b].x_speed, bullet[b].y2 - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 1,0, 0, 0, 0, passing_colour); bullet[b].x2 = bullet[b].x; bullet[b].y2 = bullet[b].y; } break; case BULLET_SUPERSTING: // if (bullet[b].timeout % 2 == 0) { passing_colour [3] = bullet[b].colours [0]; passing_colour [2] = bullet[b].colours [1]; passing_colour [1] = bullet[b].colours [2]; passing_colour [0] = bullet[b].colours [3]; c2x = xpart(bullet[b].angle + ANGLE_QUARTER, 3000); c2y = ypart(bullet[b].angle + ANGLE_QUARTER, 3000); create_cloud(CLOUD_FADING_LINE, bullet[b].x2 - (bullet[b].x_speed * 1) + c2x, bullet[b].y2 - (bullet[b].y_speed * 1) + c2y, bullet[b].x - c2x, bullet[b].y - c2y, 0, 0, 10, 1,0, 0, 0, 0, passing_colour); create_cloud(CLOUD_FADING_LINE, bullet[b].x - (bullet[b].x_speed * 1) - c2x, bullet[b].y - (bullet[b].y_speed * 1) - c2y, bullet[b].x + c2x, bullet[b].y + c2y, 0, 0, 10, 1,0, 0, 0, 0, passing_colour); }*/ // bullet[b].x2 = bullet[b].x + c2x; // bullet[b].y2 = bullet[b].y + c2y; /* c2x = cos(angle_to_radians(bullet[b].angle + ANGLE_QUARTER)) * 5000; c2y = sin(angle_to_radians(bullet[b].angle + ANGLE_QUARTER)) * 5000; // cx = bullet[b].x + c2x; // cy = bullet[b].y + c2y; create_cloud(CLOUD_FADING_LINE, // bullet[b].x2 - bullet[b].x_speed + c2x, // bullet[b].y2 - bullet[b].y_speed + c2y, bullet[b].x2 + c2x, bullet[b].y2 + c2y, bullet[b].x - c2x, bullet[b].y - c2y, 0, 0, 10, 1,0, 0, 0, 0, passing_colour); bullet[b].x2 = bullet[b].x - c2x; bullet[b].y2 = bullet[b].y - c2y;*/ break; } int things [2]; int k, sh; if (bullet[b].owner == OWNER_ENEMY || game.type == GAME_DUEL) { k = detect_collision(b, things); if (k != -1) { bullet[b].x = things [0]; bullet[b].y = things [1]; // bullet_hits_actor if (bullet[b].mass > 0) { actor[k].x_speed += (bullet[b].x_speed * bullet[b].mass) / actor[k].mass; actor[k].y_speed += (bullet[b].y_speed * bullet[b].mass) / actor[k].mass; actor[k].screen_shake_time += bullet[b].mass / 20; if (actor[k].screen_shake_time > 5) actor[k].screen_shake_time = 5; } // hurt_actor must be after force, as actor may be destroyed in it. hurt_actor(k, bullet[b].owner, bullet[b].damage); bullet_impact(b, k, HIT_ACTOR); return; } } // else if (bullet[b].owner != OWNER_ENEMY) // || game.type == GAME_DUEL) { k = detect_enemy_collision(b, things); if (k != -1) { bullet[b].x = things [0]; bullet[b].y = things [1]; if (bullet[b].mass > 0) { enemy[k].x_speed += (bullet[b].x_speed * bullet[b].mass) / enemy[k].mass; enemy[k].y_speed += (bullet[b].y_speed * bullet[b].mass) / enemy[k].mass; } sh = check_shielder(k); if (!sh) { enemy_sparks(k, b, bullet[b].x, bullet[b].y, bullet[b].x_speed, bullet[b].y_speed, bullet[b].damage); int pulse = bullet[b].damage / 6 + 1; if (pulse > 8) pulse = 8; hurt_enemy(k, bullet[b].damage, bullet[b].owner, pulse); bullet_soundf(b, NWAV_TWING, enemy_sound_pitch(enemy[k].type)); //800 + grand(200) - enemy_pitch(enemy[k].type)); } else { shield_line(k, bullet[b].x, bullet[b].y); bullet_soundf(b, NWAV_SHIELDE, enemy_sound_pitch(enemy[k].type)); } bullet_impact(b, k, HIT_ENEMY); // bullet_hits_enemy return; } } } int check_shielder(int e) { if (enemy[e].type == ENEMY_SHIELDER1 || enemy[e].type == ENEMY_DEFENDER3_TURRET1) return 0; // note enemy[e]! (not i) int i, distance, retval = 0; for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[i].type != ENEMY_SHIELDER1 && enemy[i].type != ENEMY_DEFENDER3_TURRET1) continue; // note enemy[i]! (not e) distance = hypot(enemy[e].x - enemy[i].x, enemy[e].y - enemy[i].y); if (distance <= 300000) { shielder_pulse(i, 100); retval = 1; } } return retval; } void shield_line(int e, int bx, int by) { /* TODO: blasts collisions */ int sangle = radians_to_angle(atan2(enemy[e].y - by, enemy[e].x - bx)); int pcol [5]; pcol [4] = TRANS_WHITE; pcol [3] = TRANS_LBLUE; pcol [2] = TRANS_LBLUE; pcol [1] = TRANS_LBLUE; pcol [0] = TRANS_DBLUE; /* pcol [3] = TRANS_YELLOW; pcol [2] = TRANS_LGREEN; pcol [1] = TRANS_DGREEN; pcol [0] = TRANS_DGREY; */ /* create_cloud(CLOUD_SHIELD_LINE, enemy[e].x, enemy[e].y, 0, 0, 0,0, 100, 7, //enemy[e].x_speed, enemy[e].y_speed, 100, 7, 0, sangle, enemy[e].radius, 0, pcol);*/ create_cloud(CLOUD_SHIELD_LINE, bx, by, 0, 0, 0,0, 100, 7, //enemy[e].x_speed, enemy[e].y_speed, 100, 7, 0, sangle, enemy[e].radius, 0, pcol); } void shielder_pulse(int e, int dam) { enemy[e].attribute [0] = 15; return; } void enemy_sparks(int e, int b, int bx, int by, int bxs, int bys, int damage) { // int i; int msparks = 2 + grand(damage) / 50; if (msparks > 5) msparks = 5 - grand(2); int passing_colours [5]; // int csx, csy; // int angle = 0; // int timer = 0; passing_colours [0] = (enemy[e].colours [0] / 8) * 8 + 7; passing_colours [1] = passing_colours [0] - 1; passing_colours [2] = passing_colours [0] - 2; passing_colours [3] = passing_colours [0] - 3; passing_colours [4] = passing_colours [0] - 4; /* passing_colours [1] = passing_colours [0] - 1; passing_colours [2] = passing_colours [0] - 2; passing_colours [3] = passing_colours [0] - 3; passing_colours [4] = passing_colours [0] - 4; */ // for (i = 0; i < msparks; i ++) // { // angle = grand(ANGLE_FULL); // csx = enemy[e].x_speed + xpart(angle, 200 + grand(500)); // csy = enemy[e].y_speed + ypart(angle, 200 + grand(500)); // csx = xpart(angle, 200 + grand(500)); // csy = ypart(angle, 200 + grand(500)); // timer = 10 + grand(10); // create_cloud(CLOUD_FLECK, bx, by, // 0, 0, csx, csy, timer, // 1, 0, angle, 0, 0, passing_colours); // create_cloud(CLOUD_SPECK, bx, by, // 0, 0, enemy[e].x_speed + grand(1001) - 500, enemy[e].y_speed + grand(1001) - 500, // 10 + grand(15), 1, 0, 0, 0, 0, passing_colours); place_speck_burst(bx, by, enemy[e].x_speed, enemy[e].y_speed, msparks, 10, 15, 900, passing_colours); // } } void bullet_impact(int b, int k, int hit_what) { int j; int xs = bullet[b].x_speed; int ys = bullet[b].y_speed; int m, xa, xb, cx, cy; int passing_colours [5]; if (hit_what == HIT_ACTOR && k != -1) { xs = actor[k].x_speed; ys = actor[k].y_speed; } else { if (hit_what == HIT_ENEMY && k != -1) { xs = enemy[k].x_speed; ys = enemy[k].y_speed; } else { xs = 0; ys = 0; } } switch(bullet[b].type) { case BULLET_NOVA: bullet[b].x_speed = 0; bullet[b].y_speed = 0; return; case BULLET_DISRUPT3: passing_colours [0] = TRANS_DARKEN; create_cloud(CLOUD_MED_TRANS_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 3500, -3, 3, 0, 0, 0, passing_colours); blast(bullet[b].x, bullet[b].y, 50000, 250, 1000, bullet[b].owner); radius_effect(bullet[b].x, bullet[b].y, 50000, RADEFFECT_TELEPORT); bullet_soundf(b, NWAV_CHIME, 200 + grand(20)); break; case BULLET_HOSTILE: case BULLET_SHOCK: case BULLET_ZIGZAG1: passing_colours [0] = TRANS_WHITE; passing_colours [1] = bullet[b].colours [3];//COLOUR_BLUE8; place_line_burst(bullet[b].x, bullet[b].y, 0, 0, 4 + grand(4), 15, 15, 1200, 300, passing_colours); break; case BULLET_FURIOUS_ORB: // bullet_sound(b, BSOUND_BOMB); case BULLET_MANIFOLD_ORB_SMALL: case BULLET_FURIOUS_ORB_SMALL: passing_colours [0] = bullet[b].colours [0]; passing_colours [1] = bullet[b].colours [1]; passing_colours [2] = bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 200 + grand(300) + bullet[b].special2 * 10, passing_colours); blast(bullet[b].x, bullet[b].y, bullet[b].special3, bullet[b].special1, bullet[b].special4, bullet[b].owner); if (bullet[b].type == BULLET_FURIOUS_ORB) // bullet_soundf(b, NWAV_BURSTZL, 400 + grand(150)); bullet_soundf(b, NWAV_BURST, 300 + grand(10)); else bullet_soundvf(b, NWAV_BURST, 80, 400 + grand(150)); /* for (j = 0; j < bullet[b].damage / 12 + 1; j ++) { xs = bullet[b].x + grand(40001) - 20000; ys = bullet[b].y + grand(40001) - 20000; place_explosion_no_light(xs, ys, 0, 0, 100 + grand(150), passing_colours); // blast(xs, ys, 15000, bullet[b].damage * 5, 2000, bullet[b].owner); }*/ // passing_colours [3] = TRANS_WHITE2; // passing_colours [2] = TRANS_LGREY; // passing_colours [1] = TRANS_LGREY; // passing_colours [0] = TRANS_DGREY; // create_cloud(CLOUD_SHOCKWAVE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, // 200 + crandom(50) + bullet[b].special2 / 2,15,0, 0, 250 + grand(100) + bullet[b].special2 / 2, 0, passing_colours); simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 300 + crandom(50) + bullet[b].special2 * 2, 15); break; case BULLET_MANIFOLD_ORB: passing_colours [0] = bullet[b].colours [0]; passing_colours [1] = bullet[b].colours [1]; passing_colours [2] = bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 200 + grand(300) + bullet[b].special2 * 10, passing_colours); blast(bullet[b].x, bullet[b].y, bullet[b].special3, bullet[b].special1, bullet[b].special4, bullet[b].owner); // bullet_soundf(b, NWAV_BURSTZL, 300 + grand(150)); bullet_soundf(b, NWAV_BURST, 300 + grand(10)); if (bullet[b].special5 > 0 && hit_what != HIT_WAVE) { for (j = 0; j < bullet[b].special5; j ++) { create_bullet(BULLET_MANIFOLD_ORB_SMALL, bullet[b].x, bullet[b].y, grand(5001) - 2500, grand(5001) - 2500, bullet[b].owner, 1, 20 + grand(40), 100, 0, 0, 0, bullet[b].colours, 1, bullet[b].special1 / 2, bullet[b].special2 / 3, bullet[b].special3 / 3, bullet[b].special4 / 3, bullet[b].special5 / 3); } } /* for (j = 0; j < bullet[b].damage / 12 + 1; j ++) { xs = bullet[b].x + grand(40001) - 20000; ys = bullet[b].y + grand(40001) - 20000; place_explosion_no_light(xs, ys, 0, 0, 100 + grand(150), passing_colours); // blast(xs, ys, 15000, bullet[b].damage * 5, 2000, bullet[b].owner); }*/ simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 300 + crandom(50) + bullet[b].special2 * 2, 15); break; case BULLET_CIRCLER: passing_colours [0] = TRANS_DRED;//bullet[b].colours [0]; passing_colours [1] = TRANS_ORANGE;//bullet[b].colours [1]; passing_colours [2] = TRANS_YELLOW;//bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 200 + grand(300), passing_colours); blast(bullet[b].x, bullet[b].y, 40000, 300, 5000, bullet[b].owner); for (j = 0; j < 5; j ++) { xs = bullet[b].x + grand(40001) - 20000; ys = bullet[b].y + grand(40001) - 20000; place_explosion_no_light(xs, ys, 0, 0, 100 + grand(150), passing_colours); } place_burstlet_burst(bullet[b].x, bullet[b].y, 0, 0, 6, 6, 4, 1500, 1500, 7, passing_colours); // simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 300 + crandom(50)); bullet_soundf(b, NWAV_BURST, 1500 + grand(350)); break; case BULLET_FORK2: case BULLET_FORK1: passing_colours [0] = bullet[b].colours [0]; passing_colours [1] = bullet[b].colours [1]; passing_colours [2] = bullet[b].colours [2]; passing_colours [3] = bullet[b].colours [3]; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colours); if (hit_what == HIT_NOTHING) { passing_colours [0] = bullet[b].colours [0]; passing_colours [1] = bullet[b].colours [1]; passing_colours [2] = bullet[b].colours [2]; m = 2 + grand(3); for (j = 0; j < m; j ++) { create_bullet(BULLET_FORK3 - (bullet[b].type == BULLET_FORK1 && grand(3) != 0), bullet[b].x, bullet[b].y, // bullet[b].x_speed + grand(9001) - 4500, bullet[b].y_speed + grand(9001) - 4500, bullet[b].x_speed + grand(5001) - 2500, bullet[b].y_speed + grand(5001) - 2500, bullet[b].owner, bullet[b].damage, 20 + grand(40), bullet[b].mass, 0, 0, 0, bullet[b].colours, 1, bullet[b].special1, 0, 0, 0, 0); } break; } // fall-through: case BULLET_FORK3: passing_colours [0] = bullet[b].special1; j = 36 + grand(12); create_cloud(CLOUD_SMALL_FADING_CIRCLE, bullet[b].x, bullet[b].y, xs, ys, 0, 0, j, 3, 0, 0, j, 0, passing_colours); create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 420 + crandom(105),60,0, 0, 0, 0, passing_colours); break; case BULLET_WORM_SORROW: case BULLET_WORM_AGONY: case BULLET_EVIL_EEL: case BULLET_PANIC_EEL: case BULLET_SQUIRMY: case BULLET_EVIL_WORM: case BULLET_TURN_WORM: case BULLET_SWIRL2: passing_colours [0] = bullet[b].colours [0]; passing_colours [1] = bullet[b].colours [1]; passing_colours [2] = bullet[b].colours [2]; passing_colours [3] = bullet[b].colours [3]; create_cloud(CLOUD_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colours); // if (hit_what != HIT_NOTHING) // break; passing_colours [0] = bullet[b].colours [3]; j = 36 + grand(12); create_cloud(CLOUD_SMALL_FADING_CIRCLE, bullet[b].x, bullet[b].y, xs, ys, 0, 0, j, 3, 0, 0, j, 0, passing_colours); create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 420 + crandom(105),60,0, 0, 0, 0, passing_colours); break; case BULLET_CLAW: passing_colours [0] = bullet[b].colours [3]; passing_colours [1] = bullet[b].colours [2]; passing_colours [2] = bullet[b].colours [1]; passing_colours [3] = bullet[b].colours [0]; create_cloud(CLOUD_TRANS_FADING_LINE, bullet[b].x - bullet[b].x_speed, bullet[b].y - bullet[b].y_speed, bullet[b].x, bullet[b].y, 0, 0, 10, 2,0, 0, 0, 0, passing_colours); // passing_colours [0] = bullet[b].colours [3]; passing_colours [0] = bullet[b].colours [0]; passing_colours [1] = bullet[b].colours [1]; passing_colours [2] = bullet[b].colours [2]; passing_colours [3] = bullet[b].colours [3]; j = 46 + grand(17); create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x, bullet[b].y, xs, ys, 0, 0, j, 3, 0, 0, j, 0, passing_colours); create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 420 + crandom(105),60,0, 0, 0, 0, passing_colours); break; case BULLET_CIRCLES: case BULLET_CIRCLES2: passing_colours [0] = bullet[b].colours [0]; create_cloud(CLOUD_SHRINKING_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 1500,-150,20, 0, 0, 0, passing_colours); break; case BULLET_BIGCIRCLES: passing_colours [0] = bullet[b].colours [0]; create_cloud(CLOUD_SHRINKING_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 2500,-190,30, 0, 0, 0, passing_colours); break; case BULLET_BLOCKS: passing_colours [0] = bullet[b].colours [0]; passing_colours [1] = bullet[b].colours [1]; passing_colours [2] = bullet[b].colours [2]; passing_colours [3] = bullet[b].colours [3]; create_cloud(CLOUD_BLOCK3, bullet[b].x, bullet[b].y, 0, 0, 0, 0, // 100 + grand(50),-2 - grand(4),1, bullet[b].angle, grand(2), 0, passing_colours); 100 + grand(50),3,0, bullet[b].angle, grand(2), 0, passing_colours); create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 1600 + crandom(800),48,0, 0, 0, 0, passing_colours); break; case BULLET_OVERBLOCKS: passing_colours [0] = bullet[b].colours [0]; passing_colours [1] = bullet[b].colours [1]; passing_colours [2] = bullet[b].colours [2]; passing_colours [3] = bullet[b].colours [3]; create_cloud(CLOUD_BLOCK1, bullet[b].x + xpart(bullet[b].angle, 25000), bullet[b].y + ypart(bullet[b].angle, 25000), bullet[b].x - xpart(bullet[b].angle, 25000), bullet[b].y - ypart(bullet[b].angle, 25000), 0, 0, 50 + grand(8),1,0, bullet[b].angle, 0, 0, passing_colours); passing_colours [0] = bullet[b].colours [1]; for (j = 0; j < 8; j ++) { xs = grand(ANGLE_FULL); ys = 2500 + grand(2500); create_cloud(CLOUD_BLOCK1, bullet[b].x + xpart(xs, 15000), bullet[b].y + ypart(xs, 15000), bullet[b].x - xpart(xs, 15000), bullet[b].y - ypart(xs, 15000), xpart(xs, ys), ypart(xs, ys), 40 + grand(20),2,0, xs, 0, 0, passing_colours); } break; case BULLET_ZIGZAG2: passing_colours [0] = bullet[b].colours [0]; passing_colours [1] = bullet[b].colours [1]; passing_colours [2] = bullet[b].colours [2]; passing_colours [3] = bullet[b].colours [3]; create_cloud(CLOUD_BLOCK1, bullet[b].x - bullet[b].x_speed * 3, bullet[b].y - bullet[b].y_speed * 3, bullet[b].x, bullet[b].y, 0, 0, 40, 1,0, bullet[b].special4, 30, 0, passing_colours); // 200, 5,0, bullet[b].special4, 30, 0, passing_colours); break; case BULLET_CURVEY: simple_shockwave(TRANS_WHITE, bullet[b].x, bullet[b].y, 0, 0, 300 + crandom(50), 20); break; // case BULLET_SHOCK: /* case BULLET_SHOCK_PATH: case BULLET_SHOCK_PATH_SMALL: case BULLET_GOLDEN_PATH: case BULLET_GOLDEN_PATH_SMALL: passing_colours[0] = bullet[b].colours [3]; passing_colours[1] = bullet[b].colours [3]; passing_colours[2] = bullet[b].colours [2]; passing_colours[3] = bullet[b].colours [1]; passing_colours[4] = bullet[b].colours [0]; place_speck_burst(bullet[b].x, bullet[b].y, xs, ys, 3 + grand(3), 10, 21, 450, passing_colours); break; case BULLET_SNOW_DART: case BULLET_ICE_DART: case BULLET_FROZEN_BREATH: create_cloud(CLOUD_BLUE_BLOB2, bullet[b].x + grand(2001) - 1000, bullet[b].y + grand(2001) - 1000, 0, 0, 0, 0, 8 + crandom(3),1,0, 0, 0, 0, passing_colours); break; case BULLET_BURNING_DRAGGED:*/ case BULLET_BURNING_SPIRIT: create_cloud(CLOUD_ORANGE_BLOB2, bullet[b].x,// + grand(2001) - 1000, bullet[b].y,// + grand(2001) - 1000, 0, 0, 0, 0, 12 + crandom(5),1,0, 0, 0, 0, passing_colours); create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 550 + crandom(105),40,0, 0, 0, 0, passing_colours); break; case BULLET_BURST: passing_colours [0] = TRANS_DRED;//bullet[b].colours [0]; passing_colours [1] = TRANS_LRED;//bullet[b].colours [1]; passing_colours [2] = TRANS_YELLOW;//bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 200 + grand(300) + bullet[b].special2 * 10, passing_colours); blast(bullet[b].x, bullet[b].y, 30000, 50, 8200, bullet[b].owner); for (j = 0; j < 6 + grand(4); j ++) { create_bullet(BULLET_BURNING_DRAGGED, bullet[b].x, bullet[b].y, grand(15001) - 7500, grand(15001) - 7500, bullet[b].owner, 100, 20 + grand(40), 10, 0, 0, 0, bullet[b].colours, 1, 0, 0, 0, 0, 0); } simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 400 + crandom(50), 15); bullet_soundf(b, NWAV_BURST, 800 + grand(150)); break; case BULLET_PUFFY3: passing_colours [0] = TRANS_DGREY;//bullet[b].colours [0]; passing_colours [1] = TRANS_DGREEN;//bullet[b].colours [1]; passing_colours [2] = TRANS_LGREEN;//bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 200 + grand(100), passing_colours); blast(bullet[b].x, bullet[b].y, 20000, 1, 3200, bullet[b].owner); for (j = 0; j < 10 + grand(6); j ++) { xa = grand(ANGLE_FULL); m = 500 + grand(7000); create_bullet(BULLET_EVIL_STAR, bullet[b].x, bullet[b].y, xpart(xa, m), ypart(xa, m), bullet[b].owner, 50, 70 + grand(80), 10, 0, 0, 0, bullet[b].colours, 1, 0, 0, 0, 0, 0); } simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 250 + crandom(50), 15); bullet_soundf(b, NWAV_DNO, 400 + grand(100)); break; case BULLET_PUFFY4: passing_colours [0] = TRANS_DBLUE;//bullet[b].colours [0]; passing_colours [1] = TRANS_LBLUE;//bullet[b].colours [1]; passing_colours [2] = TRANS_WHITE;//bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 200 + grand(100), passing_colours); blast(bullet[b].x, bullet[b].y, 20000, 1, 3200, bullet[b].owner); for (j = 0; j < 10 + grand(6); j ++) { xa = grand(ANGLE_FULL); m = 2000 + grand(13000); create_bullet(BULLET_ZAP_DRAG, bullet[b].x, bullet[b].y, xpart(xa, m), ypart(xa, m), bullet[b].owner, 30, 20 + grand(10), 30, 0, 0, 0, bullet[b].colours, 1, 0, 0, 0, 0, 0); } simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 250 + crandom(50), 15); bullet_soundf(b, NWAV_BURST, 300 + grand(150)); break; case BULLET_BFLAK: /* passing_colours [0] = TRANS_DRED; passing_colours [1] = TRANS_LRED; passing_colours [2] = TRANS_YELLOW;*/ passing_colours [0] = TRANS_DBLUE; passing_colours [1] = TRANS_LBLUE; passing_colours [2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 350 + grand(300), passing_colours); blast(bullet[b].x, bullet[b].y, 30000, 200, 8200, bullet[b].owner); simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 400 + crandom(50), 15); bullet_soundf(b, NWAV_BURSTZ, 1900 + grand(300)); break; case BULLET_BFLAK2: passing_colours [0] = TRANS_ORANGE; passing_colours [1] = TRANS_YELLOW; passing_colours [2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 350 + grand(100), passing_colours); blast(bullet[b].x, bullet[b].y, 30000, 150, 3200, bullet[b].owner); for (j = 0; j < 8 + grand(5); j ++) { xa = grand(ANGLE_FULL); m = 2000 + grand(9000); create_bullet(BULLET_ZAP_DRAG, bullet[b].x, bullet[b].y, xpart(xa, m), ypart(xa, m), bullet[b].owner, 50, 20 + grand(10), 30, 0, 0, 0, bullet[b].colours, 1, 0, 0, 0, 0, 0); } simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 250 + crandom(50), 15); bullet_soundf(b, NWAV_BURSTZ, 1600 + grand(300)); break; case BULLET_MBOMB: passing_colours [0] = TRANS_ORANGE; passing_colours [1] = TRANS_YELLOW; passing_colours [2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 1100 + grand(200), passing_colours); blast(bullet[b].x, bullet[b].y, 30000, 200, 3200, bullet[b].owner); simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 500 + crandom(50), 15); break; case BULLET_MINE1: passing_colours [0] = TRANS_DRED; passing_colours [1] = TRANS_LRED; passing_colours [2] = TRANS_YELLOW; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 300 + grand(100), passing_colours); blast(bullet[b].x, bullet[b].y, 20000, 200, 8200, bullet[b].owner); simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 200 + crandom(50), 15); bullet_soundf(b, NWAV_SHORTBURST, 1000 + grand(100)); break; case BULLET_MINE2: passing_colours [0] = TRANS_DRED; passing_colours [1] = TRANS_LRED; passing_colours [2] = TRANS_YELLOW; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 300 + grand(100), passing_colours); blast(bullet[b].x, bullet[b].y, 5000, 20, 1200, bullet[b].owner); // simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 200 + crandom(50)); passing_colours [0] = TRANS_DRED; passing_colours [1] = TRANS_LRED; passing_colours [2] = TRANS_YELLOW; passing_colours [3] = TRANS_YELLOW; for (j = 0; j < 6; j ++) { xs = xpart(((ANGLE_FULL / 6) * j) + bullet[b].angle, 7000); ys = ypart(((ANGLE_FULL / 6) * j) + bullet[b].angle, 7000); create_bullet(BULLET_BOLT, bullet[b].x + xs, bullet[b].y + ys, xs, ys, bullet[b].owner, 200, 10 + grand(5), 40, 0, 0, 0, passing_colours, 1, 2500,30,0,0,0); } bullet_soundf(b, NWAV_SHORTBURST, 1200 + grand(300)); break; case BULLET_MINE3: /* passing_colours [0] = TRANS_ORANGE; passing_colours [1] = TRANS_YELLOW; passing_colours [2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 300 + grand(100), passing_colours); blast(bullet[b].x, bullet[b].y, 5000, 20, 1200, bullet[b].owner); // simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 200 + crandom(50)); passing_colours [0] = COLOUR_YELLOW8; // xs = xpart(((ANGLE_FULL / 6) * j) + bullet[b].angle, 7000); // ys = ypart(((ANGLE_FULL / 6) * j) + bullet[b].angle, 7000); create_bullet(BULLET_SEEKER1, bullet[b].x, bullet[b].y, 0, 0, bullet[b].owner, 200, 60 + grand(30), 50, grand(ANGLE_FULL), 0, 0, passing_colours, 1, closest_target(bullet[b].x, bullet[b].y),20,6,200,4001);*/ passing_colours [0] = TRANS_ORANGE;//bullet[b].colours [0]; passing_colours [1] = TRANS_YELLOW;//bullet[b].colours [1]; passing_colours [2] = TRANS_WHITE;//bullet[b].colours [2]; bullet[b].colours [3] = COLOUR_ORANGE4; bullet[b].colours [2] = COLOUR_ORANGE6; bullet[b].colours [1] = COLOUR_YELLOW7; bullet[b].colours [0] = COLOUR_YELLOW8; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 200 + grand(100), passing_colours); blast(bullet[b].x, bullet[b].y, 20000, 1, 2500, bullet[b].owner); for (j = 0; j < 10 + grand(6); j ++) { xa = grand(ANGLE_FULL); m = 2000 + grand(12000); create_bullet(BULLET_ZAP_DRAG, bullet[b].x, bullet[b].y, xpart(xa, m), ypart(xa, m), bullet[b].owner, 40, 20 + grand(10), 30, 0, 0, 0, bullet[b].colours, 1, 0, 0, 0, 0, 0); } simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 250 + crandom(50), 15); bullet_soundf(b, NWAV_SHORTBURST, 700 + grand(50)); break; case BULLET_WINGS1: case BULLET_WINGS2: case BULLET_WINGS3: passing_colours [0] = TRANS_DRED; passing_colours [1] = TRANS_LRED; passing_colours [2] = TRANS_YELLOW; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 100 + grand(50), passing_colours); j = grand(ANGLE_FULL); place_explosion(bullet[b].x + xpart(j, 5000), bullet[b].y + ypart(j, 5000), xpart(j, 1000), ypart(j, 1000), 5 + grand(5), passing_colours); j += ANGLE_FULL / 3; place_explosion(bullet[b].x + xpart(j, 5000), bullet[b].y + ypart(j, 5000), xpart(j, 1000), ypart(j, 1000), 5 + grand(5), passing_colours); j += ANGLE_FULL / 3; place_explosion(bullet[b].x + xpart(j, 5000), bullet[b].y + ypart(j, 5000), xpart(j, 1000), ypart(j, 1000), 5 + grand(5), passing_colours); blast(bullet[b].x, bullet[b].y, 15000, 250, 6000, bullet[b].owner); bullet_soundvf(b, NWAV_BURST, 70, 600 + grand(100)); // simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 400 + crandom(50)); break; case BULLET_BIGWINGS1: case BULLET_BIGWINGS2: case BULLET_BIGWINGS3: passing_colours [0] = TRANS_DGREEN; passing_colours [1] = TRANS_LGREEN; passing_colours [2] = TRANS_YELLOW; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 300 + grand(50), passing_colours); j = grand(ANGLE_FULL); place_explosion(bullet[b].x + xpart(j, 5000), bullet[b].y + ypart(j, 5000), xpart(j, 1000), ypart(j, 1000), 5 + grand(5), passing_colours); j += ANGLE_FULL / 5; place_explosion(bullet[b].x + xpart(j, 5000), bullet[b].y + ypart(j, 5000), xpart(j, 1000), ypart(j, 1000), 5 + grand(5), passing_colours); j += ANGLE_FULL / 5; place_explosion(bullet[b].x + xpart(j, 5000), bullet[b].y + ypart(j, 5000), xpart(j, 1000), ypart(j, 1000), 5 + grand(5), passing_colours); j += ANGLE_FULL / 5; place_explosion(bullet[b].x + xpart(j, 5000), bullet[b].y + ypart(j, 5000), xpart(j, 1000), ypart(j, 1000), 5 + grand(5), passing_colours); j += ANGLE_FULL / 5; place_explosion(bullet[b].x + xpart(j, 5000), bullet[b].y + ypart(j, 5000), xpart(j, 1000), ypart(j, 1000), 5 + grand(5), passing_colours); blast(bullet[b].x, bullet[b].y, 20000, 300, 9000, bullet[b].owner); // simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 400 + crandom(50)); bullet_soundvf(b, NWAV_BURST, 120, 400 + grand(100)); break; case BULLET_E_BOMB: passing_colours [0] = TRANS_DRED;//bullet[b].colours [0]; passing_colours [1] = TRANS_LRED;//bullet[b].colours [1]; passing_colours [2] = TRANS_YELLOW;//bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 700 + grand(300), passing_colours); blast(bullet[b].x, bullet[b].y, 30000, 200, 11000, bullet[b].owner); passing_colours [0] = TRANS_YELLOW; passing_colours [1] = COLOUR_YELLOW8; place_line_burst(bullet[b].x, bullet[b].y, 0, 0, 7 + grand(4), 15, 15, 2500, 300, passing_colours); // simple_shockwave(TRANS_YELLOW, bullet[b].x, bullet[b].y, 0, 0, 400 + crandom(50)); bullet_soundf(b, NWAV_SHORTBURST, 1500 + grand(100)); break; case BULLET_E_BOMB2: passing_colours [0] = TRANS_DBLUE; passing_colours [1] = TRANS_LBLUE;//bullet[b].colours [1]; passing_colours [2] = TRANS_WHITE;//bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 200 + grand(50), passing_colours); blast(bullet[b].x, bullet[b].y, 10000, 100, 8500, bullet[b].owner); passing_colours [0] = TRANS_WHITE; passing_colours [1] = COLOUR_BLUE8; place_line_burst(bullet[b].x, bullet[b].y, 0, 0, 4 + grand(4), 15, 15, 1200, 300, passing_colours); // simple_shockwave(TRANS_YELLOW, bullet[b].x, bullet[b].y, 0, 0, 400 + crandom(50)); bullet_soundf(b, NWAV_SHORTBURST, 1500 + grand(100)); break; case BULLET_THICK_SHOCK: passing_colours [0] = bullet[b].colours [0]; create_cloud(CLOUD_LARGE_TRANS_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 1200 + grand(350), -3, 8, 0, 300 + grand(50), 0, passing_colours); create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 1600 + crandom(800),0,12, 0, 0, 0, passing_colours); break; case BULLET_YELLOW_PULSE: passing_colours [0] = bullet[b].colours [0]; j = bullet[b].special2 + grand(12); create_cloud(CLOUD_LARGE_FADING_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, j, -3, 1, 0, j, 0, passing_colours); create_cloud(CLOUD_LARGE_FADING_CIRCLE, bullet[b].x + xpart(bullet[b].angle + ANGLE_QUARTER, 19000), bullet[b].y + ypart(bullet[b].angle + ANGLE_QUARTER, 19000), 0, 0, 0, 0, j, -3, 3, 0, j, 0, passing_colours); create_cloud(CLOUD_LARGE_FADING_CIRCLE, bullet[b].x + xpart(bullet[b].angle - ANGLE_QUARTER, 19000), bullet[b].y + ypart(bullet[b].angle - ANGLE_QUARTER, 19000), 0, 0, 0, 0, j, -3, 3, 0, j, 0, passing_colours); create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 1420 + crandom(105),30,7, 0, 0, 0, passing_colours); blast(bullet[b].x, bullet[b].y, bullet[b].special3, bullet[b].special1, bullet[b].special4, bullet[b].owner); break; case BULLET_SEEKER1: passing_colours [0] = bullet[b].colours [2]; j = 764 + grand(120); create_cloud(CLOUD_MED_TRANS_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, j, -3, 9, 0, j, 0, passing_colours); create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 680 + crandom(105),-3,9, 0, 0, 0, passing_colours); break; case BULLET_SEEKER2: passing_colours [0] = bullet[b].colours [2]; j = 1550 + grand(212); create_cloud(CLOUD_MED_TRANS_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, j, -3, 7, 0, j, 0, passing_colours); create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 1280 + crandom(105),-3,7, 0, 0, 0, passing_colours); break; case BULLET_SEEKER3: passing_colours [0] = TRANS_DBLUE; passing_colours [1] = TRANS_LBLUE; passing_colours [2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 1500 + grand(300), passing_colours); blast(bullet[b].x, bullet[b].y, 50000, 150, 500, bullet[b].owner); passing_colours [0] = TRANS_WHITE2; passing_colours [1] = COLOUR_WHITE; place_line_burst(bullet[b].x, bullet[b].y, 0, 0, 5 + grand(3), 15, 15, 2500, 300, passing_colours); bullet_soundf(b, NWAV_BURSTZ, 800 + grand(100)); // simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 400 + crandom(50)); break; case BULLET_BIGSEEKER: // passing_colours [0] = //TRANS_DRED; // passing_colours [1] = //TRANS_LRED; // passing_colours [2] = //TRANS_YELLOW; passing_colours [0] = TRANS_LBLUE; passing_colours [1] = TRANS_PURPLE; passing_colours [2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 2200 + grand(500), passing_colours); blast(bullet[b].x, bullet[b].y, 50000, 300, 1000, bullet[b].owner); simple_shockwave(TRANS_PURPLE, bullet[b].x, bullet[b].y, 0, 0, 700 + crandom(50), 15); // passing_colours [0] = TRANS_WHITE2; // passing_colours [1] = COLOUR_WHITE; // place_line_burst(bullet[b].x, bullet[b].y, 0, 0, 5 + grand(3), 15, 15, 2500, 300, passing_colours); // simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 400 + crandom(50)); bullet_soundf(b, NWAV_BURSTZ, 500 + grand(100)); break; case BULLET_CHARGE: passing_colours [0] = TRANS_DBLUE; passing_colours [1] = TRANS_LBLUE; passing_colours [2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 2200 + grand(500), passing_colours); blast(bullet[b].x, bullet[b].y, 80000, 450, 1000, bullet[b].owner); simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 700 + crandom(50), 15); bullet_soundf(b, NWAV_BANG, 700 + grand(100)); break; case BULLET_SWIRL1: passing_colours [0] = TRANS_LRED; passing_colours [1] = TRANS_ORANGE; passing_colours [2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 2200 + grand(500), passing_colours); break; case BULLET_DISRUPT1: create_bullet(BULLET_DISRUPT1_DROP, bullet[b].x, bullet[b].y, 0, 0, bullet[b].owner, 0, 60, 50, 0, 0, 0, passing_colours, 1, 10,0,0,0,0); bullet_soundf(b, NWAV_CYMBAL, 400 + grand(20)); break; case BULLET_DISRUPT2: passing_colours [0] = TRANS_REVERSE; create_cloud(CLOUD_MED_TRANS_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 3500, -3, 3, 0, 0, 0, passing_colours); blast(bullet[b].x, bullet[b].y, 100000, 100, -4000, bullet[b].owner); bullet_soundf(b, NWAV_CHIME, 300 + grand(20)); break; case BULLET_GREEN_BLAT: if (hit_what == HIT_NOTHING) { create_cloud(CLOUD_GREEN_BLOB2, bullet[b].x,// + grand(2001) - 1000, bullet[b].y,// + grand(2001) - 1000, 0, 0, 0, 0, 12 + crandom(5),1,0, 0, 0, 0, passing_colours); create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 400 + crandom(105),30,0, 0, 0, 0, passing_colours); } else { passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 250 + grand(150), passing_colours); create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 450 + crandom(105),40,0, 0, 0, 0, passing_colours); // passing_colours [1] = TRANS_LBLUE; // passing_colours [2] = TRANS_WHITE; // place_burstlet_burst(bullet[b].x, bullet[b].y, 0, 0, 3 + grand(3), // 4, 2, 1000, 1500, 4, passing_colours); } /* create_cloud(CLOUD_GREEN_BLOB2, bullet[b].x,// + grand(2001) - 1000, bullet[b].y,// + grand(2001) - 1000, 0, 0, 0, 0, 12 + crandom(5),1,0, 0, 0, 0, passing_colours); // if (hit_what != HIT_NOTHING) // { // passing_colours [1] = TRANS_LGREEN; // passing_colours [2] = TRANS_YELLOW; // place_burstlet_burst(bullet[b].x, bullet[b].y, 0, 0, 3 + grand(3), // 4, 2, 1000, 1500, 4, passing_colours); // } create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 550 + crandom(105),40,0, 0, 0, 0, passing_colours);*/ break; case BULLET_BLUE_BLAT: if (hit_what == HIT_NOTHING) { create_cloud(CLOUD_BLUE_BLOB2, bullet[b].x,// + grand(2001) - 1000, bullet[b].y,// + grand(2001) - 1000, 0, 0, 0, 0, 12 + crandom(5),1,0, 0, 0, 0, passing_colours); create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 550 + crandom(105),40,0, 0, 0, 0, passing_colours); } else { passing_colours[0] = TRANS_DBLUE; passing_colours[1] = TRANS_LBLUE; passing_colours[2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 250 + grand(150), passing_colours); create_cloud(CLOUD_LIGHT, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 450 + crandom(105),40,0, 0, 0, 0, passing_colours); // passing_colours [1] = TRANS_LBLUE; // passing_colours [2] = TRANS_WHITE; // place_burstlet_burst(bullet[b].x, bullet[b].y, 0, 0, 3 + grand(3), // 4, 2, 1000, 1500, 4, passing_colours); } break; case BULLET_SNOW_DART_SMALL: case BULLET_ICE_DART_SMALL: create_cloud(CLOUD_BLUE_BLOB2, bullet[b].x + grand(2001) - 1000, bullet[b].y + grand(2001) - 1000, 0, 0, 0, 0, 6 + crandom(3),1,0, 0, 0, 0, passing_colours); break; case BULLET_NUMEROUS_BLADE: passing_colours[0] = bullet[b].colours [0]; passing_colours[1] = bullet[b].colours [1]; passing_colours[2] = bullet[b].colours [1]; passing_colours[3] = bullet[b].colours [2]; passing_colours[4] = bullet[b].colours [2]; place_speck_burst(bullet[b].x, bullet[b].y, xs, ys, 1 + grand(2), 10, 21, 450, passing_colours); passing_colours [0] = bullet[b].colours [0]; j = 16 + grand(12); create_cloud(CLOUD_SMALL_FADING_CIRCLE, bullet[b].x, bullet[b].y, xs, ys, 0, 0, j, 1, 0, 0, j, 0, passing_colours); break; case BULLET_CRYSTAL_TOOTH: case BULLET_CRYSTAL_SPINE: passing_colours[0] = bullet[b].colours [0]; passing_colours[1] = bullet[b].colours [1]; passing_colours[2] = bullet[b].colours [1]; passing_colours[3] = bullet[b].colours [2]; passing_colours[4] = bullet[b].colours [2]; place_speck_burst(bullet[b].x, bullet[b].y, xs, ys, 2 + grand(3), 10, 21, 450, passing_colours); // fall-through... case BULLET_SILVER_TOOTH: case BULLET_BRASS_TOOTH: case BULLET_GOLDEN_NEEDLE: case BULLET_NUMEROUS_DART: case BULLET_ZAP: case BULLET_ZAP_DRAG: case BULLET_SLIVER: // if (hit_what != HIT_NOTHING) // break; passing_colours [0] = bullet[b].colours [0]; j = 30 + grand(20); create_cloud(CLOUD_SMALL_FADING_CIRCLE, bullet[b].x, bullet[b].y, xs, ys, 0, 0, j, -1, 1, 0, j, 0, passing_colours); break; case BULLET_SILVER_TOOTH_SMALL: case BULLET_GOLDEN_NEEDLE_SMALL: case BULLET_BRASS_TOOTH_SMALL: passing_colours [0] = bullet[b].colours [0]; j = 20 + grand(15); create_cloud(CLOUD_SMALL_FADING_CIRCLE, bullet[b].x, bullet[b].y, xs, ys, 0, 0, j, 0, 1, 0, j, 0, passing_colours); break; case BULLET_PARTICLE_SPITTER: passing_colours [0] = COLOUR_GREEN8; create_cloud(CLOUD_SMALL_CIRCLE, bullet[b].x, bullet[b].y, xs, ys, 0, 0, 200 + crandom(120),15,15, 0, 0, 0, passing_colours); break; case BULLET_FAR_SPITTER: passing_colours [0] = COLOUR_YELLOW8; create_cloud(CLOUD_SMALL_CIRCLE, bullet[b].x, bullet[b].y, xs, ys, 0, 0, 200 + crandom(120),15,15, 0, 0, 0, passing_colours); break; case BULLET_BLAST: case BULLET_BOLT: passing_colours[0] = bullet[b].colours [0]; passing_colours[1] = bullet[b].colours [1]; passing_colours[2] = bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 300 + grand(150), passing_colours); break; case BULLET_BIGBALL1: passing_colours[0] = bullet[b].colours [2]; passing_colours[1] = bullet[b].colours [1]; passing_colours[2] = bullet[b].colours [0]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 400 + grand(150) + bullet[b].special1 * 50, passing_colours); break; case BULLET_TRI1: passing_colours [3] = TRANS_DRED; //bullet[b].colours [0]; passing_colours [2] = TRANS_LRED; //bullet[b].colours [1]; passing_colours [1] = TRANS_ORANGE; //bullet[b].colours [2]; passing_colours [0] = TRANS_YELLOW; //bullet[b].colours [3]; for (j = 0; j < 10; j ++) { xs = grand(ANGLE_FULL); create_cloud(CLOUD_BIG_BLAST_CIRCLE, bullet[b].x, bullet[b].y, //grand(10001) - 5000, 0, 0, // bullet[b].x_speed + xpart(xs, 5000 + grand(6000)), // bullet[b].y_speed + ypart(xs, 5000 + grand(6000)), xpart(xs, 4000 + grand(6000)), ypart(xs, 4000 + grand(6000)), 85 + grand(50), 3, 0, 0, 0, 0, passing_colours); } passing_colours [0] = TRANS_DRED; //bullet[b].colours [0]; passing_colours [1] = TRANS_LRED; //bullet[b].colours [1]; passing_colours [2] = TRANS_YELLOW; //bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 400 + grand(300), passing_colours); blast(bullet[b].x, bullet[b].y, 50000, 150, 3000, bullet[b].owner); bullet_soundf(b, NWAV_BURST, 500 + grand(100)); break; case BULLET_TRI2: passing_colours [3] = TRANS_DBLUE; //bullet[b].colours [0]; passing_colours [2] = TRANS_DBLUE; //bullet[b].colours [1]; passing_colours [1] = TRANS_LBLUE; //bullet[b].colours [2]; passing_colours [0] = TRANS_WHITE; //bullet[b].colours [3]; for (j = 0; j < 10; j ++) { xs = grand(ANGLE_FULL); create_cloud(CLOUD_BIG_BLAST_CIRCLE, bullet[b].x, bullet[b].y, //grand(10001) - 5000, 0, 0, // bullet[b].x_speed + xpart(xs, 5000 + grand(6000)), // bullet[b].y_speed + ypart(xs, 5000 + grand(6000)), xpart(xs, 4000 + grand(6000)), ypart(xs, 4000 + grand(6000)), 85 + grand(50), 3, 0, 0, 0, 0, passing_colours); } passing_colours [0] = TRANS_DBLUE; //bullet[b].colours [0]; passing_colours [1] = TRANS_LBLUE; //bullet[b].colours [1]; passing_colours [2] = TRANS_WHITE; //bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 400 + grand(300), passing_colours); blast(bullet[b].x, bullet[b].y, 50000, 200, 4000, bullet[b].owner); bullet_soundf(b, NWAV_BURST, 450 + grand(50)); break; case BULLET_TRI3: passing_colours [3] = TRANS_LRED; //bullet[b].colours [0]; passing_colours [2] = TRANS_ORANGE; //bullet[b].colours [1]; passing_colours [1] = TRANS_YELLOW; //bullet[b].colours [2]; passing_colours [0] = TRANS_WHITE; //bullet[b].colours [3]; for (j = 0; j < 14; j ++) { xs = grand(ANGLE_FULL); create_cloud(CLOUD_BIG_BLAST_CIRCLE, bullet[b].x, bullet[b].y, //grand(10001) - 5000, 0, 0, // bullet[b].x_speed + xpart(xs, 5000 + grand(6000)), // bullet[b].y_speed + ypart(xs, 5000 + grand(6000)), xpart(xs, 4000 + grand(6000)), ypart(xs, 4000 + grand(6000)), 85 + grand(50), 3, 0, 0, 0, 0, passing_colours); } passing_colours [0] = TRANS_ORANGE; //bullet[b].colours [0]; passing_colours [1] = TRANS_YELLOW; //bullet[b].colours [1]; passing_colours [2] = TRANS_WHITE; //bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 400 + grand(300), passing_colours); blast(bullet[b].x, bullet[b].y, 50000, 250, 5000, bullet[b].owner); bullet_soundf(b, NWAV_BURST, 400 + grand(10)); break; case BULLET_OVERTRI: passing_colours [3] = TRANS_DGREEN; //bullet[b].colours [0]; passing_colours [2] = TRANS_LGREEN; //bullet[b].colours [1]; passing_colours [1] = TRANS_YELLOW; //bullet[b].colours [2]; passing_colours [0] = TRANS_WHITE; //bullet[b].colours [3]; for (j = 0; j < 24; j ++) { xs = grand(ANGLE_FULL); create_cloud(CLOUD_BIG_BLAST_CIRCLE, bullet[b].x, bullet[b].y, //grand(10001) - 5000, 0, 0, xpart(xs, 4000 + grand(6000)), ypart(xs, 4000 + grand(6000)), 85 + grand(80), 3, 0, 0, 0, 0, passing_colours); } passing_colours [0] = TRANS_LGREEN; //bullet[b].colours [0]; passing_colours [1] = TRANS_YELLOW; //bullet[b].colours [1]; passing_colours [2] = TRANS_WHITE; //bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 800 + grand(300), passing_colours); blast(bullet[b].x, bullet[b].y, 70000, 500, 6000, bullet[b].owner); bullet_soundf(b, NWAV_BURST, 200 + grand(10)); break; case BULLET_EYE_DESOLATION_SMALL: passing_colours[2] = TRANS_YELLOW; passing_colours[1] = TRANS_ORANGE; passing_colours[0] = TRANS_DRED; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 300 + grand(150), passing_colours); break; case BULLET_EYE_DESOLATION: passing_colours [0] = bullet[b].colours [0]; passing_colours [1] = bullet[b].colours [1]; passing_colours [2] = bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 200 + grand(300) + bullet[b].special2 * 10, passing_colours); blast(bullet[b].x, bullet[b].y, bullet[b].special3, bullet[b].special1, 2000 + bullet[b].special1 * 10, bullet[b].owner); if (bullet[b].special5 > 0 && hit_what != HIT_WAVE) { m = ANGLE_FULL / bullet[b].special5; for (j = 0; j < bullet[b].special5; j ++) { xs = xpart((m * j) + bullet[b].angle, 800 + bullet[b].special4 * 9); ys = ypart((m * j) + bullet[b].angle, 800 + bullet[b].special4 * 9); create_bullet(BULLET_EYE_DESOLATION_SMALL, bullet[b].x + xs * 3, bullet[b].y + ys * 3, xs, ys, bullet[b].owner, bullet[b].special1, 30 + grand(10), 100, 0, 0, 0, bullet[b].colours, 1, 0,0,0,0,0); } } simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 300 + crandom(50) + bullet[b].special2 * 2, 15); bullet_soundf(b, NWAV_BURSTZL, 300 + grand(100)); break; case BULLET_BURNING_EYE: passing_colours [0] = bullet[b].colours [0]; passing_colours [1] = bullet[b].colours [1]; passing_colours [2] = bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 200 + grand(300) + bullet[b].special2 * 10, passing_colours); blast(bullet[b].x, bullet[b].y, bullet[b].special3, bullet[b].special1, 2000 + bullet[b].special1 * 10, bullet[b].owner); passing_colours [0] = TRANS_ORANGE; passing_colours [1] = COLOUR_ORANGE8; place_line_burst(bullet[b].x, bullet[b].y, 0, 0, 5, 15, 15, 1200 + (bullet[b].special1 * 3), 300, passing_colours); // simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 300 + crandom(50) + bullet[b].special2 * 2); bullet_soundf(b, NWAV_SHORTBURST, 1300 + grand(100)); break; case BULLET_FLOWER: if (hit_what != HIT_NOTHING) { passing_colours [0] = TRANS_DGREEN; passing_colours [1] = TRANS_LGREEN; passing_colours [2] = TRANS_YELLOW; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 3 + grand(2), passing_colours); break; } switch(grand(5)) { case 0: passing_colours [0] = TRANS_DRED; passing_colours [1] = TRANS_LRED; passing_colours [2] = TRANS_YELLOW; break; case 1: passing_colours [0] = TRANS_DGREEN; passing_colours [1] = TRANS_LGREEN; passing_colours [2] = TRANS_YELLOW; break; case 2: passing_colours [0] = TRANS_DBLUE; passing_colours [1] = TRANS_LBLUE; passing_colours [2] = TRANS_WHITE; break; case 3: passing_colours [0] = TRANS_ORANGE; passing_colours [1] = TRANS_YELLOW; passing_colours [2] = TRANS_WHITE; break; case 4: passing_colours [0] = TRANS_DBLUE; passing_colours [1] = TRANS_LBLUE; passing_colours [2] = TRANS_PURPLE; break; } place_explosion(bullet[b].x, bullet[b].y, 0, 0, 80 + grand(20) + bullet[b].special1 / 2, passing_colours); // blast(bullet[b].x, bullet[b].y, bullet[b].special3, bullet[b].special1, 2000 + bullet[b].special1 * 10, bullet[b].owner); blast(bullet[b].x, bullet[b].y, bullet[b].special3, bullet[b].special1 / 2, -2000 - bullet[b].special1 * 10, bullet[b].owner); // passing_colours [1] = TRANS_DRED; // passing_colours [2] = TRANS_DRED; xs = bullet[b].special5 / 3; // cannot == 0!! int pc2 [4]; for (j = 0; j < xs; j ++) { pc2 [0] = passing_colours [2]; pc2 [1] = passing_colours [2]; pc2 [2] = passing_colours [2]; create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, bullet[b].x_speed + xpart(bullet[b].angle + j * (ANGLE_FULL / xs), 9000 + bullet[b].special1 * 9), bullet[b].y_speed + ypart(bullet[b].angle + j * (ANGLE_FULL / xs), 9000 + bullet[b].special1 * 9), 40 + grand(5) + bullet[b].special1 / 3, -20, 3, 0, 0, 0, pc2); pc2 [0] = passing_colours [1]; pc2 [1] = passing_colours [1]; pc2 [2] = passing_colours [1]; create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, bullet[b].x_speed + xpart(bullet[b].angle + j * (ANGLE_FULL / xs), 8000 + bullet[b].special1 * 8), bullet[b].y_speed + ypart(bullet[b].angle + j * (ANGLE_FULL / xs), 8000 + bullet[b].special1 * 8), 50 + grand(10) + bullet[b].special1 / 3, -30, 3, 0, 0, 0, pc2); } /* for (j = 0; j < 3; j ++) { passing_colours [0] = TRANS_LRED; create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, bullet[b].x_speed + xpart(bullet[b].angle + j * (ANGLE_FULL / 3), 6900 + bullet[b].special1 * 9), bullet[b].y_speed + ypart(bullet[b].angle + j * (ANGLE_FULL / 3), 6900 + bullet[b].special1 * 9), 40 + grand(5) + bullet[b].special1 / 3, -20, 3, 0, 0, 0, passing_colours); passing_colours [0] = TRANS_DRED; create_cloud(CLOUD_BLAST_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, bullet[b].x_speed + xpart(bullet[b].angle + j * (ANGLE_FULL / 3), 6000 + bullet[b].special1 * 8), bullet[b].y_speed + ypart(bullet[b].angle + j * (ANGLE_FULL / 3), 6000 + bullet[b].special1 * 8), 50 + grand(10) + bullet[b].special1 / 3, -30, 3, 0, 0, 0, passing_colours); }*/ bullet[b].type = BULLET_FLOWER2; bullet[b].timeout = 15; bullet_soundf(b, NWAV_BURSTZL, 800 + grand(10)); // bullet_soundf(b, NWAV_BURST, 200 + grand(100)); return; // NOTE return case BULLET_FLOWER2: /* if (hit_what != HIT_NOTHING) { passing_colours [0] = TRANS_DGREEN; passing_colours [1] = TRANS_LGREEN; passing_colours [2] = TRANS_YELLOW; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 3 + grand(2), passing_colours); break; }*/ // passing_colours [0] = TRANS_ORANGE; // passing_colours [1] = TRANS_YELLOW; // passing_colours [2] = TRANS_WHITE; switch(grand(5)) { case 0: bullet[b].colours [2] = TRANS_DRED; bullet[b].colours [1] = TRANS_LRED; bullet[b].colours [0] = TRANS_YELLOW; break; case 1: bullet[b].colours [2] = TRANS_DGREEN; bullet[b].colours [1] = TRANS_LGREEN; bullet[b].colours [0] = TRANS_YELLOW; break; case 2: bullet[b].colours [2] = TRANS_DBLUE; bullet[b].colours [1] = TRANS_LBLUE; bullet[b].colours [0] = TRANS_WHITE; break; case 3: bullet[b].colours [2] = TRANS_ORANGE; bullet[b].colours [1] = TRANS_YELLOW; bullet[b].colours [0] = TRANS_WHITE; break; case 4: bullet[b].colours [2] = TRANS_DBLUE; bullet[b].colours [1] = TRANS_LBLUE; bullet[b].colours [0] = TRANS_PURPLE; break; } if (bullet[b].special5 > 0) { m = ANGLE_FULL / bullet[b].special5; for (j = 0; j < bullet[b].special5; j ++) { xs = xpart((m * j) + bullet[b].angle + ANGLE_QUARTER, 1200 + bullet[b].special4 * 15); ys = ypart((m * j) + bullet[b].angle + ANGLE_QUARTER, 1200 + bullet[b].special4 * 15); create_bullet(BULLET_PETAL1, //bullet[b].x, bullet[b].y, // bullet[b].x + xs, bullet[b].y + ys, xs, ys, bullet[b].owner, bullet[b].special1, 30 + grand(10), 100, 0, 0, 0, bullet[b].colours, 1, 0,0,0,0,0); } } bullet_soundf(b, NWAV_BURST, 200 + grand(100)); // bullet_soundf(b, NWAV_BURSTZL, 200 + grand(10)); break; case BULLET_FROZEN_STAR: passing_colours [0] = TRANS_DBLUE; passing_colours [1] = TRANS_LBLUE; passing_colours [2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 3 + grand(2), passing_colours); break; case BULLET_SPORE: passing_colours [0] = TRANS_ORANGE; passing_colours [1] = TRANS_YELLOW; passing_colours [2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 3 + grand(2), passing_colours); break; case BULLET_EVIL_STAR: passing_colours [0] = bullet[b].colours [0]; passing_colours [1] = bullet[b].colours [1]; passing_colours [2] = bullet[b].colours [2]; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 3 + grand(2), passing_colours); break; case BULLET_FROZEN_TOOTH: passing_colours [0] = TRANS_DBLUE; passing_colours [1] = TRANS_LBLUE; passing_colours [2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 20 + grand(10) + bullet[b].special2, passing_colours); //blast(bullet[b].x, bullet[b].y, bullet[b].special3, bullet[b].special1, 2000 + bullet[b].special1 * 10, bullet[b].owner); // passing_colours [0] = TRANS_LBLUE; // passing_colours [1] = COLOUR_WHITE; // place_line_burst(bullet[b].x, bullet[b].y, 0, 0, 5, 15, 15, 1200 + (bullet[b].special1 * 3), 300, passing_colours); // simple_shockwave(TRANS_WHITE2, bullet[b].x, bullet[b].y, 0, 0, 300 + crandom(50) + bullet[b].special2 * 2); break; case BULLET_BALL1: case BULLET_BALL2: passing_colours[0] = TRANS_ORANGE; passing_colours[1] = TRANS_YELLOW; passing_colours[2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 300 + grand(150), passing_colours); break; case BULLET_PULSE1: passing_colours[0] = TRANS_ORANGE; passing_colours[1] = TRANS_YELLOW; passing_colours[2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 300 + grand(150), passing_colours); break; case BULLET_PULSE2: passing_colours[0] = TRANS_DBLUE; passing_colours[1] = TRANS_LBLUE; passing_colours[2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 300 + grand(150), passing_colours); break; case BULLET_OVERPULSE: passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 1300 + grand(450), passing_colours); break; case BULLET_TWIRLY1: case BULLET_TWIRLY2: passing_colours[0] = TRANS_ORANGE; passing_colours[1] = TRANS_YELLOW; passing_colours[2] = TRANS_WHITE; place_explosion(bullet[b].x, bullet[b].y, 0, 0, 900 + grand(100), passing_colours); break; case BULLET_TWISTY: passing_colours [0] = bullet[b].colours [0]; passing_colours [1] = bullet[b].colours [1]; passing_colours [2] = bullet[b].colours [2]; xa = (bullet[b].special1 % 32) * 32; xb = xpart(xa, 13 * GRAIN); cx = bullet[b].x + xpart(bullet[b].angle + ANGLE_QUARTER, xb); cy = bullet[b].y + ypart(bullet[b].angle + ANGLE_QUARTER, xb); place_explosion(cx, cy, 0, 0, 600 + grand(100), passing_colours); cx = bullet[b].x + xpart(bullet[b].angle - ANGLE_QUARTER, xb); cy = bullet[b].y + ypart(bullet[b].angle - ANGLE_QUARTER, xb); place_explosion(cx, cy, 0, 0, 600 + grand(100), passing_colours); break; case BULLET_TWIRLY3: create_cloud(CLOUD_TWIRLY_CIRCLE, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, passing_colours); break; case BULLET_CRYSTAL1: create_cloud(CLOUD_SHATTER1, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, passing_colours); blast(bullet[b].x, bullet[b].y, 30000, 200, 6500, bullet[b].owner); bullet_soundf(b, NWAV_SHADOW, 700 + grand(100)); break; case BULLET_CRYSTAL2: create_cloud(CLOUD_SHATTER2, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 35, 2, 0, bullet[b].angle, 0, 0, passing_colours); blast(bullet[b].x, bullet[b].y, 35000, 250, 7000, bullet[b].owner); bullet_soundf(b, NWAV_SHADOW, 500 + grand(100)); break; case BULLET_LINE_PULSE: passing_colours [0] = bullet[b].colours [0]; for (j = 0; j < 9; j ++) { xa = bullet[b].angle + j * ANGLE_FULL / 9 + grand(ANGLE_1_SIXTEENTH) - grand(ANGLE_1_SIXTEENTH); create_cloud(CLOUD_LINE_SHADOW, bullet[b].x + xpart(xa, 11 * GRAIN), bullet[b].y + ypart(xa, 11 * GRAIN), 0, 0, xpart(xa, 1200), ypart(xa, 1200), 140 + grand(40),6 + grand(3),0, xa + ANGLE_QUARTER, 0, 0, passing_colours); } break; case BULLET_YELLOW_FLAK: blast(bullet[b].x, bullet[b].y, 22000, 200, 5000, bullet[b].owner); create_cloud(CLOUD_FLAK_BURST, bullet[b].x, bullet[b].y, 0, 0, 0, 0, 60,5,0, 0, 3, 0, passing_colours); bullet_soundvf(b, NWAV_SHORTBURST, 100, 1500 + grand(100)); break; } // Note: not all bullets get this far (eg mines) destroy_bullet(b); } void enemy_beam(int x, int y, int angle, int power, int type, int e) { int x2, y2, angle2; int actor_size; int i, a, c; int a1, adiff, t_angle; if (power > 100) a = (150 - power) * 6; else a = 300; if (power < 25) a = power * 12; if (power > 100) c = (150 - power) / 12 + 1;// + pulsate(64, 2, effect[dr].things [2]); else c = 5 + grand(3);// + pulsate(64, 1, effect[dr].things [2]); if (power < 40) c = power / 8 + grand(3); if (c < 1) c = 1; for (i = 0; i < NO_ACTORS; i ++) { if (actor[i].in_play == 0) continue; if (actor[i].grace_period > 0) continue; actor_size = 7; if (actor[i].ship == SHIP_SMALL) actor_size = 5; if (hypot(actor[i].x - (x + xpart(angle, 21 * GRAIN + a * GRAIN)), actor[i].y - (y + ypart(angle, 21 * GRAIN + a * GRAIN))) < (12 + actor_size) * GRAIN) { if (type == EFFECT_REDBEAM) actor_in_beam(i, angle, 20, 600, TRANS_YELLOW, TRANS_DRED); else actor_in_beam(i, angle, 20, 800, TRANS_WHITE, TRANS_LBLUE); continue; } if (hypot(actor[i].x - (enemy[e].x + xpart(enemy[e].angle, 20000)), actor[i].y - (enemy[e].y + ypart(enemy[e].angle, 20000))) > hypot(actor[i].x - (enemy[e].x - xpart(enemy[e].angle, 20000)), actor[i].y - (enemy[e].y - ypart(enemy[e].angle, 20000)))) continue; if (hypot(actor[i].x - (x + xpart(angle, 21 * GRAIN)), actor[i].y - (y + ypart(angle, 21 * GRAIN))) > a * GRAIN) continue; x2 = x - xpart(angle, 200 * GRAIN); y2 = y - ypart(angle, 200 * GRAIN); angle2 = radians_to_angle(atan2(actor[i].y - y2, actor[i].x - x2)); a1 = abs(radians_to_angle(atan2(y + ypart(angle, a * GRAIN) + ypart(angle - ANGLE_QUARTER, (c * 2 + 7) * GRAIN) - y2, x + xpart(angle, a * GRAIN) + xpart(angle - ANGLE_QUARTER, (c * 2 + actor_size) * GRAIN) - x2))); if (y + ypart(angle, a * GRAIN) + ypart(angle - ANGLE_QUARTER, (c * 2 + actor_size) * GRAIN) < y2) a1 = ANGLE_FULL - a1; angle2 = abs(angle2); if (actor[i].y < y2) angle2 = (ANGLE_FULL - angle2) % ANGLE_FULL; t_angle = angle; if (angle > ANGLE_HALF) t_angle = ANGLE_FULL - angle; t_angle = abs(t_angle); var1 = angle_difference(abs(angle2), abs(radians_to_angle(atan2(actor[i].y - y, actor[i].x - x)))); var2 = abs(t_angle); var3 = abs(radians_to_angle(atan2(actor[i].y - y, actor[i].x - x))); adiff = abs(radians_to_angle(atan2(actor[i].y - y, actor[i].x - x))); if (adiff > ANGLE_HALF) adiff = ANGLE_FULL - adiff; var3 = adiff; if (angle_difference(abs(angle2), abs(angle)) < angle_difference(abs(angle), abs(a1))) { { if (angle_difference(abs(t_angle), adiff) < ANGLE_QUARTER) { if (type == EFFECT_REDBEAM) actor_in_beam(i, angle, 20, 600, TRANS_YELLOW, TRANS_DRED); else actor_in_beam(i, angle, 20, 800, TRANS_WHITE, TRANS_LBLUE); continue; } } } } } void actor_in_beam(int i, int angle, int damage, int force, int colour1, int colour2) { int passing_colours [5]; passing_colours [0] = colour2; create_cloud(CLOUD_MED_TRANS_CIRCLE, actor[i].x, actor[i].y, 0, 0, 0, 0, 1200 + grand(400),400, 0, 0, 0, 0, passing_colours); passing_colours [0] = colour1; create_cloud(CLOUD_MED_TRANS_CIRCLE, actor[i].x, actor[i].y, 0, 0, 0, 0, 1000 + grand(300),400, 0, 0, 0, 0, passing_colours); actor[i].x_speed += xpart(angle, force); actor[i].y_speed += ypart(angle, force); actor[i].screen_shake_time += 2; if (actor[i].screen_shake_time > 12) actor[i].screen_shake_time = 12; hurt_actor(i, OWNER_ENEMY, damage); } void destroy_bullet(int b) { bullet[b].type = BULLET_NONE; } int move_bullet(int mbull, char limited) { if (bullet[mbull].x_speed == 0 && bullet[mbull].y_speed == 0) return 1; /* if (bullet[mbull].x + bullet[mbull].x_speed <= 0 || bullet[mbull].x + bullet[mbull].x_speed >= arena.max_x - 3000) { bullet_impact(mbull, -1); return 0; } if (bullet[mbull].y + bullet[mbull].y_speed <= 0 || bullet[mbull].y + bullet[mbull].y_speed >= arena.max_y - 4000) { bullet_impact(mbull, -1); return 0; } */ if (bullet[mbull].x <= 0 || bullet[mbull].x >= arena.max_x - 3000) { bullet_impact(mbull, -1, HIT_EDGE); return 0; } if (bullet[mbull].y <= 0 || bullet[mbull].y >= arena.max_y - 4000) { bullet_impact(mbull, -1, HIT_EDGE); return 0; } bullet[mbull].x2 += bullet[mbull].x_speed; bullet[mbull].y2 += bullet[mbull].y_speed; bullet[mbull].x += bullet[mbull].x_speed; bullet[mbull].y += bullet[mbull].y_speed; if (arena.waver_on_level != 0 && bullet[mbull].owner != OWNER_ENEMY) { int e, d1, d2, nd; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[e].type == ENEMY_WAVER1 || enemy[e].type == ENEMY_WAVER2) { d1 = hypot(enemy[e].x - bullet[mbull].x, enemy[e].y - bullet[mbull].y); d2 = hypot(enemy[e].x - bullet[mbull].x - bullet[mbull].x_speed, enemy[e].y - bullet[mbull].y - bullet[mbull].y_speed); nd = 147 * GRAIN; if (enemy[e].type == ENEMY_WAVER2) nd = 197 * GRAIN; if ((d2 < nd && d1 >= nd) || (d1 >= nd - 8 * GRAIN && d1 <= nd + 8 * GRAIN) || (d2 >= nd && d1 < nd)) { bullet_impact(mbull, -1, HIT_WAVE); return 0; } } } } return 1; /* char dir_x = 0, dir_y = 0; int move_x = bullet[mbull].x_speed; int move_y = bullet[mbull].y_speed; int timeout = 0; if (move_x > 0) dir_x = 10; if (move_x < 0) dir_x = -10; if (move_y > 0) dir_y = 10; if (move_y < 0) dir_y = -10; int step_x = move_x; int step_y = move_y; int oldx = bullet[mbull].x; int oldy = bullet[mbull].y; if (step_x == 0) { if (step_y > GRAIN) step_y = GRAIN; if (step_y < -GRAIN) step_y = -GRAIN; } else if (step_y == 0) { if (step_x > GRAIN) step_x = GRAIN; if (step_x < -GRAIN) step_x = -GRAIN; } else if (abs(step_x) > GRAIN || abs(step_y) > GRAIN) { if (abs(step_x) >= abs(step_y)) { step_y = (step_y * GRAIN) / abs(step_x); step_x = (GRAIN * step_x) / abs(step_x); } else if (abs(step_y) > abs(step_x)) { step_x = (step_x * GRAIN) / abs(step_y); step_y = (GRAIN * step_y) / abs(step_y); } } // if (move_x == 10 && move_y == 0 && bullet[mbull].damage != -1) // { // if (actor_collision(mbull) == 1) return 0; // } while (move_x != 0 || move_y != 0) { timeout ++; if (timeout > 1000) break; // if (actor_collision(mbull) == 1) return 0; if (step_x == 0 && step_y == 0) return 1; if (step_x == 0) move_x = 0; if (step_y == 0) move_y = 0; if (move_y != 0 && (abs(move_y + step_y) == move_y + step_y) != (abs(step_y) == step_y)) { // move_y = 0; step_y = move_y; if (move_x == 0) break; } if (move_x != 0 && (abs(move_x + step_x) == move_x + step_x) != (abs(step_x) == step_x)) { // move_x = 0; step_x = move_x; if (move_y == 0) break; } if ((move_x > 0) != (step_x > 0))// && (move_x < 0) != (step_x < 0)) { // move_x = 0; step_x = move_x; if (move_y == 0) break; } if ((move_y > 0) != (step_y > 0))// && (move_y < 0) != (step_y < 0)) { // move_y = 0; step_y = move_y; if (move_x == 0) break; } if (limited == 1) { move_x -= step_x; move_y -= step_y; } bullet[mbull].x += step_x; bullet[mbull].y += step_y; * / } // end of while loop bullet[mbull].x2 += bullet[mbull].x_speed; bullet[mbull].y2 += bullet[mbull].y_speed; if (oldx == bullet[mbull].x && oldy == bullet[mbull].y) { bullet[mbull].x_speed = 0; bullet[mbull].y_speed = 0; } return 1; */ } int detect_collision(int b, int things [2]) { int x2 = bullet[b].x - bullet[b].x_speed; int y2 = bullet[b].y - bullet[b].y_speed; int i; /* int xa, ya; float bullet_angle; float bullet_slope; int side_disp; int x1 =*/ if (bullet[b].damage == 0) return -1; for (i = 0; i < NO_ACTORS; i ++) { // I tried to write an accurate collision detector but failed; all my // ideas would've been too slow. So we get this horrible thing which // is woefully inaccurate at high relative speeds: if (actor[i].in_play == 0) continue; if (actor[i].grace_period > 0) continue; if (bullet[b].owner == i) continue; // for duels; actors' bullets in non-duel games don't get this far. if (hypot(actor[i].x - bullet[b].x, actor[i].y - bullet[b].y) <= actor[i].radius + bullet[b].size) { things [0] = bullet[b].x; things [1] = bullet[b].y; return i; } if (hypot(actor[i].x - x2, actor[i].y - y2) <= actor[i].radius + bullet[b].size) { things [0] = x2; things [1] = y2; return i; } } return -1; } int detect_enemy_collision(int b, int things [2]) { int x2 = bullet[b].x - bullet[b].x_speed; int y2 = bullet[b].y - bullet[b].y_speed; int e; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[e].type == ENEMY_NONE) continue; if (enemy[e].radius == 0) // dead wanderer etc continue; // if (bullet[b].owner == OWNER_ENEMY) // continue; if (hypot(enemy[e].x - bullet[b].x, enemy[e].y - bullet[b].y) <= enemy[e].radius + bullet[b].size) { things [0] = bullet[b].x; things [1] = bullet[b].y; return e; } if (hypot(enemy[e].x - x2, enemy[e].y - y2) <= enemy[e].radius + bullet[b].size) { things [0] = x2; things [1] = y2; return e; } x2 = bullet[b].x - bullet[b].x_speed / 2; y2 = bullet[b].y - bullet[b].y_speed / 2; if (hypot(enemy[e].x - x2, enemy[e].y - y2) <= enemy[e].radius + bullet[b].size) { things [0] = x2; things [1] = y2; return e; } } return -1; } void blast(int x, int y, int radius, int damage, int force, int owner) { int i, damage_done, distance; int bangle; float proportion; if (owner == OWNER_ENEMY || game.type == GAME_DUEL) { for (i = 0; i < NO_ACTORS; i ++) { if (actor[i].in_play == 0) continue; if (actor[i].grace_period > 0) continue; if (i == owner) continue; distance = hypot(actor[i].x - x, actor[i].y - y); if (distance <= actor[i].radius + radius) { bangle = radians_to_angle(atan2(actor[i].y - y, actor[i].x - x)); proportion = ((radius + actor[i].radius) * 50) / (distance + actor[i].radius); if (proportion > 100) proportion = 100; // actor[i].x_speed += cos(bangle) * (float) force * proportion / actor[i].mass; // actor[i].y_speed += sin(bangle) * (float) force * proportion / actor[i].mass; actor[i].x_speed += xpart(bangle, force * proportion / actor[i].mass); actor[i].y_speed += ypart(bangle, force * proportion / actor[i].mass); actor[i].screen_shake_time += (force * proportion) / 2000; if (actor[i].screen_shake_time > 12) actor[i].screen_shake_time = 12; damage_done = (float) damage * proportion; damage_done /= 100; // inflicteda = damage_done; // inflictede = proportion; if (damage_done > 0) hurt_actor(i, owner, damage_done); } } if (owner == OWNER_ENEMY) return; } int e, sh; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[e].type == ENEMY_NONE) continue; if (enemy[e].radius == 0) continue; // dead things distance = hypot(enemy[e].x - x, enemy[e].y - y); if (distance <= enemy[e].radius + radius) { bangle = radians_to_angle(atan2(enemy[e].y - y, enemy[e].x - x)); // proportion = (float) (((distance + enemy[e].radius) * 100) / (float) radius + enemy[e].radius); proportion = ((radius + enemy[e].radius) * 50) / (distance + enemy[e].radius); // (((distance + enemy[e].radius) * 100) / (float) radius + enemy[e].radius); if (proportion > 100) proportion = 100; enemy[e].x_speed += xpart(bangle, force * proportion / enemy[e].mass); enemy[e].y_speed += ypart(bangle, force * proportion / enemy[e].mass); damage_done = (float) damage * proportion; damage_done /= 100; // inflicteda = damage_done; // inflictede = proportion; sh = check_shielder(e); if (!sh) { int pulse = damage_done / 6 + 1; if (pulse > 8) pulse = 8; if (damage_done > 0) hurt_enemy(e, damage_done, owner, pulse); } else { shield_line(e, enemy[e].x + xpart(bangle + ANGLE_HALF, enemy[e].radius), // / GRAIN), enemy[e].y + ypart(bangle + ANGLE_HALF, enemy[e].radius)); // / GRAIN)); } } // if (distance <= enemy[e].radius + radius) // { // } } } void line_blast(int x, int y, int type, int target) { int b, xa; for (b = 0; b < NO_BULLETS; b ++) { if (bullet[b].type != type) continue; if (bullet[b].special2 != target) continue; xa = radians_to_angle(atan2(bullet[b].y - y, bullet[b].x - x)); bullet[b].x_speed += xpart(xa, 10000); bullet[b].y_speed += ypart(xa, 10000); bullet[b].special2 = -1; } } int radius_effect(int x, int y, int radius, int effect) { int i, distance, retval = 0; for (i = 0; i < NO_ACTORS; i ++) { if (actor[i].in_play == 0) continue; if (actor[i].grace_period > 0) continue; distance = hypot(actor[i].x - x, actor[i].y - y); if (distance <= actor[i].radius + radius) { switch(effect) { case RADEFFECT_TELEPORT: teleport_actor(i); retval = 1; break; } } } return retval; } void drag_bullet(int b, float drag_amount) { bullet[b].x_speed *= (float) 1 - drag_amount; bullet[b].y_speed *= (float) 1 - drag_amount; } void teleport_actor(int a) { int timeout = 2000; do { actor[a].x = grand(arena.max_x - 100000) + 50000; actor[a].y = grand(arena.max_y - 100000) + 50000; timeout --; } while (clear_space(actor[a].x, actor[a].y, 10000) == 0 && timeout > 0); simple_cloud_trans(TRANS_DARKEN, actor[a].x, actor[a].y, 0, 0, 2020); } int clear_space(int x, int y, int rad) { int e; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[e].type == ENEMY_NONE) continue; if (enemy[e].radius == 0) // dead wanderer etc continue; if (hypot(enemy[e].x - x, enemy[e].y - y) <= enemy[e].radius + rad) { return 0; } } return 1; } int enemy_bullet_track_target(int b, int attacking, int turning) { bullet[b].angle = turn_towards_xy(bullet[b].x, bullet[b].y, actor[attacking].x, actor[attacking].y, bullet[b].angle, turning); return bullet[b].angle; } // returns the nearest actor - assumes max 2 actors // returns either 1 or 0, or -1 if no actors in place int closest_target(int x, int y) { if (actor[0].in_play == 0 && actor[1].in_play == 0) return ATTACK_NONE; if (actor[0].in_play == 0) return 1; if (actor[1].in_play == 0) return 0; if (hypot(x - actor[0].x, y - actor[0].y) < hypot(x - actor[1].x, y - actor[1].y)) return 0; else return 1; } // returns a random actor within range. Assumes max 2 actors // returns 1, 0, or ATTACK_NONE if none within range // range calculation is quick & dirty int nearby_target(int range, int x, int y) { if (actor[0].in_play == 0 && actor[1].in_play == 0) return ATTACK_NONE; if (actor[0].in_play == 1) { if (abs(actor[0].x - x) + abs(actor[0].y - y) < range) { if (actor[1].in_play == 1 && abs(actor[1].x - x) + abs(actor[1].y - y) < range) { return grand(2); } else return 0; } } if (actor[1].in_play == 1 && abs(actor[1].x - x) + abs(actor[1].y - y) < range) return 1; return ATTACK_NONE; } /* void apply_force_to_actor(int a, float rangle, int total_force) { float rangle = atan2(fx, fy); int total_force = hypot(fx, fy); actor[a].x_speed += cos(angle) * total_force; actor[a].y_speed += sin(angle) * total_force; } void apply_force_to_enemy(int e, int fx, int fy) { float rangle = atan2(fx, fy); int total_force = hypot(fx, fy); enemy[e].x_speed += cos(angle) * total_force; enemy[e].y_speed += sin(angle) * total_force; } */ void bullet_soundf(int b, int sound, int freq) { play_wav_pos(sound, freq, 255, bullet[b].x, bullet[b].y); } void bullet_soundvf(int b, int sound, int vol, int freq) { play_wav_pos(sound, freq, vol, bullet[b].x, bullet[b].y); } overgod-1.0/bullet.h0000644000175000001440000000127410277613046013501 0ustar michiusersint create_bullet(int type, int x, int y, int x_speed, int y_speed, int owner, int damage, int timer, int mass, int angle, int status, int size, int colours [4], int speed_div, int special1, int special2, int special3, int special4, int special5); void init_bullets(void); void run_bullets(void); void blast(int x, int y, int radius, int damage, int force, int owner); int closest_target(int x, int y); int nearby_target(int range, int x, int y); void shield_line(int e, int bx, int by); void shielder_pulse(int e, int dam); int check_shielder(int e); void enemy_beam(int x, int y, int angle, int power, int type, int e); void line_blast(int x, int y, int type, int target); overgod-1.0/cloud.c0000644000175000001440000004522510310757124013311 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: cloud.c History: 11/9/2005 - Version 1.0 finalised This file contains: - functions relating to clouds and transient special effects */ #include "allegro.h" #include #include "config.h" #include "globvars.h" #include "stuff.h" #include "palette.h" #include "sound.h" #include "light.h" #include "actor.h" #include "display.h" void manage_cloud(int cl); int move_cloud(int mc, char limited); void destroy_cloud(int c); void drag_cloud(int i, float dragged); void simple_cloud(int colour, int x, int y, int xs, int ys, int size); void simple_cloud_trans(int colour, int x, int y, int xs, int ys, int size); void place_explosion_with_smoke(int x, int y, int xs, int ys, int size, int colours [5]); void place_explosion(int x, int y, int xs, int ys, int size, int colours [5]); void place_burstlet_burst(int x, int y, int xs, int ys, int burstlets, int min_timeout, int random_timeout, int burst, int random_burst, int pretravel, int colours [5]); void place_bang(int x, int y, int xs, int ys, int size, int btype); int create_cloud_minimum(int type, int x, int y, int x2, int y2, int x_speed, int y_speed, int timer, int tickrate, int delta_tickrate, int angle, int status, unsigned char seed, int minimum, int colours [5]); void init_clouds(void) { int c; for (c = 0; c < NO_CLOUDS; c++) { cloud[c].type = CLOUD_NONE; } } // should delta_tickrate be unsigned? int create_cloud(int type, int x, int y, int x2, int y2, int x_speed, int y_speed, int timer, int tickrate, int delta_tickrate, int angle, int status, unsigned char seed, int colours [5]) { int c = 0; for (c = 1; c < NO_CLOUDS; c++) { if (c == NO_CLOUDS - 1) return -1; if (cloud[c].type == CLOUD_NONE) break; } cloud[c].type = type; cloud[c].x = x;// + (x_speed - actor[owner].x_speed); cloud[c].y = y;// + (y_speed - actor[owner].y_speed); cloud[c].x2 = x2; cloud[c].y2 = y2; cloud[c].x_speed = x_speed; cloud[c].y_speed = y_speed; cloud[c].seed = seed; cloud[c].timeout = timer; cloud[c].tickrate= tickrate; cloud[c].delta_tickrate= delta_tickrate; cloud[c].status = status; cloud[c].angle = angle; cloud[c].colour [0] = colours [0]; cloud[c].colour [1] = colours [1]; cloud[c].colour [2] = colours [2]; cloud[c].colour [3] = colours [3]; cloud[c].colour [4] = colours [4]; return c; } // just like create_cloud, but sets a minimum for the index. // use it for clouds that need to overwrite other clouds on the display (eg dead trianglers) int create_cloud_minimum(int type, int x, int y, int x2, int y2, int x_speed, int y_speed, int timer, int tickrate, int delta_tickrate, int angle, int status, unsigned char seed, int minimum, int colours [5]) { int c = 0; for (c = minimum; c < NO_CLOUDS; c++) { if (c == NO_CLOUDS - 1) return -1; if (cloud[c].type == CLOUD_NONE) break; } cloud[c].type = type; cloud[c].x = x;// + (x_speed - actor[owner].x_speed); cloud[c].y = y;// + (y_speed - actor[owner].y_speed); cloud[c].x2 = x2; cloud[c].y2 = y2; cloud[c].x_speed = x_speed; cloud[c].y_speed = y_speed; cloud[c].seed = seed; cloud[c].timeout = timer; cloud[c].tickrate= tickrate; cloud[c].delta_tickrate= delta_tickrate; cloud[c].status = status; cloud[c].angle = angle; cloud[c].colour [0] = colours [0]; cloud[c].colour [1] = colours [1]; cloud[c].colour [2] = colours [2]; cloud[c].colour [3] = colours [3]; cloud[c].colour [4] = colours [4]; return c; } void run_clouds(void) { int c; for (c = 1; c < NO_CLOUDS; c++) { if (cloud[c].type != CLOUD_NONE) manage_cloud(c); } } void manage_cloud(int c) { int passing_colours [5]; // int x_gain = 0; // int y_gain = 0; // char angle_change; // if (cloud[c].timeout > 0) // { cloud[c].timeout -= cloud[c].tickrate; cloud[c].tickrate += cloud[c].delta_tickrate; // } if (cloud[c].timeout <= 0 || cloud[c].timeout >= 10000) // 10000 is sanity check - unfortunately necessary { destroy_cloud(c); return; } switch(cloud[c].type) { case CLOUD_PULSER1_V: case CLOUD_PULSER1_H: case CLOUD_PULSER2_V: case CLOUD_PULSER2_H: if (cloud[c].timeout <= 2) { shake_all_screens(3 + grand(5)); place_explosion( cloud[c].x + (11 * GRAIN), cloud[c].y + (11 * GRAIN), 0, 0, 300, cloud[c].colour); place_burstlet_burst(cloud[c].x, cloud[c].y, 0, 0, 4 + grand(3), 2, 5, 1200, 500, 4, cloud[c].colour); play_wav_pos(NWAV_MINEBANG, 200 + grand(200), 200, cloud[c].x, cloud[c].y); destroy_cloud(c); return; } break; case CLOUD_SQUAREY: cloud[c].angle -= cloud[c].status; cloud[c].x = cloud[c].x2 + xpart(cloud[c].angle, 30); cloud[c].y = cloud[c].y2 + ypart(cloud[c].angle, 30); if (cloud[c].timeout <= 2) { shake_all_screens(3 + grand(5)); place_explosion( cloud[c].x + xpart(cloud[c].angle, 30000), cloud[c].y + ypart(cloud[c].angle, 30000), 0, 0, 300, cloud[c].colour); place_burstlet_burst(cloud[c].x + xpart(cloud[c].angle, 30000), cloud[c].y + ypart(cloud[c].angle, 30000), 0, 0, 4 + grand(3), 2, 5, 1200, 500, 4, cloud[c].colour); //void place_burstlet_burst(int x, int y, int xs, int ys, int burstlets, int min_timeout, int random_timeout, int burst, int random_burst, int pretravel, int colours [5]) play_wav_pos(NWAV_MINEBANG, 200 + grand(200), 200, cloud[c].x, cloud[c].y); destroy_cloud(c); return; } break; /* case CLOUD_TRI1: case CLOUD_TRI2: case CLOUD_TRI3: drag_cloud(c, .05); if (cloud[c].timeout % 2 == 0) { int cangle = grand(ANGLE_FULL); int cx = cloud[c].x + xpart(cangle, grand(cloud[c].status)); int cy = cloud[c].y + ypart(cangle, grand(cloud[c].status)); passing_colours [0] = cloud[c].colour [1]; create_cloud_minimum(CLOUD_MED_TRANS_CIRCLE, cx, cy, 0, 0, cloud[c].x_speed, cloud[c].y_speed, 200 + grand(350),0,2, 0, 0, 0, c, passing_colours); passing_colours [0] = cloud[c].colour [2]; create_cloud_minimum(CLOUD_MED_TRANS_CIRCLE, cx, cy, 0, 0, cloud[c].x_speed, cloud[c].y_speed, 300 + grand(450),0,6, 0, 0, 0, c, passing_colours); } if (cloud[c].timeout <= 2) { shake_all_screens(7 + grand(8)); place_explosion( cloud[c].x, cloud[c].y, 0, 0, 1900, cloud[c].colour); place_burstlet_burst(cloud[c].x, cloud[c].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, cloud[c].colour); play_wav_pos(NWAV_BANG, 700, 200, cloud[c].x, cloud[c].y); destroy_cloud(c); return; } break;*/ case CLOUD_LIGHT: add_light(LIGHT_NORMAL, cloud[c].timeout / 40, cloud[c].x, cloud[c].y); break; case CLOUD_FLAME_CIRCLE: drag_cloud(c, .2); break; case CLOUD_BIG_BLAST_CIRCLE: drag_cloud(c, .1); break; case CLOUD_BLAST_CIRCLE: drag_cloud(c, .2); break; case CLOUD_SEEKER_CIRCLE: drag_cloud(c, .2); break; case CLOUD_JET_CIRCLE1: case CLOUD_JET_CIRCLE2: case CLOUD_DRIVE_CIRCLE: drag_cloud(c, .02); break; case CLOUD_BURSTLET: // place_explosion(cloud[c].x, cloud[c].y, 0, 0, , cloud[c].colours); passing_colours [0] = cloud[c].colour [1]; // was [0] create_cloud(CLOUD_MED_TRANS_CIRCLE, cloud[c].x, cloud[c].y, 0, 0, 0, 0, 100 + grand(450),0,2, 0, 0, 0, passing_colours); // 50 + grand(300),0,3, 0, 0, 0, passing_colours); // passing_colours [0] = cloud[c].colour [1]; // create_cloud(CLOUD_MED_TRANS_CIRCLE, // cloud[c].x, cloud[c].y, 0, 0, 0, 0, size,-40,15, 0, 0, 0, passing_colours); passing_colours [0] = cloud[c].colour [2]; create_cloud(CLOUD_MED_TRANS_CIRCLE, cloud[c].x, cloud[c].y, 0, 0, 0, 0, 50 + grand(300),0,6, 0, 0, 0, passing_colours); break; case CLOUD_SPAWNER: // the tickrate of a spawner must be a factor of the seed if (cloud[c].timeout % cloud[c].seed == 0) { int cangle = grand(ANGLE_FULL); int cx = cloud[c].x + xpart(cangle, grand(cloud[c].status * 100)); int cy = cloud[c].y + ypart(cangle, grand(cloud[c].status * 100)); shake_all_screens(grand(cloud[c].status) / 200); place_explosion( cx, cy, 0, 0, grand(cloud[c].status) + 250, cloud[c].colour); // if (cloud[c].timeout % 48 == 0) // play_sound_pos(WAV_MINEBANG, 200 + grand(200), 200, cx, cy); if (cloud[c].timeout % 48 == 0) play_wav_pos(NWAV_BANG, 400 + grand(200), 200, cx, cy); } break; } if (move_cloud(c, 1) == 0) return; drag_cloud(c, game.drag); } void destroy_cloud(int c) { cloud[c].type = CLOUD_NONE; } int move_cloud(int c, char limited) { if (cloud[c].x_speed == 0 && cloud[c].y_speed == 0) return 1; cloud[c].x2 += cloud[c].x_speed; cloud[c].y2 += cloud[c].y_speed; cloud[c].x += cloud[c].x_speed; cloud[c].y += cloud[c].y_speed; return 1; } void drag_cloud(int i, float dragged) { cloud[i].x_speed *= 1 - dragged; cloud[i].y_speed *= 1 - dragged; } void simple_cloud(int colour, int x, int y, int xs, int ys, int size) { int passing_colours [5]; passing_colours [0] = colour; create_cloud(CLOUD_MED_CIRCLE, x, y, 0, 0, xs, ys, size,-30,10, 0, 0, 0, passing_colours); } void simple_cloud_trans(int colour, int x, int y, int xs, int ys, int size) { int passing_colours [5]; passing_colours [0] = colour; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-30,10, 0, 0, 0, passing_colours); } void simple_light(int x, int y, int xs, int ys, int size) { int passing_colours [5]; create_cloud(CLOUD_LIGHT, x, y, 0, 0, xs, ys, size,-30,10, 0, 0, 0, passing_colours); } void simple_shockwave(int colour, int x, int y, int xs, int ys, int size, int speed) { int passing_colours [5]; switch(colour) { default: case TRANS_WHITE2: passing_colours [3] = TRANS_WHITE2; passing_colours [2] = TRANS_LGREY; passing_colours [1] = TRANS_LGREY; passing_colours [0] = TRANS_DGREY; break; case TRANS_YELLOW: passing_colours [3] = TRANS_YELLOW; passing_colours [2] = TRANS_ORANGE; passing_colours [1] = TRANS_LRED; passing_colours [0] = TRANS_DRED; break; case TRANS_PURPLE: passing_colours [3] = TRANS_PURPLE; passing_colours [2] = TRANS_LBLUE; passing_colours [1] = TRANS_LBLUE; passing_colours [0] = TRANS_DBLUE; break; case TRANS_LGREEN: passing_colours [3] = TRANS_YELLOW; passing_colours [2] = TRANS_LGREEN; passing_colours [1] = TRANS_DGREEN; passing_colours [0] = TRANS_DGREEN; break; } create_cloud(CLOUD_SHOCKWAVE, x, y, 0, 0, xs, ys, size,speed,0, 0, size + 20 + grand(50), 0, passing_colours); } void place_bang(int x, int y, int xs, int ys, int size, int btype) { int passing_colours [5]; create_cloud(CLOUD_BANG, x, y, 0, 0, xs, ys, size,-20,3, 0, btype, 0, passing_colours); } void place_explosion(int x, int y, int xs, int ys, int size, int colours [5]) { int passing_colours [5]; passing_colours [0] = colours [0]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-100,7, 0, 0, 0, passing_colours); passing_colours [0] = colours [1]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-120,10, 0, 0, 0, passing_colours); passing_colours [0] = colours [2]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-140,15, 0, 0, 0, passing_colours); create_cloud(CLOUD_LIGHT, x, y, 0, 0, xs, ys, size,-100,7, 0, 0, 0, passing_colours); } void place_explosion_no_light(int x, int y, int xs, int ys, int size, int colours [5]) { int passing_colours [5]; passing_colours [0] = colours [0]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-100,7, 0, 0, 0, passing_colours); passing_colours [0] = colours [1]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-120,10, 0, 0, 0, passing_colours); passing_colours [0] = colours [2]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-140,15, 0, 0, 0, passing_colours); } void place_small_explosion(int x, int y, int xs, int ys, int size, int colours [5]) { int passing_colours [5]; passing_colours [0] = colours [0]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-15,3, 0, 0, 0, passing_colours); passing_colours [0] = colours [1]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-20,5, 0, 0, 0, passing_colours); passing_colours [0] = colours [2]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-23,8, 0, 0, 0, passing_colours); create_cloud(CLOUD_LIGHT, x, y, 0, 0, xs, ys, size,-40,7, 0, 0, 0, passing_colours); } void place_explosion_with_smoke(int x, int y, int xs, int ys, int size, int colours [5]) { int passing_colours [5]; passing_colours [0] = TRANS_LGREY; /* create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-30,1, 0, 0, 0, passing_colours);*/ create_cloud(CLOUD_LIGHT, x, y, 0, 0, xs, ys, size,-100,7, 0, 0, 0, passing_colours); passing_colours [0] = colours [0]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-100,7, 0, 0, 0, passing_colours); passing_colours [0] = colours [1]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-105,10, 0, 0, 0, passing_colours); passing_colours [0] = colours [2]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-110,15, 0, 0, 0, passing_colours); } void place_rocket_trail(int x, int y, int xs, int ys, int size, int colours [5]) { int passing_colours [5]; passing_colours [0] = colours [0]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-10,2, 0, 0, 0, passing_colours); passing_colours [0] = colours [1]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-15,4, 0, 0, 0, passing_colours); passing_colours [0] = colours [2]; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, xs, ys, size,-20,15, 0, 0, 0, passing_colours); } void place_speck_burst(int x, int y, int xs, int ys, int specks, int min_timeout, int random_timeout, int scatter, int colours [5]) { int i; for (i = 0; i < specks; i ++) { create_cloud(CLOUD_SPECK, x, y, 0, 0, xs + grand(scatter * 2 + 1) - scatter, ys + grand(scatter * 2 + 1) - scatter, min_timeout + grand(random_timeout), 1,0,0, 0, 0, colours); } } void place_line_burst(int x, int y, int xs, int ys, int specks, int min_timeout, int random_timeout, int burst, int random_burst, int colours [5]) { int i, angle, xsp, ysp, burst_speed; for (i = 0; i < specks; i ++) { angle = grand(ANGLE_FULL); burst_speed = burst + grand(burst); xsp = xs + xpart(angle, burst_speed); ysp = ys + ypart(angle, burst_speed); x += xsp; y += ysp; create_cloud(CLOUD_SHRINKING_LINE, x, y, 0, 0, xsp, ysp, (min_timeout + grand(random_timeout)) * 10, 10 + grand(6),0,angle, 0, 0, colours); } } void place_burstlet_burst(int x, int y, int xs, int ys, int burstlets, int min_timeout, int random_timeout, int burst, int random_burst, int pretravel, int colours [5]) { int i, xs2, ys2, x2, y2; for (i = 0; i < burstlets; i ++) { xs2 = burst + grand(random_burst); ys2 = burst + grand(random_burst); if (grand(2) == 0) xs2 *= -1; if (grand(2) == 0) ys2 *= -1; xs2 += xs; ys2 += ys; x2 = x + xs2 * pretravel; // or it will just be masked by the main y2 = y + ys2 * pretravel; // explosion create_cloud(CLOUD_BURSTLET, x2, y2, 0,0, xs2, ys2, min_timeout + random_timeout,1,0, 0, 0, 0, colours); } } // called at start of each level and once per tick void init_effects(void) { int i; for (i = 0; i < MAX_EFFECTS; i ++) { effect[i].type = EFFECT_NONE; } } int create_effect(int type, int x, int y, int x1, int y1, int x2, int y2, int att1, int att2, int att3, int att4, int att5) { int i; for (i = 0; i < MAX_EFFECTS + 1; i ++) { if (i >= MAX_EFFECTS) return 0; if (effect[i].type == EFFECT_NONE) break; } effect[i].type = type; effect[i].x = x; effect[i].y = y; effect[i].x1 = x1; effect[i].y1 = y1; effect[i].x2 = x2; effect[i].y2 = y2; effect[i].things [0] = att1; effect[i].things [1] = att2; effect[i].things [2] = att3; effect[i].things [3] = att4; effect[i].things [4] = att5; return 1; } overgod-1.0/cloud.h0000644000175000001440000000316410276141366013320 0ustar michiusersvoid init_clouds(void); void init_effects(void); int create_cloud(int type, int x, int y, int x2, int y2, int x_speed, int y_speed, int timer, int tickrate, int delta_tickrate, int angle, int status, unsigned char seed, int colour [5]); void simple_cloud(int colour, int x, int y, int xs, int ys, int size); void simple_cloud_trans(int colour, int x, int y, int xs, int ys, int size); void simple_light(int x, int y, int xs, int ys, int size); void simple_shockwave(int colour, int x, int y, int xs, int ys, int size, int speed); void place_explosion(int x, int y, int xs, int ys, int size, int colours [5]); void place_rocket_trail(int x, int y, int xs, int ys, int size, int colours [5]); void place_explosion_with_smoke(int x, int y, int xs, int ys, int size, int colours [5]); void place_explosion_no_light(int x, int y, int xs, int ys, int size, int colours [5]); void place_small_explosion(int x, int y, int xs, int ys, int size, int colours [5]); void place_speck_burst(int x, int y, int xs, int ys, int specks, int min_timeout, int random_timeout, int scatter, int colours [5]); void place_line_burst(int x, int y, int xs, int ys, int specks, int min_timeout, int random_timeout, int burst, int random_burst, int colours [5]); void place_burstlet_burst(int x, int y, int xs, int ys, int burstlets, int min_timeout, int random_timeout, int burst, int random_burst, int pretravel, int colours [5]); void place_bang(int x, int y, int xs, int ys, int size, int btype); void run_clouds(void); int create_effect(int type, int x, int y, int x1, int y1, int x2, int y2, int att1, int att2, int att3, int att4, int att5); overgod-1.0/cmds.c0000644000175000001440000032107010310757124013124 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: cmds.c History: 11/9/2005 - Version 1.0 finalised This file contains: - implementation of keyboard commands. There's no reason for this stuff to be separate from input.c except that I copied large parts of it from Captain Pork's World of Violence, which needed a far more complex system because of its AI players. And I never got around to changing it. */ #include "allegro.h" #include #include "config.h" #include "globvars.h" #include "stuff.h" #include "bullet.h" #include "cloud.h" #include "actor.h" #include "display.h" #include "sound.h" #include "light.h" #include "palette.h" enum { FIRE_BOTH, FIRE_CANNON_ONLY, FIRE_MISSILE_ONLY }; enum { ASOUND_CANNON, ASOUND_BOMBS, ASOUND_BLAT, ASOUND_TUBE }; #define BOMB_ANGLE_1 128 #define BOMB_ANGLE_2 256 #define BURST_RECYCLE_DELAY 7 #define BURST_RECYCLE_DELAY_CLAWS 2 #define BURST_RECYCLE_DELAY_WORMS 4 enum { PATTERN_TWO_PLUS_OTHERS, // two main secondaries plus other small ones PATTERN_ONE_PLUS_OTHERS, // one main secondary plus other small ones PATTERN_ALL_SAME, // all secondaries the same PATTERN_SIDEWARDS // fire out to sides }; /* WEAPON_WOODEN_DARTS, WEAPON_ICE_DARTS, WEAPON_SILVER_TEETH, WEAPON_SNOW_DARTS, WEAPON_FROZEN_BREATH, WEAPON_BRONZE_DARTS, WEAPON_BRASS_TEETH, WEAPON_CRYSTAL_TEETH, WEAPON_GOLDEN_NEEDLES, WEAPON_PARTICLE_SPITTER, WEAPON_CRYSTAL_SPINES, WEAPON_GOLDEN_TEETH, WEAPON_NUMEROUS_DARTS, WEAPON_NUMEROUS_BLADES, WEAPON_FAR_SPITTER, WEAPON_BURNING_SPIRIT */ int recycle_rates [6] = { /*21, downgraded 27/10/04 17, 14, 12, 10, 9*/ 21, 18, 15, 13, 12, 11 /*, // Darts { 32, 26, 21, 18, 16, 14 }, // Burst { 10, 9, 8, 7, 6, 5 }, // Spines { 32, 26, 21, 18, 16, 15 } // Teeth */ }; /*int recycle_rates [16] [6] = { { 21, 15, 13, 11, 10, 9 }, // Wooden darts { 42, 36, 31, 27, 24, 21 }, // Ice darts { 42, 36, 31, 27, 24, 21 //31, //27, //24, //21, //18, //16 //24, //21, //18, //16, //14, //13 //18, //16, //14, //13, //12, //11 }, // Silver teeth { 31, 27, 24, 21, 18, 16 }, // Snow darts { 42, 36, 31, 27, 24, 21 }, // Frozen Breath { 18, 15, 13, 11, 10, 9 }, // Brass Teeth { 42, 36, 31, 27, 24, 21 }, // Shock Path { 42, 36, 31, 27, 24, 21 }, // Crystal Teeth { 18, 13, 11, 9, 8, 7 }, // Golden Needle { 13, 11, 10, 8, 7, 6 }, // Particle Spitter { 31, 27, 24, 21, 18, 16 }, // Crystal Spines { 18, 18, 16, 14, 13, 12 }, // Golden Path { 42, 36, 31, 27, 24, 21 }, // Numerous Darts { 18, 18, 16, 14, 13, 12 }, // Numerous Blades { 13, 17, 14, 12, 10, 9 }, // Far Spitter { 18, 18, 16, 14, 13, 12 } // Burning Spirit }; */ void actor_thrust(int thractor, int angled); void actor_slide(int thractor, int direction); void actor_turn(int thractor, int direction); void actor_brake(int thractor); void actor_shoot(int sactor, int which_weapon); void make_bcolours(int colours [4], int base_colour); void fire_cannon(int sactor); void fire_secondary(int sactor); void cannon_shot(int sactor, int btype, int damage, int timer, int mass, int angle, int status, int size, int speed, int colours [4], int displaced, int scatter, int speed_div); void fire_missile(int sactor); void secondary_shot(int sactor, int btype, int damage, int timer, int mass, int angle, int status, int size, int speed, int colours [4], int displaced, int scatter, int speed_div, int special1, int special2, int special3, int special4, int special5, int flash_circle); void missile_shot(int sactor, int btype, int damage, int timer, int mass, int angle, int status, int seed, int speed, int colours [4], int displaced, int special5); void fire_bomb(int sactor); void bomb_shot(int sactor, int btype, int damage, int timer, int mass, int angle, int status, int seed, int speed, int colours [4], int displaced); void change_angle_arc(int angles [14], int width); void change_displacement(int displace [7], int type); void exhaust_colours(int level, int passing_colours [5]); void fire_turret(int sactor); void fire_heavy_cannon(int sactor); void fire_backfire(int sactor); void fire_sidekicks(int a); void actor_drive(int a, int level, int distance_x, int distance_y, int angle, int thrust, int doubled); void actor_sound(int a, int sound); void make_drive_sound(int a, int drive); void enact_commands(void) { int i,j; for (i = 0; i < NO_ACTORS; i ++) { if (actor[i].in_play == 0) continue; actor[i].engine_demand = 1; actor[i].dragging = 0; if (actor[i].actor_cmd [CMD_THRUST] == 1) actor[i].engine_demand ++; if (actor[i].actor_cmd [CMD_BRAKE] == 1 && actor[i].upgraded_system [UPG_RETRO] > 0) actor[i].engine_demand ++; if (actor[i].upgraded_system [UPG_SLIDE] > 0) { if (actor[i].actor_cmd [CMD_LEFT1] == 1) actor[i].engine_demand ++; if (actor[i].actor_cmd [CMD_RIGHT1] == 1) actor[i].engine_demand ++; } // this makes sure available engine capacity is split between all active thrusters for (j = NO_CMDS - 1; j >= 0; j --) // reverse order to prevent drive + drag on at same time { if (actor[i].actor_cmd [j] == 1) { switch(j) { case CMD_THRUST: actor_thrust(i, 0); break; case CMD_LEFT: actor_turn(i, -1); break; case CMD_RIGHT: actor_turn(i, 1); break; case CMD_LEFT1: actor_slide(i, -1); break; case CMD_RIGHT1: actor_slide(i, 1); break; case CMD_BRAKE: actor_brake(i); break; case CMD_FIRE1: if (player[actor[i].controller].link_fire == 0) actor_shoot(i, FIRE_CANNON_ONLY); else actor_shoot(i, FIRE_BOTH); break; case CMD_FIRE2: actor_shoot(i, FIRE_MISSILE_ONLY); break; // case CMD_UPGRADE: // actor_upgrade(i); // break; } /* enum { CMD_THRUST, CMD_LEFT, CMD_RIGHT, CMD_SYSTEM1, CMD_SYSTEM2, CMD_SYSTEM3, CMD_BRAKE, CMD_LEFT1, CMD_RIGHT1, CMD_LEFT2, CMD_RIGHT2, CMD_CHARGE_SHIELD }; */ } actor[i].actor_cmd [j] = 0; } } } void actor_slide(int thractor, int direction) { // if (actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_CROSS] == 0) // return; // int x_accel = cos(angle_to_radians(actor[thractor].angle) + (PI / 2) * direction) * actor[thractor].slide; // int y_accel = sin(angle_to_radians(actor[thractor].angle) + (PI / 2) * direction) * actor[thractor].slide; /* int x_accel = cos(angle_to_radians(actor[thractor].angle) + PI / 4 + (PI / 2) * direction) * actor[thractor].slide; int y_accel = sin(angle_to_radians(actor[thractor].angle) + PI / 4 + (PI / 2) * direction) * actor[thractor].slide; actor[thractor].x_speed += x_accel; actor[thractor].y_speed += y_accel; int passing_colours [5]; exhaust_colours(actor[thractor].upgraded_system [UPG_SLIDE - 1], passing_colours); create_cloud(CLOUD_SPECK, actor[thractor].x,// - (actor[thractor].x_speed - x_accel * 10), actor[thractor].y,// - (actor[thractor].y_speed - y_accel * 10), 0, 0, actor[thractor].x_speed - x_accel * 20 + (100 - grand(201)), actor[thractor].y_speed - y_accel * 20 + (100 - grand(201)), 10 + grand(11),1,0, 0, 0, 0, passing_colours); */ // int passing_colours [5]; // int thrust_amount = 72; // thrust_amount += actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_CROSS] * 13; // thrust_amount /= actor[thractor].engine_demand; // actor_drive(thractor, actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_CROSS] - 1, actor[thractor].slide_distance_x, actor[thractor].slide_distance_y, actor[thractor].angle + ANGLE_QUARTER + ANGLE_QUARTER * direction, thrust_amount, 0); // actor_sound(thractor, 2); // make_drive_sound(thractor, DRIVE_SLIDE); /* float xcos = cos(angle_to_radians(actor[thractor].angle) + (PI / 2) + (PI/2) * direction); float ysin = sin(angle_to_radians(actor[thractor].angle) + (PI / 2) + (PI/2) * direction); int x_accel = xcos * thrust_amount / actor[thractor].engine_demand; int y_accel = ysin * thrust_amount / actor[thractor].engine_demand; actor[thractor].x_speed -= x_accel; actor[thractor].y_speed -= y_accel; exhaust_colours(actor[thractor].upgraded_system [UPG_SLIDE] - 1, passing_colours); create_cloud(CLOUD_SPECK, actor[thractor].x + xcos * 5 * GRAIN,// - (actor[thractor].x_speed - x_accel * 10), actor[thractor].y + ysin * 3 * GRAIN,// - (actor[thractor].y_speed - y_accel * 10), 0, 0, // actor[thractor].x_speed - x_accel * 20 + (100 - grand(201)), // actor[thractor].y_speed - y_accel * 20 + (100 - grand(201)), actor[thractor].x_speed + x_accel * 20 + (300 - grand(601)), actor[thractor].y_speed + y_accel * 20 + (300 - grand(601)), 10 + grand(11),1,0, 0, 0, 0, passing_colours); */ } void actor_brake(int thractor) { // int passing_colours [5]; if (actor[thractor].ship == SHIP_RETRO) { // int passing_colours [5]; /* int thrust_amount = 72; thrust_amount += actor[thractor].upgraded_system [UPG_RETRO] * 13; thrust_amount /= actor[thractor].engine_demand; // level 1 retro gives same thrust as level 0 speed; l2->1, etc actor_drive(thractor, actor[thractor].upgraded_system [UPG_RETRO] - 1, actor[thractor].retro_distance_x, actor[thractor].retro_distance_y, actor[thractor].angle - ANGLE_QUARTER, thrust_amount, 0); make_drive_sound(thractor, DRIVE_RETRO); return;*/ actor_thrust(thractor, ANGLE_HALF); return; } // else must be drag field... actor[thractor].dragging = 20; } void actor_thrust(int thractor, int angled) { int thrust_amount = 170; thrust_amount += actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] * 4 + actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_TRIANGLE] * 4 + actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] * actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] * 7 + actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_TRIANGLE] * actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_TRIANGLE] * 2; if (actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] == 0) thrust_amount += 20; if (actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] == 1) thrust_amount -= 2; /* thrust_amount += actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] * 5 + actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_TRIANGLE] * 5 + actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] * actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] * 9 + actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_TRIANGLE] * actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_TRIANGLE] * 2; */ thrust_amount /= 2; // actor[thractor].engine_demand; if (angled == 0) actor_drive(thractor, actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE], actor[thractor].exhaust_distance_x, actor[thractor].exhaust_distance_y, actor[thractor].angle + ANGLE_QUARTER + angled, thrust_amount, angled); else actor_drive(thractor, actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE], actor[thractor].exhaust_distance_x + 2, actor[thractor].exhaust_distance_y + 2, actor[thractor].angle + ANGLE_QUARTER + angled, thrust_amount, angled); actor[thractor].dragging = actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] * 2; // 2 make_drive_sound(thractor, DRIVE_THRUST); } /* void actor_thrust(int thractor, int angled) { int thrust_amount = 170; // 120 thrust_amount += actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] * 16 // 22 + actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] * actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] * 9; // 10 // 8 thrust_amount /= 2; // actor[thractor].engine_demand; if (angled == 0) actor_drive(thractor, actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE], actor[thractor].exhaust_distance_x, actor[thractor].exhaust_distance_y, actor[thractor].angle + ANGLE_QUARTER + angled, thrust_amount, angled); else actor_drive(thractor, actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE], actor[thractor].exhaust_distance_x + 2, actor[thractor].exhaust_distance_y + 2, actor[thractor].angle + ANGLE_QUARTER + angled, thrust_amount, angled); actor[thractor].dragging = actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] * 2; make_drive_sound(thractor, DRIVE_THRUST); } */ // need to already have factored engine demand into thrust void actor_drive(int a, int level, int distance_x, int distance_y, int angle, int thrust, int doubled) { // int passing_colours [5] = {TRANS_YELLOW,TRANS_ORANGE,TRANS_LRED,TRANS_DRED, TRANS_DGREY}; int passing_colours [5] = {TRANS_ORANGE,TRANS_LRED,TRANS_LRED,TRANS_DRED, TRANS_DGREY}; int passing_colours2 [5] = {TRANS_YELLOW,TRANS_YELLOW,TRANS_YELLOW,TRANS_YELLOW, TRANS_YELLOW}; if (actor[a].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] > 1) passing_colours [1] = TRANS_ORANGE; if (actor[a].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] > 3) passing_colours2 [0] = TRANS_WHITE; int base_size = 23 + actor[a].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] * 2; int x_accel = xpart(angle, thrust); int y_accel = ypart(angle, thrust); int exhx, exhy; actor[a].x_speed -= x_accel; actor[a].y_speed -= y_accel; // float xcos2, ysin2; int displace = 0; int i, j, k = 1, xs, ys, shrink = 2; actor[a].thrust = 7; if (doubled == 0) { switch(actor[a].ship) { case SHIP_ROUND: displace = ANGLE_1_SIXTEENTH; k = 2; shrink = 1; actor[a].thrust = 3; base_size = 15 + actor[a].ability [ABILITY_DRIVE] [SYMBOL_SQUARE]; break; case SHIP_RETRO: displace = ANGLE_1_32 + 8; k = 2; shrink = 1; actor[a].thrust = 3; base_size = 15 + actor[a].ability [ABILITY_DRIVE] [SYMBOL_SQUARE]; break; } } for (j = 0; j < k; j ++) { if (displace == 0) { exhx = actor[a].x + xpart(angle, distance_x * GRAIN) - 1000; exhy = actor[a].y + ypart(angle, distance_y * GRAIN) - 1000; } else { if (j == 0) { exhx = actor[a].x + xpart(angle + ANGLE_1_EIGHTH - displace, distance_x * GRAIN) - 1000; exhy = actor[a].y + ypart(angle + ANGLE_1_EIGHTH - displace, distance_y * GRAIN) - 1000; } else { exhx = actor[a].x + xpart(angle - ANGLE_1_EIGHTH + displace, distance_x * GRAIN) - 1000; exhy = actor[a].y + ypart(angle - ANGLE_1_EIGHTH + displace, distance_y * GRAIN) - 1000; } } add_light(LIGHT_NORMAL, 10 + grand(5), exhx + actor[a].x_speed, exhy + actor[a].y_speed); for (i = 0; i < 2; i ++) { xs = x_accel * (15 + grand(5)) + (600 - grand(1201)); ys = y_accel * (15 + grand(5)) + (600 - grand(1201)); create_cloud(CLOUD_DRIVE_CIRCLE, exhx + grand(3001) - 1500 - xs, exhy + grand(3001) - 1500 - ys, 0, 0, xs + actor[a].x_speed, ys + actor[a].y_speed, base_size + grand(11),shrink + 2,1, 0, 0, 0, passing_colours2); create_cloud(CLOUD_DRIVE_CIRCLE, //TRANS_FADING_CIRCLE, exhx + grand(3001) - 1500 - xs, exhy + grand(3001) - 1500 - ys, 0, 0, xs + actor[a].x_speed, ys + actor[a].y_speed, base_size + grand(11),shrink,0, 0, 0, 0, passing_colours); } } } /* void exhaust_colours(int level, int passing_colours [5]) { switch(level) { default: case 0: passing_colours [0] = COLOUR_YELLOW8; passing_colours [1] = COLOUR_RED8; passing_colours [2] = COLOUR_RED6; passing_colours [3] = COLOUR_RED4; passing_colours [4] = COLOUR_RED3; break; case 1: passing_colours [0] = COLOUR_YELLOW8; passing_colours [1] = COLOUR_ORANGE8; passing_colours [2] = COLOUR_ORANGE6; passing_colours [3] = COLOUR_ORANGE4; passing_colours [4] = COLOUR_ORANGE3; break; case 2: passing_colours [0] = COLOUR_YELLOW8; passing_colours [1] = COLOUR_YELLOW6; passing_colours [2] = COLOUR_YELLOW4; passing_colours [3] = COLOUR_YELLOW3; passing_colours [4] = COLOUR_YELLOW2; break; case 3: passing_colours [0] = COLOUR_YELLOW8; passing_colours [1] = COLOUR_GREEN8; passing_colours [2] = COLOUR_GREEN6; passing_colours [3] = COLOUR_GREEN4; passing_colours [4] = COLOUR_GREEN2; break; case 4: passing_colours [0] = COLOUR_BLUE8; passing_colours [1] = COLOUR_BLUE6; passing_colours [2] = COLOUR_BLUE4; passing_colours [3] = COLOUR_BLUE3; passing_colours [4] = COLOUR_BLUE2; break; case 5: passing_colours [0] = COLOUR_WHITE; passing_colours [1] = COLOUR_BLUE8; passing_colours [2] = COLOUR_BLUE6; passing_colours [3] = COLOUR_BLUE4; passing_colours [4] = COLOUR_BLUE3; break; } } */ void actor_turn(int thractor, int direction) { int turned = 100; // 85 turned += actor[thractor].ability [ABILITY_DRIVE] [SYMBOL_CIRCLE] * 15; // 12 int target_angle = turned * direction; /* if (actor[thractor].base_angle + target_angle < 0) actor[thractor].base_angle += 10240; else { if (actor[thractor].base_angle + target_angle > 10240) actor[thractor].base_angle -= 10240; }*/ actor[thractor].base_angle += target_angle; if (actor[thractor].base_angle < 0) actor[thractor].base_angle += 10240; else { if (actor[thractor].base_angle > 10240) actor[thractor].base_angle -= 10240; } actor[thractor].angle = (actor[thractor].base_angle / 10) % 1024; } void actor_shoot(int sactor, int which_weapon) { int recycled = 15; if (actor[sactor].recycle1 == 0 && (which_weapon == FIRE_BOTH || which_weapon == FIRE_CANNON_ONLY)) { fire_cannon(sactor); } if (actor[sactor].secondary != SECOND_NONE && actor[sactor].recycle2 == 0 && (which_weapon == FIRE_BOTH || which_weapon == FIRE_MISSILE_ONLY)) { fire_secondary(sactor); recycled = 140; // 66 if (actor[sactor].ship == SHIP_HORSESHOE) recycled = 90; // 40 actor[sactor].recycle2 += recycled; } /* if (which_weapon == FIRE_BOTH || which_weapon == FIRE_CANNON_ONLY) { if (actor[sactor].upgraded_system [UPG_TURRET] > 0 && actor[sactor].turret_recycle == 0) { fire_turret(sactor); recycled = 12; if (actor[sactor].upgraded_system [UPG_TURRET] == 2) recycled = 11; if (actor[sactor].upgraded_system [UPG_TURRET] == 3) recycled = 10; if (actor[sactor].upgraded_system [UPG_TURRET] == 4) recycled = 9; if (actor[sactor].upgraded_system [UPG_TURRET] == 5) recycled = 8; actor[sactor].turret_recycle += recycled; } if (actor[sactor].upgraded_system [UPG_HEAVY] > 0 && actor[sactor].heavy_recycle == 0) { fire_heavy_cannon(sactor); recycled = 25; if (actor[sactor].upgraded_system [UPG_HEAVY] == 2) recycled = 20; if (actor[sactor].upgraded_system [UPG_HEAVY] == 3) recycled = 17; if (actor[sactor].upgraded_system [UPG_HEAVY] == 4) recycled = 14; if (actor[sactor].upgraded_system [UPG_HEAVY] == 5) recycled = 12; actor[sactor].heavy_recycle += recycled; } if (actor[sactor].upgraded_system [UPG_BACKFIRE] > 0 && actor[sactor].backfire_recycle == 0) { fire_backfire(sactor); recycled = 11; if (actor[sactor].upgraded_system [UPG_BACKFIRE] == 2) recycled = 10; if (actor[sactor].upgraded_system [UPG_BACKFIRE] == 3) recycled = 9; if (actor[sactor].upgraded_system [UPG_BACKFIRE] == 4) recycled = 8; if (actor[sactor].upgraded_system [UPG_BACKFIRE] == 5) recycled = 7; actor[sactor].backfire_recycle += recycled; } if (actor[sactor].upgraded_system [UPG_SIDEKICK] > 0 && actor[sactor].sidekick_recycle == 0) { fire_sidekicks(sactor); recycled = 14; if (actor[sactor].upgraded_system [UPG_SIDEKICK] == 2) recycled = 13; if (actor[sactor].upgraded_system [UPG_SIDEKICK] == 3) recycled = 12; if (actor[sactor].upgraded_system [UPG_SIDEKICK] == 4) recycled = 11; if (actor[sactor].upgraded_system [UPG_SIDEKICK] == 5) recycled = 10; actor[sactor].sidekick_recycle += recycled; } } */ } void continue_secondary_burst(int a) { if (actor[a].secondary_burst_recycle == 0) { fire_secondary(a); actor[a].secondary_burst --; if (actor[a].secondary_burst == 1) { actor[a].secondary_burst = 0; return; } actor[a].secondary_burst_recycle = BURST_RECYCLE_DELAY; if (actor[a].secondary == SECOND_CLAWS) actor[a].secondary_burst_recycle = BURST_RECYCLE_DELAY_CLAWS; if (actor[a].secondary == SECOND_WORMS_AGONY) actor[a].secondary_burst_recycle = BURST_RECYCLE_DELAY_WORMS; } else actor[a].secondary_burst_recycle --; } void make_bcolours(int colours [4], int base_colour) { switch(base_colour) { default: colours [0] = base_colour; colours [1] = base_colour - 1; // 2 colours [2] = base_colour - 3; // 4 colours [3] = base_colour - 5; // 5 break; case TRANS_LBLUE: colours [0] = COLOUR_BLUE5; colours [1] = COLOUR_BLUE6; colours [2] = COLOUR_BLUE7; colours [3] = COLOUR_WHITE; break; case TRANS_DBLUE: colours [0] = COLOUR_BLUE4; colours [1] = COLOUR_BLUE5; colours [2] = COLOUR_BLUE6; colours [3] = COLOUR_BLUE7; break; case TRANS_YELLOW: colours [0] = COLOUR_YELLOW3; colours [1] = COLOUR_YELLOW5; colours [2] = COLOUR_YELLOW7; colours [3] = COLOUR_WHITE; break; case TRANS_ORANGE: colours [0] = COLOUR_YELLOW2; colours [1] = COLOUR_YELLOW3; colours [2] = COLOUR_YELLOW5; colours [3] = COLOUR_YELLOW7; break; } } void fire_cannon(int sactor) { // int colours [4]; int bcolours1 [4] = {COLOUR_WHITE, COLOUR_WHITE, COLOUR_WHITE, COLOUR_WHITE}; int bcolours2 [4] = {COLOUR_WHITE, COLOUR_WHITE, COLOUR_WHITE, COLOUR_WHITE}; int btype [2] = {BULLET_ZAP, BULLET_ZAP}; int damage [2] = {0, 0}; int timer [2] = {8, 8}; //= 20 - actor[sactor].upgraded_system [UPG_PROJECT] * 2; int mass [2] = {10, 10}; // int status = 0; int speed [2] = {10000, 10000};//= 16000; int rand_speed [2] = {0, 0}; int speed_div [2] = {5, 5}; int angles [7] = {0, 0, ANGLE_1_SIXTEENTH, -ANGLE_1_SIXTEENTH, ANGLE_1_EIGHTH, -ANGLE_1_EIGHTH, 0}; // int angles [7] = {0, 0, ANGLE_1_SIXTEENTH, -ANGLE_1_SIXTEENTH, ANGLE_1_EIGHTH, -ANGLE_1_EIGHTH, ANGLE_HALF}; // int angles [7] = {0, 0, 0, 0, 0, 0, ANGLE_HALF}; int rand_angle = 0; // unsigned char seed = counter; // int displace [7] = {-4, 4, 1, -1, 7, -7, 0}; int displace [7] = {-4, 4, 2, -2, 6, -6, 0}; // int displaced = 0; int number = 0; int rand_timer [2] = {0, 0}; int scatter [2] = {0, 0}; int size = 0; // actor[sactor].recycle1 = recycle_rates [actor[sactor].primary] [actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_SQUARE]]; // actor[sactor].recycle1 = recycle_rates [actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_SQUARE]]; switch(actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_SQUARE]) { default: case 0: actor[sactor].recycle1 = 21; break; // 21 case 1: actor[sactor].recycle1 = 18; break; // 17 case 2: actor[sactor].recycle1 = 15; break; // 14 case 3: actor[sactor].recycle1 = 13; break; // 12 case 4: actor[sactor].recycle1 = 12; break; // 10 case 5: actor[sactor].recycle1 = 11; break; // 9 } switch(actor[sactor].primary) { /* case WEAPON_SNOW_DARTS: btype [0] = BULLET_SNOW_DART; btype [1] = BULLET_SNOW_DART_SMALL; damage [0] = 80 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 30; damage [1] = 60 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 15; speed [0] = 25000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 4000; speed [1] = 20000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3200; timer [0] = 18 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3; timer [1] = 15 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3; rand_timer [0] = 2; rand_timer [1] = 2; mass [0] = 100; mass [1] = 100; scatter [0] = 0; scatter [1] = 0; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; break; case WEAPON_SILVER_TEETH: btype [0] = BULLET_SILVER_TOOTH; btype [1] = BULLET_SILVER_TOOTH; damage [0] = 70 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 20; damage [1] = 50 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 12; speed [0] = 23000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3100; speed [1] = 21000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2600; speed_div [0] = 2;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 3;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; make_bcolours(bcolours1, COLOUR_WHITE); make_bcolours(bcolours2, COLOUR_GREY6); timer [0] = 13 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; timer [1] = 12 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; rand_timer [0] = 3; rand_timer [1] = 3; mass [0] = 80; mass [1] = 80; scatter [0] = 0; scatter [1] = 0; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; break; case WEAPON_ICE_DARTS: btype [0] = BULLET_ICE_DART; btype [1] = BULLET_ICE_DART_SMALL; damage [0] = 70 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 20; damage [1] = 50 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 12; speed [0] = 25000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 4000; speed [1] = 20000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3200; timer [0] = 18 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3; timer [1] = 15 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3; rand_timer [0] = 2; rand_timer [1] = 2; mass [0] = 100; mass [1] = 100; scatter [0] = 0; scatter [1] = 0; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; break; case WEAPON_FROZEN_BREATH: btype [0] = BULLET_FROZEN_BREATH; btype [1] = BULLET_FROZEN_BREATH; damage [0] = 60 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 15; damage [1] = 60 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 15; speed [0] = 22000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3200; speed [1] = 22000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3200; timer [0] = 17 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3; timer [1] = 17 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3; rand_timer [0] = 4; rand_timer [1] = 4; mass [0] = 150; mass [1] = 150; scatter [0] = 5; scatter [1] = 5; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; change_angle_arc(angles, ANGLE_HALF); break; case WEAPON_CRYSTAL_TEETH: btype [0] = BULLET_CRYSTAL_TOOTH; btype [1] = BULLET_CRYSTAL_TOOTH; damage [0] = 20 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 7; damage [1] = 20 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 7; speed [0] = 17000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2800; speed [1] = 17000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2800; rand_speed [0] = 8000; rand_speed [1] = 8000; speed_div [0] = 2;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 2;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; make_bcolours(bcolours1, COLOUR_GREY6); make_bcolours(bcolours2, COLOUR_GREY6); timer [0] = 13 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; timer [1] = 13 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; rand_timer [0] = 3; rand_timer [1] = 3; mass [0] = 30; mass [1] = 30; scatter [0] = 15 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 3; scatter [1] = 15 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 3; number = 4 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 2; rand_angle = 1; break; case WEAPON_GOLDEN_NEEDLES: btype [0] = BULLET_GOLDEN_NEEDLE; btype [1] = BULLET_GOLDEN_NEEDLE_SMALL; damage [0] = 30 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 10; damage [1] = 20 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 5; speed [0] = 17000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2600; speed [1] = 15000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2300; speed_div [0] = 2 - actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 3 - actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; // bcolours1 [0] = COLOUR_YELLOW8; // bcolours2 [0] = COLOUR_YELLOW6; make_bcolours(bcolours1, COLOUR_YELLOW8); make_bcolours(bcolours2, COLOUR_YELLOW6); timer [0] = 15 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; timer [1] = 13 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; rand_timer [0] = 3; rand_timer [1] = 3; mass [0] = 30; mass [1] = 30; scatter [0] = 3 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; scatter [1] = 5 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 2; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; // rand_angle = 1; break; case WEAPON_PARTICLE_SPITTER: btype [0] = BULLET_PARTICLE_SPITTER; btype [1] = BULLET_PARTICLE_SPITTER; damage [0] = 10 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 5; damage [1] = 10 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 5; speed [0] = 9000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 1000; speed [1] = 9000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 1000; rand_speed [0] = 4000; rand_speed [1] = 4000; speed_div [0] = 2;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 3;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; bcolours1 [0] = COLOUR_GREEN5; bcolours2 [1] = COLOUR_GREEN5; timer [0] = 15 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; timer [1] = 15 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; rand_timer [0] = 6; rand_timer [1] = 6; mass [0] = 20; mass [1] = 20; scatter [0] = 70 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 10; scatter [1] = 70 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 10; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; rand_angle = 1; break; case WEAPON_CRYSTAL_SPINES: btype [0] = BULLET_CRYSTAL_SPINE; btype [1] = BULLET_CRYSTAL_SPINE; damage [0] = 50 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 15; damage [1] = 50 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 15; speed [0] = 21000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2600; speed [1] = 21000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2600; speed_div [0] = 1;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 1;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; make_bcolours(bcolours1, COLOUR_GREY6); make_bcolours(bcolours2, COLOUR_GREY6); timer [0] = 13 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; timer [1] = 13 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; rand_timer [0] = 3; rand_timer [1] = 3; mass [0] = 80; mass [1] = 80; scatter [0] = 0; scatter [1] = 0; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; break; case WEAPON_FAR_SPITTER: btype [0] = BULLET_FAR_SPITTER; btype [1] = BULLET_FAR_SPITTER; damage [0] = 4 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2; damage [1] = 4 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2; speed [0] = 12000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 1500; speed [1] = 12000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 1500; rand_speed [0] = 9000; rand_speed [1] = 9000; speed_div [0] = 2;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 3;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; bcolours1 [0] = COLOUR_YELLOW5; bcolours2 [1] = COLOUR_YELLOW5; timer [0] = 25 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2; timer [1] = 25 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2; rand_timer [0] = 6; rand_timer [1] = 6; mass [0] = 20; mass [1] = 20; scatter [0] = 30 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 5; scatter [1] = 30 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 5; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; rand_angle = 1; break; case WEAPON_NUMEROUS_BLADES: btype [0] = BULLET_NUMEROUS_BLADE; btype [1] = BULLET_NUMEROUS_BLADE; damage [0] = 30 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 15; damage [1] = 30 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 15; speed [0] = 15000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 1000; speed [1] = 15000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 1000; rand_speed [0] = 4000; rand_speed [1] = 4000; // speed_div [0] = 2;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; // speed_div [1] = 3;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; bcolours1 [0] = COLOUR_WHITE; bcolours2 [1] = COLOUR_WHITE; timer [0] = 30 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3; timer [1] = 30 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3; rand_timer [0] = 6; rand_timer [1] = 6; mass [0] = 40; mass [1] = 40; scatter [0] = 6 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 2; scatter [1] = 6 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 2; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; // rand_angle = 1; break; case WEAPON_NUMEROUS_DARTS: btype [0] = BULLET_NUMEROUS_DART; btype [1] = BULLET_NUMEROUS_DART; damage [0] = 30 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 10; damage [1] = 30 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 10; speed [0] = 16000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2500; speed [1] = 16000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2500; rand_speed [0] = 8000; rand_speed [1] = 8000; speed_div [0] = 2;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 2;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; make_bcolours(bcolours1, COLOUR_ORANGE8); make_bcolours(bcolours2, COLOUR_ORANGE8); timer [0] = 12 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; timer [1] = 12 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; rand_timer [0] = 3; rand_timer [1] = 3; mass [0] = 30; mass [1] = 30; scatter [0] = 75 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 11; scatter [1] = 75 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 11; number = 4 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 2; rand_angle = 1; break; case WEAPON_BRASS_TEETH: btype [0] = BULLET_BRASS_TOOTH; btype [1] = BULLET_BRASS_TOOTH_SMALL; damage [0] = 30 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 10; damage [1] = 20 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 5; speed [0] = 21000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2900; speed [1] = 18000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2500; speed_div [0] = 1;// - actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 2 - actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; // bcolours1 [0] = COLOUR_YELLOW8; // bcolours2 [0] = COLOUR_YELLOW6; make_bcolours(bcolours1, COLOUR_YELLOW7); make_bcolours(bcolours2, COLOUR_YELLOW6); timer [0] = 16 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; timer [1] = 14 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; rand_timer [0] = 3; rand_timer [1] = 3; mass [0] = 30; mass [1] = 30; scatter [0] = 3 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; scatter [1] = 5 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 2; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; // rand_angle = 1; change_angle_arc(angles, ANGLE_1_SIXTEENTH); break; case WEAPON_SHOCK_PATH: btype [0] = BULLET_SHOCK_PATH; btype [1] = BULLET_SHOCK_PATH_SMALL; damage [0] = 70 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 20; damage [1] = 50 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 12; speed [0] = 26000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3400; speed [1] = 23000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2900; speed_div [0] = 2;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 3;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; make_bcolours(bcolours1, TRANS_LBLUE); make_bcolours(bcolours2, TRANS_DBLUE); timer [0] = 12 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2; timer [1] = 11 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2; rand_timer [0] = 3; rand_timer [1] = 3; mass [0] = 80; mass [1] = 80; scatter [0] = 0; scatter [1] = 0; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; change_angle_arc(angles, ANGLE_1_SIXTEENTH); break; case WEAPON_GOLDEN_PATH: btype [0] = BULLET_GOLDEN_PATH; btype [1] = BULLET_GOLDEN_PATH_SMALL; damage [0] = 70 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 20; damage [1] = 50 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 12; speed [0] = 26000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 3400; speed [1] = 23000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2900; speed_div [0] = 2;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 3;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; make_bcolours(bcolours1, TRANS_YELLOW); make_bcolours(bcolours2, TRANS_ORANGE); timer [0] = 12 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2; timer [1] = 11 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2; rand_timer [0] = 3; rand_timer [1] = 3; mass [0] = 80; mass [1] = 80; scatter [0] = 0; scatter [1] = 0; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; // change_angle_arc(angles, ANGLE_1_SIXTEENTH); break; case WEAPON_BURNING_SPIRIT: btype [0] = BULLET_BURNING_SPIRIT; btype [1] = BULLET_BURNING_SPIRIT; damage [0] = 60 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 20; damage [1] = 60 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 20; speed [0] = 13000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2000; speed [1] = 13000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2000; speed_div [0] = 3;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 3;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; make_bcolours(bcolours1, TRANS_YELLOW); make_bcolours(bcolours2, TRANS_ORANGE); timer [0] = 12 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2; timer [1] = 12 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2; rand_timer [0] = 3; rand_timer [1] = 3; mass [0] = 80; mass [1] = 80; scatter [0] = 0; scatter [1] = 0; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; // change_angle_arc(angles, ANGLE_HALF); break; */ //Tr + Cr: Crystal teeth - long-range scattergun //Ci: Golden Needles - fast, single shot, some scattering //Ci + Cr: Particle Spitter /* None: Wooden darts Sq: Ice darts - slow, powerful, drag-affected Sq + Tr: Silver teeth - slow recycle, long-range, powerful, no drag Sq + Ci: Snow darts - like ice darts - trail blue sparks - faster recycle Sq + Cr: Frozen breath - short-range arc; reaches 180 degrees? Tr: Shock Path - fast-moving, slow recycle Tr + Ci: Brass teeth - slightly scattered; like Lacewing (ship) cannon Tr + Cr: Crystal teeth - long-range scattergun Ci: Golden Needles - fast, single shot, some scattering Ci + Cr: Particle Spitter Cr: Crystal Spines - like Aether Squid Sq + Tr + Ci: Golden Path Sq + Tr + Cr: Numerous Darts Sq + Ci + Cr: Numerous Blades Tr + Ci + Cr: Far Spitter All: Burning Spirit */ default: case WPN_DARTS: btype [0] = BULLET_ZAP; btype [1] = BULLET_ZAP; damage [0] = 60 + (actor[sactor].ship == SHIP_POINTY) * 16;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 20; damage [1] = 30 + (actor[sactor].ship == SHIP_POINTY) * 8;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 10; // speed [0] = 17000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2000; // speed [1] = 15000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 1900; speed [0] = 17000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2300; speed [1] = 15000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2200; speed_div [0] = 2; // smaller as triangle increases speed_div [1] = 2; // displace [0] = -1; // displace [1] = 1; // displace [2] = 0; if (actor[sactor].ship == SHIP_POINTY) { make_bcolours(bcolours1, COLOUR_WHITE); make_bcolours(bcolours2, COLOUR_GREY6); } else { make_bcolours(bcolours1, COLOUR_YELLOW8); make_bcolours(bcolours2, COLOUR_YELLOW7); } // timer [0] = 15; // timer [1] = 14; timer [0] = 16; timer [1] = 15; rand_timer [0] = 3; rand_timer [1] = 2; mass [0] = 10; mass [1] = 10; scatter [0] = 0; scatter [1] = 0; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CIRCLE]; break; /* REMEMBER: Pointy ship does extra damage. case WPN_BURST: btype [0] = BULLET_CRYSTAL_SPINE; btype [1] = BULLET_CRYSTAL_SPINE; damage [0] = 50;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 10; damage [1] = 50;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 10; speed [0] = 16000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2500; speed [1] = 16000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2500; rand_speed [0] = 8000; rand_speed [1] = 8000; speed_div [0] = 2;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 2;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; make_bcolours(bcolours1, COLOUR_WHITE); make_bcolours(bcolours2, COLOUR_WHITE); timer [0] = 12 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; timer [1] = 12 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; rand_timer [0] = 3; rand_timer [1] = 3; mass [0] = 10; mass [1] = 10; scatter [0] = 75 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CIRCLE] * 11; scatter [1] = 75 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CIRCLE] * 11; number = 4 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CIRCLE] * 2; rand_angle = 1; break; case WPN_TEETH: btype [0] = BULLET_BRASS_TOOTH; btype [1] = BULLET_BRASS_TOOTH_SMALL; damage [0] = 60;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 10; damage [1] = 40;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 5; speed [0] = 21000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2900; speed [1] = 18000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2500; speed_div [0] = 1;// - actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 2;// - actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; // bcolours1 [0] = COLOUR_YELLOW8; // bcolours2 [0] = COLOUR_YELLOW6; make_bcolours(bcolours1, COLOUR_YELLOW8); make_bcolours(bcolours2, COLOUR_YELLOW7); timer [0] = 16 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; timer [1] = 14 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; rand_timer [0] = 3; rand_timer [1] = 3; mass [0] = 10; mass [1] = 10; scatter [0] = 3 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS]; scatter [1] = 5 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CROSS] * 2; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CIRCLE]; // rand_angle = 1; change_angle_arc(angles, ANGLE_1_SIXTEENTH); change_displacement(displace, 0); break; case WPN_SPINES: btype [0] = BULLET_GOLDEN_NEEDLE; btype [1] = BULLET_GOLDEN_NEEDLE_SMALL; damage [0] = 60;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 10; damage [1] = 40;// + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 5; speed [0] = 17000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2600; speed [1] = 15000 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] * 2300; speed_div [0] = 2;// - actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; speed_div [1] = 2;// - actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE] / 3; // bcolours1 [0] = COLOUR_YELLOW8; // bcolours2 [0] = COLOUR_YELLOW6; make_bcolours(bcolours1, COLOUR_YELLOW8); make_bcolours(bcolours2, COLOUR_YELLOW6); timer [0] = 15 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; timer [1] = 13 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_TRIANGLE]; rand_timer [0] = 3; rand_timer [1] = 3; mass [0] = 10; mass [1] = 10; scatter [0] = 3 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CIRCLE]; scatter [1] = 5 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CIRCLE] * 2; number = 2 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_CIRCLE]; // rand_angle = 1; change_angle_arc(angles, -1); change_displacement(displace, 0); break;*/ } int i; int j = 0; int l = 0; int shot_angle; int k = 0; int firing_angle = actor[sactor].angle; /* if (actor[sactor].cannon_status == 0) { actor[sactor].cannon_status ++; shot_angle = 1; } else { actor[sactor].cannon_status = 0; shot_angle = -1; } */ if ((actor[sactor].cannon_status % 2) == 0) { shot_angle = 1; } else { shot_angle = -1; } actor[sactor].cannon_status ++; if (actor[sactor].cannon_status == 4) actor[sactor].cannon_status = 0; for (k = 0; k < 1 + (actor[sactor].ship == SHIP_FINS); k ++) { if (k == 1) { /* if (actor[sactor].cannon_status / 2 == 0) shot_angle = 1; else shot_angle = -1; // actor[sactor].cannon_status ++; if (actor[sactor].cannon_status == 4) actor[sactor].cannon_status = 0; */ // duplicates spines code, so the two shouldn't be combined firing_angle += ANGLE_HALF; // number /= 2; // j = 0; l = 0; j = 0;//1; } /* if (actor[sactor].primary == WPN_SPINES) { if (actor[sactor].cannon_status / 2 == 0) shot_angle = 1; else shot_angle = -1; actor[sactor].cannon_status ++; if (actor[sactor].cannon_status == 4) actor[sactor].cannon_status = 0; } else*/ // { // } for (i = 0; i < number; i ++) { if (i == 1) l = 1; if (i == 2) { j = 1; l = 2; } // colours [0] = bcolours [j]; // if (k == 1) // ie backfire from finny ship // { // if (i % 2 != actor[sactor].cannon_status % 2) // continue; // } if (rand_angle == 1) { cannon_shot(sactor, btype [j], damage [j], timer [j] + grand(rand_timer [j]), mass [j], firing_angle, 0, size, speed [j] + grand(rand_speed [j]), bcolours1, displace [i], scatter [j], speed_div [j]); } else { if (j == 0) cannon_shot(sactor, btype [j], damage [j], timer [j] + grand(rand_timer [j]), mass [j], firing_angle + (angles [i] * shot_angle), 0, size, speed [j] + grand(rand_speed [j]), bcolours1, displace [i] * shot_angle, scatter [j], speed_div [j]); else cannon_shot(sactor, btype [j], damage [j], timer [j] + grand(rand_timer [j]), mass [j], firing_angle + (angles [i] * shot_angle), 0, size, speed [j] + grand(rand_speed [j]), bcolours2, displace [i] * shot_angle, scatter [j], speed_div [j]); } } // end for i } // end for k // actor_sound(sactor, ASOUND_CANNON); play_wavf(NWAV_DART, 800 + actor[sactor].ability [ABILITY_PRIMARY] [SYMBOL_SQUARE] * 80); } void change_angle_arc(int angles [14], int width) { switch(width) { case ANGLE_HALF: angles [2] = ANGLE_1_EIGHTH; angles [3] = -ANGLE_1_EIGHTH; angles [4] = ANGLE_QUARTER; angles [5] = -ANGLE_QUARTER; angles [6] = ANGLE_HALF; break; case ANGLE_1_SIXTEENTH: angles [2] = ANGLE_1_32; angles [3] = -ANGLE_1_32; angles [4] = ANGLE_1_SIXTEENTH; angles [5] = -ANGLE_1_SIXTEENTH; angles [6] = ANGLE_HALF; break; case -1: angles [2] = ANGLE_1_SIXTEENTH; angles [3] = ANGLE_1_EIGHTH; angles [4] = -ANGLE_1_EIGHTH; angles [5] = -ANGLE_1_SIXTEENTH; angles [6] = ANGLE_HALF; break; case -2: angles [0] = ANGLE_HALF - ANGLE_1_SIXTEENTH; angles [1] = ANGLE_HALF + ANGLE_1_SIXTEENTH; angles [2] = ANGLE_HALF - ANGLE_1_EIGHTH; angles [3] = ANGLE_HALF + ANGLE_1_EIGHTH; angles [4] = ANGLE_QUARTER; angles [5] = -ANGLE_QUARTER; angles [6] = ANGLE_HALF - ANGLE_1_32; angles [7] = ANGLE_HALF + ANGLE_1_32; angles [8] = ANGLE_HALF - ANGLE_1_SIXTEENTH - ANGLE_1_32; angles [9] = ANGLE_HALF + ANGLE_1_SIXTEENTH + ANGLE_1_32; angles [10] = ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_32; angles [11] = ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_32; angles [12] = ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH; angles [13] = ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH; break; } } void change_displacement(int displace [7], int type) { switch(type) { case 0: displace [0] = -1; displace [1] = 1; displace [2] = 0; displace [3] = 0; displace [4] = 0; displace [5] = 0; displace [6] = 0; break; } } void cannon_shot(int sactor, int btype, int damage, int timer, int mass, int angle, int status, int size, int speed, int colours [4], int displaced, int scatter, int speed_div) { angle += scatter; angle -= grand(scatter * 2); // speed += actor[sactor].upgraded_system [UPG_PROJECT] * 5000; // speed_div -= actor[sactor].upgraded_system [UPG_PROJECT]; int xs = actor[sactor].x_speed + xpart(angle - ANGLE_QUARTER, speed / 3); int ys = actor[sactor].y_speed + ypart(angle - ANGLE_QUARTER, speed / 3); int x = actor[sactor].x; int y = actor[sactor].y; if (displaced != 0) { // x += xpart(angle - ANGLE_QUARTER + (ANGLE_QUARTER * displaced), GRAIN * displaced); // y += ypart(angle - ANGLE_QUARTER + (ANGLE_QUARTER * displaced), GRAIN * displaced); x += xpart(angle - ANGLE_QUARTER + (ANGLE_QUARTER), GRAIN * displaced); y += ypart(angle - ANGLE_QUARTER + (ANGLE_QUARTER), GRAIN * displaced); } if (angle == 0) angle = 1; create_bullet(btype, x, y, xs, ys, sactor, damage, timer, mass, actor[sactor].angle, status, size, colours, speed_div, 0, 0, 0, 0, 0); int cloud_colours [5]; cloud_colours [0] = colours [0]; x = actor[sactor].x + xpart(angle - ANGLE_QUARTER, actor[sactor].flash_distance); y = actor[sactor].y + ypart(angle - ANGLE_QUARTER, actor[sactor].flash_distance); if (displaced != 0) { x += xpart(angle - ANGLE_QUARTER + (ANGLE_QUARTER), GRAIN * displaced); y += ypart(angle - ANGLE_QUARTER + (ANGLE_QUARTER), GRAIN * displaced); } create_cloud(CLOUD_MED_CIRCLE, x, y, 0, 0, actor[sactor].x_speed, actor[sactor].y_speed, 300, 50, 0, 0, 0, 0, cloud_colours); } int adjust_damage(int base, int sactor) { return base + (base * actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE]) / 3; } void fire_secondary(int sactor) { /* specials: 1 = dam 2 = explosion cloud size 3 = blast radius 4 = force */ // int colours [4]; int bcolours1 [4] = {TRANS_DRED, TRANS_ORANGE, TRANS_YELLOW, TRANS_YELLOW}; int bcolours2 [4] = {TRANS_DRED, TRANS_ORANGE, TRANS_YELLOW, TRANS_YELLOW}; int btype [2] = {BULLET_ZAP, BULLET_ZAP}; int damage [2] = {0, 0}; int special1 [2] = {0, 0}; int special2 [2] = {0, 0}; int special3 [2] = {0, 0}; int special4 [2] = {0, 0}; int special5 [2] = {0, 0}; int timer [2] = {10, 10}; //= 20 - actor[sactor].upgraded_system [UPG_PROJECT] * 2; int mass [2] = {100, 100}; // int status = 0; int speed [2] = {10000, 10000};//= 16000; int rand_speed [2] = {0, 0}; int speed_div [2] = {5, 5}; int angles [20] = {0, 0, ANGLE_1_SIXTEENTH, -ANGLE_1_SIXTEENTH, ANGLE_1_EIGHTH, -ANGLE_1_EIGHTH, ANGLE_1_SIXTEENTH + ANGLE_1_32, - ANGLE_1_SIXTEENTH - ANGLE_1_32, ANGLE_1_32, - ANGLE_1_32, ANGLE_HALF, ANGLE_HALF, 0, 0, /* ANGLE_1_EIGHTH + ANGLE_1_32, - ANGLE_1_EIGHTH - ANGLE_1_32, ANGLE_1_EIGHTH - ANGLE_1_32, - ANGLE_1_EIGHTH + ANGLE_1_32,*/ // ANGLE_QUARTER - ANGLE_1_32, // - ANGLE_QUARTER + ANGLE_1_32, // ANGLE_1_32, // - ANGLE_1_32 }; int rand_angle = 0; // unsigned char seed = counter; int displace [3] = {-1, 1, 0}; int number = 0; int rand_timer [2] = {0, 0}; int scatter [2] = {0, 0}; int pattern = PATTERN_TWO_PLUS_OTHERS; int size = 0; int base_speed; int flash_circle = TRANS_ORANGE; // actor[sactor].recycle2 = 66; switch(actor[sactor].secondary) { /* Square - Damage Circle - Number Triangle - Size/Speed */ default: case SECOND_FURIOUS_ORB: btype [0] = BULLET_FURIOUS_ORB; btype [1] = BULLET_FURIOUS_ORB_SMALL; damage [0] = 1; damage [1] = 1; // blast damage: // special1 [0] = 175 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 85; special1 [0] = adjust_damage(150, sactor); special1 [1] = special1 [0] / 2; //100 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 50; // visible explosion size: special2 [0] = 50 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 20; special2 [1] = 20 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 10; // blast size: special3 [0] = 50000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 10000; special3 [1] = 20000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 5000; // blast force special4 [0] = adjust_damage(300, sactor); special4 [1] = adjust_damage(100, sactor); speed [0] = 5000;// + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 1000; speed [1] = 2000;// + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 500; rand_speed [0] = 0; rand_speed [1] = 5000; speed_div [0] = 7; // smaller as triangle increases speed_div [1] = 8; displace [0] = 0; displace [1] = 0; displace [2] = 0; // make_bcolours(bcolours1, COLOUR_YELLOW8); // make_bcolours(bcolours2, COLOUR_YELLOW7); timer [0] = 50;// + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 5; timer [1] = 20;// + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 2; rand_timer [0] = 0; rand_timer [1] = 30; mass [0] = 100; mass [1] = 30; scatter [0] = 0; scatter [1] = 30; number = 1 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] * 2; pattern = PATTERN_ONE_PLUS_OTHERS; size = 3000; // play_wavf(NWAV_SPLERK, 1800); break; case SECOND_MANIFOLD_ORB: btype [0] = BULLET_MANIFOLD_ORB; damage [0] = 1; // blast damage // special1 [0] = 175 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 85; special1 [0] = adjust_damage(150, sactor); // visible explosion size special2 [0] = 50 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 20; // blast size special3 [0] = 50000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 10000; // blast force // special4 [0] = 300 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 150; special4 [0] = adjust_damage(300, sactor); special5 [0] = actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] * 2; speed [0] = 5000; rand_speed [0] = 0; speed_div [0] = 7; // smaller as triangle increases displace [0] = 0; displace [1] = 0; displace [2] = 0; // make_bcolours(bcolours1, COLOUR_YELLOW8); // make_bcolours(bcolours2, COLOUR_YELLOW7); timer [0] = 45; rand_timer [0] = 0; mass [0] = 100; scatter [0] = 0; number = 1;// + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CROSS]; pattern = PATTERN_ONE_PLUS_OTHERS; size = 3000; // play_wavf(NWAV_SPLERK, 1700); break; case SECOND_WORMS_SORROW: /* Square - Damage Circle - Number Triangle - Size/Speed */ btype [0] = BULLET_WORM_SORROW; // damage [0] = 40 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 20; damage [0] = adjust_damage(13, sactor); // REMEMBER - these are actually agony speed [0] = 10000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 100; // special1 [0] = 2500 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 900; special1 [0] = 2500 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 400; special3 [0] = -1; // special4 [0] = 8 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 3; // special4 [0] = 36 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 12; special4 [0] = 36 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 6; rand_speed [0] = 0; speed_div [0] = 7; // smaller as triangle increases displace [0] = 0; displace [1] = 0; displace [2] = 0; bcolours1 [0] = COLOUR_YELLOW4; bcolours1 [1] = COLOUR_YELLOW5; bcolours1 [2] = COLOUR_YELLOW7; bcolours1 [3] = COLOUR_WHITE; timer [0] = 35 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 2; special5 [0] = actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 2; rand_timer [0] = 0; // so they all lock on at once. Randomised later mass [0] = 7; scatter [0] = 0; number = 4 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] * 2; pattern = PATTERN_ALL_SAME; change_angle_arc(angles, -2); flash_circle = TRANS_YELLOW; play_wavf(NWAV_WORMS, 1000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 50); break; case SECOND_WORMS_AGONY: btype [0] = BULLET_WORM_AGONY; // REMEMBER - these are actually sorrow // damage [0] = 20 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 10; damage [0] = adjust_damage(10, sactor); speed [0] = 5000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 100; special1 [0] = 600 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 160; // special1 [0] = 300 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 120; special3 [0] = -1; special4 [0] = 8 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 3; special5 [0] = 0; rand_speed [0] = 0; speed_div [0] = 7; // smaller as triangle increases displace [0] = 0; displace [1] = 0; displace [2] = 0; bcolours1 [0] = COLOUR_YELLOW4; bcolours1 [1] = COLOUR_YELLOW5; bcolours1 [2] = COLOUR_GREY6; bcolours1 [3] = COLOUR_WHITE; timer [0] = 150; rand_timer [0] = 0; mass [0] = 7; scatter [0] = 0; number = 1; pattern = PATTERN_ALL_SAME; if (actor[sactor].secondary_burst == 0) { actor[sactor].secondary_burst = 4 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] * 2; actor[sactor].secondary_burst_recycle = BURST_RECYCLE_DELAY_WORMS; } play_wavf(NWAV_WORMS, 1200 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 50); angles [0] = ANGLE_HALF; flash_circle = TRANS_YELLOW; break; case SECOND_PANIC_EELS: /* Square - Damage Circle - Number Triangle - Size/Speed */ btype [0] = BULLET_PANIC_EEL; // damage [0] = 50 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 25; damage [0] = adjust_damage(50, sactor); speed [0] = 5000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 100; special2 [0] = 64; // if (grand(2) == 0) // special2 [0] = -72; in bullet.c // special3 [0] = 5 + grand(7); // special1 [0] = 900; special1 [0] = 900 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 220; // special3 [0] = -1; special4 [0] = actor[sactor].angle; special5 [0] = 9;// + grand(3); // special4 [0] = 8 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 3; rand_speed [0] = 8000; speed_div [0] = 7; // smaller as triangle increases displace [0] = 0; displace [1] = 0; displace [2] = 0; bcolours1 [0] = COLOUR_GREEN4; bcolours1 [1] = COLOUR_GREEN5; bcolours1 [2] = COLOUR_GREEN6; bcolours1 [3] = COLOUR_GREEN8; timer [0] = 150; rand_timer [0] = 30; mass [0] = 30; scatter [0] = ANGLE_FULL;//1_32; number = 4 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] * 2; pattern = PATTERN_ALL_SAME; // change_angle_arc(angles, ANGLE_1_32); rand_angle = 1; flash_circle = TRANS_LGREEN; play_wavf(NWAV_TEETH, 100 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 5); break; case SECOND_EYE_DESOLATION: btype [0] = BULLET_EYE_DESOLATION; damage [0] = 1; // blast damage // special1 [0] = 100 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 50; //150 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 75; special1 [0] = adjust_damage(100, sactor); // visible explosion size special2 [0] = 50 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 20; // blast size special3 [0] = 50000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 10000; // acceleration special4 [0] = 200 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 100; // number of little things special5 [0] = actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] * 2; speed [0] = 2000; rand_speed [0] = 0; speed_div [0] = 7; // smaller as triangle increases displace [0] = 0; displace [1] = 0; displace [2] = 0; // make_bcolours(bcolours1, COLOUR_YELLOW8); // make_bcolours(bcolours2, COLOUR_YELLOW7); timer [0] = 55; rand_timer [0] = 0; mass [0] = 100; scatter [0] = 0; number = 1;// + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CROSS]; pattern = PATTERN_ONE_PLUS_OTHERS; play_wavf(NWAV_JET, 500 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 50); break; case SECOND_BURNING_EYE: btype [0] = BULLET_BURNING_EYE; damage [0] = 1; // blast damage // special1 [0] = 80 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 40; special1 [0] = adjust_damage(80, sactor); // visible explosion size special2 [0] = 20 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 5; // blast size special3 [0] = 20000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 4000; // acceleration special4 [0] = 250 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 120; // number of little things special5 [0] = 1;//2 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] * 2; speed [0] = -6000; rand_speed [0] = 0; speed_div [0] = 7; // smaller as triangle increases displace [0] = 0; displace [1] = 0; displace [2] = 0; // make_bcolours(bcolours1, COLOUR_YELLOW8); // make_bcolours(bcolours2, COLOUR_YELLOW7); timer [0] = 55; rand_timer [0] = 20; mass [0] = 30; scatter [0] = 16; number = 1;// + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CROSS]; pattern = PATTERN_ONE_PLUS_OTHERS; if (actor[sactor].secondary_burst == 0) { actor[sactor].secondary_burst = 2 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE]; actor[sactor].secondary_burst_recycle = BURST_RECYCLE_DELAY; } play_wavf(NWAV_JET, 1200 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 200); break; case SECOND_FROZEN_TEETH: btype [0] = BULLET_FROZEN_TOOTH; // damage [0] = 100 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 50; damage [0] = adjust_damage(80, sactor); // blast damage // special1 [0] = 80 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 40; // special1 [0] = 60 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 30; // visible explosion size special2 [0] = 5 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 2; // blast size // special3 [0] = 20000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 4000; // acceleration special4 [0] = 120 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 60; // acceleration angle special5 [0] = actor[sactor].angle; speed [0] = 0; base_speed = 3000; rand_speed [0] = 0; speed_div [0] = 7; // smaller as triangle increases displace [0] = 0; displace [1] = 0; displace [2] = 0; bcolours1 [0] = COLOUR_BLUE5; bcolours1 [1] = COLOUR_BLUE6; bcolours1 [2] = COLOUR_BLUE7; bcolours1 [3] = COLOUR_BLUE8; // make_bcolours(bcolours1, COLOUR_YELLOW8); // make_bcolours(bcolours2, COLOUR_YELLOW7); timer [0] = 55; rand_timer [0] = 20; mass [0] = 30; scatter [0] = 16; // number = 2 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE]; number = 4 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] * 2; pattern = PATTERN_SIDEWARDS; flash_circle = TRANS_LBLUE; play_wavf(NWAV_TEETH, 300 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 30); break; case SECOND_FROZEN_STARS: btype [0] = BULLET_FROZEN_STAR; // damage [0] = 50 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 25; damage [0] = adjust_damage(50, sactor); speed [0] = 4000; //8000;// + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 1900; // speed [0] = 5000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 1500; rand_speed [0] = 9000; speed_div [0] = 7; // smaller as triangle increases displace [0] = 0; displace [1] = 0; displace [2] = 0; bcolours1 [0] = COLOUR_WHITE; bcolours1 [1] = COLOUR_BLUE8; bcolours1 [2] = COLOUR_BLUE6; bcolours1 [3] = COLOUR_BLUE8; timer [0] = 60 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 35; rand_timer [0] = 90; mass [0] = 30; scatter [0] = ANGLE_HALF;//FULL; number = 8 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] * 4; pattern = PATTERN_ALL_SAME; // change_angle_arc(angles, ANGLE_1_32); rand_angle = 1; flash_circle = TRANS_LBLUE; play_wavf(NWAV_TEETH, 1300); break; case SECOND_TOXIC_SUN: btype [0] = BULLET_TOXIC_SUN; // does little damage itself // damage [0] = 30 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 15; damage [0] = adjust_damage(30, sactor); // flare damage // special1 [0] = 60 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 30; special1 [0] = adjust_damage(60, sactor); // next flare special2 [0] = 44; // flare visible explosion size // special2 [0] = 50 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 20; // blast size // special3 [0] = 50000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 10000; // flare speed special4 [0] = 5000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 1000; // number of flares // special5 [0] = 4 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] * 2; speed [0] = 2000; rand_speed [0] = 0; speed_div [0] = 7; // smaller as triangle increases displace [0] = 0; displace [1] = 0; displace [2] = 0; // make_bcolours(bcolours1, COLOUR_YELLOW8); // make_bcolours(bcolours2, COLOUR_YELLOW7); timer [0] = 44 + (4 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] * 2) * 3; rand_timer [0] = 0; mass [0] = 100; scatter [0] = 0; number = 1;// + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CROSS]; pattern = PATTERN_ONE_PLUS_OTHERS; // play_wavf(NWAV_WORMS, 200); play_wavf(NWAV_SPLERK, 300); break; case SECOND_SPORES: btype [0] = BULLET_SPORE; // damage [0] = 80 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 40; damage [0] = adjust_damage(80, sactor); special1 [0] = 80 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 40; special3 [0] = -1; special4 [0] = 36 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 12; special5 [0] = 1; speed [0] = 2000; rand_speed [0] = 2000; speed_div [0] = 7; // smaller as triangle increases displace [0] = 0; displace [1] = 0; displace [2] = 0; // make_bcolours(bcolours1, COLOUR_YELLOW8); // make_bcolours(bcolours2, COLOUR_YELLOW7); timer [0] = 100 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 10; // rand_timer [0] = 20; // special1 [0] = timer [0] - 10; mass [0] = 50; scatter [0] = ANGLE_FULL; number = 1;// + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CROSS]; pattern = PATTERN_ONE_PLUS_OTHERS; if (actor[sactor].secondary_burst == 0) { actor[sactor].secondary_burst = 2 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE]; actor[sactor].secondary_burst_recycle = BURST_RECYCLE_DELAY; } play_wavf(NWAV_WORMS, 700); break; case SECOND_FLOWER: btype [0] = BULLET_FLOWER; damage [0] = 1; // blast damage // special1 [0] = 80 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 40; //150 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 75; special1 [0] = adjust_damage(80, sactor); // visible explosion size special2 [0] = 50 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 20; // blast size special3 [0] = 50000 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 20000; // acceleration special4 [0] = 200 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 100; // number of little things special5 [0] = 6 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] * 3; bcolours1 [0] = TRANS_YELLOW; bcolours1 [1] = TRANS_ORANGE; bcolours1 [2] = TRANS_LRED; bcolours1 [3] = TRANS_DRED; speed [0] = 0; rand_speed [0] = 0; speed_div [0] = 7; // smaller as triangle increases displace [0] = 0; displace [1] = 0; displace [2] = 0; timer [0] = 66; rand_timer [0] = 0; mass [0] = 100; scatter [0] = 0; number = 1;// + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CROSS]; pattern = PATTERN_ONE_PLUS_OTHERS; play_wavf(NWAV_SPLERK, 250); break; case SECOND_CLAWS: btype [0] = BULLET_CLAW; // damage [0] = 25 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_SQUARE] * 12; // damage damage [0] = adjust_damage(25, sactor); special1 [0] = 500 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 150; // accel special2 [0] = actor[sactor].angle + grand(ANGLE_1_32) - grand(ANGLE_1_32); special3 [0] = 25; bcolours1 [0] = TRANS_YELLOW; bcolours1 [1] = TRANS_ORANGE; bcolours1 [2] = TRANS_LRED; bcolours1 [3] = TRANS_DRED; speed [0] = 12000; rand_speed [0] = 5000; speed_div [0] = 7; // smaller as triangle increases timer [0] = 100;// + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 10; mass [0] = 20; scatter [0] = ANGLE_FULL; number = 1;// + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CROSS]; pattern = PATTERN_ONE_PLUS_OTHERS; if (actor[sactor].secondary_burst == 0) { actor[sactor].secondary_burst = 6 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_CIRCLE] * 3; actor[sactor].secondary_burst_recycle = BURST_RECYCLE_DELAY_CLAWS; } flash_circle = 0; play_wav2(NWAV_TEETH, 1500 + actor[sactor].ability [ABILITY_SECONDARY] [SYMBOL_TRIANGLE] * 10, 80, 127); break; } /* When adding seekers, remember to clear targets in enemy.c when target is destroyed! */ int i; int j = 0; int l = 0; int shot_angle; int angle_fired = actor[sactor].angle; if (actor[sactor].bomb_status == 0) { actor[sactor].bomb_status = 1; shot_angle = 1; } else { actor[sactor].bomb_status = 0; shot_angle = -1; } for (i = 0; i < number; i ++) { switch(pattern) { case PATTERN_TWO_PLUS_OTHERS: if (i == 1) l = 1; if (i == 2) { j = 1; l = 2; } break; case PATTERN_ONE_PLUS_OTHERS: if (i == 1) { l = 2; j = 1; } break; case PATTERN_SIDEWARDS: // special1 [j] = actor[sactor].angle; if (i % 2 == 0) angles [i] = ANGLE_QUARTER; else angles [i] = - ANGLE_QUARTER; l = 0; j = 0; speed [j] = (i / 2 + 1) * base_speed; break; // PATTERN_ALL_SAME - don't need to change } // colours [0] = bcolours [j]; if (rand_angle == 1) { secondary_shot(sactor, btype [j], damage [j], timer [j] + grand(rand_timer [j]), mass [j], angle_fired + grand(scatter [j]) - grand(scatter [j]), 0, 0, speed [j] + grand(rand_speed [j]), bcolours1, displace [l], scatter [j], speed_div [j], special1 [j], special2 [j], special3 [j], special4 [j], special5 [j], flash_circle); } else { if (j == 0) secondary_shot(sactor, btype [j], damage [j], timer [j] + grand(rand_timer [j]), mass [j], angle_fired + (angles [i] * shot_angle), 0, size, speed [j] + grand(rand_speed [j]), bcolours1, displace [l], scatter [j], speed_div [j], special1 [j], special2 [j], special3 [j], special4 [j], special5 [j], flash_circle); else secondary_shot(sactor, btype [j], damage [j], timer [j] + grand(rand_timer [j]), mass [j], angle_fired + (angles [i] * shot_angle), 0, size, speed [j] + grand(rand_speed [j]), bcolours2, displace [l], scatter [j], speed_div [j], special1 [j], special2 [j], special3 [j], special4 [j], special5 [j], flash_circle); } } // actor_sound(sactor, ASOUND_CANNON); } void secondary_shot(int sactor, int btype, int damage, int timer, int mass, int angle, int status, int size, int speed, int colours [4], int displaced, int scatter, int speed_div, int special1, int special2, int special3, int special4, int special5, int flash_colour) { angle += scatter; angle -= grand(scatter * 2); int xs = actor[sactor].x_speed + xpart(angle - ANGLE_QUARTER, speed / 3); int ys = actor[sactor].y_speed + ypart(angle - ANGLE_QUARTER, speed / 3); int x = actor[sactor].x; int y = actor[sactor].y; if (displaced != 0) { x += xpart(angle - ANGLE_QUARTER + (ANGLE_QUARTER * displaced), GRAIN * 3); y += ypart(angle - ANGLE_QUARTER + (ANGLE_QUARTER * displaced), GRAIN * 3); } if (angle == 0) angle = 1; create_bullet(btype, x, y, xs, ys, sactor, // damage, timer, mass, actor[sactor].angle, damage, timer, mass, angle, status, size, colours, speed_div, special1, special2, special3, special4, special5); int cloud_colours [5]; cloud_colours [0] = flash_colour; x = actor[sactor].x + xpart(angle - ANGLE_QUARTER, actor[sactor].flash_distance); y = actor[sactor].y + ypart(angle - ANGLE_QUARTER, actor[sactor].flash_distance); if (displaced != 0) { x += xpart(angle - ANGLE_QUARTER + (ANGLE_QUARTER * displaced), GRAIN * 3); y += ypart(angle - ANGLE_QUARTER + (ANGLE_QUARTER * displaced), GRAIN * 3); } if (flash_colour != 0) create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, actor[sactor].x_speed, actor[sactor].y_speed, 400, 50, 0, 0, 0, 0, cloud_colours); } void fire_missile(int sactor) { int colours [4] = {TRANS_LGREY, TRANS_DRED, TRANS_LRED, TRANS_YELLOW}; int btype = BULLET_MISSILE; int damage = 30; // misleading; the explosion changes this if (actor[sactor].upgraded_system [UPG_WARHEAD] > 0) { damage += actor[sactor].upgraded_system [UPG_WARHEAD] * 8; /* switch(actor[sactor].upgraded_system [UPG_WARHEAD]) { default: case 0: colours [3] = TRANS_YELLOW; break; case 1: colours [3] = TRANS_LRED; break; case 2: colours [3] = TRANS_LBLUE; break; case 3: colours [3] = TRANS_DBLUE; break; case 4: colours [3] = TRANS_LGREEN; break; case 5: colours [3] = TRANS_PURPLE; break; }*/ } /* UPG_WARHEAD, // increases missile damage // special: cluster warhead UPG_SEEKER, // makes missiles track nearest target, then increases turn rate // special: // 1. Dauntless (seekers don't explode when target does; acquire new one) // 2. Smart guidance - go for most important target // 3. Target Analysis - send only enough missiles to destroy; prefer weaker // targets if they'll be destroyed UPG_ROCKET, // increases missile acceleration, but not range by much // special: long range UPG_TUBES, // increases number of missiles // special: extra mini-missiles, ?random directions, not seeking */ int timer = 45;// - actor[sactor].upgraded_system [UPG_ROCKET]; int mass = 10; int status = 0; int speed = 1000; unsigned char seed = counter; int size = 0; if (actor[sactor].angle == 0) actor[sactor].angle = 1; // I have no idea why this is necessary int specials [7] = {0,6,1,5,2,4,3}; if (actor[sactor].bomb_status == 1) { specials [0] = 6; specials [1] = 0; specials [2] = 5; specials [3] = 1; specials [4] = 4; specials [5] = 2; specials [6] = 3; actor[sactor].bomb_status = 0; } else actor[sactor].bomb_status = 1; switch(actor[sactor].upgraded_system [UPG_TUBES]) { /* case 1: missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 0); break;*/ case 0: missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, size, speed, colours, 1, specials [0]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, size, speed, colours, -1, specials [1]); break; case 1: missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, size, speed, colours, 1, specials [0]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, size, speed, colours, -1, specials [1]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, size, speed, colours, 0, specials [2]); break; case 2: missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 2, specials [0]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, -2, specials [1]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 1, specials [2]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, -1, specials [3]); break; case 3: missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 0, specials [0]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle + 16, status, seed, speed, colours, 2, specials [1]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle - 16, status, seed, speed, colours, -2, specials [2]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 1, specials [3]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, -1, specials [4]); break; /* case 4: missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 0, specials [0]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle + ANGLE_HALF, status, seed, speed, colours, 0, specials [1]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle + 16, status, seed, speed, colours, 2, specials [2]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle - 16, status, seed, speed, colours, -2, specials [3]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 1, specials [4]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, -1, specials [5]); break;*/ case 4: missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle + 16, status, seed, speed, colours, 3, specials [0]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle - 16, status, seed, speed, colours, -3, specials [1]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 2, specials [2]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, -2, specials [3]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 1, specials [4]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, -1, specials [5]); break; case 5: missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 0, specials [0]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle + 16, status, seed, speed, colours, 3, specials [1]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle - 16, status, seed, speed, colours, -3, specials [2]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 2, specials [3]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, -2, specials [4]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 1, specials [5]); missile_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, -1, specials [6]); break; } // cannon_shot(sactor, btype, damage, timer, mass, actor[sactor].angle, // status, seed, speed, colours, 1); // actor_sound(sactor, ASOUND_TUBE); } void missile_shot(int sactor, int btype, int damage, int timer, int mass, int angle, int status, int seed, int speed, int colours [4], int displaced, int special5) { int special1; int special2; int special3; int special4; special5 *= 3; timer += grand(15); speed += actor[sactor].upgraded_system [UPG_ROCKET] * 1000; special1 = 200 + actor[sactor].upgraded_system [UPG_ROCKET] * 50; int xs = actor[sactor].x_speed + xpart(angle - ANGLE_QUARTER, speed / 3); int ys = actor[sactor].y_speed + ypart(angle - ANGLE_QUARTER, speed / 3); int x = actor[sactor].x; int y = actor[sactor].y; if (displaced != 0) { // x += cos(angle_to_radians(angle - ANGLE_QUARTER + (ANGLE_QUARTER * displaced))) * GRAIN * 3 * displaced; // y += sin(angle_to_radians(angle - ANGLE_QUARTER + (ANGLE_QUARTER * displaced))) * GRAIN * 3 * displaced; x += xpart(angle - ANGLE_QUARTER + (ANGLE_QUARTER), GRAIN * 5 * displaced); y += ypart(angle - ANGLE_QUARTER + (ANGLE_QUARTER), GRAIN * 5 * displaced); xs += xpart(angle - ANGLE_QUARTER + (ANGLE_QUARTER), GRAIN / 8 * displaced); ys += ypart(angle - ANGLE_QUARTER + (ANGLE_QUARTER), GRAIN / 8 * displaced); } special3 = -1; if (actor[sactor].lock != -1)// && enemy[actor[sactor].lock].type != ENEMY_NONE) { if (actor[sactor].lock == LOCK_ACTOR0 && actor[0].in_play == 1) special3 = actor[sactor].lock; if (actor[sactor].lock == LOCK_ACTOR1 && actor[1].in_play == 1) special3 = actor[sactor].lock; if (actor[sactor].lock >= 0 && enemy[actor[sactor].lock].type != ENEMY_NONE) special3 = actor[sactor].lock; } special4 = 32 + 16 * actor[sactor].upgraded_system [UPG_SEEKER]; if (angle == 0) angle = 1; create_bullet(btype, x, y, xs, ys, sactor, damage, timer, mass, angle, status, seed, colours, 1, special1, special2, special3, special4, special5); } void fire_bomb(int sactor) { int colours [4] = {TRANS_LGREY, TRANS_DRED, TRANS_LRED, TRANS_YELLOW}; // int btype = BULLET_BOMB; int damage = 50; // misleading; the explosion changes this if (actor[sactor].upgraded_system [UPG_BOMB] > 0) { damage += actor[sactor].upgraded_system [UPG_BOMB] * 25; } /* UPG_BOMB, // increases bomb damage // special: dispersion (explosion size) UPG_LAUNCHER, // adds more bombs (side-bombs are smaller) // special: cluster bombs (main one only?) UPG_LOADER, // increases bomb firing rate // special: long range */ int timer = 30;// + actor[sactor].upgraded_system [UPG_ROCKET]; int mass = 10; int status = 0; int speed = 6500; unsigned char seed = counter; switch(actor[sactor].upgraded_system [UPG_LAUNCHER]) { case 0: bomb_shot(sactor, BULLET_BOMB, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 0); break; case 1: bomb_shot(sactor, BULLET_BOMB, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 0); if (actor[sactor].bomb_status == 0) { bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle - BOMB_ANGLE_1, status, seed, speed, colours, 0); actor[sactor].bomb_status = 1; } else { bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle + BOMB_ANGLE_1, status, seed, speed, colours, 0); actor[sactor].bomb_status = 0; } break; case 2: bomb_shot(sactor, BULLET_BOMB, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 0); bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle - BOMB_ANGLE_1, status, seed, speed, colours, 0); bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle + BOMB_ANGLE_1, status, seed, speed, colours, 0); break; case 3: bomb_shot(sactor, BULLET_BOMB, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 0); bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle - BOMB_ANGLE_1, status, seed, speed, colours, 0); bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle + BOMB_ANGLE_1, status, seed, speed, colours, 0); if (actor[sactor].bomb_status == 0) { bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle - BOMB_ANGLE_2, status, seed, speed, colours, 0); actor[sactor].bomb_status = 1; } else { bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle + BOMB_ANGLE_2, status, seed, speed, colours, 0); actor[sactor].bomb_status = 0; } break; case 4: bomb_shot(sactor, BULLET_BOMB, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 0); bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle - BOMB_ANGLE_1, status, seed, speed, colours, 0); bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle + BOMB_ANGLE_1, status, seed, speed, colours, 0); bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle - BOMB_ANGLE_2, status, seed, speed, colours, 0); bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle + BOMB_ANGLE_2, status, seed, speed, colours, 0); break; case 5: bomb_shot(sactor, BULLET_BOMB, damage, timer, mass, actor[sactor].angle, status, seed, speed, colours, 0); bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle - BOMB_ANGLE_1, status, seed, speed, colours, 0); bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle + BOMB_ANGLE_1, status, seed, speed, colours, 0); bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle - BOMB_ANGLE_2, status, seed, speed, colours, 0); bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle + BOMB_ANGLE_2, status, seed, speed, colours, 0); bomb_shot(sactor, BULLET_BOMB_SIDE, damage, timer, mass, actor[sactor].angle + ANGLE_HALF, status, seed, speed, colours, 0); break; } // actor_sound(sactor, ASOUND_BOMBS); } void bomb_shot(int sactor, int btype, int damage, int timer, int mass, int angle, int status, int seed, int speed, int colours [4], int displaced) { int special1; int special2; int special3; int special4; int special5; timer += grand(4); // speed += actor[sactor].upgraded_system [UPG_ROCKET] * 1000; /* UPG_BOMB, // increases bomb damage // special: dispersion (explosion size) UPG_LAUNCHER, // adds more bombs (side-bombs are smaller) // special: cluster bombs (main one only?) UPG_LOADER, // increases bomb firing rate // special: long range */ special1 = 30000 + actor[sactor].upgraded_system [UPG_BOMB] * 5000; // size of bomb's explosion if (btype == BULLET_BOMB_SIDE) { damage /= 2; special1 /= 2; } special2 = 0; // int special1; // missiles: acceleration // bombs: explosion size // int special2; // missiles: number of clusters // bombs: number of clusters int xs = actor[sactor].x_speed + xpart(angle - ANGLE_QUARTER, speed / 3); int ys = actor[sactor].y_speed + ypart(angle - ANGLE_QUARTER, speed / 3); int x = actor[sactor].x; int y = actor[sactor].y; /* if (displaced != 0) { // x += cos(angle_to_radians(angle - ANGLE_QUARTER + (ANGLE_QUARTER * displaced))) * GRAIN * 3 * displaced; // y += sin(angle_to_radians(angle - ANGLE_QUARTER + (ANGLE_QUARTER * displaced))) * GRAIN * 3 * displaced; x += cos(angle_to_radians(angle - ANGLE_QUARTER + (ANGLE_QUARTER))) * GRAIN * 5 * displaced; y += sin(angle_to_radians(angle - ANGLE_QUARTER + (ANGLE_QUARTER))) * GRAIN * 5 * displaced; xs += cos(angle_to_radians(angle - ANGLE_QUARTER + (ANGLE_QUARTER))) * GRAIN / 8 * displaced; ys += sin(angle_to_radians(angle - ANGLE_QUARTER + (ANGLE_QUARTER))) * GRAIN / 8 * displaced; }*/ if (angle == 0) angle = 1; create_bullet(btype, x, y, xs, ys, sactor, damage, timer, mass, angle, status, seed, colours, 1, special1, special2, special3, special4, special5); } /* void fire_turret(int sactor) { int colours [4] = {COLOUR_RED8, COLOUR_RED6, COLOUR_RED4, COLOUR_RED2}; int damage = 100; int timer = 11 + actor[sactor].upgraded_system [UPG_TURRET] * 2; int mass = 10; int status = 0; int speed = 22000; // unsigned char seed = counter; // int target = closest_enemy(actor[sactor].x, actor[sactor].y, 100000 + actor[sactor].upgraded_system [UPG_TURRET], 1); int target = actor[sactor].turret_lock; int at; int angle; int lead = 5; int target_x; int target_y; int source_x; int source_y; if (target == LOCK_ACTOR0 || target == LOCK_ACTOR1) { if (target == LOCK_ACTOR0) at = 0; else at = 1; lead = 5; target_x = actor[at].x + actor[at].x_speed * lead; target_y = actor[at].y + actor[at].y_speed * lead; source_x = actor[sactor].x + actor[sactor].x_speed * lead; source_y = actor[sactor].y + actor[sactor].y_speed * lead; angle = radians_to_angle(atan2(target_y - source_y, target_x - source_x)); } else { if (target == -1 || enemy[target].type == ENEMY_NONE) { angle = actor[sactor].angle - ANGLE_QUARTER; } else { lead = 5; target_x = enemy[target].x + enemy[target].x_speed * lead; target_y = enemy[target].y + enemy[target].y_speed * lead; source_x = actor[sactor].x + actor[sactor].x_speed * lead; source_y = actor[sactor].y + actor[sactor].y_speed * lead; // int angle = radians_to_angle(atan2(enemy[target].y - actor[sactor].y, // enemy[target].x - actor[sactor].x)); angle = radians_to_angle(atan2(target_y - source_y, target_x - source_x)); } } // angle += (actor[sactor].upgraded_system [UPG_TURRET] * 3); // angle -= grand(actor[sactor].upgraded_system [UPG_TURRET] * 6); angle += 20; angle -= grand(40); timer += grand(4); int speed_div = 4; speed += actor[sactor].upgraded_system [UPG_TURRET] * 800; speed_div -= actor[sactor].upgraded_system [UPG_TURRET] / 2; int xs = actor[sactor].x_speed + xpart(angle, speed / 3); int ys = actor[sactor].y_speed + ypart(angle, speed / 3); int x = actor[sactor].x; int y = actor[sactor].y; if (angle == 0) angle = 1; create_bullet(BULLET_ZAP, x, y, xs, ys, sactor, damage, timer, mass, angle, status, 0, colours, speed_div, 0, 0, 0, 0, 0); // play_sound2(WAV_BLAT, 600, 155, 127); int cloud_colours [5]; cloud_colours [0] = colours [0]; x = actor[sactor].x + xpart(angle, 2000); y = actor[sactor].y + ypart(angle, 2000); // if (displaced != 0) // { // x += cos(angle_to_radians(angle - ANGLE_QUARTER + (ANGLE_QUARTER * displaced))) * GRAIN * 3; // y += sin(angle_to_radians(angle - ANGLE_QUARTER + (ANGLE_QUARTER * displaced))) * GRAIN * 3; // } create_cloud(CLOUD_MED_CIRCLE, x, y, 0, 0, actor[sactor].x_speed, actor[sactor].y_speed, 300, 50, 0, 0, 0, 0, cloud_colours); } void fire_heavy_cannon(int sactor) { int colours [4] = {COLOUR_WHITE, COLOUR_GREY6, COLOUR_GREY4, COLOUR_GREY2}; switch(actor[sactor].upgraded_system [UPG_HEAVY]) { case 1: colours [3] = COLOUR_RED8; break; case 2: colours [3] = COLOUR_YELLOW8; break; case 3: colours [3] = COLOUR_GREEN8; break; case 4: colours [3] = COLOUR_BLUE8; break; case 5: colours [3] = COLOUR_WHITE; break; } int damage = 100 + 25 * actor[sactor].upgraded_system [UPG_HEAVY]; int timer = 13;// + actor[sactor].upgraded_system [UPG_HEAVY]; int mass = 10; int status = 0; int speed = 25000 + actor[sactor].upgraded_system [UPG_HEAVY] * 1000; unsigned char seed = counter; int angle = actor[sactor].angle - ANGLE_QUARTER; timer += grand(3); int speed_div = 4; // speed += actor[sactor].upgraded_system [UPG_HEAVY] * 1000; speed_div -= actor[sactor].upgraded_system [UPG_HEAVY] / 2; int xs = actor[sactor].x_speed + xpart(angle, speed / 3); int ys = actor[sactor].y_speed + ypart(angle, speed / 3); int x, y; if (angle == 0) angle = 1; int cloud_colours [5]; cloud_colours [0] = colours [0]; // x = actor[sactor].x + cos(angle_to_radians(angle - ANGLE_QUARTER + (ANGLE_QUARTER))) * GRAIN * 30; // y = actor[sactor].y + sin(angle_to_radians(angle - ANGLE_QUARTER + (ANGLE_QUARTER))) * GRAIN * 30; x = actor[sactor].x + xpart(angle - ANGLE_QUARTER, GRAIN * 5); y = actor[sactor].y + ypart(angle - ANGLE_QUARTER, GRAIN * 5); create_bullet(BULLET_POWERED, x, y, xs, ys, sactor, damage, timer, mass, angle, status, seed, colours, speed_div, 0, 0, 0, 0, 0); x = actor[sactor].x + xpart(angle, 3000); y = actor[sactor].y + ypart(angle, 3000); x += xpart(angle - ANGLE_QUARTER, GRAIN * 3); y += ypart(angle - ANGLE_QUARTER, GRAIN * 3); create_cloud(CLOUD_MED_CIRCLE, x, y, 0, 0, actor[sactor].x_speed, actor[sactor].y_speed, 300, 50, 0, 0, 0, 0, cloud_colours); x = actor[sactor].x + xpart(angle + ANGLE_QUARTER, GRAIN * 5); // * must be twice above because we need to counteract it y = actor[sactor].y + ypart(angle + ANGLE_QUARTER, GRAIN * 5); create_bullet(BULLET_POWERED, x, y, xs, ys, sactor, damage, timer, mass, angle, status, seed, colours, speed_div, 0, 0, 0, 0, 0); // actor_sound(sactor, ASOUND_BLAT); x = actor[sactor].x + xpart(angle, 3000); y = actor[sactor].y + ypart(angle, 3000); x += xpart(angle + ANGLE_QUARTER, GRAIN * 3); y += ypart(angle + ANGLE_QUARTER, GRAIN * 3); create_cloud(CLOUD_MED_CIRCLE, x, y, 0, 0, actor[sactor].x_speed, actor[sactor].y_speed, 300, 50, 0, 0, 0, 0, cloud_colours); } void fire_backfire(int sactor) { int colours [4] = {COLOUR_GREEN8, COLOUR_GREEN6, COLOUR_GREEN4, COLOUR_GREEN2}; int damage = 100; int timer = 14; int mass = 10; int status = 0; int speed = 29000; unsigned char seed = counter; int angle = actor[sactor].angle + ANGLE_QUARTER; timer += grand(4); int speed_div = 4; int xs;// = actor[sactor].x_speed + cos(angle_to_radians(angle)) * speed / 3; int ys;// = actor[sactor].y_speed + sin(angle_to_radians(angle)) * speed / 3; int x = actor[sactor].x; int y = actor[sactor].y; if (angle == 0) angle = 1; // x = actor[sactor].x + cos(angle_to_radians(angle - ANGLE_QUARTER)) * GRAIN * 5; // y = actor[sactor].y + sin(angle_to_radians(angle - ANGLE_QUARTER)) * GRAIN * 5; int i; int multiple = 1 + actor[sactor].upgraded_system [UPG_BACKFIRE]; int angle_inc = ANGLE_1_SIXTEENTH; angle -= angle_inc * (multiple / 2) + 1; if (multiple % 2 == 0) angle += ANGLE_1_SIXTEENTH / 2; int cloud_colours [5]; cloud_colours [0] = colours [0]; int x2, y2; for (i = 0; i < multiple; i ++) { // angle = grand(1000); xs = actor[sactor].x_speed + xpart(angle, speed / 3); ys = actor[sactor].y_speed + ypart(angle, speed / 3); create_bullet(BULLET_ZAP, x, y, xs, ys, sactor, damage, timer, mass, angle, status, seed, colours, speed_div, 0, 0, 0, 0, 0); x2 = actor[sactor].x + xpart(angle, 2000); y2 = actor[sactor].y + ypart(angle, 2000); // x2 += cos(angle_to_radians(angle)) * GRAIN * 3; // y2 += sin(angle_to_radians(angle)) * GRAIN * 3; create_cloud(CLOUD_MED_CIRCLE, x2, y2, 0, 0, actor[sactor].x_speed, actor[sactor].y_speed, 300, 50, 0, 0, 0, 0, cloud_colours); angle += angle_inc; } play_sound2(WAV_BLAT, 400, 155, 127); } void fire_sidekicks(int a) { if (actor[a].sidekick_recycle > 0) return; int colours [4] = {COLOUR_RED8, COLOUR_RED6, COLOUR_RED4, COLOUR_RED2}; // int colours [4] = {COLOUR_YELLOW8, COLOUR_YELLOW6, COLOUR_YELLOW4, COLOUR_YELLOW2}; int damage = 100; int timer = 14; int mass = 10; int status = 0; int speed = 29000; unsigned char seed = counter; int i; int angle; int speed_div = 2; int xs;// = actor[sactor].x_speed + cos(angle_to_radians(angle)) * speed / 3; int ys;// = actor[sactor].y_speed + sin(angle_to_radians(angle)) * speed / 3; int x;// = actor[a].sidekick_x [i]; int y;// = actor[a].sidekick_y [i]; int btype = BULLET_ZAP; timer += grand(4); switch(actor[a].upgraded_system [UPG_SIDEKICK]) { case 2: case 3: damage = 125; btype = BULLET_POWERED; colours [3] = COLOUR_RED8; break; case 4: damage = 150; btype = BULLET_POWERED; colours [3] = COLOUR_YELLOW8; break; case 5: damage = 175; btype = BULLET_POWERED; colours [3] = COLOUR_GREEN8; break; } int cloud_colours [5]; cloud_colours [0] = COLOUR_ORANGE8; for (i = 0; i < actor[a].sidekicks; i ++) { x = actor[a].sidekick_x [i]; y = actor[a].sidekick_y [i]; angle = actor[a].sidekick_angle [i]; if (angle == 0) angle = 1; xs = actor[a].sidekick_x_speed [i] + xpart(angle, speed / 3); ys = actor[a].sidekick_y_speed [i] + ypart(angle, speed / 3); create_bullet(btype, x, y, xs, ys, a, damage, timer, mass, angle, status, seed, colours, speed_div, 0, 0, 0, 0, 0); x = x + xpart(angle, 4000); y = y + ypart(angle, 4000); create_cloud(CLOUD_MED_CIRCLE, x, y, 0, 0, actor[a].sidekick_x_speed [i], actor[a].sidekick_y_speed [i], 300, 50, 0, 0, 0, 0, cloud_colours); } play_sound2(WAV_BLAT, 500, 155, 127); } */ /* void upgrade_sidekicks(int a) { int old_number = actor[a].sidekicks; switch(actor[a].upgraded_system [UPG_SIDEKICK]) { case 1: case 2: actor[a].sidekicks = 2; break; default: actor[a].sidekicks = 4; break; } int i; if (actor[a].sidekicks > old_number) { simple_cloud_trans(TRANS_LBLUE, actor[a].x, actor[a].y, 0, 0, 500); for (i = old_number; i < actor[a].sidekicks; i ++) { actor[a].sidekick_x [i] = actor[a].x; actor[a].sidekick_y [i] = actor[a].y; actor[a].sidekick_x_speed [i] = actor[a].x_speed; actor[a].sidekick_y_speed [i] = actor[a].y_speed; actor[a].sidekick_angle [i] = actor[a].angle; } } } */ /* void actor_sound(int a, int sound) { switch(sound) { case ASOUND_CANNON: play_sound2(WAV_CANNON, 1000 + actor[a].upgraded_system [UPG_AUTOFIRE] * 200, 155 + actor[a].upgraded_system [UPG_POWER] * 20, 127); break; case ASOUND_BOMBS: play_sound2(WAV_BOMBS, 1000 - actor[a].upgraded_system [UPG_BOMB] * 70, 155 + actor[a].upgraded_system [UPG_LAUNCHER] * 20, 127); break; case ASOUND_BLAT: play_sound2(WAV_BLAT, 400 - actor[a].upgraded_system [UPG_HEAVY] * 20, 155, 127); break; case ASOUND_TUBE: play_sound2(WAV_TUBE, 1000 + actor[a].upgraded_system [UPG_ROCKET] * 100 + actor[a].upgraded_system [UPG_LOADER] * 50, 155, 127); break; // play_sound(sample); } } */ void make_drive_sound(int a, int drive) { if (actor[a].drive_sound [drive] == 0) { // play_sound2(WAV_ENGINE, 1000 + actor[a].upgraded_system [UPG_SPEED] * 50, 100, 127); play_wavf(NWAV_DRIVE, 1000 - (actor[a].ability [ABILITY_DRIVE] [SYMBOL_SQUARE] * 30) - (actor[a].ability [ABILITY_DRIVE] [SYMBOL_TRIANGLE] * 5)); actor[a].drive_sound [DRIVE_THRUST] = 2; /* switch(drive) { case DRIVE_THRUST: play_sound2(WAV_ENGINE, 1000 + actor[a].upgraded_system [UPG_SPEED] * 50, 100, 127); actor[a].drive_sound [DRIVE_THRUST] = 10 - actor[a].upgraded_system [UPG_SPEED] - (actor[a].upgraded_system [UPG_SPEED] == 5); break; case DRIVE_SLIDE: play_sound2(WAV_ENGINE, 1000 + actor[a].upgraded_system [UPG_SLIDE] * 50, 100, 127); actor[a].drive_sound [DRIVE_SLIDE] = 10 - actor[a].upgraded_system [UPG_SLIDE]; break; case DRIVE_RETRO: play_sound2(WAV_ENGINE, 1000 + actor[a].upgraded_system [UPG_RETRO] * 50, 100, 127); actor[a].drive_sound [DRIVE_RETRO] = 10 - actor[a].upgraded_system [UPG_RETRO]; break; }*/ } } overgod-1.0/cmds.h0000644000175000001440000000010510027115174013120 0ustar michiusersvoid enact_commands(void); void continue_secondary_burst(int a); overgod-1.0/config.h0000644000175000001440000005466410311027122013451 0ustar michiusers//Platform: //#define OVERGOD_DOS #ifdef ALLEGRO_WINDOWS #define OVERGOD_WINDOWS #endif #if defined (ALLEGRO_LINUX) || defined(ALLEGRO_UNIX) #define OVERGOD_LINUX #endif #ifdef ALLEGRO_MACOSX #define OVERGOD_MAC #endif //#define SANITY_CHECK #define NO_CLOUDS 1000 #define NO_ACTORS 25 #define NO_BULLETS 1000 #define NO_PLAYERS 2 #define GRAIN 1000 //#define NO_CMDS 12 #define NO_STARS 100 #define NO_PICKUPS 20 #define MAX_SCORE 9999999 #define GRID_WIDTH 50 #define NO_WEAPONS 2 #define NO_SHIP_TYPES 17 #define NO_SYSTEM_TYPES 3 #define NO_UPGRADES 9 #define FULL_UPGRADE 5 #define NO_ENEMY_ATTRIBUTES 10 #define NO_ENEMIES 40 #define MAX_TURRETS 4 //#define NO_ENEMY_TYPES 50 #define ANGLE_FULL_HEX 0x400 #define ANGLE_FULL 1024 #define ANGLE_HALF 512 #define ANGLE_QUARTER 256 #define ANGLE_1_EIGHTH 128 #define ANGLE_1_SIXTEENTH 64 #define ANGLE_3_EIGHTHS 384 #define ANGLE_3_SIXTEENTHS 192 #define ANGLE_1_32 32 #define ANGLE_TO_FIXED 4 #define OWNER_ENEMY -1 #define ATTACK_NONE -1 #define MAX_EYES 8 #ifndef PI #define PI 3.141592 #endif #define ARMOUR_UPGRADE 200 struct armoury { char *name; int type; int speed; int timeout; int damage; int mass; }; enum { TARGET_PRIMARY, // need to kill to advance TARGET_NO, // turrets etc TARGET_EXTRA, TARGET_CRAWLY // crawlies... }; enum { CMD_THRUST, CMD_LEFT, CMD_RIGHT, CMD_FIRE1, CMD_FIRE2, CMD_BRAKE, CMD_LEFT1, CMD_RIGHT1, CMD_UPGRADE, CMD_LINK, NO_CMDS }; enum { GAME_SINGLE, GAME_COOP, GAME_DUEL, GAME_TIME_ATTACK, GAME_TIME_ATTACK_COOP }; enum { SECONDARY_NONE, SECONDARY_MISSILE, SECONDARY_BOMB }; enum { ACTORTYPE_NONE, ACTORTYPE_SHIP, ACTORTYPE_REDSHIP }; /* SHIPS: Pointy: extra-damage darts Horseshoe: Fast secondary recycle round: armour self-repairs Retro: retro-rocket instead of drag field small: smaller collision radius fins: backfire large rear wings: orbital curve: bounces off enemies (ram) */ enum { SHIP_POINTY, SHIP_HORSESHOE, SHIP_ROUND, SHIP_RETRO, SHIP_SMALL, SHIP_FINS, SHIP_ORBITAL, SHIP_CURVE /*SHIP_LACEWING, SHIP_CAPYBARA, SHIP_DESPOT, SHIP_HOOKWORM, SHIP_LENTIL, SHIP_PORKUPINE, SHIP_PRONG, SHIP_SCORPION, SHIP_TORTFEASOR, SHIP_AETHER, SHIP_RUMSFELD, SHIP_GODBOTHERER, SHIP_BOTULUS, SHIP_SLIDEWINDER, SHIP_DOOM*/ }; /* Ships: Lacewing - pointy: fighter Aether Squid - spiny: multifire Lentil - rounded: heavy bomber Rumsfeld's Delight - triangle: silly Hookworm - small round wing: many homing missiles Tortfeasor - 2 prongs: light bomber (+ slide) False Scorpion: - bracketed: agile Porkupine - large round wing: multi missiles Despot - wide lacewing - just 2 homing missiles Capybara - blobby - medium bomber Prong - pointy2 - super cannons Godbotherer - fat triangle - heavy fighter - multi, autof, heavy cannons, tubes? Botulus - backwards curve - fast rocketed missiles - rocket, loader, multi, power, Slidewinder - three triangles - fast seeker missiles - seek, loader, auto, slide Doom Fork - two prongs forwards - drifter - auto, power, rocket, whead */ /* Aether Squid Lentil */ enum { PICKUP_NONE, PICKUP_REPAIR, PICKUP_GRACE, PICKUP_SHIP, PICKUP_SQUARE, PICKUP_CIRCLE, PICKUP_TRIANGLE, PICKUP_PRESYMBOL, PICKUP_SECONDARY, PICKUP_PRESECONDARY }; enum { SYMBOL_SQUARE, SYMBOL_CIRCLE, SYMBOL_TRIANGLE, SYMBOL_CROSS }; #define SYMBOL_TIMEOUT 64 enum { ABILITY_PRIMARY, ABILITY_DRIVE, ABILITY_SECONDARY, ABILITY_DEFENCE }; enum { SUBTYPE_NONE, // for creepy-crawlies SUBTYPE_GREEN, SUBTYPE_YELLOW, SUBTYPE_ORANGE, SUBTYPE_RED, SUBTYPE_BLUE, SUBTYPE_PURPLE, SUBTYPE_WHITE }; enum { FIGHTER_ATTACK, FIGHTER_MOVE, BEE_RESTING }; enum { BULLET_NONE, BULLET_ZAP, BULLET_POWERED, BULLET_MISSILE, BULLET_MISSILE_MINI, BULLET_BOMB, BULLET_BOMB_SIDE, BULLET_BOMBLET, // also used for cluster missiles BULLET_STING, BULLET_HOSTILE, BULLET_PREMINE, BULLET_MINE, BULLET_BLUE_BLOB, BULLET_RED_BLOB, BULLET_YELLOW_BLOB, BULLET_ORANGE_BLOB, BULLET_SEEKER_BLOB, BULLET_PLASMA, BULLET_PRESEEKMINE, BULLET_SEEKMINE, BULLET_SEEKER_BLOB2, BULLET_LINES, BULLET_CURVE, BULLET_PRONG, BULLET_ORBITAL, BULLET_FLAK, BULLET_SEEKER_BLOB3, BULLET_ZZZ_BOLT, BULLET_TORPEDO, BULLET_SUPERSTING, BULLET_NICE_ORBITAL, BULLET_STING2, BULLET_PURPLE_BLOB, BULLET_BOSS4, BULLET_TORPEDO2, BULLET_BALL1, BULLET_BALL2, BULLET_WOODEN_DART, BULLET_ICE_DART, BULLET_SILVER_TOOTH, BULLET_SNOW_DART, BULLET_FROZEN_BREATH, BULLET_SHOCK_PATH, BULLET_BRASS_TOOTH, BULLET_CRYSTAL_TOOTH, BULLET_GOLDEN_NEEDLE, BULLET_PARTICLE_SPITTER, BULLET_CRYSTAL_SPINE, BULLET_GOLDEN_PATH, BULLET_NUMEROUS_DART, BULLET_NUMEROUS_BLADE, BULLET_FAR_SPITTER, //BULLET_ICE_TOOTH, BULLET_BURNING_SPIRIT, BULLET_WOODEN_DART_SMALL, BULLET_ICE_DART_SMALL, BULLET_SILVER_TOOTH_SMALL, BULLET_SNOW_DART_SMALL, BULLET_BRASS_TOOTH_SMALL, BULLET_SHOCK_PATH_SMALL, BULLET_GOLDEN_PATH_SMALL, BULLET_GOLDEN_NEEDLE_SMALL, BULLET_FURIOUS_ORB, BULLET_BURNING_EYE, BULLET_LARVA_NEST, BULLET_MANIFOLD_ORB, BULLET_EYE_DESOLATION, BULLET_TERROR_EEL, BULLET_PANIC_EEL, BULLET_WORM_SORROW, BULLET_WORM_AGONY, BULLET_FROZEN_STAR, BULLET_FROZEN_TOOTH, BULLET_ORB_RECTIFICATION, BULLET_FURIOUS_ORB_SMALL, BULLET_BURNING_EYE_SMALL, BULLET_EYE_DESOLATION_SMALL, BULLET_LARVA_NEST_SMALL, BULLET_MANIFOLD_ORB_SMALL, BULLET_GREEN_BLAT, BULLET_EVIL_EEL, BULLET_YELLOW_PULSE, BULLET_CIRCLES, BULLET_SHOCK, BULLET_SQUIRMY, BULLET_BURST, BULLET_BURNING_DRAGGED, BULLET_SEEKER1, BULLET_SEEKER2, BULLET_SEEKER3, BULLET_SEEKER4, BULLET_BLUE_BLAT, BULLET_BLAST, BULLET_E_BOMB, BULLET_E_BOMB2, BULLET_TWIRLY1, BULLET_TWIRLY2, BULLET_WINGS1, BULLET_WINGS2, BULLET_WINGS3, BULLET_BLOCKS, BULLET_THICK_SHOCK, BULLET_WORM_BOMB, BULLET_CIRCLES2, BULLET_EVIL_WORM, BULLET_FORK1, BULLET_FORK2, BULLET_FORK3, BULLET_MINE1, BULLET_MINE2, BULLET_MINE3, BULLET_MINE4, BULLET_BOLT, BULLET_CIRCLER, BULLET_YELLOW_BLAT, BULLET_BFLAK, BULLET_YELLOW_FLAK, BULLET_PUFFY3, BULLET_PUFFY4, BULLET_EVIL_STAR, BULLET_PULSE1, BULLET_PULSE2, BULLET_TOXIC_SUN, BULLET_TOXIC_FLARE, BULLET_FLOWER, BULLET_PETAL1, BULLET_PETAL2, BULLET_BIGBALL1, BULLET_BIGSEEKER, BULLET_BIGWINGS1, BULLET_BIGWINGS2, BULLET_BIGWINGS3, BULLET_BIGCIRCLES, BULLET_ORBIT, BULLET_ATTRACTOR_LINE, BULLET_DISRUPT1, BULLET_DISRUPT1_DROP, BULLET_DISRUPT2, BULLET_DISRUPT3, BULLET_SPORE, BULLET_FLOWER2, BULLET_TRI1, BULLET_TRI2, BULLET_TRI3, BULLET_OVERTRI, BULLET_CLAW, BULLET_TURN_WORM, BULLET_ZAP_DRAG, BULLET_JET, BULLET_TWISTY, BULLET_TWIRLY3, BULLET_CHARGE_LINE, BULLET_CHARGE, BULLET_OVERPULSE, BULLET_SLIVER, BULLET_NOVA, BULLET_HOLE, BULLET_HOLE_LINE, BULLET_ZIGZAG1, BULLET_MBOMB, BULLET_CRYSTAL1, BULLET_CRYSTAL2, BULLET_SWIRL1, BULLET_SWIRL2, BULLET_BFLAK2, BULLET_CURVEY, BULLET_LINE_PULSE, BULLET_OVERBLOCKS, BULLET_ZIGZAG2, BULLET_FLAME }; enum { WEAPON_WOODEN_DARTS, WEAPON_SNOW_DARTS, WEAPON_SILVER_TEETH, WEAPON_ICE_DARTS, WEAPON_FROZEN_BREATH, WEAPON_BRASS_TEETH, WEAPON_SHOCK_PATH, WEAPON_CRYSTAL_TEETH, WEAPON_GOLDEN_NEEDLES, WEAPON_PARTICLE_SPITTER, WEAPON_CRYSTAL_SPINES, WEAPON_GOLDEN_PATH, WEAPON_NUMEROUS_DARTS, WEAPON_NUMEROUS_BLADES, WEAPON_FAR_SPITTER, WEAPON_BURNING_SPIRIT }; enum { WPN_DARTS, // like wooden darts WPN_BURST, // like numerous darts (all equal) WPN_SPINES, // high-speed WPN_TEETH // long-range }; enum { SECOND_NONE, SECOND_FURIOUS_ORB, SECOND_BURNING_EYE, SECOND_LARVA_NEST, SECOND_MANIFOLD_ORB, SECOND_EYE_DESOLATION, SECOND_TERROR_EELS, SECOND_PANIC_EELS, SECOND_WORMS_SORROW, SECOND_WORMS_AGONY, SECOND_FROZEN_STARS, SECOND_FROZEN_TEETH, SECOND_TOXIC_SUN, SECOND_FLOWER, SECOND_SPORES, SECOND_CLAWS, TOTAL_SECONDS }; enum { ENEMY_NONE, ENEMY_GUARDIAN1, ENEMY_PUFFER1, ENEMY_BRACKET1, ENEMY_WORMER1, ENEMY_HEAD1, ENEMY_HEAD1_EYE1, ENEMY_HEAD1_EYE2, ENEMY_HEAD1_EYE3, ENEMY_PUFFER2, ENEMY_SPINNER1, ENEMY_SPINNER2, ENEMY_SPINNER3, ENEMY_SPINNER4, ENEMY_SPINNER5, ENEMY_BRACKET2, ENEMY_BRACKET3, ENEMY_BRACKET4, ENEMY_BRACKET4_TURRET, ENEMY_FIGHTER1, ENEMY_FIGHTER2, ENEMY_FIGHTER3, ENEMY_FIGHTER4, ENEMY_FIGHTER5, ENEMY_BOMBER1, ENEMY_BOMBER2, ENEMY_BOMBER3, ENEMY_CRUISER1, ENEMY_CRUISER1_TURRET, ENEMY_GUARDIAN2, ENEMY_GUARDIAN3, ENEMY_SPIKEY1, ENEMY_SPIKEY2, ENEMY_SPIKEY3, ENEMY_SPIKEY4, ENEMY_SPIKEY5, ENEMY_WORMER2, ENEMY_WORMER3, ENEMY_FORKER1, ENEMY_FORKER2, ENEMY_MINER1, ENEMY_MINER2, ENEMY_MINER3, ENEMY_MINER3_TURRET, ENEMY_CRUISER2, ENEMY_CRUISER2_TURRET, ENEMY_CRUISER3, ENEMY_CRUISER3_TURRET, ENEMY_CRUISER4, ENEMY_CRUISER4_TURRET, ENEMY_BOSS1_1, ENEMY_BOSS1_2, ENEMY_BOSS1_3, ENEMY_BOSS1_TURRET1, ENEMY_BOSS1_TURRET2, ENEMY_BOSS1_TURRET3, ENEMY_CIRCLER1, ENEMY_BLATTER1, ENEMY_BLATTER2, ENEMY_BLATTER3, ENEMY_BLATTER4, ENEMY_BLATTER5, ENEMY_MINEFIELDER1, ENEMY_BLOATER1, ENEMY_BLOATER2, ENEMY_BOSS2, ENEMY_BOSS2_TURRET1, ENEMY_BOSS2_TURRET2, ENEMY_BOSS2_TURRET3, ENEMY_BOSS2_TURRET4, ENEMY_SHIELDER1, ENEMY_PUFFER3, ENEMY_PUFFER4, ENEMY_PULSER1, ENEMY_PULSER2, ENEMY_ZAPPER1, ENEMY_MULTI1, ENEMY_MULTI2, ENEMY_MULTI3, ENEMY_DEFENDER1, ENEMY_DEFENDER1_TURRET1, ENEMY_DEFENDER1_TURRET2, ENEMY_DEFENDER1_TURRET3, ENEMY_OVERSPINNER, ENEMY_OVERSPIKEY, ENEMY_UNDERSPIKEY, ENEMY_OVERBLATTER, ENEMY_DEFENDER2, ENEMY_DEFENDER2_TURRET1, ENEMY_DEFENDER2_TURRET2, ENEMY_DEFENDER2_TURRET3, ENEMY_DEFENDER3, ENEMY_DEFENDER3_TURRET1, ENEMY_DEFENDER3_TURRET2, ENEMY_DEFENDER3_TURRET3, ENEMY_DEFENDER3_TURRET4, ENEMY_DEFENDER3_TURRET5, ENEMY_DEFENDER3_TURRET6, ENEMY_ORBITER1, ENEMY_ORBITER2, ENEMY_ORBITER3, ENEMY_ATTRACTOR, ENEMY_DISRUPTER1, ENEMY_DISRUPTER2, ENEMY_DISRUPTER3, ENEMY_TRIANGLER1, ENEMY_TRIANGLER2, ENEMY_TRIANGLER3, ENEMY_OVERTRIANGLER, ENEMY_OVERTRIANGLER_TURRET, ENEMY_LEAPER1, ENEMY_LEAPER2, ENEMY_WORMER4, ENEMY_BEAMER1, ENEMY_BEAMER2, ENEMY_OVERBLATTER2, ENEMY_OVERDISRUPTER, ENEMY_GUARDIAN4, ENEMY_GUARDIAN5, ENEMY_OVERZAPPER, ENEMY_BRACKET5, ENEMY_BOSS2_2, ENEMY_BOSS2_3, ENEMY_BOSS3_1, ENEMY_BOSS3_2, ENEMY_BOSS3_3, ENEMY_MESSENGER, ENEMY_SHADOW1, ENEMY_SHADOW2, ENEMY_BOSS3_TURRET1, ENEMY_BOSS3_TURRET2, ENEMY_BOSS3_TURRET3, ENEMY_WAVER1, ENEMY_WAVER2, ENEMY_CURVE1, ENEMY_CURVE2, ENEMY_CURVE3, ENEMY_UNDERSPIKEY2, ENEMY_UNDERSPIKEY3, ENEMY_OVERSPIKEY2, ENEMY_DEAD_TRI1, ENEMY_DEAD_TRI2, ENEMY_DEAD_TRI3, /* ENEMY_BOSS3, ENEMY_BOSS3_TURRET1, ENEMY_BOSS3_TURRET2, ENEMY_BOSS3_TURRET3, ENEMY_BOSS3_TURRET4,*/ NO_ENEMY_TYPES }; // can't have entries above without eclass entries or the whole world will collapse enum { AI_NONE, AI_DRIFTER, // chooses a random location and goes there, then chooses another. etc AI_STINGER, // darts randomly around AI_PERIODIC_STINGER, // darts around at specified intervals AI_TURRET, // just sits there and rotates AI_FIGHTER, // turns to face target and flies by, then chooses a random dest, then returns AI_BOMBER, // a lot like fighter AI_CRUISER, // like drifter, but turns to face direction moved AI_AUTO, // orbitals AI_LEAPER, // cross between fighter and periodic stinger AI_FOLLOWER, // like drifter, but destination is player's location at the time AI_BEAMER // drifter, but special firing code }; enum { ROLE_TARGET, ROLE_TURRET, ROLE_EXTRA, ROLE_DEAD, ROLE_BOSS, ROLE_MINIBOSS, }; enum { WPN_NONE, WPN_ZAPPER }; enum { SYST_NONE, SYST_WPN_ZAPPER }; enum { BRAKES_NONE, BRAKES_RETRO, BRAKES_DRAG }; enum { SHIELD_NONE, SHIELD_LOWFREQ, SHIELD_MEDIUMFREQ, SHIELD_HIGHFREQ }; enum { SLIDE_NO, SLIDE_YES }; enum { CLOUD_NONE, CLOUD_SPECK, CLOUD_TRAIL1, CLOUD_SMALL_CIRCLE, CLOUD_SMALL_TRANS_CIRCLE, CLOUD_MED_CIRCLE, CLOUD_MED_TRANS_CIRCLE, CLOUD_LARGE_CIRCLE, CLOUD_LARGE_TRANS_CIRCLE, CLOUD_FADING_LINE, CLOUD_SHRINKING_LINE, CLOUD_SHOCKWAVE, CLOUD_BURSTLET, CLOUD_GROWING_CIRCLE, CLOUD_LINE_SHADOW, CLOUD_SHRINKING_CIRCLE, CLOUD_SPAWNER, CLOUD_LIGHT, CLOUD_BANG, CLOUD_BLUE_BLOB, CLOUD_BLUE_BLOB2, CLOUD_FLECK, CLOUD_SMALL_FADING_CIRCLE, CLOUD_ORANGE_BLOB, CLOUD_ORANGE_BLOB2, CLOUD_GREEN_BLOB, CLOUD_GREEN_BLOB2, CLOUD_LARGE_FADING_CIRCLE, CLOUD_TRANS_FADING_CIRCLE, CLOUD_BLAST_CIRCLE, CLOUD_MED_TRANS_FADING_CIRCLE, CLOUD_SMALL_SHRINKING_CIRCLE, CLOUD_BLOCK1, CLOUD_BLOCK2, CLOUD_BLOCK3, CLOUD_BLOCK4, CLOUD_THICK_SHOCK_CIRCLE, CLOUD_CIRCLER_IN, CLOUD_FLAK_BURST, CLOUD_SHIELD_LINE, CLOUD_SQUAREY, CLOUD_PULSER1_V, CLOUD_PULSER1_H, CLOUD_PULSER2_V, CLOUD_PULSER2_H, CLOUD_SEEKER_CIRCLE, CLOUD_ATTRACT, CLOUD_TRANS_FADING_LINE, CLOUD_DRIVE_CIRCLE, CLOUD_LARGE_TRANS_FADING_CIRCLE, CLOUD_BIG_BLAST_CIRCLE, CLOUD_DISTORT, CLOUD_JET_CIRCLE1, CLOUD_JET_CIRCLE2, CLOUD_TWISTY_CIRCLE, CLOUD_TWIRLY_CIRCLE, CLOUD_SHATTER1, CLOUD_SHATTER2, CLOUD_BLOCK5, CLOUD_TRI1, // not used CLOUD_TRI2, CLOUD_TRI3, CLOUD_OVERTRI, // to here. CLOUD_FLAME_CIRCLE, CLOUD_SHRINKING_FADING_CIRCLE //CLOUD_BLUE_BLOB, //CLOUD_BLUE_BLOB2 }; enum { BANG_NONE, BANG_RED, BANG_ORANGE, BANG_YELLOW, BANG_BLUE, BANG_GREEN, BANG_GREY }; enum { UPG_NONE, UPG_SPEED, // increases speed + turning // special: aerodynamics (may not be a benefit, really) UPG_ARMOUR, // increases armour // special: shield, then increase shield UPG_POWER, // increases cannon damage // special: plasma bolt UPG_AUTOFIRE, // increases cannon fire rate + scatter // special: sidekick UPG_MULTIFIRE, // increases: cannon shot spread // special: backwards fire UPG_PROJECT, // increases cannon speed + range // special: lightning bolt UPG_WARHEAD, // increases missile damage // special: cluster warhead UPG_SEEKER, // makes missiles track nearest target, then increases turn rate // special: // 1. Dauntless (seekers don't explode when target does; acquire new one) // 2. Smart guidance - go for most important target // 3. Target Analysis - send only enough missiles to destroy; prefer weaker // targets if they'll be destroyed UPG_ROCKET, // increases missile acceleration, but not range by much // special: long range UPG_TUBES, // increases number of missiles // special: extra mini-missiles, ?random directions, not seeking UPG_SLIDE, // gives, then increases, slide rockets // special: retro rockets (replaces drag field) UPG_BOMB, // increases bomb damage // special: dispersion (explosion size) UPG_LAUNCHER, // adds more bombs (side-bombs are smaller) // special: cluster bombs (main one only?) UPG_LOADER, // increases missile firing rate UPG_SPECIAL, UPG_TURRET, UPG_SIDEKICK, UPG_HEAVY, UPG_ORBITAL, UPG_BACKFIRE, UPG_SHIELD, UPG_RETRO, UPG_ROAMER, UPG_MINIMISSILES, UPG_DRIFT, /* REMEMBER: When adding something which upgrades a secondary weapon, must make sure that the secondary weapon is switched on when the upgrade is gained. */ MAX_UPGRADES }; enum { DRIVE_THRUST, DRIVE_SLIDE, DRIVE_RETRO }; enum { DUEL_10_POINTS, DUEL_30_POINTS, DUEL_3_MINUTES, DUEL_10_MINUTES }; #define LOCK_ACTOR0 -3 #define LOCK_ACTOR1 -2 /* enum { SPECIAL_SHIELD, SPECIAL_ }; */ struct optionstruct { int sound_init; // if 0, sound isn't initialised at all. Changed in config file only. int sound_mode; // mono, stereo, reversed, off int run_vsync; // on or off int sound_volume; // sound fx volume; if 0 sound effects not played int ambience_volume; // if 0 ambience not played int resolution; int unlock_purple; int unlock_void; int unlock_god; int colour_text; }; struct starstruct { int colour [2]; int x [2]; int y [2]; char distance [2]; }; struct gamestruct { int users; int type; int duel_mode; int duel_crawlies; int duel_handicap [2]; int duel_level; int duel_leader_handicap; int duel_winner; int symbols_given; // ta and duel int ta_enemies [15]; int ta_extra_list [15]; int ta_symbol_count; long ta_total_time; // probably doesn't need to be long int ta_level; int ta_enemy_index; int single_player; int ships_left; float drag; int mode_purple; int mode_void; int mode_god; }; struct arenastruct { int max_x; int max_y; int level; int colour1; int colour2; int colour3; int next_target; // int target [3]; // int targets_left [3]; int enemy_list [50]; int symbol_list [50]; int list_index; int symbol_index; int total_targets; int targets_left_total; int next_target_upgrade; int max_targets_in_level; int battle_type; int next_non_target; int max_non_targets_in_level; int time_left; int level_finished; int seconds_left_when_finished; int time_bonus; int game_over; int new_level_sign; int max_crawlies_in_level; int next_crawly; int next_crawly_upgrade; int crawlies_created; int between_target_upgrades; int between_crawly_upgrades; int hostile; int eye_x [MAX_EYES]; int eye_y [MAX_EYES]; int eye_recycle [MAX_EYES]; int eye_angle [MAX_EYES]; int eye_colour1; int eye_colour2; int eye_colour3; int eyes_on_level; int waver_on_level; }; #define ENEMY_LIST_END -1 #define ENEMY_LIST_WAIT -2 #define ENEMY_LIST_EMPTY -3 enum { BATTLE_NORMAL, BATTLE_BOSS, BATTLE_VARIOUS }; struct playerstruct { int actor_controlled; int user; // int ships_left; char player_cmd [NO_CMDS]; char link_fire; int link_toggle_delay; int ship; int score; int duel_score; int keys [NO_CMDS]; int screen_shake_x; int screen_shake_y; // _time is in actor }; struct actorstruct { int x, y, x_speed, y_speed, angle, base_angle; int moving_angle; // the angle at which it's moving. Set in drag_actor, // so may not be very reliable but is good enough for friction burn and // ai routines etc. int type; int ship; int controller; char actor_cmd [NO_CMDS]; int drag_amount; // amount that actor is accelerated by drag int radius; int edge_radius; char in_play; int turning; int thrust; int slide; int mass; int recharge; int armour; int max_armour; int upgrade_slot; int upgrades [NO_UPGRADES]; // referred to by slot int upgrade_specials [NO_UPGRADES]; int upgrade_structure [NO_UPGRADES]; int upgraded_system [MAX_UPGRADES]; // referred to by UPG_ index int just_upgraded; int just_upgraded_timeout; int shield_pulse; int recycle1; int recycle2; int cannon_status; int bomb_status; int shield; int max_shield; int shield_recharge; /* int shield_type; int shield_strength1; int shield_strength2; int shield_pulse; int shield_angle; int system [3]; int system_status1 [3]; int system_status2 [3]; int max_energy; int energy;*/ int brakes; int brake_strength; char dragging; // is 1 if drag field active int just_collided; int spawn_delay; int grace_period; int repairing; int secondary_weapon; int seek_x; int seek_y; int lock; int new_lock; int sidekick_x [5]; int sidekick_y [5]; int sidekick_x_speed [5]; int sidekick_y_speed [5]; int sidekick_angle [5]; int sidekick_recycle; int sidekicks; int turret_lock; int turret_recycle; int heavy_recycle; int backfire_recycle; int exhaust_distance_x; int exhaust_distance_y; // int exhaust_displacement; int retro_distance_x; int retro_distance_y; // int retro_displacement; int slide_distance_x; int slide_distance_y; // int slide_displacement; int flash_distance; int engine_demand; int orbital_angle; int orbital_spin; int hurt_pulse; int drive_sound [3]; int ability [4] [4]; int primary; int secondary; int secondary_burst; int secondary_burst_recycle; int screen_shake_time; // shake_x/_y are in player int total_power; int next_spawn_x; int next_spawn_y; }; enum { PRIMARY_WOODEN_DARTS, PRIMARY_ICE_DARTS, PRIMARY_SILVER_TEETH, PRIMARY_SNOW_DARTS, PRIMARY_FROZEN_BREATH, PRIMARY_BRONZE_DARTS, PRIMARY_BRASS_TEETH, PRIMARY_CRYSTAL_TEETH, PRIMARY_GOLDEN_NEEDLES, PRIMARY_PARTICLE_SPIT, PRIMARY_CRYSTAL_SPINES, PRIMARY_GOLDEN_TEETH }; struct bulletstruct { int x, y, x_speed, y_speed; int x2, y2; int type; int owner; int timeout; int size; int damage; int left_owner; int mass; int angle; int colours [4]; int special1; // missiles: acceleration // bombs: explosion size // enemy seeker blobs: actor target // enemy prong: spin direction (applied in display.c) int special2; // missiles: number of clusters // bombs: number of clusters int special3; // missiles: seeker target int special4; // missiles: seeker turn rate int special5; // missiles: seeker guidance system }; struct cloudstruct { int x, y, x_speed, y_speed; int x2, y2; int type; unsigned char seed; int angle; int timeout; int tickrate; int delta_tickrate; int status; int colour [5]; }; struct pickupstruct { int x, y, x_speed, y_speed; int counter; int type; int subtype; int timeout; int radius; }; struct enemystruct { int x, y, x_speed, y_speed, angle, base_angle; int moving_angle; int type; int subtype; int attacking; // which actor is it attacking (-1 for none) int drag_amount; // amount that enemy is accelerated by drag char drag_affected; // is it affected by drag? int radius; int edge_radius; int recycle; // char in_play; int armour; int hurt_pulse; int shield; int max_shield; int attribute [NO_ENEMY_ATTRIBUTES]; int colours [3]; int hurt_pulse_colour1; int hurt_pulse_colour2; unsigned char counter; int just_collided; int mass; int carrying_pickup; int burst_fire; int target; int turret [MAX_TURRETS]; int turret_main; // whose turret it it? int turret_index; // which turret is it? int x_dest; int y_dest; int slew_dir; int next_impulse; int ta_time_left; // time attack - time before it warps out }; struct enemy_classification { int max_armour; int level; int common; int score; int radius; // for hit calculation int edge_radius; // for edge-of-map collision float drag_amount; int mass; // int default_attributes [NO_ENEMY_ATTRIBUTES]; int ai_type; int generous; int colour1; int colour2; int turrets; int pitch; // sound effects - hit and explodes int acceleration; int impulse_delay; int range; int slew; int role; }; enum { PITCH_GUARDIAN, PITCH_FIGHTER, PITCH_SMALL_SPINNER, PITCH_LARGE_SPINNER, PITCH_HEAVY_SPINNER, PITCH_BOSS1, PITCH_BOSS2, PITCH_BOSS3, PITCH_MINIBOSS1, PITCH_MINIBOSS2, PITCH_TURRET1, PITCH_TURRET2, PITCH_BRACKET, PITCH_MEDIUM, PITCH_HEAVY }; overgod-1.0/displ_in.c0000644000175000001440000032020610311314664013776 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: displ_in.c History: 11/9/2005 - Version 1.0 finalised This file contains: - bitmap loading and preparation The bitmaps aren't organised into a datafile because I find datafiles a bit unwieldy. */ #include "allegro.h" #include #include "config.h" #include "globvars.h" //#include "stuff.h" #include "display.h" #include "palette.h" #include "tile.h" //#define FIX_FONT extern int debug_info; extern BITMAP *player1; extern BITMAP *player2; extern BITMAP *ship_bitmaps [NO_SHIP_TYPES] [17]; extern BITMAP *gb_ship_bitmaps [GB_SHIP_TYPES] [17]; /* White (lines only) Blue Green Amber Red */ extern RLE_SPRITE *large_ships [16] [5]; extern BITMAP *enemy1_bmp [ENEMY1_BMPS]; extern RLE_SPRITE *enemy1_rle [ENEMY1_RLES]; extern RLE_SPRITE *enemy2_rle [ENEMY2_RLES]; extern RLE_SPRITE *enemy3_rle [ENEMY3_RLES]; extern BITMAP *enemy_bmps [ENEMY_BMPS]; extern RLE_SPRITE *enemy4_rle [ENEMY4_RLES]; extern RLE_SPRITE *enemy5_rle [ENEMY5_RLES]; extern RLE_SPRITE *enemy6_rle [ENEMY6_RLES]; extern RLE_SPRITE *enemy7_rle [ENEMY7_RLES]; extern RLE_SPRITE *enemy8_rle [ENEMY8_RLES]; extern RLE_SPRITE *enemy9_rle [ENEMY9_RLES]; extern RLE_SPRITE *small1_rle [SMALL1_RLES]; extern RLE_SPRITE *small3_rle [SMALL3_RLES]; extern BITMAP *small4_bmp [SMALL4_BMPS]; extern BITMAP *small2_bmp [SMALL2_BMPS]; extern BITMAP *superjelly_bmp [2]; extern BITMAP *pretile_bmp [NO_PRETILE_BMPS]; extern BITMAP *pretile_m_bmp [NO_MAZES] [NO_PRETILE_M_BMPS]; extern BITMAP *redbang_bmp [50]; extern RLE_SPRITE *light_rle [100]; extern BITMAP *shield_bmp [SHIELD_BMPS]; extern RLE_SPRITE *tile_background; void bitmap_error(const char errtxt []); void make_rle_enemy1(BITMAP *source_bmp, int which_enemy, int width, int height); void make_rle_enemy2(BITMAP *source_bmp, int which_enemy, int width, int height); void make_rle_enemy3(BITMAP *source_bmp, int which_enemy, int width, int height); void make_rle_enemy4(BITMAP *source_bmp, int which_enemy, int width, int height); void make_rle_enemy5(BITMAP *source_bmp, int which_enemy, int width, int height); void make_rle_small1(BITMAP *source_bmp, int which_small, int width, int height); void make_rle_small3(BITMAP *source_bmp, int which_small, int width, int height); void make_bmp_small2(BITMAP *source_bmp, int which_small, int width, int height); void make_bmp_small4(BITMAP *source_bmp, int which_small, int width, int height); void make_rle_enemy6(BITMAP *source_bmp, int which_enemy, int width, int height); void make_rle_enemy7(BITMAP *source_bmp, int which_enemy, int width, int height); void make_rle_enemy8(BITMAP *source_bmp, int which_enemy, int width, int height); void make_rle_enemy9(BITMAP *source_bmp, int which_enemy, int width, int height); void make_rle_large_ship(BITMAP *source_bmp, int which_ship); void make_bmp_enemy(BITMAP *source_bmp, int which_enemy, int width, int height); //void make_superjelly_bmps(void); void make_bang_bmps(void); void make_light_bmps(void); void make_bmp_tiles(void); void make_actor_sprites(int at); void progress_update(const char progtxt []); extern FONT *font2; extern FONT *small_font; extern BITMAP *level_bmp; extern BITMAP *distortion_mask; extern BITMAP *crystal_bmp; extern RGB light_palet [256]; extern RLE_SPRITE *waver1_circle; extern RLE_SPRITE *waver2_circle; void init_display(void) { debug_info = 0; player1 = NULL; player2 = NULL; level_bmp = NULL; RGB temp_palette2 [1024]; // these seem to serve as a buffer against strange random corruptions of temp_palette. I don't understand this at all. RGB temp_palette [256]; RGB temp_palette3 [1024]; DATAFILE *datf = load_datafile("gfx//data.dat"); if (datf == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Error: Couldn't find data.dat! \n"); allegro_message("\n\r"); exit(1); } //progress_update("Data.dat loaded"); font = (FONT *)datf[1].dat; font2 = (FONT *)datf[0].dat; small_font = (FONT *)datf[2].dat; // text_mode(-1); progress_update("Data.dat"); textprintf_centre_ex(screen, font2, 300, 100, COLOUR_YELLOW8, -1, "{__loading__"); textprintf_centre_ex(screen, font, 300, 100, -1, -1, "{__loading__"); rectfill(screen, 390, 117, 450, 118, COLOUR_YELLOW8); //rest(1000); BITMAP *temp_bitmap = load_bitmap("gfx//gb_si.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (ships)"); } BITMAP *temp_bitmap2 = create_bitmap(24, 22); if (temp_bitmap2 == NULL) { bitmap_error("temp_bitmap2 (ships)"); } // blit(temp_bitmap, temp_bitmap2, 1, 1, 0, 0, 11, 11); // blit(temp_bitmap, temp_bitmap2, 15, 1, 0, 0, 13, 13); int i; int j; int k; int l; int m; for (i = 0; i < 528; i ++) { for (j = 0; j < 249; j ++) { if (getpixel(temp_bitmap, i, j) == 17) // || getpixel(temp_bitmap, i, j) == 17) continue; m = 0; for (k = -1; k < 2; k ++) { for (l = -1; l < 2; l ++) { if (k == 0 && l == 0) continue; if (getpixel(temp_bitmap, i + k, j + l) != 0 && getpixel(temp_bitmap, i + k, j + l) != 17 && getpixel(temp_bitmap, i + k, j + l) != COLOUR_GREY2) m ++; } } if (getpixel(temp_bitmap, i, j) == 0) { if (m > 0) putpixel(temp_bitmap, i, j, COLOUR_GREY2); } else { if (getpixel(temp_bitmap, i, j) == 2) putpixel(temp_bitmap, i, j, COLOUR_GREY6); else putpixel(temp_bitmap, i, j, COLOUR_GREY5); } /* else { if (getpixel(temp_bitmap, i, j) == 2) putpixel(temp_bitmap, i, j, COLOUR_GREY6); else putpixel(temp_bitmap, i, j, COLOUR_GREY5); } */ } } progress_update("Vehicles"); /* for (i = 0; i < 528; i ++) { for (j = 0; j < 249; j ++) { if (getpixel(temp_bitmap, i, j) == 0 || getpixel(temp_bitmap, i, j) == 17) continue; m = 0; for (k = -1; k < 2; k ++) { for (l = -1; l < 2; l ++) { if (k == 0 && l == 0) continue; if (getpixel(temp_bitmap, i + k, j + l) == 0) m ++; } } if (m > 1) putpixel(temp_bitmap, i, j, COLOUR_GREY3); else { if (getpixel(temp_bitmap, i, j) == 2) putpixel(temp_bitmap, i, j, COLOUR_GREY6); else putpixel(temp_bitmap, i, j, COLOUR_GREY5); } } } */ for (i = 0; i < GB_SHIP_TYPES; i ++) { /* blit(temp_bitmap, temp_bitmap2, (i * 14) + 1, 1, 0, 0, 13, 13); for (j = 0; j < 17; j ++) { ship_bitmaps [i] [j] = create_bitmap(13, 13); if (ship_bitmaps [i] [j] == NULL) { bitmap_error("Ship bitmaps 0"); } clear_bitmap(ship_bitmaps [i] [j]); blit(temp_bitmap, ship_bitmaps [i] [j], (j * 14) + 1, (i * 14) + 1, 0,0,13,13);*/ // if (FALSE)//i != 11)// && i != 1 && i != 3 && i != 4 && FALSE) // if (i != 12 && i != 13 && i != 14 && i != 15) { for (j = 0; j < 17; j ++) { gb_ship_bitmaps [i] [j] = create_bitmap(24, 22); if (gb_ship_bitmaps [i] [j] == NULL) { bitmap_error("Ship bitmaps 0"); } clear_bitmap(gb_ship_bitmaps [i] [j]); blit(temp_bitmap, gb_ship_bitmaps [i] [j], (j * 31) + 1, (i * 31) + 1, 0,0,24,22); } } // else // make_actor_sprites(i); // rotate_sprite(ship_bitmaps [i] [j], temp_bitmap2, 0, 0, itofix(j * 4)); } // save_bitmap("outsh.bmp", /* blit(temp_bitmap, temp_bitmap2, 15, 1, 0, 0, 13, 13); for (i = 0; i < 17; i ++) { ship_bitmaps [1] [i] = create_bitmap(13, 13); if (ship_bitmaps [1] [i] == NULL) { bitmap_error("Ship bitmaps 0"); } clear_bitmap(ship_bitmaps [1] [i]); rotate_sprite(ship_bitmaps [1] [i], temp_bitmap2, 0, 0, itofix(i * 4)); } blit(temp_bitmap, temp_bitmap2, 10, 1, 0, 0, 8, 8); */ destroy_bitmap(temp_bitmap); destroy_bitmap(temp_bitmap2); progress_update("More Vehicles"); #ifdef FIX_FONT RGB font_palette [256]; // BITMAP *fbmp = load_bitmap("gfx//font_cel.bmp", font_palette); BITMAP *fbmp = load_bitmap("gfx//font_oc.bmp", font_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (font_cel)"); } // int k; for (i = 0; i < 1000; i ++) { for (j = 0; j < 1000; j ++) { k = getpixel(fbmp, i, j); // if (k >= GC_BLACK && k <= GC_BLUE8) // k += 48; // if (k >= COLOUR_GREY2 && k <= COLOUR_WHITE) // k = COLOUR_GREY4; if (k == 111) k = COLOUR_GREY4; if (k == 110) k = COLOUR_GREY1; putpixel(fbmp, i, j, k); /* switch(getpixel(fbmp, i, j)) { case 110: putpixel(fbmp, i, j, GC_GREY1); break; case 111: putpixel(fbmp, i, j, GC_GREY6); break; case 28: putpixel(fbmp, i, j, GC_GREY6); break; case 26: putpixel(fbmp, i, j, GC_GREY6); break; case 24: putpixel(fbmp, i, j, GC_GREY6); break; }*/ } } /* for (i = 0; i < 1000; i ++) { for (j = 0; j < 1000; j ++) { if (getpixel(temp_bitmap, i, j) == 255) continue; for (k = -1; k < 2; k ++) { for (l = -1; l < 2; l ++) { if (k == 0 && l == 0) continue; if (getpixel(temp_bitmap, i + k, j + l) != 0 && getpixel(temp_bitmap, i + k, j + l) != 255 && getpixel(temp_bitmap, i + k, j + l) != COLOUR_GREY2) m ++; } } if (getpixel(temp_bitmap, i, j) == 0) { if (m > 0) putpixel(temp_bitmap, i, j, COLOUR_GREY2); } else { if (getpixel(temp_bitmap, i, j) == 2) putpixel(temp_bitmap, i, j, COLOUR_GREY6); else putpixel(temp_bitmap, i, j, COLOUR_GREY5); } */ save_bitmap("font_oc.bmp", fbmp, font_palette); #endif #ifdef GENERATE_SHIPS temp_bitmap = load_bitmap("gfx//gb_ship.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("gb_ship"); } temp_bitmap2 = create_bitmap(24, 22); if (temp_bitmap2 == NULL) { bitmap_error("temp_bitmap2 (gb_ships)"); } blit(temp_bitmap, temp_bitmap2, 1, 1, 0, 0, 24, 24); // blit(temp_bitmap, temp_bitmap2, 15, 1, 0, 0, 13, 13); // int i; // int j; progress_update("Vehicles"); for (i = 0; i < GB_SHIP_TYPES; i ++) { blit(temp_bitmap, temp_bitmap2, (i * 31) + 1, 1, 0, 0, 24, 24); for (j = 0; j < 17; j ++) { gb_ship_bitmaps [i] [j] = create_bitmap(24, 24); if (gb_ship_bitmaps [i] [j] == NULL) { bitmap_error("Gb_ship bitmaps"); } clear_bitmap(gb_ship_bitmaps [i] [j]); rotate_sprite(gb_ship_bitmaps [i] [j], temp_bitmap2, 0, 0, itofix(j * 4.15)); } } destroy_bitmap(temp_bitmap); destroy_bitmap(temp_bitmap2); progress_update("More Vehicles"); // Let's make the output ship bitmap: BITMAP *outp = create_bitmap((17 * 31) + 1, (17 * 31) + 1); if (outp == NULL) { bitmap_error("Output"); } clear_bitmap(outp); for (i = 0; i < GB_SHIP_TYPES; i ++) { for (j = 0; j < 17; j ++) { hline(outp, 0, i * 31, 18 * 32 + 1, COLOUR_PURPLE8); vline(outp, j * 31, 0, GB_SHIP_TYPES * 31 + 1, COLOUR_PURPLE8); if (ship_bitmaps [i] [j] != NULL) draw_sprite(outp, gb_ship_bitmaps [i] [j], j * 31 + 1, i * 31 + 1); } } blit(outp, screen, 0,0,5,5, (16 * 31) + 1, (16 * 31) + 1); save_bitmap("gb_so.bmp", outp, temp_palette); while (key [KEY_K] == 0) { }; #endif // destroy_bitmap(outp); // Load in enemy bitmaps: temp_bitmap = load_bitmap("gfx//gb_nme1.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (gb_nme1.bmp not loaded correctly?)"); } make_rle_enemy4(temp_bitmap, RLE_ENEMY4_GUARDIAN1, 59, 49); make_rle_enemy4(temp_bitmap, RLE_ENEMY4_BRACKET1, 51, 45); make_rle_enemy4(temp_bitmap, RLE_ENEMY4_WORMER1, 61, 50); make_rle_enemy4(temp_bitmap, RLE_ENEMY4_BRACKET2, 55, 38); make_rle_enemy4(temp_bitmap, RLE_ENEMY4_BRACKET3, 55, 49); make_rle_enemy4(temp_bitmap, RLE_ENEMY4_BRACKET4, 69, 49); make_rle_enemy4(temp_bitmap, RLE_ENEMY4_GUARDIAN2, 51, 70); make_rle_enemy4(temp_bitmap, RLE_ENEMY4_GUARDIAN3, 59, 61); make_rle_enemy4(temp_bitmap, RLE_ENEMY4_WORMER2, 61, 50); make_rle_enemy4(temp_bitmap, RLE_ENEMY4_WORMER3, 65, 65); make_rle_enemy4(temp_bitmap, RLE_ENEMY4_FORKER1, 53, 53); make_rle_enemy4(temp_bitmap, RLE_ENEMY4_FORKER2, 53, 53); make_rle_enemy4(temp_bitmap, RLE_ENEMY4_MINER1, 39, 37); make_rle_enemy4(temp_bitmap, RLE_ENEMY4_MINER2, 49, 49); destroy_bitmap(temp_bitmap); progress_update("Enemies 1"); temp_bitmap = load_bitmap("gfx//gb_nme2.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (gb_nme2.bmp not loaded correctly?)"); } make_rle_enemy6(temp_bitmap, RLE_ENEMY6_MINER3, 49, 67); make_rle_enemy6(temp_bitmap, RLE_ENEMY6_CIRCLER1, 69, 45); make_rle_enemy6(temp_bitmap, RLE_ENEMY6_MULTI1, 69, 69); make_rle_enemy6(temp_bitmap, RLE_ENEMY6_MULTI2, 67, 67); make_rle_enemy6(temp_bitmap, RLE_ENEMY6_MULTI3, 65, 65); make_rle_enemy6(temp_bitmap, RLE_ENEMY6_GUARDIAN4, 69, 65); make_rle_enemy6(temp_bitmap, RLE_ENEMY6_GUARDIAN5, 69, 59); make_rle_enemy6(temp_bitmap, RLE_ENEMY6_BRACKET5, 63, 61); make_rle_enemy6(temp_bitmap, RLE_ENEMY6_CURVE1, 69, 53); make_rle_enemy6(temp_bitmap, RLE_ENEMY6_CURVE2, 69, 53); make_rle_enemy6(temp_bitmap, RLE_ENEMY6_CURVE3, 69, 53); destroy_bitmap(temp_bitmap); progress_update("Enemies 2"); //extern BITMAP *enemy_bmps [ENEMY_BMPS]; temp_bitmap = load_bitmap("gfx//gb_nmebm.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (gb_nmebm.bmp not loaded correctly?)"); } make_bmp_enemy(temp_bitmap, BMP_ENEMY_PULSER1_V, 23, 28); make_bmp_enemy(temp_bitmap, BMP_ENEMY_PULSER1_H, 28, 23); make_bmp_enemy(temp_bitmap, BMP_ENEMY_PULSER2_V, 25, 28); make_bmp_enemy(temp_bitmap, BMP_ENEMY_PULSER2_H, 28, 25); destroy_bitmap(temp_bitmap); progress_update("Enemies 3"); temp_bitmap = load_bitmap("gfx//gb_big1.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (gb_big1.bmp not loaded correctly?)"); } make_rle_enemy5(temp_bitmap, RLE_ENEMY5_OVERTRIANGLER, 105, 105); make_rle_enemy5(temp_bitmap, RLE_ENEMY5_DEFENDER1, 131, 67); make_rle_enemy5(temp_bitmap, RLE_ENEMY5_DEFENDER2, 67, 121); make_rle_enemy5(temp_bitmap, RLE_ENEMY5_DEFENDER3, 131, 67); make_rle_enemy5(temp_bitmap, RLE_ENEMY5_OVERDISRUPTER, 41, 139); // make_rle_enemy5(temp_bitmap, RLE_ENEMY5_BOSS1_1, 139, 101); destroy_bitmap(temp_bitmap); progress_update("Enemies 4"); temp_bitmap = load_bitmap("gfx//gb_big2.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (gb_big2.bmp not loaded correctly?)"); } make_rle_enemy7(temp_bitmap, RLE_ENEMY7_BOSS1_1, 189, 224); make_rle_enemy7(temp_bitmap, RLE_ENEMY7_BOSS1_2, 229, 216); make_rle_enemy7(temp_bitmap, RLE_ENEMY7_BOSS1_3, 229, 193); make_rle_enemy7(temp_bitmap, RLE_ENEMY7_BOSS2_2, 247, 213); make_rle_enemy7(temp_bitmap, RLE_ENEMY7_BOSS3_2, 231, 193); make_rle_enemy7(temp_bitmap, RLE_ENEMY7_BEAMER1, 185, 139); make_rle_enemy7(temp_bitmap, RLE_ENEMY7_BEAMER2, 185, 139); destroy_bitmap(temp_bitmap); progress_update("Enemies 5"); temp_bitmap = load_bitmap("gfx//gb_big3.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (gb_big3.bmp not loaded correctly?)"); } make_rle_enemy8(temp_bitmap, RLE_ENEMY8_BOSS3, 239, 239); make_rle_enemy8(temp_bitmap, RLE_ENEMY8_BOSS2, 249, 249); make_rle_enemy8(temp_bitmap, RLE_ENEMY8_BOSS2_3, 265, 241); make_rle_enemy8(temp_bitmap, RLE_ENEMY8_BOSS3_3, 281, 223); destroy_bitmap(temp_bitmap); progress_update("Enemies 6"); temp_bitmap = load_bitmap("gfx//gb_med1.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (gb_med1.bmp not loaded correctly?)"); } make_rle_enemy9(temp_bitmap, RLE_ENEMY9_DISRUPTER1, 89, 25); make_rle_enemy9(temp_bitmap, RLE_ENEMY9_DISRUPTER2, 29, 93); make_rle_enemy9(temp_bitmap, RLE_ENEMY9_DISRUPTER3, 89, 33); make_rle_enemy9(temp_bitmap, RLE_ENEMY9_TRIANGLER1, 73, 73); make_rle_enemy9(temp_bitmap, RLE_ENEMY9_TRIANGLER2, 71, 71); make_rle_enemy9(temp_bitmap, RLE_ENEMY9_TRIANGLER3, 71, 71); make_rle_enemy9(temp_bitmap, RLE_ENEMY9_WORMER4, 83, 83); destroy_bitmap(temp_bitmap); progress_update("Enemies 7"); /* temp_bitmap = load_bitmap("gfx//enemy3.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (enemy3.bmp not loaded correctly?)"); } make_rle_enemy3(temp_bitmap, RLE_ENEMY3_FIREBASE, 133, 133); make_rle_enemy3(temp_bitmap, RLE_ENEMY3_FIREBASE2, 39, 69); make_rle_enemy3(temp_bitmap, RLE_ENEMY3_FIREBASE3, 91, 93); make_rle_enemy3(temp_bitmap, RLE_ENEMY3_BOSS1, 175, 159); make_rle_enemy3(temp_bitmap, RLE_ENEMY3_BOSS3, 155, 147); make_rle_enemy3(temp_bitmap, RLE_ENEMY3_BOSS4, 223, 138); // blit(temp_bitmap, temp_bitmap2, 1, 1, 0, 0, 35, 26); // enemy1_rle [RLE_ENEMY1_STINGER] = get_rle_sprite(temp_bitmap2); // destroy_bitmap(temp_bitmap2); destroy_bitmap(temp_bitmap); // destroy_bitmap(temp_bitmap2);*/ /* progress_update("Enemy3 Loaded"); temp_bitmap = load_bitmap("gfx//small1.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (small1.bmp not loaded correctly?)"); } for (i = RLE_SMALL1_GREEN_BLOB_L; i < SMALL1_RLES; i ++) { make_rle_small1(temp_bitmap, i, 11, 11); } progress_update("Small1 Loaded"); */ temp_bitmap = load_bitmap("gfx//gb_small.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (gm_small.bmp not loaded correctly?)"); } make_rle_small3(temp_bitmap, RLE_SMALL3_GREEN_BLOB_1, 8, 8); make_rle_small3(temp_bitmap, RLE_SMALL3_GREEN_BLOB_2, 8, 8); make_rle_small3(temp_bitmap, RLE_SMALL3_GREEN_BLOB_3, 7, 7); make_rle_small3(temp_bitmap, RLE_SMALL3_GREEN_BLOB_4, 6, 6); make_rle_small3(temp_bitmap, RLE_SMALL3_GREEN_BLOB_5, 5, 5); make_rle_small3(temp_bitmap, RLE_SMALL3_GREEN_BLOB_6, 4, 4); make_rle_small3(temp_bitmap, RLE_SMALL3_GREEN_BLOB_7, 3, 3); make_rle_small3(temp_bitmap, RLE_SMALL3_ORANGE_BLOB_1, 8, 8); make_rle_small3(temp_bitmap, RLE_SMALL3_ORANGE_BLOB_2, 8, 8); make_rle_small3(temp_bitmap, RLE_SMALL3_ORANGE_BLOB_3, 7, 7); make_rle_small3(temp_bitmap, RLE_SMALL3_ORANGE_BLOB_4, 6, 6); make_rle_small3(temp_bitmap, RLE_SMALL3_ORANGE_BLOB_5, 5, 5); make_rle_small3(temp_bitmap, RLE_SMALL3_ORANGE_BLOB_6, 4, 4); make_rle_small3(temp_bitmap, RLE_SMALL3_ORANGE_BLOB_7, 3, 3); make_rle_small3(temp_bitmap, RLE_SMALL3_BLUE_BLOB_1, 8, 8); make_rle_small3(temp_bitmap, RLE_SMALL3_BLUE_BLOB_2, 7, 7); make_rle_small3(temp_bitmap, RLE_SMALL3_BLUE_BLOB_3, 6, 6); make_rle_small3(temp_bitmap, RLE_SMALL3_BLUE_BLOB_4, 6, 6); make_rle_small3(temp_bitmap, RLE_SMALL3_BLUE_BLOB_5, 5, 5); make_rle_small3(temp_bitmap, RLE_SMALL3_BLUE_BLOB_6, 5, 5); make_rle_small3(temp_bitmap, RLE_SMALL3_BLUE_BLOB_7, 3, 3); make_rle_small3(temp_bitmap, RLE_SMALL3_YELLOW_BLOB_1, 8, 8); make_rle_small3(temp_bitmap, RLE_SMALL3_YELLOW_BLOB_2, 8, 8); make_rle_small3(temp_bitmap, RLE_SMALL3_YELLOW_BLOB_3, 7, 7); make_rle_small3(temp_bitmap, RLE_SMALL3_YELLOW_BLOB_4, 6, 6); make_rle_small3(temp_bitmap, RLE_SMALL3_YELLOW_BLOB_5, 5, 5); make_rle_small3(temp_bitmap, RLE_SMALL3_YELLOW_BLOB_6, 4, 4); make_rle_small3(temp_bitmap, RLE_SMALL3_YELLOW_BLOB_7, 3, 3); make_rle_small3(temp_bitmap, RLE_SMALL3_PULSE1, 12, 12); make_rle_small3(temp_bitmap, RLE_SMALL3_PULSE2, 12, 12); make_rle_small3(temp_bitmap, RLE_SMALL3_PULSE3, 12, 12); make_rle_small3(temp_bitmap, RLE_SMALL3_PULSE4, 12, 12); make_rle_small3(temp_bitmap, RLE_SMALL3_PULSE2_1, 12, 12); make_rle_small3(temp_bitmap, RLE_SMALL3_PULSE2_2, 12, 12); make_rle_small3(temp_bitmap, RLE_SMALL3_PULSE2_3, 12, 12); make_rle_small3(temp_bitmap, RLE_SMALL3_PULSE2_4, 12, 12); destroy_bitmap(temp_bitmap); progress_update("Small Things"); temp_bitmap = load_bitmap("gfx//gb_small2.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (gm_small2.bmp not loaded correctly?)"); } for (i = 0; i < SMALL4_BMPS; i ++) { make_bmp_small4(temp_bitmap, i, 10, 10); } /* make_bmp_small4(temp_bitmap, BMP_SMALL4_EYE_1, 10, 10); make_bmp_small4(temp_bitmap, BMP_SMALL4_EYE_2, 10, 10); make_bmp_small4(temp_bitmap, BMP_SMALL4_EYE_3, 10, 10); make_bmp_small4(temp_bitmap, BMP_SMALL4_EYE_4, 10, 10); make_bmp_small4(temp_bitmap, BMP_SMALL4_EYE_5, 10, 10); make_bmp_small4(temp_bitmap, BMP_SMALL4_EYE_6, 10, 10); make_bmp_small4(temp_bitmap, BMP_SMALL4_EYE_7, 10, 10); make_bmp_small4(temp_bitmap, BMP_SMALL4_BEYE_1, 10, 10); make_bmp_small4(temp_bitmap, BMP_SMALL4_BEYE_2, 10, 10); make_bmp_small4(temp_bitmap, BMP_SMALL4_BEYE_3, 10, 10); make_bmp_small4(temp_bitmap, BMP_SMALL4_BEYE_4, 10, 10); make_bmp_small4(temp_bitmap, BMP_SMALL4_BEYE_5, 10, 10); make_bmp_small4(temp_bitmap, BMP_SMALL4_BEYE_6, 10, 10); make_bmp_small4(temp_bitmap, BMP_SMALL4_BEYE_7, 10, 10);*/ destroy_bitmap(temp_bitmap); for (i = 0; i < 8; i ++) { shield_bmp [i] = create_bitmap(10, 10); if (shield_bmp [i] == NULL) bitmap_error("shield_bmp (out of memory?)"); clear_bitmap(shield_bmp [i]); shield_bmp [i + 8] = create_bitmap(10, 10); if (shield_bmp [i + 8] == NULL) bitmap_error("shield_bmp (out of memory?)"); clear_bitmap(shield_bmp [i + 8]); shield_bmp [i + 16] = create_bitmap(10, 10); if (shield_bmp [i + 16] == NULL) bitmap_error("shield_bmp (out of memory?)"); clear_bitmap(shield_bmp [i + 16]); draw_sprite_h_flip(shield_bmp [i], small4_bmp [BMP_SMALL4_SHIELD_1 + i], 0, 0); draw_sprite_vh_flip(shield_bmp [i + 8], small4_bmp [BMP_SMALL4_SHIELD_1 + i], 0, 0); draw_sprite_v_flip(shield_bmp [i + 16], small4_bmp [BMP_SMALL4_SHIELD_1 + i], 0, 0); } progress_update("More Small Things"); /* temp_bitmap = load_bitmap("gfx//small2.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (small2.bmp not loaded correctly?)"); } for (i = BMP_SMALL2_MISSILE_1; i < BMP_SMALL2_SIDE_BOMB + 1; i ++) { make_bmp_small2(temp_bitmap, i, 7, 7); } destroy_bitmap(temp_bitmap); progress_update("Small3 Loaded"); temp_bitmap = load_bitmap("gfx//enemy2.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (enemy2.bmp not loaded correctly?)"); } for (i = 0; i < 9; i ++) { make_rle_enemy2(temp_bitmap, i, 27, 27); } destroy_bitmap(temp_bitmap); progress_update("Enemy2 Loaded"); */ temp_bitmap = load_bitmap("gfx//gb_lsh.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (gb_lsh.bmp not loaded correctly?)"); } // int b; for (i = 0; i < 16; i ++) { make_rle_large_ship(temp_bitmap, i); } destroy_bitmap(temp_bitmap); progress_update("More Vehicles"); tile_background = NULL; make_bmp_tiles(); init_tiles(); // just clears the rle array, setting all to NULL, and prepares the menu tile level_bmp = create_bitmap(500, 500); if (!level_bmp) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Bitmap creation error (level_bmp) \n%s\n", allegro_error); exit(1); } progress_update("Tiles Loaded and Processed"); // level_bmp = create_bitmap(5, 5); make_bang_bmps(); make_light_bmps(); progress_update("Light Sourcing"); // init_messages(); // progress_update("Messages Initialised"); distortion_mask = create_bitmap(201, 201); if (distortion_mask == NULL) { bitmap_error("distortion_mask (out of memory?)"); } crystal_bmp = create_bitmap(20, 20); if (crystal_bmp == NULL) { bitmap_error("crystal_bmp (out of memory?)"); } BITMAP *temp_waver_bmp = create_bitmap(41, 41); if (temp_waver_bmp == NULL) bitmap_error("temp_waver_bmp (out of memory?)"); clear_bitmap(temp_waver_bmp); circlefill(temp_waver_bmp, 20, 20, 19, GC_RED5); circle(temp_waver_bmp, 20, 20, 19, GC_RED1); circlefill(temp_waver_bmp, 20, 20, 12, 0); circle(temp_waver_bmp, 20, 20, 12, GC_RED1); waver1_circle = get_rle_sprite(temp_waver_bmp); destroy_bitmap(temp_waver_bmp); temp_waver_bmp = create_bitmap(41, 41); if (temp_waver_bmp == NULL) bitmap_error("temp_waver_bmp (out of memory?)"); clear_bitmap(temp_waver_bmp); circlefill(temp_waver_bmp, 20, 20, 19, GC_GREEN5); circle(temp_waver_bmp, 20, 20, 19, GC_GREEN1); circlefill(temp_waver_bmp, 20, 20, 15, 0); circle(temp_waver_bmp, 20, 20, 15, GC_GREEN1); waver2_circle = get_rle_sprite(temp_waver_bmp); destroy_bitmap(temp_waver_bmp); progress_update("Effects"); // set_palette(light_palet); set_light_palette(); progress_update("Palette"); } void make_rle_enemy1(BITMAP *source_bmp, int which_enemy, int width, int height) { BITMAP *temp_bmp = create_bitmap(width, height); if (temp_bmp == NULL) { bitmap_error("temp_bmp (make_rle_enemy1)"); } blit(source_bmp, temp_bmp, which_enemy * 51 + 1, 1, 0, 0, width, height); enemy1_rle [which_enemy] = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); } void make_rle_enemy2(BITMAP *source_bmp, int which_enemy, int width, int height) { BITMAP *temp_bmp = create_bitmap(width, height); if (temp_bmp == NULL) { bitmap_error("temp_bmp (make_rle_enemy2)"); } clear_bitmap(temp_bmp); blit(source_bmp, temp_bmp, which_enemy * 41 + 1, 1, 0, 0, width, height); enemy2_rle [which_enemy] = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); } void make_rle_enemy3(BITMAP *source_bmp, int which_enemy, int width, int height) { BITMAP *temp_bmp = create_bitmap(width, height); if (temp_bmp == NULL) { bitmap_error("temp_bmp (make_rle_enemy3)"); } blit(source_bmp, temp_bmp, which_enemy * 301 + 1, 1, 0, 0, width, height); enemy3_rle [which_enemy] = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); } void make_rle_enemy4(BITMAP *source_bmp, int which_enemy, int width, int height) { BITMAP *temp_bmp = create_bitmap(width, height); if (temp_bmp == NULL) { bitmap_error("temp_bmp (make_rle_enemy4)"); } blit(source_bmp, temp_bmp, which_enemy * 71 + 1, 1, 0, 0, width, height); enemy4_rle [which_enemy] = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); } void make_rle_enemy5(BITMAP *source_bmp, int which_enemy, int width, int height) { BITMAP *temp_bmp = create_bitmap(width, height); if (temp_bmp == NULL) { bitmap_error("temp_bmp (make_rle_enemy5)"); } blit(source_bmp, temp_bmp, which_enemy * 141 + 1, 1, 0, 0, width, height); enemy5_rle [which_enemy] = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); } void make_rle_enemy6(BITMAP *source_bmp, int which_enemy, int width, int height) { BITMAP *temp_bmp = create_bitmap(width, height); if (temp_bmp == NULL) { bitmap_error("temp_bmp (make_rle_enemy6)"); } blit(source_bmp, temp_bmp, which_enemy * 71 + 1, 1, 0, 0, width, height); enemy6_rle [which_enemy] = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); } void make_rle_enemy7(BITMAP *source_bmp, int which_enemy, int width, int height) { BITMAP *temp_bmp = create_bitmap(width, height); if (temp_bmp == NULL) { bitmap_error("temp_bmp (make_rle_enemy7)"); } blit(source_bmp, temp_bmp, which_enemy * 249 + 1, 1, 0, 0, width, height); enemy7_rle [which_enemy] = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); } void make_rle_enemy8(BITMAP *source_bmp, int which_enemy, int width, int height) { BITMAP *temp_bmp = create_bitmap(width, height); if (temp_bmp == NULL) { bitmap_error("temp_bmp (make_rle_enemy8)"); } blit(source_bmp, temp_bmp, which_enemy * 282 + 1, 1, 0, 0, width, height); enemy8_rle [which_enemy] = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); } void make_rle_enemy9(BITMAP *source_bmp, int which_enemy, int width, int height) { BITMAP *temp_bmp = create_bitmap(width, height); if (temp_bmp == NULL) { bitmap_error("temp_bmp (make_rle_enemy9)"); } blit(source_bmp, temp_bmp, which_enemy * 109 + 1, 1, 0, 0, width, height); enemy9_rle [which_enemy] = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); } void make_rle_small1(BITMAP *source_bmp, int which_small, int width, int height) { BITMAP *temp_bmp = create_bitmap(width, height); if (temp_bmp == NULL) { bitmap_error("temp_bmp (make_rle_small1)"); } blit(source_bmp, temp_bmp, which_small * 21 + 1, 1, 0, 0, width, height); small1_rle [which_small] = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); } void make_rle_small3(BITMAP *source_bmp, int which_small, int width, int height) { BITMAP *temp_bmp = create_bitmap(width, height); if (temp_bmp == NULL) { bitmap_error("temp_bmp (make_rle_small3)"); } blit(source_bmp, temp_bmp, which_small * 15 + 1, 1, 0, 0, width, height); small3_rle [which_small] = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); } void make_bmp_small2(BITMAP *source_bmp, int which_small, int width, int height) { small2_bmp [which_small] = create_bitmap(width, height); if (small2_bmp [which_small] == NULL) { bitmap_error("temp_bmp (make_bmp_small2)"); } blit(source_bmp, small2_bmp [which_small], which_small * 21 + 1, 1, 0, 0, width, height); } void make_bmp_enemy(BITMAP *source_bmp, int which_enemy, int width, int height) { enemy_bmps [which_enemy] = create_bitmap(width, height); if (enemy_bmps [which_enemy] == NULL) { bitmap_error("temp_bmp (make_bmp_enemy)"); } blit(source_bmp, enemy_bmps [which_enemy], which_enemy * 71 + 1, 1, 0, 0, width, height); } void make_bmp_small4(BITMAP *source_bmp, int which_small, int width, int height) { small4_bmp [which_small] = create_bitmap(width, height); if (small4_bmp [which_small] == NULL) { bitmap_error("temp_bmp (make_bmp_small4)"); } blit(source_bmp, small4_bmp [which_small], which_small * 15 + 1, 1, 0, 0, width, height); } void make_rle_large_ship(BITMAP *source_bmp, int which_ship) { BITMAP *temp_bmp = create_bitmap(49, 49); if (temp_bmp == NULL) { bitmap_error("temp_bmp (make_rle_large_ship)"); } // if (which_ship > 11) // { // blit(source_bmp, temp_bmp, 51 + 1, 1, 0, 0, 49, 49); // } // else blit(source_bmp, temp_bmp, which_ship * 51 + 1, 1, 0, 0, 49, 49); int i, x, y, px, base_col; for (i = 0; i < 5; i ++) { switch(i) { case 0: base_col = COLOUR_BLUE1; break; case 1: base_col = COLOUR_GREEN1; break; case 2: base_col = COLOUR_YELLOW1; break; case 3: base_col = COLOUR_RED1; break; } for (x = 0; x < 50; x ++) { for (y = 0; y < 50; y ++) { px = getpixel(temp_bmp, x, y); if (i == 4) { // if (px % 8 != 5 && px != 0) // if ((y % 4 == 0 || x % 4 == 0) && px != 0) if (px % 8 < 4 && px != 0) putpixel(temp_bmp, x, y, COLOUR_WHITE); else putpixel(temp_bmp, x, y, 0); } else { if (px != 0) putpixel(temp_bmp, x, y, base_col + (px % 8) - 1); } } } large_ships [which_ship] [i] = get_rle_sprite(temp_bmp); } destroy_bitmap(temp_bmp); } void make_bmp_tiles(void) { // RGB temp_palette2 [1024]; RGB temp_palette [256]; // RGB temp_palette3 [1024]; BITMAP *temp_bitmap = load_bitmap("gfx//gb_tiles.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (gb_tiles.bmp not loaded correctly?)"); } // clear_bitmap(temp_bmp2); int i, j; for (i = 0; i < NO_PRETILE_BMPS; i ++) { pretile_bmp [i] = create_bitmap(50, 50); if (pretile_bmp [i] == NULL) { bitmap_error("pretile (make_bmp_tiles)"); } blit(temp_bitmap, pretile_bmp [i], i * 51 + 1, 1, 0, 0, 50, 50); } destroy_bitmap(temp_bitmap); temp_bitmap = load_bitmap("gfx//gb_maze.bmp", temp_palette); if (temp_bitmap == NULL) { bitmap_error("temp_bitmap (gb_maze.bmp not loaded correctly?)"); } for (j = 0; j < NO_MAZES; j ++) { for (i = 0; i < NO_PRETILE_M_BMPS; i ++) { pretile_m_bmp [j] [i] = create_bitmap(50, 50); // not [i] [j]... if (pretile_m_bmp [j] [i] == NULL) { bitmap_error("pretile_m_bmp (make_bmp_tiles)"); } blit(temp_bitmap, pretile_m_bmp [j] [i], i * 51 + 1, j * 51 + 1, 0, 0, 50, 50); } } destroy_bitmap(temp_bitmap); } /* void make_superjelly_bmps(void) { superjelly_bmp [0] = create_bitmap(21, 21); if (superjelly_bmp [0] == NULL) { bitmap_error("temp_bmp (make_superjelly_bmps - superjelly_bmp [0])"); } clear_bitmap(superjelly_bmp [0]); superjelly_bmp [1] = create_bitmap(21, 21); if (superjelly_bmp [1] == NULL) { bitmap_error("temp_bmp (make_superjelly_bmps - superjelly_bmp [1])"); } clear_bitmap(superjelly_bmp [1]); draw_rle_sprite(superjelly_bmp [0], enemy1_rle [RLE_ENEMY1_SUPERJELLY], 0, 0); rotate_sprite(superjelly_bmp [1], superjelly_bmp [0], 0, 0, itofix(64)); } */ void make_light_bmps(void) { int i; int c1 = 3, c2 = 2; BITMAP *temp_bmp; for (i = 0; i < 100; i ++) { if (i == 0) temp_bmp = create_bitmap(1, 1); else temp_bmp = create_bitmap(i * 2 + 2, i * 2 + 2); if (temp_bmp == NULL) bitmap_error("light_bmp"); clear_bitmap(temp_bmp); c1 = i; c2 = i - (i / 6); // c3 = i - (i / 4); circlefill(temp_bmp, i + 1, i + 1, c1, LIGHT_1); circlefill(temp_bmp, i + 1, i + 1, c2, LIGHT_2); light_rle [i] = get_rle_sprite(temp_bmp); if (light_rle [i] == NULL) bitmap_error("light_rle"); destroy_bitmap(temp_bmp); } } void make_bang_bmps(void) { return; /* int i; int c1 = 3, c2 = 2, c3 = 1; c1 = 0; c2 = -250; c3 = -500; for (i = 0; i < 50; i ++) { redbang_bmp [i] = create_bitmap(i * 2, i * 2); if (redbang_bmp [i] == NULL) bitmap_error("redbang_bmp"); clear_bitmap(redbang_bmp [i]); c1 += 10; // c2 = i - (i / 7); // c3 = i - (i / 4); c2 += 15; c3 += 20; circlefill(redbang_bmp [i], i, i, c1 / 10, TRANS_DRED); if (c2 > 0) circlefill(redbang_bmp [i], i, i, c2 / 10, TRANS_LRED); if (c3 > 0) circlefill(redbang_bmp [i], i, i, c3 / 10, TRANS_YELLOW); } */ } /* void draw_sprite_v_flip(BITMAP *bmp, BITMAP *sprite, int x, int y); void draw_sprite_h_flip(BITMAP *bmp, BITMAP *sprite, int x, int y); void draw_sprite_vh_flip(BITMAP *bmp, BITMAP *sprite, int x, int y); */ void bitmap_error(const char errtxt []) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Bitmap creation error \n%s\n\n\r%s", allegro_error, errtxt); // allegro_message("\n\r"); // allegro_message(errtxt); exit(1); } void progress_update(const char progtxt []) { static int ypos = 170; rectfill(screen, 400, 117, 450, 118, COLOUR_YELLOW8); rectfill(screen, 449, 117, 450, ypos + 5, COLOUR_YELLOW8); hline(screen, 449, ypos + 5, 433, COLOUR_YELLOW8); textprintf_right_ex(screen, small_font, 430, ypos, COLOUR_GREEN8, -1, progtxt); ypos += 11; // do {rest(30);} while (!key [KEY_X]); // rest(200); } void prepare_display(void) { // player bmps are set to NULL in init_display if (game.users == 1) { if (player1 != NULL) destroy_bitmap(player1); player1 = create_bitmap(scr_x, scr_y); clear_bitmap(player1); } else { if (player1 != NULL) destroy_bitmap(player1); if (player2 != NULL) destroy_bitmap(player2); player1 = create_bitmap(tp_window_width, scr_y); clear_bitmap(player1); player2 = create_bitmap(tp_window_width, scr_y); clear_bitmap(player2); } } #ifdef DONT_COMPILE void make_actor_sprites_old_small(int at) { int x,y,x1, x2, x3, y1, y2, y3; int i; float angle; int a1, a2, a3; int points [16]; BITMAP *tbmp = create_bitmap(21, 21); switch(at) { case 1: for (i = 0; i < 17; i ++) { ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x1 = 100 + cos(angle) * 7; y1 = 100 + sin(angle) * 7; x2 = 100 + cos(angle + PI + PI / 3) * 6; y2 = 100 + sin(angle + PI + PI / 3) * 6; x3 = 100 + cos(angle + PI - PI / 3) * 6; y3 = 100 + sin(angle + PI - PI / 3) * 6; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 6; y1 = 100 + sin(angle) * 6; x2 = 100 + cos(angle + PI + PI / 3) * 5; y2 = 100 + sin(angle + PI + PI / 3) * 5; x3 = 100 + cos(angle + PI - PI / 3) * 5; y3 = 100 + sin(angle + PI - PI / 3) * 5; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 3; y1 = 100 + sin(angle) * 3; circlefill(ship_bitmaps [at] [i], x1, y1, 1, COLOUR_WHITE); // line(ship_bitmaps [at] [i], x1, y1, x2, y2, COLOUR_GREY4); // line(ship_bitmaps [at] [i], x2, y2, x3, y3, COLOUR_GREY4); // line(ship_bitmaps [at] [i], x1, y1, x3, y3, COLOUR_GREY4); } break; case 2: for (i = 0; i < 17; i ++) { ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x2 = 100 + cos(angle + PI + PI / 3) * 5; y2 = 100 + sin(angle + PI + PI / 3) * 5; circlefill(ship_bitmaps [at] [i], x2, y2, 2, COLOUR_GREY5); x2 = 100 + cos(angle + PI - PI / 3) * (6 - (angle == 16)); y2 = 100 + sin(angle + PI - PI / 3) * (6 - (angle == 16)); circlefill(ship_bitmaps [at] [i], x2, y2, 2, COLOUR_GREY5); x = 10; y = 10; circlefill(ship_bitmaps [at] [i], x, y, 5, COLOUR_GREY4); circlefill(ship_bitmaps [at] [i], x, y, 4, COLOUR_GREY5); // x1 = 10;// + cos(angle) * 2; // y1 = 10;// + sin(angle) * 2; // circlefill(ship_bitmaps [at] [i], x1, y1, 1, COLOUR_WHITE); a1 = 64 - (i * 4 + 19); a2 = 64 - (i * 4 - 19); if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 3, COLOUR_WHITE); } else { if (i > 11) { arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 3, COLOUR_WHITE); // a3 = a1; // a1 = a2; // a2 = a3; } else arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 3, COLOUR_WHITE); } } break; case 3: for (i = 0; i < 17; i ++) { ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; circlefill(ship_bitmaps [at] [i], 10, 10, 2, COLOUR_GREY4); x2 = 100 + cos(angle + PI + PI / 4) * 5; y2 = 100 + sin(angle + PI + PI / 4) * 5; circlefill(ship_bitmaps [at] [i], x2, y2, 2, COLOUR_GREY4); circlefill(ship_bitmaps [at] [i], x2, y2, 1, COLOUR_GREY5); x2 = 100 + cos(angle + PI + PI / 4) * 2; y2 = 100 + sin(angle + PI + PI / 4) * 2; circlefill(ship_bitmaps [at] [i], x2, y2, 1, COLOUR_GREY5); x2 = 100 + cos(angle + PI - PI / 4) * 5; y2 = 100 + sin(angle + PI - PI / 4) * 5; circlefill(ship_bitmaps [at] [i], x2, y2, 2, COLOUR_GREY4); circlefill(ship_bitmaps [at] [i], x2, y2, 1, COLOUR_GREY5); x2 = 100 + cos(angle + PI - PI / 4) * 2; y2 = 100 + sin(angle + PI - PI / 4) * 2; circlefill(ship_bitmaps [at] [i], x2, y2, 2, COLOUR_GREY5); x2 = 100 + cos(angle + PI / 4) * 5; y2 = 100 + sin(angle + PI / 4) * 5; circlefill(ship_bitmaps [at] [i], x2, y2, 2, COLOUR_GREY4); circlefill(ship_bitmaps [at] [i], x2, y2, 1, COLOUR_GREY5); x2 = 100 + cos(angle + PI / 4) * 2; y2 = 100 + sin(angle + PI / 4) * 2; circlefill(ship_bitmaps [at] [i], x2, y2, 2, COLOUR_GREY5); x2 = 100 + cos(angle - PI / 4) * 5; y2 = 100 + sin(angle - PI / 4) * 5; circlefill(ship_bitmaps [at] [i], x2, y2, 2, COLOUR_GREY4); circlefill(ship_bitmaps [at] [i], x2, y2, 1, COLOUR_GREY5); x2 = 100 + cos(angle - PI / 4) * 2; y2 = 100 + sin(angle - PI / 4) * 2; circlefill(ship_bitmaps [at] [i], x2, y2, 2, COLOUR_GREY5); x = 10; y = 10; circlefill(ship_bitmaps [at] [i], x, y, 1, COLOUR_GREY5); // x1 = 10;// + cos(angle) * 2; // y1 = 10;// + sin(angle) * 2; // circlefill(ship_bitmaps [at] [i], x1, y1, 1, COLOUR_WHITE); a1 = 64 - (i * 4 + 12); a2 = 64 - (i * 4 - 12); if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } else { if (i > 11) { arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); // a3 = a1; // a1 = a2; // a2 = a3; } else arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } } break; case 4: for (i = 0; i < 17; i ++) { ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; if (i == 0) angle = 1 / (16 / (PI / 2)) - PI / 2;; clear_bitmap(tbmp); circlefill(tbmp, 10, 10, 7, COLOUR_GREY4); x = 100 + cos(angle) * 6; y = 100 + sin(angle) * 6; circlefill(tbmp, x, y, 7, 0); blit(tbmp, ship_bitmaps [at] [i], 0,0,0,0,21,21); clear_bitmap(tbmp); circlefill(tbmp, 10, 10, 6, COLOUR_GREY5); x = 100 + cos(angle) * 6; y = 100 + sin(angle) * 6; circlefill(tbmp, x, y, 8, 0); x = 10;// - cos(angle) * 3; y = 10;// - sin(angle) * 3; circlefill(ship_bitmaps [at] [i], x, y, 3, COLOUR_GREY4); masked_blit(tbmp, ship_bitmaps [at] [i], 0,0,0,0,21,21); x = 10;// - cos(angle) * 3; y = 10;// - sin(angle) * 3; circlefill(ship_bitmaps [at] [i], x, y, 2, COLOUR_GREY5); a1 = 64 - (i * 4 + 12); a2 = 64 - (i * 4 - 12); if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } else { if (i > 11) { arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } else arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } } break; case 5: for (i = 0; i < 17; i ++) { ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; if (i == 0) angle = 1 / (16 / (PI / 2)) - PI / 2;; clear_bitmap(tbmp); circlefill(tbmp, 10, 10, 7, COLOUR_GREY4); circlefill(tbmp, 10, 10, 6, COLOUR_GREY5); /* x = 10 - cos(angle) * 4; y = 10 - sin(angle) * 4; circlefill(tbmp, x, y, 3, 0); x = 10 - cos(angle) * 3; y = 10 - sin(angle) * 3; circlefill(tbmp, x, y, 3, 0); x = 10 - cos(angle) * 2; y = 10 - sin(angle) * 2; circlefill(tbmp, x, y, 3, 0);*/ x = 10;// ;;+ cos(angle) * 1; y = 10;// + sin(angle) * 1; circlefill(tbmp, x, y, 3, 0); x = 100 + cos(angle) * 2; y = 100 + sin(angle) * 2; circlefill(tbmp, x, y, 3, 0); x = 100 + cos(angle) * 3; y = 100 + sin(angle) * 3; circlefill(tbmp, x, y, 3, 0); x = 100 + cos(angle) * 4; y = 100 + sin(angle) * 4; circlefill(tbmp, x, y, 3, 0); x = 100 + cos(angle) * 5; y = 100 + sin(angle) * 5; circlefill(tbmp, x, y, 3, 0); x = 100 + cos(angle) * 6; y = 100 + sin(angle) * 6; circlefill(tbmp, x, y, 3, 0); x = 100 + cos(angle) * 7; y = 100 + sin(angle) * 7; circlefill(tbmp, x, y, 3, 0); blit(tbmp, ship_bitmaps [at] [i], 0,0,0,0,21,21); clear_bitmap(tbmp); /* circlefill(tbmp, 10, 10, 6, COLOUR_GREY5); x = 100 + cos(angle) * 6; y = 100 + sin(angle) * 6; circlefill(tbmp, x, y, 8, 0); x = 10;// - cos(angle) * 3; y = 10;// - sin(angle) * 3; circlefill(ship_bitmaps [at] [i], x, y, 4, COLOUR_GREY4); masked_blit(tbmp, ship_bitmaps [at] [i], 0,0,0,0,21,21);*/ x = 10;// - cos(angle) * 3; y = 10;// - sin(angle) * 3; circlefill(ship_bitmaps [at] [i], x, y, 3, COLOUR_GREY5); a1 = 64 - (i * 4 + 12); a2 = 64 - (i * 4 - 12); if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } else { if (i > 11) { arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } else arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } } break; case 6: for (i = 0; i < 17; i ++) { ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x1 = 100 + cos(angle + PI) * 5; y1 = 100 + sin(angle + PI) * 5; x2 = 100 + cos(angle + PI / 2) * 9; y2 = 100 + sin(angle + PI / 2) * 9; x3 = 100 + cos(angle - PI / 2) * 9; y3 = 100 + sin(angle - PI / 2) * 9; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 7; y1 = 100 + sin(angle) * 7; x2 = 100 + cos(angle + PI + PI / 3) * 4; y2 = 100 + sin(angle + PI + PI / 3) * 4; x3 = 100 + cos(angle + PI - PI / 3) * 4; y3 = 100 + sin(angle + PI - PI / 3) * 4; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 6; y1 = 100 + sin(angle) * 6; x2 = 100 + cos(angle + PI + PI / 3) * 3; y2 = 100 + sin(angle + PI + PI / 3) * 3; x3 = 100 + cos(angle + PI - PI / 3) * 3; y3 = 100 + sin(angle + PI - PI / 3) * 3; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle + PI) * 4; y1 = 100 + sin(angle + PI) * 4; x2 = 100 + cos(angle + PI / 2) * 8; y2 = 100 + sin(angle + PI / 2) * 8; x3 = 100 + cos(angle - PI / 2) * 8; y3 = 100 + sin(angle - PI / 2) * 8; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 3; y1 = 100 + sin(angle) * 3; circlefill(ship_bitmaps [at] [i], x1, y1, 1, COLOUR_WHITE); // line(ship_bitmaps [at] [i], x1, y1, x2, y2, COLOUR_GREY4); // line(ship_bitmaps [at] [i], x2, y2, x3, y3, COLOUR_GREY4); // line(ship_bitmaps [at] [i], x1, y1, x3, y3, COLOUR_GREY4); } break; case 7: for (i = 0; i < 17; i ++) { ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; if (i == 0) angle = 1 / (16 / (PI / 2)) - PI / 2;; x = 100 + cos(angle) * 3; y = 100 + sin(angle) * 3; circlefill(ship_bitmaps [at] [i], x, y, 2, COLOUR_GREY4); x1 = x + cos(angle + PI / 3) * 6; y1 = y + sin(angle + PI / 3) * 6; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = x + cos(angle - PI / 3) * 6; y1 = y + sin(angle - PI / 3) * 6; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = x + cos(angle + PI + PI / 2) * 6; y1 = y + sin(angle + PI + PI / 2) * 6; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = x + cos(angle + PI - PI / 2) * 7; y1 = y + sin(angle + PI - PI / 2) * 7; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = 100 + cos(angle + PI + PI / 3) * 6; y1 = 100 + sin(angle + PI + PI / 3) * 6; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = 100 + cos(angle + PI - PI / 3) * 6; y1 = 100 + sin(angle + PI - PI / 3) * 6; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = 100 + cos(angle + PI + PI / 6) * 7; y1 = 100 + sin(angle + PI + PI / 6) * 7; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = 100 + cos(angle + PI - PI / 5) * 7; y1 = 100 + sin(angle + PI - PI / 5) * 7; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x = 100 + cos(angle) * 3; y = 100 + sin(angle) * 3; circlefill(ship_bitmaps [at] [i], x, y, 3, COLOUR_GREY5); a1 = 64 - (i * 4 + 12); a2 = 64 - (i * 4 - 12); if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } else { if (i > 11) { arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } else arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } } break; case 8: for (i = 0; i < 17; i ++) { ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x1 = 100 + cos(angle) * 7; y1 = 100 + sin(angle) * 7; x2 = 100 + cos(angle + PI / 2) * 4; y2 = 100 + sin(angle + PI / 2) * 4; x3 = 100 + cos(angle - PI / 2) * 4; y3 = 100 + sin(angle - PI / 2) * 4; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 6; y1 = 100 + sin(angle) * 6; x2 = 100 + cos(angle + PI / 2) * 3; y2 = 100 + sin(angle + PI / 2) * 3; x3 = 100 + cos(angle - PI / 2) * 3; y3 = 100 + sin(angle - PI / 2) * 3; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 6; y1 = 100 + sin(angle) * 6; x2 = 100 + cos(angle + PI - PI / 2) * 8; y2 = 100 + sin(angle + PI - PI / 2) * 8; x3 = 100 + cos(angle + PI - PI / 4) * 8; y3 = 100 + sin(angle + PI - PI / 4) * 8; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 6; y1 = 100 + sin(angle) * 6; x2 = 100 + cos(angle + PI + PI / 2) * 8; y2 = 100 + sin(angle + PI + PI / 2) * 8; x3 = 100 + cos(angle + PI + PI / 4) * 8; y3 = 100 + sin(angle + PI + PI / 4) * 8; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 5; y1 = 100 + sin(angle) * 5; x2 = 100 + cos(angle + PI - PI / 2) * 7; y2 = 100 + sin(angle + PI - PI / 2) * 7; x3 = 100 + cos(angle + PI - PI / 4) * 7; y3 = 100 + sin(angle + PI - PI / 4) * 7; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 5; y1 = 100 + sin(angle) * 5; x2 = 100 + cos(angle + PI + PI / 2) * 7; y2 = 100 + sin(angle + PI + PI / 2) * 7; x3 = 100 + cos(angle + PI + PI / 4) * 7; y3 = 100 + sin(angle + PI + PI / 4) * 7; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 3; y1 = 100 + sin(angle) * 3; circlefill(ship_bitmaps [at] [i], x1, y1, 1, COLOUR_WHITE); } break; case 10: for (i = 0; i < 17; i ++) { ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x1 = 100 + cos(angle) * 7; y1 = 100 + sin(angle) * 7; x2 = 100 + cos(angle + PI / 2) * 4; y2 = 100 + sin(angle + PI / 2) * 4; x3 = 100 + cos(angle - PI / 2) * 4; y3 = 100 + sin(angle - PI / 2) * 4; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 6; y1 = 100 + sin(angle) * 6; x2 = 100 + cos(angle + PI / 2) * 3; y2 = 100 + sin(angle + PI / 2) * 3; x3 = 100 + cos(angle - PI / 2) * 3; y3 = 100 + sin(angle - PI / 2) * 3; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 6; y1 = 100 + sin(angle) * 6; x2 = 100 + cos(angle + PI - PI / 4) * 8; y2 = 100 + sin(angle + PI - PI / 4) * 8; x3 = 100 + cos(angle + PI - PI / 8) * 8; y3 = 100 + sin(angle + PI - PI / 8) * 8; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 6; y1 = 100 + sin(angle) * 6; x2 = 100 + cos(angle + PI + PI / 4) * 8; y2 = 100 + sin(angle + PI + PI / 4) * 8; x3 = 100 + cos(angle + PI + PI / 8) * 8; y3 = 100 + sin(angle + PI + PI / 8) * 8; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 5; y1 = 100 + sin(angle) * 5; x2 = 100 + cos(angle + PI - PI / 4) * 7; y2 = 100 + sin(angle + PI - PI / 4) * 7; x3 = 100 + cos(angle + PI - PI / 8) * 7; y3 = 100 + sin(angle + PI - PI / 8) * 7; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 5; y1 = 100 + sin(angle) * 5; x2 = 100 + cos(angle + PI + PI / 4) * 7; y2 = 100 + sin(angle + PI + PI / 4) * 7; x3 = 100 + cos(angle + PI + PI / 8) * 7; y3 = 100 + sin(angle + PI + PI / 8) * 7; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 3; y1 = 100 + sin(angle) * 3; circlefill(ship_bitmaps [at] [i], x1, y1, 1, COLOUR_WHITE); } break; // case 11: for (i = 0; i < 17; i ++) { tbmp = create_bitmap(210, 210); clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; /* points [0] = 100 + cos(angle + PI / 2) * 30; points [1] = 100 + sin(angle + PI / 2) * 30; points [2] = 100 + cos(angle + PI / 10) * 80; points [3] = 100 + sin(angle + PI / 10) * 80; points [4] = 100 + cos(angle + PI / 7) * 90; points [5] = 100 + sin(angle + PI / 7) * 90; points [6] = 100 + cos(angle + PI - PI / 3) * 50; points [7] = 100 + sin(angle + PI - PI / 3) * 50; points [8] = 100 + cos(angle + PI + PI / 3) * 50; points [9] = 100 + sin(angle + PI + PI / 3) * 50; points [10] = 100 + cos(angle - PI / 7) * 90; points [11] = 100 + sin(angle - PI / 7) * 90; points [12] = 100 + cos(angle - PI / 10) * 80; points [13] = 100 + sin(angle - PI / 10) * 80; points [14] = 100 + cos(angle - PI / 2) * 30; points [15] = 100 + sin(angle - PI / 2) * 30; polygon(ship_bitmaps [at] [i], 8, points, COLOUR_GREY4); x1 = 100 + cos(angle + PI) * 40; y1 = 100 + sin(angle + PI) * 40; x2 = 100 + cos(angle + PI / 2) * 70; y2 = 100 + sin(angle + PI / 2) * 70; x3 = 100 + cos(angle - PI / 2) * 70; y3 = 100 + sin(angle - PI / 2) * 70; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle + PI) * 30; y1 = 100 + sin(angle + PI) * 30; x2 = 100 + cos(angle + PI / 2) * 60; y2 = 100 + sin(angle + PI / 2) * 60; x3 = 100 + cos(angle - PI / 2) * 60; y3 = 100 + sin(angle - PI / 2) * 60; triangle(ship_bitmaps [at] [i], x1, y1, x2, y2, x3, y3, COLOUR_GREY5); points [0] = 100 + cos(angle + PI / 2) * 20; points [1] = 100 + sin(angle + PI / 2) * 20; points [2] = 100 + cos(angle + PI / 8) * 70; points [3] = 100 + sin(angle + PI / 8) * 70; points [4] = 100 + cos(angle + PI / 5) * 80; points [5] = 100 + sin(angle + PI / 5) * 80; points [6] = 100 + cos(angle + PI - PI / 3) * 40; points [7] = 100 + sin(angle + PI - PI / 3) * 40; points [8] = 100 + cos(angle + PI + PI / 3) * 40; points [9] = 100 + sin(angle + PI + PI / 3) * 40; points [10] = 100 + cos(angle - PI / 5) * 80; points [11] = 100 + sin(angle - PI / 5) * 80; points [12] = 100 + cos(angle - PI / 8) * 70; points [13] = 100 + sin(angle - PI / 8) * 70; points [14] = 100 + cos(angle - PI / 2) * 20; points [15] = 100 + sin(angle - PI / 2) * 20; polygon(ship_bitmaps [at] [i], 8, points, COLOUR_GREY5); x1 = 10;// - cos(angle) * 2; y1 = 10;// - sin(angle) * 2; circlefill(ship_bitmaps [at] [i], x1, y1, 10, COLOUR_WHITE);*/ points [0] = 100 + cos(angle + PI / 2) * 30; points [1] = 100 + sin(angle + PI / 2) * 30; points [2] = 100 + cos(angle + PI / 10) * 80; points [3] = 100 + sin(angle + PI / 10) * 80; points [4] = 100 + cos(angle + PI / 7) * 90; points [5] = 100 + sin(angle + PI / 7) * 90; points [6] = 100 + cos(angle + PI - PI / 3) * 50; points [7] = 100 + sin(angle + PI - PI / 3) * 50; points [8] = 100 + cos(angle + PI + PI / 3) * 50; points [9] = 100 + sin(angle + PI + PI / 3) * 50; points [10] = 100 + cos(angle - PI / 7) * 90; points [11] = 100 + sin(angle - PI / 7) * 90; points [12] = 100 + cos(angle - PI / 10) * 80; points [13] = 100 + sin(angle - PI / 10) * 80; points [14] = 100 + cos(angle - PI / 2) * 30; points [15] = 100 + sin(angle - PI / 2) * 30; polygon(tbmp, 8, points, COLOUR_GREY4); x1 = 100 + cos(angle + PI) * 40; y1 = 100 + sin(angle + PI) * 40; x2 = 100 + cos(angle + PI / 2) * 70; y2 = 100 + sin(angle + PI / 2) * 70; x3 = 100 + cos(angle - PI / 2) * 70; y3 = 100 + sin(angle - PI / 2) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle + PI) * 30; y1 = 100 + sin(angle + PI) * 30; x2 = 100 + cos(angle + PI / 2) * 60; y2 = 100 + sin(angle + PI / 2) * 60; x3 = 100 + cos(angle - PI / 2) * 60; y3 = 100 + sin(angle - PI / 2) * 60; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); points [0] = 100 + cos(angle + PI / 2) * 20; points [1] = 100 + sin(angle + PI / 2) * 20; points [2] = 100 + cos(angle + PI / 8) * 70; points [3] = 100 + sin(angle + PI / 8) * 70; points [4] = 100 + cos(angle + PI / 5) * 80; points [5] = 100 + sin(angle + PI / 5) * 80; points [6] = 100 + cos(angle + PI - PI / 3) * 40; points [7] = 100 + sin(angle + PI - PI / 3) * 40; points [8] = 100 + cos(angle + PI + PI / 3) * 40; points [9] = 100 + sin(angle + PI + PI / 3) * 40; points [10] = 100 + cos(angle - PI / 5) * 80; points [11] = 100 + sin(angle - PI / 5) * 80; points [12] = 100 + cos(angle - PI / 8) * 70; points [13] = 100 + sin(angle - PI / 8) * 70; points [14] = 100 + cos(angle - PI / 2) * 20; points [15] = 100 + sin(angle - PI / 2) * 20; polygon(tbmp, 8, points, COLOUR_GREY5); x1 = 100;// - cos(angle) * 2; y1 = 100;// - sin(angle) * 2; circlefill(tbmp, x1, y1, 10, COLOUR_WHITE); stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break; // case 11: for (i = 0; i < 17; i ++) { ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; if (i == 0) angle = 1 / (16 / (PI / 2)) - PI / 2;; points [0] = 100 + cos(angle) * 2; points [1] = 100 + sin(angle) * 2; points [2] = 100 + cos(angle + PI / 2) * 9; points [3] = 100 + sin(angle + PI / 2) * 9; points [4] = 100 + cos(angle + PI) * 2; points [5] = 100 + sin(angle + PI) * 2; points [6] = 100 + cos(angle - PI / 2) * 7; points [7] = 100 + sin(angle - PI / 2) * 7; polygon(ship_bitmaps [at] [i], 4, points, COLOUR_GREY4); circle(ship_bitmaps [at] [i], 10, 10, 7, COLOUR_GREY5); x = 10;// - cos(angle) * 3; y = 10;// - sin(angle) * 3; // circle(ship_bitmaps [at] [i], x, y, 7, COLOUR_GREY4); circle(ship_bitmaps [at] [i], x, y, 8, COLOUR_GREY5); x = 100 + cos(angle) * 12; y = 100 + sin(angle) * 12; circlefill(ship_bitmaps [at] [i], x, y, 9, 0); x = 10 - cos(angle) * 12; y = 10 - sin(angle) * 12; circlefill(ship_bitmaps [at] [i], x, y, 8, 0); circlefill(ship_bitmaps [at] [i], 10, 10, 3, COLOUR_GREY4); points [0] = 100 + cos(angle) * 1; points [1] = 100 + sin(angle) * 1; points [2] = 100 + cos(angle + PI / 2) * 8; points [3] = 100 + sin(angle + PI / 2) * 8; points [4] = 100 + cos(angle + PI) * 1; points [5] = 100 + sin(angle + PI) * 1; points [6] = 100 + cos(angle - PI / 2) * 6; points [7] = 100 + sin(angle - PI / 2) * 6; polygon(ship_bitmaps [at] [i], 4, points, COLOUR_GREY5); x = 10;// - cos(angle) * 3; y = 10;// - sin(angle) * 3; // circlefill(ship_bitmaps [at] [i], x, y, 3, COLOUR_GREY4); circlefill(ship_bitmaps [at] [i], x, y, 2, COLOUR_GREY5); // circlefill(ship_bitmaps [at] [i], 10, 10, 1, COLOUR_GREY6); x = 10;// - cos(angle) * 3; y = 10;// - sin(angle) * 3; a1 = 64 - (i * 4 + 12); a2 = 64 - (i * 4 - 12); if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } else { if (i > 11) { arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } else arc(ship_bitmaps [at] [i], x, y, itofix(a1), itofix(a2), 1, COLOUR_WHITE); } } break; case 11: for (i = 0; i < 17; i ++) { tbmp = create_bitmap(210, 210); clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x1 = 100 + cos(angle) * 70; y1 = 100 + sin(angle) * 70; x2 = 100 + cos(angle + PI / 2) * 40; y2 = 100 + sin(angle + PI / 2) * 40; x3 = 100 + cos(angle - PI / 2) * 40; y3 = 100 + sin(angle - PI / 2) * 40; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI / 2) * 30; y2 = 100 + sin(angle + PI / 2) * 30; x3 = 100 + cos(angle - PI / 2) * 30; y3 = 100 + sin(angle - PI / 2) * 30; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI - PI / 4) * 80; y2 = 100 + sin(angle + PI - PI / 4) * 80; x3 = 100 + cos(angle + PI - PI / 8) * 80; y3 = 100 + sin(angle + PI - PI / 8) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI + PI / 4) * 80; y2 = 100 + sin(angle + PI + PI / 4) * 80; x3 = 100 + cos(angle + PI + PI / 8) * 80; y3 = 100 + sin(angle + PI + PI / 8) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 50; y1 = 100 + sin(angle) * 50; x2 = 100 + cos(angle + PI - PI / 4) * 70; y2 = 100 + sin(angle + PI - PI / 4) * 70; x3 = 100 + cos(angle + PI - PI / 8) * 70; y3 = 100 + sin(angle + PI - PI / 8) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 50; y1 = 100 + sin(angle) * 50; x2 = 100 + cos(angle + PI + PI / 4) * 70; y2 = 100 + sin(angle + PI + PI / 4) * 70; x3 = 100 + cos(angle + PI + PI / 8) * 70; y3 = 100 + sin(angle + PI + PI / 8) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 30; y1 = 100 + sin(angle) * 30; circlefill(tbmp, x1, y1, 10, COLOUR_WHITE); stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break; } destroy_bitmap(tbmp); } void make_actor_sprites(int at) { int x,y,x1, x2, x3, y1, y2, y3; int i; float angle; int a1, a2;//, a3; int points [16]; BITMAP *tbmp = create_bitmap(210, 210); BITMAP *tbmp2; switch(at) { case 1: for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x1 = 100 + cos(angle) * 70; y1 = 100 + sin(angle) * 70; x2 = 100 + cos(angle + PI + PI / 3) * 60; y2 = 100 + sin(angle + PI + PI / 3) * 60; x3 = 100 + cos(angle + PI - PI / 3) * 60; y3 = 100 + sin(angle + PI - PI / 3) * 60; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI + PI / 3) * 50; y2 = 100 + sin(angle + PI + PI / 3) * 50; x3 = 100 + cos(angle + PI - PI / 3) * 50; y3 = 100 + sin(angle + PI - PI / 3) * 50; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 30; y1 = 100 + sin(angle) * 30; circlefill(tbmp, x1, y1, 10, COLOUR_WHITE); // line(ship_bitmaps [at] [i], x1, y1, x2, y2, COLOUR_GREY4); // line(ship_bitmaps [at] [i], x2, y2, x3, y3, COLOUR_GREY4); // line(ship_bitmaps [at] [i], x1, y1, x3, y3, COLOUR_GREY4); stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break; case 2: for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x2 = 100 + cos(angle + PI + PI / 3) * 50; y2 = 100 + sin(angle + PI + PI / 3) * 50; circlefill(tbmp, x2, y2, 20, COLOUR_GREY5); x2 = 100 + cos(angle + PI - PI / 3) * (6 - (angle == 16)); y2 = 100 + sin(angle + PI - PI / 3) * (6 - (angle == 16)); circlefill(tbmp, x2, y2, 20, COLOUR_GREY5); x = 100; y = 100; circlefill(tbmp, x, y, 50, COLOUR_GREY4); circlefill(tbmp, x, y, 40, COLOUR_GREY5); // x1 = 100;// + cos(angle) * 20; // y1 = 100;// + sin(angle) * 20; // circlefill(tbmp, x1, y1, 1, COLOUR_WHITE); a1 = 64 - (i * 4 + 19); a2 = 64 - (i * 4 - 19); if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); arc(tbmp, x, y, itofix(a1), itofix(a2), 30, COLOUR_WHITE); } else { if (i > 11) { arc(tbmp, x, y, itofix(a1), itofix(a2), 30, COLOUR_WHITE); // a3 = a1; // a1 = a2; // a2 = a3; } else arc(tbmp, x, y, itofix(a1), itofix(a2), 30, COLOUR_WHITE); } stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break; case 3: for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; circlefill(tbmp, 100, 100, 20, COLOUR_GREY4); x2 = 100 + cos(angle + PI + PI / 4) * 50; y2 = 100 + sin(angle + PI + PI / 4) * 50; circlefill(tbmp, x2, y2, 20, COLOUR_GREY4); circlefill(tbmp, x2, y2, 10, COLOUR_GREY5); x2 = 100 + cos(angle + PI + PI / 4) * 20; y2 = 100 + sin(angle + PI + PI / 4) * 20; circlefill(tbmp, x2, y2, 10, COLOUR_GREY5); x2 = 100 + cos(angle + PI - PI / 4) * 50; y2 = 100 + sin(angle + PI - PI / 4) * 50; circlefill(tbmp, x2, y2, 20, COLOUR_GREY4); circlefill(tbmp, x2, y2, 10, COLOUR_GREY5); x2 = 100 + cos(angle + PI - PI / 4) * 20; y2 = 100 + sin(angle + PI - PI / 4) * 20; circlefill(tbmp, x2, y2, 20, COLOUR_GREY5); x2 = 100 + cos(angle + PI / 4) * 50; y2 = 100 + sin(angle + PI / 4) * 50; circlefill(tbmp, x2, y2, 20, COLOUR_GREY4); circlefill(tbmp, x2, y2, 10, COLOUR_GREY5); x2 = 100 + cos(angle + PI / 4) * 20; y2 = 100 + sin(angle + PI / 4) * 20; circlefill(tbmp, x2, y2, 20, COLOUR_GREY5); x2 = 100 + cos(angle - PI / 4) * 50; y2 = 100 + sin(angle - PI / 4) * 50; circlefill(tbmp, x2, y2, 20, COLOUR_GREY4); circlefill(tbmp, x2, y2, 10, COLOUR_GREY5); x2 = 100 + cos(angle - PI / 4) * 20; y2 = 100 + sin(angle - PI / 4) * 20; circlefill(tbmp, x2, y2, 20, COLOUR_GREY5); x = 100; y = 100; circlefill(tbmp, x, y, 10, COLOUR_GREY5); // x1 = 100;// + cos(angle) * 20; // y1 = 100;// + sin(angle) * 20; // circlefill(tbmp, x1, y1, 1, COLOUR_WHITE); a1 = 64 - (i * 4 + 12); a2 = 64 - (i * 4 - 12); if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } else { if (i > 11) { arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); // a3 = a1; // a1 = a2; // a2 = a3; } else arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break; case 4: tbmp2 = create_bitmap(210, 210); for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); clear_bitmap(tbmp2); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; if (i == 0) angle = 1 / (16 / (PI / 2)) - PI / 2;; clear_bitmap(tbmp); circlefill(tbmp2, 100, 100, 70, COLOUR_GREY4); x = 100 + cos(angle) * 60; y = 100 + sin(angle) * 60; circlefill(tbmp2, x, y, 70, 0); blit(tbmp2, tbmp, 0,0,0,0,210,210); clear_bitmap(tbmp); circlefill(tbmp2, 100, 100, 60, COLOUR_GREY5); x = 100 + cos(angle) * 60; y = 100 + sin(angle) * 60; circlefill(tbmp2, x, y, 80, 0); x = 100;// - cos(angle) * 30; y = 100;// - sin(angle) * 30; circlefill(tbmp2, x, y, 30, COLOUR_GREY4); masked_blit(tbmp2, tbmp, 0,0,0,0,210,210); x = 100;// - cos(angle) * 30; y = 100;// - sin(angle) * 30; circlefill(tbmp, x, y, 20, COLOUR_GREY5); a1 = 64 - (i * 4 + 12); a2 = 64 - (i * 4 - 12); if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } else { if (i > 11) { arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } else arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } destroy_bitmap(tbmp2); break; case 5: tbmp2 = create_bitmap(210, 210); for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; if (i == 0) angle = 1 / (16 / (PI / 2)) - PI / 2;; clear_bitmap(tbmp2); circlefill(tbmp2, 100, 100, 70, COLOUR_GREY4); circlefill(tbmp2, 100, 100, 60, COLOUR_GREY5); /* x = 10 - cos(angle) * 40; y = 10 - sin(angle) * 40; circlefill(tbmp, x, y, 3, 0); x = 10 - cos(angle) * 30; y = 10 - sin(angle) * 30; circlefill(tbmp, x, y, 3, 0); x = 10 - cos(angle) * 20; y = 10 - sin(angle) * 20; circlefill(tbmp, x, y, 3, 0);*/ x = 100;// ;;+ cos(angle) * 1; y = 100;// + sin(angle) * 1; circlefill(tbmp2, x, y, 30, 0); x = 100 + cos(angle) * 20; y = 100 + sin(angle) * 20; circlefill(tbmp2, x, y, 30, 0); x = 100 + cos(angle) * 30; y = 100 + sin(angle) * 30; circlefill(tbmp2, x, y, 30, 0); x = 100 + cos(angle) * 40; y = 100 + sin(angle) * 40; circlefill(tbmp2, x, y, 30, 0); x = 100 + cos(angle) * 50; y = 100 + sin(angle) * 50; circlefill(tbmp2, x, y, 30, 0); x = 100 + cos(angle) * 60; y = 100 + sin(angle) * 60; circlefill(tbmp2, x, y, 30, 0); x = 100 + cos(angle) * 70; y = 100 + sin(angle) * 70; circlefill(tbmp2, x, y, 30, 0); blit(tbmp2, tbmp, 0,0,0,0,210,210); clear_bitmap(tbmp2); /* circlefill(tbmp, 10, 10, 6, COLOUR_GREY5); x = 100 + cos(angle) * 60; y = 100 + sin(angle) * 60; circlefill(tbmp, x, y, 8, 0); x = 100;// - cos(angle) * 30; y = 100;// - sin(angle) * 30; circlefill(tbmp, x, y, 4, COLOUR_GREY4); masked_blit(tbmp, ship_bitmaps [at] [i], 0,0,0,0,21,21);*/ x = 100;// - cos(angle) * 30; y = 100;// - sin(angle) * 30; circlefill(tbmp, x, y, 30, COLOUR_GREY5); a1 = 64 - (i * 4 + 12); a2 = 64 - (i * 4 - 12); if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } else { if (i > 11) { arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } else arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } destroy_bitmap(tbmp2); break; case 6: for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x1 = 100 + cos(angle + PI) * 50; y1 = 100 + sin(angle + PI) * 50; x2 = 100 + cos(angle + PI / 2) * 90; y2 = 100 + sin(angle + PI / 2) * 90; x3 = 100 + cos(angle - PI / 2) * 90; y3 = 100 + sin(angle - PI / 2) * 90; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 70; y1 = 100 + sin(angle) * 70; x2 = 100 + cos(angle + PI + PI / 3) * 40; y2 = 100 + sin(angle + PI + PI / 3) * 40; x3 = 100 + cos(angle + PI - PI / 3) * 40; y3 = 100 + sin(angle + PI - PI / 3) * 40; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI + PI / 3) * 30; y2 = 100 + sin(angle + PI + PI / 3) * 30; x3 = 100 + cos(angle + PI - PI / 3) * 30; y3 = 100 + sin(angle + PI - PI / 3) * 30; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle + PI) * 40; y1 = 100 + sin(angle + PI) * 40; x2 = 100 + cos(angle + PI / 2) * 80; y2 = 100 + sin(angle + PI / 2) * 80; x3 = 100 + cos(angle - PI / 2) * 80; y3 = 100 + sin(angle - PI / 2) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 30; y1 = 100 + sin(angle) * 30; circlefill(tbmp, x1, y1, 10, COLOUR_WHITE); // line(ship_bitmaps [at] [i], x1, y1, x2, y2, COLOUR_GREY4); // line(ship_bitmaps [at] [i], x2, y2, x3, y3, COLOUR_GREY4); // line(ship_bitmaps [at] [i], x1, y1, x3, y3, COLOUR_GREY4); stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break; case 7: for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; if (i == 0) angle = 1 / (16 / (PI / 2)) - PI / 2;; x = 100 + cos(angle) * 30; y = 100 + sin(angle) * 30; circlefill(tbmp, x, y, 20, COLOUR_GREY4); x1 = x + cos(angle + PI / 3) * 60; y1 = y + sin(angle + PI / 3) * 60; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = x + cos(angle - PI / 3) * 60; y1 = y + sin(angle - PI / 3) * 60; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = x + cos(angle + PI + PI / 2) * 60; y1 = y + sin(angle + PI + PI / 2) * 60; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = x + cos(angle + PI - PI / 2) * 70; y1 = y + sin(angle + PI - PI / 2) * 70; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = 100 + cos(angle + PI + PI / 3) * 60; y1 = 100 + sin(angle + PI + PI / 3) * 60; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = 100 + cos(angle + PI - PI / 3) * 60; y1 = 100 + sin(angle + PI - PI / 3) * 60; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = 100 + cos(angle + PI + PI / 6) * 70; y1 = 100 + sin(angle + PI + PI / 6) * 70; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x1 = 100 + cos(angle + PI - PI / 5) * 70; y1 = 100 + sin(angle + PI - PI / 5) * 70; line(ship_bitmaps [at] [i], x, y, x1, y1, COLOUR_GREY4); putpixel(ship_bitmaps [at] [i], x1, y1, COLOUR_GREY6); x = 100 + cos(angle) * 30; y = 100 + sin(angle) * 30; circlefill(tbmp, x, y, 30, COLOUR_GREY5); a1 = 64 - (i * 4 + 12); a2 = 64 - (i * 4 - 12); if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } else { if (i > 11) { arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } else arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break; case 8: for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x1 = 100 + cos(angle) * 70; y1 = 100 + sin(angle) * 70; x2 = 100 + cos(angle + PI / 2) * 50; y2 = 100 + sin(angle + PI / 2) * 50; x3 = 100 + cos(angle - PI / 2) * 50; y3 = 100 + sin(angle - PI / 2) * 50; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI / 2) * 40; y2 = 100 + sin(angle + PI / 2) * 40; x3 = 100 + cos(angle - PI / 2) * 40; y3 = 100 + sin(angle - PI / 2) * 40; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI - PI / 2) * 80; y2 = 100 + sin(angle + PI - PI / 2) * 80; x3 = 100 + cos(angle + PI - PI / 4) * 80; y3 = 100 + sin(angle + PI - PI / 4) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI + PI / 2) * 80; y2 = 100 + sin(angle + PI + PI / 2) * 80; x3 = 100 + cos(angle + PI + PI / 4) * 80; y3 = 100 + sin(angle + PI + PI / 4) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 50; y1 = 100 + sin(angle) * 50; x2 = 100 + cos(angle + PI - PI / 2) * 70; y2 = 100 + sin(angle + PI - PI / 2) * 70; x3 = 100 + cos(angle + PI - PI / 4) * 70; y3 = 100 + sin(angle + PI - PI / 4) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 50; y1 = 100 + sin(angle) * 50; x2 = 100 + cos(angle + PI + PI / 2) * 70; y2 = 100 + sin(angle + PI + PI / 2) * 70; x3 = 100 + cos(angle + PI + PI / 4) * 70; y3 = 100 + sin(angle + PI + PI / 4) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 30; y1 = 100 + sin(angle) * 30; circlefill(tbmp, x1, y1, 10, COLOUR_WHITE); stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); /* x1 = 100 + cos(angle) * 70; y1 = 100 + sin(angle) * 70; x2 = 100 + cos(angle + PI / 2) * 40; y2 = 100 + sin(angle + PI / 2) * 40; x3 = 100 + cos(angle - PI / 2) * 40; y3 = 100 + sin(angle - PI / 2) * 40; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI / 2) * 30; y2 = 100 + sin(angle + PI / 2) * 30; x3 = 100 + cos(angle - PI / 2) * 30; y3 = 100 + sin(angle - PI / 2) * 30; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI - PI / 2) * 80; y2 = 100 + sin(angle + PI - PI / 2) * 80; x3 = 100 + cos(angle + PI - PI / 4) * 80; y3 = 100 + sin(angle + PI - PI / 4) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI + PI / 2) * 80; y2 = 100 + sin(angle + PI + PI / 2) * 80; x3 = 100 + cos(angle + PI + PI / 4) * 80; y3 = 100 + sin(angle + PI + PI / 4) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 50; y1 = 100 + sin(angle) * 50; x2 = 100 + cos(angle + PI - PI / 2) * 70; y2 = 100 + sin(angle + PI - PI / 2) * 70; x3 = 100 + cos(angle + PI - PI / 4) * 70; y3 = 100 + sin(angle + PI - PI / 4) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 50; y1 = 100 + sin(angle) * 50; x2 = 100 + cos(angle + PI + PI / 2) * 70; y2 = 100 + sin(angle + PI + PI / 2) * 70; x3 = 100 + cos(angle + PI + PI / 4) * 70; y3 = 100 + sin(angle + PI + PI / 4) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 30; y1 = 100 + sin(angle) * 30; circlefill(tbmp, x1, y1, 10, COLOUR_WHITE); stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21);*/ } break; case 9: for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x1 = 100 + cos(angle) * 70; y1 = 100 + sin(angle) * 70; x2 = 100 + cos(angle + PI / 2) * 30; y2 = 100 + sin(angle + PI / 2) * 30; x3 = 100 + cos(angle - PI / 2) * 30; y3 = 100 + sin(angle - PI / 2) * 30; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI / 2) * 20; y2 = 100 + sin(angle + PI / 2) * 20; x3 = 100 + cos(angle - PI / 2) * 20; y3 = 100 + sin(angle - PI / 2) * 20; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI - PI / 4) * 80; y2 = 100 + sin(angle + PI - PI / 4) * 80; x3 = 100 + cos(angle + PI - PI / 8) * 80; y3 = 100 + sin(angle + PI - PI / 8) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI + PI / 4) * 80; y2 = 100 + sin(angle + PI + PI / 4) * 80; x3 = 100 + cos(angle + PI + PI / 8) * 80; y3 = 100 + sin(angle + PI + PI / 8) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 50; y1 = 100 + sin(angle) * 50; x2 = 100 + cos(angle + PI - PI / 4) * 70; y2 = 100 + sin(angle + PI - PI / 4) * 70; x3 = 100 + cos(angle + PI - PI / 8) * 70; y3 = 100 + sin(angle + PI - PI / 8) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 50; y1 = 100 + sin(angle) * 50; x2 = 100 + cos(angle + PI + PI / 4) * 70; y2 = 100 + sin(angle + PI + PI / 4) * 70; x3 = 100 + cos(angle + PI + PI / 8) * 70; y3 = 100 + sin(angle + PI + PI / 8) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 30; y1 = 100 + sin(angle) * 30; circlefill(tbmp, x1, y1, 10, COLOUR_WHITE); stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break; case 11: for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); // tbmp = create_bitmap(210, 210); // clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; points [0] = 100 + cos(angle + PI / 2) * 30; points [1] = 100 + sin(angle + PI / 2) * 30; points [2] = 100 + cos(angle + PI / 10) * 80; points [3] = 100 + sin(angle + PI / 10) * 80; points [4] = 100 + cos(angle + PI / 7) * 90; points [5] = 100 + sin(angle + PI / 7) * 90; points [6] = 100 + cos(angle + PI - PI / 3) * 50; points [7] = 100 + sin(angle + PI - PI / 3) * 50; points [8] = 100 + cos(angle + PI + PI / 3) * 50; points [9] = 100 + sin(angle + PI + PI / 3) * 50; points [10] = 100 + cos(angle - PI / 7) * 90; points [11] = 100 + sin(angle - PI / 7) * 90; points [12] = 100 + cos(angle - PI / 10) * 80; points [13] = 100 + sin(angle - PI / 10) * 80; points [14] = 100 + cos(angle - PI / 2) * 30; points [15] = 100 + sin(angle - PI / 2) * 30; polygon(tbmp, 8, points, COLOUR_GREY4); x1 = 100 + cos(angle + PI) * 40; y1 = 100 + sin(angle + PI) * 40; x2 = 100 + cos(angle + PI / 2) * 70; y2 = 100 + sin(angle + PI / 2) * 70; x3 = 100 + cos(angle - PI / 2) * 70; y3 = 100 + sin(angle - PI / 2) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle + PI) * 30; y1 = 100 + sin(angle + PI) * 30; x2 = 100 + cos(angle + PI / 2) * 60; y2 = 100 + sin(angle + PI / 2) * 60; x3 = 100 + cos(angle - PI / 2) * 60; y3 = 100 + sin(angle - PI / 2) * 60; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); points [0] = 100 + cos(angle + PI / 2) * 20; points [1] = 100 + sin(angle + PI / 2) * 20; points [2] = 100 + cos(angle + PI / 8) * 70; points [3] = 100 + sin(angle + PI / 8) * 70; points [4] = 100 + cos(angle + PI / 5) * 80; points [5] = 100 + sin(angle + PI / 5) * 80; points [6] = 100 + cos(angle + PI - PI / 3) * 40; points [7] = 100 + sin(angle + PI - PI / 3) * 40; points [8] = 100 + cos(angle + PI + PI / 3) * 40; points [9] = 100 + sin(angle + PI + PI / 3) * 40; points [10] = 100 + cos(angle - PI / 5) * 80; points [11] = 100 + sin(angle - PI / 5) * 80; points [12] = 100 + cos(angle - PI / 8) * 70; points [13] = 100 + sin(angle - PI / 8) * 70; points [14] = 100 + cos(angle - PI / 2) * 20; points [15] = 100 + sin(angle - PI / 2) * 20; polygon(tbmp, 8, points, COLOUR_GREY5); x1 = 100;// - cos(angle) * 20; y1 = 100;// - sin(angle) * 20; circlefill(tbmp, x1, y1, 10, COLOUR_WHITE); stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break; /* case 12: for (i = 0; i < 17; i ++) { ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; if (i == 0) angle = 1 / (16 / (PI / 2)) - PI / 2;; points [0] = 100 + cos(angle) * 20; points [1] = 100 + sin(angle) * 20; points [2] = 100 + cos(angle + PI / 2) * 90; points [3] = 100 + sin(angle + PI / 2) * 90; points [4] = 100 + cos(angle + PI) * 20; points [5] = 100 + sin(angle + PI) * 20; points [6] = 100 + cos(angle - PI / 2) * 70; points [7] = 100 + sin(angle - PI / 2) * 70; polygon(ship_bitmaps [at] [i], 4, points, COLOUR_GREY4); circle(tbmp, 100, 100, 70, COLOUR_GREY5); x = 100;// - cos(angle) * 30; y = 100;// - sin(angle) * 30; // circle(tbmp, x, y, 7, COLOUR_GREY4); circle(tbmp, x, y, 80, COLOUR_GREY5); x = 100 + cos(angle) * 12; y = 100 + sin(angle) * 12; circlefill(tbmp, x, y, 90, 0); x = 10 - cos(angle) * 12; y = 10 - sin(angle) * 12; circlefill(tbmp, x, y, 80, 0); circlefill(tbmp, 100, 100, 30, COLOUR_GREY4); points [0] = 100 + cos(angle) * 1; points [1] = 100 + sin(angle) * 1; points [2] = 100 + cos(angle + PI / 2) * 80; points [3] = 100 + sin(angle + PI / 2) * 80; points [4] = 100 + cos(angle + PI) * 1; points [5] = 100 + sin(angle + PI) * 1; points [6] = 100 + cos(angle - PI / 2) * 60; points [7] = 100 + sin(angle - PI / 2) * 60; polygon(ship_bitmaps [at] [i], 4, points, COLOUR_GREY5); x = 100;// - cos(angle) * 30; y = 100;// - sin(angle) * 30; // circlefill(tbmp, x, y, 3, COLOUR_GREY4); circlefill(tbmp, x, y, 20, COLOUR_GREY5); // circlefill(tbmp, 10, 10, 1, COLOUR_GREY6); x = 100;// - cos(angle) * 30; y = 100;// - sin(angle) * 30; a1 = 64 - (i * 4 + 12); a2 = 64 - (i * 4 - 12); if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } else { if (i > 11) { arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } else arc(tbmp, x, y, itofix(a1), itofix(a2), 10, COLOUR_WHITE); } stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break;*/ /* case 13: for (i = 0; i < 17; i ++) { //. tbmp = create_bitmap(210, 210); clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x1 = 100 + cos(angle) * 70; y1 = 100 + sin(angle) * 70; x2 = 100 + cos(angle + PI / 2) * 40; y2 = 100 + sin(angle + PI / 2) * 40; x3 = 100 + cos(angle - PI / 2) * 40; y3 = 100 + sin(angle - PI / 2) * 40; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI / 2) * 30; y2 = 100 + sin(angle + PI / 2) * 30; x3 = 100 + cos(angle - PI / 2) * 30; y3 = 100 + sin(angle - PI / 2) * 30; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI - PI / 4) * 80; y2 = 100 + sin(angle + PI - PI / 4) * 80; x3 = 100 + cos(angle + PI - PI / 8) * 80; y3 = 100 + sin(angle + PI - PI / 8) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 60; y1 = 100 + sin(angle) * 60; x2 = 100 + cos(angle + PI + PI / 4) * 80; y2 = 100 + sin(angle + PI + PI / 4) * 80; x3 = 100 + cos(angle + PI + PI / 8) * 80; y3 = 100 + sin(angle + PI + PI / 8) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 50; y1 = 100 + sin(angle) * 50; x2 = 100 + cos(angle + PI - PI / 4) * 70; y2 = 100 + sin(angle + PI - PI / 4) * 70; x3 = 100 + cos(angle + PI - PI / 8) * 70; y3 = 100 + sin(angle + PI - PI / 8) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 50; y1 = 100 + sin(angle) * 50; x2 = 100 + cos(angle + PI + PI / 4) * 70; y2 = 100 + sin(angle + PI + PI / 4) * 70; x3 = 100 + cos(angle + PI + PI / 8) * 70; y3 = 100 + sin(angle + PI + PI / 8) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 30; y1 = 100 + sin(angle) * 30; circlefill(tbmp, x1, y1, 10, COLOUR_WHITE); stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break;*/ case 12: for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x1 = 100 + cos(angle) * 90; y1 = 100 + sin(angle) * 90; x2 = 100 + cos(angle + PI / 2) * 40; y2 = 100 + sin(angle + PI / 2) * 40; x3 = 100 + cos(angle - PI / 2) * 40; y3 = 100 + sin(angle - PI / 2) * 40; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle + PI - PI / 3) * 90; y1 = 100 + sin(angle + PI - PI / 3) * 90; x2 = 100 + cos(angle + PI / 4) * 40; y2 = 100 + sin(angle + PI / 4) * 40; x3 = 100 + cos(angle + PI) * 20; y3 = 100 + sin(angle + PI) * 20; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle + PI + PI / 3) * 90; y1 = 100 + sin(angle + PI + PI / 3) * 90; x2 = 100 + cos(angle - PI / 4) * 40; y2 = 100 + sin(angle - PI / 4) * 40; x3 = 100 + cos(angle + PI) * 20; y3 = 100 + sin(angle + PI) * 20; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100; y1 = 100; circlefill(tbmp, x1, y1, 30, COLOUR_GREY4); x1 = 100 + cos(angle) * 80; y1 = 100 + sin(angle) * 80; x2 = 100 + cos(angle + PI / 2) * 30; y2 = 100 + sin(angle + PI / 2) * 30; x3 = 100 + cos(angle - PI / 2) * 30; y3 = 100 + sin(angle - PI / 2) * 30; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle + PI - PI / 3) * 80; y1 = 100 + sin(angle + PI - PI / 3) * 80; x2 = 100 + cos(angle + PI / 4) * 30; y2 = 100 + sin(angle + PI / 4) * 30; x3 = 100 + cos(angle + PI) * 10; y3 = 100 + sin(angle + PI) * 10; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle + PI + PI / 3) * 80; y1 = 100 + sin(angle + PI + PI / 3) * 80; x2 = 100 + cos(angle - PI / 4) * 30; y2 = 100 + sin(angle - PI / 4) * 30; x3 = 100 + cos(angle + PI) * 10; y3 = 100 + sin(angle + PI) * 10; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100; y1 = 100; circlefill(tbmp, x1, y1, 20, COLOUR_GREY5); /* x1 = 100 + cos(angle + PI / 2) * 80; y1 = 100 + sin(angle + PI / 2) * 80; x2 = 100;// + cos(angle + PI / 2) * 20; y2 = 100;// + sin(angle + PI / 2) * 20; x3 = 100 + cos(angle + PI / 2 + PI / 5) * 80; y3 = 100 + sin(angle + PI / 2 + PI / 5) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle - PI / 2) * 80; y1 = 100 + sin(angle - PI / 2) * 80; x2 = 100;// + cos(angle + PI / 2) * 20; y2 = 100;// + sin(angle + PI / 2) * 20; x3 = 100 + cos(angle - PI / 2 - PI / 5) * 80; y3 = 100 + sin(angle - PI / 2 - PI / 5) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 70; y1 = 100 + sin(angle) * 70; x2 = 100 + cos(angle + PI / 2) * 35; y2 = 100 + sin(angle + PI / 2) * 35; x3 = 100 + cos(angle - PI / 2) * 35; y3 = 100 + sin(angle - PI / 2) * 35; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle + PI / 2) * 70; y1 = 100 + sin(angle + PI / 2) * 70; x2 = 100;// + cos(angle + PI / 2) * 20; y2 = 100;// + sin(angle + PI / 2) * 20; x3 = 100 + cos(angle + PI / 2 + PI / 5) * 70; y3 = 100 + sin(angle + PI / 2 + PI / 5) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle - PI / 2) * 70; y1 = 100 + sin(angle - PI / 2) * 70; x2 = 100;// + cos(angle + PI / 2) * 20; y2 = 100;// + sin(angle + PI / 2) * 20; x3 = 100 + cos(angle - PI / 2 - PI / 5) * 70; y3 = 100 + sin(angle - PI / 2 - PI / 5) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5);*/ x1 = 100 + cos(angle) * 40; y1 = 100 + sin(angle) * 40; circlefill(tbmp, x1, y1, 10, COLOUR_WHITE); stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break; case 13: tbmp2 = create_bitmap(210, 210); for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; if (i == 0) angle = 1 / (16 / (PI / 2)) - PI / 2;; clear_bitmap(tbmp2); x1 = 100 - cos(angle) * 20; y1 = 100 - sin(angle) * 20; circlefill(tbmp2, x1, y1, 80, COLOUR_GREY4); circlefill(tbmp2, x1, y1, 70, COLOUR_GREY5); // x = 100;// ;;+ cos(angle) * 1; // y = 100;// + sin(angle) * 1; // circlefill(tbmp2, x, y, 30, 0); x = 100 - cos(angle) * 70; y = 100 - sin(angle) * 70; circlefill(tbmp2, x, y, 75, 0); /* x = 100 - cos(angle) * 30; y = 100 - sin(angle) * 30; circlefill(tbmp2, x, y, 30, 0); x = 100 - cos(angle) * 40; y = 100 - sin(angle) * 40; circlefill(tbmp2, x, y, 30, 0); x = 100 - cos(angle) * 50; y = 100 - sin(angle) * 50; circlefill(tbmp2, x, y, 30, 0); x = 100 - cos(angle) * 60; y = 100 - sin(angle) * 60; circlefill(tbmp2, x, y, 30, 0); x = 100 - cos(angle) * 70; y = 100 - sin(angle) * 70; circlefill(tbmp2, x, y, 30, 0);*/ blit(tbmp2, tbmp, 0,0,0,0,210,210); clear_bitmap(tbmp2); x = x1 + cos(angle + PI / 4 + PI / 6) * 40; y = y1 + sin(angle + PI / 4 + PI / 6) * 40; circlefill(tbmp, x, y, 20, COLOUR_GREY4); circlefill(tbmp, x, y, 10, COLOUR_GREY5); x = x1 + cos(angle - PI / 4 - PI / 6) * 40; y = y1 + sin(angle - PI / 4 - PI / 6) * 40; circlefill(tbmp, x, y, 20, COLOUR_GREY4); circlefill(tbmp, x, y, 10, COLOUR_GREY5); x = 100 - cos(angle) * 20; y = 100 - sin(angle) * 20; a1 = 64 - (i * 4 + 12); a2 = 64 - (i * 4 - 12); if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); } arc(tbmp, x, y, itofix(a1), itofix(a2), 50, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 49, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 48, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 47, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 46, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 45, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 44, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 43, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 42, COLOUR_WHITE); /* if (i == 12) { a1 = 0 + 256;//64 - (i * 4 + 19); a2 = 35 + 256; //64 - (i * 4 - 19); arc(tbmp, x, y, itofix(a1), itofix(a2), 50, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 49, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 48, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 47, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 46, COLOUR_WHITE); } else { if (i > 11) { arc(tbmp, x, y, itofix(a1), itofix(a2), 50, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 49, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 48, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 47, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 46, COLOUR_WHITE); } else { arc(tbmp, x, y, itofix(a1), itofix(a2), 50, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 49, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 48, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 47, COLOUR_WHITE); arc(tbmp, x, y, itofix(a1), itofix(a2), 46, COLOUR_WHITE); } }*/ stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } destroy_bitmap(tbmp2); break; case 14: for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x1 = 100 + cos(angle) * 80; y1 = 100 + sin(angle) * 80; x2 = 100 + cos(angle + PI / 2) * 40; y2 = 100 + sin(angle + PI / 2) * 40; x3 = 100 + cos(angle - PI / 2) * 40; y3 = 100 + sin(angle - PI / 2) * 40; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle + PI / 2) * 80; y1 = 100 + sin(angle + PI / 2) * 80; x2 = 100;// + cos(angle + PI / 2) * 20; y2 = 100;// + sin(angle + PI / 2) * 20; x3 = 100 + cos(angle + PI / 2 + PI / 5) * 80; y3 = 100 + sin(angle + PI / 2 + PI / 5) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle - PI / 2) * 80; y1 = 100 + sin(angle - PI / 2) * 80; x2 = 100;// + cos(angle + PI / 2) * 20; y2 = 100;// + sin(angle + PI / 2) * 20; x3 = 100 + cos(angle - PI / 2 - PI / 5) * 80; y3 = 100 + sin(angle - PI / 2 - PI / 5) * 80; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle) * 70; y1 = 100 + sin(angle) * 70; x2 = 100 + cos(angle + PI / 2) * 35; y2 = 100 + sin(angle + PI / 2) * 35; x3 = 100 + cos(angle - PI / 2) * 35; y3 = 100 + sin(angle - PI / 2) * 35; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle + PI / 2) * 70; y1 = 100 + sin(angle + PI / 2) * 70; x2 = 100;// + cos(angle + PI / 2) * 20; y2 = 100;// + sin(angle + PI / 2) * 20; x3 = 100 + cos(angle + PI / 2 + PI / 5) * 70; y3 = 100 + sin(angle + PI / 2 + PI / 5) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle - PI / 2) * 70; y1 = 100 + sin(angle - PI / 2) * 70; x2 = 100;// + cos(angle + PI / 2) * 20; y2 = 100;// + sin(angle + PI / 2) * 20; x3 = 100 + cos(angle - PI / 2 - PI / 5) * 70; y3 = 100 + sin(angle - PI / 2 - PI / 5) * 70; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle) * 40; y1 = 100 + sin(angle) * 40; circlefill(tbmp, x1, y1, 10, COLOUR_WHITE); stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break; case 15: for (i = 0; i < 17; i ++) { clear_bitmap(tbmp); ship_bitmaps [at] [i] = create_bitmap(21, 21); clear_bitmap(ship_bitmaps [at] [i]); angle = i / (16 / (PI / 2)) - PI / 2; if (i == 16) angle = 0; x1 = 100 + cos(angle + PI / 26) * 90; y1 = 100 + sin(angle + PI / 26) * 90; x2 = 100 + cos(angle + PI / 2) * 60; y2 = 100 + sin(angle + PI / 2) * 60; x3 = 100 + cos(angle + PI - PI / 26) * 60; y3 = 100 + sin(angle + PI - PI / 26) * 60; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); x1 = 100 + cos(angle - PI / 26) * 90; y1 = 100 + sin(angle - PI / 26) * 90; x2 = 100 + cos(angle - PI / 2) * 60; y2 = 100 + sin(angle - PI / 2) * 60; x3 = 100 + cos(angle + PI + PI / 26) * 60; y3 = 100 + sin(angle + PI + PI / 26) * 60; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY4); /* x1 = 100 + cos(angle + PI - PI / 4) * 50; y1 = 100 + sin(angle + PI - PI / 4) * 50; circlefill(tbmp, x1, y1, 35, COLOUR_GREY4); x1 = 100 + cos(angle + PI + PI / 4) * 50; y1 = 100 + sin(angle + PI + PI / 4) * 50; circlefill(tbmp, x1, y1, 35, COLOUR_GREY4);*/ x1 = 100 - cos(angle) * 30; y1 = 100 - sin(angle) * 30; circlefill(tbmp, x1, y1, 40, COLOUR_GREY4); x1 = 100 + cos(angle + PI / 26) * 80; y1 = 100 + sin(angle + PI / 26) * 80; x2 = 100 + cos(angle + PI / 2) * 50; y2 = 100 + sin(angle + PI / 2) * 50; x3 = 100 + cos(angle + PI - PI / 26) * 50; y3 = 100 + sin(angle + PI - PI / 26) * 50; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 + cos(angle - PI / 26) * 80; y1 = 100 + sin(angle - PI / 26) * 80; x2 = 100 + cos(angle - PI / 2) * 50; y2 = 100 + sin(angle - PI / 2) * 50; x3 = 100 + cos(angle + PI + PI / 26) * 50; y3 = 100 + sin(angle + PI + PI / 26) * 50; triangle(tbmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); x1 = 100 - cos(angle) * 30; y1 = 100 - sin(angle) * 30; circlefill(tbmp, x1, y1, 30, COLOUR_GREY5); x1 = 100 - cos(angle) * 20; y1 = 100 - sin(angle) * 20; circlefill(tbmp, x1, y1, 10, COLOUR_WHITE); stretch_sprite(ship_bitmaps [at] [i], tbmp, 0, 0, 21, 21); } break; } destroy_bitmap(tbmp); } #endif overgod-1.0/displ_in.h0000644000175000001440000000007110164332310013770 0ustar michiusersvoid init_display(void); void prepare_display(void); overgod-1.0/display.c0000644000175000001440000106465110310776026013657 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: display.c History: 11/9/2005 - Version 1.0 finalised This file contains: - functions which put stuff onto the screen */ #include "allegro.h" #include #include #include "config.h" #include "globvars.h" #include "palette.h" #include "stuff.h" #include "light.h" #define COMPILING_DISPLAYC #include "display.h" #undef COMPILING_DISPLAYC //#define DEBUG_DISPLAY int debug_info; extern struct lightstruct light [NO_LIGHTS]; int pline(BITMAP *bmp, int x1, int y1, int x2, int y2, int colour); //#define DEBUG_ENEMY_SIZE BITMAP *player1; BITMAP *player2; #ifdef DEBUG_DISPLAY #include // for itoa, used in the screenshot code but not needed for ports etc extern volatile int frames_per_second; extern volatile int ticked; extern int slacktime; extern int long_slacktime_store; extern int debug_sound [5]; int slack_graph [100]; int slack_graph_pos; int fps_graph [100]; int fps_graph_pos; #endif extern struct optionstruct options; //BITMAP *ship_bitmaps [2] [65]; // externed in displ_in.c BITMAP *ship_bitmaps [NO_SHIP_TYPES] [17]; BITMAP *gb_ship_bitmaps [GB_SHIP_TYPES] [17]; BITMAP *enemy1_bmp [ENEMY1_BMPS]; RLE_SPRITE *enemy1_rle [ENEMY1_RLES]; RLE_SPRITE *small1_rle [SMALL1_RLES]; RLE_SPRITE *small3_rle [SMALL3_RLES]; RLE_SPRITE *enemy2_rle [ENEMY2_RLES]; RLE_SPRITE *enemy3_rle [ENEMY3_RLES]; RLE_SPRITE *enemy4_rle [ENEMY4_RLES]; RLE_SPRITE *enemy5_rle [ENEMY5_RLES]; RLE_SPRITE *enemy6_rle [ENEMY6_RLES]; RLE_SPRITE *enemy7_rle [ENEMY7_RLES]; RLE_SPRITE *enemy8_rle [ENEMY8_RLES]; RLE_SPRITE *enemy9_rle [ENEMY9_RLES]; BITMAP *small2_bmp [SMALL2_BMPS]; BITMAP *small4_bmp [SMALL4_BMPS]; BITMAP *enemy_bmps [ENEMY_BMPS]; //extern float cos_table [ANGLE_FULL]; BITMAP *pretile_bmp [NO_PRETILE_BMPS]; BITMAP *pretile_m_bmp [NO_MAZES] [NO_PRETILE_M_BMPS]; RLE_SPRITE *tile_rle [NO_TILE_RLES]; BITMAP *level_bmp; BITMAP *redbang_bmp [50]; RLE_SPRITE *light_rle [100]; BITMAP *superjelly_bmp [2]; BITMAP *shield_bmp [SHIELD_BMPS]; RLE_SPRITE *waver1_circle; RLE_SPRITE *waver2_circle; RLE_SPRITE *large_ships [16] [5]; RLE_SPRITE *tile_background; FONT *font2; FONT *small_font; struct effects_struct effect [MAX_EFFECTS]; int var1, var2, var3; // debug display vars, externed as necessary int graphics_mode; int scr_x; int scr_y; int grid_offset_x_1p; int grid_offset_x_2p; int grid_offset_x_2p_finetune; int grid_offset_y; int special_600_y; int text_offset_x; int text_offset_x_1p; int text_offset_x_2p; int text_offset_y; int grid_finetune_x_1p; int grid_finetune_x_2p; int grid_finetune_y; int visible_grids_y; int tp_window_width; void indicate_fps(BITMAP *bmp, int play); void draw_effects(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y); void draw_an_effect(BITMAP *bmp, int dr, int x, int y); void beam_points(BITMAP *bmp, int x1, int y1, int x2, int y2, int angle, int out1, int out2, int colour); //void draw_lock(BITMAP *bmp, int dr, int x, int y, int rad); //void draw_turret_lock(BITMAP *bmp, int dr, int x, int y, int rad); void draw_locks(BITMAP *bmp, int p); float angle_to_radians(int angle); int inflicteda, inflictede; //void draw_grid(BITMAP *bmp, int xloc, int yloc, int max_x, int max_y, int colour); void draw_stars(BITMAP *bmp, int max_x, int max_y, int player); void draw_grid(BITMAP *bmp, int max_x, int max_y, int play, int colour, int edge_colour, int x_offset, int centre_x, int centre_y, int finetune_x, int finetune_y); void draw_actors(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y); void draw_hud(BITMAP *bmp, int x, int y, int i); void draw_eyes(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y); void draw_an_eye(BITMAP *bmp, int i, int x, int y); void draw_an_actor(BITMAP *bmp, int dr, int x, int y, int play); void draw_ship_bitmap(BITMAP *bmp, int x, int y, int angle, int which_ship, int width, int height); void draw_triangle_ship(BITMAP *bmp, int dr, int size, int pointiness, int x, int y, unsigned char colour1, unsigned char colour2); //void draw_scan(BITMAP *bmp, int max_x, int max_y, int play, char range); //void draw_scan_dot(BITMAP *bmp, int x, int y, int type); void draw_status2(BITMAP *bmp, int max_x, int max_y, int play); void draw_bullets(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y); void draw_a_bullet(BITMAP *bmp, int dr, int x, int y, int x2, int y2, int max_x, int max_y, int play); void draw_enemies(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y); void draw_an_enemy_inter(BITMAP *bmp, int e, int max_x, int max_y, int play, int centre_x, int centre_y); void draw_an_enemy_inter2(BITMAP *bmp, int e, int max_x, int max_y, int play, int centre_x, int centre_y); void draw_an_enemy(BITMAP *bmp, int dr, int x, int y); void draw_clouds(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y); void draw_a_cloud(BITMAP *bmp, int dr, int x, int y, int x2, int y2); void draw_pickups(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y); void draw_a_pickup(BITMAP *bmp, int dr, int x, int y); void get_pickup_colour(int st, int cols [3]); void write_colour_text(BITMAP *bmp, int x, int y, int which); void draw_static_symbol(BITMAP *bmp, int x, int y, int col, int symb); void draw_crosshair(BITMAP *bmp, int dr, int x, int y); int get_circler_colour(int x1); void draw_wave(BITMAP *bmp, int x, int y, int count, int size); //void draw_sidekicks(BITMAP *bmp, int max_x, int max_y, int play, int a); void draw_ship_status(BITMAP *bmp, int x, int y, int a, int style); void draw_upgrades(BITMAP *bmp, int x, int y, int play); char *upgrade_name(int i); char *primary_name(int i); void secondary_name(int i, char dstr [30]); void draw_crawler_legs(BITMAP *bmp, int x, int y, int e, int col); void draw_spinner(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2); void draw_overspinner(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2); void draw_spikey(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2, int in_correction, int out_correction); void draw_blatter(BITMAP *bmp, int x, int y, int number, int distance, int rotation, int size, int col1, int col2); void draw_squarey(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2); void draw_orbiter(BITMAP *bmp, int x, int y, int attribute, int out1, int out2, int out3, int angle1, int angle2, int arms, int col1, int col2); void draw_puffer(BITMAP *bmp, int x, int y, int angle, int number, int distance, int size, int incol, int outcol); void draw_launchers(BITMAP *bmp, int x, int y, int angle, int d_f_centre, int diagonal, int interior_angle, int recoil1, int recoil2, int col1, int col2); void draw_tri(BITMAP *bmp, int x, int y, int angle, int length1, int length2, int angle2, int col1, int col2); void draw_waver(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2, RLE_SPRITE *waver_rle, int waver_rle_size); void distortion(BITMAP *bmp, int x, int y, int wx, int wy, int dx, int dy); BITMAP *distortion_mask; BITMAP *crystal_bmp; int set_lock_x [2]; int set_lock_y [2]; int set_lock_radius [2]; int set_turret_lock_x [2]; int set_turret_lock_y [2]; int set_turret_lock_radius [2]; #define NO_MESSAGES 10 char messages [2] [NO_MESSAGES] [70]; int message_style [2] [NO_MESSAGES]; int message_counter [2] [NO_MESSAGES]; char scroll_text [10] [50]; int scroll_position [10]; int scroll_colour [10]; void display_messages(BITMAP *bmp, int play, int max_x, int max_y); void kill_message(int play, int i); void draw_lights(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y); void draw_a_light(BITMAP *bmp, int size, int x, int y); void bordered_rect(BITMAP *bmp, int x1, int y1, int x2, int y2, int colour1, int colour2); void bordered_triangle(BITMAP *bmp, int x1, int y1, int x2, int y2, int x3, int y3, int col1, int col2); void draw_spark_jump(BITMAP *bmp, int x1, int y1, int x2, int y2, int parts, int scatter, int col, int transy); //char prim_name [4] [10] /* void display_scrollbar(BITMAP *bmp, int play, int max_x, int max_y) { } void new_scroll(const char *msg, int colour) { } void run_scrollbar(int play) { } */ void run_display(void) { static int counter; counter++; if (counter > 40000) counter = 0; // int i; int centre_x, centre_y; // draw_grid(player1, 150 + counter, 150 + counter, scr_x, scr_y, 100, 2); // draw_grid(player1, actor[0].x / GRAIN, actor[0].y / GRAIN, scr_x, scr_y, actor[0].angle, 2); if (game.users == 1) { centre_x = actor[player[game.single_player].actor_controlled].x + player[game.single_player].screen_shake_x; centre_y = actor[player[game.single_player].actor_controlled].y + player[game.single_player].screen_shake_y; set_lock_x [game.single_player] = 0; set_lock_y [game.single_player] = 0; set_lock_radius [game.single_player] = 0; set_turret_lock_x [game.single_player] = 0; set_turret_lock_y [game.single_player] = 0; set_turret_lock_radius [game.single_player] = 0; // draw_stars(player1, scr_x, scr_y, 0); // clear_to_color(player1, arena.colour3); draw_grid(player1, scr_x, scr_y, game.single_player, arena.colour1, arena.colour2, grid_offset_x_1p, centre_x, centre_y, grid_finetune_x_1p, grid_finetune_y); draw_pickups(player1, scr_x, scr_y, game.single_player, centre_x, centre_y); draw_enemies(player1, scr_x, scr_y, game.single_player, centre_x, centre_y); draw_actors(player1, scr_x, scr_y, game.single_player, centre_x, centre_y); draw_bullets(player1, scr_x, scr_y, game.single_player, centre_x, centre_y); draw_effects(player1, scr_x, scr_y, game.single_player, centre_x, centre_y); draw_clouds(player1, scr_x, scr_y, game.single_player, centre_x, centre_y); draw_eyes(player1, scr_x, scr_y, game.single_player, centre_x, centre_y); draw_lights(player1, scr_x, scr_y, game.single_player, centre_x, centre_y); // after here, it's just HUD and screen_shake isn't applied: draw_upgrades(player1, scr_x / 2 - 120, scr_y - 45, game.single_player); draw_status2(player1, scr_x, scr_y, game.single_player); draw_locks(player1, game.single_player); /* if (actor[player[game.single_player].actor_controlled].lock != -1 && enemy[actor[player[game.single_player].actor_controlled].lock].type != ENEMY_NONE && set_lock_radius [game.single_player] != 0) draw_lock(player1, player[game.single_player].actor_controlled, set_lock_x [game.single_player], set_lock_y [game.single_player], set_lock_radius [game.single_player]); if (actor[player[game.single_player].actor_controlled].turret_lock != -1 && enemy[actor[player[game.single_player].actor_controlled].turret_lock].type != ENEMY_NONE) draw_turret_lock(player1, player[game.single_player].actor_controlled, set_turret_lock_x [game.single_player], set_turret_lock_y [game.single_player], set_turret_lock_radius [game.single_player]);*/ indicate_fps(player1, game.single_player); // display_messages(player1, game.single_player, scr_x, scr_y); /* drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); for (i = 195; i < 206; i ++) { rectfill(player1, 10 + (i-195) * 30, 100, 30 + (i-195) * 30, 150, i); } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0);*/ if (options.run_vsync > 0) vsync(); // textprintf_ex(player1, font, 100, 100, COLOUR_GREY5, COLOUR_YELLOW1, "%i", grand(500)); blit(player1, screen, 0, 0, 0, 0, scr_x, scr_y); } else { // grid_offset_x_2p = centre_x = actor[player[0].actor_controlled].x + player[0].screen_shake_x; centre_y = actor[player[0].actor_controlled].y + player[0].screen_shake_y; set_lock_x [0] = 0; set_lock_y [0] = 0; set_lock_radius [0] = 0; set_turret_lock_x [0] = 0; set_turret_lock_y [0] = 0; set_turret_lock_radius [0] = 0; set_lock_x [1] = 0; set_lock_y [1] = 0; set_lock_radius [1] = 0; set_turret_lock_x [1] = 0; set_turret_lock_y [1] = 0; set_turret_lock_radius [1] = 0; // draw_stars(player1, 310, scr_y, 0); // clear_to_color(player1, arena.colour3); // clear_to_color(player2, arena.colour3); draw_grid(player1, tp_window_width, scr_y, 0, arena.colour1, arena.colour2, grid_offset_x_2p, centre_x, centre_y, grid_offset_x_2p_finetune, grid_finetune_y); draw_pickups(player1, tp_window_width, scr_y, 0, centre_x, centre_y); draw_enemies(player1, tp_window_width, scr_y, 0, centre_x, centre_y); draw_actors(player1, tp_window_width, scr_y, 0, centre_x, centre_y); draw_bullets(player1, tp_window_width, scr_y, 0, centre_x, centre_y); draw_effects(player1, tp_window_width, scr_y, 0, centre_x, centre_y); draw_clouds(player1, tp_window_width, scr_y, 0, centre_x, centre_y); draw_eyes(player1, tp_window_width, scr_y, 0, centre_x, centre_y); draw_lights(player1, tp_window_width, scr_y, 0, centre_x, centre_y); // draw_scan(player1, 50, 50, actor[player[0].actor_controlled].angle, 0, 0); // draw_scan(player1, 260, 50, actor[player[0].actor_controlled].angle, 0, 1); // draw_hud(player1, 155, 360, player[0].actor_controlled); // draw_upgrades(player1, 40, 420, 0); // draw_upgrades(player1, 16, 460, 0); draw_upgrades(player1, tp_window_width / 2 - 120, scr_y - 20, 0);//game.single_player); draw_status2(player1, tp_window_width, scr_y, 0); indicate_fps(player1, 0); // display_messages(player1, 0, 310, scr_y); centre_x = actor[player[1].actor_controlled].x + player[1].screen_shake_x; centre_y = actor[player[1].actor_controlled].y + player[1].screen_shake_y; // draw_stars(player2, 310, scr_y, 1); draw_grid(player2, tp_window_width, scr_y, 1, arena.colour1, arena.colour2, grid_offset_x_2p, centre_x, centre_y, grid_offset_x_2p_finetune, grid_finetune_y); draw_eyes(player2, tp_window_width, scr_y, 1, centre_x, centre_y); draw_pickups(player2, tp_window_width, scr_y, 1, centre_x, centre_y); draw_enemies(player2, tp_window_width, scr_y, 1, centre_x, centre_y); draw_actors(player2, tp_window_width, scr_y, 1, centre_x, centre_y); draw_bullets(player2, tp_window_width, scr_y, 1, centre_x, centre_y); draw_effects(player2, tp_window_width, scr_y, 1, centre_x, centre_y); draw_clouds(player2, tp_window_width, scr_y, 1, centre_x, centre_y); draw_eyes(player2, tp_window_width, scr_y, 1, centre_x, centre_y); draw_lights(player2, tp_window_width, scr_y, 1, centre_x, centre_y); // draw_scan(player2, 50, 50, actor[player[1].actor_controlled].angle, 1, 0); // draw_scan(player2, 260, 50, actor[player[1].actor_controlled].angle, 1, 1); // draw_hud(player2, 155, 360, player[1].actor_controlled); draw_upgrades(player2, tp_window_width / 2 - 120, scr_y - 20, 1); draw_status2(player2, tp_window_width, scr_y, 1); // draw_locks(player1, 0); // draw_locks(player2, 1); indicate_fps(player2, 1); // display_messages(player2, 1, tp_window_width, scr_y); if (options.run_vsync > 0) vsync(); blit(player1, screen, 0, 0, 0, 0, tp_window_width, scr_y); blit(player2, screen, 0, 0, tp_window_width + 10, 0, tp_window_width, scr_y); // clear_bitmap(player1); // clear_bitmap(player2); } } void draw_locks(BITMAP *bmp, int p) { /* int a = player[p].actor_controlled; if (actor[a].lock == LOCK_ACTOR0) { // if (actor[0].in_play != 0) // draw_lock(bmp, a, set_lock_x [p], set_lock_y [p], set_lock_radius [p]); } else { if (actor[a].lock == LOCK_ACTOR1) { // if (actor[1].in_play != 0) // draw_lock(bmp, a, set_lock_x [p], set_lock_y [p], set_lock_radius [p]); } else { // if (actor[a].lock != -1 // && enemy[actor[a].lock].type != ENEMY_NONE // && set_lock_radius [p] != 0) // draw_lock(bmp, a, set_lock_x [p], set_lock_y [p], set_lock_radius [p]); } } if (actor[a].turret_lock == LOCK_ACTOR0) { if (actor[0].in_play != 0) draw_turret_lock(bmp, a, set_turret_lock_x [p], set_turret_lock_y [p], set_turret_lock_radius [p]); } else { if (actor[a].turret_lock == LOCK_ACTOR1) { if (actor[1].in_play != 0) draw_turret_lock(bmp, a, set_turret_lock_x [p], set_turret_lock_y [p], set_turret_lock_radius [p]); } else { if (actor[a].turret_lock != -1 && enemy[actor[a].turret_lock].type != ENEMY_NONE && set_turret_lock_radius [p] != 0) draw_turret_lock(bmp, a, set_turret_lock_x [p], set_turret_lock_y [p], set_turret_lock_radius [p]); } } */ // if (actor[a].turret_lock != -1 // && enemy[actor[a].turret_lock].type != ENEMY_NONE) // draw_turret_lock(bmp, a, set_turret_lock_x [p], set_turret_lock_y [p], set_turret_lock_radius [p]); } void draw_actors(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y) { int i, x, y; for (i = 0; i < NO_ACTORS; i ++) { if (actor[i].in_play == 0) continue; // if (actor[i].upgraded_system [UPG_SIDEKICK] > 0) // draw_sidekicks(bmp, max_x, max_y, play, i); if (i == player[play].actor_controlled) { // draw_an_actor(bmp, player[play].actor_controlled, max_x / 2, max_y / 2, play); draw_an_actor(bmp, player[play].actor_controlled, max_x / 2 - player[play].screen_shake_x / GRAIN, max_y / 2 - player[play].screen_shake_y / GRAIN, play); draw_crosshair(bmp, player[play].actor_controlled, max_x / 2, max_y / 2); continue; } if (actor[i].x < centre_x - (max_x / 2) * GRAIN - 7000 || actor[i].x > centre_x + (max_x / 2) * GRAIN + 7000 || actor[i].y < centre_y - (max_y / 2) * GRAIN - 7000 || actor[i].y > centre_y + (max_y / 2) * GRAIN + 7000) continue; x = (actor[i].x / GRAIN) - (centre_x / GRAIN); y = (actor[i].y / GRAIN) - (centre_y / GRAIN); draw_an_actor(bmp, i, x + max_x / 2, y + max_y / 2, play); } } void draw_an_actor(BITMAP *bmp, int dr, int x, int y, int play) { int i; int angle2 = 0; int angle = 0; if (angle < 0) angle += ANGLE_FULL; if (angle2 < 0) angle2 += ANGLE_FULL; draw_ship_bitmap(bmp, x, y, actor[dr].ship, actor[dr].angle, 12, 11); switch(actor[dr].ship) { // case SHIP_LACEWING: // draw_ship_bitmap(bmp, x, y, 0, actor[dr].angle, 12, 11); // break; // case SHIP_CAPYBARA: // draw_ship_bitmap(bmp, x, y, 1, actor[dr].angle, 10, 10); // break; /* case SHIP_RUMSFELD: draw_ship_bitmap(bmp, x, y, 1, actor[dr].angle, 10, 10); break; case SHIP_LENTIL: draw_ship_bitmap(bmp, x, y, 2, actor[dr].angle, 10, 10); break; case SHIP_CAPYBARA: draw_ship_bitmap(bmp, x, y, 3, actor[dr].angle, 10, 10); break; case SHIP_HOOKWORM: draw_ship_bitmap(bmp, x, y, 4, actor[dr].angle, 10, 10); break; case SHIP_PORKUPINE: draw_ship_bitmap(bmp, x, y, 5, actor[dr].angle, 10, 10); break; case SHIP_PRONG: draw_ship_bitmap(bmp, x, y, 6, actor[dr].angle, 10, 10); break; case SHIP_AETHER: draw_ship_bitmap(bmp, x, y, 7, actor[dr].angle, 10, 10); break; case SHIP_DESPOT: draw_ship_bitmap(bmp, x, y, 8, actor[dr].angle, 10, 10); break; case SHIP_LACEWING: // draw_ship_bitmap(bmp, x, y, 9, actor[dr].angle, 10, 10); draw_ship_bitmap(bmp, x, y, 0, actor[dr].angle, 12, 11); // circle(bmp, x, y, 8, COLOUR_YELLOW6); break; case SHIP_TORTFEASOR: draw_ship_bitmap(bmp, x, y, 10, actor[dr].angle, 10, 10); break; case SHIP_SCORPION: draw_ship_bitmap(bmp, x, y, 11, actor[dr].angle, 10, 10); break; case SHIP_GODBOTHERER: draw_ship_bitmap(bmp, x, y, 12, actor[dr].angle, 10, 10); break; case SHIP_BOTULUS: draw_ship_bitmap(bmp, x, y, 13, actor[dr].angle, 10, 10); break; case SHIP_SLIDEWINDER: draw_ship_bitmap(bmp, x, y, 14, actor[dr].angle, 10, 10); break; case SHIP_DOOM: draw_ship_bitmap(bmp, x, y, 15, actor[dr].angle, 10, 10); break; */ } int x1, x2, y2;//, y1; if (actor[dr].shield_pulse > 0) { /* int scol = COLOUR_WHITE; if (actor[dr].shield_pulse == 9) scol = COLOUR_GREY6; if (actor[dr].shield_pulse == 8) scol = COLOUR_GREY5; if (actor[dr].shield_pulse < 8) scol = COLOUR_GREEN1 + actor[dr].shield_pulse;*/ x1 = actor[dr].shield_pulse; if (actor[dr].shield_pulse > 7) x1 = 7; x1 = grand(x1 + 1); x2 = x + grand(3) - grand(3); y2 = y + grand(3) - grand(3); draw_trans_sprite(bmp, small4_bmp [BMP_SMALL4_SHIELD_1 + x1], x2 - 10, y2 - 10); draw_trans_sprite(bmp, shield_bmp [x1], x2, y2 - 10); draw_trans_sprite(bmp, shield_bmp [x1 + 8], x2, y2); draw_trans_sprite(bmp, shield_bmp [x1 + 16], x2 - 10, y2); /* draw_trans_sprite(bmp, small4_bmp [BMP_SMALL4_SHIELD_1 + grand(x1 + 1)], x - 10, y - 10); draw_trans_sprite(bmp, shield_bmp [grand(x1 + 1)], x, y - 10); draw_trans_sprite(bmp, shield_bmp [grand(x1 + 1) + 8], x, y); draw_trans_sprite(bmp, shield_bmp [grand(x1 + 1) + 16], x - 10, y);*/ //circle(bmp, x + grand(5) - 2, y + grand(5) - 2, 10, scol); } int gd; int y1, s1, s2, s3; if (actor[dr].grace_period > 0) { gd = actor[dr].grace_period / 3; if (gd > 15) gd = 15; y1 = 0; // x1 = gd + (actor[dr].grace_period / 3) % 4 + 3; // if (((actor[dr].grace_period / 3) / 4) % 2 == 0) // x1 = gd + 4 - (actor[dr].grace_period / 3) % 4 + 3; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); // x1 = gd + (actor[dr].grace_period / 3) % 4 + 3; x1 = (actor[dr].grace_period * 30) & 1023; y1 = gd / 4; if (arena.level % 2 == 0) { x1 = ANGLE_FULL - x1; s1 = y1 - 2; s2 = y1 - 1; s3 = y1; } else { s3 = y1 - 2; s2 = y1 - 1; s1 = y1; } // gd *= 3; for (i = 0; i < 3; i ++) { if (s1 > 0) circlefill(bmp, x + xpart(x1 + (ANGLE_FULL / 3) * i, gd), y + ypart(x1 + (ANGLE_FULL / 3) * i, gd), s1, TRANS_WHITE); if (s2 > 0) circlefill(bmp, x + xpart(x1 + (ANGLE_FULL / 3) * i + ANGLE_1_SIXTEENTH, gd), y + ypart(x1 + (ANGLE_FULL / 3) * i + ANGLE_1_SIXTEENTH, gd), s2, TRANS_WHITE); if (s3 > 0) circlefill(bmp, x + xpart(x1 + (ANGLE_FULL / 3) * i + ANGLE_1_EIGHTH, gd), y + ypart(x1 + (ANGLE_FULL / 3) * i + ANGLE_1_EIGHTH, gd), s3, TRANS_WHITE); } // circle(bmp, x, y, x1, TRANS_YELLOW); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); // circle(bmp, x, y, x1, COLOUR_YELLOW3 + gd); } else if (actor[dr].repairing > 0) { gd = actor[dr].repairing / 3; if (gd > 15) gd = 15; y1 = 0; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); x1 = actor[dr].repairing * 35; y1 = gd / 4; if (arena.level % 2 == 1) { x1 = ANGLE_FULL - x1; s1 = y1 - 2; s2 = y1 - 1; s3 = y1; } else { s3 = y1 - 2; s2 = y1 - 1; s1 = y1; } // gd = 15; for (i = 0; i < 4; i ++) { if (s1 > 0) circlefill(bmp, x + xpart(x1 + (ANGLE_FULL / 4) * i, gd + grand(2)), y + ypart(x1 + (ANGLE_FULL / 4) * i, gd), s1, TRANS_ORANGE); if (s2 > 0) circlefill(bmp, x + xpart(x1 + (ANGLE_FULL / 4) * i + ANGLE_1_SIXTEENTH, gd), y + ypart(x1 + (ANGLE_FULL / 4) * i + ANGLE_1_SIXTEENTH, gd), s2, TRANS_ORANGE); if (s3 > 0) circlefill(bmp, x + xpart(x1 + (ANGLE_FULL / 4) * i + ANGLE_1_EIGHTH, gd), y + ypart(x1 + (ANGLE_FULL / 4) * i + ANGLE_1_EIGHTH, gd), s3, TRANS_ORANGE); } // circle(bmp, x, y, x1, TRANS_YELLOW); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); // circle(bmp, x, y, x1, COLOUR_YELLOW3 + gd); } // circle(bmp, x + grand(3) - 1, y + grand(3) - 1, gd * 2 + grand(3), COLOUR_YELLOW1 + gd + grand(3)); /* if (gd > 10) gd = 10; if (actor[dr].grace_period > 0) { x1 = x + cos(angle_to_radians(counter * 8)) * gd; y1 = y + sin(angle_to_radians(counter * 8)) * gd; putpixel(bmp, x1, y1, COLOUR_GREY2 + grand(5)); x1 = x + cos(angle_to_radians(counter * 8) + PI / 2) * gd; y1 = y + sin(angle_to_radians(counter * 8) + PI / 2) * gd; putpixel(bmp, x1, y1, COLOUR_GREY2 + grand(5)); x1 = x + cos(angle_to_radians(counter * 8) + PI) * gd; y1 = y + sin(angle_to_radians(counter * 8) + PI) * gd; putpixel(bmp, x1, y1, COLOUR_GREY2 + grand(5)); x1 = x + cos(angle_to_radians(counter * 8) - PI / 2) * gd; y1 = y + sin(angle_to_radians(counter * 8) - PI / 2) * gd; putpixel(bmp, x1, y1, COLOUR_GREY2 + grand(5)); }*/ if (dr == 0 && actor[player[play].actor_controlled].lock == LOCK_ACTOR0) { set_lock_x [play] = x;// + (max_x / 2); set_lock_y [play] = y;// + (max_y / 2); set_lock_radius [play] = 12; } if (dr == 1 && actor[player[play].actor_controlled].lock == LOCK_ACTOR1) { set_lock_x [play] = x;// + (max_x / 2); set_lock_y [play] = y;// + (max_y / 2); set_lock_radius [play] = 12; } if (dr == 0 && actor[player[play].actor_controlled].turret_lock == LOCK_ACTOR0) { set_turret_lock_x [play] = x;// + (max_x / 2); set_turret_lock_y [play] = y;// + (max_y / 2); set_turret_lock_radius [play] = 12; } if (dr == 1 && actor[player[play].actor_controlled].turret_lock == LOCK_ACTOR1) { set_turret_lock_x [play] = x;// + (max_x / 2); set_turret_lock_y [play] = y;// + (max_y / 2); set_turret_lock_radius [play] = 12; } } void draw_crosshair(BITMAP *bmp, int dr, int x, int y) { int xc, yc; int col = COLOUR_YELLOW8; if (actor[dr].recycle1 > 0) col = COLOUR_GREY6; xc = x + xpart(actor[dr].angle + 28 - ANGLE_QUARTER, 48); yc = y + ypart(actor[dr].angle + 28 - ANGLE_QUARTER, 48); putpixel(bmp, xc, yc, col); xc = x + xpart(actor[dr].angle - 28 - ANGLE_QUARTER, 48); yc = y + ypart(actor[dr].angle - 28 - ANGLE_QUARTER, 48); putpixel(bmp, xc, yc, col); /* xc = x + xpart(actor[dr].angle + 32 - ANGLE_QUARTER, 32); yc = y + ypart(actor[dr].angle + 32 - ANGLE_QUARTER, 32); putpixel(bmp, xc, yc, col); xc = x + xpart(actor[dr].angle - 32 - ANGLE_QUARTER, 32); yc = y + ypart(actor[dr].angle - 32 - ANGLE_QUARTER, 32); putpixel(bmp, xc, yc, col); xc = x + xpart(actor[dr].angle - ANGLE_QUARTER, 30); yc = y + ypart(actor[dr].angle - ANGLE_QUARTER, 30); putpixel(bmp, xc, yc, col); xc = x + xpart(actor[dr].angle - ANGLE_QUARTER, 34); yc = y + ypart(actor[dr].angle - ANGLE_QUARTER, 34); putpixel(bmp, xc, yc, col); */ if (actor[dr].secondary != SECOND_NONE) { col = COLOUR_RED8; if (actor[dr].recycle2 > 0) col = COLOUR_GREY3; xc = x + xpart(actor[dr].angle + 16 - ANGLE_QUARTER, 45); yc = y + ypart(actor[dr].angle + 16 - ANGLE_QUARTER, 45); putpixel(bmp, xc, yc, col); xc = x + xpart(actor[dr].angle - 16 - ANGLE_QUARTER, 45); yc = y + ypart(actor[dr].angle - 16 - ANGLE_QUARTER, 45); putpixel(bmp, xc, yc, col); } } void draw_ship_bitmap(BITMAP *bmp, int x, int y, int which_ship, int angle, int width, int height) { /* int draw_angle = angle / 4; if (draw_angle < 64) { draw_sprite(bmp, ship_bitmaps [which_ship] [draw_angle], x - width, y - height); return; } if (draw_angle < 128) { draw_sprite_v_flip(bmp, ship_bitmaps [which_ship] [128 - draw_angle], x - width, y - height - 1); return; } if (draw_angle < 192) { draw_sprite_vh_flip(bmp, ship_bitmaps [which_ship] [draw_angle - 128], x - width - 2, y - height - 1); return; } draw_sprite_h_flip(bmp, ship_bitmaps [which_ship] [256 - draw_angle], x - width - 2, y - height); */ int draw_angle = angle / 17.0666; // draw_angle ++; if (draw_angle > 60) draw_angle = 0; // draw_angle = draw_angle / 2); // which_ship = 1; // Adding a new ship? Remember GB_SHIP_TYPES! if (draw_angle < 15) { draw_sprite(bmp, gb_ship_bitmaps [which_ship] [draw_angle], x - width, y - height); return; } if (draw_angle < 30) { draw_sprite_v_flip(bmp, gb_ship_bitmaps [which_ship] [30 - draw_angle], x - width, y - height - 1); return; } if (draw_angle < 45) { draw_sprite_vh_flip(bmp, gb_ship_bitmaps [which_ship] [draw_angle - 30], x - width, y - height - 1); return; } draw_sprite_h_flip(bmp, gb_ship_bitmaps [which_ship] [60 - draw_angle], x - width, y - height); /* int draw_angle = angle / 16; // draw_angle ++; if (draw_angle > 64) draw_angle = 0; // draw_angle = draw_angle / 2); // which_ship = 1; // Adding a new ship? Remember GB_SHIP_TYPES! if (draw_angle < 16) { draw_sprite(bmp, gb_ship_bitmaps [which_ship] [draw_angle], x - width, y - height); return; } if (draw_angle < 32) { draw_sprite_v_flip(bmp, gb_ship_bitmaps [which_ship] [32 - draw_angle], x - width, y - height - 1); return; } if (draw_angle < 48) { draw_sprite_vh_flip(bmp, gb_ship_bitmaps [which_ship] [draw_angle - 32], x - width, y - height - 1); return; } draw_sprite_h_flip(bmp, gb_ship_bitmaps [which_ship] [64 - draw_angle], x - width, y - height); */ /* draw_angle ++; if (draw_angle > 64) draw_angle = 0; draw_angle = (draw_angle / 2); which_ship = 0; if (draw_angle < 16) { draw_sprite(bmp, gb_ship_bitmaps [which_ship] [draw_angle], x - width, y - height); return; } if (draw_angle < 32) { draw_sprite_v_flip(bmp, gb_ship_bitmaps [which_ship] [32 - draw_angle], x - width, y - height); return; } if (draw_angle < 48) { draw_sprite_vh_flip(bmp, gb_ship_bitmaps [which_ship] [draw_angle - 32], x - width, y - height); return; } draw_sprite_h_flip(bmp, gb_ship_bitmaps [which_ship] [64 - draw_angle], x - width, y - height); */ /* if (draw_angle < 16) { draw_sprite(bmp, ship_bitmaps [which_ship] [draw_angle], x - width, y - height); return; } if (draw_angle < 32) { draw_sprite_v_flip(bmp, ship_bitmaps [which_ship] [32 - draw_angle], x - width, y - height); return; } if (draw_angle < 48) { draw_sprite_vh_flip(bmp, ship_bitmaps [which_ship] [draw_angle - 32], x - width, y - height); return; } draw_sprite_h_flip(bmp, ship_bitmaps [which_ship] [64 - draw_angle], x - width, y - height); */ } /* void draw_triangle_ship(BITMAP *bmp, int dr, int size, int pointiness, int x, int y, unsigned char colour1, unsigned char colour2) { int x1,y1,x2,y2,x3,y3; float radangle = angle_to_radians(actor[dr].angle); // float radangle = angle_to_radians(actor[dr].angle); x1 = x + cos(radangle) * (size + pointiness); y1 = y + sin(radangle) * (size + pointiness); x2 = x + cos(radangle + (PI * 2) / 3) * size; y2 = y + sin(radangle + (PI * 2) / 3) * size; x3 = x + cos(radangle - (PI * 2) / 3) * size; y3 = y + sin(radangle - (PI * 2) / 3) * size; triangle(bmp, x1, y1, x2, y2, x3, y3, colour2); line(bmp, x1, y1, x2, y2, colour1); line(bmp, x1, y1, x3, y3, colour1); line(bmp, x2, y2, x3, y3, colour1); } */ void draw_status2(BITMAP *bmp, int max_x, int max_y, int play) { int dcol1; int dcol2; int i, x, y; int a = player[play].actor_controlled; int minutes_left = arena.time_left / 2000; int seconds_left = (arena.time_left / 33.3333) - (minutes_left * 60); int centiseconds_left = (arena.time_left) - (minutes_left * 2000) - seconds_left * 33.333; centiseconds_left *= 3; int time_colour = COLOUR_GREY6; // int time_colour2 = COLOUR_YELLOW3 + centiseconds_left / 25; int time_colour2 = COLOUR_YELLOW1 + (centiseconds_left % 50) / 7; int time_x = 80; int time_y = 20; // char timestring [10] = "{"; // char istr [5]; if (seconds_left < 0) seconds_left = 0; if (minutes_left < 0) minutes_left = 0; if (centiseconds_left < 0) centiseconds_left = 0; if (game.type != GAME_DUEL || game.duel_mode == DUEL_3_MINUTES || game.duel_mode == DUEL_10_MINUTES) { if (arena.level_finished == 1) { textprintf_centre_ex(bmp, font2, max_x / 2, 170, COLOUR_ORANGE2 + (counter / 4) % 4, -1, "{__l_e_v_e_l____c_l_e_a_r__}"); textprintf_centre_ex(bmp, font, max_x / 2, 170, -1, -1, "{__l_e_v_e_l____c_l_e_a_r__}"); time_colour = COLOUR_YELLOW8; time_colour2 = COLOUR_YELLOW4; if (arena.time_bonus > 0) { if (arena.seconds_left_when_finished == 1) { textprintf_centre_ex(bmp, font2, max_x / 2, 280 + text_offset_y, COLOUR_RED8 - (counter / 4) % 4, -1, "{_%i__second__left_}", arena.seconds_left_when_finished); textprintf_centre_ex(bmp, font, max_x / 2, 280 + text_offset_y, -1, -1, "{_%i__second__left_}", arena.seconds_left_when_finished); } else { textprintf_centre_ex(bmp, font2, max_x / 2, 280 + text_offset_y, COLOUR_RED8 - (counter / 4) % 4, -1, "{_%i__seconds__left_}", arena.seconds_left_when_finished); textprintf_centre_ex(bmp, font, max_x / 2, 280 + text_offset_y, -1, -1, "{_%i__seconds__left_}", arena.seconds_left_when_finished); } textprintf_centre_ex(bmp, font2, max_x / 2, 320 + text_offset_y, COLOUR_RED8 - (counter / 4) % 4, -1, "{_bonus:__%i_}", arena.time_bonus); textprintf_centre_ex(bmp, font, max_x / 2, 320 + text_offset_y, -1, -1, "{_bonus:__%i_}", arena.time_bonus); } else { textprintf_centre_ex(bmp, font2, max_x / 2, 320 + text_offset_y, COLOUR_GREEN8 - (counter / 4) % 4, -1, "{_no__bonus_}"); textprintf_centre_ex(bmp, font, max_x / 2, 320 + text_offset_y, -1, -1, "{_no__bonus_}"); } } else { if (minutes_left == 0 && seconds_left < 10) { // time_colour = COLOUR_RED8 - (counter / 4) % 4; // time_colour2 = COLOUR_RED4 + (counter / 4) % 4; time_colour2 = COLOUR_RED1 + (centiseconds_left % 50) / 7; } } // textprintf_right(bmp, font, time_x, 20, time_colour, "%i : %i %i", minutes_left, seconds_left, centiseconds_left); // if (minutes_left < 1) // strcat(timestring, "0"); /* strcat(timestring, itoa(minutes_left, istr, 10)); strcat(timestring, "_:_"); if (seconds_left < 10) strcat(timestring, "0"); strcat(timestring, itoa(seconds_left, istr, 10)); strcat(timestring, "}"); textprintf_right_ex(bmp, font2, time_x + 30, time_y, time_colour2, -1, timestring); textprintf_right_ex(bmp, font, time_x + 30, time_y, -1, -1, timestring);*/ if (seconds_left < 10) { textprintf_right_ex(bmp, font2, time_x + 30, time_y, time_colour2, -1, "{%i_:_0%i}", minutes_left, seconds_left); textprintf_right_ex(bmp, font, time_x + 30, time_y, -1, -1, "{%i_:_0%i}", minutes_left, seconds_left); } else { textprintf_right_ex(bmp, font2, time_x + 30, time_y, time_colour2, -1, "{%i_:_%i}", minutes_left, seconds_left); textprintf_right_ex(bmp, font, time_x + 30, time_y, -1, -1, "{%i_:_%i}", minutes_left, seconds_left); } if (centiseconds_left < 10) { textprintf_right_ex(bmp, small_font, time_x + 55, time_y + 21, time_colour, -1, "0%i", centiseconds_left); // textprintf_right(bmp, font2, time_x + 80, 20, time_colour2, "0%i", centiseconds_left); } else { textprintf_right_ex(bmp, small_font, time_x + 55, time_y + 21, time_colour, -1, "%i", centiseconds_left); // textprintf_right(bmp, font2, time_x + 80, 20, time_colour2, "%i", centiseconds_left); } } // end if !duel || timed duel // for (i = 0; i < if (game.type == GAME_SINGLE || game.type == GAME_COOP) { textprintf_right_ex(bmp, font2, max_x - 20, time_y, COLOUR_GREY5, -1, "{%i}", player[play].score); textprintf_right_ex(bmp, font, max_x - 20, time_y, -1, -1, "{%i}", player[play].score); textprintf_ex(bmp, small_font, 20, 56, COLOUR_GREY6, -1, "level %i", arena.level); } if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) { centiseconds_left = game.ta_total_time / 120000; // cs is actually hours here. Probably unnecessary, but there are some crazy people out there. minutes_left = game.ta_total_time / 2000 - (centiseconds_left * 60); seconds_left = (game.ta_total_time / 33.3333) - (minutes_left * 60); /* strcpy(timestring, ""); if (centiseconds_left > 0) { strcat(timestring, itoa(centiseconds_left, istr, 10)); strcat(timestring, ":"); if (minutes_left < 10) strcat(timestring, "0"); } strcat(timestring, itoa(minutes_left, istr, 10)); strcat(timestring, ":"); if (seconds_left < 10) strcat(timestring, "0"); strcat(timestring, itoa(seconds_left, istr, 10)); textprintf_ex(bmp, small_font, 20, 56, COLOUR_GREY6, -1, timestring);*/ if (centiseconds_left > 0) { if (minutes_left < 10) { if (seconds_left < 10) { textprintf_ex(bmp, small_font, 20, 56, COLOUR_GREY6, -1, "%i:0%i:0%i", centiseconds_left, minutes_left, seconds_left); } else textprintf_ex(bmp, small_font, 20, 56, COLOUR_GREY6, -1, "%i:0%i:%i", centiseconds_left, minutes_left, seconds_left); } else { if (seconds_left < 10) { textprintf_ex(bmp, small_font, 20, 56, COLOUR_GREY6, -1, "%i:%i:0%i", centiseconds_left, minutes_left, seconds_left); } else textprintf_ex(bmp, small_font, 20, 56, COLOUR_GREY6, -1, "%i:%i:%i", centiseconds_left, minutes_left, seconds_left); } } else { if (seconds_left < 10) { textprintf_ex(bmp, small_font, 20, 56, COLOUR_GREY6, -1, "%i:0%i", minutes_left, seconds_left); } else textprintf_ex(bmp, small_font, 20, 56, COLOUR_GREY6, -1, "%i:%i", minutes_left, seconds_left); } /* if (centiseconds_left > 0) textprintf_ex(bmp, small_font, 20, 56, COLOUR_GREY6, -1, "%i:%i:%i", centiseconds_left, minutes_left, seconds_left); else textprintf_ex(bmp, small_font, 20, 56, COLOUR_GREY6, -1, "%i:%i", minutes_left, seconds_left);*/ // textprintf_ex(bmp, small_font, 20, 66, COLOUR_GREY6, -1, "%i:%i", game.ta_enemy_index, game.ta_symbol_count); // textprintf_ex(bmp, small_font, 20, 66, COLOUR_GREY6, -1, "%i: %i %i %i %i %i %i %i %i %i %i", game.ta_enemy_index, game.ta_enemies [0], game.ta_enemies [1], game.ta_enemies [2], game.ta_enemies [3], game.ta_enemies [4], game.ta_enemies [5], game.ta_enemies [6], game.ta_enemies [7], game.ta_enemies [8], game.ta_enemies [9]); } // textprintf_ex(bmp, small_font, 20, 166, COLOUR_GREY6, -1, "%i: %i %i %i %i %i %i %i %i %i %i %i", arena.symbol_index, arena.symbol_list [0], arena.symbol_list [1], arena.symbol_list [2], arena.symbol_list [3], arena.symbol_list [4], arena.symbol_list [5], arena.symbol_list [6], arena.symbol_list [7], arena.symbol_list [8], arena.symbol_list [9], arena.symbol_list [10]); if (game.type == GAME_DUEL) { dcol1 = COLOUR_YELLOW4; dcol2 = COLOUR_BLUE8; if ((play == 0 && player[0].duel_score > player[1].duel_score) || (play == 1 && player[1].duel_score > player[0].duel_score)) { dcol1 = COLOUR_YELLOW4; dcol2 = COLOUR_ORANGE8; } if (player[0].duel_score == player[1].duel_score) { dcol1 = COLOUR_BLUE4; dcol2 = COLOUR_BLUE8; } dcol1 += (counter / 4) % 4; dcol2 -= (counter / 4) % 4; textprintf_right_ex(bmp, font2, max_x - 20, time_y, dcol2, -1, "{%i}", player[play].duel_score); textprintf_right_ex(bmp, font, max_x - 20, time_y, -1, -1, "{%i}", player[play].duel_score); if (game.duel_mode == DUEL_10_POINTS) textprintf_right_ex(bmp, small_font, max_x - 20, 56, COLOUR_GREY6, -1, "First to 10"); if (game.duel_mode == DUEL_30_POINTS) textprintf_right_ex(bmp, small_font, max_x - 20, 56, COLOUR_GREY6, -1, "First to 30"); } if (actor[a].upgraded_system [UPG_TURRET] > 0) { int x2, y2; int col = COLOUR_YELLOW8 - (counter / 2) % 4; x = max_x / 2 - (50 + actor[a].upgraded_system [UPG_TURRET] * 17) - 5; y = max_y / 2 - (50 + actor[a].upgraded_system [UPG_TURRET] * 17) + 5; x2 = max_x / 2 - (50 + actor[a].upgraded_system [UPG_TURRET] * 17) + 5; y2 = max_y / 2 - (50 + actor[a].upgraded_system [UPG_TURRET] * 17) - 5; pline(bmp, x, y, x2, y2, col); x = max_x / 2 + (50 + actor[a].upgraded_system [UPG_TURRET] * 17) - 5; y = max_y / 2 + (50 + actor[a].upgraded_system [UPG_TURRET] * 17) + 5; x2 = max_x / 2 + (50 + actor[a].upgraded_system [UPG_TURRET] * 17) + 5; y2 = max_y / 2 + (50 + actor[a].upgraded_system [UPG_TURRET] * 17) - 5; pline(bmp, x, y, x2, y2, col); x = max_x / 2 + (50 + actor[a].upgraded_system [UPG_TURRET] * 17) - 5; y = max_y / 2 - (50 + actor[a].upgraded_system [UPG_TURRET] * 17) - 5; x2 = max_x / 2 + (50 + actor[a].upgraded_system [UPG_TURRET] * 17) + 5; y2 = max_y / 2 - (50 + actor[a].upgraded_system [UPG_TURRET] * 17) + 5; pline(bmp, x, y, x2, y2, col); x = max_x / 2 - (50 + actor[a].upgraded_system [UPG_TURRET] * 17) - 5; y = max_y / 2 + (50 + actor[a].upgraded_system [UPG_TURRET] * 17) - 5; x2 = max_x / 2 - (50 + actor[a].upgraded_system [UPG_TURRET] * 17) + 5; y2 = max_y / 2 + (50 + actor[a].upgraded_system [UPG_TURRET] * 17) + 5; pline(bmp, x, y, x2, y2, col); } // Scanner: // NOTE: Scanner assumes at most 2 players - 0 & 1! // int dot_colour; if (game.mode_void == 0) { rectfill(bmp, max_x - 80, max_y - 105, max_x - 5, max_y - 35, COLOUR_BLUE1); if (play == 0) { if (game.users > 1) { i = player[1].actor_controlled; if (actor[i].in_play != 0) { x = (actor[i].x * 75) / arena.max_x + max_x - 80; y = (actor[i].y * 70) / arena.max_y + max_y - 105; hline(bmp, max_x - 80, y, max_x - 5, COLOUR_GREY3); vline(bmp, x, max_y - 105, max_y - 35, COLOUR_GREY3); } } i = player[0].actor_controlled; if (actor[i].in_play != 0) { x = (actor[i].x * 75) / arena.max_x + max_x - 80; y = (actor[i].y * 70) / arena.max_y + max_y - 105; hline(bmp, max_x - 80, y, max_x - 5, COLOUR_GREY5); vline(bmp, x, max_y - 105, max_y - 35, COLOUR_GREY5); } } else { if (game.users > 1) { i = player[0].actor_controlled; if (actor[i].in_play != 0) { x = (actor[i].x * 75) / arena.max_x + max_x - 80; y = (actor[i].y * 70) / arena.max_y + max_y - 105; hline(bmp, max_x - 80, y, max_x - 5, COLOUR_GREY3); vline(bmp, x, max_y - 105, max_y - 35, COLOUR_GREY3); } } i = player[1].actor_controlled; if (actor[i].in_play != 0) { x = (actor[i].x * 75) / arena.max_x + max_x - 80; y = (actor[i].y * 70) / arena.max_y + max_y - 105; hline(bmp, max_x - 80, y, max_x - 5, COLOUR_GREY5); vline(bmp, x, max_y - 105, max_y - 35, COLOUR_GREY5); } } for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[i].type == ENEMY_NONE || ((enemy[i].type == ENEMY_SHADOW1 || enemy[i].type == ENEMY_SHADOW2) && enemy[i].attribute [0] == 0)) continue; x = (enemy[i].x * 75) / arena.max_x + max_x - 80; y = (enemy[i].y * 70) / arena.max_y + max_y - 105; if (enemy[i].target == TARGET_PRIMARY) // putpixel(bmp, x, y, COLOUR_YELLOW8); { circlefill(bmp, x, y, 1, COLOUR_YELLOW5); putpixel(bmp, x, y, COLOUR_YELLOW8); } else putpixel(bmp, x, y, COLOUR_ORANGE8); } for (i = 0; i < NO_PICKUPS; i ++) { if (pickup[i].type == PICKUP_NONE) continue; x = (pickup[i].x * 75) / arena.max_x + max_x - 80; y = (pickup[i].y * 70) / arena.max_y + max_y - 105; // if (enemy[i].target == TARGET_PRIMARY) // putpixel(bmp, x, y, COLOUR_YELLOW8); // else putpixel(bmp, x, y, COLOUR_GREEN8 - (counter / 4) % 4); } rect(bmp, max_x - 80, max_y - 105, max_x - 5, max_y - 35, COLOUR_BLUE8); } // end if void mode // draw_ship_status(bmp, 80, max_y - 150, player[play].actor_controlled, 0); draw_ship_status(bmp, 50, max_y - 80, player[play].actor_controlled, 0); if (arena.game_over != 0) { if (game.type == GAME_DUEL) { if (game.duel_winner == -1) { textprintf_centre_ex(bmp, font2, max_x / 2, 180 + text_offset_y, COLOUR_GREEN8 - (counter / 3) % 4, -1, "{draw}"); textprintf_centre_ex(bmp, font, max_x / 2, 180 + text_offset_y, -1, -1, "{draw}"); } else { if (game.duel_winner == play) { textprintf_centre_ex(bmp, font2, max_x / 2, 180 + text_offset_y, COLOUR_ORANGE8 - (counter / 3) % 4, -1, "{you__win}"); textprintf_centre_ex(bmp, font, max_x / 2, 180 + text_offset_y, -1, -1, "{you__win}"); } else { textprintf_centre_ex(bmp, font2, max_x / 2, 180 + text_offset_y, COLOUR_GREEN8 - (counter / 3) % 4, -1, "{you__lose}"); textprintf_centre_ex(bmp, font, max_x / 2, 180 + text_offset_y, -1, -1, "{you__lose}"); } } } else { textprintf_centre_ex(bmp, font2, max_x / 2, 180 + text_offset_y, COLOUR_GREEN8 - (counter / 3) % 4, -1, "{___g_a_m_e___o_v_e_r___}"); textprintf_centre_ex(bmp, font, max_x / 2, 180 + text_offset_y, -1, -1, "{___g_a_m_e___o_v_e_r___}"); } } else { if (arena.new_level_sign > 0) { dcol2 = COLOUR_YELLOW8; dcol2 -= (counter / 4) % 4; if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) { textprintf_centre_ex(bmp, font2, max_x / 2, 160 + text_offset_y, dcol2, -1, "{___t_i_m_e__a_t_t_a_c_k___}"); textprintf_centre_ex(bmp, font, max_x / 2, 160 + text_offset_y, -1, -1, "{___t_i_m_e__a_t_t_a_c_k___}"); } else { if (game.type != GAME_DUEL) { textprintf_centre_ex(bmp, font2, max_x / 2, 160 + text_offset_y, dcol2, -1, "{____l_e_v_e_l__%i____}", arena.level); textprintf_centre_ex(bmp, font, max_x / 2, 160 + text_offset_y, -1, -1, "{____l_e_v_e_l__%i____}", arena.level); } } } } // } if (game.type != GAME_DUEL && game.type != GAME_TIME_ATTACK && game.type != GAME_TIME_ATTACK_COOP) { rect(bmp, 19, 69, 26, 79, COLOUR_GREY2); rect(bmp, 28 + 63, 69, 34 + 63, 79, COLOUR_GREY2); rect(bmp, 26, 71, 28 + 63, 77, COLOUR_GREY2); rect(bmp, 27, 73, 27 + 63, 75, COLOUR_GREY2); rectfill(bmp, 20, 70, 25, 78, COLOUR_GREY5); rectfill(bmp, 29 + 63, 70, 33 + 63, 78, COLOUR_GREY5); // rectfill(bmp, 25, 72, 28 + 9 * 7, 76, COLOUR_GREY5); hline(bmp, 25, 72, 28 + 63, COLOUR_GREY5); hline(bmp, 25, 76, 28 + 63, COLOUR_GREY5); if (arena.targets_left_total > 0) { // char targets_left_string [30]; /* rect(bmp, 19, 69, 26, 79, COLOUR_GREY2); rect(bmp, 21 + 7 + arena.targets_left_total * 7, 69, 27 + 7 + arena.targets_left_total * 7, 79, COLOUR_GREY2); rect(bmp, 26, 71, 25 + arena.targets_left_total * 7, 77, COLOUR_GREY2); rectfill(bmp, 20, 70, 25, 78, COLOUR_GREY5); rectfill(bmp, 22 + 7 + arena.targets_left_total * 7, 70, 26 + 7 + arena.targets_left_total * 7, 78, COLOUR_GREY5); for (i = 0; i < arena.targets_left_total; i ++) { rectfill(bmp, 29 + i * 7, 70, 32 + i * 7, 78, COLOUR_GREY5); } for (i = 0; i < arena.targets_left_total; i ++) { rect(bmp, 28 + i * 7, 70, 33 + i * 7, 78, COLOUR_GREY1); } rectfill(bmp, 25, 72, 28 + arena.targets_left_total * 7, 76, COLOUR_GREY5); */ rectfill(bmp, 25, 73, 28 + arena.targets_left_total * 7, 75, COLOUR_YELLOW8 - (counter / 4) % 6); // targets_left_string [i] = '\0'; // textprintf_ex(bmp, small_font, 20, 70, COLOUR_GREY4, -1, targets_left_string); // textprintf_ex(bmp, small_font, 19, 69, COLOUR_GREY6, -1, targets_left_string); // textprintf_centre_ex(bmp, small_font, max_x / 2, 60, COLOUR_GREY4, targets_left_string); // textprintf_centre_ex(bmp, small_font, max_x / 2 - 1, 59, COLOUR_GREY6, targets_left_string); // rectfill(bmp, x + i * 10 - 3, y - 30, x + i * 10 + 3, y - 24, COLOUR_RED8); } // if (arena.time_left > 195 && arena.time_left < 330 && (arena.time_left / 15) % 3 != 0) if (arena.time_left > 240 && arena.time_left < 330 && (arena.time_left / 10) % 3 != 0) { textprintf_centre_ex(bmp, font2, max_x / 2, 250 + text_offset_y, COLOUR_RED8 - (counter / 2) % 4, -1, "{_hurry__up_}"); textprintf_centre_ex(bmp, font, max_x / 2, 250 + text_offset_y, -1, -1, "{_hurry__up_}"); } // if (arena.hostile > 0 && arena.hostile < 150 && (arena.hostile / 15) % 2 == 0) if (arena.hostile > 0 && arena.hostile < 90 && (arena.hostile / 10) % 3 != 0) { textprintf_centre_ex(bmp, font2, max_x / 2, 250 + text_offset_y, COLOUR_RED8 - (counter / 2) % 4, -1, "{_watch__out_}"); textprintf_centre_ex(bmp, font, max_x / 2, 250 + text_offset_y, -1, -1, "{_watch__out_}"); } } } void draw_hud(BITMAP *bmp, int x, int y, int i) { return; // int viewing_angle = actor[i].moving_angle - actor[i].angle - ANGLE_QUARTER; // draw_scan(bmp, 50, 50, 0, 0); /* if (game[0].users == 2) draw_scan(bmp, 260, 50, 0, 1); else draw_scan(bmp, 590, 50, 0, 1); draw_ship_status(bmp, 50, 420, i, 1); if (actor[i].x_speed != 0 || actor[i].y_speed != 0) { // start off with the velocity indicator: // int distance1 = sqrt(hypot(actor[i].x_speed, actor[i].y_speed)) + 5 + actor[i].radius; // int distance2 = (sqrt(hypot(actor[i].x_speed, actor[i].y_speed)) * 4) / 5 + 5 + actor[i].radius; / * int x_disp1 = cos(angle_to_radians(viewing_angle)) * distance1; int y_disp1 = sin(angle_to_radians(viewing_angle)) * distance1; int x_disp2 = cos(angle_to_radians(viewing_angle + 10)) * distance2; int y_disp2 = sin(angle_to_radians(viewing_angle + 10)) * distance2; int x_disp3 = cos(angle_to_radians(viewing_angle - 10)) * distance2; int y_disp3 = sin(angle_to_radians(viewing_angle - 10)) * distance2; line(bmp, x + x_disp1, y + y_disp1, x + x_disp2, y + y_disp2, COLOUR_GREEN4); line(bmp, x + x_disp1, y + y_disp1, x + x_disp3, y + y_disp3, COLOUR_GREEN4); */ // } } void draw_ship_status(BITMAP *bmp, int x, int y, int a, int style) { int i; int shield_colour; // char numbers [10]; // char nstring [10]; if (game.type != GAME_DUEL && game.type != GAME_TIME_ATTACK && game.type != GAME_TIME_ATTACK_COOP) { for (i = 0; i < game.ships_left; i ++) { rectfill(bmp, x - 8, y - 70 - i * 9, x - 15, y - 77 - i * 9, COLOUR_YELLOW7); rect(bmp, x - 8, y - 70 - i * 9, x - 15, y - 77 - i * 9, COLOUR_YELLOW1); } } if (actor[a].in_play == 0) return; int armoured = (actor[a].armour * 100) / actor[a].max_armour; int armour_colour = RLE_LSHIP_BLUE; // if (actor[a].in_play == 1) // { if (armoured < 100) armour_colour = RLE_LSHIP_GREEN; if (armoured < 70) armour_colour = RLE_LSHIP_YELLOW; if (armoured < 30) armour_colour = RLE_LSHIP_RED; draw_rle_sprite(bmp, large_ships [actor[a].ship] [armour_colour], x - 24, y - 24); if (actor[a].hurt_pulse > 0) draw_rle_sprite(bmp, large_ships [actor[a].ship] [RLE_LSHIP_LINES], x - 24, y - 24); armour_colour = COLOUR_BLUE4; int armour_colour2 = COLOUR_BLUE1; if (armoured < 100) { armour_colour = COLOUR_GREEN4; armour_colour2 = COLOUR_GREEN1; } if (armoured < 70) { armour_colour = COLOUR_YELLOW4; armour_colour2 = COLOUR_YELLOW1; } if (armoured < 30) { armour_colour = COLOUR_RED4; armour_colour2 = COLOUR_RED1; } // armour_colour += 7 - (((arena.time_left) - ((arena.time_left / 2000) * 2000) - seconds_left * 33.333) % 50) / 7; armour_colour2 += 7 - ((arena.time_left % 105) % 35) / 5; // int minutes_left = arena.time_left / 2000; // int seconds_left = (arena.time_left / 33.3333) - (minutes_left * 60); /* itoa(actor[a].armour / 10, numbers, 10); strcpy(nstring, "{"); strcat(nstring, numbers); strcat(nstring, "}"); textprintf_ex(bmp, font2, x + 48, y + 15, armour_colour2, -1, nstring); textprintf_ex(bmp, font, x + 48, y + 15, -1, -1, nstring);*/ textprintf_ex(bmp, font2, x + 48, y + 15, armour_colour2, -1, "{%i}", actor[a].armour / 10); textprintf_ex(bmp, font, x + 48, y + 15, -1, -1, "{%i}", actor[a].armour / 10); if (actor[a].ability [ABILITY_DEFENCE] [SYMBOL_CIRCLE] > 0) { /* itoa(actor[a].shield / 10, numbers, 10); strcpy(nstring, "{"); strcat(nstring, numbers); strcat(nstring, "}"); textprintf_ex(bmp, font2, x + 55, y - 20, COLOUR_GREEN4 + grand(5), -1, nstring); textprintf_ex(bmp, font, x + 55, y - 20, -1, -1, nstring);*/ textprintf_ex(bmp, font2, x + 55, y - 20, COLOUR_GREEN4 + grand(5), -1, "{%i}", actor[a].shield / 10); textprintf_ex(bmp, font, x + 55, y - 20, -1, -1, "{%i}", actor[a].shield / 10); } // } // circlefill(bmp, x, y, 7, armour_colour); int layers = actor[a].shield / 70; // 100 int last_layer = actor[a].shield % 70; // 100 if (actor[a].in_play == 1 && actor[a].ability [ABILITY_DEFENCE] [SYMBOL_CIRCLE] > 0 && actor[a].shield > 0) { for (i = 0; i < layers; i ++) { shield_colour = COLOUR_GREEN6;// + grand(6); // a2 = 64 + (actor[a].shield * 96) / actor[a].max_shield; // a1 = 64 - (actor[a].shield * 96) / actor[a].max_shield; // arc(bmp, x, y, itofix(-28), itofix(156), 35 + i * 3, shield_colour); rectfill(bmp, 0 + x - 20, y - 30 - (i * 6), 0 + x + 20, y - 35 - (i * 6), shield_colour); rect(bmp, 0 + x - 20, y - 30 - (i * 6), 0 + x + 20, y - 35 - (i * 6), COLOUR_GREEN1); } if (last_layer != 0) { shield_colour = COLOUR_GREEN6;// + grand(3); if (actor[a].shield_pulse > 0) { /* shield_colour = COLOUR_GREY4 + actor[a].shield_pulse / 3; if (shield_colour > COLOUR_WHITE) shield_colour = COLOUR_WHITE;*/ shield_colour = actor[a].shield_pulse / 2; switch(shield_colour) { case 0: shield_colour = COLOUR_GREEN6; break; case 1: shield_colour = COLOUR_GREEN7; break; case 2: shield_colour = COLOUR_GREEN8; break; case 3: shield_colour = COLOUR_YELLOW8; break; default: case 4: shield_colour = COLOUR_WHITE; break; } } // a2 = 64 + (last_layer * 96) / 100; // a1 = 64 - (last_layer * 96) / 100; // a2 = 64 + (last_layer * 96) / 100; // a1 = 64 - (last_layer * 96) / 100; // arc(bmp, x, y, itofix(a1), itofix(a2), 35 + layers * 3, shield_colour); last_layer = 20 * last_layer / 70; rectfill(bmp, 0 + x - last_layer, y - 30 - (i * 6), 0 + x + last_layer, y - 35 - (i * 6), shield_colour); rect(bmp, 0 + x - last_layer, y - 30 - (i * 6), 0 + x + last_layer, y - 35 - (i * 6), COLOUR_GREEN1); } /* if (actor[a].upgraded_system [UPG_SHIELD] > 0 && actor[a].shield > 0) { for (i = 0; i < actor[a].upgraded_system [UPG_SHIELD] + 1; i ++) { shield_colour = COLOUR_BLUE6 + grand(3); if (i == actor[a].upgraded_system [UPG_SHIELD] && actor[a].shield_pulse > 0) { shield_colour = COLOUR_GREY4 + actor[a].shield_pulse / 3; if (shield_colour > COLOUR_WHITE) shield_colour = COLOUR_WHITE; } a2 = 64 + (actor[a].shield * 96) / actor[a].max_shield; a1 = 64 - (actor[a].shield * 96) / actor[a].max_shield; arc(bmp, x, y, itofix(a1), itofix(a2), 25 + i * 3, shield_colour); } */ } // if (actor[a].ship != SHIP_SCORPION) if (player[actor[a].controller].link_fire == 1) { circlefill(bmp, x - 36, y + 43, 2, COLOUR_YELLOW3); textprintf_centre_ex(bmp, small_font, x - 35, y + 37, COLOUR_GREEN8, -1, "x"); } else { textprintf_centre_ex(bmp, small_font, x - 36, y + 37, COLOUR_ORANGE8, -1, "| |"); circlefill(bmp, x - 36, y + 43, 2, COLOUR_RED8); } if (actor[a].ship != SHIP_RETRO) { if (actor[a].dragging == 20) { circlefill(bmp, x - 36, y + 33, 2, COLOUR_RED8); } else { circlefill(bmp, x - 36, y + 33, 2, COLOUR_YELLOW3); } } armour_colour = COLOUR_GREY4; if (actor[a].repairing > 0) { if (actor[a].repairing > 173) armour_colour = COLOUR_YELLOW8; else armour_colour = COLOUR_YELLOW1 + actor[a].repairing / 25; armour_colour2 = COLOUR_ORANGE1 + (actor[a].repairing / 4) % 8; /* itoa(actor[a].repairing / 2, numbers, 10); strcpy(nstring, "{"); strcat(nstring, numbers); strcat(nstring, "}"); textprintf_ex(bmp, font2, x + 48, y + 45, armour_colour2, -1, nstring); textprintf_ex(bmp, font, x + 48, y + 45, -1, -1, nstring);*/ textprintf_ex(bmp, font2, x + 48, y + 45, armour_colour2, -1, "{%i}", actor[a].repairing / 2); textprintf_ex(bmp, font, x + 48, y + 45, -1, -1, "{%i}", actor[a].repairing / 2); armour_colour = COLOUR_YELLOW2 + (counter / 3) % 6; } // armoured = (actor[a].energy * 50) / actor[a].max_energy; armoured /= 2; rectfill(bmp, x - 25, y + 30, x + armoured - 25, y + 45, armour_colour); rect(bmp, x - 25, y + 30, x + 25, y + 45, COLOUR_GREY6); // add text // for (i = 0; i < player[actor[a].controller].ships_left; i ++) } void draw_upgrades(BITMAP *bmp, int x, int y, int play) { // text_mode(-1); int i, j, k, x_offset, n, col, l; int a = player[play].actor_controlled; // actor[a].ability [abil] [symb] ++; /* Primary - yellow drive - green armour - blue secondary - red */ col = COLOUR_RED8; for (i = 0; i < 4; i ++) { switch(i) { case ABILITY_PRIMARY: col = COLOUR_YELLOW5; break; case ABILITY_DRIVE: col = COLOUR_GREEN5; break; case ABILITY_DEFENCE: col = COLOUR_BLUE5; break; case ABILITY_SECONDARY: col = COLOUR_RED5; break; } n = 0; for (j = 0; j < 4; j ++) { if (actor[a].ability [i] [j] > 0) n ++; } if (n == 0) continue; x_offset = n * 6; l = 0; for (j = 0; j < 3; j ++) { if (actor[a].ability [i] [j] > 0) { draw_static_symbol(bmp, x + i * 60 + l * 10 - x_offset, y + 8, col, j); for (k = 0; k < actor[a].ability [i] [j]; k ++) { hline(bmp, x + i * 60 + l * 10 - 3 - x_offset, y - k * 3, x + i * 60 + l * 10 + 3 - x_offset, col); } l ++; } } } // textprintf_ex(bmp, small_font, x - 20, y + 20, COLOUR_YELLOW6, -1, primary_name(actor[a].primary)); char dstr [30]; secondary_name(actor[a].secondary, dstr); if (game.users == 1) textprintf_ex(bmp, small_font, x + 250, y + 20, COLOUR_YELLOW6, -1, dstr); else textprintf_ex(bmp, small_font, x + 220, y, COLOUR_YELLOW6, -1, dstr); } void draw_static_symbol(BITMAP *bmp, int x, int y, int col, int symb) { switch(symb) { case SYMBOL_SQUARE: rectfill(bmp, x - 3, y - 3, x + 3, y + 3, col); break; case SYMBOL_CIRCLE: circlefill(bmp, x, y, 3, col); break; /* case SYMBOL_CROSS: rectfill(bmp, x - 1, y - 3, x + 1, y + 3, col); rectfill(bmp, x - 3, y - 1, x + 3, y + 1, col); break;*/ case SYMBOL_TRIANGLE: // triangle(bmp, x, y - 3, x + 3, y + 2, x - 3, y + 2, col); triangle(bmp, x, y + 5, x + 3, y - 2, x - 3, y - 2, col); break; } } /* char *upgrade_name(int i) { switch (i) { case UPG_NONE: return "none"; case UPG_SPEED: return "speed"; case UPG_ARMOUR: return "armour"; case UPG_POWER: return "power"; case UPG_AUTOFIRE: return "autof"; case UPG_MULTIFIRE: return "multif"; case UPG_PROJECT: return "proj"; case UPG_WARHEAD: return "whead"; case UPG_ROCKET: return "rocket"; case UPG_TUBES: return "tubes"; case UPG_SLIDE: return "slide"; case UPG_SEEKER: return "seek"; case UPG_BOMB: return "bomb"; case UPG_LAUNCHER: return "launch"; case UPG_LOADER: return "load"; case UPG_SPECIAL: return "special"; case UPG_TURRET: return "turret"; case UPG_SIDEKICK: return "sidek"; case UPG_HEAVY: return "heavy"; case UPG_ORBITAL: return "orbit"; case UPG_BACKFIRE: return "backf"; case UPG_SHIELD: return "shield"; case UPG_RETRO: return "retro"; case UPG_ROAMER: return "roam"; case UPG_MINIMISSILES: return "minim"; case UPG_DRIFT: return "drift"; } return "ERROR!"; } char *primary_name(int i) { switch (i) { case WPN_DARTS: return "Darts"; case WPN_SPINES: return "Spines"; case WPN_BURST: return "Burst"; case WPN_TEETH: return "Teeth"; } return "ERROR!"; } */ void secondary_name(int i, char str [30]) { switch (i) { default: case SECOND_NONE: strcpy(str, "No Weapon"); break; case SECOND_FURIOUS_ORB: strcpy(str, "Furious Orb"); break; case SECOND_BURNING_EYE: strcpy(str, "Burning Eyes"); break; case SECOND_MANIFOLD_ORB: strcpy(str, "Manifold Orb"); break; case SECOND_EYE_DESOLATION: strcpy(str, "Eye of Desolation"); break; case SECOND_PANIC_EELS: strcpy(str, "Panic Eels"); break; case SECOND_WORMS_SORROW: strcpy(str, "Worms of Agony"); break; case SECOND_WORMS_AGONY: strcpy(str, "Worms of Sorrow"); break; case SECOND_FROZEN_STARS: strcpy(str, "Frozen Stars"); break; case SECOND_FROZEN_TEETH: strcpy(str, "Frozen Teeth"); break; case SECOND_TOXIC_SUN: strcpy(str, "Toxic Sun"); break; case SECOND_FLOWER: strcpy(str, "Toxic Flower"); break; case SECOND_SPORES: strcpy(str, "Golden Spores"); break; case SECOND_CLAWS: strcpy(str, "Claws of Hunger"); break; } } void draw_scan_dot(BITMAP *bmp, int x, int y, int type) { switch(type) { case ACTORTYPE_SHIP: putpixel(bmp, x, y, COLOUR_BLUE4); break; case ACTORTYPE_REDSHIP: putpixel(bmp, x, y, COLOUR_RED4); /* putpixel(bmp, x + 1, y, 2); putpixel(bmp, x - 1, y, 2); putpixel(bmp, x, y + 1, 2); putpixel(bmp, x, y - 1, 2);*/ break; } } void draw_bullets(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y) { int i, x, y, x2, y2; for (i = 0; i < NO_BULLETS; i ++) { if (bullet[i].type == BULLET_NONE) continue; if (bullet[i].left_owner == 0) continue; x = (bullet[i].x / GRAIN) - (centre_x / GRAIN); y = (bullet[i].y / GRAIN) - (centre_y / GRAIN); /* if ((bullet[i].x < centre_x - (max_x / 2) * GRAIN || bullet[i].x > centre_x + (max_x / 2) * GRAIN || bullet[i].y < centre_y - (max_y / 2) * GRAIN || bullet[i].y > centre_y + (max_y / 2) * GRAIN) && (bullet[i].x2 < centre_x - (max_x / 2) * GRAIN || bullet[i].x2 > centre_x + (max_x / 2) * GRAIN || bullet[i].y2 < centre_y - (max_y / 2) * GRAIN || bullet[i].y2 > centre_y + (max_y / 2) * GRAIN)) continue;*/ if ((bullet[i].x + bullet[i].size < centre_x - (max_x / 2) * GRAIN || bullet[i].x - bullet[i].size > centre_x + (max_x / 2) * GRAIN || bullet[i].y + bullet[i].size < centre_y - (max_y / 2) * GRAIN || bullet[i].y - bullet[i].size > centre_y + (max_y / 2) * GRAIN) && (bullet[i].x2 < centre_x - (max_x / 2) * GRAIN || bullet[i].x2 > centre_x + (max_x / 2) * GRAIN || bullet[i].y2 < centre_y - (max_y / 2) * GRAIN || bullet[i].y2 > centre_y + (max_y / 2) * GRAIN)) continue; x2 = (bullet[i].x2 / GRAIN) - (centre_x / GRAIN); y2 = (bullet[i].y2 / GRAIN) - (centre_y / GRAIN); draw_a_bullet(bmp, i, x + (max_x / 2), y + (max_y / 2), x2 + (max_x / 2), y2 + (max_y / 2), max_x, max_y, play); } } // angle is the angle it's being viewed at, not its direction void draw_a_bullet(BITMAP *bmp, int dr, int x, int y, int x2, int y2, int max_x, int max_y, int play) { int xa, ya, xb, yb, xc, yc, cs; #ifdef DEBUG_DISPLAY if (debug_info == 1) textprintf_centre_ex(bmp, small_font, x, y, COLOUR_YELLOW4, COLOUR_GREY2, "%i", bullet[dr].type); #endif switch(bullet[dr].type) { case BULLET_TRI1: draw_tri(bmp, x, y, bullet[dr].angle, 13, 8, ANGLE_QUARTER + ANGLE_1_32, GC_YELLOW1, GC_YELLOW6); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); xa = x - xpart(bullet[dr].angle, 4); ya = y - ypart(bullet[dr].angle, 4); circlefill(bmp, xa, ya, 4 + grand(3), TRANS_ORANGE); circlefill(bmp, xa, ya, 3 + grand(2), TRANS_YELLOW); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case BULLET_TRI2: draw_tri(bmp, x, y, bullet[dr].angle, 13, 8, ANGLE_QUARTER + ANGLE_1_32, GC_RED1, GC_RED6); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); xa = x - xpart(bullet[dr].angle, 4); ya = y - ypart(bullet[dr].angle, 4); circlefill(bmp, xa, ya, 4 + grand(3), TRANS_LBLUE); circlefill(bmp, xa, ya, 3 + grand(2), TRANS_WHITE); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case BULLET_TRI3: draw_tri(bmp, x, y, bullet[dr].angle, 14, 7, ANGLE_QUARTER + ANGLE_1_32, GC_BLUE1, GC_BLUE6); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); xa = x - xpart(bullet[dr].angle, 4); ya = y - ypart(bullet[dr].angle, 4); circlefill(bmp, xa, ya, 4 + grand(3), TRANS_YELLOW); circlefill(bmp, xa, ya, 3 + grand(2), TRANS_WHITE); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case BULLET_OVERTRI: draw_tri(bmp, x, y, bullet[dr].angle, 18, 12, ANGLE_QUARTER + ANGLE_1_32, GC_ORANGE1, GC_ORANGE6); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); xa = x - xpart(bullet[dr].angle, 9); ya = y - ypart(bullet[dr].angle, 9); circlefill(bmp, xa, ya, 7 + grand(3), TRANS_LGREEN); circlefill(bmp, xa, ya, 6 + grand(2), TRANS_YELLOW); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; /* case BULLET_SLIVER: pline(bmp, x + xpart(bullet[dr].special1, 2), y + ypart(bullet[dr].special1, 2), x - xpart(bullet[dr].special1, 2), y - ypart(bullet[dr].special1, 2), COLOUR_YELLOW8); break;*/ case BULLET_CIRCLER: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); xa = bullet[dr].timeout; /* if (xa < 32) circle(bmp, x, y, xa, get_circler_colour(xa / 8)); if (xa < 48 && xa > 16) circle(bmp, x, y, (xa - 16), get_circler_colour((xa - 16) / 8)); if (xa < 64 && xa > 32) circle(bmp, x, y, (xa - 32), get_circler_colour((xa - 32) / 8));*/ if (xa < 24) circle(bmp, x, y, xa * 2, get_circler_colour(xa / 6)); if (xa < 36 && xa > 12) circle(bmp, x, y, (xa - 12) * 2, get_circler_colour((xa - 12) / 6)); if (xa < 48 && xa > 24) circle(bmp, x, y, (xa - 24) * 2, get_circler_colour((xa - 24) / 6)); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case BULLET_TORPEDO2: xa = x + xpart(bullet[dr].angle, 3); ya = y + ypart(bullet[dr].angle, 3); xb = x + xpart(bullet[dr].angle + ANGLE_FULL / 3, 4); yb = y + ypart(bullet[dr].angle + ANGLE_FULL / 3, 4); xc = x + xpart(bullet[dr].angle - ANGLE_FULL / 3, 4); yc = y + ypart(bullet[dr].angle - ANGLE_FULL / 3, 4); /* cs = angle_to_radians(bullet[dr].angle); xa = (x) + ((float) cos(cs) * 3); ya = (y) + ((float) sin(cs) * 3); xb = (x) + ((float) cos(cs + (PI * 2) / 3) * 4); yb = (y) + ((float) sin(cs + (PI * 2) / 3) * 4); xc = (x) + ((float) cos(cs - (PI * 2) / 3) * 4); yc = (y) + ((float) sin(cs - (PI * 2) / 3) * 4);*/ /* xa = (x) + ((float) cos(radangle + PI) * 3); ya = (y) + ((float) sin(radangle + PI) * 3); xb = (x) + ((float) cos(radangle + PI + (PI * 2) / 3) * 4); yb = (y) + ((float) sin(radangle + PI + (PI * 2) / 3) * 4); xc = (x) + ((float) cos(radangle + PI - (PI * 2) / 3) * 4); yc = (y) + ((float) sin(radangle + PI - (PI * 2) / 3) * 4);*/ triangle(bmp, xa, ya, xb, yb, xc, yc, COLOUR_GREY5); line(bmp, xa, ya, xb, yb, COLOUR_BLUE7); line(bmp, xa, ya, xc, yc, COLOUR_BLUE7); line(bmp, xb, yb, xc, yc, COLOUR_BLUE7); break; case BULLET_HOSTILE: break; case BULLET_STING: case BULLET_STING2: // xa = x2 - x; // ya = y2 - y; x = (bullet[dr].x) - (actor[player[play].actor_controlled].x) + (max_x / 2) * GRAIN; y = (bullet[dr].y) - (actor[player[play].actor_controlled].y) + (max_y / 2) * GRAIN; x2 = (bullet[dr].x2) - (actor[player[play].actor_controlled].x) + (max_x / 2) * GRAIN; y2 = (bullet[dr].y2) - (actor[player[play].actor_controlled].y) + (max_y / 2) * GRAIN; xa = x2 - x; ya = y2 - y; pline(bmp, x / GRAIN, y / GRAIN, (x + 3 * xa) / GRAIN, (y + 3 * ya) / GRAIN, bullet[dr].colours [0]); // putpixel(bmp, x / GRAIN, y / GRAIN, bullet[dr].colours [0]); break; case BULLET_POWERED: case BULLET_ZAP: case BULLET_ZAP_DRAG: case BULLET_SILVER_TOOTH: case BULLET_CRYSTAL_TOOTH: case BULLET_CRYSTAL_SPINE: case BULLET_GOLDEN_NEEDLE: case BULLET_GOLDEN_NEEDLE_SMALL: case BULLET_NUMEROUS_DART: case BULLET_BRASS_TOOTH: case BULLET_BRASS_TOOTH_SMALL: /* xa = x2 - x; ya = y2 - y; pline(bmp, x, y, x + xa, y + ya, bullet[dr].colours [0]); pline(bmp, x + xa, y + ya, x + 2 * xa, y + 2 * ya, bullet[dr].colours [1]); pline(bmp, x + 2 * xa, y + 2 * ya, x + 3 * xa, y + 3 * ya, bullet[dr].colours [2]);*/ // we need the high granularity for zaps x = (bullet[dr].x) - (actor[player[play].actor_controlled].x); y = (bullet[dr].y) - (actor[player[play].actor_controlled].y); x2 = (bullet[dr].x2) - (actor[player[play].actor_controlled].x); y2 = (bullet[dr].y2) - (actor[player[play].actor_controlled].y); xa = x2 - x; ya = y2 - y; pline(bmp, (x) / GRAIN + (max_x / 2), y / GRAIN + (max_y / 2), (x + xa) / GRAIN + (max_x / 2), (y + ya) / GRAIN + (max_y / 2), bullet[dr].colours [0]); pline(bmp, (x + xa) / GRAIN + (max_x / 2), (y + ya) / GRAIN + (max_y / 2), (x + 2 * xa) / GRAIN + (max_x / 2), (y + 2 * ya) / GRAIN + (max_y / 2), bullet[dr].colours [1]); pline(bmp, (x + 2 * xa) / GRAIN + (max_x / 2), (y + 2 * ya) / GRAIN + (max_y / 2), (x + 3 * xa) / GRAIN + (max_x / 2), (y + 3 * ya) / GRAIN + (max_y / 2), bullet[dr].colours [2]); break; case BULLET_E_BOMB2: x2 = GC_WHITE - (bullet[dr].timeout / 4) % 4; xa = x + xpart((bullet[dr].timeout % 32) * 32, 5); ya = y + ypart((bullet[dr].timeout % 32) * 32, 5); putpixel(bmp, xa, ya, x2); xa = x + xpart((bullet[dr].timeout % 32) * 32 + ANGLE_HALF, 5); ya = y + ypart((bullet[dr].timeout % 32) * 32 + ANGLE_HALF, 5); putpixel(bmp, xa, ya, x2); x2 = GC_GREY4 + (bullet[dr].timeout / 4) % 4; circlefill(bmp, x, y, 2, x2); x2 = COLOUR_WHITE - (bullet[dr].timeout / 4) % 4; circlefill(bmp, x, y, 1, x2); break; case BULLET_DISRUPT1: clear_bitmap(distortion_mask); circlefill(distortion_mask, 100, 100, 9, 1); distortion(bmp, x, y, 19, 19, grand(31) - 15, grand(31) - 15); break; case BULLET_DISRUPT1_DROP: clear_bitmap(distortion_mask); xa = bullet[dr].special1; if (xa > 95) xa = 95; circlefill(distortion_mask, 100, 100, xa, 1); ya = bullet[dr].timeout / 2; distortion(bmp, x, y, xa, xa, grand(ya) - grand(ya), grand(ya) - grand(ya)); break; case BULLET_DISRUPT2: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, 6 + pulsate(64, 3, bullet[dr].timeout), TRANS_REVERSE); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case BULLET_DISRUPT3: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, 6 + pulsate(64, 3, bullet[dr].timeout), TRANS_DARKEN); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case BULLET_MINE1: /* x2 = COLOUR_WHITE - (bullet[dr].timeout / 4) % 4; xa = x + xpart((bullet[dr].timeout % 32) * 32, 5); ya = y + ypart((bullet[dr].timeout % 32) * 32, 5); putpixel(bmp, xa, ya, x2); xa = x + xpart((bullet[dr].timeout % 32) * 32 + ANGLE_HALF, 5); ya = y + ypart((bullet[dr].timeout % 32) * 32 + ANGLE_HALF, 5); putpixel(bmp, xa, ya, x2);*/ // x2 = COLOUR_GREY4 + (bullet[dr].timeout / 4) % 4; circlefill(bmp, x, y, 3, GC_GREEN2); circlefill(bmp, x, y, 2, GC_GREEN8); x2 = COLOUR_ORANGE2 + (bullet[dr].timeout / 4) % 7; putpixel(bmp, x, y, x2); // circlefill(bmp, x, y, 1, x2); break; case BULLET_MINE2: circlefill(bmp, x, y, 3, GC_RED2); circlefill(bmp, x, y, 2, GC_RED8); x2 = COLOUR_YELLOW2 + (bullet[dr].timeout / 4) % 7; putpixel(bmp, x, y, x2); break; case BULLET_MINE3: circlefill(bmp, x, y, 3, GC_YELLOW2); circlefill(bmp, x, y, 2, GC_YELLOW8); x2 = COLOUR_BLUE2 + (bullet[dr].timeout / 2) % 7; putpixel(bmp, x, y, x2); break; case BULLET_MBOMB: // was going to be the messengers' weapon, but not any more case BULLET_E_BOMB: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, 2 + grand(2), TRANS_WHITE); circlefill(bmp, x, y, 3 + grand(3), TRANS_YELLOW); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 7 + grand(3), x, y); break; case BULLET_TWIRLY1: x2 = (bullet[dr].timeout % 32) * 32; if (bullet[dr].special1 == 1) x2 = ANGLE_FULL - x2; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); xa = x + xpart(x2, 10); ya = y + ypart(x2, 10); circlefill(bmp, xa, ya, 2 + grand(2), bullet[dr].colours [0]); circlefill(bmp, xa, ya, 3 + grand(3), bullet[dr].colours [1]); draw_a_light(bmp, 8 + grand(3), xa, ya); xa = x + xpart(x2 + ANGLE_HALF, 10); ya = y + ypart(x2 + ANGLE_HALF, 10); circlefill(bmp, xa, ya, 2 + grand(2), bullet[dr].colours [0]); circlefill(bmp, xa, ya, 3 + grand(3), bullet[dr].colours [1]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 8 + grand(3), xa, ya); break; case BULLET_TWIRLY2: x2 = (bullet[dr].timeout % 32) * 32; if (bullet[dr].special1 == 1) x2 = ANGLE_FULL - x2; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); xa = x + xpart(x2, 6); ya = y + ypart(x2, 6); circlefill(bmp, xa, ya, 2 + grand(2), bullet[dr].colours [0]); draw_a_light(bmp, 8 + grand(3), xa, ya); xa = x + xpart(x2 + ANGLE_HALF, 6); ya = y + ypart(x2 + ANGLE_HALF, 6); circlefill(bmp, xa, ya, 2 + grand(2), bullet[dr].colours [0]); circlefill(bmp, x, y, 3 + grand(2), bullet[dr].colours [0]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 8 + grand(3), xa, ya); break; case BULLET_TWIRLY3: x2 = (bullet[dr].timeout % 32) * 32; if (bullet[dr].special2 == 1) x2 = ANGLE_FULL - x2; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); for (cs = 0; cs < 3; cs ++) { // xa = x + xpart(x2 + ANGLE_QUARTER * cs, 12); // ya = y + ypart(x2 + ANGLE_QUARTER * cs, 12); xa = x + xpart(x2 + (ANGLE_FULL / 3) * cs, 12); ya = y + ypart(x2 + (ANGLE_FULL / 3) * cs, 12); circlefill(bmp, xa, ya, 2 + grand(2), TRANS_YELLOW); circlefill(bmp, xa, ya, 3 + grand(3), TRANS_LRED); draw_a_light(bmp, 8 + grand(3), xa, ya); } x2 = ANGLE_FULL - x2; for (cs = 0; cs < 3; cs ++) { xa = x + xpart(x2 + (ANGLE_FULL / 3) * cs, 4); ya = y + ypart(x2 + (ANGLE_FULL / 3) * cs, 4); circlefill(bmp, xa, ya, 2 + grand(2), TRANS_YELLOW); circlefill(bmp, xa, ya, 3 + grand(3), TRANS_LGREEN); } draw_a_light(bmp, 12 + grand(4), x, y); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case BULLET_TWISTY: x2 = (bullet[dr].special1 % 32) * 32; y2 = xpart(x2, 13); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); xa = x + xpart(bullet[dr].angle + ANGLE_QUARTER, y2); ya = y + ypart(bullet[dr].angle + ANGLE_QUARTER, y2); circlefill(bmp, xa, ya, 3 + grand(2), bullet[dr].colours [0]); circlefill(bmp, xa, ya, 4 + grand(3), bullet[dr].colours [1]); draw_a_light(bmp, 8 + grand(3), xa, ya); xa = x + xpart(bullet[dr].angle - ANGLE_QUARTER, y2); ya = y + ypart(bullet[dr].angle - ANGLE_QUARTER, y2); circlefill(bmp, xa, ya, 3 + grand(2), bullet[dr].colours [0]); circlefill(bmp, xa, ya, 4 + grand(3), bullet[dr].colours [1]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 8 + grand(3), xa, ya); break; case BULLET_OVERPULSE: x2 = (bullet[dr].timeout % 64) * 16; if (bullet[dr].special2 == 1) x2 = ANGLE_FULL - x2; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); for (cs = 0; cs < 4; cs ++) { xa = x + xpart(x2 + ANGLE_QUARTER * cs, 12 + xpart(x2, 5)); ya = y + ypart(x2 + ANGLE_QUARTER * cs, 12 + xpart(x2, 5)); // yes, xpart circlefill(bmp, xa, ya, 6 + grand(2) + xpart(x2, 3), TRANS_YELLOW); circlefill(bmp, xa, ya, 7 + grand(4) + xpart(x2, 3), TRANS_LGREEN); draw_a_light(bmp, 8 + grand(3), xa, ya); } circlefill(bmp, x, y, 12 + grand(2) + xpart(x2, 3), TRANS_YELLOW); circlefill(bmp, x, y, 13 + grand(5) + xpart(x2, 3), TRANS_LGREEN); /* for (cs = 0; cs < 3; cs ++) { xa = x + xpart(x2 + (ANGLE_FULL / 3) * cs, 12 + xpart((x2 * 2), 5)); ya = y + ypart(x2 + (ANGLE_FULL / 3) * cs, 12 + xpart((x2 * 2), 5)); // yes, xpart circlefill(bmp, xa, ya, 2 + grand(2), TRANS_YELLOW); circlefill(bmp, xa, ya, 3 + grand(3), TRANS_LGREEN); draw_a_light(bmp, 8 + grand(3), xa, ya); } y2 = ANGLE_FULL - x2; for (cs = 0; cs < 3; cs ++) { xa = x + xpart(y2 + (ANGLE_FULL / 3) * cs + ANGLE_FULL / 6, 12 - xpart((y2 * 2), 5)); ya = y + ypart(y2 + (ANGLE_FULL / 3) * cs + ANGLE_FULL / 6, 12 - xpart((y2 * 2), 5)); // yes, xpart circlefill(bmp, xa, ya, 2 + grand(2), TRANS_YELLOW); circlefill(bmp, xa, ya, 3 + grand(3), TRANS_LGREEN); draw_a_light(bmp, 8 + grand(3), xa, ya); }*/ drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; /* case BULLET_GOLDEN_NEEDLE: case BULLET_GOLDEN_NEEDLE_SMALL: x = (bullet[dr].x) - (actor[player[play].actor_controlled].x) + (max_x / 2) * GRAIN; y = (bullet[dr].y) - (actor[player[play].actor_controlled].y) + (max_y / 2) * GRAIN; x2 = (bullet[dr].x2) - (actor[player[play].actor_controlled].x) + (max_x / 2) * GRAIN; y2 = (bullet[dr].y2) - (actor[player[play].actor_controlled].y) + (max_y / 2) * GRAIN; xa = x2 - x; ya = y2 - y; pline(bmp, x / GRAIN, y / GRAIN, (x + 3 * xa) / GRAIN, (y + 3 * ya) / GRAIN, bullet[dr].colours [0]); break; case BULLET_FROZEN_BREATH: draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_BLUE_BLOB_3 + counter % 2], (x) - 3, (y) - 3); break; case BULLET_SNOW_DART: case BULLET_ICE_DART: draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_BLUE_BLOB_3 + counter % 2], (x) - 2, (y) - 2); break; */ case BULLET_BURNING_SPIRIT: draw_a_light(bmp, 6 + grand(3), x - grand(2), y - grand(2)); case BULLET_BURNING_DRAGGED: // fall-through draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_ORANGE_BLOB_5 + counter % 2], (x) - 3 + counter % 2, (y) - 3 + counter % 2); break; case BULLET_BURST: draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_ORANGE_BLOB_2 + counter % 4], (x) - 4 + counter % 2, (y) - 4 + counter % 2); draw_a_light(bmp, 6 + grand(3), x - grand(2), y - grand(2)); break; case BULLET_PUFFY3: draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_GREEN_BLOB_2 + counter % 4], (x) - 4 + counter % 2, (y) - 4 + counter % 2); draw_a_light(bmp, 6 + grand(3), x - grand(2), y - grand(2)); break; case BULLET_PUFFY4: draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_BLUE_BLOB_2 + counter % 4], (x) - 4 + counter % 2, (y) - 4 + counter % 2); draw_a_light(bmp, 6 + grand(3), x - grand(2), y - grand(2)); break; case BULLET_GREEN_BLAT: draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_GREEN_BLOB_5 + bullet[dr].timeout % 2], (x) - 3 + bullet[dr].timeout % 2, (y) - 3 + bullet[dr].timeout % 2); // draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_GREEN_BLOB_5 + counter % 2], (x) - 3, (y) - 3); break; case BULLET_BLUE_BLAT: draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_BLUE_BLOB_5 + bullet[dr].timeout % 2], (x) - 3 + bullet[dr].timeout % 2, (y) - 3 + bullet[dr].timeout % 2); break; case BULLET_YELLOW_FLAK: draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_YELLOW_BLOB_5 + bullet[dr].timeout % 2], (x) - 3 + bullet[dr].timeout % 2, (y) - 3 + bullet[dr].timeout % 2); break; /* case BULLET_SNOW_DART_SMALL: case BULLET_ICE_DART_SMALL: draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_BLUE_BLOB_5], (x) - 1, (y) - 1); break; case BULLET_PARTICLE_SPITTER: case BULLET_FAR_SPITTER: cs = (bullet[dr].timeout / 2) % 6; if (cs > 3) cs = 6 - cs; putpixel(bmp, x, y, bullet[dr].colours [0] + cs); break; */ case BULLET_FROZEN_STAR: case BULLET_EVIL_STAR: // cs = (bullet[dr].timeout / 3) % 4; // xa = bullet[dr].colours [1]; // if (dr % 2 == 0) // cs = 4 - cs; circlefill(bmp, x, y, 1, bullet[dr].colours [1] - 4 + (bullet[dr].timeout / 5) % 4); putpixel(bmp, x, y, bullet[dr].colours [0] - 4 + (bullet[dr].timeout / 3) % 4); // putpixel(bmp, x - 1, y, xa); // putpixel(bmp, x + 1, y, xa); break; // case BULLET_NUMEROUS_BLADE: // case BULLET_FROZEN_STAR: case BULLET_SLIVER: cs = (bullet[dr].timeout / 3) % 4; xa = bullet[dr].colours [1] - 2; if (bullet[dr].special2 == 0) // terrible cs = 4 - cs; putpixel(bmp, x, y, bullet[dr].colours [1]); switch(cs) { case 0: putpixel(bmp, x - 1, y, xa); putpixel(bmp, x + 1, y, xa); break; case 1: putpixel(bmp, x - 1, y - 1, xa); putpixel(bmp, x + 1, y + 1, xa); break; case 2: putpixel(bmp, x, y - 1, xa); putpixel(bmp, x, y + 1, xa); break; case 3: putpixel(bmp, x + 1, y - 1, xa); putpixel(bmp, x - 1, y + 1, xa); break; } break; case BULLET_WINGS1: circlefill(bmp, x, y, 2, GC_GREY3); circlefill(bmp, x, y, 1, GC_GREY5); putpixel(bmp, x, y, GC_GREY6); pline(bmp, x, y, x + xpart(bullet[dr].angle + ANGLE_HALF, 8 - (bullet[dr].timeout / 4)), y + ypart(bullet[dr].angle + ANGLE_HALF, 8 - (bullet[dr].timeout / 4)), GC_GREY5); break; case BULLET_WINGS2: circlefill(bmp, x, y, 2, GC_GREY3); circlefill(bmp, x, y, 1, GC_GREY5); putpixel(bmp, x, y, GC_GREY6); pline(bmp, x, y, x - xpart(bullet[dr].angle + (30 - bullet[dr].timeout) * 5, 7), y - ypart(bullet[dr].angle + (30 - bullet[dr].timeout) * 5, 7), GC_GREY5); pline(bmp, x, y, x - xpart(bullet[dr].angle - (30 - bullet[dr].timeout) * 5, 7), y - ypart(bullet[dr].angle - (30 - bullet[dr].timeout) * 5, 7), GC_GREY5); break; case BULLET_WINGS3: circlefill(bmp, x, y, 2, GC_GREY3); circlefill(bmp, x, y, 1, GC_GREY5); putpixel(bmp, x, y, GC_GREY6); pline(bmp, x, y, x - xpart(bullet[dr].angle + 150, 7), y - ypart(bullet[dr].angle + 150, 7), GC_GREY5); pline(bmp, x, y, x - xpart(bullet[dr].angle - 150, 7), y - ypart(bullet[dr].angle - 150, 7), GC_GREY5); break; case BULLET_BIGWINGS1: circlefill(bmp, x, y, 4, GC_GREY2); circlefill(bmp, x, y, 3, GC_GREY5); // putpixel(bmp, x, y, GC_GREY6); pline(bmp, x, y, x + xpart(bullet[dr].angle + ANGLE_HALF, 12 - (bullet[dr].timeout / 3)), y + ypart(bullet[dr].angle + ANGLE_HALF, 12 - (bullet[dr].timeout / 3)), GC_GREY5); break; case BULLET_BIGWINGS2: circlefill(bmp, x, y, 4, GC_GREY2); circlefill(bmp, x, y, 3, GC_GREY5); pline(bmp, x, y, x - xpart(bullet[dr].angle + (30 - bullet[dr].timeout) * 7, 11), y - ypart(bullet[dr].angle + (30 - bullet[dr].timeout) * 7, 11), GC_GREY5); pline(bmp, x, y, x - xpart(bullet[dr].angle - (30 - bullet[dr].timeout) * 7, 11), y - ypart(bullet[dr].angle - (30 - bullet[dr].timeout) * 7, 11), GC_GREY5); pline(bmp, x, y, x - xpart(bullet[dr].angle + (30 - bullet[dr].timeout) * 3, 11), y - ypart(bullet[dr].angle + (30 - bullet[dr].timeout) * 3, 11), GC_GREY5); pline(bmp, x, y, x - xpart(bullet[dr].angle - (30 - bullet[dr].timeout) * 3, 11), y - ypart(bullet[dr].angle - (30 - bullet[dr].timeout) * 3, 11), GC_GREY5); break; case BULLET_BIGWINGS3: circlefill(bmp, x, y, 4, GC_GREY2); circlefill(bmp, x, y, 3, GC_GREY5); pline(bmp, x, y, x - xpart(bullet[dr].angle + 210, 11), y - ypart(bullet[dr].angle + 210, 11), GC_GREY5); pline(bmp, x, y, x - xpart(bullet[dr].angle - 210, 11), y - ypart(bullet[dr].angle - 210, 11), GC_GREY5); pline(bmp, x, y, x - xpart(bullet[dr].angle + 90, 11), y - ypart(bullet[dr].angle + 90, 11), GC_GREY5); pline(bmp, x, y, x - xpart(bullet[dr].angle - 90, 11), y - ypart(bullet[dr].angle - 90, 11), GC_GREY5); break; // case BULLET_POWERED: // circlefill(bmp, (x), y, 1, bullet[dr].colours [random() % 4]); // if (crandom(3) == 0) // circlefill(bmp, (x), y, 1, bullet[dr].colours [2]); // else // circlefill(bmp, (x), y, 1, bullet[dr].colours [0]); // circlefill(bmp, (x), y, 1 + random() % 2, bullet[dr].colours [0]); // break; /* case BULLET_PLASMA: switch(bullet[dr].colours [0]) { case TRANS_DRED: xa = RLE_SMALL1_RED_BLOB_L; break; default: case TRANS_DBLUE: xa = RLE_SMALL1_BLUE_BLOB_L; break; case TRANS_DGREEN: xa = RLE_SMALL1_GREEN_BLOB_L; break; case TRANS_ORANGE: xa = RLE_SMALL1_ORANGE_BLOB_L; break; case TRANS_YELLOW: xa = RLE_SMALL1_YELLOW_BLOB_L; break; } if ((counter / 3) % 4 == 1) draw_rle_sprite(bmp, small1_rle [xa], (x) - 5, (y) - 5); if ((counter / 3) % 2 == 0) draw_rle_sprite(bmp, small1_rle [xa + 1], (x) - 5, (y) - 5); if ((counter / 3) % 4 == 3) draw_rle_sprite(bmp, small1_rle [xa + 2], (x) - 5, (y) - 5); // circlefill(bmp, (x), y, 1 + random() % 2, bullet[dr].colours [0]); break;*/ // case BULLET_E_BOMB: // circlefill(bmp, x, y, 2, bullet[dr].colours [0] - (bullet[dr].timeout / 8) % 4); // break; case BULLET_BALL1: if ((counter / 3) % 2 == 1) draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_ORANGE_BLOB_1], (x) - 4, (y) - 4); else draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_ORANGE_BLOB_2], (x) - 4, (y) - 4); break; case BULLET_BALL2: if ((counter / 3) % 2 == 1) draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_YELLOW_BLOB_1], (x) - 4, (y) - 4); else draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_YELLOW_BLOB_2], (x) - 4, (y) - 4); break; case BULLET_PULSE1: if ((bullet[dr].timeout / 8) % 2 == 1) draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_PULSE1 + (bullet[dr].timeout / 2) % 4], (x) - 6, (y) - 6); else draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_PULSE4 - (bullet[dr].timeout / 2) % 4], (x) - 6, (y) - 6); draw_a_light(bmp, 8 + grand(3), x - grand(2), y - grand(2)); break; case BULLET_PULSE2: if ((bullet[dr].timeout / 8) % 2 == 1) draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_PULSE2_1 + (bullet[dr].timeout / 2) % 4], (x) - 6, (y) - 6); else draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_PULSE2_4 - (bullet[dr].timeout / 2) % 4], (x) - 6, (y) - 6); draw_a_light(bmp, 8 + grand(3), x - grand(2), y - grand(2)); break; case BULLET_BFLAK: /* if ((counter / 3) % 2 == 1) draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_YELLOW_BLOB_1], (x) - 4, (y) - 4); else draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_YELLOW_BLOB_2], (x) - 4, (y) - 4); xa = grand(3); ya = 3 - xa; x2 = xpart(bullet[dr].timeout * 29, 9); y2 = ypart(bullet[dr].timeout * 29, 9); draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_YELLOW_BLOB_4 + xa], x - ya + x2, y - ya + y2); draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_YELLOW_BLOB_4 + xa], x - ya - x2, y - ya - y2);*/ xa = bullet[dr].timeout * 18; x2 = 4 + grand(3); y2 = 6 + grand(4); /* ya = TRANS_WHITE; if (grand(3) == 0) ya = TRANS_LBLUE; if (grand(3) == 0) ya = TRANS_PURPLE; xb = TRANS_LBLUE; if (ya == TRANS_LBLUE || grand(3) == 0) xb = TRANS_DBLUE; if (grand(5) == 0) xb = TRANS_DGREY; */ ya = TRANS_WHITE; xb = TRANS_LBLUE; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); triangle(bmp, x + xpart(xa, x2), y + ypart(xa, x2), x + xpart(xa + ANGLE_FULL / 3, x2), y + ypart(xa + ANGLE_FULL / 3, x2), x + xpart(xa - ANGLE_FULL / 3, x2), y + ypart(xa - ANGLE_FULL / 3, x2), ya); triangle(bmp, x + xpart(xa, y2), y + ypart(xa, y2), x + xpart(xa + ANGLE_FULL / 3, y2), y + ypart(xa + ANGLE_FULL / 3, y2), x + xpart(xa - ANGLE_FULL / 3, y2), y + ypart(xa - ANGLE_FULL / 3, y2), xb); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case BULLET_ZIGZAG2: cs = bullet[dr].colours [0]; if (bullet[dr].special2 <= 3) cs = bullet[dr].colours [1]; if (bullet[dr].special2 <= 2) cs = bullet[dr].colours [2]; if (bullet[dr].special2 <= 1) cs = bullet[dr].colours [3]; int points2 [8]; int c2 = bullet[dr].special4 + ANGLE_QUARTER; int xd = 4 + bullet[dr].special2 / 2; x2 = ((bullet[dr].x2) - (actor[player[play].actor_controlled].x)) / GRAIN + (max_x / 2); y2 = ((bullet[dr].y2) - (actor[player[play].actor_controlled].y)) / GRAIN + (max_y / 2); points2 [0] = x + xpart(c2, xd); points2 [1] = y + ypart(c2, xd); points2 [2] = x - xpart(c2, xd); points2 [3] = y - ypart(c2, xd); points2 [4] = x2 - xpart(c2, xd); points2 [5] = y2 - ypart(c2, xd); points2 [6] = x2 + xpart(c2, xd); points2 [7] = y2 + ypart(c2, xd); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); polygon(bmp, 4, points2, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case BULLET_MANIFOLD_ORB: case BULLET_FURIOUS_ORB: circlefill(bmp, x, y, 3, GC_GREY2); circlefill(bmp, x, y, 2, GC_GREY6); // case BULLET_BOMB: // draw_sprite(bmp, small2_bmp [BMP_SMALL2_BOMB], (x) - 3, (y) - 3); break; case BULLET_MANIFOLD_ORB_SMALL: case BULLET_FURIOUS_ORB_SMALL: circlefill(bmp, x, y, 2, GC_GREY2); circlefill(bmp, x, y, 1, GC_GREY6); // circlefill(bmp, x, y, 1, GC_GREY2); // putpixel(bmp, x, y, GC_GREY6); break; case BULLET_EYE_DESOLATION: switch((bullet[dr].angle % ANGLE_FULL) / ANGLE_QUARTER) { // divisor was 42 case 0: xa = (bullet[dr].angle % ANGLE_FULL) / 42; if (xa > 6) xa = 6; if (xa < 0) xa = 0; draw_sprite(bmp, small4_bmp [BMP_SMALL4_EYE_7 - xa], (x) - 4, (y) - 5); break; case 1: xa = (bullet[dr].angle - ANGLE_QUARTER) / 42; if (xa > 6) xa = 6; if (xa < 0) xa = 0; draw_sprite_v_flip(bmp, small4_bmp [BMP_SMALL4_EYE_1 + xa], (x) - 4, (y) - 5); break; case 2: xa = (bullet[dr].angle - ANGLE_HALF) / 42; if (xa > 6) xa = 6; if (xa < 0) xa = 0; draw_sprite_vh_flip(bmp, small4_bmp [BMP_SMALL4_EYE_7 - xa], (x) - 4, (y) - 5); break; case 3: xa = (bullet[dr].angle - ANGLE_HALF - ANGLE_QUARTER) / 42; if (xa > 6) xa = 6; if (xa < 0) xa = 0; draw_sprite_h_flip(bmp, small4_bmp [BMP_SMALL4_EYE_1 + xa], (x) - 4, (y) - 5); break; } break; case BULLET_BURNING_EYE: switch((bullet[dr].angle % ANGLE_FULL) / ANGLE_QUARTER) { // divisor was 42 case 0: xa = (bullet[dr].angle % ANGLE_FULL) / 42; if (xa > 6) xa = 6; if (xa < 0) xa = 0; draw_sprite(bmp, small4_bmp [BMP_SMALL4_BEYE_7 - xa], (x) - 4, (y) - 5); break; case 1: xa = (bullet[dr].angle - ANGLE_QUARTER) / 42; if (xa > 6) xa = 6; if (xa < 0) xa = 0; draw_sprite_v_flip(bmp, small4_bmp [BMP_SMALL4_BEYE_1 + xa], (x) - 4, (y) - 5); break; case 2: xa = (bullet[dr].angle - ANGLE_HALF) / 42; if (xa > 6) xa = 6; if (xa < 0) xa = 0; draw_sprite_vh_flip(bmp, small4_bmp [BMP_SMALL4_BEYE_7 - xa], (x) - 4, (y) - 5); break; case 3: xa = (bullet[dr].angle - ANGLE_HALF - ANGLE_QUARTER) / 42; if (xa > 6) xa = 6; if (xa < 0) xa = 0; draw_sprite_h_flip(bmp, small4_bmp [BMP_SMALL4_BEYE_1 + xa], (x) - 4, (y) - 5); break; } break; /* case BULLET_BOMBLET: case BULLET_BOMB_SIDE: draw_sprite(bmp, small2_bmp [BMP_SMALL2_SIDE_BOMB], (x) - 3, (y) - 3); break; case BULLET_FROZEN_TOOTH: // circlefill(bmp, x, y, 1, COLOUR_WHITE); break; */ /* case BULLET_MISSILE: switch((bullet[dr].angle % ANGLE_FULL) / ANGLE_QUARTER) { case 0: xa = (bullet[dr].angle % ANGLE_FULL) / 42; if (xa > 6) xa = 6; if (xa < 0) xa = 0; draw_sprite(bmp, small2_bmp [BMP_SMALL2_MISSILE_7 - xa], (x) - 3, (y) - 3); break; case 1: xa = (bullet[dr].angle - ANGLE_QUARTER) / 42; if (xa > 6) xa = 6; if (xa < 0) xa = 0; draw_sprite_v_flip(bmp, small2_bmp [BMP_SMALL2_MISSILE_1 + xa], (x) - 3, (y) - 3); break; case 2: xa = (bullet[dr].angle - ANGLE_HALF) / 42; if (xa > 6) xa = 6; if (xa < 0) xa = 0; draw_sprite_vh_flip(bmp, small2_bmp [BMP_SMALL2_MISSILE_7 - xa], (x) - 3, (y) - 3); break; case 3: xa = (bullet[dr].angle - ANGLE_HALF - ANGLE_QUARTER) / 42; if (xa > 6) xa = 6; if (xa < 0) xa = 0; draw_sprite_h_flip(bmp, small2_bmp [BMP_SMALL2_MISSILE_1 + xa], (x) - 3, (y) - 3); break; } // circlefill(bmp, (x), y, 2, COLOUR_GREY6); break; case BULLET_PREMINE: draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_PREMINE], (x) - 3, (y) - 3); break; case BULLET_MINE: // if (dr % 2 == 0) // as it's purely for display, this horrible thing is okay // draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_MINE1 + (bullet[dr].timeout / 16) % 3], (x) - 5, (y) - 5); // else draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_MINE3 - (bullet[dr].timeout / (16)) % 3], (x) - 3, (y) - 3); break; case BULLET_PRESEEKMINE: draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_PRESEEKMINE], (x) - 3, (y) - 3); break; case BULLET_SEEKMINE: draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_SEEKMINE3 - (bullet[dr].timeout / (12)) % 3], (x) - 3, (y) - 3); break; case BULLET_MISSILE_MINI: circlefill(bmp, (x), y, 1, COLOUR_GREY5); break; case BULLET_NICE_ORBITAL: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, bullet[dr].special1 / 2 + 1, bullet[dr].colours [0]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 2 + grand(3) + bullet[dr].special1, x, y); break;*/ case BULLET_TOXIC_SUN: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, 5 + grand(3), TRANS_YELLOW); //bullet[dr].colours [0]); circlefill(bmp, x, y, 6 + grand(3), TRANS_LGREEN); //bullet[dr].colours [1]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 21 + grand(5), x, y); break; case BULLET_TOXIC_FLARE: // drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); // circlefill(bmp, x, y, 2 + grand(2), //bullet[dr].colours [0]); // circlefill(bmp, x, y, 3 + grand(2), //bullet[dr].colours [1]); // drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 7 + grand(4), x, y); break; // case BULLET_PETAL1: //case BULLET_PETAL2: // draw_a_light(bmp, 11 + grand(4), x, y); break; case BULLET_BLAST: case BULLET_BOLT: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, 3 + grand(2), bullet[dr].colours [0]); circlefill(bmp, x, y, 4 + grand(2), bullet[dr].colours [1]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 8 + grand(4), x, y); break; case BULLET_NOVA: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (bullet[dr].timeout > 140) { xa = bullet[dr].timeout - 139; if (xa > 15) xa = 14; circlefill(bmp, x, y, xa + grand(4), TRANS_WHITE); } if (bullet[dr].timeout > 100) { xa = bullet[dr].timeout - 99; if (xa > 18) xa = 18; circlefill(bmp, x, y, xa + grand(4), TRANS_YELLOW); } if (bullet[dr].timeout > 50 && bullet[dr].timeout < 140) { xa = bullet[dr].timeout - 49; if (xa > 20) xa = 20; circlefill(bmp, x, y, xa + grand(4), TRANS_ORANGE); } if (bullet[dr].timeout > 20 && bullet[dr].timeout < 70) { xa = bullet[dr].timeout - 20; if (xa > 20) xa = 20; circlefill(bmp, x, y, xa + grand(4), TRANS_LRED); } if (bullet[dr].timeout < 40) { xa = xpart(bullet[dr].timeout * 11 - ANGLE_QUARTER, 50); // if (xa > 20) // xa = 20; circlefill(bmp, x, y, xa + grand(4), TRANS_DRED); } // circlefill(bmp, x, y, bullet[dr].special1 + grand(3), bullet[dr].colours [0]); // circlefill(bmp, x, y, bullet[dr].special2 + grand(3), bullet[dr].colours [1]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, bullet[dr].special1 + 6 + grand(4), x, y); break; case BULLET_HOLE: xa = x + grand(3) - grand(3); ya = y + grand(3) - grand(3); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, xa, ya, 4 + grand(4), TRANS_YELLOW); circlefill(bmp, xa, ya, 4 + grand(4), TRANS_LRED); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); circlefill(bmp, xa, ya, 5 + grand(4), GC_BLACK); draw_a_light(bmp, 8 + grand(4), xa, ya); break; case BULLET_BIGBALL1: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, bullet[dr].special1 + grand(3), bullet[dr].colours [0]); circlefill(bmp, x, y, bullet[dr].special2 + grand(3), bullet[dr].colours [1]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, bullet[dr].special1 + 6 + grand(4), x, y); break; case BULLET_SWIRL1: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, 4 + grand(3), bullet[dr].colours [0]); circlefill(bmp, x, y, 5 + grand(3), bullet[dr].colours [1]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 11 + grand(4), x, y); break; case BULLET_BFLAK2: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, 2 + grand(3), TRANS_WHITE); circlefill(bmp, x, y, 3 + grand(3), TRANS_YELLOW); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 6 + grand(4), x, y); break; case BULLET_SPORE: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, 3 + pulsate(64, 2, bullet[dr].timeout), TRANS_YELLOW); circlefill(bmp, x, y, 4 - pulsate(64, 2, bullet[dr].timeout), TRANS_ORANGE); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 8 + pulsate(64, 2, bullet[dr].timeout), x, y); break; case BULLET_FLOWER: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, 3 + pulsate(64, 2, bullet[dr].timeout), TRANS_LGREEN); circlefill(bmp, x, y, 4 - pulsate(64, 2, bullet[dr].timeout), TRANS_DGREEN); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 8 + pulsate(64, 2, bullet[dr].timeout), x, y); break; case BULLET_FLOWER2: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, 3 + pulsate(64, 2, bullet[dr].timeout), TRANS_LRED); circlefill(bmp, x, y, 4 - pulsate(64, 2, bullet[dr].timeout), TRANS_ORANGE); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 8 + pulsate(64, 2, bullet[dr].timeout), x, y); break; case BULLET_BLUE_BLOB: circlefill(bmp, (x), y, 3, COLOUR_BLUE8); break; // circlefill(bmp, (x), y, 5, bullet[dr].colours [0]); case BULLET_FLAK: case BULLET_RED_BLOB: if ((counter / 3) % 4 == 1) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_RED_BLOB_S], (x) - 5, (y) - 5); if ((counter / 3) % 2 == 0) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_RED_BLOB_M], (x) - 5, (y) - 5); if ((counter / 3) % 4 == 3) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_RED_BLOB_L], (x) - 5, (y) - 5); break; case BULLET_YELLOW_BLOB: case BULLET_TORPEDO: // circlefill(bmp, (x), y, 3, COLOUR_YELLOW8); if ((counter / 3) % 4 == 1) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_YELLOW_BLOB_S], (x) - 5, (y) - 5); if ((counter / 3) % 2 == 0) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_YELLOW_BLOB_M], (x) - 5, (y) - 5); if ((counter / 3) % 4 == 3) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_YELLOW_BLOB_L], (x) - 5, (y) - 5); break; // case BULLET_ORBIT: // circle(bmp, x,y,7, COLOUR_WHITE); // break; case BULLET_CURVE: case BULLET_PURPLE_BLOB: if ((counter / 3) % 4 == 1) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_PURPLE_BLOB_S], (x) - 5, (y) - 5); if ((counter / 3) % 2 == 0) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_PURPLE_BLOB_M], (x) - 5, (y) - 5); if ((counter / 3) % 4 == 3) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_PURPLE_BLOB_L], (x) - 5, (y) - 5); break; case BULLET_ORANGE_BLOB: if ((counter / 3) % 4 == 1) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_ORANGE_BLOB_S], (x) - 5, (y) - 5); if ((counter / 3) % 2 == 0) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_ORANGE_BLOB_M], (x) - 5, (y) - 5); if ((counter / 3) % 4 == 3) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_ORANGE_BLOB_L], (x) - 5, (y) - 5); break; case BULLET_SEEKER_BLOB3: case BULLET_SEEKER_BLOB: if ((counter / 3) % 4 == 1) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_BLUE_BLOB_S], (x) - 5, (y) - 5); if ((counter / 3) % 2 == 0) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_BLUE_BLOB_M], (x) - 5, (y) - 5); if ((counter / 3) % 4 == 3) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_BLUE_BLOB_L], (x) - 5, (y) - 5); break; case BULLET_SEEKER_BLOB2: if ((counter / 3) % 4 == 1) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_GREEN_BLOB_S], (x) - 5, (y) - 5); if ((counter / 3) % 2 == 0) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_GREEN_BLOB_M], (x) - 5, (y) - 5); if ((counter / 3) % 4 == 3) draw_rle_sprite(bmp, small1_rle [RLE_SMALL1_GREEN_BLOB_L], (x) - 5, (y) - 5); break; case BULLET_PRONG: cs = bullet[dr].angle; if (bullet[dr].special1 == 1) cs = ANGLE_FULL - bullet[dr].angle; xa = x + xpart(cs, 2); ya = y + ypart(cs, 2); xb = x - xpart(cs, 2); yb = y - ypart(cs, 2); pline(bmp, xa, ya, xb, yb, bullet[dr].colours [0]); break; case BULLET_CRYSTAL1: case BULLET_CRYSTAL2: clear_bitmap(crystal_bmp); // circlefill(crystal_bmp, 10 + grand(2) - grand(2), 10 + grand(2) - grand(2), 9 + grand(2) - grand(2), TRANS_LRED); // circlefill(crystal_bmp, 10, 10, 7 + grand(2) - grand(2), bullet[dr].colours [0 + grand(4)]); circlefill(crystal_bmp, 10, 10, 7 + grand(2) - grand(2), bullet[dr].colours [0 + abs(xpart(bullet[dr].timeout * 22, 4))]); circlefill(crystal_bmp, 10 + grand(2) - grand(2), 10 + grand(2) - grand(2), 3 + grand(2) - grand(2), 0); draw_trans_sprite(bmp, crystal_bmp, x - 10 + grand(2) - grand(2), y - 10 + grand(2) - grand(2)); break; } } /* void draw_sidekicks(BITMAP *bmp, int max_x, int max_y, int play, int a) { // NOTE: not xpart/ypart optimised at all int i, x, y, x1, x2,x3, y1, y2, y3; float radangle; for (i = 0; i < actor[a].sidekicks; i ++) { if (actor[a].sidekick_x [i] + 2000 < actor[player[play].actor_controlled].x - (max_x / 2) * GRAIN || actor[a].sidekick_x [i] - 2000 > actor[player[play].actor_controlled].x + (max_x / 2) * GRAIN || actor[a].sidekick_y [i] + 2000 < actor[player[play].actor_controlled].y - (max_y / 2) * GRAIN || actor[a].sidekick_y [i] - 2000 > actor[player[play].actor_controlled].y + (max_y / 2) * GRAIN) continue; x = ((actor[a].sidekick_x [i] / GRAIN) - (actor[player[play].actor_controlled].x / GRAIN)) + max_x / 2; y = ((actor[a].sidekick_y [i] / GRAIN) - (actor[player[play].actor_controlled].y / GRAIN)) + max_y / 2; // circle(bmp, x + max_x / 2, y + max_y / 2, 3, COLOUR_GREEN7); radangle = angle_to_radians(actor[a].sidekick_angle [i]); x1 = (x) + ((float) cos(radangle + PI) * 3); y1 = (y) + ((float) sin(radangle + PI) * 3); x2 = (x) + ((float) cos(radangle + PI + (PI * 2) / 3) * 4); y2 = (y) + ((float) sin(radangle + PI + (PI * 2) / 3) * 4); x3 = (x) + ((float) cos(radangle + PI - (PI * 2) / 3) * 4); y3 = (y) + ((float) sin(radangle + PI - (PI * 2) / 3) * 4); triangle(bmp, x1, y1, x2, y2, x3, y3, COLOUR_GREY5); line(bmp, x1, y1, x2, y2, COLOUR_GREY4); line(bmp, x1, y1, x3, y3, COLOUR_GREY4); line(bmp, x2, y2, x3, y3, COLOUR_GREY4); } } */ void draw_enemies(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y) { int e, et; // we need to do this a few times so the bigger enemies are always drawn at the back. // also, draw_an_enemy_inter2 makes sure turrets are drawn along with their owner. for (e = 0; e < NO_ENEMIES; e ++) { et = enemy[e].type; if (et == ENEMY_NONE) continue; if (eclass[et].role == ROLE_BOSS) draw_an_enemy_inter(bmp, e, max_x, max_y, play, centre_x, centre_y); } for (e = 0; e < NO_ENEMIES; e ++) { et = enemy[e].type; if (et == ENEMY_NONE) continue; if (eclass[et].role == ROLE_MINIBOSS) draw_an_enemy_inter(bmp, e, max_x, max_y, play, centre_x, centre_y); } for (e = 0; e < NO_ENEMIES; e ++) { et = enemy[e].type; if (et == ENEMY_NONE) continue; if (eclass[et].role != ROLE_TURRET && eclass[et].role != ROLE_BOSS && eclass[et].role != ROLE_MINIBOSS) draw_an_enemy_inter(bmp, e, max_x, max_y, play, centre_x, centre_y); } } void draw_an_enemy_inter(BITMAP *bmp, int e, int max_x, int max_y, int play, int centre_x, int centre_y) { int i; draw_an_enemy_inter2(bmp, e, max_x, max_y, play, centre_x, centre_y); if (eclass[enemy[e].type].turrets > 0) { for (i = 0; i < MAX_TURRETS; i ++) { if (enemy[e].turret [i] != -1) draw_an_enemy_inter2(bmp, enemy[e].turret [i], max_x, max_y, play, centre_x, centre_y); } } } void draw_an_enemy_inter2(BITMAP *bmp, int e, int max_x, int max_y, int play, int centre_x, int centre_y) { if (enemy[e].x + enemy[e].edge_radius + 9000 < centre_x - (max_x / 2) * GRAIN || enemy[e].x - enemy[e].edge_radius - 9000 > centre_x + (max_x / 2) * GRAIN || enemy[e].y + enemy[e].edge_radius + 9000 < centre_y - (max_y / 2) * GRAIN || enemy[e].y - enemy[e].edge_radius - 9000 > centre_y + (max_y / 2) * GRAIN) return; int x = ((enemy[e].x / GRAIN) - (centre_x / GRAIN));// / GRAIN; int y = ((enemy[e].y / GRAIN) - (centre_y / GRAIN));// / GRAIN; draw_an_enemy(bmp, e, x + max_x / 2, y + max_y / 2); } // assumes that distortion_mask bitmap set up // x,y is the centre of the mask, wx,wy is width, dx,dy is degree of distortion void distortion(BITMAP *bmp, int x, int y, int wx, int wy, int dx, int dy) { int i, j; int xp = 1, yp = 1; if (dx < 0) { xp = -1; wx *= -1; } if (dy < 0) { yp = -1; wy *= -1; } for (i = wx * -1; i != wx; i += xp) { for (j = wy * -1; j != wy; j += yp) { if (x + i + dx >= bmp->w || x + i + dx < 0 || y + j + dy >= bmp->h || y + j + dy < 0) { putpixel(bmp, x + i, y + j, 0); continue; } if (getpixel(distortion_mask, 100 + i, 100 + j) != 0) putpixel(bmp, x + i, y + j, getpixel(bmp, x + i + dx, y + j + dy)); } } } /* void draw_lock(BITMAP *bmp, int dr, int x, int y, int rad) { // if (enemy[dr].type == ENEMY_NONE) // return; int lock_colour = COLOUR_YELLOW8 - (counter / 2) % 4; int angle = (counter * 8) % 256; arc(bmp, x, y, itofix(angle), itofix(angle + 64), rad, lock_colour); arc(bmp, x, y, itofix(angle + 128), itofix(angle + 192), rad, lock_colour); int fangle = ANGLE_FULL - (( - counter) * 8) % ANGLE_FULL; int x1 = x + xpart(fangle, rad + 1); int x2 = x + xpart(fangle, rad + 7); int y1 = y + ypart(fangle, rad + 1); int y2 = y + ypart(fangle, rad + 7); pline(bmp, x1, y1, x2, y2, lock_colour); x1 = x + xpart(fangle + ANGLE_QUARTER, rad + 1); x2 = x + xpart(fangle + ANGLE_QUARTER, rad + 7); y1 = y + ypart(fangle + ANGLE_QUARTER, rad + 1); y2 = y + ypart(fangle + ANGLE_QUARTER, rad + 7); pline(bmp, x1, y1, x2, y2, lock_colour); x1 = x + xpart(fangle + ANGLE_HALF, rad + 1); x2 = x + xpart(fangle + ANGLE_HALF, rad + 7); y1 = y + ypart(fangle + ANGLE_HALF, rad + 1); y2 = y + ypart(fangle + ANGLE_HALF, rad + 7); pline(bmp, x1, y1, x2, y2, lock_colour); x1 = x + xpart(fangle - ANGLE_QUARTER, rad + 1); x2 = x + xpart(fangle - ANGLE_QUARTER, rad + 7); y1 = y + ypart(fangle - ANGLE_QUARTER, rad + 1); y2 = y + ypart(fangle - ANGLE_QUARTER, rad + 7); pline(bmp, x1, y1, x2, y2, lock_colour); x1 = x + xpart(fangle + ANGLE_1_EIGHTH, rad + 1); x2 = x + xpart(fangle + ANGLE_1_EIGHTH, rad + 7); y1 = y + ypart(fangle + ANGLE_1_EIGHTH, rad + 1); y2 = y + ypart(fangle + ANGLE_1_EIGHTH, rad + 7); pline(bmp, x1, y1, x2, y2, lock_colour); x1 = x + xpart(fangle - ANGLE_1_EIGHTH, rad + 1); x2 = x + xpart(fangle - ANGLE_1_EIGHTH, rad + 7); y1 = y + ypart(fangle - ANGLE_1_EIGHTH, rad + 1); y2 = y + ypart(fangle - ANGLE_1_EIGHTH, rad + 7); pline(bmp, x1, y1, x2, y2, lock_colour); x1 = x + xpart(fangle + ANGLE_3_EIGHTHS, rad + 1); x2 = x + xpart(fangle + ANGLE_3_EIGHTHS, rad + 7); y1 = y + ypart(fangle + ANGLE_3_EIGHTHS, rad + 1); y2 = y + ypart(fangle + ANGLE_3_EIGHTHS, rad + 7); pline(bmp, x1, y1, x2, y2, lock_colour); x1 = x + xpart(fangle - ANGLE_3_EIGHTHS, rad + 1); x2 = x + xpart(fangle - ANGLE_3_EIGHTHS, rad + 7); y1 = y + ypart(fangle - ANGLE_3_EIGHTHS, rad + 1); y2 = y + ypart(fangle - ANGLE_3_EIGHTHS, rad + 7); pline(bmp, x1, y1, x2, y2, lock_colour); } void draw_turret_lock(BITMAP *bmp, int dr, int x, int y, int rad) { // float fangle = angle_to_radians(ANGLE_FULL - (( - counter) * 8) % ANGLE_FULL); int col = COLOUR_YELLOW8 - (counter / 2) % 4; float fangle = angle_to_radians((counter * 6) % ANGLE_FULL); int x1 = x + cos(fangle + PI / 8) * (rad + 1); int y1 = y + sin(fangle + PI / 8) * (rad + 1); int x2 = x + cos(fangle - PI / 8) * (rad + 1); int y2 = y + sin(fangle - PI / 8) * (rad + 1); pline(bmp, x1, y1, x2, y2, col); x1 = x + cos(fangle + PI / 2 + PI / 8) * (rad + 1); y1 = y + sin(fangle + PI / 2 + PI / 8) * (rad + 1); x2 = x + cos(fangle + PI / 2 - PI / 8) * (rad + 1); y2 = y + sin(fangle + PI / 2 - PI / 8) * (rad + 1); pline(bmp, x1, y1, x2, y2, col); x1 = x + cos(fangle + PI + PI / 8) * (rad + 1); y1 = y + sin(fangle + PI + PI / 8) * (rad + 1); x2 = x + cos(fangle + PI - PI / 8) * (rad + 1); y2 = y + sin(fangle + PI - PI / 8) * (rad + 1); pline(bmp, x1, y1, x2, y2, col); x1 = x + cos(fangle - PI / 2 + PI / 8) * (rad + 1); y1 = y + sin(fangle - PI / 2 + PI / 8) * (rad + 1); x2 = x + cos(fangle - PI / 2 - PI / 8) * (rad + 1); y2 = y + sin(fangle - PI / 2 - PI / 8) * (rad + 1); pline(bmp, x1, y1, x2, y2, col); } */ void draw_an_enemy(BITMAP *bmp, int dr, int x, int y) { // x += 500; // y += 500; int xa;//, ya; int col1, col2, col3, col4; int x1,y1,x2,y2,x3,y3; // float radangle; col1 = enemy[dr].colours [0]; col2 = enemy[dr].colours [1]; if (enemy[dr].hurt_pulse > 0) { // col1 = enemy[dr].hurt_pulse_colour2 + enemy[dr].hurt_pulse; // col2 = enemy[dr].hurt_pulse_colour1 + enemy[dr].hurt_pulse / 2; switch(enemy[dr].hurt_pulse / 2) { default: case 3: col1 = COLOUR_WHITE; col2 = COLOUR_WHITE; break; case 2: col1 += 2; col2 += 2; break; case 1: case 0: col1 += 1; col2 += 1; break; } } /*#ifdef DEBUG_ENEMY_SIZE int store_x = x; int store_y = y; #endif*/ #ifdef DEBUG_DISPLAY int store_x = x; int store_y = y; #endif switch(enemy[dr].type) { default: textprintf_ex(bmp, font, x,y, COLOUR_WHITE, -1, "ERROR: %i %i", dr, enemy[dr].type); break; case ENEMY_GUARDIAN1: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_GUARDIAN1], (x) - 29, (y) - 24); circlefill(bmp, (x), y, 19, col1); circle(bmp, (x), y, 19, col2); x = x + xpart(enemy[dr].angle, 12); y = y + ypart(enemy[dr].angle, 12); // col1 = GC_GREEN6; circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_GUARDIAN2: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_GUARDIAN2], (x) - 25, (y) - 34); circlefill(bmp, (x), y, 19, col1); circle(bmp, (x), y, 19, col2); x = x + xpart(enemy[dr].angle, 12); y = y + ypart(enemy[dr].angle, 12); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); // textprintf_ex(bmp, small_font, x,y, COLOUR_WHITE, -1, "%i %i", enemy[dr].angle, xpart(enemy[dr].angle, 12)); break; case ENEMY_GUARDIAN3: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_GUARDIAN3], (x) - 29, (y) - 24); circlefill(bmp, (x), y, 19, col1); circle(bmp, (x), y, 19, col2); x = x + xpart(enemy[dr].angle, 12); y = y + ypart(enemy[dr].angle, 12); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); // textprintf_ex(bmp, small_font, x,y, COLOUR_WHITE, -1, "%i %i", enemy[dr].angle, xpart(enemy[dr].angle, 12)); break; case ENEMY_GUARDIAN4: draw_rle_sprite(bmp, enemy6_rle [RLE_ENEMY6_GUARDIAN4], (x) - 34, (y) - 32); circlefill(bmp, (x), y, 19, col1); circle(bmp, (x), y, 19, col2); x = x + xpart(enemy[dr].angle, 12); y = y + ypart(enemy[dr].angle, 12); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); // textprintf_ex(bmp, small_font, x,y, COLOUR_WHITE, -1, "%i %i", enemy[dr].angle, xpart(enemy[dr].angle, 12)); break; case ENEMY_GUARDIAN5: draw_rle_sprite(bmp, enemy6_rle [RLE_ENEMY6_GUARDIAN5], (x) - 34, (y) - 29); circlefill(bmp, (x), y, 19, col1); circle(bmp, (x), y, 19, col2); x = x + xpart(enemy[dr].angle, 12); y = y + ypart(enemy[dr].angle, 12); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); // textprintf_ex(bmp, small_font, x,y, COLOUR_WHITE, -1, "%i %i", enemy[dr].angle, xpart(enemy[dr].angle, 12)); break; case ENEMY_MULTI1: draw_rle_sprite(bmp, enemy6_rle [RLE_ENEMY6_MULTI1], (x) - 34, (y) - 34); circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); x1 = x + xpart(enemy[dr].angle, 8); y1 = y + ypart(enemy[dr].angle, 8); circlefill(bmp, x1, y1, 5, col1); circle(bmp, x1, y1, 5, col2); /* x1 = x + xpart(enemy[dr].angle + ANGLE_1_EIGHTH, 10); y1 = y + ypart(enemy[dr].angle + ANGLE_1_EIGHTH, 10); circlefill(bmp, x1, y1, 2, col1); circle(bmp, x1, y1, 2, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_1_EIGHTH, 10); y1 = y + ypart(enemy[dr].angle - ANGLE_1_EIGHTH, 10); circlefill(bmp, x1, y1, 2, col1); circle(bmp, x1, y1, 2, col2);*/ break; case ENEMY_MULTI2: draw_rle_sprite(bmp, enemy6_rle [RLE_ENEMY6_MULTI2], (x) - 33, (y) - 33); circlefill(bmp, (x), y, 13, col1); circle(bmp, (x), y, 13, col2); x1 = x + xpart(enemy[dr].angle, 8); y1 = y + ypart(enemy[dr].angle, 8); circlefill(bmp, x1, y1, 4, col1); circle(bmp, x1, y1, 4, col2); break; case ENEMY_MULTI3: draw_rle_sprite(bmp, enemy6_rle [RLE_ENEMY6_MULTI3], (x) - 32, (y) - 32); circlefill(bmp, (x), y, 13, col1); circle(bmp, (x), y, 13, col2); x1 = x + xpart(enemy[dr].angle, 10); y1 = y + ypart(enemy[dr].angle, 10); circlefill(bmp, x1, y1, 4, col1); circle(bmp, x1, y1, 4, col2); break; case ENEMY_PULSER1: x1 = (enemy[dr].attribute [0] / 4) % 8; if (x1 >= 4) x1 = 8 - x1; draw_sprite(bmp, enemy_bmps [BMP_ENEMY_PULSER1_V], (x) - 11, (y) - 35 - x1); draw_sprite_v_flip(bmp, enemy_bmps [BMP_ENEMY_PULSER1_V], (x) - 11, (y) + 8 + x1); draw_sprite(bmp, enemy_bmps [BMP_ENEMY_PULSER1_H], (x) + 8 + x1, (y) - 11); draw_sprite_h_flip(bmp, enemy_bmps [BMP_ENEMY_PULSER1_H], (x) - 35 - x1, (y) - 11); circlefill(bmp, (x), y, 17, col1); circle(bmp, (x), y, 17, col2); // x = x + xpart(enemy[dr].angle, 12); // y = y + ypart(enemy[dr].angle, 12); // col1 = GC_GREEN6; // circlefill(bmp, (x), y, 3, col1); // circle(bmp, (x), y, 3, col2); break; case ENEMY_PULSER2: x1 = (enemy[dr].attribute [0] / 4) % 8; if (x1 >= 4) x1 = 8 - x1; draw_sprite(bmp, enemy_bmps [BMP_ENEMY_PULSER2_V], (x) - 12, (y) - 35 - x1); draw_sprite_v_flip(bmp, enemy_bmps [BMP_ENEMY_PULSER2_V], (x) - 12, (y) + 8 + x1); draw_sprite(bmp, enemy_bmps [BMP_ENEMY_PULSER2_H], (x) + 8 + x1, (y) - 12); draw_sprite_h_flip(bmp, enemy_bmps [BMP_ENEMY_PULSER2_H], (x) - 35 - x1, (y) - 12); circlefill(bmp, (x), y, 17, col1); circle(bmp, (x), y, 17, col2); // x = x + xpart(enemy[dr].angle, 12); // y = y + ypart(enemy[dr].angle, 12); // col1 = GC_GREEN6; // circlefill(bmp, (x), y, 3, col1); // circle(bmp, (x), y, 3, col2); break; case ENEMY_FORKER1: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_FORKER1], (x) - 26, (y) - 26); circlefill(bmp, (x), y, 13, col1); circle(bmp, (x), y, 13, col2); x1 = x + xpart(enemy[dr].angle, 7); y1 = y + ypart(enemy[dr].angle, 7); x2 = x + xpart(enemy[dr].angle, 12); y2 = y + ypart(enemy[dr].angle, 12); // col1 = GC_GREEN6; pline(bmp, x1, y1, x2, y2, col2); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); break; case ENEMY_FORKER2: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_FORKER2], (x) - 26, (y) - 26); circlefill(bmp, (x), y, 13, col1); circle(bmp, (x), y, 13, col2); x1 = x + xpart(enemy[dr].angle, 7); y1 = y + ypart(enemy[dr].angle, 7); x2 = x + xpart(enemy[dr].angle, 12); y2 = y + ypart(enemy[dr].angle, 12); // col1 = GC_GREEN6; pline(bmp, x1, y1, x2, y2, col2); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); break; case ENEMY_MINER1: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_MINER1], (x) - 19, (y) - 18); circlefill(bmp, (x), y, 14, col1); circle(bmp, (x), y, 14, col2); break; case ENEMY_MINER2: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_MINER2], (x) - 24, (y) - 24); circlefill(bmp, (x), y, 14, col1); circle(bmp, (x), y, 14, col2); break; case ENEMY_MINER3: draw_rle_sprite(bmp, enemy6_rle [RLE_ENEMY6_MINER3], (x) - 24, (y) - 42); circlefill(bmp, (x), y, 14, col1); circle(bmp, (x), y, 14, col2); break; case ENEMY_MINER3_TURRET: circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); xa = 7; if (enemy[dr].attribute [0] > 0) xa = 7 - enemy[dr].attribute [0]; if (enemy[dr].attribute [0] >= 6) xa = 6; x1 = x + xpart(enemy[dr].angle, xa); y1 = y + ypart(enemy[dr].angle, xa); circlefill(bmp, (x1), y1, 2, col1); circle(bmp, (x1), y1, 2, col2); break; case ENEMY_CIRCLER1: draw_rle_sprite(bmp, enemy6_rle [RLE_ENEMY6_CIRCLER1], (x) - 34, (y) - 24); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); x1 = ((enemy[dr].counter + 224) / 16) % 9 + 1; x1 *= 8; rectfill(bmp, x - 32, y - 9, x - 26, y + 7, x1); rectfill(bmp, x + 26, y - 9, x + 32, y + 7, x1); x1 = ((enemy[dr].counter + 240) / 16) % 9 + 1; x1 *= 8; rectfill(bmp, x - 24, y - 9, x - 18, y + 7, x1); rectfill(bmp, x + 18, y - 9, x + 24, y + 7, x1); x1 = ((enemy[dr].counter + 256) / 16) % 9 + 1; x1 *= 8; rectfill(bmp, x - 16, y - 9, x - 10, y + 7, x1); rectfill(bmp, x + 10, y - 9, x + 16, y + 7, x1); // 60, 15 drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); if (enemy[dr].attribute [0] > 0) { drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); x1 = 50 - enemy[dr].attribute [0]; if (x1 < 24) circle(bmp, x, y, x1 * 2, get_circler_colour(x1 / 6)); if (x1 < 32 && x1 > 12) circle(bmp, x, y, (x1 - 12) * 2, get_circler_colour((x1 - 12) / 6)); if (x1 < 48 && x1 > 24) circle(bmp, x, y, (x1 - 24) * 2, get_circler_colour((x1 - 24) / 6)); /* x1 = 66 - enemy[dr].attribute [0]; if (x1 < 32) circle(bmp, x, y, x1, get_circler_colour(x1 / 8)); if (x1 < 48 && x1 > 16) circle(bmp, x, y, (x1 - 16), get_circler_colour((x1 - 16) / 8)); if (x1 < 64 && x1 > 32) circle(bmp, x, y, (x1 - 32), get_circler_colour((x1 - 32) / 8)); */ drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); } break; case ENEMY_PUFFER1: draw_puffer(bmp, x, y, enemy[dr].attribute [2], 3, 16, enemy[dr].attribute [0] / 105 + 6, GC_GREEN5, GC_GREEN2); /* xa = enemy[dr].attribute [0] / 105 + 6; x1 = x + xpart((enemy[dr].attribute [2] * 8) % 1024, 16); y1 = y + ypart((enemy[dr].attribute [2] * 8) % 1024, 16); circlefill(bmp, (x1), y1, xa, GC_GREEN5); circle(bmp, (x1), y1, xa, GC_GREEN2); x1 = x + xpart(((enemy[dr].attribute [2] + 85) * 8) % 1024, 16); y1 = y + ypart(((enemy[dr].attribute [2] + 85) * 8) % 1024, 16); circlefill(bmp, (x1), y1, xa, GC_GREEN5); circle(bmp, (x1), y1, xa, GC_GREEN2); x1 = x + xpart(((enemy[dr].attribute [2] - 85) * 8) % 1024, 16); y1 = y + ypart(((enemy[dr].attribute [2] - 85) * 8) % 1024, 16); circlefill(bmp, (x1), y1, xa, GC_GREEN5); circle(bmp, (x1), y1, xa, GC_GREEN2);*/ circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); x = x + xpart(enemy[dr].angle, 10); y = y + ypart(enemy[dr].angle, 10); circlefill(bmp, (x), y, 2, col1); circle(bmp, (x), y, 2, col2); break; case ENEMY_PUFFER2: draw_puffer(bmp, x, y, enemy[dr].attribute [2], 4, 18, enemy[dr].attribute [0] / 105 + 6, GC_RED5, GC_RED2); /* xa = enemy[dr].attribute [0] / 105 + 6; x1 = x + xpart((enemy[dr].attribute [2] * 8) % 1024, 18); y1 = y + ypart((enemy[dr].attribute [2] * 8) % 1024, 18); circlefill(bmp, (x1), y1, xa, GC_RED5); circle(bmp, (x1), y1, xa, GC_RED2); x1 = x + xpart(((enemy[dr].attribute [2] + 32) * 8) % 1024, 18); y1 = y + ypart(((enemy[dr].attribute [2] + 32) * 8) % 1024, 18); circlefill(bmp, (x1), y1, xa, GC_RED5); circle(bmp, (x1), y1, xa, GC_RED2); x1 = x + xpart(((enemy[dr].attribute [2] - 32) * 8) % 1024, 18); y1 = y + ypart(((enemy[dr].attribute [2] - 32) * 8) % 1024, 18); circlefill(bmp, (x1), y1, xa, GC_RED5); circle(bmp, (x1), y1, xa, GC_RED2); x1 = x + xpart(((enemy[dr].attribute [2] + 64) * 8) % 1024, 18); y1 = y + ypart(((enemy[dr].attribute [2] + 64) * 8) % 1024, 18); circlefill(bmp, (x1), y1, xa, GC_RED5); circle(bmp, (x1), y1, xa, GC_RED2);*/ circlefill(bmp, (x), y, 18, col1); circle(bmp, (x), y, 18, col2); x = x + xpart(enemy[dr].angle, 13); y = y + ypart(enemy[dr].angle, 13); circlefill(bmp, (x), y, 2, col1); circle(bmp, (x), y, 2, col2); break; case ENEMY_PUFFER3: draw_puffer(bmp, x, y, enemy[dr].attribute [2], 3, 16, enemy[dr].attribute [0] / 105 + 6, GC_YELLOW5, GC_YELLOW2); circlefill(bmp, (x), y, 14, col1); circle(bmp, (x), y, 14, col2); x = x + xpart(enemy[dr].angle, 11); y = y + ypart(enemy[dr].angle, 11); circlefill(bmp, (x), y, 2, col1); circle(bmp, (x), y, 2, col2); break; case ENEMY_PUFFER4: draw_puffer(bmp, x, y, enemy[dr].attribute [2], 5, 23, enemy[dr].attribute [0] / 105 + 7, GC_GREEN5, GC_GREEN2); circlefill(bmp, (x), y, 21, col1); circle(bmp, (x), y, 21, col2); x = x + xpart(enemy[dr].angle, 16); y = y + ypart(enemy[dr].angle, 16); circlefill(bmp, (x), y, 2, col1); circle(bmp, (x), y, 2, col2); break; case ENEMY_BLATTER1: draw_blatter(bmp, x, y, 5, 19, enemy[dr].attribute [0], 9, GC_GREEN2, GC_GREEN5); circlefill(bmp, (x), y, 16, col1); circle(bmp, (x), y, 16, col2); x = x + xpart(enemy[dr].angle, 12); y = y + ypart(enemy[dr].angle, 12); circlefill(bmp, (x), y, 2, col1); circle(bmp, (x), y, 2, col2); break; case ENEMY_BLATTER2: draw_blatter(bmp, x, y, 3, 16, enemy[dr].attribute [0], 12, GC_ORANGE2, GC_ORANGE5); circlefill(bmp, (x), y, 16, col1); circle(bmp, (x), y, 16, col2); x = x + xpart(enemy[dr].angle, 14); y = y + ypart(enemy[dr].angle, 14); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_BLATTER3: draw_blatter(bmp, x, y, 4, 16, enemy[dr].attribute [0], 9, GC_YELLOW2, GC_YELLOW5); circlefill(bmp, x, y, 16, col1); circle(bmp, x, y, 16, col2); x1 = x + xpart(enemy[dr].angle, 14); y1 = y + ypart(enemy[dr].angle, 14); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_QUARTER, 14); y1 = y + ypart(enemy[dr].angle - ANGLE_QUARTER, 14); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_1_EIGHTH, 14); y1 = y + ypart(enemy[dr].angle - ANGLE_1_EIGHTH, 14); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_1_EIGHTH, 14); y1 = y + ypart(enemy[dr].angle + ANGLE_1_EIGHTH, 14); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); break; case ENEMY_BLATTER4: draw_blatter(bmp, x, y, 5, 19, enemy[dr].attribute [0], 9, GC_BLUE2, GC_BLUE6); circlefill(bmp, (x), y, 16, col1); circle(bmp, (x), y, 16, col2); // x1 = x + xpart(enemy[dr].angle, 12); // y1 = y + ypart(enemy[dr].angle, 12); // x2 = x + xpart(enemy[dr].angle, 16); // y2 = y + ypart(enemy[dr].angle, 16); // col1 = GC_GREEN6; // pline(bmp, x1, y1, x2, y2, col2); x1 = x + xpart(enemy[dr].angle, 11); y1 = y + ypart(enemy[dr].angle, 11); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); break; case ENEMY_BLATTER5: draw_blatter(bmp, x, y, 4, 12, enemy[dr].attribute [0], 9, GC_RED2, GC_RED5); circlefill(bmp, (x), y, 11, col1); circle(bmp, (x), y, 11, col2); x = x + xpart(enemy[dr].angle, 11); y = y + ypart(enemy[dr].angle, 11); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_BLOATER1: // draw_blatter(bmp, x, y, 3, 15 + pulsate(16, 6, enemy[dr].counter), enemy[dr].attribute [0], 10 + pulsate(32, 5, enemy[dr].counter), GC_GREEN2, GC_GREEN5); draw_blatter(bmp, x, y, 3, 15 + pulsate(32, 6, enemy[dr].counter), enemy[dr].attribute [0], 10 + pulsate(16, 3, enemy[dr].counter), GC_GREEN2, GC_GREEN5); x1 = 17 - pulsate(32, 3, enemy[dr].counter); circlefill(bmp, (x), y, x1, col1); circle(bmp, (x), y, x1, col2); break; case ENEMY_BLOATER2: draw_blatter(bmp, x, y, 5, 15 + pulsate(32, 6, enemy[dr].counter), enemy[dr].attribute [0], 8 + pulsate(16, 3, enemy[dr].counter), GC_ORANGE2, GC_ORANGE5); x1 = 17 - pulsate(32, 3, enemy[dr].counter); circlefill(bmp, (x), y, x1, col1); circle(bmp, (x), y, x1, col2); break; case ENEMY_MINEFIELDER1: x1 = pulsate(32, 4, enemy[dr].counter); y1 = y - 5 - x1; y2 = y - 25 - x1; rectfill(bmp, x - 20, y1, x + 20, y2, GC_RED5); rect(bmp, x - 20, y1, x + 20, y2, GC_RED2); y1 = y + 5 + x1; y2 = y + 25 + x1; rectfill(bmp, x - 20, y1, x + 20, y2, GC_RED5); rect(bmp, x - 20, y1, x + 20, y2, GC_RED2); circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); break; case ENEMY_SPINNER1: draw_spinner(bmp, x, y, enemy[dr].attribute [0], 32, 10, ANGLE_1_32, 1024 / 3, 3, GC_YELLOW2, GC_YELLOW6); circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); break; case ENEMY_SPINNER2: draw_spinner(bmp, x, y, enemy[dr].attribute [0], 38, 10, ANGLE_1_SIXTEENTH, 1024 / 3, 3, GC_ORANGE2, GC_ORANGE7); circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); break; case ENEMY_SPINNER3: draw_spinner(bmp, x, y, enemy[dr].attribute [0], 42, 10, ANGLE_1_SIXTEENTH, 1024 / 4, 4, GC_BLUE2, GC_BLUE8); circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); break; case ENEMY_SPINNER4: draw_spinner(bmp, x, y, enemy[dr].attribute [0], 42, 10, ANGLE_1_32, 1024 / 3, 3, GC_YELLOW2, GC_YELLOW7); circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); break; case ENEMY_SPINNER5: draw_spinner(bmp, x, y, enemy[dr].attribute [0], 45, 5, ANGLE_1_32, 1024 / 4, 4, GC_BLUE2, GC_BLUE8); circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); break; case ENEMY_OVERSPINNER: draw_overspinner(bmp, x, y, enemy[dr].attribute [2], 70, 10, ANGLE_1_32, 1024 / 6, 6, GC_BLUE2, GC_BLUE6); draw_overspinner(bmp, x, y, enemy[dr].attribute [0], 110, 10, 48, 1024 / 5, 5, GC_ORANGE2, GC_ORANGE6); circlefill(bmp, (x), y, 30, col1); circle(bmp, (x), y, 30, col2); break; case ENEMY_OVERSPIKEY: draw_spikey(bmp, x, y, enemy[dr].attribute [2], 70, 20, ANGLE_QUARTER, 1024 / 6, 6, GC_RED2, GC_RED6, -2, -3); draw_spikey(bmp, x, y, enemy[dr].attribute [0], 110, 20, ANGLE_QUARTER, 1024 / 5, 5, GC_BLUE2, GC_BLUE6, -2, -3); circlefill(bmp, (x), y, 30, col1); circle(bmp, (x), y, 30, col2); break; case ENEMY_UNDERSPIKEY: draw_spikey(bmp, x, y, enemy[dr].attribute [2], 70, 25, ANGLE_QUARTER, 1024 / 6, 6, GC_YELLOW2, GC_YELLOW6, -2, -3); draw_spikey(bmp, x, y, enemy[dr].attribute [0], 110, 15, ANGLE_QUARTER, 1024 / 5, 5, GC_GREEN2, GC_GREEN6, -2, -3); circlefill(bmp, (x), y, 26, col1); circle(bmp, (x), y, 26, col2); x = x + xpart(enemy[dr].angle, 23); y = y + ypart(enemy[dr].angle, 23); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_UNDERSPIKEY2: draw_spikey(bmp, x, y, enemy[dr].attribute [2], 80, 25, ANGLE_QUARTER, 1024 / 3, 3, GC_ORANGE2, GC_ORANGE6, -2, -3); draw_spikey(bmp, x, y, enemy[dr].attribute [0], 100, 25, ANGLE_QUARTER, 1024 / 4, 4, GC_RED2, GC_RED6, -2, -3); circlefill(bmp, (x), y, 26, col1); circle(bmp, (x), y, 26, col2); x = x + xpart(enemy[dr].angle, 21); y = y + ypart(enemy[dr].angle, 21); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_UNDERSPIKEY3: draw_overspinner(bmp, x, y, enemy[dr].attribute [2], 70, 5, ANGLE_1_SIXTEENTH, 1024 / 4, 4, GC_RED2, GC_RED6); draw_spikey(bmp, x, y, enemy[dr].attribute [0], 90, 26, ANGLE_QUARTER, 1024 / 4, 4, GC_YELLOW2, GC_YELLOW6, -2, -3); circlefill(bmp, (x), y, 26, col1); circle(bmp, (x), y, 26, col2); x = x + xpart(enemy[dr].angle, 21); y = y + ypart(enemy[dr].angle, 21); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_OVERSPIKEY2: draw_overspinner(bmp, x, y, enemy[dr].attribute [2], 80, 5, ANGLE_1_32 + 4, 1024 / 6, 6, GC_BLUE2, GC_BLUE6); draw_spikey(bmp, x, y, enemy[dr].attribute [0], 110, 26, ANGLE_1_EIGHTH + ANGLE_1_32, 1024 / 5, 5, GC_RED2, GC_RED6, -2, -3); circlefill(bmp, (x), y, 27, col1); circle(bmp, (x), y, 27, col2); x = x + xpart(enemy[dr].angle, 22); y = y + ypart(enemy[dr].angle, 22); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_OVERBLATTER: draw_blatter(bmp, x, y, 4, 50, enemy[dr].attribute [0], 13, GC_RED2, GC_RED5); // draw_overspinner(bmp, x, y, ANGLE_FULL - enemy[dr].angle, 52, 10, ANGLE_1_32, 1024 / 6, 4, GC_RED2, GC_RED6); draw_blatter(bmp, x, y, 5, 50, enemy[dr].attribute [2], 15, GC_YELLOW2, GC_YELLOW6); case ENEMY_OVERBLATTER2: if (enemy[dr].type == ENEMY_OVERBLATTER2) { draw_blatter(bmp, x, y, 6, 52, enemy[dr].attribute [0], 13, GC_BLUE2, GC_BLUE6); draw_blatter(bmp, x, y, 4, 49, enemy[dr].attribute [2], 15, GC_GREY2, GC_GREY6); } circlefill(bmp, (x), y, 26, col1); circle(bmp, (x), y, 26, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_QUARTER, 26); y1 = y + ypart(enemy[dr].angle + ANGLE_QUARTER, 26); circlefill(bmp, x1, y1, 7, col1); circle(bmp, x1, y1, 7, col2); xa = 7; if (enemy[dr].attribute [8] > 0) xa = 7 - enemy[dr].attribute [8]; if (enemy[dr].attribute [8] >= 6) xa = 3; x1 = x1 + xpart(enemy[dr].attribute [6], xa); y1 = y1 + ypart(enemy[dr].attribute [6], xa); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_QUARTER, 26); y1 = y + ypart(enemy[dr].angle - ANGLE_QUARTER, 26); circlefill(bmp, x1, y1, 7, col1); circle(bmp, x1, y1, 7, col2); xa = 7; if (enemy[dr].attribute [9] > 0) xa = 7 - enemy[dr].attribute [9]; if (enemy[dr].attribute [9] >= 6) xa = 3; x1 = x1 + xpart(enemy[dr].attribute [7], xa); y1 = y1 + ypart(enemy[dr].attribute [7], xa);; circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); break; case ENEMY_WAVER1: // draw_spinner(bmp, x, y, enemy[dr].attribute [0], 32, 10, ANGLE_1_32, 1024 / 3, 3, GC_YELLOW2, GC_YELLOW6); draw_waver(bmp, x, y, enemy[dr].attribute [0], 34, 15, ANGLE_1_32, 1024 / 4, 4, GC_RED1, GC_RED5, waver1_circle, 20); // int outward, int inward, int angle1, int angle2, int arms, int col1, int col2, RLE_SPRITE *waver_rle, int waver_rle_size) circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); break; case ENEMY_WAVER2: // draw_spinner(bmp, x, y, enemy[dr].attribute [0], 32, 10, ANGLE_1_32, 1024 / 3, 3, GC_YELLOW2, GC_YELLOW6); draw_waver(bmp, x, y, enemy[dr].attribute [0], 41, 15, ANGLE_1_32, 1024 / 3, 3, GC_GREEN1, GC_GREEN5, waver2_circle, 20); circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); break; case ENEMY_SPIKEY1: draw_spikey(bmp, x, y, enemy[dr].attribute [0], 32, 10, ANGLE_1_EIGHTH, 1024 / 3, 3, GC_GREEN2, GC_GREEN6, -2, -3); circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); x = x + xpart(enemy[dr].angle, 9); y = y + ypart(enemy[dr].angle, 9); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_SPIKEY2: draw_spikey(bmp, x, y, enemy[dr].attribute [0], 36, 15, ANGLE_1_EIGHTH, 1024 / 4, 4, GC_YELLOW2, GC_YELLOW6, -2, -3); circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); x = x + xpart(enemy[dr].angle, 9); y = y + ypart(enemy[dr].angle, 9); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_SPIKEY3: draw_spikey(bmp, x, y, enemy[dr].attribute [0], 32, 10, ANGLE_1_EIGHTH, 1024 / 3, 3, GC_YELLOW2, GC_YELLOW6, -2, -3); circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); /* x1 = x + xpart(enemy[dr].angle - ANGLE_1_32, 13); y1 = y + ypart(enemy[dr].angle - ANGLE_1_32, 13); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_1_32, 13); y1 = y + ypart(enemy[dr].angle + ANGLE_1_32, 13); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2);*/ x1 = x + xpart(enemy[dr].angle, 13); y1 = y + ypart(enemy[dr].angle, 13); circlefill(bmp, x1, y1, 4, col1); circle(bmp, x1, y1, 4, col2); break; case ENEMY_SPIKEY4: draw_spikey(bmp, x, y, enemy[dr].attribute [0], 39, 10, ANGLE_1_EIGHTH, 1024 / 3, 3, GC_YELLOW2, GC_YELLOW6, -2, -3); draw_spikey(bmp, x, y, ANGLE_FULL - enemy[dr].attribute [0], 28, 5, ANGLE_1_EIGHTH, ANGLE_HALF, 2, GC_YELLOW2, GC_YELLOW6, -2, -3); circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); break; case ENEMY_SPIKEY5: draw_spikey(bmp, x, y, enemy[dr].attribute [0], 45, 10, ANGLE_1_SIXTEENTH + ANGLE_1_32, 1024 / 4, 4, GC_GREY1, GC_GREY6, -2, -3); circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); x = x + xpart(enemy[dr].angle, 9); y = y + ypart(enemy[dr].angle, 9); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); break; /* case ENEMY_SPINNER1: void draw_spinner(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2) draw_spinner(bmp, x, y, enemy[dr].attribute [0], size1, size2, radius, col1, col2, angle1, angle2 xa = enemy[dr].attribute [0]; col3 = GC_YELLOW2; col4 = GC_YELLOW6; bordered_triangle(bmp, x + xpart(enemy[dr].attribute [0] + ANGLE_1_32, 32), y + ypart(enemy[dr].attribute [0] + ANGLE_1_32, 32), x + xpart(enemy[dr].attribute [0] - ANGLE_1_32, 32), y + ypart(enemy[dr].attribute [0] - ANGLE_1_32, 32), x - xpart(enemy[dr].attribute [0], 10), y - ypart(enemy[dr].attribute [0], 10), col3, col4); bordered_triangle(bmp, x + xpart(enemy[dr].attribute [0] + ANGLE_1_32 + (1024 / 3), 32), y + ypart(enemy[dr].attribute [0] + ANGLE_1_32 + (1024 / 3), 32), x + xpart(enemy[dr].attribute [0] - ANGLE_1_32 + (1024 / 3), 32), y + ypart(enemy[dr].attribute [0] - ANGLE_1_32 + (1024 / 3), 32), x - xpart(enemy[dr].attribute [0] + (1024 / 3), 10), y - ypart(enemy[dr].attribute [0] + (1024 / 3), 10), col3, col4); bordered_triangle(bmp, x + xpart(enemy[dr].attribute [0] + ANGLE_1_32 - (1024 / 3), 32), y + ypart(enemy[dr].attribute [0] + ANGLE_1_32 - (1024 / 3), 32), x + xpart(enemy[dr].attribute [0] - ANGLE_1_32 - (1024 / 3), 32), y + ypart(enemy[dr].attribute [0] - ANGLE_1_32 - (1024 / 3), 32), x - xpart(enemy[dr].attribute [0] - (1024 / 3), 10), y - ypart(enemy[dr].attribute [0] - (1024 / 3), 10), col3, col4); circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); // x = x + xpart(enemy[dr].angle, 10); // y = y + ypart(enemy[dr].angle, 10); // circlefill(bmp, (x), y, 2, col1); // circle(bmp, (x), y, 2, col2); break;*/ case ENEMY_DEFENDER3_TURRET1: circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); x1 = x + xpart(enemy[dr].attribute [1], 12); y1 = y + ypart(enemy[dr].attribute [1], 12); circlefill(bmp, (x1), y1, 4, col1); circle(bmp, (x1), y1, 4, col2); x2 = x - xpart(enemy[dr].attribute [1], 12); y2 = y - ypart(enemy[dr].attribute [1], 12); circlefill(bmp, x2, y2, 4, col1); circle(bmp, x2, y2, 4, col2); if (enemy[dr].attribute [0] > 0) { col2 = enemy[dr].attribute [0] / 3; switch(col2) { default: col1 = TRANS_WHITE; break; case 2: col1 = TRANS_LBLUE; break; case 1: col1 = TRANS_DBLUE; break; case 0: col1 = TRANS_DGREY; break; } draw_spark_jump(bmp, x1, y1, x2, y2, 4, col2 + 6, col1, 1); draw_a_light(bmp, col2 * 2 + 3 + grand(7), x1, y1); draw_a_light(bmp, col2 * 2 + 3 + grand(7), x2, y2); } break; case ENEMY_DEFENDER3_TURRET2: circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); draw_orbiter(bmp, x, y, enemy[dr].attribute [1], 8, 14, 20, ANGLE_1_SIXTEENTH, ANGLE_HALF, 2, GC_RED1, GC_RED6); break; case ENEMY_DEFENDER3_TURRET3: circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); x1 = xpart(enemy[dr].attribute [1], 12); y1 = ypart(enemy[dr].attribute [1], 12); circlefill(bmp, x + x1, y + y1, 3, col1); circle(bmp, x + x1, y + y1, 3, col2); circlefill(bmp, x - x1, y - y1, 3, col1); circle(bmp, x - x1, y - y1, 3, col2); x1 = xpart(enemy[dr].attribute [1] + ANGLE_QUARTER, 12); y1 = ypart(enemy[dr].attribute [1] + ANGLE_QUARTER, 12); circlefill(bmp, x - x1, y - y1, 3, col1); circle(bmp, x - x1, y - y1, 3, col2); circlefill(bmp, x + x1, y + y1, 3, col1); circle(bmp, x + x1, y + y1, 3, col2); break; case ENEMY_DEFENDER3_TURRET4: circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); x = x + xpart(enemy[dr].angle, 11); y = y + ypart(enemy[dr].angle, 11); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_DEFENDER3_TURRET5: circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); x1 = xpart(enemy[dr].angle, 11); y1 = ypart(enemy[dr].angle, 11); circlefill(bmp, x + x1, y + y1, 3, col1); circle(bmp, x + x1, y + y1, 3, col2); circlefill(bmp, x - x1, y - y1, 3, col1); circle(bmp, x - x1, y - y1, 3, col2); break; case ENEMY_DEFENDER3_TURRET6: circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); x = x + xpart(enemy[dr].angle, 11); y = y + ypart(enemy[dr].angle, 11); circlefill(bmp, (x), y, 4, col1); circle(bmp, (x), y, 4, col2); break; case ENEMY_SHIELDER1: // draw_spikey(bmp, x, y, enemy[dr].attribute [0], 45, 10, ANGLE_1_SIXTEENTH + ANGLE_1_32, 1024 / 4, 4, GC_GREY1, GC_GREY6); circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); x1 = x + xpart(enemy[dr].attribute [1], 15); y1 = y + ypart(enemy[dr].attribute [1], 15); circlefill(bmp, (x1), y1, 4, col1); circle(bmp, (x1), y1, 4, col2); x2 = x - xpart(enemy[dr].attribute [1], 15); y2 = y - ypart(enemy[dr].attribute [1], 15); circlefill(bmp, x2, y2, 4, col1); circle(bmp, x2, y2, 4, col2); draw_squarey(bmp, x, y, ANGLE_FULL - enemy[dr].attribute [1], 40, 22, ANGLE_1_SIXTEENTH, ANGLE_FULL / 3, 3, GC_BLUE1, GC_BLUE6); if (enemy[dr].attribute [0] > 0) { col2 = enemy[dr].attribute [0] / 3; switch(col2) { default: col1 = TRANS_WHITE; break; case 2: col1 = TRANS_LBLUE; break; case 1: col1 = TRANS_DBLUE; break; case 0: col1 = TRANS_DGREY; break; } draw_spark_jump(bmp, x1, y1, x2, y2, 4, col2 + 6, col1, 1); draw_a_light(bmp, col2 * 2 + 3 + grand(7), x1, y1); draw_a_light(bmp, col2 * 2 + 3 + grand(7), x2, y2); } break; case ENEMY_ZAPPER1: circlefill(bmp, (x), y, 13, col1); circle(bmp, (x), y, 13, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_QUARTER, 13); y1 = y + ypart(enemy[dr].angle + ANGLE_QUARTER, 13); circlefill(bmp, (x1), y1, 4, col1); circle(bmp, (x1), y1, 4, col2); x2 = x + xpart(enemy[dr].angle - ANGLE_QUARTER, 13); y2 = y + ypart(enemy[dr].angle - ANGLE_QUARTER, 13); circlefill(bmp, x2, y2, 4, col1); circle(bmp, x2, y2, 4, col2); for (xa = 0; xa < 8; xa ++) { x3 = x + xpart(enemy[dr].attribute [4] + (xa * ANGLE_1_EIGHTH), 35); y3 = y + ypart(enemy[dr].attribute [4] + (xa * ANGLE_1_EIGHTH), 35); col1 = COLOUR_GREY1; col3 = 0; col4 = ((ANGLE_FULL - (enemy[dr].attribute [4] * 2)) & 1023); if (col4 / ANGLE_1_EIGHTH == (xa + 2) % 8 || col4 / ANGLE_1_EIGHTH == (xa + 6) % 8) { if (enemy[dr].attribute [5] < 0) { col3 = 18 + grand(3) - (col4 % ANGLE_1_EIGHTH) / 10; col1 = COLOUR_YELLOW8 - (col4 % ANGLE_1_EIGHTH) / 16; } else { col3 = 11 + grand(3) + (col4 % ANGLE_1_EIGHTH) / 10; col1 = COLOUR_YELLOW1 + (col4 % ANGLE_1_EIGHTH) / 16; } } circlefill(bmp, x3, y3, 7, col1); circle(bmp, x3, y3, 7, GC_GREY3); if (col3 > 0) draw_a_light(bmp, col3, x3, y3); } // draw_squarey(bmp, x, y, ANGLE_FULL - enemy[dr].attribute [1], 40, 22, ANGLE_1_SIXTEENTH, ANGLE_FULL / 3, 3, GC_BLUE1, GC_BLUE6); if (enemy[dr].attribute [0] == 1) { col2 = 3 - (counter / 4) % 4;//grand(4); //enemy[dr].attribute [1]; switch(col2) { default: col1 = TRANS_YELLOW; break; case 2: col1 = TRANS_LGREEN; break; case 1: col1 = TRANS_DGREEN; break; case 0: col1 = TRANS_DGREEN; break; /* default: col1 = TRANS_WHITE; break; case 2: col1 = TRANS_LBLUE; break; case 1: col1 = TRANS_DBLUE; break; case 0: col1 = TRANS_DGREY; break;*/ } x3 = (enemy[dr].attribute [1] / GRAIN) - (enemy[dr].x / GRAIN) + x; y3 = (enemy[dr].attribute [2] / GRAIN) - (enemy[dr].y / GRAIN) + y; draw_spark_jump(bmp, x1, y1, x3, y3, 7 + enemy[dr].attribute [3] / 15, col2 + 5 + enemy[dr].attribute [3] / 50, col1, 1); draw_spark_jump(bmp, x2, y2, x3, y3, 7 + enemy[dr].attribute [3] / 15, col2 + 5 + enemy[dr].attribute [3] / 50, col1, 1); draw_a_light(bmp, col2 * 2 + 3 + grand(7), x1, y1); draw_a_light(bmp, col2 * 2 + 3 + grand(7), x2, y2); draw_a_light(bmp, col2 * 2 + 3 + grand(7), x3, y3); } break; case ENEMY_OVERZAPPER: circlefill(bmp, (x), y, 30, col1); circle(bmp, (x), y, 30, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_QUARTER, 30); y1 = y + ypart(enemy[dr].angle + ANGLE_QUARTER, 30); circlefill(bmp, (x1), y1, 5, col1); circle(bmp, (x1), y1, 5, col2); x2 = x + xpart(enemy[dr].angle - ANGLE_QUARTER, 30); y2 = y + ypart(enemy[dr].angle - ANGLE_QUARTER, 30); circlefill(bmp, x2, y2, 5, col1); circle(bmp, x2, y2, 5, col2); for (xa = 0; xa < 8; xa ++) { x3 = x + xpart(enemy[dr].attribute [4] + (xa * ANGLE_1_EIGHTH), 60); y3 = y + ypart(enemy[dr].attribute [4] + (xa * ANGLE_1_EIGHTH), 60); col1 = COLOUR_GREY1; col3 = 0; col4 = ((ANGLE_FULL - (enemy[dr].attribute [4] * 2)) & 1023); if (col4 / ANGLE_1_EIGHTH == (xa + 2) % 8 || col4 / ANGLE_1_EIGHTH == (xa + 6) % 8) { if (enemy[dr].attribute [5] < 0) { col3 = 18 + grand(3) - (col4 % ANGLE_1_EIGHTH) / 10; col1 = COLOUR_YELLOW8 - (col4 % ANGLE_1_EIGHTH) / 16; } else { col3 = 11 + grand(3) + (col4 % ANGLE_1_EIGHTH) / 10; col1 = COLOUR_YELLOW1 + (col4 % ANGLE_1_EIGHTH) / 16; } } circlefill(bmp, x3, y3, 9, col1); circle(bmp, x3, y3, 9, GC_GREY3); if (col3 > 0) draw_a_light(bmp, col3, x3, y3); } break; case ENEMY_ATTRACTOR: circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); break; case ENEMY_ORBITER1: circlefill(bmp, (x), y, 13, col1); circle(bmp, (x), y, 13, col2); draw_orbiter(bmp, x, y, enemy[dr].attribute [1], 17, 22, 40, ANGLE_1_SIXTEENTH, ANGLE_FULL / 3, 3, GC_RED1, GC_RED6); break; case ENEMY_ORBITER2: circlefill(bmp, (x), y, 11, col1); circle(bmp, (x), y, 11, col2); draw_orbiter(bmp, x, y, enemy[dr].attribute [1], 16, 21, 44, ANGLE_1_SIXTEENTH, ANGLE_HALF, 2, GC_ORANGE1, GC_ORANGE6); draw_orbiter(bmp, x, y, enemy[dr].attribute [3], 15, 21, 41, ANGLE_1_SIXTEENTH, ANGLE_HALF, 2, GC_ORANGE1, GC_ORANGE6); break; case ENEMY_ORBITER3: circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); draw_orbiter(bmp, x, y, enemy[dr].attribute [1], 17, 25, 56, ANGLE_1_SIXTEENTH, ANGLE_QUARTER, 4, GC_BLUE1, GC_BLUE5); break; case ENEMY_BRACKET1: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_BRACKET1], (x) - 25, (y) - 19); circlefill(bmp, (x), y, 11, col1); circle(bmp, (x), y, 11, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 6); y1 = y + ypart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 6); // circlefill(bmp, (x), y, 2, col1); circle(bmp, x1, y1, 2, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 6); y1 = y + ypart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 6); // circlefill(bmp, (x), y, 2, col1); circle(bmp, x1, y1, 2, col2); break; case ENEMY_BRACKET2: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_BRACKET2], (x) - 27, (y) - 16); circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 5); y1 = y + ypart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 5); // circlefill(bmp, (x), y, 2, col1); circle(bmp, x1, y1, 2, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 5); y1 = y + ypart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 5); // circlefill(bmp, (x), y, 2, col1); circle(bmp, x1, y1, 2, col2); break; case ENEMY_BRACKET3: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_BRACKET3], (x) - 28, (y) - 19); circlefill(bmp, (x), y, 11, col1); circle(bmp, (x), y, 11, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 6); y1 = y + ypart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 6); // circlefill(bmp, (x), y, 2, col1); circle(bmp, x1, y1, 2, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 6); y1 = y + ypart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 6); // circlefill(bmp, (x), y, 2, col1); circle(bmp, x1, y1, 2, col2); break; case ENEMY_BRACKET4: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_BRACKET4], (x) - 34, (y) - 24); circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 6); y1 = y + ypart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 6); circle(bmp, x1, y1, 2, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 6); y1 = y + ypart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 6); circle(bmp, x1, y1, 2, col2); break; case ENEMY_BRACKET4_TURRET: circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); x = x + xpart(enemy[dr].angle, 7); y = y + ypart(enemy[dr].angle, 7); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_BRACKET5: draw_rle_sprite(bmp, enemy6_rle [RLE_ENEMY6_BRACKET5], (x) - 31, (y) - 45); circlefill(bmp, (x), y, 11, col1); circle(bmp, (x), y, 11, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 6); y1 = y + ypart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 6); circle(bmp, x1, y1, 2, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 6); y1 = y + ypart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 6); circle(bmp, x1, y1, 2, col2); break; case ENEMY_CURVE1: draw_rle_sprite(bmp, enemy6_rle [RLE_ENEMY6_CURVE1], (x) - 34, (y) - 26); circlefill(bmp, (x), y, 13, col1); circle(bmp, (x), y, 13, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 12); y1 = y + ypart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 12); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 12); y1 = y + ypart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 12); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); break; case ENEMY_CURVE2: draw_rle_sprite(bmp, enemy6_rle [RLE_ENEMY6_CURVE2], (x) - 34, (y) - 26); if (enemy[dr].armour <= 500 && grand(500) > enemy[dr].armour) { x1 = 3;//2 + (300 - enemy[dr].armour) / 70; x += grand(x1) - grand(x1); y += grand(x1) - grand(x1); } circlefill(bmp, x, y, 13, col1); circle(bmp, x, y, 13, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 12); y1 = y + ypart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 12); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 12); y1 = y + ypart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 12); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); break; case ENEMY_CURVE3: draw_rle_sprite(bmp, enemy6_rle [RLE_ENEMY6_CURVE3], (x) - 34, (y) - 26); if (enemy[dr].armour <= 500 && grand(500) > enemy[dr].armour) { x1 = 3;//2 + (300 - enemy[dr].armour) / 70; x += grand(x1) - grand(x1); y += grand(x1) - grand(x1); } circlefill(bmp, (x), y, 13, col1); circle(bmp, (x), y, 13, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 12); y1 = y + ypart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 12); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 12); y1 = y + ypart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 12); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); break; case ENEMY_DEAD_TRI1: draw_rle_sprite(bmp, enemy9_rle [RLE_ENEMY9_TRIANGLER1], x - 36, y - 36); break; case ENEMY_DEAD_TRI2: draw_rle_sprite(bmp, enemy9_rle [RLE_ENEMY9_TRIANGLER2], x - 35, y - 35); break; case ENEMY_DEAD_TRI3: draw_rle_sprite(bmp, enemy9_rle [RLE_ENEMY9_TRIANGLER3], x - 35, y - 35); break; case ENEMY_TRIANGLER1: draw_rle_sprite(bmp, enemy9_rle [RLE_ENEMY9_TRIANGLER1], (x) - 36, (y) - 36); circlefill(bmp, (x), y, 16, col1); circle(bmp, (x), y, 16, col2); x1 = 3; y1 = 3; if (enemy[dr].attribute [0] == 1) x1 -= enemy[dr].attribute [1] / 3; else y1 -= enemy[dr].attribute [1] / 3; draw_launchers(bmp, x, y, enemy[dr].angle, 15, 14, 96, x1, y1, COLOUR_YELLOW1, COLOUR_YELLOW6); // x = x + xpart(enemy[dr].angle, 18); // y = y + ypart(enemy[dr].angle, 18); // circlefill(bmp, (x), y, 4, col1); // circle(bmp, (x), y, 4, col2); break; case ENEMY_TRIANGLER2: draw_rle_sprite(bmp, enemy9_rle [RLE_ENEMY9_TRIANGLER2], (x) - 35, (y) - 35); circlefill(bmp, (x), y, 18, col1); circle(bmp, (x), y, 18, col2); x1 = 3; y1 = 3; if (enemy[dr].attribute [0] == 1) x1 -= enemy[dr].attribute [1] / 3; else y1 -= enemy[dr].attribute [1] / 3; draw_launchers(bmp, x, y, enemy[dr].angle, 17, 13, 105, x1, y1, COLOUR_ORANGE1, COLOUR_ORANGE6); break; case ENEMY_TRIANGLER3: draw_rle_sprite(bmp, enemy9_rle [RLE_ENEMY9_TRIANGLER3], (x) - 35, (y) - 35); circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); x1 = 3; y1 = 3; if (enemy[dr].attribute [0] == 1) x1 -= enemy[dr].attribute [1] / 3; else y1 -= enemy[dr].attribute [1] / 3; draw_launchers(bmp, x, y, enemy[dr].angle, 16, 12, 112, x1, y1, COLOUR_BLUE1, COLOUR_BLUE6); break; case ENEMY_OVERTRIANGLER: draw_rle_sprite(bmp, enemy5_rle [RLE_ENEMY5_OVERTRIANGLER], (x) - 52, (y) - 52); circlefill(bmp, (x), y, 33, col1); circle(bmp, (x), y, 33, col2); x1 = 3; y1 = 3; if (enemy[dr].attribute [0] == 1) x1 -= enemy[dr].attribute [1]; else y1 -= enemy[dr].attribute [1]; draw_launchers(bmp, x, y, enemy[dr].angle, 29, 25, 96, x1, y1, COLOUR_RED1, COLOUR_RED6); break; case ENEMY_OVERTRIANGLER_TURRET: circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); x = x + xpart(enemy[dr].angle, 9); y = y + ypart(enemy[dr].angle, 9); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_DISRUPTER1: draw_rle_sprite(bmp, enemy9_rle [RLE_ENEMY9_DISRUPTER1], (x) - 44, (y) - 12); circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); x = x + xpart(enemy[dr].angle, 15); y = y + ypart(enemy[dr].angle, 15); circlefill(bmp, (x), y, 4, col1); circle(bmp, (x), y, 4, col2); break; case ENEMY_DISRUPTER2: draw_rle_sprite(bmp, enemy9_rle [RLE_ENEMY9_DISRUPTER2], (x) - 14, (y) - 46); circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); x = x + xpart(enemy[dr].angle, 15); y = y + ypart(enemy[dr].angle, 15); circlefill(bmp, (x), y, 4, col1); circle(bmp, (x), y, 4, col2); break; case ENEMY_DISRUPTER3: draw_rle_sprite(bmp, enemy9_rle [RLE_ENEMY9_DISRUPTER3], (x) - 44, (y) - 16); circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); x = x + xpart(enemy[dr].angle, 15); y = y + ypart(enemy[dr].angle, 15); circlefill(bmp, (x), y, 4, col1); circle(bmp, (x), y, 4, col2); break; case ENEMY_WORMER1: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_WORMER1], (x) - 31, (y) - 29); circlefill(bmp, (x), y, enemy[dr].radius / GRAIN, col1); circle(bmp, (x), y, enemy[dr].radius / GRAIN, col2); break; case ENEMY_WORMER2: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_WORMER2], (x) - 30, (y) - 21); circlefill(bmp, (x), y, enemy[dr].radius / GRAIN, col1); circle(bmp, (x), y, enemy[dr].radius / GRAIN, col2); break; case ENEMY_WORMER3: draw_rle_sprite(bmp, enemy4_rle [RLE_ENEMY4_WORMER3], (x) - 32, (y) - 32); circlefill(bmp, (x), y, enemy[dr].radius / GRAIN, col1); circle(bmp, (x), y, enemy[dr].radius / GRAIN, col2); break; case ENEMY_WORMER4: draw_rle_sprite(bmp, enemy9_rle [RLE_ENEMY9_WORMER4], (x) - 41, (y) - 41); circlefill(bmp, (x), y, enemy[dr].radius / GRAIN, col1); circle(bmp, (x), y, enemy[dr].radius / GRAIN, col2); break; case ENEMY_HEAD1: draw_rle_sprite(bmp, enemy5_rle [RLE_ENEMY5_HEAD1], (x) - 40, (y) - 20); circlefill(bmp, (x), y, 13, col1); circle(bmp, (x), y, 13, col2); break; case ENEMY_HEAD1_EYE1: circlefill(bmp, (x), y, 8, col1); circle(bmp, (x), y, 8, col2); x = x + xpart(enemy[dr].angle, 4); y = y + ypart(enemy[dr].angle, 4); // circlefill(bmp, (x), y, 2, col1); circle(bmp, (x), y, 2, col2); break; case ENEMY_HEAD1_EYE2: circlefill(bmp, (x), y, 8, col1); circle(bmp, (x), y, 8, col2); x = x + xpart(enemy[dr].angle, 4); y = y + ypart(enemy[dr].angle, 4); // circlefill(bmp, (x), y, 2, col1); circlefill(bmp, (x), y, 2, COLOUR_BLUE6); circle(bmp, (x), y, 2, COLOUR_BLUE1); break; case ENEMY_HEAD1_EYE3: circlefill(bmp, (x), y, 8, col1); circle(bmp, (x), y, 8, col2); x = x + xpart(enemy[dr].angle, 4); y = y + ypart(enemy[dr].angle, 4); // circlefill(bmp, (x), y, 2, col1); circlefill(bmp, (x), y, 3, COLOUR_RED6); circle(bmp, (x), y, 3, COLOUR_RED1); break; case ENEMY_DEFENDER1: draw_rle_sprite(bmp, enemy5_rle [RLE_ENEMY5_DEFENDER1], (x) - 65, (y) - 33); circlefill(bmp, (x), y, 25, col1); circle(bmp, (x), y, 25, col2); x = x + xpart(enemy[dr].angle, 21); y = y + ypart(enemy[dr].angle, 21); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_DEFENDER1_TURRET1: circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); x = x + xpart(enemy[dr].angle, 9); y = y + ypart(enemy[dr].angle, 9); circlefill(bmp, (x), y, 5, col1); circle(bmp, (x), y, 5, col2); break; case ENEMY_DEFENDER1_TURRET2: circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); x = x + xpart(enemy[dr].angle, 9); y = y + ypart(enemy[dr].angle, 9); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_DEFENDER1_TURRET3: circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); x = x + xpart(enemy[dr].angle, 9); y = y + ypart(enemy[dr].angle, 9); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_DEFENDER2: draw_rle_sprite(bmp, enemy5_rle [RLE_ENEMY5_DEFENDER2], (x) - 33, (y) - 60); circlefill(bmp, (x), y, 25, col1); circle(bmp, (x), y, 25, col2); x = x + xpart(enemy[dr].angle, 21); y = y + ypart(enemy[dr].angle, 21); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_DEFENDER2_TURRET1: case ENEMY_DEFENDER2_TURRET2: // case ENEMY_DEFENDER2_TURRET3: circlefill(bmp, (x), y, 9, col1); circle(bmp, (x), y, 9, col2); // x = x + xpart(enemy[dr].angle, 9); // y = y + ypart(enemy[dr].angle, 9); x1 = x + xpart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 5); y1 = y + ypart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 5); circle(bmp, x1, y1, 2, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 5); y1 = y + ypart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 5); circle(bmp, x1, y1, 2, col2); break; case ENEMY_DEFENDER3: draw_rle_sprite(bmp, enemy5_rle [RLE_ENEMY5_DEFENDER3], (x) - 65, (y) - 33); circlefill(bmp, (x), y, 25, col1); circle(bmp, (x), y, 25, col2); x = x + xpart(enemy[dr].angle, 21); y = y + ypart(enemy[dr].angle, 21); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_OVERDISRUPTER: draw_rle_sprite(bmp, enemy5_rle [RLE_ENEMY5_OVERDISRUPTER], (x) - 20, (y) - 69); circlefill(bmp, (x), y, 25, col1); circle(bmp, (x), y, 25, col2); x = x + xpart(enemy[dr].angle, 23); y = y + ypart(enemy[dr].angle, 23); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_BEAMER1: draw_rle_sprite(bmp, enemy7_rle [RLE_ENEMY7_BEAMER1], (x) - 92, (y) - 69); circlefill(bmp, (x), y, 35, col1); circle(bmp, (x), y, 35, col2); x1 = x + xpart(enemy[dr].angle, 31); y1 = y + ypart(enemy[dr].angle, 31); circlefill(bmp, x1, y1, 8, COLOUR_ORANGE5); circle(bmp, x1, y1, 8, COLOUR_ORANGE1); x1 = x + xpart(enemy[dr].angle, 32); y1 = y + ypart(enemy[dr].angle, 32); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); xa = abs(xpart(enemy[dr].counter * 8, 7)); if (xa == 0) xa = 1; col3 = COLOUR_BLUE1 + xa; circlefill(bmp, x, y - 59, 7, col3); circle(bmp, x, y - 59, 7, GC_GREY1); draw_a_light(bmp, abs(xpart(enemy[dr].counter * 8, 21)) + 4, x, y - 59); col3 = COLOUR_BLUE8 - xa; circlefill(bmp, x, y + 59, 7, col3); circle(bmp, x, y + 59, 7, GC_GREY1); draw_a_light(bmp, abs(xpart(enemy[dr].counter * 8 + ANGLE_QUARTER, 21)) + 4, x, y + 59); break; case ENEMY_BEAMER2: draw_rle_sprite(bmp, enemy7_rle [RLE_ENEMY7_BEAMER2], (x) - 92, (y) - 69); circlefill(bmp, (x), y, 35, col1); circle(bmp, (x), y, 35, col2); x1 = x + xpart(enemy[dr].angle, 31); y1 = y + ypart(enemy[dr].angle, 31); circlefill(bmp, x1, y1, 8, COLOUR_GREY5); circle(bmp, x1, y1, 8, COLOUR_GREY1); x1 = x + xpart(enemy[dr].angle, 32); y1 = y + ypart(enemy[dr].angle, 32); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); xa = abs(xpart(enemy[dr].counter * 8, 7)); if (xa == 0) xa = 1; col3 = COLOUR_YELLOW1 + xa; circlefill(bmp, x, y - 59, 7, col3); circle(bmp, x, y - 59, 7, GC_GREY1); draw_a_light(bmp, abs(xpart(enemy[dr].counter * 8, 21)) + 4, x, y - 59); col3 = COLOUR_YELLOW8 - xa; circlefill(bmp, x, y + 59, 7, col3); circle(bmp, x, y + 59, 7, GC_GREY1); draw_a_light(bmp, abs(xpart(enemy[dr].counter * 8 + ANGLE_QUARTER, 21)) + 4, x, y + 59); break; case ENEMY_BOSS1_1: draw_rle_sprite(bmp, enemy7_rle [RLE_ENEMY7_BOSS1_1], (x) - 94, (y) - 111); circlefill(bmp, (x), y, 55, col1); circle(bmp, (x), y, 55, col2); break; case ENEMY_BOSS1_2: draw_rle_sprite(bmp, enemy7_rle [RLE_ENEMY7_BOSS1_2], (x) - 114, (y) - 30); circlefill(bmp, (x), y, 40, col1); circle(bmp, (x), y, 40, col2); break; case ENEMY_BOSS1_3: draw_rle_sprite(bmp, enemy7_rle [RLE_ENEMY7_BOSS1_3], (x) - 114, (y) - 115); circlefill(bmp, (x), y, 40, col1); circle(bmp, (x), y, 40, col2); x = x + xpart(enemy[dr].angle, 35); y = y + ypart(enemy[dr].angle, 35); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_BOSS1_TURRET1: circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); x1 = x + xpart(enemy[dr].angle, 9); y1 = y + ypart(enemy[dr].angle, 9); circle(bmp, x1, y1, 3, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_1_EIGHTH, 9); y1 = y + ypart(enemy[dr].angle + ANGLE_1_EIGHTH, 9); circle(bmp, x1, y1, 3, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_1_EIGHTH, 9); y1 = y + ypart(enemy[dr].angle - ANGLE_1_EIGHTH, 9); circle(bmp, x1, y1, 3, col2); break; case ENEMY_BOSS1_TURRET2: circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); x = x + xpart(enemy[dr].angle, 9); y = y + ypart(enemy[dr].angle, 9); // circlefill(bmp, (x), y, 2, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_BOSS1_TURRET3: circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); x = x + xpart(enemy[dr].angle, 9); y = y + ypart(enemy[dr].angle, 9); // circlefill(bmp, (x), y, 2, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_BOSS3_1: draw_rle_sprite(bmp, enemy8_rle [RLE_ENEMY8_BOSS3], (x) - 119, (y) - 119); circlefill(bmp, (x), y, 35, col1); circle(bmp, (x), y, 35, col2); break; case ENEMY_BOSS3_3: draw_rle_sprite(bmp, enemy8_rle [RLE_ENEMY8_BOSS3_3], (x) - 140, (y) - 111); circlefill(bmp, x, y, 35, col1); circle(bmp, x, y, 35, col2); x1 = x - xpart(enemy[dr].angle, 33); y1 = y - ypart(enemy[dr].angle, 33); circlefill(bmp, x1, y1, 7, col1); circle(bmp, x1, y1, 7, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_QUARTER, 35); y1 = y + ypart(enemy[dr].angle + ANGLE_QUARTER, 35); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_QUARTER, 35); y1 = y + ypart(enemy[dr].angle - ANGLE_QUARTER, 35); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_QUARTER + ANGLE_1_EIGHTH, 35); y1 = y + ypart(enemy[dr].angle - ANGLE_QUARTER + ANGLE_1_EIGHTH, 35); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_QUARTER - ANGLE_1_EIGHTH, 35); y1 = y + ypart(enemy[dr].angle + ANGLE_QUARTER - ANGLE_1_EIGHTH, 35); circlefill(bmp, x1, y1, 3, col1); circle(bmp, x1, y1, 3, col2); break; case ENEMY_BOSS2: draw_rle_sprite(bmp, enemy8_rle [RLE_ENEMY8_BOSS2], (x) - 124, (y) - 124); circlefill(bmp, (x), y, 35, col1); circle(bmp, (x), y, 35, col2); break; case ENEMY_BOSS2_2: draw_rle_sprite(bmp, enemy7_rle [RLE_ENEMY7_BOSS2_2], (x) - 115, (y) - 127); if (enemy[dr].attribute [0] > 20 && grand(40) < enemy[dr].attribute [0]) { x += grand(enemy[dr].attribute [0] / 10) - grand(enemy[dr].attribute [0] / 10); y += grand(enemy[dr].attribute [0] / 10) - grand(enemy[dr].attribute [0] / 10); } circlefill(bmp, (x), y, 35, col1); circle(bmp, (x), y, 35, col2); x = x + xpart(enemy[dr].angle, 32); y = y + ypart(enemy[dr].angle, 32); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); if (enemy[dr].recycle <= 1) { drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, 6 + enemy[dr].attribute [0] / 3 + grand(8), TRANS_LBLUE); circlefill(bmp, x, y, 3 + enemy[dr].attribute [0] / 3 + grand(4), TRANS_WHITE); draw_a_light(bmp, 6 + enemy[dr].attribute [0] / 3 + grand(8), x, y); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); } break; case ENEMY_BOSS2_3: draw_rle_sprite(bmp, enemy8_rle [RLE_ENEMY8_BOSS2_3], (x) - 132, (y) - 120); circlefill(bmp, (x), y, 35, col1); circle(bmp, (x), y, 35, col2); break; case ENEMY_BOSS2_TURRET1: circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); x = x + xpart(enemy[dr].angle, 11); y = y + ypart(enemy[dr].angle, 11); circlefill(bmp, (x), y, 4, col1); circle(bmp, (x), y, 4, col2); break; case ENEMY_BOSS2_TURRET3: circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); x = x + xpart(enemy[dr].angle, 10); y = y + ypart(enemy[dr].angle, 10); circlefill(bmp, (x), y, 6, col1); circle(bmp, (x), y, 6, col2); break; case ENEMY_BOSS2_TURRET4: circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); xa = 11; if (enemy[dr].attribute [0] > 0) xa = 11 - enemy[dr].attribute [0] / 8; if (enemy[dr].attribute [0] >= 48) xa = 5; x = x + xpart(enemy[dr].angle, xa); y = y + ypart(enemy[dr].angle, xa); circlefill(bmp, (x), y, 4, col1); circle(bmp, (x), y, 4, col2); break; case ENEMY_BOSS2_TURRET2: circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); x = x + xpart(enemy[dr].angle, 11); y = y + ypart(enemy[dr].angle, 11); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_BOSS3_2: draw_rle_sprite(bmp, enemy7_rle [RLE_ENEMY7_BOSS3_2], (x) - 115, (y) - 120); circlefill(bmp, (x), y, 35, col1); circle(bmp, (x), y, 35, col2); x = x + xpart(enemy[dr].angle, 31); y = y + ypart(enemy[dr].angle, 31); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_BOSS3_TURRET1: circlefill(bmp, (x), y, 14, col1); circle(bmp, (x), y, 14, col2); x = x + xpart(enemy[dr].angle, 13); y = y + ypart(enemy[dr].angle, 13); circlefill(bmp, (x), y, 5, col1); circle(bmp, (x), y, 5, col2); break; case ENEMY_BOSS3_TURRET2: circlefill(bmp, (x), y, 14, col1); circle(bmp, (x), y, 14, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 7); y1 = y + ypart(enemy[dr].angle + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 7); circlefill(bmp, x1, y1, 2, col1); circle(bmp, x1, y1, 2, col2); x1 = x + xpart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 7); y1 = y + ypart(enemy[dr].angle - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 7); circlefill(bmp, x1, y1, 2, col1); circle(bmp, x1, y1, 2, col2); break; case ENEMY_BOSS3_TURRET3: circlefill(bmp, (x), y, 14, col1); circle(bmp, (x), y, 14, col2); xa = 13; if (enemy[dr].attribute [0] > 0) xa = 11 - enemy[dr].attribute [0] / 8; if (enemy[dr].attribute [0] >= 48) xa = 5; x = x + xpart(enemy[dr].angle, xa); y = y + ypart(enemy[dr].angle, xa); circlefill(bmp, (x), y, 4, col1); circle(bmp, (x), y, 4, col2); break; case ENEMY_FIGHTER5: case ENEMY_FIGHTER4: case ENEMY_FIGHTER3: case ENEMY_FIGHTER2: case ENEMY_FIGHTER1: circlefill(bmp, (x), y, 8, col1); circle(bmp, (x), y, 8, col2); // x1 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH, 10); // y1 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH, 10); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH, 10); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH, 10); circlefill(bmp, (x1), y1, 3, col1); circle(bmp, (x1), y1, 3, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_EIGHTH, 10); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_EIGHTH, 10); circlefill(bmp, (x1), y1, 3, col1); circle(bmp, (x1), y1, 3, col2); break; case ENEMY_LEAPER2: case ENEMY_LEAPER1: x1 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_QUARTER, 25); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_QUARTER, 25); x2 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_QUARTER + ANGLE_1_EIGHTH, 19); y2 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_QUARTER + ANGLE_1_EIGHTH, 19); triangle(bmp, x, y, x1, y1, x2, y2, eclass[enemy[dr].type].colour1 - 1); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_QUARTER , 26); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_QUARTER, 26); x2 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_QUARTER + ANGLE_1_EIGHTH + 16, 20); y2 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_QUARTER + ANGLE_1_EIGHTH + 16, 20); line(bmp, x, y, x1, y1, GC_GREY1); // was col2 line(bmp, x2, y2, x1, y1, GC_GREY1); line(bmp, x, y, x2, y2, GC_GREY1); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF + ANGLE_QUARTER, 25); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF + ANGLE_QUARTER, 25); x2 = x + xpart(enemy[dr].angle + ANGLE_HALF + ANGLE_QUARTER - ANGLE_1_EIGHTH, 19); y2 = y + ypart(enemy[dr].angle + ANGLE_HALF + ANGLE_QUARTER - ANGLE_1_EIGHTH, 19); triangle(bmp, x, y, x1, y1, x2, y2, eclass[enemy[dr].type].colour1 - 1); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF + ANGLE_QUARTER, 26); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF + ANGLE_QUARTER, 26); x2 = x + xpart(enemy[dr].angle + ANGLE_HALF + ANGLE_QUARTER - ANGLE_1_EIGHTH - 16, 20); y2 = y + ypart(enemy[dr].angle + ANGLE_HALF + ANGLE_QUARTER - ANGLE_1_EIGHTH - 16, 20); line(bmp, x, y, x1, y1, GC_GREY1); line(bmp, x2, y2, x1, y1, GC_GREY1); line(bmp, x, y, x2, y2, GC_GREY1); circlefill(bmp, (x), y, 9, col1); circle(bmp, (x), y, 9, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF, 11); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF, 11); circlefill(bmp, (x1), y1, 4, col1); circle(bmp, (x1), y1, 4, col2); break; case ENEMY_MESSENGER: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); x1 = x + xpart(enemy[dr].attribute [1] + ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 25); y1 = y + ypart(enemy[dr].attribute [1] + ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 25); x2 = x + xpart(enemy[dr].attribute [1] + ANGLE_HALF - ANGLE_1_SIXTEENTH, 23); y2 = y + ypart(enemy[dr].attribute [1] + ANGLE_HALF - ANGLE_1_SIXTEENTH, 23); triangle(bmp, x, y, x1, y1, x2, y2, TRANS_DBLUE); //, eclass[enemy[dr].type].colour1 - 2); x1 = x + xpart(enemy[dr].attribute [1] + ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 26); y1 = y + ypart(enemy[dr].attribute [1] + ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 26); x2 = x + xpart(enemy[dr].attribute [1] + ANGLE_HALF - ANGLE_1_SIXTEENTH + 16, 23); y2 = y + ypart(enemy[dr].attribute [1] + ANGLE_HALF - ANGLE_1_SIXTEENTH + 16, 23); // line(bmp, x, y, x1, y1, GC_GREY1); // was col2 // line(bmp, x2, y2, x1, y1, GC_GREY1); // line(bmp, x, y, x2, y2, GC_GREY1); x1 = x + xpart(enemy[dr].attribute [1] + ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 25); y1 = y + ypart(enemy[dr].attribute [1] + ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 25); x2 = x + xpart(enemy[dr].attribute [1] + ANGLE_HALF + ANGLE_1_SIXTEENTH, 23); y2 = y + ypart(enemy[dr].attribute [1] + ANGLE_HALF + ANGLE_1_SIXTEENTH, 23); triangle(bmp, x, y, x1, y1, x2, y2, TRANS_DBLUE);//eclass[enemy[dr].type].colour1 - 2); x1 = x + xpart(enemy[dr].attribute [1] + ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 26); y1 = y + ypart(enemy[dr].attribute [1] + ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 26); x2 = x + xpart(enemy[dr].attribute [1] + ANGLE_HALF + ANGLE_1_SIXTEENTH - 16, 23); y2 = y + ypart(enemy[dr].attribute [1] + ANGLE_HALF + ANGLE_1_SIXTEENTH - 16, 23); // line(bmp, x, y, x1, y1, GC_GREY1); // was col2 // line(bmp, x2, y2, x1, y1, GC_GREY1); // line(bmp, x, y, x2, y2, GC_GREY1); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_SIXTEENTH, 22); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_SIXTEENTH, 22); x2 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_SIXTEENTH, 22); y2 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_SIXTEENTH, 22); triangle(bmp, x, y, x1, y1, x2, y2, TRANS_LBLUE);//, eclass[enemy[dr].type].colour1 - 1); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_SIXTEENTH, 23); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_SIXTEENTH, 23); x2 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_SIXTEENTH - 12, 23); y2 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_SIXTEENTH - 12, 23); // line(bmp, x, y, x1, y1, GC_GREY1); // was col2 // line(bmp, x2, y2, x1, y1, GC_GREY1); // line(bmp, x, y, x2, y2, GC_GREY1); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); /* x1 = x + xpart(enemy[dr].angle + ANGLE_HALF, 11); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF, 11); circlefill(bmp, (x1), y1, 4, col1); circle(bmp, (x1), y1, 4, col2);*/ break; case ENEMY_BOMBER1: circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 12); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 12); circlefill(bmp, (x1), y1, 3, COLOUR_ORANGE5); circle(bmp, (x1), y1, 3, COLOUR_ORANGE1); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 12); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 12); circlefill(bmp, (x1), y1, 3, COLOUR_ORANGE5); circle(bmp, (x1), y1, 3, COLOUR_ORANGE1); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF, 11); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF, 11); circlefill(bmp, (x1), y1, 3, COLOUR_ORANGE5); circle(bmp, (x1), y1, 3, COLOUR_ORANGE1); break; case ENEMY_BOMBER2: col3 = COLOUR_ORANGE5;//enemy[dr].colours [1]; col4 = COLOUR_ORANGE2;//enemy[dr].colours [0] - 2; // radangle = angle_to_radians(enemy[dr].angle); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF, 16); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF, 16); x2 = x + xpart(enemy[dr].angle + ANGLE_HALF + (ANGLE_FULL / 3) + 5, 23); y2 = y + ypart(enemy[dr].angle + ANGLE_HALF + (ANGLE_FULL / 3) + 5, 23); x3 = x + xpart(enemy[dr].angle + ANGLE_HALF - (ANGLE_FULL / 3) - 5, 23); y3 = y + ypart(enemy[dr].angle + ANGLE_HALF - (ANGLE_FULL / 3) - 5, 23); triangle(bmp, x1, y1, x2, y2, x3, y3, col3); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF, 17); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF, 17); x2 = x + xpart(enemy[dr].angle + ANGLE_HALF + (ANGLE_FULL / 3), 25); y2 = y + ypart(enemy[dr].angle + ANGLE_HALF + (ANGLE_FULL / 3), 25); x3 = x + xpart(enemy[dr].angle + ANGLE_HALF - (ANGLE_FULL / 3), 25); y3 = y + ypart(enemy[dr].angle + ANGLE_HALF - (ANGLE_FULL / 3), 25); pline(bmp, x1, y1, x2, y2, col4); pline(bmp, x1, y1, x3, y3, col4); pline(bmp, x2, y2, x3, y3, col4); // circlefill(bmp, (x1), y1, 3, col1); // circle(bmp, (x1), y1, 3, col2); // circlefill(bmp, (x), y, 7, col1); // circle(bmp, (x), y, 7, col2); // x1 = x + cos(angle_to_radians(enemy[dr].angle + ANGLE_HALF)) * 6; // y1 = y + sin(angle_to_radians(enemy[dr].angle + ANGLE_HALF)) * 6; circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 12); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 12); circlefill(bmp, (x1), y1, 3, COLOUR_BLUE5); circle(bmp, (x1), y1, 3, COLOUR_BLUE1); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 12); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 12); circlefill(bmp, (x1), y1, 3, COLOUR_BLUE5); circle(bmp, (x1), y1, 3, COLOUR_BLUE1); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF, 11); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF, 11); circlefill(bmp, (x1), y1, 3, COLOUR_BLUE5); circle(bmp, (x1), y1, 3, COLOUR_BLUE1); break; case ENEMY_BOMBER3: col3 = COLOUR_ORANGE5;//enemy[dr].colours [1]; col4 = COLOUR_ORANGE2;//enemy[dr].colours [0] - 2; // radangle = angle_to_radians(enemy[dr].angle); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF, 16); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF, 16); x2 = x + xpart(enemy[dr].angle + ANGLE_HALF + (ANGLE_FULL / 3), 23); y2 = y + ypart(enemy[dr].angle + ANGLE_HALF + (ANGLE_FULL / 3), 23); x3 = x + xpart(enemy[dr].angle + ANGLE_HALF - (ANGLE_FULL / 3), 23); y3 = y + ypart(enemy[dr].angle + ANGLE_HALF - (ANGLE_FULL / 3), 23); triangle(bmp, x1, y1, x2, y2, x3, y3, col3); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF, 17); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF, 17); x2 = x + xpart(enemy[dr].angle + ANGLE_HALF + (ANGLE_FULL / 3), 25); y2 = y + ypart(enemy[dr].angle + ANGLE_HALF + (ANGLE_FULL / 3), 25); x3 = x + xpart(enemy[dr].angle + ANGLE_HALF - (ANGLE_FULL / 3), 25); y3 = y + ypart(enemy[dr].angle + ANGLE_HALF - (ANGLE_FULL / 3), 25); pline(bmp, x1, y1, x2, y2, col4); pline(bmp, x1, y1, x3, y3, col4); pline(bmp, x2, y2, x3, y3, col4); circlefill(bmp, (x), y, 10, col1); circle(bmp, (x), y, 10, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 12); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_SIXTEENTH, 12); circlefill(bmp, (x1), y1, 3, COLOUR_GREY5); circle(bmp, (x1), y1, 3, COLOUR_GREY1); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 12); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_SIXTEENTH, 12); circlefill(bmp, (x1), y1, 3, COLOUR_GREY5); circle(bmp, (x1), y1, 3, COLOUR_GREY1); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF, 11); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF, 11); circlefill(bmp, (x1), y1, 3, COLOUR_GREY5); circle(bmp, (x1), y1, 3, COLOUR_GREY1); break; case ENEMY_CRUISER4: case ENEMY_CRUISER3: x1 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_QUARTER, 21); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_QUARTER, 21); circlefill(bmp, (x1), y1, 6, col1 - 1); circle(bmp, (x1), y1, 6, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF + ANGLE_QUARTER, 21); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF + ANGLE_QUARTER, 21); circlefill(bmp, (x1), y1, 6, col1 - 1); circle(bmp, (x1), y1, 6, col2); case ENEMY_CRUISER1: case ENEMY_CRUISER2: x1 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH, 21); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH, 21); circlefill(bmp, (x1), y1, 6, col1 - 1); circle(bmp, (x1), y1, 6, col2); x1 = x + xpart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_EIGHTH, 21); y1 = y + ypart(enemy[dr].angle + ANGLE_HALF + ANGLE_1_EIGHTH, 21); circlefill(bmp, (x1), y1, 6, col1 - 1); circle(bmp, (x1), y1, 6, col2); circlefill(bmp, (x), y, 19, col1); circle(bmp, (x), y, 19, col2); // x1 = x + xpart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH, 10); // y1 = y + ypart(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH, 10); // textprintf_ex(bmp, small_font, x, y, COLOUR_GREY6, -1, "%i: %i %i %i %i", dr, enemy[dr].turret [0], enemy[dr].turret [1], enemy[dr].turret [2], enemy[dr].turret [3]); break; case ENEMY_DEFENDER2_TURRET3: case ENEMY_CRUISER2_TURRET: case ENEMY_CRUISER3_TURRET: case ENEMY_CRUISER4_TURRET: circlefill(bmp, (x), y, 9, col1); circle(bmp, (x), y, 9, col2); xa = 9; if (enemy[dr].attribute [0] > 0) xa = 9 - enemy[dr].attribute [0]; if (enemy[dr].attribute [0] >= 6) xa = 6; x1 = x + xpart(enemy[dr].angle, xa); y1 = y + ypart(enemy[dr].angle, xa); circlefill(bmp, (x1), y1, 3, col1); circle(bmp, (x1), y1, 3, col2); // textprintf_ex(bmp, small_font, x, y, COLOUR_GREY6, -1, "m%i i%i %i %i %i %i", enemy[dr].turret_main, enemy[dr].turret_index, enemy[dr].turret [0], enemy[dr].turret [1], enemy[dr].turret [2], enemy[dr].turret [3]); break; case ENEMY_CRUISER1_TURRET: circlefill(bmp, (x), y, 9, col1); circle(bmp, (x), y, 9, col2); xa = 9; if (enemy[dr].attribute [0] > 0) xa = 9 - enemy[dr].attribute [0]; if (enemy[dr].attribute [0] >= 6) xa = 6; x1 = x + xpart(enemy[dr].angle, xa); y1 = y + ypart(enemy[dr].angle, xa); circlefill(bmp, (x1), y1, 3, col1); circle(bmp, (x1), y1, 3, col2); // textprintf_ex(bmp, small_font, x, y, COLOUR_GREY6, -1, "m%i i%i %i %i %i %i", enemy[dr].turret_main, enemy[dr].turret_index, enemy[dr].turret [0], enemy[dr].turret [1], enemy[dr].turret [2], enemy[dr].turret [3]); break; case ENEMY_SHADOW1: if (enemy[dr].attribute [0] == 0) break; // invisible! this is nasty if (enemy[dr].attribute [0] > 9) { col3 = GC_BLUE4; col4 = GC_BLUE1; if (enemy[dr].attribute [0] > 70) { drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); col1 = TRANS_WHITE; col2 = TRANS_WHITE; col3 = TRANS_WHITE; col4 = TRANS_WHITE; if (enemy[dr].attribute [0] > 72) { col1 = TRANS_LGREY; col2 = TRANS_LGREY; col3 = TRANS_LGREY; col4 = TRANS_LGREY; } if (enemy[dr].attribute [0] > 75) { col1 = TRANS_DGREY; col2 = TRANS_DGREY; col3 = TRANS_DGREY; col4 = TRANS_DGREY; } } } else { drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); col1 = TRANS_DBLUE; col2 = TRANS_DBLUE; col3 = TRANS_DBLUE; col4 = TRANS_DBLUE; if (enemy[dr].attribute [0] > 3) { col1 = TRANS_LBLUE; col2 = TRANS_DBLUE; col3 = TRANS_LBLUE; col4 = TRANS_DBLUE; } if (enemy[dr].attribute [0] > 6) { col1 = TRANS_WHITE; col2 = TRANS_WHITE; col3 = TRANS_WHITE; col4 = TRANS_DGREY; } if (enemy[dr].hurt_pulse > 0) col1 = TRANS_WHITE; } triangle(bmp, x - 4, y - 4, x - 50, y - 4, x - 4, y - 27, col3); pline(bmp, x - 4, y - 4, x - 50, y - 4, col4); pline(bmp, x - 4, y - 4, x - 4, y - 27, col4); pline(bmp, x - 4, y - 27, x - 50, y - 4, col4); triangle(bmp, x + 4, y - 4, x + 50, y - 4, x + 4, y - 27, col3); pline(bmp, x + 4, y - 4, x + 50, y - 4, col4); pline(bmp, x + 4, y - 4, x + 4, y - 27, col4); pline(bmp, x + 4, y - 27, x + 50, y - 4, col4); triangle(bmp, x + 4, y + 4, x + 50, y + 4, x + 4, y + 27, col3); pline(bmp, x + 4, y + 4, x + 50, y + 4, col4); pline(bmp, x + 4, y + 4, x + 4, y + 27, col4); pline(bmp, x + 4, y + 27, x + 50, y + 4, col4); triangle(bmp, x - 4, y + 4, x - 50, y + 4, x - 4, y + 27, col3); pline(bmp, x - 4, y + 4, x - 50, y + 4, col4); pline(bmp, x - 4, y + 4, x - 4, y + 27, col4); pline(bmp, x - 4, y + 27, x - 50, y + 4, col4); circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); x1 = x + xpart(enemy[dr].angle, 11); y1 = y + ypart(enemy[dr].angle, 11); circlefill(bmp, (x1), y1, 3, col1); circle(bmp, (x1), y1, 3, col2); // if (enemy[dr].attribute [0] <= 15) drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case ENEMY_SHADOW2: if (enemy[dr].attribute [0] == 0) break; // invisible! this is nasty if (enemy[dr].attribute [0] > 9) { col3 = GC_GREY4; col4 = GC_GREY1; if (enemy[dr].attribute [0] > 50) { drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); col1 = TRANS_WHITE; col2 = TRANS_WHITE; col3 = TRANS_WHITE; col4 = TRANS_WHITE; if (enemy[dr].attribute [0] > 52) { col1 = TRANS_LGREY; col2 = TRANS_LGREY; col3 = TRANS_LGREY; col4 = TRANS_LGREY; } if (enemy[dr].attribute [0] > 55) { col1 = TRANS_DGREY; col2 = TRANS_DGREY; col3 = TRANS_DGREY; col4 = TRANS_DGREY; } } } else { drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); col1 = TRANS_DGREY; col2 = TRANS_DGREY; col3 = TRANS_DGREY; col4 = TRANS_DGREY; if (enemy[dr].attribute [0] > 3) { col1 = TRANS_LGREY; col2 = TRANS_DGREY; col3 = TRANS_LGREY; col4 = TRANS_DGREY; } if (enemy[dr].attribute [0] > 6) { col1 = TRANS_WHITE; col2 = TRANS_WHITE; col3 = TRANS_WHITE; col4 = TRANS_DGREY; } if (enemy[dr].hurt_pulse > 0) col1 = TRANS_WHITE; } triangle(bmp, x - 4, y - 4, x - 30, y - 4, x - 4, y - 52, col3); pline(bmp, x - 4, y - 4, x - 30, y - 4, col4); pline(bmp, x - 4, y - 4, x - 4, y - 52, col4); pline(bmp, x - 4, y - 52, x - 30, y - 4, col4); triangle(bmp, x + 4, y - 4, x + 30, y - 4, x + 4, y - 52, col3); pline(bmp, x + 4, y - 4, x + 30, y - 4, col4); pline(bmp, x + 4, y - 4, x + 4, y - 52, col4); pline(bmp, x + 4, y - 52, x + 30, y - 4, col4); triangle(bmp, x + 4, y + 4, x + 30, y + 4, x + 4, y + 52, col3); pline(bmp, x + 4, y + 4, x + 30, y + 4, col4); pline(bmp, x + 4, y + 4, x + 4, y + 52, col4); pline(bmp, x + 4, y + 52, x + 30, y + 4, col4); triangle(bmp, x - 4, y + 4, x - 30, y + 4, x - 4, y + 52, col3); pline(bmp, x - 4, y + 4, x - 30, y + 4, col4); pline(bmp, x - 4, y + 4, x - 4, y + 52, col4); pline(bmp, x - 4, y + 52, x - 30, y + 4, col4); circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); x1 = x + xpart(enemy[dr].angle, 11); y1 = y + ypart(enemy[dr].angle, 11); circlefill(bmp, (x1), y1, 4, col1); circle(bmp, (x1), y1, 4, col2); // if (enemy[dr].attribute [0] <= 15) drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; /* case ENEMY_BOUNCER: circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_BOUNCER2: col4 = enemy[dr].colours [0] - 2; x1 = x + xpart(enemy[dr].angle, 12); y1 = y + ypart(enemy[dr].angle, 12); x2 = x + xpart(enemy[dr].angle + ANGLE_HALF, 12); y2 = y + ypart(enemy[dr].angle + ANGLE_HALF, 12); pline(bmp, x1, y1, x2, y2, col4); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_FIGHTER: circlefill(bmp, (x), y, 8, col1); circle(bmp, (x), y, 8, col2); x1 = x + cos(angle_to_radians(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH)) * 6; y1 = y + sin(angle_to_radisans(enemy[dr].angle + ANGLE_HALF - ANGLE_1_EIGHTH)) * 6; circlefill(bmp, (x1), y1, 3, col1); circle(bmp, (x1), y1, 3, col2); x1 = x + cos(angle_to_radians(enemy[dr].angle + ANGLE_HALF + ANGLE_1_EIGHTH)) * 6; y1 = y + sin(angle_to_radians(enemy[dr].angle + ANGLE_HALF + ANGLE_1_EIGHTH)) * 6; circlefill(bmp, (x1), y1, 3, col1); circle(bmp, (x1), y1, 3, col2); break; case ENEMY_BOSS2: col3 = enemy[dr].colours [1]; col4 = enemy[dr].colours [0] - 2; circlefill(bmp, (x), y, 90, col3); circle(bmp, (x), y, 90, col4); x1 = cos(angle_to_radians(enemy[dr].angle)) * (90); y1 = sin(angle_to_radians(enemy[dr].angle)) * (90); line(bmp, x + x1, y + y1, x - x1, y - y1, col4); x1 = cos(angle_to_radians(enemy[dr].angle + ANGLE_QUARTER)) * (90); y1 = sin(angle_to_radians(enemy[dr].angle + ANGLE_QUARTER)) * (90); line(bmp, x + x1, y + y1, x - x1, y - y1, col4); circlefill(bmp, (x), y, 27, col1); circle(bmp, (x), y, 27, col2); break; case ENEMY_BOSS2_TURRET: if (enemy[dr].recycle < 20 && enemy[dr].recycle % 4 < 2)// && enemy[dr].burst_fire <= 0) col1 += 3; circlefill(bmp, (x), y, 15, col1); circle(bmp, (x), y, 15, col2); break; case ENEMY_SWERVER: col3 = enemy[dr].colours [1]; col4 = enemy[dr].colours [0] - 2; radangle = angle_to_radians(enemy[dr].angle); x1 = (x) + cos(radangle) * (13); y1 = (y) + sin(radangle) * (13); x2 = (x) + cos(radangle + (PI * 2) / 3) * 11; y2 = (y) + sin(radangle + (PI * 2) / 3) * 11; x3 = (x) + cos(radangle - (PI * 2) / 3) * 11; y3 = (y) + sin(radangle - (PI * 2) / 3) * 11; triangle(bmp, x1, y1, x2, y2, x3, y3, col3); line(bmp, x1, y1, x2, y2, col4); line(bmp, x1, y1, x3, y3, col4); line(bmp, x2, y2, x3, y3, col4); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_SWERVER2: col3 = enemy[dr].colours [1]; col4 = enemy[dr].colours [0] - 2; radangle = angle_to_radians(enemy[dr].angle); x1 = (x) + cos(radangle + PI) * (11); y1 = (y) + sin(radangle + PI) * (11); x2 = (x) + cos(radangle + PI + (PI * 2) / 3) * 14; y2 = (y) + sin(radangle + PI + (PI * 2) / 3) * 14; x3 = (x) + cos(radangle + PI - (PI * 2) / 3) * 14; y3 = (y) + sin(radangle + PI - (PI * 2) / 3) * 14; triangle(bmp, x1, y1, x2, y2, x3, y3, col3); line(bmp, x1, y1, x2, y2, col4); line(bmp, x1, y1, x3, y3, col4); line(bmp, x2, y2, x3, y3, col4); circlefill(bmp, (x), y, 7, col1); circle(bmp, (x), y, 7, col2); break; case ENEMY_CLOAKER: col1 = COLOUR_BLACK; col2 = COLOUR_BLACK; col3 = COLOUR_BLACK; col4 = COLOUR_BLACK; if (enemy[dr].attribute [ATTRIB_CLOAKER_PULSE] > 0) { col1 = enemy[dr].colours [0] + enemy[dr].attribute [ATTRIB_CLOAKER_PULSE] / 12; col2 = enemy[dr].colours [1] + enemy[dr].attribute [ATTRIB_CLOAKER_PULSE] / 6; if (col1 > enemy[dr].colours [0] + 7) col1 = enemy[dr].colours [0] + 7; if (col2 > enemy[dr].colours [1] + 7) col2 = enemy[dr].colours [1] + 7; col3 = enemy[dr].colours [0] + enemy[dr].attribute [ATTRIB_CLOAKER_PULSE] / 6; col4 = enemy[dr].colours [1] + enemy[dr].attribute [ATTRIB_CLOAKER_PULSE] / 3; if (col3 > enemy[dr].colours [0] + 7) col3 = enemy[dr].colours [0] + 7; if (col4 > enemy[dr].colours [1] + 7) col4 = enemy[dr].colours [1] + 7; } triangle(bmp, x - 2, y - 2, x - 30, y - 2, x - 2, y - 15, col1); pline(bmp, x - 2, y - 2, x - 30, y - 2, col2); pline(bmp, x - 2, y - 2, x - 2, y - 15, col2); pline(bmp, x - 2, y - 15, x - 30, y - 2, col2); triangle(bmp, x + 2, y - 2, x + 30, y - 2, x + 2, y - 15, col1); pline(bmp, x + 2, y - 2, x + 30, y - 2, col2); pline(bmp, x + 2, y - 2, x + 2, y - 15, col2); pline(bmp, x + 2, y - 15, x + 30, y - 2, col2); triangle(bmp, x + 2, y + 2, x + 30, y + 2, x + 2, y + 15, col1); pline(bmp, x + 2, y + 2, x + 30, y + 2, col2); pline(bmp, x + 2, y + 2, x + 2, y + 15, col2); pline(bmp, x + 2, y + 15, x + 30, y + 2, col2); triangle(bmp, x - 2, y + 2, x - 30, y + 2, x - 2, y + 15, col1); pline(bmp, x - 2, y + 2, x - 30, y + 2, col2); pline(bmp, x - 2, y + 2, x - 2, y + 15, col2); pline(bmp, x - 2, y + 15, x - 30, y + 2, col2); circlefill(bmp, (x), y, 9, col3); circle(bmp, (x), y, 9, col4); break; case ENEMY_SUPERJELLY: x1 = (enemy[dr].attribute [ATTRIB_JELLY_PULSE] / 4) % 8; if (x1 >= 4) x1 = 8 - x1; draw_sprite(bmp, superjelly_bmp [0], (x) - 10, (y) - 24 - x1); draw_sprite_v_flip(bmp, superjelly_bmp [0], (x) - 10, (y) + 4 + x1); draw_sprite(bmp, superjelly_bmp [1], (x) + 4 + x1, (y) - 10); draw_sprite_h_flip(bmp, superjelly_bmp [1], (x) - 24 - x1, (y) - 10); circlefill(bmp, (x), y, 9, col1); circle(bmp, (x), y, 9, col2); break; case ENEMY_BEE: thing = grand(ANGLE_QUARTER); col4 = COLOUR_GREY4; radangle = angle_to_radians(enemy[dr].angle); x1 = x + cos(angle_to_radians(enemy[dr].angle + ANGLE_HALF - thing)) * 9; y1 = y + sin(angle_to_radians(enemy[dr].angle + ANGLE_HALF - thing)) * 9; line(bmp, x, y, x1, y1, col4); x1 = x + cos(angle_to_radians(enemy[dr].angle + ANGLE_HALF + thing)) * 9; y1 = y + sin(angle_to_radians(enemy[dr].angle + ANGLE_HALF + thing)) * 9; line(bmp, x, y, x1, y1, col4); x1 = x + cos(angle_to_radians(enemy[dr].angle + ANGLE_HALF)) * 4; y1 = y + sin(angle_to_radians(enemy[dr].angle + ANGLE_HALF)) * 4; col3 = enemy[dr].colours [1]; col4 = enemy[dr].colours [0] - 2; circlefill(bmp, (x1), y1, 3, col3); circle(bmp, (x1), y1, 3, col4); circlefill(bmp, (x), y, 3, col1); circle(bmp, (x), y, 3, col2); break; case ENEMY_JELLY: draw_rle_sprite(bmp, enemy1_rle [RLE_ENEMY1_JELLY1 + (enemy[dr].counter / 3) % 6], (x) - 22, (y) - 8); // 11 circlefill(bmp, (x), y, 12, col1); circle(bmp, (x), y, 12, col2); break; */ } #ifdef DEBUG_ENEMY_SIZE circle(bmp, store_x, store_y, eclass[enemy[dr].type].radius / GRAIN, COLOUR_YELLOW2 + counter % 6); #endif #ifdef DEBUG_DISPLAY if (debug_info == 1) textprintf_centre_ex(bmp, small_font, store_x, store_y, COLOUR_GREEN8, COLOUR_GREY2, "%i", enemy[dr].type); #endif } void draw_spark_jump(BITMAP *bmp, int x1, int y1, int x2, int y2, int parts, int scatter, int col, int transy) { if (transy) drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); // int sangle = radians_to_angle(atan2(y1 - y2, x1 - x2)); int xstep = (x2 - x1) / parts; int ystep = (y2 - y1) / parts; int i, sx1 = x1, sy1 = y1, sx2, sy2; for (i = 0; i < parts; i ++) { sx2 = x1 + xstep * i; sy2 = y1 + ystep * i; sx2 += grand(scatter) - grand(scatter); sy2 += grand(scatter) - grand(scatter); line(bmp, sx1, sy1, sx2, sy2, col); sx1 = sx2; sy1 = sy2; } line(bmp, sx1, sy1, x2, y2, col); if (transy) drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); } void draw_tri(BITMAP *bmp, int x, int y, int angle, int length1, int length2, int angle2, int col1, int col2) { int points [6]; points [0] = x + xpart(angle, length1); points [1] = y + ypart(angle, length1); points [2] = x + xpart(angle + angle2, length2); points [3] = y + ypart(angle + angle2, length2); points [4] = x + xpart(angle - angle2, length2); points [5] = y + ypart(angle - angle2, length2); triangle(bmp, points [0], points [1], points [2], points [3], points [4], points [5], col2); points [0] = x + xpart(angle, length1 + 1); points [1] = y + ypart(angle, length1 + 1); points [2] = x + xpart(angle + angle2, length2 + 1); points [3] = y + ypart(angle + angle2, length2 + 1); points [4] = x + xpart(angle - angle2, length2 + 1); points [5] = y + ypart(angle - angle2, length2 + 1); line(bmp, points [0], points [1], points [2], points [3], col1); line(bmp, points [0], points [1], points [4], points [5], col1); line(bmp, points [2], points [3], points [4], points [5], col1); } void draw_launchers(BITMAP *bmp, int x, int y, int angle, int d_f_centre, int diagonal, int interior_angle, int recoil1, int recoil2, int col1, int col2) { int i; int points [8]; int p1_x, p1_y; for (i = 0; i < 2; i ++) { if (i == 0) { p1_x = x + xpart(angle + ANGLE_QUARTER, d_f_centre); p1_y = y + ypart(angle + ANGLE_QUARTER, d_f_centre); p1_x += xpart(angle, recoil1); p1_y += ypart(angle, recoil1); } else { p1_x = x + xpart(angle - ANGLE_QUARTER, d_f_centre); p1_y = y + ypart(angle - ANGLE_QUARTER, d_f_centre); p1_x += xpart(angle, recoil2); p1_y += ypart(angle, recoil2); } points [0] = p1_x + xpart(angle + interior_angle, diagonal); points [1] = p1_y + ypart(angle + interior_angle, diagonal); points [2] = p1_x + xpart(angle - interior_angle, diagonal); points [3] = p1_y + ypart(angle - interior_angle, diagonal); points [4] = p1_x - xpart(angle + interior_angle, diagonal); points [5] = p1_y - ypart(angle + interior_angle, diagonal); points [6] = p1_x - xpart(angle - interior_angle, diagonal); points [7] = p1_y - ypart(angle - interior_angle, diagonal); polygon(bmp, 4, points, col2); points [0] = p1_x + xpart(angle + interior_angle, diagonal + 1); points [1] = p1_y + ypart(angle + interior_angle, diagonal + 1); points [2] = p1_x + xpart(angle - interior_angle, diagonal + 1); points [3] = p1_y + ypart(angle - interior_angle, diagonal + 1); points [4] = p1_x - xpart(angle + interior_angle, diagonal + 1); points [5] = p1_y - ypart(angle + interior_angle, diagonal + 1); points [6] = p1_x - xpart(angle - interior_angle, diagonal + 1); points [7] = p1_y - ypart(angle - interior_angle, diagonal + 1); /* points [0] = x + xpart(attribute + angle1 + (i * angle2), outward); points [1] = y + ypart(attribute + angle1 + (i * angle2), outward); points [2] = x + xpart(attribute + angle1 + (i * angle2), inward - 2); points [3] = y + ypart(attribute + angle1 + (i * angle2), inward - 2); points [4] = x + xpart(attribute - angle1 + (i * angle2), inward - 2); points [5] = y + ypart(attribute - angle1 + (i * angle2), inward - 2); points [6] = x + xpart(attribute - angle1 + (i * angle2), outward); points [7] = y + ypart(attribute - angle1 + (i * angle2), outward);*/ pline(bmp, points [0], points [1], points [2], points [3], col1); pline(bmp, points [2], points [3], points [4], points [5], col1); pline(bmp, points [4], points [5], points [6], points [7], col1); pline(bmp, points [0], points [1], points [6], points [7], col1); } } void draw_squarey(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2) { int i; int points [8]; for (i = 0; i < arms; i ++) { points [0] = x + xpart(attribute + angle1 + (i * angle2) - 2, outward - 1); points [1] = y + ypart(attribute + angle1 + (i * angle2) - 2, outward - 1); points [2] = x + xpart(attribute + angle1 + (i * angle2) - 2, inward - 1); points [3] = y + ypart(attribute + angle1 + (i * angle2) - 2, inward - 1); points [4] = x + xpart(attribute - angle1 + (i * angle2) + 2, inward - 1); points [5] = y + ypart(attribute - angle1 + (i * angle2) + 2, inward - 1); points [6] = x + xpart(attribute - angle1 + (i * angle2) + 2, outward - 1); points [7] = y + ypart(attribute - angle1 + (i * angle2) + 2, outward - 1); polygon(bmp, 4, points, col2); points [0] = x + xpart(attribute + angle1 + (i * angle2), outward); points [1] = y + ypart(attribute + angle1 + (i * angle2), outward); points [2] = x + xpart(attribute + angle1 + (i * angle2), inward - 2); points [3] = y + ypart(attribute + angle1 + (i * angle2), inward - 2); points [4] = x + xpart(attribute - angle1 + (i * angle2), inward - 2); points [5] = y + ypart(attribute - angle1 + (i * angle2), inward - 2); points [6] = x + xpart(attribute - angle1 + (i * angle2), outward); points [7] = y + ypart(attribute - angle1 + (i * angle2), outward); pline(bmp, points [0], points [1], points [2], points [3], col1); pline(bmp, points [2], points [3], points [4], points [5], col1); pline(bmp, points [4], points [5], points [6], points [7], col1); pline(bmp, points [0], points [1], points [6], points [7], col1); } } void draw_orbiter(BITMAP *bmp, int x, int y, int attribute, int out1, int out2, int out3, int angle1, int angle2, int arms, int col1, int col2) { int i; int points [8]; for (i = 0; i < arms; i ++) { points [0] = x + xpart(attribute + (i * angle2) - 2, out1 + 1); points [1] = y + ypart(attribute + (i * angle2) - 2, out1 + 1); points [2] = x + xpart(attribute + angle1 + (i * angle2) - 10, out2 - 0); points [3] = y + ypart(attribute + angle1 + (i * angle2) - 10, out2 - 0); points [4] = x + xpart(attribute + (i * angle2) - 2, out3 - 1); points [5] = y + ypart(attribute + (i * angle2) - 2, out3 - 1); points [6] = x + xpart(attribute - angle1 + (i * angle2) + 10, out2 - 0); points [7] = y + ypart(attribute - angle1 + (i * angle2) + 10, out2 - 0); polygon(bmp, 4, points, col2); points [0] = x + xpart(attribute + (i * angle2), out1); points [1] = y + ypart(attribute + (i * angle2), out1); points [2] = x + xpart(attribute + angle1 + (i * angle2), out2); points [3] = y + ypart(attribute + angle1 + (i * angle2), out2); points [4] = x + xpart(attribute + (i * angle2), out3); points [5] = y + ypart(attribute + (i * angle2), out3); points [6] = x + xpart(attribute - angle1 + (i * angle2), out2); points [7] = y + ypart(attribute - angle1 + (i * angle2), out2); pline(bmp, points [0], points [1], points [2], points [3], col1); pline(bmp, points [2], points [3], points [4], points [5], col1); pline(bmp, points [4], points [5], points [6], points [7], col1); pline(bmp, points [0], points [1], points [6], points [7], col1); } } void draw_puffer(BITMAP *bmp, int x, int y, int angle, int number, int distance, int size, int incol, int outcol) { int i, x1, y1, apart = 128 / number; for (i = 0; i < number; i ++) { x1 = x + xpart(((angle + i * apart) * 8) % 1024, distance); y1 = y + ypart(((angle + i * apart) * 8) % 1024, distance); circlefill(bmp, x1, y1, size, incol); circle(bmp, x1, y1, size, outcol); } } void draw_spinner(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2) { int i, x1, x2, x3, y1, y2, y3; for (i = 0; i < arms; i ++) { x1 = x + xpart(attribute + angle1 + (i * angle2) - 8, outward - 1); y1 = y + ypart(attribute + angle1 + (i * angle2) - 8, outward - 1); x2 = x + xpart(attribute - angle1 + (i * angle2) + 8, outward - 1); y2 = y + ypart(attribute - angle1 + (i * angle2) + 8, outward - 1); x3 = x - xpart(attribute + (i * angle2), inward - 3); y3 = y - ypart(attribute + (i * angle2), inward - 3); triangle(bmp, x1, y1, x2, y2, x3, y3, col2); x1 = x + xpart(attribute + angle1 + (i * angle2), outward); y1 = y + ypart(attribute + angle1 + (i * angle2), outward); x2 = x + xpart(attribute - angle1 + (i * angle2), outward); y2 = y + ypart(attribute - angle1 + (i * angle2), outward); x3 = x - xpart(attribute + (i * angle2), inward); y3 = y - ypart(attribute + (i * angle2), inward); pline(bmp, x1, y1, x2, y2, col1); pline(bmp, x1, y1, x3, y3, col1); pline(bmp, x2, y2, x3, y3, col1); } } void draw_overspinner(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2) { int i, x1, x2, x3, y1, y2, y3; for (i = 0; i < arms; i ++) { x1 = x + xpart(attribute + angle1 + (i * angle2) - 1, outward - 0); y1 = y + ypart(attribute + angle1 + (i * angle2) - 1, outward - 0); x2 = x + xpart(attribute - angle1 + (i * angle2) + 1, outward - 0); y2 = y + ypart(attribute - angle1 + (i * angle2) + 1, outward - 0); x3 = x - xpart(attribute + (i * angle2), inward - 1); y3 = y - ypart(attribute + (i * angle2), inward - 1); triangle(bmp, x1, y1, x2, y2, x3, y3, col2); x1 = x + xpart(attribute + angle1 + (i * angle2), outward + 1); y1 = y + ypart(attribute + angle1 + (i * angle2), outward + 1); x2 = x + xpart(attribute - angle1 + (i * angle2), outward + 1); y2 = y + ypart(attribute - angle1 + (i * angle2), outward + 1); x3 = x - xpart(attribute + (i * angle2), inward); y3 = y - ypart(attribute + (i * angle2), inward); pline(bmp, x1, y1, x2, y2, col1); pline(bmp, x1, y1, x3, y3, col1); pline(bmp, x2, y2, x3, y3, col1); } } void draw_waver(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2, RLE_SPRITE *waver_rle, int waver_rle_size) { int i, x1, x2, x3, y1, y2, y3; for (i = 0; i < arms; i ++) { x1 = x + xpart(attribute + (i * angle2), outward - 1 + waver_rle_size / 2 + 6) - waver_rle_size; y1 = y + ypart(attribute + (i * angle2), outward - 1 + waver_rle_size / 2 + 6) - waver_rle_size; draw_rle_sprite(bmp, waver_rle, x1, y1); x1 = x + xpart(attribute + angle1 + (i * angle2) - 4, outward - 1); y1 = y + ypart(attribute + angle1 + (i * angle2) - 4, outward - 1); x2 = x + xpart(attribute - angle1 + (i * angle2) + 4, outward - 1); y2 = y + ypart(attribute - angle1 + (i * angle2) + 4, outward - 1); x3 = x - xpart(attribute + (i * angle2), inward - 3); y3 = y - ypart(attribute + (i * angle2), inward - 3); triangle(bmp, x1, y1, x2, y2, x3, y3, col2); x1 = x + xpart(attribute + angle1 + (i * angle2), outward - 2); y1 = y + ypart(attribute + angle1 + (i * angle2), outward - 2); x2 = x + xpart(attribute - angle1 + (i * angle2), outward - 2); y2 = y + ypart(attribute - angle1 + (i * angle2), outward - 2); x3 = x - xpart(attribute + (i * angle2), inward); y3 = y - ypart(attribute + (i * angle2), inward); // pline(bmp, x1, y1, x2, y2, col1); pline(bmp, x1, y1, x3, y3, col1); pline(bmp, x2, y2, x3, y3, col1); } } void draw_spikey(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2, int in_correction, int out_correction) { int i, x1, x2, x3, y1, y2, y3; for (i = 0; i < arms; i ++) { /* bordered_triangle(bmp, x - xpart(attribute + angle1 + (i * angle2), inward), y - ypart(attribute + angle1 + (i * angle2), inward), x - xpart(attribute - angle1 + (i * angle2), inward), y - ypart(attribute - angle1 + (i * angle2), inward), x + xpart(attribute + (i * angle2), outward), y + ypart(attribute + (i * angle2), outward), col2, col1);*/ x1 = x - xpart(attribute + angle1 + (i * angle2), inward + in_correction); y1 = y - ypart(attribute + angle1 + (i * angle2), inward + in_correction); x2 = x - xpart(attribute - angle1 + (i * angle2), inward + in_correction); y2 = y - ypart(attribute - angle1 + (i * angle2), inward + in_correction); x3 = x + xpart(attribute + (i * angle2), outward + out_correction); y3 = y + ypart(attribute + (i * angle2), outward + out_correction); triangle(bmp, x1, y1, x2, y2, x3, y3, col2); x1 = x - xpart(attribute + angle1 + (i * angle2), inward); y1 = y - ypart(attribute + angle1 + (i * angle2), inward); x2 = x - xpart(attribute - angle1 + (i * angle2), inward); y2 = y - ypart(attribute - angle1 + (i * angle2), inward); x3 = x + xpart(attribute + (i * angle2), outward); y3 = y + ypart(attribute + (i * angle2), outward); pline(bmp, x1, y1, x2, y2, col1); pline(bmp, x1, y1, x3, y3, col1); pline(bmp, x2, y2, x3, y3, col1); } } void draw_blatter(BITMAP *bmp, int x, int y, int number, int distance, int rotation, int size, int col1, int col2) { int i, xp, yp; int angle_difference = ANGLE_FULL / number; for (i = 0; i < number; i ++) { xp = x + xpart(rotation + angle_difference * i, distance); yp = y + ypart(rotation + angle_difference * i, distance); circlefill(bmp, xp, yp, size, col2); circle(bmp, xp, yp, size, col1); } } int get_circler_colour(int x1) { switch(x1) { case 0: return TRANS_YELLOW; case 1: return TRANS_ORANGE; case 2: return TRANS_LGREY; case 3: return TRANS_DGREY; } return TRANS_PURPLE; } void draw_clouds(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y) { int i, x, y, x2 = 0, y2 = 0; for (i = 0; i < NO_CLOUDS; i ++) { if (cloud[i].type == CLOUD_NONE) continue; if (cloud[i].x + 24000 < centre_x - (max_x / 2) * GRAIN || cloud[i].x - 24000 > centre_x + (max_x / 2) * GRAIN || cloud[i].y + 24000 < centre_y - (max_y / 2) * GRAIN || cloud[i].y - 24000 > centre_y + (max_y / 2) * GRAIN) continue; x = (cloud[i].x / GRAIN) - (centre_x / GRAIN); y = (cloud[i].y / GRAIN) - (centre_y / GRAIN); x2 = (cloud[i].x2 / GRAIN) - (centre_x / GRAIN); y2 = (cloud[i].y2 / GRAIN) - (centre_y / GRAIN); draw_a_cloud(bmp, i, x + (max_x / 2), y + (max_y / 2), x2 + (max_x / 2), y2 + (max_y / 2)); } } void draw_a_cloud(BITMAP *bmp, int dr, int x, int y, int x2, int y2) { int xa, ya, xb, yb, xd, yd, cs, c2, points [8]; #ifdef DEBUG_DISPLAY if (debug_info == 1) textprintf_ex(bmp, small_font, x, y, COLOUR_BLUE8, COLOUR_BLACK, "ty%i to%i ", cloud[dr].type, cloud[dr].timeout); #endif switch(cloud[dr].type) { case CLOUD_SHATTER1: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); for (cs = 0; cs < 8 ; cs ++) { c2 = (cloud[dr].timeout * 12) + cs * ANGLE_FULL / 8; if (dr % 2 == 0) c2 = ANGLE_FULL - ((cloud[dr].timeout * 12) + cs * ANGLE_FULL / 8); /* switch(cs) { default: case 0: xa = TRANS_LBLUE; break; case 1: xa = TRANS_DBLUE; break; case 2: xa = TRANS_DRED; break; case 3: xa = TRANS_LRED; break; case 4: xa = TRANS_ORANGE; break; case 5: xa = TRANS_PURPLE; break; }*/ xa = TRANS_DRED; if (cs % 2 == 1) xa = TRANS_ORANGE; xb = cloud[dr].timeout; // if (xb > 12) xb = 12; if (cs % 2 == 0) xb = (xb * 13) / 10; triangle(bmp, x, y, x + xpart(c2, xb), y + ypart(c2, xb), x + xpart(c2 + ANGLE_FULL / 8, xb), y + ypart(c2 + ANGLE_FULL / 8, xb), xa); } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_SHATTER2: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); c2 = cloud[dr].angle; xa = TRANS_WHITE; xb = cloud[dr].timeout; if (xb < 12) xa = TRANS_LBLUE; // purple if (xb < 9) xa = TRANS_LBLUE; if (xb < 5) xa = TRANS_DBLUE; x2 = 34 - xb; if (x2 < 0) x2 = 0; y2 = xb * 2; // angle - starts at 128 and falls if (y2 > 64) y2 = 64; ya = 47 - xb / 3; for (cs = 0; cs < 8 ; cs ++) { triangle(bmp, x + xpart(c2 + (cs * ANGLE_1_EIGHTH), x2), y + ypart(c2 + (cs * ANGLE_1_EIGHTH), x2), x + xpart(c2 - y2 + (cs * ANGLE_1_EIGHTH), ya), y + ypart(c2 - y2 + (cs * ANGLE_1_EIGHTH), ya), x + xpart(c2 + y2 + (cs * ANGLE_1_EIGHTH), ya), y + ypart(c2 + y2 + (cs * ANGLE_1_EIGHTH), ya), xa); } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_TWISTY_CIRCLE: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); c2 = cloud[dr].timeout / 5; yd = (50 - cloud[dr].timeout) / 2; xb = cloud[dr].colour [0]; if (cloud[dr].timeout < 20) xb = cloud[dr].colour [1]; if (cloud[dr].timeout < 15) xb = cloud[dr].colour [2]; if (cloud[dr].timeout < 10) xb = cloud[dr].colour [3]; for (xa = 0; xa < 6; xa ++) { cs = (((cloud[dr].timeout % 32) * 32) + cloud[dr].angle + xa * (ANGLE_FULL / 6)) * cloud[dr].status; cs += ANGLE_FULL; cs %= ANGLE_FULL; circlefill(bmp, x + (xpart(cs, yd)), y + (ypart(cs, yd)), c2, xb); } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_TWIRLY_CIRCLE: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); c2 = cloud[dr].timeout / 5; yd = (50 - cloud[dr].timeout); xb = TRANS_YELLOW; if (cloud[dr].timeout < 20) xb = TRANS_ORANGE; if (cloud[dr].timeout < 15) xb = TRANS_LRED; if (cloud[dr].timeout < 10) xb = TRANS_DRED; for (xa = 0; xa < 6; xa ++) { cs = 50 - cloud[dr].timeout + xa * (ANGLE_FULL / 6); circlefill(bmp, x + (xpart(cs, yd)), y + (ypart(cs, yd)), c2, xb); } circlefill(bmp, x, y, cloud[dr].timeout / 4 + 1, TRANS_YELLOW); circlefill(bmp, x, y, cloud[dr].timeout / 3 + 1, TRANS_LGREEN); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_FLAK_BURST: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); switch((int) cloud[dr].timeout / 10) { default: // case 0: xa = TRANS_DGREY; break; case 1: xa = TRANS_DRED; break; case 2: xa = TRANS_LRED; break; case 3: xa = TRANS_ORANGE; break; case 4: xa = TRANS_YELLOW; break; case 5: xa = TRANS_WHITE; break; } // circlefill(bmp, x, y, 8 + cloud[dr].status * (7 - (cloud[dr].timeout / 10)), xa); circlefill(bmp, x, y, 3 + cloud[dr].status * (7 - (cloud[dr].timeout / 10)), xa); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_BLUE_BLOB: if (cloud[dr].timeout > 7) { draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_BLUE_BLOB_3 + counter % 2], (x) - 2, (y) - 2); break; } if (cloud[dr].timeout > 4) { draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_BLUE_BLOB_5], (x) - 1, (y) - 1); break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (cloud[dr].timeout > 2) putpixel(bmp, x, y, TRANS_LBLUE); else putpixel(bmp, x, y, TRANS_DBLUE); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_ORANGE_BLOB: /* if (cloud[dr].timeout > 7) { draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_ORANGE_BLOB_3], (x) - 2, (y) - 2); break; } if (cloud[dr].timeout > 4) { draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_BLUE_BLOB_5], (x) - 1, (y) - 1); break; } */ if (cloud[dr].timeout > 2) { x2 = (cloud[dr].timeout - 2) / 2; if (x2 > 2) x2 = 2; draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_ORANGE_BLOB_7 - x2], (x) - 1 - x2, (y) - 1 - x2); break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (cloud[dr].timeout > 0) putpixel(bmp, x, y, TRANS_LRED); else putpixel(bmp, x, y, TRANS_DRED); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_ORANGE_BLOB2: if (cloud[dr].timeout > 4) { x2 = (cloud[dr].timeout - 4);// / 2; if (x2 > 6) x2 = 6; draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_ORANGE_BLOB_7 - x2], (x) - 1 - x2 / 2, (y) - 1 - x2 / 2 ); break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (cloud[dr].timeout > 2) putpixel(bmp, x, y, TRANS_LRED); else putpixel(bmp, x, y, TRANS_DRED); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_BLUE_BLOB2: if (cloud[dr].timeout > 4) { draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_BLUE_BLOB_1], (x) - 3, (y) - 3); break; } if (cloud[dr].timeout > 3) { draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_BLUE_BLOB_3], (x) - 2, (y) - 2); break; } if (cloud[dr].timeout > 2) { draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_BLUE_BLOB_5], (x) - 1, (y) - 1); break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (cloud[dr].timeout > 1) putpixel(bmp, x, y, TRANS_LBLUE); else putpixel(bmp, x, y, TRANS_DBLUE); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_GREEN_BLOB: if (cloud[dr].timeout > 2) { x2 = (cloud[dr].timeout - 2) / 2; if (x2 > 2) x2 = 2; draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_GREEN_BLOB_7 - x2], (x) - 1 - x2, (y) - 1 - x2); break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (cloud[dr].timeout > 0) putpixel(bmp, x, y, TRANS_LGREEN); else putpixel(bmp, x, y, TRANS_DGREEN); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_GREEN_BLOB2: if (cloud[dr].timeout > 4) { x2 = (cloud[dr].timeout - 4);// / 2; if (x2 > 6) x2 = 6; draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_GREEN_BLOB_7 - x2], (x) - 1 - x2 / 2, (y) - 1 - x2 / 2 ); break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (cloud[dr].timeout > 2) putpixel(bmp, x, y, TRANS_LGREEN); else putpixel(bmp, x, y, TRANS_DGREEN); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; /* case CLOUD_BLUE_BLOB2: if (cloud[dr].timeout > 4) { x2 = (cloud[dr].timeout - 4);// / 2; if (x2 > 6) x2 = 6; draw_trans_rle_sprite(bmp, small3_rle [RLE_SMALL3_BLUE_BLOB_7 - x2], (x) - 1 - x2 / 2, (y) - 1 - x2 / 2 ); break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (cloud[dr].timeout > 2) putpixel(bmp, x, y, TRANS_LBLUE); else putpixel(bmp, x, y, TRANS_DBLUE); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break;*/ case CLOUD_BANG: xa = cloud[dr].timeout / 10; if (xa > 50) xa = 50; draw_trans_sprite(bmp, redbang_bmp [xa], x - xa, y - xa); break; case CLOUD_TRAIL1: circlefill(bmp, x, y, cloud[dr].timeout / 20 + 1, COLOUR_RED8); break; case CLOUD_FADING_LINE: if ((cloud[dr].timeout / 2) > 3) xa = cloud[dr].colour [3]; else { if (cloud[dr].timeout == 1) xa = cloud[dr].colour [0]; else xa = cloud[dr].colour [(cloud[dr].timeout) / 2 - 1]; } // if (cloud[dr].timeout > 4) // xa = cloud[dr].colour [0]; // else // xa = cloud[dr].colour [4 - cloud[dr].timeout]; pline(bmp, x, y, x2, y2, xa); break; case CLOUD_TRANS_FADING_LINE: if ((cloud[dr].timeout / 2) > 3) xa = cloud[dr].colour [3]; else { if (cloud[dr].timeout == 1) xa = cloud[dr].colour [0]; else xa = cloud[dr].colour [(cloud[dr].timeout) / 2 - 1]; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); pline(bmp, x, y, x2, y2, xa); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_SHRINKING_FADING_CIRCLE: cs = cloud[dr].timeout / 100; if (cloud[dr].tickrate < 0) { xa = cloud[dr].colour [0]; } else { xa = cloud[dr].colour [3]; if (cs > 10) xa = cloud[dr].colour [2]; if (cs > 20) xa = cloud[dr].colour [1]; if (cs > 35) xa = cloud[dr].colour [0]; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circle(bmp, x, y, cs, xa); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_SHRINKING_CIRCLE: cs = cloud[dr].timeout / 100; if (cs > 7) cs = 7; xa = cloud[dr].colour [0] - 7 + cs; circle(bmp, x, y, cloud[dr].timeout / 100, xa); break; case CLOUD_SMALL_SHRINKING_CIRCLE: cs = cloud[dr].timeout / 100; if (cs > 3) cs = 3; xa = cloud[dr].colour [0] - 6 + cs * 2; circle(bmp, x, y, cloud[dr].timeout / 100, xa); break; case CLOUD_SHRINKING_LINE: // colour [0] must be transparent, [1] non-transparent cs = cloud[dr].colour [0]; if (cloud[dr].timeout < 140) { cs = cloud[dr].colour [1]; cs -= 6; cs += cloud[dr].timeout / 20; } else drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); xa = x + xpart(cloud[dr].angle, cloud[dr].timeout / 10); ya = y + ypart(cloud[dr].angle, cloud[dr].timeout / 10); // drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); pline(bmp, x, y, xa, ya, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_LINE_SHADOW: cs = cloud[dr].angle + ANGLE_QUARTER; c2 = cloud[dr].timeout / 10; xa = x + xpart(cs, c2); ya = y + ypart(cs, c2); xb = x - xpart(cs, c2); yb = y - ypart(cs, c2); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); pline(bmp, xa, ya, xb, yb, cloud[dr].colour [0]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_SHIELD_LINE: cs = cloud[dr].angle - ANGLE_QUARTER; c2 = cloud[dr].timeout / 3; xa = x + xpart(cs, c2); ya = y + ypart(cs, c2); xb = x - xpart(cs, c2); yb = y - ypart(cs, c2); xd = cloud[dr].timeout / 20; if (xd > 4) xd = 4; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); pline(bmp, xa, ya, xb, yb, cloud[dr].colour [xd]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); /* case CLOUD_SHIELD_LINE: cs = ANGLE_FULL - ((cloud[dr].angle - ANGLE_HALF) % ANGLE_FULL); c2 = cloud[dr].timeout / 3; // xa = x + xpart(cs, c2); // ya = y + ypart(cs, c2); // xb = x - xpart(cs, c2); // yb = y - ypart(cs, c2); xd = cloud[dr].timeout / 20; if (xd > 4) xd = 4; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); arc(bmp, x, y, itofix(cs / 4 - c2), itofix(cs / 4 + c2), cloud[dr].status / GRAIN, cloud[dr].colour [xd]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); */ break; case CLOUD_SQUAREY: points [0] = x + xpart(cloud[dr].angle + ANGLE_1_SIXTEENTH - 2, 40 - 1); points [1] = y + ypart(cloud[dr].angle + ANGLE_1_SIXTEENTH - 2, 40 - 1); points [2] = x + xpart(cloud[dr].angle + ANGLE_1_SIXTEENTH - 2, 22 - 1); points [3] = y + ypart(cloud[dr].angle + ANGLE_1_SIXTEENTH - 2, 22 - 1); points [4] = x + xpart(cloud[dr].angle - ANGLE_1_SIXTEENTH + 2, 22 - 1); points [5] = y + ypart(cloud[dr].angle - ANGLE_1_SIXTEENTH + 2, 22 - 1); points [6] = x + xpart(cloud[dr].angle - ANGLE_1_SIXTEENTH + 2, 40 - 1); points [7] = y + ypart(cloud[dr].angle - ANGLE_1_SIXTEENTH + 2, 40 - 1); polygon(bmp, 4, points, GC_BLUE5); points [0] = x + xpart(cloud[dr].angle + ANGLE_1_SIXTEENTH, 40); points [1] = y + ypart(cloud[dr].angle + ANGLE_1_SIXTEENTH, 40); points [2] = x + xpart(cloud[dr].angle + ANGLE_1_SIXTEENTH, 22 - 2); points [3] = y + ypart(cloud[dr].angle + ANGLE_1_SIXTEENTH, 22 - 2); points [4] = x + xpart(cloud[dr].angle - ANGLE_1_SIXTEENTH, 22 - 2); points [5] = y + ypart(cloud[dr].angle - ANGLE_1_SIXTEENTH, 22 - 2); points [6] = x + xpart(cloud[dr].angle - ANGLE_1_SIXTEENTH, 40); points [7] = y + ypart(cloud[dr].angle - ANGLE_1_SIXTEENTH, 40); /* points [0] = x + xpart(ANGLE_1_SIXTEENTH + cloud[dr].angle - 2, 40 - 1); points [1] = y + ypart(ANGLE_1_SIXTEENTH + cloud[dr].angle - 2, 40 - 1); points [2] = x + xpart(ANGLE_1_SIXTEENTH + cloud[dr].angle - 2, 22 - 1); points [3] = y + ypart(ANGLE_1_SIXTEENTH + cloud[dr].angle - 2, 22 - 1); points [4] = x + xpart(ANGLE_1_SIXTEENTH - cloud[dr].angle + 2, 22 - 1); points [5] = y + ypart(ANGLE_1_SIXTEENTH - cloud[dr].angle + 2, 22 - 1); points [6] = x + xpart(ANGLE_1_SIXTEENTH - cloud[dr].angle + 2, 40 - 1); points [7] = y + ypart(ANGLE_1_SIXTEENTH - cloud[dr].angle + 2, 40 - 1); polygon(bmp, 4, points, GC_BLUE5); points [0] = x + xpart(ANGLE_1_SIXTEENTH + cloud[dr].angle, 40); points [1] = y + ypart(ANGLE_1_SIXTEENTH + cloud[dr].angle, 40); points [2] = x + xpart(ANGLE_1_SIXTEENTH + cloud[dr].angle, 22 - 2); points [3] = y + ypart(ANGLE_1_SIXTEENTH + cloud[dr].angle, 22 - 2); points [4] = x + xpart(ANGLE_1_SIXTEENTH - cloud[dr].angle, 22 - 2); points [5] = y + ypart(ANGLE_1_SIXTEENTH - cloud[dr].angle, 22 - 2); points [6] = x + xpart(ANGLE_1_SIXTEENTH - cloud[dr].angle, 40); points [7] = y + ypart(ANGLE_1_SIXTEENTH - cloud[dr].angle, 40); */ pline(bmp, points [0], points [1], points [2], points [3], GC_BLUE1); pline(bmp, points [2], points [3], points [4], points [5], GC_BLUE1); pline(bmp, points [4], points [5], points [6], points [7], GC_BLUE1); pline(bmp, points [0], points [1], points [6], points [7], GC_BLUE1); break; case CLOUD_BLOCK1: cs = cloud[dr].colour [0]; if (cloud[dr].timeout <= 7) cs = cloud[dr].colour [1]; if (cloud[dr].timeout <= 5) cs = cloud[dr].colour [2]; if (cloud[dr].timeout <= 2) cs = cloud[dr].colour [3]; points [0] = x + xpart(cloud[dr].angle + ANGLE_QUARTER, cloud[dr].timeout); points [1] = y + ypart(cloud[dr].angle + ANGLE_QUARTER, cloud[dr].timeout); points [2] = x + xpart(cloud[dr].angle - ANGLE_QUARTER, cloud[dr].timeout); points [3] = y + ypart(cloud[dr].angle - ANGLE_QUARTER, cloud[dr].timeout); points [4] = x2 + xpart(cloud[dr].angle - ANGLE_QUARTER, cloud[dr].timeout); points [5] = y2 + ypart(cloud[dr].angle - ANGLE_QUARTER, cloud[dr].timeout); points [6] = x2 + xpart(cloud[dr].angle + ANGLE_QUARTER, cloud[dr].timeout); points [7] = y2 + ypart(cloud[dr].angle + ANGLE_QUARTER, cloud[dr].timeout); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); polygon(bmp, 4, points, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_BLOCK2: cs = cloud[dr].colour [0]; if (cloud[dr].timeout <= 60) cs = cloud[dr].colour [1]; if (cloud[dr].timeout <= 40) cs = cloud[dr].colour [2]; if (cloud[dr].timeout <= 20) cs = cloud[dr].colour [3]; int points2 [8]; c2 = (cloud[dr].timeout * 5) % ANGLE_FULL; if (cloud[dr].status == 1) c2 = ANGLE_FULL - c2; xd = cloud[dr].timeout / 3; points2 [0] = x + xpart(c2, xd); points2 [1] = y + ypart(c2, xd); points2 [2] = x + xpart(c2 + ANGLE_QUARTER, xd); points2 [3] = y + ypart(c2 + ANGLE_QUARTER, xd); points2 [4] = x + xpart(c2 + ANGLE_HALF, xd); points2 [5] = y + ypart(c2 + ANGLE_HALF, xd); points2 [6] = x + xpart(c2 - ANGLE_QUARTER, xd); points2 [7] = y + ypart(c2 - ANGLE_QUARTER, xd); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); polygon(bmp, 4, points2, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_BLOCK3: cs = cloud[dr].colour [0]; if (cloud[dr].timeout <= 60) cs = cloud[dr].colour [1]; if (cloud[dr].timeout <= 40) cs = cloud[dr].colour [2]; if (cloud[dr].timeout <= 20) cs = cloud[dr].colour [3]; int points3 [8]; c2 = (cloud[dr].timeout + cloud[dr].angle) % ANGLE_FULL; if (cloud[dr].status == 1) c2 = ANGLE_FULL - c2; // c2 = ANGLE_FULL - cloud[dr].angle; xd = cloud[dr].timeout / 3; yd = (100 - cloud[dr].timeout) / 2; if (yd < 3) yd = 3; points3 [0] = x + xpart(c2, xd); points3 [1] = y + ypart(c2, xd); points3 [2] = x + xpart(c2 + ANGLE_QUARTER, xd); points3 [3] = y + ypart(c2 + ANGLE_QUARTER, xd); points3 [4] = x + xpart(c2 + ANGLE_HALF, xd); points3 [5] = y + ypart(c2 + ANGLE_HALF, xd); points3 [6] = x + xpart(c2 - ANGLE_QUARTER, xd); points3 [7] = y + ypart(c2 - ANGLE_QUARTER, xd); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); polygon(bmp, 4, points3, cs); xd /= 2; c2 += ANGLE_1_EIGHTH; points3 [0] = x + xpart(c2, xd); points3 [1] = y + ypart(c2, xd); points3 [2] = x + xpart(c2 + ANGLE_QUARTER, yd); points3 [3] = y + ypart(c2 + ANGLE_QUARTER, yd); points3 [4] = x + xpart(c2 + ANGLE_HALF, xd); points3 [5] = y + ypart(c2 + ANGLE_HALF, xd); points3 [6] = x + xpart(c2 - ANGLE_QUARTER, yd); points3 [7] = y + ypart(c2 - ANGLE_QUARTER, yd); polygon(bmp, 4, points3, cs); points3 [0] = x + xpart(c2, yd); points3 [1] = y + ypart(c2, yd); points3 [2] = x + xpart(c2 + ANGLE_QUARTER, xd); points3 [3] = y + ypart(c2 + ANGLE_QUARTER, xd); points3 [4] = x + xpart(c2 + ANGLE_HALF, yd); points3 [5] = y + ypart(c2 + ANGLE_HALF, yd); points3 [6] = x + xpart(c2 - ANGLE_QUARTER, xd); points3 [7] = y + ypart(c2 - ANGLE_QUARTER, xd); polygon(bmp, 4, points3, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); /* cs = cloud[dr].colour [0]; if (cloud[dr].timeout <= 60) cs = cloud[dr].colour [1]; if (cloud[dr].timeout <= 40) cs = cloud[dr].colour [2]; if (cloud[dr].timeout <= 20) cs = cloud[dr].colour [3]; int points2 [8]; c2 = (cloud[dr].timeout * 5) % ANGLE_FULL; if (cloud[dr].status == 1) c2 = ANGLE_FULL - c2; xd = cloud[dr].timeout / 3; yd = 100 - cloud[dr].timeout; if (yd < 3) yd = 3; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); rectfill(bmp, x - xd, y - xd, x + xd, y + xd, cs); rectfill(bmp, x - xd / 4, y - yd * 2, x + xd / 4, y + yd * 2, cs); rectfill(bmp, x - yd * 2, y - xd / 4, x + yd * 2, y + xd / 4, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0);*/ break; case CLOUD_BLOCK4: cs = cloud[dr].colour [0]; if (cloud[dr].timeout <= 7) cs = cloud[dr].colour [1]; if (cloud[dr].timeout <= 5) cs = cloud[dr].colour [2]; if (cloud[dr].timeout <= 3) cs = cloud[dr].colour [3]; int points4 [8]; xd = cloud[dr].timeout / 2; points4 [0] = x + xpart(cloud[dr].angle + ANGLE_QUARTER, xd); points4 [1] = y + ypart(cloud[dr].angle + ANGLE_QUARTER, xd); points4 [2] = x + xpart(cloud[dr].angle - ANGLE_QUARTER, xd); points4 [3] = y + ypart(cloud[dr].angle - ANGLE_QUARTER, xd); points4 [4] = x2 + xpart(cloud[dr].angle - ANGLE_QUARTER, xd); points4 [5] = y2 + ypart(cloud[dr].angle - ANGLE_QUARTER, xd); points4 [6] = x2 + xpart(cloud[dr].angle + ANGLE_QUARTER, xd); points4 [7] = y2 + ypart(cloud[dr].angle + ANGLE_QUARTER, xd); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); polygon(bmp, 4, points4, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_BLOCK5: cs = cloud[dr].colour [0]; if (cloud[dr].timeout <= 70) cs = cloud[dr].colour [1]; if (cloud[dr].timeout <= 50) cs = cloud[dr].colour [2]; if (cloud[dr].timeout <= 30) cs = cloud[dr].colour [3]; int points5 [8]; xd = cloud[dr].status; points5 [0] = x + xpart(cloud[dr].angle + ANGLE_QUARTER, xd); points5 [1] = y + ypart(cloud[dr].angle + ANGLE_QUARTER, xd); points5 [2] = x + xpart(cloud[dr].angle - ANGLE_QUARTER, xd); points5 [3] = y + ypart(cloud[dr].angle - ANGLE_QUARTER, xd); points5 [4] = x2 + xpart(cloud[dr].angle - ANGLE_QUARTER, xd); points5 [5] = y2 + ypart(cloud[dr].angle - ANGLE_QUARTER, xd); points5 [6] = x2 + xpart(cloud[dr].angle + ANGLE_QUARTER, xd); points5 [7] = y2 + ypart(cloud[dr].angle + ANGLE_QUARTER, xd); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); polygon(bmp, 4, points5, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_THICK_SHOCK_CIRCLE: cs = cloud[dr].colour [0]; if (cloud[dr].timeout <= 7) cs = cloud[dr].colour [1]; if (cloud[dr].timeout <= 5) cs = cloud[dr].colour [2]; if (cloud[dr].timeout <= 3) cs = cloud[dr].colour [3]; xd = cloud[dr].timeout;// / 2; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, xd, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_SPECK: xa = cloud[dr].colour [0]; if (cloud[dr].timeout < 14) xa = cloud[dr].colour [1]; if (cloud[dr].timeout < 11) xa = cloud[dr].colour[2]; if (cloud[dr].timeout < 8) xa = cloud[dr].colour[3]; if (cloud[dr].timeout < 4) xa = cloud[dr].colour[4]; putpixel(bmp, x, y, xa); break; case CLOUD_FLECK: cs = cloud[dr].colour [0]; if (cloud[dr].timeout < 8) cs = cloud[dr].colour [1]; if (cloud[dr].timeout < 6) cs = cloud[dr].colour[2]; if (cloud[dr].timeout < 4) cs = cloud[dr].colour[3]; if (cloud[dr].timeout < 2) cs = cloud[dr].colour[4]; xb = x - xpart(cloud[dr].angle, cloud[dr].timeout); yb = y - ypart(cloud[dr].angle, cloud[dr].timeout); pline(bmp, x, y, xb, yb, cs); // circlefill(bmp, x, y, 4, cs); break; case CLOUD_SMALL_FADING_CIRCLE: cs = cloud[dr].colour [0]; if (cloud[dr].timeout <= 30) cs -= (30 - cloud[dr].timeout) / 5; // cs -= 2; // else // if (cloud[dr].timeout <= 20) // cs -= 4; // else // if (cloud[dr].timeout <= 10) // cs -= 6; // cs += (cloud[dr].timeout * 8) / cloud[dr].status - 8; circlefill(bmp, x, y, cloud[dr].timeout / 10, cs); break; case CLOUD_LARGE_FADING_CIRCLE: cs = cloud[dr].colour [0]; if (cloud[dr].timeout < 300) cs -= (300 - cloud[dr].timeout) / 50; // cs -= 2; // else // if (cloud[dr].timeout <= 200) // cs -= 4; // else // if (cloud[dr].timeout <= 100) // cs -= 6; // cs += (cloud[dr].timeout * 8) / cloud[dr].status - 8; circlefill(bmp, x, y, cloud[dr].timeout / 10, cs); break; case CLOUD_FLAME_CIRCLE: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, cloud[dr].timeout / 20, cloud[dr].colour [0]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_BIG_BLAST_CIRCLE: // drags cs = cloud[dr].colour [0]; if (cloud[dr].timeout <= 60) cs = cloud[dr].colour [1]; if (cloud[dr].timeout <= 45) cs = cloud[dr].colour [2]; if (cloud[dr].timeout <= 30) cs = cloud[dr].colour [3]; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, cloud[dr].timeout / 10, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_LARGE_TRANS_FADING_CIRCLE: cs = cloud[dr].colour [0]; if (cloud[dr].timeout <= 50) cs = cloud[dr].colour [1]; if (cloud[dr].timeout <= 35) cs = cloud[dr].colour [2]; if (cloud[dr].timeout <= 20) cs = cloud[dr].colour [3]; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, cloud[dr].timeout / 10, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_DRIVE_CIRCLE: // identical except for drag case CLOUD_TRANS_FADING_CIRCLE: cs = cloud[dr].colour [0]; if (cloud[dr].timeout <= 22) cs = cloud[dr].colour [1]; if (cloud[dr].timeout <= 19) cs = cloud[dr].colour [2]; if (cloud[dr].timeout <= 14) cs = cloud[dr].colour [3]; // cs -= 2; // else // if (cloud[dr].timeout <= 20) // cs -= 4; // else // if (cloud[dr].timeout <= 10) // cs -= 6; // cs += (cloud[dr].timeout * 8) / cloud[dr].status - 8; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, cloud[dr].timeout / 10, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_SEEKER_CIRCLE: // just like below but drags case CLOUD_MED_TRANS_FADING_CIRCLE: cs = cloud[dr].colour [0]; if (cloud[dr].timeout <= 32) cs = cloud[dr].colour [1]; if (cloud[dr].timeout <= 25) cs = cloud[dr].colour [2]; if (cloud[dr].timeout <= 16) cs = cloud[dr].colour [3]; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, cloud[dr].timeout / 10, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_BLAST_CIRCLE: cs = cloud[dr].colour [0]; if (cloud[dr].timeout <= 25) cs = cloud[dr].colour [1]; // else // { if (cloud[dr].timeout <= 15) cs = cloud[dr].colour [2]; // else // { if (cloud[dr].timeout <= 9) cs = cloud[dr].colour [3]; // } // } // cs += (cloud[dr].timeout * 8) / cloud[dr].status - 8; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, cloud[dr].timeout / 10, cs); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_SMALL_TRANS_CIRCLE: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, cloud[dr].timeout / 100, cloud[dr].colour [0]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_SMALL_CIRCLE: circlefill(bmp, x, y, cloud[dr].timeout / 100, cloud[dr].colour [0]); break; case CLOUD_MED_TRANS_CIRCLE: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, cloud[dr].timeout / 70, cloud[dr].colour [0]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_DISTORT: clear_bitmap(distortion_mask); circlefill(distortion_mask, cloud[dr].timeout / 70, cloud[dr].timeout / 70, 9, 1); distortion(bmp, x, y, 19, 19, grand(31) - 15, grand(31) - 15); break; case CLOUD_MED_CIRCLE: circlefill(bmp, x, y, cloud[dr].timeout / 70, cloud[dr].colour [0]); break; case CLOUD_LARGE_TRANS_CIRCLE: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, cloud[dr].timeout / 40, cloud[dr].colour [0]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_LARGE_CIRCLE: circlefill(bmp, x, y, cloud[dr].timeout / 40, cloud[dr].colour [0]); break; case CLOUD_SHOCKWAVE: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); // if (cloud[dr].timeout > 80) // circle(bmp, x, y, (cloud[dr].status - cloud[dr].timeout) / 10, cloud[dr].colour [4]); if (cloud[dr].timeout > 90) circle(bmp, x, y, (cloud[dr].status - cloud[dr].timeout) / 10 + 4, cloud[dr].colour [3]); if (cloud[dr].timeout > 60) circle(bmp, x, y, (cloud[dr].status - cloud[dr].timeout) / 10 + 3, cloud[dr].colour [2]); if (cloud[dr].timeout > 30) circle(bmp, x, y, (cloud[dr].status - cloud[dr].timeout) / 10 + 2, cloud[dr].colour [1]); circle(bmp, x, y, (cloud[dr].status - cloud[dr].timeout) / 10 + 1, cloud[dr].colour [0]); // text_mode(COLOUR_RED8); // textprintf_ex(bmp, small_font, x, y, COLOUR_BLUE8, COLOUR_BLACK, "s %i t% i ", cloud[dr].status, cloud[dr].timeout); // text_mode(-1); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_GROWING_CIRCLE: cs = cloud[dr].colour [0]; c2 = (cloud[dr].timeout - cloud[dr].status) / 10; if (c2 < -5) c2 = -5; cs += c2; circle(bmp, x, y, (cloud[dr].status - cloud[dr].timeout) / 10 + 4, cs); break; case CLOUD_PULSER1_V: if (cloud[dr].status == 1) draw_sprite(bmp, enemy_bmps [BMP_ENEMY_PULSER1_V], x, y); else draw_sprite_v_flip(bmp, enemy_bmps [BMP_ENEMY_PULSER1_V], x, y); break; case CLOUD_PULSER1_H: if (cloud[dr].status == 0) draw_sprite(bmp, enemy_bmps [BMP_ENEMY_PULSER1_H], x, y); else draw_sprite_h_flip(bmp, enemy_bmps [BMP_ENEMY_PULSER1_H], x, y); break; case CLOUD_PULSER2_V: if (cloud[dr].status == 1) draw_sprite(bmp, enemy_bmps [BMP_ENEMY_PULSER2_V], x, y); else draw_sprite_v_flip(bmp, enemy_bmps [BMP_ENEMY_PULSER2_V], x, y); break; case CLOUD_PULSER2_H: if (cloud[dr].status == 0) draw_sprite(bmp, enemy_bmps [BMP_ENEMY_PULSER2_H], x, y); else draw_sprite_h_flip(bmp, enemy_bmps [BMP_ENEMY_PULSER2_H], x, y); break; /* case CLOUD_TRI1: draw_rle_sprite(bmp, enemy9_rle [RLE_ENEMY9_TRIANGLER1], x - 36, y - 36); break; case CLOUD_TRI2: draw_rle_sprite(bmp, enemy9_rle [RLE_ENEMY9_TRIANGLER2], x - 35, y - 35); break; case CLOUD_TRI3: draw_rle_sprite(bmp, enemy9_rle [RLE_ENEMY9_TRIANGLER3], x - 35, y - 35); break;*/ } } void draw_lights(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y) { int i, x, y; for (i = 0; i < NO_LIGHTS; i ++) { if (light[i].type == LIGHT_NONE) break; if (light[i].x + light[i].size * GRAIN < centre_x - (max_x / 2) * GRAIN || light[i].x - light[i].size * GRAIN > centre_x + (max_x / 2) * GRAIN || light[i].y + light[i].size * GRAIN < centre_y - (max_y / 2) * GRAIN || light[i].y - light[i].size * GRAIN > centre_y + (max_y / 2) * GRAIN) continue; x = (light[i].x / GRAIN) - (centre_x / GRAIN); y = (light[i].y / GRAIN) - (centre_y / GRAIN); draw_a_light(bmp, light[i].size, x + (max_x / 2), y + (max_y / 2)); } } void draw_effects(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y) { int i, x, y, x1 = 0, y1 = 0, x2 = 0, y2 = 0; for (i = 0; i < MAX_EFFECTS; i ++) { if (effect[i].type == EFFECT_NONE) continue; if (effect[i].x1 > effect[i].x2) { x1 = effect[i].x2; x2 = effect[i].x1; } else { x1 = effect[i].x1; x2 = effect[i].x2; } if (effect[i].y1 > effect[i].y2) { y1 = effect[i].y2; y2 = effect[i].y1; } else { y1 = effect[i].y1; y2 = effect[i].y2; } if (x2 < centre_x - (max_x / 2) * GRAIN || x1 > centre_x + (max_x / 2) * GRAIN || y2 < centre_y - (max_y / 2) * GRAIN || y1 > centre_y + (max_y / 2) * GRAIN) continue; x = (effect[i].x / GRAIN) - (centre_x / GRAIN); y = (effect[i].y / GRAIN) - (centre_y / GRAIN); draw_an_effect(bmp, i, x + (max_x / 2), y + (max_y / 2)); } } void draw_wave(BITMAP *bmp, int x, int y, int count, int size) { drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); int a = (count / 2) % 16; int b = size + a - 8; int c; switch((int) a / 2 + grand(3) - grand(3)) { default: case 7: case 0: c = TRANS_DGREY; break; case 6: case 1: c = TRANS_DGREEN; break; case 2: case 5: c = TRANS_LGREEN; break; case 3: case 4: c = TRANS_YELLOW; break; /* case 7: case 0: c = TRANS_DGREEN; break; case 6: case 1: c = TRANS_LGREEN; break; case 4: case 5: case 3: default: case 2: c = TRANS_YELLOW; break;*/ } circle(bmp, x, y, b, c); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); } void draw_an_effect(BITMAP *bmp, int dr, int x, int y) { int x1, y1, a,b,c; switch(effect[dr].type) { case EFFECT_WAVE1: case EFFECT_WAVE2: draw_wave(bmp, x, y, effect [dr].things [0], effect [dr].things [1]); a = effect [dr].things [0] - 16 + 255; draw_wave(bmp, x, y, a, effect [dr].things [1]); break; case EFFECT_ZAP_AIM: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); b = xpart(enemy[dr].counter * 32, 6); x1 = TRANS_LBLUE; for (c = 0; c < 6; c ++) { b *= -1; a = (effect[dr].things [0] * 4 + c * (ANGLE_FULL / 6)) & 1023; triangle(bmp, x + xpart(a, 25 + b), y + ypart(a, 25 + b), x + xpart(a + ANGLE_1_32, 42 + b), y + ypart(a + ANGLE_1_32, 42 + b), x + xpart(a - ANGLE_1_32, 42 + b), y + ypart(a - ANGLE_1_32, 42 + b), x1); } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case EFFECT_REDBEAM: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (effect[dr].things [0] > 100) a = (150 - effect[dr].things [0]) * 6; else a = 300; if (effect[dr].things [0] < 25) a = effect[dr].things [0] * 12; if (effect[dr].things [0] > 100) b = (150 - effect[dr].things [0]) / 6 + 2;// + pulsate(64, 4, effect[dr].things [2]); else b = 10 + grand(3);//pulsate(32, 2, effect[dr].things [2]); if (effect[dr].things [0] < 40) b = effect[dr].things [0] / 4 + + grand(3);//pulsate(32, 2, effect[dr].things [2]); if (b < 1) b = 1; if (effect[dr].things [0] > 100) c = (150 - effect[dr].things [0]) / 12 + 1;// + pulsate(64, 2, effect[dr].things [2]); else c = 5 + grand(3);// + pulsate(64, 1, effect[dr].things [2]); if (effect[dr].things [0] < 40) c = effect[dr].things [0] / 8 + grand(3); if (c < 1) c = 1; circlefill(bmp, x, y, b, TRANS_YELLOW); circlefill(bmp, x, y, (b * 13) / 10, TRANS_LRED); circlefill(bmp, x, y, (b * 15) / 10, TRANS_DRED); draw_a_light(bmp, (b * 25) / 10, x, y); x1 = x + xpart(effect[dr].things [1], a); y1 = y + ypart(effect[dr].things [1], a); circlefill(bmp, x1, y1, b * 2, TRANS_YELLOW); circlefill(bmp, x1, y1, (b * 13) / 5, TRANS_LRED); circlefill(bmp, x1, y1, (b * 15) / 5, TRANS_DRED); draw_a_light(bmp, (b * 25) / 5, x1, y1); beam_points(bmp, x, y, x1, y1, effect[dr].things [1], c, c * 2, TRANS_YELLOW); beam_points(bmp, x, y, x1, y1, effect[dr].things [1], (c + 1), (c + 1) * 2, TRANS_DRED); beam_points(bmp, x, y, x1, y1, effect[dr].things [1], c + 3, (c + 3) * 2, LIGHT_1); beam_points(bmp, x, y, x1, y1, effect[dr].things [1], c + 6, (c + 6) * 2, LIGHT_2); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case EFFECT_BLUEBEAM: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (effect[dr].things [0] > 100) a = (150 - effect[dr].things [0]) * 6; else a = 300; if (effect[dr].things [0] < 25) a = effect[dr].things [0] * 12; if (effect[dr].things [0] > 100) b = (150 - effect[dr].things [0]) / 6 + 2;// + pulsate(64, 4, effect[dr].things [2]); else b = 10 + grand(3);//pulsate(32, 2, effect[dr].things [2]); if (effect[dr].things [0] < 40) b = effect[dr].things [0] / 4 + + grand(3);//pulsate(32, 2, effect[dr].things [2]); if (b < 1) b = 1; if (effect[dr].things [0] > 100) c = (150 - effect[dr].things [0]) / 12 + 1;// + pulsate(64, 2, effect[dr].things [2]); else c = 5 + grand(3);// + pulsate(64, 1, effect[dr].things [2]); if (effect[dr].things [0] < 40) c = effect[dr].things [0] / 8 + grand(3); if (c < 1) c = 1; circlefill(bmp, x, y, b, TRANS_WHITE); circlefill(bmp, x, y, (b * 13) / 10, TRANS_LBLUE); circlefill(bmp, x, y, (b * 15) / 10, TRANS_DBLUE); draw_a_light(bmp, (b * 25) / 10, x, y); x1 = x + xpart(effect[dr].things [1], a); y1 = y + ypart(effect[dr].things [1], a); circlefill(bmp, x1, y1, b * 2, TRANS_WHITE); circlefill(bmp, x1, y1, (b * 13) / 5, TRANS_LBLUE); circlefill(bmp, x1, y1, (b * 15) / 5, TRANS_DBLUE); draw_a_light(bmp, (b * 25) / 5, x1, y1); beam_points(bmp, x, y, x1, y1, effect[dr].things [1], c, c * 2, TRANS_WHITE); beam_points(bmp, x, y, x1, y1, effect[dr].things [1], (c + 1), (c + 1) * 2, TRANS_LBLUE); beam_points(bmp, x, y, x1, y1, effect[dr].things [1], c + 3, (c + 3) * 2, LIGHT_1); beam_points(bmp, x, y, x1, y1, effect[dr].things [1], c + 6, (c + 6) * 2, LIGHT_2); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; } } void beam_points(BITMAP *bmp, int x1, int y1, int x2, int y2, int angle, int out1, int out2, int colour) { int points [8]; points [0] = x1 + xpart(angle - ANGLE_QUARTER, out1); points [1] = y1 + ypart(angle - ANGLE_QUARTER, out1); points [2] = x1 + xpart(angle + ANGLE_QUARTER, out1); points [3] = y1 + ypart(angle + ANGLE_QUARTER, out1); points [4] = x2 + xpart(angle + ANGLE_QUARTER, out2); points [5] = y2 + ypart(angle + ANGLE_QUARTER, out2); points [6] = x2 + xpart(angle - ANGLE_QUARTER, out2); points [7] = y2 + ypart(angle - ANGLE_QUARTER, out2); polygon(bmp, 4, points, colour); } void draw_a_light(BITMAP *bmp, int size, int x, int y) { // int i = light[dr].size; if (size > 99) size = 99; // switch(light[dr].type) // { // case LIGHT_NORMAL: /* drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(bmp, x, y, light[dr].size + 1, LIGHT_1); circlefill(bmp, x, y, ((light[dr].size * 9) / 10) + 1, LIGHT_2); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0);*/ draw_trans_rle_sprite(bmp, light_rle [size], x - size - 1, y - size - 1); // break; // } } void draw_pickups(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y) { int i, x, y; for (i = 0; i < NO_PICKUPS; i ++) { if (pickup[i].type == PICKUP_NONE) continue; if (pickup[i].x + 12000 < centre_x - (max_x / 2) * GRAIN || pickup[i].x - 12000 > centre_x + (max_x / 2) * GRAIN || pickup[i].y + 12000 < centre_y - (max_y / 2) * GRAIN || pickup[i].y - 12000 > centre_y + (max_y / 2) * GRAIN) continue; x = (pickup[i].x / GRAIN) - (centre_x / GRAIN); y = (pickup[i].y / GRAIN) - (centre_y / GRAIN); draw_a_pickup(bmp, i, x + (max_x / 2), y + (max_y / 2)); } } void get_pickup_colour(int st, int cols [3]) { if (game.mode_purple == 1) { cols [0] = TRANS_PURPLE; cols [1] = TRANS_PURPLE; return; } switch(st) { case ABILITY_PRIMARY: cols [0] = TRANS_YELLOW; cols [1] = TRANS_ORANGE; // cols [0] = COLOUR_YELLOW7; return; case ABILITY_DRIVE: cols [0] = TRANS_LGREEN; cols [1] = TRANS_DGREEN; return; case ABILITY_DEFENCE: cols [0] = TRANS_LBLUE; cols [1] = TRANS_DBLUE; // cols [0] = COLOUR_BLUE7; return; case ABILITY_SECONDARY: cols [0] = TRANS_DRED; cols [1] = TRANS_DRED; // cols [0] = COLOUR_RED7; return; } } void draw_a_pickup(BITMAP *bmp, int dr, int x, int y) { int x1, y1, x2; int col; int cols [3] = {COLOUR_YELLOW8, COLOUR_YELLOW4, COLOUR_RED4}; char dstr [30]; switch(pickup[dr].type) { case PICKUP_SQUARE: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); int points [8]; get_pickup_colour(pickup[dr].subtype, cols); x1 = (counter * 16) & 1023; x2 = 8 + pulsate(32, 4, counter); points [0] = x + xpart(x1, x2); points [1] = y + ypart(x1, x2); points [2] = x + xpart(x1 + ANGLE_QUARTER, x2); points [3] = y + ypart(x1 + ANGLE_QUARTER, x2); points [4] = x - xpart(x1, x2); points [5] = y - ypart(x1, x2); points [6] = x - xpart(x1 + ANGLE_QUARTER, x2); points [7] = y - ypart(x1 + ANGLE_QUARTER, x2); polygon(bmp, 4, points, cols [0]); x1 = 1024 - ((counter * 8) & 1023); x2 = 10;// + pulsate(64, 4, counter); points [0] = x + xpart(x1, x2); points [1] = y + ypart(x1, x2); points [2] = x + xpart(x1 + ANGLE_QUARTER, x2); points [3] = y + ypart(x1 + ANGLE_QUARTER, x2); points [4] = x - xpart(x1, x2); points [5] = y - ypart(x1, x2); points [6] = x - xpart(x1 + ANGLE_QUARTER, x2); points [7] = y - ypart(x1 + ANGLE_QUARTER, x2); pline(bmp, points [0], points [1], points [2], points [3], cols [0]); pline(bmp, points [2], points [3], points [4], points [5], cols [0]); pline(bmp, points [4], points [5], points [6], points [7], cols [0]); pline(bmp, points [6], points [7], points [0], points [1], cols [0]); draw_a_light(bmp, 15 + pulsate(32, 4, counter), x, y); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); if (options.colour_text == 1) write_colour_text(bmp, x, y, pickup[dr].subtype); break; case PICKUP_CIRCLE: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); get_pickup_colour(pickup[dr].subtype, cols); circlefill(bmp, x, y, 4 + pulsate(32, 3, counter), cols[0]); circlefill(bmp, x + xpart(counter * 16, 10), y + ypart(counter * 16, 10), 3 - pulsate(16, 2, counter), cols[0]); circlefill(bmp, x + xpart(counter * 16 + ANGLE_HALF, 10), y + ypart(counter * 16 + ANGLE_HALF, 10), 3 - pulsate(16, 2, counter), cols[0]); // circle(bmp, x, y, 7, cols [0]); draw_a_light(bmp, 15 + pulsate(32, 4, counter), x, y); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); if (options.colour_text == 1) write_colour_text(bmp, x, y, pickup[dr].subtype); break; case PICKUP_TRIANGLE: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); get_pickup_colour(pickup[dr].subtype, cols); x1 = counter * 16 % 1023; x2 = 9 + pulsate(16, 3, counter); triangle(bmp, x + xpart(x1, x2), y + ypart(x1, x2), x + xpart(x1 + ANGLE_FULL / 3, x2), y + ypart(x1 + ANGLE_FULL / 3, x2), x + xpart(x1 - ANGLE_FULL / 3, x2), y + ypart(x1 - ANGLE_FULL / 3, x2), cols[0]); x1 = ANGLE_FULL - x1; x2 = 15 - pulsate(16, 5, counter); triangle(bmp, x + xpart(x1, x2), y + ypart(x1, x2), x + xpart(x1 + ANGLE_FULL / 3, 4), y + ypart(x1 + ANGLE_FULL / 3, 4), x + xpart(x1 - ANGLE_FULL / 3, 4), y + ypart(x1 - ANGLE_FULL / 3, 4), cols[0]); triangle(bmp, x + xpart(x1, 4), y + ypart(x1, 4), x + xpart(x1 + ANGLE_FULL / 3, x2), y + ypart(x1 + ANGLE_FULL / 3, x2), x + xpart(x1 - ANGLE_FULL / 3, 4), y + ypart(x1 - ANGLE_FULL / 3, 4), cols[0]); triangle(bmp, x + xpart(x1, 4), y + ypart(x1, 4), x + xpart(x1 + ANGLE_FULL / 3, 4), y + ypart(x1 + ANGLE_FULL / 3, 4), x + xpart(x1 - ANGLE_FULL / 3, x2), y + ypart(x1 - ANGLE_FULL / 3, x2), cols[0]); // triangle(bmp, x, y - 5, x - 4, y + 2, x + 4, y + 2, cols [0]); // circlefill(bmp, x, y, 7, TRANS_LRED); // circle(bmp, x, y, 7, TRANS_YELLOW); draw_a_light(bmp, 15 + pulsate(32, 4, counter), x, y); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); if (options.colour_text == 1) write_colour_text(bmp, x, y, pickup[dr].subtype); break; /* case PICKUP_CROSS: // drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); get_pickup_colour(pickup[dr].subtype, cols); rectfill(bmp, x - 2, y - 5, x + 2, y + 5, cols [0]); rectfill(bmp, x - 5, y - 2, x + 5, y + 2, cols [0]); // rect(bmp, x - 5, y - 5, x + 5, y + 5, TRANS_DBLUE); // line(bmp, x - 5, y - 5, drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break;*/ // drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); case PICKUP_PRESYMBOL: // drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); // rectfill(bmp, x - 2, y - 5, x + 2, y + 5, COLOUR_WHITE); // rectfill(bmp, x - 5, y - 2, x + 5, y + 2, COLOUR_WHITE); // rect(bmp, x - 5, y - 5, x + 5, y + 5, TRANS_DBLUE); // line(bmp, x - 5, y - 5, // drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); // circlefill(bmp, x + xpart(counter * 16, 10), y + ypart(counter * 16, 10), 3 - pulsate(16, 2, counter), cols[0]); // circlefill(bmp, x + xpart(counter * 16 + ANGLE_HALF, 10), y + ypart(counter * 16 + ANGLE_HALF, 10), 3 - pulsate(16, 2, counter), cols[0]); // putpixel(bmp, x + xpart(counter * 16, 10), y + ypart(counter * 16, 10), COLOUR_GREY5 + pulsate(64, 2, counter)); // putpixel(bmp, x + xpart(counter * 16 + ANGLE_QUARTER, 10), y + ypart(counter * 16 + ANGLE_QUARTER, 10), COLOUR_GREY5 + pulsate(64, 2, counter)); // putpixel(bmp, x - xpart(counter * 16, 10), y - ypart(counter * 16, 10), COLOUR_GREY5 + pulsate(64, 2, counter)); // putpixel(bmp, x - xpart(counter * 16 + ANGLE_QUARTER, 10), y - ypart(counter * 16 + ANGLE_QUARTER, 10), COLOUR_GREY5 + pulsate(64, 2, counter)); x1 = pickup[dr].timeout / 3 + 3; x2 = (64 - pickup[dr].timeout) / 18; cols [0] = COLOUR_WHITE - pickup[dr].timeout / 20;//COLOUR_GREY5 + pulsate(64, 2, counter); circlefill(bmp, x + xpart(counter * 32, x1), y + ypart(counter * 32, x1), x2, cols[0]); circlefill(bmp, x + xpart(counter * 32 + ANGLE_QUARTER, x1), y + ypart(counter * 32 + ANGLE_QUARTER, x1), x2, cols[0]); circlefill(bmp, x - xpart(counter * 32, x1), y - ypart(counter * 32, x1), x2, cols[0]); circlefill(bmp, x - xpart(counter * 32 + ANGLE_QUARTER, x1), y - ypart(counter * 32 + ANGLE_QUARTER, x1), x2, cols[0]); // circlefill(bmp, x + xpart(counter * 16, x1), y + ypart(counter * 16, x1), 3 - pulsate(16, 2, counter), cols[0]); // circlefill(bmp, x + xpart(counter * 16 + ANGLE_QUARTER, x1), y + ypart(counter * 16 + ANGLE_QUARTER, x1), 3 - pulsate(16, 2, counter), cols[0]); // circlefill(bmp, x - xpart(counter * 16, x1), y - ypart(counter * 16, x1), 3 - pulsate(16, 2, counter), cols[0]); // circlefill(bmp, x - xpart(counter * 16 + ANGLE_QUARTER, x1), y - ypart(counter * 16 + ANGLE_QUARTER, x1), 3 - pulsate(16, 2, counter), cols[0]); // draw_a_light(bmp, 15 + pulsate(64, 4, counter), x, y); draw_a_light(bmp, 8 + (64 - pickup[dr].timeout) / 5, x, y); break; case PICKUP_PRESECONDARY: // circlefill(bmp, x, y, 10 + xpart((counter * 64) % ANGLE_FULL, 5), COLOUR_GREY4); x1 = TRANS_DGREY; x2 = counter % 32; if (x2 < 20) x1 = TRANS_LGREY; if (x2 < 10) x1 = TRANS_WHITE; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circle(bmp, x, y, 3 + x2 / 2, x1); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); secondary_name(pickup[dr].subtype, dstr); textprintf_centre_ex(bmp, small_font, x, y + 12, COLOUR_GREY3, -1, dstr); break; case PICKUP_SECONDARY: x1 = TRANS_DGREY; x2 = counter % 32; if (x2 < 29) x1 = TRANS_LGREY; // if (x2 < 26) x1 = TRANS_DRED; if (x2 < 23) x1 = TRANS_LRED; if (x2 < 18) x1 = TRANS_ORANGE; if (x2 < 13) x1 = TRANS_YELLOW; if (x2 < 8) x1 = TRANS_WHITE; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circle(bmp, x, y, 3 + x2 / 2, x1); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); circlefill(bmp, x, y, 3 + pulsate(64, 2, counter), COLOUR_YELLOW4 + pulsate(64, 3, counter)); secondary_name(pickup[dr].subtype, dstr); textprintf_centre_ex(bmp, small_font, x, y + 12, COLOUR_YELLOW4 + pulsate(16, 2, counter), -1, dstr); draw_a_light(bmp, 10 + pulsate(64, 5, counter), x, y); break; case PICKUP_REPAIR: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); rectfill(bmp, x - 6 - pulsate(64, 3, counter), y - 3, x + 6 + pulsate(64, 3, counter), y + 3, TRANS_ORANGE); rectfill(bmp, x - 3, y - 6 - pulsate(64, 3, counter), x + 3, y + 6 + pulsate(64, 3, counter), TRANS_ORANGE); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 10 + pulsate(64, 3, counter), x, y); break; default: // case PICKUP_UPGRADE3: col = COLOUR_PURPLE8; // case PICKUP_UPGRADE2: // if (pickup[dr].type == PICKUP_UPGRADE2) // col = COLOUR_RED8; // case PICKUP_UPGRADE1: // circlefill(bmp, x, y, 4, COLOUR_YELLOW4 + (pickup[dr].counter / 8) % 4); // circlefill(bmp, x, y, 1 + (pickup[dr].counter / 4) % 5, COLOUR_YELLOW6 + (pickup[dr].counter / 8) % 3); circlefill(bmp, x, y, 2, col - (pickup[dr].counter / 8) % 2); x1 = cos(angle_to_radians(pickup[dr].counter * 9)) * 7; y1 = sin(angle_to_radians(pickup[dr].counter * 9)) * 7; // circlefill(bmp, x + x1, y + y1, 1, COLOUR_YELLOW8 - (pickup[dr].counter / 8) % 3); // circlefill(bmp, x - x1, y - y1, 1, COLOUR_YELLOW8 - (pickup[dr].counter / 8) % 3); putpixel(bmp, x + x1, y + y1, col - (pickup[dr].counter / 8) % 3); putpixel(bmp, x - x1, y - y1, col - (pickup[dr].counter / 8) % 3); x1 = cos(angle_to_radians(pickup[dr].counter * 9) - PI / 4) * 7; y1 = sin(angle_to_radians(pickup[dr].counter * 9) - PI / 4) * 7; putpixel(bmp, x + x1, y + y1, col - 4 - (pickup[dr].counter / 8) % 3); putpixel(bmp, x - x1, y - y1, col - 4 - (pickup[dr].counter / 8) % 3); x1 = cos(angle_to_radians(pickup[dr].counter * 9) - PI / 8) * 7; y1 = sin(angle_to_radians(pickup[dr].counter * 9) - PI / 8) * 7; putpixel(bmp, x + x1, y + y1, col - 2 - (pickup[dr].counter / 8) % 3); putpixel(bmp, x - x1, y - y1, col - 2 - (pickup[dr].counter / 8) % 3); break; /* case PICKUP_SHIP: col = COLOUR_BLUE8; x1 = cos(angle_to_radians(pickup[dr].counter * 9)) * 8; y1 = sin(angle_to_radians(pickup[dr].counter * 9)) * 8; putpixel(bmp, x + x1, y + y1, col - (pickup[dr].counter / 8) % 3); putpixel(bmp, x - x1, y - y1, col - (pickup[dr].counter / 8) % 3); x1 = cos(angle_to_radians(pickup[dr].counter * 9) - PI / 4) * 8; y1 = sin(angle_to_radians(pickup[dr].counter * 9) - PI / 4) * 8; putpixel(bmp, x + x1, y + y1, col - 4 - (pickup[dr].counter / 8) % 3); putpixel(bmp, x - x1, y - y1, col - 4 - (pickup[dr].counter / 8) % 3); x1 = cos(angle_to_radians(pickup[dr].counter * 9) - PI / 8) * 8; y1 = sin(angle_to_radians(pickup[dr].counter * 9) - PI / 8) * 8; putpixel(bmp, x + x1, y + y1, col - 2 - (pickup[dr].counter / 8) % 3); putpixel(bmp, x - x1, y - y1, col - 2 - (pickup[dr].counter / 8) % 3); rectfill(bmp, x - 4, y - 4, x + 4, y + 5, COLOUR_PURPLE1); rect(bmp, x - 4, y - 4, x + 4, y + 5, COLOUR_PURPLE6); textprintf_ex(bmp, small_font, x - 2, y - 5, col - (pickup[dr].counter / 8) % 4, -1, "X"); break;*/ } } void write_colour_text(BITMAP *bmp, int x, int y, int which) { if (game.mode_purple == 1) { textprintf_centre_ex(bmp, small_font, x, y, COLOUR_WHITE, -1, "Purple"); // heh return; } switch(which) { case ABILITY_PRIMARY: textprintf_centre_ex(bmp, small_font, x, y, COLOUR_WHITE, -1, "Yellow"); break; case ABILITY_SECONDARY: textprintf_centre_ex(bmp, small_font, x, y, COLOUR_WHITE, -1, "Red"); break; case ABILITY_DRIVE: textprintf_centre_ex(bmp, small_font, x, y, COLOUR_WHITE, -1, "Green"); break; case ABILITY_DEFENCE: textprintf_centre_ex(bmp, small_font, x, y, COLOUR_WHITE, -1, "Blue"); break; } } void draw_eyes(BITMAP *bmp, int max_x, int max_y, int play, int centre_x, int centre_y) { if (arena.hostile == 0) return; int i, x, y; i = grand(arena.eyes_on_level); if (arena.eye_x [i] == 0) return; for (i = 0; i < arena.eyes_on_level; i ++) { if (arena.eye_x [i] == 0) continue; // probably unnecessary if (arena.eye_x [i] + 3000 < centre_x - (max_x / 2) * GRAIN || arena.eye_x [i] - 3000 > centre_x + (max_x / 2) * GRAIN || arena.eye_y [i] + 3000 < centre_y - (max_y / 2) * GRAIN || arena.eye_y [i] - 3000 > centre_y + (max_y / 2) * GRAIN) continue; x = (arena.eye_x [i] / GRAIN) - (centre_x / GRAIN); y = (arena.eye_y [i] / GRAIN) - (centre_y / GRAIN); draw_an_eye(bmp, i, x + (max_x / 2), y + (max_y / 2)); } } void draw_an_eye(BITMAP *bmp, int i, int x, int y) { // int eye_colours [5] = {TRANS_DRED, TRANS_LRED, TRANS_ORANGE, TRANS_YELLOW, TRANS_WHITE}; // need to put this in arena so we can have eyes of different colours // int angle; // int angle_plus; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); /* angle = (counter * 16) & 1023; if (i % 2 == 0) angle = ANGLE_FULL - angle; for (j = 0; j < 4; j ++) { circlefill(bmp, x + grand(3) - 1 + xpart(angle + (j * ANGLE_QUARTER), 13 + pulsate(64, 4, counter)), y + grand(3) - 1 + ypart(angle + (j * ANGLE_QUARTER), 13 + pulsate(64, 4, counter)), 6 + grand(3), TRANS_DRED); }*/ circlefill(bmp, x + grand(3) - 1, y + grand(3) - 1, 13 + pulsate(64, 4, counter), arena.eye_colour3); circlefill(bmp, x + grand(3) - 1, y + grand(3) - 1, 9 + pulsate(64, 3, counter), arena.eye_colour2); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_a_light(bmp, 19 + pulsate(64, 3, counter) + grand(3), x + grand(3) - 1, y + grand(3) - 1); circlefill(bmp, x + grand(3) - 1, y + grand(3) - 1, 2 + grand(2), arena.eye_colour1); } void draw_grid(BITMAP *bmp, int max_x, int max_y, int play, int colour, int edge_colour, int x_offset, int centre_x, int centre_y, int finetune_x, int finetune_y) { int i;//, x, y; int no_x = max_x / GRID_WIDTH + 2; int no_y = max_y / GRID_WIDTH + 2 + special_600_y; int ax = centre_x;// + inflicteda; int ay = centre_y;// + inflictede; int min_x = 0; int min_y = 0; int dmax_x = max_x; int dmax_y = max_y; int draw_x = 0; int draw_y = 0; // char highlight = 0; int j; int tiled; int tx, ty; if (ax / GRAIN < max_x / 2) { min_x = (max_x / 2) - ax / GRAIN; } if (ax / GRAIN > arena.max_x / GRAIN - max_x / 2) { dmax_x = (max_x / 2) + arena.max_x / GRAIN - ax / GRAIN; } if (ay / GRAIN < max_y / 2) { min_y = (max_y / 2) - ay / GRAIN; } if (ay / GRAIN > arena.max_y / GRAIN - max_y / 2) { dmax_y = (max_y / 2) + arena.max_y / GRAIN - ay / GRAIN; } // parallax background: if (FALSE) //game.mode_void == 1) { clear_to_color(bmp, GC_GREY2); return; } else draw_rle_sprite(bmp, tile_background, 0 - (ax / (int) (GRAIN * 1.2)) % GRID_WIDTH, 0 - (ay / (int) (GRAIN * 1.2)) % GRID_WIDTH); //#ifdef DEBUG_DISPLAY // textprintf_centre_ex(bmp, small_font, 200, // 200, COLOUR_WHITE, -1, "(%i, %i)", 0 - (ax / (int) (GRAIN * 1.2)) % GRID_WIDTH, 0 - (ay / (int) (GRAIN * 1.2)) % GRID_WIDTH); //#endif // parallax background: (old, slower way) /* for (i = -1; i < no_x; i ++) { // if ((i - 3) * GRID_WIDTH + ax / GRAIN >= arena.max_x / GRAIN + max_x / 2 - 94) if ((i - 3) * GRID_WIDTH + ax / GRAIN >= arena.max_x / GRAIN + max_x / 2 - 124 - finetune_x) { // if ((i - 3) * GRID_WIDTH + ax / GRAIN >= arena.max_x / GRAIN + max_x / 2 - 94) if ((i - 3) * GRID_WIDTH + ax / GRAIN >= arena.max_x / GRAIN + max_x / 2 - 124 - finetune_x) break; } if ((i + 1) * GRID_WIDTH <= min_x - 31) { continue; } if ((i + 1) * GRID_WIDTH <= min_x - 21 && min_x != 0) { continue; } for (j = 0; j < no_y; j ++) { if ((j - 1) * GRID_WIDTH + ay / GRAIN >= arena.max_y / GRAIN + max_y / 2 + 15)//+ 64) { if ((j - 1) * GRID_WIDTH + ay / GRAIN >= arena.max_y / GRAIN + max_y / 2 + 15) //64) break; } // if (min_y > 0 && (j + 1) * GRID_WIDTH <= min_y + 9 + (special_600_y * (ay < GRAIN * GRID_WIDTH))) if (min_y > 0 && (j + 1) * GRID_WIDTH <= min_y + 9) // with special_600_y removed so it can be used in calculation of no_y instead { continue; } { draw_rle_sprite(bmp, tile_rle [0], (i * GRID_WIDTH) - (ax / (int) (GRAIN * 1.2)) % GRID_WIDTH + 15 + finetune_x, (j * GRID_WIDTH) - (ay / (int) (GRAIN * 1.2)) % GRID_WIDTH - 15 + finetune_y); } } } // end parallax background */ for (i = -1; i < no_x; i ++) { for (j = 0; j < no_y; j ++) { draw_x = (i * GRID_WIDTH) - (ax / GRAIN) % GRID_WIDTH + 15 + finetune_x; draw_y = (j * GRID_WIDTH) - (ay / GRAIN) % GRID_WIDTH - 15 + finetune_y; if (draw_x < -GRID_WIDTH || draw_x > scr_x) continue; if (draw_y < -GRID_WIDTH || draw_y > scr_y) continue; tx = ((ax / GRID_WIDTH) / GRAIN) + x_offset + i - (max_x / GRID_WIDTH) + 8; ty = ((ay / GRID_WIDTH) / GRAIN) + j - (max_y / GRID_WIDTH) + 6; if (tx < 0 || tx > arena.max_x / 50000 + 4 || ty < 0 || ty > arena.max_y / 50000 + 4) { tiled = getpixel(level_bmp, 0, 0); } else tiled = getpixel(level_bmp, tx, ty); if (tiled < 0 || tiled > NO_TILE_RLES || tile_rle [tiled] == NULL) { // draw_rle_sprite(bmp, tile_rle [], (i * GRID_WIDTH) - (ax / GRAIN) % GRID_WIDTH + 15 + finetune_x, (j * GRID_WIDTH) - (ay / GRAIN) % GRID_WIDTH - 15 + finetune_y); #ifdef DEBUG_DISPLAY textprintf_centre_ex(bmp, small_font, (i * GRID_WIDTH) - (ax / GRAIN) % GRID_WIDTH + 40, (j * GRID_WIDTH) - (ay / GRAIN) % GRID_WIDTH + 10, COLOUR_WHITE, -1, "%i %i %i", tx, ty, tiled); #endif } else { if (tiled > 0) draw_rle_sprite(bmp, tile_rle [tiled], draw_x, draw_y); } // textprintf_centre_ex(bmp, small_font, draw_x, // draw_y, COLOUR_WHITE, -1, "%i %i %i", tx, ty, tiled); } } return; /* for (i = -1; i < no_x; i ++) { if ((i + 2) * GRID_WIDTH + ax / GRAIN >= arena.max_x / GRAIN + max_x / 2 - 14) { // highlight = 1; // was - 2 if ((i - 3) * GRID_WIDTH + ax / GRAIN >= arena.max_x / GRAIN + max_x / 2 - 14) break; } if ((i + 2) * GRID_WIDTH <= min_x - 71) { // highlight = 1; continue; } if ((i + 2) * GRID_WIDTH <= min_x - 21 && min_x != 0) { // highlight = 1; continue; } for (j = 0; j < no_y; j ++) { if ((j + 2) * GRID_WIDTH + ay / GRAIN >= arena.max_y / GRAIN + max_y / 2 + visible_grids_y)//+ 64) { if ((j - 2) * GRID_WIDTH + ay / GRAIN >= arena.max_y / GRAIN + max_y / 2 + visible_grids_y) //64) break; } if (min_y > 0 && (j + 2) * GRID_WIDTH <= min_y + 9 + (special_600_y * (ay < GRAIN * GRID_WIDTH))) { continue; } tx = ((ax / GRID_WIDTH) / GRAIN) + x_offset + i - (max_x / GRID_WIDTH) + 8; ty = ((ay / GRID_WIDTH) / GRAIN) + j - (max_y / GRID_WIDTH) + 6; tiled = getpixel(level_bmp, tx, ty); if (tiled < 0 || tiled > NO_TILE_RLES || tile_rle [tiled] == NULL) { #ifdef DEBUG_DISPLAY textprintf_centre_ex(bmp, small_font, (i * GRID_WIDTH) - (ax / GRAIN) % GRID_WIDTH + 40, (j * GRID_WIDTH) - (ay / GRAIN) % GRID_WIDTH + 10, COLOUR_WHITE, -1, "%i %i %i", tx, ty, tiled); #endif } else { if (tiled > 0) // draw_rle_sprite(bmp, tile_rle [tiled], (i * GRID_WIDTH) - (ax / GRAIN) % GRID_WIDTH + 15 + finetune, (j * GRID_WIDTH) - (ay / GRAIN) % GRID_WIDTH - 15); draw_rle_sprite(bmp, tile_rle [tiled], (i * GRID_WIDTH) - (ax / GRAIN) % GRID_WIDTH + 15 + finetune_x, (j * GRID_WIDTH) - (ay / GRAIN) % GRID_WIDTH - 15 + finetune_y); } } } return; */ /* old lacewing line drawing? // float star_angle; // int distance; for (i = 0; i < no_x; i ++) { if ((i + 1) * GRID_WIDTH + ax / GRAIN > arena.max_x / GRAIN + max_x / 2 + 50) { highlight = 1; if (i * GRID_WIDTH + ax / GRAIN > arena.max_x / GRAIN + max_x / 2 + 50) break; } if (i * GRID_WIDTH <= min_x - 6) { highlight = 1; continue; } x = i * GRID_WIDTH - ((ax + x_offset) / GRAIN) % GRID_WIDTH; // x = i * GRID_WIDTH - (actor[player[play].actor_controlled].y / GRAIN) % GRID_WIDTH; if (highlight == 1) { pline(bmp, x, min_y - 4, x, dmax_y, edge_colour); highlight = 0; } else pline(bmp, x, min_y - 4, x, dmax_y, colour); } for (i = 0; i < no_y; i ++) { if ((i + 1) * GRID_WIDTH + ay / GRAIN > arena.max_y / GRAIN + max_y / 2 + 64) { highlight = 1; if (i * GRID_WIDTH + ay / GRAIN > arena.max_y / GRAIN + max_y / 2 + 64) break; } if (min_y > 0 && i * GRID_WIDTH <= min_y + 9 + (special_600_y * (ay < GRAIN * GRID_WIDTH))) { highlight = 1; continue; } y = i * GRID_WIDTH - ((ay + grid_offset_y) / GRAIN) % GRID_WIDTH; // y = i * GRID_WIDTH + (actor[player[play].actor_controlled].x / GRAIN) % GRID_WIDTH; if (highlight == 1) { pline(bmp, min_x - 4, y - 15, dmax_x, y - 15, edge_colour); highlight = 0; } else pline(bmp, min_x - 4, y - 15, dmax_x, y - 15, colour); } */ /* WITHOUT TILES int i, x, y; int no_x = max_x / GRID_WIDTH + 2; int no_y = max_y / GRID_WIDTH + 2; int ax = actor[player[play].actor_controlled].x;// + inflicteda; int ay = actor[player[play].actor_controlled].y;// + inflictede; int min_x = 0; int min_y = 0; int dmax_x = max_x; int dmax_y = max_y; char highlight = 0; if (ax / GRAIN < max_x / 2) { min_x = (max_x / 2) - ax / GRAIN; } if (ax / GRAIN > arena.max_x / GRAIN - max_x / 2) { dmax_x = (max_x / 2) + arena.max_x / GRAIN - ax / GRAIN; } if (ay / GRAIN < max_y / 2) { min_y = (max_y / 2) - ay / GRAIN; } if (ay / GRAIN > arena.max_y / GRAIN - max_y / 2) { dmax_y = (max_y / 2) + arena.max_y / GRAIN - ay / GRAIN; } // float star_angle; // int distance; for (i = 0; i < no_x; i ++) { if ((i + 1) * GRID_WIDTH + ax / GRAIN > arena.max_x / GRAIN + max_x / 2 + 50) { highlight = 1; if (i * GRID_WIDTH + ax / GRAIN > arena.max_x / GRAIN + max_x / 2 + 50) break; } if (i * GRID_WIDTH <= min_x - 6) { highlight = 1; continue; } x = i * GRID_WIDTH - ((ax + x_offset) / GRAIN) % GRID_WIDTH; // x = i * GRID_WIDTH - (actor[player[play].actor_controlled].y / GRAIN) % GRID_WIDTH; if (highlight == 1) { pline(bmp, x, min_y - 4, x, dmax_y, edge_colour); highlight = 0; } else pline(bmp, x, min_y - 4, x, dmax_y, colour); } for (i = 0; i < no_y; i ++) { if ((i + 1) * GRID_WIDTH + ay / GRAIN > arena.max_y / GRAIN + max_y / 2 + 64) { highlight = 1; if (i * GRID_WIDTH + ay / GRAIN > arena.max_y / GRAIN + max_y / 2 + 64) break; } if (min_y > 0 && i * GRID_WIDTH <= min_y + 9 + (special_600_y * (ay < GRAIN * GRID_WIDTH))) { highlight = 1; continue; } y = i * GRID_WIDTH - ((ay + grid_offset_y) / GRAIN) % GRID_WIDTH; // y = i * GRID_WIDTH + (actor[player[play].actor_controlled].x / GRAIN) % GRID_WIDTH; if (highlight == 1) { pline(bmp, min_x - 4, y - 15, dmax_x, y - 15, edge_colour); highlight = 0; } else pline(bmp, min_x - 4, y - 15, dmax_x, y - 15, colour); } */ } int pline(BITMAP *bmp, int x1, int y1, int x2, int y2, int colour) { if (x1 < -100 || y1 < -100 || x1 > 1300 || y1 > 1000 || x2 < -100 || y2 < -100 || x2 > 1300 || y2 > 1000) return 0; line(bmp, x1, y1, x2, y2, colour); return 1; } void bordered_rect(BITMAP *bmp, int x1, int y1, int x2, int y2, int colour1, int colour2) { rectfill(bmp, x1, y1, x2, y2, colour1); rect(bmp, x1, y1, x2, y2, colour2); // hline(bmp, x1, y1, x2, colour2); /// hline(bmp, x1, y2, x2, colour2); // vline(bmp, x1, y1, y2, colour2); // vline(bmp, x2, y1, y2, colour2); } void bordered_triangle(BITMAP *bmp, int x1, int y1, int x2, int y2, int x3, int y3, int col1, int col2) { triangle(bmp, x1, y1, x2, y2, x3, y3, col1); pline(bmp, x1, y1, x2, y2, col2); pline(bmp, x1, y1, x3, y3, col2); pline(bmp, x2, y2, x3, y3, col2); } void indicate_fps(BITMAP *bmp, int play) { // textprintf_ex(bmp, small_font, 20, 110, 5, "Xs %i Ys %i TS %f DS %f Drag %i", // actor[player[play].actor_controlled].x_speed, actor[player[play].actor_controlled].y_speed, hypot(actor[player[play].actor_controlled].x_speed, actor[player[play].actor_controlled].y_speed), hypot(actor[player[play].actor_controlled].x_speed, actor[player[play].actor_controlled].y_speed) * game.drag, actor[player[play].actor_controlled].drag_amount); // textprintf_ex(bmp, small_font, 20, 60, 5, "Stack %i", stackavail()); // textprintf(bmp, small_font, 20, 90, 5, "Slack %i", slacktime); // textprintf(bmp, small_font, 20, 100, 5, "Lock %i", actor[0].lock); //textprintf_ex(bmp, small_font, 20, 100, COLOUR_GREY5, -1, "Fps %i", frames_per_second); // textprintf_ex(bmp, small_font, 20, 50, 5, -1, "Fps} %i", frames_per_second); #ifdef DEBUG_DISPLAY textprintf_ex(bmp, small_font, 20, 90, 5, -1, "Fps %i", frames_per_second); textprintf_ex(bmp, small_font, 20, 100, 5, -1, "Slack %i", slacktime); textprintf_ex(bmp, small_font, 20, 110, 5, -1, "LSlack %i", long_slacktime_store); int i, c = 0; for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[i].type != ENEMY_NONE) c++; } textprintf_ex(bmp, small_font, 20, 120, 5, -1, "e %i", c); c = 0; for (i = 0; i < NO_BULLETS; i ++) { if (bullet[i].type != BULLET_NONE) c++; } textprintf_ex(bmp, small_font, 20, 130, 5, -1, "b %i", c); c = 0; for (i = 0; i < NO_CLOUDS; i ++) { if (cloud[i].type != CLOUD_NONE) c++; } textprintf_ex(bmp, small_font, 20, 140, 5, -1, "c %i", c); textprintf_ex(bmp, small_font, 20, 150, 5, -1, "%i %i %i %i", debug_sound [0], debug_sound [1], debug_sound [2], debug_sound [3]); if (slack_graph_pos < 0 || slack_graph_pos > 99) slack_graph_pos = 0; slack_graph [slack_graph_pos] = slacktime; c = slack_graph_pos; for (i = 0; i < 100; i ++) { if (slack_graph [c] <= 5) vline(bmp, 110 - i, 300, 160, COLOUR_RED5); else vline(bmp, 110 - i, 300, 300 - (slack_graph [c] / 6000), COLOUR_YELLOW8); c --; if (c < 0) c = 99; } slack_graph_pos ++; if (fps_graph_pos < 0 || fps_graph_pos > 99) fps_graph_pos = 0; fps_graph [fps_graph_pos] = frames_per_second; c = fps_graph_pos; for (i = 0; i < 100; i ++) { if (fps_graph [c] <= 25) vline(bmp, 110 - i, 360, 310, COLOUR_RED5); else vline(bmp, 110 - i, 360, 360 - (fps_graph [c] - 25) * 4, COLOUR_GREEN8); c --; if (c < 0) c = 99; } hline(bmp, 10, 324, 110, COLOUR_WHITE); fps_graph_pos ++; /* textprintf_ex(bmp, small_font, 20, 120, 5, -1, "Var1 %i", var1); textprintf_ex(bmp, small_font, 20, 130, 5, -1, "Var2 %i", var2); textprintf_ex(bmp, small_font, 20, 140, 5, -1, "Var3 %i", var3);*/ #endif /* textprintf(bmp, font, 20, 110, 5, "Xs} %i Ys} %i Drag} %i", actor[player[play].actor_controlled].x_speed, actor[player[play].actor_controlled].y_speed, actor[player[play].actor_controlled].drag_amount); textprintf(bmp, font, 20, 140, 5, "X} %i Y} %i ", actor[player[play].actor_controlled].x, actor[player[play].actor_controlled].y); textprintf(bmp, font, 20, 170, 5, "Angle} %i Wants} %i Att} %i Rec} %i ", enemy[0].angle, enemy[0].attribute [ATTRIB_SWERVER_ANGLE], enemy[0].attacking, enemy[0].recycle); textprintf(bmp, font, 20, 200, 5, "Lock} %i ", actor[0].lock);*/ /* textprintf(bmp, small_font, 20, 50, 5, "FPS %i", frames_per_second); textprintf(bmp, small_font, 20, 60, 5, "SLACK %i", slacktime); textprintf(bmp, small_font, 20, 70, 5, "XS %i YS %i DRAG %i", actor[player[play].actor_controlled].x_speed, actor[player[play].actor_controlled].y_speed, actor[player[play].actor_controlled].drag_amount); textprintf(bmp, small_font, 20, 80, 5, "X %i Y %i ", actor[player[play].actor_controlled].x, actor[player[play].actor_controlled].y); textprintf(bmp, small_font, 20, 90, 5, "ANGLE %i WANTS %i ATT %i REC %i ", enemy[0].angle, enemy[0].attribute [ATTRIB_SWERVER_ANGLE], enemy[0].attacking, enemy[0].recycle); textprintf(bmp, small_font, 20, 100, 5, "LOCK %i ", actor[0].lock); textprintf(bmp, small_font, 20, 110, 5, "Angle %i ", actor[0].angle / 16);*/ // textprintf(bmp, font, 20, 160, 5, "inflicteda %i inflictede %i ", inflicteda, inflictede); // textprintf(bmp, font, 20, 170, 5, "angle %i wants %i mode %i attacking %i ", // enemy[0].angle, 0, enemy[0].attribute [ATTRIB_FIGHTER_MODE], enemy[0].attacking); /* textprintf(bmp, font, 20, 180, 5, "hive %i mode %i attack %i hive at13 %i hive at24 %i xd %i yd %i", enemy[1].attribute [ATTRIB_BEE_HIVE], enemy[1].attribute [ATTRIB_BEE_MODE], enemy[1].attacking, enemy[enemy[1].attribute [ATTRIB_BEE_HIVE]].attribute [ATTRIB_HIVE_ATTACK13], enemy[enemy[1].attribute [ATTRIB_BEE_HIVE]].attribute [ATTRIB_HIVE_ATTACK24], enemy[1].attribute [ATTRIB_BEE_X_DEST], enemy[1].attribute [ATTRIB_BEE_Y_DEST]);*/ } // no inter-level announcements any more, but this still clears the bitmaps void level_announcement(void) { clear_bitmap(screen); if (player1 != NULL) clear_bitmap(player1); if (player2 != NULL) clear_bitmap(player2); return; // int waiting = 30; // if (arena.level == 1) // waiting = 60; // else // return; // actually, it's better not to have a big level sign thing... it's an annoying delay. //#ifdef DEBUG_DISPLAY // waiting = 2; //#endif /* ticked = 0; do { while(ticked > 0) { waiting --; ticked --; }; // if ((waiting / 5) % 2 == 0) { textprintf_centre_ex(screen, font2, 320 + text_offset_x, 220 + text_offset_y, COLOUR_YELLOW8 - (waiting / 2) % 4, -1, "{___get___ready___}"); textprintf_centre_ex(screen, font, 320 + text_offset_x, 220 + text_offset_y, -1, -1, "{___get___ready___}"); } // else // { // textprintf_centre_ex(screen, font2, 320 + text_offset_x, 220 + text_offset_y, COLOUR_BLACK, -1, "{___get___ready___}"); // textprintf_centre_ex(screen, font, 320 + text_offset_x, 220 + text_offset_y, COLOUR_BLACK, -1, "{___get___ready___}"); // } // textprintf_centre_ex(screen, font2, 320 + text_offset_x, 180 + text_offset_y, COLOUR_ORANGE8 - (waiting / 3) % 4, -1, "__{level__%i__}", arena.level); // textprintf_centre_ex(screen, font, 320 + text_offset_x, 180 + text_offset_y, -1, -1, "{__level__%i__}", arena.level); } while (waiting > 0); */ /* int v; for (v = 0; v < 20; v ++) { textprintf_ex(screen, small_font, 20, v * 10 + 20, COLOUR_GREEN8, -1, "%i %f %i %i %i", v, cos_table [v], v & 1023, cos_table [v & 1023], xpart(v, 1000)); } textprintf_ex(screen, small_font, 20, v * 10 + 30, COLOUR_GREEN8, -1, "X to continue..."); do { } while (key [KEY_X] == 0); */ // clear_bitmap(screen); } /*void display_messages(BITMAP *bmp, int play, int max_x, int max_y) { // return; int i, j; int col1, col2; int y_loc; // int x_offset; // FONT *msgfont1; // FONT *msgfont2; for (i = 0; i < NO_MESSAGES; i ++) { if (strlen(messages [play] [i]) == 0) continue; if (message_counter [play] [i] > 100) { kill_message(play, i); continue; } // can be killed later also message_counter [play] [i] ++; int count = message_counter [play] [i]; y_loc = 150 + i * 12; // msgfont1 = font; // msgfont2 = font2; if (count > 40) { kill_message(play, i); continue; } switch(count / 5) { case 0: col1 = COLOUR_WHITE; break; // case 1: col1 = message_style [play] [i]; // break; default: col1 = message_style [play] [i] - (count / 5) + 1; col2 = message_style [play] [i] - 4; break; } for (j = 0; j < 4; j ++) { // textprintf_centre_ex(bmp, small_font, max_x / 2 + xpart(counter + j * ANGLE_QUARTER, 25), y_loc + ypart(counter + j * ANGLE_QUARTER, 12), col1, -1, messages [play] [i]); // county = 1; // if ( // textprintf_centre_ex(bmp, small_font, max_x / 2 + xpart((counter * 12) + j * ANGLE_QUARTER, 25), y_loc + ypart((counter * 16) + j * ANGLE_QUARTER, 12), col2, -1, messages [play] [i]); // textprintf_centre_ex(bmp, small_font, max_x / 2 + xpart((counter * 12) + j * ANGLE_QUARTER, 40 - count), y_loc + ypart((counter * 16) + j * ANGLE_QUARTER, 20 - (count / 2)), col2, -1, messages [play] [i]); textprintf_centre_ex(bmp, small_font, max_x / 2 + xpart((counter * 12) + j * ANGLE_QUARTER, 80 - (count * 2)), y_loc + ypart((counter * 16) + j * ANGLE_QUARTER, 40 - count), col2, -1, messages [play] [i]); } textprintf_centre_ex(bmp, small_font, max_x / 2, y_loc, col1, -1, messages [play] [i]); } // end loop } void kill_message(int play, int i) { // return; messages [play] [i] [0] = '\0'; } void init_messages(void) { // return; int i; for (i = 0; i < 4; i ++) { strcpy(messages [0] [i], ""); strcpy(messages [1] [i], ""); message_style [0] [i] = STYLE_NONE; message_style [1] [i] = STYLE_NONE; message_counter [0] [i] = 0; message_counter [1] [i] = 0; } } // It's okay to send a message to a non-existent player void send_message(int play, const char *msg, int style) { return; // return; // return; int i; for (i = 0; i < 4; i ++) { if (messages [play] [i] [0] == 0 || i == 3) break; } // slot 3 will be overwritten if there're no gaps strcpy(messages [play] [i], msg); message_style [play] [i] = style; message_counter [play] [i] = 0; if (game.users > 1) { message_counter [play] [i] = 10; } } */ void display_quit_query(void) { if (game.mode_void == 0) { drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); rectfill(screen, 140 + text_offset_x, 150 + text_offset_y, 500 + text_offset_x, 280 + text_offset_y, TRANS_DGREY); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); } rect(screen, 140 + text_offset_x, 150 + text_offset_y, 500 + text_offset_x, 280 + text_offset_y, COLOUR_BLUE2); rect(screen, 139 + text_offset_x, 149 + text_offset_y, 501 + text_offset_x, 281 + text_offset_y, COLOUR_BLUE3); rect(screen, 138 + text_offset_x, 148 + text_offset_y, 502 + text_offset_x, 282 + text_offset_y, COLOUR_BLUE4); rect(screen, 137 + text_offset_x, 147 + text_offset_y, 503 + text_offset_x, 283 + text_offset_y, COLOUR_BLUE5); rect(screen, 136 + text_offset_x, 146 + text_offset_y, 504 + text_offset_x, 284 + text_offset_y, COLOUR_BLUE6); textprintf_centre_ex(screen, font2, 320 + text_offset_x, 180 + text_offset_y, COLOUR_GREEN6, -1, "{__quit__}"); textprintf_centre_ex(screen, font, 320 + text_offset_x, 180 + text_offset_y, -1, -1, "{__quit__}"); textprintf_centre_ex(screen, font2, 320 + text_offset_x, 230 + text_offset_y, COLOUR_BLUE8, -1, "{_y__or__n_}"); textprintf_centre_ex(screen, font, 320 + text_offset_x, 230 + text_offset_y, -1, -1, "{_y__or__n_}"); } // needed because the box overlaps the space between p1 and p2 screens void clear_quit_query(void) { // vsync(); // clear_bitmap(screen); rectfill(screen, 140 + text_offset_x, 140 + text_offset_y, 510 + text_offset_x, 290 + text_offset_y, 0); } overgod-1.0/display.h0000644000175000001440000001740510310632262013647 0ustar michiusersvoid run_display(void); void level_announcement(void); void display_quit_query(void); void clear_quit_query(void); #define GB_SHIP_TYPES 8 #define NO_TILE_RLES 40 enum { BMP_WHATEVER, ENEMY1_BMPS }; enum { RLE_ENEMY1_STINGER, RLE_ENEMY1_DRIFTER, RLE_ENEMY1_WANDERER, RLE_ENEMY1_SUN, RLE_ENEMY1_SUN_WHITE, RLE_ENEMY1_JELLY1, RLE_ENEMY1_JELLY2, RLE_ENEMY1_JELLY3, RLE_ENEMY1_JELLY4, RLE_ENEMY1_JELLY5, RLE_ENEMY1_JELLY6, RLE_ENEMY1_MINETHROWER, RLE_ENEMY1_MINETHROWER2, RLE_ENEMY1_CURVER, RLE_ENEMY1_STINGER2, RLE_ENEMY1_BLASTER, RLE_ENEMY1_STINGER3, RLE_ENEMY1_FLAKKER, RLE_ENEMY1_SUPERJELLY, RLE_ENEMY1_HIVE, RLE_ENEMY1_STINGER4, RLE_ENEMY1_FLAKKER2, RLE_ENEMY1_BOLTER, RLE_ENEMY1_BOLTER2, RLE_ENEMY1_TORPER1_1, RLE_ENEMY1_TORPER1_2, RLE_ENEMY1_TORPER1_3, RLE_ENEMY1_TORPER1_4, RLE_ENEMY1_HURLER, RLE_ENEMY1_HURLER2, ENEMY1_RLES }; enum { BMP_ENEMY_PULSER1_V, BMP_ENEMY_PULSER1_H, BMP_ENEMY_PULSER2_V, BMP_ENEMY_PULSER2_H, ENEMY_BMPS }; enum { RLE_ENEMY2_CRAWLER2_D, RLE_ENEMY2_CRAWLER2_L, RLE_ENEMY2_CRAWLER2_R, RLE_ENEMY2_CRAWLER3_D, RLE_ENEMY2_CRAWLER3_L, RLE_ENEMY2_CRAWLER3_R, RLE_ENEMY2_CRAWLER4_D, RLE_ENEMY2_CRAWLER4_L, RLE_ENEMY2_CRAWLER4_R, ENEMY2_RLES }; enum { RLE_ENEMY3_FIREBASE, RLE_ENEMY3_FIREBASE2, RLE_ENEMY3_FIREBASE3, RLE_ENEMY3_BOSS1, RLE_ENEMY3_BOSS3, RLE_ENEMY3_BOSS4, ENEMY3_RLES }; enum { RLE_ENEMY4_GUARDIAN1, RLE_ENEMY4_BRACKET1, RLE_ENEMY4_WORMER1, RLE_ENEMY4_BRACKET2, RLE_ENEMY4_BRACKET3, RLE_ENEMY4_BRACKET4, RLE_ENEMY4_GUARDIAN2, RLE_ENEMY4_GUARDIAN3, RLE_ENEMY4_WORMER2, RLE_ENEMY4_WORMER3, RLE_ENEMY4_FORKER1, RLE_ENEMY4_FORKER2, RLE_ENEMY4_MINER1, RLE_ENEMY4_MINER2, ENEMY4_RLES }; enum { RLE_ENEMY6_MINER3, RLE_ENEMY6_CIRCLER1, RLE_ENEMY6_MULTI1, RLE_ENEMY6_MULTI2, RLE_ENEMY6_MULTI3, RLE_ENEMY6_GUARDIAN4, RLE_ENEMY6_GUARDIAN5, RLE_ENEMY6_BRACKET5, RLE_ENEMY6_CURVE1, RLE_ENEMY6_CURVE2, RLE_ENEMY6_CURVE3, ENEMY6_RLES }; enum { RLE_ENEMY5_HEAD1, RLE_ENEMY5_OVERTRIANGLER, RLE_ENEMY5_DEFENDER1, RLE_ENEMY5_DEFENDER2, RLE_ENEMY5_DEFENDER3, RLE_ENEMY5_OVERDISRUPTER, ENEMY5_RLES }; enum { RLE_ENEMY7_BOSS1_1, RLE_ENEMY7_BOSS1_2, RLE_ENEMY7_BOSS1_3, RLE_ENEMY7_BOSS2_2, RLE_ENEMY7_BOSS3_2, RLE_ENEMY7_BEAMER1, RLE_ENEMY7_BEAMER2, ENEMY7_RLES }; enum { RLE_ENEMY8_BOSS3, RLE_ENEMY8_BOSS2, RLE_ENEMY8_BOSS2_3, RLE_ENEMY8_BOSS3_3, ENEMY8_RLES }; enum { RLE_ENEMY9_DISRUPTER1, RLE_ENEMY9_DISRUPTER2, RLE_ENEMY9_DISRUPTER3, RLE_ENEMY9_TRIANGLER1, RLE_ENEMY9_TRIANGLER2, RLE_ENEMY9_TRIANGLER3, RLE_ENEMY9_WORMER4, ENEMY9_RLES }; enum { RLE_SMALL1_GREEN_BLOB_L, RLE_SMALL1_GREEN_BLOB_M, RLE_SMALL1_GREEN_BLOB_S, RLE_SMALL1_BLUE_BLOB_L, RLE_SMALL1_BLUE_BLOB_M, RLE_SMALL1_BLUE_BLOB_S, RLE_SMALL1_ORANGE_BLOB_L, RLE_SMALL1_ORANGE_BLOB_M, RLE_SMALL1_ORANGE_BLOB_S, RLE_SMALL1_YELLOW_BLOB_L, RLE_SMALL1_YELLOW_BLOB_M, RLE_SMALL1_YELLOW_BLOB_S, RLE_SMALL1_PREMINE, RLE_SMALL1_MINE1, RLE_SMALL1_MINE2, RLE_SMALL1_MINE3, RLE_SMALL1_PRESEEKMINE, RLE_SMALL1_SEEKMINE1, RLE_SMALL1_SEEKMINE2, RLE_SMALL1_SEEKMINE3, RLE_SMALL1_PURPLE_BLOB_L, RLE_SMALL1_PURPLE_BLOB_M, RLE_SMALL1_PURPLE_BLOB_S, RLE_SMALL1_RED_BLOB_L, RLE_SMALL1_RED_BLOB_M, RLE_SMALL1_RED_BLOB_S, SMALL1_RLES }; enum { RLE_SMALL3_BLUE_BLOB_1, RLE_SMALL3_BLUE_BLOB_2, RLE_SMALL3_BLUE_BLOB_3, RLE_SMALL3_BLUE_BLOB_4, RLE_SMALL3_BLUE_BLOB_5, RLE_SMALL3_BLUE_BLOB_6, RLE_SMALL3_BLUE_BLOB_7, RLE_SMALL3_ORANGE_BLOB_1, RLE_SMALL3_ORANGE_BLOB_2, RLE_SMALL3_ORANGE_BLOB_3, RLE_SMALL3_ORANGE_BLOB_4, RLE_SMALL3_ORANGE_BLOB_5, RLE_SMALL3_ORANGE_BLOB_6, RLE_SMALL3_ORANGE_BLOB_7, RLE_SMALL3_GREEN_BLOB_1, RLE_SMALL3_GREEN_BLOB_2, RLE_SMALL3_GREEN_BLOB_3, RLE_SMALL3_GREEN_BLOB_4, RLE_SMALL3_GREEN_BLOB_5, RLE_SMALL3_GREEN_BLOB_6, RLE_SMALL3_GREEN_BLOB_7, RLE_SMALL3_YELLOW_BLOB_1, RLE_SMALL3_YELLOW_BLOB_2, RLE_SMALL3_YELLOW_BLOB_3, RLE_SMALL3_YELLOW_BLOB_4, RLE_SMALL3_YELLOW_BLOB_5, RLE_SMALL3_YELLOW_BLOB_6, RLE_SMALL3_YELLOW_BLOB_7, RLE_SMALL3_PULSE1, RLE_SMALL3_PULSE2, RLE_SMALL3_PULSE3, RLE_SMALL3_PULSE4, RLE_SMALL3_PULSE2_1, RLE_SMALL3_PULSE2_2, RLE_SMALL3_PULSE2_3, RLE_SMALL3_PULSE2_4, SMALL3_RLES }; enum { BMP_SMALL4_EYE_1, BMP_SMALL4_EYE_2, BMP_SMALL4_EYE_3, BMP_SMALL4_EYE_4, BMP_SMALL4_EYE_5, BMP_SMALL4_EYE_6, BMP_SMALL4_EYE_7, BMP_SMALL4_BEYE_1, BMP_SMALL4_BEYE_2, BMP_SMALL4_BEYE_3, BMP_SMALL4_BEYE_4, BMP_SMALL4_BEYE_5, BMP_SMALL4_BEYE_6, BMP_SMALL4_BEYE_7, BMP_SMALL4_SHIELD_1, BMP_SMALL4_SHIELD_2, BMP_SMALL4_SHIELD_3, BMP_SMALL4_SHIELD_4, BMP_SMALL4_SHIELD_5, BMP_SMALL4_SHIELD_6, BMP_SMALL4_SHIELD_7, BMP_SMALL4_SHIELD_8, SMALL4_BMPS }; enum { BMP_SHIELD_UR1, BMP_SHIELD_UR2, BMP_SHIELD_UR3, BMP_SHIELD_UR4, BMP_SHIELD_UR5, BMP_SHIELD_UR6, BMP_SHIELD_UR7, BMP_SHIELD_UR8, BMP_SHIELD_DR1, BMP_SHIELD_DR2, BMP_SHIELD_DR3, BMP_SHIELD_DR4, BMP_SHIELD_DR5, BMP_SHIELD_DR6, BMP_SHIELD_DR7, BMP_SHIELD_DL2, BMP_SHIELD_DL3, BMP_SHIELD_DL4, BMP_SHIELD_DL5, BMP_SHIELD_DL6, BMP_SHIELD_DL7, BMP_SHIELD_DL8, SHIELD_BMPS }; enum { BMP_SMALL2_MISSILE_1, BMP_SMALL2_MISSILE_2, BMP_SMALL2_MISSILE_3, BMP_SMALL2_MISSILE_4, BMP_SMALL2_MISSILE_5, BMP_SMALL2_MISSILE_6, BMP_SMALL2_MISSILE_7, BMP_SMALL2_BOMB, BMP_SMALL2_SIDE_BOMB, SMALL2_BMPS }; enum { RLE_LSHIP_BLUE, RLE_LSHIP_GREEN, RLE_LSHIP_YELLOW, RLE_LSHIP_RED, RLE_LSHIP_LINES }; enum { STYLE_NONE, STYLE_HURRY, STYLE_ONLINE, STYLE_UPGRADE1, STYLE_UPGRADE2, STYLE_UPGRADE3, STYLE_UPGRADE4, STYLE_UPGRADE5, STYLE_NEWLEVEL }; enum { PRETILE_BG_CHECK, PRETILE_OUTER1_D, PRETILE_OUTER1_DR, PRETILE_OUTER1_OUT, // 10 PRETILE_EYE1_CLOSED, PRETILE_EYE1_OPEN, PRETILE_BG_DIAMOND, PRETILE_BG_MESH1, PRETILE_BG_MESH2, PRETILE_BG_FLOWERS, PRETILE_BG_SQUARES, PRETILE_OUTER2_D, PRETILE_OUTER2_DR, PRETILE_OUTER2_OUT, PRETILE_BG_DIAMOND2, PRETILE_BG_CROSS, PRETILE_BG_SQUARES2, // 30 PRETILE_BG_CIRCLES, PRETILE_BG_GRID, PRETILE_BG_THING, PRETILE_BG_PATTERN, PRETILE_EYE2_CLOSED, PRETILE_EYE2_OPEN, PRETILE_EYE3_CLOSED, PRETILE_EYE3_OPEN, PRETILE_EYE4_CLOSED, PRETILE_EYE4_OPEN, PRETILE_OUTER3_D, PRETILE_OUTER3_DR, PRETILE_OUTER3_OUT, PRETILE_OUTER4_D, PRETILE_OUTER4_DR, PRETILE_OUTER4_OUT, PRETILE_OUTER5_D, PRETILE_OUTER5_DR, PRETILE_OUTER5_OUT, PRETILE_OUTER6_D, PRETILE_OUTER6_DR, PRETILE_OUTER6_OUT, PRETILE_OUTER7_D, PRETILE_OUTER7_DR, PRETILE_OUTER7_OUT, NO_PRETILE_BMPS // need to compile display_in to put new ones in }; enum { PRETILE_M_UD, PRETILE_M_LR, PRETILE_M_UR, PRETILE_M_ULR, PRETILE_M_UDLR, PRETILE_M_U, PRETILE_M_NODE, PRETILE_M_EYE_UDLR, NO_PRETILE_M_BMPS // plus specials... }; enum { MAZE_STRAIGHT, MAZE_ZIGZAG, MAZE_CIRCLES, MAZE_ZIP, MAZE_RINGS, MAZE_TRIANGLES, MAZE_PIPES, MAZE_BOXES, MAZE_WIRES, MAZE_SQUARES, MAZE_TUBES, MAZE_STUDDED, MAZE_DIAMONDS, NO_MAZES }; //void init_messages(void); void send_message(int play, const char *msg, int style); struct effects_struct { int type; int x; int y; int x1; int x2; int y1; int y2; int things [5]; }; #define MAX_EFFECTS 15 enum { EFFECT_NONE, EFFECT_REDBEAM, EFFECT_BLUEBEAM, EFFECT_RED_ARC, EFFECT_ZAP_AIM, EFFECT_WAVE1, EFFECT_WAVE2 }; #ifndef COMPILING_DISPLAYC extern int graphics_mode; extern int scr_x; extern int scr_y; extern int sp_window_width; extern int tp_window_width; extern int grid_offset_x_1p; extern int grid_offset_x_2p; extern int grid_offset_y; extern int special_600_y; extern int text_offset_x_1p; extern int text_offset_x_2p; extern int text_offset_y; extern int text_offset_x; extern struct effects_struct effect [MAX_EFFECTS]; extern int grid_finetune_x_1p; extern int grid_finetune_x_2p; extern int grid_finetune_y; extern int visible_grids_y; #endif enum { GMODE_640_480, GMODE_800_600, GMODE_1024_768 }; overgod-1.0/eclass.c0000644000175000001440000015613310310757124013456 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: eclass.c History: 11/9/2005 - Version 1.0 finalised This file contains: - the enemy structure */ #include "config.h" #include "globvars.h" #include "palette.h" #define HIGH_DRAG 0.06 #define MED_DRAG 0.03 #define LOW_DRAG 0.01 #define VERY_LOW_DRAG 0.005 #define GEN_LOW 3 #define GEN_MED 5 #define GEN_HIGH 8 struct enemy_classification eclass [NO_ENEMY_TYPES] = { { 0, // int max_armour; 0, // level 0, // common 0, // score 0, // int radius; 0, // int edge_radius; 0, // drag 0, // mass AI_NONE, // ai_type 0, // acceleration 0, // colour1 0, // colour2 0, // turrets 0, // attributes 0, // generous 0, // range 0 // slew }, { // guardian1 350, // int max_armour; 1, // level 3, // common 10, // score 19000, // int radius; 60000, // int edge_radius; MED_DRAG, // drag 200, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_GREEN6, // col1 COLOUR_GREEN1, // col2 0, // turrets PITCH_GUARDIAN, // attributes 30, // acceleration 0, // impulse delay 900000, // range 3, // slew ROLE_TARGET }, { // puffer 300, // int max_armour; 1, // level 3, // common 20, // score 15000, // int radius; 23000, // int edge_radius; LOW_DRAG, // drag 150, // mass AI_PERIODIC_STINGER, // AI GEN_LOW, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_MEDIUM, // pitch 2500, // acceleration 99, // impulse delay 900000, // range 5, // slew ROLE_TARGET }, { // Bracket1 500, // int max_armour; 5, // level 2, // common 30, // score 11000, // int radius; 54000, // int edge_radius; MED_DRAG, // drag 250, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_BRACKET, // pitch 30, // acceleration 0, // impulse delay 900000, // range 5, // slew ROLE_TARGET }, { // wormer1 500, // int max_armour; 8, // level 2, // common 100, // score 10000, // int radius; 23000, // int edge_radius; LOW_DRAG, // drag 400, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_GUARDIAN, // pitch 15, // acceleration 99, // impulse delay 900000, // range 0, // slew ROLE_TARGET }, { // head1 800, // int max_armour; 4, // level 0, // common 100, // score 13000, // int radius; 81000, // int edge_radius; HIGH_DRAG, // drag 2400, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 2, // turrets PITCH_MINIBOSS1, // pitch 35, // acceleration 99, // impulse delay 900000, // range 4, // slew ROLE_MINIBOSS }, { // head1_eye1 300, // int max_armour; 0, // level 0, // common 100, // score 8000, // int radius; 0, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_TURRET1, // pitch 0, // acceleration 0, // impulse delay 900000, // range 7, // slew ROLE_TURRET }, { // head1_eye2 300, // int max_armour; 0, // level 0, // common 100, // score 8000, // int radius; 0, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_TURRET1, // pitch 0, // acceleration 0, // impulse delay 900000, // range 7, // slew ROLE_TURRET }, { // head1_eye3 300, // int max_armour; 0, // level 0, // common 100, // score 8000, // int radius; 0, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_TURRET1, // pitch 0, // acceleration 0, // impulse delay 900000, // range 7, // slew ROLE_TURRET }, { // puffer2 600, // int max_armour; 6, // level 2, // common 200, // score 18000, // int radius; 27000, // int edge_radius; LOW_DRAG, // drag 300, // mass AI_PERIODIC_STINGER, // AI GEN_LOW, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_GUARDIAN, // pitch 2500, // acceleration 99, // impulse delay 900000, // range 2, // slew ROLE_TARGET }, { // spinner1 350, // int max_armour; 4, // level 3, // common 200, // score 10000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_GREEN6, // col1 COLOUR_GREEN1, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 0, // acceleration 0, // impulse delay 900000, // range 1, // slew ROLE_EXTRA }, // NOTE: Spinners have same stats as spikeys { // spinner2 500, // int max_armour; 8, // level 3, // common 400, // score 10000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 0, // acceleration 0, // impulse delay 900000, // range 1, // slew ROLE_EXTRA }, { // spinner3 600, // int max_armour; 10, // level 3, // common 800, // score 15000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_LARGE_SPINNER, // pitch 0, // acceleration 0, // impulse delay 900000, // range 1, // slew ROLE_EXTRA }, { // spinner4 700, // int max_armour; 12, // level 3, // common 1200, // score 10000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_RED6, // col1 COLOUR_RED2, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 0, // acceleration 0, // impulse delay 900000, // range 1, // slew ROLE_EXTRA }, { // spinner5 800, // int max_armour; 14, // level 3, // common 1500, // score 10000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_GREY5, // col1 COLOUR_GREY2, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 0, // acceleration 0, // impulse delay 900000, // range 16, // slew ROLE_EXTRA }, { // Bracket2 800, // int max_armour; 7, // level 2, // common 500, // score 10000, // int radius; 54000, // int edge_radius; MED_DRAG, // drag 350, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_BRACKET, // pitch 30, // acceleration 0, // impulse delay 900000, // range 4, // slew ROLE_TARGET }, { // Bracket3 900, // int max_armour; 10, // level 2, // common 800, // score 11000, // int radius; 54000, // int edge_radius; MED_DRAG, // drag 350, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_BRACKET, // pitch 30, // acceleration 0, // impulse delay 900000, // range 4, // slew ROLE_TARGET }, { // Bracket4 900, // int max_armour; 12, // level 2, // common 800, // score 10000, // int radius; 54000, // int edge_radius; MED_DRAG, // drag 350, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 2, // turrets PITCH_BRACKET, // pitch 15, // acceleration 0, // impulse delay 1900000, // range 4, // slew ROLE_TARGET }, { // Bracket4 turret 400, // int max_armour; 12, // level 0, // common 200, // score 7000, // int radius; 10000, // int edge_radius; MED_DRAG, // drag 100, // mass AI_TURRET, // AI 0, // generous COLOUR_BLUE5, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_TURRET1, // pitch 0, // acceleration 0, // impulse delay 900000, // range 2, // slew ROLE_TURRET }, { // Fighter1 200, // int max_armour; 2, // level 2, // common 50, // score 8000, // int radius; 10000, // int edge_radius; LOW_DRAG, // drag 150, // mass AI_FIGHTER, // AI GEN_LOW, // generous COLOUR_GREEN6, // col1 COLOUR_GREEN1, // col2 0, // turrets PITCH_FIGHTER, // pitch 50, // acceleration 0, // impulse delay 500000, // range 16, // slew ROLE_EXTRA }, { // Fighter2 note fighter2 is higher-level than 3 300, // int max_armour; 8, // level 2, // common 50, // score 8000, // int radius; 10000, // int edge_radius; LOW_DRAG, // drag 150, // mass AI_FIGHTER, // AI GEN_LOW, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_FIGHTER, // pitch 60, // acceleration 0, // impulse delay 500000, // range 16, // slew ROLE_EXTRA }, { // Fighter3 250, // int max_armour; 5, // level 2, // common 50, // score 8000, // int radius; 10000, // int edge_radius; LOW_DRAG, // drag 150, // mass AI_FIGHTER, // AI GEN_LOW, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_FIGHTER, // pitch 55, // acceleration 0, // impulse delay 500000, // range 16, // slew ROLE_EXTRA }, { // Fighter4 400, // int max_armour; 10, // level 2, // common 50, // score 8000, // int radius; 10000, // int edge_radius; LOW_DRAG, // drag 150, // mass AI_FIGHTER, // AI GEN_LOW, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_FIGHTER, // pitch 70, // acceleration 0, // impulse delay 500000, // range 18, // slew ROLE_EXTRA }, { // Fighter5 450, // int max_armour; 13, // level 2, // common 50, // score 8000, // int radius; 10000, // int edge_radius; LOW_DRAG, // drag 150, // mass AI_FIGHTER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_FIGHTER, // pitch 75, // acceleration 0, // impulse delay 500000, // range 20, // slew ROLE_EXTRA }, { // Bomber1 400, // int max_armour; 4, // level 2, // common 150, // score 10000, // int radius; 12000, // int edge_radius; MED_DRAG, // drag 250, // mass AI_BOMBER, // AI GEN_MED, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 80, // acceleration 0, // impulse delay 500000, // range 8, // slew ROLE_EXTRA }, { // Bomber2 500, // int max_armour; 8, // level 2, // common 150, // score 10000, // int radius; 12000, // int edge_radius; MED_DRAG, // drag 250, // mass AI_BOMBER, // AI GEN_MED, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 100, // acceleration 0, // impulse delay 500000, // range 8, // slew ROLE_EXTRA }, { // Bomber3 600, // int max_armour; 12, // level 2, // common 250, // score 10000, // int radius; 12000, // int edge_radius; MED_DRAG, // drag 250, // mass AI_BOMBER, // AI GEN_MED, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 110, // acceleration 0, // impulse delay 500000, // range 8, // slew ROLE_EXTRA }, { // Cruiser1 900, // int max_armour; 6, // level 2, // common 500, // score 19000, // int radius; 17000, // int edge_radius; MED_DRAG, // drag 500, // mass AI_CRUISER, // AI 0, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 1, // turrets PITCH_GUARDIAN, // pitch 80, // acceleration 0, // impulse delay 400000, // range 5, // slew ROLE_TARGET }, { // cruiser1 turret 400, // int max_armour; 6, // level 0, // common 100, // score 9000, // int radius; 12000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_TURRET1, // pitch 0, // acceleration 0, // impulse delay 400000, // range 7, // slew ROLE_TURRET }, { // guardian2 600, // int max_armour; 7, // level 3, // common 150, // score 19000, // int radius; 60000, // int edge_radius; MED_DRAG, // drag 200, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_GUARDIAN, // pitch 35, // acceleration 0, // impulse delay 900000, // range 4, // slew ROLE_TARGET }, { // guardian3 800, // int max_armour; 10, // level 3, // common 500, // score 19000, // int radius; 60000, // int edge_radius; MED_DRAG, // drag 200, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_GUARDIAN, // pitch 37, // acceleration 0, // impulse delay 900000, // range 3, // slew ROLE_TARGET }, { // spikey1 300, // int max_armour; 3, // level 3, // common 200, // score 10000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_GREEN6, // col1 COLOUR_GREEN1, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 0, // acceleration 0, // impulse delay 9000000, // range 6, // slew ROLE_EXTRA }, { // spikey2 400, // int max_armour; 7, // level 3, // common 400, // score 10000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 0, // acceleration 0, // impulse delay 9000000, // range 4, // slew ROLE_EXTRA }, { // spikey3 500, // int max_armour; 9, // level 3, // common 800, // score 15000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_LARGE_SPINNER, // pitch 0, // acceleration 0, // impulse delay 9000000, // range 4, // slew ROLE_EXTRA }, { // spikey4 600, // int max_armour; 12, // level 3, // common 1200, // score 10000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_RED6, // col1 COLOUR_RED2, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 0, // acceleration 0, // impulse delay 9000000, // range 4, // slew ROLE_EXTRA }, { // spikey5 750, // int max_armour; 14, // level 3, // common 1500, // score 10000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE2, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 0, // acceleration 0, // impulse delay 9000000, // range 1, // slew ROLE_EXTRA }, { // wormer2 800, // int max_armour; 10, // level 2, // common 300, // score 10000, // int radius; 23000, // int edge_radius; LOW_DRAG, // drag 400, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_GUARDIAN, // pitch 18, // acceleration 99, // impulse delay 900000, // range 0, // slew ROLE_TARGET }, { // wormer3 1000, // int max_armour; 13, // level 2, // common 600, // score 10000, // int radius; 23000, // int edge_radius; LOW_DRAG, // drag 400, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_GREY5, // col1 COLOUR_GREY2, // col2 0, // turrets PITCH_GUARDIAN, // pitch 15, // acceleration 99, // impulse delay 900000, // range 0, // slew ROLE_TARGET }, { // forker1 600, // int max_armour; 9, // level 2, // common 1200, // score 13000, // int radius; 27000, // int edge_radius; LOW_DRAG, // drag 400, // mass AI_STINGER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_MEDIUM, // pitch 2200, // acceleration 40, // impulse delay 900000, // range 3, // slew ROLE_TARGET }, { // forker2 800, // int max_armour; 13, // level 2, // common 1500, // score 13000, // int radius; 27000, // int edge_radius; LOW_DRAG, // drag 500, // mass AI_STINGER, // AI GEN_LOW, // generous COLOUR_GREY5, // col1 COLOUR_GREY1, // col2 0, // turrets PITCH_MEDIUM, // pitch 2000, // acceleration 35, // impulse delay 900000, // range 4, // slew ROLE_TARGET }, { // miner1 450, // int max_armour; 5, // level 2, // common 20, // score 14000, // int radius; 60000, // int edge_radius; HIGH_DRAG, // drag 400, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_HEAVY, // pitch 50, // acceleration 0, // impulse delay 2900000, // range 0, // slew ROLE_TARGET }, { // miner2 650, // int max_armour; 8, // level 2, // common 120, // score 14000, // int radius; 60000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_HEAVY, // pitch 55, // acceleration 0, // impulse delay 2900000, // range 0, // slew ROLE_TARGET }, { // miner3 800, // int max_armour; 11, // level 2, // common 450, // score 14000, // int radius; 60000, // int edge_radius; HIGH_DRAG, // drag 600, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 1, // turrets PITCH_HEAVY, // pitch 50, // acceleration 0, // impulse delay 2900000, // range 0, // slew ROLE_TARGET }, { // Miner3 turret 400, // int max_armour; 11, // level 0, // common 200, // score 7000, // int radius; 10000, // int edge_radius; MED_DRAG, // drag 100, // mass AI_TURRET, // AI 0, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_TURRET1, // pitch 0, // acceleration 0, // impulse delay 900000, // range 5, // slew ROLE_TURRET }, { // Cruiser2 1000, // int max_armour; 9, // level 2, // common 1000, // score 19000, // int radius; 17000, // int edge_radius; MED_DRAG, // drag 500, // mass AI_CRUISER, // AI 0, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 1, // turrets PITCH_GUARDIAN, // pitch 85, // acceleration 0, // impulse delay 400000, // range 6, // slew ROLE_TARGET }, { // cruiser2 turret 350, // int max_armour; 9, // level 0, // common 150, // score 9000, // int radius; 12000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_TURRET1, // pitch 0, // acceleration 0, // impulse delay 400000, // range 6, // slew ROLE_TURRET }, { // Cruiser3 1200, // int max_armour; 12, // level 2, // common 1300, // score 19000, // int radius; 17000, // int edge_radius; MED_DRAG, // drag 500, // mass AI_CRUISER, // AI 0, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 1, // turrets PITCH_GUARDIAN, // pitch 80, // acceleration 0, // impulse delay 400000, // range 6, // slew ROLE_TARGET }, { // cruiser3 turret 400, // int max_armour; 12, // level 0, // common 200, // score 9000, // int radius; 12000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_TURRET1, // pitch 0, // acceleration 0, // impulse delay 200000, // range 4, // slew ROLE_TURRET }, { // Cruiser4 1300, // int max_armour; 15, // level 2, // common 1500, // score 19000, // int radius; 17000, // int edge_radius; MED_DRAG, // drag 500, // mass AI_CRUISER, // AI 0, // generous COLOUR_GREY5, // col1 COLOUR_GREY1, // col2 1, // turrets PITCH_GUARDIAN, // pitch 78, // acceleration 0, // impulse delay 400000, // range 6, // slew ROLE_TARGET }, { // cruiser4 turret 550, // int max_armour; 15, // level 0, // common 250, // score 9000, // int radius; 12000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_GREY5, // col1 COLOUR_GREY1, // col2 0, // turrets PITCH_TURRET1, // pitch 0, // acceleration 0, // impulse delay 400000, // range 3, // slew ROLE_TURRET }, { // Boss1_1 2000, // int max_armour; 5, // level 10, // common 500, // score 55000, // int radius; 118000, // int edge_radius; HIGH_DRAG, // drag 3000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 4, // turrets PITCH_BOSS1, // pitch 35, // acceleration 99, // impulse delay 900000, // range 4, // slew ROLE_BOSS }, { // Boss1_2 2000, // int max_armour; 5, // level 10, // common 500, // score 40000, // int radius; 168000, // int edge_radius; HIGH_DRAG, // drag 3000, // mass AI_STINGER, // AI GEN_HIGH, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 3, // turrets PITCH_BOSS1, // pitch 3800, // acceleration 60, // impulse delay 1900000, // range 4, // slew ROLE_BOSS }, { // Boss1_3 2000, // int max_armour; 5, // level 10, // common 500, // score 40000, // int radius; 118000, // int edge_radius; HIGH_DRAG, // drag 3000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 3, // turrets PITCH_BOSS1, // pitch 43, // acceleration 99, // impulse delay 900000, // range 3, // slew ROLE_BOSS }, { // Boss1_turret1 500, // int max_armour; 5, // level 0, // common 150, // score 15000, // int radius; 18000, // int edge_radius; 0, // drag 200, // mass AI_TURRET, // AI 0, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 6, // slew ROLE_TURRET }, { // Boss1_turret2 500, // int max_armour; 5, // level 0, // common 150, // score 15000, // int radius; 18000, // int edge_radius; 0, // drag 200, // mass AI_TURRET, // AI 0, // generous COLOUR_GREEN6, // col1 COLOUR_GREEN1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 6, // slew ROLE_TURRET }, { // Boss1_turret3 500, // int max_armour; 5, // level 0, // common 150, // score 15000, // int radius; 18000, // int edge_radius; 0, // drag 200, // mass AI_TURRET, // AI 0, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 6, // slew ROLE_TURRET }, { // circler1 1000, // int max_armour; 10, // level 2, // 2, // common 500, // score 10000, // int radius; 39000, // int edge_radius; MED_DRAG, // drag 200, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_BRACKET, // pitch 37, // acceleration 0, // impulse delay 900000, // range 0, // slew ROLE_TARGET }, { // blatter1 350, // int max_armour; 4, // level 3, // common 200, // score 16000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_GREEN6, // col1 COLOUR_GREEN1, // col2 0, // turrets PITCH_LARGE_SPINNER, // pitch 0, // acceleration 0, // impulse delay 300000, // range 8, // slew ROLE_EXTRA }, { // blatter2 500, // int max_armour; 6, // level 3, // common 400, // score 16000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_LARGE_SPINNER, // pitch 0, // acceleration 0, // impulse delay 300000, // range 6, // slew ROLE_EXTRA }, { // blatter3 600, // int max_armour; 9, // level 3, // common 600, // score 16000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_LARGE_SPINNER, // pitch 0, // acceleration 0, // impulse delay 300000, // range 3, // slew ROLE_EXTRA }, { // blatter4 700, // int max_armour; 11, // level 3, // common 800, // score 16000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_RED6, // col1 COLOUR_RED2, // col2 0, // turrets PITCH_LARGE_SPINNER, // pitch 0, // acceleration 0, // impulse delay 300000, // range 8, // slew ROLE_EXTRA }, { // blatter5 800, // int max_armour; 14, // level 3, // common 1000, // score 11000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE2, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 0, // acceleration 0, // impulse delay 400000, // range 4, // slew ROLE_EXTRA }, { // minefielder1 800, // int max_armour; 12, // level 5, // common 1000, // score 15000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 800, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_RED6, // col1 COLOUR_RED2, // col2 0, // turrets PITCH_HEAVY_SPINNER, // pitch 0, // acceleration 0, // impulse delay 2900000, // range 3, // slew ROLE_EXTRA }, { // bloater1 100, // int max_armour; 8, // level 2, // common 1000, // score 16000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 100, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE2, // col2 0, // turrets PITCH_LARGE_SPINNER, // pitch 0, // acceleration 0, // impulse delay 100, // range 0, // slew ROLE_EXTRA }, { // bloater2 100, // int max_armour; 13, // level 2, // common 1000, // score 16000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 100, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE2, // col2 0, // turrets PITCH_LARGE_SPINNER, // pitch 0, // acceleration 0, // impulse delay 100, // range 0, // slew ROLE_EXTRA }, { // Boss2 3000, // int max_armour; 10, // level 0, // common 500, // score 35000, // int radius; 125000, // int edge_radius; HIGH_DRAG, // drag 5000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 4, // turrets PITCH_BOSS2, // pitch 65, // acceleration 99, // impulse delay 1900000, // range 0, // slew ROLE_BOSS }, { // Boss2_turret1 600, // int max_armour; 10, // level 0, // common 400, // score 12000, // int radius; 15000, // int edge_radius; 0, // drag 200, // mass AI_TURRET, // AI 0, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 6, // slew ROLE_TURRET }, { // Boss2_turret2 600, // int max_armour; 10, // level 0, // common 400, // score 12000, // int radius; 15000, // int edge_radius; 0, // drag 200, // mass AI_TURRET, // AI 0, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 4, // slew ROLE_TURRET }, { // Boss2_turret3 600, // int max_armour; 10, // level 0, // common 400, // score 12000, // int radius; 15000, // int edge_radius; 0, // drag 200, // mass AI_TURRET, // AI 0, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 4, // slew ROLE_TURRET }, { // Boss2_turret4 600, // int max_armour; 10, // level 0, // common 400, // score 12000, // int radius; 15000, // int edge_radius; 0, // drag 200, // mass AI_TURRET, // AI 0, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 4, // slew ROLE_TURRET }, { // shielder1 750, // int max_armour; 11, // level 3, // common 1000, // score 15000, // int radius; 25000, // int edge_radius; MED_DRAG, // drag 500, // mass AI_DRIFTER, // AI GEN_MED, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE2, // col2 0, // turrets PITCH_LARGE_SPINNER, // pitch 20, // acceleration 0, // impulse delay 1000000, // range 4, // slew ROLE_EXTRA }, { // puffer3 900, // int max_armour; 11, // level 2, // common 800, // score 14000, // int radius; 24000, // int edge_radius; LOW_DRAG, // drag 300, // mass AI_PERIODIC_STINGER, // AI GEN_LOW, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_MEDIUM, // pitch 3300, // acceleration 66, // impulse delay 1400000, // range 2, // slew ROLE_TARGET }, { // puffer4 1200, // int max_armour; 15, // level 2, // common 1300, // score 21000, // int radius; 29000, // int edge_radius; LOW_DRAG, // drag 500, // mass AI_PERIODIC_STINGER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_GUARDIAN, // pitch 2600, // acceleration 66, // impulse delay 1400000, // range 2, // slew ROLE_TARGET }, { // pulser1 800, // int max_armour; 6, // level 3, // common 90, // score 17000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 400, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_GUARDIAN, // pitch 30, // acceleration 0, // impulse delay 9000000, // range 3, // slew ROLE_TARGET }, { // pulser2 1200, // int max_armour; 11, // level 3, // common 500, // score 17000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 400, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_GUARDIAN, // pitch 25, // acceleration 0, // impulse delay 9000000, // range 3, // slew ROLE_TARGET }, { // zapper1 600, // int max_armour; 11, // level 3, // common 500, // score 13000, // int radius; 25000, // int edge_radius; LOW_DRAG, // drag 200, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_LARGE_SPINNER, // pitch 0, // acceleration 0, // impulse delay 200000, // range 16, // slew ROLE_EXTRA }, { // multi1 250, // int max_armour; 1, // level 3, // common 10, // score 15000, // int radius; 29000, // int edge_radius; MED_DRAG, // drag 200, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_GREEN6, // col1 COLOUR_GREEN1, // col2 0, // turrets PITCH_MEDIUM, // pitch 24, // acceleration 0, // impulse delay 900000, // range 2, // slew ROLE_TARGET }, { // multi2 600, // int max_armour; 8, // level 3, // common 150, // score 13000, // int radius; 60000, // int edge_radius; MED_DRAG, // drag 200, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_MEDIUM, // pitch 30, // acceleration 0, // impulse delay 900000, // range 2, // slew ROLE_TARGET }, { // multi3 1000, // int max_armour; 12, // level 3, // common 500, // score 13000, // int radius; 60000, // int edge_radius; MED_DRAG, // drag 200, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_MEDIUM, // pitch 32, // acceleration 0, // impulse delay 900000, // range 2, // slew ROLE_TARGET }, { // defender1 1200, // int max_armour; 4, // level 3, // common 100, // score 25000, // int radius; 131000, // int edge_radius; HIGH_DRAG, // drag 3000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_GREEN6, // col1 COLOUR_GREEN1, // col2 2, // turrets PITCH_MINIBOSS1, // pitch 35, // acceleration 0, // impulse delay 2000000, // range 3, // slew ROLE_MINIBOSS }, { // defender1_turret1 500, // int max_armour; 4, // level 0, // common 100, // score 12000, // int radius; 15000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_GREEN6, // col1 COLOUR_GREEN1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 3, // slew ROLE_TURRET }, { // defender1_turret2 500, // int max_armour; 4, // level 0, // common 100, // score 12000, // int radius; 15000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_GREEN6, // col1 COLOUR_GREEN1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 3, // slew ROLE_TURRET }, { // defender1_turret3 500, // int max_armour; 4, // level 0, // common 100, // score 12000, // int radius; 15000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_GREEN6, // col1 COLOUR_GREEN1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 0, // slew ROLE_TURRET }, { // overspinner 3500, // int max_armour; 13, // level 3, // common 2500, // score 30000, // int radius; 120000, // int edge_radius; HIGH_DRAG, // drag 2500, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_MINIBOSS2, // pitch 0, // acceleration 0, // impulse delay 9000000, // range 16, // slew ROLE_MINIBOSS }, { // overspikey 3500, // int max_armour; 13, // level 3, // common 2500, // score 30000, // int radius; 120000, // int edge_radius; HIGH_DRAG, // drag 2500, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_MINIBOSS2, // pitch 0, // acceleration 0, // impulse delay 9000000, // range 16, // slew ROLE_MINIBOSS }, { // underspikey 1500, // int max_armour; 5, // level 3, // common 1000, // score 26000, // int radius; 120000, // int edge_radius; HIGH_DRAG, // drag 2000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_MINIBOSS1, // pitch 0, // acceleration 0, // impulse delay 9000000, // range 3, // slew ROLE_MINIBOSS }, { // overblatter 3000, // int max_armour; 7, // level 3, // common 1000, // score 26000, // int radius; 120000, // int edge_radius; HIGH_DRAG, // drag 2000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_MINIBOSS1, // pitch 0, // acceleration 0, // impulse delay 400000, // range 2, // slew ROLE_MINIBOSS } , { // defender2 1600, // int max_armour; 10, // level 3, // common 900, // score 25000, // int radius; 131000, // int edge_radius; HIGH_DRAG, // drag 3000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 2, // turrets PITCH_MINIBOSS2, // pitch 45, // acceleration 0, // impulse delay 2000000, // range 4, // slew ROLE_MINIBOSS }, { // defender2_turret1 700, // int max_armour; 10, // level 0, // common 100, // score 9000, // int radius; 15000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 5, // slew ROLE_TURRET }, { // defender2_turret2 700, // int max_armour; 10, // level 0, // common 100, // score 9000, // int radius; 15000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 5, // slew ROLE_TURRET }, { // defender2_turret3 700, // int max_armour; 10, // level 0, // common 100, // score 9000, // int radius; 15000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 3, // slew ROLE_TURRET }, { // defender3 2500, // int max_armour; 13, // level 3, // common 900, // score 25000, // int radius; 131000, // int edge_radius; HIGH_DRAG, // drag 3000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 2, // turrets PITCH_MINIBOSS2, // pitch 50, // acceleration 0, // impulse delay 2000000, // range 5, // slew ROLE_MINIBOSS }, { // defender3_turret1 - shielder 500, // int max_armour; 12, // level 0, // common 100, // score 12000, // int radius; 15000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 0, // slew ROLE_TURRET }, { // defender3_turret2 - orbital 700, // int max_armour; 12, // level 0, // common 100, // score 12000, // int radius; 15000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 0, // slew ROLE_TURRET }, { // defender3_turret3 - slivers 700, // int max_armour; 12, // level 0, // common 100, // score 12000, // int radius; 15000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 400000, // range 8, // slew ROLE_TURRET }, { // defender3_turret4 - ball2 700, // int max_armour; 12, // level 0, // common 100, // score 12000, // int radius; 15000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 600000, // range 3, // slew ROLE_TURRET }, { // defender3_turret5 700, // int max_armour; 12, // level 0, // common 100, // score 12000, // int radius; 15000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 0, // slew ROLE_TURRET }, { // defender3_turret6 700, // int max_armour; 12, // level 0, // common 100, // score 12000, // int radius; 15000, // int edge_radius; 0, // drag 400, // mass AI_TURRET, // AI 0, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 4, // slew ROLE_TURRET }, { // orbiter1 800, // int max_armour; 8, // level 3, // common 800, // score 13000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_AUTO, // AI GEN_MED, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 0, // acceleration 0, // impulse delay 900000, // range 1, // slew ROLE_EXTRA }, { // orbiter2 1000, // int max_armour; 10, // level 3, // common 1200, // score 10000, // int radius; 25000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_AUTO, // AI GEN_MED, // generous COLOUR_RED6, // col1 COLOUR_RED2, // col2 0, // turrets PITCH_SMALL_SPINNER, // pitch 0, // acceleration 0, // impulse delay 900000, // range 1, // slew ROLE_EXTRA }, { // orbiter3 1100, // int max_armour; 13, // level 3, // common 1500, // score 15000, // int radius; 29000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_AUTO, // AI GEN_MED, // generous COLOUR_BLUE5, // col1 COLOUR_BLUE2, // col2 0, // turrets PITCH_LARGE_SPINNER, // pitch 0, // acceleration 0, // impulse delay 900000, // range 16, // slew ROLE_EXTRA }, { // attractor 900, // int max_armour; 12, // level 3, // common 1500, // score 15000, // int radius; 29000, // int edge_radius; HIGH_DRAG, // drag 1500, // mass AI_AUTO, // AI GEN_MED, // generous COLOUR_BLUE5, // col1 COLOUR_BLUE2, // col2 0, // turrets PITCH_HEAVY_SPINNER, // pitch 0, // acceleration 0, // impulse delay 900000, // range 0, // slew ROLE_EXTRA }, { // Disrupter1 900, // int max_armour; 9, // level 2, // common 800, // score 15000, // int radius; 54000, // int edge_radius; LOW_DRAG, // drag 350, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_GUARDIAN, // pitch 15, // acceleration 0, // impulse delay 1500000, // range 4, // slew ROLE_TARGET }, { // Disrupter2 1000, // int max_armour; 12, // level 2, // common 1200, // score 15000, // int radius; 54000, // int edge_radius; LOW_DRAG, // drag 450, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_GUARDIAN, // pitch 15, // acceleration 0, // impulse delay 1500000, // range 4, // slew ROLE_TARGET }, { // Disrupter3 1200, // int max_armour; 14, // level 2, // common 800, // score 15000, // int radius; 54000, // int edge_radius; LOW_DRAG, // drag 550, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_GREY5, // col1 COLOUR_GREY1, // col2 0, // turrets PITCH_GUARDIAN, // pitch 15, // acceleration 0, // impulse delay 1500000, // range 4, // slew ROLE_TARGET }, { // triangler1 750, // int max_armour; 9, // level 3, // common 200, // score 16000, // int radius; 60000, // int edge_radius; HIGH_DRAG, // drag 600, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_HEAVY, // pitch 30, // acceleration 0, // impulse delay 2000000, // range 2, // slew ROLE_TARGET }, { // triangler2 1250, // int max_armour; 12, // level 3, // common 500, // score 18000, // int radius; 60000, // int edge_radius; HIGH_DRAG, // drag 800, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_HEAVY, // pitch 30, // acceleration 0, // impulse delay 3000000, // range 3, // slew ROLE_TARGET }, { // triangler3 1350, // int max_armour; 15, // level 3, // common 500, // score 15000, // int radius; 60000, // int edge_radius; HIGH_DRAG, // drag 800, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_HEAVY, // pitch 30, // acceleration 0, // impulse delay 2000000, // range 4, // slew ROLE_TARGET }, { // overtriangler 2800, // int max_armour; 15, // level 3, // common 500, // score 330000, // int radius; 60000, // int edge_radius; HIGH_DRAG, // drag 1400, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 1, // turrets PITCH_MINIBOSS2, // pitch 23, // acceleration 0, // impulse delay 2000000, // range 2, // slew ROLE_MINIBOSS }, { // overtriangler_turret 600, // int max_armour; 12, // level 0, // common 400, // score 10000, // int radius; 13000, // int edge_radius; 0, // drag 200, // mass AI_TURRET, // AI 0, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 400000, // range 6, // slew ROLE_TURRET }, { // leaper1 300, // int max_armour; 7, // level 2, // common 250, // score 9000, // int radius; 10000, // int edge_radius; MED_DRAG, // drag 150, // mass AI_LEAPER, // AI GEN_LOW, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_FIGHTER, // pitch 5000, // acceleration 60, // impulse delay 500000, // range 12, // slew ROLE_EXTRA }, { // leaper2 400, // int max_armour; 11, // level 2, // common 500, // score 9000, // int radius; 10000, // int edge_radius; MED_DRAG, // drag 190, // mass AI_LEAPER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_FIGHTER, // pitch 7000, // acceleration 50, // impulse delay 500000, // range 12, // slew ROLE_EXTRA }, { // wormer4 900, // int max_armour; 12, // level 2, // common 500, // score 10000, // int radius; 23000, // int edge_radius; LOW_DRAG, // drag 400, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_BLUE5, // col1 COLOUR_BLUE2, // col2 0, // turrets PITCH_GUARDIAN, // pitch 15, // acceleration 99, // impulse delay 900000, // range 0, // slew ROLE_TARGET }, { // beamer1 2500, // int max_armour; 12, // level 2, // common 900, // score 35000, // int radius; 131000, // int edge_radius; HIGH_DRAG, // drag 4000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 2, // turrets PITCH_MINIBOSS1, // pitch 40, // acceleration 0, // impulse delay 1000000, // range 4, // slew ROLE_MINIBOSS }, { // beamer2 3500, // int max_armour; 14, // level 2, // common 1200, // score 35000, // int radius; 131000, // int edge_radius; HIGH_DRAG, // drag 5000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 2, // turrets PITCH_MINIBOSS2, // pitch 40, // acceleration 0, // impulse delay 1000000, // range 5, // slew ROLE_MINIBOSS }, { // overblatter2 3000, // int max_armour; 13, // level 3, // common 2000, // score 26000, // int radius; 120000, // int edge_radius; HIGH_DRAG, // drag 2500, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_MINIBOSS2, // pitch 0, // acceleration 0, // impulse delay 400000, // range 2, // slew ROLE_MINIBOSS }, { // overdisrupter 2500, // int max_armour; 14, // level 2, // common 900, // score 25000, // int radius; 131000, // int edge_radius; HIGH_DRAG, // drag 3000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 2, // turrets PITCH_MINIBOSS2, // pitch 40, // acceleration 0, // impulse delay 2000000, // range 5, // slew ROLE_MINIBOSS }, { // guardian4 1000, // int max_armour; 13, // level 3, // common 800, // score 19000, // int radius; 60000, // int edge_radius; MED_DRAG, // drag 250, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_RED5, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_GUARDIAN, // pitch 36, // acceleration 0, // impulse delay 900000, // range 4, // slew ROLE_TARGET }, { // guardian5 1100, // int max_armour; 15, // level 3, // common 900, // score 19000, // int radius; 60000, // int edge_radius; MED_DRAG, // drag 250, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_BLUE5, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_GUARDIAN, // pitch 32, // acceleration 0, // impulse delay 900000, // range 4, // slew ROLE_TARGET }, { // overzapper 3500, // int max_armour; 13, // level 3, // common 2500, // score 30000, // int radius; 120000, // int edge_radius; HIGH_DRAG, // drag 2500, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 1, // turrets PITCH_MINIBOSS2, // pitch 0, // acceleration 0, // impulse delay 2000000, // range 2, // slew ROLE_MINIBOSS }, { // Bracket5 1000, // int max_armour; 13, // level 2, // common 800, // score 11000, // int radius; 54000, // int edge_radius; MED_DRAG, // drag 350, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_BRACKET, // pitch 32, // acceleration 0, // impulse delay 700000, // range 2, // slew ROLE_TARGET }, { // Boss2_2 3000, // int max_armour; 10, // level 0, // common 500, // score 35000, // int radius; 125000, // int edge_radius; HIGH_DRAG, // drag 5000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 3, // turrets PITCH_BOSS2, // pitch 65, // acceleration 99, // impulse delay 1900000, // range 3, // slew ROLE_BOSS }, { // Boss2_3 3000, // int max_armour; 10, // level 0, // common 500, // score 35000, // int radius; 125000, // int edge_radius; HIGH_DRAG, // drag 5000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 4, // turrets PITCH_BOSS3, // pitch 65, // acceleration 99, // impulse delay 1900000, // range 3, // slew ROLE_BOSS }, { // Boss3_1 4000, // int max_armour; 15, // level 0, // common 500, // score 35000, // int radius; 125000, // int edge_radius; HIGH_DRAG, // drag 5000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_BLUE5, // col1 COLOUR_BLUE1, // col2 4, // turrets PITCH_BOSS3, // pitch 65, // acceleration 99, // impulse delay 1900000, // range 3, // slew ROLE_BOSS }, { // Boss3_2 4000, // int max_armour; 15, // level 0, // common 500, // score 35000, // int radius; 125000, // int edge_radius; HIGH_DRAG, // drag 5000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_BLUE5, // col1 COLOUR_BLUE1, // col2 3, // turrets PITCH_BOSS3, // pitch 65, // acceleration 99, // impulse delay 1900000, // range 3, // slew ROLE_BOSS }, { // Boss3_3 4000, // int max_armour; 15, // level 0, // common 500, // score 35000, // int radius; 125000, // int edge_radius; HIGH_DRAG, // drag 5000, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 4, // turrets PITCH_BOSS3, // pitch 65, // acceleration 99, // impulse delay 1900000, // range 2, // slew ROLE_BOSS }, { // Messenger 200, // int max_armour; 15, // level 0, // common 50, // score 7000, // int radius; 10000, // int edge_radius; LOW_DRAG, // drag 150, // mass AI_FIGHTER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_FIGHTER, // pitch 65, // acceleration 0, // impulse delay 500000, // range 12, // slew ROLE_EXTRA }, { // shadow1 400, // int max_armour; 9, // level 2, // common 10, // score 12000, // int radius; 60000, // int edge_radius; MED_DRAG, // drag 200, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_MEDIUM, // pitch 26, // acceleration 0, // impulse delay 900000, // range 4, // slew ROLE_TARGET }, { // shadow2 500, // int max_armour; 13, // level 2, // common 900, // score 12000, // int radius; 60000, // int edge_radius; MED_DRAG, // drag 200, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_GREY6, // col1 COLOUR_GREY1, // col2 0, // turrets PITCH_MEDIUM, // pitch 30, // acceleration 0, // impulse delay 900000, // range 4, // slew ROLE_TARGET }, { // Boss3_turret1 700, // int max_armour; 15, // level 0, // common 400, // score 14000, // int radius; 17000, // int edge_radius; 0, // drag 200, // mass AI_TURRET, // AI 0, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 3, // slew ROLE_TURRET }, { // Boss3_turret2 700, // int max_armour; 15, // level 0, // common 400, // score 14000, // int radius; 17000, // int edge_radius; 0, // drag 200, // mass AI_TURRET, // AI 0, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 6, // slew ROLE_TURRET }, { // Boss3_turret3 700, // int max_armour; 15, // level 0, // common 400, // score 14000, // int radius; 17000, // int edge_radius; 0, // drag 200, // mass AI_TURRET, // AI 0, // generous COLOUR_GREY5, // col1 COLOUR_GREY1, // col2 0, // turrets PITCH_TURRET2, // pitch 0, // acceleration 0, // impulse delay 900000, // range 6, // slew ROLE_TURRET }, { // waver1 800, // int max_armour; 7, // level 2, // common 800, // score 15000, // int radius; 55000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_AUTO, // AI GEN_MED, // generous COLOUR_ORANGE6, // col1 COLOUR_ORANGE1, // col2 0, // turrets PITCH_LARGE_SPINNER, // pitch 0, // acceleration 0, // impulse delay 900000, // range 0, // slew ROLE_EXTRA }, { // waver2 1000, // int max_armour; 11, // level 2, // common 1200, // score 15000, // int radius; 60000, // int edge_radius; HIGH_DRAG, // drag 500, // mass AI_AUTO, // AI GEN_MED, // generous COLOUR_RED6, // col1 COLOUR_RED2, // col2 0, // turrets PITCH_LARGE_SPINNER, // pitch 0, // acceleration 0, // impulse delay 900000, // range 0, // slew ROLE_EXTRA }, { // Curve1 250, // int max_armour; 1, // level 2, // common 10, // score 13000, // int radius; 54000, // int edge_radius; MED_DRAG, // drag 200, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_GREEN6, // col1 COLOUR_GREEN1, // col2 0, // turrets PITCH_BRACKET, // pitch 17, // acceleration 0, // impulse delay 900000, // range 1, // slew ROLE_TARGET }, { // Curve2 1050, // int max_armour; 5, // level 2, // common 10, // score 13000, // int radius; 54000, // int edge_radius; MED_DRAG, // drag 300, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_RED6, // col1 COLOUR_RED1, // col2 0, // turrets PITCH_BRACKET, // pitch 17, // acceleration 0, // impulse delay 1500000, // range 1, // slew ROLE_TARGET }, { // Curve3 1250, // int max_armour; 8, // level 2, // common 10, // score 13000, // int radius; 54000, // int edge_radius; MED_DRAG, // drag 250, // mass AI_DRIFTER, // AI GEN_LOW, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_BRACKET, // pitch 17, // acceleration 0, // impulse delay 1500000, // range 1, // slew ROLE_TARGET }, { // underspikey2 2000, // int max_armour; 7, // level 2, // common 1000, // score 26000, // int radius; 120000, // int edge_radius; HIGH_DRAG, // drag 2500, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_MINIBOSS1, // pitch 0, // acceleration 0, // impulse delay 9000000, // range 2, // slew ROLE_MINIBOSS }, { // underspikey3 1700, // int max_armour; 6, // level 2, // common 1000, // score 26000, // int radius; 120000, // int edge_radius; HIGH_DRAG, // drag 2500, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_MINIBOSS1, // pitch 0, // acceleration 0, // impulse delay 9000000, // range 3, // slew ROLE_MINIBOSS }, { // overspikey2 3500, // int max_armour; 12, // level 2, // common 2500, // score 27000, // int radius; 120000, // int edge_radius; HIGH_DRAG, // drag 2500, // mass AI_DRIFTER, // AI GEN_HIGH, // generous COLOUR_BLUE6, // col1 COLOUR_BLUE1, // col2 0, // turrets PITCH_MINIBOSS2, // pitch 0, // acceleration 0, // impulse delay 9000000, // range 4, // slew ROLE_MINIBOSS }, { // dead_tri1 1, // int max_armour; 0, // level 0, // common 200, // score 0, // int radius; 60000, // int edge_radius; LOW_DRAG, // drag 1, // mass AI_DRIFTER, // AI 0, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_HEAVY, // pitch 0, // acceleration 0, // impulse delay 0, // range 0, // slew ROLE_DEAD }, { // dead_tri2 1, // int max_armour; 0, // level 0, // common 200, // score 0, // int radius; 60000, // int edge_radius; LOW_DRAG, // drag 1, // mass AI_DRIFTER, // AI 0, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_HEAVY, // pitch 0, // acceleration 0, // impulse delay 0, // range 0, // slew ROLE_DEAD }, { // dead_tri3 1, // int max_armour; 0, // level 0, // common 200, // score 0, // int radius; 60000, // int edge_radius; LOW_DRAG, // drag 1, // mass AI_DRIFTER, // AI 0, // generous COLOUR_YELLOW6, // col1 COLOUR_YELLOW1, // col2 0, // turrets PITCH_HEAVY, // pitch 0, // acceleration 0, // impulse delay 0, // range 0, // slew ROLE_DEAD } }; // black enemy? overgod-1.0/enemy.c0000644000175000001440000071025510310767314013324 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: enemy.c History: 11/9/2005 - Version 1.0 finalised This file contains: - most functions relating to enemies */ #include "allegro.h" #include #include "config.h" #include "globvars.h" #include "stuff.h" #include "cloud.h" #include "palette.h" #include "bullet.h" #include "pickup.h" #include "sound.h" #include "actor.h" #include "levels.h" #include "cmds.h" #include "display.h" #define HIVE_MIN_RANGE 200000 #define HIVE_MAX_RANGE 500000 #define DAM_GREEN_BLAT 90 #define DAM_SMALL_GREEN_SEEKER 150 #define DAM_LARGE_GREEN_SEEKER 200 #define DAM_YELLOW_SEEKER 200 #define DAM_BLUE_BLAT 70 #define DAM_WORMS1 150 #define DAM_WORMS2 250 #define MINE_SIZE 3000 #define COLOURISE_GREEN_SEEKER1 -1 #define COLOURISE_GREEN_SEEKER2 -2 #define COLOURISE_BLUE_SEEKER -3 #define COLOURISE_YELLOW_SEEKER -4 #define TA_TURRET_TIMEOUT -17 extern FONT *small_font; int create_enemy(int type, int subtype, int x, int y, int x_speed, int y_speed, int angle, int carrying_pickup, int special [10], int target); int create_turret(int type, int base, int turret_counter); void manage_enemy(int e); int move_enemy(int e); int detect_collision(int e);//, int things [2]); void enemy_explodes(int e, int bang); void register_destroyed(int e, int cause); void destroy_enemy(int e); int metamorphosis(int e); int enemy_turn_towards_angle(int angle, int tangle, int turning, int forbid); int enemy_turn_towards_xy(int x1, int y1, int x2, int y2, int angle, int turning, int forbid); //int turn_towards_angle(int angle, int tangle, int turning); //int turn_towards_xy(int x1, int y1, int x2, int y2, int angle, int turning); void accelerate_enemy(int e, int angle, int impulse); void drag_enemy(int e, float drag_amount); int track_target(int e, int attacking, int turning, int forbid); int track_target_any_angle(int x, int y, int target_x, int target_y, int turning, int forbid, int angle); void standard_attack(int e, int angle); int near_angle(int angle1, int angle2); void enemy_vanish(int e); void find_firebase_start_point(int location [2]); void find_crawly_start_point(int location [2]); void find_target_start_point(int location [2], int et); int spawn_enemy(int type, int subtype, int carrying_pickup, int target); void move_sun(int e); int hurt_enemy(int e, int hurty, int source, char pulse); void score_kill(int etype, int subtype, int p); int check_for_targets(void); void check_enemy_pickup_drop(int e); void worm_new_target(int b); void manage_turret(int e, int t, int x, int y, int rotate); void fighter_exhaust(int e, int ax, int ay, int distance [4], int angle [4], int base_colour); void zap_attack(int e); int enemy_sound_pitch(int ec); void puffer_bang(int x, int y, int rot, int number, int dist, int colours [5]); int move_drifter_ai(int e); int move_auto_ai(int e); int move_stinger_ai(int e); int move_periodic_stinger_ai(int e); int move_turret_ai(int e); int move_fighter_ai(int e); int move_bomber_ai(int e); int move_cruiser_ai(int e); int move_leaper_ai(int e); void run_boss3_1(int e); void run_boss3_3(int e); void wormer_pulsates(int e); void colourise_bullet(int arr [4], int tc); enum { ESOUND_NONE, ESOUND_EXPLODE1, ESOUND_EXPLODE2, ESOUND_WOBBLE, ESOUND_LONG_WOBBLE, ESOUND_WARP_IN, ESOUND_STING, ESOUND_HARD_ZAP, ESOUND_BOSS2, ESOUND_BLORT, ESOUND_STING4, ESOUND_BLAST, ESOUND_ZAPNOTE1, ESOUND_ZAPNOTE2, ESOUND_MINE, ESOUND_SHORTZAP, ESOUND_SHORTZAP2, ESOUND_BLAT, ESOUND_SUN, ESOUND_BOSS1, ESOUND_CROAK, ESOUND_GREENSEEKER1, ESOUND_GREENSEEKER2, ESOUND_TORPEDO, ESOUND_BOSS3_1, ESOUND_BOSS3_2, ESOUND_BOSS3_3, ESOUND_PLASMA, ESOUND_SEEKMINE, ESOUND_ORBITAL, ESOUND_MISSILE, ESOUND_MINEBANG, ESOUND_MUTATE }; void enemy_sound(int e, int sound); void enemy_soundf(int e, int sound, int freq); void enemy_soundvf(int e, int sound, int vol, int freq); void enemy_sound_fire(int e, int sound, int freq, int vol, int dist); void init_enemies(void) { int e; for (e = 0; e < NO_ENEMIES; e++) { enemy[e].type = ENEMY_NONE; enemy[e].target = TARGET_NO; } } int create_enemy(int type, int subtype, int x, int y, int x_speed, int y_speed, int angle, int carrying_pickup, int special [10], int target) { // REMEMBER: enemies are also created in create_turret() int e = 0; int i, j; for (e = 0; e < NO_ENEMIES; e++) { if (e == NO_ENEMIES - 1) return -1; if (enemy[e].type == ENEMY_NONE) break; } enemy[e].type = type; enemy[e].x = x; enemy[e].y = y; enemy[e].x_speed = x_speed; enemy[e].y_speed = y_speed; enemy[e].angle = grand(ANGLE_FULL); //angle; enemy[e].moving_angle = angle; enemy[e].armour = eclass[type].max_armour; enemy[e].hurt_pulse = 0; enemy[e].radius = eclass[type].radius; enemy[e].edge_radius = eclass[type].edge_radius; // enemy[e].shield = eclass[type].max_shield; enemy[e].mass = eclass[type].mass; enemy[e].drag_amount = 0; enemy[e].subtype = subtype; enemy[e].attacking = ATTACK_NONE; enemy[e].counter = 256 - counter; enemy[e].recycle = 50 + grand(50); // enemy[e].attacking = 0; enemy[e].just_collided = 0; enemy[e].carrying_pickup = carrying_pickup; enemy[e].target = target; enemy[e].burst_fire = 0; enemy[e].slew_dir = 0; enemy[e].next_impulse = eclass[type].impulse_delay; enemy[e].turret_main = -1; enemy[e].turret_index = -1; if (eclass[enemy[e].type].role == ROLE_TARGET || eclass[enemy[e].type].role == ROLE_EXTRA) enemy[e].ta_time_left = 2000;// == 60 seconds else enemy[e].ta_time_left = 99999;// == 30 seconds // enemy[e].ta_time_left = 150;// == 60 seconds // REMEMBER: enemies are also created in create_turret() for (i = 0; i < MAX_TURRETS; i ++) { enemy[e].turret [i] = -1; } enemy[e].colours [0] = eclass[type].colour1; enemy[e].colours [1] = eclass[type].colour2; enemy[e].hurt_pulse_colour1 = enemy[e].colours [0]; enemy[e].hurt_pulse_colour2 = enemy[e].colours [1]; for (i = 0; i < NO_ENEMY_ATTRIBUTES; i ++) { enemy[e].attribute [i] = 0; //eclass[type].default_attributes [i]; } // REMEMBER: enemies are also created in create_turret() switch(enemy[e].type) { case ENEMY_DEAD_TRI1: case ENEMY_DEAD_TRI2: case ENEMY_DEAD_TRI3: for (i = 0; i < NO_ENEMY_ATTRIBUTES; i ++) { enemy[e].attribute [i] = special [i]; } break; case ENEMY_MESSENGER: enemy[e].burst_fire = 3 + grand(3); enemy[e].attribute [4] = special [4]; break; case ENEMY_SPIKEY2: case ENEMY_SPINNER4: case ENEMY_BLATTER1: case ENEMY_BLATTER2: case ENEMY_BLATTER3: case ENEMY_BLATTER4: case ENEMY_BLATTER5: enemy[e].burst_fire = 3; case ENEMY_BLOATER1: case ENEMY_BLOATER2: case ENEMY_SPINNER1: case ENEMY_SPINNER2: case ENEMY_SPINNER3: case ENEMY_SPINNER5: case ENEMY_SPIKEY1: case ENEMY_SPIKEY3: case ENEMY_SPIKEY4: case ENEMY_SPIKEY5: case ENEMY_WAVER1: case ENEMY_WAVER2: if (grand(2) == 0) enemy[e].attribute [1] = -8 - grand(8); else enemy[e].attribute [1] = 8 + grand(8); enemy[e].attribute [0] = grand(ANGLE_FULL); break; case ENEMY_OVERBLATTER: case ENEMY_OVERBLATTER2: // enemy[e].burst_fire = 6; enemy[e].attribute [6] = 0; enemy[e].attribute [7] = 0; enemy[e].attribute [4] = 0; case ENEMY_OVERSPINNER: case ENEMY_OVERSPIKEY: case ENEMY_UNDERSPIKEY: case ENEMY_UNDERSPIKEY2: case ENEMY_UNDERSPIKEY3: case ENEMY_OVERSPIKEY2: if (grand(2) == 0) enemy[e].attribute [1] = -6 - grand(6); else enemy[e].attribute [1] = 6 + grand(6); enemy[e].attribute [0] = grand(ANGLE_FULL); enemy[e].attribute [2] = grand(ANGLE_FULL); break; case ENEMY_PUFFER1: case ENEMY_PUFFER2: case ENEMY_PUFFER3: case ENEMY_PUFFER4: if (grand(2) == 0) enemy[e].attribute [1] = -1; else enemy[e].attribute [1] = 1; break; case ENEMY_BRACKET1: case ENEMY_BRACKET3: case ENEMY_BRACKET4: enemy[e].burst_fire = 3 + grand(3); break; case ENEMY_BRACKET2: enemy[e].burst_fire = 6 + grand(6); break; case ENEMY_WORMER1: case ENEMY_WORMER2: case ENEMY_WORMER3: case ENEMY_WORMER4: wormer_pulsates(e); break; case ENEMY_FIGHTER2: case ENEMY_FIGHTER5: enemy[e].burst_fire = 3 + grand(3); enemy[e].attribute [0] = FIGHTER_MOVE; break; case ENEMY_LEAPER1: case ENEMY_LEAPER2: enemy[e].burst_fire = 3; enemy[e].attribute [0] = FIGHTER_MOVE; break; case ENEMY_BOMBER1: case ENEMY_BOMBER3: enemy[e].burst_fire = 3; enemy[e].attribute [0] = FIGHTER_MOVE; break; case ENEMY_SHIELDER1: // note see also some turrets enemy[e].attribute [2] = 6; if (grand(2) == 0) enemy[e].attribute [2] = -6; enemy[e].attribute [0] = 0; break; case ENEMY_ORBITER1: enemy[e].attribute [2] = 12; if (grand(2) == 0) enemy[e].attribute [2] = -12; break; case ENEMY_ORBITER2: enemy[e].attribute [2] = 12; if (grand(2) == 0) enemy[e].attribute [2] = -12; enemy[e].attribute [4] = 14 + grand(4); if (grand(2) == 0) enemy[e].attribute [4] = -14 - grand(4); break; case ENEMY_ORBITER3: enemy[e].attribute [2] = 11; if (grand(2) == 0) enemy[e].attribute [2] = -11; break; case ENEMY_ZAPPER1: case ENEMY_OVERZAPPER: enemy[e].attribute [0] = 0; enemy[e].attribute [5] = 6; if (grand(2) == 0) enemy[e].attribute [5] = -6; enemy[e].attribute [8] = enemy[e].x; enemy[e].attribute [9] = enemy[e].y; break; case ENEMY_SHADOW1: case ENEMY_SHADOW2: enemy[e].attribute [0] = 35; enemy[e].burst_fire = 3; break; /* case ENEMY_DRIFTER2: enemy[e].attribute [ATTRIB_DRIFTER_RANGE] = 125000; enemy[e].attribute [ATTRIB_DRIFTER_ACCEL] = 185; enemy[e].angle = grand(ANGLE_FULL); enemy[e].attribute [ATTRIB_DRIFTER_X_DEST] = grand(arena.max_x - 300000) + 150000; enemy[e].attribute [ATTRIB_DRIFTER_Y_DEST] = grand(arena.max_y - 300000) + 150000; break;*/ } switch(eclass[type].ai_type) { case AI_DRIFTER: enemy[e].angle = grand(ANGLE_FULL); enemy[e].x_dest = grand(arena.max_x - enemy[e].edge_radius * 4) + enemy[e].edge_radius * 2; enemy[e].y_dest = grand(arena.max_y - enemy[e].edge_radius * 4) + enemy[e].edge_radius * 2; break; case AI_AUTO: enemy[e].angle = grand(ANGLE_FULL); break; case AI_PERIODIC_STINGER: break; case AI_BOMBER: case AI_FIGHTER: case AI_LEAPER: case AI_CRUISER: enemy[e].angle = grand(ANGLE_FULL); enemy[e].x_dest = grand(arena.max_x - enemy[e].edge_radius * 4) + enemy[e].edge_radius * 2; enemy[e].y_dest = grand(arena.max_y - enemy[e].edge_radius * 4) + enemy[e].edge_radius * 2; break; } if (eclass[type].turrets > 0) { for (i = 0; i < eclass[type].turrets; i ++) { switch(type) { case ENEMY_HEAD1: if (i == 0 || grand(10) == 0) j = ENEMY_HEAD1_EYE1 + grand(3); break; case ENEMY_DEFENDER1: if (i == 0)// || grand(10) == 0) j = ENEMY_DEFENDER1_TURRET1 + grand(3); break; case ENEMY_DEFENDER2: if (i == 0)// || grand(10) == 0) j = ENEMY_DEFENDER2_TURRET1 + grand(3); break; case ENEMY_DEFENDER3: case ENEMY_BEAMER2: case ENEMY_OVERZAPPER: case ENEMY_OVERTRIANGLER: case ENEMY_BEAMER1: if (i == 0 || grand(20) == 0) j = ENEMY_DEFENDER3_TURRET1 + grand(6); break; case ENEMY_OVERDISRUPTER: // 2 different turrets j = ENEMY_DEFENDER3_TURRET1 + grand(6); break; case ENEMY_BRACKET4: j = ENEMY_BRACKET4_TURRET; break; case ENEMY_CRUISER1: j = ENEMY_CRUISER1_TURRET; break; case ENEMY_CRUISER2: j = ENEMY_CRUISER2_TURRET; break; case ENEMY_CRUISER3: j = ENEMY_CRUISER3_TURRET; break; case ENEMY_CRUISER4: j = ENEMY_CRUISER4_TURRET; break; case ENEMY_MINER3: j = ENEMY_MINER3_TURRET; break; case ENEMY_BOSS1_1: case ENEMY_BOSS1_2: case ENEMY_BOSS1_3: if (i == 0 || grand(10) == 0) j = ENEMY_BOSS1_TURRET1 + grand(3); break; case ENEMY_BOSS2: case ENEMY_BOSS2_2: case ENEMY_BOSS2_3: if (i == 0 || grand(12) == 0) j = ENEMY_BOSS2_TURRET1 + grand(4); // j = ENEMY_BOSS2_TURRET1; // j = ENEMY_BOSS2_TURRET1 + grand(4); break; case ENEMY_BOSS3_1: case ENEMY_BOSS3_2: case ENEMY_BOSS3_3: if (i == 0 || grand(12) == 0) j = ENEMY_BOSS3_TURRET1 + grand(3); break; } enemy[e].turret [i] = create_turret(j, e, i); } } /* else { for (i = 0; i < MAX_TURRETS; i ++) { enemy[e].turret [i] = -1; } }*/ return e; } int create_turret(int type, int base, int turret_counter) { int e = 0; for (e = 0; e < NO_ENEMIES; e++) { if (e == NO_ENEMIES - 1) return -1; if (enemy[e].type == ENEMY_NONE) break; } enemy[e].type = type; enemy[e].x = enemy[base].x; enemy[e].y = enemy[base].y; enemy[e].x_speed = enemy[base].x_speed; enemy[e].y_speed = enemy[base].y_speed; enemy[e].angle = enemy[base].angle; enemy[e].moving_angle = enemy[base].angle; enemy[e].armour = eclass[type].max_armour; enemy[e].hurt_pulse = 0; enemy[e].radius = eclass[type].radius; enemy[e].edge_radius = eclass[type].edge_radius; // enemy[e].shield = eclass[type].max_shield; enemy[e].mass = eclass[type].mass; enemy[e].drag_amount = 0; enemy[e].subtype = 0; enemy[e].attacking = ATTACK_NONE; enemy[e].counter = 256 - counter + turret_counter * 10; enemy[e].recycle = enemy[e].counter % 50 + 50; // enemy[e].attacking = 0; enemy[e].just_collided = 0; enemy[e].carrying_pickup = 0; enemy[e].target = TARGET_NO; enemy[e].burst_fire = 0; enemy[e].slew_dir = 0; enemy[e].next_impulse = 0;//eclass[type].impulse_delay; enemy[e].ta_time_left = 99999; int i; for (i = 0; i < MAX_TURRETS; i ++) { enemy[e].turret [i] = -1; } // int i; // for (i = 0; i < NO_ENEMY_ATTRIBUTES; i ++) // { // enemy[e].attribute [i] = eclass[type].default_attributes [i]; // } enemy[e].colours [0] = eclass[type].colour1; enemy[e].colours [1] = eclass[type].colour2; enemy[e].turret_main = base; enemy[e].turret_index = turret_counter; // enemy[e].attribute [ATTRIB_FI4TURRET_MAIN] = base; // enemy[e].attribute [ATTRIB_FI4TURRET_MAIN_DEAD] = 0; enemy[e].hurt_pulse_colour1 = enemy[e].colours [0]; enemy[e].hurt_pulse_colour2 = enemy[e].colours [1]; enemy[e].angle = grand(ANGLE_FULL); switch(enemy[e].type) { case ENEMY_BOSS2_TURRET2: case ENEMY_BOSS3_TURRET2: enemy[e].burst_fire = 6 + grand(6); break; case ENEMY_MINER3_TURRET: enemy[e].burst_fire = 3 + grand(3); break; case ENEMY_CRUISER1_TURRET: enemy[e].burst_fire = 3 + grand(3); break; case ENEMY_DEFENDER1_TURRET3: case ENEMY_DEFENDER3_TURRET5: enemy[e].attribute [0] = 6; if (grand(2) == 0) enemy[e].attribute [0] = -6; break; case ENEMY_DEFENDER3_TURRET1: enemy[e].attribute [2] = 6; if ((base + turret_counter) % 2 == 0) enemy[e].attribute [2] = -6; enemy[e].attribute [0] = 0; break; case ENEMY_DEFENDER3_TURRET2: enemy[e].attribute [2] = 7; if (grand(2) == 0) enemy[e].attribute [2] = -7; break; case ENEMY_DEFENDER3_TURRET3: enemy[e].attribute [2] = 5; if (grand(2) == 0) enemy[e].attribute [2] = -5; break; } return e; } void run_enemies(void) { int e; for (e = 0; e < NO_ENEMIES; e++) { if (enemy[e].type != ENEMY_NONE) manage_enemy(e); } } void manage_enemy(int e) { if (enemy[e].hurt_pulse > 0) enemy[e].hurt_pulse --; if (enemy[e].recycle > 0) enemy[e].recycle --; if (enemy[e].just_collided > 0) enemy[e].just_collided --; enemy[e].counter ++; // assumed: this wraps at 256 (unsigned char) if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) { enemy[e].ta_time_left --; if (enemy[e].ta_time_left <= 0) { enemy_vanish(e); return; } } // char need_move_enemy = 1; switch(eclass[enemy[e].type].ai_type) { case AI_DRIFTER: move_drifter_ai(e); break; case AI_AUTO: move_auto_ai(e); break; case AI_STINGER: move_stinger_ai(e); break; case AI_PERIODIC_STINGER: move_periodic_stinger_ai(e); break; case AI_TURRET: move_turret_ai(e); break; case AI_FIGHTER: move_fighter_ai(e); break; case AI_LEAPER: move_leaper_ai(e); break; case AI_BOMBER: move_bomber_ai(e); break; case AI_CRUISER: move_cruiser_ai(e); break; } if (enemy[e].type != ENEMY_NONE)// && need_move_enemy == 1) move_enemy(e); } int hurt_enemy(int e, int hurty, int source, char pulse) { if (e <= -1 || enemy[e].type <= ENEMY_NONE || enemy[e].type >= NO_ENEMY_TYPES) { #ifdef SANITY_CHECK rectfill(screen, 370, 230, 430, 280, COLOUR_RED3); textprintf_centre_ex(screen, small_font, 400, 250, COLOUR_WHITE, -1, "hurt e %i, s %i", e, source); if (e != -1) textprintf_centre_ex(screen, small_font, 400, 260, COLOUR_WHITE, -1, "hurt t %i", enemy[e].type); rest(2000); #endif return -1; // exit(type); } if (enemy[e].type == ENEMY_NONE) return 0; if (hurty >= enemy[e].armour) { // switch(enemy[e].type) // { // } register_destroyed(e, source); enemy_explodes(e, 1); // can also happen in enemy_vanish, just below return 0; } enemy[e].armour -= hurty; if (pulse > enemy[e].hurt_pulse) enemy[e].hurt_pulse = pulse; if (enemy[e].type == ENEMY_CURVE2 || enemy[e].type == ENEMY_CURVE3) { if (enemy[e].armour <= 500) enemy[e].attribute [0] = source; } return 1; } void enemy_vanish(int e) { #ifdef SANITY_CHECK if (e <= -1 || enemy[e].type <= ENEMY_NONE || enemy[e].type >= NO_ENEMY_TYPES) { rectfill(screen, 370, 230, 430, 280, COLOUR_RED3); textprintf_centre_ex(screen, small_font, 400, 250, COLOUR_WHITE, -1, "vanish e %i", e); if (e != -1) textprintf_centre_ex(screen, small_font, 400, 260, COLOUR_WHITE, -1, "vanish t %i", enemy[e].type); rest(2000); return; // exit(type); } #endif int passing_colours [5] = {GC_GREEN8, GC_GREEN8, GC_GREEN8, GC_GREEN8, GC_GREEN8}; int passing_colours2 [5] = {TRANS_DGREEN, TRANS_LGREEN, TRANS_YELLOW, TRANS_YELLOW, TRANS_YELLOW}; int cloud_size = 200 + crandom(250) + eclass[enemy[e].type].radius / 10; switch(enemy[e].type) { default: passing_colours2 [0] = TRANS_DRED; passing_colours2 [1] = TRANS_LRED; passing_colours2 [2] = TRANS_YELLOW; passing_colours [0] = GC_RED8; break; } create_cloud(CLOUD_SHRINKING_CIRCLE, enemy[e].x, enemy[e].y, 0, 0, 0, 0, 500, -150 - eclass[enemy[e].type].radius / 100, 10, 0, 0, 0, passing_colours); place_explosion(enemy[e].x, enemy[e].y, 0,0, cloud_size, passing_colours2); register_destroyed(e, -2); enemy_explodes(e, 0); // see also hurt_enemy. // if (standard_sound == 1) // enemy_soundf(e, ESOUND_WARP_IN, 800 + grand(800) - eclass[enemy[e].type].mass); enemy_soundf(e, NWAV_PHASE, enemy_sound_pitch(enemy[e].type) + grand(250)); //800 + grand(200) - enemy_pitch(enemy[k].type)); } void enemy_explodes(int e, int bang) { int j, k, l; // int xs = enemy[e].x_speed; // int ys = enemy[e].y_speed; if (enemy[e].type == ENEMY_NONE) return; if (eclass[enemy[e].type].role == ROLE_TURRET && (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) && enemy[e].ta_time_left == TA_TURRET_TIMEOUT) bang = 0; int passing_colours [5]; int bullet_colours [4]; // int special [10]; // int standard_sound = NWAV_BURST; if (bang) { shake_all_screens(enemy[e].mass / 50); switch(enemy[e].type) { case ENEMY_SPIKEY1: case ENEMY_SPIKEY2: case ENEMY_SPIKEY3: case ENEMY_SPIKEY4: case ENEMY_SPIKEY5: case ENEMY_SPINNER1: case ENEMY_SPINNER2: case ENEMY_SPINNER3: case ENEMY_SPINNER4: case ENEMY_SPINNER5: case ENEMY_BLATTER1: case ENEMY_BLATTER2: case ENEMY_BLATTER3: case ENEMY_BLATTER4: case ENEMY_BLATTER5: case ENEMY_GUARDIAN1: case ENEMY_GUARDIAN2: case ENEMY_GUARDIAN3: // case ENEMY_GUARDIAN4: case ENEMY_GUARDIAN5: case ENEMY_CIRCLER1: case ENEMY_OVERTRIANGLER_TURRET: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1200 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); break; case ENEMY_GUARDIAN4: passing_colours[0] = TRANS_ORANGE; passing_colours[1] = TRANS_YELLOW; passing_colours[2] = TRANS_WHITE; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1600 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); break; case ENEMY_WAVER1: passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1400 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); for (j = 0; j < 4; j ++) { place_explosion(enemy[e].x + xpart(enemy[e].attribute [0] + j * ANGLE_QUARTER, 43 * GRAIN), enemy[e].y + ypart(enemy[e].attribute [0] + j * ANGLE_QUARTER, 43 * GRAIN), 0,0, 1200 + crandom(250), passing_colours); } break; case ENEMY_WAVER2: passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1400 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); for (j = 0; j < 3; j ++) { place_explosion(enemy[e].x + xpart(enemy[e].attribute [0] + j * ANGLE_FULL / 3, 51 * GRAIN), enemy[e].y + ypart(enemy[e].attribute [0] + j * ANGLE_FULL / 3, 51 * GRAIN), 0,0, 1200 + crandom(250), passing_colours); } break; case ENEMY_DEAD_TRI1: case ENEMY_DEAD_TRI2: case ENEMY_DEAD_TRI3: passing_colours [0] = enemy[e].attribute [2]; passing_colours [1] = enemy[e].attribute [3]; passing_colours [2] = enemy[e].attribute [4]; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1800 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2300, 2800, 4, passing_colours); break; case ENEMY_TRIANGLER1: passing_colours [0] = TRANS_DRED; passing_colours [1] = TRANS_LRED; passing_colours [2] = TRANS_YELLOW; /* create_cloud(CLOUD_TRI1, enemy[e].x, enemy[e].y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 20 + grand(50), 1, 0, 0, 25000, 0, passing_colours);*/ enemy[e].attribute [0] = 20 + grand(80); enemy[e].attribute [1] = 25000; enemy[e].attribute [2] = TRANS_DRED; enemy[e].attribute [3] = TRANS_LRED; enemy[e].attribute [4] = TRANS_YELLOW; create_enemy(ENEMY_DEAD_TRI1, 0, enemy[e].x, enemy[e].y, enemy[e].x_speed, enemy[e].y_speed, 0, 0, enemy[e].attribute, TARGET_NO); place_explosion(enemy[e].x, enemy[e].y, 0,0, 900 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2300, 2800, 4, passing_colours); break; case ENEMY_TRIANGLER2: passing_colours[0] = TRANS_DBLUE; passing_colours[1] = TRANS_LBLUE; passing_colours[2] = TRANS_WHITE; /* create_cloud(CLOUD_TRI2, enemy[e].x, enemy[e].y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 20 + grand(50), 1, 0, 0, 20000, 0, passing_colours);*/ enemy[e].attribute [0] = 20 + grand(80); enemy[e].attribute [1] = 20000; enemy[e].attribute [2] = TRANS_DBLUE; enemy[e].attribute [3] = TRANS_LBLUE; enemy[e].attribute [4] = TRANS_WHITE; create_enemy(ENEMY_DEAD_TRI2, 0, enemy[e].x, enemy[e].y, enemy[e].x_speed, enemy[e].y_speed, 0, 0, enemy[e].attribute, TARGET_NO); place_explosion(enemy[e].x, enemy[e].y, 0,0, 1000 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2300, 2800, 4, passing_colours); break; case ENEMY_TRIANGLER3: passing_colours[0] = TRANS_ORANGE; passing_colours[1] = TRANS_YELLOW; passing_colours[2] = TRANS_WHITE; /* create_cloud(CLOUD_TRI3, enemy[e].x, enemy[e].y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 20 + grand(50), 1, 0, 0, 18000, 0, passing_colours);*/ enemy[e].attribute [0] = 20 + grand(80); enemy[e].attribute [1] = 18000; enemy[e].attribute [2] = TRANS_ORANGE; enemy[e].attribute [3] = TRANS_YELLOW; enemy[e].attribute [4] = TRANS_WHITE; create_enemy(ENEMY_DEAD_TRI3, 0, enemy[e].x, enemy[e].y, enemy[e].x_speed, enemy[e].y_speed, 0, 0, enemy[e].attribute, TARGET_NO); place_explosion(enemy[e].x, enemy[e].y, 0,0, 900 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2300, 2800, 4, passing_colours); break; case ENEMY_CURVE1: case ENEMY_CURVE2: case ENEMY_MULTI1: case ENEMY_MULTI2: case ENEMY_MULTI3: case ENEMY_ORBITER1: case ENEMY_ORBITER2: case ENEMY_ORBITER3: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1400 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2300, 2800, 4, passing_colours); break; case ENEMY_DISRUPTER1: case ENEMY_DISRUPTER3: passing_colours[0] = TRANS_LRED; passing_colours[1] = TRANS_ORANGE; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1200 + crandom(250), passing_colours); place_explosion(enemy[e].x - 30000, enemy[e].y, 0,0, 300 + crandom(150), passing_colours); place_explosion(enemy[e].x + 30000, enemy[e].y, 0,0, 300 + crandom(150), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2300, 2800, 4, passing_colours); break; case ENEMY_DISRUPTER2: passing_colours[0] = TRANS_LRED; passing_colours[1] = TRANS_ORANGE; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1200 + crandom(250), passing_colours); place_explosion(enemy[e].x, enemy[e].y - 30000, 0,0, 300 + crandom(150), passing_colours); place_explosion(enemy[e].x, enemy[e].y + 30000, 0,0, 300 + crandom(150), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2300, 2800, 4, passing_colours); break; case ENEMY_ATTRACTOR: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1400 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2300, 2800, 4, passing_colours); simple_shockwave(TRANS_PURPLE, enemy[e].x, enemy[e].y, 0, 0, 500 + crandom(50), 15); blast(enemy[e].x, enemy[e].y, 60000, 0, 5000, OWNER_ENEMY); line_blast(enemy[e].x, enemy[e].y, BULLET_ATTRACTOR_LINE, e); break; case ENEMY_PULSER1: case ENEMY_PULSER2: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1200 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); k = (enemy[e].attribute [0] / 4) % 8; l = CLOUD_PULSER1_V; if (enemy[e].type == ENEMY_PULSER2) l = CLOUD_PULSER2_V; if (k >= 4) k = 8 - k; for (j = 0; j < 2; j ++) { create_cloud(l, enemy[e].x - (11 + (enemy[e].type == ENEMY_PULSER2)) * GRAIN, // enemy[e].x, enemy[e].y + (k + (k * (j == 0) * -1) - (35 * j) + (8 * j == 0)) * GRAIN, enemy[e].x, enemy[e].y, enemy[e].x_speed, enemy[e].y_speed - (1000 + grand(2000)) * (j - (j == 0)), 3 + grand(10), 1, 0, 0, j, 0, passing_colours); } l = CLOUD_PULSER1_H; if (enemy[e].type == ENEMY_PULSER2) l = CLOUD_PULSER2_H; for (j = 0; j < 2; j ++) { create_cloud(l, enemy[e].x + (k + (k * (j == 0) * -1) - (35 * j) + (8 * j == 0)) * GRAIN, enemy[e].y - (11 + (enemy[e].type == ENEMY_PULSER2)) * GRAIN, // enemy[e].y, enemy[e].x, enemy[e].y, enemy[e].x_speed - (1000 + grand(2000)) * (j - (j == 0)), enemy[e].y_speed, 3 + grand(10), 1, 0, 0, j, 0, passing_colours); } break; case ENEMY_FORKER1: case ENEMY_FORKER2: passing_colours[0] = TRANS_DBLUE; passing_colours[1] = TRANS_PURPLE; passing_colours[2] = TRANS_ORANGE; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1200 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); break; case ENEMY_SHADOW1: case ENEMY_SHADOW2: case ENEMY_CURVE3: passing_colours[0] = TRANS_DBLUE; passing_colours[1] = TRANS_LBLUE; passing_colours[2] = TRANS_WHITE; place_explosion(enemy[e].x, enemy[e].y, 0,0, 2000 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); break; case ENEMY_SHIELDER1: passing_colours[0] = TRANS_DBLUE; passing_colours[1] = TRANS_PURPLE; passing_colours[2] = TRANS_ORANGE; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1200 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); for (j = 0; j < 3; j ++) { create_cloud(CLOUD_SQUAREY, enemy[e].x, enemy[e].y, enemy[e].x - xpart(enemy[e].attribute [1], 30), enemy[e].y - ypart(enemy[e].attribute [1], 30), enemy[e].x_speed + xpart(enemy[e].attribute [1] + ((j * ANGLE_FULL / 3) & 1023), 500 + grand(3000)), //grand(5000) - grand(5000), enemy[e].y_speed + ypart(enemy[e].attribute [1] + ((j * ANGLE_FULL / 3) & 1023), 500 + grand(3000)),//grand(5000) - grand(5000), 3 + grand(50), 1, 0, enemy[e].attribute [1] + ((j * ANGLE_FULL / 3) & 1023), enemy[e].attribute [2], 0, passing_colours); } break; case ENEMY_ZAPPER1: passing_colours[0] = TRANS_DBLUE; passing_colours[1] = TRANS_LBLUE; passing_colours[2] = TRANS_WHITE; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1200 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; for (j = 0; j < 8; j ++) { k = enemy[e].x + xpart(enemy[e].attribute [4] + (j * ANGLE_1_EIGHTH), 35 * GRAIN); l = enemy[e].y + ypart(enemy[e].attribute [4] + (j * ANGLE_1_EIGHTH), 35 * GRAIN); place_explosion(k, l, 0,0, 100 + crandom(50), passing_colours); place_burstlet_burst(k, l, 0, 0, 2 + grand(2), 2, 6, 1200, 1800, 4, passing_colours); } break; case ENEMY_OVERZAPPER: passing_colours[0] = TRANS_DBLUE; passing_colours[1] = TRANS_LBLUE; passing_colours[2] = TRANS_WHITE; place_explosion(enemy[e].x, enemy[e].y, 0,0, 3000 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2300, 2800, 4, passing_colours); passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; for (j = 0; j < 8; j ++) { k = enemy[e].x + xpart(enemy[e].attribute [4] + (j * ANGLE_1_EIGHTH), 60 * GRAIN); l = enemy[e].y + ypart(enemy[e].attribute [4] + (j * ANGLE_1_EIGHTH), 60 * GRAIN); place_explosion(k, l, 0,0, 250 + crandom(50), passing_colours); place_burstlet_burst(k, l, 0, 0, 2 + grand(2), 2, 6, 2000, 2500, 4, passing_colours); } break; case ENEMY_PUFFER1: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1000 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; puffer_bang(enemy[e].x, enemy[e].y, enemy[e].attribute [2], 3, 17, passing_colours); /* place_explosion_no_light(enemy[e].x + xpart((enemy[e].attribute [2] * 8) % 1024, 16 * GRAIN), enemy[e].y + ypart((enemy[e].attribute [2] * 8) % 1024, 16 * GRAIN), 0 + xpart((enemy[e].attribute [2] * 8) % 1024, GRAIN / 2), 0 + ypart((enemy[e].attribute [2] * 8) % 1024, GRAIN / 2), 300 + crandom(250), passing_colours); place_explosion_no_light(enemy[e].x + xpart(((enemy[e].attribute [2] + 85) * 8) % 1024, 16 * GRAIN), enemy[e].y + ypart(((enemy[e].attribute [2] + 85) * 8) % 1024, 16 * GRAIN), 0 + xpart(((enemy[e].attribute [2] + 85) * 8) % 1024, GRAIN / 2), 0 + ypart(((enemy[e].attribute [2] + 85) * 8) % 1024, GRAIN / 2), 300 + crandom(250), passing_colours); place_explosion_no_light(enemy[e].x + xpart(((enemy[e].attribute [2] - 85) * 8) % 1024, 16 * GRAIN), enemy[e].y + ypart(((enemy[e].attribute [2] - 85) * 8) % 1024, 16 * GRAIN), 0 + xpart(((enemy[e].attribute [2] - 85) * 8) % 1024, GRAIN / 2), 0 + ypart(((enemy[e].attribute [2] - 85) * 8) % 1024, GRAIN / 2), 300 + crandom(250), passing_colours);*/ // place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, // 4, passing_colours); break; case ENEMY_PUFFER3: passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1100 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; puffer_bang(enemy[e].x, enemy[e].y, enemy[e].attribute [2], 3, 19, passing_colours); break; case ENEMY_PUFFER4: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1600 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); passing_colours[0] = TRANS_DBLUE; passing_colours[1] = TRANS_LBLUE; passing_colours[2] = TRANS_WHITE; puffer_bang(enemy[e].x, enemy[e].y, enemy[e].attribute [2], 5, 25, passing_colours); break; case ENEMY_PUFFER2: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1300 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); passing_colours[0] = TRANS_ORANGE; passing_colours[1] = TRANS_YELLOW; passing_colours[2] = TRANS_WHITE; puffer_bang(enemy[e].x, enemy[e].y, enemy[e].attribute [2], 4, 20, passing_colours); /* place_explosion_no_light(enemy[e].x + xpart((enemy[e].attribute [2] * 8) % 1024, 18 * GRAIN), enemy[e].y + ypart((enemy[e].attribute [2] * 8) % 1024, 18 * GRAIN), 0 + xpart((enemy[e].attribute [2] * 8) % 1024, GRAIN / 2), 0 + ypart((enemy[e].attribute [2] * 8) % 1024, GRAIN / 2), 300 + crandom(250), passing_colours); place_explosion_no_light(enemy[e].x + xpart(((enemy[e].attribute [2] + 32) * 8) % 1024, 18 * GRAIN), enemy[e].y + ypart(((enemy[e].attribute [2] + 64) * 8) % 1024, 18 * GRAIN), 0 + xpart(((enemy[e].attribute [2] + 64) * 8) % 1024, GRAIN / 2), 0 + ypart(((enemy[e].attribute [2] + 64) * 8) % 1024, GRAIN / 2), 300 + crandom(250), passing_colours); place_explosion_no_light(enemy[e].x + xpart(((enemy[e].attribute [2] - 32) * 18) % 1024, 8 * GRAIN), enemy[e].y + ypart(((enemy[e].attribute [2] - 64) * 18) % 1024, 8 * GRAIN), 0 + xpart(((enemy[e].attribute [2] - 64) * 8) % 1024, GRAIN / 2), 0 + ypart(((enemy[e].attribute [2] - 64) * 8) % 1024, GRAIN / 2), 300 + crandom(250), passing_colours); place_explosion_no_light(enemy[e].x + xpart(((enemy[e].attribute [2] + 64) * 8) % 1024, 18 * GRAIN), enemy[e].y + ypart(((enemy[e].attribute [2] + 128) * 8) % 1024, 18 * GRAIN), 0 + xpart(((enemy[e].attribute [2] + 128) * 8) % 1024, GRAIN / 2), 0 + ypart(((enemy[e].attribute [2] + 128) * 8) % 1024, GRAIN / 2), 300 + crandom(250), passing_colours); // place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, // 4, passing_colours);*/ break; case ENEMY_BRACKET1: case ENEMY_BRACKET2: passing_colours[0] = TRANS_LRED; passing_colours[1] = TRANS_ORANGE; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1000 + crandom(250), passing_colours); passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); break; case ENEMY_BRACKET3: case ENEMY_BRACKET4: case ENEMY_BRACKET5: passing_colours[0] = TRANS_LRED; passing_colours[1] = TRANS_ORANGE; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1900 + crandom(250), passing_colours); passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); break; case ENEMY_WORMER1: case ENEMY_WORMER2: case ENEMY_WORMER3: case ENEMY_WORMER4: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1600 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2500, 2500, 4, passing_colours); break; case ENEMY_HEAD1: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_ORANGE; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1800 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); break; case ENEMY_OVERTRIANGLER: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_ORANGE; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 3500 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x, enemy[e].y, 0, 0, 0, 0, //enemy[e].x_speed + , enemy[e].y_speed, 60,2,0, 0, 900, 4, passing_colours); break; case ENEMY_DEFENDER1: case ENEMY_DEFENDER3: case ENEMY_BEAMER1: case ENEMY_BEAMER2: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_ORANGE; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 3500 + crandom(250), passing_colours); place_explosion(enemy[e].x - 60000, enemy[e].y, 0,0, 2500 + crandom(250), passing_colours); place_explosion(enemy[e].x + 60000, enemy[e].y, 0,0, 2500 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x + 40 * GRAIN, enemy[e].y, 0, 0, 2 * GRAIN, 0, //enemy[e].x_speed + , enemy[e].y_speed, 50,2,0, 0, 600, 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x - 40 * GRAIN, enemy[e].y, 0, 0, -2 * GRAIN, 0, //enemy[e].x_speed + , enemy[e].y_speed, 50,2,0, 0, 600, 4, passing_colours); break; case ENEMY_DEFENDER2: passing_colours[0] = TRANS_ORANGE; passing_colours[1] = TRANS_YELLOW; passing_colours[2] = TRANS_WHITE; place_explosion(enemy[e].x, enemy[e].y, 0,0, 3500 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x, enemy[e].y + 40 * GRAIN, 0, 0, 0, 2 * GRAIN, //enemy[e].x_speed + , enemy[e].y_speed, 50,2,0, 0, 600, 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x, enemy[e].y - 40 * GRAIN, 0, 0, 0, -2 * GRAIN, //enemy[e].x_speed + , enemy[e].y_speed, 50,2,0, 0, 600, 4, passing_colours); break; case ENEMY_OVERDISRUPTER: passing_colours[0] = TRANS_DGREY; passing_colours[1] = TRANS_DBLUE; passing_colours[2] = TRANS_LBLUE; place_explosion(enemy[e].x, enemy[e].y, 0,0, 3500 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x, enemy[e].y + 40 * GRAIN, 0, 0, 0, 2 * GRAIN, //enemy[e].x_speed + , enemy[e].y_speed, 50,2,0, 0, 600, 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x, enemy[e].y - 40 * GRAIN, 0, 0, 0, -2 * GRAIN, //enemy[e].x_speed + , enemy[e].y_speed, 50,2,0, 0, 600, 4, passing_colours); break; case ENEMY_OVERBLATTER: case ENEMY_OVERBLATTER2: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_ORANGE; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 4000 + crandom(550), passing_colours); // place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 8000, 8500, // 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x, enemy[e].y, 0, 0, 0, 0, 60,2,0, 0, 1000, 4, passing_colours); /* for (j = 0; j < 4; j ++) { place_explosion_no_light(enemy[e].x + xpart((enemy[e].attribute [2] + k * ANGLE_QUARTER) % ANGLE_FULL, 50 * GRAIN), enemy[e].y + ypart((enemy[e].attribute [2] + k * ANGLE_QUARTER) % ANGLE_FULL, 50 * GRAIN), 0, 0, 400 + crandom(250), passing_colours); }*/ // draw_blatter(bmp, x, y, 5, 50, enemy[dr].attribute [2], 15, GC_YELLOW2, GC_YELLOW5); break; case ENEMY_OVERSPINNER: case ENEMY_UNDERSPIKEY: case ENEMY_UNDERSPIKEY2: case ENEMY_UNDERSPIKEY3: case ENEMY_OVERSPIKEY2: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_ORANGE; passing_colours[2] = TRANS_YELLOW; case ENEMY_OVERSPIKEY: if (enemy[e].type == ENEMY_OVERSPIKEY) { passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; } place_explosion(enemy[e].x, enemy[e].y, 0,0, 5500 + crandom(550), passing_colours); // place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 8000, 8500, // 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x, enemy[e].y, 0, 0, 0, 0, 120,2,0, 0, 1300, 4, passing_colours); break; case ENEMY_BOSS1_1: case ENEMY_BOSS1_2: case ENEMY_BOSS1_3: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_ORANGE; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 8500 + crandom(550), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 8000, 8500, 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x, enemy[e].y, 0, 0, 0, 0, 360,2,0, 0, 1600, 4, passing_colours); break; case ENEMY_BOSS2: case ENEMY_BOSS2_2: case ENEMY_BOSS2_3: passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 8500 + crandom(550), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 8000, 8500, 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x, enemy[e].y, 0, 0, 0, 0, 360,2,0, 0, 1600, 4, passing_colours); break; case ENEMY_BOSS3_1: case ENEMY_BOSS3_2: case ENEMY_BOSS3_3: passing_colours[0] = TRANS_DBLUE; passing_colours[1] = TRANS_LBLUE; passing_colours[2] = TRANS_WHITE; place_explosion(enemy[e].x, enemy[e].y, 0,0, 8500 + crandom(550), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 8000, 8500, 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x, enemy[e].y, 0, 0, 0, 0, 360,2,0, 0, 1600, 4, passing_colours); break; case ENEMY_HEAD1_EYE1: case ENEMY_HEAD1_EYE2: case ENEMY_HEAD1_EYE3: case ENEMY_BOSS1_TURRET1: case ENEMY_BOSS1_TURRET2: case ENEMY_BOSS1_TURRET3: case ENEMY_BRACKET4_TURRET: case ENEMY_CRUISER1_TURRET: case ENEMY_CRUISER2_TURRET: case ENEMY_CRUISER3_TURRET: case ENEMY_CRUISER4_TURRET: case ENEMY_MINER3_TURRET: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 400 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); break; case ENEMY_DEFENDER1_TURRET1: case ENEMY_DEFENDER1_TURRET2: case ENEMY_DEFENDER1_TURRET3: case ENEMY_DEFENDER2_TURRET1: case ENEMY_DEFENDER2_TURRET2: case ENEMY_DEFENDER2_TURRET3: case ENEMY_DEFENDER3_TURRET1: case ENEMY_DEFENDER3_TURRET2: case ENEMY_DEFENDER3_TURRET3: case ENEMY_DEFENDER3_TURRET4: case ENEMY_DEFENDER3_TURRET5: case ENEMY_DEFENDER3_TURRET6: case ENEMY_BOSS2_TURRET1: case ENEMY_BOSS2_TURRET2: case ENEMY_BOSS2_TURRET3: case ENEMY_BOSS2_TURRET4: passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 500 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); break; case ENEMY_BOSS3_TURRET1: case ENEMY_BOSS3_TURRET2: case ENEMY_BOSS3_TURRET3: passing_colours[0] = TRANS_DBLUE; passing_colours[1] = TRANS_LBLUE; passing_colours[2] = TRANS_WHITE; place_explosion(enemy[e].x, enemy[e].y, 0,0, 700 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); break; case ENEMY_LEAPER1: case ENEMY_LEAPER2: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 800 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, 0, 0, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); break; case ENEMY_FIGHTER1: case ENEMY_FIGHTER2: case ENEMY_FIGHTER3: case ENEMY_FIGHTER5: case ENEMY_MESSENGER: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 400 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, enemy[e].x_speed, enemy[e].y_speed, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); break; case ENEMY_FIGHTER4: passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 400 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, enemy[e].x_speed, enemy[e].y_speed, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); break; case ENEMY_BOMBER1: case ENEMY_BOMBER2: case ENEMY_BOMBER3: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 400 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, enemy[e].x_speed, enemy[e].y_speed, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x, enemy[e].y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 50 + grand(15) * 2,2,0, 0, 250, 4, passing_colours); // remember: tickrate must be a factor of 16, and timeout must be even break; case ENEMY_CRUISER1: case ENEMY_CRUISER2: case ENEMY_CRUISER3: case ENEMY_CRUISER4: passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0,0, 1400 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, enemy[e].x_speed, enemy[e].y_speed, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); create_cloud(CLOUD_SPAWNER, enemy[e].x, enemy[e].y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 50 + grand(15) * 2,2,0, 0, 250, 4, passing_colours); // remember: tickrate must be a factor of 16, and timeout must be even break; case ENEMY_MINER1: case ENEMY_MINEFIELDER1: case ENEMY_MINER2: case ENEMY_MINER3: k = 5 + grand(7); l = BULLET_MINE1 + (enemy[e].type == ENEMY_MINER2) + (2 * (enemy[e].type == ENEMY_MINER3)); for (j = 0; j < k; j ++) { create_bullet(l, enemy[e].x, enemy[e].y, enemy[e].x_speed + grand(12001) - 6000, enemy[e].y_speed + grand(12001) - 6000, OWNER_ENEMY, 1, 300 + grand(100), 20, 0, 0, MINE_SIZE, bullet_colours, 1,0,0,0,0,0); } passing_colours[0] = TRANS_DRED; passing_colours[1] = TRANS_LRED; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0, 0, 1200 + crandom(250), passing_colours); break; case ENEMY_BLOATER1: k = 4 + grand(3); bullet_colours [0] = TRANS_LGREEN; bullet_colours [1] = TRANS_LGREEN; bullet_colours [2] = TRANS_LGREEN; bullet_colours [3] = TRANS_DGREEN; for (j = 0; j < k; j ++) { create_bullet(BULLET_SEEKER2, enemy[e].x + grand(12001) - 6000, enemy[e].y + grand(12001) - 6000, enemy[e].x_speed + grand(6001) - 3000, enemy[e].y_speed + grand(6001) - 3000, OWNER_ENEMY, DAM_LARGE_GREEN_SEEKER, 220 + grand(50), 120, grand(ANGLE_FULL), 0, 0, bullet_colours, 1,closest_target(enemy[e].x, enemy[e].y),38,48,180,7001); } passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0, 0, 1200 + crandom(250), passing_colours); break; case ENEMY_BLOATER2: k = 4 + grand(3); bullet_colours [0] = TRANS_YELLOW; bullet_colours [1] = TRANS_ORANGE; bullet_colours [2] = TRANS_LRED; bullet_colours [3] = TRANS_DRED; for (j = 0; j < k; j ++) { create_bullet(BULLET_SEEKER2, enemy[e].x + grand(12001) - 6000, enemy[e].y + grand(12001) - 6000, enemy[e].x_speed + grand(12001) - 6000, enemy[e].y_speed + grand(12001) - 6000, OWNER_ENEMY, DAM_LARGE_GREEN_SEEKER + 50, 220 + grand(50), 120, j * ANGLE_FULL / 6, //and(ANGLE_FULL), 0, 0, bullet_colours, 1,closest_target(enemy[e].x, enemy[e].y),48,48,200,7001); } passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0, 0, 1200 + crandom(250), passing_colours); /* k = 5 + grand(4); bullet_colours [0] = COLOUR_RED5; bullet_colours [1] = COLOUR_ORANGE6; bullet_colours [2] = COLOUR_YELLOW6; bullet_colours [3] = COLOUR_YELLOW8; for (j = 0; j < k; j ++) { create_bullet(BULLET_EVIL_WORM, enemy[e].x + grand(12001) - 6000, enemy[e].y + grand(12001) - 6000, // enemy[e].x_speed + grand(6001) - 3000, enemy[e].y_speed + grand(6001) - 3000, enemy[e].x_speed, enemy[e].y_speed, OWNER_ENEMY, DAM_WORMS2, 180, 80, grand(ANGLE_FULL), 0, 0, bullet_colours, 1,600,60,closest_target(enemy[e].x, enemy[e].y),8,0); } passing_colours[0] = TRANS_DGREEN; passing_colours[1] = TRANS_LGREEN; passing_colours[2] = TRANS_YELLOW; place_explosion(enemy[e].x, enemy[e].y, 0, 0, 1200 + crandom(250), passing_colours);*/ break; } // if (standard_sound != ESOUND_NONE) if (eclass[enemy[e].type].role != ROLE_BOSS) enemy_soundf(e, NWAV_BANG, enemy_sound_pitch(enemy[e].type)); else enemy_soundf(e, NWAV_BIGBANG, enemy_sound_pitch(enemy[e].type)); check_enemy_pickup_drop(e); } // end if bang destroy_enemy(e); } void destroy_enemy(int e) { enemy[e].type = ENEMY_NONE; // calculate_ambience(); } void puffer_bang(int x, int y, int rot, int number, int dist, int colours [5]) { int i; int each_rot = ANGLE_FULL / number; dist *= GRAIN; for (i = 0; i < number; i ++) { place_explosion_no_light(x + xpart(((rot * 8) + i * each_rot) % 1024, dist), y + ypart(((rot * 8) + i * each_rot) % 1024, dist), 0 + xpart(((rot * 8) + i * each_rot) % 1024, GRAIN / 2), 0 + ypart(((rot * 8) + i * each_rot) % 1024, GRAIN / 2), 300 + crandom(250), colours); } } int enemy_sound_pitch(int ec) { switch (eclass[ec].pitch) { case PITCH_GUARDIAN: return 900 + grand(200); case PITCH_FIGHTER: return 1800 + grand(300); case PITCH_SMALL_SPINNER: return 1400 + grand(200); case PITCH_LARGE_SPINNER: return 700 + grand(100); case PITCH_HEAVY_SPINNER: return 600 + grand(100); case PITCH_BOSS1: return 400 + grand(50); case PITCH_BOSS2: return 350 + grand(50); case PITCH_BOSS3: return 320 + grand(50); case PITCH_MINIBOSS1: return 600 + grand(50); case PITCH_MINIBOSS2: return 500 + grand(50); case PITCH_TURRET1: return 1600 + grand(200); case PITCH_TURRET2: return 1400 + grand(200); case PITCH_MEDIUM: return 1300 + grand(100); case PITCH_HEAVY: return 700 + grand(80); } return 1000; } void check_enemy_pickup_drop(int e) { int create_symbol = 0; int create_other = 0; int symbol_count_needed; if (eclass[enemy[e].type].role == ROLE_TURRET) return; /* if (enemy[e].carrying_pickup != PICKUP_NONE) { if (enemy[e].carrying_pickup >= PICKUP_SQUARE && enemy[e].carrying_pickup <= PICKUP_TRIANGLE) create_pickup(enemy[e].carrying_pickup, -1, enemy[e].x, enemy[e].y, SYMBOL_TIMEOUT); else create_pickup(enemy[e].carrying_pickup, -1, enemy[e].x, enemy[e].y, 333); } */ // if (enemy[e].target == TARGET_PRIMARY) { // if (arena.targets_left_total <= arena.total_targets / 4 // && arena.targets_left_total + 1 > arena.total_targets / 4) // create_pickup(PICKUP_SQUARE + grand(3), -1, enemy[e].x, enemy[e].y, SYMBOL_TIMEOUT); // create_pickup(PICKUP_REPAIR, 0, enemy[e].x, enemy[e].y, 330); // char get_second = enemy[e].target == TARGET_PRIMARY && arena.targets_left_total == 7; if (arena.total_targets > 1) { // if ((enemy[e].target == TARGET_PRIMARY && arena.targets_left_total % (arena.total_targets / 3) == 1) if (game.type == GAME_DUEL || game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) { if (enemy[e].target == TARGET_PRIMARY || game.type == GAME_DUEL) { game.ta_symbol_count ++; if (eclass[enemy[e].type].role == ROLE_MINIBOSS) game.ta_symbol_count += 2; if (eclass[enemy[e].type].role == ROLE_BOSS) game.ta_symbol_count += 3; symbol_count_needed = 9; if (game.symbols_given <= 25) symbol_count_needed = 5; if (game.symbols_given <= 15) symbol_count_needed = 3; if (game.type == GAME_TIME_ATTACK_COOP || game.type == GAME_DUEL) { symbol_count_needed --; if (game.symbols_given >= 50) symbol_count_needed = 99; } else { if (game.symbols_given >= 30) symbol_count_needed = 99; } if (game.ta_symbol_count >= symbol_count_needed && grand(4) != 0) // don't worry, you'll still get the symbol, just a little later. { create_symbol = 1; game.symbols_given ++; game.ta_symbol_count -= symbol_count_needed; } } } else { // if ((enemy[e].target == TARGET_PRIMARY && arena.symbol_list [arena.symbol_index - 1] == 1)) if ((enemy[e].target == TARGET_PRIMARY && arena.symbol_list [arena.symbol_index] == 1)) create_symbol = 1; if (enemy[e].target == TARGET_PRIMARY) arena.symbol_index ++; } if (create_symbol) create_pickup(PICKUP_PRESYMBOL, PICKUP_SQUARE + grand(3), enemy[e].x, enemy[e].y, SYMBOL_TIMEOUT); else { if (grand(10) < eclass[enemy[e].type].generous) create_other = 1; if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) { if (grand(15) < eclass[enemy[e].type].generous) create_other = 1; // increased chance, to make up for lack of between-level repair } } if (create_other) { switch(grand(3)) { case 0: create_pickup(PICKUP_REPAIR, 0, enemy[e].x, enemy[e].y, 330); break; case 1: case 2: switch(grand(13)) { case 0: create_pickup(PICKUP_PRESECONDARY, SECOND_FURIOUS_ORB, enemy[e].x, enemy[e].y, 100); break; case 1: create_pickup(PICKUP_PRESECONDARY, SECOND_MANIFOLD_ORB, enemy[e].x, enemy[e].y, 100); break; case 2: create_pickup(PICKUP_PRESECONDARY, SECOND_PANIC_EELS, enemy[e].x, enemy[e].y, 100); break; case 3: //if (grand(2) == 0) create_pickup(PICKUP_PRESECONDARY, SECOND_WORMS_SORROW, enemy[e].x, enemy[e].y, 100); break; case 4: create_pickup(PICKUP_PRESECONDARY, SECOND_WORMS_AGONY, enemy[e].x, enemy[e].y, 100); break; case 5: create_pickup(PICKUP_PRESECONDARY, SECOND_EYE_DESOLATION, enemy[e].x, enemy[e].y, 100); break; case 6: create_pickup(PICKUP_PRESECONDARY, SECOND_FROZEN_TEETH, enemy[e].x, enemy[e].y, 100); break; //default: case 7: create_pickup(PICKUP_PRESECONDARY, SECOND_FROZEN_STARS, enemy[e].x, enemy[e].y, 100); break; case 8: create_pickup(PICKUP_PRESECONDARY, SECOND_BURNING_EYE, enemy[e].x, enemy[e].y, 100); break; case 9: create_pickup(PICKUP_PRESECONDARY, SECOND_TOXIC_SUN, enemy[e].x, enemy[e].y, 100); break; case 10: create_pickup(PICKUP_PRESECONDARY, SECOND_FLOWER, enemy[e].x, enemy[e].y, 100); break; case 11: create_pickup(PICKUP_PRESECONDARY, SECOND_SPORES, enemy[e].x, enemy[e].y, 100); break; case 12: create_pickup(PICKUP_PRESECONDARY, SECOND_CLAWS, enemy[e].x, enemy[e].y, 100); break; } break; } } } /* else { switch(grand(6)) { case 0: create_pickup(PICKUP_PRESECONDARY, SECOND_FURIOUS_ORB, enemy[e].x, enemy[e].y, 100); break; case 1: create_pickup(PICKUP_PRESECONDARY, SECOND_MANIFOLD_ORB, enemy[e].x, enemy[e].y, 100); break; case 2: create_pickup(PICKUP_PRESECONDARY, SECOND_PANIC_EELS, enemy[e].x, enemy[e].y, 100); break; case 3: create_pickup(PICKUP_PRESECONDARY, SECOND_WORMS_SORROW, enemy[e].x, enemy[e].y, 100); break; case 4: create_pickup(PICKUP_PRESECONDARY, SECOND_WORMS_AGONY, enemy[e].x, enemy[e].y, 100); break; default: create_pickup(PICKUP_PRESECONDARY, SECOND_BURNING_EYE, enemy[e].x, enemy[e].y, 100); break; } }*/ } /* else { if (grand(10) < eclass[enemy[e].type].generous) { switch(grand(2)) { case 0: create_pickup(PICKUP_REPAIR, 0, enemy[e].x, enemy[e].y, 330); break; case 1: switch(grand(6)) { case 0: create_pickup(PICKUP_PRESECONDARY, SECOND_FURIOUS_ORB, enemy[e].x, enemy[e].y, 100); break; case 1: create_pickup(PICKUP_PRESECONDARY, SECOND_MANIFOLD_ORB, enemy[e].x, enemy[e].y, 100); break; case 2: create_pickup(PICKUP_PRESECONDARY, SECOND_PANIC_EELS, enemy[e].x, enemy[e].y, 100); break; case 3: create_pickup(PICKUP_PRESECONDARY, SECOND_WORMS_SORROW, enemy[e].x, enemy[e].y, 100); break; case 4: create_pickup(PICKUP_PRESECONDARY, SECOND_WORMS_AGONY, enemy[e].x, enemy[e].y, 100); break; default: create_pickup(PICKUP_PRESECONDARY, SECOND_BURNING_EYE, enemy[e].x, enemy[e].y, 100); break; } break; } } } */ } // REMEMBER this can be called from collision detection in actor.c int move_enemy(int e) { if (enemy[e].x_speed == 0 && enemy[e].y_speed == 0) return 1; if (enemy[e].x + enemy[e].x_speed <= enemy[e].radius + 2000 // test - not edge_radius || enemy[e].x + enemy[e].x_speed >= arena.max_x - enemy[e].radius - 2000) { enemy[e].x_speed *= -1; } if (enemy[e].y + enemy[e].y_speed <= enemy[e].radius + 2000 || enemy[e].y + enemy[e].y_speed >= arena.max_y - enemy[e].radius - 2000) { enemy[e].y_speed *= -1; } //enemy[mbull].x2 += bullet[mbull].x_speed; //bullet[mbull].y2 += bullet[mbull].y_speed; enemy[e].x += enemy[e].x_speed; enemy[e].y += enemy[e].y_speed; // if an enemy is subject to drag, this happens in its own function return 1; } /* int move_torper(int e) { if (grand(15) == 0) { accelerate_enemy(e, grand(ANGLE_FULL + 1), 1000 + grand(1000)); } drag_enemy(e, 0.03); if (enemy[e].counter % 16 == 0) { enemy[e].attacking = nearby_target(500000, enemy[e].x, enemy[e].y); } if (enemy[e].attacking != ATTACK_NONE) { enemy[e].angle = track_target(e, enemy[e].attacking, 32); if (enemy[e].recycle == 0) standard_attack(e, enemy[e].angle); } return 1; } */ /* int move_stinger2(int e) { if (grand(10) == 0) { accelerate_enemy(e, grand(ANGLE_FULL + 1), 800 + grand(800)); } drag_enemy(e, 0.02); if (enemy[e].counter % 16 == 0) { enemy[e].attacking = nearby_target(400000, enemy[e].x, enemy[e].y); } if (enemy[e].attacking != ATTACK_NONE) { if (enemy[e].burst_fire > 0) enemy[e].angle = track_target(e, enemy[e].attacking, 16); else enemy[e].angle = track_target(e, enemy[e].attacking, 32); if (enemy[e].recycle == 0) standard_attack(e, enemy[e].angle); } return 1; } */ /* int move_swerver3(int e) { // int tangle = enemy[e].attribute [ATTRIB_SWERVER3_ANGLE2]; int tangle = enemy[e].attribute [ATTRIB_SWERVER_ANGLE]; if (enemy[e].counter % 32 == 0) enemy[e].attacking = closest_target(enemy[e].x, enemy[e].y); enemy[e].angle = turn_towards_angle(enemy[e].angle, enemy[e].attribute [ATTRIB_SWERVER_ANGLE], enemy[e].attribute [ATTRIB_SWERVER_TURN]); if (enemy[e].attacking != ATTACK_NONE && (tangle / 100 == enemy[e].angle / 100 || tangle / 100 == (enemy[e].angle + ANGLE_HALF) / 100 || tangle / 100 == (enemy[e].angle - ANGLE_HALF) / 100)) { enemy[e].attribute [ATTRIB_SWERVER_ANGLE] = grand(ANGLE_FULL + 1); if (grand(2) == 0) { enemy[e].attribute [ATTRIB_SWERVER_ANGLE] = radians_to_angle(atan2((actor[enemy[e].attacking].y - enemy[e].y), (actor[enemy[e].attacking].x - enemy[e].x))); if (enemy[e].attribute [ATTRIB_SWERVER_ANGLE] < 0) enemy[e].attribute [ATTRIB_SWERVER_ANGLE] += ANGLE_FULL; if (enemy[e].attribute [ATTRIB_SWERVER_ANGLE] > ANGLE_FULL) enemy[e].attribute [ATTRIB_SWERVER_ANGLE] -= ANGLE_FULL; } } enemy[e].x_speed = cos(angle_to_radians(enemy[e].angle)) * enemy[e].attribute [ATTRIB_SWERVER_SPEED]; enemy[e].y_speed = sin(angle_to_radians(enemy[e].angle)) * enemy[e].attribute [ATTRIB_SWERVER_SPEED]; if (enemy[e].x + enemy[e].x_speed <= enemy[e].edge_radius || enemy[e].x + enemy[e].x_speed >= arena.max_x - enemy[e].edge_radius - 4000) { enemy[e].x_speed *= -1; enemy[e].angle += ANGLE_HALF; enemy[e].attribute [ATTRIB_SWERVER_ANGLE] = grand(ANGLE_FULL + 1); } if (enemy[e].y + enemy[e].y_speed <= enemy[e].edge_radius || enemy[e].y + enemy[e].y_speed >= arena.max_y - enemy[e].edge_radius - 5000) { enemy[e].y_speed *= -1; enemy[e].angle -= ANGLE_HALF; enemy[e].attribute [ATTRIB_SWERVER_ANGLE] = grand(ANGLE_FULL + 1); } enemy[e].x += enemy[e].x_speed; enemy[e].y += enemy[e].y_speed; if (enemy[e].counter % 16 == 0) { enemy[e].attribute [ATTRIB_SWERVER3_ATTACKING] = nearby_target(400000, enemy[e].x, enemy[e].y); // exit(2); } // if (enemy[e].attacking != ATTACK_NONE) if (enemy[e].attribute [ATTRIB_SWERVER3_ATTACKING] != ATTACK_NONE) { // exit(3); // enemy[e].attribute [ATTRIB_SWERVER3_ANGLE2] = track_target(e, enemy[e].attribute [ATTRIB_SWERVER3_ATTACKING], 16); enemy[e].attribute [ATTRIB_SWERVER3_ANGLE2] = turn_towards_xy(enemy[e].x, enemy[e].y, actor[enemy[e].attribute [ATTRIB_SWERVER3_ATTACKING]].x, actor[enemy[e].attribute [ATTRIB_SWERVER3_ATTACKING]].y, enemy[e].attribute [ATTRIB_SWERVER3_ANGLE2], 16); if (enemy[e].recycle == 0) standard_attack(e, enemy[e].attribute [ATTRIB_SWERVER3_ANGLE2]); } return 1; } */ /* int move_bouncers(int e) { if (enemy[e].type == ENEMY_BOUNCER4) { if (enemy[e].counter % 16 == 0) { enemy[e].attacking = nearby_target(500000, enemy[e].x, enemy[e].y); } if (enemy[e].attacking != ATTACK_NONE) { enemy[e].attribute [ATTRIB_BOUNCER_ANGLE2] = turn_towards_xy(enemy[e].x, enemy[e].y, actor[enemy[e].attacking].x, actor[enemy[e].attacking].y, enemy[e].attribute [ATTRIB_BOUNCER_ANGLE2], 4); if (enemy[e].recycle == 0) standard_attack(e, enemy[e].attribute [ATTRIB_BOUNCER_ANGLE2]); } return 1; } enemy[e].angle += enemy[e].attribute [ATTRIB_BOUNCER_SPIN]; if (enemy[e].angle < 0) enemy[e].angle += ANGLE_FULL; if (enemy[e].angle < ANGLE_FULL) enemy[e].angle -= ANGLE_FULL; enemy[e].attribute [ATTRIB_BOUNCER_SPIN] += enemy[e].attribute [ATTRIB_BOUNCER_DELTA_SPIN]; if (enemy[e].attribute [ATTRIB_BOUNCER_SPIN] > 50) enemy[e].attribute [ATTRIB_BOUNCER_SPIN] = 50; if (enemy[e].attribute [ATTRIB_BOUNCER_SPIN] < -50) enemy[e].attribute [ATTRIB_BOUNCER_SPIN] = -50; if (grand(10) == 0) { enemy[e].attribute [ATTRIB_BOUNCER_DELTA_SPIN] = grand(5) - 2; } return 1; } */ void wormer_pulsates(int e) { enemy[e].radius = 9000 + (100000 * (120 - enemy[e].recycle)) / 1500 + pulsate(48, 1200, enemy[e].recycle); if (enemy[e].recycle > 110) enemy[e].radius = 17000 - (120 - enemy[e].recycle) * GRAIN + pulsate(48, 1200, enemy[e].recycle); } /* void enemy_pulsates(int e, int amount) { pulsate(8, 3500, enemy[e].recycle) } */ int move_drifter_ai(int e) { int ec = enemy[e].type; int slew_amount = eclass[ec].slew; int bullet_colours [4]; int i; if (enemy[e].x / 100000 == enemy[e].x_dest / 100000 && enemy[e].y / 100000 == enemy[e].y_dest / 100000) { enemy[e].x_dest = grand(arena.max_x - enemy[e].edge_radius * 2) + enemy[e].edge_radius; enemy[e].y_dest = grand(arena.max_y - enemy[e].edge_radius * 2) + enemy[e].edge_radius; // enemy[e].x_dest = grand(arena.max_x - enemy[e].edge_radius * 4) + enemy[e].edge_radius * 2; // enemy[e].y_dest = grand(arena.max_y - enemy[e].edge_radius * 4) + enemy[e].edge_radius * 2; // enemy[e].attribute [ATTRIB_DRIFTER_DELTA_SPIN] = grand(5) - 2; } float target_angle = atan2(enemy[e].y_dest - enemy[e].y, enemy[e].x_dest - enemy[e].x); accelerate_enemy(e, radians_to_angle(target_angle), eclass[ec].acceleration); /* enemy[e].attribute [ATTRIB_DRIFTER_SPIN] += enemy[e].attribute [ATTRIB_DRIFTER_DELTA_SPIN]; if (enemy[e].attribute [ATTRIB_DRIFTER_SPIN] > 32) enemy[e].attribute [ATTRIB_DRIFTER_SPIN] = 32; if (enemy[e].attribute [ATTRIB_DRIFTER_SPIN] < -32) enemy[e].attribute [ATTRIB_DRIFTER_SPIN] = -32; enemy[e].attribute [ATTRIB_DRIFTER_LUMP_ANGLE] += enemy[e].attribute [ATTRIB_DRIFTER_SPIN]; */ drag_enemy(e, eclass[ec].drag_amount); int distance, xa, xb, xc, xd; switch(enemy[e].type) { case ENEMY_CURVE2: case ENEMY_CURVE3: if (enemy[e].armour <= 500 && enemy[e].counter % 2 == 0 && grand(1000) > enemy[e].armour) { int passing_colours [5] = {TRANS_DRED, TRANS_LRED, TRANS_YELLOW, 0, 0}; if (enemy[e].type == ENEMY_CURVE3) { passing_colours [0] = TRANS_DBLUE; passing_colours [1] = TRANS_LBLUE; passing_colours [2] = TRANS_WHITE; } xa = grand(ANGLE_FULL); xb = grand(16 * GRAIN); place_small_explosion(enemy[e].x + xpart(xa, xb), enemy[e].y + ypart(xa, xb), enemy[e].x_speed, enemy[e].y_speed, 200 + crandom(200), passing_colours); hurt_enemy(e, 10 + grand(20), enemy[e].attribute [0], 1); } break; case ENEMY_BEAMER2: if (enemy[e].attribute [0] > 0) { create_effect(EFFECT_BLUEBEAM, enemy[e].x + xpart(enemy[e].angle, 31 * GRAIN), enemy[e].y + ypart(enemy[e].angle, 31 * GRAIN), enemy[e].x, enemy[e].y, enemy[e].x + xpart(enemy[e].angle, 400 * GRAIN), enemy[e].y + ypart(enemy[e].angle, 400 * GRAIN), enemy[e].attribute [0], enemy[e].angle,enemy[e].counter,0,0); if (enemy[e].attribute [0] > 100) enemy[e].attribute [0] -= 2; else enemy[e].attribute [0]--; enemy_beam(enemy[e].x, enemy[e].y, enemy[e].angle, enemy[e].attribute [0], EFFECT_BLUEBEAM, e); slew_amount = 2; } manage_turret(e, 0, 74 * GRAIN, 0, 0); manage_turret(e, 1, -74 * GRAIN, 0, 0); break; case ENEMY_BEAMER1: if (enemy[e].attribute [0] > 0) { create_effect(EFFECT_REDBEAM, enemy[e].x + xpart(enemy[e].angle, 31 * GRAIN), enemy[e].y + ypart(enemy[e].angle, 31 * GRAIN), enemy[e].x, enemy[e].y, enemy[e].x + xpart(enemy[e].angle, 400 * GRAIN), enemy[e].y + ypart(enemy[e].angle, 400 * GRAIN), enemy[e].attribute [0], enemy[e].angle,enemy[e].counter,0,0); enemy[e].attribute [0] --; enemy_beam(enemy[e].x, enemy[e].y, enemy[e].angle, enemy[e].attribute [0], EFFECT_REDBEAM, e); slew_amount = 1; } manage_turret(e, 0, 74 * GRAIN, 0, 0); manage_turret(e, 1, -74 * GRAIN, 0, 0); break; case ENEMY_OVERZAPPER: enemy[e].attribute [0] = 0; enemy[e].attribute [4] += enemy[e].attribute [5]; enemy[e].attribute [4] &= 1023; if (enemy[e].attacking != -1) { xa = radians_to_angle(atan2((actor[enemy[e].attacking].y - enemy[e].attribute [9]), (actor[enemy[e].attacking].x - enemy[e].attribute [8]))); if (xa < 0) xa += ANGLE_FULL; if (xa > ANGLE_FULL) xa -= ANGLE_FULL; enemy[e].attribute [8] += xpart(xa, 2000); enemy[e].attribute [9] += ypart(xa, 2000); if (hypot(enemy[e].attribute [8] - enemy[e].x, enemy[e].attribute [9] - enemy[e].y) > 350000) { xa = radians_to_angle(atan2((enemy[e].attribute [9] - enemy[e].y), (enemy[e].attribute [8] - enemy[e].x))); if (xa < 0) xa += ANGLE_FULL; if (xa > ANGLE_FULL) xa -= ANGLE_FULL; enemy[e].attribute [8] -= xpart(xa, 2000); enemy[e].attribute [9] -= ypart(xa, 2000); } } if (enemy[e].attribute [6] <= 0) { for (xa = 0; xa < NO_ACTORS; xa ++) { if (actor[xa].in_play == 0) continue; if (actor[xa].grace_period > 0) continue; if (hypot(enemy[e].attribute [8] - actor[xa].x, enemy[e].attribute [9] - actor[xa].y) < 30000) { zap_attack(e); enemy[e].attribute [6] = 40; break; } } } else enemy[e].attribute [6] --; manage_turret(e, 0, xpart(enemy[e].angle, -30000), ypart(enemy[e].angle, -30000), 0); create_effect(EFFECT_ZAP_AIM, enemy[e].attribute [8], enemy[e].attribute [9], enemy[e].attribute [8] - 30, enemy[e].attribute [9] - 30, enemy[e].attribute [8] + 30, enemy[e].attribute [9] + 30, enemy[e].attribute [7], enemy[e].angle,enemy[e].counter,0,0); enemy[e].recycle = 100; // attribute [6] used instead enemy[e].attribute [7] += xpart(enemy[e].counter * 4, 6); break; case ENEMY_OVERTRIANGLER: manage_turret(e, 0, xpart(enemy[e].angle, -30000), ypart(enemy[e].angle, -30000), 0); // fall-through... case ENEMY_TRIANGLER1: case ENEMY_TRIANGLER2: case ENEMY_TRIANGLER3: if (enemy[e].attribute [1] > 0) { enemy[e].attribute [1] += enemy[e].attribute [2]; enemy[e].attribute [2] --; if (enemy[e].attribute [2] < -1) enemy[e].attribute [2] = -1; } if (enemy[e].attribute [1] < 0) enemy[e].attribute [1] = 0; /* if (enemy[e].attribute [2] != 0) { if (enemy[e].attribute [1] < 24) { enemy[e].attribute [1] += enemy[e].attribute [2]; } if (enemy[e].attribute [1] >= 24) enemy[e].attribute [2] = -6; if (enemy[e].attribute [1] <= 0) enemy[e].attribute [2] = 0; }*/ break; case ENEMY_DEAD_TRI1: case ENEMY_DEAD_TRI2: case ENEMY_DEAD_TRI3: // drag_enemy(e, .01); if (enemy[e].attribute [0] % 2 == 0) { int passing_colours [5]; int cangle = grand(ANGLE_FULL); int cx = enemy[e].x + xpart(cangle, grand(enemy[e].attribute [1])); int cy = enemy[e].y + ypart(cangle, grand(enemy[e].attribute [1])); passing_colours [0] = enemy[e].attribute [3]; create_cloud(CLOUD_MED_TRANS_CIRCLE, cx, cy, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 200 + grand(350),0,2, 0, 0, 0, passing_colours); passing_colours [0] = enemy[e].attribute [4]; create_cloud(CLOUD_MED_TRANS_CIRCLE, cx, cy, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 300 + grand(450),0,6, 0, 0, 0, passing_colours); simple_light(cx, cy, enemy[e].x_speed, enemy[e].y_speed, 600); } enemy[e].attribute [0] --; if (enemy[e].attribute [0] <= 0) { hurt_enemy(e, 99999, OWNER_ENEMY, 0); return 0; } break; case ENEMY_CIRCLER1: if (enemy[e].attribute [0] > 0) enemy[e].attribute [0]--; break; case ENEMY_WORMER1: case ENEMY_WORMER2: case ENEMY_WORMER3: case ENEMY_WORMER4: wormer_pulsates(e); break; case ENEMY_HEAD1: manage_turret(e, 0, 25 * GRAIN, 27 * GRAIN, 0); manage_turret(e, 1, -25 * GRAIN, 27 * GRAIN, 0); break; case ENEMY_DEFENDER1: manage_turret(e, 0, 49 * GRAIN, 0, 0); manage_turret(e, 1, -49 * GRAIN, 0, 0); break; case ENEMY_DEFENDER2: manage_turret(e, 0, 0, 48 * GRAIN, 0); manage_turret(e, 1, 0, -48 * GRAIN, 0); break; case ENEMY_DEFENDER3: manage_turret(e, 0, 52 * GRAIN, 0, 0); manage_turret(e, 1, -52 * GRAIN, 0, 0); break; case ENEMY_OVERDISRUPTER: manage_turret(e, 0, 0, 50 * GRAIN, 0); manage_turret(e, 1, 0, -50 * GRAIN, 0); break; case ENEMY_BOSS1_1: manage_turret(e, 0, 50 * GRAIN, 65 * GRAIN, 0); manage_turret(e, 1, -50 * GRAIN, 65 * GRAIN, 0); manage_turret(e, 2, -50 * GRAIN, -65 * GRAIN, 0); manage_turret(e, 3, 50 * GRAIN, -65 * GRAIN, 0); // manage_turret(e, 0, 0, 60 * GRAIN); // manage_turret(e, 1, 62 * GRAIN, -13 * GRAIN); // manage_turret(e, 2, -62 * GRAIN, -13 * GRAIN); break; case ENEMY_BOSS1_3: manage_turret(e, 0, -83 * GRAIN, 59 * GRAIN, 0); manage_turret(e, 1, 83 * GRAIN, 59 * GRAIN, 0); manage_turret(e, 2, 0, -80 * GRAIN, 0); break; case ENEMY_BOSS2: enemy[e].angle += 5 + grand(10); enemy[e].angle &= ANGLE_FULL - 1; enemy[e].attribute [0] -= 5 + grand(10); enemy[e].attribute [0] &= ANGLE_FULL - 1; manage_turret(e, 0, - 62 * GRAIN, -62 * GRAIN, 0); manage_turret(e, 1, 62 * GRAIN, -62 * GRAIN, 0); manage_turret(e, 2, - 62 * GRAIN, 62 * GRAIN, 0); manage_turret(e, 3, 62 * GRAIN, 62 * GRAIN, 0); break; case ENEMY_BOSS2_2: manage_turret(e, 0, - 79 * GRAIN, 44 * GRAIN, 0); manage_turret(e, 1, 79 * GRAIN, 44 * GRAIN, 0); manage_turret(e, 2, 0 * GRAIN, -89 * GRAIN, 0); break; case ENEMY_BOSS2_3: manage_turret(e, 0, - 109 * GRAIN, 0 * GRAIN, 0); manage_turret(e, 1, 109 * GRAIN, 0 * GRAIN, 0); manage_turret(e, 2, 0 * GRAIN, 97 * GRAIN, 0); manage_turret(e, 3, 0 * GRAIN, -97 * GRAIN, 0); break; case ENEMY_BOSS3_1: manage_turret(e, 0, - 69 * GRAIN, -69 * GRAIN, 0); manage_turret(e, 1, 69 * GRAIN, -69 * GRAIN, 0); manage_turret(e, 2, -69 * GRAIN, 69 * GRAIN, 0); manage_turret(e, 3, 69 * GRAIN, 69 * GRAIN, 0); run_boss3_1(e); break; case ENEMY_BOSS3_2: manage_turret(e, 0, - 78 * GRAIN, 57 * GRAIN, 0); manage_turret(e, 1, 78 * GRAIN, 57 * GRAIN, 0); manage_turret(e, 2, 0 * GRAIN, -78 * GRAIN, 0); break; case ENEMY_BOSS3_3: manage_turret(e, 0, - 88 * GRAIN, -62 * GRAIN, 0); manage_turret(e, 1, 88 * GRAIN, -62 * GRAIN, 0); manage_turret(e, 2, -88 * GRAIN, 62 * GRAIN, 0); manage_turret(e, 3, 88 * GRAIN, 62 * GRAIN, 0); run_boss3_3(e); break; case ENEMY_BRACKET4: manage_turret(e, 0, 26 * GRAIN, 0, 0); manage_turret(e, 1, -26 * GRAIN, 0, 0); break; case ENEMY_MINER3: manage_turret(e, 0, 0, -30 * GRAIN, 0); break; /* case ENEMY_CRUISER1: case ENEMY_CRUISER2: case ENEMY_CRUISER3: case ENEMY_CRUISER4: manage_turret(e, 0, xpart(enemy[e].angle, 22000), ypart(enemy[e].angle, 22000)); break; see cruiser_ai */ case ENEMY_OVERBLATTER: case ENEMY_OVERBLATTER2: /* if (enemy[e].attribute [4] != 0) { enemy[e].attribute [3] += enemy[e].attribute [4]; enemy[e].angle = enemy[e].attribute [3]; } */ xa = 5; // slew if (enemy[e].type == ENEMY_OVERBLATTER2) xa = 6; if (enemy[e].attribute [8] > 0) enemy[e].attribute [8] --; if (enemy[e].attribute [9] > 0) enemy[e].attribute [9] --; if (enemy[e].attacking != -1) { enemy[e].attribute [6] = track_target_any_angle(enemy[e].x + xpart(enemy[e].angle + ANGLE_QUARTER, 26 * GRAIN), enemy[e].y + ypart(enemy[e].angle + ANGLE_QUARTER, 26 * GRAIN), actor[enemy[e].attacking].x, actor[enemy[e].attacking].y, xa, 0, enemy[e].attribute [6]); enemy[e].attribute [7] = track_target_any_angle(enemy[e].x + xpart(enemy[e].angle - ANGLE_QUARTER, 26 * GRAIN), enemy[e].y + ypart(enemy[e].angle - ANGLE_QUARTER, 26 * GRAIN), actor[enemy[e].attacking].x, actor[enemy[e].attacking].y, xa, 0, enemy[e].attribute [7]); } // break; fall through case ENEMY_OVERSPINNER: case ENEMY_OVERSPIKEY: case ENEMY_UNDERSPIKEY: case ENEMY_UNDERSPIKEY2: case ENEMY_UNDERSPIKEY3: case ENEMY_OVERSPIKEY2: enemy[e].attribute [0] += enemy[e].attribute [1]; enemy[e].attribute [0] &= ANGLE_FULL - 1; enemy[e].attribute [2] -= (enemy[e].attribute [1] / 3); enemy[e].attribute [2] &= ANGLE_FULL - 1; break; case ENEMY_SPINNER1: case ENEMY_SPINNER2: case ENEMY_SPINNER3: case ENEMY_SPINNER4: case ENEMY_SPINNER5: case ENEMY_SPIKEY1: case ENEMY_SPIKEY2: case ENEMY_SPIKEY3: case ENEMY_SPIKEY4: case ENEMY_SPIKEY5: case ENEMY_BLATTER1: case ENEMY_BLATTER2: case ENEMY_BLATTER3: case ENEMY_BLATTER4: case ENEMY_BLATTER5: case ENEMY_BLOATER1: case ENEMY_BLOATER2: enemy[e].attribute [0] += enemy[e].attribute [1]; enemy[e].attribute [0] &= ANGLE_FULL - 1; break; // if (enemy[e].attribute [0] > 0) // enemy[e].attribute [0] --; // break; case ENEMY_SHIELDER1: // mirrored for some turrets in move_turret if (enemy[e].attribute [0] > 0) enemy[e].attribute [0] --; enemy[e].attribute [1] = (enemy[e].attribute [1] + enemy[e].attribute [2]) & 1023; break; case ENEMY_ORBITER1: xa = enemy[e].x - enemy[e].x_speed + xpart(enemy[e].attribute [1], 150000); xb = enemy[e].y - enemy[e].y_speed + ypart(enemy[e].attribute [1], 150000); enemy[e].attribute [1] = (enemy[e].attribute [1] + enemy[e].attribute [2]) & 1023; bullet_colours [0] = TRANS_YELLOW; bullet_colours [1] = TRANS_ORANGE; bullet_colours [2] = TRANS_LRED; bullet_colours [3] = TRANS_DRED; for (i = 0; i < 3; i ++) { create_bullet(BULLET_ORBIT, enemy[e].x + xpart(enemy[e].attribute [1] + (ANGLE_FULL / 3) * i, 150000), enemy[e].y + ypart(enemy[e].attribute [1] + (ANGLE_FULL / 3) * i, 150000), 0, 0, OWNER_ENEMY, 100, 2, 100, 0, 0, 5000, bullet_colours, 1, xa, xb,5,7,0); } break; case ENEMY_ORBITER2: xa = enemy[e].x - enemy[e].x_speed + xpart(enemy[e].attribute [1], 150000); xb = enemy[e].y - enemy[e].y_speed + ypart(enemy[e].attribute [1], 150000); enemy[e].attribute [1] = (enemy[e].attribute [1] + enemy[e].attribute [2]) & 1023; enemy[e].attribute [3] = (enemy[e].attribute [3] + enemy[e].attribute [4]) & 1023; bullet_colours [0] = TRANS_YELLOW; bullet_colours [1] = TRANS_ORANGE; bullet_colours [2] = TRANS_LRED; bullet_colours [3] = TRANS_DRED; for (i = 0; i < 2; i ++) { create_bullet(BULLET_ORBIT, enemy[e].x + xpart(enemy[e].attribute [1] + (ANGLE_HALF) * i, 150000), enemy[e].y + ypart(enemy[e].attribute [1] + (ANGLE_HALF) * i, 150000), 0, 0, OWNER_ENEMY, 100, 2, 100, 0, 0, 5000, bullet_colours, 1, xa, xb,5,7,0); } for (i = 0; i < 2; i ++) { create_bullet(BULLET_ORBIT, enemy[e].x + xpart(enemy[e].attribute [3] + (ANGLE_HALF) * i, 100000), enemy[e].y + ypart(enemy[e].attribute [3] + (ANGLE_HALF) * i, 100000), 0, 0, OWNER_ENEMY, 100, 2, 100, 0, 0, 5000, bullet_colours, 1, xa, xb,5,7,0); } break; case ENEMY_ORBITER3: // xa = enemy[e].x - enemy[e].x_speed + xpart(enemy[e].attribute [1], 150000); // xb = enemy[e].y - enemy[e].y_speed + ypart(enemy[e].attribute [1], 150000); enemy[e].attribute [1] = (enemy[e].attribute [1] + enemy[e].attribute [2]) & 1023; // bullet_colours [0] = TRANS_WHITE; /* bullet_colours [0] = TRANS_PURPLE; bullet_colours [1] = TRANS_LBLUE; bullet_colours [2] = TRANS_DBLUE; bullet_colours [3] = TRANS_DBLUE;*/ bullet_colours [0] = TRANS_WHITE; bullet_colours [1] = TRANS_LGREY; bullet_colours [2] = TRANS_LGREY; bullet_colours [3] = TRANS_DGREY; enemy[e].attribute [3] = (enemy[e].attribute [3] + 1) & 0xff; for (i = 0; i < 4; i ++) { xc = pulsate(32, 32, (enemy[e].attribute [3] + i * 64) & 0xff); xd = pulsate(32, 32, (enemy[e].attribute [3] - 1 + i * 64) & 0xff); create_bullet(BULLET_ORBIT, enemy[e].x + xpart(enemy[e].attribute [1] + (ANGLE_QUARTER) * i, 150000 + xc * GRAIN), enemy[e].y + ypart(enemy[e].attribute [1] + (ANGLE_QUARTER) * i, 150000 + xc * GRAIN), 0, 0, OWNER_ENEMY, 150, 2, 100, 0, 0, 4000, bullet_colours, 1, enemy[e].x - enemy[e].x_speed + xpart((enemy[e].attribute [1] + (ANGLE_QUARTER) * i - enemy[e].attribute [2]) & 1023, 150000 + xd * GRAIN), enemy[e].y - enemy[e].y_speed + ypart((enemy[e].attribute [1] + (ANGLE_QUARTER) * i - enemy[e].attribute [2]) & 1023, 150000 + xd * GRAIN), 4,6,0); } break; case ENEMY_ZAPPER1: enemy[e].recycle = 10; enemy[e].attribute [0] = 0; enemy[e].attribute [4] += enemy[e].attribute [5]; enemy[e].attribute [4] &= 1023; if (enemy[e].attacking != ATTACK_NONE && actor[enemy[e].attacking].in_play == 1) { if ((distance = hypot(actor[enemy[e].attacking].x - enemy[e].x, actor[enemy[e].attacking].y - enemy[e].y)) < eclass[ec].range) { enemy[e].attribute [0] = 1; enemy[e].attribute [1] = actor[enemy[e].attacking].x; enemy[e].attribute [2] = actor[enemy[e].attacking].y; enemy[e].attribute [3] = distance / GRAIN; if (actor[enemy[e].attacking].grace_period == 0) hurt_actor(enemy[e].attacking, OWNER_ENEMY, 3); } } break; case ENEMY_PULSER1: case ENEMY_PULSER2: enemy[e].attribute [0] ++; if (enemy[e].armour < 400) enemy[e].attribute [0] ++; if (enemy[e].armour < 200) enemy[e].attribute [0] ++; enemy[e].attribute [0] &= 255; break; case ENEMY_SHADOW1: if (enemy[e].attribute [0] > 0) enemy[e].attribute [0] --; else { if (enemy[e].hurt_pulse > 0) enemy[e].attribute [0] = 9; } if (enemy[e].recycle == 10) enemy[e].attribute [0] = 78; break; case ENEMY_SHADOW2: if (enemy[e].attribute [0] > 0) enemy[e].attribute [0] --; else { if (enemy[e].hurt_pulse > 0) enemy[e].attribute [0] = 9; } if (enemy[e].recycle == 10) enemy[e].attribute [0] = 58; break; } if (enemy[e].counter % 16 == 0) { enemy[e].attacking = nearby_target(eclass[ec].range, enemy[e].x, enemy[e].y); } if (enemy[e].attacking != ATTACK_NONE)// && enemy[e].counter % 5 == 0) { if (enemy[e].counter % 8 == 0) enemy[e].slew_dir = 0; enemy[e].angle = track_target(e, enemy[e].attacking, slew_amount, enemy[e].slew_dir * -1); if (enemy[e].recycle == 0) standard_attack(e, enemy[e].angle); } // ifnemy[e].type != ENEMY_DRIFTER3) // return 1; /* int colours [4], ox, oy; enemy[e].attribute [ATTRIB_DRIFTER3_ORBITAL] += enemy[e].attribute [ATTRIB_DRIFTER3_ORBITAL_DIR]; if (enemy[e].attribute [ATTRIB_DRIFTER3_ORBITAL] > ANGLE_FULL) enemy[e].attribute [ATTRIB_DRIFTER3_ORBITAL] -= ANGLE_FULL; if (enemy[e].attribute [ATTRIB_DRIFTER3_ORBITAL] < 0) enemy[e].attribute [ATTRIB_DRIFTER3_ORBITAL] += ANGLE_FULL; colours [0] = GC_BLUE4; ox = enemy[e].x + cos(angle_to_radians(enemy[e].attribute [ATTRIB_DRIFTER3_ORBITAL])) * 40000; oy = enemy[e].y + sin(angle_to_radians(enemy[e].attribute [ATTRIB_DRIFTER3_ORBITAL])) * 40000; create_bullet(BULLET_ORBITAL, ox, oy, 0, 0, OWNER_ENEMY, 50, 2, 100, 0, 0, 0, colours, 1,0,0,0,0,0); ox = enemy[e].x + cos(angle_to_radians(enemy[e].attribute [ATTRIB_DRIFTER3_ORBITAL] + ANGLE_HALF)) * 40000; oy = enemy[e].y + sin(angle_to_radians(enemy[e].attribute [ATTRIB_DRIFTER3_ORBITAL] + ANGLE_HALF)) * 40000; create_bullet(BULLET_ORBITAL, ox, oy, 0, 0, OWNER_ENEMY, 50, 2, 100, 0, 0, 0, colours, 1,0,0,0,0,0); return 1; */ return 1; } int move_auto_ai(int e) { int ec = enemy[e].type; int bullet_colours [4]; int i; drag_enemy(e, eclass[ec].drag_amount); int xa, xb, xc, xd; switch(enemy[e].type) { case ENEMY_ATTRACTOR: blast(enemy[e].x, enemy[e].y, 300000, 0, -90, OWNER_ENEMY); break; case ENEMY_ORBITER1: xa = enemy[e].x - enemy[e].x_speed + xpart(enemy[e].attribute [1], 150000); xb = enemy[e].y - enemy[e].y_speed + ypart(enemy[e].attribute [1], 150000); enemy[e].attribute [1] = (enemy[e].attribute [1] + enemy[e].attribute [2]) & 1023; bullet_colours [0] = TRANS_YELLOW; bullet_colours [1] = TRANS_ORANGE; bullet_colours [2] = TRANS_LRED; bullet_colours [3] = TRANS_DRED; for (i = 0; i < 3; i ++) { create_bullet(BULLET_ORBIT, enemy[e].x + xpart(enemy[e].attribute [1] + (ANGLE_FULL / 3) * i, 150000), enemy[e].y + ypart(enemy[e].attribute [1] + (ANGLE_FULL / 3) * i, 150000), 0, 0, OWNER_ENEMY, 100, 2, 100, 0, 0, 5000, bullet_colours, 1, xa, xb,0,0,0); } break; case ENEMY_ORBITER2: xa = enemy[e].x - enemy[e].x_speed + xpart(enemy[e].attribute [1], 150000); xb = enemy[e].y - enemy[e].y_speed + ypart(enemy[e].attribute [1], 150000); enemy[e].attribute [1] = (enemy[e].attribute [1] + enemy[e].attribute [2]) & 1023; enemy[e].attribute [3] = (enemy[e].attribute [3] + enemy[e].attribute [4]) & 1023; bullet_colours [0] = TRANS_YELLOW; bullet_colours [1] = TRANS_ORANGE; bullet_colours [2] = TRANS_LRED; bullet_colours [3] = TRANS_DRED; for (i = 0; i < 2; i ++) { create_bullet(BULLET_ORBIT, enemy[e].x + xpart(enemy[e].attribute [1] + (ANGLE_HALF) * i, 150000), enemy[e].y + ypart(enemy[e].attribute [1] + (ANGLE_HALF) * i, 150000), 0, 0, OWNER_ENEMY, 100, 2, 100, 0, 0, 5000, bullet_colours, 1, xa, xb,0,0,0); } for (i = 0; i < 2; i ++) { create_bullet(BULLET_ORBIT, enemy[e].x + xpart(enemy[e].attribute [3] + (ANGLE_HALF) * i, 100000), enemy[e].y + ypart(enemy[e].attribute [3] + (ANGLE_HALF) * i, 100000), 0, 0, OWNER_ENEMY, 100, 2, 100, 0, 0, 5000, bullet_colours, 1, xa, xb,0,0,0); } break; case ENEMY_ORBITER3: // xa = enemy[e].x - enemy[e].x_speed + xpart(enemy[e].attribute [1], 150000); // xb = enemy[e].y - enemy[e].y_speed + ypart(enemy[e].attribute [1], 150000); enemy[e].attribute [1] = (enemy[e].attribute [1] + enemy[e].attribute [2]) & 1023; // bullet_colours [0] = TRANS_WHITE; /* bullet_colours [0] = TRANS_PURPLE; bullet_colours [1] = TRANS_LBLUE; bullet_colours [2] = TRANS_DBLUE; bullet_colours [3] = TRANS_DBLUE;*/ bullet_colours [0] = TRANS_WHITE; bullet_colours [1] = TRANS_LGREY; bullet_colours [2] = TRANS_LGREY; bullet_colours [3] = TRANS_DGREY; enemy[e].attribute [3] = (enemy[e].attribute [3] + 1) & 0xff; for (i = 0; i < 4; i ++) { xc = pulsate(32, 32, (enemy[e].attribute [3] + i * 64) & 0xff); xd = pulsate(32, 32, (enemy[e].attribute [3] - 1 + i * 64) & 0xff); create_bullet(BULLET_ORBIT, enemy[e].x + xpart(enemy[e].attribute [1] + (ANGLE_QUARTER) * i, 150000 + xc * GRAIN), enemy[e].y + ypart(enemy[e].attribute [1] + (ANGLE_QUARTER) * i, 150000 + xc * GRAIN), 0, 0, OWNER_ENEMY, 150, 2, 100, 0, 0, 5000, bullet_colours, 1, enemy[e].x - enemy[e].x_speed + xpart((enemy[e].attribute [1] + (ANGLE_QUARTER) * i - enemy[e].attribute [2]) & 1023, 150000 + xd * GRAIN), enemy[e].y - enemy[e].y_speed + ypart((enemy[e].attribute [1] + (ANGLE_QUARTER) * i - enemy[e].attribute [2]) & 1023, 150000 + xd * GRAIN), 0,0,0); } break; case ENEMY_WAVER1: create_effect(EFFECT_WAVE1, enemy[e].x, enemy[e].y, enemy[e].x - 160 * GRAIN, enemy[e].y - 160 * GRAIN, enemy[e].x + 160 * GRAIN, enemy[e].y + 160 * GRAIN, enemy[e].counter, 150,0,0,0); enemy[e].attribute [0] += enemy[e].attribute [1]; enemy[e].attribute [0] &= ANGLE_FULL - 1; arena.waver_on_level = 1; break; case ENEMY_WAVER2: create_effect(EFFECT_WAVE2, enemy[e].x, enemy[e].y, enemy[e].x - 210 * GRAIN, enemy[e].y - 210 * GRAIN, enemy[e].x + 210 * GRAIN, enemy[e].y + 210 * GRAIN, enemy[e].counter, 200,0,0,0); enemy[e].attribute [0] += enemy[e].attribute [1]; enemy[e].attribute [0] &= ANGLE_FULL - 1; arena.waver_on_level = 1; // if sizes are changed here, must also change them in bullet.c break; } if (enemy[e].recycle == 0) standard_attack(e, enemy[e].angle); return 1; } int move_stinger_ai(int e) { int ec = enemy[e].type; if (grand(eclass[ec].impulse_delay) == 0) { accelerate_enemy(e, grand(ANGLE_FULL), eclass[ec].acceleration); // switch(enemy[e].type) // //{ // } } drag_enemy(e, eclass[ec].drag_amount); switch(enemy[e].type) { case ENEMY_BOSS1_2: manage_turret(e, 0, -80 * GRAIN, 0 * GRAIN, 0); manage_turret(e, 1, 80 * GRAIN, 0 * GRAIN, 0); manage_turret(e, 2, 0, 75 * GRAIN, 0); break; } if (enemy[e].counter % 16 == 0) { enemy[e].attacking = nearby_target(eclass[ec].range, enemy[e].x, enemy[e].y); } if (enemy[e].attacking != ATTACK_NONE) { if (enemy[e].counter % 8 == 0) enemy[e].slew_dir = 0; enemy[e].angle = track_target(e, enemy[e].attacking, eclass[ec].slew, enemy[e].slew_dir * -1); if (enemy[e].recycle == 0) standard_attack(e, enemy[e].angle); } return 1; } int move_periodic_stinger_ai(int e) { int ec = enemy[e].type; if (enemy[e].next_impulse == 0) { accelerate_enemy(e, grand(ANGLE_FULL), eclass[ec].acceleration); enemy[e].next_impulse = eclass[enemy[e].type].impulse_delay; switch(enemy[e].type) { case ENEMY_PUFFER1: case ENEMY_PUFFER2: case ENEMY_PUFFER3: case ENEMY_PUFFER4: if (enemy[e].attribute [1] == -1) enemy[e].attribute [1] = 1; else enemy[e].attribute [1] = -1; break; } } else enemy[e].next_impulse --; drag_enemy(e, eclass[ec].drag_amount); switch(enemy[e].type) { case ENEMY_PUFFER1: case ENEMY_PUFFER2: case ENEMY_PUFFER3: case ENEMY_PUFFER4: enemy[e].attribute [0] = (100 * (eclass[enemy[e].type].impulse_delay - enemy[e].next_impulse)) / 12; if (eclass[enemy[e].type].impulse_delay - enemy[e].next_impulse < 8) enemy[e].attribute [0] = ((100 * (eclass[enemy[e].type].impulse_delay)) / 12) / (eclass[enemy[e].type].impulse_delay - enemy[e].next_impulse + 1); enemy[e].attribute [2] += enemy[e].attribute [1]; if (enemy[e].attribute [2] <= 0) enemy[e].attribute [2] += 1024; break; } if (enemy[e].counter % 16 == 0) { enemy[e].attacking = nearby_target(eclass[ec].range, enemy[e].x, enemy[e].y); } if (enemy[e].attacking != ATTACK_NONE) { if (enemy[e].counter % 8 == 0) enemy[e].slew_dir = 0; enemy[e].angle = track_target(e, enemy[e].attacking, eclass[ec].slew, enemy[e].slew_dir * -1); if (enemy[e].recycle == 0) standard_attack(e, enemy[e].angle); } return 1; } int move_turret_ai(int e) { // switch(enemy[e].type) // { // } int xa, xb, i, bullet_colours [4]; if (enemy[e].turret_main == -1) { hurt_enemy(e, 99999, OWNER_ENEMY, 0); return -1; // should never happen! } if (enemy[e].counter % 16 == 0) { enemy[e].attacking = nearby_target(eclass[enemy[e].type].range, enemy[e].x, enemy[e].y); } if (enemy[e].attacking != ATTACK_NONE) { if (enemy[e].counter % 8 == 0) enemy[e].slew_dir = 0; enemy[e].angle = track_target(e, enemy[e].attacking, eclass[enemy[e].type].slew, enemy[e].slew_dir * -1); if (enemy[e].recycle == 0) standard_attack(e, enemy[e].angle); } switch(enemy[e].type) { case ENEMY_CRUISER1_TURRET: case ENEMY_CRUISER2_TURRET: case ENEMY_DEFENDER2_TURRET3: case ENEMY_CRUISER3_TURRET: case ENEMY_CRUISER4_TURRET: case ENEMY_MINER3_TURRET: case ENEMY_BOSS2_TURRET4: case ENEMY_BOSS3_TURRET3: if (enemy[e].attribute [0] > 0) enemy[e].attribute [0] --; break; case ENEMY_DEFENDER1_TURRET3: case ENEMY_DEFENDER3_TURRET5: enemy[e].angle += enemy[e].attribute [0]; break; case ENEMY_DEFENDER3_TURRET1: if (enemy[e].attribute [0] > 0) enemy[e].attribute [0] --; enemy[e].attribute [1] = (enemy[e].attribute [1] + enemy[e].attribute [2]) & 1023; break; case ENEMY_DEFENDER3_TURRET2: xa = enemy[e].x - enemy[e].x_speed + xpart(enemy[e].attribute [1], 100000); xb = enemy[e].y - enemy[e].y_speed + ypart(enemy[e].attribute [1], 100000); enemy[e].attribute [1] = (enemy[e].attribute [1] + enemy[e].attribute [2]) & 1023; bullet_colours [0] = TRANS_YELLOW; bullet_colours [1] = TRANS_YELLOW; bullet_colours [2] = TRANS_LGREEN; bullet_colours [3] = TRANS_DGREEN; for (i = 0; i < 2; i ++) { create_bullet(BULLET_ORBIT, enemy[e].x + xpart(enemy[e].attribute [1] + (ANGLE_HALF) * i, 100000), enemy[e].y + ypart(enemy[e].attribute [1] + (ANGLE_HALF) * i, 100000), 0, 0, OWNER_ENEMY, 60, 2, 100, 0, 0, 4000, bullet_colours, 1, xa, xb,4,6,0); } break; case ENEMY_DEFENDER3_TURRET3: enemy[e].attribute [1] += enemy[e].attribute [2]; enemy[e].attribute [1] &= 1023; break; } return 1; } void manage_turret(int e, int t, int x, int y, int rotate) { if (enemy[e].turret [t] == -1) return; int te = enemy[e].turret [t]; if (enemy[e].type == ENEMY_NONE) return; enemy[te].x = enemy[e].x + x; enemy[te].y = enemy[e].y + y; enemy[te].x_speed = enemy[e].x_speed; enemy[te].y_speed = enemy[e].y_speed; enemy[te].angle += rotate; } int move_fighter_ai(int e) { if (enemy[e].attribute [0] == FIGHTER_MOVE) { if (enemy[e].x / 100000 == enemy[e].x_dest / 100000 && enemy[e].y / 100000 == enemy[e].y_dest / 100000) { // enemy[e].attacking = nearby_target(400000, enemy[e].x, enemy[e].y); enemy[e].attacking = closest_target(enemy[e].x, enemy[e].y); if (enemy[e].attacking != ATTACK_NONE) enemy[e].attribute [0] = FIGHTER_ATTACK; else { enemy[e].x_dest = grand(arena.max_x - 40000) + 20000; enemy[e].y_dest = grand(arena.max_y - 40000) + 20000; enemy[e].attacking = ATTACK_NONE; enemy[e].attribute [0] = FIGHTER_MOVE; } } enemy[e].angle = turn_towards_xy(enemy[e].x, enemy[e].y, enemy[e].x_dest, enemy[e].y_dest, enemy[e].angle, eclass[enemy[e].type].slew); } else { if (enemy[e].attacking == ATTACK_NONE || actor[enemy[e].attacking].in_play == 0) // assumes second condition not processed if first met. { enemy[e].x_dest = grand(arena.max_x - 40000) + 20000; enemy[e].y_dest = grand(arena.max_y - 40000) + 20000; enemy[e].attribute [0] = FIGHTER_MOVE; enemy[e].attacking = ATTACK_NONE; enemy[e].angle = turn_towards_xy(enemy[e].x, enemy[e].y, enemy[e].x_dest, enemy[e].y_dest, enemy[e].angle, eclass[enemy[e].type].slew); } } drag_enemy(e, eclass[enemy[e].type].drag_amount); int ax, ay; // int x1, y1; // int passing_colour [5]; ax = xpart(enemy[e].angle, eclass[enemy[e].type].acceleration); ay = ypart(enemy[e].angle, eclass[enemy[e].type].acceleration); enemy[e].x_speed += ax; enemy[e].y_speed += ay; /* if (enemy[e].type == ENEMY_FIGHTER3) { passing_colour [0] = TRANS_LGREY; passing_colour [1] = TRANS_DGREEN; passing_colour [2] = TRANS_LGREEN; } else*/ if (enemy[e].attribute [0] == FIGHTER_ATTACK && enemy[e].attacking != ATTACK_NONE) { if (enemy[e].counter % 8 == 0) enemy[e].slew_dir = 0; enemy[e].angle = track_target(e, enemy[e].attacking, eclass[enemy[e].type].slew, enemy[e].slew_dir * -1); // enemy[e].angle = track_target(e, enemy[e].attacking, eclass[enemy[e].type].slew, 0); if (enemy[e].recycle == 0 && hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x) < 90000) { standard_attack(e, enemy[e].angle); if (enemy[e].burst_fire <= 1) // experimental! { enemy[e].x_dest = grand(arena.max_x - 40000) + 20000; enemy[e].y_dest = grand(arena.max_y - 40000) + 20000; enemy[e].attribute [0] = FIGHTER_MOVE; enemy[e].attacking = ATTACK_NONE; } } } else if (enemy[e].recycle == 0 && enemy[e].burst_fire > 0) { standard_attack(e, enemy[e].angle); } int base_colour = TRANS_YELLOW; int xa = 0; switch(enemy[e].type) { case ENEMY_FIGHTER3: base_colour = TRANS_ORANGE; break; case ENEMY_FIGHTER4: base_colour = TRANS_LGREEN; break; case ENEMY_MESSENGER: // att [0] = fighter ai // att [1] = fin angle // att [2] = motion dir // att [3] = fin slew_dir enemy[e].attribute [2] = radians_to_angle(atan2(enemy[e].y_speed, enemy[e].x_speed)) & 1023; xa = enemy_turn_towards_angle(enemy[e].attribute [1], enemy[e].attribute [2], 16, enemy[e].attribute [3]); /* if (xa < enemy[e].attribute [1] || (enemy[e].attribute [1] < 100 && xa > (ANGLE_FULL - 100))) enemy[e].attribute [3] = 1; else enemy[e].attribute [3] = -1; // wingfin slew_dir*/ if (enemy[e].counter % 16 == 0) enemy[e].attribute [3] = 0; enemy[e].attribute [1] = xa; if (enemy[e].attribute [0] == FIGHTER_MOVE) { if (enemy[e].attribute [4] != -1 && enemy[enemy[e].attribute [4]].type == ENEMY_BOSS3_1 && enemy[e].counter % 97 == 0) { enemy[e].x_dest = enemy[enemy[e].attribute [4]].x; enemy[e].y_dest = enemy[enemy[e].attribute [4]].y; } } return 1; // no exhaust } int distance [4] = {10000, 10000, 0, 0}; int angle [4] = {ANGLE_HALF - ANGLE_1_EIGHTH, ANGLE_HALF + ANGLE_1_EIGHTH, 0, 0}; fighter_exhaust(e, ax, ay, distance, angle, base_colour); return 1; } int move_leaper_ai(int e) { if (enemy[e].attribute [0] == FIGHTER_MOVE) { if (enemy[e].x / 100000 == enemy[e].x_dest / 100000 && enemy[e].y / 100000 == enemy[e].y_dest / 100000) { enemy[e].attacking = closest_target(enemy[e].x, enemy[e].y); if (enemy[e].attacking != ATTACK_NONE) enemy[e].attribute [0] = FIGHTER_ATTACK; else { enemy[e].x_dest = grand(arena.max_x - 40000) + 20000; enemy[e].y_dest = grand(arena.max_y - 40000) + 20000; enemy[e].attacking = ATTACK_NONE; enemy[e].attribute [0] = FIGHTER_MOVE; } } enemy[e].angle = turn_towards_xy(enemy[e].x, enemy[e].y, enemy[e].x_dest, enemy[e].y_dest, enemy[e].angle, eclass[enemy[e].type].slew); } else { if (enemy[e].attacking == ATTACK_NONE || actor[enemy[e].attacking].in_play == 0) // assumes second condition not processed if first met. { enemy[e].x_dest = grand(arena.max_x - 40000) + 20000; enemy[e].y_dest = grand(arena.max_y - 40000) + 20000; enemy[e].attribute [0] = FIGHTER_MOVE; enemy[e].attacking = ATTACK_NONE; enemy[e].angle = turn_towards_xy(enemy[e].x, enemy[e].y, enemy[e].x_dest, enemy[e].y_dest, enemy[e].angle, eclass[enemy[e].type].slew); } } drag_enemy(e, eclass[enemy[e].type].drag_amount); // int ax, ay; if (enemy[e].next_impulse == 0) { accelerate_enemy(e, enemy[e].angle, eclass[enemy[e].type].acceleration); enemy[e].next_impulse = eclass[enemy[e].type].impulse_delay; simple_cloud_trans(TRANS_YELLOW, enemy[e].x + xpart(enemy[e].angle + ANGLE_HALF, 12000), enemy[e].y + ypart(enemy[e].angle + ANGLE_HALF, 12000), enemy[e].x_speed + xpart(enemy[e].angle + ANGLE_HALF, 4000), enemy[e].y_speed + ypart(enemy[e].angle + ANGLE_HALF, 4000), 900); simple_cloud_trans(TRANS_ORANGE, enemy[e].x + xpart(enemy[e].angle + ANGLE_HALF, 12000), enemy[e].y + ypart(enemy[e].angle + ANGLE_HALF, 12000), enemy[e].x_speed + xpart(enemy[e].angle + ANGLE_HALF, 4000), enemy[e].y_speed + ypart(enemy[e].angle + ANGLE_HALF, 4000), 1200); simple_light(enemy[e].x + xpart(enemy[e].angle + ANGLE_HALF, 12000), enemy[e].y + ypart(enemy[e].angle + ANGLE_HALF, 12000), enemy[e].x_speed + xpart(enemy[e].angle + ANGLE_HALF, 4000), enemy[e].y_speed + ypart(enemy[e].angle + ANGLE_HALF, 4000), 1400); } else enemy[e].next_impulse --; if (enemy[e].attribute [0] == FIGHTER_ATTACK && enemy[e].attacking != ATTACK_NONE) { if (enemy[e].counter % 16 == 0) enemy[e].slew_dir = 0; enemy[e].angle = track_target(e, enemy[e].attacking, eclass[enemy[e].type].slew, enemy[e].slew_dir * -1); if (enemy[e].recycle == 0 && hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x) < 90000) { standard_attack(e, enemy[e].angle); if (enemy[e].burst_fire <= 1) // experimental! { enemy[e].x_dest = grand(arena.max_x - 40000) + 20000; enemy[e].y_dest = grand(arena.max_y - 40000) + 20000; enemy[e].attribute [0] = FIGHTER_MOVE; enemy[e].attacking = ATTACK_NONE; } } } else if (enemy[e].recycle == 0 && enemy[e].burst_fire > 0) { standard_attack(e, enemy[e].angle); } return 1; } int move_bomber_ai(int e) { if (enemy[e].attribute [0] == FIGHTER_MOVE) { if (enemy[e].x / 100000 == enemy[e].x_dest / 100000 && enemy[e].y / 100000 == enemy[e].y_dest / 100000) { // enemy[e].attacking = nearby_target(400000, enemy[e].x, enemy[e].y); enemy[e].attacking = closest_target(enemy[e].x, enemy[e].y); if (enemy[e].attacking != ATTACK_NONE) enemy[e].attribute [0] = FIGHTER_ATTACK; else { enemy[e].x_dest = grand(arena.max_x - 40000) + 20000; enemy[e].y_dest = grand(arena.max_y - 40000) + 20000; enemy[e].attacking = ATTACK_NONE; enemy[e].attribute [0] = FIGHTER_MOVE; } } enemy[e].angle = turn_towards_xy(enemy[e].x, enemy[e].y, enemy[e].x_dest, enemy[e].y_dest, enemy[e].angle, eclass[enemy[e].type].slew); } else { if (enemy[e].attacking == ATTACK_NONE || actor[enemy[e].attacking].in_play == 0) // assumes second condition not processed if first met. { enemy[e].x_dest = grand(arena.max_x - 40000) + 20000; enemy[e].y_dest = grand(arena.max_y - 40000) + 20000; enemy[e].attribute [0] = FIGHTER_MOVE; enemy[e].attacking = ATTACK_NONE; enemy[e].angle = turn_towards_xy(enemy[e].x, enemy[e].y, enemy[e].x_dest, enemy[e].y_dest, enemy[e].angle, eclass[enemy[e].type].slew); } } drag_enemy(e, eclass[enemy[e].type].drag_amount); int ax, ay; // int x1, y1; // int passing_colour [5]; ax = xpart(enemy[e].angle, eclass[enemy[e].type].acceleration); ay = ypart(enemy[e].angle, eclass[enemy[e].type].acceleration); enemy[e].x_speed += ax; enemy[e].y_speed += ay; /* if (enemy[e].type == ENEMY_FIGHTER3) { passing_colour [0] = TRANS_LGREY; passing_colour [1] = TRANS_DGREEN; passing_colour [2] = TRANS_LGREEN; } else*/ /* switch(enemy[e].type) { default: passing_colour [0] = TRANS_DRED; passing_colour [1] = TRANS_LRED; passing_colour [2] = TRANS_YELLOW; break; } if (grand(3) == 0) { x1 = enemy[e].x + xpart(enemy[e].angle + ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_32, 12000); y1 = enemy[e].y + ypart(enemy[e].angle + ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_32, 12000); place_rocket_trail(x1 + grand(3001) - 1500, y1 + grand(3001) - 1500, enemy[e].x_speed - ax*10, enemy[e].y_speed - ay*10, 160, passing_colour); } if (grand(3) == 0) { x1 = enemy[e].x + xpart(enemy[e].angle + ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_32, 12000); y1 = enemy[e].y + ypart(enemy[e].angle + ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_32, 12000); place_rocket_trail(x1 + grand(3001) - 1500, y1 + grand(3001) - 1500, enemy[e].x_speed - ax*10, enemy[e].y_speed - ay*10, 160, passing_colour); } if (grand(3) == 0) { x1 = enemy[e].x + xpart(enemy[e].angle + ANGLE_HALF, 12000); y1 = enemy[e].y + ypart(enemy[e].angle + ANGLE_HALF, 12000); place_rocket_trail(x1 + grand(3001) - 1500, y1 + grand(3001) - 1500, enemy[e].x_speed - ax*10, enemy[e].y_speed - ay*10, 160, passing_colour); } */ if (enemy[e].attribute [0] == FIGHTER_ATTACK && enemy[e].attacking != ATTACK_NONE) { if (enemy[e].counter % 8 == 0) enemy[e].slew_dir = 0; enemy[e].angle = track_target(e, enemy[e].attacking, eclass[enemy[e].type].slew, enemy[e].slew_dir * -1); // enemy[e].angle = track_target(e, enemy[e].attacking, eclass[enemy[e].type].slew, 0); if (enemy[e].recycle == 0 && hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x) < 150000) { standard_attack(e, enemy[e].angle); if (enemy[e].burst_fire <= 1) // experimental! { enemy[e].x_dest = grand(arena.max_x - 40000) + 20000; enemy[e].y_dest = grand(arena.max_y - 40000) + 20000; enemy[e].attribute [0] = FIGHTER_MOVE; enemy[e].attacking = ATTACK_NONE; } } } else if (enemy[e].recycle == 0 && enemy[e].burst_fire > 0) { standard_attack(e, enemy[e].angle); } int base_colour = TRANS_YELLOW; switch(enemy[e].type) { /* case ENEMY_FIGHTER3: base_colour = TRANS_ORANGE; break; case ENEMY_FIGHTER4: base_colour = TRANS_LGREEN; break;*/ } int distance [4] = {12000, 12000, 12000, 0}; int angle [4] = {ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_32, ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_32, ANGLE_HALF, 0}; fighter_exhaust(e, ax, ay, distance, angle, base_colour); return 1; } int move_cruiser_ai(int e) { if (enemy[e].x / 100000 == enemy[e].x_dest / 100000 && enemy[e].y / 100000 == enemy[e].y_dest / 100000) { // enemy[e].attacking = nearby_target(400000, enemy[e].x, enemy[e].y); /* enemy[e].attacking = closest_target(enemy[e].x, enemy[e].y); if (enemy[e].attacking != ATTACK_NONE) enemy[e].attribute [0] = FIGHTER_ATTACK; else { enemy[e].x_dest = grand(arena.max_x - 40000) + 20000; enemy[e].y_dest = grand(arena.max_y - 40000) + 20000; enemy[e].attacking = ATTACK_NONE; enemy[e].attribute [0] = FIGHTER_MOVE; }*/ enemy[e].x_dest = grand(arena.max_x - 40000) + 20000; enemy[e].y_dest = grand(arena.max_y - 40000) + 20000; } int angles = enemy[e].angle; enemy[e].angle = turn_towards_xy(enemy[e].x, enemy[e].y, enemy[e].x_dest, enemy[e].y_dest, enemy[e].angle, eclass[enemy[e].type].slew); angles = enemy[e].angle - angles;//angle_difference(enemy[e].angle, angles); if (angles >= ANGLE_HALF) angles -= ANGLE_FULL; drag_enemy(e, eclass[enemy[e].type].drag_amount); int ax, ay; // int x1, y1; // int passing_colour [5]; ax = xpart(enemy[e].angle, eclass[enemy[e].type].acceleration); ay = ypart(enemy[e].angle, eclass[enemy[e].type].acceleration); enemy[e].x_speed += ax; enemy[e].y_speed += ay; // if (enemy[e].attribute [0] == FIGHTER_ATTACK // && enemy[e].attacking != ATTACK_NONE) // { // if (enemy[e].counter % 8 == 0) // enemy[e].slew_dir = 0; // enemy[e].angle = track_target(e, enemy[e].attacking, eclass[enemy[e].type].slew, enemy[e].slew_dir * -1); if (enemy[e].counter % 16 == 0) { enemy[e].attacking = nearby_target(eclass[enemy[e].type].range, enemy[e].x, enemy[e].y); } if (enemy[e].recycle == 0 && hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x) < 150000) { standard_attack(e, enemy[e].angle); /* if (enemy[e].burst_fire <= 1) // experimental! { enemy[e].x_dest = grand(arena.max_x - 40000) + 20000; enemy[e].y_dest = grand(arena.max_y - 40000) + 20000; enemy[e].attribute [0] = FIGHTER_MOVE; enemy[e].attacking = ATTACK_NONE; }*/ } // } // else /* if (enemy[e].recycle == 0)// && enemy[e].burst_fire > 0) { standard_attack(e, enemy[e].angle); }*/ int base_colour = TRANS_YELLOW; int distance [4] = {25000, 25000, 0, 0}; // int angle [4] = {ANGLE_HALF - ANGLE_1_EIGHTH - ANGLE_1_32, ANGLE_HALF + ANGLE_1_EIGHTH + ANGLE_1_32, 0, 0}; int angle [4] = {ANGLE_HALF - ANGLE_1_EIGHTH, ANGLE_HALF + ANGLE_1_EIGHTH, 0, 0}; switch(enemy[e].type) { case ENEMY_CRUISER4: case ENEMY_CRUISER3: base_colour = TRANS_ORANGE; distance [2] = 25000; distance [3] = 25000; angle [2] = ANGLE_QUARTER; angle [3] = -ANGLE_QUARTER; break; } fighter_exhaust(e, ax, ay, distance, angle, base_colour); switch(enemy[e].type) { case ENEMY_CRUISER1: case ENEMY_CRUISER2: case ENEMY_CRUISER3: case ENEMY_CRUISER4: manage_turret(e, 0, xpart(enemy[e].angle + ANGLE_HALF, 18000), ypart(enemy[e].angle + ANGLE_HALF, 18000), angles); break; } return 1; } void fighter_exhaust(int e, int ax, int ay, int distance [4], int angle [4], int base_colour) { int passing_colour [5]; switch(base_colour) { case TRANS_YELLOW: passing_colour [0] = TRANS_DRED; passing_colour [1] = TRANS_LRED; passing_colour [2] = TRANS_YELLOW; break; case TRANS_ORANGE: passing_colour [0] = TRANS_LRED; passing_colour [1] = TRANS_ORANGE; passing_colour [2] = TRANS_YELLOW; break; case TRANS_LGREEN: passing_colour [0] = TRANS_DGREEN; passing_colour [1] = TRANS_LGREEN; passing_colour [2] = TRANS_YELLOW; break; /* case ENEMY_FIGHTER3: passing_colour [0] = TRANS_LRED; passing_colour [1] = TRANS_ORANGE; passing_colour [2] = TRANS_YELLOW; break; case ENEMY_FIGHTER4: passing_colour [0] = TRANS_DGREEN; passing_colour [1] = TRANS_LGREEN; passing_colour [2] = TRANS_YELLOW; break;*/ } int i, x1, y1; for (i = 0; i < 4; i ++) { if (distance [i] == 0 || grand(2) != 0) continue; x1 = enemy[e].x + xpart(enemy[e].angle + angle [i], distance [i]); y1 = enemy[e].y + ypart(enemy[e].angle + angle [i], distance [i]); place_rocket_trail(x1 + grand(3001) - 1500, y1 + grand(3001) - 1500, enemy[e].x_speed - ax*10, enemy[e].y_speed - ay*10, 160, passing_colour); } } void run_boss3_1(int e) { enemy[e].recycle = 10; if (enemy[e].counter % 32 != 0) return; if (enemy[e].attribute [0] < 10) { enemy[e].attribute [0] ++; return; } int i, mess = 0; for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[i].type == ENEMY_MESSENGER) mess ++; } if (mess >= 4) return; int special [10]; special [4] = e; create_enemy(ENEMY_MESSENGER, 0, enemy[e].x, enemy[e].y, enemy[e].x_speed, enemy[e].y_speed, grand(ANGLE_FULL), 0, special, TARGET_NO); int passing_colours [5]; passing_colours[0] = TRANS_DBLUE; passing_colours[1] = TRANS_PURPLE; passing_colours[2] = TRANS_WHITE; place_explosion(enemy[e].x, enemy[e].y, 0,0, 700 + crandom(250), passing_colours); place_burstlet_burst(enemy[e].x, enemy[e].y, enemy[e].x_speed, enemy[e].y_speed, 4 + grand(3), 2, 6, 2000, 2500, 4, passing_colours); enemy[e].attribute [0] = 0; } void run_boss3_3(int e) { if (enemy[e].attribute [0] == 0) return; enemy[e].attribute [0] --; if (enemy[e].attribute [0] % 5 != 0) return; int i, b = -1, ang; for (i = 0; i < NO_BULLETS; i ++) { if (bullet[i].type == BULLET_SWIRL1) { b = i; break; } } if (b == -1) return; int colours [4] = {COLOUR_RED6, COLOUR_ORANGE6, COLOUR_ORANGE8, COLOUR_YELLOW8}; for (i = 0; i < 4; i ++) { switch(i) { default: case 0: ang = - ANGLE_QUARTER + ANGLE_1_EIGHTH; break; case 1: ang = + ANGLE_QUARTER - ANGLE_1_EIGHTH; break; case 2: ang = ANGLE_QUARTER; break; case 3: ang = - ANGLE_QUARTER; break; } create_bullet(BULLET_SWIRL2, enemy[e].x + xpart(enemy[e].angle + ang, 35000), enemy[e].y + ypart(enemy[e].angle + ang, 35000), enemy[e].x_speed + xpart(enemy[e].angle + ang, 3000), enemy[e].y_speed + ypart(enemy[e].angle + ang, 3000), OWNER_ENEMY, 100, 100 + grand(30), 10, enemy[e].angle + ang + ANGLE_QUARTER, 0, 1000, colours, 1, 1290,0,b,36,3); simple_cloud_trans(TRANS_YELLOW, enemy[e].x + xpart(enemy[e].angle + ang, 35000), enemy[e].y + ypart(enemy[e].angle + ang, 35000), 0,0, // enemy[e].x_speed + xpart(enemy[e].angle + ang, 1000), // enemy[e].y_speed + ypart(enemy[e].angle + ang, 1000), 400); } } /* int move_firebase(int e) { enemy[e].x_speed = 0; enemy[e].y_speed = 0; if (enemy[e].counter % 32 == 0) enemy[e].attacking = closest_target(enemy[e].x, enemy[e].y); if (enemy[e].attacking != ATTACK_NONE) { enemy[e].angle = track_target(e, enemy[e].attacking, 16); if (enemy[e].recycle == 0) standard_attack(e, enemy[e].angle); } return 1; } int move_firebase_turret(int e) { if (enemy[e].attribute [ATTRIB_FBTURRET_MAIN_DEAD] == 1) { hurt_enemy(e, 99999, OWNER_ENEMY, 0); return -1; } enemy[e].x_speed = 0; enemy[e].y_speed = 0; if (enemy[e].counter % 16 == 0) { enemy[e].attacking = nearby_target(200000, enemy[e].x, enemy[e].y); } if (enemy[e].attacking != ATTACK_NONE) { enemy[e].angle = track_target(e, enemy[e].attacking, 16); if (enemy[e].recycle == 0) standard_attack(e, enemy[e].angle); } return 1; } */ void colourise_bullet(int arr [4], int tc) { switch(tc) { case TRANS_YELLOW: arr [0] = TRANS_WHITE; arr [1] = TRANS_YELLOW; arr [2] = TRANS_ORANGE; arr [3] = TRANS_LRED; break; case TRANS_LBLUE: arr [0] = TRANS_WHITE; arr [1] = TRANS_LBLUE; arr [2] = TRANS_DBLUE; arr [3] = TRANS_DGREY; break; case TRANS_PURPLE: arr [0] = TRANS_WHITE; arr [1] = TRANS_PURPLE; arr [2] = TRANS_LBLUE; arr [3] = TRANS_DBLUE; break; case TRANS_LGREEN: arr [0] = TRANS_YELLOW; arr [1] = TRANS_LGREEN; arr [2] = TRANS_DGREEN; arr [3] = TRANS_DGREY; break; case TRANS_ORANGE: arr [0] = TRANS_YELLOW; arr [1] = TRANS_ORANGE; arr [2] = TRANS_LRED; arr [3] = TRANS_DRED; break; case COLOURISE_GREEN_SEEKER1: arr [0] = TRANS_YELLOW; arr [1] = TRANS_YELLOW; arr [2] = TRANS_LGREEN; arr [3] = TRANS_LGREEN; break; case COLOURISE_GREEN_SEEKER2: arr [0] = TRANS_LGREEN; arr [1] = TRANS_LGREEN; arr [2] = TRANS_LGREEN; arr [3] = TRANS_DGREEN; break; case COLOURISE_BLUE_SEEKER: arr [0] = TRANS_LBLUE; arr [1] = TRANS_LBLUE; arr [2] = TRANS_LBLUE; arr [3] = TRANS_DBLUE; break; case COLOURISE_YELLOW_SEEKER: arr [0] = TRANS_WHITE; arr [1] = TRANS_WHITE; arr [2] = TRANS_YELLOW; arr [3] = TRANS_ORANGE; break; } } void standard_attack(int e, int angle) { int timer; int timer_rand = 0; int special_angle = -1; int special_angle2 = -1; int speed = 0; int speed_rand = 0; int speed_div = 5; int mass; int status; int displaced = 0; int colours [4] = {GC_GREEN8, GC_GREEN6, GC_GREEN4, GC_GREEN2}; int colours_for_cloud [5] = {GC_GREEN8, GC_GREEN6, GC_GREEN4, GC_GREEN2, GC_GREEN1}; int firing_distance = 0; int btype; int damage; int angle_rand = 0; int special1 = 0; int special2 = 0; int special3 = 0; int special4 = 0; int special5 = 0; int scatter = 0; int multiple = 1; int angle_increment = 0; int displace_series [4] = {0,0,0,0}; int firing_angle; int recoil = 0; int size = 0; // int t; if (enemy[e].burst_fire == 1) enemy[e].burst_fire = 0; switch(enemy[e].type) { case ENEMY_BEAMER1: enemy[e].attribute [0] = 150; enemy[e].recycle = 250; return; // NOTE return! not break case ENEMY_BEAMER2: enemy[e].attribute [0] = 150; enemy[e].recycle = 230; return; // NOTE return! not break case ENEMY_CIRCLER1: if (enemy[e].attacking != 0 && enemy[e].attacking != 1) return; if (hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x) > 350000) return; // create_cloud( create_bullet(BULLET_CIRCLER, actor[enemy[e].attacking].x + actor[enemy[e].attacking].x_speed * (30 + grand(30)) + grand(25001) - 12500, actor[enemy[e].attacking].y + actor[enemy[e].attacking].y_speed * (30 + grand(30)) + grand(25001) - 12500, 0, 0, OWNER_ENEMY, 0, 50, 0, 0, // 50 was 66 0, 0, colours, 1, special1,special2,special3,special4,special5); enemy[e].recycle = 80; enemy[e].attribute [0] = 50; // was 66 return; // NOTE return! not break case ENEMY_GUARDIAN1: btype = BULLET_BALL1; damage = 150; timer = 40; timer_rand = 20; mass = 10; speed = 5000; /* colours [0] = GC_GREEN8; colours [1] = GC_GREEN6; colours [2] = GC_GREEN4; colours [3] = GC_GREEN2;*/ firing_distance = 14000; enemy[e].recycle = 80; speed_div = 3; multiple = 1; // angle_increment = ANGLE_1_EIGHTH; recoil = 700; size = 3000; enemy_soundf(e, NWAV_BALL1, 500 + grand(30)); break; case ENEMY_GUARDIAN2: btype = BULLET_TWIRLY1; size = 7000; damage = 200; timer = 40; timer_rand = 30; mass = 25; speed = 6000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; firing_distance = 14000; enemy[e].recycle = 60; speed_div = 3; multiple = 1; // angle_increment = ANGLE_1_EIGHTH; recoil = 700; special1 = grand(2); enemy_soundf(e, NWAV_BALL1, 400 + grand(30)); break; case ENEMY_GUARDIAN3: btype = BULLET_TWISTY; size = 5000; // see bullet.c; this changes damage = 200; timer = 35; timer_rand = 15; mass = 40; speed = 7000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; firing_distance = 14000; enemy[e].recycle = 50; speed_div = 3; multiple = 1; recoil = 700; special1 = 0; special2 = 1; if (grand(2) == 0) special2 = -1; enemy_soundf(e, NWAV_BALL1, 600 + grand(30)); break; case ENEMY_GUARDIAN4: btype = BULLET_TWIRLY2; size = 5000; damage = 250; timer = 43; timer_rand = 30; mass = 40; speed = 7000; colours [0] = TRANS_WHITE; colours [1] = TRANS_YELLOW; colours [2] = TRANS_ORANGE; colours [3] = TRANS_LRED; firing_distance = 14000; enemy[e].recycle = 55; speed_div = 3; multiple = 1; recoil = 700; enemy_soundf(e, NWAV_BALL1, 700 + grand(30)); break; case ENEMY_GUARDIAN5: btype = BULLET_TWIRLY3; size = 12000; damage = 400; timer = 43; timer_rand = 30; mass = 50; speed = 6000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_DGREEN; colours [3] = TRANS_DGREEN; firing_distance = 14000; enemy[e].recycle = 60; speed_div = 3; multiple = 1; recoil = 1200; special2 = 0; if (grand(2) == 0) special2 = 1; enemy_soundf(e, NWAV_BALL1, 300 + grand(10)); break; // case ENEMY_HEAD1_EYE1: //case ENEMY_HEAD1: case ENEMY_CURVE1: btype = BULLET_BLAST; damage = 200; timer = 150; timer_rand = 20; mass = 40; speed = 3000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; firing_distance = 1000; enemy[e].recycle = 150; speed_div = 3; multiple = 2; displaced = 12; displace_series [0] = 1; displace_series [1] = -1; recoil = 1200; enemy_soundf(e, NWAV_LZAP, 900 + grand(100)); size = 2000; break; case ENEMY_CURVE2: btype = BULLET_LINE_PULSE; damage = 250; timer = 150; timer_rand = 20; mass = 40; speed = 6000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_YELLOW; colours [2] = TRANS_ORANGE; colours [3] = TRANS_LRED; /* colours [0] = TRANS_LBLUE; colours [1] = TRANS_LBLUE; colours [2] = TRANS_DBLUE; colours [3] = TRANS_DGREY;*/ firing_distance = 1000; enemy[e].recycle = 100; speed_div = 3; multiple = 2; displaced = 12; displace_series [0] = 1; displace_series [1] = -1; recoil = 1200; enemy_soundf(e, NWAV_LZAP, 400 + grand(50)); // enemy_soundf(e, NWAV_MULTI, 400 + grand(10)); size = 3000; break; case ENEMY_CURVE3: btype = BULLET_CURVEY; damage = 300; timer = 150; timer_rand = 20; mass = 40; speed = 9000; colours [0] = TRANS_WHITE; colours [1] = TRANS_LGREY; colours [2] = TRANS_DGREY; colours [3] = TRANS_DGREY; /* colours [0] = TRANS_LBLUE; colours [1] = TRANS_LBLUE; colours [2] = TRANS_DBLUE; colours [3] = TRANS_DGREY;*/ firing_distance = 1000; enemy[e].recycle = 100; speed_div = 3; multiple = 2; displaced = 12; displace_series [0] = 1; displace_series [1] = -1; recoil = 1200; enemy_soundf(e, NWAV_LZAP, 200 + grand(20)); // enemy_soundf(e, NWAV_MULTI, 400 + grand(10)); size = 3000; break; case ENEMY_MULTI1: btype = BULLET_BALL1; damage = 150; timer = 40; timer_rand = 10; mass = 10; speed = 4000; /* colours [0] = GC_GREEN8; colours [1] = GC_GREEN6; colours [2] = GC_GREEN4; colours [3] = GC_GREEN2;*/ firing_distance = 10000; enemy[e].recycle = 110; speed_div = 3; multiple = 3; angle_increment = ANGLE_1_EIGHTH; angle -= ANGLE_1_EIGHTH; recoil = 900; size = 3000; enemy_soundf(e, NWAV_MULTI, 500 + grand(10)); break; case ENEMY_MULTI2: btype = BULLET_BLAST; damage = 200; timer = 60; timer_rand = 20; mass = 40; speed = 5000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; firing_distance = 8000; enemy[e].recycle = 90; speed_div = 3; multiple = 4; angle_increment = ANGLE_1_SIXTEENTH; angle -= (ANGLE_1_SIXTEENTH + ANGLE_1_32); recoil = 1200; enemy_soundf(e, NWAV_MULTI, 400 + grand(10)); size = 2000; break; case ENEMY_MULTI3: btype = BULLET_BLAST; damage = 250; timer = 60; timer_rand = 20; mass = 40; speed = 6000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_DGREEN; colours [3] = TRANS_DGREY; firing_distance = 11000; enemy[e].recycle = 100; speed_div = 3; multiple = 5; angle_increment = ANGLE_1_SIXTEENTH; angle -= ANGLE_1_EIGHTH;//(ANGLE_1_SIXTEENTH + ANGLE_1_32); recoil = 1800; enemy_soundf(e, NWAV_MULTI, 300 + grand(10)); size = 2000; break; case ENEMY_PUFFER1: btype = BULLET_BURNING_SPIRIT; damage = 150; timer = 40; timer_rand = 20; mass = 10; speed = 6000; firing_distance = 11000; enemy[e].recycle = 90; speed_div = 3; multiple = 1; colours_for_cloud [0] = TRANS_DRED; colours_for_cloud [1] = TRANS_LRED; colours_for_cloud [2] = TRANS_YELLOW; recoil = 1200; enemy_soundf(e, NWAV_PUFF, 900 + grand(200)); break; case ENEMY_PUFFER2: btype = BULLET_BURST; damage = 1; size = 3000; timer = 30; timer_rand = 35; mass = 10; speed = 7000; firing_distance = 14000; enemy[e].recycle = 110; speed_div = 3; multiple = 1; colours_for_cloud [0] = TRANS_DRED; colours_for_cloud [1] = TRANS_LRED; colours_for_cloud [2] = TRANS_YELLOW; recoil = 1700; enemy_soundf(e, NWAV_PUFF, 700 + grand(150)); break; case ENEMY_PUFFER3: btype = BULLET_PUFFY3; damage = 1; size = 3000; timer = 30; timer_rand = 35; mass = 10; speed = 7000; firing_distance = 11000; enemy[e].recycle = 110; speed_div = 3; multiple = 1; colours_for_cloud [0] = TRANS_DGREEN; colours_for_cloud [1] = TRANS_LGREEN; colours_for_cloud [2] = TRANS_YELLOW; colours [0] = TRANS_DGREEN; colours [1] = TRANS_LGREEN; colours [2] = TRANS_YELLOW; colours [3] = TRANS_YELLOW; recoil = 1700; enemy_soundf(e, NWAV_PUFF, 1300 + grand(200)); break; case ENEMY_PUFFER4: btype = BULLET_PUFFY4; damage = 1; size = 3000; timer = 30; timer_rand = 35; mass = 10; speed = 8000; firing_distance = 20000; enemy[e].recycle = 110; speed_div = 3; multiple = 1; /* colours [0] = COLOUR_BLUE8; colours [1] = COLOUR_BLUE7; colours [2] = COLOUR_BLUE6; colours [3] = COLOUR_BLUE5;*/ colours [0] = COLOUR_GREY6; colours [1] = COLOUR_BLUE8; colours [2] = COLOUR_BLUE7; colours [3] = COLOUR_BLUE5; colours_for_cloud [0] = TRANS_DBLUE; colours_for_cloud [1] = TRANS_LBLUE; colours_for_cloud [2] = TRANS_WHITE; // colours [4] = COLOUR_BLUE4; recoil = 1700; enemy_soundf(e, NWAV_PUFF, 500 + grand(50)); break; case ENEMY_SHADOW1: btype = BULLET_CRYSTAL1; damage = 1; size = 6000; timer = 30; timer_rand = 35; mass = 10; speed = 8000; firing_distance = 12000; speed_div = 3; multiple = 1; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; recoil = 1100; scatter = ANGLE_1_32; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 7; enemy[e].burst_fire --; } else { enemy[e].recycle = 150 + grand(150); enemy[e].burst_fire = 3; // also in creation } // enemy[e].attribute [0] = 60; enemy_soundf(e, NWAV_SHADOW, 1500 + grand(50)); break; case ENEMY_SHADOW2: btype = BULLET_CRYSTAL2; damage = 1; size = 6000; timer = 30; timer_rand = 35; mass = 10; speed = 9000; firing_distance = 12000; speed_div = 3; multiple = 1; colours [0] = TRANS_WHITE; colours [1] = TRANS_LBLUE; colours [2] = TRANS_LBLUE; colours [3] = TRANS_DBLUE; recoil = 1100; scatter = ANGLE_1_32; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 5; enemy[e].burst_fire --; } else { enemy[e].recycle = 150 + grand(150); enemy[e].burst_fire = 3; // also in creation } // enemy[e].attribute [0] = 60; enemy_soundf(e, NWAV_SHADOW, 1300 + grand(50)); break; case ENEMY_DISRUPTER1: case ENEMY_DISRUPTER2: case ENEMY_DISRUPTER3: case ENEMY_OVERDISRUPTER: firing_distance = 12000; if (enemy[e].type == ENEMY_OVERDISRUPTER) firing_distance = 26000; if (enemy[e].type == ENEMY_DISRUPTER1 || (enemy[e].type == ENEMY_OVERDISRUPTER && grand(3) == 0)) { btype = BULLET_DISRUPT2; damage = 1; size = 3000; timer = 100; if (enemy[e].attacking == 0 || enemy[e].attacking == 1) timer = (hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x) / 4000); timer_rand = 5; mass = 10; speed = 4000; enemy[e].recycle = 120; colours_for_cloud [0] = TRANS_REVERSE; speed_div = 3; multiple = 1; recoil = -1200; enemy_soundf(e, NWAV_CHIME, 1000 + grand(50)); break; } if (enemy[e].type == ENEMY_DISRUPTER2 || (enemy[e].type == ENEMY_OVERDISRUPTER && grand(2) == 0)) { btype = BULLET_DISRUPT1; damage = 1; size = 3000; timer = 100; if (enemy[e].attacking == 0 || enemy[e].attacking == 1) timer = (hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x) / 3000); timer_rand = 5; mass = 10; speed = 3000; enemy[e].recycle = 120; // colours_for_cloud [0] = TRANS_REVERSE; speed_div = 3; multiple = 1; recoil = 1200; enemy_soundf(e, NWAV_CYMBAL, 1000 + grand(50)); break; } btype = BULLET_DISRUPT3; damage = 1; size = 3000; timer = 100; if (enemy[e].attacking == 0 || enemy[e].attacking == 1) timer = (hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x) / 7000); timer_rand = 5; mass = 10; speed = 7000; colours_for_cloud [0] = TRANS_DARKEN; enemy[e].recycle = 120; speed_div = 3; multiple = 1; recoil = 1200; enemy_soundf(e, NWAV_CHIME, 400 + grand(50)); break; case ENEMY_BRACKET1: recoil = 300; case ENEMY_DEFENDER2_TURRET1: btype = BULLET_GREEN_BLAT; damage = DAM_GREEN_BLAT; timer = 30; timer_rand = 15; mass = 10; speed = 10000; firing_distance = 1000; // enemy[e].recycle = 90; speed_div = 3; multiple = 2; displaced = 6; displace_series [0] = 1; displace_series [1] = -1; colours_for_cloud [0] = TRANS_DGREEN; colours_for_cloud [1] = TRANS_LGREEN; colours_for_cloud [2] = TRANS_YELLOW; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 7; enemy[e].burst_fire --; } else { enemy[e].recycle = 160; enemy[e].burst_fire = 3 + grand(3); // also in creation } enemy_soundf(e, NWAV_GBLAT, 400); break; case ENEMY_BRACKET2: recoil = 150; case ENEMY_DEFENDER2_TURRET2: btype = BULLET_GREEN_BLAT; damage = DAM_GREEN_BLAT; timer = 30; timer_rand = 15; mass = 10; speed = 13000; firing_distance = 2000; // enemy[e].recycle = 90; speed_div = 3; multiple = 1; displaced = 5; displace_series [0] = 1; if (enemy[e].burst_fire % 2 == 0) { displace_series [0] = -1; enemy[e].angle -= grand(ANGLE_1_SIXTEENTH); } else enemy[e].angle += grand(ANGLE_1_SIXTEENTH); colours_for_cloud [0] = TRANS_DGREEN; colours_for_cloud [1] = TRANS_LGREEN; colours_for_cloud [2] = TRANS_YELLOW; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 4; enemy[e].burst_fire --; } else { enemy[e].recycle = 140; enemy[e].burst_fire = 6 + grand(6); // also in creation } enemy_soundf(e, NWAV_GBLAT, 500); break; case ENEMY_BRACKET4: case ENEMY_BRACKET3: recoil = 100; // case ENEMY_DEFENDER2_TURRET3: btype = BULLET_GREEN_BLAT; damage = DAM_GREEN_BLAT; timer = 40; timer_rand = 15; mass = 10; speed = 12000; firing_distance = 2000; speed_div = 3; multiple = 2; displaced = 6; displace_series [0] = 1; displace_series [1] = -1; colours_for_cloud [0] = TRANS_DGREEN; colours_for_cloud [1] = TRANS_LGREEN; colours_for_cloud [2] = TRANS_YELLOW; enemy[e].recycle = 15; enemy_soundf(e, NWAV_GBLAT, 400); break; case ENEMY_BRACKET5: btype = BULLET_YELLOW_FLAK; damage = 100; timer = 4; timer_rand = 19; mass = 10; speed = 9000; firing_distance = 2000; speed_div = 3; multiple = 1; colours_for_cloud [0] = TRANS_ORANGE; colours_for_cloud [1] = TRANS_YELLOW; colours_for_cloud [2] = TRANS_WHITE; recoil = 300; enemy[e].recycle = 15; // enemy[e].attribute [0] = 7; speed_div = 3; multiple = 2; displaced = 6; displace_series [0] = 1; displace_series [1] = -1; enemy_soundf(e, NWAV_GBLAT, 300); break; case ENEMY_TRIANGLER1: recoil = 100; btype = BULLET_TRI1; damage = 1; timer = 60; if (enemy[e].attacking == 0 || enemy[e].attacking == 1) timer = (hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x) / 6500) + 3; timer_rand = 15; mass = 10; speed = 2000; firing_distance = 15000; speed_div = 3; multiple = 1; displaced = 15; displace_series [0] = 1; enemy[e].attribute [1] = 13; enemy[e].attribute [2] = 7; if (enemy[e].attribute [0] == 1) { displace_series [0] = -1; enemy[e].attribute [0] = 0; // enemy[e].attribute [1] = 5; // enemy[e].attribute [2] = 5; } else { enemy[e].attribute [0] = 1; // enemy[e].attribute [1] = 5; // enemy[e].attribute [2] = 5; } colours_for_cloud [0] = TRANS_DRED; colours_for_cloud [1] = TRANS_ORANGE; colours_for_cloud [2] = TRANS_YELLOW; enemy[e].recycle = 65; size = 6000; enemy_soundf(e, NWAV_LAUNCH, 400); break; case ENEMY_TRIANGLER2: recoil = 100; btype = BULLET_TRI2; damage = 1; timer = 60; if (enemy[e].attacking == 0 || enemy[e].attacking == 1) timer = (hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x) / 7000) + 3; timer_rand = 15; mass = 10; speed = 2000; firing_distance = 15000; speed_div = 3; multiple = 1; displaced = 17; displace_series [0] = 1; enemy[e].attribute [1] = 13; enemy[e].attribute [2] = 7; if (enemy[e].attribute [0] == 1) { displace_series [0] = -1; enemy[e].attribute [0] = 0; // enemy[e].attribute [1] = 5; // enemy[e].attribute [2] = 5; } else { enemy[e].attribute [0] = 1; // enemy[e].attribute [1] = 5; // enemy[e].attribute [2] = 5; } colours_for_cloud [0] = TRANS_DBLUE; colours_for_cloud [1] = TRANS_LBLUE; colours_for_cloud [2] = TRANS_WHITE; enemy[e].recycle = 75; size = 6000; enemy_soundf(e, NWAV_LAUNCH, 300); break; case ENEMY_TRIANGLER3: recoil = 100; btype = BULLET_TRI3; damage = 1; timer = 60; if (enemy[e].attacking == 0 || enemy[e].attacking == 1) timer = (hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x) / 8000) + 3; timer_rand = 15; mass = 10; speed = 2000; firing_distance = 15000; speed_div = 3; multiple = 1; displaced = 16; displace_series [0] = 1; enemy[e].attribute [1] = 13; enemy[e].attribute [2] = 7; if (enemy[e].attribute [0] == 1) { displace_series [0] = -1; enemy[e].attribute [0] = 0; // enemy[e].attribute [1] = 5; // enemy[e].attribute [2] = 5; } else { enemy[e].attribute [0] = 1; // enemy[e].attribute [1] = 5; // enemy[e].attribute [2] = 5; } colours_for_cloud [0] = TRANS_ORANGE; colours_for_cloud [1] = TRANS_YELLOW; colours_for_cloud [2] = TRANS_WHITE; enemy[e].recycle = 99; size = 6000; enemy_soundf(e, NWAV_LAUNCH, 200); break; case ENEMY_OVERTRIANGLER: recoil = 100; btype = BULLET_OVERTRI; damage = 1; timer = 60; if (enemy[e].attacking == 0 || enemy[e].attacking == 1) timer = (hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x) / 5000) + 3; timer_rand = 15; mass = 10; speed = 2000; firing_distance = 15000; speed_div = 3; multiple = 1; displaced = 26; displace_series [0] = 1; enemy[e].attribute [1] = 13; enemy[e].attribute [2] = 7; if (enemy[e].attribute [0] == 1) { displace_series [0] = -1; enemy[e].attribute [0] = 0; } else { enemy[e].attribute [0] = 1; } colours_for_cloud [0] = TRANS_LGREEN; colours_for_cloud [1] = TRANS_YELLOW; colours_for_cloud [2] = TRANS_WHITE; enemy[e].recycle = 65; size = 9000; enemy_soundf(e, NWAV_LAUNCH, 150); break; case ENEMY_ATTRACTOR: btype = BULLET_ATTRACTOR_LINE; damage = 0;//DAM_WORMS1; timer = 80; timer_rand = 30; mass = 60; speed = 0;//12000; firing_distance = 15000 + grand(60000); enemy[e].recycle = 1; speed_div = 3; multiple = 1; angle = grand(ANGLE_FULL); // displaced = grand(110); // displace_series [0] = 1; // angle_increment = 102;//ANGLE_1_SIXTEENTH; colours [0] = TRANS_DBLUE; colours [1] = TRANS_LBLUE; colours [2] = TRANS_PURPLE; colours [3] = TRANS_WHITE; recoil = 0; special2 = e; break; case ENEMY_WORMER1: btype = BULLET_EVIL_EEL; damage = DAM_WORMS1; timer = 80; timer_rand = 30; mass = 60; speed = 6000; firing_distance = 11000; enemy[e].recycle = 120; speed_div = 3; multiple = 10; angle_increment = 102;//ANGLE_1_SIXTEENTH; colours [0] = COLOUR_ORANGE4; colours [1] = COLOUR_ORANGE6; colours [2] = COLOUR_YELLOW6; colours [3] = COLOUR_YELLOW8; recoil = 0; special2 = 64; if (grand(2) == 0) special2 = -64; special3 = 3 + grand(3); special1 = 900; enemy_soundf(e, NWAV_WHINE, 1000 + grand(50)); break; case ENEMY_WORMER2: btype = BULLET_SQUIRMY; damage = DAM_WORMS2; timer = 80; timer_rand = 30; mass = 80; speed = 6000; firing_distance = 11000; enemy[e].recycle = 90; speed_div = 3; multiple = 10; angle_increment = 102;//ANGLE_1_SIXTEENTH; colours [0] = COLOUR_GREEN4; colours [1] = COLOUR_GREEN6; colours [2] = COLOUR_YELLOW6; colours [3] = COLOUR_YELLOW8; recoil = 0; special2 = 94; // if (grand(2) == 0) // special2 = -74; special4 = 8; special3 = special4; special1 = 1500; enemy_soundf(e, NWAV_WHINE, 700 + grand(50)); break; case ENEMY_WORMER3: btype = BULLET_EVIL_WORM; damage = DAM_WORMS2; timer = 80; timer_rand = 0; mass = 80; speed = 6000; firing_distance = 11000; enemy[e].recycle = 120; speed_div = 3; multiple = 6; angle_increment = ANGLE_FULL / 6; colours [0] = COLOUR_RED5; colours [1] = COLOUR_ORANGE6; colours [2] = COLOUR_YELLOW6; colours [3] = COLOUR_YELLOW8; /* colours [0] = COLOUR_BLUE5; colours [1] = COLOUR_BLUE6; colours [2] = COLOUR_GREEN6; colours [3] = COLOUR_YELLOW8;*/ recoil = 0; special1 = 390; // accel special2 = 60; // time of lock-on special3 = -1; // lock special4 = 6; // turn enemy_soundf(e, NWAV_WHINE, 500 + grand(50)); break; case ENEMY_WORMER4: btype = BULLET_TURN_WORM; damage = DAM_WORMS2; timer = 100 + grand(40); // deliberately not timer_rand timer_rand = 0; mass = 80; speed = 6000; firing_distance = 11000; enemy[e].recycle = 120; speed_div = 3; multiple = 8; angle_increment = ANGLE_FULL / 8; colours [0] = COLOUR_ORANGE5; colours [1] = COLOUR_YELLOW6; colours [2] = COLOUR_YELLOW7; colours [3] = COLOUR_WHITE; recoil = 0; special1 = 1100 + grand(300); // accel special2 = 5 + grand(9); // turn if (grand(2) == 0) special2 *= -1; enemy_soundf(e, NWAV_WHINE, 400 + grand(50)); break; /* case ENEMY_HEAD1: btype = BULLET_YELLOW_PULSE; damage = 1; timer = 80; timer_rand = 30; mass = 60; speed = 7000; firing_distance = 11000; enemy[e].recycle = 150; speed_div = 3; multiple = 8; angle_increment = ANGLE_1_EIGHTH; colours [0] = COLOUR_YELLOW8; // colours [1] = COLOUR_ORANGE6; // colours [2] = COLOUR_YELLOW6; // colours [3] = COLOUR_YELLOW8; recoil = 0; special1 = 250; // damage special2 = 200; // visible explosion size special3 = 50000; // blast size special4 = 500; // blast force break; case ENEMY_HEAD1_EYE1: btype = BULLET_CIRCLES; damage = 200; timer = 120; timer_rand = 30; mass = 120; speed = 5000; firing_distance = 4000; enemy[e].recycle = 90 + grand(70); speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = COLOUR_GREEN8; recoil = 500; size = 5000; break;*/ case ENEMY_BRACKET4_TURRET: // case ENEMY_HEAD1_EYE2: btype = BULLET_SHOCK; damage = 100; timer = 80; timer_rand = 30; mass = 20; speed = 15000; firing_distance = 4000; enemy[e].recycle = 60 + grand(50); speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = COLOUR_ORANGE4; colours [1] = COLOUR_ORANGE6; colours [2] = COLOUR_YELLOW6; colours [3] = COLOUR_YELLOW8; recoil = 500; enemy_soundf(e, NWAV_SZAP, 100 + grand(5)); break; /* case ENEMY_HEAD1_EYE3: btype = BULLET_SQUIRMY; damage = DAM_WORMS2; timer = 80; timer_rand = 30; mass = 50; speed = 500; firing_distance = 4000; enemy[e].recycle = 50 + grand(30); speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = COLOUR_GREEN4; colours [1] = COLOUR_GREEN6; colours [2] = COLOUR_YELLOW6; colours [3] = COLOUR_YELLOW8; recoil = 500; special2 = 94; // if (grand(2) == 0) // special2 = -74; special4 = 8; special3 = special4; special1 = 1500; break;*/ case ENEMY_SPINNER1: btype = BULLET_SEEKER1; damage = DAM_SMALL_GREEN_SEEKER; timer = 220; timer_rand = 50; mass = 50; speed = 7000; firing_distance = 11000; enemy[e].recycle = 180; speed_div = 3; multiple = 1; // colours [0] = COLOUR_GREEN8; colourise_bullet(colours, COLOURISE_GREEN_SEEKER1); recoil = 50; special1 = closest_target(enemy[e].x, enemy[e].y); special2 = 30; special3 = 32; special4 = 100; special5 = 4001; enemy_soundf(e, NWAV_SEEKER, 700 + grand(150)); break; case ENEMY_SPINNER2: btype = BULLET_SEEKER2; damage = DAM_LARGE_GREEN_SEEKER; timer = 220; timer_rand = 50; mass = 120; speed = 7000; firing_distance = 11000; enemy[e].recycle = 330; speed_div = 3; multiple = 1; colourise_bullet(colours, COLOURISE_GREEN_SEEKER2); recoil = 50; special1 = closest_target(enemy[e].x, enemy[e].y); special2 = 43; special3 = 48; special4 = 180; special5 = 7001; enemy_soundf(e, NWAV_SEEKER, 600 + grand(20)); break; case ENEMY_SPINNER3: btype = BULLET_SEEKER3; damage = 1; timer = 220; timer_rand = 50; mass = 120; speed = 7000; firing_distance = 11000; enemy[e].recycle = 250; speed_div = 3; multiple = 1; colourise_bullet(colours, COLOURISE_BLUE_SEEKER); recoil = 50; special1 = closest_target(enemy[e].x, enemy[e].y); special2 = 45; special3 = 32; special4 = 120; special5 = 5001; enemy_soundf(e, NWAV_SEEKER, 800 + grand(20)); break; case ENEMY_SPINNER4: btype = BULLET_SEEKER1; damage = DAM_SMALL_GREEN_SEEKER; timer = 220; timer_rand = 50; mass = 50; speed = 7000; firing_distance = 11000; enemy[e].recycle = 200; speed_div = 3; multiple = 1; colourise_bullet(colours, COLOURISE_GREEN_SEEKER1); recoil = 50; special1 = closest_target(enemy[e].x, enemy[e].y); special2 = 30; special3 = 32; special4 = 100; special5 = 4001; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 7; enemy[e].burst_fire --; enemy[e].angle = grand(ANGLE_FULL); } else { enemy[e].recycle = 210; enemy[e].burst_fire = 3; // also in creation } enemy_soundf(e, NWAV_SEEKER, 700 + grand(150)); break; // case ENEMY_FIGHTER5: case ENEMY_SPINNER5: btype = BULLET_SEEKER1; damage = DAM_YELLOW_SEEKER; timer = 220; timer_rand = 50; mass = 50; speed = 7000; firing_distance = 11000; enemy[e].recycle = 100; speed_div = 3; multiple = 1; colourise_bullet(colours, COLOURISE_YELLOW_SEEKER); recoil = 250; special1 = closest_target(enemy[e].x, enemy[e].y); special2 = 20; special3 = 6; special4 = 200; special5 = 4001; enemy_soundf(e, NWAV_SEEKER, 1000 + grand(20)); break; case ENEMY_OVERSPINNER: btype = BULLET_BIGSEEKER; damage = 1; timer = 330; timer_rand = 50; mass = 120; speed = 7000; size = 4000; firing_distance = 30000; enemy[e].recycle = 200; speed_div = 3; multiple = 1; colourise_bullet(colours, TRANS_PURPLE);//COLOURISE__SEEKER); recoil = 150; special1 = closest_target(enemy[e].x, enemy[e].y); // special2 = 45; // special3 = 32; // special4 = 120; // special5 = 5001; scatter = ANGLE_FULL; enemy_soundf(e, NWAV_SEEKER, 300 + grand(20)); break; case ENEMY_OVERSPIKEY: btype = BULLET_BIGWINGS1; damage = 1; timer = 30; timer_rand = 0; mass = 20; speed = 1200; firing_distance = 30000; enemy[e].recycle = 50; speed_div = 3; multiple = 1; angle_increment = 0;//ANGLE_1_32; colourise_bullet(colours, TRANS_LGREEN); recoil = 1; size = 5000; special1 = closest_target(enemy[e].x, enemy[e].y); angle_rand = ANGLE_FULL; break; case ENEMY_UNDERSPIKEY: btype = BULLET_BIGCIRCLES; damage = 250; timer = 120; timer_rand = 30; mass = 120; speed = 5500; firing_distance = 27000; enemy[e].recycle = 45; speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = COLOUR_ORANGE8; recoil = 100; size = 9000; enemy_soundf(e, NWAV_CHIME2, 750 + grand(10)); break; case ENEMY_UNDERSPIKEY2: btype = BULLET_OVERBLOCKS; damage = 250; timer = 120; timer_rand = 30; mass = 120; speed = 11000; firing_distance = 27000; enemy[e].recycle = 120; speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = TRANS_ORANGE; colours [1] = TRANS_LRED; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; recoil = 100; size = 9000; special1 = 0; // enemy_soundf(e, NWAV_CHIME2, 750 + grand(10)); enemy_soundf(e, NWAV_BLOCK, 700 + grand(100)); break; case ENEMY_UNDERSPIKEY3: btype = BULLET_ZIGZAG2; damage = 250; timer = 120; timer_rand = 30; mass = 120; speed = 6000; firing_distance = 27000; enemy[e].recycle = 90; speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = TRANS_WHITE; colours [1] = TRANS_LBLUE; colours [2] = TRANS_DBLUE; colours [3] = TRANS_DBLUE; /* colours [0] = TRANS_WHITE; colours [1] = TRANS_YELLOW; colours [2] = TRANS_YELLOW; colours [3] = TRANS_ORANGE;*/ recoil = 100; size = 9000; special1 = ANGLE_QUARTER; if (grand(2) == 0) special1 = -ANGLE_QUARTER; special2 = 12; special3 = 7000; special4 = enemy[e].angle; special5 = 0; // enemy_soundf(e, NWAV_CHIME2, 750 + grand(10)); // special4 = enemy[e].x + xpart(enemy[e].angle, firing_distance); // special5 = enemy[e].y + ypart(enemy[e].angle, firing_distance); enemy_soundf(e, NWAV_BLOCK, 500 + grand(100)); break; case ENEMY_OVERSPIKEY2: btype = BULLET_ZIGZAG2; damage = 350; timer = 120; timer_rand = 30; mass = 120; speed = 8000; firing_distance = 27000; enemy[e].recycle = 60; speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; /* colours [0] = TRANS_WHITE; colours [1] = TRANS_YELLOW; colours [2] = TRANS_YELLOW; colours [3] = TRANS_ORANGE;*/ recoil = 100; size = 9000; special1 = ANGLE_QUARTER; if (grand(2) == 0) special1 = -ANGLE_QUARTER; special2 = 12; special3 = 7000; special4 = enemy[e].angle; special5 = 1; // enemy_soundf(e, NWAV_CHIME2, 750 + grand(10)); // special4 = enemy[e].x + xpart(enemy[e].angle, firing_distance); // special5 = enemy[e].y + ypart(enemy[e].angle, firing_distance); enemy_soundf(e, NWAV_BLOCK, 600 + grand(100)); break; case ENEMY_BLATTER1: btype = BULLET_GREEN_BLAT; damage = DAM_GREEN_BLAT; timer = 30; timer_rand = 15; mass = 10; speed = 10000; firing_distance = 12000; // enemy[e].recycle = 90; speed_div = 3; multiple = 1; colours_for_cloud [0] = TRANS_DGREEN; colours_for_cloud [1] = TRANS_LGREEN; colours_for_cloud [2] = TRANS_YELLOW; recoil = 100; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 7; enemy[e].burst_fire --; } else { enemy[e].recycle = 60; enemy[e].burst_fire = 3 + grand(3); // also in creation } enemy_soundf(e, NWAV_GBLAT, 500); break; case ENEMY_OVERBLATTER: btype = BULLET_BALL2; damage = 200; timer = 60; timer_rand = 10; mass = 10; speed = 5000; // speed_rand = 4000; firing_distance = 6000; // enemy[e].recycle = 50; colours_for_cloud [0] = TRANS_DRED; colours_for_cloud [1] = TRANS_LRED; colours_for_cloud [2] = TRANS_YELLOW; speed_div = 3; displaced = 26; if (enemy[e].attribute [4] == 1) { displace_series [0] = -1; enemy[e].attribute [4] = 0; special_angle = enemy[e].attribute [7]; enemy[e].attribute [9] = 7; } else { displace_series [0] = 1; enemy[e].attribute [4] = 1; special_angle = enemy[e].attribute [6]; enemy[e].attribute [8] = 7; } recoil = 100; size = 3000; enemy[e].recycle = 14; enemy_soundf(e, NWAV_MULTI, 1000 + grand(30)); break; case ENEMY_BOSS2_TURRET3: btype = BULLET_BALL2; damage = 200; timer = 40; timer_rand = 13; mass = 10; speed = 4500; // speed_rand = 4000; firing_distance = 12000; // enemy[e].recycle = 50; colours_for_cloud [0] = TRANS_DRED; colours_for_cloud [1] = TRANS_LRED; colours_for_cloud [2] = TRANS_YELLOW; speed_div = 3; recoil = 0; size = 3000; multiple = 3; angle_increment = ANGLE_1_SIXTEENTH; enemy[e].recycle = 80; enemy_soundf(e, NWAV_MULTI, 600 + grand(10)); break; case ENEMY_OVERBLATTER2: btype = BULLET_BOLT; damage = 300; timer = 30; timer_rand = 10; mass = 20; speed = 7500; colours [0] = TRANS_WHITE; colours [1] = TRANS_LBLUE; colours [2] = TRANS_DBLUE; colours [3] = TRANS_DGREY; colours_for_cloud [0] = TRANS_DBLUE; colours_for_cloud [1] = TRANS_LBLUE; colours_for_cloud [2] = TRANS_WHITE; firing_distance = 6000; speed_div = 3; displaced = 26; size = 3000; if (enemy[e].attribute [4] == 1) { displace_series [0] = -1; enemy[e].attribute [4] = 0; special_angle = enemy[e].attribute [7]; enemy[e].attribute [9] = 7; } else { displace_series [0] = 1; enemy[e].attribute [4] = 1; special_angle = enemy[e].attribute [6]; enemy[e].attribute [8] = 7; } recoil = 100; size = 3000; enemy[e].recycle = 20; enemy_soundf(e, NWAV_MULTI, 200 + grand(10)); break; // case ENEMY_OVERTRIANGLER_TURRET: case ENEMY_BLATTER2: btype = BULLET_BALL2; damage = 200; timer = 25; timer_rand = 10; mass = 10; speed = 5500; firing_distance = 14000; enemy[e].recycle = 25; // if (enemy[e].type == ENEMY_DEFENDER3_TURRET4) // { // firing_distance = 12000; // } // enemy[e].recycle = 35; speed_div = 3; multiple = 1; recoil = 100; size = 3000; enemy_soundf(e, NWAV_BALL1, 800 + grand(10)); break; case ENEMY_BLATTER3: btype = BULLET_BALL1; damage = 150; timer = 40; timer_rand = 20; mass = 10; speed = 5000; firing_distance = 14000; enemy[e].recycle = 20; speed_div = 3; multiple = 4; angle_increment = ANGLE_1_EIGHTH; angle -= ANGLE_QUARTER; recoil = 100; size = 3000; enemy_soundf(e, NWAV_MULTI, 700 + grand(10)); break; case ENEMY_DEFENDER3_TURRET4: btype = BULLET_FLAME; damage = 0; timer = 30; timer_rand = 5; mass = 40; speed = 5000; /* colours [0] = TRANS_WHITE; colours [1] = TRANS_LBLUE; colours [2] = TRANS_DBLUE;*/ colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_DGREEN; firing_distance = 11000; enemy[e].recycle = 90; speed_div = 3; multiple = 1; recoil = 0; size = 2000; enemy_soundf(e, NWAV_SHORTBURST, 200 + grand(50)); break; case ENEMY_BLATTER4: btype = BULLET_FLAME; damage = 0; timer = 25; timer_rand = 5; mass = 40; speed = 8000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; firing_distance = 11000; enemy[e].recycle = 90; speed_div = 3; multiple = 1; recoil = 500; size = 2000; enemy_soundf(e, NWAV_SHORTBURST, 150 + grand(50)); // enemy_soundf(e, NWAV_LZAP, 900 + grand(100)); /* btype = BULLET_FORK3; damage = 100; timer = 15; timer_rand = 6; mass = 20; speed = 8000; firing_distance = 21000; speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = COLOUR_RED5; colours [1] = COLOUR_RED6; colours [2] = COLOUR_ORANGE8; colours [3] = COLOUR_YELLOW8; recoil = 50; // size = 1000; special1 = COLOUR_YELLOW8; scatter = ANGLE_1_SIXTEENTH; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 4; enemy[e].burst_fire --; } else { enemy[e].recycle = 90; enemy[e].burst_fire = 4 + grand(4); // also in creation }*/ break; case ENEMY_BLATTER5: btype = BULLET_ZAP; damage = 100; timer = 19; timer_rand = 12; mass = 10; speed = 3000; speed_rand = 7000; firing_distance = 10000; enemy[e].recycle = 55; colours [0] = COLOUR_YELLOW8; colours [1] = COLOUR_GREEN8; colours [2] = COLOUR_GREEN6; colours [3] = COLOUR_GREEN4; speed_div = 3; multiple = 10; scatter = ANGLE_1_EIGHTH; recoil = 500; enemy_soundf(e, NWAV_DNO, 1200 + grand(150)); break; case ENEMY_PULSER1: btype = BULLET_PULSE1; damage = 150; timer = 220; timer_rand = 50; mass = 50; speed = 1000; firing_distance = 18000; enemy[e].recycle = 75; speed_div = 3; multiple = 1; colours_for_cloud [0] = TRANS_LRED; colours_for_cloud [1] = TRANS_ORANGE; colours_for_cloud [2] = TRANS_YELLOW; recoil = 50; special1 = closest_target(enemy[e].x, enemy[e].y); // special2 = 20; // special3 = 32; // special4 = 100; // special5 = 4001; enemy_soundf(e, NWAV_CHIRP, 1000 + grand(100)); break; case ENEMY_PULSER2: btype = BULLET_PULSE2; damage = 250; timer = 220; timer_rand = 50; mass = 150; speed = 1000; firing_distance = 18000; enemy[e].recycle = 75; speed_div = 3; multiple = 1; colours_for_cloud [0] = TRANS_DBLUE; colours_for_cloud [1] = TRANS_LBLUE; colours_for_cloud [2] = TRANS_WHITE; recoil = 50; special1 = closest_target(enemy[e].x, enemy[e].y); // special2 = 20; // special3 = 32; // special4 = 100; // special5 = 4001; enemy_soundf(e, NWAV_CHIRP, 700 + grand(100)); break; case ENEMY_BOSS2_3: btype = BULLET_OVERPULSE; damage = 300; timer = 220; timer_rand = 50; mass = 300; speed = 1000; firing_distance = 36000; enemy[e].recycle = 80; speed_div = 3; multiple = 1; colours_for_cloud [0] = TRANS_DGREEN; colours_for_cloud [1] = TRANS_LGREEN; colours_for_cloud [2] = TRANS_YELLOW; recoil = 250; special1 = closest_target(enemy[e].x, enemy[e].y); special2 = grand(2); enemy_soundf(e, NWAV_CHIRP, 200 + grand(30)); break; case ENEMY_CRUISER1_TURRET: btype = BULLET_GREEN_BLAT; damage = DAM_GREEN_BLAT; timer = 30; timer_rand = 15; mass = 10; speed = 10000; firing_distance = 12000; // enemy[e].recycle = 90; speed_div = 3; multiple = 1; colours_for_cloud [0] = TRANS_DGREEN; colours_for_cloud [1] = TRANS_LGREEN; colours_for_cloud [2] = TRANS_YELLOW; recoil = 300; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 7; enemy[e].burst_fire --; enemy[e].attribute [0] = 7; } else { enemy[e].recycle = 90; enemy[e].burst_fire = 3 + grand(3); // also in creation enemy[e].attribute [0] = 7; } enemy_soundf(e, NWAV_GBLAT, 500); break; case ENEMY_CRUISER1: btype = BULLET_BLAST; damage = 200; timer = 40; timer_rand = 20; mass = 40; speed = 4000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; firing_distance = 14000; enemy[e].recycle = 66; speed_div = 3; multiple = 2; multiple = 2; displaced = 9; displace_series [0] = 1; displace_series [1] = -1; recoil = 100; size = 2000; enemy_soundf(e, NWAV_LZAP, 900 + grand(100)); break; case ENEMY_CRUISER2_TURRET: case ENEMY_DEFENDER2_TURRET3: btype = BULLET_YELLOW_FLAK; damage = 100; timer = 8; timer_rand = 15; mass = 10; speed = 6000; firing_distance = 12000; // enemy[e].recycle = 90; speed_div = 3; multiple = 1; colours_for_cloud [0] = TRANS_ORANGE; colours_for_cloud [1] = TRANS_YELLOW; colours_for_cloud [2] = TRANS_WHITE; recoil = 300; enemy[e].recycle = 34; enemy[e].attribute [0] = 7; enemy_soundf(e, NWAV_GBLAT, 300 + grand(50)); break; case ENEMY_CRUISER2: btype = BULLET_BLAST; damage = 300; timer = 40; timer_rand = 20; mass = 40; speed = 7000; colours [0] = TRANS_WHITE; colours [1] = TRANS_LBLUE; colours [2] = TRANS_LBLUE; colours [3] = TRANS_DBLUE; firing_distance = 14000; enemy[e].recycle = 45; speed_div = 3; // multiple = 2; multiple = 2; displaced = 9; displace_series [0] = 1; displace_series [1] = -1; recoil = 100; // scatter = ANGLE_1_EIGHTH; size = 2000; enemy_soundf(e, NWAV_LZAP, 1200 + grand(100)); break; case ENEMY_CRUISER3_TURRET: btype = BULLET_ZAP_DRAG; damage = 50; timer = 15; timer_rand = 6; mass = 5; speed = 9000; // speed_rand = 7000; firing_distance = 9000; enemy[e].recycle = 6; colours [0] = COLOUR_ORANGE8; colours [1] = COLOUR_RED8; colours [2] = COLOUR_RED6; colours [3] = COLOUR_RED4; speed_div = 3; // multiple = 10; scatter = ANGLE_1_32; recoil = 50; enemy[e].attribute [0] = 7; special1 = -1; enemy_soundf(e, NWAV_SZAP, 1200 + grand(50)); break; case ENEMY_CRUISER3: btype = BULLET_BLAST; damage = 200; timer = 40; timer_rand = 20; mass = 40; speed = 4000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; firing_distance = 14000; enemy[e].recycle = 66; speed_div = 3; multiple = 4; displaced = 7; angle_increment = ANGLE_1_SIXTEENTH; angle -= ANGLE_1_32 + ANGLE_1_SIXTEENTH; displace_series [0] = -2; displace_series [1] = -1; displace_series [2] = 1; displace_series [3] = 2; recoil = 100; size = 2000; enemy_soundf(e, NWAV_LZAP, 600 + grand(100)); break; case ENEMY_CRUISER4: // similar to guardian1 btype = BULLET_BLAST; damage = 250; timer = 30; timer_rand = 10; mass = 50; speed = 7000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_DGREEN; colours [3] = TRANS_DGREEN; firing_distance = 14000; enemy[e].recycle = 66; speed_div = 3; multiple = 4; displaced = 7; angle_increment = ANGLE_1_SIXTEENTH; angle -= ANGLE_1_32 + ANGLE_1_SIXTEENTH; displace_series [0] = -2; displace_series [1] = -1; displace_series [2] = 1; displace_series [3] = 2; recoil = 150; size = 2000; enemy_soundf(e, NWAV_LZAP, 500 + grand(100)); break; case ENEMY_CRUISER4_TURRET: btype = BULLET_SHOCK; damage = 100; timer = 10; timer_rand = 3; mass = 20; speed = 15000; firing_distance = 7000; enemy[e].recycle = 35; speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = COLOUR_GREEN4; colours [1] = COLOUR_GREEN6; colours [2] = COLOUR_YELLOW6; colours [3] = COLOUR_YELLOW8; recoil = 100; enemy[e].attribute [0] = 7; enemy_soundf(e, NWAV_LZAP, 1200 + grand(100)); break; case ENEMY_LEAPER1: btype = BULLET_BLAST; damage = 200; timer = 40; timer_rand = 20; mass = 40; speed = 4000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; firing_distance = 9000; enemy[e].recycle = 40; speed_div = 3; multiple = 1; recoil = 500; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 20; enemy[e].burst_fire --; } else { enemy[e].recycle = 100; enemy[e].burst_fire = 3; // also in creation } size = 2000; enemy_soundf(e, NWAV_LZAP, 1200 + grand(100)); break; case ENEMY_LEAPER2: btype = BULLET_BLAST; damage = 250; timer = 40; timer_rand = 20; mass = 40; speed = 6000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_DGREEN; colours [3] = TRANS_DGREY; firing_distance = 9000; enemy[e].recycle = 40; speed_div = 3; multiple = 1; recoil = 500; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 20; enemy[e].burst_fire --; } else { enemy[e].recycle = 100; enemy[e].burst_fire = 3; // also in creation } size = 2000; enemy_soundf(e, NWAV_LZAP, 1100 + grand(100)); break; case ENEMY_FIGHTER1: btype = BULLET_BLAST; damage = 200; timer = 40; timer_rand = 20; mass = 40; speed = 4000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; firing_distance = 10000; enemy[e].recycle = 40; speed_div = 3; multiple = 1; recoil = 500; size = 2000; enemy_soundf(e, NWAV_LZAP, 900 + grand(100)); break; case ENEMY_FIGHTER2: btype = BULLET_BLUE_BLAT; damage = DAM_BLUE_BLAT; timer = 30; timer_rand = 15; mass = 10; speed = 10000; firing_distance = 1000; // enemy[e].recycle = 90; speed_div = 3; multiple = 2; displaced = 6; displace_series [0] = 1; displace_series [1] = -1; colours_for_cloud [0] = TRANS_DBLUE; colours_for_cloud [1] = TRANS_LBLUE; colours_for_cloud [2] = TRANS_WHITE; recoil = 300; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 7; enemy[e].burst_fire --; } else { enemy[e].recycle = 160; enemy[e].burst_fire = 4 + grand(4); // also in creation } enemy_soundf(e, NWAV_GBLAT, 1800); break; case ENEMY_FIGHTER3: btype = BULLET_SEEKER1; damage = DAM_SMALL_GREEN_SEEKER; timer = 220; timer_rand = 50; mass = 50; speed = 7000; firing_distance = 11000; enemy[e].recycle = 150; speed_div = 3; multiple = 2; // displaced = 6; // displace_series [0] = 1; // displace_series [1] = -1; angle_increment = ANGLE_1_SIXTEENTH; colourise_bullet(colours, COLOURISE_GREEN_SEEKER1); recoil = 50; special1 = closest_target(enemy[e].x, enemy[e].y); special2 = 30; special3 = 32; special4 = 100; special5 = 4001; enemy_soundf(e, NWAV_SEEKER, 700 + grand(150)); break; case ENEMY_FIGHTER4: btype = BULLET_BLAST; damage = 250; timer = 20; timer_rand = 10; mass = 40; speed = 5000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_DGREEN; colours [3] = TRANS_DGREY; firing_distance = 14000; enemy[e].recycle = 80; speed_div = 3; multiple = 2; angle -= ANGLE_1_32; // angle_rand = 64; angle_increment = ANGLE_1_SIXTEENTH; recoil = 1200; size = 2000; enemy_soundf(e, NWAV_LZAP, 1000 + grand(100)); break; case ENEMY_FIGHTER5: btype = BULLET_SEEKER1; damage = DAM_YELLOW_SEEKER; timer = 220; timer_rand = 50; mass = 50; speed = 7000; firing_distance = 11000; // enemy[e].recycle = 50; speed_div = 3; multiple = 1; colourise_bullet(colours, COLOURISE_YELLOW_SEEKER); recoil = 250; special1 = closest_target(enemy[e].x, enemy[e].y); special2 = 20; special3 = 6; special4 = 200; special5 = 4001; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 15; enemy[e].burst_fire --; } else { enemy[e].recycle = 160; enemy[e].burst_fire = 3 + grand(3); // also in creation } enemy_soundf(e, NWAV_SEEKER, 1000 + grand(20)); break; case ENEMY_MESSENGER: btype = BULLET_ZAP_DRAG; damage = 100; timer = 30; timer_rand = 10; mass = 10; speed = 8000; firing_distance = 7000; speed_div = 3; multiple = 2; displaced = 5; displace_series [0] = -1; displace_series [1] = 1; colours [0] = COLOUR_YELLOW8; colours [1] = COLOUR_YELLOW7; colours [2] = COLOUR_GREEN6; colours [3] = COLOUR_GREEN4; recoil = 0; scatter = 0; // angle = enemy[e].attribute [2]; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 5; enemy[e].burst_fire --; } else { enemy[e].recycle = 90; enemy[e].burst_fire = 3 + grand(3); // also in creation } special1 = -1; enemy_soundf(e, NWAV_SZAP, 700 + grand(50)); /* btype = BULLET_MBOMB; damage = 1; timer = 50; // timer_rand = 20; mass = 40; speed = 1000; colours [0] = COLOUR_YELLOW8; //// colours [1] = TRANS_ORANGE; // colours [2] = TRANS_LRED; // colours [3] = TRANS_DRED; firing_distance = 1000; enemy[e].recycle = 60; speed_div = 3; multiple = 1; recoil = 0;*/ break; case ENEMY_BOMBER1: btype = BULLET_E_BOMB; damage = 1; timer = 50; // timer_rand = 20; mass = 40; speed = 1000; colours [0] = COLOUR_YELLOW8; //// colours [1] = TRANS_ORANGE; // colours [2] = TRANS_LRED; // colours [3] = TRANS_DRED; firing_distance = 1000; enemy[e].recycle = 40; speed_div = 3; multiple = 1; recoil = 0; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 15; enemy[e].burst_fire --; } else { enemy[e].recycle = 160; enemy[e].burst_fire = 3; // also in creation } enemy_soundf(e, NWAV_SPLERK, 1500 + grand(50)); break; case ENEMY_BOMBER2: btype = BULLET_E_BOMB; damage = 1; timer = 15; timer_rand = 65; mass = 40; speed = 0; speed_rand = 5000; colours [0] = COLOUR_YELLOW8; //// colours [1] = TRANS_ORANGE; // colours [2] = TRANS_LRED; // colours [3] = TRANS_DRED; firing_distance = 1000; enemy[e].recycle = 40; speed_div = 3; multiple = 4; angle_rand = 150; recoil = 0; enemy_soundf(e, NWAV_SPLERK, 1300 + grand(50)); /* if (enemy[e].burst_fire > 0) { enemy[e].recycle = 15; enemy[e].burst_fire --; } else { enemy[e].recycle = 160; enemy[e].burst_fire = 3; // also in creation }*/ break; case ENEMY_BOMBER3: btype = BULLET_E_BOMB2; damage = 1; timer = 50; timer_rand = 100; mass = 10; speed = 6000; // speed_rand = 8000; // colours [0] = COLOUR_YELLOW8; firing_distance = 5000; // enemy[e].recycle = 40; speed_div = 3; multiple = 1; angle_rand = ANGLE_FULL; recoil = 100; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 7; enemy[e].burst_fire --; } else { enemy[e].recycle = 160; enemy[e].burst_fire = 6 + grand(6); // also in creation } enemy_soundf(e, NWAV_TEETH, 1200 + grand(50)); break; case ENEMY_SPIKEY1: btype = BULLET_CIRCLES2; damage = 150; timer = 120; timer_rand = 30; mass = 50; speed = 5000; firing_distance = 4000; enemy[e].recycle = 150; speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = COLOUR_YELLOW8; recoil = 100; size = 5000; enemy_soundf(e, NWAV_CHIME2, 1400 + grand(50)); break; case ENEMY_SPIKEY3: btype = BULLET_CIRCLES2; damage = 150; timer = 120; timer_rand = 30; mass = 50; speed = 7000; firing_distance = 4000; enemy[e].recycle = 150; speed_div = 3; multiple = 3; angle_increment = ANGLE_1_32; colours [0] = COLOUR_YELLOW8; recoil = 150; size = 5000; enemy_soundf(e, NWAV_CHIME2, 1000 + grand(50)); break; case ENEMY_SPIKEY2: btype = BULLET_BLOCKS; damage = 200; timer = 120; timer_rand = 30; mass = 25; speed = 7000 + grand(2000); firing_distance = 9000; speed_div = 3; multiple = 1; colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_DGREEN; colours [3] = TRANS_DGREY; // angle_increment = ANGLE_1_32; // colours [0] = COLOUR_YELLOW8; recoil = 150; size = 4000; /* if (enemy[e].burst_fire > 0) { enemy[e].recycle = 16; enemy[e].burst_fire --; } else { enemy[e].recycle = 160; enemy[e].burst_fire = 3 + grand(3); // also in creation }*/ enemy[e].recycle = 80; enemy_soundf(e, NWAV_BLOCK, 900 + grand(100)); break; case ENEMY_SPIKEY5: btype = BULLET_THICK_SHOCK; damage = 300; timer = 120; timer_rand = 30; mass = 50; speed = 13000; firing_distance = 6000; enemy[e].recycle = 180; speed_div = 3; multiple = 1; angle_increment = 0;//ANGLE_1_32; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; /* colours [0] = COLOUR_YELLOW8; colours [1] = COLOUR_YELLOW7; colours [2] = COLOUR_YELLOW5; colours [3] = COLOUR_YELLOW3;*/ recoil = 350; size = 6000; enemy_soundf(e, NWAV_BLOCK, 200 + grand(50)); break; case ENEMY_SPIKEY4: btype = BULLET_WINGS1; damage = 1; timer = 30; timer_rand = 0; mass = 20; speed = 1200; firing_distance = 6000; enemy[e].recycle = 40; speed_div = 3; multiple = 1; angle_increment = 0;//ANGLE_1_32; recoil = 1; size = 2000; special1 = closest_target(enemy[e].x, enemy[e].y); angle_rand = ANGLE_FULL; break; case ENEMY_FORKER1: btype = BULLET_FORK2; damage = 150; timer = 20; timer_rand = 10; mass = 20; speed = 5000; firing_distance = 15000; enemy[e].recycle = 55; speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = COLOUR_GREY3; colours [1] = COLOUR_GREY4; colours [2] = COLOUR_GREY6; colours [3] = COLOUR_WHITE; recoil = 500; // size = 1000; special1 = COLOUR_WHITE; enemy_soundf(e, NWAV_BLOCK, 500 + grand(50)); break; case ENEMY_FORKER2: btype = BULLET_FORK1; damage = 150; timer = 10; timer_rand = 20; mass = 20; speed = 6000; firing_distance = 15000; enemy[e].recycle = 50; speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = COLOUR_BLUE5; colours [1] = COLOUR_BLUE8; colours [2] = COLOUR_GREY6; colours [3] = COLOUR_WHITE; recoil = 500; // size = 1000; special1 = COLOUR_WHITE; enemy_soundf(e, NWAV_BLOCK, 500 + grand(50)); break; case ENEMY_MINEFIELDER1: btype = BULLET_MINE1; damage = 1; timer = 500; timer_rand = 100; mass = 30; speed = 10000; speed_rand = 7000; firing_distance = 14000; enemy[e].recycle = 35; speed_div = 3; multiple = 1; angle_increment = 0; angle_rand = ANGLE_FULL; // colours [0] = COLOUR_YELLOW8; recoil = 50; size = MINE_SIZE; colours_for_cloud [0] = TRANS_LRED; colours_for_cloud [1] = TRANS_ORANGE; colours_for_cloud [2] = TRANS_YELLOW; enemy_soundf(e, NWAV_SPLERK, 900 + grand(100)); break; case ENEMY_MINER1: btype = BULLET_MINE1; damage = 1; timer = 300; timer_rand = 100; mass = 30; speed = 7000; speed_rand = 5000; firing_distance = 11000; enemy[e].recycle = 35; speed_div = 3; multiple = 1; angle_increment = 0; angle_rand = ANGLE_FULL; // colours [0] = COLOUR_YELLOW8; recoil = 200; size = MINE_SIZE; colours_for_cloud [0] = TRANS_LRED; colours_for_cloud [1] = TRANS_ORANGE; colours_for_cloud [2] = TRANS_YELLOW; enemy_soundf(e, NWAV_SPLERK, 900 + grand(100)); break; case ENEMY_MINER2: btype = BULLET_MINE2; damage = 1; timer = 300; timer_rand = 100; mass = 30; speed = 7000; speed_rand = 6000; firing_distance = 11000; enemy[e].recycle = 35; speed_div = 3; multiple = 1; angle_increment = 0; angle_rand = ANGLE_FULL; // colours [0] = COLOUR_YELLOW8; recoil = 200; size = MINE_SIZE; colours_for_cloud [0] = TRANS_DRED; colours_for_cloud [1] = TRANS_LRED; colours_for_cloud [2] = TRANS_ORANGE; enemy_soundf(e, NWAV_SPLERK, 500 + grand(50)); break; case ENEMY_MINER3: btype = BULLET_MINE3; damage = 1; timer = 300; timer_rand = 100; mass = 30; speed = 7000; speed_rand = 6000; firing_distance = 11000; enemy[e].recycle = 35; speed_div = 3; multiple = 1; angle_increment = 0; angle_rand = ANGLE_FULL; // colours [0] = COLOUR_YELLOW8; recoil = 200; size = MINE_SIZE; colours_for_cloud [0] = TRANS_ORANGE; colours_for_cloud [1] = TRANS_YELLOW; colours_for_cloud [2] = TRANS_WHITE; enemy_soundf(e, NWAV_SPLERK, 1100 + grand(40)); break; case ENEMY_MINER3_TURRET: btype = BULLET_BLUE_BLAT; damage = 50; timer = 30; timer_rand = 15; mass = 10; speed = 10000; firing_distance = 10000; speed_div = 3; multiple = 1; colours_for_cloud [0] = TRANS_DBLUE; colours_for_cloud [1] = TRANS_LBLUE; colours_for_cloud [2] = TRANS_WHITE; recoil = 300; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 7; enemy[e].burst_fire --; enemy[e].attribute [0] = 7; } else { enemy[e].recycle = 90; enemy[e].burst_fire = 4 + grand(4); // also in creation enemy[e].attribute [0] = 7; } scatter = 64; enemy_soundf(e, NWAV_GBLAT, 1500); break; case ENEMY_BOSS1_1: btype = BULLET_BALL1; damage = 150; timer = 40; timer_rand = 20; mass = 10; speed = 5000; firing_distance = 56000; enemy[e].recycle = 65; speed_div = 3; multiple = 8; angle_increment = ANGLE_1_EIGHTH; angle -= ANGLE_QUARTER; recoil = 0; size = 3000; enemy_soundf(e, NWAV_BALL1, 300 + grand(30)); break; case ENEMY_BOSS1_2: btype = BULLET_SEEKER1; damage = DAM_SMALL_GREEN_SEEKER; timer = 100; timer_rand = 50; mass = 50; speed = 7000; firing_distance = 41000; enemy[e].recycle = 33; speed_div = 3; multiple = 1; colourise_bullet(colours, COLOURISE_GREEN_SEEKER1); colours_for_cloud [0] = TRANS_DGREEN; colours_for_cloud [1] = TRANS_LGREEN; colours_for_cloud [2] = TRANS_YELLOW; recoil = 5; special1 = closest_target(enemy[e].x, enemy[e].y); special2 = 30; special3 = 32; special4 = 100; special5 = 4001; angle = grand(ANGLE_FULL); enemy_soundf(e, NWAV_SEEKER, 700 + grand(150)); break; case ENEMY_BOSS1_3: btype = BULLET_BOLT; damage = 150; timer = 60; timer_rand = 20; mass = 100; speed = 8000; // speed_rand = 3000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; colours_for_cloud [0] = TRANS_DRED; colours_for_cloud [1] = TRANS_LRED; colours_for_cloud [2] = TRANS_YELLOW; firing_distance = 35000; // enemy[e].recycle = 6 + grand(4); enemy[e].recycle = 55; speed_div = 3; multiple = 1; // angle_increment = enemy[e].attribute [0] - enemy[e].angle; size = 2000; recoil = 2000; enemy_sound_fire(e, NWAV_BURSTZ, 1200, 150, firing_distance); break; case ENEMY_BOSS1_TURRET1: btype = BULLET_BALL1; damage = 150; timer = 40; timer_rand = 20; mass = 10; speed = 5000; firing_distance = 9000; enemy[e].recycle = 100; speed_div = 3; multiple = 3; angle_increment = ANGLE_1_EIGHTH; angle -= ANGLE_1_EIGHTH; recoil = 100; size = 3000; enemy_soundf(e, NWAV_MULTI, 300 + grand(10)); break; case ENEMY_BOSS1_TURRET2: btype = BULLET_CIRCLES2; damage = 150; timer = 120; timer_rand = 30; mass = 50; speed = 5000; firing_distance = 9000; enemy[e].recycle = 100; speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = COLOUR_YELLOW8; recoil = 100; size = 5000; enemy_soundf(e, NWAV_CHIME2, 1200 + grand(50)); break; case ENEMY_BOSS1_TURRET3: btype = BULLET_BALL2; damage = 200; timer = 45; timer_rand = 20; mass = 10; speed = 5500; firing_distance = 9000; enemy[e].recycle = 55; speed_div = 3; multiple = 1; recoil = 100; size = 3000; enemy_soundf(e, NWAV_BALL1, 800 + grand(30)); break; case ENEMY_BOSS2: btype = BULLET_BOLT; damage = 250; timer = 60; timer_rand = 20; mass = 100; speed = 5000; speed_rand = 3000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_LGREEN; colours [3] = TRANS_DGREEN; colours_for_cloud [0] = TRANS_DGREEN; colours_for_cloud [1] = TRANS_LGREEN; colours_for_cloud [2] = TRANS_YELLOW; firing_distance = 35000; // enemy[e].recycle = 6 + grand(4); enemy[e].recycle = 21 + grand(6); speed_div = 3; multiple = 2; angle_increment = enemy[e].attribute [0] - enemy[e].angle; size = 1000; recoil = 100; enemy_soundvf(e, NWAV_BURSTZ, 190, 1500); break; case ENEMY_BOSS2_2: enemy[e].attribute [0] ++; if (enemy[e].attribute [0] >= 60) { btype = BULLET_CHARGE; damage = 1; timer = 60; timer_rand = 20; mass = 100; speed = 21000; // speed_rand = 3000; colours [0] = TRANS_WHITE; colours [1] = TRANS_LBLUE; colours [2] = TRANS_DBLUE; colours [3] = TRANS_DGREY; colours_for_cloud [0] = TRANS_DBLUE; colours_for_cloud [1] = TRANS_LBLUE; colours_for_cloud [2] = TRANS_WHITE; /* colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_DGREEN; colours [3] = TRANS_DGREY; colours_for_cloud [0] = TRANS_DGREEN; colours_for_cloud [1] = TRANS_LGREEN; colours_for_cloud [2] = TRANS_YELLOW;*/ firing_distance = 35000; // enemy[e].recycle = 6 + grand(4); enemy[e].recycle = 99; enemy[e].attribute [0] = 0; speed_div = 3; size = 13000; recoil = 2900; line_blast(enemy[e].x + xpart(enemy[e].angle, firing_distance), enemy[e].y + ypart(enemy[e].angle, firing_distance), BULLET_CHARGE_LINE, e); enemy_sound_fire(e, NWAV_BURSTZL, 500, 255, firing_distance); } else { if (enemy[e].attribute [0] % 5 == 0) enemy_sound_fire(e, NWAV_SZAP, 50 + enemy[e].attribute [0] * 1, 100, 35000); if (enemy[e].attribute [0] <= 32)// && grand(2) == 0) { btype = BULLET_CHARGE_LINE; damage = 0;//DAM_WORMS1; timer = 80; timer_rand = 30; mass = 1; speed = 0;//12000; firing_distance = 5000 + grand(120000); enemy[e].recycle = 1; speed_div = 3; multiple = 1; // angle = grand(ANGLE_FULL); // displaced = grand(110); // displace_series [0] = 1; // angle_increment = 102;//ANGLE_1_SIXTEENTH; colours [0] = TRANS_DBLUE; colours [1] = TRANS_LBLUE; colours [2] = TRANS_LBLUE; colours [3] = TRANS_WHITE; /* colours [0] = TRANS_DGREEN; colours [1] = TRANS_DGREEN; colours [2] = TRANS_LGREEN; colours [3] = TRANS_YELLOW;*/ recoil = 0; enemy[e].recycle = 1; special2 = e; scatter = ANGLE_HALF; } else return; } break; case ENEMY_BOSS3_2: btype = BULLET_NOVA; damage = 0; // uses blast for damage timer = 200; // timer_rand = 20; mass = 100; speed = 25000; speed_rand = 10000; colours [3] = TRANS_YELLOW; // used for hole lines colours [2] = TRANS_ORANGE; colours [1] = TRANS_LRED; colours [0] = TRANS_DRED; /* colours_for_cloud [0] = TRANS_DGREEN; colours_for_cloud [1] = TRANS_LGREEN; colours_for_cloud [2] = TRANS_YELLOW;*/ firing_distance = 35000; // enemy[e].recycle = 6 + grand(4); enemy[e].recycle = 350; speed_div = 3; // multiple = 2; // angle_increment = enemy[e].attribute [0] - enemy[e].angle; size = 1000; recoil = 3500; enemy_sound_fire(e, NWAV_BURSTZL, 300, 255, firing_distance); break; case ENEMY_BOSS3_3: btype = BULLET_SWIRL1; damage = 250; timer = 150; timer_rand = 0; mass = 120; speed = 4500 + grand(3000); size = 5000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; firing_distance = -35000; enemy[e].recycle = 152; // should only have 1 swirl1 at once speed_div = 3; recoil = 1200; enemy[e].attribute [0] = 16; enemy_sound_fire(e, NWAV_BURSTZL, 400, 255, firing_distance); break; case ENEMY_BOSS2_TURRET1: btype = BULLET_BIGBALL1; damage = 250; timer = 50; timer_rand = 30; mass = 80; speed = 5000; size = 4000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; firing_distance = 13000; enemy[e].recycle = 60; speed_div = 3; recoil = 600; special1 = 5; // radius of circle special2 = 7; // radius of outer circle enemy_soundf(e, NWAV_BALL1, 100 + grand(10)); break; case ENEMY_BOSS2_TURRET2: btype = BULLET_ZAP_DRAG; damage = 100; timer = 30; timer_rand = 10; mass = 10; speed = 9000; firing_distance = 12000; speed_div = 3; multiple = 1; colours [0] = COLOUR_BLUE8; colours [1] = COLOUR_BLUE7; colours [2] = COLOUR_BLUE6; colours [3] = COLOUR_BLUE4; recoil = 0; scatter = ANGLE_1_32; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 8; enemy[e].burst_fire --; } else { enemy[e].recycle = 90; enemy[e].burst_fire = 6 + grand(5); // also in creation } special1 = -2; enemy_soundf(e, NWAV_SZAP, 1000 + grand(50)); break; case ENEMY_BOSS2_TURRET4: btype = BULLET_BFLAK; damage = 50; timer = 30; timer_rand = 3; if (enemy[e].attacking != ATTACK_NONE && actor[enemy[e].attacking].in_play == 1) { timer = hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x); timer /= 7000; // timer = t / 7; if (timer < 5) timer = 5; if (timer > 45) timer = 45; } mass = 10; speed = 12000; colours_for_cloud [0] = TRANS_WHITE; colours_for_cloud [1] = TRANS_PURPLE; colours_for_cloud [2] = TRANS_LBLUE; firing_distance = 14000; enemy[e].recycle = 85; speed_div = 3; enemy[e].attribute [0] = 56; enemy_soundf(e, NWAV_DNO, 300 + grand(100)); break; case ENEMY_BOSS3_TURRET2: btype = BULLET_ZAP_DRAG; damage = 100; timer = 30; timer_rand = 10; mass = 10; speed = 12000; firing_distance = 6000; speed_div = 3; multiple = 1; colours [0] = COLOUR_BLUE8; colours [1] = COLOUR_BLUE7; colours [2] = COLOUR_BLUE6; colours [3] = COLOUR_BLUE4; recoil = 0; scatter = ANGLE_1_32; displaced = 7; displace_series [0] = -1; if (enemy[e].burst_fire % 2 == 0) displace_series [0] = 1; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 4; enemy[e].burst_fire --; } else { enemy[e].recycle = 90; enemy[e].burst_fire = 6 + grand(5); // also in creation } special1 = -1; enemy_soundf(e, NWAV_SZAP, 700 + grand(50)); break; case ENEMY_BOSS3_TURRET1: btype = BULLET_BLAST; damage = 250; timer = 60; timer_rand = 20; mass = 40; speed = 6000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_DGREEN; colours [3] = TRANS_DGREY; firing_distance = 11000; enemy[e].recycle = 100; speed_div = 3; multiple = 3; angle_increment = ANGLE_1_SIXTEENTH; angle -= ANGLE_1_SIXTEENTH;//(ANGLE_1_SIXTEENTH + ANGLE_1_32); enemy_soundf(e, NWAV_MULTI, 500 + grand(10)); // recoil = 1800; size = 2000; enemy_soundf(e, NWAV_LZAP, 900 + grand(100)); break; case ENEMY_BOSS3_TURRET3: btype = BULLET_BFLAK2; damage = 1; timer = 50; timer_rand = 25; /* if (enemy[e].attacking != ATTACK_NONE && actor[enemy[e].attacking].in_play == 1) { timer = hypot(enemy[e].y - actor[enemy[e].attacking].y, enemy[e].x - actor[enemy[e].attacking].x); timer /= 7000; // timer = t / 7; if (timer < 5) timer = 5; if (timer > 45) timer = 45; }*/ colours [0] = COLOUR_YELLOW8; colours [1] = COLOUR_YELLOW6; colours [2] = COLOUR_ORANGE6; colours [3] = COLOUR_RED5; mass = 10; speed = 12000; colours_for_cloud [0] = TRANS_WHITE; colours_for_cloud [1] = TRANS_YELLOW; colours_for_cloud [2] = TRANS_ORANGE; firing_distance = 16000; enemy[e].recycle = 60; speed_div = 3; enemy[e].attribute [0] = 56; enemy_soundf(e, NWAV_DNO, 150 + grand(50)); break; case ENEMY_DEFENDER1: btype = BULLET_BIGBALL1; damage = 200; timer = 120; timer_rand = 20; mass = 150; speed = 2500; size = 6000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_DGREEN; colours [3] = TRANS_DGREY; firing_distance = 23000; enemy[e].recycle = 43; speed_div = 3; recoil = 600; special1 = 6; // radius of circle special2 = 8; // radius of outer circle // enemy_soundf(e, NWAV_LZAP, 300 + grand(10)); enemy_soundf(e, NWAV_BALL1, 100 + grand(10)); break; case ENEMY_DEFENDER1_TURRET1: btype = BULLET_BALL1; damage = 150; timer = 40; timer_rand = 20; mass = 10; speed = 5000; firing_distance = 9000; enemy[e].recycle = 120; speed_div = 3; multiple = 3; angle_increment = ANGLE_1_EIGHTH; angle -= ANGLE_1_EIGHTH; recoil = 100; size = 3000; enemy_soundf(e, NWAV_MULTI, 300 + grand(10)); break; case ENEMY_DEFENDER1_TURRET2: btype = BULLET_BALL2; damage = 200; timer = 45; timer_rand = 20; mass = 10; speed = 5500; firing_distance = 9000; enemy[e].recycle = 65; speed_div = 3; multiple = 1; recoil = 100; size = 3000; enemy_soundf(e, NWAV_BALL1, 800 + grand(30)); break; case ENEMY_DEFENDER1_TURRET3: btype = BULLET_BALL1; damage = 150; timer = 40; timer_rand = 20; mass = 10; speed = 5000; firing_distance = 9000; enemy[e].recycle = 21; speed_div = 3; recoil = 100; size = 3000; enemy_soundf(e, NWAV_BALL1, 800 + grand(30)); break; case ENEMY_DEFENDER2: btype = BULLET_BIGBALL1; damage = 300; timer = 120; timer_rand = 20; mass = 200; speed = 3500; size = 9000; colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; firing_distance = 23000; enemy[e].recycle = 40; speed_div = 3; recoil = 600; special1 = 9; // radius of circle special2 = 11; // radius of outer circle // enemy_soundf(e, NWAV_LZAP, 200 + grand(10)); enemy_soundf(e, NWAV_BALL1, 80 + grand(10)); break; case ENEMY_DEFENDER3: btype = BULLET_BIGBALL1; damage = 400; timer = 120; timer_rand = 20; mass = 250; speed = 4000; size = 12000; colours [0] = TRANS_WHITE; colours [1] = TRANS_LBLUE; colours [2] = TRANS_DBLUE; colours [3] = TRANS_DGREY; firing_distance = 23000; enemy[e].recycle = 38; speed_div = 3; recoil = 600; special1 = 12; // radius of circle special2 = 15; // radius of outer circle // enemy_soundf(e, NWAV_LZAP, 150 + grand(10)); enemy_soundf(e, NWAV_BALL1, 70 + grand(5)); break; case ENEMY_DEFENDER3_TURRET3: btype = BULLET_SLIVER; damage = 100; timer = 30; timer_rand = 23; mass = 10; speed = 3500; speed_rand = 1000; // enemy[e].recycle = 50; // colours_for_cloud [0] = TRANS_DRED; // colours_for_cloud [1] = TRANS_LRED; // colours_for_cloud [2] = TRANS_YELLOW; colours [0] = TRANS_YELLOW; colours [1] = COLOUR_YELLOW8; speed_div = 3; /* switch(enemy[e].attribute [0]) { default: case 0: firing_distance = 12000; break; case 1: displaced = 12; displace_series [0] = 1; break; case 2: firing_distance = -12000; break; case 3: displaced = 12; displace_series [0] = -1; break; }*/ firing_distance = 12000; if (enemy[e].attribute [2] > 0) { enemy[e].attribute [0] --; if (enemy[e].attribute [0] == -1) enemy[e].attribute [0] = 3; } else { enemy[e].attribute [0] ++; if (enemy[e].attribute [0] >= 4) enemy[e].attribute [0] = 0; } /* special1 = grand(ANGLE_FULL); special2 = -100; if (grand(2) == 0) special2 = 100;*/ special_angle2 = enemy[e].attribute [1] + enemy[e].attribute [0] * ANGLE_QUARTER; special_angle = angle; special2 = grand(2); // special_angle = angle; // special_angle2 = enemy[e].attribute [1]; // angle = enemy[e].attribute [1]; enemy[e].recycle = 5; enemy_sound(e, NWAV_CLICK); break; case ENEMY_DEFENDER3_TURRET5: btype = BULLET_BALL2; damage = 200; timer = 65; timer_rand = 20; mass = 10; speed = 3500; firing_distance = 12000; enemy[e].recycle = 22; speed_div = 3; multiple = 2; angle_increment = ANGLE_HALF; recoil = 100; size = 3000; enemy_soundf(e, NWAV_MULTI, 900 + grand(10)); break; case ENEMY_DEFENDER3_TURRET6: btype = BULLET_ZIGZAG1; damage = 200; timer = 19; timer_rand = 5; mass = 20; speed = 12000; firing_distance = 12000; enemy[e].recycle = 35; speed_div = 3; multiple = 1; angle_increment = 0; colours [0] = COLOUR_ORANGE4; colours [1] = COLOUR_ORANGE6; colours [2] = COLOUR_YELLOW6; colours [3] = COLOUR_YELLOW8; recoil = 100; enemy[e].attribute [0] = 7; special1 = 4000; size = 2000; enemy_soundf(e, NWAV_BLOCK, 1900 + grand(100)); break; /* btype = BULLET_ZAP_DRAG; damage = 100; timer = 27; // timer_rand = 12; mass = 10; speed = 13000; // speed_rand = 7000; firing_distance = 12000; enemy[e].recycle = 55; colours [0] = COLOUR_YELLOW8; colours [1] = COLOUR_YELLOW7; colours [2] = COLOUR_ORANGE7; colours [3] = COLOUR_RED6; speed_div = 3; multiple = 8; // scatter = ANGLE_1_SIXTEENTH; angle_increment = ANGLE_1_32; angle -= ANGLE_1_EIGHTH; recoil = 500; break;*/ /* case ENEMY_STINGER2: btype = BULLET_STING; damage = 150; timer = 30; timer_rand = 20; mass = 10; speed = 3000; colours [0] = GC_YELLOW8; colours [1] = GC_YELLOW6; colours [2] = GC_YELLOW4; colours [3] = GC_YELLOW2; firing_distance = 4000; speed_div = 5; if (enemy[e].burst_fire > 0) { enemy[e].recycle = 15; enemy[e].burst_fire --; } else { enemy[e].recycle = 120; enemy[e].burst_fire = 4 + grand(4); } break; case ENEMY_STINGER3: btype = BULLET_STING; damage = 150; timer = 20; timer_rand = 15; mass = 10; speed = 4000; // colours [0] = GC_RED8; // colours [1] = GC_RED6; // colours [2] = GC_RED4; // colours [3] = GC_RED2; colours [0] = GC_WHITE; colours [1] = GC_RED8; colours [2] = GC_RED5; colours [3] = GC_RED3; firing_distance = 4000; speed_div = 4; enemy[e].recycle = 66; multiple = 3; angle_increment = ANGLE_1_SIXTEENTH; angle -= ANGLE_1_SIXTEENTH; enemy_soundf(e, ESOUND_STING, 900 + grand(400)); break;*/ default: return; } // float cos_angle; // float sin_angle; int xs; int ys; int x; int y; int i; for (i = 0; i < multiple; i ++) { /* firing_angle = angle + i * angle_increment; cos_angle = cos(angle_to_radians(firing_angle)); sin_angle = sin(angle_to_radians(firing_angle)); xs = enemy[e].x_speed + cos_angle * speed; ys = enemy[e].y_speed + sin_angle * speed; x = enemy[e].x + cos_angle * firing_distance; y = enemy[e].y + sin_angle * firing_distance; */ firing_angle = angle + i * angle_increment + grand(angle_rand * 2) - angle_rand + grand(scatter) - grand(scatter); // cos_angle = cos(angle_to_radians(firing_angle)); // sin_angle = sin(angle_to_radians(firing_angle)); if (special_angle != -1) // overblatter, some others { if (special_angle2 != -1) firing_angle = special_angle2; x = enemy[e].x + xpart(firing_angle, firing_distance); y = enemy[e].y + ypart(firing_angle, firing_distance); if (displaced != 0) { x += xpart(firing_angle + (ANGLE_QUARTER * displace_series [i]), GRAIN * displaced); y += ypart(firing_angle + (ANGLE_QUARTER * displace_series [i]), GRAIN * displaced); } firing_angle = special_angle; xs = enemy[e].x_speed + xpart(firing_angle, speed + grand(speed_rand)); ys = enemy[e].y_speed + ypart(firing_angle, speed + grand(speed_rand)); if (special_angle2 == -1) { x += xpart(firing_angle, firing_distance); y += ypart(firing_angle, firing_distance); } } else { xs = enemy[e].x_speed + xpart(firing_angle, speed + grand(speed_rand)); ys = enemy[e].y_speed + ypart(firing_angle, speed + grand(speed_rand)); x = enemy[e].x + xpart(firing_angle, firing_distance); y = enemy[e].y + ypart(firing_angle, firing_distance); if (displaced != 0) { // x += cos(angle_to_radians(firing_angle + (ANGLE_QUARTER * displace_series [i]))) * GRAIN * displaced; // y += sin(angle_to_radians(firing_angle + (ANGLE_QUARTER * displace_series [i]))) * GRAIN * displaced; x += xpart(firing_angle + (ANGLE_QUARTER * displace_series [i]), GRAIN * displaced); y += ypart(firing_angle + (ANGLE_QUARTER * displace_series [i]), GRAIN * displaced); } } /* // Note: recoil is added for every single bullet fired, // so make it low for multiple bullets if (recoil != 0) { accelerate_enemy(e, firing_angle + ANGLE_HALF, recoil); } */ switch(btype) { case BULLET_DISRUPT2: colours [0] = TRANS_REVERSE; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, 0, 0, 1000, -9, 3, 0, 0, 0, colours); break; case BULLET_DISRUPT3: colours [0] = TRANS_DARKEN; create_cloud(CLOUD_MED_TRANS_CIRCLE, x, y, 0, 0, 0, 0, 1000, -9, 3, 0, 0, 0, colours); break; case BULLET_DISRUPT1: create_cloud(CLOUD_DISTORT, x, y, 0, 0, 0, 0, 1000, -9, 3, 0, 0, 0, colours); break; } switch(enemy[e].type) { case ENEMY_DEFENDER3: create_cloud(CLOUD_BLAST_CIRCLE, x, y, 0, 0, enemy[e].x_speed + xpart(enemy[e].angle - ANGLE_HALF + ANGLE_1_EIGHTH, 13000), enemy[e].y_speed + ypart(enemy[e].angle - ANGLE_HALF + ANGLE_1_EIGHTH, 13000), 200 + grand(10), 10, 0, 0, 0, 0, colours); create_cloud(CLOUD_BLAST_CIRCLE, x, y, 0, 0, enemy[e].x_speed + xpart(enemy[e].angle - ANGLE_HALF - ANGLE_1_EIGHTH, 13000), enemy[e].y_speed + ypart(enemy[e].angle - ANGLE_HALF - ANGLE_1_EIGHTH, 13000), 200 + grand(10), 10, 0, 0, 0, 0, colours); case ENEMY_DEFENDER1: case ENEMY_DEFENDER2: case ENEMY_BOSS2_TURRET1: create_cloud(CLOUD_BLAST_CIRCLE, x, y, 0, 0, enemy[e].x_speed + xpart(enemy[e].angle + ANGLE_QUARTER, 9000), enemy[e].y_speed + ypart(enemy[e].angle + ANGLE_QUARTER, 9000), 200 + grand(10), 10, 0, 0, 0, 0, colours); create_cloud(CLOUD_BLAST_CIRCLE, x, y, 0, 0, enemy[e].x_speed + xpart(enemy[e].angle - ANGLE_QUARTER, 9000), enemy[e].y_speed + ypart(enemy[e].angle - ANGLE_QUARTER, 9000), 200 + grand(10), 10, 0, 0, 0, 0, colours); create_cloud(CLOUD_BLAST_CIRCLE, x, y, 0, 0, enemy[e].x_speed + xpart(enemy[e].angle - ANGLE_HALF, 9000), enemy[e].y_speed + ypart(enemy[e].angle - ANGLE_HALF, 9000), 200 + grand(10), 10, 0, 0, 0, 0, colours); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 1200); break; case ENEMY_OVERSPINNER: create_cloud(CLOUD_BLAST_CIRCLE, x, y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 400 + grand(10), 10, 2, 0, 0, 0, colours); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 800); break; case ENEMY_OVERSPIKEY: create_cloud(CLOUD_BLAST_CIRCLE, x, y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 200 + grand(10), 10, 2, 0, 0, 0, colours); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 400); break; case ENEMY_WORMER1: case ENEMY_WORMER2: case ENEMY_WORMER3: case ENEMY_WORMER4: if (i == 0) simple_light(enemy[e].x, enemy[e].y, enemy[e].x_speed, enemy[e].y_speed, 900); // NOT x,y, because then it won't be centred simple_cloud_trans(TRANS_YELLOW, x, y, enemy[e].x_speed, enemy[e].y_speed, 320); // if (grand(2) == 0) // special2 *= -1; // special3 = 3 + grand(3); break; case ENEMY_DISRUPTER2: case ENEMY_DISRUPTER3: simple_cloud_trans(colours_for_cloud [0], x, y, 0, 0, 520); break; case ENEMY_BOMBER2: if (i != 0) break; case ENEMY_BOMBER1: colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; create_cloud(CLOUD_TRANS_FADING_CIRCLE, x, y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 50, -9, 3, 0, 0, 0, colours); break; case ENEMY_LEAPER1: case ENEMY_FIGHTER1: case ENEMY_SPIKEY4: case ENEMY_CRUISER1: case ENEMY_CRUISER3: // case ENEMY_CRUISER2_TURRET: colours [0] = TRANS_YELLOW; colours [1] = TRANS_ORANGE; colours [2] = TRANS_LRED; colours [3] = TRANS_DRED; create_cloud(CLOUD_TRANS_FADING_CIRCLE, x, y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 30, -9, 3, 0, 0, 0, colours); break; case ENEMY_CRUISER3_TURRET: create_cloud(CLOUD_SMALL_CIRCLE, x, y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 530, 150, 50, 0, 0, 0, colours); break; case ENEMY_BOMBER3: case ENEMY_BOSS2_TURRET2: case ENEMY_BOSS3_TURRET2: colours [0] = TRANS_WHITE; colours [1] = TRANS_LBLUE; colours [2] = TRANS_DBLUE; colours [3] = TRANS_DBLUE; create_cloud(CLOUD_TRANS_FADING_CIRCLE, x, y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 30, -9, 3, 0, 0, 0, colours); break; case ENEMY_CRUISER1_TURRET: case ENEMY_CRUISER2_TURRET: case ENEMY_DEFENDER2_TURRET3: case ENEMY_CRUISER4_TURRET: place_burstlet_burst(x, y, enemy[e].x_speed, enemy[e].y_speed, 2 + grand(2), 2, 2, 1000, 1500, 1, colours_for_cloud); simple_light(x, y, 0, 0, 400); //simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 400); break; case ENEMY_DEFENDER2_TURRET1: case ENEMY_DEFENDER2_TURRET2: // case ENEMY_DEFENDER2_TURRET3: case ENEMY_BRACKET1: case ENEMY_BRACKET2: case ENEMY_BRACKET3: case ENEMY_BRACKET4: case ENEMY_BRACKET5: case ENEMY_BLATTER1: case ENEMY_LEAPER2: case ENEMY_DEFENDER3_TURRET3: colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_DGREEN; colours [3] = TRANS_DGREEN; create_cloud(CLOUD_TRANS_FADING_CIRCLE, x, y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 30, -9, 3, 0, 0, 0, colours); // 300, -100, 40, 0, 0, 0, colours); break; case ENEMY_BLATTER5: if (i > 0) break; colours [0] = TRANS_YELLOW; colours [1] = TRANS_LGREEN; colours [2] = TRANS_DGREEN; colours [3] = TRANS_DGREEN; create_cloud(CLOUD_TRANS_FADING_CIRCLE, x, y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 80, -9, 3, 0, 0, 0, colours); break; case ENEMY_FIGHTER2: case ENEMY_MINER3_TURRET: colours [0] = TRANS_WHITE; colours [1] = TRANS_LBLUE; colours [2] = TRANS_DBLUE; colours [3] = TRANS_DBLUE; create_cloud(CLOUD_TRANS_FADING_CIRCLE, x, y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 30, -9, 3, 0, 0, 0, colours); break; case ENEMY_HEAD1: case ENEMY_HEAD1_EYE1: case ENEMY_HEAD1_EYE2: case ENEMY_HEAD1_EYE3: case ENEMY_BRACKET4_TURRET: case ENEMY_SHADOW1: simple_cloud_trans(TRANS_YELLOW, x, y, enemy[e].x_speed, enemy[e].y_speed, 320); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 320); break; case ENEMY_SPINNER1: case ENEMY_SPINNER2: case ENEMY_SPINNER4: simple_cloud(COLOUR_GREEN8, x, y, enemy[e].x_speed, enemy[e].y_speed, 520); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 520); break; case ENEMY_SPINNER3: simple_cloud(COLOUR_BLUE8, x, y, enemy[e].x_speed, enemy[e].y_speed, 720); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 720); break; case ENEMY_SPINNER5: simple_cloud(COLOUR_YELLOW8, x, y, enemy[e].x_speed, enemy[e].y_speed, 520); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 520); break; case ENEMY_FORKER1: case ENEMY_FORKER2: simple_cloud(COLOUR_WHITE, x, y, enemy[e].x_speed, enemy[e].y_speed, 520); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 520); break; case ENEMY_OVERBLATTER: if (i != 0) break; case ENEMY_BOSS1_1: case ENEMY_GUARDIAN1: case ENEMY_OVERTRIANGLER_TURRET: case ENEMY_DEFENDER3_TURRET4: case ENEMY_BLATTER2: case ENEMY_BLATTER3: case ENEMY_BOSS1_TURRET1: case ENEMY_BOSS1_TURRET3: case ENEMY_DEFENDER1_TURRET1: case ENEMY_DEFENDER1_TURRET2: case ENEMY_DEFENDER1_TURRET3: case ENEMY_DEFENDER3_TURRET5: case ENEMY_MULTI1: case ENEMY_CURVE1: case ENEMY_BOSS2_TURRET3: case ENEMY_DEFENDER3_TURRET6: // if (i == 0) { simple_cloud_trans(TRANS_YELLOW, x, y, enemy[e].x_speed, enemy[e].y_speed, 550); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 550); } break; case ENEMY_BLATTER4: simple_cloud_trans(colours [1], x, y, enemy[e].x_speed, enemy[e].y_speed, 550); simple_cloud_trans(colours [0], x, y, enemy[e].x_speed, enemy[e].y_speed, 350); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 550); break; case ENEMY_GUARDIAN3: create_cloud(CLOUD_TWISTY_CIRCLE, x, y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 50, 1, 0, enemy[e].angle, special2, 0, colours); break; case ENEMY_GUARDIAN5: create_cloud(CLOUD_TWIRLY_CIRCLE, x, y, 0, 0, enemy[e].x_speed, enemy[e].y_speed, 50, 1, 0, enemy[e].angle, special2, 0, colours); break; case ENEMY_GUARDIAN4: case ENEMY_GUARDIAN2: case ENEMY_MULTI2: case ENEMY_MULTI3: case ENEMY_BOSS3_TURRET1: // if (i == 0) { simple_cloud_trans(TRANS_YELLOW, x, y, enemy[e].x_speed, enemy[e].y_speed, 950); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 550); } break; case ENEMY_BOSS1_3: case ENEMY_BOSS2: case ENEMY_TRIANGLER1: simple_cloud_trans(TRANS_YELLOW, x, y, enemy[e].x_speed, enemy[e].y_speed, 1150); // case ENEMY_BOSS2_TURRET1: case ENEMY_BOSS1_2: case ENEMY_MINEFIELDER1: case ENEMY_MINER1: case ENEMY_MINER2: case ENEMY_MINER3: case ENEMY_PUFFER1: case ENEMY_PUFFER2: case ENEMY_PUFFER3: case ENEMY_PUFFER4: case ENEMY_PULSER1: case ENEMY_PULSER2: place_burstlet_burst(x, y, 0, 0, 3 + grand(3), 4, 2, 1000, 1500, 4, colours_for_cloud); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 900); // if (i == 0) // { // simple_cloud_trans(TRANS_ORANGE, x, y, enemy[e].x_speed, enemy[e].y_speed, 550); // simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 550); // } break; case ENEMY_BOSS2_3: simple_cloud_trans(TRANS_YELLOW, x, y, enemy[e].x_speed, enemy[e].y_speed, 2000); simple_cloud_trans(TRANS_LGREEN, x, y, enemy[e].x_speed, enemy[e].y_speed, 2550); place_burstlet_burst(x, y, 0, 0, 3 + grand(3), 4, 3, 3000, 4500, 1, colours_for_cloud); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 1700); break; case ENEMY_BOSS3_2: case ENEMY_BOSS3_3: simple_cloud_trans(TRANS_WHITE, x, y, enemy[e].x_speed, enemy[e].y_speed, 3000); simple_cloud_trans(TRANS_YELLOW, x, y, enemy[e].x_speed, enemy[e].y_speed, 3550); place_burstlet_burst(x, y, 0, 0, 3 + grand(3), 4, 3, 3000, 5000, 1, colours_for_cloud); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 1700); break; case ENEMY_TRIANGLER2: case ENEMY_OVERBLATTER2: case ENEMY_BOSS2_TURRET4: case ENEMY_SHADOW2: simple_cloud_trans(TRANS_WHITE, x, y, enemy[e].x_speed, enemy[e].y_speed, 900); simple_cloud_trans(TRANS_LBLUE, x, y, enemy[e].x_speed, enemy[e].y_speed, 1150); place_burstlet_burst(x, y, 0, 0, 3 + grand(3), 4, 2, 1000, 1500, 4, colours_for_cloud); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 900); break; /* case ENEMY_MESSENGER: simple_cloud_trans(TRANS_YELLOW, x, y, enemy[e].x_speed, enemy[e].y_speed, 500); simple_cloud_trans(TRANS_LRED, x, y, enemy[e].x_speed, enemy[e].y_speed, 750); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 600); break;*/ case ENEMY_TRIANGLER3: case ENEMY_BOSS3_TURRET3: simple_cloud_trans(TRANS_WHITE, x, y, enemy[e].x_speed, enemy[e].y_speed, 900); simple_cloud_trans(TRANS_YELLOW, x, y, enemy[e].x_speed, enemy[e].y_speed, 1150); place_burstlet_burst(x, y, 0, 0, 3 + grand(3), 4, 2, 1000, 1500, 4, colours_for_cloud); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 1000); break; case ENEMY_OVERTRIANGLER: simple_cloud_trans(TRANS_WHITE, x, y, enemy[e].x_speed, enemy[e].y_speed, 1500); simple_cloud_trans(TRANS_YELLOW, x, y, enemy[e].x_speed, enemy[e].y_speed, 1950); place_burstlet_burst(x, y, 0, 0, 3 + grand(3), 4, 2, 1000, 3400, 4, colours_for_cloud); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 2000); break; case ENEMY_BOSS2_2: if (btype == BULLET_CHARGE) { simple_cloud_trans(TRANS_WHITE, x, y, enemy[e].x_speed, enemy[e].y_speed, 3000); simple_cloud_trans(TRANS_LBLUE, x, y, enemy[e].x_speed, enemy[e].y_speed, 3550); place_burstlet_burst(x, y, 0, 0, 3 + grand(3), 4, 2, 3000, 5000, 4, colours_for_cloud); simple_light(x, y, enemy[e].x_speed, enemy[e].y_speed, 2000); } break; case ENEMY_SPIKEY5: // colours [0] = bullet[b].colours [0]; create_cloud(CLOUD_LARGE_FADING_CIRCLE, x, y, 0, 0, 0, 0, 100 + grand(50), -3, 2, 0, 100 + grand(50), 0, colours); break; /* case ENEMY_JELLY: place_burstlet_burst(x, y, 0, 0, 3 + grand(3), 4, 2, 1000, 1500, 4, colours_for_cloud); break;*/ } create_bullet(btype, x, y, xs, ys, OWNER_ENEMY, damage, timer + grand(timer_rand), mass, firing_angle, status, size, colours, speed_div, special1,special2,special3,special4,special5); } if (recoil != 0) { if (enemy[e].turret_main != -1) { accelerate_enemy(enemy[e].turret_main, angle + ANGLE_HALF, recoil); } else accelerate_enemy(e, angle + ANGLE_HALF, recoil); } } void zap_attack(int e) { int xs = enemy[e].attribute [8], ys = enemy[e].attribute [9]; int i,j, xa, ya; int passing_colours [3] = {TRANS_ORANGE, TRANS_YELLOW, TRANS_WHITE}; place_explosion(xs, ys, 0, 0, 400 + grand(300), passing_colours); blast(xs, ys, 50000, 400, 6000, OWNER_ENEMY); // bullet_soundf(b, NWAV_BURSTZL, 300 + grand(100)); play_wav_pos(NWAV_BURSTZL, 600, 255, xs, ys); for (j = 0; j < 5; j ++) { xa = xs + grand(40001) - 20000; ya = ys + grand(40001) - 20000; place_explosion_no_light(xa, ya, 0, 0, 100 + grand(150), passing_colours); } place_burstlet_burst(xs, ys, 0, 0, 6, 6, 4, 1500, 1500, 7, passing_colours); int zigs = hypot(xs - enemy[e].x, ys - enemy[e].y) / 10000; int passing_colours2 [4] = {TRANS_DRED, TRANS_DRED, TRANS_LRED, TRANS_WHITE}; int angle; int xprog, yprog, xb, yb, xc, yc; for (i = 0; i < 2; i ++) { if (i == 0) { xa = enemy[e].x + xpart(enemy[e].angle + ANGLE_QUARTER, 30000); ya = enemy[e].y + ypart(enemy[e].angle + ANGLE_QUARTER, 30000); } else { xa = enemy[e].x + xpart(enemy[e].angle - ANGLE_QUARTER, 30000); ya = enemy[e].y + ypart(enemy[e].angle - ANGLE_QUARTER, 30000); } create_cloud(CLOUD_LIGHT, xa, ya, 0, 0, 0, 0, 800 + crandom(105),20,0, 0, 0, 0, passing_colours2); angle = radians_to_angle(atan2(ys - ya, xs - xa)); angle &= 1023; xprog = xpart(angle, 10000); yprog = ypart(angle, 10000); xc = xa; yc = ya; for (j = 0; j < zigs; j ++) { xa += xprog; ya += yprog; xb = xa + grand(9001) - 4500; yb = ya + grand(9001) - 4500; create_cloud(CLOUD_TRANS_FADING_LINE, xb, yb, xc, yc, 0, 0, 21, 1,0, 0, 0, 0, passing_colours2); xc = xb; yc = yb; } } } // no leading... int track_target(int e, int attacking, int turning, int forbid) { int retval = enemy_turn_towards_xy(enemy[e].x, enemy[e].y, actor[attacking].x, actor[attacking].y, enemy[e].angle, turning, forbid); if (retval < enemy[e].angle || (enemy[e].angle < 100 && retval > (ANGLE_FULL - 100))) enemy[e].slew_dir = -1; else enemy[e].slew_dir = 1; return retval; } // this is used by overblatter int track_target_any_angle(int x, int y, int target_x, int target_y, int turning, int forbid, int angle) { int retval = enemy_turn_towards_xy(x, y, target_x, target_y, angle, turning, forbid); // if (retval < angle || (angle < 100 && retval > (ANGLE_FULL - 100))) return retval; } int near_angle(int angle1, int angle2) { if (angle1 / 200 == angle2 / 200) return 1; if (angle1 < 100 && angle2 > ANGLE_FULL - 100) return 1; if (angle2 < 100 && angle1 > ANGLE_FULL - 100) return 1; return 0; } void accelerate_enemy(int e, int angle, int impulse) { enemy[e].x_speed += cos(angle_to_radians(angle)) * impulse; enemy[e].y_speed += sin(angle_to_radians(angle)) * impulse; } void drag_enemy(int e, float drag_amount) { enemy[e].x_speed *= (float) 1 - drag_amount; enemy[e].y_speed *= (float) 1 - drag_amount; // enemy[e].x_speed *= (float) 1 - drag_amount; // enemy[e].y_speed *= (float) 1 - drag_amount; } int spawn_enemy(int type, int subtype, int carrying_pickup, int target) { #ifdef SANITY_CHECK if (type <= ENEMY_NONE || type >= NO_ENEMY_TYPES) { rectfill(screen, 370, 230, 430, 280, COLOUR_RED3); textprintf_centre_ex(screen, small_font, 400, 250, COLOUR_WHITE, -1, "%i", type); rest(1000); // exit(type); } #endif //if (type <= ENEMY_NONE || type >= NO_ENEMY_TYPES) // return -1; // sanity check // textprintf_ex(screen, small_font, 100,100, COLOUR_WHITE, -1, "type %i target %i Press I", type, target); // do // { // ticked = 0; // } while (key [KEY_I] == 0); int special [10]; int location [2]; int passing_colours [5] = {COLOUR_GREEN8, COLOUR_GREEN8, COLOUR_GREEN8, COLOUR_GREEN8, COLOUR_GREEN8}; int passing_colours2 [5] = {TRANS_DGREEN, TRANS_LGREEN, TRANS_YELLOW, TRANS_YELLOW, TRANS_YELLOW}; // char standard_sound = 1; int cloud_size = 200 + crandom(250) + eclass[type].radius / 10; switch(type) { default: find_target_start_point(location, type); break; // case (immobile enemies) // find_firebase_start_point(location); // break; } /* switch(type) { default:*/ passing_colours2 [0] = TRANS_DGREEN; passing_colours2 [1] = TRANS_LGREEN; passing_colours2 [2] = TRANS_YELLOW; passing_colours [0] = COLOUR_GREEN8; /* break; case ENEMY_HEAD1: passing_colours2 [0] = TRANS_LRED; passing_colours2 [1] = TRANS_ORANGE; passing_colours2 [2] = TRANS_YELLOW; passing_colours [0] = COLOUR_YELLOW8; cloud_size = 2000; break;*/ /* passing_colours [0] = GC_YELLOW8; passing_colours2 [0] = TRANS_ORANGE; passing_colours2 [1] = TRANS_YELLOW; passing_colours2 [2] = TRANS_WHITE; break; passing_colours [0] = GC_ORANGE8; passing_colours2 [0] = TRANS_ORANGE; passing_colours2 [1] = TRANS_ORANGE; passing_colours2 [2] = TRANS_YELLOW; break; passing_colours [0] = GC_RED8; passing_colours2 [0] = TRANS_DRED; passing_colours2 [1] = TRANS_LRED; passing_colours2 [2] = TRANS_YELLOW; break; passing_colours [0] = GC_BLUE8; passing_colours2 [0] = TRANS_DBLUE; passing_colours2 [1] = TRANS_LBLUE; passing_colours2 [2] = TRANS_WHITE; break; passing_colours [0] = GC_PURPLE8; passing_colours2 [0] = TRANS_LBLUE; passing_colours2 [1] = TRANS_PURPLE; passing_colours2 [2] = TRANS_WHITE; break;*/ // } create_cloud(CLOUD_SHRINKING_CIRCLE, location [0], location [1], 0, 0, 0, 0, 500, -150 - eclass[type].radius / 100, 10, 0, 0, 0, passing_colours); place_explosion(location [0], location [1], 0,0, cloud_size, passing_colours2); // break; // } // if (target == TARGET_CRAWLY) //arena.crawlies_created ++; int e = create_enemy(type, subtype, location [0], location [1], 0, 0, grand(ANGLE_FULL), carrying_pickup, special, target); // if (standard_sound == 1) // enemy_soundf(e, ESOUND_WARP_IN, 800 + grand(800) - eclass[type].mass); /* if (eclass[enemy[e].type].role == ROLE_BOSS || eclass[enemy[e].type].role == ROLE_MINIBOSS) { enemy_soundf(e, NWAV_SPAWN, enemy_sound_pitch(enemy[e].type) / 2 + grand(200)); //800 + grand(200) - enemy_pitch(enemy[k].type)); } else*/ enemy_soundf(e, NWAV_PHASE, enemy_sound_pitch(enemy[e].type) / 2 + 200 + grand(200)); //800 + grand(200) - enemy_pitch(enemy[k].type)); //calculate_beat(); return e; // need to make sure: either that creatures made up of multiple } void find_target_start_point(int location [2], int et) { int timeout = 0; /* if (eclass[et].role == ROLE_BOSS)// || eclass[et].role == ROLE_MINIBOSS) { location [0] = arena.max_x / 2; location [1] = arena.max_y / 2; return; }*/ do { location [0] = grand(arena.max_x - 20000 - eclass[et].edge_radius * 2) + 10000 + eclass[et].edge_radius; location [1] = grand(arena.max_y - 20000 - eclass[et].edge_radius * 2) + 10000 + eclass[et].edge_radius; // location [1] = grand(arena.max_y - 300000) + 150000; timeout ++; if (timeout >= 1000) break; // Oh well. if (actor[0].in_play == 1) if (location [0] > actor[0].x - 150000 && location [0] < actor[0].x + 150000 && location [1] > actor[0].y - 150000 && location [1] < actor[0].y + 150000) continue; if (actor[1].in_play == 1) if (location [0] > actor[1].x - 150000 && location [0] < actor[1].x + 150000 && location [1] > actor[1].y - 150000 && location [1] < actor[1].y + 150000) continue; break; } while (TRUE); } void find_crawly_start_point(int location [2]) { location [1] = 10000; int timeout = 0; do { location [0] = grand(arena.max_x - 100000) + 50000; location [0] /= GRID_WIDTH * GRAIN; location [0] *= GRID_WIDTH * GRAIN; location [0] -= 5000; timeout ++; if (timeout >= 1000) break; // Oh well. if (actor[0].in_play == 1 && actor[0].y < 100000) if (location [0] > actor[0].x - 50000 && location [0] < actor[0].x + 50000) continue; if (actor[1].in_play == 1 && actor[1].y < 100000) if (location [0] > actor[1].x - 50000 && location [0] < actor[1].x + 50000) continue; break; } while (TRUE); } void find_firebase_start_point(int location [2]) { int timeout = 0; do { location [0] = grand(arena.max_x - 200000) + 100000; location [0] /= GRID_WIDTH * GRAIN; location [0] *= GRID_WIDTH * GRAIN; location [0] -= 4000; location [1] = grand(arena.max_y - 200000) + 100000; location [1] /= GRID_WIDTH * GRAIN; location [1] *= GRID_WIDTH * GRAIN; location [1] -= 4000; timeout ++; if (timeout >= 1000) break; // Oh well. break; } while (TRUE); } void worm_new_target(int b) { bullet[b].special3 = -1; /* enemy not yet actually destroyed, so this doesn't work: if (game.type == GAME_DUEL) { bullet[b].special3 = closest_enemy_or_actor(bullet[b].owner, bullet[b].x, bullet[b].y, 500000, 1); } else bullet[b].special3 = closest_enemy(bullet[b].x, bullet[b].y, 1000000, 1); */ } void register_destroyed(int e, int cause) { int i, scoring = -1; #ifdef SANITY_CHECK if (e <= -1 || enemy[e].type <= ENEMY_NONE || enemy[e].type >= NO_ENEMY_TYPES) { rectfill(screen, 370, 230, 430, 280, COLOUR_RED3); textprintf_centre_ex(screen, small_font, 400, 250, COLOUR_WHITE, -1, "register e %i, c %i", e, cause); if (e != -1) textprintf_centre_ex(screen, small_font, 400, 260, COLOUR_WHITE, -1, "register t %i", enemy[e].type); rest(2000); return; // exit(type); } #endif if (enemy[e].type == ENEMY_NONE) return; if (cause >= 0) scoring = actor[cause].controller; for (i = 0; i < NO_BULLETS; i ++) { if (bullet[i].special3 == e) { if (bullet[i].type == BULLET_WORM_SORROW || bullet[i].type == BULLET_WORM_AGONY || bullet[i].type == BULLET_SPORE) { worm_new_target(i); } } // clear up any locks that missiles have on the enemy } /* for (i = 0; i < NO_ACTORS; i ++) { if (actor[i].lock == e) actor[i].lock = -1; } for (i = 0; i < NO_ACTORS; i ++) { if (actor[i].turret_lock == e) actor[i].turret_lock = -1; }*/ for (i = 0; i < MAX_TURRETS; i ++) { if (enemy[e].turret [i] != -1) { if (scoring >= 0) score_kill(enemy[enemy[e].turret [i]].type, SUBTYPE_NONE, scoring); // score_kill(i, enemy[e].turret [i], enemy[enemy[e].turret [i]].turret_main); enemy[enemy[e].turret [i]].turret_main = -1; if (cause == -2) enemy[enemy[e].turret [i]].ta_time_left = TA_TURRET_TIMEOUT; } } if (enemy[e].turret_main != -1) { enemy[enemy[e].turret_main].turret [enemy[e].turret_index] = -1; } if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) { if (cause == -2) return; // warped out // more time... if (eclass[enemy[e].type].role == ROLE_TARGET) arena.time_left += 33.333 * 12; if (eclass[enemy[e].type].role == ROLE_MINIBOSS) arena.time_left += 33.333 * 36; if (eclass[enemy[e].type].role == ROLE_BOSS) arena.time_left += 33.333 * 60; return; } // Because time_attack can return before this, can't have anything important to all // game modes below. if (cause >= 0) { scoring = actor[cause].controller; score_kill(enemy[e].type, enemy[e].subtype, scoring); } else scoring = -1; if (enemy[e].target == TARGET_PRIMARY && arena.game_over == 0)//enemy[e].target == TARGET_PRIMARY && arena.game_over == 0) { if (eclass[enemy[e].type].role == ROLE_MINIBOSS) arena.targets_left_total -= 2; // ie 3 in total if (eclass[enemy[e].type].role == ROLE_BOSS) arena.targets_left_total -= 3; // ie 4 in total arena.targets_left_total --; if (arena.targets_left_total <= 0) { finish_level(); } } } int check_for_targets(void) { // int i; /* for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[i].type != ENEMY_NONE && enemy[i].target == TARGET_PRIMARY) return 1; }*/ // if (arena.targets_left [0] > 0 || arena.targets_left [1] > 0 || arena.targets_left [2] > 0) // return 1; return 0; } void enemy_sound(int e, int sound) { play_wav_pos(sound, 1000, 255, enemy[e].x, enemy[e].y); } void enemy_soundf(int e, int sound, int freq) { play_wav_pos(sound, freq, 255, enemy[e].x, enemy[e].y); } void enemy_soundvf(int e, int sound, int vol, int freq) { play_wav_pos(sound, freq, vol, enemy[e].x, enemy[e].y); } void enemy_sound_fire(int e, int sound, int freq, int vol, int dist) { play_wav_pos(sound, freq, vol, enemy[e].x + xpart(enemy[e].angle, dist), enemy[e].y + ypart(enemy[e].angle, dist)); } void score_kill(int etype, int subtype, int p) { // textprintf_centre_ex(screen, small_font, 400, 200 + grand(50), COLOUR_WHITE, -1, "%i %i %i", etype, subtype, p); // rest(500); // return; if (p <= -1) return; if (etype <= -1) return; int score_gained = eclass[etype].level * 10; //eclass[etype].level * eclass[etype].level * 10; switch(eclass[etype].role) { case ROLE_MINIBOSS: score_gained *= 3; break; case ROLE_BOSS: score_gained *= 5; break; case ROLE_TURRET: score_gained /= 4; break; case ROLE_EXTRA: score_gained /= 2; break; } gain_score(p, score_gained); /* if (subtype == SUBTYPE_NONE) { gain_score(p, eclass[etype].score); } else gain_score(p, eclass[etype].score * subtype * subtype);*/ } int enemy_turn_towards_angle(int angle, int tangle, int turning, int forbid) { if ((angle < tangle && tangle > angle + ANGLE_HALF) || (angle > tangle && tangle > angle - ANGLE_HALF)) { if (forbid == -1) return angle; angle -= turning; if (angle < 0) angle += ANGLE_FULL; } else { if (forbid == 1) return angle; angle += turning; if (angle > ANGLE_FULL) angle -= ANGLE_FULL; } return angle; } int enemy_turn_towards_xy(int x1, int y1, int x2, int y2, int angle, int turning, int forbid) { int tangle = radians_to_angle(atan2((y2 - y1), (x2 - x1))); if (tangle < 0) tangle += ANGLE_FULL; if (tangle > ANGLE_FULL) tangle -= ANGLE_FULL; return enemy_turn_towards_angle(angle, tangle, turning, forbid); } overgod-1.0/enemy.h0000644000175000001440000000060210274167770013326 0ustar michiusers void init_enemies(void); int create_enemy(int type, int subtype, int x, int y, int x_speed, int y_speed, int angle, int carrying_pickup, int special [10], unsigned char target); void run_enemies(void); int hurt_enemy(int e, int hurty, int source, char pulse); int spawn_enemy(int type, int subtype, int carrying_pickup, int target); int enemy_sound_pitch(int ec); overgod-1.0/game.c0000644000175000001440000002402410310757124013106 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: game.c History: 11/9/2005 - Version 1.0 finalised This file contains: - main game loop and a bit of miscellany */ #include "allegro.h" #include #include "config.h" #include "globvars.h" #include "stuff.h" #include "palette.h" #include "input.h" #include "bullet.h" #include "cloud.h" #include "actor.h" #include "enemy.h" #include "actor.h" #include "levels.h" #include "display.h" #include "displ_in.h" #include "cmds.h" //#include "ships.h" #include "pickup.h" #include "light.h" #include "sound.h" #include "tile.h" void begin_game(void); void init_structs_etc(void); void make_arena_hostile(void); void run_hostile_level(); void quit_query(void); extern volatile unsigned char ticked; extern volatile int framecounter; extern int slacktime; int long_slacktime; int long_slacktime_store; void game_loop(void) { int playing = 1; counter = 0; do { if (player[0].link_toggle_delay > 0) player[0].link_toggle_delay --; if (player[1].link_toggle_delay > 0) player[1].link_toggle_delay --; reset_lights(); get_input(); enact_commands(); run_actors(); run_bullets(); // should be between actors and enemies for orbitals to work arena.waver_on_level = 0; run_clouds(); // run_stars(); run_enemies(); run_pickups(); play_beats(); if (counter % 35 == 0) run_level(); if (arena.game_over > 0) { arena.game_over --; if (arena.game_over == 1) { playing = 0; kill_gameover_loop(); } if (arena.game_over == 120) play_gameover_loop(1000); } else { if (arena.new_level_sign > 0) arena.new_level_sign --; if (arena.time_left > 0) { if (game.type != GAME_DUEL || (game.duel_mode != DUEL_10_POINTS && game.duel_mode != DUEL_30_POINTS)) arena.time_left --; if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) game.ta_total_time ++; } else { if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) { arena.game_over = 132; hurt_actor(0, 0, 100000); hurt_actor(1, 0, 100000); // it's okay to call hurt_actor on non-existent actors. } if (game.type == GAME_DUEL) { if (arena.game_over == 0) { arena.game_over = 132; game.duel_winner = -1; if (player[0].duel_score > player[1].duel_score) game.duel_winner = 0; if (player[1].duel_score > player[0].duel_score) game.duel_winner = 1; } } else { if (arena.level_finished == 1) { if (arena.level == 15) { arena.level = 16; // play_gameover_loop(2200); // play_wavf(NWAV_SWARBLE, 1500); playing = 0; break; } init_level(); if (actor[0].in_play == 1) actor_new_level(0); if (actor[1].in_play == 1) actor_new_level(1); ticked = 0; } else { if (arena.hostile == 0) { make_arena_hostile(); } else { if (arena.hostile < 10000) arena.hostile ++; run_hostile_level(); } } } } /* if (arena.time_left == 334) { send_message(0, "Hurry} Up}!", STYLE_HURRY); send_message(1, "Hurry} Up}!", STYLE_HURRY); }*/ if (arena.time_left == 330 && (game.type != GAME_DUEL || (game.duel_mode != DUEL_10_POINTS && game.duel_mode != DUEL_30_POINTS))) play_wavf(NWAV_ALARM, 900); if (arena.hostile == 10 || arena.hostile == 40 || arena.hostile == 70) play_wavf(NWAV_ALARM, 700); } if (ticked == 0) { run_display(); framecounter++; } init_effects(); slacktime = 0; do { slacktime ++; } while(ticked == 0); ticked --; counter ++; if (counter % 32 == 0) { long_slacktime_store = long_slacktime; long_slacktime = 0; } long_slacktime += slacktime / 100; if (key [KEY_ESC]) quit_query(); } while(playing == 1); } void quit_query(void) { if (arena.game_over > 0) return; display_quit_query(); do { if (key [KEY_Y]) { arena.game_over = 44; if (game.type == GAME_DUEL) { game.duel_winner = -1; if (player[0].duel_score > player[1].duel_score) game.duel_winner = 0; if (player[1].duel_score > player[0].duel_score) game.duel_winner = 1; } clear_quit_query(); return; } if (key [KEY_N]) { clear_quit_query(); return; } play_beats(); do { slacktime ++; slacktime = 0; } while(ticked == 0); ticked = 0; } while(TRUE); } void make_arena_hostile(void) { if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) return; explode_all_pickups(); arena.hostile = 1; // arena.colour3 = COLOUR_RED1; // calculate_beat(); open_eyes(); shake_all_screens(150); play_wav(NWAV_BANG); // send_message(0, "Defences} On}-Line}!", STYLE_HURRY); // send_message(1, "Defences} On}-Line}!", STYLE_HURRY); } void run_hostile_level() { int hostile_attack, i, angle; int x, y, xs, ys; // colours_for_cloud [0] = TRANS_DRED; for (i = 0; i < arena.eyes_on_level; i ++) { angle = grand(ANGLE_FULL); xs = 2000 + grand(2000); simple_cloud_trans(arena.eye_colour3, arena.eye_x [i], arena.eye_y [i], xpart(angle, xs), ypart(angle, xs), 400); } // if (counter % 8 != 0 || grand(3) != 0) if (counter % 8 != 0 || grand(2000) > arena.hostile) return; hostile_attack = grand(5) + arena.hostile / 100; if (hostile_attack > 5) hostile_attack = 5; int colours [4] = {COLOUR_BLUE3, COLOUR_BLUE5, COLOUR_BLUE7, COLOUR_WHITE}; // play_wavf(WAV_); // enemy_soundf(e, NWAV_SZAP, 100 + grand(5)); // play_wav_pos(NWAV_BURSTZL, 600, 255, xs, ys); // do // { i = grand(arena.eyes_on_level); if (arena.eye_x [i] == 0) return; // } while (arena.eye_x [i] != 0); // angle = grand(ANGLE_FULL); int target = -1; if (actor[0].in_play == 1 && actor[1].in_play == 1) target = grand(2); else { if (actor[0].in_play == 1) target = 0; if (actor[1].in_play == 1) target = 1; } if (target == -1) return; angle = radians_to_angle(atan2(actor[target].y - arena.eye_y [i], actor[target].x - arena.eye_x [i])); x = arena.eye_x [i] + xpart(angle, 5000); y = arena.eye_y [i] + ypart(angle, 5000); play_wav_pos(NWAV_SZAP, 50 + grand(10), 200, x, y); xs = xpart(angle, 15000); ys = ypart(angle, 15000); simple_cloud_trans(TRANS_WHITE, x, y, 0, 0, 400); create_bullet(BULLET_HOSTILE, x, y, xs, ys, OWNER_ENEMY, 400, 2000, 40, 0, 0, 0, colours, 3,0,0,0,0,0); } void begin_game(void) { int i; counter = 0; init_structs_etc(); for (i = 0; i < NO_ACTORS; i ++) { actor[i].in_play = 0; } player[0].score = 0; player[1].score = 0; if (game.type == GAME_SINGLE || game.type == GAME_TIME_ATTACK) { game.users = 1; actor[0].in_play = 0; player[game.single_player].actor_controlled = 0; // player[0].ships_left = 3; game.ships_left = 3; actor[0].controller = game.single_player; init_actor(0, player[game.single_player].ship); //ACTORTYPE_SHIP); } if (game.type == GAME_COOP || game.type == GAME_DUEL || game.type == GAME_TIME_ATTACK_COOP) { game.users = 2; actor[0].in_play = 0; player[0].actor_controlled = 0; // player[0].ships_left = 3; actor[0].controller = 0; init_actor(0, player[0].ship); //ACTORTYPE_SHIP); actor[1].in_play = 0; player[1].actor_controlled = 1; // player[1].ships_left = 3; actor[1].controller = 1; init_actor(1, player[1].ship); //ACTORTYPE_SHIP); game.ships_left = 6; } init_bullets(); init_clouds(); // init_stars(); init_enemies(); prepare_display(); game.drag = 0.013;//955;//9999; /* arena.max_x = 894000; arena.max_y = 895000; */ arena.level = 0; game.symbols_given = 0; init_level(); long_slacktime = 0; arena.waver_on_level = 0; } void init_structs_etc(void) { int i, j; for (i = 0; i < NO_ACTORS; i ++) { actor[i].type = ACTORTYPE_NONE; actor[i].controller = -1; actor[i].in_play = 0; for (j = 0; j < NO_CMDS; j ++) { actor[i].actor_cmd [j] = 0; } } for (i = 0; i < NO_PLAYERS; i ++) { player[i].actor_controlled = -1; player[i].user = -1; player[i].link_fire = 1; player[i].link_toggle_delay = 0; // for (j = 0; j < NO_CMDS; j ++) // { // actor[i].player_cmd [j] = 0; // } } for (i = 0; i < NO_BULLETS; i ++) { bullet[i].type = BULLET_NONE; } for (i = 0; i < NO_CLOUDS; i ++) { cloud[i].type = CLOUD_NONE; } init_pickups(); } overgod-1.0/game.h0000644000175000001440000000005707725675120013126 0ustar michiusersvoid game_loop(void); void begin_game(void); overgod-1.0/gfx/0000755000175000001440000000000010311022374012604 5ustar michiusersovergod-1.0/gfx/data.dat0000644000175000001440000023661710300306624014227 0ustar michiusersslh.ALL.propDATE8-15-2005, 23:12propNAMEFONT_INpropORIG*c:\devcpp\proj\overgod\out\gfx\font_in.bmpFONT)) ~ & & &&QUU}uA@_@A@}uUUUU}uA@_@A@}uUUQ&&<<|><|pxpppp&p& &<<888888<< &x|| &?& &>><<& & &<<88xxppppp&  && & && & & && & &&??????&&???x&? "&x88~88>0p pp p p8p8p88pp8ppp8y8<?<?&                  ?&&&&&&& &&&&&&@@@@@@@@@@@@@@@@@@@~&&&DD&&@@@@@@@@@@& ?&& !&&                ?&& &??????>>>>>>>>>>>>>>>>>>????? &8|||<<< &~~~~~~~~~&@ 8p8x0|p|p>0" &&<<<<88& ` ` ` ` `&``&&& 0000000000 & 0000000000 && & &&& &&&    &88&    & &``&0000000&&&&&& & &xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&&À?=<8propDATE8-15-2005, 23:23propNAMEFONT_OUTpropORIG&c:\devcpp\proj\overgod\out\font_oc.bmpFONT   ~ & & &&&&&& & & && && & &&&&&&&&&&&& &&&&&"&&&&&&&&& &&&&&&&&&&&&&&!&&&& & & &&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&propDATE6-29-2005, 12:08propNAME FONT_SMALLpropORIG+c:\DevCpp\proj\overgod\out\gfx\smallfn2.bmpFONT ~  @@@@@@ PP PPP ((  h pP @@ ``  ` pp @@  x  `@@ 𐐐   p   𐐐 0 𐐐 𐐐  @@@ @@  pp @`@ p@@     𘈈       ࠠ               x  @@  @@@@@@ ``   𐐐 𐐐  𐐐  0 `  𐐐   ࠠ   𐐐 𐐐    p@p @@@@@@    pPP  p0 `@@@@` @@@@@ @@`@@ propBACKnpropDITHnpropNAME GrabberInfopropPACK0propRELFnpropSORTypropTRANnpropXGRD16propYGRD16info For internal use by the grabberovergod-1.0/gfx/gb_big1.bmp0000644000175000001440000004237010310770644014615 0ustar michiusersBMD6(L@uu $0<HU((44@@LLYYeeqq}}Ueu ((0088(4@LYeq} $$00<<HHUUUeu ((0088P]$i,u4<DL<D$L,U4]z}z}zdkmkkmkcp<z}z}zckmkkmkcp;z}z}zckmkkmkcp9z}z}zbkmkkmkcp8z}z}zbkmkkmkcp7z}z}zakmkkmkcp5zz}z}zz`kmkkmkcp4zz }z }zz^kmkkmkcp3zz }z }zz\kmkkmkcp2zz}z}zzZkmkkmkcp 1zz}z}zzXkmkkmkcp 0 zz}z}zzVkmmkcp / zz}z}zzUkmmkcp . zz}z}zzTkmmkcp   . z}z}zTkmmkcp   - z}z}zTkmmkcp , z+}zTkmmkcp+z+}zPkmmkcp+zz}z)}z}zzOkmmkcp*z}z'}z}zOkmmkcp"z[)z}z%}z}zNkmmkcpz~zX)z }z#}z }zMkmmkcpzz~zzV(z }z!}z }zMkmmkcpz~zU(z }z}z }zLkmmkcpz~zT'z}z}z}zLkmmkcpz~zS'z}z}z}zKkmmdpz~zS&z}z}z}zKkmmdpz~zR&z}z}z}zJkmmdpz~zR&z?}zJkmmdpz!~zQ%z?}zJkmmdpz!~zQ%zA}zIkmmkcpz!~zQ$zA}zIkmmkcpz#~zP$zA}zIkmmkcpz%~zO$8rrAzA}zI8Akmmkcpz%~zO$5rurur>zA}zI5>kmmkcpz'~zN#3rr ur urr<zA}zI3  <kmmkcpz)~zM#1rrururr:zA}zI1:kmmkcpz)~zM#/rrururr8zz?}zzI/8kmmkcpz'~zN#.rurur7z?}zJ.7kmmkcpz!~zO#,rrururr5z%}zJ(1kmmkcp zz~zzF. .#+rrururr4z?}rJ#,kmmkcp z~zz ~ zz~zB $$,+rurur4rz?}rrI  kmmkcpz~~~z? ##,+rurur4zA}zIkmmkcpz~~~z>*+rurur4zA}zIkmmkcpz~~~z=%%*'rurur0zA}zIkmmkcpz~~~z<)&rrururururr/zA}zIkmmkcpz~~~z;&&) zrururururz)zA}zIkmmkcpz~~~z;)z~rurururur~z&zA}zI  kmmkcpz~~~z;&&)z~r ur#ur ur~z&zA}zI  #  kmmkcpz~~~z:)z~r ur!ur ur~z"z?}zJ    !   kmmkcpz~~~z:%%* rrz~z~r urur ur~z~zrrz?}zJ   kmkkmkcpz~ ~~z:* ruuruurz~z~rururur~z~zruuruurz}z}z}zJ   kmkkmkcpz~~z: ##,rrururr~z~rururur~z~rrururrz}z}z}zK  kmkkmkcpz~~z: $$,rurur~z~rururur~z~rururz}z}z}zK   kmkkmkcpz~ ~~z9. .#r ur ur~z~rururur~z~r ur urz}z}z}zL kmkkmkcpz~~~z9#r ur ur~z~r?ur~z~r ur urz }z}z }zL  ? kmkkmkcpz~~~z9#r ur ur~zr?urz~r ur ur z }z!}z }zM ? kmkkmkcpz~~~z9#rurururur~~rAur~~rurururur z }z#}z }zM E kmkkmkcpz~~~z:#rururrsrrurur~rAur~rururrsrrurur z}z%}z}zNS kmkkmkcpz~~~z:#rurur srurur~rAur~rurur srurur z}z'}z}zO U  kmkkmkcpz~~~z;$rur srurrAurrur srur zz}z)}z}zzO  U   kmkkmkcpz~~~z<$rur srSur srur z+}zP  U   kmkkmkcpzz ~ ~ ~ ~zz=$rrursrQursrurr  z+}zT  U   kmkkmkdpz ~ ~z?$rursrQursrur  z}z}zTU kmkkmkepz ~~ z?%rursrOursrur  z}z}zTU kmkkmkfpzz~~zz=%rrursrOursrurr  zz}z}zzTU kmkkmkgpz~~z<&rsr/ursr  zz}z}zzU$$ kk mkk mkkgpz~~z;&rrursrOursrurr  zz}z}zzVU klk mkk mklkgpz~~z;&rursrOursrur zz}z}zzXU kllk mkk mkllkgpz~~z:'rursrQursrur zz}z}zzZU klk mkk mklkgpz~~z:'rrursrQursrurr zz }z }zz\  U   klk mkk mklkgpz~~z:(rur srSur srur zz }z }zz^  U   klkmkkmklkgpz~~z;(rur srurrAurrur srur zz}z}zz`  U   klkmkkmklkgpz~~z;)rurur srurur~rAur~rurur srurur z}z}za U  klkmkkmklkgpz~~z<)rururrsrrurur~rAur~rururrsrrurur z}z}zbS klkmkkmklkgpz~~z<*rurururur~~rAur~~rurururur z}z}zb E k lkmkkmk lkgpz~~z=+r ur ur~zr?urz~r ur ur z}z}zc ? k lkmkkmk lkgpz~~z=+r ur ur~z~r?ur~z~r ur urz}z}zc  ? k l kmmkkmmk lkgpz~~z> ,r ur ur~z~rururur~z~r ur urz}z}zd k lkkkk lkgpz~~z>   -rurur~z~rururur~z~rururz}z}zd   k lkk lkgpz~~z?   .rrururr~z~rururur~z~rrururr ze  k lkk lkgpz~~z? . ruuruurz~z~rururur~z~zruuruurz}z}zd   k lkk lkgpz~~z@ / rrz~z~r urur ur~z~zrrz}}z_   k lkk lkgpz~~zA 0z~r ur!ur ur~z"z}}zY    !   klklkgp z~~zB 1z~r ur#ur ur~z& z }  }zU  #  klkhp z~~zB2z~rurururur~z& z} }zT  klkip z~~zC3 zrururururz) z} }zSklkjp z~~zD4&rrururururr/ zz} }zzSklkkp z~~zE5'rurur0 z zT klklp z~~zF7+rurur4 zz} }zzS klkmpzz~~zzG8+rurur4 z} }zS klknpz~~zI9+rurur4 z} }zS   klkopz~~zJ;+rrururr4 z} }zS#, k lkppzz ~ ~zzK<,rrururr5 z}}zS(1k lkqpzz ~ ~zzM >.rurur7 z}}zT.7k lkrpzz~~zzO @/rrururr8 z}z}zT/8klkspzz~zzQ   B1rrururr: z}z}zU1:klktpz~zS"   E3rr ur urr< z}z}zV3  <klkupz~zV$ G5rurur>z}z}zW5>klkvp"z[' J8rrAzzZ8AkwpPovergod-1.0/gfx/gb_big2.bmp0000644000175000001440000011016410310770666014617 0ustar michiusersBMt6(l> $0<HU((44@@LLYYeeqq}}Ueu ((0088(4@LYeq} $$00<<HHUUUeu ((0088P]$i,u4<DL<D$L,U4]z'~ '~zR*r0ur-r0ur=z'~ '~zR*r0ur-r0ur=z(~  (~zQ)r1ur-r1ur<zz)~ )~zP(r2ur-r2ur;z}zz)~   )~zP'r3ur-r3ur:z}zz*~   *~zO'r3ur-r3ur:z}z z*~ *~zO&r4ur-r4ur9z}z @@ z+~?+~zN%r5ur-r5ur8z}z88z,~,~zM%r5ur-r5ur8z}z44ߓz,~ ,~zM$r6ur-r6ur7z}z.!.ߓz-~   -~zL$r6ur-r6ur7z}z+)+ݓz-~   -~zL#r7ur-r7ur6z}z'-'ݓz.~.~zK#r7ur-r7ur6z}z%3%ۓz.~.~zK"r8ur-r8ur5z}z"7"ۓz/~/~zJ"r8ur-r8ur5z}z  ;  ٓz/~  /~zJ!r9ur-r9ur4z}z = דz0~0~zI!r9ur-r9ur4z}z !A! דz0~0~zI!r9ur-r9ur4z}z !E! Փ z1~1~zH r:ur-r:ur3z}z !G! Փ z1~1~zH r:ur-r:ur3 z}z #I# ӓ z2~ 2~zG r:ur-r:ur3 z}z #M# ѓ z2~    2~zGr;ur-r;ur2 z}z #O# ѓ z2~ 2~zGr;ur-r;ur2 z}z #Q# ϓ z2~z  z2~zFr;ur-r;ur2 z #S# ͓ z,~zz,~zFrr=ur-r=ur0z}z.s,u,z~z,,z~z>r=ur-r=ur0z}z/s-s-z ~z-  -z ~z>r=ur-r=ur0z}z0u-q-z ~z..z ~z>r=ur-r=ur0z}z0u.q.z ~z..z ~z>r=ur-r=ur0z}z1u.o.z ~z//z ~z=r, w =,S=+  j+  jz~z88z~z;$rtrz9}zrtr7,z}z?, w =,S=*  i*  iz~z8 8z~z;$rtrz;}zrtr7,z}z?- w >-Q>)  h)  hz~z8    8z~z;$rtrz;}zrtr7-z}z@- w >-O>)  h)  hz~z8 8z~z;$rtrz=}zrtr7-z@.w?.O?( # g( # gz~z8  8z~z;$rtrz=}zrtr7-z~z@.w?.M?( ) g( ) gz~z8  8z~z;$rtr z?}z rtr7-zz~zz@/u@/M@( - g( - gz~z8 8z~z;$rtr z?}z rtr7.z~zA0uA0KA(/g(/gz~z8   8z~z;$rt(rz?}z(rtr7/z~zB0uA0IA(3g(3gz~z8   8z~z;$rttr(uz?}z(urttr7/z~zB1sB1IB(7g(7gz~z8 8z~z;$r*uzA}z*ur70z~zC1sB1GB(9g(9gz~z8?8z~z;#rr,uzA}z,urr60z~zC2sC2EC);h);hz~z88z~z;"r.uzA}z.ur51z~zD3sD3ED)?h)?hz~z7 7z~z;!r/uzA}z/ur41zD3qD3CD*Ai*Aiz~z7   7z~z; r0uzA}z0ur38usK4qE4CE+ C j+ C jz~z7   7z~z;r1uzA}z1ur25{zH5oF5AF+ E j+ E jz~z77z~z;r2uzA}z2ur15zy~zH5oF5?F* G i* G iz~z66z~z;r3uzA}z3ur06zw~zI6oG6?G* I i* I iz~z66z~z;r5uz?}z5ur/7zu~zJ6mG6=G) I h) I hz~z6  6z~z;r5uz?}z5ur/7zu~zJ7mH7=H) K h) K hz~z66z~z<r6uz?}z6ur.8zs~zK8kI8;I( M g( M gz~z55z~z<r4urrz?}zrr4ur.8zs~zK8kI8;I' O f' O fz~z55z~z<r0urvz=}zvr0ur.9zq~zL9iJ99J' O f' O fz~z55z~z<r.urvz=}zvr.ur-9zq~zL9gJ97J' Q f' Q fz~z4 4z~z<r+ur vz;}z vr+ur-:qzM:gK:7K& Q e& Q ez~z4    4z~z<r)urrvz;}zvrr)ur-;zm}zN:eK:5K& S e& S ez ~z3 3z ~z<r'urrvz9}zvrr'ur-;zm}zN;eL;5L% U d% U dz ~z3  3z ~z<r%urrvz7}zvrr%ur-<zk}zO<cM<3M% U d% U dz ~z3  3z ~z<r#urrvz5}zvrr#ur-<zk}zO<aM<1M$ W c$ W cz ~z2 2z ~z<r!urrvz3}zvrr!ur-=zi}zP=_N=1N$ W c$ W cz ~z2   2z ~z=r urvz3}zvr ur-=zi}zP=_N=/N$ W c$ W cz ~z1   1z ~z=rurrvzz/}zzvrrur->zg}zQ>]O>-O# Y b# Y bz ~z1 1z ~z=rur"vz-}z"vrur-?ze}zR?[P?-P "["L "["Lz ~z0?0z ~z=rur$vz+}z$vrur-?ze}zR?YP?+P I Iz ~z00z ~z=rurr&vzz'}zz&vrrur-@zc}zS@WQ@+QGGz ~z/ /z ~z=rur*vz%}z*vrur-@zc}zSAURA)RFFz ~z.   .z ~z>rur,vzz!}zz,vrur-Aza}zTASRA'RDDz ~z.   .z ~z>rur/vz}z/vrur-Bz_}zUBQSB'SCCz ~z--z ~z>rur3vz}z3vrur-Bz_}zUBOSB%SCCz~z,,z~z>rur7vz }z7vrur-Cz]}zVCMTC%TBBz~z,,z~z>rur=v z=vrur-Cz]}zVDIUD#UAAz~z+  +z~z?rurvrur-Dz[}zWD G UD#UAAz~z**z~z?rurvrur-Dz[}zWE E VE!V@@z~z))z~z?rurvrur-EzY}zXF A WFW@@z~z((z~z?rurvrur-FzW}zYF = WFW@@z~z((z~z?rurvrur-FzW}zYG ; XGX??z~z' 'z~z@rurvrur-GzU}zZG7XGX??z~z&    &z~z@rurvrur-GzU}zZH3YHY??z~z% %z~z@rurvrur-HzS}z[I-ZIZ??z~z$  $z~z@rurvrur-HzS}z[I)ZIZ??z~zz"  "zz~zArurvrur-IzQ}z\J![J[??z~z! !z~zArurvrur-JzO}z]J[J[??z~z    z~zArurvrur-JzO}z]K\K\??z~z   z~zBrurvrur-KzM}z^K  \K\??z~zz zz~zBrurvrur-KzM}z^LM]L]@@z~z?z~zBr urvr ur-LzK}z_MK^M^@@z~zzzz~zBr urvr ur-LzK}z_MK^M^@@z~z z~zCr urvr ur-MzI}z`NI_N_AAz~zz   zz~zCr urvr ur-NzG}zaNI_N _AAz~zz   zz~zCr urvr ur-NzG}zaOG`O `BB z ~zzzz ~zDru zrvr zur-OzE}zbPEaP aCC z"~zz"~zDz }zvz }z*OGzbPEaP aCC z$~zzzz$~zEz}zvz}z'OzE~zbQ bQ bDD z&~z    z&~zEz}zvz}z$OzzC~zzbR cRcFF z)~zz)~zEzz"}zz{vzz"}zz"PzC~zcRcRcGG z,~zz,~zFz&}zyvz&}z!QzA~zdSdSd I I z2~zz2~zF zz(}zzuvzz(}zzQzA~zdSdSd "["L "["L z2~2~zG z,}zsvz,}zRz?~zeTeTe# Y b# Y b z2~ 2~zG z.}zqvz.}zRz?~zeUfUf$ W c$ W c z2~    2~zGzz0}zzmvzz0}zzSz=~zfUfU;f$ W c$ W c z1~ 1~zHz4}zkvz4}zS?zfV  gV9g$ W c$ W c z1~  1~zHz4}zkvz4}zY3slV  gV9g% U d% U dz0~  0~zIz6}zivz6}zV9ziW  hW7h% U d% U dz0~ 0~zIz8}zgvz8}zVz7~ziW ! hW7h& S e& S ez/~   /~zJz:}zevz:}zWz5~zjX ! iX5i& Q e& Q ez/~   /~zJz<}zcvz<}zXz3~zkY!jY3j' Q f' Q fz.~ .~zKz<}zcvz<}zXz3~zkY#jY3j' O f' O fz.~?.~zKz>}zavz>}zYz1~zlZ#kZ1k' O f' O fz-~-~zLz>}zavz>}zYz1~zlZ#kZ1k( M g( M gz-~ -~zLz@}z_vz@}zZz/~zm[#l[/l) K h) K hz,~   ,~zMz@}z_vz@}zZz/~zm\#m\-m) I h) I hz,~   ,~zMz@}z_vz@}z[/zn\#m\-m* I i* I iz+~+~zNz@}z_vz@}z]z)}zp]#n]+n* G i* G iz*~*~zOzB}z]vzB}z]z)}zp^#o^)o+ E j+ E jz*~*~zOzB}z]vzB}z^z'}zq^#o^)o+ C j+ C jz)~  )~zPzB}z]vzB}z^z'}zq_!p_'p*Ai*Aiz)~)~zPzB}z]vzB}z_z%}zr`!q`%q)?h)?hz(~(~zQzB}z]vzB}z`z#}zs`!q`%q);h);hz'~'~zRzB}z]vzB}z`z#}zsara#r(9g(9gz'~'~zRzB}z]vzB}zaz!}ztara#r(7g(7gz&~  &~zSzB}z]vzB}zaz!}ztbsb!s(3g(3gz%~     %~zTz@}z_vz@}zbz}zubsb!s(/g(/gz$~?$~zUz@}z_vz@}zbz}zuctct( - g( - gz$~?$~zUz@}z_vz@}zcz}zvdudu( ) g( ) gz#~z=z#~zVz@}z_vz@}zdz}zwdudu( # g( # gz"~z=z"~zWz>}zavz>}zdz}zwevev)  h)  hz!~z=z!~zXz>}zavz>}zez}zxevev)  h)  hz ~z=z ~zYz<}zcvz<}zez}zxf wfw*  i*  iz~z=z~zZz<}zcvz<}zfz}zyg xgx+  j+  jz~z=z~zZz:}zevz:}zfz}zygxgx,  k,  k z~z=z~z[z8}zgvz8}zgz}zzhyhy-l-l!z~z=z~z\z6}zivz6}zhz}z{iziz/n/n"z~z=z~z]z4}zkvz4}zhz}z{iziz@@#zz~z=z~zz^z4}zkvz4}ziz}z|j{j{AA%z~z=z~z`zz0}zzmvzz0}zziz}z|j{j{D  D  &z~z=z~za z.}zqvz.}zjz}z}k|k|F  F  'z~z=z~zb z,}zsvz,}zjz}z}l }l }HH(z~z=z~zc zz(}zzrsvrzz(}zzkz }z~l }l }KK)z~z=z~zdz&}zurrovrruz&}z!lz }zm ~m ~OO*zz~z=z~zzezz"}zzurrkvrruzz"}zz"lz }zm ~m ~RR,z~z=z~zgz}z urevr uz}z$mz }zn n RR-zz~z=z~zzhz}zur]vruz}z'mz }zn n RR/z~z=z~zjz }zu]ruz }z*nz}zooSS0zz ~z=z ~zzk zrur z/oz}zppSS2zz ~z=z ~zzm-rrurr@oz}zppTT4zz ~z=z ~zzo/rrurrBpz}zqqU U 6z~z=z~zq1r}urDpz}zqqV V 9z~z=z~zt4ruurGqz}zrrWW<z=zw8urKrzssYYovergod-1.0/gfx/gb_big3.bmp0000644000175000001440000007403410310770656014624 0ustar michiusersBMx6(s:: $0<HU((44@@LLYYeeqq}}Ueu ((0088(4@LYeq} $$00<<HHUUUeu ((0088P]$i,u4<DL<D$L,U4]&K&>GKWuigw<(K(<GLUvigw:*K*:GLUvhgw9,K,9GMSw: %% Zhx7-K-7GNQx7 !! Wiy5/K/5GNQx5  Uk{41K14GOOy3  Sm}22K22GOOy1Qn   ~14K41GPMz0Po /5K5/GPMz/Op#.7K7.GQK{.Nq#-8K8-GQK{-Mr#+9K9+GQK{-Mr#*;K;*GRI|,Lr#)<K<)GRI|,Ls!(=K=(GRI|+!!Kt'>K>'GRI|+!!Ku%?K?%GSG}*##Jz$@M@$GSG}*##Jz#?O?#GSG}*##Jz"?S?"GSG})%%Iz!>U>!GSG})%  %Iz  &Y&  GSG})%  %Iz #Y# GSG})%  %IW 1 g   Y   GSG})%  %IV / f Y GSG})%  %IU / e Y GSG})%  %IT  /  d Y GSG})%  %IS  /  c Y GRI|)%  %IS  /  c Y GRI|*#  #JS  /  c Y GRI|*#  #JR  /  b Y G?I?;*#   #JQ  /  a  Y  G=K=:+!  !KP  /  `  Y  G=K=9+!     !KO  1  _  Y  G=K=9,     LN 3 ^  Y  G;M;8,  LMa]  Y  G;M;8-  MLa\  Y  G 9O97- % MKa[ Y G 9O97. ) NJaZ Y G  7Q7 6/ - OI a Y Y G  7Q7 60 1 PH a X Y G  5S5 51  5  QG a WYG  3U3 53   7   SF a VYG  3U3 45  ;  UE a UYG 1W147  A  WDaTYG /Y/3: ) z) ZCaSYG -''-3O#z z#oB%RYG +# #+3PzzpA%Q Y G'!!'2Qzzq@'P Y G%  %2Qzzzzq?)O  Y  G!#!1Qzz#zzq>+N  Y  G'1Rz'zr=+M    Y    G+1Rzz)zzr<+L "  Y  " G/0Kz-zk9+I % Y % G" !3! "0Hzz/zzh85+5H ;Y; G& $5$ &0Fz3zf76+6G <Y< GT7T/Cz5zc67+7F ;Y; GS;S/@z7z`58+8E ;Y; GR=R/= z9z ]58+8E<Y<GQ?Q/; z;z [58+8E;Y;GQAQ.8z=zX57-7E<Y<GPCP.5 z?z U6/6;Y;GOEO.3z?zS 515;Y;GPEP-0 zAz P 434<Y<GOGO-- zCz M 353;Y;GNIN-* zCz J  7 ;Y;GMKM-( zEz H S<Y<GMKM-% zGz EU;Y;GMMM,"" zGz "BW;Y;GMMM, % zIz %@Y<Y<GLOL,& zIz &= Y <M<GLOL,) zKz ): Y ;%G%;GKQK,, zKz ,7 Y ;(A(;GLQL+/ zKz /5)Y)<+?+<GKSK+0 zMz 02 Y <,;,<GKSK+3 zMz 3/ Y ; 9 ;GKSK+ 6 zMz 6-  Y  ;  9  ;GJUJ+ 8 zOz 8*  !Y!  <G<GJUJ+; zOz ;'  !Y!  <E<GJUJ+> zOz >$  !Y!  <A<GIWI+@ zOz @" !Y! <?<GJWJ*B zOz B  !Y! ;=;GJWJ*C zQz C  !Y! ; ; ;GJWJ*D zQz D !Y!< "9" <GJWJ*? zQz ?'!Y!< $9$ <GIYI*? zQz ?'!Y!<  <GIYI*? zQz ?'!Y!<  <GIYI*? zQz ?'!Y!<  <GIYI*? zQz ?'!Y!<  <GIYI*D zQz D !Y!;  ;GIYI*C zQz C !Y!<  <GIZI*B zOz B !Y!<  <GIYI*@ zOz @"!Y!<  <GIYI*> zOz >$!Y!<  <GIYI*; zOz ;'!Y!<<GIYI* 8 zOz 8*!Y!<<GIYI* 6 zMz 6-!Y!<<GIYI*3 zMz 3/!Y!<<GJWJ*0 zMz 02 !Y! <<GJWJ*/ zKz /5 !Y! <<GJWJ*, zKz ,7 !Y! <<GJWJ*) zKz ):  !Y!  <<GIWI+& zIz &=  !Y!  <<GJUJ+ % zIz %@  !Y!  <<GJUJ+"" zGz "B  Y  <<GJUJ+% zGz E Y <  <GKSK+( zEz H Y <  <GKSK+* zCz J)Y)<  <GKSK+- zCz M Y <  <GLQL+0 zAz P Y ;  ;GKQK,3z?zS Y <  <GLOL,5 z?z UY<  <GLOL,8z=zXW<  <GMMM,; z;z [U<  <GMMM,= z9z ] S< $9$ <GMKM-@z7z`  7 < "9" <GMKM-Cz5zc 353; ; ;GNIN-Fz3zf 434;=;GOGO-Hzz/zzh 515<?<GPEP-Kz-zk6/6<A<GOEO.Rzz)zzr57-7E<E<GPCP.Rz'zr58+8E<G<GQAQ.Qzz#zzq58+8E;  9  ;GQ?Q/Qzzzzq58+8E; 9 ;GR=R/Qzzq67+7F<,;,<GS;S/Pzzp76+6G<+?+<GT7T/O#z z#o85+5H;(A(;G& $5$ &0: ) z) Z9+I;%G%;G" !3! "07  A  W<+L<M<G/05  ;  U=+M<Y<G+13   7   S>+N;Y;G'11  5  Q?)O;Y;G!#!10 1 P@'P<Y<G%  %2/ - OA%Q;Y;G'!!'2. ) NB%R;Y;G +# #+3- % MCaS<Y<G -' '-3-  MDaT;Y;G /Y/3,  LE a U;Y;G 1W14,     LF a V<Y<G  3U3 4+!     !KG a W;Y;G  3U3 5+!  !KH a X<Y<G  5S5 5*#   #JI a Y ;Y; G  7Q7 6*#  #JJaZ ;Y; G  7Q7 6*#  #JKa[ <Y< G 9O97)%  %ILa\ ;Y; G 9O97)%  %IMa] % Y % G;M;8)%  %IN 3 ^ "  Y  " G;M;8)%  %IO  1  _    Y    G=K=9)%  %IP  /  `  Y  G=K=9)%  %IQ  /  a  Y  G=K=:)%  %IR  /  b Y G?I?;)%  %IS  /  c Y GRI|)%%IS  /  cYGRI|*##JS  /  cYGRI|*##JT  /  dYGSG}*##JU / eYGSG}+!!KV / fYGSG}+!!KW 1 gYGSG},Lz Y GSG},Lz Y GSG}-Mz Y GSG}-Mz Y GSG}.Nz  Y  GSG}/Oz  Y  GSG}0Pu  Y  GSG}1Qt  Y  GRI|3  Ss!  Y  GRI|5  Ur#  Y  GRI|7 !! Wr# Y GRI|: %% Zr# Y GQK{hq# Y GQK{ip# Y GQK{io  Y GPMzin   ~ Y GPMzjm} Y GOOyjk{   Y   GOOyjiy #Y# GNQxk  hx  &Y&  GNQxk  gw!>U>!GMSwl  gw"?S?"GLUvl  gw#?O?#GLUvl  g  w$@M@$GKWum  g  w%?K?%GJYtm  g  w'>K>'GI[sm  g  w(=K=(GH]rn  g  w)<K<)GF_pn  g  w*;K;*GEcon  g  w+9K9+GCemo  g  w-8K8-GAiko  g  w.7K7.G?mipg  w/5K5/G<qfpg  w14K41G;wepg  w22K22G;weqg  w41K14G<ufqg  w5/K/5G=qgqg  w7-K-7G?mirgw9,K,9GAikrh  x:*K*:GCemsi  y<(K(<GEaosj  z>&K&>GG]qsk  {@$K$@GIWstl  |B"K"BGLSvtm  }DKDGNMxtn ~GKGGQG{uo IKIGT?~up'LKLGX9uq%OKOG[/vr#RKRG`%vs!V K VGewtZKZGmwu`K`GmGovergod-1.0/gfx/gb_lsh.bmp0000644000175000001440000002431210310770700014546 0ustar michiusersBM(6(4$  $0<HU((44@@LLYYeeqq}}Ueu ((0088(4@LYeq} $$00<<HHUUUeu ((0088P]$i,u4<DL<D$L,U4] >#RplRlzz }z z }zz5 ; <"Rpl  Qlzz }z z }zz39 :!Rpl  Plz }z z }z2  7   8 Rpl  Pl zz}z z}zz0 6   5Rpl  Ol z}z z}z/  4   4!Rpl  Ol z}z z}z.3 3#Rpl  Ol z}z z}z-  1 2!RplOl z}zz}z, 0 1RplOlz}z z}z+  /  0RplOlz}zz}z* .  /RplOlz}z z}z) -  .RplOlz}zz}z), -RplOlz}z z}z( , ,Rpl  Olz}zz}z'+ +Rpl  Plz}z z}z' * *Rpl [lz}zz}z&*   *   Rpl [lz}z z}z& )   )    Rpl [lz}zz}z% (   )      Rpl [lz}z z}z% (   (    Rpl [lz}zzz}z$ '   (   Rpl [lz}zz{zz}z$ ' '  Rpl [lz}zz {zz}z$ & '   Rpl [lz}z{z}z# & &   Rpl [lz}z{z}z# & &   Rpl [lz}z{z}z# % & Rpl [lz}z{z}z# % % Rpl [lz{z# % % Rpl [lz{z+ %%!!Rpl [lz{z+% %##Rpl [lz{z+% %!!Rpl [lz{z+;* -Rpl [lz{z+  ( , Rp7y   Plz{z+?(7, Rpl  Olz{z+  '  ,   RplOlz{z+A'5-   RplOlz{z+  '  ,   RplOlz{z+?(7,  RplO ,z{z+  ( ,   RplO   z{z+;* -    RplO   z{z+% %      Rpl  O     z{z#% %    Rpl  O     z}z{z}z# %%   Rpl  O     z}z{z}z# % %Rpl  P     z}z{z}z# % %Rpl  P     z}z{z}z# % &Rpzz&  Q     z}zz {zz}z$ & &Rpzz}zz}zz$R     z}zz{zz}z$ & &Rp zz}zz}z zQ     z}zzz}z$ & 'Rpzz }z}zz}z }zzQ     z}z z}z% ' 'Rpz }z}zz}z }zQ     z}zz}z% '   (Rpz }z}zz}z }zQ     z}z z}z& (   (!Rpz }z}zz}z }zQ( (z}zz}z& (   )#Rpz }z}zz}z }z  Q mklklklklklklklklklklklklklkl klklklklklklklklklklklklklklkmz}z z}z' )   )!Rpz }z}zz}z }z  Q Emz}zz}z'*   *Rpz }z}zz}z }z  Q mklklklklklklklklklklklklklkl klklklklklklklklklklklklklklkmz}z z}z( * * RpzzR( (z}zz}z)+ +!Rp S     z}z z}z) , ,"Rp T     z}zz}z*, -#Rp S     z}z z}z+ -  .$RpzzS      z}zz}z, .  /%Rpz }z}zz}z }zS      z}z z}z-  /  0 &Rpz }z}zz}z }zS      z}z z}z. 0 1!'Rpz }z}zz}z }zS      z}z z}z/  1 2" (Rpz }z}zz}z }zS      zz}z z}zz03 3# )Rpz }z}zz}z }zS     z }z z }z2  4   4$ =Rpz }z}zz}z }zT     zz }z z }zz3 6   5%>Rpzz }z}zz}z }zzT     zz }z z }zz5  7   8&?Rp zz}zz}z zU   zz}z z}zz79 :'@Rpzz}zz}zz$V   z}z z}z9 ; <(ARpzz& X ,z z< > >)BRpPovergod-1.0/gfx/gb_nme1.bmp0000644000175000001440000005000010310770726014621 0ustar michiusersBMP6(HK $0<HU((44@@LLYYeeqq}}Ueu ((0088(4@LYeq} $$00<<HHUUUeu ((0088P]$i,u4<DL<D$L,U4] #include "allegro.h" #include "config.h" #include "globvars.h" #include "sound.h" //#define DEBUG_KEYS 1 #ifdef DEBUG_KEYS #include "actor.h" #include "enemy.h" #include #include "palette.h" extern RGB palet [256]; void gain_symbol(int a, int abil, int symb); extern struct optionstruct options; int scrs; int sshot_counter; extern int debug_info; #endif extern int inflicteda, inflictede; void get_input(void) { int i; if (player[0].actor_controlled != -1) { for (i = 0; i < NO_CMDS; i ++) { if (key [player[0].keys [i]]) actor[player[0].actor_controlled].actor_cmd [i] = 1; else actor[player[0].actor_controlled].actor_cmd [i] = 0; } } if (player[1].actor_controlled != -1) { for (i = 0; i < NO_CMDS; i ++) { if (key [player[1].keys [i]]) actor[player[1].actor_controlled].actor_cmd [i] = 1; else actor[player[1].actor_controlled].actor_cmd [i] = 0; } } if (key [player[0].keys [CMD_LINK]]) { if (player[0].link_toggle_delay == 0) { if (player[0].link_fire == 0) player[0].link_fire = 1; else player[0].link_fire = 0; player[0].link_toggle_delay = 20; play_wav(NWAV_MENU); } } if (key [player[1].keys [CMD_LINK]]) { if (player[1].link_toggle_delay == 0) { if (player[1].link_fire == 0) player[1].link_fire = 1; else player[1].link_fire = 0; player[1].link_toggle_delay = 20; play_wav(NWAV_MENU); } } /* if (key [KEY_8_PAD]) actor[player[0].actor_controlled].actor_cmd [CMD_THRUST] = 1; if (key [KEY_4_PAD]) actor[player[0].actor_controlled].actor_cmd [CMD_LEFT] = 1; if (key [KEY_6_PAD]) actor[player[0].actor_controlled].actor_cmd [CMD_RIGHT] = 1; if (key [KEY_0_PAD]) actor[player[0].actor_controlled].actor_cmd [CMD_FIRE1] = 1; if (key [KEY_ENTER_PAD]) actor[player[0].actor_controlled].actor_cmd [CMD_FIRE2] = 1; if (key [KEY_PLUS_PAD]) actor[player[0].actor_controlled].actor_cmd [CMD_UPGRADE] = 1; if (key [KEY_1_PAD]) actor[player[0].actor_controlled].actor_cmd [CMD_LEFT1] = 1; if (key [KEY_3_PAD]) actor[player[0].actor_controlled].actor_cmd [CMD_RIGHT1] = 1; if (key [KEY_2_PAD]) actor[player[0].actor_controlled].actor_cmd [CMD_BRAKE] = 1;*/ #ifdef DEBUG_KEYS char sfile [20]; char istr [20]; if (sshot_counter > 0) sshot_counter --; if (key [KEY_F1] && sshot_counter <= 0) { BITMAP *scrshot_bmp; if (options.resolution == 0) { scrshot_bmp = create_bitmap(640, 480); blit(screen, scrshot_bmp, 0,0,0,0,640,480); } else { scrshot_bmp = create_bitmap(800, 600); blit(screen, scrshot_bmp, 0,0,0,0,800,600); } strcpy(sfile, "sshot"); strcat(sfile, itoa(scrs, istr, 10)); strcat(sfile, ".bmp"); save_bitmap(sfile, scrshot_bmp, palet); clear_to_color(screen, COLOUR_WHITE); play_wav(NWAV_MENU); scrs ++; sshot_counter = 15; destroy_bitmap(scrshot_bmp); } if (key [KEY_F2] && counter % 6 == 0) { actor[0].secondary ++; actor[0].secondary %= TOTAL_SECONDS; } if (key [KEY_MINUS_PAD] && counter % 10 == 0) { gain_symbol(player[0].actor_controlled, ABILITY_DRIVE, SYMBOL_SQUARE); gain_symbol(player[0].actor_controlled, ABILITY_DRIVE, SYMBOL_TRIANGLE); gain_symbol(player[0].actor_controlled, ABILITY_DRIVE, SYMBOL_CIRCLE); gain_symbol(player[0].actor_controlled, ABILITY_DEFENCE, SYMBOL_SQUARE); // gain_upgrade_points(player[0].actor_controlled, 1); } int pl = player[0].actor_controlled; if (counter % 7 == 0) { if (key [KEY_SLASH]) { if (debug_info == 0) debug_info = 1; else debug_info = 0; } if (key [KEY_BACKSPACE]) arena.time_left = 350; if (key [KEY_INSERT]) arena.time_left = 10000; if (key [KEY_1]) gain_symbol(pl, 0, 0); if (key [KEY_2]) gain_symbol(pl, 0, 1); if (key [KEY_3]) gain_symbol(pl, 0, 2); if (key [KEY_4]) gain_symbol(pl, 0, 3); if (key [KEY_5]) gain_symbol(pl, 1, 0); if (key [KEY_6]) gain_symbol(pl, 1, 1); if (key [KEY_7]) gain_symbol(pl, 1, 2); if (key [KEY_8]) gain_symbol(pl, 1, 3); if (key [KEY_Q]) gain_symbol(pl, 2, 0); if (key [KEY_W]) gain_symbol(pl, 2, 1); if (key [KEY_E]) gain_symbol(pl, 2, 2); if (key [KEY_R]) gain_symbol(pl, 2, 3); if (key [KEY_T]) gain_symbol(pl, 3, 0); if (key [KEY_Y]) gain_symbol(pl, 3, 1); if (key [KEY_U]) gain_symbol(pl, 3, 2); if (key [KEY_I]) gain_symbol(pl, 3, 3); if (key [KEY_MINUS]) player[0].score += 500; if (key [KEY_F12]) calculate_beat(); } if (key [KEY_TILDE]) { hurt_actor(0, OWNER_ENEMY, 2000); } if (key [KEY_TAB]) { arena.targets_left_total = 1; for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[i].type != ENEMY_NONE) hurt_enemy(i, 9999, 0,0); } } /* if (key [KEY_2] && counter % 15 == 0) { actor[0].type ++; } if (key [KEY_1] && counter % 15 == 0) { actor[0].type --; }*/ /* if (key [KEY_E]) { inflicteda ++; } if (key [KEY_R]) { inflicteda --; } if (key [KEY_D]) { inflictede ++; } if (key [KEY_F]) { inflictede --; }*/ if (key [KEY_7_PAD]) { // actor[player[0].actor_controlled].armour += 10; // if (actor[player[0].actor_controlled].armour > actor[player[0].actor_controlled].max_armour) // actor[player[0].actor_controlled].armour = actor[player[0].actor_controlled].max_armour; actor[player[0].actor_controlled].repairing = 100; } #endif // int special [10]; // if (key [KEY_5_PAD] && counter % 10 == 0) // { // create_enemy(ENEMY_BOUNCER, 10000 + random() % 50000, 10000 + random() % 50000, // 1000 - random() % 2000, 1000 - random() % 2000, 0, special); // create_enemy(ENEMY_STINGER, grand(3), 10000 + random() % 300000, 90000, // 0, 0, 0, special); // } /* if (key [KEY_UP]) actor[player[1].actor_controlled].actor_cmd [CMD_THRUST] = 1; if (key [KEY_LEFT]) actor[player[1].actor_controlled].actor_cmd [CMD_LEFT] = 1; if (key [KEY_RIGHT]) actor[player[1].actor_controlled].actor_cmd [CMD_RIGHT] = 1; if (key [KEY_DOWN]) actor[player[1].actor_controlled].actor_cmd [CMD_BRAKE] = 1; if (key [KEY_SPACE]) actor[player[1].actor_controlled].actor_cmd [CMD_FIRE1] = 1; if (key [KEY_Z]) actor[player[1].actor_controlled].actor_cmd [CMD_FIRE2] = 1; if (key [KEY_X]) actor[player[1].actor_controlled].actor_cmd [CMD_UPGRADE] = 1; */ } overgod-1.0/input.h0000644000175000001440000000002707712557062013351 0ustar michiusersvoid get_input(void); overgod-1.0/levels.c0000644000175000001440000006130010311314664013464 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: levels.c History: 11/9/2005 - Version 1.0 finalised This file contains: - initialising and managing of the levels */ #include "allegro.h" #include "config.h" #include "globvars.h" #include "stuff.h" #include "palette.h" #include "enemy.h" #include "display.h" #include "displ_in.h" #include "cloud.h" #include "bullet.h" #include "enemy.h" #include "pickup.h" #include "actor.h" #include "sound.h" #include "light.h" #include "tile.h" #ifdef SANITY_CHECK extern FONT *small_font; int e_index = 0; #endif int test_ta_enemies; int choose_enemy(int e1, int e2, int e3, int e4); void init_time_attack_level(void); void run_time_attack_level(void); void time_attack_enemies(void); void init_duel_level(void); void run_duel_level(void); void muster_enemies(int enemy_type [15], int types, int role, int enemy_level); void make_enemy_list(void); void tilemap(void); extern BITMAP *level_bmp; int extra_list [3]; void start_at_level_1(void) { arena.level = 0; } void init_level(void) { /* if (level_bmp != NULL) { destroy_bitmap(level_bmp); level_bmp = NULL; }*/ level_announcement(); // in display.c. currently just clears the player display bmps if (game.type == GAME_DUEL) { init_duel_level(); return; } if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) { init_time_attack_level(); // only called once per game. return; } arena.level ++; arena.new_level_sign = 80; init_bullets(); init_clouds(); init_enemies(); reset_lights(); init_effects(); // cloud.c calculate_beat(); arena.max_x = 594000 + (((int) (arena.level / 3)) + grand(arena.level / 2)) * 100000; arena.max_y = 595000 + (((int) (arena.level / 3)) + grand(arena.level / 2)) * 100000; // placement of actor in actor.c depends on level 1 being 594000x595000 /* if (arena.level % 4 == 0) { arena.max_x = 794000; arena.max_y = 795000; }*/ if (arena.max_x > 1000000) { arena.max_x = 994000; } if (arena.max_y > 1000000) { arena.max_y = 995000; } /* if (arena.max_x > 1300000) { arena.max_x = 1294000; } if (arena.max_y > 1300000) { arena.max_y = 1295000; }*/ // arena.max_x = 994000; // arena.max_y = 995000; arena.max_targets_in_level = 4 + (arena.level - 1) / 5; arena.max_non_targets_in_level = 4 + (arena.level - 1) / 5; if (arena.level == 1) arena.max_non_targets_in_level = 0; if (arena.level == 2) arena.max_non_targets_in_level = 2; make_enemy_list(); arena.time_left = 33.333 * 180; if (arena.level < 11) arena.time_left = 33.33 * 150; if (arena.level < 6) arena.time_left = 33.33 * 120; // arena.time_left = 33.33 * 120; // arena.time_left = 600; // arena.time_left = 50; // arena.time_left = 280; arena.level_finished = 0; arena.next_target = grand(3) + 2; arena.next_non_target = grand(4) + 15; arena.hostile = 0; init_pickups(); tilemap(); #ifdef SANITY_CHECK e_index = 0; #endif } void tilemap(void) { int lx, ly; lx = arena.max_x / 50000 + 5; // if changed, change in open_eyes in tile.c also ly = arena.max_y / 50000 + 5; /* level_bmp = create_bitmap(lx, ly); if (!level_bmp) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Bitmap creation error (level_bmp %i x %i) \n%s\n", lx, ly, allegro_error); exit(1); } */ clear_to_color(level_bmp, 1); make_tile_map(lx, ly); } // called about every second void run_level(void) { if (game.type == GAME_DUEL) { run_duel_level(); return; } if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) { run_time_attack_level(); return; } int i; int current_targets = 0; int current_non_targets = 0; int subtype = SUBTYPE_NONE; arena.next_target --; arena.next_non_target --; if (arena.next_target > 0 && arena.next_non_target > 0) return; // Don't bother placing new enemies if now's not the time for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[i].type == ENEMY_NONE) continue; if (enemy[i].target == TARGET_PRIMARY) current_targets ++; if (enemy[i].target == TARGET_EXTRA) current_non_targets ++; } if (arena.next_target <= 0) { if (arena.targets_left_total > 0 && current_targets < arena.max_targets_in_level && arena.enemy_list [arena.list_index] != ENEMY_LIST_END && (arena.enemy_list [arena.list_index] != ENEMY_LIST_WAIT || current_targets == 0)) { while (arena.enemy_list [arena.list_index] == ENEMY_LIST_WAIT) { arena.list_index ++; } // spawn_enemy(arena.enemy_list [arena.list_index], subtype, PICKUP_NONE, TARGET_PRIMARY); if (spawn_enemy(arena.enemy_list [arena.list_index], subtype, PICKUP_NONE, TARGET_PRIMARY) != -1) arena.list_index ++; while (arena.enemy_list [arena.list_index] == ENEMY_LIST_EMPTY) { arena.list_index ++; } // arena.targets_left_total --; } arena.next_target = 2; } int etype = -1; if (arena.next_non_target <= 0) { if (current_non_targets < arena.max_non_targets_in_level) { etype = extra_list [grand(2)]; /* extern FONT *small_font; textprintf_ex(screen, small_font, 150, 150, COLOUR_WHITE, -1, "type %i", etype); do { } while (key [KEY_K] == 0);*/ spawn_enemy(etype, 0, PICKUP_NONE, TARGET_EXTRA); // if (spawn_enemy(arena.extra_list [grand(2)], subtype, PICKUP_NONE, TARGET_NO) != -1) // arena.list_index ++; } arena.next_non_target = 30; } /* if (arena.next_non_target == 0) { if (current_non_targets < arena.max_non_targets_in_level && arena.enemy_list [arena.list_index] != ENEMY_LIST_END) // this last shouldn't happen { if (spawn_enemy(arena.enemy_list [arena.list_index], subtype, PICKUP_NONE, TARGET_PRIMARY) != -1) { arena.targets_left_total --; arena.list_index ++; } } } arena.next_non_target = 5; } */ } void make_enemy_list(void) { arena.list_index = 0; arena.symbol_index = 0; int i; int enemy_type [15]; int miniboss_type [15]; arena.battle_type = BATTLE_NORMAL; if (arena.level == 5 || arena.level == 10 || arena.level == 15) arena.battle_type = BATTLE_BOSS; if (game.mode_god == 1 && arena.level > 3 && grand(3) == 0) arena.battle_type = BATTLE_BOSS; int csym = 0; int total_actual_targets = 0; for (i = 0; i < 50; i ++) { arena.symbol_list [i] = 0; } for (i = 0; i < 25; i ++) { arena.enemy_list [i] = ENEMY_LIST_END; } switch(arena.battle_type) { default: case BATTLE_NORMAL: // first process the targets: arena.total_targets = 9;// + arena.level / 5; arena.targets_left_total = 9;// + arena.level / 5; arena.max_targets_in_level = 4 + arena.level / 5; muster_enemies(enemy_type, 3, ROLE_TARGET, arena.level); muster_enemies(miniboss_type, 3, ROLE_MINIBOSS, arena.level); for (i = 0; i < arena.total_targets; i ++) { if (arena.level == 1) { arena.enemy_list [i] = ENEMY_MULTI1; if (grand(2) == 0) arena.enemy_list [i] = ENEMY_GUARDIAN1; if (grand(3) == 0) arena.enemy_list [i] = ENEMY_CURVE1; // total_actual_targets ++; // arena.enemy_list [i] = ENEMY_CRUISER1; } else { if (arena.battle_type == BATTLE_BOSS) { if (i == 5) { arena.enemy_list [i] = ENEMY_BOSS1_1 + grand(3); if (arena.level > 7) { switch(grand(3)) { case 0: arena.enemy_list [i] = ENEMY_BOSS2; break; case 1: arena.enemy_list [i] = ENEMY_BOSS2_2; break; case 2: arena.enemy_list [i] = ENEMY_BOSS2_3; break; } } if (arena.level > 12) { switch(grand(3)) { case 0: arena.enemy_list [i] = ENEMY_BOSS3_1; break; case 1: arena.enemy_list [i] = ENEMY_BOSS3_2; break; case 2: arena.enemy_list [i] = ENEMY_BOSS3_3; break; } } arena.enemy_list [i + 1] = ENEMY_LIST_EMPTY; arena.enemy_list [i + 2] = ENEMY_LIST_EMPTY; arena.enemy_list [i + 3] = ENEMY_LIST_EMPTY; arena.enemy_list [i + 4] = ENEMY_LIST_EMPTY; i = arena.total_targets; // total_actual_targets ++; break; // out of i loop } } else { // maybe a miniboss or two... if ((arena.level > 2 || game.mode_god == 1) && ((i == arena.total_targets - 4 && (grand(5) == 0 || game.mode_god == 1)) || (i > 2 && i < arena.total_targets - 3 && (grand(20) == 0 || (grand(4) == 0 && game.mode_god == 1))))) { arena.enemy_list [i] = miniboss_type [grand(3)]; arena.enemy_list [i + 1] = ENEMY_LIST_EMPTY; arena.enemy_list [i + 2] = ENEMY_LIST_EMPTY; i += 2; // gets +1 from just going through the loop // total_actual_targets ++; continue; // through i loop } } arena.enemy_list [i] = enemy_type [grand(3)]; // we have to guarantee at least 5 enemies per level, as 4 symbols are given in a coop game. // total_actual_targets ++; } } // arena.enemy_list [0] = ENEMY_SPIKEY4; // arena.enemy_list [1] = ENEMY_OVERSPIKEY; /* arena.enemy_list [1] = ENEMY_SHADOW1; arena.enemy_list [2] = ENEMY_SHADOW2;*/ /* arena.enemy_list [0] = ENEMY_TRIANGLER1; arena.enemy_list [1] = ENEMY_TRIANGLER1; arena.enemy_list [2] = ENEMY_TRIANGLER2; arena.enemy_list [3] = ENEMY_TRIANGLER2; arena.enemy_list [4] = ENEMY_TRIANGLER3;*/ /* arena.enemy_list [0] = ENEMY_DEFENDER1; arena.enemy_list [1] = ENEMY_LIST_WAIT; arena.enemy_list [2] = ENEMY_DEFENDER2; arena.enemy_list [3] = ENEMY_LIST_WAIT; arena.enemy_list [4] = ENEMY_DEFENDER3; arena.enemy_list [5] = ENEMY_LIST_WAIT; arena.enemy_list [6] = ENEMY_OVERTRIANGLER;*/ /* arena.enemy_list [0] = ENEMY_SPIKEY2; arena.enemy_list [1] = ENEMY_UNDERSPIKEY; arena.enemy_list [2] = ENEMY_UNDERSPIKEY2; arena.enemy_list [3] = ENEMY_UNDERSPIKEY3;*/ /* arena.enemy_list [0] = ENEMY_CRUISER1; arena.enemy_list [1] = ENEMY_CRUISER1; arena.enemy_list [1] = ENEMY_CRUISER1; arena.enemy_list [2] = ENEMY_CRUISER1 + grand(5); arena.enemy_list [3] = ENEMY_CRUISER1 + grand(5); arena.enemy_list [4] = ENEMY_CRUISER1 + grand(5); arena.enemy_list [5] = ENEMY_CRUISER1 + grand(5);*/ // arena.enemy_list [0] = ENEMY_BOSS3_1 + grand(3); /* arena.enemy_list [0] = ENEMY_GUARDIAN1; arena.enemy_list [1] = ENEMY_GUARDIAN2; arena.enemy_list [2] = ENEMY_GUARDIAN3; arena.enemy_list [3] = ENEMY_GUARDIAN4; arena.enemy_list [4] = ENEMY_GUARDIAN5;*/ // arena.enemy_list [3] = ENEMY_LIST_WAIT; break; } // should this be in the i loop? // I'm not sure. arena.enemy_list [i] = ENEMY_LIST_END; arena.next_target_upgrade = grand(arena.total_targets / 3) + 1; // now process the extras: muster_enemies(enemy_type, 3, ROLE_EXTRA, arena.level); extra_list [0] = enemy_type [0]; extra_list [1] = enemy_type [1]; total_actual_targets = 0; for (i = 0; i < 25; i ++) { if (arena.enemy_list [i] == ENEMY_LIST_END) break; if (arena.enemy_list [i] != ENEMY_LIST_EMPTY && arena.enemy_list [i] != ENEMY_LIST_WAIT) total_actual_targets ++; } int total_symbols = 3; if (arena.level > 5) total_symbols = 2; if (arena.level > 10) total_symbols = 1; if (game.type == GAME_COOP) total_symbols ++; for (i = 0; i < total_symbols; i ++) { do { csym = grand(total_actual_targets - 1); // never choose last index - last enemy shouldn't produce a symbol as there mightn't be enough time to collect it. } while (arena.symbol_list [csym] == 1); // || arena.enemy_list [csym] == ENEMY_LIST_WAIT // || arena.enemy_list [csym] == ENEMY_LIST_EMPTY // || arena.enemy_list [csym] == ENEMY_LIST_END); arena.symbol_list [csym] = 1; } /* switch(arena.level) { case 5: arena.enemy_list [0] = ENEMY_BOSS1_1 + grand(3); arena.enemy_list [1] = ENEMY_LIST_END; arena.total_targets = 1; arena.targets_left_total = 1; arena.max_targets_in_level = 1; break; case 10: case 15: arena.battle_type = BATTLE_BOSS; break; } */ } void muster_enemies(int enemy_type [15], int types, int role, int enemy_level) { int muster [400]; // arbitrarily high value int i, j, m, k = 0; m = 0; for (i = 0; i < NO_ENEMY_TYPES; i ++) { if (eclass[i].common == 0 || eclass[i].role != role) continue; // if (i != ENEMY_BOSS1_3) //i != ENEMY_CRUISER2 && i != ENEMY_CRUISER3 && i != ENEMY_CRUISER4) // continue; if (abs(eclass[i].level - (enemy_level + k)) < eclass[i].common) { for (j = 0; j < eclass[i].common - abs(eclass[i].level - enemy_level); j ++) { if (m > 200) break; muster [m] = i; m ++; } } } for (k = 0; k < types; k ++) { enemy_type [k] = muster [grand(m)]; } } int choose_enemy(int e1, int e2, int e3, int e4) { switch(grand(4)) { case 0: return e1; case 1: return e2; case 2: return e3; case 3: return e4; } return e1; } void finish_level(void) { arena.level_finished = 1; arena.seconds_left_when_finished = 0; arena.time_bonus = 0; if (arena.hostile == 0) { arena.seconds_left_when_finished = arena.time_left / 33.3333; // arena.time_bonus = arena.seconds_left_when_finished * (arena.level + 2); //(arena.seconds_left_when_finished) * (arena.level + 4); arena.time_bonus = arena.seconds_left_when_finished * 15; if (arena.level <= 10) arena.time_bonus = arena.seconds_left_when_finished * 10; if (arena.level <= 5) arena.time_bonus = arena.seconds_left_when_finished * 5; if (game.users == 1) gain_score(game.single_player, arena.time_bonus); else { gain_score(0, arena.time_bonus); gain_score(1, arena.time_bonus); } } arena.time_left = 166; arena.colour1 = COLOUR_GREY2; arena.colour2 = COLOUR_GREY6; if (arena.hostile > 0) { arena.hostile = 0; arena.colour3 = COLOUR_GREY1; } // play_gameover_loop(2000); // play_wavf(NWAV_SUCCESS, 300 + arena.level * 30); // play_sound(WAV_LEVEL_END); } // is called once at the start of each game void init_time_attack_level(void) { /* if (level_bmp != NULL) { destroy_bitmap(level_bmp); // assumes that it'll have been set to NULL at startup level_bmp = NULL; }*/ arena.new_level_sign = 80; arena.total_targets = 9; game.ta_level = 1; game.ta_symbol_count = 0; game.symbols_given = 0; game.ta_total_time = 0; game.ta_enemy_index = 0; init_bullets(); init_clouds(); init_enemies(); reset_lights(); init_effects(); // cloud.c calculate_beat(); arena.max_x = 794000; arena.max_y = 795000; game.ta_enemy_index = 0; time_attack_enemies(); // ie make_enemy_list arena.time_left = 33.333 * 60; arena.level_finished = 0; arena.hostile = 0; arena.next_target = grand(3) + 2; arena.next_non_target = grand(4) + 15; init_pickups(); tilemap(); } void run_time_attack_level(void) { int i; int current_targets = 0; int current_non_targets = 0; arena.next_target --; if (game.ta_level > 1) arena.next_non_target --; if (arena.next_target > 0 && arena.next_non_target > 0) return; // Don't bother placing new enemies if now's not the time for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[i].type == ENEMY_NONE) continue; if (enemy[i].target == TARGET_PRIMARY) { current_targets ++; if (eclass[enemy[i].type].role == ROLE_MINIBOSS) current_targets += 2; // ie +3 in total } if (enemy[i].target == TARGET_EXTRA) current_non_targets ++; } if (arena.next_target <= 0) { if (current_targets < 5) { #ifdef SANITY_CHECK if (game.ta_enemy_index >= 20 || game.ta_enemy_index <= -1 || game.ta_enemies [game.ta_enemy_index] < 0) { rectfill(screen, 370, 230, 430, 280, COLOUR_RED3); textprintf_centre_ex(screen, small_font, 400, 250, COLOUR_WHITE, -1, "run_ta_level %i", game.ta_enemy_index); if (game.ta_enemy_index >= 0) textprintf_centre_ex(screen, small_font, 400, 260, COLOUR_WHITE, -1, "%i", game.ta_enemies [game.ta_enemy_index]); rest(2000); return; // exit(type); } #endif if (spawn_enemy(game.ta_enemies [game.ta_enemy_index], 0, PICKUP_NONE, TARGET_PRIMARY) != -1) game.ta_enemy_index ++; if (game.ta_enemies [game.ta_enemy_index] == ENEMY_LIST_END) { if (game.ta_level < 13) game.ta_level ++; // 13 rather than 15 because it gives a wider range of enemies game.ta_enemy_index = 0; time_attack_enemies(); } } arena.next_target = 3; } int etype; if (arena.next_non_target <= 0) { if (current_non_targets < 3) { etype = game.ta_extra_list [grand(2)]; #ifdef SANITY_CHECK if (etype <= -1 || etype >= NO_ENEMY_TYPES) { rectfill(screen, 370, 230, 430, 280, COLOUR_RED3); textprintf_centre_ex(screen, small_font, 400, 250, COLOUR_WHITE, -1, "run_ta_level extra %i", etype); rest(2000); return; } #endif spawn_enemy(etype, 0, PICKUP_NONE, TARGET_EXTRA); } arena.next_non_target = 30; } } void time_attack_enemies(void) { int enemy_type [15]; int miniboss_type [15]; muster_enemies(enemy_type, 3, ROLE_TARGET, game.ta_level); muster_enemies(miniboss_type, 3, ROLE_MINIBOSS, game.ta_level); muster_enemies(game.ta_extra_list, 2, ROLE_EXTRA, game.ta_level); /* enemy_type [0] = ENEMY_CRUISER1; enemy_type [1] = ENEMY_CRUISER2; enemy_type [2] = ENEMY_CRUISER3;*/ int i, list_index = 0; for (i = 0; i < 9; i ++) { #ifdef SANITY_CHECK if (list_index > 10) { rectfill(screen, 370, 230, 430, 280, COLOUR_RED3); textprintf_centre_ex(screen, small_font, 400, 250, COLOUR_WHITE, -1, "time_attack_enemies %i", list_index); rest(2000); return; // exit(type); } #endif game.ta_enemies [list_index] = enemy_type [grand(3)]; /* do { e_index++; } while (eclass[e_index].role != ROLE_TARGET || eclass[e_index].common == 0); game.ta_enemies [list_index] = e_index; list_index ++; continue; */ if (game.ta_level == 1) { if (grand(2) == 0) game.ta_enemies [list_index] = ENEMY_GUARDIAN1; else game.ta_enemies [list_index] = ENEMY_MULTI1; } if (game.ta_level >= 3) { if (i == 7 && (grand(5) == 0 || game.mode_god == 1)) { game.ta_enemies [list_index] = miniboss_type [grand(3)]; game.ta_enemies [list_index + 1] = ENEMY_LIST_END; i += 2; } if (i == 3 && (grand(2) == 0 || (game.mode_god == 1 && grand(3) != 0))) // was (5) { game.ta_enemies [list_index] = miniboss_type [grand(3)]; i += 2; } } #ifdef SANITY_CHECK if (game.ta_enemies [list_index] <= -1 || game.ta_enemies [list_index] >= NO_ENEMY_TYPES) { rectfill(screen, 370, 230, 430, 280, COLOUR_RED3); textprintf_centre_ex(screen, small_font, 400, 250, COLOUR_WHITE, -1, "time_attack_enemies ta_enemies %i", game.ta_enemies [list_index]); rest(2000); return; // exit(type); } #endif /* do { test_ta_enemies ++; } while(eclass[test_ta_enemies].common == 0); game.ta_enemies [list_index] = test_ta_enemies; */ list_index ++; } game.ta_enemies [list_index] = ENEMY_LIST_END; } void init_duel_level(void) { init_bullets(); init_clouds(); init_enemies(); reset_lights(); player[0].duel_score = 0; player[1].duel_score = 0; game.symbols_given = 0; game.duel_level = 0; calculate_beat(); // arena.colour1 = COLOUR_YELLOW2; // arena.colour2 = COLOUR_YELLOW6; // arena.colour3 = COLOUR_GREY1; arena.max_x = 794000 + grand(6) * 100000; arena.max_y = 795000 + grand(6) * 100000; if (arena.max_x > 1200000) { arena.max_x = 1194000; } if (arena.max_y > 1200000) { arena.max_y = 1195000; } switch(game.duel_crawlies) { case 0: arena.max_non_targets_in_level = 0; arena.between_crawly_upgrades = 0; break; case 1: arena.max_non_targets_in_level = 3; arena.between_crawly_upgrades = 2; break; case 2: arena.max_non_targets_in_level = 6; arena.between_crawly_upgrades = 2; break; case 3: arena.max_non_targets_in_level = 9; arena.between_crawly_upgrades = 2; break; } arena.time_left = 33.333 * 180; if (game.duel_mode == DUEL_10_MINUTES) arena.time_left = 33.333 * 600; arena.level_finished = 0; arena.next_non_target = grand(5) + 1; // arena.next_crawly_upgrade = grand(arena.between_crawly_upgrades) + 1; arena.hostile = 0; arena.crawlies_created = 0; init_pickups(); make_enemy_list(); tilemap(); } // called about every second void run_duel_level(void) { int i; int current_enemies = 0; // int subtype = SUBTYPE_NONE; // int carrying_pickup = PICKUP_NONE; int target_index = -1; int level_raised = 0; arena.next_non_target --; if (arena.next_non_target > 0 || game.duel_crawlies == 0) return; for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[i].type == ENEMY_NONE) continue; // if (enemy[i].target == TARGET_CRAWLY) current_enemies ++; } if (current_enemies < arena.max_non_targets_in_level) { // if (grand(3) == 0) switch(grand(4)) { case 0: target_index = ENEMY_SPINNER1; break; case 1: target_index = ENEMY_SPIKEY1; break; case 2: target_index = ENEMY_FIGHTER1; break; case 3: target_index = ENEMY_BLATTER1; break; } if (game.duel_level > 8) { // level_raised = grand((game.duel_level - 8) / 2 + 1); level_raised = grand((game.duel_level - 8) / 3 + 1); if (level_raised > 4) level_raised = 4; target_index += level_raised; } if (game.duel_level > 15) { if (grand(6) == 0) target_index = ENEMY_MINEFIELDER1; } spawn_enemy(target_index, 0, 0, TARGET_NO); game.duel_level++; } switch(game.duel_crawlies) { default: case 0: arena.next_non_target = 0; break; case 1: arena.next_non_target = 24; break; case 2: arena.next_non_target = 12; break; case 3: arena.next_non_target = 6; break; } /* if (arena.next_crawly == 0) { if (current_crawlies < arena.max_crawlies_in_level) { arena.next_crawly_upgrade --; if (arena.next_crawly_upgrade == 0) { arena.next_crawly_upgrade = grand(arena.between_crawly_upgrades) + 1; carrying_pickup = PICKUP_SQUARE + grand(4); } else { if (grand(12) == 0) carrying_pickup = PICKUP_REPAIR; } target_index = ENEMY_CRAWLER; if (grand(3) == 0 && arena.crawlies_created > 16) target_index = ENEMY_CRAWLER3; if (grand(3) == 0 && arena.crawlies_created > 8) target_index = ENEMY_CRAWLER2; if (grand(3) == 0) target_index = ENEMY_FALLER; subtype = SUBTYPE_GREEN; subtype += grand(arena.crawlies_created) / 8; if (subtype > SUBTYPE_PURPLE) subtype = SUBTYPE_PURPLE; spawn_enemy(target_index, subtype, carrying_pickup, TARGET_CRAWLY); } switch(game.duel_crawlies) { case 0: arena.next_crawly = 0; break; case 1: arena.next_crawly = 24; break; case 2: arena.next_crawly = 12; break; case 3: arena.next_crawly = 6; break; } } */ } overgod-1.0/levels.h0000644000175000001440000000011507736126106013477 0ustar michiusers void init_level(void); void run_level(void); void finish_level(void); overgod-1.0/licence.txt0000644000175000001440000004366607615726440014224 0ustar michiusers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. overgod-1.0/light.c0000644000175000001440000000340610310757124013305 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: light.c History: 11/9/2005 - Version 1.0 finalised This file contains: - functions relating to light sources */ #include "allegro.h" #include #include "config.h" #include "globvars.h" #include "stuff.h" //#include "palette.h" #include "light.h" struct lightstruct light [NO_LIGHTS]; void reset_lights(void) { light[0].type = LIGHT_NONE; } int add_light(int ltype, int lsize, int lx, int ly) { int i = 0; do { if (light[i].type == LIGHT_NONE) { light[i].x = lx; light[i].y = ly; light[i].type = ltype; light[i].size = lsize; light[i + 1].type = LIGHT_NONE; return 1; } if (i >= NO_LIGHTS - 2) return -1; i++; } while(TRUE); return -1; } overgod-1.0/light.h0000644000175000001440000000034207773114322013314 0ustar michiusers#define NO_LIGHTS 100 struct lightstruct { int x; int y; int size; int type; }; enum { LIGHT_NONE, LIGHT_NORMAL }; void reset_lights(void); int add_light(int ltype, int lsize, int lx, int ly); overgod-1.0/main.c0000644000175000001440000001754110311636563013133 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: Main.c History: 11/9/2005 - Version 1.0 finalised This file contains: - main() - various initialisation functions - miscellaneous stuff */ /* Your guide to source files: (for more information visit the files themselves) actor.c - functions for dealing with actors (ie players' ships) bullet.c - creation, movement and collision of bullets cloud.c - clouds - ie non-bullet special effects cmds.c - makes actors implement commands issued in input.c displ_in.c - initialises the display and loads bitmaps display.c - shows things on the screen eclass.c - big struct containing enemy data enemy.c - horrible code for all enemies game.c - the game loop and a few special functions input.c - takes keyboard input levels.c - initialises and manages the levels, enemy spawning etc light.c - like cloud.c but for lights main.c - this file menu.c - the front-end interface palette.c - the palette and transparency functions pickup.c - pickups are symbols/repair/weapons score.c - deals with scoring sound.c - initialises and plays sounds stuff.c - small, very generic functions (like grand) tile.c - generates the background graphics, which are displayed in display.c Most .h files just contain function definitions. But some are special: config.h - structs, enums and #defines globvar.h - extern declarations of global variables sound.h - the WAV_xxx sound enum palette.h - the COLOUR_xxx and TRANS_xxx enums display.h - all the graphics enums */ #include "allegro.h" //#include #include //#include //#include //#include #include #include "config.h" #include "palette.h" #include "displ_in.h" #include "display.h" #include "cmds.h" #include "input.h" #include "actor.h" //#include "stars.h" #include "bullet.h" #include "cloud.h" //#include "ships.h" #include "enemy.h" #include "levels.h" #include "menu.h" #include "sound.h" #include "stuff.h" // Global variables: struct gamestruct game; struct playerstruct player [NO_PLAYERS]; struct actorstruct actor [NO_ACTORS]; struct bulletstruct bullet [NO_BULLETS]; struct cloudstruct cloud [NO_CLOUDS]; struct starstruct star [NO_STARS]; struct arenastruct arena; struct enemystruct enemy [NO_ENEMIES]; unsigned char counter; struct pickupstruct pickup [NO_PICKUPS]; // --- end global variables // timer interupt functions and variables: void framecount(void); volatile int framecounter; volatile int frames_per_second; volatile int inputcounter = 0; volatile int inputs_per_second = 0; volatile int turncounter = 0; volatile int turns_per_second = 0; void tickover(void); volatile unsigned char ticked; //volatile unsigned char tick_counter; int slacktime; // --- end timer interupt extern int grid_offset_x_2p_finetune; // init functions void init_at_startup(void); void begin_game(void); // --- end init functions void game_loop(void); struct optionstruct options; void framecount(void) { frames_per_second = framecounter; framecounter = 0; // turns_per_second = turncounter; // turncounter = 0; // inputs_per_second = inputcounter; // inputcounter = 0; // arena.time_left --; } END_OF_FUNCTION (framecount); void tickover(void) { ticked ++; // tick_counter++; // assumes it'll wrap at 256 } END_OF_FUNCTION (tickover); int main(void) { int allint = allegro_init(); if (allint == -1) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Failed to initialise Allegro! This isn't going to work, sorry."); exit(1); } set_config_file("lacew.cfg"); install_keyboard(); install_timer(); three_finger_flag = 0; key_led_flag = 0; init_at_startup(); menu_loop(); return 0; } END_OF_MAIN(); void init_at_startup(void) { LOCK_FUNCTION (framecount); LOCK_FUNCTION (tickover); LOCK_VARIABLE (ticked); // LOCK_VARIABLE (tick_counter); LOCK_VARIABLE (frames_per_second); LOCK_VARIABLE (framecounter); LOCK_VARIABLE (turns_per_second); LOCK_VARIABLE (turncounter); // LOCK_VARIABLE (inputs_per_second); // LOCK_VARIABLE (inputcounter); install_int (framecount, 1000); install_int (tickover, 30); set_color_depth(8); set_config_file("overgod.cfg"); options.resolution = get_config_int("Options", "Resolution", 0); int randseed = get_config_int("Misc", "Seed", 0); srand(randseed); int windowed = GFX_AUTODETECT_FULLSCREEN; switch(options.resolution) { // case 640: case 0: graphics_mode = GMODE_640_480; break; case 1: graphics_mode = GMODE_800_600; break; case 2: graphics_mode = GMODE_640_480; windowed = GFX_AUTODETECT_WINDOWED; break; case 3: graphics_mode = GMODE_800_600; windowed = GFX_AUTODETECT_WINDOWED; break; /* case 1024: graphics_mode = GMODE_1024_768; break;*/ } scr_x = 640; scr_y = 480; tp_window_width = 315; grid_offset_x_1p = 0;//35000; grid_offset_x_2p = -3;//32000; // grid_offset_x_2p = 32000 + 850000; grid_offset_x_2p_finetune = -13; grid_offset_y = 0; special_600_y = 0; text_offset_x_1p = 0; text_offset_x_2p = 0; text_offset_x = 0; text_offset_y = 0; grid_finetune_x_1p = 0; grid_finetune_y = 0; visible_grids_y = 15; switch(graphics_mode) { case GMODE_800_600: scr_x = 800; scr_y = 600; tp_window_width = 395; grid_offset_x_1p = 3;//5000; grid_offset_x_2p = -3;//8000;//-2000; grid_finetune_x_1p = 31; grid_finetune_x_2p = 10; grid_offset_x_2p_finetune = -22; grid_finetune_y = -90; grid_offset_y = -10000; special_600_y = -5; text_offset_y = 60; text_offset_x = 80; visible_grids_y = 60; special_600_y = 2; break; /* case GMODE_1024_768: scr_x = 1024; scr_y = 768; tp_window_width = 507; grid_offset_x_1p = 43000; grid_offset_x_2p = 2000; grid_offset_y = 6000; special_600_y = 0; text_offset_y = 144; text_offset_x = 192; break; not working */ } if (set_gfx_mode(windowed, scr_x, scr_y, 0, 0) != 0) // if (set_gfx_mode(GFX_DIRECTX_FULLSCREEN, scr_x, scr_y, 0, 0) != 0) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to set %ix%i display mode\n%s\n", scr_x, scr_y, allegro_error); exit(1); } init_trig(); // can't use any integer trig before this! init_palette(); init_display(); init_menus_once_only(); init_sound(); // must come after init_menus_once_only, as that's where // options.sound_enabled is set. } overgod-1.0/menu.c0000644000175000001440000035127310311343622013145 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: menu.c History: 11/9/2003 - Version 1.0 finalised This file contains: - the front end GUI. One of the few files other than display.c & displ_in.c which are authorised to write directly to the screen. */ #include "allegro.h" //#include #include #include "config.h" #include "globvars.h" #include "stuff.h" #include "palette.h" #include "game.h" //#include "upgrades.h" #include "display.h" #include "sound.h" #define NO_SCORES 15 #define SCORE_LENGTH 15 #define GRID_GRAIN 100 //#define NO_BOUNCIES 16 #define NO_KEY KEY_TILDE #define KP_WAIT_LONG 33 #define KP_WAIT_SHORT 5 // let's try to prevent at least the most obvious form of abuse #define UNLOCK_PURPLE 23498 #define UNLOCK_VOID 132 #define UNLOCK_GOD 357 extern struct optionstruct options; //#define FIX_TITLE //#ifdef FIX_TITLE //extern RGB palet [256]; //#endif enum { MENU_NONE, MENU_MAIN, MENU_OPTIONS, MENU_SCORES, MENU_ENTER_SCORES, MENU_SPECIAL, MENU_DUEL }; enum { DUEL_OPTIONS, DUEL_START, DUEL_MODE, DUEL_ENEMIES, DUEL_HANDICAP_P1, DUEL_HANDICAP_P2, DUEL_LEADER_HANDICAP, DUEL_EXIT, DUEL_END }; enum { SPECIAL_TIME_ATTACK, SPECIAL_DUEL, SPECIAL_SPACE1, SPECIAL_MODES, SPECIAL_PURPLE, SPECIAL_VOID, SPECIAL_GOD, SPECIAL_SPACE2, SPECIAL_EXIT, SPECIAL_END }; enum { RANK_SLAVE, RANK_DOUBTER, RANK_UNBELIEVER, RANK_BLASPHEMER, RANK_APOSTATE, RANK_HERETIC, RANK_HERESIARCH, RANK_SECULARIST, RANK_DEICIDE, RANK_DEMIGOD, RANK_GODLING, RANK_UNDERGOD, RANK_LESSER_GOD, RANK_GREATER_GOD, RANK_OVERGOD, RANK_SUPREME_BEING }; enum { MS_SPINNER, MS_SPIKEY, MS_SQUAREY, MS_BLATTER, MS_ORBITER, MS_TYPES }; int ms_circle_rad; int ms_circle_col; int ms_arm_col [2]; int ms_arm_out [2]; int ms_arm_angle[2]; int ms_arm_inward [2]; int ms_arm_number [2]; int ms_arm_rot [2]; int ms_arm_rot_delta [2]; int ms_arm_type [2]; int ms_arm_blatter_size [2]; void menu_display(void); void start_game_from_menu(int game_type); void menu_input(void); void menu_display_main(void); void menu_display_options(void); void menu_display_duel(void); void menu_display_special(void); void menu_display_scores(void); void menu_trigger(void); void display_victory_screen(void); void menu_to_screen(void); int acceptable_char(int scode); int acceptable_name_char(int ascode); void scancode_to_keyname(int scanc, char sstr [30]); char scancode_to_asc(int scanc); char get_shifted_number(char inputted); void test_speakers(void); void resolution_change(void); void menu_sound1(void); void menu_sound2(void); // in display.c void draw_overspinner(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2); void draw_spikey(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2, int in_correction, int out_correction); void draw_blatter(BITMAP *bmp, int x, int y, int number, int distance, int rotation, int size, int col1, int col2); void draw_squarey(BITMAP *bmp, int x, int y, int attribute, int outward, int inward, int angle1, int angle2, int arms, int col1, int col2); void draw_orbiter(BITMAP *bmp, int x, int y, int attribute, int out1, int out2, int out3, int angle1, int angle2, int arms, int col1, int col2); void make_ms_move(void); int ms_colour(void); void anum(char *str, int num); BITMAP *menu_bmp; extern volatile unsigned char ticked; extern int slacktime; extern FONT *font2; extern FONT *small_font; //BITMAP *title_in; //BITMAP *title_out; //RLE_SPRITE *rle_title_i; RLE_SPRITE *rle_title_o; RLE_SPRITE *menu_tile; //RLE_SPRITE *rle_title_s; BITMAP *upgrade_box1; BITMAP *upgrade_box2; BITMAP *upgrade_box3; int menu_index; int menu_index_max; int menu_index_min; int keypress_wait; int last_key; int check_key(int scode); int check_key_disregard_last_key(int scode); unsigned char menu_counter; int which_menu; void quit_game(void); void change_menu(int to_which); int option_index(void); void enter_keystroke(void); int option_jump(int direction); int special_jump(int direction); void init_config(void); void save_config(void); void choose_ships(void); void display_ship_choice(int players, int p1a, int p2a, int p1c, int p2c); void display_ship_choice2(int ship, int y, int chosen); void jam_keys(void); //char *ship_name_long(int ship); //char *ship_name_short(int ship); void ship_description1(int ship, char dstr [200]); void ship_description2(int ship, char dstr [200]); //char *upgrade_name_long(int i); int get_rank(int score, int level); void rank_name(int rank, char sstr [30]); void init_ms(void); void draw_ms(void); extern RLE_SPRITE *large_ships [12] [5]; struct score_list { int score; int ship; int level; char name [25]; }; struct score_list hs_single [NO_SCORES]; struct score_list hs_coop [NO_SCORES]; int best_ta_time; char best_ta_name [50]; struct score_list *hscore; void check_high_scores(void); int enter_score_name_single(int s); int enter_score_name_coop(int s); int enter_score_name_ta(void); void push_scores_single(int insert, int play); void push_scores_coop(int insert, int play); void congratulations(int player); void unlock_screen(int which); int entering_score; int entering_score2; void draw_scrolling_grid(int min_x, int min_y, int max_x, int max_y, int colour); void show_grid(int grid_colour, int border_colour); void make_grid_scroll(void); int grid_x_speed, grid_y_speed, grid_x, grid_y, grid_x_accel, grid_y_accel; struct bouncy_list { int x; int y; int x_speed; int y_speed; int colour1; int colour2; }; struct pyrostruct { int type; int x; int y; int x_speed; int y_speed; int colours [4]; int timeout; int size; int dist; }; struct sparklestruct { int type; int x; int y; int x_speed; int y_speed; // int colours [4]; int size; int tickrate; int colour; }; #define NO_PYROS 30 #define NO_SPARKLES 1000 enum { PYRO_NONE, PYRO_ENDING, PYRO_SPLIT1, PYRO_SPLIT2, PYRO_RANDSPLIT }; enum { SPARKLE_NONE, SPARKLE_CIRCLE }; struct pyrostruct pyro [NO_PYROS]; struct sparklestruct sparkle [NO_SPARKLES]; int next_pyro; void init_pyro(void); void run_pyros(void); void manage_pyros(void); void create_pyro(int x, int y, int xs, int ys, int type, int colours [4], int size, int dist, int timeout); void run_sparkles(void); void draw_sparkles(void); void create_sparkle(int x, int y, int xs, int ys, int type, int colour, int size, int tickrate); void destroy_pyro(int p); void destroy_sparkle(int s); void drag_pyro(int p); void drag_sparkle(int s); void colourify(int col [4]); void pyro_burst(int p); void draw_a_light(BITMAP *bmp, int size, int x, int y); // in display.cc void pyro_sound(int x, int size); //struct bouncy_list bouncy [NO_BOUNCIES]; //void init_bouncies(void); //void make_bouncies_move(void); //void draw_bouncies(void); //RGB title_colour1; //RGB title_colour2; void init_menus_once_only(void) { // text_mode(-1); init_config(); menu_bmp = create_bitmap(640, 480); if (!menu_bmp) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to create menu bitmap! \n\r%s\n\r", allegro_error); exit(1); } menu_counter = 0; entering_score = 0; grid_x_speed = grand(6001) - 3000; grid_y_speed = grand(6001) - 3000; grid_x_accel = 0; grid_y_accel = 0; RGB temp_palette [256]; /* BITMAP *temp_bmp = load_bitmap("gfx\\title_i.bmp", temp_palette); if (!temp_bmp) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to load title_i.bmp! \n\r%s\n\r", allegro_error); exit(1); } rle_title_i = get_rle_sprite(temp_bmp); if (!rle_title_i) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to create rle_title_i! \n\r%s\n\r", allegro_error); exit(1); } destroy_bitmap(temp_bmp); */ BITMAP *temp_bmp = load_bitmap("gfx//gb_title.bmp", temp_palette); if (!temp_bmp) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to load gb_title.bmp! \n\r%s\n\r", allegro_error); exit(1); } //#ifdef FIX_TITLE // save_bitmap("gb_title2.bmp", temp_bmp, palet); //#endif int i, j; for (i = 0; i < 1000; i ++) { for (j = 0; j < 1000; j ++) { switch(getpixel(temp_bmp, i, j)) { case 0: case 255: break; //putpixel(temp_bmp, i, j, 0); case 160: putpixel(temp_bmp, i, j, COLOUR_GREY1); break; default: putpixel(temp_bmp, i, j, COLOUR_GREY4); break; } } } rle_title_o = get_rle_sprite(temp_bmp); if (!rle_title_o) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to create rle_title_o! \n\r%s\n\r", allegro_error); exit(1); } destroy_bitmap(temp_bmp); /* temp_bmp = create_bitmap(50, 50); clear_bitmap(temp_bmp); circlefill(temp_bmp, 25, 25, 8, COLOUR_GREEN3); menu_tile = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp);*/ /* temp_bmp = load_bitmap("gfx//title_s.bmp", temp_palette); if (!temp_bmp) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to load title_s.bmp! \n\r%s\n\r", allegro_error); exit(1); } rle_title_s = get_rle_sprite(temp_bmp); if (!rle_title_s) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to create rle_title_s! \n\r%s\n\r", allegro_error); exit(1); } destroy_bitmap(temp_bmp); */ /* upgrade_box1 = load_bitmap("gfx//upg_box.bmp", temp_palette); if (!upgrade_box1) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to load upg_box.bmp! \n\r%s\n\r", allegro_error); exit(1); } upgrade_box2 = load_bitmap("gfx//upg_box2.bmp", temp_palette); if (!upgrade_box2) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to load upg_box2.bmp! \n\r%s\n\r", allegro_error); exit(1); } upgrade_box3 = load_bitmap("gfx//upg_box3.bmp", temp_palette); if (!upgrade_box3) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to load upg_box3.bmp! \n\r%s\n\r", allegro_error); exit(1); } */ last_key = NO_KEY; // something meaningless game.duel_mode = 0; game.duel_handicap [0] = 1; game.duel_handicap [1] = 1; game.duel_leader_handicap = 0; game.duel_crawlies = 1; } void menu_loop(void) { which_menu = MENU_MAIN; menu_index_max = 4; menu_index_min = 0; keypress_wait = KP_WAIT_LONG; game.type = GAME_SINGLE; do { // grand(100); menu_counter++; // srand(menu_counter); set_config_int("Misc", "Seed", grand(10000)); if (check_key_disregard_last_key(last_key) == 0) keypress_wait = 0; if (keypress_wait > 0) { keypress_wait --; } make_grid_scroll(); // if (which_menu == MENU_MAIN || which_menu == MENU_SCORES || which_menu == MENU_ENTER_SCORES) if (which_menu == MENU_SCORES || which_menu == MENU_ENTER_SCORES) make_ms_move(); if (ticked == 0) { clear_bitmap(menu_bmp); menu_display(); menu_to_screen(); } menu_input(); slacktime = 0; do { slacktime ++; } while(ticked == 0); ticked --; } while(TRUE); } void menu_display(void) { // text_mode(-1); switch(which_menu) { case MENU_MAIN: menu_display_main(); break; case MENU_OPTIONS: menu_display_main(); menu_display_options(); break; case MENU_SPECIAL: menu_display_main(); menu_display_special(); break; case MENU_DUEL: menu_display_main(); menu_display_duel(); break; case MENU_SCORES: menu_display_scores(); break; case MENU_ENTER_SCORES: menu_display_scores(); break; } } void menu_display_main(void) { // text_mode(-1); // vsync(); // RGB title_colour [1]; static RGB title_colour [1] = {{16,16,16}}; /* int mcn = menu_counter * 2; int mcn2 = menu_counter;// / 2; int mcn3 = menu_counter / 2; if (mcn % 64 < 32) { title_colour[0].r = mcn % 64; } else { title_colour[0].r = 63 - (mcn % 64); } if (mcn2 % 64 < 32) { title_colour[0].g = (63 - mcn2 % 64) / 4; } else { title_colour[0].g = (mcn2 % 64) / 4; } if (mcn3 % 64 < 32) { title_colour[0].b = ((mcn3 + 32) % 64);// / 2; } else { title_colour[0].b = (63 - ((mcn3 + 32) % 64));// / 2; } set_color(252, title_colour);*/ /* mcn = menu_counter * 2; mcn2 = menu_counter;// / 2; mcn3 = menu_counter / 2; if (mcn % 64 >= 32) { title_colour[0].b = (mcn + 32) % 64; } else { title_colour[0].b = 63 - ((mcn + 32) % 64); } if (mcn2 % 64 >= 32) { title_colour[0].g = (63 - mcn2 % 64);// / 2; } else { title_colour[0].g = (mcn2 % 64);// / 2; } if (mcn3 % 64 >= 32) { title_colour[0].r = mcn3 % 64; } else { title_colour[0].r = 63 - (mcn3 % 64); } */ static RGB change [1] = {{1, 0, 0}}; // if (title_colour [1].r >= 60 || title_colour [1].r <= 5 // || /* if (title_colour [0].r >= 60) change[0].r = -1 - grand(5); if (title_colour [0].g >= 60) change[0].g = -1 - grand(5); if (title_colour [0].b >= 60) change[0].b = -1 - grand(5); if (title_colour [0].r <= 10) change[0].r = 1 + grand(5); if (title_colour [0].g <= 10) change[0].g = 1 + grand(5); if (title_colour [0].b <= 10) change[0].b = 1 + grand(5); title_colour [0].r += change [0].r; title_colour [0].g += change [0].g; title_colour [0].b += change [0].b; if (title_colour [0].r > 63) title_colour [0].r = 63; if (title_colour [0].g > 63) title_colour [0].g = 63; if (title_colour [0].b > 63) title_colour [0].b = 63; */ /* if (title_colour [0].r >= 60) { change[0].r = -1 - grand(5); change[0].g *= -1; change[0].b *= -1; } if (title_colour [0].g >= 60) { change[0].r *= -1; change[0].g = -1 - grand(5); change[0].b *= -1; } if (title_colour [0].b >= 60) { change[0].r *= -1; change[0].g *= -1; change[0].b = -1 - grand(5); } if (title_colour [0].r <= 10) { change[0].r = 1 + grand(5); change[0].g *= -1; change[0].b *= -1; } if (title_colour [0].g <= 10) { change[0].r *= -1; change[0].g = 1 + grand(5); change[0].b *= -1; } if (title_colour [0].b <= 10) { change[0].r *= -1; change[0].g *= -1; change[0].b = 1 + grand(5); } title_colour [0].r += change [0].r; title_colour [0].g += change [0].g; title_colour [0].b += change [0].b; */ if (menu_counter % 2 == 0) { if (title_colour [0].r >= 55 || title_colour [0].g >= 55 || title_colour [0].b >= 55) { change [0].r = abs(change[0].r) * -1; change [0].g = abs(change[0].g) * -1; change [0].b = abs(change[0].b) * -1; if (grand(5) == 0) { change[0].r = grand(3) * -1; change[0].g = grand(3) * -1; change[0].b = grand(3) * -1; } // change [0].r *= -1; // change [0].g *= -1; // change [0].b *= -1; } if (title_colour [0].r <= 10 || title_colour [0].g <= 10 || title_colour [0].b <= 10) { if (title_colour [0].r <= 15 && title_colour [0].g <= 15 && title_colour [0].b <= 15) { change[0].r = 0; change[0].g = 0; change[0].b = 0; } if (grand(3) != 0) { change[0].r = grand(3); change[0].g *= -1; change[0].b *= -1; } else { if (grand(3) == 0) { change[0].r *= -1; change[0].g = grand(3); change[0].b *= -1; } else { if (grand(3) == 0) { change[0].r *= -1; change[0].g *= -1; change[0].b = grand(3); } } } if (change[0].r + change[0].g + change[0].b == 0) change[0].r = 1; } title_colour [0].r += change [0].r; title_colour [0].g += change [0].g; title_colour [0].b += change [0].b; if (title_colour [0].r > 55) title_colour [0].r = 55; if (title_colour [0].g > 55) title_colour [0].g = 55; if (title_colour [0].b > 55) title_colour [0].b = 55; } set_color(255, title_colour); /* int mcn = menu_counter; int mcn2 = menu_counter / 2; int mcn3 = menu_counter / 4; if (mcn % 64 < 32) { title_colour[0].r = mcn % 64; title_colour[0].g = (63 - mcn2 % 64) / 4; title_colour[0].b = ((mcn3 + 32) % 64);// / 2; } else { title_colour[0].r = 63 - (mcn % 64); title_colour[0].g = (mcn2 % 64) / 4; title_colour[0].b = (63 - ((mcn3 + 32) % 64));// / 2; } set_color(252, title_colour); mcn = menu_counter / 4; mcn2 = menu_counter / 8; mcn3 = menu_counter / 16; if (mcn % 64 >= 32) { title_colour[0].r = mcn3 % 64; title_colour[0].g = (63 - mcn2 % 64);// / 2; title_colour[0].b = (mcn + 32) % 64; } else { title_colour[0].r = 63 - (mcn3 % 64); title_colour[0].g = (mcn2 % 64);// / 2; title_colour[0].b = 63 - ((mcn + 32) % 64); } set_color(255, title_colour);*/ // RGB title_colour1; //RGB title_colour2; /* rectfill(menu_bmp, 10, 10, 630, 470, COLOUR_GREY1); rect(menu_bmp, 10, 10, 630, 470, COLOUR_GREEN4); rect(menu_bmp, 9, 9, 631, 471, COLOUR_GREEN6); rect(menu_bmp, 8, 8, 632, 472, COLOUR_GREEN8); draw_scrolling_grid(11, 11, 629, 469, COLOUR_GREEN3); */ show_grid(COLOUR_GREEN3, COLOUR_GREEN8); // textprintf_centre_ex(menu_bmp, font, 300, 50, COLOUR_YELLOW8 - (menu_counter / 4) % 7, "L___a___c___e___w___i___n___g}"); // textprintf_centre_ex(menu_bmp, font2, 300, 50, COLOUR_RED1 + (menu_counter / 4) % 7, "L___a___c___e___w___i___n___g}"); // draw_rle_sprite(menu_bmp, rle_title_i, 30, 0); draw_rle_sprite(menu_bmp, rle_title_o, 10, 105); // draw_rle_sprite(menu_bmp, rle_title_s, 280, 173); rectfill(menu_bmp, 340, 0, 346, 480, 255); rectfill(menu_bmp, 0, 200, 15, 205, 255); rectfill(menu_bmp, 640, 200, 615, 205, 255); // int col1 = COLOUR_GREY3; // int col2 = COLOUR_GREY5; int scol1 = COLOUR_GREEN8 - (menu_counter / 3) % 3; int scol2 = COLOUR_BLUE6 + (menu_counter / 3) % 3; scol1 = 255; scol2 = 255; int mx = 340; // int my = 212; int my = 5; int my2 = 200; int mys = 55; if (menu_index == 0 && which_menu == MENU_MAIN) { textprintf_right_ex(menu_bmp, font2, mx, my, scol1, -1, "{____start__game___"); textprintf_right_ex(menu_bmp, font, mx, my, -1, -1, "{____start__game___"); // textprintf_right_ex(menu_bmp, font2, 400, 120, COLOUR_WHITE, "Start} Game}"); // textprintf_right_ex(menu_bmp, font, 400, 120, COLOUR_WHITE, "Start} Game}"); } else textprintf_right_ex(menu_bmp, font, mx, my, -1, -1, "{____start__game___"); if (menu_index == 1 && which_menu == MENU_MAIN) { textprintf_right_ex(menu_bmp, font2, mx, my + mys, scol1, -1, "{____special___"); textprintf_right_ex(menu_bmp, font, mx, my + mys, -1, -1, "{____special___"); } else textprintf_right_ex(menu_bmp, font, mx, my + mys, -1, -1, "{____special___"); if (menu_index == 2 && which_menu == MENU_MAIN) { textprintf_right_ex(menu_bmp, font2, mx, my2 + mys * 2, scol1, -1, "{____options___"); textprintf_right_ex(menu_bmp, font, mx, my2 + mys * 2, -1, -1, "{____options___"); } else textprintf_right_ex(menu_bmp, font, mx, my2 + mys * 2, -1, -1, "{____options___"); if (menu_index == 3 && which_menu == MENU_MAIN) { textprintf_right_ex(menu_bmp, font2, mx, my2 + mys * 3, scol1, -1, "{____high__scores___"); textprintf_right_ex(menu_bmp, font, mx, my2 + mys * 3, -1, -1, "{____high__scores___"); } else textprintf_right_ex(menu_bmp, font, mx, my2 + mys * 3, -1, -1, "{____high__scores___"); if (menu_index == 4 && which_menu == MENU_MAIN) { textprintf_right_ex(menu_bmp, font2, mx, my2 + mys * 4, scol1, -1, "{____exit___"); textprintf_right_ex(menu_bmp, font, mx, my2 + mys * 4, -1, -1, "{____exit___"); } else textprintf_right_ex(menu_bmp, font, mx, my2 + mys * 4, -1, -1, "{____exit___"); /* textprintf_centre_ex(menu_bmp, font, 300, 300, COLOUR_YELLOW7, "Space} For} 1P} Enter} For} 2P}..."); textprintf_centre_ex(menu_bmp, font2, 300, 300, COLOUR_RED7, "Space} For} 1P} Enter} For} 2P}...");*/ } void menu_display_options(void) { rectfill(menu_bmp, 180, 50, 440, 400, COLOUR_YELLOW1); rect(menu_bmp, 180, 50, 440, 400, COLOUR_YELLOW6); rect(menu_bmp, 179, 49, 441, 401, COLOUR_YELLOW7); rect(menu_bmp, 178, 48, 442, 402, COLOUR_YELLOW8); int i; int ox = 350, oy = 11, oys = 75; int col; char ostr [50]; // char istr [10]; char sstr [30]; for (i = 0; i < 28; i ++) { col = COLOUR_GREEN4; if (i == menu_index) col = COLOUR_ORANGE8; switch(i) { case 0: col = COLOUR_GREY6; strcpy(ostr, "General Options"); break; case 1: strcpy(ostr, "Sound - "); if (options.sound_init == 0) strcat(ostr, "Disabled in config file"); else { switch(options.sound_mode) { case SOUNDMODE_OFF: strcat(ostr, "Off"); break; case SOUNDMODE_MONO: strcat(ostr, "On (Mono)"); break; case SOUNDMODE_STEREO: strcat(ostr, "On (Stereo)"); break; case SOUNDMODE_REVERSED: strcat(ostr, "On (Reverse Stereo)"); break; default: strcat(ostr, "Buggy sound settings?"); break; } } break; case 2: strcpy(ostr, "Sound Effects Volume - "); if (options.sound_volume == 0) { strcat(ostr, "Off"); } else // strcat(ostr, itoa(options.sound_volume, istr, 10)); anum(ostr, options.sound_volume); break; case 3: strcpy(ostr, "Ambience Volume - "); if (options.ambience_volume == 0) { strcat(ostr, "Off"); } else // strcat(ostr, itoa(options.ambience_volume, istr, 10)); anum(ostr, options.ambience_volume); break; case 4: strcpy(ostr, "Video Sync - "); if (options.run_vsync == 0) strcat(ostr, "Off"); else strcat(ostr, "On"); break; case 5: strcpy(ostr, "Test Speakers"); break; case 6: strcpy(ostr, "Test Keys"); break; case 7: strcpy(ostr, "Resolution - "); switch(options.resolution) { case 0: strcat(ostr, "640x480 full"); break; case 1: strcat(ostr, "800x600 full"); break; case 2: strcat(ostr, "640x480 window"); break; case 3: strcat(ostr, "800x600 window"); break; } break; case 8: strcpy(ostr, "Colour Text - "); if (options.colour_text == 0) strcat(ostr, "Off"); else strcat(ostr, "On"); break; case 9: strcpy(ostr, ""); break; case 10: col = COLOUR_GREY6; strcpy(ostr, "Player 1 Keys"); break; case 11: strcpy(ostr, "Forwards - "); scancode_to_keyname(player[0].keys [CMD_THRUST], sstr); strcat(ostr, sstr); break; case 12: strcpy(ostr, "Left - "); scancode_to_keyname(player[0].keys [CMD_LEFT], sstr); strcat(ostr, sstr); break; case 13: strcpy(ostr, "Right - "); scancode_to_keyname(player[0].keys [CMD_RIGHT], sstr); strcat(ostr, sstr); break; case 14: strcpy(ostr, "Brake - "); scancode_to_keyname(player[0].keys [CMD_BRAKE], sstr); strcat(ostr, sstr); break; case 15: strcpy(ostr, "Fire Darts - "); scancode_to_keyname(player[0].keys [CMD_FIRE1], sstr); strcat(ostr, sstr); break; case 16: strcpy(ostr, "Fire Secondary - "); scancode_to_keyname(player[0].keys [CMD_FIRE2], sstr); strcat(ostr, sstr); break; /* case 15: strcpy(ostr, "Upgrade - "); strcat(ostr, scancode_to_keyname(player[0].keys [CMD_UPGRADE])); break; case 16: strcpy(ostr, "Slide Left - "); strcat(ostr, scancode_to_keyname(player[0].keys [CMD_LEFT1])); break; case 17: strcpy(ostr, "Slide Right - "); strcat(ostr, scancode_to_keyname(player[0].keys [CMD_RIGHT1])); break;*/ case 17: strcpy(ostr, "Toggle Linked Fire - "); scancode_to_keyname(player[0].keys [CMD_LINK], sstr); strcat(ostr, sstr); break; case 18: col = COLOUR_GREY6; strcpy(ostr, "Player 2 Keys"); break; case 19: strcpy(ostr, "Forwards - "); scancode_to_keyname(player[1].keys [CMD_THRUST], sstr); strcat(ostr, sstr); break; case 20: strcpy(ostr, "Left - "); scancode_to_keyname(player[1].keys [CMD_LEFT], sstr); strcat(ostr, sstr); break; case 21: strcpy(ostr, "Right - "); scancode_to_keyname(player[1].keys [CMD_RIGHT], sstr); strcat(ostr, sstr); break; case 22: strcpy(ostr, "Brake - "); scancode_to_keyname(player[1].keys [CMD_BRAKE], sstr); strcat(ostr, sstr); break; case 23: strcpy(ostr, "Fire Darts - "); scancode_to_keyname(player[1].keys [CMD_FIRE1], sstr); strcat(ostr, sstr); break; case 24: strcpy(ostr, "Fire Secondary - "); scancode_to_keyname(player[1].keys [CMD_FIRE2], sstr); strcat(ostr, sstr); break; /* case 23: strcpy(ostr, "Upgrade - "); strcat(ostr, scancode_to_keyname(player[1].keys [CMD_UPGRADE])); break; case 27: strcpy(ostr, "Slide Left - "); strcat(ostr, scancode_to_keyname(player[1].keys [CMD_LEFT1])); break; case 28: strcpy(ostr, "Slide Right - "); strcat(ostr, scancode_to_keyname(player[1].keys [CMD_RIGHT1])); break;*/ case 25: strcpy(ostr, "Toggle Linked Fire - "); scancode_to_keyname(player[1].keys [CMD_LINK], sstr); strcat(ostr, sstr); break; case 26: strcpy(ostr, ""); // strcat(ostr, scancode_to_keyname(player[1].keys [CMD_LINK]) break; case 27: strcpy(ostr, "Exit"); break; } textprintf_right_ex(menu_bmp, small_font, ox, oys + oy * i, col, -1, ostr); } /* textprintf_centre_ex(menu_bmp, font, 300, 200, COLOUR_YELLOW8 - (menu_counter / 4) % 7, "L___a___c___e___w___i___n___g}"); textprintf_centre_ex(menu_bmp, font2, 300, 200, COLOUR_RED1 + (menu_counter / 4) % 7, "L___a___c___e___w___i___n___g}"); textprintf_centre_ex(menu_bmp, font, 300, 300, COLOUR_YELLOW7, "Space} For} 1P} Enter} For} 2P}..."); textprintf_centre_ex(menu_bmp, font2, 300, 300, COLOUR_RED7, "Space} For} 1P} Enter} For} 2P}..."); */ } int special_jump(int direction) { if (which_menu != MENU_SPECIAL) return 0; switch(menu_index)// + direction) { // case 5: // case 6: case SPECIAL_MODES: case SPECIAL_SPACE1: case SPECIAL_SPACE2: return 1; case SPECIAL_PURPLE: if (options.unlock_purple != UNLOCK_PURPLE) return 1; return 0; case SPECIAL_VOID: if (options.unlock_void != UNLOCK_VOID) return 1; return 0; case SPECIAL_GOD: if (options.unlock_god != UNLOCK_GOD) return 1; return 0; } return 0; } int option_jump(int direction) { if (which_menu == MENU_SPECIAL) return special_jump(direction); if (which_menu != MENU_OPTIONS) return 0; switch(menu_index)// + direction) { // case 5: // case 6: case 9: case 10: case 18: case 26: return 1; } return 0; } void menu_display_duel(void) { rectfill(menu_bmp, 180, 50, 440, 400, COLOUR_GREEN1); rect(menu_bmp, 180, 50, 440, 400, COLOUR_GREEN6); rect(menu_bmp, 179, 49, 441, 401, COLOUR_GREEN7); rect(menu_bmp, 178, 48, 442, 402, COLOUR_GREEN8); textprintf_centre_ex(menu_bmp, font2, 320, 90, COLOUR_RED8 - (menu_counter / 4) % 4, -1, "{_duel_}"); textprintf_centre_ex(menu_bmp, font, 320, 90, -1, -1, "{_duel_}"); // textprintf_centre_ex(menu_bmp, font, 320, 110, COLOUR_ORANGE8, "K_e_y_s}"); // textprintf_centre_ex(menu_bmp, font2, 320, 110, COLOUR_YELLOW8, "K_e_y_s}"); int i; int ox = 320, oy = 11, oys = 200; int col; char ostr [50]; for (i = 0; i < DUEL_END; i ++) { col = COLOUR_GREEN6; if (i == menu_index) col = COLOUR_YELLOW8; switch(i) { case DUEL_OPTIONS: col = COLOUR_GREY6; strcpy(ostr, "Duel Options - Space or Enter to select"); break; case DUEL_MODE: strcpy(ostr, "Victory goes to the "); switch(game.duel_mode) { case DUEL_3_MINUTES: strcat(ostr, "winner after 3 minutes"); break; case DUEL_10_MINUTES: strcat(ostr, "winner after 10 minutes"); break; case DUEL_10_POINTS: strcat(ostr, "first to 10 points"); break; case DUEL_30_POINTS: strcat(ostr, "first to 30 points"); break; } break; case DUEL_ENEMIES: strcpy(ostr, "Enemies - "); switch(game.duel_crawlies) { case 0: strcat(ostr, "None"); break; case 1: strcat(ostr, "A few"); break; case 2: strcat(ostr, "Plentiful"); break; case 3: strcat(ostr, "Swarming"); break; } break; case DUEL_LEADER_HANDICAP: strcpy(ostr, "Leader Handicap - "); switch(game.duel_leader_handicap) { case 0: strcat(ostr, "None"); break; case 1: strcat(ostr, "A little"); break; case 2: strcat(ostr, "A lot"); break; } break; case DUEL_HANDICAP_P1: strcpy(ostr, "Player 1 Hull - "); switch(game.duel_handicap [0]) { case 0: strcat(ostr, "75%%"); break; case 1: strcat(ostr, "100%%"); break; case 2: strcat(ostr, "120%%"); break; case 3: strcat(ostr, "150%%"); break; } break; case DUEL_HANDICAP_P2: strcpy(ostr, "Player 2 Hull - "); switch(game.duel_handicap [1]) { case 0: strcat(ostr, "75%%"); break; case 1: strcat(ostr, "100%%"); break; case 2: strcat(ostr, "120%%"); break; case 3: strcat(ostr, "150%%"); break; } break; case DUEL_START: strcpy(ostr, "Start Duel"); break; case DUEL_EXIT: strcpy(ostr, "Exit"); break; } textprintf_centre_ex(menu_bmp, small_font, ox, oys + oy * i, col, -1, ostr); } /* textprintf_centre_ex(menu_bmp, font, 300, 200, COLOUR_YELLOW8 - (menu_counter / 4) % 7, "L___a___c___e___w___i___n___g}"); textprintf_centre_ex(menu_bmp, font2, 300, 200, COLOUR_RED1 + (menu_counter / 4) % 7, "L___a___c___e___w___i___n___g}"); textprintf_centre_ex(menu_bmp, font, 300, 300, COLOUR_YELLOW7, "Space} For} 1P} Enter} For} 2P}..."); textprintf_centre_ex(menu_bmp, font2, 300, 300, COLOUR_RED7, "Space} For} 1P} Enter} For} 2P}..."); */ } void menu_display_special(void) { rectfill(menu_bmp, 180, 50, 440, 400, COLOUR_BLUE1); rect(menu_bmp, 180, 50, 440, 400, COLOUR_BLUE6); rect(menu_bmp, 179, 49, 441, 401, COLOUR_BLUE7); rect(menu_bmp, 178, 48, 442, 402, COLOUR_BLUE8); textprintf_centre_ex(menu_bmp, font2, 320, 90, COLOUR_YELLOW8 - (menu_counter / 4) % 4, -1, "{_special_}"); textprintf_centre_ex(menu_bmp, font, 320, 90, -1, -1, "{_special_}"); int i; int ox = 320, oy = 11, oys = 200; int col; char ostr [50]; for (i = 0; i < SPECIAL_END; i ++) { col = COLOUR_GREY5; if (i == menu_index) col = COLOUR_RED8; switch(i) { case SPECIAL_TIME_ATTACK: strcpy(ostr, "Start Time Attack"); break; case SPECIAL_DUEL: strcpy(ostr, "Start 2-Player Duel"); break; case SPECIAL_MODES: strcpy(ostr, "Special Modes"); col = COLOUR_GREY4; break; case SPECIAL_PURPLE: if (options.unlock_purple != UNLOCK_PURPLE) { strcpy(ostr, "You haven't unlocked Purple Mode"); col = COLOUR_GREY3; if (i == menu_index) col = COLOUR_RED6; break; } strcpy(ostr, "Purple Mode - "); switch(game.mode_purple) { case 0: strcat(ostr, "Off"); break; case 1: strcat(ostr, "On!"); col = TRANS_PURPLE; if (i == menu_index) col = COLOUR_BLUE8; break; } break; case SPECIAL_VOID: if (options.unlock_void != UNLOCK_VOID) { strcpy(ostr, "You haven't unlocked Night Mode"); col = COLOUR_GREY3; if (i == menu_index) col = COLOUR_RED6; break; } strcpy(ostr, "Night Mode - "); // renamed after I added the palette effect - before it just made the background GC_GREY1 and disabled the scanner switch(game.mode_void) { case 0: strcat(ostr, "Off"); break; case 1: strcat(ostr, "On!"); if (i == menu_index) col = COLOUR_RED6; break; } break; case SPECIAL_GOD: if (options.unlock_god != UNLOCK_GOD) { strcpy(ostr, "You haven't unlocked God Mode"); col = COLOUR_GREY3; if (i == menu_index) col = COLOUR_RED6; break; } strcpy(ostr, "God Mode - "); switch(game.mode_god) { case 0: strcat(ostr, "Off"); break; case 1: strcat(ostr, "On!"); if (i == menu_index) col = COLOUR_RED8; break; } break; case SPECIAL_SPACE1: case SPECIAL_SPACE2: strcpy(ostr, ""); break; case SPECIAL_EXIT: strcpy(ostr, "Exit"); break; } textprintf_centre_ex(menu_bmp, small_font, ox, oys + oy * i, col, -1, ostr); } } int check_key(int scode) { if (keypress_wait == 0) last_key = NO_KEY; if (last_key == scode) { if (key [scode]) return 0; else last_key = NO_KEY; } if (key [scode]) { last_key = scode; return 1; } return 0; } int check_key_disregard_last_key(int scode) { if (key [scode]) return 1; return 0; } void menu_input(void) { clear_keybuf(); if (keypress_wait > 0) return; if (which_menu == MENU_ENTER_SCORES) { int done = 0; if (check_key(KEY_ESC)) { save_config(); change_menu(MENU_SCORES); // last_key = KEY_ESC; // menu_sound2(); menu_sound2(); return; } if (game.type == GAME_SINGLE) done = enter_score_name_single(entering_score);//hs_single[entering_score].name); if (game.type == GAME_COOP) done = enter_score_name_coop(entering_score);//hs_coop[entering_score].name); if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) done = enter_score_name_ta(); if (done == 1) { save_config(); change_menu(MENU_SCORES); } return; } if (check_key(KEY_2_PAD) || check_key(KEY_DOWN)) { do { if (menu_index < menu_index_max) menu_index ++; else menu_index = menu_index_min; } while (option_jump(1) == 1); keypress_wait = KP_WAIT_SHORT; menu_sound1(); // menu_sound1(); } if (check_key(KEY_8_PAD) || check_key(KEY_UP)) { do { if (menu_index > menu_index_min) menu_index --; else menu_index = menu_index_max; } while (option_jump(-1) == 1); keypress_wait = KP_WAIT_SHORT; menu_sound1(); // menu_sound1(); } if (check_key(KEY_ESC)) { switch(which_menu) { case MENU_MAIN: if (keypress_wait == 0 && last_key != KEY_ESC) { menu_sound2(); quit_game(); } break; case MENU_DUEL: case MENU_OPTIONS: case MENU_SPECIAL: change_menu(MENU_MAIN); keypress_wait = KP_WAIT_LONG; menu_sound2(); break; case MENU_SCORES: change_menu(MENU_MAIN); keypress_wait = KP_WAIT_LONG; menu_sound2(); break; } } // this has to be after the key_esc thing or pressing escape in some // sub-menus will trigger it, as key_waiting won't be checked after // the submenus return the menu_trigger call. // if (key [KEY_ENTER] || key [KEY_ENTER_PAD] || key [KEY_SPACE]) //if (check_key(KEY_ENTER) || check_key(KEY_ENTER_PAD) || check_key(KEY_SPACE)) if (check_key(KEY_ENTER) || check_key(KEY_SPACE)) { menu_trigger(); } } void menu_trigger(void) { keypress_wait = KP_WAIT_LONG; switch(which_menu) { case MENU_MAIN: switch(menu_index) { case 0: menu_sound2(); choose_ships(); // start_game_from_menu(GAME_SINGLE); // if it's going to be coop, this is set after each player has had a chance to join break; // case 1: // start_game_from_menu(GAME_COOP); // break; case 1: change_menu(MENU_SPECIAL); menu_sound2(); // display_victory_screen(); break; case 2: change_menu(MENU_OPTIONS); menu_sound2(); break; case 3: change_menu(MENU_SCORES); menu_sound2(); // high_score_list(); break; case 4: menu_sound2(); quit_game(); break; } break; case MENU_OPTIONS: if (menu_index == 27) { menu_sound2(); change_menu(MENU_MAIN); break; } if (menu_index < 10) { switch(menu_index) { case 1: if (options.sound_mode == SOUNDMODE_REVERSED) options.sound_mode = SOUNDMODE_OFF; else options.sound_mode++; menu_sound1(); return; case 2: if (options.sound_volume >= 100) options.sound_volume = 0; else options.sound_volume += 20; menu_sound1(); return; case 3: if (options.ambience_volume >= 100) options.ambience_volume = 0; else options.ambience_volume += 20; menu_sound1(); return; case 4: if (options.run_vsync == 1) options.run_vsync = 0; else options.run_vsync = 1; menu_sound1(); return; case 5: test_speakers(); ticked = 0; // test speakers return; case 6: menu_sound2(); jam_keys(); return; case 7: if (options.resolution == 3) options.resolution = 0; else options.resolution ++; /* if (options.resolution == GMODE_800_600) options.resolution = GMODE_640_480; else options.resolution = GMODE_800_600;*/ resolution_change(); menu_sound1(); break; case 8: if (options.colour_text == 1) options.colour_text = 0; else options.colour_text = 1; menu_sound1(); return; } } if (option_index() != -1) { menu_sound2(); enter_keystroke(); menu_sound2(); } break; case MENU_SCORES: menu_sound2(); change_menu(MENU_MAIN); break; case MENU_ENTER_SCORES: menu_sound2(); change_menu(MENU_MAIN); break; // return from this through enter_scores (or whatever) case MENU_SPECIAL: switch(menu_index) { case SPECIAL_DUEL: menu_sound2(); change_menu(MENU_DUEL); break; case SPECIAL_TIME_ATTACK: game.type = GAME_TIME_ATTACK; menu_sound2(); choose_ships(); break; case SPECIAL_EXIT: menu_sound2(); change_menu(MENU_MAIN); break; case SPECIAL_PURPLE: if (options.unlock_purple == 0) break; if (game.mode_purple == 0) game.mode_purple = 1; else game.mode_purple = 0; menu_sound2(); break; case SPECIAL_VOID: if (options.unlock_void == 0) break; if (game.mode_void == 0) { game.mode_void = 1; set_dark_palette(); } else { game.mode_void = 0; set_light_palette(); } menu_sound2(); break; case SPECIAL_GOD: if (options.unlock_god == 0) break; if (game.mode_god == 0) game.mode_god = 1; else game.mode_god = 0; menu_sound2(); break; } break; case MENU_DUEL: switch(menu_index) { case DUEL_START: game.type = GAME_DUEL; menu_sound2(); choose_ships(); break; case DUEL_ENEMIES: if (game.duel_crawlies < 3) game.duel_crawlies ++; else game.duel_crawlies = 0; menu_sound2(); break; case DUEL_MODE: if (game.duel_mode < 3) game.duel_mode ++; else game.duel_mode = 0; menu_sound2(); break; case DUEL_LEADER_HANDICAP: if (game.duel_leader_handicap < 2) game.duel_leader_handicap ++; else game.duel_leader_handicap = 0; menu_sound2(); break; case DUEL_HANDICAP_P1: if (game.duel_handicap [0] < 3) game.duel_handicap [0] ++; else game.duel_handicap [0] = 0; menu_sound2(); break; case DUEL_HANDICAP_P2: if (game.duel_handicap [1] < 3) game.duel_handicap [1] ++; else game.duel_handicap [1] = 0; menu_sound2(); break; case DUEL_EXIT: change_menu(MENU_MAIN); menu_sound2(); break; } break; } } void enter_keystroke(void) { rectfill(screen, 400, 210, 550, 280, COLOUR_GREY2); rect(screen, 400, 210, 550, 280, COLOUR_GREY6); rect(screen, 401, 211, 549, 279, COLOUR_GREY5); rect(screen, 402, 212, 548, 278, COLOUR_GREY4); rect(screen, 403, 213, 547, 277, COLOUR_GREY3); textprintf_right_ex(screen, small_font, 500, 240, COLOUR_WHITE, -1, "Press a key..."); clear_keybuf(); int inputted = KEY_ESC; int i; rest(200); // to clear the enter or space key do { for (i = KEY_A; i < KEY_CAPSLOCK + 1; i ++) { if (check_key(i)) { inputted = i; } } } while(acceptable_char(inputted) == 0); /* do { inputted = readkey(); } while(acceptable_char(inputted >> 8) == 0); inputted = inputted >> 8; */ if (option_index() == -1) return; if (menu_index < 19) player[0].keys [option_index()] = inputted; else player[1].keys [option_index()] = inputted; ticked = 0; } int option_index(void) { switch(menu_index) { case 11: case 19: return CMD_THRUST; case 12: case 20: return CMD_LEFT; case 13: case 21: return CMD_RIGHT; case 14: case 22: return CMD_BRAKE; case 15: case 23: return CMD_FIRE1; case 16: case 24: return CMD_FIRE2; // case 15: // case 26: // return CMD_UPGRADE; // case 16: // case 27: // return CMD_LEFT1; // case 17: // case 28: // return CMD_RIGHT1; case 17: case 25: return CMD_LINK; } return -1; } void test_speakers(void) { rectfill(screen, 400, 210, 550, 280, COLOUR_GREY2); rect(screen, 400, 210, 550, 280, COLOUR_GREY6); rect(screen, 401, 211, 549, 279, COLOUR_GREY5); rect(screen, 402, 212, 548, 278, COLOUR_GREY4); rect(screen, 403, 213, 547, 277, COLOUR_GREY3); if (options.sound_init == 0) { textprintf_right_ex(screen, small_font, 520, 240, COLOUR_WHITE, -1, "Sound disabled."); rest(1000); return; } textprintf_right_ex(screen, small_font, 520, 240, COLOUR_WHITE, -1, "Testing left speaker. . ."); if (options.sound_mode == SOUNDMODE_REVERSED) play_wav2(NWAV_PPIPE, 800, 255, 0); else play_wav2(NWAV_PPIPE, 800, 255, 255); rest(1000); rectfill(screen, 404, 214, 546, 276, COLOUR_GREY2); textprintf_right_ex(screen, small_font, 520, 240, COLOUR_WHITE, -1, "Testing right speaker. . ."); if (options.sound_mode == SOUNDMODE_REVERSED) play_wav2(NWAV_PPIPE, 800, 255, 255); else play_wav2(NWAV_PPIPE, 800, 255, 0); rest(1000); } void resolution_change(void) { rectfill(screen, 300, 210, 600, 340, COLOUR_BLUE2); rect(screen, 300, 210, 600, 340, COLOUR_BLUE6); rect(screen, 301, 211, 599, 339, COLOUR_BLUE5); rect(screen, 302, 212, 598, 338, COLOUR_BLUE4); rect(screen, 303, 213, 597, 337, COLOUR_BLUE3); textprintf_centre_ex(screen, small_font, 450, 240, COLOUR_WHITE, -1, "Screen resolution changed."); textprintf_centre_ex(screen, small_font, 450, 250, COLOUR_WHITE, -1, "You have to restart the game"); textprintf_centre_ex(screen, small_font, 450, 260, COLOUR_WHITE, -1, "for this change to take effect."); textprintf_centre_ex(screen, small_font, 450, 280, COLOUR_WHITE, -1, "If it doesn't work, edit the file"); textprintf_centre_ex(screen, small_font, 450, 290, COLOUR_WHITE, -1, "overgod.cfg in this directory and"); textprintf_centre_ex(screen, small_font, 450, 300, COLOUR_WHITE, -1, "change the resolution setting to zero."); rest(100); textprintf_centre_ex(screen, small_font, 450, 320, COLOUR_GREY6, -1, "Press 'Y' to continue."); do {} while (key[KEY_Y] == 0); // last_key = KEY_SPACE; // keypress_wait = KP_WAIT_LONG; } void start_game_from_menu(int game_type) { game.type = game_type; vsync(); clear_bitmap(screen); begin_game(); ticked = 0; game_loop(); clear_bitmap(screen); if (arena.level == 16) { display_victory_screen(); } if (arena.level > 5 && options.unlock_purple == 0) { options.unlock_purple = UNLOCK_PURPLE; set_config_int("Unlock", "Purple", UNLOCK_PURPLE); unlock_screen(UNLOCK_PURPLE); } if (arena.level > 10 && options.unlock_void == 0) { options.unlock_void = UNLOCK_VOID; set_config_int("Unlock", "Void", UNLOCK_VOID); unlock_screen(UNLOCK_VOID); } if (arena.level > 15 && options.unlock_god == 0) { options.unlock_god = UNLOCK_GOD; set_config_int("Unlock", "God", UNLOCK_GOD); unlock_screen(UNLOCK_GOD); } check_high_scores(); } void change_menu(int to_which) { which_menu = to_which; keypress_wait = KP_WAIT_LONG; switch(which_menu) { default: case MENU_MAIN: game.type = GAME_SINGLE; which_menu = MENU_MAIN; menu_index = 0; menu_index_max = 4; menu_index_min = 0; save_config(); break; case MENU_OPTIONS: which_menu = MENU_OPTIONS; menu_index = 1; menu_index_max = 27; menu_index_min = 1; break; case MENU_SPECIAL: which_menu = MENU_SPECIAL; menu_index = 0; menu_index_max = SPECIAL_END - 1; menu_index_min = 0; break; case MENU_DUEL: which_menu = MENU_DUEL; menu_index = 1; menu_index_max = DUEL_END - 1; menu_index_min = 1; break; case MENU_SCORES: init_ms(); which_menu = MENU_SCORES; menu_index = 1; menu_index_max = 31; menu_index_min = 1; break; case MENU_ENTER_SCORES: init_ms(); which_menu = MENU_ENTER_SCORES; menu_index = 1; menu_index_max = 31; menu_index_min = 1; break; } } void choose_ships(void) { player[0].ship = 0; player[1].ship = 0; game.single_player = 0; game.users = 1; int county = 0; int keypress_wait1 = KP_WAIT_SHORT; int keypress_wait2 = KP_WAIT_SHORT; int waiting = 5; int p1_active = 0; int p2_active = 0; int p1_chosen = 0; int p2_chosen = 0; int game_type = -1; if (game.type == GAME_DUEL) { p1_active = 1; p2_active = 1; } ticked = 0; do { menu_counter ++; if (p1_active && !p1_chosen)// && keypress_wait1 == 0) { if (check_key(player[0].keys [CMD_LEFT])) { if (player[0].ship == 0) player[0].ship = 8; else player[0].ship --; menu_sound1(); keypress_wait1 = waiting; } if (check_key(player[0].keys [CMD_RIGHT])) { player[0].ship ++; if (player[0].ship == 9) player[0].ship = 0; keypress_wait1 = waiting; menu_sound1(); } if (check_key(player[0].keys [CMD_FIRE1])) { p1_chosen = 1; keypress_wait1 = waiting; menu_sound2(); } if (check_key(player[0].keys [CMD_THRUST])) { if (player[0].ship < 3) player[0].ship += 6; else player[0].ship -= 3; keypress_wait1 = waiting; menu_sound1(); } if (check_key(player[0].keys [CMD_BRAKE])) { if (player[0].ship > 5) player[0].ship -= 6; else player[0].ship += 3; keypress_wait1 = waiting; menu_sound1(); } } else { if (check_key(player[0].keys [CMD_FIRE1]))// && keypress_wait1 == 0) { p1_active = 1; keypress_wait1 = waiting; menu_sound2(); } } if (p2_active && !p2_chosen)// && keypress_wait2 == 0) { if (check_key(player[1].keys [CMD_LEFT])) { if (player[1].ship == 0) player[1].ship = 8; else player[1].ship --; keypress_wait2 = waiting; menu_sound1(); } if (check_key(player[1].keys [CMD_RIGHT])) { player[1].ship ++; if (player[1].ship == 9) player[1].ship = 0; keypress_wait2 = waiting; menu_sound1(); } if (check_key(player[1].keys [CMD_FIRE1])) { p2_chosen = 1; keypress_wait2 = waiting; menu_sound2(); } if (check_key(player[1].keys [CMD_THRUST])) { if (player[1].ship < 3) player[1].ship += 6; else player[1].ship -= 3; keypress_wait2 = waiting; menu_sound1(); } if (check_key(player[1].keys [CMD_BRAKE])) { if (player[1].ship > 5) player[1].ship -= 6; else player[1].ship += 3; keypress_wait2 = waiting; menu_sound1(); } } else { if (check_key(player[1].keys [CMD_FIRE1]))// && keypress_wait2 == 0) { p2_active = 1; keypress_wait2 = waiting; menu_sound2(); } } if (keypress_wait1 > 0) keypress_wait1 --; if (keypress_wait2 > 0) keypress_wait2 --; make_grid_scroll(); if (ticked == 0) { display_ship_choice(0, p1_active, p2_active, p1_chosen, p2_chosen); menu_to_screen(); } do { county ++; } while (ticked == 0); ticked --; if (p1_chosen == 1 && p2_active == 0) { if (game.type == GAME_TIME_ATTACK) game_type = GAME_TIME_ATTACK; else game_type = GAME_SINGLE; game.single_player = 0; } if (p2_chosen == 1 && p1_active == 0) { if (game.type == GAME_TIME_ATTACK) game_type = GAME_TIME_ATTACK; else game_type = GAME_SINGLE; game.single_player = 1; } if (p1_chosen == 1 && p2_chosen == 1) { game_type = GAME_COOP; if (game.type == GAME_DUEL) game_type = GAME_DUEL; if (game.type == GAME_TIME_ATTACK) game_type = GAME_TIME_ATTACK_COOP; } if (game_type == GAME_TIME_ATTACK_COOP || game_type == GAME_TIME_ATTACK) change_menu(MENU_MAIN); if (game_type != -1) { if (player[0].ship == 8) player[0].ship = grand(8); if (player[1].ship == 8) player[1].ship = grand(8); start_game_from_menu(game_type); return; } if (check_key(KEY_ESC)) { keypress_wait = KP_WAIT_LONG; last_key = KEY_ESC; // rest(200); game.type = GAME_SINGLE; menu_sound2(); return; } } while(TRUE); } void display_ship_choice(int players, int p1a, int p2a, int p1c, int p2c) { clear_bitmap(menu_bmp); show_grid(COLOUR_GREEN3, COLOUR_GREEN8); // int i, j; if (!p1a) { textprintf_centre_ex(menu_bmp, font2, 320, 120, COLOUR_GREEN2 + (menu_counter / 4) % 7, -1, "{player__one__fire__to__start}"); textprintf_centre_ex(menu_bmp, font, 320, 120, -1, -1, "{player__one__fire__to__start}"); } else { display_ship_choice2(player [0].ship, 0, p1c); } if (!p2a) { textprintf_centre_ex(menu_bmp, font2, 320, 360, COLOUR_GREEN2 + (menu_counter / 4) % 7, -1, "{player__two__fire__to__start}"); textprintf_centre_ex(menu_bmp, font, 320, 360, -1, -1, "{player__two__fire__to__start}"); } else { display_ship_choice2(player [1].ship, 225, p2c); } } void display_ship_choice2(int ship, int y, int chosen) { int i,j; int bx, by; int col, sprite_drawn = 0; int line_colour = COLOUR_ORANGE8 - (menu_counter / 4) % 6; int height = 0; char descr_string [200]; // show_grid(COLOUR_GREEN3, COLOUR_GREEN8); int x1 = 436, y1 = 80 + y; for (i = 0; i < 3; i ++) { for (j = 0; j < 3; j ++) { bx = 10 + i * 64; by = y + 10 + j * 64 + i * 5; col = COLOUR_YELLOW1; sprite_drawn = RLE_LSHIP_GREEN; if (i + j * 3 == ship) { col = COLOUR_YELLOW3; sprite_drawn = RLE_LSHIP_YELLOW; if (chosen) { col = COLOUR_GREEN3; sprite_drawn = RLE_LSHIP_GREEN; } rectfill(menu_bmp, bx, by, bx + 49, by + 49, col); draw_rle_sprite(menu_bmp, large_ships [i + j * 3] [sprite_drawn], bx, by); height = by + 1; hline(menu_bmp, bx - 1, by - 1, bx + 15, line_colour); hline(menu_bmp, bx + 50, by - 1, bx + 34, line_colour); hline(menu_bmp, bx - 1, by + 50, bx + 15, line_colour); hline(menu_bmp, bx + 50, by + 50, bx + 34, line_colour); vline(menu_bmp, bx - 1, by - 1, by + 50, line_colour); vline(menu_bmp, bx + 50, by - 1, by + 50, line_colour); hline(menu_bmp, bx + 50, height, x1 - 180, line_colour); } else { rectfill(menu_bmp, bx, by, bx + 49, by + 49, col); draw_rle_sprite(menu_bmp, large_ships [i + j * 3] [sprite_drawn], bx, by); } } } // rectfill(menu_bmp, x1 - 100, y1 - 60, x1 + 100, y1 + 60, COLOUR_GREY1); // rectfill(menu_bmp, x1 - 95, y1 - 55, x1 + 95, y1 + 55, COLOUR_GREY5); rectfill(menu_bmp, x1 - 155, y1 - 40, x1 + 155, y1 + 40, COLOUR_GREY1); rect(menu_bmp, x1 - 154, y1 - 39, x1 + 154, y1 + 39, COLOUR_GREY4); rect(menu_bmp, x1 - 153, y1 - 38, x1 + 153, y1 + 38, COLOUR_GREY4); rect(menu_bmp, x1 - 151, y1 - 36, x1 + 151, y1 + 36, COLOUR_GREY4); rect(menu_bmp, x1 - 150, y1 - 35, x1 + 150, y1 + 35, COLOUR_GREY4); rect(menu_bmp, x1 - 152, y1 - 37, x1 + 152, y1 + 37, line_colour); hline(menu_bmp, x1 - 152, y1, x1 - 180, line_colour); vline(menu_bmp, x1 - 180, y1, height, line_colour); if (chosen) { // textprintf_centre_ex(menu_bmp, font, 436, y + 20, COLOUR_YELLOW8 - (menu_counter / 4) % 4, -1, ship_name_long(ship)); // textprintf_centre_ex(menu_bmp, font2, 436, y + 20, COLOUR_ORANGE4 + (menu_counter / 8) % 4, -1, ship_name_long(ship)); // textprintf_centre_ex(menu_bmp, font2, 436, y + 20, COLOUR_YELLOW8 - (menu_counter / 4) % 4, -1, ship_name_long(ship)); // textprintf_centre_ex(menu_bmp, font, 436, y + 20, -1, -1, ship_name_long(ship)); } else { // textprintf_centre_ex(menu_bmp, font2, 436, y + 20, COLOUR_RED8 - (menu_counter / 4) % 4, -1, ship_name_long(ship)); // textprintf_centre_ex(menu_bmp, font2, 436, y + 20, COLOUR_BLUE4 + (menu_counter / 8) % 4, -1, ship_name_long(ship)); // textprintf_centre_ex(menu_bmp, font, 436, y + 20, -1, -1, ship_name_long(ship)); } // textprintf_ex(menu_bmp, font2, 280, y + 20, COLOUR_WHITE, "%i", ship); ship_description1(ship, descr_string); textprintf_centre_ex(menu_bmp, small_font, 436, y + 70, COLOUR_YELLOW7, -1, descr_string); ship_description2(ship, descr_string); textprintf_centre_ex(menu_bmp, small_font, 436, y + 80, COLOUR_YELLOW7, -1, descr_string); /* int line_colour = 255; int box_colour = 255; RGB lcolour [1]; int mcn = menu_counter * 2; if (mcn % 128 < 64) { lcolour[0].r = 8 + (63 - mcn % 64) / 7; // lcolour[0].g = (63 - mcn % 64); lcolour[0].g = 8 + (63 - mcn % 64) / 4; lcolour[0].b = 0;//((mcn + 32) % 64);// / 2; } else { lcolour[0].r = 8 + (mcn % 64) / 7; // lcolour[0].g = (mcn % 64); lcolour[0].g = 8 + (mcn % 64) / 4; lcolour[0].b = 0;//(63 - ((mcn + 32) % 64));// / 2; } // vsync(); MAY NEED TO REPLACE THIS!!! set_color(255, lcolour); if (ship != 15) { line(menu_bmp, 431, y + 110, 431, y + 125, line_colour); line(menu_bmp, 439, y + 110, 439, y + 125, line_colour); line(menu_bmp, 431, y + 125, 439, y + 125, line_colour); line(menu_bmp, 435, y + 125, 435, y + 135, line_colour); line(menu_bmp, 435, y + 135, 250, y + 135, line_colour); line(menu_bmp, 250, y + 135, 250, y + 160, line_colour); line(menu_bmp, 250, y + 160, 615, y + 160, line_colour); line(menu_bmp, 615, y + 160, 615, y + 185, line_colour); line(menu_bmp, 615, y + 185, 250, y + 185, line_colour); line(menu_bmp, 250, y + 185, 250, y + 210, line_colour); line(menu_bmp, 250, y + 210, 590, y + 210, line_colour); rectfill(menu_bmp, 397, y + 103, 472, y + 117, box_colour); draw_sprite(menu_bmp, upgrade_box3, 395, y + 93); for (i = 0; i < 4; i ++) { rectfill(menu_bmp, 263 + i * 90, y + 153, 336 + i * 90, y + 168, box_colour); rectfill(menu_bmp, 263 + i * 90, y + 203, 336 + i * 90, y + 218, box_colour); draw_sprite(menu_bmp, upgrade_box1, 260 + i * 90, y + 143); if (i == 3) draw_sprite(menu_bmp, upgrade_box2, 260 + i * 90, y + 193); else draw_sprite(menu_bmp, upgrade_box1, 260 + i * 90, y + 193); } } */ } void show_grid(int grid_colour, int border_colour) { // rectfill(menu_bmp, 10, 10, 630, 470, COLOUR_GREY1); // rect(menu_bmp, 10, 10, 630, 470, border_colour - 4); // rect(menu_bmp, 9, 9, 631, 471, border_colour - 2); // rect(menu_bmp, 8, 8, 632, 472, border_colour); draw_scrolling_grid(11, 11, 629, 469, grid_colour); } void menu_display_scores(void) { /* rectfill(menu_bmp, 10, 50, 540, 400, COLOUR_GREEN1); rect(menu_bmp, 10, 50, 540, 400, COLOUR_GREEN4); rect(menu_bmp, 9, 49, 541, 401, COLOUR_GREEN6); rect(menu_bmp, 8, 48, 542, 402, COLOUR_GREEN8);*/ show_grid(COLOUR_YELLOW3, COLOUR_YELLOW8); draw_ms(); textprintf_centre_ex(menu_bmp, font2, 320, 20, COLOUR_ORANGE8 - (menu_counter / 2) % 4, -1, "{___high___scores___}"); textprintf_centre_ex(menu_bmp, font, 320, 20, -1, -1, "{___high___scores___}"); int i; int ox = 205, oy = 10, oys = 95; int col; textprintf_centre_ex(menu_bmp, small_font, 320, oys - 30, COLOUR_ORANGE8, -1, "Single Player"); textprintf_ex(menu_bmp, small_font, ox, oys - 10, COLOUR_YELLOW8, -1, "Name"); textprintf_right_ex(menu_bmp, small_font, ox + 90, oys - 10, COLOUR_YELLOW8, -1, "Level"); // textprintf_right_ex(menu_bmp, small_font, ox + 190, oys - 10, COLOUR_YELLOW8, -1, "Craft"); textprintf_right_ex(menu_bmp, small_font, ox + 200, oys - 10, COLOUR_YELLOW8, -1, "Score"); textprintf_ex(menu_bmp, small_font, ox + 220, oys - 10, COLOUR_YELLOW8, -1, "Rank"); char sstr [50]; // char istr [20]; for (i = 0; i < NO_SCORES; i ++) { col = COLOUR_GREEN5; if (which_menu == MENU_ENTER_SCORES) col = COLOUR_GREEN3; if (game.type == GAME_SINGLE && i == entering_score && which_menu == MENU_ENTER_SCORES) col = COLOUR_YELLOW4 + (menu_counter / 4) % 4; strcpy(sstr, hs_single[i].name); textprintf_ex(menu_bmp, small_font, ox, oys + oy * i, col, -1, sstr); if (hs_single[i].level == 16) strcpy(sstr, ""); else // strcpy(sstr, itoa(hs_single[i].level, istr, 10)); { strcpy(sstr, ""); anum(sstr, hs_single[i].level); } textprintf_right_ex(menu_bmp, small_font, ox + 90, oys + oy * i, col, -1, sstr); // strcpy(sstr, ship_name_short(hs_single[i].ship)); // textprintf_right_ex(menu_bmp, small_font, ox + 190, oys + oy * i, col, -1, sstr); // strcpy(sstr, itoa(hs_single[i].score, istr, 10)); // strcpy(sstr, ""); // anum(sstr, ); textprintf_right_ex(menu_bmp, small_font, ox + 200, oys + oy * i, col, -1, "%i", hs_single[i].score); rank_name(get_rank(hs_single[i].score, hs_single[i].level), sstr); if (hs_single[i].level == 16) col = COLOUR_YELLOW8; textprintf_ex(menu_bmp, small_font, ox + 220, oys + oy * i, col, -1, sstr); } oys = 290; textprintf_centre_ex(menu_bmp, small_font, 320, oys - 30, COLOUR_ORANGE8, -1, "Cooperative - best player only"); textprintf_ex(menu_bmp, small_font, ox, oys - 10, COLOUR_YELLOW8, -1, "Name"); textprintf_right_ex(menu_bmp, small_font, ox + 90, oys - 10, COLOUR_YELLOW8, -1, "Level"); // textprintf_right_ex(menu_bmp, small_font, ox + 190, oys - 10, COLOUR_YELLOW8, -1, "Craft"); textprintf_right_ex(menu_bmp, small_font, ox + 200, oys - 10, COLOUR_YELLOW8, -1, "Score"); textprintf_ex(menu_bmp, small_font, ox + 220, oys - 10, COLOUR_YELLOW8, -1, "Rank"); for (i = 0; i < NO_SCORES; i ++) { col = COLOUR_GREEN5; if (which_menu == MENU_ENTER_SCORES) col = COLOUR_GREEN3; if (game.type == GAME_COOP && i == entering_score && which_menu == MENU_ENTER_SCORES) col = COLOUR_YELLOW4 + (menu_counter / 2) % 4; strcpy(sstr, hs_coop[i].name); textprintf_ex(menu_bmp, small_font, ox, oys + oy * i, col, -1, sstr); if (hs_coop[i].level == 16) strcpy(sstr, ""); else { strcpy(sstr, ""); anum(sstr, hs_coop[i].level); } // strcpy(sstr, itoa(hs_coop[i].level, istr, 10)); /* if (game.mode_purple == 1) textprintf_right_ex(menu_bmp, small_font, ox + 98, oys + oy * i, TRANS_PURPLE, -1, "p"); if (game.mode_void == 1) textprintf_right_ex(menu_bmp, small_font, ox + 106, oys + oy * i, COLOUR_WHITE, -1, "v"); if (game.mode_god == 1) textprintf_right_ex(menu_bmp, small_font, ox + 114, oys + oy * i, COLOUR_WHITE, -1, "g");*/ textprintf_right_ex(menu_bmp, small_font, ox + 90, oys + oy * i, col, -1, sstr); // strcpy(sstr, ship_name_short(hs_coop[i].ship)); // textprintf_right_ex(menu_bmp, small_font, ox + 190, oys + oy * i, col, -1, sstr); // strcpy(sstr, itoa(hs_coop[i].score, istr, 10)); // strcpy(sstr, ""); // anum(sstr, hs_coop[i].score); textprintf_right_ex(menu_bmp, small_font, ox + 200, oys + oy * i, col, -1, "%i", hs_coop[i].score); if (hs_coop[i].level == 16) col = COLOUR_YELLOW8; rank_name(get_rank(hs_coop[i].score, hs_coop[i].level), sstr); textprintf_ex(menu_bmp, small_font, ox + 220, oys + oy * i, col, -1, sstr); } char tastr [100]; int hours; int minutes; int seconds; strcpy(tastr, "Longest Time Attack survivor - "); strcat(tastr, best_ta_name); strcat(tastr, " ("); hours = best_ta_time / 120000; minutes = best_ta_time / 2000 - (hours * 60); seconds = (best_ta_time / 33.3333) - (minutes * 60); /* if (hours > 0) { strcat(tastr, itoa(hours, istr, 10)); strcat(tastr, ":"); if (minutes < 10) strcat(tastr, "0"); } strcat(tastr, itoa(minutes, istr, 10)); strcat(tastr, ":"); if (seconds < 10) strcat(tastr, "0"); strcat(tastr, itoa(seconds, istr, 10)); strcat(tastr, ")");*/ col = COLOUR_GREY5; if ((game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) && which_menu == MENU_ENTER_SCORES) col = COLOUR_YELLOW4 + (menu_counter / 2) % 4; // textprintf_centre_ex(menu_bmp, small_font, 320, 460, col, -1, tastr); if (hours > 0) { if (minutes < 10) { if (seconds < 10) { textprintf_centre_ex(menu_bmp, small_font, 320, 460, col, -1, "%s%i:0%i:0%i)", tastr, hours, minutes, seconds); } else textprintf_centre_ex(menu_bmp, small_font, 320, 460, col, -1, "%s%i:0%i:%i)", tastr, hours, minutes, seconds); } else { if (seconds < 10) { textprintf_centre_ex(menu_bmp, small_font, 320, 460, col, -1, "%s%i:%i:0%i)", tastr, hours, minutes, seconds); } else textprintf_centre_ex(menu_bmp, small_font, 320, 460, col, -1, "%s%i:%i:%i)", tastr, hours, minutes, seconds); } } else { if (minutes < 10) { if (seconds < 10) { textprintf_centre_ex(menu_bmp, small_font, 320, 460, col, -1, "%s0%i:0%i)", tastr, minutes, seconds); } else textprintf_centre_ex(menu_bmp, small_font, 320, 460, col, -1, "%s0%i:%i)", tastr, minutes, seconds); } else { if (seconds < 10) { textprintf_centre_ex(menu_bmp, small_font, 320, 460, col, -1, "%s%i:0%i)", tastr, minutes, seconds); } else textprintf_centre_ex(menu_bmp, small_font, 320, 460, col, -1, "%s%i:%i)", tastr, minutes, seconds); } } /* textprintf_centre_ex(menu_bmp, font, 300, 200, COLOUR_YELLOW8 - (menu_counter / 4) % 7, "L___a___c___e___w___i___n___g}"); textprintf_centre_ex(menu_bmp, font2, 300, 200, COLOUR_RED1 + (menu_counter / 4) % 7, "L___a___c___e___w___i___n___g}"); textprintf_centre_ex(menu_bmp, font, 300, 300, COLOUR_YELLOW7, "Space} For} 1P} Enter} For} 2P}..."); textprintf_centre_ex(menu_bmp, font2, 300, 300, COLOUR_RED7, "Space} For} 1P} Enter} For} 2P}..."); */ } int get_rank(int score, int level) { if (level == 16) { if (score < 18000) return RANK_DEMIGOD; if (score < 19000) return RANK_GODLING; if (score < 20000) return RANK_UNDERGOD; if (score < 21000) return RANK_LESSER_GOD; if (score < 23000) return RANK_GREATER_GOD; if (score < 26000) return RANK_OVERGOD; return RANK_SUPREME_BEING; } if (score < 500) return RANK_SLAVE; if (score < 1000) return RANK_DOUBTER; if (score < 2000) return RANK_UNBELIEVER; if (score < 4000) return RANK_BLASPHEMER; if (score < 8000) return RANK_APOSTATE; if (score < 12000) return RANK_HERETIC; if (score < 15000) return RANK_HERESIARCH; if (score < 20000) return RANK_SECULARIST; return RANK_DEICIDE; } void rank_name(int rank, char sstr [30]) { switch(rank) { case RANK_SLAVE: strcpy(sstr, "Slave"); break; case RANK_DOUBTER: strcpy(sstr, "Doubter"); break; case RANK_UNBELIEVER: strcpy(sstr, "Unbeliever"); break; case RANK_BLASPHEMER: strcpy(sstr, "Blasphemer"); break; case RANK_APOSTATE: strcpy(sstr, "Apostate"); break; case RANK_HERETIC: strcpy(sstr, "Heretic"); break; case RANK_HERESIARCH: // jlb strcpy(sstr, "Heresiarch"); break; case RANK_SECULARIST: strcpy(sstr, "Secularist"); break; case RANK_DEICIDE: strcpy(sstr, "Deicide"); break; case RANK_DEMIGOD: strcpy(sstr, "DEMIGOD"); break; case RANK_GODLING: strcpy(sstr, "GODLING"); break; case RANK_UNDERGOD: strcpy(sstr, "UNDERGOD"); break; case RANK_LESSER_GOD: strcpy(sstr, "LESSER GOD"); break; case RANK_GREATER_GOD: strcpy(sstr, "GREATER GOD"); break; case RANK_OVERGOD: strcpy(sstr, "OVERGOD"); break; case RANK_SUPREME_BEING: strcpy(sstr, "SUPREME BEING"); break; } } void draw_scrolling_grid(int min_x, int min_y, int max_x, int max_y, int colour) { int i, j, x1, y1; int x_offset = (grid_x / GRAIN) % 50; int y_offset = (grid_y / GRAIN) % 50; for (i = -3; i < 16; i ++) { for (j = -3; j < 16; j ++) { x1 = i * 50 + x_offset; if (x1 < min_x - 80 || x1 > max_x + 50) continue; y1 = j * 50 + y_offset; if (y1 < min_y - 80 || y1 > max_y + 50) continue; draw_rle_sprite(menu_bmp, menu_tile, x1, y1); } } /* for (i = 0; i < 15; i ++) { x1 = i * 50 + x_offset; if (x1 < min_x - 50 || x1 > max_x + 50) continue; draw_rle_sprite(menu_bmp, menu_tile, x1 // vline(menu_bmp, x1, min_y, max_y, colour); } for (j = 0; j < 12; j ++) { y1 = j * 50 + y_offset; if (y1 < min_y - 50 || y1 > max_y + 50) continue; // hline(menu_bmp, min_x, y1, max_x, colour); } */ } void menu_to_screen(void) { switch(graphics_mode) { default: // 640x480 blit(menu_bmp, screen, 0, 0, 0, 0, 640, 480); break; case GMODE_800_600: blit(menu_bmp, screen, 0, 0, 80, 60, 640, 480); break; case GMODE_1024_768: blit(menu_bmp, screen, 0, 0, 192, 144, 640, 480); break; } } void make_grid_scroll(void) { grid_x += grid_x_speed; grid_y += grid_y_speed; grid_x %= 50000; grid_y %= 50000; grid_x_speed += grid_x_accel; if (grid_x_speed > 3000) grid_x_speed = 3000; if (grid_x_speed < -3000) grid_x_speed = -3000; grid_y_speed += grid_y_accel; if (grid_y_speed > 3000) grid_y_speed = 3000; if (grid_y_speed < -3000) grid_y_speed = -3000; if (menu_counter % 64 == 0) { grid_x_accel = grand(301) - 150; // if (grid_x_speed > 3000) grid_x_speed = 3000; // if (grid_x_speed < -3000) grid_x_speed = -3000; grid_y_accel = grand(301) - 150; // if (grid_y_speed > 3000) grid_y_speed = 3000; // if (grid_y_speed < -3000) grid_y_speed = -3000; } } /*void init_bouncies(void) { int i; for (i = 0; i < NO_BOUNCIES; i ++) { bouncy[i].x = (grand(500) + 20) * GRAIN; bouncy[i].y = (grand(400) + 20) * GRAIN; bouncy[i].x_speed = (900 + grand(800)); if (grand(2) == 0) bouncy[i].x_speed *= -1; bouncy[i].y_speed = (900 + grand(800)); if (grand(2) == 0) bouncy[i].y_speed *= -1; bouncy[i].colour1 = COLOUR_GREEN1; bouncy[i].colour2 = COLOUR_GREEN6; if (grand(25) == 0) { bouncy[i].colour1 = COLOUR_GREY1; bouncy[i].colour2 = COLOUR_GREY6; } if (grand(15) == 0) { bouncy[i].colour1 = COLOUR_PURPLE1; bouncy[i].colour2 = COLOUR_PURPLE6; } if (grand(8) == 0) { bouncy[i].colour1 = COLOUR_BLUE1; bouncy[i].colour2 = COLOUR_BLUE6; } if (grand(5) == 0) { bouncy[i].colour1 = COLOUR_RED1; bouncy[i].colour2 = COLOUR_RED6; } if (grand(5) == 0) { bouncy[i].colour1 = COLOUR_ORANGE1; bouncy[i].colour2 = COLOUR_ORANGE6; } if (grand(5) == 0) { bouncy[i].colour1 = COLOUR_YELLOW1; bouncy[i].colour2 = COLOUR_YELLOW6; } } } void make_bouncies_move(void) { int i; // int j; for (i = 0; i < NO_BOUNCIES; i ++) { if (bouncy[i].x_speed == 0 && bouncy[i].y_speed == 0) return; if (bouncy[i].x + bouncy[i].x_speed <= 18 * GRAIN || bouncy[i].x + bouncy[i].x_speed >= 622 * GRAIN) { bouncy[i].x_speed *= -1; } if (bouncy[i].y + bouncy[i].y_speed <= 18 * GRAIN || bouncy[i].y + bouncy[i].y_speed >= 462 * GRAIN) { bouncy[i].y_speed *= -1; } bouncy[i].x += bouncy[i].x_speed; bouncy[i].y += bouncy[i].y_speed; } } void draw_bouncies(void) { int i; for (i = 0; i < NO_BOUNCIES; i ++) { circlefill(menu_bmp, bouncy[i].x / GRAIN, bouncy[i].y / GRAIN, 7, bouncy[i].colour1); circle(menu_bmp, bouncy[i].x / GRAIN, bouncy[i].y / GRAIN, 7, bouncy[i].colour2); } } */ void check_high_scores(void) { int i; int entry = -1; int better_player = 0; if (game.type == GAME_TIME_ATTACK || game.type == GAME_TIME_ATTACK_COOP) { if (game.ta_total_time > best_ta_time) { best_ta_time = game.ta_total_time; strcpy(best_ta_name, "_"); change_menu(MENU_ENTER_SCORES); } else change_menu(MENU_SCORES); return; } if (game.type == GAME_SINGLE) { for (i = 0; i < NO_SCORES; i ++) { if (player[game.single_player].score > hs_single[i].score) { entry = i; break; } } if (entry != -1) { push_scores_single(entry, game.single_player); entering_score = entry; // exit(88); // change_menu(MENU_SCORES); // congratulations(-1); change_menu(MENU_ENTER_SCORES); } else change_menu(MENU_SCORES); } if (game.type == GAME_COOP) { if (player[0].score > player[1].score) better_player = 0; else better_player = 1; for (i = 0; i < NO_SCORES; i ++) { if (player[better_player].score > hs_coop[i].score) { entry = i; break; } } for (i = 0; i < NO_SCORES; i ++) { if (player[better_player].score > hs_coop[i].score) { entry = i; break; } } if (entry != -1) { push_scores_coop(entry, better_player); entering_score = entry; // exit(88); // change_menu(MENU_SCORES); // entering_score2 = better_player; change_menu(MENU_ENTER_SCORES); } else change_menu(MENU_SCORES); /* if (game.type == GAME_COOP) { for (i = 0; i < NO_SCORES; i ++) { if (player[0].score > hs_single[i].score) { entry = i; break; } } for (i = 0; i < NO_SCORES; i ++) { if (player[1].score > hs_single[i].score) { entry = i; break; } } if (entry != -1 || entry2 != -1) { push_scores_coop(entry, game.single_player); entering_score = entry; // exit(88); // change_menu(MENU_SCORES); change_menu(MENU_ENTER_SCORES); } else change_menu(MENU_SCORES); */ } } void congratulations(int player) { rectfill(screen, 140, 150, 500, 280, COLOUR_ORANGE1); rect(screen, 140, 150, 500, 280, COLOUR_ORANGE2); rect(screen, 139, 149, 501, 281, COLOUR_ORANGE3); rect(screen, 138, 148, 502, 282, COLOUR_ORANGE4); rect(screen, 137, 147, 503, 283, COLOUR_ORANGE5); rect(screen, 136, 146, 504, 284, COLOUR_ORANGE6); if (player == -1) { textprintf_centre_ex(screen, font2, 320, 180, COLOUR_ORANGE6, -1, "congratulations}!"); textprintf_centre_ex(screen, font, 320, 180, COLOUR_YELLOW8, -1, "congratulations}!"); textprintf_centre_ex(screen, font2, 320, 230, COLOUR_ORANGE8, -1, "you} got} a} high} score}!"); textprintf_centre_ex(screen, font, 320, 230, COLOUR_YELLOW6, -1, "you} got} a} high} score}!"); // textprintf_right_ex(screen, small_font, 500, 240, COLOUR_WHITE, "Press a key..."); } else { textprintf_centre_ex(screen, font2, 320, 180, COLOUR_ORANGE6, -1, "congratulations}!"); textprintf_centre_ex(screen, font, 320, 180, COLOUR_YELLOW8, -1, "congratulations}!"); textprintf_centre_ex(screen, font2, 320, 230, COLOUR_ORANGE8, -1, "player} %i got} a} high} score}!", player + 1); textprintf_centre_ex(screen, font, 320, 230, COLOUR_YELLOW6, -1, "player} %i got} a} high} score}!", player + 1); } rest(200); rect(screen, 140, 150, 500, 280, COLOUR_YELLOW2); rect(screen, 139, 149, 501, 281, COLOUR_YELLOW3); rect(screen, 138, 148, 502, 282, COLOUR_YELLOW4); rect(screen, 137, 147, 503, 283, COLOUR_YELLOW5); rect(screen, 136, 146, 504, 284, COLOUR_YELLOW6); clear_keybuf(); readkey(); keypress_wait = KP_WAIT_SHORT; } void congratulations_ta(void) { rectfill(screen, 140, 150, 500, 280, COLOUR_ORANGE1); rect(screen, 140, 150, 500, 280, COLOUR_ORANGE2); rect(screen, 139, 149, 501, 281, COLOUR_ORANGE3); rect(screen, 138, 148, 502, 282, COLOUR_ORANGE4); rect(screen, 137, 147, 503, 283, COLOUR_ORANGE5); rect(screen, 136, 146, 504, 284, COLOUR_ORANGE6); textprintf_centre_ex(screen, font2, 320, 180, COLOUR_ORANGE6, -1, "congratulations}!"); textprintf_centre_ex(screen, font, 320, 180, COLOUR_YELLOW8, -1, "congratulations}!"); textprintf_centre_ex(screen, small_font, 320, 230, COLOUR_ORANGE8, -1, "You made a new Time Attack record!"); rest(200); rect(screen, 140, 150, 500, 280, COLOUR_YELLOW2); rect(screen, 139, 149, 501, 281, COLOUR_YELLOW3); rect(screen, 138, 148, 502, 282, COLOUR_YELLOW4); rect(screen, 137, 147, 503, 283, COLOUR_YELLOW5); rect(screen, 136, 146, 504, 284, COLOUR_YELLOW6); clear_keybuf(); readkey(); keypress_wait = KP_WAIT_SHORT; } void push_scores_single(int insert, int play) { int i = NO_SCORES - 2; if (insert < NO_SCORES - 1) { for (i = NO_SCORES - 2; i > insert - 1; i --) { hs_single[i + 1].score = hs_single[i].score; hs_single[i + 1].level = hs_single[i].level; hs_single[i + 1].ship = hs_single[i].ship; strcpy(hs_single[i + 1].name, hs_single[i].name); } } i ++; hs_single[i].score = player[play].score; hs_single[i].level = arena.level; hs_single[i].ship = actor[player[play].actor_controlled].ship; strcpy(hs_single[i].name, "_"); } // my attempt to use one push_scores function with pointers failed. void push_scores_coop(int insert, int play) { int i = NO_SCORES - 2; if (insert < NO_SCORES - 1) { for (i = NO_SCORES - 2; i > insert - 1; i --) { hs_coop[i + 1].score = hs_coop[i].score; hs_coop[i + 1].level = hs_coop[i].level; hs_coop[i + 1].ship = hs_coop[i].ship; strcpy(hs_coop[i + 1].name, hs_coop[i].name); } } i ++; // char istr [10]; hs_coop[i].score = player[play].score; hs_coop[i].level = arena.level; hs_coop[i].ship = actor[player[play].actor_controlled].ship; strcpy(hs_coop[i].name, "P"); if (play == 0) strcat(hs_coop[i].name, "1"); else strcat(hs_coop[i].name, "2"); strcat(hs_coop[i].name, "_"); } int enter_score_name_single(int s) { /* rectfill(screen, 400, 210, 550, 280, COLOUR_GREY2); rect(screen, 400, 210, 550, 280, COLOUR_GREY6); rect(screen, 401, 211, 549, 279, COLOUR_GREY5); rect(screen, 402, 212, 548, 278, COLOUR_GREY4); rect(screen, 403, 213, 547, 277, COLOUR_GREY3); textprintf_right_ex(screen, small_font, 500, 240, COLOUR_WHITE, "Press a key..."); */ // clear_keybuf(); char inputted; // = KEY_ESC; int shifter = key [KEY_LSHIFT] + key [KEY_RSHIFT]; // int i; // rest(200); // to clear the enter or space key // if (keypressed() != TRUE) // return 0; int i; for (i = KEY_A; i < KEY_CAPSLOCK + 1; i ++) { if (check_key(i)) { break; } if (i == KEY_CAPSLOCK) return 0; } if (i == KEY_ESC || i == KEY_ENTER || i == KEY_ENTER_PAD) // escape, enter { hs_single[s].name [strlen(hs_single[s].name) - 1] = '\0'; // remove the _ keypress_wait = KP_WAIT_SHORT; menu_sound2(); return 1; } if (i == KEY_BACKSPACE) // backspace { if (strlen(hs_single[s].name) > 1) { hs_single[s].name [strlen(hs_single[s].name) - 2] = '\0'; strcat(hs_single[s].name, "_"); keypress_wait = KP_WAIT_SHORT; menu_sound1(); return 0; } } // inputted = readkey() & 0xff; inputted = scancode_to_asc(i); if (inputted == '\0') return 0; // if (acceptable_name_char(inputted) == 0) // return 0; if (strlen(hs_single[s].name) > SCORE_LENGTH || text_length(small_font, hs_single[s].name) > 75) return 0; if (shifter != 0) { if (inputted >= 'a' && inputted <= 'z') inputted = 'A' + inputted - 'a'; if (inputted >= '0' && inputted <= '9') inputted = get_shifted_number(inputted); } int slen = strlen(hs_single[s].name); hs_single[s].name [slen - 1] = inputted; hs_single[s].name [slen] = '\0'; strcat(hs_single[s].name, "_"); keypress_wait = KP_WAIT_SHORT; menu_sound1(); return 0; } // obviously there should be 1 function for this, not 3. But I had trouble with that so here we are. int enter_score_name_ta(void) { char inputted; int shifter = key [KEY_LSHIFT] + key [KEY_RSHIFT]; int i; for (i = KEY_A; i < KEY_CAPSLOCK + 1; i ++) { if (check_key(i)) { break; } if (i == KEY_CAPSLOCK) return 0; } if (i == KEY_ESC || i == KEY_ENTER || i == KEY_ENTER_PAD) // escape, enter { best_ta_name [strlen(best_ta_name) - 1] = '\0'; // remove the _ keypress_wait = KP_WAIT_SHORT; menu_sound2(); return 1; } if (i == KEY_BACKSPACE) // backspace { if (strlen(best_ta_name) > 1) { best_ta_name [strlen(best_ta_name) - 2] = '\0'; strcat(best_ta_name, "_"); keypress_wait = KP_WAIT_SHORT; menu_sound1(); return 0; } } inputted = scancode_to_asc(i); if (inputted == '\0') return 0; if (strlen(best_ta_name) > SCORE_LENGTH || text_length(small_font, best_ta_name) > 75) return 0; if (shifter != 0) { if (inputted >= 'a' && inputted <= 'z') inputted = 'A' + inputted - 'a'; if (inputted >= '0' && inputted <= '9') inputted = get_shifted_number(inputted); } int slen = strlen(best_ta_name); best_ta_name [slen - 1] = inputted; best_ta_name [slen] = '\0'; strcat(best_ta_name, "_"); keypress_wait = KP_WAIT_SHORT; menu_sound1(); return 0; } int enter_score_name_coop(int s) { char inputted; int shifter = key [KEY_LSHIFT] + key [KEY_RSHIFT]; int i; for (i = KEY_A; i < KEY_CAPSLOCK + 1; i ++) { if (check_key(i)) { break; } if (i == KEY_CAPSLOCK) return 0; } if (i == KEY_ESC || i == KEY_ENTER || i == KEY_ENTER_PAD) // escape, enter { hs_coop[s].name [strlen(hs_coop[s].name) - 1] = '\0'; // remove the _ keypress_wait = KP_WAIT_LONG; menu_sound2(); return 1; } if (i == KEY_BACKSPACE) // backspace { if (strlen(hs_coop[s].name) > 1) { hs_coop[s].name [strlen(hs_coop[s].name) - 2] = '\0'; strcat(hs_coop[s].name, "_"); keypress_wait = KP_WAIT_SHORT; menu_sound1(); return 0; } } inputted = scancode_to_asc(i); if (inputted == '\0') return 0; if (strlen(hs_coop[s].name) > SCORE_LENGTH || text_length(small_font, hs_coop[s].name) > 75) return 0; if (shifter != 0) { if (inputted >= 'a' && inputted <= 'z') inputted = 'A' + inputted - 'a'; if (inputted >= '0' && inputted <= '9') inputted = get_shifted_number(inputted); // if (inputted >= '0' && inputted <= '9') // inputted -= 15; } int slen = strlen(hs_coop[s].name); hs_coop[s].name [slen - 1] = inputted; hs_coop[s].name [slen] = '\0'; strcat(hs_coop[s].name, "_"); keypress_wait = KP_WAIT_SHORT; menu_sound1(); return 0; } void quit_game(void) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); // clrscr(); // allegro_message("\n\rBye bye! "); // free(palet);/ exit(0); } char get_shifted_number(char inputted) { switch(inputted) { case '1': return '!'; case '2': return '@'; case '3': return '#'; case '4': return '$'; case '5': return '$'; case '6': return '^'; case '7': return '&'; case '8': return '*'; case '9': return '('; case '0': return ')'; } return inputted; } void jam_keys(void) { char sstr [30]; do { rectfill(menu_bmp, 180, 50, 440, 400, COLOUR_GREEN1); rect(menu_bmp, 180, 50, 440, 400, COLOUR_GREEN4); rect(menu_bmp, 179, 49, 441, 401, COLOUR_GREEN6); rect(menu_bmp, 178, 48, 442, 402, COLOUR_GREEN8); textprintf_centre_ex(menu_bmp, font2, 320, 90, COLOUR_YELLOW8, -1, "{t_e_s_t}"); textprintf_centre_ex(menu_bmp, font, 320, 90, -1, -1, "{t_e_s_t}"); textprintf_centre_ex(menu_bmp, font2, 320, 130, COLOUR_YELLOW8, -1, "{k_e_y_s}"); textprintf_centre_ex(menu_bmp, font, 320, 130, -1, -1, "{k_e_y_s}"); textprintf_ex(menu_bmp, small_font, 200, 210, COLOUR_YELLOW8, -1, "Most keyboards refuse to register certain"); textprintf_ex(menu_bmp, small_font, 200, 220, COLOUR_YELLOW8, -1, "combinations of keys. Try pressing the keys you want"); textprintf_ex(menu_bmp, small_font, 200, 230, COLOUR_YELLOW8, -1, "to use to test for conflicts. Press Escape to exit."); int i; int row = 0; for (i = 0; i < KEY_CAPSLOCK + 1; i ++) { if (key [i] != 0) { scancode_to_keyname(i, sstr); textprintf_ex(menu_bmp, small_font, 200, 250 + row * 10, COLOUR_ORANGE8, -1, sstr); row ++; } } menu_to_screen(); } while(!key [KEY_ESC]); keypress_wait = KP_WAIT_LONG; last_key = KEY_ESC; ticked = 0; } int acceptable_char(int scode) { // if (ascode >= 32 && ascode <= 126) return 1; switch(scode) { case KEY_ESC: keypress_wait = KP_WAIT_SHORT; return 0; case KEY_ENTER: case KEY_ENTER_PAD: keypress_wait = KP_WAIT_SHORT; return 0; } return 1; } int acceptable_name_char(int ascode) { if (ascode >= 32 && ascode <= 126) return 1; return 0; } void scancode_to_keyname(int scanc, char sstr [30]) { switch(scanc) { case KEY_A: strcpy(sstr, " a"); break; case KEY_B: strcpy(sstr, " b"); break; case KEY_C: strcpy(sstr, " c"); break; case KEY_D: strcpy(sstr, " d"); break; case KEY_E: strcpy(sstr, " e"); break; case KEY_F: strcpy(sstr, " f"); break; case KEY_G: strcpy(sstr, " g"); break; case KEY_H: strcpy(sstr, " h"); break; case KEY_I: strcpy(sstr, " i"); break; case KEY_J: strcpy(sstr, " j"); break; case KEY_K: strcpy(sstr, " k"); break; case KEY_L: strcpy(sstr, " l"); break; case KEY_M: strcpy(sstr, " m"); break; case KEY_N: strcpy(sstr, " n"); break; case KEY_O: strcpy(sstr, " o"); break; case KEY_P: strcpy(sstr, " p"); break; case KEY_Q: strcpy(sstr, " q"); break; case KEY_R: strcpy(sstr, " r"); break; case KEY_S: strcpy(sstr, " s"); break; case KEY_T: strcpy(sstr, " t"); break; case KEY_U: strcpy(sstr, " u"); break; case KEY_V: strcpy(sstr, " v"); break; case KEY_W: strcpy(sstr, " w"); break; case KEY_X: strcpy(sstr, " x"); break; case KEY_Y: strcpy(sstr, " y"); break; case KEY_Z: strcpy(sstr, " z"); break; case KEY_0: strcpy(sstr, " 0"); break; case KEY_1: strcpy(sstr, " 1"); break; case KEY_2: strcpy(sstr, " 2"); break; case KEY_3: strcpy(sstr, " 3"); break; case KEY_4: strcpy(sstr, " 4"); break; case KEY_5: strcpy(sstr, " 5"); break; case KEY_6: strcpy(sstr, " 6"); break; case KEY_7: strcpy(sstr, " 7"); break; case KEY_8: strcpy(sstr, " 8"); break; case KEY_9: strcpy(sstr, " 9"); break; case KEY_0_PAD: strcpy(sstr, " Numpad Ins"); break; case KEY_1_PAD: strcpy(sstr, " Numpad 1"); break; case KEY_2_PAD: strcpy(sstr, " Numpad 2"); break; case KEY_3_PAD: strcpy(sstr, " Numpad 3"); break; case KEY_4_PAD: strcpy(sstr, " Numpad 4"); break; case KEY_5_PAD: strcpy(sstr, " Numpad 5"); break; case KEY_6_PAD: strcpy(sstr, " Numpad 6"); break; case KEY_7_PAD: strcpy(sstr, " Numpad 7"); break; case KEY_8_PAD: strcpy(sstr, " Numpad 8"); break; case KEY_9_PAD: strcpy(sstr, " Numpad 9"); break; case KEY_F1: strcpy(sstr, " F1"); break; case KEY_F2: strcpy(sstr, " F2"); break; case KEY_F3: strcpy(sstr, " F3"); break; case KEY_F4: strcpy(sstr, " F4"); break; case KEY_F5: strcpy(sstr, " F5"); break; case KEY_F6: strcpy(sstr, " F6"); break; case KEY_F7: strcpy(sstr, " F7"); break; case KEY_F8: strcpy(sstr, " F8"); break; case KEY_F9: strcpy(sstr, " F9"); break; case KEY_F10: strcpy(sstr, " F10"); break; case KEY_F11: strcpy(sstr, " F11"); break; case KEY_F12: strcpy(sstr, " F12"); break; case KEY_ESC: strcpy(sstr, " Escape"); break; // invalid! case KEY_TILDE: strcpy(sstr, " `"); break; case KEY_MINUS: strcpy(sstr, " -"); break; case KEY_EQUALS: strcpy(sstr, " ="); break; case KEY_BACKSPACE: strcpy(sstr, " Backspace"); break; case KEY_TAB: strcpy(sstr, " Tab"); break; case KEY_OPENBRACE: strcpy(sstr, " {"); break; case KEY_CLOSEBRACE: strcpy(sstr, " }"); break; case KEY_ENTER: strcpy(sstr, " Enter"); break; case KEY_COLON: strcpy(sstr, " ;"); break; case KEY_QUOTE: strcpy(sstr, " '"); break; case KEY_BACKSLASH: strcpy(sstr, " \\"); break; case KEY_BACKSLASH2: strcpy(sstr, " \\"); break; // ???? case KEY_COMMA: strcpy(sstr, " ,"); break; case KEY_STOP: strcpy(sstr, " ."); break; case KEY_SLASH: strcpy(sstr, " /"); break; case KEY_SPACE: strcpy(sstr, " Space"); break; case KEY_INSERT: strcpy(sstr, " Insert"); break; case KEY_DEL: strcpy(sstr, " Delete"); break; case KEY_HOME: strcpy(sstr, " Home"); break; case KEY_END: strcpy(sstr, " End"); break; case KEY_PGUP: strcpy(sstr, " Page Up"); break; case KEY_PGDN: strcpy(sstr, " Page Down"); break; case KEY_LEFT: strcpy(sstr, " Left"); break; case KEY_RIGHT: strcpy(sstr, " Right"); break; case KEY_UP: strcpy(sstr, " Up"); break; case KEY_DOWN: strcpy(sstr, " Down"); break; case KEY_SLASH_PAD: strcpy(sstr, " Keypad /"); break; case KEY_ASTERISK: strcpy(sstr, " Keypad *"); break; case KEY_MINUS_PAD: strcpy(sstr, " Keypad -"); break; case KEY_PLUS_PAD: strcpy(sstr, " Keypad +"); break; case KEY_DEL_PAD: strcpy(sstr, " Keypad ."); break; case KEY_ENTER_PAD: strcpy(sstr, " Keypad Enter"); break; case KEY_PRTSCR: strcpy(sstr, " Print Screen"); break; case KEY_PAUSE: strcpy(sstr, " Pause"); break; case KEY_ABNT_C1: strcpy(sstr, " Weird Foreign Key"); break; // may as well put these in case KEY_YEN: strcpy(sstr, " Yen"); break; case KEY_KANA: strcpy(sstr, " Kana"); break; case KEY_CONVERT: strcpy(sstr, " Convert"); break; case KEY_NOCONVERT: strcpy(sstr, " NOCONVERT"); break; case KEY_AT: strcpy(sstr, " At"); break; case KEY_CIRCUMFLEX: strcpy(sstr, " Circumflex"); break; case KEY_COLON2: strcpy(sstr, " 2nd Colon"); break; case KEY_KANJI: strcpy(sstr, " Kanji"); break; case KEY_LSHIFT: strcpy(sstr, " Left Shift"); break; case KEY_RSHIFT: strcpy(sstr, " Right Shift"); break; case KEY_LCONTROL: strcpy(sstr, " Left Control"); break; case KEY_RCONTROL: strcpy(sstr, " Right Control"); break; case KEY_ALT: strcpy(sstr, " Left Alt"); break; case KEY_ALTGR: strcpy(sstr, " Right Alt"); break; case KEY_LWIN: strcpy(sstr, " Left Win"); break; case KEY_RWIN: strcpy(sstr, " Right Win"); break; case KEY_MENU: strcpy(sstr, " Menu"); break; case KEY_SCRLOCK: strcpy(sstr, " Scroll Lock"); break; case KEY_NUMLOCK: strcpy(sstr, " Num Lock"); break; case KEY_CAPSLOCK: strcpy(sstr, " Caps Lock"); break; //case KEY_: strcpy(sstr, " "); break; default: strcpy(sstr, " unknown key"); break; /* KEY_ESC, KEY_TILDE, KEY_MINUS, KEY_EQUALS, KEY_BACKSPACE, KEY_TAB, KEY_OPENBRACE, KEY_CLOSEBRACE, KEY_ENTER, KEY_COLON, KEY_QUOTE, KEY_BACKSLASH, KEY_BACKSLASH2, KEY_COMMA, KEY_STOP, KEY_SLASH, KEY_SPACE, */ } } char scancode_to_asc(int scanc) { switch(scanc) { case KEY_A: return 'a'; case KEY_B: return 'b'; case KEY_C: return 'c'; case KEY_D: return 'd'; case KEY_E: return 'e'; case KEY_F: return 'f'; case KEY_G: return 'g'; case KEY_H: return 'h'; case KEY_I: return 'i'; case KEY_J: return 'j'; case KEY_K: return 'k'; case KEY_L: return 'l'; case KEY_M: return 'm'; case KEY_N: return 'n'; case KEY_O: return 'o'; case KEY_P: return 'p'; case KEY_Q: return 'q'; case KEY_R: return 'r'; case KEY_S: return 's'; case KEY_T: return 't'; case KEY_U: return 'u'; case KEY_V: return 'v'; case KEY_W: return 'w'; case KEY_X: return 'x'; case KEY_Y: return 'y'; case KEY_Z: return 'z'; case KEY_0: return '0'; case KEY_1: return '1'; case KEY_2: return '2'; case KEY_3: return '3'; case KEY_4: return '4'; case KEY_5: return '5'; case KEY_6: return '6'; case KEY_7: return '7'; case KEY_8: return '8'; case KEY_9: return '9'; case KEY_TILDE: return '`'; case KEY_MINUS: return '-'; case KEY_EQUALS: return '='; case KEY_OPENBRACE: return '{'; case KEY_CLOSEBRACE: return '}'; case KEY_COLON: return ';'; case KEY_QUOTE: return '\''; case KEY_BACKSLASH: return '\\'; case KEY_BACKSLASH2: return '\\'; // ???? case KEY_COMMA: return ','; case KEY_STOP: return '.'; case KEY_SLASH: return '/'; case KEY_SPACE: return ' '; case KEY_SLASH_PAD: return '/'; case KEY_ASTERISK: return '*'; case KEY_MINUS_PAD: return '-'; case KEY_PLUS_PAD: return '+'; default: return '\0'; /* KEY_ESC, KEY_TILDE, KEY_MINUS, KEY_EQUALS, KEY_BACKSPACE, KEY_TAB, KEY_OPENBRACE, KEY_CLOSEBRACE, KEY_ENTER, KEY_COLON, KEY_QUOTE, KEY_BACKSLASH, KEY_BACKSLASH2, KEY_COMMA, KEY_STOP, KEY_SLASH, KEY_SPACE, */ } return '\0'; } void init_config(void) { // set_config is in main.c char miscstring [40]; char wstring [40]; char itstring [40]; int i; options.sound_init = get_config_int("Options", "Sound_init", 1); options.sound_mode = get_config_int("Options", "Sound_mode", SOUNDMODE_STEREO); options.run_vsync = get_config_int("Options", "Run_vsync", 0); options.sound_volume = get_config_int("Options", "Sound_volume", 100); options.ambience_volume = get_config_int("Options", "Ambience_volume", 100); options.colour_text = get_config_int("Options", "Colour_text", 0); options.unlock_purple = get_config_int("Unlock", "Purple", 0); options.unlock_void = get_config_int("Unlock", "Void", 0); options.unlock_god = get_config_int("Unlock", "God", 0); // resolution is got in main.c for (i = 0; i < NO_CMDS; i ++) { strcpy(wstring, "Player1Keys"); strcpy(miscstring, "Key"); // strcpy(itstring, ""); anum(miscstring, i); // strcat(miscstring, itoa(i, itstring, 10)); player[0].keys [i] = get_config_int(wstring, miscstring, KEY_X); } for (i = 0; i < NO_CMDS; i ++) { strcpy(wstring, "Player2Keys"); strcpy(miscstring, "Key"); // strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); player[1].keys [i] = get_config_int(wstring, miscstring, KEY_SPACE); } for (i = 0; i < NO_SCORES; i ++) { strcpy(wstring, "Highscores_single"); strcpy(miscstring, "Score"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); hs_single[i].score = get_config_int(wstring, miscstring, 100); strcpy(miscstring, "Level"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); hs_single[i].level = get_config_int(wstring, miscstring, 1); strcpy(miscstring, "Ship"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); hs_single[i].ship = 0;//get_config_int(wstring, miscstring, SHIP_POINTY); strcpy(miscstring, "Name"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); strcpy(hs_single[i].name, get_config_string(wstring, miscstring, "Nobody")); strcpy(wstring, "Highscores_Coop"); strcpy(miscstring, "Score"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); hs_coop[i].score = get_config_int(wstring, miscstring, 100); strcpy(miscstring, "Level"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); hs_coop[i].level = get_config_int(wstring, miscstring, 1); strcpy(miscstring, "Ship"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); hs_coop[i].ship = 0;//get_config_int(wstring, miscstring, SHIP_POINTY); strcpy(miscstring, "Name"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); strcpy(hs_coop[i].name, get_config_string(wstring, miscstring, "Nobody")); } best_ta_time = get_config_int("Highscores_TA", "best_time", 1000); strcpy(best_ta_name, get_config_string("Highscores_TA", "best_name", "Nobody")); } void save_config(void) { char miscstring [40]; char wstring [40]; char itstring [40]; int i; // options.sound_init = get_config_int("Options", "Sound_init", 1); set_config_int("Options", "Sound_mode", options.sound_mode); set_config_int("Options", "Run_vsync", options.run_vsync); set_config_int("Options", "Sound_volume", options.sound_volume); set_config_int("Options", "Ambience_volume", options.ambience_volume); set_config_int("Options", "Resolution", options.resolution); set_config_int("Options", "Colour_text", options.colour_text); for (i = 0; i < NO_CMDS; i ++) { strcpy(wstring, "Player1Keys"); strcpy(miscstring, "Key"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); set_config_int(wstring, miscstring, player[0].keys [i]); } for (i = 0; i < NO_CMDS; i ++) { strcpy(wstring, "Player2Keys"); strcpy(miscstring, "Key"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); set_config_int(wstring, miscstring, player[1].keys [i]); } for (i = 0; i < NO_SCORES; i ++) { strcpy(wstring, "Highscores_single"); strcpy(miscstring, "Score"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); set_config_int(wstring, miscstring, hs_single[i].score); strcpy(miscstring, "Level"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); set_config_int(wstring, miscstring, hs_single[i].level); /* strcpy(miscstring, "Ship"); strcpy(itstring, ""); strcat(miscstring, itoa(i, itstring, 10)); set_config_int(wstring, miscstring, hs_single[i].ship);*/ strcpy(miscstring, "Name"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); set_config_string(wstring, miscstring, hs_single[i].name); strcpy(wstring, "Highscores_Coop"); strcpy(miscstring, "Score"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); set_config_int(wstring, miscstring, hs_coop[i].score); strcpy(miscstring, "Level"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); set_config_int(wstring, miscstring, hs_coop[i].level); /* strcpy(miscstring, "Ship"); strcpy(itstring, ""); strcat(miscstring, itoa(i, itstring, 10)); set_config_int(wstring, miscstring, hs_coop[i].ship);*/ strcpy(miscstring, "Name"); strcpy(itstring, ""); // strcat(miscstring, itoa(i, itstring, 10)); anum(miscstring, i); set_config_string(wstring, miscstring, hs_coop[i].name); } set_config_int("Highscores_TA", "best_time", best_ta_time); set_config_string("Highscores_TA", "best_name", best_ta_name); } char *ship_name_long(int ship) { switch(ship) { /* case SHIP_LACEWING: return "lacewing}"; case SHIP_CAPYBARA: return "capybara}"; case SHIP_DESPOT: return "despot}"; case SHIP_HOOKWORM: return "hookworm}"; case SHIP_LENTIL: return "lentil}"; case SHIP_PORKUPINE: return "porkupine}"; case SHIP_PRONG: return "prong}"; case SHIP_SCORPION: return "false} scorpion}"; case SHIP_TORTFEASOR: return "tortfeasor}"; case SHIP_AETHER: return "aether} squid}"; case SHIP_RUMSFELD: return "rumsfeld's} delight}"; case SHIP_GODBOTHERER: return "godbotherer}"; case SHIP_BOTULUS: return "botulus}"; case SHIP_SLIDEWINDER: return "slidewinder}"; case SHIP_DOOM: return "doom} fork}";*/ default: return "{random}"; } } char *ship_name_short(int ship) { switch(ship) { /* case SHIP_LACEWING: return "Lacewing"; case SHIP_CAPYBARA: return "Capybara"; case SHIP_DESPOT: return "Despot"; case SHIP_HOOKWORM: return "Hookworm"; case SHIP_LENTIL: return "Lentil"; case SHIP_PORKUPINE: return "Porkupine"; case SHIP_PRONG: return "Prong"; case SHIP_SCORPION: return "False Scorpion"; case SHIP_TORTFEASOR: return "Tortfeasor"; case SHIP_AETHER: return "Aether Squid"; case SHIP_RUMSFELD: return "Rumsfeld's Delight"; case SHIP_GODBOTHERER: return "Godbotherer"; case SHIP_BOTULUS: return "Botulus"; case SHIP_SLIDEWINDER: return "Slidewinder"; case SHIP_DOOM: return "Doom Fork";*/ default: return "Unknown"; } } void ship_description1(int ship, char dstr [200]) { strcpy(dstr, ""); switch(ship) { case SHIP_POINTY: strcpy(dstr, "This vehicle uses special silver darts"); break; case SHIP_HORSESHOE: strcpy(dstr, "This vehicle's secondary weapon"); break; case SHIP_ROUND: strcpy(dstr, "This vehicle is capable of"); break; case SHIP_RETRO: strcpy(dstr, "This vehicle has an extra"); break; case SHIP_SMALL: strcpy(dstr, "This vehicle is especially small"); break; case SHIP_FINS: strcpy(dstr, "This vehicle has an additional set of"); break; case SHIP_ORBITAL: strcpy(dstr, "This vehicle carries a device which reduces"); break; case SHIP_CURVE: strcpy(dstr, "This vehicle causes an explosion on contact with an enemy."); break; default: strcpy(dstr, "Choose a random vehicle."); } } void ship_description2(int ship, char dstr [200]) { strcpy(dstr, ""); switch(ship) { case SHIP_POINTY: strcpy(dstr, "which are particularly painful to your enemies."); break; case SHIP_HORSESHOE: strcpy(dstr, "replenishes itself at an unusually rapid rate."); break; case SHIP_ROUND: strcpy(dstr, "repairing damaged armour or structure."); break; case SHIP_RETRO: strcpy(dstr, "engine outlet instead of a brake."); break; case SHIP_SMALL: strcpy(dstr, "and difficult for enemies to hit."); break; case SHIP_FINS: strcpy(dstr, "dart-throwers mounted to face backwards"); break; case SHIP_ORBITAL: strcpy(dstr, "acceleration from being struck by objects or energy."); break; case SHIP_CURVE: strcpy(dstr, "The power of the explosion increases as you accumulate symbols."); break; default: return; } } void display_victory_screen(void) { int county = 0; int county2 = 0; init_ms(); init_pyro(); do { menu_counter ++; make_grid_scroll(); run_pyros(); run_sparkles(); make_ms_move(); if (ticked == 0) { clear_bitmap(menu_bmp); show_grid(COLOUR_PURPLE3, COLOUR_PURPLE8); draw_ms(); draw_sparkles(); textprintf_centre_ex(menu_bmp, font2, 320, 40, COLOUR_YELLOW8 - (menu_counter / 4) % 4, -1, "{__victory__}"); textprintf_centre_ex(menu_bmp, font, 320, 40, -1, -1, "{__victory__}"); textprintf_centre_ex(menu_bmp, small_font, 320, 100, COLOUR_YELLOW8, -1, "You have defeated the enslavers of humanity"); textprintf_centre_ex(menu_bmp, small_font, 320, 115, COLOUR_YELLOW8, -1, "and may now take your place among those who survive!"); // textprintf_centre_ex(menu_bmp, small_font, 320, 230, COLOUR_YELLOW8, -1, "You may now take your place "); textprintf_centre_ex(menu_bmp, small_font, 320, 135, COLOUR_YELLOW8, -1, "Congratulations!"); if (county2 > 99) textprintf_centre_ex(menu_bmp, small_font, 320, 420, COLOUR_YELLOW5, -1, "Press Space to continue."); vsync(); menu_to_screen(); } do { county ++; } while (ticked == 0); ticked --; county2 ++; if (county2 > 99 && key [KEY_SPACE] != 0) { last_key = KEY_SPACE; break; } } while(TRUE); } // pyrotechnics! void init_pyro(void) { int i; for (i = 0; i < NO_PYROS; i ++) { pyro[i].type = PYRO_NONE; } for (i = 0; i < NO_SPARKLES; i ++) { sparkle[i].type = SPARKLE_NONE; } next_pyro = 10 + grand(20); } void run_pyros(void) { next_pyro --; if (next_pyro <= 0) { int angle = grand(ANGLE_FULL); int speed = 7000 + grand(4000); int colours [4] = {TRANS_YELLOW, TRANS_ORANGE, TRANS_LRED, TRANS_DRED}; colourify(colours); int x = 320000 + xpart(angle, ms_circle_rad * GRAIN); int y = 240000 + ypart(angle, ms_circle_rad * GRAIN); int size = 50 + grand(50); int type = PYRO_SPLIT1; if (grand(5) == 0) type = PYRO_ENDING; if (grand(10) == 0) type = PYRO_SPLIT2; create_pyro(x, y, xpart(angle, speed), ypart(angle, speed), type, colours, size, 3000 + grand(6000), 30 + grand(20)); pyro_sound(x, size); size *= 3; create_sparkle(x, y, 0, 0, SPARKLE_CIRCLE, colours [0], size, 12 + grand(2)); create_sparkle(x, y, 0, 0, SPARKLE_CIRCLE, colours [1], size + 2, 10 + grand(2)); create_sparkle(x, y, 0, 0, SPARKLE_CIRCLE, colours [2], size + 4, 8 + grand(2)); create_sparkle(x, y, 0, 0, SPARKLE_CIRCLE, colours [3], size + 6, 6 + grand(2)); next_pyro = 20 + grand(40); } manage_pyros(); } void colourify(int col [4]) { switch(grand(16)) { default: case 0: case 1: case 2: case 3: case 4: case 5: col [0] = TRANS_YELLOW; col [1] = TRANS_ORANGE; col [2] = TRANS_LRED; col [3] = TRANS_DRED; break; case 6: case 7: case 8: case 9: col [0] = TRANS_WHITE; col [1] = TRANS_YELLOW; col [2] = TRANS_ORANGE; col [3] = TRANS_LRED; break; case 10: case 11: col [0] = TRANS_YELLOW; col [1] = TRANS_LGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DGREEN; break; case 12: col [0] = TRANS_WHITE; col [1] = TRANS_YELLOW; col [2] = TRANS_LGREEN; col [3] = TRANS_DGREEN; break; case 13: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DBLUE; break; case 14: col [0] = TRANS_WHITE; col [1] = TRANS_LGREY; col [2] = TRANS_DGREY; col [3] = TRANS_DGREY; break; case 15: col [0] = TRANS_WHITE; col [1] = TRANS_PURPLE; col [2] = TRANS_LBLUE; col [3] = TRANS_DBLUE; break; } } void manage_pyros(void) { int i, x, y, size; for (i = 0; i < NO_PYROS; i ++) { if (pyro[i].type == PYRO_NONE) continue; pyro[i].x += pyro[i].x_speed; pyro[i].y += pyro[i].y_speed; drag_pyro(i); x = pyro[i].x + grand(pyro[i].dist) - grand(pyro[i].dist); y = pyro[i].y + grand(pyro[i].dist) - grand(pyro[i].dist); size = pyro[i].size + grand(pyro[i].size); create_sparkle(x, y, pyro[i].x_speed, pyro[i].y_speed, SPARKLE_CIRCLE, pyro[i].colours [0], size, 12 + grand(4)); create_sparkle(x, y, pyro[i].x_speed, pyro[i].y_speed, SPARKLE_CIRCLE, pyro[i].colours [1], size, 7 + grand(3)); create_sparkle(x, y, pyro[i].x_speed, pyro[i].y_speed, SPARKLE_CIRCLE, pyro[i].colours [2], size, 4 + grand(2)); create_sparkle(x, y, pyro[i].x_speed, pyro[i].y_speed, SPARKLE_CIRCLE, pyro[i].colours [3], size, 2 + grand(2)); pyro[i].timeout --; if (pyro[i].timeout <= 0) { if (pyro[i].type != PYRO_ENDING) pyro_burst(i); destroy_pyro(i); } } } void pyro_burst(int p) { int i; int number = 2 + grand(5); int angle_dist = ANGLE_FULL / number; int start_angle = grand(ANGLE_FULL); int rand_angle = 0; if (grand(4) == 0) rand_angle = grand(ANGLE_QUARTER); int size = (pyro[p].size / 2) + grand(pyro[p].size / 2); int dist = (pyro[p].size / 2) + grand(pyro[p].size / 2); int timeout = 20 + grand(15); int rand_timeout = 0; if (grand(4) == 0) rand_timeout = grand(20); int speed = 5000 + grand(3000); int rand_speed = 0; if (grand(4) == 0) rand_speed = grand(5000); int rand_colour = 0; if (grand(8) == 0) rand_colour = 1; int angle = 0; int type = PYRO_ENDING; if (pyro[p].type == PYRO_SPLIT2) type = PYRO_SPLIT1; if (grand(4) == 0) colourify(pyro[p].colours); for (i = 0; i < number; i ++) { angle = start_angle + (i * angle_dist) + grand(rand_angle) - grand(rand_angle); if (pyro[p].type == PYRO_RANDSPLIT) { type = PYRO_ENDING; if (grand(3) == 0) type = PYRO_SPLIT1; if (grand(19) == 0) type = PYRO_SPLIT2; } if (rand_colour == 1) colourify(pyro[p].colours); create_pyro(pyro[p].x, pyro[p].y, xpart(angle, speed + grand(rand_speed)), ypart(angle, speed + grand(rand_speed)), type, pyro[p].colours, size, dist, timeout + grand(rand_timeout)); } pyro_sound(pyro[p].x, pyro[p].size); } void create_pyro(int x, int y, int xs, int ys, int type, int colours [4], int size, int dist, int timeout) { int i; for (i = 0; i < NO_PYROS; i ++) { if (i == NO_PYROS - 1) return; if (pyro[i].type == PYRO_NONE) break; } pyro[i].x = x; pyro[i].y = y; pyro[i].x_speed = xs; pyro[i].y_speed = ys; pyro[i].colours [0] = colours [0]; pyro[i].colours [1] = colours [1]; pyro[i].colours [2] = colours [2]; pyro[i].colours [3] = colours [3]; pyro[i].size = size; pyro[i].dist = dist; pyro[i].timeout = timeout; pyro[i].type = type; // textprintf_centre_ex(screen, small_font, 320, 300, COLOUR_YELLOW8, -1, "new pyro %i %i %i %i %i %i", x, y, xs, ys, size, timeout); // rest(500); } void pyro_sound(int x, int size) { int pan = 127; if (options.sound_mode == SOUNDMODE_STEREO || options.sound_mode == SOUNDMODE_REVERSED) { x = x / 640; x *= 255; x /= 1000; // x -= 127; pan = x; if (pan <= 0) pan = 0; if (pan >= 255) pan = 255; if (options.sound_mode != SOUNDMODE_REVERSED) pan = 255 - pan; } int pitch = 1400 + grand(100) - (size * 10); if (pitch <= 100) pitch = 100; // textprintf_centre_ex(screen, small_font, 320, 300, COLOUR_YELLOW8, -1, "%i", pan); // rest(300); play_wav2(NWAV_BURST, pitch, 150 + grand(100), pan); } void run_sparkles(void) { int i; for (i = 0; i < NO_SPARKLES; i ++) { if (sparkle[i].type == SPARKLE_NONE) continue; sparkle[i].x += sparkle[i].x_speed; sparkle[i].y += sparkle[i].y_speed; drag_sparkle(i); sparkle[i].size -= sparkle[i].tickrate;//= 10; if (sparkle[i].size <= 0) destroy_sparkle(i); } } void draw_sparkles(void) { int i; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); for (i = 0; i < NO_SPARKLES; i ++) { if (sparkle[i].type == SPARKLE_NONE) continue; // circlefill(menu_bmp, sparkle[i].x / GRAIN, sparkle[i].y / GRAIN, 10, TRANS_YELLOW); circlefill(menu_bmp, sparkle[i].x / GRAIN, sparkle[i].y / GRAIN, sparkle[i].size / 10, sparkle[i].colour); } for (i = 0; i < NO_PYROS; i ++) { if (pyro[i].type != PYRO_NONE) draw_a_light(menu_bmp, (pyro[i].size / 5) + grand(15), pyro[i].x / GRAIN, pyro[i].y / GRAIN); // in display.cc } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); } void create_sparkle(int x, int y, int xs, int ys, int type, int colour, int size, int tickrate) { int i; for (i = 0; i < NO_SPARKLES; i ++) { if (i == NO_SPARKLES - 1) return; if (sparkle[i].type == SPARKLE_NONE) break; } sparkle[i].x = x; sparkle[i].y = y; sparkle[i].x_speed = xs; sparkle[i].y_speed = ys; sparkle[i].type = type; sparkle[i].colour = colour; sparkle[i].size = size; sparkle[i].tickrate = tickrate; // textprintf_centre_ex(screen, small_font, 320, 300, COLOUR_YELLOW8, -1, "new sparkle %i %i %i", x, y, size); // rest(200); } void destroy_pyro(int p) { pyro[p].type = PYRO_NONE; } void destroy_sparkle(int s) { sparkle[s].type = SPARKLE_NONE; } void drag_pyro(int p) { pyro[p].x_speed *= (float) 0.95; pyro[p].y_speed *= (float) 0.95; } void drag_sparkle(int s) { sparkle[s].x_speed *= (float) 0.50; sparkle[s].y_speed *= (float) 0.50; } void unlock_screen(int which) { int county = 0; int county2 = 0; do { menu_counter ++; make_grid_scroll(); if (ticked == 0) { clear_bitmap(menu_bmp); show_grid(COLOUR_PURPLE3, COLOUR_PURPLE8); textprintf_centre_ex(menu_bmp, font2, 320, 120, COLOUR_YELLOW8 - (menu_counter / 4) % 4, -1, "{__unlock__}"); textprintf_centre_ex(menu_bmp, font, 320, 120, -1, -1, "{__unlock__}"); textprintf_centre_ex(menu_bmp, small_font, 320, 200, COLOUR_YELLOW8, -1, "You have unlocked"); switch(which) { case UNLOCK_PURPLE: textprintf_centre_ex(menu_bmp, small_font, 320, 230, TRANS_PURPLE, -1, "Purple Mode!"); break; case UNLOCK_VOID: textprintf_centre_ex(menu_bmp, small_font, 320, 230, COLOUR_GREY5, -1, "Night Mode!"); break; case UNLOCK_GOD: textprintf_centre_ex(menu_bmp, small_font, 320, 230, COLOUR_WHITE, -1, "God Mode!"); break; } textprintf_centre_ex(menu_bmp, small_font, 320, 260, COLOUR_YELLOW8, -1, "Switch it on in the Special Menu."); // textprintf_centre_ex(menu_bmp, small_font, 320, 290, COLOUR_YELLOW8, "Now you can do something useful with"); // textprintf_centre_ex(menu_bmp, small_font, 320, 305, COLOUR_YELLOW8, "your time, like "); if (county2 > 99) textprintf_centre_ex(menu_bmp, small_font, 320, 380, COLOUR_YELLOW5, -1, "Press Space to continue."); vsync(); menu_to_screen(); } do { county ++; } while (ticked == 0); ticked --; county2 ++; if (county2 > 99 && key [KEY_SPACE] != 0) { last_key = KEY_SPACE; break; } } while(TRUE); } int ms_colour(void) { switch(grand(6)) { case 0: return GC_GREY3; case 1: return GC_GREEN4; case 2: return GC_YELLOW4; case 3: return GC_RED4; case 4: return GC_BLUE4; case 5: return GC_ORANGE4; } return GC_ORANGE3; } void init_ms(void) { ms_circle_rad = 30 + grand(15); ms_circle_col = ms_colour() + 2; if (game.mode_void == 1) ms_circle_col += 46; int i; for (i = 0; i < 2; i ++) { ms_arm_col [i] = ms_colour(); if (game.mode_void == 1) ms_arm_col [i] += 46; ms_arm_out [i] = ms_circle_rad + (i * 40) + grand(50) + 40; ms_arm_angle [i] = ANGLE_1_SIXTEENTH + grand(ANGLE_1_EIGHTH); ms_arm_inward [i] = 15 + grand(20); ms_arm_rot [i] = grand(ANGLE_FULL); ms_arm_type [i] = grand(MS_TYPES); // ms_arm_type [i] = MS_SPINNER; // if (grand(2) == 0) // ms_arm_type [i] = MS_SQUAREY; ms_arm_number [i] = 2 + grand(4); ms_arm_blatter_size [i] = 8 + grand(20); if (ms_arm_number [i] > 3) ms_arm_angle [i] /= 2; switch(ms_arm_type [i]) { case MS_SPINNER: ms_arm_inward [i] = 0; ms_arm_angle [i] = 1; ms_arm_angle [i] = ANGLE_1_32 + grand(ANGLE_1_SIXTEENTH); break; case MS_SPIKEY: ms_arm_angle [i] = ANGLE_1_SIXTEENTH + grand(ANGLE_QUARTER); break; case MS_ORBITER: ms_arm_inward [i] = 35 + grand(20); if (ms_arm_inward [i] >= ms_arm_out [i] - 10) ms_arm_inward [i] = ms_circle_rad; break; case MS_SQUAREY: ms_arm_angle [i] = 1; ms_arm_angle [i] = ANGLE_1_32 + grand(ANGLE_1_SIXTEENTH); ms_arm_inward [i] = 35 + grand(20); if (ms_arm_inward [i] >= ms_arm_out [i] - 10) ms_arm_inward [i] = ms_circle_rad; break; } ms_arm_rot_delta [i] = 3 + grand(5); if (grand(2) == 0) ms_arm_rot_delta [i] *= -1; } if (ms_arm_rot_delta [0] == ms_arm_rot_delta [1]) ms_arm_rot_delta [0] *= -1; } void draw_ms(void) { int i, x = 320, y = 240, col1 = GC_GREY1, col2; for (i = 0; i < 2; i ++) { col2 = ms_arm_col [i]; // col1 = col2; switch(ms_arm_type [i]) { case MS_SPINNER: draw_overspinner(menu_bmp, x, y, ms_arm_rot [i], ms_arm_out [i], ms_arm_inward [i], ms_arm_angle [i], ANGLE_FULL / ms_arm_number [i], ms_arm_number [i], col1, col2); break; case MS_SPIKEY: draw_spikey(menu_bmp, x, y, ms_arm_rot [i], ms_arm_out [i], ms_arm_inward [i], ms_arm_angle [i], ANGLE_FULL / ms_arm_number [i], ms_arm_number [i], col1, col2, 0, 0); break; case MS_SQUAREY: draw_squarey(menu_bmp, x, y, ms_arm_rot [i], ms_arm_out [i], ms_arm_inward [i], ms_arm_angle [i], ANGLE_FULL / ms_arm_number [i], ms_arm_number [i], col1, col2); break; case MS_BLATTER: draw_blatter(menu_bmp, x, y, ms_arm_number [i], ms_arm_out [i], ms_arm_rot [i], ms_arm_blatter_size [i], col1, col2); break; case MS_ORBITER: draw_orbiter(menu_bmp, x, y, ms_arm_rot [i], ms_arm_out [i], ms_arm_inward [i], ms_arm_blatter_size [i], ms_arm_angle [i], ANGLE_FULL / ms_arm_number [i], ms_arm_number [i], col1, col2); // draw_orbiter(BITMAP *bmp, int x, int y, int attribute, int out1, int out2, int out3, int angle1, int angle2, int arms, int col1, int col2); break; } } circlefill(menu_bmp, 320, 240, ms_circle_rad, ms_circle_col); circle(menu_bmp, 320, 240, ms_circle_rad, GC_GREY1); } void make_ms_move(void) { ms_arm_rot [0] += ms_arm_rot_delta [0]; ms_arm_rot [0] &= 1023; ms_arm_rot [1] += ms_arm_rot_delta [1]; ms_arm_rot [1] &= 1023; } void menu_sound1(void) { play_wav2(NWAV_MENU, 600, 255, 127); } void menu_sound2(void) { play_wav2(NWAV_MENU, 300, 255, 127); } // appends a number to a string. Unforgivable hack needed to avoid using itoa for portability reasons, and to avoid learning how to use snprintf() for laziness reasons. Also I wrote it while hungover void anum(char *str, int num) { switch(num) { case 0: strcat(str, "0"); break; case 1: strcat(str, "1"); break; case 2: strcat(str, "2"); break; case 3: strcat(str, "3"); break; case 4: strcat(str, "4"); break; case 5: strcat(str, "5"); break; case 6: strcat(str, "6"); break; case 7: strcat(str, "7"); break; case 8: strcat(str, "8"); break; case 9: strcat(str, "9"); break; case 10: strcat(str, "10"); break; case 11: strcat(str, "11"); break; case 12: strcat(str, "12"); break; case 13: strcat(str, "13"); break; case 14: strcat(str, "14"); break; case 15: strcat(str, "15"); break; case 16: strcat(str, "16"); break; case 17: strcat(str, "17"); break; case 18: strcat(str, "18"); break; case 19: strcat(str, "19"); break; case 20: strcat(str, "20"); break; case 30: strcat(str, "30"); break; case 40: strcat(str, "40"); break; case 50: strcat(str, "50"); break; case 60: strcat(str, "60"); break; case 70: strcat(str, "70"); break; case 80: strcat(str, "80"); break; case 90: strcat(str, "90"); break; case 100: strcat(str, "100"); break; default: strcat(str, "num"); break; } } overgod-1.0/menu.h0000644000175000001440000000007307725673104013157 0ustar michiusersvoid init_menus_once_only(void); void menu_loop(void); overgod-1.0/overgod.cfg0000644000175000001440000000372210311636643014164 0ustar michiusers[Misc] Seed = 9871 [Options] Sound_mode = 2 Run_vsync = 1 Sound_volume = 100 Ambience_volume = 100 Resolution = 2 # If the game crashes, change the Resolution setting to 0, which means 640x480 fullscreen. # 1 means 800x600, but that might not work on all computers. # Values: 0 = 640x480 fullscreen; 1 = 800x600 fullscreen; 2 = 640x480 windowed; 3 = 800x600 windowed Colour_text = 0 [Player1Keys] Key0 = 84 Key1 = 82 Key2 = 83 Key3 = 1 Key4 = 19 Key5 = 85 Key6 = 24 Key7 = 24 Key8 = 24 Key9 = 4 [Player2Keys] Key0 = 9 Key1 = 10 Key2 = 12 Key3 = 20 Key4 = 26 Key5 = 11 Key6 = 75 Key7 = 75 Key8 = 75 Key9 = 21 [Highscores_single] Name0 = Xom Score0 = 10000 Level0 = 10 Name1 = Michi Score1 = 1410 Level1 = 4 Name2 = Vehumet Score2 = 1000 Level2 = 7 Score3 = 950 Level3 = 6 Name3 = Makhleb Score4 = 900 Level4 = 6 Name4 = Kikubaaqudgha Score5 = 890 Level5 = 3 Name5 = Michi Score6 = 850 Level6 = 5 Name6 = Yredelemnul Score7 = 800 Level7 = 5 Name7 = Nemelex Xobeh Score8 = 750 Level8 = 5 Name8 = The Shining One Score9 = 700 Level9 = 4 Name9 = Zin Score10 = 650 Level10 = 4 Name10 = Sif Muna Score11 = 600 Level11 = 4 Name11 = Elyvilon Score12 = 550 Level12 = 4 Name12 = Okawaru Score13 = 500 Level13 = 3 Name13 = Trog Score14 = 450 Level14 = 2 Name14 = Sigmund [Highscores_Coop] Score0 = 1000 Level0 = 3 Name0 = Schnorkel Score1 = 950 Level1 = 3 Name1 = Moloch Score2 = 900 Level2 = 3 Name2 = Belial Score3 = 850 Level3 = 2 Name3 = Zoz Score4 = 800 Level4 = 2 Name4 = Hagon Score5 = 750 Level5 = 2 Name5 = Lemming Score6 = 700 Level6 = 2 Name6 = Potto Score7 = 650 Level7 = 2 Name7 = Lemur Score8 = 600 Level8 = 1 Name8 = Sloth Score9 = 550 Level9 = 1 Name9 = Eggplant Score10 = 500 Level10 = 1 Name10 = CaptainP Score11 = 450 Level11 = 1 Name11 = CaptainP Score12 = 400 Level12 = 1 Name12 = CaptainP Score13 = 350 Level13 = 1 Name13 = CaptainP Score14 = 300 Level14 = 1 Name14 = CaptainP [Highscores_TA] best_time = 4696 best_name = Sluggish [Unlock] Purple = 0 Void = 0 God = 0 #don't even try overgod-1.0/palette.c0000644000175000001440000005474110310757124013644 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: palette.c History: 11/9/2005 - Version 1.0 finalised This file contains: - palette and transparency stuff. Various enums are in palette.h. */ /* Lacewing Copyright (C) 2003 Captain Pork This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach Captain Pork by sending an email to captainpork@fastmail.fm or sending a letter to Captain Pork, 3/4 Kensington Rd, Rose Park, SA 5067 Australia but my lease is a short-term one so email is probably your best bet. File: Palette.c History: 1/5/03 - Started (Capt Pork) This file contains: The palette functions */ #include "allegro.h" #include "config.h" #include "palette.h" #include "globvars.h" COLOR_MAP trans_table; int blend_function(int x, int y, RGB *rgbl); int limit_colour(int colour_input); int average_colours(int colour1, int colour2); RGB other_palet [1324]; RGB palet [256]; RGB light_palet [256]; RGB dark_palet [256]; RGB other_palet2 [2048]; // what seems to be a weird bug in Allegro forces me to put padding around // the palet array, or it becomes corrupted. The same thing happened in // World of Violence and I have no idea why. int adjust_lit_colour(int col, int lit); int add_light_to_colour(int col, int lit); void pork_create_color_table(COLOR_MAP *table, AL_CONST PALETTE pal); int get_lower_colour(int y); int colour_illumination(int y); int base_colour(int y); int colour_brightness(int y); void init_light_palette(void); void init_dark_palette(void); void colour_table(const char *which_call); //void colour_table(void); //RGB mono_palet [256]; int base_palette [48] [3] = { // DON't modify this palette - it may mess up image loading {0, 0, 0}, {0, 0, 1}, {10, 10, 10}, {20, 20, 20}, {30, 30, 30}, {40, 40, 40}, {50, 50, 50}, {63, 63, 63}, // greys {0, 8, 0}, {0, 16, 0}, {3, 24, 3}, {6, 32, 6}, {8, 40, 8}, {12, 48, 12}, {16, 56, 16}, {20, 63, 20}, // Greens {8, 8, 0}, {16, 16, 0}, {24, 24, 4}, {32, 32, 8}, {40, 40, 12}, {48, 48, 16}, {56, 56, 20}, {63, 63, 24}, // yellows // DON't modify this palette - it may mess up image loading {8, 3, 0}, {16, 6, 0}, {24, 9, 0}, {32, 12, 0}, {40, 15, 0}, {48, 18, 0}, {56, 21, 0}, {63, 24, 0}, // Oranges {8, 0, 0}, {16, 0, 0}, {24, 0, 0}, {32, 3, 3}, {40, 5, 5}, {48, 7, 7}, {56, 9, 9}, {63, 11, 11}, // Reds {0, 0, 8}, {0, 0, 16}, {4, 4, 24}, {8, 8, 32}, {12, 12, 40}, {16, 16, 48}, {20, 20, 56}, {24, 24, 63} // Blues // DON't modify this palette - it may mess up image loading }; int base_palette2 [48] [3] = { // Modifying this palette is okay {0, 0, 0}, {0, 0, 1}, {10, 10, 10}, {20, 20, 20}, {33, 33, 33}, {46, 46, 46}, {55, 55, 55}, {63, 63, 63}, // greys {2, 8, 2}, {4, 16, 4}, {8, 24, 8}, {16, 32, 16}, {24, 40, 24}, {30, 48, 30}, {33, 56, 33}, {36, 63, 36}, // Greens {8, 6, 3}, {16, 17, 6}, {24, 20, 12}, {32, 30, 16}, {40, 37, 22}, {48, 45, 30}, {56, 52, 36}, {63, 60, 40}, // yellows /* {8, 4, 1}, {16, 6, 3}, {24, 9, 6}, {32, 12, 9}, {40, 20, 12}, {48, 25, 15}, {56, 30, 18}, {63, 35, 21}, // Oranges {8, 3, 3}, {16, 6, 6}, {24, 9, 9}, {32, 12, 12}, {40, 15, 15}, {48, 18, 18}, {56, 21, 21}, {63, 25, 25}, // Reds */ {8, 5, 3}, {16, 9, 7}, {24, 13, 9}, {32, 17, 13}, {40, 24, 16}, {48, 28, 19}, {56, 34, 21}, {63, 40, 25}, // Oranges {8, 3, 3}, {16, 6, 6}, {24, 9, 9}, {32, 12, 12}, {40, 15, 15}, {48, 18, 18}, {56, 21, 21}, {63, 25, 25}, // Reds {4, 4, 8}, {8, 8, 16}, {15, 15, 24}, {20, 20, 32}, {24, 24, 40}, {28, 28, 48}, {36, 36, 56}, {42, 42, 63} // Blues // Modifying this palette is okay }; #define END_TRANSPARENCIES 104 /* 0 - black 1-104 - transparencies 105-152 - dark 153-200 - lighter 201-248 - brightest 249-255 - ??? Colours: 1 - grey/white 2 - Green 3 - yellow 4 - orange 5 - red 6 - blue Transparencies: 1 - white 2 - purple 3 - lblue 4 - dblue 5 - yellow 6 - lgreen 7 - dgreen 8 - orange 9 - red 10 - dred 11 - white2 12 - lgrey 13 - dgrey 13 * 8 = 104 256 - 104 = 152 152 / 48 = 3 + 8 */ void process_palette(RGB *proc_palet) { // int i; } void init_palette(void) { int i; // colour_table("First"); for (i = 0; i < 48; i ++) { /* // base (ambient) palet[i + 105].r = limit_colour(base_palette [i] [0] * 3) / 4; palet[i + 105].g = limit_colour(base_palette [i] [1] * 3) / 4; palet[i + 105].b = limit_colour(base_palette [i] [2] * 3) / 4; // bright palet[i + 153].r = limit_colour(base_palette [i] [0]); palet[i + 153].g = limit_colour(base_palette [i] [1]); palet[i + 153].b = limit_colour(base_palette [i] [2]); // brightest palet[i + 201].r = limit_colour((base_palette [i] [0] * 4) / 3); palet[i + 201].g = limit_colour((base_palette [i] [1] * 4) / 3); palet[i + 201].b = limit_colour((base_palette [i] [2] * 4) / 3); */ // base (ambient) palet[i + 105].r = limit_colour(((base_palette [i] [0] * 4) / 5) - 5); palet[i + 105].g = limit_colour(((base_palette [i] [1] * 4) / 5) - 5); palet[i + 105].b = limit_colour(((base_palette [i] [2] * 4) / 5) - 5); // bright palet[i + 153].r = limit_colour(base_palette [i] [0]); palet[i + 153].g = limit_colour(base_palette [i] [1]); palet[i + 153].b = limit_colour(base_palette [i] [2]); // brightest palet[i + 201].r = limit_colour(((base_palette [i] [0] * 5) / 4)); palet[i + 201].g = limit_colour(((base_palette [i] [1] * 5) / 4)); palet[i + 201].b = limit_colour(((base_palette [i] [2] * 5) / 4)); } palet [252].r = 23; palet [252].g = 53; palet [252].b = 23; palet [255].r = 53; palet [255].g = 23; palet [255].b = 23; for (i = 0; i < 8; i ++) { // NOT REAL PALETTE - see below // White - should be same as WHITE2 (below) palet[i + 1].r = limit_colour(48 + i * 2); palet[i + 1].g = limit_colour(48 + i * 2); palet[i + 1].b = limit_colour(48 + i * 2); // Yellow palet[i + 9].r = limit_colour(47 + i * 3); palet[i + 9].g = limit_colour(47 + i * 3); palet[i + 9].b = limit_colour(10 + i * 3); // LGreen palet[i + 17].r = limit_colour(i * 3); palet[i + 17].g = limit_colour(32 + i * 4); palet[i + 17].b = limit_colour(i * 3); // Orange palet[i + 25].r = limit_colour(47 + i * 3); palet[i + 25].g = limit_colour(20 + i * 3); palet[i + 25].b = limit_colour(5 + i * 2); // Red palet[i + 33].r = limit_colour(41 + i * 4); palet[i + 33].g = limit_colour(15 + i * 2); palet[i + 33].b = limit_colour(5 + i * 2); // DGreen palet[i + 41].r = limit_colour(i * 2); palet[i + 41].g = limit_colour(21 + i * 4); palet[i + 41].b = limit_colour(i * 2); // DRed palet[i + 49].r = limit_colour(20 + i * 4); palet[i + 49].g = limit_colour(i * 2); palet[i + 49].b = limit_colour(i * 2); // Purple palet[i + 57].r = limit_colour(32 + i * 4); palet[i + 57].g = limit_colour(i * 3); palet[i + 57].b = limit_colour(32 + i * 4); // LBlue palet[i + 65].r = limit_colour(10 + i * 3); palet[i + 65].g = limit_colour(10 + i * 3); palet[i + 65].b = limit_colour(47 + i * 2); // DBlue palet[i + 73].r = limit_colour(i * 2); palet[i + 73].g = limit_colour(i * 2); palet[i + 73].b = limit_colour(21 + i * 4); // White2 - should be same as WHITE (above) palet[i + 81].r = limit_colour(48 + i * 2); palet[i + 81].g = limit_colour(48 + i * 2); palet[i + 81].b = limit_colour(48 + i * 2); // LGrey palet[i + 89].r = limit_colour(24 + i * 4); palet[i + 89].g = limit_colour(24 + i * 4); palet[i + 89].b = limit_colour(24 + i * 4); // DGrey palet[i + 97].r = limit_colour(12 + i * 4); palet[i + 97].g = limit_colour(12 + i * 4); palet[i + 97].b = limit_colour(12 + i * 4); } palet[0].r = 0; palet[0].g = 0; palet[0].b = 0; /* for (i = 1; i < 256; i ++) { if (palet[i].r < 20 && palet[i].b < 20 && palet[i].g < 20) { light_palet[i].r = palet[i].r; light_palet[i].g = palet[i].g; light_palet[i].b = palet[i].b; } else { light_palet[i].r = limit_colour((palet[i].r * 32) / 63 + 25); light_palet[i].b = limit_colour((palet[i].b * 32) / 63 + 25); light_palet[i].g = limit_colour((palet[i].g * 32) / 63 + 25); } } */ /* for (i = 0; i < 192; i ++) { palet[i].r = 0; palet[i].b = 0; palet[i].g = 0; }*/ set_palette(palet); pork_create_color_table(&trans_table, palet); color_map = &trans_table; set_palette(palet); init_light_palette(); init_dark_palette(); // after light_palette /* BITMAP *pbmp = create_bitmap(16, 16); int x, y; for (x = 0; x < 16; x ++) { for (y = 0; y < 16; y ++) { putpixel(pbmp, y, x, y + (x * 16)); // if (y + (x * 16) < 192) // putpixel(pbmp, y, x, 0); } } save_bitmap("palgod.pcx", pbmp, palet); */ /* for (x = 192; x < 256; x ++) { rectfill(screen, (x - 192) * 6, 1, (x - 192) * 6 + 6, 10, x); } do { } while (key [KEY_U] == 0); */ // int j; /* for (i = 0; i < 256; i ++) { j = limit_colour((palet[i].r + palet[i].g + palet[i].b) / 3); mono_palet [i].r = j; mono_palet [i].g = j; mono_palet [i].b = j; } mono_palet [222].r = 60; mono_palet [222].g = 40; mono_palet [222].b = 0; mono_palet [223].r = 0; mono_palet [223].g = 60; mono_palet [223].b = 10; // these colours used for 'you win'/'game over' */ } int limit_colour(int colour_input) { if (colour_input < 0) return 0; if (colour_input > 63) return 63; return colour_input; } int average_colours(int colour1, int colour2) { int avge = colour1 + colour2 / 2; if (avge < 0) return 0; if (avge > 63) return 63; return avge; } int blend_function(int x, int y, RGB *rgbl) { // if (x % 8 == 0) // { // return y; // } if (x == TRANS_REVERSE) { return ((int) y / 8) * 8 + (8 - ((y-1) % 8)); } if (x == TRANS_DARKEN) { // return ((int) y / 8) * 8 + (((y-1) % 8) / 2); if ((y-1) % 8 < 1) x = 1; else x = 7; if (y < GC_BLACK) return ((int) y / 8) * 8 + x; return COLOUR_BLACK + x; } /* if (x == TRANS_GREY) { if (y < 192) return y; return y - 64; }*/ // if (x >= TRANS_WHITE && x < TRANS_END) /* if (x == TRANS_WHITE || x == TRANS_PURPLE || x == TRANS_LBLUE || x == TRANS_DBLUE || x == TRANS_YELLOW || x == TRANS_LGREEN || x == TRANS_DGREEN || x == TRANS_ORANGE || x == TRANS_LRED || x == TRANS_DRED || x == TRANS_WHITE2 || x == TRANS_LGREY || x == TRANS_DGREY)*/ if (x > GC_BLACK && x <= COLOUR_BLUE8) // ie isn't a transparency or a bright lit { if (x % 8 == 1 && x < COLOUR_BLACK) // ie is a GC (lowest-light) colour { // if (y > GC_BLACK && y <= GC_WHITE) // ie is part of GC grey scale // y = x + ((y-1) % 8) - 4; if (y > GC_BLACK && y <= GC_BLUE8) // ie is part of GC grey scale y = x + ((y-5) % 8); return y; // if (x == CONVERT_YELLOW1 && y % 8 != 0) // y --; } if (x > COLOUR_BLACK && x % 8 == 1 && x <= COLOUR_BLUE8) // ie is a COLOUR (middle-light) colour { if (y > COLOUR_BLACK && y <= COLOUR_BLUE8) // ie is part of COLOUR grey scale // y = x + ((y-5) % 8) - 48;// - 48; y = x + ((y-5) % 8) - 48;// - 48; // if (x == CONVERT_YELLOW2 && y % 8 != 0) // y --; return y; } } if (x <= END_TRANSPARENCIES && x % 8 == 0 && x > 0) { // if ((y - 1) / 8 < ((x / 8) - TRANS_WHITE) if (y < x - 7 && y < END_TRANSPARENCIES) return y; // don't overwrite lower transparencies*/ //return 100; // if ((y - 1) % 8 == 0) // return (y - 1) % 8 + (x - TRANS_WHITE) * 8 + 1; return (y - 1) % 8 + x - 7; // return (y - 1) % 8 + (x - TRANS_WHITE) * 8 + 1; } if (x == LIGHT_1) { if (y <= END_TRANSPARENCIES) return y; // leaves transparencies alone if (y >= 105 && y <= 152) { return y + 48; } // only lightens areas only lit by ambient light. return y; } if (x == LIGHT_2) { if (y <= END_TRANSPARENCIES) return y; // leaves transparencies alone if (y >= 105 && y <= 152) { return y + 96; } // lightens level 1 light to level 3 if (y >= 153 && y <= 200) { return y + 48; } // lightens level 2 light to level 3 return y; } return y; } int get_lower_colour(int y) { if (y % 32 == COLOUR_WHITE % 32) return 7; if (y % 32 >= COLOUR_BLACK % 32 && y % 32 <= COLOUR_WHITE % 32) return (y % 32); if (y % 32 >= COLOUR_ORANGE1 % 32 && y % 32 <= COLOUR_BLUE4 % 32) return ((((y % 32) - (COLOUR_ORANGE1 % 32)) % 4 + 1) * 3) / 2; return 7; } int colour_to_trans(int y) { switch(y) { case COLOUR_GREY1: case COLOUR_GREY2: case COLOUR_GREY3: case COLOUR_GREY4: return TRANS_LGREY; case COLOUR_GREY5: case COLOUR_GREY6: case COLOUR_WHITE: return TRANS_WHITE; case COLOUR_ORANGE1: case COLOUR_ORANGE2: case COLOUR_ORANGE3: case COLOUR_ORANGE4: return TRANS_ORANGE; case COLOUR_ORANGE5: case COLOUR_ORANGE6: case COLOUR_ORANGE7: case COLOUR_ORANGE8: return TRANS_ORANGE; case COLOUR_BLUE1: case COLOUR_BLUE2: case COLOUR_BLUE3: case COLOUR_BLUE4: return TRANS_DBLUE; case COLOUR_BLUE5: case COLOUR_BLUE6: case COLOUR_BLUE7: case COLOUR_BLUE8: return TRANS_LBLUE; case COLOUR_RED1: case COLOUR_RED2: case COLOUR_RED3: case COLOUR_RED4: return TRANS_DRED; case COLOUR_RED5: case COLOUR_RED6: case COLOUR_RED7: case COLOUR_RED8: return TRANS_LRED; case COLOUR_YELLOW1: case COLOUR_YELLOW2: case COLOUR_YELLOW3: case COLOUR_YELLOW4: return TRANS_YELLOW; case COLOUR_YELLOW5: case COLOUR_YELLOW6: case COLOUR_YELLOW7: case COLOUR_YELLOW8: return TRANS_YELLOW; case COLOUR_GREEN1: case COLOUR_GREEN2: case COLOUR_GREEN3: case COLOUR_GREEN4: return TRANS_DGREEN; case COLOUR_GREEN5: case COLOUR_GREEN6: case COLOUR_GREEN7: case COLOUR_GREEN8: return TRANS_LGREEN; /* case COLOUR_PURPLE1: case COLOUR_PURPLE2: case COLOUR_PURPLE3: case COLOUR_PURPLE4: case COLOUR_PURPLE5: case COLOUR_PURPLE6: case COLOUR_PURPLE7: case COLOUR_PURPLE8: return TRANS_PURPLE;*/ default: return TRANS_WHITE; } } int base_colour(int y) { switch(y % 32) { case COLOUR_GREY1: case COLOUR_GREY2: case COLOUR_GREY3: case COLOUR_GREY4: case COLOUR_GREY5: case COLOUR_GREY6: case COLOUR_WHITE: return COLOUR_GREY1; case COLOUR_ORANGE1: case COLOUR_ORANGE2: case COLOUR_ORANGE3: case COLOUR_ORANGE4: return COLOUR_ORANGE1; case COLOUR_BLUE1: case COLOUR_BLUE2: case COLOUR_BLUE3: case COLOUR_BLUE4: return COLOUR_BLUE1; case COLOUR_RED1: case COLOUR_RED2: case COLOUR_RED3: case COLOUR_RED4: return COLOUR_RED1; case COLOUR_YELLOW1: case COLOUR_YELLOW2: case COLOUR_YELLOW3: case COLOUR_YELLOW4: return COLOUR_YELLOW1; case COLOUR_GREEN1: case COLOUR_GREEN2: case COLOUR_GREEN3: case COLOUR_GREEN4: return COLOUR_GREEN1; } return COLOUR_BLACK; } /* This function had to be modified from the allegro create_color_table because the allegro version used bestfit_color, whereas we need specific color values (eg so that there can be multiple blacks to carry information in areas of the screen that haven't been lightsourced yet) */ void pork_create_color_table(COLOR_MAP *table, AL_CONST PALETTE pal) //void pork_create_color_table(COLOR_MAP *table, AL_CONST PALETTE pal, (int *)(blend)(AL_CONST PALETTE pal, int x, int y, RGB *rgb), void (*callback)(int pos)) { int x, y, z; RGB c; for (x=0; xdata[x][y] = z;//rgb_map->data[c.r>>1][c.g>>1][c.b>>1]; // else // table->data[x][y] = bestfit_color(pal, c.r, c.g, c.b); } } } void init_light_palette(void) { int i; for (i = 0; i < 48; i ++) { // base (ambient) light_palet[i + 105].r = limit_colour(((base_palette2 [i] [0] * 4) / 5) - 5); light_palet[i + 105].g = limit_colour(((base_palette2 [i] [1] * 4) / 5) - 5); light_palet[i + 105].b = limit_colour(((base_palette2 [i] [2] * 4) / 5) - 5); // bright light_palet[i + 153].r = limit_colour(base_palette2 [i] [0]); light_palet[i + 153].g = limit_colour(base_palette2 [i] [1]); light_palet[i + 153].b = limit_colour(base_palette2 [i] [2]); // brightest light_palet[i + 201].r = limit_colour(((base_palette2 [i] [0] * 5) / 4)); light_palet[i + 201].g = limit_colour(((base_palette2 [i] [1] * 5) / 4)); light_palet[i + 201].b = limit_colour(((base_palette2 [i] [2] * 5) / 4)); } light_palet [252].r = 23; light_palet [252].g = 53; light_palet [252].b = 23; light_palet [255].r = 53; light_palet [255].g = 23; light_palet [255].b = 23; for (i = 0; i < 8; i ++) { // White - should be same as WHITE2 (below) light_palet[i + 1].r = limit_colour(48 + i * 2); light_palet[i + 1].g = limit_colour(48 + i * 2); light_palet[i + 1].b = limit_colour(48 + i * 2); // Yellow light_palet[i + 9].r = limit_colour(47 + i * 3); light_palet[i + 9].g = limit_colour(43 + i * 3); light_palet[i + 9].b = limit_colour(10 + i * 3); // LGreen light_palet[i + 17].r = limit_colour(i * 3); light_palet[i + 17].g = limit_colour(32 + i * 4); light_palet[i + 17].b = limit_colour(i * 3); // Orange light_palet[i + 25].r = limit_colour(47 + i * 3); light_palet[i + 25].g = limit_colour(20 + i * 3); light_palet[i + 25].b = limit_colour(5 + i * 2); // Red light_palet[i + 33].r = limit_colour(41 + i * 4); light_palet[i + 33].g = limit_colour(15 + i * 2); light_palet[i + 33].b = limit_colour(5 + i * 2); // DGreen light_palet[i + 41].r = limit_colour(i * 2); light_palet[i + 41].g = limit_colour(21 + i * 4); light_palet[i + 41].b = limit_colour(i * 2); // DRed light_palet[i + 49].r = limit_colour(20 + i * 4); // light_palet[i + 49].g = limit_colour(i * 2); // light_palet[i + 49].b = limit_colour(i * 2); light_palet[i + 49].g = limit_colour(5 + i * 2); light_palet[i + 49].b = limit_colour(1 + i * 2); // Purple light_palet[i + 57].r = limit_colour(32 + i * 4); light_palet[i + 57].g = limit_colour(i * 3); light_palet[i + 57].b = limit_colour(32 + i * 4); // LBlue light_palet[i + 65].r = limit_colour(10 + i * 3); light_palet[i + 65].g = limit_colour(10 + i * 3); light_palet[i + 65].b = limit_colour(47 + i * 2); // DBlue light_palet[i + 73].r = limit_colour(i * 2); light_palet[i + 73].g = limit_colour(i * 2); light_palet[i + 73].b = limit_colour(21 + i * 4); // White2 - should be same as WHITE (above) light_palet[i + 81].r = limit_colour(48 + i * 2); light_palet[i + 81].g = limit_colour(48 + i * 2); light_palet[i + 81].b = limit_colour(48 + i * 2); // LGrey light_palet[i + 89].r = limit_colour(24 + i * 4); light_palet[i + 89].g = limit_colour(24 + i * 4); light_palet[i + 89].b = limit_colour(24 + i * 4); // DGrey light_palet[i + 97].r = limit_colour(12 + i * 4); light_palet[i + 97].g = limit_colour(12 + i * 4); light_palet[i + 97].b = limit_colour(12 + i * 4); } light_palet[0].r = 0; light_palet[0].g = 0; light_palet[0].b = 0; } void init_dark_palette(void) { int i; for (i = 0; i < 256; i ++) { dark_palet [i].r = light_palet [i].r; dark_palet [i].g = light_palet [i].g; dark_palet [i].b = light_palet [i].b; if (i >= GC_BLACK && i <= GC_BLUE8) { // if (i % 8 <= 5) // { dark_palet[i].r = 1; dark_palet[i].g = 1; dark_palet[i].b = 1; // } // if (i % 8 >= 6)// || i % 8 == 5) // { // dark_palet[i].r = limit_colour(light_palet [i].r / 2 - 2); // dark_palet[i].g = limit_colour(light_palet [i].g / 2 - 2); // dark_palet[i].b = limit_colour(light_palet [i].b / 2 - 2); // } } if (i >= COLOUR_BLACK && i <= COLOUR_BLUE8) { dark_palet[i].r = limit_colour(((light_palet[i].r * 4) / 5) - 3); dark_palet[i].g = limit_colour(((light_palet[i].g * 4) / 5) - 3); dark_palet[i].b = limit_colour(((light_palet[i].b * 4) / 5) - 3); } } } void set_dark_palette(void) { vsync(); set_palette(dark_palet); } void set_light_palette(void) { vsync(); set_palette(light_palet); } overgod-1.0/palette.h0000644000175000001440000000656210277462624013661 0ustar michiusersvoid init_palette(void); //int adjust_lit_colour(int col, int lit); void set_dark_palette(void); void set_light_palette(void); /* OLD: 1 - white 2 - purple 3 - lblue 4 - dblue 5 - yellow 6 - lgreen 7 - dgreen 8 - orange 9 - red 10 - dred 11 - white2 12 - lgrey 13 - dgrey CURRENT: 1 - white 2 - yellow 3 - lgreen 4 - orange 5 - red 6 - dgreen 7 - dred 8 - purple 9 - lblue 10 - dblue 11 - white2 12 - lgrey 13 - dgrey */ enum { TRANS_WHITE = 8, TRANS_YELLOW = 16, // 199 TRANS_LGREEN = 24, // 200 TRANS_ORANGE = 32, // 202 TRANS_LRED = 40, // 203 TRANS_DGREEN = 48, // 201 TRANS_DRED = 56, // 204 TRANS_PURPLE = 64, // 196 TRANS_LBLUE = 72, // 197 TRANS_DBLUE = 80, // 198 TRANS_WHITE2 = 88, // 205 // Special white which doesn't overwrite other colours (for shockwaves etc) TRANS_LGREY = 96, // 206 TRANS_DGREY = 104, // 207 TRANS_END = 105 //208 // must be the last trans + 1 }; #define LIGHT_1 220 #define LIGHT_2 221 #define DARK_1 222 #define DARK_2 223 #define TRANS_REVERSE 224 #define TRANS_DARKEN 225 #define TRANS_MONO 226 /*extern int trans_colours_array [7]; extern int actor_colours_array [7];*/ int colour_to_trans(int y); enum { COLOUR_BLACK = 153, COLOUR_GREY1, COLOUR_GREY2, COLOUR_GREY3, COLOUR_GREY4, COLOUR_GREY5, COLOUR_GREY6, //COLOUR_GREY7, COLOUR_WHITE, COLOUR_GREEN1, COLOUR_GREEN2, COLOUR_GREEN3, COLOUR_GREEN4, COLOUR_GREEN5, COLOUR_GREEN6, COLOUR_GREEN7, COLOUR_GREEN8, COLOUR_YELLOW1, COLOUR_YELLOW2, COLOUR_YELLOW3, COLOUR_YELLOW4, COLOUR_YELLOW5, COLOUR_YELLOW6, COLOUR_YELLOW7, COLOUR_YELLOW8, COLOUR_ORANGE1, COLOUR_ORANGE2, COLOUR_ORANGE3, COLOUR_ORANGE4, COLOUR_ORANGE5, COLOUR_ORANGE6, COLOUR_ORANGE7, COLOUR_ORANGE8, COLOUR_RED1, COLOUR_RED2, COLOUR_RED3, COLOUR_RED4, COLOUR_RED5, COLOUR_RED6, COLOUR_RED7, COLOUR_RED8, COLOUR_BLUE1, COLOUR_BLUE2, COLOUR_BLUE3, COLOUR_BLUE4, COLOUR_BLUE5, COLOUR_BLUE6, COLOUR_BLUE7, COLOUR_BLUE8, COLOUR_PURPLE1 = 10, COLOUR_PURPLE2, COLOUR_PURPLE3, COLOUR_PURPLE4, COLOUR_PURPLE5, COLOUR_PURPLE6, COLOUR_PURPLE7, COLOUR_PURPLE8, COLOUR_X1, COLOUR_X2, COLOUR_X3, COLOUR_X4, COLOUR_X5, COLOUR_X6, COLOUR_X7, COLOUR_X8 //COLOUR_WRITING, //COLOUR_BROWN }; enum { GC_BLACK = 105, GC_GREY1, GC_GREY2, GC_GREY3, GC_GREY4, GC_GREY5, GC_GREY6, //GC_GREY7, GC_WHITE, GC_GREEN1, GC_GREEN2, GC_GREEN3, GC_GREEN4, GC_GREEN5, GC_GREEN6, GC_GREEN7, GC_GREEN8, GC_YELLOW1, GC_YELLOW2, GC_YELLOW3, GC_YELLOW4, GC_YELLOW5, GC_YELLOW6, GC_YELLOW7, GC_YELLOW8, GC_ORANGE1, GC_ORANGE2, GC_ORANGE3, GC_ORANGE4, GC_ORANGE5, GC_ORANGE6, GC_ORANGE7, GC_ORANGE8, GC_RED1, GC_RED2, GC_RED3, GC_RED4, GC_RED5, GC_RED6, GC_RED7, GC_RED8, GC_BLUE1, GC_BLUE2, GC_BLUE3, GC_BLUE4, GC_BLUE5, GC_BLUE6, GC_BLUE7, GC_BLUE8, GC_PURPLE1 = 10, GC_PURPLE2, GC_PURPLE3, GC_PURPLE4, GC_PURPLE5, GC_PURPLE6, GC_PURPLE7, GC_PURPLE8, GC_X1, GC_X2, GC_X3, GC_X4, GC_X5, GC_X6, GC_X7, GC_X8 //GC_WRITING, //GC_BROWN }; #define CONVERT_GREEN1 GC_GREEN1 #define CONVERT_YELLOW1 GC_YELLOW1 #define CONVERT_ORANGE1 GC_ORANGE1 #define CONVERT_BLUE1 GC_BLUE1 #define CONVERT_RED1 GC_RED1 #define CONVERT_GREEN2 COLOUR_GREEN1 #define CONVERT_YELLOW2 COLOUR_YELLOW1 #define CONVERT_ORANGE2 COLOUR_ORANGE1 #define CONVERT_BLUE2 COLOUR_BLUE1 #define CONVERT_RED2 COLOUR_RED1 overgod-1.0/pickup.c0000644000175000001440000001524210310757124013472 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: pickup.c History: 11/9/2003 - Version 1.0 finalised This file contains: - pickups (energy, repair etc) */ #include "allegro.h" #include "config.h" #include "globvars.h" #include "stuff.h" #include "palette.h" #include "cloud.h" void manage_pickup(int p); void destroy_pickup(int p); void pickup_explodes(int p, int taken); void init_pickups(void) { int p; for (p = 0; p < NO_PICKUPS; p++) { pickup[p].type = PICKUP_NONE; } } int create_pickup(int type, int subtype, int x, int y, int timeout) { if (arena.hostile > 0) return -1; int p; for (p = 0; p < NO_PICKUPS; p++) { if (p == NO_PICKUPS - 1) return -1; if (pickup[p].type == PICKUP_NONE) break; } pickup[p].type = type; if (subtype == -1) { switch(type) { case PICKUP_SQUARE: case PICKUP_CIRCLE: case PICKUP_TRIANGLE: subtype = grand(4); break; case PICKUP_SECONDARY: subtype = 1 + grand(6); break; } } pickup[p].subtype = subtype; pickup[p].x = x; pickup[p].y = y; pickup[p].radius = 8000; // generous pickup[p].timeout = timeout; pickup[p].counter = 256 - counter; return p; } void run_pickups(void) { int p; for (p = 0; p < NO_PICKUPS; p++) { if (pickup[p].type != PICKUP_NONE) manage_pickup(p); } } void manage_pickup(int p) { pickup[p].timeout --; pickup[p].counter ++; if (pickup[p].timeout <= 0) { switch(pickup[p].type) { case PICKUP_SQUARE: // case PICKUP_CROSS: case PICKUP_CIRCLE: case PICKUP_TRIANGLE: if (pickup[p].subtype == ABILITY_DEFENCE) pickup[p].subtype = ABILITY_PRIMARY; else pickup[p].subtype ++; pickup[p].timeout = SYMBOL_TIMEOUT; break; case PICKUP_PRESYMBOL: if (arena.hostile > 0) { pickup_explodes(p, 0); break; } pickup[p].type = pickup[p].subtype; pickup[p].subtype = grand(4); pickup[p].timeout = SYMBOL_TIMEOUT; int passing_colours [4] = {TRANS_DRED, TRANS_ORANGE, TRANS_YELLOW, TRANS_WHITE}; create_cloud(CLOUD_SHOCKWAVE, pickup[p].x, pickup[p].y, 0, 0, 0, 0, 150,10,0, 0, 150, 0, passing_colours); break; case PICKUP_PRESECONDARY: if (arena.hostile > 0) { pickup_explodes(p, 0); break; } pickup[p].type = PICKUP_SECONDARY; pickup[p].timeout = 900; break; default: pickup_explodes(p, 0); return; } } } void pickup_explodes(int p, int taken) { int passing_colours [5]; if (pickup[p].type == PICKUP_SECONDARY) { passing_colours [0] = TRANS_YELLOW; passing_colours [1] = TRANS_ORANGE; passing_colours [2] = TRANS_LRED; passing_colours [3] = TRANS_DRED; create_cloud(CLOUD_SHRINKING_FADING_CIRCLE, pickup[p].x, pickup[p].y, 0, 0, 0, 0, 300, -200, 5, 0, 0, 0, passing_colours); create_cloud(CLOUD_SHRINKING_FADING_CIRCLE, pickup[p].x, pickup[p].y, 0, 0, 0, 0, 300, -300, 10, 0, 0, 0, passing_colours); create_cloud(CLOUD_SHRINKING_FADING_CIRCLE, pickup[p].x, pickup[p].y, 0, 0, 0, 0, 300, -400, 15, 0, 0, 0, passing_colours); destroy_pickup(p); return; } if (pickup[p].type == PICKUP_PRESECONDARY || pickup[p].type == PICKUP_PRESYMBOL) { destroy_pickup(p); return; // presymbol can be exploded if time expires } if (pickup[p].type == PICKUP_REPAIR) { passing_colours [0] = TRANS_ORANGE; passing_colours [1] = TRANS_ORANGE; passing_colours [2] = TRANS_LRED; passing_colours [3] = TRANS_DRED; } else switch(pickup[p].subtype) { case ABILITY_PRIMARY: passing_colours [0] = TRANS_YELLOW; passing_colours [1] = TRANS_YELLOW; passing_colours [2] = TRANS_YELLOW; passing_colours [3] = TRANS_ORANGE; break; case ABILITY_SECONDARY: passing_colours [0] = TRANS_DRED; passing_colours [1] = TRANS_DRED; passing_colours [2] = TRANS_DRED; passing_colours [3] = TRANS_DGREY; break; case ABILITY_DRIVE: passing_colours [0] = TRANS_LGREEN; passing_colours [1] = TRANS_LGREEN; passing_colours [2] = TRANS_DGREEN; passing_colours [3] = TRANS_DGREY; break; case ABILITY_DEFENCE: passing_colours [0] = TRANS_LBLUE; passing_colours [1] = TRANS_LBLUE; passing_colours [2] = TRANS_DBLUE; passing_colours [3] = TRANS_DGREY; break; } int i, angle, xs; for (i = 0; i < 20; i ++) { angle = grand(ANGLE_FULL); xs = 2000 + grand(6000); create_cloud(CLOUD_BLAST_CIRCLE, pickup[p].x, pickup[p].y, 0, 0, xpart(angle, xs), ypart(angle, xs), 55 + grand(20),2,0, 0, 0, 0, passing_colours); } create_cloud(CLOUD_LIGHT, pickup[p].x, pickup[p].y, 0, 0, 0, 0, 800 + grand(300),10,3, 0, 0, 0, passing_colours); /* create_cloud(CLOUD_SHOCKWAVE, pickup[p].x, pickup[p].y, 0, 0, 0, 0, 150,10,0, 0, 150, 0, passing_colours); */ // can return earlier destroy_pickup(p); return; } void destroy_pickup(int p) { pickup[p].type = PICKUP_NONE; } void explode_all_pickups(void) { int p; for (p = 0; p < NO_PICKUPS; p++) { if (pickup[p].type != PICKUP_NONE) pickup_explodes(p, 0); } } /* Upgrades: */ overgod-1.0/pickup.h0000644000175000001440000000034210027027612013467 0ustar michiusersvoid init_pickups(void); void destroy_pickup(int p); void pickup_explodes(int p, int taken); void run_pickups(void); int create_pickup(int type, int subtype, int x, int y, int timeout); void explode_all_pickups(void); overgod-1.0/readme.txt0000644000175000001440000003312010311001276014013 0ustar michiusers******************************************* OVERGOD Version 1.0 Copyright 2005 Linley Henzell ******************************************* Overgod is distributed under the terms of the Free Software Foundation's General Public Licence (GPL) - see the file LICENCE.TXT. It comes with no warranty, and no liability is accepted for any harm it may do to you or your computer. In the unlikely event that it causes you some injury, contact your MP or other local representative. Read the licence for more information. The source code should be available from http://users.olis.net.au/zel/ If it's not there, try contacting l_henzell at yahoo.com.au to find out where it's gone. Also use that address for any comments, complaints, threats etc. If you like Overgod, you might also like some of my other games: - Lacewing (quite similar to this game, because it's built on the same engine) - Captain Pork's World of Violence (a not-very-good Liero clone, which I wrote to teach myself Allegro and networking) - Captain Pork's Revenge (a slightly better Liero clone, but still not very good) - Crawl (A 'rogue-like' adventure game, a bit like Nethack. Try the Japanese graphical version if you don't like text mode) ******************************************* Contents ******************************************* 1. Acknowledgements 2. Introduction 3. Controls 4. Upgrading 5. Configuration 6. PAQ ******************************************* 1. Acknowledgements ******************************************* Overgod was made with: - The MingW version of the Gnu Compiler Collection C compiler - Bloodshed Software's Dev-C++ - The Allegro libraries - The GIMP (for graphics) - Psycle (for sound) and various VSTs, including a set by Erik Wollo - Audacity (for sample editing) Many thanks to anyone who worked on any of these excellent free programs! ******************************************* 2. Introduction ******************************************* For too long has the world been ruled by cruel and disputatious gods! It's time someone did something about it. You have constructed a vehicle in which to visit the outer layers of the Celestial Oversphere and do battle with those who sit in judgement on the Universe. Failure means oblivion, or worse. Success will strike a blow at the shackles which bind humanity, and let you join or even supplant those you have conquered! Your vehicle is a marvel of transplanar engineering, capable of travelling to worlds beyond our knowledge and making use of the strange energies which there exist. Long years of research and intricate labour have allowed you to build weapons capable of tearing through the substance of even the most exalted ones, and you have made the appropriate pacts to enable your craft to reconstitute itself a limited number of times should its substance fail you. Now it is ready to leave this place behind and venture to where your existence is forbidden. Your task will not be an easy one. On each layer of the Oversphere you must fight your way through the lesser gods, greater gods, elder gods, younger gods, demigods, demiurges, idols, sub-idols, undergods and overgods, and all of their children, slaves, servants, soldiers, sentinels, guardians, messengers and machines. Most of the enemies you meet must be destroyed for you to reach the next layer. The larger enemies are worth several of their smaller kin, while there are some whose destruction may be useful but is not required. A secret ritual has shut the fearsome Eyes of the Watchful Ones, although only for a time. You will have from two to three minutes in each layer before they open again, so don't tarry! You can tell which enemies you need to destroy by looking at your overview on the bottom right of the screen. Essential targets are large yellow dots, while unimportant ones are small and orange. The amount of time you have, and your progress through the layer, are indicated on the top left of the screen, while on the bottom left you can check how well your vehicle is holding up against the fury of your enemies and how many lives you have. To start a game, select the Start Game option and, when prompted, press fire. If you want to play a cooperative game, both players press fire. Each vehicle you can choose has a particular speciality. If the normal game isn't frantic enough for you, go to the Special menu and choose a Time Attack game. Here the goal is to survive for as long as possible. Every essential target you destroy gets you a few extra seconds, and the bigger targets give more time. You don't get extra time for taking out non-essential targets or the smaller parts of a larger enemy, and you lose 30 seconds when you're destroyed. Each enemy lasts for about one minute then disappears, so make sure you get them before they go! You can also play Time Attack cooperatively. The Special menu also includes Duel Mode, which lets two players fight it out between them, although the game isn't very well-balanced for this. The options here are pretty obvious, except for the Handicap option - it amplifies all damage taken by the leading player. Below Duel Mode are some challenge mode settings which you have to unlock by playing the main game. They make things even more difficult than they need to be. ******************************************* 3. Controls ******************************************* You can set up the controls in the Options menu. Here is what each command does: - Forwards Accelerates you forwards. Your vehicle encounters an increasing amount of drag as it speeds up, so it won't keep accelerating forever. - Left and Right Turns your craft. - Brakes Operates a special field which greatly increases drag. Use this to stop quickly or execute quick turns. - Fire Darts Fires your vehicle's main weapon. - Fire Secondary Fires your vehicle's secondary weapon, if you have one and if it's ready. - Toggle Link Fire If Link fire is on, firing your darts also fires your secondary weapon as soon as it's ready. This is useful or annoying depending on which weapon you have, so turn it on or off accordingly. - Escape The Escape key always pauses the game and lets you quit. ******************************************* 4. Upgrading ******************************************* Your vehicle is pretty weak to start off with, so you'll need to upgrade it to have a chance of success. There are a few types of object you can gather from the dust, ashes and froth left by your departed enemies in order to accumulate enough power to push through the layers: - Repairs These are orange crosses, and they fix your craft up a bit. - Secondary Weapons Weapons to back up your darts. There are several different types, some of them more useful than others. Generally, the easier a weapon is to hit with the less damage it will do, so Orbs do a lot more damage than Worms, for example. You lose your current weapon when you are destroyed. - Symbols These are important! Symbols come in three shapes, and they cycle through various colours for a grand total of twelve different types. As you pick them up, they are added to the row along the bottom of your screen. Here is what each type does: Yellow Symbols Square - makes your darts fire more often. Circle - lets you fire extra darts, which do half the damage of your main darts. Triangle - makes your darts fly faster. Green Symbols Square - increases the thrust produced by your engine(s), but also adds extra drag while you are accelerating (not at other times). This increases manoeuvreability but can reduce top speed. It makes your vehicle handle more like a car. Circle - lets you turn more quickly. Triangle - increases the thrust produced by your engine(s) by a little bit, and also reduces drag all the time. It makes your vehicle handle more like a hovercraft. Red Symbols Square - increases the damage your secondary weapon does by about a third (so with one red square it will do 133% damage, and with two it will do 166%, etc). Circle - increases the number of times your weapon fires or the number of submunitions it produces, depending on which weapon you have. Triangle - generally increases speed and range, and may affect duration. Increases the destructive radius of exploding weapons. Blue Symbols Square - adds armour to the outside of your vehicle. You can see how much armour you have by looking at the bottom left of the screen. Circle - lets your vehicle generate a protective sheath. Triangle - increases the rate at which your sheath restores itself. Symbols are stable for longer than each level lasts, so you don't have to worry about them expiring before you run out of time. They do go away when the Eyes open, though. You don't lose symbols when your craft is destroyed. ******************************************* 5. Configuration ******************************************* The Options menu has a whole lot of interface options you can set. Here is what they do. - Sound Lets you turn the game's sound on or off, or choose whether to play it in mono or stereo. In a one-player game the stereo option pans the sound according to where it's coming from. You can also reverse the stereo if you have your speakers set up that way. - Volume Lets you set the volume for sound effects and 'music'. If you set the music volume to zero it won't play at all, which might improve performance a little. - Video Sync Turning this on synchronises the display with your monitor's vertical retrace. This prevents a kind of shearing flicker effect which some people find annoying, but makes the game skip frames on slower computers. - Test Speakers Find out where the left and right speakers are. - Test Keys Most keyboards have a problem which prevents them detecting certain combinations of keypresses, making cooperative and duel modes almost unplayable. Use Test Keys to work out which combinations work best. - Resolution Choose between 640x480 and 800x600, windowed and fullscreen. You'll have to restart the game for this to take effect. If you switch resolutions and the game crashes on start-up (Allegro has trouble with some video cards), edit the overgod.cfg file and change Resolution=1 [or 2, 3, 4] to Resolution=0 - Colour Text If you have trouble distinguishing colours, this option will tell you what colour a symbol is. ******************************************* 6. PAQ ******************************************* I haven't been asked any questions about Overgod yet, so I can't have a proper FAQ. Instead, here is a list of Pre-emptively Answered Questions: Q: What are the system requirements? A: It runs well on my Celeron 500MHz with 128MB RAM, and it will run on something less powerful without too much trouble. I'd say 300MHz would be about it, and memory isn't likely to be a problem (8-bit sprites don't take up so much space). It doesn't require any kind of special graphics card, just SVGA. Q: I get a file-not-found error message, or something. A: Did you decompress the game with the 'preserve subdirectories' option? If you did, there should be a gfx and a wavs directory from the main directory. If you didn't, delete it and try again. Q: The game crashes on start-up. A: Edit the overgod.cfg file and set both the Sound_init and Resolution options to zero. This might work. If it doesn't, sorry. Q: The game looks jerky. A: This is probably because your computer is having trouble keeping up with the graphics, so it's skipping frames. The best way to speed things up is to switch to 640x480 fullscreen resolution, although that doesn't let you see as far. Turning off Video Sync will also help a lot if you don't mind the shearing effect (doesn't bother me). Turning off the 'music' may help a little bit, too. Q: The sound is a bit dodgy, and misses effects every now and then. A: This seems to be a problem with Allegro's sound support under Win95 and Win98. Nothing I can do, sorry. Turning off the 'music' may help a bit, as your sound card won't be so heavily spammed with samples. Q: Is it actually possible to finish this game? A: Yes, just very difficult. Keep on practising! Time Attack never ends, though. Q: This game is so unfair! One time I got mostly circles, so I had plenty of worms but they never hit anything and when they did they didn't hurt it, and the next game I didn't get any circles at all. Also I keep on getting the hard enemies. A: It is unfair, isn't it? Just like life. Q: Why don't you add a password or saved game system? A: Overgod is unfair because it's random, and it's random because that makes it different each time you play. This means that every time you face a different challenge, so save games are unnecessary. In my opinion. Besides, it takes less than half an hour to play all the way through, so you hardly need to span your playing sessions over multiple days. Q: Why doesn't this game have joystick support? A: Because I don't have one to test it on. Anyone who wants to write joystick support and send it to me is encouraged to do so! Q: Why don't you write a networked version? A: Because that would be really hard. Q: I want to write a patch/port/fork. A: Great! If you would like to patch or port Overgod, please contact me first to make sure you have the most recent version of the source code. If you want to fork it, go crazy. Contact me if you have any questions about the source (I should warn you that I learned to program in Commodore 64 BASIC and taught myself C from the Borland Turbo C++ manual, which explains a lot about the quality of Overgod's code. At least I no longer use goto). Have fun! - Linley overgod-1.0/score.c0000644000175000001440000000317510310757124013314 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: score.c History: 11/9/2003 - Version 1.0 finalised This file contains: - functions dealing with keeping score */ #include "allegro.h" //#include #include #include "config.h" #include "globvars.h" #include "stuff.h" #include "palette.h" #include "game.h" //#include "upgrades.h" #include "display.h" #define NO_SCORES 20 // also #def'd in menu.c struct score_list { int score; int ship; int level; char name [20]; }; extern struct score_list hs_single [NO_SCORES]; extern struct score_list hs_coop [NO_SCORES]; extern struct score_list *hscore; overgod-1.0/sound.c0000644000175000001440000012424610311023242013320 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: sound.c History: 11/9/2005 - Version 1.0 finalised This file contains: - sound initialisation and playing. enums in sound.h */ #include "allegro.h" #include #include "sound.h" #include "config.h" #include "globvars.h" #include "math.h" #include "stuff.h" //DATAFILE *soundf; //SAMPLE *sound_list [10]; //#define SOUND_OFF #define BEAT 64 #define HALF_BEAT 32 #define QUARTER_BEAT 16 #define Q3_BEAT 48 #define SMALLEST_BEAT 16 #define MAX_PHRASES 80 #define MAX_PHRASE_LENGTH 150 #define MAX_OVERPHRASES 100 #define NO_TONES 56 #define BASE_TONE 50 // if 100, max tone = 43 int debug_sound [5]; enum { CHORD_MAJOR, CHORD_MINOR, CHORD_3, NO_CHORDS }; #define NO_JUMPS 7 #define NO_LONGPROGS 6 #define SIZE_LONGPROGS 25 enum { NOTE_0C, NOTE_0CS, NOTE_0D, NOTE_0DS, NOTE_0E, NOTE_0F, NOTE_0FS, NOTE_0G, NOTE_0GS, NOTE_0A, NOTE_0AS, NOTE_0B, NOTE_1C, NOTE_1CS, NOTE_1D, NOTE_1DS, NOTE_1E, NOTE_1F, NOTE_1FS, NOTE_1G, NOTE_1GS, NOTE_1A, NOTE_1AS, NOTE_1B, NOTE_2C, NOTE_2CS, NOTE_2D, NOTE_2DS, NOTE_2E, NOTE_2F, NOTE_2FS, NOTE_2G, NOTE_2GS, NOTE_2A, NOTE_2AS, NOTE_2B, NOTE_ENDNOTE }; int long_prog [NO_LONGPROGS] [SIZE_LONGPROGS] = { {NOTE_1C, NOTE_1E, NOTE_1G, NOTE_2C, NOTE_1G, NOTE_1E, NOTE_0AS, NOTE_1D, NOTE_1F, NOTE_1AS, NOTE_1F, NOTE_0AS, NOTE_ENDNOTE}, {NOTE_1C, NOTE_1DS, NOTE_1C, NOTE_1F, NOTE_1C, NOTE_1FS, NOTE_1C, NOTE_1G, NOTE_1C, NOTE_1AS, NOTE_1C, NOTE_2C, NOTE_ENDNOTE}, {NOTE_1C, NOTE_2C, NOTE_1AS, NOTE_1G, NOTE_1FS, NOTE_1F, NOTE_1DS, NOTE_ENDNOTE}, {NOTE_1C, NOTE_1G, NOTE_2C, NOTE_1C, NOTE_1G, NOTE_2C, NOTE_1C, NOTE_2C, NOTE_ENDNOTE}, {NOTE_1C, NOTE_1E, NOTE_1G, NOTE_2C, NOTE_2E, NOTE_1G, NOTE_2C, NOTE_2E, NOTE_ENDNOTE}, {NOTE_1DS, NOTE_0G, NOTE_0AS, NOTE_0FS, NOTE_0G, NOTE_1C, NOTE_1FS, NOTE_1F, NOTE_ENDNOTE} //{NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, //{NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, //{NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, NOTE_1, }; int chord_jumps [NO_CHORDS] [NO_JUMPS] = { {NOTE_1C, NOTE_1D, NOTE_1E, NOTE_1F, NOTE_1G, NOTE_1GS, NOTE_2C}, {NOTE_1C, NOTE_1D, NOTE_1DS, NOTE_1G, NOTE_1GS, NOTE_1B, NOTE_2C}, {NOTE_1C, NOTE_1D, NOTE_1E, NOTE_1F, NOTE_1G, NOTE_1GS, NOTE_2C} }; int success_note [3]; int success_samp; int success_step; int success_base; int tone [NO_TONES]; #define PROG_LENGTH 40 #define NO_PROGS 4 int progression [NO_PROGS] [PROG_LENGTH]; int prog_pos [NO_PROGS]; int prog_base [NO_PROGS]; int prog_length [NO_PROGS]; enum { BEAT_DRUM1, BEAT_DRUM2, BEAT_LOWDRUM, BEAT_STICK, BEAT_BELL_S, BEAT_BASS, BEAT_BASS2, BEAT_STRING, BEAT_TWIRM, // here and above: common beats. Below: rarer beats BEAT_ZAPDRUM1, BEAT_ZAPDRUM2, BEAT_PPIPE, BEAT_SPARKLE, BEAT_BELL_L, BEAT_MOSQ, BEAT_SPACE, BEAT_SWEEP, BEAT_TING, //BEAT_OBOE, BEAT_REVERSE, BEAT_SAW, //BEAT_BASSOON, BEAT_BRASS, BEAT_CHOIR, BEAT_FLUTE, BEAT_ODD, BEAT_REVERSE2, BEAT_ACCORD, NO_BEATS, BEAT_EMPTY }; struct beat_phrase_struct { int samp; int pitch; int rand_pitch; int pan; int rand_pan; int melody; int vol; }; struct beat_phrase_struct beat_phrase [MAX_PHRASES] [MAX_PHRASE_LENGTH]; int over_beat_phrase [MAX_OVERPHRASES]; int bpos; int over_bpos; int phrase_length; int over_phrase_length; int over_phrase_loop_point; #define MAX_MELODIES 5 #define MAX_MELODY_LENGTH 400 #define MAX_OVERMELODIES 20 enum { OVERMELODY_REPEAT, OVERMELODY_FILL }; // for overmelody_mode struct overmelody_struct { int mel; int key; int start; }; struct overmelody_struct overmelody [MAX_OVERMELODIES]; struct beat_phrase_struct melody [MAX_MELODIES] [MAX_MELODY_LENGTH]; int melody_active [MAX_MELODIES]; int mpos [MAX_MELODIES]; int over_mpos; int over_mpos2; int overmelodies; int overmelody_mode; int overmelody_fill_length; int melodies_played; int melody_length [MAX_MELODIES]; int mdelay [MAX_MELODIES]; //int total_melody_delay; extern struct optionstruct options; SAMPLE *beat [NO_BEATS]; //SAMPLE *sounds [NO_WAVS]; SAMPLE *new_sounds [NO_NWAVS]; char sound_active; void check_sound(SAMPLE *samp); void load_sample_in(int samp, const char *sfile); void load_new_sample_in(int samp, const char *sfile); void copy_phrase(int target, int source); //void play_beat(int samp); //void play_beatf(int samp, int freq); void play_beatfvp(int samp, int freq, int vol, int pan); void play_successfvp(int samp, int freq, int vol, int pan); void init_beat(void); void load_beat_sample_in(int samp, const char *sfile); void calculate_beat(void); void calculate_melody(int active); void play_melody(void); void copy_melody(int t, int s); void add_note(int beat, int bp1, int bp2, int pitch, int rand_pitch, int pan, int vol, int mel); void add_over_phrase(int phrase, int start, int finish); void add_melody_note(int samp, int melody, int mp2, int pitch, int rand_pitch, int pan, int vol); void add_melody_string1(int samp, int mp1, int length, int chords); //void assign_beat(int index, int beaty, int subtype); void create_progression(int which, int length, int key); void play_success_sound(void); //int ppos; //int plength; void init_sound(void) { #ifdef SOUND_OFF return; #endif int i, j; float t; for (i = 0; i < NO_TONES; i ++) { t = (float) BASE_TONE; for (j = 0; j < i; j ++) { t *= (float) (1000 + (1000 / 13)) / 1000; } tone [i] = t; // saves me from having to remember how to use the pow function } sound_active = 1; if (options.sound_init == 0) { // cprintf("\n\r\n\rSound disabled in proj.cfg."); // allegro_message("\n\r\n\rSound disabled in config file.\n\r"); // allegro_message("\n\r\n\rSound disabled in config file.\n\r"); // rest(500); sound_active = 0; return; } reserve_voices(16, 0); if (install_sound (DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) == -1) { // allegro_message("\n\r\n\rSound autodetect failed."); sound_active = 0; // rest(300); // do // { // } while (keypressed() == 0); } set_volume(255, 0); load_new_sample_in(NWAV_ALARM, "alarm"); load_new_sample_in(NWAV_BANG, "bang"); load_new_sample_in(NWAV_BIGBANG, "bigbang"); load_new_sample_in(NWAV_BLAST, "blast"); load_new_sample_in(NWAV_BLOCK, "block"); load_new_sample_in(NWAV_BUMP, "bump"); load_new_sample_in(NWAV_BUMP2, "bump2"); load_new_sample_in(NWAV_BURST, "burst"); load_new_sample_in(NWAV_SHORTBURST, "bursts"); load_new_sample_in(NWAV_BURSTZ, "burstz"); load_new_sample_in(NWAV_BURSTZL, "burstzl"); load_new_sample_in(NWAV_CHIME, "chime"); load_new_sample_in(NWAV_CHIME2, "chime2"); load_new_sample_in(NWAV_CHIRP, "chirp2"); load_new_sample_in(NWAV_CLICK, "click"); load_new_sample_in(NWAV_CYMBAL, "cymbal"); load_new_sample_in(NWAV_DART, "dart"); load_new_sample_in(NWAV_DNO, "dno"); load_new_sample_in(NWAV_DRIVE, "drive"); // load_sample_in(WAV_ENGINE, "engine"); load_new_sample_in(NWAV_EXTRA, "extra"); load_new_sample_in(NWAV_EYE, "eye"); load_new_sample_in(NWAV_GAMEOVER, "gameover"); load_new_sample_in(NWAV_GBLAT, "gblat"); load_new_sample_in(NWAV_JET, "jet"); load_new_sample_in(NWAV_LAUNCH, "launch"); load_new_sample_in(NWAV_LZAP, "longzap"); load_new_sample_in(NWAV_MENU, "menu"); load_new_sample_in(NWAV_MINEBANG, "minebang"); // not mines - pulser arms load_new_sample_in(NWAV_PHASE, "phase"); load_new_sample_in(NWAV_PPIPE, "ppipe"); load_new_sample_in(NWAV_PUFF, "puff"); load_new_sample_in(NWAV_REPAIR, "repair"); load_new_sample_in(NWAV_SEEKER, "seeker"); load_new_sample_in(NWAV_SHADOW, "shadow"); load_new_sample_in(NWAV_SZAP, "sharpzap");//szap"); load_new_sample_in(NWAV_SHIELD, "shield"); load_new_sample_in(NWAV_SHIELDE, "shielde"); load_new_sample_in(NWAV_SPAWN, "spawn"); load_new_sample_in(NWAV_SPLERK, "splerk"); load_new_sample_in(NWAV_BALL1, "squelch1"); load_new_sample_in(NWAV_MULTI, "squelch2"); load_new_sample_in(NWAV_SUCCESS, "success"); load_new_sample_in(NWAV_SYMBOL, "symbol"); load_new_sample_in(NWAV_TEETH, "teeth"); load_new_sample_in(NWAV_TWING, "twing"); // ouch sound load_new_sample_in(NWAV_WARBLE, "warble"); load_new_sample_in(NWAV_WARBLEB, "warbleb"); load_new_sample_in(NWAV_WHINE, "whine4"); load_new_sample_in(NWAV_WORMS, "worms"); load_new_sample_in(NWAV_ZAPSTEP, "zapstep"); // load_new_sample_in(NWAV_, ""); /* load_sample_in(WAV_CANNON, "zap"); load_sample_in(WAV_WOBBLE, "wobble"); load_sample_in(WAV_LONG_WOBBLE, "longwob"); load_sample_in(WAV_WARP_IN, "warp_in"); load_sample_in(WAV_BANG1, "bangs"); load_sample_in(WAV_WHINE, "whine"); load_sample_in(WAV_BUMP, "bump"); load_sample_in(WAV_BOSS2, "boss2");//_2"); load_sample_in(WAV_STING, "sting"); load_sample_in(WAV_HARD_ZAP, "hardzap"); load_sample_in(WAV_BLORT, "blort"); load_sample_in(WAV_BLAST, "blast"); load_sample_in(WAV_ALARM, "alarm"); load_sample_in(WAV_MISSILE, "missile"); load_sample_in(WAV_ZAPNOTE1, "zapnote1"); load_sample_in(WAV_ZAPNOTE2, "zapnote2"); load_sample_in(WAV_MINE, "mine"); load_sample_in(WAV_SHORTZAP, "shortzap"); load_sample_in(WAV_BLAT, "blat"); load_sample_in(WAV_SHORTZAP2, "shortz2"); load_sample_in(WAV_SUN, "sun"); load_sample_in(WAV_THRUM, "thrum"); load_sample_in(WAV_CROAK, "croak"); load_sample_in(WAV_MINEBANG, "minebang"); load_sample_in(WAV_ASPAWN, "aspawn"); load_sample_in(WAV_GAME_OVER, "gover2"); load_sample_in(WAV_TUBE, "tube"); load_sample_in(WAV_UPGRADE, "upgr"); load_sample_in(WAV_SHIELD, "shield"); load_sample_in(WAV_REPAIR, "repair"); load_sample_in(WAV_SEEKMINE, "seekmine"); load_sample_in(WAV_PLASMA, "plasma"); load_sample_in(WAV_LEVEL_END, "finish"); load_sample_in(WAV_MENU1, "menu1"); load_sample_in(WAV_MENU2, "menu2"); load_sample_in(WAV_EXTRA_SHIP, "extra"); load_sample_in(WAV_ORBITAL, "orbital"); load_sample_in(WAV_PICKUP_UPGRADE, "pickup"); load_sample_in(WAV_SEEKBLOB_BANG, "seekb"); load_sample_in(WAV_BUMP2, "bump2"); load_sample_in(WAV_HIT, "hit"); load_sample_in(WAV_HOSTILE, "buzzzap"); // load_sample_in(WAV_MUTATE, "mutate"); // load_sample_in(WAV_, ""); */ init_beat(); // priority->sound_list[WAV_POP] = 1; } void load_new_sample_in(int samp, const char *sfile) { char sfile_name [50]; strcpy(sfile_name, ".//wavs//"); strcat(sfile_name, sfile); strcat(sfile_name, ".wav"); new_sounds [samp] = load_sample(sfile_name); if (new_sounds [samp] == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Fatal Error: Unable to load sound file: %s", sfile_name); exit(1); } } /*void load_sample_in(int samp, const char *sfile) { char sfile_name [50]; strcpy(sfile_name, ".//sound//"); strcat(sfile_name, sfile); strcat(sfile_name, ".wav"); sounds [samp] = load_sample(sfile_name); if (sounds [samp] == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Fatal Error: Unable to load sound file: %s", sfile_name); exit(1); } } */ /* void load_sample_in(SAMPLE *samp) { if (samp == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Fatal Error: Unable to load sound file"); exit(1); } } */ /* void play_sound(int sample) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; play_sample(sounds [sample], (int) (250 * options.sound_volume) / 100, 127, 1000, 0); } */ /* void play_sound2(int sample, int frq, int vol, int pan) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; play_sample(sounds [sample], (vol * options.sound_volume) / 100, pan, frq, 0); } void play_soundf(int sample, int frq) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; play_sample(sounds [sample], (int) (255 * options.sound_volume) / 100, 127, frq, 0); } void play_sound_pos(int sample, int frq, int vol, int x2, int y2) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; int pan = 127; int vol2 = vol; int distance; int x1 = actor[player[game.single_player].actor_controlled].x; int y1 = actor[player[game.single_player].actor_controlled].y; distance = hypot(abs(x2 - x1), abs(y2 - y1)) / GRAIN; if (distance > 1000) return; if (distance > 300) { distance -= 300; distance = 1000 - distance; vol2 *= distance; //(800 - (distance - 300)); vol2 /= 1000; } if (options.sound_mode == SOUNDMODE_MONO || game.users == 2) pan = 127; else { if (x1 == x2) { pan = 127; } else { if (x1 < x2 - (300 * GRAIN)) pan = 0; else { if (x1 > x2 + (300 * GRAIN)) pan = 255; else { if (x1 > x2) { pan = 127 + ((x1 - x2) * 125) / (300 * GRAIN); } else { pan = 127 - ((x2 - x1) * 125) / (300 * GRAIN); } } } } if (options.sound_mode == SOUNDMODE_REVERSED) pan = 255 - pan; } // stop_sample(sounds [sample]); play_sample(sounds [sample], (vol2 * options.sound_volume) / 100, pan, frq, 0); } */ void set_engine_sound(int a, int drive, int setting) { #ifdef SOUND_OFF return; #endif } void kill_drive_sounds(void) { #ifdef SOUND_OFF return; #endif if (sound_active == 0) return; // if (actor[a].drive_sound [DRIVE_THRUST] > 0) { // stop_sample(sounds [WAV_ENGINE]); } } /* ************************ Beat functions ************************ */ void play_beats(void) { if (arena.level_finished == 1 && sound_active != 0) { play_success_sound(); return; } // this is in play_beats, but it goes through whichever volume control is higher if (sound_active == 0 || options.ambience_volume == 0) return; // if (options.ambience_volume == 0) // return; play_melody(); bpos ++; if (bpos >= phrase_length) { bpos = 0; over_bpos ++; if (over_bpos >= over_phrase_length) over_bpos = over_phrase_loop_point; } if (beat_phrase [over_beat_phrase [over_bpos]] [bpos].samp == BEAT_EMPTY) return; int tone_play = beat_phrase [over_beat_phrase [over_bpos]] [bpos].pitch; if (beat_phrase [over_beat_phrase [over_bpos]] [bpos].rand_pitch != -1) { if (grand(5) != 0) tone_play += chord_jumps [beat_phrase [over_beat_phrase [over_bpos]] [bpos].rand_pitch] [grand(NO_JUMPS)]; else tone_play -= chord_jumps [beat_phrase [over_beat_phrase [over_bpos]] [bpos].rand_pitch] [grand(NO_JUMPS)]; } /* int mel = beat_phrase [over_beat_phrase [over_bpos]] [bpos].melody; if (mel != -1) { tone_play = prog_base [mel] + progression [mel] [prog_pos [mel]]; prog_pos [mel] ++; if (prog_pos [mel] >= prog_length [mel]) prog_pos [mel] = 0; }*/ if (beat_phrase [over_beat_phrase [over_bpos]] [bpos].samp != BEAT_EMPTY) // if (FALSE) { play_beatfvp(beat_phrase [over_beat_phrase [over_bpos]] [bpos].samp, // beat_phrase [over_beat_phrase [over_bpos]] [bpos].pitch + grand(beat_phrase [over_beat_phrase [over_bpos]] [bpos].rand_pitch), tone [tone_play], // note [beat_phrase [over_beat_phrase [over_bpos]] [bpos].pitch], beat_phrase [over_beat_phrase [over_bpos]] [bpos].vol, beat_phrase [over_beat_phrase [over_bpos]] [bpos].pan); } /* if (ppos == 12 || ppos == 24) play_beat(BEAT_LOWDRUM); if (ppos == 17) play_beat(BEAT_ZAPDRUM1); */ } void calculate_beat(void) { if (sound_active == 0) return; int success_chord = grand(NO_CHORDS); success_base = 1; success_note [0] = chord_jumps [success_chord] [0]; success_note [1] = chord_jumps [success_chord] [grand(NO_JUMPS)]; success_note [2] = chord_jumps [success_chord] [grand(NO_JUMPS)]; success_samp = BEAT_STRING; switch(grand(6)) { case 0: success_samp = BEAT_STRING; break; case 1: success_samp = BEAT_BELL_S; break; case 2: success_samp = BEAT_BELL_L; break; case 3: success_samp = BEAT_STRING; break; case 4: success_samp = BEAT_SPARKLE; break; case 5: success_samp = BEAT_ZAPDRUM2; break; } success_step = 1 + grand(3); if (options.ambience_volume == 0) return; int i, j; int basic_beat [5]; int split_phrase = 0; if (grand(3) != 0) split_phrase = 1; if (grand(4) == 0) split_phrase = 2; for (i = 0; i < MAX_PHRASES; i ++) { for (j = 0; j < MAX_PHRASE_LENGTH; j ++) { beat_phrase[i] [j].samp = BEAT_EMPTY; beat_phrase[i] [j].pitch = 1000; beat_phrase[i] [j].rand_pitch = 0; beat_phrase[i] [j].pan = 127; beat_phrase[i] [j].rand_pan = 0; beat_phrase[i] [j].melody = 0; beat_phrase[i] [j].vol = 200; } } // phrase_length = (20 + grand(25)) * (split_phrase + 1); phrase_length = (15 + grand(20)) * (split_phrase + 1); // phrase_length = (12 + grand(10)) * (split_phrase + 1); if (grand(5) == 0) phrase_length += 15; // phrase_length = (10) * (split_phrase + 1); /* basic_beat [0] = grand(BEAT_TWIRM + 1); basic_beat [1] = grand(BEAT_TWIRM + 1); basic_beat [2] = grand(BEAT_TWIRM + 1); basic_beat [3] = grand(BEAT_TWIRM + 1); basic_beat [4] = grand(BEAT_TWIRM + 1);*/ basic_beat [0] = grand(BEAT_TWIRM + 1); basic_beat [1] = grand(BEAT_TWIRM + 1); if (grand(4) == 0) basic_beat [0] = grand(NO_BEATS); if (grand(4) == 0) basic_beat [1] = grand(NO_BEATS); basic_beat [2] = grand(NO_BEATS); basic_beat [3] = grand(NO_BEATS); basic_beat [4] = grand(NO_BEATS); int rand_note = -1; // int prog_note = -1; //nt no_progs = 0; // int prog_active [NO_PROGS] = {0,0,0,0}; int base_phrase_length = phrase_length; int num_phrases = 0; // int mel_delay = 0; // int mel_length; // int mel_start; // int mel_pos; // int mel_delay_rand; if (split_phrase == 1) base_phrase_length /= 2; if (split_phrase == 3) base_phrase_length /= 3; int basenote = 25; int randnote = 27; add_note(basic_beat [0], 0, grand(base_phrase_length), basenote + grand(randnote), -1, 127, 200, 0); add_note(basic_beat [0], 0, grand(base_phrase_length), basenote + grand(randnote), -1, 127, 200, 0); if (split_phrase > 0) { add_note(basic_beat [0], 0, base_phrase_length + grand(base_phrase_length), basenote + grand(randnote), -1, 127, 200, 0); add_note(basic_beat [0], 0, base_phrase_length + grand(base_phrase_length), basenote + grand(randnote), -1, 127, 200, 0); } if (split_phrase > 1) { add_note(basic_beat [0], 0, (base_phrase_length * 2) + grand(base_phrase_length), basenote + grand(randnote), -1, 127, 200, 0); add_note(basic_beat [0], 0, (base_phrase_length * 2) + grand(base_phrase_length), basenote + grand(randnote), -1, 127, 200, 0); } num_phrases ++; copy_phrase(1, 0); add_note(basic_beat [1], 1, grand(base_phrase_length), basenote + grand(randnote), -1, 127, 200, 0); add_note(basic_beat [1], 1, grand(base_phrase_length), basenote + grand(randnote), -1, 127, 200, 0); if (split_phrase > 0) { add_note(basic_beat [1], 1, base_phrase_length + grand(base_phrase_length), basenote + grand(randnote), -1, 127, 200, 0); add_note(basic_beat [1], 1, base_phrase_length + grand(base_phrase_length), basenote + grand(randnote), -1, 127, 200, 0); } if (split_phrase > 1) { add_note(basic_beat [1], 0, (base_phrase_length * 2) + grand(base_phrase_length), basenote + grand(randnote), -1, 127, 200, 0); add_note(basic_beat [1], 0, (base_phrase_length * 2) + grand(base_phrase_length), basenote + grand(randnote), -1, 127, 200, 0); } num_phrases ++; copy_phrase(2, 1); rand_note = grand(NO_CHORDS); if (grand(15) != 0) rand_note = -1; add_note(basic_beat [2], 2, grand(base_phrase_length), basenote + grand(randnote), rand_note, 127, 200, -1); if (split_phrase > 0) add_note(basic_beat [2], 2, base_phrase_length + grand(base_phrase_length), basenote + grand(randnote), rand_note, 127, 200, -1); if (split_phrase > 1) add_note(basic_beat [2], 2, (base_phrase_length * 2) + grand(base_phrase_length), basenote + grand(randnote), rand_note, 127, 200, -1); num_phrases ++; // prog_note = -1; if (grand(2) == 0) { calculate_melody(1); } else { calculate_melody(0); copy_phrase(3, 2); rand_note = grand(NO_CHORDS); if (grand(15) != 0) rand_note = -1; add_note(basic_beat [3], 3, grand(base_phrase_length), basenote + grand(randnote), rand_note, 127, 200, -1); if (split_phrase > 0) add_note(basic_beat [3], 3, base_phrase_length + grand(base_phrase_length), basenote + grand(randnote), rand_note, 127, 200, -1); if (split_phrase > 1) add_note(basic_beat [3], 3, (base_phrase_length * 2) + grand(base_phrase_length), basenote + grand(randnote), rand_note, 127, 200, -1); // add_note(basic_beat [0], 0, grand(phrase_length), 15 + grand(10), 0, 127, 200); } if (grand(2) == 0) num_phrases ++; /* prog_note = -1; copy_phrase(4, 3); rand_note = grand(NO_CHORDS); if (grand(3) != 0) rand_note = -1; if (grand(3) != 0) { prog_note = 2; prog_active [2] = 1; } // if (prog_note == 2) // no_progs ++; add_note(basic_beat [4], 4, grand(base_phrase_length), 15 + grand(10), rand_note, 127, 200, prog_note); if (split_phrase > 0) add_note(basic_beat [4], 4, base_phrase_length + grand(base_phrase_length), 15 + grand(10), rand_note, 127, 200, prog_note); if (split_phrase > 1) add_note(basic_beat [4], 4, (base_phrase_length * 2) + grand(base_phrase_length), 15 + grand(10), rand_note, 127, 200, prog_note); // add_note(basic_beat [1], 0, grand(phrase_length), 15 + grand(10), 0, 127, 200); */ int oplength = 7 + grand(5); int pause_length = grand(3); int up_to = 0, next_op = 0; add_over_phrase(0, 0, MAX_OVERPHRASES); if (split_phrase == 1) { // if (grand(3) != 0) // no_progs *= 2; oplength = 4 + grand(3); } if (split_phrase == 2) { // if (grand(3) != 0) // no_progs *= 3; oplength = 2 + grand(3); } // if (grand(8) == 0) // no_progs = 4 + grand(3) - grand(3); /* prog_length [0] = 8 + grand(3) - grand(3); prog_length [1] = prog_length [0]; prog_length [2] = prog_length [0]; prog_length [3] = prog_length [0]; create_progression(0, prog_length [0], grand(NO_CHORDS)); create_progression(1, prog_length [1], grand(NO_CHORDS)); create_progression(2, prog_length [2], grand(NO_CHORDS)); create_progression(3, prog_length [3], grand(NO_CHORDS)); */ // prog_length = no_progs; for (i = 0; i < num_phrases; i ++) { next_op = up_to + oplength; add_over_phrase(i, up_to + pause_length, next_op); up_to = next_op; } /* add_over_phrase(0, 0, 9); add_over_phrase(1, 10, 20); add_over_phrase(2, 21, 30); add_over_phrase(3, 31, 40); add_over_phrase(4, 41, 50);*/ over_phrase_length = up_to; over_phrase_loop_point = oplength * (1 + grand(3)); bpos = 0; over_bpos = 0; /* for (i = 0; i < NO_PROGS; i ++) { prog_pos [i] = 0; prog_base [i] = 10 + grand(15); } */ } void add_note(int beat, int bp1, int bp2, int pitch, int rand_pitch, int pan, int vol, int mel) { if (bp1 >= MAX_PHRASES || bp2 >= MAX_PHRASE_LENGTH) return; if (pitch <= 0 || pitch >= NO_TONES) return; beat_phrase[bp1] [bp2].samp = beat; beat_phrase[bp1] [bp2].pitch = pitch; beat_phrase[bp1] [bp2].rand_pitch = rand_pitch; if (grand(3) == 0) beat_phrase[bp1] [bp2].pan = grand(255); else beat_phrase[bp1] [bp2].pan = pan; if (options.sound_mode == SOUNDMODE_MONO) beat_phrase[bp1] [bp2].pan = 127; // don't worry about reversing stereo; it doesn't matter beat_phrase[bp1] [bp2].vol = vol; beat_phrase[bp1] [bp2].melody = mel; } void add_over_phrase(int phrase, int start, int finish) { int i; for (i = start; i < finish + 1; i ++) { if (i >= MAX_OVERPHRASES) return; over_beat_phrase [i] = phrase; } } void copy_phrase(int target, int source) { int j; if (source >= MAX_PHRASES || target >= MAX_PHRASES) return; for (j = 0; j < MAX_PHRASE_LENGTH; j ++) { beat_phrase[target] [j].samp = beat_phrase[source] [j].samp; beat_phrase[target] [j].pitch = beat_phrase[source] [j].pitch; beat_phrase[target] [j].rand_pitch = beat_phrase[source] [j].rand_pitch; beat_phrase[target] [j].pan = beat_phrase[source] [j].pan; beat_phrase[target] [j].rand_pan = beat_phrase[source] [j].rand_pan; beat_phrase[target] [j].melody = beat_phrase[source] [j].melody; } } void create_progression(int which, int length, int key) { int i; int n = grand(NO_JUMPS); int longprogpos = 0; if (FALSE) //grand(4) == 0) { for (i = 0; i < length; i ++) { progression [which] [i] = chord_jumps [key] [n]; n += grand(4); if (grand(3) == 0) n -= grand(4); n %= NO_JUMPS; } return; } for (i = 0; i < length; i ++) { progression [which] [i] = long_prog [0] [longprogpos]; longprogpos ++; if (long_prog [0] [longprogpos] == NOTE_ENDNOTE) longprogpos = 0; } } void play_melody(void) { //return; int i = 0; if (overmelody_mode == OVERMELODY_REPEAT) { for (i = 0; i < MAX_MELODIES; i ++) { if (melody_active [i] == 0) continue; if (mdelay [i] > 0) { mdelay [i] --; continue; } mpos [i] ++; if (mpos [i] >= melody_length [i]) { mpos [i] = 0; over_mpos ++; if (over_mpos >= overmelodies) over_mpos = 0; melodies_played ++; } // } if (melody [i] [mpos [i]].samp != BEAT_EMPTY && overmelody [over_mpos].start <= melodies_played) { debug_sound [0] = over_mpos; debug_sound [1] = over_mpos2; //mpos [i]; debug_sound [2] = melody [i] [mpos [i]].pitch + overmelody [over_mpos].key; debug_sound [3] = tone [melody [i] [mpos [i]].pitch + overmelody [over_mpos].key]; if (melody [i] [mpos [i]].pitch + overmelody [over_mpos].key <= 0 || melody [i] [mpos [i]].pitch + overmelody [over_mpos].key >= NO_TONES) return; play_beatfvp(melody [i] [mpos [i]].samp, // melody [i] [mpos [i]].pitch + overmelody [over_mpos], //grand(melody [i] [mpos [i]].rand_pitch), tone [melody [i] [mpos [i]].pitch + overmelody [over_mpos].key], //grand(melody [i] [mpos [i]].rand_pitch), melody [i] [mpos [i]].vol, melody [i] [mpos [i]].pan); } } } if (overmelody_mode == OVERMELODY_FILL) { mpos [0] ++; if (mpos [0] >= melody_length [0]) { over_mpos2 ++; mpos [0] = 0; if (over_mpos2 >= overmelody_fill_length) { over_mpos2 = 0; over_mpos ++; if (over_mpos >= overmelodies) over_mpos = 1; } if (mdelay [0] > 0) mdelay [0] --; } if (mdelay [0] > 0) { return; } if (melody [over_mpos] [mpos [0]].samp != BEAT_EMPTY) { debug_sound [0] = mpos [0]; debug_sound [1] = over_mpos; //mpos [i]; debug_sound [2] = over_mpos2; debug_sound [3] = tone [melody [over_mpos] [mpos [0]].pitch + overmelody [over_mpos].key]; if (melody [over_mpos] [mpos [0]].pitch + overmelody [over_mpos].key <= 0 || melody [over_mpos] [mpos [0]].pitch + overmelody [over_mpos].key >= NO_TONES) return; play_beatfvp(melody [over_mpos] [mpos [0]].samp, // melody [i] [mpos [i]].pitch + overmelody [over_mpos], //grand(melody [i] [mpos [i]].rand_pitch), tone [melody [over_mpos] [mpos [0]].pitch + overmelody [over_mpos].key], //grand(melody [i] [mpos [i]].rand_pitch), melody [over_mpos] [mpos [0]].vol, melody [over_mpos] [mpos [0]].pan); } } } void calculate_melody(int active) { // now, we assume that the beat is fully set up, so we can use all of the beat-related globals. int i, j; int overlength = 1 + grand(3); int melody_note = BEAT_ZAPDRUM1; // if (grand(2) == 0) melody_note = grand(NO_BEATS - BEAT_TWIRM) + BEAT_TWIRM;//BEAT_OBOE; j = 0; melody_active [0] = 0; melody_active [1] = 0; melody_active [2] = 0; melody_active [3] = 0; for (i = 0; i < MAX_OVERMELODIES; i ++) { overmelody [i].mel = 0; overmelody [i].key = NOTE_1C; overmelody [i].start = 0; } for (i = 0; i < MAX_MELODIES; i ++) { melody_length [i] = phrase_length * overlength; for (j = 0; j < MAX_MELODY_LENGTH; j ++) { melody [i] [j].samp = BEAT_EMPTY; } } if (!active) return; // just clear it int chord = CHORD_MAJOR; //grand(NO_CHORDS); j = 0; /* add_melody_string1(melody_note, 1, melody_length [1], chord); add_melody_string1(melody_note, 2, melody_length [2], chord); add_melody_string1(melody_note, 3, melody_length [3], chord); */ /* add_melody_note(melody_note, j, 8, 0, 0, 127, 200); add_melody_note(melody_note, j, 16, 5, 0, 127, 200); add_melody_note(melody_note, j, 24, 8, 0, 127, 200); add_melody_note(melody_note, j, 32, 11, 0, 127, 200); add_melody_note(melody_note, j, 40, 8, 0, 127, 200);*/ /* add_melody_note(melody_note, j, grand(melody_length [j]), 5, 0, 127, 200); add_melody_note(melody_note, j, grand(melody_length [j]), 10, 0, 127, 200); add_melody_note(melody_note, j, grand(melody_length [j]), 15, 0, 127, 200); add_melody_note(melody_note, j, grand(melody_length [j]), 20, 0, 127, 200); add_melody_note(melody_note, j, grand(melody_length [j]), 25, 0, 127, 200); add_melody_note(melody_note, j, grand(melody_length [j]), 30, 0, 127, 200);*/ /* add_melody_note(melody_note, j, grand(melody_length [j]), 0, 0, 127, 200); add_melody_note(melody_note, j, grand(melody_length [j]), 5, 0, 127, 200); add_melody_note(melody_note, j, grand(melody_length [j]), 10, 0, 127, 200); add_melody_note(melody_note, j, grand(melody_length [j]), 15, 0, 127, 200); add_melody_note(melody_note, j, grand(melody_length [j]), 20, 0, 127, 200); add_melody_note(melody_note, j, grand(melody_length [j]), 25, 0, 127, 200); add_melody_note(melody_note, j, grand(melody_length [j]), 30, 0, 127, 200); */ switch(grand(2)) { case 0: overmelody_mode = OVERMELODY_REPEAT; melody_active [0] = 1; overmelodies = 4; add_melody_string1(melody_note, 0, melody_length [0], chord); overmelody [0].mel = 0; overmelody [0].key = 0; overmelody [0].start = 3; overmelody [1].mel = 0; overmelody [1].key = chord_jumps [chord] [grand(4)]; overmelody [1].start = 5; overmelody [2].mel = 0; overmelody [2].key = chord_jumps [chord] [grand(4)]; overmelody [2].start = 7; overmelody [3].mel = 0; overmelody [3].key = chord_jumps [chord] [grand(4)]; overmelody [3].start = 9; break; case 1: overmelody_mode = OVERMELODY_FILL; overmelodies = 3; overmelody_fill_length = 4; if (melody_length [0] < 120) overmelody_fill_length = 6 + grand(3); if (melody_length [0] < 80) overmelody_fill_length = 8 + grand(3); if (melody_length [0] < 50) overmelody_fill_length = 10 + grand(3); melody_active [0] = 1; melody_active [1] = 1; melody_active [2] = 1; melody_length [2] = melody_length [0]; add_melody_string1(melody_note, 2, melody_length [0], chord); copy_melody(1, 2); j = 0; for (i = 0; i < MAX_MELODY_LENGTH; i ++) { if (melody [1] [i].samp != BEAT_EMPTY) { j ++; if (j % 2 != 0) melody [1] [i].samp = BEAT_EMPTY; } } copy_melody(0, 1); j = 0; for (i = 0; i < MAX_MELODY_LENGTH; i ++) { if (melody [0] [i].samp != BEAT_EMPTY) { j ++; if (j % 3 == 0) melody [0] [i].samp = BEAT_EMPTY; } } overmelody [0].mel = 0; overmelody [0].key = 0; overmelody [0].start = 4; overmelody [1].mel = 1; overmelody [1].key = 0; overmelody [1].start = 7; overmelody [2].mel = 2; overmelody [2].key = 0; overmelody [2].start = 10; mdelay [0] = 4 + grand(4); break; } mpos [0] = 0; over_mpos = 0; over_mpos2 = 0; melodies_played = 0; int k; for (i = 0; i < MAX_MELODIES; i ++) { for (j = 0; j < melody_length [i]; j ++) { for (k = 0; k < MAX_OVERMELODIES; k ++) { if (melody [i] [j].pitch + overmelody [k].key <= 0 || melody [i] [j].pitch + overmelody [k].key >= NO_TONES) melody [i] [j].samp = BEAT_EMPTY; } } } } void copy_melody(int t, int s) { int i; for (i = 0; i < MAX_MELODY_LENGTH; i ++) { melody [t] [i].samp = melody [s] [i].samp; melody [t] [i].pitch = melody [s] [i].pitch; melody [t] [i].rand_pitch = melody [s] [i].rand_pitch; melody [t] [i].pan = melody [s] [i].pan; melody [t] [i].vol = melody [s] [i].vol; } melody_length [t] = melody_length [s]; mdelay [t] = mdelay [s]; } void add_melody_note(int samp, int mp1, int mp2, int pitch, int rand_pitch, int pan, int vol) { if (options.sound_mode == SOUNDMODE_MONO) pan = 127; melody [mp1] [mp2].samp = samp; melody [mp1] [mp2].pitch = pitch; melody [mp1] [mp2].rand_pitch = rand_pitch; melody [mp1] [mp2].pan = pan; melody [mp1] [mp2].vol = vol; } void add_melody_string1(int samp, int mp1, int length, int chords) { int mstring [100]; int nm = 0; int i; int disp = 0; /// int jump = 0; for (i = 0; i < 100; i ++) { mstring [i] = -1; } int basenote = 0 + grand(13); /* nm = 3 + grand(6); if (length < 35) nm = 2 + grand(3); */ nm = length / (10 + grand(6)); if (nm >= 100) nm = 99; mstring [0] = BEAT_EMPTY; //basenote; int which_longprog = grand(NO_LONGPROGS); int longprogpos = 0; int lplength = 0; for (i = 0; i < SIZE_LONGPROGS; i ++) { lplength = i; if (long_prog [which_longprog] [i] == NOTE_ENDNOTE) break; } longprogpos = grand(lplength); for (i = 0; i < nm; i ++) // i = 1, not 0 { mstring [i] = basenote + long_prog [which_longprog] [longprogpos]; // mstring [i] = 40 + i; longprogpos ++; if (long_prog [which_longprog] [longprogpos] == NOTE_ENDNOTE) longprogpos = 0; // jump = chord_jumps [chords] [grand(NO_JUMPS)]; /* switch(grand(6)) { case 0: jump = 0; break; case 1: jump = 5; break; case 2: jump = 8; break; case 3: jump = 11; break; case 4: jump = 13; break; case 5: jump = 9; break; }*/ /* if (grand(2) == 0) jump *= -1; if (grand(3) == 0) mstring [i] = mstring [i - 1] + jump; else mstring [i] = basenote + jump; if (mstring [i] < 0 || mstring [i] >= NO_TONES || (mstring [i - 1] != basenote && grand(3) == 0)) mstring [i] = basenote; if (grand(10) == 0) mstring [i] = -1; */ } disp = length / nm; if (disp < 5) disp = 5; int j = 0; int base_disp = disp / 2; int rand_disp = grand(base_disp); if (grand(2) == 0) { base_disp = disp; rand_disp = 0; } for (i = 0; i < nm; i ++) { if (mstring [i] != -1) add_melody_note(samp, mp1, j, mstring [i], 0, 127, 200); // add_melody_note(samp, mp1, mstring [i], j, 0, 127, 200); j += base_disp + grand(rand_disp); if (j >= MAX_MELODY_LENGTH) break; } } /* void play_beat(int samp) { play_sample(beat [samp], (255 * options.sound_volume) / 100, 127, 1000, 0); } void play_beatf(int samp, int freq) { play_sample(beat [samp], (255 * options.sound_volume) / 100, 127, freq, 0); } */ void play_beatfvp(int samp, int freq, int vol, int pan) { play_sample(beat [samp], (vol * options.ambience_volume) / 100, pan, freq, 0); } void play_successfvp(int samp, int freq, int vol, int pan) { int volum = options.ambience_volume; if (options.sound_volume > volum) volum = options.sound_volume; if (volum == 0) return; play_sample(beat [samp], (vol * volum) / 100, pan, freq, 0); } void play_success_sound(void) { if (arena.game_over != 0) return; int ss = 166 - arena.time_left; // if (ss < 40 || ss >= 160) if (ss >= 160) return; if (ss % 10 != 0) return; ss /= 10; ss += 2; int freq = success_base;//NOTE_1C; freq += (ss / 3) * success_step; if (ss % 3 == 0) freq += success_note [0]; if (ss % 3 == 1) freq += success_note [1]; if (ss % 3 == 2) freq += success_note [2]; // play_beatfvp(BEAT_BASS, tone [freq], 200, 127); play_successfvp(success_samp, tone [freq], 200, 127); } void init_beat(void) { if (sound_active == 0) return; load_beat_sample_in(BEAT_DRUM1, "drum1"); load_beat_sample_in(BEAT_DRUM2, "drum2"); load_beat_sample_in(BEAT_LOWDRUM, "lowdrum"); load_beat_sample_in(BEAT_STICK, "stick"); load_beat_sample_in(BEAT_TWIRM, "twirm"); load_beat_sample_in(BEAT_ZAPDRUM1, "zapdrum1"); load_beat_sample_in(BEAT_ZAPDRUM2, "zapdrum2"); load_beat_sample_in(BEAT_PPIPE, "ppipe"); load_beat_sample_in(BEAT_BELL_S, "bell_s"); load_beat_sample_in(BEAT_BELL_L, "bell_l"); load_beat_sample_in(BEAT_SPARKLE, "sparkle"); load_beat_sample_in(BEAT_MOSQ, "mosq"); load_beat_sample_in(BEAT_SPACE, "space"); load_beat_sample_in(BEAT_SWEEP, "sweep"); load_beat_sample_in(BEAT_TING, "ting"); load_beat_sample_in(BEAT_REVERSE, "reverse"); load_beat_sample_in(BEAT_SAW, "saw"); load_beat_sample_in(BEAT_BASS, "bass"); // load_beat_sample_in(BEAT_OBOE, "oboe"); load_beat_sample_in(BEAT_BASS2, "bass2"); // load_beat_sample_in(BEAT_BASSOON, "bassoon"); load_beat_sample_in(BEAT_BRASS, "brass"); load_beat_sample_in(BEAT_CHOIR, "choir"); load_beat_sample_in(BEAT_FLUTE, "flute"); load_beat_sample_in(BEAT_ODD, "odd"); load_beat_sample_in(BEAT_REVERSE2, "reverse2"); load_beat_sample_in(BEAT_ACCORD, "accord"); load_beat_sample_in(BEAT_STRING, "string"); // load_beat_sample_in(BEAT_, ""); // ppos = 0; // plength = 0; } void load_beat_sample_in(int samp, const char *sfile) { char sfile_name [50]; strcpy(sfile_name, ".//wavs//beat//"); strcat(sfile_name, sfile); strcat(sfile_name, ".wav"); beat [samp] = load_sample(sfile_name); if (beat [samp] == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Fatal Error: Unable to load sound file: %s", sfile_name); exit(1); } } void play_wav(int sample) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; play_sample(new_sounds [sample], (int) (250 * options.sound_volume) / 100, 127, 1000, 0); } void play_wav2(int sample, int frq, int vol, int pan) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; /* stop_sample(soundf[WAV_POP].dat); stop_sample(soundf[WAV_RICOCHET].dat); if (sample == WAV_S_PULSE) stop_sample(soundf[WAV_S_PULSE].dat);*/ // stop_sample(sounds [sample]); play_sample(new_sounds [sample], (vol * options.sound_volume) / 100, pan, frq, 0); } void play_wavf(int sample, int frq) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; play_sample(new_sounds [sample], (int) (255 * options.sound_volume) / 100, 127, frq, 0); } /* Positional sound for stereo effects. y2 currently unused, but may be in future for some kind of triangulation. */ void play_wav_pos(int sample, int frq, int vol, int x2, int y2) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; /* stop_sample(soundf[WAV_POP].dat); stop_sample(soundf[WAV_RICOCHET].dat); if (sample == WAV_S_PULSE) stop_sample(soundf[WAV_S_PULSE].dat);*/ /* if (options[0].positional_sound == 0 || game.users > 1) { play_sample(soundf[sample].dat, vol, 127, frq, 0); }*/ int pan = 127; int vol2 = vol; int distance; int x1 = actor[player[game.single_player].actor_controlled].x; int y1 = actor[player[game.single_player].actor_controlled].y; distance = hypot(abs(x2 - x1), abs(y2 - y1)) / GRAIN; if (distance > 1000) return; if (distance > 300) { distance -= 300; distance = 1000 - distance; vol2 *= distance; //(800 - (distance - 300)); vol2 /= 1000; } if (options.sound_mode == SOUNDMODE_MONO || game.users == 2) pan = 127; else { if (x1 == x2) { pan = 127; } else { if (x1 < x2 - (300 * GRAIN)) pan = 0; else { if (x1 > x2 + (300 * GRAIN)) pan = 255; else { if (x1 > x2) { pan = 127 + ((x1 - x2) * 125) / (300 * GRAIN); } else { pan = 127 - ((x2 - x1) * 125) / (300 * GRAIN); } } } } if (options.sound_mode == SOUNDMODE_REVERSED) pan = 255 - pan; } play_sample(new_sounds [sample], (vol2 * options.sound_volume) / 100, pan, frq, 0); } void play_gameover_loop(int freq) { play_sample(new_sounds [NWAV_GAMEOVER], (200 * options.sound_volume) / 100, 127, freq, 1); } void kill_gameover_loop(void) { stop_sample(new_sounds [NWAV_GAMEOVER]); } overgod-1.0/sound.h0000644000175000001440000000411610306324402013324 0ustar michiusers void init_sound(void); void play_sound(int sample); void play_sound2(int sample, int frq, int vol, int pan); void play_soundf(int sample, int frq); void play_sound_pos(int sample, int frq, int vol, int x2, int y2); void play_wav(int sample); void play_wav2(int sample, int frq, int vol, int pan); void play_wavf(int sample, int frq); void play_wav_pos(int sample, int frq, int vol, int x2, int y2); void kill_drive_sounds(void); void play_beats(void); void calculate_beat(void); void play_gameover_loop(int freq); void kill_gameover_loop(void); enum { SOUNDMODE_OFF, SOUNDMODE_MONO, SOUNDMODE_STEREO, SOUNDMODE_REVERSED }; enum { NWAV_NONE, NWAV_BURST, NWAV_GBLAT, NWAV_CHIRP, NWAV_CLICK, NWAV_DNO, NWAV_PPIPE, NWAV_WARBLE, NWAV_WARBLEB, NWAV_WHINE, NWAV_ZAPSTEP, NWAV_SHORTBURST, NWAV_CYMBAL, NWAV_CHIME, NWAV_CHIME2, NWAV_BALL1, NWAV_BANG, NWAV_MULTI, NWAV_SZAP, NWAV_TWING, NWAV_PUFF, NWAV_DRIVE, NWAV_DART, NWAV_PHASE, NWAV_SPLERK, NWAV_LZAP, NWAV_SEEKER, NWAV_WORMS, NWAV_REPAIR, NWAV_GAMEOVER, NWAV_BIGBANG, NWAV_SYMBOL, NWAV_MENU, NWAV_EYE, NWAV_TEETH, NWAV_SPAWN, NWAV_BLOCK, NWAV_LAUNCH, NWAV_SUCCESS, NWAV_EXTRA, NWAV_SHIELD, NWAV_BURSTZ, NWAV_BURSTZL, NWAV_SHIELDE, NWAV_SHADOW, NWAV_JET, NWAV_ALARM, NWAV_BLAST, NWAV_BUMP, NWAV_BUMP2, NWAV_MINEBANG, NO_NWAVS }; /*enum { WAV_NONE, WAV_CANNON, WAV_ENGINE, WAV_WOBBLE, WAV_LONG_WOBBLE, WAV_WARP_IN, WAV_BANG1, WAV_WHINE, WAV_HARD_ZAP, WAV_BOSS2, WAV_STING, WAV_BUMP, WAV_BOMBS, WAV_BLORT, WAV_STING4, WAV_MISSILE, WAV_ALARM, WAV_ZAPNOTE1, WAV_ZAPNOTE2, WAV_BLAST, WAV_MINE, WAV_SHORTZAP, WAV_BLAT, WAV_SHORTZAP2, WAV_SUN, WAV_THRUM, WAV_CROAK, WAV_MINEBANG, WAV_GREENSEEKER1, WAV_GREENSEEKER2, WAV_TORPEDO, WAV_BOSS3_1, WAV_BOSS3_2, WAV_BOSS3_3, WAV_ASPAWN, WAV_GAME_OVER, WAV_TUBE, WAV_UPGRADE, WAV_SHIELD, WAV_REPAIR, WAV_SEEKMINE, WAV_PLASMA, WAV_LEVEL_END, WAV_MENU1, WAV_MENU2, WAV_EXTRA_SHIP, WAV_ORBITAL, WAV_PICKUP_UPGRADE, WAV_SEEKBLOB_BANG, WAV_BUMP2, WAV_HIT, WAV_HOSTILE, WAV_MUTATE, NO_WAVS }; */ overgod-1.0/stuff.c0000644000175000001440000001024310310757124013322 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: stuff.c History: 11/9/2005 - Version 1.0 finalised This file contains: - a few common functions */ #include "allegro.h" #include //#include #include "config.h" int turn_towards_angle(int angle, int tangle, int turning); float lcos(int angle); float lsin(int angle); float angle_to_radians(int angle); // I have no idea why, but the first few elements of cos_table always get corrupted // unless I put a big fat decoy array just above. A similar thing happens to the // palette arrays; there seems to be a problem with global arrays like these. float decoy_table [ANGLE_FULL]; // not used float cos_table [ANGLE_FULL]; float sin_table [ANGLE_FULL]; inline int xpart(int angle, int length); void init_trig(void) { int i; for (i = 0; i < ANGLE_FULL; i ++) { cos_table [i] = cos(angle_to_radians(i));// * ANGLE_FULL; sin_table [i] = sin(angle_to_radians(i));// * ANGLE_FULL; } } inline int xpart(int angle, int length) { // return (lcos(angle) * length);// / ANGLE_FULL; return (cos_table [angle & 1023] * length);// / ANGLE_FULL; } inline int ypart(int angle, int length) { return (sin_table [angle & 1023] * length);// / ANGLE_FULL; } float lcos(int angle) { return cos_table [angle & 1023]; //0x4ffffffff]; } float lsin(int angle) { return sin_table [angle & 1023]; //0x4ffffffff]; } float angle_to_radians(int angle) { return ((float) angle * PI * 2) / ANGLE_FULL; // return ((float) angle / ANGLE_FULL) * PI * 2; } int radians_to_angle(float angle) { return (int) ((angle * ANGLE_FULL) / (PI * 2)); } fixed angle_to_fixed(int angle) { return itofix(angle / ANGLE_TO_FIXED); } int grand(int number) { if (number == 0) return 0; return ((rand() + (rand() << 16)) & 0x7fffffff) % number; } int crandom(int number) { if (number == 0) return 0; return ((rand() + (rand() << 16)) & 0x7fffffff) % number; // return (rand() + (rand() << 16)) % number; } int turn_towards_angle(int angle, int tangle, int turning) { if ((angle < tangle && tangle > angle + ANGLE_HALF) || (angle > tangle && tangle > angle - ANGLE_HALF)) { angle -= turning; if (angle < 0) angle += ANGLE_FULL; } else { angle += turning; if (angle > ANGLE_FULL) angle -= ANGLE_FULL; } return angle; } int turn_towards_xy(int x1, int y1, int x2, int y2, int angle, int turning) { int tangle = radians_to_angle(atan2((y2 - y1), (x2 - x1))); if (tangle < 0) tangle += ANGLE_FULL; if (tangle > ANGLE_FULL) tangle -= ANGLE_FULL; return turn_towards_angle(angle, tangle, turning); } // speed must be at least 4, and a factor of 1024 int pulsate(int speed, int amount, int county) { return xpart((county * speed) & 1023, amount); } void error_message_out(const char *errm) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message(errm); exit(1); } int angle_difference(int a1, int a2) { int d1, d2; d1 = (a1 - a2 + ANGLE_FULL) % ANGLE_FULL; d2 = (a2 - a1 + ANGLE_FULL) % ANGLE_FULL; if (d1 < d2) return abs(d1); return abs(d2); } overgod-1.0/stuff.h0000644000175000001440000000103110165515340013322 0ustar michiusersvoid init_trig(void); float angle_to_radians(int angle); int radians_to_angle(float angle); fixed angle_to_fixed(int angle); int grand(int number); int crandom(int number); int turn_towards_angle(int angle, int tangle, int turning); int turn_towards_xy(int x1, int y1, int x2, int y2, int angle, int turning); inline int xpart(int angle, int length); inline int ypart(int angle, int length); int pulsate(int speed, int amount, int county); int angle_difference(int a1, int a2); void error_message_out(const char *errm); overgod-1.0/tile.c0000644000175000001440000007652110310757124013143 0ustar michiusers/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: stuff.c History: 11/9/2005 - Version 1.0 finalised This file contains: - generation of the tiled background */ #include "allegro.h" #include #include //#include #include "config.h" #include "globvars.h" #include "palette.h" #include "cloud.h" #include "display.h" #include "stuff.h" #define ROTATE_90 64 #define ROTATE_180 128 #define ROTATE_270 192 #define CONNECT_U 1 #define CONNECT_D 2 #define CONNECT_L 4 #define CONNECT_R 8 enum { MAZE_NOTHING, MAZE_UD, MAZE_UL, MAZE_UR, MAZE_DL, MAZE_DR, MAZE_LR, MAZE_ULR, MAZE_DLR, MAZE_UDL, MAZE_UDR, MAZE_UDLR, MAZE_U, MAZE_D, MAZE_L, MAZE_R, MAZE_OUTER_U, MAZE_OUTER_D, MAZE_OUTER_L, MAZE_OUTER_R, MAZE_OUTER_UL, MAZE_OUTER_DL, MAZE_OUTER_UR, MAZE_OUTER_DR, MAZE_OUTER2, MAZE_REMOTE_NODE, MAZE_EYE_CLOSED_NODE, MAZE_EYE_OPEN_NODE, MAZE_EYE_CLOSED_REMOTE_NODE, MAZE_EYE_OPEN_REMOTE_NODE }; extern FONT *small_font; extern struct optionstruct options; //BITMAP *make_bmp(int x, int y); BITMAP *make_bmp(int x, int y, const char errtxt []); void make_maze_map(int x, int y); RLE_SPRITE *make_tile(int index, int index2, int colourise1, int colourise2, int rotation); RLE_SPRITE *make_m_tile(int index, int tmaze, int index2, int colourise1, int colourise2, int rotation); RLE_SPRITE *make_complex_tile(int index, int index2, int tmaze, int colourise1, int colourise2, int colourise2_1, int colourise2_2, int rotation); void draw_maze_1(BITMAP *level_bmp, int x, int y); void draw_maze_2(BITMAP *level_bmp, int x, int y); void put_eyes_in_maze(BITMAP *level_bmp, int x, int y); void find_place_for_eye(int x_min, int y_min, int x_max, int y_max, int eye); int draw_eye_path(BITMAP *level_bmp, int x, int y, int ex, int ey, int xd, int yd, int draw); // these eye functions are obsolete: void place_eyes(BITMAP *level_bmp, int x, int y); void put_eye(int x1, int y1, int x2, int y2, int k, int node_x [100], int node_y [100]); void put_eye2(int x, int y); int eye_okay(int i, int j); void make_tile_background_rle(void); void tile_progress_update(const char progtxt []); extern BITMAP *level_bmp; extern RLE_SPRITE *tile_background; extern int scr_x; // so we know how big to make tile_background extern int scr_y; extern BITMAP *pretile_bmp [NO_PRETILE_BMPS]; extern BITMAP *pretile_m_bmp [NO_MAZES] [NO_PRETILE_M_BMPS]; extern RLE_SPRITE *tile_rle [NO_TILE_RLES]; extern RLE_SPRITE *menu_tile; int next_eye; void init_tiles(void) { int i; for (i = 0; i < NO_TILE_RLES; i ++) { tile_rle [i] = NULL; } menu_tile = make_tile(0, -1, CONVERT_GREEN1 + grand(5) * 8, CONVERT_GREEN2 + grand(5) * 8, 0); } void make_tile_map(int x, int y) { int i; // Must remember to make sure that an empty tile_rle always is NULL! // This should be done in init_tiles at first, then here during preparation for each level. for (i = 0; i < NO_TILE_RLES; i ++) { if (tile_rle [i] != NULL) { destroy_rle_sprite(tile_rle [i]); tile_rle [i] = NULL; } } // BITMAP *temp_bitmap = make_bmp(50, 50, "temp_bitmap (make_tile_map)"); make_maze_map(x, y); make_tile_background_rle(); } void make_maze_map(int x, int y) { int col1 = CONVERT_GREEN1 + grand(5) * 8; int col2 = CONVERT_GREEN2 + grand(5) * 8; int bcol1 = CONVERT_GREEN1; int bcol2 = CONVERT_GREEN1; int hcola1, hcola2, hcolb1, hcolb2, adjusted_level; col1 = CONVERT_RED1; col2 = CONVERT_RED2; hcola1 = CONVERT_BLUE1; hcola2 = CONVERT_BLUE2; hcolb1 = CONVERT_BLUE1; hcolb2 = CONVERT_BLUE2; adjusted_level = arena.level - 10; if (arena.level <= 10) { col1 = CONVERT_YELLOW1; col2 = CONVERT_YELLOW2; hcola1 = CONVERT_ORANGE1; hcola2 = CONVERT_ORANGE2; hcolb1 = CONVERT_ORANGE1; hcolb2 = CONVERT_ORANGE2; adjusted_level = arena.level - 5; } if (arena.level <= 5) { col1 = CONVERT_GREEN1; col2 = CONVERT_GREEN2; hcola1 = CONVERT_YELLOW1; hcola2 = CONVERT_YELLOW2; hcolb1 = CONVERT_ORANGE1; hcolb2 = CONVERT_ORANGE2; adjusted_level = arena.level; } if (grand(5) + 1 < adjusted_level) col1 = hcola1; if (grand(5) + 1 < adjusted_level) col2 = hcola2; if (grand(10) + 2 < adjusted_level) col1 = hcolb1; if (grand(10) + 2 < adjusted_level) col2 = hcolb2; bcol1 = col1; if (grand(5) + 1 < adjusted_level) bcol1 = hcola1; if (grand(10) + 2 < adjusted_level) bcol1 = hcolb1; bcol2 = col2; if (grand(5) + 1 < adjusted_level) bcol2 = hcola2; if (grand(10) + 2 < adjusted_level) bcol2 = hcolb2; if (grand(3) == 0) { switch(col1) { case CONVERT_GREEN1: bcol1 = CONVERT_GREEN1; break; case CONVERT_YELLOW1: bcol1 = CONVERT_YELLOW1; break; case CONVERT_ORANGE1: bcol1 = CONVERT_ORANGE1; break; case CONVERT_RED1: bcol1 = CONVERT_RED1; break; case CONVERT_BLUE1: bcol1 = CONVERT_BLUE1; break; } } if (grand(50) == 0) { bcol1 = CONVERT_GREEN1 + grand(5) * 8; bcol2 = CONVERT_GREEN2 + grand(5) * 8; col1 = CONVERT_GREEN1 + grand(5) * 8; col2 = CONVERT_GREEN2 + grand(5) * 8; } if (arena.level == 1) { col1 = CONVERT_GREEN1; col2 = CONVERT_GREEN2; bcol1 = CONVERT_GREEN1; bcol2 = CONVERT_GREEN2; } /* if (arena.level == 1) { col1 = CONVERT_ORANGE1; col2 = CONVERT_ORANGE2; bcol = CONVERT_ORANGE1; } if (arena.level == 2) { col1 = CONVERT_RED1; col2 = CONVERT_RED2; bcol = CONVERT_RED1; } */ // tile_progress_update("making"); // int base_index = PRETILE_STRAIGHT_UD; // if (grand(3) == 0) // base_index = PRETILE_ZIG_UD; // tile_rle [MAZE_NOTHING] = make_tile(0, col1, col2, 0); // if (grand(3) == 0) // tile_rle [MAZE_NOTHING] = make_tile(PRETILE_BG_CHECK, -1, bcol, 0, 0); // else // tile_rle [MAZE_NOTHING] = make_tile(PRETILE_BG_DIAMOND + grand(5), -1, bcol, 0, 0); int back_tile = PRETILE_BG_CHECK; if (arena.level > 1) { switch(grand(5)) { case 0: back_tile = PRETILE_BG_CHECK; break; case 1: back_tile = PRETILE_BG_DIAMOND; break; case 2: back_tile = PRETILE_BG_MESH1; break; case 3: back_tile = PRETILE_BG_MESH2; break; case 4: back_tile = PRETILE_BG_GRID; break; } } if (arena.level > 5 && grand(2) == 0) { switch(grand(8)) { case 0: back_tile = PRETILE_BG_FLOWERS; break; case 1: back_tile = PRETILE_BG_SQUARES; break; case 2: back_tile = PRETILE_BG_DIAMOND2; break; case 3: back_tile = PRETILE_BG_CROSS; break; case 4: back_tile = PRETILE_BG_SQUARES2; break; case 5: back_tile = PRETILE_BG_CIRCLES; break; case 6: back_tile = PRETILE_BG_THING; break; case 7: back_tile = PRETILE_BG_PATTERN; break; } } tile_rle [MAZE_NOTHING] = make_tile(back_tile, -1, bcol1, bcol2, 0); int tmaze; if (arena.level <= 4) { switch(grand(4)) { case 0: tmaze = MAZE_STRAIGHT; break; case 1: tmaze = MAZE_ZIGZAG; break; case 2: tmaze = MAZE_CIRCLES; break; case 3: tmaze = MAZE_TUBES; break; } } else { tmaze = grand(NO_MAZES); } // screenshot //tmaze = MAZE_RINGS; tile_rle [MAZE_UD] = make_m_tile(PRETILE_M_UD, tmaze, -1, col1, col2, 0); tile_rle [MAZE_UL] = make_m_tile(PRETILE_M_UR, tmaze, -1, col1, col2, ROTATE_270); tile_rle [MAZE_UR] = make_m_tile(PRETILE_M_UR, tmaze, -1, col1, col2, 0); tile_rle [MAZE_DL] = make_m_tile(PRETILE_M_UR, tmaze, -1, col1, col2, ROTATE_180); tile_rle [MAZE_DR] = make_m_tile(PRETILE_M_UR, tmaze, -1, col1, col2, ROTATE_90); tile_rle [MAZE_LR] = make_m_tile(PRETILE_M_LR, tmaze, -1, col1, col2, 0); // index + 1 is redundant. Too late... tile_rle [MAZE_ULR] = make_m_tile(PRETILE_M_ULR, tmaze, -1, col1, col2, 0); tile_rle [MAZE_DLR] = make_m_tile(PRETILE_M_ULR, tmaze, -1, col1, col2, ROTATE_180); tile_rle [MAZE_UDL] = make_m_tile(PRETILE_M_ULR, tmaze, -1, col1, col2, ROTATE_270); tile_rle [MAZE_UDR] = make_m_tile(PRETILE_M_ULR, tmaze, -1, col1, col2, ROTATE_90); tile_rle [MAZE_UDLR] = make_m_tile(PRETILE_M_UDLR, tmaze, -1, col1, col2, 0); tile_rle [MAZE_U] = make_m_tile(PRETILE_M_U, tmaze, -1, col1, col2, 0); tile_rle [MAZE_D] = make_m_tile(PRETILE_M_U, tmaze, -1, col1, col2, ROTATE_180); tile_rle [MAZE_L] = make_m_tile(PRETILE_M_U, tmaze, -1, col1, col2, ROTATE_270); tile_rle [MAZE_R] = make_m_tile(PRETILE_M_U, tmaze, -1, col1, col2, ROTATE_90); int outer_base = PRETILE_OUTER1_D; int base_choose = grand(3); if (arena.level > 5) base_choose = grand(6); if (grand(2) == 0 && arena.level > 1) { switch(base_choose) { case 0: outer_base = PRETILE_OUTER1_D; break; case 1: outer_base = PRETILE_OUTER2_D; break; case 2: outer_base = PRETILE_OUTER3_D; break; case 3: outer_base = PRETILE_OUTER4_D; break; case 4: outer_base = PRETILE_OUTER5_D; break; case 5: outer_base = PRETILE_OUTER6_D; break; } } // col1 = CONVERT_RED1; // col2 = CONVERT_BLUE2; // outer_base = PRETILE_OUTER5_D; tile_rle [MAZE_OUTER_U] = make_tile(outer_base, -1, col1, col2, ROTATE_180); tile_rle [MAZE_OUTER_D] = make_tile(outer_base, -1, col1, col2, 0); tile_rle [MAZE_OUTER_L] = make_tile(outer_base, -1, col1, col2, ROTATE_90); tile_rle [MAZE_OUTER_R] = make_tile(outer_base, -1, col1, col2, ROTATE_270); tile_rle [MAZE_OUTER_UR] = make_tile(outer_base + 1, -1, col1, col2, ROTATE_270); tile_rle [MAZE_OUTER_DR] = make_tile(outer_base + 1, -1, col1, col2, 0); tile_rle [MAZE_OUTER_UL] = make_tile(outer_base + 1, -1, col1, col2, ROTATE_180); tile_rle [MAZE_OUTER_DL] = make_tile(outer_base + 1, -1, col1, col2, ROTATE_90); tile_rle [MAZE_OUTER2] = make_tile(outer_base + 2, -1, col1, col2, 0); arena.colour3 = col1 + 1; tile_rle [MAZE_REMOTE_NODE] = make_m_tile(PRETILE_M_NODE, tmaze, -1, col1, col2, 0); // col1 = CONVERT_GREEN1 + grand(5) * 8; // col2 = CONVERT_GREEN2 + grand(5) * 8; int col3 = col1; //CONVERT_GREEN1 + grand(5) * 8; int col4 = CONVERT_GREEN2 + grand(5) * 8; int eye_base = PRETILE_EYE4_CLOSED; // if (arena.level == 2) // eye_base = PRETILE_EYE3_CLOSED; switch(grand(4)) { case 0: eye_base = PRETILE_EYE1_CLOSED; break; case 1: eye_base = PRETILE_EYE2_CLOSED; break; case 2: eye_base = PRETILE_EYE3_CLOSED; break; case 3: eye_base = PRETILE_EYE4_CLOSED; break; } // screenshot //eye_base = PRETILE_EYE3_CLOSED; tile_rle [MAZE_EYE_CLOSED_NODE] = make_complex_tile(eye_base, PRETILE_M_EYE_UDLR, tmaze, col1, col2, col3, col4, 0); tile_rle [MAZE_EYE_OPEN_NODE] = make_complex_tile(eye_base + 1, PRETILE_M_EYE_UDLR, tmaze, col1, col2, col3, col4, 0); tile_rle [MAZE_EYE_CLOSED_REMOTE_NODE] = make_complex_tile(eye_base, PRETILE_M_NODE, tmaze, col1, col2, col3, col4, 0); tile_rle [MAZE_EYE_OPEN_REMOTE_NODE] = make_complex_tile(eye_base + 1, PRETILE_M_NODE, tmaze, col1, col2, col3, col4, 0); int i, j, k; // tile_progress_update("wiping"); // First we wipe the whole map: for (i = 0; i < x; i ++) { for (j = 0; j < y; j ++) { // putpixel(level_bmp, i, j, i % 10); //grand(MAZE_UDLR)); // putpixel(level_bmp, i, j, grand(MAZE_OUTER)); putpixel(level_bmp, i, j, 0); //MAZE_NOTHING); } } // tile_progress_update("drawing"); draw_maze_1(level_bmp, x, y); put_eyes_in_maze(level_bmp, x, y); // tile_progress_update("fixing"); for (i = 0; i < x; i ++) { for (j = 0; j < y; j ++) { if (i <= 1 || j <= 1 || i >= x - 2 || j >= y - 2) putpixel(level_bmp, i, j, MAZE_OUTER2); } } int connections, putty; // then we fix the map so that the paths join up properly: for (i = 0; i < x; i ++) { for (j = 0; j < y; j ++) { if (getpixel(level_bmp, i, j) == 0) continue; if (getpixel(level_bmp, i, j) == MAZE_OUTER2) { if (i == 0 || j == 0 || i == x - 1 || j == y - 1) { putpixel(level_bmp, i, j, MAZE_OUTER2); continue; } if (i == 1) putpixel(level_bmp, i, j, MAZE_OUTER_L); if (j == 1) putpixel(level_bmp, i, j, MAZE_OUTER_U); if (i == x - 2) putpixel(level_bmp, i, j, MAZE_OUTER_R); if (j == y - 2) putpixel(level_bmp, i, j, MAZE_OUTER_D); if (i == 1 && j == 1) putpixel(level_bmp, i, j, MAZE_OUTER_UL); if (i == 1 && j == y - 2) putpixel(level_bmp, i, j, MAZE_OUTER_DL); if (i == x - 2 && j == y - 2) putpixel(level_bmp, i, j, MAZE_OUTER_DR); if (i == x - 2 && j == 1) putpixel(level_bmp, i, j, MAZE_OUTER_UR); // putpixel(level_bmp, i, j, MAZE_OUTER_U); continue; } connections = 0; putty = 0; if (getpixel(level_bmp, i - 1, j) > 0)// && getpixel(level_bmp, i - 1, j) != MAZE_OUTER2) connections += CONNECT_L; if (getpixel(level_bmp, i + 1, j) > 0)// && getpixel(level_bmp, i + 1, j) != MAZE_OUTER2) connections += CONNECT_R; if (getpixel(level_bmp, i, j - 1) > 0)// && getpixel(level_bmp, i, j - 1) != MAZE_OUTER2) connections += CONNECT_U; if (getpixel(level_bmp, i, j + 1) > 0)// && getpixel(level_bmp, i, j + 1) != MAZE_OUTER2) connections += CONNECT_D; switch(connections) { case 1: putty = MAZE_U; break; case 2: putty = MAZE_D; break; case 4: putty = MAZE_L; break; case 8: putty = MAZE_R; break; case 3: putty = MAZE_UD; break; case 12: putty = MAZE_LR; break; case 5: putty = MAZE_UL; break; case 6: putty = MAZE_DL; break; case 9: putty = MAZE_UR; break; case 10: putty = MAZE_DR; break; case 13: putty = MAZE_ULR; break; case 14: putty = MAZE_DLR; break; case 7: putty = MAZE_UDL; break; case 11: putty = MAZE_UDR; break; case 15: putty = MAZE_UDLR; for (k = 0; k < arena.eyes_on_level; k ++) { // for now, arena.eye_x is in GRID_WIDTH, not GRAIN. It gets changed to GRAIN later. if (arena.eye_x [k] == i && arena.eye_y [k] == j) { putty = MAZE_EYE_CLOSED_NODE; // assumes all eyes are on udlr break; } } break; } putpixel(level_bmp, i, j, putty); } } // place_eyes(level_bmp, x, y); // tile_progress_update("fixed"); // now let's change arena.eye_x from GRID_WIDTH to GRAIN: for (k = 0; k < arena.eyes_on_level; k ++) { arena.eye_x [k] = (arena.eye_x [k] - 2) * GRID_WIDTH * GRAIN + (GRID_WIDTH / 2.5) * GRAIN; arena.eye_y [k] = (arena.eye_y [k] - 2) * GRID_WIDTH * GRAIN + (GRID_WIDTH / 2.5) * GRAIN; } } void place_eyes(BITMAP *level_bmp, int x, int y) { /* int i, j, k = 0; int node_x [100]; int node_y [100]; for (i = 0; i < x; i ++) { for (j = 0; j < y; j ++) { if (k >= 100) break; if (getpixel(level_bmp, i, j) == MAZE_UDLR) { node_x [k] = i; node_y [k] = j; k++; // putpixel(level_bmp, i, j, MAZE_EYE_CLOSED_NODE); } } } // int no_eyes = 4; for (i = 0; i < MAX_EYES; i ++) { arena.eye_x [i] = 0; arena.eye_y [i] = 0; } arena.eyes_on_level = 0; next_eye = 0; put_eye(2, 2, x / 2, y / 2, k, node_x, node_y); put_eye(x - x / 2, 2, x - 2, y / 2, k, node_x, node_y); put_eye(x - x / 2, y - y / 2, x - 2, y - 2, k, node_x, node_y); put_eye(2, y - y / 2, x / 2, y - 2, k, node_x, node_y); arena.eye_colour1 = 0; // pupil - absolute black. won't be overwritten by transparencies arena.eye_colour2 = TRANS_YELLOW; arena.eye_colour3 = TRANS_LRED; if (grand(3) == 0) { arena.eye_colour2 = TRANS_ORANGE; arena.eye_colour3 = TRANS_DRED; } if (arena.level > 5 && grand(3) != 0) { arena.eye_colour2 = TRANS_WHITE; arena.eye_colour3 = TRANS_LBLUE; if (grand(5) == 0) arena.eye_colour3 = TRANS_PURPLE; if (grand(5) == 0) arena.eye_colour3 = TRANS_DBLUE; } if (arena.level > 10 && grand(3) != 0) { arena.eye_colour2 = TRANS_YELLOW; arena.eye_colour3 = TRANS_LGREEN; if (grand(3) == 0) { arena.eye_colour2 = TRANS_LGREEN; arena.eye_colour3 = TRANS_DGREEN; } } // not the usual order of colours. */ } void put_eye(int x1, int y1, int x2, int y2, int k, int node_x [100], int node_y [100]) { int i, j; for (i = 0; i < k; i ++) { if (node_x [i] > x1 && node_x [i] < x2 && node_y [i] > y1 && node_y [i] < y2) { put_eye2(node_x [i], node_y [i]); return; } } // okay, we couldn't find a node in that area. We'll have to make one: int timeout = 0; do { i = x1 + grand(x2 - x1 + 1); j = y1 + grand(y2 - y1 + 1); if (eye_okay(i, j)) { put_eye2(i, j); return; } timeout ++; } while(timeout < 10000); // that didn't work, so let's find any suitable position: for (i = x1; i < x2; i ++) { for (j = y1; j < y2; j ++) { if (eye_okay(i, j)) { put_eye2(i, j); return; } } } } void put_eye2(int x, int y) { int placed = 0; if (getpixel(level_bmp, x, y) == MAZE_UDLR) { putpixel(level_bmp, x, y, MAZE_EYE_CLOSED_NODE); placed = 1; } if (getpixel(level_bmp, x, y) == 0) { putpixel(level_bmp, x, y, MAZE_EYE_CLOSED_REMOTE_NODE); placed = 1; } if (placed == 1) { // arena.eye_x [next_eye] = x * GRID_WIDTH * GRAIN; // arena.eye_y [next_eye] = y * GRID_WIDTH * GRAIN; arena.eye_x [next_eye] = (x - 2) * GRID_WIDTH * GRAIN + (GRID_WIDTH / 2.5) * GRAIN; arena.eye_y [next_eye] = (y - 2) * GRID_WIDTH * GRAIN + (GRID_WIDTH / 2.5) * GRAIN; arena.eyes_on_level ++; next_eye ++; } } int eye_okay(int i, int j) { if (getpixel(level_bmp, i, j) != 0) return 0; if (getpixel(level_bmp, i + 1, j) == 0 && getpixel(level_bmp, i - 1, j) == 0 && getpixel(level_bmp, i, j + 1) == 0 && getpixel(level_bmp, i, j - 1) == 0) return 1; return 0; } void open_eyes(void) { int i,j, opened; int passing_colours [5]; int x = arena.max_x / 50000 + 5; int y = arena.max_y / 50000 + 5; for (i = 0; i < x; i ++) { for (j = 0; j < y; j ++) { opened = 0; if (getpixel(level_bmp, i, j) == MAZE_EYE_CLOSED_NODE) { putpixel(level_bmp, i, j, MAZE_EYE_OPEN_NODE); opened = 1; } if (getpixel(level_bmp, i, j) == MAZE_EYE_CLOSED_REMOTE_NODE) { putpixel(level_bmp, i, j, MAZE_EYE_OPEN_REMOTE_NODE); opened = 1; } if (opened == 1) { passing_colours [0] = TRANS_DBLUE; passing_colours [1] = TRANS_LBLUE; passing_colours [2] = TRANS_WHITE; place_explosion((i - 2) * GRID_WIDTH * GRAIN + (GRID_WIDTH / 2.5) * GRAIN + grand(3001) - 1500, (j - 2) * GRID_WIDTH * GRAIN + (GRID_WIDTH / 2.5) * GRAIN + grand(3001) - 1500, 0, 0, 700 + grand(300), passing_colours); passing_colours [0] = TRANS_LBLUE; passing_colours [1] = COLOUR_BLUE8; place_line_burst((i - 2) * GRID_WIDTH * GRAIN + (GRID_WIDTH / 2.5) * GRAIN, (j - 2) * GRID_WIDTH * GRAIN + (GRID_WIDTH / 2.5) * GRAIN, 0, 0, 7 + grand(4), 15, 15, 2500, 300, passing_colours); } } } } void draw_maze_1(BITMAP *level_bmp, int x, int y) { // now we draw various paths onto the map with value 1: int m, n, i, j; int path_length = 5 + grand(30); int no_paths = 3 + grand(4); for (m = 0; m < no_paths; m ++) { i = grand(x - 2) + 2; j = grand(y - 2) + 2; for (n = 0; n < path_length; n ++) { putpixel(level_bmp, i, j, 1); if (grand(2) == 0) { if (grand(2) == 0) i ++; else i --; } else { if (grand(2) == 0) j ++; else j --; } if (i < 2 || i > x - 2) i = grand(x - 2) + 2; if (j < 2 || j > y - 2) j = grand(y - 2) + 2; } } } void draw_maze_2(BITMAP *level_bmp, int x, int y) { // now we draw various paths onto the map with value 1: int m;//, n, i, j; // int path_length = 5 + grand(30); int no_paths = 8 + grand(4); for (m = 0; m < no_paths; m ++) { if (grand(2) == 0) hline(level_bmp, grand(x - 2) + 2, grand(y - 2) + 2, grand(x - 2) + 2, 1); else vline(level_bmp, grand(x - 2) + 2, grand(y - 2) + 2, grand(y - 2) + 2, 1); } } void put_eyes_in_maze(BITMAP *level_bmp, int x, int y) { int i; for (i = 0; i < MAX_EYES; i ++) { arena.eye_x [i] = 0; arena.eye_y [i] = 0; } arena.eyes_on_level = 4; arena.eye_colour1 = 0; // pupil - absolute black. won't be overwritten by transparencies arena.eye_colour2 = TRANS_YELLOW; arena.eye_colour3 = TRANS_LRED; if (grand(3) == 0) { arena.eye_colour2 = TRANS_ORANGE; arena.eye_colour3 = TRANS_DRED; } if (arena.level > 5 && grand(3) != 0) { arena.eye_colour2 = TRANS_WHITE; arena.eye_colour3 = TRANS_LBLUE; if (grand(5) == 0) arena.eye_colour3 = TRANS_PURPLE; if (grand(5) == 0) arena.eye_colour3 = TRANS_DBLUE; } if (arena.level > 10 && grand(3) != 0) { arena.eye_colour2 = TRANS_YELLOW; arena.eye_colour3 = TRANS_LGREEN; if (grand(3) == 0) { arena.eye_colour2 = TRANS_LGREEN; arena.eye_colour3 = TRANS_DGREEN; } } // not the usual order of colours. find_place_for_eye(3, 3, x / 2, y / 2, 0); find_place_for_eye(x / 2, y / 2, x - 3, y - 3, 1); find_place_for_eye(3, y / 2, x / 2, y - 3, 2); find_place_for_eye(x / 2, 3, x - 3, y / 2, 3); if (grand(2) == 0) { find_place_for_eye(3, 3, x / 2, y / 2, 3); find_place_for_eye(x / 2, y / 2, x - 3, y - 3, 2); find_place_for_eye(3, y / 2, x / 2, y - 3, 1); find_place_for_eye(x / 2, 3, x - 3, y / 2, 0); } for (i = 0; i < arena.eyes_on_level; i ++) { putpixel(level_bmp, arena.eye_x [i], arena.eye_y [i], 1); /* draw_eye_path(level_bmp, x, y, arena.eye_x [i] + 1, arena.eye_y [i], 1, 0, 1); // same but draw = 1 draw_eye_path(level_bmp, x, y, arena.eye_x [i] - 1, arena.eye_y [i], -1, 0, 1); // same but draw = 1 draw_eye_path(level_bmp, x, y, arena.eye_x [i], arena.eye_y [i] + 1, 0, 1, 1); // same but draw = 1 draw_eye_path(level_bmp, x, y, arena.eye_x [i], arena.eye_y [i] - 1, 0, -1, 1); // same but draw = 1*/ putpixel(level_bmp, arena.eye_x [i] + 1, arena.eye_y [i], 1); putpixel(level_bmp, arena.eye_x [i] - 1, arena.eye_y [i], 1); putpixel(level_bmp, arena.eye_x [i], arena.eye_y [i] + 1, 1); putpixel(level_bmp, arena.eye_x [i], arena.eye_y [i] - 1, 1); if (draw_eye_path(level_bmp, x, y, arena.eye_x [i] + 1, arena.eye_y [i], 1, 0, 0)) draw_eye_path(level_bmp, x, y, arena.eye_x [i] + 1, arena.eye_y [i], 1, 0, 1); // same but draw = 1 else putpixel(level_bmp, arena.eye_x [i] + 1, arena.eye_y [i], 1); if (draw_eye_path(level_bmp, x, y, arena.eye_x [i] - 1, arena.eye_y [i], -1, 0, 0)) draw_eye_path(level_bmp, x, y, arena.eye_x [i] - 1, arena.eye_y [i], -1, 0, 1); // same but draw = 1 else putpixel(level_bmp, arena.eye_x [i] - 1, arena.eye_y [i], 1); if (draw_eye_path(level_bmp, x, y, arena.eye_x [i], arena.eye_y [i] + 1, 0, 1, 0)) draw_eye_path(level_bmp, x, y, arena.eye_x [i], arena.eye_y [i] + 1, 0, 1, 1); // same but draw = 1 else putpixel(level_bmp, arena.eye_x [i], arena.eye_y [i] + 1, 1); if (draw_eye_path(level_bmp, x, y, arena.eye_x [i], arena.eye_y [i] - 1, 0, -1, 0)) draw_eye_path(level_bmp, x, y, arena.eye_x [i], arena.eye_y [i] - 1, 0, -1, 1); // same but draw = 1 else putpixel(level_bmp, arena.eye_x [i], arena.eye_y [i] - 1, 1); } } void find_place_for_eye(int x_min, int y_min, int x_max, int y_max, int eye) { // _min values should be at least 1 arena.eye_x [eye] = x_min + grand(x_max - x_min); arena.eye_y [eye] = y_min + grand(y_max - y_min); // arena.eye_x [eye] = x_min + 3 + grand(x_max - x_min - 6); // arena.eye_y [eye] = y_min + 3 + grand(y_max - y_min - 6); // arena.eye_x [eye] = x_max - 1; // arena.eye_y [eye] = y_max - 1; } // if draw is zero, it doesn't change anything. // returns zero if it hits the wall before it finds another path to join. int draw_eye_path(BITMAP *level_bmp, int x, int y, int ex, int ey, int xd, int yd, int draw) { int i, j; while (TRUE) { for (i = -1; i < 2; i ++) { for (j = -1; j < 2; j ++) { if (i == 0 && j == 0) continue; // no centre if (i != 0 && j != 0) continue; // no diagonals if (i == xd * -1 && j == yd * -1) continue; // so not the one we just drew if (getpixel(level_bmp, ex + i, ey + j) != 0) { if (draw) putpixel(level_bmp, ex, ey, 1); return 1; } } } ex += xd; ey += yd; if (ex <= 1 || ex >= x - 2 || ey <= 1 || ey >= y - 2) return 0; // hit the wall! if (draw) putpixel(level_bmp, ex, ey, 1); } } RLE_SPRITE *make_tile(int index, int index2, int colourise1, int colourise2, int rotation) { BITMAP *temp_bmp = make_bmp(50, 50, "make_tile (temp_bmp)"); clear_bitmap(temp_bmp); if (index2 != -1) { if (index2 >= NO_PRETILE_BMPS || pretile_bmp [index2] == NULL) { do { textprintf_centre_ex(screen, small_font, 200, 200, COLOUR_WHITE, COLOUR_GREY1, "Pretile error index2 %i: X to continue", index2); } while (key [KEY_X] == 0); } else rotate_sprite(temp_bmp, pretile_bmp [index2], 0, 0, itofix(rotation)); } if (index >= NO_PRETILE_BMPS || pretile_bmp [index] == NULL) { do { textprintf_centre_ex(screen, small_font, 200, 200, COLOUR_WHITE, COLOUR_GREY1, "Pretile error index %i: X to continue", index); } while (key [KEY_X] == 0); } else rotate_sprite(temp_bmp, pretile_bmp [index], 0, 0, itofix(rotation)); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (colourise1 != 0) rectfill(temp_bmp, 0, 0, 50, 50, colourise1); if (colourise2 != 0) rectfill(temp_bmp, 0, 0, 50, 50, colourise2); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); RLE_SPRITE *return_sprite = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); return return_sprite; } RLE_SPRITE *make_m_tile(int index, int tmaze, int index2, int colourise1, int colourise2, int rotation) { BITMAP *temp_bmp = make_bmp(50, 50, "make_m_tile (temp_bmp)"); clear_bitmap(temp_bmp); if (index2 != -1) { if (index2 >= NO_PRETILE_M_BMPS || pretile_m_bmp [tmaze] [index2] == NULL) { do { textprintf_centre_ex(screen, small_font, 200, 200, COLOUR_WHITE, COLOUR_GREY1, "Pretile m error index2 %i, %i: Space to continue", index2, tmaze); } while (key [KEY_SPACE] == 0); } else rotate_sprite(temp_bmp, pretile_m_bmp [tmaze] [index2], 0, 0, itofix(rotation)); } if (index >= NO_PRETILE_M_BMPS || pretile_m_bmp [tmaze] [index] == NULL) { do { textprintf_centre_ex(screen, small_font, 200, 200, COLOUR_WHITE, COLOUR_GREY1, "Pretile m error index %i, %i: Space to continue", index, tmaze); } while (key [KEY_SPACE] == 0); } else rotate_sprite(temp_bmp, pretile_m_bmp [tmaze] [index], 0, 0, itofix(rotation)); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (colourise1 != 0) rectfill(temp_bmp, 0, 0, 50, 50, colourise1); if (colourise2 != 0) rectfill(temp_bmp, 0, 0, 50, 50, colourise2); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); RLE_SPRITE *return_sprite = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); return return_sprite; } // index must be in pretile array; index2 must be in pretile_m array referred to by tmaze RLE_SPRITE *make_complex_tile(int index, int index2, int tmaze, int colourise1, int colourise2, int colourise2_1, int colourise2_2, int rotation) { BITMAP *temp_bmp = make_bmp(50, 50, "make_complex_tile (temp_bmp)"); clear_bitmap(temp_bmp); BITMAP *temp_bmp2 = make_bmp(50, 50, "make_complex_tile (temp_bmp2)"); clear_bitmap(temp_bmp2); if (index2 != -1) { if (index2 >= NO_PRETILE_M_BMPS || pretile_m_bmp [tmaze] [index2] == NULL) { do { textprintf_centre_ex(screen, small_font, 200, 200, COLOUR_WHITE, COLOUR_GREY1, "make_complex_tile pretile m error index2 %i: Space to continue", index2); } while (key [KEY_SPACE] == 0); } else rotate_sprite(temp_bmp, pretile_m_bmp [tmaze] [index2], 0, 0, itofix(rotation)); } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (colourise1 != 0) rectfill(temp_bmp, 0, 0, 50, 50, colourise1); if (colourise2 != 0) rectfill(temp_bmp, 0, 0, 50, 50, colourise2); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); if (index >= NO_PRETILE_BMPS || pretile_bmp [index] == NULL) { do { textprintf_centre_ex(screen, small_font, 200, 200, COLOUR_WHITE, COLOUR_GREY1, "make_complex_tile pretile error index %i: Space to continue", index); } while (key [KEY_SPACE] == 0); } else rotate_sprite(temp_bmp2, pretile_bmp [index], 0, 0, itofix(rotation)); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (colourise1 != 0) rectfill(temp_bmp2, 0, 0, 50, 50, colourise2_1); if (colourise2 != 0) rectfill(temp_bmp2, 0, 0, 50, 50, colourise2_2); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_sprite(temp_bmp, temp_bmp2, 0, 0); // circle(temp_bmp2, 25, 25, 5, COLOUR_GREEN6); RLE_SPRITE *return_sprite = get_rle_sprite(temp_bmp); destroy_bitmap(temp_bmp); destroy_bitmap(temp_bmp2); return return_sprite; } BITMAP *make_bmp(int x, int y, const char errtxt []) { BITMAP *bmp_made = create_bitmap(x, y); if (bmp_made == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Bitmap creation error \n%s\n\n\r%s", allegro_error, errtxt); exit(1); } return bmp_made; } void tile_progress_update(const char progtxt []) { static int ypos = 10, xpos = 10; textprintf_centre_ex(screen, small_font, 320, ypos, COLOUR_GREEN8, -1, progtxt); ypos += 10; if (ypos > 470) { if (xpos > 620) { xpos = 10; ypos = 10; } ypos = 10; xpos += 30; } } void make_tile_background_rle(void) { if (tile_background != NULL) destroy_rle_sprite(tile_background); // BITMAP *tile_back_temp = make_bmp(scr_x + GRID_WIDTH, scr_y + GRID_WIDTH, "make_tile_background_rle"); BITMAP *tile_back_temp = make_bmp(scr_x + GRID_WIDTH, scr_y + GRID_WIDTH, "make_tile_background_rle"); int i, j, xw; xw = (scr_x + GRID_WIDTH) / GRID_WIDTH; if (game.users == 2) { xw /= 2; xw ++; // even in 640x480 } if (options.resolution != GMODE_800_600) xw ++; for (i = 0; i < xw; i ++) { for (j = 0; j < (scr_y + GRID_WIDTH) / GRID_WIDTH + 1; j ++) { draw_rle_sprite(tile_back_temp, tile_rle [0], i * GRID_WIDTH, j * GRID_WIDTH); // circlefill(tile_back_temp, i * GRID_WIDTH, j * GRID_WIDTH, 7, COLOUR_WHITE); } } tile_background = get_rle_sprite(tile_back_temp); destroy_bitmap(tile_back_temp); } overgod-1.0/tile.h0000644000175000001440000000012610035510402013122 0ustar michiusersvoid init_tiles(void); void make_tile_map(int x, int y); void open_eyes(void); overgod-1.0/wavs/0000755000175000001440000000000010311022412012771 5ustar michiusersovergod-1.0/wavs/alarm.wav0000644000175000001440000013013610310245566014630 0ustar michiusersRIFFVWAVEfmt DXdata2+9MO`G'ETc ;Qp<Zv!Fg$IqAlJw7e+ _ 1 f @ x # ^ I <v3p1t:J\x 6atq1tO&Yjz #Caz2So3Xy(Hp*Ls7^&MxQqIw$X<d%R{;u9l(\>g)U Gr ; e  ; \  G _ k  ?  S  ( k[$p'u<Pc'qG a'}@qJDn7eQw\1mjVB?.  &-@LzNx&1àiq9ޞHg'\Ѣ5y֣>[,dڧK&!8˰Y籀=贆aMKVr,YÇOƜh1ʍg9έςH% ӳԘuY4 ۟܃w]=iH1 Z3'ybRC"umXJN>   f e$5$? .1_fcSY7%qk9+~i B!!>"""#$_$$K%%&&'d''X((())*s**Y++2,, -o--T..%///^00C112y22I33!444X55%666Z77%888V99:x:!İ3"گݳzB>li,@j*tEyPvG m:b|Cdt2FO divt%{ykW U@1sYT8[1  b 8 X  0 n ? i $m0VHo$JAcVM(+*&5!T 6 9 A t  5 U 2oYe/yBi0q? m?$ |[7'kpbJ坥' לemKg$BˡP̢ԢCk%K"cå LHL[© ~QjݭI=&-$8Cʴ^{ 9˸c9ڻ~ǽnl{*ÊQưw6ȫv9˺~O"ϡyW Ԥq@٣\*ݘqB pQmU, ^QL$woR;9' t k Y PFf!}(k($ mWRay*>v`B? !t!!W""B##$$ %u%%U&&<''(()j))Z***++ ,},,d--.../y//p00,112z22]33"445\55I66777E889|9 X?5Lܻ2)r: hz9$c@{Z'a;g9k+^?b{AV^ s255B<581~%z \ O C : ~ # n H t U(e4^3b4`FC}$^I`Rz#X,X.*%S>')SI*Vpk;K`$ y @  a ' `  e  [  p7 k8rH#xF/iꔪ>|΢ 0֡.ΣO {ᥧȥ!$/},LrJǨ>xƩ I,s«gdĭ$y׮AgٰFj߳aܴHȵP̶L̷P۸hv 'Z󽁾 ZB‡.Đ2ƞFȮk ˒KΆFћa4ԎUגWڦk,ݾޏ[*gAwL'tUI(}W<>"lma=52  {t%,,(c"Mx/e- !!"""c##D$$$%%&z&&s''?((F))***k++D,,0--.u..W//G00111Z22O33444^55?66777W8e߇½H14VߖE2M mBV lT.xL:h:!h3{M!U)\T8d A_q)?DVbha V  X W ! d  W K+s[Hk =b&Q$k5R_?o&X>*Kr)'N02R/)!TXh`$>Ob};Ll._NI O  h 3 ` ) i{֟ r8ZOi:#Ū" uѩͩ/DA]}Ǫߪ /Hhګ Hrʬ%%>&&''(t((U))C**++,,,U--H..// 0u00]11:22334o44D5566ݾ߁j7+v!ׯQ["ݙ޼& ~]z`ySH@~qP=q_3[>~Z+ jC tL@s2_?g0J_ j " p & ' | H WQD ??{:oH{2jK|![)Q#W(P];o;h1r1M; i "+N463J.&r l10N1'FaKe&Q5t1h:TI:踯ʫUpޮ"RޮӮ"'3FXsկ(Sl3\ȱ"^ȲLNմh UZfø}MVɼB" ‘ç1ĸKnǒ-]ɡ:˹JΣDsѻQҟ=ԕ;֜Kإbx7ݰk*m-LsI j9T'nP@jLE/  {bXM.!+#-4351<+# ##"#%$%%o&&.'' (u()))`**>++6,, -~--d..W//$00'11122>33>445"=QͿ$Oܥh\sPt0KJ[T:@)&{lWK(!p^=&n_1~a2O*_0g.g)T =b' = X  n  d ;~ W$f<u>r G}>7/m!V8bFm F g M%\w#?v K m !\!!!!"G"p""""/#Z####$4$d$$'.28:72g*""$Z#!""o!R!{! W G }@BVyJaAWžyɭҴײ&[mD ׵4lw ڴ~rWI=+(%  $,0;P_ayԴ)Lpյ.X~Ay(c%e>޺.xʻ&y˼'AkԿ4YIú3ı-ť)Ʋ4Dz:Ȼ1ɨ'ʩ(˥'̳4͵G]τѠ8f ԩ8Յ)׿p#ټ_k(|4ߧSTa#}6mG_B&U/q]I$ m M 8 -  fXcR3% !'n18}95/($'0(1''&))?)$***b++8,,D--../s//R00911"2233|ѽ݆?2aԾc۠k0zlV= ,  sufZS?4' }eN:!`I&O5vX&hJ}TP$H  { 8  ^ ( x \="fA\8} Ic u+t8q)^WL1jJ3dFw I !J!!!!"Y""""#C#y### $I$e$$$%&%X%%%%#&D&`&&&&'i''''(3(h(((+3B< ?J<7.('&)'%&&%%%$$$ $#w#:#"p"B"!!N! 9!;̒ny0Լb7@8bmƻỤ^J< ƺlT8ǹ}w^XWA1=f֛3jکTە>ݔ=ߛHf D~3Cn>q7i=s8 gI< r]bO% {{_MO A!."$#$%t+g5== : 4t,)++r,d++Y-L-c-`...z/.0i00f1vz؟cS!w9TwN1qlDBއB 3.<)>/<52/%5 ~mcQM/.qXD#aM%uX-}J+d:  v ?  z 7 5+mV>sK)wNk<J`!Y(W"T JI9 d !B!!!!""k"""#E#e###$D$$$$!%X%x%%%&<&&&&'C'v''' (0(j((((')X))))*I*r****-+\++++,:,a,,,,;/6'@ZC@\;*3+*%-+-*++)))άХ |Nŀ=r)+1ļÊy.]He<pL3ǿwY<,ھxpda^QPUNL_bVfzux۾ 2X}ӿ?k"Z7u©.qíAĉt`ƷTǖ:Ȁ+y,ʈ8˝Y&͊j?ϳ#Еѐy~Ӂ Ո֤)׵Hcٛ&۷aݓ5sfy(H}"op2 d.l9lJ f?   ] A 2 ^VP. ' !"#p$N%[&[':()n/L9#AA^>p80=-@/00rs*SȞ@ҺؕӬrK5 sgB4 lC*lS (  j K  q sstg[ TE: h X9xa;xK+a2l=H M !P!!!!A"{""".#j### $X$$$$7%{%%%&[&&&'0'f'''(;(((()R)x))) *C****+U+u+++,*,h,,,,3-O-{---.@..../1/N////0M0f00001W3:DG+tmװۨǰ͉uήcґ| Tk͓q͵GC=.̽ˋmʮʀ7ɘNȀJ"ǔV-ƩƇc+ŐrU/ijģwQLAüâÝÜÒË}w~ylrÄÂzÅÚáêó-JSqĠĺ$FgŕJƁƴSǒ BrțXnݕ"޵X߆fO=CJi%OUo(K%k6`MlZ 1   fNB# b@;/ !!"#$%&'()z* ۤ.|kր@QH[ڹڄMyw ߊ $!:5UHOcTwbos~tsyorjhgYUP8A"+t_T4+}kM9  g H  \ y&4<DOMEA/y^E/{]9Z6x M !_!!!%"q"""2####;$}$$$D%m%%%2&a&&&'S''' (P((()B)h))) *M****++c+++,<,`,,, ->-}---.E.k.../;/{////60l0000'1]1{1112;2j222 303O333_8)g˛Qx<0Bԫ:eգԦ#'mpԶӂӊҳxѽr2гu?ϝdΈGͨn@̸{O9ˡ˄[/ ʞhKAɠɋ~W;3"ȷȨȮȤȓȜȨȝȑȢȨȪȯȶ*To|ɕɹ;cʐʦʷ3Sq˝Fm̖4mͫbΜ%nϪHЌ1ч%҇0ӖPԴՁT*חl[[M`l/W{J5ocit/K :}E[Qd7sO& u R@&`KI-z ! 7U$5<[MХ ٕgz\*`~s6ތm@ECWXfukw    vm]YC83}S Q *  ^ & y Dh{)AT gqxs p%mh`WD/cC !q!!!N"""#j###@$$$%O%%%&Z&&&('`'''((e(((%)h)))#*a***+S+++,A,,,,&-\--- .C...."/e///090^000 171t1112J2f222 373s333 474T44445Y5+ӾO ֏ ֞%ۏ@)a6`ۗZ-~يښV^٧ؔػ`ף2֘Oբv.Ըԉ=ӧm1ҫd)Ѩ{U(О|W)Ϙx`:ΫΛxhZ=* ͺͻ;ͼͺ33*767NZ]pΈΐΟ$=ZσϨ?kТ/jѝI҃Lӑ!kԾVլT֧h׼؄Aٲ{^0ܯ&ݔމ}!8XHwX:BKc6s k%|H?X; b L 7wcO)2Jv%6#D:FHL7З9 צظ݉[zܫTae}'R{+"AAC`Yqpv '#&012?3=716)0%#tqX W  U  ~ A g1Uq,G_t#4AMPQL?:- { $!l!!"Y"""@###+$m$$%Q%%%3&s&&'I'''((^(((:)s)) *F***+G+++,U,,, -X---.V.../@/q///"0h0001]1112=2h2223F3333"4c444525e555646j6667ݔ} ֹ[ՙY}L>܋'ޠHߒ:4ދkޱ~}޷} s5۫{?ڛSٯn5ءf"גQ-֜nD$՟ՁR$ԷԞԄ\B+ӾӠӑ{^VN5ҴҤҐ҆|pmh\XWW\]]fw{҂ҒҞҫ4FoәӮAwԤ2[Ռ9u־4׃Nؤ3ً(څ3ۋJܦ{@ޮ}lI78'85Rg>oB}up }*=dUZz=r@ a 4 yTes^n8nTG1;ȫ$ %1ݚ\JPzqKs!)FFKmbx~2#39FBQGVO]SY]MWTBT2:  | I   Q LwG.U$wD`q.C\iur#u, w (!w!!%"x""#n##$`$$$L%%%2&&&'o''(M((()))) *T***0+~++,P,,,-g---0.x...C>\;rA{Rk) 7#"yPoJ[$cxqռHt?3 $   " 1D0+EHDOg4(z( n,Z[kn %4-V@Z\Yjgf}rq{r}\9  N 1 r 5tFCzD x3c,E h.H_m,{A I!!!N"""R###O$$$L%%&H&&&C'''?(((-)z))*m***T+++6,,,-e---B.../d///60001T111 2]22243^33304f444+5s555&6x666 7f7778Y888969w99 lVIbؓ?z[߉4a 9=:<O"f1q ?IWcR Mu uk8PZ n&IuD ~9n= ߗuU#ފP"ݟuCܟ|e@ۥۋuaL6ںڻڼڲڼڿڼ #@CV|ەۧ4^yܜ!Yݐݷ+ZޕNߓ`@3?Ki- lU)% }  *Uj,b@t nmm&@m'?찬}ӟӧðFgͱʵҸ Bݻʾvy~g^`V=;M<$/?3#()',)(A<$,EE5@EIY`W]jJ.4K w%.L8bOgld{g;$ g F  \ AP/p1pJ }5nJi)Lt<S p -!!!I"""Z##$c$$%m%%'&w&&-'{'',(((.)))%*~**+v++,a,,-P---@...,/t//0_000A111$2i223@333#4_44475v556E6667R7778_8889[999:c:::!ć""ܑJ7ܽ`ޥߒ~GEj+wI{H+Y,g&z,z4{3m*dC"I)5/],p2EUo7l*a#hw+R%k%dO6eV1߽ߢߔw[QG.# 7?He~ߐߥA[-YPAP%u han;e.vcG743:@cp &\,b C@3碧Q$iaEEa{m9pHU& 0򷴸tkj? ĶűƤǜȕ{n~}`QXVOKEPTE:IZD;LQJV\UUiiiyws%%SY,+o&.87OLUehzsy;4` : # k P +y=0o5xd%]:oAq=c<X ~ B!!"c""$###?$$$S%%&g&&.''';(((J)))I***R++,U,,-W--.[...S///E00071112r223_333A4445r556J666%7r778H8889i999/:~:::E;;;"|Œ,;ݴf\ Q1$h(N Ch>`9zI)m>y? >i5 ` 8!!!a""###R$$ %t%%-&&&H''(e((1)))C***U++,_,,-k--'.z..////.000+111+222&3w33&4n445a556Q666D777'8m889V9997:z::;_;;;4<#T$Ժۂ@ۙݓNrK 6 6&pR4b:!^5^)|= QTY*j/|9~Gv7l,[ V `n+ynDqj w(I^~?ZK>C d)Og={MG"o^; ~i^\MJSN@IKCMgkj| 9U{ /VKy+]Y,h_p2ZeF) ؟Dإd1՝ɡt 696]M쫙?ȯOZ0ӷ~P6ȽiM*ĻťƎǂrV:40 Զխ֛לؤِڃ۞ܜyzߑw}7]Z y NU tK3a#o_-2YP , } c U '%xq=0 \5W=}V1xDS. \!!4"""h##($$%a%%!&&&S''(p((?)))h**+++8,,-P--.n..)///:000@111I223S33 4[44 5f556`666Y777K8889999-:}::;a;;JH<4;.zl UB)lZ;[3M4xSg(7CAD~@bC|3X P3,].|FBk<:N_;U t3X$Zcn-MKo5f<yr^:3, 5BEb*KhCoݻꤻIHٕ'PovL ]lעt]~1PS쬂)ڮvkfд{-SҹO ȼ`%࿯@õă_7Ȼɑc>μϖ~rK)! ضٟڊsjhL196gYWB,*knk#?D H [ / |rJY5~u`I! YG+}ZJn H!!,"""q##H$$6%%&|&&;''0(((e)).**+r++J,,---A..#///U00111@223m33C444`55666G778i889996:::O;; <#*x WJފP'Xr*?,vRq2H c(~1H]^]p rd_ XD=-saU.{\0}V5t Sx/N>i(i# F A e }   D |  3 K "!i ^ > - | ^  r-e&l59[t!LgQE ? c,K{U)nA,wQ8wYML6*    #':R[eߤeW:n<?71Aҡl٣Q2 !0ŬWޭp1˰l D賏>ܵ7跁3򹣺Lüy3󾪿j,z?Şf2ɟuK!Τϊi7Գզ֗mI7%߱sPD(nC?. lJAC)  #"J k/T#y_O&jQ; gd. "!~!!n""I##'$$%}%%P&&7'' (((X))-** +u++S,,---n...// 0s00G11222B33"4x44M55 6y66:77 8d881999M::;g;u"ū)԰ۙ݊~F&V 6"w]$N#zNj0Nj.;Sm&7035/$xkY P>~'lK5oR=y ["t F |  D r @ v 8 _  I v -gK5[{ &&~!6XCz  9 P ^ ]  m  8Vu+V3z2~BX zK G~T&g6/!figE@M:-7=28C=⣢G =ے*ۛ5Lpk؝{Q~ [#D2n$ZâPVpƥ'T,lUª=6%),E˰Pݱz%ôZ0ͷf]TUo([ĿĎV ǝZʼ~L"ϖnDԨՅW0ڷۘ܅tKpV8lL-{fR@&yw`KL4 (#"&#y"Vx!EO@qa<' \ S!!$"" #}##l$$I%%'&&'''H((9))***U++;,,$---W..;//0t00Y11223c33@445l55<667x77E88 9l99?:9!PYĈґچpyBQGv&vOg4r<zAo@e1U p7TZw.=QXR VVSE<)|$m Z;)h V # R 5 m  4 b = t <d=s(Z`~ 2u-Ai*m+$*L*%<q6A6D O  g ' y > L # w <  u:w8|2BtM T+[8yW?%2ئq)6|Ӥ"n;PաZ !|ڤlإ&nB,{ר+yթ8I{ܬE%wYӰTϱFƲOѳJѴer(F޹y@뼒&Ǿzly(ĕHƷt)ɯi ̸xAОp<Ի}U4خـIܴ~Q#k0c2oRJ(uga; keaH= D (   !'X*'H#o!__VD& q!!U""6##$$$q%%\&&B''(()g))c***++,{,,j--A..//0j00@11222`33A44555K66)778e8879@ LVÌѩٙۤ܃IZ7 _}GE eI#fB[&\9b6_&P m6Zm,DL ^ qk w!{uie` [ = ( ^ = / u Ev`;s2tAt8g1b Q~6m$T0V<x( /.*#[vJ^p -Of)C w , b  X  i 2 M t3\iGL9c2`j)wҧ)0'æ"a=lɨ*^ԩDƪCӫ]RNOj̰;iݲI!}njfr}Cڽh6b¯FÜ?ō8ǚFɰj̖OωI s*ԛRׁJڎg"ݪz>vNf=dIkW;eO8 k i R>M@ (!(+..,'. ;^~P--S ! "h""m##,$$1%% &&&Z''T((,))*{*+m++G,,)--...^//:00-111s22<33+445z55D66'777+1aМwړ ߵۊRpP) . $pZ>&~[AhD"g6 {FP%V}I t.] s0JWk-17FB @ D + b # ` XJC{%XCmP<g%c;o )]8lEMb J -\Nbk#,032c.q'*!  JQ!|4Io 0Nz$TJ H^# G  k ^^Vè/ݫ=O5tӪaO85a`Vxʫի8^y 4e#Q|,f+cDϱ)rqdzpδ3Q$h׸=/,D^ŒijXŁ%l ɱYˮX ͺYΒ3Љ/҂0Ԍ>֦] َ@۳{3x=sFw7x: ~Kl[T&|jN:6 to^A<:-M$/20,$ ! x!)"!["[#p##v$$%%A&&'''Z((g)))**#++,},,X--@..*//0p00a11:22333e44L55'60R^ HݜXF`|zN3sjklTZ;>) kMD|pB3 a8g4|N%W/f*_#Hz/ [ v % 9 } \4wM_0u=GE:~1n"W F%d;rP)`'_/d P "!J!g!!!"-"l""""(#C#|####B$l$$$$%L%{%%&Q+j4m;c;7M0'#$n%#e# $-#x""V"!!\! _ X`!q>K b5}B֯ҷ޴ DU/󷺷 ESضĶ嶯vl]= յ|puznk~ѵ޵4N_¶-Ryշ,\˸1x&t7ͻa[cnٿ7i6¥Èj^JQ@Ȳ#ɜʇ ˉ́ ͉Θϥ4Px Ӟ;o֨Mב60x-ݏ=߸aK}T"e'T,w;qQe-odN3(  ykeS4 { p!$,6:94M-<&=&)(()***+++,E-l-...^//\00211223=_ ӽ2] 4܌}۝qޣg7:&:'4%8$ xv\[F8(pcD2jK4 T? Y, oJzRM  ~ A q , rT7i>c7Th-v3n<k0f]V El[<k J { !!U!!!!+"Z""""!#Y####$K$$$$%H%x%%%%5&q&&&&*'H'v'''(?(g(((()9)~)))*O/I8??Z;4Z,'()''+(f'&&&%%%%$$0$## )ɺ)Ϳؼw[y}2r'v; ݼ}c:ͻsqP)ܺٺʺںߺ#<_mϻ*VvǼ&N{"QӾIӿT<+€$Å3ĔYŵƄIǜa}Kʮ%˓fQDξ.ϫ6Ь&ѷDҼBbԂ֞:a؝6vܴ_ަTP hKo2s?W%Na>hH7|dO#  q P J -TTX8  !"#$%(0: ?u=91*h*-#-7,-.'..//801)|ɯѝ 9ؤtrوeܠWޏ>E9ERGXKSUZINJDI/9!/xhSE4 dT3lR.tX4zL- a :  t 8 0(z%n^T>#oL,n Q c>w BW^^"bV J 1!c!!! "P""""8#q###$@$y$$$ %W%%%%3&V&{&&&']''''2(\(z((();){))) *2*X****+Z++++,2,_,,,,'-G-k---...37B_{+IoOyFró4kĬ;| ^ƫBDŽMȚ,xj!o.̅Jͪ |GϷ+Е~iaY^cs׍ ٪7_ۓ4cߠ:.16Yz-n`sO"TgKpP9 rQ )   o\N4`UY N!+"%#($ %%&'(),4>XCA^=5Gк6݂ȅs7҂z֋A`Tٹ<=ۻ|-ޣߦ37M>S]RlZiqtvl|kvmgfmR\IA9&sjV?*mY7vG3  v Z ( Q [cfk c\H8+x^G/tR/uF`.>U !V!!!"L"""#A#w##$)$m$$$%\%%%&G&u&&&&'Z'''(7(p((()C)|)))*N****+L++++ ,Y,~,,, -F----.;.P..../O/x///0'0b00001I1h1111'22dqqqγԑpҪа ϖ?φΊ΂ͯa ̤g5˼Tʦy= ɲjB ȡȎi(ǰnjh/ ƝƉxI"ŨŐŊoUJ@#  %5K]kŠŹ 4VnƎ3jǚ)hȞ!Ptɥ@ʂʽ,uˬ=̂ ^ͧL΢FϥOкrDҤ|M=բׂ֛ ؍لڋ ۤ0ܮEeޔ*T&q _[ c{0WOYm8 iBc-R0" z XQ1 wadI$  !"z#}$t%S&G'K(Vy}VؗԹtp Bئ\Kkxuޖ߈?B:VLejhux  v}md`I<,v[K7 | T B  5 M`s,/4:::8.yr _J+z b7`: !U!!!"f"""-#m###:$w$$$@%}%%%>&p&&&0'n'''&(h((()])))*8*i***+T++++=,q,,,-?-e--- .L.|...*/G/o///0K0z0001=1n1111,2k2222 3O3333 4}wܳfҐ޸6dڰأ+_ې8l֕իէt*ӦnCҳ҂H їNСqFϜd%ΐcAͩ{P&̵̊Q6$˫˕uT7ʿʧʰʖqcbR>4&   .?HXk|ʖʯʷ$Nv˄ˉˢ'D^̲̉"Luͫ?yΫ!]ϖ$aЧ:т+s"q,ԊAըhBץ؁aS9ۻ3ܮ/ݷ3޺IUn/I`?3{'2W7g7wHj2iNa9 Y I (mN;*x`Ejʯ/mcа(лҰ0׿A(ىE< ހ.DwߜpF0HQZgtl 4!4165@+7(>"  }zj^TA4  b . T l.K j 3CQ ]nppd[VI6.q Y D!!!$"j"""L### $c$$$?%w%%&J&&& 'Y'''"(a(((")q)))**t***)+h+++,M,,,-;----(.i.../E////(0g000141p1112E22223B3v3334H4y4445=5c555}\>ނFͷj>ܟڋڪ(١ڠں۝+ܕ܌EjWL,4fTwJ܅ۻ?ْO#ؗVטd9֮}K՟cԎP)Ӱӊe/ҝ{Y"Ѷц]:ЩЖЁV0*ϳϛϔϊlbY?@C0#++ &2**9?FVXQOMNUUSfuqyϑϝϧ"3J{Лв(Lрѫ;iҟFӐJԓmջM֨CץRحl7ڡb>ܥ#ݗyegWhl .Rt L}"e]Vl>g$`$e.U,\. u 6 rA'Q_߾ ! _ȧ ȤʥmέѴذgy>,ޤeVf>90~00001y111&2`2223<3h3334W4444A5n555 6-6m6667B7|7B.I 5epU|ڕeܘpޘބަ(`s PPe2;jSo`_`' [%߮hN޶}OܐV۱u(zF٪{FؾtG4טJ֨^;#յբՅ]K5ԸԚԏԍ{jl_E/ӷӮӲӤӒӋӊӄӃӁy|ӇӊӋӜӦӭӷ/JmԉԞԿ'ZՅզ 7a֟ H׍NؗoٵSڥP۫Qܶ j8ޔl9 u]]PS`f.RV-m `es>hK>](} L  P*Wq8:;WoK{)@"¼ĿIȍyḿ̠\|Ѓ^WnlWbm^TXTUXF2 'BiCx+6qrI+0=:>8G+E564&(jfMG/!ma' R n = [ x@Sf{0GPSNNMGD9(qdI* y !U!!!0"|""#Q###"$i$$$7%t%%%C&}&& 'C'''(A((((?))));*z***2+\+++,B,,,,$-n--- .A.n.../H////0Q0~0001I11112?2m2222$3D3E3ԾMx.ۛ6ݲ(߇5UcUMJC@6}'iF-yXhOEo*3'rp<f? wG ]'zE,b/`P?ߟ߃|cG5޽ޛw`F'ݲݣݛ݂nb[E@>.#'!'++)?IJ^tw݆ݡݲݹ )LdށޭAaߊC{U<{ FcICH_|7nFk]B>215;K[s&?o3b.~[D :őEj0‘ ,TJƑ$7IX˭̥e# Уv\,ժqJ4ڸ۔W+߽fB+[stlax{Al&lV!pQ'd9P0t1 w9Botk$ p # o " l  t o VK6! \A)wQ0~R,vFY#l4y:x@t1m% c !U!!!"@"u"""'#X####2$n$$$%E%x%%%&F&}&&&'G'x'''(<(f((((()_))))*/*d****+B+f++++,J,l,#яihCC:f '!d"S*g0X%d*\#\}o( %Cbb57t0d<eBrY< `@#nF- jH2i^7{hJA9# $1BO`v,Hj8d6d1jC|8zA`A-(|1DY|=rKjL-"mqcc<2*&AȪǍvʫȓ`Nyf͞|NϰX-P[e׼i vy&ݎ5ߣNen!;^x'EbP'zx%(=d$x(-ABQ bde^. [+{ U' m A  U ! c 1 s EJN GDB8m Y E0kEyW/_0c0d$QGr)T < ] !X{+KrGp+_2iI=|? W(uV@2*1:K(AY%+,vгўKѫҙһҽ-Tէgׁyxقی܊ݟ ޞ+߱2JRh~.NW|8Mq{*Dbz f V-[=bBgE$`2O\L1lZB|$X;~ V ) ` = v  C t  J Ku >v6e!U8hNv)P~-P|%Mp;dFkGi=]|'Dc&Bb;p49s 2_)=s-Nt &LwBk2Wx:\~!<[|?No,Kh&9^X@>Ls[_1pR@a5^F'~cD*vXB6 td\O>5,#)9AL]jt $5Lf}#;\~#Ho.T2YJ}DyX&ocSF3$wkbYRMG:32-!     ((/7@BKW]fr| .APau3Jby1Qk$B_'(j`Ps5H{:t]Bx*eTJ@~6w5x8x:{?E S\#e.n8x@P]"e0D8>E&jTn!Ag| #:]t,Ie~4Lf-C`u 2Niy0JYr0F\q " 6 I Z p   & 7 G W j z  . < O [ l z  % / B M Z f u  iQ5Ne?9+?Mbw"4FUdx&3CVbn*9HSbr{ ".?JS_p{&3&<yyeQK=-|paZRA40# {rie`UPPGA=820-%%  %%*/27=CGLSX^ens|)4>JYep>jrKAD;B{1Ia*Da~.Lf9Yx0Lm%CcWAVEfmt DXdata AZ.'O0[94x],  %1't:!7q8'wod?/sdKeO$STMa-OmJ=4[L"Rt lr8<1;)`o6_ks1FۓޡcT/7;g?YbyO)*\I6EV pg "!A(!g$n&2(*+-I/ 0/.*&r#r"$*O2 9)==:I6&2"0T15z<@DKQUVsTbO6H@{:79?HQ|VVQH3?985N7;qAFJMbOPRS]W$]djqudyzxs_j^QJF=87;_CLNZf{nohJ[_K>9>K[irqrojwf3eyglr`wxBv}pia[XSX[p`jgntxv qg1]'TNNM\GPXahi0qxw{9}|zzw4s.nhmc^ZeWT'RpO7LZHC?7;Z730|.,{+v*o)(()+W/14d:AINPQROH4?R4a*"RNT^R!,:HRV`VRN L KKtM0N LE:M-C BCPt -j!E+6CN0VXWS.NXF<1'T~ sig 3&# T  lFdz:a ;(./-*&#L! !#%&%!i q1ٯƢ,8%[@Ee) j X ~ 2C $')N'8#6 #"pSX  8R+ 'c0 \'~x%"15541&5X1l%.t:46IC !rq  n 6R ")-z,M(W:w:b ޛ٧؈@ދיjΠ"~7>C)Ggƨڹj̞pct@˹uML'اwàa5Z뇨\eɮX/ (վUdtjAe񺜸JZd˜ַ#ӿYّ0x78ڳʾwܼuVl㳎_ݛlTƈ` փdEWҞʏa*Ϙϵͣ9ɯʥϘmɁ[0ÖƺOw׊ ,&'ʾgEݓ+#|eU(z?K? w  4l|!;ī2y1*ƠÅØxi;ڂu;3!#)( !T * ^ n|qڑΞ/"#&F$uJ#)07K>CHKN/PFO,LiGAz:02) J#,25= CFHIfJJ~KLNPQOLHB;"4/1:I[/lw}~"zt8a7;;UET"erw^shZcMmB ;%8 :ALZgoo'gWtF7+14)AR3cmodjD`V'PtQZfXs{v~}}~o~~~}y5qgq^XXi^?h r#wt+jZDJ_;N/)&$H(+~.0H246 :)?EMU^fcmPsdvu+qj:bZTNHB;2' f HMjFػMӐRĦ츢GP vΊ؀#LU0-Kwt݊fю2Ev.WkM $YgX4#ЀuM4%]H]xNߝWn֓R1GY$obĚ~Ӈܟޓh#B 2O"#(@/Q6QK[ kv}?~~z~r~~t~}|{x>ugrp\p/qs_wz||||{fxrjfd0f)jpuay;yruXnSdW+J==2,+3N?kw<|pdY[M;$$2T["S4EQYa?g1hc [sNC?/!ytP"x"O-f)C@QY*XMx>/"   (202ݳyrvnjܨ񴮼M:Q;HI%(ݰٝ8ԌvlޗT T >ƶDw͋O ĄAz:НݖfĜݯh,h,fDՒڭz7Na߸pßKBգ=٨-Aũʆ.ҹ +?*ƶf[FʨŲݢBˇh ǒ מgPًGA[äѩɧY=L$at/i1FLc~uĸڳ뮝%i"h ֮ǏTenjaՄY=yك:gb4,ʐ<-uʧH "^Wm˙̔hȰߟ6:Pkd>Xȡ\t\e$4($!2(3G;/n9MhqjfI%!a+;8dOllWR;_p[jCh)=aZ]ZhoBfgmj_azmC^]oglxaigQ:z&+3,9#+%y  p+c)?c,b1ur-Em`ǿ4ߨZ[d6ڪ/=Ki5CknP{J}f 1 z6\]+/*% Y>T[b?p~~u#qoThTaD[IU^blF||~zAlq^SpK^GvIRL_Gi4dfEd6]h`lW^XP8BB2;V&6BNO]m{x]`|G8S. !. !i<xV&=#mk šڥn$ڞm.Ċ iưk0ZbHao0߶O9Ԟ(ΫMȓQ8PhOgnΰvNYpn9 .u7P܏8Q1]!]!0a^x~p\MjFMG# 4"MwQ,;@Udfw2bAG@6',D}mV& >"+6JPPJLo\eTn=$4Z8HN3ŧQ9#Yt߈փߛd\ N.ӏwKM"rœ"5/ B ۶4Δ2cV QoCbxe4>A+ =s`%AB,4## +*Y&ˆħ( %*>GDT[8*%%!26/4y0- ++1.4:@#FvGQCI;s1}'X< ) "l1=B=h0{ Y0N$# %6DDk3OW/-=C- 4Ӏ҄}ѣՆ- N̯͡5 H˷ nj<2d ǀ:m8.֕٣m𗅗b\-ԽثڠݨL.§ ~-0+O- Xo6 e8tLqmһ:}(,8J/yBNe Y^b8ߺ,vA.) O_ y ^,@#$E89 #2=% r p?^mgcM6(a0+Y+{]z{8|nm|Yi,^RrhmQz].~;wU0m'>+N P?8^RTFU4be n|lYGfxn`O$R@JkoA, r25G*O_sۿm'PpݐpOˣ@*-x<ғ>=u Y7|#C䬏>H/5)bOO޾+[/ƁٕۀOh& 0 E~i]] f +5<@;41#20 +%M$%)'5 x&N ~␼2jqgP܉>WXpDJ;%FO <ӑ?$~B IvlPp! ?7#MР%0-(A!WX9 :P;)9AA6BESek$v{aFBAHC 3c*H6X_[p:uo>rmquSr tmejijX] suVaFG+7Vfj\8-%h3Y992M'634I\<#L ]8r)"| v !]3+wy ( A=  3Za k !'(,m83o|0ۦe$ 8 #3 K r1! CTJ07S^[vV\K/I.ޓ܂E :T+ǯɌj߫,. k+7&>`ӛ|!4P`bY TRN@-LTV1PCQYZ]ZRqF;::H6M. #2 ( c/f8,1HO[#b]UM:r'a]2aٳ֫?: ĕ ٢+GőF6Ɔ-̉Z*w!ʅl"i4}]ː5"6d™]ZM ߙř{ҐǖȕĎȏđI7Ht6joe̢ݗШҩ È-šA=T͎:rvU`(zx_k[+?坿mt̼Ժ?)Eht)؈O,0Ҽ%淂N.٭ r9[7'#'.$I23 o)'F*30F ?c*0 M &15LaK>k6)7+FkT7Z^g!woU]6qwmlSfIahG~yQ}~_CF92;>?=5&)7#$%/Q|hiJEMU7YCVUY5\^XC?'6 L )}A%]#+Vz5fGZ][y4WzJ,>- 2kǞ*c޾&h >߈g)$2$iJSU6ܵ9ƾȽt&ձ[Ҫ`'(!h{,S((v 8Qfc}r&}pg)c\xSJuGRfir peUHh= =Vxh0KzFX9osefPwX4_s{1ylrut{:uiob~^V;LG0LkU\_`j~i7^Xjzvh:q2]F9E_Ua8& `-24B`vpZb=@! O wyjC[rJ936 CNzG^- Z1JAbg6X>Z ̟cpcB.,ا|/iƔLܑB*ڈZ UΩ%peXnZ8]pǿŠ:ұ δ.:Њ&+RbϺ]:oСv JkM;"t *ۏ6mӁK@iCH r?EJfUm𯀱],BG!F *%^&/BKVOA522&O%i$ Y"7P6Y@SLnCs2.P6QCAJV7ZRE8U04Kes}pV%>3-Q&z)JwfFb(~fm |n{Dxvthu^Ao\ShQIXg2i_^UVi{zh\ST^plwsvwqedzmgihdda^vTDz=bGS1WTnPPa!zh!@&=S_kXUL1GJV dm(rk2gnGvqg"amZKU97fMad]K8('5<>kESQ\ejdj^C&} t)?KK6C0y1;O&d1 ^b&0'NV-"%:#&_emk|m uhL d|H Dw@R#n.TTΞѺ x!}*p z 8Fh51 P @[(&(Oh ! ^"->KaJ/؂ݬ2>8@ 0E>'$T9n= '0.^+2t>YEH K5H<@=FQRWNu-,@:<.6)M!+46m*D98;vޠ&L<ż/ ^ST җɰg6؟AZ}u jш ɝO ؞8jāg]ƅp]p${=7Aq2ҬfbʨǼì>"?3AՑЮuyuD3c ,]! v3AE> .N I70F)?P9$$8C6:GC)| #!*686(| &&0 .b #5x T<3Q%BTUMED4|#=8N9J8* m{mȹD8%\H1Ό1";N8ƝLx"g#X^")>BHNfמ( #6 ='<6T3. $u z0aCL; ezC%MB%USF(573BsEمrrn= \3Ո{Cʙ29d Wӱ㷞Ź2ߘݡmɴ^wʺ`׵ޫv=? :sWUΝՆDh.A  Dvߒ3KMؾS"b399Z<<_1@  ا^$$8Qb=ivԟd]$M"՗y& \-"&](%  .'F +:@HS9UC) E!)&b'E*I15?4&0+*<07;S:`0F$!]7/F4;/Y CMSC0 ^mwu#rh[ j̿@|^e ZoXw׼ĭ^2eꡥ]ۣaƉT:"JS2xˮaGk]C(޴9)" ox$ rzlԱY Lkn'/!]*>-x$z:'+,)hx CBJA$U0\%?TRYpybB,Q+2:d:r0u#$))(>)'"z$8bO`UQ&MmG96+.@E3O+>J**3;* VU'M>?LIKi]c{A#)Pe]kH0),K.0>CKC.$& |$)&7:Sb\$D&!$GL:=W* #%.7>ET_X'K=t1%E׮x9< ?_X=')8Tד5l۱ѹ)%ш˅ׄ(G_-;ɳnZӢֻ!4p^^j1$͆CѺҧӶo8ڥ=Ģ<^Z,{#0} R 1&7/.:+& seCZpqh߽c,  "! )g  VҜ )%y| I/ҍʹ1ո#DuF+»8 /K0`"G˴ȍz ^JC ;SI!"5#U:UbR4%-A8Xf#a2SJsJ,NM"Szf#yv`7!T'5p<5,74KcroaPHJU5jmufPAiGZqway<~wrfx(x~hybsvcYVgnoH}6= S7ZNFY|ZkEY`}rmwWP3aysry>}u)16,A[ZjG  !4B>%2*x$0  7 ?xpXޕ ƞZ&6 &,JFIۂ8SŬpߌnʹR_Y߿?wU߰ӎLUpZ˞+NҡtN< GG|HLy_b'L~ӒJˡGн+ݠCަ.נǻ~Xt޼ms,XQ%l#Ʈᵨ݊+҈/ҕ-+ݓ99ԃՈ(՗֡n:h+[ⰮFtdzݳS3l6fM⯗VʿKQ×%wȫaYi%9YH̲qk/4ֈq+`帨y#̭חv  5 ڹzn, b5(!48?>IjI?O=g@:)w9 %*7lLTUNLDUyZBXRRTLW<( 4L_f^PFACBN7.^6FpONLsN;W^dh_UUPGPLdILTpallbScEVE{S^t_`Zhr2z~zLm8_`kLpGh]Y~anxn8c]^Y OKTderti_^bcheM0.<"$021:.O[a nLqZcX_keqmbVG5&"&1))r*6N[TBC/ !ODE6@FF;EH LKEIL7QTMC`= 8,5W.;EMTCX!WNA5-++&]_Elv*24A/"X),&~ _oJ#41W89p=C@1h%Z(j*@.*.!a*y:*IKC8D.# 8k޶>4  _<uZ   Raܽ`r^xB Y5fY"D H K16/! Mp .R A 0@VB9 ) J<pQ'7D8KsTk_a^#SF9=#/u.,k U (K("WR '4@HQVSH!BDD:38H(U^RMFz:46<~?>c;4Z.053#k  0G ^,?G>;,R#k'j,,e&djH> y0 Q&-(C!  5nj pԨȿǢM|FG</ܙ.^ͪ}ɫw,݌ag$~ۆuޔɕbs͜{L֑iB*ďˇ*Ĺkʇ|sڰ_tè̔ 2*hΖˡU A ?qxMlG-{V-P /60a%{s6X~ SMa%ֻ Ks/  S7g4ڨC$'wCSQGe=J cfӂѷjɯY߮@<ęϕ:kaE{:ȁZESގڳ2?tT  D ^] F+W(8= ;8cBV$b\M^]YtR5OK?2k,- /&039@E5HGIS,ZQOFOBBA9%+_F!) 3 ?GK MKB.(1NSTVS^_L* @0:7@CE}F_GKPRP/I`>H5/,-22V; DDh@70-/38:<9F5.'o$#6$"JtX,1/+2FXRGEALzSQB-H E)AWc9jkjhd_]dbmJeK+;dBI? 8G_e\QQH@8/)J.%<}LYM^[U;TUTV[b2ijdVD0&N,=7;8+!"(,08CKOO+K@r-",& 1:DtJC3'[!(H) /^t. a$ 8 &S,+",P4S YzAat]ׄYћ*nyp˔{Row7% |;dؓٺGj 'Xӝ<*• ,3j̝ՓÍԉ7Ϣ*W&KckHξ^^̍ǹTzfn(̆ЈиڪP#5)Uօό`]Y](j\w=TQΒӍA8ܩڪB=ӟ ';SE캬kHV>]~h)ɸy-ѽ2(kǣN:˱k /j,1?U!OՒr٬K &HPB|e!8sPF +dչy"%EnhmI c L s o̿Pf΀U4q?rD_">HPt'2x7<48DWk{|p`[H}<5216 ER RF8/[06:::=~?k:2.1=LJSRNUIaK'R8RGt:D20j5:5,!6WK',*-+0A9@?EHK:G~2,#10A9:{64E9 >>j9/)M*'{ }D2_ y {xYo86"a@g\ rúJbįVήnNҧ֥@Βݮکߤk{ViPͳ"X,rQoJ益X챈X@͎4QCȘPQp ߖ۶LFr+Ԯl /-S }xOxv .4*c(/,&#@x%L~AF e"(4 -t- 4e/XfCJ%)Z/=5<<+f  bH   d~I 9Ɂ˗bpo1 y Ej= cio. #hj*h93x/c7C۳I#ޘݟݯٖf( gMr3L`mϓѠԂM3˷WJیN>iȑxp$ܨrKp!P-Ů^οetdĕ] W9ŚĤĠòRPKlji$˽Oݼ(ZiOCSըΝ#Ā* ; .-}} xOY  g fIt'*F ka#G4j><<5.' 3 !" \ A k "/AD=GEWL)X_Z^&X~P!I@\8443.O #++=w&E*.3%9;?#L1TL@A>EQ%^iqeo:aO>0`%k9Q(=KhMIkFEB6!,n  Zp e&5V=!; 9>GyMGX3x?%4A#HJIJQNXW@J1 &&22g54Y8??::HENxNH)EJZvh[g]P0@-%H!|)B,$yhp  \Vq_##'$+m7>: *#u+{)N$${'!, m  l e~ q  zv 7K)+))(o&"!"W##2*9rIMJyD-BGLF>;\>9w,V$(*!@P)@ P B2BhD@BnE9%n\/CL q"() Zec%ݥԢ׶ܭ'=pGSݾ3v m4a!L(@MQM!ɷo8}i\AӡۍЦ&`䀖iϪ`3c3+|ʙ(}?Ԑߏޅx+gn%}(X덞!H(Eډ38ĈW aRyG`DTV%ڀu֗ߎ/ ,<Ȱ֙cň6-̾7ς&J{+bѲFڱczUr%Zs}'   HJ؟ Vg J `wK֣4VP 5Tgn MEoT.I# %!Uv} "g?[ X F50&q 6 xY b;6_ @fTE7TU  U<| X@ʼYHIt`L۵8Fw7Ea G *V=AM:<Uwz r4(AJY&E+(J()%J"\&),p,_-{2=;ABBD|E C??Gk@AoE#MZi+rqmkii`RFBA;0o+0:='5d.-,/149@DNcUZ^^b]YQ6Gf=9;nBILR[paaV^\i_a``lblbx^|Y+XYVMGJgME*<>GMPVbUp|R~xv^t3jMb ejjfedcfoc||sppl ggp&yOyr5ilcboaC]YXWJV'VURP8V,bnuvwxizyv"rqsrppty}}f{xMwwwzy{}}zVxtnh`TMzO&W%ana}s']H8o.C($$!$+*/5+J#f_L"$%0W41/1% zLT5dBXl0%XIЀ3պӛeؖ׏ۏ~ڮS ~ś'{cعu{_XuTfӸvf ӱޣ7ŝWVy{}ȩ5&Ьj ǿ ==/Ž$[{Mɚ2A$Ǫh~#8Y'ҶŵPe՞U(x/򜖦|zeۘ܀pއ􎳍Fғ\VҬʭ+f֠S.LÁ~up0{ ΃mʍGy˒ĒUh;ד[0ڶp̲gWe+ f-cF'~N,! a~9@@zFZ$3I.b'ʴmc܎e 9  +S$\+,)X%]" H\ 1gs,"  .Cd  gG$-v:GLoC6`-&M l *[9"&2-x-"KE?M) T %%'b'#QEMZy x7. ; a % .; > IR'6CXK $T 2&%*},--6.H.7-,K-,N(  $ 4 ` / ] u4nۂݨj%j7GQ'0Ҭ/Q ٌߢ@1Wf1}%H˃]/}ѤޟDߨ/6ݲwE"G >CO  JN )g*6ܢمշg$גٰ[ DX)ߨu7He !!ou\JB;7މ1dޟ ك;L;TW=K`3ϪƂ,ԠP;L҆n@Fa!*o:'`4   1q @APD$TU  g'-1B31.,)$c FLu x v&I  #-q8BFJKF=t.ClW+5;<:5-$B!4 p")6=h>t8j,MAM uys2$\(u&:! }:'<-,'"k  1%e0U41C+('$p!|\9 #H : cOi W &YI\r!pR /+D&'I"`. # <$+5+#Z D,nF XF-7U&C(#@p h oZ_YP8)%% &X=C-7#)3/5;AC3B%@!@D2HH!GD'A?d>====?gCGiMaTWUIQOyMIAf9<6):SDPY\ekekbRD< 8:9G?HR[`8cb`Z^]^^[WvV Z]adaefhlorvq}~~~{qcXRORTVWWZD][/SIAFtFDABEGF#EEHnLOQ[SUX^eLkxo:o^jd=cd)c[RLGA8-g% D #/-9330O,&  [/| 0 \j (J6; <<;i5*MUw 0IC t +A(T\8 i/#F4A Y3LN >"zgS f /XC % 8 HYi{_~"0#""5#"a!"T" i<, `UA `5H)7%j*-\(kE#R;ks7ܕqTB|O}nQQ, :VbW8gے_C,;a[ tUnWM(0{fprasԶԼ[&w{Dv}uG%+cC$urs29CطߐM7ܮ آTlɆJ׻'3&Yfׄ-P֋ځIiތڭߙv^gЛ\W37C ;6aў҈Ӳ$)ݻcތ;ԦH=ιUڦ_?J ,G ʼQ Aޱ,\|6B &`؉@e܁ޟܣ֊qDΞǔF|&H7qj {ȤJׁ߅&Sל4cYܬ ػ՟z՗B݇1*ޥVGIRzj@[3'1uݮ[ߣߵ֥ԃMhJ݀ u1d#U߀ۗl04+EC 6b 1 gy(@d@ 2-@"&)*)q%~!Y71}D=9"'z.2 1+ 'l%K&M(*-1241,*p,u/2566a41^1D3_5f68;?6BnD HJ'KAJI IGFG[J7L2NQmUUORM/IfEDDDEEEIYMPpP NlL%LpKHHDAR@;6214236:>@AABBB@FOVgWR1KD?S=;710r5;@QDHKK L-MNPQNtK940=*"&0$)-/49=><9"876'1+((g'/()+[-.15r763l0- *9$6H,u* Z5 a$" = GexZD* dk"r}Dv)Dk QnlCq^gzvBH<@ 3{1 OU/I" uG"0WH+CzO,2YBK-IWfچ1Mfq$)]SPޛ3^|*%M݁I !ʩʹ͕IVo/4 38R$׿ mӆ҅aފ~@үl'dT4.WߖAnSAו׻^o t'·͔ϔ{~ƜؾgĖ!RЬ=aݱ9 +"źUd|эpa{obά x߼mYÖK˨ЫO׀ڄoh\i-3 G]J«Oܤۉ({}hkd۲1;w2bXInv4.d]U[u-h8n m0')%gKtsYOK![@tJ !F S q |p2 x(YTt1a]\@ wj1h6Es Z h { %<(! .c k  '-1M4443A2a/+(W%!%'+V04E8;:^;94-&W#$3*18:9$50,(;%!?[]#B!%)-!2432146~: >w@@=8X5444T4S44R371x-)*'k&y')v-020?/6/F2X8=>i= ;60*$)*a " x#(+.-24'4/\)"?7 >!z',*.- +(-&"G#=;x"N# q`.E"#5$L%$M|UD Ve K#$!/ !#%$"*o N hKq U*.c^ % B Xn!%%"zOqx<Z V5F&/+,l*& Z  Y/a:@D [ 5/B|p%= <( C{foh D A 3 Bz v B AhPfW|)$k!/2 XbB-3/ߑ|zl8WW? )e+;mMFMb {{`Ahs g  3^ FhA `FW !:"&%()(-'&''-((*t.{1r238l'?%" "%x).3&8w:1:(72+%!o n$):-/[/l.-0-7,'*''%$'+.1X2221/,(@%%#"m#$&(P)C& R|hK"C#%'(%I!%'&""DY "%''5%W" Oohq!% (Q*Z,!-+)&\#F A !h$&'(,))*I*~)):)N($z w v]sd/FT ` raQ e1QQ ( b W Y & {D+ qC2:k@ iN .R-qD2<;wjϼ΋Hк`r؊ۮٽNjsЍmvӫSAKڅ|ԼԖՋ֏BШ`*ؖW Чѝ[ڷGT"@ύa%v !Ў4zٳkM R'ߟ%رۺ߰S5<߫d#MےBg|>'Z^*u׏Չzq`3G}#Xw y&'p- V yUG la!g/ C3X!2$&$'&$9!-g:~%,R3E77U654Y566t789)97667I:d>B;FGE@M;M62a182m4689g;u=@BDFHIXG9C>9i77: @cFL]QV*[]_][/WRaNJHE^A=0,?l?>I=;9#86j6&8<+CHKLK.F?5940E/.x/0>335555556689;<<82+B&" ~" %(,04Q8>;=g@AA@+=:86x6b65.4`1h-(T#!d "!CPqd;  vIfqQiB;`9_  C @VCB o_,i.'߿ܒ $ ,*sߔH['ޭwךIc۳ڥQժXF֕פ؃,F'ВPRRW5 Ԙ|t+a؜۵4̠ˣ̓ҫn ؼ״վnسABJB±͒єա-R)\clޛݬ پѝ &]n@ԁ b~@߲֩eޢfۛ";Bz!QAsJ[BF+܏{x`M7+K7Y[MQjZJ6{lbhV{4$YpBR .S I ^bNd Q`o=za 3f7? %V S U SvtIP K x E  =xA)# g_ RJu7r^ ! H % ' H7 J y:~@Wf0mZuLOQ%^` BB+L "t6@wSLVP4u0DlR0@A0-N4jkqD޿hWe4*߉[є{3<Lܻպ.d@THPh^7ю~|՛֩mv̗ɼ)UDž347 -ȥ׻۸f8 ̐ɦɾAМ\|ЃҲ1Ӿ48ˉ˲.BBř̬ӫpڀٽUv 15s*ep}_)7]d?EZV 2XBpN  y q?H A h)9` a! P Y{"v&((% r  r -mwV,)$5u'  p  gY H\<9?Id3!$%#CC&'2,<,)h$C!a&*:--?,S)% ~%uAM#?&;F!#%')A+-034d3p0y-*'#d"mXE[ 0E:!\$%&&%$]"!"p% ),/o2455S3-& S+"\. ( 9ZC?f[2!#p%B&K&%_$" 1b!j#$Q%$#8"Jz_zq c L . Y :5SO5gi3=gK=4 TN m<DH2?um Sxt [S#$=%8%$#"6 0K\]o V lHn= d &y S  I K 9 / a %$Z 9 x 3f36dY:+5| aX F cF ; 3 8@?  Vbz$^ # w D 4 Z b f( =*d ` %{$ Z wqDE`  W 5  J [ 60 GIL&wsYGn.nU<5<;u>oouVPWܗۅeڈkڂ؊׺'"lеэՒUb3~5Z:V!ۏ^ߞ/ ۾۳nގg cLBJrk{Pv5˩̶ЙӇ֙yxݾ\VԥxҕѠҞ|uԶD҅Оΐ=hQÜR忹1`̟)??iԄ܍ݵ;SӉ΀2bg ~ҹ4оBh\?qV* ׈ӄCIt4;'v*M֠I5ʵ͞0Qώ͋ȶw< ¼Ϭ )L߰ޒ,0 \4 PZNҼϦjοΧьԓFNٜ߶ {&hئ O׍V=(nXM<841014e8;=w>=*< :86556779;x<"=<9<:9'75$42211W1*113G68.;<<+<9B62(.*([(*D.4:>A0A9>9520//0u1D3/568;:;6<;:73i/*& $"2""#$% 'O'c&}$*": >""!o\S!p$%w%O# eVP8K  R [!`_G joU Z  8g51P5xtpr 1 I_ oXluk?K84ߦؘճtբ9lj"siG6j/yY ݟDg~u{9;@X~Uc|Wfݲڒl٠ܝX 5GU<ڳCݧQ^v@L< -"ݴEazyk ܦ%wrzu:8xx\,PSTNPG_MVu ;WGwYRk^ss@+5xT,6/KFNVPTCbS ]|/.2% t[P DMk Fvq'1uINP=uKYS"V$$$#9"X GDUN9dI1(Cz "k$%%$^"^!=)0"?$D%'%$"!|(q,;  KB\5Fe _< )mweK}!$&')&$" }nV7 Ivp   D!j! ~  8  s #:  #lt g | W E  i 0 rzz djUi8D   h :,vn!R?x;QEY Yy-M:`bC8EQ:_KE }F |4#*Kn'!9Au$C[]>SK^]J>f @H3^Xyj1/.RC;yY==r iDX8  ;7cWEhra y Z8 3_0` ,e{GCk@(+h4g!  _ h  \doO;r H j J 5a/ #   .{J(}BpJ"*v';k ZAT^tSrI]8" y 0~B/LeyOfA6]V$7 .vI%|.%Neoz ca2|Y ^]]A9$fI4ާݦz|GQ"xF3% ~],H[IdHs0%h1&>H"""+s 3eF~x3jivOdqE&R&YU?^lpm k>n(3$'YK9 % \ *ZC <N$\G*D Q6AZ ] \<Pw } m  AR(wDk _ m*(' >a L4l Xw nF  -'4~ Vc5 8 gl ^% ? t\ WCXa{bfGVJ95l Vk)[&/~6}%g5Ft x $ }#NTT@x eP@&g[2&8;us)G~YS,BbK$v/*U",F Q, | =8_3T@}T(b1Hg_V DIxh0h`BT I7 mj8q1y_Z*yQf!j&&56d)G7>UMoHX!+W5+oHveX'T>~  X D%WVx.UtY%{V ? a > ^ %  0 B m `/x f ` v 5 `sjlH H h p Y F Qf}_VpeaX??DYEZD Ck]b$M7A>h u a y <|cH 7 =3 ahi`g _ 9 y k  - L H " h M   c -Ix?wddI7P,79XEm ZXV18FW$mz\:Be4Pc$~H|k 7c8@66bYN^76bZzlIg]9[G{8Ft]$ 7*U~405Cd ] Q +  Q @u$ 9-QrOK{w }LNw<*~N9u$  < _^o9i: :h+uf4zGIfqSXo"C)A= BE]&Ex}4.jwlPsMn=mGN>LUpuk8YI]vP7ukSpV6d~'zx0+l=5}4^2\|L;OlzVtj-o-Z/;(h**Wp5ldMo)4S.DT@A=^w)SCn83:w/?5#"RNf_=U0~ZR0<23-|n:c\41=E>'HcS[BAB}M|;"o9TGPq-;  _s!c B e . # @ wUwZ#?YyT6I'YRm!HXc z Z ` t j N F f `) adC&Rf`;[(*u vyy y7 b P * iV` B :uvD .  V  {  O 7 9 <4k RA" , ?  Z} . U*R}FBj{|tpx=Dc](lLo%CF:P`O@MKfCn#I$vfiTi0!J{r{qN +t/mhAMz~(z"Qqjt4( vPGbaiEx5Zfn,vAlcbwP\z*"Q[p E|+ccEICe|@#gD>Za;zrW<=^)8iR`t$Yl#c47u3'38sn7m7lCJ~U:x4eIX5~/VG9Jmq  \M*+3<[ca#hFTq"`1&Mrr?O4vu_4-EOI    P>dd & q E J , cDoq)  `@m^$FCo|\y"I12@^|{KYi DM@ahJH`wfBrZ?)E' :a@'?'CYl}o}wOZL|1QYb+]x;&"jeo_rIcsXz(dR&grJ%;3R;4BXZ8IN7Z*r<.\3z TB w@^^z8\5L  8W {UD]tS 3\A 3( Ty JY('|p~#}Iz"Z})FVaNb<u9^* VFBM@r @ooC6iK-:e"9aec}3{V@gEfZ1=/"-eTMJLz3 f#E]c] yId^A}zW%0DvueY"KW,ywhx[ S a q ? !   0 T  ? [ S  `   g  . M gV W 3 =  U < X s   _,W L o <  Vs~4|@"wxv<vh4fc?P?t*gS] B{+q[!:o >]u+)I:a)7{I\"iK)*K#K"^h HBZA4/HjP*We n lV7".@j:6cTf" :<@%hn)] dmWk~0v%c.)]$J6mEGnf._FZ:AKf#R(B9 NRF{; F[?83p$ *)F @ S 8 O  r 1cS _ r 9 b ( R,#  ].>;<M23el @YJ  ,F5&|zF$X(L8HC1 l_Xs\0eR|J U"yQr0[k i{W-P*@ik+ P9pS'5E'[>rse^ |1^X~=8f? &3XLEf3 &WbPYLFMyyS!DS]Z "$=hfZ! +_^j5[vq#Uld1|8;y-Ssi:<E ho-y(M,%okP8Au~[sMuNMF\(OwL$*R'W\8\W3 EVN|}5ugEJ|H /UH8xy & elAK]<1y0O=&W0V8OE$Jvd<[mDA[M'WbCFv[teV(IqLk*8Vg YhXUZm fL+#EB#0VG*_@#  sQ~gpav5e) p t .  uNTwj~A$%br-c;5e&<PDH>J)d[qoDa;],Mfg"e K 1?]!%xSSiFPzjCP5 Ht@]}a%|BhAPVY0y~?wD3z0<\Fu-+\`?h_]ub4`30w#E!C?e1sY\9;}[G5Zz.o$/!{mn#/XDx ~F9YFtQUS!Hx I.>"34%!@knGfR|qG%b DN0r", t9 })OTWf@sN@;;V[IfqG]@g+_Ge;N l5NvGM/LrOFzQS|,J7rS#aPlXe&;-F ei4PFz&IH+3'Ve O.5"scO0D!H;X@QWa ED"05?A8.iyZG m$(VG.Z%uTH*\QLN8Q`4 +pFL [~gnGPV12*PF[|n2=c2/-mD.l4-cp+XE& . 7x  Q t q S  a !Hqgmx{{wvocP: mt <  D I 3B@ s , 7  M  p r < p  4 V e f b ^ [ W A  r   $ y  l B  7 @  5 l a 1 {  B b u m B F [  Z I f  : _ $ sT  N    ^  6  c m j !  Y IT~8Jgsw(  < # Lv>yhYPCwg=q49qakP(=sMmp]JOh UP:`NkDo$l#teJ:3/%Fa|D:IcTTPdCuFpSr3%8{48&G2l/IGnns#6$PX #) BX ~FMO2d.RA A=TJ5yp S0>EBE]~hUhny cEPqjv V<oO;zXV u {Ieek-TPVe'>k=-Bp7=~e!Rm8E$R[E_E7^QI~z7IF6Pr {Uif3r&R9ISD:S,r':o .BX`MSv)\%Xme@C>(U=S:&Kxi1&"y.N?5KV8;Qr;~aV-8jta<n71xE! DoK4J&i(Ot{`+,}K_<_L FlWHC):3N{n[TT^aN4*Ef*VC[&sNR`$j7F{q|c pjX u `enL ZxY|sk\91'?H[C&\YV)QxZX8[>e;o|`.[Bk6T1>{JO?T1uZG&vk{ch'PRZ/,]> J.4UEaLZ'4a'>80 YLeijwsFq)SPw! pWnzEPSf0]CbJc-$3Hl[KYY d >T,Z(k;H[ ;VL#n|R"$}j 9 @ ? N } P A ^ $ l > m { b # g~b o   ]  W6=m= Y 0 a j R  ^ Bx{< 0 ) "`{0 i ~ y n _ > I{vmK ?S&G'=oC4*^7&f y4/4w|wys`4%c:(!(SsxcJ0Gq/iK<@Qt}4ri$@Rj YiQ#w+n.?7Qe*BMs@BtH6o-E.x-BL?uK;Pa98$yTHHB14ojv~[5((t8&^DndG"U_B "04/sVKUl8To|iUF;9@OezxL& B^pywph^ZX[ahlni^WPT^re9 #<Saoqoe`Z]hyxfQ?815BZ{Z8  0HhhTGJUfpywodTD6'"0FWcje\J6!  ?`vzfC#3>=2tldlw~|{z|~{|yyz~~~m[M?60.3;EOX```ZRF9)%1BJTUUURPLJD=7*#"')--,-*'"!!!"$!! ! !!!  !                                       overgod-1.0/wavs/beat/0000755000175000001440000000000010311022434013710 5ustar michiusersovergod-1.0/wavs/beat/accord.wav0000644000175000001440000003574610303415424015707 0ustar michiusersRIFF;WAVEfmt DXdata;  2HE?DMMNQUVX[]^_`aeegehh\9ZH$5RNIS`eiq{)%.5:BJNV[`dkmGe}~yL${*W@&4Hp.BVd{PS%0AR`m{2[M 6a|_fjUGGC;111,+,+126$Lk 9CFd9Vs~|H;^p $oneD>2" C|xyvy{(WYP?7]~:bOw=i 2HYl.d<N_fepeWMG8)  h.O$22![Mo;e)\o:nxas7i:Url1RyfRC.XSW5raQB4'   +BFr.e:s"[tt"Ox.b1f?eW { x^;/&zbK2uwqVOOqec^YYZ;%'Qki 1fPT9ITUd-Y.Z&w;u =  " v y M H Y S < + %  cF^T|xCD;D/Z^.c NaB@fm3%9ST>x:o5   : C X n [ D 0  u_acYU=5# b2~}>z(oK9.b'g t2gE0a l J "  }   v [ <   )4Are# |aVJC:,IA)/_cz2.#:_A Oq t W h d O _ ' ( K L / !   a 9 S -C/8$UO: GL4/9#z,}kw<>2ZH0#-rWM;2ewN uP c poh}{o[A+ ~ Z9ppM@} rG4!HS\>1Q,ke|CC?~>[bykvz&p O  w`? 3~. lAAL yhK225[+Lv|&l[|,_Xh;uv=ST@}8H*p&(Ij( .$#hA D-OWEbd#eRjxy*mNiJ9N ~; hsY2:$S@# P_A3;MuogprcM9#% #y18]"k85V a]`:@v jiV{6" :1"xjH rL/ZNtVNwY7 p0:%`M;J=pSmyCv{'V>U5'\3O.t;~7k| e((m\_ e] qKzM2d!c^{fH{dkcSP~s {/db7jS<{ #Qi//+.F[[OD6$y rrp&-5D'Q"&KD%i[As b%C#iSYvHhsxi" et!GXsu]>@+ `x (ybKhoH,l;fK}LeHH{=-A6pGQ yNxw V B\Ev8l[:q&o% _ mn0NacCBeID ],C$.fvb VSkB\lukH!aJ )I 9= `@* 3 bhJ^2~uVWWLQl@'Xl<")$'`a`_T li+Gi sj8Wgkhow  }p6izxnV 2_I K)cu xj(??{ N?-%c9ub) D n 4tE/ ` O W fZ]nHBX :X L_Qe)3n9q:sKb7u*&lg2/<94 z9O#]Y6 0!p!!!!!8 .' $ +w[q[ ?9y $MJ ~lg+npCDCLQ Z^!lxj9M 8!!"N"""#(#HV y   ^IpXL )L )b7JL46Qw_<. $<Z'9   r4 dU -!!9""#i###3$_$ o LC [ 6  ; 5 Xbe~Y/u Hg}*f9x~m^p!j&M}u|BC%(6S5&CfVYc ;O86 ~! ""5##$}$$$%`%%!N   % j Xvo^,a]_Z |9}-e:NvwE*rh])Uz, Q9 !;""#"$$%%%A&&"Ld zN [ \ i a G kcD*Y  3078Q5Hx=5bI )SN8+T Y$|L7 !O""#q$ %%&&&Y''#h?Y    k j oQ3p Y J fb96c qDu\pjytd )!6" ##{$:%%&'''`(M$$[B a R $ _ ! < = ^ ib("|u Q: j  9ZK,P+<f@I},7 )Y{Az\t.RBuB# !"^#)$$%.&&I''.(#$<& ^ S ' l < Y  s 3 ; +{H= 8  } $ I S Pb c9&*O|X,^S^ FgXRae I! ""#$9%%y&''#L +d P 6 g M g P 2 j |  wW; eI 2 l   AS- 8^Rr*V{Y 6(Bf,l5+E  !"`# $$%)&&C'x# {  p f | a t s ! X  8 ; =5 n#i " Y 9  ;pJ%  .H2LQ /&vq%Y"Z 1,0|rB )!""#x$.%%s&&8#V  c  ^ r C 8 s z c{ #P f  { * * l~`: !z6=I/torA  =_)cP!*  xw#X !"\#$$%(&s"; E ) O  @  r 9 F 3h h'(]ry b 1 ^ /jC'X ~}K l"%dS; B\.?EeT< ,!""#t$)%%G"hlp >n B  ~  j ! J k   T'&)8! }   OWU3:NmNhb ,T~8S!X%B 6vy !"M#$$X!  ^ T P  n  6 L f /(*"S ? 5 f  5pI%@q\wn,qjrhpq#$W 7R('TX= $!""#q$ Tv x ; A  m < = }   (T*##"  ( 9 Ge]7 yH2o56t8t: )Ir$"mA  _i;An !}"N#$ y /R <  )  U  m  A G ?(*p#i &d . 4 \ EiI+jw/'> Vrdbgw !h  l BEP8 !!"x* S ( .  s  s 2 G v ')+$ !f#B  m <i =  [d Y.swxHOhal?H 3b au,rb  of;5m !o"={" L Z  W  x  > x)+% !#8#    | ':n@syP)rCg\^fr[ 6$* b  \0>A- !J$  4 =   O s 8 K 0*,%!"$$e"| ; l V  Wj~r1?k5 `D=\S ] .j1e HU - X + Z  u  o*,&&""$m$"!y j a : q .HJ H5vknc]cHzcUPULig ,#*;C$ B * ^ f 4 s 7 O @*K-&g"#$$!#!:  ! ml3ZhNDe 06@^+''';$  ') dwuP_% 4 % / k W  eB*-'7##%%$""P"0E n [ ? { <Y~uRDS ]S@qYJ1oiY$V !JA I  \ H z | > q"+2.'m#/$&%M$(#""`  % tcGKVAk=W$v<0&thmMO  ?p}]i -?Hh $ S K  N ^ 0+.)h$$&&Q%!$#r#"F" t x j } ? Cc]lFu?JS8ii vs'h )c si\]  z  * i u _+/3)$%&&%h$$#B#"da  1 :rtyXbs_2SzoiJ _L7RW2C r? ZxTW- Z Z  N #+8/m)$3%'9'%$?$$#"'"  i t | 1;y8A;},wQQ4K~S-M!qImJ /0A[ U]6ia "  ( p Tr+/c*%%}''&%%$k$##"X z J#V9c O-G1b_}K4bd9 ?J B.xy5 g K  O e+/*%%'(&%X%$%$$a#"H"Ki 7 s 4*0`Y+Eu'~GG+Q3+ +K9 /' 5,M-E #  z ) m +%0*d&w&J(('&&%%$I$###"T z t VZ0vf/@hQ++>z jqJl1Sp7|\Z. 8F"A \ E  K #+?0+&&~(('&]&.&%1%$$x#"G"^k  D nP1XCA[n(wDCsM c _6J ,o /+6Rd\k9   z & g {+j0+3'&(b)(''&& &i%$L$#8#" D  t Q0bQZa_mL |)  d XJ,!z&e)gY&. ^~8+F,2 P D I u+v0+J''()('9''&C&%%$$}#"M"_n  A ) NP<vLw\_`]d~&x>?\J p I3MaAw )~5'9ou}=x  v $ g i+0+\'.'()('o'K''&%c%$_$#-#" D 0mRl)vYLYsIxZ _ bB+b^dj. < {WD" K > C !A+p0i,'g' ))p)((''<'&0&%-%$$#"Q" NIfagROdp<  2 f{ $Q2p' +dH0vGv'q   p " c 0+p0m,'r'$)*)(/( ('n'&o&%r%$_$#=#"X  )m[TWoJd x V ? # (MoFJ bAB8n`L&T  { & ',)$}$&&&%;%%$$$#-#"A"!*!  QkP #-mbC24@Tn[[z 6n 2 ] N I#5d 8ORF|N^ q# k a !!Q&##@ U!![ f?kv h mS@8@Md   X  |C T,CJ?>!4Vs/9.x$ re(5)h,JKeb.mWLGDIZtyX.y 6 > q  U RW$* r5, 6#_ X8?q#`L:\GXWDS_met[QKLOWiI0X:<SayF x y ~  r1i0u.z0%lP ~ukS%Q Y  @O9QE4~p_VOPT[ftS5se7"spv/7fFZ2] j { 4 y q ` B !  r J pf_a =X K5Qm1Lf>mH`w %:NctS{m`RA0 xH3hm||yx{}/" overgod-1.0/wavs/beat/bass.wav0000644000175000001440000005422610301301410015361 0ustar michiusersRIFFXWAVEfmt DXdatajX (1=KTcq}pP*Z'huBP vQ8+,9Z)r;}EcC(}smcZQG:.sV7W(b-KW^d#f)ߪ\,KO ] Sb<Fr!c#%&'()k**6+\+b+E+ +*R*)O)((w'&"&v%$($#"\"!P! k aeM?517=JZm.Ih ! 1 > M V a g n q v x x w w u q o l a)iXv /da _]ݔڮ؏ןTԳԛԥdPqشZڭRۑ)ݷ=޼1ߜSPx~hN1gN5߲ߦߛߕ߉߆߂~|{|{߀+vF65t7n F^=h!#.%&'()G**+@+H+7++*`*)o)(P(' 'i&%%{$#A#"$"!%! I GoM5$#1AWo.Ic~  ) 4 < E M R U V Y Z Z W W R Q K I D @ : 4 1 + %                                                        i>~GA 0E9Uem`drV0NtE8`MVzݸ܁۫a* Esڮ5ۂ#w!udޭ5t߯@g  wk[PB5) ߂Gk4' M V= KaJ!#$%'%())M** +7+I+C+#+**L*)o)(n('O'&$&%$i$#P#"N"!f! @ `"~dRE=9;?IUeu4Kd  ) 6 C K V ]Z)<( W^&XFsڴٓ؞"֛5Թeս%֗ח!ث=cځ ܔݒ xEߠA'PojV?(ydK7!߾:.Qjl@8N}8m Tr " $e%&'(I))a***+$++**q**)F)(N('>'&#&%%y$#h#"m"!!! a u7aI6)  (1@Nat.F^u   ( 3 : A G J P P T W U V V R S O K H G B < < 6 0 / ( % !                                                            _) ss@' %|y9"Db>\KFTr7ޛݕ-ۆI 'My۫P܍ H݆=uްLyߥ7Tn{neYQE<2)! _/ZAP+H  m&!"$=%[&U'0(()*{**+$+2+*++**l**)`)(((''&&%%$%$#9#"\"!!5! ? {DraRIC>BBKR^ny-A;47ZFt 'XH=SSEש(q67iեA֚kM=ٴ0ڪ#ۛ܃\$ބ.{ D,Kg~|k\H7#4kgQ~/d"~ qx !"%$D%G&-''(<))*i*******{*B*))U)((&('C'&V&%i%$}$ $#,#"\"!!C! T Z)xaQ@8/,+-1:ANWhv #5J\o   * 1 8 < B G G L O Q P Q Q O P N M K G G C > = ; 5 4 / - ( % $                                 ];K Az8=$\ba.2no8k+klP/%Y7|ގ*~9ۡہjWPLQ\iۀۖ۴ Jsܡ0^ݒݿ!N}ީ%Kpߔߴ $=QfwzpgaWRH>:3+# CD$XW:( m  UxA v !"$%%&&']((x))D**** ++++***\**)).)(s(('E'&p&&%3%$e$$#<#""+"!!9! g ) \0 rbXNJFEst f ty2wkpTCN)9iٯsփ&՟rTC@J]{դO֔3׉>ؠa(ڍS۳p%zk޴>߸%V,CYlyl.(P%rj{BT  7X$l !"#$%g&!''Z((J)))6*f******y*X*,*)))8)((H(''6'&x&&%S%$$3$#z#!#"t"#"!!@! { =  sI#}i\PE?9768:>DMV^iw -<J\iy    $ ) 0 4 8 = ? C F H I K K M N M K L K J H H D B A ? > 9 7 6 2 0 - + ) % ! !             J(X m L #TbT& 5uJ~ \~ޘ.{.۩rDڻڵڮڰڸ0No۔۸1]܇ܴ~O؃?AxqLG^ V-b  z K SGqY (!!"f#$$N%%h&&b'':(((I)))*N*}****++"+)+*+)+"+++****~*[*1**))x)E))((b(((''l')'&&e&%&%%]%%$$Q$$##R##""^"$"!!y!E!! u E  g@iI+p_N<."  !*19AKU]dqx&/5;BHOW\cQ2SlE#Tx!_R+ / Y % &  ij8q?m8]Eo&YA^WqD'5Zߒ4ބ4ݜWܠi6 ۴ےoS8!'8Nc|۔۰"Bb܀ܤ .Sxݜ 0U{ޟ 2V{ߝ(Gj#?Zv ":Odw ".:DPV`gov|zurmie`ZWQLGD=85/)&)I{rb-`2 1On;\| " - 6 ; <71$tCM[6U^ Q!!0"""P###D$$$ %D%x%%%%&<&R&l&}&&&&&&&&&w&H&&%?%$3$#"1"h! nDaA Q at)[qA}wu}$R^ mA߳/ޭ7Uۍ4ڏEىU$صؙo^QLHILS_mؐqcڗH ݮޗ߇(]^G=7&tG3e !-43/"TE6a p!!h""E## $d$$%P%%%&;&j&&&&&''('1'6'8'6'0'*'''&&&&&x&U&1& &%%%c%2%%$$m$7$$##`#&#""|"C" "!!_!(!  G  o;p?Y0iB~_E*yfVG7+ "(1;@IQXbirzoDhJ)cD zu , | , < n ~ rK e X(i [>s"\Y,whu9 vbV\s1lf~;<71*  yS*S/!TvwY'8 d !G!t!!!!""":"M"\"k"v"z"""~"z"s"i"K""!!*! 9 f*TuuY< } S %vK$z`J8* #/AWuTnS?AZ*x'ޗUݯ݂Y4ܹܬܤܜܝܛܡܧܰ?ݑfup2!Ir$R~2X):D M Q N H =+W!Z [)@@'Y X *!g!!!!*"M"o"""""""""""""""""r"W":""!!!!k!F!! j 9 {G|KMU(l@jAcB oU># ugVJ>3' #)17=EJRY`eov}rK.UT+1y" c e " p $ 9 u qBbkh \OHL\R+ !J{b hI_)~Z:yvttwy 4Ia{4On<[x *Db~9Pi,BRew(19CLRZbhmrx~{{wrqkidd^ZXTOMHDB=:6A\Fso+z,f.yS0fJ0uL& k 6  ;XP#CQO9x63 J!Nu!3@MVZ^_]YQ;Bpn?,h/CVahmq n k g a XQG@9/*## !"(0;K[pEw+q `|SBAXft/u?sU>%Ay}k'?_G2$")3=HNV_dhkjhd\PD1 x I d,t8LJ2l"xYEv *CYix{paR@)gE!a8a6 W,xO!zO(e@rU4u_H1sg]PF<4+%    %)/47?EIPW\bfntzwT)[4?-^ 4 ( ; k d  U _3S_\N5T%Z+f?s`XXav)Z7/Et5SvR0|oc]SRKKKNSV]doy 2I^u":To &>Xt5Mcy-?Nap ,4;EKQY^djnrwzyywsqnlheb`[XWSONJGD@Ka.z3 K9N|>Ib*v8t0R ^ O %JcjcL'TZ??t.Sw%-5:>=:72*5}gj6q, V w /Kg DiL9a g,ude{ :x!|,`$Y. ~m_RGB?<=AHOfDka|bG zP+lP5a=f4F  p  s T} sC_PX!Kp %/88;;60(mS8wU1yT-mGd?mI* pV:u_K9%ulaZQJA;51*'! "$(,/38;@CHNSU\`djptx~{]6;&H Q Q f 7 = t;j'D2h3@FEB;6.***2@Uq'Y3|#z*I~A`/[6j\LA6,& $(07AMVep 2F[p ":Pf~,BWj&6FVet#+29AINT[_dinrvy|~~{xwvqrnkjhcba\[YTT]m]Qpo:m M;1}&p]<p 2R f q o _ DJWI] >q9Yu y9DtzW } * {  _ /r4s4wDi^ j+cE54@\$f eAU!yT7.md1 +J%u%Am+f$`P u'1#a % B P O A%Ztf<z%X!@\wvbN8! iK.tR2qR1vZ< {cJ0p\K9* }umf_YUNIFB>:85422.00.010325789>?@FFLNQUY\^cgmnsv|fE v . 6 r + V A]o?t6cl_>t ;g&Nz=o?~dW] s(Y`&W*a;n[L=0$  )1Pdt .ASfu (8HSco}%-4:@ELQVZ^bfhnnttwy||~}~{zxywtrsonmligeea`_[[YY^m3nHUiWNOWbq +7AD>6$ yQ  E P C !c!Y$P{ (E_t~K5D X ] O 8  T!O|E}P,qikx H|d d<}C zM$eO:& 4`Z_) }-P|ExFy?g+9<7( | N  u + ' t J>t/Wz&;L]iw}rk\RE4%q[C*y`E*wZE* m W D -   r c S F 6 (   z u q l h c _ ^ Y X S R R N O N L K L L K K N M P O R R T W X [ \ ] a b f i j n r r w z { o U 5  w 9 f  lhLpCQ!x:q*I[ eijmq!-Fg!RTo9vIa@ o[I8* %0:GS^kw!2AN^m| #/>HUcmx  &.36>BGKNSX[^befimmpstuuyxzz||||}||}}|{zzyywywuvtqrqpomlljhiefdbcgv=p*nSVm2c1mB~OMp+85!m@  ? |  O  + R t $ = P e w n F  k ' > 3 o 5[w+=O`s6XL$jgt)SU~N ^;paVLD<740/.128;IZvVjf LiM4~gN1W*[w./~e5 w - d - [  7 V p  " ( 1 5 : ; < < < 8 5 / + #   } k \ H 8 $  u _ N 7 %  x e T A 1   v i Z P B 6 +  }xwuqoomkjhhhhffhfhigjjkkomqprtvxzz|xeK.^,z:V${Y5vS0R H]"h)k-r1|?TxByJnFpN0hWC4" (34+" tdQ; Y4fB#n[J9$iJ)xR*gAxR+kD"rR1~aI.~iZH6) %-5:DJPZagnw} "%+-038;=ADGIJPOSVXX\\^_bcdgghijllmnoqpqqqrtstttvuuuvvuvxvvywvxxwxxxywy| $A_ /W~$O{-X6a 7^$Jo<\z6Mez#.;ENZ`hov{zn`N<'zW3k?`2vD[.xN yS,sS0}`H.whWL=0& 0D^u/Rx:e 7a 9d 5\Eh2Rq,D[q)4>KT\ekty~ytojg`XTNFA83,%ysle`WSLE?84-)" }rg[N?1"thZOD<1)!|l]K9)xeVC2tgWM>0&{ytomgdc`]]XYXVVTVTUVWXYY[^]_bdhhjoqsxy} #$)),.13489;=AAAFGHJKMPPSTTUXZY\\^^`bbbdfehhjkinmlqoorrssuuvvywy{z||{~~~)6DP^kz*7DQ\ju$-26=DGMQTY^_bghknoqquttwvxwwwvutttqppolkhed_ZUOHC:2)!vlaVK>5* xpkd_ZTNJE@>852/,*%$!!!#$&(+,038;>DIOSX`ckqx} "%*-145;<>CBHHJJMOQOSRSUTUVVUUVUUSUSTQROONMKKIJGEDAB@=>;88663/0/,,')%#"! overgod-1.0/wavs/beat/bass2.wav0000644000175000001440000005011410302362204015444 0ustar michiusersRIFFDPWAVEfmt DXdata PDQY`ec`ZPC1qCbEL:vASYWM?*mQ4pX@* |uwy1ߥ߅uߐߒ;MJ!*>LUH*  C >OC~ 0b w U*ho]Oe?3@}w/3~X߬޼ Jۙgq زh(ִֿ֥֪֞֞$V׉C؇jٸ ZڭPۢCܒ0|Uޠs߫o}|"b2o & 9 =6r!C"T#=$%%&&%i%$#"W!8nc1< l)a {I"Au+ߺDAݾm\t&n<%*f u<22+ I!"""""]"!  7 Nxy \ 5 ]:2`OM1W__^4h:B0 z : UD SZ6#(UJwx1E'#)6?< & \I "/2* !]"##]$$%%u&&B'''4(q(((()3)C)K)O)K)B)5)"))(((}(O(!('''J' '&%A%`$e#@"!k4\W  O_*tm5)_ Q* FuܳLگِ؟9։=՜uZG956>Mc}՜G|ֶ.oײ?؄f٫} /p^r_PC4%[ " @xZeSo/BHzy K R1}cn:b=?l> l.6wi,g>z > @ =e|U# !V""#2$$=%%%&&&?'''(E(r(((((((((((((({(X(2( (''O'&#&Y%p$i#\"]!j %*`g  o U7.P4:bl/E܈1ڔ~ؒ){1շՇ_>) '=Yw՚!R֌>ׂRXa߾-AI mP6e6 7 '8?H;3QH _ Z ;yIK08e$m?*2YXot\RP\oB~4t' a &Ln{Y-}1 !""=##;$$%%%0&|&&'<'p'''''((((,(,(*( (((''''-'&&S%u$#j"R!E IRjw2~  s ?a"V8.Bz"PNݏ,ۉae׌-֌E իՆgRB767AO`xՕյ0]֒8q׳ؘ?^߲U}ChA]%R  >X QKYI"sd&BIE+  Y X!C_| I%`/vF//J~!QsZJGJUg~0Z . T x xFE 3!!X""_##I$$%q%%&^&&&'?'h''''''''''''''w''&%%A$G#E"Q!c NFZL $ Lr: zee`^2"HyݶO۬|ؚ5֊@Ցd@! %AcՇճN։ ct!Rߟgi3?i :+ViN  e1^m2|v(h      A)v? ?s kSkW RaA& } `>sC T sg,AB0 !m!!("""#N#~###############i#9#"""! 6 o&V1=<4I Bd9f$uAwk`^cn~;uJX0ަ ݣ*ܷKڃ(ف;طءؙ؛تEن"zG۹8m޶ߕxyAI :isF0N)}4A>/@<jA3FFtZLHObQD u^We;m A }  V ([ Cau~weGM a^C! 9 D D 4  jGE e_&`0Ng~  (2DPat)KpM0oE6H|YGAKe ߻yG#3]ގh,B4_#b<xNK,D:qdHpuQ+;`#_+yr(O!lO<' | r j b WK=-pQ+k8_y+,~j?)HYcbT="pA 875MM(lP  > j 8] KqIx @x(f0yb `zEuknPw^MKPa{@*\IPpGHl)=23IBH|;SgwyiXD2)(+2CUn;r.va i&T(u[G9*$    uhYC,Z2c(ERQBVvR#m%zKcfT4f"|#t W ( i )fW D~5o/n7|W@:I r@m_mV iE-(?`$gUxR?@Ut1IJ<|<9 IEl%(*)$-@Yu@t'hB8?_&_7hP8#uc P < &  cCb6h0Qis sfG2CWjzyZ4`-t>Xc`M/m6 R  ] \ TC0}j`Z[ gx7])gE(#A2i5 3]Cr!~Fn u`,hBq1Li8[}2i`7)~/F p<}V4oUC,{eO 8   t U 5}R$Y AYg;p $A]xwY7 p4^cEt!15/! | [ 3  n<j/V|@g/])e<iQ=9V;_"z^L<547ALcyAt.w ^ hrc4pQ~"Fe -IlG~3tJ65Gf.`3 tR/ ~^@!sS 1  { W . l;p5Zu,3Y 3Z}*562)wGXsl Am!"  l L ( i< p>n8i7n@[:}kifJ{cTICCHTdx*ZI#psh>3h"Hm#5ANX]ddgeb\WKC5-'(.5BQg3`6s:e\ dy;e2lA[5Y4 { R ( f 6 l2[y4CG=,W{2H\gomi\K4s?9N>x6Rfm l c U ? & tQ)l?|Q%iAmN9# &_h%}R- +Ko.j/uc_>;v :b &?Ugyxh\USRYcp9c+d!e?+~)6Qu=n>zM#d9xN W & V @^q$|*~#q0a>bmDBq''m =d      jQ4_=`=jN4 uljo*t$[#n\MDCEL[j2d KkaC I My-Kd{+LnO3sB!qhl#;]#QRW&[) Z & O  r 2K\ dbY>}7Tp%+/.#Z*~>ci NA\ p z   ~ v jXF-lP6rXC.||A3`'fO>3-.42_ $>P^gfb[L8`-x3RT8n- J a p y z zth[M:'xfUD8/%"(3D_;TwM*  <_KI'xg7z'_?d':JYdozyrjc_ben{ ,R{7lXb@'ymqw)9Lbw1DT a  k  o  k  a P6^.qOw+>N[cfaYM<% xHi(Re_ F }  G q  " @Xk'5BQ`q !9Rq%Jx @ys,l8 mZNFDCISap%P~O ON*[ -Pt%9HWeny}usstz7W}$R#Y J Of?!lT<(wdO5jJ) r G  [ # c ! ] J$Px%6K]lv}}wl_M6l?o2 t . S k  q  i  V;yU*a2i;rG!_C)shfs0s> sY>,-?Tl:c&\Dn=Ys&.7?CGJNMKIGC=7/'"-7FWl 1U|'U W8v-n1r= P$k?\0vI]'j. q . l # ^ G } ! P { "6GXjy~qaM3 f ; o 9 A  u / L ^fe \L9"f M7|f TI>=@Kj+T)|ma[TSW\ep9]9j Bt*V{%?\t "),//0/,($  +8K]u!Gk p  : Y n !(.-.& ^ :  [ '  A  @ l ! >MVWPF:*vi]RJGIRb|8R"tZG6(!"+6HXo!Hq%YEp%Eb"1=FQ[_fjlomplhg`ZRNLLNS\dr <]>j S!U5o[M ID@;|6r*dS7 p  J ~  M   = f    - > J X g p x { { v o e W H 3   ] 1  v @ ]  \  Ff~.=CGJGDCDEKUex-JD[9-Ih$O~;h,Ll 4EWer8QqAiCs9l C|$] H5s(cU E3lR3h @ t  @ s  3 ^  ( = Q e y t W ;  U ) \ & t 7 s2`:Tjx)2?GS_ j~.Db:e$zKs^I9, ",8HZm;b 8f 4Uw ":Obw+=Rj:_#Nw2c-`6kK-fK2jN.c=rCw > n * X / P q  " / 6 ; = : 4 / "   k J &  Q ! M  a$bP z1To#;Si/Id7[ H Y d r { ~ x l _ P < (  y R +  ~ P  K_"c!YDm%Ko'Ik#Gm'S >r3p.~K]D)#6Og#JpAi1Lg '5?IRX_filppqpnkid_[Z\\aio{ &?YzAe.Y 9f'WQQS"TOFw5bDo D j  & C ^ t     s W ;  ^ 4 xGo9L PI:l'V<l$UCx9u2v8F{R)paWJFD@AGLU_l|>^;^0I`u#)26;?@DCCD@><63-(&$',18BNXjw1Nl7`'U}3_L|Br :m3h+^ R <iItFp 3 U w    & 3 = D J K J I @ 9 . "  j J (  g9M{C ^"l-r1o1k)d"^Y[^ j.~F h< y^E+#7Kb{1U{1Qp%9M_r '8H\p @^})Os:` 5bAm#R 7cFt%O|$OyAi#Hm 3 L c w     y ^ B %  xS({LOw?Wg+r2w:}?BLYj1Ln; bA!{xrqtvz3Mi)Da| -@N]kx -AUm @_'Kp+SzCl;c2\(Nw;a@b2Rs )Gb}  nS; b>V,~S&l< {LV'b3qBW)sIsI ^<vg`WPNIJLMSX`hs 9Rj 7N`v )07>DJOTUY[]^^^_\[ZWTRTSVY_cjqy%6J_r(=Yo %>[r.Jd6Og,C[r 2GXn~ &,26<CEFJFGB?81(  t`I4nR7nO2z[=eH' wZ= |_F-hT?, -:HVdu )07>GKPV[`bgjmppttuvuxtuutpqnmoprrwy*8GSbp} (;J[k|#6FWhx'7FWer $/<FOV^bikprwy}|xrkc^RJC5+|jZE5 nWA,iR<'zdO8$n[G4"yvpmljiijlnpwx ".6BKS\clsz $-4=FOVais{!'19BJPZ`gpvwrmgb]WQMHC?:50-'$" overgod-1.0/wavs/beat/bell_l.wav0000644000175000001440000015624010300460236015674 0ustar michiusersRIFFWAVEfmt DXdatat=B_upW:" yFPK sXPPRXg{:}pp,FcV{z?.ol9r  e v Z 8  ]  g/"?~LSQ$x{CMj.rJb7@w Q X A  , " b :^Jzs_,rF*]A  . "  % 2 = B ) l FY`83Z:p x3d@Zi76}+ { = " N e Ap.)=G,gA(mR#y: m+(:KlD![ / @  4 U V 0 :HhE XZA,T.t8ZdS1$<((}% j # E ^ w 7 D H 0 Jus.J$|E+CdskJ }P@]@28,* !Wlf_j* j :{7^V ptn cb? %C&!zBIcT4 z  3 U t f  *A\*s /kNn EPZwsjKoB,Y)n` s9 f< s9Z/R}s09I O~5&ofO4< ~:v   o  - {   7F( ,j.+_GhH1 pMXiqL) R j i Z Y r j EbKSwdy4>eG77g UU78Bf0cV}   \I7l0vZ p`o}#ZnHN(Rw 4 _  % P n Z EL/2lzd(cL3 J;fQ"K3:6gz.%C  E t P=eHQ)|p?}Cd028yu D \ . "  A M M 3  ) `-i&8CX89\fW4n[{}*>bpOaC ] # 5 zz^lYKb`9]~$yh TMWFk l ?' \ l > } TE1PH<;!N_byZ}{BS9` 8 ? / <  h   1Lk.51+!%2wF  ~9c9~d[1d<+DhIV.asxGw 4{1gJ  02Wig;S?bh(&fYQQT dB?rY}  8ZmyP@QI mjr$WY:% a#>jerLv>/roKlf P  m@DbZ8f.ji}EoI43v:HL>+nv/c2 -!/ \_RT^h%'?(L}[]QF} sS   = . q'+ug^"<}p*;q:d}=U q(VWy'oPM C i#,"E5$0^)2M^>MQ3 / s@BZnkY P4]~D}+qKTiH^7(cQ4PFYS@=P I50LPN.^Qw]9VLdq&RZT'` [ AZD{w tK+9ILCwFOM -=DW! 6rPQg8ibaX%m/M 8>.kty'iw_>iW*o6\2nQ153 cNd-I!(;\a<;9t0P0&JhWb(^Do;sAYX|)gIlW%b4"_oC_)y7(1j9M22bwPi;S,9;!!,%Tom_zb6 5jRbZ= S/Qx;m#4c6 bhgOvp$xPL`|^ec  &Cr`5* O jNbGj%xf(}Q]2 z X$DJ7)|hUb)?qN|CT Z+&t7,:1{cY7XcC^*/J0qkD#X(x^-K'AE/S-,hl5:8D|kD]r+<tq0H>Q/m |V8Z # j{Q@.E&2?/X|)S9}m}yryi772Ur Ra~pS&[R SSZihH7 }Jht ~LD CQr.$yn#J+g[4kihcH@-:xgy;'90 s]gy578Wdrsenls_kG,eLn'8CWVy6g]p2|Rp_ j!((39Fnt v qHWOLf#/RZ-:ATi_/F /A FWA3 +,MZG\vPSjVpD;,RD[]J&yjUh xrKMDB(O<.+Se "wovE M.(~>~wZ[0U{@Qmr.c8gz4yGd{~ BF@+3NX ''01*Ub+s!l6t?nn]lR^@?} j>l3Scv`(7$u)zyE:P"Hp!T_9ZErlSq>c"v7Ud2!3@V]HT$)GQX{?V1Y WeGVG[#9|1R(/- NF n|CZ;-DgG7JpP '|\Czm ^g#<\^kA#W.Q#2?BVt}S8 JCzksJ l~:"Ke+SW&afP7 /t >V66Q Q| z:2,Ro z- { &^AI)>oH'b+(s:e hg? +|:Db7:=*iPml}}$YZW6y*Q;3PK}m}kdoW}J`2|L[a sj[%02 5 $,@W>d Xs@Q K+uMc&3xD6Wx->e7cKEa'<SxQ~y ; HWHUsvop"TMNd8QA4U[I;S@dT-N){oz=+;'m"#P;C~:~`b|%yoa:ZX5& R4<@.ocay9-acPSTu!G:g]]7EowP*UKnZgT #Y4kR\HXO $}|'% ~wB,+^<jZ/B*dpLb%kF A2]u?M^<4X8 Pr-V9-j i!(tV"VE$6&:%l8N w e<6O1[^:iq=&U6/=Sg1^6DJ~Z{FacgFbu CC? viz)Uja6I4la}=)`M)D0wTu<4IQ2dG!Nb5Oc.!av:udQ]=[(2VZjBo8'&qU%p&/=tY?EQpw+*CDUChe.CsQrwu[pgv"7;$::@W](uf"}8Nnb({CB|s_1tZq[k-18XI^F47Qo[AemXN}LC '5{c!hxO/aKwgIq Y)xmc88?gH|@F{"Oot?243ZQ.^nWuXFN6[4Y:`bGwgqZ\4QX1-.z %8}smb j V@v[[Y8N KQ7ZB7+0'&}M7eKT54&GiI[$xVp7k:W/oQ-S6,*ti/AktFm$T# T< ygE&9SlfRvF//OR;J/A~f7Ag`|h{f??wj,2 YiCbn"\nx_{,Gx DW<KXo$TzV-y*)TL\Q_H8 kho(Lv$^GBB&`+Jk'C/|%w:+wh tBzsPEhaR{5::wPEZ6 hq&Q|8Bh^.YQ|ttHy~$uS#XOpQXf_t\}SjCdV\XBZ}_`R]Te V$JfN 'B$Z!riIQuT.n>mIl|^\c+8`Z<)_Jr#=^qIu G`P@iuq3C1y>8pfHUp rL5*Q:XPC(#- $9ghrMj=WO: =d 3.`F51)y-[yNuv*sq1Hz|$<QI|1DJVlJ[&#^u}d\z@3!ZEV[P6\Fp=i# l~+M{\VPUAm*Ntp# P 'C!5K k3gMK\?vi'\C_(_T1kMUW uGh(3<AQ\ws|s,s?Z>X CM8jo.pNf~L,d 2)hmNkmBPC0AB!P`]XcZ\Yo<e_<(`>i:[u5O8|^G,87X5,''Y"iaW>&n<jn%l 3#@!1c 8!83%h.n#} ve6&`Aw}2;ua5TT<7&5;=8')Xa7mbW*eeK|Y_K&)gi {#J$iPKIh>VpESH1OqXK%7 S[%+=}fmFn@IF_W :AA3}|=A%I/|q$xN-wm",RZ6pN{L0rY 5gOet+7g/KL`&O6Ty0GD~~zd1gk@jP4SfS{nWU' iGYbgu]^{R os\k.-T_A[:Smxu"7>LQ`[K:`KXs[B t$Lh%'JJ{NXp0*50HHH[Ty1Cyd RGc7oX2~+`lFt>r=KjQvtPJ}4A=~V8tmfa.5FhRd~ 79"Mw  [\ ]8eOU%Cm2)34u +7XRTx@ 4DRO'H++ok0}r?F;+W }Wj)%Ug-kY#K{J7t yvryMmo*oOd QA_s4Tr7jM$~`|\((W|HljK_WN%le08TZBd>:hFP1dtu wA5Yg_tPed' 8]& B 3B<]CIGi\ Q1PFHh+P\gPj >'w+h\[3lb%Sy>B\B +DKreD>oQK=8hoNB F ni 5C1I)rZut YRlDt4b@1xgtQZkF[DY"`UMF i um $n!gvxslm'/ Dw!oPx1HVjwc#iKwnaA)8Be7Tw[Me1h4ck9o #XJJel5eNUPM1'l<xwT_!P)0wkgFoEO.V Qm|nBu:y!I1lw-U;}H\X&cV K*/[W"CdEY< "mRzv&Y6NH|Xy@/w(BRH&t n 8?^.!mWhTHi!j9*Y^( PllTVmTX3]i+\?e-],0{}7 v'"Z[a9" hO/4&3kHh-f+MbBcTOz3ipKL@ r\\lVjQV6#;MO,fM d LTG ]yDd35V{grMK 3$y{. zx_OdDoc:3a$ |q (G%d+(S3-.9nCa;x 4jN *]!):Tp  .E;^8,"1F]5a 8%;:y_ P6*<hZ.u/[R2'n0G%>+ba@19evy$U,:Td%' ;1)|`, #t_?2M',j~tgGHgxx~^Fn!|]vR/ %E%2e(. MW XnT>_ti>%=-lqBf/eP_ qXG?r7Qe:?`;zkn I/hV|jVVd7TkW/wV_B79C:ItcU"q t(b~g I~]xTmwP@!0Y6-;U$}(/pFQ,DcA`$}>.^kJv@~Kl x_^W)>,^c@D(2g-4qD8")/P?&Pfmvb&^s#Nh":IBv1^"[,kz4U Dr?QnicfQ" ;)wrm 1poss%|fFyR|& qG\Fp2[F\8x$!u$DzS . a'j O@vuHY. 9E`0yq~2Y)~qF  veFW?'B4+AiE<-u< %gP0W^d{]X gj%}.8CvWrGJBQN16#kJgz}E]*N/emFd?pZ#UA?'{iSZD p3hDR{SIRaukLVD(~;iFkf,i> uyE`nVK} Uf+a}Avb3K3O+}OKm[4(kBO01)V~I%,gbd RC4)0.+r9)o4=#Uq[SJ :L<2sbOt1B4:=^DX#*%z1e(+LEY/M\ )+n@ay2@v;F%=1dGA. z5' \p0 mFO}8L*xr_~Z -17bvYQzzyTc"n V /G`Y_HP=m7a4YwBb \95*{aKX]+#L ?[EJp v_J@f=F ZdL$H~n=*HJ4_8Oj805_~^Kz^j4Y+9XWm.Qu8uScA2LGQFi19MzHb9zZ6*")M cH{ZFbF4EaB5uknRxj5cbU|ryjwSm.b:e-AxE0]: GR V^_6ZRLcb;[~|vfQ)vuNzz=~'?"'~d0~$& RP.FD- . ,L2bl;EeV*-MSWir DDSA0Bl7>C#FVtposQ|bo riVy '? X #KAgK0P<Cx2>.2F9cBJRU{y>v=`u$vq'jT]yPu0&+"fu?>Qmp%)vcN=jt-pxv,{Tq%)8E/-ha}#:R_[Uw+=TKu@aiu@(F]s]mpN[&#Xlun16a$O X! p WwCyt UcQK6/ j7c L/}#__:lS 6#lWJj2V4Xt!:$(B8Ja.]8x?O>O";/%"YCQ@'ee&*4l:!zn{lpRE\2hro~vS[#h39t_jWEQ)3F21-,NB|@b%I{,+LjIjqQ/8%1E55)_e%f?1QuB95'xYrr\qUn?#cw&C4G#|`tbi|u0vZNa|t "$HnX[wr~~] .:cb SajQ<4TN]oywDJ{./S/Lw+cXH0&[*ugF Xq} 6aB,1 FS ND=$e:K kF9\Z)"NDV R<6dO%4gEBnSY>k&Podf!G])ApBH&5g3i+c/PH%z}Yj}?/a$# @jjg_Y}lU u\X#j}C:i?]'m"'O~ 6H"@2Q??BLXA` }Zstj j@ ;0oG6OQ(N0Wf@L%r;e?\SZ> Jg):R@9KLoA3k6z[Z>Lb$= {KBgxu= -a[5V~$(ubIy]t0x,j!*M@'hR[tL(@IkeqtrN *p|0=z[7?_j@ 'XSeCFF~gCphgDT>!$ A'nRF(a$a}Fjo+fF`0`i I;,+>.lsQdxeCstn,hivw~WFq34D{A xvSFeIe#3<-\(9'J1b7-{:qk!+iwqkP=o+%JE>Rw;d(yc;36=V pa" O!?Ncz,\85j'hK`oGaK*|EwB%sCKL uram %_BL5S~YRNlvE2-|N{|P0N74M Or^I/CJ7JVL;[p]ROqTZgyT9?#-ZMJOJKy]7H4UDwr~EggIG'&W{SY`]7Yl abmWKQ%d+.%l! }:piF64"TjX6SA`?x]~fE]yKu4 DRP;6( DET0_|KKHU .HzS pd)q- t+S=1om"[EZPetF>\c;QP JR=c]/3XOQ, :e@##8wo"I!vAbE%# 46ng))x2O}t\QWW#yd,,FKv7cIT7&Cwd`~ ]YuPj,$Tf/(RKYtikb <}n]UatCE?CA^O `/MZaU{~`x m_IMiPA` >!B>9X|vEL!`.ZGB'? 6`)x|22 (Vvekh0>?^@WZ;/-7 .]!RpG^\yu#~8_*[mVPd[km<,&D &iY\saTIW[QL)TX`TKLFuKl4UP | ;-fYWomw,Y0H=Z9> ++/@G'!jp JM@Jw"? - 3rD\b4SHG 0{. UDL' spKK{zgpQnqkZ|xUhP F&v`xmI44yMFiGy[@hX+FHe <a1NAGH@A $2',Kzz%"8>G.]WB!ISC~_D qkb+x j^' Nl'za`[" :Ca:? Yb--<x`5#;~  o xQT3dFY/zV}v:=)fc(C">0M {}t?NT)@TE\[n^,O7_G#j|gDMoZz-S&!DO?80[<~p7ZM]0)ooCZ%/'"S%WemUTz]?u%fU$ipUs2o^mes\>PJ06\U ^)_3DP,!y_JEjPGIf>4e mr>& 5g#3 37 $b>Aq*6aL? Q|m8D Q4gl4E}qV" 6kWd(xN;^4m7:> v2e  (5v3w{* 'xWdQ5Yss 5Qv`O!G:2DUpwX,#nlL4tKbiK?1X>c'}~A I<$=iH7Bms (ff5 c:ua C'$# 'u|_ C\G m{d(3M\ f*p} "nE;}*+us:_4 / pzbapo,~vYt|t7E prgOcF[E'y7CYv_h 3 ?v,BJA33y2y[D'Q/*fRabI! -(?lQJq~;3 vs#1&p1H@md}$M:pw:AM -R.1BD1b&"!317KK(SwDR5<#AKD*cU.^Z'} U zx>K3\ax\.@aJ$dx.9>+~;%(5``'q<9zqC%BL<cO/49 >l{S!+i3cb4rnp|Z?{|0Y:=vy{hSP da<")KrzX jPn/|ej%!O(&lZ6dw!E&7kj36s ITI)4|&yFR}UoUMVI5=OxF']V *ef-6!zS7m_mBKr{%RBG({*HDp7,@PM-QI'Y=*xRc&vY[8Fa"! +w\sdQa}`!\cW`s NfI>A3WLV *C QyIG[knoIsn[VbhOLpe)^f! .nhc{b7LR-l!+NCJ2}gf&jtpfDjKCQO}iJWr u} ;%G!h<#_%^ (~ZnHmWnUfj4^r s/b`:O9;+{B|CD79%X3v|xI9`b$,UP#1+1"atSX1R^D'5Ta]Pbl`OVsvokSW:o'$ 3  ~:cz\0"x2?T vG-?8yOdG_9/EX@ +K5=cRS[O85<e.1 7)LrX4P$D 7v)8 wwr>Rz5UGqB@xf8{yBNZh*C{Z2I-!x%oVQay7#.@*cKf;VoD"yicUy(5e/$9ZkdF[dV.~R8T<]xw!m21*! Os(VK >$oMJ=e,I^2Z`fuO#9\bniUk3"_l?1&(;({uC5;98'VRKljEVWiVO}=>vgc.n5&O84+^u^Ud|s{F&y(?"*15A}Klxkg~g3A W}8w`}KA4)T`GRtoIXrJ * GHU/#G5s 7?7))$"`IcAaB|4A/}K"*z J7j(SoE,}Mb.dsRb;N4y6R(@KG/%TB) ]Z!Mk|&y>X\]dW] 6+p J"jbn%=_fP,BR$#?.XnV}eC$N@l .]C#* oqu 4leU_{l<BDVn (i 9I=*(J/sW?3@vj2 SF2B(C5je cp"=IseS f'#@E6FG- 7tvL7 SK 7t2MT:gi<tZ0)\j!mOO_yz`+'[J ZK.s{<%ax=k,1. VF4KpA0F<fD&G]aTELs+B+h]Vrz[H6RbR6 ",`oEqh$>,q=!  010302:5"Xn6 finUVy}>#(8s56I()]t!JPG9n-Jc?zr >iG40SBd >@;h:u^c}JosT%"Ln5]P+x|.2$mQ;/#y[ @6 pv4eSB3DB_uc{Xtp4F|v-* %GF+x 0a2VsEw;t|KlJGGA4>_epHN^gRJ^I|dbt}A o7\NU~"%NO-arMrE0;/6@j%h=:cSW"w[bDi~=NBTitm[Wu^^!=#`yxTcNQl# "N7.2@m/gg.(mdegYIAjdz>D-E  =KH3e@79eqW'JiFu~QXD/i\oD=[0l[YXZg2SH{q?vi\UYwwtk(gp /MgpT z,<+9VW?%4*<}2!i)N+l8sg]mHHY`edj)~W hl ![r|O$  "75rf|S>mbo c6J=(%tuD09Sltd\l1H[ \Dy_?DkAs]i{N[)?3OheF i |AT-Q8la_g d , d06#yWV]b]_|CGyNpFDjNf:Ln|~k3R Cjr_AOFTHZdb]mgj2^8/Rx d=5Fx Gm|qFyLvnO@_:WzyN c b( vk}EA^IA?QuXQ 9AtX3_upjflsoV#q^mBSi#<E:h ,<6# IuuqiJbs-js) <sf'ie`aas#ll??zS`*+5  !18&"|L !! v!0oY@;Jdx|uug<qT{E$!<w={:i}zoL$.hcFV *KSB0? _qv^ML_(tj+(o 3@0 rt }?gtx}zWlYcnC#Z3@@9 Ly}o=_tASQj?0<Zo2QgWKELe,u}J>e"xr0z#:60/9KWQ3;Oe5JrkK/&0OoK!]}wFm74gd'Y|wodNCyw@||[X['1d"| ! r$l\\s>@$] vp|QKep~rE[MY}'rB08X,>DA6 B(Zqy 2\liO?=h`pwNmZRUo?O6PA|sC V,69?N\aS+wvi,:D /Tb_G- 5W{ :dzza.^13g;DhyznbYSFh~w{ RdTu+Ll }t{|6^ WQ%!I/%FZenkQ#_@6DjQq\b/9;52 dOzrG 31`3{vzjfqs]NfS3:p @ZW=9 !*6DQP; oY]|6u16m  P;IA0*It[2OYQ6zE,^o6$EcuviTF<<3'3wkQ`Sc*#i  tTLZs~I09|^,!9ks'=JOE)p;(Qr"+/)%!y/ ?}xsp6&jzZLMZeX)y)Sh=5T !'x $1:7uM8@aayTHYy b !/,1Y. U%KmQHWm~eJ3-.*CZzTT}T^2_    R3+8YszWb"0h j4%N||x\&%G.fN #790'!E*` Cq;JaB57K\]9Y!F(R:Hu W L&=q7 $22.)>  !9gQ[).qzrQ:15:,k :y_Nb3<4@uB (Gli.X4%+Cl G 7Xu}pel=f-Hj7-AFB3'$'(d)  %K$Mvz_8 $lzP.&;VbMO/!$5V<IG,vKJf}v)ua0 T[2CHHEB?.p5#&)Hy|rXzU* HuP;2:EG)S4d kKOwd    g8 :c~N fZbz!')o:(1Majg_^hY}J)iT0"3FPN@+"-/O&#3Ip -=1"DPF- Db5$H^[4vWMRh6L\aQ*s[fts>oC,ft<7JPLIJOTR2l@01598;Lk~enIacW? ehD,%3DQIW4$%2Gj(/#ZI\0~Y. &Ot~f1#*4/gC=KXab^bp"f[1 EqO<9ANRJ3 !.&T;59BWr">MH+ [tH 0R^Jv} .FWgljL}wvzDwlE! @x_;%*<P[YNGBJX]N'vXNMPU]pldz %,$ :{[8#)BWY@ jXP\q-62xYXqJqH"<dysM  *."cPPV]adn 4duY9*b~dVNQVRB(#%`TV]r +GWTB,duV. 7NK)9HTbjm^:AbqvmY>RpQA=EU`b[J>;?OXX=tpqupvLzU45O[O+-62!qcl}z}\~]= /Tqwb@ !j^^cep| :Yd`Q8Htrhc^^Q=!omw.FSVM-Cmx`B"$AF5'5=CKV_XD=ORJ8  =d||o^OJQZc^SA0%)5CH< 0b~a@% "9KF.&-/& 2]{_C'=Zg[E(   |v{ 2<:-.Tr||skg`YJ20?LOH6)Lcruvn^F+(2,#,/38EPQE& "-0$?Zb^TKKNSSN?.$3@;(*03* 6Yqt`I.  /CG6 "',3. 3QdondP:!3P_]M9$"(($  @Zhmjf`]PA'&19@@26KX__WD/'( &/9?:%  "9DEA>?AA>6&  (6<.*4997$5IW]ca[L;( 4?<)#&&'+21)):BB7' &?OTI<1*+.--%   0GX][]VOC4 #'-.'  #8CGI>0 $ "+,$&$  "-432111)(-'(4:::8+*5;<=5'%47.!  %%'$"$*0(  %8@?94/335/'   !9EKLHE=3% )255,! "+/.$%)(%%"  +33130+#!)&!(''#"#(+)  $1431202.( !04754-%    "&)&    #(-+' "&'&()%   %$ !!   ##"#"$     !%'$#                                                  overgod-1.0/wavs/beat/bell_s.wav0000644000175000001440000004253410300460302015675 0ustar michiusersRIFFTEWAVEfmt DXdata0E<C^unX;! xFQK qYQNSYg{;tY,t;k$@KGB8'[<\(~2q.{J3V+~TgY([l4aLHZ+op]^iyf9|oq+FcV {y?/ok6p   e u Y 9  ^  f/!@NRR$w{DMj/qJ`7AwR V A  + " b <_K{s:@2cb>w ogSy_hn /  cD-i J ~  Z  r }7$i% Ys(Va>^,qG,]@  0 !   $ 1 = C ' m E[`82[:p~ x5~dBZl55~- { > ! N d @p.'?H-h@*lS$x9 n+(;KkD Z 0 @  3 U X 1 9HjF Z\@+S-t7XeR2#=()|%  k & D ] w 8 B J 1 Jvr.I#|D-AcslK~OA_>29)+ Yjg_j+ j <z6_V nvo dbC"D(!{@IaP6 {  4 U r g  (DZ(s .jOo FMZxrkJmA+Y&p^ t: h; t9Z/R~q06G N|7$qgP5< 8w  p  , |   8G& +k.+_GhH0 qNXhqI* R k i Y Y s i E aISv ex4 =fE79g TV4;Ad1bT~  [H6k1vZ o_q}$ZnJM'Qt 3 a  $ P o [ FM.1kye)fK1 K:cS#M1:5fz1 'D  F tR>dIO*zq> }Bc.17{u D ^ . !  @ L M 3  ' b-g(8BV:9^fW3n[z)@`nP_D \ $ 6 zy^kYKaa6^}'yh QNVEi k A& \ j ? ~ TC0PI=8 O^awZ {@T:^ 7 @ , <  i  2Mj/61-%4xD  ~9d9~eY0f<*D hJW.`sxGx 3}0gI  /2Wig=Q=ch&&gWROTdC?rX  8YnzP@QJmi=GZI b6lesMw=0qpKke Q }!mAEcZ8g,kg|GpI62u;IK>+mv.d2 +!0!Y^|RR^g# '?(J\]PF tQ   < / p&-sh^ >}p+:q9d{>Tq)UXy'pNN D i%,#E5$/=I niI')Kyhkr Ds<R - FT[tNE))Iu]}&Qg |B^ZF K >Po{n3 1?gz=_&3L]=NP2 0 t@C[mkY Q3\B}+nMSiG^8(eP4ODZR@<P I6/MOO,_Rw^:WLdr$TXU%a [ @[C{v sK+9IJFwGOM,>DY! 5rNOg.lsy)gw`>kV)p7\1nP/62 bNc+G!(=[b<=:r0R0(KjYa&]Fn<rAYX}'gKmV'a5 _nC])y8 '1i8N21cwPh<S-;:!!,$Voj`{a6 7hQc!Y? S0Oz;n%5e5 dgeNwp#yOK`}\eb  &Cq_6) Q kLdEi&xh)}Q]2 z X"DL7) |hUb)>pQ{FS Z+)s7*:/{dV5ZaD_+/J1rkD%X(x_.L&BC1S.,h~k3:6E{lD^s+< uq1H;R.n{T9X % j{QB-D%2?1W|)T8|n}yryh744Ss R`~pS(XR QQYihH8~Kjt }KC DOr/#{m#J+fZ5mhhdG@,:wi{;'60  u[h{369~Xcssdmlp`lG/eLn)8BXVx7e_q0}Sq^n"%%.3Ap{ub BNCy:SsIt3IQ^ds`*W .A\ ?~h 3$1+O?04G-OCI+;KP/d,< @-drdY;>] T91_)5P_oJM/i}P MLs6wj- v"wa3;,AM/NcpcKs0 4"&K1^p9$ ,TNz@IR)chiN',$ # 8 cM>Nt6iP1MJ k1m6ag=Ez3V}4YEnkpZI6vz^I)f vxDy1D/09Y7kWh=+1j0Je$$wHv,9zvIJ cn|kF}*43p : \#J>.kaPf^5o|;UJ;^s6|S%Zl$l<t)`>3 Od6~/LA89g6s4& lk%vG ;FPr/bUET:QP-_*y$v__ RHK^Vp *p]K8|(12Z*\gb<*>Ar1>  v9SWUd~OR^Y32#XNC>Vf-.ouEBK@j+<.1 ,"HA:&la*:5de#y^;A&<f?lYm^}q,V$/m52s8EqMI^(B eE!_#l0}1&p(G aO.A;.F)>o]-'p \pA3lmRUWNC"<_sY4[@DTH!7WMu@fomP6;e5_Jz;+ v \~lt1OHw?6IcI6o *}6?I:{$c!L OEX%4kwsNJhP@3Dq6zxxs-N4[ve5< 8D r)rYS C~*2FOjAA#u+cHnucsf~EyE:?9a*(S5PT)yp7cC\(k\(M;WW 6QEkU]@%/ Q4aS*4^S4lR#%G\,@y2C$J/6iOWopMn."a2ewur2HG')NE%*".rxo5fSlIaM@z/_^H:mcsI;XtH7w{xPT)&4 T.cGC&FDv0y[L(Abnj2BM,zf0dKAcIe /F:3]j(7Rz`Oi6\*d %]!M-Wa?7>!|`y^32 Eo-3arE\=w)LgX-l()s3nR5eTfD$c6*Vrsu@EVqq_]:8_Ww!*OQ5%o*]EwR2~gtJK+Q P>ZiamG k98>Vd4c^aE`:w)1wFz  \5EB Q1wn}OPWWME]_@B>:d[ByUYwACv{G"P/CyVY;# B>Ds8&Cr2lyQJB8#)S#hxW3 u9[Mjtj~U_6T(O*<c$l~H %/  un7z]4,lt]0=2.0==$W-&LUo>Q1<YW?i )EAp u:"/Z"(rs;enN>7#vIP91B+CA3'(>Xg]3<<{^Wn5w$7 @E+  B B XC6[1$=m'w< :tq1ODir_2]1.RH+yM72;V Jud)y1,^])#-Az3vC AL8yz)yD;I[daP<19RqkH1>q=XdbM'`UYr:}nst'vgcckx/1$zC2GwpA$)7Lk;sZNRlt2Clf=tPNaz~ePCCQdqvpfdz(Rnw|xiP*OmJ4.7Pq|tZ.vsvxwx{w " Gsxlglu}wiWHCKYfjS)2HPL="/IUWZVUK<$ -La`I- 7O]bb^YN= ,BOJ>3--5=JLIF?=;?D?2   )1.0/01-'  -41% !&*)$    overgod-1.0/wavs/beat/brass.wav0000644000175000001440000007653410302362404015564 0ustar michiusersRIFFT}WAVEfmt DXdata0}%Jn<^2Jg 0CTdttdSB,pS6pN*a5 S!V |ASyHwBsB wE~LZ,oB`4_4 nH mL* rV=# ~reXPHA?<JTbp2Sx*a+z1  6@ m " i v<8Resul^O@.sW=zX6 z T +  ^ 3  X - t F  X & d4n:n<m9g5`,X"NzC m9c/Z#RK|H}INW&d8}O"oDoG[6dE#v[D,}vvux}@j QLCM C/++h %>Tjz %,3>GR^jy +Ms,h;Q4Cy% H  d  :y(6AJPRSRLG>3'r[>#iE# l G  ~ T ) ~ Q ' q A  W ( f4o; q> s= o9i4`,V#OyDo<h3`+\)[(Y(b-m= ~Mh: ^2c;yT0eE' mT?,-Mq9|q@9_eTDAC};Qi{ !&*5:FR\hx:^Y0K6H0 Y  l  {W v_E.`> k E ! Z 0  [ 0  z O ! e 7  wFOU$T#TN}IvA m8f0])V!QKNPY'e4yJg9`5 jBa;xY;saL<+%9SqJl12r"Qo 9{(G]t "(09EO]j|5])gPz=P  q  F 0CmyfS;$ hF' | X 3  s J " | O $ t E  _ 2  sDOW#X&X$TN}HwB p=l4e0`,^,`/d2n> {Nc4U'}T)a<`=bI+|k[PC:1*%##&*0;IYl\t !*7BQ^r<iG/\Wzw- N  \8Tj|ym]N;%}aB% ] ;  ~ W 0 c 9 _ 2  | M c2qA{HMQN~LyFuA p>l6h5d1d3h5n> zJ[+rEf=i?{T/ {\9mO: xmfb^__flvDq hsTbDj$,Ci;^x  '3CVi~ Kz,tuMJuu) C }  { 5x5CQ[`cdb]XPE9, nT8 ~ ] :  _ 9  p H  q D  c 7  {M^-k5p> u@tBqA q< m9k7g3f1d1h3k:tBR"d7S%wL!{S+lF#xX9w]F2 2U|WF*t#MRh; 8a !""" %6Iaz._[a=?kp$ ; l ] M  $&&#u\D( z Y 7  c =  y R ) V + z K  c6xJW$_.e2g4h5g3f3c0c0b0e0h6n? zIY+qA`4[3g@_>uV:mZF4% 2OlR'}H=\Sz.}e1` !'057:;;;851,)" (?Yv@yBN/5e j! + T = !T{p\H/ q R 2  f B  [ 3 c 8 ^ 1  |Nc3tA~MV#X(\'\)^)]+^,_.d1k7qANb4{MnAmCzT/ yU3wY>#rbQD7/#"(8EYn Sbw5>a >1$[ /8CKOTVYWWUSNID=90'"7Tv#\*~=".c m! " B  u !HbxrcS?) c I ( e @  b 8  m F  o A  `4zK^-j9 tAyI~MOPT!V#Y'`-g6q@Q"f9U(wK!|R*gAlL+ x^C-ujbZYRSWX`jv 5cY`@J)CSkX)<IVchpuvzwyutnic]SOE;5(  }zyvxx{4X} Fr8%:{#9 - =  W /AR^cikjhc[RG:,  l R 4  } Y 9  ^ 7  q G  t H  j>X)m;~MW&`.e4i8m:t@ tE{IR[)h5yJa4Q'yM%W1oM(~^>yaI4 5[&g]2/WU t"]Z`1G\ky|wleYPE;-# ~upfa\WUQPQQUZ^hrClE+ZSwi + ^ T  M #).+)"  { d J 1  b C ! p L % c 8  i =  d7 S$j9 |KY'b2j9o> vC}JMV$\.j: xI\.wGj>h>vL'lI$dC& taM9'3Mo"\8bZy.G BA]rvl_TF:.yoc[PH@:6/+*'')+/6?GVbvFv$loHIpo# * R < $ U ~ s ^ I 1  r U 6  j F " b 8  n D  l?]1wG\*i:vE~OT$])c1i9qA {MY&h9 }Q!l>a8 e:uN(uP.sT:m^M?4(#/@QiK X{n+2H]EireWH9+}odVJ?5*# )3IYsJGN*.[[m  3  k  C b w  t b R @ ,  f H ) f C  e ;  s J sKl<W*n<~LZ(e3m< vB~KV"]-j8 xGY)pE`4 Y1a8uP+zX8iL4wlcYVRNQTWakzIz64 8>X/{ Cq  sfWF4%ueXH;/" 1Gd+c-?"+^es  % M  - A P Y b h h h d a Z P E 7 +   i N 2  w W 5  Z 3  n E  tFl?Y-pCT#a0m< wGMY%b/l: yHX'k; U'tJqFyP+jG"yW9t[E.;c8~#^c:MVfM+4:@CCDC>82*#}l\M9(xhVH7' *Il#a?dXwey# Y T K   & & % #     r [ ? ' u V 4  b 9  x Q + X.~Q&qBZ+m<{MX(c3m; wGPZ,i9 yJ_/yKmAk@xO*mL*eE) v_M7( 6Ts/lR[p&}%?/BP\ckprssoje_VMA7,{hV@0q_N:* |trnmnpuz(LtP?{}R_] \ 4 b t _ J 4   u X 5  k F $ c ;  oDk@`1xI\,l= |HT&_.i<uER!`/qCX*sGj>kCyT,xS2uY;"n^O@3+!)5CZq*^,~@'7x"A=Pm/KbtzobUF8*r`K7"~lWC2 sg^UNGA;<:=>AKSan}.\JFA=R   a  @ ] t v f W E 2  p S 4  q L *  o I ! T+U(uJc4xGY+h7tBMY*f3qAR"d3{Ki=b6 e>{S/|Z9gP3vne[WTRUW_ir 5few`q Z z(rTEg~pbOB-{dP:$vbM8#naRE:/%  &5EYoNTiQbI`P Z ! k  3 E P Z ^ a b ` Z R I @ 0 #   z ` E ' l J '  q J $ [4 _3U(qAX*k: {IV$a1m< yHW'g6xKd5S+{Q&Y0 qM'z\:u]F01U$ge=@nv/=eL/bvbP>(|gO8 ~kQ;&q`N?1 $;Uu W'|C0J6O: < ? x          t _ E -  { Z ;  f B  ~V.[1T%rBZ+m= }LZ(f7uBO],m>T%mA`4\6hB_<tV7jTC/ (>_ BrA9^Xz(aZ Q$,4:?<<:4,&mZE.v^F.kR<$ u_N;+ )Im7|qB:]Y pH 9 " R x x d P : #   _ @ " u O +  kCvJ!sEc7 ~N!a3sCQ ],l9 vHV'j; P"l=_5a8oI kH%iL1ygWI=0)!&.\ryl_O>-oW?'rW<"gM3lT='}qaUMB94.++)-2:AP_p 7h%r)8@U D  # 3 C L R U T R O G = 3 '   m T 6  ~ \ 8  ]7pErHh<X*mAP$c2q@P!b.qAV'nB^4[0b;yR0 cA {`L2 (LsUL!!LOqG2JptcP=)oV;#cH+jP3ycH1r`Q@0% ,@XtHa" Ugr  * g        | d M 2  f E "  qL%b;h>b7Q%j<O!a3sAT#e5vH]/wMlAj>rK%jE%}\?$r]J6)  7Sr*gK!i7$'.e }gR?%x^B( }bE) |`B% fK0wbP<( 9W{ F%TT z19bG ( T y t a J 5   } ^ ?  tP*lDwK!uGi; U&k< ~Q c0tFY'm> U)rEi;k@xR*tS1sU: raSF:3,%"$$+0=I\p Rf$ !_ s)%6N0<GPRVTTMH@7*ybL1yaC& vZ;kL1fM1hT=)~zzyEpWT)+VX p7 n  ; W i w ~ t j ] O = ,   p Q 1  rL*pH!W,W,zN"k>T&j; N!d4yKa5zN mAg;lD[3a? nV9# yqkgfghqy!J{35IV m3f2Maq}}tk\OA/  r[@& dE) sU5^?#rS6|cJ3yk_WNFC><=AEMWew1`aw_u_y%di' p  % 3 > C F G E ? : 0 '  | d G -  tR0~X1 lCrHnAa2|O e8 }Nc5zL g8 V(xK!uL#~X1pM(~_>{cM8  @e6{}Yc>V \zV$PpziVE0tZ>$wX9~`>!cD#mN1mU9! teUG7+  0AUq5m>`Spd{&[O A t    y ` I 2  iK({W0 qK!}S(}P&tHe7R%k?X(pB_2}R%wM"zO'_:\9vV;saJ;,!7NnL!zF<_Zy!UI;mwfO8# oQ5dD&eE#cB#eH( z_B)kXD3  "=\ G%RJpl}%N7 D j { h X C ,  xZ;vR0 vL'\4 `5 [/|P"n@\-yKh:Y,{S$yO%V/lF#qM- tX>" zk]QF>83/247@JXj.a$s0&a p#|*B"/8@BDCA:5+" oZB'jM/vT5qQ/jF'eF' rT9kT?*(Iu\U**TP_#Z ( E V g o w { } z w p g ^ R E 5 $  mR4yU4[4 pI{O$yN"sDf: Z+xLl@a8 \3`7 lDa<lM/gL5{wssu{>h[cCK'?9N!p.I[jt|zslaVF;)jQ5pP2sR1hG&~];uR3zZ<{dJ2zmaZPKGEDGNR]h{+XP^>K)<.7G  * / 7 8 7 6 / '   kP6gG$wQ,nD{T(V+~T'yK!lCc8 Z1V*~T+]4 oI!iF#aC$ kXA/ &Dh+mb2-SJ_0v0UuucQ@*lO6gE'bBvR0 c@uT3rU5mS:teSE9,   .>OiUm*W]_eCs~mW?(gH(^;\4 mGvM$zO#vKqEm?f<c9i>sK%e@iF%jN2tbP@3# #5Id~&^2SDaSg?2(]p\I0~bD( oN/ gD#tQ- ~^;kJ+dF$tV;!wdP=+ 5Tu2pY $_ iawM?`y{l\J7" tY;}Y9a;xP*_4 e;g;f: d6a7e:kD~U0 tO-~\=oR; reYRGCA=?CGPYjy=o-{2LMSv%i%.7<@>;72)pYB& gG) iI)~Z:e@mH&vU0hI' pQ6~eP:%2Y,nmFGqjn%P2EV_gkmjicZSH;. oU:hG&wR- rK#\4 g>l@oCpFsIyP']4tM)rO+ eF' hR;# DoRO&$LFOE8N_kuy~~}xtncZK?. sW># uW6tQ. _;dAiC"oK(~[={[<yaG0wjaXOKGEFGKT_k{*\ T`GO%}-y,i %)*'$ oW>$ y[;tO+rO(e=sJ"|T,Z1`5 f=pI [3 tP,{Y6xX=q[H6 1Nr3rZ"/mw$kQDhxjWG0rX;gH)_:gBgEiD lG$tS1lL- }aI-|lZJ<.$  "2BYp1i6R=P07 o>iwdP;" lL/mK)uP)lF~W0d<mBwN%W0eA}V1 vS. _@lO4}nZM=1'   .gBd=a;^9dBtU3}_D)|gR@. (FfX9jc"s$|8nB`txlZL:'hM/xW5e?a;xQ)`8mDzT'a8rI"e>eCwY:pX>%|qe]WPLJLNT]gt>n(t%u"ny$ZSW!.6<???<4." u[E+eH*eB qM)oK#iCa;X7[8gG&iI.uZE.}9d@1rz LS;DY)>IUZ_`_[VME:-}eL0cB#zX4V2 sL%_6pFV/gB~V0 sO+zV6rT7{bM4" :c8|!X[*4(?d +EWhry~~zrl`TI8(|dG+{];rN,xS.qL&f@Y4 wN)oK&uQ1lL. fM5uf^QJEA<Z0 oH!^7tL'jDjD#xX8fJ0veUD4( ):Rl3jA`OhR]-~?j{iTA(w\@!aBoJ&jH `:uO'c=zS-oJ&pL)^AmS9 tbUE:.%",:K`w5l:Q;P5D$!"[pYD-mQ2nL*wR-pJ$_6rF#Z2 lE]6zW3`=cD' v^J7&'Gj+l[)9{'/p{D,Mdv|rgVF6"hM1z]9nI&pJ$f@X0 rH"b=\8a@vZ:u[C+zle]XURTW]fr(UHJ*4e jn <~'2=AGFFB;6+w^D,{]?tP*sL'f=yN'\4 iByM(a:zT1 yW4mN0mV<(zvttx{BkZ^7:e bm  C0@JPRXTSLF?1$x^C)|\?xV0~Y4xR/oF!a;}Y2 xV1 ]=|`A$ mV@+FjC1t~Xlaq=#BYjw|vj^P@0{`F) oO. }X5 wQ+d<pFxP&W.b7oFZ7 zS2dD%rX<$ |n_VGA851/34;GQ`sCw@U?T7G+)/g  lT;$ bC$_@kH"kD`;~X1uQ, vS0 bB iL2p\H6&,Ba @p<3RD]6"Aip\G3cE%aAe?}W0d:mAoEsJxM$V/f>}X5^=~`C)~jWF3'  &;VtX/TFcT\)p'Nk~o_P<)nR6dF%_<mH(vR/ ];lK*fI( y]B& ~kUB./No2r]" I#D5/hygP;&rU:cC%]:kJ#uP- {W4_=mK)aA dF' {bE,lYC0 ~|}9_(hW|  qY%*,-*'! yfR@)t\D+y_D+pV: gP5kT<$r]I7"tg\TIA:51,**+,16>GSapDqb\%|hEK '9IR\_`aa]XTKC</$ o[E2|gL5lQ8eK2xZC' pT>" rZA)oVA+s_N<(zqf_ULGC;8532368=CKVbpGpO0>^`FgynbVH9,p\K:)vaQ>.|iWF7#yi\N@4'3PqLM2_-Lgzwmb[NC9,sdSD2"zjWF6$wfTD2!zjZJ9* ufXL=.$ukcYQHC93+&   $*5AM\n Dl.dIz9L_mv~{vrlh_ZRMC=5,$ {pf[SG>5*  yni_VNH?82*" .:9732/,*(&"" overgod-1.0/wavs/beat/choir.wav0000644000175000001440000005154410302362504015551 0ustar michiusersRIFF\SWAVEfmt DXdata8S%/1,%$*3;CB>9646776/+#  ||zg]XXdksx{ `Y$-432-+(  X"3C`;>3&X{z[>-'''h 0AHGC8/# E}Z9.9RmM1Jrvmgx}rg\F)R'4JUWSPMI@3tX8X!@@ .`>V%7BD:#e@vr 4Ldlk]K6%lYQ>Ps Cr&M3HKO\pqP/ Z@ D]Jch#CXaglqrpcL2yR&B]h2N"Q|U0LZ%h>{a~NKp *EelL.n1H2akRT y&I4 "CN5Xm2BqgkHNl!F`ly~~hDg4^8 Afy'" )! sV HX/je36l&1--:Yyc:h !Qje_ff:f.$a~V7Da|ooE`o}xQ%SW V&qHa5`g-?3F@T.&-Bj;%@I^'3x!JRA;F_rB w=O6L|WU,NWUhg `ZX({S~jQwEdnK%DyrI6O-GO]qvL>`alCvJM5@$@ IAR(v2X-q7DFmkSACUpyk@y=/~+p=;oy LdW%&Pa 06^@xn3~AA~uI6N 4FOWkm> `y)Ncq-S8t=mN%)w 9Si'@&;J2@A}9DQsiD($7Q\I; PC[d52E~f+8*>p.}*o4`10c%9:9D`vJz26FaU0D -c-da87k%o+XYen5O/um 9D#q|&|$|jwhS]H] ?,PPJ;^*( #7Vrzb>BMVb([mJYOdank3zNcP>Yi] XnFSop CQ+`br;)j+V  a0 r %<HH6Ot'T^4$VB`aUC);vK=xAgdsM|t_9@b^ie@#kv?9we46za} '@qg}gq!p88MQ7  {G GQGiyRwf QO.>H8Qt<l;)u ,(tW! C 11URjGK^5DW~,O?SIRN^A%d\Qzo(-'_1["[5-/W0yKK9x+y6zGZ^!sa?>P;QE;-pIo71M{pu.(37))(:PV}"Tm^2}{wnZ:f; xgdkfTr[a77hzKW5"JQ Wip A$J1o~6gN4*e 0+KpijLKlXF=0 L0aAzYhM?=<9/mL*h|hM 1Y=-gp(q])+@CS6Y39 >[@G :O!-T|s<&wW"M8!n>:'+]Fs7w6hKePwJ& wbF/  2Tc.q2oEac<gTr*S Q77J'AH.zB,6X.>MJCs)zD&7}&y9YniCU6,;z|>UiAwg\SRYh~-~eVd.Mw0 {>jDOkzf4D:GjrwDG45I\hV*(J:d[i5spo <kyi@  Uf6 >mn!3"j/TMOyj@DpIYbUQ:I:BjXem%4IZ.-WNj,>SN!dP6"i$SyV<750\wFvjgfhnv} .UN&5AGOSZcn~;z KG8<^rV%+i*-wBlB2 WK1)3[Z;j~]IH z6]Ldx7{B^oT>/+1ASiAg$W' [Nk9w\*@p_b3cwkn~'bNsU0XS7%3cC9bB.+g 9YVk4LUk[` kN2,Jk 1^UxWSNt}Z.[Cz$Y '9aS= b (7DSYJnkZ[xA vY/ J0czreUh_$n|%LaHsO9JGY_=Ev_=$JqT2n6#z5 %V9b&{Sj*f,gQ.V]4i+oH*4<7f{ivEF:O8&>(=d*hvqZj=y"Hc7CsW"c'| Av@zKE;_E\w8YPyV+s NFaT [z%C H{qm}fup}l~vd+kGKoe/RR*st.>y~GvdPF1n6mMCb"w?HF5bf6B|oJ!BixCS@r,`{ sSVW_>d[hI$PFxQK^/)jNHK -F05l\Q},dNuhfz M8?G78!Cx +sQ7\U#8~&z4(3ZHZ}x:A@l**s8-cb=k m}nvxza.?c{]m}~G|QDDB"x4B5}eXW]u`x:csB$xI}-Bh)2B;;? x"4fr*B;*Ly.iY:t9[yVv`?$&G/KH|US#8 &aS2k`eXVR.}09$iSDBJa a,tQ=pApc&%eVSSkO@|qO|7YW%U:XtS*n/}+OhDH)`v#h!ZNGkWERKG5%8C"F6EA^@47@TtG wV ;g8;,;&x |]NtHOfO >Lj hEE?SY?+|F'?i$P9{Y,tLw{.*. G2d4?xSi&5: c {rB.(3?\xknnfJg@N3s7WNm `[m>[azpT^B!v"CI?'8i%*@gA~ua$0Q`[>z/i<JVw.F % Cks< +Be) 6Aa@_&i_"H!BQ|=9Ji&T:G /Hi~H_j[g] gi- F*o'{.0(2c/mQq,I 1N y#{D("-Ef*-Uo5@#\%ajID:HW&_z?;%2z.t9k4eG",L NKwpV<OAJ(l]ZO)KHYfsBj>()=a!Kvl% mYR>)L,Ehh-"UAZRvGDF{2\u8Oe y0b`0@@^"~|! [8q,^p<LT%U@2p.DKk-gB3;[ eO}i^g-,191?q,0Z~ K=e`ym"U^ ]g#t}W&$k6Eb jVeE-vLp!Pron1aHRX@hd1WHHMqH'n"%E/GkPQ{z:{-'> sB?'[6C\|G'9rQ[lI$ G/* >c-C^b, XV\El4MSqK4oqZ @6.'%o@M7^zU5AYyrfP7k+-&{r6(<7DK,wcD!]) k@8X H$X~F] y~E!}iRj \}SXp6*0w #K+,91 (tX (s`I(~Zy zMs3Oa~x~qcG 4wG2% QuiQHKx:=q  j@ Pi "Kl+Iem7 NCThZsFi/T7gyb7!g@%^8m#t'z7tCR9 9WY;%Z;m,V8W%b=7DbB Adsw~K>Z T PeDnet8]T7 fc~D3NE& #KtB03$vrppD]d>6y38&kNV+B{Q/y|XTo4]?kGVN3/}AaG F345q!zTyc0AgoX-yQf5 ]:Y0!6STh]{[yIe_uvnX[% z' 44/6429MiBn?;"t(-z?`P& 9x%CYC$  o]K*_6d8d&" !)*(% o< @bPSpsL-!-Jdxzulnx2[C1 p0:FnfI6Bq&EU4f\KXvdL=2&nE) .I_I4vEhR#.7L0dnI nSGd;k(7\6_,9Gpo[PcFdUW9qi; "8C9$]A%JZ\vlx |KA HU9 0XoxnHyk?-|!v. +>>)  2Ntb)Ygn_ F[CE#rW<& ^`Ty[S[ e]Ngk2Su:b]v@Gq]|hyeICK\fg[J5*&$%" "1C^zNoOa b$_/uvsyo^TVY[YJ8" h V{=xw`AW8xJi1sZ+K &0q]ut? `?~pebaXSMHITdyt"r0LHGrnA--=HG5    {tihAgZdaq~lXR|V2xLy{_GAU| C?~Ni_rwMq:=B1 }yz'K`?a"1ht@unh_Uj:[Kd^lvw ~P Fkqh`aw{E4 >XR#}puzv 8uE2?^wxbK@AKTTK6!1SYlfgw7(IO6 xsy|vstsspif\WRKC6a -E5c]jr!S=@EFDE@;93/)T.d`h0xR>d#gw]$d! pe$~teZK@:78:BGUgw$ F0ud\VPE4%   @l2 P( Fw00B i- "! V*W SoSFM`vtaE0" u-K0BE7-*:1#$Sxo^CTO7 .DUYTLJJNX\YQG:1* !5s "Gq/3*41QL$!;^uvfTHQe#4uK R:@Xq}whWPXgx}voh`\SL@:1,(%$ "$(/4BL\iy)Azti`]Z[YWUTSWX]bdehijmklkfb]XPI0  :UggWJ==CLLI=2 1=A=51-349942+&(%%#   overgod-1.0/wavs/beat/drum1.wav0000644000175000001440000002564010276441152015502 0ustar michiusersRIFF+WAVEfmt DXdatat+  _){="-QBuv~x/s?e*!K 3&iv`f-'!4! V/7x<!. q\E6 ,#O_ pXiגW+(w"O[%A^d(#"E0!"9<f r4(%7`y1mhS Q.%1ГϜ=5NFy P3( ?4/&/(--T#fECw;+q3͍,NPI ɵ'EU ,,ZH:*<%U0S&[ -)_|.Ic܆Gp*u9I(V%4Kpd( 叿I.mY 0v*t'/_Ų % A  kJ'!"spA a ? "_ 1& :aCl B-5"?T4RSQ-g)E 'ވ% V);iK(Qac5<6#$&c - !' h_& W'q+fjg ޏ& &6S0 +))B~'9O`!  )_= G rҊ5m l% $w+ ^g dj" t.x]aT3"FpO/q 5F+` qm oe (ω@BV6& GV.$E,:y]u3RyF C ΀ ^@ x,\x  w+zn8ݽ% gP@; [ ޾%01; #Y_8&'M%e)fN<)7!Du4(F6f#DD ""T֩ l*s./$N $|c W@ am"B t @ <c   qJ c z6B L%C?%- z<eQ&R%] . @j ""N5#">3s%:SDnc+\s , 9 R' Q  -:iQ 8'#4 !|u z t;O0nݽg~$!{7|!,0%+ oٕ0Rxs 5E'ku  } * iF([y7mvl cye{kV3 XMe :@u 5>!F 1 ]U i 73S 8LU Z hA2W7IQw{<&qJ&] ]-wB})k;9/br 'sK J3[@CjD  .z oJ{ 9X"eWq*kK a W tp * s  O@ ]  &]lK  * (Mn6 g J $Ag y|S'3 <nc ( r0 Od- fFElk.:Gt]R N7'. {Vmjoj6 % %)DkME "2D^c e'?QQv S| iy} ' ] %YLO2?{  k' 0EA435 'hx @ @2? sw B6 (= $5b@={Ppd 3v-X 3- X D k H Xl 395 mH]zx VB  v .#`I 4JI~Z4-j $9[  & B ~U5\ LM) 7+L W;1>yOp.3 S: $soX w7 r%r wC>T :R)g`. _@` s^G-_ N}VC D0 LB& BMu TPV% {s* [qX jT -ZA 0D T>jZ=cxQIp= m 8ei* 8 =x^]] n5, ' 6N t D #u s)*  }, M PH9 D U;MB5G V  c   '`Hst9A1`AE h c f_ % jJu -He |F+  1 Lj "%XHx* H TMC  }3[nSM T1;+w <=]Y> ( JHp@E ,/#nWS(j h\Lqd] *  tYkf{|Or'\3 > L> 4O6 ga>  9E^rqf2k.("p0R==yQx~jm7W UK4A+#wH)Ig m y } Dfb .W2W,l!`<Lr Yfq e >M3\DT Ft \&"( Q*w(3:[ T%O   SdAYl- (*J -~y e;. WR g lJRs9I$Z$%b|4 *C`[ py/gQ<v >N 2fA\|&J%S z@0jQr\O44?P bW}kBTP+P5{O eLPb"qc 1 |% G{aHM8$c8 Vs>> Z7xf4I 9f>*9 m<K?V/ S1 7@h:=V=Q \b&_ H>  3}x+R0 ^1]> l 0};du SVii( W(x$k"?fz3MhU"ggQda  E5q$CwxFHHMmG`}pPJ4px{w$An$aHk,O K_{!Ct roKV'p,@# ~6UeOq]%7`GN\[7yqnidJD]zD `*MdpKwM. z%acS LJqQkXL<)n3NxV!b;PtgZSXbQxc<3*ee!Ulep*I5 k  j*I U iqF&qV^e.|_ Gz=CLtWG1?fye#.p1,i}xO61/J3$rfL_28gYmv%r|28 m 1`&1C S?UYy} R\JGC=ZT6+)ot3x]G_vS9?7n[3y{q6nRRr"_<}LSQy3  mtzD\lFsBiqxPfCf0MH^z "E`V}b[e=_#_D]5ncwGkO~"Ey'\xR+8g;Z, /o_X@.,c SWb/QZp)GiJX?I . G K)IPs/J{QmmI,2_% ^Eu@fHUS-hCpg0)]MW(jT1G3lI#u[(tVw 3K,T}a69 Ww[ur zB ww-n0Tz?a|V\jL| OojT5!GM_Y"7F=7.^ay`Y@6GZ@'4 /{\q{J =pU--SY^ qt0o$u:`V%VWVi1xO< ^<@f4k{|,-A%@Cm/cj{4G $zPd-HG7EK|P7&4]{aJ7v'xdQ*QnwQIs9%W%\JR~1vYlOeb;Gfv+;4 z, b~9| Ps<^#bnPYb2%)#u =clc&;.]gG"^  }vQgnm;8"gP\=} Onq//, bD8#ylpA'0&W*>s| @#dVWK?5f6$,kgw%Y!^|^ ^7ZT]OvcY2 K[>5Y_ at')IhEvJj8gu)Se>e-PXF6l59F/00Q,Z 5P% l<C@ 'FT ; ? !%0+)) /      overgod-1.0/wavs/beat/drum2.wav0000644000175000001440000006150010276441260015476 0ustar michiusersRIFF8cWAVEfmt DXdatacs37c%/B A0[Yڴ%`(Leh?AS&=qSVV %THQ2[ RiC C H7LIC8 O]+G(GYNc߆pFN^%<xe( d`9i=Yi?-.0V>}k36 cߺ {'# N%@A߫*ot}" il\ga0XӨ NB-O[OW#E5Mn m`r0rn ^5#m-S`ƶ! k+)(<ܿ@B/ L'ܩZ@s |d-4,_TO}2A%I ' 6xܜݙ 3ʶS˷ߊ>3++όɴM%ןH#-ϛ'.e*~ТԻ:Ѝyr.d+;6JL | -> 6"(=K:L'dI44 >5ken )B1#6ISF`C' %>fRq !#Ka F5קL}$k W:p5C;j6uHT:>Vĸ ʂ$!, 4GJюޠ!Lj/~4P:H $Hx8]|J+6#6 ` U9JK@ޓo ȱxV% ?y +fy+¶O`êK,* ٱMɶ=(ڌ>o!?JH<>M"%1 *?!Ev#<E!<)ni(C<`~ uF0)t;8: 5QJLJB/;u%E4 3B({F1X,J]16l^V'P)?p u!b܀&!AW #s|Tc7% # F * Yi"7 qg+ SpJt$& J1Rv޷)w17f٩f /M{ .=3s}}L6(|1t&7}fA.R̪ >2\l] J$   ߄ۨ)9 M̠n'|d8 FXwv܋ɥtn вωb0n5}i! Iԋ7$s Փf8p>F4I8 ,PI#'raj8:1G 9$3E3 ?l~ !?i m!b>MO "+ o1v=r=T1(+""eb l("<q[v4  XJ NV.6WW6 S'5wYb (pc͏>ۗ#(#LsBn 8 TF)Ib JJYUS; ; NBsR J <:#pa\އuK ,_r[7m# Hm)Ss qAY5c2s` 5- %P /1Y0<%W|w e@ӷYS"'>y/L, #~.-T,J ]5n 30& Q8X:O/" 8L! (%$L c"_zI "0EDk0O Yg *M?M &:n1*N', L2D2ql/#V o8!mL?EN>y/$fqG Q AD^U٨@ d"}W:^Im4> .Jך;PG#p{@'y!#;+y( [_ ~'! k~sIb]s@X6eVc6 0^9"/E˺9 {X us=_nσ)Apk(  +'> M7 Yf4k3W D#:3+ pT m)= .(  [ :f x8b~  z!mZk?pQ 5a#X  KBZ]H RC #:N|%N"4 Iy. nXqp kH"["߯rpd uq`cG  [7.ZB 1vTkLJ6 2ݖΧjykos-1Yf'ۉ Yu/Oyc " j\~$A, RXA F"wo t$cJdU?X($W"amS(& oWs qq c>_ y`l`1 ! 8^KiJF@6 , w ? 3 S 2 v $KcJGaw C8-O$ ^ k La WSb nK-ZZ,-jfhH6w߸4.qH#b3K+!A}or#F GnUPrL$+ J:q X  -s!0 ~U : !) L\x $=S? rl Tm * ix [|z?)@s_s7{Cf K5]U!H=#F^h )|6 3 *   s x =c#6|/M :Zb`.emxv;RFb[[o a\aXAdreF !+buc I\.8 ;O Y&uG x* QO P M _`$ (wT? ZsSC:R * o ]Q ] g>` C o~h]Fo DMP@.@,! zRG B y*V mT} Yw# { A_ c *Gdb [(gS *h CG wl 3  z2.pqggYcE&B%ew |&v(F;  S dg G+2 SAUt>)p; J:Q Of h Z QZR ' QG O w L5 oj~, B*rW)b$ / 2Ki,@> "K=l9CMbR ,2)l:- {S6H[ jp:^6njJ W*J5v C05w?jR| eRm@nJ r=b k~ ~B0 _1*LHR C$U72oC4;OGB c x5% p " ( H< #' , S lc f {?E+k]7: tM;3CGcT "*SjbeV@ iw F'1 UM^C HX D# EaK:4e+Cj{Z | GU_ &p/FWp _ 8#jP3+tSpS@b" h ~0 B* m% P( Im +9   ]ry   !exPEN ,hI35kk8>k)3S#1/raP81T+rgKk{ N\<-" y p6S>a@(v_9F aJ#T- ~u~uIF+ *Q =>[y   rr  R=x <  cNem  lbi U "Ln 9 9 k m1 2D^  p(% (JEiQ:kfg" 6u_zoA!4B]M Ph'2 V 9 =NC%2V7gq3` q ; = s1u l  B~i6% BBB M~k# Sz{o ( /847ZG_V(0(aTW(U L#kT^M = ??)`4P FpNn FN-alA"Sx@9LVu_B"x n2T&xD/ Ee%]|Wu~w a|G""M B$ ) [=!;L _ Kg 6G<o W %nmFr :Wk3d"`}U\I QXL5f}O r,;a(uEe @ [L?hmZF&$Ydp}p.ezRqC785jKJ_Ux6`%/1d$_-r  ^' O&>0P " x+2 zX^)He=F ~\s `M%azEt, 1K}k N{D: f%%>=[@z;OcEn tDV5u24;JUR?>4QI._d%5bw Pz k05G@E iIUqa0lse/o}E;.- ^ _*.+ FHx@* ,eI<'z   njH Lg hH21"JNrB,EQ9"JZ JYoP6 Pb"v E N53ekGSF\JP NQNPTr,<)`@?:sixV#X&[rMxS#KC.% y"{=]^R[Nq{VLX  Ma7JR?Z,K*QB 6/$Xl!G u+cl]mJu3Q<(v-8|19B #.CI8rDB~zl:aC+slvWx;@=y?)q"rHuQ|].duC^Ws DX2D6:aj6_1|93CSZY.kQ-]>PX=WZ UK53U'_B3t4-r?Vvo;'T|M4)$Q|60mP]Zy epFGtB#Ca4!8:\# TI2I4`zEH79@{7&*z4 f$w!Bg2^m^#;F.H&xEnMRRY$*'=+=r(pX `2)Vwu Gzz?VBc`4.;=1G%T/qlA 7kO}SKX&k-5]iYUyvtA w1^y=~9t ;nDkIM YW`)lOo9@AW^Y!qNkC-}ZdfsGoowsLD)rr}sowb WM"yNMZR?#4w_TSz>Ejv_d2<|Ibs%|'  Pi oa\ lQ"@IN5mfS>'$*U6 '_(]y)ijvMuW4rA+Dn@vh |ub4PNV5!O,?]3"EQeA Q J^4`l5&W[OWMMUwVQc&r]>0[9E6K y3S pF# KlDn3hQK-k7w5c[P Y/o/>"xTcqI #bsb9!Y9)4?T wo*3uzy)wRL'!$ ,#%%/!0PkJEcx@\,nY!FQxb_ScdWe P?!mQE#v-QE\L$9i})&,jTZ,V&.=/V1-S{5, +g(Lw^EH{oJ)1+SA\8/mo-'3yIN9`Qp v;e'/{>/Qfm(U> / W=2Hc1KE';pYG~x$-mS _E#Fi+*RzC7'9Igp~`'"bs8Oy%2`+L=WsVsAEqj1rQ<[o[SQ El!^u,D$82d}B#@Nw#4N tmnVSetZZ(zFtD PXeOL7fb  F. DXQ]p8[\M.w]s CLEG Q M&pG GJNdVn`0(L@XB 2"hetth[,K&8I!1f'$iH#P^KZQjrTS?hp-Zk#=E^D#B$~GJgD:<BbSJyaE!z0'MM*S6DBJ B_hj_g9yRh:=xq%Rr>8y_4!b1oFO yiZb {B& +:RvVQ6x9AccR.=~kBSd 8d%'oIn,8BeH&,10vHNWJ[6 im+^_FEW4f;;G?TAwxN:KM<o%0>02no l&\d3c5HWb w$-2<*% C7VdXthDwN e~hdE*vuxJ9`~ b`1sKqq;wubX#ppQq*:=Nco'X#;cA0~ j_nsq#PQj.sS4N`M7h9&\!:/I/Y{m};A+^{ o4=s.3> \#7}6[CYG6q+,,[Y~x\3'jU=r u=,/M;Tj9I`,}T=:1 tr=6sS|@3TwE@aHcvB z  :RHN 'CrXg2/0$d^C ADjpW_VF4 $e}@D#)'To `ke!O7Gq peD $v"qS-Yyx 4 y@-jE hG1YZhDtt|"c ZSLAfj7  P8"%x6QcHG@wl/TKh^7`q/UFwLW<&KM+y[9Evvs .'n D\F|tUf5oD@L1 o4x 2'Nk6+DpADMy*]1}_0)L>mc3X.. ?f9wu;%qtv>/Q:k9h8`0Di& /XTX g"~DvBh7~e(Y(E_V_W}eu9;`7Ct^p2R;5~E/s3femEgyU{w zrHyhUX<wT^1{?` v8F7k< m[!egC eC:^6 Zk^u8@&=v 3qh/Ir0 (ZqO 17aIbDLy7 EiO{sR/B #aZ"bEq4YpN^c[{)Sp M]kB$| ;p1:*EhZZgApjXzV_ :^Q3h\G\e&=&0-0&}ZR<\[[K OpL"IGO&CJ xRCE:s:(D)j sF2X{V(n?]oZ=(L^UaSR# "ojxhg/RNSn$];|^~._k*D-9pS|YF(k{~0[b(T~xY ?1"htK{4Z{/2kOKKXz >fl-b@+7(k"RdK^.Zufp@7D0]Vdd!AX<N'05Y\ZA6NT$b8QcJq-@c7#6&<,`3@}'|`( l+LCe'~b ,IblSW:@}Y 5OYT4/6):SvA..)'+ /E8 bl:&QrFPv 5P3M>6i(T{ek?4-458'</L]x>$ah@ DK1/sV8 .lhIJ{q{6J)&'Gc9/q}E7=;GM 2hD1%Plf3'`vJX_=Aw;9ZS:+L# C?&" "@3 1"5?<kh9D 8w6PnqU&Ihvi_JZU$UM;(Jll"M\qT+B4 '>/ HMu\{A1( "#,4-(7*][llSTJ..49#A^;0-/)*YhQ+.U LN-9cD &7xlXQdJ#GgU*00(<n[ 5DNS3(8EXHQwt@*$H`X</( !@6t *1&7D+,"(*"-&?3 # .0 2  '6 "+,LXA (*G_Y':oqP'QcjI4A\YU7Fajeb\76>BIJ/,9U< 3/5'!'*/J& $*    /<5" $H5R`H' $! ,   -6* ,(F8 ." %%)B>.75;?5ED<9hZoy $AYEQ*0:'!0%C9"E<5BCKE!/C ( ! "-0!30 #5A@!'!6E5 1%  2%   !11O>9:#2 3<!9KE\i9A[32\SG, 19>-AK/5?.+.*).J3!&  2!$.:) "#69  " @D!,4>-    F5 ) 3#.150'0$.?=+  $"    +' "  %""$                                overgod-1.0/wavs/beat/flute.wav0000644000175000001440000005164210302362552015566 0ustar michiusersRIFFSWAVEfmt DXdatavS  $&)+/7=DIKMOU[bimnprsy}tmkkhf\TK@<:42%seZTNC9* xnf`\YQI?;44330.*('-38=ACJR]lx-AZp9Wu&?[w+=O_kvzof[O@0 wcN:%ybK.sZ; }aE)x]D/ygZH;+ +30,48BTi/e29rfr.hbq#;;Rg\ @  m N . [ } } c D # d 0 ? c  + }$nS"\&Pv 9fK}Ax[78@VVm?jTF>92015D_yB~ _e4$0Hrd h{,7,o | > & m  E f v V 4 N  ^  D V PC!Z+]Fs*WGxL(nbg:r1[.zbPA82-/3ASj+a15ocm%j[i92zPaT >  l  F  2 \ z } d J ' c 0 A c  3 &j Y+W-Uy :g"LG~ZD2AaOuAu]G9.*/5?N_tMQh:$$CwZb{'60g$ u 3 - r  = c t T 1  Q  `  C T  UA!^(Z Eo0R~NzH0tZn 3r7U&bL=41149AOc/b+8m`o#f _k65zOdY <  l  F 3 \ ~ } c G $ c . C `  ~ 1 'iX*V*Yx9lBJuYD.G[Sp@sXE5..28AK\sJX j8",Mw[ lz)6<l+  q 1 5 y  7 d o N *  Q  [  E M W=!`%TGk+UDyG(k_ h8m4Z*|dQA6-,08DUi0f07ugq)ma p#=8#Ve] B  m  J  4 Y {  d G b . > b  { + "iP$W#Jx 4_IvB~P?0:_I tEr\M;/*+0>NczK[jB,-M d m#3A<t #'  < - u  A e s S -  O  T  @ M K<~R%OzChS=nH a ` aw5o+X-tbPB:2+-5AUo-g9; |pw7zh{4EB/\ld K  p O  4 \ | } c B  a , y 7 ]  w & vg LODm2W{Ft 8sO.29QN i?gTG;7/0.9K`}KdnF4:U(s}.@R<}0*  I 1 s ! J k q T /  w E  W  9 L A8yGPw 3eBu:f?|\U] s-g*Q'v`PA6/,-6EYp4l=B{={'/:Q[6]vw S  u  \  1 [  z \ <  _ ) r 1 Y m  s\?~N{=h!O{:g5hD3| 3SB k; oXF8,*-5BQd{UeyT@Cc:*:P\Q$96 $ O 8 } $ K o p P *  u @ Q w 0 E =-m ?|Dj,Y=n,_8qYKTr$_%Px_O=2.-2;HYo;uCL Q96XYaSju j ! q  b  4 U s c 8 c - f ! \  g `^3m Gt 0_Ep4\*c<&y$y&I?e9gRE;20,1>PeV!q#VHUo H:L_ kg,DI * N F  I n i G # v >  F { , 7 :eAn8k H{9Z&a'f RELl&Z~P"t_M@5++.9I^t >xHU'0Y@KWq#tM~  ` -  b  > g s W 8  R  k , K c  `N1m7i.T|Ci%X W6ylv%@v=a0hTA5../8BPe$^#t,aL_JJYd)j2SS , [  K ! Q v b E " o 8 H  p & 4 2ya4j2]Gm/]O)fFDHbXwIr[K=4.,19H[v >zQU+-ePKju"{!^}  p ) ~ % m  9 \ } { Y 0  [ ! ^ ! P  W  \M'h6b&Rz 7d$OU0wlnAt7`3hSC6/,-7CTi'_*x+iZ`WPY v)%k HUG 1  d A 0 V v i K ) f 6  I i : ,pc4_2c@o+ROaE?J_YsDqWH<50208FZtAzO^+ ;fOX kw"{ _ h / * k  : f s T 2  R  e $ I \  ]J+h0a,Qu>dO#S.y!hn!?r7_.jT@2++0;DTd~)`#v-fPbQN_ h/p 8XT 1 ]  I # P v d C " p 7 E  p " 4 2w\7g.\Cn2X!T"cM?HhW{Is_K<0,,3;J]r C}K[+9dFNaw#t[  j 1  a  @ c y Z ;  T  i $ N  g ZR2i8j,S?g(Z \6|pt#B|?a5 fRE83--4=Pg"Y'u$`SWs K?Pgnk,?J 7 O @ $ H l m J # t B  G  z , 7 8%c@q :e'Qv7f)X1kVFQn"["N{cL;2**3=JZp?xFL" %Q3>O\ kGh ]  v  i  / W } } Y 6  ^ ( l + W g  m_7tJu 2g$Hs ;`/o ?(-})M Eh?gUJ=5,*.=NfOltM>C]3~)5J\F 73  N 8 u  L s j L . x D Y  3 K G.wPM| 5`#Gr @lD3P`i O c U  , S t d ?  i 5 x 5 i  y ' }$pK(^N|5`"NzC|X>9AZSsCpZH<1..1o Z]q$-.f  n . . p : b s S / V  c " M Y  ]K(i3b*Q{}?^4 eRC92//3?Of$Z r(ZGVxA?QV w!](EF ) Q ?  " K s i I (  v >  P  | - @ B(k DvEp,Z:k5c5vYQX u*`%T%xbOA4.*/8FYp3n72,.;KfOpRBMi90BSXT 49 " I ;  F h r N +  } J  R 9 H D9tJ#Lr @gK};kE"d] cy1m3U,x]LB73004@Pj,b56qhs$d ` i07~EZZ <  `  K * T s e F l 8 E o " 2 4zZ8n.]!Iq2^#U*i PDMk#\ ~LvaN<1+,1"z${&HDe;}eTH@6.,.8LgNkuL@BZ4&~2LLI+-  G 1 x " F g u X 2  | K  Y  > W GCP/]~Gv )S!GtO/lgm:x8\/{cOB:2003>Oi%Z)z*dU^zNFV hnh 2FE / U @ % M p m M * r @  Q y - C ;.pBxJq0`@p :c:~YTb p*p2O%u^J>76105@Qk-e7;tlx)hjw%::K_] @ e  N - X x d F # k 2 F l 3 -va4f3^ Kr/_%T)lOATj _#{It]J<4//39DWo;rBMH3,EUNAgln \ r T 7 Y u f C  b 2 y 3 a  z ' viQW$Ip 9aLAz\=:FYVqAmWH<51/2:GYv@yQ]*1^MJaw"sSv e &  d  9 ` y [ ;  Z " q , T i  k[:wIv :h%Lx=k9qN9:Gg%f+a:vjeacjt$ONBrf]j@!l{*'h<TXI " ' t  > t   3 C K O I @ 7 *   U , a [  > FN;zb=mD}D{Y*h YIFa}4}Dc7kSC;4/,,,6H_?zQH {igp1hH3q Amsb? @  Z ' C [ q ~ v n c T @ )  n E  o 1 v 5 Z q!|$wmV>!\E+k VPIRmFLqDy[D.*?[}>vFPa^l8s 6\/'^ ] 6 v  0 Q l { a C  \ , K  Y~3W dil`ZM>9/1;Ii#N SwDxV7$Ci/m@HwVIO]s9Vil`E|3 [  . V { } b @  u E  m2{9j!F`t$~*2;;HTd5XJQvDpJ* {{+T ]7mM(y$Gr[RI</_)?!i!R % > L [ _ f e h f a X K 5 ! Z0 Z)Qg(i*bLz1]?l(XLSe.[(V,|bK5)  !4FZr&V6{^ aQ,uV:Tu*~]L~8Rgxr_L4~W0 U$X u;J M LDA~>GTt>oBc>w\D. 6Po:m`93Dh4m7_ }&wVO)KkqX?$\3 ^1i5]&{A Zi1B[$w?k9rEmEu[>'-LpK7| YFOav/B9`X<b kR1kDqIY(b.])Q}Jw@~Kb7 b>rQ6xnib][[_goz ,Os%Y G\G31)y`<~3j+Pv#/;DLPRPME=5,"zaC%\5pDh>T&k; }O!f9c6vM(dH( vcUJA92+$" #)/9CKYj|#Io(\AKgE]1r$WIp$:KYhq{xpf[L;+w\@#_;^8mEvM#X.iBfD }aE) m[I9+ 0AUj>hJ~$cOQF/c"Mx2LcvxkYK8'hL0z\;qQ, }Y6dA uX7bJ0r`K:%&;Qk%Mq"QO%W'Z<b1Iawp_K6$lU9!|_C* x[="tU: |cH/zeQ>, {vxuvx{}2Jc?e,X-[)Qu<Sq),1476572-*"~lYI6%iS<#lT=)qYF-saO>. zohb[TNHB?=><><>ACKRYajs}.Ga~ *Km2Tv+G`{$1=FOW\egnnppqnmkhc^XQJD<2) wgVG7&~j]H8%{n\L>/vlbYNF?60(" !)38DOYer 3I_t0G]u.=JUbmuvric\RLA7/% ypcXK@4)|tmbXPG?50'   +3=IR^iv".<JUakx|vqke^YUNHC=62+'    "!%%&%(&)&''%'#$$#"! overgod-1.0/wavs/beat/lowdrum.wav0000644000175000001440000010467410276441342016151 0ustar michiusersRIFFWAVEfmt DXdataS  ~C"%%)W,z/258u;I> ACWFHOKMOR2T0VXY[.]^`Vabcdfe$ffIggh-hCh7hhgtgfcfedcba`\_]r\Z(Y]W~US~Q^O+MJHFC Aj>;8/6S3n0z-~*t'd$I!(c) h#e(gG, 8\όoNռpյyѩqkf^oԚ+!sB)%f@BDF I KMNP~R2TUgWXTZ[\1^S_f`daPb)ccd>ee?fff-gWgjgkgZg3gffLfeSeddQcba`_^f]-\ZY!XVUSQ(PfNLJHFDB@}>K<:7~5&30_.+|)&{$!f<c p "x(7]6ި5jҽs1Ʃč}z~ٶ Pc٬];{}/S՚dvD!9hH)F휞a0/]3un%买aC0&$'2E`}Ѣ0kܨ0u_\ aii Y0t P!z#%')+. 024679;=Q?ABD/FGhIJ{LMeOP'RzSTU/WWXpYZ[\n]R^)__`jabb>cc>dd eaeeef>fXfdfgfZfEf%feexe)edgdcxcbYbaa]`_^^%]=\L[OZKY;X$WVTSgR#QON MKNJH]GENDB#A?=5<:87N531/.=,b*(&$"      #/@Ug0^ؓFь&}7ǟ|sL󶠵SѱmI*.Mu$l _ݝd򜇜(қ:ƚu\G<;@RfߚYI~.ˠrբSƦvha^do~ײ*]Ӹ[Nf5ƣɈ~΀ҍէ6]܏)fG7.})y#tiY <yFp2!":$%9'()*+ -|./K124h568c9:;>=~>?@"BOCyDEFGHJKLMNO PPQRSTWU(VVWxX2YYZA[[\]]B^^K__@``!aaaCbbb6czccc)dWdddddddeeedddddzdMd!dccvc1cbbHbaa0a```_{__^]s]\V\['[ZY=YXW.WtVUT5TlSRQP$PKOiNMLKJIHGFFDCBA@?>=<;l:N9.87543s2H10.-,T+*('s&:%#"!@ z4eGm# H m"Iu0aW^#uA tFݙrN* ղԘӀiYF6, $-9M]uü+UICΰfc|Hvmo~ ,[7ޠ1⟓I}?̝h8hN7'  &7Mb-Y"\֞\8נ)ء4UcԥF4'%+:ƫR߬q-į_7ֲ|Ĵoo̸~/亚R Ž;{;ÈOƨsA ʩxJϕj?ԜxO,ٽژxS3pP1|^B#tW:mK/oQ.b<  [4 e<W(c/X #!!"v#;$$%&E'(()@**+s,+--.P/00o1223.4451667-88x9::a;<<@==y>??E@@qABB,CCKDDeEE|FGGHHIIJJKKLL MMMmNNVOO9PPQQQURR!SSSOTTUnUU'VVV3WWW5XXX'YvYY Z[ZZZ1[u[[[>\|\\\7]n]]]^L^^^^_D_q____`B`g`````a0aOajaaaaaaa bb/b=bNbYbfbnbzbbbbbbbbbbbbbb|btbjb]bQbCb3b"bbaaaaaataWa=aa````v`P`)``___Z_+_^^^i^6^^]]]]#]\\o\2\[[q[/[ZZaZZYY>YXXVX XWiWWVnVVUiUUT^TTSHSRR)RQcQPP3POeONN%NMNMLqLLKKJ9JIPIHbHGqGFFFE ED DC CBBAA{@?p?>a>=P=<:<;";::w98Y87876654W43)322e1050//e.-.-,+W+**|)(<('&Z&%%p$#)#"!;! IV\ abb `^T N E 8 -!seWL?5'{pf `[XVX] cm!y/Dޡ\ܺv6ٗY׼րIԭxFѮЁQξ)͕oKʼ+ɛȀhO<Ĵ,å˜ ):¸Pڷg󶁶2ŴW볁FޱvL篈'ɮj ULITeʨ5_ԦQΥUݤi1ƣ_+ʢoDơwT0ˠrX;$ ޟ̟xk`SLC>540--,.159AGR\fsğן3Jfߠ!Fiݡ2]G{Q8s3q>ʧY>٩'x˪oūqˬ%}׭4Prհ8jӲ=}YƵ5p\ԹHú;1'%#$+4¹?L`rljȣ3Pr̕&ͻNwТ+sf XPICA==AABHKNOSTW X  T  SPJA8(ubL5w !!X""#5$$q%&&G''~())K**}+,,B--m.//-00Q11t233&44B55\66t77899 ::.;;6<>C??A@@9AA0BB%CCDDEvEE_FFBGG"HHHlIICJJKKKLLLMxMM=NNN[OOPpPP%Q}QQ*RRR'SzSSTiTTUOUUU+VuVVWDWWW XKXXXY>YvYYYZVZZZZ [P[[[[\.\X\\\\\]5]V]v]]]]]^^2^J^]^s^^^^^^^^^^^__ _ _ __ _ _ ___^^^^^^^^^^z^i^Q^?^'^ ^]]]]]g]E]$]]\\\j\D\\[[[i[8[[ZZpZ;ZZYY[Y"YXXlX-XWWhW%WVVVV VU|U0UTTHTSSWSSR]R RQ\QQPQPOO:ON}NNMYMLL-LKaKJJ$JINIHuHHG(GFEFE^EDvDCCCBBA)A@0@?3?>4>=1=<-<;$;::9 987q76]65E54,43321a10<0//.-\-,1,++l*)=)( (p'&<&%%i$#/#"!U!  z7Vo(AR aq$}0 ; D LRY^ fmr!x)2;EQ_n(.ޢ֢͢ǢĢʢѢڢ$6G[nɣ7Wvܤ%MsƥKzڦ >pݧL7x5wEҫeF3Ӯ({ϯ&|Ӱ.Tl·У2Ux ԛ/YփذEuۦ>t ީD|Q,jI*k R7!h UA0{ hXI:+td T? - v  `H.uW6uP(c3j !!8""h##$-%%Y&&'((A))e**+,,9--V..p//011)22<33J44X55a66i77o88p99m::k;;c<>;??)@@AAAhBBHCC%DDElEE@FFGwGGCHH ImII0JJJMKKLbLLMlMMNnNNOhOOPXPPP?QQQRfRRR8S{SST?TTTT7UuUUUVVVVVV'WYWWWWX>XkXXXX Y1YUYwYYYYYZ4ZMZhZZZZZZZZ[[-[:[H[S[][e[n[u[x[[[[[[[~[~[w[r[i[c[X[O[C[6['[[ [ZZZZZZwZ\ZDZ'Z ZYYYYiYFY!YXXXX[X/XXWWyWFWWVVzVCV VUU`U$UTTiT+TSShS SRRPR RQuQ+QPPDPOOROONZNNMYMLLLLKK8KJ~JJI]IHH3HGhGGF1FE^EDDDC?CB`BA~A A@$@?8?>L>=Z=>>b??:@@A|AAMBBCCCJDDEqEE3FFFJGGH\HHIgIIJiJJK_KKLOLLL9MMMN_NNN1OuOOO>>=?=<^<;x;;::9+98>87H76T65Z54b43c32c21b10]0/U/.M.->-,2,+!+**)(p('X'&@&%$%$$z#"X"!8!  ^7zQ'd5n; q? r =  l 5 d-["N{E o7f.]'X#V$Z+b6uJ d>hG߷)ޘ cKڿ6٪ ؖ ׅwj_WQMLMOV_lzɊȠ*ǵA^{ĝ-T}BٿrC޽zY;ߺ(̹søknɶw'ֵ;ﴥXų6񲯲i&屣d#簩m3P宰Md7 䬻mH#ޫ}_C& تĪn\L;+۩֩ҩΩͩ˩̩ͩЩө֩ݩ"0?NauǪު.Hgī+Ouì?jƭ&T$Yɯ:u+l,q=γ_Aܵ+}̶pķnŸu˹&ۺ:St׽:gϿ5mG¯ËgIŷ*ƝǃlYI:˳-̪$͢ΞϗЙњҞ!Ӧ)ԭ3շ?J\mق ە!ܮ9Soߋ8Y} 2V|9a Mx ;i1_'W!RPKzFw@p 5 c * UCm+Rx /Rt%C`| #!!8""N##a$$t%%& ''((!)),**1++5,,5--5..3///00&1122333w44d55N66477888l99G::#;;;e<<6==>m>>8???b@@$AAABBBBYCCDfDDEnEEFlFFGdGGHQHHH:IIIJ`JJJ2KwKKK?LLLL:MyMMM(NbNNNO;OoOOOP4PcPPPPQ=QfQQQQR!RFRfRRRRRRS6SMSfS}SSSSSSSTTT+T5TBTITRT[T^TfThTlTnTmTpTlTlTjTdT^TXTQTGT?T4T(TT TSSSSSSSzSaSJS1SSRRRRRbRBRRQQQQ`Q8QQPPP]P0POOOjO4OONN[N$NMMuM6MLL|L~>>=K=վ@DIS_lΑͧ1̿Kiɇɪ;aƇ ƶK{įJ„ ¼[=߿$ɾpa ^ cmѹ5縜Ty0d ݵ[ݴf(𳵳{Fڲq> ۱|M#˰vO(ݯuU4ܮs[B.ѭí{qle`[[WWWWZ\agku|íԭ /H\vîޮ8Xx-R{ϰ&Qݱ@rڲG~*fߴ\ܵ a/wM0{ʹhZTWaq̿*H j2×b/ŕj=ǩȃ^>ʬˏt]Hν3ϫ#Лю҄{tolkmov|܆ ݐޞ!߬2CTg|4Oh/Lj9\|1Sw /Rw.Sw0Tx /Sw* L n ! ?_~ *E`| 9Lcu-9 E!!M""U##Z$$]%%^&&^'']((X))Q**I++=,,.--!..///o00V11<22 334o44K55&666d77:88 9o99:::;g;;*<<d>>?v??(@@@-AAA-BBB#CuCCD`DDDFEEE#FkFFFA@@;@??/?>y>>=e==Vl'@Zp,D\t,B X n 1CRdt'.8>@FFGE C!!=""7##,$$#%%&&'''p(([))F**-++,,,i--H..'//0p00G11222W33'444W55 666F778i88%999;:::H;;;S<<>>D???.@{@@A^AAA;BBB CSCCCD]DDDEZEEEFGFFFF)GaGGGG0H`HHHHIKItIIIIJDJiJJJJJK:K\K{KKKKKL L8LNLfLzLLLLLLLLMMM%M/M6M?MFMKMRMSMWMYMZMZMXMWMTMRMJMGM=M9M0M$MMMMLLLLLLL{LfLOL9L!LLKKKK{K]K>KKJJJJmJGJJIIIzIMI!IHHHgH3HHGGhG/GFFFSFFEEdE'EDDiD(DCC`CCBBIBBAqA&A@@C@??X? ?>h>>=r== .  ucR?, p\L<, sbUH;."ztnjggghmot} ߐޜ#ݫ3ܼCWk؁؜(׶Dbԃԥ7_фѱEu ϥ>rͩGˀ"˿_ɠBȇ,wlƿfŽhr1Ji$ڿL}9v4{>ǻT亯zC޹yI븽f:跾sK&඿}^A"ӵr[G2 ߴϴztrnlkllnpuz}ϴ۴ 0EZpϵ >\zܶ"Il 5^BqԹ :oٺH0m&f)l9}ƿT4~f´RåJĚDřEƝOǦ]ȸr-ʍK˭p7͜e2ϙi<Ѧ|U0ԛ zY:ׯؒx_K7ܮ$ݜލ߀qe`VPJFDDBACGJMSY_gpz%1;IQ^jt&3;EQ W _ g o tz~~xrkaVK;- !! "|""h##O$$7%%&&&o''N((,)) *v**N++#,,,`--2../f//1000\11 222A334[445r55)6663777988899990:::";q;; \>>>.?p???;@y@@@9AuAAA)BdBBBCEC}CCCDLD~DDDEHWHqHHHHHHH II0IAIRI`InI{IIIIIIIIIIIIIIIIIIIIIIIIIII|IqIaISIDI1I"IIHHHHHHtH\H@H&H HGGGGmGLG*GGFFFnFFFFEEEqEGEEDDDWD%DCCCTCCBBuB:BAAAKA A@@L@ @??E?>>u>/>==V= =h֒(ֿXԆ ԷS҈$ҿ_И7vϺW͟C̍0ˀ&x#x |)dž8ƙKŴeĈ?ðj$›WRXῧo4ľY%ソY(ɼpA»oI$ٺoO/չeN1۸ǸrdUG?2'  %0‚MÓ"iİEŐ't_ǰQȤIɝHʝJˤU̮ dͿy4ϓSвv;ҟh4ԗe7֜ sGسًd?ۯ܍lN޿0ߥpZE/ rcVJ>4)! |xtrnljjifeedcb`][YVRQ M H B < 5/%vfYI8%rY@' }^ =!!"""f##A$$%%%Y&&,'''g((5)))e**.+++V,,-{--:...U//0l00 1}11/222433364440555%6u667a777F888(9q99:H:::;\;;;#O>>>>3?i??? @>@n@@@A1AbAAAAB>BfBBBBC*CPCsCCCCCD9DTDsDDDDDDE%EFEFCFDFDFEFBF@F=F9F3F-F%F FF FFEEEEEEEE{EgEVE@E*EEDDDDDzD[D@D!DDCCC}CXC5CCBBBrBIBBAAAnAAAA@@@K@@??z?F??>>e>+>==w=:=<<~766R665b554j443l332j221`110Q0//>/..&.-h--,G,++!+*[*))-)(`(''+'&Z&%%%$H$#p##"*"!R! s  %Ea~ '>Vm !4CTds  / 8 C M T ]how~ !)08@HQYdlx!.8HWgy'آj6ښj8ܞqCޯ߅Z5 |Z6iG,kS:$oZG5${jZK=- ~nbRE7* sfVC 5 $  s aL7 ~eL0gJ(uR/sK!^ 0!!"g""6##$d$$-%%%W&&'|''=(((Y))*r**,+++=,,,H---M...N///I000?11102~223g333I444&5p555B6667T7778[8889W999 :F::::);b;;;<6>>j>>>> ?5?Z?~???? @-@N@m@@@@@@A4ALAeA}AAAAAAA BB*B8BHBTBcBmBwBBBBBBBBBBBBBBBBBBBBBBBBBzBpBfBXBKB>>x>P>$>===p=A==<<~]{$Hk“¶/UÂì1]čļNŲNƆƺ)dǛMȈ@~ɾ?Hˍ^̣2|WΣ;ψ#sbѲWҨNӤNԤQըYֱ dw.َFڧd%܅Gݫ o4ߗb-`,d5 sG`;]8dC#tV6oQ6qW="y_D)fL0iM.  d D % sS/ yW0uN#b5pAwFs=h, P!!"s""0###K$$%`%%&q&&%'''/(((5)))4***0+++(,w,,-h--.R...7///0b000;111 2R2223`333#4b4445\5556K6666,7c7778:8l888939c9999:G:s::::;B;h;;;;;>,>?>S>e>w>>>>>>>>>>>? ??? ?$?(?)?.?/?0?1?0?/?+?)?%?!?????>>>>>>>>>>|>m>Y>H>1>> >=====z=`=F='= =<<<Wu5W~B o6e1b0g8qCS(g>V.qJ"h>]5zT,pGa9 y M # ` 5 o@yH|IyC q9b$I h)C\n$ 3!!!<"""D###E$$$D%%%?&&&3'''"(s(()^)))C***%+n+++H,,,-c---2.u...3t3334G4z4445@5p5555*6W66667+7T7z7777868[888889 9?9\9x99999::0:G:^:s::::::::;;$;0;>;J;W;_;i;s;|;;;;;;;;;;;;;;;;;;;;;|;v;n;d;Y;O;B;7;(;; ;:::::::|:f:Q:9:!: :99999h9L9-998888j8F8%87777g7@77666n6C66555[5,5444f434333_3)3222H2211_1"100l0-0//n/./..e.$.--W--,,?,++f++**=*))[) )(t(#(''7'&&C&%%N%$$R$$#V#""R"!!L! B 4$mV= aB|X2k@wI}K K ~  G w  ? m5c&WGw :i-YM}Dr ;l7i4h7l ?xM%a=|[=$h UC6*y usx!|,ۇ7ڕH٫\u*הH׶m%ՖQԀ:Ӵq.Ҫj,Ѯp1и}@ϒZ#δ~IͬyḠ̳S%˞rFʡxR)ɼɘsR1ȯȓsW1{f R: eI*j  I % e  ? }  Y1l EW-gA{R*f=zS-j I%eD%fK0w`L:,wmf ^ ] ^ bjs%2ߖGު`x.ܙMܻr)ڜU ف>صs/׭i)֩i+ծq7ԽԂIӟd,ҿҊU ѸхR"Џ`1ϩ|P&Χ΁W0 ͽ͙vR. ̪̉kM.˾˦ˉrY@+ʭʛʈxhYH:-ɽɸɴɯɮɫɩɪɨɩɫɭɮɳɶɺ&6AQarʃʓʦʸ !7Ng~˙˲ >^z̛̺@cͬͅAjΑκ7bϏϹCpТ1dі.eҚ|ո3qְ-p׭2uط<ق Pڕ$j۳B܌jݶKޘ2}hVH:2,*~*+4:EP]o$:Oe|7Sm*Gd#C_?_|=Zy7Vq1K e ! } 8 Q f y.@N[emt!v"w!toh ]P<(u\< !f!!!B"""#\###,$r$$$<%%%&D&&&'C''''=(w(((*)e)))*K****'+]++++/,b,,,,)-X----.@.l..../C/m//// 010V0{00001*1K1k111112 2=2Y2u2222223343I3^3p33333333344 4.454C4J4V4^4e4m4t4z44444444444444444|4u4q4h4b4X4N4E4;414%44 433333333x3f3Q3>3&33222222f2J2.221111|1Z1;110000j0D0!0////Z/1/ /...\.1..--w-H--,,,S,,+++Q++**x*>* *))_)!)((p(4('''@''&&B&&%%?%$$v$3$##f##""N""!v!-! S  u(D^s&6FQ]bfhhe_ XQG9 . x  i  X G 3{ g R?)p[C0xcM6#n\J:,vl^UOHECEGLT_k~-BY t'Fl!Jߺt.ޢ]ݒN ܈FۄEډLٕ[تq8׏X"ַցMձՀNԻԍ\0ӦzO"Ҥ|U,ѺєnJ&оП}]? ϩϐrX@% βΙ·p^J8&ͻ͖ͭ͌́͠wnd^UPKF>=9644214487;?DHMT\bjs~͆͒ͨ͞ͷ2AUj~ΐΧξ3Mhσϝϸ0OmЌЯ7[~ѥ>dҍҳ 4]ӋӶ=mԛ,[Տտ'X֌,aי@yر%`ٚNڋEۃA܄H݉Sޗeߩ6| R,t S5eM8%vhYPG@<;9<>BHMV_is$~0=FU`ly*5ALU^f k  r  v " z % z %z$x snh [PB0kS8dE f?W&j4 w ;!|!!!?"|"""5#s###'$d$$$%O%%%%/&f&&& '>'q''' (@(q((()5)d))))*L*w****$+M+t++++,<,a,,,,,-9-Z-{-----.5.T.o....../'/?/V/n//////// 0000>0N0^0j0z0000000000000000111111 1111110000000000000000p0b0R0E040&000//////y/`/H/2///....}.a.D.(. .----i-J-)--,,,u,R,*,,+++e+=++***h*;**)))U)))(((e(5((''i'4'&&&_&&&%%%H%%$$c$'$##t#8#""~"A""!!C!! @  {7j'W>gAd9Sm6JY ky'1<D K N S U U  XXVSRONKGEDA?@>>AADJPW_ iu%6DW n9Rp$Ei!Gs*ZG}=x5w6߻z>ކIݗ`&ܲ{C ۞e4ڔ_-ٖd4إvF׿דf:ּ֓kBթՁ]9ԬԋiJ( ӯӐuW=$Ҽңҍu]H4 ѯѝя}pbUG:.$пмнлноо  *6CO\jyщјѩѸ*AVk҄ҘҲ1Mhӄӡӿ8Y|ԚԾ%JmՒո*R{֤ Ktע(T؁ز>q١6hڞ9nۤG~ܷ(`ݚJރ޿9s߳.l*j)l2u? P#j=]9aC%q U?)vbO?0"rd YPF=3-%xqle\UNF?4+#qh \ N ? ,   l V@)w]@"jH%oGe7|KY c(g%e]M 9 r !V!!!!2"g"""#;#n###$9$j$$$$*%W%%%%&<&j&&&&'@'f''''(,(V(y(((( ).)P)t)))))*4*R*o******+0+K+a+|++++++,,),>,O,d,t,,,,,,,,,,---(-1-:-B-H-S-Y-_-f-i-n-s-v-x-|-~----~--|-{-v-t-p-l-e-b-Z-T-N-E-;-2-+--- -,,,,,,,,,z,h,W,D,1,, ,++++++m+T+;+ ++****}*_*B*$**))))`)@))((((h(D((''''X'-''&&&Z&/&&%%{%L%%$$$_$.$###g#1#"""b","!!!T!! t ;  Uf*s2x;{8w4l)^Jy5_BgBb7V r' @ X o " 6 K ar%6HW hz+9J\ l}->Pbw(ژoG٬هa;د؍kJ) ׭׍oS6֮֗{dL6մաՍ{iWF6%ԹԯԦԚԐԉ~ypke^[URMKJGEEFEHIJNPUY\cjnv~ԆԏԘԢԭԶ!1AScuՇ՚խ.D[t֍ֿ֦+Id׀ן׼:]{؟*Ntٗٽ 1Wڀک!Nyۢ'S܁ܯ x+f[SPR["f1tDZ-tIhAeD!lK-xX<nR7iN4hN4gI0}_D&q Q1 ~  Z 9  ] 8 ~ W-sF].r=HOTTNC}2nU9pM"X%W O ~ !=!i!!!!"H"s""""#E#o#### $4$W$$$$$%3%V%w%%%%%&:&[&w&&&&&'$'?'Z't''''''((0(G(Z(q((((((((() )-)<)I)W)c)p)|)))))))))))))))))))))))))))))))))))))))))))~)q)g)Y)M)?)/)$)))(((((((v(_(L(7("( ('''''|'c'G'.''&&&&&f&G&)& &%%%%e%C%!%$$$$l$F$"$####]#7# #"""e"9""!!![!/!! u D  R U!Ou?_'{AUh)q4x:{;y9u4l(`O ;m% S  9 e  G m ' Os-Sw,Qt*Nr)Kn&In$Ho$Lq)P {2^Bp(ZEx5i&]WRSW]!k/}B\!w>b-W#T!Z*i= W,ߪ}S(ޭޅ]7ݞvS/ܡ]=ۻ۞~bC% ڷڛځgO4٪ٕـlWD0 غث؝؍؀tg[OD;.&  $-9CNXeq؋ؙبظ .@Sh|ُ٧ٻ/H_zڔگ8Wtۓۮ/PqܓܵBd݌ݯ!Hpޖ޽8dߋ߷ 9cGs0a$X!W&]4kL.iR?y0m%c^[\a'g/q;~IY'j: Pf7| O#h<U(mBZ-rE\+tDW$j6 z D  Q  [  b &e'g&d#`WI9s#] B{"Z5j >r>s:h*X>kEp?d * O s !&!L!m!!!!!"0"Q"p"""""#!#<#W#q###### $"$8$P$e$|$$$$$$$%%,%=%N%_%n%}%%%%%%%%%%%&&&"&+&2&9&@&F&M&Q&V&[&]&b&d&h&h&k&l&m&m&k&j&h&h&d&c&^&\&W&Q&L&F&A&9&2&+&#&&&&%%%%%%%%%%%p%`%P%?%/%% %$$$$$$$k$T$=$%$$#####x#^#D#&# #""""x"["<""!!!!z!X!5!! a :  |S-a7 ^1|P!f4q?uDt> g3T v?Y q4H Xd&k/q4 t 7 v 5 r 6 q / j + d"[QH~<r/d#WI ?u3k&^UJ C~=z8v6u6x8{IZhy܊ܚܫܾ1DYo݄ݜݲ*E^wޔޭ9Zvߔߴ2RtCfEQ^(o7zGSa*j3t9CDFB)iL5overgod-1.0/wavs/beat/mosq.wav0000644000175000001440000012131010300460604015407 0ustar michiusersRIFFWAVEfmt DXdata  %7HT`glld]RI@73*! lTB9;G\z (<LOMF<, 1Yxi[Cg'E >h}zeN3p\SXpE <d}lK#h2,w.>HOnHf5.aXi^,Kv hBCg ~|U`!7)dX fL Igk94GT w,i frWj =72WeWU /T K :G85Pz3L%jocc CMh bu~.8!Xob<C69]e4`:ch@>+0q q cxV,raOceyYF1W$QOdym6$,?Z YQJuQIQVJ@plym0E#TdA"F,/FX[:m_UWH_ePgJ"z,%9=$cqq4 ',Rpmpd0DJm R$d" WL */.:cU5^wPEC3!jyAnZ)RG&c('TgjxRlh3Loh9s$g2@49z62?*p|UR*WX-v/s=5H6I>[!eHu% >D"w=F$vdxXP^Ku '?^;rE!-{HRjW\n{sGfcgnXBc~C5aAY}T_ Q7:JVO)Pn0e!pv.e8.}dk~7%1-=xLu >R0)Hox~ qzl &)d_;^\))?O{%\| m9,.-zGw/ *T%~y8#O[XFFE=!}RQ".va$~YwL2Av9AR^_RGLv73p~8O6vv#]B1gckfP*u]w#ygg([P[f*{)QNg`*5o ,Q=ws-!{3E\EyikP$5VT.E q{/&ht8<QZJG}m&jrCM,V'`S Z}wCU or$+(vvj=G0A-d12QvlQ)IuyLn-8X+`Qz5'qD?>cOA(_9mxTGN6h;8Tsf&$}VN3j@)=&bwZ e6`'!m g$+GAi\+PoUp[ S{<Q@ zn8EGh^"9uR+~As,bfv^ |wSi8d\+P&jB MxTH>L>) &qmL(L(XZ/eC2W*@|2"~55 eiC#+OW1ybQkBnO%~tz_@,>WGb CR5 qY#NHaKUAK:JHf#w:|3N4#$q9!ZkD%-#RIY@KyM`#B4<2EVV1!,kVYh5/yN#?51SSco&`;mYdN[fw#.Q'~!')fu$:/\XQ4?4^s/%|^+Z!y B]2iy6ub9m;s3n &6a} f?(#zn|\aC _i~M R9V~,51oB _IV@` PROT#1SvHX N$hS R%g"liXC`36SJ4-i \' LHD~Nn"c vJMifmf,F,aY2z=(].@} d_flk6@rx;5aWIrEm F,K=Hls9;}[WyIp#k[ =sE3'kv>8sE3Si.v=1q3;Uqb~sfH%6k2_)Eb[RJ=lc[RaO-"6g DYNw(r_g>)J73}[X3&5`'/ms8G9u  /jC-dzUa9*4[z ] DO!seX<$Ccc|yGmjLe?-3Wd:,`.w%U.Yy_U'WYCjF25SOt^MMAk[?-C3 >G4 pJ55O?W8[_6j\ +kE(%5*vR99M,:u3?#{2z#<9_btg #|W>:MwNz  n R<X#OqUB [DfeKCJkXZv(@4*Q-=:aXaEhOEIfE?Sp3+oH^!OsyB%{lQEIb2$1Hlt6:*a zR>#\kTGI_$ #Ih^ 9F.Hz'1i2m;xnWJK^{mq$HJ:OAe9J?`JO_n[LJ[iPPi*7:WQ(Pl)Sw f-Cpo[NJYzX5,Eq 9\`>6j ^2}z&Wx}k[LJVtF N{1ajPS07 *^zuX @duyviZKKTn7ro,\l-bub+oG["B`1{h9'LdmndXLHSk)XOl;U#c}s@ `3\{L|av~ 5Rad_UJFNgw=+H~>_V >z.jjZd_ @R[ZQIFMcd! !\#^h#]E H JUY@-DRRMFCJ`Rro6v Xz9y^!r *?TtUKs!v5DJHB@I^CYMuWzRN,w5@dx!V@_Y#8@@?=E[}7?-O6fEdIL3x?X9L;'499;CV{)u& +nM;w.gc*`!^_4Std tqI3.E{B+1:Qi22bM$'.9OnUXO}$w {[:ZPhmpu1%M1q '4Hj H?/ZWpqVo;K3;W  0Fh:~&57{d7vT{-9+f;s +Dd/mtxeaVO5o(L?QY%=a#[ZU?FIeTI-QVOFJrO>>r :\L<4n.9|)oe^{yZ-j#W3XA}%Kf'F6(jU=l ,S6m w&Dv[W O ~!A|!R%Mz*]Z_h!ufs#s'p3J?(<*0f7fEvO>?D[V=Ei{eLGa8 OLy?p@{%j!?EWbDuG 7j4a :k4j |Gu/o!:kX$OIz3g(Zby%U>V,0 p 8e0c+`LEXu0|lZ u7+epV43 LzM"UuJUz-U5`$3[U1d ;n'j3l :w=Z{1{r T{?apD.} QV(b-g$;V\^p&W YCT3pBY Z y2>JCp' w+R)yMLrW v5&aE3H3?5ydCt ?V4Q0&1beuGW[N7k0sAdy+w{44M}&T%%q<4*a"d(ESXg9A)l GaCP smizVU){.7Q =M;<f28z{j_iJaKwI} Wn;>VK%YeuU1bMSm,L?l;c1I#=^Z<w+<]!IZ@?Ri40b/xIhp%v :ahPI`a+ eU2+9bK V|$i6JJVv5et`7d(fBIQ&#D~)jKs_ -s%7`-f{sL7#a[+yu R (a uQq*dt$FJLSY($Cep04sO^H/f"\]dh!.:q#z \d49 0}q&R(>,"YTIHDh* B.z,}C5St3vPM6+k F  bQt|eyxiex\E{D~! Im"pw ' /u`G?UA7r:rx(GVg .0MPG M*&/$(h3iei i"7U 6@*l=O?Bn} q_,bQODmC<K=4b>>'3[FXkW U([>4n J-?VP,U&}Y\z -G;H R+Nj&=_aExB&r,{tw!7H+Fb>goX+8G}i U9o]Nlm)rCy qth"Cq9k|lE\qj CFcJf'@\Ui=q`YEr#[2n[#{U<"Z^5K88\9jO=rMC,pt?8.5|M:AnZ'1n[O1c=$Nm),!pZYJjCfeWO1Uyy?*]. 0Esks3z v9`Y1 *T^/'X"|g#QfO.A]fk/Et$Rr`Dz0u]nOh3bC=o'gNcGrR ZTAuGQAs4jCxXG{P/Qp,BG`yan;#3vcxSoH@vD3K ~&;~(ARdmMN>K+S8 VBG0c[g5]k&lFDDH_ &\|.;iJuRs2p6{ ERz tC=7rKkd t?, Z8rv!^)`mgea#Yk5mD~S5mddo6Hb$PoOGNg:^K3iSHI n&S AX^ d$;1kt1>oE2d@-g IC eGk_ cZ .0GAXZ:0`1CU#0  tK`KE*%vW+C.,]! ].~$ & 8 aUwb#Ya@!(!{,Zpfk3]* 6  ^NA`O#/[& ds,[ cLC }<. F 0 O:[J#~%yAm-ZR1cUk2 R H & k9 (MjKs_,ZC=W,X1 \ \ - Ra LG0$`J5YT)X7Y-B0 e m H y?a!>K&?H*X*hd0x)* i { `  Qx_l'fQ&J{[p%<*Z#qO<T! l w 6 5PK}K[kh+wL /*[a3^`0 m W bjHtqaO{gaXJ$'ZV7[6  m s  $n*UZ9bsD,'$w %[KT/ ff 8 Ma5V6U$A@ ]v"]Ag^)J` \ B~s&tSwBi#^8N{4i.U | pg8Uv1TLzu|w\#\]1t2UgC I 5  'kiZ$^=7CII1J])f1yZ<; Z HI~ !MD,cw%5\&^ zN+'  L~Q!OixtHoE#Z$XeQ i  ( {)|+k~}b Y"RNp'yH   R ~ (.>rJ=I`uzlAX"K3JlQ%y   {  =*4kP $=KByP Ex'qU@)i " -  QtjWi dK"Dp |nD(T # <  8 j#ADCV~S}RE #DmdD= # H 5 e 7M}?\jJMj>B'DeHbc$ # S M  %".)0:6 +Ouh&8)Aa1=s_D  ] ` *  ObC9`i[ToZB'!l8V[D ..B^fPC5  a q E G 0_E - " 3F_ v`7  c ~ `  u ~ , E[Mc&=L_[z4h a x )   Cgbi !Oq ~,AQ`}ARI ^ N " HJ-= @vWu 1GSbw,.ytnX. Y m U _>XN,%j8bxl;j 6L[hw xXGC=0 M $ Btu(%{PW+FF`;Vcl| jL(  ? H Z1D9xUC_ktSe  / o ' =,T`5!:EA* e Wh7*SL=,'_;dqS Rz`y6  q  ! 'F%bf4G4SEP  ^   " Y hL]~m:4D?vS-' L   P Hd65tEW[1tP~|efoo 4  ) y C= 1 LfEDbN eM3/;LSF   8  dz4d)V9JQNMN` #  B ) ) R N!\6BLbZWtn8K55  M A [ i dxStsxVpyIJD z  T X  [~.I,k1#: jdQXl ^ V i 3 A-R5Y!|Q3Sk42Ncd = R w N 1 F 2q[1 l(;D-5  M j e w< w!;~he\R+{x# H 2  nt>K=y|Q,Az?w_ kxo ? V p[>%{@kK1DYC UxG8Ec , v 4 9 &EjmB,Jh_1&w'! <M$Ln| d   l y \ A|CH`!(Xgn60&#5I ?  N \Q g!aGBb??*n  ~ s 8xr-Z <{cRGJ4QXTm r  5 & 8lB_.5%q@NTF!;X%0X ^ 0 k h 43D9 |Z]qD %  9 J  p t 'sa*k?3:IpPj*n= 2 X % sH?mY_,o,_6L,G=L> * c B  UgVkSNx:[K[=Q -uc|E m _ B E    lCvlJp}.`C):nH j b  o t v U g[S@ e1PFK9h_w,l+p 7 9 l @ Fe5bi<aP;> BJ*z  e a WEU# AJ Y '{3 Y ~  ? . qd5+ F"w=[#lI;ZB P 3 z v 7 ",]b"2N3mHAr$/-hQO < Y }\9PJ 3eh`+<%CB [ H V % | k]{ c:V.r~M/L8\ m )   6  5lNDmw{3hA[72YLtTPx  C w b  fmz>=g41c^1,a3z: { o a ::Qa>r ?{Bf+gnD@;3P f <`!kslqy&kz\XA U o I  ( YK;uT{^$Wop1sybk\ > ( G h B QV1tO.t7{C=Wc(strJ%sc('Uy  u 5 fD_6c kv4;iXp` 9nv7]1  PEE11FkC:7jv$RmowO    [e IJL/+Q < dDmteq( Z e  F V  (U"3vFy^5|]\yb{e5@}J L C # y m  od(Z!78K+J:Qw1Yj7.n   *  ^ h%Qy G&FKeB1HYZ:$ ) -  )iWArOZ Y D D r.tiT0U7JofLmfCZ^   F  x L /C[h9Kp^@# &lG[7O/ X Z  N / 2 y#Lw- Y ?AuEI d_ 1 Q H  "v n#B[ |[^F=p  N Z B 1 OrEk^dj@.!Jj{{O7]eOq8; C g  x v +  dH8,nkb|T&-$W5J7+rfW 3 p > }  Xbga9Ws\VE+U:+<G7c07|  ^ m " u \ a +Cq|J r(,K*hSm1(^9E ! ? w t <  IOxZuc#(U@s6 JfYfy  q . v e  {Umc`p"+@"g#\V' ?73?& b P _ Pom8{!ei4M*M&r@BL Q o 6 2K_'bYKNI'LofvJmIXOPh @ Z  x i  } CUxzC NI\yXbf 4\Xq R Y 3  %S)u7y ~>Qygz(!':  ' D J A k*s +0mozSI?+A|p2;2a3+ _ W ) Z g * 6\2$vbN5=3y}F]/A@?C  i ` Ws1D}Me~sXyMO$PHzUR y 9 -qW#[R^=kI:'%`Xjej` p'|qH m D z o 1 =|j:g '_)/]s'%wM    w 38,?bsHzUM?H)0' Y q  s.t)^<#W=Qf6:B8k5 a i $ x f &  -]5XH3fbs x&}dRJ`dH  R V @ : tFL(xW6l_ qp s^>lP & A U ^ & =i7j9K&x53b{10v!ow xB q [ # c Y dJ'o| Hy*SHP%z3*T   p 8WGU8*e Y&g?[s=5QHz } v tK?V+8mDOhm3'}k\J-H\ r @ y EiPdRje@D+:=o_ pu%}`^_K s uY7'hc-64`:;{m#=H K i  A{`zX00 :R<PO]&!E(6h c  c Z 7 3  y0s Hq;`|G6!y  < G L \ 17Jky!6F6R j uv9e9rmOGFOg2&x|A a l dc<8cdt/}`R<z7.Q(Z_ ! k $T<3 *|r$g*zvojsTO5} _ `  qt vXyb8`H]s+-o*d ) g Q . 7"T%=euCZ7y%Kz=Oc`=ZE ? ; @ [Blu.1"x/6+P5w}Nm>-i%+_  $ R |r9p8,ij@!NE|okW^D?B{j  ] o `f=gQh"/'n^\}a`HQ! ] RN8^KPn-L1Huh(6 | N?Xq ^ A8 D1 %4nn6U*!]+]1 W acH[h|%JRQbpErM83,D7_ O (%+44 elTlNkRqe|, ^ A -J9goV_4!t-IIJ [iABfToy4*Jsa6 , ;ic2|\b{{ y0-^Y>O48  Gj_zr`fp^C1SZ-[:/(rNT~;QjB[xOtFY6vZIU?Eazt/PWihkk06n6 X~I3S;ybg  0#nLigKo!CaCHI?%~ A0~E  K_kpU.(x]@@A&%v`aq|yNPe8@>x WfK,}=q1?ZH?;#"E'.`k?!MgN.pDMI: rfYXh:|y Lxa FbX 1" u2ysxv^ ?h)V1+%){%"%"%X1#$  h@6?H4t 4<h!?69r'>9tDGyjK@VSRG{ud6X7.!S."HanN^ Foz_inl$mE."bh/NTZXg{h:9\ 3?*}| 4T4G%g~\oyi*1aX#$1_jI ! /J1o%]k /`37@L8S4]5'_x+s+Y}_ J[cGp7{gPm*2 DXS,fZuq}X$U4$W=b*~Rvia4rRLYjzy^)J6^x_\&L  3Ej ^ Ji9)/9EB+$@w+<ba56r4 CM7ad&  vcJ@0^G4'1dbLDS3YoYxm.NQ):?df%nYHrJj23ul$&oo6a?Nkxa5T{~X_',5AEcT5BSym]I1c9htZ o>|N?958V 4A 9 uN67ShV%UYlcz ;}\_R]b4h <YO)3k9:y;;?E+5Ty9n%GJ(B) :tg8,h|qR/5*JN G 4>&T;ei3+zw/<nlN=EV#  0 bPE7_}Cr` H&9VDi3brne+ $= EWEO%7v|FGrGO9Ny(w*n`vu/)RNbdfo-sN7h(4=O1=;P:xyZw!Bl?N4bKO/iGgpp[KI_rQK)yB`!>X}7 /}mT5'}P p) V"C{p4k!V}_yB8Rn<^V9<hQKkoX%rET |hxs(]q>YI #u;@L<uc#\i|APcY WVzI&qz_?B.{&/FxW%f)ANllJ*5 Kx~)^{uT'q7+r!8_ rl>vB1>h zwy_ CfqkO&|BWTMS%O ~dgkcC(O`[I#N@*Vym@8MR,bL& 6IM=W(-jS%LdbQ,B@7C_= e6;1c0T*v8@2I^MCw3 ']`-N*%j;?xIJvypD01L|b#4{oC-` `H+MccsitdtJ!J7j}C4X1-tjMuO( 9f ?mj8Ji'Dc7nuR0)P@cx}nQ+ZG_+ 0__#YuT4?h9OZZN:fneB0-;V{ ^CppT6/Qy$46/m&Gyfah|)b1ZykQ8 "?`  m3o2 :g"DeyvaO7!.Lij:\.&Js4PbryzsgZG5! "8Qmc;Z6%Bb $>O\ceaZM>1 (=TgzrY7cN:203=Mby*=FNQMI?5) +:M[hrz{ytk\J3|nfddkt (37<:62) (2>HNSVVRMD6' "&'$  #)-/21..'!   overgod-1.0/wavs/beat/odd.wav0000644000175000001440000004310010302362654015206 0ustar michiusersRIFF8FWAVEfmt DXdataF $$(+,03476:9;;:;9994522.+,%#"  %(+/34465332,+'!~upf_ZRMFA;80.,&%  !#'+18AMXbq"7Of}(28@BFCD@=8.+ wj\N@5& |wzww{}$3@LYdku|{rlbUL<.mZG4$~tj`XPHB>::768=AJR_k|7\(T+Sv /<FNPRNMA9- t\D* }cN8$ th[ND92+$ !)/?IZh{/J_tmT>& cC* hL7 tkbZTQNNPT]fr 2],d `%dHx(<OWaa_YN?/kJ&oJ&z[:mUC/ !=Us;Y{ !()'" a@_7rN(cE,sogfbhmu&S<jjmc7o$@Wfnrqg\H2_4yHZ+U/ dF* vjd^_bep~AhDm#>Ugry{wk\F0Y/p> tC[0sT4~yz{ 6d!kq7tQ&OC#Idw{iS6d0M[ s:k: d?hQ<+#9SqDwPBetP,n7Q]p6i7 lK) ?q;K%"n'u,XwuW4p5p)U {8l,s=o?tS4*W-k+o"Y(,& X%u6i"Jv0m/NsO.I}StDz@XP" FryU+};Yciq"=m,wA {O(m[K@9=BMb|&]&pS-m 4Tn{zjR3 u9g08@W ?*iK87N>X&yX66_N:@; Etg7}6A3y_QSm(i/rM*;k? /<Qhp~. q X  4|Jt0],nf{4k/_0 ytv4v[s9TE &886" HhW*Z!V1}%e{^6;*])C\F/;o5wV;"#AhrGYd)jN%j  7 p j 5 S $ =FJIQ\r.eXh"a(lJ*:d!t0uV4R$Vya7}0~Lq0Nu D2A|B jP:(##0Ca@p%[4uJ} & - a m B { % ^ }#3Mt JA[WiJ, 'Iv9K#uNe0[}wT&gb.Sp:c8+DLbRB:;@Oe m,(_vXB-{?8 0 % S o } x f E  D " CU[ahy!O)|)GMhG/  8Z T nH'm*}:dfAJCx2Po#P,y%DS"zfZVW`p NbaSveSB+ mK :  C Z a U @  a  P x '4Fe(g b{6{AhI0*Hn#r(jK$BEgwV0|0%Z4TzA#u"H`1vst2v% /Q!x\7 4\ < . ? B 6  z .   CXfr~?n OOo+t@ lL6$!7V|6Ab9PGkkKioEp%Iq<~"w+TrETG0QvFsJ9U 1  # #  T  U 3DQav+]CIm*xAtT@-#!-?aAIi=SDe~{dEbj Bq(O|J5?m.b8 3lX;XrA{\3u8  c   y 8 ? u$8G[u.bLUy9Q!dN:1',5Dc9> {T,@8[rycDk!yYGp4m[hW^=BtO$6=uaF*s)lo / t l 1 B 7L`w$K#ju)Yr@}eO?569I]fwG ^eEbvzxiN+BJ([HxTI[X$oL- !Dl.azP#lGO y ( h p < b  En.Fg*eTfRr?mYICAFTl/w%X1hkD`qsp_C}8?!UJ\W r,q< kM7"  '>]CnJsS*},_T  E t z U N 5a)Fj1ocv/f,V*j[QMPZp#il:{HP4Peok^G(L]E~HyO8=`o= zbJ:.+).=Ok4E@w%}U0yD^a  < b {  m I ^ T?^~7lLIc]!U,te]X^k8~%S(Y W 1N`fdS<?N:vCySCLu4X)m[PLJQ\m LTJv$oEY!7X<  > W a _ K /  G E};]>uY[ x4s;nDxlgit)m h-h36~>Q\^T@Upc@yL.~)(q(gCT Tg:  & : > 6 ! X  i Cp-SVALp.r9tK%yvu7wo5k44z6KUUJ6N ndE\EAYQW2 L,~O]/Lr) Y     M  f K{;g4q_ jM['lB ZBg2XM6GMJ;"n-KC'fG7:Z^'nG&?sR'1q%xHTo > a % @*_%S%f \l"Vi4zT. Z9XF:}*;CC7 t8[ WB&l] fDS tP3$IzD}0SV!\ :7B z Y % L?|K}P88NB_+{U3 9sVr7VB %5:5)d$IL9}!ib q$Vk: qR8"%Cg ^8PuC @x T | h :  4-mByQ<A]TtCmI( 3j@Ty5&h&0/%p4cm_K?@WHl=gL9)%8RrKa\6k1Pr4| C f | s W 3 AH0kC$qr#GGo>oO/JX g+@)i ##^$S^YG?Hf\"W-mZI>7269HZp"fvm>e*|<WW > U ` ] O 2  i%0{[7{ ov&M T}O!`@$ I}LWr*|Ud*brqfcn!FKV. qbZSU[ct*jdLf e"f)U9@f ) 7 7 -  a6+kP;4Gl*t:o>{\=%?l-z)?O*f   uB9KMHI\AMd>yvx}&\?Pk(f(QL^    c'KI6xfbr(Td,f;~^C(0WKJ^_4j\*g!399?W AX%vN0"PsHQ4WA:YGJd1eobM@AXBW"`6 bI0 %Fne dql8muCO my$})9T E b3dE& "M}L"m!FgOcG9nb1t.8.xnn<n,GY0 eK5#">_<.77 BsW'u.M\bq%G@f8 uU9" /TIYoD1 =08:.F "z@v,87<Jj$`#|JhAo\K?747h,}pdL"4~-Us~fJ%o9M[s;rCxV6xdPB2(! *8Lh1e?r,Plx_AuF|IzId<mQ9 9`A2Z.r>O X}Y.o9`)W'nDmM1sg\TQMPT^k~Hy7h(DZky{n\K1a7 U(sGbA"{i[MB<50015=HVi~ GNPNH>0 sO*c=xR0w^E.4V~Y4%xnI+VykM. lBqH eE%hR=,4Qu'Km!cB"wR0kP0~n\PE;3+%"# &(3;J[o?t$i;T Br,;@DB</!iI$pK)bG+p_N>.# !6Me9VsnT;pS4zbL6$!AgT?y(^;[txfO4iK* ~eK1reXJ@7-&  &3APbv $<TktbN8" x`H.{k[OA6*"  *7I]tAm,_Dl!.7:=85-"sX@( {gQ=(wkc]TMIEC@ADFKS]ht !4EYhvuiZL9'yhTC/ztpnikhjmpu|8Vz5] -FavraQ=*~iWG5&}vsoomjmptz#2?MUbhqtw{yyurmb]SF<0"tdWK>3( *>Qg~'A^{".9BGIMKJDA91'xj[NA4*%,7>FJNSUWUTSOKG@90* xoiaYTPHC?<7410.,.,/004:>CKRZer~ 1DTfy|si^ULD90)!  #',-2345432/+*%! &2:CKRY_cjlnrqsspqnmiec\ZWPLG@=92.(%     overgod-1.0/wavs/beat/ppipe.wav0000644000175000001440000007246410263022570015570 0ustar michiusersRIFF,uWAVEfmt DXdatau    ',.,)*@VltK )?IB3qDI;hxW)umy=U.BQPL=z@J$Qa_:n l6 !_=KC8[bY3p t_Ga^&b_3&3W),XU4m>A`UhJ8>Sp;y9#UwIQgq.9:0YCv;-D&)n#32REL7[P?}.H(Hm` }1?xt*5N~NKM|'Fd1*P*}SOW}NX*Po.1lf'i{q m(a&$i9|R?18't/=2_Rq|/E=u7 P P ' /#%( ^bB{IV&v%v>i4c]nbC ib1`-'EN N p E ? Hgs{c=HGMK<'Bwl%DR,t(XtZ#CmZ] za`d u *U]j[EQ? /! * k D &gr3EI te(u|qOtstlhFXn} #>[Yj 0 {   { z]U2=f7]252N?fC/n&C+dNO`Jq4+YD H= K  H |9.O gP"R@_EU2+^Kf!vO./g8;OQ<,y  1  os02UuA'{jxmP]e@Yz&_)J!   n j v %\&RkciNx#L 1G (+_1AnGS#sj W j  qMcY^tmXWkoO7/Wm(rPDS\[wjooG x < f U  ssFC#Y+/Ltl)l')fMEqSOm~#,wv@;Rw%LS x z  jp[DK'Tt7j %>ZQA,VaRvR/<8QiuwA4n1 $ w , }) fr's8\0bO13)d:i[gW q  ( ENVfxPm >kaB|"y w^f%f@ d'9Mj | } ) @C>>KmR#5v2[v&xw- bfw*qQ0RAB'>Qn+FOw " s A _hjn_yju[Q5_4@UOs!56zBd&v07Qd! 5 +  &2ODhhEA|$U+xgq+%k2|lI vW\T#A87p % .  <R[as3`0 /X,p&,a^5>={veggbC =*i U?w&q <  q 0K ?P|T\Yh5bXUJ2-p&o) d   I;K<r)9zt-, M%.buR_M )ARO1=M;0PFXJ(4\W  N V  9U_0J*8+U0?1'GHBz; T90 C # #S{NFg !r)^Rkf}(W GXQ+efp00):0X(- !  A < X v hB"9]4_NmyT;A%-gf3%c"JcdEYN Iw`~ \ H   W {V(j~0U`qQL,;i, BXF /]A!w0~ @  ? 1si|ye#Fq KgsS 4X xTT_W{6} }C  9 L  } ^P7J[V#,ez.n{^ct5W9suQ@ P&}C" D e = Q 2< F}KT,wOBYtQh0p}/ 341@m )~4 b I } `  iVNOK`o?,~PJqPVk=\ApqFr&7OY m W d .L4Ee`QK aYE_M\h ]tSqlX*C l  b  MT28j`)=}pVqOot\D%\RpyZlW&E0TD 2 5p,6&;9oJ*"OQ<(l)e3\Y4b V?x G T { }HTwuD#**x1Br S WmR'~UD W I 4o _NDwXe!2fn4}" Di%cv' 2g j f   Wz"3`=Rtt,w@+TdN8 KaNV+m+=(:d,=(  Y R "Jz&R@W3XY%zh>A;-s|CY\--P|  ;  YgF[? Zc:= XJ0|ZHtl4V5ZpyB:Hh j d b   eFT{*A2Y- 2 \O9tpqEH39Psm " # $ smHN[\Ta:=Ayw[Q^+ ^P>-ZM2\AD]z . & ) { Z12c\)%Md( F}_UUqib5SpO~u/tTbZh J e r , 45u;LiO~gY)M&%?ER5V% 8F'CSRC q M\n`"q:<<[{<>28$^kGHrJiZ $-$ {  /UVQ+jn}pC*zuw, <>G/~i  J ~ CC?H6R N7fT|V&Ut>R2ob~ z+Uk  U | 0*!|hZ][r7/j =w4Rl3E(ml# N\/<U] F  j--{^F1a2G!&,4HjY?lJ^DB5!~JN/.i4 ; v av]r2 mS%Q0GNT[klL{XmUb?_Q//K5bDuZ" l  Y D|_DU@c\LSxXgrRxo7X7`iMn?q`T< E a  > .woN/?s} ' z|,O~#h !,sAxvEa?']  =;b"]yPXcwLO{h&"k6lO YB><3 l,IQ) F ;8[@R%)X(r8$[V";6SyAs*0nQJ Q\P]N{8 P y {C.; 8C.22 4SwpLX^qc"jC"VgmB p A R}.'ilU8/^G#$B2!=GvM VS_9 ? e  bh0avq A@n!=P CA&2N?2<`/wt$XB`2f 1 5< B_]p:pE*wE{9 dCD^OJV3[(L)._3v5e* "GMlCEMGPN%p 6]To_&#_jP %WqC<e R`(re0>Kf~SaP1bL;ax,e~l24og'G>\Lj0^'V:B{}2v-BdZX~=7ql-LJLEg&htYjtal@`w__q'{h} 99^ i8w $OPEKULIntZ.g-'E/CwczrYknWdc/4yP$b"pdLRgpoyBRl&~&j]riO\V2~K{g+S!q:g3 K0sYa|+2/}%#n)Hw<^`SlaGR<^ Y1h}n9xT@~pCHsGT[9KT; v5^1qw:uUMi\AIr)B3XxqJ6#)|y\X]Ib)zYRZ[/gmLgJFgZ<@j#tHpuXK#y k=m7rX`YyHy /&fpo-:WACc]9;c~ Qx8ixf4x] M~(NUZah#$ s%%T(oK9?d];:]j1[*c{tM)Ru+!AqTVhB:GF@ k\=0=ea>;Y[q>\c&[:IAfGOfOPo-_Sy C&zhJ1+0##=q6~TJ^7/[vFOi181|r*[KySNfYoX?zDaSc1?a>y(APma!*!ml-eb7+yH7Ht )XnCQm_m, *Q=]ZV. x]j+ouN:v>$(K_ :$AJb~kw(916CW\=,nJz`)wdIu6 $[6WMt {)p&)om2rt`VBF{f-M2HY0W`HWX+4rk[$9D#@@.~#Au" h|$cnAd:@H{ BstHv=h)*. &,|$N)v lvE6`[%EJ xRy1 B69nQ|7a[jw.s v&[6wjJKk{3&jS!O5*casAC 02xUo$dCxP)#7q4GUs+q<2\0Xo_`^AR5jr9foPx; 8Ny|S *i./Y7(/Bj/K |7vs7\[a[v\{}&B-1q{\5(M}YHIZ}0C$B?|#Q;OA@u{Nzg|oa<\O<>kyfcq19?hmRkB;U?0<@&Svi@ {o#|e|qU =ECR67/ \VhG>2 h0TkqlR1 z'YdP`*P[F~4EdT=(! wFBZ="G 0KRO=/N}@$,R \1T{:D{!}$1= :q m>t'v )35& }3Eb[u4'^:`*!Lt}&A_NWr*>]Q z:<J^rG raTP' 1Xq|*S?N7I=F-gu=33p1}hXSXhgt/zdbNEGWq6w?#Loy\Iy@2\|_5QW#{ps{ds/||y3k!]&HctyiPNuw%'B[hnj^C$b)}Hfp1-2`9o"<S`ecUEQl`!3>C<-vB qBfm4/BYL0 ,ULz.CIIC7RbF _,lChl3?!c~fL1(Im%P  +4.'T [7ikwJkE"ll3L<fJ1  $:[|*VUS#lCqR4 uj1bkdI3 !4Ih*V~XG2?eb>xVA+ ){j3n-)cC./Jf*SwWAuAhd<|`F:,6h1u6STD'{V7  +Cd,OtyV=bLwe<bT@Ef3~!Uy~pP(f@  !?`)NruW:Rvpz._  g<mWT f1,%q{NvG!8^*NpgV5yCUGRtK$)"f9oef338t<P!3].Pl\S5t3h5$-Mz5u&9C?4a8 wi1?J\T" 3^ 2RmQL+f!M(X!h4N[_UD+ _0i/E[ v0[  5b4WlEN2m<:zYA_r{uhO0 S(&h0Kk-)Hb xz 9i=X8I1j(aPNrtX1 xI-j.Qy)IH'] gi[ZdyCs#C)D1g EE$[}Y0m<7j-T?fdE rjpS@<BTq R /?4fv08*iX%^-Am-US}~`'(n_<# .Jk-` :4hnvwr33w}N~LKq-X ew=6rN#  $Ep?r54ied^b*<t@ k; Vr.ZuRAru<#L}V07j_OKfQ#C/2(e-V%at.W $jNwj*$T0j' ;k\v>7UDK7KPI7Qq<2my1a2|(Uw\1dM =oXl1&C~7T(OgpkW9t8VD}{.T/5_x Q B|.e~ @sWc#3p-\ZhcR/R @A8\p{e[,"]*oQ h0^6'Rr}lKp+[N;Tzny_Qttw? UJ#n9f 8.)1fg<Gs3([?Pwoz[Ie m]]m$g:D$uFo:54BzV"`J:f?CdjrUAZ~\HIWu Kf<%xPx> <=Qo>{5bOrE:WfmN8OnG51@[0wL3%}\!E"CG`VPx^G3Kv`iI0B^7 (Dk\3{w+&i +K(LR qm2gqIz(>i[bA)6N& /TDcj")'v.7R0S\.|N 9Pv!/ZR\;.|?=m*qLqZ&2>D&Y$5Zf8  e$Q SsuLJT3"p1(VX5_M)?NS'0f,>anD&y<gUkg;AM-c%AwAK=(J\`6;p:LrU.81R~7\eW+5B$Y-c+t70*W oqDJ}@OqZ:DA- j$Q acJ});{M N^%(dUXLXzb)HTP=~;gf^;vrp0tB;wG(p+ghTb r 9[ccO/P z0kY*baa( xk<'d1x#t7tvbj uBcpn_?d I +rW}NLQre2Rd( Q+mt}Ikz{kO$z4]"4wSp ;:lkBg](~>~ O%)a@}~&!Twy]4Gr6%@~Of'%WZ/~z_Ux#st+l9~ )oP"0')^jE[H5KLZCEnpVMr}jgv[(mx"7m6"6-/ewT!l&[CWGNp,2 `cNGkta^i J[p >, I ->15l`3:mSbEC\rOXC>dkXS_w:yEkD6"V.7F8<to@ KboB7JZ>K;9` fQMUl*g3wdOK8C &l22YaJDM`X b[T[N[$<~LMVCF~Z'n,?$*x1),VZC=EWx IQvtS\ial3)ISQYEJf6?;c # $Q{U?6;On;|@gjMcx{SKhladMNoB M < {hP MyQ8/5Hd-h.W\Ei mc~ynkS QzJ_:oeLw; JuN5+/A\[HQ< n ,{#ztUTU"m-8bM3m{_'nEtK1(*;TwN :E5 t3C6 |[X`/{?6Q9SbH]u AqG/#%4Mq@|)6+yF]J `Yh9N 6C"9F/Ihx>nG,!".Gi2n*"'Wu ^)eZsB \7~7 ~+9]r h3:iG^q1K1qG+-Hi#Y\i wes*Qy[pGuB# ;g6D{YsE0rH,,DeKd ~&=[|ZwMO."$=b#w(_rg@c>0pI+)A`Bwm-<Oe&}Y}T(^:**@afJ\S/X90tM1)>]5ju7T`o*X[/iF40@_O)<2B/~/xQ5!*>Z{-]zDl1uz/Ua5 wP=8A\9  3(}.zS8%+=Xx"TQ5F+2Se=\E>GX~'o v)|&}0X<( *-"$-=Sr=le2j7$(HqD>M{pI sYKLVr@Eds.`B0(&.>Rp2aoA T?D]R@JzqM'~cQMVk)pl0Sn*cE4*)1=Ro+W}xPo[^wbFGvvT,kXRUhV}V Mp-iN;.-4?Sm Lr\.wx(pLCqxX3 u_UUbz<j|zd= Cm-nR@335CSjAfi@ ;| N@lz\8}fYV]q#Oa_I(}8l,uWE:6:DTk6^~vR"KU ;g}]=l]UXi 3EG0o-i-y]L?:@FVj/Sub8(^Y 9a}`C saVW`v+)`"g/~fQEBALWl%KlrKw?rW$NN*U6WzB`5N`r}q`N=*yocUB.1rS)d`"~31 EK1N3$&`"%!^u5=29K GI:CL9RK U.l J&+ yB tWh {dkL>nqA(<D>-PN SfYRS]k;z _m+1w{/O*(@k 3LWRB |1@Ij&by:^ 7[RI!]&)& xW4vP+lYI?<;DOa|9g1d+c:fS<Jy;tS%Px*Y5 3]q#i@ q Rdy6@CA?;;@Qj `F|63{Mu*|z}a B _ T ! R'88$}N"+h$< m\GQuK7qCi<K< -v> wg{w8.^6c~{Wq$'D4p*=VdRHISd};/)+L!GQF%Ovw\7nu<_-;ta4.?]f t , - s } A J s+vAE ?,'ui(88$ 3 ;  "XV  A L . 03$*e< JRs\3)@tDP( ?7 u <<Uw 0)zu qcQk?` 4#)  L  v  : ~8aA`m zM.)i&VhZ1\8{=,p#Y6$-GvP#%I.?P ]IzxFT 7 hcQVIXL b-oIOmh! V Pe j / QqrSH"9pAQ94Lt^UuhBp4 > q cF A g4sxqt=8 ,]&u s  k X t & ` ?q_O<zeG|{[r&UD}tJvA0mZphqzu r C 4l!>UoTs(st0hw]M#k3 h o7K+L j  "GhapUPlkd?.6QeUqN :Zh\ # 8>}[  8xT-:0Rn h"* A ;A 5 Ks^<{u7U;0|iK!y ? d X DK#b  P n ~ }qg_^cuU+H^#f! zD+))# +YgC7xp>k(qk BYD|2j=p~c!5 "Ua{-ZNo8mkB F KkJ z I%i}3'{{#Cyn(0h)C 4 rO??  b  MHwC0?r?[JLh$yV0g Y ,,QqE ~ , Seg`^bo&>T_&Id|yqX' \ C9 B^ f ^ G ) HtBG-OqZLTaeX3(/^v|n^L?2*+3D[|coI:9@8 \qVqp.PCq87%xL# ARH&%I85t%]G=Hfxa* mY/= ;7>  M<?I<7vdf|7`9>snW Kn^k o ,EfFh*N\,1\JH bDIh YW s_%" u  3:6&4eb>@l7^g fML`J|w|c TX#:,~+PUF ( X(/nt1]7tp8sF &+2ASo-twJ;<Qk" V s  zALKs+J^T/hA(qS|TH:3H  0 *#N<bFP ;qj+?7*T;5Gm\w4!UP &Z  );{ ?YjzV8=h$d. !G3GDZ  f k}   94 4cKV0DwT?7@[Dphs N bw fo$2C6 X F?h|>tb o@Zp2hJ {ipHzIx  R m  d xi^9VK#)UE "ty-7]E01 + 9 . $di/^9- LjDl!'tZf?19VFyE:Sw k ~/" v .g>kwa=,8WG`ne,l.m  (` S 2n G P%$J hMU/GaOEKYyYgXdy \ 64 8 'D z^9F={8 $1!xA`-mrVa&oih`E z  J I ) =  `tAO7 Xq{L @&L gpsN QDdHFiH^Ce 5 #o"$iUYrGIlQPgc!uJ5Q Zy  v!nvxY[^eas|#L_ P " X _  0 " "P:hR0-N>*g7n)?[tSE4 ! Y {}=]W0; U XIw &ekP i%6CQh6N%tM# z 3 9 qv&\vrEXL Q /q= vEjz#)Q)&B&D m i 1#sT  Ex;fOA;=G`;R#9w 5IK1ED+-Z)F<@  `)UY;d\ dab1SK"6Cf-FP3R]XE+ E7+#M)jr. TXI9u*Yp d ,2oLvFI=0 kdGV*mgE `3 D J @ * R6Br{CV$ l 8zMN:U",pu62nk.&Syv-C` y P <H('Tt 8[~ -Kf|=v*W/4oyA))5AF5XN Ra  Srk6V{fasDNSF|j"z Z6[~dsbj}Jq+e&i6~PF\^H{dC{s7 f J )+|pO!0 B }S p CJ34ZQkiHLot|=_g= 9 R X R=Xd*& sHkTg| F "TNeW MklR'xnwZrt" )p}Zj . g  _ S gq H3Le97N}I)hj$l5 !y ,pz_SYrO~5!cV0@J_R8pi3.T]D ;=s"c"FIR cD$g":}! HWC>x&d  5`.|lk ???>7R j7$  < Wd\I"NqM%'0$j W Z*`rn_G0$(AzR3J,`K *{  Z ^QK G 3 ccFii=UGo3-h226Xqld_~q1( /|s'C QXtJsc"4<ex ~@)|LOZ ,-a+IW9H ! oU cKN d N4k U ,O[Q5PF bs  tCc{jt%=N\xbKj`(pG  W 4 8tQ{6zx:-,%vhhe=m{jC y1::[" DlQp1uyWrehdS$E_EfT/Fkklru/za0TP#tt]YL! -bwx)FL,=/ | q yxb"04$[@ Gh {>F+:6==IkQA0"H < 56?.`Nb=nuA 3 I *,J/#UVX~*dXvsmb} 1  & KRDW7,8S|V{;ykuS9._+=TihBBfG4M1G!EpR-79]$NRy- % _ ^ (  %_(p\I?L1a6@I 9_)6_qfq W_5FKD6= CA6  YRcd J!kp4,[jKf@> o6 vX+ e  nL1sr0R5JP: = [K]Fj]&vD/|Y? TZM><kV/ -P%IOX bi_?~799Sq- :'cfTpy>p ) /   ; { ] #Pq)|{- 81r&[>vbInXIT Z5U|8U:em g ^;) g2Zf ?!'g9h-L"s%CL} " Y z zVKEc_CVG.^ R{M1Vv;s]L8#'=SRF+wEqeacjz %>Wj}{hTC- overgod-1.0/wavs/beat/reverse2.wav0000644000175000001440000005102610302362762016203 0ustar michiusersRIFFRWAVEfmt DXdataQ0)='7V>g0Y%Py!&P%~D(Jt<g*9q*Mw?hj[\S\$b$OuEp/<*7s9h*T}$Qz!Mva!b)T#zy@`Il:b 5`66`(N 7_(P{;3j(S~JsOuHFCt#b)S~&V a`\zG3h .Z0Z1[h\)>:o*pf#gIn@hFp!G4Q!ztiu+` =fa\Zh@iGsVnK15I=}EoCjRFFq-bIrIy2T118}*B$V}/FH%WJ}*R6`Bp $fsS |b6n*X1]Aju?\NbS60e;NF"_N{.\ :c%J-%8|=?8T 9o!( : aX>n!Q~9a.pNw5Wqi> K"L>7]Hz6f+]#QjClf*bxic6{Bp3h$Z!PE{NvBt: P+p2|EFsF"WH} Ze-CHx 9SR NGz5 NO&QHA m*YOHzCvLw2*>0+MBw >m4e0_+af BLf,eIZt@d 4 LRLep<X/]%Z.@ <I ?uFokk?$ZPPTUv 3aZq~U3a/a*^+_,bS53WjOG~0LZ1k8l8mZd6W2c0d4W^\]hIUYDxFuE{H{O&Z-dFT~1k CuDwCzJP"}k_v}i_N},s2K(yBxUp-7E+`6qN(_.$@&tQ)\9rI}&[8pLmD|XP96Xp][O @_ G{"W4nJ_[BC{T.jEfo "muY$]:nVaDs+`=pR4nd,gk*F7oM.h Ey [>tX~>LM=\J% _J1iG/cE`ZFO.e E~%bdnwGW8 C}&Z yU/j A|)\ E|rKn".Fv{UU+`H{)c D~%` G.g!2pX8tB.btD(`A}*/+!c Dx$`L2iT+84mP }^9vW>w$d[X]6SdP'` G4nN;u'_ H4 b [4\oE~,fL fL0gS@{-gxik~;B:n Z  y_By-gT\by$a\*Z;u)`M9t%eQ>{/g,_(7:[ E2stt` G.m XL<v;4ecN@x1$LI? U G3l$cXM)-K~,eXN9s,i]MD~>yjzDjkNI!Y@|1r| vaN?7s,lOF-"q]H>z7+]YTq'fVNIyTp|W87Q7v0l(hZOGB}9xtbWuri5n\RX*;7-^IE?;wtiJ14v.i%`Z(] `,k]We=J6(dLB ^5v+l)g#c!]ZVRMLJ^Y1h[Vc:HKF<}0m)o,l-j/_Z83w/m*j+k7l$ X F HX6M*7tq?PEHIDDHNNOW fe=*O@BHg>{4w<y<CeDPZ'm4w>Y'>YD@^ZkL-l0r@L[} dAO\S],h8y}& c/k4xP4:f(~j(3x/ k1uAQ_%k6|GZ*mr9d!'GQV:3K1Wc/tBVm^U`ea4yDU@=UA"g.rK);etitqQNIFZ(l>Ne3vH^0s eZ g :A51J6\)n?V'm.@EW+B%g6zLCD`M3w> [ ;:+I3C>|:@[-rDY,sFa3xOLZZk[0cFIm5~Kl]n_9wIe: VMY/Yh'B)m@[_`kW%?-TY:PA>CO&pA\/yO&kBe9p8CKS7H}I"_B{3IdFc4} S,vMsNMY4> 3W=[1| )1I5Z QM^hGg>_5\4zX/y?8',/n@#](Ij2S*qP%qLo5.w>ZW#GqX1y V1X Gh4/x~Ev2*gfx9'iG$nEkG#lM)v@$vC B,I?^X~z"kBjD!oLcY%<yl7[..y O1{VC9O{ h%hc+b%R@|})ZG"lI#oP,|]9e}\"V!jF(va^o  ;9Il~;:N hO 8 k \8d?%pR4eEYa"-m4EnlDQMGst!pI)t Z;"m)i-_/2=x6`9? iM,zjd([cxxQ\][MxPT8hE+y[C*s YaW6fao#0HWa&'!lM/~eK.|4^%M!&v}]"ajN1gZZ\T!H$D.`_LFj$O+/aH+x`F/zdKHq&U._.~q8T);caK'x_K1~eV5ggPEa"hs X<(qD V3{;GPZIubh/ u+fM/~jR=#s_FEFp4Q"-6,]\F'wbI5"rQ%RLw?;!A$J5kS+A%OO gH*C%J7mT@-zfR@ T1O%KR&rvJ&{ZC/}p [F Q.TE.p1{:,s`K76rATC)hk80A>)h#u1$k X?0k\I4o* z89|DSwzRk7B+[<(xcUA2an$ygR{6C6!o]MJZkaVkx2V&vXC'N $nO!{lYD7#ucUE^k({}\tNIHIK3k]O@2ClL ^I77M3cS@3$qoAc}=\C+Q3~nMg/)z_32l XKB3%rp}};4C9"K!q(FV<)|m`U}HVRYYE6_u)41{a9;&{k^4'{fTie"wm_FSO [[M:-~"qg Z;CCyKSbQ!' z&o ]LC:,!X_ZhiZMpz$-(u]3;&{mb NA;S-X +=)wf_%I6LC/&yjb Y&.h x?7% 9@R~qdY ZF=5)!u=;|1TD;2'CB9*71j\ Yl)dbLD:4ZH `ZJA=3(A>n#KF5 "#A=[k nl\THDBTJ{-TI><3{=(JA74&-\AZ/ 0EVSHEE0RI?42-)}ob]$y2&{$/tP_\M:[sOUGB>:8H0V~l8.'z"up+8bUtjfa*x e%62..8 ?dU#{#skd g c _9)#qhDPLHSz/Qy0v9g?s%z!vqtvo#~F8^TOKLU8Mrb00.)0N&2e.3V` ] `_a! ZL-?56684s}, ddadRd!h&@W?Z \HHHJK\>;e#xooqw sRXrFGFGPcHhb'123:;>!pfM ]XZZb^89]S&}*+-<4mZc2ow#)0)UK3GDGLQXvreklt?nI^y|Da fms y&%jG>v94;BF@`b-$T[^d+z^L6Dje:q_ hm z& 1,|/06;HM1c^D[ ]az.r=oiaPTSTPqYU"8.,~,)|6!Bl^+,z"wr!(GWj|YF7/|%t?=6"WN:+!qdS6dEZM:9~O-?XyPff5/Z<(xcK7ZgqS;!p V(]8^L.zb?LRH $gHpF#mO0% 65}VmS)uP+w Q-D,dbx:'rI/oVj h{w<0y;P*pE^&#kj|4Y*oB qn}7[(p> ko0L.8Y"k-k5vCputt(vDJV[#g~FaB 8gA^B(lEJG H IKAr[&9 MFATK9__&g"a]o;vrv}>P7q(b;2w-lSE3j^tS 4z\HVLWFHcK~+a H)d vSA4nI?CYW0A{W4l?7Bn3@?%%a,`2-Gg={RS*a,`3KlA"a Ud/ruM9~/n6j,b'XNvv2x N~?t*r?`(`!XHw;dP tM(<r[+\7eZkVV GCmNz1_?lk4p 4pVFg"fX?nDqBpAmw/g/[&PnyyP8a0W}&I 1oDSHnDk&-b9^Ab&Ko.QuUW=q4%~*p,),:c5[ 1Qw!H8m/-N 0TyA'U 4PxBd+~DUy{!g9Zu9L{3Ss *Ij @_+B-T>0z%9{yDi.Gg ";Ulca| (FaxH;Zz1Kd{HMC`K;Q{ v '>Vl#<Ldv&:N_@$"5Ppk}9E^8M^n~0@Q`m|{ %5EObh /;K\jv%,GIcsxjP858?P\mz?K6;FXhy )6?JU_jsk V083Mg~(/:BKP[_kn{?!*eVXajw'6?T[kkQF682<;##)26;B $'+027;>CFJ* ""%(++016499<>+    overgod-1.0/wavs/beat/saw.wav0000644000175000001440000002752010310244560015234 0ustar michiusersRIFFH/WAVEfmt DXdata$/L u o<MVv[οTïPʜ΅+}Z1 76$(w,/"23 5u515K420.+'# } KE?+p y |~Z N )^_Bu3ˎƒ >O׻,` UU"%(y+u-.///.a-+O)&# Y R'yJdSi 5t 9 b9l|~&pr1qƓ\ʫ/*{ S"%(+,...[.h-+*'J%p"]&}0 " [~nRx{ cd n v F9b1.r аɆĩ2yʒA{/P7vR"&*,E/0222103/%-*'$!t  #/.  ~ !:`BӖ`ή̉ʈ˵pνА֡H<R^ 2 q!$#'D)*,,,,+*:)Z'1%"+ h d   D W t +gT֜ҐblM ɓʖ+AO eRN D#U&(+,-B.X.--+,**(%L# % ;a- b   ViFUߖ}~/ʙɣAp+o9y+Bݰj_Y A[ #t&(*&,----6,*W)f'1%" _p XLay ?  \ `9:gkܭ?/҉Yͨ|H[Ԍ؏f D #&3)V+-2..(/.T.I-+*(%7# ,qo = S bmtrclynBepr~PuI!wQ˯ˏ7 G*mNFFC. p"B%'l)*+m,,M,+*J)'%#F!B  b# UZ  ? 5&t! n c S) Ձkݨ/ w" %')+,-..-,+"*V(H&$!^`zG J ( 5K/XyߏGKէ`І*̴˿HSU>։44vfC x #p&(*l,-P....C-,*(&$Z"Y9Q | !  NE?Rkl,4%_gkdѡweߙ~aS? *!$s')L+,-..-!- ,*4)Y'G%# * M q!(Co0$r?r ߏPM՚CLμ̟ ͹qnoftF"c 5G"%(*+--X.k..w-{,4+)'%#P!p$ x 5 8 -&q5o-rG5N۞w՚]a;n)KٖݮI6 < `#%&(*2,m-C...p.-,}+)(&#!4 F  MSpXV11M!6֑@Kϸ͏˅ˬGSκM EBl!P  $&2)=+,*.////.$.,+)(&#!3pQ j * b \-vMxYЎvɄȵ\*ɵʴ!5طUj1 @td![$U'),,.s/|0!1c1D10/.Y-+)'9%"F mTm V 0 WY!r<,ԍ7>ͤmʡBO""мҲٟ܅#Z ,)!$<')+<-.g//0/u/.-,,*(&$X" BhXo4 - AJLX#({O9 Ӊ^Ό}SəMq`$C״tt f+w  #&),./01O2z2L210/x.,+)&$5"adCHz c 1 c%>u3ʲ ŲpŁg9k z"  ;3 #>'D*,8/#123444z432W1/-+r)'x$!6^kn * w^/OoWV9ɼǦżŏƣ#b+ӖOOގd<" o [q"k%o( +w-r/1S24333323a2>1/6.],Q*(%[# \d9 D P;1OrL$Ĥï1$ʼn[Ȝ>BРQNێ vvd (*VA!$8(8+-*02345665%5442s1/-+>)&?$!gW i \C5I]r4ՏҜ̝ʟěĨ a#NԦ׋۲^4" oe 5$'*r-/1356666j654b31 0.+)-'$)"8gZ F}{K1}MEsΛ˧ ¯ĿMMĿ8́Sxەw] H li9$"5&)a-q0"3s5d78::?;A;:/:&97&6?42/?-*'$"8_P 6 ]&4>NzJn48־in˶ήւNNx!^ k"&*4.S14y6w8:I;<<<;<;:/9753+1.+))D&V#a t,i mj~W`FٙՎѾ4ĒryLi ½Ȏ̀Q#RJrj4!&)-0368:<#==>==<;:]8[641 /H,f)t&s#o wt H Qgz9hq߷ڋ֏N=ʘ߾KRҼ"6X3Ԓ4 E]"m { $(w,/+35t8:><=>?L?$?>=<2;w9~7L52T0-*'%"-OU\ 3 %ZlgVEDYژѯ̠zt׻𷮶굣ڵȷ}Nbͥт֥?  EP$A)-158;>@BCDoEEQEDCJB@>b<9)7A401.*g'$ p;#L 65T,B̗BIʵss߱6ĪȐHH6v q!a&q+1048W;p8!51.w*&#ta H# j Q&.q jOsdж ā_Ίجތ)e l!^&v+?048Q;'84e1-?*&"f _ &=LfZOaAr̫ -K,˷Ј֎*D  #(1.R38<@FDGLJLNOPQQDQPTOMKIG-DA=::62.*& #ygO1TbCbG?KNQTVWX"Y,YXWVTR7P[M2JF C%?;6z2.)$ST !X31`ƃٯ-W?ћҙęW\ǟŢQjő̄ӵNo%,D3y9P?DIRNjRVY[]F_H```A`A_][YVSDPLH_/[VR/MH6B;4h-%R {[`Տ»ݳb_ݞ蘌ΎQ]ـ %E y+bRb U`#{,4=DKL=SY_)ej`nr6uwyz{{{zYx#vms5plmhc_YkTBNqG @8/&_ {ϻŪ򳡫ǣqx ܀ӄ"@40ֻΒH4&/8_AIQ?YI`fl+rv%{~){?x tooejd]VN,F=3)C 2xȷٴ^Zۙa(H!ghܡqL%(D2(MAi5(0D7>ۚ8*R#ƈŜ88֊ - 9DPZ]eQoxTusj^RQF[9,(aN-b(ێ*LTm^z )6C;OZGfqk{~GsMgZMQ@2$TlCOϤRkڃ37ƜШG6ϑd  .A;2HT alw}q;eHXJ=0/ !o[)e!kPN5?G̊E+i8ESR^jveu|i]BPC5'" 1PvkޖzmnUE*7DQJ](it~tj_[TH<0,$& %ٹж񫇡7 U8EYƹ\ % 1<HR]fkowzslcv[RZI?6(," l;$-iїȢЮޘʌ$$ϤVHU[Ϊ9l$;-h5'=zDXKQW\afi moq)stdt*tasr6pmjgc_ZUPJD>8j1*#^/+=˵y4T8biBSְ +.ں~.*me ";'+/L369h<>@kBCDTEEE*EvDrCB~@>l<9P7l4S1.*&+#GM> ql}Qy\PюЕ{Y΅ηϻ Ҥӂզڶܘ߸ ^ ]H Q R?rrC]|%=8 4 p 0a!uT~7 -wv(dh$;]@@ap  cwW{L(Xp? T XN4\0 -n:xG7Mjsޡyz}#Ak:%&;d :(!&$M&0(),+F,--- .-h-,+*S)' &$"\$^zz b >eH=>V8k;6Y׫-$ТXDfϿPQӼ`4?z~F9S- 9!e$&N)f+:-.$091 22232v210/.+-+)'p%# e iL0!6cz߶?y^uս:7Ըp]^"m[TsJmkC |"uj k N{<mC# > P ^m~O^t"yM.5_!v[bBWGWk\ f3-y| T s } { i F]p 9eJ?BV}en{> XK3{ .nh|$ JhkQdW > s ,Fd0}Kb'kuau(AW8q` Y[PMkTn3 "  f$D -I;}H{=2i1rB,8^}ojOW-o `  ;&AF5 x  j  = g zrnmtZ y,uw^VoQHVwbdz" c d/ DVS qF[SzU6&3Rxysju- s>'"5cnBt ) GT+%~>atz u g Q 1 ~HU2 -]D3g+x\\4!+Fz |G]aO%*  r   X  3 0hUQ7t=9{l**r8AV+ /\BChx i H  Q 64 h _  h /Ods /^&}Q\]$Re{ {O"o  a   v =YgbN, i  4 , ] MJ,e(qn?2LKc^z7{{6wt69[\Bp(~+->sZ^$C$d uvh*#]e-   m ' F T T G *  >   r36fMG`9-?u!]3@pW=Wn= P+ Wn<{*s3FKG?4*-8U)5eG1()1Ee W.DIEJ  h  ! 1 2 )  S a &3.g<[@/4K}!}9|i][fy?PBhN _m)t/CMMA2]9)c$Ik%P./]$}gXSS^t"it[p ]I^q2~%E[hleR;C` M8Qi|!CoKNS% 8rT!2}4z=@i|^9 f&JO?+ra cz7Q''TZpRRo  qe.K_mssj]K1k6G|5[}7d a)Z2 rha`eoz :k fZkG8YqtaH-h>pDtJ#rS5+JmHy%] +F`vweVB/hP:# q`QE7,"  (2?LWfu(6EPWagnpsrvrrpkid_ZVOHE=90,'" overgod-1.0/wavs/beat/space.wav0000644000175000001440000004514010300460712015531 0ustar michiusersRIFFXJWAVEfmt DXdata4J$/:ALSZ`ehikkf^RA0zz{lYK>;D[~ >t-Oi|sU2SY!2MjcD$~{Sv=/du@Cr>E2c.CWjxoX<tD=$PQiB nQv0Dc#=UbkmeZC)JmJNQ0:a;F&r"U  D 4 eh4w@"#I7O9\R=YslQ)g 8Lk8YcZ5| Y U ~ q 3 ; V # Cuqg"1"]BUP/8B,"k8Okiv4Z[ / g Z _6fSFPP<b"`U_C s U ~ S  : ?DQISSK;jJi:VY;V : j  (U*[=_qc7a:qf"F  > 2  ? + ?M+f4H%ZaT GinU#m\Y{RsJJw a  y S [ %<Z5?{5,[2cDFX>b= \T  i n 4 K BeugGc*janBLo,^ f | K Z & 4 @i:Ye8) hc4V=tg~L05  ~ 1 [ Q E > b"^kR} :A8Yld YoEKp1 - + + + Q 7 SFO$fk<h`{%3Q^fp#:rHW h ! P 1 V Zz >,MH`_K}&p<{d#(n;; a r J < X :  z ?` 9&USpBuhw"/4x\:Oq !    e(,HBteT6 `1%<cW /AOzt *  H ; F *j4S9^~pXA*N@Bh<"TCd,B W > a \ M   Q 9(VC|]BK7;e?KGn@[ p N n  K . T >xbOzqCU .+E%h HG v0T+] r C Y g ! &oPBW@f(f+"9\;`C,Yr<m u C G { F @xI.RM 63-KS-,2|eum = : ,  P HjgG-LFtK6O>("^x /optwe) %  + # c Y p3yLR}h\M.m\~Ce)h#'_. DHPF 6].% LrS$|JT=- 4~CHJN( *i5r+f(pN ^}K {Z\tx@#b  8 nRFY5% &u;f n )%  2 )?9 -t_q' ` bpNJ#yAd' u*? u3<*Y^ sN3#E!|F<#rPsB Ma C TDp QDd7_VQP"XdCz0^ 5c qF[> @wZbO5?-z ^f I]Ik 9 ?(!H irgkeoGAwUl$ - (6,9K+ &gKNTa& `y= @#LGwuS| ? / bJ_2Q0oro;pP<^R{VU Vl} n  cZ U 20Kd(a8 VEp_5^j x>ICb A^g|dzV    oN~fTlQ]E,/k??+ -B MI WkkY I m DH0u"V/?i@ mv2h Jc5 4   "hKo wD3?VT$gU  2A. 8GG+` e xS5O??=mN5{qCB+j(6Df7. ^&=r Z7d)cY))^_J/<j:HsVN*dIN.\5 >c %H X -K %1 v87\Ze `/hH VC|w% V@_wFASjzR,"&S:a@Bk Qdcu  Yl[EAb  io+ 2x>@;I'2 ]v#P/   3YkA9kl|W~^C-$x81[ 6&;qzp 9 >ap;1^^%Z FF,*SE~to D>+ !&[q3 u$!5&*%B}~@I-,Z{X 6 0>F5 E 3 I}8MM !g.WPuxOpBRG'J.C ~cq [ U";raSu/n|5fYw,;$eJjuW"N>A \9g1: P ;R Wy4ec/i]|=8mN{U } a,<Z5~ 3XeYpSx<% 6)'#U$,tCHU ^JD, X z k02<IQ8yj"hHaJ!xBXq0 B 2 }?/$5. ^':&27=H :ne[ '8 ga1)  8'bh a( 7l+H.a.SB _FvW Z 6nb+Ovq:d^`MT aq]_0 {  tA_g1vj^|}4&q!T}Sc r p}Wm?V # zSQQp+:8aLSzdIPh{*j(D/ nAv)y : r RQ2}/dmv*.Q&D`5#<M/ |&ELR 2 JXN:[: s_e uuF/hgON/  @m^;I! c 'UDm~nybTRvM $QHan^|a(-&0(| mQP & DhVy8   G5_T<8rLv6|pp9B9 c R1 E w ?v 5 M 8  NR!ozPp1m6eQszm^XgR]$,ex > /_2 : Iy<0}O0b 0h!Z(4.,o *b C O`  i(EIZjoE9>EB-6\M'|L/:k\'$l ^ \  /  J :^4@8I I@Ky[W *  5  % )  }R#^;cR uO+xd$3OI-5fpTc C @ + * v @po2TNUe.]#X${r_! < k_J,}).0_y M4t>X53Jq>L?; s g [ e 9 > g b : |x( H;dGm(7Zjbs c'@,*.j  L F  exS7N47?7PC0|[e9 %IPVTx8K & > n d - E }=W4L*o6]x/9o `^obe-;yZ{EcR G  Oc){s7' z [ e xMAzC}+g* wsw J }d-X@3^ t>BqmZyn_ WJ_ sck o?$P=r'f9 cm=CL0+2N\p g Q 7 -Q:%mEsY V C _ bRq9nR /?<  JvORt 5($[ -  z3 _.RE`eXar ' x 4~Z$ EF\])#*~V,Cysx#M4L v .U9n`^ $ Qef||4)TcG3AAyGX3Bk'    q "WO&c.FLDB /PB kW1)]yFJ|qt IQkj  xWZ# 7SH !kg"1yEiu7 g; Wq= F|\JBn/*2n5HLIJ5 * ](u%6*J ?57~({IXo9dE#0z[i$Sm9N-ZPF  ,) u -nI{GSl8aC-n>5x +w\pf] IEBt c  Q| hik1T0x~ qpO6j|nS n_U  w + B0;{.Jyb1 PEzE 7> =@'_H Y-6E \M,I SZs!c T%ld D M *'nTePW+` @Aez8DO=QAu dl ?0   HdiZ[dO,19I2\d@U > 4(  2 /=/E* 0-o@Bwfn$8M& ui B 0ty>VO7K!,p[HHReV/ "4 T :\-$={Khj6MnavGLd k O j ! qP#@yg)#Xxc/: # Z y# 2h ?} s { " e F  ?vRGU~W`dt}&q\(GV) ' S  v l *  5q'CA_^?%\8*m[bck&N A %  6z I|YdDn;FRAeCGu*C\Lm.L$ =  P = iY,!Dq.H: Ss>y+"_EW0S D j & ,n>c+t3AZq 0 # ; khFaS)(ZD|:7fX ]7jWo aJS e a90Dj'l Bi''\DjOO;Iu-Ca F ; Z~W-.\/>D&@92' {%/BW>jR+* 6jQ0r?1Kp w*N] =VR\1A$ow,@BVz((DZ<;T(}D5^Q3Xr>L,O'(_Cw5|^t> CznMmG#W%KC *Yl7ML0aFTH2Z23Z3tN|im Tlfa_nem85IfQy&.w]S]}5jn4GR\BI':W}_;dJ6X\L%?{; FQAk^R-]i7,VN";KB(_(\5 >huzXw8j{g6 <h:oRL_o6>JC'f3sR;20=TuF '{k8YC+v$:B8F>+Q"ycYYcw]u'_j=H$>Rn23pQ&!f?z|Jrn[Mqyh=K|c ZvA1^$m094!b9+T'GL?Y |/D~R6-2Ir(p8JK=&]1JvHD;Wd_L(G g/|?.g/52%kC&N|D5| %d'|S+`?:_x`J9," (8Ja['`g7e>eH5&%5Hbxpgdceir{>q#?U\[O:bD!hTG@AGWk  <^|waN8#xuy 0DXiz|m]PB5' %,289<9840*%  overgod-1.0/wavs/beat/sparkle.wav0000644000175000001440000010164610300461022016076 0ustar michiusersRIFFWAVEfmt DXdataz  7l1rtWE;2,+(+1A^4_&|sRi r>n 1FoM# p."AAtZp{w o F r,w}2#?/ ! g b_0K|nB{i w R *ih'_-#MabX,e  $ CJS~(q-;N" < 5 84\f@ Y|^e n3 l * w 4-;cI>Z5y 1 @ %AD#yE  ~ " z8_@jxaKqy83  H Sf PJA6B0|5[c # v  Cgh@_].*67<`   z(Y w EC hW(; 3 @u{&kcG1x[ a<`nD*$wur<V   ,A> f9VIL3B @ | L Zgu=K|a  M v lz0nVBW+m J  {\\!u5 V A :*Z!N[32d8P%'Bh:v\C3og@hGu"PP_^|tr !QXXY7\Hx}Z!!>!@w?wgz2B]dq$%iW+Z\& S YTfbY3@gQ IhT,BHORaycPL=[oo\Z*q/dqPv4 <@+R~ gt [\MV J Q6rp oA% o?)%x(!l 9v_ <(t4lkrBR,oit Q p/CiLjrJn9J=-   ^6Xk\A$z( ,nm ";}d2 r1eAP. C05f@ GN(5/3jV` G "7Bs x6#x6[k+5 4 B{RIsV7ke &JuyW:1UVI,`FzN&KccM3(?3O.3:h7p'":RS@)OO3`Xl7W>P!xCBFB-#slY@"sVV>*LdCah .p6; ~^f y X"{`F &nn69Ae  . R ht3dU"[PS k 2 A!`0\'%{GK ]+4q|j1{ob o @P@!C?`)~d cA  + t ]c! #W@jjg'0 B - b(!f l[}wLr  OOn14;J N INAs_{7$]@m  w h]M&D_Ye0X5^ 4 h I'|D=IJF Bs9u>`/.{f h ; IF%tOQ7sb + S /S2 X8st 9-(*x*o}R$8u. j |aRv 'nS](NHxJs yh L&S!$5}IBs0@ \ F2{AGpv! A N=sLyDBFy;)Orp~ V ~Am7qs"2by  tHdS wnjP;[qdsT 5 ZG=Pah< u@B=t^~|[h} Yg$h\q"2[CKJ GB!<=^7)7q( ^H_.>>J(>xpN%E"G%1j!+pC8Y*jA @^O/T&K,-T<)Gk{QT\a>*X#-U M/h;;d` 2T&gVwc\!B1s#{X;]Y$B;K5pH*3[11.j+ *SJ#''[EtrHP^?%_;dOLX`~E~/wc a QIM ue I~E|US\/Uej^"gb7PnL9=^iB?h,Mhz+n)fQ&!4tZK^J'VZcy(D N 1h=?l<t|V9{HUtsh*yn&F#e (XSH1}UO ,dH$8^4\s8m,pi*(+ @S)|.7=n (=j.4Qr>:],o9~*4Y|D c0qwp;;Srn7G|b}0uV^t/~Z&E}mpym||lOdVD===HbOC oi&aD2,+3Ck544*"P5)%(7V@9:S\0iHe%HmC,#!.Gp #Xc oKka<($,?bF~duW}Q3')=X*k?SIEk;'&2JoDbBc[DGRM = P+#)=\ oI4 ZsHISef0/Gk+:/<!)q=0KtJz<avrU-MwnKt^- x#)N}R>sl bK@ y> -WH pZ5\b. iz(?o . 0D%^;V8B\ (TAPt;3c~^,:k~ rUP{2Q] L5xk%zDBq!'[fA@U;TvJ2jUBsjF.ik8xCxvgLpCo+' Fz(;gWY;$eruy d/tIHG Wpj|@s &K9>1mtpdo%k6c79>u(@y /jg{ Q- *C/<5TfZ_otZf/yAX()7ZJ[TE < XYsX 3 #1,14.gaJZ7II(zh:r=>_V *n&<a6kI=*>m+x?w, ~o"KByFwRGo-N#n!Rk3we|q 9 ;wJUQ = U)u*`.I{#y(5$0L&Rh"?o Qa1}L>-J}RpDk_)URZj9>j5Bd5@!q."csXD]i!Z."N%{NR{LcV]%M&"BfMc(v2AO=VTx\ gSu[ hr|/3(`q@_b upz,K 8)r|t+A,xWg%xg<aZ[Tz2o''Qz#X-8b Y mOXV~$KWan>I3*S.!OS/<)v'aL>_5i-O X\'.Cl4ZL/t/b62_v0#gnqUb.ZYqiQ$oZ 5~(JRt)<.L _Y[@T)pV/f84 K8SN0A{Gg?/?{o(N'.hXEFng^6^q=ApVfWs~zrgJf39C 3{HAhdinSy(1|_,8" tGA2GI{HW*"llE{KEvR/#1#xk<-n:G8{^ZKbpuQddV'MrmS 3sN^6"|Zaa~;F(aP+~1T D+Wy=1W1<&" w=o6v b&%TDo!*,]MBtR(bBbn% 'vp4tu<L q,zs :(d\G4=vTfZ4*%<u03_1/M=gA0\+*K} ZV4X=T1'<3:G09g2 vcm\<Jxr71K}T:ZYr%D`zfaY8@h1y Z5TJ?|1UF`_/v.&R&2\dIW#L~F`v<=i&|XdKQ1y/-l _vxBt[BVCZ=WtTN.fP*dWL}FpR6=|C~>j ~T5\,e*Zv*<[>nuMVP 3gw~N9D#z) 8l)'[ VR-Z;j+ q2 HPOG)7\.St0,Xhw%~DTLe,Fq)T,':eo(7Vj#<AS tN!H'3Hm.0c"&0K\]PGB +OK9Tz#XP)$?t@Uj/On v% "#*=d N2Bo\y !ca)"(.-2>[V,B nQ9^/IQ'#,236>PzO&(I~;j=, M/.3<>?CSm`WLkjyG5:>ADGPd$I "MrjTQ)]5gD<>AGGLZv]{4;'XA;=BDHPe1/-2T=2NpH958==GTpJxLCW|v? _?779:BLaZRY>lVC;;>@J[xIf-+LaIm-yWKBCDKZqow7rx`UQPU_t[f!,C3L_{iaZ[dp3xf /}pfacok`2|BAynkoFpYa~m <Q{opu!sZHAd^"{tsEU22IZ@\ ]ypveHzLRzk#~wqw/2z+ a}|R0tvPMf63&zr X(2~ N&dbon;]bT-}n ]`,NrVR]X+oH r1w` u%4FN_?;ECr/ &-lFa4N$MA8 F.!UrwDAf==3oRc12| *MO:?VX.fq&9 #/./1Dr4s'0`R'?KMLSky&(w&J)t Kp=}g8 <(QvecG~J\=H6^=|bU=cl D7 YFmgY *oFdm-.XEkH9 RhYW,Eq-v\~ kRS 4[X`8!Ll%x~V-B1 Gp=bch^n7^!g([(<n7XD^B)JmAkjCT]6, z<]a'V[4}exH+Jk2`uN 8I@C 7V| QDpE+S%Fh,{Yc7 )CR\@7+4U{ O:\<.b"Ej-zUY,!DjeB5V<6\U>TA7  x'In4YY( Mk[vM :]]?RHH/3$,(Io:\U$%W,{\3V~Y:NKSLS570=b-{QL$_=] BiF +|DN]fsU0$C-'Jue?|?+nU b /U0z{Ic}8XBY08_L'j1 @~ >2n Djm_zS rq|? +Qx0NbWO(8[H3tcN/@V$GjfdpsN\.1Sx#Q+" Ku>^< tlgB [b1Q )IlXNm do94Sxv9xb2 D3!Ad>_M<7"; 5QtaZz-Z}H##6Mh/M!Lx00 %hU;7;>]$ ={Aw?= j+^|k.!#$EEMo5C8b"p"~z 2ctzF !HQ[}E&N3P Q z&>ll`+'Q]iW3[1B6{6/+NxjKv0ap|i"Bi58kHA8Y r;`?ww$+Iq?6T 'XK  %;Zq.GI& (6Jl6.?})8hN ".5F\`p4H*%5NWahzyOb@OYR ;Sdov<6\o)& 0Ri|it'J4l}X>a<n0y'P2#Ms*p^sNy+W|$ZLJ8ObW 2\M`JhAA@>c:u'C j3Yv, ,Mp$Vg<Q0RX #Da;u(=xi<`; 9Wv%[^(@9ab& .IgD}&*iahMxE '?[w-bbt)s:9vq0$:UpF0+YM{b]/Q"2Ki+biu hv;1X<&?]|G1+TCv`kKe2!3Ml 1hiqbs?@l L)+B\zJ0&L;nbxZn8!#5Ni1geiZoB%WR+ )@ZxF,E5oe%oy?Kh-caeZxM:n)\0"*>WtC|'B7vq'@E'$0Ha YV\ abU=e6$(;Qo5n;>H 6_P-&/E_yHAL p$_tA),9Qk%]p.GuAm$^6+3F]v5p$,nuZGN10;QjDF_64TwC24F\s Vk6WIr*fA5Z~B s;^ %6MmlSIV+G0Ea=rPr3 )1[:V%  '7Le5rZ]}>   )6C\w`.|]F ^+(-4BPi7eE%mD %-4;EM`y[& l`Y4l4&2;ELR^o-Z9,R*"1@KSYcnN`hfEw@#".>MYair~ p?$:% X-*8KZepw>kGu}U~@!1BYgw`$eKC&c2$5Mdv5O)~| yP'&=TjYvDUbH|A"+C[sA6Ys!%lq~b,6\A65@K^q>tcXyq<lp{WDBFQ\m&W06jz]1;iPHJT`o~[M e!wgdku?nB&Q[?5Wtihr~(Sh=]X+x1rlqx8i8"R`KJj}rpy!I [=aa9D}sv .\'|PfZ&e&zy}>nD2`jM >c #MbGge:H2\({OeY#i2?q@'PZCFx$'NU*JG%"e5bk(:,_X#Hu8#( 4J3Z NYt> "Cn!gy,Z13U:~MvF!  -HjRn$]5 0C_,lGyH) (3D\| Hea9 %3@Uq,fA{N,  $,BGMW^ioxAgzX)x_RGGHMR\cmv}*Pqg>s_TONOTYbhpz<]xpQ%ncZVWX\bgov *Lk}ya9zmb]``agjpt};Zp~mO%vieaegloux}(Hdw~v`=sjegjorw|6RjyzlO-}rkgkpsz~$@]mtq\>|soloty}1KbpodJ)|urswx}"=WgnkV:~xxx|,H]klaI*~||~9PbjgW;)AWef^K. 5LZfbT> $=Qad\L0/CX`aUB$6I[^]L6 &<M[\UD* +@OZWL:/BNSOD. 2AIMF9$ "3>FD<-#3<>;1! &1682&&.0/( %,+%$%$   "!         overgod-1.0/wavs/beat/stick.wav0000644000175000001440000005122010276441020015552 0ustar michiusersRIFFRWAVEfmt DXdatadR 2gt #-lno}5 d n]1 1  5o}0 p  m%j_I o _ k j 1  9 wWY=%; E  fOR V  u[/3  x B&K6 ] w[ttr | n yb>nm 0 M B$"2{ d yD&MlP]  K S"6;>Y H [piQnY  ~ -v2PxQ C 1'h;n 6 }- e,;*P{f65Ld4rsW[lH]Fv!k2 `?9vwO]&nbu Q!olY?/Xc2OxIy3LP8Yn&x(+s&pm'O!i5xG_t\me0ym?%T<()&L fgK {H#XM>D'W=?G8}p>-<HezHP3S-RLi^.zeb.QGr^#siIk ZvQMr (G|dD!-DhtrK8 : _AotAQzal#l"4sfg(3ukEc/xXGmf)$e9DXsp_[X.c+OgupATX"\|A#&mT E"eyWO!r("KnykEK9=VOrdKzO5JS^|W"gnV4'InIl<F3K:kI LC*Q%Pj+7UP:4- ]^2t[P; 8ycR{fK Vvj%(t~V|5Xxt:B!d\=dK_Bl ~?%Rax_uq}$ >i;m`j+}S YoDQ!y,n+JU(5xK>7= o~`I04Zl }f "u>n.(sX+r G?}Du$QL0ms,'na!eo-4}w,wwMj0(K3<MT?tEAi.?47E>ZW9<-0;2}Vb]_7vL< fABefGA^O9W}|V 3CjY^ynD;o^,m{G q"UgEZ`90OL*@{) Tv@N9[#L(;`c<,R.Q,?1k X FJ%if'M? z&~8:-#& +j9X)9(MC 8|cCvC!:j<aj**md=Z#8vh /}3 HL@]29bKyd>kbdw Um)QRM ;4DS'0x-_ \arYT_{AXcf]TF8+}7lr,J!_ gv`g& (VG NOY T?B\&Mjro\A'=a}|W%tI4:V[O|J)&6_]SbE(/, BbsvgGzWJYR.<CBb k06j={Lnft3P_c]P<# 8KW]Q@#|w0]zQ"dRN_)dt,R'#K0_ m<'0TY\/ 3EMJA)<kd0cRXsHyZ#xpw 2Sfol[E)"/560(   !1<B<5%)>KOK=( #'$"  /8?>:,'Zs?zJ1/O!pc l8$D|Wj+vXPa3ed<1?G>- -Qcl`HumMxg:%I`kjZB##+//-'"  !! >XilbH( ;csM!'C[gi_M1 *@PTMD/$/13+# !*,-*"<OXWJ/>T][I- &:FD<**5:4' !3AE@35Qbd[A#"?S\ZP: ,>JMF6  7JQQA+3GQTL9!$+*(% 3KYaYC Bc|{c?xu0^}~Y'qgr1fxJ r^h*d_!waayLvc2zAbtreN- GcqrcG"<ZimaJ* *I\aZ?"#;NSM: 7Wjm^<Diz]4.OgsqfM*A_rzvcD|;ay~gH""=VcbU@#":KLH3#/?GE8!<_ux`< qo~:j]+l^dQ}xGpn0Zt~u^7%@RYTA'5P\^O5*TvtQ}aWg;rj0vPCPq0ss2xVP]1hvH/Rio`A2YsvjGwy%ZtH*M`h_J- '+(#   " 3BDA1.JZ`^L0 %@UacZF) !?R_b[I2 ,FTYSB("!  4FPSO?&->MQPF6! 3RgtugL)}9\v{iH!(>IPQJ?)+:FMNH;,%Hh}|fCpo|Q|k:^F?Ps)jx8mA(+DwL}Ix`Yg/[zf@}2JZ`ZN;% &,2/.'!(./.) 2JX^VB((:ELMF:*?[luq]Atx?jxS'w|%I`prgR51DV]]S>#7Uktn^C"(Mj{{kO(!D\e_K/ )>EE:'6GQMB+9VgkdL.!MnuZ/z}?ew]3!FZaV@ )CRTH1 (@RTK8*>GID5! #(--'"'6BEB3" ,>IONG:%3OgrxnX8vlq<jk<ub^s Kk~jO+5Uk{~s]9}qt6df;pm~-Vs~uaB.EPMA(so~Cyu2X-(P*vp&]=0@` CtyU$tr{-Mhz~q[=op~ Oxe4oYRa~NrB w\R\x >mtC ldq :`}x[5 *EU__TE0,9@@:/ *4;:.,HXc`VB+ +NqkFndlNwtJ}y2J[_XN7! 5HSYQA) 6FPRK;% '1753)#4=@9,   %+.& /596. &/3.-! &%# !,594)(9DGA7#!/:;61%+DV[T@'(BWZQ>#(491$ +:A<,9GPNC-3HUXPC*1ET[WL6)EU\XK3/@B@4%$3=?;-<Xlvp^@vlsNuxQ vju 8[t{wfG"#,3/& 'KduzkQ'ygi~Fs],wddt-]nDy"GbrxnZ?/IY^YK6!#% 5KZaYH, A^rxoX92ESXVI:" !1?HIF:,:Sae^O51GX`]SB+ 'D\ghbN5)KdqqeP0,ALSRJ;+5HW\VL9!<TcldT6$8HLK@1 .BPYWH0#CV_d_O4>UbcYF+#,234.( "6IQSM=) ?XjohV:)J\kj\F+ 1=C?:, !')(! &/76/$ %<PXVN9 .OesujQ/zt*Wx}c<~w 8\tyeG!#=MQLA-  &9AC</ .:><4% "%$#,BSYVH1=\kqfS0 2GRWO?*  &'&$  )00*#"    &..+#%-261).GVXQ< /LV[N9"8FG@+!2;>6' &<KNF00@IH9&/77-  &! )7?<3 A\gdU8>TbcYC( )ARTO@& $,143* '13/& "%"   %'$ #2;=5&+=IJ>*'.-% "'/42#3@A;+$5<<2$*:=:/0AHH;% *EZc]N2.QhqmY7 1PejbJ,7O[ZK/ <QZXD)#JivwdC}-WulJ6RaaVB* /7<7,  $# +I]ggW@<awygH#B_svoZ:;P]_XG. )./.*& 5GSWSB, 5ZsqR-zwGkoK*H^hfX@)  +6<@<5'0Lalg[B# 'BTce_R;! 5Vsu\6 x~ 8]woP*":KVWPD/.ALJD6# '+,,)$'9FMF:& %/553+ *=INNC1 4XspO&uxBgjD3GUTN;# ##! '&" #2<</2CHD9  3@A=0',.)   #2::2$ %:IOJ9,<?:, "$     # (397.".<CB8&*6;=7, #4CIF<'3@HF:&%*'   +7A<4" '041+" (366, +350) */2*!(9BC<) 06:2( 0>C@7# &>KSOD/(9GKG?,'8DJD;*$.573+(1450%%1=@>4' #7GIF;)%.30.# (050($-42+!  "$ #/11*!'+-*%1FSWPB(?ax{gEu~Cg{d>5MTQD/ $,.* :XnrkR.(OdpmZ> "5<>5,   #*)" .AJNE4 &4@DD:*"6>CA6($,555/#0@MQLB*+F^hf]D&9UirjW9(?PWSH2#$#  ".564(2M_e`O8 *Jbkn_H)8Rbc]L4 $7CID;*  "(*)% #5CJJ>01JX_ZN6.Rn{{kN(!?T_^UB+ *:>?<2!#1>C@;,4DNNE6!2?EC8'!   '&" !# !.460')>KOH9! ,ANOG;#  +131)!.685, $5AA=.*41-$       ',*#.24+ !" )/0* %39:2&!023*       #$  ,31, (254+      #&( (,+!  !! !+0.( "%'#       $#  (+''+*$ #(&  !!            overgod-1.0/wavs/beat/string.wav0000644000175000001440000003265010303415516015753 0ustar michiusersRIFF5WAVEfmt DXdata|5e& 28vk?????????s?h?`?Z?U?R?O?N?L?K?K?L?J?L?J?J?H?J?< t~Ln2 0Ll1|.(!w`G9' $.Q59Q<=>>>>>j>C>#>>================'73ddڐɮ7O#0Z2H[iqzƒ†$iQ:+ p h$,E37~:5< ====Y=%=<<<9:979592939294^-$` ҧTĝğp Hyơƿƨ0۽>K,f$cD0 .$*/}3*6799999U9988_87887777777774/-)! >z |Fp{%UƭUǘ#;Q"6։ 'm1GKpO7$0Z $c*.f2467T888T8877C7 76666x6p6g6c6a6^64;1 ,%zX W%4Oٛ$ːT:njHț$U~əUtbB Qb)g |X<#nAd f$)!.d13v567F7@7766<6555e5I51555 555 41-("7"O0̚?}18o$ɇ,rʨ[Es.*iu| @9 6_P $)c-o02H4G556655D544v4D4433333331.*% 5R?I#IuО͝Xʣ`hɣ_q˷˯dIbz1&C !WO H x$),/1#344444V4 43u35332222x2l221/+'"v*: *l"٦uΚlʋʖ0˔Y̰̋@3ݡ2{[*H6g`0S J  $(+.022k333b3 322<2111r1W1A1510C0.,@)$%_ +3>2սIϒ}˱^/͑hL\ӵڴ Jvl=`+? E : |$2(N+-/01?2j2_21211Q1100_0:00 0/`/c.,*&"n m`|Jo`І·0͎_9*ӻ6YpbzWuGg.2|g ]\O F$'*,./01A12110q0$0//^/.//..l.-u,*'d$O P{1 rxϏXη!ϋУЗ2 ؎ۣ^"G3cyMuW0wmu U?U $B'),-.//0 0//I/..n.6..--q-,,*g(%"M @WݢK֮gЕ*5{HоMLM>8V pM <V j /?fxN #&G)G+,-.....s.(.--M--,,{,,d+I*(Y&v# TI(VԏUі9)QМpѨҢVY5 ~|lyy~O bf5 H 9 x#G&(v*+,u-----U- -,q,-,+++6+*)(&[$_! $ ">^AҔE?jѺҞ:1վO]}QjA2O0 V "#%')*+n,,,,,<,++[++**V*)D)D(&$f"Y %Zk~@3mװ-*ӐLOҀBӆ|uؙ:Ii8 >O# &_y 6W"=%B'(**l++++m+++**I**))$)('& %# _ Q>F]ԇS\ӑhX&e|U:8MX75kI* K e$k"$&(3))o****a**))>)((\('M'b&#%s#L!s opSdԡՐD0a#)v "WbSf\g3 ,q",$%N'V( )x))))V))((6(''8'&%$#! "Mf'g+ހ^ٿטqPlղ#ֻօ׉xv߅m0GI`rszu wH!#@%&|'(((((S(('{'1'&&&w%$# "+ O xkD# ^heqd׹bMp?Ht&=tR=~i g_7n  g 1!#$%&<'''''X''&}&.&%o%$;$Q#" )MB GvV܂$1ؘNGu_ >۹܂ޝ1p P+] "#%%Y&&&&&_&&%%/%$X$#"! Ip e1<u:>x~IPۖ#4 Mg(vbh n f .bO !@#D$%|%%%%%k%'%$$.$#A#"! Hl ]->?ݱۍS$5{ٞzۓ݉lfC! >&5|,k{ \0 ]!"#1$$$$$$}$7$##/#"-"s! ^W]R Q .Z0N߼J@ێ- *~ۻ۫<hu6gC+A cQ  K 55c !"g##$ $###I#""4"!!N Tl{ m8X!ۀߊ>2_I;+]L\vNN3=Hz y l5p}Q8 E!"""&#*##""a" "!:!  ,1@RR \ {lB%|LPކݩ!܂# N 2WlYbu& E)H7i Y!!*"O"P"9""!}!#! @   )6)$Qgh=%^ܷ ݄32I2j8f7 B 4 K !_!|!z!^!*! ; HJ)xy. %&/t\T"e $m~Q[ R UQJ4 b/oI f$PfveޏބMI}}GAa=EP ./fq< N?|4p[f 0P.rHv ?;r߁V`ui/b}PYB@ M&  :  rOnW  _ iC: e {ysg7T~^q)/6PiV Q r 9 pt0@e+_f==Z4$ A '2^g2*hzy[wON]! (%bxS$wo% !g m  r$:WQ`dVBM |P9E)TVsZK@- i,J3W+?&5u \ Sh~-<RM,`x*TQ! H3 f >T4 QC[W?)+M  1 )^1XQUV\4l^2M]\D+~WHSw  Lvl/U(:2\Ot "/n,#=*syF$^g-#$ oj[D2O;<O o Wa!5Y$^|wL &EI9`NI/1IyO/buD sZG3}G(" 3 G Z g bP& ro:?][ 4 ~ =ndKxrUO_)g{{YG1s8 x"-^ '*M L * f8[1]/+W1,$l_e}AYaX4@)VC,j& x M fUY $ F L 1 *?}1h}<7va_i{8_3S?(Zh J ) | $) ^  * O X G aT ]dDKyKEAsVGFKV]dbV4ix=N:FzL ; w c!<?5k , 9 c r h@>5-A>b=$ QC L20H  T  I E (M_bP3 ( D  W yF:Kb^3&:m>53EyV%28HD*`9 * - . a } w V ( J c 6 `dHgkW^!`kG!0cQK<} p32|  : t S  q   f V z84 ]4&9bq2j9f s g K4tsWk?|  H F < < 0\svkO(]3+b Q7|GXXYy9yM)j`<Ac$  [ , 8 ; .  6 y  }<eI7/7S3IKWj-_c1K!]K %77 v  = b z s Y 4  y " K5B\mnh^PE>@Ol>=|lv iLdKDEIzQ9rddZ74 n ~ L n C &-;QtA1|F' -N# 8t@UCVDsB |J,dd  + 0 %  ^byZ>p>i:S7:$5Uy jd>k2r\`5SIjnQ(u!X]. AnJ$+oq*~J<8%V9w0WIp~4-r3M[_ZO8A9RBZ<q91i&gqF.d"y G|)Ms2qF@6@k^.jN^Glp'r'dE31@\EW'm;HPAfVgP'e1BHHA1n.;kvc9e:(?A Is.Yuj%W4X}9t8} N5`sO"ji}aNY3{ZG>DWv N@LZD/] (GkRE>s.>HLG>*s7\<[bb]j,HPYKD%d 8`7Y}0dHHn|Z/EK9Nd#nyXC69AVs:yS2H?a 'Eh :p >m+@R]b`\O>& ^"NG|@l Nl4:m`/q.h@c~2Pq@q'Nr{V,E` U6z#}6^?**=[|?w-mP%Cay;Xy=f"?VjzueO5k2n%44>n5 7d9oBn *D\t!>[| /Rv%*('pFs3b4]zO,*FkHw 6b-CYn"<Zx6Rlx\=l7C}:~H{eSIFHO^o5] 2Y.@Uet6Sl $8HWbiopokaVG7 \/b+}D tI"6Wz2Ww-=N]kw*BZs eC!vHQ"~]@) #4Kd9Yw *8GS_jx-AUhynY@&V0b;obUNKLQZcs-Fb{ (2?HR]gq|!.>IXaiqtyyywqhaWH;(_>uT5.CWp #,6>GMV^iq{ #).//,,' w\D+qZD0!-?M^p%+39?ELSZblu|ufSA.n`TH>:1//-13:?JR\fs "%,/3;=DIOW[eirwxmeYOC7) |xsrqstx|  #$++057<?DILQTYZ]`bdcdfcb_^\XSPKF?;2-% ! #%$&)'('('('%%!!  overgod-1.0/wavs/beat/sweep.wav0000644000175000001440000010772610300461066015575 0ustar michiusersRIFFΏWAVEfmt DXdata !),) "+11~|wq{l=1}0o3,L27( -5)>mjQBETifh.  MYZ/ +%DbZBdlM6RXEvnlp]sv?4qS:.' dEI,3U0sn'OpxYr<(IpSy^PsZj"{wqfWH3}lYUB<5G^ 6OYO9cpo9me. X~($jD/zlW=!j5 ~Er*o/NQUfir;3N%~UdZ}+X D {\yO gpR;.OHTX.[CIC*7GP(eIHD "a^:hm>'Z6e `I:c {)qQ:-97gq%elX& </PR6e=^mh9>.zo:i{,Q,NADK3nO4+)wt7|FfkA&$@ y)8+028G9\t2c9N6#]/-]Z>$ 7BXY8A5W>k.4d:U-|gTnJm1qIWUr2*jo oF+>h&b1.-VI] <'e#pt:G:<l3}X`W&XLSJd2E|b3KUpx _G'?d6xvlOf dFUh*j8bpJ5 /e1dkMVd98 K:\[B-N(U1\=o|>ri]wNhnyx8@s(6*$? &#X1J=y7<Q$,VL[QO##q x?Tyy!*5s|0 \A #B0HP='+*eG s#Zjchqi+rt*g~"K3Am~dY#fpwCD/2\MD9P3i}4\980sh"~_[@? Y)d#$D=3BpTp[^]0l kr 3 rXukH&+Q<nVKK=(cz:{:WorP D-%Msgl^xM\Z+QyhnH]2M9 Qm9Sn,uWd}+P< ?B,zWXg5^|EKAy-g] =Q(+i8MhJJ|'~'"#UX^ ^=AZhc`.{F@l%]0VKbVv<(y-([^|,rh|gqapZUxVM'%Dy 2%&wC9^uD^3ucfcc<lKAoOM1F#wB)elsj;3TR)wv/@iYr/DE851{,klY;}>`$t!+[D+ n $RW@&9q7U~,RnG^JI[$ M$YT#MCSf H$Z>%DC#|E>4R)>0(wVAoBh8=)8pKGxb-<w55Qo. \R}YZ3['ur75j E3`[2#:Ci(z[WFdAz!h/]jfg,`tL`xM HzF Y*F)LQgtr]j0E'dA3J`)g^LC?x{Y)Ra=!|1kHA&YeqjdrV*[u=Ogo!A<N!>yar`< +Rj9"7 H*4 n#b|`Q };D~(cc/ju4 o3qEg`H(hv9 2m G gUC l.fw FqUO|@L&h&PZJ9 '<06}#=fO9R|)#4=`l<*RR, ] 9IG@2pX/\N hgN1p?g:|; }x;[wA%yH 5;>?)*2|)hn&0%h R(_vIJ=nv_atfH&?E4%8~2H 5P_V+dx):/m`f^49!=\9YqqKO#Vi *!07 C!C--_ 5sdu2M(6)Iw"Ln\SwH&/jM^&7/,4& Wc)W Fp9M3axgu=w 3\2_yt@@~t]fO^y/Z3 #?7#6)w [= IS}/5mmEh@U PzDmJhd%%dOM5um(5 %JF(97m ` `>"L">b]79'e:Z&Qw(TUv*7%/KgG?$B"/X]?";G2'hh?!26A.!nWY2^8B\QTVv? Pk?8%8ev[2&:PD/5d vq$]@.J Bi'tA\rNzb2.y+J6BnzM/8PTDCg # oc>#wd6sk#R|j)U:MZVgL!{KOHKun@6L\UQl3Ft v[ )'gtO_=h[=xt\x7 d*IUUyW:E\ccqHN-D@M9LtA6jVvD } %Farq#,Xn8][vtC>Vlt}eXzFHw&*zz$#5bk928^u}jj2~gm g!betS;Pmcd@|?,.20D^X0 GFYY7c}B Iryf&gYmvo>Ej>sNc$wi)E84;:u#A:_Yb9apxZ S @kvJ@cb,tJ<0Ots KH/ A% 5NJ)Y{ecE#-`;"p{hHaEJ.ItA\OHS=! * !GI$\"mP4&/coKh4;+YlV! ;W(0=[+4DSQ#=#6IYK7ig=S/U^B' ~NP}]"Q+6j=+18wq 2KWO?&_Y;[;;R<#jL"a6"bTmFR&$h-RXKB.SH  m~P.Y\w KDg"@jP ~hV.|VrT8m+a"Gg?5yzF D,@pRj/N73AWs!;K"Qy0^"4TY,y i 9xq *8G#HnS mAs#~Rnz;iS^j/#G:c/2IKRF"n0xwhkB\i$VOI!MS o!=0)=*UVljdF; (4V7cY_WLp3dFY>SU#]xNCC STxXfP;}F`#?[E7 qiP95F;-U'O4I~-#K>0 'hw k,MlNyh'+F{E7Nws1k7 YP3*@&@%=n^j;8(f=CEjrM>Nh`:7frlE!S^#2,x7!5dy<;P,,_MQ&2{Y'vXY zeA^]r;VB)8o/2X~xsxA1hL<`[^,[8- kc w&vF\`3d"Ig./UuxW=k}oUfg k4  ?mx/<+7.5ijL5 p-E^,b.1NizFxPxwn{> '~Oh'^IME:Pn[na vJ!sf`9i=4CPb r/!p&? \,O|bd\SlwOPlb8;#  Sn.hX@ uROZ\]sjy_vj)D;2|.~2)<G kz]5 $\lWeOT8E> v^epf[i_ kB]Td&Ex |\. M vm=(X8N=C p )3yhvt_cWSr8|- b&BNZ7H Cs m jB3t#+ /3zmgdLC W=f#=%wx8} X.AOPTcj&iI0Fis-fxrmm@"k#6_0gLTgmOKdymz#k'Gn-9]a7Rma)3}|!iToT0_WCWuoD#)Pw~pcw`B:E\JX{oa[hVOw u=iyn\..b8FQh[(7gwg]rX bZrjfuGBX97Z;q }en+dw|}_!g~dWcKIe`\q[jgG2 ,_WCDN{S\OC, R_ZsY j%reA'KZ]r\V*<L  igu7 Fvad;t8=P Tn~<}s?+I[t_IF2V J smAkuiD$GStsl(|BHhzjQG-Rt]C .H v Cf tnv\kBAo lg]rn6=eq3<34aB] AnZ(DY{% 6 `sacdt6TG12JriaQ b`)/al KR^9 o}&dS.F\&; o \j*'_2Gdf_MWSz!}_g3_i4!z-zY\zPM0K4r `A"Qx]9 U)f`JKHmyVa6hv(r\QjEI+J ^$k + 2%4h_c#n-bD7 3g`LC?bmOW}#a} } i4ybrHM'FB>+ c |ie VQM71S`O+]vcXyW\[A,N p>SNZDMW?sc|gcmG7VG|J&h 4qj)^5XWT,1i[ U bmks9d 2q|efn=+TJ n@ aC:x!"[~% -_TN , { dbrJQ .E|}aev@"JF~`6&$Dqy;> /GnPMwW_D LR~3DJZ x`fCAD|T+\kIL$ncDERgHKb vZ <MGEnmr[aH;DzM#"6O?;q2!y|AL U?|d F ZPJX{M~fQ]I.8sCYiPS_1A $3=y>X% r=Q;GQeHriU}VUwK.tI$~QZtXtTf $}(c%snwmme&eH am|BgVe`fO[p{EM,-UrjT I[_96WIr<rfac\. TU@8u@ +'|wC\ZF)yP M#2tte.``mWLx;vn}dDU vmYDV,AR/tG=>|nEtINN^S~.wN(\Gr _>%Lb!wo0bHw(W7j4 K3Te@)-v)UXz+mp GN@z@H"<cjpUGQy/T!XV/ aI|%N2l$UT J}6IkniGSlId[-tD t t)]x_:J(P!r1S$/3h}] QnAEaG1; x}{GDyy</|L SFcaMJ-LlzXp[av "{P,{Bsg2nglX n b\rKwU-dP/AWVu &#tyA L;L&}aNOR-JwjJxIiMlo(V$d\Df?9,uk3#f+zxlP9/<9 fm4CC]J}N_'`r<h4ANL<{[(5fUUR?#. \~b ng :_+Pxv8()]Py+ YCm {`fJ{wMPzG303(&#pz\23g0$>]we%zGAX'1/0SH|X}k. ye.pvHP.tFARlzWr5Z;/ h>Qj!f|ETN =4}d8'cf|pIv*_W<C`_J=1'gMr'>#i}eL6% l@GzCN XjwV$_C$pFtM<6>t@xw9.dO~h[VOB2)%o j8('t t / `;cQXSX]8T;r_l08F5j{iRJSa^N?6)4l1~v".lQ~\SYzE-KfFT.NA1QhZ;5JhxnZH68r-u#_CZ"94R<\O&{1jIqa ThgP=%V,WkjxUagK+*X&Trp?y* 7;%#VWA7cu cX)Pn;.$gT("Z,v~?rn23?9#F!Rxz4k&& EpC@^{..e "H&UWRSW^ pD<.N_yot<Py}%S 1w,CF\d nl<j>_GRB 3 2Z`}5u Fws /"fAFN`UVT5Lg*O\p;nE*cq?hj\dD4L2q9mXXTYINfSwJ4[0b~8q9,. G /(m#^ GrUKpYa_4 B1r=N + wX{ zujHdA:cG| gYM*,G4E&TbM-gmaPle/p2t+m q:yY('>XOg(IR>0{|GEfR]J L>5Q%] r+{&eBs=O+n~X0Khg'2I8Jh[]|,$>N XH!}?Bbg,BW\+$E~[ua=a&l%pZZb{ hZ1Z+$.#$UfdQIc=4@`G6L2zC37$V~QBQhF1XDW=l0e0$lFyKw5omJH^6 ]f+Nyj(x[T2!;b&pEJoP|6nG H{GV.(*sX\z +eF#B>c"K-q\)4MOY&C)05i =rT'qSCDqvdo(J^aUaK)x4b=)[eiR?qa; c@sDht<xm!)5l@`x^ d|X$Gq( .Jf8> vgKDy>H`uv180-IlY#mz,|K}u- !7YlIi3I"|7yjZ,b4yp/cr <V^XLVLU;"<C*yp#)=jPs< /i-xn`:1#i&BfPv}AWfvAu?Zo`YR8 lbmodc`?@/`*H.kU7W}#b+ [6"*FJQx+wgG=|gWKB-&E8u$` %'AtII y>AWK CPOUsLDi3zwqfYL>):aLJFHwT*1)"DC)1V@$Vftv)OL?=Sqo)wd`bd`R@(L~yYMB/3.&B|n2`yXOk8?BN2,WBW!!lNEN[aY@%^$uV&#55/'9u Dr!IFkzWs)F2SlAe=(2L_\D"l><*8:{);7-&4fma & g5u|~E6)gF2pe45ZcL'z&]}R_>OE8,3a,.Hb!c06+XG')(J6o?tB*Uk^6 <U _tdK<:`?Z@h1&K*<{ !}'3p/vF %WuoJQKL[O!gOIcMASw Si',[isto/]pH!Y]/ iq! 2T|C'eXhTVgA}! (SmgO+Bt|jH #WoD&MhFR2}'~hlSo8#d+;3 d\|0"%Q}s`A&W}Y7=sr#|uK#p3NfhZT[Rm ,_jY=+ZlM'T @C]Ak(>#?oJ>_D{E!)}LF`p =xaT84[{a;g"b6c(L(/.hC#i6<%^$8Kju=8WY naU79dhDh)uxY%Y -cP 0v9] B'Mc]M)R2xY_-D[_`[@#6[w~wlW3b'x>eA#mn9 '9,[! J xtN^@bi&}{?ebL_eO0#5QhkcQ<XsKP,+!q[DUpDq q:NxE)prWA#kN0 BR!y+dS}h#.@m lc_ ,}mt CW$,lQ2eL&jA-,e="qm-)\Ra}i,'Yw?(,o#iL|98+$@<b@}fB jWV{)%;8kCM;d>M3c  =o|`!.Fd`;xP'Z+~?eXU#Q nc wz ms8^q  9EN^zR0VY $}7fmO#p8k> |cj> ['Pj&#@X]$Jnn)W%p94h ]qY:OzM&0."px'i$C$G)QVH'HsF} e dkNmeH1n'^;$ 0Q4_mw4pHg^7!&(@~pP ,q::fiUD8ArP?:603ON~UeFwZmI=/j}m+ %-*7lnIOR)\i`UL8_gZY[]`wny'.-jf0mPP| /e;2]+%y)3.3X(qBk_ Nefd\J8ts}`Ipm9AL,7tswF/DD'o,=82K9@C<s7'E\joiV/W!Z ,]l#h. %eCtX.!L' ^2n1HB6A|4V:JV4,.)W@APgtsa9yAg3>bL H]N;SU*}Fv5RP==gXU_~bTPON<kML`v|lDg7 +K}z.$ Sz?-L4\5[\H>XFb;wpfkrungQ&oU[rtMW11VwA:z[mWTuQjXwTv8`jTEQ)M3xmezi3qcr~xZ)|S0(=ZOMS<<R7qF(/XwQR/q9hsaMNw,gkew2}u~{b: wW<27BPfy%AU"+WO>iylVNk Uifv({iH|bUWcy5}Ni|9`a#nAm~u]PaDlhn~nT3 {z9U^0x^{&nDFozfUY{2qkdr`F#(D\urH2j}k;aJNU=b| !_ )Oq~lYTkf"us $-'W {iU; 1SkWI)D8n=533t %9Uso[T^xzL}z /B>3BsdQ8"3[zFR5Ps F D(19E^t~q_TTbk\4 2MRF3{&rfS>0&#$9W<UXh0<mY--U6BHSbv}|p`TKQO?2O\SD0] teUJDCEK\y<~ [oB jDRgD3=g<KPWerwwk`PFB9$ -J]ZP>+ Etifjr!(ByMZEXV@~X68zXHTw?JPU`hpneYMB6%(FX\VH4x7$4<>Mu' Z1 fmbg!?LNRXagc\TH;. '?QYVN>%f5 '>PVX[uq@a4 C x}!=KMMSX[ZUKA6$ ':HOSP@-b; !0EXgqqn~KHx\5]( 9GIKLNQOJC9.$4?FKIA0gL5-&!&6CRbr+z5Q^[I,n@2BFEBEDD?;2%!.59@@=/vaUOLEB?DO]huT  }U),6>=:9965/*&+/343)xssnmrx0a|_; -12/,+)("   "%&&! 9YrteT@& "$  )9AHHGC<4,  overgod-1.0/wavs/beat/ting.wav0000644000175000001440000003103610300460416015377 0ustar michiusersRIFF2WAVEfmt DXdata1[*1p>o(77F+Cx-MT+O#@m~v >  y&[e m`$( _+& F6| 4 [3uoVuOoG Lo! rGoN-V@Ep(gi;D*(-1 ?YH>u|p/~4r\|y<^hchIJ Q1 "!L uCQD1asY"A @CbGa9pq1eR: n(_GH O{`XkIC4~}# e[l}4s_Jr')$=r-qE "O >L%&kf^d$55{S s=G;|{Lv45,JKK"s9tzx;$4`JacU<V0}CK!.7(NH]&{9$$cNSf?KsHK%1 O}%=}loH* 1[Fh%slWrE+1gUaOnK %ZL-I9]{Oc_x4reqZrO$;yUpY\%KX} []F 0f^,> a5r{RJM)D[/lJ1v2WIHqe;c_7egCKf qR@4`~EMd Vo-jpZ+:4( 6*Cu+G4CMmv:rs Tmdz\{$6x4 :;z[E>]U ]{D=R^xN~AQ7 G!(wZ?h`P`DpBLFz0%<X Mpv9}R[C0LI5 cpj,H o.pO[RliGd[ Ntk11YT[;Gy@OM  MEPVg^o "NTJ{R8fbR+))L yp @2Vr7(xe,($;:piTI=%?T5D6Tx\rZ&\Y_(o"h>YK!Jf=E&>i(2"_US)G%#gK"g NMou\ ^v[^gAvN 3B< yn0?E6tYgN?*GNLPnf Vo>@,cTLgC L($T k\E|.S=<}Vi%Ovr-:\J=Bq"Pv(B`i .0U`}K,!)X@_Zi^Bxw7=eV3&N>sP()qf*| Uz_>*bQDHuUR s"\u]Z^ zS|'m>*nCR2MqufEyuSd7gV$ 7V')_]<]ixs ; MKp({jz!#0x^l}ol~of_c :eH~KFB j|ANyP X% D*L#G)Ppd'\*7c>A)?D7:lH#Hw;q 8cY=p7tu>Lve`[b`!T`UA& bMa{DfB N\;1x& \N7QWkj_!yy-@xoE6>yn%^Y{{c@]kK1#2 ;u"6?l8d7- ,b$9c+ykd~p\<O 3*He0n|g"-'yh,@T(tX#>M ^F6WhA&U.k3 @"T/": PH`{VNg= ZlQ J /cD>K+Tlfq4:"FAZ\R&gp(e;W@6QdH;i#A L ]:-a/S?4 ]m*)g+eCsrz,Xc5QCsuT:(}<hD|x=Xsn4N2\roJiD23gY E[*UQVo9jC[L8D> = -&t#2[.j4=-KL#t2\2M*sB1e)X|sk:# kH$h7cOK4/]@LvYF[r^>c)MKl Oy>6A =val m;Z^oRJzSW}!z&r;@<UnyMzt yiFq (fRetzW{LrE,Azl h.`~+>z# OF(JB;*B~|j}Kdp(f&tW5O5%wTo? 9s@|.b5$g<F&I0o(I`\~.iPwA_[9Ng c-+D $i:=- -NqfX6"K5j!3F/`vkoU=zV2@! O+y k-Hqd/-'<MY*DpUVM>."3e5 {$E3>&En$S5NgtHI<%J'L)2 4j^ IsD37s<%9$C2T$r^S0S`wUMZ1[T^_ME1}Ry3b8EC*Y dZU6d]w3Hcyx6i"Rkty/d{s<oO0kM2!YC3 :X J@&S-}\FO,RUzPoTwHGj9)q(kN\^iQwn|4~;(w/]&OQWvQ!POt1xC~\{dKy\94f}F N>gR5E.+qn,Lu} (\-321;  8z}C$0-6 k(eF>r/=tk 8nV)Al"_CLhGvPW&&~ 9[s KWe<,gNuC !4&;J ZY%fRp,Sb1yS='Xcg5ko1ibm?Y_F7<GUoPV0/ B8jJB@>(^RqkB@$Dk$L{9&}O0(jYO aqAbl]u*Cq 2mZ]~Fx1d&+F6 {B,-.9}g.{A-bzKi,U`3Ubn }L9 S!<`]SdSK3w&QZu"(p-vFC0rnv(YSiq#C>,%.9BU*z`],$!]VW|H8u)f8~VQ~ i4cuI4 %M9R$5B$)&Dz<-$p+M.7}1Pyfl%bO<R).Gb 9a /F6vQ}JMyBDJkYtXIyt/PxR$l{I$tgK*JM; J[R<vr. om (HzKx_>%vzah-//!9<'DD;]]%qiq!>ujqBTyEp;gLxw9B`hQ: =d4idm 0:v3"R_Jb#pe|aP}Uu';0vn%tc6o T9-g} . O){$~i` !W-(6c#u,`&$Gx"=jli.2hP<cYEyME;a =,Nx]Cq*&,!-MKj(w4-oE+vyCX7(LNsf pyA >J<*BFzAXRdsaAN%*R,1}VzL]Fs+. 8Hm5+%1v4K?-w/DD1)QI}SEAk}4, r.+ "G2fP, /plD\:>71# s#i %n; -'GUC^v4I4+@@CM+$QdQ(<a 04ds]]m)D*jgjBT5 k}*zJDyvOC#:tll? (\yE@qi25ErB +U-%v_^=v $ cpKLp Z%&'M;]~!~(uMUe<\VMfyj4' Rs!~4+6qP58 *M=fN< }7nrHT$QJ EQMu *$JD_Lx{Fvb1'/Hf(0oD#f7p^< 2]0/TldZ( A eJ^MN)>33 R4(0$v [},Q$ h,&A -+S|bM}"[6p_A BY '`wanN< *./5OImqG5#32#61P&{(^~z*(X /z`O]sT&-w^= - jN&+7lO*4DH$0mRGNCvlK~N 2-:Z h 1v#Swovergod-1.0/wavs/beat/twirm.wav0000644000175000001440000002400410276441440015605 0ustar michiusersRIFF'WAVEfmt DXdata'A2W4 Jiڭ MbJP, vgYL=0$ zvrqkjegceebgehkkptw|(5AQ_m|%5JZn #6J`u3H]q/ATi}"4CTfu ",7?HRZcjov~}xrkb]TKB:,% vfUF3$yfS=*kW@*}iT=*o]I5$wfYJ;,"~yumngedac``_baffkmrt{'6CRap 1EXk&;Se~-DYo2F[o .BRcs&3=GPXbhswzrlb\TH?5) ufTD0 p\E2lT@)vaJ2t`J9%qcQD3& |uolgfb`_\[]]^_achkotz %3AQ`q$9L^w "6Mdy0F^s&=Pg| .?Rcu"-7EKX_hqv~{umg]SIB5)~m[I9$sYF0}eO6 fR;$vaK6$}k^L;-{rnjcd^]YYXXZZ\^achlrw| )8GYhy !3G]r ":Oh 9Og}3Lau-@Sdw(2?HT[gou}zqk`XNC7.!jZG3 |gS<$ lV>$iQ;$p]F3 sdSD4$~xrkgd_]XXTUUVUYZ]`dinrz*;K\l}(>Qh}2Iax6Lg} 6Kdz  1EVk|#.9EPZdkv|yoh]TK>3( q_L;&kU?(oT?&hR9% oYD/p_P?- ztlhd][XURRQQRSUVZ_agmqy},;L\l~+?Vk6Me| $;Si#=Rj#8K_p(4@JT_ip|{qg_UI?4(o]K7&iQ;$ jP:" {dK4iS>){jYJ8) |uohc_YWTQONNONOSUWZ`cjqu*=L]n.CYl ":Ri'AXo+AYn+?Qdv!.9EO[cou|rk_WK@4( n]H7!|eM9  ~eL5v^D0xdL8% ueTC2#vqje_ZURPMLJKIMLNQVY]bgou|-=L_n0G[p'>Vo-E]u2H]v 2DXh} %3?JU`is||ukaVKB6' m[G3! y`K4y`G1qXA)r]G3q^L<-zsjg^[VRNLHIGFGHKLMQV[`emsz/><<=>ABGJMRY`gku} /@Pdt&HV`jw~ypd[NB7(yfS?*lR=% ~dM6rZA*pYE/{hWD6$wmh^YQLICB==;8:8:<=ACGKRX\ekt}"0BQev)ATk %(~gP7# y`G0mU:& ~kS?(ubP?1yqj`ZTPGE@=99565558:Ul/DVj|".<HTakv}se^OD8) tcP;&{cM5u\C*~fO6ycN6# n\J:) }umd[VOID?<8643141257<=CGLRYbgry!2CVez/F[p.E\v!9Sl,FZq "4J\p '4@NZfrz~rg]OD8)s`N8&u`H0nW?& zaI0s]G0|gVE2#xqf^WPJF?:8330/...0328;@EKOV`fpy"4DUiz2H^u0Kby&@Xr4Jbx(:Odv+;GSaku~ti\PE7( s^K6# t]D-jS9!sZD)nX@-u`P>- {tic[RKFA;630.,**,+-/04:Odw&8L`s'6GWgv $-9@JT^dntz}ulh`VNF<5( vg[J>- xi[K;- ym^PC4( }tlc[RKD?61+$  "&-4:AIOV_gov +4>IRZfmz !)/9>FNT[^hkry|}|vtplifa_[YUPOIGDB=;732-,)$"  overgod-1.0/wavs/beat/zapdrum1.wav0000644000175000001440000003721610276441512016217 0ustar michiusersRIFF>WAVEfmt DXdatab>1KC,(ա(B@6'Vx+}+XՉ׹?vqTT ޭ/VLi !!%(+,%-,+)l&t" QwIޒ{+̻PCİȲ9  3%&/8u?EJNPQPiNzJE%>5,"" ( J};lvJʴӾ?d`L-c;JHT`^gnsvvnuq*lddZ+OB3#~RgРRm*P.n`eY Klx'7dFS_-jryJ}]5|>xqhg^HRD5M&B{ӂAF̝ 6kȀUΏ0W޼@Y ,;IVakjsOy*}~~{Zwp9h](RD6h'?ǡҎr pC"”Ha뵥[!1?LYclty|b~}{xvog]RCEX7(K Ty#.QтMʣH}d$ &4BXOZemhtry|}}kzuogg]RAF8*. (Rl{BMd^6r` (6DlP[@eum tx{0}|zuo(h^dTH;-GEH~ŋ5΃J| {Aj (6COtZd&lrwz||>|>zv#q(jaWL@3%GSWͪsf‹*0О? &3`@GL W`"iptuCym{{zwsmfA]/SH;.p!w<ڜ#Q<4/\+!qgڱ,9EPZcKkq9voy{${yvqkd[QG9;.!1TХE֓*EŔ#@:%{F!t.:VFQZMcjpYuxOzzPyvlrlf]TeJ>?R3& v+irbXu̒qtه rϸX7US*n6ALcV)_fLm|rYvxyywtBp~jcf[:RH1=1c% ؍_~i-?z(w}\r*Yk&+p7xBL1V^fal|qUuw"y ywtpkHe]EUKA6+3_|Rֈ^1JL!0ADrtl %1s5^,"Oz*Ը ҺoiW}v?YƏju5V ށ Q\!*m3;DKR/Y_4dhpljoq ssusyrpnjfa\sVOH@850['?| pv܍ʶ⺋uРϛyܓюlЌፏ%¢G Wյ5 'l08@GNgUJ[`CeFil:o$qRrrwrrqo7m j8fa\VPIB;3**"\g^I89[>Ljr.e}@ߍN-yiƪþFG֩C Ln$,4RD7/'FUw@9t߼)ܯ⟠ڔbPɎא˒aQzӪ鶕˟Ӂۗ+Z %-%5d7k0(!0{o;ISQܓȔucOvT'ӕ5 ` !(/6=D*JO8UZ^behhkQmnooonLmckhfb^DZpU4PJDM>70)m"a BTݫ֜C\@Y-ɐ䐊\1UrP,XʙюخXNI 8"A)06=%CH\NpS!Xp\O`cfFiSklmnnGn`ml&jg ea*^ZUPKF?@$:38-r&rI >qȾ<"v 5̔cTOVt읨 β>8˰M 8Xs }f4$)m/4: ?CoHLPTLX[^=acecghijjkjj(igBfRdb_\Y$VuRN\JEYA<7`2-' "b ,Gh"׸сwǖn*!WʩĠS)QŘژgDh֠©;qƝ˧ہ%pf W#(-27Q<@.ESIAMPsTWZp]_b deg'hhsiii2ihg[fdc`^\EY3VR_OKGCB?:'6_1z,t'W"  Bg[#/ęd^yFK ȟƝLV8,5 Nm`l ?Ú̶sG68Ih'[ !&H+/u48=2A"EH{LOSVXl[]_aicdefgh0hhg9gjf^edb`^\(ZWTQnNKtGC?;7K3.X*%!Al 3q'ئ>ƾܾݰ˭;vbpYBE3IeLpOMRUWY\]_Sabcdefwfff>fe e&dcaA`^\ZgXUhSPMJG'D@=]951-z)J%!Xy HaWdΎ,ìHs𪗨ifm [˚qDI~x=/RɢŨ-׵Q6ɅL-!0Oy&j9w !/ .$(+/h37~:='APDZGCJ MO2RTVXZ}\^_`abc ddddddducba`]_]]\ZXVT;RO2M~JGDA>@;7t40R-)%"@[ipqn fZSIDEIYqT׳'ЮJ³ι `ױo$_ţTޞSƜb'$]Gʞß&Ϧܮ.-׸zq~ģ(·uܟEm2e3 ?5"H&)-p0369OlQ|SmU?WXZ[C]o^|_c`(aaJbbbbbbbbaQa`_^]Y\ZtYWV;TBR,PMKIIF4DA>;852/,U)&"H`X < cKLlp3 'f(CIDꤴ^ߞ{;2lƞ?ٟdUeڥ@¨`ϯӱhƺ8ÿ[ Ǚwgdlք٤@pv'} i Lo!$'*-k0A368`;=o@B2EtGIKMOtQ+STUVWYOZr[v\a]0^^|__X``````]`__^;^o]\[pZ@YWVUSQP?NTLUJ>HFCA.?<>:7 5a2/, *1'H$Z!a^YJ9" qT<##Enؤ5Џqō5N3Ǫo0Iu }[N^Ġk: 1_d*겾Ƽ1JNρ-ץpD wX5!#&K)+.,13268:J=?ACEGIK]M OP)RST6VfW~X~YiZ<[[\*]]]>^l^^{^a^-^]{]]n\[Z'Z6Y.XWUT2SQ5PNL!KHI\GaEQC3A?Y@eBeDNF)HIKCMNJPQR5TZUhV_W@X YY^ZZT[[[\$\\\[|[[Z Z_YXWVUTSJRPONkLJI6GWEcCaAJ?(=:8b641/, *o'$"iLu 3Ql#T ]޲{pΖ:DZńeTWjƷjݲ^c9''@n ~_) LUݦ|,کϪޫ6W޳z'鸼 Qɢleׇ)߂;X*hA d*] "L%'f*,T/14]68:<>@BDF@HIzKLgNOQ0RLSOT@UVVWXXYYYYYYYYgYYX8XWV@VjUTSlRDQPNIMKBJHF(ESCiAr?i=P;*964b20-$+(&# E,m  J{9jP.Q>XϠY־+oƷ0;ౙcD9FdIèPjkKAܩY3(1L~Ʊ CżĦI͙]KdB[b)~A ?I"$!'),_.0245^7{9;=w?XA&CDF)HI"KLMO,P;Q6RSSTLUUWVVW?W^WiW]W:WWVNVUCUTS S*R-QPNMsLKIHFDCQAt?=;~9d7<530u.,)D'$G"&A0 v @ N-8zyآEбyO1Uȼ˳hPPdά D۩ǩʩU =𬴭~ŲW7] ɾxfgtȌʶ.z7أݘ!G)1Lg nPv|!#a&(+j-/1 4!618.:<=?A;CDcFGEIJKM$N(OPPQsRSSTlTTTU UTTTOTSrSR=RQPONML}K7JHrGEfDBAQ?=;9753_1)/,*F(%|# ! ]! 004Q!4؁5Ϟ̈́w{njŬk̼>¹Xj_hWɭM謗[5$+CrMұѲ B]߻tfG;;Hb΋нEי\BC_$bD! Su~m >#%'0*m,.02468:<@>?A!CD FfGHI KLMMNO=PPTQQRaRRRRRwR6?fAB6DEFGI JJKL^MNNOxOO P6PLPOP;PPOO$ONN~MLL(K8J7I"HFE{DCA4@> =^;9754%2%0.,)'y%8# C}& . ,"1XF޶zK# 4cȢLø5þ^κzдgϲLޱ:߰8~رHɲ_ ôwmuG)w3˿ͳϲѽTܐ#y4u^PG;+ zCF!#.&R(h*w,w.n0V24467v9;<2>? A_BCDEFGHI}J/KKTLL-M}MMMMMMMvM&MLILK KpJIHGFEDCLB@? >< ;g975-4R2m0z.|,r*_(?&$!n""^ >[y8su*}U6#$=b͕#e1? &г_D;Hg;)dǸλ*o.§+d˦{eTQYiن۩ I'{1Y)_& =*l !.#H%Z'b)[+O-2/ 124I679;~<=z=<: 9u754_20.,*(&$" rB>I 8{c[ t1hI4%#+jV5-,|! n =x *F V"a$_&S(>*,-/y1(34^67_9:#?@ABCDrE%FFVGG?@ABLCCDEEEDFFFFFFFFNFEE)ED DgCBAA@ ?><;:K97653 2n0.-X+)'%#" {R# TyGlL3 %Adڒ[ӸЎ͜5Ȗ\/ Atrs tB!,Pѻ.C󾳿cSTbů3Ɉ`jѢPؓiG+ !3Ib~+Kp #,1.'!#Q% '(f*,-/01\345&7M8h9q:l;V<3=>>f?@@ AtAABKBrBBB}BbB1BAA@A@M@??e>=<;:9876r5,42{10.-+)G(&$#X!   ypf`__eq?{g8ֳ7c ́O/2VŌ"Æ{f+ֿ޿ORO‹BŸƩǩȵ+kκxe}ڻfj?}xxrpke[ Q @ -TήyQ4%#,ChΗsEнEsӑ]3Bjߠac+{qr{':FK G 1 r.^ 0!@"H#F$<%'&''(l)&**s+ ,,---I.../A/a/t/~/w/h/I/"/..^..-2-,1,++Y*)(&(S'y&%$#"! ~_5R hP  < Ui~;](lz1V/Fuڭ?ؖg`Ԇ-ӕ\, *Wӓ%ԁWWք)ؐRܸݧޠߟ 4eYAJc'Ov3 ; 'm%X  !w"?##$d%&&0''0(()b)))5*d********_*.*))X)(($('''&%]%$#@#x"!  (+$ ^+= k 5F\z2p6uQ2 !=cKޚW5۴=i ٿw< ײש׬׸O،(ن\Xzݿm%߬|S2'>_/cA}3n X% T ~ #.43-{Er S!!j""]##*$$$%U%%%%%%%%%%%n%8%$$Y$##(#"/"!!} 2?o  z W 2lC{W5{w~2c$s*swߞ>ݙUܻܘ܀smp}ܒܰD݂"OCR'<[2-BYm     kAW b0A0^C } !(!2!0!(!! G  f ?SK(= ^%Lm  ( v  9 g*Nr&LqL|#^*uo/n`d\k+\< 2SyR9T,3Y63M}=Mn6Y r2r+ M R 8k yL^=}>_zz]?Bg]%<C:" ` & : :+vY8cJ=A[$hSMWr<2RtH%0W$dAH uQ<8>Pn,^6vZF*l G|;^s   s X .TR*h4\}e>|At&)q  = b }    nX@"tS7zh^[`m?t[cKtH!{{~)O}P^IRs@cK5' wm`P8f8c u q S  S  F n #%$ t P ) j 1 y 7 ]  o  p_?wHz@j1`+b<~!mk|2]f.lCueUKD>=;AHT_o .U~;nWa8k^ZY[\]YN;g6y5pIy)Mq & 7 C P V _ b c c ^ Y Q H 9 +   a=uGKj0x:z6p/e!YTUc+OX*c={fRB3%  ,"hQ8" |j[J9- "+7BPZit!0>IWeo| &,16;@BFJLLPQQPQRPNMLJGDA<:42,'$overgod-1.0/wavs/beat/zapdrum2.wav0000644000175000001440000006252210276441562016223 0ustar michiusersRIFFJeWAVEfmt DXdata&eQ(v>8G1Y171.n֗eD86:"،}ݵ7#D89M' `U W՞]V>' ^3 leT)+B:>7%'frm։m7P-)8???k6J's|WWwάvIP%k5Z@LEC;.1}ĽK)u/?JOME6Y# NNɤت϶# !37HT[Z)Y1Q C/tº};ٮՔ\!8L[2dfaUOD].5yJ!ۡ{p0ş݂.NFZohpSr.ma2P :c xLZm\=U*DZlx~Bwi W?% AѾ5@;Ǥ5l#K?Wain9rVsrnh`VJ=2/ BӳPZF?\i<җnd"1?LXa)inqfrplf^nTH-;, uycw ǖ؏ yƯ)3{h$g3XAMXb?i@nphqoNkdw\RF8* Y?ڼ򽂱^0 !A׶^&5B OY}bHimGp\pnibOZOC6w'ʏsVH04Ħ^)<# H(6DP^Zb?imoBolg a'XxM/A3$q=rQ ʖߐM勤 Vܹg  *X8fEQZc(i mnnCk8f_U!K>1i" J{Μ3vz! |.1 +9FQ[Kcilmlitd]SHK<.H2aȸ0oQeĬU6 -X;GR \qchklkBhb [QoF9,m- yäլZR딆@_% ]/IFT\c0hjkie_V!MA4,'q !65^HQXZ]`bUa^ZStKA6*; ٦OFקǢnA ƦSTlʗ֜4 '3.?IwQ/X]`a(`;]dXQkI?z4H(G dX]ϧ7Vov3{_'Y4)65@IQ2X\w_2`^[VO_Gs=A2 & *2oӧfܠJ) )*b6ALJR$Xj\^9_]CZTMVEL;0#s T0ɒmҭɣH~ I7#,}7AJHR X[^5^m\X>S LIC'9-!_Uƽ𴣭:NP:촼4_*qqclĹ٭])pH̪^P* 5^>lFM RbUVVTQKDx<2Q(ԅQgqǩݫ##ι!h +5>F MQT!VUySOIB:0B&_J޲ӧɽavK4:ݶy&Ay z",6?GMxQ;TGUTRMFHA8.;$ Yݡ5߸-ʲڿm"%# I#-7 @:GLQS^TgSPmLF8?6,8" SܟȻ.`T`" d$.A8|@dGLPRkS:RVOJDX=4*; 4 KtڭhR=sc^S U%/8@GL?P0RqRQM9I Cy;2(B^up2ϲٽtDعC&099AGqLOlQnQOwLGFA90&Oc>/Ƣn߰D7T2 ڥSXh'|1:AG+L5OPbP}NJE?7.$e@J#Υ_rͯ))ܺc/ۏ(>2:AGKNOJO2MIRD=5,#k d*+SBv@) t| ,)2;AoGKMN0NKHB;4+)! c&&ߴճ̽Vaδĸ,OFr  *3u;BNGKUMM MJ{F@+:+2#)F z^ȸ"|+Jٿ׫$ "+=4;#BGJL MK&IDQ?c8S0D'h"1kx ֽtػȚЪم#h,4<-BF$JKLJGbC=6}.h%*kRf5ԽA sf6Ep҄Zj8H$*-O5[<'BFIK KtIZFA;4,#hj#nzvʉ߽Q|,\ BY'wDn%-5<BIFIEJI3HD?@?:3*! "^H'oʻ,-3%.+68M1)/ *ѧ>I?#Iȕ< & /6'%rQ ؗQ,EXѦٽl '/6: 5n.&* Nu݃sgȁؿ꼳4gP?5G^"*17g+17/<|?}A&BsAj?<71+#0R BA܈_޾Q9@ιSݣy\ y-O$+)27;>@8AV@">:560r)!M h`l=GA;ʖ`C #_ $,S27;s>@D@0?<:9v4.'4 0!ھӝͅȑb:a{Q/ٞ |%n,n2j7@;=8?H?>;72-/&Z ;mӅͩn09#ӡ:o k&,2>7:B=i>E><3:Y6f1m+$- Sk"${[?½x`^]=Z0N9&,2 7m:<=;=;84/)"d@ 6EsH{ŹLdb%&--269;<- ݺt"ʚȇǛ4˧wئ f`"_(-147876)40-,& f 9 qݏ׀bHE`Ƞ~Ў%Q (<"(v-{1y4e6076h52E/*M%MV |mזҭAɩ-jp۞lP #(\-(135N65:41-H)#V X׶S̯'ʶ`n>_:S#(5-0g34d543D0,'_"2tE49$Oar˒e0Zޅ@dY-(#(-l02,4t431. +l&  q&[L}:εђKl  #(,/22_3~320-)$] h1ZU= ֵ7V+u D`#(,/122s1^/Q,^(#^k C {ymןӻ?VQݝI0Mr Q#(9,/011R0!.+&0"4 &]1܏?}ϻ@ҨձفfagL 1$[(+~.&000,/,)% RE%PۺP7Пgѻ _coQ !$,(}+-j//w/.+^(G$o @4;׷^ЈюKg@q0 J#'+T-./j.,d* '"W f /%s Һ<֚پݚBjn@i#'*,-.X-+")%!Oi' ?6"x؜ՠӍe3}W7nY|#_'$* , --C,*'q$B k. 3\EL__Iֿ5f=n> h# ')]+4,#,,+S)&%#Sf*zr'٥;[`Fقݵ@ .s#&)*V+%+*!(`%! }k ܋6׸\{x@ w8#@&}()v*$*(& $ [L y_֚תـHN !^(^"%'#)))'%"MR 04mp?f׺ھVL{j 5?"R%>'[(((&$! w =FLr ޕk ;O"$&'' '%[#g j - s~>75 ;1!F$%&&%p$'".c gi>Gyڹَ"qo 8\  !!#)%%%$L# W/ j[7^ޘ7ەںڟFݡߧCf]  \!#k$$$#(""y y<'*4u۸۵ju+[s X'  x"#$#"!a rQP|7"^ܷݐ * ! !"-#"!l_P 0j-ދHݼ޲+66` 6xP$! "A"! A4H #l6a6T`<\! 0K5p 6!P! | C  O UP7({ :W" bTpc\ ^ fsgK I:?(%/s Q~gKUPzY hbjKqA:9g3 E|9x$7PS]  @0 axdrxt< s/(BbB5 9)rWNfio 5] z[B ,B 8< %~`|;W =2-*+3J 4{eHT>i?"#Z ?f [%Tw1 UqhL7ac )Y|U,A {W\.$tudeSk [:GRI [A+XY owW<fd ]H1\L[ sN=_v(?MK w5' V!T*4Eo$L?Tt W  I-Q d q]>)0kPJ/! C[> ~ o(`'l+O ACaanSf " 0# ./1xi-",:9 wZ(` ,G {qr'rG} \70Lq5 4yBY&8m\^]I }>A EXU[uI&dC>zr{g? { c`@Qs J(3WCaxGyM MS#jLn #,Bv#vw 'xB+ ] .Gxn0/ < rm(;T=nuD bdU6IQ?  3#wW;  3]-/6  >_xVr5$Hl'>D1 nRv o14'q+^IdF<~Q z"4 y et;  \P6:O|S @|5y<o{}h ` 0rvQF L _KB2$4KuX`% ROQ?Ic- VF(3Po4c Q e%j, Z*{R # \}ri&Cq';d d  =J :c zAs$VSh,g@[ \ j[ w ]gCa'm=lNB@ qRNk*2- k%}b R,k+acy"M g} _ T A{" BF6mB !C;II:B# K?A`o_"3/2 s s!sU'{d` 5)\ey:P co9 am2 hV - *P:dB&a1M3 / _ l H)v9{ibCe..  _ D!\w W  .?[HDOD2 ; 58)BOr wQRD;hS{>!w #fC!$AVh A U5TMbDX2 aYRBz e-]Ks6tlo`G I T nX]P Z 0yJ7L>oE=d*| flr XK!+wzQglERtoH T3p/tJ O { 5nW:!nXp O 27T Psbed, ^ =YBXJA^@c e10l vn`Id  WjbgFbGN # |JFs < 9'iRF- .a r ./WH|2 d9*gvq  3]&)  =7rV/s *&%MpxZ  l<z\? y\W|xkn " K OhEVC+  ?=#(DIoCW2w!2D7 `UL R'qk%*]||O l>U<jF % FF6'$A ym~h 2v%VoU Z BX7hsou}nB DZw ,#v^ /PUQNbB.Z & z2l& i Clm|'R#QfYXJ- k DZ]Jt <^lsv:KHPJ4 SH6FJ | O7 ,mA:xR>/~ a|4`  Ks^MDV]9s3 8juV(0wj  6\d; X ^pk,G; `Q0^'=#d-P )s_q 3 CjZl-l)EM" ;uNs: .z NR)KNJt"z \'n Is<3f5 L  ?on.q}b}/0 Un({jIi ? J L(0R]b( = B_hU4 i(iVsbK8ga <= s hf^+jt' b gEt >{3{ %gR!#' OEgBf6\e D>Jh 5hBl 5u*FTFJ]|vP9 Cg2Kz T S  |.0)vv! `- ) Ocwp F# ?pNFJ!W4 a Q U\R=P  ?H~W/_b#t u \Q+u "  hK*nVy!~@bRyl "^EDZ gzZr3&Z=Lv8GQ 2_7 1 W B -=\B&h8*"  >]&\j -+9#}rlpaAZ6X @ JYswngm t,MT l_5w d QQND% ' dtk`>z$ )mB%~ WF(Y ^`31h' Kir4u $X:`m K ] >1eJE?18f!  1Z-C :q2c?yH9ZU EU 8 =Ul C u4|mI4lR T [ GPl|2h ) 1}$a_F !] Y }  NIIKOV r"E&2s(ja [  R?& . e nN{4U2e "pd+ * S2{ b  p'9N7gu])$Bw:]^5 7 S%:td t Yk@k!NZ @ Py*  HM0^IWl(y.d|  I Jg}A Z q?,t kIlrF?Z   N ADOs k  ` yQV!*0EA % P 8/E   /5 9 O T p Mx~pV7%&G qBa}4  E L \ Z  'ml ;!6<-  L G _O  G NIdj[bqzz`% ' Q < @Q r Ajyvicg3*Yl:L 5 T 2 $ S m  $%!.WA= Cp A S %  7  C)Z&x `nXRMB& I P  i v :i}]wDZV8[>Y P K  z / } " /;Kc?kEA- V D [  X B V - A &[%-]gI0e; Y : ; P % }<q- .l%L=wX+ G Y 0  % s ) GefI-mh>b R Y 5 p r = G#KFb"fSU*>) [ T  ~ ( & HR'~ER/<3rA f; ^ M  r E 56l" npBN/BI d D U } b p NU(bcDz7zU e 9 6 S 0 , R ? ^%nE6O' ~=I,a b -  ' F^<%N :1vm}1p>i ^ R dkc {g"X|c/\ k Pn Z   c x \ '}XHL }L9^q R o V  0 ]<H3 o}H\O3a7kr I Q | l  ~R"J?_-jLur ? 0 Q : W }1Czb99^p 3\~o 0  '   N X2oD=Pt =%D^2nj " p 7.|l'HI >x,f_T [rv=?x$  Mmg<;gwX]m*?'}I]r P  +"d9aO^NHq[&h}3yfh w  x%k yRE_ utV;DkSW[I w s ? Iv6;bC@b"A}2/wK) O D IaW4^ |J4=h;~&l V; (  gx*]8(PGg.Mud/H]X;f5@ zqk CwhFtwLv sAH""NBr  W&NG=uIM9^U??TwG%WqHXV 4zz)-3NNihZ?cq/.jU1><! |,0$ qTG]@ #:NRG% dGO{q@|E+")8K]gdP&zCsyWf% xdWYdr|~uW$g&IL'l-b}vt16?A^ U"2)K\]]ZXax=Q%w|(bAoi)357>NmKl1(Z!c*b+8-'=bWVDWYa7cdYI.]i|s%lL9&aEpz`'SP| V|M] y_H-^z$IM1NrR0'?hF!Zf "bRFiSK\5r.]0ON-uGlR-h4#Kj^&s?I7X|B$RW#ah>$2z9 -i7VY)z~1dgO2$>Y1 4]E'3J[Q]N:F7'(P{YGLcrOOZ`F@tZ"x$!+aqwDuji_:"QoxsX,N{ 1t)'p, u_-.GND*y#Yq9C TP' ]m #M7[z B^- GtBZ Wi%xHs M{M0 +Iv@\*T<vu=W4j \rUIJ[vfs6N&W~sH5"g j$}rwD/AC 8ZpxucEble{:+jJK9~4HNG6@ZcQ"%SbN-j " ] Fcm> )N~3z TVp;|6e'_?+&9TxNW@ntIh'k1~dQJHQe~-fX+QomI&Vp= yst~J| W4Oerxvm[B%xEyK 7e%S->INIA/c7[64W}'Nx  "wR(lL2"8Us&Il`>eO;.%!-6I[t$A]x~dK2l`TLIIKV`m9Mbup`K9" {ussy~ -;LVcnruvvsme]QC3& )4:BGJLLMHF>81' overgod-1.0/wavs/bigbang.wav0000644000175000001440000016047610302642156015134 0ustar michiusersRIFF6WAVEfmt DXdataZ\^ 0GckWbRnQZTE2v:hJ`CwlB r 6  @ l Xgj!432*w%'i-%#%B *x*-O/!4 6)41{023105:?6x246P41/-)((`$D$(&)]'!)N(l+4|6/& ! bdw? #$d<׶{N׫ &Ңٛ$7AZڥQǡXTҭdzºUĻžeZlŵ<ֽ̾mKl!5ںF';% k r/;CN_laJ=Sh`sn|azhImYs`ovb zgYymT( ?CI)BK4]M;IvS\aW\}3{ $B[Qy s6ZJBn)XUR>Hϓ"߿B?+I.#,ZUְ̓(żE^SZI . K%(<8(nj _ɟfװrQi :r=*4b``Z$fr&k^f_I,@;5-&<9"|ԥc *;xZnةaƠ"w ڈdBRݰ4g?Z^d/!󀢽9"孍s[ӧ/zIy_̀<ƨ;? f ʍ˷i޹ (9HNZOM|K9JIJL LKMLDIFC9,0P>: 2/'4Bx/=HKVuX%,!,  /Y%iL7{S[NI?V%`~d}T! e~f}\:Hhl7$1kBO=,)]2 A,HA}jxI =s%Ou.Ft! fx۹ޡ՜J.Fj| ^Irؠߑ̮?5\ߊ݌Fp!za`ٔP6 ֖zܻ&(ڔ؏ŏzN(*R1W {Q`>ߝ۴RNь_.+n'H3 [$?J WdrW34EWFoD\Xt}f~}\_h^AV2wxujmspl*pkr{ak3~l)R\x)yUOajywyjdAS5XGF+G QE>$h$9ZO[RW:M^;W.^NOML"O]nhprjimWv3~wmY>Z?JZe>A.I]:D r .aB4VfނAa- 1E#.8:;'N),;)5$W8 .  " 7+|4PZG.YPvp=MK(R$2=;Qrul{e>(Z6CB 6m&ACx``2[pjzsvMjz~V}~gXU07g:vi_^wohE\eP.8%k+**.>:E5,x&#&![9OT>Kof-T!s4/1@AD9\XlB5$%C@ 20A[Q.~*X| !i'a9v@5;" Q SBJ]FNU@. )8p 3/okI^ߗᓉ񯮬_w!ݪ9Fڃũ$ƛBDԜmպsoN:a $2:7- G %.DPH\-pZf#>'-1;.(T>U/w V&F L9. 'ͦl~@ϡb[oA]CݚҋȈލo,*ȱߣvMOHa`+c٩iA([C˫޷'y΃&1jڧy  '' sUs!߅K24`|*  b3|/'5r,@]M@n WZ U7@WsaF$^Y5s.˸!4BQH5:SΘ͋MXǥNІ{ʆtF]K%roN׏"så1qI4ֻ̿XМhη͈[0::|&8aDA{D{@zTmO24)#p)NzCf\KcUhp!aBqtUnC q4K 7C853K:2JP ?X!PcchR'9cQ^JLrfF1OYa~N2.NPehLO7N\{o{Qlrs }l[BI0r".v-10#44BW9VG48uoB\1$,(+b*\N[|HY)f@=^;6v8O?9efQVw_C CPorR6?Aw@jvTWO|4 Cy q[TFUyqiᡲ0ؾiv"wdebإQj"Ȏa( + R/ $>-28:/iJ]%K_=SXHiEP[`^_ _*`lejgibcj_oXC>4XueI_DQ ?"G-YkrBZ>+,Pzan[TC!q#4\esrMpq oveyP9[lhRjA{hUO`PPAt;tGLMA8;M`YLan^=?[!N/:7A2##|/!B;(;0BKD0GAYTOJ4?d#-#CL~^[iOITUL(d f a\wLztZ~}iqrU^XYJwMro{pVjrQlY{mwk!^Uee=q;uPSG#]_JBcS^hgp]K\kvhqKa#t\aTC JMe~AzjsUlnvUqG7vKbL$Tfpq3G.`)RCisodd^MZa1L7d .?O2{2׊? &Co |J6?vҦ+ҬBäzʵz]P*"+1 )- Yßҵ Ѭ4HqwtIߒGstڟʃ܇K:Ū" ̧ͩXأ) aޓ̠  !GaMb~e9ͼĻWdƽ:UԴѼΛG{ E< %  XEU$K}b '0G>z<;7SQpB[^8?g_c]Ygq:coK4Q* xfr S#'_ۙ_2Tŕtdچ׹QS0-W ~ԪQ6`Zb 8 :S>_.YTN'=~fWSg F 3;P*'}<Z}rd2D')DUp\ZC=6e4L[7h~Awy4ym]Ya]7Z&Gf) ")E'/P9m~).pIUb\YR'O8tEdQO Ќ ,Гۚ2Ϟ1UɁґчǏ'*ڃLS䘕XEz_YW',6FȚ-: 5 ˡА)!X@4 E̎Ŝ@f3xH5Fq8w̉؅ϙ<=늹섯8-}fZװЖ~/!鐴NOELuؤrѽ]tKS˜ִ\(^ޯp󲊺ooܸpC&Ixڳ>&Rp&g&i" 0+8796b>pIH>/o;J= 2FFxG4>+En vge>YZo~^pvfZX2c^[(\*L9;EfHPr>ʒږsq͎V.Ay iԬloV.i:8!cF2E A2ETX[Cd ^K-x3BfS OC?Q5! m+9208.ACW{Nugn)ZS[$j3ys_mHiP[3GEY[q/z{Wa3Z)C&]]QKP_`(aA]S8oB)Waf eZ^a`_cZPEW[$_b0bW_}\^idaslknl~hmrhg|zr{|y~ uUs#vqmsTw;v7~y:|;~{sK{;~yle1heqtmjd#^fik~o{iktOkR^`_`eAlbY\[X]^KVQS_SMF1 ()"G.V>82ATRMHFPZIn<{K]PG^imbRA -,F}.o<)1k7AUq4xy.qtsUb7 !P;kyx~md5l|*{1aE+#uGz7xZ<t }q= XBrk[X XH41RaW=LL'JQdROgF2 .5r95;5Q0#&3C+WVO6(0,,.3-->OV=[OF ^7mkzj]B<<2O'Aa'g\NE!;01:FtMT`_ew~hUE0-&13YFbE^Tg@lW?6MBE_mR3B.b/T/{499yA(SU:r *M8ENVB-L' prM ",, UqP bH3BZ . хٺ踖pdO΢t ;bl* fQQy"E)(؟f & !'(,!}20ب ;G78-=[J8A+y.JMW5: .?I+X[_cpvrqtz&YIKe\bu|fQPB:FS9Xeu\.aG3@+:l"BD!#-"D#EpQ`æ ~-;9ʵ"w̧_¶Aˈd }С)Cɡiॖl3ݏMo#BɓVЊmvpqȄ€_9FGqe#2݇,v8fz" 8ΰ6ƏҾ(  T,K;!*K\ \ A5K4 !:JUM7gE/I~[\fRCc=8L,,;LTJ62>JQJ;Q>,WJ`kFd+(2p2,7J?J=33@@j% h[#V"6JO4S*9Uca]KM=X8s.P&B WM@J,(`%pa o e @8ī/hoމӔ -&)" ̒ Xbqܔ*^X( *][)hL<\"Pa/ L\ʻ`7vB0$c0m='򡝛乡 iQ񘑰]¢ѡLݧh܆bΞҞ{$}P*ႂƭۻlmӫ=ÿБՏuA '4?81] ;d>%,m$eI0 883 p 2QRdf(fe_hR=9,))p )9U?24DAO+wz|(U"UgsE+'!~ нهj;,.i D4JMt86#)-.i-5D9g&p ' #NK{5pF_)bp>Bft tCLi߇O"b dXêhoʣǺŠOKɧp Ĝњ2iBưйcyuі=; m2 5Oe`&!׫ &(&]ZL cV ! q2AH5@:#09 * 109'G  "%,'%,3;L+MgOFd*x^;/g A%8*C & c1D/CvCG,F425=_#4KL.S ),F2 #->xOOVV^a{B7])9UKbMf6).u01EVU"; h#[$?YZ_d!bK"FYz9 B;.[*!$ j-(BF@PT[SGe2J,$z5ىǼOe Ltv DlF\Is Lܑ''M쌰ى羂Ψ(围jx}[JaVM+Ukf,B>@phۉD7慁Ues5zx( $'Ҥἃ:kǮ&#-بV׬ bv'i(n &-))+(5!cy=|:ݦD%0/$*d'r&"!9)+# z `I4'HNF6a*){".-#*cQnEg/ H+n@JKF4S F*,%Pr S7 !,*+& O*&x 2&:4U_=M+D,=KddPA~:5?B7EIY\q(iL&OM;ZGf\F8{xwzpx ~o|}nbZQcm#|}}okjXJNJC CEBFZmbamBli`I5"! ] *1 I%*$1!ݠЃ< {TݾԂ MS$8I |'v'ŃFC/g|R=jCLGЂQ O6*(nb ] !%n/,mw0  n7i#->C4?-&8 E) u=ȫ–LQ,hY@hܢ填9"\ٚf.ξeBXЛ=[.R;ƫcC]NEXħ񥴔򒏕D#ʜ՞l ?˵εԸ8OƮ mAX1àGUME[ϾRn~0IC9wK\VD+N_eF)43*!iR_9=OMaK[QRQI ?\4,-(:zL X2ftzL|zx~z1t uwwxtgsf|oudmhwzclj'lEL9=JXmYODg??CG*DA;z2W3m:8L(pI /?qE=--%(},*#> & mu^P ,: X|FfyM!:Q~(ϛѝ2צ7y|ݷ#zz^z߁P=^TW΁sၭ넄%j>2<̂R?탍-tg!灮 肴҂Հ&^>_%c_|ޛ`d͝Nܜʃc[4t vÒŽâ̏ϯT7ݑż&TJ[̴͉G>T$ Ov RصTAQ|pEI$e"(/*B;"x*5< :.nc  .b  < jW}F$ROT) + o[}+$4?h8|#%޵\AE] "+1j,.m(6 2#0i+u1 &)&-к΄rnm?ժҊr3 dQf^jM?K% j%(؛Zߢ~-0 'j;1(70I-8(! (!-w>L,T@espbVl>hks'hWaAclWv~yeudnHxoQPS5JtxaLF\zn\*pB}qv}jebgbEyuIejU32SphX.M +I4.D5W.V>-?(UDC%C  GFUM9*Y\4(WZ.3<05,9D6 hB !zib$H@u/dbor5+!^':V=-AI]'k}bA% 0 1+'iV &.1?A%JbO9h:1jcQw_v1d%;%3`/@kNA/ ?_tS%~-B0-1'c/% { ʢ]Y֪UhΦ'&!:ۢm Z o"`F¾-*^ Q8SX j7JnbTᢼ,ܸU3 Uy @k30'i( T~ f  墷k𣒢ɑԘ*|ōќ%[':cjٞ 6 룻̚ d[ ɊD.ק'РJc5.n7a8cȗӽ;] LWR̕ ~3.U8}4}Ks͇Ή%υ?ܪB3!D I>;SWF&5ZxkZ}}ypKt}Xv yusx}~noOtd~cfhU gd~KtVkA_H7(9u>g)p/{B112ecyh2'n3U#D5?pS$9 =FΙcu,|Ȭwܲ>̲ι|,0o ^^${Z-B/ĎU-ל3Ϣ`᫹։ yL1ʆíjފ5zL !%''/ ӆ2 \& "4==;::*;9N5w0' B%!   ]!/vC@RQNWc-[D7{%?^< &;9n=APh8NnhO,  ne ب{OWWg:f߸S@~]գ̗bd৷eūaۼya0ݱ2lrU?_\+|Ο$S$d̯ٗu;X؄zϋQŒ\y1L׮ 6'ޘ *#3C*?/yq Yf܉טpx ٍC],){)׋l6ʬ4c]T &ftڧ߁: yq 6a\)#)$(0r w-/@"U#WscIcՎ ѱKNcħ:{:dkƑ~m􀈀)Tញ@.t|=}ݩѹHJWbȳ˦tj˘ٚъ$ ɳhK ]+w"]&-'F1*,#/N__$evZVLMMOSR#PMLK%LKUMvZg#{| ^Iay|zsd}\deRQ ftw}]jRPaQ_cRe{fN??1F v,! j e[ɕ谑سDƬ"Nn~ޱs]0@ ov }(VB4+Q<@:BDTwMg?%|/%9 v G y  i 0_X ,~*U.Z/0;::DIWG.-)oI(s,8&g 72yy1(^ 3 ] g!C _ (*'7-Z,4$D2g +E/16E#.m/J m/o89C!_'p=orui.H!$7% K A?Z'*t0m,P1I8)/@$`Pl)*ՐѩϲF|9Ĥ=lĤ 1L쬝F\cK:+l ˢ؊}=KՙĠ$7@oTp ʭg=J t~95%tÃM#lvٱhz!I+ ԱҴ¦@K[ tټh}ŖLLKTT$ۧ1ǹ{8|ufЅ&" 4d.} ~- iɳc$ɐw=3Z q  Y eMw)"R `!'2-(.*-&@/7@'`D;E!? tP9p_#ǢKң̑bۚ%ͼحѩы!؝ݧ 3)NݏFdRIX&aܜ,߅`y6*تcCͱnPo,+(Tz|o:!8vCIDB7CR@DFqCECMwTZ1[X:Z{YRLI*@lO#IVDB:, C 7%1* 5I [@ͻt/{[{jU,`uwc-Û*_bҍnщnIՙbz>O(Zwh _**2&N2Q0N(B4k*N /;>S:UAi2[KF7I2OO?EHF;>?AE WkmLr{\|dAOOKFC=: 3,@XQ>7F-&$_H.SED_C,YBiTC=;;5.>/7;IXS`QQ>Z\D@NTX^]IZ093!B%t. R  #=B&RN _\i Sca VT2I@DS _WuZZW;qsp#{Dg[t`xbtjiqV2x]j7VR=efiiN>KR8 Tq3SU`M+Rf=Z49dP %VȮ8ǚuq`ϼv̒ i&7x)ͨhae2tբԊPڂαRί%H-|Gyt޳ٿI\?  }vܒFgUyI뱞^gf|Bκ꺀2\Y3Z}0 𫵤ߟ/ p굊B)B`"VgЬҙR݉ӊՕlTĐ߁$hr~xeWQhlƻOavxC~ƕ$?nrШːGFc㨤Ғ͎xx0 vƘg گ͓ۯN:ԊTӨjyzL!l llE >|  C,=&E?1>:-5A51Fp: :#^-(!(J\ ZgQ)9>@M5)2FSJMkEO*c@bPVXWm|h"^to^@2NW[mo[YP,0  Z(*'Q)Y#4;8$! 7 ?Lpe F T)͞Ռ9X `ZJΉ׸ٿ󩙜T~zӼL WFrͽ7C17GJKbH?4&@$,&% &4TI?%0HI7e  |9ܛBt o\ʢю^99~Иb"I1 y}wj׼(>z V̵͜n۰Da(Ӓ,MrXǟH> {㱬ÚZ<c|y93ˡQޔȶ_ĵ]ܡ:T]: ^ $ 4 u\( p ` lWr+ <xvD$e zIf%e\ # "Y [(h.%#@^#Q  0#A8)>#F)4mL /:B=0$- a;H q x1=ysV"]5K-f'22i!` { Ir X)0+r2oVN"PM*BMB(5+<1G"JKRH*4z/ %+;:8}Sa PRDPOUIRZU5 .# * +BC??3&!$(i.8'==71U4c3% $ %M-u/ ; 4 SM hzfəŴV½̅fl,eJl`˓=ֻˏѬ ijnȼπ[ujh 3u߽e$ 6$/,8GFLSM76W*?H:8;7B/46$:&D9MMGhF8*7FkND;@AU<9:SEe]h(k\guqtY^B>u^en6u}z|}`vqs {uHryNzLy{m!bz=p([_\Uigtic]ZXT/W1VCTQF80)21"!A]$W kD /Պc9T@A*93|O 5e_ $ $ G % " ==M݁)t K cލ[ݿcyS݀{DKXw ԙ#5ۆ- 7 zߚR܄`~ , E;p `,7 Sj UEv-"#D! /5  6 fsI]!5/&T(4&G tpb4fqAp $> l {`9f,5f4.h.-w)&*w./-v%w$" DZ X, 0G,`&v.?)s5zQYO3x6Fѭ*!:ˁU'Pŵ󱕰= A ʚ ߸廅Ц8jzk½1hŊ̦@MrĽqCs,ӿA3.J~L"6PTJΘ]$E}o^ߑo}ʳIj4lz3zs ѼҩƤm=˖+݅Pwnrjގ ETuydFBԬشϮůOgȦv*%Jÿb$8D‘᪛n'3SǮƽݴA50ިWAchjLS΢ G5ГQYc 1V  }]/RDo3$/?C 0 {a[ϱ`ݠLAߏRߣ׻,Bdemr;)̳7#IV0 8͵MZͫLۄ"iz0ݱ"f,6 @H; +s# !$H`)**E#,262;<%s'+!%`(0&Z.;+A07(2"E'@;7&%;GK@96B)IJHIHY^XVQa_lVc=IOMii>hfAozzwOk~pb/dXo~qeWRNVC24;/Z'' F~s3#+F-'7^ iOo!*ܕ:Urj"8DiXu:CM-KE*sck|c@ ^?oJD aQ NbqC0Ln@I 6J<5ox)@l3z#_-hY|D:p  %, *|%#AL f&1 P,֯۾ϴ :AF+2ɧԫ˽D-U`߳RX6(0ÕѯԎPJ1WM2$n8֡RfbaܔԂ#9ʵɈǧ~޳<뿋t BK8 d{eEmМ"Ĺ˔d:f9mV[_ŷ9V%ɧٸ'EĻ вف9~$ܸy@qbt* M7ITq )F2 7 A4]$M#M?!!O9 +>I wF Y 2 b h xd R w*t#^fU>^Lpi>tX^=Rלrޡݘj+תn%Ѝȩ8?j?$۸A d9 GHz0?$+*ڳq`fDE]ER O @vfL")n V96 '%UDY _ / >BAE5OH}BkI[A7/M-,6E/=?=y1.(!NG h._#%!#l'#0R-R%R R v d7w ^UT d@  6? Xt7cx # Pw^RE8j @ ~ : OL "O }';SjTb T8 FHr8}UjM &"0k9!@[EHMB62/%(0/$S#/6/3z.+ ,-,**.(&%L+52%"f*.)%(Y&I"/w m \$+(+*"*'B}<I L b 5Rn _x,)KBO`ؾ?ߜށ4]ތ}U>\q۶۹fGh߃J߫Tݢ۩pw ]&G.5k/ dQ2) L5 z$.b2+'"Z$oH /Y t B M WDxW2-7؞؁wdֹ2F.%̴NoLѴЭFHձRң$QֵӢȹɌЌ^Զf|=iDOlHH6߰֩ }.Hs0UG)%IG"ŴֵB®Y/SűA×Rd޾J8|L2r;Vūü@%cʼnّDpϺLw+CIIAEHK,M&D[77bAC916;K46V2k$ */125I37EO]KA.B=8/`'# "]+768?>;Q92K2j54285:=>s<6FC^BOT4TY [/QH4IGCFCE PZ`cgjimmd]6dZ]Z[O FFdIGDIPYF_P_ ^_aab>c3gjjkottt5oropqh]ZZ]]UPPQQNeK<:>==f?;:AB<=>=AE== =."h%!q&-13 6:;f@Aw9`BNw hqڵg$M7*J65gu.Snr|܃-֘T3hܙFߨO۝ؐڜԌ ~F݅Oӑ˭т֡ w[BrSܕڶ?١epsyS@@VY"Ai|,z>fg=/ޮ߳ pFmrL/0 yo'?G*X0xtL SLB 4 ve  H  S m 2 0$%!\"%"}v$w%+0>&  L! x '\w{"g\y D<Oo M[sIp3 NA/~WoCB'{h\|y[W$"bxZ7)zi}}o$nd+.Z:W޼F ۩4ϨOq2F0)(ֻӛF )NҽΙV٫eӤɥslt.ϓn)ȸk4klc˜ $q|2{Ɍ RS̸̜A>kŶů3Ίxŷ\tnRtcߥFޘ*J o0qT8 $U"3Crsb >h}=Iqv )Lc_t-yR]j  WD  51=cJ {G  Dnc|2; ^   "89' "$%* )g&r%V$k%'&b&(.)'&y'% %b+/0c4 9>6 0*"J")0t9=';97b/,/,59:>@M>%;82*%I"="L!8"*+)+01./($[#pTA &*u)f*/-,{149J9324F2-)b%0y{wS   }?P1\#0N!O$&9$$%)(V    '  4e 9mS Y   G (k= !oe` 9QI;K>F ) /  JPHK8GfEQw< y g *H$ $"  {&'#O%!r <R:!%9%z*V+,1[2-6+-1/*$!#J% S&<#N/  @Y Qn!J#>7 K3g~S(4P I;lK&zJf$Rj a  {>}au9 R T  zc: N ' " _,| CKHA ME P tUn.Sy`  A= S  g=Tp[AWZ xRN, MZV 4+dfI}^AU#eke]٢iۤ{MHϔѾ~ӃqSE}0Iwxݯ| я lڅh՝z5ۜ .2qΏ],bǮƷѢK"m׭ BG̘UϋѥzӃZ05] x2MƌĬŁwd_/?|`8~0jׇى۴eUZOפض"j9qT۔[yϡ̞ͣNм΅}ɾ$zTӽztT֕؅Z"9ۮڳWq֧#݂ >x#d HtWҳЃѾ F5֪Yܠ' @em+ ެ2=?Ol ݆ژk\^6ԖXRQ,,##}~<)ߒټմ֑ܹ@} jC2?.1a" IN=n|\mT -V|ZMguN%59 ' M m!w/b  FO)8@ v Yet wX  wt/5_ t k y< JCu!! ."<$9%%&'),,,-)%&n%9"Hud "!!" #)%q%#v\j#&)-02D3,1 .+v+0+)/(').S1u358:n9532b25212445%655l2w/'.-"/14d8<^?AA<:97447"9:<;A;K<;V;:27m626462733r0=036o8;=k=<<;B7#4p/++a,-i05:U@zC CD?:6,4G3_31&24t6Q79::G=;9o50i+'%#E"a""$&'e'&-$" Cb !I i.u!#"UC.   k8K5 `(  } T R NdII\x*ub(I0zP7 tax4f2\p0&kv[561nKhIv5hqJt+>ظ֛Y߳Nk,n [*lkp߄vRC#puxM #t߅*ݐbmRIXR7[,cWٯ$z`mݔۮqI[yVJLC@p ޥvg]cMX7ݫޛn37,C&J2m#QY 4C43r%5DA8FM?lx4T;7mwNVsFsd0uP'y dzjkR*'+tGE EHܨޝH]K}8Y$8"X,6-(?gdxk U 5 k LIg? h 8;`)5c:@{ 9 {P{Psic"@BD#GIJHGFD,@1K.0$,4G78/%0@?@=;|852t7@DC?L]N#@ 7mBLNLiGHhHH?*i'9<.#O ->>:*"O' 29>{+!*2/.t!#@=  4mT%! =Ck*JP K<H5 RVd }Y+{BnYEJez#{666,7,% oq{"99?J;/9 ;CTi[ qwܢ(qހspd ;gO 0 ./y5%)/&..6*@y'# e. >" !v!N!! S - X!g"#3%&'^(p('`&<$!hca $%$-0-)S$2/ 6 Y/PO}_vR΀٣ȭǣ5  l{ L$x.E#<$~##$'(&! T!f !%*.-%$()&&)(I&#?Q1#"%+-)'  (ryiL _f 2o2,'ݼ?F؉ۯϗڑ6wlˊ&)ý{AÂǍ$ŵ7(Ț{ӉΥjͧ&ɌɃҾeի׾_Jm1Hiq,(/PnYih?#a^8)2 |ޢvGܱAފش:+t,WQH\H؟Nu֮,1]w t)ci]tXw[! X2iK-hR" <(!>\,b,96Bc۴٢(uG8?c*LNeT; s&  ok TC H '':@%,$!18 ^!: ^I"%{'&,1%-'-G2+1W1%)57/,"32*,66/)#%/9353,]49:639=u966*Z*55A.'" )4),S%%#! !!H- sw  2k *Ch. t"C$a !0iH" F$M!3 b3rR&oHa}n$<ynN;q O r"!z@^ =r qM p;= KADB޳"@C`itDݍS9߆0!tw!-nx@`3j  1 DBW3:!EBXIyh#$V <#$"y!#$$#5 #R'r$y!_%V  u  K &E[Btjޫ*2$i܂K&$$;W=w}Yp8$Q5.3 s#s*A- # #  js   o ^'vvt 7-S%8[n,p2YiF_Q^5[5L.@ vjQ f (e\ +zshO > @I8rrx U sFj0fi ߀h] #݌Vه?oؼܹ<)_H+ڕ>(ތްY,[7jP,P'-F(>d2& ZS ~8#Oa+& 2wZwV"z!@a | !n/#!{!#_(R&4#Z 3r2 e u &j tm "_]" NqHiFi8`  8[KMrX:'IO>]eNg 1P ,e9kK{")WkkN#] FLZI#asEZ߳_a=?x_][ 2 T ?9}c=V!O  "Q ()q'D!o)q"H$-12/c*-M3/w'%!\'1--*)*5#61t(c#+*)L0/#v#%s!! Sle" s"z. / q   Q  F M  L JW  "aPZ%q)(&`chhj@unX3T!Cn }U0=FI1z`=  D0 }m sR p /E  41h}'K]T; dJu? iY_ 9J7i!h"LS(D % {  5 B ew"  69@ v6>y3WJ0|pz޴܁Z8۱ vr n1 LlnJt9,M|S<o`QuO85tg'{ &6d&#as^Z.oJ9=kpTLBbL:?\$(;1Dz)P,pi޹sڰ7Խ2:tL7W$}yGw Ao e]+&JN\VMKy:uK 2? B ~j\ M}Y '; g VD r f,~A@$F\ E:h&V)s/[8Ya>rA$6 m\#VE, =KDsA,:ccY ? ) h.C\p2  l *t R | @a") $bEdk$&3}s0Wj,"Dh=L  &jG$_  &   G$1*bs{vR7W \9 & 'ySy5Q4@oLfS3  A =#R{,IJoQTls9YJECf]J\'Ams-xsN]D&R_"N$pOC50)!c<n  V u CFV  ^^  `  sW ]  D?  n{xD<=rxHA{ : D wL$ %j *  : T 3qj 1 c|[^kBK!z^O)^?f%>"kLm/4:!l;6J/,1M@R Tf|K\ y # a%& Da C }U&#1Q\Fs8m1}+OQ"b#m6Z2 D)up#iaxYb:J)%QF8j|'PK8mAXmJ]IF(R"V  W4  N |iv p 6~g CF/ PyX( C  E``<A@1 I AZ# q TXL<:W6" L8xJk(Lu|;WtH+9.xA,V+q"Gdm0b:9H(k6.r_ qShP X U  44  J. i _P ,  T y y R # = w z c M  xw ?Ghq.@QzZ>I%_[ܙކdTa('ޔڡlٟE۞#+݇GcNxFmgfB"ut}<HX]k/q}hqXt]0WD|}H:;^V+GePk&`+($/N<mij]|x'}7=.G =T|=| ^7 ya: Q P  & 8 B  Dzp MP c  L'fy_X # ! Bl&[  o 2 {F '.n L)rJ-( i; ` EJ: "O&}I#H!WOtVJLI>rw3gxQk[HBwpj}>1 cdw8z`[ix2zK>V0o]pK8[/nv=N;. Aa\<#^1^ ` [=8m H }    v .  m  }c4 8 x JgC>+ D96* LgIp5+%n%!C<=7hT0V-VwAV+ gA35y>4c e MO)+6 * - r D h s {n$8 UI ut%}]42.B};nfmbh8_?lo;.iYo8M['I?;DJzVZz^/:M}JtUI~i$"`pVg/hL9"eXU8 3 V)W) f * I B f :  (  y B 8 8 F g wd % p %a0Qx&UUeaGf0ah~WXF +5Y@ <  ( B i , s F ;(~>8YP2=}X p E  f S / t    ( M*K,hOYmN^ M !Z*,NiAr{vfIH7-SHlkTY v^N1?Vib$(IFf5oucAd4.Zm(a!79L< 6<d/G6ic78)nCN-{Y.g]t]/[ 77Nl+G  BNl#}rOMs@#  O G7`&0"oY WgL@@\Adv3qC(Na yr)6 \ @%uR1F^vv>lVI O5i=Y !r_!H\#6\5KpN9[@z_,@5Ll=^h3~AI _|sF3>0HR6S {{%Tl2}I,Sb-MFp Kdn BP5f/7Dp  7 X )  e ([Z %|k8eUyJ)$MW0IKZB~+Lv~++r9U3O7ANX:QxRK_6}S#o@ zN"^FH(D@~p%I ,}X?~Px@}b3\D@q2J ? e   [     N $ B { k Z Y q Q Y  B |    : x x 2  y i IZ * j I ~  Y>m vVJ\ U 0 1 s  V y H t   S $ / Z K g+Jb F  X *  & ` ! Q h z ( 2  KbpiP * S( FAz.3QYraZA  A`Z}s M,h#j*vd xmA>jMAmMTAF DyeD_ckF3ne0e6j=mj\~F,71E'1~7,t5rZ0mXXXl]eI^ &-;f|%aN+,L[j %`<=5Rxs 3w1 h7xqSy>t B<-f ,tH6|SQkUM ?DvcV@)Bz[4e@5!;|Umqy?xCb _?7\m1 d'Ku.Om((b/q]'L,-. ;F-cvlKqaT[:q!!1~/l~87[:: . EMQ[a!t@ZnHwy.9okYJa 7^H;ek| }W1> YO/]Z36 f6tkj<&ZId8SEuB:-GqJ^nmP:RIvx2q,!bOPB?y% . I%Q+OAKZd0hw,b< rW,fuJ9@c9yl5P>pj~;]bK$c%O1FYCw0r7J{i 3 J$d|5w1+bOW^kE!xN$qJlA1sQ [nJJjy:/nkf* l<[?5 G ~ ~ * j Z J  K]Q\  [fPD0 D v (TI/   M , 4 ? v' 8/3" 0 s 0  tQwGE 8 i</F/JL/~&m%+YOq\k.z$ gUAWSy0zeQ@^D9Rv2( J [y72XNGDwT4x&+yi01)LG}~qO&EXsNn -4KpUZ^eURj4J;' 5R> ]O[R^<VU{vV7_,243M" "]YGFz~B?[h<>wm9R6,$*?seGN-tCKuwo%T*|?SM3=(,1~m_e7?6 "[Z4GvwH-&C^IQ^a|ujtpFmHg3@9+ kxh*RkN'*OhV:Nty*XS0P0%<<;iwTcc`gNkCpl= !06-rVMSm7Uo|iUE<9@NfxxL$ A^qywqh^YW[bfmni^WPT^rg8 $<Raorme`[\iywfR?824CZ{~[6 1FihTGJUeozxocSE5(#0EYbje\I8!?`vzgC"4>>0{qi`hs{wwuvvvvusqsxvx~vfUF;2-*06?JPYVYRK?4&"*<CMKNLIGEB<80&##)'&'&!          overgod-1.0/wavs/blast.wav0000644000175000001440000005530407735365502014656 0ustar michiusersRIFFZWAVEfmt DDdataZ}|||{{{zzyyxa`_^]\[ZYXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^_______________________________________________________________________________________________________________________________________________________________________________________________________________````````````````````````````````````````````````````````````````````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgggggggggggggggggggggggggggggggggggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooppppppppppppppppppppppppppppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpooonoooqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqponnmmmmnnppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqponnmmnnnpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpppooppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssrqpoonmmmmmmmnopqrsssssssssssssssssssssrqpoonnooopqrsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssqqqpoonmmlkkklmmnoqssssssssssssssssssssssssssssssssssstttttuuuuuuuuuuuuuuuuuuuuuuutsrqpponnmmmmnnooprsuuuuuuuuuuuuuuuuuuuuuuuuuuuuuutssrrqqqppppopppqqrstuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttsrqqpoonnmmllmnnopqrsuuuuuuuuuuuuuuuuuuuuuuuuuuuuutssrrqppoonnnmmmmmmnooprrtuuuuuuuuuuuuuuuuuuuuuuuuuuuuutssrrqpppoonnnnmmmmmnnopqrsuuvvvvvvvvvvvvvvvvvvvvvvvvvvutssrqqppooonnnnmmlllmnnooqrstvvvvvvvvvvvvvvwwwwwwwwwwvuttsrqqqpoonnnnmmllllmnnnoqqstvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvvuuuvvvvwwwwwwwwwwwwwwwwwwwwwwwwwvvuttsrrrqqpooooooonnnnnmmmmlmmnnooqrstuvwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxwvuutsssrqqppppppoooooooooooooppppppppppqqsstuvwxxxxxxxxxxxxxxxxxxxxxxxxxyyyyywwvvuusssrrqqqqpppoooooooooopppoooooooopppqqrstuvwxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxwwvvuuttttsrrrrrrrqqqqqqqqqqqrrrrrrqqqqqqrrrrttuuvwwxyyyyyyyyyyyyyyyyyyyyyyyyyyxxwwwvvuuuttttttssssrssssssssssssssrrrrrrqrrrssttuvvwwxyyyyyyyyyyyyyyyyzzzzzzzzzyyxwwwvvvuuuuttttsssssssssssssssssssssssssrrrsssstuuvwwxyzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyxwwwvvuuutttttsssttttuuuuvvvvvwwwwwwwwwvvvvvvwwwwxyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyxxxwwwvvvuuuuuttttttttttttttttuuuuuuuuuuuuuuuuuuuuvvvvwwxxyyz{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzyxxxwwvvuuuuuuuuuuvvwwxxyz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzyyxxwwwvvvuuuuuuuuuuuuuvvwwxxyyzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzyyxxwwwwwwwwwwxxyyyzz{{{{{{{{{||||||||||||||||{{{{zzzzzzz{{{{{|||||||||||||||||||||||||||||||||||||||||||||||||||||{{zzyxxxwwwwwwwwwxxxyyz{{|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}}}}}}}}|{{zzyyyxxwwwvvvvvwwwwxxyyyz{{|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|||||||||||}}}}}}}}}}}}}}}}}}}}}}||{{zzzyyyyyyyyyyyzzzz{{||}}}}}}}}}}}}}}}}}}}}}}}}}}}||||||}}}}}}}}}}}}}}}}}}}}}}}}}}|||{{zzzzyyyxxxxxxxxyyyzzz{{|||}}}}}}}}}}}}}}}}}}}}}}}}|||||||{{{{{zzzzzzzz{{{|||||}}}}}}}}}}}}}}}}}}}}|||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}||||}}}}}}}}}}}}}}}}}}~~~~~~~~~}}}}|||||{{{{{zzzzz{{{{{||||}}}~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}|||||||||||||||}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}|||||{{||||||}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}||||||||||||||}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}|||||||||||||}}}}}~~~~~~~~~~~~~~~}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~overgod-1.0/wavs/block.wav0000644000175000001440000005441210303414316014621 0ustar michiusersRIFFYWAVEfmt DXdataX $Wbatirt oMnw/^a~C}} ){ z. Nu^5j }Hj}~}~{=<|G | ~SU oa.| r/]TCSm  ^$dq!FrYS>}}} s~|7}|^yZ|~+~||~~6xEVT }K&~j| K ~} w~E ? # g6x^5 z8 Uzb/mq lA}O~ V|}/||} ||a~}|s~}0 |}B|}|}}|d~TPo  qFu &5X ~ 7=Vi' ez v2z ;Y:gWZ{5G [ { l~v7}{~|tM }|~{1~}}} ;~}Q}|'|}~G~}iX`zZZ_ }8; 9mG~v:G}}c~}|} :}|#+NL|~`f 7E*$ cjT; m*L 29-SLIWx M|g|| |~{{~Nx~}}'p~|~|}}}{q h}~ Y N *-< JKfBR < n 2@9RC BGt Bu5w <2  6 3_p2L'lVIl. fRZeu[cca`]^:[Y5XXWUXUSoQR'5 3g, ] }'- gEL^ /Fd`B}8A?@<>J:+ IS6 tx ZM^4 B L"IR;gE b  vpbP P  C:5" k/| y% \ lV;qnqONE OO3OMJKK HIT(;S  uT9B#!~ ^r)~&39 ]YH66(45bU /0=c*w]?C0D*6$" 'i?0 lpN e 5 B+Z  K.81  Jd*~[=o[v m E2hj:L e S(BD!*l G#Xw hUz7| T /jp"u%7S*'(_)*,+f0/Im11.[ 25uD676k8: <:Pt/Qf"#]Z)T}6Ni (I$ MNO PPPt VH!X`(->0;6} 1 B!K #(5 &c2 < {rB 8lrpFtqrutmyxTzzM{sWA !IA}}?(z 9B: ij 8 6cDk0{}L[ I+D T^  hmrY * iTq1{Yy VPNTUMS3Ji NPpMMLKIIF:EG"DCB@@| 5 _pj6:c ,sg2D/SX 0,.-,+k.rD,&k$2lyAoR~Ghj*g`_ :\\\xQwFl X&     t ! gJ t u $k $ 3 U8 q|S#!Ap03i sdd}Fxv =6] Fh )U~ ( 1XiG * *O9".B'`^/f 43 45m97A;;<<=BBB6DFl +Ulu\t'I, ThG d VWY[u6na  @ x H.SYyV<8 YJ HvB F%uwwy% zzy:{~8~ ||T.z|5>yx_; |Nssv` I)7!Zl S   fz*76RR6S 4 HRc,W\)'T  saR k O^ MKI2FGqDFBB y@? >>=L ::S979j U9^% XcR~65J13Pv;%'#~ ##c+e. r7*>Uz$`lw ndq H \tAX16"^#lY . \ Xw   K+ 3P;pk+LI bDd Zn}C bp q CS \/{q ?46 7D :;$0== T@AACC%CF.GHF HJKMNC2INX bh7] ch4 t 2]fb8_`SabED A0HhP`6 wVyITh 7UMTvKX82[:$2{|xywvKvTrqqnAzn Pi:ue]*(++ Nd pb,~[9" @' Zn89L M ,Q4 HE=EEL"CkTB?r<@<;d F:7476 343{01 //-1gegmg`$ = HyfOX 6A)k y 1N> ":  \Cr7/Ls( }O [1w=V"i ~R:#X 5; J Efk[y " S;FSr}I  v6a +]fG)V0 F" &>&_  poq;Dg@A[9DCv" EFGHJJLiLNPPP QTUUVQ:N+ i;UBY vgab VdK Nhicdll 2QqpsD y?jd Mm5.}y o99r YotF.xuuvqsrpoomljkUVf[nge y8 q7 @x+ Rd { %- (mgC hFp6TxC d &BW  *\6T" >=78S5|M53 q/1..\ ,*9))(-N(% r}9 o}dv!9 Sqtg t c.mQ  !A !OqW PsR : a )2V :7R xK!>Yi"&. ERc^|_u V E_gKpdCZ ~Rh 1AN=hl oZZ wW &7p%Ef HIe1JLN]'OPoRRl YUVWW5 X[Z\^`^`z C|]3r(Fi k]oy sr, 1\t](={D b P: \DF yGW Pn93q5b __!nldjjZ gg:fe^ccf_5]+{X\NHZ Vw KD*  D[iM =Rh7Ccu-m@ U4 0U,t9=_dw@7 54[ 3t#/Cs,-1 )+')'&# ""c !p2j6!Y |c^YLT o~ ~X6   Qj:  F4vTI` 4'_ VJ!` HF"D/^,y%oIIO @Ezb n 6 \) !"%$'e6*p W+p 7G2q*O dF8bD_ N"QzvH e< B ^N _ M ; m' /S4^ v m6feD \\VQULISBAp p9852/1" M9H f.[Kk2zE9 O. 4@ XpN>g Im*S Y  N;h-o 'stlt2j,9O]{~}}z1tt Xv mh+dc`P[ZtROw I:R@ 8 D! Pj? `+ 1o#b /U,C5a;3b?j17 x +Y  9?5A5 <@  mt 9c'@fHL RTHD[] |ee kmsx=1}} w & SJc=c Lx G; F`Gqs7vw'~d@=<64: |9;ol  j 8j l% juMU Z5]?QO}. ,,/-g459!>>-;GG# NQXB, `| jlw `qKb~: D};no[3] b n>`/xmk ^*koPQTV3Q'o mN  h7 oip s-RSD1CCH j?FP  (r%&3E.Sy#Tg  [ j) +xX \\eLln S d4> -.,x}h  U y   !wn a?8o &]u64 .+*f$#*H  4Y  } `\ a# D  Q 9"<3)T/:z{, y7g OG ^5I b -&&  x`U~{J:vur19mj&7 db[Z9TSQqLJCA u:7%,nd r W-2R] 6J - *E(/I/ P5 h\ U{= yL z67t4:%!C(V4Z<c+9\}^]b $ fhh+ np >vy s\~OtuV ol Ug ; F p[%?eK|nbl5.,`b8]Gu[IV_ c 9   i\6r7 _To  # 5(*l11N9:@B$HL/ B9.d $?j  @  I zX"x g < . @O 2 r=n W  Eg6q} >%t(tt:C_0Y)1v$!!(gc  3l z s& uY b e zESy Y^Df/]Dt{W46,o%l&#L<k+9Y (dt ^ v x. ztusMmk^'eb^ZVScUNL EF<=> NnX=s6n ;; eD <  P  @8rh  0$k C Fn J!"_|OA!z'9u` */V& QTR Y\[! `c hj6% 7pqX hyxd e $ | %!  o  Z@ x$}O3d6[^e4z= %Dx7[{,'A aF] g  % Y  ,'  f8    g !" ()( -/1b TL!a\}  f J"* s lh  Wz,f fgf 1[J0 / m E/N @w_B`L5P+@`1( -"usLrP#Ng RG E C I= = 46 6 #<0 . ( & B g;:  %M! = qu =oW3xAU<j~M) %FpV]j8LH)W ym^M +>> ME S A[ #bd jj "oq [ wx ~ ~ } w u w qX46K~ VqH`<_0 ki  (]qB A @ ,3Yf B \^E~Iv 4v>W|cE*BV7uT'w P5 B C %( S--\ O5 =a A}E J ;GIev k 2O> U[]e"O.k:RlU@D F] GT T H3O N FH F WA A WC; 7 u j~4 1 1 ~, , * +.$ % " / $a*4|R>x G}`_,Bz7ljkedb^^gWWPiJK ~GECw\;]7L9f`#bCw e(X* &q!jJB #3 KTYLvjuC#X1In+D!:L$$+z117:Be=?/ECF, IJMSS+%ri$8P 2Uq u#yz{@L2/[5a?J-Bn SgBQs*5XQJ,HWWAgX q@;=8461/70(($"U*l{;_os%*vi-d16>[K;G}n7,u}lJ |Xbq g~^wMKAJHGV MnGTT.YX>`_jdfell|jqr'yG"p{eJs?o16Lk~ccz ]]VCQP42N2zh5R~)dK=L`uIj%hIUMo! d9K5:x3oc2"Cxc*%X|479.Fx w>zr,UO".6=,RU+f9E3,"~YN)a9M7/P]fQwdcs>ij6toovu5jz{0}|zzvV&GT;c4})vR3PP@;JT86I3w9K0xbnHQ7$8$kD-5 sPI9_ u   &B_ct !.3JukJ (0L[L6+q`XG [ J-\M6wmkp\_ `UFa:riFDW[mdh,lorszwZ=~~O[~n{zyv$tr;mm@j fj#gI@%c- XKI[):ZUF@%|L ap]7m=ZqXT?SG^'+VP c   "x<R /A>w^SRY.?] YO-QF`;,DG&d h.o|+] Ca^#'U4>`r[$s` Vf!klmqpWksvx+e{|@$}|}9xw>! z[;1le| ~Iwr$|Fu!VVTGINz\/qa##zpazyK YfbdXJqM{=t (9-R WaPV?FY&D0 \$I;le!RJGjSlqH4Y N<.^A_w,s}eVyQmAXYM%j]\ Zacwff )llpqqxws}%`KXl}Waabj#hnmll!kgf1Ew4 x S>|-SDA%Unxx-_6TPMoRN:V=2284910/H~Y,4{&%pp!iQ{,=$@Y3ms7K5A)GBUx=UYw|W]LIP$<<Ckcu*h/c/*0?|7N7_)8<=-zS?A]FDrIKNOORucqj2,(L8g@#&|xq.A Idssb_b1s{RMZ*Wod2iKKS Gcw v<JV,}oxX;S+\\\XWHtS2APN~IIi'Vr@BqP)5JhT{]GJ%&7=))PV52O8Wf517auWOs3(J^0?Vtngf 1DpSjg)> DiMRrK2bLmg_v}$8s><_{!x}UNl; = BP- + 09# y0mnn rq2-wv z{_4wt5`j;wt?@?>A)*%  )'.' '4" 7<<6)</77*42(0-*-*''!""     overgod-1.0/wavs/bump.wav0000644000175000001440000002617007734401674014513 0ustar michiusersRIFFp,WAVEfmt DDdataL,~|{yvuursrqponmnpprtvwwwtwz}|}{zw{{{zzxwxwvvwxwwwxyz|}~||z{yxwvuststuvwvxxxyz{}}||zzzzz{{z||}~{x{}{y|zwtsptqnljjiiijjihgfdcdeeeegijkmnpqqsuwy}~}|{{yvvttrqnllmmmlmnmmmononnoopqqsttuvxy{|~yyxxvuoiihc^]^XYTUQMNOJKIIIJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJKLSVXY[]`cegijmqsvx|~||ywsonkjjgecba`_^^\YXVTRRPNMLMONONONNNNNNPQQSTTTTWY[]`bdfhlnqtvy{||~zsqomledb`^]\[ZYYWVUUTTSTSSSRSRMMIIIIIJJIIKLIJMJKNKKIJIIIIJMOQNQORVTRPNLKINRUUZY^^ccdhhlmmnmmqqqqqv|}|zwtroljgedbedb_]\ZYWVVTRQPPOONMNMLKKJMMLMOOPPSTUVVXXY\]^^adgklnqsuwxx{~}{yxxvurpmlljihfcdb`__^\\ZZ[[\]]\Z[Z[\[\^^^`aabcbdddffhhhhijklmprruvy|}zzzytttniicdddedee`abbc`[[XY[\XZ[YUQSPRUWZ[Y\^\Z]YVTQURPTSRPORUSRQOMMKJIIIIIIIIIIIKLMOPSSUVY[]`bhjkmovxz|~}{xutssqomkjhhfgeec`__``_^_^]^^__^`babdcdefefghjmlnoqrtuwyzy{|~}}{zywttsrqqooihihhhghhggggfefghhhiklmnnjjklnnpmlidda^_\\^_]Y[XZ\Y[Y[^[XURUX[Y\ZXW[YXVTXX\[_chllkjonrw|}zxuspnqoromjmponmkkkjhihhhljiggffjigfefedccbbba```aaccffghiklnprqsuuvxyz}~}{{xutuuttqpnmkjhfffgeffedbdbbcddcbceddeefhiiijikmnmpstvyzz{}~~z{}~{vpjd_YXWQQLIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJIJKJONSTX^ddfglklklllllmmsssstttuvyyyz{}~~|yxwuutusrrqqrqqqpppoonmnmmonpnmmnlmllmmonoopooopprrsuvyz|}~~~~~}}|{{zzywwvtopopopojijjjkghhhijlmieghijlmoooprspqrtvxuvrsokhikgikkikmjlhegjkifhegefdgjgeheca`dbeilkilljnrusvuyxxw{z}}{~}~~~~~~~}~~}{~}}}|{zyxwxwuvvuttuuttsssuutuuvwxwwwxxzz{}|~~}|}}}}~}~~~~~~}~~{{wwwxyzyxwxxxxyyz{}y{{}y{{{}~|~}~}z{|yzvvsstusproqnolnolnoprtvwyvtuxururomjlnqnmljmonqsqorqpnmpsvvttvz}|~}|{ywutrqqpoomkiiggeeeihfjjmmmqppoonnnnmlmmnoopoprrsstyyz{}~~}||{}|}|z|}~~~~{zz{|{{{zzz{z{||||||yyz{|{}yz{|}~}~{}|}~~~}y{wxyzzxuropmnnkigdefcdab`]_acbdfda_bdb`_^`_begfdggfhknmkjnqqpoomlooompqtwvyxywwvvvzyyyyy|{zyy||}|}}|}}||}|||}}}}}~}}~~~{{z{{{zz{{{xxxwwwvwvvvvvwxyyvwwxyzwuuvxxwusstrromnomnoprrtqnligdfgecdb`acacededbdcfdcdfehfedcbdgffeehkkjmpssvz}||~}~~~~~~~}}||}|{{zzzzzz{{zzyzyyyxxxwwwxwwxzzyyzyzyy{{||||~~~~~}}}yxwwvvuuuuuututtsppppqqqnoooopqrrssstttsuuvwxvvwxywxxxxxzzxxzwurprpqoppnljkhijklkljihfegececeddfhjijlnpoqsuxvvxwyx{zy{{z|~~~}~~||{{zyyxwvwvuvvvxwwwwyyxxwwwxxwxyzz}~~}~~~~~~}}}~}}}~~~~||{{|yyvvvvtturopnljjhhhifdb`]\ZZZZZZZZZZZZZZZ[]_^]\_^]\[[^]`beggggiknnmnnpppppsuuuuwxxyy{{{{{~~~~~~~}~}}}{zz{{{{{{yyvvssqromkkligeecbcdb`ab`_^]]]]]]]^^]]^_a``a`bddedffedddcbbcbbbacdffefeefeeeedeeghhhhhjknnopppssuuuuvvwxy||}~~}}}|{|{{{{zz{{z{{{{zzzzzzzzzzzyyyyyyyyzzzzzyyyyxyyyyyxxyyyyz{||}}}~}}}}~~~~~~}}~~|zzxvwwuttrqonnmkljigfdddcbaba```abdddcdcbdegihgggffegghhggffeedddccccccccccddddfgggijjjkkllmmnoorruvvwx{|~~~}|||||{{zzyyxxxxwwwvvuuututttttuuuuvvvvuuuuvuuvvvvwwxyxyxyz{{||}~}|zxxvuuutusrrqqrrqqpomnmklmmnmlllmmmlmlmnoponopoqponmopoonnmllkjjjihgghhhikjjjiihhiikkkkjjjjjjjjlmlmmmmmmnnnnooppqrrrrssttuuvwwwwwwxyzz{{|}}~~~~~~}}|||{{{{zz{zzzzzzzzzzzxwvvvvvvuuuuusrrrrppppqqqqqrrqqqrrsttttuuuuuvwwvuvwwxxyzzyz{zxyzywxywxxwxxwvvuvuutsrststutuuuuvuvwxyxyz{}|}|{}|}|{{|}~}~~~~~}}~~}}|{{{zzz{zzyyyyyzz|||{{{{zzz{{zzzzzzzzyzzzyyyyzzyzyyyyxxxxxxxxxxyyyzyyyz{{{{||}}}}~~~~~~}~~~~}~}~||}}}}}}|{{{{{{{|zz{z{{{|{||||}}|zz{{{{|zyxxwwvtsrpqqpppqpoppopnopooponnnmmlkkllmnopqrrsstuvwvwwxwwvvuutsssrqqrrqqqppoonnmmnoonnnnnnmonnnnnnnnnnnnnopppqqqqrrrsttuwwwxxyyzzzzz{|||}}}~~~}}}}||{{{{{{{{{{zyxxxwwuvvvvvvvvuuvvvvvvuuvvwvvvvwwwwxxyyyxwvvvutsrsstttssttuuuutststsrqrrsrqqqqpqpppppqqrrsrstuuvvwvwwvwwxwxxxxwxxxwxxxwwxxwwwvvwwwwwwwvvvvvvvvvvvvvwwwwxxyyyyyzzzzzz{{{{{|||}}}~~~~~~~~~~~~~~}}}{{{{{{zzyxxwwwvvuuuttssrrrrrqqpqpooppppppppqqpqpoppoooonmlmllllmmlmlllllllllllllllllllllllllllllllllmmnnoppqrrssstttttttttuuuuuuvvvvvvvvvwwwxyyy{{{|}}}}~~~~~~~}}|||||||||}||{{{{{|||||}}}||}}||{||}}}}~~~~~}}}}|{|{{zzyzzyyyyxyyyzzz{zz{z{z{zzyyzzz{{|||}|||}}||{{{{{{z{{{{z{zzzyyyyxyxxxxxwwwvvwxwwwwwwwwvvwvvvvwwvvvvvvvvwwwvvvwwwxxxxxxyyyyyyyyyzzzzzzz{zz{{{{{{||||||||}}}}}}~~~~~~~~~}}}|{{{{{zzzzzzzzzzzzzzzzzzzzzyyyzzyxxyxwwxxwwwvuutsttsrrsrqqppppppppppppppppppppppppqqqrrsrsstuuuuuuvvuuvvvvvvuuuuuuuuuuuuutttuuuuuuuuuuuuuuuuuuuuvvvuvvvwwwwwwxxxyyyyyyzzzz{{{{{|||||||||}}}}~~~~~~~~~~}}}}}}}||{{{{{{{{zzzzzyxxxxxxxxxwwwwvuuutsssrrqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrsttuuvvwxxxyyyzzzz{{{|||}}}}~~~~~~~}||||{{zzzzyyxwwwvvvuuuuuuutttttssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssstttttuuuvvvwwwwwxxxxxxxyyyyyyzzzzz{{{{{{{||||}}}~~~~~~~~~~~~~}}}}}}}}}}||||||{{{{{{{{zzzzzz{{zzzzzzzzzyyyyyxxxyyxxxxwwwwwwvvvwwvvvvvvvvvvvwvwwwwwwwwxwwwwwwwwwwwvwwwwwxxxxyxxxxxxxxxyyyyxxxxxxxxxxxxxxyyyyxxyyyyyyyyyyyzzz{{{{{{{{|||||||||||||||}}}}}}}}~~~~~~~~~~~~~~}}}}}||||||{{{{{{{zzzzyyyyyyyyyyyxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{||||}}}~~~~~~~~~~~}}}}}}}||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~overgod-1.0/wavs/bump2.wav0000644000175000001440000000456407737515026014600 0ustar michiusersRIFFl WAVEfmt DDdataH ~~~~~~~}}||||}}}}~~~~~~~}}}}}~~}~~}|}}|~}{yxvywusrrqqqrrqpoomlmnnmmopqqssuvuwxz{~~}||zwwuusrommnnnmnonnnpopoooopqqsttuvxy{|~yyxxvuoiihc^]^XYTUQMNOJKIIIJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJKLSVXY[]`cegijmqsvx|~||ywsonkjjgecba`_^^\YXVTRRPNMLMONONONNNNNNPQQSTTTTWY[]`bdfhlnqtvy{||~zsqomledb`^]\[ZYYWVUUTTSTSSSRSRMMIIIIIJJIIKLIJMJKNKKIJIIIIJMOQNQORVTRPNLKINRUUZY^^ccdhhlmmnmmqqqqqv|}|zwtroljgedbedb_]\ZYWVVTRQPPOONMNMLKKJMMLMOOPPSTUVVXXY\]^^adgklnqsuwxx{~}{yxxvurpmlljihfcdb`__^\\ZZ[[\]]\Z[Z[\[\^^^`aabcbdddffhhhhijklmprruvy|}zzzytttniicdddedee`abbc`[[XY[\XZ[YUQSPRUWZ[Y\^\Z]YVTQURPTSRPORUSRQOMMKJIIIIIIIIIIIKLMOPSSUVY[]`bhjkmovxz|~~|yvuttrpnlkiighffda``aa````_``aa`bdcdfefghghijlonpqrsuvxz{z|}~~|{{yvvvuttrrmmmmmmlmmllllkjklmmmnopqrroopprrtqqnjjhffddfgebdacdbdbdfdb_]_bdcedbadcba_bbeehknqqqptsvz~~|{yxvtvuwutrtvuttrrrrqqqqqsrqpppprrppopoonnmmmmlllmmnnppqqrstuwxwxzzz||}~~|{z{{zzyxwwvvuttttstttsrsrrssssrstsstttuvvvvvwxxxy{{|}~~~~~}{yvurrrppnmmmmmnnnnnnnnnnnnnnnnnnnoooooooooopopppqqsstvxxyyzzzzz{{{{{{}}}}}}}}~~~~~~~~~~~~~~~~}}~}}~~~~}}~}~}}~~~~~~~~~~~~overgod-1.0/wavs/burst.wav0000644000175000001440000006536410263020540014673 0ustar michiusersRIFFjWAVEfmt DXdataj'1<GMH?@HLR`Z50yn8y(P4k!p% D)K&b{su"% N]P 4 LG /_@91^zrw,4l2[7!7` 9 B GH1 j e9+3   i E V a h ` <t / S m2 jdw i vPZ >i F |fc]k6F| ' %tW jG!kC#yGRYu Xh|"gV<=_I+o9ioG#5;1@ߐߧۘ!1Hߎݟd&f}vV*\=H[B#6l;m LNc" OF#G \_8U  u-E `sh$15uMb < * FK8i  q ]al 0 _)*2gCl * խYБ! .Τƹ<  0BҒ 5+Z*S"OnyG7&d̤.^k`Bn)/|'=q%p/49z=!;0~+:nJAF:>-P`bTABW_M:>KzRUm_ny{kO:H:1NNil5N9QQopezi[v,vfYYZhyvs^NP UJ4:01?SnfvM}SyodcYOSLC92,U*_(+4CPFJk3u $9~@!|>RUSKCLaM;%[& AVbVI2 c '}^#+ C))'/<)!!&C$WFUN" &'3=? 7tC!35"N) 3 <- OYha(j,RcyܮWΩ7^ ֕W?^l'!JO XTӿoo)߶ۺ颟-j#ڌpӜTYBپwąYÃZOя͉lGI.u{R˕'WZzU׾h܀OVK r ﯻ%̳f]CNw̗) 7]=ۂa$!>i#1@J=PJ=*1B4I~JoL|P(ODM51&P twjd[NaSiudI)9<1\vhJ8r?[p^8R6xZYp_Of`{}~~~?N5a0qvhWI<6$q1k˶ijQl̀.< {8uH3ɚ_ۘ֊ZQԤ$]ԅč+މG Q ,;s?/?ma,@;oQgkz~~~n~yb^Uce'u?hRaW]o}#waH8;_Z=yCs{spv}Koely#x|fI0u3Nguz|d~}wrv#~[~jL. AbujwbD" =%EmZYwEN%OA-H?-! 5H1QAF\)j %3p8NǢ;O#澇C˫I͵UG-d!07! ρ3^:xMM`sxN0P޹`4- sԶ4y!Y.k x(';ڝU§qX?$ڙDC;)ָ0% ӒɥϾ"k!)";3u)^$[wwF{ !_@;LUn9Ro/}9RP?,ԭf+ /!PcfH =d%X#[\+GA1%as ePXT2@YA6  g l !> Rk&ö΁XAٟx?8tʉCǾ݌ƫ ĵ/6Möt#Аª/RӖ6m[E p ׈z `j y^‚́4-h๐@wo_3#Vn 8Sgqk#ja$O@8P+L=aj&M6GeiazepF)4Cm~7~X}L{*{}{t'lgmxI^~}yj/[ocJv~~|vs zOw:UQ>TpGkX^[n$r`SW[N9y-j/eGn_fCeb!dny}~x\E-:-JYbs~~~r([DD:BD`{/},oS>ERZmn9zystKz!wg^j|^JZpgIHp10AQL0.6_Sd.T8]  sO,ҷ"t4-*;Z.[om4 uųc؎Ѣbw݂KoH?Dž⌉܀րƀ4be9п@5FbY0ǁdޠ9̔򗄌ZkŀTw;┡$(3N\ǽθ ,Ĩpy֩kƽύڅۨt+P} :ҙҦ /L,⯮7ib1s'x̺ ᆲ֨/hªڛ&('bL/AލoJ5򥶯"r^Y2Mdؼ{щfؐ~\1E. YLLG@8QB>=*(F (b 2Mڮ."J!kbXM5\(4RbsL)-"%D-PC4JF+YX>$66{'v^!DKt%*$<9u 7dujF*%,-Q N;*2HF)t%@Y`JL0S!592*/)7<Je\zvvn[r}I~ e.Cc-+ BNeo{t JT'37KTROLA*:;Ak !\ I]SxY2Z{{ _Պŀ}޸uˡ\ëwx(ōB钋=Ǘ5i>Z5q3R#0ǎN򖙘Y]הfQyeɡzĘs\n˰ːӾ?XD%W g1nW˃< ;7T7,?B.r8/**@PW^`YNLqUE`fgNgMdQ`]]RagfjkkhcJ]7[cmqqmVid%`^badh}lqqDeuZ ^]h0t{z:w_tbsvU{z ur u5oB_TPLY6p}`|tcpJraxO|#xoiOgd"[F40:xHuT_W*U{Z5eeS>1U*4Y "&*" NE7 v , I!) L%%[0vގ\҄=3ޖDo͌05.ń 2OʐJ; ㈗UnGs%ΐKM>WŁɯ'bu5l⣭]Xҭ߲5P?ڜZG*%lԽfkXwY)x  m!#+4i6-4',|1]%4!I6c^ [L ^"F+ I+|/')r:N Cf۩pޱ5o}%[^2`KaEvrG˵:yoGޤնԐG0X ӃhC_ΠQi̼ۙϗ*Ȼʶ7Z3 9 ̣Sq;hbJZ#l `}B":(.0\,>R);=Hl֙򨉘C򊎇.ʷ$eOGK ؐ3߈"SʦHaKwIhuD٤̳gS£͝vƢ v/Coئ bW= 2 1!NPi)6 I#A LH# Y&6'p8%^GO8 :#k&b4=#CoC@2K/m=JUcf?kErNp\$L{]xpc guzVqJrbzv\rGuY1wmlZMB51?]lZCp9b74/+(<"#(0."/s 9e!Q b ;M d$&{o; :y Fj:Wu -;7p  S}۴ +.a%u   ܖ޽'#*QP;-c]pā'lE YE!ׇ} l+!84_}<h)4#  : <aJ'50l,̛o{S&_ۺHyh{G'  M| (P-4M"(,Q#&M@BHg?0f'*U4g4 *@)>TT KG>2#"?^psusgZOrC[tkTMV i-x{thMZTTz`sr]}R|ZiXUQDBLF[4`!#/4x7j+"&w.0*G pJ,(#a0$,5I :o#MM4st$M] EҾ| IR9q FAjF/ڶ) `aF[DXC"'E#~!n ~#?A6Ā3ӌQ ʑLl厲3܀ 5PU8jH1௴dDeFoigѺ <$ eۿ x < cR qu/5#YAS'A1jU5/ !9= .983k357773_+-@+ZlMl\N%*;VqoLv&,(kG_cXB/!(31JRn+f Q FHIVub*fxfjpo^bTNLvMM1LtH?!6<0,' Xf+; H^F&1:QTOME8_'.U0 6/'!>y;  P  ! k  [NKߔ aFġ Egk%\Gߵnͷ ɪ馄ɲ6ƴ#Ø#Ϣb8;r.!qڋ!r Q˰mI/ܛue&ί;ԋV¥u<جX$crT%C vs~C8 ; C/Z gB:*;A^:&E_U%2^HSB, (J*F< 3'I;/ r u sIa'28,:b)c5\~8 /GnHKTt y c5mܬW'o[0Wh;]Ȃ+ۉGdy@Å9ZE85u+/*! [ANE!^FM^S #1" r)I*7J u!;RQ(;pObޓѕͩ_Q'!.d,wO׺T7=p'+4 yloבaqh֌ܞ3 -"6 %+!(#8\<(c-6/ )_<3L $f-DTYQKIM!OF:0G*)*2+)&Y$r(3S>BA>=rBH5LJA6.R& ;/jU @ | zlߒϬf݊ӵ?ͨ.zɗ҉N æѲ}ls}/ʘӰ Dǭڜ`ux[ޏc]fwI u!Π\ˡл.DP!O.KCػ_(Xm\ϵ- %8 `Ar|$qQkVPR_M4(ɊL`*Jh!!sC( YFSP :/ / B @;<:6;BI9OHWI}]gI+T8UXA/;,30=RLeyxiR}A>N<2*98ThiZFD Xgc2^af2aUKAW;^]WSUBT!E/.K_G$>8<MMU)U/!xcݏT]gkU7ѴG:Ȧį-ۂ ׹Է4k>'@ռAo:"*hce rNͯ 3܀7PeOŘδ%&Rڛ7ƈUpՉؑ>ZՎ\A-'):(V"! BN %9P;.Wh  o8 n $+i }l5R9%9d - q+`cӋٞR}1պT;Kڈل׈٢("&~Lۄ cYPdy [%I>l_yL!) kjjS'# { ob O. q xZ@ W  9"/a32-A}Qp S$5E@ $-,1#f 2[!i{ _z:wwA# XN{$ "T3 #-&|$$"C% "?#){ b%X(H1 9k"S 4)Tm (;v_z,Wڕ՟ƒ5ן֏]Ê,ˁ>005S00ދϓY7rЧAѵʽʼ|IJB6-ϷlDqњ"հiʗOS{o iVЂvLЮxQEةލQMU= 2?j*Xa"[0" zP'g~r% [!M $ ""8&}%$'('o(.5=D8EABJMPLsFA@DFJ%MNIP?4C0 5>ADCD2J\MKIOWbULB=DRU J;S4e5?fHK1MMKB6a-m)+h0X/:'#y+2/((/m:?3^#26 '17q94( "9',0z.& wo@> ri5[0C<[3` l\(G8DIc~E HMܷ(EۄF0߽kh ۆ8)=Κa^;lq&ъΖVFպCʡg W %5nʛIסB րҎa~_ŭEw*͇տ0)Юƹڳ3ձ|~/2^fZq>!9wdD\f!;  o` [\,wG $F um } 9 `\Kh C%KxD&*(!GY#.1"{\l*(GZ*\ #%'9-0D+@%%%> 7LG"#(I/ -'Xf x**>"pe - z$*)@?mF$&& ~b'$i&&t(()h!L% m"-'Saj / .-%1"o^{/:L <Hony (n* aVrQ -hc7XdݷHmf+9?~rAC4&]R4XߣLOxՃUp 9JAyԞ:8(g~a=ҼuyJZLet@~%@T~ۉ@vߋ!· Չ{r$ݫۜc* Zc"؆Zֶ˜~9mɹĈ`%ŤQܷޱݙ-zBۖ٠%T?aEPKzRe]Q 0 2  O!"o"#U&*0H7:l3*M'&$V%'67'A0'/.+e(E&&1(,27960+)0'0##+7?9-#5#,341+*$07n72+:(2,/)Z&S+' W'&)#r#(e&" LR%*)*%M C%&''%~Ky 2  -42* 3bPD A4]|Zٕ MOrѰې= ݚӮѥԠ5΢gG^ׁEՙ߉<˂Ϟy̧e ٕsE߾ojC3Y܀b*? (13! 38 T ? &[#&($*6 868:n98>.GEL9114G:l>AFpG?59jF_SZWND.=M75r9%DMQTZ_[qS NKwG@_:9:952c5@ISB4P-,03336:7*7!'b08t>\A=?853+@ d !N"_ r%}lloVl[?.б׾ QfJhҟ $=?גHuXЉi׷^yݴ%]|gz߁+6Mm%Vr9ZJBKJW T 7AcX '  #4 sq 5J r ! U b E<FV{x+_R8m(Fbin {vZS"޼~ M/@ӊٛ"T׈پ(1.ȡw0i /*`ӛԟ\o;ύǦ#ƴӝݵzY9:,o`iK 2#= Ev o#$( m x s \wNsw'@N%#q, 'y!a,-%sn^0|%*/g30R(Oy$%"!&.H43&e=kgs||["%$^! %p%Y!7 h t!. IP+ l ~FR##{!Lm /f ]x r ZO" L'  + Rf 4k  G\ a { 0 EE +o :5 6#L~e-Gv  ,u!F/[z'!87WM2ܤۆ4Gљ#8\8ڕۮ~hVa=˦Rjژe҃j,:=iݠQXҙϞ->W͉'߅ ɚoƋjަk> 4 =IЪ:Օ#Eە ݱPߨ۟.գR9 ~$ٿ#dCPQ/@q5H=YsJ*u _} Sy?g RH Hx Yo # I y $"t&'&($,12/)O"|#((**)""*1434/,,0684r00C23}1 +'.C8:633562,,L4H93,-17F<?>80/6.O  'W k  ) t B =5K0G R . O!$#g$PYS"%!$h$~TuMW$$!*# 4% (&{']A\}e&)&g"!e2f O l V!h8 |= *kC X u N $^zkh? H  ZD858 |KVk 7% -CA'8:Y  J wTY|({F { 7ozDU(A aI;AaV%ubRJ =UI19Zzba?Csg%Fa ;qW45 y/s7 ]e k0 7 Z \| x: wdMeu_mF%L r iIO&7( 8Gi_qf4C| CSQ@;2ac =gU3: `7nqh-! :H/kA@{g(;b @v? J - < m  Jdo n );1WCAW>0@  8| 4zm  X $ e x } 6 R  jwc3#IV3HFd9 PE}j)\>txo76> g6~  K ^ &kFnF_/ ( ]g<69m T ?L^EfQ 4 bl `B.pIC@ot3d _ G-Q>96 |z*h,<O1}<;gD+WuDk{%65bm{2uETm 4A3 ZJ?M`*!GM%8 WL Y }biid:#DC%ba<D ] X \ mli$gh+O/qen V Z(9 ^q~   K H TV $Ngi 2  =MDsxy(d;a= `RveQ.&ZPY@PMa\'!:PZov>a,I-.N<&3K `QpM]Z_f)[dBb Tt=u{f+x@gpMQ+@V]&x!2 2 r| /   ']dWS6i{SK>hLvN!E2'q=q Kw A-|az`@flx+aF~TH6]7z3F-F#<*=ji?.-!o1cQ K 1 x$G [;/7<5>+Ek+6R=1A_RHM-j)}t6C7_(Rh8)21#uvF9cBr$ZzRxQ + v  y  \ ! s N   %J T v c  < U}q l } zs3fAl :X7i G'eg,7wx r 9|Zm _' 6e"- T apK;^Lm`OcsuD6G?PB7*`h=7C3k+ 2 H  d i V w:Q3SP_~x-@;t9EVh8)H0j$V@LZ~=C4(s!)?wBq: h7j#Mcng[5 "$oA~j,d7@/M5w&Z 3w{F?A'c A>(7i} E_yD(;Hu'XO8U]*Jk }$~1A*Q'2vyR9 ] ?4i w?s%c)CM_B I^nqW9"T+<\1(`TCDCH6i<:X>E=l_}}$B(kF`]{<y)xu4v;8c); 0$%Dte&0~1&.z/z^5m (Bc@K2e V+RoB=Rm{.nvTP[B L|BVA)OWtcg GGrb* q7Vj#ktR/ot|T5zI9rI^Y v#W c(+Ga+"If3C}]qdS.;[j8~HYc}a-& ,9i; ^E/Z,:y~K3]%o8^ *p0 F @ q  ' 3?kyyhAA k Y ? 9 H q z Y e Y ? 3 7 $ 8 p u   : 2i q a . A Lf g  $ 4  y w  2 ~.n)  =`g2hdu%R, ,A_dOC(,0KD(RyaA[6(k@97>DAn^%KF?n>C Y5ZSpU4xJPx:w"DR_:!NO\B'^++-%&78w5?)P|ze8x +2A\MD i M 5+ 4 r6]@  B p$o B ? q ~ - Y >e I  * I/  uzBXzF='hGg<=`7F-s7I)-!Cqh0%h HkU uT2)TCAuA+m'0mGj/0]B9V^f)s(+>(Gy%(Lv~d2>`S`J*0O9G|{?hTA^S!qve;0t'2dask[[<)Ac=@T ^ T$=Si-2a*zrP':Ukq}N!+ }UCR`5e:aK2Yw4 = a ? H s d? J =gP0 ` C [u Kx x ] bs@g2,hoC\V0 qxzD+VRsGDJElh- '6&_Q|kBbL<5:xHDQm}/*\@[&f W]@Fv aAO}u iMS]B$~!^{4Q=_ 0*^Alo3EFVg+wJ7WZWmEU+1LlB~_=@jIAst`Xcn`QfY Spi[jqF2ER VwHWtsU3,WiR%Tz<)?ph}{|{y~fB04K^_N/'FUTOG7!*-+$ #!"                      overgod-1.0/wavs/bursts.wav0000644000175000001440000003425610263431026015057 0ustar michiusersRIFF8WAVEfmt DXdata8.dE*9n9 N 6W> J+   :"/a32-A}Qp R#5E@ %-+1# h 2\!hz `z:vvB# XN}$#*z b$V(H2 9k"S 6*Sm ';v_z-UڕՠǑ6ן֏^Ë,˂=114T.1ދϒY8rШBѷʽʼ|ijA6-ηlCrћ"ղhʘOS|p hUЄvLЭwPFاލQMT< 2?k*Xa!Z0" zP&g}r&  ~[!N $""7&~%$'('o(.5=D8EABJMPLrFA@DFJ%MNIQ?4C0 5>ADCD2J\MKIOWdULB=DRU J;R4f5?fHK2MMKB6b-m)+h0W/:'#y+2/((/l:?3]#35 '17r94( "9',0z.& w n??  ri6[/C=\4` k[*F8FIc~D!ILܷ~(DۄF/߾kh ۆ8(=Λb];ls%ъΖXFչCʡh X!$4nʜIסC ւ󴊿Ҏa_ŬEx+͆1)Юƹڴ4ղ{/0^f[p? :wcD]f":  p_ [[-wG $E tl } 9 _]Jh B&JxC&*(!GY#.1"z\l*(H~\*\ #%'8-0D+?%%%? 7KH"#(I/ -'Ye x**>"pf , {$*)??nD$&& |d&$h&&t(()h!L% l"-'Rai / .-%1"o]|.:M >Hnnx )n* `WqP .gd7XcݹGme*:?}s@B5&\Q4WߣKPxՃTq 9JB{ԟ:7'h~b<ҼvyI\Jfs@~%AU|ۉ@wߊ!Ά Պ|s$ݬۜb* [b"؇[ַ˜9mɺća$ŤQܸޱݚ -{Cۖٞ'T?aEPLzRf^Q 0 2  O!"m"#U&*0I7:m3*M'&$V%'67'?/'/.+e(F&&1(,27960+)2'.##+7?9-#6#,341+*#07o72+:(0,/)Z&R+' W'')#q#(d&" MQ%*)*%N D%&''%~Ly 2  -53* 2cPCB4\}[ٔ NOsѱۏ> ݛӭѥԡ5ΣfG^ׁF՚߈<ˁϟx̧e ٕsE߿njD4Y܁c,> (23! 48 S ? &Y#&($*6 868:n98>.GEL9124F:k>AFpG?59jF^SZWND-=M75r9%DMQTZ_[qSNKvG@^:9:952b5@ITB4P-,03336:7*6!'c08s>\A=>853+@ c !N"^ s$}kloWm[?-в׾!PhJgҠ %VΈ'߆ ɚn ƌkަj܀? 4 =JЪ:Ք#Eۖ ݱQߨ۞.գQ9 ##eDOQ0Ap5H>WsJ)t ^~ Ry?h TH Hx Yp # J y %"t&'%(%,12/)P"{#'(*()""*1435/,,0684q00A23}1+'.C8:633562,,K4G93,-17E<?>80/6/ H  ZD8fksz]Y<H DDg }&%B Bg?58  {KVk 6$ -AA'9:X  J xTY}'{E } 7nyEU'B  bI:BbU%tbRK =TJ1 8[yabACsf$F~a;d{[EX3A_1 q[ %S> I ]UQHA#8v p2A = <qV57 y/s7 ^e l0 6 Z ]{ w: veMes_lF$L r iHQ%6( 8Hj^qg4C} CSQA;1cd =gU39 b8oqh.! :I0k@@{h'<c Bw> H , = m  Kcn n ';1XCAW=1@  9~ 4zm  X $ d x } 5 Q  jvb3$GW2HFe8 PE}k)]>txp75? g7}  K ^ 'kFmF`. * \f<69l T @M]EeR4 ck!`B.pJC@os4d"] F,P@96|y*g,;O 1|<;hD+VuEk{&75anz1tETl 4A5 ZI@L_)"GL&7 WL Z }ajid:"CC$b`<C ] Y [ lmh%gh*P/qem V Z'; ]r~   L G TU %Ngh 2  >LBsxx(e;`> `SudR.&ZPX@OL`\( :O[ou> ~b-I,/O;%4K  ^QoN^[^f(\eBa TtiKvM"E1'r=s Kw @-{az`@flw+aFSI6]7|3F.D#;(=ji@--"~p0cP L 2 x#G \;/7<5=)Dj,5R<2?`RFM,j)}t4B6_(Sg8)22$uvF:cAt$[ySwQ + v  ! x  [ ! q O   $J T w d  = T~p k ~ {t2eAl ;X8i G'dh,7wx r 9{Zm ^' 6d!, U aoK;]KnaPcsvE7F?OD6+ai?5D3j+ 1 I  d j T w:R3RN_~x.@;t9EWi9)G1k$W@MY~3j w?r&b(CN_A H_npW9"U*=\2*_TCDD G6i=:X?D=k_ ~}$A(mE`^z;z'yv4w:8d); 1$%Cue'1~2$.{/x^5o 'Cd?K2d W*SnC 9 H q y W f Y ? 4 7 # 7 q v  8 3i q _ - A Me g  # 3  x w  2 /n)  =_g2heu%Q, +@`cOC(./JD)Ryb@Z7(k@:6>D@p]%JG@n>C Z5ZTpU4yJOx:v"DS_;!NO\B(^*-,$&88x3@)P}yd9x *3@]MC i M 7+ 3 r6]@  @ p%o C ? p  , Z ?d H  * G0  v{BZxD= &hFg;>_7E-s6I*- Cqh/~$i IkT vS2)TCBuB)m&0oFk.0_A9U^g*r*+>'Gy%'Lve1?_S`I,0N9F{{?iSA_S"pvd90t&3d`tkZZ<)Ac>@T ` T$>Si-2a*zr P&:T kq|N!, ~TDR`4e9aL2Xx4 ? b ? G s e@ K ?gP0 ` C [u Jw x ] asAg2-gnC]V/ px{C+VQqFDHEki- (5&^Q{jBaM<3;wICQm~/*Z@Z'f W]AGu"a@M~t hLU^A$"^z2R=`0)_B lp3FFVg+vK6W[VnFU*0MlB~^>?jHBst_Yco_PhX TpiZjrF1DS   UxGVusT3+WhR%T{<)@ph}{{z{}dC03L]_N1'GTTPH6!*-+%$! !      overgod-1.0/wavs/burstz.wav0000644000175000001440000004203010305640624015056 0ustar michiusersRIFFDWAVEfmt DXdataCV*W,]1 HvjAh;j8 f@yP'`7f?}F`-h7 |_5@ngK1k:`%oEzN(h4rH lJ-Mo?hu1\Wed<]hޓjUG3 !!"ܠܛܚܘܔ#$o$$$ۅ>ڽڝژژړqڮ7r-9FB8"׫׀Z>$)Di׌׫׿׆8֗֎֨ ֡vaZd֊(!)r)׺ׯאb.((((8)2;=3חJ֮y֍֯}*կաէռ'(Y((()R)~))s)K)*))]))*{*** +-+4+/++** *)%) K)))*)U)(yֈִw9O֑L׌ױ׵A׺#֖F Esզ ;ahGՇ8ԝ&W&3&&&%%%%%%%%&QԎ&%3%%%&'^(pLՎ9Ժ 1P?-՟Y׷MרԸ&&&%'p''(('ePӃӊӧӌA~*0ҡ9ӘF'n((] N֫+עNp֍,P{x\>* Pg8-jث)m))):**P++V,,,,,p,G,,+++y+[+=+4-1;FH<+*6*)a)nצ@~+*8*}\ד q*t)K) t<< ,:Ml֟^תTנ'9'G''(_W{m**C)p(.o(AD4ճզջ.0Օ0ը gӽ1ҽf?Ѻ\% &&&%%%&V&&'()<**!tY_Aؽ׌kXUaokI?֐ԖԷO''W'Ո?Ӊ#B###B###>$$$$\$ $#-$8%&'\)(**+1+*(*)')i)ׅ>+*)$&%|%[&o'())|)()((((J)ّW)(=(lnܡ=Q؞G)2*++ۮC*2*)Zسׄ/%%:ֳz رLשׄob_]WTU'['`'i'g'`'U'L'R'q'''?(()c))(0(P'e&%A%$0$#"^""b"#$&'(()('&_%4$##$$_%n&'(b))<*|*w*5*)])Si0uR؂A~֬ոԐԭo.؎\)کkN_؍D{ٺ'<'ڗٽ)65~ڙ+@,,.--Xޯ..W.-\ބ  1Os/F-cf[ߺJRgd+ (Qn0[0/.t-BܠW٦@(%%&s('*+,--}--,+u*(q'&$$1$.%+&&R& $!Kk"|%()3*f*k**+t,-U....,0)&&` ^&%H$r" # +د$1%%T%$$4#7"? ""%')W**++~u11/G4|֗XӥX\"K!$5&-''''&&8%H$##""!#M$%'D(k(+({'f&רմ "B$&)m+,,q+:؝! z!"4$$d%r%%#!. h]Tj'$j2υyA!qD̢rϯ֣x*ԋ+֟U#ٺLjs߲(7قطبٻ۪#&ݪuO>nӐl'2hظ؂=t###$% '((^'D%" F !!e"`eדz#`%')g+0+o*S)݇5'SF݈)4+9-t/1YlڧvZܐb`Udߗ`Eޗ݌Wܰ>{077qژۀۜ۩֑Ԍ $y_3˄\!N#1#!,ҽ.t G"#'%i%%$9$$6&')**u*7*P*+-U.Q/o-s Nq+-($ۣHV"$&)*)Y&h# X!w#6& ))-)'%$L$$d%&(*,-)- ,*('&%?%!%4%M%d%%R:(*,-@,r(݈M #$E%$$<"C v }#&')&$" !.ڒڧڈ$n֙ԷҜGD-nX.B'Xzڍ+!ݒ݆ݖj-T(4*4+>*(F+ި$%9')*#,+*B*J %Uߙ; _ь~5٠PTP%6$"M! "J%':*9*)('.()+-G////.-l,f+*+,-.a/'Rۭm:ثN,|?}%пӋ3%>bUfظoĴώ\)gҐ8  YI'c'BP b՝Oi-3̕ AGiB1$b&O(n+.*2/55&54&,**3**+-P02S5(0-C+W)('pq1H o;-@ݷى׈ڧ3t3  \[;g$$k%%$_qLqL!8Ҫ=g->#ͰFgϠrcƒb ŽWNPQTSUXW[~`ˌjŽ͑ѶBc. ֈԂbЊΎπ+]9 '$ ##o|\%Fb%!k$F'(*h5,X"+]6xYق,ܨJ٠ةڢ eg xt΃Ӄ *=k(&J'۲ݍO%Fn.47L75o31pl?@?<=?e h֬_ӏiFܫݛ^,"'+)&5#Hs $"#$$# ~"'({('%~#F"!!")$%'M*-/2416`77(7r5831.+)r&$%')+,0S >SBX!^=Fj9E74#1,($ h/ /0-(#z~f@G^ P%ޏټ&s- W9+g/*1k0.*&U(01222j0l.S,W؀v"҅8a D?D>C \wwgZ /.?\"&*-...W..-<-n,*,(K%"5TX GFp=o@ $ N[׈Ց;  ԃsk͏)[Oݴߜ  t  U@%%# 89U"&(*+@,+O*d(&K#< %ER2#&(3*(%"PYX:%L$" "$!%7%.%E%C&'m((8%.!ؗն #77Ox D sl6vo`_ nb oT&?A]'Y޴0\h<O*v#V * < ջ)ݶs^f=Ґտٽ tlg1wL޼?؋x>I΍'ߜԕ[c#`:t Ekeh  bXS o DlZ_r7)oP6 , X n8W *^-KB)    #&()*j+d)`% CL[} !'Y.G12p1poQXz#8ZnZ4GAQ }MOA01{2p0:+z%- #!D& ,$11t/,*(((+))(''C()p+,u*f*,-.-+(%n"Wq-7d;"Q!l]65Mp%% &&&'i((('y$(ze'FyS^ k  %&bz#1Fos :<N TzSf [$'Rk4 2n:щ@efֶچjٰקm Әl l 7 = 0Uc\7nش|1' !2 6AAH t v  \  Wnyt x,t- K r$c @.%!k ir#0*:Z /~ "##T"G >OsSRܓ_ d_ zkYH@J qb|LCO0xF].j?(E#r&[) ! u p $ g$?$x$&(+P./01112/,)%q![* $`)?+S,,K,;*'$o! ~_Tw_*avyA^ 6_ !! WR<=l$lw;G8`*|fQsor7!4c(vC%irbڰ0Դ2̥BϊgԷ7ۗޔB>>t2Ϝ:ԛ!o\ٴ-: } f+^J#Sl@(/r,  6e6nK)kRN( !j!t5Lm <0ij2M 4d Q2, "[ 2 [>E4ںb^MH,/P~ G8s'i? "~1& &]*)L'$p"#N&),---+7)O&)# @1g h'g? !&y!$: w 5YLJ"dT9"G( w  ,vb{y J8Y D' agxt 6 *)\)(''%# BtNQ~ 2;gH T  C h5x0?*  : r |~o jJW8BՖq֭ٔ8W{( &-՟MW((+>0  .-  n3;  =2$0Dy *eVJ feh/#{B xT7u|$k-.t*KDhN^9 jA'o G(H , wp L93:'ORgCdo$.uѺ5Hh   9 LSQ !o ?6#7iU6= !! Y!~"!i 'o#8-= ID j, /!S$a%N%#!o` /AmnP=  Yg-&*,Qc eyM4j6 <@i&]n%bEk*6kV AzYb\/B#Vj! _4E.,,QN|_s!n݉ݳsD@vuuֹ;!gk4-ٮؤؾU0֯6ݯ+'  ikGOu  O2 G vTQ_( 8fl " C pP~nk 7*F8W :'t5  -|{   [ P18#} B P P ~ Ln"%v(*q+[* |1`S);= G cL$Y%0$F"E  2_kv2.{"~$pY%Ib - +?)o6: #A Bj^1P6- ejoD I4o. 8 ` e :T- Qm [Z  Wt d\1!>>u&F(t'5 NY WPz"I( 17xX Y T? L W QU  $ I;_e5 1/   X &7$O4EwH6$Ӟ#3شr^T$@zb~#(fZvq>@ ]OjM6 $~A5Fu] o/IW Y  q2 9 5HKf"f=  BV_p!FW )FNq C @ lrSK9   uTlPEza{11PHHU:$B8*Ni?Y{[]SS$ $ 5  r  K-q95%I&A J  ;ca= I % s t}97POPS `Ab/6ZJ M]~bg)A + uoN.e)E8? s v k8$N  W q  B$j@p*3Y] +X $ ` hr  C  1 0 4  1 c{N!  ! NhKUFph33q;))Owed;#+1VZRg Zc4|& %nm.i$y$M p|QX| ~F2 G , =#G9 K l n v;=Da$x *X`kry<BDD3*+*5ns}Lu7)9Y6"xN ``u)] `< ,2%i')I /!xjPE%%'l / |[,xcY}Mt   M!8 }OudOg3|zrbq${{|t -Rp\&p "i\?hI&sv2/GEA OW-J'k] > 2 VQ 9C *QA""<( Qst=&[3XH=2E]`mY#gkqlmj $ O S Y OzR_dz@VwX?a'6UUbm\|^Q,~$Ax;~   RTa iO 3 r ^\xC<{CK}oqc |,rXkV<**y  &LvF%y~N|4);Pq^)Gzo"29&&^v/K!>NIu"%H%6[jJ#jWej+?f@ef5D6 |S[h izuj_Uk{t~ ^x,.* hVQG<R61 #`7qyEeV>j?]`}f2>z S4:<{(1} W<3B *  5;U\:~ /68+MW;!cL.V e^8Ls)h%J/.Ws:eh,^uo8LZP](/n~+bQ4 _k,E.ucdWR=E._**v6hVY`WB% ,gs1|9-5?RM75DG]qk=' JEt@SQmk" Vh/.8R?@}~t,?{ZtjCn3&ruaxR+RBb1A w1AUh5e.Tz L+*r8jj +EXSLA61,* s^MB<6.~dL?8<EG?JW .B. oG:=BUhwo_J3>c  overgod-1.0/wavs/burstzl.wav0000644000175000001440000006365610305641064015252 0ustar michiusersRIFFgWAVEfmt DXdatago?L\+m< ~M d4sB@r,f3sG e6 a;Z#p (Ju;<&QByPX<aw33e'_F$Fc)l+|] V%$CmL*ߜs^XXUB޸ޏrW?ݡ݈ݗݰݒ!ݗYKٶ"&%vם%&&Z'((B))-*_*y*E*))R) )@))5***:*w)(A&&&'X(;'I٨+++t++**)l)1));){)):**+@+M+*)('''u()#)(s('a'!' '(''t(h)[*!+3++*+*)((B(()*+R,,,,,W,+y+*)((h'' (|Gtyz.ӪL ՛(S))~سX))U)*+K,|-/..-////O/.-$,*n)))*+9D+)(j'a)(:(b'&Ա׫*+X++ٲ+ +)*(i&$##"8"A"e"""J##O$$%"&&'6'&6&q%$#"Ή 2 Ͷ͗B̘̂Μn)κ̃I=ϖNӟҦ]~ёѴ/ѽН|я (՗Hv6К"f#G :2T'ҏVx̉pͧ?̱͒˅`gxɑ˨!#%D'՞[9Ճ)Kգh|ѳӀ|,w-t--,,b,V,G,",++R+W++,,.?0121/G-+J**n+,L./133#443c32W2@}ݢݕݞݻJ3ܨ6#J݆ܭ~ٿ2][t~QӴ԰Rnӂ${ԫAwՠӞ^ӑ ~NM>у#D$V%t&&&&3&%Y%%$)%%&&&(&%$#!  $LJ(͌͐mٽax2\"9٨A 'N?ף(&$"!""#$#"!{&3vǢ< o!%*,H.R//5.,*y);*+-d///-z+(%h#x!g!$M'*--v-,U++++,.0E231.+)D*-[15\630,)*,ݗ~QߢԂ҂ТѶn*קՊG& #55Oղ־) +C,2--+)&)$N" )~ ͎Ҍ֠9eWψ˨ʆ'o>җ-ۦ~u0݈ی~7'[Ւfٽ++P+&m$!6͞;!7%ײ#ރ @ةj!z1܁݀>٧(|&&6)ڈ]89:,<**# 6"C2+L}|9W*^{N`[RݡՆ.*+&+(1&HW?!qȠ;%r:1Ikäǀ̺Δe? ֙ F)0tnհ3ՅӈPu3w7:=>j>=K43281.8*,I0CDz6_6u=EZ'3 ZE]B5?<=T=>???=W<:E9h8)8;>!BzE:F?EFCl@'&x&'dމ:<>??=gz1[-)zЊфԃאUɿd3uէF\(B_C-C,Ai;2t)!$(+(#GRs "%&'b>ёΔ˧`?'>a6Z7Y89=BsGKJGB;K5.("`ML=zl#),-4.-+\)і" 1P #(WOފv7*7%, ʼndo;s;q94 ڧѿ<jTj#%%'U'Z&!o  ɶu'?*fR*}߽0RhͿ1F gCʐƞA (3  914wֳљeը*p;ߡ11a1T0Dؙѡ¿ZRȔDӗK|Й6"ҵ:nјeзѹ~UyN[ 1;zͰͿFЍ$,g.A1Pe}B:SG qׇ6ܗ\l0X~܂Ddm 5/J*՝QO)+W+v(:#<<7 #4 .|H ŤъDrP۵طQ5⺜qӽÉזj( '(0?G99_=Al/{{#P&2%:>Ԙq=~ *HgֳCU Z܏(+' \ܥ/1A4: */yCUۗܦtӎ͖Y;X*Txߧ вΛtϠ|JO| ogW 1+6;\7<0j'!6(2=7GNG=i2&Gѿ#&4)* +*+ Qڥ}ެGn%ݫh܂Q݋_7߃MsĠnΰIUb*~256y5k2A-J~ #)0v8??k=`o">*DJNP QPMgW%YuxtQ 6c] ү BǑn&=|8kX}3b=M؛>i|v)owaV ՘۠uճtozcE|Ϳ0T-Rţȡ2"ѫڡv|6Qή %x*0m6;=U8;."z YS sH#1=WS!!21112xs#4 55k_޹1,3zo$ոS_歹N XtVҘF*!t_CFD@;pZ [Ƶa!ҤЧK{Й|e^ע9/>Ž`PmV C`@ Ȟ_$MqHfatKBEKLPJ} 9STm[ dnxI{t_t$xv}+_$#{1)q;igkpxu}|tXhc[OJIH 2 iL=G/E_ړݻޙ{F8s?ZEw?(-Ǫ2MT^''лWt#Ɂ¯nՏܳ) $>A )4% /640*9wn4;\[ (5T<<:6@2^-(#w Cq )НQ%e=nyi^N<* R[*V76M;ҬvYLq>6-G%T}#*,%7BHJGAw4m" 0)a} ۬)ЗΈHfcMn^g ɮ갎+|&))0F>9R `dIc_YFSM~-/ cjXdP9)!¥ë */$3 VG 7`^+TF8+%^! g    \%z/@-pǞ܊hܙ"= &"67RJ'=& 1deTf}sWE2~!1D,S_'gjbXUHa=*@M^ py(x,sl/" ) 04L79f\At(Z1Cu 0j#7(+I-/+ &Ty NFAaE9  [\\]J zO@leڲF9'-11,9$ pon! %|Obh*g z ˑ԰`%,#d[C+/7f1& /(p;FQRRTRSY`fkhaWK ECkJS]gl!" um"g 7 x;U`kr{j/-1Y cRimjd!]UjRRQ*QM~FDC0DGYFD{CACEHJHuB;616o<EEN)VY[8XPLA0Ա!;~ݚҘTǴ̢ڿ_< Eэ쇉oɺҸAZ|̜WO>uӺF^ΝυѶˆ+ ##HVxSUPKDr=879f=AVFJgM+MG]=Cݙ,4S?8KU]eca0 [zGMX*dm)%  kqަN\qRxݼBc ;#$,%m%+&''5'$/;D(2vx* ?!$2X|!@)/41u'~ S. @*:}BG4KLID<3(Q =u^/@AMX' 7J_%mtw3v-m^N>}57;CfL2SfX[ [SKEBZMs\xk,w0oYs>!!E ~)e nĐǾP( m<8b a/(`񵶯ʼnǹMͫ, @!"/" ; 9Lwp]ݹn7e7K՞O,`#L˝cdUc$6KAɵeMk)LB%8o8>GS[`fde|d`ZZISJAf8/),!18AJSZ_[RrGCu10}b`\0.^D+{y ; l^-lǯ!ᡦ;VOq.AU֣΀-iT̮"ސ`45#B9~h@@<6%ܼz=UWǣT83JjwÑZUh"ؗ]q&~w9u3.3k#MyʗKDpDf@8 . ;q޲ٸ׾/z!۹!5T )6wJmF >('!+2+Ͱ2Ԓ"" @œ֤%ɘҞDa›Ɵʝ vqxhWZýȉ^2EôG@νQ=޴3ẆЀKw{G l:5)0-9JS)24%3-li`SGC?7;$852/<,o)(W,2:CLYUO]GdQghfjlqw|~xh}WylJYakzlz-&N&>abab`J_2^)`d!a&'lhd$cfkpt(z"J|]10b255?.<܍ p\V a W-'s)H$ ~ \ Z jA oJ" GˆZ KTӡ#k'V^`rاP L0 ᮴FmӷZ0k6Q̵f wT$r vO KAJ :S> [ՀN?5X(IiQ!(g%ү%"6/GUSGDE-wƛo\ t633s7G543340FIsf,C]OUPv2/c&ݦuE"R&q9̀ʴd2͹(~SbKSk^(fE< n%z/ SH}`g^YRC6BxA@_)%7-N3J7A:48-$)X\b(j9rb4&9\S?<7/@& R*CN H%^+./.\(  dBXy,-=2qشyĭ_˻B s 9Cu 0 fS5ZUWۊQ!K\\9@4T(5nMǍ¡7x*X ہy 8:HQOĨt_#%&PBBM}KJDu9NٰѤ'sچy/j \ o @ ~I)2&3/+-')0K7n;-6&+DuYWOB3'8b 2Waާ§SV2 g } ɵI{Njyb 6m%! >!c򷛾bߐ&BSՃߺXDZ/]* JT$yXf6sGqk d\$`.`8.;l}xqh;_ULFf/\NZbt" -=N^{QAGI@==@cGlQ[dkj!hc<^XnUcRNXJC<>74Q> G+0,%? |7:FUeq66X,cWJw@9=[:530/,.(a": } ^L?lu%3EܵMHؾԁξ]׸׶ED|KªOOٶףl*՚ ,/pt%VlݵjMhڈ[Ny P L :֊~ nDCηqOۘ'ʳZNqS C v  [! "'+.#a FS6 %151)8X '!#6%%r=M ސ$ ' )('%x%)/7U=>/a;ENQzB/ĸ/t%F A7aaZ  !$!')c- 27>BEWq$= ;4`-y'X)}"℠6Ye*oþ=ʡ)жO^o)-  4U-@5BAYO\d^s\W RwOyNNOO.NLKIHGFFE2FtGDJ S^[4XzUWi[_cBa\U = $(2~sw%oQ^OLO8!.:@:!qbS\KNEV`hjmhmi`OW=4-߮*6CFB;0@x 8,245-65Y2=K;)"y .yoɇխڢܣNtڟ ^jV ;D!Ai5V@H4 X؇J8ύz~ː[6-|ԭٟ6 D `!pphʵJL+%tD*gɊ\,ص5A͂^̫̳|ʗXgښG &(18::71&Qb{ LhTu rB$/v̳Pˆѯ$U-5>HR?[ % |C?K GmM )p sl C"/389l+;,,,,XS34'+Aտjadtn C2&1:N&O1:@D?8/@%' M41i/G/20135G66679>FpPHZbfGjmorgt,vv{snhb^[YU:PNH>3wƝ  $"%'&$M!ܙ޷mx|4ڬԷ8̫ yůqW^*-+$[3o2%-5N󌷊|if(ޤ^ŔiAj{PmǻEK6+`j W Y 9xV)ҮMs+JU= Wu&.46=/Q&u=%3ALA/z *k(8<4 (F@##,022b1t.I,*,I. " e901(=%L*]ktDy{:2)!-"%()e`U[0UME<,קj"*88D =IyqZǴ1=iD zh9xzM d 3H3 ~BȹDžɸz>IӿX\9ýqC xթVϽ%ju~$'"ҽ^^+6 ԮW8x ] <[#i&'%V"( ',/)2a2114;EBGI!Dh<3+b)P*/E7?EFEA:4.+*t*,.13H42-(#=Dr"6+2-$utPp}x 3T"{'*(H()*+,-i*%I! & "k!|&|,/.J?=ڊFʍ)cl`U$nց8;t݌4܎BF (218> 4E-&#;\~4:DA HMrQNJ S.X1 FGD@;4.)K)j03(7f:;Q<|<;<;97V6d4321.*y&#!"&C-V45;=?{ 5 UILNKFq?,96'8&9lX,56>FC7=\5,(F&Y\rw "MwU% VC$h+xV$">*װѪ̑ȧŴ{׻Ϸ+T.'6?ĢдrwJhJ*g&Ӣ%ܸ'}8,i_:,3²k|ehu _8#!!!aHhFSF۽E%!N TTL>"^)0#7;C6.<' ]b /nj }]B G] +'!F02B444456c8:2=>P?=1;t85Ra 0QXP.KzD<50!+ޕ-DJ c R!.!1 63M߉ "AhDodF޹߀l/4|$#n{@98@62,%ޤϡ̷gмWL n@ ~bƅƛŝÚغ0pmƁŬȿ uR g I / #%&F&%I%%(P,/k0c+7/~֪j#"|&j'"JFq@FOgX[ "&*.?/*u$J O "%y'n*-(01/V*E$#!7&\*-:0/+}&6!ywb9[`m*.2&ތ urXܪKߟz_}R u"b 4* 245+54311J0C00X1 SCA> ke* .h -MLGX U&'܅ۃ b\? ` ' $GO޽<ݡ d1 hQ"qLj#()!'Ӂ@؁1b"<&?(qދј -#)-14301;.B+)6)7֑C=x{ĆͰEWqYg1X%[:(o0%* M Ү?٩ܜ,}, $)+,q-..B/F01AIw\Brz&@,0(2203P4S2 D4Bm=7/9)#RJ$ #"|"l!@?Kr*" %%%<"\;1Gpfo!"}## Rc %&! v |% C5{V݉ەN+ ɛĬ꽥: > 2 R/d4T%QtfkaۢNdEt,] '& 4܌՛h, տLLIl²ȼΟ҂CU x  QNyG ɠ:Ʊ(>* F!\"a~%e'I)*++*>(#Z"v A$&r'b())(('%"L<5-10x.),6+.I37;\70((|TSߘ&.|eOZ 5 7 qH.27};6; 6.b&<P7U}WY09F>4 V% #/# !DMs &;k=m' 39Zr"u!!+&2f50777 XL82j8 <>@BBTCCCB@=:808:=~W* ;k1 DJmIV?Lc/j3r^)0.,8+* ND\ 4 f{=D4FFDCD@;6?1+$#n&]"s&+//0,'CKc[0HPMȢʢ͝ҼpkF>մIj<˱ (޶>yၺ6"?< AB|R W:D{A g fh [lT֓ԕ) r3br^U ۫ڵr85<] A"`!X"-,1j9.N8]# Z3Te<)mo rG=; I Zq:,|*@9q F۪PNDd 6   j dPm?""ޠ۸"$qRd GG8PZJL<   zd'f]+L! # [hul, bNI@ 0B=f$ (e+.z/G.'I  }/Zi2# Bi Q .P P)0"&#qHL;J O= @\/KD t 72457:=:?)C_z>=:{8531!0..-l-,B+^(_S/6i;'fW  Ml|R*e -R ~ . 9"eVR^݀i<lxFp  g2T6   P P FU8DtE#%'((b%!t  i -/37:(<70){##^&1*.-*?& Cm@* u rUEN0G y*m2{ڰQOS ZQ O T &ګ\vHLB(&z{1ph6?]emn|!Y~3l  t E JzfCHH]#$[D#w"<8W| n5@, fXE j:][|q(ֈJІϘю*$BK4W   v} N T O Y k)FF}/C!| e|X( N 5 8CB3IkU,^ >Y: KK(,zs AW`k_m S  E Y  pfPGT1c]tS x H   1)v qx0SJ\[3|PW:q C w,.mMlY8Br^4 *>'JL ,  ]x5 o. Z u e . +W9G w h t s  ? I = _ 1 Gu[`%KSokBC#<d6 PJ(1t(RSW h  BZM "pn10e mE/Xo7H? $ -X8}d@' # Q,W/2> Grc NA! A L 8  o= U4x8mu&|=O]3A.S ~|X j e 9 u R 7 J ,Zjk e@E=Ik a  ={J<pGFa xF"xL3%6% jb<) tB; mAQu P 7  \  Z k 9  ;]Yjt#u |[9& /|l0: j W "  u e O " 6aGOr2 bBL!$2AKPh!3cc uC+Jfm36,5e2lbdtMtS+=,Hd] !P O . %   b t seG=OD*Kp|b"}J[Z; ?4$?wmuip # z : 1UnI\|Z95A0Z?+r 6;K;pX)%On}w>cJi;,dV:*+W3Xi4zS%+ cc'j U85yw<2Q.f0S!naE1<?G ; D > M{{F$Kop$Nj[m)CyFyqJJ"v40!s}=}8_ /U/{z7.IWU?{M>ZTA ` x M < &  `  K  Z C  = x  6 j f W 8 6 J 2 t a WV3$OJ{aXJO}Qi Y/ @V8_6K[  A(a 2Vy_  Ai.VO1Oc*I B\BIk0:1g 5vEi;+hJ|)'w?f||   ;|'q" g?-=AW}m%`,oRX[[i&I@1xhbOC<t;n}KM^%fR~T( yF0k+L(k?WivLl?NzU; ^@$iP-"`q,mOQ ,~}8F ;oYY:(t dAf`8zgP{d yAA(ps-><e Qc!}f#$UZ_C=Hbi)U'\d =mP_p,+& 2(/-jR0[G.K$ybYPB,bB;CX c05*]BY\uL{^Q867iY?Q,s}x| TE0gs*v``%HD]$eCK4j K'P [/Ux7Ufxr=+N-pe-k:dy*0F"-u~| /Uq|FqY1&Syks%n!1k3{W>.m7gl8T_P)XRS@K/P&^V}!-pDKoda'dd9H  z.;'H=oucJ6'LB95:D^*ilZxIodhP%  5of(eq;';~,3or2X\s(S%'H@ y6rIH*@Thzuj`bo~GNThnt{_= GvwkbdkuufUE9Qdr} $&:5C5F:8;YvplbVK=3'!#'+3=@FA3$1IvzxrSTZLUH7=v|ynfhpyvmhjos|ijlprxz|xsnns}~{{yyxzwxfcRO=>+***<:L[^n|nln^_RSVDCCEDF78:=-?>??@>A@CBBCB@75699;,;:>JN[]hyw|}|}poqqffgihjjhjmlmpnpoqrqstsvwwkknwxx{overgod-1.0/wavs/chime.wav0000644000175000001440000004326210266424634014631 0ustar michiusersRIFFFWAVEfmt DXdataF R~ z'}>*/{Tmyl:05#x0m.q,Y1zn xrg aK,mWZg; ufC[lVN ! cD9fLw)f1kxOwO;b:Am3 z @ E%K]ly soH&d;8F L I7?cH* , a+XAu$  9WQ9uNn|ynX)f* > HT Jdj_*^-  y6nV|!&~?. 5JD#^Gw S pOI={pat4 E1i#=E ITf "WyLA, 11(mBB6Kbcd P  "<hHtk/F A *7=~p ( j2= a" H*|* Eh e B vV3b 7  de81 E$03YH`d ^ z\#]MP  /VB  7yqO  P !  \Dr3[   a~,Q$h6 2 6T<)V ~ j-=Bz6 &  e uw04$1<?%^ MD[qo{f P W6Mn l x ?r$|[Zg% )#W|QIrD v  sl(U2cXXwc:[ !r ( ' @d  n ' LSsF : M /l)G/  F  ~ QL>.Ye2Q oB9S3sTQA= I  7M+O I d b<%FVS6 c +t!m)X!WxtKB< E9-q;*q[' 8 j{*h(c& A ?\rmp 2'# V5[#' m >e;&) 4 CV ~z) & )l+fsi H T Jbur G  HNb=XaX`! , O z@.N8EA 5 wsE/qLH { ? *JU%})e}S + *ywq\' ^; 0GMm1 [  76.9`|jmnn b #-@z &>0 n Tc{<-9t 2 wN3[IaXRu2zM g d JUnH:I i & VnKElF6UR6 1 q~sC%Y" VV2(/z  R zfnj   (5X'ys%vb oA&k e h r^_0`}M} G :F>x+%_vp A HjB# ' e I{DBY_mE  f`Z!V"6CH ` c  H  Sw"[}<R ` [ty+Y|OR k >sEH ~ V)~   / qU IKV" i 3v3l*2a^r ! [ aC#|`W+ 0 aAd{;E  W 2&?D & V l <ze15hoD_ /6M;K7.fn W 6 xmw hK\A5 c <zzS7m)kkH B MJ2j*dJfb{ $ q_xyqTVE  p ZgsW!NFlCj { G G<OOv % ct#I; g X v]ZF6* t R  ):M*fo8C) + x?xoPL s $#/O M 9 y7)|fY[% +$t\{c  ? p1Dnj!Gz B !~00^ J  8lwAp9 , &X(% SL@GSu If`I ]u g / G f)=fJ7G !F_4bn k8T~   '>9gl54& Q6Q ;luC  T'JQ, Ni8a%x v  7-=ivQ  oV%*f*9Esn6 a q$m4 BC IWZrnA`W&J 'yt@bJjS?Ivu?}Az|Tub*I  -|js7yG}}LG3<^6 WvA 4|Fr\iOKteoI;lj\@#)]DE\uf\<t>a{Q'|3 9^LA u{'Bg+[LM,H~'?2({  :T]"2M v?j".Ev,oJkCb9@O.Y+=q/;^\huGi9p<9mNV0\i~VC4@P J7#A>rj}1F8HNF8~K)qf )C3r9y)AR^;o 3 C-{^n O o(V P2z"@**tQ SJGiE ^Mjp Y  1L?{ h z-Z0Q"n<mqGu &-Fk<~; K- 6~(? G|EvVL\  [~}ycEY >_Hr2ZW 4D  2q\xq=CV g+u}Nh=+ - ~pHK\1^e s alTUO%ta3 0YUs/"{  >@SPr+;C'}`{]`OW*q: GrIG92(-h|Wew kKP*;k^"-4HB%i j?M%07/8Ag e^ P d3lVN'#@p?KRk4PxXaaJ5 *zm-Ju9jP{xXXIsvQzo & e'ZRFx)_~wl'pPLCC~ys/BIyumk!etG9\:f+`]2m_\g%}!X)Cjb\SGru*nFm VoJ#O!dgdxlJ,{wHqUR5G4|* l R>VCKp& f7)y%Fcpe.?c]c\mo2V):3 %]Y}E&7:]1>|F<3>&Yq->ok5.5Dzx(aS9*j)$8/BgPQt?q2GT@vv SHzxs{kO=x }dU3AEK *;*; uG~M)Z^<!(!:!y@S5K $C$/4-Z8d;G 4oekx/ExrC{L9$z(L&"eaEvJ ^iFv\JE9&0BWS QZqx?C"$049@v%FbE-zd%~\V1< };6V_e9l4q"R6B\O%eTH548`fw;#nDEP? " (WvF2G0]V|V4*X8g8k8'/MwP]`!DcIQ ; GbN(]$f{*,EQi|o/}3`?c .=MhX%VyFX * sUkX}> :rmC;=10)S&/rZ&0,<22s`bDeo;u1- G; sZ" s(IRS22k0\@~HXi{r<sC?EBQ(N._i}vZ(>Bctc6MGA yK!=i""A:{?j'0H1|>g{QkDKP uFg`)P1(~D$]|GhXVw,vDWxlk~\%X\c"v8e?b&,  "8RWjtg.S?m)D"G_=yE-u8Ci|0x@3g)2PC@E:>!Ngf/ A6O'f *mvpa2KH\->z kV$AF_ugdg*\ry1Wp>p*k?[.U\%F_65n|-W>oee_=|bVg,ea~W(?c )q?epR'*NM_' *|1WcaB$A<[8@Hisv#5C) OQfMV"JGV 8csK X+VL}~}'r7U- qho{%%1x&u sf_A{Yr*Dq7!ruF;~^XWNIr@j6ZPON`X&uS{d6>4),I"1!A;P]Pt|as\tu!,J2aZ]r oR<  M>?.18UT[ ( <9K }+x_Kqe pwJT' R. r2olXv) BeJ:Is3;L|XuX+JSHW=Sq^As *JK 0  5\|i3$HaF48?swb7_)53dwmvC=*'i]W 6{cs"T1$+h27MsVcO# >IE~avZ X^mhhn(7k?00'dcE8gq9U>d7O6Ja^TN7wf6[IYetPz3ApbN7R2`=Js/iYk .Ubk~8 h'[s{-IiOj7s4XN9_*oO$X'Gx~\y$*S8?&Q1uN!s@XM:_@ ^ 96>Y.&o8P#)w;Q@']xGE=B}~#mc7~)Ff \0nJ>mOmI%r*N;aQ9D>VXv|FvVHd]WsxL`2!f-6yLj, tKO;J'u- 2`2aI%7U +N fHf, N[6 HkiR[nn_UuvluV?kh. $3E $"I_=]KN6*kijVgcl{yRpjgOXdL Anh-z)" N6zkv/LPu[: ($,1{^7$j Rz@"FOe\UV/M&9|8xaUVT]T^\WO91{G0QFe b04H~~}+DbV*5HefA;[{e"-It8.$7'B>"Be}OE_nUMo%yBj0J3JRi95J) vFp@6+?,8KleFip-Rhl|4EGu1J@Y%q 'h[eV%${*%P_.P=gCmO4S# Mebl/t_lRPN3+ahJg4GNQ`- /HwiSk\ ffU[Qp"L]wQ7[g\LO'g]W9OByqTJ%d:l}tw!q9m  Otqv~Z0: js8=HE;jPA,Sft9>1m<{1uV#u&F p![;GdD^HI=tUp$9Z3A5xk:B,c (\XyhA@2X/PT"3{X7 /x5CmE"|) 0po[!$A0TTP@=CTUY{q|aPYgOoPYk_Q]}KhqY$>'j[_lkt'8#izzu[b7t{w6qrv|E[@<hhQUZ:~G{kh[XgTH_nE(18 Kqh_WS>'WbWFSQ& "&GXH??=%-MRH?A6 *1##9?-!%&(=840.')#('  %   overgod-1.0/wavs/chime2.wav0000644000175000001440000005320410266427630014707 0ustar michiusersRIFF|VWAVEfmt DXdataXVyqdcXVWQVan>[*Y(`4`Z'p0)MI"~#wi4,hphk| eb g6$\ Q&*:%pC  D `rw} .Y~2Z'? %vMB 13([!<#$%&''&;&_%E$"f!YaA Tk<%Labܮة׽ղM֑fdٝ!Ryj  yQ!&" ##$K%&&3'{'u''L&%#c!i  -*PzuJ#V/}2V܂ܜi,1 `/ -dB-J sz ~vs4* Nw3P. uUߧfLۆ!~0 E4vtW ].t % k,\)  '+g..\-)#U `8)(wV Fm  ͐p7͗ IG" ug׺Oфه+TO>$)c+v)$Au |R-t6$.6;*=:4+ ve2@ n " ZCd1q4^T7 \ z lڌ{ΘEpӯ+y RI$"'&"7 kcf1#4&T/59960'nae)EDmGX F!5 _sݻKlLz&]  hA|еӻ5h  S b[D -'^.243K0*!6.jY` Top5ީح:}@??Km[U\޵ ՟Ӡ-W KE[goRRcg6 D@&+/50.W+y%$N <1UI A [F_dDYط?ݾ@<@ڥQj  oQ0rxg0$(!++*,'!M rKu  M%n ;wM6eMm;C.qI ܰSڢrg % fE,^o6$4Z!%7''&# 8|3   Uk'(! (ߡXp39tCJ = e tT ` ~!w#A$~#!? QA= xa~N o[$v`nAW 6pߪ *_LH %INPX p!0 6!  pY1H W/ EsP N&VVreoc)>e)!z Y)RV  AUn# f " B L "@ 4 ;X*<}UCfzIetO 2cqKY + AVR5U/ W! s8 7 `6JddBHN4#9E:`=R2& g   25t /pn i[v(s"9Yg][t_,j<p]o S XZ6 u1n| o R fs3(s`iAw^N>a 6h x/x$ >Pd%OX ] c-tHi #{B 4 yyiw6s {aLZhHi  WREZc `H[Y! h 3 7 *Q4+khS@uQ7ft$7F[]NZ}'  c e;d5dn   ]1 K@__nNZnHQ\l; nac|ZCC FS 1$j  m$s< * ^dID&3*$z75e;.0 L?0 VN|NS _ Eif :`Q#|Jn~bTf8QD8 1t2q5H rzy Q[ eG=AyS)xiPQ 2y  < `]O< i: *vpz \B$f],r V GM'zQU1 J @6q%m A\U$m X.= qx}StCtZK= QOf ')T4q q z b  ?USCga lQ< AaN n1`+bZ" c *eP\> ! x?x]#^} k~u  fS=Dn2D!!g "J+L = rA:oX߂ no2  ~)UMN+Lls \yK} n !"!a2 l^w-BGV [U  >w2o=N ?   3`fgeDu1|B]Fh  "#0",9I uXlY) 5Ok fir$bZ8{  _FZ>< 8, ?,n4K  #o$ "> AI8- jJ APv h F)QY A, K#v%fg_8?n"$P$!{j -o( 0.oz)I'9^y7!A >[ *85I\~1 pMq Kdn#$#l7 `:;*  ;iw mFKY6k x( {>~n߰ީB`p6G V5xsH J #`$! s:n$Ak\6 0LR O0=m߃ t $7ߪ2E TO "-Mo4!]#"2) gE-{ :ejO9[F >S <&[! &J   &&af Lc " ?r Dn9faD  Au!  ~fN(y {( _n X YIHT1h [6 wQA%t t g titx28  Mh~R }{ } 3   Al{ 7Tb%  *z.gNx(1 {/# /RqIImsnkY Y(YSq3R` ^)[m% " y5m4 j4@   ^ y@hOj%d :#3B'! A #Xx1u?l P q[ IA 6<l P mTp ,  { ec1~D >]@APgz -0(=;   yu0E/2OK    &)p{ &h|;oYzz8|s /cOwR Aa] VD0u D?[= ? Q~8e<;hnFbo$  I o ? uu&MZN >'_- lPLCk!Vv6O( ld`[#e-\`% !r W ulv #V  I ? a=0(OaWGI[S(T0?dy;K$K&S nAQZ]hw l  'uF 1 q AC; I #eop,3WK8[$wiUK^zi /% D  n ] "}8$wSRD z k &D-]jq}"t<!csI_T [ J {+e4QN'h^X !  `(2|c_oT@G Slx=t r]$55hTM s z pzj n Q y  + !< < R-,K[wT]1)R0?Q[EXDoABw#C  * $tIS. 17m$*Ia/rB @%+RY/4M9 C X 6 ,Ys+/ U +T / -_&Cm.Aw iWLq ekpae ,`paCw 1   :.Z}H! 6  [~%(^aM ?Svmz84= v + N= [:z ~ U f 6_FGH38qgA_pW-gMVA'2$(^B  G h5O MGE$R y@bq|~<'xC_= @F< YudGM*| v X " ' vQ$LY 2 T z T?8Ahk37D {TEu|x^W / KYUh = C c'~TJ O Y{s])2lVIu3?53 : 1m95cV kZ -, `q.( r93;^~EeZS]ZI 2 7Oj #D =$ C+Zs[v_?\jR ;o9$ ;[)iw   uHNm47 ul5 t9P\\k,J2(9g-Gq= s0 5 /!d, _{5 cDN`E vD T:f\w&ZZ(&uWKl0/ @2L +h W]@Cp \g Z6 0 1+~u:=\* Xr=. ?1V   + :E\Tc i 0 w}  ~ +'3jUrzP"<6zve > l4 :0> HX ;[k  d z M]x [f,?SW  ; &-}F6 lS27p> K=$#  ) Eg2m5^Zg8ny1]v =y xx7Kyu0 %1as=r  W7  pM $q($}<# 0e{Jf z Y;o H+;T# W  w ' f #RX^%lM k|AI/X C }  7m !:& ,_ k   :7i's_1&;wr8PZ % Z $P{n.r }r 1 {h8w> A = 7ZBBTe:Q1)k?7Gx.=  R k2{qM' X; $!Be? {u  f h>"GH W\{HkL62!4!  \ Uq/5 CBW#TN M)mJ~C;o  ` KZ3C~3P)~eI_`I>uM'$ i No[vU  hV `Q'j " - k 6P,vR;eZHt;vZdH+0O2L  >;Cu o>F q|]rfS Y {fI[n# @W8Y](`M/'`sk' )d  / MJ(?-eW$x8&`%8>'30.A#-g/ F J wN[~  'e9epL~=b*!8*tnT Q9@pm]lh  $0R1 J}8'Z<arN=N ?Pa)9#lBNwPb]GPmpL\w=zgs?I~N*B  B 3 {  f xl: `kYZ03E;d/[SqiPgl\NUq_;  z \? _ r %l2_2,2GqS.^]2% pNr(K1jF82 =k*&u|9 $F 3 i A>g 6Cysop1 z+YiIwy72K@sDa~Zf ^ e X<   f Y EoSiGwS- 7`ln+bq.}vf }v8'@r ~ m T s$ G]8<il/[_M'8@VSG:S&.L^4i / P 5 E S  v D |6B@G{t#~B@#sNh[N 84{Y2Q/N\W c * e _ ) y3, 2)W\,>u_9Y@5J'k2aaD/A{OAB G . U U " / p, Zq{0p'In1ub]:|f>NC}8P(9 b  _6^7,Glhi|K2Z FM$tGNB5'de&^ f|`M - l 3 I%$HX:Ts545LIqs,Y" %k9K7 T2PX_:] v < 0 N ~ e!W Gi d S Pog:&xI>f(FE\ {gD H S5,iv6YR<[{uaMU S}% Cha9 =R,1_[8^L?'6H"0y}nb;gz+>-!st>`wT9yC(CTRu3*q}inD5BA-2-4^$gQd++ dbl |*< /9p`{7M42Jy"Z ]=V9X >9oR),UU-/&|~6HRLB&\NVInqG0ON;`3rJV@b0vq&LJ_163\n2Fv9 wi"gwG~4!\`:<RnNSpEr)iXr=EU;.&=fmWkkR#lLANk-pGv5xfe{c DM)cJ+% ttB v6  xM, ,Z9a~a&*t&y{{-I|a2NZU9#(m iGyyM, Ap v1SWk<  /_#Ji}lUB" 8]R!8IA.4Pmy{y`< s7 X/#Ekzk`Xb`|?itigpthDhN<-*-2DQi$<M`iqvpj^XJE7441=CJX^iosqneYK>) overgod-1.0/wavs/chirp2.wav0000644000175000001440000002420010266431662014721 0ustar michiusersRIFFx(WAVEfmt DXdataT(>VycK$&^a|i K b evcC@E EH I+ 7 fAAC:|wqv* _UWV[@*ug(Djl)A '6OL &V(ul'V L N ;({KOpu~aN&{  6^  ) ~o& [VPzm OvPAh|}5 6 "0"NxnP 9 YpXN6m#&&(a5~S 1Gq:r^H 2 A_o:Mr_p PI m) ] |.,54jn ){imnGY[+<( `d~ 4 WVVURLSw |o)*W = p }d,U\48 (yNA G 0B$&   =<7 _j3G v~R 3)wE*6TD3 `dS= 8vR+hkillmA0D{ 9tg -lj   c  sMNJQS>=<:!aIk0)(:1T0% ,7 0, >/6 s %KftqKZ &&&i4. C IrS>1DwqDFEGH t TVV]- `ccef` )y{~ A~ {vxudmijh;N8\[Z";wJ PMJLK #?><; 2n3/0,-9u#E""~7 zF 6Y4%"\{`,-./] 9;:=> GHHTTYWX\bdge;orqs|*{ {zxzu}< mnljk}a^_?URRPNOEFBBj96755 +)*'( H  ~l_ X  |dG"*+*,.7 5979; DCFHPQRTTk]^`ar jllmNvwwzyd~2wvurs kjjggv]_Z[ZROPM1EFBCA9876 u+++*j9  G0     "#%%^ p.00'<; b EFGI^.7,QSSTybM^_kgikkZ %tvw0"{yxM! mnmmYN od`a ZVW ^yq` BB??M6561e zp od p= ZRD8[lC   ! Ub0 )L^ = 7:15T! U {j$[- qC WU r N&Av mYJ6f] wTTam J:MS J% H<|C^k  /$~MsNG af.  Ok  OR  l~ l I?K} o "WnF):+o #V](\f~ t X SYa'  XZ 0  ?@38z # OCy F; ^pz^bH dwEW b 2eaI l ;    l ;OAqK[% " u{V:GA5iP:-^H;ma 'ng 2  = F 0BJ0 [pv Wp] [ jo:m2l3'dn dVPV6s^}:uMP P}$tY X t i JJnm! Z 8yIX.7OrM;(UB-M7dNe>PMR8l1XE.%UIMUV??|]jF&.fV Az X F s Wd[ESK  3 ]1wQa1'  k ',Z9!nr^ @ ~OE&^O>  5`NPc, 9 ,\fQ&&DQ:TuxmZ P||=rgEBi O#de l h 56N~ u t 4 M  ^1&:)F0tf r E'z 5 " 2 h O w u66Q!3t 2,: > baTx3"CB.5~ ' HTH=m Y g bzy( PS;, d tpiw qY=w$? d G/ \ ".69g@o*w;  ? $ =FQOArY 23/  1_cZ*G  d aL X=}.A$ \B %C`]  tg? OUHr./+##%xK j? l:.&Ww  !oE.L8PRSU M  1N {A8u  =qq X|p b xvvc% Jn p\ ih s Bhmz  8|aW<V KIIIG ` NN r0d.  I3Cc}  C MFn.pl'L"Z$z!  Yh~U u-R+f y ]D.nF* j 686:9'n P~gR{ ' bTVXW?Vb(>2 dt9stu|5Wzm$H2+[h w w t t 2  TT}yA|s'cBs~ X Y X V <I:Fh%!J=z: / : ; 9 9 0 Mi\ )CWk4#b8      w #NTQ):Y#   . Im2NSl[k8P a h##&&&6l U qnPj@@C+{?c  lougmlWgX4Qx b +mmonoL5 mbKBI o n m m 0 W &$ q/ T R S  9  E w `B|'a'[}YYM;;`fU ) ( ) ' ' _ 4s8"k T IKHgl<jE[)98 \@^ U}1h,^nUyZS$#%Xm  /W253666jW ; P/(I rBKL b *"Z]\_^^a{L  Iooooqs[}\ aY t t t s r q q a F7z e a c a ` _ _ kg0e" N O O M K L K * ;Y/@ > < < = : 9 9 9 =- - - * ) * ) ( { h}I         _n!        V @"!#!$%&&&x 104435658kX HAADCGDGF^ jRSTUUVVWD aadcedgg 8 tqsttuvwa w u u v t s t r Api g f d f e c ?>0$2< Y X W W U T #';bI I I H H D l#,O; 9 : 8 8 $W-HU* , * " {aHaV, j =66YukT 1 jk7J-wX ^;@$oQ\ D[O~J 7;Fzsr0)GbG >5ZKoZ 1DdYnGxOzlKxUJcNc1k{I .1@~()"hBATH*bZQnba ,4 meqP/-RHI  n{%apb&9KN%~~ C :& . k 7*m:-Q L,,%@p^9A?G/m i0 p4- c6BdgEkq@t{ OT+?$[; ]<(2sa^k iQ3O2?&'3D3e(F6 VYb!3s jcl X)`9V JCtcwJWo4 jM T ^L g_U\{`.LNF h/2x6.y2^7)e$^njl?d`3  Li)p=` ? 4 ' :'m8o>^_A2- S` Ek?{rs ` CL X y B, vH f #|B F=b0O}:SB)6# qe}'0 b 5CZd_O] H[a <#t?bh%ChZ)&poU^e3 }9i*WX9 UcnXN"WM)R2Rm /Ojv$YnQ +NOJpY"n5yu`4Z]*g74?Y (FMQpg`S p 3~:u[Sn: 0 qNd+1k!o1U7wjmJ2o(" PAO{#B!{Qp[jq x"y~5!v:~ rB&HL<[ _ P2]9%{JK? KQS OA-R_lY%N-YBD Aw1mTw @ }8hm2@HteGx213Jk#NQ#1X>!b-M YG%#t1 />u$_,542 NFe=GhgTCk<$BSxA|7o H)tVPx:~ =wt7~. 0%,Sn2cM $m#e+_?,y1 lP5d7m%di7Go g b6p\ * ZBO , * ({VAe u<l?%cQ3SZG 5{Ac^TG8 a !pLi2:$;fUS&/ m .8Htf*<QQ/+tM9d0jeQ k H87 [mvb3 Dblr@!#!.` ,]M 5%Au**4|\y?YD~*hh eD\4#v+]WyFn>a5 EPw{*%@_]7s n 7T3 !9u qZ]2,b8y<^Vx G+OX]`.5_B$j\kd$]f*6_cPnC g uWI~z{h8W,p \ l *fe2=b /=N(ENz7@<"C?o ?4-SyRae2,!g u+-bmE5,m~pL@Vu. KlEOv 0 ]# szP` 'L6]M1z *E 5nm u&eI / 'F#\&Avg>-\+(WbBzh MFC0= nne[D?zgJ/ k >9J$  b;6[.t?]NrR-mWAi;QV *FnI0 ZU_y(:Ep8*%   "^$&j (uKWIUn^k_*"`96 ^2@QCi<)  N? ]VP/-=E +[AX2> :p WKx b2 v^D\v>%;M;[K t\2%JE ?i$'o6bV<e BfDP 'bO4,7+uUks+8'eJ@?] NC] l3-&JrRBy&qfR\ wiqL[HL}igr  nrJ Weo[S]I2jkqS7x |wwn9yxh ^TnC=aJP0 @> mxX\ ]HZZ!iBRy+]6 Lz:E5N' =hGHTU7 Z=&2 uB ybm/eXo`{y21p`}zL&A d:\xf8 }>4ZjP n82t cN[  %I% 03q0xXorv(<9# z5r`eV>Wz H/~W,p$. ~U"W ~6B|*hwjl<5L2v'L"ec, \Y^* + 7~k'UZ5")5%KY{@5 >y D^a ZCJa-LIp8[E#wOy\~4G |d3 d 8>"V:UJv^%|H;3+; cdL Fr7!6o4I  ZUu%S RA{3 @x =5_I& jP()|:p>H!kT[t;? MJeND 9`V^]8T: J5>qn+j2{_ SJk>W KND!o P~ HM#1#|bK}DDPxICE't+fb(0.O; m8!:}h.fCne,v!N@ .-0} YO|>" bh8NAb qA-Z wOfra=PI}Q~ nM-4r9`mX^ )yFRx5t zrhEZG^gX=B+39k Fh-[b fW <UpU"XP'l!_$mYX)w6= K~H?4&>2{h ,$dH#")le^'a _bP$vZ Jcfk}!k >2c"U+UD^PRhpdg6yDh2, [i$pI1V7I85T JR*.kci #d ^KbK|_z {N5 ,h[1. B 6R3+ Kjn )|9. 0zzgTO 3u.A0qR/k}.K6:1-'x!6}S] eY6X4FeKl*x\a6 yM$PD<> { S(RK>J!k;Us{E-@< >MeHf ^E`Am(HHUb/yvkEzs1{hcSIW %|TG| .([6$8D 79+Xc5uIc Dz ,znb6prVi$ j,q4[4^ #CPT8m4cZ zNL?z) dsU/~~XF|& z@J;`Yb"sk3<>N.>w8 mA|4XPatjm9 {z A(=9$6' .Wxw%0C&,:kKUhvL'bp 0L% 7nVDl 3U6O}g(& =r+;Tmg w> Wey1R\'FmFfoZmH976 L3gm 0==ftKE6>vfv Os] E,1/XqXg\BWTMg'AI0sPU uwd+Z(hek< .Q*'NTSIVpwtw- ^;94NOo9 O fF,H{W6/R E0cO  Xo)4m0aFyBKF`D@bfy>_OBIxa J;M8Fz`> )jkyV5E{i:YkFGa GlMpv~ ^r\xHjLyM0fN&5MUw>5c  P$>VD`m _ A*SM[*zS> x +nF0Z;&N\9O:]7|.lZQoa(8!A9!! fo.$RF_H* k~LY1(ye 0Yx7 ]4 w< t ?'=(n0Q VrtA  |1c!C6}>|d_6 7; xz} ;N"Dcv}4}L T[oq6]%[4 2] @$RmEd/ij91$5Y,if_ryF W6kotpYd#@\ru|Sw} <`&T$ g)1]7nuZ+ z7}({$1b<]mz/xGbgI?(8> ]N%QZJ4@Jm!e}mgKY} NSh-#tT?u)c =~ l yr@~.{OdV A1PY Fa9*-pZtR eb|QF{;G:f-  ?T*6aU -9-*, Ro.2&R9 aZ 4$fZlQQl\hGNL a_*L0<Z G^,URg2:[sxm E-_#} YpppNtSsmv)lC ,$&0}] IeS4O )*P }O W$.rLil ;"[.+\Fg5 _`\DGb\ &F!@#L ,0gXc/~#2[JFF& [ SU1A Qy'oVv(ymGZO~fNl7}P 1/%B#S 3] jU}p6TRpdM.0/ gQPuqt@\P.s6\8;UIk b=#y6??ja$<Z [J_GRt8fK4y"zB|Kp>2*.11p2Pm1>#GC ovbV"H"X9cY.Y'5J'}d . 45}c%]Jt9}H}a3;_ tP ;r >I=<0 b/[&xlV{y>0+HWVr6y'qi5Fe0I=v_9MTm/(b3HLZw*GG}gQ.t$*! YM?j,zv9_fY'i[/"-+ B+|+D~,>hVWs?3K_EdgrC8<[*PnDn BBm zW: VC{tpc1\\^lw<q.$`2lX1*Tfk= &A|1gdQ9MZpT `t0H~wO9G)<KvF(qM)=y2xp+Y  8<iF)3S?&;;qo$mX, @%Cg$@/}Mf-&]dfTg/$0S67N_5Y ;o^x{<z ^Am.DNtnx,Epd PPSyRm(|#>p'xE5t$O[D5;F]'D$C4"ewG1yL`n#n'">4 BIdFNWX<(}#w/Q^+|UlF6Fy:~45x r P/Tnv s=fsosa| E4"_v4a\.ysCaTPI2K<Ng%A *1s{zIX!.F$["R/N/XE Y cvNbYBNM w }Jw:x3fQ7 UqNtYI; *3JZkbcZvJA{nU0] )z[a^GcB^*3A shD:Xb{ BR{q R;m>IEe>+3+N!*/,a|dCU(n6\zg5?jU520]y-XHp6Pg@ 1J*@>.8uUX,.l|1l#j (4An] mz(*2V.t =fLD:6 G9oh^R>M#Z;0Z=A 2ASjxef5 *q{ =1D&$_m6- v!1m+;\*J-hB)G-('!-4|!^M4_[f]w}cb K})lC;IA>~tiNj~94=%B!)BZy(2`*TcvalwLGT`MR\89tNhHc/)J)m0g'e=tZY[h|k7J I Q-} \Zt ;xE{^9EMs3+ DJ';1h1Q'|TXg;^{,q5~>8| [z=*_DOF?uP dx#`.haf16  ^wS>z [ITyc/]b Q XFl!nj(5rw)(u;(s%M;)ud]TeOb#{[ Q\!KO-[,(c 8'3mV {i=)piXI:nE1 dei!:d 95{#vzTk"5}4SF@]h<^{;(|F##q. a{<xnCg,lCkK.{_3i`jv4PkyX0b:@x#Aum?Y0v6\~ E\,!xmH\ <KUBeDC}WpCZVknDQ"S@,j|gcxh|@6M({!D3)pA_;m?=T98f9~2CsJ  {8a>U**sq# Xe;2W?3Oy+;Et`c0(Tnne91-C36L U#3LP%Poc&KQp|=Y]ASFm9gCL^hiS5 0!9Vc\>%4FVv&0t2Rdb#[t,h 6SQb;t >:F+7*lWD=|T(NX7y w[ g)_0/Vk]X,*@L>8LB2G$Jl?{sb 5k:D"'~:Gx<M^[#L"+0@GP f#*Zq_ * Cr.[^{v8(mCP>m*K Wk:9J4<77F M&4 p_ /G&7=*w/bVqVKgddgK3 18$[IEkuSvtX7<Rpbk5HNQ|x`-Nc2V|#JQlS.F(RW7a<{w#m\lS-58fTl g"!*=hzdR-jv=v22K 91fFd>LW#EF@e"!D*:r3nl{'`m6I;>*1&A2"faq0r<-NlgsFD c&UfbO1TA$nrSD|\]QBT]Z:Vp@(1cFyh_QJ2W"kh#r='U-+UZFl5<44;_:x"wo@x8~N63j.XwgT,zO+e^OHDg 3B6[r%7#{ '~%:(FRASK(%8%LhW1*Mcn H's3A_UH|a9f}Il3{%!(Uh7>gX;xB[5}:u]gQ$ 4E `MP9f R`gmC[83<EOBRMTHW K~UpoD>\ QU+_Nz2!C@^bw/VX%o?]aj! sR3%@)DjX! <5we}&;.776Iw6x WA g>\C|+=7O! #?J9+" Y+l L uX@0 'BBDt:95%#>f7K[>f`5u+o C"%op`-AR4acz)AZ)Ztb62R'9`""6D2]:;{b { JA'=<h0I1 &- l F/ /!dnnP$+ )yBBUpZ l$[) O s8!saH6h^0  j~TS $}li@33$_M279Ha*'^p2@ 04 o58D %k,_@e~obTF"YzJ %LUrsA $ z8QrK<sC>}P-em-X>E W-# :0]u4  M 0Z\I`H "~ZW"6Bx$ #m1E~e [d:.mVSK 0p^6OedCQbTR!o(D*u  od3 0Xz#&UI"$ u3 X^n[# .-70 ) OKM i. m(>'U OU:! d| -4{ HF9 :Na6 B=8W s< A/ lTr .&eK@> j]04 KjP  \z  Fr% ?RA) Aa 2 ] F' s G/.XG [,!' @O ,  ,!$(  d:$+(/ A0" 6 P3 E 0  n <(2  =  %9 >-  # 2 ' %:  $ 0   & ' /               overgod-1.0/wavs/dart.wav0000644000175000001440000000633010274730174014467 0ustar michiusersRIFF WAVEfmt DXdata 8APj] }  3|)1=|At9~zX:BO FtJOb7Rr]A _h=G}~syn]W#pW:G)jD cH.aRo8R; uo1{GF2L`PO/U,6. ;@|\+2}YRy) rY7# B q > .yn #V/>   " Cnic'(yY m \ b 3zkp$&I"+c:!tB *[d5Q7B+374d:IC3IiE _+I' d;;Q; d A A:^vPE h< u  I s R T cW' G RP!dolyE!7.&vGb,J]dd[XVbzOvA*/O=Ut;@o*CG:<XJzLGdyM5/5Lp5V9-e9e||hD |#e N$ 1`EAmg)QD0SL)~uH#SjmZ9 9p{a2x*Y<,4Mu*}= .@A!Ru|RO@m-]5M 9k+n/j =g3Nd{qc[OD6&yLg/f?!/R{*qOV 0=EEC?5(wEq8Z(gO9& )d)9EQ[gpvzyyyyyxuoeUD-vV3t[A+zme[WTUW`l &Eaz+>Sg}overgod-1.0/wavs/dno.wav0000644000175000001440000002354410263022420014305 0ustar michiusersRIFF\'WAVEfmt DXdata8'}a8bB["9rWg5]X?hRL%M_:y(-VBbRaU6ok.v$YE9{p/f9{WY2QA.8 a> X %}u"Vqq  mKa6(AHL'Y,C23#Z&.;wR)(F IhEnuX_ S"x)<)DD~t|Nx$E 5 _< *u*&v; 'g{|] Q2|,=  B9l_"(;vMe _ a_hVI n޺Ӏ\ѥHeLY tm:&E]i;G{[ UR$&Rf u4aoZ   d ]*|{H9Z%yv"P Y?pUp2Jl I%b*-/S5-'.d.+([$&iB :5jYnt }!Q$ )Fq2 '8N%h_`r :ED | * =ZicVO_ ^ % 7? 8l q % T& /$'+0''*'$  EM_> j*{5v1m q3k\: ZeN 5  s}4U {#<[s[L HvlGL MR"*P/ ZYM|5d(6vEn‘ʺmΫT gf\i #} | xtM o)f@ ZR .Hۇ_ޯݟV,Qb|zsݣӌ$GhkX+ i:9^J')%#= . y Y #-bw+<ZR?aP68gK .2WME& dH#G`zQE | O~+5mW ;Ib# 7%l1W9&r n$B+.T3݋|9(@ 8CQ( V I-> n!7&^v d`#.er |_XA@@9m_~uI U.b: wK#(E"W##!# v2lH   %3MU0U m$O" lx)L"YKڅ**إ2ޚR6"g,25>)[}FS. ^h h  hx'GO 13.\O ^nۈ_#/\{QGC  kglb N*G\e +}T|t#:K =:R7 A C?zai}s8il@ T}0kUbL ?q!%)"-#"!'#y Ol*@l^qe r \AM!%(!!,!x` FE d} W [5+6I:*:u @{_r!#"& I \ v!23km7DZ?(ixt|^> Wz s{2  Y{  ph OB/_]2] uv^z.|o]F% ^ X G k2 $ "&FK4L - ?7z1:Ze{r6eyIlFN{ d MrH u)"UnN]MS K JnLze"+,f1hAnwXR%$,8}' % Q 8T@?QqSh H d@?zv2Fqb{" 44>xSWe qlJ/$ w: o%63-{Q F.\^^gAވk$q\b}R@uS2zR J _ 1SZ+ s :U d#HM9`e,,wjR{WL r N 3Id!2 r c  yJq c!L"V#|$%'!e c2%#n  |n;WWFH;v9OWuW FT3"$*')*, )y))k)(G(U'(&$7#u!s9c&y o,`NNBw#[ebt7"eH^2fPc a45~ u`m's NmXD-rZ2_~ޠܞږأwێtmݽ@ DQ+ x\3 "%i( +-y0!..R/t/T/.L.r-],+)'2&>$+"7j  .7<<<8798=L\v޿,?V׻f[֌֦ׅ؜Ivk"'lT#pG& NPjo4 X"#P%E"""!6!r ~</Tiqk6 -:Sv<{ڑ(w-Zρuϱ%nl1=u//mY U  bn\V {ufH\,@B3  ]X%Rb r/ֶע ;ѨҦ"֚S[ۍAB_p"Ht, 8s  _#%(E*(H)))))H)('&\%$"!mm. 9 k2NyaRJ4Qߞ"s=(KqB "W 'd7T=CekO_L 1 asg\UF8+%(1@_{ޣ?޺nؚnI"Ѽ)ԸԑՔֹو-ߦ GfN-s DjQ/(Vh6  6 ]~%:SnaSR7yo,s-0d0 K :I*UW0|Czc+  C4dZf_!{޻_ }Fמפ,ثH7݃Zth)hL7 }V, EtUYt$ CH3?Zy/j UC<K(n^I Z !z$o'ow;{\0=:,  Uqehi|6{Hztw+)p_[_m%pg&O~AUB *  f Z  O K  X $@Yix}n\G/f8 %?qx{h(s]HCDOWdt t];U:E:8H s?^ t  Fj&;|m|MS |;AK Cd    %   v + z0-LDa<26T"m@&.Oz?[;5O|aH.pHz5P[\ Q 5    y = ]  @m ";n<@i;xF*{qic ]N.zHcs|o^B' c1Z_UQ_{ET, ,~4G5mp`+jA$bB"k,X;WcFU c4=Jc}<^+ts6 G ('xL,&`D=/ hz\D/3=4[""vMRo|mD].pm!- bzLORBs s[+#e9Ui%07PB*q_M, Y^+k*,nV[ 9{ G6+n8&s;/%!SMQ&D 7UbpF$1q $P&!t-:3e$;amO swk] 8YyjRm/tGF5?sFWVP=*IgXR3y4KELBO u"v,C7Ay(sTu@a?S6 {VwU[20CTX A!Thp?:ig#-(YrfX=G |-aq3gIS? (zF`!z{%.H6nOLom8"/r[>]{C.6wEC)b:cNOW7IW .<"gl2aR GS32dzMiw$&)WAh\9!`( k=tPs2N\g1!KuVM)apy|euT;pC&7qTbri y@YxS{~Gd4VN,Kq P$0_$Jo2-Y0O;X:Sjr+2n__a$|`ON1OyDhJ'=ajck~!djR{U?H;shqV94lR (A ;45F6Lc Sp=>1x\vez[m [+]_~]ju ^lfnf~^?P_'!YRcSr(@mM .iEK@,6NxN&1~J| g8_*.=!mWnuPpgU^eZ#0W@TlL[g1e%f"2pob+ME:3vW2;5e2ze1Y+[L6v)*4frZ7@G{&TfM_]0fbO uiY#xjUme@ T_]u0P'^>zT*QI^Z|:w+I"{y.CY!v\ZaNT!-.D2+:);aM_q`AaDX2`&['D|~/'5gb-2c` <;ou CTP3|tr iHI=:8AjiR:g"4~zlqA,:$8@q8 ," 4nnC?F>XjQ ERnDn a] FmjCG{0a\5:t'\U37u*a^:@8omOXTlu3wDP:2\A]ljS9UҸ@qۏމIR^:U`\Ga BQOQ2t0aAtݭFtcgڪU:-/5Fdڣڳ\۞1܀ܼ^A_˳ERȵHܶ{и\*ٽǾ8joJª#Å÷;ȹԢ>o܋ ߂Dz-T-T<`_CUM*Yߊ޳!Tۄ R۹ڟڕږڡڶ!YۑYܧ"ڵՌӻ̵ˣʑɁqf`SWYbtʽX? }aᴮqSpuh򷋸/޹a,ξ޿.( ‘Sç/`ĉġħĮĥl+ź%ա?m݋ 7w\ J>uY` o3r I|N>qܣLڽڨ۫5  ?fےB܉݅{ٚ3KSKQH?8+%-nxe.`\/aM~ݩ ۤ^ۇVNSduۗۼ"_ܣ;݉W9lӆңѰкϻξͽ̺˻ʺɻȿ.T~پ`gкCEӸp·}@-зd/*Uf+ϿE6L8â oOŊŻż*ג,\uY Gmk<kܭ۱y Bhܝ`ݦWYޱۇׇ)IfyЋϜΫͺ9WŦCz axĺbչnLg$W p߻\yľo,u²•¬]WŔAƈ2PbtxOoY{ؔ)hgC8::U!czM0O(k#KsAnޚ7܉JDz(ƨ4žQ^j"_ h$佪zP+ &Jwɽ4@D ·RàRkqţ]ƟCdǀǗnjʡѬzS- %MKF tH^kCNW4k!Gq&ܰ7݅0ܓVK݊ݒݙݱ/y!iߣݜY֡*\ӇҰ@ć̫7lȦ,uuA²)!>־x ԽO*btܽVS3J5å ūOƥSkȎ)\Ʉɖɯɸɬ\ۉ߰;7Ey8ziPlxoU,i)I \D:U:bߊ݀ޒ#ZܠH܋?]݆ݷ8|09ߺW֟!ZӐ"Nυζ%Z˗bȱTƧeEú:>dOľU.9oξ'cȿM2Gx nţŅ}j|+Oe~ʋn7Sh܏":,/dvH@M:(.$^9<{(\E5WxWކކ޶WܠEaݡ1u޿ w ۆׁ[Ԏ Byв'hͥ/vɸ_ȹk9ů'ħ,õAa g޿rWlѿEX>»EsFWSƼXǗ=ɓBfʔ >M\;ҧs ޕ&9!DdkcCjl7tV~({,\/h B'Gg>5ߕJpަPܐ/gާBߧ߫5ח6E҅Fύj̹ aʺ|ADZ#Ɵť0\‰0M !GvMVRy)"ǧ;tʷd(p˩#-&o@ߜ(0 k6;*ݾ܀ܭ0_ޕ!t߾MQ׮Wդ7XУBΕA̞b5ɝ ȁƂƖ?bÛG´o63MpIi\wDzȌɱMʍ2̱̍͛̆9 Ѵ~܇%$V8T1p&"h)[8o C /Hp߅|#߹Rݓ4kޖ Q߰ߴ_ݱm%ymӿ \ѮWϸ m4̝ z[Teƅƽc Ū\ ÌV"':;FYrÔý(iwdu ȐȷȘkɋ ˾Z̧Qw`͙͋ͩΏӽ٠ ޖ79{J:nvK?(HKHv%D%l߈߶Qݏ5>߀~W~>֙FԜIңXиR˟ˏ ʋɟ1dǧRŲYęi7*MWYduĐı Aŀ]gnlqhLdˌ+okΓΦμΦ< zۮߣ#7z[K6!  ;yR7o o1b !)?l{3qOߊ vڶ؈WּՂPӬ҇dPJOd{˫HɏMțU ǎE Ʈƅ|ƛƮƮưƼ+NǂJwp'!˙̖ͨ;| ЫW.\szџaNP>l-FOQ:}e.).U]>VM{0c&aUO\8eߛ9xu߽ Qڲ0ؘmBը[E6й;ϿJk͗0h˶b~=ȇW+ǢǤ"Jrȣcɥ{m }s̀ Ϟ8rҿbA[R xPD)H  z\,u{:E#t9{&UAqQm !?kޘ.݄+s&۫tP׷ ր]<ӵ)ҧ&ѧ-оL#͙5~)ˇ=ʳp3ɔK%Diɓ5uʿBrl^̚VDG^Љ+px8-Ҹ8czY@ ,kl$`R>JF. 9geV/oKz1](!#j`kJހ޼TݕDUtٮ*ؕz_KDI[zЩIΈ+̀.̘Q ˑW!ʒo<  .HdʅʬF˄hͧ͆̈́Lξ4ϱ,зUlӣFԚz@ӳբߛtW*Yh.yz>GDT>j H|6j!V+g[MKa]T[M3'TH ?}Nz.Z*:D8>Sv ;k ސݘ޸3ٲ"ׅؗ|ԀԔ$ӶSь,Ѐ/ϙLΈKͦvĠ̤kO- .:;@GYi̝̼=uͬ0v'R*W϶Ђf^lӏ)i 7;k+t$v"?NM:]2~TFU4H{,aDo+_O0)2Kr6lp݆^O=װ5ֶ9RzӳTѨWѻжs-ϫo9΢vJ"ʹ͙ybM9$BILR[l}͔Ͱ L΁κ:y& HЦjEҽ8Ӻ@\Ռ,ׁ gOLoF5ukP6 0AD2VFFEs&W3E(( 5\ߍ"ߺC(ڨؘٝנ)ֶIxԵ\ӵfђPКd3ϨX2ηΞΆu\i΁΀·ΏΚή?jϙEЃ яZѰ oAӵ?ԭ1ոDn اK}gS h IgI04FKl=@K;l.Z'bFt^^K~7bީipz؅ء*YՒ5ԅ3ӘN ҆G ѢqOоИvP1ϨϨ8ZЃЭGыHs#t!~LԼBլ)֬8Y،ڣؿ.kYJ1Ob_]D;N&uK7E*$6M,`,aM-!2Pq -6ߐݗ*ܻJiىٳL׊#pw*ԢRӔY!Ҷ҆X(ѯьkN1  (;SrјѸD҉mӘGԒ=Ԗ_;֯+ש0ػH{ګڸJ/n8}$Kj{wa=8}#W|nR};/DPP,fR[Mr^^mD\j9{ ݪAo۟6pٱU]I֭fՄAԆNӰ}ҧ!Il΃͍̑ˈʚSȴ)Ǥ(ƺFŽĆ`G@Jfďx`ƓǪȡ_Bsֱך٣k3UwvYZuss:e ZޡIژPՎX- L}ӰݷЪJhɏ#ɷQǮ'`Ş9IJn|†©.Kؿg'Ƚmļ>ڻһH\Խ[kĿ (Iϻ63ϸp;؍L݅ (Wwi#(')ʃ#ʿ_Ț6nǯMv ť9eˆ©9`%b^ּjD&.Yм |Yܾjg40Kg* ̵Y Ѽ}64ݘ k! iQ}?T`aM,p<ړ\)ԢUcJ>)̒HNbv۝X<̇&t˨Cv=4o{:ƴaÉóGsG迎9龠N齼VoN&2İμΎ9әHؚ6ܬB߳Tz2Xr(Nf߄[2ٯ؅_=Ӽж΅ΣͶyZ0ܗݮV͋8̅0wKAɂɲ:]xŒŬ5ĿKg$dm,¾mhqԾN5^Zt8{ ѬO՝AScSt~rH}) 2* #l*67-ܳvQ(Եӥ҅tРCΌ+jsֵ{<ΦQΪO̎,dʋʰ=UhzŅ ŕī;aA\"ɿٿ @k; @Ƈǹŭѿ ͽςӲMׁۘyC^_D]<\ +_{dZ%ؽכքn]B-PиPmTׂݤhЗU пiϼY͗0Xz˔ʦ,ɲ5ȸ>BPeÇ#aH2l2£E\ę'hL‚˜q ՠ2ؽCۿޜ$KZO/1Circ<6p*6.. ۷ړvVC+_Б#ғ2rOS#ѩdrиWΉή>Zftrqt{ƍŭDÄ1 d6 )W·iîƵ;ǰj{\nwuۆZޯ#;B/bY(/*cߞލy^@' ԴӝҨE`(6=ܬ*Ӡt?ҼҔ pѫFkΆ-Ξ!ͤ,̥$ˣ ʟɚȟ"ǫ9aĠJļÀC*&H1ręSIQ2ȘRlù߿LAԯ6״-ڝ\ޣs ;rr@'U "# ٵ؟ה~gRUҦРϕ !:+-T'ԾԈNԾjӸVшѪ6IOKI>˹4ʲ0ɰ5ȻHl ư[Ąd=&(>hı?]šSɽG{Àn%%]л&ӗ քj,w޹ DP1. ).*W~߳ޫݝܐ{iUF7 IҙqrbFѺׇs\GH(ՑLLHӇӴEZdf^SE̽8˴/ʲ6ɺHnDZ`ŚkN6,%9XŐ)ƅ1JĞ6^hN$҈L;٠QݗuerDq$5>@:1"ֶտԶM9X[׿ڊۥܰ[وhC֍Յ$սVt҃фxfTC̾<˺>NuȸfƧ{YG3=NwƸ8oȗ$2::#m[;э=ճ/yݴOn#^zqK RE7k۽ڴ٧أה~rԞBЉη۶ݝ:!ص؈U~'hՊ!ժ3Դ7ӵ/Ҭ!і ЀiTEEW~ o&ǰdžiWHQnǞʨdÄö|kÂYӹwHױr Bj`oJ R-x9pY5bߧޡݘ܊wdN:# lЃ/֋ڜ^A>aٶٍ]؋6tן/ֹAC:Ӵ,ҟщp[KGXʁq%ȳȆhUNkjȔțȬo`˓̃ƗŃiŖſĩe.\ӭeۭ )3)64 s&2x OzР( l7e_K9')ڧem ٢7SWWCԶ*ӛ ~`Gϼ6ί4͹Do˳e ɳɋn`wɁɟɨɤ9[ͼ-o>=6)[K\ڢ -@B0XbG,Dlߝިݶܵۿڿټدעֱ9۳k\Bߞfq2ۇ5ڃڳFZ[O<կ"ԐpN6Ъ&Ϣ$y͑)̹nʞ{d2 f{άPfHȆ}\<"iQĈЩ@ՁAyۥ?wR+|'k "('<}]ѯ`mݠG7ކmG܍8ۀ۩LB?ط-פֈfRӾ-ҙ ф{΄Χ7̐A˺˟ˌˆˊˊp˴ͱ wljR,ǘČ%Pӌ Mؐ,KZ]J*KE31 gk N P֗uԘҏ\޳ߣޞށݎ;}ܢ-۳*ڴ,٧،nJչ$ԖvaaiΎ,̀7̻̖uovsUq̅4W&ǖaZǟǍ2ģĭjѕ.lתCgyޅ~d1@0s#;m(UrތݠܰۿڠپH=zԫڰP?8v߲:`$ޒ;w ݗ ܜ#۝ڍqO׼)֖tTAһ=Kqϻf!ͬͅttiGI( ȕU \$ŏ,ZՎ1\ۃyݦާߘpG2cr*g_d;PersxثaԄݹd0$ sf)n3ߙ9tލݖ܎vX2؟ wU1ԦӜҟ+ѻUϠR Ξ΂uiB3jbɡQ vCozlŪo_zӚ%XـکۢߺZ 1L}p9$zWߵ"+1\رBՅӽ94߁P@1 )_g&)XopcI۹(ږlB׮֋tosғ/}2϶Ϥ{jA"ϖѣ+̬by+ȲaƳ .Yׇح #r68gz|iAQc6 AkޕݯX؅M_}kfPG'Vj 4DB޿3ݥ܃]4٠ yX@պ:ԼBjҭ[дЅkA\Уѭa͋,%ɒS0mZP!Ƥ]pԏծ'՗wj(tfw{d 86FYu׎ب޸ߕYL5r7s G}ޮݭMږى#fި%Hc NQd)֝u֡pԷ"̙=ϧ٬ښۡ܌ݮ<߫o9Fuح8׹/֟eץCz lԀ|nXtii|̚:ʛX:ʍy]AiٹκѺzA۹>0ȊV>Yѯi>J/ֵ֞J ֍ o3(ZVF2˸˧)w݌`*_ I$o]+j֚0,ԫ#Ә҂ѕπ͈ͻB˖P,b|ƬP1=~"⺶:eD2ͫ@ϗΠϟЍYԊLֆֱ֩֜N֜%Փ5jlѡЩϞΑK@̮V$$&(8AFF5'q9ޫ3nܲe5rئ B{ԍ ʬKɾ'Ȣ-v,ƺƲɝ~* 4A]. 2Yu vЄyf-ԁ~8afY0֢dԤ̐ˤ٬پ&8$aw05u2M>ڦ ک%ٛ!Wً:\UAհԐ^T?иڿx%нμ=ܻ~ʩ lΈυ_3ҐL3գ5T^N0ֿde&wіОϦnzTڧۍoj.CG߰o-ܖܦۊVw ۲>h kX?հԷ.ӣ"Ҟ$AqΪRIA̽r1ּmt|ǡ@˚E87ѩSl6IA8u ՉIӌҽu/c ލߙߤJ 3Mlܟ܎Vے!۶M9[J5֥բ#ԙӒқ2Ѻ[oʸ…PTɾOwӽu6/JŌȵ>̗iдt#mEզ$=?'Ս,ղ#Ԁ5J^0LھoM.&ߝ\|:8._ ޡ)ݝ܏zܩ=WsM8ק֗"՘ԑӗ#ҳJб;ϸʏĦa'-(Ǿv@ɽOhɘ,gΠ$Щϖp6Ҏ{ *3&դHOԷ H|ўеϐΖφܯݍކ48PenUޟ)ި)ݣܱgܖ,ܹDۧH5ب׍֓Պ ԌӦ<њqcń;zaۿrᾪ`-*Ef )Mʊ2eQ1Ѳ\ӋSի*"^zDӉ &0мЍMӞ+Ըlսե;OԺ[ҊѷЮO{0ޫߚ3-X] iS1fzPG ߛޔߠ6]t*ܓ k[b\kՖEPқiņ=Ù"Í/1¾)JdЅ\v }6գ aRӡ ؋܌O, Z ]r/%iߋu9O?ܳ%ۖ{/ٵ?_֑Kտϟ;ɾǃQ'ݾ+ٿ#2Ʊɿ /Ytyf? =Pն(=78X ~6ӡ%`SQG Vqi^ 70al߸Hiށޙݢ#ܧ*Wڼ7ٳ2ض;yϨ8ȚJeĿ!5=$':Xns{͓̅ΨI~)EԨWն դTqEӄҳTZ@1(e`O5Rk>a{ t޳+ݥܙ ۅ ڏٔج?֋u˻a2Ņs'ĝ)oB¡cenz΅ώЎ1Ѧcӳ5Ԣ"մ$| ՘sӷ2ѣݚfC!z]Py6SK#|@G -L_ߚހvgos؍زBՀJː9Ǜ];ƋRvåc@/ yՋTӢۆO" +%v\8KE"}Go(Dfu)ߥ#ޠݓܱ ۏڃrضвE5>Ncʌɭa`ĨsVJESqġƭ#͖b-УэCR(pդնջլՊYդsHӋ'l.wKK \ P))]qVmRablkdenڑ<אҵrͬ[ɒwȱhk}6 ?sĶŋϹЦыMҾbӃWջ*PVR;pՅ?+Ai)o'DB$#ca5Ig~@>9޼@UzaӤS͔AɄɵQɇ5ǧ1ƴ:ķĝđěIJ0ńŊ͹Φϑy\ҧPuUթ[uxiH ֵH@Ԑ0ӟִܛY5(&+_|( _Vg EfDd6ߊޝ(ݳQܯ۳ԁ-nfʊKɔ_aʼnU3''@lŲSxͣΈqR2 AoYղk֋֙֍o;ՕՖӣBDW*&Fw5F(6yQM0YuHPXi݉)~gbѵQ̽LiYɲȖNj/ŹŶ/wƯȶ͏mO+S1dXոjֲִ֟֜q/hEi*R&``.:#K'7f!!2[DڤBі<͠9J̾%xQ:ƙkPITwƯ>ǘ^̃Y4 ѹ҃`\Yս \ֵ֣lֻAգԔԎblH(ELVw} Y1E(MsX}e.Y>Voߑ$ dvм·(̳͐;ʛ wDŽ? 3nǸ NјbӺUZ_ֻ֥b֘ 14[#P[x! s(tKkdPY1d~ ,Rߖk#ԯRНgb̹̓\/ɜ3ǭLJsrNJǸ2ȃHMг~HR])rֶ֞KN~kߐS4 6;Cdj#UzH:'R*]5.k}]~Ջ0{O5R͇~IȈG/;kȬLLТd.YM^5օ;E֓<֦pw]dz:P >$O} i MV0\k3c/ܗ؜aԲV.Ͼ#R͕̓=˙Ɍ5ȹȗȤ*s'8ЛYӎԀcB֙\KdVэѼ-Zߍ0_(HOx` HqJ jE@0ߩޣ6V7б·̡2:CŭĆnl}B:̼׿C.~–tg!bȍȥȚp!ȭ!XX~ڥ۸ܙ߳{;$sX.߀&߽Rm܆ܲGl9͑˲yȸgQ2C*‰?Ɲ0ǏGȊȴȠ^ȟӕמػ kOJ}}J'MYZ߂0Wvݛ(L x͟7&>qUMcɿ#.ƿŸŋ\2Ȇȿ( 3Xhjޫߓ_!,_Ea7vߤTi z8 F=΄̱Vs\,VByT 'BǮ{A=/-eEfڑ۱xr);c:*Px"'j߸B݁"ԹѸg͏.ǖkWQf‘"z–t!njVȷ@lsx9ɹּ؝cCz8zDm%G|dߠ8**(h͢QG BF7<€q Į/ȚDɀɫɷɺpZ:&Pozu_m$lzSRP= e|Lm[ޝY'PԖғ=qzɟR?=Qy¸ }п5¯a|&|:Ɋɭ˂љr^ڍ۶߼\}%G4 d{h11[d YBݣ{ ѥ@͇8ƶŷ3†na%kXĔŸs'Ɂ1=;˴B3:3\u s*,sN 7SZ]Hzظw` ѨM̪iQeA+-Aiêl5JØLdƶƲ#uPwʂu?(U܀ݗޜߒxH|-[ReRv(WqMI]VQFJɒǾƭź!wy1ʔ>OCG*^ .Wzތߋ{ULUZ1XwFj;S ؅ՒfwM̒;ȹkNJ!řzvńŰ9Ʀ&dzUIʕʏʹ!6Djeܕݭ޵߶t@9^v!F`w:osh֡Rӱc!ͥwfredvƈqÔLw"Ɲ.x4^<:6F˚˽goڗQpslu&:Jw7x+^jEw+3p&=Իq&έ{ZFZV\rƕ&Ď3ŖƎ ǣ@ȝɝe˦̜*$U݂ޣߴq2jrg~(7nqe$]9.#g~KрE˳ʿZŷöFƗzȩSy3Qe2̢Ӷًۊܿ\NjBȼGɄH ̱8V\Oyfח۾MfrgF} x!bWM[+S$uׁؓY%ҿїqVFDRhqɘv(Yȿ7_ˆC;s͢Ͳю+:mޡ=\X^ld#x!~(aڙ׸֋].пϫΞ̱ͧ>Ȉbƶ?Rȃ4ɭ5y0̾ͼͰhҘ٦ܫAX^P*:+dQ%,C/3B0 ߵ־ՐkL$ 4A]ɡKHJȪȻ;ɝʟ6˖W$\1Z΃pԎ &_ߕb'v3FdZqWYY&,ޜ/ԸӘlban͉̳0ɁK^ɕEʽBˈ*kkU9xߥAmڞ[תk] 9HԊ>հ7^׭aڐK@tji8/b-/[6F=|.vs=r Qނݱ\ڞ:ؖgkGӃ#Bkխ]Gb٨VCۭD?V]]J(OR 0B .[j kaZbsx߃ވݑܟ۴WףZVӒzymvӗtjբSBـٽޣ?P>:Uc SenT-jޥ'.۶ kCؿA֓+lF׉:آ&٬>ځ,ܟYyޯoHZM.HU/eY '1wPޟIܪہyٛ@ד.|u؄؜M٦ ڎچܲW޹X~r?;%{ %ld3B>#MbsfRߨ`3ܧ/۪9}+zٶ٬ٴ2v*ۙܕ"Z޴7#qMJG9u%Mmtn\\l%0!R%i$QW\߁]Wvۻl)_ۡKܳ'ݨ1޿Vߪ Umt,k q"ctFq3KwUHX܊:PATFI^ܭ2݊VRo=+{4# FAF[>^hbH^$k8 uTGOwdݾrݫݭݻ5x ߇qZ^<U;z\.t *71Qt,|_Fs_Y3Yy -]GmTK0"'3KpgQCl/G)D1%l/zM8'] U@Gx>mB=hSTZn(q|".l)ScHD{V|I{'xQxY<R"M-h=(}Rv}0sjtk e[}\Ep pF\*t#L@$i _4_3nU*?;>$3w ,/)Fki EAEa ;E<0;Fh'9.e?\|!tPV(W8IFA%n:fQJ]Xi(!8~>z4qkf9iu7E k-CWpOj$/}#{+/m4FglA`ke)@xIJK?2`5ep/QqE)~Oa,,o!j_C\~O,_R%'n;LKtm^)m'<#fk3p,R |#]I9nz}%8J~0u@:H0N1ictf7O@q~&h5TC0]G$ '9og.( p= i0y\&# 'Af'':8l5  Cc+p6EW8nJ"_+Ao4?nW*O.J"8FMPMD mK!Z_7>0yNm{@ tiN"v\D-K1i/Sr,`txwN~]t[1e4}lP"k#xAoDqiZRO[`qVJ0;a#W!{eT#<IjSTB( tIs1c4 $   ;3ear(X4y uY5TcQGL_=v!N fP<&J9Z -Mh>N[fhid]IrK U'WS^XC._`2\?xkdehsZxxcI1>f+p@b(y$s\D dC!e5 X1  *K'u0V{=nU5y+hO,PRF6 ?}R'loXD2 ~$<[p,;FRTWTPE$zV2 Dw#Yu[<mE^?;dVLHINWzaF- #Dc=j3|!{0Y.c%21&Qa<i1~p`~0[zYF' >q2^udK4 yW4qcPIG9}qe[TO -#>a}kLM"N*dxAo R/sR7  lw^@' Lb~"Vu?+Bq'U~ie\PB/cB$~o~g5}l\OC7/@Xzb@aI*l9d#pZ2jM5 EiP=%M[p+8CPU[\\YRK?&Rz5TkN3x~PF&~uj "NtXD1[:"Hn'HiutmbWD#s\E./r^L:-!4CPbp  Mt+Lq )zlR=% }z4@gcYXOjz)3=BCFJBC>7=l/Qq q[F3 oaRD90% '0@Uzwe`z7Ts(aba[UB*|k_ODFOJBSB- }"!  =+D]y,AUf{m`QB2"W|naWLD=52,$APZclqw{}}zywnhaE2;1^q2G[n8zm^OB7( eG9( \bkv$=855}9ly%08~{wzc0 $).28:>@CBDBA>>96.L&0;BLTZV  ule^VNIB<951/-,*+4fjs{ %2:BJU]cmpy~YTTNKIFDA;951.)%  .>CJSX`fmv{~~zyvsqnljhddaa\P;50+(&!%/59=>ACGHILKNMNOONNNPcxovergod-1.0/wavs/eye.wav0000644000175000001440000003730410303410006014302 0ustar michiusersRIFF>WAVEfmt DXdata> 3VyPh{#;+1/hAbSdDV!V|,^(HFM}@RWy*kcb$+8nF@Y *`Ch } <]CH'q.-RYH2I+b?! >)x3dL@HdbnpYaML!/lZv*,sb*~WZhjW7jV][Wo bY v}XEn ?c|9kQ= 4Z%xmjWF(]#j0wa6(&C ji,q0J`Ljj fN et3 x Hon*M-R?Ddx>iDj:pR *M9O\"sJ0kw={Lu4@5A<5` 2p3SMVVA< S PicvnkU &XM @K/  ? VnUI0%|`/]Eeb\a|d=E  e s#`<@9keC<4q,_N+ t }=/NyYz+ w`ajS%.} ca}xMx9+01yT*6CM ev)s!pO| ~*l6b^I xe,`ct+4"B 5w *3=j*o<o6hqX}<    3 ?9B wB+G28GMxzv{K.uRy S fv k2)D#t\8=jso oFHny]3gR.JB1\HxLU-+ZL k DZDzR7X5`@kk\XM %ZqyovN{% 4*w6M]/9KEll7`|4 S%;dK X^/p(kA";'}8`/u+2U   wlF-0L Z1&8OS?-jkLX !Fn6-Th*_dLE;$czYL' W*[JB@v{ DEb2da|*>M>WtGp&rYD1T1&<`,Wy8'+'1L  m0A0JU!h0 ?QWgsq/  h No" ivCaKnR,^ l>Y4Pt?i  M x@Nl@.Z( i6zB Rrg% N X~ZLID8kE x_.%VD&E<pYoW%l:9GV@y)Z<_[T@LH86 i md 67;N6=3V#]x  0kZ%E}q@$ tXIJ*V@#n4} -P.Qf2n|[ V'"RG&<swL^ L@uNHTf MuKa7?`v, xS#[1b$^n =M ^Act bWF Gb@+|E4pU:Uw++$~TX4=s6`)}{2Az  \P8DFXlra;0FB+ Tmlq2z xzLz}`H*ApBz<H60f.  k F~h wp.OA)bo&5Ixz"E_D.x 4[]x D@@ Ro(4LL B `fnD/BSqa:Z` t \.U@N!`~o[5/C)q;gLnVDGHI$;Fx >{D\aE 6/Tm}:$$ =  W >A E(W  \ wRy1LR X (6[QMP]:[H&Xa/@W_ZFc   ))4$#VL4em11O) qhn+!Ymwo d_7BXA]k\_7?u8]P7"%S)^;E;3>jP-7sHSYC,  Y8TE@zk] wv|*Y9 nD]Spr"Bws(w.BajB~THdnBw5elmu #m G!i&O6|U#FVC %mHC<$(xS Qsq`KxpNC<YaBS7U|FSFUT-~@38$;*&&h^*j9~/Eno5u yz%=cJADP`tx?zb7!y:;L]$$RbJ+?q) 1DV)2%\j,rr_ (/l3|`W?h>n DeWun`[ry]q=#+#: kd;(77E&Fg]*2CiF]2^t?` On:{dQ156J"hU_~gix6OcMul{|7I`mt /zQP)Z|xxv'[X3L%[^O>=5 ]C!T"jV+Z[0xl'HB($zq5%H{h)+}=0%=<f0WZU EC~c {wE}q1cMLgqL$t7Em[N M{5,@!_vqNl7Z 1-! 4i~KsR qv,zC.|/&n5:<`w |tF3UW9^ zF22mZ IU)*0_@k{x514</e4OO]-C 7V_b_ rsssY\EmmB)2.r ^I@Q?VDgXj-j ,llM,[;(TuM~iA_^0K2_-UzUw!r&B=)yXA@B:i \Y[iA"BEaajq}r>k%#!(RRQ&7CQs 7:=Lr "`(X`.f(PQ8Lq}8Y@AXCe [PaKJ;^Qh2GEtrU~<s`" "oTJ7q= oEwm}gxmntL49ri]kC1N&P +:NRYt t[S;xl2h5=gog;/k1 `=Mf1)\6ABmw p@0j,__R[)jjDaPghzC*e"I{g` $ uRl05$?!Y s/US`fR1Rni[Io2;KU]"%Sq:p6@ !-6M#eJi`&6N.b39pq+=sU<aQ9O ]F(b+jhfhFDi,UIlrv@'XHShg)Le]N)FBElfZSikQSUa<kt-?GoD<<3  8KP]{:*V! M6L n{1J6 +%*GUj/ I+)UX s0Sj$7[#&Tm=%ER<Nq+U>`#*6 (9!sxF@z~I|>y2^#(k$ * y#HX >'s;*aTsT@4//39AK(CDa PPk .7 RAI^,O3T&  ?,wFIf#<|4`K9w!m1-Ks2ki2p'hPx9z5]Ld5yq-P,5I:q0ve>y2U:n1]3 !\a`q9-9>w*M}&Wz"aw'((${#te>MXJh;nx=`[}4k5 6f )It2W Np.<lww,iH _2)@Zp!U"PTc`A@l)5]/Zk`@"".g=1FF4,L' K2 +NrjL/mzyE**('(gJ61Cg L5e}T1|T.8^ zT pf'~e]h)ZJ}pI&wQ- H^8I|*3hM}b<vS3 O]t 2x-BrLu{V5zY: V)YPs/-MxDnpP0`D,d3R3tt9%8T{;aiK-mP8!p<JcjR900g-Sl|eL2,:8,dTSSn<WizrbS?-#*7;7(ijly 'BScluuuk`SJ>2# %/:90,@LY_c`YPI=4+ !(062& ,;DLNMJB;4-"  &+/%'29=<96.)#  %" !'*,*("!       overgod-1.0/wavs/gameover.wav0000644000175000001440000010721010302371350015326 0ustar michiusersRIFFWAVEfmt DXdata\r8W .gk`߂#D߾BTsY5hm8^';Mp=.A  i$j+29mAHOV\0b gNkohrku"xz|D~Zg9~,|Ayu$qlf`ZT3NGyA;|4-& J@U^߯ڡZaֶ{չo֦KM۔_R*~wc g | D|Op "$&)w+-a02578n:;1> >=7=xmWޤLHڔ#ُ.igxTe>z  k z"PT%b*AF/*#Ss e ( EjB' 5\D-=}ܡ܈ܟXݝfRPloqB/I K~KAgoX(49?] 5v: H p<,9Vvl# !"I## $=$K$.$#c#"!E f^c '7t#bq_42YbN18c }`FbaEh~V,FL5j P 2dg`qp0pu9EstG-2=lx7| 1 'M#Mw/y kh݉l0:֝lյ{ּn{99aB0)#G~/ fi). "$&+)+.|02578p:;>===M5RBu[PW S*|X.}5G#/ dHn{K߿:޽I܅6ۺ۶XܣY-ޠߚ @ilSj,*N_p4f=tU$ G&,4; CjJrQX]Lch lo suxz|w~j!}}{dxtoj:eP_1YRLEF?e92,<%6x2Gۧ9 ֑pբ׵ ޚ1JK,xpi^6zA EX[!"$ 'r)+M.03R5S79:;<\==>>=y=<< ;975w30o-)%&:"3%* ?QduL"+Tِ?#EܧC!3wk ve! G %=:>lqa[`n Q9 "  D09.st>w߾(ݭj]܀GݛmYa!4X-`p&cCq583T]at 'DT b Irr( !"#8$$$ %(%%$#$M#5" 1yZ  vm fq> $&0sCx=&7j"6l\(|l >ZX? mY4WcRi|]-'RxH_%?>bPZ9fhxO.  z.Y3A:!Y'P iep'qF% {NUb=FuT%t|N߾7޹F~3ۼ۶QܝVݿ-ޢߜ#Cpv]x;7\o}<:0I9C  [$W+u29WAHOV\#bf9knKrLuxkzy|~-<~{ycupktf`ZPTNGHA:K4-& '"BMߢݽښW\ֺՀջy֭WZ۠na4~qV u T e 'xU$G "{$&(E+--02468<:;|<6=======F>%:_himW6F LW F >K+5!["@##w$$%9%0%$$##!W JG/ B6S> w6lYnVc%yU.h$c("sZ|9b, $FE3R]Q.]r1j}V@;1I:sE& 1f8_N1yx}|e@NK`!(w!UPENd!W=& h2em;9X/rNZ/ߢ ޣ4w/8~)݉cT^>L23lYq1CRv m^> 9 D$* 2e9@PHvO.VP\afjnruw9yc===S'_#]M>58D Yn[ybާKBډwAގ#,?@[`R6y$  Q X.[ N ORvuf[[h qj(J]f ] >  $|xQ,Csdn%NsUkܮݬ]% $Y!W`"gU:I@#. 8_olbvI28  M%Bu; !"q#$$$ %%%$K$#"S!vf #D4 =@#X)L~"QbX0,#=[HfB6>Rp/aG9\.a~~oF ciFTFhocrQR*9v_ h;Uh5;FzMLTZK`Xeim#q==:=<;u:874@2A/+R($ zk^ak %v@ 5ݿ۝C dٲڭY mgxKrJ% #.n;Gsxomy.@q e  8ST<8MZXދ܍_fܞ݂+K;\1OtAev R  zbOybwO m m O$ r!}"N##Y$$$$$$$f#q")! rg 2HAxX`1gII4Aop!buBQ6evIRI8eO?8dMa$v5g{pA>===W<[;:{86-4t1[.*B'c#bTF>DR k&"wmڴ<4ٚ0 Mޔ!12#B} ! .9;}Q*a27!@`uy n I -V/ $Js>&b܄h{-ݽl9/b!WX[E )4-! =j}{gMWA,D $ $dY !"x##K$$$$p$$#"!= m ? p:d#P c]waIbRj8?L4D/@%2*~ZN\t^yK[SK`pith#}Y>;N}K[=VY!e0 BAh}`,;n L^T\%xcBX iLgP SU7XA߼Bh ܆[FAWxܮ=ݔR޼(ߗ)@E! CnY(P!?`$w;*|,P:jN =#)07X?FMT[`ejm?qKtwyy{P}~$ ~V|yJvrImg>bC\VOIGC<6/A)b"dUH g H L۾bCt ֊փ2ߡ hm/zd5ZT  })Ox J":$Q&(*W-/32}46z8:k;y<>==>>>=6=<;]:8642/+(E$M B4,1@ WtuR$Ty1 Aٚ },4r}D~uR&l w | }"jA&d 0IQ> NS ^  #<8#|v,xKacޘݢx܂ܺݤM!jUtEZ{C^q W)!nTqet^q P @{1 !"/###+$E$B$$#=#v"a! Xj=[$ }AiMQ|\%"A%.L)YtnK,S8wkShGBS{"]Hh~g]d^Y$ w >=~=<$<;98630-B*&" 3]g_޸kpY&/fnERܜ%zxx&Tf`J&^ , 4 4:gL .PdcG* .JVU D  p5_ma@/t4M S܍vܙUݟoTVrpf3\w0KSJ),2ay|d7G"=:/hz(  [Kh*MAZ {!V""n###$$##2#r"m! |p m Q 3a2)]Ce83g.Yrg= rh4ir6 m3&P I9Zud iw.s})S]FINS9R+/S0q <d|=Y#{Ip9cd:?a*i;O)ߣ0iܯܕܑܟ4&ޅL߷((73`B[q|pU15z8d8=BBiLC YNY"(/7q>EMSDZ_dkiMmpsvy({|=~~~ ~n|yvrmhb]VPJ6D=71`*#ߓ.ؕ״/}_״p)(D@ k4i@\G { Bi4b 0"$-&b(*%-/2M4o6W89Z;m<8== >">>=D=<;: 9575n2w/.,($   *JgT_߬*-ښK/LٚڸEx *1# S  ! u N`X@/s&Hgoa5x>~ 3 !`||iE+kߋ޼ݴ܄܈ܹݙ>Ch,a:M|9\ e 4DF'WR q"dq  [Rs?_IV n!D""T########T"K!UiCoI ; ~;S)Jgd>)`Q7^Zu&^|I\F =dnb>F74o8v2["tzy3w-X]H DJTCgA N~is-u"IYK+Qi^Ef,S{M$HqrHJg.mAU52߶>s&ܺܤܢܳHݐ7ޔX2$,92X /I^ejdT<m!d(S.59'xN/& :'/"(/6<>ELSZ_dOi4mpstvx{|7~~~0~|zvrnh,c@]#WPJmD>7B1*#7G0ߨ;؞׹-oLלWbܦp%!KN,J8 l w 2^,W &"$!&T(*-/1@4d6M89T;j<4==>!> >=I=<;:9D752/G,($   )Fg+kt߶3.ڜE-Eْ ڿک,߫hjY q8 b |BW R:-r$Idmb5{? 8 (epN%2p߉޸ݬ}~ܮ ݏ.ߴ)OG 8li*Ka.DC$VS o[p ^SvGjXl !]""p###$$##<#"t!# s t b Y$f= #Skb4QA$oIC^Lrp?}VD AerhFR@ r%i+X5> X /!q`O 1"{)m07"?FMTZv`reimqtv;yY{}U~~~ ~T|y_vS.  Zq[% c] Y"I$[&(*Y-/42{46|8:r;{<@==>>==,={<;[:864!2#/+4(_$j `RNTd W2|Er}2=ِھU@).1KQC&n! 7 Sa U;*o;R[KYU~ R 73 xox+zP``ސܘktܪ ݓ8B(y>o"> Qr,I?{ c8M EUq; r P[UhA!"""w##%$R$h$\$.$#4#V"*!G" t j.Z00o*es(lx*u=iyKMO =m0m(q1@*g_5l` 1<9Zo5uz3d5*@nvm2qO3 OzX>|hWCe*LoAb#C?wdOJ5dOU݁(ܧ܅wyܑܽ7݅6ޔaC>M[PoELSZ_dYi@mpsvy-{|F~>~|%zvrnh&c6]WPJQD=71n*#}zmkݝڜo׋S5׌I[ܣu43h6lE_K t ~ /qK> "#&:(*,l/1#4H6/896;O<===>==5=<;y:9-74l2x/,,($   ;Vwz7Df߇okٞڋ۲޹ߗY^Ut: ` t8I>o J3=+JT f  C^aL) Fafbތ܄QS܃cޞߍc{.d(}tLssI *5phPg}^pi0 {  E !J"-##T$$$%%$$$?#+" #0p  )H`Svt]"m'$xB6:PAC$wpW5Xi*~rq wP_UoKb^bAZe]D%bHi'v9T$UB@|z*q(hFgIHk ݼ~R<8Jmܟ0݃?ޥ߀t~ $(`%NljEF=^-N3Mh[ z  $*1 9@GOU[}a`fjjnqtmwy{}~/~}{?yucqzlgMaF[UNH:B;f5.(3!0 7-ULޕU1|֌uOm4wq& 0 a8 3 w"o$&('+- 0k2468,:v;y<4======<=<5;9d8w6)4z1o. +c'#}kfiy XH?rdڡ&n݅<2W/uvH qi L"s=kuljv tg:LO B " ch</bT^6ݥO-<}s! ULsFUm0t~0;S/EE6 3A a+m vv1xI !"#u$$N%%%%y% %$#"!baq^ >dX< >Ri EP ,&HAQJ(D50e8pf^4ic$.#|#67TO)hjDo: "tK4?glpYxW%O,_R ]/s?w5xCtQ"_g BY6'c]Nk}ݵi.+aܦMݮ|bav%/p;f]*N8T}ra]N [$Z$+2j9@LHrO%VE\afjnqtwz|}~K}{y`u qlf`ZTiNHAW;49.p' x]O ufZ:"kآכ՗տdփ;ݟ%B@#fI>5)vW   \ Y> 3 q"h$&('+- 0i2468:d;b<=====d=<1*.*'1#3# ! 3Nh}KhNޓ2(jعطNٷڿ݊KGvH]POJ  pJc"MdqlaRC8:E\~=.  R*^okO)%e'߹|&b] ޹߷TO}S'a{>}12y1vmOkX,5iU c "i& >"n#_$%%&A&`&Z&,&%)%D$#!d&j $1b 7'q@l0#Tl;:ZESm f \PXsJu8Wt 0;- 0E2J<_V3(IDeVbUlY0ugcjmnhQ)1+8 fL}_jAt6~tmX>m$.s N!]`a-ߞޘ"ݺ_ۺۥۣ۸[ܫjD޶3ߴ=]3XRn 2DZ).*}d ](b$+#29@fHO?Va\afjnruw/zB|}~l}{yquqlf`ZT1NG|A ;4-'  vh_b߱ڤ]^ֲkՠO|Tݿ<]h< ~]# OJ| :  % k [7iy O"C$a&(+u-/J246o89E;C<}LFak.u`0GB%JG *Ms$p;L~!>F<DR 8H7K8 ~zBJK\6w@RvG(+;HI<FR& =^ia>o@lOOXt8xi]QA* y6R@aT]Y l{OEe ܿۈ`PPfۏcܽ#ݏ~ބ@x.!/m}:.Q_oP%)y$F-eBxSG i#e*p18A@GNU[YaCfjjnqtwz%|}~{:'~6|lyuzqlgEa7[TNUHA{;4E.q'x ^:$ = 'PG߇ݝr-+}5g?ݍMyqK NO|uD X , 3 n ~?32 !# &G(*-/104B689:<|6\txe5r6v 8Mg`H#RsߑޛF!܉ݑtqxE8VbhfT G_ev t^p=8F 9 mwAy!">$D%&&+'''''F'&%$ #7!@H y J`J7i97 (s_wo,6$p.ax0&qZVdw&YY`"( EQI,c|5bue5v_14s~L}2V @gR Sr0|;iG7/FiXD4" V},~EX81*$nl\ܔ؛y֜#!Ր~׵?O1u{Y0 T/s  +Y"@- "$&7)+.02578,:[;?<52/,)W%j!aO>;@ K ^ord݈KdlNcذ,gb_ w` 4 WZ%_S BPL. q&EY ^ R ( |9`h\?7y7W - >ܺW M.ISi78*a@}k.w$J[EZ* x  K !B#$%S&&q''((''&&$8#\!7G3 b aec6o~sD@``y|v.5 },\Mw#p$)Ly uy 43=G? Wm"R\IK3hR`+M,'FF*/PSjwhixM~s6_ ?f*fH/=tVA0g)QS s[O$v)ߏjk۠RW۝Qܸ&ݝޣ/cN"G8FH@'?| @]a=gV q#m*y18O@GNU[ZaCfjjnqtwz6|} H-~7|byubqflfa[TsNHA,;4-'  w]8 &y'((ݥ37dH732) eT x w k6.l !#% (|*,]/14679:;<=`=x=_==<;:9 8163*1.*'&#$ %5DQkzOrܸگ|ECy؄XjۼL!]Htx>F?(v"  J P$B U?x#4;(6Ew o /ED,;]|ކ4ۿ~ ݽ݈lnW.Ro4x-)uT ?S`-/_<Gq[ > nyA! #Q$_%7&&d'' ("( ('&'H&%#!OIr Fb N,MghE M; 8&WEbVU#-WT 2Pwe`-;1]};mp>l9 !TkA8M{3 +e 0W5(&6Qoz2pp=2iN%fFGpP9$_"NP)q(c8;ߞxuܣR Dۆ6ܛ ݀݁ߥD1s?'BTYQ=[+:A]/UVCM $#)07`?FNT [`ejmbq|tGwy{}~~RS~w|y2vqmga[U8OHoB;c5.' p ~(4L^ۭ0<"֜؛`}O{Z7 BI e ` 7R:!#%'1*,/u1357O9:;}<=\=v=f=#=<<;9Y8f6$4}1w.+}'#~ fG UٍNHvtGR۝$,9L 4 >=%[C} (>H7Of P9szY3 H)'߭ޱS}ݴ|^[pgZ-x+Obw)-}m$]px9m9: < b Z"#$%h&&e'''''':&"%#!B5^ 9"l MP:M|(JfR{Ql1'%LH$L~'<W? XR?dA z)m:j=1I|*.~B5VtsE@Ff/j$P'eKOqR7&j5dpFHg0n4|$~H޵0ݰ<ۃ@Mێ4ܖurގ)hLsf(t4IML8f ?S\m JC A f%,3;BIPW]bgkvorubxz|M~B}q{\xtoj5eK_&YRL+F?>92+$Rcb`ޔ&ٽוֲ,uTֱxٙ| Dlp^<G6| # 2[M |"x$&(H+--02468:9;*<((Ek5oToݽB [l" K%q; Jl*EK=kjIW\p.] RCXN[2 !+#G$/%%n&&'='2'&w&%$E#!npH y EdKh{wh"`G88R7v1zT] XaRR^rG\m h;i@Gw]7%:mp5E#!`?64AVor;+#7wK7*1g*{#pH'*lT*slܧٻלZ[<Cܩ)*fA) q1=z % SZ0|#p4!#%J'),{.0<3e5Z79|:;<"====z==w<;:9S7-52/|,(%%4!)   .ARcyW c0ݥuږب؏ت؁=0c|gLjy*XliW6b u V K":CA3  +Ouz7Q9c [  Y}xT.#ZcRHj]"Jܟ}YIZ,LyNvz(df!>|(UcdiR2;~3S U  hu !*#&$$%%?&j&n&J&%R%p$D#! >%^ 1ia3 T028PDwi2~RjhJsg#-Kj$y[u ) c=p == $b x<*v~@!&JK\pD""2;=3FZ0GgtmM KuOCE]eN=0!W:3^[#wDYUߐއݧHۙۅۅۙۿ:܉Hݲ$ޝߟ+V ?1? WNo}H 9x@ 8_#3*<18@|GNnU[6a%f}jNnqt|wy |}~k2(~>||yuqlGg{aq[;UNH.B;D5.'  @#q9oؤס՜fօ Eݯ-Y~j@ wZ&TQ! =   Y q8CT #"$2&q(*B-/2e4z6W89@;H< =======R<];!:86X41.8+'# "W: /`Pڏeݝ\W\wr'- G ) 7C7x:6_u|n]OFDRhff,Pep i L  ;~Z;(#-Dh$; YqN`ܞݔ@ 1}%Z+7*!2]jk^eNNwf&  D[>L!q"T#$$$%3%*%$$# #!_ XVD lX f&4q#%}`. "ia^[ L[2 $8X~ P-9fo.jg0  bFukb }7}{ =+p:FHP G46v;K%|-Kv6{`PG@5.y8VNzx?&g3.fZn ݱi4StxYlw<6' 17$*1Q9@8H_OV9\afjnqtwz*|}~e~|>yuIqSlfa [TNEHA; 5m.'  - yJaܲ/&ՠֿO?uJYxpR gSM?## ` $   ` aD, C "$&(F+-002468S:;$>>=)=o٢: Xޛ -%AC4V 9 CR Rf=t -GM9;6c s 7 W`A1-8Pu9]9Iޅܦ܈ܚJ݆Q43I{=q.r3zd.LYS7F 6C1h#+ {1g8; l CV9F a!>""Y######d#"" eP | +[ G0|0nHkpU!^HN&2'rKz"U#m/9l%ITI$NlAb &,EK{\KJem;w+U'zDA2Uiob?sH |2f!e+~k_YVVQE. n,>(F5> OAo\dݒ5ܴ܋xw܉ܮ%p!ނU96FXU+ @gjA5q)DlV+Sr(tD yn km!'.6u=D4L"SYQ_ydhlspsfvx%{|\~$9~|zXwZsn|ic]WQ\KE>Y810+_$iYIZf~$߸Kث5rIחQ\ܡp96n;gAbO p s tdP.h& !#%!(w*,Z/14F6989R;rW>D>>=<<:~97530,I)|%!tlo| M&m8XfG]٧#ڻ=ߵovn .;/g = z@i V 2U{y-< ,GQM 6  A gRGNa4*pPp)`;I:e:%LjhKj%."bF"X> X  )#h R!!5"s""""\"!^! a?KPA V ^B$ aY/s&?Rh`[Nss@7s&P*a+Rf7rm/6 9byG#/dpR hJ*n \2dj#n FN Z u= {plnrrreL+9J8T>?[`0 ߬AݎI*bݣAޘVߺ#p0{8KY]ZN8}5 Jr D?߯2.UJ:~dc #n*q18:@GNU[Ja3f}jDnqtMwy{}~C~J|yvqmga[UOZICq>~>G>=t=<;:974)2/+(C$F ;0(1F a6 Yߓ&Gفqٚx7/aރoKR?i;O  )a7mg,Objf\NHIUkVJ&( d =ulE >2;uAݨ3ޣ߂uhFD~On~{e:aB-LWGu?^-7 5z7| D  e !M!j!o!Y! !  -Kq a0[c.+L!xIs30\qSM H~[R_8tT[_6]6zWjY] >rkD& ErV]|[/)Oi3E1s 7UlpjM=~r'wAwAtrtxpV28L;U9;f~[Tcގ.ݠuVPZuݡd޲\߶zRA7/tj),a/phߕux߶KIX m &-4.~q}F{z>>>T>=R=~r.f v  qZ L l | r F a|!y{>5  T}I"Y805<0Lg6hHS PEt3`FiM0\E(bd"DkD11DfXCH rG3/Z0COYZYUMC94.-/29>KV^ku &>Vk -BSez0Npovergod-1.0/wavs/gblat.wav0000644000175000001440000001065610273111326014623 0ustar michiusersRIFFWAVEfmt DXdata& &q {)"f3 N{rWTjyf>DzH   jW Nm 4`:k-+[ <0F bUu~8 wq+`"I',zX_p8$ s F& -Kc  U Act EP(m7 t Q f 2 n=Efq[;P;og W p ^  %rZn:w;:.\ Y2h J X /\im FUvk\ l s [ omDq9"K4 <]P ~ ' O8f/}@[iv  S  |w & &mIFLY&Q bZIY ,  G)ZIrL4 [>U" B C ; K m YP>bs@1p' 8  X w P * s3 4ov'Sq$o0 m 6 l 3CNjUo}uSMA{2x8 ` * 5  6  "[cH g|s\gVn U  -  c 6 - 0 W h O%S{LIwV}82\'  @csV=\xPXt/jr9 2     b _5C6 K /{LBzI W  [ | N ( n Y " 9B>>OJ6M\]6!rMc  ,0'O*+k)D^% 2  o xhnuW#P{\CFl0 = o a  9 c z v8q`a} <3l %h<V n / ` %&7z=N;%u%DT"r"x w?|sq~veM5Hovh+ T u Dy(pG1y3o|R1dUF   '4Okjuqi*9?@)I*K0P^c Ny<pi8U %Hv/Q5xlMS)I&*]2BuE(j'I[I#2xA W_qu kge#>eKs9zwu3;c~n9F86# =?-) `ggm~T]xK()fwU*DAbbg/{KrGE ~Y2^kUT|vk H@`![!i$ OL=l%wSlf|lX6)mYs)o/!7u28ahQ,$$ h:~gV% Xim?Rq\-=d{MU6IZ^Rm)Tb~)Sa-zo]cz`6`#MaMWK*82FA8_-[N:Z=s W3#HOjC,f\::]`A3[u5"P7\[- ' B7&`RNRK]A2&bC H?A,s.'fliB v!nu/u_z`,&"n/2,E7{#IQCF+$oB8<]6,l?DoQG!@7< cLqD(!,QYtTPgmLQI~Po? rrk^PL] X z ?X"&~kK\Plo`.)/%#G^Le v% hY(}(B 1%ކkݱ:z:`-d2S?Q\Rwbqް*~#=!f [f_o(h  ; Up 8,6AAsu"Q!8\Z,e,O YN%F;3߄ץ3jt|KY4G^Cye1i/vc 7c `h*iv޹6peމ܄c%޲B?Uݙ/S()]; /Fzٖހ!ֿ@Z*AԨa,s6$>p<9u>/Nݨίt FݾKk,Ϊ tyJֺM[vGIҸ؃ʉ#D|%^PA"`[ZzY8ؐ؝tҸܲt GM'.o(ʰ+̰v̿XQfÄ PfvEqзQ=iȅhsIhC Yѧː.f׀?}eb'[@̡֞~ЈֈjWiۍ4hs1!ؿ 1(Ɇ0?~bkpݲSn0ۃD4/x8V Jr#~ԃՈ)vߌ%AyS >YnJ}bs?nQE+֞,N N`  6cU' =W&RIlL1Qe!w#VL_[ݬYMx^|ݚ[z-#Ӷ][U3|%OVq vXkulg=MLP|.݉<}kvC? 3O _SV*,ֆڙBδa]j-hGhE @4A Lo|+ 3(Z C b d( <)JU  ")   C ]]Xa^؈( KafZav4~$wEVE1jS<"(.!^ F D6JRd_E-q kn lMc  )h1=}+>!7 0 y@JHA *]ڻiN4זа= l  MJ%y%$%! 3Z] n_vBU -"!#0l7h fA  W e79L7wb-F"F kx J- S٧ԇ؍"sA orA϶ڡVW-صLĿ}ۺͺ4Q;k\E[y[X"x#';  c޶J& B ;: RsVNL!a/ m& PݓCxdk)k--D92+EPH$M2U8E[&-H},^ D r cmJ 1#' (S$ 2!sZ%VB/M0!N d$@=3;'7$@q3Q0r. <>A\2E4Z">&y*o* X`.0+=J++UpJdGI 7A0>e4E`23.!B)?%1/"9**/< 1&2%O-R"R$H $ [3'&["$20-17N'9J:$3 '3 4vZ(&=3F-(=z&T5| S8CG9)r'PV!% (#4[+: P9>bIW,/(?mx,~ 5 .$L\-W+It(4TKb(Zk0rU%]%? t{"D. #%Z\+VM?JgGQ6[_F[e[hAK*@R;g!2x 3 68,e$v !$5 6@, x+R.7HKXHgZLrfN]UMdQGV0 (x~3+)84$): +*4*%2,(97E,-94NMT2_Y.A@+P"HEJB;L;J*65VIBYRgTYPnNceCRKh9K&>%UP P!46$W6 !!Q5FD*XCI:7!3  % 4/%_24((% F FzJ!Q *z)/ E 8 ,N]`ϮQžs.1 m  . EtD<5z "2 df2t nZ$j!ӄαz3m稾ޙv *#nL#&$ =wn5* ux^`IL_ڍtˇfE/1:^"'*dE!s|MNimEh{ӈvY  ` X }; )G!, _ܼ%%p  lg klɥϨ{J8uBZSHoxE9IԾyUq  agܜ5њ\Nj6^LCׅ.ˤج =߸tԋ-ÐoтfX ί\ κ̭ڜ.~ ;KJξ ֲ*,kIڍCE[=zO栗 šs1-mP ( y f]M3)d6p'-Jtʻ^w!:3|E] ʄѳeֳ;1,ڟtY?yWʃSp NB^4 ;M (0,BCרQs @ 8I،41Wv NXa m?+ [v 4 '84$/ ' {A.z W$&f ^ S f?5Z  hSnq1FL6 e) b =Rs *W:Ͳʲ݀F܊˵D}v~-Ԑ=)FLhٸؤ4i$nݝg+<ܜڌx98%;y׶|*a[ P i?: "#m/^ mqWןۮ;(H}٧He#űz=vuĸׄ<܆f,=|ڴ ?i>16z>K93 ,5W&z 3$o )I'( v w/sUhssOaP_ Q .CJ^O14!8Z,9/+1/#/.$T&D){p Y(H%Hwv . Gߑ%o"-WhTܟ*[~$OmJ~qh@gw $#,)96%*?T.@G"a&,)-*j0-*&)&\,<0"E C$`< /#!k3  La&Lv 6y4GI668o.r)`,3s!f+& m@ "! /U[1.(!E, d. w - S 1[#I,9((m8N+9"FM!bXV  #Km+ } * Y;^V ^ /W#Gkce e& 3  XW- #uX$#0$C kd#  Ey3tj{ ~2 FshP$j n!QM Z? V  k1g,$3/3)'0#G+oGQ,"'.j2''   __  @qo|%#F*$t2&))@/"2 # !0)r.m% p.)8&7-2%"O%M(204v-) 8Q o=pD "#$*%;-^(,.1+V2>.P1.6)I)254z7 ?{)#%4B3<|Fz5g979A@/0:1*J:S5k2J.g*+ !!p*0c&~;3o4x5N10B' !$3-,{%m ""QN(**X V&* \7"R&a.$=(. l b _ B,"   h!"+d" % ,r;}  g!l)0'7+;O-O""%(@0@'F$F({%;)<( J$ pl&*5P$ 4 tW2c  P.) 'j+8!3%2 9#7)K#"u  `#X^5Z#vnH'^")~(#1`(p&$10!57)9;%L% )QL&&!#%>$ Q2?p# +Kc& , 'd')ZL0/" '":)p$%*0:082sB1=I8)F&; 4zyX k" *%00"/.0<$u&   3U$ )$()U%'$2i/i7+,q+#~!j   k _& kCB ;f M %{]4 1, T  H OyN)vE0E"&$.i,)f!^X< @ $k kG ?8%aj~$&'"g-$Q#"% ,h/| Q U9!/!Z ( I  vcgB)  w% z/7 2 \ )bT$ *r  75S1\ i (0% V%a  V_ n_d K# w MS"@#e$w_KI|"w!#V;t 9$*"!=&A"N2W!| q+~'#w^ 2 :  ) IT mfD M 1 \, U-N>  "k we:i  3 (; mL L/":_ W *Iky T( 3~=: B y p #    CN 3 Fo '- n <  Y` K<X?I  5F>w 6& eEk''-G%I {   N! "  *gm 5}  / t ! hDFBG FR}b{ -Wn 1d< > 3Zw 5 d R ({  K  c JC *&p&T!S3 f~J + #*q   dy 8 sr /d~(.9 W^ {  ! U ` biW(k9fhPxBZL H  # ymC m98 F >j yw = ~  ?F R . 21A 41% o 1+7w f4q\ 2 +?SSJe P ?<T-sw0B  }vrr ie sF?( (| *MgO   m/h j k6"p,RW$""#!Co q#z'"1"h!!(v!!+ \ ` )$/&_#.o$ Kn%gw= I' =; m1I J @ # X&<F ~3>2;7l %EfzG4AHuAuRZ 2aX?} d & > V  '  5 ; b R{K , Id nLc (>'`B \ C^ NV1 (  'M5W^D"2y{KwL/{L6  { <X W  w  | Y[*/ 6X /4 b %  gQ(6\f`n$eN:  Q  @"2d O Yws)bq `F  j o~ UW?, 2 Y 2 ^ 2Jo . !H IZa4wo4X519xNAi0lO9{:l=~KsT.FV<b%TlaH 3 RlY 3B )Ek "r5 N4f T  ( m2 v {  L  N 4K| 4 l /  @ QoY)Eo?w   J  o|G<fD!t w}% A_ F`H]aoIF~ '! F2 wf0#02[A>J%!hw  e = D YO 0 N n  , ` x ! (,),8 g  < t U  ) W @ & E #  Y #Nb T| >v  #  qR | m   D )  K  + h w h1/ &f gY  P  Z$9~ /  l p wMQ I & ~ \ Q<r0SG! Q  $4po^E_f Ajn5r(xEB" W" A@vIIquv-9^RFAZs7G@Q7cF } "  m ]$A0yI]a (hpr2!h:Yyg7n#I]# g5MW#cWnC-Z}qG&>K%s`D?Qj5WfB~hIk{-+/[Q_8ki-J"2P}@d-g.W N5).&pT gJ[N}fNcr=yb{ Z7_ &lY}+~6~|=qYiW<ZeI4\}&zJ(TiF+`HI$T0 5zm5q@V'-AQ )i; 3?@A cS$ r >WnmD9^"M<6Ov'D neIR}tH C,B54DG(  (w5fW0~XsvbAc;V N%17B~$AZTbnqnt,bjEeg7Tqw'*wm B4y5sP Ed49;j>*M0V(sF1^ DU0z=_Lj&W-E>L X8j.'jOA >$ hER i !Z%UM|D O GN _Lj  i O@,NB#80"\s[{_pxc)xaSx`&a8 {HQ[EL| UG5TF4K8`(t?>,KOj', g*`$M+7gf9 H S Huevq~>Njs0<mEe*F(OWW,&so`mW .F}H>lV^{-ivLYH TTNXi!lI9JQfo"\%<oYiM{L0PO2f" -@@pn"-kW)%<2Kc%>6R5F7"-W JgJ?xxc u%00mas_7c@e>$C?O6Ub G s!DT!Cf]l$M37BT2M) ;|@^E;}>eO vgXHPoNL]~ &*6+`K= HqOekP_} dKr3Is}`uY;R%J(P",bdS`IfZoVF SmdnTGf$?#S".RWm]).mOk>`# cq:  Uhb9Umq`.*$F?nUW7)gZSF0-`b%q%8uB}3jxl}`)s( >-yPvQ.*v`*NyIygV`1@{|Tm ? y.W&(dfrrsn[,YD3{#}7fP>}dH+  %8#Jq5"P711/L #sqyujHUiFVZMYM=r?GObO=wuU^gzB`- -axp`aplrw              overgod-1.0/wavs/launch.wav0000644000175000001440000006305610304060376015011 0ustar michiusersRIFF&fWAVEfmt DXdatafD6^LUE; M v6] \. /f(EO|H!"&#s $m7ٛceOE '-(60'N+)}>$77M7[Ⱦ?7A7?7x77@@șҩ772775@>Ȣ@{Ϥ7n(7Ɂ7t50>>&?/77>77A?ȅ>A$%"z#777 ?i7>??/B77I6,7r<>@:ޔ3777ه@?@Ȫ777779 -Ӎ*?@?7[A#/$xCV47Vp1@?@>1_777773,?@@?077(77I???Ⱥ7F Rc r 777@>L??[: 7776'@/Gd?>7a 7f@?75?[f7>>@@7 \/M77???>< }77'!7,(p@??7@1 777X1s ڻML "7z =1@|nt[77!>+m(y"<"MD@S .0YC' 0 @ȋxm9{ 7N/@77I55Vϰص8f/a7# + Ar>ȲN /&7`a(ٙ@>927R71j с3oփ7q%T)  4>Ȯ[ ' 7#n5if@n~&/j ?7 +7 hװI@Ȃʜ4t ,77L)bA>?6 77x(? >ȵ~67 d8v!{ Y{#* +8CG͍@b *=  $W@>&7&$ 4&`"Ϋ? 34VJ$~(O??# 777 W@?@Yk$7?!7=&D?͞ڪ {/7r%?ȱ>&+Yd.(377+l?@>@vа7&7g() n???"V$"/#777 R>@j??*{777|.-Q&???Պ̅77777k-@?>?@t4777b!? ?>kg'77 5=z0n$ $7Il(#@Ȳ^'l+#*#x@ N w52jD#2&77$>@?dޑճ /7&3"0$T@>Ⱦ&v76/sΙlV?@?Ȏֈ2L7777o5@ =?r)77777~X>͞El *c.P6s5-$ k1??=<#774* @Ȯ !%I|$ *y(z f0@(RM *$n KC2mΓma"6|g2{XR,7;p|v" kO;y %,/; z6w7 ? 7&6 !ݬI^$+Mk7&][ SR $777 ݢ77%anc*fi# mț#&%ՊJwȐ,zȄ77Z~7*{7 (Q*S o}/:/Ei7j7h7tC#ݟȠ` \7\7Z76X7LȮН.,M7)K7J7H7v Ȗ 55?7/;7_3gȦ T(07/7/7'Ȩ! "777W'Fۨ*tS H: 7 7 7 =j ,23\ q3,+6l6)&jɘQ !66666*ɗ,M&[.62S66h666 :??CCɻEʀ66666PQRTUWf6666$yaɺXcefgjɖ6.66*6Ssuwv{ɰ066666`4Ƀ 'x6;v6 q6q6q6(ɒɖɗɗg6f6c6e6a6[*ɤɤɧɧɨ'4B_Q!% U373263 Js J.me3&$z `> Okw0pj@&3#!pe0 8qOw`  gRzAU a|Z<n, <3h\ 0330 O $o'!@ "DS222٤ٷgޝpT$8;A+&fGIu'u2k2f2)  ض6 ("߯E=&ac+M͞aأii 8 , %%5 $nn$T"ο N#\#1U@/$! %0,E=-$U fp1p1n7ΜΪX1D#X/ٻ\JՒB1 /#$W .1n 8/ν_ 1%p-'( 9ro! B)+; !ݗ\3aCg+(0"'yޗ0 d2*R< ܱoύى0'(f u!y04Ւ(leBZE!~ܰϳ 0<0-)f P: y  S!ߔ֧*(#{D [D_ۈ / >%- Pq>.l cfRG"|!܏"x/sUT}( Ѓ% * [ x:c :6g@vBZ< D [(tސn $#; Plp޴  X-1  f+.^ f\޸Sy+#%r  3"<sލ3" юѦ 5)uK+%  #{ܫќ";I.FjC.D b+Ѹ2U#..>..8 ї+----'C+------3459;--/---- Sҗq߾ zg-----N }Ҁ҃҆ n-l-i-e-ҤҧҨҬ҈ (&L-^H-G-C-ҋ4lX2u!M s -Z -y$ - ҥC  E, ,,Y%q 01 nG :%, G $T k!^BޒR "h*r|}Ӏ,,},y,x,fK]"y HFM}F,C,C,?,>,%'Q ', L", ,*#,,Ӗ,,++++[ +$+++++l!*./0256++++++NQRTVX[z++F+B++m&twy{Ԃ++w|+x+x+u+ԓԔԕԗ%_+^+cZ+U+R+Բ  <+7+4+2+1+.+J$. ++++Բs7yja*****;'!"#՟ *:*****);;>@BI*****In*^_սddiՕ**e***ՀՃՆՀx*s*k*i*T%p%գՋF0լx N*K*K*G*F*D*B*@*>* Ձ߼'*&*$* * ***b *****))  D6=&))))))+֗0045)H)))))) KMֺPUTXW)s'))) 7sn֐)*zxւ)6 ,r)n)֗֘e)f)%[)Y)L)#q/A)A)`.))~ $)7) ) ) )yA  ((% (c#(((((F *l0l 6;;ה&~ (((((((TUVYZuۏ$(((((drxyz| a j$w(t(p(p(~למؕ[(8U(V(BEe)ݻ#5(3(Ir2" (Y;w sL& 7OE0D?% Px '}w : -PD*|SPaޑ#'$Gmo+# I%eR N S W - voݔ =^_'Z'2W'X&xR3_'>':N~?= .RKx# o H6y^Ai>|O ) K&z}40 =!#|<8aO.X & &!dYYٟAA\&&It۲x!$$jDn t~ %68H##1x\v (*ܻ-.5###"}l O(0###KBdeMdF""Q""sHݯ&$)V.+R m pu""(""O "i 0":R!| O !ݩE"E"B"gA +"("&"%" V"""""" ݔ !!!z!!!Viގ"!! !!!!A,ދ2137!!]!!!EHJނ PTVVD!!!!hh.{!6K}s! }2'&U[!R!Q!P!L!L!޷޺޽\ޕ`ޣ4!3!.!)!$!!!!!!!ޤ@!T ~{ c/014ߠ  awI߷MNO \E B ehiߔmnߏ   ߅߄ߊߍwm m k k g f d ߢߣߤߦߨߨ yR J H F ? ߍ߅* ' & & " ! 5   T  Ov !#&&)=@ABjGA8n F \bdIgikFXonlh+~<TRR5BA?)8V!, fY<dhK ?ss M{D@hJ%(mhFI  xNubI< f y!\ R v.s= dd~g=yYsz ? K}I7y $ AK W  #y)cC 6#E x  {  Ln + ' v OY;8."= QgT7}c>: yi(q3~ d  / `I ~bJLf A>? %Dt # | Ywq=jR V ]2\ fW)/,/0<IOSQX  4% @_jjnOpsbFC7$ ljh @}` Czd  O cO i7%wG{PFn  c5Vt|peY -W 16LL g) `<18~ yHe tL Wh ;k-|M!XcX S &f,K d[jd&`r!hF4  L !sHUW TW *keias g? yM h&G+xX#BL gfgac {:' Ns G> ;\w F:Ao j h63a;m cG B' _   O w w"! C(4lJ9T, /NMRY\nHgM&j ;t^] wQsrqoghXY{VRTPCBA<\  762>k3/xlm|bt pxu{ 'B+.1. 27bC-K MIIKN Q `abghfup f {~yywtsbnh\`a^\[Y`CHFGBCM@; *.V-[*H'%!>&r    #Q b '!""'\  A 7jhQbMF S{ Ie @l/ )tuoqj2hfYCTQONNHq=76k  )u I ey0[ Va 1  p f e* IOE$& O    "#zhx M/ gia |N>X\`$ n ;csbv  ' u<A5 `vt `_\\W `uKFdC*n OR' ;*,  S>]3 22 =@$FI  g6 #d=aVL9"eqb, g )0k{^gdYUe woq!.  z4 :sk & p}`0M  >S<t *j)Ow / *Z XQ)2I'X7kh { <%LD&  ' 9JP O\IH nm`XZ~3UA3 .s }}  j:ir .e Ob_SJk:q &V4dB^R+p  's<" o~yWv/hqSH$-)ss N[*hd 8CU,4V2Vq [i?;rb dt?x k4AN v,f_zfe= y4V LJw E<>:E + Z|f ~ "  L\`E7U]@~ ?I 97 ,* hF&""!j$  x0n i+TE  !2_')L*.K    UG2A ' vR2[> 1;A't=vsqige$_<YW3;bN e Jx{E@?<w2/.I.pS&w` JE _ wt'@/tF?w4lN%q S<  ?E ,K(h~ 1 ( '8<8D h mM TfaV N ZajiXP_  O_*J` Rwct c [9 __o vD,R~ u ' D:R   3  VW\s~_ $L; J *X" J0 /K  ;S G  ;63M$P &L [$ Np>aC.p(*l_ Y]}k Ip,uj1m0z7{! f/ ;wr  ww @ =o D %x\ o \ FOg` $q$?1 l Xp"7|1_ MR~$r:kr +~ !    r 5X_ aV !g!$"k%REw leyS c j] 5 $/ - - )  J2     _ EF`     Lp $  =X  K  ###& z 9(+< -0  BV  K C BBD|wKIM O7  X \^^`bbcec - V Sq rutuvwz !  Z1| pz Y >0] m j j h +g x\uh#zZ#; T Q5Q P E !UC 6 ffa )4 . {+ Q) cx    x  ]*  H | T @x :C Z #   9  #$%F&()h  u}>-9 =}k p?w PQS5  z q RI dh~he : 8uw{{| P} 1{ , M  S ~k k i I  3#M=sG%v  .u|6e[YeLP q-,Yj' R \V h   {xn-K3 ><<<::8%s.-^+)('S?TDr/aW?   4ud`MJT'(**d,P6q /l8:[J>>AGR*IrMM)Q>Rnl]0_Wagef8honMstsvgv|pL}}{zy:o)pm ljh4>``*^\ZYKTRPNMMMIHH;_\;=#;I78432o6*`_l  !>L 3  Y   k(L } R/=^6Rf !"{ WI5;a#E$3548:Dw>%YHVZP}\ 8{bSaUV >Vbs'WtjO^dNJOQ!6n0xut}+S}gJu|?khV:1n:d0C-_]^DZxZ9@#QCin6),t 4G/f6ql'7"_OrL5"I5yJZjQv^;RIv2-!t,lk|)3b 4"#R%(d'!o7*;22335|z6NiiM"'LBEHD VWa>u+4^;pfji(Dr,X)a\A(o23vyx{|O;t~~|z}d5{5nmoln'e'k}DPx__p$/Zw(b2ON~ .=$tkbB= gC~G7xMkNDN,Wf<hug=Q~[,=#+850   UDwNGz+iV 9nGr;UU~7 &50/|=g7hRW-Oar9  #js:Q}1^qc6q [].]GgXeABEsikS.n/y.p1x!|H }.l4y) SR8OkfCPHr #u7x9FBT0@n7 iq]*%FD~Rd8`jk2)b:664^2PI8K{'&'&m%""sJrg9ke;  * K<: g JxqY~"x!!#$#*&%.\-1106176n:<6<??A?IhJVKrLMMN-OiuWGWYZ[[\g"@2dghgiijikk[ 9stEuvvwwxxyBf~v.@ t[rss R4$jidd$Q[L,=dQB/#!t!SU#QR O5O(vmIFFDEC=>~;:;:8:8?K*3>4j.*i=35'@e{xE,QkP;Dl1LoL)RF&y{thR-^]hP|\ -94KDi\?FjH=3oV%k|C1 k  =L39;r=1)YGS1/JNxWoj\hUu2SXXYXYSS@;(;0IM90i q/jx/ :M"fl@?3A>,w~6pMh'rqzU!"ra(Fzs\LPGO`iqC Wm\lDIrS !o\ +4/TA.}J`4442i?2HqC3 "H%lN<#}M`Wv.d1hi$FDtQ+ q4NMtE] GsnD_pZ1"6U/;|bm2dj>4i},;y-".?h'5j5QRP~$9fLv7>NACJC>IcKXJMsdQUPU =tX,X\6^+yGaad\ac{nBikS6lkogDiDExwvwxy1r{|}[f[%Dx_wv7ustsrOlklijjiihK9Ub>4_U_NU\]\z<fv=dTxMPQQPPZWaHGFG.EPCCB,A+<><):;;:,!972654"4100/.-j'd(c&(%'$K^i1cZBQ{G  .1 'Hc3{b (NbRRlfd67]C&-ZusG)n[VY'Gq(`j($A&(B:((*(gDi!O621123T4s453q_}CP=<==m?>~_z{8Jto[JK3u[m7QiT^ytY!cAV#^^`P ep9VU A./kt,[{NX0rd4$wux; dmYm}~~+9k~}||E/cK "3=ttQRKm1 HU'<kAi*Q:2`4 5B^7C >L V+(  -K'@(!)  ) )5+% *          overgod-1.0/wavs/longzap.wav0000644000175000001440000002374610276414114015214 0ustar michiusersRIFF'WAVEfmt DXdata' <  !""$%&)((*-///0033PRYZ[\^^`_accdeffiijjkknoopqqtuwxy|{||~}}|{zywwwtusrqoplmmjjjfieebbb__]^@=5531100--,+*)(('&#%""! 69CBDEGHGKIJNLPOPPSRVTWYW[[\]_`cdfehhhk~|}zyzxurrqpnnmlVMLKAB@?><=:<8966542201..--**)'(&%$   -567B@BCEFEHIILLLOPOQQTTUWVZZ[\]]``deffiilml~}}{yvyuvttqmmljlhghfNABAA6724111...++)*'(&%#""        "!$$('('CCNNNQZ\^]a`cbdefhhijkkmopqruvyzz{}}rrqpmolkjighedecaaa^^\[YWUTURQOPIJFHECBCA$&    +,-.120355779;:;=>@?BCDIHKLLONUWXZZ[\\`{~~~}|yzzsqqpnmmkiiLJI>?;=//*,)*''&%"" !        !"!$#''-./02245==>?@BBEDGffggttvwv^]Z[WQMNKII<<<:86645211..-+*)('%#$#!   !"#)*--.0118<;=??@BDChgikkxz{|~|{{xwTTRQOPCC@?>0--,)+'&$$#   "!#&&&*)+--/03245889;IKKMMPPVVYY[]]__bc~}{zynnklgigd][\XXXVSSQQI ۵8*ܻwۃxێvۊۀ!+L;z lݘ:ݻC50އ tG$ $*$" !$$$ $ $ $#$ `b \wOSۮd0~ܐ ޵5|ߑEhoN^_Q6"Zp "#"#"# "wVV51V E!jpJ~ܕݓ܃ݸb݈- W o mw N݌5ݯ#"",""=""Q""d"CI9T8g"\"W"h"<"  }""n"+[K=AK[*<0  ޸~c݄ݥK> LF0ީz'a H_" !!#!!W{'s$xOK&H*O}\7|[L 'Ldu- (18DB<,H ]'Z/Nmj"  42~<lSM <5 P ~ |R  c31PA/-V0 ~` 4< gA Wf/umz r 7! u  i E = $}~O o8ZJJX?i%, ~@k9bqnT6& % :/ZZO  <`~mB M~ : o;#@Uo;- Zv    l5UEKFJ:`  I _ sS Ge  Fv  Z 1O }  Gl7}"p i jenhnhu_l W  6Hgs[[ O C 2       . Wu V G > ?<=M |R qk K " -#*163!0(,)-(2"<?!;/)K(j @8 ktwg b c n  # 5 ? OP  $ = R KN[epy}{t^     %J TH.*@i  ' 3 z C i O ] T W X U Y W T [ D k *   pm% WICa*0}Az h =   VU[+ $ D f]^ I|] y Z 5     - M l q _ /} # @ YdH    A7$1-.1.204135-9*@#J N!UY ~  j  \  f _Ni4 [\&|P-z6  9 M f ~ u P $  ; &"   3 L Ai ? ~ b 7   *@\tt` b=2,V~ 4.7.9292>0B.~ n  T ) @ 3 8 6 4 7 9 1 ? " Q  n !5?Y"|vZ<&N Qc_L'EeH;J/xU4P=.OWr2 2jT$Q%[$ckB@T_zjF Yyjnpc? *-jXnA  >nF" n?OWJU`9>9dq-p <D=uieG WK")A_J=gUJ- N }Z  0^ja I$770;/?0C+H25\e4Xka.bkC/,VrLm3 ) 5 d w N -  O e s } pEo%&Q|aQyf|q#8m(E eeqvXv/ |  r L B / X  i 7K C ; W  g  \ +8t 8 >N 8 @Pc%nYPY] | 1Ru ) &AGU]s  T4 i [ E x (  \vfN D r 7 \ s u c  .RTF,A6;A)]|~Y  |\_z m ] 1 ei=AOBB_r p 1 R \7) Q o (dU - * U m { Ssdbr^u`qglmlkmhy^`uD&l u )' 7 R : i  J o | q r } x { z y p e _ v U  j/j 4 d 1\C  2  yJ]] w  /~t n _ A/531= Yl x , H I 5 O 8 F @ A B @ @ > > > ; @ 4 I ! g SS*s w t } [mi   M #K< y r Bm A ,  3IkZu G            ( e { Td  % E E~ldm :   1 \XF- ".P| ' tteV H ; H;lpS ' U h    f2 ~@ 6 $ Y } VHc@gDbL]UVZWZWW\SaPb\Qz+k x t ++/7G B  Qb 0 \  { x f / & 6JI/    1| Q \ j  ' 8[h\     #u0YE t1T9-   " Q C 9 N 5 J ; A > @ @ ? @ : C 6 B 7 6 J  k  2i    c?^^3P  " 8 N   4%[C1k\f f ~ Q=DcwQH Z %_2!@eu` :   D }o T_MM Og uD ,  T|7Z DU  @K I?&4/04.5246154654:.F'P$Q)Jwo)FdR .* ^ )XP - dZ3 i  MwB } Mv}~`)e    `"@Xv0u01ua 2+Yj8:%overgod-1.0/wavs/menu.wav0000644000175000001440000002477610303133270014502 0ustar michiusersRIFF)WAVEfmt DXdata)7Y 1Phrtk]BVzy!q,s1IB HZD :#| (\9HF|xBv;F1 (7([Jvvw{n5 = ) t ` d z|K(p/$`h# < 1 F -  Vu^z+' G#pX 'D  W E |'n?U{N':~6D~5k 4   P 7Qi3~DkC95V. ^SV~   ).s>R^z'`A b 1d%X 4o^ _by)xI OT 3  dhwM@lJ a#E@(*< b ^ L #!  1 )>;UFL+0ic$v <u 2 U : }29H/D:8Z |9 cB  'nU z~4!u2aMw s   U '&YkYr/8 Xk . 9r}= 1% 6i _  v  k ,:*jU Cb!0cwJnc2 r   e R@^ P}F , | t +%# rLaxp`&l)/_K f z%Yq a  (jwKs@=M55GB2!  D q2t> O '1 MMYJm9@U /` o  ]0` 2  G-3qk  9(k ?  cjQ*7In; # F <  i Oka=5F Q@RjsbIBd? H Y7x % Mmwd{;>{Q ~nu  (  OB 0MB $'& l I ax) N:}(QZm6_ c<y1q G 3 |ASib"-/s]+\5\X" 3 p ! & ;\ (`r*G9 >g % 4A6 7dG,5^ZGEh D7_8L T  C|cLrn{>!kJ/|fe' l  ` h RP( ^4&Fxd{>e  d  k F p [ 3kSpW;Kl]N%  " $  y [4}`=7UYjuvwn)d+ y  Q#C gU)2unkaK28tO4! 7 a w $t`(wpw]0.qD0 f b dE g8M _ ]SE*a U K K`d|s6?hskJo.x 2 (w<` a1xtH)]{%w [ +tEkm:R"1C  T{ !G5\t%=YE*;=&u*`Y7rl<^HTrUj.6+#5h/J:3 1>%>:gQOBWu"0,UQ~USDtYFuEb;id- "Y'jmh.Ew$ }h+gR!(LnPO64Ivd=%;~ " uEoZ2nvE^92@yI0uvW^J@_)_sg_{S ~Uiop IdaM>D 'AM2Nr9\$Mu,Po(uWP V47KE~35_l ^7qZDVUx8JU?LrUe%OjeuhoC!}ap^; Bix ~0406ra ur|$tZ(E` %XUT5G)ul}'PW3,?Vj -9Up xM^>wLujs76&=F%P)O4O@s`daQA2_M/R$hLhn59-\lV$2:mgVJ'>XaQdl-;(l;xxv YC7+"%4Yi_:AG P > 2saSE@Qs w\$yp#pp4>!Uvfal"Z_OMzM?3x7 }7^J1,ewR+x>#BY2Kb6{lCacO.q:*Q{X;be%dQ$@<)j6/` |_C$)vjQ7b/2jdF?*p>}"u~qV+7t'e=S7w-k _xk^N$7{5Z20hDZIo_WQC!;AuL0,Hy PJ4xpUGC@6=K" dHAY]:!duV?0,2*>T+ ~]Uk)i/nRz{^>% >Z9*&!si|6s#a>hsfH'?bC764#}BV-TdS6?jJACD6MHDQC&BpRLOPI,U<4A3Cv[U[_X?^2s$1$C}`^cigP*'g*i"Ehckrs_;/m#] Fnlqz{mM$ ;rR~Euqx{]6ByH|Ev~iH& !JAu}tD uU8!0S;k{u|nB cH1-<]5aslr|}d?sVB=Hg0X~lgjqvq^<{eSKXn.Ptxi`chkgV8qa]ez)Jkqc\[`a^N3~nkr(Cayym]VVWXVF/}y&=Wl|~pdZPOPQM>+#:Pbourg\ULKKID8$#5I\djh_WMIIFE=4!1DQ\`\ZPJEDA@:- ,>JQVUPLCAA=;4* *6AKKMHBA<;961&  #1;@CA@=86730+"   )2799632//.)& #)..0.,*)(%""%$%&# #      overgod-1.0/wavs/minebang.wav0000644000175000001440000001703007735365566015335 0ustar michiusersRIFFWAVEfmt DDdata}}}}}}}|||||||||||||||||||||{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzyyyyyyyyywwwwwwwwwwwvvvvvvvvvvvvvvuuuuuuuuuuutppppppppppoooooooooooooonnnnnnnnnnnnnnnnnnnnnnmllllllllllllllllkkkkkkkkkkkkkkjjjjjjjjjjiiiiiiiiiiiiiihhhhhhhhhhggggggggggggggggggffffffffffffffeeeeeeeeeeeeeeeeeeeeedddddddcccccccccccccccccccccbbbbbbbbbbbbbbaaaa^^^^^^^^^^^^^^^^ZZZZZZZZZZZZZZZZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^_````````````````````````````````````````````````````````````````````````````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccdddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffggggggggggggggggggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooopppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssssssstttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~overgod-1.0/wavs/phase.wav0000644000175000001440000013447610276156362014655 0ustar michiusersRIFF6WAVEfmt DXdata,?LYemvyrH3  !%),178>CHHLUXZ\abfjkmrtwy|~LF2/,$"  =MMPZZ\\`accklm}}}{wyuttppomkjhgdba_\\YYPOA?=12.-)''%"    &'*./2144777:=?@@BCEEJLLNW[[acbffhiloostru|{}}}|yusppoihea\Z[XWPMEAB>;<8877601.0%%!"        $(***.345;>>AAEDHHJKQOQTUYZZdeeiooopuvxyy}~|{yxupqnoifffdb^`]]\\VWTVRONKDBCA=;:891/0/,*()(&$!# !       !"$++,2544:<<>=ABADFFFKJMMNNOQTTVUVWW[Z^^__bbeffjllovvu}~||{xwuuttrnoomljkgegbc]`\YWUVWROMNGDF=>==:7450/,-*(*'&%&%#""          "$$#'+),)-1221699:;=@ABBFGHIJOPPRWWXY[\`^acfffghmlnorsuvvy{{{~}{z{xyvxutssrqrppokljihgebc`a]^\Y\[YWXVVTSURTROPOOKMMLKIFEE>>>96801/+)((%$!!    ! !"$"$&&)*(*+,-.-.0201467877;>=>@@DDDEGHJKLMMMPRVSUTXYZY[\Z_^_a`accgihhkmonppqpttwux||||~~y{xzvtsrqppqlmllikhgfededb`_]\^[XXXVVTTPRPNJKIGHIEDDCCCA@@=<:;;:855444/.--,-)('*&&'%%!           " ""$'&)'----10535566;<<=CACCDDDFJHHJJJKLLOMOPPQRRTUWVWYWZYY\\\\^_`^`cdedggjkknmmqrrsstwyx{~~~|}}{ywvvttqqpoonnmijhhhebcdcab^\Z[[YXTVSUSSRSPMMLLLIHHGGEFDFDCAA@>?>@8;8:79764331302,,,,)(&&$&%#"$                                   ! " $ " & $ % $ % ) ( ( + ) * , / 1 / 0 0 2 2 4 3 5 6 7 6 9 7 9 9 = = = > @ @ ? ? A D C E H F G I L K L K M N N P O S Q R S S S T S V U Y X X Z Y [ Z [ ^ ` a a ` ` b b c f h i h i j m n m n n o p q q t u u v u x w u x z | | { ~ }  ~ |zz{yyxwy tssrr p mlm mljji gfe ddcc a^_[]^\[Z\ ZYYYWWWWWUV T RQPPPQPMOO M JIJHIHGIG DD ACAA << ;:; 373433422 0-.-+,-+* %'&% !!                                                      ! " # $ & $ & & & $ ' * , , , - - . 2 4 3 9 ; 9 ; < A A A B B C C D E G G G G G H I J I J I L J K M L O N O N P O Q Q Q P R R Q T V V U X W W W X ] ^ _ _ ` e c f e f f h g i h g j j j m l m m n o l o p t s u v v u w w w { { } z  { } ~ }  ~~~~ x|xyzxxwwv rrsqroqoqo nkkjjjijih eccdbcbaaa ^\][ [[ZZZ Y TUU TURUQQ P NKKLKJLIKI EEDEDCDCAB ?===>;=:; 666 364452 1 .// .-----+*-* &'&&%%%$$&                                                  # # % $ % $ % ' & ( , + . , , . - . 0 0 3 3 4 5 6 5 4 7 6 6 8 < ; = = = = > ? ? ? C C E E E E E F E H G H G G L L L L M N O M Q O O O R S U T U V V U U W X W V Y \ \ \ _ ^ ^ _ ^ ^ e e d h d g h f i g h m k n n n o n p m q p o r p t w u v u v w x v x y x w y y { {   }  ~  ~}~}}}||z}zzyz wututtusssrrrqq mkmmklkijki g cecbe`dbaaa [\ZZZZYXXX RQRRPPPPPOO J HIIIGIGFHFG @ AA??@?=>?;> 6675666645 /0-/-,-.+-,* ) &%%&$&#$##$! !                                                 ! ! # " " " # # % " $ & & * ) , + + , , , . . - - - / / / 5 4 6 6 5 7 6 7 7 9 7 @ < > @ > @ > @ A A A @ B A C A C F J H J I I I J L K K M J M M M R R T S S T T U U U V V V V X [ \ ] \ _ ] _ ^ ^ _ _ ` _ a a c e h g f i h h h i j j k i k j j l r q r s q s t s t s t u t t v v v } { | ~ | } ~ ~ }  ~ }}}~|}{}z{z}y{ ut tsrqsqqqqpooonq nn hhghfhfegfddedcec ^^][^[]Z\YZZZYYYW QRQ QRQOQPPNQNNNMNL K HEGEEEDDECDBDBBC@@B ;;;<8::98996:687667465 ../-/,/+.,,*+-*)*+) )( ##"" !" !                                                  % % % ( % ' ' & ( ' ) ' ) * ) ) * + + + * + , , 2 4 5 3 5 7 4 5 7 4 7 7 7 6 9 9 8 9 8 : 8 ; ; : : C A C C B B E C C E E F F F G F F H G G I I H I I J P R Q S S R S S T T S U V T V U V W V X W X X X W Z X a ` b ` a a d b c d e c e e e e g e g f g g g g h i i h h r q r p r r r t q t t t u s u v u v v u v w x w x w y y x { x ~ vutuvsuuqsstrrpspqroppoopolonnkm bddcabcbaa`a``b^^`^^]`][]]]Z][Z\ Q PQONOOONNMNLMLKMJKKKKIJJIIHHHIHGF = =;<;<9;:;8;9797879667665655345333 ''(%'%&%&%%%#$##"%"""!!#                  " "! #""$"#$"$&%%$&45656667878777;79;:9;:<;;;<<===>>=>=?@>A@??AC@BACACDAEBECEGDDGFEFFGZYZ\[\[\]\^\^]^]_`__a_a_`abcbbadbccedcfdeffeeggfghihhhjijiiljljklmlllmmmnnompoooqnrsp~}}}}||~{}{{y|zz{yyy{xxywwxxvvvuvuuvsuurstqsqqsqpomomlmlilhgNLLHGEFE@A>??=<<:;:7:6765534543140/1/0,0..,-+,*)+*)*')(&'(&%&$%%#$$$#!"!"!!!!                       !" ""#""#"#"$#$%%$&$(&%)&'>>>?@A?@BAABAACBDBDCEDCFDEFFFEEHFIFHGIGJIIHKJIKJKKLKLKMNMLNNNNPNNOPQOORQQQRbdceddededffgefhfhghgigkhikjjillikllmlmlnkplomopooqnprprqrprusqrrrrrppprpponpplonnmnnlmmlkljljjkjkhjhiiighg]\Z[\Y[ZZZYX[XWZXWVXVVWWTUUUVUSTURURTQSSRQHHHHFHGFDGEEDFECECDBCDACBBAB@C?A?@@???>?546436334332124/1120100.0.1-./-.,-#$&##"##""$! "!!!          " !!""# )*))**,**+*,-,,,.+../-./0-3654576579768877:9:9:9;9:@A@BBC@CDDBCDEDDEFCGLMMLNLONMNPOONQPQORQVVWXXXXYXZW[YZ[ZZ[[[[][ba`ca`cccccddceedfdehmklmnmlmmonmponopoppuvuwtwvwwvywywxyzxz}}||{|{z}yy{zwy{wyvsstsrsqrqpqppoqnpnjijiihjhhihghggfgfg``ba_b_``]`^^_]_]^^\XWWXVXWVWUWWUTTUTUTQPPONPNPMMNNMMMNLGHEGGHDFGFEEEDECEBE??>>>><><==<<<777748546635643431400//.//--0-----,+++((&''&%&'$&%%#$#                     #"$"%##%$&$%&&&)(*****+*++-,00.012012243466867787:879;<=<==>=?=>B@ACDDDECEDFDEGIIIHJKIJIKKKNNPOOORNRQRSUUVUXTVXXVXXW[[[Z[\][^]^]^b`ba_cbbabdgfefggifhigilkllllmmmmmoorqqqrsrtrssttssssqrqrqrqsqpopoonpnpnommnlmlmmjmmmkkkkilikhkijhhhiihhghihfggffdfcefefddebccccdbacbbaa`a`c`^a`_^]_]`^^[_]^[^[[]Z[Z\[Z[[ZYYYXWXYWXZWXXWWUUVVVVVUUTUTSSTUSRURTTPSRPPQQPPPQQNOOLOOMONNLNLNLLKKLKJKKJHJIJIGJIHIIEGHEFGGFEFEEEEEDDCECDDBCABABABAA?B@A=A>?>=;><;><;;=;;98:9769787788657676346344443342414213122120//00/.-..-.--+.-,,--,,+***'(()'('&(&(%&&'$&$%##"!"#!"!#!"! !!                             !! !! "!" ##!##$"%"$%"%#%($&&&&&('&(((()(*+,*-+*+,,,-./.-////0/1/021002122342244444664576568758879889:7;9:;9<;;=;;<<<<>>===>?>?>>?@@@BA?BBABCDBCCFEFEFIIKLKKMNLOPQQPRSRSSRTSTUSUUTUUWUVTWUWVXVVXWVYWXXXZWYYYYZX\ZY\[Z\[\\[[\\]]^dcgeehgfghghhgihhhihijhkkiikjkkkkjkllmkmnknmosstuvvtvwvtvwwwvvyvywwzwzwzyxzyyz|y{{{z~~~|yz{yxzzxxwzxyvxwwvxuxuvvvvtvttsuspoqnqnpnonomnmmmmnmlmkkmjihgfgiefhfefefedeeecdab`_`^__^__]^^_]]]\[]]WZX[XWXVXVWUVUXUVUUSTVRPQPPNQONOONMMONNLLLMLIIHGGGFFGGFFFEGFEDDBEBCBACA@BA@A@A>@>@><;;:;99:8;8999797877776555644535244323121/----+(+'*(''(%('&%&'&%&%%$%$$####!#" #!!" !                     #""#$#%$%%%&&&('''''('(*()****,*++,+,/120123423544456546766778587:8::?=@>?>A?AAAA@BBBACDBBDDDEEEGFGFHHJGJJJIJJKIJLKMMLMPNNRQOQRRUSTTTVUVWVYXZ[ZYZ\Z]]^]^^```abbcbbdddddegegfihijihijjijkllllolonmpopqproqspsqsrssuutvwuuxxyxwy|}||~~~~}}~}|{{|z|xzwwxvvvsutusqrpoqppnoomnmlmlkkihghfgefececddcba`c^a_\^][][[[ZXZYYWXWXVVTURRQRONOPONOLLNMKLIKKJIJIIIGHHGFGEFFDDBCBC@A>A><?==;:<;<;8;9797876564654431331101..+,-*++*)*(()((''%&'$#%"%!$""!! ! !                     !!"""#$%#&%&&&'(*()*+*),-++,---.//1002232453667678898;9<;;;>=?>??@@BAADBCCEBEEFEFGHGIHKIJKMMLLNONQORPRQRSRTSTUVWUWWXYZXZZ[\[[^\^^`_``_acabdfceeffhfhijikklnlmonpooqrrptsruutwvvuxzwyzx|z{|}~~}~}||}}|x{yzwxwwxuvtvsssssqoqoppnlnlmjjkkiihghfgeeedcebcaab___^^^[][Z][XYXZXVWTVVSTTTRQQPPONNPMMLLKIJJHHHGEFEDDDCEAAB@A@@>=?=;<<<8:;98877663454422021.1./0.,-+-**+*('(&'#%$%#""""! !                        !! " $#"%$$ &%('' *))*) *+-+- .0/// 2022 42545 77588 ::999 <>;<= @?>@@ AAACD EFFEG IJILJ MNMOO PQSQR UUUWU YY[Y\ ]]^^` abbbcb egffh jjjjk nomoo qqsrs vuxwv zz|z{ }~ ~  z | { { y w w x u w s t r q s o n p o m k k j j j g f g g e g d c c c c a _ _ _ ] ^ [ [ [ Y Z V X V V U S T R R Q O N O N M L J I K I H F G E E D B B B A ? ? ? > > ; ; ; 8 9 6 8 7 6 5 3 3 3 1 1 / / / . . * + + ) * ' & ' % & " # " " "                                         ! #""#$ &'(() )++-, /.0000 23444 68798 9;=;= >@@@? CACDE FHHHI JLKNL OPPOQ RRTUUU YVYXZ \[\\] `_`ba ceede igihji klnln qpqsq suuuwv xyzz{y |~~~   } } { } { { v x x w u s t t s q s o n p m o m l k j k i f g g f f d c c a b c ` ] _ ^ ] ^ Z Z W Z X V T V U S S Q Q Q Q N M M L N L J H I H I E F D D D E A @ @ A @ > < = ; < : 7 9 7 8 7 4 3 5 3 0 2 / / 0 , - + , + ' ( ' ( & $ # $ # "                                            ! #%$%$ &(())* *,,.-- - 011211 54665 7:9;9 =>>=@? A@BCD DEGGFF IKILK PNOON PRRTT XVVWX \Z[\Z ]`_`` cbeee hgghgj ljmlln oporq suutv xzx{y |}}   | } { } z | w w w x u u s s q r s o p n p n m l j j i i f f f e c d d ` a a a ` ^ ] ] [ ] \ Y W X W W U T T R S P P P N N L K J J J G E G D B B B A ? ? > = > : : : 8 : 6 5 6 3 5 2 2 0 1 / 2 - - . , - , ) ( * & ) & # % # $ " !                                        ! !! $%%&&% (+)+), --./.0 023243 68778 <:=:>= ??@B?B AB DCCEEG HJGKK MNMNN PSQSR TWUWX Z[Z[\ _^`^a bdcde hfhhj kjmllm opqor uutuu wyzzzy |~~~~  { } { { { { y x v x v v t r s s r q q n m n n l j k i i i h g c f d d c b a _ ` _ \ \ \ [ Z Z X W V X U U R T R R Q P N N L M L J I I H H H E E D D C @ @ @ ? @ > ; < ; 9 : 7 6 7 7 6 5 2 3 1 1 2 . - / - , - ) + ( ( * ( & % $ % # % !  "                                       !!#""# %'&(') ),,,,- .01112 447476 9:9;:; ?>?>? BADDCE FHGGHI LLLMMN MO QPQRRQ UVUVUW ZZZZ\[ \`]`_` cccdde gfigii lknln poqqrq vtwuvv xz{y{ }}  ~  } z | y z { w v w v u u t p s o q p n m k l m i h i g g h d c c d b c _ ` _ ^ ] ^ \ Z Y Z Z X Y U U T T U T S O Q O O O M K J K K J J F F F G E E A B A B A @ < > = ; ; ; 9 8 6 8 6 7 2 4 4 1 4 2 / / . - / - + ) * ' $ & $ $ $ $ ! !                                    !"#$$&%()))*)-,-//-04224476878:;==<=?A?C@BDCGEGFGHLKJMLLNOPRPSQTUUUWWYXZ\Z[^_]_``bcddedgihgjjllmnnnmrqrrrsvvxwvw{z{|}}~~}~~|{xzzwxwstusspooonmkkkjjigffefccb_a`b]^[\\ZWYVWVWRTQSPQNOMMMLKIKHHGHFCDDCBB@??>===9998796442320/./-.-,*(+)($&%#&" "           !!#!#!'&(&')++++.-0001216576676::;;<<<?@?B?BBEDEEFFFJJKKKLPOPORPTUTUVUXZZ[Z\`]_```cdcdedfiiijjilmpnossstsutwxzyxyz|}}~}|}{{{yywvwutvrsqprpnmlllmihhfhgeedacd`]`^\^\[ZYWYXWUTTSSTOPNNMMJJIJHJDDEDDB@@?>@>;:;98:966534520/0/./-+)+)))*&$&$#$!!       !#!$%%%''*)+,,*0.0000535567:9;:9<@=@?@B@CDCEFEFHIIKJLONNOPRQTTTVUWVZZ[Y\[]^`````bedeegfjijkklomqppqptttwvuvzy{y|z~~~~}~|{yywyxwttrtrrsonomnmkhijigdecdcc`___`]^ZZ[ZXYXVTUTUTSOOQNOMJLJJJHGEFDDDDB?A>@?><:<8;8865554431/00//.*+*)))(%%%#$##          ! $#%'#')(*+)-*./.00/05335678::::;;>?@?@@DCFDDFGIJJJKKJPNPPPORUTVUWUVZZ\[[[[^_a`bbaffefhfhkjmmknmqprrsquwwxwwxyz}|}~~~|{{{yzzuvvuvruqqpoqnoljlikjiffeeedba__`^^[\YZZZXVUVTSTQQOONPMLJKIKHJEFEDEDCA@?>?>=;:::8:935444331///.--+*))'(($$$$"#!             !"%#&$%&(***+,+.0//2134457669:9;<:<??@?AA@DDFEFFGIJLKKLNOPPQRQRUVVUWXW\[\[\]^`cacbddffggiihjnmlnnmoqtrutttuyy{y{|y|~~~}|~{{xxywxvvvrsqqqqoqlllkljjgeffeca`a_`^`][[ZZZXYVTTTVSSQPONNOMJKIIGIHDECCDDB???>>=<98988764442231-/,,.++)'('(&'""""  !       "!"%$$$%&%(*)+++*///10/135656786::=:>=<BA?C@BCBGFFIFIHLKNMMNNNRQRSTTSTWWYX[XZ^]^`]a`ecddeffkijjlljlppqpqqrsvvvwwwyy}}||~}~}y{yyyxywturssrqrnnllmlkhfghegedb``b^a__[[ZZZY[YUWTSTSSPOMPLMNKHIHGGHGGBCD@C@AA>;==<;:78657563110//0,,*,**))&$%$$$"            !###%%%&&)***,+,,/004166696889;<==>=>@DADEDDDHIIIKKJPMPOPRQQTUUVWVWWZZ][\]\\baabacccfgihhjhjnmnmopnprutuuvuvy{{{z||{|}{{{{{yuvuvusturooomolmlljhgiehfdebc_aa``^][YYYZXXUTUSRTSPRMNNLLLLJFGE@AAA?>@><9;9:89836333322-/.--+.)('&'&'%"! #!       #$%&#'%'))+-+,,--212315339888::;;>@=A?@@C@EEFEGGHHLKLMMLONOQTSRTTTVXYZYZ[Z[_`^`aaabegehfggimlllnlnosrrtustvxyzx{{{{~}|}||{{wvxtwtutspoopnmnnliigihgegfaba``a`_^\Y[YYXYYVURTRRRPROKMLKMIJKIEGDECCDCB>?<?<>;=:868567451101/1-//,)))*(*&)#$""#" "      !%#%'&&&'&,,,+.-.0-0324365456;9<:;=<==ABBBDBCDEHJHIJKKJLPPPPQSRQWVXWXWYZX_]]`^_a`ddedefgfjkmklnnmqrrstrusxzwz{z{y~}}~|||z|zwtvvtsttooomolmmnhifghefgdbaa``__]_][YXYYYWWVVQRSORPOPPNJJIIIHHGHCABCA@A@?<::;9;9997532322301-,+-*,***(%&%#%##$!    overgod-1.0/wavs/ppipe.wav0000644000175000001440000007246410263022570014655 0ustar michiusersRIFF,uWAVEfmt DXdatau    ',.,)*@VltK )?IB3qDI;hxW)umy=U.BQPL=z@J$Qa_:n l6 !_=KC8[bY3p t_Ga^&b_3&3W),XU4m>A`UhJ8>Sp;y9#UwIQgq.9:0YCv;-D&)n#32REL7[P?}.H(Hm` }1?xt*5N~NKM|'Fd1*P*}SOW}NX*Po.1lf'i{q m(a&$i9|R?18't/=2_Rq|/E=u7 P P ' /#%( ^bB{IV&v%v>i4c]nbC ib1`-'EN N p E ? Hgs{c=HGMK<'Bwl%DR,t(XtZ#CmZ] za`d u *U]j[EQ? /! * k D &gr3EI te(u|qOtstlhFXn} #>[Yj 0 {   { z]U2=f7]252N?fC/n&C+dNO`Jq4+YD H= K  H |9.O gP"R@_EU2+^Kf!vO./g8;OQ<,y  1  os02UuA'{jxmP]e@Yz&_)J!   n j v %\&RkciNx#L 1G (+_1AnGS#sj W j  qMcY^tmXWkoO7/Wm(rPDS\[wjooG x < f U  ssFC#Y+/Ltl)l')fMEqSOm~#,wv@;Rw%LS x z  jp[DK'Tt7j %>ZQA,VaRvR/<8QiuwA4n1 $ w , }) fr's8\0bO13)d:i[gW q  ( ENVfxPm >kaB|"y w^f%f@ d'9Mj | } ) @C>>KmR#5v2[v&xw- bfw*qQ0RAB'>Qn+FOw " s A _hjn_yju[Q5_4@UOs!56zBd&v07Qd! 5 +  &2ODhhEA|$U+xgq+%k2|lI vW\T#A87p % .  <R[as3`0 /X,p&,a^5>={veggbC =*i U?w&q <  q 0K ?P|T\Yh5bXUJ2-p&o) d   I;K<r)9zt-, M%.buR_M )ARO1=M;0PFXJ(4\W  N V  9U_0J*8+U0?1'GHBz; T90 C # #S{NFg !r)^Rkf}(W GXQ+efp00):0X(- !  A < X v hB"9]4_NmyT;A%-gf3%c"JcdEYN Iw`~ \ H   W {V(j~0U`qQL,;i, BXF /]A!w0~ @  ? 1si|ye#Fq KgsS 4X xTT_W{6} }C  9 L  } ^P7J[V#,ez.n{^ct5W9suQ@ P&}C" D e = Q 2< F}KT,wOBYtQh0p}/ 341@m )~4 b I } `  iVNOK`o?,~PJqPVk=\ApqFr&7OY m W d .L4Ee`QK aYE_M\h ]tSqlX*C l  b  MT28j`)=}pVqOot\D%\RpyZlW&E0TD 2 5p,6&;9oJ*"OQ<(l)e3\Y4b V?x G T { }HTwuD#**x1Br S WmR'~UD W I 4o _NDwXe!2fn4}" Di%cv' 2g j f   Wz"3`=Rtt,w@+TdN8 KaNV+m+=(:d,=(  Y R "Jz&R@W3XY%zh>A;-s|CY\--P|  ;  YgF[? Zc:= XJ0|ZHtl4V5ZpyB:Hh j d b   eFT{*A2Y- 2 \O9tpqEH39Psm " # $ smHN[\Ta:=Ayw[Q^+ ^P>-ZM2\AD]z . & ) { Z12c\)%Md( F}_UUqib5SpO~u/tTbZh J e r , 45u;LiO~gY)M&%?ER5V% 8F'CSRC q M\n`"q:<<[{<>28$^kGHrJiZ $-$ {  /UVQ+jn}pC*zuw, <>G/~i  J ~ CC?H6R N7fT|V&Ut>R2ob~ z+Uk  U | 0*!|hZ][r7/j =w4Rl3E(ml# N\/<U] F  j--{^F1a2G!&,4HjY?lJ^DB5!~JN/.i4 ; v av]r2 mS%Q0GNT[klL{XmUb?_Q//K5bDuZ" l  Y D|_DU@c\LSxXgrRxo7X7`iMn?q`T< E a  > .woN/?s} ' z|,O~#h !,sAxvEa?']  =;b"]yPXcwLO{h&"k6lO YB><3 l,IQ) F ;8[@R%)X(r8$[V";6SyAs*0nQJ Q\P]N{8 P y {C.; 8C.22 4SwpLX^qc"jC"VgmB p A R}.'ilU8/^G#$B2!=GvM VS_9 ? e  bh0avq A@n!=P CA&2N?2<`/wt$XB`2f 1 5< B_]p:pE*wE{9 dCD^OJV3[(L)._3v5e* "GMlCEMGPN%p 6]To_&#_jP %WqC<e R`(re0>Kf~SaP1bL;ax,e~l24og'G>\Lj0^'V:B{}2v-BdZX~=7ql-LJLEg&htYjtal@`w__q'{h} 99^ i8w $OPEKULIntZ.g-'E/CwczrYknWdc/4yP$b"pdLRgpoyBRl&~&j]riO\V2~K{g+S!q:g3 K0sYa|+2/}%#n)Hw<^`SlaGR<^ Y1h}n9xT@~pCHsGT[9KT; v5^1qw:uUMi\AIr)B3XxqJ6#)|y\X]Ib)zYRZ[/gmLgJFgZ<@j#tHpuXK#y k=m7rX`YyHy /&fpo-:WACc]9;c~ Qx8ixf4x] M~(NUZah#$ s%%T(oK9?d];:]j1[*c{tM)Ru+!AqTVhB:GF@ k\=0=ea>;Y[q>\c&[:IAfGOfOPo-_Sy C&zhJ1+0##=q6~TJ^7/[vFOi181|r*[KySNfYoX?zDaSc1?a>y(APma!*!ml-eb7+yH7Ht )XnCQm_m, *Q=]ZV. x]j+ouN:v>$(K_ :$AJb~kw(916CW\=,nJz`)wdIu6 $[6WMt {)p&)om2rt`VBF{f-M2HY0W`HWX+4rk[$9D#@@.~#Au" h|$cnAd:@H{ BstHv=h)*. &,|$N)v lvE6`[%EJ xRy1 B69nQ|7a[jw.s v&[6wjJKk{3&jS!O5*casAC 02xUo$dCxP)#7q4GUs+q<2\0Xo_`^AR5jr9foPx; 8Ny|S *i./Y7(/Bj/K |7vs7\[a[v\{}&B-1q{\5(M}YHIZ}0C$B?|#Q;OA@u{Nzg|oa<\O<>kyfcq19?hmRkB;U?0<@&Svi@ {o#|e|qU =ECR67/ \VhG>2 h0TkqlR1 z'YdP`*P[F~4EdT=(! wFBZ="G 0KRO=/N}@$,R \1T{:D{!}$1= :q m>t'v )35& }3Eb[u4'^:`*!Lt}&A_NWr*>]Q z:<J^rG raTP' 1Xq|*S?N7I=F-gu=33p1}hXSXhgt/zdbNEGWq6w?#Loy\Iy@2\|_5QW#{ps{ds/||y3k!]&HctyiPNuw%'B[hnj^C$b)}Hfp1-2`9o"<S`ecUEQl`!3>C<-vB qBfm4/BYL0 ,ULz.CIIC7RbF _,lChl3?!c~fL1(Im%P  +4.'T [7ikwJkE"ll3L<fJ1  $:[|*VUS#lCqR4 uj1bkdI3 !4Ih*V~XG2?eb>xVA+ ){j3n-)cC./Jf*SwWAuAhd<|`F:,6h1u6STD'{V7  +Cd,OtyV=bLwe<bT@Ef3~!Uy~pP(f@  !?`)NruW:Rvpz._  g<mWT f1,%q{NvG!8^*NpgV5yCUGRtK$)"f9oef338t<P!3].Pl\S5t3h5$-Mz5u&9C?4a8 wi1?J\T" 3^ 2RmQL+f!M(X!h4N[_UD+ _0i/E[ v0[  5b4WlEN2m<:zYA_r{uhO0 S(&h0Kk-)Hb xz 9i=X8I1j(aPNrtX1 xI-j.Qy)IH'] gi[ZdyCs#C)D1g EE$[}Y0m<7j-T?fdE rjpS@<BTq R /?4fv08*iX%^-Am-US}~`'(n_<# .Jk-` :4hnvwr33w}N~LKq-X ew=6rN#  $Ep?r54ied^b*<t@ k; Vr.ZuRAru<#L}V07j_OKfQ#C/2(e-V%at.W $jNwj*$T0j' ;k\v>7UDK7KPI7Qq<2my1a2|(Uw\1dM =oXl1&C~7T(OgpkW9t8VD}{.T/5_x Q B|.e~ @sWc#3p-\ZhcR/R @A8\p{e[,"]*oQ h0^6'Rr}lKp+[N;Tzny_Qttw? UJ#n9f 8.)1fg<Gs3([?Pwoz[Ie m]]m$g:D$uFo:54BzV"`J:f?CdjrUAZ~\HIWu Kf<%xPx> <=Qo>{5bOrE:WfmN8OnG51@[0wL3%}\!E"CG`VPx^G3Kv`iI0B^7 (Dk\3{w+&i +K(LR qm2gqIz(>i[bA)6N& /TDcj")'v.7R0S\.|N 9Pv!/ZR\;.|?=m*qLqZ&2>D&Y$5Zf8  e$Q SsuLJT3"p1(VX5_M)?NS'0f,>anD&y<gUkg;AM-c%AwAK=(J\`6;p:LrU.81R~7\eW+5B$Y-c+t70*W oqDJ}@OqZ:DA- j$Q acJ});{M N^%(dUXLXzb)HTP=~;gf^;vrp0tB;wG(p+ghTb r 9[ccO/P z0kY*baa( xk<'d1x#t7tvbj uBcpn_?d I +rW}NLQre2Rd( Q+mt}Ikz{kO$z4]"4wSp ;:lkBg](~>~ O%)a@}~&!Twy]4Gr6%@~Of'%WZ/~z_Ux#st+l9~ )oP"0')^jE[H5KLZCEnpVMr}jgv[(mx"7m6"6-/ewT!l&[CWGNp,2 `cNGkta^i J[p >, I ->15l`3:mSbEC\rOXC>dkXS_w:yEkD6"V.7F8<to@ KboB7JZ>K;9` fQMUl*g3wdOK8C &l22YaJDM`X b[T[N[$<~LMVCF~Z'n,?$*x1),VZC=EWx IQvtS\ial3)ISQYEJf6?;c # $Q{U?6;On;|@gjMcx{SKhladMNoB M < {hP MyQ8/5Hd-h.W\Ei mc~ynkS QzJ_:oeLw; JuN5+/A\[HQ< n ,{#ztUTU"m-8bM3m{_'nEtK1(*;TwN :E5 t3C6 |[X`/{?6Q9SbH]u AqG/#%4Mq@|)6+yF]J `Yh9N 6C"9F/Ihx>nG,!".Gi2n*"'Wu ^)eZsB \7~7 ~+9]r h3:iG^q1K1qG+-Hi#Y\i wes*Qy[pGuB# ;g6D{YsE0rH,,DeKd ~&=[|ZwMO."$=b#w(_rg@c>0pI+)A`Bwm-<Oe&}Y}T(^:**@afJ\S/X90tM1)>]5ju7T`o*X[/iF40@_O)<2B/~/xQ5!*>Z{-]zDl1uz/Ua5 wP=8A\9  3(}.zS8%+=Xx"TQ5F+2Se=\E>GX~'o v)|&}0X<( *-"$-=Sr=le2j7$(HqD>M{pI sYKLVr@Eds.`B0(&.>Rp2aoA T?D]R@JzqM'~cQMVk)pl0Sn*cE4*)1=Ro+W}xPo[^wbFGvvT,kXRUhV}V Mp-iN;.-4?Sm Lr\.wx(pLCqxX3 u_UUbz<j|zd= Cm-nR@335CSjAfi@ ;| N@lz\8}fYV]q#Oa_I(}8l,uWE:6:DTk6^~vR"KU ;g}]=l]UXi 3EG0o-i-y]L?:@FVj/Sub8(^Y 9a}`C saVW`v+)`"g/~fQEBALWl%KlrKt n e$x15F;W!Y!V#'H,5/R-Q2,|01~..w2 ^3055 33 d/ 55k0{5r*)],R+:w5"_.Ԉ^!_lʭʱʔER 3> wʱ ,g@)=Գ=%$"йb~ BmprF/?:>˷ B.S '0#%lH(6+, 024z4x4u4q4o4j4 we4~]44W4˭Q4BH4.|@4>4<49444/4.4,4*4S#4R44u 2 1_ -, 0̕*z)N( ̍"}"0 0IYD\nфB̖FOQS6^Xab̈h̡rr|t3̯̇̇*̒O k3d3`3[3̧U3R3M3J3I3C3>3;38353133.3,3&3&3 33333 3 3 33Q322 lD2M22%22222124792>?BE͹2ILͲ2OSS͍Zͳ^_͞2dehnpqt֓z~؂ͅ_u2s2͕͙d2͟͠]2ͨЬϰqݵ?Ѧ٩ .u222hF#H+ 2/2 111$1/!111%,11111111511114 l10]0ޞ1F%'1- @i޵ ޔ) whП*?ΩξβΰiyΥۨ;Ηνfٯq ue="I2,|i1.~0O '06$ l* 4/000000000<0C%z0x0u0[(M"""j0i0e0d0"_0~(: 'u&R0O0 L0I0E0F0l;0f8030|/0J. (0 :Un%"05v 07%cDi۷ZqUf"#&P,/з3Э9:oyBDHJIWPRUU<[K_tiimopsvwЉ{Fo~-S!  M/PJ%  &` +/(/%/!/w///4 = / /#///(&i+..$*'.###j#..e*...p*&..2.7.R @Ѿ.......\J.,) -(~mk#m 0|Ѿm\э%ўџZW\џp:i~N7o:>zE<u4,:}ѽm k E Q.!c`*U 3377 T&H+D+JMQQTҩ-Zҥ-\`Ҟ-dқ--mґ-ruvՄ--{-w-w-p-k-f-v J Z-Y-T-R-S-M-N-J-F-D-B-d9-"3-0-5;&-%--m-- -1 U-w,t,,,mw,[,T<"'+-0ӻ78-,?BBGGJLOOSTXY\]ӡ,_cfijӒ,,pqtwy{ӄ,~,ӆӈӊӍӎӐӒzd,c,ӢӣӧӧweӰӅյKF,A,9,_(,;{'M  nXYB,y)+ +++++++#G++L++G+++CQ+x((;"+++)++++++5CK+++8+++R B@Qem+h+W[+Z+Kx(" ԄԌf Նռ4 '*+/ի3g69>սlIIտT&r\_z*]jZD!y%/'z*)K t*s*q*)Yl*`/b*]*[*U*S*R*pM*J*#H*C*D!S#?*=*;*!!7* 1*1*/*)*)*$*8o*J` * ****&)(%y!(tri ot)-  /}D_HJ8PORO S [k _ּcrhklp֩yֵփքևֈֶX֛֜rEj|l ִֹֻּ9E-CwbJ^l xָZ ?' (_(Q@!((Tx()(((2(67$&((((E׹(J״((((((((((((((((((((((((((~(}({(w(;t(r(m(וh(g(e(a(_(^(קX(S(P(G(E(c'פ Qd׹ \ s ؁#{ %$'إ//j' 6A! "&8#U#&&g&?l&&&&&&>&&&&&&&6 &}&%2 PLjs z_%#B}:W۔ ٓڛ٢٣jtbPtٸٹ6h8٪~V;v3/J  eڤ!$'(a-ڃO62# >ڷ  7%E><x %FN%%@ %b %%k%%! ]%~%YR$u%q%q%n%u#i%!$k$A"a%`%^%]%"m W%""% M%I%J%F%E%B%B%?%<%:%:%7% !3%0%.%-%(%$%#%*%%%%]%N !xIH 1qQm$$ S #>kTK-22368ۣ<ۘ3E+JۻPTTfY=_bbehkjpostۼwz~}ہہۈ۱ۍۏې'܍ݛ۝@$m _۷b ۗ=OPbے !Hl$$Z $qg! ܌! ## ##/,#t#-###u##;##!##}###LLܲ#Pܭ##Vܧ#########jlܒ###I######~#{#w#u#t#q#o#o#ܗh#d#c#ܟ ]# ܅"U#S#1!ܳJ#J#I# <#IVv0#,#E&#܋/ܩݴz ݯݓZݜ""#'"""/n"459";">ADݻ""Gݷ"^!OOݮ"UVWYݤ"]ݡ""""gݙ"""mqݤ""""E}"~u"s"o"ݖݚg"f"a"^"["BݭdQ"݂I" x R Y+"%{K1}"P{"e"'%!! !  #@!6!!q! !! ! ! !M !!!!!*! !q!up&|%tu7 @MߠޣIސ ުޭy a j3 -l C ޻Y:#ޞeD 1}sT3 K^ Jelx Vk 0Y &  agP ,| n m i c c 1 _ ] e~ $ L M L K  | 0 @ R9 8 W3 M( y! 4t@bC j mLA  ; BOoE #S)-)`CHLLCOR WX[\]`ac~giqrrvx{)]: < OVJ(|#0GOeH!V < ` FK@w , ,  }v&&i"3(BEPT B f5|yyutupmgfe b^ J XURmnv7hJx:Q0*89> G{!"&+ 9=@@CGF OSTXX[]^bcdpqz|~|rl`h N,D4|P N. P #C f  h{7nG\B$.=\ d~Vx u5poi*6d`ra@) )l",rJ=7WE]x2 f "$&')-.3378Y;?CIGLaTRSUYY ``cfg,:r(m@hcOlQIgrR 4 =#U_ZNJHiFxy@;  2_ 2*$" x1K$lW:&MSqN6F  MV'OZo,l : g cdg= : 8E,6o]B9MSF5hk=PO1d!!!, 01237:>@`CEFHJNNOT UXY^]hzenqrvz~y xtpnjkfdb("\YUOW *KHFFB'x9|a2L.* '% ":<RO Q^tBJ|1@  (Ql 2 m y^%]g G ? w! m=cf^0 Q ~RaCh6b~wv$%'',V./337f9DA@WJNOU | U= ZJ\]` dehlkop~  uh xz}{zyvsrydb`]^[ZWSQKoFlC@$;n3X.u,,P '  NN8 Mh >aQl f  q . BS G P t#D<Tga   T T LO %     {yttqmmjQ|  [7} L.Ur _  r TK $ 0*%-o.iFW#5 Q[*$"eC';,)-/x6lo???z/BVK$MQS/[Wkux`abin pqh3uf 4f_ v fU 3 eW ;Y)MDi@w,- rO3*( ( Y Y( k%$  G \f C' R1  Xs C O mN% -=})m Y fz]5w$,=uwq\z11u*7'uxk[oFmxX@AGEFJS TXZ] `cfinlrsuy|tta2\NG J! p?9.D('T   |M 8L  ] - a   |3{|yyAwr pnl ee `1P \YZ SU QPLKL GE_@@598Q5 # *b 'Mk t7_c)JqX ^a c8V4~Nl#'(U+0.1 364h:o=?ACBFEHJJWOOPPSUUVXZ]]^``acdfhgiljmoqrvvxy{{|}[snbhz [(q!d}$dya"*e ~? ` ^ # -  '+V""$q O )+  :aE9RQ XY[ eekkqtvv|}~vt1qmhebb`[ZWWWySQLJFFF.n>89h662414B--)(&%n[^E (o ] ,K  !"#%S)Tv'; 9Ya @$ H5`J (-Ar :jtz 0 m  r`u  Z { !z +Pcs ?r- g   _ Q_  #7P " I E / C lJ5 n  . V* ) 1 2 z?     +   3  6 Y 6&   y  U  - @ ~ H '   M I Qz 4  L& K (   *r  ^ $# Z6 [   YAB|} y t)&m }$Maebj!T ml * g12" XI`[ @  [ \M+u2V+? 0WJ 2Z6~t9&HM)0c8257b/<;]=CDI&oJiX,EWQTWZ;]`FZbid;Oijknq~tvwxyy{}]cGe6pyw ] = X7 B/ / . * , + ( ( !        Qb  &| : PXh=b -5 q U  9 S     t   K    q   Q ~ | { y z w w v v t r s p p p n l k l i g g f f d c a b ` ` ] \ ^ Z [ X X W W U T R R Q O O N N J K K H F E F B C C ? A @ < > < < 9 9 8 7 7 4 3 4 2 0 / 0 - - + + * ) ( ' ' $ # $ " !                          O K "  t < W  b DqC  ,    gWp$4,d[u Wjl*EWYI03z||S{ -%M?iIv  ! #!&%&&(**,+...0/03345687:::=<>@@@ACCCEGFHJILMMMOQPRSTVTXWZH]___bbbcde>hhhNlmpq(sq@%wwD!_8so\YVL:g[?g:1'Sv..2) '[""! #t    ~~}{|zxxwwwustpqqnonnmjkhiiffedcacaa_]]\\ZYZXWVTTURSPQOONLMJJJHHFEFCEAA@A>?=<:<:88665533111/..-,++(((''$#%#"!       K+A(j R JOIO6PG Z #$$'')+*,+/-/101145357799:9<:?<@>@BBBFBEGFIIIHLMNMMQOQRSSTTWXWXYY\Z\]_^`a`ccdfegfgjijklnonopqpsstvvuyxyy{|}|  ,!"!#!$%%&(('*)++-.-000/32336758Z:8:<;=|>u?CBDF,3O",;OpMP~}}}zz{zxxwuuuttprqpnpnmlmkijhgiefddccbc`_`^]^\Z[ZXYXYUUUSTRRPOPNOLMKKJJJFIGFEDDCBA@A=A=>;=:;98976754431201.-/,.+,()*')&$&$$"#!!!       ruyzuz{}}~DiEn h'K    "!"$"$&$'&%))(*),+,.,/./111122544666798:::<<;?=>>@@@BABDBEEFFGHHJGLJKLKNMOOOPRPRSSTTTWUXVXZX[[Z\\]`^__`aaacbddegefhhiiijkllmompoorpqssqtwswuxwwzxz|{|{~~}gSCZ!A1%8F5S;RONMiLLLKIjIGFGGDECDCB<AA???<><;<;;987968656354310101//,.,,-+,))))(''&%#%$"$|             ~}}{}z|yzzwxxxwwvuttttsrqqroqopmnmmllkjijijhhfgfgefddcbcaba`^`__^\^[]Z\ZY[XXYWXVVVUWSURSRRQROQPNOLMOJMJKKIIIHHHEGFEFDCDDCAB@A@B>?>:==<=;;::98:7885654f34223$1/0/0/./-+-+*z')O)&'%$$"qA `J@&xMF2>,_Fv L0{"K G)c G<39 8F 8. PAcC$;IB   !!#"!#&#%%%&'''(*(***++,,-----0/00/113234236376658778:98::<:<<<>??>B>ABCACCBDDEDFEGGFFHIIIJJIKLKMLNMNMOQNPPPRQSSSQUSUUTWVVWVYYWZXZZ[]Z\\]^]]^__a_`b`dabbddcdfdfgehghhhiijjjkjmkmmmmnnooppprqrrqstttsvtvxuwwxxyyxz{y|{|{}{~}~~DDVg 6 7,t(;S^e p 4Q;qhx`}overgod-1.0/wavs/repair.wav0000644000175000001440000012437610305122364015021 0ustar michiusersRIFFWAVEfmt DXdataҨ       ")#-/6.2>26:;9;:@F>EJCCKCGBBDBCDB9@6322)%.&&6+:1.+!%lfP@8/(*0'5&$'$$ '#$,3/8?DDINYXf^a^b^aez  '1:DS_iu~yl\\_m~ycPA*' z|qkoejaUNPDJ;?8/10"&($'43F?Q^ffv D_qzuc`SStiB!6C\VQ1)1fLiRM` o7 $/>'nF23CN\urhm\d`p}O+neVQ84&pOeQa{  (2A@M\gk}"AQYn~pg^m2- )T "-98AHOM^^bnfSDR7Ft-V;eY{|wwpnkb^\PQK@A9-)  }W6)7S`v|_?9zS1! jC!hVF[}'=QTkv| &1KOiq 5Zww_D)  #.==@IVVVcjbsyw{hAFk>n vaC'_]ckwnpY4(R3 jI'^G%Y"3;&9Y .4J[s .DX{2kHt !@Sv1@O^kQT!.Feh>\Czo_[@A-$ t:oyZ/Vffefm|FJ9|{lklch`g[_ci^ghousujN2a7 5r-Mm+_7q$fO(Gth&F"j-acml]CE G~H4!a g#>\|'2Nd~-=Vcwxo^-t.x 5SV aB2..1/.--*0&% MEz]|NX;\F -NNzsdF 5.-97&2+8^l\0g#6t?#x\)wP6f1O]5 -~PN{+TKAv6\HcsS+ >\ 9ZfgSr\ NAl8rj]RE9't"s,m%Aj'5:8=DNM_bktsv=VYD[0}In=WdR'>9xh[H97" uR t.g;!0F4g!Dc9Ro'?`wa*%n ogT/"+!/*#&+!  <iB3-72KPZ`lu~fzF] \mK1:KrSMJ0-19EKV_WW=H/yfbvB]S}D:jPu4Jke? N`BnN0w. G(#9cw>~lj[aiY`ML>+cU0oY9#p:Dg IAML&5GTIO&V$@=zd-sc +R%$}[.sU<#pcZLE7( @k]ae S?h]Op Aw ;m'M|WRX~dT* N:v4JV`iuyz~mlaUG7o]7S^YKH)pc$ *$j4zk 6  >  S.qL|7l_=~`bK*L_}=S-Ow#F B{Gn] g$e !%:e5<TpT5#r/RRgo5Wv^CM:M$45L)!zlpvU#7MKE XAM/p# 3+cf   z <F3,&2;#D-~Nh c, I ^ | L]:.>cqRCNjh/J|#ko* G=g0/[Iz+wQgMS9D 0 X ~ ^ / x\#Jg!t>n}Q U}!7'tOPr  f'bC_ .^ @8 #  w a,Eu @ F ` 2W <r_*NIѺ"ѣҵ:٦ܵ6m'|N] e|}_SHB)9 10]%y`$K;2u4 R  f ]-BzB 7SCyEC {uy qBH p 0 )A,~,efx{m[   cY /7~`DS  I 5N RDDffPOmesV~_"oHN+ ] VXJAg  1 0 ' &EwF<$2A%2G# t 8"!Q)j 5 }ts,].Gg{_bV 6 K[ %tdJ!-q 3bi*#flZ T niO :vI `I=+#%4gO܂.|30&d u8TY]r | V r  C Q 8z]&q,%!!X4NG 5Vbj fjP8%L~ /ELLr>; jzp}m~$ U   o W O }C>P*9a ^P x$.$ %Y8m`s=.FU"HW8*Jv F  XQ""  fA,F#G5_S;7/_Z>$ &Bv , !  Kj m2/wU 3G5zQ&]DU %.CF H RL{A{)}#v1U&Gw : ,.uWF6@  d,ԎβΊϝћ|ז[*ll\!7[. bB8< R]U %!Dh-u! . 5 8 ~ F }kbBCC4"=?g> * K cB \ j  7=5eO= 'J0'ދxۧ\Xjޠ*P<\mx` T  2 ]  R J S(E{EY"R( . u  $ e!ocF-y(J(OF9&{ t b{  t / ; 7@4 C+K:XS z3 e<c_q@S>@#I^na` G ^ H y   pIFQb~$:Q' pD1PL\q`BB5| : S ! = C > ; v-XHw<"'CgTBnI!YF,[ WO#?r) 4"  ^R%L \ "d=  t 5or%4cB {=ff(,{[}ҜѱTbؘ/ W+=tJO`3݊Aڧmِ{B`>6 KG hHK!471 O `[};|hw174$g]Ti 7^T u `I?+jB"  Jbs=xSd#MY2^ /O+( k # pF#| F&a j  \ly(2Cv|AiYjS Q!wZ z 6  a8;jF]yTVY0 c R  ! l /&3@Gw!SfYI, 1 cuO(b] Y &:gIu & =iX8[a^L 2|(`0   b Ksve X!"#$k#j!Zs`;$E  --/baqyI۴Y{b#} ! QZc= xXj?{:'N[=ڃدՀFR̡uΧуԄ׉ڟ^Q4' Y N x|4<`% C  /D0`/pڹqZ7ݤanHc1ae  Z c , F <47#j?)wX'1541(#*O#-ye;!?3M  hOJ = +AnwI'ke hL 9o0' V M wVgXWc R "YAEW]#9ap H 3aGOP 60TL/?^OEk $( iZ &u< 313  :D 'jK,RF Uv8\X9~[% W 3',1#2t1+0.,b+*('$` 'x /*[a!<ی a#Ё3uȭIǩɭcԝDC,cG9 GJ=- o > qY+( ~ ?\\m-V< H\A "Jet<_ MO?OT+  P   F ;1@f\ 0NSM@+`Fs"cY brU$ % "###=#"!  ?k / z2^sYhevu3 |F 2 vp._ !I!B!!  )!DG  *o8)LyylM;+*1 > D@1o   /!b!!r!! $ @p& / |O X#; Jp@qq g }@otBފ ڍ l#l "$%%$!=0xMq| NXg"Y;;Ji0Y7PkۤCrw  4K[  -U w ^2܋6сԕ`ZqC(:[QbH # K k  l ^ 97wiGocuF*:H?j&]jcbT+Zp.i<~]f9}/@;8mwh8Z} tS16kJEۓ٦p^ۗ' 1Y3 =T"ceosE 'di; Eک.hvn|#d! ^   Z }]uq^vOy43 ^ 3m2!f dsH l  X  c#ZrݧF*G: y#xxLy 9_ej$)C/45430R.+*(%M#iP!WIxoЙΚj{ɞ2@/M+&4  Ri "'$$^%%%%$#\" wO B+U " f݇@GyL5.)# M @^q~h:T X  S [GkNi1w Y!iKC:9>d[\RDq_3!.T YVm| 7#G'*W,. /H.4*% HJ * O i"Q5dWE1F GJ$n |)TP=!"#$%Y&&&m&&%$#"/!9{} `!}JKCtR e A{m K"#$%/&&&' '&&q%$#"!) V#cf 9"iK 4O[VO5Eurm." N5>]`?makewۜ ވ/P!+MoJ #K7#&)G,C./.+)%"p QUZ( n/Ԑ;²򶮶!UC'o}Ҏ׶y:0Na  xVqm,] '] M' D`nnQ`8GW`y (=15)wOFa< XtD"no*|*d/3lh.6ovRe't,.=PV=#,& *" $%%^%!1 clVwIrr؁٥D'TCS zDYD)kBQ   Y ?oy|c]Z^Ek ^# (I H!Y`(Y{  _^! 9+z  9 f^0ܲ2"ۡޘ;@yvqMy8 /d ^N{ #(g.38<(<):7j4.1U.+)&"&p |$ ܰ65΄-ɵ4Ƙ ȸؔ߭NY, s1j "i$%s&&&&F&w%%$" HGI38 C nw/&Pӥ0q&krzs[& #;I7gjK:Z(  b L1Bn >$G8 ] W 8 :(Ly/uMKd0 EVbE 6!4&V*I.1V4.6r7874)/6)"~ ]IAS;WelP9c.hJ XI !E#[%&1(>)!**D+@++*)@)(&F%#! {QU 9.9$O  X j0a)4BVV5j+GS  C 0  6] _WecA&xCWxY:M  V1@+[XT A=V k-;"$&'L(Q(( )@)(&#!  MMkG>޲4DȻ ť Tx·Ag+e\ĥʝi^;I _K!_%(+-/=1b232210/o-+(%"^i6 O` HyE[m\[1fu=%29h #؉t׭2<Ӝ}5lͅ/vЋҊ ~,w 6 &:UT+ygW(w |hMF1!-LK, rEF OhEh>M0Fܣܩܙdڥ"сЧӴ$ݴc # dv2 l !c""5#|### " j `b*k$$*YB O GSpo/oBݙlD U?;XG}LG;&< 9?z"$&[(1)m)d'"$ h$@!b$'<($I H ! 'O [U^ Z'<p$(:, *#Z3N s A |v5:@z_evź[3\ȋ3ӜӕTҌӄՄ%9& z G& +/948<>@ABBV>C::62/+01F3441+%xShc &XRo;IPL\;L X&Fޟշ\K*<̒&3ѿHֵڊܺܪcvWUL26 t!D&{*.Y2568*:;9=^>>>N=]<;Z9614`1.+'$ F{Ql[L Q$'|*,-Z,&  ji0r![|7&zb\#^AzeYm 5M# S%`),0368:W;e<7==h=<;:985h3a0,'8!9d  9 Z.{"=l _="$%$F#"!O \ o[VqbuSnScWv2]+ 'Q" GQ! %'*Q-c/-12A45667&776543w2B1/-+)%E!xX < 4 {iuKt!$3')+-h//000=/-r)G$e ee* ! t6&`ϪZˣ!Ӗ܅:>Q9\? $).2K69M>]U@R-Pw Q HU;UB&6u@ #mi)FmZB $}=6~B{ b !$'Z*,X./70E0/+'#?"$a&)% t _$dG' w@o l#&'(K)D)($6 rF= _j3C۷ҖAɬŮ'"JPG迖3ÌEyˇрs*qk p#5#).37:=?A[?kg>z>Z>=T="<9074q0*,o%`n) O  i \= R #'+-N0120{*#< j .;};EY+tH, P"'g,1D58<.? BuDEGHH-IHGqF EClA>"ܻHLJ&xڸUSwoq 'E`/]gHg ) 2Jp-[ 3YI  9 JqH<-  :aY]lފݻd$޺f,߰k9؉-8x$ ;|+ ?hZ!!&$<&'(&$b!#[")&),4-)/% kAw9 .01^c,!&,T0/t,^(#;pd; +nΈɑۿ'mxC JsͅШщbӍ0e)n.& "&Q+/36h9g;<`=7<840-D+,.!123/*#Br g@2AAAKA@u?t=?;8h6330l,@({#OnOfixXaޕz :id%sX G Bm^[?3Tx_4 $}8ٟN]L55 <:"&*.0258:e<=L?[@9@?l?>=r 0 {r$E +#y'*b-R/00/)i"mAW i -iw6iKAJ%y?pm| t" $)`.217z:=h@CoEFG{HH3IHGx;8x5F2.8+'7$ /V|u "%(*,---K,z( $#x &(fw k;E^ӥ|Л΁SMR͇ȒݾѹM1 u>W \5 &6,F16:>'ACEBGHiHGGED1BF?,<8M5Z1,x(#yd 6kIOݚ nBj G ]o7@  & U0CpfkqużLεH(ܝ9ܥt7G]N "&f*-,146678C87i6k41*.)" tDtԐ:ޤD)kzy_ݮלՙ.йϜΦdPљӶ}`;ލnD CִrTFC \ B cT _!!!0!l ?l$!:Jty nc |65 )%%s*]+L+u*n)(.'%$s#3" ]aqH \ -d-A&]gHhw#mBo 4{!#&&),g/Z24787b4T0,(9%|##$)%$",H C1x{2p$st0$&( !uْԯ˙OŁIs!ٹϸk%Ɛ:đ9ɶ㹬ktz`ݩ$kNrI] W m GB L@V G  !z#"(.q369:=a@DISO1/.T-+(%, $ 8?!!b!p l22Mk?=| P n%i,< ,|GP1@@p˯<ɧ6+p0ɔʣ\ Ѱх ˹9ļ຿y·Q } ؓ 9kFh#;; E6g~$,Kw$7)--r,*y)0)i-5.? IRZ@^`a bqa/^ZWSPgOOOnOOKPPPPPPP\P"POO$ON'NM MVLKJ>JIH8H:GEDrAi< 71W,e'$#!p m`_|c8!$f(+/.36Y:="ACD.GIK6L6KI HECAy?=`<;&=>@BgDCXB@չxl3ɯ~L#ګ݃Z.uK:@4 #fAkyE"b!&N-R4x;oBHNSSV_TQNKHHHrH)IJJKLLMMMMMLJFB>.;8/:=$@,CEDA<*8y3/-P,?+u*))>(c'o&%${#a"!E7 o%p,3:?Z@@L?L>=>@BD'E$CN>82,A'#!%<7 hG:#%܃f0j6 ȶݛbܽtnC湸ŹZ̺i߻"aLֱhF9 k1ȳ_붤h:^ʱ;Oԏu!rϬԦڹ!w|dh n O6 2)24ACEH!LQ!VZ2_bd`]ZWoTISRRJSSITTTTTTTsT/TSS-SR&RQPCPONNeMLKJdIGD?2:4S/F*'%$##%E(,+O.1468;>B_E@HKMOqQP9OvM]KIF9DBJ@>>:@AZCDFECA6?<97A411-"*$5I  T^MAOpڞԧҩOvɩ>Ĩ.漰hN\gy6)eyǰĨq\,0r 0զ.dҪQ򭺯}@ƒ ɉ^F\v'Wt9o %C I +Z -*s4>nHOlSVWDY_Z)[\\]^-__n`fabse9i;mqtSwww7wrvlu+trqpvo!nljhe[ab[UNID2A>;95Z/("Q $).10A/,)&#w #V} 4Vw_d|)c܆:oĖ2-:5k٨?.ܟ.{mJ͚ԚԚE&mC!DzHȫm;+>rj}DUc.1ssҌc/QT h4O X  1 {k^+$#L" /!%A+06:=?@ACCEFGHHIoJ%KK1LLL`MM>NyNaNMLJFB>A;8:}=@ZCECY@ 󻣻Q кۺ,}%㽆qKHsخɯ .򵥷LqG PΚRq2tz |MַՂ֟hXFOU0~Sv v * JD#%$"{!T ) y$,6?6IP3TVXZ\`veimNqp njgca_#_^^^'^]>]\7\|[ZvYWURMGB=:75M42d1/p./-O,+-024,7z765O3G1//-*(&$# fSD 7 (  S\EVkӥF,6mӵΈɐb³u/轜4⼡zke_tBv=h>.(Kȕ ˩MϑЗН?ÔwcIDBͲЇ9'e7qEj# w ]0\h 5G %*.P1,~'6"" .:GS)ZZyYW TwQPP QQRS@TT+UUUUUUVUUU]UUTLTSGSRRWQPOOgNMLK5JHHE@:O5 0U+( '%%$&)S,Z/258<;?cBjE@HJ@M7OPO*NSL(JGUEB@?=="?@ BECCA?E=:75824/+(T"=PgITm fCݙ{ӧѵ3lʫŋq]31j>òa.8yȰd67~ē}x0Cۧ5skذͼ3lõQʽϋq~ޓ<>zA\DFH\FB>:7768;=$><4,8$ 3?w9#&O*-0469;=>=K<:9A9:~<+>i??<71+%!u9 U 4 YA FڢxAЁ ΏwyB1HB#M[YYi~-@7Ἥ¿v$wխocmGZO{[ Vҏ>ٽ0޹b@~6Dn ,c3( _%}+1l8>DJDP.UHY[\]_aVeimqt`tq4nUjqf]ca`8`__F_^][YqU~PKCGCCDF HHFM>5-5%"&,28::975K30.,*(&$g"S ( rX- thVSYy3t|,m1ͽ~ǽoXw³"\k~QӺ4aüRս\lO Uř ȁnμ!Џ ɝ˒͗Ϸ$M܂޳.r"`( B dCl=$wh?y#&c(=%r!/."7)07w<>?YACDbFKINLQO&RTTRQOyLKJI`I)JKMxNOPQQP`POnONLNMZMDM.M9M?MnMMMMMAMwLJHDA?<<<< >n?@hBC[EFH{JNLMkOvPgPNLzJG4D@\n2ҮkZ>}wͲ˵'9qձ2":Yr6 Ǵɸ˲ͽ(ݟE CDy|LnWC")-h  TPD!$'*,./01D34+79;Q>r@ABaCC@CBTB[BBDHLqP TGW7XXXX'Y[]_ abpcjcc&ddueXgg_hhi4g)g(g%ggfUercSa_\Y4WTQ O'LHIYFzC@=~:M73*0+f&$!U+ |arئҽ־ xo6۱~HpԩP٦v7ʞĝc"-͔YR ^[.ר~=~Pٻǽ "Q|Ч+jۛ/ -[#-Yf>;UX V J >;Z !#0%&'('$ U#.).i0-7*&#!'/7 ?HFH,HFDBBCFHK}N[Q#TV]Y[^'`acddcba``ia)bbbbQ^ZUPrL?I\FC@=9~4/*I&V#u""!! : sHL ױծӞѼdʣNjī@þӺ%co/񧚨'ղζյϳ̯`}17AğSɵ̤"[Ӗ>إS ߋHTzS#GR3d}a6' ]  $ #   K: V i t{lLuS!$' *)b(&D%###y$%&),/C3695=@DGKQvV[aafjl opgqolWie-b&_]E[Y9XV-U~SQOMKIGECAX?=[:g73.)% @|iS .T3|yrFLcڤ%mӵГͦ;ȹǖp_Un¢RCHJ LLMNP7UYf^kbeda^v\~Z[^1benhheb^[ZVS3QOL KHFDTB@=M;852.*%q  =Lb#3 6oаknǛR&߽R>ĸ9믭VX-4߸uX Ē CʂJη7ѻCSؑ#orw(wJ%WL,ON }    / 5 Y  g. fm #%C%2$":! !b#&)F,/2"6]9<@CG MURW]b]ehMjklkhdna^J[eYWBVTSRPN*M]KxIGECAt?C=;8642'0-*'"(_, H 0S5T۸[ֽ3ӺZΟf8 6lŦ3û3x>* iW?SkPL¸_.^پĂЊ=r'ً܆߫<];~l R9o{,*+s= 8[d E) 9 ]^ 8^ "0#3$%%&%8$" ! z!v$6'),+*)'&( - 2G7k<@BBmCCDEGI=LN0QSU)XdZv\H^_wabrcbaA`^\[4Y~WUTRTTTU&UTR~P*NK!IwFC@=:50+S%mwD; %@NpYп4Ɉ)ľK9 ,|׶'OUϲTW%Ԥ}vr<$һѼ۽MIš ȂˌΞ=Ҋ3זQޛS(tN#@ |*3.BfT0 F MDdtB !=#$%'g()*+F,,+ *^('&&+),3/2245q6"7 8g9x=eBGMlSYV^icGhlp(s%uv\w%93?.%)$!` ?1c 0oAڕJe˫^9+#bN;簘oPY&aЛQ9\hߢTÝOhɞɡvvd˳pӷQwc!ijuO' ׷۸ݶ߷*\_?JO$4 n5^ f -b3*eplkMB z!"#P$%%Y&''*)*,11W6;3AFJN5QTV^Y[D^~`pbccGcbGbbbcdeeBd`$]YU[QNIL$JHFDA?[=%;8l63 1-)$ i"7o zZqܔڠش֫ԯOͣ}ǖ6¦t[Qdܺ(¸j۷񵩳# ZfOR`IJȵ&U@ẁzҢ9a ڬ^ ߽v'YM t-x=w%+=fDyP D sJg y A8[F_!x$X'(a(X'%$U#l##L$$%@&&'(*-2'8=BGJ NBQwTWd\`/e i$lkTilf+c_]:[Y(XVU#TRPZOMKIGECA?=b;F97420l-9*%!+O 2uHXjl"ޮ s ֠4ӾIκ͇d:0OfDžƼF;n;·=󾩼C淦?ӽ9/%ɒ*\ҥU֮~aY_| 1j/XGLXh83 }Oe  # ' $t?%Gl!*"0#$$%$W#! 7!7$&)+_+*('&(0-27;? AABIC}DfHLNQUYn[[[[[[M[Y\]^_Y`_s^J]\$[F[[)\\\[@ZMXVS:QNLI!GDBd?<9"6Z1%,&!Z# oO`WELRT[b`c]fOhiFjihg@fdWca{`S_f^^^A___^][XVTgQN1LIBGDBN?R<8A4$/)$TCb ~ KVQOn1պӧтϗLȲ ū:мt_eMPLëǩʨ ੿1Bиȹh6¿Ƈ)e Ηѧ"ԥ-׼G\ݻf~1-oEd}zG[.-A]7Rmrox + ~ *yT%X|YpM z!K""#3$$%&') *9,.14D8@<=@ DyGHJqK3KJIHHHHH-I*IeIIII1IGGEB?<9v7520.-8+r)'% $0"= =e= }-YlJGP7oYoq7|H4-;{3ЁAχ6pΐͷFz̉ψ/2dԊԲvڑ (@ iO8ye) ^@c  Y  y  l x MxL')FVP68|^ !! ~ y @!"#>%]&&&&%%J%'&)'M(y)***+8++*)(('&%$#G"!E!! ?d( & R kHE ~A -2 Wn]m"!*UGn)ߥ߄ww|sn9'>tjہ)ߍY_=2:U@JQM iC b'/F{.o &I9'Q2 4I?7f|!#k%`%$4$T#~"!"!!!"9"T"P"."!!b%ET "X$$$M$#:#"!!X i-rE#@e9 K g  +Wqd(7h3"oD{d$}vpp{}`/xae(@FrvJJTF={>w--?j.lkE;' :   gfgT $`99 p !1"""" LM  Zo:s  ) U {KCoo1eeVyiCvXC>@9/(32Ge~+cT-eL ;f 2bOILU[by'x9X!M`RQH3 F lJ G. ! ##4$Y$O$$#e"0564&[$*Ty08!Kb]'߽߾Dq58nbAri9(1 GaEl9 nH mEuRh3q4N92` . I V }K5Z8dZ/f[>Om V"##s#"a"!  U)[&92c N 0 !  a^<+BOsmVua$J2NA\[xA(;EA:q y1>TQ5v L < n0p/|0n;Ww{pIfX%{deeY]qz A[eA"RA/r |f[8UgPF=:29Se|$^G Nb'+&v?<7goHxQ.~E~<l*bv{m6bF7T'  B ! _?WN")+'R$C^N M]$~vh=e1gz%Ujs W~J("+qJ%/_/sYb7I~Kb:eCx*q-p|rRudTbX@@QcP7& f*}Z >pKc P wB?'q?jZpC)(Y~  h  [ T _%b8)w$]9C(('+]~EmH|9xem7De6s_H3oK:/q=7 g23wA U j$&NR\9pjS (;Z L! >GQCfL%1@T  i . /1<OB&~:]56e,5KyUya^JHB9AHSo$}sX%Z[A5{Y>qN@MsDG&95  e F -jxM0lPIi5/k82?LM ^ m   %*3IQl<a,uWoQ"!573OWZ!6Qg.Iw'@M7UA@*[qlh8gTWC{Cg%@`{Q r <jwuZHJbIyjSP<)wZNA$ ~mWG9*overgod-1.0/wavs/seeker.wav0000644000175000001440000004124410300722304015000 0ustar michiusersRIFFBWAVEfmt DXdataxB"Eg=a 6 X y -Os%Hl?e9988:89:88::998899:8:889:98:98:7:8898;88:9889:88:9899999889:7:988;98899:899:8:98:989:7;88:89:898:99989:9988:8:98989:898:89:99998:8:899:79:989:899;7999:89:98:9898::89:8:98:7;8988998:8:97:999898:997;8:899:79999:9979899:9898:7:9898999:9:898:98:9998:8;8:8899898:899:8998:999898::89:88:899:98:9898:89:88:99998:89999998989:889:97999989998;88;88899997:8:9:889:8998;88:99899:88989989999:997:9:8998:8;997:9998:98:8:998:9:998998:8:9899:8::98:889:7999:89:7:8:8999:99988999989:998:998:8:98899:89:9899:88;7:89999:7999999:8899:89899:89:9:8:799:8:89999979:997:989989:989899:9999998:798:899989999:99998:7:988:8;89999999979:7:8:889:8989:98998;7999:98999:8:8::889:9897:989998:79999:8:8:89:89::89999988:8:8:88999979999:989:9:89999989:8999899999988:89:8:79:88:98;8:889999:9899989:98898:89:8999999998:8;789989998998:89:88:979:8999988:88::889:89:88:89998:989998999:8999999988::98:89:8;8989:889::889:799999899:89:899:7:8999:86653312/0--*+)((&$&"""       ""$#&&())*+,.0001444687:9<<<@>A@DDCGFHJJJLLOOOTWXXYZZ]^^_aabddfehkhlknnopqrtuuuwx{z{}}     +,..~|~{yzyvxtusrq ++.-@@BBBEEGTTSVXWZZ\Z_^bbegggikjlmoopqqtttxvyyz{}|uurtprommlkjiggeedcb`__^\[[YWWVWSRSPPPNMJLIIGGFDDBA@:67434100..,++*)&'&$"$!       ""#%$''*)*+-..0122447589:<<=>@?BBDDFFHHJJMMNNPQRRUTVWXXZ[~~{|zzyvwuttrqqnpmljjiggdedbb``^\]\YZWWWUSSRKLJHHEFECBBA?=><;;:766543110-.-,*(*'&%$$#!!      !##$%''()+,,.//22244769::;;=>?A@CBDFGGJIJLLOMORQTRVWVXYZ\\_^^b`dbffegijkllnooqrssvwvy~~|{{zywuvtrrrnonmlljhgfgceca  " "#%&&')(~~}{yyxxuwstqpqnokgfdeca_`_\]Z[YYWWTTSRQOPNKMIJHIGFEDBBA?==>;:987565131//.-,+()(&%&"#!   "!$$%$'*(*-,-./122446689:CFEFHHIIMLMN\[]_`_cacefrrsuwwwy|z}}|zxyTSSPPOOMKAA?>?:=::68653403,++*)'&&$$!"!     !!$%%%'(*+*.,.11134457899;;=???BCCEDHF~||{zxwvvtssqqommlkjjgied^^\[[YYVVVTRSQOQ     6::;<<>@?BCCDFFGIHLKLNMQPRRUTVXYXZZ\^]mpo|~xuwsssqpqmlmjki[Z[WXWUTRRFCBBA@?&'&     &&))*+,...121546779:;:=??@@CCBFFHGIKSUUXXusqooomkkjigfffccb`_`\]\ZYXXVVTSRRPONLNIKIFHDEDBBA@><=;:::57543+,))(&&%#   W[[[_\a`abcddilkmmopqrrsuwwwy{{|~zjjihgfeebb[YXXVUTTSPQOMNLLIIIFFEECAA?>><=9:96664222.0--,,)(((%%$#     !!#%$'&*)(,--.0031365588;;<gsttvxxx{{|}~{zxwwustsppoolnjjihhfeccab_^^]\YZYWWVUSRRPONMLKJHGGGECBBA?>>624211/..,  !""#&&''*+*+./.032455688::==<@?ABDCFFFRRTTVXVY[Z][^``kklnnoprsttwv}PQ@?==<:9:765443/1/-.++**'&'$%# "     #"$%% -./112444769;:=;? HJJKKMPNQRQTU |~}B A @ + ) ) ' ( $ & # #          .0/222 FDHEJIJJLONNP ^__`dcceghgjk tswwxxz||}}~G G G F C D A A ? ? - , , *   ! XXY[\[_^`aaecfffihkklnnoqrrttvwwyy{}|~b ` a ` ^ ] [ [ X Y Y V U T U Q Q Q O N M M L J H H H E D D C B @ ? @ = < = : : 9 7 6 7 4 3 3 1 1 / . . , * + ) ' ( & % $ "  !!$$$&(((*+-+.0004265597:: ACBEEFGHHJLMMNOQSRS __`bddeegh  ~ } } { y z w x u t u s q r o o l m l j j i f g e d a c a ` _ ] \ ] Z Z Y Y U V T T S P D C B ? A ? = ' & % $ $ "    " $#$'''*)++/-/012354687::<==?@ IJJLNNNQQSSTUW hiklllpnpqr t q s o p o n l k k j i g g d e c c [ Z Z W W V T S S R P P N M N K = : : 9 7 7 6 4 4              XZZ[^]_`_dopsrruuxwwz|{}~~}||zxyvweddaa``]^[\XZOLKJHIGFEDCAAA>  ! /.0132565798:<<=@@AABCGDGIIILKNNOOQRSTUWXWYZ\]]```acedffihjlkolqoqtst}} yzz|}~FEDBBB@?><<;;967663221//--+*()&%&$$""       !!#%$&%(*(+,-,0013255687:9;=<@?@BBDFEGHJJINLNPORRSUVUWYY[[]]`^bbadffggihmjmnnqrrruuwwxz{||~~|y{zxvwtutqqnqnmjdc```^]\[ZXYWUVSSRPEDB@@@===;:96856322-,*)('&&$"#!        !"$$%(((),+-..1033376779;;<=??AACDEEGGJIKLL||~{{zyywvtttrppo[YZXVWTT )),*-/.aedffig}{{z{wvxutsrrpnomljhihfeecc`Z\XXWUVTSRPQMNLLJK::87774532/0/,,,      NOQPTSSUVXWgfjkkklonpqstutvxw{zz~}jhhgdedc`a^_\\\OMLLKIHHHECCDAA>>=///--+,()(%&#$""        !#""%&&('*++-.x{|{}XWUUURQRPONLKKIIAB@?>><:;879543321/0-44878NQQPSTUWWW[Z}|}z{xwvuusqqpnomkkkghgeeccaa`_][[\XWXUVTSQQPOMMMJIIFGFECBC@>>><:;896%"#! !overgod-1.0/wavs/shadow.wav0000644000175000001440000006024410306100636015014 0ustar michiusersRIFF`WAVEfmt DXdatax`$#  2L]`ZF!ps>xa X(_!B1zalAh+C k kYB*Hlzs'1ef]xgUcomqdG1r8*/FE:t&yl,%aU5a@#is$ ,Wfww$#L;9SgVN1Y(R^N$P*5lc(bbn}Oo* pvf1 r2hQ %.-,j O0rw] mI] }#q6Kz*oU?+16F(Y~k!)Ka6)%`?$Z2'/B*o'M+-RN:3]pG--$2p/? p-6k6|l b<QE~]~0:pbhlqp qaTO=_Oxa6m[YJ#:VQ:{ik$3Fj7vBRF+O3/ )=-q8Az?~FEmus<A8($alYW_iYK8H92VXoxuebj@vr76 +R,{E}\#|:{dQeIEA,[@)"eAi,sk{|N 7(qDy{@roJD\$9r O!jt:|p;YS c _ ?  )W  \<,>;lYh&c)hW 9D!}J(C 9K4f1nek|g;Nrgl#O$sr5* #OD 85&P#HjUAp: @&}H .v  i/t0P'  _j;*UQI J 9hh}a  \AxzY~B _f$1N6iFwF,_ cVNN*&*s".w&8~$K~0thSVnIeIb( & ' KYrCf $L   \Do dpZ.+k^>;.Rk'! !gXxF"`?6"GK Nn`-1CH) ulFhO+N\ ~I @`C)z& ) z-?( *1  r ye ih'7 { R WKK'zVl]U$k:eK"RUVG2yB_ 6 _^}VsU )Vs 62 Ajv^s yR?T+Q(pT$4V^nL6 mtp b~tf H> "M >7E  Zg(X j D KE0 0`h`  O MV jT0g p gWmA% H r@/WFTS+ a;, +o4 # h Yk|) b S/erUi h <$\t 6 b 8us=%E<Q.j Vc\F>m$ B K W,v  P O|z1 a /) $ \Qb94*2;Wv\dQ  n4 PAIE .O h6 F ,.} [ q7\+IwI [ ~t& fi|gF.\~&e8qi~Z"X?N8 - 3 I- W| NrrF ? 'xT" U">> ] h wLO\:Di2 n NYdPEJ X? fZd $m RYf%b  _ N \B-Q& |yUfXz[0Z  zN2c(  OsAl  Ghm  O?=:j{ ;g1Z / o}35Uf )KpJ \RTe \ V+UUNTK < OsbF[R~:a4!*FMze"?r=1K:!^  l L {b ~  @ ?$ X\/a W.\rEwwyE "}| aytS "n[#zb  _+Se  q /6v&x6dPP2tE26 , SAit&A1 s-a L5;NR%Q  /I??[Pi 4\P$<tq; ] IHApE7 ml9  )>c U  53:-tynCy]~GO#pQ  Nb05 P1o n 3 9r5X F<P^R  n @1yC X! ml  C?Et{  o^8HkhvnOG_x7uO - ?hq s ^];2av z  6A<@>{ { u Bi_5  `!UsW ?( YyW?[M "  C7^9L f  agIg;4L-1BYD|~%{V9 ^ 'fcT |q( /T\b ]2Am>` u_[8X2Fi~H icB {: w>. Gj  %`~N> E{,4Dxw}!MR[zMtf=U<l] Q Se"X, @l> @qg]`J )&?S 3xZ"l' i9  d N . Z*%V% 1 O s> Ze+3N @  e @O^zv 0Y-_! ;vk< M6R r J4Pj< _ m|M~KQ6 ,o =[  Eul - *2Om0n G ?  $5J x^b#e]ht ~QD5c{ Gr >#9 5R [Quv x *?@V* ; h| B  iY\z3H=z  '/ } ! `  lc*I^pDPDLX`"/D[ C 21x] c9? 6[\ Y  Rib  ) |(a=&L=d X7isgy J ~X^UUk3"[:-' F 8 TU"} D w Y6o iB>P5v+( [ 0p) d/ JonVsd  .~/U { ,-~\  - .2*p r ,nXM)G i id 4 ,R *0mgD'D%ODB5t | 2 b bK >Jj # x3Qd+T} f>s#8d^  bg+ =z jy"c JZMcu<{aw2Hl/ r3Vui,  [ >[$ &5ERh;GD `)?`D#P ) ,WBQym /_l  l61D/n[FoaN - ' ibHB  ?2lJc 8[tJSMz 8 <*;x } y*6lA;UN b I ++ZU w |n:(^ Yhk Oh 1 C n$J8$;+|9 * VA4xZ/U _ / 9<eK#$ [ 0 To= * "9r"G\?RA J gr+Y{1SJFY  \ [eF^bSZJa9?dU N xfP?c4d  N \nM>9DA 3  3{cUf 8n}3+G] /-^ P1YU ;e] ~-V; & Drv{Rx  }vr]B u  k6Lv B ]jaW * `|@Y*FE?3 mU 4FDI[ B k y= a$|B 5"*S %YV. CD;#K J8s9{O *=$-!;  #:y"Q8:y  M'AF hZM ^kic,E]A ? v [z*/)Jq;\5<X V K { $Mp  R SV HCE k=-1/B 'd053RX*y  6aPW}m:rD0 /7597uXXrn MqG 5 VmfR4!F@~!fS % W7X|  x}:m`xy Y % (a}EXa$ < wUU7?q-  :r+B[g 7ig3Db{ :iB jD66] n )  lQI#w=4;vg gb QQ*Z w~WK  4|  V`7wu^CIURX- EY "7_ 0 qw$g. U /Hk>6Y[e}o[m#Rm  ] )pn`AN K8,\S4 5  50@, s; x C +Hv[B >Sue8O$)nNJ rEE 49+igJHKF]} v S`Fq' V.4RM.z0ol 8{Z.s|#E   O&I|Kl"F<"i% ,  adf e>0u0#+T* ! `B 6 sU>Scg@.%1heX#1 W 1 i.BEpyA %@C&%?C$sp p -)iF a A)j{A`6.D*x N  *X?T/py>Q~^0x~ / (1iF@lG, r XKS x++L L W R }_ _% l 5(i;  ct5&W( a M-.7RNd,/ G 8bDJJ@<"D37RD D{eHIC-r {"c1LQk . [ 2y"l'^u Y d( E^Vdx\ g bq4M H*&oENg"b x 2X %<3wP ^ $ o0bgDV O5lO Q ; nb#HG?8h]/!%S}  4 ~ W yB""p[?N an (y bsJ Z| #P}m8 u  @% q| mfyb.  bO)G}}rj(51Xp q(L cC dSaJ|5M"b $ N;%NOf\SVS< ?  A G[&#B p M n^nG!<#2Wquz] ?\ ?Yj3-^!xDxSj G <{n?fWSf9m~z h w UU?2"gfX_ w  (3nb)+#?M6)I# Q *FjV T cD\- J , vTr XKJ]U|]>q?? ECPr?g->mKtQF 8  .0y > ` Tsahpaai@9=9w8X ($+]o  Opd)aG( 9mgfe7QeSyxsV' qu] 9T! h.>+`B L  8Y  Jz- xXS_Df`=  t |CRQ2 Ey 5S:-V B 6$jXRrqR:7  }0sHjx .g#> g wBZNi  w^Lv'r2XyoV #Z^&o&%3dXk0ks )E<$.S24g(v r;X_CV%k u 9  `.` )>p`}ddI|VM'2r"4]\i @ ECYc@,1N  T[} ACyr8H 75@4@i hz'WJ0 /  Dg5vI @^o+}{Kyvh5 s.I| E ! cr?j3. o= |Ea_* m X>e&G>S=`$@aj L tt5:y+&i!y 5 =G^7pi![<r Y | :Kr6'FH4jY:NK*@%Je@;>|e 6X/v1   ;W4m pN t H}rq3(=O2=TN _ S.*J1C iDP R ^ [PuLqa#G GnF :jJS & 3 |$$?m1{dR e@-hIAhze2e1bW_Srey_)}R>2dD { o U2MyQ-x^j Ex@B=[6ut [$TWC.##l}jo1f-*keT& lTF 4 ` x]>:P7 XG;C, i3q>7*zRMx;[:d#E=38Zu0 l1MD4wV4)~L1:i<<5GuJVn _`xLzW5:*7e}Y% PP-gzrx?K'(Wp4 0Lyy xY(=i:YB zeW D~Lf [Ij~' ntS-jwN.ie*oB1#"U M^:J28v k1ry /:L(W2rd,WmkI* B*u7Mi0nG:KUMBIT,rn _ih[}ns[ T#L:rr/'vwCg5COsP16r(w:5 P`@`sv%b[]6.2;.#[N4{[4.UJCb9"&3ugz Z[ Vqe9LTX {;!a^s$oY'dz4N=um1<$mS@r@Vvb$hq@#.QQF_s%t#j=^2trf [LUyz@:6{%gy r/(b$vg/d8;P=8SCNy DE"voU.379oClenF<P yXC$D@]^U jCB|0?-x%T7gM-)`Dedzxlbd z0M53 d.t( P5*xJD `S'cb\;YsKu3/sa!G)b)7z2;dv/n`EU}^n)I)+k;w(IWHMd<"JM'NC>Db4m"tPdyKM6}@#l1E 'N;t 7@ 9FPOnK,ein4'// G?-)i,k~ g^.70gYxNibYq2cO(_h 95'\MbYPqB^ {l|P3%TLx2u{1_$FAOmJ@'WKV"Jr'l{{_D>YNgP=l$cMEOH jdQSAG >\ 9*AQWg L#CJo1=Wi_PHq#Qmq^|<+l\gD;Ce4t?g!|$V `E;8>%a @orQ[ @LuX+gi51hq R ?Pg;/vyjQqtKT}IM e>Edlf:/j.5`t9<wDBPY,RC#! \*lF9q\Jh_u'q Inm8LoeIn wiSwO"n063\ 5n1?& Bun=KnZ{[% yk)Qqbo{pt&M{ GHTkX.lCT/{-@2.lvP1l?<\B`JN&paZ)HUQL\-&]AiB %bEZqBi3=VBCybIN9o5_nm#Y J3N`6+Vb'X}"N~ /&}|78<4)DGa$?cxxme~GXBg eo%nth_O1S+Osxo1~hUtf1"xB d4gv58vr$4Ws"  h^PW%G0^ f jyV !gNSo<0aH6x{=3yo-ECqfr Nhn{F^Kl^ a"nmpZk^f}k`j]FobIDI>sgTUpF`dlxVa-E(KRvr:~e;pD FXF#LJ XlN'^8&"L'kuR'mWK~zaM9XGNnHmwX,8nhH*dyfND7'tSXu*M_aM2 "?TK 7UegbVF72)u:CA':FA&<O]\WMD:0 %95*1,(3;<860)$++"  #$!      overgod-1.0/wavs/sharpzap.wav0000644000175000001440000000627010276407042015365 0ustar michiusersRIFF WAVEfmt DXdata &zNpo N ,xe6 '_[!"[|c%@&C)*Ԩ..jM..Y$MA_o..ѓ..u.....9J .- 0Fp')i!..z+.- ..D...ѳ.. ~Yg$ד޳!.......Q..M.e :-G%.....:..n.)YHۑۛ(m!q$.B..,.._.....2(GѰ.ч..'.. ..-!Ҩ--Ii-6' b-1ҵC-:-- - f,, 7Ao,+*ؖR %߳=,,,z++E,6++& _jF|++r۴&=N+**+2***V]gՑ***՛*EM*"{:&))'0K))UYݒ))q֎nܹ"W)L)M #!} /8"(5׹((Xa((׍ח`(\(O(=$((#:*@T4݄ݏ'g''E؛^'S'J'&'''B"$\ aCD "xbz&o&٠ٲL&F&"&&& h!%%1H^"U!fx#`%6"?%7%% %%ێ$$_NWZ$1,R"'($ۻ ##](##$ T^dW ##PlP(, #H ݡ"",8=ݹ"""ks݂nt"h"h.@A kk!! !!NUޓ!!!5ދVd!\!R!ާ% 8CE u9B cou߂ w o ߢߪߦD ; E|7D oe A(f8&06s!Wt| sp s  =GOnn; k%Rakz )9EWeu"1@Su{$x.@N^n~,r}b:tGw|4C)9H[m 3EXi}'=Ndu yf';Pcv{$U o;x'>Ri2HgP':Nfy'=Si4Jdz@^= "3Iax_t s 2Lf4Oiu|p6)=Rl.E_w&@Yt )C^v0OhpGQ?{%A]w"<[x&BHNHO{$?\z &E`1Nn$Ba9[z? APncb[vF>4Rq0Rq6Uv=a ,Ln>c6Y} 2Vy 2S/mSR^Q\I4Y6]=b!EnaPCIM=e"Go0T}Bi:;/;:_-U|$LwFsGpHr ws4^,T~'Myn b=Y&Q^oFWN3`?l#N~3aIyFmo$N}5dMy3cRp ^cSk ^66m6g)[NFw@s =n =o ?rBv #UOw <#Pi*_6lH~": i_za >0lS=z*dP>|1o!_U+I3|?X&fV4s,l)h&g&h:M8?( LA>==AE KV^&j4yS i 31=3-P 0?}Ra/sEW*lC[1yO(mH" j F " k J ,=[JcDF b>gF's S5gK 2 +8S; mP5iP9 5w2 *xVQ7"p \G 4   l Y D 1[m++ h%4T7%q_I4$# LqtW 9 - Gfs?c7)|hVE6&v&".9]~aI:(yiXH ~+  } @ B9J%9ObO?3%ui]NB7*{ qg ZQG fn;& 1C9U91705 ZOB; 5 + ]OQI@>4,~&6(8 />/*|TE]n7a  O  m 6 (~ ]woB/P%MZOLGD?>96360kPfV_uK~PkKQRTR SJVWWVYZZZ\ ] bfgkH)kPIanT>8dywe@ 0:=BFNQY^dkt#{+ 3 < F N UzpF /Z A i AkIy,;@JR`hs%~. = F U  _T*k34AMZ<4t,=12 >1OD]k z . > O  ^ m#~ {z_4`s"~3%$~cKky-aREEf A6 e  H [ 9ch8i{*BS fy1:"w8I\r(ss=Sr/M r5kR#e2J k#J S!z; + ]2=F l nS">^/-ffKs3Rt5Tw5]}>~uZoKY@f.R:g6 j:[Ch-Qw9_#I p5]%[>I%FPDRcUXq%.KJ7uC p6_&Q|C n4^(U  H  t = l5" 2 AY f  $A2.g,\&TL|G  u @ s = l7tSke> (n3g3c+aAlJ{D "G>_P Q ! V " W%[leb_ LT-]+b;1u7A}{W}q9q 3  F W ,|G7Qc7o yT!W)!L#L;ER&]-f5c  8  ] f B y=@DGba_1k>yK\.l=|P$d 8 x J " `4 >Kf G4\0 9 / l t W ( k ?[26ZlVyL vU,nD4 Mk]tEuS)j:;(ZJ3&e ?   k:lrR><.kK"o a>y&&%S ' l J & oK(Bn=:^B!hF#jHohF<>tu@Ic;9 v 5 &K.~$$!S% u,~MoI'pM)uu k @ k y  _   n 1| ^nd`-X-JhD iC$jH$mI&qN - v R 0 yZW 9&e~rK(r1  2 ?  l D%lJ&x0>p<!D>xi^8c  *3 \7  a 9 G2CX/wT- wV2}Y' R;tV- {W3JX](Z8 ` #8"`e !qa.Z=cBiF lJ%qN(sP, xY+ YCvh9c?hY" PJVuiZY5?{Y6^:c> h D  k GQ}H- c 1 , Q 98+/z86}'fC"mJ( r P ,  w T / yV7^SU"@LE@7[YFeBiF# J =h {  w H # rNwFwW(kK%qN*uT/u"EwyJ%qN+v xW \t\5gLLZ/ =fy 1^EnG%qO  P _ I n'w,}4vD76*IB3rT0 zY3]:b= g D k s sy t/iB^+'3hH%O * ; #nJ(tP,Njd ) _wq[uC%pa^u_nM%  q M - ?o@h $QaG%oO*xR-\eM9fN. zX3~ ;FQ5b> h G /4H[3"C3kL+vT1 |X6^=d?jFJ}?_s=<~Z7_>gg!y+sG^63`>fC nK )  s P - UPNkH M "  < \u_.6KuJl"61\=gC  k I % rP- yV3~Cp F:` c6dAiF x)7 gA >|KE?IdBjH%r7V {>l?k m %I.oxWED8&#aoa:dBkI&pM* v U 2 Md c ' p-c9 ! z o PeCkH$ s.U]{b5I fD }E7=_A#iI &  s AbEM4gK|TwD'uP. {Y6Tixq`4zX]%FhE!mL '  v V LEQEpZ2 }]9`?iE#pN)tS.>q"nE!oI(wR/ |&o|CXbTFr8/yS2\8 a ?  Oh u ? B  `tHzha?e _LGv82|W5 _ ;  d A jF'pN- p!z-42V6];e@& pm  ^ ( h _-F/<9',jI%qP- xW2  W * +V4]8c aYba_5] 8+>-#-zS3[7bWKYG( Y z%!1 \<!Rfnp6 {Q, zV5\:c ?  < S  j & k 2 d[P=(3 |R* > f   ?g2sS1 yY5 @+;"w 1 qF(H|8)ZPrN+ v S ;.7 @<S) {X4\; i)5&-pngW6kly/1\;hDk G 9=yrfkP*`\P1 vT2|[8c=gC iE) eK6[6`>cBj{$_:NYx8R% d>iB k 0` A d `s 4V* c?f B |LvY2 } Z 7  _ <b@gF  w Wn2h}$BJvPN.qN+wS0 }Z5R ( = O 1 gw%~U/ |X6]: R B x c Hc?Ae47]9`= SN9M _1TeU(pO+uR4]UN ]aE9}sL#qL(Z~:4=1WDz|\8]8b< g   9YR =T ! | d N 1 \FeeO$ p^}>2fBkX ?laGA f`Nl!O* vU1 \g+R60 -@7BxO/ zV1  { fHbSe_ ]8V *9uL+ vT0 |xJOD]3tR"#sE% zU/ xW2 }Y4[7 3lAp @ ySN4tO[pP)sN (WO  T^l<W)~R:b> f A @b-@eL-  u R / w U0}V5} V   ' v )hxo7`7_9a>0  uS.K.2~S- |W3}Z3B A 5 b ; K vM^mZx 3{ZP0tO. uR fmFz 8\Qjubt=zl\8|jEaW0 a(| j[K&lG$mJ%E-G]8uh\sT/uS/ xc'P  /P`( y G 2  \ 9/)NXK3 Y koy 'xG " Xz!x0%kL1RY2lJ'r8iLEKpl_I$j PMk,ps:@tChB ! j W{64ioz+JS`@}X4]87gVZEz1"^8S~OR/`;a<c@sRf_a>%pL&oK(rM)tP, v R ~1: } Q ^ R , <1ba,_B.TiMq(RLh`@[?"mG" n H '  n F7;m Q 5  { X 5Y4| t em K : 9YS^C.=n< a6\8`fQ:=k_0jJ'rN+sM*Yw 8 PU& / Y ! l>'?m@B rsO<!hDh $:b \5 ^t K{ p[z-R?XGPj)XG9! ~Z2 xV3~V2mp>v$?BsY:_ 6|Q  WA5>  | b A  e,L-l*uA, yt V(#?1KR^0`0U*tU*]OQV$l0sP)o:XA $eoqW+o J '  q X'MhA_=N"l/4^l|:gU;&xU?>#b$};fG#jG#rA#&Mj'nR0 }X4{Y3~Y6\9  ^ ` OVo"y E R  $WC5:$i0CNmP5l8US]&wX5X4  ^ 9   :lcO | / ` A " oJ% C Swm W  . D tO y$[6Z?uU3 z%*g1-#;Mj@kD#nKx | ) vH  v 6 h G& B7vxW@%nJOFd/ otfZVQ$tmcDGCE/5d* 4 \%gDgD!kE#$\IK9X'sf{K{]2XD|c1m M ^ <a#Nc^ ` 5 Y & c9 j Ej;K=mJmGE&M(  ;/32+; ''n2L!Dmy2K9`5 sDv@ p<l6elj^I,.fRCJ;H{,bO_ j& L  p 0 P l -^v +A-v2zS m (-I sEi S L,q76=)V,vyjdW-N?^Wv4P cz.P}tpQN7#WzL] J}u`8 &  ,c&uas{Z DKB_g!mU^Z4bPkr+8=h.k })t \)3l'LRX=+{&}*(|$vpme ]SI>2%u h W > ^Q o E B @S>wq@~7Mv{'L!.old0w[L7lR9j O 3 |   zOgn4 I  - nDW! h E " k B ';J)a;TP,kx8N4iFXT[\ AlGqFqCk\ep' GG44M^H*e=_Af*Rw2U{ 1Wz 2Sxe5> ?y)\5 I(Sy7Xv=]::pez84& %d b#OsxM6w@;?+jX[j#In7Um/Kg>' w)*a3qZ 7{I}n'<KQU[cfo.ZSx:y .Ibu.G`y $=Tj #8Qg{wW,RF#I \(a9$ )?Yu'9L_n%6GYj|"@wixEMq(.//nBL]{"W5wOBNi0EWds-:IWer*\,WwAdxE*#+>Tr".5ALU`ju}fPA@@KWeZA% ,7EMW_hnv~  '+04;@CIMSV\^dgmntwy~`;"<ILI5   overgod-1.0/wavs/shielde.wav0000644000175000001440000001014610306100264015135 0ustar michiusersRIFF^WAVEfmt DXdata:.^sE Z1s ݶI||ԁ+++}+}+z+z+x+v+ԌԎq+o+o+j+l+h+i+e+e+e+a+`+_+]+\+Z+X+W+W+T+S+S+O+N+N+K+K+I+G+E+L;+9+8+8+6+3+4+0+a%+&+++++++++ +++++++*************************%){Ϟ,.********;\ABռ***HJMLMORխ********************************}**{*{*z*w*u*v*s*r*q*o*Օї՘՚d*b*c*`*`*]*\*\*ըPҬկQ*O*N*մոչպջռ@*B*?*=*<*:*9*8*7*5*4*1*1*.*.*-*+*(*(*'*%*$*"* ************* * * ** *****&))))))))ֿ)) "$%&)))))))))))88<<)))))))))))))))))))))))))))))))))m֯ysuu։)))))))aUυֈ֋u)s)r)֐.ӗ֔֘g)e)e)a)a)`)^)\)[)֨֩֫U)T)P)P)O)L)L)J)G)H)D)F)B)A)?)=)=)<)9):)6)7)4)1)3)0)/)-)+)*)()))&)և+)))))))))7Ο))))(((((((((((((((((((((((((((((((((((((((((((((((LOLQRYן((((|(v(m(d(](TՒϿ$((( ( r%.''''''''''؏h'c'Z'Q'J'@':'1')'"'''''&&&&&&&&&&&&&&&&y&p&h&`&X&S&Sz& &&%%%%%/CχPW]ڙ%%%چHr֟ڧگI%C%:%3%*%"%%% %$$$$$$$$$$$$$}$s$m$e$]$U$L$F$=$6$-$&$$$$$#######:ڢՉY_i܏###w#r#j#a#Y#ܷ%ԁ## ## d"+3"""""""""݈ݐݖa"Y"Q"J"A"9"3"*"#""" ""!!!!!!!!!!!!!!!!!w!r!j!c!Z!Q!K!ڈ! !! 6jOU]ߚ | ߕT_٫߲ߺ? 7 0 )     xrkc[RLE>6-% CL.aaizqic[SNkq۷39]UOFA70*" vriaYSLEB 28@]a\f}xVݟ܇<5.% !xpicZTMD>7/(! E/^ afq{tlg^WQ  g09e]UQFA:3+% zslg]XPIC;a =C#_h~v/r?71*$|vohbYSME@71*# JD$3gntxphc[U < 2;y_YRKD?70)"|smf`XSJF>Zl49BRU[c}w5@:3.&  |rmg`ZTKG>91+& JRgdizuoha[T%)L 69{jf^YQJE>82*%   x r l e ^ X S K F @ 8 [ -3:AFZ`d z u YB < 5 0 ) #     y u m f c Z U O I B < 5 1 ' #     Lkmemq } v p j c \ W      C)b5< xn i a ] W P K E = 8 3 , % !     ~xpjf^XTNGA;w +16=BH/SZ`|vq@=4/($ }zrmga\VOJD>91.&" O fjq~xrkgb {k4<muzoie^ZRNHB=61+%  |uqke`ZSPHD>83^-28>INTZ_eyuoi<82-'!{vqlf`[UQJE><50*# TT@Tios|vqlfb\;6 overgod-1.0/wavs/spawn.wav0000644000175000001440000015325410306073356014673 0ustar michiusersRIFFWAVEfmt DXdata   $%&++1236==?FEKJMOVTYX]Y\n@f$h(c8^ l>fUtLLK8}rrkorwv"#5/88:BKOPJIZ8 aiq; !j6nv|FYr  V c,Xb4efi<>*$-HNftl;ap}f^?r hQ6F{9''  jO%lY N4 o ?0 7ysid;3lx|F}t GtQT*Gd8c0)'m'a'h&taجVs j}7AI;qI4҄vқ!&-G.-,W( ZV1+vS!4 l%pxW3e.+8 ;ld>b  ...E-WƖMDZ'^n %tgJt(ɹ0K44312,CV+܇ܭTrK)ka90i`W]nƺȦ s9<==;5Q"8`~4d4 5K53׾Ƽ)Ҽ̾Pv R2 ?xPUR5|N\w2kJ#e932; 3ngt(v!a Uǫ%CEFED;"ޟ'q5  1 SQe[ w l k Q 8m8)846BۺYsFZ&^*)&E ,`xE*Ae^zpiFp8wk:(G( g)bw\_q| @!J x    t G Z   g   {  {77M7~4ron(W*(C#6^*Od%GPAFa]8;?@?>;)ُЀkh TBz [qoK\I{V|O4,1!;9 66%6/ζͶܷMg"((# 5NGscȯ;==L=!F=4)7!ƵBw1 W^*)W[(}:Nx[96*S%Lb>'U6T5l66lȶ<Ŷ!H/B0m-%!7D,*UG/7>">?>;Ϊ4 = jS -Q*P2C'(KJ*:öĪ?DEAFiFC*֞'Iѯk|g% =_+776_cPt]*11c-#! 83k+Nx.`UcFCxYZX[m> V\R{sOo$X(_,TA<ĤBE>EEEA.͏ҷez** vfV5 I S P ? <  7P|777z K3J6441*$ ms \ ? wH>w#Luc+\S")JTQL\75 / ] ~ T B 6  8   l #G XC @ 76g7۷L(3s42,W1YP 1`u|g)H` ~|'_~g' f%o^.Ji $7F. nHXi6716yCᶦ>h٪-T451#T7q< o36><@?c@=7 }ĪҘ Y FFs6GK|uSz9#~M ĉEEfFFE -gA˘5!$L~ kW8&85u;H226%50ހ([$ov??3 ۿ ¤+6 Q4^17 &x+s%I:$M He6 `-8j?88IL9U+4877K5Z=oS'6@@@?'.zÔz  =2K eu $oI}Vs6A$A!!) AD_EEF&ǔW(K*[*p Hwzspw;9+2w Z728j82 /,ח8  US(]^?5/{2F}AT}w*]Ud7at-F^ABIBBBŹPq"h+%5:e'3{LXB! ( Z K  V R ;d;t}$;;Q:1fHhq R$H$cVS'46u\ G-4" n<zxp=[]$ =we`O V = w , x a }  H;:ѺOȺ}e^2:97f*<*T Yl7WW3+2LuBWN9}j}>?>><ä#eC(&Z>.XNc3RiMloSxI]?R&@)mgLvrkƃ+~4-z\!@:9A/ ; ;:6jՓ1 u7v'Vn8#AY6$)#25h n-hr2qK0AA;BAE(FJeO] 81t2 'd _%Q T#m-[SP{eWm]0Y=> xս1==*=i3Τ}) rvM#;[ RmPZ1EG{ca2SVk5@`vn<<L?c>ľ:ܨ(3{-;J"mPMTCsgQ=D\.^CLO`_*O(0z;# h4=-z=;>꽣g28Z>=;PȪIߺ=u@B6?;!¾CC05,rFiu Chx0L2@c'<'\;%a/ 5nAABA=#k67+$ Pgs?<ҽӾ;x";vG3[ AC~B ?@? 2@ϙ-ʐL `7j\1{cQn%C4OQkH>#v }~Eؾt>9??;r&>k 3I:3{V*N <cF0g,zfFS3z_Cy|?SNk7ocAVKWA3!"SB@@GɯͺRmBs1CBAVƪ+`=Jl_T?|*`^%#Y|TH|8@2eL(/=(AA@},n<;+c9 s(  vddt[PK'kfE]3C'2 HBTNʼ:MBBBAOƣz NYlK1?Q=X_8`^;n#^w&O]m %4F,:(CB@CB"?e#: :pwJYK@nQ 3 ?i\l(C?A@q?J@Vc27=:fr !U+/s&rF$91Ek7C1Cl|7g 3iDWgDDD9|+!$7ʭ-7 mT^6:&5 ڒ8 ,^7c2+J)(-' u>hJ|f=%$3ڙ=MG hbOq"$6 ilL#reR u/vI`Fb'EFCŚƙ #XBaWPcr)[S%}GXQhqlH\;05\EĆFEKFǎb'0X)`&[1xh9?e1/)w+ho!&'0AzAg@@`â4A?" I 9d  F 2   . ) c l 7   E g QZnNul<[T^Tj"Jsȗ2 IIHU%-E-/;%+2c@375F :! AK5nYg ay=P&7|d'o}&d886,0ҴV1*6p1{;VDED3IJIgn&1.. {-U~5RK18"N _  K + E y ;  "3 C  i b  y  ¹BBAt0ù>L?;rҌz\$@-G tdm(hz; RD/@iS> r RC H\tPZ+GqG?u,/r*0&RC ]6m,?a-hsV)8#X=7bWV3W$].&@ S~HnȋɃDvHI/$z0l Z|=8B?Jvi= )gf*` r ~ ` & BB B0aCC*6AG{$v   [rt+;[ ; ] A= ; 1 v : ^ 8 ;>iBl_^ }L̻̫LML#̘7n?Mc$w l34f4T*|5}+ :'& L d Z  TYdh Lq $pbm31300L)85,ID?G Ҥ]=9"/ Dx5@X(( T { MA 3j&+-[;^MOO73cO:I#QvCCBFI9+A;@z!6!&iN $ 9 /;~}["hWW,xh ^J%eRJInIɻ5$KsP+KMJV2Z7K(;KTx*Cm(pH^ HZ2?Z#7,s!^J˯`L{K/LBm;Q"eڳR !/<aA,hod4@]/8  w u   Vy# ;*DDEƈ47FF0EEσ6A-sڪ}]  (fI"s 4 Q n 7 T $ ? n t ' +  T  vA^d^K|O0-p.L+*q$W1ICFLN՘9CE)s} p#< I  A }  U9m4G~S&1X)&=9QtZ81DcZw EEaD|h;6>Gj%  N $! @ K U W c q P = k h   ? ) p & b t>]:|XP=ʪ(x'ҥ:6!%u":$5aFbfcB#R49mpdJelL ]#~uq9|>`GFoA S 3 'șGZG\mCD1Dh]45  <4x% V n TZCL7`qFB3Mc11 i7?)_OπcILiṀG<Dx7cn[d_j#2`d/rfcw&tDMN@OQ/sJJ> HU_ ]yDGN(*d0fl: f,DIXg7cg!l&EJI"˗cKnLbJΣ FN>O$]()l$ "F#"c! @!!k!4   sG?m1 9  !w j >*[ XׇHWVyV-f}.q /H 9Q!  - ) t A Wt , i M L LLu u T g fl~Vc$s!# "w{ )W 3 C  ?*K@WL7CL E!B p t"R!!"'%"""%$ $ $9&F$Q%a%$$"$$%&H#"$G$j%#:#P""#JJAzi4GFp{;>'&%`5Am<D :_l C]FP S[F-Yi=lYw^b\4 ! Q! ##7"rKL%y̤O5NnОGKG.4b,?2*"4#'('&&&&G&&$ %&%#m#'$$!""   "bUk[ \ bdArL$'VمYmqd{3٭" 9 zvlV  .    f T L/ 2 g U M @  YZug! Vj"C!.(T*j PQ2x766fV c  J c>%k6:[Jh. ,"#""5#$&$r%&'%&((&/)('z(*\(H)p) )(j(* )((8)' (r()''''kKK ʥIH{ӊ?Aa'I#(#!An 7dJ 0  6u gB0Rl8obb-]ޓ9܌JσNNeN͉SK)6̩8՗ ד)_[EاMfڰؿأ:3ڌ ٕٳٶٙٗټ]كنVGٹvؠ'؊עDaم|ٗ6)٢ڙ fEFJѝRRQF&R5 }HF+I9`Ulz};2 D_ i r`m^0y><FiPvw""g"#G$j%#&&%&&MNY$гOPdDވKMX4u/-6.)%*U,+*()+)b**(v(&)&a&X&&%"h# $#" rI3w 1 rzh }8CQX=KJO=%Aгou"Nr7br L l _ " ] y F m ) @ S s   > rkI9^_89sڞa>)OxI{W^'0O d p  T J,z9n!"<";#$%&&''(O))))*,\*+++0,-T-+-t.-+Q-.-*,-)-,G-*+-y**эOnN: ͠oKKԗBDy+X M(d,"n8@]j'%D o a [`C 7u{_!+z9Mcbݲ܅JJЃgOKNMcI*s̽bZӑѦw+NM|Y0ҟՌӎ҆o8Ӱղҿr_Ե@oZ<ӄ Ӌ %Ԏ"n׬Ր`؁AQTٮlKt5SRR8'vTUO5״2EHW!`tJ$!oC  R]fdfd1*; bY!##"9$%'J&k(&)y*a)Z+f)s*-&OHPOESS-މPRK6 u6:z4)*@*00w0p/$/-,.A/ -*)*,.*B('X()L(/'#$$$##g ([ER A A   (>8F6[x+vVsya4*~<[0 - I   ^ [ P;u6>.#Hc}2!8 n)R} 3 ^ M@o ?-;!"H(K%.%c&x) )(( .J++2,6.-./..201/20.j2<1>30&001M3K0'11/l1 1.308/ӣPQguΘ͉NwM'_#FF09+.' !H"!h|et(->  q/UB2 Kr4/ubRڄ۱KLIΉO}NMqP4J(ϻpݧAdԪl9β'Ec_}θnZ/$SSGTe:P P@HH2*.2+""S%b%$!iqZ ! - V6}e~ WR\\aW0YێۜٵNL6|NNMNt H(o ׋wo]|#M'UɟQ;_sEAȗKhe #Xg1Y]2>z9D_͎͡λ^Lц҇`թև~BKkS6SuTnԸ9V6lرqG~oybj S \ 0*w-D! G""$&%&'')++@,,////.N203w31;33{5gVUՃZW6sUFW@ ;C;1C17H7W7t3452423J10]0E.0-,`,I,)( (%'%"!G!o!1B { jGT ":9cT#`A34H/ 5t ;-)r?fT8.z-x V@ 8e  x45CS#n>Nz4nan~\@m[ ,ҌAvłLD7u^f7l $F|C&%$ $&('W*,*j-+/].10121q53W456N64869v6@9699!8:/7<8u8:96@88/78!9URU+ԆӏRfR/7ןKL@8E3B7/p$W&))'b&p#$"Y!&R  w : D}@B+|i75'L InGoKh͕MK~LEF6)aQƤ_Y֧vmfGŤ 7_ ¦3:;T{ubrǦɐ4 ]65X(ψίl QաK eQ&RSWGHT6"ޡowgs;nf#t2Z _ X0 "'#{%%'(*P**,-,.{110K23316 57B47N876WZײٷ_[(Z@.܀UWY C AE>2K39;976E75k5)6!43&4,23;1-0/+-%+<((1)y&$C!p$8"^W ) { qvcN q~lSB|3}# a_L"go?x<(N@B2R>xe>G"h:O2i"]ny_Pa)Ҥ'ewe @2 !Tm $$p$M%() +*4-2.-/L31205h535557 9f7 6:9`7;::z:;9<:P::y;A;<99::89 ;GX5USTtNN;6;s4",Q(,-,()!&'o'&#!V" Vu  S^?JRcI1[|'ݮߺHVx٣TwuI͠ͺIII_}ɧC 'p0yYƕGH?ѿSgrNӬI OOQeӏR:/ן؟nk[u-[.!bN5|U)V ;"f!"B& %'(?)*+6+,"// 0/10:2343.654w57979W7G7ۻX"YOۤZ\b!]WZB l@H?#5m3h8l>};?655{888 466n324!010}.,Q1)+*( &%K%6' !@+B T s ha`,ߛ'P[()pe,?5>TJI!!lwb/uKodV/{oac.mB%SL8FS\^k^\R{(|qu7a=nH7)Õ9$&U@ _! #U"#'&~)(++ .-Y01+101<3 7 45;476;757;:9|8;L;;d:; :;{;::<:9;;8: WTU؟TR#WMM:Fk5o=5(|+./-)(*J((.$g&$"!?79 W %cPZd-0iEݤYkٗm/]FΛzHFEʢA'\~Ne"ƾy[>%ҼX$iŽݼR#ß2lBDZǮvYLΜI5_ѓҦbeGdLLLrbO7aj%F߈q}' W<Z %m aJLd iCL]f!n$",$8&"('(+#*)-,90M-0 001413T4"5457=6M7k8c7q87YVVM3W XxJVW_A_ S/?Ew -fV9~NߝҝrN៩ul U;\du&TQڑ!3A=a ;4E6*e=8lV a5yjVjZYX2IZd3QƮdp y![^_ i"*!&%$&)+*l+-I-.a0u/0|2s1i2`442?4664D5E78"6t8S668i9!896{8779987'78F8k TiSo۲٭PsR},LMe:J692l+*,./.-0+*'*'}(n(& &#!x""m FH8[> ! +OBx ,->Z6Z_߼e܈Zu< ׎BNwCB@i}<)$ܞ2P&ȭd¸ZtýĿ ;SR#5?ã9ĕN| )̯NЈAPҔBΧ[HHGҭKV3v]gs߇1PO.9\yd / R /xLP" R"T#$(& %'h(()y+n*/-P,--G/U.d1Z0g/019432Z14U4;4^64v4ܿRcS3"SPT(RR?+ _-x.,e-- +*(Q))#{&%#!"! Z@n} 6 Kyle_+垔h*H_sWaMB.PH,"\* Z A:{oHrCJqz+|H*,y ZKQxTTUC-UOTBK5bҞǥ"F%!o%\_!;nlE n ~"+%#o%'%I)'*,M+,,.f.//0h0121B2V2423435|44Q5E4z4m5S655!5o356?43pQ^Oܾ݅NlNWCNYJI8>4:1_)?)*/y,3*()@(&'h'#$&0"{  !W%S t @ L2mPJ:}h.fSeuv9zq}xޜܻJYج?͸̷>X>=9 UĺӕQ ȬKaacLkXzϿOu0§>iN20ǒǣȽMhuͥ`fвy/<`BZCD$eG.K&ݟR0 3B7jHvRQVg{ f  \2[~!=!H"7##&H$&I(@)'()%,9+*E--.,.//0/0711 210431=PP/X߼QJR3chOP<= 8?H6,.341)2K0*00A/*/-./D,l,N,r***(&i)%&##J"h9vYd Y2_Qo6+NpZ HJrNuMMO&OBFN 7H#޵;#&Kbâ')vI ;6  <"#$M%8%(_(g(()*,2,O++, //--/0-1/L0. 3T000j20101020A2_LNKyfKJBEFa5|o16$-''+)*)&m'`'%&/&","""Y!l( oMzUf Z [ c ^4DGx*lIsPޗ\%ڿ׽lՅ56_53ȯH/q\,Й'îľƕƾâ?č84ThiƒRà*ĒIJKvhɝ:ʆ+FϗR4Hc: <4'4ݸb. BpIc~%{<02Q 9- 4  . feSR" -"{"##%''%Y&(<* ) +*)w+*).,(.,,-/0-h-0F/O0W0KKML>\ mIPL8 O4:3i)*,/l./s-H+,s-}+}+)()*R(%@&'%"#:$! ME/^dp_ D ? #oósL-x2sC ߵaGGEVD";ۮB3/uP7*}p4 6xeyQnL,%SFzqJIK{$CKC Wxu/#%ݷۺ%%5P(S*Y ' 5"! #$O#$\'&'L)1(v'b++)*u,,,J,.-,]-//a..7/0/..0///9//./JmJ5hGH޽CD2C .22.%'*(,)C'&%)%*&##M"!"!( W)>t u ] R ]!G=H"K2 ]\T,جؽ2WC2u1 1gǜ,0Cƺ4½Uȶg&öù„®=gf+þ OŅJa'] Iόazѭӛ0 X7w89c҆;!Uoyߧ_x* Qiz j h oUOT6@p{Iq ! z"#u$:$?$'&'8&6( ):)'Q*S+)+Z,*z+,,,{--,f,.*/-bJ)I'8ZJJF2I4 27/(O(--+c*)+)/)(Q'(x&'%#$$!# BgIL'+VC a  ?J#!o+p8XDoCYB3C &b@6P& NOpOxFg(v:nC,S|CUwF=FtGD"G>%RkC 7" ;E('i)?-IA #fH"!!#I##%Q&&O%& ))(|)N*(+**s+U,,&,*-,:--",-,..-1,./-EGG7FmE'okAAk0 %-1,$%(''&m%_%$$$"!9! \sF,?O%i|1 @ `# F~GFx \!*PJ zێ:fn11̥̇/s.-/DՑ(aȽцǍĿȞŭd5U?ţē J7]2dBHe//*>Мd 1t"ϓ3k4+5x\҆7*د׾,U vp]Fb\#QMf^_T = o .MU.,F{`V@ ]!!w#b#$#$H&G%J'&%&'](|(E'(b)(%'*+j((s+),)FEHF=aO;Ct;,%1y.'#%(%j%&&$5$<$$$$6!o"#!2 z%B4i ?] ' I e$"\ܸv I 2 >q18Ax/C?>yJW=J];c\q-3???;BALA? hjo]!Y%N'p+)<+n'j BT! """N#0"$2%$$$'l&&%O'o&'(u&''&(C%&%(S()~&CB>pvBA@!=N:/{p)*&"!#"t"#t3= !0 =RVZTR])QV*l d *  0%\a=dNP 'CcI߆ܐ5eؖב֝.Rm*+*ȩȘj" #.iX)τArȺoQʳN8^8ʖcRʬ,R̯TZ [eЎY-B..00gҙ҅,0P(x%F`"K(DUH-0xv T-~jyjHx?73  ;a! "!)!""B#$L"!$$$/##"$9%##"AAQ3B]A[B H=Y;F;A*'!)$& "$H!"!E m   irx$j r .@&$IF"!{ 4&Ԋ;=J <> .:8\6-5 &p1p&*s* 3e4ic[ ;d<;z)+;~-6 X L-{B^5&&r$}'+c+ab$D*x KKvmy &'u h! W 1"!!!!O!!y!"!" ??=7n==%h.6,"q!+;3l' @b: Rk    &VjwdE%#R,B^m_R 6ߑwܑDݩ ,~))." I̗Ւr?[Ъyӹe3NКiOЫtф ҢӯөBԘSՉղ ؜*a--9e,ymh>!oW5Z$dz&IS?K QD   mhytkq'WU/rf _P`/V'')(*;+/+(Ct"%TrN7yU[DS4yF3991:8+9!9|6g,-[# e%gS!g`  ) O Q  80ac^g4L 3T, I@ ,-N>dVJAXߔ߱)n (6'& ̀?b <+U?Aؼֈ<Jiف:!-ڇ<٨bpr~ bW݊8g(К+o*e+ 'y&Z& gcJubB~K & ~ I ^O;G)D+z\=a^yBb!877_7<9H7nJq-"& &U .xoh.;9aR<[& + {)&G(&[a%&"2/<$x LS>(3pV٬1/6129*! )<Y@V1Tg\mW(4I1 ri1g2w2<ݳ/o(S E/ hѻ%(()*F+gcX HI W'YnF L$I4mL>BZ554I ߽14}5e:^ %T%+ =&<}$(NFkK  x 2 n # 2 _} j|kB8q0JP2B=@bM;z&'iYҍ&%G%׈@υJHvV}_H3/xߝ{K3]w2c[QxyF&+҄&1((,l]CZ=Z99?KL-Beڅ'6&&%#D$}$n"-er H k <4:'nQܹܗ:'!'&\"݃O7!: # Y~sTj"q5O.BP&ۥہO%&+'%!b& g5*BxDtuW`m/rh$L+,g%fuO1\R$Tڽۭ"v#:#z" %*e9}oq; _yvqJ!=ٚٚ 9"""ځ__MlsE+D*d[Hm: z \<9ySuEzd?Ieu?i3o1Q PH,RWm)ޔ%%&&Lx$$B 8R9 k >k7WeyT!'a!$w%%3Ug#p"zR -{MiA - lndw%mݪ%~%$hސq 5HJD2{j#^nS"Tmܫw5"##3x16 +WVDD23T""!"k~(ܟo!u" 6B_PG@7[A+yV<%#$ |!޽`"# jH ^:w{m' d (WFX{}n:>qoh.wd::HI0;f2Xtk4 }Th':-!7## !F#$t#mc R*Spv-e[ p ܠܴ R!z!7"'e3wh -[8?jJYsW7Qb`,e+I!uM~-.:@*q\XL!"! "&ݏ:b<1KFFG 4Tn\#""`#߳!"D)C#)7):l"$`-!""J" ##!9  XP' HPm3_x @݄ݼt 1ߊ>  !A hS(Rmݫz n ܁rݛGiV.oP]"qe7-f@އݰ (! 5ވ6x0q?c7Od=B: fDRXv'PG0tQ/kT?o)[)Y fNfQ%5 Bi8kf#'$pb##1$$$J P|*\^"=y- ެޛްIG YxLfM#[jhZ9ge=l_,YQ]S{T%9 zE2x?T2c<Pc\n9ha5x`{' hNLK2MG}aM k:/id !n!x!m7 l1Z:/i5115O +n= !J!!6@ NNj#[S jb|`޻ݝGF9 ;S #CL:i}"ޕbXVY޽ߎ '| N(6FXY8 IaiJ-_.V@.dgwxKrj0}: joY 8k^mZ[C9&Q)hQn~  9   ]  v J A#[#D]x$/%$$ *~R W -  O  Z X  P 2 2 < j  3cd= h5 Mw))m).c6f]Z-bov;Dv0r8 85MnSjMocm/^eYF~]T yv[Y-EP".WO bA4Z2WhQFl87I_$f5C# U;.[ = =Zw  Py~q9U߭h}+ / ;,='y^'TjCfߏ+*C]t_}G=!jWYVx8ip(E#gKBC NX\/Soo)bgiL'qxcur}4I m ] T B7m+R'#I#uq%$%Z$O/23Pjlvl!2;  ; EKt\^ k` H}_~0f6bbX!`gP3Nf`.D`}.v8TQ9NRHLv r>a.$ Rslpmowe5% E>@ުw ]rY 6im| 51vIA_/f&`gK9_4TmQN++Jv7LY2M V/ Z  /K(X#5 #>Hh;vPPf&gF'Md߲HKyq POoK)bY l,l ށv~ޗZe\`  AK"{d;Ijs2(RU>k9W +GJ|>ss[x [Sa"/ - R 4 W  P %2b)K#E#m >$%%#&$ 90Ri6CidLUia_q Mu)v   .ym-oe1EyUD"qd)C,MY9IW* N</%yy(yxGS r(,a "1 Pm&b|!d X>f3qzo9MiZHvA ]!fHy^e|<-D  RGc 3019Ed td-  _  I jrn c!9A|VM7S5 Qzz.{ih~V#Y e|]C_z2ahcj  /3 54"w kSpo L@lPs= X[ _7YC1Y4""6#v>6$%%%d%@"q&BWU#>4$7n/- RhY5#Jn vR  ~ JUi!n3i>vxbv"3%CQul*f|+B44*pg; W6 1e`bR-߅߅  h AR_IkS[Qv@z NX,I!.@+s  A s  k-g q=u%M * !7 B 0;pF~|  zSg8L,Y,}dP$q-g?zhiV6A  L yCb8bDfmpF?9E>~i]I||\m~'YB +[S2TgV<--v ` gl:_mWK^[Yf|L+ ( v>& si(lHX7 n U R ~f( qC6 > ee<(U Ne@CGZjWeQ!|Pxh8#|qgDOpa3o88#@+  '  9 R"1~ds_v P$Cj1 x.WDdj` h O " .* y >bS(B nupa]DIZbz`BPj&_< Jf P P  H0Zw< {xLzG_ ! l &B}+CdU JSr_kN6o+%^{ 4k<c' E ; MKkGH}&f2frDM8k ]!%hC[")#Q#T#0#"!*o+LAdVwNxV, OiX   o Th6waIWn&X):)\=~;&\106VP=gNCP90 oc8Aa8-Z-x &.aB&g&u m W  ej y6O;(OiVk ,  } U  z M;vVh% ' Y 4R4 03 =J ~ xCxH\j`]x: Q;5"j 0 T v2Y -(xA^9y `S}+H*y)!>mY. EXj;v Bxf/R>om nDT>Q 8  i MOU(T7(ON+0d`W 'S: Q &a)v,2/D l A > ]&d0U1b] K;\Kp01 Jet>:`UK>Z~Za`RN?*D2Na5.N1L[K`0%z*F7z4v K  qrkp @+le>_%Vl 4 S h  6,|1-k{e=x\ *uE j'La -~ G j"Tw22"+uVDppb$*8   l 3)013m #^@QIf9<5nL,RT5A8n4( bOB*r6Xu<3@"o)Q(eC8#c* \ 1  c  12}{*g?f)@Sqt9 Nrwd3;e9 b  Z lkxLRs]E~.7}'j>cMeJ.vAO^K8) g{auXjS4JY64H1AH24#94(4QJ3VOe@k/H o,. iTiesQV&f0VKWcP' U v Cz0;&;-_@"  OdNY!AX  UyMlF5"s6F.1suQe66,f$3I9KN0 'NUAOz]!Cf ?RV/Epcc$eIB J"q V5v\J+k! d  ; z R 7 } , H o Ge}':G]<~|4c i%[dF+ E P ~ p C  P~|)~+=nGe=|I(s_, tH6"lLE \EP9", spTvS_`W;V8?@X/w]QfuO~96AAQ%%9G%P!ZOMRKsoY<<ixDU=B{ m8Lzn%E T _ N N y ; X 87OXZ9 `JoP-|we\<9%5^+(>]`U18&a1frIM>G"5:=Yvq#!Pfk-GKm'9ev,#K&}`F*flXDB93)X{j\^`k!"IKu'tihI5 %).5;PH^fb{y#1BJ\k| 5G[j0FVl9Mi&Ff'Me#Gm-@`{0?Ialzb w  m_azZ_z ;~)\t` 9rXA"bS1rhNE1! ykc`PG70() |~|zz{yxt{FRMMdQ=HMO[_w*)?E\Io/Gey2C[r&6F]c{{}\UY.TEqX(iz7cw td[[`gdefYVNB.! zwrfhYVXJPIDCCCRO4=w -3oAjrl[VJKDNMPQadjuw !',:DHS\fmv  -<ET`p~ *>MZm#9K^i (-9CRY`qr{<8>W>_Ay3JG%6j5tfVM?2% vtki^ZTMKFC:610'&# %,Td}5(gYdU*6?J\`ou "$oTADXuW<$nF:aaF}D~|zwrrmnigcea_]][[VVV0=_T z2Sfwxrnea^\Y][^bdflnpquxxy} "',04<?DKPV[_flrw !$%%(+Bwuq+}"zS 7E>*zeUNHFEEFCEC@>83/*%!  3wBB4uZf[2R #$&)),./224668988;w-o=M)Kq1CGIB7-  ?Lz>bA      vdN2gG(   overgod-1.0/wavs/splerk.wav0000644000175000001440000001627210276411520015034 0ustar michiusersRIFFWAVEfmt DXdataab6v">oM6(%QA "}$Q&')/50:1./01.^//00G1- .R..1114N43?321 10431N-*T(\" LKKJLJKLJLJKKNNOPQRTUVYYY[]ڱ٬aAw(8ͦмЙԳr? ,IT˝ǎǒmBʯthѮztYJT&$,rܘަߨߨ߲߫߫߭߮߯߯ߴߴJ J G H F D D A A @ @ = < : : 8 7 7 5 3 2 1 0 ! &&D''K((->-U-o-4+,-+,./001.`/03H44I8E828 877C7:#:t954S4301y233'400G1{144d477h655I4l3_6753/y.J-('j&E%$"!DHHIKKMNQPRTTVWXY\&`_= 1[؜ Ӕ5ѕш͇͗ͣͼЅmн`̾f>Qyƪ@ǡȿ|?-ʚj̠!Зϯ%sO ;^Qjz\^̌ͤ/Rm$     !&''+w,,k---.{.u2~2{2c/q/w/,/,v,-./0-n.7/2n33&47777i7,7::98*543/l/.7.-,,'(Z),D--000Q00/*/a210,,A+f*/&g%$#"! }߄Erط\Շ9гY՗X#a)׸HS1ϑΐ/̞ ;b̛)NЊ уё8֓ԦDկґn[֥nզѥ#h4bټ%ښ6ߨ#Ru^l| m !##$'()*$]%%&#$% ##$d%&&;'($$`%(2)))A-I-G-<-%- -,O0//0,++F))* ++,V,)k)),,,,//G/.p.-0@0v/.*9*t)}%$#$n#"!&!|!!"".%$$M$#j#&% %G$ HJEFCCB??>;:8956420//-++)(%%#lܵ]<2Ԭs֢֕Cؠz]ۣx}؋ئj5לןX"ҼՈk{T>34E^gٷ QvٺgZA2#ߡ]\_aabedfhjjl qsvuJ{z}~]ZYWXUTSPQMMLJGHEDCB?@=;<4  F$$;%%%U&&N*W*c*'''$$$$%%$!!!X$4$##&6&%X%$f$''(/(q%%%"""""""h!! q #"!Q! "!!+ uw{y}|_xyޛٝ2۬ۉT*Hے;܏UhږVdGCJ`"t@ABDFIIILNOQTSVW[Z\]`baeffiklmp|}yyxtsspmmmihgeda_`\Z[YVTSSONNJIIEECA??=:99QnfBl"  qstu~~yyyvtqrnnkkhffbZZWVTROONLIIGE  ""&()"Im23668<:??BCEFHJMNOPRTXXX\]_abcfhiklopstuvy{|~-,(! ! %%(LOPU~}}{wvsspplliffdb`^[[XXURPONMIHFEB@?=<78523/.,+(%$$!   yutsooligfeca_\Z51/0+*(&$"!$%'),-.13499:<GKJNNRRUXX\^_`cdihknnqtuvy{~  "%%*)../3589;<;8552.-,)'$# *-/2Y\^`cbhillprtv}|zzssqnmjIIGCA?<;7721/,)(%$   {zwutpmlihcb_^[ZVRRMMKGDB@>::541/,)(%$!   1379giknotuyy~da_ ?@EFGLLSSWYZ^a<;5 :=@  z l j e c ` \ [ V U Q N J I G C > >    "#'+-1389>?CFILPTUZ dilprux|~K H E  !$',-258;>CEHMPSVZ\_ehjoquw} #$),046 : 7 1 , * #       ,/zurlgb`GB=82/)#! 15;?xtnid]YSOHC)! 9>EJPU\cinszIB;6 !$/3<@IOV\ejw !)27Clu~ (2 ,U^5na? d o O wRAQNMj x*Psb  gZEM I [ a0[Bv  272oF9.GF"/1(yJJ8F(6  # #  $,d{!.B<A|O ,&uX`y| 3oFAJ.Md ]S!ZC n  Aw^+=@ W  _M7 -A C)q, >}3J#w Ia 4E)`< t $8. hfi$\*cf o 6 h   yI#rZ,y ; N K  ?A ~yK&;D_mTe(P}O>v)7xXVz  |6z> MA?B% n r p=m  TO;'k%q*[\'z s ( EX) $  '7b=@9Gq k*M8G[ )m 4~ TE()%hp^$b reA 3  v ki F3 a|% p K E4[ Y J o</wKPO K 0 g9 T3 :y`Py_c ,^U& 3l2"1C0 =O  aWBo\ 6 m Ww:uH e  ) 7 ' Du g  m H 5c?1/ nH:;$-O% 8 mDKWO 3 f T*[A |E!D #+IlM/ ;CV T{y-O1I { $:2- k8->.e 4\c`eY]% ! o U >  M;X/,cae G wN77p{$ : d I: 0F.vޤ/ >  O,}lA   _ Ul/ a$_ !U,$ $O$d B83zj 1b G6_Q4!p i c C wfUrݡء>s#` |.$ p";J 0`'5h ^ i}QC4= 6M$ S< 'aH WBG/t~ 2( !$%##!&0 D# ^UI`u @1HDhF Dh`d ^3C@U !'<  #tE ++&Z DV]Od\?եز{s*%= -ޑmB%++# ܧqI #J X&I 2  ea߽.Z")$" .A29 \# m_ e RM($ _}ݪkSJ! $! 5J l![#% +ߚr `% y3h t! wv!f A7g i@B"& pJ hU RGw/28s= R * v$$+q_QK 4cL%R< Q6 *$8( < l& o[;YUޑ׉3 :;61d9_ $!%ESk iX ."QyK e > |& 9;D0+  +9>;[ {bmI: aMKuda`"!$roV}޻J,C M# KT 4l M V)e. OU[ d 0H-q"=:q:ߗ{S[ A~ovNSG10: xH90 e|^]EK_ f) { @dSHhWc`&IEnOV7q!A`dI=9V 5vy#~UJ; D e SMyl'7zZ@ BuH}  4|JEs  C}q ! 1Y d9Q Igz F6|37*:]3 S*;7 y081,0hY 9SkqCoj Ei q{3GT  ~U[H 4 ݈~(L { $ uo WS  , GCYKw Nv w LR x2/R6b.  ;>K 4wC#0]TV;\"7 8 c I8[OB]v BTRKJST[f Yf*Q a kdkx m   ; M#Cd6 l xJMoxi-#lM((j2w z6sSg=%;# 6twj\[ DT ]p4nm4v.%JoX[OU$ %" |fR NV m wT:YkM[(AߩnAp8i1fa& #R @B_[i{T@47 A! o;KE <&  o %$C$2-=@)@M ?"$gpG]QTO?'$5Tm MajP(o$v&7"K b?> tB}(yFWu_6 #3"Yw sp&m;~ TX9 ^yt psL]Kzwrx5Za R2ym ^&h  6RKVk i : jC:  &QGI [  &QU : qiC [ Hi.*M\A 7 3 Z pA=k  eUu = _w  @lD*Y!WkA<R 6l)W`w:% }"\%pKRI`B_?0 ? _NU9hE-RN(Z?ZnN FNDTidpf y#Mu<~s1fAJP ;9L87R"dr>s2Lj/]_ -vVd*n /eQgWLc#  }DDbm{v_q6 `4Qb<ve{_TWY(D|jL,jDfdVX=l+Anx~Tp(?e~D(:9&$&Ff=LmV/VE/jVx s 8r/e|oz8QR?; 1@Q=N \=/!#xQ6HMyM4 8"O;"Qx_{*`FG pDb;St?0ET1CKJ3Rn0:;lw5Zx%o=S\y{o{L+ fh/\oWZXMh["f+vz'H];~v_P^-m!? U"#7x^5?%CV }&~4gt 2 'Y} h*bZ_Y}>[^IW WAe^bgzovergod-1.0/wavs/squelch2.wav0000644000175000001440000002231010273111250015242 0ustar michiusersRIFF$WAVEfmt DXdata$ [ݙab . pUF2\f@GT]#0$ { )b{3 [~JT [v5 r+wW= Rj^ V= OEW|- l w~ ba6H;Z|:7S HG: DqK / @QGg a?8]hv6~R M#SL*((r# wD~ }4A35MVQhA[;l*   0s)|"e~ KY B+8Ij 5x x` }k H3+ ;k f!42S7=<  LH^Xs7% Sp O'`< >I_ gZh"RynU*| vSd3P"P o5J'C HI"$!RZ+3u4` %b9%o۔_)#  ! y b 0 o 4Dau]!:f>~ GV%, K/;߮}O8 ` "x" i|$CU #"1! !!3[Jyix|c e^&h  2ܽT Z'9{LJA!"X"V VqnFFZq ^!"y$&'(W$6vN-,Q z3 ]=R84dlLU w Xq5I # CLٮ:Ye$.q8=W? <6J.q%Cd.WHWgc ;"# $Y$#!sqXIҷϱN w1 *4 . tzOTF-:~ Adz:CVr w!)00 -%~L?u+UֆTnntPh +y1h sZMu l TNpQZNJ{"$$!7y b!0 1$o.~233N2=/)! $;>ך#$ !Y#\% DAF܄#,c޲"iG u 6 d7.O\  r Y JtlK ޜASkxqC "%{&d#ay@#:  GSH7A 0m^g;<V ]X]u5,5߫^) 1 z mrC];Vڻ۪fG!  ''"r(,`,`P/iO  &- ` ". 0bG(3b<|B *:b&P.% n9,#z$_!*6 iuiib4kzN   IT!4$K v T[$ Y.k/Kke4Fa`B/f QQ.-qG't 6"!%4&"HvE48]X, *n` qe"7;+ Eu  l &  a cgjY@}  "e"!^"$u'\*x*)&g] B|_C~/U,i #ROAA3KF%x*g!(uF ~p i EiX k $<0Bj%%!BNG}NCY TP  5  R |  )VjTI v  <  %h K.&mtlvq p""q3vG4G1tk+g?[@j&B/-WW7\  < # K z2h  6lyG*O"Mܫ:Y8ClU  z!Ms |A1 Yl09/3zNtDf{bH6h 86|)|1~Q,68l!#!Mo:E@s&mFnMyw| k   f ugG )k4 AWy &*-,)''*K.9.'l?Y=>G~]TI%36nF37?^>MtpL1*w|cD2gytK zd|'GuW>yd% o B}A%|8[H@ &v |hBNaoU8):p$b<2Zqp߉݄F "5" o? "%O%u!G  -pF ' Ld 3#XF< ܧ9"5g=.ZL,\^<5_^ d  % $ _1KK K fN  A>lO V A  GZb&yxR0߫}UluܥdnL/ >3X<^*  ? |6rR9A}ez/i.jOn8OP K ? JmH = A GZlV? )  q sS_ uZ`Kl NzpYUlyf>EyH   jU Nm 3b9l*-Y :/G bVu: yr-b"J&+zX^o8# t G' -Kc  U AcvGN %o~7 t R f 1 n?EgrZ;P:pg V q ^  %q\l;x;9/\ Y3i J Y 0[ilGWul[ k u \ plDp: K6 <_N ~ & O8f-|AYht  R |x ! ( $lIEL[$Q cZIY ,  E+YJqL4!\>T" B D " = I j YO>crB1p( 7  X x Q *  s1 2nv%Ro$q0 m 6 m4ANjVo|uSMAz4x8 a + 4  7 #[bH f{s\gVm V  -  ` 8 , 1 W i P%RzKJwW|81](  @brU=]vQXv/jr9 0     c ^5D5"K1{JCxJ Y  [ ~ M ' p W ! 9C>=NH6LZ_4 tNb  * 1%R'+k(D`& 2  o y hkvX$O{[DDm2 ? n a  9 d z s:q`_|">1n %h;V n / a $%6x=O<'s' DU!s!x w>{sr~ugM4Gnwe+ U t Cw*qH3x4p|Q/fVF  !'5Oki sph+:>?+H)M/P]dLx=ph8T $Fx.Q5xjJR*L'* ^4AvE)k(I\I$0yC U^nt nhe#=eLu7xyt5:d{p8G~86" = A ,("`ghn~S^wL((fyT+EAacg/~JqGF ~Y3_lSS{vjF@^#["i# NL<n$wRmh~lX5*nYs'n-#8u28biR;PpRK\xq6r0RN<y9o4qt0^[q G~#`C%%!6k};mhT&V pL9AyN-e+t}Aid+<25H! rmroeV;!T8+oHy"\!h|i[G#tw( -jkl(Qr&3XTg4S!\'FC KQ4LTVTYq0SS;EfD#|:a$ 8f7\ 1=@<+vO* iEfYSYkCWK|cAuN- /BP_ku~5^%+7BPaqrX< }[:  #"'2AWx/CE?;7:D_c8gUHGKOX\aa__[^`fmy &.:EOY\_[QF=5002546/  )06<@??:40))&%&&"! overgod-1.0/wavs/success.wav0000644000175000001440000030074010304311556015200 0ustar michiusersRIFF؁WAVEfmt DXdata  !(9I= #BL-PiP /`~M .@/$e_ l: E&wH_t53XL w*\irnyaK=h fvc 5eb' zYJ=dvoFn:Hj(i"<7frAqT"UNHsp9R@yJY9-s7=evQgs#0z6"yq7G cL9I gVfoS' b5@$G,  #~k=J !_xR%N5rbG31EmNt8(Gl9^q\gYFY9Li;B(Y1-P{Jn# $O[T0#1Crr_[C ~3IA_db*H~\1H 0<yI Mu{\ %:"T.~2+x!3;PT{1R2z;tDYK>&$/4uz8+Ni'HGYxp"  CQb<'xS.OfPbJ&AmXf8q b5&6vv]TLzJ)Y*&=ft|j>  6kE(PzJ?GZv3v?'M-9RVH_+aiAt>j/4&LI1 L0(z<PaDM)#^y3w f(Sa.c,h0]&<)K d 4X=>7C<V8&Pha!JojK[\\#-8|/-&Sdv $N$t%el?};h0=;."ol:hVmNL6q<m&I#3D7\ Jsqm A9X_[?'bl--%B}?9){y}Cvw((} 0;(2bP2~PnE]_~E5J6fvZh8EbE5qT3<N{@0h;>EWOJ|EpQR}aP~LuN|.Vb;@,;\ S.eK%%vHwORw.ZF<:MVJecK0&mJ9 V" +6,9A)pn8wv# zCLAG7Iv~Xap5h4w~{}  V!|?iInMs Lb 8qxZGv me|O$3h; GI%i:n^z< plq ]&}l&1,Bt9MM8w|%huU,u}cplR^Ze,]!"<mirZ hc_AF{?y%2 7_j8{X$:x6-3 eY*Q\?3umuMR|L+M\k8(u -WNq,2`HT" j mogiD@JuW-- wh)jVt0It;hJn0H/5Ty%r|8etzC>Q6Y)<X j6EiKLA%{#yN,t^~GJta';..8VAL;#U+/I5[,\m V*ne1<Bh3o!}kc*6:*hrvIF8OoXYJI}BJh.sf1e'Mz`ljv9g)Y[^28]U**Af"6ab#"_Z_{' ;6Q_S( Tl g ``M;sVmzI^,v/;| Y&!6cO@?XDO!z+DiT)@.96@F\Q *FQz} 1 boC8 NT *|H%(1,)P6@ w C |xe UPZ&alSKAMEZn|ms-bjhE1M\MH g rr&zUqm9;?mWosXf`diTjy-2  g>iFi0s$/s &rY^D18,uNM9." !:Se"P6&W|pAW9e|A#n?]n#  vnUh@-lrr)/_ O% *7N+4PH "bKY</: J@&0m#'TDm Q4Ut93_t.j^^_>\]rX?dK3pgi=}UuYjL)\kq`zd[SGY$4J\,3 9q4QO]?F 9  y ~3&8F,/FF`jT-Oyv8Yn 2SCw 5c: a+;v< euM|Z$l';{ ? lh:UYjA O >[re+5)LSH,f { R+zC[Ni& B.GauJ,p{e_5x  I_MKw>  t4rc88Wg!E po'73. @Pt), 3Cd\"&cBZ ey- b Wq^D"@0 e aKd n/ ) A u .@]8XCh {jxBSA M8 J ^g /=*=, $ i%o(# Izy  #F  W  hVm@ ZbH 5!LtGHh P UCv)B$,!bhL 4 *:l${Y2uXE V|A<*#j^,Am Q \Rjpw>TJAv' 'M"3V++dS6%hE N 3wBc\1eo + ex!T@l(^(&  \=\4" /#Y:61l-"FvW!s_0}"Q}9 r (-TJ=5c ?87]e;S g{M0V  S,|\&z )c,z8 W( 6K ~ ,?y-7b~M.QjW}H,CX%>hNk & JKdBc`.wX;~> SI6E;6;JqYo@ |E0 ~p=k  @3jKCqs\ cB  67l +yVs#  y/  lu".s\iVJ G z  8S PW N} c9*"7} 1S; -6H0 2 +%IhsJ zS$ D, k.F Xk,Y&"t- * V DPPu $YOBN< Y? b  eIyQ4R!  r)  h=  bzfQ 7T ! : }wmnR:uhGLK X_kA?i ,+6M\Y7 7~_P  B [:K 5 ?8/ Ld 3I $!\,oH yW@ #F   TOlSN_:)/5  {4^Ry@}@1f/uQr >T <lj]~i_?i% 02Fs,G%4rBCHQ T BHC|BvK)%Ro^(stRcO~O^,KA OAU z38+98T{>hz?.=^iCP.y U?uVkvj$OE;/ Q=T7Bl 3N2tpb}H<*\QsJ76187~[ 1 #wx:=:N(AaN-5 spDi $ o  n| K N& :ZM?Q /H6tqi   o1`; C Y)js @9j ~(9 j -*MxI`T (-Mb  [ >_yALp {#a; _ V"xP9 0 ?b7k < 1 B?9k1 8Z;S) \ >wFjnh]:0da-qk@wG;  HBxY3' kX d1&1 =(l4R9b|G^TPzW+D5t lz cIR !y 5 ? W nHm8}! 9nO -z^0 } 3 re8S>1g  Gb W[T 05-C08q1 S Ra5No  t*x(T~ l0" ym}`=s pra qo* 7 }[\_  jj{ 1 Inptr @zUv . p C( qg A|#>(QD c`  @ 3=AOl1?3 ^b{] }p/$ ''  Z`WHk= g([2wgJTd k QbNM !N, squL@`h`Mpj 2h  hZt/7/s[7po~<U:6r@2us {I g[#dC^S2ZDBd{K/66G8 a 1HE 5rr) 8;b lg!3Y_ M  \IUuX%N\0g/Mr~jO$b n , `B, Yxj(L6\/Qem [8>Fh2jf?R<x  iA,  q  f) ;ws 6 +5} -pa  Z k 1XAP< fo ;@d *^ ,Z  ) iM =%`  nEaT |d AI OrY=:v H *1 { d4 #! ` H#v ZB;Erj/ Z?iFr #dE!"t y @tP + L/B LI6Gi  WG  * ". I ! /mL'cf3I  Y!\ OUf  <  >RE"   >|gQ 1_uu!(t(  Z]k M  6lJ,E9?Enq:b _ % LmL?8BDU}KKUb:X>( n O p_gg_4%I>' 6 1jWZ& %6hn , {  ;:w2{`W >@kn{ g uu4 PE4 m21~ hw W& $(?}  _z ! ,b Pd6' % (06H(A~ he mJ  ~Qrc@,p` $ =8Cm p Z  + ^pix$l-g<d- O: iJ5ZJk 4   45~5w;;  :#9i g:.c=52=L Qw5U !` k} } K@n%%?Oyr J'KzG^lU vH A-;i ?f_ Y%O7: v&}@e{ ! 1Y 8ZLRk'Y.\ rj lR )C)h@+o }@ UJ %)e3{"}94!O!B4hfF=BWl* ,< G-<Gw 4:X^l%CR49w82-   -\  %+EI+<  < DE%H#F3 Q%ku$ ~ jC|{% .tQ9+/uBgPG6  U z S%T O-b u *PD%[|y< )u P3]8p6 8N-D 'q_mo3j =  BV'*Np=I 4 Jt:& L9  L Nk`}zu(3f&K 3FDJbc* - K_=hH?$vko2B 7n&S WC`pKJ Z V] GH;]bB^VNg "Rb]S97QZEZ~ ' E XP jpR{v$GeUn?,cN{eb@ _k  GfmJ*V{UVhKhF fNG:&}I"AS DF  g\ sDY|zp/ a: t`M,_C{>[ 53 ugv hna6?: Px D [8Ne!!zE_ [@   ,Bn  jU(6hiAG  1 z  cL s mr ~Wp ; mM )x(q^& . D5.u G| eW O3| . Qu> / jQ(#;]2o 7_ 8 3/t g Zv !a3* { '  %g%i(Dg^z  q . gvT + )hmI& D(WgV`+htn8 T ~ bz  GJ #OL PM30-0(|=]~ m f_^z % vZb5=~eJCG<%&T{_7H"?mz4 CF2 A~V+) 'thF\n"C 3 %  o$5?=P p4|{C+2EUo.JJ9K&N  I (?^'!N7 Q% %'H{ m_y# (f `, z ( %}Gk!+U T mgP5GP}4'  Xi s n;&~  n^R$|G G %u 8rk; DM l_]`QY >big \ `\qCABXdctEQUb ~rh 'CfAo ipX-qm(T'  3s$sg e /YEBCetd bg`N S;9KQk  Sl`!F  n7xn@_ # 8ZQ^!j ReN hw Yw wh 'r - 1.=;< qkv 2YN}  d}Z= u Xk0]] AxP *p > jhQ%Y  [Z~Z@ VJI7Xm N bM` g Yp:/i JR 0>PB l= _}(Y2:" Y B6?w0 vM'w7qwQF$d, .j3&n*,MT B/)vo\L.fh&QGPdYp wo7 {;"fX( `_q8XWLI<N%X!oVZ>@nzjNy@PsgZ/ucLl!&AKIFGjJ-Fem,ZA'k]Z t {5#BTAF&U-2{\^cO?(w?J q{?R7tA.(v 4Ov$vC2 N ;4 nUXUz5VRy+)*WHV\ G_ 7 ^K!Ye bW A-9dd $mFOy\Z x_1}O~9 xI qc"2Dw[ M@ Q=-{! W bx .hJI l - s9{#}\V1tlY x$] K= bI = gp{mk[*o YGY>7 , kAZpd  [ ) dw Z *cpCtJaX ] V &Mqp8Bf\ UrkWz}'%Taszkk[Xn5()r-(k ~8BA u. 0 /EeuQ L @ GfZJ)\4#cG| {3W:oRYHg y Qr%k > #P] T`@A4\%3*fr&v  Q625Y 8 dBh#t?A R(@KkQ:9i}(!.Y7]I>T&UC NpW[X5j69D*Wv=kvt|!rMj XVX  -+pVOI$"JJ:PR7LRTre kcOt,cc! g M*%\b:!Y2$k m; T\Y(0w|JK3W nZ }M57pe~ 6x&R<paR UD{m> U>cP!A8f~o K "z]I:+q c p/_;I Zb 5g  C{<>. 59H)aG1q 2 l ON)W  p9()[ d{1 a L;cBb;_%Ev=` jv  6-Sr sD"hDO  'g xY  TcJI c _:6'aw1X@g{,d C 4D-"s_JB N @V>!jn iN& 1 ,%Jo-9[F#c=$s7t z; @ c %1'["_*  5 *=_9K@)AXVB(1 !jAu^NRrrlM - etlz0aI) U sXpG!Q\   Z|v/J(M {\ )D2 -nM  <}%/ ) x  4ZE*u [lN4*? Bp$gbcb z)+GNq{V? U fvG;MW @C:; @Hh0j F] ln++r3 zGK|{+ dA 4C  =o67$ 5 ,  8?V=ba AZc`CkAq\ 8 t f,ml&  =d. ibj1"pv f GOOL p !5Mw,G8 $ ; 9~ $E?@  h*zMD!t h `^~\  Z0%. oYR} &}%`;Z v+}) [ s` $cMm1rV e # x1E_ ":Qe^/mxouW8 Z, A#sJiT#  o y ,Qu DL6`x yn^QX:QEde 0  %n*?UuWsl>=?y|-4$.p'gi | ,o_jy_:?%d)iQdq= 6".vQAQ[S}JHfMSB>k5klNpj}D4Mf@D/h p #'/m!-R[B[Bt[< N n>{N]L pg0Op!Nzn\MS#>1,jfNwNq B8k  Z DJX&#VU] P*p}'  p:.fwK@"$ !P4 P@B$v M @6#V 8 t I . 51i3 w P#p-:r  I' 5Y 6]GYTez0;X@-  ol T"c`mpZY^N}y rh%} wk,8||SI"1 9 (rD [e X*4B Di|Z2Bssi~ t wn&rYl ! $1 +MA+#5c)V{s4_sRX} WM&dln Z SAqW N+zm@V g ] {7 73FeT''G1Q^DY+$%{ K;; !ufR R<=_9 Y{x& )* tw@wb9  3 sE:*ko A<BOj :Ct HS N3 QKIhzoL+tv; -'= yz##H Bs6i=s &_(Nz| \  dYR/6ACok32  ! zosaU.#gd 0;!(m C W"D ua@bs X2y$x P0SY\Yey9" cL %WF<  `R" =Ot]85  (iSW(Jw#wClYa%od^ {9 Ntx DIu}~NU 3G m  =A4`=+^M}oe /%6- '  *%DzI;hmYOl];`.EqUYz</WC+l  y L Yv"EMmdLxvL 9q$ d  C<^$2;ozi` *l=Y3  Q=uO'x[~P OYGH7#>Ud T IpkZ .W>'w? ZKn &fx-a4Qn r ~ T v{ ; g [Cyy~hB 3/f  ?Qjp&p/d G $94r S Tt$S 5 mvmQ.WWs a 4}Z9 yc*  H([Gb6$FF /k3[C` @ %m 1<^1 : h QI G 8*a^jJ Dp28_ C[(u (. hI799d ?o#2} h 6r;"; Y n3>w Q; H&  gwi i;9p ;qHY % oW{W=F{W]5{v, 0hp A  HZu Bf t'v(i H q f, }F}Cm _ >x-c ( r @+&T4  7 wG}O`8"  Xg  F r 8   #/ ;1Be=[[ |  * ^@D-Th\ el] 82 N) ]U s4i\J,) Z{ff#1mwe odp /Z86vT6 4 9 [ W[  xLwJ &+K^F xhll  .# B D~lZGdlUzc vo#0m^5 9,Vr wHJ~c1 H 0] < h= j^t/ # `MJ Agz z +AC g mI~p`>g ^F *U~  ~k+ dO >yY[osY ? Yo .  p ;X- ns4[   V+'v<mK'"s=%^ i q6 -q 5lW|Rw V?X-_!GUWi 3DR ^1OOty }T%p'!<>g   ; 9 N~ Uog\o XAtat_'{w Un\]CIR/p^z]xF-lKJ  6 $%f M@-C90P9%[) Pj e (f# YPs+N#`?[r]$1Z L ~+ u0{DI4ipS'B1:qK"VJpz\ AU  R@O1nH}ALFlyqXSzP WVZ jBxE:d79 Ed<kt lS k 5t'mX!>bqY=^&z'SjY ! W V` O&4RdpumHQN}| 0 A}:rh:FdTmChl)CIf36Mes"l < !(pz `4\k Vn  jn; *I5J L?UV5#7z|q 5,:, ? 4}3D <XTJ$((o }  vI ^7YU0[vp`!_-RB&b.i> )/ JdAw & "k!` m . Kj [#I| + %0PzHOW?  xd]EB & cAf g.`8@~^r n sQ^ -l?Dx |KPa, _ Fv2@6 Z0 - : Iau 5 8S O -lHw> 3 K#M05#\Z -4& { M? b})  ?~QgD' | # Od ]ko = G EJ<+GbpH'  #/4K _ < u[51SN>"E 9 l  '0 G VUylY@I C)/ `ud bFg!xbI ^ 7o w= G06ZX ? 'Sc&Ea^rkgo<H@ 1 "dx-m\  f xM 3 R:4| |"(!^3 ~" $&M\zYfJ83^&Cq  b *=6?jz c+h<GRT3$}C'gG   3W  {gf9vZe$ F /g0xx^T| y$?N*<_ IbyoEO$nD4@sA" 3i'IkYXw< ; DoDZ-3 vdEj(}%ZMs 4=UhJ^hu BBe@ gBUU@nW  dIpDb.zXZ1Io~&6eY ~BDg8 \ Ul 2 p H (<3 . 2T=sc^(QosX7 SV ;i':..ua ".R ^  -n,V !fu(G3?vv4 _%- a/C  /3O* _ IQ.s!!} ! [ ZLal{>}~aO; n  gqbzq mr]>O a  u4\WvJ> a R' ~V(9M} O+Z oO '  / x Z ?,)IcGw o% sphp0P*b%T B ZlK  r 5qLra&<)8 xd gSpRe qH kL |0 F IJ lk#02 x V*chkUZ3lyt%QW |m rm 9 zkTx =&1|Ag ` ^Cl(: u g 3`kla$u FmLmF 1L= H. 'g oK}mn  ,"iL9wp G0 IqI_ )|~!hw Nd5Ibc\w R\{c{Y S - s< l-  u3D3X{X 4E:69T( -k$zeB{i0P >x4/ hY < A ,9@o7  Z9$$m\ X)1Y!5[ ] wZ<M V GrE 7Hs  t Q/:}QKRiPx5s !~ c[  [M uH+;^ P  ' q)I\F(5_?t'CB9Z16\{9)aUo=j D WQ/7edp?QKmWsn~z2:nm8\0# *A' z | rO4q,FJqcxh2B1:M PJVCj0E9Br/*r"l>i*c  2{hF$U5n!M4 TBt(~2Gfl`X h*0)d?!  -H1#&dK2,=i->So6Wr a2A41of{ C b ;8fXQK[O@:x /WJ:p#Tt?}q<SUB33kx) { x["5?X~J=[$vZp y+*%QC}}Nw`F+xLea-Y[h~ $ y,>LwY kK$Y2H7}"23mgaJB! .?"  NM{ NK k @s n 4VtYCU..7m%)QyMaKeWu<DX m@lc:e   [5D@U =yY V rt Dy7 Q(52/X1qg&B)fU % 4 ;  Y B+3  ~g l yvf4 s  PaD `pSPK)W&S  t_  3 Ot| =lA{ /d_SqjJQGP?UZ   & \ Gd?R  tEy t $A; `g:r U2)] TW^63Y0LvnXL7>  Ou ^   7|O~ cZ5| Z 3Pl,S4|{>hlTs E O`> 1 nk.PV &;)hr E 4 ;2m;q<15V",#5TUP  ;e B GL G4kK^4pb!vF ekOH7N>tajE` ? tQB P  7>4( WK6/(2V [ovl; 7&d OJ "  E 3y4~mI=xxbSzyz sSQyz:(0TS;ri# X$ e | c":L 5~.|{4vfX}Y)g>H\~Ij4X  z t)j_ Y |@GX#M`KZ1hOFyK&O{*W^suO1+ a brS -.=#x=oSIw6b"od)y^]V;ok eku x 0}, 17i2Q\z5s,e\_S6_^GRq[bbXqg&: RsX`  febcdS sgweo1KG8`eq7~K6> XB+Kxt!V DJRd 9^9/b{M/yW^K*TX[G'PjB#ky+5 j z tR/cM/  ! 1 e-:`Dk ^oyOoq] 8 ivF  e  A{~'e`E0 ` Ou8W9` 91> hc._ VYi*D9iS7#:u~f#rH(a~_?bXZ l  @N=:,} o +7#4g6ieJ5,k S R'u ^ V  Zc6gK 9 Bn3z@ 0^`6p 5:f~3+^i v  V(/aMr  ^fn*o^vpAn  W, 2P?!}tO3 > %[/_J& V1an{~$!^R75@o]F @Cb B~. m70  ;^T%v  4*wzJ= m*Im2P! Kz` =H;6&" 1 M \7/6# UT6 ;$ Yp 2wh  :_>orpTeX V? &CETs Q ,CxT;Hr % h ;@VVhBn!B fyX\vS. e pcK%t} B b{;lQX1;P#xA+fbtm S4G .D<D0`q+$ H +^d_"I(J%FsFA  +:~}YfPs9 c,kqHEEL fKV24d"Lp+vA] ) y{\Y1s|Apo Q 60{je  p44DX<L y{J @3*[5S XU\#]p ' &|K|d+PI w$kf <h\ ]NA >q ? V8> Pek% /wU j MzE` < qiWF7 n y n/H+EPW< 8T6%{:i M 6tl(<$  st<&M%2B1t^; q7X  -4 Wj nv=^) 8rVZ_O  }6 2 Zsf.7WLrnU42 8 !Z9> 5 K D N BZk _GU<f L T|/.; h = "} P U&M08*g U )f'z3 a== Y= }vSrLn ] |gC )P)x z(BEv+c M3  'K x.@eaf t{X)y bEa ( j K >sj 4T~>pz9|#O= f!` =b jl B B;jvV U  )/=~ "w  {zDb|"? s  { ;![T |C >lumA\)] ~oX VPwc) bs b;*, p: 37 < H| k XV0> (0Xc R;  {X-A#[  iR?>) Wv &r15L7  n`IP|2Y q 7ppZQ[ N 96-;M]JDk|! xc RK\)  _   [X/PoMI /F nq!2 v|=d:L"8W;U!!Dx Z o h3: Q(; 3hKFhqq MZL> yPxh REg 1soN!W P 8$ /Ez O2SS~+6f g z0xh k q-D~D?A!t%MI;0" <) {:( |4QDRz%aYGmdq {X< +@{u>!~,cx<H?l uQMuU BsC# wBg  z"#"?$3/ W p _~H B?a 'm#>MKGI u /;& `gxG7 Gh5G)= I(_S * 7k#4)P]OP"3,{zV: N}cLz i 6 2T9npQ *41 ;go \gu 7 'M "#y  q 8`GRRc ^ srf/Q0' F( C|^7 j ?WnmRWbu hn& thUT4V J |Og]G ;m 859< o3_L   y} :jZgGRzt~ ^{ K ~fGXCvi4R : c XZRzB## :Z lU j7=>_z\L W!:  , 'j \Udy 3@h'NUg 1  ="q ],C" &{%E'rCWDW X=+9F oi'Sd6 J T!=9Chm a rv1"N{8xX=tJuQ  7  EB\A@ m'+VZgIXaE L"bw^~B D<82zhl  fK*NT.  YApNx- D _!e Q|&{x[QI$MzIYU K n ' ~TG~M8 )s?S f y ?Rr*: oKLt{V g   ,6c[a | ^5-c n3 6 \ >R Ts0[e:{I E'=" [ %jl ';x 'r)Q Up # e/SC" fxf#l (z = X j;3.u b"; {% B qV  , wG |@ij K3 y\-YO r?5< "{ MM"!  g~` `    #)| x V 3Y4 &o 3 )#oy `:tJg2S3c(~fdqFtx o 3e9m\T ff 8'V' o o'y+ )yaB* I$=- S%&Q+rH "  a Q 9hX@| ] & RyK  fY] >tn?] N\ 3ts9C z3Q  ?]en k H gNvG~ Jv qv4Q - 2jn ;R2j 7YAh qn a ]5 W.  WM^"C|H&=Q ) 7 UGp2 2BkH  Fi@2w!m0R}  9+ 0 zkAX@%}jYx{ - t7kh.xM Zx\@=  .gM;(\81 7-ikgtk)+?H!3rb  _C[9Z6KD, ^30>(^}_Zg (g[Rz,}j  h;@|S%  l<2x ; #|fUa`dn/ `h#D9iv z @J), qR * N24za / R~xD!9\L  QcFd+^"  ~lCR]k8[Ef k v@tL~JWj5 _z brv`5jd7bGH> 6 ]gr qpoBoJ C Szr8 de N * !,d|L^z s Sl*/P+` B VD,Kj fqz  Z$cxebi} v ; It7rGu>u  QbFY^ rs TPv|$ v J4MY ? qu9/IO>M*X>9 K+N_r j" < h* ~)2{~" @@ G2. cX'hUlGDA-#[`` >0@R]i 1 ;J^)*99 `YBHk !fmIQ WaOIA  J6vxNS[ d   j u@TU: 6-87k ;S(9 aIH F]Y/<5<Ay 63JVx8V"XVrd LBj_ A/3B{) 6^ Uv &u7 Ec $,Pl? % x-;r-:q>a jSmeWs#RT% v p+;U ; {8f~uieG B "GIhy=J=`+ jj 4hO;*b . AhJOdiBr;&gl > )#W!C>  j0yiKwP] b[|e=nXpZ[?JQnh 69_O  WH.174)n *   Z6mkU=q9(v|hsEAzg+ V=dvi2U!([B54)>$K*\ KBQb)|WDO{{HsV W ^m[O1A\Fmr=~;_1!Rq2C {fZd)6"pZS8$o 1#(9@f2t^%PqH~g2 6 F@q;VI{ i= V6HV^ {{BG_9 M.3]LvYdk8yAMtQu'y<1c)/?j1KD6'=RWi_}b 7q4^5 YAoVL#|P8yN , tm CP;AR|%:+rTd:>: f ac;n m +ZZR%srm7% ^ g vJ/iK u 2-pBrY +I)6 S^m9 _):UE +igS UiM A r  ,o# ~8G eK,~  i0 c P5lfhP.oF I\u/ w9* w \^Sv a ph "(!f Jw j+t{u 4(Ho 0 :CXGo J<7I  ' 3 WG % . -  p I I2jy m6 zI;  LrM uwl|oyj 6dUhm1k`8 eL'P  hUJ U ZFvYWU:"  O4$4)TI, 0 K +MDD  8n  *\  K.qv"K{- p Hj[pI ^n4)}HEf X L!X?,JU %aPq Y m &^>_6 fK0DiN|\1y Mg\ l50I - ,k K w*pt~- ;<#|Pw ;lPG.DU38D%K7/uQUx3$fwjHG@XZ+o,r5*7p%4vCsG[o[`tvO{ 4hH5N l 6 &q c<~a5]+9 3Z&pDT= x3Bs]g&4yPoI Z^9\ = $'f6ZJ6sZ FMR2593~]0Y^C,8"g? $s  )`:R`HCSE_:0 9 K  f4sbQ pIA'P9IS [ \ 0  "/ -5UYZJs\x vq5 f %nkH . C@T>$Rev ? &++O0y  6I]M #" 9L Z ! f s Wxt'6GU,  +vn bWwi mI6xK1Sg d T_6 s * y\@8L  {1<(rOk E {i  v3] b 1J9 j0B/$  s G29(Y NkKV"VE a  mvo ` E=?;e> m ud!m V4%G G H[s+v "0gUF\C?" p L!h8+  QOet[8  KY~|^yT, 9 TsN " e3vO *f{ auEtnsiP [ +:  W s "s ejnZAK $ Njo+ # Pt  .OGf@Mm]c  a4e*? kym\T| ] u;;;Hv q zxm<,%Y+g -D(6T{2W:O<[ S9.a&s. xZ}21qHzw  n Y:p<>Dmna7 Lar90  wt(c |sj_  bc}YRjG  mQ %7" _  G>h<` 8 tb{ T  Yto 8 1?[ c  Lyc5mat; h;F1e jp E ^ 0 h=z JKy Ev*xh6]tq*,bp M 1=>Lgu/H ? cqMsl|IM ) /9s 3 S %9'*R;yUM2 8Fs eIf 4@AV/0W1l;~s+b`ZH D l F 4hncJr}EJMK8dU@Y5" ZKL ! E2 *H R F |dUN 9 pO^W(!f_mf(;OFti mu#.Q ^#J !hEhJ)X=MtN!Lf>&CCW ye jw^ t 9 ZzT Bgb8+\ NR -4ZB7Rpoc:WF*9 <pDxK9_B 4 \; eIy +%nh91Ac 4 gk9 , qBf]7,{?a <T uvt wdB, s<&T&  'b [A }kA;D,=>H`}  j $L#gl>73py: V_SX" 3a. Q5h3(UuA z4#Hbz}<} ~EJQ?SZCjq  l TD63>AG )  x%uAa hDBpH  ^mk61 M(%]4[SBU' z    76J]2}a*D^.Z w}}tW&VWD] awq"L% a gB + t*<Zt3 Ww.vr  T c <:fL+uY. Y<q; qM5dcJ/B(Tv y >CJP F  ^ H ] ,D^.TjQ!z  )mxT|'&8~o }  QSL+ LQ [ !J nL-  yzzGo _ EW Kns,!o+2 >?H Skh#s66,BvL 1d?d n9oc  +R+{8pv< r*  8GV yE HOpI[v%Y} P Uj sT 75g7)` ]Y$ Y 8* zw !UkuN+|hm`l g s/ 'p,xL;rr"j  :53d C vbUb#w:u`:%v<r}Z  v|xI6VWM:oz5 G44 nU`]B L }s@ET @PZ/9#fL q0iTT Q v5v,eMW4 wV>2<@LMg C$Oz $ 4 @ N8[GvzYdZj@#N  xF r)F4[?65 + CM@(* W { QmJ Da!1m|D=4+ 5bq o^} H_bUnWAfx 8Vj1+P  YzNr"n 5Eb9a&LSRK&  |DSU0/ e [Y t_<7% |uk~nH76 _ uw C|?3 _Z(CCXo*3IJTB + U &6} Z2c,_ N 0.HLcTHmv+K9;1x+_A~F]/A(3 R=9[@sx"[&A=&v rvdi c | F/ X UB Vj qFqW$ ewxT]Y v  3qF|3ji& V? :\tN/P .+L{ Vp6NNm "xxo aN0.  RpoZ/.; >Wt h$QJ"  lvhu,NbMR1 3i M =^wNJ[ ]N%t/pE* fOt[,g  uk 3 ur  r\q1  lXJcYK { }FmX3o  bX@LjM &Q /gfuxO  =u. 9 1h J5 : N2:sKi:nkNu % _ u]FM"  |oju K hh r{C"^cn AL[@KIE,2?7G^I= Q l"j@C)NG I}( _5+LonVCM ;!@.X#g B( .Ul%h(C9k/^jZjVQ G]  W5E2,'bUg:d  DW $HcBkrro 'q v/  '(/@2q^ ;c5 6 .8#O 19a&}o T 4U 7: [C  (=l` ) m`V d* !(L  8K &,V 2QksZ;S)o? zJb J  q ;wA_ I s J v'p_Gy / 4bh 2 oVQh V6>JWp 9v}K* d='kh ^ V}63UF  c<]oQG` ]S hb6MnJF&W '~zq_ ]f} M MDk)d94 K<0%,'w @}BAwfH&(k66'Dt$ fIN 1$( :"A*D~ a T{3 bv>v&V~* ) 5 :{C$aQ ) b 3?F SLNsZa=rS@8y B Q b 7'Oese a y $K 0N n xj$l:6. g W @uBLl#z 8%/ b#;m,P:I] Ry~ 6 <l/qG Uh ;Gsm5(W1L E#t>hhxaB` l ~Y 6u  Tc6sA I})1u|O [\XV<ptKexo5 T+%l x&*aXu [FKJyx 8 ^3lKhi {:w ! jWG b&y_y `# =zzKH 6v /S +  +YyQm#^eA 9(M 7Ia,L x N|^x\1m%|vy&Eb)A5e \ FyJn?F"_}]EvG% &VJ!Fj ]fJ<| ; gI!>@  G12_}l'bTN A oHK  mQVNLR7P"O  0&LEICK`wJ *f ZVO { $c9< *dQ1 6  r$%z2 kq1H] 6#( 4o 3 z< P1Qp  M. : *'%vhl%{5VV? o#\Hh y Tu|Pk % [ I  lyKbPjON l D CJINk< UWO R Pk%J8Z6  *xTFU   6ON_z(Q(.&$ ]d 3 bkCAu2 ^7 1$'<36 F, Be  J %n9M[Fi8QBa^ ) Qz{@l+ !' / =SZQ"ZL mkV [1 # f[/eUGzJP?g2# YP#]O^VT ,q*#YWQE [)h q 3Q8 sV&b8a'B->)|lJP]_<$PgH!%PS6NKpS T vS4lKwX4_eglmj9(G-P4G%c(0}K{lZf"fojn FmIEY cTK]`_=HjqGv X' lmH7n{f1Ogn'LXVMK]j% Uxm$^OtD+; n <zt`: %.HtM`u*K4 ~<e; o _Su06T QC |.^$ s5h Y> ` Dx=T'>}1>q 8*zLX}%hAof_?^x x@5]  {(|b>^( |[ kg:b ll0V!SZH B>K- _ | rl  Z zk$ej  HXy#  [=zBCH D5!awq ! ga(<- \uk}XQC us~ { 6/ eSjp3  v/ ] uMI"L c {s/ #+mK~  Xx|!Y  i@zB<# o]@p? ]GS" bKWA{ u\Yr3u8" V* >ovax +mV`L CO   3[ q9Q # XH'%d\GY,[yRNi-b + ) vrl!d O qE^iA oNl@%/ \ NZF  '!L6% I ,&!p]bj vyeyr^ ? 5h_U * ogC*4neQM ! y IM$~V}!RX [}qlr;z-vyHd")e8 ^,r gBA&e L !ArY9gLSW\iIVf,,d}RL: j] UUX'6;Q8OlaWz%A ODk.MhRx7,nF(\'Xej eCxLF}{Y@x{09EevQmWlk7>U fl#F3 P2\)O+c#'WVjOfU u =B :R"bk}U\` xc m]L1[Iq7 (m"o\D W  FGRE |3 56[ (B@keZ~LZ`R5sN 0'=/PP ! V&],x \Tx K#nQu`( % VJuJ (`8FVo~B Q+n^IPA nq ]}{  _V: *UDy <<-= -L|52 Jk#4 w,/|]o)U p" [A4|=MzyBHMJ G bi! rjWL>:QmD A M sq,!HO`}];]p'H[/Er#+ ez~"x  3V@ ;D  XUUPo~9^>G+F<]#HKz /PJ8c1:0ba 8  F NM;R CxyiYiKN h|8KYHdcZUKb&FVmfT6f 81Y 8   l P>4KdstT]. K.  rRDW <2a`9{+ JLy\1BrLW? [Q + GSC8TH F8\Xa! Z|`u:{`RyR   gD6 Vn"^  SE^Jy+d!ez 5  [s? F En !^|S+' k <En3 qo,9eRwrl'0 ,Q  +Q hsS?w ?/&r~fX SC";{-*n/PuzC|oKt0u ' "?MyE g 6sZC Y _ /  v80\<%A r 6;kehkN~oFe[ <Np' Uw  sCL yR{pR|CN 9a" | Dfp cTz\*C[x 3 >b6` f xxX   @"B HPi *w O \)<\K|b2 _k3(X8& N _5{ y-hq)}K9/F V{ Hny ubk8 a[ U "zf+6AJ -nu1a15 v i(N0| $29t(ltd ~w6)4K rxRIv"E lBKr!%A&q{LCv} ,dEr=&6`Bw;6Ugis '^uEy<g `3};RB ~ i<%HZ$,usV o3=/E4%lo8Mc?Aqu${{WwT (Z{}Bq_, J ]_ =4AZ_ ;]dX$g}th6j[Y_ h o#jU 7VxL4 o]o n*:u?pcCYZ0= !szpi?(<\ %x/^coj%Qy-h ~ )O2EQ efqr;!^YpOPODN d[x^Y@U<Q|N*1 5a9^ 0_J*&" {I~K4Y"~%]#b8!1H^*}F~JBfl V NKjU@T% -X2VlV[Wu /{`MsWa?F:#DK` A;UM FxCH1y@|+3.8Aos J87F|YWP~rqE,+`g- WOfjULNE@_8soM Hs,98 4}ZeS;Z% k% @Wf6(T 3kn2t%Pd%B.uB0)YeC(;|!Y(Gn=dK-IggjB M6ajMUN nI%4 > e)uwajJO|_]m~ A]ATNiC8 I%Pf@Q 6S-6 NUD|tz }|l; t ]Q60N8czu- yN= w TA ' Fi ]-o2 }*I$J ~ 3Z}>C;}Xz#@#XJlg > }uw.4 g Uwl ]M  "&{ Z 3U,S:OH :&1 kR a 0 n D 9 V }WiVM 4=eG[{U ) 30C " ;f@ ?[R/7 l+J>! |-|FfgGn 2,Dk< p p*Kf?D\' 4e`Sz  =G\o]R0!  ^cd@o`0F(Vbe NhNq~B @pRTW+PYo TN6  y~s $ _QI1mCF6 /  HCO9 >FYN,Rh>Y10:k nu]/" Q  B{e'~pf  xCRC|du_]+D253WWQjqZg-bW0x@|ZO{re3* [b@Mxt&ny-+Vz Mt[Jg22mZ5DDE0eK_Goo#TlAQ<1]jYJ9| 7sVA*uG%T.\jSL1uK,Zp<R8bAm%z6=tp{WN$ BP>JBsh`}\;p[UT*PP{pbo$qSc4Lmp=o mg7F}U9WIgP.W"/{N&8?w]G[P' 0ef;a`r"!W Qa#:Bi@"Iaz8Vkv4E Fz/0dw '%#c[P|l4`IZu)o+LkBx_B [T[v8=jyaOY,R 'b\A{P8eK%2 0-:= P/UgJt= X7&i1|I}5*_GMODNYI\UB_sIHun,." sy[GU3`^h&F3S}a{AMe^AKLMt"u{jdk[|HWxVr Vl^_!}9ZV9BO(Nm}xAF=]JS@5 L\T=8dJ_It@79wUAf|;V>fRHKLU^$ `L_SI4sr I" h]b%t/rHj:R0Zb]sx .~CQ#Ji L^qD J_)zY&C < kP>d7Qo+5ZbQ,3V*d}g\#(8 It;-(&ypdRh?"P0l-&~-Uod^XYUV}N-`5P91U NWs=a^@tm,aF c\R%#N x)?`|A 6p{AI ?3;S$VgE g@EVc'oJ*bUw21r O&^tbde ['gcy5wV $`_mH:#vHG;e"p3D TU m>2W?/Qm nY[,cAU"1lF|}" 0NVs+t>rJo 4KAqRT<)._uBZ87DpC7Wv( Y>V2 qQpu_%]i21wjU`D"9mxB[6:1 9 &Pk~Cp~(\RT nsW\8 }Y\ae:c=79KA>(U;9AdKd~rZjlE/!r{$0_C >U\^1g/yLoUx;Q1/aK(qXPD2zdX2]%4!|_P[P +u)3 iaBR- {- a <{OB{@; :l87/29EGU.ys\`TqQWrR8{Q 2PP_OTj{,f't6Lud#3mi_a6L/d~-g-@xn 6Kdch3)WNzvLj=]%  JS:  \V8Lp#I S^X 5l{S8['KIymod2!F9!P`AA1PXy* $TDo'fFN+QQKMnp2TV>-?m`b/~>1 G* LlD[?@kE~j<B-F/>@?Jge>C8cTf6%ZnOl Y< w$ 3Y}ZHR~pvk@7|@lTGTNz=%,b8iOz (,*kB]msMzHPm!bamS#1S=$m5x,oCEj;$`tL/~]Q9w07am98x MKFU$MB!'Ci[DyUBXc upNNz57QMU~8`5r5{p- c`j }'(Ha_F*\'y3\&YfVawR^_#aPx 24ZhGyza5'XBdxCEx,7 fNx~P:{DGZolEjd? rDyN4Z-,]6 o6515 "_|k+QL_ 1 ,"}2I8@pyZ.%.a%CxF-{S,a`{j0CEi:fvWeEIL 5g, B^k Lhw2f/:>D#2#|9P6uW-9].Ea[Mxd_jWsKEZK ~[ AD 2  x$n+BGnwPK ZXWp:^qk%C(lWRJ0&C\<) s   ) v4$bC+|qzTI Jc}YmB?YP *.i@7c;0\zj{n,AK.DPZgAggcF\/,?_BSrLV O-R mOJ.`dKyk;:^^9j"z)  y Mq:s]\N@GUR<% Z[.=1[ s&z[^M&%! KUf R9: C6fdz!;f$,lIDv>|5SJ@g0V8YNk1'JwL#~[ vIN(@`S*IdLQMD|6(<2:'EOBvsi=Zb/S 95Tm ~85Qz69L#J.4$bQ'2p- NKx?IHS?K7=lVMMu&9}4 +&/@#1_]-&rn-f +  M|PYI{B)^B/u*cXCs4_P%?U`{JiJ'pG )H \@HG0) [6`^|2 (xTRTJ?Cyob'?gx^ Z *z"UEn3~%_1i+I(CD'@kfRbVF/o.O;!(K8,^DSO2M} rN5Z Xq(K${ c8X5"NJdG.[Q:9Rpi%'g+sQjuub:9$Un~eJTM[T<  "K*XH[sa#.Cn}(%bHC`'^|QQMHd,oCS1ry'X^` [Xb e6xE wDA^b~nnr\]nb\[e9[f)EyLI.mk K$o/eJ=u3@V_|WE~_^dXI gjE2'Xt x+-,?# G}?/\}E,K'M"yy5eZR:Sxl Kg4IMO?qa&-10tQrXyS/d2|d'z{aj:(z{sh k[X`~5fl~R.s B;5_ ~U&EZ%O*Z=.q(F$-zQJRCs3 QAY9Lv\VK1[0#I.4>w%YxHC pj%+e0 JhjAoJsc"pT8;9sN2TS%P<5QxU,91l +e,mvY  WEuRPnz6|%rdu)\skOLK@G8wG&Elc8-$l~&/;vfHl"0D 8]I%tD+j@2U;y2tnFMX>Zai:'nnj3{nQ.j M5#Qgxn~h n(2p5.%7]&_a|tn6 #`4H)-U*KTSg>1 M/[C>E+7D1p^BI2 9"lZV|/) #7VSF]H!&xsq|""&AIDf]% !0*+<?hk-<: +7hy> AL!.dRAY4 %`^?dCXg =gNNo(7gWC}w5/c_(9ty>(^b5/iwF!Vd:#_pJO`@ RhM EYB F]O:QC;TI2GB.JB(?<$;<4404 )-%( #  overgod-1.0/wavs/symbol.wav0000644000175000001440000010335010303127650015032 0ustar michiusersRIFFWAVEfmt DXdata #&,*$ z^B(Fq$IbtxeJ-0pEQ~$DYB1voz$LX*s2&9R!u oZ5<)cT%j?!R4Agk-KInNp'DA GP*?7F#Q:w  83C$M{5s1 tA/AbdVf1rw:1ZQ fQI4_ J@[ c  l Z|Z:+Ec#]OWu9$t% k#%Ji 4U#K*iWR-7 b 0R (B O2AH9r%}:8S5 -,8/h%  }~)9y% {  > @KEP+UN Sf/g4q xcI6l jn,xcXP g EwoM#KO}?<NYHRYk+b ,2 {:L* L Yl.x9 Y-Xa\ qg[aU0LWMj8R ~ bZk, } ~Z6:f`/~ y jrs6@' IMcC >7XN807Cr~A~L{to6F 1; ygz: z&oc0c'| 2Ll5 bU*.uޥ&I+Zzz !_F C eAa:{L =* !+! G uf |kl(\g 2 7 JFj5Bh4_|N NO " ,[M|b$* d"3${$7#! y:p 7 ]  K # K N`aGpvuj4eU@j3}z<rq AN &&L)z*.*E(W%!?B ]]V F 18 JZs E1|٧K j݌ye"?}cr1(R  o#%d&%$!y#aw N^ L}A e  v%7UP/LۙڃQ^7/B0Jg>?`p r"<$$#A""[T R<Am  qPR.H_O vMޛܦvW UK  )f]bqo-v} k"$;$*#2!t*bW * : 535G Y#A  j%.ܓFOz.Cn';Bc9 )L2gM %O|!S T*S f ]YR< [ w%  W!c4YngWK.]-` vMFy 'xh G"g CS HZ D& Y4? 7>.R%|9 FE5"mM )6 alGP! I v \ H XBVp  D<%Q/0!2"PwP:9j}/  !{ W (EbSf  \YZG7G Gw[j2 8&BjUx}mUIk 3 > mGV{#9 0 - s $E bG  fv<  9P`{99> pD!],; idgSct4> $N*T 3 % P o"O$ i9g@}Kz ~(L8XXg T U < j4" AGLDk<  5RT !/we v(]FuG3/LK=6Z /24Yr & GzF - D )Z +G35s0dv-`:oP+#x %$T'w) m r~k5 g * |}ey[!X-|x8| b1PV JF' ) B\W=Meq:  ' | 9*v*B tY.`E+@So@FJd/  e3fRclK  Yre$'go g   w[\(Cz ic # ,%V d/%P` 0A o>:m4D . m;B _TH[BZ1GZ2+ vX1e M G[@w0`r% Q  : 8Zo+qo}C,;/An|5RPQ zY9Nh+K  @ ;f d 2o/Fp 4zHS V'|Sp}7 kU("x g 7frRU A 0 +ofgX<857f+AjrCYgjP#[; x'?t ~ L }fAHb[Zh| |v  'H1 B |h+o RF-<N)#(Mi#Iu3wM .oh Uctf3"CE \ ]w %e/+Om fbAx7A GHQL-0 B y8 $w rHdA1 Nb: : yXVM~ 07LF"!| *sm8KORpzfqtJSc r Gh8jI>u c<7'* S[nKR3pb#uYX07F{xr ? ] ' Yxk*\&f ,S mjKq NXyv fDisvV:/}wg{Z d M  /3%HK 2*c}Ch+  s gtLfERj?5~xOf} g ? x G SP/Z cBX?G) j!I/As4Nk^ ]:g o \ { 50i}Nh W 9B|   b+c"`5qoSR?]'uY { zadl{#i}S'l+x0$Q&j  R.i( jA z7] t~PS/jS!o K &?  R QJPDs AXN= Km\ $zty (b`<]ytB( Ei;VW x &W&cy  MiK<Y \OCS?E"[upl!6hF ^}'\%_ 7 9jY}7 v A6H ^7.|ZF2k6| p}cJoec n=yJ+ | a +B } ld#!k{-=X/ ^fC.-[iYR4W{-6w |Om w  h 7_ G OSqVD   WD}[ddb+Pmo+ -d2(s ^< & a |x~o _*w Gu.)i {VXm$rP[]:t2P a*aO q /a-KE r6 * : [ zWK\k"Gdyk[XrI  dB{5 @ ( M?8j E (2?Q? ?M \ITpp'B 0:60#;Q5  gQf U tJu, l j x A)HgMNUL>bs#nwVh#-LU) nTX0 Bw?P( =5 DxVOG/W< I; %p*,pRrg{v: [J`b 9 .95 on7[  Ojacy?/hZ<4D ".DZ'!o*GL Cd*X f In 2  { t /XBFyi8 VZv$K_+LZi)W )H xQ T / V8d> Sw N @ ];C(^|72-$dS65+KhVa &ZuF  r cx* n   d OD!L;}&@egOy"9/pRZZOi w 6[+ C 7va)z $ K E g=SS/RO?#Y_" ;0eFO} m U  5  v w ],S= S { &i^lM8s`sn0I$t"vH&O)!u . g#! 5 AFZ"%  ds.: ' &K!1Dlg)xce 4R\5f/ > v s4t"> =  .@&"BcF`lzEm(C+@FueiG@&^  3 /oL> J 3 YUn)<L?Wc5`i :lW{N!,hu$=Qr !ki8 R O m21%+#fR3Eq p54Tf)4;;EB I A*| , W a   dd` =^Ae@6VzCY"/q]ht6?u) 7 C * b2  : X %  5:C1-wyBeUjY_euOuWz\1#2/@k f <hd8 k  I & *vjw?ktRYPEIDlb5L{S^43g s I t & 6 " 4W]E1r8fmIq(Jp@9U~>gpwR{\L F ' { S z > g   <=.fe-F[tAX9CK?d~>rP"n;U+$6V} f   &  (   @u#Zq=xor^Yi7^#Dy =]p:l`gsl ; h K p  @u OJ~GqE2}~50C\4(2<]qSvCph[N4  . K M 2 : AhV9Y?3d a$Q /xTH[V[weLCY8k   u c  BaH$MRzH B|&"YKX}/S[%uY ")JV ( @ o  x S  l <Y|^@$@ uC1@UJbZ6(mdM$&Ga9N3 (   = 8Pa4Mdg)j~Eo*{2o9 *Nip_ Fp6+d5@  W N ,IF l BYrW(u-w d S3f8+-I)+IV< % H Z U B  e s&D1,V[eyn_nWFi`$0jj!Dvnl\! l @ Z@r?` %70a.37W~pk?Z*c3'\M$ Q> m f  @ : .0acg%M?xs[~_?8}YGCPp%}B|8 . M T F - *3q%Pve.G!Zh2+ |q1pE~wDK ob }-Q_R@_ KiwvgE:)q eC-)3\&%hu@ OGW4io+zv57|$Z5WfjZ< @9@~rs*;/:, V H;< 4Win_YkY E?9[qseGPPj*LS4'Je*T<' g.%S"pY %\Xt>Ps{\-ahT'pj:,~}49n`j"ndF|DqOj%]YE|zJ x"1yR:-F/0}!a V<6C` VP'`Rn4nE@e(>g%9H{hL3D-6UCXx><oC?>c*R#lB&l:>F\W4"RHfK2p$L3-vB4iBVd[N4"EZV>QVr2c4'^\*@@c3|&{ g kA]',d/45Hyl8_ [ ~HDn1+fm1[dMZrNCNl qw] jA;24kVh`Us%z/*qK{SD?E}jyQulE gt 7- fh`@<+(lV8:+^>a)nl"y NGtmL~ E[;H<\dX5qdZfR("j`U\*H b/>ydt-~emQ~(H?`.pToUYk "fiqzJ\`sG3;Uf"9gXq\~}7CxWchGM6]h{_sgzE 8rq4A@mHrd|k*M (*iX3lVzg!p #jci'p"HTzP9rnq]x!W4>bi]6d=x" Hpb#~#`E>~u%x:gI8+wymR~oaS/s|GN!_!:d["#(b5uI;@b/T }wkNyhk+sZI5hEJ+q*RN'#YD#PCv?x,pMugx=;|B=r2bC= &!QbkS`4bzzAwQujM97QS; #Vo1C_ 66'FrCC__&tS|S Z|n#aX(etK c-[M'?Dy}9e* b^n#}I!?)}#h"gv+r5zOGAk4l:H5gt-SyZ4*9bA wN .~:2u7Nw6{;iLS,Yi wBlXv-*cf;{f;W,,LDc4  lKr@>aY`;oSg 2\=W 1w.oDH~BpJFfT"y0T1E;O?tivfJ!X=UH{$5E_8 s)K ie*g4 Hr)YmiI"Ntn0el<'@ 3f~f)p@Y mV ?{G ^I}wCP?vIihJ! ,{QhtZ\t6c?0W_+*Y[6vhq/!Jr ')GB%b<~NR88O}c2 sDyi? N#usJ'2.[ Nz : D "}J'k6o7+U9mC-kpQ&u3Ba=GG4z:g0a|]1kV!V0m p>a~y`?$&{8UzHh&2z>b)G%uL oB++;_lx+I+]I.F?lOPcPw8J<-:s=T{ Y={ h>$!2PX\ /Ya]znt gnTI_ \:7U#o{Oy=/ug7)GuAAU)v;+|.zXXw!u"G1~9^=I#U!v!ob5 >j1)}Q6j(HNAZc%:<S0l. /`via39am`JBAW #smS\o/LV)0a-XYx Ikf`22X[GCJ b=.P $g!]y=as?Dl)G0dRb0a`a0 ,QI2@U&Bo^}/@w)^Gs$VTz'5l /yl$AX]b2 *M};j<`B pT^. \O8md%#J{J[>oPZc7'Iv-uSt6jZ1{x)4 \YKx%+P*svWAUd6%Hq g=vh2ssUGD88 W`$Z" "O_I:Ui;'FnY*`q\+|{u-/m14E=Wc-j("kst+E<8YmE&*Em JO^Q"\H[QHOARh3x8#yWPIY++.VsI-!.Fk?:QD%
 a##f]CoW_C32;Pl'_ $% M"N 3s. |M<rl@n3#_g7y%ZY fI;:BSq#WZAw8!.VIM6jkBv@ $ZR{Y Gu[pVDAHZsO f_bKV}b)O0chBK$W7Qs73k ]z`OLRayH|o%|t|#x9P)ZeBV% $R!u(dxqO|"b^kYUYi~Bsx7@?DR!RubAa1 (K \AVO,fZatc]cp=mF`ZURHmx\?k;'IyA,' MPd#~qimz;eS~0 5u bR=b{pW8qF$)Er*q~8Fh'{vw7``%S )Tm T 5WoyhR5yN.)ChUb <i,4]m8sC.1Ir0z T+JdqyypaI1U6$ +@a:~L 9n52YzGcQQiAT!?WenlfXD+\@+&,=[^b4u0q; 2W{X%qsOU3KXaaZN=% fD2*.=SuBl~jJi*tB3Uvg;#_S (>NSSOE2hK9-/9Mm%N_bM0^#xG5RswM8nS1>IIC9+oQ=108Ja 1BB4T}N'5Sp^3I}Q&2;;80!rXB516DYv'&}IW/7SqpI1Z"O%,/,& u[G826@Pi  qA\7#=Tm[5%Cl!P{  " w^K:44;H^zc7 cA$(>WnpK+'Qj&Mq {bOA603<G_wnK&oT9% '5G\qtYKLRc{'Lm{eRB60/4@Rh{`@v]F0" ",>M_qobafw)JhzeUC6/,17EZqmR6}eP=-%",6BTctwtz *Hd~yfSE70**.<K_u|n\G,nZH<0+&%)-6?KWgx)F`yvgUG7-'%)2?Qdlpi^N9$teSG>8144:@GS^m{,D\ttgTF7+&!#)3BS]]ZMB-~m`SJD@@AEHR\dq+DWk~qfUD9*$"'7CMNHB3%xi`WPNKNOT[cmx-?TetzncTE7* )8==;5( ukd]YXZ[]fls~-?P]o{ukaRE6'*00/(wnjfddfjnt{+<KWeq|yqg^QB5) $#$ zwsppqsy}+9FS\iqx~zqkaZOA3'   ~}z~ *7ALX^houy|~}{{tqje]TL@1%    +3<FMW^bjmorstrmlic_VSH<0$  )/8?IMTY`aggghged_\XRLE:/!   &-2;@EKQRX[[_^]\YXRQMGA6,    %*.48?CFJMORSTSQROLJDC;4(    #%,/26:?ACEHGJIGHHDA@;8/'  !!&)-0256;<=>?A@>><;944+#  #('+,00345667645220+( "$&')),*..,-.-**(&#   "##$&%&#%$$!!         overgod-1.0/wavs/teeth.wav0000644000175000001440000002166210301302566014642 0ustar michiusersRIFF#WAVEfmt DXdata# A#eVa"}<3u=mC5dTh1f b]&(fn)Iu*]?TSr FHeeXwpCue=c +{~<{+ aBJos3HJXO7G9S1=o4`=\OS ZyXzRQbmG",zVQ_)[=;.mrc^@Wyl?J1Ksp/?^}\s#7Q# qsWbq YFNd{ggo-_"7S3-m-T0y3%y1@_P*tt1pM?l#.}C84^+ bG0 ATRJL*1=3[Cq`P70)W8<T f^,TuK Ff>;@\0a/MKvec8@tA ,c'* p7k':uh 6 gT pMWP[? i[ JL)W tQ>4 a >6 u4b`$ 4m . u<MSB O8JG vczR'm V1z  ;. " "FX K L K5oZ% J vE*`dp ?VhJy\b g ]Owc+op \6 @ u  *:Gn _U".Y X{ b#(\ -*#x(f Q~ ~&:vBZ F' d I|  <UT [RCfRj]jM I c,r tMW 3b G8a[} / @YpkkUf 0f M;G 2/  5 KPw '\DT+}U/;e \ GX5C$FtR[Wzf!JM3hIqE<V6PGeRaw,#`;Vz=E Vm ]8G|np0yݪco3m "&c&CeG yl6~ D-6 5 y< 9|71Mfy'2l߹Rp X d FyG/F ed -P, hGieA ' :ee}  P"t]a. c }}1bc !WV-%{J 0^ MLF8B$P%Ozc f=kC P/i=E2 g%;@*C/M&DvckQ B.]$X %1,)5K = 6 ;$"V, g m*F8Bjb xA #%16Z}'t< 31n!`;4 ZJUYlI4}4՛ !C*IA7:{6T 9hU Qi- ܒޓ 0wb_ - xB & o"H3&X Zg?b~0/;2 mT -zv ?&6T  tj \5wS# {Қ10T|2 d rq u >&4U  si [6wT" {Қ10T|2 f qr v A&2V  sj x!t (I[4P(qAz%WVA0 LW-]r %yI:QG>ۍ, V ~?ب0!iu #L[/->p8 {=&vX]S&e &r۔)2H} ' *W0'+լhE%4s IXP66% l@1 '%zQR<|q+1_%+!L*R%-  XYu NUW07 Oa a:r-3_$+!J*T%*  WZt LTW29 Oa^zZw?Qz'*(T-C|R>">@aP@>LߦP hz I n vg * (3  ; ۙ G%  ߚ  C, \/De X  o1! 9k"RRJ2 m <HLoK(` +~Tz N   27 t)"p87EUv@{, "$ (qS m |H) 58 p)"t84HSw>|, !& *8\U. W  v  a!oܑSBT!I3X`q#"]^\\ZDY )Z15'b^$*N  ".E87!YlRuG7 g)UK;c > \ H( D+4Fw%4sd !:!q csE8 $ /"2?=& `L$9O1 iV% n "U #=hn;w)4mT61 >@= svSW!|hcm& K"Q13 m*!M|ؙ)66ߖ H@E }j<[6 " j' ?oHH~RO5>l$#kT Y%=&qL{!Ub\ z>5al"I@| $$UqT _(A 0OXlA![w (+Mhb qX  #OeIz 4B W #  uK2)\6:! u\M t]}  !N!2T5Tb "H*~` j?t\ v %1[hK 9@J .yG.Pk}$ wg$rqnF"1jU5 JN  9l3>=\ :66b 8\!&Y e ]~] ,'\ -q1h%L`4__/  /Nh847 y  9[o8 V' kKU * 'u<&iqZ lVzx >B/| z)_  nP KW~|^z:gSG  h U~\ - Y6 e% \Ya$0 ,usoUSX/PN Nkc 7 %Q S4Jtat <daU =L ?~ g5 p-7} B0 |aHCx w 2$QZ  6Z T|& ~wz  n +n w L6CZ51"P@B H W n  'ziw 0 xh Q=Z am4Ye C TD"(qOF+|? , nvk \ie 9Hk  %4CI 2X;S%U6 p y   DO@ ,   >he"LHYOm<[|9pvr 979 /8S  k l , Brj<`Q1>dy^2< > ) oX>*}^% !Oa[dHhr"x YOSN+g~BQ[P (YNnk D/)Fx1q5oP[s7)\Hq:O}u^>A~1FR@+ ~wh*P' 96(G%B +O"Vcwg12$Dn=[{1l)9A#icgt\%sjU6'#'[>n8;k9IT<r~><; [ki-o3G2l5LaM3Ja@.ZNZ{fZt<Ai6<=IxY GflDjZD }.h(V3,g0 b}>1qTd+u7C=G(yVhUm$0Zjt[^. oPx *R~E-[$G9mu@<=lwb-^/cT3/" #%overgod-1.0/wavs/twing.wav0000644000175000001440000003163610274172530014670 0ustar michiusersRIFF3WAVEfmt DXdatar3jix|&&dz! ] @za  {X!"!s v1KM /nk2Bc|U(8  ipd r mJt6 bb " %ެWl {Kd_8 0$&:6Wa $4 i r+ RQ dp  u; lRS]f  !GoDߢ1 2R 6D a 6 b]iE jK= E <L*43 rn{U^*T B'އNG} S![f? H~=>p P$ /!aތ-\J2c4H~ ^ $6!Wzcj ytDO J :}"m1-!=9 kNR +*X|hw6#\N ($p x!~f{GA;*S*YsiX K vޭS E r+k={%" rH yox  ryi.X+8 uUK s] 1x" A !;PxF]S?BC2  X Gq  p QL9l3  vN-4j  vosN!  O 9nRޚlFvV  BBK k m`= :N ޳jR6!% 0 ~ o3Ic|W R xE?߁rt 8!E  I 2gz#eJp38 B @ 6_ ; #Ii.54?A"W&ny l 3&hT r*!M `;?w ] _' y$mY"S +|@!xnE uoU? Y$ '36x~ LSu*yPso> ]Wbq^lzT W;+ EY wj<} @:K=R&uwZ y36L1S?~Y{ wMH~#hln we_+" 'h qyw Ku/" ']O LI#/4w C<S&fQQF%c  o\XZ@rI_OcQ[Yb- kA 7NEDH } 7og//n d[u*UO  %Nr u Av*|>6vm h `*7FzeVSV yUM1KQ [ Xm0d*KG 8~\, qBQN7 3%!Zlb  PeTQte l13i|C Y0C !o pq  y, k+#89ExKp1)Cg iyb#} B^ D6z |>  b><~ =wy"_[E>PW ZV  { O9G~"   6}V ( 5 wLmp-Bu.G>wJ%ixh : ~ ~FY0 L [u a/bP_yR<l.<aV EkGK$ _8 !  WmZ|p> )q7??4bR` 6]<4   dyC %> %_&rAy fr '/z kT= . ^ &&  Z ~6m(0@~ 9D8n (D R 4: $qbK \Uw T=L) 5 hzn8[ tpFkBYaO %p==U @L> X p%@ ; ~U3% ^ px {`sy^ (?NDB9 :[u wsrlG% Z YLW w Z Ke]   w 9Q~ ` &" 9w@] C ]y+|lc0|  =L<{ s~a7 7 no: S   o~TM f $ b Wgu= t 1I ~  xqg  +2 #Lw m < @]= Q m  ~p;Q<  +  .+")kW*   nl.|E ^  lisc .N $ > nF2 B m FUK; p _=N17Pg |  Dv 9/ 2  (^= .  .[0 X \'F`L?6j  f:4RA 3 B+Os9OYb n =d,8,hT  u\k# j uu;  0 Iaka/V m XiJE3 3 :]\dq  zMA]  HWic  `PRi Z f6vZ({ x \fi \ Iq`ahy \ t&SFK  #0b0v_} ( r //V0& y t$rIs*Y |  '4[% LI:9Sv8 # 1 Nv$ t  .VH ~^ h !OG "SZD]4 - oqatZ r s7YaB~  M [ !ffV3H 8hR d i7SL^(q - y,f[ U `}zac d bDj6 4 a1XcR~ p^4 g *\p? ( [ 5KRV/ v=7+#N e8.{)  x [Le~pQz;%\ S*>}r< "9B A%s hDX7j 4i_v`-d9S,A!oE~Ee| a)o "DdLi%pPQiC'V3 6Rmz]AF|+*Hy\U ~^lL|Z ^ZKs}TL: `3b&W@3R  *i(l%",`*Zp5}cdY' ;PMR#-#Sj@OZ\YG,"[yE?5z$Jn$q#mv b>65wA<9] ppc|lx(bh~v(S@X,`$oG{oxG,}&V m]dYAD, =yUc =yP'&iU-!)5;>u8!nBn"(Rj>~}A$AgY:J%E]$`VwV\ABW9Q8dKEZC!Q 5TR}Kn)Yk=E.T]jJ9jK 2XG`uPd8R Uric!uB:N]n=TF5rJ_'w%Pi8Pb/k\dq @@mfzQg9)miPb#?J}9. u;J*,pIy@L u WI 3#hz%P-EX)irpsm.PI{X{8tBE )D?h]'Lu] kDz**a c);`> q((KV8G2Z1V5o!U\*_<b'PQ77|G\yGBFcw]W~ %`Jxr.V}<tEwl~(vhEsj]oz0R^m:Ql D[~;_cSD\hx.GQ{|Ky8omR$"h Tw8nA ?(}], xgn yVs_%;,AuPo 7'0 2yEK3PcZ*{;xCo9A-8 A|ni5(dNE/pi]+F7"JToWjL$W ;43 {\7fnwG(#Y^ }Ml "$d9TRnE[K!G7|vf/:P8^_X1N:",~?x7^UcktY]Zsq5 PR?H\ TqnQw "cP>DJ.ttdsifa}i{n}y4?@:No3d1$^-<~N01ue;"Uu- |,VU@yG$ .TZE7mFG@$HZd'A~R z"\B~+&s{.o K+,IXR2l4 ?d*D m Wr9OHEx=7{l >zA~Z]-;2s\|AZw^Cde@m,56m[L+WdO[;qo0efQFUyE~H]G u[[0S j{#ZqPukFzx3LtLhDoL FS[Kgr8mMlJtXK`Fxk(#pS \xTu\R`0SCpv gzNqZ`^ ='ng`nA_Umd4bb#%S[+OS|p+Wa,)@A 9O33\g4$!IB)9boN- p96 2d.&vD t6*f?z/ ;UPO k*g!l;k [&1i# G7;@TGMb0C$'OKtm;)Avr.E%+M*q|?wPDX M^$wz0ak? 6Wjm[@1ELG3-65-  $!  overgod-1.0/wavs/warble.wav0000644000175000001440000005634410263023262015012 0ustar michiusersRIFF\WAVEfmt DXdata\ $%*-xb~|qh^ $1>ITbn|yl_SD9) -:M]nM>*tcN<)'8Lbu0H[zaL6 hQ8" ' > X q   8 Q j rW9!x]@#  2 R n >\yoQ0o/ VwAd4WygEiCw8_!Ho8_xQ(P|Z4 b8FqGs"Lz+X!ߚm ޷ކZ+ݠݏ"""#M#}### $<$l$$$$-%_%%%%#&R&&Kس~'''׸ׅR(ֹօR)*J****+N++++",W,,,,,-b----igjhҘ---ghihҘ-ghihҘ----------------------hhihҙ---iigiҘ-gigjҘ---------------------ghgjҘ---gjghҘ-gjhgҘ----------------------ghhiҗ---ighihgihҗ----------------------higiҘ---ihigҙ-highҘ----------------------jfjhҗ---hghhhhhgҙ----------------------gihhҘ---igigҘ-hghiҘ----------------------jghiҘ---ghghhhiiҗ----------------------ihihҘ---hhhgҗ-jihhҗ----------------------hhghҙ---igihҗ-jghiҗ----------------------ghhhҙ---ihhihhgiҗ----------------------hhhiҗ---hhigҘ-iighҙ----------------------hihgҘ---iighҙ-hgihҗ---------------------gihhҘ----hhgiigijҗ----------------------hhhhҘ---igjhҖ-ihihҗ----------------------ilpu҆--}-ҌґҖe-ңҨҬO-J-F-B-<-9-2-/-*-'-"----- ---,,,,",,,59?BHKPTӧ,,,,,,,,,~,{,u,q,n,g,c,a,Z,V,Q,M,G,1,.,(,$,++++++++++++++++++++++elnuԈ+++ԊԐԒh+ԢԤԫR+M+J+D+A+<+7+2+.+++%+"+++++ +++******/39<*DJNRժ**********~*x*s*q*k*f*d*\*Z*V*Q*M*ստ6*3*-***)))))))))))))))))))))_bgl֐)))~րև֊q)֚֘֠])W)T)N)K)G)B)=)9)5)1),)')$)))))) ))) (((#%+-(7;AD׷((((((((((((((y(x(r(m(k(e(a(\(׭װ״H(B(?(*((( ((('''''''''''''''''JORWإ'''jkqv؆'~؁؆،r'l'h'e'a']'X'T'N'L'G'C'?'9'7'2'-'*'&'!'''''& "(&&&&&&&&&&&&&&&&&&&&&}&x&ْٓ٘c&_&[&٭ٱٶG&1&,&(&&&&&&&& &&&%%%%%%%%%%+/36%%%IMPTڨ%^`eiڔ%%%%%~%z%v%r%n%g%f%`%^%Y%S%R%K%I%D%?%<%&%$% % %$$$$$$$$$$$$$$$$$$$$$$cimrۊ$$$ۅۈێn$ۚ۝ۢ[$U$R$O$J$F$B$>$8$4$1$-$)$%$ $$$$$ $$$ ###!$'#038=################~#{#v#t#m#k#ܝܡܥV#T#O#ܺܽ;#'#"#########""""""""""""25:@ݽ"""NQUYݣ"afhmݏ""""~"|"w"r"o"k"g"c"^"\"V"T"N"J"G"C"?";"%" ""!!!!!!!!!!!!!!!!!!!!!!!agioqދ!!~ރއމs!ޔޘޝޣY!X!R!O!L!H!C!A!:6 ^bejkyzzc`]XUQNIFD=<65/.(%!  $(zvlg`VR6858$,7@ #'*2>JtkufUG6&3;FMo 2DWk}!.;FV`m|ߴߢߔ? UE5%)fN!""$"8"I"]"p""""" 9Rp5#J#0Kh0$F$^$r$$$$$$hK- %%Rp١ن :!غء؆kS؉ g '(3(O(j(((((()-)J)f))))))*u**v /U}6,S,u,zR,----.vN'ШϿϞpt:1a111112=2`222223B3j33334*4P4 Lz<5b54c[1 $7778C8l8p@y999O: z ;;{  H { M==>N>{>>> ?7?f????#@T@@@@ADAuA%[BBҼn=i8qDDD|zuDDDDeb`[WDD~D|DvDeDaD>D;D7D5D0D.D*D(D$D"DDDDDD D DDDDC GCCOTVX\`168;CCC~{vCCCCCCCCCCCC}CmChCECCC?C;C9C5C4C/C.C(C%C$CCC CC.0188=NTTY+.0BBBBBBBBBBBBBBBBBBBvBTBOBMBHBFBBB?B -B+B)B"B!BBBB,-B4 EJKORAAAAAAAAAAAAAAAAAAAAAA51.+)UASAPALAKAEAEAAA 0A+A(A ݾA #$)+,245:<@@@@@@@@@@@@@@@@@@@@@~@qrsw{@x@w@t@p@p@:952/Z@[@W@T@ B@.@  !" @ @@@?????????????????cehl>@GH~~chid`????TPMJHt?p?o?m?h?f?c?`?L?,?'?%?!? ?????? ? ????>>>GKKO>TXZ-1258lnq>}>>>>>>>>>>>>>>>o>O>L>K>I>E>A>?>=>:>8>3>#>!>>>> "FNT]a===x=r=i=c=[=T=L=D=?=7=/=)= === ==<<s>>>?C?l????@KAEApAC`/ 9bռ I ;P;;;#EzPFF\8n|HK>@<@9@8@/@.@#@!@!@@@HHHHHHHHHHHHHHHHHHH6????ķηѷadfiijnoGGGGGGGGGG???????????hhfc?????C@96cG[G(&GGAGGb?b?^?^?\?269>CGMPK?Z^c4=FFFFqnheFFXRNJsFrFnF????????? ? ??????>>>>> FFFEKIMNEE]GKPT>>>>>>^EZEUEQEOEIEDEBE;E8E4E0EEEE EXVUS>~>NKHIu>s>t>q>h>n>k>h>tyDDDDD5㤻)>(>>> D DDCCCCCCCCCCCCCCCCC=========4.,'gillooss4Cxyz}============da`a===BBBxqojBBBBBB}B{BuBrBa=`=^=O=K=K=G=F= ޽B B AAA====== = ======<<<<<>>>>>>>=;8;2;*;&;;::::: >>HLU[KHGB@=====2-*)'9 99<<<*+,-<<0043o`6Z6R6K6D6;656.6&66O4G4D4<47414+4efhkn4333y|~5~547699R5I5C5:555_[\YTTPNLV3P3I3D3=3ˋˏ˗7gjml!4ospss333333c2_2X2Q2L2F2@28252.2(2!2222 22111;3539ΪV]bjΩ2XNKKHHFFDCB?@==;:1102222111111111m0I0B0>07000+0&00000000^biptϴϻP/KNRSU-/(/!///////////////////{/q/m/d/`/..j.d.^.W. ѓ"'/u...6230-+*%$#pl-----{-t- Q-L-E-?----y-v-l-h-a-Z-T-L-G-?-,,,/,-)*&'##"h,a,\,j3@A!Գ****y*xz{{S*M*G*A*LO)TUVZ\)))))))))))})))))))))})wwsronli(.0- #!(,(((((((((y(s(l(f(a(\(U(N(H(D(>((( ('''' '2bt'o'h'^&&&&gjxz|&&&&&&z&w&o&j&e&_&P&K&D&@&9&5&/&)&$&&&&&&&KJ#EB@@%RW\3hlrw~&$"!H%A%=%5%0%+%&% %%%% %%$$$$$$$$$!#%&$+,,00w$q$k$e$"$$$pjfbIHEDBQ##############################^ H#$9۽:+ $$$$$$$$$$%N_mE%P%Y%)>Lar%%%yaL3nZE$4u]I2ؑpcQ}  &Vn(((()),)>)O)b)w))))))))*)*;*Q*e*{*O0u\f+-N@*ӖӶӝ޹aD#"$"A"]"y""""" #(#C#b###../'/D/_/<]"0>0[01Wy .3) ` 2222 3h @  R+)gA45iE++,!P{0]48Y8|8888959[99999:>:d::::i:wE< * X ̷S0?=D%6S6@@@l@ 787f7777"8O8~8889;9m9999,:]:::=DqEzEEEQ'*]oKH|HHHI@I $IIII#@"@ @@@@@@[`!"s @ @@?????]HVHSHPHIHEHAH;H8HHHH H HHHGGEFFJL{GGSWW[????????pGkGdG???}?z?y?v?u?t?r?p?m?l?j?f?h?%(FFFyxFFFFaZYRMzFtFqFlFiFdF^F[FWFQF? ? ?>?>F7%)-06:@BHL>>>>>>>>>}wEEEEEEEEPMIC?~UX!EEE E>>>>~>~>}>y>w>w>s>r>DDm>j>k>g>f>c>c>^>`>]>Z>uzH>?D:D6D1DDDD D DDCCCCCCCCCCCC12knrv{===IM===========3CCCCCZ[\`BBBBBBBBBs=n=n=m=j=h=g=d=c=b=`=^=aB^BYBW=U=T=Q=½Ľʽ >=>=¸AAAAAAAAAAAAAAAAAAAAAAAA>?CCDFI<<b2Ѿ<<<<<<<<<<<>>>>>>>>>>>>|zvtrX>R>I>fdb:::=s:n:G:@:;::: ::999=<<PnkG8B8ba_\YWTROLKGFB777777777^7W7P7G7A7:727 !(%444y4u4l4i4`4[4T466665555555555555~~09<88Nlhhca_][̘̞̍̓I4Q3J3333443222222222222333|3J3A3=343-3&3 3222ouzEKPON`1Z1IGHEvrC??>=<9:1000000000000011111111111ϠϥϬϰ:1  #  000//////////x/Z0R0L0`/\/V/P/J/C//?DPPQSd/`/W/R/J/D/>/\_b`ed///klnops.?>;7832-||yzwvvsqll----{-s-o-f-c-^-V-R-J-F->-:-4-/-(-"-/@HKӷciovzӀӤ,,,,,,,,,,,,*,#,,,, ,,,++++R,+++"(.4;ԡ98+++++24476:g+_+[+?@CEEIH(+"++++**0*l*f**** ***)))))QRVWZ[])))))jqw|փև։)ֵֺ֣֪֯trpnkjiA)9)5)-)()!))))))(((((((((((((((   +)S(נץ׫װ׸׽ "$'')+,./04''''''''''L'G'&&&&&&&&}pswwy{&&&}&w&p&m&ٮٳ_^٨VVTQQNJKHEEC%%%%%%%%%%%%%%%{%v%p%i%f%^%Y%S%L%G%A%    ,27=C $$$&()+..}$t$r$i$g$`$[$T$O$J$E$@$8$5$/$)$###}~p#k#f#b#[#V#O#%##LKHFDC@?>;;863300""""""|"t"p"i"e"a"Y"V"Q"I"F"?"<"4"/","%"""" 9@DINSYhns2458t!l!i!b!]!Z!R!N!H!E!?!8!5!.!+!#!!!!! ! ~{|lrwߍo j e ` [ W - ( # B@===974330-,**'%""{uqmha]XRMHC?85/)$ "$)/69?NSX\cfm{wrngc]ZTNKE?:61-&# ~}{zxvttpJNSX]bgc}SP)# 10-+*(%$"    {xroid`[##0,&"&*.2{xupjfa^WSPIF@=6zwvssoolj f  VSSRO<wpmgd_[VPN   "$&'(--|x;;=>eba^^KLIFDE<:)-,/1356 DEFILKOOU/49=@EIic_ZWTOKEB>971.'&    A@=:;98>ADINQT'^ag~|vrljgb]ZVSLJDA<960&*.3<>ABOQTTWVZ\acdgik~|{yuutoqmllh`5330--{ =:820+'$  ]cginstz}|wuq\^_beegiOmpprtxxx/*($~ywwtqqpmjihfdaa^\\YWTTRrpmg!    ptwz kknoqsvwxy}~" e c a _ _ \ Z X U U T Q O L L J G F F B @ @ < ; xuonl  Y^aegknov A?;66/.-(%! M J J E F B C ? = > 8 : 8 3 3 3 . . + + ' ' # $     ( & " !          k #'(..259 ~ ~ EILPPTW[\j chhk ~ { x u q o m k f d a _ \ Y V T N O 4 2 1 / , + * ( $ & !            ! #''(*IK u p o m j g d b _ [ Z V U Q N N J F |{s p o n              |j g d c " $'()*.013377:<<1 . , * ] WXY^_aeeiknppvvy{}8 6 4 5 1 . p o k h g d c ` ] ] W W U R P L L I F D C @ > ; : 7 03779;<>?CCFGJKLN~}{xxus}gda_(%""      !"&'(*+0/9:;    577;;>@?DEDLNRSSWXY[]^acdehikno~}zzxvtqqolllgfeca`^\ZYVVTQPOLK8531    587::>@?CCEKMPPSSUWY[[^^b`eegij~|{yvxrsqpnmkgiefc``_[\ZYVUB@?=     "%#)&++.-00778:=<@?BBDGFIKLMOPRT}|yywvuqr_]@=<::756421//-**)&'$#"!     !##%%]`bbcefgijklprstvvx{z|}}vvtrrpnnmlihhefcbb__\^[YWXVUTQPROMLLIIFEFC32     !!!$%')*,,./12126587;9:=@>onoppsttvwwy~}njkkhgheeddba___\\[ZYUVUVSRQOPMMLKKIGFHCEC65       #"#&%)'**NPSQTSUUVVXY[\^_^``cbccgffihgkjlnl~}~{{{yyxxvusvsrqgdfSTRQQOPNLMLLIKIIFGFEDCBBB???>=>;<;:977765+*          445657697:8::<==>??@A@CADBDEEFGFHH`_`bbbcddcfcgghgijjjllmmlonooqoprqr~|}|}z{zzsjjghhggfefceebcccaaaaa_a^__]^\]][Z\ZZZZYXRSIJJJIIGHGHGGFEFDFDCDDDBDA@BA@A@>@>>>><?<;=7overgod-1.0/wavs/warbleb.wav0000644000175000001440000005634410263023142015151 0ustar michiusersRIFF\WAVEfmt DXdata\9=<==<?=>?>@@@A?B@ACDBBEDDEEDFFFHGFIIIIHKKISSXZYZZZ[[[\]_]^]^_```aabbbbddcdfeeggfghgiisy{|y}|}|}~qsoqpqopnmomlkkkjjhighfedecbdcaaaa^HGHGEFDECDBAB@A>@=?=<<:98987575452          +*56578:9<:=>==?@@BADDDEEHGIIJJJLMMNOOQQRTSfggrrtttuvvyyxz|{~}~mmmjkgigieedccaa``^]\[ZVWWTUURSQPP+(*&%&#$!"        56CDFFEIIJKKMOOQQQRTVUXXZZ\^^^`b`ddegejihmll}~zwxvvsspqnom@==;:979553301/,--**(&#!"      13CFGGGJKKNNOQSSVUWW[[\\__bafefgijkmnpoqstuw~~|yyxxttuoplkjifegbc``^&&$"     "!#%%((**./.2145789:<=?]`qssxu{z{}SQQNLMIKFGCCAA>?;:98401-,,*(&%%"!    =?ABWTYZ[\^`acdghhlkopprtvwy||}iigeeba_\][YVVSTOOMLDEA@A;<:866   1348JNOPRTTXY[\]a`cffgjlmorquvxx|{mnkiheeb_a\[YYVUSPPMFDDA?==:876    :<??TVWX[]``bdeiimlpqruvyz|}`^[[XVUUOOMMFEAA<=:/.,*)%%$     "!$%&_bce~tvvz{|PMKJGECCA><;:75408 8 ; < @ B D G I L M P R S X Y Z _ ` b d h g l n p / 0 4 5 6 8 ~y{vvrnnlhgcb`]ZXW] * - - 1 =;;864210,-)(&$! b e f l ~             m r q r {zI J K O R U W [ \ ^ c c h h m n s s LG+((&""            # # ' ' ( + - . 2 2 3 N P R W X \ a ` d g j n o s t y y lggck ]ZVTQPJJE~ ~ 671/+*&#l         # & )    ! # $ & ) ) + / / 0 5 3 8 9 9 > < B B B E H H K L #$'-.137<>A sqmjhda_Z   jnqux; > ? B B C F H J K N O P T T W W [ [ ^ ` a d c  #}}xzvttqnnkk zxuo    impsQSVWYZ]]`bfeiiknoortvw{|$)*0xyvtrqolPjgfcb`^\qty{}yuqphgd^  $(+.38;= |--0234chjlnqpsuxx{|~khgdc`[ZXWSTPOAB=>1/*&168<BDKMQVZ]bflnqu{~ga_(TSMHEA>79:<=>A !$*.25:>AFLOSWZ_chHFA<951SPNMIJGCE 6440/,-*9>DEHHLL\^bbd?=;9w}-+*'%%"   KQV[^dgkrvBHNTV]bijru|~!"'&))-.013778<<??C! ( - V \ ^ f j p xrk{|~  !!!! !#!*!/!5!9!9 "" "%","/"6"9"@"E"L"Q"T"Z"_"e"i"q"t"z"""""""/12459::=@@EEFHJKܨ#$#P#V#\#`#f#l#q#|###)$0$2$;$>$E$K$P$U$[$_$f$j$r$v${$0,*+(&#$$D<63,  @%G%L%R%Z%^%e%l%o%u%{%%%%%%%%%%%%%%%%CDEJILNPRTUV٫^_ٯ٦ِm&p&v&|&&&&zzvvqsz&&&&&&&&E'L'''''''''''31./,**''%" ׶ײ׬ץניS(+,  ((((((((((((((() ))))#)().)5)9)A)fllmqquְֵֺ֥֩֞փ)ւ|vrj֘)))))]]XXUSQ)))))** ****e*l*0***+++!+(+IFHDAC>Z+a+e+895621+++++6;;5.'!+++R,++++,, ,,,,$,),,,,,,,,,,,,,}tpidӲKFB0"-)-,-5-9-@-E-K-R-V-]-c-g-n-t-z-----lmrswvwzz{}-3368;>=.rpplmi/ //ddca^^>/D/J/P/Y/^/e/SROPD>с/D/J/O/W/[/b/L0S0X0y///////////000 $  <1Ϫϥϡϙ1111111111100000000000001::;<>??DqvFGGI\1a1MNOLEyupΨ2223'3-333<3C3J3z3333222222222222344333J3P34J̘̒̍̆\]^bcgilN97>62|55555555555556666U4[4a4g4n4s4{4444#'! 3787B7G7O7V7^7777777777DCHJLOSTVZ\^ae@8H8lm??BBDK6S6Y6`6d6l6s6x6~6666ea`][9666LIFDAbbcfȷ999: :::#:+:2:;:A:J:Q:Z:`:i:q:y::::::: 8888ģ}88lfǕČĭ8888888roHIF;;;;< <<<#<(<0<7R>Z>ptwy|>>>>>>>>>>>>>? ???&?.?5?=?F?O?V?_?f?(xpi_X,-/0/& 62.)("@@O~{v[>\>^>_>c>c>f>h>k>k>l>DDr>u>v>w>z>|>}>>>>>> E EEE"VV>EHLQEEEEEEEEx}>>>>>>>>>LHC>:6/-($ 9F>>? ???QFXF[F^FdFhFlFpFvFxFPRW[_FFFFv|}FFF)$f?i?j?k?n?o?s?s?u?u?y?{?}?~???fGiGpG????????ZXUTGG~LIGEDGGHH HHHHH7H"$""%CcޞӴӖ*>O/h+]v1Qx*f*P*<*'***))))))t)d)N)?)*)))((((nV% ~ R`q؁ؐ؟2G_t4$FZn4Kbx%%%t_O<+Y%Q%F%n^M%$$$$$$$$$$+:7#$I ^#############################O#CCEGJbfkp܈$$"$g$k$q$u$10+-+$(##!$$$$$$$$$% %%%%%'%+%1%5%;%B%F% ##&~wslg3[WR%>ADC$ IK&&&&&&$&)&.&4&:&?&E&J&Q&_&c&k&o&v&{&&&&&&&|{xji&&&&]؛g'p'u'b3' ''''(((>(C(I(N(U([(b(h(l(t(x(~(((((((((-(!# -//(ilnorsvx~)))))))))~))))))))))))[ZXST)OL@*H*M*S*~|{ywy*****@@><;m+q+y++3100,++R+Z+_+c+j+q+s+|++++++++++++++9,<,F,K,k wӄHB;3j],a,g, #%$((++-/,,,?-G-M-T-Z-`-f-n-t-{----@-E-K-Q- s-z------lo $#())-0238...u.)!ѕ W.^.c.k...`/f/l/r/z/////////////////// /'/,/TTRMLP/ϼϵϭunka_0000000%0+01070<0B0J0l01111111112 2220119;=???BDDEHGKJLMY͌ί2jb]XΠ8Ξ43;31112 2222#2(2-23292@2F2M2Q2X2^2e2333333stspo!4nljh6ˑˈ˃=3C3L3N3V3MMRSUW\]^45;5B5H5R5:7856}55{z3334mkggd+41474<4C4I4O46&6.636<6D6K6Q6Z6a6?7.) 55 ȾW7`7f7n7t7}77777777777777555555556696B6E688ɡɜɔɋ66666`[acddfii7*&&!>7C799999#:,:2:;:@:K:R:77777777778 8888NNǩǤǜ^_DŽ~vmZ;c;j;t;RMEnı88899 9999%9+92989>98<>!>::::: ;%;+;1;9;>;>>>>>>>>????%?.?7?>?E?N?W?_?f?%(yqg,/OFA51145  @ @ @1@5@;@=@?@E@I@K@O@c>(>*>»4DDDDDyui>j>l>j>p>s>t>v>IHKL>>RTWW EEEE/E4E8E;EBEDEIENEREVEYE_E>>>>>>SOLH[EEPLLHFFFF>>>>>????? ? ? ?????????mFoFuFHORVFFdhlqFFFF;5c]ZL?PLHD=:70[?^?_?b?c?GAGHG%)[GbG6:?D?????dfgi???????????GGGGGGGGGGollihfbdӷ̷ŷ????䕷7HHHHHHHHHHHHHHHHHHH@ @@!@$@-@.@8@;@:@?@KzHo5\FFOy%E;;P;; ~ J  Ӽb9.aBoADAAJ@???l?A??>>>r>4e484 4333]3333222Y22221gČĵ^ K*Q $ мУ18~8p]1-,,,,],5,,+++z+S+/+w5U535EnFm3i3J3i 9]''u'R'2''_6 &%M^///2Y|)Eb܁ܥ#$Bd#""!!!!|!c!F!,!z,b,K,3,,,+++++{+h+Q+;+#+g rՅ՜կ_ z '>Ndu֋kU+)))((nT(B(3(!((('' 2H_so&c&V&G&=&1&%&& &%%paW?+ڰڻ_r '3?K]o$$$$$w$q$k$f$^$Y$!!!!!!!!N"Y"\ULDlaT#c#n#u#################E$5310,,*$$$#"$$$$ "%  L%T%V%_%d%i%o%s%{%~%%%%%%%%%%%99>=?CCFEILMN٦,&2&`&d&l&q&u&}&c[م '''' '&'+'2'7'='B'I'M'U'X'`'e'j'q'v'|'`[VQIG>/'#'(( ((((L(R(V(^( !$&(',+.124((((((()) ))))#))).)5):)B)֢֖֭֨֞dfi{slgatxx{)))~|zwxt)))* **** *'*-*2**************$!+ԺԴk+~vql++++++++++++++++,,,3577;:>AABEGHKLMQRS,,,,,,,,,|}~ҿҹrґ--------------------... ......  63BDDHHHLn3s3z33333333333333vxxˆkjifdb444444444444444w5}555555555 555  ɣɛɕɏ $6666666666666666667 7 7KNONSRVYYZ]^`dcggj777777~||xwv888ǹDzǬǧǝǤ888888888888889 9999&9-99ld[U99999: :::$:*:ŴŬ%()+-.03::8;9=@@::::::::; ;;;#;(;0;6;A;E;M;T;Z;jilnssmc^ąHĀ+%vvs;;<<<<"<+<3>> >#>4>6>:>=>@>B>D>H>J>M>Q>p>>>>>>>>>>>>>>>>~>qnj9531,\VU>NMJG>>>?? ? ? ???????"?$?)?)?M?`?d?e?i?k?p?r?t?GKMPS????_efjc~}IFA?kged?????????????????@@@ @#   -@B@ S@X@Z@Z@0159;n@o@u@w@z@{@|wtqp@@@@@@@@@@@@@@@@@@@@@@>:731.+($#Aݾ )A+A0A AADAFAIAMAOATAUA)+.13AAAAAAAAAAAAAAAAAAAAAASMLIE 3A.,BBB B$B(B*B/B ?BDBFBIBJBPBSBxBBBBBBBBBBBBBBBBBBBB1.-WUSN<954/,C CCC"C'C(C-C1C2C6C:CCCCFCgClCCCCCCCCCCCCCCw|~CCC=842`]XWQOCCF CDDD DDDDDDD!D#D(D,D-D1D5D7D;D>DaDeDwD|DDDDX\_bdDDDDux}DDDp9j=pмBB[$tACAA@@@T@#@???e?8??>>|>O>>==L z J  y ;; { :O999z@om8C88777$2]Ʉa5d5:5zMN4+44333h3D332222_2=221111_1<1tqϿдЧ'Mw.----+Syu,T,5,zV. u**v*)))))g)H)-))(((((l(M(4(('g Sj؆آغ#:  ٞٺnR%% +Kj$$$$$q$]$H$0$jK1J#5#nT:""""p"["K"7"%"""!Mf)%5EU >ߤ߲zp`TF;.!}jWF2! nND<1(6FWdwmtK>0,'"  A6-% 5768PY_fnu{)$ "&(-049<>BGIOQUX]`cy{xmifa^  59?@EIMPTW\_bgjnsvx}{xuqmfa][OKFD? &:=TWZaafjnsvx~XUQOJED=;,'#"       " $ * , 1 5 ߼߹J ߯ߩߤ_ c ߗߑߏߊz  52-)%   !!!!!!!#!)!-!.!4!9!;!?!E!G!K!O!T!V!\!ޞޚޔޑt!ކނ~ކ!!smkedޡ!!!!!!!!!!!!!!!!!!!!!!!"!"#":"?"E"F"K"O"S"W"Z"_"c"g"k"n"s"x"z""""""mjebݢ"XVQLݷ""">;54""""""""""""## ######"#(#<#ܼܺܶO#R#W#ܡܝܙj#o#s#w#{##################=841#'$"### $ $ $$$$$ $$$*$-$0$4$:$>$B$F$J$M$Q$W$Z$۞ۛەo$ۊۆۀۃ$$$sljd۠$$$$$$$$$$$$$$$$$$$$$$ %%#%'%<%@%D%G%K%Q%U%Y%]%`%e%h%n%r%u%z%~%%%%%%hea^ڧ%TQLHڻ%%%83/*%%%%%%%%%%&& &&&&& &%&(&-&1&ٽG&ٳ٬٫[&^&b&ٌِٖw&~&&&&&&&&&&&&&&&&&&&&&&'$ &&''''&'*'.'1'6'9'@'A'H'K'P'S'X']'`'f'i'l'r'؅؂~؆'uqng؛'''WSNLظ'''''''''''''''''(( ((()(>(C(G(װ׬ר\(`(e(j(o(q(v(|(~((((((((((((((CB<6(.*&#((( )) ))))) )")(),)2)4)9)>)B)E)K)O)S)Y)Z)֜֗֔q)ֆց}և)))kgc^֧)))))))))))))))))))))**.*1*7*ռչM*O*V*Z*_*b*g*l*q*r*{*{***********POJE*;84.******++ +++++!+&+++/+2+8+<+?+E+I+N+R+Ԧԡԝg+ԎԋԅԀ+++tnkgԟ++++++++++++++++++++++#,),-,1,ӼH,L,Q,U,[,_,d,h,m,p,w,y,,,,,,,,,,,UPLGC<:5,,,#,,,,-- -----#-%-+-/-3-8-=-A-E-K-O-ҩңҟg-ґҌҊ{---tqlhҗ----------------------gihhҘ-hihiҖ---hhhiҙ----------------------hgjghhjgҘ----hihhҖ---------------------hihiҖ-ihghҙ---hihiҗ----------------------hihiҘ-ghhgҘ---hhhhҘ----------------------hhihighhҙ---jgghҘ----------------------ihigҙ-hhgiҙ---highҙ----------------------hhhhҘ-gjhiҗ---hihgҘ----------------------hihhighhҘ---ghhiҗ----------------------jghiҗ-igiiҗ---hhihҘ----------------------jhhhhhihҗ---ighiҖ----------------------hjgiҗ-jfhiҘ---jgihҗ----------------------hihgihigҙ---igigҙ----------------------giigҘ-ghhhҘ---hhghҙ---------------------ihhiҘ-ihgiҘ---ighjҘ----------------------igiiҗ-higjҘ---ghijҗ---b---,,,W,!,+++N++***J**)Rֆָ(Rׄ׸'''Hم&T&$&%%%^%.%$$$m$;$ $##{#M##"""*Zވ޴ mߛ"X*xN"tGpH 9c3Z{Q'Qx`7pG"_7yChDhxW4dCvW /o/Ppy]=! n Q 3  #?]w!:Xq l P 8   o W @ ( :Pi~ 5Lbx\H/waM9%(>Ncs+t%+Ӭ`iH?kȫŚ#;.⻪pԸwR-ٸAǠ-iIׇZ`  !.%m'd+U0X59`>BMG/LxPbPNVp_VfjlnqeQ$g9U5++8vEz76fɭ`_YϹW"fڪ,țդOFg🗣#1ѯү^֬ZԌsǼ»BN=)#;>Q )9Gp2JD6sj M  $ G қ֤:i3"i1 1$#~"5"2#_%&o(),+&.,3i)Df>hOE.9\;@6F{F,FFFGG.GFSGDgE@H-OI"HS8*.158f8d8E9;=>,@AC?<2C3W}:_2&&#((%2` t  p 0wtH7eix5KvdK."xwT21j ]8xplTt&ߡ9s–ͭGA p;#f#"qÿڢHWG?N_01G @%ӣll sVaxy _])jl;?FUBZ { PZ@ rp  |f#+''*(-VU=4h-b 4eLKFEJLM]MLMNPPTwQN?&6Yc[3>4QQsD<(::e964w21.3-')( X% D AIMw7>KĢ =zqu`-me;ƝF" k6ƾù"є7xph'^Sq.ŋ,,o_䫾bP ܤ -,lAxK+O@BU`-oR; ҙ<4 f >U,w-n#?2=_:358<1??AAFtB /?"ZHHTNJ0(HtYRKJ N$QRSRgUVUPVa7$@^eIaWF-6^k h`:_aeff7hfmW^A;XtQujGj}R?8>FevKofceyg gvfde>aUPl1l1We`WO=; &*KTLAx=<<:6{4#0/ F`!(eb)IS+ |A#'+!44aϞ3a1“ dWܠFXcEiw6NOLtzB,#O{K͈Iުɬ{dŻx  Y5 !"0,'%.1CT#?>637:<>>5W7 ,.;ILC$;l u>L c Q22'/)$ (x,34 .GE> >AGJFN2)Kc)aYY[hc ]C.EN5WZY76773u0)@+%%!!Qkk Z@?T+ɗÍ^N :* MA b.,>:<-6 8F+ =W7UM4JKfNMMJN9[7,{FN@- O;5;89=>h>9Y<5# G[[&VEOO}8"M;JC:79<>:92)TuY ["`G$dG "o){icS'?;IJSUߊY=Õ)թ ͚ńê@0aʢqۖ'Tf]PĔć<̴Eɓ:ψxiԢӕ4"˧qȺxTtiϪs K!7&,YQ[%9?86..o05]1!j ;6MLVC<=;T>## +BKVMHIOVWR9/"}7V._VOPgRX.P6CB#KTMC?BiE#J.?XXUJG3GJ/IgC`  -JRIa?=;9?.)D ,-"W;S0*  @/!Y 32A0T[ % ؼogdD02 *s%x [˱`imCp:(Ǿ<}eC!gۘ͞;  Z(PX l F '#) $8!Tr4GC?.CHNiOTJ1o(!BIT MBz<3@ O %:A<~2,.p113k1)9C<4/[̯#x6l1x̑fhT)CӥӠTۯͱ(r"4 D'$..! R /T_$_>~-6S}bv|yz~zqTgT`-}tQH68Kj>eWKFD>80,#s%bI2{ /hiKԱ&LǕn_W ҪB.lrIeZ o.Y.*]*[06f:?@~FFZO6G2_A[cfN.x$/.?]ki`j`1ceXfeg1f ie fAd/0lKeN",5RbWMJKhK#HEVBB=A@2i -2 B}K23 &2ΉऑB6ݗ`IJ)fC}wL֦ݡWYS\ۚAƏDϯƾ[ <V`~ ;#_+ʿ?R\ rg1ԯ:c]H^J] >(ݢӉхUR1ݫ#<Ѝ)ɐŴԆޖ{rxzi- SeFHLZ>Q~oS$½7ƑkU CJ`y﯄Z!J y4%|xO8Ͼ(ڻ:d*Ne"#9))Q2-8|(L?fJsDA@2BCCBDB{DBEAQI2 WZ1 84s+(&^%Y# e@"͹ , c  ;Hoa`nDӨ#Y s>9Wk+,UD4AKS~.*ûѤ r8[LTtJ!ot e K-P1!eOAP[ | V31٬6H1 O 1Tb$'/|-6{˧'V y! "$"!H8pV$   :+ @ * $RóӿЦCD>y - 1֟ӷ(e'%" m 7832vco '%nb e+IT!$lDvSnH$ @ ER &HP( 4Kc6 F@W[ԺCҺJ$ro C 7#4'Exgdzdm@#;Yu}L%ՆJX~.brRFI$NٝZYGa m ']!"&$)M;;Oa}w   Y:!!n(%p 9)AF %" gshz.MLO}!6G2+.d,L/0D10/E0,T/=(b"pX _ ?OW>t]  B1)" #%&&&( &})%!?DD%kEJ6(b͘htBQ ֳ7rI਼4kqS$$/2/ _zB~ #K9$5A/,10534j669d9=A;C"#E7~GE63v5=D[m Fs` = )E>[ɝ +<$1 *)V/`2331]44s85;7GAB.*KM[>8y:H?@?><>E> A=A$>B|nص;LD5"2I4M7A7Y42L01/1-t1,(S -3&bJ JD  (ĶFL{mRy|#~؅)jp_iUܸ%/Iw5 IUՄ9D~KL6bp'± }ybP ;' {_媷,;b 2$ #,''m(?(7+-+/.40= EOH@/KvBhEZFHHLJPLPS,(}P 7l9ENyW"SQPLRSQwRPSNSMuK9D i4/1z>AC>=$<; ;7b8^5606T-HG8vs BӥŴ0Bd^1#?UUv ҙZ'4k#_٬93՛tI=R- ػ<%*UY  +6ȆuK# WD=,62/EΩI.$MG!"#!#!%"'- -7|6]+G%!f&}( )3)'f)'+S(F.'77EWV!R7J,a&#& (v((M&p'%=($:*#2H Ѹ5/Ԧ,R"*%L"lBSh $    Z F- P pڦϳz q#OXaYK( 1= U r k  i   `( Aޯ©ĵ$7f$A),cf!䵐G( y*^zf" | ӿm;%gTJ_Pm^𨲬Lj;  {OnԱ07Nw7@F&6W䮠aKy7iG\dt0]E( ]|S"|!,! 0Ј %D_!2b<544 9;<>=A@F DO?5%ShZ.=SL"F"R)$D0qΐ-3U V.,#,~AEa x S <xKEdbJ>IHQs a&cȫnq! "d +.\ 3"̛,I{i+s yB ,&k.';&$\S ?txU Y_ ڸYgl 4 ; ! w 4;  Ӯ,otԗE  [7` soìmɦ˜ >\q e)7ġ*D|M % B  I&$5*c -jƱf:P#|,&$$$l$N \" XMިʻCT  +.+#!l!0!r!?!`6&s$,5 5X\0+&#%j'')'=,O)1 *sNƣה*"'i am] ;"!#4!e'"-AǼ#I^3 70D@/42J>w,L: w!5D3J/DA|CE I0G~J2GN'I?Yt r'#1'B*SNIF/HJIJFJTEK$2  "= ?:32323.P1+4V Dǧfיf ?5   [Ɗed̔E,Hnߪמ#􅲈ʬKaڡ2ѧ_,ԽMS׺S,+!QLKқܩkõj\gFI>!#!w'=aDgPqW(44><};=<>A4BFCKkD? Zwk#(<FUROPNNPO6RLPUOW3#hd7T{ +0[J@KcG@?(@>P?D;=9p@/_t5DU ,$(9 *X_O^Ga7p8.ޏ1jH |M@jyÅI\Ef%aL >OP٦Y[Ǘ9l^#""PQ!^$$(l%6( (2 P'+58$2e00X12Z01+2/)*XhʠXԞ4 pC=  e2 JU??%փ Cl=l~'ȺTTǖe5CF |!!/^ +ڭ I/89(1w-A,*)$$ iNvhߴ l J != ժ?_  28~6x.+{*)("#DX$ /VƞdEg)7x42>244[64503,03ośg@j!%$)(%-Ve籺ź{  ,s1 4ز92ԑv  ,=d "!X33WO -T vIз)<;jzg :kTsۿ F9.E= ($/}vY+^\\$,58>9?+YԐB"671:3,h($i"|@!fWfF] a"I$'q$ ("l(@jֿ9-\!c&#7(I> nڅÿ]  Rt"RU h-ɦҗp&r[B !V# }P/$"/XtKow !kT^ǴNƎ-h |sS v 7/ xMp yL9y B E& ƽM˲h$WcYĬ8 =zoU  7ƿ4Ⱥӹ6H 5*|J ®CR$!] $Z#-$'sӷݒ2*R5n/*^)Y*L,h)p+&E,l';$'\eH͒" ]!Td_!mR2XX` 3`\1^ RH"H*Vͯ܊n#M-/"*P)(+,/ .2/.8*]٩\ޫ '6W=J7U44<5w747:4;32*]vR$Z(#1,&$$X%/"#Fz"*3иiTp'+ Z}Qs6о1U$fټ1oםw\`>6csK"Gz֣[ޛĤNnQCWIi E =|4z)&$$ (k,,1/b7:5?+O(4NSO MlJFLO PSPVQ^C8t 84 8V[yYCS[RSSIU Q-TNXF{-r6kB%6?A9O5q43y3/1*00k&P%û9"M RU #[C|;;=?>@=Cuv'MD ˷е+ݼ\ۦH(CV !`&$S.y) >Η+^?bJA@AFH)ILKRM\wN 7 e3Gc$^XY|TWYYl[TXo\'XeK,#'iNSP_FDnDDC@@:?8\(Ԭt X$v" _!!Ȥ5 +[ثْؼoǼb]Ǔj ](-Ǝ–]~ '{M Iϯ:Țr1n64.'3^7u;>?FDEDNG5^yTD[g\XrX\]\\'X[GU,^'d_۬$X4"+b e }$NΘޣn V*޺r WF " &kχ{ Sޗm'KDX<4652E/'&(c#v}xA& 6S <%|'1007,ؚo- . m# b^tm"C}ʿ !)K#5)*,*&!#Y HȇB W%$(&G+5+*)&$H# F WNyظ ;M$dD![!L>E3[6ykt  {Qc}y'ſ˶ K{K (p},C3 KVCY ="&f&)c$+v°^Lɝ-"`0c& !x9!t`ϸUؘ~NA"/0""&'*K)[.& lϬ`Т L#~#+) )&%'@&B+(05d_>\ /%W!"(Z('):(3-' 4nLAѡ/K"!VQA .g|=L Q Hf ~?PխDuѺ歟I& :T p  H$Ңq0| Ƀ< 9  :&b\<lXоĘ/t Z F-#"ʋ-KΌ՘7)81$1I1 56f7=9593?DJY *"'!6mR"h,mźJ#eT9(t-Y,${&'y)*)+)>1W)ŏzuwe!@'gURػ aŒk[J5e!D_AI#Oʍ hs | &O.. Dӭ&\p?Zf—     3w?󼢱I 65v O   n k'Im  L c'b<YwjOEu"8@$8"H$8ȼ8ЗҰ I#,g  n׻ɪКʫˬjV(P 7g&u Gq˲)/؊0# d%z"oҳ}Go~,S 1 A " #& . ^޲˪؎Al.0+!$')*\),/+3"*#fH/0X@02,+ 12231o63@ӷ;rٔL :H;4 )*,..+-)41 ''اɚ͘ڷюc,?Rpc pEzX8kLYdх9  ?;)3j|~-Ps:=39=0ڥ><@h=AHe;$"qAPI170/442C2.b3,!!7 _0ͱҗk|(,"|zM7 #9 G Ϩ; '(~߫<ͬϬzzNJ `|  W d\~iZܺS6>C\645AwRQ-B? ?A(AR=<8>-Jߛڕ "(k# ct  K˖N)* JS܊ԽĮxM[ A-D  ]m* <p A 4 g O  5NhA-: {3  H\^S kcǠnճ""^ &zP !,:4%\ *5:.)M%%O#> B" !)/T['EOp%S(2"%N&+*/0a&{ճ$+$%e&~(<( %C&h gн΄Վ4ۚQ  "B"hAoSʹF x:!@r0k˘#$`i  1Q̽,JO,@pE~/dԂѿw <Aa~% NGdVѡB15 ^j߬8|*Qzsd\zhv}&48ul 1 ,\}fcXCZ 1'"Mh S,>']hϧJ ;2^1,&""!""F7i9 ǫ˅ͺ1 +y2!/,+!.1r06"*z LO6o  m(" =$NFwصߵp="s,842p23)7@4e9$;6u?c.9t $B'{T)ّɮ~>/#] D [l;۰q4  dR4 h^ߕЪ{\|{ #'d%"$^$S, W;`{u,A#i$q**'$N'%,O|PZ&,]ѩӖ9v5ο p ; ZhIM8$̪Ηnyxѫ,".p-%eLz۸ܣ 7X/*' $'A)) (t,{)/j=&Q *>M1*+'+,,B-+g0+&&(_=S,4%i "#:"#[ & WלϽ}ˋDm y y i/8x  1FZdnlЩ*ӯsG]?k:*/eHHCF7  H'BOӝ0i;.'k%!&'(*(.'j66sQ\$I4+(%(*):+(.!Rmؽڝ߁ms ) %uEl") 7|ѴfH<U !v˅*8lJ-  F kNb@K\qŋ=Pϼ7 iZw"-72Zj  ",-3,-d- 0*25261' 1 `-cz.6;E432v453M8. tV߸ܕ߶FDr &t) %3!`/D֙SZsg {'}~Z޶6,Tեj#"ORUtIFGv= t˱КՎt :ӸTA2D EN RzC >AAv<>ANBED?"L"e.=x ;3,.:|UURHMMNMP#M@%$&7.B *^ ,E3B^<42302>* Ka.' MFm̼ ӟM(v>O`qڏCԵ ƒ^#CD %%e, = J %d:>d7=9Ī^ X~ kUnh|  DM(ޥwso "?@DY+WtT;x%&6{cvu$ԉnS#"m9e  )ԉK|P(q!~&8#po"^vp rUiQ &')l&!#8''$`R$ '0/*n&_&V*I&C &A)K  mWd$/:ue=͘-Ndz  MNm>x fx{  e#5E[2  yȍ`O7vl j{v/O`j$*f# &##&H0  @,r?(l8 4- ,P+* _7"u8?Jq*1+&X(/%n.pEdye`D*"*$5 %D'RH452z [!$  +oG5h\Z 5"~)2e 4 ceeP"!.'!m5Y/DHV !! ~j,T%}+:? ?O$ͳD6 Y8-f ,+01 5 % 'q:]^J:(}0(  @k oR ^C&,#* -_hIZ I"*:_IfK)6!v4A ~%r eLR f \ B RP* ')[*3p%2 &D^p prY)4QGN7#{AAqZT&,VD  UAE9"fxAf)>=b%;@b}m #$*r _1F 7""ny$-g! (]_  %vC^{ ]U?x Ado[ O F|jGX: mg~ x(&   ]J% ]K<-%'+/aX l"> ]CG" EIf$J5[dh{rtBg"-j\:  M<)I\ \f"k4^t<-t;|0x3d k=m(-('J[   @#p1:p61.Lmk rUn7,y75_3y wq2DAm 1&&2%SdmFZJ D2&hԃ>2Yeޕ(2(Wѧ"g%~1 ktg_Fg=X _<B1cT$P$ !wx L!N$'IY  I E6#W s #}2w3ekD Ep6u2 $BeE RZt!&!O c =s 1V$$p~  |p'R Zq! "ExJi=dM O fn B7H?GK GO_ %#Nqd 6 74:\rnM{^f)"P`Yln/J~@g k&{ pge?P5W,_&  %x5y(1AN9{r B$Zeoz0 &b#l/T[  vR9$"%$Q3/`P%JJ""#*hHp|QU } a :Y`v7'nYyngx8Pc5@R Wk}#APf!* X(H l{@,rKdn:k =>$0g  Vs>QzvSVzrx@!/!GJ)ݭtVFuw #4! {  _]T)  %)+$#m 1? 8* !qm - z@ڪkEQfliDb\5 Ul 9$.#0#  q7eo#040* ,(Ttp_ =w!QZ,/)'9%$_j  3_l< %!9Nm_0  ^  :uhщ̞58Ӛ>ax <zʸΘyͰ޶5U2 <`<NZ~I |X;a< a'f*(T#'q%Q  Z PD4 F\+b5l5]/0-2 EDn3R O0/w3e-,(.E"R 4 &_ 9 S /g#t!Y|Qu(~3k V ! jXfؖ?\ck yR 3$Ү+ֱ6lW  Q0 Z B!ڄW?>޾hG' D2~$v>Ri "$j/RSS &)'\&"&$+  _Yu7 !$#<!D#-R5hS[G/+THo %69 s  ݵ?Sߟ!o 7& V `q\+s&x G<TYHNm 6 & yZD"H&w8t\j t!&v%$!%#Y)!{8J,z-} %$#=W M$&k]Wfp7Kr1PquOowk } B nw$d_ݭۼW׍T- s TiԮ4?#>ެ$ aoU *zmm:#$r=#4!% iIa/w 6&&IP+V\Mf3R! B4Ycd{S%sGs.#\! p*9_l_E \Xy kr6Q^\+T  | {np%ff$)~?t=n9#ckL&tmZ9y5N]; S@y"]ww 0bl} >SB$iz&MI{b 0 ]0|_ %<}xXE[z5K DNtv*jJ  x `g\JFpGGT2?Uq v{4/iwX$gMMi DeG5# MR (j~lLaA M  nEO&XEw5Z o A A.; Y  n5o _dg*I ^ ,wOnPnmMF- .O {t Qj6MAc r [KcL+1%H  9v;bXoTj6l g9h  cjJn(Ii v" Mj~A+  t  4~܂cOv  E  f{E7i߫޿   N _ %f'Jv7\w]Qthn0N \T  y $:@n !B" [ ,9r8 $^tli>JT(s #6St.' g[ 1 8  f3>N4%?yg`  e >' zCs] x],[D@-08"FnCDHA #q(j/?I& er b 3u1:B5+?| ;  +wVH183S: 6 |A m[d^ 9 } [o*A#uB~K Tz9Y$Ss!  DM-c*? g# <dy.e{ 0Lvl 9\5p;aX& KIWܮޑo[]dVk, ݬfJ+}s^d 379V=JO,((r|$`DMfDS)*  ttO G /opYv bg<FW$|/' [9uW (x"C} 2f M X / i- T(&o <w jI3 Tgm0C9hQu`XV  " - j _ 1X;0_OK ctVW(TkMRc77 6  ZtVX I(@)N  @ ^KR > I U`-MYA v ^%RqyL `<jSl"{_gb_!v*x9DEJ,EP+s"(VV[! QiUaaC ->]=m y ZpXL=tU B.7rGEC: 9=he 6j  qI ^W6Kwn 3~ %Vef0N;P  h`xQB&.g :ifc% ?Xxw 7Vl1wWj|"_ 0!^]"{,[   R}J e[n: z EXX'm' [U" mn61y$s o/CJhqZ7fh\ d7 %E== othN M G. $OVt X .8(%- 'zxY O=S +d] VKa k%K?|ou  k  o Zc8Ci,S/W (<v 1IUjBILlJq?;Fp= o@q(u{kRGk"h:,}}d1ZHp09 x P[q 8RNT_ ? I L =5! ;? ,N[ }nNp'W? l M ' 5 |Cf9`ZsD ;kq9|7k wP | <\(@](%-c 0    !{c]#Ed E&n.Bl,X 8  : S~ %z& L %PF )",Z fK b 3o\poqm  =W`3a-b \E/P? D `-( FZ ^iHZwuj E  5- $8  H]B~|TK V C 1 { v`Gw)Y,3P ; V  $(h+I K @ g Tl=^=.8s~$ |`8R+   Eiq#oX XIO4  * J:e[SQ ( " Pt>,.H7m7/U R 2 &lU0TXL< } | x?h2 ; n6N!D1w:^c  L &T< 0V4 >f}Bw-G<] SDol1WDqTHJ56  $K4pbF\ f  k@H  x7dB 0=6(F9- l &[JD6Bj%5)q d uX 0o`4 :J5  S  B/]v =_>`h v 4 yn:/1ruJ^ =INHt Y]CNJ*] " No_B1ST5xM0g@ W_-)q ^z@#Y  ZPe @Z>! H ?0J l U7o87 U ?HR Y4 f ]:3 ^ {X p'5U  QZ} A<@SO ,NN!{@j x yb \ fM-ZR>` j *?, j &DLd //  |I+ R70.)U \O ao(% sC xQ [\Q(g+>2[K K:+W[r~U^\/tI`5i\U}  D}^ 'B EH `D^wf f 3a5{6 y  GR?. Kxp=h:]x~c4;`!(b{)s=k:wi(_L]W\kwl9? @2r!;jLULqD_ CL8 . 0\tib \)^ ~ m RBNAzAF]) bIG|"tw `vZ1+(:eT?5Z=Z+v"jW*HX,k`C g!h  t. Rm<!n F ~2w 91mqi=@=Dp?v3amE!D,]!MbG 5bO+#. J95*f \=d|hY%C$U'Y~s\^l%|kpQ$m0TV]u#<4aSlROjFLOye$;'wmIJ*,# \W6kH(h\QW*/pmL :4=K2S@ xNnAwQQqwqr0UN43xuZ,+(}0 yYs!.YAVCqLq9>9XqKIuy4Bfo<3T|PNAr6jpxdCI8 -e5b+R^np&Ba5 VO:[>^#]zL" ()*/@_8:dU6?9k`XCKyBt(ypjhIP;Y; /7[tr!>^J4ug?_;k/|cbK;Rl 4ml$w[za~ !guzxVb|B|4mk[8D%GR%fM7_@= #Hv@M4%#fl  39r"jMFFzS]R/2YOMFcf^P;Dg9" ~Ocm4cwF$mepJQO2*GODIr\x{dUTFm L "4"7}Ab}SO]<2-xt7 s rIRK<F+"V  }ki?q d g$z:X,MI>hI4FM Q\mTk7Y^+;(BROc c!lK?&K\Fc!G6&d=mIUi*=}0( Bt~419ujfHfhsq&bfMOD9,j,B8tVqRH@. kiXX2`1}C JJ/,\H4'h? >&8(1v]D[ "\ - !DY%Xe; DS8@V8"0b%:.$-K:C >M~(  lu? t[/N fmJ mH%x 'wi0h2Ug5js}16irZu?w?DcKEaXHgxh}>MN:7<=D?H:T,{n{C<3+.338.:+D,2$!"$%'%"*"%!  overgod-1.0/wavs/worms.wav0000644000175000001440000001701010305402330014662 0ustar michiusersRIFFWAVEfmt DXdata}\`(T;wc U21( { "!݋x\oѶVŌ|;Ygde ߒ[4ṈXCT !/ۿ5SҳҨmvtC[d`چsȷ=ۚ |@nhN 6n.5An+ዻK0DFs_&BCD)Ͻ4FѰqxweqU?_-Oq$L  ZT\{  $ K ( Y(!/w 1 "08:av(8A7GBh-?I{2q I.2EVPJ"(#O5JV$a%_T8N|Zu&'X7;Q]'L(Zkyn4 #>07J{de4{ "/e6253' !O.4%1 C ,1 . (^.d G* {K% *} !% i %a  G+t km 0M  ' L[ a$` ;vj|UE sG AV<~SyOqLb{\g= ~ DMބ9bB#`S/_nրDׁ*~Ԁ.~t;!Y h" ]!&L d'd H&3, , *P15^1 !.65 r$2N:r9&5 >l<)86A2?t*;C3'A,G :Ct-=FC@,=EYw]At+;Cv?M)W9/Af @<'6=(Q9%83:LL5 "W/5^0g *j0/: + " &* 9% A $ . a  gT *Z P3 / tV-p  =]IsqB~0D\DcUV:7jcSyjIB>KyK;d#7=4:XpݒsR}^[rhrM Nmd\|tg:Ju-%E$<Lv n 1g i_  ^  E, -  5  _u4#  x# !&9 % ]#b(- ~u'8 $#* &( h%L+[; ) W&+X ) U&+|E ) %+' &(i $) ' #' $r 7!b%P wQ"esh"_r >E} q 'A X  Q  1#  ] P  _ @ |D8}lq9;Y\TGz7q3[/_\JyH(P11X~?)uSSPj,NQLhZ1yCVר]?דWڣԊ(tFCPҔ8ktc}z <8%h~7Pг,9:а+?uct ADr_n/?sPӇvҦ1:}ׂ 2?|ql&ٷHi0HFxoD7d Z:RRaXs.pYD}O~"uZrwy\ D - _ED. S  ,a ) u o  !$ 9$ ""^(? (q <%+q * '- , p)/&p c- 2*H0p 1. R*T0l - )/ Y &- (~. +. W',l ) `^%d* ' "a'x 4#& ^# Q 4O>  g0Bs v Cy- 5$  / , # :c~w95FL6fmh<|bkNc y +MX#25C[۴ Nu7ٿAĆvDD ׾M#3= hQƠ5HEjɛٽ˴S"΀̮6:vS֌rܸJoHp~b!hW? 3>q&8"A,|9isA}>'Tx<V  Ge)M 7 \ "(qLj & b!z 1"! !+'c 'q i=&O, , gI*0t0 -43 ##0O7>6+$26(6%f46uR6&>5 6'5&d55 5&4V5mw%5%34j4*q$14Z4 "r/'4g1 |,_2 ). (1.K ) %$c);I %a % $ q4!Bz  X VB O 6' Z)~ - _6S0iav1|`KRY8@ܦۈ3syYא;RrԹ4UԹug ZP hvԃ~?4ն?M1ݥղqey aI^{p}ֱֳׅFfwEڪJWM$bk7"ikݰW=Nr?on:eHRv ,]rOl`w%v>ZF'9DSM/ < ?K`Hy M:bqoWI   v `ly$qx  9| " !$ ! p!d fI!>!u  ! @ H   t c <A   Q  ` w RF # xA }/X I:~  ,)H [ \*2   ]O W#A S 47  7p|6=6}"O!-5<ow5goE+]+TLsCu*&:Un=hxQb>kK_%[\dVEV `}j-xn'6FdnwAD@i B%TO,=Vi5jPF@CS7 KV82bOhY]5B{0!h"8PGcmTEknUP(rU iRE GEp] }#i3dW!5TF[@jpsjMS &xKm7K/@ Mab$8 zsu_]gPYeP\kYexhyovergod-1.0/wavs/zapstep.wav0000644000175000001440000002310410263020250015202 0ustar michiusersRIFF<&WAVEfmt DXdata& $IO! @vr<c[fo>:O>ZG>Go( *UFf&7B6D? lV~z - &=e~  lx9uG 5 O{V  OE@ B K=bOUKW  d4   P}"UG$ZCP0UTc   @\  h A / ]   d [er 0'V3R6H; > A ~   i?;)}2,+u0: ~jV"/&G7 o. ;n%f1z_- dRK} Y  k >  _U Z][d|\f r8;S ,mOGD&fo s { P . ) | ~"##]$&e'%"$ ,/ !!waf  2$S ~ =  * T xhu; Bxzq  1 6 4(vM H p Q2Z}x:* 5Puk 8TB L0lJc 3mMv| #"k j  Y  6 ' ( z4} Wx $ G qP F9! ~Ii,hq zJ%$ } I & y 9  MI  4PZ "O4)1ih+ l @y m^ ' D M @' u+]o7j-Q0` { T'N~ 4D~Z0dIG GC9` xVt s v {1 e2t- j 40OG^_C # *  '7 g  *  4\dsR]"~,3m)y!B \ P9 - q {  > C -&$<E# 9k*2p_j +fw j $ \I@LKan!]0UmMiX)L })i4DyKB(4g_ txvMB-hde2/xDqiV#h.)/77\Z=& M39{+% h l<'f$CY{r'W  } K ) :bD[}bY51K0G V 8  3W}j@ ""!& Q8hv~kf L &/ k  9 $=~7&eH"v&((%d"! 0[[ \ @h'5`?!3UZ 0 \ v r5Kf.:g- m J M 6 F  F yohWga01Ik_xCd=XUMZVs~Fu'TaXx^q@\x~|v8>`U:3f7~Yߴb8ݍ^,9fm{-lHpQVwYZ+8$XuV.;u2Snx]=Aw]r2Az2Ey1m\h  P G n 3NjO9. 8{v60l3Ydu'9p` . 4 V $ LE+j #7'*C,-"0232/,-~27;>@A?<*96A4H3)20//c/.4,*),)(~'$n! $|(*,,/./~00.002578`:0<$>?$AABCKEGHIEJLNR:VWWWXZYdXoURGRRQvP6NKImHGGGECUB$A*@?= >?? ?<9'6'3211I1+0.Y-a,+*)7(&&@&%D# mB P8bSc[ 6 j  h ( U-8DAXIK:x RvSCwb Dcp>K;t&J! l9 kD !X#C$##z$f&;)A,.|0g2z4G6778@:;<(;855L69h;;:8 767%8P8 8q7642}0. 02T578888h96::H;;~3@BCEeFG*IhJ|KHLLMO{PQPObMDMMMLKJ KKSKIG G?GG:HG;GFFeECVA=3:7O6#5421H0.@- --/011X1 1000/].)-,]-.//&/,/0144t6489;5=>?@BfCDgEDC@h=<<=>>>>Thh-b1O ]I v yr|p37%CJ7_# KC(,_\kCy=69* }IH@ctI dAAZHed!Y|_ml~aMATߟ3DEX 2FDg2BJ},U S){(@iG*?Wj{nl*E, 2PhCCI9(q|y4Z/e[V6x%rB_4m8DVvݸ/|,9V[m^i:N[KE [B'T{{fBp!aA5| N % D gID]<&co ! {  e  u  ? ?apvm]d1O$. = YJg!bMR 1 6 I l [8Q KPrSA'`$fRk x 9 - W T [u . iYkp45" &:&z<}C$uf~R dMKX,eH B J`;z[  >u] N %bV&F%wxfoM:g:8;c! G~O W 5q  &O/.a#T#FU>` 7d:Hl;f2zB |3fE\F mR, j  m ;?a:OE~w& 5 (@[hr >jw#eB:kq8  ;  0D_d d   tS/YgMKH&!IZ>F=t h  #  \(R x[?:W k_Y2;G~  f  #7<zz__"|LwKQ X b " v a 9 2 a &*` ,N7ea H ; t  "^<ca`.%?iD)ND2jx_9{hfP=BAl-Qua8v{[##Dfp-&uX2+=-.Nu5  nm r z    :>#fs7s(b =?z,?Z y Q 2 ~ w   F  h kv= >|;qzlLg%% .0[3 " 7Jd+o\!3~UiZb_mO<UY7$ <TkV1F[XBlP#v9j\*t5z<Xs.(k}5|Z    V L  4CEd%.kRS }2U  Df(|gc}gDrN }T bkJ]mfSKG)\5+bo)C]"ZOx:jc ti]Aut)6<@JPWWTSRNFA7-