diff options
author | Bryan Bishop <kanzure@gmail.com> | 2012-05-13 18:53:11 -0500 |
---|---|---|
committer | Bryan Bishop <kanzure@gmail.com> | 2012-05-13 18:53:11 -0500 |
commit | 8fffbe86b33a0d6a72d0979533504f55f4b0ae5d (patch) | |
tree | f4acaa34577e2c57bc04ae3e608163efe133a54c /crystal.py | |
parent | 933ecf38231d2f540303c306010f7beb34f4049e (diff) |
use deepcopy to create applymovement commands
original-commit-id: 251fb52d8ae9cc1b99389528dd27db7528aa8d8b
Diffstat (limited to 'crystal.py')
-rw-r--r-- | crystal.py | 50 |
1 files changed, 40 insertions, 10 deletions
@@ -1984,6 +1984,7 @@ class MovementCommand(Command): return name +# down, up, left, right movement_command_bases = { 0x00: "turn_head", 0x04: "half_step", @@ -2028,7 +2029,7 @@ def create_movement_commands(debug=False): # lambda obj: inspect.isclass(obj) and \ # issubclass(obj, MovementCommand) and \ # not (obj is MovementCommand)) - movement_command_classes = [] + movement_command_classes2 = [] for (byte, cmd) in movement_command_bases.items(): if type(cmd) == str: cmd = [cmd] @@ -2044,12 +2045,41 @@ def create_movement_commands(debug=False): print "each is: " + str(each) print "thing[class] is: " + str(thing["class"]) params["size"] += thing["class"].size - klass_name = cmd_name+"Command" - klass = classobj(klass_name, (Command,), params) - globals()[klass_name] = klass - movement_command_classes.append(klass) + + if byte <= 0x34: + for x in range(0, 4): + + direction = None + if x == 0: + direction = "down" + elif x == 1: + direction = "up" + elif x == 2: + direction = "left" + elif x == 3: + direction = "right" + else: raise Exception, "this should never happen" + + cmd_name = cmd[0].replace(" ", "_") + "_" + direction + klass_name = cmd_name+"Command" + params["id"] = copy(byte) + params["macro_name"] = cmd_name + klass = classobj(copy(klass_name), (MovementCommand,), deepcopy(params)) + globals()[klass_name] = klass + movement_command_classes2.append(klass) + print "klass.byte is: " + hex(klass.id) + + byte += 1 + del cmd_name + del params + del klass_name + else: + klass_name = cmd_name+"Command" + klass = classobj(klass_name, (MovementCommand,), params) + globals()[klass_name] = klass + movement_command_classes2.append(klass) #later an individual klass will be instantiated to handle something - return movement_command_classes + return movement_command_classes2 movement_command_classes = create_movement_commands() @@ -2112,14 +2142,14 @@ class ApplyMovementData: # match the command id byte to a scripting command class like "step half" for class_ in movement_command_classes: # allow lists of ids - if type(class_[1].id) == list and cur_byte in class_[1].id \ - or class_[1].id == cur_byte: - scripting_command_class = class_[1] + if (type(class_.id) == list and cur_byte in class_.id) \ + or class_.id == cur_byte: + scripting_command_class = class_ # temporary fix for applymovement scripts if ord(rom[current_address]) == 0x47: end = True - scripting_command_class = movement_command_classes[0][1] + scripting_command_class = movement_command_classes[0] # no matching command found if scripting_command_class == None: |