From 0d9eb20ce219b0a71b068122c8468500463cf472 Mon Sep 17 00:00:00 2001 From: Julia K Date: Sat, 13 Jun 2020 00:49:29 +0200 Subject: [PATCH 01/11] Support SDL <2.0.8 --- src/main.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index a803bd70..f2cc8bbb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -197,7 +197,9 @@ int main(int argc, char *argv[]) SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, "0"); SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, "0"); SDL_SetHint(SDL_HINT_VIDEO_HIGHDPI_DISABLED, "1"); +#if defined(__linux__) && SDL_VERSION_ATLEAST(2, 0, 8) SDL_SetHint(SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR, "0"); +#endif /* initialize SDL first */ if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER) < 0) From 64ad8dee193efe72b661b2897dc0597aa8560247 Mon Sep 17 00:00:00 2001 From: Speak2Erase2 <94400335+Speak2Erase2@users.noreply.github.com> Date: Mon, 15 Nov 2021 11:39:56 -0800 Subject: [PATCH 02/11] Update readme and conafile to make everything compilable --- README.md | 6 ++++-- conanfile.py | 35 ++++++++++++++++++----------------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 1a0f04ad..aa75f7ee 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,10 @@ Preface: This only supports Visual Studio on Windows and Xcode on macOS. Ubuntu With Python 3 and pip installed, install Conan via `pip3 install conan`. Afterwards, add the necessary package repositories by adding running the following commands: ```sh -conan remote add eliza "https://api.bintray.com/conan/eliza/conan" -conan remote add bincrafters "https://api.bintray.com/conan/bincrafters/public-conan" +conan remote add eliza https://rkevin.jfrog.io/artifactory/api/conan/eliza +conan remote add bincrafters https://bincrafters.jfrog.io/artifactory/api/conan/public-conan +conan config set general.revisions_enabled=1 +setx CONAN_USE_ALWAYS_SHORT_PATHS 1 (windows only) ``` Prepare to build *OneShot* by installing the necessary dependencies with Conan. diff --git a/conanfile.py b/conanfile.py index 53ea5f92..c23bd39d 100644 --- a/conanfile.py +++ b/conanfile.py @@ -40,9 +40,9 @@ class MkxpConan(ConanFile): "cygwin_installer:with_pear=False", ) - def build_requirements(self): - if tools.os_info.is_windows: - self.build_requires("cygwin_installer/2.9.0@bincrafters/stable") + #def build_requirements(self): + # if tools.os_info.is_windows: + # self.build_requires("cygwin_installer/2.9.0@bincrafters/stable") def requirements(self): if self.options.platform == "steam": @@ -58,28 +58,29 @@ def requirements(self): def configure(self): if tools.os_info.is_windows: # ??? - self.options.openal.shared = True + self.options["openal"].shared = True # Fix linker error in SDL_sound fork with SDL2 - self.options.sdl2.shared = True + self.options["sdl2"].shared = True def build_configure(self): - cmake = CMake(self) + cmake = CMake(self, msbuild_verbosity='minimal') if self.options.platform == "steam": cmake.definitions["STEAM"] = "ON" cmake.configure() cmake.build() def build(self): - if tools.os_info.is_windows: - cygwin_bin = self.deps_env_info["cygwin_installer"].CYGWIN_BIN - with tools.environment_append({ - "PATH": [cygwin_bin], - "CONAN_BASH_PATH": - os.path.join(cygwin_bin, "bash.exe") - }): - self.build_configure() - else: - self.build_configure() + #if tools.os_info.is_windows: + # cygwin_bin = self.deps_env_info["cygwin_installer"].CYGWIN_BIN + # with tools.environment_append({ + # "PATH": [cygwin_bin], + # "CONAN_BASH_PATH": + # os.path.join(cygwin_bin, "bash.exe") + # }): + # self.build_configure() + #else: + # self.build_configure() + self.build_configure() def package(self): self.copy("*", dst="bin", src="bin") @@ -106,4 +107,4 @@ def do_copy_deps(self, copy): root_package=dep, keep_path=True) if self.settings.build_type == "Debug": - copy("*.pdb", dst="bin", root_package=dep, keep_path=False) + copy("*.pdb", dst="bin", root_package=dep, keep_path=False) \ No newline at end of file From 502f570afdebb1ebac9c2e8702f817680dd3a5d9 Mon Sep 17 00:00:00 2001 From: GIR Date: Thu, 23 Dec 2021 22:32:50 -0600 Subject: [PATCH 03/11] More Open Localization Changes -externalizing safe puzzle text -adding support for "multi-line" pot format, since poedit seems to save long lines like that sometimes --- scripts/Puzzle_Safe.rb | 150 ++++----------------------------------- scripts/i18n_Language.rb | 39 ++++++++++ 2 files changed, 53 insertions(+), 136 deletions(-) diff --git a/scripts/Puzzle_Safe.rb b/scripts/Puzzle_Safe.rb index 9b6c5961..64149dd2 100644 --- a/scripts/Puzzle_Safe.rb +++ b/scripts/Puzzle_Safe.rb @@ -1,128 +1,13 @@ -DOCUMENT_TEXT = \ -"Dear ̷̡̠͇̼͉̻̦͓́͜͡ ̶̤̦̯͖͚͓̮͓̣̤̰͇́̕ ̴͜͏͈̭̦͙̦̯̟̗̜̼̠̦͘ ̶̶̡̢̲̱̜̹̰̻̘̪̳̫͕̙̕ ̡҉͎̦̙̰̻͉̜̝̺͚̻͇̞̺̦͓́ ̨̘̤̜̞͍̩̠̱̦̫͔̹̩͍͇̜͈́̕͞ͅͅ ̴̴̧̣͍̘̰̗̮̜̰̲̣̙̲̝͚̩̦̭̀͡ ̧̗͚̱͓̥̖͍͕̀ ̫̪͇̗̲̭̤͖̫̣͇͔͘ ͕͚͎̦͓̺̤̳̙̝͟ͅ ̸͉̫̘̩͙͖̼̣̞̞̰̼̞͕̀ ̶̗͓͎͓̦̙̭̳̻̫̥̯̱͚̦͔͍͙͟ ̶͜҉͏̞̺̙̥̦̪͇̯̳͍̬̱̰̘̺̠̀ ̴̼̘͇͎͙̘̜̀̀͞ ̴̢̹̥͚͎́̀\n\n\n" + \ -\ -\ -"Ţ̵̧̀ ̵͟͡ ̨҉͟͞h̡͜͠҉ ̷̛i̵̶̷͝ ̵̀͢͢s͜ ͟͏̷̵̡ ̨͟͡ ͏ ̷i҉̷̧̀ ̴̡̕s͠ ͟҉̞̭̼̞̯̰͈̘̟̣̜̰͖͙̼͙̙ ̨̳͚͍̤̦̪͔̲̬̻̯͍͉̥̦̱́ͅ ̫̪͇̗̲̭̤͖̫̣͇͔͘ ͕͚͎̦͓̺̤̳̙̝͟ͅ ̸͉̫̘̩͙͖̼̣̞̞̰̼̞͕̀T ̶̗͓͎͓̦̙̭̳̻̫̥̯̱͚̦͔͍͙͟ ̶͜҉͏̞̺̙̥̦̪͇̯̳͍̬̱̰̘̺̠̀ ̴̼̘͇͎͙̘̜̀̀͞ ̴̢̹̥͚͎̮͍̥̲̟͓̹̞̤̠͉̳̝̫́̀ͅ ̛̫͎̤̥̰̩̹̬͞ ͟҉̞̭̼̞̯̰͈̘̟̣̜̰͖͙̼͙̙A ̨̳͚͍̤̦̪͔̲̬̻̯͍͉̥́ͅu̦̱ ̵̸̹̼̞͚̹̟̺͎̜̖̦͠ ̴̢̳͔̻͕̮͇̱̀͡ͅͅ ̘̟̺̫̪̺͙̦̳̻͙̣̳́́͝͝ ̤͍͍̭͙̦̤͖͕̯͍̜́͜ͅr ̷̶̥̠͍͚͜͞ \n\n" + \ -\ -".̴͜/͞m̵̧.̧̨̧́͘.̶͘͝͡-̡̢͟-̷̧͠͝͝-̴̨͜͢y͡҉̧/̀͏͏͘.͜͞.҉̡̀͢-̡̧̕͜-̸͘͜f̷̧͘͜.̨́͜.͞͞.̴̶͞ message to you, and I'm afraid I must make it brief.\n" + \ -"I have left you a journal, part of which is written in a language that y̴̴͝/͟͝͝/̧͝͡-҉̵̸͡-͏͡o͏͜͝/̶̡̡/͡/͏̵̵̵̀/͏́́ų̨̕͘ ͟҉̴ ̧͠͏͝ ͘̕͟͠͞w̛͘͟͡͠/̵̢͠/̷́͞͞/҉̸̛̀͡ļ̴̕͢͡l̢̛̕͘͜ ̵̀͝͠n͝o̵͢͠=̵̷̨̡͡.̷̴̷̡̡.̷̵͘͟t̶̶̸̡ ̷́͜u͏̴́/̀/̵̧͢͞͡ǹd̀͟͠è͢҉̢̢-͠҉-̧҉̢-̶̧-̷̶͘s̵̶̷̢͠t̡̛a̧ ̶̴̧͝ ̷̸̡ ̸́͞ ͢ ̶̸̡̛͞n̢͠d̸̵ ҉̢͠͠a̴͡͠t̛͏̀͟͠ ̨̢͢͝f̷̵/̵̢̡̢/̧̢҉̵/̨͟͝r͏-̕͟͟͠=̢̕͘͟s̵͟͏t͞͞͡\n\n" + \ -\ -"H҉.̧̕.̸̵.̸̨̛̕͠-͘͜/̵͏҉/̸͘̕w̴͏͟e̷̢͜v̵͟͜͟(̢̕҉͟ę̸̀͜͞r̶̷͠͠҉ ̵̡͡ ̵̕͡͠ ҉̷ ̴̵̛͢,̧́҉ ͘͠͞ ͞͠ǫ̷̵̛̀n҉̡͡/̶̢/̵̸҉/̴̸̢́/̡͞/̀͘̕͢/̨͟c̵̷ ̨̛͘͡͞ ̨͏̛ ̷̶̡̧͜ ̵̨̀͜e̸̢͢͟ ̴͝y҉̸̛́/̵̵̶̨/̢͘/̴͟/͡=͢͏=̡͘=̷̢=҉̴̢/̸̧̧͞/̛̕/̶̨́͠/̶̨̧̕͜.̵.̴͝.̷̶͡u̧͝ ͘͘͜҉.̢̨̕͝͏ ̸̶̵̶̢ ̶̡ ̧̀c̀͢͞͞.͡.̴̶́͟͠.͞͏͘.̨̧͘͞.̴҉͞.̶ą̶͟͞n̕ r ̧͠ ead it and you will know what to do.\n\n" + \ -\ -"I have also ĺ̶̴͍̖̙͈̘͚͓̞͠é͕͔̤͚̺̲̱̫͢͜͠f̦̖͕̞͚̟͞t͟͜͏҉̖͚̺̲̞̳̹̠̥̙̳̳͙̦̣͞ ̗̜̠̰̼̕͟͞͡y̴͕͈͓̝͙̠̤͓͈̙̭͎̞͍̟͈̞͜ó̶̵̥̗͜ͅu̸̧̺̘̤̪̝̳̘͈̦͎̘͈̝̖̼͘ͅ ҉͍̯̣̺͔̮͉͇̘̮̗͉̣͖͖̪͟͞a̴͍̥̥̺̯̱̣̫̼̝̱̳̗̣̝̙̗͇͈͢͜ ̧̺̰̱̬̬̰̞̦̣̞̦̦̬̹͠m̴͇̤͇͔͉͘a̴͠͏̳̰̥̹̮͕̬̻̱̦̪̰̺̣̫͎̖̯̀s̵̢͙̩̖̻̝̣̘̤͖̞͇͔̳͈͈͉̦̕ͅͅķ̛̛͏̰̫̺͍̹͚̼̺͚́ͅ, b̷̢͘͞ ̛̀͘͢͝c̡͜҉ ̀͟͠ ̶̡͘͜ ͞҉͜͏ ̷͜͏ ̡́́͠ ̢ ̀͏ ̕͜ ̵̷͘ ̶̴̴̵ę̷̷͜ ̴̸҉̀Í͡ ̸͘͞ ̨͢͜͡͡ ́͢͏͢ ̢̡́́͞ ̷̶̸̀͝ ̸͠ ̶̷̧̀̀ ̵̵̵̢́ ̷̵̛͡ ̕͝ ̷̕͠҉̡ ̸k͟͞͝ǹ͠͏͡ ̶̸̶͢͠ ̨͟͞͡ ҉̶ ͟͏̸ ̢̕ ̴͡͠ ̴̕͡҉͢ ̴͟͟ ̶͞͠w҉͝ ̢̨͟ ̵̕ ̧̢͜͢ ̴̀̕͞ ̀͟͟͠ ̛͢͏ ̡̧̀̀ ̨̢͘ ̕͜y̢̨̛͘͟ǫ͡u҉͢͟͏͟ ̷̛̀ ̴̕͞ ̢͡ẃ̴̡͡͝ ͘͜͝͏ ̧̀͜͡ ̶͢ ̵̶̸̨ ̵ļ́͡͡҉ ̶̧ ̸͡͠͠ ̷͏̸̵͟ ̸̴̀̕͝ ̸͏̧̀͝ ́͢͠ ͏̧̡͟͝ ̡̕͢͟n̕̕̕ ̷̴͟͝͏ ̡̡͝ ́́ ͏͝͏͟ ͜͡͏̴̛e̷̸͏d̸̡͜ ̷́͜͝i̵̶̢̢̧t̴́.͜͢\n\n\n" + \ -\ -\ -"L͜o͞ok̵ ͠f̡or͢ a͝ ͟m͡e͟tal śaf҉e ̢ìn t̛h͞e͏ q͢u̕ar̵r͟y̢ t̢o the ̴e͢ast̡, ͘s͜om͝ew̢he̶re b͢et̀we͘en t͝he̡ ̛o̕cea̴n ̡and̶ ͞t͜he lo͡ok͟o͘u҉t̷ po̧įnt̨.̕\n"+\ -"The code you need is " - -DOCUMENT_POSTGAME_TEXT = "The code you need is " - -DOCUMENT_TEXT_ES = \ -"Me agrada s̵̨a̴̕͠l̀͞u̵d͡a̵r̨̨̧te ̷̡̠͇̼͉̻̦͓́͜͡ ̶̤̦̯͖͚͓̮͓̣̤̰͇́̕ ̴͜͏͈̭̦͙̦̯̟̗̜̼̠̦͘ ̶̶̡̢̲̱̜̹̰̻̘̪̳̫͕̙̕ ̡҉͎̦̙̰̻͉̜̝̺͚̻͇̞̺̦͓́ ̨̘̤̜̞͍̩̠̱̦̫͔̹̩͍͇̜͈́̕͞ͅͅ ̴̴̧̣͍̘̰̗̮̜̰̲̣̙̲̝͚̩̦̭̀͡ ̧̗͚̱͓̥̖͍͕̀ ̫̪͇̗̲̭̤͖̫̣͇͔͘ ͕͚͎̦͓̺̤̳̙̝͟ͅ ̸͉̫̘̩͙͖̼̣̞̞̰̼̞͕̀ ̶̗͓͎͓̦̙̭̳̻̫̥̯̱͚̦͔͍͙͟ ̶͜҉͏̞̺̙̥̦̪͇̯̳͍̬̱̰̘̺̠̀ ̴̼̘͇͎͙̘̜̀̀͞ ̴̢̹̥͚͎́̀\n\n\n"\ -\ -\ -"Esta es̷̸͢ m̕͞͡i̕ ̨͟͡ ͏ ̷i҉̷̧̀ ̴̡̕s͠ ͟҉̞̭̼̞̯̰͈̘̟̣̜̰͖͙̼͙̙ ̨̳͚͍̤̦̪͔̲̬̻̯͍͉̥̦̱́ͅ ̫̪͇̗̲̭̤͖̫̣͇͔͘ ͕͚͎̦͓̺̤̳̙̝͟ͅ ̸͉̫̘̩͙͖̼̣̞̞̰̼̞͕̀T ̶̗͓͎͓̦̙̭̳̻̫̥̯̱͚̦͔͍͙͟ ̶͜҉͏̞̺̙̥̦̪͇̯̳͍̬̱̰̘̺̠̀ ̴̼̘͇͎͙̘̜̀̀͞ ̴̢̹̥͚͎̮͍̥̲̟͓̹̞̤̠͉̳̝̫́̀ͅ ̛̫͎̤̥̰̩̹̬͞ ͟҉̞̭̼̞̯̰͈̘̟̣̜̰͖͙̼͙̙A ̨̳͚͍̤̦̪͔̲̬̻̯͍͉̥́ͅu̦̱ ̵̸̹̼̞͚̹̟̺͎̜̖̦͠ ̴̢̳͔̻͕̮͇̱̀͡ͅͅ ̘̟̺̫̪̺͙̦̳̻͙̣̳́́͝͝ ̤͍͍̭͙̦̤͖͕̯͍̜́͜ͅr ̷̶̥̠͍͚͜͞ m͞͡e͜ǹs͜a̵j̕͜e̵͜ y me temo que ha de ser breve. \n"\ -"Te hago entrega de un diario. Parte de él está escrito e҉n͟͏ ҉u͘͢n̡a l̀͢e͏͘͝n̷̷ģ͝ú͜҉a̷̛͏ ̢q̸͏u̵̕e̸ ̴̴͝/͟͝͝/̧͝͡-҉̵̸͡-͏͡o͏͜͝/̶̡̡/͡/͏̵̵̵̀/͏́́ų̨̕͘ ͟҉̴ ̧͠͏͝ ͘̕͟͠͞w̛͘͟͡͠/̵̢͠/̷́͞͞/҉̸̛̀͡ļ̴̕͢͡l̢̛̕͘͜ ̵̀͝͠n͝o̵͢͠=̵̷̨̡͡.̷̴̷̡̡.̷̵͘͟t̶̶̸̡ ̷́͜u͏̴́/̀/̵̧͢͞͡ǹd̀͟͠è͢҉̢̢-͠҉-̧҉̢-̶̧-̷̶͘s̵̶̷̢͠t̡̛a̧ ̶̴̧͝ ̷̸̡ ̸́͞ ͢ ̶̸̡̛͞n̢͠d̸̵ ҉̢͠͠a̴͡͠t̛͏̀͟͠ ̨̢͢͝f̷̵/̵̢̡̢/̧̢҉̵/̨͟͝r͏-̕͟͟͠=̢̕͘͟s̵͟͏t͞͞͡\n"\ -"S͏҉͝i̸̡͘͟n̢͠ ̨́͜e̷m̸̶̴͡b́̕á̢r̛͢g̡̛͝o҉̀͟͏̡, ̷͠҉ ̵̡͡ ̵̕͡͠ ҉̷ ̴̵̛͢,̧́҉ ͘͠͞ ͞͠ǫ̷̵̛̀n҉̡͡/̶̢/̵̸҉/̴̸̢́/̡͞/̀͘̕͢/̨͟c̵̷ ̨̛͘͡͞ ̨͏̛ ̷̶̡̧͜ ̵̨̀͜e̸̢͢͟ ̴͝y҉̸̛́/̵̵̶̨/̢͘/̴͟/͡=͢͏=̡͘=̷̢=҉̴̢/̸̧̧͞/̛̕/̶̨́͠/̶̨̧̕͜.̵.̴͝.̷̶͡u̧͝ ͘͘͜҉.̢̨̕͝͏ ̸̶̵̶̢ ̶̡ ̧̀c̀͢͞͞.͡.̴̶́͟͠.͞͏͘.̨̧͘͞.̴҉͞.̶ą̶͟͞n̕ ĺ̕͜ee̢͘ ͏͝y̵̵͟ ̶̛ sabrás qué hacer. \n"\ -"También te he d͟͞e̸̴j̡a͝d̡̢͠o͡҉ u̶n͏͘ą̵̧ ̸͜má̧͘s̴c̨̛a̧r͜͠á̷̕ b̷̢͘͞ ̛̀͘͢͝c̡͜҉ ̀͟͠ ̶̡͘͜ ͞҉͜͏ ̷͜͏ ̡́́͠ ̢ ̀͏ ̕͜ ̵̷͘ ̶̴̴̵ę̷̷͜ ̴̸҉̀Í͡ ̸͘͞ ̨͢͜͡͡ ́͢͏͢ ̢̡́́͞ ̷̶̸̀͝ ̸͠ ̶̷̧̀̀ ̵̵̵̢́ ̷̵̛͡ ̕͝ ̷̕͠҉̡ ̸k͟͞͝ǹ͠͏͡ ̶̸̶͢͠ ̨͟͞͡ ҉̶ ͟͏̸ ̢̕ ̴͡͠ ̴̕͡҉͢ ̴͟͟ ̶͞͠w҉͝ ̢̨͟ ̵̕ ̧̢͜͢ ̴̀̕͞ ̀͟͟͠ ̛͢͏ ̡̧̀̀ ̨̢͘ ̕͜y̢̨̛͘͟ǫ͡u҉͢͟͏͟ ̷̛̀ ̴̕͞ ̢͡ẃ̴̡͡͝ ͘͜͝͏ ̧̀͜͡ ̶͢ ̵̶̸̨ ̵ļ́͡͡҉ ̶̧ ̸͡͠͠ ̷͏̸̵͟ ̸̴̀̕͝ ̸͏̧̀͝ ́͢͠ ͏̧̡͟͝ ̡̕͢͟n̕̕̕ ̷̴͟͝͏ ̡̡͝ ́́ ͏͝͏͟ ͜͡͏̴̛e̷̸͏d̸̡͜ ̷́͜͝i̵̶̢̢̧t̴́.͜͢\n\n"\ -\ -"B̶u̧şca ̧u҉n͘a ̸caj͟a̵ ̨f͡u̵e͘r̕t́e de͠ mètal̨ en̡ ͝l͏a ͝mi͝n͞a̶ ̴s͠i̡t̡úad̢a ̕al ęst͡e, ̶e̕n u͡n͟ ̀pu̡nt̢o̶ ͝e̶ntr͏e ͢el o̷céano y ̵e͟l m̢i̷ra͢d͞oŕ. \n\n"\ -\ -"He aquí el código: " - -DOCUMENT_POSTGAME_TEXT_ES = "He aquí el código: " - -DOCUMENT_TEXT_PT_BR = \ -"Olá, ̷̡̠͇̼͉̻̦͓́͜͡ ̶̤̦̯͖͚͓̮͓̣̤̰͇́̕ ̴͜͏͈̭̦͙̦̯̟̗̜̼̠̦͘ ̶̶̡̢̲̱̜̹̰̻̘̪̳̫͕̙̕ ̡҉͎̦̙̰̻͉̜̝̺͚̻͇̞̺̦͓́ ̨̘̤̜̞͍̩̠̱̦̫͔̹̩͍͇̜͈́̕͞ͅͅ ̴̴̧̣͍̘̰̗̮̜̰̲̣̙̲̝͚̩̦̭̀͡ ̧̗͚̱͓̥̖͍͕̀ ̫̪͇̗̲̭̤͖̫̣͇͔͘ ͕͚͎̦͓̺̤̳̙̝͟ͅ ̸͉̫̘̩͙͖̼̣̞̞̰̼̞͕̀ ̶̗͓͎͓̦̙̭̳̻̫̥̯̱͚̦͔͍͙͟ ̶͜҉͏̞̺̙̥̦̪͇̯̳͍̬̱̰̘̺̠̀ ̴̼̘͇͎͙̘̜̀̀͞ ̴̢̹̥͚͎́̀\n\n\n"\ -\ -\ -"È̴̷̵͝s̕͠t͠͏͏a҉́̀̕̕ h̡͜͠҉ ̷̛i̵̶̷͝ ̵̀͢͢s͜ ͟͏̷̵̡ ̨͟͡ ͏ ̷i҉̷̧̀ ̴̡̕s͠ ͟҉̞̭̼̞̯̰͈̘̟̣̜̰͖͙̼͙̙ ̨̳͚͍̤̦̪͔̲̬̻̯͍͉̥̦̱́ͅ ̫̪͇̗̲̭̤͖̫̣͇͔͘ ͕͚͎̦͓̺̤̳̙̝͟ͅ ̸͉̫̘̩͙͖̼̣̞̞̰̼̞͕̀T ̶̗͓͎͓̦̙̭̳̻̫̥̯̱͚̦͔͍͙͟ ̶͜҉͏̞̺̙̥̦̪͇̯̳͍̬̱̰̘̺̠̀ ̴̼̘͇͎͙̘̜̀̀͞ ̴̢̹̥͚͎̮͍̥̲̟͓̹̞̤̠͉̳̝̫́̀ͅ ̛̫͎̤̥̰̩̹̬͞ ͟҉̞̭̼̞̯̰͈̘̟̣̜̰͖͙̼͙̙A ̨̳͚͍̤̦̪͔̲̬̻̯͍͉̥́ͅu̦̱ ̵̸̹̼̞͚̹̟̺͎̜̖̦͠ ̴̢̳͔̻͕̮͇̱̀͡ͅͅ ̘̟̺̫̪̺͙̦̳̻͙̣̳́́͝͝ ̤͍͍̭͙̦̤͖͕̯͍̜́͜ͅr ̷̶̥̠͍͚͜͞.̴͜/͞m̵̧.̧̨̧́͘.̶͘͝͡-̡̢͟-̷̧͠͝͝-̴̨͜͢y͡҉̧/̀͏͏͘.͜͞.҉̡̀͢-̡̧̕͜-̸͘͜f̷̧͘͜.̨́͜.͞͞.̴̶͞ ḿ̶e͘n̸͟s̵̢͞a̷̴͞g̷͟è͞m̵͝, e infelizmente preciso ser breve. \n"\ -"Eu lhe deixei um diário, que contém partes escritas numa ĺ͡í̧͘͢ńg͏ua҉͠ ̴q̶u̵͠e y̴̴͝/͟͝͝/̧͝͡-҉̵̸͡-͏͡o͏͜͝/̶̡̡/͡/͏̵̵̵̀/͏́́ų̨̕͘ ͟҉̴ ̧͠͏͝ ͘̕͟͠͞w̛͘͟͡͠/̵̢͠/̷́͞͞/҉̸̛̀͡ļ̴̕͢͡l̢̛̕͘͜ ̵̀͝͠n͝o̵͢͠=̵̷̨̡͡.̷̴̷̡̡.̷̵͘͟t̶̶̸̡ ̷́͜u͏̴́/̀/̵̧͢͞͡ǹd̀͟͠è͢҉̢̢-͠҉-̧҉̢-̶̧-̷̶͘s̵̶̷̢͠t̡̛a̧ ̶̴̧͝ ̷̸̡ ̸́͞ ͢ ̶̸̡̛͞n̢͠d̸̵ ҉̢͠͠a̴͡͠t̛͏̀͟͠ ̨̢͢͝f̷̵/̵̢̡̢/̧̢҉̵/̨͟͝r͏-̕͟͟͠=̢̕͘͟s̵͟͏t͞͞͡\n"\ -"H҉.̧̕.̸̵.̸̨̛̕͠-͘͜/̵͏҉/̸͘̕w̴͏͟e̷̢͜v̵͟͜͟(̢̕҉͟ę̸̀͜͞r̶̷͠͠҉ ̵̡͡ ̵̕͡͠ ҉̷ ̴̵̛͢,̧́҉ ͘͠͞ ͞͠ǫ̷̵̛̀n҉̡͡/̶̢/̵̸҉/̴̸̢́/̡͞/̀͘̕͢/̨͟c̵̷ ̨̛͘͡͞ ̨͏̛ ̷̶̡̧͜ ̵̨̀͜e̸̢͢͟ ̴͝y҉̸̛́/̵̵̶̨/̢͘/̴͟/͡=͢͏=̡͘=̷̢=҉̴̢/̸̧̧͞/̛̕/̶̨́͠/̶̨̧̕͜.̵.̴͝.̷̶͡u̧͝ ͘͘͜҉.̢̨̕͝͏ ̸̶̵̶̢ ̶̡ ̧̀c̀͢͞͞.͡.̴̶́͟͠.͞͏͘.̨̧͘͞.̴҉͞.̶ą̶͟͞ —̨ ͞lei̧͜a͢͞-áş ͢e ̛͘͠você saberá o que fazer. \n"\ -"Também lhe d̵͠ȩ̢ì̴xe͘i ̷̸ưm̀ą̸ ́͞má̵s҉͡c̸̨͟ą͠ŕa͟ b̷̢͘͞ ̛̀͘͢͝c̡͜҉ ̀͟͠ ̶̡͘͜ ͞҉͜͏ ̷͜͏ ̡́́͠ ̢ ̀͏ ̕͜ ̵̷͘ ̶̴̴̵ę̷̷͜ ̴̸҉̀Í͡ ̸͘͞ ̨͢͜͡͡ ́͢͏͢ ̢̡́́͞ ̷̶̸̀͝ ̸͠ ̶̷̧̀̀ ̵̵̵̢́ ̷̵̛͡ ̕͝ ̷̕͠҉̡ ̸k͟͞͝ǹ͠͏͡ ̶̸̶͢͠ ̨͟͞͡ ҉̶ ͟͏̸ ̢̕ ̴͡͠ ̴̕͡҉͢ ̴͟͟ ̶͞͠w҉͝ ̢̨͟ ̵̕ ̧̢͜͢ ̴̀̕͞ ̀͟͟͠ ̛͢͏ ̡̧̀̀ ̨̢͘ ̕͜y̢̨̛͘͟ǫ͡u҉͢͟͏͟ ̷̛̀ ̴̕͞ ̢͡ẃ̴̡͡͝ ͘͜͝͏ ̧̀͜͡ ̶͢ ̵̶̸̨ ̵ļ́͡͡҉ ̶̧ ̸͡͠͠ ̷͏̸̵͟ ̸̴̀̕͝ ̸͏̧̀͝ ́͢͠ ͏̧̡͟͝ ̡̕͢͟n̕̕̕ ̷̴͟͝͏ ̡̡͝ ́́ ͏͝͏͟ ͜͡͏̴̛e̷̸͏d̸̡͜ ̷́͜͝i̵̶̢̢̧t̴́.͜͢\n\n"\ -\ -"P̵r̡o͢cu̧r͞e͡ ͏u҉m͞ ͘cof̢re ͢de͠ ̛me̢tal na̶ pedrȩir͏a ą ҉les̷té,̴ ́e̴nt̡r̨e҉ o̕ ma͜r ę o̴ p͜on̡t́o̕ ̡de͘ o̵b̀s̴e͢r҉va̵ç̨ão̡.\n\n"\ -\ -"O código necessário é: " - -DOCUMENT_POSTGAME_TEXT_PT_BR = "He aquí el código: " - -DOCUMENT_TEXT_FR = \ -"Bonjour ̷̡̠͇̼͉̻̦͓́͜͡ ̶̤̦̯͖͚͓̮͓̣̤̰͇́̕ ̴͜͏͈̭̦͙̦̯̟̗̜̼̠̦͘ ̶̶̡̢̲̱̜̹̰̻̘̪̳̫͕̙̕ ̡҉͎̦̙̰̻͉̜̝̺͚̻͇̞̺̦͓́ ̨̘̤̜̞͍̩̠̱̦̫͔̹̩͍͇̜͈́̕͞ͅͅ ̴̴̧̣͍̘̰̗̮̜̰̲̣̙̲̝͚̩̦̭̀͡ ̧̗͚̱͓̥̖͍͕̀ ̫̪͇̗̲̭̤͖̫̣͇͔͘ ͕͚͎̦͓̺̤̳̙̝͟ͅ ̸͉̫̘̩͙͖̼̣̞̞̰̼̞͕̀ ̶̗͓͎͓̦̙̭̳̻̫̥̯̱͚̦͔͍͙͟ ̶͜҉͏̞̺̙̥̦̪͇̯̳͍̬̱̰̘̺̠̀ ̴̼̘͇͎͙̘̜̀̀͞ ̴̢̹̥͚͎́̀\n\n\n"\ -\ -\ -"C̷͞'̡̨ȩ̀͜s̶̷̢̕t̶̸́҉ h̡͜͠҉ ̷̛i̵̶̷͝ ̵̀͢͢s͜ ͟͏̷̵̡ ̨͟͡ ͏ ̷i҉̷̧̀ ̴̡̕s͠ ͟҉̞̭̼̞̯̰͈̘̟̣̜̰͖͙̼͙̙ ̨̳͚͍̤̦̪͔̲̬̻̯͍͉̥̦̱́ͅ ̫̪͇̗̲̭̤͖̫̣͇͔͘ ͕͚͎̦͓̺̤̳̙̝͟ͅ ̸͉̫̘̩͙͖̼̣̞̞̰̼̞͕̀T ̶̗͓͎͓̦̙̭̳̻̫̥̯̱͚̦͔͍͙͟ ̶͜҉͏̞̺̙̥̦̪͇̯̳͍̬̱̰̘̺̠̀ ̴̼̘͇͎͙̘̜̀̀͞ ̴̢̹̥͚͎̮͍̥̲̟͓̹̞̤̠͉̳̝̫́̀ͅ ̛̫͎̤̥̰̩̹̬͞ ͟҉̞̭̼̞̯̰͈̘̟̣̜̰͖͙̼͙̙A ̨̳͚͍̤̦̪͔̲̬̻̯͍͉̥́ͅu̦̱ ̵̸̹̼̞͚̹̟̺͎̜̖̦͠ ̴̢̳͔̻͕̮͇̱̀͡ͅͅ ̘̟̺̫̪̺͙̦̳̻͙̣̳́́͝͝ ̤͍͍̭͙̦̤͖͕̯͍̜́͜ͅr ̷̶̥̠͍͚͜͞.̴͜/͞m̵̧.̧̨̧́͘.̶͘͝͡-̡̢͟-̷̧͠͝͝-̴̨͜͢y͡҉̧/̀͏͏͘.͜͞.҉̡̀͢-̡̧̕͜-̸͘͜f̷̧͘͜.̨́͜.͞͞.̴̶͞ ͟m͏ȩ͢͢s̴͡s̀͟҉a̵͡g͝e̸͡,̕͏̡ et j'ai bien peur de devoir être bref. \n"\ -"Je vous ai laissé un carnet, en partie écrit dans u̢͏͡n͏͟ȩ ̧͜͝l҉͢àngu͝e͘ ҉̸q̕͞ue y̴̴͝/͟͝͝/̧͝͡-҉̵̸͡-͏͡o͏͜͝/̶̡̡/͡/͏̵̵̵̀/͏́́ų̨̕͘ ͟҉̴ ̧͠͏͝ ͘̕͟͠͞w̛͘͟͡͠/̵̢͠/̷́͞͞/҉̸̛̀͡ļ̴̕͢͡l̢̛̕͘͜ ̵̀͝͠n͝o̵͢͠=̵̷̨̡͡.̷̴̷̡̡.̷̵͘͟t̶̶̸̡ ̷́͜u͏̴́/̀/̵̧͢͞͡ǹd̀͟͠è͢҉̢̢-͠҉-̧҉̢-̶̧-̷̶͘s̵̶̷̢͠t̡̛a̧ ̶̴̧͝ ̷̸̡ ̸́͞ ͢ ̶̸̡̛͞n̢͠d̸̵ ҉̢͠͠a̴͡͠t̛͏̀͟͠ ̨̢͢͝f̷̵/̵̢̡̢/̧̢҉̵/̨͟͝r͏-̕͟͟͠=̢̕͘͟s̵͟͏t͞͞͡\n"\ -"H҉.̧̕.̸̵.̸̨̛̕͠-͘͜/̵͏҉/̸͘̕w̴͏͟e̷̢͜v̵͟͜͟(̢̕҉͟ę̸̀͜͞r̶̷͠͠҉ ̵̡͡ ̵̕͡͠ ҉̷ ̴̵̛͢,̧́҉ ͘͠͞ ͞͠ǫ̷̵̛̀n҉̡͡/̶̢/̵̸҉/̴̸̢́/̡͞/̀͘̕͢/̨͟c̵̷ ̨̛͘͡͞ ̨͏̛ ̷̶̡̧͜ ̵̨̀͜e̸̢͢͟ ̴͝y҉̸̛́/̵̵̶̨/̢͘/̴͟/͡=͢͏=̡͘=̷̢=҉̴̢/̸̧̧͞/̛̕/̶̨́͠/̶̨̧̕͜.̵.̴͝.̷̶͡u̧͝ ͘͘͜҉.̢̨̕͝͏ ̸̶̵̶̢ ̶̡ ̧̀c̀͢͞͞.͡.̴̶́͟͠.͞͏͘.̨̧͘͞.̴҉͞.̶ą̶͟͞ ̧͜͏L̢i̷̛se̢͏҉z͟͏-̨̕͞l͞à͜͏ ̴e̴͝t̕ ̀͝vous saurez quoi faire. \n"\ -"Je vous ai aussi lai̴s̛̀̀s̢̡ȩ́̕ ͝͠ừn̛̛͠ ́͡m͜҉a̕͝s̸̶qu̴e̴̢̛,b̷̢͘͞ ̛̀͘͢͝c̡͜҉ ̀͟͠ ̶̡͘͜ ͞҉͜͏ ̷͜͏ ̡́́͠ ̢ ̀͏ ̕͜ ̵̷͘ ̶̴̴̵ę̷̷͜ ̴̸҉̀Í͡ ̸͘͞ ̨͢͜͡͡ ́͢͏͢ ̢̡́́͞ ̷̶̸̀͝ ̸͠ ̶̷̧̀̀ ̵̵̵̢́ ̷̵̛͡ ̕͝ ̷̕͠҉̡ ̸k͟͞͝ǹ͠͏͡ ̶̸̶͢͠ ̨͟͞͡ ҉̶ ͟͏̸ ̢̕ ̴͡͠ ̴̕͡҉͢ ̴͟͟ ̶͞͠w҉͝ ̢̨͟ ̵̕ ̧̢͜͢ ̴̀̕͞ ̀͟͟͠ ̛͢͏ ̡̧̀̀ ̨̢͘ ̕͜y̢̨̛͘͟ǫ͡u҉͢͟͏͟ ̷̛̀ ̴̕͞ ̢͡ẃ̴̡͡͝ ͘͜͝͏ ̧̀͜͡ ̶͢ ̵̶̸̨ ̵ļ́͡͡҉ ̶̧ ̸͡͠͠ ̷͏̸̵͟ ̸̴̀̕͝ ̸͏̧̀͝ ́͢͠ ͏̧̡͟͝ ̡̕͢͟n̕̕̕ ̷̴͟͝͏ ̡̡͝ ́́ ͏͝͏͟ ͜͡͏̴̛e̷̸͏d̸̡͜ ̷́͜͝i̵̶̢̢̧t̴́.͜͢\n\n"\ -\ -"Cher͞c̷he̴z un c͞o͜ff́r͞e-f̴or͟t͟ ̸en͏ ͝mé̛tal͏ ͟da̶nş ͟l͏a͠ ͝cąr͡r͠i̡èŗe à͞ l͘'͞e͜s̵t, ̷q͘uel̷q҉ue̴ ́part e͠ntre͞ ̡l'o̕c͠éań ̡et le̷ p̛os͏te ͡d̴'̕ob͟s͏er̀vat͜iòn͘.̡ ͝\n\n"\ -\ -"Le code nécessaire est : " - -DOCUMENT_POSTGAME_TEXT_FR = "Le code nécessaire est : " - -DOCUMENT_TEXT_JA = \ -"親愛なる ̷̡̠͇̼͉̻̦͓́͜͡ ̶̤̦̯͖͚͓̮͓̣̤̰͇́̕ ̴͜͏͈̭̦͙̦̯̟̗̜̼̠̦͘ ̶̶̡̢̲̱̜̹̰̻̘̪̳̫͕̙̕ ̡҉͎̦̙̰̻͉̜̝̺͚̻͇̞̺̦͓́ ̨̘̤̜̞͍̩̠̱̦̫͔̹̩͍͇̜͈́̕͞ͅͅ ̴̴̧̣͍̘̰̗̮̜̰̲̣̙̲̝͚̩̦̭̀͡ ̧̗͚̱͓̥̖͍͕̀ ̫̪͇̗̲̭̤͖̫̣͇͔͘ ͕͚͎̦͓̺̤̳̙̝͟ͅ ̸͉̫̘̩͙͖̼̣̞̞̰̼̞͕̀ ̶̗͓͎͓̦̙̭̳̻̫̥̯̱͚̦͔͍͙͟ ̶͜҉͏̞̺̙̥̦̪͇̯̳͍̬̱̰̘̺̠̀ ̴̼̘͇͎͙̘̜̀̀͞ ̴̢̹̥͚͎́̀\n\n\n"\ -\ -\ -"君にメッセージをh̡͜͠҉ ̷̛i̵̶̷͝ ̵̀͢͢s͜ ͟͏̷̵̡ ̨͟͡ ͏ ̷i҉̷̧̀ ̴̡̕s͠ ͟҉̞̭̼̞̯̰͈̘̟̣̜̰͖͙̼͙̙ ̨̳͚͍̤̦̪͔̲̬̻̯͍͉̥̦̱́ͅ ̫̪͇̗̲̭̤͖̫̣͇͔͘ ͕͚͎̦͓̺̤̳̙̝͟ͅ ̸͉̫̘̩͙͖̼̣̞̞̰̼̞͕̀T ̶̗͓͎͓̦̙̭̳̻̫̥̯̱͚̦͔͍͙͟ ̶͜҉͏̞̺̙̥̦̪͇̯̳͍̬̱̰̘̺̠̀ ̴̼̘͇͎͙̘̜̀̀͞ ̴̢̹̥͚͎̮͍̥̲̟͓̹̞̤̠͉̳̝̫́̀ͅ ̛̫͎̤̥̰̩̹̬͞ ͟҉̞̭̼̞̯̰͈̘̟̣̜̰͖͙̼͙̙A ̨̳͚͍̤̦̪͔̲̬̻̯͍͉̥́ͅu̦̱ ̵̸̹̼̞͚̹̟̺͎̜̖̦͠ ̴̢̳͔̻͕̮͇̱̀͡ͅͅ ̘̟̺̫̪̺͙̦̳̻͙̣̳́́͝͝ ̤͍͍̭͙̦̤͖͕̯͍̜́͜ͅr ̷̶̥̠͍͚͜͞.̴͜/͞m̵̧.̧̨̧́͘.̶͘͝͡-̡̢͟-̷̧͠͝͝-̴̨͜͢y͡҉̧/̀͏͏͘.͜͞.҉̡̀͢-̡̧̕͜-̸͘͜f̷̧͘͜.̨́͜.͞͞.̴̶͞ 手̛͜҉短̧͢に̷͏要̷̨件̧͘͜͢を̸̕͜͜͞説明しなければならない。\n"\ -"1冊の日記を残̶̧́し̢͝͠た̴͘͠。̵̸̀̕ y̴̴͝/͟͝͝/̧͝͡-҉̵̸͡-͏͡o͏͜͝/̶̡̡/͡/͏̵̵̵̀/͏́́ų̨̕͘ ͟҉̴ ̧͠͏͝ ͘̕͟͠͞w̛͘͟͡͠/̵̢͠/̷́͞͞/҉̸̛̀͡ļ̴̕͢͡l̢̛̕͘͜ ̵̀͝͠n͝o̵͢͠=̵̷̨̡͡.̷̴̷̡̡.̷̵͘͟t̶̶̸̡ ̷́͜u͏̴́/̀/̵̧͢͞͡ǹd̀͟͠è͢҉̢̢-͠҉-̧҉̢-̶̧-̷̶͘s̵̶̷̢͠t̡̛a̧ ̶̴̧͝ ̷̸̡ ̸́͞ ͢ ̶̸̡̛͞n̢͠d̸̵ ҉̢͠͠a̴͡͠t̛͏̀͟͠ ̕͏͏͢͞な̷̨̡͝言͠҉̡語͏҉で書かれている。\n"\ -"H҉.̧̕.̸̵.̸̨̛̕͠-͘͜/̵͏҉/̸͘̕w̴͏͟e̷̢͜v̵͟͜͟(̢̕҉͟ę̸̀͜͞r̶̷͠͠҉ ̵̡͡ ̵̕͡͠ ҉̷ ̴̵̛͢,̧́҉ ͘͠͞ ͞͠ǫ̷̵̛̀n҉̡͡/̶̢/̵̸҉/̴̸̢́/̡͞/̀͘̕͢/̨͟c̵̷ ̨̛͘͡͞ ̨͏̛ ̷̶̡̧͜ ̵̨̀͜e̸̢͢͟ ̴͝y҉̸̛́/̵̵̶̨/̢͘/̴͟/͡=͢͏=̡͘=̷̢=҉̴̢/̸̧̧͞/̛̕/̶̨́͠/̶̨̧̕͜.̵.̴͝.̷̶͡u̧͝ ͘͘͜҉.̢̨̕͝͏ ̸̶̵̶̢ ̶̡ ̧̀c̀͢͞͞.͡.̴̶́͟͠.͞͏͘.̨̧͘͞.̴҉͞.̶ą̶͟͞n̕読̵͏め̧͡ば̴̛̀͠成すべきことがわかるはずだ。\n"\ -"他にマ̨̧̧ス̷́͟͜ク̧͏͏を͏̛͘͞残̴̵し̧̀た́͡。̀͢҉҉b̷̢͘͞ ̛̀͘͢͝c̡͜҉ ̀͟͠ ̶̡͘͜ ͞҉͜͏ ̷͜͏ ̡́́͠ ̢ ̀͏ ̕͜ ̵̷͘ ̶̴̴̵ę̷̷͜ ̴̸҉̀Í͡ ̸͘͞ ̨͢͜͡͡ ́͢͏͢ ̢̡́́͞ ̷̶̸̀͝ ̸͠ ̶̷̧̀̀ ̵̵̵̢́ ̷̵̛͡ ̕͝ ̷̕͠҉̡ ̸k͟͞͝ǹ͠͏͡ ̶̸̶͢͠ ̨͟͞͡ ҉̶ ͟͏̸ ̢̕ ̴͡͠ ̴̕͡҉͢ ̴͟͟ ̶͞͠w҉͝ ̢̨͟ ̵̕ ̧̢͜͢ ̴̀̕͞ ̀͟͟͠ ̛͢͏ ̡̧̀̀ ̨̢͘ ̕͜y̢̨̛͘͟ǫ͡u҉͢͟͏͟ ̷̛̀ ̴̕͞ ̢͡ẃ̴̡͡͝ ͘͜͝͏ ̧̀͜͡ ̶͢ ̵̶̸̨ ̵ļ́͡͡҉ ̶̧ ̸͡͠͠ ̷͏̸̵͟ ̸̴̀̕͝ ̸͏̧̀͝ ́͢͠ ͏̧̡͟͝ ̡̕͢͟n̕̕̕ ̷̴͟͝͏ ̡̡͝ ́́ ͏͝͏͟ ͜͡͏̴̛e̷̸͏d̸̡͜ ̷́͜͝i̵̶̢̢̧t̴́.͜͢\n\n"\ -\ -"東͠に͡向か͜い͢、海と見͠晴し͜台̡と̡の間のど͘こかにあ̸る採石場̸で̛金͜庫͘を̶探̢すんだ̴。̸\n\n"\ -\ -"必要なコードは次の通りだ: " - -DOCUMENT_POSTGAME_TEXT_JA = "必要なコードは次の通りだ: " - -DOCUMENT_TEXT_KO = \ -"안̛ͥ̍ͅ녕̣͖̣̱͍̗하̖̲̀십̤̥̱͂̆̊ͩͫ니̱͇͔̣̱͘까̷̑͂̉̈́̽,̵̜̩̮̤̣̣ ̷̡̠͇̼͉̻̦͓́͜͡ ̶̤̦̯͖͚͓̮͓̣̤̰͇́̕ ̴͜͏͈̭̦͙̦̯̟̗̜̼̠̦͘ ̶̶̡̢̲̱̜̹̰̻̘̪̳̫͕̙̕ ̡҉͎̦̙̰̻͉̜̝̺͚̻͇̞̺̦͓́ ̨̘̤̜̞͍̩̠̱̦̫͔̹̩͍͇̜͈́̕͞ͅͅ ̴̴̧̣͍̘̰̗̮̜̰̲̣̙̲̝͚̩̦̭̀͡ ̧̗͚̱͓̥̖͍͕̀ ̫̪͇̗̲̭̤͖̫̣͇͔͘ ͕͚͎̦͓̺̤̳̙̝͟ͅ ̸͉̫̘̩͙͖̼̣̞̞̰̼̞͕̀ ̶̗͓͎͓̦̙̭̳̻̫̥̯̱͚̦͔͍͙͟ ̶͜҉͏̞̺̙̥̦̪͇̯̳͍̬̱̰̘̺̠̀ ̴̼̘͇͎͙̘̜̀̀͞ ̴̢̹̥͚͎́̀\n\n\n"\ -\ -\ -"처̡̜͕̺̘̳ͫ͗̃ͩ͂̿͊ͫ͒ͣ̂̽̔̌͐͢͝음̧͎̼͎͖̻͈̇̂ͪ͑́ͥ̉͛̓̔ͨͩ͋ͤ̿̏͊̈́͑͢으̷̧͑̆̔̍̍̆̾̂̊̕͏̩̟̰̠̺̪̪͍̲̰ͅ로̙̟͉͎̒̊͊͋ͮ͝ ̪̙̹͉̿̽̓̏ͫ͐̈́͊̋͌̿͗̃̈͌̐͐͢͠메̶̯̳͉̱̮͇̻̮̩̩̥̦̼̥̹̪̻͓͓̽ͫ͊ͦ̅ͩ̈́ͤ́͘시͎͔͓̻̜̼͆̂̾ͤͣͣ̀지̸̷̣̬̹̫͖̭͓̙̻̜͉̞̗̙͎͕̓̃̉̓ͅ를ͩ͌ͧ̏ͬ͏̷͍̝̭͙̳̟̱͔̣̟̼̹͇̬̕ ̡̭̩̤͉̲̪̟̫̙̈͊͑ͬ̅̓́̑ͩ͌͊̔͆ͭͦͨ̚͢͟보̫̝̥͎̩͉͖͖̥͈̩̞͉̤̗͍͔̔ͪͦ́̄̅͌̀͐ͩ͆͂ͪͫͣ̅̀́̚͝냅̷̷̺̳̟̙̺̖̹̰́̅ͧ́ͩͯͮͫͬͬ̏̃̀͞니̆ͥ̏̍͒͆ͧ̔̂ͧ̍̒̀ͬͭ̚͘͢͏̞̺̲͙̘͢ͅ다̔̇́̆ͥͤ̂͊̿̃͊̇͏̧͇̲̟̟̳̳͕͢.̈́̅̓͏̶̢̧͈̮͎̩͔̩̞͈̥̳̜͞ ͬ̾̌͑̂͌̚͏̴̴̣̤͎̭͖̻͓̝̯͘간̗̩͕̤̹̮̱̗͙͇̋ͮ̌ͣ͘͞ͅ략̢̬̭̮̮̳̤̜̩̰̻͈̺̣͓̩̥̤̖̻̅ͩ̒ͦ̈́̄͊ͥ͟͡͝͠하̋̆̿̊ͦ̊͒ͩ̏ͥͭ̑ͪ͋̌ͥ̋̆͛҉̜͙̗̫͜게̴̙̯̺̤̗͚̪͚̯̙̱͍̃̐͋̈́̍̀̚͘͝ ̸̸̘̤̘̥͍̮̝͉͉̬̳̭͍͕̥̣̄̐ͨ͗̾̓ͪ̎̓͆͆̚͜͢͠써͆̆̏̌̈͌̅ͫ̇́͝҉̹̦͎̻̜̖͘͠야̷̴̢̡̰̱̦͎͈̯͙͈͕ͫ͊̍ͮͨͧ̍̇̚ ̸̱͉̦̲͙̘̰̹̙̌́́̔̉ͪͯ̌͒̂̈̆ͣ̕͘한̗̟̩̟̹͎̳͙̗̣̻̱̦͈̹̙̟̣̆̇͐ͣ̉͆̾͌̋ͭ͐̂͟͝다̡̞̭̱̠̺͙̤̞̰͋̉̓ͥ̀는̴̥̥͔̠̳͇̗̬̩̱̹̩̥͓ͨ̂̿͒͂ͬ̈́͗͌̈̈͌̕͘͟͞ͅͅ ̸̷̧͉̮̻̳̪̮͕̩͉̲̳̘̔̿̿̂͗̅̿̓͛̾̐̈́̀̚걱̠͖̞̙̺̺͈̠̞̬͔̥̪͕͓̳͈̪̎̊̅͆̃̓ͣ̒͊͟͞정̶̭̘̭͔̱̜̥͍̝̺̱̖̹̥͛̂̇ͫͣ́̚͜͜이̆̀̅ͩ̿̎̉̎͗ͧ͌͋̓͆͘͝҉̮̼̝̺̤͎͓̳̙̪̪̲̪̮̝̮͔̹ ̶͖̠̞̣͉͎̤̦̠̹̘͔̮̤̎ͫ̏ͩͩ̔́ͩ̈́͌̍̀ͫ͢͜앞̨̢̾̑ͮ͑ͩ̽̍ͥͮ̀͗͗̽̇́͂ͪ̌҉̜͙̥͇͍͎́ͅ서̷̸̢̮͉͍̘̱̪̠̤͚̰͚̜̝̫̬̩͉ͯ̓͒́는̢̗͖̮̭̰̹̮̟͍̪͚͓̝̟̣̊̃̈́̀̂ͩ̊̋ͩ̑ͬ̔͑̈́ͣ͒̚͜군̸̴̪̱̞̘̠̭͕̖̠̹͌̈́̏̒͆ͣͩͯ͗̈́͘͜͟요̍̾̽̒̑ͦ̑̾̄ͤ̋ͤ̑̒͗͋̓̏ͭ̕͏̲͔̥̪͙͍̲̞͚̺͍̺̞͉̥͟͡.̶̵̷̗̭͙͇̳̌͛͌ͩ͑̍͆́̽́ͭ̈ͬ͝\n"\ -"당̇ͭ̐͂ͬ̿̎͒̽͋͐̋ͧ͗̈́҉͟͢҉̼͍̘͔̠̬͔̞̲̠̝̠͇̖̬̗̞̺̖͞신̴̹̭͈̤̥͚͉̙̺͎͈̦̣̭̫̣͖̓́̔̉͘͞께̷̛̙̞͓̰͔͉̤̻̼̭̳̭̟̤̭̙͚̖̱̊̑͗̾͟͠ ̷̵̴̱̻̗͕̖̺͈̫͇̬͎̤̹̦͔͓̗̾ͪͨ̅̄̊́͞일̸͕̱̖̺̹̬̜̱̗̗͎̬̬̗̳͈̎̈͛͊̍̊̔̆̾̅ͣͬ̊̅͌ͮ͢͞지̡̊̂̌̈ͥ̍̕͜͡͏̼͙͓를̶̨̼̗̰̮̤̰͇̜̫̦̣̦̟̘̭͓̫̝͊̀͑́̄̿ͣ̊̀͋ͪ̓ͧ̈́̉͒͢ ̧̻̗͐̌̓̃͂̊̐͊ͩ̈̕͘ͅ남̴̛͚͍̝̩̤͇͈̞̙͕̮͈̲͎͙͙̊ͤ̅ͪ͌ͪ겨̷̶̧̛̞̼͚̯̥͔̟̲͇͕̠̹̦̺̺̏ͮ̾̄̃̑ͨͦ͑̽͠ ̸̢̛͎̯̝̭̗̋̅ͩ̓̌̅͐̓̍ͩ̓͢͠ͅͅ두̷̴̛̛̩͉̜̱̝̖̄̆͑̓̽̆͐̔̅͒̏̐̍ͮ̐̓͗̚̚었͔̱̠̳͖͓͕͓̮͇̘ͯ͌́ͥ̀͘͞습̸̵̧̤̳̣͖̝̮̱͖̝̹͈̟̟̻̩̭̞͔̥ͦͧ͑́́ͩ̓͐ͦͩ̉͡니̸̧̼̺̜̙̝̹͎̩̗̬̽͌̈́ͪͮ̌̀̓̓̒ͅ다̵̹̻͓͈̹̪̝͈͈̳͉̳̗̝͐̿̐͊̇̾͆͋̂̐ͩ̓̽̀͘ͅ.̵̜̝̫̝̗̱͚̱̳͎̜̬̖͎̭͚̪̝̻̆ͪͫ͊̓̈́ͪ̑̾ͯ̈́̉̀̇̿̀̚ ̙̘̠̖̮͓̫̳͇̳̩̙̭̻͈̏̄ͤ̔͛ͣ͊̒̊̈́͆ͪ̓̄̋͛͠일̬̗̟̫̤̭͈̝̺͎͙̯ͣ͒̏ͭͭͩ̋́̕͞ͅ지̛̮̠͈̠̜͙͌̅̽͑͒́́́͑̃ͣ̾͒̔의̷͔̯̣̪͈̣̤̙̫̤̠̜̠̞̘͍͐̏ͨ̃̽̑͆͆̾̎ͣ̏̆̚̚͢ͅ ͯ̊ͯ̌ͣͭ̿͌̚͏̢̙̭͚̪̹̩͚̫͓͉͔일̃ͧ̾̐̅̓ͣͧ̍̓ͮͦ̊͒̋҉͏҉̢̘͕̹̹̱̼̜̥̬ͅ부ͫ̓̌ͧ̇̽́̉͒ͦ̌̀͏̨̭͚̥̭͇͍̫͔̘는̎͑͊́̌ͥ̈̚҉͓̫̭̳̞́͢͡ ͌̒ͪ̑ͩ͐ͫ̄͒̚͏̸̨̲̹͇͎̫̳̙̦̠̦̗̀당̡̖̰͓͚̥̘͉͉͎̬̞̩̮̣̫͔̌̓̍̂͒ͨ͗̎̈́̈̂̿ͤͥ͢͜͝ͅͅ신̷̔͊̑̉̏̅ͪ̓͐͌͏̯̜̟̜̖이̇̏̏͗̿ͬͨ̃̋̔̀̀̚͢͏̴̣͙̬͇̗̯̹͙̺̯̝͉̼̲̟̜ ̧̄̉̂̄ͥͩ̐̎͐̋̈̽ͩ͐̔̆͞͏͙͇̞̻̠̝͔̩͎̖̖̱읽̧̈́̓͑̊̐͒̑͑̕͏̗̹͎̠̰͍͉̲̻̪̹̩͢͡을̸̲͕̦̼͙͓̝̟̪̲͍͎̮̘͙ͩ͐̿ͦ͌̅ͧͨͭ͂̚͢͢ ̶̘̦͈͚͈̤̖̮̺̳̜̰̲̪̭̼̞̹̯ͬ̒͛̐̐̿ͣ̀ͦ̓͌ͭͬ̄̂̍ͦ̓̀͘͟͠수̵̢̢̘̱̖͙͑̋̊̏́͢ ̴̵̸̵̤͍̳͇̝̣͙̻̠̳̜̱̥ͩͯ̂̑̂̿̋ͥ͆͐̕ͅ없̬̩̩̻͖̪̈͆ͯ̄̉ͧͨ͊͒̚͘͘͡͞는̷̧̢̖̺̻̠̞̭͉̥̹̩̥̞̦̝̯ͭ̽̄̉̾͐̀ͦ͊͑̎̂̑͢ ̵̧̞̟̬͔̝̺͔͙̝̖̖̲̩̂͛ͩ̎̈ͧͥ̿̆͗̅̿̍̀̚ͅͅ언ͤͦ̓̅̋ͨ̋ͩ̉̅̔̅̏҉̦̘̜̼̻̲̠͓͎̩어̢̼̞͍̝̬̭̫̇ͫ̃ͭ̚͘͝͠ͅ로̴̨̢͖̫̺̠̲̱̐ͬ͒̔̿ͫ̍͒͛̉̒̎̃ͥ̄͑̆̓͜ͅ ̴̨͇̘̮͎̩̠͖͚̗̖̾̌̄ͫ̃ͩ͂ͪ͂̆̊ͭͣ͟작ͭ̓̓̌̒͏̨͇̭̻̮̪͔̙̼̗̮̣͉̘͙͕̭̳͟ͅ성͔͔̼͎̘ͯ̋́͗͛̆̎̿̿̋͆̏̃ͮͮ̐̏̚͢͝되̶̴͎̣̱̤͍̙͍̻̼̥̫̗̼͑̂̐͡ͅ어̴̜͖͇̮̻̞̫̪͈͍ͭ̆ͬͨ̎̍͌ͥ́͘ ́̔ͩ̂͆͑ͯͨ̆͆ͬ̕͏̢͇̦͉̗͇̜͎͉͈있͗ͫ̏ͤͥ́҉҉̧͝҉̗͇͎͖͍̗습̸ͩ̀̈́ͪ̓͋̂ͨͫ҉̧҉̪̞ͅ니̷̧̰̩͍̳̥̹͉̣̣̟̘̘͍̾ͭͣ̌̋͘다͋ͭ̎̿ͬ̑̓̽ͫ҉̷̨̧͎̤̪̼͈͙̱̮.ͬͣͥ̇ͪͧ̋ͭ͜͏̴̩͔̱͇͔̲̪̥\n"\ -"̵̸̛͖͉͈͍̦̟̜͚̤̞̦̭̺̞̹̫̥̮͋̓ͭ̏̇̏͆͑̽̓͋̆̏͊́하̵̶̶̢̿ͤͣ̀̒͋ͣ͐ͩ͗͏̣̺͍͔͎̻̻̫̪지̶͖̼͔͙̮̘͚̩͈̙̲̮̖̦̲͇̬ͯ̿̍̀̚͢만̨ͦ͑͊̓͋̒̇̎̒̎̋҉̡̜͚̳͕͚̱̲̞̥͎̥̝̖͞͞ ̍͋͐̔͌ͨ̏ͤ͌͋ͦͣͮ̿͏̡͇͖̻̺̙̰̳̘̮̗̲̦͔͈̰̖̖진̥̲̱͎̘̦ͭ͐̓̉ͤͦ̐ͧ̾̃̂̾̓̆ͥͩͥ̑̀̀̚͝ͅ행͆̎͑͏̛͍̗͇̟̮̝̗을̢̖͕̙͉̙͉͉̼̫̫̩̫̑͌ͤ͛̉̀ ̶̙͕͉̥͙͕̙̳̖̖̠͉͕̝̬̭͋̓ͨ̏ͯ̿͢͠͡위̴̙̞̯͕̮̱͈̣̤̫̭̪̏ͧ͌͂̉͘해̢͊̔̔̚͏̡̢̥̜̲͖͔̫͎͓̲͕̥̱͝ ͨͮ̌͆͊͒͒̉ͤ̈ͩ͆̀́͢͏̰̟̭̳̠̦͚̯̱̫̰̭͎̳̙̗̜̖̗일̴̸̡͈͇̦̺̲͔̼́ͪͯͫ̆͐͗ͅ지̸̫̤̪͇͖͍̦̣̰̺̲̊ͨ͛ͭ̆͛ͧͦ̄̄̍를̧̢̭͓̞͖̖̝͓̞͎̖͎̮͖̦ͮͪ̈̊̆̋̾̂ͮ̍̄͗͑ͣͣ́͘͘ ̵́̀ͬ͌ͫ̃̔̃ͮ̃̑͛ͤ͜҉̞̠̙̹͖̱̻͔͎̠̯͇͔͟번̴̹̬͕̫̘ͨ͐͐ͮ͐ͥͫ͢͟역̵̨̪̠͔̰͎̘̝͒̆ͥ̀ͯ̄ͩͪ̚할̵̢̢͍̹̺͓̩͔̰̣̣͕̙̊ͩͥ̇͆̆ͯͫͦͫͯ̑ͬͫ͆̉̾͟ ̧͙̖͈̪͎̖̥̀ͧ̈́ͫ̽͆̅ͣ̒͆̈ͧ̾ͨ̾̌͋͑͜기̳̳̟̣̟̟̼͚ͪͬͪ̄͜͢ͅ회̴̶͖͍̥͚͉̰̘̝͉̠̺ͫͦ̀̐ͣͩͨͫ͒ͧ̅̇ͯ͒͊̚͜͞ͅͅͅ가͐ͧ͊̉̊҉͕̱͍̠̹͍̠̟̱́ ̵̧̣͈̣̞̩̖̯̓̀ͩͪ̃̔ͧ̄ͭͬͣ̓͂올̨̨̹̪̬̤̗̜̼̜ͩ̆̓ͨ̉̃̐̌ͫ͆̒̕ ̔ͥ͊̿̃̓̊̌͐̂ͧ͒ͧͫͣͪ͟҉̘͚̼̻̤̱̣̳͢ͅ것͋̈̽̔̐̓̐̌̿̾̽̅ͮ̓̑͆͑͋͏̙̪̼̝̼̟̘͓͕͚͚̟͎ͅ입ͩ͂̒̈́̈̉͂̾҉̧͔̪̰̠̹́니̷̡̜͉̝̼̱̤̤̽ͪ̍ͩ̊ͩ̀ͨ̀́͢다̷̷̧̺̩͈̮̤͇̼̿̾͐̾͘.̸̈͋͋ͥ̐͒҉̻̳͖͎̱̱̠̳̫̹̹ͅ.̧̧̝̥̹̫̭͚͓̤̻͖͈̻̲̔̑̍͋̈́͌̌̒̃̔̇͑.͗ͩ̀̆ͫ͑́̉ͧͣ͏̛̫̠͎̭̖͠͞ ̵̨̘̙̠̹̗̫̠͍͇͔̙̝̬̗̜ͭ̿̏̊͑͐̓͛̍̾̇읽̨͉̞̥̬͎͈͈̼̦̼̯̬͍ͩͩ̾̑̓̾͛̀ͨͬͫ́̚͠͡어̡̰̪̹̲̒͐̄̋͡͡ͅ ̨̡͇̰̼͍̪͚͈̗̪͉̩̳̝̹ͯ̊̈ͭͫ̏̿͆̃̃̀̕͜보̹̘̠̣̙̘̠̘̫͉̈́̍̀̓̾̊̓ͫ͗ͭ̄̉̀ͭ́ͫͣ̒̀̚͠͞͡시̡̬͖̣͚͔̭̝ͮ̉̓̋̉ͦͥ̍ͧͫ͊̓̅͌̃͘면̿̂ͥ͒͌̑̌ͤͥͮ̑̾̚҉̷̢̛͙͎͕̯̮̮̻͖̝̻͠ ̸̮̲̯̯̫̳̙͚͔̩̺̤͍̭̟̜͈̟̯ͭͪ̆̄ͭ͌̚무̶̬̻̻̘̳͈͈̦̩͙̗͉̹̦͇̂̍̈̽̈̆̓̅̅̊͛ͨ̒͛̔ͪ̾̀̀͜엇̸̨͙̮̣̫͎̳̤̮͍̼̰̜͓̲ͥ̇̊̉ͧ̾ͯ̏͌̂ͪ͘을̴̬̘̲͇̯͓̉͒̈́̅̈́̇͌̈́̊̏ͨ͗͆̊ͧ̄̈͘͟͝ ̻̹̜̻̼̬̪͎ͥ̿͐̈ͨ̄̿́̓̒̍̍ͩ̍̋ͩ̈́́̚͝해̟͇̩͔̟̜͉̹͕̭̰̭̠̾͆͂ͮͭ͛̑ͯ͑̈́ͫͮ͆ͮ̄̔ͬ͟͜͝ͅ야̡̽̈́̂ͬͧͩ̾͛͂̌ͭ̍̿ͪ̽̃̐̚͏̸҉̩̰̥͓̗ ͭ͑̒̋ͭ̍̈͗̿ͫ͂͂̊͗ͤ́̚҉̶̸̴̺̝̠̘̼̺͎͇͕̗̟͎ͅ할̸̧̦͓̦̮̯̟̘͈̲̺̟̲͎̬̙̟̗̾̒ͥ͒͐ͬ̑̄̂ͧ̾ͬ͊̑̓̚͜͡ͅ지̵̸̡̧̩̯͇͉̥̮̺͔̤̘̪̥̜̬͚̞͔̳̾̇̓͛ͮ͘ ̴̨̨̛̦̟̰̞͙̥͉͕̳̮̞ͯ̃ͯ͋ͯͧͬͨ̽͂̔̾̕알̶̨̺͕̱͎͖͂ͯ̍̾͜게̷̨͕̙̦͈͈̼͕̺͉͍͕͑̓̆̒͒̇̈͆͋̅̌ͯ̿͗̃ ̵̵̸̤͍̟̳̯̫͙̞͕ͨͭ͊̍̓͗̉̆̿̊͆̓̎ͯ̓̋ͥ̀ͅ될̵̺̙̫̩͔́͌͌̅̊̅͌͂̆̐ͯͣ̓̚̕ ̧̞̗͔̬̱̭̓ͫ̾̃̐̀̀́͡͠것̍͆̽ͤͭ͛ͮͯ̽̄̊̚͏̷̢̪̳͖͕̼̯̰̮̜̥̯̤̤̙̟̹͙̭̀͞입̷̷̖̠̹̻̥͈ͩͩ̔̄̋ͨ̏̍͊̇̋̅̾ͬ̈̑̑ͤ̅̀͘ͅͅ니̋͒̂̈̽͌ͭ̾͂ͥ͑͑͞҉̢̧̭͖͔̩̦̟̦͙̳̩ͅ다̷́ͯͫͥ͊̑ͣ̒ͧͭ͛̏͛̀̃ͪ̇͏̮̬̲̣̦̀͝ͅ.̵̸̪̪̘̰̫̬̙ͧ̆̓́̚̕\n"\ -"̢͈̗̬̳̠̩̳̃ͩ̈̽̐ͫ̈́͊ͧ͗̓̈́̿̒̚͟͡͡마̴̙̪̦̩̫̹͉̯̤̗̅ͣ͗͋̅̍̊̿ͭͥͣ̃ͯ̓̔̉ͥ̌ͫ͠스̴̡̛͉̻̖̹̺̭͚̓̌͒̍ͦͩͤ͛̾͂͋̾͒ͦ̚크̧̨̯͇̼̙̹̂̇ͧ͐̂̂̃̊ͬ̀̍̍͊̈̓ͬ도̸̨̛̱̭̠̙̱̩̯̯͕̯͉̝͇͈̯̭̈́̾ͮ͊͗̌ͧ͒͂ͦ̊͛́̚͝ ̨͈͈̳̰̹͋ͯ͆̌̓̑͛̚̕준̷̡̧̤̘͎͕̲̺̭̰̣̏ͦ̈́ͥ̚͢͝ͅ비̃̉̊̔ͭͬ̃͑̈́ͦ̂̅͛̏͒ͤ͌͜҉͜҉̟̤͔̬͈̰͙̰̭̦̭해̢͚̟̹͇͋̒ͤ́̀ͧ́ͭ́̈ͪ̏͐͟ 두͌͏̖었̴̬̳̗͚̄ͬ̑͐̾͋̚습̢ͥͭ̌̽͛̌ͥ니̮͕̳͈̟̙͔다͚̥̬̤̋͒ͦ̒.̩̞̏ͣ͛̑͑̐ ̴̡͙͓͙̟̖̟̥̙̭̻̬̻͖̪͙̰̘̳͇͖͆̊̊̄̂̓͊̃̿̏̆̿̌̒̕͠ͅ구̪̤̱̲̜͍̬̳͙̿̆ͭ̈́̈̒̑ͪ̊̒̒̇̋́͐ͥ͞원̸̧̨͙̺̞̞͚̟̼̜͚͚̩̦̞̲̹̻͙̂ͪ̔̾̓ͪͬ͋̉̂̓̐̌̍ͧ̆̚자̡͎̭̣̺̫͗̃̆ͣ̀͑ͤͧ͊̅́̃에̵̡̗̜͉͔̹̦̼͖̟̬̟̭̹̺͙̗͌͑͋ͦ̂̀̌ͨͫ̍̃̈ͪ̇ͫ̅͒ͬͤ͜ͅ게̸̨̬͚̰̗̠ͭ̔̿̂͘͞ ̶̡̢̹̫̬͓̞̥̜̣͇̦̼͇̥̹̿̓͐ͥ̑̊͋͂ͪ̚필̢͗ͣ̓ͬ͗͐̄͆ͣ̚͠͏̖̰͇͚͎̭̪̠̙̠̱ͅ요̛ͧ̇̾̔̒̈́̀̏͏̧̕͏̦̲̦͇̫ͅ할͎̝̻͙͍̝͉͔̘̰͔̣̲̣̐̅̍̎ͥ̓͂͗̀͜ ̶̨̨̟͖̲̫̞̩̗̭͍̬̣̟̪̱̥͛̋̅̆͑̆͜͝ͅ것̷̯̺͔̰̠̱͍̦͓͌ͧ͐͒͌ͭͣͤ̀͢͞입̙͖͇̘̲̣̹̳̹̫̣̜͉̪͎̹̱͚̟ͫ̓̌͑ͧ̐̽̒̓̀͘͝니̋̑ͧ̎ͤͫ̅͏̷̭̯̬͓͓̮̫̮̞̳̱̫̫̮̠̖̯͈͟다̝̞̪̰͈̰̦̝̗̝̤͚̿̿̊̓ͨ̓̓̽̃͐͆̓̓̀͠.̸̛̦̤̞̜̫̫͗̇ͦͧ̂̉͘̕͢\n\n"\ -\ -"바̺͙̹̻̙̮͐ͥ̋͂̕다̛̻̹͉̐͑와̟̗͇̲̬͐͌͊̉͌ ̨̫̪̯̔̄ͧͫ͒초̪̍소̜͍͓̰͚̠̾ͅ ͒͂̇지̛̱̤͔ͦ̓̇역̲͚̲̇̇̃͡ ̪̗͉ͬ̍̚사͚͚̼̹̪̯이̥̘̻̺̙ͥ͌ͬ̃̚의͒̂̾̓̑̐ ̢̣ͧ͌̈́̽동͚͙̪̱͚͇͓͗쪽̨̼̳̗̒̎̉̃̊̽͐ ̯̙̩̠̱́ͮͮ͑ͪ͢채͈̳͙͎̪̦̓ͪ̓ͅ석̙͉̳̰̘̠͋ͥ̄̈́ͭ장̱͛͗에̸̆͗̾서̆ͤ̒̓ͫ̌͏̫̲͍̭̘̜ ̘͚̩̑͆̈ͯ̿̓금̦̣͈̘̝͂̅̇̽̂͗속͕̳͎̪͗͌͐̌́̔ ̧͙͖̥͍́͋̈́금̳̲͉̟͔̂̿͒ͤ̑̾ͥ̀ͅ고̯̎͟를̩̗̦͚̳ ͕ͥ͜찾̯͉̎̂̅͂͐ͫ̾아̻̲̻̇̐ͣ보̬̭̙̖͔̈́십̗͈̱̊̑̈͗ͭ͆̀́시̤͉̣̣͊̒̂̓̍오̬̜̘̰͍̭͎͛.̢ͥ̿ͩ͗ͩ̌̒\n\n"\ -\ -"코드는 다음과 같습니다. " - -DOCUMENT_POSTGAME_TEXT_KO = "코드는 다음과 같습니다. " - -DOCUMENT_TEXT_ZH_CN = \ -"亲爱̷̷͟͝͡的̸̀̀ ̷̡̠͇̼͉̻̦͓́͜͡ ̶̤̦̯͖͚͓̮͓̣̤̰͇́̕ ̴͜͏͈̭̦͙̦̯̟̗̜̼̠̦͘ ̶̶̡̢̲̱̜̹̰̻̘̪̳̫͕̙̕ ̡҉͎̦̙̰̻͉̜̝̺͚̻͇̞̺̦͓́ ̨̘̤̜̞͍̩̠̱̦̫͔̹̩͍͇̜͈́̕͞ͅͅ ̴̴̧̣͍̘̰̗̮̜̰̲̣̙̲̝͚̩̦̭̀͡ ̧̗͚̱͓̥̖͍͕̀ ̫̪͇̗̲̭̤͖̫̣͇͔͘ ͕͚͎̦͓̺̤̳̙̝͟ͅ ̸͉̫̘̩͙͖̼̣̞̞̰̼̞͕̀ ̶̗͓͎͓̦̙̭̳̻̫̥̯̱͚̦͔͍͙͟ ̶͜҉͏̞̺̙̥̦̪͇̯̳͍̬̱̰̘̺̠̀ ̴̼̘͇͎͙̘̜̀̀͞ ̴̢̹̥͚͎́̀\n\n\n"\ -\ -\ -"虽̸̛̀͡然̡́ ̨҉͟͞h̡͜͠҉ ̷̛i̵̶̷͝ ̵̀͢͢s͜ ͟͏̷̵̡ ̨͟͡ ͏ ̷i҉̷̧̀ ̴̡̕s͠ ͟҉̞̭̼̞̯̰͈̘̟̣̜̰͖͙̼͙̙ ̨̳͚͍̤̦̪͔̲̬̻̯͍͉̥̦̱́ͅ ̫̪͇̗̲̭̤͖̫̣͇͔͘ ͕͚͎̦͓̺̤̳̙̝͟ͅ ̸͉̫̘̩͙͖̼̣̞̞̰̼̞͕̀T ̶̗͓͎͓̦̙̭̳̻̫̥̯̱͚̦͔͍͙͟ ̶͜҉͏̞̺̙̥̦̪͇̯̳͍̬̱̰̘̺̠̀ ̴̼̘͇͎͙̘̜̀̀͞ ̴̢̹̥͚͎̮͍̥̲̟͓̹̞̤̠͉̳̝̫́̀ͅ ̛̫͎̤̥̰̩̹̬͞ ͟҉̞̭̼̞̯̰͈̘̟̣̜̰͖͙̼͙̙A ̨̳͚͍̤̦̪͔̲̬̻̯͍͉̥́ͅu̦̱ ̵̸̹̼̞͚̹̟̺͎̜̖̦͠ ̴̢̳͔̻͕̮͇̱̀͡ͅͅ ̘̟̺̫̪̺͙̦̳̻͙̣̳́́͝͝ ̤͍͍̭͙̦̤͖͕̯͍̜́͜ͅr ̷̶̥̠͍͚͜͞.̴͜/͞m̵̧.̧̨̧́͘.̶͘͝͡-̡̢͟-̷̧͠͝͝-̴̨͜͢y͡҉̧/̀͏͏͘.͜͞.҉̡̀͢-̡̧̕͜-̸͘͜f̷̧͘͜.̨́͜.͞͞.̴̶͞ ,҉̴̛͠但̸̨̕恐̴̡͞怕́我̡只能简短地说明情况。\n"\ -"我为你准备了一本日͏̛̀͢͞志̸̡͜,҉̕但̶͟是̨͘͢͡͞y̴̴͝/͟͝͝/̧͝͡-҉̵̸͡-͏͡o͏͜͝/̶̡̡/͡/͏̵̵̵̀/͏́́ų̨̕͘ ͟҉̴ ̧͠͏͝ ͘̕͟͠͞w̛͘͟͡͠/̵̢͠/̷́͞͞/҉̸̛̀͡ļ̴̕͢͡l̢̛̕͘͜ ̵̀͝͠n͝o̵͢͠=̵̷̨̡͡.̷̴̷̡̡.̷̵͘͟t̶̶̸̡ ̷́͜u͏̴́/̀/̵̧͢͞͡ǹd̀͟͠è͢҉̢̢-͠҉-̧҉̢-̶̧-̷̶͘s̵̶̷̢͠t̡̛a̧ ̶̴̧͝ ̷̸̡ ̸́͞ ͢ ̶̸̡̛͞n̢͠d̸̵ ҉̢͠͠a̴͡͠t̛͏̀͟͠ ̨̢͢͝f̷̵/̵̢̡̢/̧̢҉̵/̨͟͝r͏-̕͟͟͠=̢̕͘͟s̵͟͏t͞͞͡\n"\ -"H҉.̧̕.̸̵.̸̨̛̕͠-͘͜/̵͏҉/̸͘̕w̴͏͟e̷̢͜v̵͟͜͟(̢̕҉͟ę̸̀͜͞r̶̷͠͠҉ ̵̡͡ ̵̕͡͠ ҉̷ ̴̵̛͢,̧́҉ ͘͠͞ ͞͠ǫ̷̵̛̀n҉̡͡/̶̢/̵̸҉/̴̸̢́/̡͞/̀͘̕͢/̨͟c̵̷ ̨̛͘͡͞ ̨͏̛ ̷̶̡̧͜ ̵̨̀͜e̸̢͢͟ ̴͝y҉̸̛́/̵̵̶̨/̢͘/̴͟/͡=͢͏=̡͘=̷̢=҉̴̢/̸̧̧͞/̛̕/̶̨́͠/̶̨̧̕͜.̵.̴͝.̷̶͡u̧͝ ͘͘͜҉.̢̨̕͝͏ ̸̶̵̶̢ ̶̡ ̧̀c̀͢͞͞.͡.̴̶́͟͠.͞͏͘.̨̧͘͞.̴҉͞阅̸̨̛͝读҉͠͏̧́日̶̴志̵́͢后你就知道做怎么做了。\n"\ -"同时我也为你̵̛́͏准̸̴̡̀备̧͞了̶̧̢́一̧̧̕幅̴͠͡面̶͘͝具̴̸̧͡,b̷̢͘͞ ̛̀͘͢͝c̡͜҉ ̀͟͠ ̶̡͘͜ ͞҉͜͏ ̷͜͏ ̡́́͠ ̢ ̀͏ ̕͜ ̵̷͘ ̶̴̴̵ę̷̷͜ ̴̸҉̀Í͡ ̸͘͞ ̨͢͜͡͡ ́͢͏͢ ̢̡́́͞ ̷̶̸̀͝ ̸͠ ̶̷̧̀̀ ̵̵̵̢́ ̷̵̛͡ ̕͝ ̷̕͠҉̡ ̸k͟͞͝ǹ͠͏͡ ̶̸̶͢͠ ̨͟͞͡ ҉̶ ͟͏̸ ̢̕ ̴͡͠ ̴̕͡҉͢ ̴͟͟ ̶͞͠w҉͝ ̢̨͟ ̵̕ ̧̢͜͢ ̴̀̕͞ ̀͟͟͠ ̛͢͏ ̡̧̀̀ ̨̢͘ ̕͜y̢̨̛͘͟ǫ͡u҉͢͟͏͟ ̷̛̀ ̴̕͞ ̢͡ẃ̴̡͡͝ ͘͜͝͏ ̧̀͜͡ ̶͢ ̵̶̸̨ ̵ļ́͡͡҉ ̶̧ ̸͡͠͠ ̷͏̸̵͟ ̸̴̀̕͝ ̸͏̧̀͝ ́͢͠ ͏̧̡͟͝ ̡̕͢͟n̕̕̕ ̷̴͟͝͏ ̡̡͝ ́́ ͏͝͏͟ ͜͡͏̴̛e̷̸͏d̸̡͜ ̷́͜͝i̵̶̢̢̧t̴́.͜͢\n\n"\ -\ -"在͝采石̕场东边͢寻找̀一̶个͝金͠属保̢险箱̶,̕它就̀在海洋与侦́察哨̀之间。\n\n"\ -\ -"你所需要的代码:" - -DOCUMENT_POSTGAME_TEXT_ZH_CN = "你所需要的代码:" def safe_puzzle_write - doc_text = DOCUMENT_TEXT - case $persistent.langcode - when 'fr' - doc_text = DOCUMENT_TEXT_FR - when 'pt_BR' - doc_text = DOCUMENT_TEXT_PT_BR - when 'es' - doc_text = DOCUMENT_TEXT_ES - when 'ja' - doc_text = DOCUMENT_TEXT_JA - when 'ko' - doc_text = DOCUMENT_TEXT_KO - when 'zh_CN' - doc_text = DOCUMENT_TEXT_ZH_CN + docTextFilePath = "Languages/safetext/#{$persistent.langcode}/safe1.txt" + + #use default file (english) if we can't find the language specific on + if !FileTest.exist?(docTextFilePath) + docTextFilePath = "Languages/safetext/safe1.txt" end + doc_text = File.read(docTextFilePath) + Dir.mkdir(Oneshot::DOCS_PATH) unless File.exists?(Oneshot::DOCS_PATH) File.open("#{Oneshot::DOCS_PATH}/DOCUMENT.oneshot.txt", 'w') do |file| file.puts(doc_text + $game_variables[20].to_s) @@ -130,21 +15,14 @@ def safe_puzzle_write end def safe_puzzle_postgame_write - doc_text = DOCUMENT_POSTGAME_TEXT - case $persistent.langcode - when 'fr' - doc_text = DOCUMENT_POSTGAME_TEXT_FR - when 'pt_BR' - doc_text = DOCUMENT_POSTGAME_TEXT_PT_BR - when 'es' - doc_text = DOCUMENT_POSTGAME_TEXT_ES - when 'ja' - doc_text = DOCUMENT_POSTGAME_TEXT_JA - when 'ko' - doc_text = DOCUMENT_POSTGAME_TEXT_KO - when 'zh_CN' - doc_text = DOCUMENT_POSTGAME_TEXT_ZH_CN + docTextFilePath = "Languages/safetext/#{$persistent.langcode}/safe2.txt" + + #use default file (english) if we can't find the language specific on + if !FileTest.exist?(docTextFilePath) + docTextFilePath = "Languages/safetext/safe2.txt" end + doc_text = File.read(docTextFilePath) + Dir.mkdir(Oneshot::DOCS_PATH) unless File.exists?(Oneshot::DOCS_PATH) File.open("#{Oneshot::DOCS_PATH}/DOCUMENT.oneshot.txt", 'w') do |file| file.puts(doc_text + $game_variables[20].to_s) diff --git a/scripts/i18n_Language.rb b/scripts/i18n_Language.rb index 9f7ae9a2..e26f19de 100644 --- a/scripts/i18n_Language.rb +++ b/scripts/i18n_Language.rb @@ -34,22 +34,61 @@ def load_pot(path) msgid = nil msgstr = nil @data = Hash.new + lastLineWasMsgId = false + lastLineWasMsgStr = false if FileTest.exist?(path) File.readlines(path).each do |line| if line.start_with?("msgid ") line = line[6..-1] #unescape the string + #note that I tried using undump here instead before, but it doesn't play nicely with non-ascii characters eval("msgid = " + line) + lastLineWasMsgId = true + lastLineWasMsgStr = false + elsif line.start_with?("msgstr ") line = line[7..-1] #unescape the string eval("msgstr = " + line) + lastLineWasMsgId = false + lastLineWasMsgStr = true + + elsif line.start_with?("\"") + if lastLineWasMsgId + eval("msgid += " + line) + lastLineWasMsgId = true + lastLineWasMsgStr = false + + elsif lastLineWasMsgStr + eval("msgstr += " + line) + lastLineWasMsgId = false + lastLineWasMsgStr = true + + else #ignore + lastLineWasMsgId = false + lastLineWasMsgStr = false + + end + + else + lastLineWasMsgId = false + lastLineWasMsgStr = false + if !(msgid.nil? || msgid.empty?) @data[Oneshot::crc32(msgid)] = msgstr + msgid = nil + msgstr = nil end end end end + + # make sure we cleared out the last one stored + if !(msgid.nil? || msgid.empty?) + @data[Oneshot::crc32(msgid)] = msgstr + msgid = nil + msgstr = nil + end end # Translate some text From 4bc263efdf8f98d5533a62c7500396221688289d Mon Sep 17 00:00:00 2001 From: GIR Date: Sun, 30 Jan 2022 22:42:58 -0600 Subject: [PATCH 04/11] Loc changes and debug items: -increasing the buffer in the journal program that seeks the lang code in the fake savefile, as "[zh_CHT]" was too long for the old buffer to find -updating wallpaper script to work with all langcodes -making save screen support 100 save files -"debug_tester.dat" will allow players to have 2 debug items when starting a game or loading a debug save, and also allow access to the debug switch/variable menu -also made debug items immune to the part of the game where your inventory is emptied --- journal/w32/journal/journal.vcxproj | 4 ++-- journal/w32/journal/src/journal.c | 6 ++--- scripts/Game_Oneshot.rb | 27 ++++++++++------------- scripts/Scene_File.rb | 28 ++++++++++++++++++++---- scripts/Scene_Load.rb | 14 ++++++++++-- scripts/Scene_Map.rb | 34 ++++++++++++++--------------- scripts/Scene_Title.rb | 8 +++++++ scripts/Script.rb | 8 +++++-- 8 files changed, 83 insertions(+), 46 deletions(-) diff --git a/journal/w32/journal/journal.vcxproj b/journal/w32/journal/journal.vcxproj index e8d7617e..ed168eb1 100644 --- a/journal/w32/journal/journal.vcxproj +++ b/journal/w32/journal/journal.vcxproj @@ -115,7 +115,7 @@ true - Console + Windows true true true @@ -143,7 +143,7 @@ true - Console + Windows true true true diff --git a/journal/w32/journal/src/journal.c b/journal/w32/journal/src/journal.c index 45b9af6d..8c06972d 100644 --- a/journal/w32/journal/src/journal.c +++ b/journal/w32/journal/src/journal.c @@ -161,13 +161,13 @@ DWORD WINAPI ipc_thread(LPVOID lpParam) void init_check_save(WCHAR* save_path) { FILE* savefile = _wfopen(save_path, L"rb"); char imgfile[16] = {0}; - char langbuf[9] = {0}; + char langbuf[17] = {0}; char* openbrace = 0; char* closebrace = 0; if (savefile) { strcpy(imgfile, "save"); - fseek(savefile, -8, SEEK_END); - fread(langbuf, 1, 8, savefile); + fseek(savefile, -16, SEEK_END); + fread(langbuf, 1, 16, savefile); fclose(savefile); openbrace = strchr(langbuf, '['); diff --git a/scripts/Game_Oneshot.rb b/scripts/Game_Oneshot.rb index 6236f438..3d757655 100644 --- a/scripts/Game_Oneshot.rb +++ b/scripts/Game_Oneshot.rb @@ -42,23 +42,18 @@ def self.set_persistent(name, color) end Graphics.update end - - if (name == 'save_w32') - case $persistent.langcode - when 'fr' - name = $persistent.langcode + "/" + name - when 'pt_BR' - name = $persistent.langcode + "/" + name - when 'es' - name = $persistent.langcode + "/" + name - when 'ja' - name = $persistent.langcode + "/" + name - when 'ko' - name = $persistent.langcode + "/" + name - when 'zh_CN' - name = $persistent.langcode + "/" + name - end + + locWallpaper = $persistent.langcode + "/" + name + if (name == 'save_w32') + locWallpaperFullPath = "Wallpaper/" + locWallpaper + ".bmp" + else + locWallpaperFullPath = "Wallpaper/" + locWallpaper + ".png" + end + + if File.exists?(locWallpaperFullPath) + name = locWallpaper end + $game_oneshot.wallpaper = name $game_oneshot.wallpaper_color = color Wallpaper.set(name, color) diff --git a/scripts/Scene_File.rb b/scripts/Scene_File.rb index fbe5322d..f4140336 100644 --- a/scripts/Scene_File.rb +++ b/scripts/Scene_File.rb @@ -21,12 +21,13 @@ def main @help_window.set_text(@help_text) # Make save file window @savefile_windows = [] - for i in 0..3 + for i in 0..99 @savefile_windows.push(Window_SaveFile.new(i, make_filename(i))) end # Select last file to be operated @file_index = $game_temp.last_file_index @savefile_windows[@file_index].selected = true + updateVisibleSavefileWindows # Execute transition Graphics.transition # Main loop @@ -76,13 +77,17 @@ def update if Input.repeat?(Input::DOWN) # If the down directional button pressed down is not a repeat, # or cursor position is more in front than 3 - if Input.trigger?(Input::DOWN) or @file_index < 3 + if Input.trigger?(Input::DOWN) or @file_index < 99 # Play cursor SE $game_system.se_play($data_system.cursor_se) # Move cursor down @savefile_windows[@file_index].selected = false - @file_index = (@file_index + 1) % 4 + @file_index = (@file_index + 1) + if @file_index > 99 + @file_index = 0 + end @savefile_windows[@file_index].selected = true + updateVisibleSavefileWindows return end end @@ -95,8 +100,12 @@ def update $game_system.se_play($data_system.cursor_se) # Move cursor up @savefile_windows[@file_index].selected = false - @file_index = (@file_index + 3) % 4 + @file_index = (@file_index - 1) + if @file_index < 0 + @file_index = 99 + end @savefile_windows[@file_index].selected = true + updateVisibleSavefileWindows return end end @@ -108,4 +117,15 @@ def update def make_filename(file_index) return "Save#{file_index + 1}.rxdata" end + + def updateVisibleSavefileWindows + for i in 0..99 + @savefile_windows[i].visible = false + end + + screen_start_index = @file_index - (@file_index % 4) + for i in screen_start_index..(screen_start_index + 3) + @savefile_windows[i].visible = true + end + end end diff --git a/scripts/Scene_Load.rb b/scripts/Scene_Load.rb index 627bb670..7f6b562f 100644 --- a/scripts/Scene_Load.rb +++ b/scripts/Scene_Load.rb @@ -14,7 +14,7 @@ def initialize # Timestamp selects new file $game_temp.last_file_index = 0 latest_time = Time.at(0) - for i in 0..3 + for i in 0..99 filename = make_filename(i) if FileTest.exist?(filename) file = File.open(filename, "r") @@ -58,7 +58,7 @@ def on_cancel # Play cancel SE $game_system.se_play($data_system.cancel_se) # Switch to title screen - $scene = Scene_Title.new + $scene = Scene_Map.new end #-------------------------------------------------------------------------- # * Read Save Data @@ -101,6 +101,16 @@ def read_save_data(file) f.moveto($game_player.x, $game_player.y) f_prev = f end + + + # check for debug file to add debug items + if File.exists?("debug_tester.dat") + # debug save + $game_party.gain_item(54, 1) + # plight skip + $game_party.gain_item(82, 1) + end + load_perma_flags end end diff --git a/scripts/Scene_Map.rb b/scripts/Scene_Map.rb index a441aa8a..f79c1d03 100644 --- a/scripts/Scene_Map.rb +++ b/scripts/Scene_Map.rb @@ -279,7 +279,7 @@ def update end end # If debug mode is ON and F5 key was pressed - if $debug and Input.press?(Input::F5) + if $debug and Input.press?(Input::F5) and # Set transferring player flag $game_temp.player_transferring = true # Set player move destination @@ -288,23 +288,23 @@ def update $game_temp.player_new_y = $data_system.start_y end # debug && F6 - if $debug and Input.press?(Input::F6) and $lastpress != 6 - $lastpress = 6 - Chroma.playAnim("chroma/blank_keyboard.chroma", false); - end - if $debug and Input.press?(Input::F7) and $lastpress != 7 - $lastpress = 7 - Chroma.playAnim("chroma/Fire_Keyboard.chroma", true); - end - if $debug and Input.press?(Input::F9) and $lastpress != 9 - $lastpress = 9 - Chroma.playAnim("chroma/Random_Keyboard.chroma", false); - end + #if $debug and Input.press?(Input::F6) and $lastpress != 6 + # $lastpress = 6 + # Chroma.playAnim("chroma/blank_keyboard.chroma", false); + #end + #if $debug and Input.press?(Input::F7) and $lastpress != 7 + # $lastpress = 7 + # Chroma.playAnim("chroma/Fire_Keyboard.chroma", true); + #end + #if $debug and Input.press?(Input::F9) and $lastpress != 9 + # $lastpress = 9 + # Chroma.playAnim("chroma/Random_Keyboard.chroma", false); + #end # If debug mode is ON and F9 key was pressed - # if $debug and Input.press?(Input::F9) - # # Set debug calling flag - # $game_temp.debug_calling = true - # end + if Input.press?(Input::F9) && File.exists?("debug_tester.dat") + # Set debug calling flag + $game_temp.debug_calling = true + end # If player is not moving unless $game_player.moving? # Run calling of each screen diff --git a/scripts/Scene_Title.rb b/scripts/Scene_Title.rb index 86913cc2..85539fb5 100644 --- a/scripts/Scene_Title.rb +++ b/scripts/Scene_Title.rb @@ -54,6 +54,14 @@ def main @sprite.bitmap = RPG::Cache.title($data_system.title_name) end + # check for debug file to add debug items + if File.exists?("debug_tester.dat") + # debug save + $game_party.gain_item(54, 1) + # plight skip + $game_party.gain_item(82, 1) + end + @sprite.zoom_x = 2.0 @sprite.zoom_y = 2.0 # Create/render menu options diff --git a/scripts/Script.rb b/scripts/Script.rb index 28e32ec8..38b3ce6f 100644 --- a/scripts/Script.rb +++ b/scripts/Script.rb @@ -71,12 +71,16 @@ def self.check_bruteforce end def self.skip_bruteforce - $game_oneshot.bruteforce_start -= 62800*2*60 + $game_oneshot.bruteforce_start -= 63014*2*60 end def self.lose_all_items for i in 1..99 - $game_party.lose_item(i, 99) + #skip debug testing items + if i == 54 or i == 81 or i == 82 + next + end + $game_party.lose_item(i, 99) end end From 533dcb358980d9230c3d86d3f12b77c77811574e Mon Sep 17 00:00:00 2001 From: GIR GIR Date: Thu, 23 Jun 2022 01:18:54 -0700 Subject: [PATCH 05/11] Additional Solution for Portals Puzzle: -adding check for moving entire Portal folder into BigPortal as a possible solution to the portals puzzle, since so many people do this and get stuck here -also fixing a somewhat obscure bug where, if you save while the solstice trio are in your party and reload the game, weird things happen when trying to remove followers. This was mainly due to the actor equality check being based on reference instead of id, but reworked how the whole thing works anyways since now followers will walk to fill in the gaps instead of being teleported to fill them in, in the follower chain. --- scripts/Game_Party.rb | 18 ++++++++++-------- scripts/Script.rb | 8 +++++--- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/scripts/Game_Party.rb b/scripts/Game_Party.rb index fc38a830..9d30b635 100644 --- a/scripts/Game_Party.rb +++ b/scripts/Game_Party.rb @@ -131,15 +131,17 @@ def remove_actor(actor_id) actor = $game_actors[actor_id] # Delete follower unless $game_followers.empty? - follower = $game_followers.pop - $scene.remove_follower(follower) - new_actor = follower.actor - if new_actor != actor - $game_followers.reverse_each do |follower| - new_actor, follower.actor = follower.actor, new_actor - break if new_actor == actor + for i in 0...$game_followers.size + follower = $game_followers[i] + if follower.actor.id == actor.id + if $game_followers.size > i + 1 + $game_followers[i + 1].leader = follower.leader + end + $game_followers.delete_at(i) + $scene.remove_follower(follower) + break end - end + end end # Delete actor @actors.delete(actor) diff --git a/scripts/Script.rb b/scripts/Script.rb index 38b3ce6f..119312ad 100644 --- a/scripts/Script.rb +++ b/scripts/Script.rb @@ -565,12 +565,14 @@ def self.is_key_in_bigbox(numb) portal_path = Oneshot::GAME_PATH + "/Oneshot/BigPortal" case numb when 1 - return File.exists?(portal_path + "/keyB.txt") + return (File.exists?(portal_path + "/keyB.txt") or File.exists?(portal_path + "/Portal1/keyB.txt")) when 2 - return File.exists?(portal_path + "/keyG.txt") + return (File.exists?(portal_path + "/keyG.txt") or File.exists?(portal_path + "/Portal2/keyG.txt")) when 3 - return File.exists?(portal_path + "/keyR.txt") + return (File.exists?(portal_path + "/keyR.txt") or File.exists?(portal_path + "/Portal3/keyR.txt")) end + + return false end From 99602129d8cf0a5e5cc379b6e1078a90e45c33d8 Mon Sep 17 00:00:00 2001 From: GIR GIR Date: Wed, 2 Nov 2022 01:32:15 -0700 Subject: [PATCH 06/11] Quick Loc Fixes: -no longer doing special scaling for localized item icons since it's kind of weird (and wasn't ever used) -adding localization support for npc sheets --- scripts/Scene_Map.rb | 6 ++---- scripts/Sprite_Character.rb | 12 ++++++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/scripts/Scene_Map.rb b/scripts/Scene_Map.rb index f79c1d03..616f87e6 100644 --- a/scripts/Scene_Map.rb +++ b/scripts/Scene_Map.rb @@ -173,13 +173,11 @@ def update translation_name = "#{$persistent.langcode}/#{name}" if File.exists?("Graphics/Icons/#{translation_name}.png") @item_icon.bitmap = RPG::Cache.icon(translation_name) - @item_icon.zoom_x = 1.0 - @item_icon.zoom_y = 1.0 else @item_icon.bitmap = RPG::Cache.icon(name) - @item_icon.zoom_x = 2.0 - @item_icon.zoom_y = 2.0 end + @item_icon.zoom_x = 2.0 + @item_icon.zoom_y = 2.0 if @item_id == 58 #clover @item_icon_flash.bitmap = RPG::Cache.icon($data_items[@item_id].icon_name + "2") diff --git a/scripts/Sprite_Character.rb b/scripts/Sprite_Character.rb index d45a4c76..d2009815 100644 --- a/scripts/Sprite_Character.rb +++ b/scripts/Sprite_Character.rb @@ -53,8 +53,16 @@ def update self.oy = 32 # If tile ID value is invalid else - @sprite.bitmap = RPG::Cache.character(@character.character_name, - @character.character_hue) + name = @character.character_name + translation_name = "#{$persistent.langcode}/#{name}" + if File.exists?("Graphics/Characters/#{translation_name}.png") + @sprite.bitmap = RPG::Cache.character(translation_name, + @character.character_hue) + else + @sprite.bitmap = RPG::Cache.character(name, + @character.character_hue) + end + begin @light_sprite.bitmap = RPG::Cache.lightmap(@character.character_name) @light_sprite.visible = true From 6990f53088a98e500020bbb03c54f82ec807ef34 Mon Sep 17 00:00:00 2001 From: MeiraxG <117860543+MeiraxG@users.noreply.github.com> Date: Fri, 11 Nov 2022 21:50:47 +0400 Subject: [PATCH 07/11] Cyrillic Well, that is cyrillic --- scripts/i18n_English.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/scripts/i18n_English.rb b/scripts/i18n_English.rb index 27f3aa67..246bdb6b 100644 --- a/scripts/i18n_English.rb +++ b/scripts/i18n_English.rb @@ -32,6 +32,28 @@ def self.create_input } input.index = 17 # Start on あ input.table_height = 5 + input.init + elsif $persistent.langcode == 'ru' + input = Window_NameInput.new + input.ok_text = 'ОК' + input.set_mode_buttons [[tr('Англ.'), tr('Рус.')]] + input.character_tables = { + [0] => [ # Latin + "A","B","C","D","E","F","G","H","I","a","b","c","d","e","f","g","h","i", + "J","K","L","M","N","O","P","Q","R","j","k","l","m","n","o","p","q","r", + "S","T","U","V","W","X","Y","Z"," ","s","t","u","v","w","x","y","z"," ", + "0","1","2","3","4","+","-","=","&","!","?","'",'"',".",",",":",";","$", + "5","6","7","8","9","*","/","#","|","[","]","(",")","<",">","{","}","@", + ], + [1] => [ # Cyrillic + "А","Б","В","Г","Д","Е","Ё","Ж","З","а","б","в","г","д","е","ё","ж","з", + "И","Й","К","Л","М","Н","О","П","Р","и","й","к","л","м","н","о","п","р", + "С","Т","У","Ф","Х","Ц","Ч","Ш"," ","с","т","у","ф","х","ц","ч","ш"," ", + "Щ","Ъ","Ы","Ь","Э","Ю","Я","♥","♦","щ","ъ","ы","ь","э","ю","я","♣","♠", + "☼","%","~","^","€","§","\\","№","©","®","™","♪","♫","▲","■","«","»","¿", + ], + } + input.table_height = 5 input.init else input = Window_NameInput.new From 34f08e10c3c9a8aacf5e16f86cd9ad291226217d Mon Sep 17 00:00:00 2001 From: GIR GIR Date: Wed, 16 Nov 2022 02:35:25 -0800 Subject: [PATCH 08/11] Localized Niko Name Checks: -now the niko name check values are localized --- scripts/Script.rb | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/scripts/Script.rb b/scripts/Script.rb index 119312ad..653edb3c 100644 --- a/scripts/Script.rb +++ b/scripts/Script.rb @@ -16,7 +16,8 @@ def self.py def self.is_name_swear test_string = $game_oneshot.player_name.downcase - if ["fuck", "shit", "ass", "cock", "damn", "penis", "tiddy", "titty", "cunt", "fag", "whore"].any? { |swear| test_string.include? swear } + list_of_swears = tr("NAME_SWEARS").to_str.split(",") + if list_of_swears.any? { |swear| test_string.include? swear.downcase } return true end return false @@ -24,7 +25,8 @@ def self.is_name_swear def self.is_name_niko test_string = $game_oneshot.player_name.downcase - if test_string == "niko" + list_of_niko_names = tr("NAME_NIKOS").to_str.split(",") + if list_of_niko_names.any? { |niko_name| test_string == niko_name.downcase } return true end return false @@ -32,7 +34,8 @@ def self.is_name_niko def self.is_name_like_niko test_string = $game_oneshot.player_name.downcase - if ["nico", "nikko", "nicco", "nikoh", "nicoh"].any? { |name| test_string == name } + list_of_niko_like_names = tr("NAMES_LIKE_NIKO").to_str.split(",") + if list_of_niko_like_names.any? { |niko_like_name| test_string == niko_like_name.downcase } return true end return false @@ -40,7 +43,8 @@ def self.is_name_like_niko def self.is_name_like_mom_dad test_string = $game_oneshot.player_name.downcase - if ["mom", "dad", "mommy", "daddy", "mama", "papa"].any? { |name| test_string == name } + list_of_names_like_mom_dad = tr("NAMES_LIKE_MOMDAD").to_str.split(",") + if list_of_names_like_mom_dad.any? { |momdad_name| test_string == momdad_name.downcase } return true end return false @@ -48,7 +52,8 @@ def self.is_name_like_mom_dad def self.is_name_gross test_string = $game_oneshot.player_name.downcase - if ["poo", "pee", "fart", "stinky", "piss", "shit", "slimy"].any? { |name| test_string == name } + list_of_gross_names = tr("NAMES_GROSS").to_str.split(",") + if list_of_gross_names.any? { |gross_name| test_string == gross_name.downcase } return true end return false From e0c964b19adb6f9ca9c119130e38989df0b25f27 Mon Sep 17 00:00:00 2001 From: GIR GIR Date: Sun, 20 Nov 2022 02:20:07 -0800 Subject: [PATCH 09/11] tr Null handling: -adding safer null handling to tr(), to try to fix a bug with some older saves -fixing issue where you can't close the game on the title screen -making it so automash skips text pauses --- scripts/Scene_Title.rb | 2 ++ scripts/Window_Message.rb | 6 ++++-- scripts/i18n_Language.rb | 6 +++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/scripts/Scene_Title.rb b/scripts/Scene_Title.rb index 85539fb5..4a5e2d69 100644 --- a/scripts/Scene_Title.rb +++ b/scripts/Scene_Title.rb @@ -41,6 +41,7 @@ def main end load_perma_flags Window_Settings.load_settings + Oneshot.allow_exit true @window_settings_title = Window_Settings.new # Make title graphic @@ -227,6 +228,7 @@ def command_continue # Play decision SE Audio.se_play('Audio/SE/title_decision.wav') # Update map (run parallel process event) + Oneshot.allow_exit false $game_map.update # Switch to map screen $scene = Scene_Map.new diff --git a/scripts/Window_Message.rb b/scripts/Window_Message.rb index bbe2dcb8..4aad968d 100644 --- a/scripts/Window_Message.rb +++ b/scripts/Window_Message.rb @@ -204,6 +204,8 @@ def tick return if @text_pause > 0 # Don't do anything if we're done return if !@drawing_text + + autoMash = (Input.press?(Input::R) && $game_switches[253]) # Get 1 text character in c (loop until unable to get text) while ((c = @text.slice!(0)) != nil) @@ -227,13 +229,13 @@ def tick # \. if c == "\001" # Pause - @text_pause = 10 + @text_pause = autoMash ? 0 : 10 return end # \| if c == "\002" # Pause - @text_pause = 10*4 + @text_pause = autoMash ? 0 : 10*4 return end if c == "\003" diff --git a/scripts/i18n_Language.rb b/scripts/i18n_Language.rb index e26f19de..88763eaf 100644 --- a/scripts/i18n_Language.rb +++ b/scripts/i18n_Language.rb @@ -99,7 +99,11 @@ def tr(string) else rv = string end - dbg_print(string + " -> " + rv) + + if rv.nil? + rv = "NULL" + end + #dbg_print(string + " -> " + rv) return String.new(rv) end From f7eae9d06eb0c393b1a28b824f4563212b00455b Mon Sep 17 00:00:00 2001 From: GIR Date: Sat, 3 Dec 2022 23:31:40 -0800 Subject: [PATCH 10/11] In Game Timer: -adding an in-game timer that can be visible if the user adds a specific file (igt.ini) to their game's main directory --- scripts/Game_Temp.rb | 6 ++++-- scripts/Scene_Map.rb | 24 ++++++++++++++++++++++++ scripts/Scene_Title.rb | 7 +++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/scripts/Game_Temp.rb b/scripts/Game_Temp.rb index 336095d3..4ee02ee2 100644 --- a/scripts/Game_Temp.rb +++ b/scripts/Game_Temp.rb @@ -66,6 +66,7 @@ class Game_Temp attr_accessor :prompt_wait # wait for delay caused by prompt attr_accessor :menus_visible attr_accessor :countdown_password + attr_accessor :igt_timer_visible #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- @@ -123,8 +124,9 @@ def initialize @footstep_sfx = nil @filmsprite = nil @prompt_wait = 0 - @menus_visible = false - @countdown_password = "" + @menus_visible = false + @countdown_password = "" + @igt_timer_visible = false end def bgm_fadein(game_system) diff --git a/scripts/Scene_Map.rb b/scripts/Scene_Map.rb index 616f87e6..94e5a8ba 100644 --- a/scripts/Scene_Map.rb +++ b/scripts/Scene_Map.rb @@ -9,6 +9,14 @@ class Scene_Map # * Main Processing #-------------------------------------------------------------------------- def main + @in_game_timer = Sprite.new + @in_game_timer.x = 8; + @in_game_timer.y = 8; + @in_game_timer.bitmap = Bitmap.new(140, 30) + @in_game_timer.bitmap.fill_rect(0, 0, 140, 30, Color.new(0, 0, 0)) + @in_game_timer.z = 10001 + @in_game_timer.visible = $game_temp.igt_timer_visible + # Make sprite set @spriteset = Spriteset_Map.new # Make message window @@ -82,6 +90,7 @@ def main @item_icon.dispose @item_icon_flash.dispose @blackfade.dispose + @in_game_timer.dispose # If switching to title screen if $scene.is_a?(Scene_Title) # Fade out screen @@ -93,6 +102,21 @@ def main # * Frame Update #-------------------------------------------------------------------------- def update + if $game_temp.igt_timer_visible && (Graphics.frame_count != nil) + total_sec = Graphics.frame_count / Graphics.frame_rate + hour = total_sec / 60 / 60 + min = total_sec / 60 % 60 + sec = total_sec % 60 + millisec = ((Graphics.frame_count * 1000) / Graphics.frame_rate) % 1000 + time_string = sprintf("%02d:%02d:%02d.%03d", hour, min, sec, millisec) + + igt_seconds = (Graphics.frame_count / 60) % 60 + igt_minutes = (Graphics.frame_count / (60 * 60)) % 60 + igt_hours = Graphics.frame_count / (60 * 60 * 60) + @in_game_timer.bitmap.fill_rect(0, 0, 140, 30, Color.new(0, 0, 0, 128)) + @in_game_timer.bitmap.draw_text(8, 0, 132, 30, time_string) + end + if Input.quit? # put in dialogue boxes here for player # either telling them they can't quit during a cutscene diff --git a/scripts/Scene_Title.rb b/scripts/Scene_Title.rb index 4a5e2d69..201d441f 100644 --- a/scripts/Scene_Title.rb +++ b/scripts/Scene_Title.rb @@ -32,6 +32,11 @@ def main new_game #unless load # Make system object $game_system = Game_System.new + + if File.exists?("igt.ini") + $game_temp.igt_timer_visible = true + end + # Skip title screen if debug mode (or demo, but not GDC) if $debug || ($demo && !$GDC) || save_exists $game_map.update @@ -225,6 +230,8 @@ def new_game # * Command: Continue #-------------------------------------------------------------------------- def command_continue + # Reset frame count for measuring play time + Graphics.frame_count = 0 # Play decision SE Audio.se_play('Audio/SE/title_decision.wav') # Update map (run parallel process event) From 231d5ae48934135b2559a7728c15669439f51185 Mon Sep 17 00:00:00 2001 From: GIR Date: Sat, 3 Dec 2022 23:34:42 -0800 Subject: [PATCH 11/11] -removing unnecessary vars --- scripts/Scene_Map.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/Scene_Map.rb b/scripts/Scene_Map.rb index 94e5a8ba..de105459 100644 --- a/scripts/Scene_Map.rb +++ b/scripts/Scene_Map.rb @@ -110,9 +110,6 @@ def update millisec = ((Graphics.frame_count * 1000) / Graphics.frame_rate) % 1000 time_string = sprintf("%02d:%02d:%02d.%03d", hour, min, sec, millisec) - igt_seconds = (Graphics.frame_count / 60) % 60 - igt_minutes = (Graphics.frame_count / (60 * 60)) % 60 - igt_hours = Graphics.frame_count / (60 * 60 * 60) @in_game_timer.bitmap.fill_rect(0, 0, 140, 30, Color.new(0, 0, 0, 128)) @in_game_timer.bitmap.draw_text(8, 0, 132, 30, time_string) end