/** * This function loops through the level and does N iterations of * the stat calling function, assuming clearing style. */ static void clearing_stats(void) { int depth; /* Do many iterations of the game */ for (iter = 0; iter < tries; iter++) { /* Move all artifacts to uncreated */ uncreate_artifacts(); /* Move all uniques to alive */ revive_uniques(); /* Do randart regen */ if ((regen) && (iter<tries)) { /* Get seed */ int seed_randart = randint0(0x10000000); /* regen randarts */ do_randart(seed_randart,TRUE); } /* Do game iterations */ for (depth = 1 ; depth < MAX_LVL; depth++) { /* Debug msg_format("Attempting level %d",depth); */ /* Move player to that depth */ player->depth = depth; /* Get stats */ stats_collect_level(); /* Debug msg_format("Finished level %d,depth"); */ } msg("Iteration %d complete",iter); } /* Print to file */ for (depth = 0 ;depth < MAX_LVL; depth++) print_stats(depth); /* Post processing */ post_process_stats(); /* Display the current level */ do_cmd_redraw(); }
/* * Read the random artifacts */ static int rd_randarts(void) { size_t i; byte tmp8u; s16b tmp16s; u16b tmp16u; u16b artifact_count; s32b tmp32s; u32b tmp32u; if (!OPT(adult_randarts)) return 0; if (older_than(3, 0, 14)) { /* * XXX XXX XXX * Importing old savefiles with random artifacts is dangerous * since the randart-generators differ and produce different * artifacts from the same random seed. * * Switching off the check for incompatible randart versions * allows to import such a savefile - do it at your own risk. */ /* Check for incompatible randart version */ if (randart_version != RANDART_VERSION) { note(format("Incompatible random artifacts version!")); return (-1); } /* Initialize randarts */ do_randart(seed_randart, TRUE); } else { /* Read the number of artifacts */ rd_u16b(&artifact_count); /* Alive or cheating death */ if (!p_ptr->is_dead || arg_wizard) { /* Incompatible save files */ if (artifact_count > z_info->a_max) { note(format("Too many (%u) random artifacts!", artifact_count)); return (-1); } /* Mark the old artifacts as "empty" */ for (i = 0; i < z_info->a_max; i++) { artifact_type *a_ptr = &a_info[i]; a_ptr->name = 0; a_ptr->tval = 0; a_ptr->sval = 0; } /* Read the artifacts */ for (i = 0; i < artifact_count; i++) { artifact_type *a_ptr = &a_info[i]; u16b time_base, time_dice, time_sides; rd_byte(&a_ptr->tval); rd_byte(&a_ptr->sval); rd_s16b(&a_ptr->pval); rd_s16b(&a_ptr->to_h); rd_s16b(&a_ptr->to_d); rd_s16b(&a_ptr->to_a); rd_s16b(&a_ptr->ac); rd_byte(&a_ptr->dd); rd_byte(&a_ptr->ds); rd_s16b(&a_ptr->weight); rd_s32b(&a_ptr->cost); /* Hack - XXX - MarbleDice - Maximum saveable flags = 96 */ for (i = 0; i < 12 && i < OF_SIZE; i++) rd_byte(&a_ptr->flags[i]); if (i < 12) strip_bytes(OF_SIZE - i); rd_byte(&a_ptr->level); rd_byte(&a_ptr->rarity); rd_byte(&a_ptr->alloc_prob); rd_byte(&a_ptr->alloc_min); rd_byte(&a_ptr->alloc_max); rd_u16b(&a_ptr->effect); rd_u16b(&time_base); rd_u16b(&time_dice); rd_u16b(&time_sides); a_ptr->time.base = time_base; a_ptr->time.dice = time_dice; a_ptr->time.sides = time_sides; } /* Initialize only the randart names */ do_randart(seed_randart, FALSE); } else { /* Read the artifacts */ for (i = 0; i < artifact_count; i++) { rd_byte(&tmp8u); /* a_ptr->tval */ rd_byte(&tmp8u); /* a_ptr->sval */ rd_s16b(&tmp16s); /* a_ptr->pval */ rd_s16b(&tmp16s); /* a_ptr->to_h */ rd_s16b(&tmp16s); /* a_ptr->to_d */ rd_s16b(&tmp16s); /* a_ptr->to_a */ rd_s16b(&tmp16s); /* a_ptr->ac */ rd_byte(&tmp8u); /* a_ptr->dd */ rd_byte(&tmp8u); /* a_ptr->ds */ rd_s16b(&tmp16s); /* a_ptr->weight */ rd_s32b(&tmp32s); /* a_ptr->cost */ rd_u32b(&tmp32u); /* a_ptr->flags1 */ rd_u32b(&tmp32u); /* a_ptr->flags2 */ rd_u32b(&tmp32u); /* a_ptr->flags3 */ rd_byte(&tmp8u); /* a_ptr->level */ rd_byte(&tmp8u); /* a_ptr->rarity */ rd_byte(&tmp8u); /* a_ptr->alloc_prob */ rd_byte(&tmp8u); /* a_ptr->alloc_min */ rd_byte(&tmp8u); /* a_ptr->alloc_max */ rd_u16b(&tmp16u); /* a_ptr->effect */ rd_u16b(&tmp16u); /* a_ptr->time_base */ rd_u16b(&tmp16u); /* a_ptr->time_dice */ rd_u16b(&tmp16u); /* a_ptr->time_sides */ } } } return (0); }
/* * Read the random artifacts */ static errr rd_randarts(void) { #ifdef GJW_RANDART int i; byte tmp8u; s16b tmp16s; u16b tmp16u; u16b artifact_count; s32b tmp32s; u32b tmp32u; if (older_than(2, 9, 3)) { /* * XXX XXX XXX * Importing old savefiles with random artifacts is dangerous * since the randart-generators differ and produce different * artifacts from the same random seed. * * Switching off the check for incompatible randart versions * allows to import such a savefile - do it at your own risk. */ /* Check for incompatible randart version */ if (randart_version != RANDART_VERSION) { note(format("Incompatible random artifacts version!")); return (-1); } /* Alive or cheating death */ if (!p_ptr->is_dead || arg_wizard) { /* Initialize randarts */ do_randart(seed_randart, TRUE); } } else { /* Read the number of artifacts */ rd_u16b(&artifact_count); /* Alive or cheating death */ if (!p_ptr->is_dead || arg_wizard) { /* Initialize randarts */ do_randart(seed_randart, TRUE); /* Incompatible save files */ if (artifact_count > z_info->a_max) { note(format("Too many (%u) random artifacts!", artifact_count)); return (-1); } /* Read the artifacts */ for (i = 0; i < artifact_count; i++) { artifact_type *a_ptr = &a_info[i]; rd_byte(&a_ptr->tval); rd_byte(&a_ptr->sval); rd_s16b(&a_ptr->pval); rd_s16b(&a_ptr->to_h); rd_s16b(&a_ptr->to_d); rd_s16b(&a_ptr->to_a); rd_s16b(&a_ptr->ac); rd_byte(&a_ptr->dd); rd_byte(&a_ptr->ds); rd_s16b(&a_ptr->weight); rd_s32b(&a_ptr->cost); rd_u32b(&a_ptr->flags1); rd_u32b(&a_ptr->flags2); rd_u32b(&a_ptr->flags3); rd_byte(&a_ptr->level); rd_byte(&a_ptr->rarity); /* Hack -- Unangband requires 2 bytes to store activation */ if (z_info->a_max == 256) rd_s16b(&a_ptr->activation); else rd_byte(&tmp8u); rd_u16b(&a_ptr->time); rd_u16b(&a_ptr->randtime); } } else { /* Read the artifacts */ for (i = 0; i < artifact_count; i++) { rd_byte(&tmp8u); /* a_ptr->tval */ rd_byte(&tmp8u); /* a_ptr->sval */ rd_s16b(&tmp16s); /* a_ptr->pval */ rd_s16b(&tmp16s); /* a_ptr->to_h */ rd_s16b(&tmp16s); /* a_ptr->to_d */ rd_s16b(&tmp16s); /* a_ptr->to_a */ rd_s16b(&tmp16s); /* a_ptr->ac */ rd_byte(&tmp8u); /* a_ptr->dd */ rd_byte(&tmp8u); /* a_ptr->ds */ rd_s16b(&tmp16s); /* a_ptr->weight */ rd_s32b(&tmp32s); /* a_ptr->cost */ rd_u32b(&tmp32u); /* a_ptr->flags1 */ rd_u32b(&tmp32u); /* a_ptr->flags2 */ rd_u32b(&tmp32u); /* a_ptr->flags3 */ rd_byte(&tmp8u); /* a_ptr->level */ rd_byte(&tmp8u); /* a_ptr->rarity */ /* Hack -- Unangband requires 2 bytes to store activation */ if (artifact_count == 256) rd_u16b(&tmp16u); else rd_byte(&tmp8u); rd_u16b(&tmp16u); /* a_ptr->time */ rd_u16b(&tmp16u); /* a_ptr->randtime */ } } } return (0); #else /* GJW_RANDART */ note("Random artifacts are disabled in this binary."); return (-1); #endif /* GJW_RANDART */ }