summaryrefslogtreecommitdiff
path: root/crystal.py
diff options
context:
space:
mode:
Diffstat (limited to 'crystal.py')
-rw-r--r--crystal.py50
1 files changed, 43 insertions, 7 deletions
diff --git a/crystal.py b/crystal.py
index 06919f2..ba044fa 100644
--- a/crystal.py
+++ b/crystal.py
@@ -2588,6 +2588,7 @@ class Command():
current_address = self.address+1
else:
current_address = self.address
+ #output = self.macro_name + ", ".join([param.to_asm() for (key, param) in self.params.items()])
#add each param
for (key, param) in self.params.items():
name = param.name
@@ -4801,6 +4802,9 @@ def parse_warps(address, warp_count, bank=None, map_group=None, map_id=None, deb
all_warps.extend(warps)
return warps
+#class Trigger(MapEventElement):
+# standard_size = trigger_byte_size
+# parse_func = parse_xy_trigger_bytes
def parse_xy_trigger_bytes(some_bytes, bank=None, map_group=None, map_id=None, debug=True):
"""parse some number of triggers from the data"""
assert len(some_bytes) % trigger_byte_size == 0, "wrong number of bytes"
@@ -4888,6 +4892,43 @@ def parse_trainer_header_at(address, map_group=None, map_id=None, debug=True):
"script_talk_again": script_talk_again,
}
+class PeopleEvent(Command):
+ size = people_event_byte_size
+ macro_name = "people_event_def"
+ base_label = "PeopleEvent_"
+ override_byte_check = True
+ param_types = {
+ 0: {"name": "picture", "class": HexByte},
+ 1: {"name": "y from top+4", "class": DecimalParam},
+ 2: {"name": "x from top+4", "class": DecimalParam),
+ 3: {"name": "facing", "class": HexParam},
+ 4: {"name": "movement", "class": HexParam},
+ 5: {"name": "clock_hour", "class": DecimalParam},
+ 6: {"name": "clock_daytime", "class": DecimalParam},
+ 7: {"name": "color_function", "class": HexParam},
+ 8: {"name": "sight_range", "class": DecimalParam},
+ 9: {"name": "pointer", "class": PointerLabelParam}, #or ScriptPointerLabelParam ??
+ 10: {"name": "BitTable1 bit number", "class": MultiByteParam},
+ }
+ def __init__(self, address, id, bank=None, map_group=None, map_id=None, debug=False, label=None):
+ assert is_valid_address(address), "PeopleEvent must be given a valid address"
+ self.address = address
+ self.last_address = address + people_event_byte_size
+ self.id = id
+ self.bank = bank
+ if label: self.label = label
+ else: self.label = self.base_label + hex(address)
+ self.map_group = map_group
+ self.map_id = map_id
+ self.debug = debug
+ self.params = []
+ script_parse_table[self.address : self.last_address] = self
+ self.parse()
+ def parse(self):
+ address = self.address
+ bank = self.bank
+
+ def to_asm(self): raise NotImplementedError, bryan_message
def parse_people_event_bytes(some_bytes, address=None, map_group=None, map_id=None, debug=True): #max of 14 people per map?
"""parse some number of people-events from the data
see http://hax.iimarck.us/files/scriptingcodes_eng.htm#Scripthdr
@@ -5002,13 +5043,6 @@ def parse_people_event_bytes(some_bytes, address=None, map_group=None, map_id=No
people_events.append(people_event)
return people_events
-#class Trigger(MapEventElement):
-# standard_size = trigger_byte_size
-# parse_func = parse_xy_trigger_bytes
-#class PeopleEvent(MapEventElement):
-# standard_size = people_event_byte_size
-# parse_func = parse_people_event_bytes
-
class SignpostRemoteBase:
def __init__(self, address, bank=None, map_group=None, map_id=None, signpost=None, debug=False, label=None):
self.address = address
@@ -5086,6 +5120,8 @@ class SignpostRemoteUnknownChunk(SignpostRemoteBase):
byte = SingleByteParam(address=address+2)
self.params.append(byte)
+#this could potentially extend Command
+#see how class Warp does this
class Signpost:
"""parse some number of signposts from the data