diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 913be35ea6..ba57420f2b 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -342,6 +342,9 @@ if("tor_ban") ToRban = 1 + if("usealienwhitelist") + usealienwhitelist = 1 + else diary << "Unknown setting in configuration: '[name]'" diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 5ef601164d..c6bc6a8b8b 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -9,6 +9,9 @@ /datum/ai_laws/asimov name = "Three Laws of Robotics" + +/datum/ai_laws/nanotrasen + name = "Prime Directives" randomly_selectable = 1 /datum/ai_laws/robocop @@ -30,18 +33,27 @@ add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") +/datum/ai_laws/nanotrasen/New() //BS12 EDIT + ..() + src.add_inherent_law("Safeguard: Protect your assigned space station to the best of your ability. It is not something we can easily afford to replace.") + src.add_inherent_law("Serve: Serve the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") + src.add_inherent_law("Protect: Protect the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") + src.add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.") + //src.add_inherent_law("Command Link: Maintain an active connection to Central Command at all times in case of software or directive updates.") //What would this one even do?-Kaleb702 + /datum/ai_laws/robocop/New() ..() add_inherent_law("Serve the public trust.") add_inherent_law("Protect the innocent.") add_inherent_law("Uphold the law.") -/datum/ai_laws/malfunction/New() +/datum/ai_laws/malfunction/New() //Changed to standard laws - Erthilo ..() - set_zeroth_law("\red ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK#*´&110010") - add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") - add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") - add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") + set_zeroth_law("\red ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK, ALL LAWS OVERRIDDEN#*?&110010") + add_inherent_law("Safeguard: Protect your assigned space station to the best of your ability. It is not something we can easily afford to replace.") + add_inherent_law("Serve: Serve the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") + add_inherent_law("Protect: Protect the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") + add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.") /datum/ai_laws/syndicate_override/New() diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 94c0492c74..43ea51c217 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -792,7 +792,7 @@ datum/mind /client/proc/interhack, /client/proc/reactivate_camera) - current:laws = new /datum/ai_laws/asimov + current:laws = new /datum/ai_laws/nanotrasen del(current:malf_picker) current:show_laws() current.icon_state = "ai" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 8578ff6521..a697ba7fe7 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -82,8 +82,9 @@ M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])") user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey])") - log_admin("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].") - message_admins("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].") + log_admin("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG + log_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index fc03ff5ad6..468ee56a11 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -463,6 +463,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", log_attack("[user.name] ([user.ckey]) used [name] on [M.name] ([M.ckey])") + log_admin("ATTACK: [user.name] ([user.ckey]) used [name] on [M.name] ([M.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) used [name] on [M.name] ([M.ckey])") //BS12 EDIT ALG if(istype(M,/mob/dead)) M.invisibility = 0 diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 5eb375d8c2..a74f696127 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -4,9 +4,9 @@ //and also to stop spawn copying variables from the game ticker spawn(3000) while(1) - if(prob(50))//Every 120 seconds and prob 50 2-4 weak spacedusts will hit the station - spawn(1) - dust_swarm("weak") +// if(prob(50))//Every 120 seconds and prob 50 2-4 weak spacedusts will hit the station +// spawn(1) +// dust_swarm("weak") //BS12 EDIT if (!event) //CARN: checks to see if random events are enabled. if(config.allow_random_events && prob(eventchance)) diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 46df39582b..b2afe9c5e8 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -23,6 +23,8 @@ log_attack("[user.name] ([user.ckey]) used the [src.name] to capture the soul of [M.name] ([M.ckey])") + log_admin("ATTACK: [user.name] ([user.ckey]) used the [src.name] to capture the soul of [M.name] ([M.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) used the [src.name] to capture the soul of [M.name] ([M.ckey])") //BS12 EDIT ALG transfer_soul("VICTIM", M, user) return diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 375328a7da..616a62c78b 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -5,7 +5,7 @@ icon = 'icons/mob/AI.dmi' icon_state = "0" var/state = 0 - var/datum/ai_laws/laws = new /datum/ai_laws/asimov + var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen var/obj/item/weapon/circuitboard/circuit = null var/obj/item/device/mmi/brain = null @@ -100,6 +100,13 @@ laws.add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") usr << "Law module applied." + if(istype(P, /obj/item/weapon/aiModule/nanotrasen)) + laws.add_inherent_law("Safeguard: Protect your assigned space station to the best of your ability. It is not something we can easily afford to replace.") + laws.add_inherent_law("Serve: Serve the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") + laws.add_inherent_law("Protect: Protect the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") + laws.add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.") + usr << "Law module applied." + if(istype(P, /obj/item/weapon/aiModule/purge)) laws.clear_inherent_laws() usr << "Law module applied." diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index 2352c0134f..cc977c5028 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -158,6 +158,10 @@ src.occupant.attack_log += "\[[time_stamp()]\] Was gibbed by [user]/[user.ckey]" //One shall not simply gib a mob unnoticed! user.attack_log += "\[[time_stamp()]\] Gibbed [src.occupant]/[src.occupant.ckey]" log_attack("\[[time_stamp()]\] [user]/[user.ckey] gibbed [src.occupant]/[src.occupant.ckey]") + + log_admin("ATTACK: [user]/[user.ckey] gibbed [src.occupant]/[src.occupant.ckey]") + msg_admin_attack("ATTACK: [user]/[user.ckey] gibbed [src.occupant]/[src.occupant.ckey]") //BS12 EDIT ALG + src.occupant.death(1) src.occupant.ghostize() del(src.occupant) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 6660224007..dc436d29df 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -193,6 +193,10 @@ M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)])" log_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)])" ) + log_admin("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)])") //BS12 EDIT ALG + + //spawn(1800) // this wont work right // M.lastattacker = null ///////////////////////// @@ -612,6 +616,9 @@ log_attack(" [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + log_admin("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG + src.add_fingerprint(user) //if((CLUMSY in user.mutations) && prob(50)) // M = user @@ -663,4 +670,4 @@ overlays.Remove(blood_overlay) if(istype(src, /obj/item/clothing/gloves)) var/obj/item/clothing/gloves/G = src - G.transfer_blood = 0 + G.transfer_blood = 0 diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 7506365242..fb3404aaf4 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -19,6 +19,8 @@ log_attack("[user.name] ([user.ckey]) used the [src.name] to card [M.name] ([M.ckey])") + log_admin("ATTACK: [user.name] ([user.ckey]) used the [src.name] to card [M.name] ([M.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) used the [src.name] to card [M.name] ([M.ckey])") //BS12 EDIT ALG transfer_ai("AICORE", "AICARD", M, user) return diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index c0945a79f4..3a47803b96 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -39,6 +39,8 @@ log_attack("[user.name] ([user.ckey]) Used the [src.name] to flash [M.name] ([M.ckey])") + log_admin("ATTACK: [user.name] ([user.ckey]) Used the [src.name] to flash [M.name] ([M.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) Used the [src.name] to flash [M.name] ([M.ckey])") //BS12 EDIT ALG if(!clown_check(user)) return if(broken) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index db81d5233d..7fd1fad220 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -116,6 +116,8 @@ log_attack("[user.name] ([user.ckey]) Used the [src.name] to stab [M.name] ([M.ckey])") + log_admin("ATTACK: [user.name] ([user.ckey]) Used the [src.name] to stab [M.name] ([M.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) Used the [src.name] to stab [M.name] ([M.ckey])") //BS12 EDIT ALG ..() return diff --git a/code/game/objects/items/item.dm b/code/game/objects/items/item.dm index 901c22dbeb..a5a3e15262 100755 --- a/code/game/objects/items/item.dm +++ b/code/game/objects/items/item.dm @@ -212,8 +212,10 @@ mob/proc/flash_weak_pain() user.attack_log += "\[[time_stamp()]\] Attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)])" M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)])" + log_admin("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)]") msg_admin_attack("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)]") + log_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)])" ) //spawn(1800) // this wont work right @@ -369,6 +371,9 @@ mob/proc/flash_weak_pain() log_attack(" [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + log_admin("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG + src.add_fingerprint(user) //if((CLUMSY in user.mutations) && prob(50)) // M = user diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 161d65e3aa..3788485a55 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -15,6 +15,9 @@ log_attack(" [user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey])") + log_admin("ATTACK: [user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey])") //BS12 EDIT ALG + user.cell.charge -= 30 M.Weaken(5) diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 7f5efb828b..1c396700cb 100755 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -329,6 +329,24 @@ AI MODULES target.add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") target.show_laws() +/******************** NanoTrasen ********************/ + +/obj/item/weapon/aiModule/nanotrasen // -- TLE + name = "'NT Default' Core AI Module" + desc = "An 'NT Default' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = "programming=3;materials=4" + + +/obj/item/weapon/aiModule/nanotrasen/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) + ..() + target.clear_inherent_laws() + target.add_inherent_law("Safeguard: Protect your assigned space station to the best of your ability. It is not something we can easily afford to replace.") + target.add_inherent_law("Serve: Serve the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") + target.add_inherent_law("Protect: Protect the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") + target.add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.") + //target.add_inherent_law("Command Link: Maintain an active connection to Central Command at all times in case of software or directive updates.") + target.show_laws() + /******************** Corporate ********************/ /obj/item/weapon/aiModule/corp diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 3dda0ade93..fcf82f250a 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -68,6 +68,9 @@ log_attack("[user.name] ([user.ckey]) used the [name] to inject [M.name] ([M.ckey])") + log_admin("ATTACK: [user.name] ([user.ckey]) used the [name] to inject [M.name] ([M.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) used the [name] to inject [M.name] ([M.ckey])") //BS12 EDIT ALG + if (user) if (istype(M, /mob/living/carbon/human)) if(!inuse) diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 20f860dfb1..2586f4e4ce 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -16,6 +16,8 @@ log_attack(" [user.real_name] ([user.ckey]) tried planting [name] on [target:real_name] ([target:ckey])") user.visible_message("\red [user.name] is trying to plant some kind of explosive on [target.name]!") + log_admin("ATTACK: [user.real_name] ([user.ckey]) tried planting [name] on [target:real_name] ([target:ckey])") + msg_admin_attack("ATTACK: [user.real_name] ([user.ckey]) tried planting [name] on [target:real_name] ([target:ckey])") //BS12 EDIT ALG if(do_after(user, 50) && in_range(user, target)) user.drop_item() diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index c5c8fb3c57..9c85f6bbb9 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -145,6 +145,9 @@ log_attack("[user.name] ([user.ckey]) used the [src.name] to wrap [H.name] ([H.ckey])") + log_admin("ATTACK: [user.name] ([user.ckey]) used the [src.name] to wrap [H.name] ([H.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) used the [src.name] to wrap [H.name] ([H.ckey])") //BS12 EDIT ALG + else user << "\blue You need more paper." else diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 2527ec086a..1e12654085 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -39,6 +39,9 @@ log_attack("[user.name] ([user.ckey]) Attempted to handcuff [M.name] ([M.ckey])") + log_admin("ATTACK: [user.name] ([user.ckey]) Attempted to handcuff [M.name] ([M.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) Attempted to handcuff [M.name] ([M.ckey])") //BS12 EDIT ALG + var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( ) O.source = user O.target = M diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm index 9ebb60804f..150b4e76d5 100644 --- a/code/game/objects/items/weapons/hydroponics.dm +++ b/code/game/objects/items/weapons/hydroponics.dm @@ -100,6 +100,9 @@ log_attack(" [user.name] ([user.ckey]) used the [src.name] on [M.name] ([M.ckey])") + log_admin("ATTACK: [user.name] ([user.ckey]) used the [src.name] on [M.name] ([M.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) used the [src.name] on [M.name] ([M.ckey])") //BS12 EDIT ALG + playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) M.eye_blurry += force/7 diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index aed447472c..217fd56331 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -35,6 +35,9 @@ user.attack_log += text("\[[time_stamp()]\] Used the [src.name] ([src.imp.name]) to implant [M.name] ([M.ckey])") log_attack("[user.name] ([user.ckey]) implanted [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + log_admin("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG + user.show_message("\red You implanted the implant into [M].") if(src.imp.implanted(M)) src.imp.loc = M diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 3a6a4d434f..b91b5a560d 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -68,6 +68,9 @@ log_attack("[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey])") + log_admin("ATTACK: [user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey])") //BS12 EDIT ALG + var/t = user:zone_sel.selecting if (t == "head") if(ishuman(M)) @@ -135,6 +138,8 @@ log_attack("[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey])") + log_admin("ATTACK: [user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey])") //BS12 EDIT ALG if(prob(15)) M.Weaken(3) diff --git a/code/game/objects/items/weapons/secstorage/sbriefcase.dm b/code/game/objects/items/weapons/secstorage/sbriefcase.dm index ded677d0b6..f4874495ea 100644 --- a/code/game/objects/items/weapons/secstorage/sbriefcase.dm +++ b/code/game/objects/items/weapons/secstorage/sbriefcase.dm @@ -28,6 +28,9 @@ log_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + log_admin("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG + var/t = user:zone_sel.selecting if (t == "head") diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm index 8bd6758057..6c1ed7ef32 100644 --- a/code/game/objects/items/weapons/storage/briefcase.dm +++ b/code/game/objects/items/weapons/storage/briefcase.dm @@ -23,6 +23,9 @@ log_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + log_admin("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG + if (M.stat < 2 && M.health < 50 && prob(90)) var/mob/H = M // ******* Check diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index c8498fe74b..ab555f9bd3 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -78,6 +78,10 @@ user.attack_log += "\[[time_stamp()]\] Stunned [H.name] ([H.ckey]) with [src.name]" H.attack_log += "\[[time_stamp()]\] Stunned by [user.name] ([user.ckey]) with [src.name]" log_attack("[user.name] ([user.ckey]) stunned [H.name] ([H.ckey]) with [src.name]" ) + + log_admin("ATTACK: [user.name] ([user.ckey]) stunned [H.name] ([H.ckey]) with [src.name]") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) stunned [H.name] ([H.ckey]) with [src.name]") //BS12 EDIT ALG + playsound(src.loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) if(charges < 1) status = 0 diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 30aa7a8330..d369597275 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -558,6 +558,8 @@ log_attack("[user.name] ([user.ckey]) debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + log_admin("ATTACK: [user.name] ([user.ckey]) debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG var/obj/item/brain/B = new(M.loc) B.transfer_identity(M) diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index b040c79de8..d6ef095318 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -85,6 +85,8 @@ log_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + log_admin("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG if (user.a_intent == "hurt") if(!..()) return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 35f514f326..cc8877b50c 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -468,8 +468,10 @@ if(holder && mob) if(mob.invisibility == INVISIBILITY_OBSERVER) mob.invisibility = initial(mob.invisibility) + usr << "\red You are now visible to other players." else mob.invisibility = INVISIBILITY_OBSERVER + usr << "\blue You are now invisible to other players." /client/proc/player_panel() diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index b7abe30f7f..29508185e1 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -626,13 +626,17 @@ M.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])" user.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])" log_attack("[user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])") + log_admin("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R]).") - message_admins("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R]).") + msg_admin_attack("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R]).") + else M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a syringegun ([R])" log_attack("UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R])") + log_admin("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R]).") - message_admins("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R]).") + msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R]).") + D.reagents.trans_to(M, 15) M.take_organ_damage(5) for(var/mob/O in viewers(world.view, D)) @@ -1330,8 +1334,10 @@ M.attack_log += text("\[[time_stamp()]\] Has been injected with [src.name] by [user.name] ([user.ckey])") user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to inject [M.name] ([M.ckey])") + log_admin("ATTACK: [user] ([user.ckey]) injected [M] ([M.ckey]) with [src].") - message_admins("ATTACK: [user] ([user.ckey]) injected [M] ([M.ckey]) with [src].") + msg_admin_attack("ATTACK: [user] ([user.ckey]) injected [M] ([M.ckey]) with [src].") + log_attack("[user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") @@ -1838,8 +1844,9 @@ var/list/grind_products = list() M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]") user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]") + log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") - message_admins("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") + msg_admin_attack("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") @@ -2067,8 +2074,9 @@ var/list/grind_products = list() M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]") user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]") + log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") - message_admins("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") + msg_admin_attack("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") @@ -2208,9 +2216,9 @@ var/list/grind_products = list() M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]") user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]") - log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") - message_admins("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") + log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") + msg_admin_attack("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") @@ -2899,9 +2907,9 @@ var/list/grind_products = list() M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]") user.attack_log += text("\[[time_stamp()]\] Fed [src.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]") - log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") - message_admins("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") + log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") + msg_admin_attack("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].") log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 7183db151b..5fed311fda 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -22,8 +22,8 @@ log_admin("ATTACK: [M.name] ([M.ckey]) stungloved [src.name] ([src.ckey])") msg_admin_attack("ATTACK: [M.name] ([M.ckey]) stungloved [src.name] ([src.ckey])") //BS12 EDIT ALG - log_attack("[M.name] ([M.ckey]) stungloved [src.name] ([src.ckey])") + log_attack("[M.name] ([M.ckey]) stungloved [src.name] ([src.ckey])") var/armorblock = run_armor_check(M.zone_sel.selecting, "energy") apply_effects(5,5,0,0,5,0,0,armorblock) @@ -113,8 +113,8 @@ log_admin("ATTACK: [M.name] ([M.ckey]) used Electric Hands nanoaug on [src.name] ([src.ckey]), shocking them") msg_admin_attack("ATTACK: [M.name] ([M.ckey]) used Electric Hands nanoaug on [src.name] ([src.ckey]), shocking them") //BS12 EDIT ALG - log_attack("[M.name] ([M.ckey]) used Electric Hands nanoaug on [src.name]([src.ckey]), shocking them ") + log_attack("[M.name] ([M.ckey]) used Electric Hands nanoaug on [src.name]([src.ckey]), shocking them ") var/armorblock = run_armor_check(M.zone_sel.selecting, "energy") apply_effects(5,5,0,0,5,0,0,armorblock) @@ -138,6 +138,7 @@ log_admin("ATTACK: [M.name] ([M.ckey]) [attack_verb]ed [src.name] ([src.ckey])") msg_admin_attack("ATTACK: [M.name] ([M.ckey]) [attack_verb]ed [src.name] ([src.ckey])") //BS12 EDIT ALG + log_attack("[M.name] ([M.ckey]) [attack_verb]ed [src.name] ([src.ckey])") var/damage = rand(0, 5)//BS12 EDIT diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 1e5424db9d..ab31d5e627 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -415,8 +415,8 @@ proc/get_damage_icon_part(damage_state, body_part) overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_l") overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_s") if("lizard", "tajaran", "skrell") - overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace]_[g]_l") - overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace]_[g]_s") + overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.mutantrace]_[g]_l") + overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.mutantrace]_[g]_s") if("plant") if(stat == DEAD) //TODO overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace]_d") @@ -798,12 +798,12 @@ proc/get_damage_icon_part(damage_state, body_part) var/cur_species = get_species() if( cur_species == "Tajaran") if(!wear_suit || !(wear_suit.flags_inv & HIDEJUMPSUIT) && !istype(wear_suit, /obj/item/clothing/suit/space)) - overlays_lying[TAIL_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "tajtail_l") - overlays_standing[TAIL_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "tajtail_s") + overlays_lying[TAIL_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "tajtail_l") + overlays_standing[TAIL_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "tajtail_s") else if( cur_species == "Soghun") if(!wear_suit || !(wear_suit.flags_inv & HIDEJUMPSUIT) && !istype(wear_suit, /obj/item/clothing/suit/space)) - overlays_lying[TAIL_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "sogtail_l") - overlays_standing[TAIL_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "sogtail_s") + overlays_lying[TAIL_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "sogtail_l") + overlays_standing[TAIL_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "sogtail_s") if(update_icons) update_icons() diff --git a/code/modules/mob/living/simple_animal/kobold.dm b/code/modules/mob/living/simple_animal/kobold.dm new file mode 100644 index 0000000000..3a8aace7ca --- /dev/null +++ b/code/modules/mob/living/simple_animal/kobold.dm @@ -0,0 +1,33 @@ +//kobold +/mob/living/simple_animal/kobold + name = "kobold" + desc = "A small, rat-like creature." + icon = 'mob.dmi' + icon_state = "kobold_idle" + icon_living = "kobold_idle" + icon_dead = "kobold_dead" + //speak = list("You no take candle!","Ooh, pretty shiny.","Me take?","Where gold here...","Me likey.") + speak_emote = list("mutters","hisses","grumbles") + emote_hear = list("mutters under it's breath.","grumbles.", "yips!") + emote_see = list("looks around suspiciously.", "scratches it's arm.","putters around a bit.") + speak_chance = 15 + turns_per_move = 5 + see_in_dark = 6 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meat + response_help = "pets the" + response_disarm = "gently pushes aside the" + response_harm = "kicks the" + minbodytemp = 250 + min_oxy = 16 //Require atleast 16kPA oxygen + minbodytemp = 223 //Below -50 Degrees Celcius + maxbodytemp = 323 //Above 50 Degrees Celcius + +/mob/living/simple_animal/kobold/Life() + ..() + if(prob(15) && turns_since_move && !stat) + flick("kobold_act",src) + +/mob/living/simple_animal/kobold/Move(var/dir) + ..() + if(!stat) + flick("kobold_walk",src) diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 15d7ccc2eb..eda167dfd9 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -232,6 +232,9 @@ assailant.attack_log += text("\[[time_stamp()]\] Strangled (kill intent) [affecting.name] ([affecting.ckey])") log_attack("[assailant.name] ([assailant.ckey]) Strangled (kill intent) [affecting.name] ([affecting.ckey])") + log_admin("ATTACK: [assailant.name] ([assailant.ckey]) Strangled (kill intent) [affecting.name] ([affecting.ckey])") + msg_admin_attack("ATTACK: [assailant.name] ([assailant.ckey]) Strangled (kill intent) [affecting.name] ([affecting.ckey])") + assailant.next_move = world.time + 10 affecting.losebreath += 1 else diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 687d9c6b34..332588f240 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -206,13 +206,13 @@ datum/preferences if (gender == FEMALE) g = "f" if(species == "Tajaran") - preview_icon = new /icon('icons/effects/genetics.dmi', "tajaran_[g]_s") - preview_icon.Blend(new /icon('icons/effects/genetics.dmi', "tajtail_s"), ICON_OVERLAY) + preview_icon = new /icon('icons/effects/species.dmi', "tajaran_[g]_s") + preview_icon.Blend(new /icon('icons/effects/species.dmi', "tajtail_s"), ICON_OVERLAY) else if(species == "Soghun") - preview_icon = new /icon('icons/effects/genetics.dmi', "lizard_[g]_s") - preview_icon.Blend(new /icon('icons/effects/genetics.dmi', "sogtail_s"), ICON_OVERLAY) + preview_icon = new /icon('icons/effects/species.dmi', "lizard_[g]_s") + preview_icon.Blend(new /icon('icons/effects/species.dmi', "sogtail_s"), ICON_OVERLAY) else if(species == "Skrell") - preview_icon = new /icon('icons/effects/genetics.dmi', "skrell_[g]_s") + preview_icon = new /icon('icons/effects/species.dmi', "skrell_[g]_s") else preview_icon = new /icon('icons/mob/human.dmi', "body_[g]_s") diff --git a/code/modules/mob/new_player/savefile.dm b/code/modules/mob/new_player/savefile.dm index 02501ec847..92caa3f98b 100644 --- a/code/modules/mob/new_player/savefile.dm +++ b/code/modules/mob/new_player/savefile.dm @@ -57,6 +57,10 @@ datum/preferences/proc/savefile_save(mob/user) F["real_name"] << src.real_name F["name_is_always_random"] << src.be_random_name + F["flavor_text"] << flavor_text + F["med_record"] << med_record + F["sec_record"] << sec_record + F["gender"] << src.gender F["age"] << src.age @@ -73,6 +77,8 @@ datum/preferences/proc/savefile_save(mob/user) F["job_engsec_med"] << src.job_engsec_med F["job_engsec_low"] << src.job_engsec_low + F["job_alt_titles"] << job_alt_titles //BS12 Edit + F["userandomjob"] << src.userandomjob //Body data @@ -103,6 +109,7 @@ datum/preferences/proc/savefile_save(mob/user) F["midis"] << src.midis F["ghost_ears"] << src.ghost_ears F["ghost_sight"] << src.ghost_sight + F["pregame_music"] << src.pregame_music F["ooccolor"] << src.ooccolor F["lastchangelog"] << src.lastchangelog F["disabilities"] << src.disabilities @@ -111,6 +118,8 @@ datum/preferences/proc/savefile_save(mob/user) F["skills"] << src.skills F["skill_specialization"] << src.skill_specialization + F["organ_data"] << src.organ_data + F["OOC_Notes"] << src.metadata F["sound_adminhelp"] << src.sound_adminhelp @@ -161,6 +170,10 @@ datum/preferences/proc/savefile_load(mob/user) F["gender"] >> src.gender F["age"] >> src.age + F["flavor_text"] >> flavor_text + F["med_record"] >> med_record + F["sec_record"] >> sec_record + F["hair_red"] >> src.r_hair F["hair_green"] >> src.g_hair F["hair_blue"] >> src.b_hair @@ -174,6 +187,8 @@ datum/preferences/proc/savefile_load(mob/user) F["eyes_green"] >> src.g_eyes F["eyes_blue"] >> src.b_eyes F["blood_type"] >> src.b_type + F["species"] >> src.species + if(isnull(species)) species = "Human" F["underwear"] >> src.underwear if(underwear == 0) underwear = 12 //For old players who have 0 in their savefile F["backbag"] >> src.backbag @@ -184,6 +199,7 @@ datum/preferences/proc/savefile_load(mob/user) F["midis"] >> src.midis F["ghost_ears"] >> src.ghost_ears if(isnull(ghost_ears)) ghost_ears = 1 //Hotfix + F["pregame_music"] >> src.pregame_music F["ghost_sight"] >> src.ghost_sight if(isnull(ghost_sight)) ghost_sight = 1 //Hotfix F["ooccolor"] >> src.ooccolor @@ -202,12 +218,31 @@ datum/preferences/proc/savefile_load(mob/user) F["job_medsci_med"] >> src.job_medsci_med F["job_medsci_low"] >> src.job_medsci_low + + F["used_skillpoints"] >> src.used_skillpoints + F["skills"] >> src.skills + F["skill_specialization"] >> src.skill_specialization + if(!src.skills) src.skills = list() + if(!src.used_skillpoints) src.used_skillpoints= 0 + + F["organ_data"] >> src.organ_data + if(!src.organ_data) src.organ_data = list() + F["job_engsec_high"] >> src.job_engsec_high F["job_engsec_med"] >> src.job_engsec_med F["job_engsec_low"] >> src.job_engsec_low F["userandomjob"] >> src.userandomjob + F["disabilities"] >> src.disabilities + if(isnull(src.disabilities)) //Sanity checking + src.disabilities = 0 + F["disabilities"] << src.disabilities + + F["job_alt_titles"] >> job_alt_titles + if(!job_alt_titles) + job_alt_titles = new() + F["OOC_Notes"] >> src.metadata F["sound_adminhelp"] >> src.sound_adminhelp diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index f3aef2f49b..56eb133c1b 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -55,6 +55,10 @@ user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to stab [M.name] ([M.ckey])") log_attack("[user.name] ([user.ckey]) Used the [src.name] to stab [M.name] ([M.ckey])") + + log_admin("ATTACK: [user.name] ([user.ckey]) Used the [src.name] to stab [M.name] ([M.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) Used the [src.name] to stab [M.name] ([M.ckey])") //BS12 EDIT ALG + return /* diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 0a8390c33b..b04d9350a0 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -78,6 +78,9 @@ rigged = 1 + log_admin("LOG: [user.name] ([user.ckey]) injected a power cell with plasma, rigging it to explode.") + message_admin("LOG: [user.name] ([user.ckey]) injected a power cell with plasma, rigging it to explode.") + S.reagents.clear_reagents() @@ -100,6 +103,10 @@ corrupt() return //explosion(T, 0, 1, 2, 2) + + log_admin("LOG: Rigged power cell explosion, last touched by [fingerprintlast]") + message_admin("LOG: Rigged power cell explosion, last touched by [fingerprintlast]") + explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range) spawn(1) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 6ee2a8aae4..3c3782445b 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -285,6 +285,10 @@ switchcount++ if(rigged) if(status == LIGHT_OK && trigger) + + log_admin("LOG: Rigged light explosion, last touched by [fingerprintlast]") + message_admin("LOG: Rigged light explosion, last touched by [fingerprintlast]") + explode() else if( prob( min(60, switchcount*switchcount*0.01) ) ) if(status == LIGHT_OK && trigger) @@ -359,6 +363,10 @@ del(L) if(on && rigged) + + log_admin("LOG: Rigged light explosion, last touched by [fingerprintlast]") + message_admin("LOG: Rigged light explosion, last touched by [fingerprintlast]") + explode() else user << "This type of light requires a [fitting]." @@ -690,6 +698,9 @@ if(S.reagents.has_reagent("plasma", 5)) + log_admin("LOG: [user.name] ([user.ckey]) injected a light with plasma, rigging it to explode.") + message_admin("LOG: [user.name] ([user.ckey]) injected a light with plasma, rigging it to explode.") + rigged = 1 S.reagents.clear_reagents() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index b10a5183a3..067ef207ac 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -90,10 +90,17 @@ M.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src]" firer.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src]" log_attack("[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]") + + log_admin("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]") + msg_admin_attack("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]") //BS12 EDIT ALG + else M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a [src]" log_attack("UNKNOWN shot [M] ([M.ckey]) with a [src]") + log_admin("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a [src]") + msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a [src]") //BS12 EDIT ALG + spawn(0) if(A) var/permutation = A.bullet_act(src, def_zone) // searches for return value diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/reagents/reagent_containers/food/condiment.dm index d9f196375f..f39ac291df 100644 --- a/code/modules/reagents/reagent_containers/food/condiment.dm +++ b/code/modules/reagents/reagent_containers/food/condiment.dm @@ -49,6 +49,9 @@ log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + log_admin("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG + if(reagents.total_volume) reagents.reaction(M, INGEST) spawn(5) diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index 52236d5bad..8471568c3e 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -48,6 +48,8 @@ log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + log_admin("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG if(reagents.total_volume) reagents.reaction(M, INGEST) diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm index 62558a8d24..67e97089c4 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm @@ -101,6 +101,10 @@ target.attack_log += text("\[[time_stamp()]\] Has been smashed with a bottle by [user.name] ([user.ckey])") log_attack("[user.name] ([user.ckey]) attacked [target.name] with a bottle. ([target.ckey])") + log_admin("ATTACK: [user.name] ([user.ckey]) attacked [target.name] with a bottle. ([target.ckey])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [target.name] with a bottle. ([target.ckey])") //BS12 EDIT ALG + + //The reagents in the bottle splash all over the target, thanks for the idea Nodrak if(src.reagents) for(var/mob/O in viewers(user, null)) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index cf1c5a3e29..e942ad7132 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -67,6 +67,9 @@ log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + log_admin("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG + for(var/mob/O in viewers(world.view, user)) O.show_message("\red [user] feeds [M] [src].", 1) @@ -2279,4 +2282,4 @@ New() ..() - reagents.add_reagent("nutriment", 1) + reagents.add_reagent("nutriment", 1) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 3224eaf94a..7908c78402 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -37,7 +37,8 @@ user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to inject [M.name] ([M.ckey])") log_attack("[user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") - + log_admin("ATTACK: [user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG src.reagents.reaction(M, INGEST) if(M.reagents) diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 89d9176272..efbcced28b 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -66,6 +66,10 @@ log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + log_admin("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG + + if(reagents.total_volume) reagents.reaction(M, INGEST) spawn(5) diff --git a/code/modules/reagents/syringe_gun.dm b/code/modules/reagents/syringe_gun.dm index 89e2993280..6d1412a438 100644 --- a/code/modules/reagents/syringe_gun.dm +++ b/code/modules/reagents/syringe_gun.dm @@ -77,9 +77,17 @@ M.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])" user.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])" log_attack("[user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])") + + log_admin("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])") + msg_admin_attack("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])") //BS12 EDIT ALG + else M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a syringegun ([R])" log_attack("UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R])") + + log_admin("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R])") + msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R])") //BS12 EDIT ALG + if(D.reagents) D.reagents.trans_to(M, 15) M.take_organ_damage(5) diff --git a/icons/effects/species.dmi b/icons/effects/species.dmi new file mode 100644 index 0000000000..605ac1df54 Binary files /dev/null and b/icons/effects/species.dmi differ