|
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]](http://i.imgur.com/OC8Og.png)
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]](http://i.imgur.com/QZU8a.png)
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.
|
Wtf did you just do everything? O_o
|
Lol no. That's just a mockup GUI. It has 0 functionality
|
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?
|
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 
|
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".
|
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.
|
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).
|
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.
|
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; }"
|
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)?
|
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).
|
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 protectedIn 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)
|
Make the framer a Bestower(Miller). Bestowers are always fun and many things can be coded if you have one.
|
And instead of a 1shot checkbox, why not an int field so we can have two or three shot powers?
|
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.
|
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?
|
gonzaw, how do you type so much, how are we sure that you are not a bot?
|
United Kingdom36156 Posts
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
|
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 >_>
|
|
|
|