diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2023-09-22 16:10:29 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2023-09-22 16:10:29 -0600 |
| commit | 2508fc777677dde9ac7f5d7e23e8c4d5dfdd185c (patch) | |
| tree | f10da6a52760b20af285c7f12b528df76e6efd3e | |
| parent | 484f6f7bbbb8e30cff5a589e8d75ea3220cf90c3 (diff) | |
Added text extraction support, missing jp offsets, and renamed anim to sanim
| -rw-r--r-- | assets/sm64/us/texts.yml | 1172 | ||||
| -rw-r--r-- | src/Companion.cpp | 8 | ||||
| -rw-r--r-- | src/factories/RawFactory.h | 3 | ||||
| -rw-r--r-- | src/factories/ResourceType.h | 9 | ||||
| -rw-r--r-- | src/factories/TextureFactory.cpp | 1 | ||||
| -rw-r--r-- | src/factories/sm64/SAnimFactory.cpp (renamed from src/factories/AnimFactory.cpp) | 4 | ||||
| -rw-r--r-- | src/factories/sm64/SAnimFactory.h | 9 | ||||
| -rw-r--r-- | src/factories/sm64/SDialogFactory.cpp | 65 | ||||
| -rw-r--r-- | src/factories/sm64/SDialogFactory.h | 9 | ||||
| -rw-r--r-- | src/factories/sm64/STextFactory.cpp | 28 | ||||
| -rw-r--r-- | src/factories/sm64/STextFactory.h (renamed from src/factories/AnimFactory.h) | 6 | ||||
| -rw-r--r-- | tools/offset_find.js | 4 | ||||
| -rw-r--r-- | tools/text_offsets.js | 153 |
13 files changed, 1421 insertions, 50 deletions
diff --git a/assets/sm64/us/texts.yml b/assets/sm64/us/texts.yml new file mode 100644 index 0000000..3a9afdb --- /dev/null +++ b/assets/sm64/us/texts.yml @@ -0,0 +1,1172 @@ +dialogs/dialog_00: + type: SM64:DIALOG + offset: 1083968 + mio0: 65480 +dialogs/dialog_01: + type: SM64:DIALOG + offset: 1083968 + mio0: 65496 +dialogs/dialog_02: + type: SM64:DIALOG + offset: 1083968 + mio0: 65512 +dialogs/dialog_03: + type: SM64:DIALOG + offset: 1083968 + mio0: 65528 +dialogs/dialog_04: + type: SM64:DIALOG + offset: 1083968 + mio0: 65544 +dialogs/dialog_05: + type: SM64:DIALOG + offset: 1083968 + mio0: 65560 +dialogs/dialog_06: + type: SM64:DIALOG + offset: 1083968 + mio0: 65576 +dialogs/dialog_07: + type: SM64:DIALOG + offset: 1083968 + mio0: 65592 +dialogs/dialog_08: + type: SM64:DIALOG + offset: 1083968 + mio0: 65608 +dialogs/dialog_09: + type: SM64:DIALOG + offset: 1083968 + mio0: 65624 +dialogs/dialog_0A: + type: SM64:DIALOG + offset: 1083968 + mio0: 65640 +dialogs/dialog_0B: + type: SM64:DIALOG + offset: 1083968 + mio0: 65656 +dialogs/dialog_0C: + type: SM64:DIALOG + offset: 1083968 + mio0: 65672 +dialogs/dialog_0D: + type: SM64:DIALOG + offset: 1083968 + mio0: 65688 +dialogs/dialog_0E: + type: SM64:DIALOG + offset: 1083968 + mio0: 65704 +dialogs/dialog_0F: + type: SM64:DIALOG + offset: 1083968 + mio0: 65720 +dialogs/dialog_10: + type: SM64:DIALOG + offset: 1083968 + mio0: 65736 +dialogs/dialog_11: + type: SM64:DIALOG + offset: 1083968 + mio0: 65752 +dialogs/dialog_12: + type: SM64:DIALOG + offset: 1083968 + mio0: 65768 +dialogs/dialog_13: + type: SM64:DIALOG + offset: 1083968 + mio0: 65784 +dialogs/dialog_14: + type: SM64:DIALOG + offset: 1083968 + mio0: 65800 +dialogs/dialog_15: + type: SM64:DIALOG + offset: 1083968 + mio0: 65816 +dialogs/dialog_16: + type: SM64:DIALOG + offset: 1083968 + mio0: 65832 +dialogs/dialog_17: + type: SM64:DIALOG + offset: 1083968 + mio0: 65848 +dialogs/dialog_18: + type: SM64:DIALOG + offset: 1083968 + mio0: 65864 +dialogs/dialog_19: + type: SM64:DIALOG + offset: 1083968 + mio0: 65880 +dialogs/dialog_1A: + type: SM64:DIALOG + offset: 1083968 + mio0: 65896 +dialogs/dialog_1B: + type: SM64:DIALOG + offset: 1083968 + mio0: 65912 +dialogs/dialog_1C: + type: SM64:DIALOG + offset: 1083968 + mio0: 65928 +dialogs/dialog_1D: + type: SM64:DIALOG + offset: 1083968 + mio0: 65944 +dialogs/dialog_1E: + type: SM64:DIALOG + offset: 1083968 + mio0: 65960 +dialogs/dialog_1F: + type: SM64:DIALOG + offset: 1083968 + mio0: 65976 +dialogs/dialog_20: + type: SM64:DIALOG + offset: 1083968 + mio0: 65992 +dialogs/dialog_21: + type: SM64:DIALOG + offset: 1083968 + mio0: 66008 +dialogs/dialog_22: + type: SM64:DIALOG + offset: 1083968 + mio0: 66024 +dialogs/dialog_23: + type: SM64:DIALOG + offset: 1083968 + mio0: 66040 +dialogs/dialog_24: + type: SM64:DIALOG + offset: 1083968 + mio0: 66056 +dialogs/dialog_25: + type: SM64:DIALOG + offset: 1083968 + mio0: 66072 +dialogs/dialog_26: + type: SM64:DIALOG + offset: 1083968 + mio0: 66088 +dialogs/dialog_27: + type: SM64:DIALOG + offset: 1083968 + mio0: 66104 +dialogs/dialog_28: + type: SM64:DIALOG + offset: 1083968 + mio0: 66120 +dialogs/dialog_29: + type: SM64:DIALOG + offset: 1083968 + mio0: 66136 +dialogs/dialog_2A: + type: SM64:DIALOG + offset: 1083968 + mio0: 66152 +dialogs/dialog_2B: + type: SM64:DIALOG + offset: 1083968 + mio0: 66168 +dialogs/dialog_2C: + type: SM64:DIALOG + offset: 1083968 + mio0: 66184 +dialogs/dialog_2D: + type: SM64:DIALOG + offset: 1083968 + mio0: 66200 +dialogs/dialog_2E: + type: SM64:DIALOG + offset: 1083968 + mio0: 66216 +dialogs/dialog_2F: + type: SM64:DIALOG + offset: 1083968 + mio0: 66232 +dialogs/dialog_30: + type: SM64:DIALOG + offset: 1083968 + mio0: 66248 +dialogs/dialog_31: + type: SM64:DIALOG + offset: 1083968 + mio0: 66264 +dialogs/dialog_32: + type: SM64:DIALOG + offset: 1083968 + mio0: 66280 +dialogs/dialog_33: + type: SM64:DIALOG + offset: 1083968 + mio0: 66296 +dialogs/dialog_34: + type: SM64:DIALOG + offset: 1083968 + mio0: 66312 +dialogs/dialog_35: + type: SM64:DIALOG + offset: 1083968 + mio0: 66328 +dialogs/dialog_36: + type: SM64:DIALOG + offset: 1083968 + mio0: 66344 +dialogs/dialog_37: + type: SM64:DIALOG + offset: 1083968 + mio0: 66360 +dialogs/dialog_38: + type: SM64:DIALOG + offset: 1083968 + mio0: 66376 +dialogs/dialog_39: + type: SM64:DIALOG + offset: 1083968 + mio0: 66392 +dialogs/dialog_3A: + type: SM64:DIALOG + offset: 1083968 + mio0: 66408 +dialogs/dialog_3B: + type: SM64:DIALOG + offset: 1083968 + mio0: 66424 +dialogs/dialog_3C: + type: SM64:DIALOG + offset: 1083968 + mio0: 66440 +dialogs/dialog_3D: + type: SM64:DIALOG + offset: 1083968 + mio0: 66456 +dialogs/dialog_3E: + type: SM64:DIALOG + offset: 1083968 + mio0: 66472 +dialogs/dialog_3F: + type: SM64:DIALOG + offset: 1083968 + mio0: 66488 +dialogs/dialog_40: + type: SM64:DIALOG + offset: 1083968 + mio0: 66504 +dialogs/dialog_41: + type: SM64:DIALOG + offset: 1083968 + mio0: 66520 +dialogs/dialog_42: + type: SM64:DIALOG + offset: 1083968 + mio0: 66536 +dialogs/dialog_43: + type: SM64:DIALOG + offset: 1083968 + mio0: 66552 +dialogs/dialog_44: + type: SM64:DIALOG + offset: 1083968 + mio0: 66568 +dialogs/dialog_45: + type: SM64:DIALOG + offset: 1083968 + mio0: 66584 +dialogs/dialog_46: + type: SM64:DIALOG + offset: 1083968 + mio0: 66600 +dialogs/dialog_47: + type: SM64:DIALOG + offset: 1083968 + mio0: 66616 +dialogs/dialog_48: + type: SM64:DIALOG + offset: 1083968 + mio0: 66632 +dialogs/dialog_49: + type: SM64:DIALOG + offset: 1083968 + mio0: 66648 +dialogs/dialog_4A: + type: SM64:DIALOG + offset: 1083968 + mio0: 66664 +dialogs/dialog_4B: + type: SM64:DIALOG + offset: 1083968 + mio0: 66680 +dialogs/dialog_4C: + type: SM64:DIALOG + offset: 1083968 + mio0: 66696 +dialogs/dialog_4D: + type: SM64:DIALOG + offset: 1083968 + mio0: 66712 +dialogs/dialog_4E: + type: SM64:DIALOG + offset: 1083968 + mio0: 66728 +dialogs/dialog_4F: + type: SM64:DIALOG + offset: 1083968 + mio0: 66744 +dialogs/dialog_50: + type: SM64:DIALOG + offset: 1083968 + mio0: 66760 +dialogs/dialog_51: + type: SM64:DIALOG + offset: 1083968 + mio0: 66776 +dialogs/dialog_52: + type: SM64:DIALOG + offset: 1083968 + mio0: 66792 +dialogs/dialog_53: + type: SM64:DIALOG + offset: 1083968 + mio0: 66808 +dialogs/dialog_54: + type: SM64:DIALOG + offset: 1083968 + mio0: 66824 +dialogs/dialog_55: + type: SM64:DIALOG + offset: 1083968 + mio0: 66840 +dialogs/dialog_56: + type: SM64:DIALOG + offset: 1083968 + mio0: 66856 +dialogs/dialog_57: + type: SM64:DIALOG + offset: 1083968 + mio0: 66872 +dialogs/dialog_58: + type: SM64:DIALOG + offset: 1083968 + mio0: 66888 +dialogs/dialog_59: + type: SM64:DIALOG + offset: 1083968 + mio0: 66904 +dialogs/dialog_5A: + type: SM64:DIALOG + offset: 1083968 + mio0: 66920 +dialogs/dialog_5B: + type: SM64:DIALOG + offset: 1083968 + mio0: 66936 +dialogs/dialog_5C: + type: SM64:DIALOG + offset: 1083968 + mio0: 66952 +dialogs/dialog_5D: + type: SM64:DIALOG + offset: 1083968 + mio0: 66968 +dialogs/dialog_5E: + type: SM64:DIALOG + offset: 1083968 + mio0: 66984 +dialogs/dialog_5F: + type: SM64:DIALOG + offset: 1083968 + mio0: 67000 +dialogs/dialog_60: + type: SM64:DIALOG + offset: 1083968 + mio0: 67016 +dialogs/dialog_61: + type: SM64:DIALOG + offset: 1083968 + mio0: 67032 +dialogs/dialog_62: + type: SM64:DIALOG + offset: 1083968 + mio0: 67048 +dialogs/dialog_63: + type: SM64:DIALOG + offset: 1083968 + mio0: 67064 +dialogs/dialog_64: + type: SM64:DIALOG + offset: 1083968 + mio0: 67080 +dialogs/dialog_65: + type: SM64:DIALOG + offset: 1083968 + mio0: 67096 +dialogs/dialog_66: + type: SM64:DIALOG + offset: 1083968 + mio0: 67112 +dialogs/dialog_67: + type: SM64:DIALOG + offset: 1083968 + mio0: 67128 +dialogs/dialog_68: + type: SM64:DIALOG + offset: 1083968 + mio0: 67144 +dialogs/dialog_69: + type: SM64:DIALOG + offset: 1083968 + mio0: 67160 +dialogs/dialog_6A: + type: SM64:DIALOG + offset: 1083968 + mio0: 67176 +dialogs/dialog_6B: + type: SM64:DIALOG + offset: 1083968 + mio0: 67192 +dialogs/dialog_6C: + type: SM64:DIALOG + offset: 1083968 + mio0: 67208 +dialogs/dialog_6D: + type: SM64:DIALOG + offset: 1083968 + mio0: 67224 +dialogs/dialog_6E: + type: SM64:DIALOG + offset: 1083968 + mio0: 67240 +dialogs/dialog_6F: + type: SM64:DIALOG + offset: 1083968 + mio0: 67256 +dialogs/dialog_70: + type: SM64:DIALOG + offset: 1083968 + mio0: 67272 +dialogs/dialog_71: + type: SM64:DIALOG + offset: 1083968 + mio0: 67288 +dialogs/dialog_72: + type: SM64:DIALOG + offset: 1083968 + mio0: 67304 +dialogs/dialog_73: + type: SM64:DIALOG + offset: 1083968 + mio0: 67320 +dialogs/dialog_74: + type: SM64:DIALOG + offset: 1083968 + mio0: 67336 +dialogs/dialog_75: + type: SM64:DIALOG + offset: 1083968 + mio0: 67352 +dialogs/dialog_76: + type: SM64:DIALOG + offset: 1083968 + mio0: 67368 +dialogs/dialog_77: + type: SM64:DIALOG + offset: 1083968 + mio0: 67384 +dialogs/dialog_78: + type: SM64:DIALOG + offset: 1083968 + mio0: 67400 +dialogs/dialog_79: + type: SM64:DIALOG + offset: 1083968 + mio0: 67416 +dialogs/dialog_7A: + type: SM64:DIALOG + offset: 1083968 + mio0: 67432 +dialogs/dialog_7B: + type: SM64:DIALOG + offset: 1083968 + mio0: 67448 +dialogs/dialog_7C: + type: SM64:DIALOG + offset: 1083968 + mio0: 67464 +dialogs/dialog_7D: + type: SM64:DIALOG + offset: 1083968 + mio0: 67480 +dialogs/dialog_7E: + type: SM64:DIALOG + offset: 1083968 + mio0: 67496 +dialogs/dialog_7F: + type: SM64:DIALOG + offset: 1083968 + mio0: 67512 +dialogs/dialog_80: + type: SM64:DIALOG + offset: 1083968 + mio0: 67528 +dialogs/dialog_81: + type: SM64:DIALOG + offset: 1083968 + mio0: 67544 +dialogs/dialog_82: + type: SM64:DIALOG + offset: 1083968 + mio0: 67560 +dialogs/dialog_83: + type: SM64:DIALOG + offset: 1083968 + mio0: 67576 +dialogs/dialog_84: + type: SM64:DIALOG + offset: 1083968 + mio0: 67592 +dialogs/dialog_85: + type: SM64:DIALOG + offset: 1083968 + mio0: 67608 +dialogs/dialog_86: + type: SM64:DIALOG + offset: 1083968 + mio0: 67624 +dialogs/dialog_87: + type: SM64:DIALOG + offset: 1083968 + mio0: 67640 +dialogs/dialog_88: + type: SM64:DIALOG + offset: 1083968 + mio0: 67656 +dialogs/dialog_89: + type: SM64:DIALOG + offset: 1083968 + mio0: 67672 +dialogs/dialog_8A: + type: SM64:DIALOG + offset: 1083968 + mio0: 67688 +dialogs/dialog_8B: + type: SM64:DIALOG + offset: 1083968 + mio0: 67704 +dialogs/dialog_8C: + type: SM64:DIALOG + offset: 1083968 + mio0: 67720 +dialogs/dialog_8D: + type: SM64:DIALOG + offset: 1083968 + mio0: 67736 +dialogs/dialog_8E: + type: SM64:DIALOG + offset: 1083968 + mio0: 67752 +dialogs/dialog_8F: + type: SM64:DIALOG + offset: 1083968 + mio0: 67768 +dialogs/dialog_90: + type: SM64:DIALOG + offset: 1083968 + mio0: 67784 +dialogs/dialog_91: + type: SM64:DIALOG + offset: 1083968 + mio0: 67800 +dialogs/dialog_92: + type: SM64:DIALOG + offset: 1083968 + mio0: 67816 +dialogs/dialog_93: + type: SM64:DIALOG + offset: 1083968 + mio0: 67832 +dialogs/dialog_94: + type: SM64:DIALOG + offset: 1083968 + mio0: 67848 +dialogs/dialog_95: + type: SM64:DIALOG + offset: 1083968 + mio0: 67864 +dialogs/dialog_96: + type: SM64:DIALOG + offset: 1083968 + mio0: 67880 +dialogs/dialog_97: + type: SM64:DIALOG + offset: 1083968 + mio0: 67896 +dialogs/dialog_98: + type: SM64:DIALOG + offset: 1083968 + mio0: 67912 +dialogs/dialog_99: + type: SM64:DIALOG + offset: 1083968 + mio0: 67928 +dialogs/dialog_9A: + type: SM64:DIALOG + offset: 1083968 + mio0: 67944 +dialogs/dialog_9B: + type: SM64:DIALOG + offset: 1083968 + mio0: 67960 +dialogs/dialog_9C: + type: SM64:DIALOG + offset: 1083968 + mio0: 67976 +dialogs/dialog_9D: + type: SM64:DIALOG + offset: 1083968 + mio0: 67992 +dialogs/dialog_9E: + type: SM64:DIALOG + offset: 1083968 + mio0: 68008 +dialogs/dialog_9F: + type: SM64:DIALOG + offset: 1083968 + mio0: 68024 +dialogs/dialog_A0: + type: SM64:DIALOG + offset: 1083968 + mio0: 68040 +dialogs/dialog_A1: + type: SM64:DIALOG + offset: 1083968 + mio0: 68056 +dialogs/dialog_A2: + type: SM64:DIALOG + offset: 1083968 + mio0: 68072 +dialogs/dialog_A3: + type: SM64:DIALOG + offset: 1083968 + mio0: 68088 +dialogs/dialog_A4: + type: SM64:DIALOG + offset: 1083968 + mio0: 68104 +dialogs/dialog_A5: + type: SM64:DIALOG + offset: 1083968 + mio0: 68120 +dialogs/dialog_A6: + type: SM64:DIALOG + offset: 1083968 + mio0: 68136 +dialogs/dialog_A7: + type: SM64:DIALOG + offset: 1083968 + mio0: 68152 +dialogs/dialog_A8: + type: SM64:DIALOG + offset: 1083968 + mio0: 68168 +dialogs/dialog_A9: + type: SM64:DIALOG + offset: 1083968 + mio0: 68184 +courses/course_00: + type: SM64:TEXT + offset: 1083968 + mio0: 68884 +courses/course_01: + type: SM64:TEXT + offset: 1083968 + mio0: 68908 +courses/course_02: + type: SM64:TEXT + offset: 1083968 + mio0: 68928 +courses/course_03: + type: SM64:TEXT + offset: 1083968 + mio0: 68948 +courses/course_04: + type: SM64:TEXT + offset: 1083968 + mio0: 68972 +courses/course_05: + type: SM64:TEXT + offset: 1083968 + mio0: 68992 +courses/course_06: + type: SM64:TEXT + offset: 1083968 + mio0: 69012 +courses/course_07: + type: SM64:TEXT + offset: 1083968 + mio0: 69032 +courses/course_08: + type: SM64:TEXT + offset: 1083968 + mio0: 69056 +courses/course_09: + type: SM64:TEXT + offset: 1083968 + mio0: 69076 +courses/course_0A: + type: SM64:TEXT + offset: 1083968 + mio0: 69096 +courses/course_0B: + type: SM64:TEXT + offset: 1083968 + mio0: 69116 +courses/course_0C: + type: SM64:TEXT + offset: 1083968 + mio0: 69140 +courses/course_0D: + type: SM64:TEXT + offset: 1083968 + mio0: 69160 +courses/course_0E: + type: SM64:TEXT + offset: 1083968 + mio0: 69180 +courses/course_0F: + type: SM64:TEXT + offset: 1083968 + mio0: 69196 +courses/course_10: + type: SM64:TEXT + offset: 1083968 + mio0: 69224 +courses/course_11: + type: SM64:TEXT + offset: 1083968 + mio0: 69252 +courses/course_12: + type: SM64:TEXT + offset: 1083968 + mio0: 69276 +courses/course_13: + type: SM64:TEXT + offset: 1083968 + mio0: 69308 +courses/course_14: + type: SM64:TEXT + offset: 1083968 + mio0: 69336 +courses/course_15: + type: SM64:TEXT + offset: 1083968 + mio0: 69364 +courses/course_16: + type: SM64:TEXT + offset: 1083968 + mio0: 69396 +courses/course_17: + type: SM64:TEXT + offset: 1083968 + mio0: 69428 +courses/course_18: + type: SM64:TEXT + offset: 1083968 + mio0: 69452 +courses/course_19: + type: SM64:TEXT + offset: 1083968 + mio0: 69456 +acts/act_00: + type: SM64:TEXT + offset: 1083968 + mio0: 69588 +acts/act_01: + type: SM64:TEXT + offset: 1083968 + mio0: 69616 +acts/act_02: + type: SM64:TEXT + offset: 1083968 + mio0: 69648 +acts/act_03: + type: SM64:TEXT + offset: 1083968 + mio0: 69680 +acts/act_04: + type: SM64:TEXT + offset: 1083968 + mio0: 69704 +acts/act_05: + type: SM64:TEXT + offset: 1083968 + mio0: 69728 +acts/act_06: + type: SM64:TEXT + offset: 1083968 + mio0: 69756 +acts/act_07: + type: SM64:TEXT + offset: 1083968 + mio0: 69780 +acts/act_08: + type: SM64:TEXT + offset: 1083968 + mio0: 69808 +acts/act_09: + type: SM64:TEXT + offset: 1083968 + mio0: 69836 +acts/act_0A: + type: SM64:TEXT + offset: 1083968 + mio0: 69868 +acts/act_0B: + type: SM64:TEXT + offset: 1083968 + mio0: 69896 +acts/act_0C: + type: SM64:TEXT + offset: 1083968 + mio0: 69916 +acts/act_0D: + type: SM64:TEXT + offset: 1083968 + mio0: 69944 +acts/act_0E: + type: SM64:TEXT + offset: 1083968 + mio0: 69976 +acts/act_0F: + type: SM64:TEXT + offset: 1083968 + mio0: 70004 +acts/act_10: + type: SM64:TEXT + offset: 1083968 + mio0: 70036 +acts/act_11: + type: SM64:TEXT + offset: 1083968 + mio0: 70064 +acts/act_12: + type: SM64:TEXT + offset: 1083968 + mio0: 70088 +acts/act_13: + type: SM64:TEXT + offset: 1083968 + mio0: 70108 +acts/act_14: + type: SM64:TEXT + offset: 1083968 + mio0: 70128 +acts/act_15: + type: SM64:TEXT + offset: 1083968 + mio0: 70148 +acts/act_16: + type: SM64:TEXT + offset: 1083968 + mio0: 70180 +acts/act_17: + type: SM64:TEXT + offset: 1083968 + mio0: 70204 +acts/act_18: + type: SM64:TEXT + offset: 1083968 + mio0: 70228 +acts/act_19: + type: SM64:TEXT + offset: 1083968 + mio0: 70248 +acts/act_1A: + type: SM64:TEXT + offset: 1083968 + mio0: 70280 +acts/act_1B: + type: SM64:TEXT + offset: 1083968 + mio0: 70308 +acts/act_1C: + type: SM64:TEXT + offset: 1083968 + mio0: 70332 +acts/act_1D: + type: SM64:TEXT + offset: 1083968 + mio0: 70352 +acts/act_1E: + type: SM64:TEXT + offset: 1083968 + mio0: 70384 +acts/act_1F: + type: SM64:TEXT + offset: 1083968 + mio0: 70416 +acts/act_20: + type: SM64:TEXT + offset: 1083968 + mio0: 70440 +acts/act_21: + type: SM64:TEXT + offset: 1083968 + mio0: 70468 +acts/act_22: + type: SM64:TEXT + offset: 1083968 + mio0: 70496 +acts/act_23: + type: SM64:TEXT + offset: 1083968 + mio0: 70524 +acts/act_24: + type: SM64:TEXT + offset: 1083968 + mio0: 70548 +acts/act_25: + type: SM64:TEXT + offset: 1083968 + mio0: 70568 +acts/act_26: + type: SM64:TEXT + offset: 1083968 + mio0: 70588 +acts/act_27: + type: SM64:TEXT + offset: 1083968 + mio0: 70620 +acts/act_28: + type: SM64:TEXT + offset: 1083968 + mio0: 70640 +acts/act_29: + type: SM64:TEXT + offset: 1083968 + mio0: 70672 +acts/act_2A: + type: SM64:TEXT + offset: 1083968 + mio0: 70704 +acts/act_2B: + type: SM64:TEXT + offset: 1083968 + mio0: 70736 +acts/act_2C: + type: SM64:TEXT + offset: 1083968 + mio0: 70764 +acts/act_2D: + type: SM64:TEXT + offset: 1083968 + mio0: 70792 +acts/act_2E: + type: SM64:TEXT + offset: 1083968 + mio0: 70824 +acts/act_2F: + type: SM64:TEXT + offset: 1083968 + mio0: 70852 +acts/act_30: + type: SM64:TEXT + offset: 1083968 + mio0: 70868 +acts/act_31: + type: SM64:TEXT + offset: 1083968 + mio0: 70888 +acts/act_32: + type: SM64:TEXT + offset: 1083968 + mio0: 70912 +acts/act_33: + type: SM64:TEXT + offset: 1083968 + mio0: 70940 +acts/act_34: + type: SM64:TEXT + offset: 1083968 + mio0: 70964 +acts/act_35: + type: SM64:TEXT + offset: 1083968 + mio0: 70988 +acts/act_36: + type: SM64:TEXT + offset: 1083968 + mio0: 71008 +acts/act_37: + type: SM64:TEXT + offset: 1083968 + mio0: 71028 +acts/act_38: + type: SM64:TEXT + offset: 1083968 + mio0: 71052 +acts/act_39: + type: SM64:TEXT + offset: 1083968 + mio0: 71072 +acts/act_3A: + type: SM64:TEXT + offset: 1083968 + mio0: 71104 +acts/act_3B: + type: SM64:TEXT + offset: 1083968 + mio0: 71136 +acts/act_3C: + type: SM64:TEXT + offset: 1083968 + mio0: 71152 +acts/act_3D: + type: SM64:TEXT + offset: 1083968 + mio0: 71176 +acts/act_3E: + type: SM64:TEXT + offset: 1083968 + mio0: 71192 +acts/act_3F: + type: SM64:TEXT + offset: 1083968 + mio0: 71224 +acts/act_40: + type: SM64:TEXT + offset: 1083968 + mio0: 71252 +acts/act_41: + type: SM64:TEXT + offset: 1083968 + mio0: 71280 +acts/act_42: + type: SM64:TEXT + offset: 1083968 + mio0: 71312 +acts/act_43: + type: SM64:TEXT + offset: 1083968 + mio0: 71332 +acts/act_44: + type: SM64:TEXT + offset: 1083968 + mio0: 71360 +acts/act_45: + type: SM64:TEXT + offset: 1083968 + mio0: 71388 +acts/act_46: + type: SM64:TEXT + offset: 1083968 + mio0: 71412 +acts/act_47: + type: SM64:TEXT + offset: 1083968 + mio0: 71444 +acts/act_48: + type: SM64:TEXT + offset: 1083968 + mio0: 71476 +acts/act_49: + type: SM64:TEXT + offset: 1083968 + mio0: 71504 +acts/act_4A: + type: SM64:TEXT + offset: 1083968 + mio0: 71536 +acts/act_4B: + type: SM64:TEXT + offset: 1083968 + mio0: 71568 +acts/act_4C: + type: SM64:TEXT + offset: 1083968 + mio0: 71592 +acts/act_4D: + type: SM64:TEXT + offset: 1083968 + mio0: 71612 +acts/act_4E: + type: SM64:TEXT + offset: 1083968 + mio0: 71632 +acts/act_4F: + type: SM64:TEXT + offset: 1083968 + mio0: 71652 +acts/act_50: + type: SM64:TEXT + offset: 1083968 + mio0: 71680 +acts/act_51: + type: SM64:TEXT + offset: 1083968 + mio0: 71692 +acts/act_52: + type: SM64:TEXT + offset: 1083968 + mio0: 71712 +acts/act_53: + type: SM64:TEXT + offset: 1083968 + mio0: 71740 +acts/act_54: + type: SM64:TEXT + offset: 1083968 + mio0: 71764 +acts/act_55: + type: SM64:TEXT + offset: 1083968 + mio0: 71796 +acts/act_56: + type: SM64:TEXT + offset: 1083968 + mio0: 71824 +acts/act_57: + type: SM64:TEXT + offset: 1083968 + mio0: 71848 +acts/act_58: + type: SM64:TEXT + offset: 1083968 + mio0: 71872 +acts/act_59: + type: SM64:TEXT + offset: 1083968 + mio0: 71892 +acts/act_5A: + type: SM64:TEXT + offset: 1083968 + mio0: 71920 +acts/act_5B: + type: SM64:TEXT + offset: 1083968 + mio0: 71956 +acts/act_5C: + type: SM64:TEXT + offset: 1083968 + mio0: 71960 +acts/act_5D: + type: SM64:TEXT + offset: 1083968 + mio0: 71964 +acts/act_5E: + type: SM64:TEXT + offset: 1083968 + mio0: 71968 +acts/act_5F: + type: SM64:TEXT + offset: 1083968 + mio0: 71972 +acts/act_60: + type: SM64:TEXT + offset: 1083968 + mio0: 71976 diff --git a/src/Companion.cpp b/src/Companion.cpp index 8582c40..fa557fa 100644 --- a/src/Companion.cpp +++ b/src/Companion.cpp @@ -10,7 +10,9 @@ #include "factories/SampleFactory.h" #include "factories/BankFactory.h" #include "factories/TextureFactory.h" -#include "factories/AnimFactory.h" +#include "factories/sm64/SAnimFactory.h" +#include "factories/sm64/STextFactory.h" +#include "factories/sm64/SDialogFactory.h" #include <fstream> #include <iostream> @@ -29,7 +31,9 @@ void Companion::Init() { this->RegisterFactory("BLOB", new BlobFactory()); // SM64 Specific - this->RegisterFactory("SM64:ANIM", new AnimFactory()); + this->RegisterFactory("SM64:DIALOG", new SDialogFactory()); + this->RegisterFactory("SM64:ANIM", new SAnimFactory()); + this->RegisterFactory("SM64:TEXT", new STextFactory()); // Debug this->RegisterFactory("MIO0", new MIO0Factory()); diff --git a/src/factories/RawFactory.h b/src/factories/RawFactory.h index 16a78ce..5019ad6 100644 --- a/src/factories/RawFactory.h +++ b/src/factories/RawFactory.h @@ -6,6 +6,9 @@ #include <binarytools/BinaryWriter.h> #include <yaml-cpp/yaml.h> + +#define SEGMENT_OFFSET(a) ((uint32_t)(a)&0x00FFFFFF) + #define WRITE_HEADER(type, version) this->WriteHeader(writer, type, version) #define WRITE_BHEADER(type, version) this->WriteHeader(writer, type, version, true) #define WRITE_U8(value) writer->Write((uint8_t) value) diff --git a/src/factories/ResourceType.h b/src/factories/ResourceType.h index 7dfac06..8c5879e 100644 --- a/src/factories/ResourceType.h +++ b/src/factories/ResourceType.h @@ -14,13 +14,12 @@ enum class ResourceType { Array = 0x4F415252, // OARR Blob = 0x4F424C42, // OBLB Texture = 0x4F544558, // OTEX - - // CubeOS - Demo = 0x44454D4F, // DEMO - Skybox = 0x534B5942, // SKYB - Anim = 0x414E494D, // ANIM Bank = 0x42414E4B, // BANK Sample = 0x41554643, // AIFC Sequence = 0x53455143, // SEQC + + // SM64 + Anim = 0x414E494D, // ANIM + SDialog = 0x53444C47, // SDLG }; } // namespace LUS diff --git a/src/factories/TextureFactory.cpp b/src/factories/TextureFactory.cpp index 12d8540..257ef20 100644 --- a/src/factories/TextureFactory.cpp +++ b/src/factories/TextureFactory.cpp @@ -1,6 +1,5 @@ #include "TextureFactory.h" -#include "Companion.h" #include "utils/MIODecoder.h" namespace fs = std::filesystem; diff --git a/src/factories/AnimFactory.cpp b/src/factories/sm64/SAnimFactory.cpp index 0e5d01b..3358e24 100644 --- a/src/factories/AnimFactory.cpp +++ b/src/factories/sm64/SAnimFactory.cpp @@ -1,4 +1,4 @@ -#include "AnimFactory.h" +#include "SAnimFactory.h" #include <iostream> #include <filesystem> @@ -63,7 +63,7 @@ void WriteAnimationValues(LUS::BinaryWriter* writer, YAML::Node& data, std::vect reader.Close(); } -bool AnimFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector<uint8_t>& buffer) { +bool SAnimFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector<uint8_t>& buffer) { WRITE_HEADER(LUS::ResourceType::Anim, 0); auto header = data["header"]; diff --git a/src/factories/sm64/SAnimFactory.h b/src/factories/sm64/SAnimFactory.h new file mode 100644 index 0000000..a5fa529 --- /dev/null +++ b/src/factories/sm64/SAnimFactory.h @@ -0,0 +1,9 @@ +#pragma once + +#include "factories/RawFactory.h" + +class SAnimFactory : public RawFactory { +public: + SAnimFactory() = default; + bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector<uint8_t>& buffer) override; +};
\ No newline at end of file diff --git a/src/factories/sm64/SDialogFactory.cpp b/src/factories/sm64/SDialogFactory.cpp new file mode 100644 index 0000000..ad6cca4 --- /dev/null +++ b/src/factories/sm64/SDialogFactory.cpp @@ -0,0 +1,65 @@ +#include <iostream> +#include "SDialogFactory.h" + +#include "utils/MIODecoder.h" +#include "binarytools/BinaryReader.h" + +namespace fs = std::filesystem; + +static size_t id = 0; + +bool SDialogFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector<uint8_t>& buffer) { + + WRITE_HEADER(LUS::ResourceType::SDialog, 0); + + auto offset = data["offset"].as<size_t>(); + auto mio0 = data["mio0"].as<size_t>(); + + std::vector<uint8_t> text; + auto decoded = MIO0Decoder::Decode(buffer, offset); + auto bytes = (uint8_t*) decoded.data(); + LUS::BinaryReader reader(decoded.data(), decoded.size()); + reader.SetEndianness(LUS::Endianness::Big); + reader.Seek(mio0, LUS::SeekOffsetType::Start); + + auto unused = reader.ReadUInt32(); + auto linesPerBox = reader.ReadUByte(); + // Padding + reader.Read(1); + auto leftOffset = reader.ReadInt16(); + auto width = reader.ReadInt16(); + // Padding + reader.Read(2); + auto str = SEGMENT_OFFSET(reader.ReadInt32()); + + while(bytes[str] != 0xFF){ + auto c = bytes[str++]; + text.push_back(c); + } + text.push_back(0xFF); + + std::cout << "unused: " << unused << std::endl; + std::cout << "linesPerBox: " << (int) linesPerBox << std::endl; + std::cout << "leftOffset: " << leftOffset << std::endl; + std::cout << "width: " << width << std::endl; + std::cout << "size: " << text.size() << std::endl; + + WRITE_U32(unused); + WRITE_I8(linesPerBox); + WRITE_I16(leftOffset); + WRITE_I16(width); + + WRITE_U32(text.size()); + WRITE_ARRAY(text.data(), text.size()); + + if(id == 85){ + int bp = 0; + } + + id++; + return true; +} + +// seg2_dialog_table +// seg2_course_name_table +// seg2_act_name_table diff --git a/src/factories/sm64/SDialogFactory.h b/src/factories/sm64/SDialogFactory.h new file mode 100644 index 0000000..a1f58a9 --- /dev/null +++ b/src/factories/sm64/SDialogFactory.h @@ -0,0 +1,9 @@ +#pragma once + +#include "../RawFactory.h" + +class SDialogFactory : public RawFactory { +public: + SDialogFactory() = default; + bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector<uint8_t>& buffer) override; +};
\ No newline at end of file diff --git a/src/factories/sm64/STextFactory.cpp b/src/factories/sm64/STextFactory.cpp new file mode 100644 index 0000000..e6b27ee --- /dev/null +++ b/src/factories/sm64/STextFactory.cpp @@ -0,0 +1,28 @@ +#include "STextFactory.h" + +#include "utils/MIODecoder.h" + +namespace fs = std::filesystem; + +bool STextFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector<uint8_t>& buffer) { + + WRITE_HEADER(LUS::ResourceType::Blob, 0); + + auto offset = data["offset"].as<size_t>(); + auto mio0 = data["mio0"].as<size_t>(); + + std::vector<uint8_t> text; + auto decoded = MIO0Decoder::Decode(buffer, offset); + auto bytes = (uint8_t*) decoded.data(); + + while(bytes[mio0] != 0xFF){ + auto c = bytes[mio0++]; + text.push_back(c); + } + text.push_back(0xFF); + + WRITE_U32(text.size()); + WRITE_ARRAY(text.data(), text.size()); + + return true; +} diff --git a/src/factories/AnimFactory.h b/src/factories/sm64/STextFactory.h index c1ca50d..7f9fe00 100644 --- a/src/factories/AnimFactory.h +++ b/src/factories/sm64/STextFactory.h @@ -1,9 +1,9 @@ #pragma once -#include "RawFactory.h" +#include "../RawFactory.h" -class AnimFactory : public RawFactory { +class STextFactory : public RawFactory { public: - AnimFactory() = default; + STextFactory() = default; bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector<uint8_t>& buffer) override; };
\ No newline at end of file diff --git a/tools/offset_find.js b/tools/offset_find.js index f9796b0..3cd7a3a 100644 --- a/tools/offset_find.js +++ b/tools/offset_find.js @@ -1,7 +1,7 @@ const fs = require('fs'); -const bytes = fs.readFileSync('./baserom.eu.z64'); -const file = fs.readFileSync('./00_sound_player_eu.m64'); +const bytes = fs.readFileSync('./baserom.jp.z64'); +const file = Buffer.from([0x8B,0xD5,0x71,0x98,0x55,0xF0,0x82,0x9F,0x7F,0xF0,0x45,0x40,0x67,0x5E,0x4D,0x6D,0xFF]); const offset = bytes.indexOf(file); const size = file.length; diff --git a/tools/text_offsets.js b/tools/text_offsets.js index 699078c..8ebc1b0 100644 --- a/tools/text_offsets.js +++ b/tools/text_offsets.js @@ -1,47 +1,130 @@ const fs = require('fs'); const path = require('path'); +const YAML = require('./yaml/dist/index') -let _parent = 'assets/reordered'; -let bytes = Buffer.alloc(0); +// https://hack64.net/wiki/doku.php?id=super_mario_64:mio0 +// https://hack64.net/wiki/doku.php?id=super_mario_64:segment_2 -function toHex(value) { - let hex = value.toString(16); - if ((hex.length % 2) > 0) { - hex = "0" + hex; +const version = 'us'; +const roms = { + us: { + dialog: { start: 0x0FFC8, end: 0x10A68 }, + level: { start: 0x10F68, end: 0x10FD4 }, + act: { start: 0x1192C, end: 0x11AB4 }, } - return `0x${hex.toUpperCase()}`; -} - -function toBEU16(num){ - let d = new Uint16Array(1); - d[0] = num; - return Buffer.from(d.buffer).swap16() -} - -async function parseAnim(file){ - let fimport = `./${file.replace('.js', '')}` - let data = require(fimport) - for(let id of fimport.split('_').slice(1)){ - let anim = data['anim_'+id]; - let hOffset = bytes.indexOf(Buffer.concat(anim.slice(0, 6).map(toBEU16))); - - let bswValues = Buffer.concat(anim[6].map(toBEU16)); - let vsOffset = bytes.indexOf(bswValues); - let bswIndices = Buffer.concat(anim[7].map(toBEU16)); - let idxOffset = bytes.indexOf(bswIndices); - console.log(`"assets/anims/anim_${id}.anim": ${JSON.stringify({ - header: [hOffset, 0x18], - values: [vsOffset, bswValues.length], - indices: [idxOffset, bswIndices.length], - })},`); +} + +function toYAML(obj){ + let file = `${obj.file}`; + delete obj.file; + return YAML.stringify({ + [file]: obj + }); +} + +function align16(num){ + return (num + 0xF) & ~0xF; +} + +function seg_offset(a){ + return a & 0x00ffffff +} + +function readEntry(bytes, offset){ + let size = 0; + let unused = bytes.readUInt32BE(offset + size); + size += 4; + let linesPerBox = bytes.readInt8(offset + size); + size += 2; + let leftOffset = bytes.readInt16BE(offset + size); + size += 2; + let width = bytes.readInt16BE(offset + size); + size += 4; + let str = seg_offset(bytes.readInt32BE(offset + size)); + size += 4; + + let outText = [] + while(bytes[str] != 0xFF){ + let c = bytes[str]; + outText.push(c); + str += 1; + } + outText.push(0xFF) + + return { + unused, + linesPerBox, + leftOffset, + width, + text: Buffer.from(outText), + }; +} + +function findDialogs(bytes, out){ + let { start, end } = roms[version].dialog; + let size = align16(end - start); + + for(let i = 0; i < size; i += 16){ + fs.appendFileSync(out, toYAML({ + file: `dialogs/dialog_${(i / 16).toString(16).padStart(2, '0').toUpperCase()}`, + type: 'SM64:DIALOG', + offset: 0x108A40, + mio0: start + i + })); + + console.log(i / 16, readEntry(bytes, start + i)); + } +} + +function readLevel(bytes, offset){ + let outText = [] + while(bytes[offset] != 0xFF){ + let c = bytes[offset]; + outText.push(c); + offset += 1; + } + outText.push(0xFF) + return Buffer.from(outText); +} + +function findLevelNames(bytes, out) { + let { start, end } = roms[version].level; + let size = ((end - start) / 4) - 1; + console.log(size) + + for(let i = 0; i < size; i++){ + let offset = seg_offset(bytes.readUInt32BE(start + (i * 4))); + fs.appendFileSync(out, toYAML({ + file: `courses/course_${(i).toString(16).padStart(2, '0').toUpperCase()}`, + type: 'SM64:TEXT', + offset: 0x108A40, + mio0: offset + })); + } +} + +function findAct(bytes, out) { + let { start, end } = roms[version].act; + let size = ((end - start) / 4) - 1; + console.log(size) + for(let i = 0; i < size; i++){ + let offset = seg_offset(bytes.readUInt32BE(start + (i * 4))); + fs.appendFileSync(out, toYAML({ + file: `acts/act_${(i).toString(16).padStart(2, '0').toUpperCase()}`, + type: 'SM64:TEXT', + offset: 0x108A40, + mio0: offset + })); } } async function main(){ - bytes = fs.readFileSync('./baserom.us.z64'); - let tst = [0x46,0x00,0x52,0x00,0x54,0x00,0x56,0x00,0x58,0x00,0x5a,0x00,0x5c,0x00,0x5e,0x00,0x60,0x00,0x62,0x00,0x64,0x00,0x67,0x00,0x69,0x00,0x6b,0x00,0x6d,0x00,0x6f,0x00,0x71,0x00,0x73,0x00,0x75,0x00,0x77,0x00,0x79,0x00,0x7b,0x00,0x7d,0x00,0x7f,0x00,0x81,0x00,0x83,0x00,0x85,0x00,0x87,0x00,0x89,0x00,0x8b,0x00,0x8d,0x00,0x8f,0x00,0x91,0x00,0x93,0x00,0x95,0x00,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x01,0x22,0x01,0x11,0x01,0x22,0x01,0x0e,0x01,0x13,0x01,0x0f,0x01,0x12,0x01,0x0b,0x01,0x0d,0x02,0x21,0x10,0x01,0x14,0x01,0x15,0x01,0x16,0x01,0x17,0x01,0x18,0x01,0x12,0x01,0x19,0x01,0x1f,0x01,0x21,0x01,0x1a,0x01,0x0e,0x01,0x1b,0x01,0x1a,0x01,0x1c,0x01,0x1d,0x01,0x25,0x01,0x14,0x01,0x20,0x01,0x1e,0x01,0x1b,0x01,0x1a,0x01,0x23,0x01,0x24,0x01,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]; - let text = Buffer.from(tst) - console.log(bytes.indexOf(text)) + let bytes = fs.readFileSync('./debug/text/text/dump'); + let output = path.join('assets/sm64/us', 'texts.yml'); + fs.writeFileSync(output, ''); + findDialogs(bytes, output); + findLevelNames(bytes, output); + findAct(bytes, output); } main();
\ No newline at end of file |
