Dang, you clearly put a lot of effort into your project. Sad to see you retire on it. Very neatly organised btw! My events and groups look like a wreck.
I'd be curious to see what was causing the problems for performance. If it's only the fact you have lots of sprites and animations, then hey, I feel your pain; I have a retired project and another project that I have paused on, both were RPG games with lots of different equipment and lots of frames, with the addition of having multiple players that could each have unique clothing equipped. This means you would have to load all the equipment frames into different sprites, which is bad because I'm pretty sure that all sprite images will be loaded into the RAM when you run the game (Sure, Layout by Layout loading exists, but that doesn't help this situation, because you'd need to load/unload different sprites on the go rather than always having every single sprite sitting in the RAM ready to be displayed).
If you were to use Project Files to store all the sprite images, then the problem would be that once you use"Load image from URL" to get the sprite, it will replace ALL instances of the sprite (this does make sense why it happens but it makes this a problem), so you cannot have multiple characters with equipment unless you done some crazy workaround like have 100 empty frames in a sprite and then pair the frame number with an equipment (Goodluck having animated equipment).
I've thought of a solution involving using the neat Paster plugin and Project Files, but I have currently shelved the RPG project so I haven't tried it out.
The reason I mention these "Project Files" ideas is because afaik they do not get loaded into the RAM unless they are called. (If I'm wrong and they do get loaded into the RAM, then I'm stuck)
But yeah, reading other things you've said, it's pretty clever that you prevented the need for a "helper" sprite and can just use the Dog sprite for the platformer behaviour and all, but I think that it would still have been a better choice to use a box helper sprite. You say it makes it complicated with the AI and that it works better handling multiple dogs if you are just using Dog sprites, but that kinda confuses me. If you did use helper sprites or just a dog sprite, in both scenarios, wouldn't you still be using "For each" meaning you'd not really have a problem handling multiple instances?
I don't know what you already know, so sorry if this all simple stuff: If you were to store the UID of the Helper Sprite in an Instance Variable within the Dog sprite, you could then do something like "For each Helper" and do all the AI on it and within that foreach loop, you could do an event like "Is Dog Instance Variable "HelperUID"=Helper.UID" then Position dog onto the helper. You could always do an "On Helper created" or "On Dog created" and then create the opposite and store the instance variable so it's a lot more simple to add a new dog into the game, then volia! Multiple individually behaving doggies
Sorry for massive post of nonsense, I am aware you've given up and moving onto a different software. Send me a link to this project though, really curious to check it out! Goodluck in the world of UE4