diff options
author | Bryan Bishop <kanzure@gmail.com> | 2012-04-27 16:33:37 -0500 |
---|---|---|
committer | Bryan Bishop <kanzure@gmail.com> | 2012-04-27 16:33:37 -0500 |
commit | 45c41795f517f420bc0b6cef4d061f767d90915c (patch) | |
tree | b4932c40396aef3925b86c7467df7c1102cfdef0 | |
parent | 14a35baa3fdc794c3a4f037530554768926e6465 (diff) |
possibly fix preprocessor/checkmoney issues
-rw-r--r-- | extras/crystal.py | 22 | ||||
-rw-r--r-- | preprocessor.py | 10 |
2 files changed, 30 insertions, 2 deletions
diff --git a/extras/crystal.py b/extras/crystal.py index bd13f6a51..b2ae2e08d 100644 --- a/extras/crystal.py +++ b/extras/crystal.py @@ -1407,7 +1407,29 @@ class MoneyByteParam(MultiByteParam): size = 3 max_value = 0x0F423F should_be_decimal = True + def parse(self): + MultiByteParam.parse(self) + # in the rom as xxyyzz + self.x = self.bytes[0] + self.y = self.bytes[1] + self.z = self.bytes[2] + def to_asm(self): + return str(self.x + self.y << 8 + self.z << 16) + + #this is used by the preprocessor + @staticmethod + def from_asm(value): + #max is 0F423F + #z = 0x0F ; y = 0x42 ; x = 0x3F + #999999 = x + (y << 8) + (z << 16) + + value = int(value) + + x = (value & 0x0000FF) + y = (value & 0x00FF00) >> 8 + z = (value & 0xFF0000) >> 16 + return str(x) + "\ndb "+str(y)+"\ndb "+str(z) class CoinByteParam(MultiByteParam): size = 2 diff --git a/preprocessor.py b/preprocessor.py index 336dc18b0..bd60141cd 100644 --- a/preprocessor.py +++ b/preprocessor.py @@ -10,7 +10,8 @@ from extras.crystal import command_classes, \ PeopleEvent, \ DataByteWordMacro, \ PointerLabelBeforeBank, \ - PointerLabelAfterBank + PointerLabelAfterBank, \ + MoneyByteParam macros = command_classes + \ [Warp, XYTrigger, Signpost, PeopleEvent, DataByteWordMacro] @@ -450,6 +451,8 @@ def macro_translator(macro, token, line): elif param_klass.byte_type == "dw": if param_klass.size == 2: allowed_length += 1 # just label + elif param_klass == MoneyByteParam: + allowed_length += 1 elif param_klass.size == 3: allowed_length += 2 # bank and label else: @@ -488,12 +491,15 @@ def macro_translator(macro, token, line): # write the pointer second sys.stdout.write("dw " + params[index+1] + "\n") index += 2 - elif size == 3 and issubclass(param_klass, PointerLabelAfterBank): + elif size == 3 and (issubclass(param_klass, PointerLabelAfterBank): # write the pointer first sys.stdout.write("dw " + params[index] + "\n") # write the bank second sys.stdout.write("db " + params[index+1] + "\n") index += 2 + elif size == 3 and issubclass(param_klass, MoneyByteParam): + sys.stdout.write("db " + MoneyByteParam.from_asm(params[index]) + "\n") + index += 1 else: raise Exception, "dunno what to do with this macro " + \ "param (" + str(param_klass) + ") " + "on this line: " + \ |