Proper Subversion configuration.
[newkind] / alg_main.c
index ef1246e..996dcd4 100644 (file)
@@ -63,6 +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];
@@ -114,7 +119,7 @@ void initialise_game(void)
 void finish_game (void)
 {
        finish = 1;
-       game_over = 1;
+       game_over = 2;
 }
 
 
@@ -132,6 +137,11 @@ void move_cross (int dx, int dy)
 {
        cross_timer = 5;
 
+       if (kbd_ctrl_pressed) {
+         dx *= 4;
+         dy *= 4;
+       }
+
        if (current_screen == SCR_SHORT_RANGE)
        {
                cross_x += (dx * 4);
@@ -253,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)
@@ -271,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;
        }
 }
 
@@ -305,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;
        }
 }
 
@@ -347,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;
        }
 }
 
@@ -389,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;
 
        }
 }
@@ -431,6 +485,9 @@ void y_pressed (void)
                case SCR_QUIT:
                        finish_game();
                        break;
+               case SCR_RESTART:
+                 game_over = 2;
+                 break;
        }
 }
 
@@ -440,6 +497,7 @@ void n_pressed (void)
        switch (current_screen)
        {
                case SCR_QUIT:
+               case SCR_RESTART:
                        if (docked)
                                display_commander_status();
                        else
@@ -681,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)
 {
@@ -726,6 +829,8 @@ void handle_flight_keys (void)
        {
                if (kbd_resume_pressed)
                        game_paused = 0;
+               else
+                 check_cheat_keys();
                return;
        }
                
@@ -863,6 +968,12 @@ 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;
  
        if (kbd_fire_pressed)
        {
@@ -874,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();
                }
        }
 
@@ -915,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)
        {
@@ -963,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))
                {
@@ -972,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();
@@ -1087,6 +1204,9 @@ void run_first_intro_screen (void)
        snd_play_midi (SND_ELITE_THEME, TRUE);
 
        initialise_intro1();
+#ifdef HACKING
+       identify = 0;
+#endif
 
        for (;;)
        {
@@ -1119,7 +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;
@@ -1160,6 +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);
@@ -1433,7 +1559,7 @@ int main()
                        }
                }
 
-               if (!finish)            
+               if (game_over < 2)              
                        run_game_over_screen();
        }