mirror of
https://github.com/freedoom/freedoom.git
synced 2025-09-01 22:25:46 -04:00
scripts: fix-gfx-offsets (#472)
This commit is contained in:
parent
9f48b64f43
commit
257781dcd9
1 changed files with 76 additions and 0 deletions
76
scripts/fix-gfx-offsets
Executable file
76
scripts/fix-gfx-offsets
Executable file
|
@ -0,0 +1,76 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
from os import path
|
||||||
|
import sys
|
||||||
|
import glob
|
||||||
|
import struct
|
||||||
|
import png
|
||||||
|
|
||||||
|
class Graphic(object):
|
||||||
|
def __init__(self, filepath):
|
||||||
|
self.filepath = filepath
|
||||||
|
self.filename = path.split(filepath)[1]
|
||||||
|
self.name = path.splitext(self.filename)[0].upper().replace('^', '\\')
|
||||||
|
self.has_offset = False
|
||||||
|
self.get_png_offset()
|
||||||
|
|
||||||
|
def get_png_offset(self):
|
||||||
|
reader = png.Reader(file=open(self.filepath, "rb"))
|
||||||
|
for chunk in reader.chunks():
|
||||||
|
if chunk[0] == "grAb":
|
||||||
|
self.xoffset, self.yoffset = struct.unpack(">II", chunk[1])
|
||||||
|
self.has_offset = True
|
||||||
|
|
||||||
|
def main():
|
||||||
|
dirname = path.split(path.abspath(__file__))[0]
|
||||||
|
graphics = []
|
||||||
|
files = []
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
print("This script takes the offsets stored in the \"grAb\" chunk of " +
|
||||||
|
"the specified PNGs and adjusts the graphics offsets in the build_cfg file.\n")
|
||||||
|
print("Usage:\n\t fix-sprite-offsets <names> [names] [...]\n")
|
||||||
|
print("example: \n\tfix-sprite-offsets sprites/vilea1.png sprites/vileb1.png")
|
||||||
|
print("You can also use wildcards:")
|
||||||
|
print("\t fix-sprite-offsets sprites/vile*.png")
|
||||||
|
exit()
|
||||||
|
else:
|
||||||
|
for param in sys.argv[1:]:
|
||||||
|
files.append(dirname + "/../" + param)
|
||||||
|
|
||||||
|
for filepath in files:
|
||||||
|
if not path.isfile(filepath):
|
||||||
|
print("Could not find" + filepath +", skipping...")
|
||||||
|
elif path.splitext(filepath)[1] == ".png":
|
||||||
|
graphics.append(Graphic(filepath))
|
||||||
|
for graphic in graphics:
|
||||||
|
if graphic.has_offset == False:
|
||||||
|
graphics.remove(graphic)
|
||||||
|
f = open(dirname + "/../buildcfg.txt", "r")
|
||||||
|
lines = f.readlines()
|
||||||
|
f.close()
|
||||||
|
newlines = []
|
||||||
|
for line in lines:
|
||||||
|
replaced_line = False
|
||||||
|
for graphic in graphics:
|
||||||
|
if graphic.has_offset is True:
|
||||||
|
thing = line.split()
|
||||||
|
if len(thing) > 0 and thing[0] == graphic.name:
|
||||||
|
new_string = "%s\t%i\t%i" %(graphic.name, graphic.xoffset, graphic.yoffset)
|
||||||
|
comments = line.split(";")
|
||||||
|
if len(comments) > 1:
|
||||||
|
new_string += "\t;" + "".join(comments[1:])
|
||||||
|
else:
|
||||||
|
new_string += "\n"
|
||||||
|
newlines.append(new_string)
|
||||||
|
replaced_line = True
|
||||||
|
print("Updated " + graphic.name + " offsets")
|
||||||
|
break
|
||||||
|
if replaced_line is False:
|
||||||
|
newlines.append(line)
|
||||||
|
f = open(dirname + "/../buildcfg.txt", "w")
|
||||||
|
f.writelines(newlines)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
Loading…
Add table
Add a link
Reference in a new issue