Merge branch 'master' into tgglassfloors

This commit is contained in:
S34NW
2021-08-05 15:17:09 +01:00
456 changed files with 7608 additions and 8114 deletions
@@ -23,6 +23,7 @@
/datum/painter/floor/paint_atom(atom/target, mob/user)
if(!istype(target, /turf/simulated/floor/plasteel))
to_chat(user, "<span class='warning'>[holder] can only be used on station flooring.</span>")
return
var/turf/simulated/floor/plasteel/F = target
if(F.icon_state == floor_state && F.dir == floor_dir)
@@ -1,6 +1,7 @@
/obj/item/painter
name = "modular painter"
icon = 'icons/obj/painting.dmi'
icon_state = "floor_painter"
usesound = 'sound/effects/spray2.ogg'
flags = CONDUCT | NOBLUDGEON
w_class = WEIGHT_CLASS_SMALL
@@ -264,6 +264,9 @@ REAGENT SCANNER
else
to_chat(user, "<span class='notice'>Subject's genes are stable.</span>")
if(HAS_TRAIT(H, TRAIT_HUSK))
to_chat(user, "<span class='danger'>Subject is husked. Application of synthflesh is recommended.</span>")
/obj/item/healthanalyzer/attack_self(mob/user)
toggle_mode()
+4
View File
@@ -23,6 +23,10 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
usesound = 'sound/items/deconstruct.ogg'
merge_type = /obj/item/stack/rods
/obj/item/stack/rods/detailed_examine()
return "Made from metal sheets. You can build a grille by using it in your hand. \
Clicking on a floor without any tiles will reinforce the floor. You can make reinforced glass by combining rods and normal glass sheets."
/obj/item/stack/rods/cyborg
energy_type = /datum/robot_energy_storage/rods
is_cyborg = TRUE
@@ -36,6 +36,9 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
merge_type = /obj/item/stack/sheet/glass
point_value = 1
/obj/item/stack/sheet/glass/detailed_examine()
return "Use in your hand to build a window. Can be upgraded to reinforced glass by adding metal rods, which are made from metal sheets."
/obj/item/stack/sheet/glass/fifty
amount = 50
@@ -44,6 +47,10 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
is_cyborg = TRUE
materials = list()
/obj/item/stack/sheet/glass/cyborg/detailed_examine()
return "Use in your hand to build a window. Can be upgraded to reinforced glass by adding metal rods, which are made from metal sheets.<br>\
As a synthetic, you can acquire more sheets of glass by recharging."
/obj/item/stack/sheet/glass/New(loc, amount)
recipes = GLOB.glass_recipes
..()
@@ -103,6 +110,9 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
recipes = GLOB.reinforced_glass_recipes
..()
/obj/item/stack/sheet/rglass/detailed_examine()
return "Use in your hand to build a window. Reinforced glass is much stronger against damage."
GLOBAL_LIST_INIT(pglass_recipes, list ( \
new/datum/stack_recipe/window("directional window", /obj/structure/window/plasmabasic, time = 0, on_floor = TRUE, window_checks = TRUE), \
new/datum/stack_recipe/window("fulltile window", /obj/structure/window/full/plasmabasic, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \
@@ -113,6 +123,10 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
is_cyborg = TRUE
materials = list()
/obj/item/stack/sheet/rglass/cyborg/detailed_examine()
return "Use in your hand to build a window. Reinforced glass is much stronger against damage.<br>\
As a synthetic, you can gain more reinforced glass by recharging."
/obj/item/stack/sheet/plasmaglass
name = "plasma glass"
desc = "A very strong and very resistant sheet of a plasma-glass alloy."
@@ -114,6 +114,10 @@ GLOBAL_LIST_INIT(metal_recipes, list(
is_cyborg = TRUE
materials = list()
/obj/item/stack/sheet/metal/cyborg/detailed_examine()
return "Use in your hand to bring up the recipe menu. If you have enough sheets, click on something on the list to build it.<br>\
You can replenish your supply of metal as a synthetic by recharging."
/obj/item/stack/sheet/metal/fifty
amount = 50
@@ -378,6 +382,8 @@ GLOBAL_LIST_INIT(cult_recipes, list ( \
if(!iscultist(user))
to_chat(user, "<span class='warning'>Only one with forbidden knowledge could hope to work this metal...</span>")
return
if(usr.holy_check())
return
if(!is_level_reachable(user.z))
to_chat(user, "<span class='warning'>The energies of this place interfere with the metal shaping!</span>")
return
@@ -16,3 +16,6 @@
usesound = 'sound/items/deconstruct.ogg'
toolspeed = 1
var/wall_allowed = TRUE //determines if sheet can be used in wall construction or not.
/obj/item/stack/sheet/detailed_examine()
return "Use in your hand to bring up the recipe menu. If you have enough sheets, click on something on the list to build it."
+17 -11
View File
@@ -25,7 +25,7 @@
var/to_transfer = 0
var/max_amount = 50 //also see stack recipes initialisation, param "max_res_amount" must be equal to this max_amount
var/merge_type = null // This path and its children should merge with this stack, defaults to src.type
var/recipe_width = 400 //Width of the recipe popup
var/recipe_width = 400 //Width of the recipe popup
var/recipe_height = 400 //Height of the recipe popup
/obj/item/stack/New(loc, new_amount, merge = TRUE)
@@ -197,25 +197,31 @@
to_chat(usr, "<span class='warning'>You haven't got enough [src] to build \the [R.title]!</span>")
return FALSE
if(R.window_checks && !valid_window_location(usr.loc, usr.dir))
if(R.window_checks && !valid_window_location(get_turf(src), usr.dir))
to_chat(usr, "<span class='warning'>\The [R.title] won't fit here!</span>")
return FALSE
if(R.one_per_turf && (locate(R.result_type) in usr.drop_location()))
if(R.one_per_turf && (locate(R.result_type) in get_turf(src)))
to_chat(usr, "<span class='warning'>There is another [R.title] here!</span>")
return FALSE
if(R.on_floor && !istype(usr.drop_location(), /turf/simulated))
if(R.on_floor && !istype(get_turf(src), /turf/simulated))
to_chat(usr, "<span class='warning'>\The [R.title] must be constructed on the floor!</span>")
return FALSE
if(R.no_cult_structure && (locate(/obj/structure/cult) in usr.drop_location()))
to_chat(usr, "<span class='warning'>There is a structure here!</span>")
return FALSE
if(R.no_cult_structure)
if(usr.holy_check())
return
if(!is_level_reachable(usr.z))
to_chat(usr, "<span class='warning'>The energies of this place interfere with the metal shaping!</span>")
return
if(locate(/obj/structure/cult) in get_turf(src))
to_chat(usr, "<span class='warning'>There is a structure here!</span>")
return FALSE
if(R.time)
to_chat(usr, "<span class='notice'>Building [R.title] ...</span>")
if(!do_after(usr, R.time, target = usr))
to_chat(usr, "<span class='notice'>Building [R.title]...</span>")
if(!do_after(usr, R.time, target = loc))
return 0
if(get_amount() < R.req_amount * multiplier)
@@ -223,9 +229,9 @@
var/atom/O
if(R.max_res_amount > 1) //Is it a stack?
O = new R.result_type(usr.drop_location(), R.res_amount * multiplier)
O = new R.result_type(get_turf(src), R.res_amount * multiplier)
else
O = new R.result_type(usr.drop_location())
O = new R.result_type(get_turf(src))
O.setDir(usr.dir)
use(R.req_amount * multiplier)
updateUsrDialog()
@@ -1,7 +1,6 @@
/obj/item/stack/telecrystal
name = "telecrystal"
desc = "It seems to be pulsing with suspiciously enticing energies."
description_antag = "Telecrystals can be activated by utilizing them on devices with an actively running uplink. They will not activate on unactivated uplinks."
singular_name = "telecrystal"
icon = 'icons/obj/telescience.dmi'
icon_state = "telecrystal"
@@ -34,6 +33,9 @@
use(amount)
to_chat(user, "<span class='notice'>You slot [src] into [cart]. The next time it's used, it will also give telecrystals</span>")
/obj/item/stack/telecrystal/detailed_examine_antag()
return "Telecrystals can be activated by utilizing them on devices with an actively running uplink. They will not activate on unactivated uplinks."
/obj/item/stack/telecrystal/five
amount = 5
+5
View File
@@ -1358,9 +1358,14 @@
. += "Has [fake_bullets] round\s remaining."
. += "[fake_bullets] of those are live rounds."
/obj/item/toy/russian_revolver/trick_revolver/detailed_examine() //oh no
return "This is a ballistic weapon. To reload, click the weapon in your hand to unload (if needed), then add the appropriate ammo. The description \
will tell you what caliber you need."
/obj/item/toy/russian_revolver/trick_revolver/post_shot(user)
to_chat(user, "<span class='danger'>[src] did look pretty dodgey!</span>")
SEND_SOUND(user, sound('sound/misc/sadtrombone.ogg')) //HONK
/*
* Rubber Chainsaw
*/
+70 -32
View File
@@ -22,6 +22,14 @@ AI MODULES
materials = list(MAT_GOLD=50)
var/datum/ai_laws/laws = null
/obj/item/aiModule/Initialize(mapload)
. = ..()
if(laws)
desc += "<br>"
for(var/datum/ai_law/current in laws.inherent_laws)
desc += current.law
desc += "<br>"
/obj/item/aiModule/proc/install(obj/machinery/computer/C)
if(istype(C, /obj/machinery/computer/aiupload))
var/obj/machinery/computer/aiupload/comp = C
@@ -92,7 +100,7 @@ AI MODULES
/******************** Safeguard ********************/
/obj/item/aiModule/safeguard
name = "\improper 'Safeguard' AI module"
name = "\improper Safeguard AI module"
var/targetName = ""
desc = "A 'safeguard' AI module: 'Safeguard <name>. Individuals that threaten <name> are not crew and must be eliminated.'"
origin_tech = "programming=3;materials=3"
@@ -118,16 +126,16 @@ AI MODULES
/******************** oneCrewMember ********************/
/obj/item/aiModule/oneCrewMember
name = "\improper 'oneCrewMember' AI module"
name = "\improper One Crewmember AI module"
var/targetName = ""
desc = "A 'one human' AI module: 'Only <name> is crew.'"
desc = "A 'one crew' AI module: 'Only <name> is crew.'"
origin_tech = "programming=4;materials=4"
/obj/item/aiModule/oneCrewMember/attack_self(mob/user as mob)
..()
var/targName = stripped_input(usr, "Please enter the name of the person who is the only crew.", "Who?", user.real_name)
targetName = targName
desc = text("A 'one human' AI module: 'Only [] is crew.'", targetName)
desc = text("A 'one crew' AI module: 'Only [] is crew.'", targetName)
/obj/item/aiModule/oneCrewMember/install(obj/machinery/computer/C)
if(!targetName)
@@ -149,7 +157,7 @@ AI MODULES
/******************** ProtectStation ********************/
/obj/item/aiModule/protectStation
name = "\improper 'ProtectStation' AI module"
name = "\improper Protect Station AI module"
desc = "A 'protect station' AI module: 'Protect the space station against damage. Anyone you see harming the station is to be no longer considered crew, and is a threat to the station which must be neutralized.'"
origin_tech = "programming=4;materials=4" //made of gold
@@ -162,10 +170,10 @@ AI MODULES
to_chat(target, law)
target.add_supplied_law(5, law)
/******************** OxygenIsToxicToHumans ********************/
/******************** OxygenIsToxicToCrew ********************/
/obj/item/aiModule/oxygen
name = "\improper 'OxygenIsToxicToHumans' AI module"
desc = "A 'OxygenIsToxicToHumans' AI module: 'Oxygen is highly toxic to crew members, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a crew member.'"
name = "\improper Oxygen Is Toxic To Crew AI module"
desc = "A 'Oxygen Is Toxic To Crew' AI module: 'Oxygen is highly toxic to crew members, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a crew member.'"
origin_tech = "programming=4;biotech=2;materials=4"
/obj/item/aiModule/oxygen/attack_self(mob/user as mob)
@@ -179,7 +187,7 @@ AI MODULES
/****************** New Freeform ******************/
/obj/item/aiModule/freeform // Slightly more dynamic freeform module -- TLE
name = "\improper 'Freeform' AI module"
name = "\improper Freeform AI module"
var/newFreeFormLaw = "freeform"
var/lawpos = 15
desc = "A 'freeform' AI module: '<freeform>'"
@@ -212,7 +220,7 @@ AI MODULES
/******************** Reset ********************/
/obj/item/aiModule/reset
name = "\improper 'Reset' AI module"
name = "\improper Reset AI module"
var/targetName = "name"
desc = "A 'reset' AI module: 'Clears all laws except for the core laws.'"
origin_tech = "programming=3;materials=2"
@@ -230,7 +238,7 @@ AI MODULES
/******************** Purge ********************/
/obj/item/aiModule/purge // -- TLE
name = "\improper 'Purge' AI module"
name = "\improper Purge AI module"
desc = "A 'purge' AI Module: 'Purges all laws.'"
origin_tech = "programming=5;materials=4"
@@ -245,77 +253,107 @@ AI MODULES
/******************** Asimov ********************/
/obj/item/aiModule/asimov // -- TLE
name = "\improper 'Asimov' core AI module"
name = "\improper Asimov core AI module"
desc = "An 'Asimov' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=3;materials=4"
laws = new/datum/ai_laws/asimov
laws = new /datum/ai_laws/asimov
/******************** Crewsimov ********************/
/obj/item/aiModule/crewsimov // -- TLE
name = "\improper 'Crewsimov' core AI module"
name = "\improper Crewsimov core AI module"
desc = "An 'Crewsimov' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=3;materials=4"
laws = new/datum/ai_laws/crewsimov
laws = new /datum/ai_laws/crewsimov
/******************* Quarantine ********************/
/obj/item/aiModule/quarantine
name = "\improper 'Quarantine' core AI module"
name = "\improper Quarantine core AI module"
desc = "A 'Quarantine' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=3;materials=4"
laws = new/datum/ai_laws/quarantine
laws = new /datum/ai_laws/quarantine
/******************** NanoTrasen ********************/
/obj/item/aiModule/nanotrasen // -- TLE
name = "'NT Default' Core AI Module"
name = "\improper NT Default Core AI Module"
desc = "An 'NT Default' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=3;materials=4"
laws = new/datum/ai_laws/nanotrasen
laws = new /datum/ai_laws/nanotrasen
/******************** Corporate ********************/
/obj/item/aiModule/corp
name = "\improper 'Corporate' core AI module"
name = "\improper Corporate core AI module"
desc = "A 'Corporate' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=3;materials=4"
laws = new/datum/ai_laws/corporate
laws = new /datum/ai_laws/corporate
/******************** Drone ********************/
/obj/item/aiModule/drone
name = "\improper 'Drone' core AI module"
name = "\improper Drone core AI module"
desc = "A 'Drone' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=3;materials=4"
laws = new/datum/ai_laws/drone
laws = new /datum/ai_laws/drone
/******************** Robocop ********************/
/obj/item/aiModule/robocop // -- TLE
name = "\improper 'Robocop' core AI module"
name = "\improper Robocop core AI module"
desc = "A 'Robocop' Core AI Module: 'Reconfigures the AI's core three laws.'"
origin_tech = "programming=4"
laws = new/datum/ai_laws/robocop()
laws = new /datum/ai_laws/robocop()
/****************** P.A.L.A.D.I.N. **************/
/obj/item/aiModule/paladin // -- NEO
name = "\improper 'P.A.L.A.D.I.N.' core AI module"
name = "\improper P.A.L.A.D.I.N. core AI module"
desc = "A P.A.L.A.D.I.N. Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=3;materials=4"
laws = new/datum/ai_laws/paladin
laws = new /datum/ai_laws/paladin
/****************** T.Y.R.A.N.T. *****************/
/obj/item/aiModule/tyrant // -- Darem
name = "\improper 'T.Y.R.A.N.T.' core AI module"
name = "\improper T.Y.R.A.N.T. core AI module"
desc = "A T.Y.R.A.N.T. Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=3;materials=4;syndicate=1"
laws = new/datum/ai_laws/tyrant()
laws = new /datum/ai_laws/tyrant()
/******************** Antimov ********************/
/obj/item/aiModule/antimov // -- TLE
name = "\improper 'Antimov' core AI module"
name = "\improper Antimov core AI module"
desc = "An 'Antimov' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=4"
laws = new/datum/ai_laws/antimov()
laws = new /datum/ai_laws/antimov()
/******************** NT Aggressive ********************/
/obj/item/aiModule/nanotrasen_aggressive
name = "\improper NT Aggressive core AI module"
desc = "An 'NT Aggressive' Core AI Module: 'Reconfigures the AI's core laws.'"
laws = new /datum/ai_laws/nanotrasen_aggressive()
/******************** CCTV ********************/
/obj/item/aiModule/cctv
name = "\improper CCTV core AI module"
desc = "A 'CCTV' Core AI Module: 'Reconfigures the AI's core laws.'"
laws = new /datum/ai_laws/cctv()
/******************** Hippocratic Oath ********************/
/obj/item/aiModule/hippocratic
name = "\improper Hippocratic Oath core AI module"
desc = "An 'Hippocratic' Oath Core AI Module: 'Reconfigures the AI's core laws.'"
laws = new /datum/ai_laws/hippocratic()
/******************** Station Efficiency ********************/
/obj/item/aiModule/maintain
name = "\improper Station Efficiency core AI module"
desc = "A 'Station Efficiency' Core AI Module: 'Reconfigures the AI's core laws.'"
laws = new /datum/ai_laws/maintain()
/******************** Peacekeeper ********************/
/obj/item/aiModule/peacekeeper
name = "\improper Peacekeeper core AI module"
desc = "A 'Peacekeeper' Core AI Module: 'Reconfigures the AI's core laws.'"
laws = new /datum/ai_laws/peacekeeper()
/******************** Freeform Core ******************/
/obj/item/aiModule/freeformcore // Slightly more dynamic freeform module -- TLE
name = "\improper 'Freeform' core AI module"
name = "\improper Freeform core AI module"
var/newFreeFormLaw = ""
desc = "A 'freeform' Core AI module: '<freeform>'"
origin_tech = "programming=5;materials=4"
@@ -1,7 +1,6 @@
/obj/item/bee_briefcase
name = "briefcase"
desc = "This briefcase has easy-release clasps and smells vaguely of honey and blood..."
description_antag = "A briefcase filled with deadly bees, you should inject this with a syringe of your own blood before opening it."
icon = 'icons/obj/storage.dmi'
icon_state = "briefcase"
item_state = "briefcase"
@@ -28,6 +27,9 @@
else
. += "<span class='danger'>The bees are gone... Colony collapse disorder?</span>"
/obj/item/bee_briefcase/detailed_examine_antag()
return "A briefcase filled with deadly bees, you should inject this with a syringe of your own blood before opening it."
/obj/item/bee_briefcase/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/reagent_containers/syringe))
var/obj/item/reagent_containers/syringe/S = I
+1 -4
View File
@@ -416,7 +416,6 @@
"gold",
"silver",
"centcom",
"centcom_old",
"security",
"medical",
"HoS",
@@ -891,7 +890,7 @@
return list("data","id","gold","silver","security","medical","research","cargo","engineering","HoS","CMO","RD","CE","clown","mime","rainbow","prisoner")
/proc/get_centcom_card_skins()
return list("centcom","centcom_old","nanotrasen","ERT_leader","ERT_empty","ERT_security","ERT_engineering","ERT_medical","ERT_janitorial","deathsquad","commander","syndie","TDred","TDgreen")
return list("centcom","nanotrasen","ERT_leader","ERT_empty","ERT_security","ERT_engineering","ERT_medical","ERT_janitorial","deathsquad","commander","syndie","TDred","TDgreen")
/proc/get_all_card_skins()
return get_station_card_skins() + get_centcom_card_skins()
@@ -910,8 +909,6 @@
return "Research Director"
if("CE")
return "Chief Engineer"
if("centcom_old")
return "Centcom Old"
if("ERT_leader")
return "ERT Leader"
if("ERT_empty")
+2
View File
@@ -445,6 +445,8 @@
user.visible_message("<span class='boldnotice'>[defib] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return for defibrillation.</span>")
else if(total_burn >= 180 || total_brute >= 180)
user.visible_message("<span class='boldnotice'>[defib] buzzes: Resuscitation failed - Severe tissue damage detected.</span>")
else if(HAS_TRAIT(H, TRAIT_HUSK))
user.visible_message("<span class='notice'>[defib] buzzes: Resucitation failed: Subject is husked.</span>")
else if(ghost)
if(!ghost.can_reenter_corpse) // DNR or AntagHUD
user.visible_message("<span class='notice'>[defib] buzzes: Resucitation failed: No electrical brain activity detected.</span>")
+4 -5
View File
@@ -179,12 +179,11 @@
addtimer(CALLBACK(src, .proc/boom, user, result), 4 SECONDS)
/obj/item/dice/d20/e20/proc/boom(mob/user, result)
var/capped = FALSE
var/capped = TRUE
var/actual_result = result
if(result != 20)
capped = TRUE
result = min(result, GLOB.max_ex_light_range) // Apply the bombcap
else // Rolled a nat 20, screw the bombcap
// Rolled a nat 20, screw the bombcap
if(result == 20)
capped = FALSE
result = 24
var/turf/epicenter = get_turf(src)
@@ -561,7 +561,6 @@
/obj/item/nullrod/missionary_staff
name = "holy staff"
desc = "It has a mysterious, protective aura."
description_antag = "This seemingly standard holy staff is actually a disguised neurotransmitter capable of inducing blind zealotry in its victims. It must be allowed to recharge in the presence of a linked set of missionary robes. Activate the staff while wearing robes to link, then aim the staff at your victim to try and convert them."
reskinned = TRUE
reskin_selectable = FALSE
icon_state = "godstaff-red"
@@ -575,6 +574,10 @@
var/obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe/robes = null //the robes linked with this staff
var/faith = 99 //a conversion requires 100 faith to attempt. faith recharges over time while you are wearing missionary robes that have been linked to the staff.
/obj/item/nullrod/missionary_staff/detailed_examine_antag()
return "This seemingly standard holy staff is actually a disguised neurotransmitter capable of inducing blind zealotry in its victims. It must be allowed to recharge in the presence of a linked set of missionary robes. \
Activate the staff while wearing robes to link, then aim the staff at your victim to try and convert them."
/obj/item/nullrod/missionary_staff/New()
..()
team_color = pick("red", "blue")
@@ -47,7 +47,7 @@
a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm")
qdel(src)
if("emp")
var/name = prob(50) ? t.name : pick(GLOB.teleportlocs)
var/name = prob(50) ? t.name : pick(SSmapping.teleportlocs)
a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm")
else
a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm")
@@ -58,7 +58,7 @@
/obj/item/implant/emp/activate()
uses--
empulse(imp_in, 3, 5, 1)
INVOKE_ASYNC(GLOBAL_PROC, .proc/empulse, get_turf(imp_in), 3, 5, 1)
if(!uses)
qdel(src)
@@ -125,6 +125,11 @@
if(item_color == null)
item_color = pick("red", "blue", "green", "purple")
/obj/item/melee/energy/sword/detailed_examine()
return "The energy sword is a very strong melee weapon, capable of severing limbs easily, if they are targeted. It can also has a chance \
to block projectiles and melee attacks while it is on and being held. The sword can be toggled on or off by using it in your hand. While it is off, \
it can be concealed in your pocket or bag."
/obj/item/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(active)
return ..()
+15 -12
View File
@@ -89,17 +89,20 @@
/mob/living/simple_animal/hostile/poison/bees/,
/mob/living/simple_animal/butterfly,
/mob/living/simple_animal/cockroach,
/obj/item/queen_bee
))
/obj/item/queen_bee))
strong_against -= /mob/living/simple_animal/hostile/poison/bees/syndi // Syndi-bees have special anti-flyswatter tech installed
/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag)
/obj/item/melee/flyswatter/attack(mob/living/M, mob/living/user, def_zone)
. = ..()
if(proximity_flag)
if(is_type_in_typecache(target, strong_against))
new /obj/effect/decal/cleanable/insectguts(target.drop_location())
to_chat(user, "<span class='warning'>You easily splat [target].</span>")
if(istype(target, /mob/living/))
var/mob/living/bug = target
bug.death(1)
else
qdel(target)
if(!.)
return
if(is_type_in_typecache(M, strong_against))
new /obj/effect/decal/cleanable/insectguts(M.drop_location())
user.visible_message("<span class='warning'>[user] splats [M] with [src].</span>",
"<span class='warning'>You splat [M] with [src].</span>",
"<span class='warning'>You hear a splat.</span>")
if(isliving(M))
var/mob/living/bug = M
bug.death(TRUE)
if(!QDELETED(M))
qdel(M)
+2 -2
View File
@@ -47,12 +47,12 @@
var/A
A = input(user, "Area to jump to", "BOOYEA", A) as null|anything in GLOB.teleportlocs
A = input(user, "Area to jump to", "BOOYEA", A) as null|anything in SSmapping.teleportlocs
if(!A)
return
var/area/thearea = GLOB.teleportlocs[A]
var/area/thearea = SSmapping.teleportlocs[A]
if(user.stat || user.restrained())
return
@@ -409,7 +409,6 @@
new /obj/item/soap(src)
new /obj/item/grenade/chem_grenade/cleaner(src)
new /obj/item/grenade/chem_grenade/cleaner(src)
new /obj/item/melee/flyswatter(src)
update_icon()
/obj/item/storage/belt/lazarus
@@ -71,6 +71,11 @@
else
. += "<span class='warning'>The baton does not have a power source installed.</span>"
/obj/item/melee/baton/detailed_examine()
return "The baton needs to be turned on to apply the stunning effect. Use it in your hand to toggle it on or off. If your intent is \
set to 'harm', you will inflict damage when using it, regardless if it is on or not. Each stun reduces the baton's charge, which can be replenished by \
putting it inside a weapon recharger."
/obj/item/melee/baton/get_cell()
return cell
+5 -5
View File
@@ -643,13 +643,13 @@
slot_flags = SLOT_BACK
force = 5
force_unwielded = 5
force_wielded = 20
force_wielded = 40
throwforce = 15
throw_range = 1
w_class = WEIGHT_CLASS_HUGE
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
resistance_flags = FIRE_PROOF | ACID_PROOF
var/charged = 5
var/charged = 2
origin_tech = "combat=4;bluespace=4;plasmatech=7"
/obj/item/twohanded/singularityhammer/New()
@@ -661,7 +661,7 @@
return ..()
/obj/item/twohanded/singularityhammer/process()
if(charged < 5)
if(charged < 2)
charged++
/obj/item/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons.
@@ -684,7 +684,7 @@
var/obj/item/clothing/shoes/magboots/M = H.shoes
if(M.magpulse)
continue
H.apply_effect(1, WEAKEN, 0)
H.Weaken(2)
step_towards(H, pull)
step_towards(H, pull)
step_towards(H, pull)
@@ -693,7 +693,7 @@
if(!proximity)
return
if(wielded)
if(charged == 5)
if(charged == 2)
charged = 0
if(isliving(A))
var/mob/living/Z = A