diff options
Diffstat (limited to 'stone_soup/crawl-ref/source/abyss.cc')
-rw-r--r-- | stone_soup/crawl-ref/source/abyss.cc | 379 |
1 files changed, 0 insertions, 379 deletions
diff --git a/stone_soup/crawl-ref/source/abyss.cc b/stone_soup/crawl-ref/source/abyss.cc deleted file mode 100644 index 3f48ed7b35..0000000000 --- a/stone_soup/crawl-ref/source/abyss.cc +++ /dev/null @@ -1,379 +0,0 @@ -/* - * File: abyss.cc - * Summary: Misc functions (most of which don't appear to be related to priests). - * Written by: Linley Henzell - * - * Change History (most recent first): - * - * <2> 10/11/99 BCR Added Daniel's crash patch - * <1> -/--/-- LRH Created - */ - -#include "AppHdr.h" -#include "abyss.h" - -#include <stdlib.h> - -#include "externs.h" - -#include "cloud.h" -#include "monplace.h" -#include "dungeon.h" -#include "items.h" -#include "lev-pand.h" -#include "randart.h" -#include "stuff.h" - -// public for abyss generation -void generate_abyss(void) -{ - int i, j; // loop variables - int temp_rand; // probability determination {dlb} - - for (i = 5; i < (GXM - 5); i++) - { - for (j = 5; j < (GYM - 5); j++) - { - temp_rand = random2(4000); - - grd[i][j] = ((temp_rand > 999) ? DNGN_FLOOR : // 75.0% - (temp_rand > 400) ? DNGN_ROCK_WALL : // 15.0% - (temp_rand > 100) ? DNGN_STONE_WALL : // 7.5% - (temp_rand > 0) ? DNGN_METAL_WALL // 2.5% - : DNGN_CLOSED_DOOR); // 1 in 4000 - } - } - - grd[45][35] = DNGN_FLOOR; -} // end generate_abyss() - - -static void generate_area(unsigned char gx1, unsigned char gy1, - unsigned char gx2, unsigned char gy2) -{ - unsigned char i, j; - unsigned char x1, x2, y1, y2; - unsigned char items_placed = 0; - int thickness = random2(70) + 30; - int thing_created; - unsigned int rooms_done = 0; - unsigned int rooms_to_do = 0; - - int temp_rand; // probability determination {dlb} - - FixedVector < unsigned char, 5 > replaced; - - // nuke map - for (i = 0; i < GXM; i++) - { - for (j = 0; j < GYM; j++) - { - env.map[i][j] = 0; - } - } - - // generate level composition vector - for (i = 0; i < 5; i++) - { - temp_rand = random2(10000); - - replaced[i] = ((temp_rand > 4926) ? DNGN_ROCK_WALL : // 50.73% - (temp_rand > 2918) ? DNGN_STONE_WALL : // 20.08% - (temp_rand > 2004) ? DNGN_METAL_WALL : // 9.14% - (temp_rand > 1282) ? DNGN_LAVA : // 7.22% - (temp_rand > 616) ? DNGN_SHALLOW_WATER :// 6.66% - (temp_rand > 15) ? DNGN_DEEP_WATER // 6.01% - : DNGN_CLOSED_DOOR); // 0.16% - } - - if (one_chance_in(3)) - { - rooms_to_do = 1 + random2(10); - - while(true) - { - x1 = 10 + random2(GXM - 20); - y1 = 10 + random2(GYM - 20); - x2 = x1 + 1 + random2(10); - y2 = y1 + 1 + random2(10); - - if (one_chance_in(100)) - goto out_of_rooms; - - for (i = x1; i < x2; i++) // that is, [10,(GXM-1)] {dlb} - { - for (j = y1; j < y2; j++) // that is, [10,(GYM-1)] {dlb} - { - if (grd[i][j] != DNGN_UNSEEN) - goto continued; - } - } - - for (i = x1; i < x2; i++) // that is, [10,(GXM-1)] {dlb} - { - for (j = y1; j < y2; j++) // that is, [10,(GYM-1)] {dlb} - { - grd[i][j] = DNGN_FLOOR; - } - } - - continued: - rooms_done++; - - if (rooms_done >= rooms_to_do) - break; - } - } - - out_of_rooms: - for (i = gx1; i < gx2 + 1; i++) - { - for (j = gy1; j < gy2 + 1; j++) - { - if (grd[i][j] == DNGN_UNSEEN && random2(100) <= thickness) - { - grd[i][j] = DNGN_FLOOR; - - if (items_placed < 150 && one_chance_in(200)) - { - if (one_chance_in(500)) - { - thing_created = items(1, OBJ_MISCELLANY, - MISC_RUNE_OF_ZOT, true, 51, 51); - } - else - { - thing_created = items(1, OBJ_RANDOM, OBJ_RANDOM, true, - 51, 250); - } - - move_item_to_grid( &thing_created, i, j ); - - if (thing_created != NON_ITEM) - items_placed++; - } - } - } - } - - for (i = gx1; i < gx2 + 1; i++) - { - for (j = gy1; j < gy2 + 1; j++) - { - if (grd[i][j] == DNGN_UNSEEN) - grd[i][j] = replaced[random2(5)]; - - if (one_chance_in(7500)) - grd[i][j] = DNGN_EXIT_ABYSS; - - if (one_chance_in(10000)) - { - do - { - grd[i][j] = DNGN_ALTAR_ZIN + random2(12); - } - while (grd[i][j] == DNGN_ALTAR_YREDELEMNUL - || grd[i][j] == DNGN_ALTAR_VEHUMET - || grd[i][j] == DNGN_ALTAR_NEMELEX_XOBEH); - } - } - } -} - - -void area_shift(void) -/*******************/ -{ - for (unsigned int i = 0; i < MAX_MONSTERS; i++) - { - if (menv[i].type == -1) - { - continue; - } - - // remove non-nearby monsters - if (menv[i].x < you.x_pos - 10 - || menv[i].x >= you.x_pos + 11 - || menv[i].y < you.y_pos - 10 || menv[i].y >= you.y_pos + 11) - { - menv[i].type = -1; - - mgrd[menv[i].x][menv[i].y] = NON_MONSTER; - - for (unsigned int j = 0; j < NUM_MONSTER_SLOTS; j++) - { - if (menv[i].inv[j] != NON_ITEM) - { - destroy_item( menv[i].inv[j] ); - menv[i].inv[j] = NON_ITEM; - } - } - } - } - - for (int i = 5; i < (GXM - 5); i++) - { - for (int j = 5; j < (GYM - 5); j++) - { - // don't modify terrain by player - if (i >= you.x_pos - 10 && i < you.x_pos + 11 - && j >= you.y_pos - 10 && j < you.y_pos + 11) - { - continue; - } - - // nuke terrain otherwise - grd[i][j] = DNGN_UNSEEN; - - // nuke items - destroy_item_stack( i, j ); - } - } - - // shift all monsters & items to new area - for (int i = you.x_pos - 10; i < you.x_pos + 11; i++) - { - if (i < 0 || i >= GXM) - continue; - - for (int j = you.y_pos - 10; j < you.y_pos + 11; j++) - { - if (j < 0 || j >= GYM) - continue; - - const int ipos = 45 + i - you.x_pos; - const int jpos = 35 + j - you.y_pos; - - // move terrain - grd[ipos][jpos] = grd[i][j]; - - // move item - move_item_stack_to_grid( i, j, ipos, jpos ); - - // move monster - mgrd[ipos][jpos] = mgrd[i][j]; - if (mgrd[i][j] != NON_MONSTER) - { - menv[mgrd[ipos][jpos]].x = ipos; - menv[mgrd[ipos][jpos]].y = jpos; - mgrd[i][j] = NON_MONSTER; - } - - // move cloud - if (env.cgrid[i][j] != EMPTY_CLOUD) - move_cloud( env.cgrid[i][j], ipos, jpos ); - } - } - - - for (unsigned int i = 0; i < MAX_CLOUDS; i++) - { - if (env.cloud[i].type == CLOUD_NONE) - continue; - - if (env.cloud[i].x < 35 || env.cloud[i].x > 55 - || env.cloud[i].y < 25 || env.cloud[i].y > 45) - { - delete_cloud( i ); - } - } - - you.x_pos = 45; - you.y_pos = 35; - - generate_area(5, 5, (GXM - 5), (GYM - 5)); - - for (unsigned int mcount = 0; mcount < 15; mcount++) - { - mons_place( RANDOM_MONSTER, BEH_HOSTILE, MHITNOT, false, 1, 1, - LEVEL_ABYSS, PROX_AWAY_FROM_PLAYER ); // PROX_ANYWHERE? - } -} - - -void abyss_teleport( bool new_area ) -/**********************************/ -{ - int x, y, i, j, k; - - if (!new_area) - { - // try to find a good spot within the shift zone: - for (i = 0; i < 100; i++) - { - x = 16 + random2( GXM - 32 ); - y = 16 + random2( GYM - 32 ); - - if ((grd[x][y] == DNGN_FLOOR - || grd[x][y] == DNGN_SHALLOW_WATER) - && mgrd[x][y] == NON_MONSTER - && env.cgrid[x][y] == EMPTY_CLOUD) - { - break; - } - } - - if (i < 100) - { - you.x_pos = x; - you.y_pos = y; - return; - } - } - - // teleport to a new area of the abyss: - - init_pandemonium(); /* changes colours */ - - env.floor_colour = (mcolour[env.mons_alloc[9]] == BLACK) - ? LIGHTGREY : mcolour[env.mons_alloc[9]]; - - env.rock_colour = (mcolour[env.mons_alloc[8]] == BLACK) - ? LIGHTGREY : mcolour[env.mons_alloc[8]]; - - // Orbs and fixed artefacts are marked as "lost in the abyss" - for (k = 0; k < MAX_ITEMS; k++) - { - if (is_valid_item( mitm[k] )) - { - if (mitm[k].base_type == OBJ_ORBS) - { - set_unique_item_status( OBJ_ORBS, mitm[k].sub_type, - UNIQ_LOST_IN_ABYSS ); - } - else if (is_fixed_artefact( mitm[k] )) - { - set_unique_item_status( OBJ_WEAPONS, mitm[k].special, - UNIQ_LOST_IN_ABYSS ); - } - - destroy_item( k ); - } - } - - for (i = 0; i < MAX_MONSTERS; i++) - menv[i].type = -1; - - for (i = 0; i < MAX_CLOUDS; i++) - delete_cloud( i ); - - for (i = 10; i < (GXM - 9); i++) - { - for (j = 10; j < (GYM - 9); j++) - { - grd[i][j] = DNGN_UNSEEN; // so generate_area will pick it up - igrd[i][j] = NON_ITEM; - mgrd[i][j] = NON_MONSTER; - env.cgrid[i][j] = EMPTY_CLOUD; - } - } - - ASSERT( env.cloud_no == 0 ); - - you.x_pos = 45; - you.y_pos = 35; - - generate_area( 10, 10, (GXM - 10), (GYM - 10) ); - - grd[you.x_pos][you.y_pos] = DNGN_FLOOR; -} |