Skip to content

Commit

Permalink
Merge pull request #147 from ikarth/ikarth_autoimport
Browse files Browse the repository at this point in the history
added title generation & fixed actor id references
  • Loading branch information
ikarth authored Aug 13, 2020
2 parents 7c9430b + 58dd4f6 commit d9b764c
Show file tree
Hide file tree
Showing 10 changed files with 401 additions and 249 deletions.
2 changes: 2 additions & 0 deletions CREDITS
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,5 @@ Aaron Lo

Uses resources from https://github.com/DeerTears/GB-Studio-Community-Assets, including:
Old Halls by AFI - Created by AFI#8956 on the community Discord, uploaded by DeerTears. Distributed with permission.

Uses several fonts under OFL licenses (listed in assets/fonts)
Binary file added assets/backgrounds/autogen_logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/sprites/connector.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
42 changes: 39 additions & 3 deletions rom_generator/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ def makeBackground(filename, name=None, imageWidth=None, imageHeight=None, width
return copy.deepcopy(recordBackground(element))

### An actor is an object on the screen that the player can interact with.
def makeActor(sprite, x, y, movementType="static", animate=True, moveSpeed="1", animSpeed="3", script=[], sprite_id=None, direction=None):
def makeActor(sprite, x, y, movementType="static", animate=True, moveSpeed="1", animSpeed="3", script=[], sprite_id=None, direction=None, name=None):
element = makeElement()
if sprite == None:
element["spriteSheetId"] = sprite_id
Expand All @@ -274,6 +274,7 @@ def makeActor(sprite, x, y, movementType="static", animate=True, moveSpeed="1",
element["animate"] = animate
element["script"] = []
element["startScript"] = []
element["_name"] = name
return copy.deepcopy(element)

def addActor(scene, sprite, x, y, movementType="static", animate=True):
Expand Down Expand Up @@ -440,6 +441,13 @@ def connectScenesRandomlySymmetric(scene_data_list):
filtered_other_connections = connections_to_make
try:
other_connection = random.choice(filtered_other_connections)
connection_tries = 15
for n in range(connection_tries):
if not (other_connection[2]["args"]["exit_direction"] == reverse_direction[current_connection[2]["args"]["exit_direction"]]):
other_connection = random.choice(filtered_other_connections)
else:
break

if other_connection in connections_to_make:
connections_to_make.remove(other_connection)
con_data = {"in": other_connection, "out": current_connection}
Expand Down Expand Up @@ -668,6 +676,27 @@ def uniques(list_of_elements):
dedupe.append(element)
return dedupe

def getRefInActors(ref_match_object, list_of_scenes):
ref_target_name = ref_match_object.groups()[0]
ref_target_name = re.sub(" ", "_", ref_target_name)
if ref_target_name == "$self$":
return "$self$"
if ref_target_name == "player":
return "player"
#print(f"{bcolors.OKBLUE}{ref_target_name}{bcolors.ENDC}")
for s_num, s_data in enumerate(list_of_scenes):
if "actors" in s_data["scene"].keys():
for a_num, a_data in enumerate(s_data["scene"]["actors"]):
#print (f"{a_data['_name'][6:]}")
if None == a_data["_name"]:
print(f"{bcolors.OKBLUE}{ref_target_name}{bcolors.ENDC}")
print(f"{bcolors.WARNING}{s_data['scene']['name']} => {a_data}{bcolors.ENDC}")
# return "$self$"
else:
if ref_target_name in a_data["_name"]:
return a_data["id"]
return "NO_REF"

def getRefInScenes(ref_match_object, list_of_scenes):
ref_target_name = ref_match_object.groups()[0]
ref_target_name = re.sub(" ", "_", ref_target_name)
Expand All @@ -688,8 +717,15 @@ def translateReferences(data, list_of_scenes):
ref_match = re.search(r'♔REFERENCE_TO_SCENES_\<(.*?)\>', data)
if None != ref_match:
data = getRefInScenes(ref_match, list_of_scenes)
else:
data = "♔UNBOUND_REF♔"
continue
if data.startswith("♔REFERENCE_TO_ACTORS_"):
ref_match = re.search(r'♔REFERENCE_TO_ACTORS_\<(.*?)\>', data)
if None != ref_match:
data = getRefInActors(ref_match, list_of_scenes)
continue
print(data)
breakpoint()
data = "♔UNBOUND_REF♔"
if (isinstance(data, list)):
for data_key, data_val in enumerate(data):
data[data_key] = translateReferences(data_val, list_of_scenes)
Expand Down
27 changes: 23 additions & 4 deletions rom_generator/scenes/import.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,11 @@ def referencesInProject(proj_data):
ref_id_conversion = {}
for r in ref_types:
data_list = [(s['id'], s['name']) for s in proj_data[r]]
for s in data_list:
for s_index, s in enumerate(data_list):
if r == "scenes":
actors = proj_data[r][s_index]["actors"]
for a in actors:
ref_id_conversion.update({a['id'] : f"REFERENCE_TO_{'actors'.upper()}_<actor_{a['id']}>"})
ref_id_conversion.update({s[0] : f"REFERENCE_TO_{r.upper()}_<{s[1]}>"})
return ref_id_conversion

Expand Down Expand Up @@ -150,6 +154,9 @@ def convertScripts(scripts, reference_translation_func=None, proj_data=None):
if k_str == "sceneId":
v_arg = v_arg #f"<♔sceneId|{v_arg}♔>"
# TODO: have way to point sceneId at new target
if k_str == "actorId":
v_arg = f"\'♔REFERENCE_TO_ACTORS_<{v_arg[1:-1]}>♔\'"
# TODO: have way to point actorId at new target
arg_text.append(f"{k_str}={v_arg}")
if "children" in scr:
child_scripts = {}
Expand Down Expand Up @@ -312,6 +319,8 @@ def convertActors(actor_list, proj_data):
code_elements = []
actor_name_list = []
actor_data_list = []
code_elements.append("actor_name_table = {}")
actor_name_table = {}
for actor_count, element in enumerate(actor_list):

sprites = proj_data["spriteSheets"]
Expand All @@ -330,7 +339,11 @@ def convertActors(actor_list, proj_data):
anim_element += "direction='" + str(element['direction']) + "', "


code_elements.append(f"actor_{actor_count:02d} = generator.makeActor(None, {element['x']}, {element['y']}, '{element['movementType']}', {anim_element}script=[], sprite_id=findSpriteByName('{a_sprite['name']}')['id'])")
actor_name = f"actor_{element['id']}"
code_elements.append(f"actor_{actor_count:02d} = generator.makeActor(None, {element['x']}, {element['y']}, '{element['movementType']}', {anim_element}script=[], sprite_id=findSpriteByName('{a_sprite['name']}')['id'], name=\'{actor_name}\')")
code_elements.append(f"actor_name_table.update({{\'{actor_name}\': actor_{actor_count:02d}}})")
actor_name_table.update({actor_name: f"REFERENCE_TO_actors_{actor_count:02d}"})

script_start = []
if "startScript" in element.keys():
script = element["startScript"]
Expand All @@ -353,7 +366,13 @@ def convertActors(actor_list, proj_data):
})

code_elements.append("actor_list = [" + ", ".join(actor_name_list) + "]")
return code_elements, actor_data_list

# for line_index, line in enumerate(code_elements):
# if "♔actor_" in line:
# for sign, signifier in actor_name_table.items():
# code_elements[line_index] = line.replace(sign, signifier)

return code_elements, actor_data_list, actor_name_table

def importSprite(sprite_sheet_data):
code_spritesheet = f"generator.makeSpriteSheet('{sprite_sheet_data['filename']}', name='{sprite_sheet_data['name']}', type='{sprite_sheet_data['type']}', frames={sprite_sheet_data['numFrames']})"
Expand All @@ -379,7 +398,7 @@ def importScene(scene_data, proj_data):
template_slots = []
actors = template.pop("actors")
triggers = template.pop("triggers")
code_actors, actor_data_list = convertActors(actors, proj_data)
code_actors, actor_data_list, actor_name_table = convertActors(actors, proj_data)
code_triggers, template_slots = convertTriggers(triggers, proj_data)

code_scene_script = ""
Expand Down
Loading

0 comments on commit d9b764c

Please sign in to comment.