Battlefield V finally launched, for realzies

After pushing the game back for a month to work out a some kinks and a staggered release schedule, Battlefield V is now out for everyone in the world. This was the first AAA game I’ve ever been a part of and it has been one hell of a ride. Mostly making this post to mark the day for myself, but here are some pretty trailers you can look at 🙂

Somewhat “safer” way of making a PyNode

I always kept running into problems when making PyNodes in my script and the error messages Maya gives you aren’t always the best.  So I wrote a little helper function, especially useful when you have more than one object with the same name in your scene.

def pynode(object_name, specific_on_multiple=False, pick_most_root=False, pick_most_leaf=False, pick_index=None):
    Returns a PyNode of the given object name with better error messages and additional options

    :param object_name: name of the object you want to make a PyNode
    :param specific_on_multiple: <bool> When set to True, allows you set the next flags to return a specific object when there are multiple objects with the same name
    :param pick_most_root: <bool> returns the most root object if there are multiple objects with the same name
    :param pick_most_leaf: <bool> returns the most leaf object if there are multiple objects with the same name
    :param pick_index: <int> returns this index of object if there are multiple objects with the same name
    :return: a PyNode
    if object_name is None:
        raise RuntimeError("Can't make a PyNode when object_name type is None")
    if pm.objExists(object_name):
            return pm.PyNode(object_name)
            if not type(object_name) == str:
                node_name = object_name.nodeName()
                node_name = object_name
            multiple_nodes = sorted([str(node) for node in], key=len)

            if len(multiple_nodes) > 1:
                if specific_on_multiple is False:
                    error_message = "There are multiple nodes with this name:"
                    for node in multiple_nodes:
                        error_message += "\n%s" % node
                    raise RuntimeError(error_message)
                    if pick_most_root is True:
                        return pm.PyNode(multiple_nodes[0])
                    elif pick_most_leaf is True:
                        return pm.PyNode(multiple_nodes[-1])
                    elif pick_index is not None:
                            selected_node = multiple_nodes[pick_index]
                        except IndexError:
                            raise IndexError("%s is not a valid index, valid indices are 0 to %s"
                                             % (pick_index, len(multiple_nodes) - 1))
                        return pm.PyNode(selected_node)

                    raise ValueError("When custom_on_multiple is set to True, either pick_most_root or pick_most_leaf "
                                     "should be set to True as well")
        raise ValueError("Object (%s) doesn't exist" % object)

Skin Saver tool

I finally found the time to update my old skin saver tool. I’ve cleaned up the code a bit, added some extra functionality and just made it work a bit smoother than before. You can find it on my Gumroad page:


Started a new job this week


I started a new job this week. I’ll be working for DICE in Stockholm on a very exciting project. DICE has always been right on top of my list of studios I wanted to work at, so I couldn’t be happier!