VFR: Why it's dumb and why you should stop doing it

no like I mean it’s just hard to properly impalement. I couldn’t even implement it with just a few basic classes.

Specifically I had, A doctor, sheriff, mafia, vig, roleblocker and bus driver.

I was able to get investigations, kills and heals working no problem. Roleblocking took awhile but I eventually got it working. Bus drivers however broke down when interacting with either a roleblocker or another bus driver. I never found a solution to this and I was trying for a couple weeks.

have you tried treating roleblocks and redirects as edges on a graph, then repetitively A) resolving non-affected roleblocks and redirects and B) eliminating cycles, until everything is resolved?

I think Nuke has been working on a way to programme that for years, actually. Also, reflexive roleblocker having higher priority fixes Party pretty easily.

VIllage Bus Driver is another role I have problems with the town having needlessly. In fact, the only role I am 100% okay with villas having is Chrono :^)

No.

Lol no. I moved on after that. Considering how much programming experience I had at the time I got surprisingly far. If this was just standard mafia then I wouldn’t doubt that it could be done.

But having to redo the entire resolution system with roles as complex and varied as the ones in this game would take quite awhile.

Can anyone describe how to resolve Tornado, Debauch, Occupy, Party, and Hunter’s Mark? @Kirefitten seems to think it’s solved with RAR

what specific interactions are you looking for. You can’t just say “these abilities need to be solved” and not tell me what you want to be solved

1 Like

It’s pretty straightforward to simply write a program that has hard coded algorithm to every individual interaction such that it looks mostly like RAR to an outside observer.

But actually translating the rules of RAR into code is difficult. I kept running into situations where I have to make an exception somewhere.

For example in order to make sure it’s giving non-arbitrary outcomes I coded it to resolve each role in a random order.

With every role besides the bus driver I was able to do this just fine. And the bus driver was able to work under standard situations. However there were always situations where it would break down with either more than 2 bus drivers or bus drivers combined with roleblockers.

If I were to code this again a lot of it would probably still be very useful. For example I was able to implement a resolution que that can consistently handle infinite regress situations (ex: Roleblocker targets a jailkeeper targets roleblocker and the roleblocker is attacked. The roleblocker is killed btw).

Basically the way my code worked is you input each players targets (works for an arbitrary number of players including citizens) and it stores a list of each player, their role, who each player is targeting and a list of who is targeting each player (having 2 lists for this is useful since it lets you work backwards from the recipient or forwards from the instigator of an action) from there the lists are randomized for testing purposes (to ensure no interactions are dependent on the list order. This is unnecessary for actually implementing it)

Each player is selected an an algorithm determines what happens to them based on what roles are targeting them, what roles they are targeting and what roles are targeting the player they are targeting. It then also resolves the roles that effect them in a que which stops if it either runs out of players or if it encounters the same player twice (in which case it ignores them the 2nd time). The function for tracking this is recursive but the que prevents an overflow.

It then checks the status of each player base off of what happened to them in the previous part of the code and what they did in order to determine exactly what their final night results should be, which is then displayed in a list

While I haven’t tested it, this should be able to process both Hunters mark and Party. Although a party would be bypassed by a roleblocker directly targeting them unless we make them immune.

Occupy I know for a fact can work.

Tornado and Debauch were where I had problems getting this to work. I tried a separate redirection function with some failsafes and a separate resolution step to double check where everyone should end up going, but there were always specific interactions where this broke down.

Despite this the program one of the ones I am the most proud of. Maybe I should remake it and try again to get it working and with more features?

2 Likes

The normal answer would be design with an action resolution system in mind for those interactions (i.e a priority list).
The big brain answer would be to design outside of disruption effects as they utterly wreck everything even with an action resolution system

Theres a constant argument between whether VFR is good or not. I say its Both, VFR is used when investgative roles have no leads. And although yes there are many good points to why its bad(Other people have already stated them). However not using VFR in that context means nothing will happen for the day. Giving evils an extra night to Kill/Convert and overall coming closer to gaining majority. VFR provides crucial infomation for both sides, good and bad.

in unseen games its okay to spend an entire day doing nothing early on, they can’t hit 4 population and only the first two members can convert

Ima kinda natural when it comes to VFR, as I said it provide crucial information but it has its downsides. If I had to choose a side i’d say VFR is better, because simply knowing what people claim allows BD to take action much earlier on.

image

1 Like

Excuse me?