LCOV - code coverage report
Current view: top level - omega-rpg-0.90-pa9 - aux3.c (source / functions) Hit Total Coverage
Test: lcov.info Lines: 216 892 24.2 %
Date: 2017-08-31 19:31:11 Functions: 12 17 70.6 %
Branches: 127 464 27.4 %

           Branch data     Line data    Source code
       1                 :            : /* omega copyright (C) by Laurence Raphael Brothers, 1987,1988,1989 */
       2                 :            : /* aux3.c */
       3                 :            : /* some functions called by com.c, also see aux1.c, aux2.c */ 
       4                 :            : /* This is a real grab bag file. It contains functions used by
       5                 :            :    aux1.c and omega.c, as well as elsewhere. It is mainly here so aux1.c
       6                 :            :    and aux2.c are not huge */
       7                 :            :   
       8                 :            : #include "glob.h"
       9                 :            : 
      10                 :            : /* check every ten minutes */
      11                 :         46 : void tenminute_check(void)
      12                 :            : {
      13         [ +  + ]:         46 :   if (Time % 60 == 0) hourly_check();
      14                 :            :   else {
      15         [ -  + ]:         37 :     if (Current_Environment == Current_Dungeon)  wandercheck();
      16                 :         37 :     minute_status_check();
      17                 :         37 :     tenminute_status_check();
      18 [ +  - ][ +  + ]:         37 :     if ((Player.status[DISEASED] < 1) && (Player.hp < Player.maxhp))
      19                 :          1 :       Player.hp = min(Player.maxhp,Player.hp+Player.level+1);
      20 [ +  - ][ +  - ]:         37 :     if (Current_Environment != E_COUNTRYSIDE && Current_Environment != E_ABYSS)
      21                 :         37 :       indoors_random_event();
      22                 :            :   }
      23                 :         46 : }
      24                 :            : 
      25                 :            : 
      26                 :            : 
      27                 :            : /* hourly check is same as ten_minutely check except food is also
      28                 :            :    checked, and since time moves in hours out of doors, also
      29                 :            :    outdoors_random_event is possible */
      30                 :            : 
      31                 :        101 : void hourly_check(void)
      32                 :            : {
      33                 :        101 :   Player.food--;
      34                 :        101 :   foodcheck();
      35         [ +  + ]:        101 :   if (hour()==0) { /* midnight, a new day */
      36                 :          4 :     moon_check();
      37                 :          4 :     Date++;
      38                 :            :   }
      39                 :        101 :   torch_check();
      40         [ -  + ]:        101 :   if (Current_Environment == Current_Dungeon)  wandercheck();
      41                 :        101 :   minute_status_check();
      42                 :        101 :   tenminute_status_check();
      43 [ +  - ][ +  + ]:        101 :   if ((Player.status[DISEASED] == 0) && (Player.hp < Player.maxhp))
      44                 :          1 :     Player.hp = min(Player.maxhp,Player.hp+Player.level+1);
      45 [ +  + ][ +  - ]:        101 :   if (Current_Environment != E_COUNTRYSIDE && Current_Environment != E_ABYSS)
      46                 :          9 :     indoors_random_event();
      47                 :        101 : }
      48                 :            : 
      49                 :            : 
      50                 :            : 
      51                 :            : 
      52                 :         46 : void indoors_random_event(void)
      53                 :            : {
      54                 :            :   pml ml;
      55                 :            :   pol ol;
      56                 :            : 
      57   [ -  -  -  -  :         46 :   switch(random_range(1000)) {
          +  -  -  -  -  
             -  -  -  + ]
      58                 :            :   case 0: 
      59                 :          0 :     print3("You feel an unexplainable elation.");
      60                 :          0 :     morewait();
      61                 :          0 :     break;
      62                 :            :   case 1:
      63                 :          0 :     print3("You hear a distant rumbling.");
      64                 :          0 :     morewait();
      65                 :          0 :     break;
      66                 :            :   case 2:
      67                 :          0 :     print3("You realize your fly is open.");
      68                 :          0 :     morewait();
      69                 :          0 :     break;
      70                 :            :   case 3:
      71                 :          0 :     print3("You have a sudden craving for a pecan twirl.");
      72                 :          0 :     morewait();
      73                 :          0 :     break;
      74                 :            :   case 4:
      75                 :          1 :     print3("A mysterious healing flux settles over the level.");
      76                 :          1 :     morewait();
      77         [ +  + ]:          6 :     for (ml=Level->mlist;ml!=NULL;ml=ml->next)
      78         [ +  - ]:          5 :       if (ml->m->hp > 0) ml->m->hp = Monsters[ml->m->id].hp;
      79                 :          1 :     Player.hp = max(Player.hp,Player.maxhp);
      80                 :          1 :     break;
      81                 :            :   case 5:
      82                 :          0 :     print3("You discover an itch just where you can't scratch it.");
      83                 :          0 :     morewait();
      84                 :          0 :     break;
      85                 :            :   case 6:
      86                 :          0 :     print3("A cosmic ray strikes!");
      87                 :          0 :     p_damage(10,UNSTOPPABLE,"a cosmic ray");
      88                 :          0 :     morewait();
      89                 :          0 :     break;
      90                 :            :   case 7:
      91                 :          0 :     print3("You catch your second wind....");
      92                 :          0 :     Player.maxhp++;
      93                 :          0 :     Player.hp = max(Player.hp, Player.maxhp);
      94         [ #  # ]:          0 :     Player.mana = max(Player.mana, calcmana());
      95                 :          0 :     morewait();
      96                 :          0 :     break;
      97                 :            :   case 8:
      98                 :          0 :     print3("You find some spare change in a hidden pocket.");
      99                 :          0 :     morewait();
     100                 :          0 :     Player.cash += Player.level*Player.level+1;
     101                 :          0 :     break;
     102                 :            :   case 9:
     103                 :          0 :     print3("You feel strangely lucky.");
     104                 :          0 :     morewait();
     105                 :          0 :     break;
     106                 :            :   case 10:
     107                 :          0 :     print3("You trip over something hidden in a shadow...");
     108                 :          0 :     morewait();
     109                 :          0 :     ol = ((pol) checkmalloc(sizeof(oltype)));
     110                 :          0 :     ol->thing = create_object(difficulty()); /* FIXED!  12/30/98 */
     111         [ #  # ]:          0 :     assert(ol->thing); /* WDT I want to make sure... */
     112                 :          0 :     ol->next = Level->site[Player.x][Player.y].things;
     113                 :          0 :     Level->site[Player.x][Player.y].things = ol;
     114                 :          0 :     pickup();
     115                 :          0 :     break;
     116                 :            :   case 11: 
     117                 :          0 :     print3("A mysterious voice echoes all around you....");
     118                 :          0 :     morewait();
     119                 :          0 :     hint();
     120                 :          0 :     morewait();
     121                 :          0 :     break;
     122                 :            : 
     123                 :            : #if 0
     124                 :            : #ifdef NEW_BANK
     125                 :            :   case 12:
     126                 :            :     {
     127                 :            :       int num_accounts;
     128                 :            :       bank_account *account;
     129                 :            : 
     130                 :            :       num_accounts = 0;
     131                 :            :       for(account = bank; account; account = account->next_account)
     132                 :            :         {
     133                 :            :           if (account->player && account->balance > 0)
     134                 :            :             {
     135                 :            :               ++num_accounts;
     136                 :            :               account->balance = 0;
     137                 :            :             }
     138                 :            :         }
     139                 :            : 
     140                 :            :       if (num_accounts)
     141                 :            :         print3( "You feel unlucky." );
     142                 :            :       else
     143                 :            :         print3( "You feel lucky." );
     144                 :            :     }
     145                 :            :     break;
     146                 :            : 
     147                 :            :   case 13:
     148                 :            :     {
     149                 :            :       int num_accounts;
     150                 :            :       bank_account *account;
     151                 :            : 
     152                 :            :       num_accounts = 0;
     153                 :            :       for(account = bank; account; account = account->next_account)
     154                 :            :         if (account->player && account->balance > 0) ++num_accounts;
     155                 :            :                         
     156                 :            :       if (num_accounts)
     157                 :            :         {
     158                 :            :           num_accounts = random_range(num_accounts);
     159                 :            :           for(account = bank; account; account = account->next_account)
     160                 :            :             {
     161                 :            :               if (account->player)
     162                 :            :                 {
     163                 :            :                   if (0 == num_accounts)
     164                 :            :                     {
     165                 :            :                       account->balance += random_range( 4000 ) + 1000;
     166                 :            :                       break;
     167                 :            :                     }
     168                 :            : 
     169                 :            :                   --num_accounts;
     170                 :            :                 }
     171                 :            :             }
     172                 :            : 
     173                 :            :           print3( "You feel lucky." );
     174                 :            :         }
     175                 :            :       else
     176                 :            :         {
     177                 :            :           print3( "You feel unlucky." );
     178                 :            :         }
     179                 :            :     }
     180                 :            :     break;
     181                 :            : #else /* !NEW_BANK */
     182                 :            :   case 12:
     183                 :            :     if (Balance > 0)
     184                 :            :       {
     185                 :            :         print3("You get word of the failure of your bank!");
     186                 :            :         Balance = 0;
     187                 :            :       }
     188                 :            :     else
     189                 :            :       {
     190                 :            :         print3("You feel lucky.");
     191                 :            :       }
     192                 :            :     break;
     193                 :            : 
     194                 :            :   case 13:
     195                 :            :     if (Balance > 0)
     196                 :            :       {
     197                 :            :         print3("You get word of a bank error in your favor!");
     198                 :            :         Balance += 5000;
     199                 :            :       }
     200                 :            :     else
     201                 :            :       {
     202                 :            :         print3("You feel unlucky.");
     203                 :            :       }
     204                 :            :     break;
     205                 :            : #endif /* !NEW_BANK */
     206                 :            : #endif /* 0 */
     207                 :            :   }
     208                 :         46 :   dataprint();
     209                 :         46 :   showflags();
     210                 :         46 : }
     211                 :            : 
     212                 :            : 
     213                 :            : 
     214                 :        102 : void outdoors_random_event(void)
     215                 :            : {
     216                 :            :   int num,i,j;
     217                 :            :   pob ob;
     218                 :            : 
     219   [ +  -  -  -  :        102 :   switch(random_range(300)) {
          -  +  +  -  +  
             -  -  -  -  
                      + ]
     220                 :            :   case 0:
     221      [ -  -  + ]:          1 :     switch(Country[Player.x][Player.y].current_terrain_type) {
     222                 :            :     case TUNDRA: 
     223                 :          0 :       mprint("It begins to snow. Heavily.");
     224                 :          0 :       break;
     225                 :            :     case DESERT:
     226                 :          0 :       mprint("A sandstorm swirls around you.");
     227                 :          0 :       break;
     228                 :            :     default:
     229 [ +  - ][ +  - ]:          1 :       if ((Date > 75) && (Date < 330))
     230                 :          1 :         mprint("You are drenched by a sudden downpour!");
     231                 :          0 :       else mprint("It begins to snow. Heavily.");
     232                 :            :     }
     233                 :          1 :     morewait();
     234                 :          1 :     mprint("Due to the inclement weather conditions, you have become lost.");
     235                 :          1 :     morewait();
     236                 :          1 :     Precipitation+=random_range(12)+1;
     237                 :          1 :     setgamestatus(LOST);
     238                 :          1 :     break;
     239                 :            :   case 1:
     240                 :          0 :     mprint("You enter a field of brightly colored flowers...");
     241                 :          0 :     mprint("Wow, man! These are some pretty poppies...");
     242                 :          0 :     morewait();
     243                 :          0 :     mprint("poppies...");
     244                 :          0 :     morewait();
     245                 :          0 :     mprint("poppies...");
     246                 :          0 :     morewait();
     247                 :          0 :     print3("You become somewhat disoriented...");
     248                 :          0 :     setgamestatus(LOST);
     249                 :          0 :     break;
     250                 :            :   case 2:
     251                 :          0 :     mprint("You discover a sprig of athelas growing lonely in the wild.");
     252                 :          0 :     morewait();
     253                 :          0 :     mprint("Using your herbalist lore you cook a cake of lembas....");
     254                 :          0 :     morewait();
     255                 :          0 :     ob = ((pob) checkmalloc(sizeof(objtype)));
     256                 :          0 :     *ob = Objects[OB_LEMBAS];
     257                 :          0 :     gain_item(ob);
     258                 :          0 :     break;
     259                 :            :   case 3:
     260         [ #  # ]:          0 :     if (Precipitation > 0) {
     261                 :          0 :       mprint("You are struck by a bolt of lightning!");
     262                 :          0 :       p_damage(random_range(25),ELECTRICITY,"a lightning strike");
     263                 :          0 :       morewait();
     264                 :            :     }
     265                 :          0 :     else mprint("You feel static cling");
     266                 :          0 :     break;
     267                 :            :   case 4:
     268                 :          0 :     mprint("You find a fast-food establishment.");
     269                 :          0 :     morewait();
     270                 :          0 :     l_commandant();
     271                 :          0 :     break;
     272                 :            :   case 5:
     273                 :          1 :     mprint("A weird howling tornado hits from out of the West!");
     274                 :          1 :     morewait();
     275                 :          1 :     mprint("You've been caught in a chaos storm!");
     276                 :          1 :     morewait();
     277                 :          1 :     num = random_range(300);
     278         [ -  + ]:          1 :     if (num <10) {
     279                 :          0 :       mprint("Your cell-structure was disrupted!");
     280                 :          0 :       p_damage(random_range(100),UNSTOPPABLE,"a chaos storm");
     281                 :          0 :       morewait();
     282                 :            :     }
     283         [ -  + ]:          1 :     else if (num < 20) {
     284                 :          0 :       mprint("The chaos storm warps your frame!");
     285                 :          0 :       morewait();
     286                 :          0 :       mprint("Your statistical entropy has been maximized.");
     287                 :          0 :       morewait();
     288                 :          0 :       mprint("You feel average...");
     289                 :          0 :       morewait();
     290                 :          0 :       toggle_item_use(TRUE); /* FIXED! 12/30/98 */
     291                 :          0 :       Player.str = Player.maxstr = Player.con = Player.maxcon =
     292                 :          0 :         Player.dex = Player.maxdex = Player.agi = Player.maxagi =
     293                 :          0 :           Player.iq = Player.maxiq = Player.pow = Player.maxpow =
     294                 :          0 :             ((Player.maxstr+Player.maxcon+Player.maxdex+Player.maxagi+
     295                 :          0 :               Player.maxiq+Player.maxpow+12)/6);
     296                 :          0 :       toggle_item_use(FALSE); /* FIXED! 12/30/98 */
     297                 :            :     }
     298         [ -  + ]:          1 :     else if (num < 30) {
     299                 :          0 :       mprint("Your entire body glows with an eerie flickering light.");
     300                 :          0 :       morewait();
     301                 :          0 :       toggle_item_use(TRUE); /* FIXED! 12/30/98 */
     302         [ #  # ]:          0 :       for(i=1;i<MAXITEMS;i++)
     303         [ #  # ]:          0 :         if (Player.possessions[i] != NULL) {
     304                 :          0 :           Player.possessions[i]->plus++;
     305         [ #  # ]:          0 :           if (Player.possessions[i]->objchar == STICK)
     306                 :          0 :             Player.possessions[i]->charge+=10;
     307                 :          0 :           Player.possessions[i]->blessing+=10;
     308                 :            :         }
     309                 :          0 :       toggle_item_use(FALSE); /* FIXED! 12/30/98 */
     310                 :          0 :       cleanse(1);
     311                 :          0 :       mprint("You feel filled with energy!");
     312                 :          0 :       morewait();
     313                 :          0 :       Player.maxpow += 5;
     314                 :          0 :       Player.pow += 5;
     315                 :          0 :       Player.mana = Player.maxmana = calcmana() * 5;
     316                 :          0 :       mprint("You also feel weaker. Paradoxical, no?");
     317                 :          0 :       morewait();
     318                 :          0 :       Player.con -= 5;
     319                 :          0 :       Player.maxcon -= 5;
     320         [ #  # ]:          0 :       if (Player.con < 3)
     321                 :          0 :         p_death("congestive heart failure");
     322                 :            :     }
     323         [ -  + ]:          1 :     else if (num < 40) {
     324                 :          0 :       mprint("Your entire body glows black.");
     325                 :          0 :       morewait();
     326                 :          0 :       dispel(-1);
     327                 :          0 :       dispel(-1);
     328                 :          0 :       Player.pow-=10;
     329                 :          0 :       Player.mana=0;
     330                 :            :     }
     331         [ -  + ]:          1 :     else if (num < 60) {
     332                 :          0 :       mprint("The storm deposits you in a strange place....");
     333                 :          0 :       morewait();
     334                 :          0 :       setPlayerXY( random_range(COUNTRY_WIDTH), random_range(COUNTRY_LENGTH));      
     335                 :          0 :       screencheck(Player.x,Player.y);
     336                 :            :     }
     337         [ -  + ]:          1 :     else if (num < 70) {
     338                 :          0 :       mprint("A tendril of the storm condenses and falls into your hands.");
     339                 :          0 :       morewait();
     340                 :          0 :       ob = ((pob) checkmalloc(sizeof(objtype)));
     341                 :          0 :       make_artifact(ob,-1);
     342                 :          0 :       gain_item(ob);
     343                 :            :     }
     344         [ -  + ]:          1 :     else if (num < 80) {
     345         [ #  # ]:          0 :       if (gamestatusp(MOUNTED)) {
     346                 :          0 :         mprint("Your horse screams as he is transformed into an");
     347                 :          0 :         morewait();
     348                 :          0 :         mprint("imaginary unseen dead tortoise.");
     349                 :          0 :         morewait();
     350                 :          0 :         mprint("You are now on foot.");
     351                 :          0 :         morewait();
     352                 :          0 :         resetgamestatus(MOUNTED);
     353                 :            :       }
     354                 :            :       else {
     355                 :          0 :         mprint("You notice you are riding a horse. Odd. Very odd....");
     356                 :          0 :         morewait();
     357                 :          0 :         mprint("Now that's a horse of a different color!");
     358                 :          0 :         morewait();
     359                 :          0 :         setgamestatus(MOUNTED);
     360                 :            :       }
     361                 :            :     }
     362         [ -  + ]:          1 :     else if (num < 90) {
     363                 :          0 :       mprint("You feel imbued with godlike power....");
     364                 :          0 :       morewait();
     365                 :          0 :       wish(1);
     366                 :            :     }
     367         [ -  + ]:          1 :     else if (num < 100) {
     368                 :          0 :       mprint("The chaos storm has wiped your memory!");
     369                 :          0 :       morewait();
     370                 :          0 :       mprint("You feel extraordinarily naive....");
     371                 :          0 :       morewait();
     372                 :          0 :       mprint("You can't remember a thing! Not even your name.");
     373                 :          0 :       morewait();
     374                 :          0 :       Player.xp = 0;
     375                 :          0 :       Player.level = 0;
     376         [ #  # ]:          0 :       for (i=0;i<NUMRANKS;i++) Player.rank[i] = 0;
     377         [ #  # ]:          0 :       for (i=0;i<NUMSPELLS;i++) Spells[i].known = FALSE;
     378                 :          0 :       rename_player();
     379                 :            :     }
     380                 :            :     else {
     381                 :          1 :       mprint("You survive the chaos storm relatively unscathed.");
     382                 :          1 :       morewait();
     383                 :          1 :       mprint("It was a learning experience.");
     384                 :          1 :       morewait();
     385                 :          1 :       gain_experience(1000);
     386                 :            :     }
     387                 :          1 :     break;
     388                 :            :   case 6: case 7: case 8: case 9: case 10:
     389                 :          3 :     mprint("An encounter!");
     390                 :          3 :     morewait();
     391                 :          3 :     change_environment(E_TACTICAL_MAP);
     392                 :          3 :     break;
     393                 :            :   case 11:
     394                 :          0 :     mprint("You find a Traveller's Aid station with maps of the local area.");
     395                 :          0 :     morewait();
     396         [ #  # ]:          0 :     if (gamestatusp(LOST)) {
     397                 :          0 :       resetgamestatus(LOST);
     398                 :          0 :       mprint("You know where you are now.");
     399                 :            :     }
     400         [ #  # ]:          0 :     for(i=Player.x-5;i<Player.x+6;i++)
     401         [ #  # ]:          0 :       for(j=Player.y-5;j<Player.y+6;j++)
     402         [ #  # ]:          0 :         if (inbounds(i,j)) {
     403                 :          0 :           c_set(i, j, SEEN);
     404         [ #  # ]:          0 :           if (Country[i][j].current_terrain_type !=
     405                 :          0 :             Country[i][j].base_terrain_type) {
     406                 :          0 :             c_set(i, j, CHANGED);
     407                 :          0 :             Country[i][j].current_terrain_type = 
     408                 :          0 :               Country[i][j].base_terrain_type;
     409                 :            :           }
     410                 :            :         }
     411                 :          0 :     show_screen();
     412                 :          0 :     break;
     413                 :            :   case 12:
     414         [ -  + ]:          1 :     if (! gamestatusp(MOUNTED)) {
     415                 :          0 :       mprint("You develop blisters....");
     416                 :          0 :       p_damage(1,UNSTOPPABLE,"blisters");
     417                 :            :     }
     418                 :          1 :     break;
     419                 :            :   case 13:
     420                 :          0 :     mprint("You discover an itch just where you can't scratch it.");
     421                 :          0 :     break;
     422                 :            :   case 14:
     423                 :          0 :     mprint("A cosmic ray strikes!");
     424                 :          0 :     morewait();
     425                 :          0 :     p_damage(10,UNSTOPPABLE,"a cosmic ray");
     426                 :          0 :     break;
     427                 :            :   case 15:
     428                 :          0 :     mprint("You feel strangely lucky.");
     429                 :          0 :     break;
     430                 :            :   case 16:
     431                 :          0 :     mprint("The west wind carries with it a weird echoing voice....");
     432                 :            :     /* DAG hint() uses mprint, which should morewait() if needed */
     433                 :            :     /* morewait(); */
     434                 :          0 :     hint();
     435                 :          0 :     morewait();
     436                 :          0 :     break;
     437                 :            :   }
     438                 :        102 :   dataprint();
     439                 :        102 :   showflags();
     440                 :        102 : }
     441                 :            : 
     442                 :            : 
     443                 :          1 : char getlocation(void)
     444                 :            : {
     445                 :          1 :   char c = '\0';
     446                 :            : 
     447                 :          1 :   menuprint(" (enter location [HCL]) ");
     448                 :          1 :   showmenu();
     449         [ +  + ]:          2 :   while (c == '\0')
     450   [ -  +  -  - ]:          1 :     switch (c = ((char) mcigetc())) {
     451                 :          0 :       case 'h':menuprint(" High."); break;
     452                 :          1 :       case 'c':menuprint(" Center."); break;
     453                 :          0 :       case 'l':menuprint(" Low."); break;
     454                 :          0 :       default: c = '\0'; break;
     455                 :            :     }
     456                 :          1 :   showmenu();
     457                 :          1 :   return (c - 'a' + 'A');
     458                 :            : }
     459                 :            : 
     460                 :            : 
     461                 :            : /* chance for player to resist magic somehow */
     462                 :            : /* hostile_magic ranges in power from 0 (weak) to 10 (strong) */
     463                 :          0 : int magic_resist(int hostile_magic)
     464                 :            : {
     465   [ #  #  #  # ]:          0 :   if ((Player.rank[COLLEGE]+Player.rank[CIRCLE] > 0) &&
     466                 :          0 :       (Player.level/2 + random_range(20) >
     467                 :          0 :        hostile_magic + random_range(20))) {
     468         [ #  # ]:          0 :     if (Player.mana > hostile_magic * hostile_magic) {
     469                 :          0 :       mprint("Thinking fast, you defend youself with a counterspell!");
     470                 :          0 :       Player.mana -= hostile_magic * hostile_magic;
     471                 :          0 :       dataprint();
     472                 :          0 :       return(TRUE);
     473                 :            :     }
     474                 :            :   }
     475         [ #  # ]:          0 :   if (Player.level/4 + Player.status[PROTECTION] + random_range(20) > 
     476                 :          0 :       hostile_magic + random_range(30)) {
     477                 :          0 :     mprint("You resist the spell!");
     478                 :          0 :     return(TRUE);
     479                 :            :   }
     480                 :          0 :   else return(FALSE);
     481                 :            : }
     482                 :            : 
     483                 :            : 
     484                 :        102 : void terrain_check(int takestime)
     485                 :            : {
     486                 :        102 :   int faster = 0;
     487                 :            : 
     488         [ -  + ]:        102 :   if (Player.patron == DRUID) {
     489                 :          0 :     faster = 1;
     490      [ #  #  # ]:          0 :     switch(random_range(32)) {
     491                 :          0 :       case 0:print2("Along the many paths of nature..."); break;
     492                 :          0 :       case 1:print2("You move swiftly through the wilderness."); break;
     493                 :            :     }
     494                 :            :   }
     495         [ +  + ]:        102 :   else if (gamestatusp(MOUNTED)) {
     496                 :         91 :     faster = 1;
     497   [ +  +  +  + ]:         91 :     switch(random_range(32)) {
     498                 :            :       case 0:
     499                 :          8 :       case 1:print2("Clippity Clop.");break;
     500                 :          2 :       case 2:print2("....my spurs go jingle jangle jingle....");break;
     501                 :         91 :       case 3:print2("....as I go riding merrily along....");break;
     502                 :            :     }
     503                 :            :   }
     504 [ -  + ][ #  # ]:         11 :   else if (Player.possessions[O_BOOTS] &&
     505                 :          0 :       Player.possessions[O_BOOTS]->usef == I_BOOTS_7LEAGUE) {
     506                 :          0 :     takestime = 0;
     507   [ #  #  #  #  :          0 :     switch(random_range(32)) {
                      # ]
     508                 :          0 :       case 0:print2("Boingg!"); break;
     509                 :          0 :       case 1:print2("Whooosh!"); break;
     510                 :          0 :       case 2:print2("Over hill, over dale...."); break;
     511                 :          0 :       case 3:print2("...able to leap over 7 leagues in a single bound....");
     512                 :          0 :         break;
     513                 :            :     }
     514                 :          0 :   }
     515         [ -  + ]:         11 :   else if (Player.status[SHADOWFORM]) {
     516                 :          0 :     faster = 1;
     517      [ #  #  # ]:          0 :     switch(random_range(32)) {
     518                 :          0 :       case 0:print2("As swift as a shadow."); break;
     519                 :          0 :       case 1:print2("\"I walk through the trees...\""); break;
     520                 :            :     }
     521                 :            :   }
     522      [ -  -  + ]:         11 :   else switch(random_range(32)) {
     523                 :          0 :     case 0:print2("Trudge. Trudge."); break;
     524                 :          0 :     case 1:print2("The road goes ever onward...."); break;
     525                 :            :   }
     526   [ -  +  +  -  :        102 :   switch(Country[Player.x][Player.y].current_terrain_type) {
          +  -  -  -  -  
          -  -  +  +  -  
          -  -  -  -  -  
                -  -  - ]
     527                 :            :   case RIVER:
     528 [ #  # ][ #  # ]:          0 :     if ((Player.y < 6) && (Player.x > 20)) locprint("Star Lake.");
     529         [ #  # ]:          0 :     else if (Player.y < 41) {
     530         [ #  # ]:          0 :       if (Player.x < 10) locprint("Aerie River.");
     531                 :          0 :       else locprint("The Great Flood.");
     532                 :            :     }
     533         [ #  # ]:          0 :     else if (Player.x < 42) locprint("The Swamp Runs.");
     534                 :          0 :     else locprint("River Greenshriek.");
     535         [ #  # ]:          0 :     if (takestime) {
     536                 :          0 :       Time += 60;
     537                 :          0 :       hourly_check();
     538                 :          0 :       Time += 60;
     539                 :          0 :       hourly_check();
     540                 :          0 :       Time += 60;
     541                 :          0 :       hourly_check();
     542                 :            :     }
     543                 :          0 :     break;
     544                 :            :   case ROAD:
     545                 :         85 :     locprint("A well-maintained road.");
     546         [ +  + ]:         85 :     if (takestime) {
     547                 :         81 :       Time += 60;
     548                 :         81 :       hourly_check();
     549                 :            :     }
     550                 :         85 :     break;
     551                 :            :   case PLAINS:
     552                 :          5 :     locprint("A rippling sea of grass.");
     553         [ +  - ]:          5 :     if (takestime) {
     554                 :          5 :       Time += 60;
     555                 :          5 :       hourly_check();
     556         [ +  + ]:          5 :       if (! faster) {
     557                 :          2 :         Time += 60;
     558                 :          2 :         hourly_check();
     559                 :            :       }
     560                 :            :     }
     561                 :          5 :     break;
     562                 :            :   case TUNDRA:
     563                 :          0 :     locprint("The Great Northern Wastes.");
     564         [ #  # ]:          0 :     if (takestime) {
     565                 :          0 :       Time += 60;
     566                 :          0 :       hourly_check();
     567         [ #  # ]:          0 :       if (! faster) {
     568                 :          0 :         Time += 60;
     569                 :          0 :         hourly_check();
     570                 :            :       }
     571                 :            :     }
     572                 :          0 :     break;
     573                 :            :   case FOREST:
     574         [ -  + ]:          1 :     if (Player.y < 10) locprint("The Deepwood.");
     575         [ +  - ]:          1 :     else if (Player.y < 18) locprint("The Forest of Erelon.");
     576         [ #  # ]:          0 :     else if (Player.y < 46) locprint("The Great Forest.");
     577         [ +  - ]:          1 :     if (takestime) {
     578                 :          1 :       Time += 60;
     579                 :          1 :       hourly_check();
     580 [ -  + ][ #  # ]:          1 :       if (Player.rank[PRIESTHOOD] == 0 || Player.patron != DRUID) {
     581                 :          1 :         Time += 60;
     582                 :          1 :         hourly_check();
     583         [ -  + ]:          1 :         if (! faster) {
     584                 :          0 :           Time += 60;
     585                 :          0 :           hourly_check();
     586                 :            :         }
     587                 :            :       }
     588                 :            :     }
     589                 :          1 :     break;
     590                 :            :   case JUNGLE:
     591                 :          0 :     locprint("Greenshriek Jungle.");
     592         [ #  # ]:          0 :     if (takestime) {
     593                 :          0 :       Time += 60;
     594                 :          0 :       hourly_check();
     595                 :          0 :       Time += 60;
     596                 :          0 :       hourly_check();
     597         [ #  # ]:          0 :       if (! faster) {
     598                 :          0 :         Time += 60;
     599                 :          0 :         hourly_check();
     600                 :          0 :         Time += 60;
     601                 :          0 :         hourly_check();
     602                 :            :       }
     603                 :            :     }
     604                 :          0 :     break;
     605                 :            :   case DESERT:
     606                 :          0 :     locprint("The Waste of Time.");
     607         [ #  # ]:          0 :     if (takestime) {
     608                 :          0 :       Time += 60;
     609                 :          0 :       hourly_check();
     610                 :          0 :       Time += 60;
     611                 :          0 :       hourly_check();
     612         [ #  # ]:          0 :       if (! faster) {
     613                 :          0 :         Time += 60;
     614                 :          0 :         hourly_check();
     615                 :          0 :         Time += 60;
     616                 :          0 :         hourly_check();
     617                 :            :       }
     618                 :            :     }
     619                 :          0 :     break;
     620                 :            :   case MOUNTAINS:
     621 [ #  # ][ #  # ]:          0 :     if ((Player.y < 9) && (Player.x < 12))
     622                 :          0 :       locprint("The Magic Mountains");
     623 [ #  # ][ #  # ]:          0 :     else if ((Player.y < 9) && (Player.y > 2) && (Player.x < 40))
                 [ #  # ]
     624                 :          0 :       locprint("The Peaks of the Fist.");
     625         [ #  # ]:          0 :     else if (Player.x < 52)
     626                 :          0 :       locprint("The Rift Mountains.");
     627                 :          0 :     else locprint("Borderland Mountains.");
     628         [ #  # ]:          0 :     if (takestime) {
     629                 :          0 :       Time += 60;
     630                 :          0 :       hourly_check();
     631                 :          0 :       Time += 60;
     632                 :          0 :       hourly_check();
     633                 :          0 :       Time += 60;
     634                 :          0 :       hourly_check();
     635                 :          0 :       Time += 60;
     636                 :          0 :       hourly_check();
     637                 :          0 :       Time += 60;
     638                 :          0 :       hourly_check();
     639         [ #  # ]:          0 :       if (! faster) {
     640                 :          0 :         Time += 60;
     641                 :          0 :         hourly_check();
     642                 :          0 :         Time += 60;
     643                 :          0 :         hourly_check();
     644                 :          0 :         Time += 60;
     645                 :          0 :         hourly_check();
     646                 :            :       }
     647                 :            :     }
     648                 :          0 :     break;
     649                 :            :   case PASS:
     650                 :          0 :     locprint("A hidden pass.");
     651         [ #  # ]:          0 :     if (takestime) {
     652                 :          0 :       Time += 60;
     653                 :          0 :       hourly_check();
     654                 :            :     }
     655                 :          0 :     break;
     656                 :            :   case CHAOS_SEA:
     657                 :          0 :     locprint("The Sea of Chaos.");
     658         [ #  # ]:          0 :     if (takestime) {
     659                 :          0 :       Time += 60;
     660                 :          0 :       hourly_check();
     661                 :            :     }
     662                 :          0 :     mprint("You have entered the sea of chaos...");
     663                 :          0 :     morewait();
     664                 :          0 :     l_chaos();
     665                 :          0 :     break;
     666                 :            :   case SWAMP:
     667                 :          0 :     locprint("The Loathly Swamp.");
     668         [ #  # ]:          0 :     if (takestime) {
     669                 :          0 :       Time += 60;
     670                 :          0 :       hourly_check();
     671                 :          0 :       Time += 60;
     672                 :          0 :       hourly_check();
     673                 :          0 :       Time += 60;
     674                 :          0 :       hourly_check();
     675                 :          0 :       Time += 60;
     676                 :          0 :       hourly_check();
     677                 :          0 :       Time += 60;
     678                 :          0 :       hourly_check();
     679                 :          0 :       Time += 60;
     680                 :          0 :       hourly_check();
     681         [ #  # ]:          0 :       if (! faster) {
     682                 :          0 :         Time += 60;
     683                 :          0 :         hourly_check();
     684                 :          0 :         Time += 60;
     685                 :          0 :         hourly_check();
     686                 :            :       }
     687                 :            :     }
     688                 :          0 :     break;
     689                 :            :   case CITY:
     690         [ -  + ]:          1 :     if (gamestatusp(LOST)) {
     691                 :          0 :       resetgamestatus(LOST); 
     692                 :          0 :       mprint("Well, I guess you know where you are now....");
     693                 :            :     }
     694                 :          1 :     locprint("Outside Rampart, the city.");
     695                 :          1 :     break;
     696                 :            :   case VILLAGE:
     697         [ -  + ]:         10 :     if (gamestatusp(LOST)) {
     698                 :          0 :       resetgamestatus(LOST); 
     699                 :          0 :       mprint("The village guards let you know where you are....");
     700                 :            :     }
     701                 :         10 :     locprint("Outside a small village.");
     702                 :         10 :     break;
     703                 :            :   case CAVES:
     704                 :          0 :     locprint("A deserted hillside.");
     705         [ #  # ]:          0 :     if (takestime) {
     706                 :          0 :       Time += 60;
     707                 :          0 :       hourly_check();
     708                 :            :     }
     709                 :          0 :     mprint("You notice a concealed entrance into the hill.");
     710                 :          0 :     break;
     711                 :            :   case CASTLE:
     712                 :          0 :     locprint("Near a fortified castle.");
     713         [ #  # ]:          0 :     if (takestime) {
     714                 :          0 :       Time += 60;
     715                 :          0 :       hourly_check();
     716                 :            :     }
     717                 :          0 :     mprint("The castle is hewn from solid granite. The drawbridge is down.");
     718                 :          0 :     break;
     719                 :            :   case TEMPLE:
     720   [ #  #  #  #  :          0 :     switch(Country[Player.x][Player.y].aux) {
                #  #  # ]
     721                 :          0 :     case ODIN: locprint("A rough-hewn granite temple."); break;
     722                 :          0 :     case SET: locprint("A black pyramidal temple made of sandstone."); break;
     723                 :          0 :     case ATHENA: locprint("A classical marble-columned temple."); break;
     724                 :          0 :     case HECATE: locprint("A temple of ebony adorned with ivory."); break;
     725                 :          0 :     case DRUID: locprint("A temple formed of living trees."); break;
     726                 :          0 :     case DESTINY: locprint("A temple of some mysterious blue crystal."); break;
     727                 :            :     }
     728         [ #  # ]:          0 :     if (takestime) {
     729                 :          0 :       Time += 60;
     730                 :          0 :       hourly_check();
     731                 :            :     }
     732                 :          0 :     mprint("You notice an entrance conveniently at hand.");
     733                 :          0 :     break;
     734                 :            :   case MAGIC_ISLE:
     735                 :          0 :     locprint("A strange island in the midst of the Sea of Chaos.");
     736         [ #  # ]:          0 :     if (takestime) {
     737                 :          0 :       Time += 60;
     738                 :          0 :       hourly_check();
     739                 :            :     }
     740                 :          0 :     mprint("There is a narrow causeway to the island from here.");
     741                 :          0 :     break;
     742                 :            :   case STARPEAK:
     743                 :          0 :     locprint("Star Peak.");
     744         [ #  # ]:          0 :     if (takestime) {
     745                 :          0 :       Time += 60;
     746                 :          0 :       hourly_check();
     747                 :            :     }
     748                 :          0 :     mprint("The top of the mountain seems to glow with a allochroous aura.");
     749                 :          0 :     break;
     750                 :            :   case DRAGONLAIR:
     751                 :          0 :     locprint("A rocky chasm.");
     752         [ #  # ]:          0 :     if (takestime) {
     753                 :          0 :       Time += 60;
     754                 :          0 :       hourly_check();
     755                 :            :     }
     756                 :          0 :     mprint("You are at a cave entrance from which you see the glint of gold.");
     757                 :          0 :     break;
     758                 :            :   case PALACE:
     759                 :          0 :     locprint("The ruins of a once expansive palace.");
     760         [ #  # ]:          0 :     if (takestime) {
     761                 :          0 :       Time += 60;
     762                 :          0 :       hourly_check();
     763                 :            :     }
     764                 :          0 :     mprint("The palace dungeons are still intact...");
     765                 :          0 :     break;
     766                 :            :   case VOLCANO:
     767                 :          0 :     locprint("HellWell Volcano.");
     768         [ #  # ]:          0 :     if (takestime) {
     769                 :          0 :       Time += 60;
     770                 :          0 :       hourly_check();
     771                 :            :     }
     772                 :          0 :     mprint("A shimmer of heat lightning plays about the crater rim.");
     773                 :          0 :     break;
     774                 :            :   default:
     775                 :          0 :     locprint("I haven't any idea where you are!!!");
     776                 :          0 :     break;
     777                 :            :    }
     778                 :        102 :   outdoors_random_event();
     779                 :        102 : }
     780                 :            : 
     781                 :            : 
     782                 :            : 
     783                 :          2 : void countrysearch(void)
     784                 :            : {
     785                 :            :   int x,y;
     786                 :          2 :   Time+=60;
     787                 :          2 :   hourly_check();
     788         [ +  + ]:          8 :   for (x=Player.x-1;x<Player.x+2;x++)
     789         [ +  + ]:         24 :     for (y=Player.y-1;y<Player.y+2;y++)
     790         [ +  - ]:         18 :       if (inbounds(x,y)) {
     791         [ -  + ]:         18 :         if (Country[x][y].current_terrain_type !=
     792                 :         18 :             Country[x][y].base_terrain_type) {
     793                 :          0 :           clearmsg();
     794                 :          0 :           mprint("Your search was fruitful!");
     795                 :          0 :           Country[x][y].current_terrain_type=Country[x][y].base_terrain_type;
     796                 :          0 :           c_set(x, y, CHANGED);
     797                 :          0 :           mprint("You discovered:");
     798                 :          0 :           mprint(countryid(Country[x][y].base_terrain_type));
     799                 :            :         }
     800                 :            :       }
     801                 :          2 : }
     802                 :            : 
     803                 :          0 : char *countryid(Symbol terrain)
     804                 :            : {
     805   [ #  #  #  #  :          0 :   switch(terrain&0xff) {
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                #  #  # ]
     806                 :            :   case MOUNTAINS&0xff:
     807                 :          0 :     strcpy(Str1,"Almost impassable mountains");
     808                 :          0 :     break;
     809                 :            :   case PLAINS&0xff:
     810                 :          0 :     strcpy(Str1,"Seemingly endless plains");
     811                 :          0 :     break;
     812                 :            :   case TUNDRA&0xff:
     813                 :          0 :     strcpy(Str1,"A frosty stretch of tundra");
     814                 :          0 :     break;
     815                 :            :   case ROAD&0xff:
     816                 :          0 :     strcpy(Str1,"A paved highway");
     817                 :          0 :     break;
     818                 :            :   case PASS&0xff:
     819                 :          0 :     strcpy(Str1,"A secret mountain pass");
     820                 :          0 :     break;
     821                 :            :   case RIVER&0xff:
     822                 :          0 :     strcpy(Str1,"A rolling river");
     823                 :          0 :     break;
     824                 :            :   case CITY&0xff:
     825                 :          0 :     strcpy(Str1,"The city of Rampart");
     826                 :          0 :     break;
     827                 :            :   case VILLAGE&0xff:
     828                 :          0 :     strcpy(Str1,"A rural village");
     829                 :          0 :     break;
     830                 :            :   case FOREST&0xff:
     831                 :          0 :     strcpy(Str1,"A verdant forest");
     832                 :          0 :     break;
     833                 :            :   case JUNGLE&0xff:
     834                 :          0 :     strcpy(Str1,"A densely overgrown jungle");
     835                 :          0 :     break;
     836                 :            :   case SWAMP&0xff:
     837                 :          0 :     strcpy(Str1,"A swampy fen");
     838                 :          0 :     break;
     839                 :            :   case VOLCANO&0xff:
     840                 :          0 :     strcpy(Str1,"A huge active volcano");
     841                 :          0 :     break;
     842                 :            :   case CASTLE&0xff:
     843                 :          0 :     strcpy(Str1,"An imposing castle");
     844                 :          0 :     break;
     845                 :            :   case STARPEAK&0xff:
     846                 :          0 :     strcpy(Str1,"A mysterious mountain.");
     847                 :          0 :     break;
     848                 :            :   case DRAGONLAIR&0xff:
     849                 :          0 :     strcpy(Str1,"A cavern filled with treasure.");
     850                 :          0 :     break;
     851                 :            :   case PALACE&0xff:
     852                 :          0 :     strcpy(Str1,"An ancient palace ruins.");
     853                 :          0 :     break;
     854                 :            :   case MAGIC_ISLE&0xff:
     855                 :          0 :     strcpy(Str1,"An island emanating magic.");
     856                 :          0 :     break;
     857                 :            :   case CAVES&0xff:
     858                 :          0 :     strcpy(Str1,"A hidden cave entrance");
     859                 :          0 :     break;
     860                 :            :   case TEMPLE&0xff:
     861                 :          0 :     strcpy(Str1,"A neoclassical temple");
     862                 :          0 :     break;
     863                 :            :   case DESERT&0xff:
     864                 :          0 :     strcpy(Str1,"A sere desert");
     865                 :          0 :     break;
     866                 :            :   case CHAOS_SEA&0xff:
     867                 :          0 :     strcpy(Str1,"The Sea of Chaos");
     868                 :          0 :     break;
     869                 :            :   default:
     870                 :          0 :     strcpy(Str1,"I have no idea.");
     871                 :          0 :     break;
     872                 :            :   }
     873                 :          0 :   return(Str1);
     874                 :            : }
     875                 :            : 
     876                 :            : /* WDT: I removed a space which appeared after "sorcerors' guild ". */
     877                 :            : static char sitenames[][30] = { /* alphabetical listing */
     878                 :            : "alchemist", "arena", "armorer", "bank", "brothel", "casino", "castle",
     879                 :            : "city gates", "collegium magii", "condo", "department of public works",
     880                 :            : "diner", "explorers' club", "fast food", "gymnasium", "healer", 
     881                 :            : "hospice", "les crapuleux", "library", "mercenary guild",
     882                 :            : #ifdef INCLUDE_MONKS
     883                 :            : "monastery",
     884                 :            : #endif
     885                 :            : "oracle", "order of paladins", "pawn shop", "sewer entrance",
     886                 :            : "sorcerors' guild", "tavern", "temple", "thieves' guild",
     887                 :            : "tourist information"
     888                 :            : };
     889                 :            : 
     890                 :            : static int sitenums[] = {       /* the order matches sitenames[] */
     891                 :            :  L_ALCHEMIST, L_ARENA, L_ARMORER, L_BANK, L_BROTHEL, L_CASINO, L_CASTLE,
     892                 :            :  L_COUNTRYSIDE, L_COLLEGE, L_CONDO, L_DPW, L_DINER, L_CLUB, 
     893                 :            :  L_COMMANDANT, L_GYM, L_HEALER, L_CHARITY, L_CRAP, L_LIBRARY, L_MERC_GUILD, 
     894                 :            : #ifdef INCLUDE_MONKS
     895                 :            :  L_MONASTERY,
     896                 :            : #endif
     897                 :            :  L_ORACLE, L_ORDER, L_PAWN_SHOP, L_SEWER, L_SORCERORS, L_TAVERN, L_TEMPLE, 
     898                 :            :  L_THIEVES_GUILD, L_TOURIST
     899                 :            : };
     900                 :            : 
     901                 :          2 : void showknownsites(int first, int last)
     902                 :            : {
     903                 :          2 :   int i,printed=FALSE;
     904                 :            : 
     905                 :          2 :   menuclear();
     906                 :          2 :   menuprint("\nPossible Sites:\n");
     907         [ +  + ]:         62 :   for (i = first; i <= last; i++)
     908         [ +  + ]:         60 :     if (CitySiteList[sitenums[i] - CITYSITEBASE][0]) {
     909                 :         52 :       printed = TRUE;
     910                 :         52 :       menuprint(sitenames[i]);
     911                 :         52 :       menuprint("\n");
     912                 :            :     }
     913         [ -  + ]:          2 :   if (! printed)
     914                 :          0 :     menuprint("\nNo known sites match that prefix!");
     915                 :          2 :   showmenu();
     916                 :          2 : }
     917                 :            : 
     918                 :          3 : int parsecitysite()
     919                 :            : {
     920                 :            :   int first, last, pos;
     921                 :            :   char byte, prefix[80];
     922                 :          3 :   int found = 0;
     923                 :            :   int f, l;
     924                 :            : 
     925                 :          3 :   first = 0;
     926                 :          3 :   last = NUMCITYSITES - 1;
     927                 :          3 :   pos = 0;
     928                 :          3 :   print2("");
     929                 :            :   do {
     930                 :         14 :     byte = mgetc();
     931 [ +  - ][ -  + ]:         14 :     if (byte == BACKSPACE || byte == DELETE) {
     932         [ #  # ]:          0 :       if (pos > 0) {
     933                 :          0 :         prefix[--pos] = '\0';
     934                 :          0 :         byte = prefix[pos - 1];
     935                 :          0 :         f = first;
     936 [ #  # ][ #  # ]:          0 :         while (f >= 0 && !strncmp(prefix, sitenames[f], pos)) {
     937         [ #  # ]:          0 :           if (CitySiteList[sitenums[f] - CITYSITEBASE][0])
     938                 :          0 :             first = f;
     939                 :          0 :           f--;
     940                 :            :         }
     941                 :          0 :         l = last;
     942 [ #  # ][ #  # ]:          0 :         while (l < NUMCITYSITES && !strncmp(prefix, sitenames[l], pos)) {
     943         [ #  # ]:          0 :           if (CitySiteList[sitenums[l] - CITYSITEBASE][0])
     944                 :          0 :             last = l;
     945                 :          0 :           l++;
     946                 :            :         }
     947         [ #  # ]:          0 :         if (found)
     948                 :          0 :           found = 0;
     949                 :          0 :         print2(prefix);
     950                 :            :       }
     951         [ #  # ]:          0 :       if (pos == 0) {
     952                 :          0 :         first = 0;
     953                 :          0 :         last = NUMCITYSITES - 1;
     954                 :          0 :         found = 0;
     955                 :          0 :         print2("");
     956                 :            :       }
     957                 :            :     }
     958         [ -  + ]:         14 :     else if (byte == ESCAPE) {
     959                 :          0 :       xredraw();
     960                 :          0 :       return ABORT;
     961                 :            :     }
     962         [ +  + ]:         14 :     else if (byte == '?')
     963                 :          2 :       showknownsites(first, last);
     964         [ +  + ]:         12 :     else if (byte != '\n') {
     965 [ +  - ][ -  + ]:          9 :       if (byte >= 'A' && byte <= 'Z') 
     966                 :          0 :         byte += 'a' - 'A';
     967         [ +  + ]:          9 :       if (found)
     968                 :          4 :         continue;
     969                 :          5 :       f = first;
     970                 :          5 :       l = last;
     971 [ +  - ][ +  + ]:         36 :       while (f < NUMCITYSITES &&
     972         [ -  + ]:         33 :           (!CitySiteList[sitenums[f] - CITYSITEBASE][0] ||
     973         [ +  + ]:         33 :           strlen(sitenames[f]) < pos || sitenames[f][pos] < byte))
     974                 :         31 :         f++;
     975 [ +  - ][ +  + ]:         61 :       while (l >= 0 && (!CitySiteList[sitenums[l] - CITYSITEBASE][0] ||
                 [ -  + ]
     976         [ +  + ]:         52 :           strlen(sitenames[l]) < pos || sitenames[l][pos] > byte))
     977                 :         56 :         l--;
     978         [ -  + ]:          5 :       if (l < f)
     979                 :          0 :         continue;
     980                 :          5 :       prefix[pos++] = byte;
     981                 :          5 :       prefix[pos] = '\0';
     982                 :          5 :       nprint2(prefix + pos - 1);
     983                 :          5 :       first = f;
     984                 :          5 :       last = l;
     985 [ +  + ][ +  - ]:          5 :       if (first == last && !found) {    /* unique name */
     986                 :          3 :         found = 1;
     987                 :          3 :         nprint2(sitenames[first] + pos);
     988                 :            :       }
     989                 :            :     }
     990         [ +  + ]:         14 :   } while (byte != '\n');
     991                 :          3 :   xredraw();
     992         [ +  - ]:          3 :   if (found)
     993                 :          3 :     return sitenums[first] - CITYSITEBASE;
     994                 :            :   else {
     995                 :          0 :     print3("That is an ambiguous abbreviation!");
     996                 :          3 :     return ABORT;
     997                 :            :   }
     998                 :            : }
     999                 :            : 
    1000                 :            : 
    1001                 :            : /* are there hostile monsters within 2 moves? */
    1002                 :          3 : int hostilemonstersnear(void)
    1003                 :            : {
    1004                 :          3 :   int i,j,hostile = FALSE;
    1005                 :            : 
    1006 [ +  + ][ +  - ]:         18 :   for (i=Player.x-2;((i<Player.x+3)&&(! hostile));i++)
    1007 [ +  + ][ +  - ]:         90 :     for (j=Player.y-2;((j<Player.y+3)&&(! hostile));j++)
    1008         [ +  - ]:         75 :       if (inbounds(i,j))
    1009         [ -  + ]:         75 :         if (Level->site[i][j].creature != NULL)
    1010                 :          0 :           hostile = m_statusp(Level->site[i][j].creature,HOSTILE);
    1011                 :            :   
    1012                 :          3 :   return(hostile);
    1013                 :            : }
    1014                 :            : 
    1015                 :            : /* random effects from some of stones in villages */  
    1016                 :            : /* if alignment of stone is alignment of player, gets done sooner */
    1017                 :          1 : int stonecheck(int alignment)
    1018                 :            : {
    1019                 :          1 :   int *stone,match=FALSE,cycle=FALSE,i;
    1020                 :            : 
    1021         [ -  + ]:          1 :   if (alignment == 1) {
    1022                 :          0 :     stone = &Lawstone;
    1023                 :          0 :     match = Player.alignment > 0;
    1024                 :            :   }
    1025         [ -  + ]:          1 :   else if (alignment == -1) {
    1026                 :          0 :     stone = &Chaostone;
    1027                 :          0 :     match = Player.alignment < 0;
    1028                 :            :   }
    1029                 :            :   else {
    1030                 :          1 :     stone = &Mindstone;
    1031                 :          1 :     match = FALSE;
    1032                 :            :   }
    1033         [ -  + ]:          1 :   *stone += random_range(4) + (match ? random_range(4) : 0);
    1034   [ +  -  -  -  :          1 :   switch((*stone)++) {
          -  -  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
             -  -  -  - ]
    1035                 :            :   case 0:case 2:case 4:case 6:case 8:case 10:case 12:case 14:case 16:case 18:
    1036                 :            :   case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:
    1037                 :          1 :   case 38:case 40: print1("The stone glows grey.");
    1038                 :          1 :     print2("Not much seems to happen this time."); 
    1039                 :          1 :     (*stone)--;
    1040                 :          1 :     break;
    1041                 :          0 :   case 1: print1("The stone glows black"); 
    1042                 :          0 :     print2("A burden has been removed from your shoulders.....");
    1043                 :          0 :     print3("Your pack has disintegrated!");
    1044         [ #  # ]:          0 :     for(i=0;i<MAXPACK;i++) 
    1045         [ #  # ]:          0 :       if (Player.pack[i] != NULL) {
    1046                 :          0 :         free_obj( Player.pack[i], TRUE );
    1047                 :          0 :         Player.pack[i] = NULL;
    1048                 :            :       }
    1049                 :          0 :     Player.packptr = 0;
    1050                 :          0 :     break;
    1051                 :          0 :   case 3: print1("The stone glows microwave");
    1052                 :          0 :     print2("A vortex of antimana spins about you!");
    1053                 :          0 :     morewait();
    1054                 :          0 :     dispel(-1);
    1055                 :          0 :     break;
    1056                 :          0 :   case 5: print1("The stone glows infrared");
    1057                 :          0 :     print2("A portal opens nearby and an obviously confused monster appears!");
    1058                 :          0 :     summon(-1,-1);
    1059                 :          0 :     morewait();
    1060                 :          0 :     break;
    1061                 :          0 :   case 7: print1("The stone glows brick red");
    1062                 :          0 :     print2("A gold piece falls from the heavens into your money pouch!");
    1063                 :          0 :     Player.cash++;
    1064                 :          0 :     break;
    1065                 :          0 :   case 9: print1("The stone glows cherry red");
    1066                 :          0 :     print2("A flush of warmth spreads through your body.");
    1067                 :          0 :     augment(1);
    1068                 :          0 :     break;
    1069                 :          0 :   case 11: print1("The stone glows orange");
    1070                 :          0 :     print2("A flux of energy blasts you!"); 
    1071                 :          0 :     manastorm(Player.x,Player.y,random_range(Player.maxhp)+1);
    1072                 :          0 :     break;
    1073                 :          0 :   case 13: print1("The stone glows lemon yellow");
    1074                 :          0 :     print2("You're surrounded by enemies! You begin to foam at the mouth.");
    1075                 :          0 :     Player.status[BERSERK] += 10;
    1076                 :          0 :     break;
    1077                 :          0 :   case 15: print1("The stone glows yellow");
    1078                 :          0 :     print2("Oh no! The DREADED AQUAE MORTIS!");
    1079                 :          0 :     morewait();
    1080                 :          0 :     print2("No, wait, it's just your imagination.");
    1081                 :          0 :     break;
    1082                 :          0 :   case 17: print1("The stone glows chartreuse");
    1083                 :          0 :     print2("Your joints stiffen up.");
    1084                 :          0 :     Player.agi -= 3;
    1085                 :          0 :     break;
    1086                 :          0 :   case 19: print1("The stone glows green");
    1087                 :          0 :     print2("You come down with an acute case of Advanced Leprosy.");
    1088                 :          0 :     Player.status[DISEASED] = 1100;
    1089                 :          0 :     Player.hp = 1;
    1090                 :          0 :     Player.dex -= 5;
    1091                 :          0 :     break;
    1092                 :          0 :   case 21: print1("The stone glows forest green");
    1093                 :          0 :     print2("You feel wonderful!");
    1094                 :          0 :     Player.status[HERO]+=10;
    1095                 :          0 :     break;
    1096                 :          0 :   case 23: print1("The stone glows cyan");
    1097                 :          0 :     print2("You feel a strange twisting sensation....");
    1098                 :          0 :     morewait();
    1099                 :          0 :     strategic_teleport(-1);
    1100                 :          0 :     break;
    1101                 :          0 :   case 25: print1("The stone glows blue");
    1102                 :          0 :     morewait();
    1103                 :          0 :     print1("You feel a tingle of an unearthly intuition:");
    1104                 :          0 :     morewait();
    1105                 :          0 :     hint();
    1106                 :          0 :     break;
    1107                 :          0 :   case 27: print1("The stone glows navy blue");
    1108                 :          0 :     print2("A sudden shock of knowledge overcomes you.");
    1109                 :          0 :     morewait();
    1110                 :          0 :     clearmsg();
    1111                 :          0 :     identify(1);
    1112                 :          0 :     knowledge(1);
    1113                 :          0 :     break;
    1114                 :          0 :   case 29: print1("The stone glows blue-violet");
    1115                 :          0 :     print2("You feel forgetful.");
    1116         [ #  # ]:          0 :     for(i=0;i<NUMSPELLS;i++) 
    1117         [ #  # ]:          0 :       if (Spells[i].known) {
    1118                 :          0 :         Spells[i].known = FALSE;
    1119                 :          0 :         break;
    1120                 :            :       }
    1121                 :          0 :     break;
    1122                 :          0 :   case 31: print1("The stone glows violet");
    1123                 :          0 :     morewait();
    1124                 :          0 :     acquire(0);
    1125                 :          0 :     break;
    1126                 :          0 :   case 33: print1("The stone glows deep purple");
    1127                 :          0 :     print2("You vanish.");
    1128                 :          0 :     Player.status[INVISIBLE]+=10;
    1129                 :          0 :     break;
    1130                 :          0 :   case 35: print1("The stone glows ultraviolet");
    1131                 :          0 :     print2("All your hair rises up on end.... A bolt of lightning hits you!");
    1132                 :          0 :     p_damage(random_range(Player.maxhp),ELECTRICITY,"mystic lightning");
    1133                 :          0 :     break;
    1134                 :          0 :   case 37: print1("The stone glows roentgen");
    1135                 :          0 :     print2("You feel more experienced.");
    1136                 :          0 :     gain_experience((Player.level+1)*250);
    1137                 :          0 :     break;
    1138                 :          0 :   case 39: print1("The stone glows gamma"); 
    1139                 :          0 :     print2("Your left hand shines silvery, and your right emits a golden aura."); 
    1140                 :          0 :     morewait();
    1141                 :          0 :     enchant(1);
    1142                 :          0 :     bless(1);
    1143                 :          0 :     print3("Your hands stop glowing.");
    1144                 :          0 :     break;
    1145                 :            :   case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 48:case 49:
    1146                 :          0 :     print1("The stone glows cosmic!");
    1147                 :          0 :     print2("The stone's energy field quiets for a moment...");
    1148                 :          0 :     *stone = 50;
    1149                 :          0 :     cycle = TRUE;
    1150                 :          0 :     break;  
    1151                 :          0 :   default: print1("The stone glows polka-dot (?!?!?!?)");
    1152                 :          0 :     print2("You feel a strange twisting sensation....");
    1153                 :          0 :     morewait();
    1154                 :          0 :     *stone = 0;
    1155                 :          0 :     strategic_teleport(-1);
    1156                 :          0 :     break;
    1157                 :            :   }
    1158                 :          1 :   calc_melee();
    1159                 :          1 :   return(cycle);
    1160                 :            : }
    1161                 :            : 
    1162                 :          0 : void alert_guards(void)
    1163                 :            : {
    1164                 :          0 :   int foundguard=FALSE;
    1165                 :            :   pml ml;
    1166                 :          0 :   int suppress = 0;
    1167         [ #  # ]:          0 :   for(ml=Level->mlist;ml!=NULL;ml=ml->next)
    1168 [ #  # ][ #  # ]:          0 :     if (((ml->m->id == GUARD) ||
    1169 [ #  # ][ #  # ]:          0 :          ((ml->m->id == HISCORE_NPC) && (ml->m->aux2 == 15))) && /*justiciar*/
    1170                 :          0 :         (ml->m->hp > 0)) {
    1171                 :          0 :       foundguard=TRUE;
    1172                 :          0 :       m_status_set(ml->m,AWAKE);
    1173                 :          0 :       m_status_set(ml->m,HOSTILE);
    1174                 :            :     }
    1175         [ #  # ]:          0 :   if (foundguard) {
    1176                 :          0 :     mprint("You hear a whistle and the sound of running feet!");
    1177         [ #  # ]:          0 :     if (Current_Environment == E_CITY)
    1178                 :          0 :       Level->site[40][60].p_locf = L_NO_OP; /* pacify_guards restores this */
    1179                 :            :   }
    1180 [ #  # ][ #  # ]:          0 :   if ((! foundguard) && (Current_Environment == E_CITY) &&
                 [ #  # ]
    1181                 :          0 :       !gamestatusp(DESTROYED_ORDER)) {
    1182                 :          0 :     suppress = gamestatusp(SUPPRESS_PRINTING);
    1183                 :          0 :     resetgamestatus(SUPPRESS_PRINTING);
    1184                 :          0 :     print2("The last member of the Order of Paladins dies....");
    1185                 :          0 :     morewait();
    1186                 :          0 :     gain_experience(1000);
    1187                 :          0 :     Player.alignment -= 250;
    1188         [ #  # ]:          0 :     if (! gamestatusp(KILLED_LAWBRINGER)) {
    1189                 :          0 :       print1("A chime sounds from far away.... The sound grows stronger....");
    1190                 :          0 :       print2("Suddenly the great shadowy form of the LawBringer appears over");
    1191                 :          0 :       print3("the city. He points his finger at you....");
    1192                 :          0 :       morewait();
    1193                 :          0 :       print1("\"Cursed art thou, minion of chaos! May thy strength fail thee");
    1194                 :          0 :       print2("in thy hour of need!\" You feel an unearthly shiver as the");
    1195                 :          0 :       print3("LawBringer waves his palm across the city skies....");
    1196                 :          0 :       morewait();
    1197                 :          0 :       Player.str /= 2;
    1198                 :          0 :       dataprint();
    1199                 :          0 :       print1("You hear a bell tolling, and eerie moans all around you....");
    1200                 :          0 :       print2("Suddenly, the image of the LawBringer is gone.");
    1201                 :          0 :       print3("You hear a guardsman's whistle in the distance!");
    1202                 :          0 :       morewait();
    1203                 :          0 :       resurrect_guards();
    1204                 :            :     }
    1205                 :            :     else {
    1206                 :          0 :       print1("The Order's magical defenses have dropped, and the");
    1207                 :          0 :       print2("Legions of Chaos strike....");
    1208                 :          0 :       morewait();
    1209                 :          0 :       print1("The city shakes! An earthquake has struck!");
    1210                 :          0 :       print2("Cracks open in the street, and a chasm engulfs the Order HQ!");
    1211                 :          0 :       print3("Flames lick across the sky and you hear wild laughter....");
    1212                 :          0 :       morewait();
    1213                 :          0 :       gain_experience(5000);
    1214                 :          0 :       destroy_order();
    1215                 :            :     }
    1216                 :            :   }
    1217         [ #  # ]:          0 :   if (suppress)
    1218                 :          0 :     resetgamestatus(SUPPRESS_PRINTING);
    1219                 :          0 : }
    1220                 :            : 
    1221                 :            : 
    1222                 :            : /* can only occur when player is in city, so OK to use Level */
    1223                 :          0 : void destroy_order(void)
    1224                 :            : {
    1225                 :            :   int i,j;
    1226                 :          0 :   setgamestatus(DESTROYED_ORDER);
    1227         [ #  # ]:          0 :   if (Level != City) print1("Zounds! A Serious Mistake!");
    1228                 :            :   else 
    1229         [ #  # ]:          0 :     for(i=35;i<46;i++)
    1230         [ #  # ]:          0 :       for(j=60;j<63;j++) {
    1231 [ #  # ][ #  # ]:          0 :         if (i == 40 && (j == 60 || j == 61)) {
                 [ #  # ]
    1232                 :          0 :           lreset(i,j,SECRET);
    1233                 :          0 :           Level->site[i][j].locchar = FLOOR;
    1234                 :          0 :           Level->site[i][j].p_locf = L_NO_OP;
    1235                 :          0 :           lset(i, j, CHANGED);
    1236                 :            :         }
    1237                 :            :         else {
    1238                 :          0 :           Level->site[i][j].locchar = RUBBLE;
    1239                 :          0 :           Level->site[i][j].p_locf = L_RUBBLE;
    1240                 :          0 :           lset(i, j, CHANGED);
    1241                 :            :         }
    1242         [ #  # ]:          0 :         if (Level->site[i][j].creature != NULL) {
    1243                 :          0 :           Level->site[i][j].creature->hp = -1;
    1244                 :          0 :           Level->site[i][j].creature = NULL;
    1245                 :            :         }
    1246                 :          0 :         make_site_monster(i,j,GHOST);
    1247                 :          0 :         Level->site[i][j].creature->monstring = "ghost of a Paladin";
    1248                 :          0 :         m_status_set(Level->site[i][j].creature,HOSTILE);
    1249                 :            :       }
    1250                 :          0 : }
    1251                 :            : 
    1252                 :            : 
    1253                 :            : 
    1254                 :         74 : int maneuvers(void)
    1255                 :            : {
    1256                 :            :   int m;
    1257                 :            : 
    1258                 :         74 :   m = 2 + Player.level/7;
    1259         [ -  + ]:         74 :   if (Player.rank[ARENA]) m++;
    1260         [ -  + ]:         74 :   if (Player.status[HASTED])
    1261                 :          0 :     m *= 2;
    1262         [ -  + ]:         74 :   if (Player.status[SLOWED])
    1263                 :          0 :     m /= 2;
    1264         [ +  - ]:         74 :   m = min(8,max(1,m));
    1265                 :            :   
    1266                 :         74 :   return(m);
    1267                 :            : }
    1268                 :            : 
    1269                 :            : /* for when haste runs out, etc. */
    1270                 :          0 : void default_maneuvers(void)
    1271                 :            : {
    1272                 :            :   int i;
    1273                 :          0 :   morewait();
    1274                 :          0 :   clearmsg();
    1275                 :          0 :   print1("Warning, resetting your combat options to the default.");
    1276                 :          0 :   print2("Use the 'F' command to select which options you prefer.");
    1277                 :          0 :   morewait();
    1278         [ #  # ]:          0 :   for(i=0;i<maneuvers();i+=2) {
    1279                 :          0 :     Player.meleestr[i*2]='A';
    1280                 :          0 :     Player.meleestr[(i*2)+1]='C';
    1281                 :          0 :     Player.meleestr[(i+1)*2]='B';
    1282                 :          0 :     Player.meleestr[((i+1)*2)+1]='C';
    1283                 :            :   }
    1284                 :          0 :   Player.meleestr[maneuvers()*2]=0;
    1285                 :          0 : }

Generated by: LCOV version 1.11