ogrebattle64/tools/serifu.py

52 lines
5.7 KiB
Python

pattern_serifu_00_0 = """
0000001C 00000052 00000075 000000D0 0000014F 00000177 000001A0
402D4078406C3340724053304041406E406E403D7B5430357D596F7527726520
6C656176696E6720746F6D6F72726F773F4073406300402D4078406C3340
724053304041406E406E403D7B5430357D596561682E4073406300402D40
78406C3340724053304041406E406E403D5768792063616E277420796F75
207374617920686572653F407340634073406E406E403D57687920746865
206D696C69746172792061636164656D793F205768793F4073406300402D
4078406C3340724053304041406E406E403D476F64206B6E6F7773207768
657265206D79206D6F746865722069737B5430357D407340634073406E40
6E403D616E6420492063616E2774207374616E647B5430357D4073406340
73406E406E403D6265696E672061726F756E64206D79206661746865722E
4073406300402D4078406C3340724053304041406E7B5430357D7B543035
7D7B5430357D406E403D4073406300402D4078406C334072405330404140
6E406E403D49276D206C656176696E677B5430357D4073406300402D4078
406C3340724053304041406E406E403D7B5430357D59756D696C2C407340
634073406E406E403D492070726F6D6973652049276C6C206D616B652079
6F752070726F75642E407340634073406E406E403D49206861766520746F
206C6561726E20746F207374616E64206F6E206D79206F776E7B5430357D
407340634073406E406E403D536F20492063616E2070726F746563742062
6F7468206F662075732E4073406300
"""
pattern_serifu_00_1 = """
00 00 00 30 00 00 01 3C 00 00 02 9E 00 00 02 C7 00 00 02 F5 00 00 03 23 00 00 03 4B 00 00 03 75 00 00 03 9F 00 00 03 E4 00 00 04 1C 00 00 04 47 41 72 63 68 62 69 73 68 6F 70 20 4F 64 69 72 6F 6E 40 6E 22 48 65 20 77 68 6F 20 68 61 73 20 6C 65 61 72 6E 65 64 20 74 68 65 20 77 61 79 20 6F 66 40 6E 20 74 68 65 20 73 77 6F 72 64 20 61 6E 64 20 67 6F 64 27 73 20 74 65 61 63 68 69 6E 67 73 2C 40 70 40 63 20 69 6E 20 61 63 63 6F 72 64 61 6E 63 65 20 77 69 74 68 20 74 68 65 40 6E 20 74 72 61 64 69 74 69 6F 6E 73 20 6B 65 70 74 20 73 69 6E 63 65 40 6E 20 74 68 65 20 64 61 79 73 20 6F 66 20 74 68 65 20 50 72 6F 67 65 6E 69 74 6F 72 2C 40 70 40 63 20 49 20 73 68 61 6C 74 20 6E 6F 77 20 63 6F 6D 70 6C 65 74 65 40 6E 20 74 68 79 20 74 72 61 69 6E 69 6E 67 20 77 69 74 68 20 61 6E 20 6F 61 74 68 40 6E 20 74 6F 20 6F 75 72 20 4D 6F 74 68 65 72 20 42 65 72 74 68 65 2E 40 70 40 63 20 57 68 61 74 20 69 73 20 74 68 79 20 6E 61 6D 65 3F 22 40 61 40 63 00 41 72 63 68 62 69 73 68 6F 70 20 4F 64 69 72 6F 6E 40 6E 22 40 25 30 20 47 61 6C 6C 61 6E 74 2C 40 6E 20 49 20 61 73 6B 20 74 68 65 65 7B 54 30 35 7D 22 40 70 40 63 22 57 68 61 74 20 64 6F 73 74 20 74 68 6F 75 20 68 6F 6C 64 20 77 69 74 68 69 6E 40 6E 20 74 68 79 20 73 77 6F 72 64 3F 22 40 73 40 63 22 57 68 61 74 20 73 68 61 6C 74 20 74 68 6F 75 20 73 65 76 65 72 20 77 69 74 68 40 6E 20 74 68 79 20 73 77 6F 72 64 3F 22 40 73 40 63 22 46 6F 72 20 77 68 61 74 20 73 68 61 6C 74 20 74 68 6F 75 20 62 65 73 65 65 63 68 40 6E 20 74 68 65 20 67 6F 64 73 3F 22 40 73 40 63 22 57 68 61 74 20 73 68 61 6C 74 20 74 68 6F 75 20 6F 66 66 65 72 40 6E 20 74 68 65 20 67 6F 64 73 3F 22 40 73 40 63 22 57 68 61 74 20 64 6F 73 74 20 74 68 6F 75 20 77 69 73 68 20 66 6F 72 3F 22 40 73 40 63 22 57 68 61 74 20 73 68 61 6C 74 20 74 68 6F 75 20 72 69 64 20 66 72 6F 6D 40 6E 20 74 68 69 73 20 6C 61 6E 64 3F 22 40 73 40 63 22 4C 61 73 74 6C 79 2C 20 66 6F 72 20 77 68 6F 73 65 20 68 65 6C 70 40 6E 20 64 6F 73 74 20 74 68 6F 75 20 63 61 6C 6C 20 75 70 6F 6E 3F 22 40 73 40 63 00 40 25 30 40 6E 22 49 20 68 6F 6C 64 20 40 25 37 40 6E 20 77 69 74 68 69 6E 20 6D 79 20 73 77 6F 72 64 2E 22 40 61 40 63 00 40 25 30 40 6E 22 57 69 74 68 20 6D 79 20 73 77 6F 72 64 2C 20 49 20 77 69 6C 6C 40 6E 20 73 65 76 65 72 20 40 25 37 2E 22 40 61 40 63 00 40 25 30 40 6E 22 49 20 77 69 6C 6C 20 62 65 73 65 65 63 68 20 74 68 65 20 67 6F 64 73 40 6E 20 66 6F 72 20 40 25 37 2E 22 40 61 40 63 00 40 25 30 40 6E 22 49 20 77 69 6C 6C 20 6F 66 66 65 72 20 74 68 65 20 67 6F 64 73 40 6E 20 40 25 37 2E 22 40 61 40 63 00 40 25 30 40 6E 22 49 20 77 69 73 68 20 66 6F 72 20 40 25 37 40 6E 20 6F 6E 20 74 68 69 73 20 6C 61 6E 64 2E 22 40 61 40 63 00 40 25 30 40 6E 22 49 20 77 69 6C 6C 20 72 69 64 20 74 68 69 73 20 6C 61 6E 64 40 6E 20 6F 66 20 40 25 37 2E 22 40 61 40 63 00 41 72 63 68 62 69 73 68 6F 70 20 4F 64 69 72 6F 6E 40 6E 22 55 70 6F 6E 20 74 68 79 20 64 65 70 61 72 74 75 72 65 2C 40 6E 20 49 20 62 65 73 74 6F 77 20 74 68 65 73 65 20 67 69 66 74 73 2E 22 40 61 40 63 00 41 72 63 68 62 69 73 68 6F 70 20 4F 64 69 72 6F 6E 40 6E 22 57 68 61 74 20 69 73 20 74 68 65 20 64 61 74 65 20 6F 66 20 74 68 79 20 62 69 72 74 68 3F 22 40 61 40 63 00 40 25 30 40 6E 22 49 20 63 61 6C 6C 20 75 70 6F 6E 20 74 68 65 40 6E 20 40 25 37 20 66 6F 72 20 68 65 6C 70 2E 22 40 61 40 63 00 40 2D 40 78 40 6C 33 40 72 40 53 30 40 41 40 3D 53 69 78 20 79 65 61 72 73 20 6C 61 74 65 72 7B 54 30 35 7D 40 54 30 33 30 40 6E 40 6E 40 3D 57 69 6E 6E 65 61 2C 20 43 61 70 69 74 61 6C 20 6F 66 20 50 61 6C 61 74 69 6E 75 73 40 73 40 63 40 3D 40 54 30 33 30 49 73 63 68 6B 61 20 4D 69 6C 69 74 61 72 79 20 41 63 61 64 65 6D 79 40 54 30 33 30 40 6E 40 6E 40 3D 47 72 61 64 75 61 74 69 6F 6E 20 43 65 72 65 6D 6F 6E 79 40 73 40 63 40 73 40 6E 40 3D 22 4F 75 72 20 6E 65 78 74 20 67 72 61 64 75 61 74 65 7B 54 30 35 7D 22 40 73 40 63 00
"""
from struct import unpack_from
data = bytes.fromhex(pattern_serifu_00_1)
cursor = 0
(dialog_start,) = unpack_from('>i', data[0:4])
offsets = []
for i in range(0, dialog_start, 4):
(value,) = unpack_from('>i', data[i:])
offsets.append(value)
# The last string ends at the end of the data.
offsets.append(len(data))
print(f"Amount of dialog: {len(offsets)}")
for i in range(0, len(offsets) - 1):
[start, end] = offsets[i:i+2]
print(data[start:end])
# b"@-@x@l3@r@S0@A@n@n@={T05}You're leaving tomorrow?@s@c\x00"
# b'@-@x@l3@r@S0@A@n@n@={T05}Yeah.@s@c\x00'
# b'@-@x@l3@r@S0@A@=Six years later{T05}@T030@n@n@=Winnea, Capital of Palatinus@s@c@=@T030Ischka Military Academy@T030@n@n@=Graduation Ceremony@s@c@s@n@="Our next graduate{T05}"@s@c\x00'