scripts: add dir
Add 2 scripts that I just used, could be useful.
This commit is contained in:
parent
a7102917f4
commit
eff19f5551
48
scripts/kf4-group-sounds.py
Executable file
48
scripts/kf4-group-sounds.py
Executable file
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Group KF4 sound files together in named dirs for later use w/ mkpsf2.
|
||||||
|
|
||||||
|
Some tools to handle sounds have issues with PS2 sounds split as HD/BD/SQ, so
|
||||||
|
grouping them with this script makes it easier to batch process them with mkspf2
|
||||||
|
so you can process them later as PSF2.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ./kf4-group-sounds.py workspace/dat/snd/ workspace/soundgroups
|
||||||
|
$ cd workspace/soundgroups
|
||||||
|
$ ls -lF
|
||||||
|
bgm000/
|
||||||
|
bgm001/
|
||||||
|
...
|
||||||
|
$ fd -t d -x wine mkpsf2 {}.psf2 {}
|
||||||
|
```
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import glob
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
argparser = argparse.ArgumentParser()
|
||||||
|
argparser.add_argument("snd_dir")
|
||||||
|
argparser.add_argument("output_dir")
|
||||||
|
args = argparser.parse_args()
|
||||||
|
copy_files(Path(args.snd_dir), Path(args.output_dir))
|
||||||
|
|
||||||
|
|
||||||
|
def copy_files(snd_path, output_path):
|
||||||
|
filenames = set([os.path.splitext(f)[0] for f in os.listdir(snd_path)])
|
||||||
|
for filename in filenames:
|
||||||
|
subfiles = glob.glob(str(snd_path / "{}.*".format(filename)))
|
||||||
|
files_output_path = output_path / filename
|
||||||
|
if not files_output_path.exists():
|
||||||
|
files_output_path.mkdir(parents=True)
|
||||||
|
for f in subfiles:
|
||||||
|
shutil.copyfile(f, files_output_path / os.path.basename(f))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
28
scripts/patch.py
Executable file
28
scripts/patch.py
Executable file
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Patch a file with another file at offset. Useful for dirty DAT patching."""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
argparser = argparse.ArgumentParser()
|
||||||
|
argparser.add_argument("archive", help="File to be modified")
|
||||||
|
argparser.add_argument("file", help="File to patch in archive")
|
||||||
|
argparser.add_argument("offset", help="Offset as hex")
|
||||||
|
args = argparser.parse_args()
|
||||||
|
|
||||||
|
archive_path, input_file_path = args.archive, args.file
|
||||||
|
ofs = int(args.offset.lstrip("0x").rstrip("h"), 16)
|
||||||
|
patch(archive_path, input_file_path, ofs)
|
||||||
|
|
||||||
|
|
||||||
|
def patch(archive_path, input_file_path, ofs):
|
||||||
|
with open(input_file_path, "rb") as input_file:
|
||||||
|
input_data = input_file.read()
|
||||||
|
with open(archive_path, "rb+") as archive_file:
|
||||||
|
archive_file.seek(ofs)
|
||||||
|
archive_file.write(input_data)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Reference in a new issue