OSDN Git Service

シンダリン銘を与えるコードをXAngbandより移植. 次のように使われる.
authornothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 5 Aug 2004 21:43:26 +0000 (21:43 +0000)
committernothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 5 Aug 2004 21:43:26 +0000 (21:43 +0000)
* アーティファクト生成で銘を与えなかった場合に, 従来の組み合わせ銘と
  シンダリン銘がそれぞれ1/2で用いられる.
* これまではランダムアーティファクトは20%で強さに関係なく組み合わせ銘
  が与えられていたが, 10%でシンダリン銘, 10%で組み合わせ銘となる.

なお, 以下の修正を含む.
* get_table_name()のコメントミス修正.

lib/file/sname.txt [new file with mode: 0644]
src/artifact.c
src/externs.h
src/flavor.c
src/japanese.c

diff --git a/lib/file/sname.txt b/lib/file/sname.txt
new file mode 100644 (file)
index 0000000..556368d
--- /dev/null
@@ -0,0 +1,259 @@
+N:1:First
+#blue
+ihun
+#red
+caran
+#light brue
+vinde
+#light dark
+dim
+#singing
+lin
+#stealed
+neithan
+#loudly
+brui
+#proudly
+aglar
+#terrible
+naer
+#man's
+hanu
+#manly
+vea
+#heavy
+lung
+#shining
+gal
+#shining
+thil
+#huge
+beleg
+#blinking
+bril
+#slaying
+cris
+#golden
+glor
+#silver
+celeb
+#hollowed
+nov
+#frosted
+fanui
+#black
+vor
+#unpleasant
+thaur
+#deadly
+gur
+#cilently
+din
+#must be die
+fir
+#powerful
+tur
+#brown
+bar
+#cold
+him
+#cold
+ring
+#strong
+thalion
+#bitter
+holme
+#gray
+mith
+#obsequious
+faika
+#broad
+laden
+#deep
+im
+#slender
+fim
+#gave up
+egla
+#green
+calen
+#wildly
+dru
+#dark
+dur
+#cruel
+aeg
+#king's
+aran
+#sting
+maeg
+#control
+tur
+
+N:2:Second
+#daemon
+rauko
+#imp
+orch
+#foot
+dal
+#pressure
+thang
+#bubble
+roth
+#evil technics
+morgul
+#anger
+ruth
+#lake
+aelin
+#stone
+gond
+#well
+eithel
+#song
+laer
+#party
+mereth
+#horse
+roch
+#sea (ocean)
+gaer
+#king
+erain
+#prince
+ernil
+#dog
+huan
+#wolf
+draug
+#spike
+reg
+#aula
+fana
+#end
+meth
+#flog
+cabor
+#silver metal
+slime
+#shadow
+wath
+#wind
+gwae
+#sad
+nien
+#helm
+thol
+#wall
+ram
+#hunter
+faroth
+#river
+duin
+#spy
+athir
+#crown
+rhi
+#tree
+orn
+#knight
+roquen
+#woodpecker
+tavor
+#fang
+carak
+#hope
+estel
+#bad luck
+umarth
+#frog
+hith
+#air
+vista
+#sword
+megil
+#swordman
+vagor
+#ice
+khelek
+#zombie
+firn
+#spray
+roth
+#lady
+hiril
+#winner
+dacil
+#fighter
+ohtar
+#hatred
+deloth
+#twilight
+moth
+#war
+dagor
+#blood
+sereg
+#father
+adar
+#moon
+ithil
+#horn
+ras
+#hand
+carn
+#enemy
+glam
+#iron
+ang
+#tower
+barad
+#fire
+lach
+#friend
+mellon
+#stream
+sirith
+#root
+thond
+#tooth
+cost
+#swan
+alph
+#ruin
+dagnir
+#hummer
+dring
+#sun
+aur
+#spark or star
+gil
+#summer
+laer
+#winter
+rhiw
+#wanderer
+randir
+#mant
+gol
+#watchman
+tirith
+#eye
+hen
+#firer
+thoniel
+#gate
+annon
+#forest
+aron
+#mountain
+orod
+#darkness
+mornie
+#snow
+loss
+#eagle
+thoron
+#laugh
+lalaith
index 8b25c75..8bad46b 100644 (file)
@@ -12,6 +12,7 @@
 
 
 /* Chance of using syllables to form the name instead of the "template" files */
+#define SINDARIN_NAME   10
 #define TABLE_NAME      20
 #define A_CURSED        13
 #define WEIRD_LUCK      12
@@ -1537,7 +1538,13 @@ static void give_activation_power(object_type *o_ptr)
 
 static void get_random_name(char *return_name, bool armour, int power)
 {
-       if (randint1(100) <= TABLE_NAME)
+       int prob = randint1(100);
+
+       if (prob <= SINDARIN_NAME)
+       {
+               get_table_sindarin(return_name);
+       }
+       else if (prob <= TABLE_NAME)
        {
                get_table_name(return_name);
        }
@@ -1552,35 +1559,31 @@ static void get_random_name(char *return_name, bool armour, int power)
                                {
                                        case 0:
 #ifdef JP
-filename = "a_cursed_j.txt";
+                                               filename = "a_cursed_j.txt";
 #else
                                                filename = "a_cursed.txt";
 #endif
-
                                                break;
                                        case 1:
 #ifdef JP
-filename = "a_low_j.txt";
+                                               filename = "a_low_j.txt";
 #else
                                                filename = "a_low.txt";
 #endif
-
                                                break;
                                        case 2:
 #ifdef JP
-filename = "a_med_j.txt";
+                                               filename = "a_med_j.txt";
 #else
                                                filename = "a_med.txt";
 #endif
-
                                                break;
                                        default:
 #ifdef JP
-filename = "a_high_j.txt";
+                                               filename = "a_high_j.txt";
 #else
                                                filename = "a_high.txt";
 #endif
-
                                }
                                break;
                        default:
@@ -1588,41 +1591,37 @@ filename = "a_high_j.txt";
                                {
                                        case 0:
 #ifdef JP
-filename = "w_cursed_j.txt";
+                                               filename = "w_cursed_j.txt";
 #else
                                                filename = "w_cursed.txt";
 #endif
-
                                                break;
                                        case 1:
 #ifdef JP
-filename = "w_low_j.txt";
+                                               filename = "w_low_j.txt";
 #else
                                                filename = "w_low.txt";
 #endif
-
                                                break;
                                        case 2:
 #ifdef JP
-filename = "w_med_j.txt";
+                                               filename = "w_med_j.txt";
 #else
                                                filename = "w_med.txt";
 #endif
-
                                                break;
                                        default:
 #ifdef JP
-filename = "w_high_j.txt";
+                                               filename = "w_high_j.txt";
 #else
                                                filename = "w_high.txt";
 #endif
-
                                }
                }
 
                (void)get_rnd_line(filename, artifact_bias, return_name);
 #ifdef JP
if(return_name[0]==0)get_table_name(return_name);
               if (return_name[0] == 0) get_table_name(return_name);
 #endif
        }
 }
@@ -1921,13 +1920,11 @@ bool create_artifact(object_type *o_ptr, bool a_scroll)
                    || !dummy_name[0])
                {
                        /* Cancelled */
-#if 0
                        if (one_in_(2))
                        {
-                               get_table_sindarin(dummy_name);
+                               get_table_sindarin_aux(dummy_name);
                        }
                        else
-#endif
                        {
                                get_table_name_aux(dummy_name);
                        }
index 626d7d6..e2c32d7 100644 (file)
@@ -863,6 +863,8 @@ extern u32b counts_read(int where);
 /* flavor.c */
 extern void get_table_name_aux(char *out_string);
 extern void get_table_name(char *out_string);
+extern void get_table_sindarin_aux(char *out_string);
+extern void get_table_sindarin(char *out_string);
 extern void flavor_init(void);
 extern char *object_desc_kosuu(char *t, object_type *o_ptr);
 extern void object_desc(char *buf, object_type *o_ptr, u32b mode);
@@ -1687,6 +1689,7 @@ extern void dump_virtues(FILE * OutFile);
 
 #ifdef JP
 /* japanese.c */
+extern void sindarin_to_kana(char *kana, const char *sindarin);
 extern void jverb1( const char *in , char *out);
 extern void jverb2( const char *in , char *out);
 extern void jverb3( const char *in , char *out);
index af5f5d2..83d1ef1 100644 (file)
@@ -130,7 +130,7 @@ void get_table_name_aux(char *out_string)
 
 
 /*
- * Create a name from random parts without quotes.
+ * Create a name from random parts with quotes.
  */
 void get_table_name(char *out_string)
 {
@@ -146,6 +146,49 @@ void get_table_name(char *out_string)
 
 
 /*
+ * Make random Sindarin name
+ */
+void get_table_sindarin_aux(char *out_string)
+{
+       char Syllable[80];
+#ifdef JP
+       char tmp[80];
+#endif
+
+       get_rnd_line("sname.txt", 1, Syllable);
+#ifdef JP
+       strcpy(tmp, Syllable);
+#else
+       strcpy(out_string, Syllable);
+#endif
+
+       get_rnd_line("sname.txt", 2, Syllable);
+#ifdef JP
+       strcat(tmp, Syllable);
+       sindarin_to_kana(out_string, tmp);
+#else
+       strcat(out_string, Syllable);
+#endif
+}
+
+
+/*
+ * Make random Sindarin name with quotes
+ */
+void get_table_sindarin(char *out_string)
+{
+       char buff[80];
+       get_table_sindarin_aux(buff);
+
+#ifdef JP
+       sprintf(out_string, "¡Ø%s¡Ù", buff);
+#else
+       sprintf(out_string, "'%s'", buff);
+#endif
+}
+
+
+/*
  * Shuffle flavor indices of a group of objects with given tval
  */
 static void shuffle_flavors(byte tval)
index e864d84..353c947 100644 (file)
@@ -5,6 +5,106 @@
 
 #ifdef JP
 
+typedef struct convert_key convert_key;
+
+struct convert_key
+{
+       cptr key1;
+       cptr key2;
+};
+
+static const convert_key s2j_table[] = {
+       {"mb","nb"}, {"mp","np"}, {"mv","nv"}, {"mm","nm"},
+       {"x","ks"},
+       /* sindar:¥·¥ó¥À¡¼¥ë  parantir:¥Ñ¥é¥ó¥Æ¥£¥¢  feanor:¥Õ¥§¥¢¥Î¡¼¥ë */
+       {"ar$","a-ru$"}, {"ir$","ia$"}, {"or$","o-ru$"},
+       {"ra","¥é"}, {"ri","¥ê"}, {"ru","¥ë"}, {"re","¥ì"}, {"ro","¥í"},
+       {"ir","ia"}, {"ur","ua"}, {"er","ea"}, {"ar","a¥ë"},
+       {"sha","¥·¥ã"}, {"shi","¥·"}, {"shu","¥·¥å"}, {"she","¥·¥§"}, {"sho","¥·¥ç"},
+       {"tha","¥µ"}, {"thi","¥·"}, {"thu","¥¹"}, {"the","¥»"}, {"tho","¥½"},
+       {"cha","¥Ï"}, {"chi","¥Ò"}, {"chu","¥Õ"}, {"che","¥Ø"}, {"cho","¥Û"},
+       {"dha","¥¶"}, {"dhi","¥¸"}, {"dhu","¥º"}, {"dhe","¥¼"}, {"dho","¥¾"},
+       {"ba","¥Ð"}, {"bi","¥Ó"}, {"bu","¥Ö"}, {"be","¥Ù"}, {"bo","¥Ü"},
+       {"ca","¥«"}, {"ci","¥­"}, {"cu","¥¯"}, {"ce","¥±"}, {"co","¥³"},
+       {"da","¥À"}, {"di","¥Ç¥£"}, {"du","¥É¥¥"}, {"de","¥Ç"}, {"do","¥É"},
+       {"fa","¥Õ¥¡"}, {"fi","¥Õ¥£"}, {"fu","¥Õ"}, {"fe","¥Õ¥§"}, {"fo","¥Õ¥©"},
+       {"ga","¥¬"}, {"gi","¥®"}, {"gu","¥°"}, {"ge","¥²"}, {"go","¥´"},
+       {"ha","¥Ï"}, {"hi","¥Ò"}, {"hu","¥Õ"}, {"he","¥Ø"}, {"ho","¥Û"},
+       {"ja","¥¸¥ã"}, {"ji","¥¸"}, {"ju","¥¸¥å"}, {"je","¥¸¥§"}, {"jo","¥¸¥ç"},
+       {"ka","¥«"}, {"ki","¥­"}, {"ku","¥¯"}, {"ke","¥±"}, {"ko","¥³"},
+       {"la","¥é"}, {"li","¥ê"}, {"lu","¥ë"}, {"le","¥ì"}, {"lo","¥í"},
+       {"ma","¥Þ"}, {"mi","¥ß"}, {"mu","¥à"}, {"me","¥á"}, {"mo","¥â"},
+       {"na","¥Ê"}, {"ni","¥Ë"}, {"nu","¥Ì"}, {"ne","¥Í"}, {"no","¥Î"},
+       {"pa","¥Ñ"}, {"pi","¥Ô"}, {"pu","¥×"}, {"pe","¥Ú"}, {"po","¥Ý"},
+       {"qu","¥¯"},
+       {"sa","¥µ"}, {"si","¥·"}, {"su","¥¹"}, {"se","¥»"}, {"so","¥½"},
+       {"ta","¥¿"}, {"ti","¥Æ¥£"}, {"tu","¥È¥¥"}, {"te","¥Æ"}, {"to","¥È"},
+       {"va","¥ô¥¡"}, {"vi","¥ô¥£"}, {"vu","¥ô"}, {"ve","¥ô¥§"}, {"vo","¥ô¥©"},
+       {"wa","¥ï"}, {"wi","¥¦¥£"}, {"wu","¥¦"}, {"we","¥¦¥§"}, {"wo","¥¦¥©"},
+       {"ya","¥ä"}, {"yu","¥æ"}, {"yo","¥è"},
+       {"za","¥¶"}, {"zi","¥¸"}, {"zu","¥º"}, {"ze","¥¼"}, {"zo","¥¾"},
+       {"dh","¥º"}, {"ch","¥Õ"}, {"th","¥¹"},
+       {"b","¥Ö"}, {"c","¥¯"}, {"d","¥É"}, {"f","¥Õ"}, {"g","¥°"},
+       {"h","¥Õ"}, {"j","¥¸¥å"}, {"k","¥¯"}, {"l","¥ë"}, {"m","¥à"},
+       {"n","¥ó"}, {"p","¥×"}, {"q","¥¯"}, {"r","¥ë"}, {"s","¥¹"},
+       {"t","¥È"}, {"v","¥ô"}, {"w","¥¦"}, {"y","¥¤"},
+       {"a","¥¢"}, {"i","¥¤"}, {"u","¥¦"}, {"e","¥¨"}, {"o","¥ª"},
+       {"-","¡¼"},
+       {NULL,NULL}
+};
+
+/* ¥·¥ó¥À¥ê¥ó¤òÆüËܸì¤ÎÆɤߤËÊÑ´¹¤¹¤ë */
+void sindarin_to_kana(char *kana, const char *sindarin)
+{
+       char buf[256];
+       int idx;
+
+       sprintf(kana, "%s$", sindarin);
+       for (idx = 0; kana[idx]; idx++)
+               if (isupper(kana[idx])) kana[idx] = tolower(kana[idx]);
+
+       for (idx = 0; s2j_table[idx].key1 != NULL; idx++)
+       {
+               cptr pat1 = s2j_table[idx].key1;
+               cptr pat2 = s2j_table[idx].key2;
+               int len = strlen(pat1);
+               char *src = kana;
+               char *dest = buf;
+
+               while (*src)
+               {
+                       if (strncmp(src, pat1, len) == 0)
+                       {
+                               strcpy(dest, pat2);
+                               src += len;
+                               dest += strlen(pat2);
+                       }
+                       else
+                       {
+                               if (iskanji(*src))
+                               {
+                                       *dest = *src;
+                                       src++;
+                                       dest++;
+                               }
+                               *dest = *src;
+                               src++;
+                               dest++;
+                       }
+               }
+
+               *dest = 0;
+               strcpy(kana, buf);
+       }
+
+       idx = 0;
+
+       while (kana[idx] != '$') idx++;
+
+       kana[idx] = '\0';
+}
+
+
 /*ÆüËܸìÆ°»ì³èÍÑ (ÂǤġäÂǤäÆ,ÂǤÁ etc) */
 
 #define CMPTAIL(y) strncmp(&in[l-strlen(y)],y,strlen(y))