Main Page | Alphabetical List | Data Structures | File List | Data Fields | Globals

db.h File Reference

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define DATPATH   ""
#define GET_UNSET(flag1, flag2)   (~(flag1)&((flag1)|(flag2)))
#define MAGIC_NUM   52571214
#define MAX_PERM_BLOCK   131072

Functions

void assign_area_vnum (int vnum)
void convert_mob (MOB_INDEX_DATA *mob)
void convert_mobile (MOB_INDEX_DATA *pMobIndex)
void convert_obj (OBJ_INDEX_DATA *obj)
void convert_object (OBJ_INDEX_DATA *pObjIndex)
void convert_objects (void)
char * strspace_alloc ()
void strspace_size_increment ()

Variables

AREA_DATAarea_first
bool fBootDb
MOB_INDEX_DATAmob_index_hash [MAX_KEY_HASH]
int nAllocString
int newmobs
int newobjs
OBJ_INDEX_DATAobj_index_hash [MAX_KEY_HASH]
int sAllocString
int social_count
unsigned strspace_size
int top_affect
int top_ed
int top_mob_index
int top_obj_index


Define Documentation

#define DATPATH   ""
 

Definition at line 40 of file db.h.

Referenced by strspace_size_read(), and strspace_size_set().

#define GET_UNSET flag1,
flag2   )     (~(flag1)&((flag1)|(flag2)))
 

Definition at line 58 of file db.h.

#define MAGIC_NUM   52571214
 

Definition at line 61 of file db.h.

Referenced by alloc_mem(), and free_mem().

#define MAX_PERM_BLOCK   131072
 

Definition at line 55 of file db.h.

Referenced by alloc_perm(), and do_memory_heap().


Function Documentation

void assign_area_vnum int  vnum  ) 
 

Definition at line 646 of file db.c.

References area_last, area_data::max_vnum, area_data::min_vnum, and URANGE.

Referenced by load_mobiles(), load_objects(), load_old_mob(), load_old_obj(), and load_rooms().

00647 {
00648     if (area_last->min_vnum == 0 || area_last->max_vnum == 0)
00649         area_last->min_vnum = area_last->max_vnum = vnum;
00650     if (vnum != URANGE (area_last->min_vnum, vnum, area_last->max_vnum))
00651     {
00652         if (vnum < area_last->min_vnum)
00653             area_last->min_vnum = vnum;
00654         else
00655             area_last->max_vnum = vnum;
00656     }
00657     return;
00658 }

void convert_mob MOB_INDEX_DATA mob  ) 
 

void convert_mobile MOB_INDEX_DATA pMobIndex  ) 
 

Definition at line 904 of file db2.c.

References mob_index_data::ac, mob_index_data::act, ACT_WARRIOR, mob_index_data::dam_type, mob_index_data::damage, DICE_BONUS, DICE_NUMBER, DICE_TYPE, mob_index_data::hit, interpolate(), mob_index_data::level, mob_index_data::mana, mob_index_data::material, mob_index_data::new_format, newmobs, number_range(), mob_index_data::size, SIZE_MEDIUM, str_dup(), TRUE, UMAX, UMIN, and mob_index_data::wealth.

Referenced by load_old_mob().

00905 {
00906     int i;
00907     int type, number, bonus;
00908     int level;
00909 
00910     if (!pMobIndex || pMobIndex->new_format)
00911         return;
00912 
00913     level = pMobIndex->level;
00914 
00915     pMobIndex->act |= ACT_WARRIOR;
00916 
00917     /*
00918      * Calculate hit dice.  Gives close to the hitpoints
00919      * of old format mobs created with create_mobile()  (db.c)
00920      * A high number of dice makes for less variance in mobiles
00921      * hitpoints.
00922      * (might be a good idea to reduce the max number of dice)
00923      *
00924      * The conversion below gives:
00925 
00926      level:     dice         min         max        diff       mean
00927      1:       1d2+6       7(  7)     8(   8)     1(   1)     8(   8)
00928      2:       1d3+15     16( 15)    18(  18)     2(   3)    17(  17)
00929      3:       1d6+24     25( 24)    30(  30)     5(   6)    27(  27)
00930      5:      1d17+42     43( 42)    59(  59)    16(  17)    51(  51)
00931      10:      3d22+96     99( 95)   162( 162)    63(  67)   131(    )
00932      15:     5d30+161    166(159)   311( 311)   145( 150)   239(    )
00933      30:    10d61+416    426(419)  1026(1026)   600( 607)   726(    )
00934      50:    10d169+920   930(923)  2610(2610)  1680(1688)  1770(    )
00935 
00936      The values in parenthesis give the values generated in create_mobile.
00937      Diff = max - min.  Mean is the arithmetic mean.
00938      (hmm.. must be some roundoff error in my calculations.. smurfette got
00939      1d6+23 hp at level 3 ? -- anyway.. the values above should be
00940      approximately right..)
00941      */
00942     type = level * level * 27 / 40;
00943     number = UMIN (type / 40 + 1, 10);    /* how do they get 11 ??? */
00944     type = UMAX (2, type / number);
00945     bonus = UMAX (0, level * (8 + level) * .9 - number * type);
00946 
00947     pMobIndex->hit[DICE_NUMBER] = number;
00948     pMobIndex->hit[DICE_TYPE] = type;
00949     pMobIndex->hit[DICE_BONUS] = bonus;
00950 
00951     pMobIndex->mana[DICE_NUMBER] = level;
00952     pMobIndex->mana[DICE_TYPE] = 10;
00953     pMobIndex->mana[DICE_BONUS] = 100;
00954 
00955     /*
00956      * Calculate dam dice.  Gives close to the damage
00957      * of old format mobs in damage()  (fight.c)
00958      */
00959     type = level * 7 / 4;
00960     number = UMIN (type / 8 + 1, 5);
00961     type = UMAX (2, type / number);
00962     bonus = UMAX (0, level * 9 / 4 - number * type);
00963 
00964     pMobIndex->damage[DICE_NUMBER] = number;
00965     pMobIndex->damage[DICE_TYPE] = type;
00966     pMobIndex->damage[DICE_BONUS] = bonus;
00967 
00968     switch (number_range (1, 3))
00969     {
00970         case (1):
00971             pMobIndex->dam_type = 3;
00972             break;                /* slash  */
00973         case (2):
00974             pMobIndex->dam_type = 7;
00975             break;                /* pound  */
00976         case (3):
00977             pMobIndex->dam_type = 11;
00978             break;                /* pierce */
00979     }
00980 
00981     for (i = 0; i < 3; i++)
00982         pMobIndex->ac[i] = interpolate (level, 100, -100);
00983     pMobIndex->ac[3] = interpolate (level, 100, 0);    /* exotic */
00984 
00985     pMobIndex->wealth /= 100;
00986     pMobIndex->size = SIZE_MEDIUM;
00987     pMobIndex->material = str_dup ("none");
00988 
00989     pMobIndex->new_format = TRUE;
00990     ++newmobs;
00991 
00992     return;
00993 }

Here is the call graph for this function:

void convert_obj OBJ_INDEX_DATA obj  ) 
 

void convert_object OBJ_INDEX_DATA pObjIndex  ) 
 

Definition at line 798 of file db2.c.

References bug(), ITEM_ARMOR, ITEM_BOAT, ITEM_CLOTHING, ITEM_CONTAINER, ITEM_CORPSE_NPC, ITEM_CORPSE_PC, ITEM_DRINK_CON, ITEM_FOOD, ITEM_FOUNTAIN, ITEM_FURNITURE, ITEM_KEY, ITEM_LIGHT, ITEM_MAP, ITEM_MONEY, ITEM_PILL, ITEM_POTION, ITEM_SCROLL, ITEM_STAFF, ITEM_TRASH, ITEM_TREASURE, ITEM_WAND, ITEM_WEAPON, mob_index_data::level, mob_index_data::new_format, newobjs, TRUE, UMAX, and UMIN.

Referenced by convert_objects().

00799 {
00800     int level;
00801     int number, type;            /* for dice-conversion */
00802 
00803     if (!pObjIndex || pObjIndex->new_format)
00804         return;
00805 
00806     level = pObjIndex->level;
00807 
00808     pObjIndex->level = UMAX (0, pObjIndex->level);    /* just to be sure */
00809     pObjIndex->cost = 10 * level;
00810 
00811     switch (pObjIndex->item_type)
00812     {
00813         default:
00814             bug ("Obj_convert: vnum %d bad type.", pObjIndex->item_type);
00815             break;
00816 
00817         case ITEM_LIGHT:
00818         case ITEM_TREASURE:
00819         case ITEM_FURNITURE:
00820         case ITEM_TRASH:
00821         case ITEM_CONTAINER:
00822         case ITEM_DRINK_CON:
00823         case ITEM_KEY:
00824         case ITEM_FOOD:
00825         case ITEM_BOAT:
00826         case ITEM_CORPSE_NPC:
00827         case ITEM_CORPSE_PC:
00828         case ITEM_FOUNTAIN:
00829         case ITEM_MAP:
00830         case ITEM_CLOTHING:
00831         case ITEM_SCROLL:
00832             break;
00833 
00834         case ITEM_WAND:
00835         case ITEM_STAFF:
00836             pObjIndex->value[2] = pObjIndex->value[1];
00837             break;
00838 
00839         case ITEM_WEAPON:
00840 
00841             /*
00842              * The conversion below is based on the values generated
00843              * in one_hit() (fight.c).  Since I don't want a lvl 50 
00844              * weapon to do 15d3 damage, the min value will be below
00845              * the one in one_hit, and to make up for it, I've made 
00846              * the max value higher.
00847              * (I don't want 15d2 because this will hardly ever roll
00848              * 15 or 30, it will only roll damage close to 23.
00849              * I can't do 4d8+11, because one_hit there is no dice-
00850              * bounus value to set...)
00851              *
00852              * The conversion below gives:
00853 
00854              level:   dice      min      max      mean
00855              1:     1d8      1( 2)    8( 7)     5( 5)
00856              2:     2d5      2( 3)   10( 8)     6( 6)
00857              3:     2d5      2( 3)   10( 8)     6( 6)
00858              5:     2d6      2( 3)   12(10)     7( 7)
00859              10:     4d5      4( 5)   20(14)    12(10)
00860              20:     5d5      5( 7)   25(21)    15(14)
00861              30:     5d7      5(10)   35(29)    20(20)
00862              50:     5d11     5(15)   55(44)    30(30)
00863 
00864              */
00865 
00866             number = UMIN (level / 4 + 1, 5);
00867             type = (level + 7) / number;
00868 
00869             pObjIndex->value[1] = number;
00870             pObjIndex->value[2] = type;
00871             break;
00872 
00873         case ITEM_ARMOR:
00874             pObjIndex->value[0] = level / 5 + 3;
00875             pObjIndex->value[1] = pObjIndex->value[0];
00876             pObjIndex->value[2] = pObjIndex->value[0];
00877             break;
00878 
00879         case ITEM_POTION:
00880         case ITEM_PILL:
00881             break;
00882 
00883         case ITEM_MONEY:
00884             pObjIndex->value[0] = pObjIndex->cost;
00885             break;
00886     }
00887 
00888     pObjIndex->new_format = TRUE;
00889     ++newobjs;
00890 
00891     return;
00892 }

Here is the call graph for this function:

void convert_objects void   ) 
 

Definition at line 647 of file db2.c.

References area_first, reset_data::arg1, reset_data::arg3, bug(), reset_data::command, convert_object(), get_mob_index(), get_obj_index(), get_room_index(), ITEM_ARMOR, ITEM_PILL, ITEM_POTION, ITEM_SCROLL, ITEM_STAFF, ITEM_TREASURE, obj_index_data::item_type, ITEM_WAND, ITEM_WEAPON, obj_index_data::level, mob_index_data::level, area_data::min_vnum, obj_index_data::new_format, newobjs, area_data::next, reset_data::next, mob_index_data::pShop, room_index_data::reset_first, top_obj_index, UMAX, and UMIN.

Referenced by boot_db().

00648 {
00649     int vnum;
00650     AREA_DATA *pArea;
00651     RESET_DATA *pReset;
00652     MOB_INDEX_DATA *pMob = NULL;
00653     OBJ_INDEX_DATA *pObj;
00654     ROOM_INDEX_DATA *pRoom;
00655 
00656     if (newobjs == top_obj_index)
00657         return;                    /* all objects in new format */
00658 
00659     for (pArea = area_first; pArea; pArea = pArea->next)
00660     {
00661         for (vnum = pArea->min_vnum; vnum <= pArea->max_vnum; vnum++)
00662         {
00663             if (!(pRoom = get_room_index (vnum)))
00664                 continue;
00665 
00666             for (pReset = pRoom->reset_first; pReset; pReset = pReset->next)
00667             {
00668                 switch (pReset->command)
00669                 {
00670                     case 'M':
00671                         if (!(pMob = get_mob_index (pReset->arg1)))
00672                             bug ("Convert_objects: 'M': bad vnum %d.",
00673                                  pReset->arg1);
00674                         break;
00675 
00676                     case 'O':
00677                         if (!(pObj = get_obj_index (pReset->arg1)))
00678                         {
00679                             bug ("Convert_objects: 'O': bad vnum %d.",
00680                                  pReset->arg1);
00681                             break;
00682                         }
00683 
00684                         if (pObj->new_format)
00685                             continue;
00686 
00687                         if (!pMob)
00688                         {
00689                             bug ("Convert_objects: 'O': No mob reset yet.",
00690                                  0);
00691                             break;
00692                         }
00693 
00694                         pObj->level = pObj->level < 1 ? pMob->level - 2
00695                             : UMIN (pObj->level, pMob->level - 2);
00696                         break;
00697 
00698                     case 'P':
00699                         {
00700                             OBJ_INDEX_DATA *pObj, *pObjTo;
00701 
00702                             if (!(pObj = get_obj_index (pReset->arg1)))
00703                             {
00704                                 bug ("Convert_objects: 'P': bad vnum %d.",
00705                                      pReset->arg1);
00706                                 break;
00707                             }
00708 
00709                             if (pObj->new_format)
00710                                 continue;
00711 
00712                             if (!(pObjTo = get_obj_index (pReset->arg3)))
00713                             {
00714                                 bug ("Convert_objects: 'P': bad vnum %d.",
00715                                      pReset->arg3);
00716                                 break;
00717                             }
00718 
00719                             pObj->level = pObj->level < 1 ? pObjTo->level
00720                                 : UMIN (pObj->level, pObjTo->level);
00721                         }
00722                         break;
00723 
00724                     case 'G':
00725                     case 'E':
00726                         if (!(pObj = get_obj_index (pReset->arg1)))
00727                         {
00728                             bug ("Convert_objects: 'E' or 'G': bad vnum %d.",
00729                                  pReset->arg1);
00730                             break;
00731                         }
00732 
00733                         if (!pMob)
00734                         {
00735                             bug
00736                                 ("Convert_objects: 'E' or 'G': null mob for vnum %d.",
00737                                  pReset->arg1);
00738                             break;
00739                         }
00740 
00741                         if (pObj->new_format)
00742                             continue;
00743 
00744                         if (pMob->pShop)
00745                         {
00746                             switch (pObj->item_type)
00747                             {
00748                                 default:
00749                                     pObj->level = UMAX (0, pObj->level);
00750                                     break;
00751                                 case ITEM_PILL:
00752                                 case ITEM_POTION:
00753                                     pObj->level = UMAX (5, pObj->level);
00754                                     break;
00755                                 case ITEM_SCROLL:
00756                                 case ITEM_ARMOR:
00757                                 case ITEM_WEAPON:
00758                                     pObj->level = UMAX (10, pObj->level);
00759                                     break;
00760                                 case ITEM_WAND:
00761                                 case ITEM_TREASURE:
00762                                     pObj->level = UMAX (15, pObj->level);
00763                                     break;
00764                                 case ITEM_STAFF:
00765                                     pObj->level = UMAX (20, pObj->level);
00766                                     break;
00767                             }
00768                         }
00769                         else
00770                             pObj->level = pObj->level < 1 ? pMob->level
00771                                 : UMIN (pObj->level, pMob->level);
00772                         break;
00773                 }                /* switch ( pReset->command ) */
00774             }
00775         }
00776     }
00777 
00778     /* do the conversion: */
00779 
00780     for (pArea = area_first; pArea; pArea = pArea->next)
00781         for (vnum = pArea->min_vnum; vnum <= pArea->max_vnum; vnum++)
00782             if ((pObj = get_obj_index (vnum)))
00783                 if (!pObj->new_format)
00784                     convert_object (pObj);
00785 
00786     return;
00787 }

Here is the call graph for this function:

char* strspace_alloc  ) 
 

Definition at line 233 of file mkwSys.c.

References boot_fail(), logf(), string_space, STRSPACE_DEFAULT, strspace_size, strspace_size_default(), and strspace_size_read().

Referenced by boot_db().

00234 {
00235     strspace_size_read();
00236     if ( ( string_space = calloc( 1, strspace_size * 1024 ) ) == NULL )
00237     {
00238         logf( "mkwSys.c: Unable to allocate %d kB string space from system.", strspace_size );
00239         if( strspace_size > STRSPACE_DEFAULT )
00240             strspace_size_default();
00241         else
00242             logf( "Increase your system's virtual memory size.", strspace_size );
00243         boot_fail( "mkwSys.c" );
00244     }
00245     return string_space;
00246 }

Here is the call graph for this function:

void strspace_size_increment  ) 
 

Definition at line 256 of file mkwSys.c.

References boot_fail(), logf(), STRSPACE_INCREMENT, strspace_size, and strspace_size_set().

Referenced by fread_string(), and fread_string_eol().

00257 {
00258     logf( "mkwSys.c: String space size of %d kB did not suffice.", strspace_size );
00259     strspace_size_set( strspace_size + STRSPACE_INCREMENT );
00260     logf( "mkwSys.c: Incrementing string space size to %d kB and rebooting.", strspace_size );
00261     boot_fail( "mkwSys.c" );
00262 }

Here is the call graph for this function:


Variable Documentation

AREA_DATA* area_first
 

Definition at line 180 of file db.c.

bool fBootDb
 

Definition at line 231 of file db.c.

Referenced by boot_db(), fread_string(), fread_string_eol(), get_mob_index(), get_obj_index(), get_room_index(), load_mobiles(), load_mobprogs(), load_objects(), load_old_mob(), load_old_obj(), load_rooms(), and slot_lookup().

MOB_INDEX_DATA* mob_index_hash[MAX_KEY_HASH]
 

Definition at line 175 of file db.c.

int nAllocString
 

Definition at line 221 of file db.c.

Referenced by do_memory_heap(), fread_string(), fread_string_eol(), and interpret().

int newmobs
 

Definition at line 203 of file db.c.

Referenced by convert_mobile(), do_memory_formats(), and load_mobiles().

int newobjs
 

Definition at line 204 of file db.c.

Referenced by convert_object(), convert_objects(), do_memory_formats(), and load_objects().

OBJ_INDEX_DATA* obj_index_hash[MAX_KEY_HASH]
 

Definition at line 176 of file db.c.

int sAllocString
 

Definition at line 222 of file db.c.

Referenced by do_memory_heap(), fread_string(), and fread_string_eol().

int social_count
 

Definition at line 49 of file db.h.

Referenced by do_memory_perms().

unsigned strspace_size
 

Definition at line 216 of file mkwSys.c.

Referenced by do_memory_heap(), fread_string(), fread_string_eol(), strspace_alloc(), strspace_size_default(), strspace_size_increment(), and strspace_size_read().

int top_affect
 

Definition at line 188 of file db.c.

int top_ed
 

Definition at line 190 of file db.c.

int top_mob_index
 

Definition at line 193 of file db.c.

int top_obj_index
 

Definition at line 194 of file db.c.


Generated on Thu Jan 13 21:55:55 2005 for Beyond the Shadows by  doxygen 1.4.0