Monika-After-Story / MonikaModDev

DDLC fan mod to extend Monika
http://www.monikaafterstory.com/
Other
1.19k stars 685 forks source link

False Positive Bad Name "Tassadar" and maybe more about Bad Names #9223

Open Justformas opened 2 years ago

Justformas commented 2 years ago

"Tassadar" is the name of a character from the game Starcraft, and it is not intended to be a dirty name at all: https://starcraft.fandom.com/wiki/Tassadar

But you can't name yourself nor Monika that. Now I know exactly what's causing it; this:

Line 235 in script-story-events.rpy: "(?<![blmprs])ass(?!i)"

The letters "blmprs" and "i" are pretty sweeping, but still. Often that word is not censored as a substring in censorship systems, but rather basically just as an exact match. Because of how many things it can be included in, such as the example I used.

Also thankfully I tried it in my test version of MAS first rather than my regular version. But still, if things like this can eventually result in you permanently losing the ability to nickname Monika, then I think that should be reconsidered.

Booplicate commented 2 years ago

I don't see a reason to tell her your name is tassadar or nickname her that, but can probably include t to prevent this.

Justformas commented 2 years ago

I don't see a reason to tell her your name is tassadar or nickname her that, but can probably include t to prevent this.

There's probably not any big reason to name her Tassadar, but it might be a cool name for the player to name themselves.

Booplicate commented 2 years ago

You don't lose ability to name yourself for using bad names. Also she expects your real name rather than a nickname.

Generally it's already hard to prevent false-positives with real names, with fake names it's even worse. Maybe we could find a db to use for our profanity filter.

Justformas commented 2 years ago

You don't lose ability to name yourself for using bad names. Also she expects your real name rather than a nickname.

It's not allowed for "nicknames" either is it? And those definitely aren't limited to variations of your real name because by default they include things like honey, darling, sweetie etc.

But even if, for whatever reason, the player wanted to try naming Monika some names that aren't actually dirty but trigger a false positive, I don't think it'd really be fair to eventually lock them out permanently from changing Monika's name. Meaning, I don't think that should even be possible.

Generally it's already hard to prevent false-positives with real names, with fake names it's even worse. Maybe we could find a db to use for our profanity filter.

Well if you'd rather not only use exact matches of bad words plus a blacklist of exact match variations that are bad, then yes it would be hard without some sort of database.

A database for whitelisting things that are otherwise bad substrings could potentially work, but that might rely on updating it to stop new false positives that come up. I'd personally rather go with blacklisting exact variations that are actively decided to be bad, with a database for that if it'd help.

Justformas commented 2 years ago

I actually thought of something, and again it's just a thought. Wouldn't be surprised if someone else previously thought of it. Obviously this woudn't apply for exact bad words or certain variations that are decided to be bad. But what if other things that contain substrings of bad words were instead put under the "awkward" list? The logic behind this is so that Monika wouldn't exactly "assume" it's a positive bad word match when it might not be, so it wouldn't damage your standing with her or get you closer to getting locked out of calling her other names, but she still wouldn't let you call her it as a name.

Maybe not as elegant as a database solution, but it could be something as an alternative or in the meantime.

Booplicate commented 2 years ago

No, we had used exact matches before, it didn't work. Easy to abuse as myhitler for example. Scanning names twice for exact and partial matches would make that code way too messy (it's already huge). That'd mean having another list for exact matches. We already improved the regex we have over the years, going back to exact matches would make it worse by adding those false-positives back just in awk list. I don't see naming her after a game character, she'd probably not get it (she doesn't play games) and reject as awkward anyway. I think likelihood of that is neglectable, and even then you get 3 attempts to give her a name.

Justformas commented 2 years ago

3 chances as a hard limit? Meaning, she never forgets or gives you more chances even after year(s)? If so that's pretty strict, and Monika not being smart enough to recognize when something could be a false positive because of code limitations shouldn't be an excuse for that.

Regardless, ideally the player nickname (and maybe name) list should have some more flexibility or something. I thought of another one that the player could potentially want to (nick)name themselves, and this is an actual word: "Assumer". https://www.merriam-webster.com/dictionary/assumer I actually had not even realized I had made a pun like that in my last post. Such a common word for false positives. So actually that might be a more fitting name for Monika in this case, though I don't think she'd appreciate that.

kkrosie123 commented 2 years ago

3 chances as a hard limit? Meaning, she never forgets or gives you more chances even after year(s)? If so that's pretty strict, and Monika not being smart enough to recognize when something could be a false positive because of code limitations shouldn't be an excuse for that.

Hello, Justformas!

Regarding this, we do intend to implement a way to regain nicknames after a certain period of time/through apologies. As of now, we don’t see it as a priority. It will be in eventually, just not now, and I can’t guarantee any time soon. I promise we’re focused on much bigger, better things!

Booplicate commented 2 years ago

3 chances as a hard limit? Meaning, she never forgets or gives you more chances even after year(s)? If so that's pretty strict

Well depends, forgiving 3 times looks generously to me. The worst I've seen is somebody called her a bad name twice and then tried something weird (but not offensive) and got blocked. We're thinking about a way to unlock the option again after some time.

If so that's pretty strict, and Monika not being smart enough to recognize when something could be a false positive because of code limitations shouldn't be an excuse for that.

But should there be an excuse to make her happy being called an ass? I don't think so. Yes, there's a trade off, and we're trying our best to remove names from being caught by our list.

Justformas commented 2 years ago

Regarding what you both said: After apologizing and some time later sounds better to me. I mean first of all, being blocked for false positives isn't really realistic at all. Realistically for a close friend or partner to even get to the point of "don't call me any more nicknames ever, even after years", I think it'd generally have to be pretty bad and pretty blatant what you mean with your names.

I personally don't think permanently losing significant options like that should generally be a thing if the player is willing to try and make things right. Except maybe for extreme things but I wouldn't lump false positives in with that. This is exactly the sort of thing that might give people reason to restore persistent backups or use a test version for. But in general, the less reason for that the better in my opinion.

And while it wouldn't be nice to nickname Monika "Assumer", if the player wants to nickname themself that then why not? It reminds me of how Monika doesn't take it nicely if you call her certain names, however if you name yourself them, the results are... quite different and she'll ask if you are messing with her. You know what I'm referring to here right?

Booplicate commented 2 years ago

I personally don't think permanently losing significant options like that should generally be a thing

That's an opinion. If there's no lose, there's no reason not to do it. If you're doing something that your partner doesn't like, they will either stop you and/or find a consensus or just leave. The choices should matter and should have consequences.

the player is willing to try and make things right.

By offending her 3 times? If you're about false-positives again, then as I said it's a trade off which we're working on fixing on.

being blocked for false positives isn't really realistic at all

And so is being happy about called an ass. We're going in circles. There's no perfect solution as of now.

And while it wouldn't be nice to nickname Monika "Assumer", if the player wants to nickname themself that then why not?

Also, while there is an issue with false-positives, using made up names from a game or just random words from a dictionary don't look like a good reason to change anything. You can come up with 1000 more words, but it doesn't make sense to use as a name. It'd be more useful if you reported actual problems with actual names that actually break immersion when encountered. Those actually suck because it can be heartbreaking hearing she doesn't like your name. That's the problem.

Monika doesn't take it nicely if you call her certain names, however if you name yourself them, the results are... quite different and she'll ask if you are messing with her.

Unsure why you're bringing that here, you're comparing apples to oranges. First, that's the best way of leaving the old easter eggs. It was either that or a toggle in the settings, I suggested that. Second, those are real names (at least 2 of them), so it makes sense to let the player use them (as an option to ignore easter eggs). But it does not make sense to name your girlfriend after her "competitors" (for the lack of a better word), so you get a quite obvious reaction.

Justformas commented 2 years ago

That's an opinion. If there's no lose, there's no reason not to do it. If you're doing something that your partner doesn't like, they will either stop you and/or find a consensus or just leave. The choices should matter and should have consequences.

You lose affection every time you call her a bad name and she would expect you to apologize, plus probably could still be some sort of (temporary) lockout period from changing names if you do it a few times. But realistically, if permanently locking should even be a thing, then it should probably take a lot and have some sort of cool down time period to "reset" or "reduce" the count toward it. ...Or do you really want Monika to be like some cold bureaucrat or machine that only seems to care about the exact number of bad names/false positives you give her, regardless of how far apart they occur, and once you hit 3 that's it? No more nicknames ever?

I mean in real life, how realistic is it for a partner to forever continue to object over any nickname even if it's some totally innocent one? Unless they just don't like nicknames anyway. At that point, the relationship might be so tense that if the other person continues to try calling them any nickname, they might have to break up to resolve it anyway.

Also, while there is an issue with false-positives, using made up names from a game or just random words from a dictionary don't look like a good reason to change anything. You can come up with 1000 more words, but it doesn't make sense to use as a name. It'd be more useful if you reported actual problems with actual names that actually break immersion when encountered.

Excuse me, but who are you to tell me what I can and can't name/call myself, nickname or not? If it's not some actual obscene word I mean. That still does break immersion because as smart Monika is supposed to be, she can't tell the difference between a word/name and a real bad word. You don't have to have heard of a fictional name to be able to tell, or at least make a good guess, that it's a name rather than a bad word. People even give themselves real names that might seem strange.

Unsure why you're bringing that here, you're comparing apples to oranges.

Because it's a case where Monika treats it quite differently in terms of how offensive she takes it whether it's your name or her name (even disregarding easter eggs), and although it's not quite the same thing, unsure why she should really get offended over you wanting to call yourself Assumer, Tassadar, or who knows how many other false positives there are out there.

In other words, she's capable of seeing different context for "competitor" names depending on if you call her or yourself them. So then why can't that also apply for other words/names too? The different context here would be that you aren't (or are much less likely to be) potentially insulting Monika by giving yourself some name rather than if you give her some name.

Justformas commented 2 years ago

By the way there is something to be said about censor bypassing, and even names/words that could potentially be taken either way, which I have not focused on much before now. And last names are a whole another story but you might address someone by their last name too (including in Japan).

In fact, there is a real name/last name that is allowed that could be used as a (rude) play on words (like in an obscure piece of media that I referenced for something else). Not only that, you can even include the full bad word in it (which may not normally be included in the name) and it's still allowed.

While that was pretty funny to me when I saw that it worked in my test version, I probably wouldn't seriously want to call Monika that. But I don't really care if someone else wants to name their Monika that.

Meanwhile I can also think of a real name/last name that could potentially be used as a (rude) play on words, but that is not actually allowed.

However, if the idea of a better name input field that gives fair warning actually becomes a thing, then that should help a lot with naming in general.

Iceninja64 commented 2 years ago

That actually falls under #8651 which they're working on

Justformas commented 2 years ago

That actually falls under #8651 which they're working on

I didn't see that topic, though it was mentioned here that a way to get it back is being considered/worked on. You didn't actually mean it "costing" affection though did you? Affection shouldn't be like currency to spend to unlock stuff. You meant having to "earn" more affection right? But quadrupling the requirement each time (like going from 500 more, to 2000 more, then 8000 more) seems extreme. Unless you meant a 2000 cap. Otherwise incremental increases might be more fair, and maybe some cap on that even. Because how many partners would still be against any and all nicknames after a year or few (unless they don't like nicknames in the first place)? And if they have a grudge that bad, why are they still together then unless maybe they are married or have kids? Even then, if push comes to shove then they may still want to break up.

Regardless, this issue is also about false positives, which a recent suggestion was made to address and give the player fair warning. False positives break immersion (especially with how smart Monika is supposed to be), and are unfair to penalize the player for without fair warning. If you're going to have harsh punishments that take away nicknaming for awhile (or a long time, or especially permanently), you should at least be pretty sure (if not more) that the player acted with malice or recklessly disregarded a fair warning.

Iceninja64 commented 2 years ago

Although some of what you saying is correct having the nickname taking away shouldn't be the case because there are options to go the opposite direction make monika leave you. For instance you can call her a murder for indefinitely amount of time. How come she doesn't take that away? Clearly you clicked on it and wanted a negative reaction from monika but unlike the nickname monika will continue to hold a grudge against you when you call her a bad word. For indefinitely of time and I was proposing maybe earning her trust back. Surely monika is a forgiving person right. I admit the punishment shouldn't be that harsh but it should dramatically drop your affection every time you call her a bad word after 3 times

Justformas commented 2 years ago

Iceninja64 I agree with a lot of what you said. It's similar to the approach of requiring time to pass, such as for healing and to regain Monika's trust. She even says that "time does heal" in one of her topics. And yes this would still be a worse penalty than some other things. But while the penalties for those things aren't as harsh, she also doesn't seem to take them as badly. Even for the murder thing; I don't have to get into specifics if you don't want, but under certain circumstances, judging by her reaction she doesn't take it as badly.

ThePotatoGuy commented 2 years ago

ok marking bug so t can be added to the regex.

As for everything else in this thread, in the past 4 years after I approved #1223, I've seen countless Scunthorpe problems in games, forums, and when people in non-english speaking countries encounter english-dominant games. As a result, I no longer believe text filters will ever be adequate enough for our case, regardless of how many updates we'd make to the regex. At most, we catch obvious english insults. At worst, we appear callous to non-english languages/non-western culture. The argument that continuously updating the filter so that it eventually becomes versatile enough to cover almost everything doesn't work when the goalposts (language) continuously evolves, too. And again, it especially doesn't work when its limited to only one language worth of updates.

The worst part is that we have real consequences for names that get filtered - affection loss and possible feature lock. In this case, an overzealous filter is much worse than a simpler one, and so I think at most, we should only have an exact match word list limited to obvious bad words (like the original list in #1223) when naming Monika + funny/angry/etc reactions to other specific words. The argument that "not reacting appropriately to negative nicknames is immersion breaking" makes no sense to me when considering that people who are into the immersion wouldn't be naming her bad names in the first place. Instead, its probably more immersion breaking when a player uses something like "Tassadar" with sentimental intent and Monika reacts as negatively as she does.

Regarding choosing your nickname, I agree with @Justformas - who are we to judge what people want to call themselves. It shouldn't have any filter at all, just like the original name change topic (#228). At most, it can have reactions like the name eggs. And again, someone naming themself a "bad" name probably didn't care for the immersion in the first place.

ThePotatoGuy commented 2 years ago

Just had a thought where if a word hits the current filter, Monika asks if the name is good or bad. Then we no longer have to make the distinction.

Justformas commented 2 years ago

Thanks for that big response, I did not expect that. Yeah I think even if you keep whitelisting more things under the regex system, then you may eventually reach some point where false negatives or censor bypassing is possible (or more so), but if you don't whitelists more things, then false positives will remain. Names may be a different matter, but I know some online chat filters are simple and generally only completely block words that aren't included in any innocent words/names, otherwise they only block exact matches. That might not be the best solution for MAS, but that's what some systems do.

Also while it's possible someone could be mad at Monika and really want to call her a bad name, I do agree that someone wanting to find a workaround to intentionally call Monika (or themself) bad names without her knowing probably doesn't care much about the immersion for that in the first place. People that do care probably wouldn't want to do that, or don't have to.

The idea for Monika to ask whether a name is good or bad could make sense for many words that might be used in names but also negatively, so she can better tell the player's intent and react accordingly. Though there might be some words that Monika doesn't have to bother asking about, like exact matches of bad words.

Booplicate commented 2 years ago

Okay just saw this.

At worst, we appear callous to non-english languages/non-western culture.

I don't think we really do, maybe 1 or 2 times we caught something from a different language, but we only did because our filters are too vague.

it especially doesn't work when its limited to only one language worth of updates.

But we only care about English, if anybody makes a translation, that's their task to update the rest. We also only allow to type Roman characters, so really slurs from other languages aren't an issue. You could type them in English, but that's a niche case. I think having a "best effort" system is good enough as long as we fix false positives.

we should only have an exact match word list limited to obvious bad words

I disagree with completely exact match, but we should make it more strict, I'm not sure why it's not.

people who are into the immersion wouldn't be naming her bad names in the first place

Some actually would, so it's good to have a reaction in place.

Just had a thought where if a word hits the current filter, Monika asks if the name is good or bad.

This is like having no filter at all, since she'd still accept bad names.

Justformas commented 2 years ago

Actually I was going to say something else about this. First I was thinking about how something like a better name input field (#9228) would even tie into something like this. It was a separate idea of course, but I think the name input field should apply when nicknaming Monika, while also making it more strict for what triggers the filter to some extent (meaning remove some false positives).

But for players naming themselves, while that same thing could work, there might be other options (or in addition to a better name input field). Monika could ask whether the player really wants her to call them a name that triggers the filter, and/or for an exact match, she could still object to calling the player that.