SP Other [WB][OSP] Language Education Module (Modmerger pack)

Users who are viewing this thread

Language Education Module. Codename StudyMod.



Current version: 0.72

Download page: [OSP] StudyMod (Modmerger pack).rar
Ru-board: http://rusmnb.ru/index.php?topic=18779.0

(EN translate by GoogleTranslate)

This module allows you to study the words of a foreign language in the game.
+ Source code is completely open and available for use and modification without additional permits and copyrights.
An alpha release of language education module for MB Warband.
Main objective: to facilitate the process of learning new foreign words. The basic idea of ​​mod : over enemies is displaying learning words and during the fight , we beat them by translations =). Module supports Japanese, Russian and English languages ​​. Current alpha already allows you to teach Japanese Kana ( alphabet in two spellings ) and words JLPT5. Have been wrote a mechanism that allow for combat system , educational book , text menus, adjust automatically selected languages ​​( mother and learning ) at the start of the game. The number of languages ​​and educational levels can be increased .

How it works:
There is a dictionary (which you can change). Study words displayed over head of each agent on scene. Using a command line we write translation or reading of the word (depending on the language). If the written word is the right one - the enemy inflicts damage (".. inflict mental blow by power of knowledge" =). In addition, you can learn passively, waving by sword to watch a learning words over the heads of enemies, periodically looking in the dictionary. The third way: to memorize the whole phrases using the dynamic translated menu of the game.
There is a training book, which you can always look and see a list of training words.
Lists educational words change depending on the current level of training. In current version a study level can be changed by the player when he has feeling of "these words I have learned, move on to a higher level." Well, in future, could be created some temples, schools where you can pass a symbolic knowledge test, and then the master sensei raises your level of training.

The idea of ​​this study mod is not left me the last two years, but only now appeared understanding and knowledge that have allowed to implement them. For 2 months the concept was written up and now running. In fact, this is the first Warband mod that may bring tangible benefits from the game, combine business with pleasure. Well lets look step by step..

Features:
+ JP-EN, EN-JP, EN-RU, RU-EN study modes
+ It is possible to add new languages and dictionaries (studyMod_dict.py, studyMod_strings.py)
+ Mechanism of rapid translation of the menu text under the cursor
+ Study Book
+ Kanji Mahjong - mini-game (JP-EN mode only) (new in v0.72)
+ Command Line
+ Command Line Commands
help - show command line commands
    open book - open Study Book
    level up - increase learning level (change study words)
    level down - lower down learning level
    level - show current learning level
    mahjong or "mahjongu onegai shimasu" - ask tavernkeeper for mahjong game (new in v0.72)
Command Line opens by [ Left Alt ].
Command Line and Study Book closes by [ Right Alt ].

Gameplay:
Each enemy-agent on the scene can be killed by "mental blow" using the command line. If it's impossible, Command Line could be hide and the battle will continue by hand as usually. For Japanese words on the command line to write their reading. For the rest - to write a translation.

Educational levels:
  (JP-EN, EN-JP)        0 - hiragana
                                1 - katakana
jp_alphabet = [

  ('jp_A', 'あ', 'ア', 132, ('а', 187)),
  ('jp_I', 'い', 'イ', 220, ('и', 143)),
  ('jp_U', 'う', 'ウ', 352, ('у', 176)),
  ('jp_E', 'え', 'エ', 176, ('э', 451)),
  ('jp_O', 'お', 'オ', 286, ('о', 231)),
 
  ('jp_KA', 'か', 'カ', 386, ('ка', 523)),
  ('jp_KI', 'き', 'キ', 482, ('ки', 475)),
  ('jp_KU', 'く', 'ク', 626, ('ку', 511)),
  ('jp_KE', 'け', 'ケ', 434, ('кэ', 811)),
  ('jp_KO', 'こ', 'コ', 554, ('ко', 571)),
  ('jp_kya', 'きゃ', 'キャ', 830, ('кя', 763)),
  ('jp_kyu', 'きゅ', 'キュ', 1090, ('кю', 835)),
  ('jp_kyo', 'きょ', 'キョ', 1012, ('кё', 847)),
 
  ('jp_GA', 'が', 'ガ', 342, ('га', 556)),
  ('jp_GI', 'ぎ', 'ギ', 438, ('ги', 50:cool:),
  ('jp_GU', 'ぐ', 'グ', 582, ('гу', 544)),
  ('jp_GE', 'げ', 'ゲ', 390, ('гэ', 844)),
  ('jp_GO', 'ご', 'ゴ', 510, ('го', 604)),
  ('jp_gya', 'ぎゃ', 'ギャ', 786, ('гя', 796)),
  ('jp_gyu', 'ぎゅ', 'ギュ', 1046, ('гю', 86:cool:),
  ('jp_gyo', 'ぎょ', 'ギョ', 968, ('гё', 880)),

  ('jp_SA', 'さ', 'サ', 474, ('са', 35:cool:),
  ('jp_SHI', 'し', 'シ', 818, ('си', 310)),
  ('jp_SU', 'す', 'ス', 714, ('су', 346)),
  ('jp_SE', 'せ', 'セ', 522, ('сэ', 646)),
  ('jp_SO', 'そ', 'ソ', 642, ('со', 406)), #so = chi
  ('jp_sha', 'しゃ', 'シャ', 714, ('ся', 59:cool:),
  ('jp_shu', 'しゅ', 'シュ', 974, ('сю', 670)),
  ('jp_sho', 'しょ', 'ショ', 896, ('сё', 682)),
 
  ('jp_ZA', 'ざ', 'ザ', 551, ('дза', 79:cool:),
  ('jp_ZI', 'じ', 'ジ', 471, ('дзи', 746)),
  ('jp_ZU', 'ず', 'ズ', 791, ('дзу', 1104)),
  ('jp_ZE', 'ぜ', 'ゼ', 599, ('дзэ', 1110)),
  ('jp_ZO', 'ぞ', 'ゾ', 719, ('дзо', 850)),
  ('jp_ja', 'じゃ', 'ジャ', 375, ('дзя', 105:cool:),
  ('jp_ju', 'じゅ', 'ジュ', 615, ('дзю', 1136)),
  ('jp_jo', 'じょ', 'ジョ', 543, ('дзё', 1149)),

  ('jp_TA', 'た', 'タ', 485, ('та', 479)),
  ('jp_CHI', 'ち', 'チ', 642, ('чи', 541)),
  ('jp_TSU', 'つ', 'ツ', 1117, ('цу', 566)),
  ('jp_TE', 'て', 'テ', 533, ('тэ', 767)),
  ('jp_TO', 'と', 'ト', 653, ('то', 527)),
  ('jp_cha', 'ちゃ', 'チャ', 538, ('тя', 719)),
  ('jp_chu', 'ちゅ', 'チュ', 798, ('тю', 791)),
  ('jp_cho', 'ちょ', 'チョ', 720, ('тё', 803)),
 
  ('jp_DA', 'だ', 'ダ', 309, ('да', 457)),
  ('jp_JI', 'ぢ', 'ヂ', 405, ('дзи', 746)),
  ('jp_DU', 'づ', 'ヅ', 549, ('дзу', 785)),
  ('jp_DE', 'で', 'デ', 357, ('дэ', 745)),
  ('jp_DO', 'ど', 'ド', 477, ('до', 505)),
 
  ('jp_NA', 'な', 'ナ', 419, ('на', 600)),
  ('jp_NI', 'に', 'ニ', 515, ('ни', 552)),
  ('jp_NU', 'ぬ', 'ヌ', 659, ('ну', 58:cool:),
  ('jp_NE', 'ね', 'ネ', 467, ('нэ', 88:cool:),
  ('jp_NO', 'の', 'ノ', 587, ('но', 64:cool:),
  ('jp_nya', 'にゃ', 'ニャ', 863, ('ня', 840)),
  ('jp_nyu', 'にゅ', 'ニュ', 1123, ('ню', 912)),
  ('jp_nyo', 'にょ', 'ニョ', 1045, ('нё', 924)),

  ('jp_HA', 'は', 'ハ', 353, ('ха', 622)),
  ('jp_HI', 'ひ', 'ヒ', 449, ('хи', 574)),
  ('jp_FU', 'ふ', 'フ', 571, ('фу', 324)),
  ('jp_HE', 'へ', 'ヘ', 401, ('хэ', 910)),
  ('jp_HO', 'ほ', 'ホ', 521, ('хо', 670)),
  ('jp_hya', 'ひゃ', 'ヒャ', 797, ('хя', 862)),
  ('jp_hyu', 'ひゅ', 'ヒュ', 1057, ('хю', 934)),
  ('jp_hyo', 'ひょ', 'ヒョ', 979, ('хё', 946)),
 
  ('jp_BA', 'ば', 'バ', 287, ('ба', 666)),
  ('jp_BI', 'び', 'ビ', 383, ('би', 61:cool:),
  ('jp_BU', 'ぶ', 'ブ', 527, ('бу', 654)),
  ('jp_BE', 'べ', 'ベ', 335, ('бэ', 954)),
  ('jp_BO', 'ぼ', 'ボ', 455, ('бо', 714)),
  ('jp_bya', 'びゃ', 'ビャ', 731, ('бя', 906)),
  ('jp_byu', 'びゅ', 'ビュ', 991, ('бю', 97:cool:),
  ('jp_byo', 'びょ', 'ビョ', 913, ('бё', 990)),
 
  ('jp_PA', 'ぱ', 'パ', 441, ('па', 402)),
  ('jp_PI', 'ぴ', 'ピ', 537, ('пи', 354)),
  ('jp_PU', 'ぷ', 'プ', 681, ('пу', 390)),
  ('jp_PE', 'ぺ', 'ペ', 489, ('пэ', 690)),
  ('jp_PO', 'ぽ', 'ポ', 609, ('по', 450)),
  ('jp_pya', 'ぴゃ', 'ピャ', 885, ('пя', 642)),
  ('jp_pyu', 'ぴゅ', 'ピュ', 1145, ('пю', 714)),
  ('jp_pyo', 'ぴょ', 'ピョ', 1067, ('пё', 726)),
 
  ('jp_MA', 'ま', 'マ', 408, ('ма', 567)),
  ('jp_MI', 'み', 'ミ', 504, ('ми', 519)),
  ('jp_MU', 'む', 'ム', 648, ('му', 555)),
  ('jp_ME', 'め', 'メ', 456, ('мэ', 855)),
  ('jp_MO', 'も', 'モ', 576, ('мо', 615)),
  ('jp_mya', 'みゃ', 'ミャ', 852, ('мя', 807)),
  ('jp_myu', 'みゅ', 'ミュ', 1112, ('мю', 879)),
  ('jp_myo', 'みょ', 'ミョ', 1034, ('мё', 891)),
 
  ('jp_YA', 'や', 'ヤ', 540, ('я', 407)),
  ('jp_YU', 'ゆ', 'ユ', 780, ('ю', 473)),
  ('jp_YO', 'よ', 'ヨ', 708, ('ё', 484)),
 
  ('jp_RA', 'ら', 'ラ', 463, ('ра', 413)),
  ('jp_RI', 'り', 'リ', 559, ('ри', 365)),
  ('jp_RU', 'る', 'ル', 703, ('ру', 401)),
  ('jp_RE', 'れ', 'レ', 511, ('рэ', 701)),
  ('jp_RO', 'ろ', 'ロ', 631, ('ро', 461)),
  ('jp_rya', 'りゃ', 'リャ', 907, ('ря', 653)),
  ('jp_ryu', 'りゅ', 'リュ', 1167, ('рю', 725)),
  ('jp_ryo', 'りょ', 'リョ', 1089, ('рё', 737)),
 
  ('jp_WA', 'わ', 'ワ', 518, ('ва', 369)),
  ('jp_WO', 'を', 'ヲ', 686, ('о', 231)),
  ('jp_N', 'ん', 'ン', 575, ('н', 396)),# write nn (for JP-EN)

]
  (EN-RU, RU-EN)      2 - JLPT5 words
JLPT5 = [

  [('one', 794),('一', 'ichi', 915), ('один', 1180)],
  [('two', 1087),('二', 'ni', 515), ('два', 654)],
  [('three', 1410),('三', 'san', 799), ('три', 672)],
  [('four', 1321),('四', 'yon', 1033), ('четыре', 2283)], #shi
  [('five', 1080),('五', 'go', 510), ('пять', 1303)],
  [('six', 1025),('六', 'roku', 1365), ('шесть', 1484)],
  [('seven', 1550),('七', 'nana', 912), ('семь', 1291)], # shichi
  [('eight', 1381),('八', 'hachi', 1101), ('восемь', 1912)],
  [('nine', 1064),('九', 'kyuu', 153:cool:, ('девять', 2097)], # ku
  [('ten', 85:cool:,('十', 'juu', 1031), ('десять', 2084)],
  [('person', 2076),('人', 'hito', 1216), ('человек', 2551)],
  [('enter', 153:cool:,('入', 'iri', 82:cool:, ('вход', 1216)],
  [('top', 1004),('上', 'ue', 544), ('верх', 1316)],
  [('bottom', 2066),('下', '****a', 1432), ('низ', 903)],
  [('big', 617),('大', 'oo', 59:cool:, ('большой', 244:cool:],
  [('woman', 1541),('女', 'onna', 1079), ('женщина', 2704)],
  [('ten_thousand', 4464),('万', 'man', 733), ('десять_тысяч', 511:cool:], # ingame write without "_" / в игре писать без "_"
  [('earth', 1416),('土', 'tsuchi', 191:cool:, ('почва', 1370)],
  [('mountain', 2789),('山', 'yama', 1020), ('гора', 1089)],
  [('thousand', 2692),('千', 'sen', 847), ('тысяча', 2132)],
  [('river', 1647),('川', 'kawa', 996), ('река', 1196)],
  [('child', 1189),('子', 'ko', 554), ('ребёнок', 3112)],
  [('Japan', 1269),('日本', 'nihon', 1501), ('Япония', 1655)], #fix => 2187
  [('mouth', 1711),('口', 'kuchi', 1374), ('рот', 786)],
  [('hand', 88:cool:,('手', 'te', 533), ('рука', 1016)],
  [('day', 777),('日', 'hi', 449), ('день', 1429)], # sun, cолнце
  [('minute', 199:cool:,('分', 'fun', 896), ('минута', 185:cool:],
  [('medium', 1795),('中', 'naka', 873), ('среди', 1302)], # in, в, внутри
  [('yen', 913),('円', 'en', 476), ('иена', 1221)],
  [('month', 1620),('月', 'tsuki', 1725), ('месяц', 1945)], # moon, луна
  [('afternoon', 3183),('午', 'go', 510), ('полдень', 2507)],
  [('now', 1029),('今', 'ima', 664), ('сейчас', 1859)],
  [('tree', 1121),('木', 'ki', 482), ('дерево', 1867)],
  [('father', 1704),('父', 'chichi', 1443), ('отец', 1410)],
  [('fire', 102:cool:,('火', 'hi', 449), ('огонь', 1752)],
  [('friend', 1634),('友', 'tomo', 1329), ('друг', 1137)],
  [('water', 1580),('水', 'mizu', 1433), ('вода', 954)],
  [('little', 1931),('少', 'shou', 1344), ('мало', 1147)],
  [('left', 1100),('左', 'hidari', 1567), ('левый', 1649)],
  [('leave', 1303),('出る', 'deru', 1182), ('выходить', 2723)],
  [('outside', 2305),('外', 'soto', 1409), ('снаружи', 2174)],
  [('north', 1683),('北', 'kita', 1053), ('север', 1440)],
  [('book', 1101),('本', 'hon', 846), ('книга', 1623)],
  [('mother', 1949),('母', 'haha', 76:cool:, ('мать', 122:cool:],
  [('half', 890),('半ば', 'nakaba', 1260), ('половина', 2381)],
  [('right', 1524),('右', 'migi', 101:cool:, ('правый', 1755)],
  [('white', 1536),('白い', 'shiroi', 1934), ('белый', 1960)],# светлый
  [('life', 93:cool:,('生', 'sei', 782), ('жизнь', 1811)],
  [('old', 757),('古い', 'furui', 1696), ('старый', 1839)],
  [('eye', 816),('目', 'me', 456), ('глаза', 1470)],
  [('stand', 1433),('立つ', 'tatsu', 178:cool:, ('стоять', 2004)],
  [('hundred', 2074),('百', 'hyaku', 1585), ('сто', 727)],
  [('mood', 1124),('気', 'ki', 482), ('настроение', 3795)],# воздух
  [('go', 510),('行く', 'iku', 900), ('идти', 926)],
  [('every', 1726),('毎', 'mai', 66:cool:, ('каждый', 2263)],
  [('name', 955),('名', 'na', 419), ('имя', 1020)],
  [('rest', 1335),('休み', 'yasumi', 205:cool:, ('отдых', 1820)],
  [('year', 1150),('年', 'nen', 792), ('год', 903)],
  [('west', 1390),('西', 'nishi', 1471), ('запад', 131:cool:],
  [('previous', 3115),('先', 'saki', 1040), ('раньше', 2013)],
  [('meet', 109:cool:,('会う', 'au', 516), ('встречать', 3144)],
  [('many', 1237),('多い', 'ooi', 85:cool:, ('много', 1831)],
  [('ear', 697),('耳', 'mimi', 1096), ('уши', 585)],
  [('see', 730),('見る', 'miru', 1329), ('смотреть', 2811)],
  [('what', 1192),('何', 'nani', 1024), ('что', 95:cool:],
  [('man', 733),('男', 'otoko', 1694), ('мужчина', 2625)],
  [('come', 1002),('来る', 'kuru', 1451), ('приходить', 2937)],
  [('car', 675),('車', 'kuruma', 2003), ('машина', 1821)],
  [('flower', 1981),('花', 'hana', 846), ('цветок', 2086)],
  [('say', 942),('言う', 'iu', 604), ('сказать', 2164)],
  [('shrine', 1846),('社', 'yashiro', 2402), ('храм', 1329)],
  [('leg', 679),('足', 'ashi', 1019), ('нога', 1302)],
  [('long', 1142),('長い', 'nagai', 1121), ('длинный', 2686)],
  [('learn', 1382),('学ぶ', 'manabu', 160:cool:, ('учить', 1475)],
  [('east', 1144),('東', 'higashi', 1945), ('восток', 172:cool:],
  [('money', 1665),('金', 'kane', 935), ('деньги', 2117)],
  [('country', 2773),('国', 'kuni', 1231), ('страна', 1751)],
  [('rain', 1073),('雨', 'ame', 62:cool:, ('дождь', 1707)],
  [('sky', 1062),('空', 'sora', 1187), ('небо', 160:cool:],
  [('shop', 1274),('店', 'mise', 111:cool:, ('магазин', 2446)],
  [('food', 1047),('食', 'shoku', 1684), ('еда', 83:cool:],
  [('later', 1459),('後', 'ato', 842), ('позже', 1826)],
  [('south', 1777),('南', 'minami', 1677), ('юг', 857)],
  [('before', 1611),('前', 'mae', 616), ('до', 505)],# перед чем-либо
  [('time', 1117),('時', 'toki', 1219), ('время', 1813)],# когда, в то время как
  [('school', 1867),('学校', 'gakkou', 183:cool:, ('школа', 1404)],
  [('high', 949),('高い', 'takai', 1239), ('высокий', 2120)],# дорогой
  [('write', 1656),('書く', 'kaku', 1120), ('писать', 1533)],
  [('fish', 1083),('魚', 'sakana', 1495), ('рыба', 1353)],
  [('week', 1082),('週', 'shuu', 1422), ('неделя', 2423)],
  [('between', 2135),('間', 'aida', 735), ('между', 1817)],
  [('drink', 1453),('飲む', 'nomu', 1347), ('пить', 1015)],
  [('road', 997),('道', 'michi', 1252), ('дорога', 179:cool:],
  [('buy', 995),('買う', 'kau', 802), ('покупать', 2450)],
  [('electricity', 4133),('電気', 'denki', 1290), ('электричество', 5261)],
  [('speak', 1360),('話す', 'hanasu', 180:cool:, ('говорить', 2443)],
  [('new', 909),('新', 'shin', 116:cool:, ('новый', 1683)],
  [('language', 2240),('語', 'go', 510), ('язык', 1527)],
  [('listen', 1957),('聞く', 'kiku', 1216), ('слушать', 1969)],
  [('read', 877),('読む', 'yomu', 146:cool:, ('читать', 1863)],
  [('station', 2433),('駅', 'eki', 700), ('станция', 2526)],
]
                                  3 - JLPT4 words (part 1 = first 80) (new in v0.72)
JLPT4_1 = [

  [('bad', 482), ('悪い', 'warui', 1643), ('плохой', 2030)],
  [('medicine', 2174), ('医学', 'igaku', 1380), ('медицина', 2852)],
  [('view', 1287), ('意見', 'iken', 1042), ('мнение', 2393)],
  [('after', 139:cool:, ('以後', 'igo', 774), ('после', 1405)],
  [('institution', 4667), ('院', 'in', 520), ('учереждение', 4914)],
  [('employee', 2663), ('員', 'in', 520), ('сотрудник', 3002)],
  [('carry', 1621), ('運ぶ', 'hakobu', 1710), ('переносить', 3554)],
  [('english', 2135), ('英', 'ei', 416), ('английский', 3553)],
  [('England', 1867), ('英国', 'eikoku', 190:cool:, ('Aнглия', 2075)],
  [('English', 2135), ('英語', 'eigo', 1014), ('английский_язык', 6310)], # ! second english => rename to english2 in studyMod_strings.py
  [('reflection', 3399), ('映り', 'utsuri', 2317), ('отражение', 3547)],
  [('shop', 1274), ('屋', 'ya', 540), ('магазин', 2446)],
  [('sound', 1633), ('音', 'on', 586), ('звук', 1091)],
  [('song', 1219), ('歌', 'uta', 880), ('песня', 1811)],
  [('sing', 1147), ('歌う', 'utau', 132:cool:, ('петь', 1231)],
  [('summer', 2066), ('夏', 'natsu', 1722), ('лето', 1233)],
  [('autumn', 2127), ('秋', 'aki', 656), ('осень', 1666)],
  [('spring', 1974), ('春', 'haru', 117:cool:, ('весна', 147:cool:],
  [('house', 1597), ('家', 'uchi', 1047), ('дом', 934)],
  [('picture', 2369), ('画', 'ga', 342), ('картина', 2180)],
  [('draw', 1145), ('画く', 'egaku', 1336), ('рисовать', 2195)],
  [('movie', 1525), ('映画', 'eiga', 81:cool:, ('фильм', 1405)],
  [('sea', 67:cool:, ('海', 'umi', 900), ('море', 1296)],
  [('open', 116:cool:, ('開く', 'hiraku', 1836), ('открывать', 3059)],
  [('world', 1610), ('世界', 'sekai', 1276), ('мир', 766)],
  [('music', 152:cool:, ('音楽', 'ongaku', 1830), ('музыка', 2033)],
  [('palace', 1374), ('館', 'yakata', 1651), ('дворец', 1981)],
  [('chinese', 1984), ('漢', 'kan', 711), ('китайский', 2941)],
  [('return', 2197), ('帰る', 'kaeru', 1480), ('возвращаться', 4346)],
  [('get_up', 1859), ('起きる', 'okiru', 1696), ('вставать', 2250)], # get up = 1859
  [('research', 2349), ('究', 'kyuu', 153:cool:, ('исследование', 4259)],
  [('hurry', 1916), ('急ぐ', 'isogu', 1650), ('спешить', 2056)],
  [('cow', 90:cool:, ('牛', 'ushi', 1239), ('корова', 1609)],
  [('past', 1265), ('去', 'kyo', 1012), ('прошлый', 2265)],
  [('leave', 1303), ('去る', 'saru', 1299), ('оставить', 2252)],
  [('teach', 1170), ('教える', 'oshieru', 2421), ('учить', 1475)],
  [('capital', 1977), ('京', 'kyou', 1460), ('столица', 2063)],
  [('work', 1371), ('業', 'gyou', 1416), ('работа', 1900)],
  [('near', 1029), ('近く', 'chikaku', 2026), ('близко', 2044)],
  [('silver', 2035), ('銀', 'gin', 763), ('серебро', 249:cool:],
  [('bank', 920), ('銀行', 'ginkou', 1973), ('банк', 1540)],
  [('mercury', 2585), ('水銀', 'suigin', 1926), ('ртуть', 1427)],
  [('total', 1569), ('計', 'kei', 694), ('всего', 1499)],
  [('measure', 224:cool:, ('計る', 'hakaru', 1754), ('измерять', 3064)],
  [('clock', 1294), ('時計', 'tokei', 1463), ('часы', 1191)],
  [('older_brother', 452:cool:, ('兄', 'ani', 692), ('старший_брат', 3907)],
  [('dog', 711), ('犬', 'inu', 936), ('собака', 1897)],
  [('puppy', 1950), ('小犬', 'koinu', 1644), ('щенок', 1855)],
  [('whet', 1244), ('研ぐ', 'togu', 1335), ('точить', 1923)],
  [('study', 186:cool:, ('研学', 'kengaku', 2087), ('учеба', 1842)],
  [('construction', 5021), ('建', 'ken', 759), ('строительство', 4587)],
  [('try', 1157), ('験す', 'tamesu', 1983), ('пробовать', 3037)],
  [('source', 1930), ('元', 'moto', 1343), ('источник', 2774)],
  [('energy', 1936), ('元気', 'genki', 1323), ('энергия', 2869)],
  [('work', 1371), ('工', 'kou', 970), ('работа', 1900)], # !second work => rename to work2 in studyMod_strings.py
  [('carpenter', 3059), ('木工', 'mokkou', 2072), ('плотник', 2326)],
  [('wide', 1033), ('広い', 'hiroi', 1490), ('широкий', 2036)],
  [('idea', 776), ('考え', 'kangae', 1399), ('идея', 1340)],
  [('black', 1101), ('黒い', 'kuroi', 1667), ('черный', 2406)],
  [('make', 91:cool:, ('作る', 'tsukuru', 2913), ('делать', 190:cool:],
  [('paper', 1451), ('紙', 'kami', 97:cool:, ('бумага', 2073)],
  [('letter', 1986), ('手紙', 'tegami', 1615), ('письмо', 1703)],
  [('think', 1509), ('思う', 'omou', 1360), ('думать', 1871)],
  [('older_sister', 4294), ('姉', 'ane', 640), ('старшая_сестра', 4597)],
  [('stop', 141:cool:, ('止', 'shi', 81:cool:, ('oстанавливать', 4486)],
  [('work', 1371), ('仕事', 'shigoto', 239:cool:, ('работа', 1900)], # !third work => rename to work3 in studyMod_strings.py
  [('die', 613), ('死ぬ', 'shinu', 164:cool:, ('умереть', 2514)],
  [('use', 920), ('使う', 'tsukau', 2117), ('использовать', 406:cool:],
  [('start', 1729), ('始め', 'hajime', 1522), ('начало', 1959)],
  [('test', 1357), ('試す', 'tamesu', 1983), ('проверять', 3213)],
  [('I', 220), ('私', 'watashi', 2183), ('я', 407)],
  [('character', 2714), ('字', 'ji', 471), ('символ', 1616)],
  [('myself', 1927), ('自分', 'jibun', 1463), ('сам', 787)],
  [('matter', 1949), ('事', 'koto', 1321), ('дело', 1205)],
  [('fire', 102:cool:, ('火事', 'kaji', 939), ('пожар', 1493)],
  [('have', 1006), ('持つ', 'motsu', 1879), ('иметь', 1652)],
  [('room', 1305), ('室', '****su', 2214), ('комната', 244:cool:],
  [('quality', 257:cool:, ('質', '****su', 2214), ('качество', 2655)],
  [('copy', 1321), ('写し', 'utsushi', 2656), ('копия', 1542)],
  [('person', 2076), ('者', 'mono', 1265), ('человек', 2551)],
  [('doctor', 1947), ('医者', 'isha', 995), ('врач', 1104)],
  [('lease', 1261), ('借', 'shaku', 1502), ('аренда', 1939)],
  [('main', 101:cool:, ('主な', 'omona', 1442), ('главный', 2543)],
  [('husband', 2000), ('主人', 'shujin', 196:cool:, ('муж', 1075)],
  [('collect', 207:cool:, ('集める', 'atsumeru', 3027), ('собирать', 254:cool:],
  [('learn', 1382), ('習う', 'narau', 1444), ('учить', 1475)], # !second learn => rename to learn2 in studyMod_strings.py
  [('final', 1265), ('終', 'tsui', 1397), ('конец', 1983)],
  [('live', 1146), ('住む', 'sumu', 1474), ('жить', 1257)],
  [('heavy', 1559), ('重い', 'omoi', 1192), ('тяжелый', 2959)],
  [('place', 1165), ('場', 'ba', 287), ('место', 1582)],
  [('plaza', 1427), ('広場', 'hiroba', 1577), ('площадь', 2130)],
  [('factory', 2413), ('工場', 'koujou', 2166), ('фабрика', 2096)],
  [('color', 1564), ('色', 'iro', 906), ('цвет', 1307)],
  [('heart', 142:cool:, ('心', 'kokoro', 2055), ('сердце', 2101)],
  [('parents', 2423), ('親', 'oya', 874), ('родители', 2421)],
  [('true', 1329), ('真', 'shin', 116:cool:, ('правда', 1474)],
  [('figure', 1800), ('図', 'zu', 791), ('рисунок', 2140)],
  [('blue', 1059), ('青い', 'aoi', 704), ('синий', 1380)],
  #[('', 0), ('世', 'se', 0), ('', 0)], =>> used in "world"
  [('correct', 2240), ('正す', 'tadasu', 1810), ('исправлять', 3301)],
  [('red', 706), ('赤い', 'akai', 832), ('красный', 2460)],
  [('evening', 2136), ('夕', 'yuu', 1196), ('вечер', 1711)], 
]
On average, there is about 100 words on a level.

A little about fonts:
To study the Japanese language before game start in the configuration menu need  to choose Nihongo language. By this we load to the game the Japanese-English fonts, so you can see Japanese texts.
If you learn English or Russian, the language of the game choose English. The default font have cyrillic support and available learning modes will be EN-RU, RU-EN.

Dynamic meny:
This is game menus that give the fly translation unknown text under the cursor.
Concept:
+ All texts of dialogs and menus on learning language.
+ If I do not understand - I move the cursor and get a translation / reading of unfamiliar words. This mechanism is  implemented only in the start menu language selection for now.

You can certainly go to the trick and substitute location on their own.
[############# 190 / 216 ##########===>87,9%]

menu_start_game_0 = 0
menu_start_phase_2 = 1
menu_start_game_3 = 2
menu_tutorial = 3
menu_reports = 4
menu_custom_battle_scene = 5
menu_custom_battle_end = 6

menu_start_game_1 = 7
menu_start_character_1 = 8
menu_start_character_2 = 9
menu_start_character_3 = 10
menu_start_character_4 = 11

menu_choose_skill = 12 (skipped - does not process the button "Continue", a branch of the character creation is not workable.)
menu_past_life_explanation = 13 (skipped - not used in game)
menu_auto_return = 14
menu_morale_report = 15
menu_courtship_relations = 16
menu_lord_relations = 17

menu_companion_report = 18
menu_faction_orders = 19
menu_character_report = 20
menu_party_size_report = 21
menu_faction_relations_report = 22
menu_camp = 23
menu_camp_cheat = 24
menu_cheat_find_item = 25
menu_cheat_change_weather = 26
menu_camp_action = 27
menu_camp_recruit_prisoners = 28
menu_camp_no_prisoners = 29
menu_camp_action_read_book = 30
menu_camp_action_read_book_start = 31
menu_retirement_verify = 32
menu_end_game = 33
menu_cattle_herd = 34
menu_cattle_herd_kill = 35

menu_cattle_herd_kill_end = 36 (skipped - non text)
menu_arena_duel_fight = 37
menu_arena_duel_conclusion = 38
menu_simple_encounter = 39
menu_encounter_retreat_confirm = 40
menu_encounter_retreat = 41
menu_order_attack_begin = 42
menu_order_attack_2 = 43
menu_battle_debrief = 44
menu_total_victory = 45

menu_enemy_slipped_away = 46
menu_total_defeat = 47
menu_permanent_damage = 48
menu_pre_join = 49
menu_join_battle = 50
menu_join_order_attack = 51
menu_zendar = 52
menu_salt_mine = 53
menu_four_ways_inn = 54
menu_test_scene = 55
menu_battlefields = 56
menu_dhorak_keep = 57
menu_join_siege_outside = 58
menu_cut_siege_without_fight = 59
menu_besiegers_camp_with_allies = 60
menu_castle_outside = 61
menu_castle_guard = 62
menu_castle_entry_granted = 63
menu_castle_entry_denied = 64
menu_castle_meeting = 65
menu_castle_meeting_selected = 66
menu_castle_besiege = 67
menu_siege_attack_meets_sally = 68
menu_castle_besiege_inner_battle = 69
menu_construct_ladders = 70
menu_construct_siege_tower = 71
menu_castle_attack_walls_simulate = 72
menu_castle_attack_walls_with_allies_simulate = 73

menu_castle_taken_by_friends = 74 (skipped, not used in game)
menu_castle_taken = 75
menu_castle_taken_2 = 76
menu_requested_castle_granted_to_player = 77
menu_requested_castle_granted_to_player_husband = 78
menu_requested_castle_granted_to_another = 79
menu_requested_castle_granted_to_another_female = 80
menu_leave_faction = 81
menu_give_center_to_player = 82
menu_give_center_to_player_2 = 83
menu_oath_fulfilled = 84
menu_siege_started_defender = 85
menu_siege_join_defense = 86
menu_enter_your_own_castle = 87
menu_village = 88
menu_village_hostile_action = 89
menu_recruit_volunteers = 90
menu_village_hunt_down_fugitive_defeated = 91
menu_village_infest_bandits_result = 92
menu_village_infestation_removed = 93
menu_center_manage = 94
menu_center_improve = 95
menu_town_bandits_failed = 96
menu_town_bandits_succeeded = 97
menu_village_steal_cattle_confirm = 98
menu_village_steal_cattle = 99
menu_village_take_food_confirm = 100
menu_village_take_food = 101
menu_village_start_attack = 102
menu_village_loot_no_resist = 103
menu_village_loot_complete = 104
menu_village_loot_defeat = 105
menu_village_loot_continue = 106

menu_close = 107
menu_town = 108
menu_cannot_enter_court = 109
menu_lady_visit = 110
menu_town_tournament_lost = 111
menu_town_tournament_won = 112
menu_town_tournament_won_by_another = 113
menu_town_tournament = 114
menu_tournament_withdraw_verify = 115
menu_tournament_bet = 116
menu_tournament_bet_confirm = 117
menu_tournament_participants = 118
menu_collect_taxes = 119
menu_collect_taxes_complete = 120
menu_collect_taxes_rebels_killed = 121
menu_collect_taxes_failed = 122
menu_collect_taxes_revolt_warning = 123
menu_collect_taxes_revolt = 124
menu_train_peasants_against_bandits = 125
menu_train_peasants_against_bandits_ready = 126
menu_train_peasants_against_bandits_training_result = 127
menu_train_peasants_against_bandits_attack = 128
menu_train_peasants_against_bandits_attack_result = 129
menu_train_peasants_against_bandits_success = 130

menu_disembark = 131 - Bug: button No doesn't work! (script_dynamicMenu_disembark_button_2_actions)
menu_ship_reembark = 132
menu_center_reports = 133

menu_price_and_production = 134
menu_town_trade = 135
menu_town_trade_assessment_begin = 136

menu_town_trade_assessment = 137 - does not show a complete list of items found
menu_sneak_into_town_suceeded = 138
menu_sneak_into_town_caught = 139
menu_sneak_into_town_caught_dispersed_guards = 140

menu_sneak_into_town_caught_ran_away = 141 - need check s11
menu_enemy_offer_ransom_for_prisoner = 142
menu_training_ground = 143
menu_training_ground_selection_details_melee_1 = 144

menu_training_ground_selection_details_melee_2 = 145 - may be improperly offered sparring opponents
menu_training_ground_selection_details_mounted = 146
menu_training_ground_selection_details_ranged_1 = 147
menu_training_ground_selection_details_ranged_2 = 148
menu_training_ground_description = 149

menu_training_ground_training_result = 150 - partially
menu_marshall_selection_candidate_ask = 151
menu_captivity_avoid_wilderness = 152

menu_captivity_start_wilderness = 153 (skipped - no text)
menu_captivity_start_wilderness_surrender = 154 (skipped - no text)
menu_captivity_start_wilderness_defeat = 155
menu_captivity_start_castle_surrender = 156 (skipped - no text)
menu_captivity_start_castle_defeat = 157 (skipped - no text)
menu_captivity_start_under_siege_defeat = 158
menu_captivity_wilderness_taken_prisoner = 159

menu_captivity_wilderness_check = 160 (skipped - no text)
menu_captivity_end_wilderness_escape = 161
menu_captivity_castle_taken_prisoner = 162
menu_captivity_rescue_lord_taken_prisoner = 163

menu_captivity_castle_check = 164 (skipped - no text)
menu_captivity_end_exchanged_with_prisoner = 165
menu_captivity_end_propose_ransom = 166
menu_captivity_castle_remain = 167
menu_kingdom_army_quest_report_to_army = 168
menu_kingdom_army_quest_messenger = 169
menu_kingdom_army_quest_join_siege_order = 170
menu_kingdom_army_follow_failed = 171
menu_invite_player_to_faction_without_center = 172
menu_invite_player_to_faction = 173

menu_invite_player_to_faction_accepted = 174 - need check s1
menu_question_peace_offer = 175
menu_notification_truce_expired = 176
menu_notification_feast_quest_expired = 177
menu_notification_sortie_possible = 178
menu_notification_casus_belli_expired = 179
menu_notification_lord_defects = 180
menu_notification_treason_indictment = 181
menu_notification_border_incident = 182

menu_notification_player_faction_active = 183
menu_minister_confirm = 184 (s12 problem)
menu_notification_court_lost = 185 need check
menu_notification_player_faction_deactive = 186
menu_notification_player_wedding_day = 187
menu_notification_player_kingdom_holds_feast = 188
menu_notification_center_under_siege = 189
menu_notification_village_raided = 190
menu_notification_village_raid_started = 191
menu_notification_one_faction_left = 192
menu_notification_oath_renounced_faction_defeated = 193
menu_notification_center_lost = 194
menu_notification_troop_left_players_faction = 195
menu_notification_troop_joined_players_faction = 196
menu_notification_war_declared = 197
menu_notification_peace_declared = 198
menu_notification_faction_defeated = 199
menu_notification_rebels_switched_to_faction = 200
menu_notification_player_should_consult = 201
menu_notification_player_feast_in_progress = 202

menu_notification_lady_requests_visit = 203 (need check s11)
menu_garden = 204
menu_kill_local_merchant_begin = 205

menu_debug_alert_from_s65 = 206
menu_auto_return_to_map = 207
menu_bandit_lair = 208
menu_notification_player_faction_political_issue_resolved = 209

menu_notification_player_faction_political_issue_resolved_for_player = 210 (need check)
menu_start_phase_2_5 = 211
menu_start_phase_3 = 212 (need check)
menu_start_phase_4 = 213 (need check)
menu_lost_tavern_duel = 214
menu_establish_court = 215
menu_notification_relieved_as_marshal = 216

Mini games: (new in v0.72)
+ Another way to learn words without straining.. (Kanji Mahjong for JP-EN mode only). Very helps when you start a new learning level. Box with the game can be bought from the bookseller, to find in a tavern or ask the tavernkeeper using "mahjong" or "mahjongu onegai shimasu" commands. Game in the tavern worth 10 denars per round. In case of victory, the player receives a reward
(bet * 2) + record_time_bonus
+ Available 2 game modes: free and classic. In the first, you should choose a pair of tiles in garbage. Second, it is necessary to disassemble the whole scheme in pairs, with the tiles blocked left, right and top.
+ When you select a pair, the tiles are removed from the table, in their place a tooltip will appear:
kanji (reading) - translation
+ Mahjong schemes are in a separate file and can be easily changed.

Damage system: (new in v0.72)
The strength of the mental strike is calculated as follows:
damage = max (swing, trust) + player_lvl + player_INT
(max_weapon_damage + player_level + INT_value)​
When applying such damage to enemy agent his name is changed. With the passage of critical damage - the power of the damage is doubled.
+ Work on the implementation of particle-effects impact.

Install:
It is assumed you know how to compile a mod using ModMerger.
Archive contain Modmerger pack, so installed modmerger is must (http://www.mbrepository.com/file.php?id=2151).
1) In MB Warband folder copy mod Native in a separate folder and rename.
2) Copy there brf-resources, textures, sounds from the archive.
3) Copy the source code of StudyMod to the module system folder.
4) Edit the necessary files (read the readme in the archive).
5) Build a new module, select it in the start menu.
6) Starting a new game, select learning and native languages​​.


Bugs:
there is, but not critical.

Development:
+ rubik - mechanism of displaying object over the head agent;
+ shcherbyna - main code.
+ join us.

Feedback:
Write and ask .. we will read together. Want to emphasize the fact that the development of the mod is not limited to changes textures, scenes, animations .. although the creation of the environment of course the same is the first step =)

Signatures:
Gambino said:
Also, this is a simple signature for this mod if anyone wants to use it, I want to use it and support the mod atleast.




Code:
[URL=http://forums.taleworlds.com/index.php/topic,299919.0.html][IMG]http://i.imgur.com/2PV3Idn.png?1[/IMG][/URL]

[quote author=Shcherbyna]
I learn foreign words in the game

Code:
[URL=http://forums.taleworlds.com/index.php/topic,299919.0.html][IMG]https://www.dropbox.com/s/i8axbd8kq3inudl/forum_logo.png?dl=1[/IMG][b]I learn foreign words in the game[/b][/URL]
 
v.0.68.35
Shcherbyna said:
Detected critical bug ejection from the game.
+ Fixed. Rewrote update mechanism for names of dying agents.
+ Merget two variants of damage system. Thus there is a chance to hit critical damage. Crit possibility is depends on INT level.
+ Start to porting game menus:
  1) Notification of peace/war
  2) Camp (without submenu)
  3) Town (without submenu)

 
ver.0.69.23

This release is due to the need to fix the detected errors, hindering the process of battle in game. Raw dynamic menus can be turned off in the config of ModMerger.

+ Fixed battle errors.
- Not fixed. Names of killed agents remain on the screen for tornament and some village missions.
+ Continues porting game menus...
  Village Sub Menu
+ village_hostile_action (buggy)
+ village_take_food_confirm (trouble with "$auto_enter_menu_in_center")
+ village_take_food
+ village_start_attack
+ village_loot_no_resist
+ village_loot_complete
+ recruit_volunteers


 
ver.0.69.24

+ Has been formed an universal constructor for the general menus. This allowed not to write the presentations for each separate menu, but just to substitute a pattern with similar data such as: startup  menu script, picture, names of buttons (0-25), the conditions of their creation, button's action.. Also the constructor count the number of buttons and, if necessary, puts them in a container with scrolling.
+ Menu Simple Encounter
+ encounter_retreat_confirm
+ encounter_retreat
+ order_attack_begin
+ order_attack_2
+ battle_debrief
- [bug] village allows himself to enemy faction loot without a fight.


 
this, my friend, is the most unique idea for a mod I've ever seen. congratulations and ill be happy to play this mood ASAP.
 
Also, this is a simple signature for this mod if anyone wants to use it, I want to use it and support the mod atleast.




Code:
[URL=http://forums.taleworlds.com/index.php/topic,299919.0.html][IMG]http://i.imgur.com/2PV3Idn.png?1[/IMG][/URL]
 
Thank you Gambino, added to main post.
How about a little editing =))



+ Dynamic Menu Progress bar added to main post.

Also, module require next targets support:
+ new animation for mental strike (spells)
+ particle effects for mental strike
+ damage system (solved):
   
module_pyscripts.py said:
# Creates a new slots for each weapon and sets it by damage value from items_list
def set_weapon_damage_slots():
  inject_list = []
  for item in xrange(len(items)):  # do a loop in the list items / Пройти весь список и прописать каждому значение повреждения в слот
      item_name = items[item][0]
      #swing_damage = get_swing_damage(items[item][6]) % 256 # (damage type = damage / 256, damage_value = damage % 256)
      #thrust_damage = get_thrust_damage(items[item][6]) % 256
      #if (swing_damage>0 or thrust_damage>0): # add damage_slots only for thous who have any damage / добавлять слоты только тем вещам, которые имеет урон
      inject_list.append((item_set_slot, item, slot_swing_damage, get_swing_damage(items[item][6])))
      inject_list.append((item_set_slot, item, slot_thrust_damage, get_thrust_damage(items[item][6])))
      #print "item: %d | swing_damage: %d| thrust_damage: %d | %s" % (item, swing_damage, thrust_damage, item_name) #debug
  return inject_list[:]
module_scripts.py said:
# "script_init_weapon_damage_slots" - sets all weapon damage slots / Для каждого оружия создает слоты куда записывает значения swing и thrust уронов.
# INPUT: none
# OUT: none

  ("init_weapon_damage_slots", set_weapon_damage_slots()),
 
# "script_get_weapon_damage_slots"
# INPUT: none
# OUT: none

  ("get_weapon_damage_slots",
    [
      (try_for_range, ":weapon", all_items_begin, all_items_end),
        (str_store_item_name, s50, ":weapon"),
        (item_get_slot, ":swing_damage", ":weapon", slot_swing_damage), # else, get weapon swing/thrust damage / иначе, взять рубящий\колющий уроны оружия в руках
        (store_mod, reg28, ":swing_damage", 256),
        (item_get_slot, ":thrust_damage", ":weapon", slot_thrust_damage),
        (store_mod, reg29, ":thrust_damage", 256),
        (display_message, "@ weapon: {s50}, swing_damage: {reg28}, thrust_damage: {reg29}"),
      (try_end),
  ]),
module_presentations.py said:
("studyMod_startMenu", 0, mesh_load_window,[
    (ti_on_presentation_load,
      [
....
...
# Init weapon damage slots for StudyMod Damage System
      (call_script, "script_init_weapon_damage_slots"),
    - possibility of a crit or miss, how better?
+ dynamic translated menu

Any way Language Module must have Add-on format, that add possibility to learn foreign words/expressions in game.
 
Back
Top Bottom