/* * Create a spoiler file for artifacts */ static void spoil_artifact(const char *fname) { int i, j; object_type *i_ptr; object_type object_type_body; char buf[1024]; /* Build the filename */ path_build(buf, sizeof(buf), ANGBAND_DIR_USER, fname); fh = file_open(buf, MODE_WRITE, FTYPE_TEXT); /* Oops */ if (!fh) { msg("Cannot create spoiler file."); return; } /* Dump to the spoiler file */ text_out_hook = text_out_to_file; text_out_file = fh; /* Dump the header */ spoiler_underline(format("Artifact Spoilers for %s", buildid), '='); /* List the artifacts by tval */ for (i = 0; group_artifact[i].tval; i++) { /* Write out the group title */ if (group_artifact[i].name) { spoiler_blanklines(2); spoiler_underline(group_artifact[i].name, '='); spoiler_blanklines(1); } /* Now search through all of the artifacts */ for (j = 1; j < z_info->a_max; ++j) { artifact_type *a_ptr = &a_info[j]; char buf[80]; /* We only want objects in the current group */ if (a_ptr->tval != group_artifact[i].tval) continue; /* Get local object */ i_ptr = &object_type_body; /* Wipe the object */ object_wipe(i_ptr); /* Attempt to "forge" the artifact */ if (!make_fake_artifact(i_ptr, a_ptr)) continue; /* Grab artifact name */ object_desc(buf, sizeof(buf), i_ptr, ODESC_PREFIX | ODESC_COMBAT | ODESC_EXTRA | ODESC_SPOIL); /* Print name and underline */ spoiler_underline(buf, '-'); /* Write out the artifact description to the spoiler file */ object_info_spoil(fh, i_ptr, 80); /* * Determine the minimum and maximum depths an * artifact can appear, its rarity, its weight, and * its power rating. */ text_out("\nMin Level %u, Max Level %u, Generation chance %u, Power %d, %d.%d lbs\n", a_ptr->alloc_min, a_ptr->alloc_max, a_ptr->alloc_prob, object_power(i_ptr, FALSE, NULL, TRUE), (a_ptr->weight / 10), (a_ptr->weight % 10)); /* Terminate the entry */ spoiler_blanklines(2); } } /* Check for errors */ if (!file_close(fh)) { msg("Cannot close spoiler file."); return; } /* Message */ msg("Successfully created a spoiler file."); }
/* * Create a spoiler file for artifacts */ static void spoil_artifact(void) { int i, j; object_type forge; object_type *q_ptr; const bool old_spoil_art = spoil_art; const bool old_spoil_base = spoil_base; const bool old_cheat_item = cheat_item; /* Use full spoilers, but no cheating. */ spoil_art = spoil_base = TRUE; cheat_item = FALSE; /* Dump the header */ print_header(); /* List the artifacts by tval */ for (i = 0; group_artifact[i].idx; i++) { /* Write out the group title */ if (group_artifact[i].str) { spoiler_blanklines(2); spoiler_underline(group_artifact[i].str); spoiler_blanklines(1); } /* Now search through all of the artifacts */ for (j = 1; j < MAX_A_IDX; ++j) { artifact_type *a_ptr = &a_info[j]; /* We only want objects in the current group */ if (k_info[a_ptr->k_idx].tval != group_artifact[i].idx) continue; /* Get local object */ q_ptr = &forge; /* Wipe the object */ object_wipe(q_ptr); /* Attempt to "forge" the artifact */ if (!make_fake_artifact(q_ptr, j)) continue; /* Know most things about the object. */ object_known(q_ptr); my_fprintf(fff, "%v\n", object_desc_f3, q_ptr, OD_ART | OD_SHOP, 1); /* Describe the artifact in a relatively brief way. */ identify_fully_file(q_ptr, fff, TRUE); /* Provide some allocation data. */ fprintf(fff, " Level %d", a_ptr->level); if (a_ptr->level2 && a_ptr->level2 != a_ptr->level) { fprintf(fff, "/%d", a_ptr->level2); } fprintf(fff, ", Rarity %d, %d.%d lbs, %ld Gold\n", a_ptr->rarity, a_ptr->weight/10, a_ptr->weight%10, a_ptr->cost); } } /* Reset spoilers. */ spoil_art = old_spoil_art; spoil_base = old_spoil_base; cheat_item = old_cheat_item; }
/** * Create a spoiler file for artifacts */ static void spoil_artifact(const char *fname) { int i, j; char buf[1024]; /* Build the filename */ path_build(buf, sizeof(buf), ANGBAND_DIR_USER, fname); fh = file_open(buf, MODE_WRITE, FTYPE_TEXT); /* Oops */ if (!fh) { msg("Cannot create spoiler file."); return; } /* Dump to the spoiler file */ text_out_hook = text_out_to_file; text_out_file = fh; /* Dump the header */ spoiler_underline(format("Artifact Spoilers for %s", buildid), '='); text_out("\n Randart seed is %u\n", seed_randart); /* List the artifacts by tval */ for (i = 0; group_artifact[i].tval; i++) { /* Write out the group title */ if (group_artifact[i].name) { spoiler_blanklines(2); spoiler_underline(group_artifact[i].name, '='); spoiler_blanklines(1); } /* Now search through all of the artifacts */ for (j = 1; j < z_info->a_max; ++j) { struct artifact *art = &a_info[j]; char buf2[80]; char *temp; struct object *obj, *known_obj; /* We only want objects in the current group */ if (art->tval != group_artifact[i].tval) continue; /* Get local object */ obj = object_new(); known_obj = object_new(); /* Attempt to "forge" the artifact */ if (!make_fake_artifact(obj, art)) { object_delete(&known_obj); object_delete(&obj); continue; } /* Grab artifact name */ object_copy(known_obj, obj); obj->known = known_obj; object_desc(buf2, sizeof(buf2), obj, ODESC_PREFIX | ODESC_COMBAT | ODESC_EXTRA | ODESC_SPOIL); /* Print name and underline */ spoiler_underline(buf2, '-'); /* Temporarily blank the artifact flavour text - spoilers spoil the mechanics, not the atmosphere. */ temp = obj->artifact->text; obj->artifact->text = NULL; /* Write out the artifact description to the spoiler file */ object_info_spoil(fh, obj, 80); /* Put back the flavour */ obj->artifact->text = temp; /* * Determine the minimum and maximum depths an * artifact can appear, its rarity, its weight, and * its power rating. */ text_out("\nMin Level %u, Max Level %u, Generation chance %u, Power %d, %d.%d lbs\n", art->alloc_min, art->alloc_max, art->alloc_prob, object_power(obj, false, NULL), (art->weight / 10), (art->weight % 10)); if (OPT(birth_randarts)) text_out("%s.\n", art->text); /* Terminate the entry */ spoiler_blanklines(2); object_delete(&known_obj); object_delete(&obj); } } /* Check for errors */ if (!file_close(fh)) { msg("Cannot close spoiler file."); return; } /* Message */ msg("Successfully created a spoiler file."); }
/* * Create a spoiler file for artifacts */ static void spoil_artifact(cptr fname) { int i, j; object_type *i_ptr; object_type object_type_body; char buf[1024]; /* We use either ascii or system-specific encoding */ int encoding = (xchars_to_file) ? SYSTEM_SPECIFIC : ASCII; /* Build the filename */ (void)path_build(buf, sizeof(buf), ANGBAND_DIR_INFO, fname); /* File type is "TEXT" */ FILE_TYPE(FILE_TYPE_TEXT); /* Open the file */ fff = my_fopen(buf, "w"); /* Oops */ if (!fff) { msg_print("Cannot create spoiler file."); return; } /* Dump to the spoiler file */ text_out_hook = text_out_to_file; text_out_file = fff; /* Dump the header */ print_header("Artifact"); /* List the artifacts by tval */ for (i = 0; group_artifact[i].tval; i++) { /* Write out the group title */ if (group_artifact[i].name) { spoiler_blanklines(2); spoiler_underline(group_artifact[i].name); spoiler_blanklines(1); } /* Now search through all of the artifacts */ for (j = 0; j < z_info->a_max; ++j) { artifact_type *a_ptr = &a_info[j]; /* We only want objects in the current group */ if (a_ptr->tval != group_artifact[i].tval) continue; /* Get local object */ i_ptr = &object_type_body; /* Attempt to create the artifact */ if (!make_fake_artifact(i_ptr, j)) continue; /* Get this artifact */ a_ptr = &a_info[i_ptr->artifact_index]; /* Write a description of the artifact */ object_desc_store(buf, sizeof(buf), i_ptr, TRUE, 1); x_fprintf(fff, encoding, buf); fprintf(fff, "\n"); /* Write pval, flag, and activation information */ dump_obj_attrib(fff, i_ptr, 2); /* Write level, rarity, and weight */ if (use_metric) fprintf(fff, " Level %u, Rarity %u, %d.%d kgs, " "%ld Gold", a_ptr->level, a_ptr->rarity, make_metric(a_ptr->weight) / 10, make_metric(a_ptr->weight) % 10, a_ptr->cost); else fprintf(fff, " Level %u, Rarity %u, %d.%d lbs, " "%ld Gold", a_ptr->level, a_ptr->rarity, a_ptr->weight / 10, a_ptr->weight % 10, (long)a_ptr->cost); /* Insert a spacer line */ fprintf(fff, "\n\n"); } } /* Check for errors */ if (ferror(fff) || my_fclose(fff)) { msg_print("Cannot close spoiler file."); return; } /* Message */ msg_print("Successfully created a spoiler file."); }