This commit is contained in:
sShemet
2025-12-22 14:03:10 +05:00
commit ade2833df7
74 changed files with 42924 additions and 0 deletions

BIN
clannad_parser/00414.scr Normal file

Binary file not shown.

BIN
clannad_parser/00416.scr Normal file

Binary file not shown.

BIN
clannad_parser/00417.scr Normal file

Binary file not shown.

BIN
clannad_parser/00418.scr Normal file

Binary file not shown.

BIN
clannad_parser/00419.scr Normal file

Binary file not shown.

BIN
clannad_parser/00420.scr Normal file

Binary file not shown.

BIN
clannad_parser/00421.scr Normal file

Binary file not shown.

BIN
clannad_parser/00422.scr Normal file

Binary file not shown.

BIN
clannad_parser/00423.scr Normal file

Binary file not shown.

BIN
clannad_parser/00424.scr Normal file

Binary file not shown.

BIN
clannad_parser/00425.scr Normal file

Binary file not shown.

BIN
clannad_parser/00429.scr Normal file

Binary file not shown.

BIN
clannad_parser/02426.scr Normal file

Binary file not shown.

BIN
clannad_parser/02509.scr Normal file

Binary file not shown.

BIN
clannad_parser/04425.scr Normal file

Binary file not shown.

BIN
clannad_parser/04503.scr Normal file

Binary file not shown.

BIN
clannad_parser/04508.scr Normal file

Binary file not shown.

BIN
clannad_parser/05424.scr Normal file

Binary file not shown.

BIN
clannad_parser/05430.scr Normal file

Binary file not shown.

BIN
clannad_parser/07400.scr Normal file

Binary file not shown.

BIN
clannad_parser/07401.scr Normal file

Binary file not shown.

BIN
clannad_parser/07500.scr Normal file

Binary file not shown.

BIN
clannad_parser/07600.scr Normal file

Binary file not shown.

74
clannad_parser/parser.py Normal file
View File

@@ -0,0 +1,74 @@
import sys
def parse_text_command(data, pos):
# Читаем параметры в Little Endian
text_id = int.from_bytes(data[pos:pos+2], 'little')
voice_id = int.from_bytes(data[pos+2:pos+6], 'little')
pos += 6
# Собираем текст до 0000
text_bytes = bytearray()
while pos + 2 <= len(data):
char_bytes = data[pos:pos+2]
if char_bytes == b'\x00\x00':
break
text_bytes.extend(char_bytes)
pos += 2
# Декодируем UTF-16LE текст
text = text_bytes.decode('utf-16le', errors='replace')
total_size = 8 + len(text_bytes) + 2 # 8 байт заголовка + текст + 0000
return f"TextID: {text_id}, VoiceID: {voice_id}, Text: {text}", total_size
# База команд (идентификаторы в Big Endian)
command_db = {
0x1401: {
"name": "PlayBGM",
"size": 2,
"handler": lambda data, pos: (f"BGM Track: {int.from_bytes(data[pos:pos+2], 'little')}", 2)
},
0x0A00: {
"name": "ShowText",
"size": 8,
"handler": parse_text_command
}
}
def parse_script(file_path):
with open(file_path, 'rb') as f:
data = f.read()
pos = 0
output = []
while pos + 2 <= len(data):
# Определяем команду в Big Endian
cmd = int.from_bytes(data[pos:pos+2], 'big')
if cmd in command_db:
cmd_info = command_db[cmd]
result, size = cmd_info["handler"](data, pos + 2)
output.append(f"[0x{pos:08X}][0x{cmd:04X}] {cmd_info['name']}: {result}")
pos += 2 + size # 2 байта команды + размер данных
# Выравнивание по 4 байтам
while pos % 4 != 0:
pos += 1
else:
# output.append(f"[0x{pos:08X}][0x{cmd:04X}] UNKNOWN COMMAND")
pos += 2
# Сохраняем в файл
with open("script" + file_path + ".txt", "w", encoding="utf-8") as f:
f.write("\n".join(output))
return output
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python parser.py <script.bin>")
sys.exit(1)
results = parse_script(sys.argv[1])
for line in results:
print(line)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff