diff --git a/blender/arm/material/cycles.py b/blender/arm/material/cycles.py index 8b92b56dc0..c56be8ff2f 100644 --- a/blender/arm/material/cycles.py +++ b/blender/arm/material/cycles.py @@ -538,7 +538,10 @@ def is_parsed(node_store_name: str): def res_var_name(node: bpy.types.Node, socket: bpy.types.NodeSocket) -> str: """Return the name of the variable that stores the parsed result from the given node and socket.""" - return node_name(node.name) + '_' + safesrc(socket.name) + '_res' + name = node_name(node.name) + '_' + safesrc(socket.name) + '_res' + if '__' in name: # Consecutive _ are reserved + name = name.replace('_', '_x') + return name def write_result(link: bpy.types.NodeLink) -> Optional[str]: @@ -600,8 +603,12 @@ def to_uniform(inp: bpy.types.NodeSocket): state.curshader.add_uniform(glsl_type(inp.type) + ' ' + uname) return uname -def store_var_name(node: bpy.types.Node): - return node_name(node.name) + '_store' + +def store_var_name(node: bpy.types.Node) -> str: + name = node_name(node.name) + if name[-1] == "_": + return name + '_x_store' # Prevent consecutive __ + return name + '_store' def texture_store(node, tex, tex_name, to_linear=False, tex_link=None, default_value=None, is_arm_mat_param=None): @@ -772,7 +779,7 @@ def node_name(s: str) -> str: if state.curshader.write_textures > 0: s += '_texread' s = safesrc(s) - if '__' in s: # Consecutive _ are reserved + if '__' in s: # Consecutive _ are reserved s = s.replace('_', '_x') return s diff --git a/blender/arm/utils.py b/blender/arm/utils.py index ce5c9b04f9..c6a2b3cf45 100644 --- a/blender/arm/utils.py +++ b/blender/arm/utils.py @@ -727,7 +727,7 @@ def safesrc(s): def safestr(s: str) -> str: """Outputs a string where special characters have been replaced with '_', which can be safely used in file and path names.""" - for c in r'''[]/\;,><&*:%=+@!#^()|?^'"''': + for c in r'''[]/\;,><&*:ยง$%=+@!#^()|?^'"''': s = s.replace(c, '_') return ''.join([i if ord(i) < 128 else '_' for i in s])