示例#1
0
/*
 * Test signed division of a by b: size n
 */
static void test_sdiv(uint32_t n, literal_t *a, literal_t *b) {
  literal_t *q;
  literal_t *r;

  printf("a = ");
  print_bitvector(n, a);
  printf("\n");
  printf("b = ");
  print_bitvector(n, b);
  printf("\n");

  q = remap_table_fresh_array(&remap, n);
  r = remap_table_fresh_array(&remap, n);
  int_array_incref(q);
  int_array_incref(r);

  bit_blaster_make_sdivision(&blaster, a, b, q, r, n);
  printf("(bvsdiv a b) = ");
  print_pseudo_vector(n, q);
  printf("\n(bvurem a b) = ");
  print_pseudo_vector(n, r);
  printf("\n\n");

  remap_table_free_array(q);
  remap_table_free_array(r);
}
示例#2
0
void fwrite_discipline( FILE *fpout, DISC_DATA *discipline )
{
   FACTOR_DATA *factor;
   AFFECT_DATA *aff;

   fprintf( fpout, "ID         %d\n", discipline->id );
   fprintf( fpout, "Name       %s~\n", discipline->name );
   fprintf( fpout, "Gains      %d %d %d\n", discipline->hit_gain, discipline->move_gain, discipline->mana_gain );
   fprintf( fpout, "MinLevel   %d\n", discipline->min_level );
   fprintf( fpout, "Cost       %s\n", print_bitvector( &discipline->cost ) );
   fprintf( fpout, "SkillType  %s\n", print_bitvector( &discipline->skill_type ) );
   fprintf( fpout, "SkillStyle %s\n", print_bitvector( &discipline->skill_style ) );
   fprintf( fpout, "Damtype    %s\n", print_bitvector( &discipline->damtype ) );
   fprintf( fpout, "TargetType %s\n", print_bitvector( &discipline->target_type ) );

   for( factor = discipline->first_factor; factor; factor = factor->next )
   {
      fprintf( fpout, "#Factor %d %d %d %s %f %d %f\n", factor->id, factor->factor_type, factor->location, print_bitvector( &factor->affect ), factor->modifier, factor->apply_type, factor->duration );
   }

   for( aff = discipline->first_affect; aff; aff = aff->next )
      fwrite_fuss_affect( fpout, aff );

   fprintf( fpout, "\nEnd\n" );
}
示例#3
0
/*
 * Test smod of a by b: size n
 */
static void test_smod(uint32_t n, literal_t *a, literal_t *b) {
  literal_t *r;

  printf("a = ");
  print_bitvector(n, a);
  printf("\n");
  printf("b = ");
  print_bitvector(n, b);
  printf("\n");

  r = remap_table_fresh_array(&remap, n);
  int_array_incref(r);

  bit_blaster_make_smod(&blaster, a, b, r, n);
  printf("(bsmod a b) = ");
  print_pseudo_vector(n, r);
  printf("\n\n");

  remap_table_free_array(r);
}
示例#4
0
/*
 * Test (bvmul a b): size n
 * - use variant implementation
 */
static void test_bvmul2(uint32_t n, literal_t *a, literal_t *b) {
  literal_t *u;

  printf("a = ");
  print_bitvector(n, a);
  printf("\n");
  printf("b = ");
  print_bitvector(n, b);
  printf("\n");

  u = remap_table_fresh_array(&remap, n);
  int_array_incref(u);

  bit_blaster_make_bvmul2(&blaster, a, b, u, n);
  printf("(bvmul a b) = ");
  print_pseudo_vector(n, u);
  printf("\n\n");

  remap_table_free_array(u);
}
示例#5
0
/*
 * Arithmetic shift right, with a constant shift amount b
 */
static void test_bvashr_const_shift(uint32_t n, literal_t *a, literal_t *b) {
    literal_t *u;

    printf("a = ");
    print_bitvector(n, a);
    printf("\n");

    u = remap_table_fresh_array(&remap, n);
    int_array_incref(u);

    bit_blaster_make_ashift_right(&blaster, a, b, u, n);

    printf("(bvashr a ");
    print_litarray_as_uint32(n, b);
    printf(") = ");
    print_pseudo_vector(n, u);
    printf("\n\n");

    remap_table_free_array(u);
}
示例#6
0
/*
 * Save the world's objects and mobs in their current positions -- Scion
 */
void save_mobile( FILE * fp, CHAR_DATA * mob )
{
   AFFECT_DATA *paf;
   SKILLTYPE *skill = NULL;

   if( !IS_NPC( mob ) || !fp )
      return;
   fprintf( fp, "%s", "#MOBILE\n" );
   fprintf( fp, "Vnum	%d\n", mob->pIndexData->vnum );
   fprintf( fp, "Level   %d\n", mob->top_level );
   fprintf( fp, "Gold	%d\n", mob->gold );
   fprintf( fp, "Resetvnum %d\n", mob->resetvnum );
   fprintf( fp, "Resetnum  %d\n", mob->resetnum );
   if( mob->in_room )
   {
      if( IS_SET( mob->act, ACT_SENTINEL ) )
      {
         /*
          * Sentinel mobs get stamped with a "home room" when they are created
          * by create_mobile(), so we need to save them in their home room regardless
          * of where they are right now, so they will go to their home room when they
          * enter the game from a reboot or copyover -- Scion 
          */
         fprintf( fp, "Room	%d\n", mob->home_vnum );
      }
      else
         fprintf( fp, "Room	%d\n", mob->in_room->vnum );
   }
   else
      fprintf( fp, "Room	%d\n", ROOM_VNUM_LIMBO );
#ifdef OVERLANDCODE
   fprintf( fp, "Coordinates  %d %d %d\n", mob->x, mob->y, mob->map );
#endif
   if( mob->name && mob->pIndexData->player_name && str_cmp( mob->name, mob->pIndexData->player_name ) )
      fprintf( fp, "Name     %s~\n", mob->name );
   if( mob->short_descr && mob->pIndexData->short_descr && str_cmp( mob->short_descr, mob->pIndexData->short_descr ) )
      fprintf( fp, "Short	%s~\n", mob->short_descr );
   if( mob->long_descr && mob->pIndexData->long_descr && str_cmp( mob->long_descr, mob->pIndexData->long_descr ) )
      fprintf( fp, "Long	%s~\n", mob->long_descr );
   if( mob->description && mob->pIndexData->description && str_cmp( mob->description, mob->pIndexData->description ) )
      fprintf( fp, "Description %s~\n", mob->description );
   fprintf( fp, "HpManaMove   %d %d %d %d %d %d\n",
            mob->hit, mob->max_hit, mob->mana, mob->max_mana, mob->move, mob->max_move );
   fprintf( fp, "Position %d\n", mob->position );
   fprintf( fp, "Flags %d\n", mob->act );
   fprintf( fp, "AffectedBy   %s\n", print_bitvector( &mob->affected_by ) );

   for( paf = mob->first_affect; paf; paf = paf->next )
   {
      if( paf->type >= 0 && ( skill = get_skilltype( paf->type ) ) == NULL )
         continue;

      if( paf->type >= 0 && paf->type < TYPE_PERSONAL )
         fprintf( fp, "AffectData   '%s' %f %3d %3d %s\n",
                  skill->name, paf->duration, paf->modifier, paf->location, print_bitvector( &paf->bitvector ) );
      else
         fprintf( fp, "Affect       %3d %f %3d %3d %s\n",
                  paf->type, paf->duration, paf->modifier, paf->location,print_bitvector(  &paf->bitvector ) );
   }

   de_equip_char( mob );

   if( mob->first_carrying )
      fwrite_obj( mob, mob->last_carrying, fp, 0, OS_CARRY, TRUE );

   re_equip_char( mob );

   fprintf( fp, "%s", "EndMobile\n\n" );
   return;
}
示例#7
0
/*
 * Print u[0 .. n-1] as an array of literals
 * - n must be no more than 32
 */
static void print_pseudo_vector(uint32_t n, literal_t *u) {
  literal_t a[n];

  pseudo_convert(n, u, a);
  print_bitvector(n, a);
}
示例#8
0
/*
 * Write skill data to a file
 */
void fwrite_skill( FILE * fpout, SKILLTYPE * skill )
{
   FACTOR_DATA *factor;
   AFFECT_DATA *aff;
   STAT_BOOST *stat_boost;

   fprintf( fpout, "Name         %s~\n", skill->name );
   fprintf( fpout, "Type         %s\n", skill_tname[skill->type] );
   fprintf( fpout, "Flags        %d\n", skill->flags );
   if( skill->target )
      fprintf( fpout, "Target       %d\n", skill->target );
   fprintf( fpout, "Style        %d\n", skill->style );
   if( skill->minimum_position )
      fprintf( fpout, "Minpos       %d\n", skill->minimum_position );
   if( skill->saves )
      fprintf( fpout, "Saves        %d\n", skill->saves );
   if( skill->slot )
      fprintf( fpout, "Slot         %d\n", skill->slot );
   if( skill->min_hp )
      fprintf( fpout, "HP           %d\n", skill->min_hp );
   if( skill->min_mana )
      fprintf( fpout, "Mana         %d\n", skill->min_mana );
   if( skill->min_move )
      fprintf( fpout, "Move         %d\n", skill->min_move );
   fprintf( fpout, "Cost         %s\n", print_bitvector( &skill->cost ) );
   if( skill->beats )
      fprintf( fpout, "Rounds       %d\n", skill->beats );
   if( skill->charge )
      fprintf( fpout, "Charge       %f\n", skill->charge );
   if( skill->guild != -1 )
      fprintf( fpout, "Guild        %d\n", skill->guild );
   fprintf( fpout, "Dammsg       %s~\n", skill->noun_damage );
   if( skill->msg_off && skill->msg_off[0] != '\0' )
      fprintf( fpout, "Wearoff      %s~\n", skill->msg_off );

   if( skill->hit_char && skill->hit_char[0] != '\0' )
      fprintf( fpout, "Hitchar      %s~\n", skill->hit_char );
   if( skill->hit_vict && skill->hit_vict[0] != '\0' )
      fprintf( fpout, "Hitvict      %s~\n", skill->hit_vict );
   if( skill->hit_room && skill->hit_room[0] != '\0' )
      fprintf( fpout, "Hitroom      %s~\n", skill->hit_room );

   if( skill->miss_char && skill->miss_char[0] != '\0' )
      fprintf( fpout, "Misschar     %s~\n", skill->miss_char );
   if( skill->miss_vict && skill->miss_vict[0] != '\0' )
      fprintf( fpout, "Missvict     %s~\n", skill->miss_vict );
   if( skill->miss_room && skill->miss_room[0] != '\0' )
      fprintf( fpout, "Missroom     %s~\n", skill->miss_room );

   if( skill->die_char && skill->die_char[0] != '\0' )
      fprintf( fpout, "Diechar      %s~\n", skill->die_char );
   if( skill->die_vict && skill->die_vict[0] != '\0' )
      fprintf( fpout, "Dievict      %s~\n", skill->die_vict );
   if( skill->die_room && skill->die_room[0] != '\0' )
      fprintf( fpout, "Dieroom      %s~\n", skill->die_room );

   if( skill->imm_char && skill->imm_char[0] != '\0' )
      fprintf( fpout, "Immchar      %s~\n", skill->imm_char );
   if( skill->imm_vict && skill->imm_vict[0] != '\0' )
      fprintf( fpout, "Immvict      %s~\n", skill->imm_vict );
   if( skill->imm_room && skill->imm_room[0] != '\0' )
      fprintf( fpout, "Immroom      %s~\n", skill->imm_room );

   if( skill->dice && skill->dice[0] != '\0' )
      fprintf( fpout, "Dice         %s~\n", skill->dice );
   if( skill->value )
      fprintf( fpout, "Value        %d\n", skill->value );
   if( skill->threat )
      fprintf( fpout, "Threat       %d\n", skill->threat );
   if( skill->cooldown )
      fprintf( fpout, "Cooldown     %d\n", skill->cooldown );
   if( skill->difficulty )
      fprintf( fpout, "Difficulty   %d\n", skill->difficulty );
   if( skill->participants )
      fprintf( fpout, "Participants %d\n", skill->participants );
   if( skill->components && skill->components[0] != '\0' )
      fprintf( fpout, "Components   %s~\n", skill->components );
   if( skill->teachers && skill->teachers[0] != '\0' )
      fprintf( fpout, "Teachers     %s~\n", skill->teachers );
   for( aff = skill->first_affect; aff; aff = aff->next )
      fwrite_fuss_affect( fpout, aff );
   if( skill->alignment )
      fprintf( fpout, "Alignment   %d\n", skill->alignment );

   fprintf( fpout, "DamageDetails   %f\n", skill->base_roll_boost );

   for( stat_boost = skill->first_statboost; stat_boost; stat_boost = stat_boost->next )
      fprintf( fpout, "StatBoost  %d %d %f\n", stat_boost->from_id, stat_boost->location, stat_boost->modifier );

   if( !xIS_EMPTY( skill->damtype ) )
      fprintf( fpout, "Damtype         %s\n", print_bitvector( &skill->damtype ) );
   if( skill->type != SKILL_HERB )
   {
      fprintf( fpout, "Minlevel     %d\n", skill->min_level );
   }
   for( factor = skill->first_factor; factor; factor = factor->next )
      fprintf( fpout, "FactorID     %d\n", factor->id );
   fprintf( fpout, "End\n\n" );
}