Thanks for the info. Unfortunately that doesn't seem to fix it. It makes no difference if the the function is called in [tt]ready[/tt] or not, I still get the error. It's not game breaking, as it only fails on the first loop, then works as it should. From what you've both said, I guess it's being called early, but the curious thing is that the function isn't called until the player presses a key and nowhere else is calling it. Could it be because [tt]set_eyes[/tt] is also a tool function used with setget? So it gets called when the game starts?Here's the full script:[code]toolextends Node2Dexport(String, "Down", "Left", "Right", "Up") var facing = "Down" setget set_directionexport(String, "White", "Pale", "Brown", "Orange", "Grey", "Blue", "Green", "Red") var skin_colour = "White" setget set_skin_colourexport(String, "Blue", "Green", "Brown", "Narrow", "Deamon", "Blood", "AnimalYellow", "AnimalGreen") var eye_colour = "Blue" setget set_eyesexport(String, "None", "Long", "Medium", "Short", "Large") var beard_style = "None" setget set_beard_styleexport(String, "Grey", "Blonde", "Black", "Brown", "Ginger", "Red", "Green", "Blue") var hair_colour = "Grey" setget set_hair_colourexport var wrinkles = false setget set_wrinklesvar skin_colour_offsets = { White = 0, Pale = 4, Brown = 8, Orange = 12, Grey = 16, Blue = 20, Green = 24, Red = 28, }var eye_types = { Blue = 64, Green = 68, Brown = 72, Narrow = 76, Deamon = 80, Blood = 84, AnimalYellow = 88, AnimalGreen = 92, }var facial_hair_offsets = { Long = 96, Medium = 128, Short = 160, Large = 192, }var hair_colour_offsets = { Grey = 0, Blonde = 4, Black = 8, Brown = 12, Ginger = 16, Red = 20, Green = 24, Blue = 28 }var head_offset = 0var wrinkles_offset = 32 var eye_offset = 64var direction_offset = 0var beard_offset = 96var hair_colour_offset = 0var current_animation = nullvar new_animation = nullfunc ready(): passfunc set_beard_style(new_value): if get_node("Beard") != null: print("setting beard") beard_style = new_value if beard_style == "None": get_node("Beard").hide() return beard_offset = facial_hair_offsets[beard_style] get_node("Beard").set_frame(beard_offset + hair_colour_offset + direction_offset) get_node("Beard").show() func set_hair_colour(new_value): if get_node("Beard") != null: hair_colour = new_value hair_colour_offset = hair_colour_offsets[hair_colour] set_beard_style(beard_style)func set_skin_colour(new_value): if get_node("Head") != null: skin_colour = new_value head_offset = skin_colour_offsets[skin_colour] get_node("Head").set_frame(head_offset + direction_offset) get_node("Wrinkles").set_frame(wrinkles_offset + head_offset + direction_offset)func set_eyes(new_value): if get_node("Eyes") != null: eye_colour = new_value eye_offset = eye_types[eye_colour] get_node("Eyes").set_frame(eye_offset + direction_offset)func set_direction(new_value): if get_node("Animation") != null and get_node("Eyes") != null and get_node("Head") != null: facing = new_value if facing == "Down" and direction_offset != 0: direction_offset = 0 get_node("BackFacing").hide() get_node("FrontFacing").show() get_node("SideFacing").hide() elif facing == "Left" and direction_offset != 1: direction_offset = 1 get_node("SideFacing").set_scale(Vector2(1,1)) get_node("BackFacing").hide() get_node("FrontFacing").hide() get_node("SideFacing").show() var sword = get_node("SideFacing/FrontArmUpper/FrontArmLower/Sword") get_node("SideFacing/FrontArmUpper/FrontArmLower").remove_child(sword) get_node("SideFacing/BackArmUpper/BackArmLower").add_child(sword) elif facing == "Right" and direction_offset != 2: direction_offset = 2 get_node("SideFacing").set_scale(Vector2(-1,1)) get_node("BackFacing").hide() get_node("FrontFacing").hide() get_node("SideFacing").show() var sword = get_node("SideFacing/BackArmUpper/BackArmLower/Sword") get_node("SideFacing/BackArmUpper/BackArmLower").remove_child(sword) get_node("SideFacing/FrontArmUpper/FrontArmLower").add_child(sword) elif facing == "Up" and direction_offset != 3: direction_offset = 3 get_node("BackFacing").show() get_node("FrontFacing").hide() get_node("SideFacing").hide() get_node("Head").set_frame(head_offset + direction_offset) get_node("Wrinkles").set_frame(wrinkles_offset + head_offset + direction_offset) get_node("Eyes").set_frame(eye_offset + direction_offset) if beard_style != "None": get_node("Beard").set_frame(beard_offset + hair_colour_offset + direction_offset)func set_wrinkles(new_value): if get_node("Wrinkles") != null: wrinkles = new_value if wrinkles: get_node("Wrinkles").show() else: get_node("Wrinkles").hide()[/code]