diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a520d1f736f..639b91f9dcf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,20 +12,40 @@ jobs: strategy: fail-fast: false matrix: - version: [GZ2E01] + version: [GZ2E01, GZ2P01, GZ2J01, ShieldD] steps: # Checkout the repository - name: Checkout uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: recursive # Set Git config - name: Git config run: git config --global --add safe.directory "$GITHUB_WORKSPACE" + # Normalize file mod times + - name: Restore timestamps + run: | + uv run https://raw.githubusercontent.com/MestreLion/git-tools/refs/tags/v2022.12/git-restore-mtime \ + --merge --commit-time + # Copy the original files to the workspace - name: Prepare - run: cp -R /orig . + run: cp -a /orig . + + # Restore cached files + - name: Cache build + uses: actions/cache@v4 + with: + path: | + build + .ninja_deps + .ninja_log + key: ${{ runner.os }}-${{ matrix.version }}-${{ github.sha }} + restore-keys: ${{ runner.os }}-${{ matrix.version }}- # Build the project - name: Build diff --git a/config/GZ2J01/build.sha1 b/config/GZ2J01/build.sha1 index 5b3e8df58e7..9965fcb310f 100644 --- a/config/GZ2J01/build.sha1 +++ b/config/GZ2J01/build.sha1 @@ -38,7 +38,7 @@ e2b3f3d5608488cd666f58a2e4c86372affdfba7 build/GZ2J01/d_a_b_zant_sima/d_a_b_zan 05e81d14b9877e633793207c654f32f446001219 build/GZ2J01/d_a_coach_fire/d_a_coach_fire.rel d9c731edaac846cc173ba15d94569e7be0235366 build/GZ2J01/d_a_cow/d_a_cow.rel 34ae366fd852526a84c22171be6437a1e192923a build/GZ2J01/d_a_crod/d_a_crod.rel -dc67fc8a876e527467db78ea08da1c7335bc2a2a build/GZ2J01/d_a_cstaf/d_a_cstaf.rel +dc67fc8a876e527467db78ea08da1c7335bc2a2a build/GZ2J01/d_a_cstaF/d_a_cstaF.rel 982430ca8ca7b2e769177ee28db0e5debd392ffe build/GZ2J01/d_a_cstatue/d_a_cstatue.rel 75e5c8adc179f3f7a1c30224ba8c97373165d86e build/GZ2J01/d_a_demo00/d_a_demo00.rel 0cb8467162687d1a7ffca4eafc1acecf4c8be0ba build/GZ2J01/d_a_demo_item/d_a_demo_item.rel @@ -47,7 +47,7 @@ ec6e05228cfebb6946d8c8a5594c452a4e49ddb0 build/GZ2J01/d_a_dmidna/d_a_dmidna.rel 5b8f01101c41e8a5206ee7d19705c09a19ec717c build/GZ2J01/d_a_do/d_a_do.rel 888d98eebd5b7e52bf15ca692818ae3ade182e1c build/GZ2J01/d_a_door_boss/d_a_door_boss.rel 4c1d5bab81a58a0dc815940acbc22455e426b257 build/GZ2J01/d_a_door_bossL5/d_a_door_bossL5.rel -6cfab11b91f85e111398ccc262f2eb8eabea7913 build/GZ2J01/d_a_door_bossl1/d_a_door_bossl1.rel +6cfab11b91f85e111398ccc262f2eb8eabea7913 build/GZ2J01/d_a_door_bossL1/d_a_door_bossL1.rel e5ca6b138220d013361bba9c0e69352188a7a799 build/GZ2J01/d_a_door_dbdoor00/d_a_door_dbdoor00.rel d9d4cc11d51301a762e42091ccba94b5074474c4 build/GZ2J01/d_a_door_knob00/d_a_door_knob00.rel bb6f31009a51e743a7b0123acc282b09571e2323 build/GZ2J01/d_a_door_mbossL1/d_a_door_mbossL1.rel @@ -390,7 +390,7 @@ f95e843748d9a91654ce25b91c8b45a016cf7385 build/GZ2J01/d_a_obj_glowSphere/d_a_ob 1225251262c9c1add006df86c4ea4ceff908caf3 build/GZ2J01/d_a_obj_gm/d_a_obj_gm.rel fcd44475ede26bf4da92abde40cf66f4f5eba9a6 build/GZ2J01/d_a_obj_goGate/d_a_obj_goGate.rel e6b87be2b2450b8542e422a4e4461e9b43834330 build/GZ2J01/d_a_obj_gomikabe/d_a_obj_gomikabe.rel -66876bcdb0f34a75b51f57a760471652e5712591 build/GZ2J01/d_a_obj_gptaru/d_a_obj_gptaru.rel +66876bcdb0f34a75b51f57a760471652e5712591 build/GZ2J01/d_a_obj_gpTaru/d_a_obj_gpTaru.rel b1682a2776d3072b7e07892d93fec6443b5b7fb3 build/GZ2J01/d_a_obj_gra2/d_a_obj_gra2.rel 1cd031df346496d73112fdcde7b4b7e988cf5f9e build/GZ2J01/d_a_obj_graWall/d_a_obj_graWall.rel bee0ae399fa4c4ee53d09b28ad5d53842dcb2eee build/GZ2J01/d_a_obj_gra_rock/d_a_obj_gra_rock.rel @@ -441,7 +441,7 @@ dffe55d65a668d7e187a0e65937614bf55db35f2 build/GZ2J01/d_a_obj_kgate/d_a_obj_kga a86bfe4c26d97591489998706ed2cbb1d8ef8d99 build/GZ2J01/d_a_obj_klift00/d_a_obj_klift00.rel 50ae42bf20032e8edf8dc2b5f2171448024ce5e5 build/GZ2J01/d_a_obj_knBullet/d_a_obj_knBullet.rel aa87252c28339178492f6f07ce5dcef6bdc189e7 build/GZ2J01/d_a_obj_kshutter/d_a_obj_kshutter.rel -7df6712ec3489a6b3ec5bb8c52d1baacc7ab9890 build/GZ2J01/d_a_obj_ktonfire/d_a_obj_ktonfire.rel +7df6712ec3489a6b3ec5bb8c52d1baacc7ab9890 build/GZ2J01/d_a_obj_ktOnFire/d_a_obj_ktOnFire.rel 23fbb23088bdd3ddfefe550d4355258373285228 build/GZ2J01/d_a_obj_kuwagata/d_a_obj_kuwagata.rel d6e127a12cfaf7d2a92190ac6bbfc3e15adbde67 build/GZ2J01/d_a_obj_kwheel00/d_a_obj_kwheel00.rel f981ebe94e731d7529408538a4863e2b77e8a581 build/GZ2J01/d_a_obj_kwheel01/d_a_obj_kwheel01.rel @@ -454,7 +454,7 @@ c62dad75812978980c3e4cf64d8e1cef19a01229 build/GZ2J01/d_a_obj_ladder/d_a_obj_la fcdf5517c8b4714f6fe6fe7041a08d008e3c9b82 build/GZ2J01/d_a_obj_lp/d_a_obj_lp.rel 0b63b012f4c6014f7276962d9ffbac0c714bfa94 build/GZ2J01/d_a_obj_lv1Candle00/d_a_obj_lv1Candle00.rel c3ca3a18b7592ef55d1658cb33dea29d72ce5181 build/GZ2J01/d_a_obj_lv1Candle01/d_a_obj_lv1Candle01.rel -392ec10bb78c16dbbecf7b6162c31e98ca572dbd build/GZ2J01/d_a_obj_lv2candle/d_a_obj_lv2candle.rel +392ec10bb78c16dbbecf7b6162c31e98ca572dbd build/GZ2J01/d_a_obj_lv2Candle/d_a_obj_lv2Candle.rel 3408d93b02721d13c1f72aa774ca3505fcf0576c build/GZ2J01/d_a_obj_lv3Candle/d_a_obj_lv3Candle.rel e742696721d4cc447dae5f489291ec0968b0450c build/GZ2J01/d_a_obj_lv3Water/d_a_obj_lv3Water.rel 8d37534dd361d08ed3f2eb93cb47959f39a5060d build/GZ2J01/d_a_obj_lv3Water2/d_a_obj_lv3Water2.rel @@ -580,7 +580,7 @@ e66e31dcaae918691a946b1934d5d4215138fa05 build/GZ2J01/d_a_obj_ss_item/d_a_obj_s fa50b43b5e91eb3a4edca4aaa7ce334664eea12e build/GZ2J01/d_a_obj_stairBlock/d_a_obj_stairBlock.rel c7129070b57592e655d5c7d17ad3e9d6368452c4 build/GZ2J01/d_a_obj_stick/d_a_obj_stick.rel 09729e87862a77db925e955f546172f8ec35b908 build/GZ2J01/d_a_obj_stone/d_a_obj_stone.rel -1ee840a5848698ec8103748abd43f73a99897071 build/GZ2J01/d_a_obj_stonemark/d_a_obj_stonemark.rel +1ee840a5848698ec8103748abd43f73a99897071 build/GZ2J01/d_a_obj_stoneMark/d_a_obj_stoneMark.rel d62984c6a258bb34ecf04490f4a84f89ee93b146 build/GZ2J01/d_a_obj_stopper/d_a_obj_stopper.rel 2a92c3cb850b9f2c4b20f159936257ffec968644 build/GZ2J01/d_a_obj_stopper2/d_a_obj_stopper2.rel 7f511ccdb6ba44d4976cfe1fe0b8c893b048a843 build/GZ2J01/d_a_obj_suisya/d_a_obj_suisya.rel @@ -589,7 +589,7 @@ c1642dbf9cba0f471838cba3b54910e7db486300 build/GZ2J01/d_a_obj_swBallA/d_a_obj_s 2340a46a1dd9b03e4513edb1f6a6564f5bce8052 build/GZ2J01/d_a_obj_swBallB/d_a_obj_swBallB.rel 233e2e42c471b222940f7e700dfe10701f3a25a7 build/GZ2J01/d_a_obj_swBallC/d_a_obj_swBallC.rel 36800b41440fdcb8fb8a6edfaa4334e7fa6cd88c build/GZ2J01/d_a_obj_swLight/d_a_obj_swLight.rel -3473aad68f1b39dde8988911900c1fc1945649fe build/GZ2J01/d_a_obj_swallshutter/d_a_obj_swallshutter.rel +3473aad68f1b39dde8988911900c1fc1945649fe build/GZ2J01/d_a_obj_sWallShutter/d_a_obj_sWallShutter.rel 2d8260c4c658e3fc2d919884587e80f4cc32f649 build/GZ2J01/d_a_obj_swchain/d_a_obj_swchain.rel c1cd73abbca3edfc58c8498f7e894ed2e42038d0 build/GZ2J01/d_a_obj_swhang/d_a_obj_swhang.rel e49738b5e37fbe1272f44a22c1f3384ccca5a779 build/GZ2J01/d_a_obj_sword/d_a_obj_sword.rel @@ -688,7 +688,7 @@ ebf3e31403c892df5d8fe499911d1980b29d8a16 build/GZ2J01/d_a_tag_bottle_item/d_a_t 4b9b9717d3c7e7f8fbee58f7c0cce0c5eb37538b build/GZ2J01/d_a_tag_camera/d_a_tag_camera.rel ad8cd80000b52b9f32db8456495a18c918e082d9 build/GZ2J01/d_a_tag_chgrestart/d_a_tag_chgrestart.rel 8b4350b451e282fd16d07d5e8ed1572112cf203b build/GZ2J01/d_a_tag_chkpoint/d_a_tag_chkpoint.rel -4e73db515946e41884f55c063d4680985e88b66d build/GZ2J01/d_a_tag_cstasw/d_a_tag_cstasw.rel +4e73db515946e41884f55c063d4680985e88b66d build/GZ2J01/d_a_tag_CstaSw/d_a_tag_CstaSw.rel 965473fe871c58ed47832dcd5b5a8100c00544ad build/GZ2J01/d_a_tag_csw/d_a_tag_csw.rel 71303ad1ad9c192f389ca5ba87c9d03e6668f8ea build/GZ2J01/d_a_tag_escape/d_a_tag_escape.rel 9229453f33781b9c5309c3564ddf677c6813ff9b build/GZ2J01/d_a_tag_event/d_a_tag_event.rel diff --git a/config/GZ2J01/rels/d_a_obj_batta/symbols.txt b/config/GZ2J01/rels/d_a_obj_batta/symbols.txt index 52d6cfdad04..78b1c7e393a 100644 --- a/config/GZ2J01/rels/d_a_obj_batta/symbols.txt +++ b/config/GZ2J01/rels/d_a_obj_batta/symbols.txt @@ -129,6 +129,6 @@ __vt__12daObjBATTA_c = .data:0x000001E8; // type:object size:0xC scope:global __vt__12J3DFrameCtrl = .data:0x000001F4; // type:object size:0xC scope:global __vt__16daObj_BattaHIO_c = .data:0x00000200; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -l_HIOInit = .bss:0x00000008; // type:object size:0x1 data:byte scope:local +l_HIOInit = .bss:0x00000008; // type:object size:0x1 scope:local data:byte @3769 = .bss:0x0000000C; // type:object size:0xC scope:local l_HIO = .bss:0x00000018; // type:object size:0x10 scope:global align:4 data:float diff --git a/config/GZ2J01/rels/d_a_obj_gomikabe/symbols.txt b/config/GZ2J01/rels/d_a_obj_gomikabe/symbols.txt index 98b2076bbe0..81e36fcb567 100644 --- a/config/GZ2J01/rels/d_a_obj_gomikabe/symbols.txt +++ b/config/GZ2J01/rels/d_a_obj_gomikabe/symbols.txt @@ -91,6 +91,6 @@ __vt__8cM3dGSph = .data:0x00000090; // type:object size:0xC scope:global __vt__15daObjGOMIKABE_c = .data:0x0000009C; // type:object size:0x28 scope:global __vt__19daObjGOMIKABE_HIO_c = .data:0x000000C4; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -l_HIOInit = .bss:0x00000008; // type:object size:0x1 data:byte scope:local +l_HIOInit = .bss:0x00000008; // type:object size:0x1 scope:local data:byte @3761 = .bss:0x0000000C; // type:object size:0xC scope:local l_HIO = .bss:0x00000018; // type:object size:0x8 scope:local data:byte diff --git a/config/GZ2J01/rels/d_a_obj_kita/symbols.txt b/config/GZ2J01/rels/d_a_obj_kita/symbols.txt index 5e9ea6b884f..b71b6895a0f 100644 --- a/config/GZ2J01/rels/d_a_obj_kita/symbols.txt +++ b/config/GZ2J01/rels/d_a_obj_kita/symbols.txt @@ -50,6 +50,6 @@ l_daObj_Kita_Method = .data:0x00000000; // type:object size:0x20 scope:local g_profile_OBJ_KITA = .data:0x00000020; // type:object size:0x30 scope:global __vt__16daObj_Kita_HIO_c = .data:0x00000050; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -l_HIOInit = .bss:0x00000008; // type:object size:0x1 data:byte scope:local +l_HIOInit = .bss:0x00000008; // type:object size:0x1 scope:local data:byte @3764 = .bss:0x0000000C; // type:object size:0xC scope:local l_HIO = .bss:0x00000018; // type:object size:0x18 scope:local data:byte diff --git a/config/GZ2J01/rels/d_a_obj_msima/symbols.txt b/config/GZ2J01/rels/d_a_obj_msima/symbols.txt index 5733436e911..d9491231891 100644 --- a/config/GZ2J01/rels/d_a_obj_msima/symbols.txt +++ b/config/GZ2J01/rels/d_a_obj_msima/symbols.txt @@ -88,7 +88,7 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa @1012 = .bss:0x0000003C; // type:object size:0x1 scope:local @1010 = .bss:0x00000040; // type:object size:0x1 scope:local @1009 = .bss:0x00000044; // type:object size:0x1 scope:local -l_HIOInit = .bss:0x00000045; // type:object size:0x1 data:byte scope:local +l_HIOInit = .bss:0x00000045; // type:object size:0x1 scope:local data:byte @3858 = .bss:0x00000048; // type:object size:0xC scope:local l_HIO = .bss:0x00000054; // type:object size:0x14 scope:local data:byte @3958 = .bss:0x00000068; // type:object size:0xC scope:local diff --git a/config/GZ2P01/build.sha1 b/config/GZ2P01/build.sha1 index 603d33b631a..0dc0c7baaa6 100644 --- a/config/GZ2P01/build.sha1 +++ b/config/GZ2P01/build.sha1 @@ -38,7 +38,7 @@ fc62d97ce37bfb9bf1127e36bd7d3379001410e0 build/GZ2P01/d_a_coach_2D/d_a_coach_2D f4a16d64975358bfa02c25a7fd1b2764aa9bb095 build/GZ2P01/d_a_coach_fire/d_a_coach_fire.rel c01daf6d12a2424eaa4ecd422ea769220d6900a3 build/GZ2P01/d_a_cow/d_a_cow.rel f181645387e11b56de58368c69b721cfd1617a6d build/GZ2P01/d_a_crod/d_a_crod.rel -12a9764ae9a7a4418638b8479d8213fed07842d5 build/GZ2P01/d_a_cstaf/d_a_cstaf.rel +12a9764ae9a7a4418638b8479d8213fed07842d5 build/GZ2P01/d_a_cstaF/d_a_cstaF.rel 87df56c78ef7618cdffd6254ff662bcc7e41f82d build/GZ2P01/d_a_cstatue/d_a_cstatue.rel e26cf0e5dabe0540a1a87f31fd43baf0f39f03d1 build/GZ2P01/d_a_demo00/d_a_demo00.rel 8574d6f9d3b84355e742faa34ebd074101d4d396 build/GZ2P01/d_a_demo_item/d_a_demo_item.rel @@ -47,7 +47,7 @@ fb4b2833d054e7a9b37eb8a5c3b61dda4cd5e07a build/GZ2P01/d_a_disappear/d_a_disappe a2a510ed8bdfeed8e662cb9a77fe4d58f2869da4 build/GZ2P01/d_a_do/d_a_do.rel 6e4601116067427c7840d5a19c3aa58b2c976f05 build/GZ2P01/d_a_door_boss/d_a_door_boss.rel f0216749543bdf4cacc79a977088ff8993c9ae62 build/GZ2P01/d_a_door_bossL5/d_a_door_bossL5.rel -48f58ed9c2fadedac424ddad65d94d738de84be6 build/GZ2P01/d_a_door_bossl1/d_a_door_bossl1.rel +48f58ed9c2fadedac424ddad65d94d738de84be6 build/GZ2P01/d_a_door_bossL1/d_a_door_bossL1.rel 48494f8cbeb129af1789877fe697587bcaba1727 build/GZ2P01/d_a_door_dbdoor00/d_a_door_dbdoor00.rel 5d29ba6637d0c01c2f85dbd6403f9b8667532a59 build/GZ2P01/d_a_door_knob00/d_a_door_knob00.rel 07f3ecd6768b7a68645294879e1f04df772b1fcd build/GZ2P01/d_a_door_mbossL1/d_a_door_mbossL1.rel @@ -390,7 +390,7 @@ da9f33fe7f408b9502742098ce920ddd7f2f1e03 build/GZ2P01/d_a_obj_food/d_a_obj_food 2304e39c128a470bf366bdd5cca016c26c659ae1 build/GZ2P01/d_a_obj_gm/d_a_obj_gm.rel 5a9f57a9cde721cdef8a85ee34f5f010904eaa60 build/GZ2P01/d_a_obj_goGate/d_a_obj_goGate.rel cc19b90d818fc0f662619d41a149b7c4ae031a77 build/GZ2P01/d_a_obj_gomikabe/d_a_obj_gomikabe.rel -15127e69f0705d9daaa54db977bb8a6b82ffceae build/GZ2P01/d_a_obj_gptaru/d_a_obj_gptaru.rel +15127e69f0705d9daaa54db977bb8a6b82ffceae build/GZ2P01/d_a_obj_gpTaru/d_a_obj_gpTaru.rel 0ecdb2d7f8435c2fbcbb0a82eef998ff2d767752 build/GZ2P01/d_a_obj_gra2/d_a_obj_gra2.rel 871c1fb23174f4ce8dcf79f09699ef60a987f826 build/GZ2P01/d_a_obj_graWall/d_a_obj_graWall.rel 7800cb1929d7f71dca7fd02fab23d8a1d62f2a6d build/GZ2P01/d_a_obj_gra_rock/d_a_obj_gra_rock.rel @@ -441,7 +441,7 @@ a6a9c7c4859cea49465b31ac17d51ee282b20d90 build/GZ2P01/d_a_obj_kkanban/d_a_obj_k a50744caeabc23e43daf1e8942a67f1b7efa22e6 build/GZ2P01/d_a_obj_klift00/d_a_obj_klift00.rel 24daa3d4ead70818528f1ad5bb7b7e70f2efd2a3 build/GZ2P01/d_a_obj_knBullet/d_a_obj_knBullet.rel 194ba5b547cd31f2e98b1ba1724f4e7e28dbd05a build/GZ2P01/d_a_obj_kshutter/d_a_obj_kshutter.rel -a1f20af11da1b23301936aa6a3780caab87e797b build/GZ2P01/d_a_obj_ktonfire/d_a_obj_ktonfire.rel +a1f20af11da1b23301936aa6a3780caab87e797b build/GZ2P01/d_a_obj_ktOnFire/d_a_obj_ktOnFire.rel 027704c43922d80740f52c04806c71225b77be5f build/GZ2P01/d_a_obj_kuwagata/d_a_obj_kuwagata.rel e80567f0a44c0f8fe9c9544be0415b06ad630556 build/GZ2P01/d_a_obj_kwheel00/d_a_obj_kwheel00.rel e9629c0345f2eee85bf97ba5cf53e8255a65a294 build/GZ2P01/d_a_obj_kwheel01/d_a_obj_kwheel01.rel @@ -454,7 +454,7 @@ bfdd51cf46e04bef3734492f32041cb826d5a5ab build/GZ2P01/d_a_obj_lbox/d_a_obj_lbox 9a00e27c61c427eac7c13370ff2f73a53fe83c08 build/GZ2P01/d_a_obj_lp/d_a_obj_lp.rel e33d9d2453f2a0005e2257089e769cac043daa11 build/GZ2P01/d_a_obj_lv1Candle00/d_a_obj_lv1Candle00.rel 9ec2ed3811a7da54ab33104de55d5b65d1664be0 build/GZ2P01/d_a_obj_lv1Candle01/d_a_obj_lv1Candle01.rel -4573ec4c677bc9a6b33d68272d0e012e6f2c00fa build/GZ2P01/d_a_obj_lv2candle/d_a_obj_lv2candle.rel +4573ec4c677bc9a6b33d68272d0e012e6f2c00fa build/GZ2P01/d_a_obj_lv2Candle/d_a_obj_lv2Candle.rel c08ea37e0771adfe6a2b20933324cc06b2e9ded3 build/GZ2P01/d_a_obj_lv3Candle/d_a_obj_lv3Candle.rel 19c8af6d6009dd75fea665a173ef445084443656 build/GZ2P01/d_a_obj_lv3Water/d_a_obj_lv3Water.rel 0fe444ca092907a293c0635b5b3b0cf5f095e7ca build/GZ2P01/d_a_obj_lv3Water2/d_a_obj_lv3Water2.rel @@ -580,7 +580,7 @@ fac335dc152d7ccc9b840595163abf5b919baca4 build/GZ2P01/d_a_obj_ss_item/d_a_obj_s 37ffcbba505ed810c885d8aadc9454afd2422915 build/GZ2P01/d_a_obj_stairBlock/d_a_obj_stairBlock.rel 0a4215b1ce66a2e927eab78b0da233eb4895fec1 build/GZ2P01/d_a_obj_stick/d_a_obj_stick.rel 505a3b17890d065b07978ba4074bb05666f6dcef build/GZ2P01/d_a_obj_stone/d_a_obj_stone.rel -1b065b48f69493d4be6862c435cad4515f66f9f8 build/GZ2P01/d_a_obj_stonemark/d_a_obj_stonemark.rel +1b065b48f69493d4be6862c435cad4515f66f9f8 build/GZ2P01/d_a_obj_stoneMark/d_a_obj_stoneMark.rel 831a4005e4feb9e68e458becf3a85f6739b48b05 build/GZ2P01/d_a_obj_stopper/d_a_obj_stopper.rel 918314fbdffc925e21df35c51d02b2e75868760e build/GZ2P01/d_a_obj_stopper2/d_a_obj_stopper2.rel b65d8eebb912571249f3046722fccbdc95bdc8db build/GZ2P01/d_a_obj_suisya/d_a_obj_suisya.rel @@ -589,7 +589,7 @@ f62d3847b73273ddfa41942b63de9694d7dab16a build/GZ2P01/d_a_obj_swBallA/d_a_obj_s 3e27ad308bfbf288be9592794b167e581d1feff3 build/GZ2P01/d_a_obj_swBallB/d_a_obj_swBallB.rel 23483521ee13831025bcc978398a60a9498d367a build/GZ2P01/d_a_obj_swBallC/d_a_obj_swBallC.rel 073f2ec906fa877c1c8b75267d517515b20fa76b build/GZ2P01/d_a_obj_swLight/d_a_obj_swLight.rel -b576b86f8da31a501bcfc20a2a3fe51b03279b8a build/GZ2P01/d_a_obj_swallshutter/d_a_obj_swallshutter.rel +b576b86f8da31a501bcfc20a2a3fe51b03279b8a build/GZ2P01/d_a_obj_sWallShutter/d_a_obj_sWallShutter.rel b53ddb7a8fb35b8b40d894f5bfe108851bf14c81 build/GZ2P01/d_a_obj_swchain/d_a_obj_swchain.rel 15c2f8488d479eb4196aa1db57b1a5e6e8425341 build/GZ2P01/d_a_obj_swhang/d_a_obj_swhang.rel 39017914424402d23d5b180452944bcd9f1492e1 build/GZ2P01/d_a_obj_sword/d_a_obj_sword.rel @@ -688,7 +688,7 @@ d64ace890760d5beec337f0674319b298d2d1e07 build/GZ2P01/d_a_tag_bottle_item/d_a_t 6f6241d16ba53d44d2556727b47a882825d5c68b build/GZ2P01/d_a_tag_camera/d_a_tag_camera.rel e30941ae5a722bd26cebfb7cc8845a5ee5b8b7fe build/GZ2P01/d_a_tag_chgrestart/d_a_tag_chgrestart.rel e924ef3f906faeb26928392a23cb5d6fac9933af build/GZ2P01/d_a_tag_chkpoint/d_a_tag_chkpoint.rel -d4c36eeb04a523188d5cdbac1528b73fd93905ac build/GZ2P01/d_a_tag_cstasw/d_a_tag_cstasw.rel +d4c36eeb04a523188d5cdbac1528b73fd93905ac build/GZ2P01/d_a_tag_CstaSw/d_a_tag_CstaSw.rel f5377e6d7c3f171b1274ea0c8bf98ae59a3f039c build/GZ2P01/d_a_tag_csw/d_a_tag_csw.rel 072b39bcf043937ba18c020f1a7555b91a2af9ef build/GZ2P01/d_a_tag_escape/d_a_tag_escape.rel 8d328465dbb384979a058da098c233adfdf00b96 build/GZ2P01/d_a_tag_event/d_a_tag_event.rel diff --git a/config/GZ2P01/rels/d_a_obj_batta/symbols.txt b/config/GZ2P01/rels/d_a_obj_batta/symbols.txt index 52d6cfdad04..78b1c7e393a 100644 --- a/config/GZ2P01/rels/d_a_obj_batta/symbols.txt +++ b/config/GZ2P01/rels/d_a_obj_batta/symbols.txt @@ -129,6 +129,6 @@ __vt__12daObjBATTA_c = .data:0x000001E8; // type:object size:0xC scope:global __vt__12J3DFrameCtrl = .data:0x000001F4; // type:object size:0xC scope:global __vt__16daObj_BattaHIO_c = .data:0x00000200; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -l_HIOInit = .bss:0x00000008; // type:object size:0x1 data:byte scope:local +l_HIOInit = .bss:0x00000008; // type:object size:0x1 scope:local data:byte @3769 = .bss:0x0000000C; // type:object size:0xC scope:local l_HIO = .bss:0x00000018; // type:object size:0x10 scope:global align:4 data:float diff --git a/config/GZ2P01/rels/d_a_obj_gomikabe/symbols.txt b/config/GZ2P01/rels/d_a_obj_gomikabe/symbols.txt index b4b6b266415..c63329fe7af 100644 --- a/config/GZ2P01/rels/d_a_obj_gomikabe/symbols.txt +++ b/config/GZ2P01/rels/d_a_obj_gomikabe/symbols.txt @@ -91,6 +91,6 @@ __vt__8cM3dGSph = .data:0x00000090; // type:object size:0xC scope:global __vt__15daObjGOMIKABE_c = .data:0x0000009C; // type:object size:0x28 scope:global __vt__19daObjGOMIKABE_HIO_c = .data:0x000000C4; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -l_HIOInit = .bss:0x00000008; // type:object size:0x1 data:byte scope:local +l_HIOInit = .bss:0x00000008; // type:object size:0x1 scope:local data:byte @3761 = .bss:0x0000000C; // type:object size:0xC scope:local l_HIO = .bss:0x00000018; // type:object size:0x8 scope:local data:byte diff --git a/config/GZ2P01/rels/d_a_obj_kita/symbols.txt b/config/GZ2P01/rels/d_a_obj_kita/symbols.txt index 5e9ea6b884f..b71b6895a0f 100644 --- a/config/GZ2P01/rels/d_a_obj_kita/symbols.txt +++ b/config/GZ2P01/rels/d_a_obj_kita/symbols.txt @@ -50,6 +50,6 @@ l_daObj_Kita_Method = .data:0x00000000; // type:object size:0x20 scope:local g_profile_OBJ_KITA = .data:0x00000020; // type:object size:0x30 scope:global __vt__16daObj_Kita_HIO_c = .data:0x00000050; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -l_HIOInit = .bss:0x00000008; // type:object size:0x1 data:byte scope:local +l_HIOInit = .bss:0x00000008; // type:object size:0x1 scope:local data:byte @3764 = .bss:0x0000000C; // type:object size:0xC scope:local l_HIO = .bss:0x00000018; // type:object size:0x18 scope:local data:byte diff --git a/config/GZ2P01/rels/d_a_obj_msima/symbols.txt b/config/GZ2P01/rels/d_a_obj_msima/symbols.txt index 5911b0cf4fe..944f6e08b32 100644 --- a/config/GZ2P01/rels/d_a_obj_msima/symbols.txt +++ b/config/GZ2P01/rels/d_a_obj_msima/symbols.txt @@ -88,7 +88,7 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa @1012 = .bss:0x0000003C; // type:object size:0x1 scope:local @1010 = .bss:0x00000040; // type:object size:0x1 scope:local @1009 = .bss:0x00000044; // type:object size:0x1 scope:local -l_HIOInit = .bss:0x00000045; // type:object size:0x1 data:byte scope:local +l_HIOInit = .bss:0x00000045; // type:object size:0x1 scope:local data:byte @3858 = .bss:0x00000048; // type:object size:0xC scope:local l_HIO = .bss:0x00000054; // type:object size:0x14 scope:local data:byte @3958 = .bss:0x00000068; // type:object size:0xC scope:local diff --git a/config/ShieldD/rels/d_a_L7demo_drD/symbols.txt b/config/ShieldD/rels/d_a_L7demo_drD/symbols.txt index f09c8067dd9..19eb3d27e23 100644 --- a/config/ShieldD/rels/d_a_L7demo_drD/symbols.txt +++ b/config/ShieldD/rels/d_a_L7demo_drD/symbols.txt @@ -84,4 +84,4 @@ lbl_267_rodata_90 = .rodata:0x00000090; // type:object size:0x14 @118817 = .data:0x000000FC; // type:object size:0x1B scope:local data:string l_daDr_Method = .data:0x00000118; // type:object size:0x20 scope:global g_profile_DR = .data:0x00000138; // type:object size:0x30 scope:global -lbl_267_data_168 = .data:0x00000168; // type:object size:0x4 +lbl_267_data_168 = .data:0x00000168; // type:object size:0x3 data:string diff --git a/config/ShieldD/rels/d_a_L7low_drD/symbols.txt b/config/ShieldD/rels/d_a_L7low_drD/symbols.txt index 6324f530d22..22c81358488 100644 --- a/config/ShieldD/rels/d_a_L7low_drD/symbols.txt +++ b/config/ShieldD/rels/d_a_L7low_drD/symbols.txt @@ -48,4 +48,4 @@ lbl_268_rodata_4C = .rodata:0x0000004C; // type:object size:0x18 @116959 = .data:0x00000098; // type:object size:0x2A scope:local l_daL7lowDr_Method = .data:0x000000C8; // type:object size:0x20 scope:global g_profile_L7lowDr = .data:0x000000E8; // type:object size:0x30 scope:global -lbl_268_data_118 = .data:0x00000118; // type:object size:0x4 +lbl_268_data_118 = .data:0x00000118; // type:object size:0x3 data:string diff --git a/config/ShieldD/rels/d_a_e_bi_leafD/symbols.txt b/config/ShieldD/rels/d_a_e_bi_leafD/symbols.txt index fb32c08105a..aca028163f4 100644 --- a/config/ShieldD/rels/d_a_e_bi_leafD/symbols.txt +++ b/config/ShieldD/rels/d_a_e_bi_leafD/symbols.txt @@ -23,4 +23,4 @@ _dtors = .dtors:0x00000000; // type:label scope:global @116877 = .data:0x000000C0; // type:object size:0x22 scope:local data:string l_daE_BI_LEAF_Method = .data:0x000000E8; // type:object size:0x20 scope:global g_profile_E_BI_LEAF = .data:0x00000108; // type:object size:0x30 scope:global -lbl_167_data_138 = .data:0x00000138; // type:object size:0x4 +lbl_167_data_138 = .data:0x00000138; // type:object size:0x3 data:string diff --git a/config/ShieldD/rels/d_a_obj_battaD/symbols.txt b/config/ShieldD/rels/d_a_obj_battaD/symbols.txt index 0167e677732..297db9c1c18 100644 --- a/config/ShieldD/rels/d_a_obj_battaD/symbols.txt +++ b/config/ShieldD/rels/d_a_obj_battaD/symbols.txt @@ -166,6 +166,6 @@ lbl_391_data_288 = .data:0x00000288; // type:object size:0x2C @STRING@CreateHeap__12daObjBATTA_cFv@1 = .data:0x000005B8; // type:object size:0xF scope:local data:string @STRING@CreateHeap__12daObjBATTA_cFv@0 = .data:0x000005C8; // type:object size:0x12 scope:local data:string @STRING@CreateHeap__12daObjBATTA_cFv = .data:0x000005DC; // type:object size:0x4 scope:local data:string -lbl_391_data_5E0 = .data:0x000005E0; // type:object size:0x4 +lbl_391_data_5E0 = .data:0x000005E0; // type:object size:0x3 data:string lbl_391_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte l_HIO = .bss:0x00000008; // type:object size:0x10 scope:global align:4 data:float diff --git a/config/ShieldD/rels/d_a_obj_bombfD/symbols.txt b/config/ShieldD/rels/d_a_obj_bombfD/symbols.txt index 0e111928b60..d5f5a5b2854 100644 --- a/config/ShieldD/rels/d_a_obj_bombfD/symbols.txt +++ b/config/ShieldD/rels/d_a_obj_bombfD/symbols.txt @@ -33,4 +33,4 @@ lbl_400_rodata_34 = .rodata:0x00000034; // type:object size:0x18 @116950 = .data:0x00000048; // type:object size:0x1C scope:local data:string l_daObjBombf_Method = .data:0x00000068; // type:object size:0x20 scope:global g_profile_Obj_Bombf = .data:0x00000088; // type:object size:0x30 scope:global -lbl_400_data_B8 = .data:0x000000B8; // type:object size:0x4 +lbl_400_data_B8 = .data:0x000000B8; // type:object size:0x3 data:string diff --git a/config/ShieldD/rels/d_a_obj_crystalD/symbols.txt b/config/ShieldD/rels/d_a_obj_crystalD/symbols.txt index 23685055a25..9aa19ea92bd 100644 --- a/config/ShieldD/rels/d_a_obj_crystalD/symbols.txt +++ b/config/ShieldD/rels/d_a_obj_crystalD/symbols.txt @@ -38,4 +38,4 @@ l_arcName = .data:0x0000000C; // type:object size:0x4 scope:global data:4byte @114319 = .data:0x000000D0; // type:object size:0x1D scope:local data:string l_daObjCrystal_Method = .data:0x000000F0; // type:object size:0x20 scope:global g_profile_Obj_Crystal = .data:0x00000110; // type:object size:0x30 scope:global -lbl_420_data_140 = .data:0x00000140; // type:object size:0x4 +lbl_420_data_140 = .data:0x00000140; // type:object size:0x3 data:string diff --git a/config/ShieldD/rels/d_a_obj_fmobjD/symbols.txt b/config/ShieldD/rels/d_a_obj_fmobjD/symbols.txt index 09e9ea81c3c..e8a79902010 100644 --- a/config/ShieldD/rels/d_a_obj_fmobjD/symbols.txt +++ b/config/ShieldD/rels/d_a_obj_fmobjD/symbols.txt @@ -28,4 +28,4 @@ lbl_92_rodata_1C = .rodata:0x0000001C; // type:object size:0x18 @116850 = .data:0x000000B8; // type:object size:0x22 scope:local data:string l_daObj_Fmobj_Method = .data:0x000000E0; // type:object size:0x20 scope:global g_profile_OBJ_FMOBJ = .data:0x00000100; // type:object size:0x30 scope:global -lbl_92_data_130 = .data:0x00000130; // type:object size:0x4 +lbl_92_data_130 = .data:0x00000130; // type:object size:0x3 data:string diff --git a/config/ShieldD/rels/d_a_obj_kageD/symbols.txt b/config/ShieldD/rels/d_a_obj_kageD/symbols.txt index ac27b92d393..353a71187d3 100644 --- a/config/ShieldD/rels/d_a_obj_kageD/symbols.txt +++ b/config/ShieldD/rels/d_a_obj_kageD/symbols.txt @@ -39,4 +39,4 @@ lbl_477_rodata_44 = .rodata:0x00000044; // type:object size:0x18 @118547 = .data:0x000000B8; // type:object size:0x21 scope:local data:string l_daObj_Kage_Method = .data:0x000000E0; // type:object size:0x20 scope:global g_profile_OBJ_KAGE = .data:0x00000100; // type:object size:0x30 scope:global -lbl_477_data_130 = .data:0x00000130; // type:object size:0x4 +lbl_477_data_130 = .data:0x00000130; // type:object size:0x3 data:string diff --git a/config/ShieldD/rels/d_a_obj_laundry_ropeD/symbols.txt b/config/ShieldD/rels/d_a_obj_laundry_ropeD/symbols.txt index 5e228c53376..75477b29054 100644 --- a/config/ShieldD/rels/d_a_obj_laundry_ropeD/symbols.txt +++ b/config/ShieldD/rels/d_a_obj_laundry_ropeD/symbols.txt @@ -85,5 +85,5 @@ __vt__18mDoExt_3DlineMat_c = .data:0x000001B0; // type:object size:0x14 scope:gl @114757 = .data:0x00000230; // type:object size:0xC scope:local @114758 = .data:0x00000254; // type:object size:0x11 scope:local data:string @STRING@createHeap__14daObjLndRope_cFv = .data:0x00000270; // type:object size:0x10 scope:local data:string -lbl_500_data_280 = .data:0x00000280; // type:object size:0x4 +lbl_500_data_280 = .data:0x00000280; // type:object size:0x3 data:string M_hio__14daObjLndRope_c = .bss:0x00000000; // type:object size:0x1C scope:global diff --git a/config/ShieldD/rels/d_a_obj_propD/symbols.txt b/config/ShieldD/rels/d_a_obj_propD/symbols.txt index 563bd2f3d71..5580e683412 100644 --- a/config/ShieldD/rels/d_a_obj_propD/symbols.txt +++ b/config/ShieldD/rels/d_a_obj_propD/symbols.txt @@ -35,4 +35,4 @@ __RTTI__11daObjProp_c = .data:0x000000C0; // type:object size:0x8 scope:global @114278 = .data:0x000000C8; // type:object size:0xB scope:local data:string @114279 = .data:0x000000E0; // type:object size:0x1F scope:local data:string __RTTI__30request_of_phase_process_class = .data:0x00000100; // type:object size:0x8 scope:global -lbl_587_data_108 = .data:0x00000108; // type:object size:0x4 +lbl_587_data_108 = .data:0x00000108; // type:object size:0x3 data:string diff --git a/config/ShieldD/rels/d_a_obj_snow_soupD/symbols.txt b/config/ShieldD/rels/d_a_obj_snow_soupD/symbols.txt index 51b2d589f48..d3ea305ca19 100644 --- a/config/ShieldD/rels/d_a_obj_snow_soupD/symbols.txt +++ b/config/ShieldD/rels/d_a_obj_snow_soupD/symbols.txt @@ -46,4 +46,4 @@ __RTTI__15daObjSnowSoup_c = .data:0x000000D0; // type:object size:0x8 scope:glob @114384 = .data:0x000000D8; // type:object size:0xB scope:local data:string @114385 = .data:0x000000F0; // type:object size:0x1F scope:local data:string __RTTI__30request_of_phase_process_class = .data:0x00000110; // type:object size:0x8 scope:global -lbl_615_data_118 = .data:0x00000118; // type:object size:0x4 +lbl_615_data_118 = .data:0x00000118; // type:object size:0x3 data:string diff --git a/config/ShieldD/rels/d_a_obj_tmoonD/symbols.txt b/config/ShieldD/rels/d_a_obj_tmoonD/symbols.txt index e39cb267be7..1001e08eb66 100644 --- a/config/ShieldD/rels/d_a_obj_tmoonD/symbols.txt +++ b/config/ShieldD/rels/d_a_obj_tmoonD/symbols.txt @@ -30,4 +30,4 @@ l_arcName = .data:0x00000008; // type:object size:0x4 scope:global data:4byte @114296 = .data:0x00000054; // type:object size:0x19 scope:local data:string l_daObjTMoon_Method = .data:0x00000070; // type:object size:0x20 scope:global g_profile_Obj_TMoon = .data:0x00000090; // type:object size:0x30 scope:global -lbl_650_data_C0 = .data:0x000000C0; // type:object size:0x4 +lbl_650_data_C0 = .data:0x000000C0; // type:object size:0x3 data:string diff --git a/config/ShieldD/rels/d_a_obj_usakuD/symbols.txt b/config/ShieldD/rels/d_a_obj_usakuD/symbols.txt index 0d1e8164293..947861cb389 100644 --- a/config/ShieldD/rels/d_a_obj_usakuD/symbols.txt +++ b/config/ShieldD/rels/d_a_obj_usakuD/symbols.txt @@ -29,4 +29,4 @@ _dtors = .dtors:0x00000000; // type:label scope:global @116867 = .data:0x00000148; // type:object size:0x22 scope:local data:string l_daObj_Usaku_Method = .data:0x00000170; // type:object size:0x20 scope:global g_profile_OBJ_USAKU = .data:0x00000190; // type:object size:0x30 scope:global -lbl_664_data_1C0 = .data:0x000001C0; // type:object size:0x4 +lbl_664_data_1C0 = .data:0x000001C0; // type:object size:0x3 data:string diff --git a/config/ShieldD/rels/d_a_set_bgobjD/symbols.txt b/config/ShieldD/rels/d_a_set_bgobjD/symbols.txt index fac96a8b785..d056d3c2d61 100644 --- a/config/ShieldD/rels/d_a_set_bgobjD/symbols.txt +++ b/config/ShieldD/rels/d_a_set_bgobjD/symbols.txt @@ -21,4 +21,4 @@ l_specName = .rodata:0x00000000; // type:object size:0x9 scope:global data:strin @114404 = .data:0x000000C0; // type:object size:0x1B scope:local data:string l_daSetBgObj_Method = .data:0x000000E0; // type:object size:0x20 scope:global g_profile_SET_BG_OBJ = .data:0x00000100; // type:object size:0x30 scope:global -lbl_26_data_130 = .data:0x00000130; // type:object size:0x4 +lbl_26_data_130 = .data:0x00000130; // type:object size:0x3 data:string diff --git a/config/ShieldD/rels/d_a_suspendD/symbols.txt b/config/ShieldD/rels/d_a_suspendD/symbols.txt index 1196d95c275..49f45ea184d 100644 --- a/config/ShieldD/rels/d_a_suspendD/symbols.txt +++ b/config/ShieldD/rels/d_a_suspendD/symbols.txt @@ -25,4 +25,4 @@ lbl_55_rodata_20 = .rodata:0x00000020; // type:object size:0x14 @114241 = .data:0x0000004C; // type:object size:0xC scope:local data:string daSus_METHODS = .data:0x00000058; // type:object size:0x20 scope:global g_profile_SUSPEND = .data:0x00000078; // type:object size:0x30 scope:global -lbl_55_data_A8 = .data:0x000000A8; // type:object size:0x4 +lbl_55_data_A8 = .data:0x000000A8; // type:object size:0x3 data:string diff --git a/configure.py b/configure.py index a9ab92f6e9a..86051aa5ee8 100755 --- a/configure.py +++ b/configure.py @@ -127,6 +127,12 @@ type=Path, help="path to sjiswrap.exe (optional)", ) +parser.add_argument( + "--ninja", + metavar="BINARY", + type=Path, + help="path to ninja binary (optional)" +) parser.add_argument( "--verbose", action="store_true", @@ -171,6 +177,7 @@ config.generate_map = args.map config.non_matching = args.non_matching config.sjiswrap_path = args.sjiswrap +config.ninja_path = args.ninja config.progress = args.progress if not is_windows(): config.wrapper = args.wrapper @@ -180,11 +187,11 @@ # Tool versions config.binutils_tag = "2.42-1" -config.compilers_tag = "20250520" -config.dtk_tag = "v1.5.1" -config.objdiff_tag = "v3.0.0-beta.8" -config.sjiswrap_tag = "v1.2.1" -config.wibo_tag = "0.6.16" +config.compilers_tag = "20250812" +config.dtk_tag = "v1.6.2" +config.objdiff_tag = "v3.0.0-beta.14" +config.sjiswrap_tag = "v1.2.2" +config.wibo_tag = "0.7.0" # Project config.config_path = Path("config") / config.version / "config.yml" @@ -256,6 +263,8 @@ cflags_base.extend(["-sym on", "-DDEBUG=1"]) else: cflags_base.append("-DNDEBUG=1") + +# Warning flags if args.warn == "all": cflags_base.append("-W all") elif args.warn == "off": diff --git a/tools/download_tool.py b/tools/download_tool.py index 7adbf0d70e2..381b170a606 100755 --- a/tools/download_tool.py +++ b/tools/download_tool.py @@ -91,6 +91,7 @@ def wibo_url(tag: str) -> str: "wibo": wibo_url, } + def download(url, response, output) -> None: if url.endswith(".zip"): data = io.BytesIO(response.read()) @@ -107,6 +108,7 @@ def download(url, response, output) -> None: st = os.stat(output) os.chmod(output, st.st_mode | stat.S_IEXEC) + def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("tool", help="Tool name") @@ -128,12 +130,17 @@ def main() -> None: try: import certifi import ssl - except: - print("\"certifi\" module not found. Please install it using \"python -m pip install certifi\".") + except ImportError: + print( + '"certifi" module not found. Please install it using "python -m pip install certifi".' + ) return - - with urllib.request.urlopen(req, context=ssl.create_default_context(cafile=certifi.where())) as response: + + with urllib.request.urlopen( + req, context=ssl.create_default_context(cafile=certifi.where()) + ) as response: download(url, response, output) + if __name__ == "__main__": main() diff --git a/tools/project.py b/tools/project.py index 2d00df4633a..00d414ed2f6 100644 --- a/tools/project.py +++ b/tools/project.py @@ -1545,13 +1545,20 @@ def generate_objdiff_config( "build_target": False, "watch_patterns": [ "*.c", + "*.cc", "*.cp", "*.cpp", + "*.cxx", + "*.c++", "*.h", + "*.hh", + "*.hp", "*.hpp", - "*.inc", + "*.hxx", + "*.h++", "*.pch", "*.pch++", + "*.inc", "*.py", "*.yml", "*.txt",