You can either have a players symbiote gain levels and max out, or advance through mob kills.
by Xrakisis, marcusironfist@hotmail.com



interp.c
    { "gainsymbiote",     do_gainsymbiote, POS_DEAD,                 3,  LOG_NORMAL, 0,0,0 },
    { "symbioteadvance",     do_symbioteadvance, POS_DEAD,                 3,  LOG_NORMAL, 0,0,0 },

interp.h
DECLARE_DO_FUN(do_gainsymbiote);
DECLARE_DO_FUN(do_symbioteadvance);

save.c
// Symbiote variables
    fprintf( fp, "Symbioteac   %d\n",  ch->symbioteac );
    fprintf( fp, "Symbioteaff  %d\n",  ch->symbioteaff );
    fprintf( fp, "Symbiotedc   %d\n",  ch->symbiotedc );
    fprintf( fp, "Symbiotedr   %d\n",  ch->symbiotedr );
    fprintf( fp, "Symbiotehr   %d\n",  ch->symbiotehr );
    fprintf( fp, "Symbiotelvl  %d\n",  ch->symbiotelvl );
    fprintf( fp, "Symbiotepoints   %d\n",  ch->symbiotepoints );
    fprintf( fp, "Symbiotetype   %d\n",  ch->symbiotetype );
    fprintf( fp, "Symbiotemkills %d\n", ch->symbiotemkills );

    ch->symbioteac                      = 0;
    ch->symbioteaff                     = 0;
    ch->symbiotedc                      = 0;
    ch->symbiotedr                      = 0;
    ch->symbiotehr                      = 0;
    ch->symbiotelvl                     = 0;
    ch->symbiotepoints                  = 0;
    ch->symbiotetype                    = 0;
    ch->symbiotemkills                  = 0;

            KEY( "Symbioteac", ch->symbioteac,  fread_number( fp ));
            KEY( "Symbioteaff", ch->symbioteaff, fread_number( fp ));
            KEY( "Symbiotedc", ch->symbiotedc,   fread_number( fp ));
            KEY( "Symbiotedr", ch->symbiotedr,   fread_number( fp ));
            KEY( "Symbiotehr", ch->symbiotehr,   fread_number( fp ));
            KEY( "Symbiotelvl", ch->symbiotelvl,   fread_number( fp ));
            KEY( "Symbiotemkills", ch->symbiotemkills, fread_number( fp ));
            KEY( "Symbiotepoints", ch->symbiotepoints,   fread_number( fp ));
            KEY( "Symbiotetype", ch->symbiotetype, fread_number( fp ));




fight.c
update_damcap

        if (ch->symbiotetype != 0)  max_dam += ch->symbiotedc;


hurt person
        if (ch->symbiotetype != 0)
        {
        ch->symbiotemkills += 1;

        if (ch->symbiotemkills >= 1000)
        {
        ch->symbiotemkills = 0;
        ch->symbiotepoints++;
        stc("#GYour Symbiote gains a point#n.\n\r", ch);
        }
        }

jobo_util.c
getmight

  if (ch->symbioteac > 0)
  might += ch->symbioteac / 10;

  if (ch->symbiotedc > 0)
  might += ch->symbiotedc / 10;

  if (ch->symbiotedr > 0)
  might += ch->symbiotedr / 5;

  if (ch->symbiotehr > 0)
  might += ch->symbiotehr / 5;


act_info
char_damroll

        if (ch->symbiotetype != 0)
        value += ch->symbiotedr;


char_hitroll
        if (ch->symbiotetype != 0)
        value += ch->symbiotehr;

char_ac
        if (ch->symbiotetype != 0)
        value -= ch->symbioteac;


/* symbiote.c */
void do_symbioteadvance(CHAR_DATA * ch, char *argument)
{
        char buf[MAX_STRING_LENGTH];
	char arg1[MAX_INPUT_LENGTH];
	int mkills = 1000;

	if (IS_NPC(ch))
	return;

  one_argument( argument, arg1);

  if (ch->level < 3)
  {
    send_to_char("You must be avatar to advance your Symbiote.\n\r",ch);
    return;
  }
  if (ch->symbiotetype < 1)
  {
    send_to_char("You do not have a symbiote.\n\r",ch);
    return;
  }

  if (arg1[0] == '\0')
  {  
  
send_to_char("#R[#0--------------------#R[#7Symbiote Screen#R]#0--------------------#R]#n\n\r", ch);


	if (ch->symbiotetype == 2) stc("Death Symbiote\n\r",ch);
	if (ch->symbiotetype == 1) stc("Life Symbiote\n\r",ch);


    sprintf(buf, "Damroll Modifier: %d  \n\r",ch->symbiotedr);
    send_to_char(buf,ch);

    sprintf(buf, "Hitroll Modifier: %d\n\r",ch->symbiotehr);
    send_to_char(buf,ch);

    sprintf(buf, "AC Modifier: %d\n\r",ch->symbioteac);
    send_to_char(buf,ch);

    sprintf(buf, "Damcap Modifier: %d\n\r",ch->symbiotedc);
    send_to_char(buf,ch);

//    sprintf(buf, "Current Level: %d\n\r",ch->symbiotelvl);
//    send_to_char(buf,ch);

    sprintf(buf, "Symbiote Points %d\n\r",ch->symbiotepoints);
    send_to_char(buf, ch);

    sprintf(buf, "Mob kills until next point: %d\n\r",(mkills -= ch->symbiotemkills));
    send_to_char(buf,ch);

//    sprintf(buf,"Cost of advancing symbiote's level :%d EXP, %d Bones\n\r", sgainexp, sgainbones);
//    send_to_char(buf,ch);


send_to_char("#R[#0------------------#R[#7Symbiote Arguments#R]#0------------------#R]#n\n\r", ch);
send_to_char("damroll(+5 DR), hitroll(+5 HR), ac(-10 AC), damcap(+10 DC)\n\r", ch);
	
	send_to_char("#R[#0--------------------#R[#7Symbiote Screen#R]#0--------------------#R]#n\n\r", ch);
	return;
}


if (!str_cmp(arg1,"damroll"))
{

	if (ch->symbiotedr >= 2000)
	{
	send_to_char( "Symbiote Damroll Maxed\n\r", ch);
	return;
	}
	if (ch->symbiotepoints < 1)
	{
	send_to_char( "Not enough symbiote points.\n\r", ch);
	return;
	}
	send_to_char( "Damroll increased by 5.\n\r", ch);
	ch->symbiotedr += 5;
        ch->symbiotepoints -= 1;
	return;
}

if (!str_cmp(arg1,"hitroll"))
{

	if (ch->symbiotehr >= 2000)
	{
	send_to_char( "Symbiote Hitroll Maxed\n\r", ch);
	return;
	}
        if (ch->symbiotepoints < 1)
        {
        send_to_char( "Not enough symbiote points.\n\r", ch);
        return;
        }
	send_to_char( "Hitroll increased by 5.\n\r", ch);
	ch->symbiotehr += 5;
        ch->symbiotepoints -= 1;
	return;
}
if (!str_cmp(arg1,"damcap"))
{

	if (ch->symbiotedc >= 2000)
	{
	send_to_char( "Symbiote Damcap Maxed\n\r", ch);
	return;
	}
        if (ch->symbiotepoints < 1)
        {
        send_to_char( "Not enough symbiote points.\n\r", ch);
        return;
        }
	send_to_char( "Damcap increased by 10.\n\r", ch);
	ch->symbiotedc += 10;
        ch->symbiotepoints -= 1;
	return;
}
if (!str_cmp(arg1,"ac"))
{

	if (ch->symbioteac >= 2000)
	{
	send_to_char( "Symbiote AC Maxed\n\r", ch);
	return;
	}
        if (ch->symbiotepoints < 1)
        {
        send_to_char( "Not enough symbiote points.\n\r", ch);
        return;
        }
	send_to_char( "Armor increased by 10.\n\r", ch);
	ch->symbioteac += 10;
        ch->symbiotepoints -= 1;
	return;
}
return;
}

void do_gainsymbiote(CHAR_DATA * ch, char *argument)
{
        char      buf[MAX_STRING_LENGTH];
	char arg[MAX_INPUT_LENGTH];

	if (IS_NPC(ch))
	return;
 
  one_argument( argument, arg);  
        
  if (ch->level < 3)
  {
    send_to_char("You must be an avatar to gain a Symbiote.\n\r",ch);
    return;
  }

  if (!IS_NPC(ch) && ch->symbiotetype != 0)
  {   
    send_to_char("You already have a symbiote.\n\r",ch);
    return;
  }

  if (arg[0] == '\0')
  {
  
        send_to_char("type gainsymbiote (name) to choose a Symbiote.\n\r",ch);
	send_to_char("#Y--#CDeath Symbiote\n\r",ch);
        send_to_char("#Y--#CLife Symbiote\n\r",ch);
	send_to_char("Cost: 200,000 Bones\n\r",ch);
        return;
  }



if (!str_cmp(arg,"death"))
{
   if (ch->bones < 200000)
   {
        send_to_char( "You do not have enough bones.\n\r", ch);
        return;
   }
   else
   {
	ch->symbiotetype = SYMBIOTE_DEATH;
	send_to_char( "A Death Symbiote absorbs into your body.\n\r", ch);
	ch->bones -= 200000;
	return;
   }
}        
else if (!str_cmp(arg,"life"))
{
   if (ch->bones < 200000)
   {
        send_to_char( "You do not have enough bones.\n\r", ch);
        return;
   }
   else
   {
	ch->symbiotetype = SYMBIOTE_LIFE;
	send_to_char( "A Life Symbiote absorbs into your body.\n\r", ch);
	ch->bones -= 200000;
	return;
   }
}        
  else do_gainsymbiote(ch,"");   
  return;
}