diff --git a/addons/dialogic/Localization/dialogic.de.translation b/addons/dialogic/Localization/dialogic.de.translation index 165cd0793..266adb96d 100644 Binary files a/addons/dialogic/Localization/dialogic.de.translation and b/addons/dialogic/Localization/dialogic.de.translation differ diff --git a/addons/dialogic/Localization/dialogic.en.translation b/addons/dialogic/Localization/dialogic.en.translation index f9e90340a..f71050466 100644 Binary files a/addons/dialogic/Localization/dialogic.en.translation and b/addons/dialogic/Localization/dialogic.en.translation differ diff --git a/addons/dialogic/Localization/dialogic.es.translation b/addons/dialogic/Localization/dialogic.es.translation index f6e10e8c9..352771834 100644 Binary files a/addons/dialogic/Localization/dialogic.es.translation and b/addons/dialogic/Localization/dialogic.es.translation differ diff --git a/addons/dialogic/Localization/dialogic.fr.translation b/addons/dialogic/Localization/dialogic.fr.translation index 36bfb722b..053c69dd3 100644 Binary files a/addons/dialogic/Localization/dialogic.fr.translation and b/addons/dialogic/Localization/dialogic.fr.translation differ diff --git a/addons/dialogic/Localization/dialogic.zh_CN.translation b/addons/dialogic/Localization/dialogic.zh_CN.translation index 2183bd3b8..749fa8144 100644 Binary files a/addons/dialogic/Localization/dialogic.zh_CN.translation and b/addons/dialogic/Localization/dialogic.zh_CN.translation differ diff --git a/addons/dialogic/Nodes/Anima/DialogicAnimaPropertiesHelper.gd b/addons/dialogic/Nodes/Anima/DialogicAnimaPropertiesHelper.gd index 3a81a69f4..5e7ad1190 100644 --- a/addons/dialogic/Nodes/Anima/DialogicAnimaPropertiesHelper.gd +++ b/addons/dialogic/Nodes/Anima/DialogicAnimaPropertiesHelper.gd @@ -57,7 +57,11 @@ static func get_rotation(node: Node): static func set_2D_pivot(node: Node, pivot: int) -> void: var size: Vector2 = get_size(node) - + + # If node does not contain offset, just pivot from origin. + if node.get('offset') == null: + return + match pivot: PIVOT.TOP_CENTER: if node is Control: diff --git a/addons/dialogic/Nodes/DialogNode.gd b/addons/dialogic/Nodes/DialogNode.gd index ab1015091..f18ae1064 100644 --- a/addons/dialogic/Nodes/DialogNode.gd +++ b/addons/dialogic/Nodes/DialogNode.gd @@ -683,6 +683,10 @@ func event_handler(event: Dictionary): ## PLEASE UPDATE THIS! BUT HOW? emit_signal("event_start", "action", event) set_state(state.WAITING) + + #Animations safe for custom portraits with no animation-wait + var safeAnimations = ['1-fade_in.gd', '[No Animation]'] + if event['character'] == '':# No character found on the event. Skip. _load_next_event() else: @@ -714,7 +718,7 @@ func event_handler(event: Dictionary): $Portraits.move_child(p, get_portrait_z_index_point(event.get('z_index', 0))) p.z_index = event.get('z_index', 0) - if event.get('animation_wait', false): + if (p.get('custom_instance') != null or event.get('animation_wait', false)) and !(event.get('animation', '[No Animation]') in safeAnimations): yield(p, 'animation_finished') @@ -731,7 +735,7 @@ func event_handler(event: Dictionary): if is_instance_valid(p) and p.character_data['file'] == event['character']: event = insert_animation_data(event, 'leave', 'fade_out_down.gd') p.animate(event.get('animation', 'instant_out.gd'), event.get('animation_length', 1), 1, true) - if event.get('animation_wait', false): + if (p.get('custom_instance') != null or event.get('animation_wait', false)) and event.get('animation', 'instant_out.gd') != "instant_out.gd": yield(p, 'animation_finished') # UPDATE MODE ------------------------------------------- @@ -759,9 +763,13 @@ func event_handler(event: Dictionary): $Portraits.move_child(portrait, get_portrait_z_index_point(event.get('z_index', 0))) portrait.z_index = event.get('z_index', 0) + # Covers edge case of changing timeline with custom portraits causing infinite yields + if event.get('animation') == '[Default]': + event = insert_animation_data(event, 'join', 'fade_in_up.gd') + portrait.animate(event.get('animation', '[No Animation]'), event.get('animation_length', 1), event.get('animation_repeat', 1)) - if event.get('animation_wait', false) and event.get('animation', '[No Animation]') != "[No Animation]": + if portrait.get('custom_instance') != null or (event.get('animation_wait', false) and event.get('animation', '[No Animation]') != "[No Animation]"): yield(portrait, 'animation_finished') set_state(state.READY) _load_next_event()