• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 20:31
CEST 02:31
KST 09:31
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
RSL Season 1 - Final Week6[ASL19] Finals Recap: Standing Tall12HomeStory Cup 27 - Info & Preview18Classic wins Code S Season 2 (2025)16Code S RO4 & Finals Preview: herO, Rogue, Classic, GuMiho0
Community News
Team TLMC #5 - Submission extension0Firefly given lifetime ban by ESIC following match-fixing investigation17$25,000 Streamerzone StarCraft Pro Series announced7Weekly Cups (June 30 - July 6): Classic Doubles7[BSL20] Non-Korean Championship 4x BSL + 4x China10
StarCraft 2
General
Team TLMC #5 - Submission extension TL Team Map Contest #5: Presented by Monster Energy RSL Revival patreon money discussion thread The GOAT ranking of GOAT rankings Weekly Cups (June 30 - July 6): Classic Doubles
Tourneys
$5,100+ SEL Season 2 Championship (SC: Evo) WardiTV Mondays RSL: Revival, a new crowdfunded tournament series Sparkling Tuna Cup - Weekly Open Tournament FEL Cracov 2025 (July 27) - $8000 live event
Strategy
How did i lose this ZvP, whats the proper response Simple Questions Simple Answers
Custom Maps
External Content
Mutation # 482 Wheel of Misfortune Mutation # 481 Fear and Lava Mutation # 480 Moths to the Flame Mutation # 479 Worn Out Welcome
Brood War
General
Flash Announces Hiatus From ASL [Guide] MyStarcraft BW General Discussion [ASL19] Finals Recap: Standing Tall BGH Auto Balance -> http://bghmmr.eu/
Tourneys
[Megathread] Daily Proleagues 2025 ACS Season 2 Qualifier Small VOD Thread 2.0 Last Minute Live-Report Thread Resource!
Strategy
Simple Questions, Simple Answers I am doing this better than progamers do.
Other Games
General Games
Path of Exile Stormgate/Frost Giant Megathread CCLP - Command & Conquer League Project The PlayStation 5 Nintendo Switch Thread
Dota 2
Official 'what is Dota anymore' discussion
League of Legends
Heroes of the Storm
Simple Questions, Simple Answers Heroes of the Storm 2.0
Hearthstone
Heroes of StarCraft mini-set
TL Mafia
TL Mafia Community Thread Vanilla Mini Mafia
Community
General
US Politics Mega-thread Summer Games Done Quick 2025! Russo-Ukrainian War Thread Things Aren’t Peaceful in Palestine The Accidental Video Game Porn Archive
Fan Clubs
SKT1 Classic Fan Club! Maru Fan Club
Media & Entertainment
Movie Discussion! [Manga] One Piece Anime Discussion Thread [\m/] Heavy Metal Thread
Sports
2024 - 2025 Football Thread Formula 1 Discussion NBA General Discussion TeamLiquid Health and Fitness Initiative For 2023 NHL Playoffs 2024
World Cup 2022
Tech Support
Computer Build, Upgrade & Buying Resource Thread
TL Community
The Automated Ban List
Blogs
Men Take Risks, Women Win Ga…
TrAiDoS
momentary artworks from des…
tankgirl
from making sc maps to makin…
Husyelt
StarCraft improvement
iopq
Trip to the Zoo
micronesia
Customize Sidebar...

Website Feedback

Closed Threads



Active: 480 users

Mafia System - Updates and Suggestions - Page 4

Forum Index > TL Mafia
Post a Reply
Prev 1 2 3 4 5 6 7 Next All
Keirathi
Profile Joined May 2012
United States4679 Posts
November 24 2012 07:04 GMT
#61
Sorry, I got a bit distracted with trying to make it work, rather than just showing the rough idea Took me a bit longer than I expected.

Anyways, here's sort of what I was envisioning. First part, when you start making a game:

[image loading]

You can see I selected a Normal C9++ game, and set some of the game options (the ones I could think of being variable game to game. I'm sure there are more, though). Then, I hit the Next button.

[image loading]

Now, I have a tree of all the available "Normal" roles, and can add them back and forth. Since I selected C9++, the listbox was pre-filled with the basic C9++ ones, though (I almost want to suggest disabling the ability to move roles around for c9++, but some hosts would want, say, jailkeepers instead of doctors, or add a framer, etc. I'm not really sure what the best way to deal with that is). So, you'll notice that I have Cop selected, and it brings up a groupBox of Cop-Specific options. Now, having those kind of options for every role is going to be a huge list of "if (listBox.contains("Cop")) { Cop c = new Cop(); c.Sanity = SanityComboBox.SelectedIndex.Text; Game.add(c); }" or whatever, but it should be workable.
My dear friend if I have gone pants on head, you have gone socks on ears!!! -ShiaoPi
gonzaw
Profile Joined December 2011
Uruguay4911 Posts
November 24 2012 07:10 GMT
#62
Wtf did you just do everything? O_o
Keirathi
Profile Joined May 2012
United States4679 Posts
November 24 2012 07:10 GMT
#63
Lol no. That's just a mockup GUI. It has 0 functionality
My dear friend if I have gone pants on head, you have gone socks on ears!!! -ShiaoPi
gonzaw
Profile Joined December 2011
Uruguay4911 Posts
November 24 2012 07:17 GMT
#64
Wow nice job.


Totally missed the Action Resolution Period thingy....which to be honest would be pointless if the system automates night actions, but it can be done to allow players to discuss their night actions without risking scum/blues changing their own actions.

For this 1st iteration I've been thinking about something exactly like that. Choose "basic" setup stuff (mayority/plurality lynch, allow no-lynch vote, etc), then check pre-existent roles and choose some basic properties from them.

For next iterations of the system I'd want more features, like the ability to automatically create a random C9++ setup.
Also C9++ gets complicated since you have to forcefully check that the whole TTDDVV stuff holds true, which I think can be done differently and more intuitively than just put random roles and hope the TTDV formula is correct.
For instance having the C9++ menu have 2 "boxes". One shows the role in the game, and another one shows the TTVVDs that are being created.
You can be able to either put a specific role you want into the left "role" box, which automatically updates the right "TVD" box, or add specific "TVD" options to the right box which automatically updates the left "role" box.
Of course the more "TVD"'s or roles you put in each respective box restricts your choices for adding new roles/TVDs .


Also yeah I want to think more about those "Role Options" we can have for these roles.
For instance it seems okay for Cops to have the "Checks" (role or alignment) and "Sanity" options....but could they have some more?
gonzaw
Profile Joined December 2011
Uruguay4911 Posts
Last Edited: 2012-11-24 07:31:39
November 24 2012 07:21 GMT
#65
Also I want it to be more "elegant" and "decentralized" and all that design shit.
Have the GUI gather info in specific datatypes, and send that information to the system itself that creates everything. Don't do "Cop c= new Cop(); c.Sanity=Dropbox.blablabla" inside the GUI code because it's like the worst mistake you can do in design lol.
Of course not taking into account the "layer" design I was going for (which could theoretically change in the future).
Although this GUI seems to connect directly to Layer 4 so it doesn't matter. You'd need a way to connect it to Layer 2-3 if you plan on having anything automated at all (e.g a bot) :/

Also get yo ass in omgus! I keep talking to myself there :/
lol I need someone to post some opinions or something
gonzaw
Profile Joined December 2011
Uruguay4911 Posts
November 24 2012 07:24 GMT
#66
Oh shit I forgot C9++ is a Normal game.

Well...I guess we can leave that whole "automated C9++" thing for later and just think of it as a normal game right now.
I.e the host would throw the "c9++ dice" for the TTVBDS stuff himself and add the roles himself and we'd do no checkd whatsoever.
If that's the case then it doesn't make much sense to refer to C9++ by name in that GUI of yours and just make it "Normal game" and that's it. Possibly add a description that says "This setup uses the C9++ standard of bla bla bla".
Keirathi
Profile Joined May 2012
United States4679 Posts
November 24 2012 07:27 GMT
#67
Actually, I think that "Roles" tab would only be appropriate for a Custom game, now that I think about it.

If you selected C9++ from the tree in the first tab, then it would just roll everything for you (and bonus: I already have all the code written to roll a C9++ game! ) without ever going to the roles tab, since C9++ has a pretty strict standard of rules for each role anyways. Like, you'll never have Insane Cops in a C9++ game, etc.
My dear friend if I have gone pants on head, you have gone socks on ears!!! -ShiaoPi
gonzaw
Profile Joined December 2011
Uruguay4911 Posts
Last Edited: 2012-11-24 07:42:17
November 24 2012 07:31 GMT
#68
Yeah I think this "options" stuff about creating games seems easy enough (as soon as we get all the info about those options ).
The whole internal workings of the system is harder, specially the whole setup-role issue.
I was thinking of another design (well, it's analysis as well to be honest) choice of having Passive and Active abilities that are part of roles and we let those do the whole "night action" interaction between roles.
For example: A Vet would have a Passive Ability "1-shot bulletproof vest", when a Vig uses an Active Ability "1-shot KP" on him, that passive ability activates saving him from the shot.
A GF would have a Passive Ability "investigation-immune", when a Cop uses an Active Ability "Alignment Check" on him, that passive ability activates letting him return "town" to that cop check.

This way we don't make roles have "HP" or "Checks_as" properties. Because those properties are basically useless except for specific roles. "HP" is useless except for vets and maybe SKs (i.e everybody has HP=1). "Checks_as" is useless for everybody except GFs (i.e everybody has Check_as=Role itself).
Instead of giving roles redundant information, we can attribute it to passive abilities from specific roles.
For instance, a vet doesn't have 2 HP, but instead has protection. A GF doesn't have an innate attribute of being "town" to checks, but has an ability that lets him come "town" to cop checks. Etc.
I put more reasoning and stuff in OMGUS I think though, so feel free to check.

EDIT:

"What about Framers?" you may be wondering.
A Framer has an Active Ability (let's call it AA, and PA passive abilities) called "Frame". What this does is target another player, and give him a PA called "Returns 'scum' to checks" !.
This way everything goes like before.
A Cop uses an AA called "Cop Check" on that player, who activates that PA and the cop gets a scum check from him.
Again no need for "Checks_as" properties from the Role itself !

EDIT 2:

Of course there should be a way to "delete" that PA once it's done.
That should be easy though I think. Once a specific method "someoneCheckedMe()" or something is called from that PA, he just takes himself out from the list of abilities of that player and that's it (if we use java the GC deletes that PA later automatically anyways).

I think Passive Abilities should have a "react()" method instead. This method should somehow know which Active Ability is calling him (the Active Ability may pass himself as parameter, or he can do something else with meta-programming I guess) and depending on that ability react accordingly.

For instance, the "Cop Check" AA would target the specific player and call a method "Check getCheck()". This method would be like this:
-Check all passive abilities of that player in a certain order (determined by the rules of mafia)
-If one passive ability returns a response, use that response as the Check return type
-If no passive ability returned a response, use the players own alignment and return it as Check

In the design process the player itself may not implement getCheck(), but an intermediate class may (since a player shouldn't know anything about checks on him).
Also the whole "Check" type thing shouldn't be "included" in each Passive Ability object, so it'd need a different design to make it as abstract as possible to every passive ability that doesn't have anything to do with checks
Again, having a "DataResult react(ActiveAction aa)" method that checks what action it is and returns the correspondent result (null if the passive ability doesn't do anything, like if a cop checks a vet with a "1-shot-protection" PA).
gonzaw
Profile Joined December 2011
Uruguay4911 Posts
Last Edited: 2012-11-24 08:14:22
November 24 2012 08:11 GMT
#69
I even have a way to make the host easily create passive abilities to his own roles!

Just have a dropdown box "Active Ability" and another one "Action". The host then chooses which Active ability that passive ability reacts to, and which actions it does when he does.

A GF would have "Cop Check -> Return town as check". A vet would have "Shot -> Protection".
Next to that passive ability there can be a button called "1-shot?" that determines if that passive ability is 1 shot or not.
GF's ability would not be 1-shot, but the vet one would.

Similar things can happen to Active abilities. They can choose from a number of actions from a drop down list.
Like the framer role, or even the medic role, one action would be "Create Passive ability X on target". When he chooses that option he creates a passive action that reacts to any other active ability he wants, but can choose that "Returns as town" or "Protection" abilities. It should have the option of "current-night", so that passive ability is only alive that night and disappears after the night cycle.

For instance, here's a list of all Active Abilities from "normal" roles:
  • Cop: Cop Check - Alignment Check
  • Vig: Vig Shot - Kill Power
  • Medic: Medic Protection - Create Passive Ability -> (On Kill Power) Protection (current-night)
  • Mason: Masoned - Create Passive Ability -> Communication
  • Jailkeeper: Jailed - Roleblock AND Create Passive Ability -> (On Kill Power) Protection (current-night)
  • RBer: Roleblocked - Roleblock (this wouldn't need another name I think)
  • Framer: Framed - Create Passive Ability -> (On Cop Check) Return scum to checks (current-night)
  • Scum: Scum Kill - Kill Power


The only thing left to define is the "Communication" passive ability the mason would give him. But that's just a "name" of his ability and that's it, since technically any player can PM with each other but they aren't allowed because of the rules. If the host receives that night action the host can just tell the players "yo you can PM now" and that's it, the system itself doesn't have to do anything with that passive ability.

In future iterations it may create a QT automatically and do some weird shit.

Also, those active abilities, as you can see generate actions. In fact those "actions" should be possible active abilities to choose from the drop-down menu.
For instance "Kill Power" can refer to either a Vig shot or a scum shot. However the passive ability could refer to just a "Vig Shot" if he wanted to.
Basically each Active Ability has a custom name, and a bunch of predetermined active abilities.
A Passive ability can choose from the custom named ones or from the predetermined active ones.

Also I think there should be an active ability "Visited" which ALMOST EVERY active ability falls into.
So if I check "Visited" as an ability I react to, it reacts to both Cop Checks as Scum Kills as Roleblocks as Medic Protections.

Anyways....those are all "normal" active roles aren't they? (oh yeah forgot about trackers/watches...but you get the point)
Yep, I think this problem is solved then.

FUCK YEAH MOTHERFUCKER!!!!!

EDIT: Forgot to include which action the induced passive abilities react to.
Keirathi
Profile Joined May 2012
United States4679 Posts
November 24 2012 08:21 GMT
#70
I understand where you're going with the Passive/Active thing for the long-term goal, but for normal games, I think you're really just overcomplicating it.

If you have a town cop send in a ##Check: Keirathi action, the bot already knows 1) what alignment, and 2) what role Keirathi is. You don't need a "Checks_as" property, you can just "If (Keirathi == town || Keirathi == godfather) { return town; } else { return scum; }"
My dear friend if I have gone pants on head, you have gone socks on ears!!! -ShiaoPi
gonzaw
Profile Joined December 2011
Uruguay4911 Posts
November 24 2012 08:28 GMT
#71
But where does that happen?
In which part of the system does that piece of code execute? And how does the cop getting RBed would come into play for instance?
What design do you propose to use that and resolve night actions and get the cop his check back later?

Also there are trackers/watchers that count who visited who. That's not that simple to find, specially if some players get RBed and would not visit anybody even if they performed an action.
You propose the same "Result" system I was talking about earlier (or on omgus I don't remember)?
gonzaw
Profile Joined December 2011
Uruguay4911 Posts
November 24 2012 21:37 GMT
#72
There's also the framer fact. How do you make a framer frame someone, and if the cop checks him come up as scum?

Another issue I find is the roleblock. A roleblock should happen before an action is made. If a vig is RBed and decides to shoot someone, then his ActiveAbility "shot" shouldn't be called.
So if someone is RBed, there must be a way to not call said active ability; but also make it possible that another role (RBer/JK) can induce a roleblock on him.

I was thinking of doing something like "effects" or "status" (like in RPG games).
If someone is RBed, then a "RBed" status is added to him. When someone decides to use an active ability, then he first checks all of his statuses to see if they allow him to do so (or to change his action accordingly).
For instance, the "RBed" status would disallow any active ability from going through.

Don't know what other "statuses" or effects can exist in a mafia game though. I was thinking that bus drivers abilities could be something like that.
For instance vig shoots player X, but the vig has a "switch X with Y" status.
So before calling that active ability, the system checks his status. After checking that particular status, it changes the target of the active ability from X to Y, and thus the vig shoots Y.

I think this makes sense.


Another issue is trying to cram all these concepts together and actually "resolve" night actions.
Like I said we could have "results", and these interactions with abilities creates these results. After every night action is resolved, there will be a list of "results".
These results could be "X died" or "Send scum check on target X to the cop", etc. The system goes through each result and does what he should do (kill player X and send him a "You got wasted!" pm and set everything according to that death, send a "You visited X, he's scum!" PM to the cop, etc).
gonzaw
Profile Joined December 2011
Uruguay4911 Posts
Last Edited: 2012-11-25 21:06:20
November 25 2012 05:12 GMT
#73
Okay, I think I finally solved the whole game/setup/role thing.

Now, every normal role, and even some "themed" ones should be able to be handled by the system.
Even Insane Cops, Bombs (kill their attackers at night), Bus Drivers, and the like.

Here is the COMPLETE design I have planned for things
Take into account I basically copy-pasted it from OMGUS so it may have some bad wording >_>

Passive/Active Abilities:
(Already posted in this thread)

Status:
+ Show Spoiler +
Status:

These are the possible effects I think should be in the game.
Statuses are part of a role, and they can modify the result of an active ability that role performs.

The statuses can be categorized, where they have different types:
Before-Status: This status takes effect before the Active Ability is executed
After-Status: This status takes effect after the Active Ability is executed, but before the result is done

Stops control: After the status is done, it creates a result himself and doesn't give the control back to the active ability
Flows control: After the status is done, it gives the control back to the active ability

Examples of statuses:
Roleblock:(Before-Stop) Terminates the execution of the Active Ability
Insane:(After-Flow) Takes the resulting check, and inverts it
Naive:(Before-Stop) Returns the "naive" check
Paranoid:(Before-Stop) Return the "paranoid" check
Disorientation: (Before-Flow) Changes the target of the ability to another one

As you can see, now I figured out cop sanities can be determined by the cops having a specific status
Roleblock is trivial, so let's focus on the sanities:

Insane: What does this do? Why is it an after-status? Well, because first the check has to be made before it's "inverted".
An "Alignment check" or a "Role Check" are done by a cop. The action is done on a target, and returns a specific check. Before the action is resolved though, the role calls this Insane status, which takes the role, and inverts it, and either returns the control to the Active Action again, or just creates a result himself.
In this case it can return the control to the active ability, since it just acts on the check
Naive/Paranoid: In this case, since the check is always the same, the status can just create the respective result and end the flow of control right there
Disorientation: I don't remember seeing this done in games, but I think it can be a nifty little mechanic. What it basically does is, it changes the target of the active ability.
For instance, a Vig with Disorientation who shoots marv, would instead shoot VE (without him knowing it).

Possibility: We can add the possibility that certain status only are taken into account for certain Active Actions.
For instance, what if we have an Insane Cop who also has KP? In this case the "Insane" status doesn't have anything to do with the KP, but it would with him checking people.
What if we want a Cop/Vig who is disoriented when shooting but not when checking? Then we make his disorientation status execute only for the Vig Shot Active Ability

So it's possible to create Status as well (for roles)
(Technicality: I guess technically we can determine if the status is one-shot or infinite as well. That doesn't make sense for sanities but may make sense for disorientation and maybe other stuff)

Status Creation:

There are different ways a status can be created.
For now I can only think of 2, which will be documented here:

At Role creation:
This is a permanent status on the role, and needs this info:
Ability to react to: It has to choose which Active Abilities of said role it can react to. It can choose "All", or specific ones from the role. Theoretically it should be able to choose from Primitive Active Abilities (PAA from now on) the role may be able to have at some point in the game (for instance because of a passive ability of his someone else created)
Primitive Status: It should choose which primitive status it should have. For now they should be Insane/Naive/Paranoid (for checks), and Disoriented (not Roleblock since it wouldn't make any sense lol)

At Ability creation:
Certain abilities can create statuses on other roles. A Roleblock Active Ability does that in fact, it creates a RBed status on the role that lasts for that night cycle
It needs this info:
Target: Target of the status
Life-Expectancy: How much time the status will be active. May be current-cycle, or forever, or maybe for 2 cycles, etc
Ability to react to: Same as the previous one
Primitive Status: Same as previous one


Results of Night Actions:
+ Show Spoiler +
So, we now know how abilities are used in night actions, right?
Steps:
-A role decides to use an active ability
-First it checks his statuses/effects which may modify said active ability
-Then it targets his ability on a specific role/player
-That role checks all his passive abilities that can modify the result of said active ability
-A result is made

Now what is this "result"?
I made an example of an active ability being "Check getCheck()" or something like that, where the result would be the active ability getting a specific Alignment Check.
But what does it do when he gets that check?

Remember, after the night action the system must be in a consistent state that reflects the reality of the mafia game. This means it should have the necessary data about the result of the night action. In this example it should hold the data that the cop checked that certain target and got a specific check back.

This is why I thought of having a "Result" (as a concept/class/etc).
Every ability when activated, creates a result (maybe it may not though). This result is then stored in the system, for further use later or for info, etc.
For instance, when the game is over sometimes hosts post the "Night Action" list. It would go something like this:

Cop: Checks X, gets scum check
Vig: Shoots Y, who is vet and absorbs shot
Medic: Protects Z
Scum: Shoot Z, who absorbs the shot

Which can be organized like this:
Cop: Checks X
Vig: Shoots Y
Medic: Protects Z
Scum: Shoot Z
Cop gets scum check from X
Y loses his vet life
Z is shot but survives because he was protected


In this 2nd model, the 1st are the Night Actions and the italics are the Results.

So if we follow the 2nd model, the system must keep a list of both Night Actions and their Results.
The Results from that night would just be "Cop gets scum check on X"-"Y loses his vet life"-"Z is shot but survives because he was protected"

The result could have more info I guess. Like who created that result on said player, who are the parties involved, and maybe what ability was used.
If someone gets killed, the result could have this info:
-Who gets killed
-Who is his killer
-What ability was used to kill him
-If many people shot him, alternative have a list of the people that did (unless you just choose one for some reason as his "killer")

If someone gets a check, the result could have this info:
-Who did the check
-Who he targeted
-What type of check it is
-The result

Same with other types of "results".


So this is the "steps" I think should happen when resolving night actions:
  • Players send Night Actions to the system, which stores them in a list/collection
  • The system binds each Night Action with: an actor, an active ability, and a target
  • After doing this, the system creates the order these active abilities will be executed (because of Action Resolution, for instance RBs are done first, then protection, then checks, then KP, etc)
  • The execution of each Active Ability does this:
    • The Active Ability checks the effects of the actor which could modify the result of the action
    • The Active Ability uses his ability on his target
    • The target checks all his Passive Abilities, which could modify the result of the action
    • Once the process is over, a Result is made and added to a list of Results that happened that night cycle
    • Once the process is over, the roles and abilities are left in a consistent state as well; consistent with the state of the current mafia game

  • Once all Results are made, the system checks all of them and does this:
    • If the result needs to notify someone, it does (with the specific info), for instance being RBed, getting shot but surviving, cop checks, etc
    • If someone died, then the system checks that player as dead (several implementations are possible), and adds the info to the next Day Post

  • After all of this is done, either:
    • The system gives the list of Results to the host can create the new Day Post
    • The system automatically creates the Day Post with the info he had added above (he can still give the list of results+night actions to the host so he knows what happened)

  • The new Day cycle is started, with the alive players


Does this sound okay then?

The main problem I find is giving the host the power to override any night action and do what he pleases.
For instance, if a Jailer RBes a scum RBer and said RBer RBes the Jailer back, the system would RB the Jailer and that's it. Maybe the host doesn't like that and would want both to be RBed, so he overrides the system and tells it to RB both.

However, this can be averted if the host is given control of the mechanics of the game when creating it. I.e when creating a game the host is given an option "If a Scum RBer and JK target each other, who is RBed?" and he chooses as he wishes, knowing he can't backtrack that decision later.

Which option do we take into account? The 1st one or the 2nd one?
If it's the 1st one then things get more ugly, since Passive Abilities and Active Abilities and stuff are dynamically changing, so the system will be in a inconsistent state when the host decides to override the night actions (for instance, if a vig shots someone he loses his "shot" active ability, even if the host later decides to override that and not let the vig shoot for some reason).

However, if we choose the 2nd one then everything is fine. The only problem is defining how the controler/system should handle the night actions depending on the configuration the host wanted.

One thing I'm not that sure of:


Do we store "irrelevant" Results?

For instance, imagine a Medic decides to protect player X, but nobody shoots X at all.
If this protection gave a "X is medic protected" result, it'd be irrelevant to the game since it doesn't change anything at all.
Not only that, but it could easily be inferred by looking at the Night Action list, where there's an action called "Medic protects X".

However:
That is a legitimate result of a night action. If the medic was RBed, then X would not have been protected
Imagine later we add a feature "Get the list of players that were medic-protected in any mafia game", then how do we determine that?
Do we check all night actions, and see which ones have "Medic protects X"? But what if the medic was RBed, or X was busdriven, or something else happened? That mafia game is not in a "consistent" state anymore (it's in the "ended" state), so after the game is over the system can't re-resolve the night actions and see if the medic really protected X or not.

Because of this I think ALL results should be stored in the system
This includes results like "was framed", or "was medic protected" which don't seem to add much to the game.
We could even make a distinction between Results, "Game Relevant" and "Game Irrelevant". Those results I mentioned would be "Game Irrelevant", while the ones I mentioned in my previous post would be "Game Relevant".
With this, once a cycle ends the system could give the host only the "Game Relevant" results perhaps (since they are the only ones that matter).
The system could give him all results anyways, just so the host knows exactly what happened that night


Steps of Creating a Setup:
+ Show Spoiler +
Setup Creation:
We include basic stuff (deadlines, plurality/mayority lynch, if it allows a no-lynch vote, etc).
We include Faction Creation (or choosing from an already existent one)
We include Role Creation (or choosing from an already existent one)

Faction Creation:
For this 1st iteration we should just force there to be 1 Town and 1 Scum factions with predefined win conditions, and the possibility of including 3rd party factions (or maybe making this automatic by including the SK/jester/etc roles in the "Role Selection" phase anyways)
For the long run however, we can create a faction with a predetermined Win Condition
+ Show Spoiler [Create Win-Con] +
It should be a logical connection of "actors" and "actions".

Remember some win conditions could be like:
"X wins when (X role) (dies) AND (Y faction) (has 0 players remaining) OR (X role) (lives) AND (Z faction) (has equal numbers to factions that count w/Town)

You could create more weird stuff if you wanted I guess.
Also, the "actors" should be restricted to roles from the same setup.
I.e when you create a setup, you create all roles (or use existing ones).
There will be "default" win conditions (town roles win when scum die, etc), but you can then create custom win conditions by using this "dropbox" menu like you said

I like that idea.

However like I said I think it should be able to parse logical connections (it's not that hard), so win conditions can get more complicated (which is what we want, have it as flexible as possible).

Having a function called "checkWinCondition()" (that checks if someone's win condition was met) is easy to implement that way, since propositional language is easy to create and parse, specially with boolean variables that come with Java
Hell there may even be a java feature that lets you use logical connections and logical trees and stuff and it'll be even easier.
EDIT: Checked wiki and there's a design pattern specifically to do stuff like this, which can come in handy

I think it should also have the functionality of being able to add more win conditions. Like being able to add more actors (for instance "Your own faction plus role X" or something) and more actions (like "is converted to faction Z" or something)
That way we can create another functionality which is Create Win Condition.

So a Win condition would have:

1)List of <Actor,LogicalTree(Action)> pairs

Then "Actor" would be one class and "Action" would be another class, and thus we can create any object from those classes as we please dinamically.
They should also have a structure that uses the same setup (i.e it's interconnected with the setup) and gets info from that setup.
For instance if you define a faction called "Gay Rabbits" which is 3rd party, you can create "Gay Rabbits faction" as an actor, but that info must be taken from the setup

Again we should save these "Win Conditions" or a template of them to use in several games and recycle them.


Role Creation:
Several things are noted for the role:
Name: Name of the role
Faction: Must be a faction from the ones defined above
Alternate Win Condition: Creates a win condition for this specific role, even if it belongs to a specific faction. This should be developed later though, right now I think roles should just have the default win condition from their faction
Active Abilities: Must be able to create Active Abilities for the role
Passive Abilities: Must be able to create Passive Abilities for the role

Active Ability Creation:
An Active Ability should have a name, and a set of primitive active abilities. The primitive active abilities are the actions done on the target when this active ability is executed.

List of possible primitive active abilities:
Visit: Just visits the target. Jesters sometimes have this Active Ability to increase the chance a tracker/watcher sees them so they get lynched. Not only that, but several other primitive actions inherit from this one (actions that need to visit another role)
Kill Power: Uses KP on the target.
Create Passive Ability: Creates a Passive Ability on the target. Example: A Medic creates a protective passive ability on his target. It should specify the life of the Passive Ability (how much it should last). It can be permanent or just for the current night; can be 1-shot or several shot
Create Status: Creates a status on the target. Check "Status" below for more info.
Alignment Check: Checks the alignment of his target.
Role Check: Checks the role of his target
Tracks: Checks the people the target visited
Watches: Checks the people that visited the target

Passive Ability Creation:
A Passive Ability is an ability that reacts to an Active Ability, and does something back affecting the result.
To create a Passive Ability, any Active Ability may be chosen. Both primitive and custom active abilities may be chosen. If a primitive active ability is choosen, then any custom ability that uses that primitive active ability is inherently chosen as well.
After that, a primitive passive ability is chosen. A primitive passive ability is a "basic" ability that can be done passively when an action is done on him. Potentially, primitive passive abilities can be determined from the primitive active abilities that it reacts to

List of possible primitive passive abilities.
Protection: Protects self for 1 KP
Return Alignment Check: Returns a specific alignment check
Return Role Check: Returns a specific role check
Communication: Allows external communication with a specific target (target "actor" is included, i.e the guy that used an active ability on him)
Reflect: Reflects the Active Ability to another target (target "actor" is included, i.e the guy that used an active ability on him)
To avoid loops a reflected action might have a "was_reflected" flag or something to indicate it shouldn't be reflected back to him. Other algorithms may be used too
Ninja: Returns a null result
Create Active Ability: Executes an active ability (target "actor" is included, i.e the guy that used an active ability on him). The usability (one-shot, infinite) is not stated since it's executed every time the passive ability reacts.
The usability shouldn't come from this new active ability, but from the passive ability that creates it

Take into account that Active Abilities can have different targets. In which case in the Active Ability Creation mode, the creator can choose which primitive ability is targeted to whom of those targets he chose

Stay tuned for a list of "normal" abilities and how they are formed


Examples of Creation of Abilities:
+ Show Spoiler +
Format of Active Ability: usability: primitive active ability AND (other primitive active ability)
Format of Create Passive Ability: PAA format -> life_expectancy: primitive passive ability AND (other primitive passive ability)
Format of Create Status: PAA format -> life_expectancy: primitive status
Format of Create Active Ability: PPA -> primitive active ability AND (other primitive active ability)
Format of primitive active ability: name_of_ability (target)
Format of primitive passive ability: [ActiveAbility_to_react]name_of_ability(possible_target), usability
Format of primitive status: [ActiveAbility_to_react]name_of_status(possible_parameters), usability



Active Abilities:

Vig Shot: 1-shot: Kill Power(target)
Role Cop/DT: Infinite: Role Check(target) (independent of sanity)
Alignment Cop/Cop: Infinite: Alignment Check(target) (independent of sanity)
1-shot cop: 1-shot: Alignment Check(target)
(Tracker and Watcher are trivial)
Medic: Infinite: Create Passive Ability(target) -> Current-night: [Kill Power] Protection, 1-shot
Jailkeeper: Infinite: Create Passive Ability(target)-> Current-night: [Kill Power] Protection, 1-shot; AND Create Status(target) -> Current-cycle: [Any]Roleblock, infinite
Mason (can PM one guy for the rest of the game): 1-shot: Create Passive Ability(target) -> Forever: Communication(self), infinite AND Create Passive Ability (self) -> Forever: Communication(target), infinite
Roleblocker: Create Status(target) -> Current-cycle: [Any]Roleblock, infinite
Framer: Infinite: Create Passive Ability(target) -> Current-cycle: [AlignmentCheck] ReturnAlignmentCheck(scum), infinite
Bus Driver: Infinite: Create Passive Ability(target_1) -> Current-cycle: [Any_except] Reflect(target_2), infinite; AND Create Passive Ability(target_2) -> Current-cycle: [Any_except] Reflect(target_1), infinite

Passive Abilities:

1-shot bulletproof vest: [Kill Power] Protection, 1-shot
Bulletproof:[Kill Power] Protection, infinite
Alignment-check immune:[Alignment Check] ReturnAlignmentCheck(town), infinite
Role-check immune:[Role Check]ReturnRoleCheck(elected_by_player), infinite
Tracker/Watcher immunity:[Tracker/Watcher] Ninja
Kill attacker and die:[Kill Power] Create Active Ability -> Kill Power(visitor)
Kill attacker but survive:[Kill Power] Protection, infinite AND Create Active Ability -> Kill Power(visitor) (is shot but bulletproof)
or [Kill Power] Ninja, infinite AND Create Active Ability -> Kill Power(visitor) (is never shot, kills attacker before the attacker shoots him)
Mason (masoned with a buddy):Communication(buddy), infinite
Mirror:[Any] Reflect(visitor), infinite
Miller:[Alignment Check] ReturnAlignmentCheck(scum), infinite


There are plenty more anybody can imagine, but those are the "standard" ones


I take it the "Ninja" that returns a "neutral" check for trackers/watchers and the "Ninja" that stops the execution of the ability and doesn't return any result are different passive abilities.
Doesn't matter, they can be different abilities.

EDIT: Also some of these stuff could be solved using some design patterns as well (maybe the command pattern? I think that could be used somewhere)
iGrok
Profile Blog Joined October 2010
United States5142 Posts
November 25 2012 16:33 GMT
#74
Make the framer a Bestower(Miller). Bestowers are always fun and many things can be coded if you have one.
MOTM | Stim.tv | TL Mafia | Fantasy Fighting! | SNSD
iGrok
Profile Blog Joined October 2010
United States5142 Posts
November 25 2012 16:48 GMT
#75
And instead of a 1shot checkbox, why not an int field so we can have two or three shot powers?
MOTM | Stim.tv | TL Mafia | Fantasy Fighting! | SNSD
gonzaw
Profile Joined December 2011
Uruguay4911 Posts
November 25 2012 20:56 GMT
#76
What's a bestower?

Oh yeah, I guess you could add a 2 or 3 shot power.
But in normal games that doesn't really happen so I'll leave it out for now.
I mean....in a normal game it doesn't make sense to have a 2-shot cop for instance, or a 13-shot framer.
2-shot vig I guess could happen....but still it'd be so rare the added functionality would be wasted in this 1st iteration.
gonzaw
Profile Joined December 2011
Uruguay4911 Posts
November 25 2012 22:49 GMT
#77
Other questions so we finish the requirements:

Would you guys mind if in this system we set a standard for setups?
What I mean is, for instance set a standard for action resolution, for notifications and that kind of stuff.

For instance, stuff like:
Scum Roleblocks come before anything else, then come town RBs, then protection/investigation, then KP
Players are always notified if they were shot or RBed, but never notified if they were protected by medic (nor are medics notified if they successfully saved someone or if they successfully protected someone).
Vigs who get Roleblocked still have their bullet to use in another day. However if they use it on someone that "blocks" their shot in any way they lose it
If there are several busdrivers in a game, there should be a standard in how the "reflections" are resolved if several "paths" of bus are created.


I may be missing some, but this stuff seems to make sense right?
Because the alternative, for instance letting hosts decide if they want players to be notified of RBs or not makes the system way more complicated than it should be (at least in this 1st iteration), and to be honest I don't see the need for hosts to be able to choose stuff like that.
Seems like an overcomplication of mafia games for a little "quirk" that either doesn't make much sense, doesn't have any effect at all in the game, or conceptually doesn't matter
That's my own opinion though, you guys are free to post your thoughts.

If we do follow this "standard" though, then we just have to set some things straight (like the "busdriver paths" thing which can get pretty complicated :/ ) and I think things are ready to go

If you are a host, what info would you like from the system?
Would you like to be able to get a player/role list at any time in the game?
Would you like to get a link to QTs at any time in case you forget? Would you like to get the final votecount for D1 even if you are on N3? Would you like to get the list of night actions and results for previous night cycles?
Or do you think some of these are pointless maybe?
Mattchew
Profile Blog Joined December 2010
United States5684 Posts
November 26 2012 03:04 GMT
#78
gonzaw, how do you type so much, how are we sure that you are not a bot?
There is always tomorrow nshs.seal.
marvellosity
Profile Joined January 2011
United Kingdom36161 Posts
November 26 2012 03:18 GMT
#79
On November 26 2012 07:49 gonzaw wrote:
Other questions so we finish the requirements:

Would you guys mind if in this system we set a standard for setups?
What I mean is, for instance set a standard for action resolution, for notifications and that kind of stuff.

For instance, stuff like:
Scum Roleblocks come before anything else, then come town RBs, then protection/investigation, then KP
Players are always notified if they were shot or RBed, but never notified if they were protected by medic (nor are medics notified if they successfully saved someone or if they successfully protected someone).
Vigs who get Roleblocked still have their bullet to use in another day. However if they use it on someone that "blocks" their shot in any way they lose it
If there are several busdrivers in a game, there should be a standard in how the "reflections" are resolved if several "paths" of bus are created.



in the games i've hosted i've changed some of these things around depending on the setup. there's no absolute standard
[15:15] <Palmar> and yes marv, you're a total hottie
gonzaw
Profile Joined December 2011
Uruguay4911 Posts
November 26 2012 04:41 GMT
#80
On November 26 2012 12:04 Mattchew wrote:
gonzaw, how do you type so much, how are we sure that you are not a bot?


What are you talking about? I am not bot because I like buying Nike Shoes at www.nike4lifeyo.com.bubba for extreme low prices of $3 up to $4 a piece! You can't miss this great opportunity!

------- && %% Opportunities for everybody!!! %% && -----__--__

That's right! Even for yoU!

Buy Nike shoes and your feet will feel the difference
Buy it now! You won't.......yeah I'm no bot, what are you talking about Matt? You crazy dude.

On November 26 2012 12:18 marvellosity wrote:
Show nested quote +
On November 26 2012 07:49 gonzaw wrote:
Other questions so we finish the requirements:

Would you guys mind if in this system we set a standard for setups?
What I mean is, for instance set a standard for action resolution, for notifications and that kind of stuff.

For instance, stuff like:
Scum Roleblocks come before anything else, then come town RBs, then protection/investigation, then KP
Players are always notified if they were shot or RBed, but never notified if they were protected by medic (nor are medics notified if they successfully saved someone or if they successfully protected someone).
Vigs who get Roleblocked still have their bullet to use in another day. However if they use it on someone that "blocks" their shot in any way they lose it
If there are several busdrivers in a game, there should be a standard in how the "reflections" are resolved if several "paths" of bus are created.



in the games i've hosted i've changed some of these things around depending on the setup. there's no absolute standard


I take it that's mostly to do because you had the freedom to do that in the first place so you decided to experiment a bit. Also take into account I'm talking about Normal/Newbie games only.

If there was an absolute standard, would you feel restricted?
Would you feel your setup lacks something or could not be balanced for some reason?
Or would you feel it could not be rebalanced in another way without destroying your idea of the setup?

What reasons made you choose those "abnormal" features for the setup in the first place? Something important for the setup or not?

I think a standard won't hurt anybody (or any setup), and it will:
-Make this system easier to implement and hell even easier to use by the hosts
-Make each Normal/Newbie mafia game more connected to each other. For instance to compare plays from one game to the other as long as those have similar setups (but don't change the "hidden abnormal stuff" like being notified about RBs, etc).

Again, I know there is no absolute standard today. What I want to know is if you guys would oppose one, even if it means this system may get super complicated, both for me/developer team and for hosts and for players

For instance a host would need to choose 10000s more options before creating a game, like "Are people notified they are RBed?" and "Do vigs get their bullet back or do they waste it when RBed?" and everything else you may imagine is not part of the "absolute standard".
And for instance, I'd have to spend 100000s more hours designing the system to take all that stuff into account >_>
Prev 1 2 3 4 5 6 7 Next All
Please log in or register to reply.
Live Events Refresh
Next event in 10h 29m
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
RuFF_SC2 118
Vindicta 41
StarCraft: Brood War
Artosis 953
Dota 2
monkeys_forever293
NeuroSwarm44
League of Legends
Dendi2797
JimRising 1017
Counter-Strike
fl0m1637
Super Smash Bros
hungrybox660
Heroes of the Storm
Khaldor195
Other Games
summit1g16893
shahzam404
ViBE186
Maynarde164
Livibee97
Organizations
Other Games
gamesdonequick4862
BasetradeTV30
StarCraft 2
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
sctven
[ Show 18 non-featured ]
StarCraft 2
• Berry_CruncH303
• Sammyuel 36
• davetesta33
• gosughost_ 25
• Migwel
• AfreecaTV YouTube
• sooper7s
• intothetv
• Kozan
• IndyKCrew
• LaughNgamezSOOP
StarCraft: Brood War
• blackmanpl 70
• STPLYoutube
• ZZZeroYoutube
• BSLYoutube
Dota 2
• masondota21707
League of Legends
• Doublelift5944
Other Games
• Scarra2606
Upcoming Events
Wardi Open
10h 29m
Replay Cast
1d 9h
WardiTV European League
1d 15h
PiGosaur Monday
1d 23h
uThermal 2v2 Circuit
2 days
Replay Cast
2 days
The PondCast
3 days
Replay Cast
3 days
Epic.LAN
4 days
CranKy Ducklings
5 days
[ Show More ]
Epic.LAN
5 days
BSL20 Non-Korean Champi…
5 days
Bonyth vs Sziky
Dewalt vs Hawk
Hawk vs QiaoGege
Sziky vs Dewalt
Mihu vs Bonyth
Zhanhun vs QiaoGege
QiaoGege vs Fengzi
Sparkling Tuna Cup
6 days
Online Event
6 days
BSL20 Non-Korean Champi…
6 days
Bonyth vs Zhanhun
Dewalt vs Mihu
Hawk vs Sziky
Sziky vs QiaoGege
Mihu vs Hawk
Zhanhun vs Dewalt
Fengzi vs Bonyth
Liquipedia Results

Completed

2025 ACS Season 2: Qualifier
RSL Revival: Season 1
NC Random Cup

Ongoing

JPL Season 2
BSL 2v2 Season 3
Copa Latinoamericana 4
Jiahua Invitational
BSL20 Non-Korean Championship
Championship of Russia 2025
Murky Cup #2
BLAST.tv Austin Major 2025
ESL Impact League Season 7
IEM Dallas 2025
PGL Astana 2025
Asian Champions League '25
BLAST Rivals Spring 2025
MESA Nomadic Masters

Upcoming

CSL Xiamen Invitational
CSL Xiamen Invitational: ShowMatche
2025 ACS Season 2
CSLPRO Last Chance 2025
CSLPRO Chat StarLAN 3
BSL Season 21
K-Championship
RSL Revival: Season 2
SEL Season 2 Championship
uThermal 2v2 Main Event
FEL Cracov 2025
Esports World Cup 2025
Underdog Cup #2
StarSeries Fall 2025
FISSURE Playground #2
BLAST Open Fall 2025
BLAST Open Fall Qual
Esports World Cup 2025
BLAST Bounty Fall 2025
BLAST Bounty Fall Qual
IEM Cologne 2025
FISSURE Playground #1
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2025 TLnet. All Rights Reserved.