LCOV - code coverage report
Current view: top level - omega-rpg-0.90-pa9 - env.c (source / functions) Hit Total Coverage
Test: lcov.info Lines: 0 212 0.0 %
Date: 2017-09-18 20:02:26 Functions: 0 5 0.0 %
Branches: 0 82 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* omega copyright (c) 1987,1988,1989 by Laurence Raphael Brothers */
       2                 :            : /* env.c */
       3                 :            : /* some load_* routines for special environments */
       4                 :            : 
       5                 :            : #include "glob.h"
       6                 :            : 
       7                 :            : /* loads the arena level into Level*/
       8                 :          0 : void load_arena(void)
       9                 :            : {
      10                 :            :   int i,j;
      11                 :            :   char site;
      12                 :          0 :   pob box=((pob)checkmalloc(sizeof(objtype)));
      13                 :            :   map *glad; /* too glad to gladiate */
      14                 :            : 
      15                 :          0 :   *box = Objects[OB_GARAGE_OPENER];
      16                 :            : 
      17                 :          0 :   TempLevel = Level;
      18         [ #  # ]:          0 :   if (ok_to_free(TempLevel)) {
      19                 :            : #ifndef SAVE_LEVELS
      20                 :          0 :     free_level(TempLevel);
      21                 :            : #endif
      22                 :          0 :     TempLevel = NULL;
      23                 :            :   }
      24                 :            : #ifndef SAVE_LEVELS
      25                 :          0 :   Level = ((plv) checkmalloc(sizeof(levtype)));
      26                 :            : #else
      27                 :            :   msdos_changelevel(TempLevel,0,-1);
      28                 :            :   Level = &TheLevel;
      29                 :            : #endif
      30                 :          0 :   clear_level(Level);
      31                 :          0 :   Level->environment = E_ARENA;
      32                 :            :   
      33                 :          0 :   glad = map_open(MAP_arena);
      34                 :          0 :   map_setLevel(glad,0);
      35                 :            :   
      36                 :          0 :   Level->level_width = map_getWidth(glad);
      37                 :          0 :   Level->level_length = map_getLength(glad);
      38                 :            : 
      39         [ #  # ]:          0 :   for(j=0;j<Level->level_length;j++) {
      40         [ #  # ]:          0 :     for(i=0;i<Level->level_width;i++) {
      41                 :          0 :       Level->site[i][j].lstatus = SEEN+LIT;
      42                 :          0 :       Level->site[i][j].roomnumber = RS_ARENA;
      43                 :          0 :       site = map_getSiteChar(glad,i,j);
      44                 :          0 :       Level->site[i][j].p_locf = L_NO_OP;
      45   [ #  #  #  #  :          0 :       switch(site) {
                      # ]
      46                 :            :       case 'P':
      47                 :          0 :         Level->site[i][j].locchar = PORTCULLIS;
      48                 :          0 :         Level->site[i][j].p_locf = L_PORTCULLIS;
      49                 :          0 :         break;
      50                 :            :       case 'X':
      51                 :          0 :         Level->site[i][j].locchar = FLOOR;
      52                 :          0 :         Level->site[i][j].p_locf = L_ARENA_EXIT;
      53                 :          0 :         break;
      54                 :            :       case '#':
      55                 :          0 :         Level->site[i][j].locchar = WALL;
      56                 :          0 :         break;
      57                 :            :       case '.':
      58                 :          0 :         Level->site[i][j].locchar = FLOOR;
      59                 :          0 :         break;
      60                 :            :       }
      61                 :          0 :       Level->site[i][j].showchar = Level->site[i][j].locchar;
      62                 :            :     }
      63                 :            :   }
      64                 :          0 :   map_close(glad);
      65                 :          0 :   Level->site[60][7].creature = Arena_Monster;
      66                 :          0 :   Arena_Monster->x = 60;
      67                 :          0 :   Arena_Monster->y = 7;
      68                 :          0 :   Arena_Monster->sense = 50;
      69                 :          0 :   m_pickup(Arena_Monster,box);
      70                 :          0 :   m_status_set(Arena_Monster,AWAKE);
      71                 :          0 :   Level->mlist = (pml) checkmalloc(sizeof(mltype));
      72                 :          0 :   Level->mlist->m = Arena_Monster;
      73                 :          0 :   Level->mlist->next = NULL;
      74                 :            :   /* hehehehe cackled the dungeon master.... */
      75                 :          0 :   print2("Your opponent holds the only way you can leave!");
      76                 :          0 : }
      77                 :            : 
      78                 :            : /* loads the sorcereror's circle into Level*/
      79                 :          0 : void load_circle(int populate)
      80                 :            : {
      81                 :            :   int i,j;
      82                 :          0 :   int safe = (Player.rank[CIRCLE] > 0);
      83                 :            :   char site;
      84                 :            :   map *nook; /* I'll never run out of 4-letter names! */
      85                 :            :   
      86                 :          0 :   TempLevel = Level;
      87         [ #  # ]:          0 :   if (ok_to_free(TempLevel)) {
      88                 :            : #ifndef SAVE_LEVELS
      89                 :          0 :     free_level(TempLevel);
      90                 :            : #endif
      91                 :          0 :     TempLevel = NULL;
      92                 :            :   }
      93                 :            : #ifndef SAVE_LEVELS
      94                 :          0 :   Level = ((plv) checkmalloc(sizeof(levtype)));
      95                 :            : #else
      96                 :            :   msdos_changelevel(TempLevel,0,-1);
      97                 :            :   Level = &TheLevel;
      98                 :            : #endif
      99                 :          0 :   clear_level(Level);
     100                 :          0 :   Level->environment = E_CIRCLE;
     101                 :          0 :   nook = map_open(MAP_circle);
     102                 :          0 :   map_setLevel(nook,0);
     103                 :            :   
     104                 :          0 :   Level->level_width = map_getWidth(nook);
     105                 :          0 :   Level->level_length = map_getLength(nook);
     106                 :            : 
     107         [ #  # ]:          0 :   for(j=0;j<Level->level_length;j++) {
     108         [ #  # ]:          0 :     for(i=0;i<Level->level_width;i++) {
     109                 :          0 :       Level->site[i][j].lstatus = 0;
     110                 :          0 :       Level->site[i][j].roomnumber = RS_CIRCLE;
     111                 :          0 :       Level->site[i][j].p_locf = L_NO_OP;
     112                 :          0 :       site = map_getSiteChar(nook,i,j);
     113   [ #  #  #  #  :          0 :       switch(site) {
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     114                 :            :       case 'P':
     115                 :          0 :         Level->site[i][j].locchar = FLOOR;
     116         [ #  # ]:          0 :         if (populate) {
     117                 :          0 :           make_prime(i,j); /* prime sorceror */
     118                 :          0 :           Level->site[i][j].creature->specialf = M_SP_PRIME;
     119         [ #  # ]:          0 :           if (! safe) m_status_set(Level->site[i][j].creature,HOSTILE);
     120                 :            :         }
     121                 :          0 :         break;
     122                 :            :       case 'D':
     123                 :          0 :         Level->site[i][j].locchar = FLOOR;
     124         [ #  # ]:          0 :         if (populate) {
     125                 :          0 :           make_site_monster(i,j,DEMON_PRINCE); /* prime circle demon */
     126         [ #  # ]:          0 :           if (safe) m_status_reset(Level->site[i][j].creature,HOSTILE);
     127                 :          0 :           Level->site[i][j].creature->specialf = M_SP_COURT;
     128                 :            :         }
     129                 :          0 :         break;
     130                 :            :       case 's':
     131                 :          0 :         Level->site[i][j].locchar = FLOOR;
     132         [ #  # ]:          0 :         if (populate) {
     133                 :          0 :           make_site_monster(i,j,SERV_CHAOS); /* servant of chaos */
     134                 :          0 :           Level->site[i][j].creature->specialf = M_SP_COURT;
     135         [ #  # ]:          0 :           if (safe) m_status_reset(Level->site[i][j].creature,HOSTILE);
     136                 :            :         }
     137                 :          0 :         break;
     138                 :            :       case 'e':
     139                 :          0 :         Level->site[i][j].locchar = FLOOR;
     140         [ #  # ]:          0 :         if (populate) {
     141                 :          0 :           make_site_monster(i,j,ENCHANTOR); /* enchanter */
     142                 :          0 :           Level->site[i][j].creature->specialf = M_SP_COURT;
     143         [ #  # ]:          0 :           if (safe) m_status_reset(Level->site[i][j].creature,HOSTILE);
     144                 :            :         }
     145                 :          0 :         break;
     146                 :            :       case 'n':
     147                 :          0 :         Level->site[i][j].locchar = FLOOR;
     148         [ #  # ]:          0 :         if (populate) {
     149                 :          0 :           make_site_monster(i,j,NECROMANCER); /* necromancer */
     150                 :          0 :           Level->site[i][j].creature->specialf = M_SP_COURT;
     151         [ #  # ]:          0 :           if (safe) m_status_reset(Level->site[i][j].creature,HOSTILE);
     152                 :            :         }
     153                 :          0 :         break;
     154                 :            :       case 'T':
     155                 :          0 :         Level->site[i][j].locchar = FLOOR;
     156         [ #  # ]:          0 :         if (populate) {
     157                 :          0 :           make_site_monster(i,j,THAUMATURGIST); /* High Thaumaturgist */
     158                 :          0 :           Level->site[i][j].creature->specialf = M_SP_COURT;
     159         [ #  # ]:          0 :           if (safe) m_status_reset(Level->site[i][j].creature,HOSTILE);
     160                 :            :         }
     161                 :          0 :         break;
     162                 :            :       case '#':
     163                 :          0 :         Level->site[i][j].locchar = WALL;
     164                 :          0 :         Level->site[i][j].aux = 1000; 
     165                 :          0 :         break;
     166                 :            :       case 'L':
     167                 :          0 :         Level->site[i][j].locchar = FLOOR;
     168                 :          0 :         Level->site[i][j].p_locf = L_CIRCLE_LIBRARY;
     169                 :          0 :         break;
     170                 :            :       case '?':
     171                 :          0 :         Level->site[i][j].locchar = FLOOR;
     172                 :          0 :         Level->site[i][j].p_locf = L_TOME1;
     173                 :          0 :         break;
     174                 :            :       case '!':
     175                 :          0 :         Level->site[i][j].locchar = FLOOR;
     176                 :          0 :         Level->site[i][j].p_locf = L_TOME2;
     177                 :          0 :         break;
     178                 :            :       case 'S':
     179                 :          0 :         Level->site[i][j].locchar = FLOOR;
     180                 :          0 :         lset(i,j,SECRET);
     181                 :          0 :         break;
     182                 :            :       case '.':
     183                 :          0 :         Level->site[i][j].locchar = FLOOR;
     184                 :          0 :         break;
     185                 :            :       case '-':
     186                 :          0 :         Level->site[i][j].locchar = CLOSED_DOOR;
     187                 :          0 :         break;
     188                 :            :       }
     189                 :            :     }
     190                 :            :   }
     191                 :          0 :   map_close(nook);
     192                 :          0 : }
     193                 :            : 
     194                 :            : /* make the prime sorceror */
     195                 :          0 : void make_prime(int i, int j)
     196                 :            : {
     197                 :          0 :   pml ml = ((pml) checkmalloc(sizeof(mltype)));
     198                 :          0 :   pmt m = ((pmt) checkmalloc(sizeof(montype)));
     199                 :            :   pol ol;
     200                 :            :   pob o;
     201                 :          0 :   make_hiscore_npc(m,10); /* 10 is index for prime */
     202                 :          0 :   m->x = i;
     203                 :          0 :   m->y = j;
     204                 :          0 :   Level->site[i][j].creature = m;
     205                 :          0 :   ml->m = m;
     206                 :          0 :   ml->next = Level->mlist;
     207                 :          0 :   Level->mlist = ml;
     208                 :            :   
     209         [ #  # ]:          0 :   if (Objects[OB_STARGEM].uniqueness != UNIQUE_TAKEN) {
     210                 :          0 :     ol  = ((pol) checkmalloc(sizeof(oltype)));
     211                 :          0 :     o  = ((pob) checkmalloc(sizeof(objtype)));
     212                 :          0 :     *o = Objects[OB_STARGEM];
     213                 :          0 :     ol->thing = o;
     214                 :          0 :     ol->next = NULL;
     215                 :          0 :     m->possessions = ol;
     216                 :            :   }
     217                 :          0 : }
     218                 :            : 
     219                 :            : 
     220                 :            : /* loads the court of the archmage into Level*/
     221                 :          0 : void load_court(int populate)
     222                 :            : {
     223                 :            :   int i,j;
     224                 :            :   char site;
     225                 :            :   map *mage;
     226                 :            : 
     227                 :          0 :   TempLevel = Level;
     228         [ #  # ]:          0 :   if (ok_to_free(TempLevel)) {
     229                 :            : #ifndef SAVE_LEVELS
     230                 :          0 :     free_level(TempLevel);
     231                 :            : #endif
     232                 :          0 :     TempLevel = NULL;
     233                 :            :   }
     234                 :            : #ifndef SAVE_LEVELS
     235                 :          0 :   Level = ((plv) checkmalloc(sizeof(levtype)));
     236                 :            : #else
     237                 :            :   msdos_changelevel(TempLevel,0,-1);
     238                 :            :   Level = &TheLevel;
     239                 :            : #endif
     240                 :          0 :   clear_level(Level);
     241                 :          0 :   Level->environment = E_COURT;
     242                 :          0 :   mage = map_open(MAP_court);
     243                 :          0 :   map_setLevel(mage,0);
     244                 :            :   
     245                 :          0 :   Level->level_width = map_getWidth(mage);
     246                 :          0 :   Level->level_length = map_getLength(mage);
     247                 :            :   
     248         [ #  # ]:          0 :   for(j=0;j<Level->level_length;j++) {
     249         [ #  # ]:          0 :     for(i=0;i<Level->level_width;i++) {
     250                 :          0 :       Level->site[i][j].lstatus = 0;
     251                 :          0 :       Level->site[i][j].roomnumber = RS_COURT;
     252                 :          0 :       Level->site[i][j].p_locf = L_NO_OP;
     253                 :          0 :       site = map_getSiteChar(mage,i,j);
     254   [ #  #  #  #  :          0 :       switch(site) {
             #  #  #  #  
                      # ]
     255                 :            :       case '5':
     256                 :          0 :         Level->site[i][j].locchar = CHAIR;
     257                 :          0 :         Level->site[i][j].p_locf = L_THRONE;
     258         [ #  # ]:          0 :         if (populate) {
     259                 :          0 :           make_specific_treasure(i,j,OB_SCEPTRE);
     260                 :          0 :           make_archmage(i,j);
     261                 :          0 :           m_status_reset(Level->site[i][j].creature,HOSTILE);
     262                 :          0 :           m_status_reset(Level->site[i][j].creature,MOBILE);
     263                 :            :         }
     264                 :          0 :         break;
     265                 :            :       case 'e':
     266                 :          0 :         Level->site[i][j].locchar = FLOOR;
     267         [ #  # ]:          0 :         if (populate) {
     268                 :          0 :           make_site_monster(i,j,ENCHANTOR); /* enchanter */
     269                 :          0 :           m_status_reset(Level->site[i][j].creature,HOSTILE);
     270                 :          0 :           Level->site[i][j].creature->specialf = M_SP_COURT;
     271                 :            :         }
     272                 :          0 :         break;
     273                 :            :       case 'n':
     274                 :          0 :         Level->site[i][j].locchar = FLOOR;
     275         [ #  # ]:          0 :         if (populate) {
     276                 :          0 :           make_site_monster(i,j,NECROMANCER); /* necromancer */
     277                 :          0 :           m_status_reset(Level->site[i][j].creature,HOSTILE);
     278                 :          0 :           Level->site[i][j].creature->specialf = M_SP_COURT;
     279                 :            :         }
     280                 :          0 :         break;
     281                 :            :       case 'T':
     282                 :          0 :         Level->site[i][j].locchar = FLOOR;
     283         [ #  # ]:          0 :         if (populate) {
     284                 :          0 :           make_site_monster(i,j,THAUMATURGIST); /* High Thaumaturgist */
     285                 :          0 :           m_status_reset(Level->site[i][j].creature,HOSTILE);
     286                 :          0 :           Level->site[i][j].creature->specialf = M_SP_COURT;
     287                 :            :         }
     288                 :          0 :         break;
     289                 :            :       case '#':
     290                 :          0 :         Level->site[i][j].locchar = WALL;
     291                 :          0 :         Level->site[i][j].aux = 1000; 
     292                 :          0 :         break;
     293                 :            :       case 'G':
     294                 :          0 :         Level->site[i][j].locchar = FLOOR;
     295                 :          0 :         Level->site[i][j].locchar = FLOOR;
     296         [ #  # ]:          0 :         if (populate) {
     297                 :          0 :           make_site_monster(i,j,GUARD); /* guard */
     298                 :          0 :           m_status_reset(Level->site[i][j].creature,HOSTILE);
     299                 :            :         }
     300                 :          0 :         break;
     301                 :            :       case '<':
     302                 :          0 :         Level->site[i][j].locchar = STAIRS_UP;
     303                 :          0 :         Level->site[i][j].p_locf = L_ESCALATOR;
     304                 :          0 :         break;
     305                 :            :       case '.':
     306                 :          0 :         Level->site[i][j].locchar = FLOOR;
     307                 :          0 :         break;
     308                 :            :       }
     309                 :            :     }
     310                 :            :   }
     311                 :          0 :   map_close(mage);
     312                 :          0 : }
     313                 :            : 
     314                 :            : 
     315                 :            : 
     316                 :            : /* make the archmage */
     317                 :          0 : void make_archmage(int i, int j)
     318                 :            : {
     319                 :          0 :   pml ml = ((pml) checkmalloc(sizeof(mltype)));
     320                 :          0 :   pmt m = ((pmt) checkmalloc(sizeof(montype)));
     321                 :          0 :   make_hiscore_npc(m,9); /* 9 is index for archmage */
     322                 :          0 :   m->x = i;
     323                 :          0 :   m->y = j;
     324                 :          0 :   Level->site[i][j].creature = m;
     325                 :          0 :   ml->m = m;
     326                 :          0 :   ml->next = Level->mlist;
     327                 :          0 :   Level->mlist = ml;
     328                 :          0 :   m->specialf = M_SP_COURT;
     329                 :          0 : }
     330                 :            : 

Generated by: LCOV version 1.11