in mud.h under the struct weather_data you can find
int mana; /* base amount of mana in the zone */
int mana_vector;
int climate_mana;
Thats the main things that will be needed.
Just do a grep in the cm3/src folder for those looking for things that have to do with them and the weather system.
this is for example what I got from doing a grep mana *
$ grep \>mana *
act_comm.c: ch_printf( ch, "%5d/%-5d ", gch->mana, gch->max_mana );
act_info.c: mana = ( ch->in_room->area->weather->mana + 3 * weath_unit - 1 ) / weath_unit;
act_info.c: if( ch->mana > ( int )ch->max_mana / 20 )
act_info.c: mana = ( ch->in_room->area->weather->mana + 3 * weath_unit - 1 ) / weath_unit;
act_info.c: if( ch->mana > ( int )ch->max_mana / 20 )
act_wiz.c: ch_printf_color( ch, "&cMana: &p%d&w/&r%d\n\r", obj->mana, obj->raw_mana );
act_wiz.c: sprintf( mnbuf, "%d/%d", victim->mana, victim->max_mana );
act_wiz.c: vch->mana = vch->max_mana;
act_wiz.c: victim->mana = victim->max_mana;
act_wiz.c: ch_printf( ch, "%3d", pArea->weather->mana );
act_wiz.c: ch_printf( ch, "%3d", pArea->weather->mana_vector );
birth.c: ch->max_mana = UMAX( 20, ch->nation->mana * get_curr_int( ch ) );
birth.c: ch->mana = ch->max_mana;
birth.c: ch->mana = ch->max_mana;
birth.c: ch->mana = ch->max_mana;
birth.c: ch->mana = ch->max_mana;
build.c: obj->mana = value;
build.c: sprintf( buf, "Mana: %d\n\r", ingred->mana );
build.c: ingred->mana = 0;
build.c: ingred->mana = atoi( arg4 );
build.c: fprintf( fp, "Mana %d\n", ingred->mana );
build.c: sprintf( buf, "&gHitpoints: &G%d &gMana: &G%d\r\n", nation->hit, nation->mana );
build.c: nation->mana = 0;
build.c: nation->mana = atoi( arg4 );
build.c: fprintf( fp, "Mana %d\n", nation->mana );
comm.c: stat = ch->mana;
db.c: pArea->weather->mana = 0;
db.c: pArea->weather->mana_vector = 0;
db.c: obj->mana = 0;
db.c: ch->mana = 100;
db.c: ingred->mana = 0;
db.c: KEY( "Mana", ingred->mana, fread_number( fp ) );
db.c: nation->mana = 0;
db.c: KEY( "Mana", nation->mana, fread_number( fp ) );
db.c: pArea->weather->mana = number_range( -weath_unit, weath_unit ) + cf * number_range( 0, weath_unit );
db.c: pArea->weather->mana_vector = cf + number_range( -rand_factor, rand_factor );
elkandu.c: if( obj->mana < amt && type != MAG_TIME && type != MAG_ALL && type != MAG_LIGHT && type != MAG_UNHOLY )
elkandu.c: if( obj->mana < amt || IS_OBJ_STAT( obj, ITEM_MAGIC ) || ch->curr_talent[TAL_CATALYSM] < 40 )
elkandu.c: lose_hp( ch, obj->mana * 3 + ( obj->raw_mana / 20 ) );
elkandu.c: if( obj->mana < amt )
elkandu.c: if( obj->mana < amt )
elkandu.c: if( obj->mana < amt )
elkandu.c: if( obj->mana < amt )
elkandu.c: if( obj->mana < amt )
elkandu.c: obj->mana -= amt;
elkandu.c: obj->mana += 50;
elkandu.c: if( obj->mana && ch->curr_talent[TAL_SEEKING] >= 40 )
elkandu.c: ch_printf( ch, "%d points of energy have been absorbed into this item.\n\r", obj->mana );
elkandu.c: ch->mana = ch->max_mana + power;
elkandu.c: ch->mana -= power;
elkandu.c: victim->mana += power;
elkandu.c: if( obj->mana < 500 && type != MAG_ANTIMAGIC )
elkandu.c: if( obj->mana < 500 )
elkandu.c: obj->mana -= 500;
elkandu.c: obj->mana = 0;
elkandu.c: obj->mana -= 500;
elkandu.c: victim->max_mana = UMAX( 20, victim->nation->mana * get_curr_int( victim ) + victim->base_mana );
elkandu.c: victim->mana = UMIN( victim->max_mana, victim->mana );
elkandu.c: if( obj->mana < 50 )
elkandu.c: amount = obj->mana / 50;
elkandu.c: obj->mana -= 50 * amount;
fight.c: if( ch->mana < 0 )
handler.c: clone->mana = obj->mana;
handler.c: if( obj1->pIndexData == obj2->pIndexData && QUICKMATCH( obj1->name, obj2->name ) && QUICKMATCH( obj1->short_descr, obj2->short_descr ) && QUICKMATCH( obj1->description, obj2->description ) && QUICKMATCH( obj1->action_desc, obj2->action_desc ) && obj1->item_type == obj2->item_type && xSAME_BITS( obj1->extra_flags, obj2->extra_flags ) && obj1->weight == obj2->weight && obj1->wear_loc == obj2->wear_loc && obj1->raw_mana == obj2->raw_mana && obj1->mana == obj2->mana && obj1->timer == obj2->timer && obj1->value[0] == obj2->value[0] && obj1->value[1] == obj2->value[1] && obj1->value[2] == obj2->value[2] && obj1->value[3] == obj2->value[3] && obj1->value[4] == obj2->value[4] && obj1->value[5] == obj2->value[5] && !obj1->first_extradesc && !obj2->first_extradesc && !obj1->first_content && !obj2->first_content && !obj1->gem && !obj2->gem && obj1->count + obj2->count > 0 ) /* prevent count overflow */
magic.c: return ch->mana;
magic.c:if( !IS_NPC( ch ) && ch->mana < mana )
magic.c:victim->mana = URANGE( 0, victim->mana + af.modifier, victim->max_mana );
magic.c
ch->in_room->area->weather->mana * 10 ) - amount );
magic.c:ch->mana += amount;
magic.c:ch->in_room->area->weather->mana -= ( int )amount / 100;
magic.c:if( weath->mana < 200 )
magic.c:storm *= weath->mana;
magic.c:ch->mana += 100 + ( int )storm / 4000;
makeobjs.c: mob->max_mana = UMAX( 100, mob->perm_int * nation->mana );
makeobjs.c: mob->mana = mob->max_mana;
mud_comm.c:victim->mana,
mud_prog.c:return mprog_veval( chkchar->mana, opr, atoi( rval ), mob );
player.c: ch->mana, ch->max_mana, xIS_SET( ch->act, PLR_AUTOLOOT ) ? '*' : ' ' );
player.c: ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move );
player.c: ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move );
save.c: fprintf( fp, "HpManaMove %d %d %d %d %d %d\n", ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move );
save.c: if( obj->mana )
save.c: fprintf( fp, "Mana %d\n", obj->mana );
save.c: ch->mana = fread_number( fp );
save.c: KEY( "Mana", obj->mana, fread_number( fp ) );
skills.c: if( !IS_NPC( ch ) && ch->mana < mana )
skills.c: ch->mana -= mana / 2;
skills.c: ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c: ch->mana -= mana;
skills.c: ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c: ch->mana -= mana;
skills.c: ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c: &&ch->in_room->area->weather->mana < -100 )
skills.c:if( ingred->mana > 0
skills.c: &&ingred->mana < ch->in_room->area->weather->mana )
skills.c:if( victim->mana < 50 )
skills.c:victim->mana -= 5;
skills.c:victim->in_room->area->weather->mana += 1;
skills.c: if( !IS_NPC( ch ) && ch->mana < mana )
skills.c: ch->mana -= ( mana / 2 );
skills.c: ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c: ch->mana -= ( mana / 2 );
skills.c: ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c: ch->mana -= mana;
skills.c: ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c: if( !IS_NPC( ch ) && ch->mana < mana )
skills.c: ch->mana -= ( mana / 2 );
skills.c: ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c: ch->mana -= ( mana / 2 );
skills.c: ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c: ch->mana -= mana;
skills.c: ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c:obj->mana += obj2->mana;
skills.c: obj->mana /= div;
special.c:obj->mana += 1;
special.c: obj->mana += 1;
special.c: &&ch->in_room->area->weather->mana < -100 )
special.c:if( ingred->mana > 0
special.c: &&ingred->mana < ch->in_room->area->weather->mana )
talent.c:ch->mana -= UMAX( 0, i );
talent.c:ch->in_room->area->weather->mana += ( int )i / 100;
talent.c:if( ch->mana < -1000 )
talent.c:TALENT( ch, TAL_CATALYSM ) + ch->in_room->area->weather->mana,
talent.c:victim->mana -= amt;
talent.c:ch->mana += amt;
talent.c:if( ch->mana <= 0 )
talent.c:ch->max_mana = UMAX( 20, ch->nation->mana * get_curr_int( ch ) + ch->base_mana );
talent.c:ch->mana = ch->max_mana;
talent.c:if( ch->mana <= 0 )
talent.c:victim->max_mana = UMAX( 20, victim->nation->mana * get_curr_int( victim ) + victim->base_mana );
talent.c:victim->mana = UMIN( victim->max_mana, victim->mana );
talent.c:if( ch->mana <= 0 )
talent.c:if( victim->mana < 100 )
talent.c:if( victim->mana < 100 )
talent.c:if( victim->mana < 50 )
talent.c:if( obj->mana < 500 )
talent.c:obj->mana -= 500;
talent.c:if( obj->mana < 500 )
talent.c:obj->mana -= 500;
talent.c:lose_hp( ch, obj->mana * 3 + ( obj->raw_mana / 30 ) );
talent.c:amt = ch->mana / magic;
talent.c:ch->mana = ch->max_mana + amt;
talent.c:ch->mana -= amt;
talent.c:victim->mana += amt;
talent.c:if( ch->mana < victim->perm_con * 10 )
talent.c:if( ch->mana - ( pMobIndex->perm_con * 50 ) < 0 )
talent.c:use_magic( ch, TAL_HEALING, ch->mana );
talent.c:if( obj->mana && ch->curr_talent[TAL_SEEKING] >= 40 )
talent.c:obj->mana );
talent.c:if( obj->mana < amt )
talent.c:if( obj->mana < amt )
talent.c:if( obj->mana < amt )
talent.c:if( obj->mana < amt )
talent.c:if( obj->mana < amt )
talent.c:if( obj->mana < amt )
talent.c:obj->mana -= amt;
update.c: if( ch->mana < 0 )
update.c: if( ch->mana < -1000 )
update.c: check_rebirth( ch, ch->mana * -1 );
update.c: if( ch->mana > 0 )
update.c: ch->mana -= 100;
update.c: ch->mana -= 30;
update.c: i = number_range( 0, ch->in_room->area->weather->mana * 10 );
update.c: ch->in_room->area->weather->mana -= ( int )i / 10;
update.c: return UMIN( gain, ch->max_mana - ch->mana );
update.c: if( ch->mana < 0 || IS_SET( ch->mood, MOOD_READY ) )
update.c: if( ch->mana < ch->max_mana )
update.c: ch->mana += mana_gain( ch );
update.c: else if( ch->mana > ch->max_mana )
update.c: lose_hp( ch, ( ch->mana - ch->max_mana ) );
update.c: ch->mana = ch->max_mana;
update.c: ch->max_mana = UMAX( 20, ch->nation->mana * get_curr_int( ch ) + ch->base_mana );
update.c: obj->mana++;
update.c: obj->mana++;
update.c: dM += ( neigh->address->weather->mana - weather->mana ) / neigh_factor;
update.c: weather->mana_vector += ( int )dM;
update.c: weather->mana_vector = URANGE( -max_vector, weather->mana_vector, max_vector );
update.c: pArea->weather->mana += pArea->weather->mana_vector;
update.c: pArea->weather->mana += 50;
update.c: pArea->weather->mana = URANGE( -limit, pArea->weather->mana, limit );
update.c: mana = weath->mana;
update.c: dM = weath->mana_vector;
then you kind of look for the stuff that deals with weather etc...