X-Git-Url: https://git.distorted.org.uk/~mdw/newkind/blobdiff_plain/1a8abebd82b12bd24a5418adab3e8c15d7a521c9..40471f009dde3bd859d4524bdaca45833e12a8b4:/alg_main.c diff --git a/alg_main.c b/alg_main.c index b1cae7b..996dcd4 100644 --- a/alg_main.c +++ b/alg_main.c @@ -63,8 +63,11 @@ int rolling; int climbing; int game_paused; int have_joystick; +#ifdef HACKING int identify; +#endif int scanner_zoom = 1; +int remap_keys; int find_input; char find_name[20]; @@ -116,7 +119,7 @@ void initialise_game(void) void finish_game (void) { finish = 1; - game_over = 1; + game_over = 2; } @@ -260,6 +263,52 @@ void draw_laser_sights(void) } +static void roll_left(void) +{ + if (flight_roll < 0) + flight_roll = 0; + else + { + increase_flight_roll(); + increase_flight_roll(); + rolling = 1; + } +} + +static void roll_right(void) +{ + if (flight_roll > 0) + flight_roll = 0; + else + { + decrease_flight_roll(); + decrease_flight_roll(); + rolling = 1; + } +} + +static void climb(void) +{ + if (flight_climb < 0) + flight_climb = 0; + else + { + increase_flight_climb(); + } + climbing = 1; +} + +static void dive(void) +{ + if (flight_climb > 0) + flight_climb = 0; + else + { + decrease_flight_climb(); + } + climbing = 1; +} + void arrow_right (void) { switch (current_screen) @@ -278,18 +327,17 @@ void arrow_right (void) break; case SCR_FRONT_VIEW: + roll_right(); + break; case SCR_REAR_VIEW: + if (remap_keys) roll_left(); else roll_right(); + break; case SCR_RIGHT_VIEW: + if (remap_keys) climb(); else roll_right(); + break; case SCR_LEFT_VIEW: - if (flight_roll > 0) - flight_roll = 0; - else - { - decrease_flight_roll(); - decrease_flight_roll(); - rolling = 1; - } - break; + if (remap_keys) dive(); else roll_right(); + break; } } @@ -312,18 +360,17 @@ void arrow_left (void) break; case SCR_FRONT_VIEW: + roll_left(); + break; case SCR_REAR_VIEW: + if (remap_keys) roll_right(); else roll_left(); + break; case SCR_RIGHT_VIEW: + if (remap_keys) dive(); else roll_left(); + break; case SCR_LEFT_VIEW: - if (flight_roll < 0) - flight_roll = 0; - else - { - increase_flight_roll(); - increase_flight_roll(); - rolling = 1; - } - break; + if (remap_keys) climb(); else roll_left(); + break; } } @@ -354,17 +401,17 @@ void arrow_up (void) break; case SCR_FRONT_VIEW: + dive(); + break; case SCR_REAR_VIEW: + if (remap_keys) climb(); else dive(); + break; case SCR_RIGHT_VIEW: + if (remap_keys) roll_right(); else dive(); + break; case SCR_LEFT_VIEW: - if (flight_climb > 0) - flight_climb = 0; - else - { - decrease_flight_climb(); - } - climbing = 1; - break; + if (remap_keys) roll_left(); else dive(); + break; } } @@ -396,17 +443,17 @@ void arrow_down (void) break; case SCR_FRONT_VIEW: + climb(); + break; case SCR_REAR_VIEW: + if (remap_keys) dive(); else climb(); + break; case SCR_RIGHT_VIEW: + if (remap_keys) roll_left(); else climb(); + break; case SCR_LEFT_VIEW: - if (flight_climb < 0) - flight_climb = 0; - else - { - increase_flight_climb(); - } - climbing = 1; - break; + if (remap_keys) roll_right(); else climb(); + break; } } @@ -438,6 +485,9 @@ void y_pressed (void) case SCR_QUIT: finish_game(); break; + case SCR_RESTART: + game_over = 2; + break; } } @@ -447,6 +497,7 @@ void n_pressed (void) switch (current_screen) { case SCR_QUIT: + case SCR_RESTART: if (docked) display_commander_status(); else @@ -688,6 +739,51 @@ void run_escape_sequence (void) abandon_ship(); } +static int cheat_arg = 0; +static void check_cheat_keys(void) +{ + int i; + + if (!kbd_ctrl_pressed) + return; + + for (i = 0; i < 10; i++) { + if (old_key[KEY_0 + i] == 1) { + cheat_arg = cheat_arg * 10 + i; + goto ok; + } + } + + if (old_key[KEY_C] == 1) + goto done; + + if (docked) + return; + + if (old_key[KEY_S] == 1) { + if (cheat_arg < NO_OF_SHIPS) { + int un = create_other_ship(cheat_arg); + if (un != -1) + universe[un].flags |= FLG_TARGET; + goto done; + } + } + + if (old_key[KEY_D] == 1) { + game_paused = 0; + snd_play_sample (SND_DOCK); + dock_player(); + current_screen = SCR_BREAK_PATTERN; + goto done; + } + + return; +done: + cheat_arg = 0; +ok: + snd_play_sample(SND_BEEP); + return; +} void handle_flight_keys (void) { @@ -733,6 +829,8 @@ void handle_flight_keys (void) { if (kbd_resume_pressed) game_paused = 0; + else + check_cheat_keys(); return; } @@ -870,8 +968,10 @@ void handle_flight_keys (void) if (kbd_n_pressed) n_pressed(); +#ifdef HACKING if (kbd_i_pressed == 1) identify = !identify; +#endif if (kbd_zoom_pressed == 1) scanner_zoom ^= 3; @@ -885,10 +985,14 @@ void handle_flight_keys (void) { if (!docked && cmdr.docking_computer) { - if (instant_dock) - engage_docking_computer(); - else - engage_auto_pilot(); + if ((universe[1].type == SHIP_CORIOLIS || + universe[1].type == SHIP_DODEC) && + (universe[1].flags & FLG_ANGRY)) + info_message("Docking permission refused"); + else if (instant_dock) + engage_docking_computer(); + else + engage_auto_pilot(); } } @@ -926,8 +1030,10 @@ void handle_flight_keys (void) if (kbd_origin_pressed) o_pressed(); - if (kbd_pause_pressed) + if (kbd_pause_pressed) { + cheat_arg = 0; game_paused = 1; + } if (kbd_target_missile_pressed) { @@ -974,7 +1080,7 @@ void handle_flight_keys (void) if (kbd_enter_pressed) return_pressed(); - if (kbd_energy_bomb_pressed) + if (kbd_energy_bomb_pressed && kbd_ctrl_pressed) { if ((!docked) && (cmdr.energy_bomb)) { @@ -983,7 +1089,7 @@ void handle_flight_keys (void) } } - if (kbd_escape_pressed) + if (kbd_escape_pressed && kbd_ctrl_pressed) { if ((!docked) && (cmdr.escape_pod) && (!witchspace)) run_escape_sequence(); @@ -1098,7 +1204,9 @@ void run_first_intro_screen (void) snd_play_midi (SND_ELITE_THEME, TRUE); initialise_intro1(); +#ifdef HACKING identify = 0; +#endif for (;;) { @@ -1131,8 +1239,10 @@ void run_second_intro_screen (void) current_screen = SCR_INTRO_TWO; snd_play_midi (SND_BLUE_DANUBE, TRUE); - + +#ifdef HACKING identify = 0; +#endif initialise_intro2(); flight_speed = 3; @@ -1173,7 +1283,9 @@ void run_game_over_screen() flight_speed = 6; flight_roll = 0; flight_climb = 0; +#ifdef HACKING identify = 0; +#endif clear_universe(); set_init_matrix (rotmat); @@ -1447,7 +1559,7 @@ int main() } } - if (!finish) + if (game_over < 2) run_game_over_screen(); }