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, ®s); regs.r[0] = 113; regs.r[1] = 2; os_swi(OS_Byte, ®s); bf_state = 2; break; case 2: regs.r[0] = 112; regs.r[1] = 2; os_swi(OS_Byte, ®s); regs.r[0] = 113; regs.r[1] = 1; os_swi(OS_Byte, ®s); 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, ®s); regs.r[0] = 113; regs.r[1] = 1; os_swi(OS_Byte, ®s); } 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, ®s);| 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, ®s);. 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, ®s); | 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, ®s);. 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 |, ®s); .}..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