diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 7640a263f1..5e46cf6e39 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -312,25 +312,25 @@ datum/mind if(!def_value)//If it's a custom objective, it will be an empty string. def_value = "custom" - var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate","decapitate", "debrain", "protection", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "custom") + var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate","decapitate", "debrain", "protection", "frame", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "custom") if (!new_obj_type) return var/datum/objective/new_objective = null switch (new_obj_type) - if ("assassinate","protect","debrain","decapitate") + if ("assassinate","protection", "frame", "debrain","decapitate") //To determine what to name the objective in explanation text. - var/objective_type_capital = uppertext(copytext(new_obj_type, 1,2))//Capitalize first letter. - var/objective_type_text = copytext(new_obj_type, 2)//Leave the rest of the text. - var/objective_type = "[objective_type_capital][objective_type_text]"//Add them together into a text string. +// var/objective_type_capital = uppertext(copytext(new_obj_type, 1,2))//Capitalize first letter. +// var/objective_type_text = copytext(new_obj_type, 2)//Leave the rest of the text. +// var/objective_type = "[objective_type_capital][objective_type_text]"//Add them together into a text string. var/list/possible_targets = list("Free objective") for(var/datum/mind/possible_target in ticker.minds) - if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human)) + if ((possible_target != src) && possible_target.current && istype(possible_target.current, /mob/living/carbon/human)) possible_targets += possible_target.current var/mob/def_target = null - var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protection, /datum/objective/debrain, /datum/objective/decapitate) + var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protection, /datum/objective/frame, /datum/objective/debrain, /datum/objective/decapitate) if (objective&&(objective.type in objective_list) && objective:target) def_target = objective:target.current @@ -339,16 +339,11 @@ datum/mind var/objective_path = text2path("/datum/objective/[new_obj_type]") if (new_target == "Free objective") - new_objective = new objective_path + new_objective = new objective_path(null,"MODE",null) new_objective.owner = src - new_objective:target = null - new_objective.explanation_text = "Free objective" else - new_objective = new objective_path + new_objective = new objective_path(null,"MODE",new_target:mind) new_objective.owner = src - new_objective:target = new_target:mind - //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. - new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:role_alt_title ? new_target:mind:role_alt_title : new_target:mind:assigned_role)]." if ("hijack") new_objective = new /datum/objective/hijack @@ -367,13 +362,14 @@ datum/mind new_objective.owner = src if ("steal") - var/list/possibilities = typesof(/datum/objective/steal) - /datum/objective/steal + var/list/possibilities = GenerateTheft(assigned_role,src) + var/list/temp_poss = possibilities[1] var/list/choices = list() - for(var/datum/objective/steal/name in possibilities) - choices[name.explanation_text] = name + for(var/datum/objective/steal/steal in temp_poss) + choices["[steal.steal_target]"] = steal var/new_target = input("Select target:", "Objective target") as null|anything in choices if (!new_target) return - new_objective = new choices[new_target] + new_objective = choices[new_target] new_objective.owner = src if("download","capture","absorb") diff --git a/code/game/gamemodes/newobjective.dm b/code/game/gamemodes/newobjective.dm index 4eecedad28..0aacfc362c 100644 --- a/code/game/gamemodes/newobjective.dm +++ b/code/game/gamemodes/newobjective.dm @@ -1167,6 +1167,10 @@ datum return 1 decapitate + New(var/text,var/joba,var/datum/mind/targeta) + target = targeta + job = joba + explanation_text = "Remove and recover the head of [target.current.real_name], the [target.assigned_role]." proc/find_target() ..() if(target && target.current) @@ -1249,6 +1253,11 @@ datum debrain//I want braaaainssss + New(var/text,var/joba,var/datum/mind/targeta) + target = targeta + job = joba + explanation_text = "Remove and recover the brain of [target.current.real_name], the [target.assigned_role]." + proc/find_target() ..() if(target && target.current) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index f65634c70b..e990a6d7d6 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -14,10 +14,10 @@ i++ if(i%2 == 0) color = "#f2f2f2" - var/real = (M.real_name == M.original_name ? M.real_name : "[M.original_name] (as [M.real_name])") + var/real = (M.real_name == M.original_name ? "[M.name]/[M.real_name]" : "[M.original_name] (as [M.name]/[M.real_name])") var/turf/T = get_turf(M) var/client_key = (M.key? M.key : "No key") - dat += "[M.name] \[[real]\]
[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])" // Adds current name + dat += "[real]
[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])" // Adds current name if(isobserver(M)) dat += "Ghost" else if(isalien(M)) diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index 696fa42ce6..943205551f 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -28,7 +28,7 @@ alert("Admin jumping disabled") return -/client/proc/jumptomob() +/client/proc/jumptomob(var/mob/M in world) set category = "Admin" set name = "Jump to Mob" @@ -37,12 +37,13 @@ return if(config.allow_admin_jump) - var/mobs = getmobs() - var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in mobs - if(!selection) - return - - var/mob/M = mobs[selection] + if(!M || !istype(M)) + var/mobs = getmobs() + var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in mobs + if(!selection) + return + + M = mobs[selection] var/mob/A = src.mob var/turf/T = get_turf(M) if(T && isturf(T)) @@ -94,7 +95,7 @@ else alert("Admin jumping disabled") -/client/proc/Getmob() +/client/proc/Getmob(var/mob/M) set category = "Admin" set name = "Get Mob" set desc = "Mob to teleport" @@ -102,11 +103,12 @@ src << "Only administrators may use this command." return if(config.allow_admin_jump) - var/mobs = getmobs() - var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in mobs - var/mob/M = mobs[selection] - if(!istype(M)) - return + if(!M || !istype(M)) + var/mobs = getmobs() + var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in mobs + M = mobs[selection] + if(!istype(M)) + return var/mob/A = src.mob var/turf/T = get_turf(A) if(T && isturf(T)) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 562403ee83..0899491ab8 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -107,16 +107,9 @@ break else C.images += image(tempHud,perp,"hudunknown") - if(hasorgans(perp)) - for(var/datum/organ/external/E in perp) - for(var/obj/item/weapon/implant/I in E.implant) - if(I.implanted) - if(istype(I,/obj/item/weapon/implant/tracking)) - C.images += image(tempHud,perp,"hud_imp_tracking") - if(istype(I,/obj/item/weapon/implant/loyalty)) - C.images += image(tempHud,perp,"hud_imp_loyal") - else - for(var/obj/item/weapon/implant/I in perp) + for(var/named in perp.organs) + var/datum/organ/external/E = perp.organs[named] + for(var/obj/item/weapon/implant/I in E.implant) if(I.implanted) if(istype(I,/obj/item/weapon/implant/tracking)) C.images += image(tempHud,perp,"hud_imp_tracking") diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index ed1cfbb35b..b681d2f3aa 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -999,7 +999,7 @@ var/blood_max = 0 for(var/name in organs) var/datum/organ/external/temp = organs[name] - if(!temp.bleeding) + if(!temp.bleeding || temp.robot) //THAT WAS DUMB. continue // else // if(prob(35)) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 09d9b7cd6b..7e0e99380d 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -1021,3 +1021,29 @@ parts -= picked updatehealth() UpdateDamageIcon() + +/mob/living/carbon/monkey/getBruteLoss() + var/amount = 0.0 + for(var/name in organs) + var/datum/organ/external/O = organs[name] + if(!O.robot) amount+= O.brute_dam + return amount + +/mob/living/carbon/monkey/adjustBruteLoss(var/amount, var/used_weapon = null) + if(amount > 0) + take_overall_damage(amount, 0, used_weapon) + else + heal_overall_damage(-amount, 0) + +/mob/living/carbon/monkey/getFireLoss() + var/amount = 0.0 + for(var/name in organs) + var/datum/organ/external/O = organs[name] + if(!O.robot) amount+= O.burn_dam + return amount + +/mob/living/carbon/monkey/adjustFireLoss(var/amount,var/used_weapon = null) + if(amount > 0) + take_overall_damage(0, amount, used_weapon) + else + heal_overall_damage(0, -amount) \ No newline at end of file diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index b455df6606..bb992f8705 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -95,6 +95,13 @@ L |= E:contents for(var/obj/item/smallDelivery/S in L) L |= S.wrapped + if(hasorgans(src)) + for(var/named in src:organs) + var/datum/organ/external/O = src:organs[named] + for(var/obj/item/weapon/implant/I in O.implant) + L |= I + if(istype(I, /obj/item/weapon/implant/compressed)) + L |= I:scanned for(var/obj/B in L) if(B.type == A) @@ -114,6 +121,13 @@ L |= E:contents for(var/obj/item/smallDelivery/S in L) L |= S.wrapped + if(hasorgans(src)) + for(var/named in src:organs) + var/datum/organ/external/O = src:organs[named] + for(var/obj/item/weapon/implant/I in O.implant) + L |= I + if(istype(I, /obj/item/weapon/implant/compressed)) + L |= I:scanned for(var/obj/item/weapon/reagent_containers/B in L) for(var/datum/reagent/R in B.reagents.reagent_list) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index dabef32f65..95de6528c0 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -339,7 +339,7 @@ for(var/mob/M in listening) eavesdroppers.Remove(M) for(var/mob/M in eavesdroppers) - if(M.stat || !M.client) + if(M.stat || !M.client || istype(M, /mob/living/silicon/pai) || M == src) eavesdroppers.Remove(M) for (var/obj/O in ((W | contents)-used_radios)) diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 15d2456398..b1893efabc 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -16,8 +16,8 @@ if (length(message) >= 2) if ((copytext(message, 1, 3) == ":s") || (copytext(message, 1, 3) == ":S")) - if(istype(src, /mob/living/silicon/pai)) - return ..(message) +// if(istype(src, /mob/living/silicon/pai)) +// return ..(message) message = copytext(message, 3) message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) robot_talk(message)