Home » Archimedes archive » Acorn User » AU 1996-03 B.adf » Features » 3D_Maze/Maze-Code/c/!RunImage

3D_Maze/Maze-Code/c/!RunImage

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1996-03 B.adf » Features
Filename: 3D_Maze/Maze-Code/c/!RunImage
Read OK:
File size: 5F55 bytes
Load address: 0000
Exec address: 0000
File contents
/* Program : Maze.c
   Version : 1.00 (01 Jun 1995)
   Purpose : 3D Maze game (and to keep me from revising ... if I fail my
   	     GCSEs then this is why...)

   (c) 1995 Matt Kneebone */

/* ANSI includes */
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <string.h>

/* Easy C includes */
#include <roslib.h>
#include <swis.h>

/* Macro and constant value definitions */
#define TRUE		0
#define FALSE		1

#define MAZE_MULT	10
#define MOVE_MAX	(MAZE_MULT * MAZE_MULT)

#define NO_STARS	50	

/* Typedefs */
typedef enum {
  wall,
  corridor,
  box,
  key,
  door
} maze_cell;

typedef enum {
  up = 0,
  left,
  down,
  right
} dir_val;

typedef struct {
  int x;
  int y;
} point;

typedef enum {
  ok,
  title_page,
  dead,
  complete,
  quit
} gm_stat;

typedef struct {
  char name[14];
  int score;
} h_score;

/* Function prototypes */
void generate_maze(int);
void initialise_stuff(void);
int dir_x(dir_val);
int dir_y(dir_val);
void oxy_gauge(int);
void plot_quad(int, int, int, int, int, int, int, int, int);
void right_wall(int);
void left_wall(int);
void left_exit(int);
void right_exit(int);
void end_wall(int);
void treasure_box(int);
void trapdoor(int);
void set_origin(void);
void plot_view(int, int, dir_val);
void scanner(int, int, dir_val, int);
void reset_player(void);
void update_player(void);
void disp_message(char *);
void message_update(void);
void plot_starscape(void);
void plot_floor(void);
void bank_flip(void);
void bank_flip_off(void);
void dir_arrow(dir_val);
void show_status(void);
void show_title_page(void);
void centre_print(char *, int);
void detail_line(void);
void show_hi_scores(void);
void show_options(void);
void reset_hi_scores(void);
void load_hi_scores(void);
void save_hi_scores(void);
void new_hi_score(void);
void load_music(void);
void start_music(void);
void stop_music(void);
void disable_escape(void);
void enable_escape(void);
void game_complete(void);

/* Global Variables */
maze_cell maze_data [MAZE_MULT * 10] [MAZE_MULT * 10];
int player_x, player_y, score, scans, m_base_time, level, keys;
int m_timer, m_flag = FALSE, cheat = FALSE, gen_timer, music = TRUE;
int music_present = FALSE, bf_state = 1;
float move_counter;
dir_val player_dir = up;
char message[40];
point stars[NO_STARS] [4];
gm_stat game_status;
h_score hi_scores[6];

/* Main program */
void main(int argc, char *argv[])
{
  os_mode(9 + 128);
  os_cursor(0);
  set_origin();
  disable_escape();
  
  if(argc == 2)
  {
    if(strcmp(argv[1], "-fish") == TRUE)
    {
      cheat = TRUE;     
    }
  }
    
  initialise_stuff();
  load_music();
  start_music();
  load_hi_scores();
 
  while(game_status != quit)
  {
    game_status = title_page;
    
    os_cls(); 
    show_title_page();
    show_hi_scores();
    show_options();
    
    while(game_status == title_page)
    {
      if(os_inkey(-17)) game_status = quit;
      if(os_inkey(-99)) game_status = ok;
      if(os_inkey(-52) && cheat == TRUE) reset_hi_scores();
      if(os_inkey(-102) && music_present == TRUE)
      {
        if(music == TRUE)
        {
          music = FALSE;
          stop_music();
        }
        else
        {
          music = TRUE;
          start_music();
        }
        while(os_inkey(-102));
      }
    }
  
    if(game_status == ok)
    {
      os_cls();
      generate_maze(1);
  
      score = 0;
      scans = 1;
      level = 1;
      reset_player();
  
      os_cls();
  
      bank_flip(); 
      plot_view(player_x, player_y, player_dir);
      show_status();
      bank_flip();
    
      while(game_status == ok)
      { 
      update_player();   
      }
      os_byte(15, 0, 0);
      if(game_status == dead) 
      {
        os_cls();
        plot_view(player_x, player_y, player_dir);
        show_status();
        os_colour(1);
        centre_print("G A M E  O V E R", 15);
        bank_flip();
        gen_timer = clock() + 300; 
        while(gen_timer >= clock()); 
        if(score > hi_scores[5].score) new_hi_score();
      }
      if(game_status == complete)
      {
        if(score > hi_scores[5].score) new_hi_score();
      } 
      bank_flip_off();
    }
  }
  os_cls();
  save_hi_scores();
  os_cli("QTMClear");
  os_byte(15, 0, 0);
  os_byte(20, 0, 0);
  enable_escape();
}

/* Functions */
void initialise_stuff(void)
{
  int x_loop, loop, intensity;
  
  os_vduq(23,255,255,255,255,255,255,255,255,255);
  
  for(loop = 1; loop < 9; loop++) {
    intensity = 256 - (loop * 32);
    os_vduq(19,loop + 7, 16, 0, intensity / 2, intensity);
  }
  
  for(loop = 1; loop < 5; loop++) {
    intensity = 256 - (loop * 32);
    os_vduq(19,loop + 2, 16, intensity, intensity, intensity);
  }
  
  for(x_loop = 0; x_loop < 4; x_loop++)
  {
    for(loop = 0; loop < NO_STARS; loop++)
    {
      stars[loop] [x_loop].x = os_rnd(1280) - 640;
      stars[loop] [x_loop].y = os_rnd(512);
    }
  }
}

void generate_maze(int level)
{
  int x = 1, x1, y = 1, y1, x_max = 2, y_max = 2, ok, main_loop, set_loop;
  int x_loop, y_loop, side;
  dir_val dir;
  
  side = level * MAZE_MULT;
  
  for(y_loop = 0; y_loop <= side; y_loop++) {
    for(x_loop = 0; x_loop <= side; x_loop++) {
      maze_data[x_loop][y_loop] = wall;
    }
  } 
  
  os_rnd(-clock());
  
  for(main_loop = 0; 
      main_loop < ((side / 2) * (side / 2)); 
      main_loop++ ) {    
    
  os_tab(0,30);
  printf("Please wait, generating maze (%d%% done)", 
         (main_loop * 100) / ((side / 2) * (side / 2)));
    
    do {
      
      ok = TRUE;
      
      do {
        
        dir = os_rnd(4);
        x1 = x + dir_x(dir);
        y1 = y + dir_y(dir);
        
      } while(x1 <= 0 || x1 > (side / 2)
              || y1 <= 0 || y1 > (side / 2));
      
      if(maze_data [(x1 * 2) - 1] [(y1 * 2) - 1] != wall) {
        
        do {
          
          x = os_rnd(x_max) + 1;
          y = os_rnd(y_max) + 1;
          
          ok = FALSE;
          
        } while(maze_data [(x * 2) - 1] [(y * 2) - 1] == wall);
      }
      
    } while(ok == FALSE);
    
    for(set_loop = 1; set_loop <= 2; set_loop++ ) {
      maze_data [(x * 2 + set_loop * dir_x(dir)) - 1] 
                [(y * 2 + set_loop * dir_y(dir)) - 1] = corridor;          
    }
    
    x = x1;
    y = y1;
    
    if(x > x_max) x_max = x;
    if(y > y_max) y_max = y;
  }
  
  for(set_loop = 0; set_loop <= os_rnd(10) + (level * 2); set_loop ++) {
    do {
    
      x = os_rnd(MAZE_MULT * level);
      y = os_rnd(MAZE_MULT * level);
    
    } while(maze_data[x] [y] != corridor);
    maze_data[x] [y] = box;
  }
  
  do {
    
    x = os_rnd(MAZE_MULT * level);
    y = os_rnd(MAZE_MULT * level);
    
  } while(maze_data[x] [y] != corridor);
    maze_data[x] [y] = door;
    
  for(set_loop = 0; set_loop < level; set_loop++) {
    do {
    
      x = os_rnd(MAZE_MULT * level);
      y = os_rnd(MAZE_MULT * level);
    
    } while(maze_data[x] [y] != corridor);
    maze_data[x] [y] = key;
  }
}

int dir_x(dir_val dir)
{
  switch(dir) {
    
    case left:
    return(-1);
    break;
    
    case right:
    return(1);
    break;
    
    default:
    return(0);
    break;
  }
}

int dir_y(dir_val dir)
{
  switch(dir) {
    
    case up:
    return(-1);
    break;
    
    case down:
    return(1);
    break;
    
    default:
    return(0);
    break;
  }
}

void plot_quad(int x, int y, int x1, int y1, int x2, int y2, 
               int x3, int y3, int col)
{  
  os_gcol(0, col);
  
  os_move(x, y);
  os_move(x1, y1);
  os_plot(85, x2, y2);
  
  os_move(x1, y1);
  os_move(x2, y2);
  os_plot(85, x3, y3);
}
      
void set_origin(void)
{
  os_vdu(29);
  os_vduw(640);
  os_vduw(512);
}    
  
void right_wall(int depth)
{
  int depth_c1, depth_c2;
  
  depth_c1 = (int) pow(2, depth);
  depth_c2 = (int) pow(2, depth - 1);
  
  plot_quad(640 / depth_c1, 512 / depth_c1,
            640 / depth_c2, 512 / depth_c2,
            640 / depth_c1, -(512 / depth_c1),
            640 / depth_c2, -(512 / depth_c2),
            depth + 7);
}  

void left_wall(int depth)
{
  int depth_c1, depth_c2;
  
  depth_c1 = (int) pow(2, depth);
  depth_c2 = (int) pow(2, depth - 1);
  
  plot_quad(-(640 / depth_c1), 512 / depth_c1,
            -(640 / depth_c2), 512 / depth_c2,
            -(640 / depth_c1), -(512 / depth_c1),
            -(640 / depth_c2), -(512 / depth_c2),
            depth + 7);
}

void right_exit(int depth)
{
  int depth_c1, depth_c2;
  
  depth_c1 = (int) pow(2, depth);
  depth_c2 = (int) pow(2, depth - 1);
  
  os_gcol(0, depth + 7);
  
  os_rectanglefill(640 / depth_c1,
  	           512 / depth_c1,
  	           640 / depth_c1,
  	           -(512 / depth_c2));
}

void left_exit(int depth)
{
  int depth_c1, depth_c2;
  
  depth_c1 = (int) pow(2, depth);
  depth_c2 = (int) pow(2, depth - 1);
  
  os_gcol(0, depth + 7);
  
  os_rectanglefill(-(640 / depth_c1),
  	           512 / depth_c1,
  	           -(640 / depth_c1),
  	           -(512 / depth_c2));
}

void end_wall(int depth)
{
  int depth_c1, depth_c2;
  
  depth_c1 = (int) pow(2, depth);
  depth_c2 = (int) pow(2, depth - 1);
  
  os_gcol(0, depth + 8);
  
  os_rectanglefill(-(640 / depth_c1),
  	           512 / depth_c1,
  	           (640 / depth_c1) * 2,
  	           -(512 / depth_c2));
}

void treasure_box(int depth)
{
  int depth_c1, depth_c2;
  
  depth_c1 = (int) pow(2, depth);
  depth_c2 = (int) pow(2, depth - 1);
  
  os_gcol(0, depth + 7);
  
  os_rectanglefill(-288 / depth_c2, -512 / depth_c2,
                   576 / depth_c2, 128 / depth_c2);
  	           
  plot_quad(-288 / depth_c1, -512 / depth_c1,
  	    288 / depth_c1, -512 / depth_c1,
  	    -288 / depth_c2, -384 / depth_c2,
  	    288 / depth_c2, -384 / depth_c2,
  	    depth + 8);
}

void trapdoor(int depth)
{
  int depth_c1, depth_c2;
  
  depth_c1 = (int) pow(2, depth);
  depth_c2 = (int) pow(2, depth - 1);
    
  plot_quad(-640 / depth_c1, -512 / depth_c1,
             640 / depth_c1, -512 / depth_c1,
            -640 / depth_c2, -512 / depth_c2,
             640 / depth_c2, -512 / depth_c2,
             0);
}
  
void plot_view(int x, int y, dir_val dir)
{
  int depth = 1, end = FALSE;
  
  plot_starscape();
  plot_floor();
  
  while(depth < 9 && end == FALSE) {
    
    switch(dir) {
      
      case up:
      if(maze_data [x - 1] [y - (depth - 1)] == wall) {
        left_wall(depth);
      }
      else {
        left_exit(depth);
      }
      
      if(maze_data [x + 1] [y - (depth - 1)] == wall) {
        right_wall(depth);
      }
      else {
        right_exit(depth);
      }
      
      if(maze_data [x] [y - (depth - 1)] == box ||
         maze_data [x] [y - (depth - 1)] == key) {
        treasure_box(depth);
      }
      
      if(maze_data [x] [y - (depth - 1)] == door) {
        trapdoor(depth);
      }
      
      if(maze_data [x] [y - depth] == wall) {
        end_wall(depth);
        end = TRUE;
      }
      break;
      
      case down:
      if(maze_data [x + 1] [y + (depth - 1)] == wall) {
        left_wall(depth);
      }
      else {
        left_exit(depth);
      }
      
      if(maze_data [x - 1] [y + (depth - 1)] == wall) {
        right_wall(depth);
      }
      else {
        right_exit(depth);
      }
      
      if(maze_data [x] [y + (depth - 1)] == box ||
         maze_data [x] [y + (depth - 1)] == key) {
        treasure_box(depth);
      }
      
      if(maze_data [x] [y + (depth - 1)] == door) {
        trapdoor(depth);
      }
      
      if(maze_data [x] [y + depth] == wall) {
        end_wall(depth);
        end = TRUE;
      }
      break;
      
      case left:
      if(maze_data [x - (depth - 1)] [y + 1] == wall) {
        left_wall(depth);
      }
      else {
        left_exit(depth);
      }
      
      if(maze_data [x - (depth - 1)] [y - 1] == wall) {
        right_wall(depth);
      }
      else {
        right_exit(depth);
      }
      
      if(maze_data [x - (depth - 1)] [y] == box ||
         maze_data [x - (depth - 1)] [y] == key) {
        treasure_box(depth);
      }
      
      if(maze_data [x - (depth - 1)] [y] == door) {
        trapdoor(depth);
      }
      
      if(maze_data [x - depth] [y] == wall) {
        end_wall(depth);
        end = TRUE;
      }
      break;
      
      case right:     
      if(maze_data [x + (depth - 1)] [y - 1] == wall) {
        left_wall(depth);
      }
      else {
        left_exit(depth);
      }
      
      if(maze_data [x + (depth - 1)] [y + 1] == wall) {
        right_wall(depth);
      }
      else {
        right_exit(depth);
      }
      
      if(maze_data [x + (depth - 1)] [y] == box ||
         maze_data [x + (depth - 1)] [y] == key) {
        treasure_box(depth);
      }
      
      if(maze_data [x + (depth - 1)] [y] == door) {
        trapdoor(depth);
      }
      
      if(maze_data [x + depth] [y] == wall) {
        end_wall(depth);
        end = TRUE;
      }
      break;
    }
    
    depth++;
  }
}
  
void scanner(int x, int y, dir_val dir, int range)
{
  int x_loop, y_loop;
   
  os_tab(0, 1);
 
  for(y_loop = y - range; y_loop <= y + range; y_loop++) {
    os_tab((40 - (range * 2)) / 2, os_vpos());
    for(x_loop = x - range; x_loop <= x + range; x_loop++) {
      
      if(x_loop >= 0 && y_loop>= 0 && x_loop <= MAZE_MULT * level
         && y_loop <= MAZE_MULT * level) {
        
        switch(maze_data [x_loop] [y_loop]) {
          
          case wall:
          os_vdu(255);
          break;
        
          case corridor:
          printf(" ");
          break;
        
          case box:
          printf("*");
          break;
          
          case door:
          printf(".");
          break;
          
          case key:
          printf("K");
          break;
          
        }
             
      }
      else {
        os_vdu(255);
      }
    }
    printf("\n");
  }
  os_tab((40 - (range * 2)) / 2 + range, 1 + range);
  dir_arrow(dir);
}
        
void oxy_gauge(int oxy_left)
{
  if(oxy_left < 25)
  {
    os_gcol(0,1);
  }
  else
  {
    os_gcol(0,2);
  }
  
  os_rectanglefill(615, -500, 30, 10 * oxy_left);
} 

void reset_player(void)
{  
  do {
    
    player_x = os_rnd(MAZE_MULT * level);
    player_y = os_rnd(MAZE_MULT * level);
    
  } while(maze_data[player_x] [player_y] != corridor);
  
  player_dir = os_rnd(4);
  move_counter = (level * MAZE_MULT) * (level * MAZE_MULT);
  keys = 0;
}     
 
void update_player(void)
{ 
  if(os_inkey(-113))
  {
    game_status = dead;
  }
  
  if(os_inkey(-98)) {
    player_dir++;   
    if(player_dir > right) player_dir = up;
    
    plot_view(player_x, player_y, player_dir);
    show_status();
    message_update(); 
    bank_flip();  
    while(os_inkey(-98));   
  }
  
  if(os_inkey(-67)) {
    player_dir--;
    if(player_dir < up) player_dir = right;
    
    plot_view(player_x, player_y, player_dir);
    show_status();
    message_update(); 
    bank_flip();
    while(os_inkey(-67));    
  }  
    
  if(os_inkey(-105) &&
     maze_data [player_x + dir_x(player_dir)]
               [player_y + dir_y(player_dir)] != wall) {
    player_x += dir_x(player_dir);
    player_y += dir_y(player_dir);
  
    move_counter--;
  
    plot_view(player_x, player_y, player_dir);
    show_status();
    message_update(); 
    bank_flip();    
  }
  
  if(os_inkey(-82)) 
  {
    scans--;
    if(scans < 0) scans = 0;
    
    if(cheat == TRUE)
    {
      scanner(player_x, player_y, player_dir, 14);
    }
    else
    {
      scanner(player_x, player_y, player_dir, scans + 2);
    }
    
    os_tab(0,30);
    printf("Press SPACE to go back to the maze");
    bank_flip();
    
    while(!os_inkey(-99));
  
    plot_view(player_x, player_y, player_dir);
    show_status();
    message_update(); 
    bank_flip(); 
  } 
  
  if(os_inkey(-102) && music_present == TRUE)
  {
    if(music == TRUE)
    {
      music = FALSE;
      stop_music();
    }
    else
    {
      music = TRUE;
      start_music();
    }
    while(os_inkey(-102));
  }
  
  if(maze_data [player_x] [player_y] == box && os_inkey(-99))
  {
    maze_data [player_x] [player_y] = corridor;
    
    switch(os_rnd(4))
    {
      case 0:
      score+=5;
      disp_message("You find some silver.");
      break;
      
      case 1:
      move_counter = (level * MAZE_MULT) * (level * MAZE_MULT);
      disp_message("You find an oxygen canister.");  
      break;
      
      case 2:
      scans++;
      if(scans > 10) scans = 10;
      disp_message("You find a scanner battery.");
      break;
      
      case 3:
      score+=10;
      disp_message("You find some gold.");
      break;
    } 
    move_counter--; 
    
    plot_view(player_x, player_y, player_dir);
    show_status();
    message_update(); 
    bank_flip();      
  }
  
  if(maze_data [player_x] [player_y] == key && os_inkey(-99))
  {
    maze_data [player_x] [player_y] = corridor;
    score += 5;
    
    disp_message("You find a key.");
    
    move_counter--;
    keys++; 
    
    plot_view(player_x, player_y, player_dir);
    show_status();
    message_update(); 
    bank_flip();      
  }
  
  if(maze_data [player_x] [player_y] == door && os_inkey(-99)
     && keys != level && cheat == FALSE)
  {
    disp_message("You need more keys!");
    plot_view(player_x, player_y, player_dir);
    show_status();
    message_update(); 
    bank_flip(); 
  }   
  
  if(maze_data [player_x] [player_y] == door && os_inkey(-99)
     && (keys == level || cheat == TRUE)) 
  {    
    bank_flip_off();
    os_cls();
    level++;
    
    if(level == 11)
    {
      game_complete();
    }
    else
    {  
      scans += level;
      score += level * 5;
      os_tab(0,29);
      printf("Descending to level %d ...", level);  
      generate_maze(level);
      reset_player();
    
      bank_flip();
      plot_view(player_x, player_y, player_dir);
      show_status();
      message_update(); 
      bank_flip(); 
    }
  }
  
  if(move_counter <= 0)
  {
    move_counter = 0;
    if(cheat == FALSE)
    {      
      game_status = dead;
    }
  }     
}
       
void disp_message(char *string)
{
  sprintf(message, "%s", string);
  m_flag = TRUE;
  m_base_time = clock();
}    
      
void message_update(void)
{
  if(m_flag == TRUE) 
  {
    m_timer = (clock() - m_base_time) / 100;
  
    os_tab((40 - strlen(message)) / 2, 1); 
    printf("%s", message);    
   
    if(m_timer > 5) 
    {
      m_flag = FALSE;
    }
  }
}
 
void plot_starscape(void)
{
  int loop;
  
  os_gcol(0, 7);
  
  for(loop = 0; loop < NO_STARS; loop++)
  {
    os_plot(69, stars[loop][(int) player_dir].x, 
    	        stars[loop][(int) player_dir].y);
  }
  
  switch(player_dir)
  {
    case up:
    os_gcol(0,1);
    os_circlefill(-400, 500, 50);
    break;
    
    case down:
    os_gcol(0,4);
    os_circlefill(0, 500, 100);
    break;
    
    case right:
    os_gcol(0,2);
    os_circlefill(450, 400, 150);
    break;
  }
}

void plot_floor(void)
{
  int loop;
  
  for(loop = 0; loop < 4; loop++)
  {
    os_gcol(0, loop + 3);
    
    os_rectanglefill(-640, -512 / pow(2, loop), 1280, 512 / pow(2, loop));
  }
}

void bank_flip(void)
{  
  os_regset regs;

  os_byte(19, 0, 0);
  
  switch(bf_state)
  {
    case 1:
    regs.r[0] = 112;
    regs.r[1] = 1;
    os_swi(OS_Byte, &regs);
    regs.r[0] = 113;
    regs.r[1] = 2;
    os_swi(OS_Byte, &regs);    
    bf_state = 2;
    break;
    
    case 2:
    regs.r[0] = 112;
    regs.r[1] = 2;
    os_swi(OS_Byte, &regs);
    regs.r[0] = 113;
    regs.r[1] = 1;
    os_swi(OS_Byte, &regs);   
    bf_state = 1;
    break;
  } 
  
  os_cls();
}

void bank_flip_off(void)
{  
  os_regset regs;

  os_byte(19, 0, 0);
  
  regs.r[0] = 112;
  regs.r[1] = 1;
  os_swi(OS_Byte, &regs);
  regs.r[0] = 113;
  regs.r[1] = 1;
  os_swi(OS_Byte, &regs);  
}

void dir_arrow(dir_val dir)
{
  switch(dir) {
    
    case up:
    printf("�");
    break;
    
    case down:
    printf("�");
    break;
    
    case left:
    printf("�");
    break;
    
    case right:
    printf("�");
    break;
    
  }  
}  

void show_status(void)
{
  char string[20];
  
  os_tab(2,0);
  dir_arrow(player_dir);
  if(cheat == TRUE)
  {
    centre_print("CHEAT MODE ACTIVE", 0);
  }
  
  os_colour(0);
  os_colour(128 + 3);
  os_tab(3,30);
  printf("Score : %d", score);
  os_tab(28, 30);
  printf("Batts : %d", scans); 
  sprintf(string, "Keys : %d/%d", keys, level);
  centre_print(string, 30);
  os_colour(7);
  os_colour(128);
  
  oxy_gauge((move_counter / ((level * MAZE_MULT) * (level * MAZE_MULT))) * 100);
} 

void show_title_page(void)
{
  plot_starscape();
  plot_floor();
  
  end_wall(1);
  left_wall(1);
  right_wall(1);
  
  os_colour(2);
  if(cheat == TRUE)
  {
    centre_print("CHEAT MODE ACTIVE", 0);
  }
  centre_print("3D - MAZE  Version 1.00", 2);
  os_colour(7);
  centre_print("-----------------------", 3);
  centre_print("A stunningly original game", 4);
  centre_print("by Matt Kneebone", 5);
  
  os_colour(7);
  os_colour(128);
}

void show_options(void)
{
  os_colour(1);
  os_colour(128 + 3);
  centre_print("Press 'Q' to quit", 28);
  centre_print("Press SPACE to enter the maze", 30);
  
  os_colour(7);
  os_colour(128);
}

void centre_print(char *text, int line)
{
  os_tab((40 - strlen(text)) / 2, line);
  printf("%s", text);
}

void show_hi_scores(void)
{
  int loop;
   
  os_colour(128 + 9);
   
  os_colour(2);
  centre_print("High Scores", 9);
  
  os_colour(7);
  
  for(loop = 0; loop < 6; loop ++)
  {
    os_tab(11, (loop * 2) + 11);
    printf("%s",hi_scores[loop].name);
    os_tab(25, (loop * 2) + 11);
    printf("%.4d", hi_scores[loop].score);
  }
  
  os_colour(128);
}
 
void reset_hi_scores(void)
{
  int loop;
  
  for(loop = 0; loop < 6; loop++)
  {
    sprintf(hi_scores[loop].name, "Matt\n");
    hi_scores[loop].score = (6 - (loop + 1)) * 5;
  }
}

void load_hi_scores(void)
{
  int loop;
  FILE *file_handle;
  
  if((file_handle = fopen("<3D-Maze$Dir>.Scores", "r")) == NULL)
  {
    reset_hi_scores();
  }
  
  else
  {
    for(loop = 0; loop < 6; loop++)
    {
      fgets(hi_scores[loop].name, 13, file_handle);
      fscanf(file_handle, "%d ", &hi_scores[loop].score);
    }
    fclose(file_handle);
  }
}

void save_hi_scores(void)
{
  int loop;
  FILE *file_handle;
  
  file_handle = fopen("<3D-Maze$Dir>.Scores", "w");
  
  for(loop = 0; loop < 6; loop++)
  {
    fprintf(file_handle, "%s%d\n", hi_scores[loop].name,
            hi_scores[loop].score);
  }
  fclose(file_handle);
}

void new_hi_score(void)
{
  int loop, loop1;
  char string[14];
  
  bank_flip_off();
  os_cls();
  plot_floor();
  plot_starscape();
  
  os_colour(128);
  os_colour(2);
  
  if(cheat == FALSE)
  {
    centre_print("Congratulations!", 4);
    centre_print("You have a high score.", 5);
  
    os_colour(1);
  
    centre_print("Please enter your name",7);
  
    os_tab(13,9);
    printf(".............");
    os_tab(13,9);
    fgets(string, 13, stdin);
  }
  else
  {
    sprintf(string, "<< CHEAT >>\n");
  }
  
  loop = 5;
  do
  {
    loop--;
  } while(hi_scores[loop].score < score && loop > 0);
    
  loop1 = 5;
  do
  {
    hi_scores[loop1].score = hi_scores[loop1 - 1].score;
    sprintf(hi_scores[loop1].name, "%s", hi_scores[loop1 - 1].name);
    
    loop1--;
  } while(loop1 > loop);
  
  hi_scores[loop].score = score;
  sprintf(hi_scores[loop].name, "%s", string);
  
  os_colour(128);  
}

void load_music(void)
{
  FILE *file_handle;
  
  if((file_handle = fopen("<3D-Maze$Dir>.GameMusic", "r")) != NULL)
  {    
    os_cli("QTMLoad <3D-Maze$Dir>.GameMusic x");
    music_present = TRUE;
    fclose(file_handle);
  }
}

void start_music(void)
{
  os_cli("QTMStart");
}

void stop_music(void)
{
  os_cli("QTMStop");
}

void disable_escape(void)
{
  int x = 1, y = 0;
  
  os_byte(200, &x, &y);
}

void enable_escape(void)
{
  int x = 0, y = 0;
  
  os_byte(200, &x, &y);
}  

void game_complete(void)
{
  show_title_page();
  
  os_colour(7);
  os_colour(128 + 9);
  
  centre_print("CONGRATULATIONS", 9);
  centre_print("You have completed", 11);
  centre_print("3D - Maze.", 12);
  centre_print("That's about it..", 14);
  centre_print("Apart from the cheat", 15);
  centre_print("(use '-fish' as an", 16);
  centre_print("option in the !Run", 17);
  centre_print("file)", 18);
  
  os_colour(1);
  os_colour(128 + 3);
  centre_print("Press SPACE to continue ...", 30);
  
  while(!os_inkey(-99));
  
  game_status = complete;
  
  os_colour(7);
  os_colour(128);
}
  
       
  
00000000  2f 2a 20 50 72 6f 67 72  61 6d 20 3a 20 4d 61 7a  |/* Program : Maz|
00000010  65 2e 63 0a 20 20 20 56  65 72 73 69 6f 6e 20 3a  |e.c.   Version :|
00000020  20 31 2e 30 30 20 28 30  31 20 4a 75 6e 20 31 39  | 1.00 (01 Jun 19|
00000030  39 35 29 0a 20 20 20 50  75 72 70 6f 73 65 20 3a  |95).   Purpose :|
00000040  20 33 44 20 4d 61 7a 65  20 67 61 6d 65 20 28 61  | 3D Maze game (a|
00000050  6e 64 20 74 6f 20 6b 65  65 70 20 6d 65 20 66 72  |nd to keep me fr|
00000060  6f 6d 20 72 65 76 69 73  69 6e 67 20 2e 2e 2e 20  |om revising ... |
00000070  69 66 20 49 20 66 61 69  6c 20 6d 79 0a 20 20 20  |if I fail my.   |
00000080  09 20 20 20 20 20 47 43  53 45 73 20 74 68 65 6e  |.     GCSEs then|
00000090  20 74 68 69 73 20 69 73  20 77 68 79 2e 2e 2e 29  | this is why...)|
000000a0  0a 0a 20 20 20 28 63 29  20 31 39 39 35 20 4d 61  |..   (c) 1995 Ma|
000000b0  74 74 20 4b 6e 65 65 62  6f 6e 65 20 2a 2f 0a 0a  |tt Kneebone */..|
000000c0  2f 2a 20 41 4e 53 49 20  69 6e 63 6c 75 64 65 73  |/* ANSI includes|
000000d0  20 2a 2f 0a 23 69 6e 63  6c 75 64 65 20 3c 73 74  | */.#include <st|
000000e0  64 69 6f 2e 68 3e 0a 23  69 6e 63 6c 75 64 65 20  |dio.h>.#include |
000000f0  3c 74 69 6d 65 2e 68 3e  0a 23 69 6e 63 6c 75 64  |<time.h>.#includ|
00000100  65 20 3c 6d 61 74 68 2e  68 3e 0a 23 69 6e 63 6c  |e <math.h>.#incl|
00000110  75 64 65 20 3c 73 74 72  69 6e 67 2e 68 3e 0a 0a  |ude <string.h>..|
00000120  2f 2a 20 45 61 73 79 20  43 20 69 6e 63 6c 75 64  |/* Easy C includ|
00000130  65 73 20 2a 2f 0a 23 69  6e 63 6c 75 64 65 20 3c  |es */.#include <|
00000140  72 6f 73 6c 69 62 2e 68  3e 0a 23 69 6e 63 6c 75  |roslib.h>.#inclu|
00000150  64 65 20 3c 73 77 69 73  2e 68 3e 0a 0a 2f 2a 20  |de <swis.h>../* |
00000160  4d 61 63 72 6f 20 61 6e  64 20 63 6f 6e 73 74 61  |Macro and consta|
00000170  6e 74 20 76 61 6c 75 65  20 64 65 66 69 6e 69 74  |nt value definit|
00000180  69 6f 6e 73 20 2a 2f 0a  23 64 65 66 69 6e 65 20  |ions */.#define |
00000190  54 52 55 45 09 09 30 0a  23 64 65 66 69 6e 65 20  |TRUE..0.#define |
000001a0  46 41 4c 53 45 09 09 31  0a 0a 23 64 65 66 69 6e  |FALSE..1..#defin|
000001b0  65 20 4d 41 5a 45 5f 4d  55 4c 54 09 31 30 0a 23  |e MAZE_MULT.10.#|
000001c0  64 65 66 69 6e 65 20 4d  4f 56 45 5f 4d 41 58 09  |define MOVE_MAX.|
000001d0  28 4d 41 5a 45 5f 4d 55  4c 54 20 2a 20 4d 41 5a  |(MAZE_MULT * MAZ|
000001e0  45 5f 4d 55 4c 54 29 0a  0a 23 64 65 66 69 6e 65  |E_MULT)..#define|
000001f0  20 4e 4f 5f 53 54 41 52  53 09 35 30 09 0a 0a 2f  | NO_STARS.50.../|
00000200  2a 20 54 79 70 65 64 65  66 73 20 2a 2f 0a 74 79  |* Typedefs */.ty|
00000210  70 65 64 65 66 20 65 6e  75 6d 20 7b 0a 20 20 77  |pedef enum {.  w|
00000220  61 6c 6c 2c 0a 20 20 63  6f 72 72 69 64 6f 72 2c  |all,.  corridor,|
00000230  0a 20 20 62 6f 78 2c 0a  20 20 6b 65 79 2c 0a 20  |.  box,.  key,. |
00000240  20 64 6f 6f 72 0a 7d 20  6d 61 7a 65 5f 63 65 6c  | door.} maze_cel|
00000250  6c 3b 0a 0a 74 79 70 65  64 65 66 20 65 6e 75 6d  |l;..typedef enum|
00000260  20 7b 0a 20 20 75 70 20  3d 20 30 2c 0a 20 20 6c  | {.  up = 0,.  l|
00000270  65 66 74 2c 0a 20 20 64  6f 77 6e 2c 0a 20 20 72  |eft,.  down,.  r|
00000280  69 67 68 74 0a 7d 20 64  69 72 5f 76 61 6c 3b 0a  |ight.} dir_val;.|
00000290  0a 74 79 70 65 64 65 66  20 73 74 72 75 63 74 20  |.typedef struct |
000002a0  7b 0a 20 20 69 6e 74 20  78 3b 0a 20 20 69 6e 74  |{.  int x;.  int|
000002b0  20 79 3b 0a 7d 20 70 6f  69 6e 74 3b 0a 0a 74 79  | y;.} point;..ty|
000002c0  70 65 64 65 66 20 65 6e  75 6d 20 7b 0a 20 20 6f  |pedef enum {.  o|
000002d0  6b 2c 0a 20 20 74 69 74  6c 65 5f 70 61 67 65 2c  |k,.  title_page,|
000002e0  0a 20 20 64 65 61 64 2c  0a 20 20 63 6f 6d 70 6c  |.  dead,.  compl|
000002f0  65 74 65 2c 0a 20 20 71  75 69 74 0a 7d 20 67 6d  |ete,.  quit.} gm|
00000300  5f 73 74 61 74 3b 0a 0a  74 79 70 65 64 65 66 20  |_stat;..typedef |
00000310  73 74 72 75 63 74 20 7b  0a 20 20 63 68 61 72 20  |struct {.  char |
00000320  6e 61 6d 65 5b 31 34 5d  3b 0a 20 20 69 6e 74 20  |name[14];.  int |
00000330  73 63 6f 72 65 3b 0a 7d  20 68 5f 73 63 6f 72 65  |score;.} h_score|
00000340  3b 0a 0a 2f 2a 20 46 75  6e 63 74 69 6f 6e 20 70  |;../* Function p|
00000350  72 6f 74 6f 74 79 70 65  73 20 2a 2f 0a 76 6f 69  |rototypes */.voi|
00000360  64 20 67 65 6e 65 72 61  74 65 5f 6d 61 7a 65 28  |d generate_maze(|
00000370  69 6e 74 29 3b 0a 76 6f  69 64 20 69 6e 69 74 69  |int);.void initi|
00000380  61 6c 69 73 65 5f 73 74  75 66 66 28 76 6f 69 64  |alise_stuff(void|
00000390  29 3b 0a 69 6e 74 20 64  69 72 5f 78 28 64 69 72  |);.int dir_x(dir|
000003a0  5f 76 61 6c 29 3b 0a 69  6e 74 20 64 69 72 5f 79  |_val);.int dir_y|
000003b0  28 64 69 72 5f 76 61 6c  29 3b 0a 76 6f 69 64 20  |(dir_val);.void |
000003c0  6f 78 79 5f 67 61 75 67  65 28 69 6e 74 29 3b 0a  |oxy_gauge(int);.|
000003d0  76 6f 69 64 20 70 6c 6f  74 5f 71 75 61 64 28 69  |void plot_quad(i|
000003e0  6e 74 2c 20 69 6e 74 2c  20 69 6e 74 2c 20 69 6e  |nt, int, int, in|
000003f0  74 2c 20 69 6e 74 2c 20  69 6e 74 2c 20 69 6e 74  |t, int, int, int|
00000400  2c 20 69 6e 74 2c 20 69  6e 74 29 3b 0a 76 6f 69  |, int, int);.voi|
00000410  64 20 72 69 67 68 74 5f  77 61 6c 6c 28 69 6e 74  |d right_wall(int|
00000420  29 3b 0a 76 6f 69 64 20  6c 65 66 74 5f 77 61 6c  |);.void left_wal|
00000430  6c 28 69 6e 74 29 3b 0a  76 6f 69 64 20 6c 65 66  |l(int);.void lef|
00000440  74 5f 65 78 69 74 28 69  6e 74 29 3b 0a 76 6f 69  |t_exit(int);.voi|
00000450  64 20 72 69 67 68 74 5f  65 78 69 74 28 69 6e 74  |d right_exit(int|
00000460  29 3b 0a 76 6f 69 64 20  65 6e 64 5f 77 61 6c 6c  |);.void end_wall|
00000470  28 69 6e 74 29 3b 0a 76  6f 69 64 20 74 72 65 61  |(int);.void trea|
00000480  73 75 72 65 5f 62 6f 78  28 69 6e 74 29 3b 0a 76  |sure_box(int);.v|
00000490  6f 69 64 20 74 72 61 70  64 6f 6f 72 28 69 6e 74  |oid trapdoor(int|
000004a0  29 3b 0a 76 6f 69 64 20  73 65 74 5f 6f 72 69 67  |);.void set_orig|
000004b0  69 6e 28 76 6f 69 64 29  3b 0a 76 6f 69 64 20 70  |in(void);.void p|
000004c0  6c 6f 74 5f 76 69 65 77  28 69 6e 74 2c 20 69 6e  |lot_view(int, in|
000004d0  74 2c 20 64 69 72 5f 76  61 6c 29 3b 0a 76 6f 69  |t, dir_val);.voi|
000004e0  64 20 73 63 61 6e 6e 65  72 28 69 6e 74 2c 20 69  |d scanner(int, i|
000004f0  6e 74 2c 20 64 69 72 5f  76 61 6c 2c 20 69 6e 74  |nt, dir_val, int|
00000500  29 3b 0a 76 6f 69 64 20  72 65 73 65 74 5f 70 6c  |);.void reset_pl|
00000510  61 79 65 72 28 76 6f 69  64 29 3b 0a 76 6f 69 64  |ayer(void);.void|
00000520  20 75 70 64 61 74 65 5f  70 6c 61 79 65 72 28 76  | update_player(v|
00000530  6f 69 64 29 3b 0a 76 6f  69 64 20 64 69 73 70 5f  |oid);.void disp_|
00000540  6d 65 73 73 61 67 65 28  63 68 61 72 20 2a 29 3b  |message(char *);|
00000550  0a 76 6f 69 64 20 6d 65  73 73 61 67 65 5f 75 70  |.void message_up|
00000560  64 61 74 65 28 76 6f 69  64 29 3b 0a 76 6f 69 64  |date(void);.void|
00000570  20 70 6c 6f 74 5f 73 74  61 72 73 63 61 70 65 28  | plot_starscape(|
00000580  76 6f 69 64 29 3b 0a 76  6f 69 64 20 70 6c 6f 74  |void);.void plot|
00000590  5f 66 6c 6f 6f 72 28 76  6f 69 64 29 3b 0a 76 6f  |_floor(void);.vo|
000005a0  69 64 20 62 61 6e 6b 5f  66 6c 69 70 28 76 6f 69  |id bank_flip(voi|
000005b0  64 29 3b 0a 76 6f 69 64  20 62 61 6e 6b 5f 66 6c  |d);.void bank_fl|
000005c0  69 70 5f 6f 66 66 28 76  6f 69 64 29 3b 0a 76 6f  |ip_off(void);.vo|
000005d0  69 64 20 64 69 72 5f 61  72 72 6f 77 28 64 69 72  |id dir_arrow(dir|
000005e0  5f 76 61 6c 29 3b 0a 76  6f 69 64 20 73 68 6f 77  |_val);.void show|
000005f0  5f 73 74 61 74 75 73 28  76 6f 69 64 29 3b 0a 76  |_status(void);.v|
00000600  6f 69 64 20 73 68 6f 77  5f 74 69 74 6c 65 5f 70  |oid show_title_p|
00000610  61 67 65 28 76 6f 69 64  29 3b 0a 76 6f 69 64 20  |age(void);.void |
00000620  63 65 6e 74 72 65 5f 70  72 69 6e 74 28 63 68 61  |centre_print(cha|
00000630  72 20 2a 2c 20 69 6e 74  29 3b 0a 76 6f 69 64 20  |r *, int);.void |
00000640  64 65 74 61 69 6c 5f 6c  69 6e 65 28 76 6f 69 64  |detail_line(void|
00000650  29 3b 0a 76 6f 69 64 20  73 68 6f 77 5f 68 69 5f  |);.void show_hi_|
00000660  73 63 6f 72 65 73 28 76  6f 69 64 29 3b 0a 76 6f  |scores(void);.vo|
00000670  69 64 20 73 68 6f 77 5f  6f 70 74 69 6f 6e 73 28  |id show_options(|
00000680  76 6f 69 64 29 3b 0a 76  6f 69 64 20 72 65 73 65  |void);.void rese|
00000690  74 5f 68 69 5f 73 63 6f  72 65 73 28 76 6f 69 64  |t_hi_scores(void|
000006a0  29 3b 0a 76 6f 69 64 20  6c 6f 61 64 5f 68 69 5f  |);.void load_hi_|
000006b0  73 63 6f 72 65 73 28 76  6f 69 64 29 3b 0a 76 6f  |scores(void);.vo|
000006c0  69 64 20 73 61 76 65 5f  68 69 5f 73 63 6f 72 65  |id save_hi_score|
000006d0  73 28 76 6f 69 64 29 3b  0a 76 6f 69 64 20 6e 65  |s(void);.void ne|
000006e0  77 5f 68 69 5f 73 63 6f  72 65 28 76 6f 69 64 29  |w_hi_score(void)|
000006f0  3b 0a 76 6f 69 64 20 6c  6f 61 64 5f 6d 75 73 69  |;.void load_musi|
00000700  63 28 76 6f 69 64 29 3b  0a 76 6f 69 64 20 73 74  |c(void);.void st|
00000710  61 72 74 5f 6d 75 73 69  63 28 76 6f 69 64 29 3b  |art_music(void);|
00000720  0a 76 6f 69 64 20 73 74  6f 70 5f 6d 75 73 69 63  |.void stop_music|
00000730  28 76 6f 69 64 29 3b 0a  76 6f 69 64 20 64 69 73  |(void);.void dis|
00000740  61 62 6c 65 5f 65 73 63  61 70 65 28 76 6f 69 64  |able_escape(void|
00000750  29 3b 0a 76 6f 69 64 20  65 6e 61 62 6c 65 5f 65  |);.void enable_e|
00000760  73 63 61 70 65 28 76 6f  69 64 29 3b 0a 76 6f 69  |scape(void);.voi|
00000770  64 20 67 61 6d 65 5f 63  6f 6d 70 6c 65 74 65 28  |d game_complete(|
00000780  76 6f 69 64 29 3b 0a 0a  2f 2a 20 47 6c 6f 62 61  |void);../* Globa|
00000790  6c 20 56 61 72 69 61 62  6c 65 73 20 2a 2f 0a 6d  |l Variables */.m|
000007a0  61 7a 65 5f 63 65 6c 6c  20 6d 61 7a 65 5f 64 61  |aze_cell maze_da|
000007b0  74 61 20 5b 4d 41 5a 45  5f 4d 55 4c 54 20 2a 20  |ta [MAZE_MULT * |
000007c0  31 30 5d 20 5b 4d 41 5a  45 5f 4d 55 4c 54 20 2a  |10] [MAZE_MULT *|
000007d0  20 31 30 5d 3b 0a 69 6e  74 20 70 6c 61 79 65 72  | 10];.int player|
000007e0  5f 78 2c 20 70 6c 61 79  65 72 5f 79 2c 20 73 63  |_x, player_y, sc|
000007f0  6f 72 65 2c 20 73 63 61  6e 73 2c 20 6d 5f 62 61  |ore, scans, m_ba|
00000800  73 65 5f 74 69 6d 65 2c  20 6c 65 76 65 6c 2c 20  |se_time, level, |
00000810  6b 65 79 73 3b 0a 69 6e  74 20 6d 5f 74 69 6d 65  |keys;.int m_time|
00000820  72 2c 20 6d 5f 66 6c 61  67 20 3d 20 46 41 4c 53  |r, m_flag = FALS|
00000830  45 2c 20 63 68 65 61 74  20 3d 20 46 41 4c 53 45  |E, cheat = FALSE|
00000840  2c 20 67 65 6e 5f 74 69  6d 65 72 2c 20 6d 75 73  |, gen_timer, mus|
00000850  69 63 20 3d 20 54 52 55  45 3b 0a 69 6e 74 20 6d  |ic = TRUE;.int m|
00000860  75 73 69 63 5f 70 72 65  73 65 6e 74 20 3d 20 46  |usic_present = F|
00000870  41 4c 53 45 2c 20 62 66  5f 73 74 61 74 65 20 3d  |ALSE, bf_state =|
00000880  20 31 3b 0a 66 6c 6f 61  74 20 6d 6f 76 65 5f 63  | 1;.float move_c|
00000890  6f 75 6e 74 65 72 3b 0a  64 69 72 5f 76 61 6c 20  |ounter;.dir_val |
000008a0  70 6c 61 79 65 72 5f 64  69 72 20 3d 20 75 70 3b  |player_dir = up;|
000008b0  0a 63 68 61 72 20 6d 65  73 73 61 67 65 5b 34 30  |.char message[40|
000008c0  5d 3b 0a 70 6f 69 6e 74  20 73 74 61 72 73 5b 4e  |];.point stars[N|
000008d0  4f 5f 53 54 41 52 53 5d  20 5b 34 5d 3b 0a 67 6d  |O_STARS] [4];.gm|
000008e0  5f 73 74 61 74 20 67 61  6d 65 5f 73 74 61 74 75  |_stat game_statu|
000008f0  73 3b 0a 68 5f 73 63 6f  72 65 20 68 69 5f 73 63  |s;.h_score hi_sc|
00000900  6f 72 65 73 5b 36 5d 3b  0a 0a 2f 2a 20 4d 61 69  |ores[6];../* Mai|
00000910  6e 20 70 72 6f 67 72 61  6d 20 2a 2f 0a 76 6f 69  |n program */.voi|
00000920  64 20 6d 61 69 6e 28 69  6e 74 20 61 72 67 63 2c  |d main(int argc,|
00000930  20 63 68 61 72 20 2a 61  72 67 76 5b 5d 29 0a 7b  | char *argv[]).{|
00000940  0a 20 20 6f 73 5f 6d 6f  64 65 28 39 20 2b 20 31  |.  os_mode(9 + 1|
00000950  32 38 29 3b 0a 20 20 6f  73 5f 63 75 72 73 6f 72  |28);.  os_cursor|
00000960  28 30 29 3b 0a 20 20 73  65 74 5f 6f 72 69 67 69  |(0);.  set_origi|
00000970  6e 28 29 3b 0a 20 20 64  69 73 61 62 6c 65 5f 65  |n();.  disable_e|
00000980  73 63 61 70 65 28 29 3b  0a 20 20 0a 20 20 69 66  |scape();.  .  if|
00000990  28 61 72 67 63 20 3d 3d  20 32 29 0a 20 20 7b 0a  |(argc == 2).  {.|
000009a0  20 20 20 20 69 66 28 73  74 72 63 6d 70 28 61 72  |    if(strcmp(ar|
000009b0  67 76 5b 31 5d 2c 20 22  2d 66 69 73 68 22 29 20  |gv[1], "-fish") |
000009c0  3d 3d 20 54 52 55 45 29  0a 20 20 20 20 7b 0a 20  |== TRUE).    {. |
000009d0  20 20 20 20 20 63 68 65  61 74 20 3d 20 54 52 55  |     cheat = TRU|
000009e0  45 3b 20 20 20 20 20 0a  20 20 20 20 7d 0a 20 20  |E;     .    }.  |
000009f0  7d 0a 20 20 20 20 0a 20  20 69 6e 69 74 69 61 6c  |}.    .  initial|
00000a00  69 73 65 5f 73 74 75 66  66 28 29 3b 0a 20 20 6c  |ise_stuff();.  l|
00000a10  6f 61 64 5f 6d 75 73 69  63 28 29 3b 0a 20 20 73  |oad_music();.  s|
00000a20  74 61 72 74 5f 6d 75 73  69 63 28 29 3b 0a 20 20  |tart_music();.  |
00000a30  6c 6f 61 64 5f 68 69 5f  73 63 6f 72 65 73 28 29  |load_hi_scores()|
00000a40  3b 0a 20 0a 20 20 77 68  69 6c 65 28 67 61 6d 65  |;. .  while(game|
00000a50  5f 73 74 61 74 75 73 20  21 3d 20 71 75 69 74 29  |_status != quit)|
00000a60  0a 20 20 7b 0a 20 20 20  20 67 61 6d 65 5f 73 74  |.  {.    game_st|
00000a70  61 74 75 73 20 3d 20 74  69 74 6c 65 5f 70 61 67  |atus = title_pag|
00000a80  65 3b 0a 20 20 20 20 0a  20 20 20 20 6f 73 5f 63  |e;.    .    os_c|
00000a90  6c 73 28 29 3b 20 0a 20  20 20 20 73 68 6f 77 5f  |ls(); .    show_|
00000aa0  74 69 74 6c 65 5f 70 61  67 65 28 29 3b 0a 20 20  |title_page();.  |
00000ab0  20 20 73 68 6f 77 5f 68  69 5f 73 63 6f 72 65 73  |  show_hi_scores|
00000ac0  28 29 3b 0a 20 20 20 20  73 68 6f 77 5f 6f 70 74  |();.    show_opt|
00000ad0  69 6f 6e 73 28 29 3b 0a  20 20 20 20 0a 20 20 20  |ions();.    .   |
00000ae0  20 77 68 69 6c 65 28 67  61 6d 65 5f 73 74 61 74  | while(game_stat|
00000af0  75 73 20 3d 3d 20 74 69  74 6c 65 5f 70 61 67 65  |us == title_page|
00000b00  29 0a 20 20 20 20 7b 0a  20 20 20 20 20 20 69 66  |).    {.      if|
00000b10  28 6f 73 5f 69 6e 6b 65  79 28 2d 31 37 29 29 20  |(os_inkey(-17)) |
00000b20  67 61 6d 65 5f 73 74 61  74 75 73 20 3d 20 71 75  |game_status = qu|
00000b30  69 74 3b 0a 20 20 20 20  20 20 69 66 28 6f 73 5f  |it;.      if(os_|
00000b40  69 6e 6b 65 79 28 2d 39  39 29 29 20 67 61 6d 65  |inkey(-99)) game|
00000b50  5f 73 74 61 74 75 73 20  3d 20 6f 6b 3b 0a 20 20  |_status = ok;.  |
00000b60  20 20 20 20 69 66 28 6f  73 5f 69 6e 6b 65 79 28  |    if(os_inkey(|
00000b70  2d 35 32 29 20 26 26 20  63 68 65 61 74 20 3d 3d  |-52) && cheat ==|
00000b80  20 54 52 55 45 29 20 72  65 73 65 74 5f 68 69 5f  | TRUE) reset_hi_|
00000b90  73 63 6f 72 65 73 28 29  3b 0a 20 20 20 20 20 20  |scores();.      |
00000ba0  69 66 28 6f 73 5f 69 6e  6b 65 79 28 2d 31 30 32  |if(os_inkey(-102|
00000bb0  29 20 26 26 20 6d 75 73  69 63 5f 70 72 65 73 65  |) && music_prese|
00000bc0  6e 74 20 3d 3d 20 54 52  55 45 29 0a 20 20 20 20  |nt == TRUE).    |
00000bd0  20 20 7b 0a 20 20 20 20  20 20 20 20 69 66 28 6d  |  {.        if(m|
00000be0  75 73 69 63 20 3d 3d 20  54 52 55 45 29 0a 20 20  |usic == TRUE).  |
00000bf0  20 20 20 20 20 20 7b 0a  20 20 20 20 20 20 20 20  |      {.        |
00000c00  20 20 6d 75 73 69 63 20  3d 20 46 41 4c 53 45 3b  |  music = FALSE;|
00000c10  0a 20 20 20 20 20 20 20  20 20 20 73 74 6f 70 5f  |.          stop_|
00000c20  6d 75 73 69 63 28 29 3b  0a 20 20 20 20 20 20 20  |music();.       |
00000c30  20 7d 0a 20 20 20 20 20  20 20 20 65 6c 73 65 0a  | }.        else.|
00000c40  20 20 20 20 20 20 20 20  7b 0a 20 20 20 20 20 20  |        {.      |
00000c50  20 20 20 20 6d 75 73 69  63 20 3d 20 54 52 55 45  |    music = TRUE|
00000c60  3b 0a 20 20 20 20 20 20  20 20 20 20 73 74 61 72  |;.          star|
00000c70  74 5f 6d 75 73 69 63 28  29 3b 0a 20 20 20 20 20  |t_music();.     |
00000c80  20 20 20 7d 0a 20 20 20  20 20 20 20 20 77 68 69  |   }.        whi|
00000c90  6c 65 28 6f 73 5f 69 6e  6b 65 79 28 2d 31 30 32  |le(os_inkey(-102|
00000ca0  29 29 3b 0a 20 20 20 20  20 20 7d 0a 20 20 20 20  |));.      }.    |
00000cb0  7d 0a 20 20 0a 20 20 20  20 69 66 28 67 61 6d 65  |}.  .    if(game|
00000cc0  5f 73 74 61 74 75 73 20  3d 3d 20 6f 6b 29 0a 20  |_status == ok). |
00000cd0  20 20 20 7b 0a 20 20 20  20 20 20 6f 73 5f 63 6c  |   {.      os_cl|
00000ce0  73 28 29 3b 0a 20 20 20  20 20 20 67 65 6e 65 72  |s();.      gener|
00000cf0  61 74 65 5f 6d 61 7a 65  28 31 29 3b 0a 20 20 0a  |ate_maze(1);.  .|
00000d00  20 20 20 20 20 20 73 63  6f 72 65 20 3d 20 30 3b  |      score = 0;|
00000d10  0a 20 20 20 20 20 20 73  63 61 6e 73 20 3d 20 31  |.      scans = 1|
00000d20  3b 0a 20 20 20 20 20 20  6c 65 76 65 6c 20 3d 20  |;.      level = |
00000d30  31 3b 0a 20 20 20 20 20  20 72 65 73 65 74 5f 70  |1;.      reset_p|
00000d40  6c 61 79 65 72 28 29 3b  0a 20 20 0a 20 20 20 20  |layer();.  .    |
00000d50  20 20 6f 73 5f 63 6c 73  28 29 3b 0a 20 20 0a 20  |  os_cls();.  . |
00000d60  20 20 20 20 20 62 61 6e  6b 5f 66 6c 69 70 28 29  |     bank_flip()|
00000d70  3b 20 0a 20 20 20 20 20  20 70 6c 6f 74 5f 76 69  |; .      plot_vi|
00000d80  65 77 28 70 6c 61 79 65  72 5f 78 2c 20 70 6c 61  |ew(player_x, pla|
00000d90  79 65 72 5f 79 2c 20 70  6c 61 79 65 72 5f 64 69  |yer_y, player_di|
00000da0  72 29 3b 0a 20 20 20 20  20 20 73 68 6f 77 5f 73  |r);.      show_s|
00000db0  74 61 74 75 73 28 29 3b  0a 20 20 20 20 20 20 62  |tatus();.      b|
00000dc0  61 6e 6b 5f 66 6c 69 70  28 29 3b 0a 20 20 20 20  |ank_flip();.    |
00000dd0  0a 20 20 20 20 20 20 77  68 69 6c 65 28 67 61 6d  |.      while(gam|
00000de0  65 5f 73 74 61 74 75 73  20 3d 3d 20 6f 6b 29 0a  |e_status == ok).|
00000df0  20 20 20 20 20 20 7b 20  0a 20 20 20 20 20 20 75  |      { .      u|
00000e00  70 64 61 74 65 5f 70 6c  61 79 65 72 28 29 3b 20  |pdate_player(); |
00000e10  20 20 0a 20 20 20 20 20  20 7d 0a 20 20 20 20 20  |  .      }.     |
00000e20  20 6f 73 5f 62 79 74 65  28 31 35 2c 20 30 2c 20  | os_byte(15, 0, |
00000e30  30 29 3b 0a 20 20 20 20  20 20 69 66 28 67 61 6d  |0);.      if(gam|
00000e40  65 5f 73 74 61 74 75 73  20 3d 3d 20 64 65 61 64  |e_status == dead|
00000e50  29 20 0a 20 20 20 20 20  20 7b 0a 20 20 20 20 20  |) .      {.     |
00000e60  20 20 20 6f 73 5f 63 6c  73 28 29 3b 0a 20 20 20  |   os_cls();.   |
00000e70  20 20 20 20 20 70 6c 6f  74 5f 76 69 65 77 28 70  |     plot_view(p|
00000e80  6c 61 79 65 72 5f 78 2c  20 70 6c 61 79 65 72 5f  |layer_x, player_|
00000e90  79 2c 20 70 6c 61 79 65  72 5f 64 69 72 29 3b 0a  |y, player_dir);.|
00000ea0  20 20 20 20 20 20 20 20  73 68 6f 77 5f 73 74 61  |        show_sta|
00000eb0  74 75 73 28 29 3b 0a 20  20 20 20 20 20 20 20 6f  |tus();.        o|
00000ec0  73 5f 63 6f 6c 6f 75 72  28 31 29 3b 0a 20 20 20  |s_colour(1);.   |
00000ed0  20 20 20 20 20 63 65 6e  74 72 65 5f 70 72 69 6e  |     centre_prin|
00000ee0  74 28 22 47 20 41 20 4d  20 45 20 20 4f 20 56 20  |t("G A M E  O V |
00000ef0  45 20 52 22 2c 20 31 35  29 3b 0a 20 20 20 20 20  |E R", 15);.     |
00000f00  20 20 20 62 61 6e 6b 5f  66 6c 69 70 28 29 3b 0a  |   bank_flip();.|
00000f10  20 20 20 20 20 20 20 20  67 65 6e 5f 74 69 6d 65  |        gen_time|
00000f20  72 20 3d 20 63 6c 6f 63  6b 28 29 20 2b 20 33 30  |r = clock() + 30|
00000f30  30 3b 20 0a 20 20 20 20  20 20 20 20 77 68 69 6c  |0; .        whil|
00000f40  65 28 67 65 6e 5f 74 69  6d 65 72 20 3e 3d 20 63  |e(gen_timer >= c|
00000f50  6c 6f 63 6b 28 29 29 3b  20 0a 20 20 20 20 20 20  |lock()); .      |
00000f60  20 20 69 66 28 73 63 6f  72 65 20 3e 20 68 69 5f  |  if(score > hi_|
00000f70  73 63 6f 72 65 73 5b 35  5d 2e 73 63 6f 72 65 29  |scores[5].score)|
00000f80  20 6e 65 77 5f 68 69 5f  73 63 6f 72 65 28 29 3b  | new_hi_score();|
00000f90  0a 20 20 20 20 20 20 7d  0a 20 20 20 20 20 20 69  |.      }.      i|
00000fa0  66 28 67 61 6d 65 5f 73  74 61 74 75 73 20 3d 3d  |f(game_status ==|
00000fb0  20 63 6f 6d 70 6c 65 74  65 29 0a 20 20 20 20 20  | complete).     |
00000fc0  20 7b 0a 20 20 20 20 20  20 20 20 69 66 28 73 63  | {.        if(sc|
00000fd0  6f 72 65 20 3e 20 68 69  5f 73 63 6f 72 65 73 5b  |ore > hi_scores[|
00000fe0  35 5d 2e 73 63 6f 72 65  29 20 6e 65 77 5f 68 69  |5].score) new_hi|
00000ff0  5f 73 63 6f 72 65 28 29  3b 0a 20 20 20 20 20 20  |_score();.      |
00001000  7d 20 0a 20 20 20 20 20  20 62 61 6e 6b 5f 66 6c  |} .      bank_fl|
00001010  69 70 5f 6f 66 66 28 29  3b 0a 20 20 20 20 7d 0a  |ip_off();.    }.|
00001020  20 20 7d 0a 20 20 6f 73  5f 63 6c 73 28 29 3b 0a  |  }.  os_cls();.|
00001030  20 20 73 61 76 65 5f 68  69 5f 73 63 6f 72 65 73  |  save_hi_scores|
00001040  28 29 3b 0a 20 20 6f 73  5f 63 6c 69 28 22 51 54  |();.  os_cli("QT|
00001050  4d 43 6c 65 61 72 22 29  3b 0a 20 20 6f 73 5f 62  |MClear");.  os_b|
00001060  79 74 65 28 31 35 2c 20  30 2c 20 30 29 3b 0a 20  |yte(15, 0, 0);. |
00001070  20 6f 73 5f 62 79 74 65  28 32 30 2c 20 30 2c 20  | os_byte(20, 0, |
00001080  30 29 3b 0a 20 20 65 6e  61 62 6c 65 5f 65 73 63  |0);.  enable_esc|
00001090  61 70 65 28 29 3b 0a 7d  0a 0a 2f 2a 20 46 75 6e  |ape();.}../* Fun|
000010a0  63 74 69 6f 6e 73 20 2a  2f 0a 76 6f 69 64 20 69  |ctions */.void i|
000010b0  6e 69 74 69 61 6c 69 73  65 5f 73 74 75 66 66 28  |nitialise_stuff(|
000010c0  76 6f 69 64 29 0a 7b 0a  20 20 69 6e 74 20 78 5f  |void).{.  int x_|
000010d0  6c 6f 6f 70 2c 20 6c 6f  6f 70 2c 20 69 6e 74 65  |loop, loop, inte|
000010e0  6e 73 69 74 79 3b 0a 20  20 0a 20 20 6f 73 5f 76  |nsity;.  .  os_v|
000010f0  64 75 71 28 32 33 2c 32  35 35 2c 32 35 35 2c 32  |duq(23,255,255,2|
00001100  35 35 2c 32 35 35 2c 32  35 35 2c 32 35 35 2c 32  |55,255,255,255,2|
00001110  35 35 2c 32 35 35 2c 32  35 35 29 3b 0a 20 20 0a  |55,255,255);.  .|
00001120  20 20 66 6f 72 28 6c 6f  6f 70 20 3d 20 31 3b 20  |  for(loop = 1; |
00001130  6c 6f 6f 70 20 3c 20 39  3b 20 6c 6f 6f 70 2b 2b  |loop < 9; loop++|
00001140  29 20 7b 0a 20 20 20 20  69 6e 74 65 6e 73 69 74  |) {.    intensit|
00001150  79 20 3d 20 32 35 36 20  2d 20 28 6c 6f 6f 70 20  |y = 256 - (loop |
00001160  2a 20 33 32 29 3b 0a 20  20 20 20 6f 73 5f 76 64  |* 32);.    os_vd|
00001170  75 71 28 31 39 2c 6c 6f  6f 70 20 2b 20 37 2c 20  |uq(19,loop + 7, |
00001180  31 36 2c 20 30 2c 20 69  6e 74 65 6e 73 69 74 79  |16, 0, intensity|
00001190  20 2f 20 32 2c 20 69 6e  74 65 6e 73 69 74 79 29  | / 2, intensity)|
000011a0  3b 0a 20 20 7d 0a 20 20  0a 20 20 66 6f 72 28 6c  |;.  }.  .  for(l|
000011b0  6f 6f 70 20 3d 20 31 3b  20 6c 6f 6f 70 20 3c 20  |oop = 1; loop < |
000011c0  35 3b 20 6c 6f 6f 70 2b  2b 29 20 7b 0a 20 20 20  |5; loop++) {.   |
000011d0  20 69 6e 74 65 6e 73 69  74 79 20 3d 20 32 35 36  | intensity = 256|
000011e0  20 2d 20 28 6c 6f 6f 70  20 2a 20 33 32 29 3b 0a  | - (loop * 32);.|
000011f0  20 20 20 20 6f 73 5f 76  64 75 71 28 31 39 2c 6c  |    os_vduq(19,l|
00001200  6f 6f 70 20 2b 20 32 2c  20 31 36 2c 20 69 6e 74  |oop + 2, 16, int|
00001210  65 6e 73 69 74 79 2c 20  69 6e 74 65 6e 73 69 74  |ensity, intensit|
00001220  79 2c 20 69 6e 74 65 6e  73 69 74 79 29 3b 0a 20  |y, intensity);. |
00001230  20 7d 0a 20 20 0a 20 20  66 6f 72 28 78 5f 6c 6f  | }.  .  for(x_lo|
00001240  6f 70 20 3d 20 30 3b 20  78 5f 6c 6f 6f 70 20 3c  |op = 0; x_loop <|
00001250  20 34 3b 20 78 5f 6c 6f  6f 70 2b 2b 29 0a 20 20  | 4; x_loop++).  |
00001260  7b 0a 20 20 20 20 66 6f  72 28 6c 6f 6f 70 20 3d  |{.    for(loop =|
00001270  20 30 3b 20 6c 6f 6f 70  20 3c 20 4e 4f 5f 53 54  | 0; loop < NO_ST|
00001280  41 52 53 3b 20 6c 6f 6f  70 2b 2b 29 0a 20 20 20  |ARS; loop++).   |
00001290  20 7b 0a 20 20 20 20 20  20 73 74 61 72 73 5b 6c  | {.      stars[l|
000012a0  6f 6f 70 5d 20 5b 78 5f  6c 6f 6f 70 5d 2e 78 20  |oop] [x_loop].x |
000012b0  3d 20 6f 73 5f 72 6e 64  28 31 32 38 30 29 20 2d  |= os_rnd(1280) -|
000012c0  20 36 34 30 3b 0a 20 20  20 20 20 20 73 74 61 72  | 640;.      star|
000012d0  73 5b 6c 6f 6f 70 5d 20  5b 78 5f 6c 6f 6f 70 5d  |s[loop] [x_loop]|
000012e0  2e 79 20 3d 20 6f 73 5f  72 6e 64 28 35 31 32 29  |.y = os_rnd(512)|
000012f0  3b 0a 20 20 20 20 7d 0a  20 20 7d 0a 7d 0a 0a 76  |;.    }.  }.}..v|
00001300  6f 69 64 20 67 65 6e 65  72 61 74 65 5f 6d 61 7a  |oid generate_maz|
00001310  65 28 69 6e 74 20 6c 65  76 65 6c 29 0a 7b 0a 20  |e(int level).{. |
00001320  20 69 6e 74 20 78 20 3d  20 31 2c 20 78 31 2c 20  | int x = 1, x1, |
00001330  79 20 3d 20 31 2c 20 79  31 2c 20 78 5f 6d 61 78  |y = 1, y1, x_max|
00001340  20 3d 20 32 2c 20 79 5f  6d 61 78 20 3d 20 32 2c  | = 2, y_max = 2,|
00001350  20 6f 6b 2c 20 6d 61 69  6e 5f 6c 6f 6f 70 2c 20  | ok, main_loop, |
00001360  73 65 74 5f 6c 6f 6f 70  3b 0a 20 20 69 6e 74 20  |set_loop;.  int |
00001370  78 5f 6c 6f 6f 70 2c 20  79 5f 6c 6f 6f 70 2c 20  |x_loop, y_loop, |
00001380  73 69 64 65 3b 0a 20 20  64 69 72 5f 76 61 6c 20  |side;.  dir_val |
00001390  64 69 72 3b 0a 20 20 0a  20 20 73 69 64 65 20 3d  |dir;.  .  side =|
000013a0  20 6c 65 76 65 6c 20 2a  20 4d 41 5a 45 5f 4d 55  | level * MAZE_MU|
000013b0  4c 54 3b 0a 20 20 0a 20  20 66 6f 72 28 79 5f 6c  |LT;.  .  for(y_l|
000013c0  6f 6f 70 20 3d 20 30 3b  20 79 5f 6c 6f 6f 70 20  |oop = 0; y_loop |
000013d0  3c 3d 20 73 69 64 65 3b  20 79 5f 6c 6f 6f 70 2b  |<= side; y_loop+|
000013e0  2b 29 20 7b 0a 20 20 20  20 66 6f 72 28 78 5f 6c  |+) {.    for(x_l|
000013f0  6f 6f 70 20 3d 20 30 3b  20 78 5f 6c 6f 6f 70 20  |oop = 0; x_loop |
00001400  3c 3d 20 73 69 64 65 3b  20 78 5f 6c 6f 6f 70 2b  |<= side; x_loop+|
00001410  2b 29 20 7b 0a 20 20 20  20 20 20 6d 61 7a 65 5f  |+) {.      maze_|
00001420  64 61 74 61 5b 78 5f 6c  6f 6f 70 5d 5b 79 5f 6c  |data[x_loop][y_l|
00001430  6f 6f 70 5d 20 3d 20 77  61 6c 6c 3b 0a 20 20 20  |oop] = wall;.   |
00001440  20 7d 0a 20 20 7d 20 0a  20 20 0a 20 20 6f 73 5f  | }.  } .  .  os_|
00001450  72 6e 64 28 2d 63 6c 6f  63 6b 28 29 29 3b 0a 20  |rnd(-clock());. |
00001460  20 0a 20 20 66 6f 72 28  6d 61 69 6e 5f 6c 6f 6f  | .  for(main_loo|
00001470  70 20 3d 20 30 3b 20 0a  20 20 20 20 20 20 6d 61  |p = 0; .      ma|
00001480  69 6e 5f 6c 6f 6f 70 20  3c 20 28 28 73 69 64 65  |in_loop < ((side|
00001490  20 2f 20 32 29 20 2a 20  28 73 69 64 65 20 2f 20  | / 2) * (side / |
000014a0  32 29 29 3b 20 0a 20 20  20 20 20 20 6d 61 69 6e  |2)); .      main|
000014b0  5f 6c 6f 6f 70 2b 2b 20  29 20 7b 20 20 20 20 0a  |_loop++ ) {    .|
000014c0  20 20 20 20 0a 20 20 6f  73 5f 74 61 62 28 30 2c  |    .  os_tab(0,|
000014d0  33 30 29 3b 0a 20 20 70  72 69 6e 74 66 28 22 50  |30);.  printf("P|
000014e0  6c 65 61 73 65 20 77 61  69 74 2c 20 67 65 6e 65  |lease wait, gene|
000014f0  72 61 74 69 6e 67 20 6d  61 7a 65 20 28 25 64 25  |rating maze (%d%|
00001500  25 20 64 6f 6e 65 29 22  2c 20 0a 20 20 20 20 20  |% done)", .     |
00001510  20 20 20 20 28 6d 61 69  6e 5f 6c 6f 6f 70 20 2a  |    (main_loop *|
00001520  20 31 30 30 29 20 2f 20  28 28 73 69 64 65 20 2f  | 100) / ((side /|
00001530  20 32 29 20 2a 20 28 73  69 64 65 20 2f 20 32 29  | 2) * (side / 2)|
00001540  29 29 3b 0a 20 20 20 20  0a 20 20 20 20 64 6f 20  |));.    .    do |
00001550  7b 0a 20 20 20 20 20 20  0a 20 20 20 20 20 20 6f  |{.      .      o|
00001560  6b 20 3d 20 54 52 55 45  3b 0a 20 20 20 20 20 20  |k = TRUE;.      |
00001570  0a 20 20 20 20 20 20 64  6f 20 7b 0a 20 20 20 20  |.      do {.    |
00001580  20 20 20 20 0a 20 20 20  20 20 20 20 20 64 69 72  |    .        dir|
00001590  20 3d 20 6f 73 5f 72 6e  64 28 34 29 3b 0a 20 20  | = os_rnd(4);.  |
000015a0  20 20 20 20 20 20 78 31  20 3d 20 78 20 2b 20 64  |      x1 = x + d|
000015b0  69 72 5f 78 28 64 69 72  29 3b 0a 20 20 20 20 20  |ir_x(dir);.     |
000015c0  20 20 20 79 31 20 3d 20  79 20 2b 20 64 69 72 5f  |   y1 = y + dir_|
000015d0  79 28 64 69 72 29 3b 0a  20 20 20 20 20 20 20 20  |y(dir);.        |
000015e0  0a 20 20 20 20 20 20 7d  20 77 68 69 6c 65 28 78  |.      } while(x|
000015f0  31 20 3c 3d 20 30 20 7c  7c 20 78 31 20 3e 20 28  |1 <= 0 || x1 > (|
00001600  73 69 64 65 20 2f 20 32  29 0a 20 20 20 20 20 20  |side / 2).      |
00001610  20 20 20 20 20 20 20 20  7c 7c 20 79 31 20 3c 3d  |        || y1 <=|
00001620  20 30 20 7c 7c 20 79 31  20 3e 20 28 73 69 64 65  | 0 || y1 > (side|
00001630  20 2f 20 32 29 29 3b 0a  20 20 20 20 20 20 0a 20  | / 2));.      . |
00001640  20 20 20 20 20 69 66 28  6d 61 7a 65 5f 64 61 74  |     if(maze_dat|
00001650  61 20 5b 28 78 31 20 2a  20 32 29 20 2d 20 31 5d  |a [(x1 * 2) - 1]|
00001660  20 5b 28 79 31 20 2a 20  32 29 20 2d 20 31 5d 20  | [(y1 * 2) - 1] |
00001670  21 3d 20 77 61 6c 6c 29  20 7b 0a 20 20 20 20 20  |!= wall) {.     |
00001680  20 20 20 0a 20 20 20 20  20 20 20 20 64 6f 20 7b  |   .        do {|
00001690  0a 20 20 20 20 20 20 20  20 20 20 0a 20 20 20 20  |.          .    |
000016a0  20 20 20 20 20 20 78 20  3d 20 6f 73 5f 72 6e 64  |      x = os_rnd|
000016b0  28 78 5f 6d 61 78 29 20  2b 20 31 3b 0a 20 20 20  |(x_max) + 1;.   |
000016c0  20 20 20 20 20 20 20 79  20 3d 20 6f 73 5f 72 6e  |       y = os_rn|
000016d0  64 28 79 5f 6d 61 78 29  20 2b 20 31 3b 0a 20 20  |d(y_max) + 1;.  |
000016e0  20 20 20 20 20 20 20 20  0a 20 20 20 20 20 20 20  |        .       |
000016f0  20 20 20 6f 6b 20 3d 20  46 41 4c 53 45 3b 0a 20  |   ok = FALSE;. |
00001700  20 20 20 20 20 20 20 20  20 0a 20 20 20 20 20 20  |         .      |
00001710  20 20 7d 20 77 68 69 6c  65 28 6d 61 7a 65 5f 64  |  } while(maze_d|
00001720  61 74 61 20 5b 28 78 20  2a 20 32 29 20 2d 20 31  |ata [(x * 2) - 1|
00001730  5d 20 5b 28 79 20 2a 20  32 29 20 2d 20 31 5d 20  |] [(y * 2) - 1] |
00001740  3d 3d 20 77 61 6c 6c 29  3b 0a 20 20 20 20 20 20  |== wall);.      |
00001750  7d 0a 20 20 20 20 20 20  0a 20 20 20 20 7d 20 77  |}.      .    } w|
00001760  68 69 6c 65 28 6f 6b 20  3d 3d 20 46 41 4c 53 45  |hile(ok == FALSE|
00001770  29 3b 0a 20 20 20 20 0a  20 20 20 20 66 6f 72 28  |);.    .    for(|
00001780  73 65 74 5f 6c 6f 6f 70  20 3d 20 31 3b 20 73 65  |set_loop = 1; se|
00001790  74 5f 6c 6f 6f 70 20 3c  3d 20 32 3b 20 73 65 74  |t_loop <= 2; set|
000017a0  5f 6c 6f 6f 70 2b 2b 20  29 20 7b 0a 20 20 20 20  |_loop++ ) {.    |
000017b0  20 20 6d 61 7a 65 5f 64  61 74 61 20 5b 28 78 20  |  maze_data [(x |
000017c0  2a 20 32 20 2b 20 73 65  74 5f 6c 6f 6f 70 20 2a  |* 2 + set_loop *|
000017d0  20 64 69 72 5f 78 28 64  69 72 29 29 20 2d 20 31  | dir_x(dir)) - 1|
000017e0  5d 20 0a 20 20 20 20 20  20 20 20 20 20 20 20 20  |] .             |
000017f0  20 20 20 5b 28 79 20 2a  20 32 20 2b 20 73 65 74  |   [(y * 2 + set|
00001800  5f 6c 6f 6f 70 20 2a 20  64 69 72 5f 79 28 64 69  |_loop * dir_y(di|
00001810  72 29 29 20 2d 20 31 5d  20 3d 20 63 6f 72 72 69  |r)) - 1] = corri|
00001820  64 6f 72 3b 20 20 20 20  20 20 20 20 20 20 0a 20  |dor;          . |
00001830  20 20 20 7d 0a 20 20 20  20 0a 20 20 20 20 78 20  |   }.    .    x |
00001840  3d 20 78 31 3b 0a 20 20  20 20 79 20 3d 20 79 31  |= x1;.    y = y1|
00001850  3b 0a 20 20 20 20 0a 20  20 20 20 69 66 28 78 20  |;.    .    if(x |
00001860  3e 20 78 5f 6d 61 78 29  20 78 5f 6d 61 78 20 3d  |> x_max) x_max =|
00001870  20 78 3b 0a 20 20 20 20  69 66 28 79 20 3e 20 79  | x;.    if(y > y|
00001880  5f 6d 61 78 29 20 79 5f  6d 61 78 20 3d 20 79 3b  |_max) y_max = y;|
00001890  0a 20 20 7d 0a 20 20 0a  20 20 66 6f 72 28 73 65  |.  }.  .  for(se|
000018a0  74 5f 6c 6f 6f 70 20 3d  20 30 3b 20 73 65 74 5f  |t_loop = 0; set_|
000018b0  6c 6f 6f 70 20 3c 3d 20  6f 73 5f 72 6e 64 28 31  |loop <= os_rnd(1|
000018c0  30 29 20 2b 20 28 6c 65  76 65 6c 20 2a 20 32 29  |0) + (level * 2)|
000018d0  3b 20 73 65 74 5f 6c 6f  6f 70 20 2b 2b 29 20 7b  |; set_loop ++) {|
000018e0  0a 20 20 20 20 64 6f 20  7b 0a 20 20 20 20 0a 20  |.    do {.    . |
000018f0  20 20 20 20 20 78 20 3d  20 6f 73 5f 72 6e 64 28  |     x = os_rnd(|
00001900  4d 41 5a 45 5f 4d 55 4c  54 20 2a 20 6c 65 76 65  |MAZE_MULT * leve|
00001910  6c 29 3b 0a 20 20 20 20  20 20 79 20 3d 20 6f 73  |l);.      y = os|
00001920  5f 72 6e 64 28 4d 41 5a  45 5f 4d 55 4c 54 20 2a  |_rnd(MAZE_MULT *|
00001930  20 6c 65 76 65 6c 29 3b  0a 20 20 20 20 0a 20 20  | level);.    .  |
00001940  20 20 7d 20 77 68 69 6c  65 28 6d 61 7a 65 5f 64  |  } while(maze_d|
00001950  61 74 61 5b 78 5d 20 5b  79 5d 20 21 3d 20 63 6f  |ata[x] [y] != co|
00001960  72 72 69 64 6f 72 29 3b  0a 20 20 20 20 6d 61 7a  |rridor);.    maz|
00001970  65 5f 64 61 74 61 5b 78  5d 20 5b 79 5d 20 3d 20  |e_data[x] [y] = |
00001980  62 6f 78 3b 0a 20 20 7d  0a 20 20 0a 20 20 64 6f  |box;.  }.  .  do|
00001990  20 7b 0a 20 20 20 20 0a  20 20 20 20 78 20 3d 20  | {.    .    x = |
000019a0  6f 73 5f 72 6e 64 28 4d  41 5a 45 5f 4d 55 4c 54  |os_rnd(MAZE_MULT|
000019b0  20 2a 20 6c 65 76 65 6c  29 3b 0a 20 20 20 20 79  | * level);.    y|
000019c0  20 3d 20 6f 73 5f 72 6e  64 28 4d 41 5a 45 5f 4d  | = os_rnd(MAZE_M|
000019d0  55 4c 54 20 2a 20 6c 65  76 65 6c 29 3b 0a 20 20  |ULT * level);.  |
000019e0  20 20 0a 20 20 7d 20 77  68 69 6c 65 28 6d 61 7a  |  .  } while(maz|
000019f0  65 5f 64 61 74 61 5b 78  5d 20 5b 79 5d 20 21 3d  |e_data[x] [y] !=|
00001a00  20 63 6f 72 72 69 64 6f  72 29 3b 0a 20 20 20 20  | corridor);.    |
00001a10  6d 61 7a 65 5f 64 61 74  61 5b 78 5d 20 5b 79 5d  |maze_data[x] [y]|
00001a20  20 3d 20 64 6f 6f 72 3b  0a 20 20 20 20 0a 20 20  | = door;.    .  |
00001a30  66 6f 72 28 73 65 74 5f  6c 6f 6f 70 20 3d 20 30  |for(set_loop = 0|
00001a40  3b 20 73 65 74 5f 6c 6f  6f 70 20 3c 20 6c 65 76  |; set_loop < lev|
00001a50  65 6c 3b 20 73 65 74 5f  6c 6f 6f 70 2b 2b 29 20  |el; set_loop++) |
00001a60  7b 0a 20 20 20 20 64 6f  20 7b 0a 20 20 20 20 0a  |{.    do {.    .|
00001a70  20 20 20 20 20 20 78 20  3d 20 6f 73 5f 72 6e 64  |      x = os_rnd|
00001a80  28 4d 41 5a 45 5f 4d 55  4c 54 20 2a 20 6c 65 76  |(MAZE_MULT * lev|
00001a90  65 6c 29 3b 0a 20 20 20  20 20 20 79 20 3d 20 6f  |el);.      y = o|
00001aa0  73 5f 72 6e 64 28 4d 41  5a 45 5f 4d 55 4c 54 20  |s_rnd(MAZE_MULT |
00001ab0  2a 20 6c 65 76 65 6c 29  3b 0a 20 20 20 20 0a 20  |* level);.    . |
00001ac0  20 20 20 7d 20 77 68 69  6c 65 28 6d 61 7a 65 5f  |   } while(maze_|
00001ad0  64 61 74 61 5b 78 5d 20  5b 79 5d 20 21 3d 20 63  |data[x] [y] != c|
00001ae0  6f 72 72 69 64 6f 72 29  3b 0a 20 20 20 20 6d 61  |orridor);.    ma|
00001af0  7a 65 5f 64 61 74 61 5b  78 5d 20 5b 79 5d 20 3d  |ze_data[x] [y] =|
00001b00  20 6b 65 79 3b 0a 20 20  7d 0a 7d 0a 0a 69 6e 74  | key;.  }.}..int|
00001b10  20 64 69 72 5f 78 28 64  69 72 5f 76 61 6c 20 64  | dir_x(dir_val d|
00001b20  69 72 29 0a 7b 0a 20 20  73 77 69 74 63 68 28 64  |ir).{.  switch(d|
00001b30  69 72 29 20 7b 0a 20 20  20 20 0a 20 20 20 20 63  |ir) {.    .    c|
00001b40  61 73 65 20 6c 65 66 74  3a 0a 20 20 20 20 72 65  |ase left:.    re|
00001b50  74 75 72 6e 28 2d 31 29  3b 0a 20 20 20 20 62 72  |turn(-1);.    br|
00001b60  65 61 6b 3b 0a 20 20 20  20 0a 20 20 20 20 63 61  |eak;.    .    ca|
00001b70  73 65 20 72 69 67 68 74  3a 0a 20 20 20 20 72 65  |se right:.    re|
00001b80  74 75 72 6e 28 31 29 3b  0a 20 20 20 20 62 72 65  |turn(1);.    bre|
00001b90  61 6b 3b 0a 20 20 20 20  0a 20 20 20 20 64 65 66  |ak;.    .    def|
00001ba0  61 75 6c 74 3a 0a 20 20  20 20 72 65 74 75 72 6e  |ault:.    return|
00001bb0  28 30 29 3b 0a 20 20 20  20 62 72 65 61 6b 3b 0a  |(0);.    break;.|
00001bc0  20 20 7d 0a 7d 0a 0a 69  6e 74 20 64 69 72 5f 79  |  }.}..int dir_y|
00001bd0  28 64 69 72 5f 76 61 6c  20 64 69 72 29 0a 7b 0a  |(dir_val dir).{.|
00001be0  20 20 73 77 69 74 63 68  28 64 69 72 29 20 7b 0a  |  switch(dir) {.|
00001bf0  20 20 20 20 0a 20 20 20  20 63 61 73 65 20 75 70  |    .    case up|
00001c00  3a 0a 20 20 20 20 72 65  74 75 72 6e 28 2d 31 29  |:.    return(-1)|
00001c10  3b 0a 20 20 20 20 62 72  65 61 6b 3b 0a 20 20 20  |;.    break;.   |
00001c20  20 0a 20 20 20 20 63 61  73 65 20 64 6f 77 6e 3a  | .    case down:|
00001c30  0a 20 20 20 20 72 65 74  75 72 6e 28 31 29 3b 0a  |.    return(1);.|
00001c40  20 20 20 20 62 72 65 61  6b 3b 0a 20 20 20 20 0a  |    break;.    .|
00001c50  20 20 20 20 64 65 66 61  75 6c 74 3a 0a 20 20 20  |    default:.   |
00001c60  20 72 65 74 75 72 6e 28  30 29 3b 0a 20 20 20 20  | return(0);.    |
00001c70  62 72 65 61 6b 3b 0a 20  20 7d 0a 7d 0a 0a 76 6f  |break;.  }.}..vo|
00001c80  69 64 20 70 6c 6f 74 5f  71 75 61 64 28 69 6e 74  |id plot_quad(int|
00001c90  20 78 2c 20 69 6e 74 20  79 2c 20 69 6e 74 20 78  | x, int y, int x|
00001ca0  31 2c 20 69 6e 74 20 79  31 2c 20 69 6e 74 20 78  |1, int y1, int x|
00001cb0  32 2c 20 69 6e 74 20 79  32 2c 20 0a 20 20 20 20  |2, int y2, .    |
00001cc0  20 20 20 20 20 20 20 20  20 20 20 69 6e 74 20 78  |           int x|
00001cd0  33 2c 20 69 6e 74 20 79  33 2c 20 69 6e 74 20 63  |3, int y3, int c|
00001ce0  6f 6c 29 0a 7b 20 20 0a  20 20 6f 73 5f 67 63 6f  |ol).{  .  os_gco|
00001cf0  6c 28 30 2c 20 63 6f 6c  29 3b 0a 20 20 0a 20 20  |l(0, col);.  .  |
00001d00  6f 73 5f 6d 6f 76 65 28  78 2c 20 79 29 3b 0a 20  |os_move(x, y);. |
00001d10  20 6f 73 5f 6d 6f 76 65  28 78 31 2c 20 79 31 29  | os_move(x1, y1)|
00001d20  3b 0a 20 20 6f 73 5f 70  6c 6f 74 28 38 35 2c 20  |;.  os_plot(85, |
00001d30  78 32 2c 20 79 32 29 3b  0a 20 20 0a 20 20 6f 73  |x2, y2);.  .  os|
00001d40  5f 6d 6f 76 65 28 78 31  2c 20 79 31 29 3b 0a 20  |_move(x1, y1);. |
00001d50  20 6f 73 5f 6d 6f 76 65  28 78 32 2c 20 79 32 29  | os_move(x2, y2)|
00001d60  3b 0a 20 20 6f 73 5f 70  6c 6f 74 28 38 35 2c 20  |;.  os_plot(85, |
00001d70  78 33 2c 20 79 33 29 3b  0a 7d 0a 20 20 20 20 20  |x3, y3);.}.     |
00001d80  20 0a 76 6f 69 64 20 73  65 74 5f 6f 72 69 67 69  | .void set_origi|
00001d90  6e 28 76 6f 69 64 29 0a  7b 0a 20 20 6f 73 5f 76  |n(void).{.  os_v|
00001da0  64 75 28 32 39 29 3b 0a  20 20 6f 73 5f 76 64 75  |du(29);.  os_vdu|
00001db0  77 28 36 34 30 29 3b 0a  20 20 6f 73 5f 76 64 75  |w(640);.  os_vdu|
00001dc0  77 28 35 31 32 29 3b 0a  7d 20 20 20 20 0a 20 20  |w(512);.}    .  |
00001dd0  0a 76 6f 69 64 20 72 69  67 68 74 5f 77 61 6c 6c  |.void right_wall|
00001de0  28 69 6e 74 20 64 65 70  74 68 29 0a 7b 0a 20 20  |(int depth).{.  |
00001df0  69 6e 74 20 64 65 70 74  68 5f 63 31 2c 20 64 65  |int depth_c1, de|
00001e00  70 74 68 5f 63 32 3b 0a  20 20 0a 20 20 64 65 70  |pth_c2;.  .  dep|
00001e10  74 68 5f 63 31 20 3d 20  28 69 6e 74 29 20 70 6f  |th_c1 = (int) po|
00001e20  77 28 32 2c 20 64 65 70  74 68 29 3b 0a 20 20 64  |w(2, depth);.  d|
00001e30  65 70 74 68 5f 63 32 20  3d 20 28 69 6e 74 29 20  |epth_c2 = (int) |
00001e40  70 6f 77 28 32 2c 20 64  65 70 74 68 20 2d 20 31  |pow(2, depth - 1|
00001e50  29 3b 0a 20 20 0a 20 20  70 6c 6f 74 5f 71 75 61  |);.  .  plot_qua|
00001e60  64 28 36 34 30 20 2f 20  64 65 70 74 68 5f 63 31  |d(640 / depth_c1|
00001e70  2c 20 35 31 32 20 2f 20  64 65 70 74 68 5f 63 31  |, 512 / depth_c1|
00001e80  2c 0a 20 20 20 20 20 20  20 20 20 20 20 20 36 34  |,.            64|
00001e90  30 20 2f 20 64 65 70 74  68 5f 63 32 2c 20 35 31  |0 / depth_c2, 51|
00001ea0  32 20 2f 20 64 65 70 74  68 5f 63 32 2c 0a 20 20  |2 / depth_c2,.  |
00001eb0  20 20 20 20 20 20 20 20  20 20 36 34 30 20 2f 20  |          640 / |
00001ec0  64 65 70 74 68 5f 63 31  2c 20 2d 28 35 31 32 20  |depth_c1, -(512 |
00001ed0  2f 20 64 65 70 74 68 5f  63 31 29 2c 0a 20 20 20  |/ depth_c1),.   |
00001ee0  20 20 20 20 20 20 20 20  20 36 34 30 20 2f 20 64  |         640 / d|
00001ef0  65 70 74 68 5f 63 32 2c  20 2d 28 35 31 32 20 2f  |epth_c2, -(512 /|
00001f00  20 64 65 70 74 68 5f 63  32 29 2c 0a 20 20 20 20  | depth_c2),.    |
00001f10  20 20 20 20 20 20 20 20  64 65 70 74 68 20 2b 20  |        depth + |
00001f20  37 29 3b 0a 7d 20 20 0a  0a 76 6f 69 64 20 6c 65  |7);.}  ..void le|
00001f30  66 74 5f 77 61 6c 6c 28  69 6e 74 20 64 65 70 74  |ft_wall(int dept|
00001f40  68 29 0a 7b 0a 20 20 69  6e 74 20 64 65 70 74 68  |h).{.  int depth|
00001f50  5f 63 31 2c 20 64 65 70  74 68 5f 63 32 3b 0a 20  |_c1, depth_c2;. |
00001f60  20 0a 20 20 64 65 70 74  68 5f 63 31 20 3d 20 28  | .  depth_c1 = (|
00001f70  69 6e 74 29 20 70 6f 77  28 32 2c 20 64 65 70 74  |int) pow(2, dept|
00001f80  68 29 3b 0a 20 20 64 65  70 74 68 5f 63 32 20 3d  |h);.  depth_c2 =|
00001f90  20 28 69 6e 74 29 20 70  6f 77 28 32 2c 20 64 65  | (int) pow(2, de|
00001fa0  70 74 68 20 2d 20 31 29  3b 0a 20 20 0a 20 20 70  |pth - 1);.  .  p|
00001fb0  6c 6f 74 5f 71 75 61 64  28 2d 28 36 34 30 20 2f  |lot_quad(-(640 /|
00001fc0  20 64 65 70 74 68 5f 63  31 29 2c 20 35 31 32 20  | depth_c1), 512 |
00001fd0  2f 20 64 65 70 74 68 5f  63 31 2c 0a 20 20 20 20  |/ depth_c1,.    |
00001fe0  20 20 20 20 20 20 20 20  2d 28 36 34 30 20 2f 20  |        -(640 / |
00001ff0  64 65 70 74 68 5f 63 32  29 2c 20 35 31 32 20 2f  |depth_c2), 512 /|
00002000  20 64 65 70 74 68 5f 63  32 2c 0a 20 20 20 20 20  | depth_c2,.     |
00002010  20 20 20 20 20 20 20 2d  28 36 34 30 20 2f 20 64  |       -(640 / d|
00002020  65 70 74 68 5f 63 31 29  2c 20 2d 28 35 31 32 20  |epth_c1), -(512 |
00002030  2f 20 64 65 70 74 68 5f  63 31 29 2c 0a 20 20 20  |/ depth_c1),.   |
00002040  20 20 20 20 20 20 20 20  20 2d 28 36 34 30 20 2f  |         -(640 /|
00002050  20 64 65 70 74 68 5f 63  32 29 2c 20 2d 28 35 31  | depth_c2), -(51|
00002060  32 20 2f 20 64 65 70 74  68 5f 63 32 29 2c 0a 20  |2 / depth_c2),. |
00002070  20 20 20 20 20 20 20 20  20 20 20 64 65 70 74 68  |           depth|
00002080  20 2b 20 37 29 3b 0a 7d  0a 0a 76 6f 69 64 20 72  | + 7);.}..void r|
00002090  69 67 68 74 5f 65 78 69  74 28 69 6e 74 20 64 65  |ight_exit(int de|
000020a0  70 74 68 29 0a 7b 0a 20  20 69 6e 74 20 64 65 70  |pth).{.  int dep|
000020b0  74 68 5f 63 31 2c 20 64  65 70 74 68 5f 63 32 3b  |th_c1, depth_c2;|
000020c0  0a 20 20 0a 20 20 64 65  70 74 68 5f 63 31 20 3d  |.  .  depth_c1 =|
000020d0  20 28 69 6e 74 29 20 70  6f 77 28 32 2c 20 64 65  | (int) pow(2, de|
000020e0  70 74 68 29 3b 0a 20 20  64 65 70 74 68 5f 63 32  |pth);.  depth_c2|
000020f0  20 3d 20 28 69 6e 74 29  20 70 6f 77 28 32 2c 20  | = (int) pow(2, |
00002100  64 65 70 74 68 20 2d 20  31 29 3b 0a 20 20 0a 20  |depth - 1);.  . |
00002110  20 6f 73 5f 67 63 6f 6c  28 30 2c 20 64 65 70 74  | os_gcol(0, dept|
00002120  68 20 2b 20 37 29 3b 0a  20 20 0a 20 20 6f 73 5f  |h + 7);.  .  os_|
00002130  72 65 63 74 61 6e 67 6c  65 66 69 6c 6c 28 36 34  |rectanglefill(64|
00002140  30 20 2f 20 64 65 70 74  68 5f 63 31 2c 0a 20 20  |0 / depth_c1,.  |
00002150  09 20 20 20 20 20 20 20  20 20 20 20 35 31 32 20  |.           512 |
00002160  2f 20 64 65 70 74 68 5f  63 31 2c 0a 20 20 09 20  |/ depth_c1,.  . |
00002170  20 20 20 20 20 20 20 20  20 20 36 34 30 20 2f 20  |          640 / |
00002180  64 65 70 74 68 5f 63 31  2c 0a 20 20 09 20 20 20  |depth_c1,.  .   |
00002190  20 20 20 20 20 20 20 20  2d 28 35 31 32 20 2f 20  |        -(512 / |
000021a0  64 65 70 74 68 5f 63 32  29 29 3b 0a 7d 0a 0a 76  |depth_c2));.}..v|
000021b0  6f 69 64 20 6c 65 66 74  5f 65 78 69 74 28 69 6e  |oid left_exit(in|
000021c0  74 20 64 65 70 74 68 29  0a 7b 0a 20 20 69 6e 74  |t depth).{.  int|
000021d0  20 64 65 70 74 68 5f 63  31 2c 20 64 65 70 74 68  | depth_c1, depth|
000021e0  5f 63 32 3b 0a 20 20 0a  20 20 64 65 70 74 68 5f  |_c2;.  .  depth_|
000021f0  63 31 20 3d 20 28 69 6e  74 29 20 70 6f 77 28 32  |c1 = (int) pow(2|
00002200  2c 20 64 65 70 74 68 29  3b 0a 20 20 64 65 70 74  |, depth);.  dept|
00002210  68 5f 63 32 20 3d 20 28  69 6e 74 29 20 70 6f 77  |h_c2 = (int) pow|
00002220  28 32 2c 20 64 65 70 74  68 20 2d 20 31 29 3b 0a  |(2, depth - 1);.|
00002230  20 20 0a 20 20 6f 73 5f  67 63 6f 6c 28 30 2c 20  |  .  os_gcol(0, |
00002240  64 65 70 74 68 20 2b 20  37 29 3b 0a 20 20 0a 20  |depth + 7);.  . |
00002250  20 6f 73 5f 72 65 63 74  61 6e 67 6c 65 66 69 6c  | os_rectanglefil|
00002260  6c 28 2d 28 36 34 30 20  2f 20 64 65 70 74 68 5f  |l(-(640 / depth_|
00002270  63 31 29 2c 0a 20 20 09  20 20 20 20 20 20 20 20  |c1),.  .        |
00002280  20 20 20 35 31 32 20 2f  20 64 65 70 74 68 5f 63  |   512 / depth_c|
00002290  31 2c 0a 20 20 09 20 20  20 20 20 20 20 20 20 20  |1,.  .          |
000022a0  20 2d 28 36 34 30 20 2f  20 64 65 70 74 68 5f 63  | -(640 / depth_c|
000022b0  31 29 2c 0a 20 20 09 20  20 20 20 20 20 20 20 20  |1),.  .         |
000022c0  20 20 2d 28 35 31 32 20  2f 20 64 65 70 74 68 5f  |  -(512 / depth_|
000022d0  63 32 29 29 3b 0a 7d 0a  0a 76 6f 69 64 20 65 6e  |c2));.}..void en|
000022e0  64 5f 77 61 6c 6c 28 69  6e 74 20 64 65 70 74 68  |d_wall(int depth|
000022f0  29 0a 7b 0a 20 20 69 6e  74 20 64 65 70 74 68 5f  |).{.  int depth_|
00002300  63 31 2c 20 64 65 70 74  68 5f 63 32 3b 0a 20 20  |c1, depth_c2;.  |
00002310  0a 20 20 64 65 70 74 68  5f 63 31 20 3d 20 28 69  |.  depth_c1 = (i|
00002320  6e 74 29 20 70 6f 77 28  32 2c 20 64 65 70 74 68  |nt) pow(2, depth|
00002330  29 3b 0a 20 20 64 65 70  74 68 5f 63 32 20 3d 20  |);.  depth_c2 = |
00002340  28 69 6e 74 29 20 70 6f  77 28 32 2c 20 64 65 70  |(int) pow(2, dep|
00002350  74 68 20 2d 20 31 29 3b  0a 20 20 0a 20 20 6f 73  |th - 1);.  .  os|
00002360  5f 67 63 6f 6c 28 30 2c  20 64 65 70 74 68 20 2b  |_gcol(0, depth +|
00002370  20 38 29 3b 0a 20 20 0a  20 20 6f 73 5f 72 65 63  | 8);.  .  os_rec|
00002380  74 61 6e 67 6c 65 66 69  6c 6c 28 2d 28 36 34 30  |tanglefill(-(640|
00002390  20 2f 20 64 65 70 74 68  5f 63 31 29 2c 0a 20 20  | / depth_c1),.  |
000023a0  09 20 20 20 20 20 20 20  20 20 20 20 35 31 32 20  |.           512 |
000023b0  2f 20 64 65 70 74 68 5f  63 31 2c 0a 20 20 09 20  |/ depth_c1,.  . |
000023c0  20 20 20 20 20 20 20 20  20 20 28 36 34 30 20 2f  |          (640 /|
000023d0  20 64 65 70 74 68 5f 63  31 29 20 2a 20 32 2c 0a  | depth_c1) * 2,.|
000023e0  20 20 09 20 20 20 20 20  20 20 20 20 20 20 2d 28  |  .           -(|
000023f0  35 31 32 20 2f 20 64 65  70 74 68 5f 63 32 29 29  |512 / depth_c2))|
00002400  3b 0a 7d 0a 0a 76 6f 69  64 20 74 72 65 61 73 75  |;.}..void treasu|
00002410  72 65 5f 62 6f 78 28 69  6e 74 20 64 65 70 74 68  |re_box(int depth|
00002420  29 0a 7b 0a 20 20 69 6e  74 20 64 65 70 74 68 5f  |).{.  int depth_|
00002430  63 31 2c 20 64 65 70 74  68 5f 63 32 3b 0a 20 20  |c1, depth_c2;.  |
00002440  0a 20 20 64 65 70 74 68  5f 63 31 20 3d 20 28 69  |.  depth_c1 = (i|
00002450  6e 74 29 20 70 6f 77 28  32 2c 20 64 65 70 74 68  |nt) pow(2, depth|
00002460  29 3b 0a 20 20 64 65 70  74 68 5f 63 32 20 3d 20  |);.  depth_c2 = |
00002470  28 69 6e 74 29 20 70 6f  77 28 32 2c 20 64 65 70  |(int) pow(2, dep|
00002480  74 68 20 2d 20 31 29 3b  0a 20 20 0a 20 20 6f 73  |th - 1);.  .  os|
00002490  5f 67 63 6f 6c 28 30 2c  20 64 65 70 74 68 20 2b  |_gcol(0, depth +|
000024a0  20 37 29 3b 0a 20 20 0a  20 20 6f 73 5f 72 65 63  | 7);.  .  os_rec|
000024b0  74 61 6e 67 6c 65 66 69  6c 6c 28 2d 32 38 38 20  |tanglefill(-288 |
000024c0  2f 20 64 65 70 74 68 5f  63 32 2c 20 2d 35 31 32  |/ depth_c2, -512|
000024d0  20 2f 20 64 65 70 74 68  5f 63 32 2c 0a 20 20 20  | / depth_c2,.   |
000024e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000024f0  35 37 36 20 2f 20 64 65  70 74 68 5f 63 32 2c 20  |576 / depth_c2, |
00002500  31 32 38 20 2f 20 64 65  70 74 68 5f 63 32 29 3b  |128 / depth_c2);|
00002510  0a 20 20 09 20 20 20 20  20 20 20 20 20 20 20 0a  |.  .           .|
00002520  20 20 70 6c 6f 74 5f 71  75 61 64 28 2d 32 38 38  |  plot_quad(-288|
00002530  20 2f 20 64 65 70 74 68  5f 63 31 2c 20 2d 35 31  | / depth_c1, -51|
00002540  32 20 2f 20 64 65 70 74  68 5f 63 31 2c 0a 20 20  |2 / depth_c1,.  |
00002550  09 20 20 20 20 32 38 38  20 2f 20 64 65 70 74 68  |.    288 / depth|
00002560  5f 63 31 2c 20 2d 35 31  32 20 2f 20 64 65 70 74  |_c1, -512 / dept|
00002570  68 5f 63 31 2c 0a 20 20  09 20 20 20 20 2d 32 38  |h_c1,.  .    -28|
00002580  38 20 2f 20 64 65 70 74  68 5f 63 32 2c 20 2d 33  |8 / depth_c2, -3|
00002590  38 34 20 2f 20 64 65 70  74 68 5f 63 32 2c 0a 20  |84 / depth_c2,. |
000025a0  20 09 20 20 20 20 32 38  38 20 2f 20 64 65 70 74  | .    288 / dept|
000025b0  68 5f 63 32 2c 20 2d 33  38 34 20 2f 20 64 65 70  |h_c2, -384 / dep|
000025c0  74 68 5f 63 32 2c 0a 20  20 09 20 20 20 20 64 65  |th_c2,.  .    de|
000025d0  70 74 68 20 2b 20 38 29  3b 0a 7d 0a 0a 76 6f 69  |pth + 8);.}..voi|
000025e0  64 20 74 72 61 70 64 6f  6f 72 28 69 6e 74 20 64  |d trapdoor(int d|
000025f0  65 70 74 68 29 0a 7b 0a  20 20 69 6e 74 20 64 65  |epth).{.  int de|
00002600  70 74 68 5f 63 31 2c 20  64 65 70 74 68 5f 63 32  |pth_c1, depth_c2|
00002610  3b 0a 20 20 0a 20 20 64  65 70 74 68 5f 63 31 20  |;.  .  depth_c1 |
00002620  3d 20 28 69 6e 74 29 20  70 6f 77 28 32 2c 20 64  |= (int) pow(2, d|
00002630  65 70 74 68 29 3b 0a 20  20 64 65 70 74 68 5f 63  |epth);.  depth_c|
00002640  32 20 3d 20 28 69 6e 74  29 20 70 6f 77 28 32 2c  |2 = (int) pow(2,|
00002650  20 64 65 70 74 68 20 2d  20 31 29 3b 0a 20 20 20  | depth - 1);.   |
00002660  20 0a 20 20 70 6c 6f 74  5f 71 75 61 64 28 2d 36  | .  plot_quad(-6|
00002670  34 30 20 2f 20 64 65 70  74 68 5f 63 31 2c 20 2d  |40 / depth_c1, -|
00002680  35 31 32 20 2f 20 64 65  70 74 68 5f 63 31 2c 0a  |512 / depth_c1,.|
00002690  20 20 20 20 20 20 20 20  20 20 20 20 20 36 34 30  |             640|
000026a0  20 2f 20 64 65 70 74 68  5f 63 31 2c 20 2d 35 31  | / depth_c1, -51|
000026b0  32 20 2f 20 64 65 70 74  68 5f 63 31 2c 0a 20 20  |2 / depth_c1,.  |
000026c0  20 20 20 20 20 20 20 20  20 20 2d 36 34 30 20 2f  |          -640 /|
000026d0  20 64 65 70 74 68 5f 63  32 2c 20 2d 35 31 32 20  | depth_c2, -512 |
000026e0  2f 20 64 65 70 74 68 5f  63 32 2c 0a 20 20 20 20  |/ depth_c2,.    |
000026f0  20 20 20 20 20 20 20 20  20 36 34 30 20 2f 20 64  |         640 / d|
00002700  65 70 74 68 5f 63 32 2c  20 2d 35 31 32 20 2f 20  |epth_c2, -512 / |
00002710  64 65 70 74 68 5f 63 32  2c 0a 20 20 20 20 20 20  |depth_c2,.      |
00002720  20 20 20 20 20 20 20 30  29 3b 0a 7d 0a 20 20 0a  |       0);.}.  .|
00002730  76 6f 69 64 20 70 6c 6f  74 5f 76 69 65 77 28 69  |void plot_view(i|
00002740  6e 74 20 78 2c 20 69 6e  74 20 79 2c 20 64 69 72  |nt x, int y, dir|
00002750  5f 76 61 6c 20 64 69 72  29 0a 7b 0a 20 20 69 6e  |_val dir).{.  in|
00002760  74 20 64 65 70 74 68 20  3d 20 31 2c 20 65 6e 64  |t depth = 1, end|
00002770  20 3d 20 46 41 4c 53 45  3b 0a 20 20 0a 20 20 70  | = FALSE;.  .  p|
00002780  6c 6f 74 5f 73 74 61 72  73 63 61 70 65 28 29 3b  |lot_starscape();|
00002790  0a 20 20 70 6c 6f 74 5f  66 6c 6f 6f 72 28 29 3b  |.  plot_floor();|
000027a0  0a 20 20 0a 20 20 77 68  69 6c 65 28 64 65 70 74  |.  .  while(dept|
000027b0  68 20 3c 20 39 20 26 26  20 65 6e 64 20 3d 3d 20  |h < 9 && end == |
000027c0  46 41 4c 53 45 29 20 7b  0a 20 20 20 20 0a 20 20  |FALSE) {.    .  |
000027d0  20 20 73 77 69 74 63 68  28 64 69 72 29 20 7b 0a  |  switch(dir) {.|
000027e0  20 20 20 20 20 20 0a 20  20 20 20 20 20 63 61 73  |      .      cas|
000027f0  65 20 75 70 3a 0a 20 20  20 20 20 20 69 66 28 6d  |e up:.      if(m|
00002800  61 7a 65 5f 64 61 74 61  20 5b 78 20 2d 20 31 5d  |aze_data [x - 1]|
00002810  20 5b 79 20 2d 20 28 64  65 70 74 68 20 2d 20 31  | [y - (depth - 1|
00002820  29 5d 20 3d 3d 20 77 61  6c 6c 29 20 7b 0a 20 20  |)] == wall) {.  |
00002830  20 20 20 20 20 20 6c 65  66 74 5f 77 61 6c 6c 28  |      left_wall(|
00002840  64 65 70 74 68 29 3b 0a  20 20 20 20 20 20 7d 0a  |depth);.      }.|
00002850  20 20 20 20 20 20 65 6c  73 65 20 7b 0a 20 20 20  |      else {.   |
00002860  20 20 20 20 20 6c 65 66  74 5f 65 78 69 74 28 64  |     left_exit(d|
00002870  65 70 74 68 29 3b 0a 20  20 20 20 20 20 7d 0a 20  |epth);.      }. |
00002880  20 20 20 20 20 0a 20 20  20 20 20 20 69 66 28 6d  |     .      if(m|
00002890  61 7a 65 5f 64 61 74 61  20 5b 78 20 2b 20 31 5d  |aze_data [x + 1]|
000028a0  20 5b 79 20 2d 20 28 64  65 70 74 68 20 2d 20 31  | [y - (depth - 1|
000028b0  29 5d 20 3d 3d 20 77 61  6c 6c 29 20 7b 0a 20 20  |)] == wall) {.  |
000028c0  20 20 20 20 20 20 72 69  67 68 74 5f 77 61 6c 6c  |      right_wall|
000028d0  28 64 65 70 74 68 29 3b  0a 20 20 20 20 20 20 7d  |(depth);.      }|
000028e0  0a 20 20 20 20 20 20 65  6c 73 65 20 7b 0a 20 20  |.      else {.  |
000028f0  20 20 20 20 20 20 72 69  67 68 74 5f 65 78 69 74  |      right_exit|
00002900  28 64 65 70 74 68 29 3b  0a 20 20 20 20 20 20 7d  |(depth);.      }|
00002910  0a 20 20 20 20 20 20 0a  20 20 20 20 20 20 69 66  |.      .      if|
00002920  28 6d 61 7a 65 5f 64 61  74 61 20 5b 78 5d 20 5b  |(maze_data [x] [|
00002930  79 20 2d 20 28 64 65 70  74 68 20 2d 20 31 29 5d  |y - (depth - 1)]|
00002940  20 3d 3d 20 62 6f 78 20  7c 7c 0a 20 20 20 20 20  | == box ||.     |
00002950  20 20 20 20 6d 61 7a 65  5f 64 61 74 61 20 5b 78  |    maze_data [x|
00002960  5d 20 5b 79 20 2d 20 28  64 65 70 74 68 20 2d 20  |] [y - (depth - |
00002970  31 29 5d 20 3d 3d 20 6b  65 79 29 20 7b 0a 20 20  |1)] == key) {.  |
00002980  20 20 20 20 20 20 74 72  65 61 73 75 72 65 5f 62  |      treasure_b|
00002990  6f 78 28 64 65 70 74 68  29 3b 0a 20 20 20 20 20  |ox(depth);.     |
000029a0  20 7d 0a 20 20 20 20 20  20 0a 20 20 20 20 20 20  | }.      .      |
000029b0  69 66 28 6d 61 7a 65 5f  64 61 74 61 20 5b 78 5d  |if(maze_data [x]|
000029c0  20 5b 79 20 2d 20 28 64  65 70 74 68 20 2d 20 31  | [y - (depth - 1|
000029d0  29 5d 20 3d 3d 20 64 6f  6f 72 29 20 7b 0a 20 20  |)] == door) {.  |
000029e0  20 20 20 20 20 20 74 72  61 70 64 6f 6f 72 28 64  |      trapdoor(d|
000029f0  65 70 74 68 29 3b 0a 20  20 20 20 20 20 7d 0a 20  |epth);.      }. |
00002a00  20 20 20 20 20 0a 20 20  20 20 20 20 69 66 28 6d  |     .      if(m|
00002a10  61 7a 65 5f 64 61 74 61  20 5b 78 5d 20 5b 79 20  |aze_data [x] [y |
00002a20  2d 20 64 65 70 74 68 5d  20 3d 3d 20 77 61 6c 6c  |- depth] == wall|
00002a30  29 20 7b 0a 20 20 20 20  20 20 20 20 65 6e 64 5f  |) {.        end_|
00002a40  77 61 6c 6c 28 64 65 70  74 68 29 3b 0a 20 20 20  |wall(depth);.   |
00002a50  20 20 20 20 20 65 6e 64  20 3d 20 54 52 55 45 3b  |     end = TRUE;|
00002a60  0a 20 20 20 20 20 20 7d  0a 20 20 20 20 20 20 62  |.      }.      b|
00002a70  72 65 61 6b 3b 0a 20 20  20 20 20 20 0a 20 20 20  |reak;.      .   |
00002a80  20 20 20 63 61 73 65 20  64 6f 77 6e 3a 0a 20 20  |   case down:.  |
00002a90  20 20 20 20 69 66 28 6d  61 7a 65 5f 64 61 74 61  |    if(maze_data|
00002aa0  20 5b 78 20 2b 20 31 5d  20 5b 79 20 2b 20 28 64  | [x + 1] [y + (d|
00002ab0  65 70 74 68 20 2d 20 31  29 5d 20 3d 3d 20 77 61  |epth - 1)] == wa|
00002ac0  6c 6c 29 20 7b 0a 20 20  20 20 20 20 20 20 6c 65  |ll) {.        le|
00002ad0  66 74 5f 77 61 6c 6c 28  64 65 70 74 68 29 3b 0a  |ft_wall(depth);.|
00002ae0  20 20 20 20 20 20 7d 0a  20 20 20 20 20 20 65 6c  |      }.      el|
00002af0  73 65 20 7b 0a 20 20 20  20 20 20 20 20 6c 65 66  |se {.        lef|
00002b00  74 5f 65 78 69 74 28 64  65 70 74 68 29 3b 0a 20  |t_exit(depth);. |
00002b10  20 20 20 20 20 7d 0a 20  20 20 20 20 20 0a 20 20  |     }.      .  |
00002b20  20 20 20 20 69 66 28 6d  61 7a 65 5f 64 61 74 61  |    if(maze_data|
00002b30  20 5b 78 20 2d 20 31 5d  20 5b 79 20 2b 20 28 64  | [x - 1] [y + (d|
00002b40  65 70 74 68 20 2d 20 31  29 5d 20 3d 3d 20 77 61  |epth - 1)] == wa|
00002b50  6c 6c 29 20 7b 0a 20 20  20 20 20 20 20 20 72 69  |ll) {.        ri|
00002b60  67 68 74 5f 77 61 6c 6c  28 64 65 70 74 68 29 3b  |ght_wall(depth);|
00002b70  0a 20 20 20 20 20 20 7d  0a 20 20 20 20 20 20 65  |.      }.      e|
00002b80  6c 73 65 20 7b 0a 20 20  20 20 20 20 20 20 72 69  |lse {.        ri|
00002b90  67 68 74 5f 65 78 69 74  28 64 65 70 74 68 29 3b  |ght_exit(depth);|
00002ba0  0a 20 20 20 20 20 20 7d  0a 20 20 20 20 20 20 0a  |.      }.      .|
00002bb0  20 20 20 20 20 20 69 66  28 6d 61 7a 65 5f 64 61  |      if(maze_da|
00002bc0  74 61 20 5b 78 5d 20 5b  79 20 2b 20 28 64 65 70  |ta [x] [y + (dep|
00002bd0  74 68 20 2d 20 31 29 5d  20 3d 3d 20 62 6f 78 20  |th - 1)] == box |
00002be0  7c 7c 0a 20 20 20 20 20  20 20 20 20 6d 61 7a 65  |||.         maze|
00002bf0  5f 64 61 74 61 20 5b 78  5d 20 5b 79 20 2b 20 28  |_data [x] [y + (|
00002c00  64 65 70 74 68 20 2d 20  31 29 5d 20 3d 3d 20 6b  |depth - 1)] == k|
00002c10  65 79 29 20 7b 0a 20 20  20 20 20 20 20 20 74 72  |ey) {.        tr|
00002c20  65 61 73 75 72 65 5f 62  6f 78 28 64 65 70 74 68  |easure_box(depth|
00002c30  29 3b 0a 20 20 20 20 20  20 7d 0a 20 20 20 20 20  |);.      }.     |
00002c40  20 0a 20 20 20 20 20 20  69 66 28 6d 61 7a 65 5f  | .      if(maze_|
00002c50  64 61 74 61 20 5b 78 5d  20 5b 79 20 2b 20 28 64  |data [x] [y + (d|
00002c60  65 70 74 68 20 2d 20 31  29 5d 20 3d 3d 20 64 6f  |epth - 1)] == do|
00002c70  6f 72 29 20 7b 0a 20 20  20 20 20 20 20 20 74 72  |or) {.        tr|
00002c80  61 70 64 6f 6f 72 28 64  65 70 74 68 29 3b 0a 20  |apdoor(depth);. |
00002c90  20 20 20 20 20 7d 0a 20  20 20 20 20 20 0a 20 20  |     }.      .  |
00002ca0  20 20 20 20 69 66 28 6d  61 7a 65 5f 64 61 74 61  |    if(maze_data|
00002cb0  20 5b 78 5d 20 5b 79 20  2b 20 64 65 70 74 68 5d  | [x] [y + depth]|
00002cc0  20 3d 3d 20 77 61 6c 6c  29 20 7b 0a 20 20 20 20  | == wall) {.    |
00002cd0  20 20 20 20 65 6e 64 5f  77 61 6c 6c 28 64 65 70  |    end_wall(dep|
00002ce0  74 68 29 3b 0a 20 20 20  20 20 20 20 20 65 6e 64  |th);.        end|
00002cf0  20 3d 20 54 52 55 45 3b  0a 20 20 20 20 20 20 7d  | = TRUE;.      }|
00002d00  0a 20 20 20 20 20 20 62  72 65 61 6b 3b 0a 20 20  |.      break;.  |
00002d10  20 20 20 20 0a 20 20 20  20 20 20 63 61 73 65 20  |    .      case |
00002d20  6c 65 66 74 3a 0a 20 20  20 20 20 20 69 66 28 6d  |left:.      if(m|
00002d30  61 7a 65 5f 64 61 74 61  20 5b 78 20 2d 20 28 64  |aze_data [x - (d|
00002d40  65 70 74 68 20 2d 20 31  29 5d 20 5b 79 20 2b 20  |epth - 1)] [y + |
00002d50  31 5d 20 3d 3d 20 77 61  6c 6c 29 20 7b 0a 20 20  |1] == wall) {.  |
00002d60  20 20 20 20 20 20 6c 65  66 74 5f 77 61 6c 6c 28  |      left_wall(|
00002d70  64 65 70 74 68 29 3b 0a  20 20 20 20 20 20 7d 0a  |depth);.      }.|
00002d80  20 20 20 20 20 20 65 6c  73 65 20 7b 0a 20 20 20  |      else {.   |
00002d90  20 20 20 20 20 6c 65 66  74 5f 65 78 69 74 28 64  |     left_exit(d|
00002da0  65 70 74 68 29 3b 0a 20  20 20 20 20 20 7d 0a 20  |epth);.      }. |
00002db0  20 20 20 20 20 0a 20 20  20 20 20 20 69 66 28 6d  |     .      if(m|
00002dc0  61 7a 65 5f 64 61 74 61  20 5b 78 20 2d 20 28 64  |aze_data [x - (d|
00002dd0  65 70 74 68 20 2d 20 31  29 5d 20 5b 79 20 2d 20  |epth - 1)] [y - |
00002de0  31 5d 20 3d 3d 20 77 61  6c 6c 29 20 7b 0a 20 20  |1] == wall) {.  |
00002df0  20 20 20 20 20 20 72 69  67 68 74 5f 77 61 6c 6c  |      right_wall|
00002e00  28 64 65 70 74 68 29 3b  0a 20 20 20 20 20 20 7d  |(depth);.      }|
00002e10  0a 20 20 20 20 20 20 65  6c 73 65 20 7b 0a 20 20  |.      else {.  |
00002e20  20 20 20 20 20 20 72 69  67 68 74 5f 65 78 69 74  |      right_exit|
00002e30  28 64 65 70 74 68 29 3b  0a 20 20 20 20 20 20 7d  |(depth);.      }|
00002e40  0a 20 20 20 20 20 20 0a  20 20 20 20 20 20 69 66  |.      .      if|
00002e50  28 6d 61 7a 65 5f 64 61  74 61 20 5b 78 20 2d 20  |(maze_data [x - |
00002e60  28 64 65 70 74 68 20 2d  20 31 29 5d 20 5b 79 5d  |(depth - 1)] [y]|
00002e70  20 3d 3d 20 62 6f 78 20  7c 7c 0a 20 20 20 20 20  | == box ||.     |
00002e80  20 20 20 20 6d 61 7a 65  5f 64 61 74 61 20 5b 78  |    maze_data [x|
00002e90  20 2d 20 28 64 65 70 74  68 20 2d 20 31 29 5d 20  | - (depth - 1)] |
00002ea0  5b 79 5d 20 3d 3d 20 6b  65 79 29 20 7b 0a 20 20  |[y] == key) {.  |
00002eb0  20 20 20 20 20 20 74 72  65 61 73 75 72 65 5f 62  |      treasure_b|
00002ec0  6f 78 28 64 65 70 74 68  29 3b 0a 20 20 20 20 20  |ox(depth);.     |
00002ed0  20 7d 0a 20 20 20 20 20  20 0a 20 20 20 20 20 20  | }.      .      |
00002ee0  69 66 28 6d 61 7a 65 5f  64 61 74 61 20 5b 78 20  |if(maze_data [x |
00002ef0  2d 20 28 64 65 70 74 68  20 2d 20 31 29 5d 20 5b  |- (depth - 1)] [|
00002f00  79 5d 20 3d 3d 20 64 6f  6f 72 29 20 7b 0a 20 20  |y] == door) {.  |
00002f10  20 20 20 20 20 20 74 72  61 70 64 6f 6f 72 28 64  |      trapdoor(d|
00002f20  65 70 74 68 29 3b 0a 20  20 20 20 20 20 7d 0a 20  |epth);.      }. |
00002f30  20 20 20 20 20 0a 20 20  20 20 20 20 69 66 28 6d  |     .      if(m|
00002f40  61 7a 65 5f 64 61 74 61  20 5b 78 20 2d 20 64 65  |aze_data [x - de|
00002f50  70 74 68 5d 20 5b 79 5d  20 3d 3d 20 77 61 6c 6c  |pth] [y] == wall|
00002f60  29 20 7b 0a 20 20 20 20  20 20 20 20 65 6e 64 5f  |) {.        end_|
00002f70  77 61 6c 6c 28 64 65 70  74 68 29 3b 0a 20 20 20  |wall(depth);.   |
00002f80  20 20 20 20 20 65 6e 64  20 3d 20 54 52 55 45 3b  |     end = TRUE;|
00002f90  0a 20 20 20 20 20 20 7d  0a 20 20 20 20 20 20 62  |.      }.      b|
00002fa0  72 65 61 6b 3b 0a 20 20  20 20 20 20 0a 20 20 20  |reak;.      .   |
00002fb0  20 20 20 63 61 73 65 20  72 69 67 68 74 3a 20 20  |   case right:  |
00002fc0  20 20 20 0a 20 20 20 20  20 20 69 66 28 6d 61 7a  |   .      if(maz|
00002fd0  65 5f 64 61 74 61 20 5b  78 20 2b 20 28 64 65 70  |e_data [x + (dep|
00002fe0  74 68 20 2d 20 31 29 5d  20 5b 79 20 2d 20 31 5d  |th - 1)] [y - 1]|
00002ff0  20 3d 3d 20 77 61 6c 6c  29 20 7b 0a 20 20 20 20  | == wall) {.    |
00003000  20 20 20 20 6c 65 66 74  5f 77 61 6c 6c 28 64 65  |    left_wall(de|
00003010  70 74 68 29 3b 0a 20 20  20 20 20 20 7d 0a 20 20  |pth);.      }.  |
00003020  20 20 20 20 65 6c 73 65  20 7b 0a 20 20 20 20 20  |    else {.     |
00003030  20 20 20 6c 65 66 74 5f  65 78 69 74 28 64 65 70  |   left_exit(dep|
00003040  74 68 29 3b 0a 20 20 20  20 20 20 7d 0a 20 20 20  |th);.      }.   |
00003050  20 20 20 0a 20 20 20 20  20 20 69 66 28 6d 61 7a  |   .      if(maz|
00003060  65 5f 64 61 74 61 20 5b  78 20 2b 20 28 64 65 70  |e_data [x + (dep|
00003070  74 68 20 2d 20 31 29 5d  20 5b 79 20 2b 20 31 5d  |th - 1)] [y + 1]|
00003080  20 3d 3d 20 77 61 6c 6c  29 20 7b 0a 20 20 20 20  | == wall) {.    |
00003090  20 20 20 20 72 69 67 68  74 5f 77 61 6c 6c 28 64  |    right_wall(d|
000030a0  65 70 74 68 29 3b 0a 20  20 20 20 20 20 7d 0a 20  |epth);.      }. |
000030b0  20 20 20 20 20 65 6c 73  65 20 7b 0a 20 20 20 20  |     else {.    |
000030c0  20 20 20 20 72 69 67 68  74 5f 65 78 69 74 28 64  |    right_exit(d|
000030d0  65 70 74 68 29 3b 0a 20  20 20 20 20 20 7d 0a 20  |epth);.      }. |
000030e0  20 20 20 20 20 0a 20 20  20 20 20 20 69 66 28 6d  |     .      if(m|
000030f0  61 7a 65 5f 64 61 74 61  20 5b 78 20 2b 20 28 64  |aze_data [x + (d|
00003100  65 70 74 68 20 2d 20 31  29 5d 20 5b 79 5d 20 3d  |epth - 1)] [y] =|
00003110  3d 20 62 6f 78 20 7c 7c  0a 20 20 20 20 20 20 20  |= box ||.       |
00003120  20 20 6d 61 7a 65 5f 64  61 74 61 20 5b 78 20 2b  |  maze_data [x +|
00003130  20 28 64 65 70 74 68 20  2d 20 31 29 5d 20 5b 79  | (depth - 1)] [y|
00003140  5d 20 3d 3d 20 6b 65 79  29 20 7b 0a 20 20 20 20  |] == key) {.    |
00003150  20 20 20 20 74 72 65 61  73 75 72 65 5f 62 6f 78  |    treasure_box|
00003160  28 64 65 70 74 68 29 3b  0a 20 20 20 20 20 20 7d  |(depth);.      }|
00003170  0a 20 20 20 20 20 20 0a  20 20 20 20 20 20 69 66  |.      .      if|
00003180  28 6d 61 7a 65 5f 64 61  74 61 20 5b 78 20 2b 20  |(maze_data [x + |
00003190  28 64 65 70 74 68 20 2d  20 31 29 5d 20 5b 79 5d  |(depth - 1)] [y]|
000031a0  20 3d 3d 20 64 6f 6f 72  29 20 7b 0a 20 20 20 20  | == door) {.    |
000031b0  20 20 20 20 74 72 61 70  64 6f 6f 72 28 64 65 70  |    trapdoor(dep|
000031c0  74 68 29 3b 0a 20 20 20  20 20 20 7d 0a 20 20 20  |th);.      }.   |
000031d0  20 20 20 0a 20 20 20 20  20 20 69 66 28 6d 61 7a  |   .      if(maz|
000031e0  65 5f 64 61 74 61 20 5b  78 20 2b 20 64 65 70 74  |e_data [x + dept|
000031f0  68 5d 20 5b 79 5d 20 3d  3d 20 77 61 6c 6c 29 20  |h] [y] == wall) |
00003200  7b 0a 20 20 20 20 20 20  20 20 65 6e 64 5f 77 61  |{.        end_wa|
00003210  6c 6c 28 64 65 70 74 68  29 3b 0a 20 20 20 20 20  |ll(depth);.     |
00003220  20 20 20 65 6e 64 20 3d  20 54 52 55 45 3b 0a 20  |   end = TRUE;. |
00003230  20 20 20 20 20 7d 0a 20  20 20 20 20 20 62 72 65  |     }.      bre|
00003240  61 6b 3b 0a 20 20 20 20  7d 0a 20 20 20 20 0a 20  |ak;.    }.    . |
00003250  20 20 20 64 65 70 74 68  2b 2b 3b 0a 20 20 7d 0a  |   depth++;.  }.|
00003260  7d 0a 20 20 0a 76 6f 69  64 20 73 63 61 6e 6e 65  |}.  .void scanne|
00003270  72 28 69 6e 74 20 78 2c  20 69 6e 74 20 79 2c 20  |r(int x, int y, |
00003280  64 69 72 5f 76 61 6c 20  64 69 72 2c 20 69 6e 74  |dir_val dir, int|
00003290  20 72 61 6e 67 65 29 0a  7b 0a 20 20 69 6e 74 20  | range).{.  int |
000032a0  78 5f 6c 6f 6f 70 2c 20  79 5f 6c 6f 6f 70 3b 0a  |x_loop, y_loop;.|
000032b0  20 20 20 0a 20 20 6f 73  5f 74 61 62 28 30 2c 20  |   .  os_tab(0, |
000032c0  31 29 3b 0a 20 0a 20 20  66 6f 72 28 79 5f 6c 6f  |1);. .  for(y_lo|
000032d0  6f 70 20 3d 20 79 20 2d  20 72 61 6e 67 65 3b 20  |op = y - range; |
000032e0  79 5f 6c 6f 6f 70 20 3c  3d 20 79 20 2b 20 72 61  |y_loop <= y + ra|
000032f0  6e 67 65 3b 20 79 5f 6c  6f 6f 70 2b 2b 29 20 7b  |nge; y_loop++) {|
00003300  0a 20 20 20 20 6f 73 5f  74 61 62 28 28 34 30 20  |.    os_tab((40 |
00003310  2d 20 28 72 61 6e 67 65  20 2a 20 32 29 29 20 2f  |- (range * 2)) /|
00003320  20 32 2c 20 6f 73 5f 76  70 6f 73 28 29 29 3b 0a  | 2, os_vpos());.|
00003330  20 20 20 20 66 6f 72 28  78 5f 6c 6f 6f 70 20 3d  |    for(x_loop =|
00003340  20 78 20 2d 20 72 61 6e  67 65 3b 20 78 5f 6c 6f  | x - range; x_lo|
00003350  6f 70 20 3c 3d 20 78 20  2b 20 72 61 6e 67 65 3b  |op <= x + range;|
00003360  20 78 5f 6c 6f 6f 70 2b  2b 29 20 7b 0a 20 20 20  | x_loop++) {.   |
00003370  20 20 20 0a 20 20 20 20  20 20 69 66 28 78 5f 6c  |   .      if(x_l|
00003380  6f 6f 70 20 3e 3d 20 30  20 26 26 20 79 5f 6c 6f  |oop >= 0 && y_lo|
00003390  6f 70 3e 3d 20 30 20 26  26 20 78 5f 6c 6f 6f 70  |op>= 0 && x_loop|
000033a0  20 3c 3d 20 4d 41 5a 45  5f 4d 55 4c 54 20 2a 20  | <= MAZE_MULT * |
000033b0  6c 65 76 65 6c 0a 20 20  20 20 20 20 20 20 20 26  |level.         &|
000033c0  26 20 79 5f 6c 6f 6f 70  20 3c 3d 20 4d 41 5a 45  |& y_loop <= MAZE|
000033d0  5f 4d 55 4c 54 20 2a 20  6c 65 76 65 6c 29 20 7b  |_MULT * level) {|
000033e0  0a 20 20 20 20 20 20 20  20 0a 20 20 20 20 20 20  |.        .      |
000033f0  20 20 73 77 69 74 63 68  28 6d 61 7a 65 5f 64 61  |  switch(maze_da|
00003400  74 61 20 5b 78 5f 6c 6f  6f 70 5d 20 5b 79 5f 6c  |ta [x_loop] [y_l|
00003410  6f 6f 70 5d 29 20 7b 0a  20 20 20 20 20 20 20 20  |oop]) {.        |
00003420  20 20 0a 20 20 20 20 20  20 20 20 20 20 63 61 73  |  .          cas|
00003430  65 20 77 61 6c 6c 3a 0a  20 20 20 20 20 20 20 20  |e wall:.        |
00003440  20 20 6f 73 5f 76 64 75  28 32 35 35 29 3b 0a 20  |  os_vdu(255);. |
00003450  20 20 20 20 20 20 20 20  20 62 72 65 61 6b 3b 0a  |         break;.|
00003460  20 20 20 20 20 20 20 20  0a 20 20 20 20 20 20 20  |        .       |
00003470  20 20 20 63 61 73 65 20  63 6f 72 72 69 64 6f 72  |   case corridor|
00003480  3a 0a 20 20 20 20 20 20  20 20 20 20 70 72 69 6e  |:.          prin|
00003490  74 66 28 22 20 22 29 3b  0a 20 20 20 20 20 20 20  |tf(" ");.       |
000034a0  20 20 20 62 72 65 61 6b  3b 0a 20 20 20 20 20 20  |   break;.      |
000034b0  20 20 0a 20 20 20 20 20  20 20 20 20 20 63 61 73  |  .          cas|
000034c0  65 20 62 6f 78 3a 0a 20  20 20 20 20 20 20 20 20  |e box:.         |
000034d0  20 70 72 69 6e 74 66 28  22 2a 22 29 3b 0a 20 20  | printf("*");.  |
000034e0  20 20 20 20 20 20 20 20  62 72 65 61 6b 3b 0a 20  |        break;. |
000034f0  20 20 20 20 20 20 20 20  20 0a 20 20 20 20 20 20  |         .      |
00003500  20 20 20 20 63 61 73 65  20 64 6f 6f 72 3a 0a 20  |    case door:. |
00003510  20 20 20 20 20 20 20 20  20 70 72 69 6e 74 66 28  |         printf(|
00003520  22 2e 22 29 3b 0a 20 20  20 20 20 20 20 20 20 20  |".");.          |
00003530  62 72 65 61 6b 3b 0a 20  20 20 20 20 20 20 20 20  |break;.         |
00003540  20 0a 20 20 20 20 20 20  20 20 20 20 63 61 73 65  | .          case|
00003550  20 6b 65 79 3a 0a 20 20  20 20 20 20 20 20 20 20  | key:.          |
00003560  70 72 69 6e 74 66 28 22  4b 22 29 3b 0a 20 20 20  |printf("K");.   |
00003570  20 20 20 20 20 20 20 62  72 65 61 6b 3b 0a 20 20  |       break;.  |
00003580  20 20 20 20 20 20 20 20  0a 20 20 20 20 20 20 20  |        .       |
00003590  20 7d 0a 20 20 20 20 20  20 20 20 20 20 20 20 20  | }.             |
000035a0  0a 20 20 20 20 20 20 7d  0a 20 20 20 20 20 20 65  |.      }.      e|
000035b0  6c 73 65 20 7b 0a 20 20  20 20 20 20 20 20 6f 73  |lse {.        os|
000035c0  5f 76 64 75 28 32 35 35  29 3b 0a 20 20 20 20 20  |_vdu(255);.     |
000035d0  20 7d 0a 20 20 20 20 7d  0a 20 20 20 20 70 72 69  | }.    }.    pri|
000035e0  6e 74 66 28 22 5c 6e 22  29 3b 0a 20 20 7d 0a 20  |ntf("\n");.  }. |
000035f0  20 6f 73 5f 74 61 62 28  28 34 30 20 2d 20 28 72  | os_tab((40 - (r|
00003600  61 6e 67 65 20 2a 20 32  29 29 20 2f 20 32 20 2b  |ange * 2)) / 2 +|
00003610  20 72 61 6e 67 65 2c 20  31 20 2b 20 72 61 6e 67  | range, 1 + rang|
00003620  65 29 3b 0a 20 20 64 69  72 5f 61 72 72 6f 77 28  |e);.  dir_arrow(|
00003630  64 69 72 29 3b 0a 7d 0a  20 20 20 20 20 20 20 20  |dir);.}.        |
00003640  0a 76 6f 69 64 20 6f 78  79 5f 67 61 75 67 65 28  |.void oxy_gauge(|
00003650  69 6e 74 20 6f 78 79 5f  6c 65 66 74 29 0a 7b 0a  |int oxy_left).{.|
00003660  20 20 69 66 28 6f 78 79  5f 6c 65 66 74 20 3c 20  |  if(oxy_left < |
00003670  32 35 29 0a 20 20 7b 0a  20 20 20 20 6f 73 5f 67  |25).  {.    os_g|
00003680  63 6f 6c 28 30 2c 31 29  3b 0a 20 20 7d 0a 20 20  |col(0,1);.  }.  |
00003690  65 6c 73 65 0a 20 20 7b  0a 20 20 20 20 6f 73 5f  |else.  {.    os_|
000036a0  67 63 6f 6c 28 30 2c 32  29 3b 0a 20 20 7d 0a 20  |gcol(0,2);.  }. |
000036b0  20 0a 20 20 6f 73 5f 72  65 63 74 61 6e 67 6c 65  | .  os_rectangle|
000036c0  66 69 6c 6c 28 36 31 35  2c 20 2d 35 30 30 2c 20  |fill(615, -500, |
000036d0  33 30 2c 20 31 30 20 2a  20 6f 78 79 5f 6c 65 66  |30, 10 * oxy_lef|
000036e0  74 29 3b 0a 7d 20 0a 0a  76 6f 69 64 20 72 65 73  |t);.} ..void res|
000036f0  65 74 5f 70 6c 61 79 65  72 28 76 6f 69 64 29 0a  |et_player(void).|
00003700  7b 20 20 0a 20 20 64 6f  20 7b 0a 20 20 20 20 0a  |{  .  do {.    .|
00003710  20 20 20 20 70 6c 61 79  65 72 5f 78 20 3d 20 6f  |    player_x = o|
00003720  73 5f 72 6e 64 28 4d 41  5a 45 5f 4d 55 4c 54 20  |s_rnd(MAZE_MULT |
00003730  2a 20 6c 65 76 65 6c 29  3b 0a 20 20 20 20 70 6c  |* level);.    pl|
00003740  61 79 65 72 5f 79 20 3d  20 6f 73 5f 72 6e 64 28  |ayer_y = os_rnd(|
00003750  4d 41 5a 45 5f 4d 55 4c  54 20 2a 20 6c 65 76 65  |MAZE_MULT * leve|
00003760  6c 29 3b 0a 20 20 20 20  0a 20 20 7d 20 77 68 69  |l);.    .  } whi|
00003770  6c 65 28 6d 61 7a 65 5f  64 61 74 61 5b 70 6c 61  |le(maze_data[pla|
00003780  79 65 72 5f 78 5d 20 5b  70 6c 61 79 65 72 5f 79  |yer_x] [player_y|
00003790  5d 20 21 3d 20 63 6f 72  72 69 64 6f 72 29 3b 0a  |] != corridor);.|
000037a0  20 20 0a 20 20 70 6c 61  79 65 72 5f 64 69 72 20  |  .  player_dir |
000037b0  3d 20 6f 73 5f 72 6e 64  28 34 29 3b 0a 20 20 6d  |= os_rnd(4);.  m|
000037c0  6f 76 65 5f 63 6f 75 6e  74 65 72 20 3d 20 28 6c  |ove_counter = (l|
000037d0  65 76 65 6c 20 2a 20 4d  41 5a 45 5f 4d 55 4c 54  |evel * MAZE_MULT|
000037e0  29 20 2a 20 28 6c 65 76  65 6c 20 2a 20 4d 41 5a  |) * (level * MAZ|
000037f0  45 5f 4d 55 4c 54 29 3b  0a 20 20 6b 65 79 73 20  |E_MULT);.  keys |
00003800  3d 20 30 3b 0a 7d 20 20  20 20 20 0a 20 0a 76 6f  |= 0;.}     . .vo|
00003810  69 64 20 75 70 64 61 74  65 5f 70 6c 61 79 65 72  |id update_player|
00003820  28 76 6f 69 64 29 0a 7b  20 0a 20 20 69 66 28 6f  |(void).{ .  if(o|
00003830  73 5f 69 6e 6b 65 79 28  2d 31 31 33 29 29 0a 20  |s_inkey(-113)). |
00003840  20 7b 0a 20 20 20 20 67  61 6d 65 5f 73 74 61 74  | {.    game_stat|
00003850  75 73 20 3d 20 64 65 61  64 3b 0a 20 20 7d 0a 20  |us = dead;.  }. |
00003860  20 0a 20 20 69 66 28 6f  73 5f 69 6e 6b 65 79 28  | .  if(os_inkey(|
00003870  2d 39 38 29 29 20 7b 0a  20 20 20 20 70 6c 61 79  |-98)) {.    play|
00003880  65 72 5f 64 69 72 2b 2b  3b 20 20 20 0a 20 20 20  |er_dir++;   .   |
00003890  20 69 66 28 70 6c 61 79  65 72 5f 64 69 72 20 3e  | if(player_dir >|
000038a0  20 72 69 67 68 74 29 20  70 6c 61 79 65 72 5f 64  | right) player_d|
000038b0  69 72 20 3d 20 75 70 3b  0a 20 20 20 20 0a 20 20  |ir = up;.    .  |
000038c0  20 20 70 6c 6f 74 5f 76  69 65 77 28 70 6c 61 79  |  plot_view(play|
000038d0  65 72 5f 78 2c 20 70 6c  61 79 65 72 5f 79 2c 20  |er_x, player_y, |
000038e0  70 6c 61 79 65 72 5f 64  69 72 29 3b 0a 20 20 20  |player_dir);.   |
000038f0  20 73 68 6f 77 5f 73 74  61 74 75 73 28 29 3b 0a  | show_status();.|
00003900  20 20 20 20 6d 65 73 73  61 67 65 5f 75 70 64 61  |    message_upda|
00003910  74 65 28 29 3b 20 0a 20  20 20 20 62 61 6e 6b 5f  |te(); .    bank_|
00003920  66 6c 69 70 28 29 3b 20  20 0a 20 20 20 20 77 68  |flip();  .    wh|
00003930  69 6c 65 28 6f 73 5f 69  6e 6b 65 79 28 2d 39 38  |ile(os_inkey(-98|
00003940  29 29 3b 20 20 20 0a 20  20 7d 0a 20 20 0a 20 20  |));   .  }.  .  |
00003950  69 66 28 6f 73 5f 69 6e  6b 65 79 28 2d 36 37 29  |if(os_inkey(-67)|
00003960  29 20 7b 0a 20 20 20 20  70 6c 61 79 65 72 5f 64  |) {.    player_d|
00003970  69 72 2d 2d 3b 0a 20 20  20 20 69 66 28 70 6c 61  |ir--;.    if(pla|
00003980  79 65 72 5f 64 69 72 20  3c 20 75 70 29 20 70 6c  |yer_dir < up) pl|
00003990  61 79 65 72 5f 64 69 72  20 3d 20 72 69 67 68 74  |ayer_dir = right|
000039a0  3b 0a 20 20 20 20 0a 20  20 20 20 70 6c 6f 74 5f  |;.    .    plot_|
000039b0  76 69 65 77 28 70 6c 61  79 65 72 5f 78 2c 20 70  |view(player_x, p|
000039c0  6c 61 79 65 72 5f 79 2c  20 70 6c 61 79 65 72 5f  |layer_y, player_|
000039d0  64 69 72 29 3b 0a 20 20  20 20 73 68 6f 77 5f 73  |dir);.    show_s|
000039e0  74 61 74 75 73 28 29 3b  0a 20 20 20 20 6d 65 73  |tatus();.    mes|
000039f0  73 61 67 65 5f 75 70 64  61 74 65 28 29 3b 20 0a  |sage_update(); .|
00003a00  20 20 20 20 62 61 6e 6b  5f 66 6c 69 70 28 29 3b  |    bank_flip();|
00003a10  0a 20 20 20 20 77 68 69  6c 65 28 6f 73 5f 69 6e  |.    while(os_in|
00003a20  6b 65 79 28 2d 36 37 29  29 3b 20 20 20 20 0a 20  |key(-67));    . |
00003a30  20 7d 20 20 0a 20 20 20  20 0a 20 20 69 66 28 6f  | }  .    .  if(o|
00003a40  73 5f 69 6e 6b 65 79 28  2d 31 30 35 29 20 26 26  |s_inkey(-105) &&|
00003a50  0a 20 20 20 20 20 6d 61  7a 65 5f 64 61 74 61 20  |.     maze_data |
00003a60  5b 70 6c 61 79 65 72 5f  78 20 2b 20 64 69 72 5f  |[player_x + dir_|
00003a70  78 28 70 6c 61 79 65 72  5f 64 69 72 29 5d 0a 20  |x(player_dir)]. |
00003a80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 5b 70  |              [p|
00003a90  6c 61 79 65 72 5f 79 20  2b 20 64 69 72 5f 79 28  |layer_y + dir_y(|
00003aa0  70 6c 61 79 65 72 5f 64  69 72 29 5d 20 21 3d 20  |player_dir)] != |
00003ab0  77 61 6c 6c 29 20 7b 0a  20 20 20 20 70 6c 61 79  |wall) {.    play|
00003ac0  65 72 5f 78 20 2b 3d 20  64 69 72 5f 78 28 70 6c  |er_x += dir_x(pl|
00003ad0  61 79 65 72 5f 64 69 72  29 3b 0a 20 20 20 20 70  |ayer_dir);.    p|
00003ae0  6c 61 79 65 72 5f 79 20  2b 3d 20 64 69 72 5f 79  |layer_y += dir_y|
00003af0  28 70 6c 61 79 65 72 5f  64 69 72 29 3b 0a 20 20  |(player_dir);.  |
00003b00  0a 20 20 20 20 6d 6f 76  65 5f 63 6f 75 6e 74 65  |.    move_counte|
00003b10  72 2d 2d 3b 0a 20 20 0a  20 20 20 20 70 6c 6f 74  |r--;.  .    plot|
00003b20  5f 76 69 65 77 28 70 6c  61 79 65 72 5f 78 2c 20  |_view(player_x, |
00003b30  70 6c 61 79 65 72 5f 79  2c 20 70 6c 61 79 65 72  |player_y, player|
00003b40  5f 64 69 72 29 3b 0a 20  20 20 20 73 68 6f 77 5f  |_dir);.    show_|
00003b50  73 74 61 74 75 73 28 29  3b 0a 20 20 20 20 6d 65  |status();.    me|
00003b60  73 73 61 67 65 5f 75 70  64 61 74 65 28 29 3b 20  |ssage_update(); |
00003b70  0a 20 20 20 20 62 61 6e  6b 5f 66 6c 69 70 28 29  |.    bank_flip()|
00003b80  3b 20 20 20 20 0a 20 20  7d 0a 20 20 0a 20 20 69  |;    .  }.  .  i|
00003b90  66 28 6f 73 5f 69 6e 6b  65 79 28 2d 38 32 29 29  |f(os_inkey(-82))|
00003ba0  20 0a 20 20 7b 0a 20 20  20 20 73 63 61 6e 73 2d  | .  {.    scans-|
00003bb0  2d 3b 0a 20 20 20 20 69  66 28 73 63 61 6e 73 20  |-;.    if(scans |
00003bc0  3c 20 30 29 20 73 63 61  6e 73 20 3d 20 30 3b 0a  |< 0) scans = 0;.|
00003bd0  20 20 20 20 0a 20 20 20  20 69 66 28 63 68 65 61  |    .    if(chea|
00003be0  74 20 3d 3d 20 54 52 55  45 29 0a 20 20 20 20 7b  |t == TRUE).    {|
00003bf0  0a 20 20 20 20 20 20 73  63 61 6e 6e 65 72 28 70  |.      scanner(p|
00003c00  6c 61 79 65 72 5f 78 2c  20 70 6c 61 79 65 72 5f  |layer_x, player_|
00003c10  79 2c 20 70 6c 61 79 65  72 5f 64 69 72 2c 20 31  |y, player_dir, 1|
00003c20  34 29 3b 0a 20 20 20 20  7d 0a 20 20 20 20 65 6c  |4);.    }.    el|
00003c30  73 65 0a 20 20 20 20 7b  0a 20 20 20 20 20 20 73  |se.    {.      s|
00003c40  63 61 6e 6e 65 72 28 70  6c 61 79 65 72 5f 78 2c  |canner(player_x,|
00003c50  20 70 6c 61 79 65 72 5f  79 2c 20 70 6c 61 79 65  | player_y, playe|
00003c60  72 5f 64 69 72 2c 20 73  63 61 6e 73 20 2b 20 32  |r_dir, scans + 2|
00003c70  29 3b 0a 20 20 20 20 7d  0a 20 20 20 20 0a 20 20  |);.    }.    .  |
00003c80  20 20 6f 73 5f 74 61 62  28 30 2c 33 30 29 3b 0a  |  os_tab(0,30);.|
00003c90  20 20 20 20 70 72 69 6e  74 66 28 22 50 72 65 73  |    printf("Pres|
00003ca0  73 20 53 50 41 43 45 20  74 6f 20 67 6f 20 62 61  |s SPACE to go ba|
00003cb0  63 6b 20 74 6f 20 74 68  65 20 6d 61 7a 65 22 29  |ck to the maze")|
00003cc0  3b 0a 20 20 20 20 62 61  6e 6b 5f 66 6c 69 70 28  |;.    bank_flip(|
00003cd0  29 3b 0a 20 20 20 20 0a  20 20 20 20 77 68 69 6c  |);.    .    whil|
00003ce0  65 28 21 6f 73 5f 69 6e  6b 65 79 28 2d 39 39 29  |e(!os_inkey(-99)|
00003cf0  29 3b 0a 20 20 0a 20 20  20 20 70 6c 6f 74 5f 76  |);.  .    plot_v|
00003d00  69 65 77 28 70 6c 61 79  65 72 5f 78 2c 20 70 6c  |iew(player_x, pl|
00003d10  61 79 65 72 5f 79 2c 20  70 6c 61 79 65 72 5f 64  |ayer_y, player_d|
00003d20  69 72 29 3b 0a 20 20 20  20 73 68 6f 77 5f 73 74  |ir);.    show_st|
00003d30  61 74 75 73 28 29 3b 0a  20 20 20 20 6d 65 73 73  |atus();.    mess|
00003d40  61 67 65 5f 75 70 64 61  74 65 28 29 3b 20 0a 20  |age_update(); . |
00003d50  20 20 20 62 61 6e 6b 5f  66 6c 69 70 28 29 3b 20  |   bank_flip(); |
00003d60  0a 20 20 7d 20 0a 20 20  0a 20 20 69 66 28 6f 73  |.  } .  .  if(os|
00003d70  5f 69 6e 6b 65 79 28 2d  31 30 32 29 20 26 26 20  |_inkey(-102) && |
00003d80  6d 75 73 69 63 5f 70 72  65 73 65 6e 74 20 3d 3d  |music_present ==|
00003d90  20 54 52 55 45 29 0a 20  20 7b 0a 20 20 20 20 69  | TRUE).  {.    i|
00003da0  66 28 6d 75 73 69 63 20  3d 3d 20 54 52 55 45 29  |f(music == TRUE)|
00003db0  0a 20 20 20 20 7b 0a 20  20 20 20 20 20 6d 75 73  |.    {.      mus|
00003dc0  69 63 20 3d 20 46 41 4c  53 45 3b 0a 20 20 20 20  |ic = FALSE;.    |
00003dd0  20 20 73 74 6f 70 5f 6d  75 73 69 63 28 29 3b 0a  |  stop_music();.|
00003de0  20 20 20 20 7d 0a 20 20  20 20 65 6c 73 65 0a 20  |    }.    else. |
00003df0  20 20 20 7b 0a 20 20 20  20 20 20 6d 75 73 69 63  |   {.      music|
00003e00  20 3d 20 54 52 55 45 3b  0a 20 20 20 20 20 20 73  | = TRUE;.      s|
00003e10  74 61 72 74 5f 6d 75 73  69 63 28 29 3b 0a 20 20  |tart_music();.  |
00003e20  20 20 7d 0a 20 20 20 20  77 68 69 6c 65 28 6f 73  |  }.    while(os|
00003e30  5f 69 6e 6b 65 79 28 2d  31 30 32 29 29 3b 0a 20  |_inkey(-102));. |
00003e40  20 7d 0a 20 20 0a 20 20  69 66 28 6d 61 7a 65 5f  | }.  .  if(maze_|
00003e50  64 61 74 61 20 5b 70 6c  61 79 65 72 5f 78 5d 20  |data [player_x] |
00003e60  5b 70 6c 61 79 65 72 5f  79 5d 20 3d 3d 20 62 6f  |[player_y] == bo|
00003e70  78 20 26 26 20 6f 73 5f  69 6e 6b 65 79 28 2d 39  |x && os_inkey(-9|
00003e80  39 29 29 0a 20 20 7b 0a  20 20 20 20 6d 61 7a 65  |9)).  {.    maze|
00003e90  5f 64 61 74 61 20 5b 70  6c 61 79 65 72 5f 78 5d  |_data [player_x]|
00003ea0  20 5b 70 6c 61 79 65 72  5f 79 5d 20 3d 20 63 6f  | [player_y] = co|
00003eb0  72 72 69 64 6f 72 3b 0a  20 20 20 20 0a 20 20 20  |rridor;.    .   |
00003ec0  20 73 77 69 74 63 68 28  6f 73 5f 72 6e 64 28 34  | switch(os_rnd(4|
00003ed0  29 29 0a 20 20 20 20 7b  0a 20 20 20 20 20 20 63  |)).    {.      c|
00003ee0  61 73 65 20 30 3a 0a 20  20 20 20 20 20 73 63 6f  |ase 0:.      sco|
00003ef0  72 65 2b 3d 35 3b 0a 20  20 20 20 20 20 64 69 73  |re+=5;.      dis|
00003f00  70 5f 6d 65 73 73 61 67  65 28 22 59 6f 75 20 66  |p_message("You f|
00003f10  69 6e 64 20 73 6f 6d 65  20 73 69 6c 76 65 72 2e  |ind some silver.|
00003f20  22 29 3b 0a 20 20 20 20  20 20 62 72 65 61 6b 3b  |");.      break;|
00003f30  0a 20 20 20 20 20 20 0a  20 20 20 20 20 20 63 61  |.      .      ca|
00003f40  73 65 20 31 3a 0a 20 20  20 20 20 20 6d 6f 76 65  |se 1:.      move|
00003f50  5f 63 6f 75 6e 74 65 72  20 3d 20 28 6c 65 76 65  |_counter = (leve|
00003f60  6c 20 2a 20 4d 41 5a 45  5f 4d 55 4c 54 29 20 2a  |l * MAZE_MULT) *|
00003f70  20 28 6c 65 76 65 6c 20  2a 20 4d 41 5a 45 5f 4d  | (level * MAZE_M|
00003f80  55 4c 54 29 3b 0a 20 20  20 20 20 20 64 69 73 70  |ULT);.      disp|
00003f90  5f 6d 65 73 73 61 67 65  28 22 59 6f 75 20 66 69  |_message("You fi|
00003fa0  6e 64 20 61 6e 20 6f 78  79 67 65 6e 20 63 61 6e  |nd an oxygen can|
00003fb0  69 73 74 65 72 2e 22 29  3b 20 20 0a 20 20 20 20  |ister.");  .    |
00003fc0  20 20 62 72 65 61 6b 3b  0a 20 20 20 20 20 20 0a  |  break;.      .|
00003fd0  20 20 20 20 20 20 63 61  73 65 20 32 3a 0a 20 20  |      case 2:.  |
00003fe0  20 20 20 20 73 63 61 6e  73 2b 2b 3b 0a 20 20 20  |    scans++;.   |
00003ff0  20 20 20 69 66 28 73 63  61 6e 73 20 3e 20 31 30  |   if(scans > 10|
00004000  29 20 73 63 61 6e 73 20  3d 20 31 30 3b 0a 20 20  |) scans = 10;.  |
00004010  20 20 20 20 64 69 73 70  5f 6d 65 73 73 61 67 65  |    disp_message|
00004020  28 22 59 6f 75 20 66 69  6e 64 20 61 20 73 63 61  |("You find a sca|
00004030  6e 6e 65 72 20 62 61 74  74 65 72 79 2e 22 29 3b  |nner battery.");|
00004040  0a 20 20 20 20 20 20 62  72 65 61 6b 3b 0a 20 20  |.      break;.  |
00004050  20 20 20 20 0a 20 20 20  20 20 20 63 61 73 65 20  |    .      case |
00004060  33 3a 0a 20 20 20 20 20  20 73 63 6f 72 65 2b 3d  |3:.      score+=|
00004070  31 30 3b 0a 20 20 20 20  20 20 64 69 73 70 5f 6d  |10;.      disp_m|
00004080  65 73 73 61 67 65 28 22  59 6f 75 20 66 69 6e 64  |essage("You find|
00004090  20 73 6f 6d 65 20 67 6f  6c 64 2e 22 29 3b 0a 20  | some gold.");. |
000040a0  20 20 20 20 20 62 72 65  61 6b 3b 0a 20 20 20 20  |     break;.    |
000040b0  7d 20 0a 20 20 20 20 6d  6f 76 65 5f 63 6f 75 6e  |} .    move_coun|
000040c0  74 65 72 2d 2d 3b 20 0a  20 20 20 20 0a 20 20 20  |ter--; .    .   |
000040d0  20 70 6c 6f 74 5f 76 69  65 77 28 70 6c 61 79 65  | plot_view(playe|
000040e0  72 5f 78 2c 20 70 6c 61  79 65 72 5f 79 2c 20 70  |r_x, player_y, p|
000040f0  6c 61 79 65 72 5f 64 69  72 29 3b 0a 20 20 20 20  |layer_dir);.    |
00004100  73 68 6f 77 5f 73 74 61  74 75 73 28 29 3b 0a 20  |show_status();. |
00004110  20 20 20 6d 65 73 73 61  67 65 5f 75 70 64 61 74  |   message_updat|
00004120  65 28 29 3b 20 0a 20 20  20 20 62 61 6e 6b 5f 66  |e(); .    bank_f|
00004130  6c 69 70 28 29 3b 20 20  20 20 20 20 0a 20 20 7d  |lip();      .  }|
00004140  0a 20 20 0a 20 20 69 66  28 6d 61 7a 65 5f 64 61  |.  .  if(maze_da|
00004150  74 61 20 5b 70 6c 61 79  65 72 5f 78 5d 20 5b 70  |ta [player_x] [p|
00004160  6c 61 79 65 72 5f 79 5d  20 3d 3d 20 6b 65 79 20  |layer_y] == key |
00004170  26 26 20 6f 73 5f 69 6e  6b 65 79 28 2d 39 39 29  |&& os_inkey(-99)|
00004180  29 0a 20 20 7b 0a 20 20  20 20 6d 61 7a 65 5f 64  |).  {.    maze_d|
00004190  61 74 61 20 5b 70 6c 61  79 65 72 5f 78 5d 20 5b  |ata [player_x] [|
000041a0  70 6c 61 79 65 72 5f 79  5d 20 3d 20 63 6f 72 72  |player_y] = corr|
000041b0  69 64 6f 72 3b 0a 20 20  20 20 73 63 6f 72 65 20  |idor;.    score |
000041c0  2b 3d 20 35 3b 0a 20 20  20 20 0a 20 20 20 20 64  |+= 5;.    .    d|
000041d0  69 73 70 5f 6d 65 73 73  61 67 65 28 22 59 6f 75  |isp_message("You|
000041e0  20 66 69 6e 64 20 61 20  6b 65 79 2e 22 29 3b 0a  | find a key.");.|
000041f0  20 20 20 20 0a 20 20 20  20 6d 6f 76 65 5f 63 6f  |    .    move_co|
00004200  75 6e 74 65 72 2d 2d 3b  0a 20 20 20 20 6b 65 79  |unter--;.    key|
00004210  73 2b 2b 3b 20 0a 20 20  20 20 0a 20 20 20 20 70  |s++; .    .    p|
00004220  6c 6f 74 5f 76 69 65 77  28 70 6c 61 79 65 72 5f  |lot_view(player_|
00004230  78 2c 20 70 6c 61 79 65  72 5f 79 2c 20 70 6c 61  |x, player_y, pla|
00004240  79 65 72 5f 64 69 72 29  3b 0a 20 20 20 20 73 68  |yer_dir);.    sh|
00004250  6f 77 5f 73 74 61 74 75  73 28 29 3b 0a 20 20 20  |ow_status();.   |
00004260  20 6d 65 73 73 61 67 65  5f 75 70 64 61 74 65 28  | message_update(|
00004270  29 3b 20 0a 20 20 20 20  62 61 6e 6b 5f 66 6c 69  |); .    bank_fli|
00004280  70 28 29 3b 20 20 20 20  20 20 0a 20 20 7d 0a 20  |p();      .  }. |
00004290  20 0a 20 20 69 66 28 6d  61 7a 65 5f 64 61 74 61  | .  if(maze_data|
000042a0  20 5b 70 6c 61 79 65 72  5f 78 5d 20 5b 70 6c 61  | [player_x] [pla|
000042b0  79 65 72 5f 79 5d 20 3d  3d 20 64 6f 6f 72 20 26  |yer_y] == door &|
000042c0  26 20 6f 73 5f 69 6e 6b  65 79 28 2d 39 39 29 0a  |& os_inkey(-99).|
000042d0  20 20 20 20 20 26 26 20  6b 65 79 73 20 21 3d 20  |     && keys != |
000042e0  6c 65 76 65 6c 20 26 26  20 63 68 65 61 74 20 3d  |level && cheat =|
000042f0  3d 20 46 41 4c 53 45 29  0a 20 20 7b 0a 20 20 20  |= FALSE).  {.   |
00004300  20 64 69 73 70 5f 6d 65  73 73 61 67 65 28 22 59  | disp_message("Y|
00004310  6f 75 20 6e 65 65 64 20  6d 6f 72 65 20 6b 65 79  |ou need more key|
00004320  73 21 22 29 3b 0a 20 20  20 20 70 6c 6f 74 5f 76  |s!");.    plot_v|
00004330  69 65 77 28 70 6c 61 79  65 72 5f 78 2c 20 70 6c  |iew(player_x, pl|
00004340  61 79 65 72 5f 79 2c 20  70 6c 61 79 65 72 5f 64  |ayer_y, player_d|
00004350  69 72 29 3b 0a 20 20 20  20 73 68 6f 77 5f 73 74  |ir);.    show_st|
00004360  61 74 75 73 28 29 3b 0a  20 20 20 20 6d 65 73 73  |atus();.    mess|
00004370  61 67 65 5f 75 70 64 61  74 65 28 29 3b 20 0a 20  |age_update(); . |
00004380  20 20 20 62 61 6e 6b 5f  66 6c 69 70 28 29 3b 20  |   bank_flip(); |
00004390  0a 20 20 7d 20 20 20 0a  20 20 0a 20 20 69 66 28  |.  }   .  .  if(|
000043a0  6d 61 7a 65 5f 64 61 74  61 20 5b 70 6c 61 79 65  |maze_data [playe|
000043b0  72 5f 78 5d 20 5b 70 6c  61 79 65 72 5f 79 5d 20  |r_x] [player_y] |
000043c0  3d 3d 20 64 6f 6f 72 20  26 26 20 6f 73 5f 69 6e  |== door && os_in|
000043d0  6b 65 79 28 2d 39 39 29  0a 20 20 20 20 20 26 26  |key(-99).     &&|
000043e0  20 28 6b 65 79 73 20 3d  3d 20 6c 65 76 65 6c 20  | (keys == level |
000043f0  7c 7c 20 63 68 65 61 74  20 3d 3d 20 54 52 55 45  ||| cheat == TRUE|
00004400  29 29 20 0a 20 20 7b 20  20 20 20 0a 20 20 20 20  |)) .  {    .    |
00004410  62 61 6e 6b 5f 66 6c 69  70 5f 6f 66 66 28 29 3b  |bank_flip_off();|
00004420  0a 20 20 20 20 6f 73 5f  63 6c 73 28 29 3b 0a 20  |.    os_cls();. |
00004430  20 20 20 6c 65 76 65 6c  2b 2b 3b 0a 20 20 20 20  |   level++;.    |
00004440  0a 20 20 20 20 69 66 28  6c 65 76 65 6c 20 3d 3d  |.    if(level ==|
00004450  20 31 31 29 0a 20 20 20  20 7b 0a 20 20 20 20 20  | 11).    {.     |
00004460  20 67 61 6d 65 5f 63 6f  6d 70 6c 65 74 65 28 29  | game_complete()|
00004470  3b 0a 20 20 20 20 7d 0a  20 20 20 20 65 6c 73 65  |;.    }.    else|
00004480  0a 20 20 20 20 7b 20 20  0a 20 20 20 20 20 20 73  |.    {  .      s|
00004490  63 61 6e 73 20 2b 3d 20  6c 65 76 65 6c 3b 0a 20  |cans += level;. |
000044a0  20 20 20 20 20 73 63 6f  72 65 20 2b 3d 20 6c 65  |     score += le|
000044b0  76 65 6c 20 2a 20 35 3b  0a 20 20 20 20 20 20 6f  |vel * 5;.      o|
000044c0  73 5f 74 61 62 28 30 2c  32 39 29 3b 0a 20 20 20  |s_tab(0,29);.   |
000044d0  20 20 20 70 72 69 6e 74  66 28 22 44 65 73 63 65  |   printf("Desce|
000044e0  6e 64 69 6e 67 20 74 6f  20 6c 65 76 65 6c 20 25  |nding to level %|
000044f0  64 20 2e 2e 2e 22 2c 20  6c 65 76 65 6c 29 3b 20  |d ...", level); |
00004500  20 0a 20 20 20 20 20 20  67 65 6e 65 72 61 74 65  | .      generate|
00004510  5f 6d 61 7a 65 28 6c 65  76 65 6c 29 3b 0a 20 20  |_maze(level);.  |
00004520  20 20 20 20 72 65 73 65  74 5f 70 6c 61 79 65 72  |    reset_player|
00004530  28 29 3b 0a 20 20 20 20  0a 20 20 20 20 20 20 62  |();.    .      b|
00004540  61 6e 6b 5f 66 6c 69 70  28 29 3b 0a 20 20 20 20  |ank_flip();.    |
00004550  20 20 70 6c 6f 74 5f 76  69 65 77 28 70 6c 61 79  |  plot_view(play|
00004560  65 72 5f 78 2c 20 70 6c  61 79 65 72 5f 79 2c 20  |er_x, player_y, |
00004570  70 6c 61 79 65 72 5f 64  69 72 29 3b 0a 20 20 20  |player_dir);.   |
00004580  20 20 20 73 68 6f 77 5f  73 74 61 74 75 73 28 29  |   show_status()|
00004590  3b 0a 20 20 20 20 20 20  6d 65 73 73 61 67 65 5f  |;.      message_|
000045a0  75 70 64 61 74 65 28 29  3b 20 0a 20 20 20 20 20  |update(); .     |
000045b0  20 62 61 6e 6b 5f 66 6c  69 70 28 29 3b 20 0a 20  | bank_flip(); . |
000045c0  20 20 20 7d 0a 20 20 7d  0a 20 20 0a 20 20 69 66  |   }.  }.  .  if|
000045d0  28 6d 6f 76 65 5f 63 6f  75 6e 74 65 72 20 3c 3d  |(move_counter <=|
000045e0  20 30 29 0a 20 20 7b 0a  20 20 20 20 6d 6f 76 65  | 0).  {.    move|
000045f0  5f 63 6f 75 6e 74 65 72  20 3d 20 30 3b 0a 20 20  |_counter = 0;.  |
00004600  20 20 69 66 28 63 68 65  61 74 20 3d 3d 20 46 41  |  if(cheat == FA|
00004610  4c 53 45 29 0a 20 20 20  20 7b 20 20 20 20 20 20  |LSE).    {      |
00004620  0a 20 20 20 20 20 20 67  61 6d 65 5f 73 74 61 74  |.      game_stat|
00004630  75 73 20 3d 20 64 65 61  64 3b 0a 20 20 20 20 7d  |us = dead;.    }|
00004640  0a 20 20 7d 20 20 20 20  20 0a 7d 0a 20 20 20 20  |.  }     .}.    |
00004650  20 20 20 0a 76 6f 69 64  20 64 69 73 70 5f 6d 65  |   .void disp_me|
00004660  73 73 61 67 65 28 63 68  61 72 20 2a 73 74 72 69  |ssage(char *stri|
00004670  6e 67 29 0a 7b 0a 20 20  73 70 72 69 6e 74 66 28  |ng).{.  sprintf(|
00004680  6d 65 73 73 61 67 65 2c  20 22 25 73 22 2c 20 73  |message, "%s", s|
00004690  74 72 69 6e 67 29 3b 0a  20 20 6d 5f 66 6c 61 67  |tring);.  m_flag|
000046a0  20 3d 20 54 52 55 45 3b  0a 20 20 6d 5f 62 61 73  | = TRUE;.  m_bas|
000046b0  65 5f 74 69 6d 65 20 3d  20 63 6c 6f 63 6b 28 29  |e_time = clock()|
000046c0  3b 0a 7d 20 20 20 20 0a  20 20 20 20 20 20 0a 76  |;.}    .      .v|
000046d0  6f 69 64 20 6d 65 73 73  61 67 65 5f 75 70 64 61  |oid message_upda|
000046e0  74 65 28 76 6f 69 64 29  0a 7b 0a 20 20 69 66 28  |te(void).{.  if(|
000046f0  6d 5f 66 6c 61 67 20 3d  3d 20 54 52 55 45 29 20  |m_flag == TRUE) |
00004700  0a 20 20 7b 0a 20 20 20  20 6d 5f 74 69 6d 65 72  |.  {.    m_timer|
00004710  20 3d 20 28 63 6c 6f 63  6b 28 29 20 2d 20 6d 5f  | = (clock() - m_|
00004720  62 61 73 65 5f 74 69 6d  65 29 20 2f 20 31 30 30  |base_time) / 100|
00004730  3b 0a 20 20 0a 20 20 20  20 6f 73 5f 74 61 62 28  |;.  .    os_tab(|
00004740  28 34 30 20 2d 20 73 74  72 6c 65 6e 28 6d 65 73  |(40 - strlen(mes|
00004750  73 61 67 65 29 29 20 2f  20 32 2c 20 31 29 3b 20  |sage)) / 2, 1); |
00004760  0a 20 20 20 20 70 72 69  6e 74 66 28 22 25 73 22  |.    printf("%s"|
00004770  2c 20 6d 65 73 73 61 67  65 29 3b 20 20 20 20 0a  |, message);    .|
00004780  20 20 20 0a 20 20 20 20  69 66 28 6d 5f 74 69 6d  |   .    if(m_tim|
00004790  65 72 20 3e 20 35 29 20  0a 20 20 20 20 7b 0a 20  |er > 5) .    {. |
000047a0  20 20 20 20 20 6d 5f 66  6c 61 67 20 3d 20 46 41  |     m_flag = FA|
000047b0  4c 53 45 3b 0a 20 20 20  20 7d 0a 20 20 7d 0a 7d  |LSE;.    }.  }.}|
000047c0  0a 20 0a 76 6f 69 64 20  70 6c 6f 74 5f 73 74 61  |. .void plot_sta|
000047d0  72 73 63 61 70 65 28 76  6f 69 64 29 0a 7b 0a 20  |rscape(void).{. |
000047e0  20 69 6e 74 20 6c 6f 6f  70 3b 0a 20 20 0a 20 20  | int loop;.  .  |
000047f0  6f 73 5f 67 63 6f 6c 28  30 2c 20 37 29 3b 0a 20  |os_gcol(0, 7);. |
00004800  20 0a 20 20 66 6f 72 28  6c 6f 6f 70 20 3d 20 30  | .  for(loop = 0|
00004810  3b 20 6c 6f 6f 70 20 3c  20 4e 4f 5f 53 54 41 52  |; loop < NO_STAR|
00004820  53 3b 20 6c 6f 6f 70 2b  2b 29 0a 20 20 7b 0a 20  |S; loop++).  {. |
00004830  20 20 20 6f 73 5f 70 6c  6f 74 28 36 39 2c 20 73  |   os_plot(69, s|
00004840  74 61 72 73 5b 6c 6f 6f  70 5d 5b 28 69 6e 74 29  |tars[loop][(int)|
00004850  20 70 6c 61 79 65 72 5f  64 69 72 5d 2e 78 2c 20  | player_dir].x, |
00004860  0a 20 20 20 20 09 20 20  20 20 20 20 20 20 73 74  |.    .        st|
00004870  61 72 73 5b 6c 6f 6f 70  5d 5b 28 69 6e 74 29 20  |ars[loop][(int) |
00004880  70 6c 61 79 65 72 5f 64  69 72 5d 2e 79 29 3b 0a  |player_dir].y);.|
00004890  20 20 7d 0a 20 20 0a 20  20 73 77 69 74 63 68 28  |  }.  .  switch(|
000048a0  70 6c 61 79 65 72 5f 64  69 72 29 0a 20 20 7b 0a  |player_dir).  {.|
000048b0  20 20 20 20 63 61 73 65  20 75 70 3a 0a 20 20 20  |    case up:.   |
000048c0  20 6f 73 5f 67 63 6f 6c  28 30 2c 31 29 3b 0a 20  | os_gcol(0,1);. |
000048d0  20 20 20 6f 73 5f 63 69  72 63 6c 65 66 69 6c 6c  |   os_circlefill|
000048e0  28 2d 34 30 30 2c 20 35  30 30 2c 20 35 30 29 3b  |(-400, 500, 50);|
000048f0  0a 20 20 20 20 62 72 65  61 6b 3b 0a 20 20 20 20  |.    break;.    |
00004900  0a 20 20 20 20 63 61 73  65 20 64 6f 77 6e 3a 0a  |.    case down:.|
00004910  20 20 20 20 6f 73 5f 67  63 6f 6c 28 30 2c 34 29  |    os_gcol(0,4)|
00004920  3b 0a 20 20 20 20 6f 73  5f 63 69 72 63 6c 65 66  |;.    os_circlef|
00004930  69 6c 6c 28 30 2c 20 35  30 30 2c 20 31 30 30 29  |ill(0, 500, 100)|
00004940  3b 0a 20 20 20 20 62 72  65 61 6b 3b 0a 20 20 20  |;.    break;.   |
00004950  20 0a 20 20 20 20 63 61  73 65 20 72 69 67 68 74  | .    case right|
00004960  3a 0a 20 20 20 20 6f 73  5f 67 63 6f 6c 28 30 2c  |:.    os_gcol(0,|
00004970  32 29 3b 0a 20 20 20 20  6f 73 5f 63 69 72 63 6c  |2);.    os_circl|
00004980  65 66 69 6c 6c 28 34 35  30 2c 20 34 30 30 2c 20  |efill(450, 400, |
00004990  31 35 30 29 3b 0a 20 20  20 20 62 72 65 61 6b 3b  |150);.    break;|
000049a0  0a 20 20 7d 0a 7d 0a 0a  76 6f 69 64 20 70 6c 6f  |.  }.}..void plo|
000049b0  74 5f 66 6c 6f 6f 72 28  76 6f 69 64 29 0a 7b 0a  |t_floor(void).{.|
000049c0  20 20 69 6e 74 20 6c 6f  6f 70 3b 0a 20 20 0a 20  |  int loop;.  . |
000049d0  20 66 6f 72 28 6c 6f 6f  70 20 3d 20 30 3b 20 6c  | for(loop = 0; l|
000049e0  6f 6f 70 20 3c 20 34 3b  20 6c 6f 6f 70 2b 2b 29  |oop < 4; loop++)|
000049f0  0a 20 20 7b 0a 20 20 20  20 6f 73 5f 67 63 6f 6c  |.  {.    os_gcol|
00004a00  28 30 2c 20 6c 6f 6f 70  20 2b 20 33 29 3b 0a 20  |(0, loop + 3);. |
00004a10  20 20 20 0a 20 20 20 20  6f 73 5f 72 65 63 74 61  |   .    os_recta|
00004a20  6e 67 6c 65 66 69 6c 6c  28 2d 36 34 30 2c 20 2d  |nglefill(-640, -|
00004a30  35 31 32 20 2f 20 70 6f  77 28 32 2c 20 6c 6f 6f  |512 / pow(2, loo|
00004a40  70 29 2c 20 31 32 38 30  2c 20 35 31 32 20 2f 20  |p), 1280, 512 / |
00004a50  70 6f 77 28 32 2c 20 6c  6f 6f 70 29 29 3b 0a 20  |pow(2, loop));. |
00004a60  20 7d 0a 7d 0a 0a 76 6f  69 64 20 62 61 6e 6b 5f  | }.}..void bank_|
00004a70  66 6c 69 70 28 76 6f 69  64 29 0a 7b 20 20 0a 20  |flip(void).{  . |
00004a80  20 6f 73 5f 72 65 67 73  65 74 20 72 65 67 73 3b  | os_regset regs;|
00004a90  0a 0a 20 20 6f 73 5f 62  79 74 65 28 31 39 2c 20  |..  os_byte(19, |
00004aa0  30 2c 20 30 29 3b 0a 20  20 0a 20 20 73 77 69 74  |0, 0);.  .  swit|
00004ab0  63 68 28 62 66 5f 73 74  61 74 65 29 0a 20 20 7b  |ch(bf_state).  {|
00004ac0  0a 20 20 20 20 63 61 73  65 20 31 3a 0a 20 20 20  |.    case 1:.   |
00004ad0  20 72 65 67 73 2e 72 5b  30 5d 20 3d 20 31 31 32  | regs.r[0] = 112|
00004ae0  3b 0a 20 20 20 20 72 65  67 73 2e 72 5b 31 5d 20  |;.    regs.r[1] |
00004af0  3d 20 31 3b 0a 20 20 20  20 6f 73 5f 73 77 69 28  |= 1;.    os_swi(|
00004b00  4f 53 5f 42 79 74 65 2c  20 26 72 65 67 73 29 3b  |OS_Byte, &regs);|
00004b10  0a 20 20 20 20 72 65 67  73 2e 72 5b 30 5d 20 3d  |.    regs.r[0] =|
00004b20  20 31 31 33 3b 0a 20 20  20 20 72 65 67 73 2e 72  | 113;.    regs.r|
00004b30  5b 31 5d 20 3d 20 32 3b  0a 20 20 20 20 6f 73 5f  |[1] = 2;.    os_|
00004b40  73 77 69 28 4f 53 5f 42  79 74 65 2c 20 26 72 65  |swi(OS_Byte, &re|
00004b50  67 73 29 3b 20 20 20 20  0a 20 20 20 20 62 66 5f  |gs);    .    bf_|
00004b60  73 74 61 74 65 20 3d 20  32 3b 0a 20 20 20 20 62  |state = 2;.    b|
00004b70  72 65 61 6b 3b 0a 20 20  20 20 0a 20 20 20 20 63  |reak;.    .    c|
00004b80  61 73 65 20 32 3a 0a 20  20 20 20 72 65 67 73 2e  |ase 2:.    regs.|
00004b90  72 5b 30 5d 20 3d 20 31  31 32 3b 0a 20 20 20 20  |r[0] = 112;.    |
00004ba0  72 65 67 73 2e 72 5b 31  5d 20 3d 20 32 3b 0a 20  |regs.r[1] = 2;. |
00004bb0  20 20 20 6f 73 5f 73 77  69 28 4f 53 5f 42 79 74  |   os_swi(OS_Byt|
00004bc0  65 2c 20 26 72 65 67 73  29 3b 0a 20 20 20 20 72  |e, &regs);.    r|
00004bd0  65 67 73 2e 72 5b 30 5d  20 3d 20 31 31 33 3b 0a  |egs.r[0] = 113;.|
00004be0  20 20 20 20 72 65 67 73  2e 72 5b 31 5d 20 3d 20  |    regs.r[1] = |
00004bf0  31 3b 0a 20 20 20 20 6f  73 5f 73 77 69 28 4f 53  |1;.    os_swi(OS|
00004c00  5f 42 79 74 65 2c 20 26  72 65 67 73 29 3b 20 20  |_Byte, &regs);  |
00004c10  20 0a 20 20 20 20 62 66  5f 73 74 61 74 65 20 3d  | .    bf_state =|
00004c20  20 31 3b 0a 20 20 20 20  62 72 65 61 6b 3b 0a 20  | 1;.    break;. |
00004c30  20 7d 20 0a 20 20 0a 20  20 6f 73 5f 63 6c 73 28  | } .  .  os_cls(|
00004c40  29 3b 0a 7d 0a 0a 76 6f  69 64 20 62 61 6e 6b 5f  |);.}..void bank_|
00004c50  66 6c 69 70 5f 6f 66 66  28 76 6f 69 64 29 0a 7b  |flip_off(void).{|
00004c60  20 20 0a 20 20 6f 73 5f  72 65 67 73 65 74 20 72  |  .  os_regset r|
00004c70  65 67 73 3b 0a 0a 20 20  6f 73 5f 62 79 74 65 28  |egs;..  os_byte(|
00004c80  31 39 2c 20 30 2c 20 30  29 3b 0a 20 20 0a 20 20  |19, 0, 0);.  .  |
00004c90  72 65 67 73 2e 72 5b 30  5d 20 3d 20 31 31 32 3b  |regs.r[0] = 112;|
00004ca0  0a 20 20 72 65 67 73 2e  72 5b 31 5d 20 3d 20 31  |.  regs.r[1] = 1|
00004cb0  3b 0a 20 20 6f 73 5f 73  77 69 28 4f 53 5f 42 79  |;.  os_swi(OS_By|
00004cc0  74 65 2c 20 26 72 65 67  73 29 3b 0a 20 20 72 65  |te, &regs);.  re|
00004cd0  67 73 2e 72 5b 30 5d 20  3d 20 31 31 33 3b 0a 20  |gs.r[0] = 113;. |
00004ce0  20 72 65 67 73 2e 72 5b  31 5d 20 3d 20 31 3b 0a  | regs.r[1] = 1;.|
00004cf0  20 20 6f 73 5f 73 77 69  28 4f 53 5f 42 79 74 65  |  os_swi(OS_Byte|
00004d00  2c 20 26 72 65 67 73 29  3b 20 20 0a 7d 0a 0a 76  |, &regs);  .}..v|
00004d10  6f 69 64 20 64 69 72 5f  61 72 72 6f 77 28 64 69  |oid dir_arrow(di|
00004d20  72 5f 76 61 6c 20 64 69  72 29 0a 7b 0a 20 20 73  |r_val dir).{.  s|
00004d30  77 69 74 63 68 28 64 69  72 29 20 7b 0a 20 20 20  |witch(dir) {.   |
00004d40  20 0a 20 20 20 20 63 61  73 65 20 75 70 3a 0a 20  | .    case up:. |
00004d50  20 20 20 70 72 69 6e 74  66 28 22 8b 22 29 3b 0a  |   printf(".");.|
00004d60  20 20 20 20 62 72 65 61  6b 3b 0a 20 20 20 20 0a  |    break;.    .|
00004d70  20 20 20 20 63 61 73 65  20 64 6f 77 6e 3a 0a 20  |    case down:. |
00004d80  20 20 20 70 72 69 6e 74  66 28 22 8a 22 29 3b 0a  |   printf(".");.|
00004d90  20 20 20 20 62 72 65 61  6b 3b 0a 20 20 20 20 0a  |    break;.    .|
00004da0  20 20 20 20 63 61 73 65  20 6c 65 66 74 3a 0a 20  |    case left:. |
00004db0  20 20 20 70 72 69 6e 74  66 28 22 88 22 29 3b 0a  |   printf(".");.|
00004dc0  20 20 20 20 62 72 65 61  6b 3b 0a 20 20 20 20 0a  |    break;.    .|
00004dd0  20 20 20 20 63 61 73 65  20 72 69 67 68 74 3a 0a  |    case right:.|
00004de0  20 20 20 20 70 72 69 6e  74 66 28 22 89 22 29 3b  |    printf(".");|
00004df0  0a 20 20 20 20 62 72 65  61 6b 3b 0a 20 20 20 20  |.    break;.    |
00004e00  0a 20 20 7d 20 20 0a 7d  20 20 0a 0a 76 6f 69 64  |.  }  .}  ..void|
00004e10  20 73 68 6f 77 5f 73 74  61 74 75 73 28 76 6f 69  | show_status(voi|
00004e20  64 29 0a 7b 0a 20 20 63  68 61 72 20 73 74 72 69  |d).{.  char stri|
00004e30  6e 67 5b 32 30 5d 3b 0a  20 20 0a 20 20 6f 73 5f  |ng[20];.  .  os_|
00004e40  74 61 62 28 32 2c 30 29  3b 0a 20 20 64 69 72 5f  |tab(2,0);.  dir_|
00004e50  61 72 72 6f 77 28 70 6c  61 79 65 72 5f 64 69 72  |arrow(player_dir|
00004e60  29 3b 0a 20 20 69 66 28  63 68 65 61 74 20 3d 3d  |);.  if(cheat ==|
00004e70  20 54 52 55 45 29 0a 20  20 7b 0a 20 20 20 20 63  | TRUE).  {.    c|
00004e80  65 6e 74 72 65 5f 70 72  69 6e 74 28 22 43 48 45  |entre_print("CHE|
00004e90  41 54 20 4d 4f 44 45 20  41 43 54 49 56 45 22 2c  |AT MODE ACTIVE",|
00004ea0  20 30 29 3b 0a 20 20 7d  0a 20 20 0a 20 20 6f 73  | 0);.  }.  .  os|
00004eb0  5f 63 6f 6c 6f 75 72 28  30 29 3b 0a 20 20 6f 73  |_colour(0);.  os|
00004ec0  5f 63 6f 6c 6f 75 72 28  31 32 38 20 2b 20 33 29  |_colour(128 + 3)|
00004ed0  3b 0a 20 20 6f 73 5f 74  61 62 28 33 2c 33 30 29  |;.  os_tab(3,30)|
00004ee0  3b 0a 20 20 70 72 69 6e  74 66 28 22 53 63 6f 72  |;.  printf("Scor|
00004ef0  65 20 3a 20 25 64 22 2c  20 73 63 6f 72 65 29 3b  |e : %d", score);|
00004f00  0a 20 20 6f 73 5f 74 61  62 28 32 38 2c 20 33 30  |.  os_tab(28, 30|
00004f10  29 3b 0a 20 20 70 72 69  6e 74 66 28 22 42 61 74  |);.  printf("Bat|
00004f20  74 73 20 3a 20 25 64 22  2c 20 73 63 61 6e 73 29  |ts : %d", scans)|
00004f30  3b 20 0a 20 20 73 70 72  69 6e 74 66 28 73 74 72  |; .  sprintf(str|
00004f40  69 6e 67 2c 20 22 4b 65  79 73 20 3a 20 25 64 2f  |ing, "Keys : %d/|
00004f50  25 64 22 2c 20 6b 65 79  73 2c 20 6c 65 76 65 6c  |%d", keys, level|
00004f60  29 3b 0a 20 20 63 65 6e  74 72 65 5f 70 72 69 6e  |);.  centre_prin|
00004f70  74 28 73 74 72 69 6e 67  2c 20 33 30 29 3b 0a 20  |t(string, 30);. |
00004f80  20 6f 73 5f 63 6f 6c 6f  75 72 28 37 29 3b 0a 20  | os_colour(7);. |
00004f90  20 6f 73 5f 63 6f 6c 6f  75 72 28 31 32 38 29 3b  | os_colour(128);|
00004fa0  0a 20 20 0a 20 20 6f 78  79 5f 67 61 75 67 65 28  |.  .  oxy_gauge(|
00004fb0  28 6d 6f 76 65 5f 63 6f  75 6e 74 65 72 20 2f 20  |(move_counter / |
00004fc0  28 28 6c 65 76 65 6c 20  2a 20 4d 41 5a 45 5f 4d  |((level * MAZE_M|
00004fd0  55 4c 54 29 20 2a 20 28  6c 65 76 65 6c 20 2a 20  |ULT) * (level * |
00004fe0  4d 41 5a 45 5f 4d 55 4c  54 29 29 29 20 2a 20 31  |MAZE_MULT))) * 1|
00004ff0  30 30 29 3b 0a 7d 20 0a  0a 76 6f 69 64 20 73 68  |00);.} ..void sh|
00005000  6f 77 5f 74 69 74 6c 65  5f 70 61 67 65 28 76 6f  |ow_title_page(vo|
00005010  69 64 29 0a 7b 0a 20 20  70 6c 6f 74 5f 73 74 61  |id).{.  plot_sta|
00005020  72 73 63 61 70 65 28 29  3b 0a 20 20 70 6c 6f 74  |rscape();.  plot|
00005030  5f 66 6c 6f 6f 72 28 29  3b 0a 20 20 0a 20 20 65  |_floor();.  .  e|
00005040  6e 64 5f 77 61 6c 6c 28  31 29 3b 0a 20 20 6c 65  |nd_wall(1);.  le|
00005050  66 74 5f 77 61 6c 6c 28  31 29 3b 0a 20 20 72 69  |ft_wall(1);.  ri|
00005060  67 68 74 5f 77 61 6c 6c  28 31 29 3b 0a 20 20 0a  |ght_wall(1);.  .|
00005070  20 20 6f 73 5f 63 6f 6c  6f 75 72 28 32 29 3b 0a  |  os_colour(2);.|
00005080  20 20 69 66 28 63 68 65  61 74 20 3d 3d 20 54 52  |  if(cheat == TR|
00005090  55 45 29 0a 20 20 7b 0a  20 20 20 20 63 65 6e 74  |UE).  {.    cent|
000050a0  72 65 5f 70 72 69 6e 74  28 22 43 48 45 41 54 20  |re_print("CHEAT |
000050b0  4d 4f 44 45 20 41 43 54  49 56 45 22 2c 20 30 29  |MODE ACTIVE", 0)|
000050c0  3b 0a 20 20 7d 0a 20 20  63 65 6e 74 72 65 5f 70  |;.  }.  centre_p|
000050d0  72 69 6e 74 28 22 33 44  20 2d 20 4d 41 5a 45 20  |rint("3D - MAZE |
000050e0  20 56 65 72 73 69 6f 6e  20 31 2e 30 30 22 2c 20  | Version 1.00", |
000050f0  32 29 3b 0a 20 20 6f 73  5f 63 6f 6c 6f 75 72 28  |2);.  os_colour(|
00005100  37 29 3b 0a 20 20 63 65  6e 74 72 65 5f 70 72 69  |7);.  centre_pri|
00005110  6e 74 28 22 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |nt("------------|
00005120  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 22 2c 20 33 29  |-----------", 3)|
00005130  3b 0a 20 20 63 65 6e 74  72 65 5f 70 72 69 6e 74  |;.  centre_print|
00005140  28 22 41 20 73 74 75 6e  6e 69 6e 67 6c 79 20 6f  |("A stunningly o|
00005150  72 69 67 69 6e 61 6c 20  67 61 6d 65 22 2c 20 34  |riginal game", 4|
00005160  29 3b 0a 20 20 63 65 6e  74 72 65 5f 70 72 69 6e  |);.  centre_prin|
00005170  74 28 22 62 79 20 4d 61  74 74 20 4b 6e 65 65 62  |t("by Matt Kneeb|
00005180  6f 6e 65 22 2c 20 35 29  3b 0a 20 20 0a 20 20 6f  |one", 5);.  .  o|
00005190  73 5f 63 6f 6c 6f 75 72  28 37 29 3b 0a 20 20 6f  |s_colour(7);.  o|
000051a0  73 5f 63 6f 6c 6f 75 72  28 31 32 38 29 3b 0a 7d  |s_colour(128);.}|
000051b0  0a 0a 76 6f 69 64 20 73  68 6f 77 5f 6f 70 74 69  |..void show_opti|
000051c0  6f 6e 73 28 76 6f 69 64  29 0a 7b 0a 20 20 6f 73  |ons(void).{.  os|
000051d0  5f 63 6f 6c 6f 75 72 28  31 29 3b 0a 20 20 6f 73  |_colour(1);.  os|
000051e0  5f 63 6f 6c 6f 75 72 28  31 32 38 20 2b 20 33 29  |_colour(128 + 3)|
000051f0  3b 0a 20 20 63 65 6e 74  72 65 5f 70 72 69 6e 74  |;.  centre_print|
00005200  28 22 50 72 65 73 73 20  27 51 27 20 74 6f 20 71  |("Press 'Q' to q|
00005210  75 69 74 22 2c 20 32 38  29 3b 0a 20 20 63 65 6e  |uit", 28);.  cen|
00005220  74 72 65 5f 70 72 69 6e  74 28 22 50 72 65 73 73  |tre_print("Press|
00005230  20 53 50 41 43 45 20 74  6f 20 65 6e 74 65 72 20  | SPACE to enter |
00005240  74 68 65 20 6d 61 7a 65  22 2c 20 33 30 29 3b 0a  |the maze", 30);.|
00005250  20 20 0a 20 20 6f 73 5f  63 6f 6c 6f 75 72 28 37  |  .  os_colour(7|
00005260  29 3b 0a 20 20 6f 73 5f  63 6f 6c 6f 75 72 28 31  |);.  os_colour(1|
00005270  32 38 29 3b 0a 7d 0a 0a  76 6f 69 64 20 63 65 6e  |28);.}..void cen|
00005280  74 72 65 5f 70 72 69 6e  74 28 63 68 61 72 20 2a  |tre_print(char *|
00005290  74 65 78 74 2c 20 69 6e  74 20 6c 69 6e 65 29 0a  |text, int line).|
000052a0  7b 0a 20 20 6f 73 5f 74  61 62 28 28 34 30 20 2d  |{.  os_tab((40 -|
000052b0  20 73 74 72 6c 65 6e 28  74 65 78 74 29 29 20 2f  | strlen(text)) /|
000052c0  20 32 2c 20 6c 69 6e 65  29 3b 0a 20 20 70 72 69  | 2, line);.  pri|
000052d0  6e 74 66 28 22 25 73 22  2c 20 74 65 78 74 29 3b  |ntf("%s", text);|
000052e0  0a 7d 0a 0a 76 6f 69 64  20 73 68 6f 77 5f 68 69  |.}..void show_hi|
000052f0  5f 73 63 6f 72 65 73 28  76 6f 69 64 29 0a 7b 0a  |_scores(void).{.|
00005300  20 20 69 6e 74 20 6c 6f  6f 70 3b 0a 20 20 20 0a  |  int loop;.   .|
00005310  20 20 6f 73 5f 63 6f 6c  6f 75 72 28 31 32 38 20  |  os_colour(128 |
00005320  2b 20 39 29 3b 0a 20 20  20 0a 20 20 6f 73 5f 63  |+ 9);.   .  os_c|
00005330  6f 6c 6f 75 72 28 32 29  3b 0a 20 20 63 65 6e 74  |olour(2);.  cent|
00005340  72 65 5f 70 72 69 6e 74  28 22 48 69 67 68 20 53  |re_print("High S|
00005350  63 6f 72 65 73 22 2c 20  39 29 3b 0a 20 20 0a 20  |cores", 9);.  . |
00005360  20 6f 73 5f 63 6f 6c 6f  75 72 28 37 29 3b 0a 20  | os_colour(7);. |
00005370  20 0a 20 20 66 6f 72 28  6c 6f 6f 70 20 3d 20 30  | .  for(loop = 0|
00005380  3b 20 6c 6f 6f 70 20 3c  20 36 3b 20 6c 6f 6f 70  |; loop < 6; loop|
00005390  20 2b 2b 29 0a 20 20 7b  0a 20 20 20 20 6f 73 5f  | ++).  {.    os_|
000053a0  74 61 62 28 31 31 2c 20  28 6c 6f 6f 70 20 2a 20  |tab(11, (loop * |
000053b0  32 29 20 2b 20 31 31 29  3b 0a 20 20 20 20 70 72  |2) + 11);.    pr|
000053c0  69 6e 74 66 28 22 25 73  22 2c 68 69 5f 73 63 6f  |intf("%s",hi_sco|
000053d0  72 65 73 5b 6c 6f 6f 70  5d 2e 6e 61 6d 65 29 3b  |res[loop].name);|
000053e0  0a 20 20 20 20 6f 73 5f  74 61 62 28 32 35 2c 20  |.    os_tab(25, |
000053f0  28 6c 6f 6f 70 20 2a 20  32 29 20 2b 20 31 31 29  |(loop * 2) + 11)|
00005400  3b 0a 20 20 20 20 70 72  69 6e 74 66 28 22 25 2e  |;.    printf("%.|
00005410  34 64 22 2c 20 68 69 5f  73 63 6f 72 65 73 5b 6c  |4d", hi_scores[l|
00005420  6f 6f 70 5d 2e 73 63 6f  72 65 29 3b 0a 20 20 7d  |oop].score);.  }|
00005430  0a 20 20 0a 20 20 6f 73  5f 63 6f 6c 6f 75 72 28  |.  .  os_colour(|
00005440  31 32 38 29 3b 0a 7d 0a  20 0a 76 6f 69 64 20 72  |128);.}. .void r|
00005450  65 73 65 74 5f 68 69 5f  73 63 6f 72 65 73 28 76  |eset_hi_scores(v|
00005460  6f 69 64 29 0a 7b 0a 20  20 69 6e 74 20 6c 6f 6f  |oid).{.  int loo|
00005470  70 3b 0a 20 20 0a 20 20  66 6f 72 28 6c 6f 6f 70  |p;.  .  for(loop|
00005480  20 3d 20 30 3b 20 6c 6f  6f 70 20 3c 20 36 3b 20  | = 0; loop < 6; |
00005490  6c 6f 6f 70 2b 2b 29 0a  20 20 7b 0a 20 20 20 20  |loop++).  {.    |
000054a0  73 70 72 69 6e 74 66 28  68 69 5f 73 63 6f 72 65  |sprintf(hi_score|
000054b0  73 5b 6c 6f 6f 70 5d 2e  6e 61 6d 65 2c 20 22 4d  |s[loop].name, "M|
000054c0  61 74 74 5c 6e 22 29 3b  0a 20 20 20 20 68 69 5f  |att\n");.    hi_|
000054d0  73 63 6f 72 65 73 5b 6c  6f 6f 70 5d 2e 73 63 6f  |scores[loop].sco|
000054e0  72 65 20 3d 20 28 36 20  2d 20 28 6c 6f 6f 70 20  |re = (6 - (loop |
000054f0  2b 20 31 29 29 20 2a 20  35 3b 0a 20 20 7d 0a 7d  |+ 1)) * 5;.  }.}|
00005500  0a 0a 76 6f 69 64 20 6c  6f 61 64 5f 68 69 5f 73  |..void load_hi_s|
00005510  63 6f 72 65 73 28 76 6f  69 64 29 0a 7b 0a 20 20  |cores(void).{.  |
00005520  69 6e 74 20 6c 6f 6f 70  3b 0a 20 20 46 49 4c 45  |int loop;.  FILE|
00005530  20 2a 66 69 6c 65 5f 68  61 6e 64 6c 65 3b 0a 20  | *file_handle;. |
00005540  20 0a 20 20 69 66 28 28  66 69 6c 65 5f 68 61 6e  | .  if((file_han|
00005550  64 6c 65 20 3d 20 66 6f  70 65 6e 28 22 3c 33 44  |dle = fopen("<3D|
00005560  2d 4d 61 7a 65 24 44 69  72 3e 2e 53 63 6f 72 65  |-Maze$Dir>.Score|
00005570  73 22 2c 20 22 72 22 29  29 20 3d 3d 20 4e 55 4c  |s", "r")) == NUL|
00005580  4c 29 0a 20 20 7b 0a 20  20 20 20 72 65 73 65 74  |L).  {.    reset|
00005590  5f 68 69 5f 73 63 6f 72  65 73 28 29 3b 0a 20 20  |_hi_scores();.  |
000055a0  7d 0a 20 20 0a 20 20 65  6c 73 65 0a 20 20 7b 0a  |}.  .  else.  {.|
000055b0  20 20 20 20 66 6f 72 28  6c 6f 6f 70 20 3d 20 30  |    for(loop = 0|
000055c0  3b 20 6c 6f 6f 70 20 3c  20 36 3b 20 6c 6f 6f 70  |; loop < 6; loop|
000055d0  2b 2b 29 0a 20 20 20 20  7b 0a 20 20 20 20 20 20  |++).    {.      |
000055e0  66 67 65 74 73 28 68 69  5f 73 63 6f 72 65 73 5b  |fgets(hi_scores[|
000055f0  6c 6f 6f 70 5d 2e 6e 61  6d 65 2c 20 31 33 2c 20  |loop].name, 13, |
00005600  66 69 6c 65 5f 68 61 6e  64 6c 65 29 3b 0a 20 20  |file_handle);.  |
00005610  20 20 20 20 66 73 63 61  6e 66 28 66 69 6c 65 5f  |    fscanf(file_|
00005620  68 61 6e 64 6c 65 2c 20  22 25 64 20 22 2c 20 26  |handle, "%d ", &|
00005630  68 69 5f 73 63 6f 72 65  73 5b 6c 6f 6f 70 5d 2e  |hi_scores[loop].|
00005640  73 63 6f 72 65 29 3b 0a  20 20 20 20 7d 0a 20 20  |score);.    }.  |
00005650  20 20 66 63 6c 6f 73 65  28 66 69 6c 65 5f 68 61  |  fclose(file_ha|
00005660  6e 64 6c 65 29 3b 0a 20  20 7d 0a 7d 0a 0a 76 6f  |ndle);.  }.}..vo|
00005670  69 64 20 73 61 76 65 5f  68 69 5f 73 63 6f 72 65  |id save_hi_score|
00005680  73 28 76 6f 69 64 29 0a  7b 0a 20 20 69 6e 74 20  |s(void).{.  int |
00005690  6c 6f 6f 70 3b 0a 20 20  46 49 4c 45 20 2a 66 69  |loop;.  FILE *fi|
000056a0  6c 65 5f 68 61 6e 64 6c  65 3b 0a 20 20 0a 20 20  |le_handle;.  .  |
000056b0  66 69 6c 65 5f 68 61 6e  64 6c 65 20 3d 20 66 6f  |file_handle = fo|
000056c0  70 65 6e 28 22 3c 33 44  2d 4d 61 7a 65 24 44 69  |pen("<3D-Maze$Di|
000056d0  72 3e 2e 53 63 6f 72 65  73 22 2c 20 22 77 22 29  |r>.Scores", "w")|
000056e0  3b 0a 20 20 0a 20 20 66  6f 72 28 6c 6f 6f 70 20  |;.  .  for(loop |
000056f0  3d 20 30 3b 20 6c 6f 6f  70 20 3c 20 36 3b 20 6c  |= 0; loop < 6; l|
00005700  6f 6f 70 2b 2b 29 0a 20  20 7b 0a 20 20 20 20 66  |oop++).  {.    f|
00005710  70 72 69 6e 74 66 28 66  69 6c 65 5f 68 61 6e 64  |printf(file_hand|
00005720  6c 65 2c 20 22 25 73 25  64 5c 6e 22 2c 20 68 69  |le, "%s%d\n", hi|
00005730  5f 73 63 6f 72 65 73 5b  6c 6f 6f 70 5d 2e 6e 61  |_scores[loop].na|
00005740  6d 65 2c 0a 20 20 20 20  20 20 20 20 20 20 20 20  |me,.            |
00005750  68 69 5f 73 63 6f 72 65  73 5b 6c 6f 6f 70 5d 2e  |hi_scores[loop].|
00005760  73 63 6f 72 65 29 3b 0a  20 20 7d 0a 20 20 66 63  |score);.  }.  fc|
00005770  6c 6f 73 65 28 66 69 6c  65 5f 68 61 6e 64 6c 65  |lose(file_handle|
00005780  29 3b 0a 7d 0a 0a 76 6f  69 64 20 6e 65 77 5f 68  |);.}..void new_h|
00005790  69 5f 73 63 6f 72 65 28  76 6f 69 64 29 0a 7b 0a  |i_score(void).{.|
000057a0  20 20 69 6e 74 20 6c 6f  6f 70 2c 20 6c 6f 6f 70  |  int loop, loop|
000057b0  31 3b 0a 20 20 63 68 61  72 20 73 74 72 69 6e 67  |1;.  char string|
000057c0  5b 31 34 5d 3b 0a 20 20  0a 20 20 62 61 6e 6b 5f  |[14];.  .  bank_|
000057d0  66 6c 69 70 5f 6f 66 66  28 29 3b 0a 20 20 6f 73  |flip_off();.  os|
000057e0  5f 63 6c 73 28 29 3b 0a  20 20 70 6c 6f 74 5f 66  |_cls();.  plot_f|
000057f0  6c 6f 6f 72 28 29 3b 0a  20 20 70 6c 6f 74 5f 73  |loor();.  plot_s|
00005800  74 61 72 73 63 61 70 65  28 29 3b 0a 20 20 0a 20  |tarscape();.  . |
00005810  20 6f 73 5f 63 6f 6c 6f  75 72 28 31 32 38 29 3b  | os_colour(128);|
00005820  0a 20 20 6f 73 5f 63 6f  6c 6f 75 72 28 32 29 3b  |.  os_colour(2);|
00005830  0a 20 20 0a 20 20 69 66  28 63 68 65 61 74 20 3d  |.  .  if(cheat =|
00005840  3d 20 46 41 4c 53 45 29  0a 20 20 7b 0a 20 20 20  |= FALSE).  {.   |
00005850  20 63 65 6e 74 72 65 5f  70 72 69 6e 74 28 22 43  | centre_print("C|
00005860  6f 6e 67 72 61 74 75 6c  61 74 69 6f 6e 73 21 22  |ongratulations!"|
00005870  2c 20 34 29 3b 0a 20 20  20 20 63 65 6e 74 72 65  |, 4);.    centre|
00005880  5f 70 72 69 6e 74 28 22  59 6f 75 20 68 61 76 65  |_print("You have|
00005890  20 61 20 68 69 67 68 20  73 63 6f 72 65 2e 22 2c  | a high score.",|
000058a0  20 35 29 3b 0a 20 20 0a  20 20 20 20 6f 73 5f 63  | 5);.  .    os_c|
000058b0  6f 6c 6f 75 72 28 31 29  3b 0a 20 20 0a 20 20 20  |olour(1);.  .   |
000058c0  20 63 65 6e 74 72 65 5f  70 72 69 6e 74 28 22 50  | centre_print("P|
000058d0  6c 65 61 73 65 20 65 6e  74 65 72 20 79 6f 75 72  |lease enter your|
000058e0  20 6e 61 6d 65 22 2c 37  29 3b 0a 20 20 0a 20 20  | name",7);.  .  |
000058f0  20 20 6f 73 5f 74 61 62  28 31 33 2c 39 29 3b 0a  |  os_tab(13,9);.|
00005900  20 20 20 20 70 72 69 6e  74 66 28 22 2e 2e 2e 2e  |    printf("....|
00005910  2e 2e 2e 2e 2e 2e 2e 2e  2e 22 29 3b 0a 20 20 20  |.........");.   |
00005920  20 6f 73 5f 74 61 62 28  31 33 2c 39 29 3b 0a 20  | os_tab(13,9);. |
00005930  20 20 20 66 67 65 74 73  28 73 74 72 69 6e 67 2c  |   fgets(string,|
00005940  20 31 33 2c 20 73 74 64  69 6e 29 3b 0a 20 20 7d  | 13, stdin);.  }|
00005950  0a 20 20 65 6c 73 65 0a  20 20 7b 0a 20 20 20 20  |.  else.  {.    |
00005960  73 70 72 69 6e 74 66 28  73 74 72 69 6e 67 2c 20  |sprintf(string, |
00005970  22 3c 3c 20 43 48 45 41  54 20 3e 3e 5c 6e 22 29  |"<< CHEAT >>\n")|
00005980  3b 0a 20 20 7d 0a 20 20  0a 20 20 6c 6f 6f 70 20  |;.  }.  .  loop |
00005990  3d 20 35 3b 0a 20 20 64  6f 0a 20 20 7b 0a 20 20  |= 5;.  do.  {.  |
000059a0  20 20 6c 6f 6f 70 2d 2d  3b 0a 20 20 7d 20 77 68  |  loop--;.  } wh|
000059b0  69 6c 65 28 68 69 5f 73  63 6f 72 65 73 5b 6c 6f  |ile(hi_scores[lo|
000059c0  6f 70 5d 2e 73 63 6f 72  65 20 3c 20 73 63 6f 72  |op].score < scor|
000059d0  65 20 26 26 20 6c 6f 6f  70 20 3e 20 30 29 3b 0a  |e && loop > 0);.|
000059e0  20 20 20 20 0a 20 20 6c  6f 6f 70 31 20 3d 20 35  |    .  loop1 = 5|
000059f0  3b 0a 20 20 64 6f 0a 20  20 7b 0a 20 20 20 20 68  |;.  do.  {.    h|
00005a00  69 5f 73 63 6f 72 65 73  5b 6c 6f 6f 70 31 5d 2e  |i_scores[loop1].|
00005a10  73 63 6f 72 65 20 3d 20  68 69 5f 73 63 6f 72 65  |score = hi_score|
00005a20  73 5b 6c 6f 6f 70 31 20  2d 20 31 5d 2e 73 63 6f  |s[loop1 - 1].sco|
00005a30  72 65 3b 0a 20 20 20 20  73 70 72 69 6e 74 66 28  |re;.    sprintf(|
00005a40  68 69 5f 73 63 6f 72 65  73 5b 6c 6f 6f 70 31 5d  |hi_scores[loop1]|
00005a50  2e 6e 61 6d 65 2c 20 22  25 73 22 2c 20 68 69 5f  |.name, "%s", hi_|
00005a60  73 63 6f 72 65 73 5b 6c  6f 6f 70 31 20 2d 20 31  |scores[loop1 - 1|
00005a70  5d 2e 6e 61 6d 65 29 3b  0a 20 20 20 20 0a 20 20  |].name);.    .  |
00005a80  20 20 6c 6f 6f 70 31 2d  2d 3b 0a 20 20 7d 20 77  |  loop1--;.  } w|
00005a90  68 69 6c 65 28 6c 6f 6f  70 31 20 3e 20 6c 6f 6f  |hile(loop1 > loo|
00005aa0  70 29 3b 0a 20 20 0a 20  20 68 69 5f 73 63 6f 72  |p);.  .  hi_scor|
00005ab0  65 73 5b 6c 6f 6f 70 5d  2e 73 63 6f 72 65 20 3d  |es[loop].score =|
00005ac0  20 73 63 6f 72 65 3b 0a  20 20 73 70 72 69 6e 74  | score;.  sprint|
00005ad0  66 28 68 69 5f 73 63 6f  72 65 73 5b 6c 6f 6f 70  |f(hi_scores[loop|
00005ae0  5d 2e 6e 61 6d 65 2c 20  22 25 73 22 2c 20 73 74  |].name, "%s", st|
00005af0  72 69 6e 67 29 3b 0a 20  20 0a 20 20 6f 73 5f 63  |ring);.  .  os_c|
00005b00  6f 6c 6f 75 72 28 31 32  38 29 3b 20 20 0a 7d 0a  |olour(128);  .}.|
00005b10  0a 76 6f 69 64 20 6c 6f  61 64 5f 6d 75 73 69 63  |.void load_music|
00005b20  28 76 6f 69 64 29 0a 7b  0a 20 20 46 49 4c 45 20  |(void).{.  FILE |
00005b30  2a 66 69 6c 65 5f 68 61  6e 64 6c 65 3b 0a 20 20  |*file_handle;.  |
00005b40  0a 20 20 69 66 28 28 66  69 6c 65 5f 68 61 6e 64  |.  if((file_hand|
00005b50  6c 65 20 3d 20 66 6f 70  65 6e 28 22 3c 33 44 2d  |le = fopen("<3D-|
00005b60  4d 61 7a 65 24 44 69 72  3e 2e 47 61 6d 65 4d 75  |Maze$Dir>.GameMu|
00005b70  73 69 63 22 2c 20 22 72  22 29 29 20 21 3d 20 4e  |sic", "r")) != N|
00005b80  55 4c 4c 29 0a 20 20 7b  20 20 20 20 0a 20 20 20  |ULL).  {    .   |
00005b90  20 6f 73 5f 63 6c 69 28  22 51 54 4d 4c 6f 61 64  | os_cli("QTMLoad|
00005ba0  20 3c 33 44 2d 4d 61 7a  65 24 44 69 72 3e 2e 47  | <3D-Maze$Dir>.G|
00005bb0  61 6d 65 4d 75 73 69 63  20 78 22 29 3b 0a 20 20  |ameMusic x");.  |
00005bc0  20 20 6d 75 73 69 63 5f  70 72 65 73 65 6e 74 20  |  music_present |
00005bd0  3d 20 54 52 55 45 3b 0a  20 20 20 20 66 63 6c 6f  |= TRUE;.    fclo|
00005be0  73 65 28 66 69 6c 65 5f  68 61 6e 64 6c 65 29 3b  |se(file_handle);|
00005bf0  0a 20 20 7d 0a 7d 0a 0a  76 6f 69 64 20 73 74 61  |.  }.}..void sta|
00005c00  72 74 5f 6d 75 73 69 63  28 76 6f 69 64 29 0a 7b  |rt_music(void).{|
00005c10  0a 20 20 6f 73 5f 63 6c  69 28 22 51 54 4d 53 74  |.  os_cli("QTMSt|
00005c20  61 72 74 22 29 3b 0a 7d  0a 0a 76 6f 69 64 20 73  |art");.}..void s|
00005c30  74 6f 70 5f 6d 75 73 69  63 28 76 6f 69 64 29 0a  |top_music(void).|
00005c40  7b 0a 20 20 6f 73 5f 63  6c 69 28 22 51 54 4d 53  |{.  os_cli("QTMS|
00005c50  74 6f 70 22 29 3b 0a 7d  0a 0a 76 6f 69 64 20 64  |top");.}..void d|
00005c60  69 73 61 62 6c 65 5f 65  73 63 61 70 65 28 76 6f  |isable_escape(vo|
00005c70  69 64 29 0a 7b 0a 20 20  69 6e 74 20 78 20 3d 20  |id).{.  int x = |
00005c80  31 2c 20 79 20 3d 20 30  3b 0a 20 20 0a 20 20 6f  |1, y = 0;.  .  o|
00005c90  73 5f 62 79 74 65 28 32  30 30 2c 20 26 78 2c 20  |s_byte(200, &x, |
00005ca0  26 79 29 3b 0a 7d 0a 0a  76 6f 69 64 20 65 6e 61  |&y);.}..void ena|
00005cb0  62 6c 65 5f 65 73 63 61  70 65 28 76 6f 69 64 29  |ble_escape(void)|
00005cc0  0a 7b 0a 20 20 69 6e 74  20 78 20 3d 20 30 2c 20  |.{.  int x = 0, |
00005cd0  79 20 3d 20 30 3b 0a 20  20 0a 20 20 6f 73 5f 62  |y = 0;.  .  os_b|
00005ce0  79 74 65 28 32 30 30 2c  20 26 78 2c 20 26 79 29  |yte(200, &x, &y)|
00005cf0  3b 0a 7d 20 20 0a 0a 76  6f 69 64 20 67 61 6d 65  |;.}  ..void game|
00005d00  5f 63 6f 6d 70 6c 65 74  65 28 76 6f 69 64 29 0a  |_complete(void).|
00005d10  7b 0a 20 20 73 68 6f 77  5f 74 69 74 6c 65 5f 70  |{.  show_title_p|
00005d20  61 67 65 28 29 3b 0a 20  20 0a 20 20 6f 73 5f 63  |age();.  .  os_c|
00005d30  6f 6c 6f 75 72 28 37 29  3b 0a 20 20 6f 73 5f 63  |olour(7);.  os_c|
00005d40  6f 6c 6f 75 72 28 31 32  38 20 2b 20 39 29 3b 0a  |olour(128 + 9);.|
00005d50  20 20 0a 20 20 63 65 6e  74 72 65 5f 70 72 69 6e  |  .  centre_prin|
00005d60  74 28 22 43 4f 4e 47 52  41 54 55 4c 41 54 49 4f  |t("CONGRATULATIO|
00005d70  4e 53 22 2c 20 39 29 3b  0a 20 20 63 65 6e 74 72  |NS", 9);.  centr|
00005d80  65 5f 70 72 69 6e 74 28  22 59 6f 75 20 68 61 76  |e_print("You hav|
00005d90  65 20 63 6f 6d 70 6c 65  74 65 64 22 2c 20 31 31  |e completed", 11|
00005da0  29 3b 0a 20 20 63 65 6e  74 72 65 5f 70 72 69 6e  |);.  centre_prin|
00005db0  74 28 22 33 44 20 2d 20  4d 61 7a 65 2e 22 2c 20  |t("3D - Maze.", |
00005dc0  31 32 29 3b 0a 20 20 63  65 6e 74 72 65 5f 70 72  |12);.  centre_pr|
00005dd0  69 6e 74 28 22 54 68 61  74 27 73 20 61 62 6f 75  |int("That's abou|
00005de0  74 20 69 74 2e 2e 22 2c  20 31 34 29 3b 0a 20 20  |t it..", 14);.  |
00005df0  63 65 6e 74 72 65 5f 70  72 69 6e 74 28 22 41 70  |centre_print("Ap|
00005e00  61 72 74 20 66 72 6f 6d  20 74 68 65 20 63 68 65  |art from the che|
00005e10  61 74 22 2c 20 31 35 29  3b 0a 20 20 63 65 6e 74  |at", 15);.  cent|
00005e20  72 65 5f 70 72 69 6e 74  28 22 28 75 73 65 20 27  |re_print("(use '|
00005e30  2d 66 69 73 68 27 20 61  73 20 61 6e 22 2c 20 31  |-fish' as an", 1|
00005e40  36 29 3b 0a 20 20 63 65  6e 74 72 65 5f 70 72 69  |6);.  centre_pri|
00005e50  6e 74 28 22 6f 70 74 69  6f 6e 20 69 6e 20 74 68  |nt("option in th|
00005e60  65 20 21 52 75 6e 22 2c  20 31 37 29 3b 0a 20 20  |e !Run", 17);.  |
00005e70  63 65 6e 74 72 65 5f 70  72 69 6e 74 28 22 66 69  |centre_print("fi|
00005e80  6c 65 29 22 2c 20 31 38  29 3b 0a 20 20 0a 20 20  |le)", 18);.  .  |
00005e90  6f 73 5f 63 6f 6c 6f 75  72 28 31 29 3b 0a 20 20  |os_colour(1);.  |
00005ea0  6f 73 5f 63 6f 6c 6f 75  72 28 31 32 38 20 2b 20  |os_colour(128 + |
00005eb0  33 29 3b 0a 20 20 63 65  6e 74 72 65 5f 70 72 69  |3);.  centre_pri|
00005ec0  6e 74 28 22 50 72 65 73  73 20 53 50 41 43 45 20  |nt("Press SPACE |
00005ed0  74 6f 20 63 6f 6e 74 69  6e 75 65 20 2e 2e 2e 22  |to continue ..."|
00005ee0  2c 20 33 30 29 3b 0a 20  20 0a 20 20 77 68 69 6c  |, 30);.  .  whil|
00005ef0  65 28 21 6f 73 5f 69 6e  6b 65 79 28 2d 39 39 29  |e(!os_inkey(-99)|
00005f00  29 3b 0a 20 20 0a 20 20  67 61 6d 65 5f 73 74 61  |);.  .  game_sta|
00005f10  74 75 73 20 3d 20 63 6f  6d 70 6c 65 74 65 3b 0a  |tus = complete;.|
00005f20  20 20 0a 20 20 6f 73 5f  63 6f 6c 6f 75 72 28 37  |  .  os_colour(7|
00005f30  29 3b 0a 20 20 6f 73 5f  63 6f 6c 6f 75 72 28 31  |);.  os_colour(1|
00005f40  32 38 29 3b 0a 7d 0a 20  20 0a 20 20 20 20 20 20  |28);.}.  .      |
00005f50  20 0a 20 20 0a                                    | .  .|
00005f55