77a78,79
> MPROG_CODE * mprog_list;
>
222a225
> void load_mobprogs args( ( FILE *fp ) );
224a228
> void fix_mobprogs args( ( void ) );
349a354
> else if ( !str_cmp( word, "MOBPROGS" ) ) load_mobprogs(fpArea);
378a384
> fix_mobprogs( );
1164a1171,1250
> /*
> * Load mobprogs section
> */
> void load_mobprogs( FILE *fp )
> {
> MPROG_CODE *pMprog;
>
> if ( area_last == NULL )
> {
> bug( "Load_mobprogs: no #AREA seen yet.", 0 );
> exit( 1 );
> }
>
> for ( ; ; )
> {
> sh_int vnum;
> char letter;
>
> letter = fread_letter( fp );
> if ( letter != '#' )
> {
> bug( "Load_mobprogs: # not found.", 0 );
> exit( 1 );
> }
>
> vnum = fread_number( fp );
> if ( vnum == 0 )
> break;
>
> fBootDb = FALSE;
> if ( get_mprog_index( vnum ) != NULL )
> {
> bug( "Load_mobprogs: vnum %d duplicated.", vnum );
> exit( 1 );
> }
> fBootDb = TRUE;
>
> pMprog = alloc_perm( sizeof(*pMprog) );
> pMprog->vnum = vnum;
> pMprog->code = fread_string( fp );
> if ( mprog_list == NULL )
> mprog_list = pMprog;
> else
> {
> pMprog->next = mprog_list;
> mprog_list = pMprog;
> }
> }
> return;
> }
>
> /*
> * Translate mobprog vnums pointers to real code
> */
> void fix_mobprogs( void )
> {
> MOB_INDEX_DATA *pMobIndex;
> MPROG_LIST *list;
> MPROG_CODE *prog;
> int iHash;
>
> for ( iHash = 0; iHash < MAX_KEY_HASH; iHash++ )
> {
> for ( pMobIndex = mob_index_hash[iHash];
> pMobIndex != NULL;
> pMobIndex = pMobIndex->next )
> {
> for( list = pMobIndex->mprogs; list != NULL; list = list->next )
> {
> if ( ( prog = get_mprog_index( list->vnum ) ) != NULL )
> list->code = prog->code;
> else
> {
> bug( "Fix_mobprogs: code vnum %d not found.", list->vnum );
> exit( 1 );
> }
> }
> }
> }
> }
1538a1625
> mob->mprog_target = NULL;
2139a2227,2237
>
> MPROG_CODE *get_mprog_index( int vnum )
> {
> MPROG_CODE *prg;
> for( prg = mprog_list; prg; prg = prg->next )
> {
> if ( prg->vnum == vnum )
> return( prg );
> }
> return NULL;
> }