Created
July 23, 2020 09:57
-
-
Save iamevn/b50b923292b30d41352439750b044cb7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def read_word(f):\n", | |
| " \"\"\"f is open and seeked to the length byte at the \n", | |
| " start of a word, read that word and return it (decoded as SHIFT-JIS)\n", | |
| " advances f to the next length\"\"\"\n", | |
| " length = f.read(1)[0]\n", | |
| " #print(length)\n", | |
| " b = f.read(length)\n", | |
| " w = b.decode('shift-jis')\n", | |
| " #print(w)\n", | |
| " assert(f.read(3) == b'\\x00\\x00\\x00')\n", | |
| " assert(w)\n", | |
| " assert(not '\\x00' in w)\n", | |
| " return w\n", | |
| "\n", | |
| "def read_words(f):\n", | |
| " \"\"\"f is open and seeked to the wordset length byte\n", | |
| " returns a list of words in that set of words or [] if it's the end\"\"\"\n", | |
| " length = f.peek(1)[0] * 2\n", | |
| " if length == 0:\n", | |
| " return False\n", | |
| " else:\n", | |
| " f.seek(4,1)\n", | |
| " return [read_word(f=f) for _ in range(length)]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def read_wordlist(f):\n", | |
| " wordlist = []\n", | |
| "\n", | |
| " last = read_words(f=f)\n", | |
| " while last:\n", | |
| " wordlist.append(last)\n", | |
| " try:\n", | |
| " last = read_words(f=f)\n", | |
| " except IndexError:\n", | |
| " last = False\n", | |
| "\n", | |
| " return wordlist" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def find_next_section(f, sep=27):\n", | |
| " # this could be cleaner but the files are short enough to just brute force this\n", | |
| " count = 0\n", | |
| " n = 0\n", | |
| " while True:\n", | |
| " s = f.peek(8)[:8]\n", | |
| " n += 1\n", | |
| " #if n % 100 == 0:\n", | |
| " #if count > 1:\n", | |
| " # print(f'{f.tell()}, {s}, ({count})')\n", | |
| " if len(s) == 0: return False\n", | |
| " elif s[0] == 0x00:\n", | |
| " count += 1\n", | |
| " elif count >= sep:\n", | |
| " return True\n", | |
| " else:\n", | |
| " count = 0\n", | |
| " f.seek(1, 1)\n", | |
| "\n", | |
| "def find_section(f, which='wordlists'):\n", | |
| " # tries to parse blocks of data as wordlists until all are found in the file\n", | |
| " # there is either one or two lists of keys and a list of lists of words\n", | |
| " f.seek(0)\n", | |
| " words = []\n", | |
| " lists = []\n", | |
| " while True:\n", | |
| " if not find_next_section(f=f): break\n", | |
| " try:\n", | |
| " posn = f.tell()\n", | |
| " words = read_wordlist(f=f)\n", | |
| " except:\n", | |
| " pass\n", | |
| " else:\n", | |
| " if words and isinstance(words[0], list):\n", | |
| " lists.append((posn, words))\n", | |
| " # last section is always the wordlists\n", | |
| " return lists[-1]\n", | |
| " \n", | |
| "def find_info(f):\n", | |
| " # returns (Genre, Title, Artist)\n", | |
| " f.seek(0)\n", | |
| " find_next_section(f, sep=8)\n", | |
| " return read_word(f), read_word(f), read_word(f)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def pre_words_post(f):\n", | |
| " # file f split into three sections\n", | |
| " # middle section could be replaced by the result of buildWordlists\n", | |
| " offset, _ = find_section(f, which='wordlists')\n", | |
| " f.seek(0)\n", | |
| " pre = f.read(offset)[:offset]\n", | |
| " f.seek(offset)\n", | |
| " read_wordlist(f)\n", | |
| " size = f.tell() - offset\n", | |
| " \n", | |
| " post = f.read()\n", | |
| " \n", | |
| " f.seek(offset)\n", | |
| " wordbytes = f.read(size)[:size]\n", | |
| " \n", | |
| " return pre, wordbytes, post" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def buildWordlists(wordlists):\n", | |
| " # returns bytes for given wordlists\n", | |
| " b = bytearray()\n", | |
| " for n, wordlist in enumerate(wordlists):\n", | |
| " if len(wordlist) % 2 == 1:\n", | |
| " raise ValueError(f'{n}th wordlist invalid. must have even number of words. has {len(wordlist)}: {wordlist}')\n", | |
| " b.append(len(wordlist) // 2)\n", | |
| " b.extend([0, 0, 0])\n", | |
| " for word in wordlist:\n", | |
| " encoded = word.encode('shift-jis')\n", | |
| " b.append(len(encoded))\n", | |
| " b.extend(encoded)\n", | |
| " b.extend([0, 0, 0])\n", | |
| " return bytes(b)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "files = [\n", | |
| " # pop'n easy first song\n", | |
| " 'N01.BMD.bak',\n", | |
| " # hard classic\n", | |
| " 'E10.BMD',\n", | |
| " # how about beatmania?\n", | |
| " '~09_NahaGacho.bmd',\n", | |
| " # and beatmania best\n", | |
| " 'E10B.bmd',\n", | |
| "]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "True" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "with open(files[0], 'rb') as f:\n", | |
| " contents = f.read()\n", | |
| " pre, wbytes, post = pre_words_post(f)\n", | |
| "\n", | |
| "from io import BufferedReader, BytesIO\n", | |
| "with BufferedReader(BytesIO(wbytes)) as f:\n", | |
| " w = read_wordlist(f)\n", | |
| "\n", | |
| "pre+buildWordlists(w)+post == contents" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "#### Note:\n", | |
| "Be careful to keep the number of wordlists the same and give each wordlist an even number of words.\n", | |
| "They don't need to have the same number of words and the game seems to randomly pick words from\n", | |
| "each list in sequence for the typing sections.\n", | |
| "\n", | |
| "I would recommend testing words ingame as some kana (notably v's) don't work and romaji don't work either.\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "Below are a few wordlists from the game:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "('DANCE', 'Hi-Tekno', 'Hi-Tekno')\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[['ๅคงไบบ', 'ใใจใช', 'ๆฅฝๅจ', 'ใใฃใ', 'ๆถ', 'ใชใฟใ ', '้ณ', 'ใใจ'],\n", | |
| " ['ๆคๆป', 'ใใใ', 'ใในใ', 'ใฆใใจ', '็ ่', 'ใใฐใ', '้', 'ใฏใ'],\n", | |
| " ['่ฅ', 'ใใ', '่ฑ', 'ใฏใช', '็ซ', 'ใญใ', 'ในใชใซ', 'ใใใ'],\n", | |
| " ['็ฉด', 'ใใช', 'ใฑใผใญ', 'ใใผใ', '็ฉบ', 'ใใ', '้', 'ใใฟ'],\n", | |
| " ['ๅ ', 'ใฒใใ', '้ฃใถ', 'ใจใถ', '้ณฅ', 'ใจใ', 'ๆใ', 'ใใใ'],\n", | |
| " ['ๆดใ', 'ใฏใ', '้ขจ', 'ใใ', 'ใญใใบ', 'ใใฃใ', 'ใซใใผ', 'ใใฐใผ'],\n", | |
| " ['ๅฝผ', 'ใใ', 'ใใซ', 'ใพใ', 'ใใ', 'ใฐใค'],\n", | |
| " ['ใใณใ', 'ใดใใก', 'ๅ', 'ใใ', '้ด', 'ใใค'],\n", | |
| " ['ๅธฝๅญ', 'ใผใใ', '่ณ', 'ใฎใ', 'ไป', 'ใใพ'],\n", | |
| " ['ๅคๅญฃ', 'ใใ', 'ๅฌๆ', 'ใจใใ', 'ใฐใ', 'ใใฟ'],\n", | |
| " ['ใชใใณ', 'ใใผใ', 'ใใซ', 'ในใ', 'ๆ', 'ใใ'],\n", | |
| " ['ๆผ', 'ใฒใ', 'ๅค', 'ใใ', 'ๆจๆฅ', 'ใใฎใ'],\n", | |
| " ['ไปๆฅ', 'ใใใ', 'ๆ', 'ใใ', '้ช', 'ใใ'],\n", | |
| " ['้จ', 'ใใ', '่ตค', 'ใใ', '้', 'ใใ'],\n", | |
| " ['้ป่ฒ', 'ใใใ', '้ป', 'ใใ', '็ฝ', 'ใใ'],\n", | |
| " ['็ท', 'ใฟใฉใ', 'ใทใฃใ', 'ใใใค', '่ก', 'ใพใก'],\n", | |
| " ['ใชใผใฉ', 'ใใผใ', 'ใฝใใ', 'ใใตใจ', 'ใใผใ', 'ใฏใผใฉ'],\n", | |
| " ['ใกใข', 'ใใ', '็ๅฎ', 'ใใ', 'ๅญๆฉ', 'ใใ']]" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "with open(files[0], 'rb') as f:\n", | |
| " print(find_info(f))\n", | |
| " offset, wordlists = find_section(f=f)\n", | |
| "wordlists" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "('CLASSIC 2', 'R.C.', 'Waldeus von dovjak')\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[['่็ตกใฎใชใไผ่ฉฑ',\n", | |
| " 'ใฟใใใใใฎใชใใใใ',\n", | |
| " 'ๅคงๅพกๆ็ปๅ ด',\n", | |
| " 'ใใใใใใจใใใใ',\n", | |
| " 'ๅฐๆฅใ่ฆๆฎใใ',\n", | |
| " 'ใใใใใใใฟใใใ',\n", | |
| " '็คพไผ็ๅฝฑ้ฟ',\n", | |
| " 'ใใใใใฆใใใใใใ'],\n", | |
| " ['ไธญๅคฎๅ้ขๅธฏ',\n", | |
| " 'ใกใ ใใใใถใใใใ',\n", | |
| " 'ไบๅไธไธ็ด',\n", | |
| " 'ใซใใ ใใใฃใใใ',\n", | |
| " 'ๅฟใ้ฃใๅบๆฅไบ',\n", | |
| " 'ใใใใใใใงใใใจ',\n", | |
| " '็ๆณ้ทใๆฑใใ',\n", | |
| " 'ใใใใใใใใใจใใ',\n", | |
| " 'ใซใซใใฃใผใทใงใใฏ',\n", | |
| " 'ใใใกใใผใใใฃใ'],\n", | |
| " ['ๆ ๅ็ทจ้',\n", | |
| " 'ใใใใใธใใใ ใ',\n", | |
| " '็ฐๅธธ็พ่ฑก',\n", | |
| " 'ใใใใใใใใใ',\n", | |
| " 'ๆง้ ็ๆฌ ้ฅ',\n", | |
| " 'ใใใใใฆใใใฃใใ',\n", | |
| " '่ถ ่ฝๅ่ ',\n", | |
| " 'ใกใใใฎใใใใใใ',\n", | |
| " 'ๅฎๅฎ้็บๆไปฃ',\n", | |
| " 'ใใกใ ใใใใฏใคใใ ใ'],\n", | |
| " ['่ธๆฐๆฉ้ข่ป',\n", | |
| " 'ใใใใใใใใใ',\n", | |
| " 'ไผๅ ด่จญๅถ',\n", | |
| " 'ใใใใใใใคใใ',\n", | |
| " '่ป้่กๆไธ',\n", | |
| " 'ใใฉใใใใใใใใ',\n", | |
| " 'ๅคชๅนณๆด้ซๆฐๅง',\n", | |
| " 'ใใใธใใใใใใใใค',\n", | |
| " 'ๅ ฌ้่จ่ซไผ',\n", | |
| " 'ใใใใใจใใใใใ'],\n", | |
| " ['ๅฐ็ฌ ๅ่ซธๅณถ',\n", | |
| " 'ใใใใใใใใจใ',\n", | |
| " 'ใใคใธใฃใใฏ็บ็',\n", | |
| " 'ใฏใใใใฃใใฏใฃใใ',\n", | |
| " '่ฆ็ดใใๆฑใใ',\n", | |
| " 'ใฟใชใใใใใจใใ',\n", | |
| " 'ๅฐ้ไบ็ฅ้ฃ็ตกไผ',\n", | |
| " 'ใใใใใกใใใใใใ'],\n", | |
| " ['ใทใณใฌใผใฝใณใฐใฉใคใฟใผ',\n", | |
| " 'ใใใใผใใใใใใใผ',\n", | |
| " 'ใคใใณใ้ๅฌไธญ',\n", | |
| " 'ใในใใจใใใใใกใ ใ',\n", | |
| " 'ใใคใชใใฏใใญใธใผ',\n", | |
| " 'ใฐใใใฆใใฎใใใผ',\n", | |
| " '้ณดใ็ฉๅ ฅใใฎในใฟใผใ',\n", | |
| " 'ใชใใใฎใใใฎใใใผใจ'],\n", | |
| " ['็ฑณๅฝ่ฅฟๆตทๅฒธ',\n", | |
| " 'ในใใใใซใใใใใ',\n", | |
| " '้ไนพๆงใใใญใฅใข',\n", | |
| " 'ใใฃใใใใใพใซใใ ใ',\n", | |
| " 'ๆฐ็ๆดปใฎในใฟใผใ',\n", | |
| " 'ใใใใใใคใฎใใใผใจ',\n", | |
| " 'ๅฐ่ชฌใฎๆฟใ็ตต',\n", | |
| " 'ใใใใใคใฎใใใ'],\n", | |
| " ['่ช็ๆฅใใฌใผใณใ',\n", | |
| " 'ใใใใใใณใทใใใใจ',\n", | |
| " 'ใชใผใใณใญใฃใณใใน',\n", | |
| " 'ใใผใทใใใใใฑใ',\n", | |
| " 'ใขใผใใณใฐใตใผใใน',\n", | |
| " 'ใใผใซใใใใผใณใ',\n", | |
| " '็คพไผ็็ซๅ ด',\n", | |
| " 'ใใใใใฆใใใกใฐ'],\n", | |
| " ['ใญใณใใณ็ด่ผธๅ ฅ',\n", | |
| " 'ใใใฉใใกใใใใซใ ใ',\n", | |
| " 'ๅๅไพกๅคใ้ซใ',\n", | |
| " 'ใใใใฒใใใกใใใใ',\n", | |
| " 'ๆต่กใซๆตใใใ',\n", | |
| " 'ใใ ใใใใซใชใใใใ',\n", | |
| " 'ใใกใณใฏใฉใๅ ฅไผ',\n", | |
| " 'ใตใใใใใถใซใ ใใใ'],\n", | |
| " ['ใใฉใคใใผใใช็ฉบ้',\n", | |
| " 'ใทใใในใผใจใชใใใใ',\n", | |
| " '่ช็ฑๆฐใพใพใช็ๆดป',\n", | |
| " 'ใใใใใพใพใชใใใใค',\n", | |
| " 'ๅ่ถใใใใฏใใใฏ',\n", | |
| " 'ใใใใคใใใฆใใซใฃใ',\n", | |
| " 'ใใคใปใณในใงใใคใใญใผ',\n", | |
| " 'ใฏใใใใใงใฏใใถใใผ'],\n", | |
| " ['ใใฃในใซใฆใณใใทใงใใ',\n", | |
| " 'ใงใใใใใใจใใใฃใท',\n", | |
| " 'ใใธใฅใขใซใคใณใใฏใ',\n", | |
| " 'ใณใใ ใใใใใฑใใจ',\n", | |
| " '่กๆ็ๆ ๅ',\n", | |
| " 'ใใใใใใฆใใใใใ',\n", | |
| " 'ๅฎใใๅฝ้ธ',\n", | |
| " 'ใใใใใใจใใใ'],\n", | |
| " ['ๆ็ใใใใฆใใ',\n", | |
| " 'ใใใกใใใใใใฆใใ',\n", | |
| " 'ๅฏพๆฆๅใฒใผใ ',\n", | |
| " 'ใใใใใใใใผใ',\n", | |
| " 'ๅทจๅ ใฎๅไฝ',\n", | |
| " 'ใใใใใใฎใใฃใใ',\n", | |
| " '็ช็ถใฎๅธญๆฟใ',\n", | |
| " 'ใจใคใใใฎใใใใ'],\n", | |
| " ['็ตๆธๆ่ฆใใชใ',\n", | |
| " 'ใใใใใใใใใใชใ',\n", | |
| " 'ๆ่ญฐใใฌใญๆฎบๅฐ',\n", | |
| " 'ใใใใฏใใใใฃใจใ',\n", | |
| " '่ฑ็ฅใฎ้ใใๅฐฝใใ',\n", | |
| " 'ใใใกใฎใใใใใคใใ',\n", | |
| " 'ๆใใใใๅฎข',\n", | |
| " 'ใพใญใใใใใใใ'],\n", | |
| " ['ๅปๅฐใซ้ฃใฐใใใ',\n", | |
| " 'ใธใใกใซใจใฐใใใ',\n", | |
| " '่จ่ใฎ้ญ่กๅธซ',\n", | |
| " 'ใใจใฐใฎใพใใ ใคใ',\n", | |
| " 'ในใฟใธใขใ ๆฑบๆฆ',\n", | |
| " 'ใใใใใใใฃใใ',\n", | |
| " 'ๆ่ ใใญใใฅใผใตใผ',\n", | |
| " 'ใณใใใใทใใงใ ใผใใผ']]" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "with open(files[1], 'rb') as f:\n", | |
| " print(find_info(f))\n", | |
| " offset, wordlists = find_section(f=f)\n", | |
| "wordlists" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "('?????', 'NhahaGachooon', 'Hayachiya Shinpey')\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[['ใขใผใคใงใผใชใผใคใงใผ',\n", | |
| " 'ใใผใใใผใใผใใใผ',\n", | |
| " 'ใขใคใใคใใผใฆใผใฆใขใฆใผ',\n", | |
| " 'ใใใพใใฟใผใใผใใใใผ',\n", | |
| " '็ฑใใใผใใๅปใฟ่พผใ',\n", | |
| " 'ใใคใใณใผใจใใใใฟใใ',\n", | |
| " 'ใใใใใฏในใใใพใใใ',\n", | |
| " 'ใใใใใฏในใใใพใใใ',\n", | |
| " '็ฌใๆญฉใใฐๆฃใซๅฝใใ',\n", | |
| " 'ใใฌใใใใใฐใผใใซใใใ',\n", | |
| " 'ใจใใชใใใฃใผใใใใผ',\n", | |
| " 'ใใถใใฐใงใใผใใใใผ',\n", | |
| " 'ใใกใใฃใฆใใกใใผใ',\n", | |
| " 'ใใกใใฃใฆใใกใใผใ',\n", | |
| " 'ๅฃใซ่ณใใ้ๅญใซ็ฎใใ',\n", | |
| " 'ใในใซใฟใฟใใใใใใใซใใใ',\n", | |
| " '่ฏ้บใซๆฑบใใในใฏใฉใใ',\n", | |
| " 'ใใใใซใใใใใใใฃใก',\n", | |
| " 'ใฎใฃใฉใชใผ้ใฎ่ฆ็ทใใใฅใ',\n", | |
| " 'ใใใใใผใใกใฎใใใใใใฅใ',\n", | |
| " 'ใญใฌใใใใฎใซใณใฏใใใ',\n", | |
| " 'ใใใใใใฎใซใใใใใ',\n", | |
| " 'ใฏใผใซใชใใฌใคใงๅ่ฒ ',\n", | |
| " 'ใใผใใชใทใใใงใใใใถ',\n", | |
| " 'ใฏใฉใใทใผใณใงใใณใใผใฏใณ',\n", | |
| " 'ใใใถใใผใใงใชใใฐใผใใ',\n", | |
| " 'ๅฟใไฝใใชใใฌใใทใฅ',\n", | |
| " 'ใใใใใใใ ใใใตใใฃใใ ',\n", | |
| " 'ๆธ่ฐท็้ใฎใฏใฉใใง',\n", | |
| " 'ใใถใใใใใใฎใใใถใง',\n", | |
| " 'ใฟใคใใผใฑใผใคใซใขใผใณ',\n", | |
| " 'ใใใซใผใใผใใใใผใ',\n", | |
| " 'ๆ ใฏ้้ฃใไธใฏๆ ใ',\n", | |
| " 'ใใณใฏใฟใกใฅใใใฏใชใใ',\n", | |
| " 'ใกใใ็ฉใใใฐๅฑฑใจใชใ',\n", | |
| " 'ใกใใใคใใใฐใใพใจใชใ',\n", | |
| " 'ใใฃใผใใชใฎใฃใฐใปใณใน',\n", | |
| " 'ใงใใผใทใชใใใใใใ',\n", | |
| " '้ฃใใง็ซใซๅ ฅใๅคใฎ่ซ',\n", | |
| " 'ใจใใงใฒใซใใใชใคใฎใใ',\n", | |
| " 'ใใใใใใใใใใ',\n", | |
| " 'ใชใฏใชใฏใชใฏใชใฏใชใฏ'],\n", | |
| " ['ไบบๆฐใใณใใผใฏใณใงใใ',\n", | |
| " 'ใซใใใชใใฐใผใใใงใใ',\n", | |
| " '่ฝใใ้ทนใฏใคใใ้ ใ',\n", | |
| " 'ใฎใใใใใใฏใคใใใใใ',\n", | |
| " 'ใชใผใใคใใใใใข',\n", | |
| " 'ใใผใกใใฃใฑใคใคใ',\n", | |
| " 'ใใ่จใใฐใใ่จใ',\n", | |
| " 'ใใใใใฐใใใใ',\n", | |
| " 'ๅฝใใๅ็ฐใฎใฏใฉใใซใผ',\n", | |
| " 'ใใใใพใใ ใฎใใใฃใใผ',\n", | |
| " 'ใใฃใฟใ ใใใผใใฃใฟใ ใใใผ',\n", | |
| " 'ใใฃใฟใ ใใใผใใฃใฟใ ใใใผ',\n", | |
| " 'ๅฅๅฆๅฅๅคฉ็ๆฉ่จถไธๆ่ญฐ',\n", | |
| " 'ใใฟใใใใฆใใคใพใใตใใ',\n", | |
| " 'ใใใใพใๅคฑ็คผใใพใใ',\n", | |
| " 'ใใใใพใใใคใใใใพใใ',\n", | |
| " 'ใใใใใงใใญใณใใใฆ',\n", | |
| " 'ใใใใใงใฉใใใใใฆ',\n", | |
| " 'ใ ใใผใใใงใญใใฏ',\n", | |
| " 'ใ ใใผใใกใใใฑใ',\n", | |
| " 'ใ ใฃใตใใ ใผใฉใใใใใฃใใใผใ',\n", | |
| " 'ใ ใฃใตใใ ใผใฉใใใใใฃใใใผใ',\n", | |
| " 'ใ ใใ ใใใ',\n", | |
| " 'ใ ใใ ใใใ',\n", | |
| " 'ๅตใฎ่ฆชใใใใจใณใกใใ',\n", | |
| " 'ใใพใใฎใใใใใดใใใกใใ',\n", | |
| " '็ฐๅ่ชฟๅธใซๅฎถใๅปบใค',\n", | |
| " 'ใงใใใใกใใใตใซใใใใใค',\n", | |
| " 'ใฉใชใใใฃใกใ ใผใญใ',\n", | |
| " 'ใฉใชใใใฃใกใ ใผใญใ',\n", | |
| " 'ใใใใ็ฅๆงใ ใ',\n", | |
| " 'ใใใใใใฟใใพใ ใ',\n", | |
| " '่ตคใใธใฃใ้ปใใธใฃใ',\n", | |
| " 'ใใใฑใใใพใใฑใใใพ',\n", | |
| " 'ใใใณใใใณใใณใใณ',\n", | |
| " 'ใฐใฐใใฐใฐใใฐใใฐใ']]" | |
| ] | |
| }, | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "with open(files[2], 'rb') as f:\n", | |
| " print(find_info(f))\n", | |
| " offset, wordlists = find_section(f=f)\n", | |
| "wordlists" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "('GABBAH', 'HELL SCAPER', 'L.E.D LIGHT-G')\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[['้ใ้ณดใใชใๆณ้ๅฏบ',\n", | |
| " 'ใใญใใชใใชใใปใใใ ใใ',\n", | |
| " 'ๅฐฑ่ทๆดปๅ็ฑ้ขจ',\n", | |
| " 'ใใ ใใใใใใคใฉใใญใฃใทใ',\n", | |
| " 'ใใฉใใใใฏ็ทด็ฟ่ฉฆๅ',\n", | |
| " 'ใฉใใพใกใฃใใใใใ ใใใใ',\n", | |
| " 'ใฒใจๅคใฎใขใดใกใณใใฅใผใซ',\n", | |
| " 'ใฒใจใชใคใฎใใใใใใกใ ใผใ',\n", | |
| " 'ๆฑๅ้ซ้ๆธๆป',\n", | |
| " 'ใจใใใใใใใใใ ใใใ'],\n", | |
| " ['ใใผใ ใกใคใใฏใใญใณใฐ้่ช',\n", | |
| " 'ใปใผใใใใฉใใฃใใใใใฃใ',\n", | |
| " 'ๅคงๆตทๅใฎๅฐใใชๅฎถ',\n", | |
| " 'ใใใใชใฐใใฎใกใใใชใใ',\n", | |
| " 'ใในใซใซใใผใใฏใชใผใ ใใผใบ',\n", | |
| " 'ใพใใใใฝใผใญใใใผใใกใผใ',\n", | |
| " 'ไบไบบไธ่ๅพ็ซถ่ตฐ',\n", | |
| " 'ใซใซใใใใใใใจใใใใใ',\n", | |
| " '้ญ ๅใใ็ปๅ ดไบบ็ฉ',\n", | |
| " 'ใฟใใใใใใจใใใใใใใถใค'],\n", | |
| " ['ไบบ้ข้ญ็บ่ฆใฌใผใใผ',\n", | |
| " 'ใใใใใใใฏใฃใใใใผใ ใผ',\n", | |
| " 'ใตใผใซในใฎๆฒไนใใฉใคใชใณ',\n", | |
| " 'ใใผใใใฎใใใใฎใใใใใ',\n", | |
| " '็ฃ้ใ่ตฐใใฉใคใใผ',\n", | |
| " 'ใใใฎใฟใกใใฏใใใใใ ใผ',\n", | |
| " 'ใใใซใฏใชใณๅๅฟๆคๆป',\n", | |
| " 'ใคในใใใใใฏใใฎใใใใ',\n", | |
| " 'ใตใณใใซใฏใฌใณใธใณใฐใฏใชใผใ ',\n", | |
| " 'ใใใทใใใใใใใใใใผใ'],\n", | |
| " ['็ฎ่ฆใพใๆ่จใฎ้ทใ้',\n", | |
| " 'ใใใพใใฉใใใฎใชใใใฏใ',\n", | |
| " 'ใตใใผใใผใฒใณใปใผใซ้ๅฌ',\n", | |
| " 'ใใพใผใฐใผใใใใผใใใใใ',\n", | |
| " 'ๅๅบใฎๆธกใๆนใใใฅใขใซ',\n", | |
| " 'ใใใใฎใใใใใใพใซใ ใใ',\n", | |
| " 'ๅฝ้็คพไผใใๅญค็ซใใ',\n", | |
| " 'ใใใใใใใใใใใใใคใใ'],\n", | |
| " ['้ธๆ็ๅฝใ่ ใใ',\n", | |
| " 'ใใใใ ใใใใใใใณใใใ',\n", | |
| " 'ๅๅญฃๆใ ใฎ้ฃๅ',\n", | |
| " 'ใใใใใใใฎใใใใใ',\n", | |
| " 'ๅณใใไฟฎ่กใซ่ใใ',\n", | |
| " 'ใใณใใใใ ใใใใซใใใ',\n", | |
| " 'ใทใณใฏใญใใคใบใในใคใใณใฐ',\n", | |
| " 'ใใใใใชใใใฉใใใฟใใ'],\n", | |
| " ['ในใญใฅใผใใใคใใณใฐใฎๅบ็ค',\n", | |
| " 'ใใใ ใผใฐใ ใใณใใใฎใใ',\n", | |
| " 'ๅฟ็ญใกใใปใผใธๅ็',\n", | |
| " 'ใใใจใใใฃใใผใใใใใ',\n", | |
| " 'ๅนณๅๆฐๆธฉใฎไธๆ',\n", | |
| " 'ใธใใใใใใใฎใใใใใใ',\n", | |
| " 'ไบไปถใฏ็พๅ ดใง่ตทใใฃใฆใใ',\n", | |
| " 'ใใใใฏใใใฐใงใใใฃใฆใใ'],\n", | |
| " ['ใ่ใฎใๆๅ ฅใใๆฌ ใใใชใ',\n", | |
| " 'ใใฏใ ใฎใใฆใใใใใใใชใ',\n", | |
| " 'ๆฐ่ฃฝๅๅคง้ๅ ฅ่ท',\n", | |
| " 'ใใใใใฒใใใใใใใซใ ใใ',\n", | |
| " 'ๆฐๅใฏใตใใผใใฑใผใทใงใณ',\n", | |
| " 'ใใถใใฏใใพใผใฐใใผใใใ',\n", | |
| " 'ๆๅคใชไบๅฎใๅพ ใกๅใใ',\n", | |
| " 'ใใใใชใใใคใใพใกใใใ'],\n", | |
| " ['ใใใใฏใผใฏใฎใใใใซใใผ',\n", | |
| " 'ใฑใฃใกใใผใใฎในใฃใฉใใฐใผ',\n", | |
| " 'ๅๅฟใซใใใใใฃใใใซ',\n", | |
| " 'ใใใใใซใใใใใฃใใใซ',\n", | |
| " 'ไธ่บๅคฉไธใซๅใ็ฅใใใ',\n", | |
| " 'ใใกใใใฆใใใซใชใใใใใ',\n", | |
| " '้ฑๆซใฎๅฐๆ ่ก',\n", | |
| " 'ใใ ใใพใคใฎใใใใใใใ'],\n", | |
| " ['ๅฟใใๅนธใใซใชใ',\n", | |
| " 'ใใใใใใใใใใซใชใ',\n", | |
| " '็ก็้ฃ้กใ็ชใใคใใใใ',\n", | |
| " 'ใใใชใใ ใใใคใใคใใใใ',\n", | |
| " 'ใณใณใใฃใทใงใณใๆดใใ',\n", | |
| " 'ใใใงใใใใใใจใจใฎใใ',\n", | |
| " 'ใธใฃใณใฌใชใขใณใใ ในใฟใผ',\n", | |
| " 'ใใใใใใใใฏใใใใผ'],\n", | |
| " ['ๅๆขๅตๆๅคงใฎใใณใ',\n", | |
| " 'ใใใใใฆใใใใ ใใฎใดใใก',\n", | |
| " 'ๆฉๅฏๆ ๅ ฑใ็ใฟใ ใ',\n", | |
| " 'ใใฟใคใใใใปใใใฌใใฟใ ใ',\n", | |
| " '้ฉๅคฉๅๅฐใชๅบๆฅไบ',\n", | |
| " 'ใใใใฆใใฉใใกใชใงใใใจ',\n", | |
| " 'ไบค้ๆณ่ฆใ้ตๅฎใใ',\n", | |
| " 'ใใใคใใปใใใใใ ใใใ ใใ'],\n", | |
| " ['ๆฅๆฌใฎไฝๅฎ ไบๆ ',\n", | |
| " 'ใซใปใใฎใใ ใใใใใใใ',\n", | |
| " 'ใใใใใๆ ชๅผ่ฌๅบง',\n", | |
| " 'ใใใใใใใถใใใใใ',\n", | |
| " 'ใในใฏใใใๅใใฝใณใณ',\n", | |
| " 'ใงใใใจใฃใทใใใฑใใใ',\n", | |
| " 'ใใๅญใง็ๅฎ็ชใใฆใใฎใ',\n", | |
| " 'ใใใใงใใใฐใใใฆใใฎใ'],\n", | |
| " ['ไธญๅคฎๆผ็ฎ่ฃ ็ฝฎ',\n", | |
| " 'ใกใ ใใใใใใใใใใก',\n", | |
| " 'ไบบ็จฎใฎๅฉๅ ',\n", | |
| " 'ใใใใ ใฎใใคใผ',\n", | |
| " 'ๆๆฐใช็ฎก็ไฝๅถ',\n", | |
| " 'ใใใใชใใใใใใใ',\n", | |
| " '้ ใๅฅๅบทใ ',\n", | |
| " 'ใใใถใใใใใใ '],\n", | |
| " ['ไผ็ตฑใๅใ็ถใๅฎๅ ',\n", | |
| " 'ใงใใจใใใใใคใใใใใใ',\n", | |
| " 'ๅคฉไธ็ตฑไธใพใงใใจๅฐใ',\n", | |
| " 'ใฆใใใจใใใคใพใงใใจใใใ',\n", | |
| " 'ๆซๆใจๆๅใฎ็ฉ่ช',\n", | |
| " 'ใใใคใจใใใใใฎใใฎใใใ',\n", | |
| " 'ๅคขใฎ็ซถๆผใๅฎ็พใใ',\n", | |
| " 'ใใใฎใใใใใใใใคใใใใ'],\n", | |
| " ['ๅ จๅฝๅถ่ฆใๆใ้ใใ',\n", | |
| " 'ใใใใใใใฏใใชใใจใใ',\n", | |
| " 'ๅๅใฎใใใชๆใฎใญใฌ',\n", | |
| " 'ใใฟใใใฎใใใชใใใฎใใ',\n", | |
| " 'ๆใใซ็ญใใ',\n", | |
| " 'ใญใใใใซใใใใ',\n", | |
| " '็ ฉๆฉใซๆใใใใ',\n", | |
| " 'ใผใใฎใใซใจใใใใ']]" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "with open(files[3], 'rb') as f:\n", | |
| " print(find_info(f))\n", | |
| " offset, wordlists = find_section(f=f)\n", | |
| "wordlists" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.7.1" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment