|
Okay I'm lazy so I'll copy what I posted in the Active Games thread:
On November 17 2012 15:47 gonzaw wrote:I don't know if this is the correct place to put this but.... Is anybody interested in a completely automated mafia system compatible with each forum it's used on? For instance, a system where threads are created automatically, day/night posts are done automatically, night actions are resolved automatically, role PMs are sent automatically, etc (but fully configurable by an admin or even the host of the game)? Because in OMGUS me and some guys (well....1 other guy >_> ) want to try and develop such system, and to do so we'd need some help. I don't guarantee that we'll finish it soon or even at all since it's a lot of stuff and we are just 2 dudes and we don't really have much experience/knowledge (although we do know quite a bit of stuff); but hey with help we could make it a reality I guess, and I'm quite excited about it. If it's okay for me to put a link I'll edit this post and put it later. EDIT: It could have any feature you want to be honest (we are still in the process of figuring out what it can have  ) For instance the Game Queuing can be fully automated so Foolishness and Co don't have to waste so much time doing it. In you guys's case it could automate this whole "balance crew" thing GMarshall and others have going where they regulate setups as well (although this would be, for this moment, only useful to TL Mafia and maybe not other forums). If you can think of it and we have the time+work force we can do it. If you are an expert in software engineering (I'm still in my 3rd year so I have some ways to go  ) then your help, at least as a consultant would be appreciated EDIT: Also, yeah I didn't know if this was the correct place to put this so feel free to change it to a relevant topic
Here's the link to that post, there are some discussion after it as well: http://www.teamliquid.net/forum/viewmessage.php?topic_id=174347¤tpage=127#2524
Also I'll post my newest post from there in here next:
OMGUS discussion: http://www.omgus.net/forum/viewforum.php?f=51
|
For those interested, I'm planning on creating the system in 4 different layers "independent" of each other. Each layer could theoretically change while other layers remain the same. Of course the "upper" layers would remain the same, the lowers ones not so much. Each layer uses services from the below layer and provides services for the layer above.
Here's the top-down approach:
Layer 4: This is the system. It has games, players, roles, setups, votes, night actions, etc. It doesn't know anything about how the mafia game is played, it just represents an abstract mafia game. If we wanted we could even use it to play IRC mafia maybe, since Layer 4 wouldn't care how the mafia game is played as long as it has all the features the system uses. It only works via abstraction, with abstract "games" and "roles" and "setups". Services used: It uses the "presentation" services from Layer 3. For instance sending notifications, present the creation of a new cycle, etc. It also receives new data from said layer, like night actions, input from the host, etc.
Layer 3: This component defines how the mafia game is played. It defines if it's played via forum, or defines if it's played via chat, or if it's played using external tools (maybe QTs for instance). It defines how to use the forum's "general" features to run the game (for instance if the game is played in 1 or more threads, etc) Services provided: It gives Layer 4 a way to present all its info and a way to get new info. Services used: It uses the "general" functionalities of a forum, like creating threads, creating posts, checking for signups in a thread, receiving a new vote from the voting thread, sending and receiving PMs, etc
Layer 2: This component defines the direct access to the forum and its features. It doesn't dwell on "general" features anymore (creating thread, etc) but with more specific features that can be upgraded if the forum would wish. For instance, this layer would use a bot to count votes and signups, as well as create threads and posts. If the forum had the feature, it could maybe just instantly give Layer 3 a new vote as soon as the "##Vote: X" post is made in the voting thread, etc. Services provided: It gives Layer 3 a "general" functionality of the forum (or whatever setting the mafia game is being played on). Services used: It has direct access to the forum and uses whatever the forum allows him to
Layer 1: This is the forum itself as it's implemented in the servers of the site. I take it as "part of the system" since you could technically operate with it to change the system (like adding new features, etc). Services provided: Provides access to the features of the forum it allows him to use
If you are confused and want more info read here: http://www.omgus.net/forum/viewtopic.php?f=51&t=412&p=14502#p14502 (you don't even need to sign up, read it and you can discuss it here).
Like I stated before, I want to make this system as portable as possible. Hell that could even include IRC chat mafia games for instance. Technically it's possible. You'd have 1 system to handle forum mafia games, and a 2nd system to handle IRC mafia games; and using this layer-based design you wouldn't need to change much to do so. Again I also wanted to take into account that forums can do whatever the fuck they want to run mafia games (I think I mentioned the differences between OMGUS and TL Mafia quite a few times ).
I want to know what you guys think of this design system. If you don't think it's a good idea, I'd like to know why, how you think it could improve/change, and what alternatives you guys propose for the "portability" issue of the system (also I hope this "layer" approach is easy to understand lol. I tried not to use advanced lingo and concepts and the like)
PS: Am I allowed to create a new thread here? To ask opinions, give updates, and basically just post my walls of text somewhere where they won't fuck up with the active games stuff >_>
|
Technically, if the forum is a bitch and doesn't even let you use bots (for instance), Layer 2 can be implemented to use other means to get the info.
I mean, all the work of creating threads and the like could technically still be done manually if the forum doesn't let you. The thing is that the Layer 3 would call "createPost()", but Layer 2, instead of creating the thread himself, could maybe send an email to the host with the exact post he has to make. In which case the host would just post it himself.
Layer 2 could use a web app (like prphlz described) for stuff as well. In TL's case that may be creating the games/setups/roles. The host would use a web app or an external tool to give the info to the system, which would be received via Layer 2, and then given back to Layer 3 as nothing happened.
Basically, you can customize the way you play mafia any way you want and you'd only need to make slight changes to the system (i.e you'd only change the lowest layers, while the upper layers, the important ones, remain unchanged).
EDIT: What I mean is that maybe, for an "easier" adaptation (sp?), the system can be accommodated so that mafia is played exactly like it is now (a host makes the thread and posts, sends/receives PMs, etc); only that the logic behind everything would be automated in the system (and all the info would be kept there).
The only thing is that the host would need a way to give that info to the system. We can figure that out later though
|
I don't know what you mean about "if the forum doesnt' let you [create threads/posts]". I'm pretty sure ZBot did this and all of my game related posts in Resistance! Mafia was done with a bot made to handle the real-time parts of that game. I don't see how it's a problem that the post has to be made by a user, from a usability standpoint there could be an option to use your own user if you provided username/password or just a standard user (TLMafiaBot? or whatever) if you don't wish to do this, or as you suggest to have the post PMd/emailed. A lot of different options is probably the best idea since they're not really that different and some people want one thing while other people want another.
I also asked R1CH very briefly on IRC about using bots on the forum and he pretty much said that as long as you're not being down right malicious it's no big deal.
|
Automatic votecount: yes please (although it does mean that people who forget to bold their vote, use abbreviated names, etc. won't have their vote counted). The rest: not so much. Hosts should be involved in the game. If it is automated, then hosts lose an incentive to keep up to date with the game, which means that if specific situations crop up in the game (rule breaking, bad sportsmanship or what-have-you) that require a host's intervention, they may not even read it until it is too late. Sure, the host *should* be reading the thread, but taking the pressure off by removing quite a few of the reasons to read the thread, you are making it easier for this to not happen.
|
I don't host a lot but I think that Acrofales is really on to something here. A fully automatic system is probably undesirable and also extremely ambitious. I think that some tools for automatizing tedious host business without removing the host entirely would be cool, I made a prototype of how I see something like that could work here. I don't know if you're really hooked on this "fully automatic everything" thing over at OMGUS, I just think that starting small and then gradually making it more complicated is a better and probably more useful idea. Maybe after all the basics have been implemented, you could do a bot that hosts a popular and very stable setup like C9++ and then go on from there. Setting out to make a bot that can do anything that GreYMisT comes up with is kind of... I mean GreYMisT is a pretty imaginative guy. I also don't like the idea that the end users and the developers are the same people, I don't think that hosts want to have to contact a developer to get their game hosted but maybe that's just me or maybe I'm misunderstanding something here.
|
United Kingdom36160 Posts
On November 20 2012 21:16 Acrofales wrote: Automatic votecount: yes please (although it does mean that people who forget to bold their vote, use abbreviated names, etc. won't have their vote counted). The rest: not so much. Hosts should be involved in the game. If it is automated, then hosts lose an incentive to keep up to date with the game, which means that if specific situations crop up in the game (rule breaking, bad sportsmanship or what-have-you) that require a host's intervention, they may not even read it until it is too late. Sure, the host *should* be reading the thread, but taking the pressure off by removing quite a few of the reasons to read the thread, you are making it easier for this to not happen.
fairly sure you can program that in to count that kinda thing (or not). I think I agree with you though.
personally i detest votecounting as a host. I think prplhz's thingy already works for that though?
|
Yeah, if that's what you guys want then TL could have that.
However I also want it to be possible to have a fully automated system to use for small normal setups for instance (at least in OMGUS).
Like I said I want it to be flexible. If hosts in TL want to still have control then they can have it. But I also want that if another host wants the system to handle everything then it should happen as well.
I think it should be up to the host. If the host chooses the automatic system and fails to "read" the thread and make a manual override if necessary it's his fault, but I think the system should be able to handle most of the stuff (for instance the system itself can check if people edit their posts and warn them/modkill them automatically). The host would still have control and should be able to manually determine stuff, like a "modkill(player)" button if a player is breaking the rules, or a "don't make a new day/night post without my authorization" feature where the system asks the host for verification before creating a new day/night post. When creating a game the host can determine how much control he wants to have I think.
Also in most cases the host should still be reading the thread since he must input the flavor for each day/night post (there should be an option for a "default" flavor though, maybe so the day/night post is still posted even if the host is away and can't write the flavor for that post). What I want is to make it possible the host doesn't have to start doing math and count votes and analyzing night actions and their order before making a night/day post and maybe get stressed/do a lot of work and maybe even get it wrong if he misscounted.
The thing about using a bot or using a separate web site or whatever is part of the lower layers so it's not a concern to me, it should be easily configurable. In fact there may even be a lot of interfaces at once. A host for one game may decide to use an automatic bot to do stuff, but for another game decide to use an external tool to run the game.
I want it to be flexible, and if you guys want the "simple" system then sure we can implement that here, as long as it's possible to implement a more complex one in an easy manner.
Also I don't know what's so wrong about an automated system with the host being the "moderator" of it. As long as everything works fine then there's no problem IMO, and the host will have more time to: -Analyze the game -Moderate it -Answer questions/Interact with Observers in the QT (for instance) -Etc
One of the problems I find is indeed the "transition" to use that system. In TL's case hosts may need to use some external tools (to create games, to get info from the game, etc) which may discourage some hosts from doing it
|
Yes, just having a single bot to "count the votes" may be enough for you guys.
But remember I also want the system to keep a "database" of games and the stuff that goes on. Theoretically I want the system to handle the "TL Mafia Central Library" and the "TL Mafia Hosting Queue System" and that stuff. Ideally, in the future after the whole system is finished and works perfect, I want it to be integrated with all the aspects of playing mafia in the forum, not just "count votes" when the host is lazy.
Yeah it may be a little ambitious though. Of course I won't start doing that right off the bat, but I want to design the system so it's possible to do so in the future with as little effort as possible.
For instance if I start creating the system with this layer design, then I can create very simple interfaces to use here or in OMGUS, and then expand on it whenever I feel like it and would be pretty easy to do. I want to create the infrastructure that allows me to create a very "basic" system (like you guys want), but also allows me to expand on it more easily later.
|
On November 20 2012 22:56 prplhz wrote: I don't think that hosts want to have to contact a developer to get their game hosted but maybe that's just me or maybe I'm misunderstanding something here.
I don't think that should happen either, which is why I made a huge discussion in OMGUS about it. We figured out a "simple" way to do it....which is basically "If the host wants to host crazy shit let him handle it while the system handles the easy stuff". There'd be no need to contact the developer in that case (also trust me I don't want anybody complaining to me and wanting me to do stuff later >_> )
|
On November 20 2012 23:02 marvellosity wrote:Show nested quote +On November 20 2012 21:16 Acrofales wrote: Automatic votecount: yes please (although it does mean that people who forget to bold their vote, use abbreviated names, etc. won't have their vote counted). The rest: not so much. Hosts should be involved in the game. If it is automated, then hosts lose an incentive to keep up to date with the game, which means that if specific situations crop up in the game (rule breaking, bad sportsmanship or what-have-you) that require a host's intervention, they may not even read it until it is too late. Sure, the host *should* be reading the thread, but taking the pressure off by removing quite a few of the reasons to read the thread, you are making it easier for this to not happen. fairly sure you can program that in to count that kinda thing (or not). I think I agree with you though. personally i detest votecounting as a host. I think prplhz's thingy already works for that though? Counting not-bolded, incorrect use of ##, forgetting to unvote and other common mistakes is pretty easy. Spelling errors and abbreviations in usernames is far harder, though. You could try using the levenshtein distance and match the vote to the username with the lowest distance. That should work somewhat okay, but could go wrong, particularly on abbreviations.
|
Again guys remember I don't want to use this specifically on TL.
Coag owns OMGUS, so basically we can do whatever shit we want in there. If we want we can create a 100% mafia-based web site there with lots of features and stuff. Like epicmafia but of forum-based mafia.
Theoretically I want the system to be able to handle that as well in the future, even if you guys want the "simple" one that just counts votes and stuff.
|
On November 20 2012 23:41 Acrofales wrote:Show nested quote +On November 20 2012 23:02 marvellosity wrote:On November 20 2012 21:16 Acrofales wrote: Automatic votecount: yes please (although it does mean that people who forget to bold their vote, use abbreviated names, etc. won't have their vote counted). The rest: not so much. Hosts should be involved in the game. If it is automated, then hosts lose an incentive to keep up to date with the game, which means that if specific situations crop up in the game (rule breaking, bad sportsmanship or what-have-you) that require a host's intervention, they may not even read it until it is too late. Sure, the host *should* be reading the thread, but taking the pressure off by removing quite a few of the reasons to read the thread, you are making it easier for this to not happen. fairly sure you can program that in to count that kinda thing (or not). I think I agree with you though. personally i detest votecounting as a host. I think prplhz's thingy already works for that though? Counting not-bolded, incorrect use of ##, forgetting to unvote and other common mistakes is pretty easy. Spelling errors and abbreviations in usernames is far harder, though. You could try using the levenshtein distance and match the vote to the username with the lowest distance. That should work somewhat okay, but could go wrong, particularly on abbreviations.
Just keep a database of "nicknames" each user has and it'd be fine.
I mean, If I put "##Vote Acro" it should count. A database in the system would know that "Acro" is equivalent to "Acrofales" and count the vote.
Same if I put "##Vote: VE" instead of "##Vote: VisceraEyes" for instance.
In the worst case if the vote can't be counted, a notification is sent to the player to tell him to vote again (a PM for instance) It wouldn't make sense to just ignore it but never notify anybody about it.
That's what I use in the voting count BBCode in OMGUS and it works. Just keep a "if the username is (list of nicknames) then vote for (user)" instruction and it should be fine.
EDIT: That database can be updated at any time ideally as well. If you notice some people start calling marv "love pudding <3" then just add a "marvellosity > love pudding" entry in it.
|
On November 20 2012 20:49 prplhz wrote: I don't know what you mean about "if the forum doesnt' let you [create threads/posts]".....
Some other forum may not allow people to control bots to do that. In those cases there should be a way to bypass it...which is just re-implementing the necessary layer.
|
It seems like a lot of work, for a non-significant amount of gain imo. But I could be wrong! And if your having fun and learning while doing it, go for it.
|
The thingie I made uses something akin to Levenshtein. It gets "kita" instead of "kitaman27" but I don't know if it would get "GM" for "GreYMisT", doubt it though. I thought about making it check unbolded votes but suddenly you run into problems where people are just quoting someone of whatever, I like that the voting process has to be at least somewhat correct.
I like the idea of having a bot host simple setups like C9++, or at least do all the boring parts.
I really like the database idea I thought a lot about that. A problem is that centralizing things externally is, well I don't like it. Suddenly the guy who is hosting goes underground in Brazil or some weird shit and all the work is wasted so it would have to be very open (like, it should be possible for anybody to get a database dump at any point), but other than that I think it's an awesome idea. There is the TL Mafia Library right now but if I just want themed games that Acrofales was scum in then it's not very useful for that. Even simply stuff like figuring out how much town wins and how much mafia wins is a hassle right now.
|
On November 20 2012 23:57 Mementoss wrote: It seems like a lot of work, for a non-significant amount of gain imo. But I could be wrong! And if your having fun and learning while doing it, go for it.
I don't plan on busting my ass on it with a tight schedule or anything though. I do have uni and plan on getting a job next year.
As long as it's done at one point in my mafia-life I'll be happy lol If I get too excited and have lots of free time I may get it done quickly too lol
At worst if it's not done the documentation will still be there for future use (by me again hopefully).
|
On November 20 2012 23:49 gonzaw wrote:Show nested quote +On November 20 2012 20:49 prplhz wrote: I don't know what you mean about "if the forum doesnt' let you [create threads/posts]"..... Some other forum may not allow people to control bots to do that. In those cases there should be a way to bypass it...which is just re-implementing the necessary layer. Yea I'm still just thinking about teamliquid. Bear with me
|
On November 21 2012 00:02 prplhz wrote: The thingie I made uses something akin to Levenshtein. It gets "kita" instead of "kitaman27" but I don't know if it would get "GM" for "GreYMisT", doubt it though. I thought about making it check unbolded votes but suddenly you run into problems where people are just quoting someone of whatever, I like that the voting process has to be at least somewhat
Who would make a quote in the voting thread?
If you mean you want to parse posts in the normal thread for votes....then it's easy I guess? If you see an open "[ quote]" tag then don't count any vote until you see a closing "[ /quote]" tag. Same for spoilers if you want. (yeah in html it's not a "quote" tag but a <div> with specific attributes and shit, but it's the same) Since there's not much custom BBCode in this site other tags won't be a problem to handle I think
I like the idea of having a bot host simple setups like C9++, or at least do all the boring parts.
I really like the database idea I thought a lot about that. A problem is that centralizing things externally is, well I don't like it. Suddenly the guy who is hosting goes underground in Brazil or some weird shit and all the work is wasted so it would have to be very open (like, it should be possible for anybody to get a database dump at any point), but other than that I think it's an awesome idea. There is the TL Mafia Library right now but if I just want themed games that Acrofales was scum in then it's not very useful for that. Even simply stuff like figuring out how much town wins and how much mafia wins is a hassle right now.
Yeah that's why I wanted authorization from TL to do everything in this forum :/ Centralizing things in another external place while playing mafia here doesn't seem that good.
Also yeah, the system shouldn't just be able to run games but archive them and let you get any info you want from it. Since that's not so important I can do it later after a "prototype" is made.
I was also planning on doing automatic testing of Setups to see if they are balanced. Like running "simulations" where random events happen in that setup and see how much times town and scum win. ...yeah it was too complicated though so I dropped it >_>
EDIT: "GM" can get confused between Greymist and GMarshall. Either don't allow it, or just allow it in games where only 1 of them is playing
|
Well, one thing you could do quite easily is receive PMs and simply list all the night actions for the host. For the common roles you could even set up a number of simple rules that the host can choose from to automatically process them. The idea would be to PM night actions in a prespecified format (once again, taking into account that people often don't follow syntax and in the worst case you'd have to automate a reply saying "I don't understand, please use the following syntax: blablabla").
Then, you simply have a rule-based system that checks for things like whether people were roleblocked, whether medics protected shots, etc. etc. Depending on the specific flavour of rules the host uses (such as sometimes mafia shots can be blocked, sometimes they can't, sometimes roleblocking will prevent one action, sometimes all actions, etc. etc.) the system could generate the night actions in a nice coloured PM to the host, and the host could tell the system to automatically generate and send the PMs. Hell, it could do the day - and nightposts automatically too, but flavour will suck 
If you want it for omgus mafia and control the site, I would recommend doing drop-down lists for night actions, that way you don't have to worry about parsing people's weirdly phrased PMs.
A database of nicknames obviously works, but requires someone to keep it updated. I mentioned Levenshtein distance, because it is automatic.
|
The one thing you have to worry about is the availability of the bot: in the omgus situation it is clear, because you can run it serverside, so any time the website is available, the bot is too. However, on TL it seems very unlikely that Nazgul will allow you to run a mafia bot serverside. That means you have to do everything clientside and where will you run the bot (you will also have to coordinate with TL how often it refreshes, but with the large amount of traffic the site gets anyway, the mafia bot should be negligible).
|
On November 21 2012 00:27 Acrofales wrote: Well, one thing you could do quite easily is receive PMs and simply list all the night actions for the host. For the common roles you could even set up a number of simple rules that the host can choose from to automatically process them. The idea would be to PM night actions in a prespecified format (once again, taking into account that people often don't follow syntax and in the worst case you'd have to automate a reply saying "I don't understand, please use the following syntax: blablabla").
Yeah that's possible. Although it'd need to be a system feature I think (to list every night action that was made, etc). The lower layers would just PM the host that info (or email him, etc).
Then, you simply have a rule-based system that checks for things like whether people were roleblocked, whether medics protected shots, etc. etc. Depending on the specific flavour of rules the host uses (such as sometimes mafia shots can be blocked, sometimes they can't, sometimes roleblocking will prevent one action, sometimes all actions, etc. etc.) the system could generate the night actions in a nice coloured PM to the host, and the host could tell the system to automatically generate and send the PMs. Hell, it could do the day - and nightposts automatically too, but flavour will suck 
This too. I was counting on the host seeing the result of night actions, seeing who died/what happened, and then creating the flavor for it. After that he sends the flavor to the system and the system creates the day/night post automatically, or the host could just post it himself (if he wants to do everything manually).
If you want it for omgus mafia and control the site, I would recommend doing drop-down lists for night actions, that way you don't have to worry about parsing people's weirdly phrased PMs.
Yes this would be a nice feature to have. Have a "Send your Action!" section, where you choose from a drop-down list of all the possible abilities you have, and decide who you target and the like.
A database of nicknames obviously works, but requires someone to keep it updated. I mentioned Levenshtein distance, because it is automatic.
Yeah the thing is that some nicknames don't work like that. Back in OMGUS there's a guy called brnsdntsdtrwds (or something) but we just call him no-vowels. That Leventhing distance won't be able to pick that up I think.
It also may confuse some other usernames, like VE with Ver for instance (although I don't really know how that distance thing works).
|
Also...ehmm....yeah I don't really know about that TL stuff about the bot and calling the TL administrators to regulate it and stuff (don't even know how TL bots work).
...I was hoping maybe one of you guys would do that for me after the system is done >_>
|
Ooh I love C#, let me know if you want any help actually doing grunt work.
As for "how to handle extra weird theme games" the big deal seems to be coming up with a way of creating/assigning theme-specific actions, right? (both PM'd night actions and in-thread day actions qualify here)
|
Okay, well, I'm not entirely sure what you want from this thread. You seem to have a good idea of what you want to do and how to do it. If you want help with design, programming or anything else, just say the word.
I, like prplhz, strongly recommend you set this up in an iterative manner. Make lots of small projects that are useful individually and can easily be changed if actual use turns out to be different from expected use.
As for the use on TL, yor best bet is to PM GMarshal about it. I don't actually know how far the red hammers' authorty goes, but if he's not able to clear the use of a bot, he'll at least know who can. For server side use I think only the admins will be able to say much. Maybe ask R1CH? Fairly certain the answer will be "hell no", though.
For starters, writing a bot that refreshes a vote thread every 10 minutes or so and updates a votecount if there are changes sounds like something good. If Zona or prp already have that, then take a look at the code and see if you can use that.
|
On November 21 2012 03:15 Acrofales wrote: Okay, well, I'm not entirely sure what you want from this thread. You seem to have a good idea of what you want to do and how to do it. If you want help with design, programming or anything else, just say the word.
I, like prplhz, strongly recommend you set this up in an iterative manner. Make lots of small projects that are useful individually and can easily be changed if actual use turns out to be different from expected use.
As for the use on TL, yor best bet is to PM GMarshal about it. I don't actually know how far the red hammers' authorty goes, but if he's not able to clear the use of a bot, he'll at least know who can. For server side use I think only the admins will be able to say much. Maybe ask R1CH? Fairly certain the answer will be "hell no", though.
For starters, writing a bot that refreshes a vote thread every 10 minutes or so and updates a votecount if there are changes sounds like something good. If Zona or prp already have that, then take a look at the code and see if you can use that.
It's not all nice and dandy. I have the "idea" of what to do and an idea of how to do it....but there are still some problems that keep arising and I may need some help (specially in the design phase)
For instance, right now I just figured a new design problem. For example, what can happen when the night phase ends and night actions should be resolved?
According how my "automated" system would run in OMGUS, the system would automatically resolve night actions, and automatically create the Day X thread/post However, by what you guys want in TL, the system would most likely give the host a list of night actions, let the host confirm/change those as he sees fit, and then the system tells the host how the actions were resolved and gives him a template of a post; then the host creates the new Day post by himself using this template (and he adds the flavor he wants).
These are 2 completely different ways of using the same feature of the system, which is "night ends and night actions must be resolved/day post should be posted".
What I thought was that when a host creates a game, he should decide how much control he wants on said game (assuming the forum allows it, for instance with that bot thing) So one host may decide to let the system handle everything in one game, while another host may decide to control everything himself in another game. Since those 2 scenarios basically correspond to OMGUS and TL (by what was discussed recently here), it should be able to happen.
That's my design problem, how to let one use case (e.g creating a game) determine how the system behaves in other different use cases/circumstances (e.g night phase is over).
Not to mention there may be "new" use cases that can be added just because the host wants more control.
(programming lingo and shit: )One way I can think of is having different controllers do different stuff. For instance one controller decides what to do when a night phase is over (the deadline timeout interrupts him for instance). However, we can create a new controller that decides what to do in that situation in a different way. Each game can have one of these controllers (i.e it's not a controller defined by the system), and these controllers are created when a game is created. If the host wants control, Controller 1 is created and used. If the host wants less control, Controller 2 is created and used (of course both of them implement an interface, that way other components can use its methods without knowing which specific controller is being used).
Does this sound like a viable solution? Because to be honest it seems too simple to be true lol.
|
Well I don't know for sure but I would think that it's a long shot to get R1CH or any of the other developers to do anything for you server side, it's also pretty much unnecessary since there's already a simple web interface for it (the website). You can pretty much just send some HTTP requests to the website to create posts and all the other things.
|
If you guys could tell me what you'd 100% want here in TL (at least initially) then it'd be a good start (since I'm analyzing the use cases back in OMGUS).
For instance, I take it all of you would agree on letting a bot do some stuff. But for instance would you guys want that bot creating the threads and day posts? Would you want that bot checking signups? How much control do you guys want the host to have over these things? Do you want the host to do them manually, let the bot do them but only with authorization from the host in every step, or just let the bot do everything? Which aspects of the game would you want this to be applied? (creating day posts, counting votes, resolving night actions, etc). Or at least which aspects of the game do you think it could be applied to (so I cover all possibilities in my system)?
|
On November 21 2012 07:41 gonzaw wrote:Show nested quote +On November 21 2012 03:15 Acrofales wrote: Okay, well, I'm not entirely sure what you want from this thread. You seem to have a good idea of what you want to do and how to do it. If you want help with design, programming or anything else, just say the word.
I, like prplhz, strongly recommend you set this up in an iterative manner. Make lots of small projects that are useful individually and can easily be changed if actual use turns out to be different from expected use.
As for the use on TL, yor best bet is to PM GMarshal about it. I don't actually know how far the red hammers' authorty goes, but if he's not able to clear the use of a bot, he'll at least know who can. For server side use I think only the admins will be able to say much. Maybe ask R1CH? Fairly certain the answer will be "hell no", though.
For starters, writing a bot that refreshes a vote thread every 10 minutes or so and updates a votecount if there are changes sounds like something good. If Zona or prp already have that, then take a look at the code and see if you can use that. It's not all nice and dandy. I have the "idea" of what to do and an idea of how to do it....but there are still some problems that keep arising and I may need some help (specially in the design phase) For instance, right now I just figured a new design problem. For example, what can happen when the night phase ends and night actions should be resolved? According how my "automated" system would run in OMGUS, the system would automatically resolve night actions, and automatically create the Day X thread/post However, by what you guys want in TL, the system would most likely give the host a list of night actions, let the host confirm/change those as he sees fit, and then the system tells the host how the actions were resolved and gives him a template of a post; then the host creates the new Day post by himself using this template (and he adds the flavor he wants). These are 2 completely different ways of using the same feature of the system, which is "night ends and night actions must be resolved/day post should be posted". What I thought was that when a host creates a game, he should decide how much control he wants on said game (assuming the forum allows it, for instance with that bot thing) So one host may decide to let the system handle everything in one game, while another host may decide to control everything himself in another game. Since those 2 scenarios basically correspond to OMGUS and TL (by what was discussed recently here), it should be able to happen. That's my design problem, how to let one use case (e.g creating a game) determine how the system behaves in other different use cases/circumstances (e.g night phase is over). Not to mention there may be "new" use cases that can be added just because the host wants more control. (programming lingo and shit: )One way I can think of is having different controllers do different stuff. For instance one controller decides what to do when a night phase is over (the deadline timeout interrupts him for instance). However, we can create a new controller that decides what to do in that situation in a different way. Each game can have one of these controllers (i.e it's not a controller defined by the system), and these controllers are created when a game is created. If the host wants control, Controller 1 is created and used. If the host wants less control, Controller 2 is created and used (of course both of them implement an interface, that way other components can use its methods without knowing which specific controller is being used). Does this sound like a viable solution? Because to be honest it seems too simple to be true lol. I was going to suggest a simple model-view-controller design principle before I even got to your "programming lingo". However you are looking at it far too complexly imho. Start with something simple, but keep in mind where you want to end up. Pick the view you think will be simplest and build that. If people aren't satisfied, find out what they want and build that. Iterative programming is very important for a project that you plan to have used by a large community.
Personally, I'd start with the simple votecount bot as a prototype for your design. Your idea for a fully configurable controller factory sounds like serious future work.
Just a word of caution from one programmer to another. In the end it's your project and you should build it in the way you are most comfortable with.
|
On November 21 2012 07:58 gonzaw wrote: If you guys could tell me what you'd 100% want here in TL (at least initially) then it'd be a good start (since I'm analyzing the use cases back in OMGUS).
For instance, I take it all of you would agree on letting a bot do some stuff. But for instance would you guys want that bot creating the threads and day posts? Would you want that bot checking signups? How much control do you guys want the host to have over these things? Do you want the host to do them manually, let the bot do them but only with authorization from the host in every step, or just let the bot do everything? Which aspects of the game would you want this to be applied? (creating day posts, counting votes, resolving night actions, etc). Or at least which aspects of the game do you think it could be applied to (so I cover all possibilities in my system)? I have not hosted yet, just cohosted, but votecounting is a pain in the ass. Signups is another rote task that could be left to a bot in most instances. I wouldn't be comfortable having fully automated dayposts, but some help resolving night actions could be useful. However each host runs with slightly different rules and something flexible enough to capture each host's preferences may be rather hard.
|
The thing is that I know that if I start with a simple "prototype votecount bot" I'll end up scratching most parts of that design to design the "bigger" aspects of the system.
If I go "iterative" in this way, I'll be "wasting" work on stuff by implementing it and then immediately scrapping it. I wanted to create the "general" system first, then make the iterative programming for additional features later.
I was also thinking about doing a top-down approach. Start with the system (even if it's simple) and end with the bot implementation. That way I could do it parallel with OMGUS so we don't use a bot there (for instance).
I don't know, I'll think about it.
|
Well, that's part of the learning process. Things like the html parser are going to be useful in any case, as is the interface with the forum (such as posting a message, or opening a thread or pm).
An important question to answer before you begin is what other people did wrong. Why is there currently no votecount bot despite hosts expressing an interest in having one? What went wrong? Maybe nothing and it's simply an availability issue, but maybe some important functionality was missing. I
f you don't get enough response here you can try PMing some of the more experienced hosts, such as gmarshal, greymist or ace and ask them some of te questions you are putting here.
Also, what do you, personally want to get out of this project?
I know that I am giving you more questions than I am answering
|
United States22154 Posts
You guys are aware that posting my name three times in a thread summons me, right?
You guys summoned me here! But now I vanish!
|
On November 21 2012 08:52 Acrofales wrote: Well, that's part of the learning process. Things like the html parser are going to be useful in any case, as is the interface with the forum (such as posting a message, or opening a thread or pm).
But in my case it'd be like doing a different project. Having just a bot that does vote-counts implies the bot himself has a "mini-system" of votes he keeps around and determines who gets lynched at what deadline and the like. That's extra work that will 100% not be used in the "final release" since it's the system itself that "counts" the votes and determines who gets lynched, and it does so in a completely different way most likely.
I'm willing to take it step by step, with the hardest stuff first (the system) and the "easiest" part (pasing html, count votes, etc) later. Yes it's possible that if I "fail" in the "hard" part I don't even reach the "easy" part.
Also...if this project had more people on it it's possible to just do both at the same time (since like I said the layers are in a way independent of each other).....but yeah we are just like 1-3 guys >_> One guy makes the bot and voting count stuff to "test" it like you said, while the rest of us make the system and use that bot when it's finished.
Also, what do you, personally want to get out of this project?
A super awesome system I (and you guys) can use to play mafia here and in OMGUS, and also have some entertainment in making a project like this and see if it can be done. I.e it's not a boring job project you want to finish as soon as possible since it's boring as hell. The process of this project is also fun.
Also maybe some credit >_> <_< If I had the means maybe make it commercial >_> ....sadly I don't
|
you can make anything commercial.. all you gotta do is slap some titties and ass on it.
|
kitaman27
United States9244 Posts
On November 21 2012 09:07 gonzaw wrote:Also maybe some credit >_> <_< If I had the means maybe make it commercial >_> ....sadly I don't
At the very least, you have something to slap on your resume if things work out. Basically every software engineering interview I've ever been a part of has involved someone asking me to describe a project that I have worked on outside of the required schoolwork (and I'd never have a good answer because I'm lazy :p)
|
On November 21 2012 11:33 Coagulation wrote: you can make anything commercial.. all you gotta do is slap some titties and ass on it. I think Coag's on to something here. Let's name it Miss Sexy Mafia Bot. While helping you host, it also whispers sweet nothings into your ear and provides titillating entertainment.
Sorry for not being too too active yet in helping with this. I'm waiting for things to calm down a bit at school (I have been busy lately) before I start really getting into this. So, I won't be too huge a help for a couple of weeks.
One thing though, but couldn't you just break everything up into different sub-systems? I don't have too much experience in software design, but this seems like it would be relatively easy, and it would be easy to use/not use certain parts of the system if so desired.
I guess I'm just a little confused by what you mean when you say you want to make the "System" first. It seems like you could just make a Vote Count system that can either work on its own or send information to a Night Post system which again could work with just the Vote Count System, or could be controlled by some kind of Game Handler, etc. So that way you start out with basic functions, and then incorporate them into the larger system, with each tier automating more and more of the game, but the possibility of easily having each sub-section of the system able to be used in isolation or without other parts of the system. It seems like you don't want to go this route though, so I'm curious as to what you mean when you want to make the "system" first and then fill in the functions.
Just curious as to how you'd like to exactly design and build this thing :p
|
Getting a bot to resolve night actions would (as far as I can tell) be extremely hard. maybe you can for normal games, but even then different hosts have different variations and interactions of roles.
|
On November 21 2012 11:58 kitaman27 wrote:Show nested quote +On November 21 2012 09:07 gonzaw wrote:Also maybe some credit >_> <_< If I had the means maybe make it commercial >_> ....sadly I don't At the very least, you have something to slap on your resume if things work out. Basically every software engineering interview I've ever been a part of has involved someone asking me to describe a project that I have worked on outside of the required schoolwork (and I'd never have a good answer because I'm lazy :p)
That'd be pretty cool, I didn't think of that!
I have another question for you guys: How would you guys define a "Normal" game?
We are discussing how to create setups, and we arrived at the "there are different types of setups: Normal, Newbie, Themed, etc" part.
If you don't mind, I'll post what I "think" a Normal setup would need these conditions:
- There is a list of "Normal" roles and the setup must only contain those roles
- There should only be a Town and a Mafia faction, and possibly independent 3rd party roles, like SK or Jester, or Survivor (we use jesters in OMGUS even in "normal" games so I want to add that)
- The win condition of town roles should be exactly the same, as should be the win condition of scum roles. Meaning there won't be a town role that has a slight different win condition than the "normal" town win-con (like that Wheatly role I got in Aperture 2)
- It should have either Mayority or Plurality Lynch (as well as a Lynch system lol), it should have 48 day cycles and 24 night cycles, it may or may not have PMs.
Am I missing something?
Also, the same would apply to "Newbie" games to be honest. Although I just take it that these games are the same as Normal games except that: -There can't be any 3rd party roles in it -There can be coaches that coach the newbies
I think that's it as well...?
|
On November 21 2012 14:22 Mr. Wiggles wrote:Show nested quote +On November 21 2012 11:33 Coagulation wrote: you can make anything commercial.. all you gotta do is slap some titties and ass on it. I think Coag's on to something here. Let's name it Miss Sexy Mafia Bot. While helping you host, it also whispers sweet nothings into your ear and provides titillating entertainment. Sorry for not being too too active yet in helping with this. I'm waiting for things to calm down a bit at school (I have been busy lately) before I start really getting into this. So, I won't be too huge a help for a couple of weeks. One thing though, but couldn't you just break everything up into different sub-systems? I don't have too much experience in software design, but this seems like it would be relatively easy, and it would be easy to use/not use certain parts of the system if so desired. I guess I'm just a little confused by what you mean when you say you want to make the "System" first. It seems like you could just make a Vote Count system that can either work on its own or send information to a Night Post system which again could work with just the Vote Count System, or could be controlled by some kind of Game Handler, etc. So that way you start out with basic functions, and then incorporate them into the larger system, with each tier automating more and more of the game, but the possibility of easily having each sub-section of the system able to be used in isolation or without other parts of the system. It seems like you don't want to go this route though, so I'm curious as to what you mean when you want to make the "system" first and then fill in the functions. Just curious as to how you'd like to exactly design and build this thing :p
Check the OP about how I plan on "designing" this system.
The "System" I speak of would be Layer 4. Technically every layer is part of the system, but the "system" (as I call it) is Layer 4 to me. It's the one with the info, the one that works abstractly, and the one that doesn't care how the voting count is done and doesn't care how the role PMs are handled, and doesn't care if the bot or the host creates the Day/night posts or not.
All this "bot" talk corresponds to lower layers. Specifically lower layers designed towards TL Mafia. In this "TL Mafia lower layer"; we could implement a bot that checks the voting thread regularly and gives the upper layer a new vote when he sees one (kind of how ZBot checked the voting thread every 5 minutes to update votes).
This isn't a "sub-system" per se, it's just the implementation of checking votes that is done in TL. You could say it's a "sub--system" of Layer 2 if you wanted though.
What you are basically saying, is that the "Voting Count" subsystem would interact with the "Night Action" subsystem which could interact with the "Create new posts" subsystem. You say that the implementation of the "Voting Count" subsystem could be changed, but the other "subsystems" would work the same, right?
The thing is that in this layer design, these "sub-systems" don't work with each other, they work with the upper layer. The "Voting Count" subsystem gets votes and gives them to Layer 3. The "Create posts" subsystem gets info from Layer 3 and creates posts.
If Layer 3 remains the same....then the "subsystems" can work independently. Layer 3 doesn't care how the "Voting Count" subsystem gives him votes as long as he does. In this regard, the implementation of "Voting Count" can change, but since Layer 3 doesn't change, then the system itself doesn't change. Same, if the "Creating new posts" subsystem changes, since Layer 3 doesn't change the system doesn't change.
Meh fuck this explanation seemed way better in my mind >_>
|
On November 21 2012 15:17 GreYMisT wrote: Getting a bot to resolve night actions would (as far as I can tell) be extremely hard. maybe you can for normal games, but even then different hosts have different variations and interactions of roles.
Yeah we basically have everything about game creation decided except roles and their abilities (and how they interact with other roles)
EDIT: I plan on automating your crazy setups one day Greymist! Although at this point of the project (beginning of it) I'll sadly have to ignore the "weird" setup mechanics (like DragonBall Z power and Hidden QT Markets) + Show Spoiler +Wasn't DBZ mafia iGrok's? Damn I don't remember
You'll still have to control it yourself, but we planned on making it easier to control (via a GUI for instance) rather than a crude google docs spreadsheet
|
On November 21 2012 15:17 GreYMisT wrote: Getting a bot to resolve night actions would (as far as I can tell) be extremely hard. maybe you can for normal games, but even then different hosts have different variations and interactions of roles. This is what I'm talking about. In the end hosts have different ideas and even if you made them all possible within your system, just learning how that system works might be too much hassle for hosts to bother to deal with just to host their game. In the end your system might end up being more work to hosts (at least in the short run) than just doing it the old fashioned way and you should consider that. Ýou don't know if hosts will compromise their setups to accomodate your system and even if you make your system flexible enough you don't know if it will be too complicated for hosts to even bother with.
It's also cool that some people who actually host start talking inhere instead of just Acrofales and me telling you that an iterative development cycle would suit this project a lot more than a sequential one. One of the biggest boons is that you'll actually get something out that people can use and then end users can provide feedback a lot more easily.
|
when you say "Technically, if the forum is a bitch and doesn't even let you use bots (for instance)" I had to quit reading Can you stop coming off so abrasively...? We have tried bots before. Do you know who Zona is? People get confused by them.
|
|
On November 22 2012 00:10 Bill Murray wrote: when you say "Technically, if the forum is a bitch and doesn't even let you use bots (for instance)" I had to quit reading Can you stop coming off so abrasively...? We have tried bots before. Do you know who Zona is? People get confused by them.
I remember Purgatory mafia, and you had to vote via PM and send a message with a "Purgatory:EX: Player" format or something like that.
I get that's pretty confusing, but I plan on having a database of the current players in the current games so the player doesn't have to format anything.
Also of course voting done in voting thread, even with "hidden votes" (the vote count will only show votes from voting thread, while the "real" vote count shows the real votes).
Anyways meh, I may do what you said prphlz. Make the "simple" system that just uses the bot to do vote counts and resolve night actions. That can be used both here and in OMGUS I think so it would likely work. Also it should run only one game at a time (in this 1st iteration), if not things get messy (for instance if a player plays 2 games at the same time, the bot would not be able to know if a "##Kill: X" PM from that player belongs to the 1st or 2nd game....and again I don't want to make it complicated by forcing the PMs to have a certain format).
|
On November 21 2012 16:51 gonzaw wrote:Show nested quote +On November 21 2012 15:17 GreYMisT wrote: Getting a bot to resolve night actions would (as far as I can tell) be extremely hard. maybe you can for normal games, but even then different hosts have different variations and interactions of roles. Yeah we basically have everything about game creation decided except roles and their abilities (and how they interact with other roles) EDIT: I plan on automating your crazy setups one day Greymist! Although at this point of the project (beginning of it) I'll sadly have to ignore the "weird" setup mechanics (like DragonBall Z power and Hidden QT Markets) + Show Spoiler +Wasn't DBZ mafia iGrok's? Damn I don't remember You'll still have to control it yourself, but we planned on making it easier to control (via a GUI for instance) rather than a crude google docs spreadsheet
DBZ was iGrok, and my spreadsheet for CT is actually pretty sick, don't hate.
But if you could make a bot to help with things I would surely welcome it and try it out
|
Okay, how about this for this "basic 1st bot-based-system"?:
Before start of the game:
- Host PMs bot with info about the game, and the game is created
- When Host creates Signup thread, he gives the URL to the bot so the bot can count the signups and PM the host back when the signups are closed.
- When the game starts, the host PMs the Bot for it to start
- (For TL) The bot also PMs him the list of filters of each player
Game start - Day:
- Bot checks the voting thread regularly. When he sees a new vote he updates the vote count
- Players can PM the bot at any time (with a certain message) and the bot will automatically post the votecount in the thread or give it to them via PM
- Alternatively, someone can post "##Votecount" in the thread, and the bot sees it and creates the votecount. That way scum don't just spam PMs to the bot to spam the thread with votecounts or something >_>
- The host should be able to PM the bot and get a votecount for himself as well
- When the deadline hits the bot sends the votecount and guys who get modkilled/replaced to the host so the host can create the new night post
Game start - Night:
- Players PM the bot for night actions with the correspondent "##(Action): (Target)" format (and nothing else, I take it the PM title can be anything)
- If the action was correct, the bot PMs the dude back with confirmation. If it's not correct he PMs him back saying it was incorrect
- The host can PM the bot at any time to see all the night actions that have been done
- Once the night deadline is over, the bot PMs the host all the night actions that have been made and the results so the host can make the new day post
- Alternatively, the bot just PMs the host all night actions but doesn't do anything. Then the host PMs the bot back with what should happen. For instance "marv gets shot but survives" and "VE dies" and "Keirathi is RBed" and other "normal game" options. This is in case different hosts may want to do different stuff depending on night actions.
Game End:
- Once a cycle ends with a faction winning, the bot PMs that info to the host (with who won, etc) so the host can make the end-game post
- The bot should also PM the host the player list with all roles, a list of all night actions and results from each night, the vote count of each day with who got lynched, and links to QTs (so the host can post that info himself)
Host Control (at any point in the game):
- The host can PM the bot to modkill a player at any point in the game
- The host can PM the bot to replace a player with another one at any point in the game
- Edit: Alternatively, whenever someone fails to vote by the deadline, the bot gives the host the option to either modkill him or replace him, and if he replaces him he should give the username of the new user that does.
- The host can PM the bot to end the game (for some reason)
- The host can PM the bot to end the game in a draw instantly (again for some reason)
- The host can PM the bot to get any info from the game he wants. For instance links to QTs, name of the game/link to the game (in case he forgets lol), player list, role list, list of previous night actions, list of previous vote counts, list of previous results, etc.
Would this sound good for you guys? What changes would you guys make to it as either players or as hosts? At the very least I want the bot to substitute for the "spreadsheet" the hosts have to keep track of roles/actions/stuff, and for the voting count, which I think would be handled above. Also in this 1st iteration it would only work for normal and newbie games, just to keep it "simple". C9++ games won't do since it needs more design to it, and can be more "complicated" at the time of creating a new game.
Also since it'd be a prototype the bot would just handle 1 game at a time, for instance to not get PMs confused and make it so night action PMs need a specific format (like that one from purgatory mafia).
If you guys want this then yeah I'd need some help with programming the bot since I know nothing about bots lol.
|
Also, just for this 1st test, what are the major differences in roles in Normal/Newbie games I should take into account?
I just noticed this new Newbie game doesn't notify people if they are RBed. That's good because if I hadn't noticed I may have overseen that and never given the option to take it into account.
Anything else? Cops always return "town" or "scum" right? Or do some normal games here use the cop to get a role as well? Or do you guys use a different role for that? GFs always return "town"? Or do they choose how they return (if the cop can check roles)? Framers can or can not frame their scumbuddies so they come back "town"? SKs are always "either 1-shot bulletproof at night or 1-shot investigation immune" every game? Or not? Anything else I'm missing? Oh yeah, Millers being self-aware or not, but I don't know if that falls under "Normal/Newbie" games And Masons being in pairs and confirmed town to each other, or just 1 Mason who can add 1 guy at his circle at night, etc.
|
kitaman27
United States9244 Posts
On November 24 2012 05:27 gonzaw wrote: Also, just for this 1st test, what are the major differences in roles in Normal/Newbie games I should take into account?
I just noticed this new Newbie game doesn't notify people if they are RBed. That's good because if I hadn't noticed I may have overseen that and never given the option to take it into account.
Anything else? Cops always return "town" or "scum" right? Or do some normal games here use the cop to get a role as well? Or do you guys use a different role for that? GFs always return "town"? Or do they choose how they return (if the cop can check roles)? Framers can or can not frame their scumbuddies so they come back "town"? SKs are always "either 1-shot bulletproof at night or 1-shot investigation immune" every game? Or not? Anything else I'm missing? Oh yeah, Millers being self-aware or not, but I don't know if that falls under "Normal/Newbie" games And Masons being in pairs and confirmed town to each other, or just 1 Mason who can add 1 guy at his circle at night, etc.
The only different in my opinion is the restriction that the players involve have to meet the games played requirement. Hosts are allowed to modify the roles however they would like.
Also, in your previous post you mentioned the vote update. If I recall correctly, Zona's bot used the OP of the voting thread to keep a running vote count. I'm not sure if that makes things easier for you, but its something to consider.
|
For votecounts make it a time thing, not a "everytime there is a new vote". I like this in combination with the ##Votecount thing
|
On November 24 2012 09:15 kitaman27 wrote:Show nested quote +On November 24 2012 05:27 gonzaw wrote: Also, just for this 1st test, what are the major differences in roles in Normal/Newbie games I should take into account?
I just noticed this new Newbie game doesn't notify people if they are RBed. That's good because if I hadn't noticed I may have overseen that and never given the option to take it into account.
Anything else? Cops always return "town" or "scum" right? Or do some normal games here use the cop to get a role as well? Or do you guys use a different role for that? GFs always return "town"? Or do they choose how they return (if the cop can check roles)? Framers can or can not frame their scumbuddies so they come back "town"? SKs are always "either 1-shot bulletproof at night or 1-shot investigation immune" every game? Or not? Anything else I'm missing? Oh yeah, Millers being self-aware or not, but I don't know if that falls under "Normal/Newbie" games And Masons being in pairs and confirmed town to each other, or just 1 Mason who can add 1 guy at his circle at night, etc. The only different in my opinion is the restriction that the players involve have to meet the games played requirement. Hosts are allowed to modify the roles however they would like. Also, in your previous post you mentioned the vote update. If I recall correctly, Zona's bot used the OP of the voting thread to keep a running vote count. I'm not sure if that makes things easier for you, but its something to consider.
Oh I didn't mean differences between Normal games and Newbie games, I just meant taking those as a whole what differences are between different games (either Normal or Newbie). For instance in one Newbie game people may get notified of being RBed, but in another one they won't. That kind of difference.
Yeah but I want to know the "reach" of host changing the roles. In a normal game a host won't make a Cop a "Firebreathing detective who each night can breathe fire on people, if he targets scum the scum catches on fire and if he's RBer he has to post in the thread "I'm on fire!" but if he's GF he has to post "Give me water!" " or something like that since it'd make it a themed game instead.
Just to keep things simple but still being able to store roles and shit in the system I want the simplest "differences" in roles from Normal and newbie games so at least we can start testing it with those.
For instance, what roles would you consider Normal/Newbie and which ones would not appear on one? We can start with that.
On November 24 2012 09:43 GreYMisT wrote: For votecounts make it a time thing, not a "everytime there is a new vote". I like this in combination with the ##Votecount thing
Yeah I don't think there's even a way of doing that with a bot so that's what will happen anyways lol  It should be as constant as possible I think, maybe 1-3 minutes? Because near the deadline things can get chaotic and people may need quick votecounts and I don't want them to be outdated since it can fuck the game up. I could make it so it does it every 10 seconds or something 10 minutes before the deadline or something like that I guess.
Unless I misunderstood. You mean the internal votes should be updated every certain time or you mean that the votecount should be posted in the thread with a minimum of a certain time to avoid spamming?
|
On November 24 2012 10:03 gonzaw wrote:Show nested quote +On November 24 2012 09:15 kitaman27 wrote:On November 24 2012 05:27 gonzaw wrote: Also, just for this 1st test, what are the major differences in roles in Normal/Newbie games I should take into account?
I just noticed this new Newbie game doesn't notify people if they are RBed. That's good because if I hadn't noticed I may have overseen that and never given the option to take it into account.
Anything else? Cops always return "town" or "scum" right? Or do some normal games here use the cop to get a role as well? Or do you guys use a different role for that? GFs always return "town"? Or do they choose how they return (if the cop can check roles)? Framers can or can not frame their scumbuddies so they come back "town"? SKs are always "either 1-shot bulletproof at night or 1-shot investigation immune" every game? Or not? Anything else I'm missing? Oh yeah, Millers being self-aware or not, but I don't know if that falls under "Normal/Newbie" games And Masons being in pairs and confirmed town to each other, or just 1 Mason who can add 1 guy at his circle at night, etc. The only different in my opinion is the restriction that the players involve have to meet the games played requirement. Hosts are allowed to modify the roles however they would like. Also, in your previous post you mentioned the vote update. If I recall correctly, Zona's bot used the OP of the voting thread to keep a running vote count. I'm not sure if that makes things easier for you, but its something to consider. Oh I didn't mean differences between Normal games and Newbie games, I just meant taking those as a whole what differences are between different games (either Normal or Newbie). For instance in one Newbie game people may get notified of being RBed, but in another one they won't. That kind of difference. Yeah but I want to know the "reach" of host changing the roles. In a normal game a host won't make a Cop a "Firebreathing detective who each night can breathe fire on people, if he targets scum the scum catches on fire and if he's RBer he has to post in the thread "I'm on fire!" but if he's GF he has to post "Give me water!" " or something like that since it'd make it a themed game instead. Just to keep things simple but still being able to store roles and shit in the system I want the simplest "differences" in roles from Normal and newbie games so at least we can start testing it with those. For instance, what roles would you consider Normal/Newbie and which ones would not appear on one? We can start with that. Show nested quote +On November 24 2012 09:43 GreYMisT wrote: For votecounts make it a time thing, not a "everytime there is a new vote". I like this in combination with the ##Votecount thing Yeah I don't think there's even a way of doing that with a bot so that's what will happen anyways lol  It should be as constant as possible I think, maybe 1-3 minutes? Because near the deadline things can get chaotic and people may need quick votecounts and I don't want them to be outdated since it can fuck the game up. I could make it so it does it every 10 seconds or something 10 minutes before the deadline or something like that I guess. Unless I misunderstood. You mean the internal votes should be updated every certain time or you mean that the votecount should be posted in the thread with a minimum of a certain time to avoid spamming?
I mean have the bot post every 2 ish hours. When you get close to the deadline people will be spamming ##Votecount in the thread anyway.
|
I guess I can make it so that it can post a votecount only every 2 hours as long as there's no new vote. If there's a new vote the time is "reset", so when there's a quick succession of votes people can check the different vote counts each time.
|
On November 24 2012 11:16 gonzaw wrote: I guess I can make it so that it can post a votecount only every 2 hours as long as there's no new vote. If there's a new vote the time is "reset", so when there's a quick succession of votes people can check the different vote counts each time.
ah ok, sounds interesting
|
The way I would do it is:
Vote count every 2 hours automatically. If a ##Votecount is asked for, reset the timer to 2 hours before it does another one automatically. ##Votecount has a 30 minute cooldown itself. At the end of the day, an automatic vote count is posted at 2 hours remaining, then 1 hour remaining, then 30 minutes, then 15, then 5, then 3. A manual ##Votecount can be called for during that last 2 hours period at any time, with only a 1 minute cooldown.
|
Oh I didn't mean that it'd post the vote count automatically every 2 hours, I meant that 2 hours would be that "cooldown" time after someone posts "##Votecount" in the thread  I don't want a votecount to be posted in the thread if it's not necessary (for instance if nobody unvotes or votes) Could make it that if there's a new vote it can post the votecount automatically only with a 2 hour cooldown effect.
So if people are constantly voting and unvoting, then yes it'd post the votecount automatically every 2 hours. If someone posts ##Votecount it'll have a cooldown effect of 2 hours as well (for a new votecount when someone posts ##Votecount) as long as there are no new votes (where the cooldown effect is over, and someone can post ##Votecount again or it'll be done automatically after 2 hours). If there are no new votes at all, I don't think it'd be necessary to post a useless votecount in the thread, it'd only just clog up the thread, specially at those times where nobody posts for a few hours and the bot would just be double or triple-posting :/
Oh that "near-deadline" cooldown seems better. Kind of make it exponential (anti-exponential?) until it reaches deadline (where it obviously posts the final votecount, says the day is over and posts who gets lynched).
|
Right, it wouldn't make a lot of sense to post it again if nothing had changed. I guess what I meant was:
if (((currentTime - lastVoteCount) == 2 hours) && newVote){ postVoteCount(); }
|
Yeah exactly that.
Anyways, still need some help with the whole "Normal/Newbie roles used differently in different games" thing to actually determine how to create the initial setups.
Alternative we can all determine a standard of Normal/Newbie roles so every host should use them Mostly because "normal" roles don't really need that much flexibility to enhance a mafia game. For instance it won't kill a game if Framers are never allowed to frame a scumbuddy of theirs, even if a host for some reason wants to do it.
EDIT: Another example would be that players that are RBed should always be notified of being RBed, and players that were shot (but survived) should always be notified about it. If one host decides to not notify RBed people....it's not that much of a deal, and won't "change the game", specially if the game is Normal/Newbie and the game mechanics/setup speculation are not heavy parts of the game (in contrast with themed games).
|
I just think there should be a few options that should be available to be checked. Maybe options for a specific role, or maybe options for the game as a whole.
Gimme a bit to throw together a quick example of what I'm imagining.
|
Is any of you like a super awesome expert Computer Science mayor that knows everything about everything in terms of development and programming?
Cause I'd like to have some discussions about certain things about the development of this system later on. It's not urgent so doesn't matter that much (if you don't have time). If you are interested though then contact me.
|
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 Kingdom36160 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 >_>
|
United Kingdom36160 Posts
On November 26 2012 13:41 gonzaw wrote:Show nested quote +On November 26 2012 12:18 marvellosity wrote: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? blablabla
I've only hosted newbie games (so, normal). I differed the rules on roleblocks and notifications because it was necessary to do so for balance, not because I was just playing around.
|
In my games I have always resolved actions (even the complicated ones) in the following way:
Roleblockers occur first Busdrivers/redirection Everything else.
All actions within each tier occur at the same time
|
On November 27 2012 01:08 marvellosity wrote:Show nested quote +On November 26 2012 13:41 gonzaw wrote:On November 26 2012 12:18 marvellosity wrote: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? blablabla I've only hosted newbie games (so, normal). I differed the rules on roleblocks and notifications because it was necessary to do so for balance, not because I was just playing around.
Why was it necessary to balance? Why couldn't it be rebalanced in another way? (for instance change other abilities from roles, change those roles themselves, etc).
On November 27 2012 01:12 GreYMisT wrote: In my games I have always resolved actions (even the complicated ones) in the following way:
Roleblockers occur first Busdrivers/redirection Everything else.
All actions within each tier occur at the same time
How would you tackle RBers RBing each other? For instance the usual "Scum RBer RBs JK who RBs him back" situation like happened in Mario Mafia? What about a Town RBer RBing a JK who RBed the Scum RBer and stuff like that?
|
United Kingdom36160 Posts
On November 27 2012 01:34 gonzaw wrote:Show nested quote +On November 27 2012 01:08 marvellosity wrote:On November 26 2012 13:41 gonzaw wrote:On November 26 2012 12:18 marvellosity wrote: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? blablabla I've only hosted newbie games (so, normal). I differed the rules on roleblocks and notifications because it was necessary to do so for balance, not because I was just playing around. Why was it necessary to balance? Why couldn't it be rebalanced in another way? (for instance change other abilities from roles, change those roles themselves, etc).
Because then I'd end up with a setup that I didn't want. If I wanted other roles in my game I'd have used other roles in the first place.
|
Well yeah, I'm asking how it's a setup you didn't want.
Normal/Newbie setups are "simple" in a sense. The roles and mechanics take a step back so the game is more analytic and the roles just "enhance" that experience (compared to Themed games at least). I can imagine a certain combination of special roles in a themed game require you to not abide to the "absolute standard" and changes those rules (about RBing and notification, etc). But I don't really see that happening in normal/newbie games. Like what specific thing about the setup made you go "Hmm, I think people should not be notified for being RBed, it'd make more sense/balance the setup/create a setup I want"?
Again, is it because you "wanted" something and used it just because you had the freedom to do so, or because the setup itself needed it in one way? Like if it didn't have RB notifications it'd be unbalanced towards town because of X reason or something like that?
Also, would you host a normal/newbie game even if it had this "absolute standard"? That's the main question I'm asking. If hosts won't abide to the standard then there's no point in the system (since nobody will use it). Also if everybody opposes it I'll make the effort of trying to keep those "customizations" of setups in mind, even if things get more complicated (for both me and the hosts)
|
United Kingdom36160 Posts
It was a 9 player game and in a game with so few players you have to be delicate with the balance.
So roleblock notifications are not given basically to avoid too much information being given in such a small setup.
|
So you wouldn't like if I forced every setup to notify roleblocks then? Would notifying roleblocks be the only thing you'd mind having control of as a host, or are there other aspects of an "absolute standard" that you'd like the host to have control about? The other one was Medics getting notifications of saves or something like that, which some setups had. Would you mind if I just forced each setup to NOT notify saves of any kind? Any other stuff I may be missing?
Also, any other thoughts on the other stuff? Like that "A whole bunch of RBers RB each other" situation, and the "How do bus drivers work when there are a lot of them in a game?" one, and also the "How much info does a host want" one.
|
United Kingdom36160 Posts
On November 27 2012 08:06 gonzaw wrote: So you wouldn't like if I forced every setup to notify roleblocks then? Would notifying roleblocks be the only thing you'd mind having control of as a host, or are there other aspects of an "absolute standard" that you'd like the host to have control about? The other one was Medics getting notifications of saves or something like that, which some setups had. Would you mind if I just forced each setup to NOT notify saves of any kind? Any other stuff I may be missing?
Also, any other thoughts on the other stuff? Like that "A whole bunch of RBers RB each other" situation, and the "How do bus drivers work when there are a lot of them in a game?" one, and also the "How much info does a host want" one.
I've also played around with how the whole roleblockers interact things work.
Plus roleblock notifications.
I guess what I'm saying is, "standard" is a difficult thing to agree on. I'd like to say my setups are 100% standard but like I said in one case I notify roleblocks and the other I don't, simply for balance.
I guess what I'm saying is that I don't think you can code in a standard because even within standard, the rules vary.
On a slightly more abstract note, I'd be kinda annoyed as a host at being told that this certain way is how it's going to be.
Obviously I understand that what I'm saying makes your job much more complicated, but in my opinion I think you need variance in what constitutes "standard" when you come to things like notifications or resolutions. Like, even between games I've changed the rules on how roleblocks work, for balance purposes. maybe one is right, and the other is wrong, but I think the host needs to be able to choose which he prefers. As a host, I would be loathe to use a system where I didn't have the choice.
In the end, a system for hosting comes down to making the life of the HOST easier. One of the things about being a host is that you have that control, and I'd hate to give that up. I would 100% do everything manually before I had to choose one option that I didn't like in an automated system.
|
Well...fuck lol
Okay then, what are the "tiny" bits that you change from setup to setup? From what you told me they are: -Notifying people if they are RBed or not -Notifying medics if they made a successful save or not (and some other "medic-related" notifications perhaps?) -How RBers interact (although I'd like some more specific stuff, like rules or something)
Something else?
Notifications is easy to implement, and it's just a checkbox for the host to determine when creating the setup "Do you want people notified of being RBed? Y/N" and that kind of stuff. The RB stuff is more complicated, both to implement, to "understand" (like what specific rules the host wants), and for the host to check when creating a game.
Also don't know about other stuff. If it's about specific roles, like a SK choosing to be night/bullet-immune or just being a regular SK or being always bulletproof, etc, then that can be changed easily, and can be easily changed in next iterations of the system. Is there anything else? (at least from your POV as host)
Also remember that in this 1st prototype I doubt I'll add any of this stuff. At least just to test a couple of games. If you don't want to don't host one, but hopefully at least 1 host would like to use it to test it :/
Again, ideally when the final product is released it'll take EVERYTHING into account and be perfect and we'll live happily ever after and all that jazz.
|
On November 27 2012 01:34 gonzaw wrote:Show nested quote +On November 27 2012 01:08 marvellosity wrote:On November 26 2012 13:41 gonzaw wrote:On November 26 2012 12:18 marvellosity wrote: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? blablabla I've only hosted newbie games (so, normal). I differed the rules on roleblocks and notifications because it was necessary to do so for balance, not because I was just playing around. Why was it necessary to balance? Why couldn't it be rebalanced in another way? (for instance change other abilities from roles, change those roles themselves, etc). Show nested quote +On November 27 2012 01:12 GreYMisT wrote: In my games I have always resolved actions (even the complicated ones) in the following way:
Roleblockers occur first Busdrivers/redirection Everything else.
All actions within each tier occur at the same time
How would you tackle RBers RBing each other? For instance the usual "Scum RBer RBs JK who RBs him back" situation like happened in Mario Mafia? What about a Town RBer RBing a JK who RBed the Scum RBer and stuff like that?
They roleblock each other because their actions occur at the same time. Nothing happens but they are notified of each becoming roleblocked.
I imagine a real life roleblock to be something akin to a Net gun, and I imagine what would happen if 2 people fired a net gun at each other at the exact same time.
|
On November 27 2012 09:18 GreYMisT wrote:Show nested quote +On November 27 2012 01:34 gonzaw wrote:On November 27 2012 01:08 marvellosity wrote:On November 26 2012 13:41 gonzaw wrote:On November 26 2012 12:18 marvellosity wrote: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? blablabla I've only hosted newbie games (so, normal). I differed the rules on roleblocks and notifications because it was necessary to do so for balance, not because I was just playing around. Why was it necessary to balance? Why couldn't it be rebalanced in another way? (for instance change other abilities from roles, change those roles themselves, etc). On November 27 2012 01:12 GreYMisT wrote: In my games I have always resolved actions (even the complicated ones) in the following way:
Roleblockers occur first Busdrivers/redirection Everything else.
All actions within each tier occur at the same time
How would you tackle RBers RBing each other? For instance the usual "Scum RBer RBs JK who RBs him back" situation like happened in Mario Mafia? What about a Town RBer RBing a JK who RBed the Scum RBer and stuff like that? They roleblock each other because their actions occur at the same time. Nothing happens but they are notified of each becoming roleblocked. I imagine a real life roleblock to be something akin to a Net gun, and I imagine what would happen if 2 people fired a net gun at each other at the exact same time. The nets would hit in mid-air and then the gunners would both scamper away to freedom?
|
Okay, another question:
How do you guys handle scum's KP? Is 1 specific scum entitled with sending scum's KP, or do you send it as a faction?
I say this because several mechanics revolve around this. For instance, watchers/trackers, which would only be useful (basically) if a single guy sent the kill (so he visits someone) instead of the whole faction (where he wouldn't see anyone visiting). Also town RBers/jailers. If the faction itself sends KP, then no scum can be RBed to prevent scum KP from going through, which again makes town RBers useless basically.
So how do you guys handle it? I see 3 options: -Always let 1 scum send the kill, and every track/watch/RB action done on him affects results/if the shot goes through -Let scum send the KP as a faction, meaning trackers/watchers/town RBers would be basically useless (maybe except to track blues...?) -Let scum send the KP as a faction, but one guy from them is randomly chosen to deliver the kill
If you choose 1, who sends the night kill? Any scum can send the night kill or a specific role, like the Goon? In that case what happens if the Goon dies? Which scum gets his ability to send the kill? Etc, etc, etc
This ties in part with the RB question: If a single scum sends the night kill and can get RBed, and a Jailer RBs him, but the Scum RBer RBs the Jailer, does the scum KP go through or not? This applies as well if the scum RBer is the only one left alive and him and the JK RB each other (like what happened in Mario Mafia I think)
|
I think the most common way is for the scum to specify the person to carry out the NK, then in absense of them specifying, it is randomed. Like you said, one person has to carry out the kill or things like town Roleblocker are pretty useless.
Then, it doesn't matter what role carries out the kills. Some hosts don't allow scum with an active ability to carry out the kill and use their action in the same night, though, and some do.
It's just host preference stuff again 
For the RB thing: If you're handling all roleblocks simultaneously, then no, the kill would not go through. That's why I chose to give scum roleblocks priority in Mario.
|
Hey, I was thinking about something as well:
How about having a list of claims? Like claims of any type? That way the players in the game have a way to get info from the game they may have missed.
For instance, if someone claims RBed, he/someone else PMs the bot: "##New Claim From: X, Subject: Was RBed Description: None Link to post: [link to the post]"
If someone claimed Medic, it'd be: "##New Claim From: Y Subject: Claimed Medic Description: Claimed medic. Claimed he protected Z on N1 and T on N2 Link to post: [link]"
That way, a player could at any point PM the bot and get a list of all claims, either from the whole game, or for a specific cycle, etc.
Obviously this "PM the bot" thing is annoying, specially having to write "##New Claim" and the like. But if there was a better interface it'd be cool I think...
...unless you guys think it'd balance the game towards town too much since townies always forget that kind of stuff >_>
|
On November 27 2012 10:50 Keirathi wrote:I think the most common way is for the scum to specify the person to carry out the NK, then in absense of them specifying, it is randomed. Like you said, one person has to carry out the kill or things like town Roleblocker are pretty useless. Then, it doesn't matter what role carries out the kills. Some hosts don't allow scum with an active ability to carry out the kill and use their action in the same night, though, and some do. It's just host preference stuff again  For the RB thing: If you're handling all roleblocks simultaneously, then no, the kill would not go through. That's why I chose to give scum roleblocks priority in Mario.
But at least it's quantifiable. Adding an option "Is the scum that sends the night KP able to perform an active action that night? Y/N" when hosts create a game is easy (again, another checkbox), and it's not that hard to implement in the system, since it's checked when the night action (for instance a RB) arrives and nowhere else.
Yeah, that would be a possible "customization" for the host. It would obviously deactivate if that scum is the sole scum remaining, since he's forced to send the KP (and forcing him to not send the KP to RB someone for instance doesn't make sense).
That Roleblock thing, I guess it's quantifiable in a way. "Does Scum Roleblock take precedence in Action Resolution? Y/N" would be another simple option for the host to make, although it'd be harder to implement myself I think
The thing is that some things may not be that quantifiable. Dunno which though (since people haven't really been giving more examples), but I'm sure some hosts can come up with some.
For this 1st iteration, I plan on making it simple for both hosts and me, which means using this "absolute standard" and making setups more strict. However, of course it's still playable, but some "specific" setups won't be possible. Since it's just a prototype it'll only handle 1 game at a time, so if any of you want to host a game with specific mechanics the system doesn't handle and you don't want to force your setup into something to play it under the system then just host it by hand.
I'll obviously take into account all these considerations for the future, but right now it makes everything x500 more complicated and I want to keep the 1st prototype simple and effective (e.g has less bugs, less stuff to worry about, etc).
So far I'll be considering these as the "absolute standard". If you guys think it should be different (again, just for this 1st iteration) tell me: 1)Scum Roleblock takes precedence on Town Roleblockers or Jailers, but the other RBs happen simultaneously 2)Scum HAVE to send one of their own to send the kill. If they don't it'll be assumed they won't kill that night. This scum faction KP done by this scum player will function like any other KP action 3)Players will be notified if they are roleblocked. 4)Medics won't be notified of anything related to saves/protection, and nor will the protected players
I'll edit this in as I remember more >_>
|
For the future I was thinking about a "What would happen?" feature:
Basically, you know how at times you wonder "What would happen if a vig shot a hider, who hid behind someone that was bus driven with someone that was RBed, and the medic protected the vig while a mad hatter planted a bomb on the bus driver?" and stuff like that about a setup? It may be cool, after the game is done and that setup is archived for everybody to see, to implement a way for people to get a response for those kind of questions.
In-game there would be a feature perhaps, at least one that took only the knowledge of the role that's asking the question into account, and he can choose "standard" roles and see how his role would react to them (like when you get some weird role and start asking the host "What if a vig shoots me by I'm Rbed?" "What if I spoon a cop who checked the guy I forked?", etc).
Again, seems complex like fuck so it'll be done in the distant future (if it's done at all)
|
Hmm, I have a doubt about Rbers and bus drivers:
Imagine there are 4 players, Rber, Bus driver X and Y Now imagine the busdriver busses X and Y. I can easily assume that if the RBer RBs the bus driver, then his action doesn't take place right? But what happens if the RBer RBs X? Does he RB X or Y?
Mainly because how this "action resolution" thing is being talked about. If RBs happen before busdrives everytime, then X would be RBed, THEN the bus driver would bus X with Y, but X would already been RBed But it would make more sense for Y to be RBed right? If so, how would this scale for more roles and situations? For instance this situation:
1 RBer 2 Bus Drivers A and B 2 townies X and Y
A busses X and Y B busses Y and A RBer RBs X
What happens here?
There is a bus between X and Y, and Y and the bus driver A Therefore once the bus drivers made their actions, there is a bus between X and A. Anything that happens to A happens to X, and viceversa.
Let's assume we take the 2nd choice from the previous scenario: the RBer just "marks" X as RBed, waits for bus driven actions, and then RBs the specified target (in the previous case it'd be Y). Imagine something happens here as well. The RBer "marks" X, waits for bus driven actions, and then actually RBes his target......which in this case would be Bus Driver A. But if Bus Driver A is RBed, then the bus between X and Y doesn't exist, therefore the RBer doesn't bus A at all but instead RBs X as he initially planned to! If this is the case then, Bus Driver A is no longer RBed, therefore his bus between X and Y takes place, therefore the RBer busses A, therefore the bus between X and Y no longer exists, therefore X is RBed, therefore A is no longer RBed, etc etc etc
How the hell is this situation resolved? Bear in mind that it's entirely possible for a setup like this to be in the system (and in a mafia game in general, with 1 scum and 1 town bus driver).
|
I'd say stop wracking your brain over this kind of thing. In games with bus drivers, the rules are defined so this sort of thing is consistent (for instance, roleblocks always go first, bussed actions aren't transitive, etc.) Also note that you don't need 2 bus drivers for that example you gave:
A is bus driver and he busses between himself and B C roleblocks B. If the roleblock is bussed, then it creates inconsistent situations.
I really wouldn't worry about bus drivers right now, because any rules involving bus drivers (and other forms of redirectors, see SSB-64 mafia for some really weird stuff where the wrong rules would have led to infinite damage on two players) are going to be very complex to avoid inconsistent situations.
As I said on Skype: build a simple system first. Allow people to run a C9++ setup. That's more than complicated enough for an initial step. Then extend it to other normal games, where things like notifications and RB rules are not as standardized. After that is in place and people are using it, see what else people want. Eventually bus drivers might be possible, but for now I'd treat them just like games with HP, conveyor belts or "inventors": far future work.
|
Well I thought bus drivers were pretty "common" in Normal games so I wanted to leave them. Well yeah, the easiest choice is to leave them out.
As it's going now it could run a c9++ setup...unless it has some special mechanic I don't remember.
|
United Kingdom36160 Posts
On November 27 2012 10:50 Keirathi wrote:I think the most common way is for the scum to specify the person to carry out the NK, then in absense of them specifying, it is randomed. Like you said, one person has to carry out the kill or things like town Roleblocker are pretty useless. Then, it doesn't matter what role carries out the kills. Some hosts don't allow scum with an active ability to carry out the kill and use their action in the same night, though, and some do. It's just host preference stuff again  For the RB thing: If you're handling all roleblocks simultaneously, then no, the kill would not go through. That's why I chose to give scum roleblocks priority in Mario.
yeah it depends on the game. definitely it's usually carried out by a player.
but for example in GMarsh's games I think the KP is factional, as the roles present are doctor and no jailkeeper/town rber.
|
On November 28 2012 02:59 marvellosity wrote:Show nested quote +On November 27 2012 10:50 Keirathi wrote:I think the most common way is for the scum to specify the person to carry out the NK, then in absense of them specifying, it is randomed. Like you said, one person has to carry out the kill or things like town Roleblocker are pretty useless. Then, it doesn't matter what role carries out the kills. Some hosts don't allow scum with an active ability to carry out the kill and use their action in the same night, though, and some do. It's just host preference stuff again  For the RB thing: If you're handling all roleblocks simultaneously, then no, the kill would not go through. That's why I chose to give scum roleblocks priority in Mario. yeah it depends on the game. definitely it's usually carried out by a player. but for example in GMarsh's games I think the KP is factional, as the roles present are doctor and no jailkeeper/town rber. I know Ace's DFM2 had factional KP (of course, that could not be called normal by any stretch of the meaning). Also, I seem to remember a game in which roleblockers blocked only 1 ability, so a scum framer tasked with framing and shooting, but being roleblocked, would only get his frame roleblocked, while the kill would still happen. No clue whether that was in a normal or themed game, though.
Even normal games have a large variety of this kind of specifics, as we discussed on Skype. I think you can believe Marv when he says that most hosts would rather host the game by hand then have such specifics set in stone. Just take it step by step. Make the "most normal" things doable and slowly expand. Even if that means some code needs to be rewritten later, it is by far the easiest way of designing software that does something, rather than a half-finished software that would do everything if it were ever completed
|
Not sure how I missed this thread. Just read through things and I'd like to post my thoughts.
The design you have for roles isn't flexible enough. If we want to allow for themed games, we need to allow for a wide range of possible roles. I'd like to suggest a different paradigm for handing actions:
An "action" is a function that takes a list of players and returns a new list of players.
So what is a player? A player could be a "class" (or potentially a dictionary depending on the langauge we're doing this in-- I'd highly recommend using a scripting langauge for handling "layer 4") with the fields: health, target, DTreturn, actionPriority, information (which is a list), alignment, willAct (possibly)
So when multiple actions are performed at once, we create a list of players sorted by actionPriority. Then we iterate through each player in the list and call action() or whatever it's called. Here are examples for what action would do for certain roles (italics means it's getting a variable):
Medic: Get target that person in the player database, add 1 HP to the person, return the player list with that person's health increased Framer: take target's DTreturn variable and change it. Return the new list of players Detective: look at target's DTreturn variable. then take its own name, and append the results of the check into self's information. Bus Driver: look through everyone's targets, and switch relevant ones. Roleblocker: this is where things get tricky. There are two ways I can think of at the moment to solve this:
- Give everyone a willAct variable that is checked in the action() function. If it's set to false, return the list of players unchanged
- Allow action() to access the action list (discussed above) and let it remove entries.
Mafia Kills: this is the only one I'm not sure how to handle. We could have the kills come from a certain member of the red alignment, or we could have an "invisible" player in the action list that has no "alignment" per se but carries out the kills. --------------------- Another thing we should do is focus on how the layers will work. Getting a bot enabled serverside is very unlikely but it's not necessary-- everything can be done clientside through scraping. I wouldn't mind getting to work on this part but we need to plan things out:
- How will the layers communicate information to each other? Do we use XMLRPC sockets? Files?
- What language will layer 4 be written in? Most of you guys are talking about compiled langauges (C++, C#, etc.) but IMO the ideal would be a scripting language like Python or Lua. That's because it allows us to be very flexible when defining certain behaviors and doesn't require a recompile to change.
- How will hosts create games? This has been discussed a bit. A GUI might be a good idea but I think the best way would be to let the host talk to a developer. I'm assuming this will be open-source so we shouldn't have to worry about a single developer disappearing.
---
There's probably more stuff I'd like to add but can't think of, and I have to go now... I think this is a great idea and I'd like to help in any way I can.
-Nisani
|
Anybody using lua for anything other than what it was originally intended for (it's terrible for writing software from the ground up) is batshit insane. It is also about as bad or worse than perl in terms of maintenance of the code.
Python is good. PHP if you plan on making it web-based.
|
I like the suggestion for the players and actions. However, it still won't capture everthing possible in themed games. Anything with items will be hard. Inventors even worse.
|
you guys should sign up and post in gonzaws mafia bot forum section we have at omgus. Hes the only one posting there and hes posting walls and walls of conversations with himself about this shit. Its starting to creep out some of the omgus regulars. http://www.omgus.net/forum/viewforum.php?f=51
|
On November 28 2012 03:40 Acrofales wrote: I like the suggestion for the players and actions. However, it still won't capture everthing possible in themed games. Anything with items will be hard. Inventors even worse. Items are definitely possible. They can have a "priority" and be just like normal actions. Each player could have a list of items that represents their inventory.
An inventor would require the use of a scripting language and a developer on duty to code up the items. If it becomes too complicated we could always have a human host handle it.
|
On November 28 2012 04:01 Coagulation wrote:you guys should sign up and post in gonzaws mafia bot forum section we have at omgus. Hes the only one posting there and hes posting walls and walls of conversations with himself about this shit. Its starting to creep out some of the omgus regulars. http://www.omgus.net/forum/viewforum.php?f=51
lol
|
Nisani, that thing doesn't seem to take certain things into account, or it'd be very complicated to maintain if you do. For instance:
Once the cycle is over, how to you "undo" those actions? Remember a RBer RBs someone for 1 night, a medic gives "1 extra HP" for 1 night, and a framer sets "DTReturn" only for one night as well. When every "action" is done, and you iterate the list of players, how do you know a "DTReturn" is part of that role or was modified by a framer? Do you keep a log file and undo that action? What about actions like "You can frame someone for 2 nights straight" for instance? How does that work out?
In my paradigm it's easy, add a "Time to live = 2 cycles" attribute to the created passive ability, and once 2 cycles pass, a controller "deletes" all abilities with TTL=0.
Also DT and cop checks are easy. It either checks the players alignment or the players role (attribute "name" from the role), it doesn't need a "DTReturn" attribute, since it changes depending on whether it's an alignment or role cop, and the info is already there, and there's no need to make it redundant.
I think the system is too complex to handle it that way.
On November 28 2012 03:24 Acrofales wrote:Show nested quote +On November 28 2012 02:59 marvellosity wrote:On November 27 2012 10:50 Keirathi wrote:I think the most common way is for the scum to specify the person to carry out the NK, then in absense of them specifying, it is randomed. Like you said, one person has to carry out the kill or things like town Roleblocker are pretty useless. Then, it doesn't matter what role carries out the kills. Some hosts don't allow scum with an active ability to carry out the kill and use their action in the same night, though, and some do. It's just host preference stuff again  For the RB thing: If you're handling all roleblocks simultaneously, then no, the kill would not go through. That's why I chose to give scum roleblocks priority in Mario. yeah it depends on the game. definitely it's usually carried out by a player. but for example in GMarsh's games I think the KP is factional, as the roles present are doctor and no jailkeeper/town rber. I know Ace's DFM2 had factional KP (of course, that could not be called normal by any stretch of the meaning). Also, I seem to remember a game in which roleblockers blocked only 1 ability, so a scum framer tasked with framing and shooting, but being roleblocked, would only get his frame roleblocked, while the kill would still happen. No clue whether that was in a normal or themed game, though. Even normal games have a large variety of this kind of specifics, as we discussed on Skype. I think you can believe Marv when he says that most hosts would rather host the game by hand then have such specifics set in stone. Just take it step by step. Make the "most normal" things doable and slowly expand. Even if that means some code needs to be rewritten later, it is by far the easiest way of designing software that does something, rather than a half-finished software that would do everything if it were ever completed 
I want the "core mechanics" set. Of course I won't let a host add a "Framer who can bus drive the roleblocker who medic protects a guy who shoots him if he DT checks him" role, because that'd need more stuff to take into consideration, but I want the core stuff to be there. Like the "Passive/Active ability" stuff, or the "Status" one, or the "Result" one, etc.
Yeah don't know much about Python/Lua, but seems to me that those languages aren't that good for maintainability, or reusing code, or making the code easy to understand, add new features every once and then, etc. Why would you think those languages would be better? (I'm curious).
|
About the Layers:
I dunno, I thought a simple "Import jar" configuration would be done and the layers would perfectly call methods from each other wouldn't they? (if we use java).
Each "layer" (or rather module like Acro corrected me ) is inside the same host as far as I know, since there's no need to make it distributed...so I don't see why there's a problem in them communicating. (EDIT: Of course if we try to make an "elegant" deployment we might face some problems...maybe) Don't know what a XMLRP socket is lol.
How will hosts create games? This has been discussed a bit. A GUI might be a good idea but I think the best way would be to let the host talk to a developer. I'm assuming this will be open-source so we shouldn't have to worry about a single developer disappearing.
Ideally yes. A host would open a GUI somehow and put everything in. Even more ideally the forum itself would have the GUI embedded in it so the host doesn't need to use an external source.
However in this first iteration I think having the host PM the bot with the info about the game would be easier/faster/less prone to errors.
Because of that the creation of a game must be as simple as possible in this 1st iteration.
I still don't know about how the bot would work though (I already said I know 0% stuff about bots). It can only be clientside? Who "hosts" it?
|
I envision the bot working like this: the bot obtains the URL for the game thread, and parses the HTML of the thread every 5 minutes or so to update votecounts/whatever it needs to monitor. If it needs to make a post or edit a post, it does that by clicking its way to whatever form it needs to get to.
It could run on any dedicated/always-on box. I have access to one that could be used with pretty good reliability.
HTML parsing isn't the *best* option and getting the bot installed serverside would be ideal for a number of reasons. Unfortunately I doubt the TL admins will let us do that. It could probably be done on OMGUS though. -- "Undoing" actions or fields isn't necessary. Fields could be set in two categories: temporary and permanent. Temporary fields would reset to a default value.
A scripting language would be incredibly useful for something like this because:
- Dynamic typing lets us implement custom fields that can have different types
- No need for recompiling which will likely happen a lot for this project as things will constantly be added
- Hard-coding in certain behaviors or values that could potentially change is always a bad idea. When programs don't have much need for this, a compiled language is ideal. The mafia bot is the exact opposite because there are tons of potential behaviors that could be defined that we don't know during development. It's sort of hard to explain but if you do end up trying to do everything in Java or C++ you'll see why it isn't a good idea.
---
XMLRPC is mainly for transmitting information across processes and across different langauges and I don't think it's built for this (I probably shouldn't have suggested that). I mean that, since layer 1 will need to have different implementations depending on its environment (TL.net, OMGUS, wherever else it could potentially be deployed). There needs to be a standardized format for it to send to the game-related modules so that the game modules don't have to worry about what forum it's running on.
If everything is in a single langauge in one single project then it wont require much planning. But if a lot of people are working at once and in potentially different languages (which isn't necessarily a bad thing) then there will need to be a defined mechanism for how the game modules will receive information from the forum modules.
|
On November 28 2012 10:03 Nisani201 wrote: I envision the bot working like this: the bot obtains the URL for the game thread, and parses the HTML of the thread every 5 minutes or so to update votecounts/whatever it needs to monitor. If it needs to make a post or edit a post, it does that by clicking its way to whatever form it needs to get to.
Yeah that's what I envisioned it doing "clientside" as well. I thought that "ideally" it could access the forum's database himself, but yeah I guess that can only be done in OMGUS for now.
Also I take it it'd make posts and the like just like any bot would do. If there is a TL "library" to do something like that then better (or we just copy the code from what other bots here do, like Zona's one).
It could run on any dedicated/always-on box. I have access to one that could be used with pretty good reliability.
Oh good, because I don't really have the means to set up/maintain an "always on" end system to handle it.
- "Undoing" actions or fields isn't necessary. Fields could be set in two categories: temporary and permanent. Temporary fields would reset to a default value.
It still doesn't seem to "represent" reality. Again, do you set a "timer" for each temporary field? Like having 1 Framer frame someone for 1 night but another framer framing him for 2 nights for instance?
And even though I have it all "nice and tidy" with this OO design, there are still things that are pretty complex and hard to do (like dealing with the whole bus driver/RB/different night actions that depend on other night actions and stuff) that I think would be equally or even more complex in that design.
Plus it doesn't really add more functionality. Like if we wanted to add items, or add Day Powers (a Day Vigilante for instance, which is pretty common in PYP and that kind of "restricted" themed games), etc.
I'm not too convinced with it. Unless it can implement a OO paradigm as well, or has a better one that represents reality (a role/subject oriented one perhaps? Although I don't really know much about those).
A scripting language would be incredibly useful for something like this because:
Dynamic typing lets us implement custom fields that can have different types
No need for recompiling which will likely happen a lot for this project as things will constantly be added
Hard-coding in certain behaviors or values that could potentially change is always a bad idea. When programs don't have much need for this, a compiled language is ideal. The mafia bot is the exact opposite because there are tons of potential behaviors that could be defined that we don't know during development. It's sort of hard to explain but if you do end up trying to do everything in Java or C++ you'll see why it isn't a good idea.
But how do you use the scripting language to define these "potential behaviors" and deal with them as they come along? And how do you use dynamic typing in this specific project?
I did think that some stuff being hardcoded wouldn't work that much. For instance in those crazy themed setups where hosts create wild setups, and theoretically should be able to create them on the fly without needing to compile the system again.
But that's not really just a problem with the language itself, which can "create new code" on the fly so it could technically handle that. For instance the Java Assist API let's you create new .class files to load, or dynamically compile new code. The problem is with the design. How do you design the system so it takes care of that?
If the system design can't be done it doesn't matter if you use java or python I think
XMLRPC is mainly for transmitting information across processes and across different langauges and I don't think it's built for this (I probably shouldn't have suggested that). I mean that, since layer 1 will need to have different implementations depending on its environment (TL.net, OMGUS, wherever else it could potentially be deployed). There needs to be a standardized format for it to send to the game-related modules so that the game modules don't have to worry about what forum it's running on.
Hmm, yeah that's the only way I can see that as a problem. I think there are some stuff that "bridge" these languages though. I just googled a bit and there are some protocols that bridge Java and php for instance. At worst it can use web services over SOAP/REST in the same host.
EDIT: Even in an even worse case, we can just create sockets and send XML data over network.
|
Okay, I made a list of all possible roles that a host can choose from when creating a game.
+ Show Spoiler +Possible Roles to choose from: CopSanity: Sane, Insane, Paranoid, Naive Amount of power: 1-shot or infinite Check: Alignment check, Role check Medic:Veteran:Vanilla Townie:Vigilante:Mason:Type: C9++ Mason or "Can PM one dude on N1" Mason Tracker:Watcher:Town Roleblocker:Jailkeeper:Miller:Type: Self-Aware or not-self-aware Mafia Goon:Mafia Godfather:Checks: Alignment check, or choose role to appear to (default is Vanilla Townie) Mafia Framer:Mafia Roleblocker:Serial Killer:Type: C9++ one (choose immunity on D1, etc), or a "normal" one So yeah, every role will already be "set" and can't be customized. Only the Cop can, since he can either be alignment/role cop, has a sanity, and can be a 1-shot cop for C9++ setups. Maybe those could all be different roles, but it seems like too much, since all are "Cops".
Did I miss any? I think normal C9++ setups can be played with these. Also no "role creation" for now so we don't overcomplicate things.
Also, when creating a game the host will choose ONLY this:
- Name of the game
- Type of game (Normal or Newbie)
- Plurality or Mayority lynch
- Roles
And that's it. For each role, the host can give it a name (if not the default one for the role is used), amount of that role in the game, the type and options (like above).
That should be simple enough to even send a PM to a bot I think and create a fully functional game. The host of the game is taken from the guy that sent the PM so that's redundant info.
Everything else will be set to a default and can't be changed for simplicity's sake. I.e all deadlines are 48 hour day cycle and 24 hour night ones, everybody is notified of being RBed, Scum RB takes precedence over town RBer/jailer, and all that stuff we've been talking about. Again to make it simple. Later we can deal with the other shit I guess.
Would this be alright? At least with you guys that didn't want me to complicate things 
EDIT: Host can choose if players can vote for NL or not
|
Looks ok, a few questions:
Is there an input for number of players?
Do you have notifications for healing?
Do you have an input for the deadline or is it just from when the game starts?
Can people vote for themselves?
And is this ready to go?
|
On November 28 2012 11:14 gonzaw wrote: EDIT: Even in an even worse case, we can just create sockets and send XML data over network. That's essentially what XMLRPC is.
Foolishness made a thread about a what constitutes a "normal game" a few months back, if you're want to know what roles to include. Linky.
A while back, Zona had a bot called ZBot that would count votes and (IIRC) do night actions. I tried contacting him a while back when I had a similar idea to make a bot, but he never answered me. Not sure what happened to him but he might be able to help if someone could get a hold of him.
|
On November 28 2012 11:44 GreYMisT wrote: Looks ok, a few questions:
Is there an input for number of players?
Done automatically when you put all roles and how many of each role there is. If you do something like this for instance: VT - 7 Cop - 1 Medic - 1 Goon - 1 RBer - 1 GF - 1
Then it's obvious that there are 12 players, 9 townies and 3 scum, no need to input it yourself. If you input it yourself you can fuck up (i.e put a different number of players as roles you specified) and it's more cumbersome to be checking if those 2 are correct and shit.
Do you have notifications for healing?
Nah
Do you have an input for the deadline or is it just from when the game starts?
This is the process of creating/running the game:
1-Host PMs the above info to the bot, bot says if it's okay or has any problems 2-If it's okay, then host makes the game thread, gives URL to bot. Bot PMs confirmation back 3-Bot starts constantly checking the signup thread for "/in" s or "/join" s (the host must make sure the players type correctly >_> ). 4-Once all signups are filled, the bot PMs the signup list to the host 5-The host can confirm it, or replace players (just in case). Bot confirms back 6-Whenever he's ready, the host PMs the bot and the game starts. At this point the deadline starts running, and the host creates the Day 1 Post. 7-After this every deadline (in the system) is automatic.
Can people vote for themselves?
Yeah I don't see why they shouldn't? Only times I've seen it has any significance is with voting mechanics from themed games.
Oh yeah I guess I forgot the "can people vote for a No lynch?" option. Meh I'll add it.
And is this ready to go?
Wut No, it's ready to start, which is already a huge improvement with what we had like 2 weeks ago 
I have tests/exams these few months so can't do everything. I also need a little help designing some little stuff (like the tier of action resolution "Roleblock->Protection->Kill" stuff). After that we need to do the formal shit and create a developing team and all that shit. Also figuring out how the fuck to use a bot lol (I still don't know).
On November 28 2012 11:47 Nisani201 wrote:Show nested quote +On November 28 2012 11:14 gonzaw wrote: EDIT: Even in an even worse case, we can just create sockets and send XML data over network. That's essentially what XMLRPC is. Foolishness made a thread about a what constitutes a "normal game" a few months back, if you're want to know what roles to include. Linky.
Great I forgot about that thread lol.
....ehmm yeah, some stuff in there I kind of forgot about but I think I'll add it in a later date. Like Mad Hatters, scum choosing their own roles, scum medic/mason, nosy neighbor (which is easy to do actually). Oh yeah, I forgot about: -Mayors & Bodyguard election (and maybe Pardoner election) -Pardoner role -Parity Cop -Alignment+Check cop -Traitor
I knew I was forgetting about something lol! Of course I forgot half the roles in the game 
Right now I think we can play easy simple "Cop+Medic vs Scum cs SK" games so it'd be fine. I'll see if we can add these "uncommon normal" roles later
A while back, Zona had a bot called ZBot that would count votes and (IIRC) do night actions. I tried contacting him a while back when I had a similar idea to make a bot, but he never answered me. Not sure what happened to him but he might be able to help if someone could get a hold of him.
Yeah I PMed him when I started this and no response. Do you know someone else who did something similar? Or at least someone who knows how to program TL bots?
|
If you just want to make a first iteration to get a base system down, why not just limit it to c9++ roles and have the bot roll everyone's roles/etc?
|
Also I'm an idiot I forgot to include Veteran
|
On November 28 2012 12:20 Keirathi wrote: If you just want to make a first iteration to get a base system down, why not just limit it to c9++ roles and have the bot roll everyone's roles/etc?
C9+ roles kind of vary, and hosts will start with the "I want to customize my c9++ setup!" thing and things may get complicated. I think a simple C9++ game can be played with what we have now, so make it simple like this (host chooses the roles himself).
EDIT: Ehmm, I think the "people can vote for a NL" thing may get complicated. If it gets needlessly complicated I might even scratch it. It's not like players always end up voting for NL anyways
|
I can start working on a TL scraper in python if you want. I don't really like using python for something like this (I'd think it would be much more effective for the game module) but all the good scraping libraries are for python so I'll do that.
I will report back when I have something substantial.
|
I'd prefer help planning the mayor system to be honest (help designing it mostly, specially object-oriented), but anything helps. What's a "TL scraper" though?
If you can PM me or post in OMGUS what it does and why you use python and all that jazz then the better I think (since it's details and stuff)
|
I'll probably post there but there's tons of shit to read and I don't really have the patience to look through all of it, so I apologize in advance if I bring up something that you already mentioned.
this is a test for the ##vote: nisani teamliquid parser
+ Show Spoiler [test] +
##unvote
##vote: gonzaw
|
Most of the stuff is just me trying to figure out stuff and improve what I've said before.
If you just read the final posts and go backwards you'd probably get the most info and you could ignore the initial posts (except maybe the op).
|
How would you handle replacements?
|
On November 28 2012 14:14 GreYMisT wrote: How would you handle replacements?
In the system a player is just a username. I just replace one of them with another one Or rather, set the previous one as "replaced" and create a new one and give him the other guy's role/alignment/etc.
The host would just PM the bot "X is a replacement" and people that don't vote are automatically replaced when they fail to vote (if multiple people fail to vote then I guess one is chosen at random, seems fairer).
Basically, once the host PMs the bot "X is a replacement", the player X is put into a replacement list in the system, and is actually replaced when needed (and role PM is sent to him as well)
|
Okay I think I have everything under control now. I've finished designing the action resolution phase, and (apparently) it works fine now. It works only for the roles I'm restricting for this 1st iteration, so it won't work with bus drivers or 3rd party planar dragon and the likes. Use cases are done as well (they were documented here too). Role creation is done (in general terms, we can get into specifics in the design phase), as is setup/game creation.
Chime in on OMGUS to discuss the final touches so we can start the next step.
|
On November 29 2012 10:32 gonzaw wrote: Okay I think I have everything under control now. I've finished designing the action resolution phase, and (apparently) it works fine now. It works only for the roles I'm restricting for this 1st iteration, so it won't work with bus drivers or 3rd party planar dragon and the likes. Use cases are done as well (they were documented here too). Role creation is done (in general terms, we can get into specifics in the design phase), as is setup/game creation.
Chime in on OMGUS to discuss the final touches so we can start the next step. Can you show me what you have now (either on OMGUS or here)? There should be a clear place where we can see what the progress is. I was about to work on my own action resolution thing in Lua., but I'd like to see yours as well.
EDIT: found the post you made where you talk about how it works, reading it now
|
Remember it only works for the "standard" roles. I.e vet/vig/cop/medic/RBer/Framer/etc (the ones I posted before)
It won't work for other roles (or rather it's not planned to work), even if the whole "Create a Role" stuff I posted before would seem it does.
Also yeah the main place where I post progress is OMGUS....but nobody reads nothing there so I have to post it here :/
|
When I say "main place" I mean a single thread/post that is edited each time something is added to the project or something is changed. I shouldn't have to monitor the progress of 10 threads to see what's going on.
|
But whenever there's a new post in OMGUS the thread turns red, so you know which thread was updated. You just go to every thread that's red and read the updates.
In the next phase we'll organize and tidy everything with models and nice drawings and stuff :3
EDIT: Also I didn't make each thread with the idea of updating them, I made them thinking about using them to discuss, and then update it with our conclusions... ...but yeah if I'm the only one posting it's just me updating so that didn't work >_>
|
Gon: could you link the OMGUS thread. I wanna read it (and not understand it) but yeah, too lazy for google.
|
|
You know, I think I encountered a paradox with trackers and watchers, at least in the flow of actions.
Imagine a certain scenario, X is a RBer, Y is a tracker, Z is a VT. Now X RBs Z, and Y tracks X. In this scenario Y would get a "X visited Z" report right? Good Now imagine X RBs Y, and Y tracks X. Does Y get a "X visited you" report? No, he'd get a "You were RBed" one since he was RBed, right?
But how is this possible? Think of Action Resolution as "roles going out of their houses in a certain order to act", and think if roleblocks as "locking someone inside their house".
In scenario 1, what happens? X goes out of his house and goes to Z's house, and locks Z inside. However, Y was already following X before that happened! What does this mean? It means that first of all, Y went outside his house, and went over to X's house. Then he saw X go out and followed him. He saw him go to Z's house, and then saw him go home. After that Y goes home and gets the "X visited Z" check.
This makes sense right?
Now let's go to scenario 2. Here, X goes out of his house and over to Y's house. X locks Y in and returns home. Y tries to leave his house but his door is locked, so he gets the "You were RBed!" message. Makes sense right?
Absolutely not
Tell me, generically, when does Y attempt to leave his house? After or before X leaves his? In scenario 1, Y tries to leave his house before X leaves his, that way he can track X. In scenario 2, Y tries to leave his house after X leaves his, because X already visited him to RB him.
So the paradoxical question: How does Y know when to attempt to leave his house without knowing who X is visiting?
If X visits Z, then Y attempts to leave his house before X left his If X visits him, then Y attempts to leave his house after X left his
Thinking "realistically" this doesn't make sense and is a paradox.
"But gonzaw! Why the hell does this matter? 'People leaving their houses' is just a conceptualization of what these roles would do in real life, but in the mafia game these are actions the host sees and can easily identify who visits who in the fly without following any specific order!"
Yeah, the problem is that my system follows this "conceptualization" pattern, which is the one that makes sense. You know the Action Resolution order: first people get RBed, then bus drivers drive people, then framers frame people, then Cops get checks, then other stuff, and then KP goes through. This can easily be modeled with the "people leaving their house first" model, and is exactly what happens in my system. The problem is that if that model fails then so does the system....at least if it attempts to follow that model to a T.
Yes I have an ugly way to fix that, but I wanted to know if there's "another" way to use this "model" to determine how RBers and trackers/watchers behave. Basically, if you think of trackers/watchers/Rbers as real people who "leave their house" at a certain time to perform their actions, how would you solve the tracker problem? Anything can be added to it to work, don't worry.
Maybe you say something like "Every night, right before people go to sleep, the RBer gives his target a phone call telling him a story. This makes his target more sleepy than usual so he's guaranteed to wake up after the RBer.. After going to sleep an waking up at night, the RBer follows the usual pattern, while his target is guaranteed to be asleep when he goes to his house". That could easily be "translated" into a specific design of my system.
The thing is yeah I just thought of that so I don't know if it would work (specially with other roles, for instance other RBers) so I dunno.
EDIT: Another possibility is coming up with a "different" model that states how roles act. But yeah that's not very easy.
|
I think it's time to lay off the crazy pills. How about this for an explaation, just to humour you, because the actual explanation is: it's a game.
Watcher/tracker are not actually watching or tracking. They are actually police dogs. They come in after the fact and sniff out who was at their target's house/where their target went.
They were not actually there at the time of the deed, but could puzzle it together afterwards.
Obviously if the polic dog was locked in his kennel, he couldn't get out there and do his job...
|
I'm using these "stupid" analogies so I don't have to get technical about programming stuff.
I was thinking about doing something like: After every action is done, the tracker/watcher goes to his target's house and asks the guy "Who did you visit last night?" or "Who visited you last night?" But that wouldn't work since if that guy died by KP he wouldn't be able to ask him since he's dead, so I didn't consider that (basically making trackers/watchers the last guys in action resolution, even after KP. Rules of the game dictate you can't target a dead guy, so they wouldn't be able to watch/track him EDIT: Well....at least you can't do "normal" stuff on a dead guy.)
However if what he tracks/watches is the house itself and the house itself has the "scent" of each visit somehow, that could work. The scent would disappear after that cycle is done, and a new scent would appear next cycle. Yes yes..that can indeed happen.
I guess you were being sarcastic but thanks anyway lol
|
I think you are just overthinking it.
Just have it work the same as the regular system. If you are a tracker or a watcher, and you get roleblocked, you would still technically have a "result" but it just wouldn't be relayed to the player.
When you send the player the PM, you check if he was roleblocked first, THEN if not roleblocked, send them their result.
|
That could work too.
Doesn't seem too consistent though, since "technically" the guy shouldn't receive a check. If you use a "Get all Results" function you'd receive "Tracker got that X visited Y" even if the tracker was RBed, which "technically" didn't happen so the host will have erroneous information.
There are ways to get over that....but yeah the above thing (the "police dog") thing works better I think. Like i said before I prefer to overthink it rather than overcomplicate it (in the implementation) and/or making the implementation "untidy" and/or making the system inconsistent/have erroneous data.
|
Are any of you guys experienced in creating object-oriented models? Also are you experienced in working with UML?
If you are then please head over to OMGUS if you can. There's not much activity in the respective forum of OMGUS (i.e I'm just talking to myself again), and I need to discuss this stuff since it's not quite as easy as I thought, and could make our lives easier in the future if we model it right (and I'm no expert in that).
You may need to read all the walls of text about the requirements first though (so you know what you are supposed to model).....so yeah you may need some patience :/
|
|
|
|