Quake 3 Map Conversion Code

import os
import shutil
import subprocess
import sys

def version2e(bspfile):
    with open(bspfile, "r+b") as f:
        if f.read(4) != b"IBSP":
            return False
        f.seek(4)
        f.write(bytes([0x2e]))
    return True

if len(sys.argv) < 2:
    sys.exit()

#add extension if necessary
bspfile = sys.argv[1]
if os.path.splitext(bspfile)[1].lower() != ".bsp":
	bspfile += ".bsp"

mapname = os.path.splitext(bspfile)[0]

#copy bsp from baseq3 to pk3 folder
#should use os.path.join but fuck it
if not os.path.isdir(mapname + "/maps"):
	os.makedirs(mapname + "/maps")
shutil.copy2("../baseq3/maps/" + bspfile, mapname + "/maps/" + bspfile)

#make bspfile point to the actual location of the copied bsp
bspfile = mapname + "/maps/" + bspfile

#change bsp version
if version2e(bspfile) != True:
    print("Unable to change BSP version. Exiting...")
    sys.exit()

#export entities
subprocess.call(['q3map2', '-exportents', bspfile])

#replace advertisement entities
with open(mapname + "/maps/" + mapname + ".ent", "r+b") as f:
    data = f.read().replace(b'advertisement', b'func_static')

with open(mapname + "/maps/" + mapname + ".ent", "wb") as f:
    f.write(data)

#put entities back into bsp
subprocess.call(['q3map2', '-onlyents', mapname + "/maps/" + mapname+".ent"])
os.remove(mapname + "/maps/" + mapname + ".ent")

JS 2014