/* * 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); }
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" ); }
/* * 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); }
/* * 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); }
/* * 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); }
/* * 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; }
/* * 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); }
/* * 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" ); }