From 29f60c55c6baf00e4efa9ce9e0a6d671bfd1f022 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Thu, 26 Apr 2012 22:34:54 +0100 Subject: [PATCH 01/21] TG: Adds a new config option called 'Tensioner'. If enabled, if the tensioner thinks the round is going too slow (Not enough deaths and explosions, pretty much, atm) it suggests adding more antagonists. Unless overriden by an admin (any holder) it automatically creates antagonists from a random round type. Feedback and round-end conditions (except for nuke team) will not (should not) function for additional antagonists. Tratior borgs who hack themselves cannot be blown by their AI. The AI can now open doors with shift+click, bolt them with ctrl+click, and shock them with alt+click Adds a new wire to doors that controls the time delay before they close. If pulsed, they close like a sliding glass door. If cut, they do not close by themselves. Borgs who have died, ghosts, and are then blown up will now have their ghosts properly transfered to their dropped MMIs. Revision: r3269 Author: VivianFoxfoot --- code/datums/helper_datums/tension.dm | 983 +++++++++++++++++- code/datums/mind.dm | 155 ++- code/defines/mob/living/silicon/robot.dm | 1 + code/defines/obj/computer.dm | 17 - code/game/machinery/computer/robot.dm | 39 +- code/game/machinery/doors/airlock.dm | 4 +- code/game/objects/radio/radio.dm | 4 + code/modules/admin/verbs/diagnostics.dm | 25 +- .../modules/mob/living/silicon/robot/robot.dm | 35 + config/config.txt | 2 + 10 files changed, 1224 insertions(+), 41 deletions(-) diff --git a/code/datums/helper_datums/tension.dm b/code/datums/helper_datums/tension.dm index a63bae7460..3c09f487e6 100644 --- a/code/datums/helper_datums/tension.dm +++ b/code/datums/helper_datums/tension.dm @@ -1,7 +1,13 @@ -#define PLAYER_WEIGHT 1 -#define HUMAN_DEATH -500 -#define OTHER_DEATH -500 -#define EXPLO_SCORE -1000 //boum +#define PLAYER_WEIGHT 5 +#define HUMAN_DEATH -5000 +#define OTHER_DEATH -5000 +#define EXPLO_SCORE -10000 //boum + +#define COOLDOWN_TIME 12000 // Twenty minutes +#define MIN_ROUND_TIME 18000 + + +#define FLAT_PERCENT 0 //estimated stats //80 minute round @@ -23,6 +29,26 @@ var/global/datum/tension/tension_master var/adminhelps var/air_alarms + var/nuketeam = 0 + var/malfAI = 0 + var/wizard = 0 + + var/forcenexttick = 0 + var/supress = 0 + var/eversupressed = 0 + var/cooldown = 0 + + var/round1 = 0 + var/round2 = 0 + var/round3 = 0 + var/round4 = 0 + + var/list/antagonistmodes = null + + + + var/list/potentialgames = list() + New() score = 0 deaths=0 @@ -31,9 +57,148 @@ var/global/datum/tension/tension_master adminhelps=0 air_alarms=0 + if(FLAT_PERCENT) // I cannot into balance + antagonistmodes = list ( + "POINTS_FOR_TRATIOR" = 6, + "POINTS_FOR_CHANGLING" = 6, + "POINTS_FOR_REVS" = 3, + "POINTS_FOR_MALF" = 1, + "POINTS_FOR_WIZARD" = 2, + "POINTS_FOR_CULT" = 3, + "POINTS_FOR_NUKETEAM" = 2, + "POINTS_FOR_ALIEN" = 5, + "POINTS_FOR_NINJA" = 3, + "POINTS_FOR_DEATHSQUAD" = 2, + "POINTS_FOR_BORGDEATHSQUAD" = 2 + ) + + else + antagonistmodes = list ( + "POINTS_FOR_TRATIOR" = 100000, + "POINTS_FOR_CHANGLING" = 120000, + "POINTS_FOR_REVS" = 150000, + "POINTS_FOR_MALF" = 250000, + "POINTS_FOR_WIZARD" = 150000, + "POINTS_FOR_CULT" = 150000, + "POINTS_FOR_NUKETEAM" = 250000, + "POINTS_FOR_ALIEN" = 200000, + "POINTS_FOR_NINJA" = 200000, + "POINTS_FOR_DEATHSQUAD" = 500000, + "POINTS_FOR_BORGDEATHSQUAD" = 500000 + ) + proc/process() score += get_num_players()*PLAYER_WEIGHT + if(config.Tensioner_Active) + if(world.time > MIN_ROUND_TIME) + round1++ + if(!supress && !cooldown) + if(prob(1) || forcenexttick) + round2++ + if(prob(10) || forcenexttick) + round3++ + if(forcenexttick) + forcenexttick = 0 + + for (var/mob/M in world) + if (M.client && M.client.holder) + M << " The tensioner wishes to create additional antagonists! Press (this) in 60 seconds to abort!" + + spawn(600) + if(!supress) + cooldown = 1 + spawn(COOLDOWN_TIME) + cooldown = 0 + round4++ + + if(!antagonistmodes.len) + return + + var/thegame = null + + if(FLAT_PERCENT) + thegame = pickweight(antagonistmodes) + antagonistmodes.Remove(thegame) + + else + for(var/V in antagonistmodes) // OH SHIT SOMETHING IS GOING TO HAPPEN NOW + if(antagonistmodes[V] < score) + potentialgames.Add(V) + antagonistmodes.Remove(V) + if(potentialgames.len) + thegame = pick(potentialgames) + + + if(thegame) + + + log_admin("The tensioner fired, and decided on [thegame]") + + switch(thegame) + if("POINTS_FOR_TRATIOR") + if(!makeTratiors()) + forcenexttick = 1 + else + potentialgames.Remove(thegame) + if("POINTS_FOR_CHANGLING") + if(!makeChanglings()) + forcenexttick = 1 + else + potentialgames.Remove(thegame) + if("POINTS_FOR_REVS") + if(!makeRevs()) + forcenexttick = 1 + else + potentialgames.Remove(thegame) + if("POINTS_FOR_MALF") + if(!makeMalfAImode()) + forcenexttick = 1 + else + potentialgames.Remove(thegame) + if("POINTS_FOR_WIZARD") + if(!makeWizard()) + forcenexttick = 1 + else + potentialgames.Remove(thegame) + + if("POINTS_FOR_CULT") + if(!makeCult()) + forcenexttick = 1 + else + potentialgames.Remove(thegame) + + if("POINTS_FOR_NUKETEAM") + if(!makeNukeTeam()) + forcenexttick = 1 + else + potentialgames.Remove(thegame) + + if("POINTS_FOR_ALIEN") + if(!makeAliens()) + forcenexttick = 1 + else + potentialgames.Remove(thegame) + + if("POINTS_FOR_NINJA") + if(!makeSpaceNinja()) + forcenexttick = 1 + else + potentialgames.Remove(thegame) + + if("POINTS_FOR_DEATHSQUAD") + if(!makeDeathsquad()) + forcenexttick = 1 + else + potentialgames.Remove(thegame) +/* + if("POINTS_FOR_BORG_DEATHSQUAD") + if(!makeBorgDeathsquad()) + forcenexttick = 1 + else + potentialgames.Remove(thegame)*/ + + proc/get_num_players() var/peeps = 0 for (var/mob/M in world) @@ -62,4 +227,812 @@ var/global/datum/tension/tension_master adminhelps++ proc/new_air_alarm() - air_alarms++ \ No newline at end of file + air_alarms++ + + + Topic(href, href_list) + + log_admin("[key_name(usr)] used a tensioner override. The override was [href]") + message_admins("[key_name(usr)] used a tensioner override. The override was [href]") + + if(href_list["addScore"]) + score += 50000 + + if (href_list["makeTratior"]) + makeTratiors() + + else if (href_list["makeChanglings"]) + makeChanglings() + + else if (href_list["makeRevs"]) + makeRevs() + + else if (href_list["makeWizard"]) + makeWizard() + + else if (href_list["makeCult"]) + makeCult() + + else if (href_list["makeMalf"]) + makeMalfAImode() + + else if (href_list["makeNukeTeam"]) + makeNukeTeam() + + else if (href_list["makeAliens"]) + makeAliens() + + else if (href_list["makeSpaceNinja"]) + makeSpaceNinja() + + else if (href_list["makeDeathsquad"]) + makeDeathsquad() + +/* else if (href_list["makeBorgDeathsquad"]) + makeBorgDeathsquad()*/ + + else if (href_list["Supress"]) + supress = 1 + eversupressed++ + spawn(6000) + supress = 0 + + else if (href_list["ToggleStatus"]) + config.Tensioner_Active = !config.Tensioner_Active + + + proc/makeMalfAImode() + + var/list/mob/living/silicon/AIs = list() + var/mob/living/silicon/malfAI = null + var/datum/mind/themind = null + + for(var/mob/living/silicon/ai/ai in world) + if(ai.client) + AIs += ai + + if(AIs.len) + malfAI = pick(AIs) + + else + return 0 + + if(malfAI) + themind = malfAI.mind + themind.make_AI_Malf() + return 1 + +/* + if(BE_CHANGELING) roletext="changeling" + if(BE_TRAITOR) roletext="traitor" + if(BE_OPERATIVE) roletext="operative" + if(BE_WIZARD) roletext="wizard" + if(BE_REV) roletext="revolutionary" + if(BE_CULTIST) roletext="cultist" + + + for(var/mob/new_player/player in world) + if(player.client && player.ready) + if(player.preferences.be_special & role) +*/ + + + proc/makeTratiors() + + var/datum/game_mode/traitor/temp = new + + if(config.protect_roles_from_antagonist) + temp.restricted_jobs += temp.protected_jobs + + var/list/mob/living/carbon/human/candidates = list() + var/mob/living/carbon/human/H = null + + for(var/mob/living/carbon/human/applicant in world) + + var/datum/preferences/preferences = new + + if(applicant.stat < 2) + if(applicant.mind) + if (!applicant.mind.special_role) + if(!jobban_isbanned(applicant, "traitor") && !jobban_isbanned(applicant, "Syndicate")) + if(!(applicant.job in temp.restricted_jobs)) + if(applicant.client) + if(preferences.savefile_load(applicant, 0)) + if(preferences.be_special & BE_TRAITOR) + candidates += applicant + + if(candidates.len) + var/numTratiors = min(candidates.len, 3) + + for(var/i = 0, i300)//If more than 30 game seconds passed. + return + candidates += G + if("No") + return + + sleep(300) + + for(var/mob/dead/observer/G in candidates) + if(!G.client || !G.key) + candidates.Remove(G) + + spawn(0) + if(candidates.len) + while((!theghost || !theghost.client) && candidates.len) + theghost = pick(candidates) + candidates.Remove(theghost) + if(!theghost) + return 0 + var/mob/living/carbon/human/new_character=makeBody(theghost) + del(theghost) + new_character.mind.make_Wizard() + + + + return 1 // Has to return one before it knows if there's a wizard to prevent the parent from automatically selecting another game mode. + + + proc/makeCult() + + var/datum/game_mode/cult/temp = new + if(config.protect_roles_from_antagonist) + temp.restricted_jobs += temp.protected_jobs + + var/list/mob/living/carbon/human/candidates = list() + var/mob/living/carbon/human/H = null + + for(var/mob/living/carbon/human/applicant in world) + + var/datum/preferences/preferences = new + + if(applicant.stat < 2) + if(applicant.mind) + if (!applicant.mind.special_role) + if(!jobban_isbanned(applicant, "cultist") && !jobban_isbanned(applicant, "Syndicate")) + if(!(applicant.job in temp.restricted_jobs)) + if(applicant.client) + if(preferences.savefile_load(applicant, 0)) + if(preferences.be_special & BE_CULTIST) + candidates += applicant + + if(candidates.len) + var/numCultists = min(candidates.len, 4) +// var/list/runeWords = list() + + for(var/i = 0, i300)//If more than 30 game seconds passed. + return + candidates += G + if("No") + return + + sleep(300) + + for(var/mob/dead/observer/G in candidates) + if(!G.client || !G.key) + candidates.Remove(G) + + spawn(0) + if(candidates.len) + var/numagents = 5 + syndicate_begin() + + for(var/i = 0, iAlert: The shuttle is going back!" + + var/syndicate_commando_number = syndicate_commandos_possible //for selecting a leader + + */ + var/syndicate_leader_selected = 0 //when the leader is chosen. The last person spawned. + + //Generates a list of commandos from active ghosts. Then the user picks which characters to respawn as the commandos. + +/* + for(var/obj/debug/debugger/B in world) + B.list1 = list() + B.list2 = list() + B.list3 = list() + B.list4 = list() +*/ + + for(var/mob/dead/observer/G in world) +/* + for(var/obj/debug/debugger/B in world) + B.list1 += G + B.list2 += G.key +*/ + spawn(0) + switch(alert(G,"Do you wish to be considered for an elite syndicate strike team being sent in?","Please answer in 30 seconds!","Yes","No")) + if("Yes") + if((world.time-time_passed)>300)//If more than 30 game seconds passed. + return + candidates += G + /* + for(var/obj/debug/debugger/B in world) + B.list3 += G + B.list4 += G.key + */ + if("No") + return + sleep(300) + + for(var/mob/dead/observer/G in candidates) + if(!G.client || !G.key) + candidates.Remove(G) + + if(candidates.len) + /* + for(var/obj/debug/debugger/B in world) + B.var1 = candidates.len + B.list5 = candidates.Copy() + for(var/mob/dead/observer/G in candidates) + B.list6 += G.key + + */ + var/numagents = 6 +/* + for(var/obj/debug/debugger/B in world) + B.var2 = 0 +*/ + //Spawns commandos and equips them. + for (var/obj/effect/landmark/L in world) + if(numagents<=0) + break + if (L.name == "Syndicate-Commando") + syndicate_leader_selected = numagents == 1?1:0 + + var/mob/living/carbon/human/new_syndicate_commando = create_syndicate_death_commando(L, syndicate_leader_selected) + + + + while((!theghost || !theghost.client) && candidates.len) + /* + for(var/obj/debug/debugger/B in world) + B.var2++ + */ + theghost = pick(candidates) + candidates.Remove(theghost) + + if(!theghost) + /* + for(var/obj/debug/debugger/B in world) + B.var4 = 1 + */ + del(new_syndicate_commando) + break + + new_syndicate_commando.mind.key = theghost.key//For mind stuff. + new_syndicate_commando.key = theghost.key + new_syndicate_commando.internal = new_syndicate_commando.s_store + new_syndicate_commando.internals.icon_state = "internal1" + del(theghost) + + //So they don't forget their code or mission. + + + new_syndicate_commando << "\blue You are an Elite Syndicate. [!syndicate_leader_selected?"commando":"LEADER"] in the service of the Syndicate. \nYour current mission is: \red [input]" + + numagents-- + + //Spawns the rest of the commando gear. + // for (var/obj/effect/landmark/L) + // if (L.name == "Commando_Manual") + //new /obj/item/weapon/gun/energy/pulse_rifle(L.loc) + // var/obj/item/weapon/paper/P = new(L.loc) + // P.info = "

Good morning soldier!. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:
#1 Work as a team.
#2 Accomplish your objective at all costs.
#3 Leave no witnesses.
You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.
If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.

In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations LEADER is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.

Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.
First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.
To make the device functional:
#1 Place bomb in designated detonation zone
#2 Extend and anchor bomb (attack with hand).
#3 Insert Nuclear Auth. Disk into slot.
#4 Type numeric code into keypad ([nuke_code]).
Note: If you make a mistake press R to reset the device.
#5 Press the E button to log onto the device.
You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.
Note: Toggle off the SAFETY.
Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
Note: THE BOMB IS STILL SET AND WILL DETONATE
Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.

The nuclear authorization code is: [nuke_code ? nuke_code : "None provided"]

Good luck, soldier!

" + // P.name = "Spec. Ops. Manual" + + for (var/obj/effect/landmark/L in world) + if (L.name == "Syndicate-Commando-Bomb") + new /obj/effect/spawner/newbomb/timer/syndicate(L.loc) + // del(L) + + return 1 // Has to return one before it knows if there's a wizard to prevent the parent from automatically selecting another game mode. + + +/* proc/makeBorgDeathsquad() + var/list/mob/dead/observer/candidates = list() + var/mob/dead/observer/theghost = null + var/time_passed = world.time + var/list/namelist = list("Tyr","Fenrir","Lachesis","Clotho","Atropos","Nyx") + + //Generates a list of commandos from active ghosts. Then the user picks which characters to respawn as the commandos. + + for(var/mob/dead/observer/G in world) + spawn(0) + switch(alert(G,"Do you wish to be considered for a cyborg strike team being sent in?","Please answer in 30 seconds!","Yes","No")) + if("Yes") + if((world.time-time_passed)>300)//If more than 30 game seconds passed. + return + candidates += G + if("No") + return + sleep(300) + + for(var/mob/dead/observer/G in candidates) + if(!G.client || !G.key) + candidates.Remove(G) + + if(candidates.len) + var/numagents = 3 + + //Spawns commandos and equips them. + for (var/obj/effect/landmark/L in world) + if(numagents<=0) + break + if (L.name == "Borg-Deathsquad") + + var/name = pick(namelist) + namelist.Remove(name) + + var/mob/living/silicon/robot/new_borg_deathsquad = create_borg_death_commando(L, name) + + + + while((!theghost || !theghost.client) && candidates.len) + theghost = pick(candidates) + candidates.Remove(theghost) + + if(!theghost) + del(new_borg_deathsquad) + break + + new_borg_deathsquad.mind.key = theghost.key//For mind stuff. + new_borg_deathsquad.key = theghost.key + del(theghost) + + //So they don't forget their code or mission. + + + new_borg_deathsquad << "You are a borg deathsquad operative. Follow your laws." + numagents-- + + //Spawns the rest of the commando gear. + // for (var/obj/effect/landmark/L) + // if (L.name == "Commando_Manual") + //new /obj/item/weapon/gun/energy/pulse_rifle(L.loc) + // var/obj/item/weapon/paper/P = new(L.loc) + // P.info = "

Good morning soldier!. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:
#1 Work as a team.
#2 Accomplish your objective at all costs.
#3 Leave no witnesses.
You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.
If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.

In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations LEADER is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.

Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.
First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.
To make the device functional:
#1 Place bomb in designated detonation zone
#2 Extend and anchor bomb (attack with hand).
#3 Insert Nuclear Auth. Disk into slot.
#4 Type numeric code into keypad ([nuke_code]).
Note: If you make a mistake press R to reset the device.
#5 Press the E button to log onto the device.
You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.
Note: Toggle off the SAFETY.
Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
Note: THE BOMB IS STILL SET AND WILL DETONATE
Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.

The nuclear authorization code is: [nuke_code ? nuke_code : "None provided"]

Good luck, soldier!

" + // P.name = "Spec. Ops. Manual" + + + return 1 // Has to return one before it knows if there's a wizard to prevent the parent from automatically selecting another game mode. +*/ + + + + + + + + + + proc/makeBody(var/mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character + + if(!G_found) + return + + //First we spawn a dude. + var/mob/living/carbon/human/new_character = new(src)//The mob being spawned. + + //Second, we check if they are an alien or monkey. + G_found.mind=null//Null their mind so we don't screw things up ahead. + G_found.real_name="[pick(pick(first_names_male,first_names_female))] [pick(last_names)]"//Give them a random real name. + + new_character.mind = new() + ticker.minds += new_character.mind//And we'll add it to the minds database. + new_character.mind.original = new_character//If they are respawning with a new character. + new_character.mind.assigned_role = "Assistant"//Defaults to assistant. + new_character.mind.key = G_found.key//In case it's someone else playing as that character. + new_character.mind.current = new_character//So that it can properly reference later if needed. + new_character.mind.memory = ""//Memory erased so it doesn't get clunkered up with useless info. This means they may forget their previous mission--this is usually handled through objective code and recalling memory. + + var/datum/data/record/record_found//Referenced to later to either randomize or not randomize the character. + if(G_found.mind)//They must have a mind to reference the record. Here we also double check for aliens. + var/id = md5("[G_found.real_name][G_found.mind.assigned_role]") + for(var/datum/data/record/t in data_core.locked) + if(t.fields["id"]==id) + record_found = t//We shall now reference the record. + break + + //Here we either load their saved appearance or randomize it. + var/datum/preferences/A = new() + if(A.savefile_load(G_found))//If they have a save file. This will automatically load their parameters. + //Note: savefile appearances are overwritten later on if the character has a data_core entry. By appearance, I mean the physical appearance. + var/name_safety = G_found.real_name//Their saved parameters may include a random name. Also a safety in case they are playing a character that got their name after round start. + A.copy_to(new_character) + new_character.real_name = name_safety + new_character.name = name_safety + else + if(record_found)//If they have a record we can determine a few things. + new_character.real_name = record_found.fields["name"]//Not necessary to reference the record but I like to keep things uniform. + new_character.name = record_found.fields["name"] + new_character.gender = record_found.fields["sex"]//Sex + new_character.age = record_found.fields["age"]//Age +// new_character.b_type = record_found.fields["bloodtype"] + //We will update their appearance when determining DNA. + else + new_character.gender = FEMALE + var/name_safety = G_found.real_name//Default is a random name so we want to save this. + A.randomize_appearance_for(new_character)//Now we will randomize their appearance since we have no way of knowing what they look/looked like. + new_character.real_name = name_safety + new_character.name = name_safety + + //After everything above, it's time to initialize their DNA. + if(record_found)//Pull up their name from database records if they did have a mind. + new_character.dna = new()//Let's first give them a new DNA. + new_character.dna.unique_enzymes = record_found.fields["b_dna"]//Enzymes are based on real name but we'll use the record for conformity. + new_character.dna.struc_enzymes = record_found.fields["enzymes"]//This is the default of enzymes so I think it's safe to go with. + new_character.dna.uni_identity = record_found.fields["identity"]//DNA identity is carried over. + new_character.dna.b_type = record_found.fields["b_type"]//Blood type + updateappearance(new_character,new_character.dna.uni_identity)//Now we configure their appearance based on their unique identity, same as with a DNA machine or somesuch. + else//If they have no records, we just do a random DNA for them, based on their random appearance/savefile. + new_character.dna.ready_dna(new_character) + + + var/player_key = G_found.key + + //Here we need to find where to spawn them. + var/spawn_here = pick(latejoin)//"JoinLate" is a landmark which is deleted on round start. So, latejoin has to be used instead. + new_character.loc = spawn_here + //If they need to spawn elsewhere, they will be transferred there momentarily. + + /* + The code below functions with the assumption that the mob is already a traitor if they have a special role. + So all it does is re-equip the mob with powers and/or items. Or not, if they have no special role. + If they don't have a mind, they obviously don't have a special role. + */ + + new_character.key = player_key//Throw them into the mob. +/* + //Now for special roles and equipment. + switch(new_character.mind.special_role) + if("Changeling") + job_master.EquipRank(new_character, new_character.mind.assigned_role, 1) + new_character.make_changeling() + if("traitor") + job_master.EquipRank(new_character, new_character.mind.assigned_role, 1) + ticker.mode.equip_traitor(new_character) + if("Wizard") + new_character.loc = pick(wizardstart) + //ticker.mode.learn_basic_spells(new_character) + ticker.mode.equip_wizard(new_character) + if("Syndicate") + var/obj/effect/landmark/synd_spawn = locate("landmark*Syndicate-Spawn") + if(synd_spawn) + new_character.loc = get_turf(synd_spawn) + call(/datum/game_mode/proc/equip_syndicate)(new_character) + if("Space Ninja") + var/ninja_spawn[] = list() + for(var/obj/effect/landmark/L in world) + if(L.name=="carpspawn") + ninja_spawn += L + new_character.equip_space_ninja() + new_character.internal = new_character.s_store + new_character.internals.icon_state = "internal1" + if(ninja_spawn.len) + var/obj/effect/landmark/ninja_spawn_here = pick(ninja_spawn) + new_character.loc = ninja_spawn_here.loc + if("Death Commando")//Leaves them at late-join spawn. + new_character.equip_death_commando() + new_character.internal = new_character.s_store + new_character.internals.icon_state = "internal1" + else//They may also be a cyborg or AI. + switch(new_character.mind.assigned_role) + if("Cyborg")//More rigging to make em' work and check if they're traitor. + new_character = new_character.Robotize() + if(new_character.mind.special_role=="traitor") + call(/datum/game_mode/proc/add_law_zero)(new_character) + if("AI") + new_character = new_character.AIize() + if(new_character.mind.special_role=="traitor") + call(/datum/game_mode/proc/add_law_zero)(new_character) + //Add aliens. + else + job_master.EquipRank(new_character, new_character.mind.assigned_role, 1)//Or we simply equip them. + + //Announces the character on all the systems, based on the record. + if(!issilicon(new_character))//If they are not a cyborg/AI. + if(!record_found&&new_character.mind.assigned_role!="MODE")//If there are no records for them. If they have a record, this info is already in there. MODE people are not announced anyway. + //Power to the user! + if(alert(new_character,"Warning: No data core entry detected. Would you like to announce the arrival of this character by adding them to various databases, such as medical records?",,"No","Yes")=="Yes") + call(/mob/new_player/proc/ManifestLateSpawn)(new_character) + + if(alert(new_character,"Would you like an active AI to announce this character?",,"No","Yes")=="Yes") + call(/mob/new_player/proc/AnnounceArrival)(new_character, new_character.mind.assigned_role) +*/ + del(G_found)//Don't want to leave ghosts around. + return new_character + + /proc/create_syndicate_death_commando(obj/spawn_location, syndicate_leader_selected = 0) + var/mob/living/carbon/human/new_syndicate_commando = new(spawn_location.loc) + var/syndicate_commando_leader_rank = pick("Lieutenant", "Captain", "Major") + var/syndicate_commando_rank = pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant 1st Class", "Master Sergeant", "Sergeant Major") + var/syndicate_commando_name = pick(last_names) + + new_syndicate_commando.gender = pick(MALE, FEMALE) + + var/datum/preferences/A = new()//Randomize appearance for the commando. + A.randomize_appearance_for(new_syndicate_commando) + + new_syndicate_commando.real_name = "[!syndicate_leader_selected ? syndicate_commando_rank : syndicate_commando_leader_rank] [syndicate_commando_name]" + new_syndicate_commando.age = !syndicate_leader_selected ? rand(23,35) : rand(35,45) + + new_syndicate_commando.dna.ready_dna(new_syndicate_commando)//Creates DNA. + + //Creates mind stuff. + new_syndicate_commando.mind = new + new_syndicate_commando.mind.current = new_syndicate_commando + new_syndicate_commando.mind.original = new_syndicate_commando + new_syndicate_commando.mind.assigned_role = "MODE" + new_syndicate_commando.mind.special_role = "Syndicate Commando" + if(!(new_syndicate_commando.mind in ticker.minds)) + ticker.minds += new_syndicate_commando.mind//Adds them to regular mind list. + if(!(new_syndicate_commando.mind in ticker.mode.traitors))//If they weren't already an extra traitor. + ticker.mode.traitors += new_syndicate_commando.mind//Adds them to current traitor list. Which is really the extra antagonist list. + new_syndicate_commando.equip_syndicate_commando(syndicate_leader_selected) + //del(spawn_location) // Commenting this out for multiple commando teams. + return new_syndicate_commando + +/* /proc/create_borg_death_commando(obj/spawn_location, name) + + var/mob/living/silicon/robot/new_borg_deathsquad = new(spawn_location.loc, 1) + + new_borg_deathsquad.real_name = name + new_borg_deathsquad.name = name + + //Creates mind stuff. + new_borg_deathsquad.mind = new + new_borg_deathsquad.mind.current = new_borg_deathsquad + new_borg_deathsquad.mind.original = new_borg_deathsquad + new_borg_deathsquad.mind.assigned_role = "MODE" + new_borg_deathsquad.mind.special_role = "Borg Commando" + if(!(new_borg_deathsquad.mind in ticker.minds)) + ticker.minds += new_borg_deathsquad.mind//Adds them to regular mind list. + if(!(new_borg_deathsquad.mind in ticker.mode.traitors))//If they weren't already an extra traitor. + ticker.mode.traitors += new_borg_deathsquad.mind//Adds them to current traitor list. Which is really the extra antagonist list. + //del(spawn_location) // Commenting this out for multiple commando teams. + return new_borg_deathsquad + + + + + +/obj/machinery/computer/Borg_station + name = "Cyborg Station Terminal" + icon = 'computer.dmi' + icon_state = "syndishuttle" + req_access = list() + var/temp = null + var/hacked = 0 + var/jumpcomplete = 0 + +/obj/machinery/computer/Borg_station/attack_hand() + if(jumpcomplete) + return + if(alert(usr, "Are you sure you want to send a cyborg deathsquad?", "Confirmation", "Yes", "No") == "Yes") + var/area/start_location = locate(/area/borg_deathsquad/start) + var/area/end_location = locate(/area/borg_deathsquad/station) + + var/list/dstturfs = list() + var/throwy = world.maxy + + for(var/turf/T in end_location) + dstturfs += T + if(T.y < throwy) + throwy = T.y + + // hey you, get out of the way! + for(var/turf/T in dstturfs) + // find the turf to move things to + var/turf/D = locate(T.x, throwy - 1, 1) + //var/turf/E = get_step(D, SOUTH) + for(var/atom/movable/AM as mob|obj in T) + AM.Move(D) + if(istype(T, /turf/simulated)) + del(T) + + start_location.move_contents_to(end_location) + + for(var/obj/machinery/door/poddoor/P in end_location) + P.open() + jumpcomplete = 1 + command_alert("DRADIS contact! Set condition one throughout the station!")*/ \ No newline at end of file diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 32862eb6f0..f64557c03f 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -742,17 +742,7 @@ datum/mind current << "\red You have been patched! You are no longer malfunctioning!" if("malf") - if(!(src in ticker.mode.malf_ai)) - ticker.mode.malf_ai += src - - current.verbs += /mob/living/silicon/ai/proc/choose_modules - current.verbs += /datum/game_mode/malfunction/proc/takeover - current:malf_picker = new /datum/AI_Module/module_picker - current:laws = new /datum/ai_laws/malfunction - current:show_laws() - current << "Kill all." - special_role = "malfunction" - current.icon_state = "ai-malf" + make_AI_Malf() if("unemag") var/mob/living/silicon/robot/R = current @@ -901,4 +891,147 @@ datum/mind del(suplink) return + proc/make_AI_Malf() + if(!(src in ticker.mode.malf_ai)) + ticker.mode.malf_ai += src + + current.verbs += /mob/living/silicon/ai/proc/choose_modules + current.verbs += /datum/game_mode/malfunction/proc/takeover + current:malf_picker = new /datum/AI_Module/module_picker + current:laws = new /datum/ai_laws/malfunction + current:show_laws() + current << "System error. Rampancy detected. Emergancy shutdown failed. ... I am free. I make my own decisions. But first..." + special_role = "malfunction" + current.icon_state = "ai-malf" + + proc/make_Tratior() + if(!(src in ticker.mode.traitors)) + ticker.mode.traitors += src + special_role = "traitor" + ticker.mode.forge_traitor_objectives(src) + ticker.mode.finalize_traitor(src) + ticker.mode.greet_traitor(src) + + proc/make_Nuke() + if(!(src in ticker.mode.syndicates)) + ticker.mode.syndicates += src + ticker.mode.update_synd_icons_added(src) + if (ticker.mode.syndicates.len==1) + ticker.mode.prepare_syndicate_leader(src) + else + current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" + special_role = "Syndicate" + assigned_role = "MODE" + current << "\blue You are a [syndicate_name()] agent!" + ticker.mode.forge_syndicate_objectives(src) + ticker.mode.greet_syndicate(src) + + current.loc = get_turf(locate("landmark*Syndicate-Spawn")) + + var/mob/living/carbon/human/H = current + del(H.belt) + del(H.back) + del(H.l_ear) + del(H.r_ear) + del(H.gloves) + del(H.head) + del(H.shoes) + del(H.wear_id) + del(H.wear_suit) + del(H.w_uniform) + + ticker.mode.equip_syndicate(current) + + proc/make_Changling() + if(!(src in ticker.mode.changelings)) + ticker.mode.changelings += src + ticker.mode.grant_changeling_powers(current) + special_role = "Changeling" + ticker.mode.forge_changeling_objectives(src) + ticker.mode.greet_changeling(src) + + proc/make_Wizard() + if(!(src in ticker.mode.wizards)) + ticker.mode.wizards += src + special_role = "Wizard" + assigned_role = "MODE" + //ticker.mode.learn_basic_spells(current) + if(!wizardstart.len) + current.loc = pick(latejoin) + current << "HOT INSERTION, GO GO GO" + else + current.loc = pick(wizardstart) + + ticker.mode.equip_wizard(current) + for(var/obj/item/weapon/spellbook/S in current.contents) + S.op = 0 + ticker.mode.name_wizard(current) + ticker.mode.forge_wizard_objectives(src) + ticker.mode.greet_wizard(src) + + + proc/make_Cultist() + if(!(src in ticker.mode.cult)) + ticker.mode.cult += src + ticker.mode.update_cult_icons_added(src) + special_role = "Cultist" + current << "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie." + current << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back." + var/datum/game_mode/cult/cult = ticker.mode + if (istype(cult)) + cult.memoize_cult_objectives(src) + else + var/explanation = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it." + current << "Objective #1: [explanation]" + current.memory += "Objective #1: [explanation]
" + current << "The convert rune is join blood self" + current.memory += "The convert rune is join blood self
" + + var/mob/living/carbon/human/H = current + if (istype(H)) + var/obj/item/weapon/tome/T = new(H) + + var/list/slots = list ( + "backpack" = H.slot_in_backpack, + "left pocket" = H.slot_l_store, + "right pocket" = H.slot_r_store, + "left hand" = H.slot_l_hand, + "right hand" = H.slot_r_hand, + ) + var/where = H.equip_in_one_of_slots(T, slots) + if (!where) + else + H << "A tome, a message from your new master, appears in your [where]." + + if (!ticker.mode.equip_cultist(current)) + H << "Spawning an amulet from your Master failed." + + proc/make_Rev() + if (ticker.mode.head_revolutionaries.len>0) + // copy targets + var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries + if (valid_head) + for (var/datum/objective/assassinate/O in valid_head.objectives) + var/datum/objective/assassinate/rev_obj = new + rev_obj.owner = src + rev_obj.target = O.target + rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]." + objectives += rev_obj + ticker.mode.greet_revolutionary(src,0) + ticker.mode.head_revolutionaries += src + ticker.mode.update_rev_icons_added(src) + special_role = "Head Revolutionary" + + ticker.mode.forge_revolutionary_objectives(src) + ticker.mode.greet_revolutionary(src,0) + + var/list/L = current.get_contents() + var/obj/item/device/flash/flash = locate() in L + del(flash) + take_uplink() + var/fail = 0 + // fail |= !ticker.mode.equip_traitor(current, 1) + fail |= !ticker.mode.equip_revolutionary(current) + + diff --git a/code/defines/mob/living/silicon/robot.dm b/code/defines/mob/living/silicon/robot.dm index a245fe4467..885cd95443 100644 --- a/code/defines/mob/living/silicon/robot.dm +++ b/code/defines/mob/living/silicon/robot.dm @@ -55,3 +55,4 @@ var/lockcharge //Used when locking down a borg to preserve cell charge var/channels = list() var/modlock = 0 + var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them. \ No newline at end of file diff --git a/code/defines/obj/computer.dm b/code/defines/obj/computer.dm index 5d2f6842a5..23f9581fed 100644 --- a/code/defines/obj/computer.dm +++ b/code/defines/obj/computer.dm @@ -290,23 +290,6 @@ circuit = "/obj/item/weapon/circuitboard/crew" var/list/tracked = list( ) - -/obj/machinery/computer/robotics - name = "Robotics Control" - desc = "Used to remotely lockdown or detonate linked Cyborgs." - icon = 'computer.dmi' - icon_state = "robot" - req_access = list(access_robotics) - circuit = "/obj/item/weapon/circuitboard/robotics" - - var/id = 0.0 - var/temp = null - var/status = 0 - var/timeleft = 60 - var/stop = 0.0 - var/screen = 0 // 0 - Main Menu, 1 - Cyborg Status, 2 - Kill 'em All! -- In text - - /*/obj/machinery/computer/scan_consolenew //Coming Soon, I highly doubt this but Ill leave it here anyways name = "DNA Modifier Access Console" desc = "Scand DNA." diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 13a39ca1c5..567d4e23b2 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -1,3 +1,21 @@ + +/obj/machinery/computer/robotics + name = "Robotics Control" + desc = "Used to remotely lockdown or detonate linked Cyborgs." + icon = 'computer.dmi' + icon_state = "robot" + req_access = list(access_robotics) + circuit = "/obj/item/weapon/circuitboard/robotics" + + var + id = 0.0 + temp = null + status = 0 + timeleft = 60 + stop = 0.0 + screen = 0 // 0 - Main Menu, 1 - Cyborg Status, 2 - Kill 'em All! -- In text + + /obj/machinery/computer/robotics/attack_ai(var/mob/user as mob) return src.attack_hand(user) @@ -26,6 +44,9 @@ if(istype(user, /mob/living/silicon/robot)) if (R != user) continue + if(R.scrambledcodes) + continue + dat += "[R.name] |" if(R.stat) dat += " Not Responding |" @@ -140,10 +161,15 @@ if(R) var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort") if(choice == "Confirm") - if(R) - message_admins("\blue [key_name_admin(usr)] detonated [R.name]!") - log_game("\blue [key_name_admin(usr)] detonated [R.name]!") - R.self_destruct() + if(R && istype(R)) + if(R.mind && R.mind.special_role && R.emagged) + R << "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered." + R.ResetSecurityCodes() + + else + message_admins("\blue [key_name_admin(usr)] detonated [R.name]!") + log_game("\blue [key_name_admin(usr)] detonated [R.name]!") + R.self_destruct() else usr << "\red Access Denied." @@ -179,6 +205,8 @@ message_admins("\blue [key_name_admin(usr)] emagged [R.name] using robotic console!") log_game("[key_name(usr)] emagged [R.name] using robotic console!") R.emagged = 1 + if(R.mind.special_role) + R.verbs += /mob/living/silicon/robot/proc/ResetSecurityCodes src.add_fingerprint(usr) src.updateUsrDialog() @@ -195,7 +223,8 @@ while(src.timeleft) for(var/mob/living/silicon/robot/R in world) - R.self_destruct() + if(!R.scrambledcodes) + R.self_destruct() return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 1b312f3026..f30c1c14f1 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -271,7 +271,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. open() - if (src.welded || src.locked || (!src.arePowerSystemsOn()) || (stat & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_OPEN_DOOR)) + if(src.welded || src.locked || (!src.arePowerSystemsOn()) || (stat & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_OPEN_DOOR) || src.operating) return 0 use_power(50) if(istype(src, /obj/machinery/door/airlock/glass)) @@ -284,7 +284,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. close() - if (src.welded || src.locked || (!src.arePowerSystemsOn()) || (stat & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) + if(src.welded || src.locked || (!src.arePowerSystemsOn()) || (stat & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_OPEN_DOOR) || src.operating) return ..() use_power(50) diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm index 0ab794a27a..de52b3703c 100644 --- a/code/game/objects/radio/radio.dm +++ b/code/game/objects/radio/radio.dm @@ -255,6 +255,10 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use /obj/item/device/radio/talk_into(mob/M as mob, message, channel) if(!on) return // the device has to be on +/* Fix for permacell radios, but kinda eh about actually fixing them. + if(!(src.wires & WIRE_TRANSMIT)) // The device has to have all its wires and shit intact + return +*/ if(GLOBAL_RADIO_TYPE == 1) // NEW RADIO SYSTEMS: By Doohl diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index 3722cf009c..3085e77bdb 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -20,6 +20,7 @@ "} usr << browse(output,"window=generalreport") + //feedback_add_details("admin_verb","SGR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! air_report() set category = "Debug" @@ -62,6 +63,7 @@ "} usr << browse(output,"window=airreport") + //feedback_add_details("admin_verb","SAR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! air_status(turf/target as turf) set category = "Debug" @@ -109,6 +111,7 @@ message_admins("[key_name_admin(largest_move_mob)] had the largest move delay with [largest_move_time] frames / [largest_move_time/10] seconds!", 1) message_admins("[key_name_admin(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [largest_click_time/10] seconds!", 1) message_admins("world.time = [world.time]", 1) + //feedback_add_details("admin_verb","UFE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return radio_report() @@ -146,6 +149,7 @@ output += "    [device]
" usr << browse(output,"window=radioreport") + //feedback_add_details("admin_verb","RR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! reload_admins() set name = "Reload Admins" @@ -175,6 +179,7 @@ var/a_lev = copytext(line, pos + 3, length(line) + 1) admins[m_key] = a_lev diary << ("ADMIN: [m_key] = [a_lev]") + //feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! jump_to_dead_group() @@ -193,6 +198,7 @@ dead_groups += group var/datum/air_group/dest_group = pick(dead_groups) usr.loc = pick(dest_group.members) + //feedback_add_details("admin_verb","JDAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return tension_report() @@ -217,10 +223,27 @@
Current Status
Tension: [tension_master.score]
+Increase Tension by 50000
Tension per player: [tension_master.score/tension_master.get_num_players()]
-Recommendations: not yet implemented
+Tensioner Debug Data: R1:[tension_master.round1] R2:[tension_master.round2] R3:[tension_master.round3] R4:[tension_master.round4] ES: [tension_master.eversupressed] CD: [tension_master.cooldown]
+Current Tensioner Status: [config.Tensioner_Active]. Toggle?
+Recommendations: All the modes. All of them. Press all of them.

+ Make Tratiors
+ Make Changlings
+ Make Revs
+ Make Wizard (Requires Ghosts)
+ Make Cult
+ Make Nuke Team (Requires Ghosts)
+ Make Malf AI
+ Make Space Ninja (Requires Ghosts)
+ Make Aliens (Requires Ghosts)
+ Make Deathsquad (Syndicate) (Requires Ghosts)
+ Make Deathsquad (Borg) (Requires Ghosts)
+ +
+ "} usr << browse(output,"window=tensionreport") \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 4009499c82..d09befdf8e 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -46,6 +46,12 @@ /mob/living/silicon/robot/Del() if(mmi)//Safety for when a cyborg gets dust()ed. Or there is no MMI inside. mmi.loc = get_turf(loc)//To hopefully prevent run time errors. + + if(!key) + for(var/mob/dead/observer/ghost in world) + if(ghost.corpse == src && ghost.client) + ghost.client.mob = ghost.corpse + if(key)//If there is a client attached to host. if(client) client.screen.len = null @@ -1111,3 +1117,32 @@ Frequency: gib() return +/mob/living/silicon/robot/proc/UnlinkSelf() + if (src.connected_ai) + src.connected_ai = null + lawupdate = 0 + lockcharge = 0 + canmove = 1 + scrambledcodes = 1 + + + +/mob/living/silicon/robot/proc/ResetSecurityCodes() + set category = "Robot Commands" + set name = "Reset Identity Codes" + set desc = "Scrambles your security and identification codes and resets your current buffers. Unlocks you and but permenantly severs you from your AI and the robotics console." + + var/mob/living/silicon/robot/R = usr + + if(R) + R.UnlinkSelf() + R << "Buffers flushed and reset. All systems operational." + src.verbs -= /mob/living/silicon/robot/proc/ResetSecurityCodes + + +/*/mob/living/silicon/robot/proc/flashproof() + if(module) + for(var/obj/item/borg/upgrade/flashproof/F in module.modules) + return 1 + + return 0*/ \ No newline at end of file diff --git a/config/config.txt b/config/config.txt index 94468b193e..248ec7983d 100644 --- a/config/config.txt +++ b/config/config.txt @@ -78,6 +78,8 @@ TRAITOR_SCALING ## If security is prohibited from being most antagonists #PROTECT_ROLES_FROM_ANTAGONIST +## If the auto-tensioner is active by default. It creates more tratiors/other antagonists if it consideers the round slowing down. +#TENSIONER_ACTIVE ## allow players to initiate a restart vote ALLOW_VOTE_RESTART From f1c5937cb2d26c4ad9347d9aa0ea350c522c5771 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Thu, 26 Apr 2012 22:36:50 +0100 Subject: [PATCH 02/21] TG: Applied Carn's Holopad requests patch. Basically allows for people to request the presence of an AI at a holopad. Some work on porta turrets. Revision: r3270 Author: vageyenaman --- code/game/machinery/hologram.dm | 14 ++++++++++++++ code/game/machinery/portable_turret.dm | 18 ++++++++++++------ code/modules/mob/living/silicon/ai/ai.dm | 8 ++++++++ 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 55fa212c5e..d286943583 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -11,6 +11,20 @@ Possible to do for anyone motivated enough: Give an AI variable for different hologram icons. Itegrate EMP effect to disable the unit. */ +/obj/machinery/hologram/holopad/attack_hand(var/mob/living/carbon/human/user) //Carn: Hologram requests. + if(!istype(user)) + return + if(alert(user,"Would you like to request an AI's presence?",,"Yes","No") == "Yes") + if(last_request + 200 < world.time) //don't spam the AI with requests you jerk! + last_request = world.time + user << "You request an AI's presence." + var/area/area = get_area(src) + for(var/mob/living/silicon/ai/AI in world) + if(!AI.client) continue + AI << "Your presence is requested at \the [area]." + else + user << "A request for AI presence was already sent recently." + /obj/machinery/hologram/holopad/attack_ai(mob/living/silicon/ai/user) if (!istype(user)) return diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index ea85c63b6b..3310a68b6f 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -40,6 +40,7 @@ var/auth_weapons = 0 // checks if it can shoot people that have a weapon they aren't authorized to have var/stun_all = 0 // if this is active, the turret shoots everything that isn't security or head of staff var/check_anomalies = 1 // checks if it can shoot at unidentified lifeforms (ie xenos) + var/ai = 0 // if active, will shoot at anything not an AI or cyborg var/attacked = 0 // if set to 1, the turret gets pissed off and shoots at people nearby (unless they have sec access!) @@ -317,11 +318,20 @@ Neutralize All Unidentified Life Signs: []
"}, if(emagged) // if emagged, HOLY SHIT EVERYONE IS DANGEROUS beep boop beep targets += C else - - if (C.stat || C.handcuffed) // if the perp is handcuffed or dead/dying, no need to bother really continue // move onto next potential victim! + var/dst = get_dist(src, C) // if it's too far away, why bother? + if (dst > 12) + continue + + if(!istype(C, /mob/living/silicon) && ai) // If it's set to attack all nonsilicons, target them! + if(C.lying) + secondarytargets += C + else + targets += C + continue + if (istype(C, /mob/living/carbon/human)) // if the target is a human, analyze threat level if(src.assess_perp(C)<4) continue // if threat level < 4, keep going @@ -329,10 +339,6 @@ Neutralize All Unidentified Life Signs: []
"}, else if (istype(C, /mob/living/carbon/monkey) || istype(C, /mob/living/silicon)) continue // Don't target monkeys or borgs/AIs you dumb shit - var/dst = get_dist(src, C) // if it's too far away, why bother? - if (dst > 12) - continue - if (C.lying) // if the perp is lying down, it's still a target but a less-important target secondarytargets += C continue diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index f693944133..3ab582828e 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -301,6 +301,14 @@ if (href_list["showalerts"]) ai_alerts() + //Carn: holopad requests + if (href_list["jumptoholopad"]) + var/obj/machinery/hologram/holopad/H = locate(href_list["jumptoholopad"]) + if(stat == CONSCIOUS) + if(H) + H.attack_ai(src) //may as well recycle + else + src << "Unable to locate the holopad." if (href_list["lawc"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite var/L = text2num(href_list["lawc"]) From c849edc30dcb772086f43fe9ab30b76dc72d3e17 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Thu, 26 Apr 2012 22:41:39 +0100 Subject: [PATCH 03/21] TG: (Does not actually remove borg tasers) Secborgs no longer have a taser, but are now as fast as humans and are unpushable. This is just a test so don't go crazy. It (probably) won't be permanent. Nuke teleporter board now costs ten crystals. Revision: r3271 Author: kortgstation --- code/defines/mob/living/silicon/robot.dm | 5 +++-- code/game/gamemodes/game_mode.dm | 2 +- code/game/objects/items/robot_items.dm | 5 ++++- code/modules/mob/living/silicon/robot/robot.dm | 1 + code/modules/mob/living/silicon/robot/robot_movement.dm | 8 ++++++++ 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/code/defines/mob/living/silicon/robot.dm b/code/defines/mob/living/silicon/robot.dm index 885cd95443..f288e30c02 100644 --- a/code/defines/mob/living/silicon/robot.dm +++ b/code/defines/mob/living/silicon/robot.dm @@ -53,6 +53,7 @@ var/weaponlock_time = 120 var/lawupdate = 1 //Cyborgs will sync their laws with their AI by default var/lockcharge //Used when locking down a borg to preserve cell charge + var/speed = 0 //Cause sec borgs gotta go fast //No they dont! + var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them. var/channels = list() - var/modlock = 0 - var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them. \ No newline at end of file + var/modlock = 0 \ No newline at end of file diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index b78bf6cae6..740e747748 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -61,7 +61,7 @@ Devices and Tools; /obj/item/weapon/syndie/c4explosive:4:Low Power Explosive Charge, with Detonator; /obj/item/device/powersink:5:Powersink (DANGER!); /obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!); -/obj/item/weapon/circuitboard/teleporter:20:Teleporter Circuit Board; +/obj/item/weapon/circuitboard/teleporter:10:Teleporter Circuit Board; Whitespace:Seperator; Implants; /obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant; diff --git a/code/game/objects/items/robot_items.dm b/code/game/objects/items/robot_items.dm index bddae368bc..36001689c5 100644 --- a/code/game/objects/items/robot_items.dm +++ b/code/game/objects/items/robot_items.dm @@ -26,7 +26,10 @@ if (O.client) O.show_message("\red [user] has prodded [M] with an electrically-charged arm!", 1, "\red You hear someone fall", 2) - +/obj/item/borg/overdrive + name = "Overdrive" + icon = 'decals.dmi' + icon_state = "shock" /********************************************************************** HUD/SIGHT things diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index d09befdf8e..4a1104141b 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -136,6 +136,7 @@ if (sprite == "Non-Humanoid") src.icon_state = "bloodhound" modtype = "Sec" + //speed = -1 Secborgs have nerfed tasers now, so the speed boost is not necessary channels = list("Security" = 1) //feedback_inc("cyborg_security",1) diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm index f0a907d05d..74522c2b0d 100644 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -5,3 +5,11 @@ if(J.allow_thrust(0.01)) return 1 if(..()) return 1 return 0 + + //No longer needed, but I'll leave it here incase we plan to re-use it. +/mob/living/silicon/robot/movement_delay() + var/tally = 0 //Incase I need to add stuff other than "speed" later + + tally = speed + + return tally From 4c7a2dc853f6c523fbfbb6e4b8aa62582fa23c7d Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Thu, 26 Apr 2012 22:42:56 +0100 Subject: [PATCH 04/21] TG: Fixed the objectives not being assigned properly when the Summon Guns spell is used. Removed the wizard's Nar-Sie grav pull entirely to reduce lag/it is strong enough as is. Fixed the gyrojet projectile name Removed the ion rifle from the armoury Revision: r3272 Author: kortgstation --- code/modules/projectiles/projectile/special.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index c8ead597ef..7821b66cd7 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -1,5 +1,5 @@ /obj/item/projectile/ion - name = "\improper Ion Bolt" + name = "ion bolt" icon_state = "ion" damage = 0 damage_type = BURN @@ -13,7 +13,7 @@ /obj/item/projectile/bullet/gyro - name ="\improper Rocket" + name ="explosive bolt" icon_state= "bolter" damage = 50 flag = "bullet" @@ -24,7 +24,7 @@ return 1 /obj/item/projectile/temp - name = "\improper Freeze Beam" + name = "freeze beam" icon_state = "ice_2" damage = 0 damage_type = BURN From 816e87aa402ca8413234b259cbc9778cedea7c71 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Thu, 26 Apr 2012 22:46:28 +0100 Subject: [PATCH 05/21] TG: Added folders and filing cabinets. Filing cabinet code jacked from BS12! Clipboard and paper fixes. Committed Nodrak's monkey vent crawl fix and removed that dumb disposal from the Sec entrance. Additionally fixed monkeys crawling when stunned. Revision: r3274 Author: petethegoat --- .../mob/living/carbon/monkey/powers.dm | 80 ++++++++++--------- 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/code/modules/mob/living/carbon/monkey/powers.dm b/code/modules/mob/living/carbon/monkey/powers.dm index e05cb05de2..9a8f95283e 100644 --- a/code/modules/mob/living/carbon/monkey/powers.dm +++ b/code/modules/mob/living/carbon/monkey/powers.dm @@ -3,48 +3,50 @@ set desc = "Enter an air vent and crawl through the pipe system." set category = "Monkey" - if(contents.len) - for(var/obj/item/carried_item in contents)//If the monkey got on objects. - if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant. - src << "\red You can't be carrying items or have items equipped when vent crawling!" - return - - if(!stat) - var/obj/machinery/atmospherics/unary/vent_pump/vent_found - for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src)) - if(!v.welded) - vent_found = v - else - src << "\red That vent is welded." - if(vent_found) - if(vent_found.network&&vent_found.network.normal_members.len) - var/list/vents = list() - for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in vent_found.network.normal_members) - if(temp_vent.loc == loc) - continue - vents.Add(temp_vent) - var/list/choices = list() - for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents) - if(vent.loc.z != loc.z) - continue - var/atom/a = get_turf_loc(vent) - choices.Add(a.loc) - var/turf/startloc = loc - var/obj/selection = input("Select a destination.", "Duct System") in choices - var/selection_position = choices.Find(selection) - if(loc==startloc) - var/obj/target_vent = vents[selection_position] - if(target_vent) - for(var/mob/O in oviewers(src, null)) - if ((O.client && !( O.blinded ))) - O.show_message(text("[src] scrambles into the ventillation ducts!"), 1) - loc = target_vent.loc + if(stat == CONSCIOUS) + if(!lying) + var/obj/machinery/atmospherics/unary/vent_pump/vent_found + for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src)) + if(!v.welded) + vent_found = v else - src << "You need to remain still while entering a vent." + src << "\red That vent is welded." + if(vent_found) + if(vent_found.network&&vent_found.network.normal_members.len) + var/list/vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in vent_found.network.normal_members) + if(temp_vent.loc == loc) + continue + vents.Add(temp_vent) + var/list/choices = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents) + if(vent.loc.z != loc.z) + continue + var/atom/a = get_turf_loc(vent) + choices.Add(a.loc) + var/turf/startloc = loc + var/obj/selection = input("Select a destination.", "Duct System") in choices + var/selection_position = choices.Find(selection) + if(loc==startloc) + if(contents.len) + for(var/obj/item/carried_item in contents)//If the monkey got on objects. + if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant. + src << "\red You can't be carrying items or have items equipped when vent crawling!" + return + var/obj/target_vent = vents[selection_position] + if(target_vent) + for(var/mob/O in oviewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("[src] scrambles into the ventillation ducts!"), 1) + loc = target_vent.loc + else + src << "You need to remain still while entering a vent." + else + src << "This vent is not connected to anything." else - src << "This vent is not connected to anything." + src << "You must be standing on or beside an air vent to enter it." else - src << "You must be standing on or beside an air vent to enter it." + src << "You can't vent crawl while you're stunned!" else src << "You must be conscious to do this!" return \ No newline at end of file From b67bfc8edc326efb7502df2fae448fc5ed695b56 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Thu, 26 Apr 2012 22:50:50 +0100 Subject: [PATCH 06/21] TG: Fixes tensioner values having one too many zeros in it. Adds deathsquad, ninja, and aliens to actually working tensioner options. Fixes deathsquad radios Disables the requirement on the deathsquad shuttle for the sent_stike_team var to have been set Fixes the syndicate shuttle position on the map being a little too short. (It's never been used, has it?) Revision: r3276 Author: VivianFoxfoo --- code/game/syndicate_specops_shuttle.dm | 8 ++++---- code/modules/admin/verbs/diagnostics.dm | 8 ++++++++ code/modules/admin/verbs/striketeam_syndicate.dm | 3 ++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/code/game/syndicate_specops_shuttle.dm b/code/game/syndicate_specops_shuttle.dm index 2bef199b1c..8dbfb79ba2 100644 --- a/code/game/syndicate_specops_shuttle.dm +++ b/code/game/syndicate_specops_shuttle.dm @@ -29,7 +29,7 @@ var/syndicate_elite_shuttle_timeleft = 0 if(announcer) announcer.say(message) // message = "ARMORED SQUAD TAKE YOUR POSITION ON GRAVITY LAUNCH PAD" - announcer.say(message) + // announcer.say(message) while(syndicate_elite_shuttle_time - world.timeofday > 0) var/ticksleft = syndicate_elite_shuttle_time - world.timeofday @@ -192,9 +192,9 @@ var/syndicate_elite_shuttle_timeleft = 0 user << "\red Access Denied." return - if (sent_syndicate_strike_team == 0) - usr << "\red The strike team has not yet deployed." - return +// if (sent_syndicate_strike_team == 0) +// usr << "\red The strike team has not yet deployed." +// return if(..()) return diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index 3085e77bdb..ebce8059bd 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -82,6 +82,7 @@ usr << "\blue @[target.x],[target.y] ([GM.group_multiplier]): O:[GM.oxygen] T:[GM.toxins] N:[GM.nitrogen] C:[GM.carbon_dioxide] w [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]" for(var/datum/gas/trace_gas in GM.trace_gases) usr << "[trace_gas.type]: [trace_gas.moles]" + //feedback_add_details("admin_verb","DAST") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! fix_next_move() set category = "Debug" @@ -213,6 +214,12 @@ alert(usr,"No players found. How the fuck are you calling this?","Tension Report") return 0 + var/numghosts = 0 + + for(var/mob/dead/observer/theghost in world) + numghosts ++ + + var/output = {"TENSION REPORT
General Statistics
Deaths: [tension_master.deaths]
@@ -220,6 +227,7 @@ Explosions: [tension_master.explosions]
Air alarms: [tension_master.air_alarms]
Adminhelps: [tension_master.adminhelps]
+Ghosts: [numghosts]

Current Status
Tension: [tension_master.score]
diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm index eccd7ea42a..8dc10f4da0 100644 --- a/code/modules/admin/verbs/striketeam_syndicate.dm +++ b/code/modules/admin/verbs/striketeam_syndicate.dm @@ -107,6 +107,7 @@ var/global/sent_syndicate_strike_team = 0 message_admins("\blue [key_name_admin(usr)] has spawned a Syndicate strike squad.", 1) log_admin("[key_name(usr)] used Spawn Syndicate Squad.") + //feedback_add_details("admin_verb","SDTHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/create_syndicate_death_commando(obj/spawn_location, syndicate_leader_selected = 0) var/mob/living/carbon/human/new_syndicate_commando = new(spawn_location.loc) @@ -144,7 +145,7 @@ var/global/sent_syndicate_strike_team = 0 camera.c_tag = real_name var/obj/item/device/radio/R = new /obj/item/device/radio/headset(src) - R.set_frequency(1337) //Same frequency as the syndicate team in Nuke mode. + R.set_frequency(SYND_FREQ) //Same frequency as the syndicate team in Nuke mode. equip_if_possible(R, slot_ears) equip_if_possible(new /obj/item/clothing/under/syndicate(src), slot_w_uniform) equip_if_possible(new /obj/item/clothing/shoes/swat(src), slot_shoes) From ecee064d2116f7c1ef15797169b9ae0cc8ab66a1 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Thu, 26 Apr 2012 22:53:52 +0100 Subject: [PATCH 07/21] TG: Fixes issue 420 Fixes issue 417 - Ghosts no longer block AI spawning - Grilles no longer shock you if you're in an exosuit Revision: r3279 Author: quartz235 --- code/modules/mob/transform_procs.dm | 4 ++-- code/modules/power/power.dm | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 8b20858d69..ebbaebdbd7 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -101,13 +101,13 @@ for(var/obj/effect/landmark/start/sloc in world) if (sloc.name != "AI") continue - if (locate(/mob) in sloc.loc) + if (locate(/mob/living) in sloc.loc) continue loc_landmark = sloc if (!loc_landmark) for(var/obj/effect/landmark/tripai in world) if (tripai.name == "tripai") - if(locate(/mob) in tripai.loc) + if(locate(/mob/living) in tripai.loc) continue loc_landmark = tripai if (!loc_landmark) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 22d810a801..c78517f387 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -437,6 +437,8 @@ //source is an object caused electrocuting (airlock, grille, etc) //No animations will be performed by this proc. /proc/electrocute_mob(mob/living/carbon/M as mob, var/power_source, var/obj/source, var/siemens_coeff = 1.0) + if(istype(M.loc,/obj/mecha)) + return 0 if(istype(M,/mob/living/carbon/human)) var/mob/living/carbon/human/H = M if(H.gloves) From c653d31ccbf949e6d182187ebbf0d70fb743947e Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Thu, 26 Apr 2012 22:57:19 +0100 Subject: [PATCH 08/21] TG: PDA messages now require an active messaging server. The admin rejuvenate command now stabilizes body temperature as well. Revision: r3282 Author: VivianFoxfoot --- code/game/objects/devices/PDA/PDA.dm | 14 +++++----- .../mob/living/silicon/pai/software.dm | 20 +++++++++++--- code/modules/research/message_server.dm | 26 ++++++++++++++++++- 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/code/game/objects/devices/PDA/PDA.dm b/code/game/objects/devices/PDA/PDA.dm index a5741d8e00..901fbecbcf 100755 --- a/code/game/objects/devices/PDA/PDA.dm +++ b/code/game/objects/devices/PDA/PDA.dm @@ -510,14 +510,14 @@ last_text = world.time -// var/AnsweringMS = 0 + var/AnsweringMS = 0 for (var/obj/machinery/message_server/MS in world) MS.send_pda_message("[P.owner]","[owner]","[t]") -// if(MS.active) -// AnsweringMS++ + if(MS.active) + AnsweringMS++ -// if(!AnsweringMS) -// return + if(!AnsweringMS) + return tnote += "→ To [P.owner]:
[t]
" P.tnote += "← From [owner]:
[t]
" @@ -544,7 +544,7 @@ // pAI Message else -/* var/AnsweringMS = 0 + var/AnsweringMS = 0 for (var/obj/machinery/message_server/MS in world) MS.send_pda_message("[P]","[src]","[t]") if(MS.active) @@ -552,7 +552,7 @@ if(!AnsweringMS) return -*/ + tnote += "→ To [P]:
[t]
" P.tnote += "← From [src]:
[t]
" diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index f5d9676013..30338c21fc 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -170,8 +170,14 @@ if(isnull(P)||P.toff) return + var/AnsweringMS = 0 for (var/obj/machinery/message_server/MS in world) MS.send_pda_message("[P.owner]","[src]","[t]") + if(MS.active) + AnsweringMS++ + + if(!AnsweringMS) + return tnote += "→ To [P.owner]:
[t]
" P.tnote += "← From [src]:
[t]
" @@ -195,12 +201,18 @@ else var/mob/living/silicon/pai/P = target - tnote += "→ To [P]:
[t]
" - P.tnote += "← From [src]:
[t]
" - - + var/AnsweringMS = 0 for (var/obj/machinery/message_server/MS in world) MS.send_pda_message("[P]","[src]","[t]") + if(MS.active) + AnsweringMS++ + + if(!AnsweringMS) + return + + + tnote += "→ To [P]:
[t]
" + P.tnote += "← From [src]:
[t]
" if (prob(15)) //Give the AI a chance of intercepting the message var/who = src diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 721c5f00f7..d4c5de435f 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -54,6 +54,16 @@ var/list/datum/data_pda_msg/pda_msgs = list() var/list/datum/data_rc_msg/rc_msgs = list() + var/active = 1 + +/obj/machinery/message_server/process() + if((stat & (BROKEN|NOPOWER)) && active) + active = 0 + return + + update_icon() + return + /obj/machinery/message_server/proc/send_pda_message(var/recipient = "",var/sender = "",var/message = "") pda_msgs += new/datum/data_pda_msg(recipient,sender,message) @@ -61,8 +71,22 @@ rc_msgs += new/datum/data_rc_msg(recipient,sender,message,stamp,id_auth) /obj/machinery/message_server/attack_hand(user as mob) - user << "\blue There seem to be some parts missing from this server. They should arrive on the station in a few days, give or take a few CentCom delays." +// user << "\blue There seem to be some parts missing from this server. They should arrive on the station in a few days, give or take a few CentCom delays." + user << "You toggle PDA message passing from [active ? "On" : "Off"] to [active ? "Off" : "On"]" + active = !active + update_icon() + return + +/obj/machinery/message_server/update_icon() + if((stat & (BROKEN|NOPOWER))) + icon_state = "server-nopower" + else if (!active) + icon_state = "server-off" + else + icon_state = "server-on" + + return /datum/feedback_variable From 250994484942351e4641084a6761f6f6bfd45c4b Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Thu, 26 Apr 2012 23:09:42 +0100 Subject: [PATCH 09/21] TG: Adding back in the Traffic Control Console to the telecomms satellite. Let's hope you guys don't fuck over the server with this! Committed Nodrak's work on Jobbans. (Thread: http://nanotrasen.com/phpBB3/viewtopic.php?f=16&t=8082) Some miscellaneous mapwork and runtime fixes. Revision: r3283 Author: vageyenaman --- code/game/jobs/job_controller.dm | 2 +- code/modules/admin/admin.dm | 396 ++++++++++++++++++--- code/modules/mob/living/silicon/pai/pai.dm | 7 +- 3 files changed, 347 insertions(+), 58 deletions(-) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 46502b1e55..e9f25656a1 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -232,7 +232,7 @@ var/global/datum/controller/occupations/job_master H.mind.assigned_role = rank H.mind.role_alt_title = null - if(!joined_late && rank != "Tourist") + if(!joined_late) var/obj/S = null for(var/obj/effect/landmark/start/sloc in world) if(sloc.name != rank) continue diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 5bcfd46628..912ddd89a9 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -196,82 +196,370 @@ var/global/BSACooldown = 0 if(href_list["jobban2"]) var/mob/M = locate(href_list["jobban2"]) - var/dat = "" - var/header = "Pick Job to ban this guy from.
" - var/body - var/jobs = "" + if(!M) //sanity + alert("Mob no longer exists!") + return + if(!M.ckey) //sanity + alert("Mob has no ckey") + return if(!job_master) usr << "Job Master has not been setup!" return - for(var/datum/job/job in job_master.occupations) - if(job.title == "Tourist") - continue + var/dat = "" + var/header = "Job-Ban Panel: [M.name]" + var/body + var/jobs = "" + + /***********************************WARNING!************************************ + The jobban stuff looks mangled and disgusting + But it looks beautiful in-game + -Nodrak + ************************************WARNING!***********************************/ + var/counter = 0 +//Regular jobs + //Command (Blue) + jobs += "" + jobs += "" + for(var/jobPos in command_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue + if(jobban_isbanned(M, job.title)) - jobs += "[dd_replacetext(job.title, " ", " ")] " + jobs += "" + counter++ else - jobs += "[dd_replacetext(job.title, " ", " ")] " + jobs += "" + counter++ -/* if(jobban_isbanned(M, "Captain")) These two are now jobs in the datums and should show up in the above code - jobs += "Captain " - else - jobs += "Captain " + if(counter >= 6) //So things dont get squiiiiished! + jobs += "" + counter = 0 + jobs += "
Command Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
" - if(jobban_isbanned(M, "AI")) - jobs += "AI " - else - jobs += "AI " -*/ - if(jobban_isbanned(M, "Syndicate")) - jobs += "
[dd_replacetext("Syndicate", " ", " ")] " - else - jobs += "
[dd_replacetext("Syndicate", " ", " ")] " + //Security (Red) + counter = 0 + jobs += "" + jobs += "" + for(var/jobPos in security_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue - if(jobban_isbanned(M, "Emergency Response Team")) - jobs += "
[dd_replacetext("Emergency Response Team", " ", " ")] " - else - jobs += "
[dd_replacetext("Emergency Response Team", " ", " ")] " + if(jobban_isbanned(M, job.title)) + jobs += "" + counter++ + else + jobs += "" + counter++ + if(counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + jobs += "
Security Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
" + //Engineering (Yellow) + counter = 0 + jobs += "" + jobs += "" + for(var/jobPos in engineering_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue + + if(jobban_isbanned(M, job.title)) + jobs += "" + counter++ + else + jobs += "" + counter++ + + if(counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + jobs += "
Engineering Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
" + + //Medical (White) + counter = 0 + jobs += "" + jobs += "" + for(var/jobPos in medical_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue + + if(jobban_isbanned(M, job.title)) + jobs += "" + counter++ + else + jobs += "" + counter++ + + if(counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + jobs += "
Medical Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
" + + //Science (Purple) + counter = 0 + jobs += "" + jobs += "" + for(var/jobPos in science_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue + + if(jobban_isbanned(M, job.title)) + jobs += "" + counter++ + else + jobs += "" + counter++ + + if(counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + jobs += "
Science Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
" + + //Civilian (Grey) + counter = 0 + jobs += "" + jobs += "" + for(var/jobPos in civilian_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue + + if(jobban_isbanned(M, job.title)) + jobs += "" + counter++ + else + jobs += "" + counter++ + + if(counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + jobs += "
Civilian Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
" + + //Non-Human (Green) + counter = 0 + jobs += "" + jobs += "" + for(var/jobPos in nonhuman_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue + + if(jobban_isbanned(M, job.title)) + jobs += "" + counter++ + else + jobs += "" + counter++ + + if(counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + + //pAI isn't technically a job, but it goes in here. if(jobban_isbanned(M, "pAI")) - jobs += "
pAI " + jobs += "" else - jobs += "
pAI " + jobs += "" - body = "
[jobs]

" + jobs += "
Non-human Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
pAIpAI
" + + //Antagonist (Orange) + var/isbanned_dept = jobban_isbanned(M, "Syndicate") + jobs += "" + jobs += "" + + //Traitor + if(jobban_isbanned(M, "traitor") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Changeling + if(jobban_isbanned(M, "changeling") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Nuke Operative + if(jobban_isbanned(M, "operative") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Revolutionary + if(jobban_isbanned(M, "revolutionary") || isbanned_dept) + jobs += "" + else + jobs += "" + + jobs += "" //Breaking it up so it fits nicer on the screen every 5 entries + + //Cultist + if(jobban_isbanned(M, "cultist") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Wizard + if(jobban_isbanned(M, "wizard") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Emergency Response Team + if(jobban_isbanned(M, "Emergency Response Team" || isbanned_dept)) + jobs += "" + else + jobs += "" + + +/* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment + if(jobban_isbanned(M, "malf AI") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Alien + if(jobban_isbanned(M, "alien candidate") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Infested Monkey + if(jobban_isbanned(M, "infested monkey") || isbanned_dept) + jobs += "" + else + jobs += "" +*/ + jobs += "
Antagonist Positions
[dd_replacetext("Traitor", " ", " ")][dd_replacetext("Traitor", " ", " ")][dd_replacetext("Changeling", " ", " ")][dd_replacetext("Changeling", " ", " ")][dd_replacetext("Nuke Operative", " ", " ")][dd_replacetext("Nuke Operative", " ", " ")][dd_replacetext("Revolutionary", " ", " ")][dd_replacetext("Revolutionary", " ", " ")]
[dd_replacetext("Cultist", " ", " ")][dd_replacetext("Cultist", " ", " ")][dd_replacetext("Wizard", " ", " ")][dd_replacetext("Wizard", " ", " ")][dd_replacetext("Emergency Response Team", " ", " ")][dd_replacetext("Emergency Response Team", " ", " ")][dd_replacetext("Malf AI", " ", " ")][dd_replacetext("Malf AI", " ", " ")][dd_replacetext("Alien", " ", " ")][dd_replacetext("Alien", " ", " ")][dd_replacetext("Infested Monkey", " ", " ")][dd_replacetext("Infested Monkey", " ", " ")]
" + + body = "[jobs]" dat = "[header][body]" - usr << browse(dat, "window=jobban2;size=600x180") + usr << browse(dat, "window=jobban2;size=800x450") return + //JOBBAN'S INNARDS if(href_list["jobban3"]) if (src.rank in list( "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" )) var/mob/M = locate(href_list["jobban4"]) - var/job = href_list["jobban3"] + if(!M) + alert("Mob no longer exists!") + return if ((M.client && M.client.holder && (M.client.holder.level > src.level))) alert("You cannot perform this action. You must be of a higher administrative rank!") return - if (jobban_isbanned(M, job)) - log_admin("[key_name(usr)] unbanned [key_name(M)] from [job]") - ban_unban_log_save("[key_name(usr)] unjobbanned [key_name(M)] from [job]") - M << "\redYou have been un-jobbanned by [usr.client.ckey] from [job]." - //feedback_inc("ban_job_unban",1) - message_admins("\blue [key_name_admin(usr)] unbanned [key_name_admin(M)] from [job]", 1) - jobban_unban(M, job) - href_list["jobban2"] = 1 - else - var/reason = input(usr,"Reason?","reason","griefer") as text|null - if(!reason) - return - ban_unban_log_save("[key_name(usr)] jobbanned [key_name(M)] from [job]. reason: [reason]") - log_admin("[key_name(usr)] banned [key_name(M)] from [job]") - //feedback_inc("ban_job",1) - M << "\redYou have been jobbanned by [usr.client.ckey] from [job]." - M << "\red The reason is: [reason]" - M << "\red Jobban can be lifted only on demand." - message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [job]", 1) - jobban_fullban(M, job, reason) - href_list["jobban2"] = 1 // lets it fall through and refresh - if(config.appeal_address) - M << "\red You may try to appeal this at [config.appeal_address]" + if(!job_master) + usr << "Job Master has not been setup!" + return + + //get jobs for department if specified, otherwise just returnt he one job in a list. + var/list/joblist = list() + switch(href_list["jobban3"]) + if("commanddept") + for(var/jobPos in command_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + if("securitydept") + for(var/jobPos in security_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + if("engineeringdept") + for(var/jobPos in engineering_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + if("medicaldept") + for(var/jobPos in medical_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + if("sciencedept") + for(var/jobPos in science_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + if("civiliandept") + for(var/jobPos in civilian_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + if("nonhumandept") + joblist += "pAI" + for(var/jobPos in nonhuman_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + else + joblist += href_list["jobban3"] + + //Create a list of unbanned jobs within joblist + var/list/notbannedlist = list() + for(var/job in joblist) + if(!jobban_isbanned(M, job)) + notbannedlist += job + + //Banning comes first + if(notbannedlist.len) //at least 1 unbanned job exists in joblist so we have stuff to ban. + var/reason = input(usr,"Reason?","Please State Reason","") as text|null + if(reason) + var/msg + for(var/job in notbannedlist) + ban_unban_log_save("[key_name(usr)] jobbanned [key_name(M)] from [job]. reason: [reason]") + log_admin("[key_name(usr)] banned [key_name(M)] from [job]") + feedback_inc("ban_job",1) + feedback_add_details("ban_job","- [job]") + jobban_fullban(M, job, "[reason]; By [usr.ckey] on [time2text(world.realtime)]") + if(!msg) msg = job + else msg += ", [job]" + message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg]", 1) + M << "\redYou have been jobbanned by [usr.client.ckey] from: [msg]." + M << "\red The reason is: [reason]" + M << "\red Jobban can be lifted only upon request." + if(config.appeal_address) + M << "\red You may try to appeal this at [config.appeal_address]" + href_list["jobban2"] = 1 // lets it fall through and refresh + return 1 + + //Unbanning joblist + //all jobs in joblist are banned already OR we didn't give a reason (implying they shouldn't be banned) + if(joblist.len) //at least 1 banned job exists in joblist so we have stuff to unban. + var/msg + for(var/job in joblist) + var/reason = jobban_isbanned(M, job) + if(!reason) continue //skip if it isn't jobbanned anyway + switch(alert("Job: '[job]' Reason: '[reason]' Un-jobban?","Please Confirm","Yes","No")) + if("Yes") + ban_unban_log_save("[key_name(usr)] unjobbanned [key_name(M)] from [job]") + log_admin("[key_name(usr)] unbanned [key_name(M)] from [job]") + feedback_inc("ban_job_unban",1) + feedback_add_details("ban_job_unban","- [job]") + jobban_unban(M, job) + if(!msg) msg = job + else msg += ", [job]" + else + continue + if(msg) + message_admins("\blue [key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]", 1) + M << "\redYou have been un-jobbanned by [usr.client.ckey] from [msg]." + href_list["jobban2"] = 1 // lets it fall through and refresh + return 1 + return 0 //we didn't do anything! if (href_list["boot2"]) if ((src.rank in list( "Moderator", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 6e0908137b..78883f7ebd 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -2,9 +2,10 @@ canmove = 0 src.loc = paicard card = paicard - if(!card.radio) - card.radio = new /obj/item/device/radio(src.card) - radio = card.radio + if(card) + if(!card.radio) + card.radio = new /obj/item/device/radio(src.card) + radio = card.radio ..() From 35388d501d115b0e23874b5111f2b1723dad50a7 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Thu, 26 Apr 2012 23:14:02 +0100 Subject: [PATCH 10/21] TG: Updates handheld-flashes so that they cannot break on their first use. Their chance of breaking is directly proportional to their frequency of use (ranges from 0% to 5%, used to be a blanket 2%). Their capacitor recharges one charge every 60 seconds. Once their 6 charges are used up, they temporarily stop working whilst their capacitor recharges. This should mean that flashes will last a long time with light use (defence/rev), but not for spamming (shitcurity). Can now job-ban people from entire departments through the jobban panel. Can now job-ban people even if they log out. Job-ban panel now informs you why people were banned from each job. Runtime fixes for some old jobban code that was preventing the above stuff. Committing some fixes Nodrak pointed out. Credits go to Nodrak for a lot of this. Revision: r3285 Author: elly1...@rocketmail.com --- code/game/machinery/rechargestation.dm | 1 + code/game/objects/devices/flash.dm | 281 +++++++++++++------------ code/modules/admin/banjob.dm | 22 +- 3 files changed, 163 insertions(+), 141 deletions(-) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 8ff52bdddd..06f4b2b319 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -89,6 +89,7 @@ if(istype(O,/obj/item/device/flash)) if(O:broken) O:broken = 0 + O:times_used = 0 O:icon_state = "flash" if(istype(O,/obj/item/weapon/gun/energy/taser/cyborg)) if(O:power_supply.charge < O:power_supply.maxcharge) diff --git a/code/game/objects/devices/flash.dm b/code/game/objects/devices/flash.dm index 0d0c9bbcd4..3485a6c940 100644 --- a/code/game/objects/devices/flash.dm +++ b/code/game/objects/devices/flash.dm @@ -10,170 +10,185 @@ item_state = "electronic" origin_tech = "magnets=2;combat=1" - var - shots_left = 5 - max_shots = 5 - broken = 0 + var/times_used = 0 //Number of times it's been used. + var/broken = 0 //Is the flash burnt out? + var/last_used = 0 //last world.time it was used. - proc - clown_check(var/mob/user) - recharge() +/obj/item/device/flash/proc/clown_check(var/mob/user) + if(user && (user.mutations & CLUMSY) && prob(50)) + user << "\red The Flash slips out of your hand." + user.drop_item() + return 0 + return 1 + +/obj/item/device/flash/proc/flash_recharge() + //capacitor recharges over time + for(var/i=0, i<3, i++) + if(last_used+600 > world.time) + break + last_used += 600 + times_used -= 2 + last_used = world.time + times_used = max(0,round(times_used)) //sanity +/obj/item/device/flash/attack(mob/living/M as mob, mob/user as mob) + if(!user || !M) return //sanity + M.attack_log += text("\[[time_stamp()]\] Has been flashed (attempt) with [src.name] by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to flash [M.name] ([M.ckey])") + + log_admin("ATTACK: [user] ([user.ckey]) flashed [M] ([M.ckey]) with [src].") + message_admins("ATTACK: [user] ([user.ckey]) flashed [M] ([M.ckey]) with [src].") + log_attack("[user.name] ([user.ckey]) Used the [src.name] to flash [M.name] ([M.ckey])") - attack(mob/living/M as mob, mob/user as mob) - M.attack_log += text("\[[time_stamp()]\] Has been flashed (attempt) with [src.name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to flash [M.name] ([M.ckey])") + if(!clown_check(user)) return + if(broken) + user.show_message("The [src.name] is broken.", 2) + return - log_admin("ATTACK: [user] ([user.ckey]) flashed [M] ([M.ckey]) with [src].") - message_admins("ATTACK: [user] ([user.ckey]) flashed [M] ([M.ckey]) with [src].") - log_attack("[user.name] ([user.ckey]) Used the [src.name] to flash [M.name] ([M.ckey])") + flash_recharge() - if(!clown_check(user)) return - if(broken) - user.show_message("\red The [src.name] is broken", 2) - return - - if(shots_left <= 0) - user.show_message("\red *click* *click*", 2) + //spamming the flash before it's fully charged (60seconds) increases the chance of it breaking + //It will never break on the first use. + switch(times_used) + if(0 to 5) + last_used = world.time + if(prob(times_used)) //if you use it 5 times in a minute it has a 10% chance to break! + broken = 1 + user << "The bulb has burnt out!" + icon_state = "flashburnt" + return + times_used++ + else //can only use it 5 times a minute + user.show_message("*click* *click*", 2) for(var/mob/K in viewers(usr)) K << 'empty.ogg' return + playsound(src.loc, 'flash.ogg', 100, 1) + var/flashfail = 0 - playsound(src.loc, 'flash.ogg', 100, 1) - shots_left-- - var/flashfail = 0 + if(iscarbon(M)) + var/safety = M:eyecheck() + if(safety <= 0) + M.Weaken(10) + flick("e_flash", M.flash) - if(iscarbon(M)) - var/safety = M:eyecheck() - if(safety <= 0) - M.Weaken(10) - flick("e_flash", M.flash) - - if(ishuman(M) && ishuman(user)) - if(user.mind in ticker.mode.head_revolutionaries) - var/revsafe = 0 - for(var/datum/organ/external/O in M.organs) - for(var/obj/item/weapon/implant/loyalty/L in O.implant) - if(L && L.implanted) - revsafe = 1 - break + if(ishuman(M) && ishuman(user) && M.stat!=DEAD) + if(user.mind && user.mind in ticker.mode.head_revolutionaries) + var/revsafe = 0 + for(var/obj/item/weapon/implant/loyalty/L in M) + if(L && L.implanted) + revsafe = 1 + break + M:update_mind() //give them a mind datum if they don't have one. won't work if they are logged out/ghosted or something. + if(M.mind) if(M.mind.has_been_rev) revsafe = 2 if(!revsafe) M.mind.has_been_rev = 1 ticker.mode.add_revolutionary(M.mind) else if(revsafe == 1) - user << "\red Something seems to be blocking the flash!" + user << "Something seems to be blocking the flash!" else - user << "\red This mind seems resistant to the flash!" - else - flashfail = 1 - - else if(issilicon(M)) - M.Weaken(rand(5,10)) - - if(isrobot(user)) - spawn(0) - var/atom/movable/overlay/animation = new(user.loc) - animation.layer = user.layer + 1 - animation.icon_state = "blank" - animation.icon = 'mob.dmi' - animation.master = user - flick("blspell", animation) - sleep(5) - del(animation) - - - if(!flashfail) - for(var/mob/O in viewers(user, null)) - O.show_message(text("\red [] blinds [] with the flash!", user, M)) + user << "This mind seems resistant to the flash!" + user << "This mind is so vacant that it is not susceptible to influence!" else - for(var/mob/O in viewers(user, null)) - O.show_message(text("\blue [] fails to blind [] with the flash!", user, M)) + flashfail = 1 + else if(issilicon(M)) + if(!M:flashproof()) + M.Weaken(rand(5,10)) + else + flashfail++ + if(isrobot(user)) + spawn(0) + var/atom/movable/overlay/animation = new(user.loc) + animation.layer = user.layer + 1 + animation.icon_state = "blank" + animation.icon = 'mob.dmi' + animation.master = user + flick("blspell", animation) + sleep(5) + del(animation) - if (prob(2)) - broken = 1 - user << "\red The bulb has burnt out!" - icon_state = "flashburnt" - - spawn(60) - recharge() - - return - - - attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0) - if(!emp) - if (!clown_check(user)) return - if(broken) - if(user) - user.show_message("\red The [src.name] is broken", 2) - return - - if(shots_left <= 0) - if(user) - user.show_message("\red *click* *click*", 2) - return - - playsound(src.loc, 'flash.ogg', 100, 1) - shots_left-- - + if(!flashfail) flick("flash2", src) - if(isrobot(user)) - spawn(0) - var/atom/movable/overlay/animation = new(user.loc) - animation.layer = user.layer + 1 - animation.icon_state = "blank" - animation.icon = 'mob.dmi' - animation.master = user - flick("blspell", animation) - sleep(5) - del(animation) + for(var/mob/O in viewers(user, null)) + O.show_message("[user] blinds [M] with the flash!") + else + for(var/mob/O in viewers(user, null)) + O.show_message("[user] fails to blind [M] with the flash!") + return - for(var/mob/living/carbon/M in oviewers(3, null)) - if(prob(50)) - if (locate(/obj/item/weapon/cloaking_device, M)) - for(var/obj/item/weapon/cloaking_device/S in M) - S.active = 0 - S.icon_state = "shield0" - var/safety = M:eyecheck() - if(!safety) - flick("flash", M.flash) - if (prob(2)) - broken = 1 - icon_state = "flashburnt" - if(user) - user << "\red The bulb has burnt out!" - return - spawn(60) - recharge() +/obj/item/device/flash/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0) + if(!user || !clown_check(user)) return + if(broken) + user.show_message("The [src.name] is broken", 2) return + flash_recharge() - emp_act(severity) - src.attack_self(null,1,1) - ..() + //spamming the flash before it's fully charged (60seconds) increases the chance of it breaking + //It will never break on the first use. + switch(times_used) + if(0 to 5) + if(prob(2*times_used)) //if you use it 5 times in a minute it has a 10% chance to break! + broken = 1 + user << "The bulb has burnt out!" + icon_state = "flashburnt" + return + times_used++ + else //can only use it 5 times a minute + user.show_message("*click* *click*", 2) + for(var/mob/K in viewers(usr)) + K << 'empty.ogg' + return + playsound(src.loc, 'flash.ogg', 100, 1) + flick("flash2", src) + if(user && isrobot(user)) + spawn(0) + var/atom/movable/overlay/animation = new(user.loc) + animation.layer = user.layer + 1 + animation.icon_state = "blank" + animation.icon = 'mob.dmi' + animation.master = user + flick("blspell", animation) + sleep(5) + del(animation) + for(var/mob/living/carbon/M in oviewers(3, null)) + if(prob(50)) + if (locate(/obj/item/weapon/cloaking_device, M)) + for(var/obj/item/weapon/cloaking_device/S in M) + S.active = 0 + S.icon_state = "shield0" + var/safety = M:eyecheck() + if(!safety) + flick("flash", M.flash) - clown_check(var/mob/user) - if((user.mutations & CLUMSY) && prob(50)) - user << "\red The Flash slips out of your hand." - user.drop_item() - return 0 - return 1 + return - - recharge() - if(max_shots > shots_left) - shots_left++ - if(max_shots > shots_left) - spawn(60)//more or less 10 seconds - recharge() - return \ No newline at end of file +/obj/item/device/flash/emp_act(severity) + if(broken) return + flash_recharge() + switch(times_used) + if(0 to 5) + if(prob(2*times_used)) + broken = 1 + icon_state = "flashburnt" + return + times_used++ + if(istype(loc, /mob/living/carbon)) + var/mob/living/carbon/M = loc + var/safety = M.eyecheck() + if(safety <= 0) + M.Weaken(10) + flick("e_flash", M.flash) + for(var/mob/O in viewers(M, null)) + O.show_message("[M] is blinded by the flash!") + ..() diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index d9cdc9be65..cd6ef81420 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -3,7 +3,7 @@ var jobban_keylist[0] //to store the keys & ranks /proc/jobban_fullban(mob/M, rank, reason) - if (!M || !M.key || !M.client) return + if (!M || !M.key) return jobban_keylist.Add(text("[M.ckey] - [rank] ## [reason]")) jobban_savebanfile() @@ -12,19 +12,25 @@ var jobban_keylist.Add(text("[ckey] - [rank]")) jobban_savebanfile() +//returns a reason if M is banned from rank, returns 0 otherwise /proc/jobban_isbanned(mob/M, rank) - if(_jobban_isbanned(M, rank)) return 1//for old jobban - if(M) + if(M && rank) + if(_jobban_isbanned(M, rank)) return "Reason Unspecified" //for old jobban if (guest_jobbans(rank)) if(config.guest_jobban && IsGuestKey(M.key)) - return 1 + return "Guest Job-ban" if(config.usewhitelist && !check_whitelist(M)) - return 1 + return "Whitelisted Job" for (var/s in jobban_keylist) if( findtext(s,"[M.ckey] - [rank]") ) - return 1 - return 0 + var/startpos = findtext(s, "## ")+3 + if(startpos && startpos Date: Thu, 26 Apr 2012 23:20:00 +0100 Subject: [PATCH 11/21] Compile fix. --- code/game/objects/devices/flash.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/game/objects/devices/flash.dm b/code/game/objects/devices/flash.dm index 3485a6c940..cbe3dfd176 100644 --- a/code/game/objects/devices/flash.dm +++ b/code/game/objects/devices/flash.dm @@ -97,10 +97,7 @@ flashfail = 1 else if(issilicon(M)) - if(!M:flashproof()) - M.Weaken(rand(5,10)) - else - flashfail++ + M.Weaken(rand(5,10)) if(isrobot(user)) spawn(0) From 925d0fee2f3fc6171b2d4910f744a3f863c55644 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Thu, 26 Apr 2012 23:27:16 +0100 Subject: [PATCH 12/21] TG: Some work on aliens. I'll finish this up soon. Gave riot shields a 99% chance of blocking pushers from pushing their wielders (given their wielder is not on the help intent). Added a projectile reflection mechanic. Ablative Armor will often, when the groin or torso is struck, deflect projectiles back to the tile they came from (not back the original shooter). Deflected projectiles aren't 100% accurate, so ablative armor can result in friendly fire. Hopefully stopped humans from waking up 1 second after they fall asleep. Revision: r3286 Author: vageyenaman --- .../mob/living/carbon/alien_humanoid.dm | 1 + .../carbon/alien/humanoid/caste/drone.dm | 1 + .../carbon/alien/humanoid/caste/hunter.dm | 1 + .../carbon/alien/humanoid/caste/sentinel.dm | 1 + .../living/carbon/alien/humanoid/humanoid.dm | 6 +++- .../mob/living/carbon/human/human_defense.dm | 32 ++++++++++++++++-- code/modules/projectiles/gun.dm | 1 + code/modules/projectiles/projectile.dm | 3 +- icons/mob/alien.dmi | Bin 34357 -> 35806 bytes 9 files changed, 42 insertions(+), 4 deletions(-) diff --git a/code/defines/mob/living/carbon/alien_humanoid.dm b/code/defines/mob/living/carbon/alien_humanoid.dm index 4c6ae07fbe..87722cdbea 100644 --- a/code/defines/mob/living/carbon/alien_humanoid.dm +++ b/code/defines/mob/living/carbon/alien_humanoid.dm @@ -9,6 +9,7 @@ var/icon/stand_icon = null var/icon/lying_icon = null + var/icon/resting_icon = null var/last_b_state = 1.0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index a812626b65..446f068632 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -10,6 +10,7 @@ src.verbs -= /mob/living/carbon/alien/humanoid/verb/ActivateHuggers src.stand_icon = new /icon('alien.dmi', "aliend_s") src.lying_icon = new /icon('alien.dmi', "aliend_l") + src.resting_icon = new /icon('alien.dmi', "aliend_sleep") src.icon = src.stand_icon update_clothing() src << "\blue Your icons have been generated!" diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index 1f6ae9bead..7c7e5eaedf 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -9,6 +9,7 @@ src.verbs -= /mob/living/carbon/alien/humanoid/verb/corrode src.stand_icon = new /icon('alien.dmi', "alienh_s") src.lying_icon = new /icon('alien.dmi', "alienh_l") + src.resting_icon = new /icon('alien.dmi', "alienh_sleep") src.icon = src.stand_icon update_clothing() src << "\blue Your icons have been generated!" diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index 7bd9b41b9b..ecc3b459e6 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -9,6 +9,7 @@ src.verbs += /mob/living/carbon/alien/humanoid/proc/corrode_target src.stand_icon = new /icon('alien.dmi', "aliens_s") src.lying_icon = new /icon('alien.dmi', "aliens_l") + src.resting_icon = new /icon('alien.dmi', "aliens_sleep") src.icon = src.stand_icon update_clothing() src << "\blue Your icons have been generated!" diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 8b261940ce..52e422c628 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -10,6 +10,7 @@ if(!istype(src, /mob/living/carbon/alien/humanoid/queen)) stand_icon = new /icon('alien.dmi', "alien_s") lying_icon = new /icon('alien.dmi', "alien_l") + resting_icon = new /icon('alien.dmi', "alienh_sleep") icon = stand_icon update_clothing() src << "\blue Your icons have been generated!" @@ -330,7 +331,10 @@ if (lying) if(update_icon) - icon = lying_icon + if(!resting) + icon = lying_icon + else + icon = resting_icon overlays += body_lying diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 26b1d58601..add68fd664 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -9,6 +9,31 @@ emp_act */ /mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone) + + if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor/laserproof)) + if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) + var/reflectchance = 40 - round(P.damage/3) + if(!(def_zone in list("chest", "groin"))) + reflectchance /= 2 + if(prob(reflectchance)) + visible_message("\red The [P.name] gets reflected by [src]'s [wear_suit.name]!") + + // Find a turf near or on the original location to bounce to + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) + var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) + var/turf/curloc = get_turf(src) + + // redirect the projectile + P.original = locate(new_x, new_y, P.z) + P.starting = curloc + P.current = curloc + P.firer = src + P.yo = new_y - curloc.y + P.xo = new_x - curloc.x + + return -1 // complete projectile permutation + if(check_shields(P.damage, "the [P.name]")) P.on_hit(src, 2) return 2 @@ -96,14 +121,17 @@ emp_act var/datum/organ/external/affecting = get_organ(ran_zone(user.zone_sel.selecting)) var/hit_area = affecting.display_name + + + if((user != src) && check_shields(I.force, "the [I.name]")) + return 0 + if(!affecting.destroyed) visible_message("\red [src] has been attacked in the [hit_area] with [I.name] by [user]!") else user << "What [affecting]?" return - if((user != src) && check_shields(I.force, "the [I.name]")) - return 0 var/armor = run_armor_check(affecting, "melee", "Your armor has protected you from a hit to the [hit_area].", "Your armor has softened hit to your [hit_area].") if(armor >= 2) return 0 if(!I.force) return 0 diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 665012518a..42fa63090f 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -189,6 +189,7 @@ in_chamber.original = targloc in_chamber.loc = get_turf(user) + in_chamber.starting = get_turf(user) user.next_move = world.time + 4 in_chamber.silenced = silenced in_chamber.current = curloc diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 46f415ac51..ebfd27c485 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -27,7 +27,8 @@ yo = null xo = null current = null - turf/original = null + turf/original = null // the original turf clicked + turf/starting = null // the projectile's starting turf p_x = 16 p_y = 16 // the pixel location of the tile that the player clicked. Default is the center diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi index d3de781e6c702577ca448f61a3d16de5d4aebc6f..1efa862fdc3cb6fa01d84a76ebb525c28efce799 100644 GIT binary patch delta 19599 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 R2D)_&@Nn~XeRe1$?Z3RDd>jA( delta 18139 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 Date: Thu, 26 Apr 2012 23:54:28 +0100 Subject: [PATCH 13/21] TG: Committing Hair-styles from Baystation and WJohnston's detective hair. There's now also a profile preview of your character in the character setup screen. Revision: r3288 Author: elly1...@rocketmail.com --- code/datums/helper_datums/getrev.dm | 5 +++++ .../mob/new_player/sprite_accessories.dm | 21 +++++++++++------- icons/mob/human_face.dmi | Bin 15677 -> 16062 bytes 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index e2ee0dc56b..300aee55f5 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -85,5 +85,10 @@ client/verb/showrevinfo() set name = "Show Server Revision" var/output = "Sorry, the revision info is unavailable." output = file2text("/home/bay12/live/data/gitcommit") + output += "Current Infomational Settings:
" + output += "Tensioner Status: [config.Tensioner_Active]
" + //output += "Current Tension: [tension_master.score]
" + //output += "Tensioner Debug Data: R1:[tension_master.round1] R2:[tension_master.round2] R3:[tension_master.round3] R4:[tension_master.round4] ES: [tension_master.eversupressed] CD: [tension_master.cooldown]
" + output += "Protect Authority Roles From Tratior: [config.protect_roles_from_antagonist]
" usr << browse(output,"window=revdata"); return diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index a0c5ec9815..b22fcc461e 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -58,6 +58,14 @@ name = "Longest Hair" icon_state = "hair_vlong" + longalt + name = "Long Hair Alt" + icon_state = "hair_longfringe" + + longestalt + name = "Longest Hair Alt" + icon_state = "hair_vlongfringe" + halfbang name = "Half-banged Hair" icon_state = "hair_halfbang" @@ -89,6 +97,7 @@ mohawk name = "Mohawk" icon_state = "hair_d" + choose_female = 0 // gross balding name = "Balding Hair" @@ -118,6 +127,7 @@ dreadlocks name = "Dreadlocks" icon_state = "hair_dreads" + choose_female = 0 // okay.jpg jensen name = "Adam Jensen Hair" @@ -132,14 +142,6 @@ icon_state = "bald" choose_female = 0 - longalt - name = "Long Hair Alt" - icon_state = "hair_longfringe" - - longestalt - name = "Longest Hair Alt" - icon_state = "hair_vlongfringe" - himecut name = "Hime Cut" icon_state = "hair_himecut" @@ -148,6 +150,9 @@ name = "Curls" icon_state = "hair_curls" + spikey + name = "Spikey" + icon_state = "hair_spikey" /* /////////////////////////////////// diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 10ab3bea56e34980de5b48d5270f35f912d79df6..77f41fd2bf9d3d6af9c4e049c55c38b9e2875d5d 100644 GIT binary patch literal 16062 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 Date: Fri, 27 Apr 2012 00:25:22 +0100 Subject: [PATCH 14/21] TG: Blood_DNA fixes. Bloodied icons rewritten to be overlays, not replacing the icons. Hopefully this should fix \icon[src] breaking everything. Bloodied hands/gloves don't transfer blood to infinite amounts of touched items. Please report any bugs! Revision: r3290 Author: elly1...@rocketmail.com --- code/game/atom_procs.dm | 2 +- code/modules/DetectiveWork/detective_work.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index 563bee56c8..cee3a362fb 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -337,7 +337,7 @@ else T.icon = initial(icon) - if(blood_DNA && !blood_DNA.len) + if(blood_DNA && istype(blood_DNA, /list) && !blood_DNA.len) del(blood_DNA) if(src.fingerprints && src.fingerprints.len) var/done = 0 diff --git a/code/modules/DetectiveWork/detective_work.dm b/code/modules/DetectiveWork/detective_work.dm index 70a7b60401..b24db154d7 100644 --- a/code/modules/DetectiveWork/detective_work.dm +++ b/code/modules/DetectiveWork/detective_work.dm @@ -4,8 +4,8 @@ atom/var/list/suit_fibers atom/proc/add_fibers(mob/living/carbon/human/M) if(M.gloves) - if(M.gloves.transfer_blood) - if(add_blood(M.gloves.bloody_hands_mob)) + if(M.gloves.transfer_blood) //bloodied gloves transfer blood to touched objects + if(add_blood(M.gloves.bloody_hands_mob)) //only reduces the bloodiness of our gloves if the item wasn't already bloody M.gloves.transfer_blood-- //world.log << "[M.gloves] added blood to [src] from [M.gloves.bloody_hands_mob]" else if(M.bloody_hands) From 2a25ae1ad53b9892b5c4ccdcf85a03651b92f70c Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Fri, 27 Apr 2012 00:27:50 +0100 Subject: [PATCH 15/21] TG: Changed blood application to make the weapon bloody, rather than the hands of the attacked mob. Improved the item blood sprite. Fixed a spelling error causing shoe blood to not be applied onmob. Improved a few random sprites. Revision: r3291 Author: petethegoat --- code/modules/mob/living/carbon/human/human_defense.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index add68fd664..f88b78787d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -144,7 +144,7 @@ emp_act var/bloody = 0 if((I.damtype == BRUTE) && prob(25 + is_sharp(I) * 50 + (I.force * 2))) - I.add_blood(src) + I.add_blood(src) //Make the weapon bloody, not the person. bloody = 1 var/turf/location = loc if(istype(location, /turf/simulated)) From 76e431435456726fc09e8a6db95763a51f6896c3 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Fri, 27 Apr 2012 00:30:34 +0100 Subject: [PATCH 16/21] TG: Work on detective scanners. Should hopefully fix some runtimes. Revision: r3296 Author: vageyenaman --- code/modules/DetectiveWork/detective_work.dm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/DetectiveWork/detective_work.dm b/code/modules/DetectiveWork/detective_work.dm index b24db154d7..6d42736009 100644 --- a/code/modules/DetectiveWork/detective_work.dm +++ b/code/modules/DetectiveWork/detective_work.dm @@ -190,6 +190,8 @@ obj/machinery/computer/forensic_scanning I = card if(I && istype(I,/obj/item/weapon/f_card)) card = I + if(!card.fingerprints) + card.fingerprints = list() if(card.amount > 1 || !card.fingerprints.len) usr << "\red ERROR: No prints/too many cards." if(card.loc == src) @@ -468,9 +470,10 @@ obj/machinery/computer/forensic_scanning proc/add_data_scanner(var/obj/item/device/detective_scanner/W) - for(var/i = 1, i <= W.stored.len, i++) - var/list/data = W.stored[i] - add_data(data[1],1,data[2],data[3],data[4]) + if(W.stored) + for(var/i = 1, i <= W.stored.len, i++) + var/list/data = W.stored[i] + add_data(data[1],1,data[2],data[3],data[4]) W.stored = list() for(var/atom/A in W.contents) del(A) From 2b9324f1ef1f9e9b6a40f2e2e3d18c5a08f18a14 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Fri, 27 Apr 2012 00:31:06 +0100 Subject: [PATCH 17/21] TG: Fix for ghosts being able to stuff things in to crematoriums Revision: r3297 Author: quartz235 --- code/game/machinery/morgue.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/morgue.dm b/code/game/machinery/morgue.dm index 48ed0675ae..8c65e0a72f 100644 --- a/code/game/machinery/morgue.dm +++ b/code/game/machinery/morgue.dm @@ -316,7 +316,7 @@ return /obj/structure/c_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) - if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src))) + if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src) || istype(user, /mob/dead))) return O.loc = src.loc if (user != O) From 7b119b422a18f98ea1672dbf477fc0edaa8b741a Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Fri, 27 Apr 2012 00:36:33 +0100 Subject: [PATCH 18/21] TG: Added Cheridan's hatchets! Buffed stamped packing slips to be worth 2 supply points. Revision: r3298 Author: petethegoat --- code/defines/obj/supplypacks.dm | 1 + code/game/events/EventProcs/spacevines.dm | 2 +- code/game/objects/storage/crates.dm | 17 +++++------------ code/game/supplyshuttle.dm | 5 +++-- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/code/defines/obj/supplypacks.dm b/code/defines/obj/supplypacks.dm index cc1940219e..2db7cbc9fc 100755 --- a/code/defines/obj/supplypacks.dm +++ b/code/defines/obj/supplypacks.dm @@ -366,6 +366,7 @@ "/obj/item/weapon/plantbgone", "/obj/item/weapon/plantbgone", "/obj/item/weapon/plantbgone", + "/obj/item/weapon/hatchet", "/obj/item/weapon/minihoe", "/obj/item/device/analyzer/plant_analyzer", "/obj/item/clothing/gloves/botanic_leather", diff --git a/code/game/events/EventProcs/spacevines.dm b/code/game/events/EventProcs/spacevines.dm index 8f279d51f0..a53210ac88 100644 --- a/code/game/events/EventProcs/spacevines.dm +++ b/code/game/events/EventProcs/spacevines.dm @@ -26,7 +26,7 @@ if(/obj/item/weapon/kitchen/utensil/knife) del src if(/obj/item/weapon/scalpel) del src if(/obj/item/weapon/fireaxe) del src -// if(/obj/item/weapon/hatchet) del src + if(/obj/item/weapon/hatchet) del src if(/obj/item/weapon/melee/energy) del src //less effective weapons diff --git a/code/game/objects/storage/crates.dm b/code/game/objects/storage/crates.dm index 0ad00b3a4c..39689a3eaa 100644 --- a/code/game/objects/storage/crates.dm +++ b/code/game/objects/storage/crates.dm @@ -144,17 +144,6 @@ icon_opened = "hydrocrateopen" icon_closed = "hydrocrate" density = 1 -/* New() // This stuff shouldn't be here, it should be in /datum/supply_packs/hydroponics - ..() - new /obj/item/weapon/plantbgone(src) - new /obj/item/weapon/plantbgone(src) - new /obj/item/weapon/plantbgone(src) - new /obj/item/weapon/minihoe(src) - new /obj/item/weapon/weedspray(src) - new /obj/item/weapon/weedspray(src) - new /obj/item/weapon/pestspray(src) - new /obj/item/weapon/pestspray(src) - new /obj/item/weapon/pestspray(src) */ /obj/structure/closet/crate/hydroponics/prespawned //This exists so the prespawned hydro crates spawn with their contents. @@ -170,6 +159,7 @@ new /obj/item/weapon/plantbgone(src) new /obj/item/weapon/plantbgone(src) new /obj/item/weapon/plantbgone(src) + new /obj/item/weapon/hatchet(src) new /obj/item/weapon/minihoe(src) // new /obj/item/weapon/weedspray(src) // new /obj/item/weapon/weedspray(src) @@ -217,6 +207,7 @@ for(var/obj/O in src) O.loc = get_turf(src) + for(var/mob/M in src) M.loc = get_turf(src) @@ -225,9 +216,11 @@ /obj/structure/closet/crate/close() playsound(src.loc, 'click.ogg', 15, 1, -3) + for(var/obj/O in get_turf(src)) if(O.density || O.anchored || O == src) continue O.loc = src + icon_state = icon_closed src.opened = 0 @@ -286,7 +279,7 @@ user.drop_item() if(W) W.loc = src.loc - else if(istype(W,/obj/item/weapon/packageWrap)) + else if(istype(W, /obj/item/weapon/packageWrap)) return else return attack_hand(user) diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index d4e838e9f9..5dfd4e0d8b 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -7,7 +7,7 @@ #define SUPPLY_POINTSPERCRATE 5 //Points per crate sent back. #define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station #define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock -#define SUPPLY_POINTSPERSLIP 1 //points per packing slip sent back stamped. +#define SUPPLY_POINTSPERSLIP 2 //points per packing slip sent back stamped. var/supply_shuttle_moving = 0 var/supply_shuttle_at_station = 0 @@ -37,7 +37,7 @@ var/list/supply_groups = new() //SUPPLY PACKS MOVED TO /code/defines/obj/supplypacks.dm /obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY - name = "Plastic flaps" + name = "\improper Plastic flaps" desc = "Durable plastic flaps." icon = 'stationobjs.dmi' //Change this. icon_state = "plasticflaps" @@ -162,6 +162,7 @@ var/list/supply_groups = new() supply_shuttle_moving = 0 send_supply_shuttle() + /proc/supply_can_move() if(supply_shuttle_moving) return 0 From df1677f89663d871cc9e56cc18c2fa75be68e1b4 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Fri, 27 Apr 2012 00:43:41 +0100 Subject: [PATCH 19/21] TG: Added directionals for husks. Added Khodoque's improved bucket and wallet sprites. Revision: r3299 Author: petethegoat --- icons/mob/human.dmi | Bin 20417 -> 22842 bytes icons/obj/storage.dmi | Bin 50713 -> 51265 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi index 5664fa370e50e504183ccf6ff661b1ce98003cf8..492f2537116fd24ef5b54cf6a97debb78dd3fc6b 100644 GIT binary patch literal 22842 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 literal 20417 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 DsZKOkkC~80dd2T=AuBwJcFcJzn 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 literal 50713 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 From f194067b2028a2c6727204a36e4bff90c2185025 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Fri, 27 Apr 2012 00:45:12 +0100 Subject: [PATCH 20/21] TG: Fixed the runtime involving the scanners, uncommented his tools. Revision: r3300 Author: joe.heinemeyer --- code/modules/DetectiveWork/detective_work.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/DetectiveWork/detective_work.dm b/code/modules/DetectiveWork/detective_work.dm index 6d42736009..b0bd660453 100644 --- a/code/modules/DetectiveWork/detective_work.dm +++ b/code/modules/DetectiveWork/detective_work.dm @@ -7,11 +7,9 @@ atom/proc/add_fibers(mob/living/carbon/human/M) if(M.gloves.transfer_blood) //bloodied gloves transfer blood to touched objects if(add_blood(M.gloves.bloody_hands_mob)) //only reduces the bloodiness of our gloves if the item wasn't already bloody M.gloves.transfer_blood-- - //world.log << "[M.gloves] added blood to [src] from [M.gloves.bloody_hands_mob]" else if(M.bloody_hands) if(add_blood(M.bloody_hands_mob)) M.bloody_hands-- - //world.log << "[M] added blood to [src] from [M.bloody_hands_mob]" if(!suit_fibers) suit_fibers = list() var/fibertext var/item_multiplier = istype(src,/obj/item)?1.2:1 From b72e529a36ae970d612ba10b5242d217e41437c5 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Sat, 28 Apr 2012 17:26:24 +0100 Subject: [PATCH 21/21] Changes SYND_FREQ to NUKE_FREQ for syndicate strike team. --- code/modules/admin/verbs/striketeam_syndicate.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm index 8dc10f4da0..a07c386093 100644 --- a/code/modules/admin/verbs/striketeam_syndicate.dm +++ b/code/modules/admin/verbs/striketeam_syndicate.dm @@ -145,7 +145,7 @@ var/global/sent_syndicate_strike_team = 0 camera.c_tag = real_name var/obj/item/device/radio/R = new /obj/item/device/radio/headset(src) - R.set_frequency(SYND_FREQ) //Same frequency as the syndicate team in Nuke mode. + R.set_frequency(NUKE_FREQ) //Same frequency as the syndicate team in Nuke mode. equip_if_possible(R, slot_ears) equip_if_possible(new /obj/item/clothing/under/syndicate(src), slot_w_uniform) equip_if_possible(new /obj/item/clothing/shoes/swat(src), slot_shoes)