{"action":"created","issue":{"url":"https://api.github.com/repos/yogstation13/yogstation/issues/2135","repository_url":"https://api.github.com/repos/yogstation13/yogstation","labels_url":"https://api.github.com/repos/yogstation13/yogstation/issues/2135/labels{/name}","comments_url":"https://api.github.com/repos/yogstation13/yogstation/issues/2135/comments","events_url":"https://api.github.com/repos/yogstation13/yogstation/issues/2135/events","html_url":"https://github.com/yogstation13/yogstation/pull/2135","id":221901649,"number":2135,"title":"DATUM ANTAGS","user":{"login":"MacHac","id":12868789,"avatar_url":"https://avatars0.githubusercontent.com/u/12868789?v=3","gravatar_id":"","url":"https://api.github.com/users/MacHac","html_url":"https://github.com/MacHac","followers_url":"https://api.github.com/users/MacHac/followers","following_url":"https://api.github.com/users/MacHac/following{/other_user}","gists_url":"https://api.github.com/users/MacHac/gists{/gist_id}","starred_url":"https://api.github.com/users/MacHac/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MacHac/subscriptions","organizations_url":"https://api.github.com/users/MacHac/orgs","repos_url":"https://api.github.com/users/MacHac/repos","events_url":"https://api.github.com/users/MacHac/events{/privacy}","received_events_url":"https://api.github.com/users/MacHac/received_events","type":"User","site_admin":false},"labels":[{"id":402766680,"url":"https://api.github.com/repos/yogstation13/yogstation/labels/Refactor","name":"Refactor","color":"d93f0b","default":false},{"id":401068481,"url":"https://api.github.com/repos/yogstation13/yogstation/labels/Work%20In%20Progress","name":"Work In Progress","color":"d93f0b","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":12,"created_at":"2017-04-14T22:16:02Z","updated_at":"2017-05-01T01:22:41Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/yogstation13/yogstation/pulls/2135","html_url":"https://github.com/yogstation13/yogstation/pull/2135","diff_url":"https://github.com/yogstation13/yogstation/pull/2135.diff","patch_url":"https://github.com/yogstation13/yogstation/pull/2135.patch"},"body":"Many months ago, I had a vision.  I saw multiple modes running at once, each with their own objective tracking.  I saw order, where there is chaos.  I saw a system for tracking antagonists that actually made sense.\r\n\r\nI am now determined to make this vision a reality.\r\n\r\nThe contents of this PR, at the time of this writing, are a highly incomplete and half baked system that will migrate us over from our current one-mode system and its piles and piles of global variables to a proper system that handles as many different antagonist types at once as we have and more, all in a clean and ordered format with things like _conventions_ and _consistency_.\r\n\r\nObviously, this is a task of astounding magnitude, since to my knowledge people have just been shoveling code on top of our broken-ass system for literally years without moving to fix it.  Once again, at the time of this writing, I've touched dozens of files and thousands of lines and I'm _maybe_ halfway done.  So, I'm putting this half-baked PR on the list and anyone who wants to crawl through it and poke holes in my half-baked 3AM programming can do so.\r\n\r\n### MISSION STATEMENT\r\nUltimately, the goal is to replace most of the role of the game_mode datum with a new datum called game that can track multiple game_modes.  The game datum effectively standardizes the format of the game_modes by moving all of the mode's functions and variables to the object definition instead of just having 300 different variables in every game_mode regardless of need.\r\n\r\nTo compensate for this, it becomes possible to add and remove modes from a running game on-the-fly and without having to make special snowflake handler classes for it (here's looking at you, traitorductorling).  Previously, if an admin wanted to make cult v. cult with full objectives and such, it would be a huge issue and inevitably involve missing objectives, missing functionality, and hacky snowflake code.  Now, it's two button clicks.  Wanna add xenos into the mix?  Wanna make the AI malf?  Wanna drop a dozen blobs on the station and pit them against a nuke squad with exosuits and flamethrowers?  It just _works_.  This extends to the config file too.  Instead of just stating probabilities for one mode at a time, you can now do combinations of multiple modes for stress-free tweaking.\r\n\r\nThe big _new_ feature here (that isn't just unfucking what we should have unfucked years ago) is mode arguments.  These allow you to make small tweaks to the modes themselves without changing anything globally.  For example, if you want to make 1% of rounds spawn 3 wizards instead of 1, you don't need to make a new game mode OR add snowflake code.  Just drop it in the config file and you're set.  If an admin wants to force 3 wizards in, they have that option.  You can see examples of the implementation of this in the wizard and traitor classes, among others.  For traitor mode, the entire Double Agent 'mode' was combined with standard traitor.  Now, instead of \r\nPROBABILITY TRAITOR 10\r\nPROBABILITY DOUBLE_AGENTS 7\r\n\r\nYou have\r\n!modes\r\ntraitor-med:10\r\ntraitor-hi+da:7\r\nmodes!\r\nWant less traitors in double agent?\r\ntraitor-med+da:7\r\nWant changelings to spawn in double agent?\r\ntraitor-med+da;ling-low:7\r\nWant to add wizards with double-agent style objectives to kill each other?\r\ntraitor-med+da;ling-low;wizard-duo:7\r\nWant to add a third wizard to make a triangle of assassination objectives?\r\ntraitor-med+da;ling-low;wizard-trifecta:7\r\n\r\nBottom line is, this has been a long time coming.  Trouble is, the current game_mode setup is one of the more fundamental things in this entire game, and a truly absurd amount of things depend on it.  So, anyone who finds time in their busy schedules to scroll through the ravings of a madman looking for obvious and non-obvious bugs is very much encouraged to do so.\r\n:cl:\r\ntweak: Significantly changed the internal behavior of gamemodes.\r\n/:cl:\r\n"},"comment":{"url":"https://api.github.com/repos/yogstation13/yogstation/issues/comments/298270862","html_url":"https://github.com/yogstation13/yogstation/pull/2135#issuecomment-298270862","issue_url":"https://api.github.com/repos/yogstation13/yogstation/issues/2135","id":298270862,"user":{"login":"ArgyleSweatshop","id":12233385,"avatar_url":"https://avatars2.githubusercontent.com/u/12233385?v=3","gravatar_id":"","url":"https://api.github.com/users/ArgyleSweatshop","html_url":"https://github.com/ArgyleSweatshop","followers_url":"https://api.github.com/users/ArgyleSweatshop/followers","following_url":"https://api.github.com/users/ArgyleSweatshop/following{/other_user}","gists_url":"https://api.github.com/users/ArgyleSweatshop/gists{/gist_id}","starred_url":"https://api.github.com/users/ArgyleSweatshop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ArgyleSweatshop/subscriptions","organizations_url":"https://api.github.com/users/ArgyleSweatshop/orgs","repos_url":"https://api.github.com/users/ArgyleSweatshop/repos","events_url":"https://api.github.com/users/ArgyleSweatshop/events{/privacy}","received_events_url":"https://api.github.com/users/ArgyleSweatshop/received_events","type":"User","site_admin":false},"created_at":"2017-05-01T01:22:41Z","updated_at":"2017-05-01T01:22:41Z","body":"I believe in you"}}
{"actor":{"display_login":"ArgyleSweatshop"}}