{"action":"created","comment":{"url":"https://api.github.com/repos/Baystation12/Baystation12/pulls/comments/37714120","id":37714120,"diff_hunk":"@@ -0,0 +1,308 @@\n+// Modular Computer - device that runs various programs and operates with hardware\n+// DO NOT SPAWN THIS TYPE. Use /laptop/ or /console/ instead.\n+/obj/machinery/modular_computer/\n+\tname = \"modular computer\"\n+\tdesc = \"An advanced computer\"\n+\n+\tvar/open = 1\t\t\t\t\t\t\t\t\t\t\t// Whether the computer is open. (0 = \"low power\" mode)\n+\tvar/enabled = 1\t\t\t\t\t\t\t\t\t\t\t// Whether the computer is turned on.\n+\tvar/datum/computer_file/program/active_program = null\t// A currently active program running on the computer.\n+\tvar/battery_powered = 0\t\t\t\t\t\t\t\t\t// Whether computer should be battery powered. It is set automatically\n+\tuse_power = 0\n+\n+\t// Modular computers can run on various devices. Each DEVICE (Laptop, Console, Tablet,..)\n+\t// must have it's own DMI file. Icon states must be called exactly the same in all files, but may look differently\n+\t// If you create a program which is limited to Laptops and Consoles you don't have to add it's icon_state overlay for Tablets too, for example.\n+\n+\ticon = 'icons/obj/computer.dmi'\n+\ticon_state = \"laptop-open\"\n+\tvar/icon_state_unpowered = null\t\t\t\t\t\t\t// Icon state when the computer is turned off\n+\tvar/icon_state_menu = \"menu\"\t\t\t\t\t\t\t// Icon state overlay when the computer is turned on, but no program is loaded that would override the screen.\n+\n+\t// Important hardware (must be installed for computer to work)\n+\tvar/datum/computer_hardware/network_card/network_card\t// Network Card component of this computer. Allows connection to NTNet\n+\tvar/datum/computer_hardware/hard_drive/hard_drive\t\t// Hard Drive component of this computer. Stores programs and files.\n+\tvar/obj/item/weapon/cell/battery = null\t\t\t\t\t// Battery component of this computer. Powers the computer. �ll computers can have batteries.\n+\t// Optional hardware (improves functionality, but is not critical for computer to work)\n+\tvar/datum/computer_hardware/tesla_link/tesla_link\t\t// Tesla Link component of this computer. Allows remote charging from nearest APC.\n+\tvar/datum/computer_hardware/card_slot/card_slot\t\t\t// ID Card slot component of this computer. Mostly for HoP modification console that needs ID slot for modification.\n+\tvar/datum/computer_hardware/nano_printer/nano_printer\t// Nano Printer component of this computer, for your everyday paperwork needs.\n+\n+\n+\n+// Eject ID card from computer, if it has ID slot with card inside.\n+/obj/machinery/modular_computer/verb/eject_id()\n+\tset name = \"Eject ID\"\n+\tset category = \"Object\"\n+\tset src in view(1)\n+\n+\tif(usr.stat || usr.restrained() || usr.lying || !istype(usr, /mob/living))\n+\t\tusr << \"<span class='warning'>You can't do that.</span>\"\n+\t\treturn\n+\n+\tif(!Adjacent(usr))\n+\t\tusr << \"<span class='warning'>You can't reach it.</span>\"\n+\t\treturn\n+\n+\tproc_eject_id(usr)\n+\n+/obj/machinery/modular_computer/proc/proc_eject_id(mob/user)\n+\tif(!user)\n+\t\tuser = usr\n+\n+\tif(!card_slot)\n+\t\tuser << \"\\The [src] does not have an ID card slot\"\n+\t\treturn\n+\n+\tif(!card_slot.stored_card)\n+\t\tuser << \"There is no card in \\the [src]\"\n+\t\treturn\n+\n+\tcard_slot.stored_card.loc = src.loc\n+\tcard_slot.stored_card = null\n+\tuser << \"You remove the card from \\the [src]\"\n+\n+\n+// TODO: Convert hardware creation specific stuff to vending machine that handles laptops.\n+/obj/machinery/modular_computer/New()\n+\tnetwork_card = new(src)\n+\thard_drive = new(src)\n+\ttesla_link = new(src)\n+\tbattery = new(src)\n+\tbattery.maxcharge = 500\n+\tbattery.charge = 500\n+\n+\thard_drive.stored_files.Add(new/datum/computer_file/program/alarm_monitor(src))\n+\thard_drive.stored_files.Add(new/datum/computer_file/program/power_monitor(src))\n+\thard_drive.stored_files.Add(new/datum/computer_file/program/atmos_control(src))\n+\thard_drive.stored_files.Add(new/datum/computer_file/program/rcon_console(src))\n+\thard_drive.stored_files.Add(new/datum/computer_file/program/suit_sensors(src))\n+\tupdate_icon()\n+\t..()\n+\n+// Operates NanoUI\n+/obj/machinery/modular_computer/ui_interact(mob/user, ui_key = \"main\", var/datum/nanoui/ui = null, var/force_open = 1)\n+\tif(!open || !enabled)\n+\t\tif(ui)\n+\t\t\tui.close()\n+\t\treturn 0\n+\tif(stat & (BROKEN | NOPOWER | MAINT))\n+\t\tif(ui)\n+\t\t\tui.close()\n+\t\treturn 0\n+\n+\t// If we have an active program switch to it now.\n+\tif(active_program)\n+\t\tif(ui) // This is the main laptop screen. Since we are switching to program's UI close it for now.\n+\t\t\tui.close()\n+\t\tactive_program.ui_interact(user)\n+\t\treturn\n+\n+\t// We are still here, that means there is no program loaded. Load the BIOS/ROM/OS/whatever you want to call it.\n+\t// This screen simply lists available programs and user may select them.\n+\tif(!hard_drive || !hard_drive.stored_files || !hard_drive.stored_files.len)\n+\t\tvisible_message(\"\\The [src] beeps three times, it's screen displaying \\\"DISK ERROR\\\" warning.\")\n+\t\treturn // No HDD, No HDD files list or no stored files. Something is very broken.\n+\n+\tvar/list/data = get_header_data()\n+\n+\tvar/list/programs = list()\n+\tfor(var/datum/computer_file/program/P in hard_drive.stored_files)\n+\t\tvar/list/program = list()\n+\t\tprogram[\"name\"] = P.filename\n+\t\tprogram[\"desc\"] = P.filedesc\n+\t\tprograms.Add(list(program))\n+\n+\tdata[\"programs\"] = programs\n+\tui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)\n+\tif (!ui)\n+\t\tui = new(user, src, ui_key, \"laptop_mainscreen.tmpl\", \"NTOS Main Menu\", 400, 500)\n+\t\tui.auto_update_layout = 1\n+\t\tui.set_initial_data(data)\n+\t\tui.open()\n+\t\tui.set_auto_update(1)\n+\n+// On-click handling. Turns on the computer if it's off and opens the GUI.\n+/obj/machinery/modular_computer/attack_hand(mob/user)\n+\tif(enabled)\n+\t\tui_interact(user)\n+\telse if((battery && battery.charge > 0) || (!battery && powered())) // Battery-run and charged or non-battery but powered by APC.\n+\t\tuser << \"You press the power button and start up \\the [src]\"\n+\t\tenabled = 1\n+\t\tupdate_icon()\n+\t\tui_interact(user)\n+\telse // Unpowered\n+\t\tuser << \"You press the power button but \\the [src] does not respond.\"\n+\n+// Process currently calls handle_power(), may be expanded in future if more things are added.\n+/obj/machinery/modular_computer/process()\n+\tif(!enabled) // The computer is turned off\n+\t\tuse_power = 0\n+\t\treturn 0\n+\n+\tif(active_program && active_program.requires_ntnet && !get_ntnet_status(active_program.requires_ntnet_feature)) // Active program requires NTNet to run but we've just lost connection. Crash.\n+\t\tkill_program(1)\n+\t\tvisible_message(\"<span class='danger'>\\The [src]'s screen briefly freezes and then shows \\\"NETWORK ERROR - NTNet connection lost. Please retry. If problem persists contact your system administrator.\\\" error.</span>\")\n+\n+\tbattery_powered = battery ? 1 : 0\n+\n+\thandle_power() // Handles all computer power interaction\n+\n+// Function used by NanoUI's to obtain data for header. All relevant entries begin with \"PC_\"\n+/obj/machinery/modular_computer/proc/get_header_data()\n+\tvar/list/data = list()\n+\n+\tif(battery)\n+\t\tswitch(battery.percent())\n+\t\t\tif(80 to 200) // 100 should be maximal but just in case..\n+\t\t\t\tdata[\"PC_batteryicon\"] = \"batt_100.gif\"\n+\t\t\tif(60 to 80)\n+\t\t\t\tdata[\"PC_batteryicon\"] = \"batt_80.gif\"\n+\t\t\tif(40 to 60)\n+\t\t\t\tdata[\"PC_batteryicon\"] = \"batt_60.gif\"\n+\t\t\tif(20 to 40)\n+\t\t\t\tdata[\"PC_batteryicon\"] = \"batt_40.gif\"\n+\t\t\tif(5 to 20)\n+\t\t\t\tdata[\"PC_batteryicon\"] = \"batt_20.gif\"\n+\t\t\telse\n+\t\t\t\tdata[\"PC_batteryicon\"] = \"batt_5.gif\"\n+\t\tdata[\"PC_batterypercent\"] = \"[round(battery.percent())] %\"\n+\t\tdata[\"PC_showbatteryicon\"] = 1\n+\telse // Computer without battery shouldn't work at all, but in case we implement computers without batteries in future that run solely on APC network, it's here.\n+\t\tdata[\"PC_batteryicon\"] = \"batt_5.gif\"\n+\t\tdata[\"PC_batterypercent\"] = \"N/C\"\n+\t\tdata[\"PC_showbatteryicon\"] = battery_powered\n+\n+\tswitch(get_ntnet_status())\n+\t\tif(0)\n+\t\t\tdata[\"PC_ntneticon\"] = \"sig_none.gif\"\n+\t\tif(1)\n+\t\t\tdata[\"PC_ntneticon\"] = \"sig_low.gif\"\n+\t\tif(2)\n+\t\t\tdata[\"PC_ntneticon\"] = \"sig_high.gif\"\n+\n+\tif(tesla_link && tesla_link.enabled && powered())\n+\t\tdata[\"PC_apclinkicon\"] = \"charging.gif\"\n+\n+\tdata[\"PC_stationtime\"] = worldtime2text()\n+\tdata[\"PC_hasheader\"] = 1\n+\tdata[\"PC_showexitprogram\"] = active_program ? 1 : 0 // Hides \"Exit Program\" button on mainscreen\n+\treturn data\n+\n+\n+// Relays kill program request to currently active program. Use this to quit current program.\n+/obj/machinery/modular_computer/proc/kill_program(var/forced = 0)\n+\tif(active_program)\n+\t\tactive_program.kill_program(forced)\n+\t\tactive_program = null\n+\tvar/mob/user = usr\n+\tif(user && istype(user))\n+\t\tui_interact(user) // Re-open the UI on this computer. It should show the main screen now.\n+\tupdate_icon()\n+\n+// Returns 0 for No Signal, 1 for Low Signal and 2 for Good Signal. 3 is for wired connection (always-on)\n+/obj/machinery/modular_computer/proc/get_ntnet_status(var/specific_action = 0)\n+\tif(network_card)\n+\t\treturn network_card.get_signal(specific_action)\n+\telse\n+\t\treturn 0\n+\n+// Handles user's GUI input\n+/obj/machinery/modular_computer/Topic(href, href_list)\n+\tif( href_list[\"PC_exit\"] )\n+\t\tkill_program()\n+\t\treturn\n+\tif( href_list[\"PC_shutdown\"] )\n+\t\tkill_program(1)\n+\t\tvisible_message(\"\\The [src] shuts down.\")\n+\t\tenabled = 0\n+\t\tupdate_icon()\n+\t\treturn\n+\tif( href_list[\"PC_runprogram\"] )\n+\t\tvar/prog = href_list[\"PC_runprogram\"]\n+\t\tvar/datum/computer_file/program/P = null\n+\t\tvar/mob/user = usr\n+\t\tif(hard_drive)\n+\t\t\tP = hard_drive.find_file_by_name(prog)\n+\n+\t\tif(!P || !istype(P)) // Program not found or it's not executable program.\n+\t\t\tuser << \"<span class='danger'>\\The [src]'s screen shows \\\"I/O ERROR - Unable to run program\\\" warning.</span>\"\n+\t\t\treturn\n+\n+\t\tif(P.requires_ntnet && !get_ntnet_status(P.requires_ntnet_feature)) // The program requires NTNet connection, but we are not connected to NTNet.\n+\t\t\tuser << \"<span class='danger'>\\The [src]'s screen shows \\\"NETWORK ERROR - Unable to connect to NTNet. Please retry. If problem persists contact your system administrator.\\\" warning.</span>\"\n+\t\t\treturn\n+\t\tif(P.run_program(user))\n+\t\t\tactive_program = P\n+\t\t\tupdate_icon()\n+\t\treturn\n+\n+// Used in following function to reduce copypaste\n+/obj/machinery/modular_computer/proc/power_failure()\n+\tif(enabled) // Shut down the computer)\n+\t\tvisible_message(\"<span class='danger'>\\The [src]'s screen flickers \\\"BATTERY CRITICAL\\\" warning as it shuts down unexpectedly.</span>\")\n+\t\tkill_program(1)\n+\t\tenabled = 0\n+\t\tupdate_icon()\n+\tstat |= NOPOWER\n+// Handles power-related things, such as battery interaction, recharging, shutdown when it's discharged, NOPOWER flag, etc.\n+/obj/machinery/modular_computer/proc/handle_power()\n+\tif(battery && battery.charge <= 0) // Battery-run but battery is depleted.\n+\t\tpower_failure()\n+\t\treturn 0\n+\telse if(!battery && (!powered() || !tesla_link || !tesla_link.enabled)) // Not battery run, but lacking APC connection.\n+\t\tpower_failure()\n+\t\treturn 0\n+\telse if(stat & NOPOWER)\n+\t\tstat &= ~NOPOWER\n+\n+\tvar/power_usage = open ? 300 : 25 // 300W when it's open and only 25W when closed (sleep mode)? Screen probably uses a lot.\n+\tif(network_card && network_card.enabled)\n+\t\tpower_usage += network_card.power_usage\n+\n+\tif(hard_drive && hard_drive.enabled)\n+\t\tpower_usage += hard_drive.power_usage\n+\n+\t// Wireless APC connection exists.\n+\tif(tesla_link && tesla_link.enabled)\n+\t\tidle_power_usage = power_usage\n+\t\tactive_power_usage = idle_power_usage + 100 \t// APCLink only charges at 100W rate, but covers any power usage.\n+\t\tuse_power = 1\n+\t\t// Battery is not fully charged. Begin slowly recharging.\n+\t\tif(battery && battery.charge < battery.maxcharge)\n+\t\t\tuse_power = 2\n+\n+\t\tif(battery && powered() && (use_power == 2)) // Battery charging itself\n+\t\t\tbattery.give(100 * CELLRATE)\n+\t\telse if(battery && !powered()) // Unpowered, but battery covers the usage.\n+\t\t\tbattery.use(idle_power_usage * CELLRATE)\n+\n+\telse\t// No wireless connection run only on battery.\n+\t\tuse_power = 0\n+\t\tif (battery)\n+\t\t\tbattery.use(power_usage * CELLRATE)\n+\n+// Modular computers can have battery in them, we handle power in previous proc, so prevent this from messing it up for us.\n+/obj/machinery/modular_computer/power_change()\n+\tif(battery_powered)\n+\t\treturn\n+\telse\n+\t\t..()\n+\n+/obj/machinery/modular_computer/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)\n+\tif(istype(W, /obj/item/weapon/card/id)) // ID Card, try to insert it.\n+\t\tvar/obj/item/weapon/card/id/I = W\n+\t\tif(!card_slot)\n+\t\t\tuser << \"You try to insert \\the [I] into \\the [src], but it does not have an ID card slot installed.\"\n+\t\t\treturn\n+\n+\t\tif(card_slot.stored_card)\n+\t\t\tuser << \"You try to insert \\the [I] into \\the [src], but it's ID card slot is occupied.\"\n+\t\t\treturn\n+\n+\t\tcard_slot.stored_card = I\n+\t\tI.loc = src","path":"code/modules/modular_computers/computers/modular_computer.dm","position":304,"original_position":304,"commit_id":"49f044d5b81b8f6cb652c646e893ff0d922b51c3","original_commit_id":"49f044d5b81b8f6cb652c646e893ff0d922b51c3","user":{"login":"PJB3005","id":8107459,"avatar_url":"https://avatars.githubusercontent.com/u/8107459?v=3","gravatar_id":"","url":"https://api.github.com/users/PJB3005","html_url":"https://github.com/PJB3005","followers_url":"https://api.github.com/users/PJB3005/followers","following_url":"https://api.github.com/users/PJB3005/following{/other_user}","gists_url":"https://api.github.com/users/PJB3005/gists{/gist_id}","starred_url":"https://api.github.com/users/PJB3005/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PJB3005/subscriptions","organizations_url":"https://api.github.com/users/PJB3005/orgs","repos_url":"https://api.github.com/users/PJB3005/repos","events_url":"https://api.github.com/users/PJB3005/events{/privacy}","received_events_url":"https://api.github.com/users/PJB3005/received_events","type":"User","site_admin":false},"body":"`forceMove()`","created_at":"2015-08-24T01:34:13Z","updated_at":"2015-08-24T01:34:13Z","html_url":"https://github.com/Baystation12/Baystation12/pull/10002#discussion_r37714120","pull_request_url":"https://api.github.com/repos/Baystation12/Baystation12/pulls/10002","_links":{"self":{"href":"https://api.github.com/repos/Baystation12/Baystation12/pulls/comments/37714120"},"html":{"href":"https://github.com/Baystation12/Baystation12/pull/10002#discussion_r37714120"},"pull_request":{"href":"https://api.github.com/repos/Baystation12/Baystation12/pulls/10002"}}},"pull_request":{"url":"https://api.github.com/repos/Baystation12/Baystation12/pulls/10002","id":39126704,"html_url":"https://github.com/Baystation12/Baystation12/pull/10002","diff_url":"https://github.com/Baystation12/Baystation12/pull/10002.diff","patch_url":"https://github.com/Baystation12/Baystation12/pull/10002.patch","issue_url":"https://api.github.com/repos/Baystation12/Baystation12/issues/10002","number":10002,"state":"open","locked":false,"title":"[DNM] Modular Computers","user":{"login":"atlantiscze","id":5147960,"avatar_url":"https://avatars.githubusercontent.com/u/5147960?v=3","gravatar_id":"","url":"https://api.github.com/users/atlantiscze","html_url":"https://github.com/atlantiscze","followers_url":"https://api.github.com/users/atlantiscze/followers","following_url":"https://api.github.com/users/atlantiscze/following{/other_user}","gists_url":"https://api.github.com/users/atlantiscze/gists{/gist_id}","starred_url":"https://api.github.com/users/atlantiscze/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atlantiscze/subscriptions","organizations_url":"https://api.github.com/users/atlantiscze/orgs","repos_url":"https://api.github.com/users/atlantiscze/repos","events_url":"https://api.github.com/users/atlantiscze/events{/privacy}","received_events_url":"https://api.github.com/users/atlantiscze/received_events","type":"User","site_admin":false},"body":"Implements modular computers. This completely replaces the old computer3 system, keeping few good features and unticking the rest. I'm opening this for early review and for suggestions.\r\n\r\nThis is still a WIP project. Travis will show errors due to map having computer3 vendor on it. I intentionally didn't commit map changes yet, to reduce chances of merge conflicts. Map will be the last thing to be changed.\r\n\r\nPlanned features:\r\n- [x] Modular computer devices - consoles, laptops, tablets. Maybe PDAs. (Laptops mostly done)\r\n- [ ] Modular programs, capable of running on above mentioned devices. NanoUI-based. (Few programs are done, but only a small fraction.)\r\n- [x] Better hardware selection. Power cell differences are no longer 5000%, more hardware is added, dual card reader axed (computers use RFID to scan your worn ID for access, no more swiping like maniac!), tesla link for wireless charging added. (Mostly completed)\r\n- [ ] NTNet. Simple networking that allows programs on portable devices to work. It also serves as repository for programs. Your computer no longer starts stocked with programs, you have to download them from NTNet. NTNet will automatically show only those programs you have access to have. Of course, there may be ways around this, if you are creative and well equipped.\r\n- [x] New, high quality bugs.\r\n- [ ] Configurable. Research Director will have access to few administration utilities, such as disabling specific functions of NTNet, spying on sent messages (paranoia time!), etc.\r\n- [ ] Better communication methods than regular PDA messaging. PDA messaging can't involve more than two people. NTNRC (NTNet Relayed Chat) will allow IRC/Forum-style discussion between multiple people at once. Bored at workplace? Too lazy to walk to the bar? Open your laptop and talk with your (similarly lazy) coworkers from comfort of your chair.\r\n\r\nNew High Quality Bugs™\r\n- [ ] NanoUI does not support auto-updating of header when NanoMap is loaded (camera console and crew monitor)\r\n\r\nThis is very very very WIP. I'm leaving for one week on Saturday and i probably won't have access to internet connection during that one week. I'll have my laptop so i will be able to make some progress, but i won't be able to push the changes until i return to civilisation. Keep that in mind if you don't receive my responses, i'll be back soon.","created_at":"2015-07-02T21:14:54Z","updated_at":"2015-08-24T01:34:13Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ea22ff04fb9e07dd69a69fa29adef5a29c029de1","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/Baystation12/Baystation12/pulls/10002/commits","review_comments_url":"https://api.github.com/repos/Baystation12/Baystation12/pulls/10002/comments","review_comment_url":"https://api.github.com/repos/Baystation12/Baystation12/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Baystation12/Baystation12/issues/10002/comments","statuses_url":"https://api.github.com/repos/Baystation12/Baystation12/statuses/49f044d5b81b8f6cb652c646e893ff0d922b51c3","head":{"label":"atlantiscze:NTOSv2","ref":"NTOSv2","sha":"49f044d5b81b8f6cb652c646e893ff0d922b51c3","user":{"login":"atlantiscze","id":5147960,"avatar_url":"https://avatars.githubusercontent.com/u/5147960?v=3","gravatar_id":"","url":"https://api.github.com/users/atlantiscze","html_url":"https://github.com/atlantiscze","followers_url":"https://api.github.com/users/atlantiscze/followers","following_url":"https://api.github.com/users/atlantiscze/following{/other_user}","gists_url":"https://api.github.com/users/atlantiscze/gists{/gist_id}","starred_url":"https://api.github.com/users/atlantiscze/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atlantiscze/subscriptions","organizations_url":"https://api.github.com/users/atlantiscze/orgs","repos_url":"https://api.github.com/users/atlantiscze/repos","events_url":"https://api.github.com/users/atlantiscze/events{/privacy}","received_events_url":"https://api.github.com/users/atlantiscze/received_events","type":"User","site_admin":false},"repo":{"id":21876216,"name":"Baystation12","full_name":"atlantiscze/Baystation12","owner":{"login":"atlantiscze","id":5147960,"avatar_url":"https://avatars.githubusercontent.com/u/5147960?v=3","gravatar_id":"","url":"https://api.github.com/users/atlantiscze","html_url":"https://github.com/atlantiscze","followers_url":"https://api.github.com/users/atlantiscze/followers","following_url":"https://api.github.com/users/atlantiscze/following{/other_user}","gists_url":"https://api.github.com/users/atlantiscze/gists{/gist_id}","starred_url":"https://api.github.com/users/atlantiscze/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atlantiscze/subscriptions","organizations_url":"https://api.github.com/users/atlantiscze/orgs","repos_url":"https://api.github.com/users/atlantiscze/repos","events_url":"https://api.github.com/users/atlantiscze/events{/privacy}","received_events_url":"https://api.github.com/users/atlantiscze/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/atlantiscze/Baystation12","description":"The code for Baystation12's branch of SS13","fork":true,"url":"https://api.github.com/repos/atlantiscze/Baystation12","forks_url":"https://api.github.com/repos/atlantiscze/Baystation12/forks","keys_url":"https://api.github.com/repos/atlantiscze/Baystation12/keys{/key_id}","collaborators_url":"https://api.github.com/repos/atlantiscze/Baystation12/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/atlantiscze/Baystation12/teams","hooks_url":"https://api.github.com/repos/atlantiscze/Baystation12/hooks","issue_events_url":"https://api.github.com/repos/atlantiscze/Baystation12/issues/events{/number}","events_url":"https://api.github.com/repos/atlantiscze/Baystation12/events","assignees_url":"https://api.github.com/repos/atlantiscze/Baystation12/assignees{/user}","branches_url":"https://api.github.com/repos/atlantiscze/Baystation12/branches{/branch}","tags_url":"https://api.github.com/repos/atlantiscze/Baystation12/tags","blobs_url":"https://api.github.com/repos/atlantiscze/Baystation12/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/atlantiscze/Baystation12/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/atlantiscze/Baystation12/git/refs{/sha}","trees_url":"https://api.github.com/repos/atlantiscze/Baystation12/git/trees{/sha}","statuses_url":"https://api.github.com/repos/atlantiscze/Baystation12/statuses/{sha}","languages_url":"https://api.github.com/repos/atlantiscze/Baystation12/languages","stargazers_url":"https://api.github.com/repos/atlantiscze/Baystation12/stargazers","contributors_url":"https://api.github.com/repos/atlantiscze/Baystation12/contributors","subscribers_url":"https://api.github.com/repos/atlantiscze/Baystation12/subscribers","subscription_url":"https://api.github.com/repos/atlantiscze/Baystation12/subscription","commits_url":"https://api.github.com/repos/atlantiscze/Baystation12/commits{/sha}","git_commits_url":"https://api.github.com/repos/atlantiscze/Baystation12/git/commits{/sha}","comments_url":"https://api.github.com/repos/atlantiscze/Baystation12/comments{/number}","issue_comment_url":"https://api.github.com/repos/atlantiscze/Baystation12/issues/comments{/number}","contents_url":"https://api.github.com/repos/atlantiscze/Baystation12/contents/{+path}","compare_url":"https://api.github.com/repos/atlantiscze/Baystation12/compare/{base}...{head}","merges_url":"https://api.github.com/repos/atlantiscze/Baystation12/merges","archive_url":"https://api.github.com/repos/atlantiscze/Baystation12/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/atlantiscze/Baystation12/downloads","issues_url":"https://api.github.com/repos/atlantiscze/Baystation12/issues{/number}","pulls_url":"https://api.github.com/repos/atlantiscze/Baystation12/pulls{/number}","milestones_url":"https://api.github.com/repos/atlantiscze/Baystation12/milestones{/number}","notifications_url":"https://api.github.com/repos/atlantiscze/Baystation12/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/atlantiscze/Baystation12/labels{/name}","releases_url":"https://api.github.com/repos/atlantiscze/Baystation12/releases{/id}","created_at":"2014-07-15T21:17:06Z","updated_at":"2015-07-01T18:20:03Z","pushed_at":"2015-08-21T17:36:17Z","git_url":"git://github.com/atlantiscze/Baystation12.git","ssh_url":"git@github.com:atlantiscze/Baystation12.git","clone_url":"https://github.com/atlantiscze/Baystation12.git","svn_url":"https://github.com/atlantiscze/Baystation12","homepage":"http://baystation12.net/","size":605545,"stargazers_count":1,"watchers_count":1,"language":"DM","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"Baystation12:dev","ref":"dev","sha":"41d86361a0560dc21670be4dac18049d38cf826c","user":{"login":"Baystation12","id":1174322,"avatar_url":"https://avatars.githubusercontent.com/u/1174322?v=3","gravatar_id":"","url":"https://api.github.com/users/Baystation12","html_url":"https://github.com/Baystation12","followers_url":"https://api.github.com/users/Baystation12/followers","following_url":"https://api.github.com/users/Baystation12/following{/other_user}","gists_url":"https://api.github.com/users/Baystation12/gists{/gist_id}","starred_url":"https://api.github.com/users/Baystation12/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Baystation12/subscriptions","organizations_url":"https://api.github.com/users/Baystation12/orgs","repos_url":"https://api.github.com/users/Baystation12/repos","events_url":"https://api.github.com/users/Baystation12/events{/privacy}","received_events_url":"https://api.github.com/users/Baystation12/received_events","type":"Organization","site_admin":false},"repo":{"id":2715933,"name":"Baystation12","full_name":"Baystation12/Baystation12","owner":{"login":"Baystation12","id":1174322,"avatar_url":"https://avatars.githubusercontent.com/u/1174322?v=3","gravatar_id":"","url":"https://api.github.com/users/Baystation12","html_url":"https://github.com/Baystation12","followers_url":"https://api.github.com/users/Baystation12/followers","following_url":"https://api.github.com/users/Baystation12/following{/other_user}","gists_url":"https://api.github.com/users/Baystation12/gists{/gist_id}","starred_url":"https://api.github.com/users/Baystation12/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Baystation12/subscriptions","organizations_url":"https://api.github.com/users/Baystation12/orgs","repos_url":"https://api.github.com/users/Baystation12/repos","events_url":"https://api.github.com/users/Baystation12/events{/privacy}","received_events_url":"https://api.github.com/users/Baystation12/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Baystation12/Baystation12","description":"The code for Baystation12's branch of SS13","fork":false,"url":"https://api.github.com/repos/Baystation12/Baystation12","forks_url":"https://api.github.com/repos/Baystation12/Baystation12/forks","keys_url":"https://api.github.com/repos/Baystation12/Baystation12/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Baystation12/Baystation12/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Baystation12/Baystation12/teams","hooks_url":"https://api.github.com/repos/Baystation12/Baystation12/hooks","issue_events_url":"https://api.github.com/repos/Baystation12/Baystation12/issues/events{/number}","events_url":"https://api.github.com/repos/Baystation12/Baystation12/events","assignees_url":"https://api.github.com/repos/Baystation12/Baystation12/assignees{/user}","branches_url":"https://api.github.com/repos/Baystation12/Baystation12/branches{/branch}","tags_url":"https://api.github.com/repos/Baystation12/Baystation12/tags","blobs_url":"https://api.github.com/repos/Baystation12/Baystation12/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Baystation12/Baystation12/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Baystation12/Baystation12/git/refs{/sha}","trees_url":"https://api.github.com/repos/Baystation12/Baystation12/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Baystation12/Baystation12/statuses/{sha}","languages_url":"https://api.github.com/repos/Baystation12/Baystation12/languages","stargazers_url":"https://api.github.com/repos/Baystation12/Baystation12/stargazers","contributors_url":"https://api.github.com/repos/Baystation12/Baystation12/contributors","subscribers_url":"https://api.github.com/repos/Baystation12/Baystation12/subscribers","subscription_url":"https://api.github.com/repos/Baystation12/Baystation12/subscription","commits_url":"https://api.github.com/repos/Baystation12/Baystation12/commits{/sha}","git_commits_url":"https://api.github.com/repos/Baystation12/Baystation12/git/commits{/sha}","comments_url":"https://api.github.com/repos/Baystation12/Baystation12/comments{/number}","issue_comment_url":"https://api.github.com/repos/Baystation12/Baystation12/issues/comments{/number}","contents_url":"https://api.github.com/repos/Baystation12/Baystation12/contents/{+path}","compare_url":"https://api.github.com/repos/Baystation12/Baystation12/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Baystation12/Baystation12/merges","archive_url":"https://api.github.com/repos/Baystation12/Baystation12/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Baystation12/Baystation12/downloads","issues_url":"https://api.github.com/repos/Baystation12/Baystation12/issues{/number}","pulls_url":"https://api.github.com/repos/Baystation12/Baystation12/pulls{/number}","milestones_url":"https://api.github.com/repos/Baystation12/Baystation12/milestones{/number}","notifications_url":"https://api.github.com/repos/Baystation12/Baystation12/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Baystation12/Baystation12/labels{/name}","releases_url":"https://api.github.com/repos/Baystation12/Baystation12/releases{/id}","created_at":"2011-11-05T16:12:41Z","updated_at":"2015-08-22T15:49:53Z","pushed_at":"2015-08-24T00:37:31Z","git_url":"git://github.com/Baystation12/Baystation12.git","ssh_url":"git@github.com:Baystation12/Baystation12.git","clone_url":"https://github.com/Baystation12/Baystation12.git","svn_url":"https://github.com/Baystation12/Baystation12","homepage":"http://baystation12.net/","size":1575539,"stargazers_count":204,"watchers_count":204,"language":"DM","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":829,"mirror_url":null,"open_issues_count":284,"forks":829,"open_issues":284,"watchers":204,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Baystation12/Baystation12/pulls/10002"},"html":{"href":"https://github.com/Baystation12/Baystation12/pull/10002"},"issue":{"href":"https://api.github.com/repos/Baystation12/Baystation12/issues/10002"},"comments":{"href":"https://api.github.com/repos/Baystation12/Baystation12/issues/10002/comments"},"review_comments":{"href":"https://api.github.com/repos/Baystation12/Baystation12/pulls/10002/comments"},"review_comment":{"href":"https://api.github.com/repos/Baystation12/Baystation12/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Baystation12/Baystation12/pulls/10002/commits"},"statuses":{"href":"https://api.github.com/repos/Baystation12/Baystation12/statuses/49f044d5b81b8f6cb652c646e893ff0d922b51c3"}}}}