possibly fix preprocessor/checkmoney issues

This commit is contained in:
Bryan Bishop 2012-04-27 16:33:37 -05:00
parent 14a35baa3f
commit 45c41795f5
2 changed files with 30 additions and 2 deletions

View File

@ -1407,7 +1407,29 @@ class MoneyByteParam(MultiByteParam):
size = 3 size = 3
max_value = 0x0F423F max_value = 0x0F423F
should_be_decimal = True 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): class CoinByteParam(MultiByteParam):
size = 2 size = 2

View File

@ -10,7 +10,8 @@ from extras.crystal import command_classes, \
PeopleEvent, \ PeopleEvent, \
DataByteWordMacro, \ DataByteWordMacro, \
PointerLabelBeforeBank, \ PointerLabelBeforeBank, \
PointerLabelAfterBank PointerLabelAfterBank, \
MoneyByteParam
macros = command_classes + \ macros = command_classes + \
[Warp, XYTrigger, Signpost, PeopleEvent, DataByteWordMacro] [Warp, XYTrigger, Signpost, PeopleEvent, DataByteWordMacro]
@ -450,6 +451,8 @@ def macro_translator(macro, token, line):
elif param_klass.byte_type == "dw": elif param_klass.byte_type == "dw":
if param_klass.size == 2: if param_klass.size == 2:
allowed_length += 1 # just label allowed_length += 1 # just label
elif param_klass == MoneyByteParam:
allowed_length += 1
elif param_klass.size == 3: elif param_klass.size == 3:
allowed_length += 2 # bank and label allowed_length += 2 # bank and label
else: else:
@ -488,12 +491,15 @@ def macro_translator(macro, token, line):
# write the pointer second # write the pointer second
sys.stdout.write("dw " + params[index+1] + "\n") sys.stdout.write("dw " + params[index+1] + "\n")
index += 2 index += 2
elif size == 3 and issubclass(param_klass, PointerLabelAfterBank): elif size == 3 and (issubclass(param_klass, PointerLabelAfterBank):
# write the pointer first # write the pointer first
sys.stdout.write("dw " + params[index] + "\n") sys.stdout.write("dw " + params[index] + "\n")
# write the bank second # write the bank second
sys.stdout.write("db " + params[index+1] + "\n") sys.stdout.write("db " + params[index+1] + "\n")
index += 2 index += 2
elif size == 3 and issubclass(param_klass, MoneyByteParam):
sys.stdout.write("db " + MoneyByteParam.from_asm(params[index]) + "\n")
index += 1
else: else:
raise Exception, "dunno what to do with this macro " + \ raise Exception, "dunno what to do with this macro " + \
"param (" + str(param_klass) + ") " + "on this line: " + \ "param (" + str(param_klass) + ") " + "on this line: " + \