My character (who is called Korppimmies) has a similarly vague background. His backstory is in broad strokes, but I keep accidentally adding more lore because of my poor choice of words.
The original backstory is that he comes from an isolated tribe which periodically exiles young adults whenever it reaches a maximum capacity. These young adults are then supposed to wander around and found their own tribes in different places. My guy never got past the wandering part and eventually reached "civilization." After a series of foibles and arrests, Korppimmies became paranoid and started wearing a plague doctor's outfit, as it is otherwise very difficult to hide the fact that you have a beak.
Anyway, he's barely got any skills in healing, but went from town to town as a travelling doctor until The Party™ recruited him to help fight a dragon.
Unfortunately, Korppimmies was too smart for the sake of the campaign, and trapped the BBEG in the astral plane way before we were supposed to defeat him, and the campaign is pretty much over now.
FP & OOP both have their use cases. Generally, I think people use OOP for stateful programming, and FP for stateless programming. Of course, OOP is excessive in a lot of cases, and so is FP.
OOP is more useful as an abstraction than a programming paradigm. Real, human, non-computer programming is object-oriented, and so people find it a natural way of organizing things. It makes more sense to say "for each dog, dog, dog.bark()" instead of "map( bark, dogs)".
A good use case for OOP is machine learning. Despite the industry's best effort to use functional programming for it, Object oriented just makes more sense. You want a set of parameters, unique to each function applied to the input. This allows you to use each function without referencing the parameters every single time. You can write "function(input)" instead of "function(input, parameters)". Then, if you are using a clever library, it will use pointers to the parameters within the functions to update during the optimization step. It hides how the parameters influence the result, but machine learning is a black box anyway.
In my limited use of FP, I've found it useful for manipulating basic data structures in bulk. If I need to normalize a large number of arrays, it's easy to go "map(normalize, arrays)" and call it a day. The FP specific functions such as scan and reduce are incredibly useful since OOP typically requires you to set up a loop and manually keep track of the intermediate results. I will admit though, that my only real use of FP is python list comprehension and APL, so take whatever I say about FP with a grain of salt.