How to add C++ overridable logic to Blueprint ?

The interaction between Blueprint and C++ regarding is not super great when it comes to virtual functions. In C++ you can call any accessible version of a virtual function from anywhere in the inheritance chain by just specifying the appropriate class namespace with the function call. You generally can’t do that in Blueprint but there are workarounds. First step is to mark your C++ function “BlueprintCallable” and “BlueprintNativeEvent”. Let’s call this function “func” and the C++ class “C” and have a Blueprint class “B” derive from it. You already know that you can override “func” in Blueprint via the dropdown menu. You can also add a call to the C++ parent implementation of “C” by right-clicking the function node and selecting “Add call to parent function”. What most people don’t know is that you can copy that call-parent-node and paste it anywhere in your Blueprint to call the parent function. AFAIK there’s no other way to get that node to show up in Blueprint which very weird but whatever. To be clear: you don’t have to actually override the function in Blueprint, you just have to press override to get to the call-parent-node, but then you can copy it out and delete the overriden function again. Let’s assume you have another Blueprint “B2” that inherits from “B”. If you have not overriden “func” in “B” you can call the C++ implementation in the same way, but if you did override “func” then you can’t get to the C++ implementation directly anymore from “B2” (to my knowledge). But you can work around this by implementing a Blueprint function in “B” that just calls the C++ parent function with the trick I previously mentioned e.g. “funcCpp”. So then, if you have overridden “func” in “B” and “B2”, you can call all three version of “func” from “B2”: Call “func” directly in “B2” for the “B2”-implementation, call the “B” implementation with the “call to parent function” node, and call the “C” C++ implementation by calling “funcCpp”.