ref: 251fb52d8ae9cc1b99389528dd27db7528aa8d8b
parent: b41da5fe1c6a5cfd6c01bdfd89b263c454e048a8
author: Bryan Bishop <[email protected]>
date: Sun May 13 14:53:11 EDT 2012
use deepcopy to create applymovement commands
--- a/extras/crystal.py
+++ b/extras/crystal.py
@@ -1984,6 +1984,7 @@
return name
+# down, up, left, right
movement_command_bases = {
0x00: "turn_head",
0x04: "half_step",
@@ -2028,7 +2029,7 @@
# 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 @@
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 @@
# 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: