Interkarma / daggerfall-unity

Open source recreation of Daggerfall in the Unity engine
http://www.dfworkshop.net
MIT License
2.71k stars 327 forks source link

Enable gender filtering for quests #1542

Closed df-ferital closed 4 years ago

df-ferital commented 5 years ago

Some classic quests are supposed to be offered only by male questors. In fact, all quests in which the quest giver is set as group Questor male. Verified in classic to be sure of what I'm saying here.

The easiest way to correct this is to add a new gender field to QuestData structure with the corresponding column in QuestList-Classic.txt and QuestList-DFU.txt.

ajrb commented 5 years ago

Really? Wow, that's quite a surprise that classic wont offer certain quests if the quest giver is not male. Thinking through all the guilds though, all quest giver NPCs are male aren't they? Even the temples from memory anyway.

Have you actually identified a circumstance where this is an issue?

df-ferital commented 5 years ago

Some commoner quests where quest giver requires some help with his lover require quest giver to be a male. Well, we might also consider that gay mariage is common in the Iliac Bay, after all.

On another side, children should not be allowed to give any of commoners and noble quests but this can easily be corrected using their faction ID.

ajrb commented 5 years ago

How can the children be excluded, static NPCs of commoners all have faction ids of 0. It's probably something to do with the flags byte. So far only bit 5 is known, set = female, unset = male. The one I'm referring to is RmbBlockPeopleRecord.Flags.

I've made a list of the flags value for 10 or so NPCs and I can't discern much of a pattern for the other bits, but possible one has to be set for that NPC to be candidate for offering a quest? Probably the only way we'll be able to get to the bottom of it is to reverse engineer classic.

df-ferital commented 5 years ago

Children are not excluded from quests in classic, this is my own idea to do that because quests are clearly supposed to be offered by adults only. This does not prevent DFU quest writers to make children specific quests in the future, since children normally have their own faction ID (I need to check if it correctly assigned in buildings).

ajrb commented 5 years ago

Have you confirmed or refuted my findings about children yet?

df-ferital commented 5 years ago

Sorry for the late answer. Unfortunately, it seems only children in Daggerfall, Sentinel and Wayrest castles have been assigned the correct faction ID of 514. All other children have a faction ID of 0 as you said.

I see two solutions there: the first one would be to check the texture archive and record to know if a NPC is a child, but this is a really ugly solution in my opinion. The other solution would be to patch BLOCKS.BSA at runtime to assign correct faction IDs to not only children, but to all NPCs having an incorrect faction ID. I can do that but it will require some time.

ajrb commented 5 years ago

I'll leave that to you for now then.

I'm implementing the gender restriction and something is worrying me.. all the coven quests have the "group Questor male" definition. These quests are dispensed like a hybrid of guild and social quest dispensing and often the quest giver is definitely female. I don't think this is an issue for these quests as they don't seem gender specific, although not checked them all.

However, it makes me doubt that setting all social quests with "group Questor male" to only be dispensed by male NPCs may be incorrect. Once I push a PR I think the quests will need checking to see if some are also not gender specific and should not be male only.

df-ferital commented 5 years ago

Ok, thanks for your PR. For coven quests, I need to check how classic works exactly. What I think is that every guild (including covens) questor is unaffected by the "group Questor male" tag if you ask for a quest from the "Quest" submenu, as in this case, a quest is always randomly chosen from the faction pool of quests, no matter what the questor gender is. From what I understood, the tag is only effective to provide random quests when talking to commoners or nobles.

ajrb commented 5 years ago

Ah, sorry, you misunderstand me. I am confident regarding behaviour of coven quest dispensing. It just makes me wonder whether my use of the simple rule for commoner, merchant and noble quests is actually 100% correct. That's all. Sorry for rambling.

df-ferital commented 5 years ago

Ah OK. No problem, I'll verify your PR by checking it against classic behavior to be sure I interpreted the tag correctly. I may need to do a little reverse engineering before that.