dbna/clans/
dbna/councils/
dbna/deity/
dbna/gods/
dbna/houses/
dbna/space/
#include <sys/types.h>
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "mud.h"

void do_fusiondance( CHAR_DATA * ch, char *argument )
{
  CHAR_DATA *rch;
  CHAR_DATA *vch;
  CHAR_DATA *dch; /*dominant fuse char */
  CHAR_DATA *sch; /*stasis fuse char */
  char arg[MAX_INPUT_LENGTH];
  char arg2[MAX_INPUT_LENGTH];
  bool cright = FALSE;
  bool vright = FALSE;
  bool cleft = FALSE;
  bool vleft = FALSE;
  OBJ_DATA *ro;
  OBJ_DATA *vo;
  OBJ_DATA *po;
  OBJ_DATA *o;
  OBJ_INDEX_DATA *pObjIndex;
 // int sn;
 // int value;
  bool saiyan1 = FALSE, saiyan2 = FALSE;
  bool namek1 = FALSE, namek2 = FALSE;
  bool human1 = FALSE, human2 = FALSE;
  bool halfb1 = FALSE, halfb2 = FALSE;
  bool genie1 = FALSE, genie2 = FALSE;


  argument = one_argument( argument, arg );
  argument = one_argument( argument, arg2 );

  if( arg[0] == '\0' )
  {
    ch_printf( ch, "\n\rSyntax:  fusiondance (first person) (second person)\n\r" );
    ch_printf( ch, "\n\rThe order in which you put the two people's names in does not matter.\n\r" );
    return;
  }
  if( ( rch = get_char_room( ch, arg ) ) == NULL )
  {
    ch_printf( ch, "There is nobody here named %s.\n\r", arg );
    return;
  }
  if( ( vch = get_char_room( ch, arg2 ) ) == NULL )
  {
    ch_printf( ch, "There is nobody here named %s.\n\r", arg2 );
    return;
  }
  if( IS_NPC( rch ) || IS_NPC( vch ) )
  {
    ch_printf( ch, "NPC's cannot fuse.\n\r" );
    return;
  }
  if( is_fused( rch ) )
  {
    ch_printf( ch, "%s has already fused before.\n\r", rch->name );
    return;
  }
  if( is_fused( vch ) )
  {
    ch_printf( ch, "%s has already fused before.\n\r", vch->name );
    return;
  }
  if( IS_IMMORTAL( rch ) || IS_IMMORTAL( vch ) )
  {
    ch_printf( ch, "Admins may not fuse.\n\r" );
    return;
  }
  if( rch->pcdata->clan )
  {
    ch_printf( ch, "%s must be outcasted from their clan first.\n\r", rch->name );
    return;
  }
  if( vch->pcdata->clan )
  {
    ch_printf( ch, "%s must be outcasted from their clan first.\n\r", vch->name );
    return;
  }

  if( is_transformed( rch ) )
  {
    ch_printf( ch, "%s must power down completely first.\n\r", rch->name );
    return;
  }
  if( is_transformed( vch ) )
  {
    ch_printf( ch, "%s must power down completely first.\n\r", vch->name );
    return;
  }
  if( ( ro = fusion_item_1( rch ) ) == NULL )
  {
    if( ( ro = fusion_item_2( rch ) ) == NULL )
    {
      ch_printf( ch, "%s is not wearing a needed item..\n\r", rch->name );
      return;
    }
    else
      cleft = TRUE;
  }
  else
    cright = TRUE;
  if( ( vo = fusion_item_1( vch ) ) == NULL )
  {
    if( ( vo = fusion_item_2( vch ) ) == NULL )
    {
      ch_printf( ch, "%s is not wearing a needed item.\n\r", vch->name );
      return;
    }
    else
      vleft = TRUE;
  }
  else
    vright = TRUE;

  if( cright && vright )
  {
    ch_printf( ch, "One of them must be wearing a needed item.\n\r" );
    return;
  }
  if( cleft && vleft )
  {
    ch_printf( ch, "One of them must be wearing a needed item.\n\r" );
    return;
  }
  if( cright && vleft )
  {
    dch = rch;
    sch = vch;
  }
  else if( cleft && vright )
  {
    dch = vch;
    sch = rch;
  }
  else
  {
    ch_printf( ch, "Cyris fucked up. Let him know...\n\r" );
    return;
  }

  unequip_char( rch, ro );
  unequip_char( vch, vo );
  extract_obj( ro );
  extract_obj( vo );

  pObjIndex = get_obj_index( 620 );
  po = create_object_new( pObjIndex, 1, ORIGIN_OINVOKE, ch->name );
  po = obj_to_char( po, dch );

  dch->fused[dch->fusions] = STRALLOC( sch->name );
  sch->fused[sch->fusions] = STRALLOC( dch->name );
  dch->fusions++;
  sch->fusions++;
  dch->bck_name = STRALLOC( dch->name );
  sch->bck_name = STRALLOC( sch->name );
  dch->bck_race = dch->race;
  sch->bck_race = sch->race;
  dch->bck_pl = dch->exp;
  sch->bck_pl = sch->exp;
  dch->fusiontimer = 60;
  sch->fusiontimer = 60;

/* Get fusion shit for this --Cyris*/

  if( !str_cmp( get_race( dch ), "saiyan" ) )
    saiyan1 = TRUE;
  if( !str_cmp( get_race( sch ), "saiyan" ) )
    saiyan2 = TRUE;
  if( !str_cmp( get_race( dch ), "namek" ) )
    namek1 = TRUE;
  if( !str_cmp( get_race( sch ), "namek" ) )
    namek2 = TRUE;
  if( !str_cmp( get_race( dch ), "human" ) )
    human1 = TRUE;
  if( !str_cmp( get_race( sch ), "human" ) )
    human2 = TRUE;
  if( !str_cmp( get_race( dch ), "halfbreed" ) )
    halfb1 = TRUE;
  if( !str_cmp( get_race( sch ), "halfbreed" ) )
    halfb2 = TRUE;
  if( !str_cmp( get_race( sch ), "genie" ) )
    genie2 = TRUE;
  if( !str_cmp( get_race( sch ), "genie" ) )
    genie2 = TRUE;

  if( ( saiyan1 && namek2 ) )
  {
    dch->race = get_race_num( "saiyan-n" );
    dch->class = get_class_num( "saiyan-n" );
  }
  else if( ( saiyan2 && namek1 ) )
  {
    dch->race = get_race_num( "namek-s" );
    dch->class = get_class_num( "namek-s" );
  }
  else if( ( saiyan1 && human2 ) )
  {
    dch->race = get_race_num( "saiyan-h" );
    dch->class = get_class_num( "saiyan-h" );
  }
  else if( ( saiyan2 && human1 ) )
  {
    dch->race = get_race_num( "human-s" );
    dch->class = get_class_num( "human-s" );
  }
  else if( ( saiyan1 && halfb2 ) )
  {
    dch->race = get_race_num( "saiyan-hb" );
    dch->class = get_class_num( "saiyan-hb" );
  }
  else if( ( saiyan2 && halfb1 ) )
  {
    dch->race = get_race_num( "halfbreed-s" );
    dch->class = get_class_num( "halfbreed-s" );
  }
  else if( ( saiyan1 && saiyan2 ) )
  {
    dch->race = get_race_num( "saiyan-s" );
    dch->class = get_class_num( "saiyan-s" );
  }
  else if( ( namek1 && halfb2 ) )
  {
    dch->race = get_race_num( "namek-hb" );
    dch->class = get_class_num( "namek-hb" );
  }
  else if( ( namek2 && halfb1 ) )
  {
    dch->race = get_race_num( "halfbreed-n" );
    dch->class = get_class_num( "halfbreed-n" );
  }
  else if( ( human1 && namek2 ) )
  {
    dch->race = get_race_num( "human-n" );
    dch->class = get_class_num( "human-n" );
  }
  else if( ( human2 && namek1 ) )
  {
    dch->race = get_race_num( "namek-h" );
    dch->class = get_class_num( "namek-h" );
  }
  else if( ( human1 && halfb2 ) )
  {
    dch->race = get_race_num( "human-hb" );
    dch->class = get_class_num( "human-hb" );
  }
  else if( ( human2 && halfb1 ) )
  {
    dch->race = get_race_num( "halfbreed-h" );
    dch->class = get_class_num( "halfbreed-h" );
  }
  else if( ( human1 && human2 ) )
  {
    dch->race = get_race_num( "human-h" );
    dch->class = get_class_num( "human-h" );
  }
  else if( ( namek1 && namek2 ) )
  {
    ch_printf( ch, "You cannot fuse like this." );
  }
  else if( ( halfb1 && halfb2 ) )
  {
    dch->race = get_race_num( "halfbreed-hb" );
    dch->class = get_class_num( "halfbreed-hb" );
  }
  else if( ( human1 && genie2 ) )
  {
    dch->race = get_race_num( "Human-g" );
    dch->class = get_class_num( "Human-g" );
  }
  else if( ( genie1 && human2 ) )
  {
    dch->race = get_race_num( "Human-g" );
    dch->class = get_class_num( "Human-g" );
  }
  dch->exp += sch->exp;
  dch->pl = dch->exp;

  /*
   * message sent to dch 
   */

  ch_printf( dch, "You life force fuses with %s's causing them to merge with you!\n\r", sch->name );

  /*
   * message sent to sch 
   */
  ch_printf( sch, "Your body fuses with %s's and you agree to give your namekian power for some reason...\n\r", dch->name );

  while( ( o = carrying_noquit( sch ) ) != NULL )
  {
    obj_from_char( o );
    obj_to_room( o, sch->in_room );
    ch_printf( sch, "&wYou drop %s&w.\n\r", o->short_descr );
  }

  SET_BIT( dch->fusionflags, FUSION_DANCE );
  SET_BIT( sch->fusionflags, FUSION_STASIS );
  do_reserve( ch, dch->name );
  do_reserve( ch, sch->name );
  char_to( sch, ROOM_VNUM_FUSIONSTASIS );
  save_char_obj( dch );
  save_char_obj( sch );

  /*
   * do_sset(ch,strcat(dch->name," all 95"));
   */
  ch_printf( ch, "%s and %s have been fused together.\n\r", dch->name, sch->name );
}