SodiumZH / NFF-Girls

GNU Lesser General Public License v3.0
8 stars 1 forks source link

Several issues with otherwise great mod #23

Open SonZir0 opened 7 months ago

SonZir0 commented 7 months ago

Hello. I finally got around to checking everything in the gameplay guide for new versions of HMaG, DWmG and BefriendMobs framework, but sadly the issues I've encountered (but fixed according to the change log) are still around in my game.. Nothing crashed, and I got no error messages, but some things didn't work quite as expected. I tested all of it both in my usual modded setup and the "bare minimum" version (just Forge + HMaG, DwMG and framework). All the issues below consistently showed up in both cases. I apologize in advance for how long this report is, as well as any grammar mistakes I could've made... I'm going to separate all things into 3 categories: 1) things that impact gameplay with certain mobs significantly 2) relatively minor things 3) targeting behavior

Here are the logs for the new world in the "minimal" case: minimum debug.log minimum latest.log

And here are the logs for the new world in the more heavily modded case: debug.log latest.log

Important things:

1) Still can't heal befriended Melty Monster or interact with her using a bucket of water/flint and steel. This was supposed to be fixed, but nothing changed on my end 2) Sunlight immunity from baubles. Worked correctly for everyone before updates, but now, in the "minimal" test case, it doesn't work at all, although everyone still gets stat buffs from baubles and undead mobs don't avoid the sunlight, as if they really have this immunity (perhaps there's some unlisted dependency?). In my modded world, it works for everyone except the Cursed Doll (she gets the stats from baubles but not sun immunity, and keeps avoiding the sun too). I'm sure that in 0.2.20 versions of the mod/framework all worked fine for Dolls as well, but this version of DWmG's no longer on curseforge, so I can't check it. Also, updating to newer version of HMaG (currently 9.0.13 is out) causes the same sunlight immunity issues for Dullahan and Dodomeki, most likely something else as well 3) Mobs capable of flying and/or slow falling (Harpy, Cursed Doll, Banshee and Hornet) take damage upon landing on the ground. They get this damage so often, that they are very likely to kill themselves while just following you around. Seems like a fall damage, but I can't say for sure. To reproduce, tame any aforementioned mob and let them fall/descend from somewhere high (WAIT command on fliers at sufficient height caused Banshee/Hornet to descend to the ground). Wild mobs don't take any of this "fall damage", only befriended ones

"Minor stuff"

"Minor stuff" consists of unrelated to each other inconsistencies with the github guide: 1) Haste buff provided by befriended Redcap has a global range rather than just 8 blocks 2) Wither Skeleton Girls can only be placed in the Transport Pods by crouching + right mouse button interaction. Without crouching, Transport Pod just doesn't work on them, but you don't have to crouch to use the Trasport Pod with any other befriended mob. 3) some bauble slots don't work (no bonus stats or effects) for Dullahan (right column slots) and Dodomeki (3rd or 4th slots) 4) Glaryad can be tamed without any tempting item in the player's off-hand 5) gameplay guide states that Necromancer's Wand applies Wither III without Necromancer's Hat, and Wither IV with it, but according to Jade (information HUD mod) those effects are 1 lvl stronger (Wither IV and Wither V) 6) Kobolds/Imps don't try to walk towards found ores/minerals right after they consume nuggets/fragments. They glitter with green particles but just stand in one place, even if there are no obstacles in their path. It took me a while to figure out that if you give them a second nugget/fragment of the same type while they are still glittering THEN they're going to walk towards their bounty. Second nugget/fragment isn't consumed while Kobold/Imp is trying to reach the ores/minerals that they've found, but they can try to locate the same vein again. Not sure if it's intended to be this way or not, but I'm just glad I found out how it works, because for a hoarder like me, this feature is cool as hell 7) guide states "once you provoked them (undead mobs in the context) and/or lost the Undead Affinity effect, the process will be interrupted". Interruption should reset befriending progress you've made so far to 0, but this doesn't seem to work correctly. If YOU hit THEM then yeah, reset to 0. If THEY hit YOU, then some mobs are angry and don't accept any items for a while, but progress isn't lost. Mobs provoked by the player won't be neutral to him anymore, but that doesn't prevent that player from giving them more items, once some time has passed. Loosing Undead Affinity while trying to befriend undead mobs doesn't reset progress either - mobs will chase and try to kill you, but you can still give them items if Undead Affinity is reapplied, and they didn't land a hit yet. And even if they did hit you - so long as you don't fight back, you can just wait a bit and resume 8) Melty Monster and Jack o'Frost projectiles disappear on contact with the player/other befriended mobs. Given how many projectiles they can dish out at higher levels, I assume this is intentional, so that projectiles wouldn't hit the player all the time (might be annoying even without damage dealt?). On the flip side, is that they can't hit the player even if they actually want to (if you provoked them, for example). I'm certainly not complaining about one less threat to worry about, but mentioning it just in case it's not intended to be this way

Targeting behavior

Targeting behavior is one of those things that I think should be described somewhere. While players can enjoy the mod without knowing how/why mobs do one thing or the other, I think it would help us to spot unusual/unintended behavior and maybe avoid frustration due to some less obvious things. Since I didn't know how friendly mobs (or even vanilla mobs) choose their targets, I've made an assumption based on my observations, and from that a few exceptions follow. This whole "assumption"/theory thing (as well as "likely intended" category) may be in line with "how things should be", or may be dead wrong. I'd be glad if you could confirm or correct me on these.

[Assumption]

Befriended mobs (most likely) have a queue of targets and 3 levels of "targeting priority", from 1 to 3. This priority is assigned as the following happens (unless they're in WAIT mode - look [likely intended] №1 and exception to that - [likely a bug] №3):

This queue of targets can only contain targets with the same priority level, any mob with lower priority is ignored until the queue is empty. If someone with higher priority appears, this queue is cleared and targets with new, higher priority added to the list.

Example: Player attacks a zombie (zombie gets priority 1), befriended mob moves to attack that zombie. Then, a spider attacks our mob (spider gets priority 2) and our mob forgets about the first zombie, and starts to fight back instead. Just a few seconds later, the first zombie manages to land a hit on the player (zombie gets priority 3), befriended mob rushes to defend the player as top priority while ignoring the spider that keeps biting it in the back.

There's a few exceptions to this behavior model that I consider to be [intended]:

  1. befriended mobs in WAIT mode won't aggro on anyone regardless of what's happening around them (1 exception - [likely a bug] №3).

    Example: Skeleton Girl in WAIT mode won't try to fight back against a spider that attacks her, but in FOLLOWING or WANDERING mode she will defend herself. Likely intended to let player "time out" their mobs after they've been provoked accidentally (look [likely intended] №2).

  2. the player is not an exception to the "mobs will fight back if attacked by someone" rule. "Friend" or not, you'll pay in blood! Rather than an exception to the general rule, this one naturally follows from it, which might become a somewhat unpleasant surprise if you're not careful around your mobs in a fight and didn't know about their temper beforehand

    Example 1: Player hits befriended mob, now it's angered and wants to beat him up. Example 2: There are 2 spiders that want to attack befriended mob, and the player tries to intervene but accidentally hits his mob instead, and right after that, spiders hit her as well. The queue's going to have priority 2, something like "Player->Spider->Spider", and that means befriended mob will try to beat up the player BEFORE moving on to hostile spiders (assuming nothing hits the player and overrides the queue with priority 3).

  3. befriended mobs do not help the player in any way (attack his target or defend him) if hostile mobs are of the same type as themselves (with 1 exception - [likely a bug] №1)

    Example: Befriended Skeleton Girl won't react in any way tp player attacking or taking damage from "wild" Skeleton Girls.

  4. befriended mobs won't fight back against accidental damage from the wild mobs of the same type.

    Example: Befriended Skeleton Girl won't attack wild a Skeleton Girl that hit her instead of the player and vice versa. I consider that an exception because wild Skeleton Girls (much like common Skeletons) start to duel each other to death after accidental friendly fire. To reproduce: use your mob as a meat shield while a wild mob of the same type tries to shoot you. Or, in creative mode, make a narrow tunnel and place 3 mobs so that they can't move anywhere (e.g. Zombie <--> wild Skeleton G <--> befriended Skeleton Girl), and then hit the Zombie, triggering support from your mob. Now she'll try to shoot your target through wild Skeleton Girl, which won't react at all.

There are also some exceptions that I think of as a [bug]:

  1. I'll be honest, this one is a mess. Instead of ignoring targets of the same type as them, Hornets/Glaryads/Zombie/Husk/Drowned girls aggro at the player that attackes wild mob of their type. Wild mobs seem to "call out for help" when they get hit, and befriended mobs try to help them.

    This seems to be 1st level priority, since they won't support the player attacking someone else (new targets are added in the queue after the player, most likely), but DO change their target from player to someone else if this someone hurts them (2nd lvl priority - self-defense), or if someone other than them hurts the player (3rd lvl priority - defend player from new threat), unless this someone else is the same type of mob as them (different types of zombies don't count as the same type). In case of "the player is hurt by the wild mob of the same type as the supposed protector", while this "protector" already tries to kill you themselves, the following happens:

    • all befriended zombie variants default to [likely intended] №3 - drop player as their target and ignore both sides while they go at it.
    • befriended Hornets and Glaryads don't react at all - they persist in their intent to kill you with their wild counterpart as a team

    Befriended mobs will try to assist any particular wild mob of the same type only once: if they turn their attention away from you (neutrality of zombie variants, mobs defending themselves, mobs defending the player from some other mob type), then they are not going to try and help the same wild mob kill you again. But, if there're several wild mobs of the same type as yours, each of them can "call out" for help as they get hit, making this a big issue if you plan to befriend Zombie/Husks/Drowned (given how many of them there are in the world).

    It's probably easier to understand this unholy mess by looking at examples below (yes, these happened in my game while I tried to understand just why exactly they behave so differently from the rest):

    Example 1: Befriended Husk Girl aggroes if you attack any wild Husk Girl, now they both chasing after you. If you take a hit from befriended mob - nothing happens and they are both still trying to beat you up. If you take a hit from the wild one - befriended mob stops attacking, but doesn't help you either. If some other mob type intervenes and hits either you or your mob, your mob's going to defend you or themselves and won't try to assist this particular wild Husk girl again. Example 2: Befriended Hornet aggroes if you attack any wild Hornet, now they both chasing after you. It doesn't matter if befriended or wild one hits you, they won't stop until you're dead. If some other mob type intervenes and hits either you or your mob, your Hornet will try to defend you/itself and won't try to assist this particular wild hornet again. Example 3: You have befriended Husk Girl on your side and face off against group of 4 wild Husk Girls. You sweep attack 3 of them with your sword, they "call for support". Your mob will try to help them. If your mob hits you - nothing happens and all of them still chase you, if any wild Husk girl hits you - your mob stops attacking. If another mob type intervenes - your mob's going to defend itself or you from this new threat. After your mob stops trying to kill you, it won't try to assist these 3 wild Husk girls anymore. But there's a 4th one, yay.. So, eventually you're going to hit the 4th wild mob, and your "friend" tries to assist this 4th mob, and that means your friend once again starts to chase you.. Example 4: You have befriended Husk Girl and stumbled upon 2 wild Husk Girls and a Skeleton. Skeleton shoots an arrow, but hits one of the wild Husk Girls. This wild mob "calls for help", and wants revenge. Now both befriended AND the hurt mob are going to beat up this Skeleton together, leaving you to 1v1 second Husk Girl.

  2. If the player somehow damages himself (hitting himself with a splash harm potion, getting hit by his own falling arrow, TNT explosion damage etc), your mobs will try to "protect" you from yourself.. by getting rid of you themselves. Probably not intended. And all I wanted was to heal my undead with a splash potion that I found in the chest

  3. Ender Executor is the only mob that fights back in WAIT mode. That also means, that this's the only mob that you can't "time out" with WAIT command in case you hit her accidentally. Being a miniboss with an impressive health pool and a high attack (and those stats are likely to be even higher with a good weapon and equipped baubles), Your Ender Executor turning on you is one of those things that can turn any uneventfull hunt for some wild animals into a desperate fight for your life if you happen to hit her accidentally. So, if her target queue's going to have the player as her first target, then the only things that could save you from her ire are 2-block high cover or purposely letting someone hostile hit you (to override her targeting queue). I must admit, that while this seems like a bug at first glance, given that Ender Executor really is a miniboss, this behavior might just be appropriate? I'm not sure.

That's all of it. Everything else mentioned in the gameplay guide worked fine, as far as I can tell.

SodiumZH commented 7 months ago

Thank you SO much for such a detailed issue list!

Some issues are confirmed or should have been fixed:

Important 1: Caused by wrong mixin config. The bucket issue should have been fixed in 0.x.21 but I'll double check it.

Important 2: Some sun-immunity doesn't work in 0.1.20 but should have been fixed in 0.x.21. I'll double check it.

Minor 6: It's a troublesome issue in which the algorithm for pathfinding needs to be modified. I've no idea how to solve this now, but it will be addressed before formal publication.

For other issues, I've not reproduced them yet but will try so.

Targeting behaviors:

Your assumption is right. The priority is (smaller number = higher priority):

(1) Mobs that attacked the owner; (2) Mobs that attacked the BM itself; (3) Mobs the owner is attacking; (4) Mobs that attempt to attack the BM itself (must with Amulet of Courage); (5) Mobs that attempt to attack the owner (must with Amulet of Courage II).

Exception 1: Generally intended, but it should fight back if gets attacked. Maybe this feature isn't working.

Exception 2: Bug. I've never observed the case you encountered, and I've never accepted any related issue reports yet. Basically the befriended mobs should NEVER attack the owner. Maybe somehow the code preventing them from attacking the owner is cancelled by other mods. In the fight-back TargetGoal there should have been another code preventing this, but it's wrong. In a word, any issues befriended mobs attacking the owner are ALL bugs.

Exception 3: Intended, but I plan to make the wild mobs neutral when a same-type befriended mob is nearby.

Exception 4: Intended. I designed that wild and befriended mobs of the same type should never attack each other.

The last 3 exceptions are all bugs.

Similarly, I cancelled all attempts befriended mobs setting their targets to the owners, and expectedly befriended mobs should NEVER attack the owner despite the circumstance. This issue may occur if somehow the cancellation is cancelled by other mods. I never observed this, but I'll add additional code somewhere else besides event listeners to further prevent this. Also, any behaviors about assisting involving befriended mobs are all bugs.

SodiumZH commented 6 months ago

Fixed Important 1-3 and Minor 1-3 in update 0.x.22.

SodiumZH commented 6 months ago

The issues mobs attacking the owner were never reproduced here. Could you send your modpack?

SonZir0 commented 6 months ago

This is the modpack (exported from the CurseForge app) I played and tested with my friends. Test.zip

I saw the new version of the mod, we'll check it out a bit later. Note, there's 3 overrides in this zip file: 

  1. Quality Sounds is just unavailable on CurseForge (downloaded from Modrinth)
  2. HMaG is missing 1 localization file (outdated, so we decided to get rid of it altogether)
  3. Ars Nouveau. A few balance changes to recipes, but nothing more

If you (understandably so) think these are suspicious, feel free to download them yourself.