summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryenatch <yenatch@gmail.com>2013-09-26 03:13:15 -0400
committeryenatch <yenatch@gmail.com>2013-09-26 03:13:15 -0400
commit3496b81eb3b5af6fa7d694cbac1610b5ff2c85f2 (patch)
treef5369d55bedf9b9e7379725c149cd009d3182791
parent001b6bc850b25f6cbd4d7a7cfa540c62cada88f6 (diff)
crystal.py: no more relative paths
-rw-r--r--pokemontools/crystal.py53
1 files changed, 37 insertions, 16 deletions
diff --git a/pokemontools/crystal.py b/pokemontools/crystal.py
index 8a12dad..089f694 100644
--- a/pokemontools/crystal.py
+++ b/pokemontools/crystal.py
@@ -61,6 +61,9 @@ import item_constants
import wram
import exceptions
+import config
+conf = config.Config()
+
from map_names import map_names
# ---- script_parse_table explanation ----
@@ -106,17 +109,21 @@ def map_name_cleaner(input):
rom = romstr.RomStr(None)
-def direct_load_rom(filename="../baserom.gbc"):
+def direct_load_rom(filename=None):
"""loads bytes into memory"""
+ if filename == None:
+ filename = os.path.join(conf.path, "baserom.gbc")
global rom
file_handler = open(filename, "rb")
rom = romstr.RomStr(file_handler.read())
file_handler.close()
return rom
-def load_rom(filename="../baserom.gbc"):
+def load_rom(filename=None):
"""checks that the loaded rom matches the path
and then loads the rom if necessary."""
+ if filename == None:
+ filename = os.path.join(conf.path, "baserom.gbc")
global rom
if rom != romstr.RomStr(None) and rom != None:
return rom
@@ -125,14 +132,18 @@ def load_rom(filename="../baserom.gbc"):
elif os.lstat(filename).st_size != len(rom):
return direct_load_rom(filename)
-def direct_load_asm(filename="../main.asm"):
+def direct_load_asm(filename=None):
+ if filename == None:
+ filename = os.path.join(conf.path, "main.asm")
"""returns asm source code (AsmList) from a file"""
asm = open(filename, "r").read().split("\n")
asm = romstr.AsmList(asm)
return asm
-def load_asm(filename="../main.asm"):
+def load_asm(filename=None):
"""returns asm source code (AsmList) from a file (uses a global)"""
+ if filename == None:
+ filename = os.path.join(conf.path, "main.asm")
global asm
asm = direct_load_asm(filename=filename)
return asm
@@ -3185,7 +3196,9 @@ effect_classes = create_effect_command_classes()
-def generate_macros(filename="../script_macros.asm"):
+def generate_macros(filename=None):
+ if filename == None:
+ filename = os.path.join(conf.path, "script_macros.asm")
"""generates all macros based on commands
this is dumped into script_macros.asm"""
output = "; This file is generated by generate_macros.\n"
@@ -5985,7 +5998,7 @@ def old_parse_second_map_header_at(address, map_group=None, map_id=None, debug=T
class MapBlockData:
base_label = "MapBlockData_"
- maps_path = os.path.realpath(os.path.join(os.path.realpath("."), "../maps"))
+ maps_path = os.path.realpath(os.path.join(conf.path, "maps"))
def __init__(self, address, map_group=None, map_id=None, debug=True, bank=None, label=None, width=None, height=None):
self.address = address
@@ -6887,9 +6900,11 @@ def reset_incbins():
isolate_incbins(asm=asm)
process_incbins()
-def find_incbin_to_replace_for(address, debug=False, rom_file="../baserom.gbc"):
+def find_incbin_to_replace_for(address, debug=False, rom_file=None):
"""returns a line number for which incbin to edit
if you were to insert bytes into main.asm"""
+ if rom_file == None:
+ rom_file = os.path.join(conf.path, "baserom.gbc")
if type(address) == str: address = int(address, 16)
if not (0 <= address <= os.lstat(rom_file).st_size):
raise IndexError("address is out of bounds")
@@ -6917,7 +6932,7 @@ def find_incbin_to_replace_for(address, debug=False, rom_file="../baserom.gbc"):
return incbin_key
return None
-def split_incbin_line_into_three(line, start_address, byte_count, rom_file="../baserom.gbc"):
+def split_incbin_line_into_three(line, start_address, byte_count, rom_file=None):
"""
splits an incbin line into three pieces.
you can replace the middle one with the new content of length bytecount
@@ -6925,6 +6940,8 @@ def split_incbin_line_into_three(line, start_address, byte_count, rom_file="../b
start_address: where you want to start inserting bytes
byte_count: how many bytes you will be inserting
"""
+ if rom_file == None:
+ rom_file = os.path.join(conf.path, "baserom.gbc")
if type(start_address) == str: start_address = int(start_address, 16)
if not (0 <= start_address <= os.lstat(rom_file).st_size):
raise IndexError("start_address is out of bounds")
@@ -6984,9 +7001,9 @@ def generate_diff_insert(line_number, newline, debug=False):
CalledProcessError = None
try:
- diffcontent = subprocess.check_output("diff -u ../main.asm " + newfile_filename, shell=True)
+ diffcontent = subprocess.check_output("diff -u " + os.path.join(conf.path, "main.asm") + " " + newfile_filename, shell=True)
except (AttributeError, CalledProcessError):
- p = subprocess.Popen(["diff", "-u", "../main.asm", newfile_filename], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ p = subprocess.Popen(["diff", "-u", os.path.join(conf.path, "main.asm"), newfile_filename], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
diffcontent = out
@@ -7006,8 +7023,8 @@ def apply_diff(diff, try_fixing=True, do_compile=True):
fh.close()
# apply the patch
- os.system("cp ../main.asm ../main1.asm")
- os.system("patch ../main.asm temp.patch")
+ os.system("cp " + os.path.join(conf.path, "main.asm") + " " + os.path.join(conf.path, "main1.asm"))
+ os.system("patch " + os.path.join(conf.path, "main.asm") + " " + "temp.patch")
# remove the patch
os.system("rm temp.patch")
@@ -7015,11 +7032,11 @@ def apply_diff(diff, try_fixing=True, do_compile=True):
# confirm it's working
if do_compile:
try:
- subprocess.check_call("cd ../; make clean; make", shell=True)
+ subprocess.check_call("cd " + conf.path + "; make clean; make", shell=True)
return True
except Exception, exc:
if try_fixing:
- os.system("mv ../main1.asm ../main.asm")
+ os.system("mv " + os.path.join(conf.path, "main1.asm") + " " + os.path.join(conf.path, "main.asm"))
return False
class AsmLine:
@@ -7151,8 +7168,10 @@ class AsmSection:
return self.line
new_asm = None
-def load_asm2(filename="../main.asm", force=False):
+def load_asm2(filename=None, force=False):
"""loads the asm source code into memory"""
+ if filename == None:
+ filename = os.path.join(conf.path, "main.asm")
global new_asm
if new_asm == None or force:
new_asm = Asm(filename=filename)
@@ -7160,7 +7179,9 @@ def load_asm2(filename="../main.asm", force=False):
class Asm:
"""controls the overall asm output"""
- def __init__(self, filename="../main.asm", debug=True):
+ def __init__(self, filename=None, debug=True):
+ if filename == None:
+ filename = os.path.join(conf.path, "main.asm")
self.parts = []
self.labels = []
self.filename = filename