Fixes merge conflicts

This commit is contained in:
variableundefined
2018-11-14 09:21:21 +08:00
297 changed files with 7017 additions and 5404 deletions
+7 -15
View File
@@ -163,21 +163,6 @@ AI MODULES
to_chat(target, law)
target.add_supplied_law(5, law)
/******************** Quarantine ********************/
/obj/item/aiModule/quarantine
name = "\improper 'Quarantine' AI module"
desc = "A 'quarantine' AI module: 'The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew members from leaving. It is impossible to harm a crew members while preventing them from leaving.'"
origin_tech = "programming=3;biotech=2;materials=4"
/obj/item/aiModule/quarantine/attack_self(var/mob/user as mob)
..()
/obj/item/aiModule/quarantine/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender)
..()
var/law = "The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, anyone from leaving. It is impossible to harm anyone while preventing them from leaving."
to_chat(target, law)
target.add_supplied_law(8, law)
/******************** OxygenIsToxicToHumans ********************/
/obj/item/aiModule/oxygen
name = "\improper 'OxygenIsToxicToHumans' AI module"
@@ -273,6 +258,13 @@ AI MODULES
origin_tech = "programming=3;materials=4"
laws = new/datum/ai_laws/crewsimov
/******************* Quarantine ********************/
/obj/item/aiModule/quarantine
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
/******************** NanoTrasen ********************/
/obj/item/aiModule/nanotrasen // -- TLE
name = "'NT Default' Core AI Module"
+45 -15
View File
@@ -255,6 +255,8 @@ GLOBAL_LIST_INIT(rcd_door_types, list(
var/turf/AT = get_turf(A)
AT.ChangeTurf(/turf/simulated/floor/plating)
return TRUE
to_chat(user, "<span class='warning'>ERROR! Not enough matter in unit to construct this floor!</span>")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
return FALSE
if(isfloorturf(A))
@@ -268,27 +270,39 @@ GLOBAL_LIST_INIT(rcd_door_types, list(
var/turf/AT = A
AT.ChangeTurf(/turf/simulated/wall)
return TRUE
return FALSE
to_chat(user, "<span class='warning'>ERROR! Not enough matter in unit to construct this wall!</span>")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
return FALSE
to_chat(user, "<span class='warning'>ERROR! Location unsuitable for wall construction!</span>")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
return FALSE
/obj/item/rcd/proc/mode_airlock(atom/A, mob/user)
if(isfloorturf(A) && checkResource(10, user))
to_chat(user, "Building Airlock...")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50 * toolspeed, target = A))
if(locate(/obj/machinery/door/airlock) in A.contents)
if(isfloorturf(A))
if(checkResource(10, user))
to_chat(user, "Building Airlock...")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50 * toolspeed, target = A))
if(locate(/obj/machinery/door/airlock) in A.contents)
return FALSE
if(!useResource(10, user))
return FALSE
playsound(loc, usesound, 50, 1)
var/obj/machinery/door/airlock/T = new door_type(A)
T.name = door_name
T.autoclose = TRUE
if(one_access)
T.req_one_access = door_accesses.Copy()
else
T.req_access = door_accesses.Copy()
return FALSE
if(!useResource(10, user))
return FALSE
playsound(loc, usesound, 50, 1)
var/obj/machinery/door/airlock/T = new door_type(A)
T.name = door_name
T.autoclose = TRUE
if(one_access)
T.req_one_access = door_accesses.Copy()
else
T.req_access = door_accesses.Copy()
return FALSE
to_chat(user, "<span class='warning'>ERROR! Not enough matter in unit to construct this airlock!</span>")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
return FALSE
to_chat(user, "<span class='warning'>ERROR! Location unsuitable for airlock construction!</span>")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
return FALSE
/obj/item/rcd/proc/mode_decon(atom/A, mob/user)
@@ -305,6 +319,9 @@ GLOBAL_LIST_INIT(rcd_door_types, list(
var/turf/AT = A
AT.ChangeTurf(/turf/simulated/floor/plating)
return TRUE
return FALSE
to_chat(user, "<span class='warning'>ERROR! Not enough matter in unit to deconstruct this wall!</span>")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
return FALSE
if(isfloorturf(A))
@@ -318,6 +335,9 @@ GLOBAL_LIST_INIT(rcd_door_types, list(
var/turf/AT = A
AT.ChangeTurf(/turf/space)
return TRUE
return FALSE
to_chat(user, "<span class='warning'>ERROR! Not enough matter in unit to deconstruct this floor!</span>")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
return FALSE
if(istype(A, /obj/machinery/door/airlock))
@@ -330,12 +350,17 @@ GLOBAL_LIST_INIT(rcd_door_types, list(
playsound(loc, usesound, 50, 1)
qdel(A)
return TRUE
return FALSE
to_chat(user, "<span class='warning'>ERROR! Not enough matter in unit to deconstruct this airlock!</span>")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
return FALSE
if(istype(A, /obj/structure/window)) // You mean the grille of course, do you?
A = locate(/obj/structure/grille) in A.loc
if(istype(A, /obj/structure/grille))
if(!checkResource(2, user))
to_chat(user, "<span class='warning'>ERROR! Not enough matter in unit to deconstruct this window!</span>")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
return 0
to_chat(user, "Deconstructing window...")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
@@ -367,6 +392,8 @@ GLOBAL_LIST_INIT(rcd_door_types, list(
if(locate(/obj/structure/grille) in A)
return 0 // We already have window
if(!checkResource(2, user))
to_chat(user, "<span class='warning'>ERROR! Not enough matter in unit to construct this window!</span>")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
return 0
to_chat(user, "Constructing window...")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
@@ -392,6 +419,9 @@ GLOBAL_LIST_INIT(rcd_door_types, list(
var/turf/AT = A
AT.ChangeTurf(/turf/simulated/floor/plating) // Platings go under windows.
return 1
to_chat(user, "<span class='warning'>ERROR! Location unsuitable for window construction!</span>")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
return 0
/obj/item/rcd/afterattack(atom/A, mob/user, proximity)
if(!proximity)
+4 -3
View File
@@ -89,7 +89,7 @@ LIGHTERS ARE IN LIGHTERS.DM
else if(istype(W, /obj/item/melee/energy/sword/saber))
var/obj/item/melee/energy/sword/saber/S = W
if(S.active)
light("<span class='warning'>[user] swings their [W], barely missing their nose. [user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [name] in the process.</span>")
light("<span class='warning'>[user] makes a violent slashing motion, barely missing [user.p_their()] nose as light flashes. [user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [name] with [W] in the process.</span>")
else if(istype(W, /obj/item/assembly/igniter))
light("<span class='notice'>[user] fiddles with [W], and manages to light [user.p_their()] [name].</span>")
@@ -195,7 +195,8 @@ LIGHTERS ARE IN LIGHTERS.DM
if(reagents && reagents.total_volume) // check if it has any reagents at all
if(is_being_smoked) // if it's being smoked, transfer reagents to the mob
var/mob/living/carbon/C = loc
reagents.trans_to(C, REAGENTS_METABOLISM)
for (var/datum/reagent/R in reagents.reagent_list)
reagents.trans_to(C, REAGENTS_METABOLISM)
if(!reagents.total_volume) // There were reagents, but now they're gone
to_chat(C, "<span class='notice'>Your [name] loses its flavor.</span>")
else // else just remove some of the reagents
@@ -232,7 +233,7 @@ LIGHTERS ARE IN LIGHTERS.DM
throw_speed = 0.5
item_state = "spliffoff"
smoketime = 180
chem_volume = 50
chem_volume = 100
/obj/item/clothing/mask/cigarette/rollie/New()
..()
@@ -53,6 +53,6 @@
for(M in ohearers(7, T))
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs) || H.ear_deaf)
if(!H.can_hear())
continue
M.emote("flip")
@@ -59,13 +59,16 @@
if(!ear_safety)
M.Stun(max(10/distance, 3))
M.Weaken(max(10/distance, 3))
M.EarDeaf(15)
M.AdjustEarDamage(rand(0, 5))
if(M.ear_damage >= 15)
to_chat(M, "<span class='warning'>Your ears start to ring badly!</span>")
if(prob(M.ear_damage - 5))
to_chat(M, "<span class='warning'>You can't hear anything!</span>")
M.BecomeDeaf()
else
if(M.ear_damage >= 5)
to_chat(M, "<span class='warning'>Your ears start to ring!</span>")
M.AdjustEarDamage(rand(0, 5), 15)
if(iscarbon(M))
var/mob/living/carbon/C = M
var/obj/item/organ/internal/ears/ears = C.get_int_organ(/obj/item/organ/internal/ears)
if(istype(ears))
if(ears.ear_damage >= 15)
to_chat(M, "<span class='warning'>Your ears start to ring badly!</span>")
if(prob(ears.ear_damage - 5))
to_chat(M, "<span class='warning'>You can't hear anything!</span>")
M.BecomeDeaf()
else
if(ears.ear_damage >= 5)
to_chat(M, "<span class='warning'>Your ears start to ring!</span>")
@@ -45,7 +45,7 @@
/obj/item/grenade/spawnergrenade/feral_cats
name = "feral cat delivery grenade"
desc = "This grenade contains 8 dehydrated feral cats in a similar manner to dehydrated monkeys, which, upon detonation, will be rehydrated by a small reservoir of water contained within the grenade. These cats will then attack anything in sight."
desc = "This grenade contains 5 dehydrated feral cats in a similar manner to dehydrated monkeys, which, upon detonation, will be rehydrated by a small reservoir of water contained within the grenade. These cats will then attack anything in sight."
spawner_type = /mob/living/simple_animal/hostile/feral_cat
deliveryamt = 5
origin_tech = "materials=3;magnets=4;syndicate=3"
@@ -8,6 +8,7 @@
throw_range = 5
w_class = WEIGHT_CLASS_TINY
origin_tech = "materials=1;biotech=2"
container_type = OPENCONTAINER | INJECTABLE | DRAWABLE
materials = list(MAT_GLASS=500)
var/obj/item/implant/imp = null
@@ -168,7 +168,7 @@
max_combined_w_class = 100 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class
max_w_class = WEIGHT_CLASS_NORMAL
w_class = WEIGHT_CLASS_TINY
can_hold = list(/obj/item/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/grown,/obj/item/reagent_containers/food/snacks/ash_flora)
can_hold = list(/obj/item/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/grown,/obj/item/reagent_containers/food/snacks/grown/ash_flora)
burn_state = FLAMMABLE
/obj/item/storage/bag/plants/portaseeder
@@ -254,7 +254,7 @@
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
update_icon()
/obj/item/storage/belt/soulstone
name = "soul stone belt"
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away"
@@ -295,6 +295,13 @@
item_state = "military"
max_w_class = WEIGHT_CLASS_SMALL
/obj/item/storage/belt/military/traitor
name = "tool-belt"
desc = "Can hold various tools. This model seems to have additional compartments."
icon_state = "utilitybelt"
item_state = "utility"
use_item_overlays = 1 // So it will still show tools in it in case sec get lazy and just glance at it.
/obj/item/storage/belt/military/abductor
name = "agent belt"
desc = "A belt used by abductor agents."
@@ -58,13 +58,14 @@
name = "large box"
desc = "You could build a fort with this."
icon_state = "largebox"
w_class = 42 // Big, bulky.
w_class = 4 // Big, bulky.
foldable = /obj/item/stack/sheet/cardboard
amt = 4
storage_slots = 21
max_combined_w_class = 42 // 21*2
/obj/item/storage/box/survival
icon_state = "box_civ"
New()
..()
contents = list()
@@ -74,6 +75,7 @@
return
/obj/item/storage/box/engineer
icon_state = "box_eng"
New()
..()
contents = list()
@@ -83,6 +85,7 @@
return
/obj/item/storage/box/survival_mining
icon_state = "box_min"
New()
..()
contents = list()
@@ -563,6 +566,33 @@
new /obj/item/cartridge/security(src)
new /obj/item/cartridge/security(src)
/obj/item/storage/box/holobadge
name = "holobadge box"
icon_state = "box_badge"
desc = "A box claiming to contain holobadges."
New()
new /obj/item/clothing/accessory/holobadge(src)
new /obj/item/clothing/accessory/holobadge(src)
new /obj/item/clothing/accessory/holobadge(src)
new /obj/item/clothing/accessory/holobadge(src)
new /obj/item/clothing/accessory/holobadge/cord(src)
new /obj/item/clothing/accessory/holobadge/cord(src)
..()
return
/obj/item/storage/box/evidence
name = "evidence bag box"
desc = "A box claiming to contain evidence bags."
icon_state = "box_evidence"
/obj/item/storage/box/evidence/New()
new /obj/item/evidencebag(src)
new /obj/item/evidencebag(src)
new /obj/item/evidencebag(src)
new /obj/item/evidencebag(src)
new /obj/item/evidencebag(src)
new /obj/item/evidencebag(src)
..()
/obj/item/storage/box/handcuffs
name = "spare handcuffs"
@@ -642,6 +672,20 @@
new /obj/item/storage/pill_bottle( src )
new /obj/item/storage/pill_bottle( src )
/obj/item/storage/box/bodybags
name = "body bags"
desc = "This box contains body bags."
icon_state = "bodybags"
/obj/item/storage/box/bodybags/New()
..()
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
/obj/item/storage/box/snappops
name = "snap pop box"
@@ -834,7 +878,8 @@
/obj/item/storage/box/centcomofficer
name = "officer kit"
icon_state = "box_ert"
/obj/item/storage/box/centcomofficer/New()
..()
contents = list()
@@ -850,6 +895,19 @@
new /obj/item/reagent_containers/hypospray/combat/nanites(src)
new /obj/item/pinpointer/advpinpointer(src)
/obj/item/storage/box/responseteam
name = "boxed survival kit"
icon_state = "box_ert"
/obj/item/storage/box/responseteam/New()
..()
new /obj/item/clothing/mask/breath(src)
new /obj/item/tank/emergency_oxygen/engi(src)
new /obj/item/flashlight/flare(src)
new /obj/item/kitchen/knife/combat(src)
new /obj/item/radio/centcom(src)
new /obj/item/reagent_containers/food/pill/patch/synthflesh(src)
new /obj/item/reagent_containers/hypospray/autoinjector(src)
#undef NODESIGN
#undef NANOTRASEN
@@ -87,24 +87,28 @@
/obj/item/storage/box/syndie_kit/space
name = "Boxed Space Suit and Helmet"
can_hold = list(/obj/item/clothing/suit/space/syndicate/black/red, /obj/item/clothing/head/helmet/space/syndicate/black/red)
can_hold = list(/obj/item/clothing/suit/space/syndicate/black/red, /obj/item/clothing/head/helmet/space/syndicate/black/red, /obj/item/tank/emergency_oxygen/syndi, /obj/item/clothing/mask/gas/syndicate)
max_w_class = WEIGHT_CLASS_NORMAL
/obj/item/storage/box/syndie_kit/space/New()
..()
new /obj/item/clothing/suit/space/syndicate/black/red(src)
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
new /obj/item/clothing/mask/gas/syndicate(src)
new /obj/item/tank/emergency_oxygen/syndi(src)
return
/obj/item/storage/box/syndie_kit/hardsuit
name = "Boxed Blood Red Suit and Helmet"
can_hold = list(/obj/item/clothing/suit/space/hardsuit/syndi, /obj/item/clothing/head/helmet/space/hardsuit/syndi)
can_hold = list(/obj/item/clothing/suit/space/hardsuit/syndi, /obj/item/clothing/head/helmet/space/hardsuit/syndi, /obj/item/tank/emergency_oxygen/syndi, /obj/item/clothing/mask/gas/syndicate)
max_w_class = WEIGHT_CLASS_NORMAL
/obj/item/storage/box/syndie_kit/hardsuit/New()
..()
new /obj/item/clothing/suit/space/hardsuit/syndi(src)
new /obj/item/clothing/head/helmet/space/hardsuit/syndi(src)
new /obj/item/clothing/mask/gas/syndicate(src)
new /obj/item/tank/emergency_oxygen/syndi(src)
return
/obj/item/storage/box/syndie_kit/elite_hardsuit
@@ -261,4 +265,15 @@
<font size = "1">This is a highly experimental prototype chemical designed to repair damaged bones of soldiers in the field, use only as a last resort. The autoinjector contains prototype nanites bearing a calcium based payload. The nanites will simultaneously shut down body systems whilst aiding bone repair.<BR><BR><BR>Warning: Side effects can cause temporary paralysis, loss of co-ordination and sickness. <B>Do not use with any kind of stimulant or drugs. Serious damage can occur!</B><BR><BR><BR>
To apply, hold the injector a short distance away from the outer thigh before applying firmly to the skin surface. Bones should begin repair after a short time, during which you are advised to remain still. <BR><BR><BR><BR>After use you are advised to see a doctor at the next available opportunity. Mild scarring and tissue damage may occur after use. This is a prototype.</font><BR><HR></font>
"}
"}
/obj/item/storage/box/syndie_kit/safecracking
name = "Safe-cracking Kit"
desc = "Everything you need to quietly open a mechanical combination safe."
/obj/item/storage/box/syndie_kit/safecracking/New()
..()
new /obj/item/clothing/gloves/color/latex/nitrile(src)
new /obj/item/clothing/mask/balaclava(src)
new /obj/item/clothing/accessory/stethoscope(src)
new /obj/item/book/manual/engineering_hacking(src)
+26 -9
View File
@@ -41,6 +41,16 @@
return
/obj/item/melee/baton/proc/deductcharge(var/chrgdeductamt)
if(isrobot(loc))
var/mob/living/silicon/robot/R = loc
if(R.cell && R.cell.charge < (hitcost+chrgdeductamt))
status = 0
update_icon()
playsound(loc, "sparks", 75, 1, -1)
if(R.cell.use(chrgdeductamt))
return 1
else
return 0
if(bcell)
if(bcell.charge < (hitcost+chrgdeductamt)) // If after the deduction the baton doesn't have enough charge for a stun hit it turns off.
status = 0
@@ -61,6 +71,8 @@
/obj/item/melee/baton/examine(mob/user)
..(user)
if(isrobot(loc))
to_chat(user, "<span class='notice'>This baton is drawing power directly from your own internal charge.</span>")
if(bcell)
to_chat(user, "<span class='notice'>The baton is [round(bcell.percent())]% charged.</span>")
if(!bcell)
@@ -95,7 +107,17 @@
return
/obj/item/melee/baton/attack_self(mob/user)
if(bcell && bcell.charge >= hitcost)
if(isrobot(loc))
var/mob/living/silicon/robot/R = loc
if(R && R.cell && R.cell.charge >= (hitcost))
status = !status
to_chat(user, "<span class='notice'>[src] is now [status ? "on" : "off"].</span>")
playsound(loc, "sparks", 75, 1, -1)
else
status = 0
to_chat(user, "<span class='warning'>You do not have enough reserve power to charge the [src]!</span>")
else if(bcell && bcell.charge >= hitcost)
status = !status
to_chat(user, "<span class='notice'>[src] is now [status ? "on" : "off"].</span>")
playsound(loc, "sparks", 75, 1, -1)
@@ -141,13 +163,13 @@
/obj/item/melee/baton/proc/baton_stun(mob/living/L, mob/user)
if(!ismob(L)) //because this was being called on turfs for some reason
return
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.check_shields(0, "[user]'s [name]", src, MELEE_ATTACK)) //No message; check_shields() handles that
playsound(L, 'sound/weapons/Genhit.ogg', 50, 1)
return
L.Stun(stunforce)
L.Weaken(stunforce)
L.apply_effect(STUTTER, stunforce)
@@ -160,12 +182,7 @@
add_attack_logs(user, L, "stunned")
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
if(isrobot(loc))
var/mob/living/silicon/robot/R = loc
if(R && R.cell)
R.cell.use(hitcost)
else
deductcharge(hitcost)
deductcharge(hitcost)
if(ishuman(L))
var/mob/living/carbon/human/H = L
@@ -147,6 +147,12 @@
icon_state = "emergency_engi"
volume = 6
/obj/item/tank/emergency_oxygen/syndi
name = "suspicious emergency oxygen tank"
icon_state = "emergency_syndi"
desc = "A dark emergency oxygen tank. The label on the back reads \"Original Oxygen Tank Design, Do Not Steal.\""
volume = 6
/obj/item/tank/emergency_oxygen/double
name = "double emergency oxygen tank"
icon_state = "emergency_double"