X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fwizard1.c;h=f0ca3bdf785ee3bd203c6c066d97fda0b0dcac71;hb=68a85285a9ce8d1abc1307bbcb517abbad5228b9;hp=8787671b63fb7f05bf2cb5d9493dddcbf2eb83d8;hpb=b1f5f97798aadbca275e5bc1a541494c4f0a0834;p=hengband%2Fhengband.git diff --git a/src/wizard1.c b/src/wizard1.c index 8787671b6..f0ca3bdf7 100644 --- a/src/wizard1.c +++ b/src/wizard1.c @@ -1,6 +1,14 @@ -/* File: wizard1.c */ - -/* Purpose: Spoiler generation -BEN- */ +/*! + * @file wizard1.c + * @brief ã¦ã£ã¶ã¼ãã¢ã¼ãã®å¦ç(ã¹ãã¤ã©ã¼åºåä¸å¿) / Spoiler generation -BEN- + * @date 2014/02/17 + * @author + * Copyright (c) 1997 Ben Harrison, and others + * This software may be copied and distributed for educational, research, + * and not for profit purposes provided that this copyright and statement + * are included in all such copies. Other copyrights may also apply. + * 2013 Deskull rearranged comment for Doxygen. + */ #include "angband.h" @@ -15,58 +23,68 @@ static FILE *fff = NULL; -/* +/*! + * @brief ã·ã³ãã«è·ã®è¨è¿°åãè¿ã / * Extract a textual representation of an attribute + * @param r_ptr ã¢ã³ã¹ã¿ã¼ç¨®æã®æ§é ä½ãã¤ã³ã¿ + * @return ã·ã³ãã«è·ã®è¨è¿°å */ -static cptr attr_to_text(byte a) +static cptr attr_to_text(monster_race *r_ptr) { - switch (a) - { #ifdef JP000 -case TERM_DARK: return ("XXX¤¤"); -case TERM_WHITE: return ("Çò¤¤"); -case TERM_SLATE: return ("Àij¥¿§¤Î"); -case TERM_ORANGE: return ("¥ª¥ì¥ó¥¸¤Î"); -case TERM_RED: return ("ÀÖ¤¤"); -case TERM_GREEN: return ("ÎФÎ"); -case TERM_BLUE: return ("ÀĤ¤"); -case TERM_UMBER: return ("àèàῧ¤Î"); -case TERM_L_DARK: return ("³¥¿§¤Î"); -case TERM_L_WHITE: return ("ÌÀÀij¥¿§¤Î"); -case TERM_VIOLET: return ("»ç¤Î"); -case TERM_YELLOW: return ("²«¿§¤¤"); -case TERM_L_RED: return ("ÌÀ¤¤ÀÖ¤Î"); -case TERM_L_GREEN: return ("ÌÀ¤¤ÎФÎ"); -case TERM_L_BLUE: return ("ÌÀ¤¤ÀĤÎ"); -case TERM_L_UMBER: return ("ÌÀ¤¤àèàῧ¤Î"); + if (r_ptr->flags1 & RF1_ATTR_CLEAR) return "éæãª"; + if (r_ptr->flags1 & RF1_ATTR_MULTI) return "ä¸è²ã®"; + if (r_ptr->flags1 & RF1_ATTR_SEMIRAND) return "æºã©ã³ãã ãª"; #else - case TERM_DARK: return ("xxx"); - case TERM_WHITE: return ("White"); - case TERM_SLATE: return ("Slate"); - case TERM_ORANGE: return ("Orange"); - case TERM_RED: return ("Red"); - case TERM_GREEN: return ("Green"); - case TERM_BLUE: return ("Blue"); - case TERM_UMBER: return ("Umber"); - case TERM_L_DARK: return ("L.Dark"); - case TERM_L_WHITE: return ("L.Slate"); - case TERM_VIOLET: return ("Violet"); - case TERM_YELLOW: return ("Yellow"); - case TERM_L_RED: return ("L.Red"); - case TERM_L_GREEN: return ("L.Green"); - case TERM_L_BLUE: return ("L.Blue"); - case TERM_L_UMBER: return ("L.Umber"); + if (r_ptr->flags1 & RF1_ATTR_CLEAR) return "Clear"; + if (r_ptr->flags1 & RF1_ATTR_MULTI) return "Multi"; + if (r_ptr->flags1 & RF1_ATTR_SEMIRAND) return "S.Rand"; #endif + switch (r_ptr->d_attr) + { +#ifdef JP000 + case TERM_DARK: return "XXXã"; + case TERM_WHITE: return "ç½ã"; + case TERM_SLATE: return "éç°è²ã®"; + case TERM_ORANGE: return "ãªã¬ã³ã¸ã®"; + case TERM_RED: return "赤ã"; + case TERM_GREEN: return "ç·ã®"; + case TERM_BLUE: return "éã"; + case TERM_UMBER: return "ç¥çè²ã®"; + case TERM_L_DARK: return "ç°è²ã®"; + case TERM_L_WHITE: return "æéç°è²ã®"; + case TERM_VIOLET: return "ç´«ã®"; + case TERM_YELLOW: return "é»è²ã"; + case TERM_L_RED: return "æã赤ã®"; + case TERM_L_GREEN: return "æãç·ã®"; + case TERM_L_BLUE: return "æãéã®"; + case TERM_L_UMBER: return "æãç¥çè²ã®"; +#else + case TERM_DARK: return "xxx"; + case TERM_WHITE: return "White"; + case TERM_SLATE: return "Slate"; + case TERM_ORANGE: return "Orange"; + case TERM_RED: return "Red"; + case TERM_GREEN: return "Green"; + case TERM_BLUE: return "Blue"; + case TERM_UMBER: return "Umber"; + case TERM_L_DARK: return "L.Dark"; + case TERM_L_WHITE: return "L.Slate"; + case TERM_VIOLET: return "Violet"; + case TERM_YELLOW: return "Yellow"; + case TERM_L_RED: return "L.Red"; + case TERM_L_GREEN: return "L.Green"; + case TERM_L_BLUE: return "L.Blue"; + case TERM_L_UMBER: return "L.Umber"; +#endif } - /* Oops */ #ifdef JP000 -return ("ÊѤÊ"); + return "å¤ãª"; #else - return ("Icky"); + return "Icky"; #endif - } @@ -76,7 +94,7 @@ return (" */ typedef struct { - byte tval; + OBJECT_TYPE_VALUE tval; cptr name; } grouper; @@ -92,96 +110,68 @@ typedef struct */ static grouper group_item[] = { -#ifdef JP -{ TV_SHOT, "¼Í·âʪ" }, -#else - { TV_SHOT, "Ammo" }, -#endif - + { TV_SHOT, _("å°æç©", "Ammo") }, { TV_ARROW, NULL }, { TV_BOLT, NULL }, - -#ifdef JP -{ TV_BOW, "µÝ" }, -#else - { TV_BOW, "Bows" }, -#endif - - -#ifdef JP -{ TV_SWORD, "Éð´ï" }, -#else - { TV_SWORD, "Weapons" }, -#endif - + { TV_BOW, _("å¼", "Bows") }, + { TV_DIGGING, _("æ¦å¨", "Weapons") }, { TV_POLEARM, NULL }, { TV_HAFTED, NULL }, - { TV_DIGGING, NULL }, - -#ifdef JP -{ TV_SOFT_ARMOR, "Ëɶñ¡ÊÂΡË" }, -#else - { TV_SOFT_ARMOR, "Armour (Body)" }, -#endif - + { TV_SWORD, NULL }, + { TV_SOFT_ARMOR, _("é²å · (ä½)", "Armour (Body)") }, { TV_HARD_ARMOR, NULL }, { TV_DRAG_ARMOR, NULL }, - -#ifdef JP -{ TV_CLOAK, "Ëɶñ¡Ê¤½¤Î¾¡Ë" }, -#else - { TV_CLOAK, "Armour (Misc)" }, -#endif - - { TV_SHIELD, NULL }, + { TV_BOOTS, _("é²å · (ãã®ä»)", "Armour (Misc)") }, + { TV_GLOVES, NULL }, { TV_HELM, NULL }, { TV_CROWN, NULL }, - { TV_GLOVES, NULL }, - { TV_BOOTS, NULL }, + { TV_SHIELD, NULL }, + { TV_CLOAK, NULL }, #ifdef JP -{ TV_AMULET, "¥¢¥ß¥å¥ì¥Ã¥È" }, -{ TV_RING, "»ØÎØ" }, + { TV_LITE, "å æº" }, + { TV_AMULET, "ã¢ãã¥ã¬ãã" }, + { TV_RING, "æ輪" }, #else + { TV_LITE, "Light Sources" }, { TV_AMULET, "Amulets" }, { TV_RING, "Rings" }, #endif - #ifdef JP -{ TV_SCROLL, "´¬Êª" }, -{ TV_POTION, "Ìô" }, -{ TV_FOOD, "¿©ÎÁ" }, + { TV_STAFF, "æ" }, + { TV_WAND, "éæ³æ£" }, + { TV_ROD, "ããã" }, #else - { TV_SCROLL, "Scrolls" }, - { TV_POTION, "Potions" }, - { TV_FOOD, "Food" }, + { TV_STAFF, "Staffs" }, + { TV_WAND, "Wands" }, + { TV_ROD, "Rods" }, #endif - #ifdef JP -{ TV_ROD, "¥í¥Ã¥É" }, -{ TV_WAND, "ËâË¡ËÀ" }, -{ TV_STAFF, "¾ó" }, + { TV_SCROLL, "å·»ç©" }, + { TV_POTION, "è¬" }, + { TV_FOOD, "é£æ" }, #else - { TV_ROD, "Rods" }, - { TV_WAND, "Wands" }, - { TV_STAFF, "Staffs" }, + { TV_SCROLL, "Scrolls" }, + { TV_POTION, "Potions" }, + { TV_FOOD, "Food" }, #endif - #ifdef JP -{ TV_LIFE_BOOK, "ËâË¡½ñ¡ÊÀ¸Ì¿¡Ë" }, -{ TV_SORCERY_BOOK, "ËâË¡½ñ¡ÊÀç½Ñ¡Ë" }, -{ TV_NATURE_BOOK, "ËâË¡½ñ¡Ê¼«Á³¡Ë" }, -{ TV_CHAOS_BOOK, "ËâË¡½ñ¡Ê¥«¥ª¥¹¡Ë" }, -{ TV_DEATH_BOOK, "ËâË¡½ñ¡Ê°Å¹õ¡Ë" }, -{ TV_TRUMP_BOOK, "ËâË¡½ñ¡Ê¥È¥é¥ó¥×¡Ë" }, -{ TV_ARCANE_BOOK, "ËâË¡½ñ¡ÊÈë½Ñ¡Ë" }, -{ TV_ENCHANT_BOOK, "ËâË¡½ñ¡Ê¾¢¡Ë" }, -{ TV_DAEMON_BOOK, "ËâË¡½ñ¡Ê°Ëâ¡Ë" }, -{ TV_MUSIC_BOOK, "²Î½¸" }, -{ TV_HISSATSU_BOOK, "Éð·Ý¤Î½ñ" }, + { TV_LIFE_BOOK, "éæ³æ¸ (çå½)" }, + { TV_SORCERY_BOOK, "éæ³æ¸ (ä»è¡)" }, + { TV_NATURE_BOOK, "éæ³æ¸ (èªç¶)" }, + { TV_CHAOS_BOOK, "éæ³æ¸ (ã«ãªã¹)" }, + { TV_DEATH_BOOK, "éæ³æ¸ (æé»)" }, + { TV_TRUMP_BOOK, "éæ³æ¸ (ãã©ã³ã)" }, + { TV_ARCANE_BOOK, "éæ³æ¸ (ç§è¡)" }, + { TV_CRAFT_BOOK, "éæ³æ¸ (å )" }, + { TV_DAEMON_BOOK, "éæ³æ¸ (æªé)" }, + { TV_CRUSADE_BOOK, "éæ³æ¸ (ç ´éª)" }, + { TV_MUSIC_BOOK, "æé" }, + { TV_HISSATSU_BOOK, "æ¦è¸ã®æ¸" }, + { TV_HEX_BOOK, "éæ³æ¸ (åªè¡)" }, #else { TV_LIFE_BOOK, "Books (Life)" }, { TV_SORCERY_BOOK, "Books (Sorcery)" }, @@ -190,70 +180,64 @@ static grouper group_item[] = { TV_DEATH_BOOK, "Books (Death)" }, { TV_TRUMP_BOOK, "Books (Trump)" }, { TV_ARCANE_BOOK, "Books (Arcane)" }, - { TV_ENCHANT_BOOK, "Books (Craft)" }, + { TV_CRAFT_BOOK, "Books (Craft)" }, { TV_DAEMON_BOOK, "Books (Daemon)" }, + { TV_CRUSADE_BOOK, "Books (Crusade)" }, { TV_MUSIC_BOOK, "Song Books" }, { TV_HISSATSU_BOOK, "Books (Kendo)" }, + { TV_HEX_BOOK, "Books (Hex)" }, #endif #ifdef JP -{ TV_PARCHEMENT, "ÍÓÈé»æ" }, + { TV_WHISTLE, "ç¬" }, + { TV_CAPTURE, "ãã£ããã£ã¼ã»ãã¼ã«" }, + { TV_CARD, "ã¨ã¯ã¹ãã¬ã¹ã«ã¼ã" }, #else -{ TV_PARCHEMENT, "Parchement" }, + { TV_WHISTLE, "Whistle" }, + { TV_CAPTURE, "Capture Ball" }, + { TV_CARD, "Express Card" }, #endif -#ifdef JP -{ TV_CHEST, "È¢" }, -#else - { TV_CHEST, "Chests" }, -#endif + { TV_CHEST, _("ç®±", "Chests") }, #ifdef JP -{ TV_CAPTURE, "¥¥ã¥×¥Á¥ã¡¼¡¦¥Ü¡¼¥ë" }, + { TV_FIGURINE, "人形" }, + { TV_STATUE, "å" }, + { TV_CORPSE, "æ»ä½" }, #else - { TV_CAPTURE, "Capture Ball" }, -#endif - -#ifdef JP -{ TV_CARD, "¥¨¥¯¥¹¥×¥ì¥¹¥«¡¼¥É" }, -#else - { TV_CARD, "Express Card" }, -#endif - { TV_FIGURINE, "Magical Figurines" }, { TV_STATUE, "Statues" }, { TV_CORPSE, "Corpses" }, - -#ifdef JP -{ TV_WHISTLE, "Å«" }, -#else - { TV_WHISTLE, "Whistle" }, #endif -#ifdef JP -{ TV_SPIKE, "¤¯¤µ¤Ó" }, -#else - { TV_SPIKE, "Spike" }, -#endif - - { TV_LITE, NULL }, - { TV_FLASK, NULL }, - { TV_JUNK, NULL }, + { TV_SKELETON, _("ãã®ä»", "Misc") }, { TV_BOTTLE, NULL }, - { TV_SKELETON, NULL }, + { TV_JUNK, NULL }, + { TV_SPIKE, NULL }, + { TV_FLASK, NULL }, + { TV_PARCHMENT, NULL }, { 0, "" } }; -/* +/*! + * @brief ãã¼ã¹ã¢ã¤ãã ã®åæ å ±ãæåååãã / * Describe the kind + * @param buf å称ãè¿ããããã¡åç §ãã¤ã³ã¿ + * @param dam ãã¡ã¼ã¸ãã¤ã¹è¨è¿°ãè¿ããããã¡åç §ãã¤ã³ã¿ + * @param wgt ééè¨è¿°ãè¿ããããã¡åç §ãã¤ã³ã¿ + * @param lev çæéè¨è¿°ãè¿ããããã¡åç §ãã¤ã³ã¿ + * @param chance çææ©ä¼ãè¿ããããã¡åç §ãã¤ã³ã¿ + * @param val 価å¤ãè¿ããããã¡åç §ãã¤ã³ã¿ + * @param k ãã¼ã¹ã¢ã¤ãã ID + * @return ãªã */ -static void kind_info(char *buf, char *dam, char *wgt, int *lev, s32b *val, int k) +static void kind_info(char *buf, char *dam, char *wgt, char *chance, DEPTH *lev, PRICE *val, OBJECT_IDX k) { object_type forge; object_type *q_ptr; - + int i; /* Get local object */ q_ptr = &forge; @@ -272,18 +256,18 @@ static void kind_info(char *buf, char *dam, char *wgt, int *lev, s32b *val, int /* Level */ - (*lev) = get_object_level(q_ptr); + (*lev) = k_info[q_ptr->k_idx].level; /* Value */ (*val) = object_value(q_ptr); /* Hack */ - if (!buf || !dam || !wgt) return; + if (!buf || !dam || !chance || !wgt) return; /* Description (too brief) */ - object_desc_store(buf, q_ptr, FALSE, 0); + object_desc(buf, q_ptr, (OD_NAME_ONLY | OD_STORE)); /* Misc info */ @@ -333,29 +317,46 @@ static void kind_info(char *buf, char *dam, char *wgt, int *lev, s32b *val, int } } + /* Chance */ + strcpy(chance, ""); + for(i = 0; i < 4; i++) + { + char chance_aux[20] = ""; + if(k_info[q_ptr->k_idx].chance[i] > 0) + { + sprintf(chance_aux, "%s%3dF:%+4d", (i != 0 ? "/" : ""), + (int)k_info[q_ptr->k_idx].locale[i], 100/k_info[q_ptr->k_idx].chance[i]); + strcat(chance, chance_aux); + } + } + /* Weight */ - sprintf(wgt, "%3d.%d", q_ptr->weight / 10, q_ptr->weight % 10); + sprintf(wgt, "%3d.%d", (int)(q_ptr->weight / 10), (int)(q_ptr->weight % 10)); } -/* +/*! + * @brief åãã¼ã¹ã¢ã¤ãã ã®æ å ±ãä¸è¡æ¯ã«è¨è¿°ãã / * Create a spoiler file for items + * @param fname ãã¡ã¤ã«å + * @return ãªã */ static void spoil_obj_desc(cptr fname) { - int i, k, s, t, n = 0; + int i, k, s, t, n = 0, group_start = 0; - u16b who[200]; + OBJECT_IDX who[200]; char buf[1024]; char wgt[80]; + char chance[80]; char dam[80]; /* Build the filename */ - path_build(buf, 1024, ANGBAND_DIR_USER, fname); + path_build(buf, sizeof(buf), ANGBAND_DIR_USER, fname); /* File type is "TEXT" */ FILE_TYPE(FILE_TYPE_TEXT); @@ -363,7 +364,6 @@ static void spoil_obj_desc(cptr fname) /* Open the file */ fff = my_fopen(buf, "w"); - /* Oops */ if (!fff) { msg_print("Cannot create spoiler file."); @@ -372,15 +372,14 @@ static void spoil_obj_desc(cptr fname) /* Header */ - fprintf(fff, "Spoiler File -- Basic Items (Hengband %d.%d.%d)\n\n\n", - FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH); + fprintf(fff, "Spoiler File -- Basic Items (Hengband %d.%d.%d.%d)\n\n\n", + FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH, FAKE_VER_EXTRA); /* More Header */ - fprintf(fff, "%-45s %8s%7s%5s%9s\n", - "Description", "Dam/AC", "Wgt", "Lev", "Cost"); - fprintf(fff, "%-45s %8s%7s%5s%9s\n", - "----------------------------------------", - "------", "---", "---", "----"); + fprintf(fff, "%-37s%8s%7s%5s %40s%9s\n", + "Description", "Dam/AC", "Wgt", "Lev", "Chance", "Cost"); + fprintf(fff, "%-37s%8s%7s%5s %40s%9s\n", + "-------------------------------------", "------", "---", "---", "----------------", "----"); /* List the groups */ for (i = 0; TRUE; i++) @@ -388,54 +387,59 @@ static void spoil_obj_desc(cptr fname) /* Write out the group title */ if (group_item[i].name) { - /* Hack -- bubble-sort by cost and then level */ - for (s = 0; s < n - 1; s++) + if (n) { - for (t = 0; t < n - 1; t++) + /* Hack -- bubble-sort by cost and then level */ + for (s = 0; s < n - 1; s++) { - int i1 = t; - int i2 = t + 1; + for (t = 0; t < n - 1; t++) + { + int i1 = t; + int i2 = t + 1; - int e1; - int e2; + DEPTH e1; + DEPTH e2; - s32b t1; - s32b t2; + PRICE t1; + PRICE t2; - kind_info(NULL, NULL, NULL, &e1, &t1, who[i1]); - kind_info(NULL, NULL, NULL, &e2, &t2, who[i2]); + kind_info(NULL, NULL, NULL, NULL, &e1, &t1, who[i1]); + kind_info(NULL, NULL, NULL, NULL, &e2, &t2, who[i2]); - if ((t1 > t2) || ((t1 == t2) && (e1 > e2))) - { - int tmp = who[i1]; - who[i1] = who[i2]; - who[i2] = tmp; + if ((t1 > t2) || ((t1 == t2) && (e1 > e2))) + { + u16b tmp = who[i1]; + who[i1] = who[i2]; + who[i2] = tmp; + } } } - } - /* Spoil each item */ - for (s = 0; s < n; s++) - { - int e; - s32b v; + fprintf(fff, "\n\n%s\n\n", group_item[group_start].name); - /* Describe the kind */ - kind_info(buf, dam, wgt, &e, &v, who[s]); + /* Spoil each item */ + for (s = 0; s < n; s++) + { + DEPTH e; + PRICE v; - /* Dump it */ - fprintf(fff, " %-45s%8s%7s%5d%9ld\n", - buf, dam, wgt, e, (long)(v)); - } + /* Describe the kind */ + kind_info(buf, dam, wgt, chance, &e, &v, who[s]); - /* Start a new set */ - n = 0; + /* Dump it */ + fprintf(fff, " %-35s%8s%7s%5d %-40s%9ld\n", + buf, dam, wgt, (int)e, chance, (long)(v)); + } + + /* Start a new set */ + n = 0; + } /* Notice the end */ if (!group_item[i].tval) break; /* Start a new set */ - fprintf(fff, "\n\n%s\n\n", group_item[i].name); + group_start = i; } /* Acquire legal item types */ @@ -450,7 +454,7 @@ static void spoil_obj_desc(cptr fname) if (k_ptr->gen_flags & (TRG_INSTA_ART)) continue; /* Save the index */ - who[n++] = k; + who[n++] = (u16b)k; } } @@ -462,7 +466,6 @@ static void spoil_obj_desc(cptr fname) return; } - /* Message */ msg_print("Successfully created a spoiler file."); } @@ -502,28 +505,29 @@ static void spoil_obj_desc(cptr fname) static grouper group_artifact[] = { #ifdef JP - { TV_SWORD, "Åá·õ" }, - { TV_POLEARM, "Áä/Éà" }, - { TV_HAFTED, "Æß´ï" }, - { TV_DIGGING, "¥·¥ã¥Ù¥ë/¤Ä¤ë¤Ï¤·" }, - { TV_BOW, "Èô¤ÓÆ»¶ñ" }, - { TV_ARROW, "Ìð" }, - - { TV_SOFT_ARMOR, "³»" }, + { TV_SWORD, "åå£" }, + { TV_POLEARM, "æ§/æ§" }, + { TV_HAFTED, "éå¨" }, + { TV_DIGGING, "ã·ã£ãã«/ã¤ãã¯ã" }, + { TV_BOW, "é£ã³éå ·" }, + { TV_ARROW, "ç¢" }, + { TV_BOLT, NULL }, + + { TV_SOFT_ARMOR, "é§" }, { TV_HARD_ARMOR, NULL }, { TV_DRAG_ARMOR, NULL }, - { TV_CLOAK, "¥¯¥í¡¼¥¯" }, - { TV_SHIELD, "½â" }, + { TV_CLOAK, "ã¯ãã¼ã¯" }, + { TV_SHIELD, "ç¾" }, { TV_CARD, NULL }, - { TV_HELM, "³õ/´§" }, + { TV_HELM, "å /å " }, { TV_CROWN, NULL }, - { TV_GLOVES, "äƼê" }, - { TV_BOOTS, "·¤" }, + { TV_GLOVES, "ç± æ" }, + { TV_BOOTS, "é´" }, - { TV_LITE, "¸÷¸»" }, - { TV_AMULET, "¥¢¥ß¥å¥ì¥Ã¥È" }, - { TV_RING, "»ØÎØ" }, + { TV_LITE, "å æº" }, + { TV_AMULET, "ã¢ãã¥ã¬ãã" }, + { TV_RING, "æ輪" }, #else { TV_SWORD, "Edged Weapons" }, { TV_POLEARM, "Polearms" }, @@ -531,6 +535,7 @@ static grouper group_artifact[] = { TV_DIGGING, "Shovels/Picks" }, { TV_BOW, "Bows" }, { TV_ARROW, "Ammo" }, + { TV_BOLT, NULL }, { TV_SOFT_ARMOR, "Body Armor" }, { TV_HARD_ARMOR, NULL }, @@ -568,7 +573,7 @@ typedef struct flag_desc flag_desc; struct flag_desc { - const u32b flag; + const int flag; const char *const desc; }; @@ -584,19 +589,19 @@ struct flag_desc static flag_desc stat_flags_desc[] = { #ifdef JP - { TR1_STR, "ÏÓÎÏ" }, - { TR1_INT, "ÃÎǽ" }, - { TR1_WIS, "¸¤µ" }, - { TR1_DEX, "´ïÍѤµ" }, - { TR1_CON, "Âѵ×ÎÏ" }, - { TR1_CHR, "Ì¥ÎÏ" } + { TR_STR, "è å" }, + { TR_INT, "ç¥è½" }, + { TR_WIS, "è³¢ã" }, + { TR_DEX, "å¨ç¨ã" }, + { TR_CON, "èä¹ å" }, + { TR_CHR, "é å" } #else - { TR1_STR, "STR" }, - { TR1_INT, "INT" }, - { TR1_WIS, "WIS" }, - { TR1_DEX, "DEX" }, - { TR1_CON, "CON" }, - { TR1_CHR, "CHR" } + { TR_STR, "STR" }, + { TR_INT, "INT" }, + { TR_WIS, "WIS" }, + { TR_DEX, "DEX" }, + { TR_CON, "CON" }, + { TR_CHR, "CHR" } #endif }; @@ -608,20 +613,20 @@ static flag_desc stat_flags_desc[] = static flag_desc pval_flags1_desc[] = { #ifdef JP - { TR1_MAGIC_MASTERY, "ËâË¡Æ»¶ñ»ÈÍÑǽÎÏ" }, - { TR1_STEALTH, "±£Ì©" }, - { TR1_SEARCH, "õº÷" }, - { TR1_INFRA, "ÀÖ³°Àþ»ëÎÏ" }, - { TR1_TUNNEL, "ºÎ·¡" }, - { TR1_BLOWS, "¹¶·â²ó¿ô" }, - { TR1_SPEED, "¥¹¥Ô¡¼¥É" } + { TR_MAGIC_MASTERY, "éæ³éå ·ä½¿ç¨è½å" }, + { TR_STEALTH, "é å¯" }, + { TR_SEARCH, "æ¢ç´¢" }, + { TR_INFRA, "赤å¤ç·è¦å" }, + { TR_TUNNEL, "æ¡æ" }, + { TR_BLOWS, "æ»æåæ°" }, + { TR_SPEED, "ã¹ãã¼ã" } #else - { TR1_STEALTH, "Stealth" }, - { TR1_SEARCH, "Searching" }, - { TR1_INFRA, "Infravision" }, - { TR1_TUNNEL, "Tunneling" }, - { TR1_BLOWS, "Attacks" }, - { TR1_SPEED, "Speed" } + { TR_STEALTH, "Stealth" }, + { TR_SEARCH, "Searching" }, + { TR_INFRA, "Infravision" }, + { TR_TUNNEL, "Tunneling" }, + { TR_BLOWS, "Attacks" }, + { TR_SPEED, "Speed" } #endif }; @@ -632,27 +637,43 @@ static flag_desc pval_flags1_desc[] = static flag_desc slay_flags_desc[] = { #ifdef JP - { TR1_SLAY_ANIMAL, "ưʪ" }, - { TR1_SLAY_EVIL, "¼Ù°" }, - { TR3_SLAY_HUMAN, "¿Í´Ö" }, - { TR1_SLAY_UNDEAD, "¥¢¥ó¥Ç¥Ã¥É" }, - { TR1_SLAY_DEMON, "°Ëâ" }, - { TR1_SLAY_ORC, "¥ª¡¼¥¯" }, - { TR1_SLAY_TROLL, "¥È¥í¥ë" }, - { TR1_SLAY_GIANT, "µð¿Í" }, - { TR1_SLAY_DRAGON, "¥É¥é¥´¥ó" }, - { TR1_KILL_DRAGON, "*¥É¥é¥´¥ó*" }, + { TR_SLAY_ANIMAL, "åç©" }, + { TR_KILL_ANIMAL, "*åç©*" }, + { TR_SLAY_EVIL, "éªæª" }, + { TR_KILL_EVIL, "*éªæª*" }, + { TR_SLAY_HUMAN, "人é" }, + { TR_KILL_HUMAN, "*人é*" }, + { TR_SLAY_UNDEAD, "ã¢ã³ããã" }, + { TR_KILL_UNDEAD, "*ã¢ã³ããã*" }, + { TR_SLAY_DEMON, "æªé" }, + { TR_KILL_DEMON, "*æªé*" }, + { TR_SLAY_ORC, "ãªã¼ã¯" }, + { TR_KILL_ORC, "*ãªã¼ã¯*" }, + { TR_SLAY_TROLL, "ããã«" }, + { TR_KILL_TROLL, "*ããã«*" }, + { TR_SLAY_GIANT, "巨人" }, + { TR_KILL_GIANT, "*巨人*" }, + { TR_SLAY_DRAGON, "ãã©ã´ã³" }, + { TR_KILL_DRAGON, "*ãã©ã´ã³*" }, #else - { TR1_SLAY_ANIMAL, "Animal" }, - { TR1_SLAY_EVIL, "Evil" }, - { TR3_SLAY_HUMAN, "Human" }, - { TR1_SLAY_UNDEAD, "Undead" }, - { TR1_SLAY_DEMON, "Demon" }, - { TR1_SLAY_ORC, "Orc" }, - { TR1_SLAY_TROLL, "Troll" }, - { TR1_SLAY_GIANT, "Giant" }, - { TR1_SLAY_DRAGON, "Dragon" }, - { TR1_KILL_DRAGON, "Xdragon" } + { TR_SLAY_ANIMAL, "Animal" }, + { TR_KILL_ANIMAL, "XAnimal" }, + { TR_SLAY_EVIL, "Evil" }, + { TR_KILL_EVIL, "XEvil" }, + { TR_SLAY_HUMAN, "Human" }, + { TR_KILL_HUMAN, "XHuman" }, + { TR_SLAY_UNDEAD, "Undead" }, + { TR_KILL_UNDEAD, "XUndead" }, + { TR_SLAY_DEMON, "Demon" }, + { TR_KILL_DEMON, "XDemon" }, + { TR_SLAY_ORC, "Orc" }, + { TR_KILL_ORC, "XOrc" }, + { TR_SLAY_TROLL, "Troll" }, + { TR_KILL_TROLL, "XTroll" }, + { TR_SLAY_GIANT, "Giant" }, + { TR_KILL_GIANT, "Xgiant" }, + { TR_SLAY_DRAGON, "Dragon" }, + { TR_KILL_DRAGON, "Xdragon" } #endif }; @@ -667,29 +688,29 @@ static flag_desc slay_flags_desc[] = static flag_desc brand_flags_desc[] = { #ifdef JP - { TR1_BRAND_ACID, "Íϲò" }, - { TR1_BRAND_ELEC, "ÅÅ·â" }, - { TR1_BRAND_FIRE, "¾Æ´þ" }, - { TR1_BRAND_COLD, "Åà·ë" }, - { TR1_BRAND_POIS, "ÆÇ»¦" }, - - { TR1_FORCE_WEAPON, "ÍýÎÏ" }, - { TR1_CHAOTIC, "º®ÆÙ" }, - { TR1_VAMPIRIC, "µÛ·ì" }, - { TR1_IMPACT, "ÃÏ¿Ì" }, - { TR1_VORPAL, "ÀÚ¤ìÌ£" }, + { TR_BRAND_ACID, "溶解" }, + { TR_BRAND_ELEC, "é»æ" }, + { TR_BRAND_FIRE, "ç¼æ£" }, + { TR_BRAND_COLD, "åçµ" }, + { TR_BRAND_POIS, "æ¯æ®º" }, + + { TR_FORCE_WEAPON, "çå" }, + { TR_CHAOTIC, "æ··æ²" }, + { TR_VAMPIRIC, "å¸è¡" }, + { TR_IMPACT, "å°é" }, + { TR_VORPAL, "åãå³" }, #else - { TR1_BRAND_ACID, "Acid Brand" }, - { TR1_BRAND_ELEC, "Lightning Brand" }, - { TR1_BRAND_FIRE, "Flame Tongue" }, - { TR1_BRAND_COLD, "Frost Brand" }, - { TR1_BRAND_POIS, "Poisoned" }, - - { TR1_FORCE_WEAPON, "Force" }, - { TR1_CHAOTIC, "Mark of Chaos" }, - { TR1_VAMPIRIC, "Vampiric" }, - { TR1_IMPACT, "Earthquake impact on hit" }, - { TR1_VORPAL, "Very sharp" }, + { TR_BRAND_ACID, "Acid Brand" }, + { TR_BRAND_ELEC, "Lightning Brand" }, + { TR_BRAND_FIRE, "Flame Tongue" }, + { TR_BRAND_COLD, "Frost Brand" }, + { TR_BRAND_POIS, "Poisoned" }, + + { TR_FORCE_WEAPON, "Force" }, + { TR_CHAOTIC, "Mark of Chaos" }, + { TR_VAMPIRIC, "Vampiric" }, + { TR_IMPACT, "Earthquake impact on hit" }, + { TR_VORPAL, "Very sharp" }, #endif }; @@ -700,39 +721,39 @@ static flag_desc brand_flags_desc[] = static const flag_desc resist_flags_desc[] = { #ifdef JP - { TR2_RES_ACID, "»À" }, - { TR2_RES_ELEC, "ÅÅ·â" }, - { TR2_RES_FIRE, "²Ð±ê" }, - { TR2_RES_COLD, "Î䵤" }, - { TR2_RES_POIS, "ÆÇ" }, - { TR2_RES_FEAR, "¶²ÉÝ"}, - { TR2_RES_LITE, "Á®¸÷" }, - { TR2_RES_DARK, "°Å¹õ" }, - { TR2_RES_BLIND, "ÌÕÌÜ" }, - { TR2_RES_CONF, "º®Íð" }, - { TR2_RES_SOUND, "¹ì²»" }, - { TR2_RES_SHARDS, "ÇËÊÒ" }, - { TR2_RES_NETHER, "ÃϹö" }, - { TR2_RES_NEXUS, "°ø²Ìº®Íð" }, - { TR2_RES_CHAOS, "¥«¥ª¥¹" }, - { TR2_RES_DISEN, "Îô²½" }, + { TR_RES_ACID, "é ¸" }, + { TR_RES_ELEC, "é»æ" }, + { TR_RES_FIRE, "ç«ç" }, + { TR_RES_COLD, "å·æ°" }, + { TR_RES_POIS, "æ¯" }, + { TR_RES_FEAR, "ææ"}, + { TR_RES_LITE, "éå " }, + { TR_RES_DARK, "æé»" }, + { TR_RES_BLIND, "ç²ç®" }, + { TR_RES_CONF, "æ··ä¹±" }, + { TR_RES_SOUND, "è½é³" }, + { TR_RES_SHARDS, "ç ´ç" }, + { TR_RES_NETHER, "å°ç" }, + { TR_RES_NEXUS, "å ææ··ä¹±" }, + { TR_RES_CHAOS, "ã«ãªã¹" }, + { TR_RES_DISEN, "å£å" }, #else - { TR2_RES_ACID, "Acid" }, - { TR2_RES_ELEC, "Lightning" }, - { TR2_RES_FIRE, "Fire" }, - { TR2_RES_COLD, "Cold" }, - { TR2_RES_POIS, "Poison" }, - { TR2_RES_FEAR, "Fear"}, - { TR2_RES_LITE, "Light" }, - { TR2_RES_DARK, "Dark" }, - { TR2_RES_BLIND, "Blindness" }, - { TR2_RES_CONF, "Confusion" }, - { TR2_RES_SOUND, "Sound" }, - { TR2_RES_SHARDS, "Shards" }, - { TR2_RES_NETHER, "Nether" }, - { TR2_RES_NEXUS, "Nexus" }, - { TR2_RES_CHAOS, "Chaos" }, - { TR2_RES_DISEN, "Disenchantment" }, + { TR_RES_ACID, "Acid" }, + { TR_RES_ELEC, "Lightning" }, + { TR_RES_FIRE, "Fire" }, + { TR_RES_COLD, "Cold" }, + { TR_RES_POIS, "Poison" }, + { TR_RES_FEAR, "Fear"}, + { TR_RES_LITE, "Light" }, + { TR_RES_DARK, "Dark" }, + { TR_RES_BLIND, "Blindness" }, + { TR_RES_CONF, "Confusion" }, + { TR_RES_SOUND, "Sound" }, + { TR_RES_SHARDS, "Shards" }, + { TR_RES_NETHER, "Nether" }, + { TR_RES_NEXUS, "Nexus" }, + { TR_RES_CHAOS, "Chaos" }, + { TR_RES_DISEN, "Disenchantment" }, #endif }; @@ -743,15 +764,15 @@ static const flag_desc resist_flags_desc[] = static const flag_desc immune_flags_desc[] = { #ifdef JP - { TR2_IM_ACID, "»À" }, - { TR2_IM_ELEC, "ÅÅ·â" }, - { TR2_IM_FIRE, "²Ð±ê" }, - { TR2_IM_COLD, "Î䵤" }, + { TR_IM_ACID, "é ¸" }, + { TR_IM_ELEC, "é»æ" }, + { TR_IM_FIRE, "ç«ç" }, + { TR_IM_COLD, "å·æ°" }, #else - { TR2_IM_ACID, "Acid" }, - { TR2_IM_ELEC, "Lightning" }, - { TR2_IM_FIRE, "Fire" }, - { TR2_IM_COLD, "Cold" }, + { TR_IM_ACID, "Acid" }, + { TR_IM_ELEC, "Lightning" }, + { TR_IM_FIRE, "Fire" }, + { TR_IM_COLD, "Cold" }, #endif }; @@ -762,19 +783,19 @@ static const flag_desc immune_flags_desc[] = static const flag_desc sustain_flags_desc[] = { #ifdef JP - { TR2_SUST_STR, "ÏÓÎÏ" }, - { TR2_SUST_INT, "ÃÎǽ" }, - { TR2_SUST_WIS, "¸¤µ" }, - { TR2_SUST_DEX, "´ïÍѤµ" }, - { TR2_SUST_CON, "Âѵ×ÎÏ" }, - { TR2_SUST_CHR, "Ì¥ÎÏ" }, + { TR_SUST_STR, "è å" }, + { TR_SUST_INT, "ç¥è½" }, + { TR_SUST_WIS, "è³¢ã" }, + { TR_SUST_DEX, "å¨ç¨ã" }, + { TR_SUST_CON, "èä¹ å" }, + { TR_SUST_CHR, "é å" }, #else - { TR2_SUST_STR, "STR" }, - { TR2_SUST_INT, "INT" }, - { TR2_SUST_WIS, "WIS" }, - { TR2_SUST_DEX, "DEX" }, - { TR2_SUST_CON, "CON" }, - { TR2_SUST_CHR, "CHR" }, + { TR_SUST_STR, "STR" }, + { TR_SUST_INT, "INT" }, + { TR_SUST_WIS, "WIS" }, + { TR_SUST_DEX, "DEX" }, + { TR_SUST_CON, "CON" }, + { TR_SUST_CHR, "CHR" }, #endif }; @@ -785,15 +806,15 @@ static const flag_desc sustain_flags_desc[] = static const flag_desc misc_flags2_desc[] = { #ifdef JP - { TR2_THROW, "ÅêÚ³" }, - { TR2_REFLECT, "È¿¼Í" }, - { TR2_FREE_ACT, "ËãáãÃΤ餺" }, - { TR2_HOLD_LIFE, "À¸Ì¿ÎÏ°Ý»ý" }, + { TR_THROW, "ææ²" }, + { TR_REFLECT, "åå°" }, + { TR_FREE_ACT, "麻çºç¥ãã" }, + { TR_HOLD_EXP, "çµé¨å¤ç¶æ" }, #else - { TR2_THROW, "Throwing" }, - { TR2_REFLECT, "Reflection" }, - { TR2_FREE_ACT, "Free Action" }, - { TR2_HOLD_LIFE, "Hold Life" }, + { TR_THROW, "Throwing" }, + { TR_REFLECT, "Reflection" }, + { TR_FREE_ACT, "Free Action" }, + { TR_HOLD_EXP, "Hold Experience" }, #endif }; @@ -807,41 +828,65 @@ static const flag_desc misc_flags2_desc[] = static const flag_desc misc_flags3_desc[] = { #ifdef JP - { TR3_SH_FIRE, "²Ð±ê¥ª¡¼¥é" }, - { TR3_SH_ELEC, "Åŷ⥪¡¼¥é" }, - { TR3_SH_COLD, "Î䵤¥ª¡¼¥é" }, - { TR3_NO_TELE, "È¿¥Æ¥ì¥Ý¡¼¥È" }, - { TR3_NO_MAGIC, "È¿ËâË¡" }, - { TR3_FEATHER, "ÉâÍ·" }, - { TR3_SEE_INVIS, "²Ä»ëÆ©ÌÀ" }, - { TR3_TELEPATHY, "¥Æ¥ì¥Ñ¥·¡¼" }, - { TR3_SLOW_DIGEST, "Ãپò½" }, - { TR3_REGEN, "µÞ®²óÉü" }, - { TR3_WARNING, "·Ù¹ð" }, -/* { TR3_XTRA_MIGHT, "¶¯Îϼͷâ" }, */ - { TR3_XTRA_SHOTS, "Äɲüͷâ" }, /* always +1? */ - { TR3_DRAIN_EXP, "·Ð¸³Ã͵ۼý" }, - { TR3_AGGRAVATE, "È¿´¶" }, - { TR3_BLESSED, "½ËÊ¡" }, - { TR3_DEC_MANA, "¾ÃÈñËâÎϸº¾¯" }, + { TR_SH_FIRE, "ç«çãªã¼ã©" }, + { TR_SH_ELEC, "é»æãªã¼ã©" }, + { TR_SH_COLD, "å·æ°ãªã¼ã©" }, + { TR_NO_TELE, "åãã¬ãã¼ã" }, + { TR_NO_MAGIC, "åéæ³" }, + { TR_LEVITATION, "æµ®é" }, + { TR_SEE_INVIS, "å¯è¦éæ" }, + { TR_TELEPATHY, "ãã¬ãã·ã¼" }, + { TR_ESP_ANIMAL, "åç©æç¥" }, + { TR_ESP_UNDEAD, "ä¸æ»æç¥" }, + { TR_ESP_DEMON, "æªéæç¥" }, + { TR_ESP_ORC, "ãªã¼ã¯æç¥" }, + { TR_ESP_TROLL, "ããã«æç¥" }, + { TR_ESP_GIANT, "巨人æç¥" }, + { TR_ESP_DRAGON, "ãã©ã´ã³æç¥" }, + { TR_ESP_HUMAN, "人éæç¥" }, + { TR_ESP_EVIL, "éªæªæç¥" }, + { TR_ESP_GOOD, "åè¯æç¥" }, + { TR_ESP_NONLIVING, "ç¡çç©æç¥" }, + { TR_ESP_UNIQUE, "ã¦ãã¼ã¯æç¥" }, + { TR_SLOW_DIGEST, "é æ¶å" }, + { TR_REGEN, "æ¥éå復" }, + { TR_WARNING, "è¦å" }, +/* { TR_XTRA_MIGHT, "å¼·åå°æ" }, */ + { TR_XTRA_SHOTS, "追å å°æ" }, /* always +1? */ + { TR_DRAIN_EXP, "çµé¨å¤å¸å" }, + { TR_AGGRAVATE, "åæ" }, + { TR_BLESSED, "ç¥ç¦" }, + { TR_DEC_MANA, "æ¶è²»éåæ¸å°" }, #else - { TR3_SH_FIRE, "Fiery Aura" }, - { TR3_SH_ELEC, "Electric Aura" }, - { TR3_SH_COLD, "Coldly Aura" }, - { TR3_NO_TELE, "Prevent Teleportation" }, - { TR3_NO_MAGIC, "Anti-Magic" }, - { TR3_FEATHER, "Levitation" }, - { TR3_SEE_INVIS, "See Invisible" }, - { TR3_TELEPATHY, "ESP" }, - { TR3_SLOW_DIGEST, "Slow Digestion" }, - { TR3_REGEN, "Regeneration" }, - { TR3_WARNING, "Warning" }, -/* { TR3_XTRA_MIGHT, "Extra Might" }, */ - { TR3_XTRA_SHOTS, "+1 Extra Shot" }, /* always +1? */ - { TR3_DRAIN_EXP, "Drains Experience" }, - { TR3_AGGRAVATE, "Aggravates" }, - { TR3_BLESSED, "Blessed Blade" }, - { TR3_DEC_MANA, "Decrease Shouhi Mana" }, + { TR_SH_FIRE, "Fiery Aura" }, + { TR_SH_ELEC, "Electric Aura" }, + { TR_SH_COLD, "Coldly Aura" }, + { TR_NO_TELE, "Prevent Teleportation" }, + { TR_NO_MAGIC, "Anti-Magic" }, + { TR_LEVITATION, "Levitation" }, + { TR_SEE_INVIS, "See Invisible" }, + { TR_TELEPATHY, "ESP" }, + { TR_ESP_ANIMAL, "Sense Animal" }, + { TR_ESP_UNDEAD, "Sense Undead" }, + { TR_ESP_DEMON, "Sense Demon" }, + { TR_ESP_ORC, "Sense Orc" }, + { TR_ESP_TROLL, "Sense Troll" }, + { TR_ESP_GIANT, "Sense Giant" }, + { TR_ESP_DRAGON, "Sense Dragon" }, + { TR_ESP_HUMAN, "Sense Human" }, + { TR_ESP_EVIL, "Sense Evil" }, + { TR_ESP_GOOD, "Sense Good" }, + { TR_ESP_NONLIVING, "Sense Nonliving" }, + { TR_ESP_UNIQUE, "Sense Unique" }, + { TR_SLOW_DIGEST, "Slow Digestion" }, + { TR_REGEN, "Regeneration" }, + { TR_WARNING, "Warning" }, +/* { TR_XTRA_MIGHT, "Extra Might" }, */ + { TR_XTRA_SHOTS, "+1 Extra Shot" }, /* always +1? */ + { TR_DRAIN_EXP, "Drains Experience" }, + { TR_AGGRAVATE, "Aggravates" }, + { TR_BLESSED, "Blessed Blade" }, + { TR_DEC_MANA, "Decrease Mana Consumption Rate" }, #endif }; @@ -914,6 +959,9 @@ typedef struct + 1 /* type of curse */ + 1]; /* sentinel NULL */ + /* Additional ability or resistance */ + char addition[80]; + /* A string describing an artifact's activation */ cptr activation; @@ -922,8 +970,12 @@ typedef struct } obj_desc_list; -/* +/*! + * @brief ãã¡ã¤ã«ãã¤ã³ã¿å ã«åãæåãè¤æ°åºåãã / * Write out `n' of the character `c' to the spoiler file + * @param n åºåããæ° + * @param c åºåãããã£ã©ã¯ã¿ + * @return ãªã */ static void spoiler_out_n_chars(int n, char c) { @@ -931,8 +983,11 @@ static void spoiler_out_n_chars(int n, char c) } -/* +/*! + * @brief ãã¡ã¤ã«ãã¤ã³ã¿å ã«æ¹è¡ãè¤æ°åºåãã / * Write out `n' blank lines to the spoiler file + * @param n æ¹è¡ãåºåããæ° + * @return ãªã */ static void spoiler_blanklines(int n) { @@ -940,8 +995,11 @@ static void spoiler_blanklines(int n) } -/* +/*! + * @brief ãã¡ã¤ã«ãã¤ã³ã¿å ã«è¤æ°ã®ãã¤ãã³ã§è£ 飾ããæååãåºåãã / * Write a line to the spoiler file and then "underline" it with hypens + * @param str åºåãããæåå + * @return ãªã */ static void spoiler_underline(cptr str) { @@ -952,24 +1010,34 @@ static void spoiler_underline(cptr str) -/* +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãã®ç¹æ§ä¸è¦§ãåºåãã / + * Write a line to the spoiler file and then "underline" it with hypens + * @param art_flags ã¢ã¼ãã£ãã¡ã¯ãã®ãã©ã°ç¾¤ + * @param flag_ptr ãã©ã°è¨è¿°æ å ±ã®åç §ãã¤ã³ã¿ + * @param desc_ptr è¨è¿°å 容ãè¿ãããã®æåååç §ãã¤ã³ã¿ + * @param n_elmnts ãã©ã°ã®è¦ç´ æ° + * @return desc_ptrã¨åãã¢ãã¬ã¹ + * @details + *
* This function does most of the actual "analysis". Given a set of bit flags * (which will be from one of the flags fields from the object in question), * a "flag description structure", a "description list", and the number of * elements in the "flag description structure", this function sets the * "description list" members to the appropriate descriptions contained in * the "flag description structure". - * * The possibly updated description pointer is returned. + **/ -static cptr *spoiler_flag_aux(const u32b art_flags, const flag_desc *flag_ptr, +static cptr *spoiler_flag_aux(const BIT_FLAGS art_flags[TR_FLAG_SIZE], + const flag_desc *flag_ptr, cptr *desc_ptr, const int n_elmnts) { int i; for (i = 0; i < n_elmnts; ++i) { - if (art_flags & flag_ptr[i].flag) + if (have_flag(art_flags, flag_ptr[i].flag)) { *desc_ptr++ = flag_ptr[i].desc; } @@ -979,26 +1047,31 @@ static cptr *spoiler_flag_aux(const u32b art_flags, const flag_desc *flag_ptr, } -/* +/*! + * @brief ã¢ã¤ãã ã®ç¹å®è¨è¿°å 容ãè¿ã / * Acquire a "basic" description "The Cloak of Death [1,+10]" + * @param o_ptr è¨è¿°ãå¾ãããªãã¸ã§ã¯ãã®åç §ãã¤ã³ã¿ + * @param desc_ptr è¨è¿°å 容ãè¿ãããã®æåååç §ãã¤ã³ã¿ + * @return ãªã */ -static void analyze_general (object_type *o_ptr, char *desc_ptr) +static void analyze_general(object_type *o_ptr, char *desc_ptr) { /* Get a "useful" description of the object */ - object_desc_store(desc_ptr, o_ptr, TRUE, 1); + object_desc(desc_ptr, o_ptr, (OD_NAME_AND_ENCHANT | OD_STORE)); } -/* +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãããã¬ã¤ã¤ã¼ã«ä¸ããpvalä¿®æ£ãæ§é ä½ã«åãã / * List "player traits" altered by an artifact's pval. These include stats, * speed, infravision, tunneling, stealth, searching, and extra attacks. + * @param o_ptr ãªãã¸ã§ã¯ãæ§é ä½ã®åç §ãã¤ã³ã¿ + * @param p_ptr pvalä¿®æ£æ§é ä½ã®åç §ãã¤ã³ã¿ + * @return ãªã */ -static void analyze_pval (object_type *o_ptr, pval_info_type *p_ptr) +static void analyze_pval(object_type *o_ptr, pval_info_type *pi_ptr) { - const u32b all_stats = (TR1_STR | TR1_INT | TR1_WIS | - TR1_DEX | TR1_CON | TR1_CHR); - - u32b f1, f2, f3; + BIT_FLAGS flgs[TR_FLAG_SIZE]; cptr *affects_list; @@ -1006,38 +1079,38 @@ static void analyze_pval (object_type *o_ptr, pval_info_type *p_ptr) if (!o_ptr->pval) { /* An "empty" pval description indicates that pval == 0 */ - p_ptr->pval_desc[0] = '\0'; + pi_ptr->pval_desc[0] = '\0'; return; } /* Extract the flags */ - object_flags(o_ptr, &f1, &f2, &f3); + object_flags(o_ptr, flgs); - affects_list = p_ptr->pval_affects; + affects_list = pi_ptr->pval_affects; /* Create the "+N" string */ - sprintf(p_ptr->pval_desc, "%s%d", POSITIZE(o_ptr->pval), o_ptr->pval); + sprintf(pi_ptr->pval_desc, "%s%d", POSITIZE(o_ptr->pval), o_ptr->pval); /* First, check to see if the pval affects all stats */ - if ((f1 & all_stats) == all_stats) + if (have_flag(flgs, TR_STR) && have_flag(flgs, TR_INT) && + have_flag(flgs, TR_WIS) && have_flag(flgs, TR_DEX) && + have_flag(flgs, TR_CON) && have_flag(flgs, TR_CHR)) { -#ifdef JP - *affects_list++ = "Á´Ç½ÎÏ"; -#else - *affects_list++ = "All stats"; -#endif + *affects_list++ = _("å ¨è½å", "All stats"); } /* Are any stats affected? */ - else if (f1 & all_stats) + else if (have_flag(flgs, TR_STR) || have_flag(flgs, TR_INT) || + have_flag(flgs, TR_WIS) || have_flag(flgs, TR_DEX) || + have_flag(flgs, TR_CON) || have_flag(flgs, TR_CHR)) { - affects_list = spoiler_flag_aux(f1, stat_flags_desc, + affects_list = spoiler_flag_aux(flgs, stat_flags_desc, affects_list, N_ELEMENTS(stat_flags_desc)); } /* And now the "rest" */ - affects_list = spoiler_flag_aux(f1, pval_flags1_desc, + affects_list = spoiler_flag_aux(flgs, pval_flags1_desc, affects_list, N_ELEMENTS(pval_flags1_desc)); @@ -1045,29 +1118,41 @@ static void analyze_pval (object_type *o_ptr, pval_info_type *p_ptr) *affects_list = NULL; } - -/* Note the slaying specialties of a weapon */ -static void analyze_slay (object_type *o_ptr, cptr *slay_list) +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãã®ç¨®æã¹ã¬ã¤ç¹æ§ãæ§é ä½ã«åãã / + * Note the slaying specialties of a weapon + * @param o_ptr ãªãã¸ã§ã¯ãæ§é ä½ã®åç §ãã¤ã³ã¿ + * @param slay_list 種æã¹ã¬ã¤æ§é ä½ã®åç §ãã¤ã³ã¿ + * @return ãªã + */ +static void analyze_slay(object_type *o_ptr, cptr *slay_list) { - u32b f1, f2, f3; + BIT_FLAGS flgs[TR_FLAG_SIZE]; - object_flags(o_ptr, &f1, &f2, &f3); + object_flags(o_ptr, flgs); - slay_list = spoiler_flag_aux(f1, slay_flags_desc, slay_list, + slay_list = spoiler_flag_aux(flgs, slay_flags_desc, slay_list, N_ELEMENTS(slay_flags_desc)); /* Terminate the description list */ *slay_list = NULL; } -/* Note an object's elemental brands */ -static void analyze_brand (object_type *o_ptr, cptr *brand_list) + +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãã®å±æ§ãã©ã³ãç¹æ§ãæ§é ä½ã«åãã / + * Note an object's elemental brands + * @param o_ptr ãªãã¸ã§ã¯ãæ§é ä½ã®åç §ãã¤ã³ã¿ + * @param brand_list å±æ§ãã©ã³ãæ§é ä½ã®åç §ãã¤ã³ã¿ + * @return ãªã + */ +static void analyze_brand(object_type *o_ptr, cptr *brand_list) { - u32b f1, f2, f3; + BIT_FLAGS flgs[TR_FLAG_SIZE]; - object_flags(o_ptr, &f1, &f2, &f3); + object_flags(o_ptr, flgs); - brand_list = spoiler_flag_aux(f1, brand_flags_desc, brand_list, + brand_list = spoiler_flag_aux(flgs, brand_flags_desc, brand_list, N_ELEMENTS(brand_flags_desc)); /* Terminate the description list */ @@ -1075,14 +1160,20 @@ static void analyze_brand (object_type *o_ptr, cptr *brand_list) } -/* Note the resistances granted by an object */ -static void analyze_resist (object_type *o_ptr, cptr *resist_list) +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãã®é常èæ§ãæ§é ä½ã«åãã / + * Note an object's elemental brands + * @param o_ptr ãªãã¸ã§ã¯ãæ§é ä½ã®åç §ãã¤ã³ã¿ + * @param resist_list é常èæ§æ§é ä½ã®åç §ãã¤ã³ã¿ + * @return ãªã + */ +static void analyze_resist(object_type *o_ptr, cptr *resist_list) { - u32b f1, f2, f3; + BIT_FLAGS flgs[TR_FLAG_SIZE]; - object_flags(o_ptr, &f1, &f2, &f3); + object_flags(o_ptr, flgs); - resist_list = spoiler_flag_aux(f2, resist_flags_desc, + resist_list = spoiler_flag_aux(flgs, resist_flags_desc, resist_list, N_ELEMENTS(resist_flags_desc)); /* Terminate the description list */ @@ -1090,45 +1181,54 @@ static void analyze_resist (object_type *o_ptr, cptr *resist_list) } -/* Note the immunities granted by an object */ -static void analyze_immune (object_type *o_ptr, cptr *immune_list) +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãã®å ç«ç¹æ§ãæ§é ä½ã«åãã / + * Note the immunities granted by an object + * @param o_ptr ãªãã¸ã§ã¯ãæ§é ä½ã®åç §ãã¤ã³ã¿ + * @param immune_list å ç«æ§é ä½ã®åç §ãã¤ã³ã¿ + * @return ãªã + */ +static void analyze_immune(object_type *o_ptr, cptr *immune_list) { - u32b f1, f2, f3; + BIT_FLAGS flgs[TR_FLAG_SIZE]; - object_flags(o_ptr, &f1, &f2, &f3); + object_flags(o_ptr, flgs); - immune_list = spoiler_flag_aux(f2, immune_flags_desc, + immune_list = spoiler_flag_aux(flgs, immune_flags_desc, immune_list, N_ELEMENTS(immune_flags_desc)); /* Terminate the description list */ *immune_list = NULL; } -/* Note which stats an object sustains */ -static void analyze_sustains (object_type *o_ptr, cptr *sustain_list) +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãã®ç¶æç¹æ§ãæ§é ä½ã«åãã / + * Note which stats an object sustains + * @param o_ptr ãªãã¸ã§ã¯ãæ§é ä½ã®åç §ãã¤ã³ã¿ + * @param sustain_list ç¶æç¹æ§æ§é ä½ã®åç §ãã¤ã³ã¿ + * @return ãªã + */ +static void analyze_sustains(object_type *o_ptr, cptr *sustain_list) { - const u32b all_sustains = (TR2_SUST_STR | TR2_SUST_INT | TR2_SUST_WIS | - TR2_SUST_DEX | TR2_SUST_CON | TR2_SUST_CHR); - - u32b f1, f2, f3; + BIT_FLAGS flgs[TR_FLAG_SIZE]; - object_flags(o_ptr, &f1, &f2, &f3); + object_flags(o_ptr, flgs); /* Simplify things if an item sustains all stats */ - if ((f2 & all_sustains) == all_sustains) + if (have_flag(flgs, TR_SUST_STR) && have_flag(flgs, TR_SUST_INT) && + have_flag(flgs, TR_SUST_WIS) && have_flag(flgs, TR_SUST_DEX) && + have_flag(flgs, TR_SUST_CON) && have_flag(flgs, TR_SUST_CHR)) { -#ifdef JP - *sustain_list++ = "Á´Ç½ÎÏ"; -#else - *sustain_list++ = "All stats"; -#endif + *sustain_list++ = _("å ¨è½å", "All stats"); } /* Should we bother? */ - else if ((f2 & all_sustains)) + else if (have_flag(flgs, TR_SUST_STR) || have_flag(flgs, TR_SUST_INT) || + have_flag(flgs, TR_SUST_WIS) || have_flag(flgs, TR_SUST_DEX) || + have_flag(flgs, TR_SUST_CON) || have_flag(flgs, TR_SUST_CHR)) { - sustain_list = spoiler_flag_aux(f2, sustain_flags_desc, + sustain_list = spoiler_flag_aux(flgs, sustain_flags_desc, sustain_list, N_ELEMENTS(sustain_flags_desc)); } @@ -1138,87 +1238,85 @@ static void analyze_sustains (object_type *o_ptr, cptr *sustain_list) } -/* +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãã®ãã®ä»ã®ç¹æ§ãæ§é ä½ã«åãã / * Note miscellaneous powers bestowed by an artifact such as see invisible, * free action, permanent light, etc. + * @param o_ptr ãªãã¸ã§ã¯ãæ§é ä½ã®åç §ãã¤ã³ã¿ + * @param misc_list ãã®ä»ã®ç¹æ§æ§é ä½ã®åç §ãã¤ã³ã¿ + * @return ãªã */ -static void analyze_misc_magic (object_type *o_ptr, cptr *misc_list) +static void analyze_misc_magic(object_type *o_ptr, cptr *misc_list) { - u32b f1, f2, f3; + BIT_FLAGS flgs[TR_FLAG_SIZE]; + POSITION rad; + char desc[256]; - object_flags(o_ptr, &f1, &f2, &f3); + object_flags(o_ptr, flgs); - misc_list = spoiler_flag_aux(f2, misc_flags2_desc, misc_list, + misc_list = spoiler_flag_aux(flgs, misc_flags2_desc, misc_list, N_ELEMENTS(misc_flags2_desc)); - misc_list = spoiler_flag_aux(f3, misc_flags3_desc, misc_list, + misc_list = spoiler_flag_aux(flgs, misc_flags3_desc, misc_list, N_ELEMENTS(misc_flags3_desc)); /* - * Artifact lights -- large radius light. - */ - if ((o_ptr->tval == TV_LITE) && artifact_p(o_ptr)) + * Glowing artifacts -- small radius light. + */ + rad = 0; + if (have_flag(flgs, TR_LITE_1)) rad += 1; + if (have_flag(flgs, TR_LITE_2)) rad += 2; + if (have_flag(flgs, TR_LITE_3)) rad += 3; + if (have_flag(flgs, TR_LITE_M1)) rad -= 1; + if (have_flag(flgs, TR_LITE_M2)) rad -= 2; + if (have_flag(flgs, TR_LITE_M3)) rad -= 3; + + if(o_ptr->name2 == EGO_LITE_SHINE) rad++; + + if (have_flag(flgs, TR_LITE_FUEL)) { -#ifdef JP - *misc_list++ = "±Êµ×¸÷¸»(Ⱦ·Â3)"; -#else - *misc_list++ = "Permanent Light(3)"; -#endif + if(rad > 0) sprintf(desc, _("ããã¯çæè£çµ¦ã«ãã£ã¦æãã(åå¾ %d)ãæããã", "It provides light (radius %d) when fueled."), (int)rad); } - - /* - * Glowing artifacts -- small radius light. - */ - if (f3 & (TR3_LITE)) + else { -#ifdef JP - *misc_list++ = "±Êµ×¸÷¸»(Ⱦ·Â1)"; -#else - *misc_list++ = "Permanent Light(1)"; -#endif + if(rad > 0) sprintf(desc, _("æ°¸ä¹ å æº(åå¾ %d)", "Permanent Light(radius %d)"), (int)rad); + if(rad < 0) sprintf(desc, _("æ°¸ä¹ å æº(åå¾-%d)ã", "Permanent Light(radius -%d)"), (int)-rad); } + if(rad != 0) *misc_list++ = quark_str(quark_add(desc)); + /* * Handle cursed objects here to avoid redundancies such as noting * that a permanently cursed object is heavily cursed as well as * being "lightly cursed". */ -/* if (cursed_p(o_ptr)) */ - if (1) +/* if (object_is_cursed(o_ptr)) */ { - if (f3 & TR3_TY_CURSE) + if (have_flag(flgs, TR_TY_CURSE)) { -#ifdef JP - *misc_list++ = "ÂÀ¸Å¤Î±åÇ°"; -#else - *misc_list++ = "Ancient Curse"; -#endif + *misc_list++ = _("太å¤ã®æ¨å¿µ", "Ancient Curse"); } if (o_ptr->curse_flags & TRC_PERMA_CURSE) { -#ifdef JP - *misc_list++ = "±Ê±ó¤Î¼ö¤¤"; -#else - *misc_list++ = "Permanently Cursed"; -#endif + *misc_list++ = _("æ°¸é ã®åªã", "Permanently Cursed"); } else if (o_ptr->curse_flags & TRC_HEAVY_CURSE) { -#ifdef JP - *misc_list++ = "¶¯ÎϤʼö¤¤"; -#else - *misc_list++ = "Heavily Cursed"; -#endif + *misc_list++ = _("å¼·åãªåªã", "Heavily Cursed"); } /* else */ else if (o_ptr->curse_flags & TRC_CURSED) { -#ifdef JP - *misc_list++ = "¼ö¤¤"; -#else - *misc_list++ = "Cursed"; -#endif + *misc_list++ = _("åªã", "Cursed"); + } + if (have_flag(flgs, TR_ADD_L_CURSE)) + { + *misc_list++ = _("åªããå¢ãã", "Cursing"); + } + if (have_flag(flgs, TR_ADD_H_CURSE)) + { + *misc_list++ = _("å¼·åãªåªããå¢ãã", "Heavily Cursing"); } } @@ -1227,69 +1325,107 @@ static void analyze_misc_magic (object_type *o_ptr, cptr *misc_list) } +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãã®è¿½å ã©ã³ãã ç¹æ§ãæ§é ä½ã«åãã / + * Note additional ability and/or resistance of fixed artifacts + * @param o_ptr ãªãã¸ã§ã¯ãæ§é ä½ã®åç §ãã¤ã³ã¿ + * @param addition 追å ã©ã³ãã èæ§æ§é ä½ã®åç §ãã¤ã³ã¿ + * @return ãªã + */ +static void analyze_addition(object_type *o_ptr, char *addition) +{ + artifact_type *a_ptr = &a_info[o_ptr->name1]; + /* Init */ + strcpy(addition, ""); -/* +#ifdef JP + if ((a_ptr->gen_flags & TRG_XTRA_POWER) && (a_ptr->gen_flags & TRG_XTRA_H_RES)) strcat(addition, "è½åandèæ§"); + else if (a_ptr->gen_flags & TRG_XTRA_POWER) + { + strcat(addition, "è½å"); + if (a_ptr->gen_flags & TRG_XTRA_RES_OR_POWER) strcat(addition, "(1/2ã§andèæ§)"); + } + else if (a_ptr->gen_flags & TRG_XTRA_H_RES) + { + strcat(addition, "èæ§"); + if (a_ptr->gen_flags & TRG_XTRA_RES_OR_POWER) strcat(addition, "(1/2ã§andè½å)"); + } + else if (a_ptr->gen_flags & TRG_XTRA_RES_OR_POWER) strcat(addition, "è½åorèæ§"); +#else + if ((a_ptr->gen_flags & TRG_XTRA_POWER) && (a_ptr->gen_flags & TRG_XTRA_H_RES)) strcat(addition, "Ability and Resistance"); + else if (a_ptr->gen_flags & TRG_XTRA_POWER) + { + strcat(addition, "Ability"); + if (a_ptr->gen_flags & TRG_XTRA_RES_OR_POWER) strcat(addition, "(plus Resistance about 1/2)"); + } + else if (a_ptr->gen_flags & TRG_XTRA_H_RES) + { + strcat(addition, "Resistance"); + if (a_ptr->gen_flags & TRG_XTRA_RES_OR_POWER) strcat(addition, "(plus Ability about 1/2)"); + } + else if (a_ptr->gen_flags & TRG_XTRA_RES_OR_POWER) strcat(addition, "Ability or Resistance"); +#endif +} + + +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãã®åºæ¬æ å ±ãæååã«åãã / * Determine the minimum depth an artifact can appear, its rarity, its weight, * and its value in gold pieces + * @param o_ptr ãªãã¸ã§ã¯ãæ§é ä½ã®åç §ãã¤ã³ã¿ + * @param misc_desc åºæ¬æ å ±ãåããæåååç §ãã¤ã³ã¿ + * @return ãªã */ -static void analyze_misc (object_type *o_ptr, char *misc_desc) +static void analyze_misc(object_type *o_ptr, char *misc_desc) { artifact_type *a_ptr = &a_info[o_ptr->name1]; + sprintf(misc_desc, _("ã¬ãã« %d, å¸å°åº¦ %u, %d.%d kg, ï¼%ld", "Level %d, Rarity %u, %d.%d lbs, %ld Gold"), + (int)a_ptr->level, a_ptr->rarity, #ifdef JP - sprintf(misc_desc, "¥ì¥Ù¥ë %u, ´õ¾¯ÅÙ %u, %d.%d kg, ¡ð%ld", - a_ptr->level, a_ptr->rarity, - lbtokg1(a_ptr->weight), lbtokg2(a_ptr->weight), a_ptr->cost); + lbtokg1(a_ptr->weight), lbtokg2(a_ptr->weight), (long int)a_ptr->cost); #else - sprintf(misc_desc, "Level %u, Rarity %u, %d.%d lbs, %ld Gold", - a_ptr->level, a_ptr->rarity, a_ptr->weight / 10, a_ptr->weight % 10, a_ptr->cost); #endif } -/* +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãã®æ å ±å ¨ä½ãæ§é ä½ã«åãã / * Fill in an object description structure for a given object + * and its value in gold pieces + * @param o_ptr ãªãã¸ã§ã¯ãæ§é ä½ã®åç §ãã¤ã³ã¿ + * @param desc_ptr å ¨ã¢ã¼ãã£ãã¡ã¯ãæ å ±ãåããæåååç §ãã¤ã³ã¿ + * @return ãªã */ static void object_analyze(object_type *o_ptr, obj_desc_list *desc_ptr) { analyze_general(o_ptr, desc_ptr->description); - analyze_pval(o_ptr, &desc_ptr->pval_info); - analyze_brand(o_ptr, desc_ptr->brands); - analyze_slay(o_ptr, desc_ptr->slays); - analyze_immune(o_ptr, desc_ptr->immunities); - analyze_resist(o_ptr, desc_ptr->resistances); - analyze_sustains(o_ptr, desc_ptr->sustains); - analyze_misc_magic(o_ptr, desc_ptr->misc_magic); - + analyze_addition(o_ptr, desc_ptr->addition); analyze_misc(o_ptr, desc_ptr->misc_desc); - desc_ptr->activation = item_activation(o_ptr); } +/*! + * @brief ãããã¡ã«ã¢ã¼ãã£ãã¡ã¯ãåºåæ å ±ããããåãã / + * @return ãªã + */ static void print_header(void) { char buf[80]; -#ifndef FAKE_VERSION - sprintf(buf, "Artifact Spoilers for Angband Version %d.%d.%d", - VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH); - spoiler_underline(buf); -#else /* FAKE_VERSION */ sprintf(buf, "Artifact Spoilers for Hengband Version %d.%d.%d", - FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH); + FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH); spoiler_underline(buf); -#endif /* FAKE_VERSION */ - } /* @@ -1334,6 +1470,13 @@ static void print_header(void) #define LIST_SEP ';' #endif +/*! + * @brief ãã©ã°å称ãåºåããæ±ç¨é¢æ° + * @param header ãããã«åºåãããã©ã°ç¾¤ã®åå + * @param list ãã©ã°åãªã¹ã + * @param separator ãã©ã°è¡¨ç¤ºã®åºåãè¨å· + * @return ãªã + */ static void spoiler_outlist(cptr header, cptr *list, char separator) { int line_len, buf_len; @@ -1425,13 +1568,15 @@ static void spoiler_outlist(cptr header, cptr *list, char separator) fprintf(fff, "%s\n", line); } - -/* Create a spoiler file entry for an artifact */ - +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãä¸ä»¶ãã¹ãã¤ã©ã¼åºåãã / + * Create a spoiler file entry for an artifact + * @param art_ptr ã¢ã¼ãã£ãã¡ã¯ãæ å ±ãã¾ã¨ããæ§é ä½ã®åç §ãã¤ã³ã¿ + * @return ãªã + */ static void spoiler_print_art(obj_desc_list *art_ptr) { pval_info_type *pval_ptr = &art_ptr->pval_info; - char buf[80]; /* Don't indent the first line */ @@ -1441,48 +1586,27 @@ static void spoiler_print_art(obj_desc_list *art_ptr) if (pval_ptr->pval_desc[0]) { /* Mention the effects of pval */ -#ifdef JP - sprintf(buf, "%s¤Î½¤Àµ:", pval_ptr->pval_desc); -#else - sprintf(buf, "%s to", pval_ptr->pval_desc); -#endif + sprintf(buf, _("%sã®ä¿®æ£:", "%s to"), pval_ptr->pval_desc); spoiler_outlist(buf, pval_ptr->pval_affects, ITEM_SEP); } /* Now deal with the description lists */ - -#ifdef JP - spoiler_outlist("ÂÐ:", art_ptr->slays, ITEM_SEP); - - spoiler_outlist("Éð´ï°À:", art_ptr->brands, LIST_SEP); - - spoiler_outlist("ÌȱÖ:", art_ptr->immunities, ITEM_SEP); - - spoiler_outlist("ÂÑÀ:", art_ptr->resistances, ITEM_SEP); - - spoiler_outlist("°Ý»ý:", art_ptr->sustains, ITEM_SEP); -#else - spoiler_outlist("Slay", art_ptr->slays, ITEM_SEP); - - spoiler_outlist("", art_ptr->brands, LIST_SEP); - - spoiler_outlist("Immunity to", art_ptr->immunities, ITEM_SEP); - - spoiler_outlist("Resist", art_ptr->resistances, ITEM_SEP); - - spoiler_outlist("Sustain", art_ptr->sustains, ITEM_SEP); -#endif + spoiler_outlist(_("対:", "Slay"), art_ptr->slays, ITEM_SEP); + spoiler_outlist(_("æ¦å¨å±æ§:", ""), art_ptr->brands, LIST_SEP); + spoiler_outlist(_("å ç«:", "Immunity to"), art_ptr->immunities, ITEM_SEP); + spoiler_outlist(_("èæ§:", "Resist"), art_ptr->resistances, ITEM_SEP); + spoiler_outlist(_("ç¶æ:", "Sustain"), art_ptr->sustains, ITEM_SEP); spoiler_outlist("", art_ptr->misc_magic, LIST_SEP); + if (art_ptr->addition[0]) + { + fprintf(fff, _("%s追å : %s\n", "%sAdditional %s\n"), INDENT1, art_ptr->addition); + } /* Write out the possible activation at the primary indention level */ if (art_ptr->activation) { -#ifdef JP - fprintf(fff, "%sȯư: %s\n", INDENT1, art_ptr->activation); -#else - fprintf(fff, "%sActivates for %s\n", INDENT1, art_ptr->activation); -#endif + fprintf(fff, _("%sçºå: %s\n", "%sActivates for %s\n"), INDENT1, art_ptr->activation); } /* End with the miscellaneous facts */ @@ -1490,30 +1614,31 @@ static void spoiler_print_art(obj_desc_list *art_ptr) } -/* +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãæ å ±ãåºåããããã«ããã¼çæãè¡ã / * Hack -- Create a "forged" artifact + * @param o_ptr ä¸æçæå ãä¿ç®¡ãããªãã¸ã§ã¯ãæ§é ä½ + * @param name1 çæããã¢ã¼ãã£ãã¡ã¯ãID + * @return çæãæåããå ´åTRUEãè¿ã */ -static bool make_fake_artifact(object_type *o_ptr, int name1) +static bool make_fake_artifact(object_type *o_ptr, IDX name1) { - int i; - + IDX i; artifact_type *a_ptr = &a_info[name1]; - /* Ignore "empty" artifacts */ if (!a_ptr->name) return FALSE; /* Acquire the "kind" index */ i = lookup_kind(a_ptr->tval, a_ptr->sval); - /* Oops */ if (!i) return (FALSE); /* Create the artifact */ object_prep(o_ptr, i); /* Save the name */ - o_ptr->name1 = name1; + o_ptr->name1 = (byte_hack)name1; /* Extract the fields */ o_ptr->pval = a_ptr->pval; @@ -1530,23 +1655,24 @@ static bool make_fake_artifact(object_type *o_ptr, int name1) } -/* +/*! + * @brief ã¢ã¼ãã£ãã¡ã¯ãæ å ±ã®ã¹ãã¤ã©ã¼åºåãè¡ãã¡ã¤ã³ã«ã¼ãã³ / * Create a spoiler file for artifacts + * @param fname çæãã¡ã¤ã«å + * @return ãªã */ static void spoil_artifact(cptr fname) { - int i, j; + int i; + IDX j; object_type forge; object_type *q_ptr; - obj_desc_list artifact; - char buf[1024]; - /* Build the filename */ - path_build(buf, 1024, ANGBAND_DIR_USER, fname); + path_build(buf, sizeof(buf), ANGBAND_DIR_USER, fname); /* File type is "TEXT" */ FILE_TYPE(FILE_TYPE_TEXT); @@ -1554,7 +1680,6 @@ static void spoil_artifact(cptr fname) /* Open the file */ fff = my_fopen(buf, "w"); - /* Oops */ if (!fff) { msg_print("Cannot create spoiler file."); @@ -1585,8 +1710,6 @@ static void spoil_artifact(cptr fname) /* Get local object */ q_ptr = &forge; - - /* Wipe the object */ object_wipe(q_ptr); /* Attempt to "forge" the artifact */ @@ -1607,16 +1730,15 @@ static void spoil_artifact(cptr fname) return; } - /* Message */ msg_print("Successfully created a spoiler file."); } - - - -/* +/*! + * @brief ã¢ã³ã¹ã¿ã¼ç°¡ææ å ±ã®ã¹ãã¤ã©ã¼åºåãè¡ãã¡ã¤ã³ã«ã¼ãã³ / * Create a spoiler file for monsters -BEN- + * @param fname çæãã¡ã¤ã«å + * @return ãªã */ static void spoil_mon_desc(cptr fname) { @@ -1636,7 +1758,7 @@ static void spoil_mon_desc(cptr fname) char exp[80]; /* Build the filename */ - path_build(buf, 1024, ANGBAND_DIR_USER, fname); + path_build(buf, sizeof(buf), ANGBAND_DIR_USER, fname); /* File type is "TEXT" */ FILE_TYPE(FILE_TYPE_TEXT); @@ -1644,7 +1766,6 @@ static void spoil_mon_desc(cptr fname) /* Open the file */ fff = my_fopen(buf, "w"); - /* Oops */ if (!fff) { msg_print("Cannot create spoiler file."); @@ -1655,16 +1776,9 @@ static void spoil_mon_desc(cptr fname) C_MAKE(who, max_r_idx, s16b); /* Dump the header */ - -#ifndef FAKE_VERSION - fprintf(fff, "Monster Spoilers for Angband Version %d.%d.%d\n", - VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH); - fprintf(fff, "------------------------------------------\n\n"); -#else fprintf(fff, "Monster Spoilers for Hengband Version %d.%d.%d\n", - FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH); + FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH); fprintf(fff, "------------------------------------------\n\n"); -#endif /* Dump the header */ fprintf(fff, " %-38.38s%4s%4s%4s%7s%5s %11.11s\n", @@ -1679,15 +1793,15 @@ static void spoil_mon_desc(cptr fname) monster_race *r_ptr = &r_info[i]; /* Use that monster */ - if (r_ptr->name) who[n++] = i; + if (r_ptr->name) who[n++] = (s16b)i; } - /* Select the sort method */ - ang_sort_comp = ang_sort_comp_hook; - ang_sort_swap = ang_sort_swap_hook; + /* Select the sort method */ + ang_sort_comp = ang_sort_comp_hook; + ang_sort_swap = ang_sort_swap_hook; - /* Sort the array by dungeon depth of monsters */ - ang_sort(who, &why, n); + /* Sort the array by dungeon depth of monsters */ + ang_sort(who, &why, n); /* Scan again */ for (i = 0; i < n; i++) @@ -1698,30 +1812,27 @@ static void spoil_mon_desc(cptr fname) if (r_ptr->flags7 & (RF7_KAGE)) continue; /* Get the "name" */ -/* if (r_ptr->flags1 & (RF1_QUESTOR)) */ - if (0) + /* + else if (r_ptr->flags3 & (RF3_NO_CONF)) { - sprintf(nam, "[Q] %s", name); + sprintf(nam, "[*] %s", name); } + */ else if (r_ptr->flags1 & (RF1_UNIQUE)) { sprintf(nam, "[U] %s", name); } else { -#ifdef JP - sprintf(nam, " %s", name); -#else - sprintf(nam, "The %s", name); -#endif + sprintf(nam, _(" %s", "The %s"), name); } /* Level */ - sprintf(lev, "%d", r_ptr->level); + sprintf(lev, "%d", (int)r_ptr->level); /* Rarity */ - sprintf(rar, "%d", r_ptr->rarity); + sprintf(rar, "%d", (int)r_ptr->rarity); /* Speed */ if (r_ptr->speed >= 110) @@ -1751,7 +1862,7 @@ static void spoil_mon_desc(cptr fname) sprintf(exp, "%ld", (long)(r_ptr->mexp)); /* Hack -- use visual instead */ - sprintf(exp, "%s '%c'", attr_to_text(r_ptr->d_attr), r_ptr->d_char); + sprintf(exp, "%s '%c'", attr_to_text(r_ptr), r_ptr->d_char); /* Dump the info */ fprintf(fff, "%-42.42s%4s%4s%4s%7s%5s %11.11s\n", @@ -1787,9 +1898,12 @@ static void spoil_mon_desc(cptr fname) -/* +/*! + * @brief æååããã¡ã¤ã«ãã¤ã³ã¿ã«åºåãã / * Buffer text to the given file. (-SHAWN-) * This is basically c_roff() from mon-desc.c with a few changes. + * @param str æåååç §ãã¤ã³ã¿ + * @return ãªã */ static void spoil_out(cptr str) { @@ -1798,8 +1912,11 @@ static void spoil_out(cptr str) /* Line buffer */ static char roff_buf[256]; + /* Delay buffer */ + static char roff_waiting_buf[256]; + #ifdef JP - char iskanji2=0; + bool iskanji_flag = FALSE; #endif /* Current pointer into line roff_buf */ static char *roff_p = roff_buf; @@ -1807,17 +1924,28 @@ static void spoil_out(cptr str) /* Last space saved into roff_buf */ static char *roff_s = NULL; + /* Mega-Hack -- Delayed output */ + static bool waiting_output = FALSE; + /* Special handling for "new sequence" */ if (!str) { + if (waiting_output) + { + fputs(roff_waiting_buf, fff); + waiting_output = FALSE; + } + if (roff_p != roff_buf) roff_p--; while (*roff_p == ' ' && roff_p != roff_buf) roff_p--; + if (roff_p == roff_buf) fprintf(fff, "\n"); else { *(roff_p + 1) = '\0'; fprintf(fff, "%s\n\n", roff_buf); } + roff_p = roff_buf; roff_s = NULL; roff_buf[0] = '\0'; @@ -1828,27 +1956,62 @@ static void spoil_out(cptr str) for (; *str; str++) { #ifdef JP - char cbak; - int k_flag = iskanji((unsigned char)(*str)); + char cbak; + bool k_flag = iskanji((unsigned char)(*str)); #endif char ch = *str; - int wrap = (ch == '\n'); + bool wrap = (ch == '\n'); #ifdef JP - if (!isprint(ch) && !k_flag && !iskanji2) ch = ' '; - if(k_flag && !iskanji2)iskanji2=1;else iskanji2=0; + if (!isprint((unsigned char)ch) && !k_flag && !iskanji_flag) ch = ' '; + iskanji_flag = k_flag && !iskanji_flag; #else if (!isprint(ch)) ch = ' '; #endif + if (waiting_output) + { + fputs(roff_waiting_buf, fff); + if (!wrap) fputc('\n', fff); + waiting_output = FALSE; + } + + if (!wrap) + { +#ifdef JP + if (roff_p >= roff_buf + (k_flag ? 74 : 75)) wrap = TRUE; + else if ((ch == ' ') && (roff_p >= roff_buf + (k_flag ? 72 : 73))) wrap = TRUE; +#else + if (roff_p >= roff_buf + 75) wrap = TRUE; + else if ((ch == ' ') && (roff_p >= roff_buf + 73)) wrap = TRUE; +#endif + + if (wrap) + { +#ifdef JP + bool k_flag_local; + bool iskanji_flag_local = FALSE; + cptr tail = str + (k_flag ? 2 : 1); +#else + cptr tail = str + 1; +#endif + + for (; *tail; tail++) + { + if (*tail == ' ') continue; + #ifdef JP - if ( roff_p >= roff_buf+( (k_flag) ? 74 : 75) ) wrap=1; - if ((ch == ' ') && (roff_p + 2 >= roff_buf + ((k_flag) ? 74 : 75))) wrap = 1; + k_flag_local = iskanji((unsigned char)(*tail)); + if (isprint((unsigned char)*tail) || k_flag_local || iskanji_flag_local) break; + iskanji_flag_local = k_flag_local && !iskanji_flag_local; #else - if (roff_p >= roff_buf + 75) wrap = 1; - if ((ch == ' ') && (roff_p + 2 >= roff_buf + 75)) wrap = 1; + if (isprint(*tail)) break; #endif + } + if (!*tail) waiting_output = TRUE; + } + } /* Handle line-wrap */ if (wrap) @@ -1856,21 +2019,22 @@ static void spoil_out(cptr str) *roff_p = '\0'; r = roff_p; #ifdef JP - cbak=' '; + cbak = ' '; #endif if (roff_s && (ch != ' ')) { #ifdef JP - cbak=*roff_s; + cbak = *roff_s; #endif *roff_s = '\0'; r = roff_s + 1; } - fprintf(fff, "%s\n", roff_buf); + if (!waiting_output) fprintf(fff, "%s\n", roff_buf); + else strcpy(roff_waiting_buf, roff_buf); roff_s = NULL; roff_p = roff_buf; #ifdef JP - if(cbak != ' ') *roff_p++ = cbak; + if (cbak != ' ') *roff_p++ = cbak; #endif while (*r) *roff_p++ = *r++; } @@ -1879,16 +2043,18 @@ static void spoil_out(cptr str) if ((roff_p > roff_buf) || (ch != ' ')) { #ifdef JP - if( !k_flag ){ - if (ch == ' ' || ch == '(' ) roff_s = roff_p; - } - else{ - if( iskanji2 && - strncmp(str, "¡£", 2) != 0 && - strncmp(str, "¡¢", 2) != 0 && - strncmp(str, "¥£", 2) != 0 && - strncmp(str, "¡¼", 2) != 0) roff_s = roff_p; - } + if (!k_flag) + { + if ((ch == ' ') || (ch == '(')) roff_s = roff_p; + } + else + { + if (iskanji_flag && + strncmp(str, "ã", 2) != 0 && + strncmp(str, "ã", 2) != 0 && + strncmp(str, "ã£", 2) != 0 && + strncmp(str, "ã¼", 2) != 0) roff_s = roff_p; + } #else if (ch == ' ') roff_s = roff_p; #endif @@ -1900,36 +2066,39 @@ static void spoil_out(cptr str) -/* - * Hook function used in spoil_mon_info() +/*! + * @brief é¢æ°ãã¤ã³ã¿ç¨ã®åºåé¢æ° / + * Hook function used in spoil_mon_info() + * @param attr æªä½¿ç¨ + * @param str æåååç §ãã¤ã³ã¿ + * @return ãªã */ -void roff_func(byte attr, cptr str) +static void roff_func(byte attr, cptr str) { + /* Unused */ + (void)attr; + spoil_out(str); } -/* +/*! + * @brief ã¢ã³ã¹ã¿ã¼è©³ç´°æ å ±ãã¹ãã¤ã©ã¼åºåããã¡ã¤ã³ã«ã¼ãã³ / * Create a spoiler file for monsters (-SHAWN-) + * @param fname ãã¡ã¤ã«å + * @return ãªã */ static void spoil_mon_info(cptr fname) { char buf[1024]; - int msex, vn, i, j, k, l, n=0; - bool breath, magic, sin; - cptr p, q; - cptr vp[64]; - u32b flags1, flags2, flags3, flags4, flags5, flags6, flags7; + int i, l, n = 0; + BIT_FLAGS flags1; u16b why = 2; s16b *who; - -#ifdef JP - char jverb_buf[64]; -#endif /* Build the filename */ - path_build(buf, 1024, ANGBAND_DIR_USER, fname); + path_build(buf, sizeof(buf), ANGBAND_DIR_USER, fname); /* File type is "TEXT" */ FILE_TYPE(FILE_TYPE_TEXT); @@ -1937,7 +2106,6 @@ static void spoil_mon_info(cptr fname) /* Open the file */ fff = my_fopen(buf, "w"); - /* Oops */ if (!fff) { msg_print("Cannot create spoiler file."); @@ -1946,13 +2114,8 @@ static void spoil_mon_info(cptr fname) /* Dump the header */ -#ifndef FAKE_VERSION - sprintf(buf, "Monster Spoilers for Angband Version %d.%d.%d\n", - VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH); -#else sprintf(buf, "Monster Spoilers for Hengband Version %d.%d.%d\n", FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH); -#endif spoil_out(buf); spoil_out("------------------------------------------\n\n"); @@ -1966,7 +2129,7 @@ static void spoil_mon_info(cptr fname) monster_race *r_ptr = &r_info[i]; /* Use that monster */ - if (r_ptr->name) who[n++] = i; + if (r_ptr->name) who[n++] = (s16b)i; } /* Select the sort method */ @@ -1986,27 +2149,16 @@ static void spoil_mon_info(cptr fname) /* Extract the flags */ flags1 = r_ptr->flags1; - flags2 = r_ptr->flags2; - flags3 = r_ptr->flags3; - flags4 = r_ptr->flags4; - flags5 = r_ptr->flags5; - flags6 = r_ptr->flags6; - flags7 = r_ptr->flags7; - breath = FALSE; - magic = FALSE; - - /* Extract a gender (if applicable) */ - if (flags1 & (RF1_FEMALE)) msex = 2; - else if (flags1 & (RF1_MALE)) msex = 1; - else msex = 0; - /* Prefix */ + /* if (flags1 & (RF1_QUESTOR)) { spoil_out("[Q] "); } - else if (flags1 & (RF1_UNIQUE)) + else + */ + if (flags1 & (RF1_UNIQUE)) { spoil_out("[U] "); } @@ -2018,16 +2170,12 @@ static void spoil_mon_info(cptr fname) } /* Name */ -#ifdef JP - sprintf(buf, "%s/%s (", (r_name + r_ptr->name),(r_name+r_ptr->E_name)); /* ---)--- */ -#else - sprintf(buf, "%s (", (r_name + r_ptr->name)); /* ---)--- */ -#endif + sprintf(buf, _("%s/%s (", "%s ("), (r_name + r_ptr->name), _(r_name+r_ptr->E_name, "")); /* ---)--- */ spoil_out(buf); /* Color */ - spoil_out(attr_to_text(r_ptr->d_attr)); + spoil_out(attr_to_text(r_ptr)); /* Symbol --(-- */ sprintf(buf, " '%c')\n", r_ptr->d_char); @@ -2039,11 +2187,11 @@ static void spoil_mon_info(cptr fname) spoil_out(buf); /* Number */ - sprintf(buf, "Num:%d ", n); + sprintf(buf, "Num:%d ", who[l]); spoil_out(buf); /* Level */ - sprintf(buf, "Lev:%d ", r_ptr->level); + sprintf(buf, "Lev:%d ", (int)r_ptr->level); spoil_out(buf); /* Rarity */ @@ -2101,27 +2249,269 @@ static void spoil_mon_info(cptr fname) +#define MAX_EVOL_DEPTH 64 + + +/*! + * @brief inté åã§strncmp()ã¨ä¼¼ãæ¯è¼å¦çãè¡ã / + * Compare two int-type array like strncmp() and return TRUE if equals + * @param a æ¯è¼ããinté å1 + * @param b æ¯è¼ããinté å2 + * @param length + * @return 両è ã®å¤ãçãããã°TRUEãè¿ã + */ +static bool int_n_cmp(int *a, int *b, int length) +{ + /* Null-string comparation is always TRUE */ + if (!length) return TRUE; + + do + { + if (*a != *(b++)) return FALSE; + if (!(*(a++))) break; + } + while (--length); + + return TRUE; +} + + +/*! + * @brief ããæ¨ãæå®ãããæ¨ã®é¨åæ¨ãã©ãããè¿ã / + * Returns TRUE if an evolution tree is "partial tree" + * @param tree å ã¨ãªãæ¨æ§é ãªã¹ã + * @param partial_tree é¨åæ¨ãã©ããå¤å®ãããæ¨æ§é ãªã¹ã + * @return é¨åæ¨ãªãã°TRUEãè¿ã + */ +static bool is_partial_tree(int *tree, int *partial_tree) +{ + int pt_head = *(partial_tree++); + int pt_len = 0; + + while (partial_tree[pt_len]) pt_len++; + + while (*tree) + { + if (*(tree++) == pt_head) + { + if (int_n_cmp(tree, partial_tree, pt_len)) return TRUE; + } + } + + return FALSE; +} + + +/*! + * @brief é²åããªã¼ãã½ã¼ãããããã¢ã³ã¹ã¿ã¼ç¨®æã®å¤å®é¢æ° / + * Sorting hook -- Comp function + * @param u é²åæ¨æ§é ãã¼ã¿ + * @param v æªä½¿ç¨ + * @param a æ¯è¼ãããã¢ã³ã¹ã¿ã¼ç¨®æID1 + * @param b æ¯è¼ãããã¢ã³ã¹ã¿ã¼ç¨®æID2 + * @return 2ã大ãããã°TRUEãè¿ã + */ +static bool ang_sort_comp_evol_tree(vptr u, vptr v, int a, int b) +{ + int **evol_tree = (int **)u; + + int w1 = evol_tree[a][0]; + int w2 = evol_tree[b][0]; + monster_race *r1_ptr = &r_info[w1]; + monster_race *r2_ptr = &r_info[w2]; + + /* Unused */ + (void)v; + + /* Used tree first */ + if (w1 && !w2) return TRUE; + if (!w1 && w2) return FALSE; + + /* Sort by monster level */ + if (r1_ptr->level < r2_ptr->level) return TRUE; + if (r1_ptr->level > r2_ptr->level) return FALSE; + + /* Sort by monster experience */ + if (r1_ptr->mexp < r2_ptr->mexp) return TRUE; + if (r1_ptr->mexp > r2_ptr->mexp) return FALSE; + + /* Compare indexes */ + return w1 <= w2; +} + +/*! + * @brief é²åããªã¼ãã½ã¼ãããããæ¨æ§é ã®ã¹ã¯ããé¢æ° / + * Sorting hook -- Swap function + * @param u é²åæ¨æ§é ãã¼ã¿ + * @param v æªä½¿ç¨ + * @param a ã¹ã¯ãããããæ¨æ§é 1 + * @param b ã¹ã¯ãããããæ¨æ§é 2 + * @return 2ã大ãããã°TRUEãè¿ã + */ +static void ang_sort_swap_evol_tree(vptr u, vptr v, int a, int b) +{ + int **evol_tree = (int **)u; + int *holder; + + /* Unused */ + (void)v; + + /* Swap */ + holder = evol_tree[a]; + evol_tree[a] = evol_tree[b]; + evol_tree[b] = holder; +} + +/*! + * @brief é²åããªã¼ãã¹ãã¤ã©ã¼åºåããã¡ã¤ã³ã«ã¼ãã³ / + * Print monsters' evolution information to file + * @param fname åºåãã¡ã¤ã«å + * @return ãªã + */ +static void spoil_mon_evol(cptr fname) +{ + char buf[1024]; + monster_race *r_ptr; + int **evol_tree, i, j, n, r_idx; + int *evol_tree_zero; /* For C_KILL() */ + + /* Build the filename */ + path_build(buf, sizeof buf, ANGBAND_DIR_USER, fname); + + /* File type is "TEXT" */ + FILE_TYPE(FILE_TYPE_TEXT); + + /* Open the file */ + fff = my_fopen(buf, "w"); + + if (!fff) + { + msg_print("Cannot create spoiler file."); + return; + } + + /* Dump the header */ + sprintf(buf, "Monster Spoilers for Hengband Version %d.%d.%d\n", + FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH); + + spoil_out(buf); + spoil_out("------------------------------------------\n\n"); + + /* Allocate the "evol_tree" array (2-dimension) */ + C_MAKE(evol_tree, max_r_idx, int *); + C_MAKE(*evol_tree, max_r_idx * (MAX_EVOL_DEPTH + 1), int); + for (i = 1; i < max_r_idx; i++) evol_tree[i] = *evol_tree + i * (MAX_EVOL_DEPTH + 1); + evol_tree_zero = *evol_tree; + + /* Step 1: Build the evolution tree */ + for (i = 1; i < max_r_idx; i++) + { + r_ptr = &r_info[i]; + + /* No evolution */ + if (!r_ptr->next_exp) continue; + + /* Trace evolution */ + n = 0; + evol_tree[i][n++] = i; + do + { + evol_tree[i][n++] = r_ptr->next_r_idx; + r_ptr = &r_info[r_ptr->next_r_idx]; + } + while (r_ptr->next_exp && (n < MAX_EVOL_DEPTH)); + } + + /* Step 2: Scan the evolution trees and remove "partial tree" */ + for (i = 1; i < max_r_idx; i++) + { + /* Not evolution tree */ + if (!evol_tree[i][0]) continue; + + for (j = 1; j < max_r_idx; j++) + { + /* Same tree */ + if (i == j) continue; + + /* Not evolution tree */ + if (!evol_tree[j][0]) continue; + + /* Is evolution tree[i] is part of [j]? */ + if (is_partial_tree(evol_tree[j], evol_tree[i])) + { + /* Remove this evolution tree */ + evol_tree[i][0] = 0; + break; + } + } + } + + /* Step 3: Sort the evolution trees */ + + /* Select the sort method */ + ang_sort_comp = ang_sort_comp_evol_tree; + ang_sort_swap = ang_sort_swap_evol_tree; + + /* Sort the array */ + ang_sort(evol_tree, NULL, max_r_idx); + + /* Step 4: Print the evolution trees */ + for (i = 0; i < max_r_idx; i++) + { + r_idx = evol_tree[i][0]; + + /* No evolution or removed evolution tree */ + if (!r_idx) continue; + + /* Trace the evolution tree */ + r_ptr = &r_info[r_idx]; + fprintf(fff, _("[%d]: %s (ã¬ãã«%d, '%c')\n", "[%d]: %s (Level %d, '%c')\n"), + r_idx, r_name + r_ptr->name, (int)r_ptr->level, r_ptr->d_char); + + for (n = 1; r_ptr->next_exp; n++) + { + fprintf(fff, "%*s-(%ld)-> ", n * 2, "", (long int)r_ptr->next_exp); + fprintf(fff, "[%d]: ", r_ptr->next_r_idx); + r_ptr = &r_info[r_ptr->next_r_idx]; + fprintf(fff, _("%s (ã¬ãã«%d, '%c')\n", "%s (Level %d, '%c')\n"), + r_name + r_ptr->name, (int)r_ptr->level, r_ptr->d_char); + } + + /* End of evolution tree */ + fputc('\n', fff); + } + + /* Free the "evol_tree" array (2-dimension) */ + C_KILL(evol_tree_zero, max_r_idx * (MAX_EVOL_DEPTH + 1), int); + C_KILL(evol_tree, max_r_idx, int *); + + /* Check for errors */ + if (ferror(fff) || my_fclose(fff)) + { + msg_print("Cannot close spoiler file."); + return; + } + + msg_print("Successfully created a spoiler file."); +} + + + /* * Forward declare */ extern void do_cmd_spoilers(void); -/* +/*! + * @brief ã¹ãã¤ã©ã¼åºåãè¡ãã³ãã³ãã®ã¡ã¤ã³ã«ã¼ãã³ / * Create Spoiler files -BEN- + * @return ãªã */ void do_cmd_spoilers(void) { - int i; - - /* Save the screen */ screen_save(); - - /* Drop priv's */ - safe_setuid_drop(); - - /* Interact */ while (1) { @@ -2132,73 +2522,65 @@ void do_cmd_spoilers(void) prt("Create a spoiler file.", 2, 0); /* Prompt for a file */ - prt("(1) Brief Object Info (obj-desc.spo)", 5, 5); - prt("(2) Brief Artifact Info (artifact.spo)", 6, 5); - prt("(3) Brief Monster Info (mon-desc.spo)", 7, 5); - prt("(4) Full Monster Info (mon-info.spo)", 8, 5); + prt("(1) Brief Object Info (obj-desc.txt)", 5, 5); + prt("(2) Brief Artifact Info (artifact.txt)", 6, 5); + prt("(3) Brief Monster Info (mon-desc.txt)", 7, 5); + prt("(4) Full Monster Info (mon-info.txt)", 8, 5); + prt("(5) Monster Evolution Info (mon-evol.txt)", 9, 5); /* Prompt */ -#ifdef JP -prt("¥³¥Þ¥ó¥É:", 18, 0); -#else - prt("Command: ", 12, 0); -#endif - + prt(_("ã³ãã³ã:", "Command: "), _(18, 12), 0); /* Get a choice */ - i = inkey(); - - /* Escape */ - if (i == ESCAPE) + switch (inkey()) { - break; - } + /* Escape */ + case ESCAPE: + /* Restore the screen */ + screen_load(); + return; /* Option (1) */ - else if (i == '1') - { - spoil_obj_desc("obj-desc.spo"); - } + case '1': + spoil_obj_desc("obj-desc.txt"); + break; /* Option (2) */ - else if (i == '2') - { - spoil_artifact("artifact.spo"); - } + case '2': + spoil_artifact("artifact.txt"); + break; /* Option (3) */ - else if (i == '3') - { - spoil_mon_desc("mon-desc.spo"); - } + case '3': + spoil_mon_desc("mon-desc.txt"); + break; /* Option (4) */ - else if (i == '4') - { - spoil_mon_info("mon-info.spo"); - } + case '4': + spoil_mon_info("mon-info.txt"); + break; - /* Oops */ - else - { + /* Option (5) */ + case '5': + spoil_mon_evol("mon-evol.txt"); + break; + + default: bell(); + break; } /* Flush messages */ msg_print(NULL); } - - - /* Grab priv's */ - safe_setuid_grab(); - - - /* Restore the screen */ - screen_load(); } -/* +/*! + * @brief ã©ã³ãã ã¢ã¼ãã£ãã¡ã¯ãï¼ä»¶ã解æãã / * Fill in an object description structure for a given object + * @param o_ptr ã©ã³ãã ã¢ã¼ãã£ãã¡ã¯ãã®ãªãã¸ã§ã¯ãæ§é ä½åç §ãã¤ã³ã¿ + * @param desc_ptr è¨è¿°å 容ãåããæ§é ä½åç §ãã¤ã³ã¿ + * @return ãªã */ static void random_artifact_analyze(object_type *o_ptr, obj_desc_list *desc_ptr) { @@ -2212,7 +2594,7 @@ static void random_artifact_analyze(object_type *o_ptr, obj_desc_list *desc_ptr) analyze_misc_magic(o_ptr, desc_ptr->misc_magic); desc_ptr->activation = item_activation(o_ptr); #ifdef JP - sprintf(desc_ptr->misc_desc, "½Å¤µ %d.%d kg", + sprintf(desc_ptr->misc_desc, "éã %d.%d kg", lbtokg1(o_ptr->weight), lbtokg2(o_ptr->weight)); #else sprintf(desc_ptr->misc_desc, "Weight %d.%d lbs", @@ -2220,8 +2602,14 @@ static void random_artifact_analyze(object_type *o_ptr, obj_desc_list *desc_ptr) #endif } -/* Create a spoiler file entry for an artifact */ - +/*! + * @brief ã©ã³ãã ã¢ã¼ãã£ãã¡ã¯ãï¼ä»¶ãã¹ãã¤ã©ã¼åºåãã / + * Create a spoiler file entry for an artifact + * @param o_ptr ã©ã³ãã ã¢ã¼ãã£ãã¡ã¯ãã®ãªãã¸ã§ã¯ãæ§é ä½åç §ãã¤ã³ã¿ + * @param art_ptr è¨è¿°å 容ãåããæ§é ä½åç §ãã¤ã³ã¿ + * Fill in an object description structure for a given object + * @return ãªã + */ static void spoiler_print_randart(object_type *o_ptr, obj_desc_list *art_ptr) { pval_info_type *pval_ptr = &art_ptr->pval_info; @@ -2234,33 +2622,25 @@ static void spoiler_print_randart(object_type *o_ptr, obj_desc_list *art_ptr) /* unidentified */ if (!(o_ptr->ident & (IDENT_MENTAL))) { -#ifdef JP - fprintf(fff, "%sÉÔÌÀ\n",INDENT1); -#else - fprintf(fff, "%sUnknown\n",INDENT1); -#endif + fprintf(fff, _("%sä¸æ\n", "%sUnknown\n"),INDENT1); } else { /* An "empty" pval description indicates that the pval affects nothing */ if (pval_ptr->pval_desc[0]) { /* Mention the effects of pval */ -#ifdef JP - sprintf(buf, "%s¤Î½¤Àµ:", pval_ptr->pval_desc); -#else - sprintf(buf, "%s to", pval_ptr->pval_desc); -#endif + sprintf(buf, _("%sã®ä¿®æ£:", "%s to"), pval_ptr->pval_desc); spoiler_outlist(buf, pval_ptr->pval_affects, ITEM_SEP); } - + /* Now deal with the description lists */ #ifdef JP - spoiler_outlist("ÂÐ:", art_ptr->slays, ITEM_SEP); - spoiler_outlist("Éð´ï°À:", art_ptr->brands, LIST_SEP); - spoiler_outlist("ÌȱÖ:", art_ptr->immunities, ITEM_SEP); - spoiler_outlist("ÂÑÀ:", art_ptr->resistances, ITEM_SEP); - spoiler_outlist("°Ý»ý:", art_ptr->sustains, ITEM_SEP); + spoiler_outlist("対:", art_ptr->slays, ITEM_SEP); + spoiler_outlist("æ¦å¨å±æ§:", art_ptr->brands, LIST_SEP); + spoiler_outlist("å ç«:", art_ptr->immunities, ITEM_SEP); + spoiler_outlist("èæ§:", art_ptr->resistances, ITEM_SEP); + spoiler_outlist("ç¶æ:", art_ptr->sustains, ITEM_SEP); #else spoiler_outlist("Slay", art_ptr->slays, ITEM_SEP); spoiler_outlist("", art_ptr->brands, LIST_SEP); @@ -2273,24 +2653,25 @@ static void spoiler_print_randart(object_type *o_ptr, obj_desc_list *art_ptr) /* Write out the possible activation at the primary indention level */ if (art_ptr->activation) { -#ifdef JP - fprintf(fff, "%sȯư: %s\n", INDENT1, art_ptr->activation); -#else - fprintf(fff, "%sActivates for %s\n", INDENT1, art_ptr->activation); -#endif + fprintf(fff, _("%sçºå: %s\n", "%sActivates for %s\n"), INDENT1, art_ptr->activation); } } /* End with the miscellaneous facts */ fprintf(fff, "%s%s\n\n", INDENT1, art_ptr->misc_desc); } -/* Create a part of file for random artifacts */ +/*! + * @brief ã©ã³ãã ã¢ã¼ãã£ãã¡ã¯ãå 容ãã¹ãã¤ã©ã¼åºåãããµãã«ã¼ãã³ / + * @param o_ptr ã©ã³ãã ã¢ã¼ãã£ãã¡ã¯ãã®ãªãã¸ã§ã¯ãæ§é ä½åç §ãã¤ã³ã¿ + * @param i åºåãããè¨é²ã©ã³ãã ã¢ã¼ãã£ãã¡ã¯ãID + * @return ãªã + */ static void spoil_random_artifact_aux(object_type *o_ptr, int i) { obj_desc_list artifact; - if (!object_known_p(o_ptr) || !o_ptr->art_name + if (!object_is_known(o_ptr) || !o_ptr->art_name || o_ptr->tval != group_artifact[i].tval) return; @@ -2301,8 +2682,11 @@ static void spoil_random_artifact_aux(object_type *o_ptr, int i) spoiler_print_randart(o_ptr, &artifact); } -/* +/*! + * @brief ã©ã³ãã ã¢ã¼ãã£ãã¡ã¯ãå 容ãã¹ãã¤ã©ã¼åºåããã¡ã¤ã³ã«ã¼ãã³ / * Create a list file for random artifacts + * @param fname åºåãã¡ã¤ã«å + * @return ãªã */ void spoil_random_artifact(cptr fname) { @@ -2314,11 +2698,8 @@ void spoil_random_artifact(cptr fname) char buf[1024]; - /* Drop priv's */ - safe_setuid_drop(); - /* Build the filename */ - path_build(buf, 1024, ANGBAND_DIR_USER, fname); + path_build(buf, sizeof(buf), ANGBAND_DIR_USER, fname); /* File type is "TEXT" */ FILE_TYPE(FILE_TYPE_TEXT); @@ -2326,7 +2707,6 @@ void spoil_random_artifact(cptr fname) /* Open the file */ fff = my_fopen(buf, "w"); - /* Oops */ if (!fff) { msg_print("Cannot create list file."); @@ -2378,10 +2758,6 @@ void spoil_random_artifact(cptr fname) return; } - /* Grab priv's */ - safe_setuid_grab(); - - /* Message */ msg_print("Successfully created a list file."); }