I am a modder who has created a number of popular follower/companion mods for AAA titles over the years. Based on my experience in the arena, I thought I would throw some suggestions out there to improve BG3's follower system.
Summary:1) Companion Relax: If player-controlled character appears to linger, have AI-controlled characters "relax" by doing things that show independence.
2) Companions Help with traps/locks - PC clicks on a container. If someone nearby has detected a trap, they interrupt and speak up. If the container is locked and someone nearby has skills/lock-picks, they should offer to help.
3) Companion AI for combat - Add ability to flag party members for Computer Control during combat with ability to toggle on/off at any time. Bonus if you include customizable AI Packages.
4) Time based reputation increase: If an NPC spends time traveling with the main character, then slowly improve their reputation with the PC, but not beyond 50%. Companions told to stay at camp would not get this bump.
5) Proximity Approval Controls - Game option: "Dialogue Choices Affect Companions" drop-down box: [ Anywhere | Traveling with Player | Within Earshot ]
6) Interjection Controls - Allow everyone (nearby) who has something to say during conversations to speak up (instead of limiting it to 1 random Companion). Maybe a config option.
7) Configurable (Total) Party Size Limit up to 6 - Suggestion says it all.
8) Summon All - A Summon All button that brings everyone to the focused NPC and re-chains them.
Details:
You might notice many of these suggestions are geared towards making companions act on their own. It is all about building the perception that your ai-contrrolled companions are people and not simply drones. Whether that independence manifests as getting bored when the player lingers, interjecting in conversations, fighting on their own in battles, volunteering to help with locks/traps or simply showing a gradual fondness for the player based on how much time spent together. BG1/BG2 broke new ground with battle cries and party banter. Hopefully BG3 will bring even more to the table.
Companion RelaxThis is listed first because of all the suggestions, it would have the biggest impact and it is something BG1/BG2 didn't have. With Chaining, BG3 even has an opportunity to go where other RPGs have not.
Skyrim and Fallout 3 have the idea of Companion Relax. Where the player lingers in a area and companions get bored and start doing things. Maybe they sit in a chair or use a nearby anvil to start hammering on something. But in these games, the player never leaves the companions. So what people might get up to while being ignored is rather limited.
For starters, I would like to see something similar in BG3. [EDIT] I've noticed BG3 has an IDLE animation that kicks in when the player lingers, but from a high-view camera, it is hardly noticeable. I would like to see a phased approach with simple idles like looking around and swaying kicking in sooner and more pronounced idles kicking in the longer the companion is idle. After looking around and swaying a bit, someone may decide to sit down on the ground. Fomr there they may pull out a weapon and start to sharpen it. And after sharpening the weapon 4 or 5 times, get up and start using nearby objects.But that is just for the people near the player that the player can redily see.
Now Imagine unchaining someone, focusing on exploration with your most athletic or stealthy characters and after several minutes you double click to return to the others. They are sitting on the ground eating together. Maybe some have actually pulled out blankets and are laying down. Clerics may be praying. Fighters may look like they are exercising (push ups?). Or maybe they are spread out doing things that make sense in their location. Astarion is standing next to a bookcase reading a book, Lae'zel is sitting off by herself away from the group. Shadowheart is taking a nap and Gale is using his mage-hand cantrip to give himself a back massage. Wyll has found a nearby friendly wolf/bear in the druid grove and is patting it.
You need 3 things to make it happen:
1) Loiter Detection. It looks like you already have this to some extend. Those idles I see are being kicked off by some sort of monitor. But you may need to expand it to understand the difference between chained and unchained idles. I wrote some code for FO4 that allowed the player to move around in a circle or back and forth without ending the Loiter state by tracking 7 previous coordinate points and doing some math every 3 seconds to see if it looked like they were REALLY moving on. Might want to consider something like that.
https://github.com/Dheuster/AFT-FO4...ts/Source/User/followersscript.psc#L15092) How does loiter work? Most games lace Maps with Attraction Objects (AOs) to provide hints to the AI on what activities/animations make sense nearby. AOs and NPCs have tags to ensure compatibility with animations (and that the activity makes sense for someone). For example, there may be an AO near a stream that causes a Humanoid to kneel down to take a sip of water. Wouldn't want the cat using it. If a search for nearby AOs yields no results, you are probably not in a loiter friendly area. You can speed up searches by defining quadrants in the map. Us the X,Y to compute the quadrant and then do a quadrant lookup in a map that already knows all the loiter objects in in that quadrant. Thus getting a list of AOs is a constant-time operation given a mapid, x and y quardanant.
3) You need the ability to interrupt the Loiter AI stack and return to normal quickly. Given the fact that BG allows you to change focus to anyone at any time tells me this probably wouldn't be an issue. Just make sure you can get up and start moving again if the nearby player-controlled character moves on or starts a fight or changes focus to the NPC. You could also use a generic transition effect like them teleporting from whatever they are doing to the players side (The way a summon-all button might work).
Companions Help with traps/locksYou instruct a focused NPC to walk up to a chest and open it. As the party approaches, someone notices a trap, but the command is already in motion. Trap goes off before you can stop it.
Ideally in this situation, the first person to notice the trap starts a conversation with you before the trap goes off "I wouldn't do that if I were you./End" Same way you are stopped from looting a body if someone who cares can see you. Furthermore, if someone has a trap disarm kit, they speak up afterwards "Care if I take a look?/Sure/Leave" Hit "sure" and they attempt to disarm trap. Or you click on a locked door. Most qualified person in party speaks up, "Care if I take a look?/Sure/Leave". Hit "Sure", and they attempt to unlock.
Companion AI for combatEvery game I have modded was real-time, where the companion AI was needed. So my mods generally offer AI package options that make companions fight within the boundaries of an archetype.
I realize AI isn't necessary in BG3 because turn-based offers party micromanagement. But not everyone wants that. Plenty of gamers are perfectly fine only worrying about the protagonist. And in fact having companions that act on their own during combat adds to the feeling of independence and the illusion that your companions are real people.
So I suggest you take BG2's lead and offer AI Package options for companions with "No Package" maybe being the default, which means the player micromanages the NPC. Bonus if you can also assign one to the protagonist. Combine this with a "Fast Forward" button or an option to speed up game combat in general and it could address the time investment issues some of the real-time fans complain about. Probably need a party AI toggle on the screen somewhere like BG2 had.
Time based reputation increaseThe idea is simple... we tend to grow fond of those we spend time with (like it or not). A companions opinion of the player should naturally improved over time up to 50% of max.
Implementation wise, you have a periodic event (Every hour?). Checks to see if the Players XP is higher than the last time the event fired. If so, boost the reputation of anyone currently in the party. The amount would depend on the current reputation so that it grows quickly at first but slows down as it approaches 50%. Here is some sample logic if reputation goes from -100 to 100:
event everyHour():
if player.xp > persisted.lastXP:
for npc in currentParty:
if npc.approval <= 50:
npc.approval += ceiling(4 - (npc.approval * 0.08))
persisted.lastXP = player.xp
If you want something more accurate to account for dismissing or changing party load out, you could have a more frequent poll (every 10 min?) that increments a count attribute on each active party member if the XP has changed. When NPCs break a threshold (say > 5), they get a rep bump and their count resets.
Proximity Approval Controls The idea is pretty simple... why are companions reacting to conversations when they were not around when they happened? So offer the ability to limit approval changes to those who are within earshot.
Can users "cheat" by sending companions away so they wont overhear conversations that might upset them? Sure, people do that in real life. If a user sends someone away to save face with them, that should be fine. If people want to see all reactions, even those who are not nearby, that could remain a game option. Which is why I suggest a game option with a drop down: Anywhere | Traveling with Player | Within Earshot.
Interjection ControlsOne of the most popular features I added to a companion mod was an option to make all companions speak their lines during conversation interjections. Why was it popular?. I suspect some users know they will only play the game a limited number of times before moving on to the next popular game. So there are those users out there that want to experience as much as they can on their 1 playthourgh (or maybe secondary/last playthrough).
Obviously the companions would need to be nearby (chained or not). But aside from that, I think the option should be there (Game Option?), even if disabled by default.
Configurable Party Size Limit up to 6People are always asking me to increase the party size limit in my mods, so I am loath to request this. But because it is requested so often, I know others will want the same thing from BG3. So here are my thoughts.
In the Game Play options let users set their own party size limit with a max value of 6 and a default value of 4. If they change the value beyond 4, they get a popup informing them that larger parties receive an XP penalty for balance reasons. Party size of 5 = 20% penalty. Party size of 6 = 35% penalty. Thus encourage the classic 4 person team, but allow the larger parties using a somewhat hidden game option.
Summon AllThis is mostly a convenience request. If you find yourself suddenly in an unexpected fight, summon your companions to your side. Conversely, send 1 unchained companion into an enemy base and once they reach a safe spot, teleport everyone to them. In multiplayer env, maybe this only applies to computer controlled companions.
Yes, I COULD guide the party 1 by 1 to the player-controlled character, but it is a lot of trouble. And before you say things like... not everyone can jump as far as others, don't forget, Laz can throw companions as far as she can jump. So forcing me to throw my companions around to reach a certain spot is mostly just a time suck.
If people don't like it, they are free not to use it. You could even make it a game option that is disabled by default and can't be enabled on harder difficulty levels. Same way many games disable fast travel on the hardest difficulty levels.