Merge remote-tracking branch 'upstream/master' into sr-update

This commit is contained in:
Fox McCloud
2019-04-06 19:58:12 -04:00
22 changed files with 168 additions and 66 deletions
+18 -7
View File
@@ -90,7 +90,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
if(hijack_only)
if(!(locate(/datum/objective/hijack) in usr.mind.objectives))
to_chat(usr, "<span class='warning'>The Syndicate lacks resources to provide you with this item.</span>")
to_chat(usr, "<span class='warning'>The Syndicate will only issue this extremely dangerous item to agents assigned the Hijack objective.</span>")
return
if(item)
@@ -929,6 +929,8 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
reference = "SB"
item = /obj/item/radio/beacon/syndicate/bomb
cost = 11
surplus = 0
cant_discount = TRUE
/datum/uplink_item/explosives/syndicate_minibomb
name = "Syndicate Minibomb"
@@ -978,13 +980,22 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
/datum/uplink_item/explosives/atmosgrenades
name = "Atmos Grenades"
desc = "A box of two (2) grenades that wreak havoc with the atmosphere of the target area. Capable of engulfing a large area in lit plasma, or N2O. Deploy with extreme caution!"
reference = "AGG"
item = /obj/item/storage/box/syndie_kit/atmosgasgrenades
cost = 11
/datum/uplink_item/explosives/atmosn2ogrenades
name = "Knockout Gas Grenades"
desc = "A box of two (2) grenades that spread knockout gas over a large area. Equip internals before using one of these."
reference = "ANG"
item = /obj/item/storage/box/syndie_kit/atmosn2ogrenades
cost = 8
/datum/uplink_item/explosives/atmosfiregrenades
name = "Plasma Fire Grenades"
desc = "A box of two (2) grenades that cause large plasma fires. Can be used to deny access to a large area. Most useful if you have an atmospherics hardsuit."
reference = "APG"
item = /obj/item/storage/box/syndie_kit/atmosfiregrenades
hijack_only = TRUE
cost = 12
surplus = 0
cant_discount = TRUE
/datum/uplink_item/explosives/emp
name = "EMP Grenades and Implanter Kit"
+10 -7
View File
@@ -67,15 +67,17 @@
/mob/living/simple_animal/hostile/blob/blobspore/Life(seconds, times_fired)
if(!is_zombie && isturf(src.loc))
for(var/mob/living/carbon/human/H in oview(src,1)) //Only for corpse right next to/on same tile
if(H.stat == DEAD)
for(var/mob/living/carbon/human/H in oview(src, 1)) //Only for corpse right next to/on same tile
if(H.stat == DEAD || (!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD))
Zombify(H)
break
..()
/mob/living/simple_animal/hostile/blob/blobspore/proc/Zombify(var/mob/living/carbon/human/H)
/mob/living/simple_animal/hostile/blob/blobspore/proc/Zombify(mob/living/carbon/human/H)
if(!H.check_death_method())
H.death()
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
is_zombie = 1
is_zombie = TRUE
if(H.wear_suit)
var/obj/item/clothing/suit/armor/A = H.wear_suit
if(A.armor && A.armor["melee"])
@@ -89,14 +91,15 @@
icon = H.icon
speak_emote = list("groans")
icon_state = "zombie2_s"
head_organ.h_style = null
if(head_organ)
head_organ.h_style = null
H.update_hair()
human_overlays = H.overlays
update_icons()
H.loc = src
H.forceMove(src)
pressure_resistance = 20 //5 kPa difference required to push lowered
throw_pressure_limit = 30 //15 kPa difference required to throw lowered
loc.visible_message("<span class='warning'>The corpse of [H.name] suddenly rises!</span>")
visible_message("<span class='warning'>The corpse of [H.name] suddenly rises!</span>")
/mob/living/simple_animal/hostile/blob/blobspore/death(gibbed)
// Only execute the below if we successfuly died
@@ -60,9 +60,9 @@
/mob/living/simple_animal/hostile/guardian/Life(seconds, times_fired) //Dies if the summoner dies
..()
if(summoner)
if(summoner.stat == DEAD)
if(summoner.stat == DEAD || (!summoner.check_death_method() && summoner.health <= HEALTH_THRESHOLD_DEAD))
to_chat(src, "<span class='danger'>Your summoner has died!</span>")
visible_message("<span class='danger'>The [src] dies along with its user!</span>")
visible_message("<span class='danger'>[src] dies along with its user!</span>")
ghostize()
qdel(src)
snapback()
+6 -2
View File
@@ -34,7 +34,7 @@
var/obj/effect/countdown/clonepod/countdown
var/list/brine_types = list("corazone", "salbutamol", "epinephrine", "salglu_solution") //stops heart attacks, heart failure, shock, and keeps their O2 levels normal
var/list/brine_types = list("corazone", "perfluorodecalin", "epinephrine", "salglu_solution") //stops heart attacks, heart failure, shock, and keeps their O2 levels normal
var/list/missing_organs
var/organs_number = 0
@@ -341,7 +341,7 @@
check_brine()
//Also heal some oxyloss ourselves just in case!!
occupant.adjustOxyLoss(-4)
occupant.adjustOxyLoss(-10)
use_power(7500) //This might need tweaking.
@@ -480,6 +480,10 @@
for(var/i in missing_organs)
qdel(i)
missing_organs.Cut()
occupant.SetLoseBreath(0) // Stop friggin' dying, gosh damn
occupant.setOxyLoss(0)
for(var/datum/disease/critical/crit in occupant.viruses)
crit.cure()
occupant.forceMove(T)
occupant.update_body()
domutcheck(occupant) //Waiting until they're out before possible notransform.
+11 -2
View File
@@ -36,10 +36,13 @@
if(scanner.occupant && can_autoprocess())
scan_mob(scanner.occupant)
if(!LAZYLEN(records))
return
for(var/obj/machinery/clonepod/pod in pods)
if(!(pod.occupant || pod.mess) && (pod.efficiency > 5))
for(var/datum/dna2/record/R in src.records)
for(var/datum/dna2/record/R in records)
if(!(pod.occupant || pod.mess))
if(pod.growclone(R))
records.Remove(R)
@@ -392,6 +395,12 @@
SSnanoui.update_uis(src)
return
for(var/obj/machinery/clonepod/pod in pods)
if(pod.occupant && pod.clonemind == subject.mind)
scantemp = "Subject already getting cloned."
SSnanoui.update_uis(src)
return
subject.dna.check_integrity()
var/datum/dna2/record/R = new /datum/dna2/record()
@@ -279,7 +279,7 @@
/obj/item/clothing/glasses/thermal = 1,
/obj/item/chameleon = 1,
/obj/item/reagent_containers/hypospray/autoinjector/stimulants = 1,
/obj/item/storage/box/syndie_kit/atmosgasgrenades = 1,
/obj/item/storage/box/syndie_kit/atmosn2ogrenades = 1,
/obj/item/grenade/plastic/x4 = 1)
+5 -2
View File
@@ -71,7 +71,10 @@ var/list/world_uplinks = list()
if(I.job && I.job.len)
if(!(I.job.Find(job)))
continue
dat += "<A href='byond://?src=[UID()];buy_item=[I.reference];cost=[I.cost]'>[I.name]</A> ([I.cost])<BR>"
dat += "<A href='byond://?src=[UID()];buy_item=[I.reference];cost=[I.cost]'>[I.name]</A> ([I.cost])"
if(I.hijack_only)
dat += " (HIJACK ONLY)"
dat += " <BR>"
category_items++
dat += "<A href='byond://?src=[UID()];buy_item=random'>Random Item (??)</A><br>"
@@ -94,7 +97,7 @@ var/list/world_uplinks = list()
if(I.job && I.job.len)
if(!(I.job.Find(job)))
continue
nano[nano.len]["items"] += list(list("Name" = sanitize(I.name), "Description" = sanitize(I.description()),"Cost" = I.cost, "obj_path" = I.reference))
nano[nano.len]["items"] += list(list("Name" = sanitize(I.name), "Description" = sanitize(I.description()),"Cost" = I.cost, "hijack_only" = I.hijack_only, "obj_path" = I.reference))
reference[I.reference] = I
var/datum/nano_item_lists/result = new
@@ -262,13 +262,24 @@
new /obj/item/spellbook/oneuse/mime/greaterwall(src)
new /obj/item/spellbook/oneuse/mime/fingergun(src)
/obj/item/storage/box/syndie_kit/atmosgasgrenades
name = "Atmos Grenades"
/obj/item/storage/box/syndie_kit/atmosgasgrenades/New()
/obj/item/storage/box/syndie_kit/atmosn2ogrenades
name = "Atmos N2O Grenades"
/obj/item/storage/box/syndie_kit/atmosn2ogrenades/New()
..()
new /obj/item/grenade/clusterbuster/n2o(src)
new /obj/item/grenade/clusterbuster/n2o(src)
/obj/item/storage/box/syndie_kit/atmosfiregrenades
name = "Plasma Fire Grenades"
/obj/item/storage/box/syndie_kit/atmosfiregrenades/New()
..()
new /obj/item/grenade/clusterbuster/plasma(src)
new /obj/item/grenade/clusterbuster/n2o(src)
new /obj/item/grenade/clusterbuster/plasma(src)
/obj/item/storage/box/syndie_kit/missionary_set
name = "Missionary Starter Kit"
+4 -4
View File
@@ -256,18 +256,18 @@
/obj/structure/statue/diamond
hardness = 10
material_drop_type = /obj/item/stack/sheet/mineral/diamond
desc = "This is a very expensive diamond statue"
desc = "This is a very expensive diamond statue."
/obj/structure/statue/diamond/captain
name = "statue of THE captain."
name = "statue of THE captain"
icon_state = "cap"
/obj/structure/statue/diamond/ai1
name = "statue of the AI hologram."
name = "statue of the AI hologram"
icon_state = "ai1"
/obj/structure/statue/diamond/ai2
name = "statue of the AI core."
name = "statue of the AI core"
icon_state = "ai2"
/obj/structure/statue/bananium
@@ -363,7 +363,7 @@
for(var/datum/data/record/R in data_core.security)
if(R.fields["id"] == E.fields["id"])
criminal = R.fields["criminal"]
var/criminal_status = hasHUD(user, "read_only_security") ? "\[[criminal]\]" : "<a href='?src=[UID()];criminal=[glasses]'>\[[criminal]\]</a>"
var/criminal_status = hasHUD(user, "read_only_security") ? "\[[criminal]\]" : "<a href='?src=[UID()];criminal=1'>\[[criminal]\]</a>"
msg += "<span class = 'deptradio'>Criminal status:</span> [criminal_status]\n"
msg += "<span class = 'deptradio'>Security records:</span> <a href='?src=[UID()];secrecord=`'>\[View\]</a> <a href='?src=[UID()];secrecordadd=`'>\[Add comment\]</a>\n"
+5 -14
View File
@@ -283,34 +283,25 @@ var/global/list/fax_blacklist = list()
use_power(200)
var/obj/item/rcvdcopy
if(istype(copyitem, /obj/item/paper))
rcvdcopy = copy(copyitem)
else if(istype(copyitem, /obj/item/photo))
rcvdcopy = photocopy(copyitem)
else if(istype(copyitem, /obj/item/paper_bundle))
rcvdcopy = bundlecopy(copyitem)
else
if(!(istype(copyitem, /obj/item/paper) || istype(copyitem, /obj/item/paper_bundle) || istype(copyitem, /obj/item/photo)))
visible_message("[src] beeps, \"Error transmitting message.\"")
return
rcvdcopy.loc = null //hopefully this shouldn't cause trouble
var/datum/fax/admin/A = new /datum/fax/admin()
A.name = rcvdcopy.name
A.name = copyitem.name
A.from_department = department
A.to_department = destination
A.origin = src
A.message = rcvdcopy
A.message = copyitem
A.sent_by = sender
A.sent_at = world.time
//message badmins that a fax has arrived
switch(destination)
if("Central Command")
message_admins(sender, "CENTCOM FAX", destination, rcvdcopy, "#006100")
message_admins(sender, "CENTCOM FAX", destination, copyitem, "#006100")
if("Syndicate")
message_admins(sender, "SYNDICATE FAX", destination, rcvdcopy, "#DC143C")
message_admins(sender, "SYNDICATE FAX", destination, copyitem, "#DC143C")
for(var/obj/machinery/photocopier/faxmachine/F in allfaxes)
if(F.department == destination)
F.receivefax(copyitem)
@@ -765,7 +765,7 @@
/datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/M)
if(M.bodytemperature < 360)
M.bodytemperature = min(360, M.bodytemperature + (50 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
..()
return ..()
/datum/reagent/consumable/ethanol/devilskiss
name = "Devils Kiss"
@@ -819,7 +819,7 @@
/datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/M)
if(M.bodytemperature > 270)
M.bodytemperature = max(270, M.bodytemperature - (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
..()
return ..()
/datum/reagent/consumable/ethanol/grog
name = "Grog"
@@ -1178,7 +1178,7 @@
if(prob(25))
holder.remove_reagent(id, 15)
M.fakevomit()
..()
return ..()
/datum/reagent/consumable/ethanol/synthanol/reaction_mob(mob/living/M, method=TOUCH, volume)
if(M.isSynthetic())
@@ -42,7 +42,7 @@
/datum/reagent/consumable/drink/cold/ice/on_mob_life(mob/living/M)
M.bodytemperature = max(M.bodytemperature - 5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0)
..()
return ..()
/datum/reagent/consumable/drink/cold/space_cola
name = "Cola"
@@ -448,7 +448,7 @@
/datum/reagent/consumable/egg/on_mob_life(mob/living/M)
if(prob(3))
M.reagents.add_reagent("cholesterol", rand(1,2))
..()
return ..()
/datum/reagent/consumable/corn_starch
name = "Corn Starch"
@@ -643,9 +643,6 @@
color = "#684435"
taste_message = "burritos"
/datum/reagent/consumable/beans/on_mob_life(mob/living/M)
return ..()
/datum/reagent/consumable/bread
name = "Bread"
id = "bread"
@@ -5,6 +5,7 @@
/datum/reagent/medicine/on_mob_life(mob/living/M)
current_cycle++
holder.remove_reagent(id, (metabolization_rate / M.metabolism_efficiency) * M.digestion_ratio) //medicine reagents stay longer if you have a better metabolism
return STATUS_UPDATE_NONE
/datum/reagent/medicine/hydrocodone
name = "Hydrocodone"
@@ -526,6 +527,7 @@
taste_message = "a delightful numbing"
/datum/reagent/medicine/morphine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustJitter(-25)
switch(current_cycle)
if(1 to 15)
@@ -534,9 +536,9 @@
if(16 to 35)
M.Drowsy(20)
if(36 to INFINITY)
M.Paralyse(15)
update_flags |= M.Paralyse(15, FALSE)
M.Drowsy(20)
..()
return ..() | update_flags
/datum/reagent/medicine/oculine
name = "Oculine"
@@ -753,7 +755,7 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.update_mutations()
..()
return ..()
/datum/reagent/medicine/antihol
name = "Antihol"
@@ -851,6 +853,7 @@
/datum/reagent/medicine/insulin/on_mob_life(mob/living/M)
M.reagents.remove_reagent("sugar", 5)
return ..()
/datum/reagent/medicine/teporone
name = "Teporone"
@@ -867,7 +870,7 @@
M.bodytemperature = max(310, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
else if(M.bodytemperature < 311)
M.bodytemperature = min(310, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
..()
return ..()
/datum/reagent/medicine/haloperidol
name = "Haloperidol"
@@ -910,6 +913,7 @@
taste_message = "sleepiness"
/datum/reagent/medicine/ether/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustJitter(-25)
switch(current_cycle)
if(1 to 30)
@@ -918,9 +922,9 @@
if(31 to 40)
M.Drowsy(20)
if(41 to INFINITY)
M.Paralyse(15)
update_flags |= M.Paralyse(15, FALSE)
M.Drowsy(20)
..()
return ..() | update_flags
/datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs
name = "Restorative Nanites"
@@ -162,7 +162,7 @@
if(!H.dna.species.exotic_blood && !(NO_BLOOD in H.dna.species.species_traits))
if(H.blood_volume < BLOOD_VOLUME_NORMAL)
H.blood_volume += 0.8
..()
return ..()
/datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, volume)
if(M.has_bane(BANE_IRON) && holder && holder.chem_temp < 150) //If the target is weak to cold iron, then poison them.
@@ -31,7 +31,7 @@
var/turf/simulated/T = get_turf(M)
goonchem_vortex(T, 1, 0)
to_chat(M, "<span class='notice'>You briefly feel super-massive, like a black hole. Probably just your imagination...</span>")
..()
return ..()
//Berry Banned: This one is tasty and safe to drink, might have a low chance of healing a random damage type?
/datum/reagent/consumable/drink/berry_banned
@@ -1156,12 +1156,16 @@
M.apply_effect(2, IRRADIATE, 0, negate_armor = 1)
if(!M.dna)
return
var/did_mutation = FALSE
if(prob(15))
randmutb(M)
did_mutation = TRUE
if(prob(3))
randmutg(M)
domutcheck(M, null)
M.UpdateAppearance()
did_mutation = TRUE
if(did_mutation)
domutcheck(M, null)
M.UpdateAppearance()
return ..()
/datum/reagent/ants
@@ -139,7 +139,7 @@
required_reagents = list("plasma" = 1, "silver" = 1, "blackpowder" = 1)
result_amount = 3
mix_message = "<span class='danger'>A jet of sparks flies from the mixture as it merges into a flickering slurry.</span>"
min_temp = T0C + 130
min_temp = T0C + 50
mix_sound = null
/datum/chemical_reaction/teslium/on_reaction(datum/reagents/holder, created_volume)
+33
View File
@@ -56,14 +56,47 @@
-->
<div class="commit sansserif">
<h2 class="date">06 April 2019</h2>
<h3 class="author">Fox McCloud updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Fixes people popping out of cloning taking tons of damage</li>
<li class="bugfix">Fixes Teslium recipe</li>
<li class="bugfix">Fixes some reagents not causing status updates</li>
</ul>
<h3 class="author">Twinmold updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">No longer costs toner to send a fax to Central Command</li>
</ul>
<h3 class="author">dovydas12345 updated:</h3>
<ul class="changes bgimages16">
<li class="spellcheck">Fixed diamond statue names and description.</li>
</ul>
<h3 class="author">farie82 updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Sec huds work again. No longer does the perp need glasses to be set to arrest. Cool does not equal arrest now</li>
</ul>
<h2 class="date">04 April 2019</h2>
<h3 class="author">Kyep updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Improved the interface for Syndicate Uplinks. They now clearly mark which items are hijack-only and which are not. If you attempt to purchase a hijack-only item without hijack, they will explain why you can't.</li>
<li class="tweak">Atmos Gas Grenades (the uplink grenade kit) are now split into Knockout grenades (2 N2O grenades, 8 TC, available to all agents), and Plasma Fire grenades (2 plasma fire grenades, 12 TC, only available if you have hijack). This both makes knockout grenades more useful for normal traitors, and also prevents non-hijackers using a plasma fire grenade to cause massive casualties/damage.</li>
<li class="tweak">Plasma Grenades and the Syndicate Bomb can no longer show up in surplus crates, or be discounted. This means while you can buy one if you intend to, you're not randomly encouraged to bomb your target.</li>
</ul>
<h2 class="date">03 April 2019</h2>
<h3 class="author">Fox McCloud updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Dramatically improves human life performance (sorry, doesn't fix your actual crappy real life)</li>
<li class="tweak">Blobspores will additionally zomify all players who have 200 damage or more</li>
<li class="tweak">Holoparasites will additionally die once their host has 200 damage or more</li>
<li class="bugfix">Fixes blob zombies who infect players who have no head being invisible</li>
</ul>
<h3 class="author">farie82 updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Death nettle can be picked up again</li>
<li class="bugfix">Auto cloning now doesn't clone a person more than once.</li>
<li class="tweak">A person in the cloning scanner won't be scanned if he's already being cloned</li>
</ul>
<h2 class="date">02 April 2019</h2>
+32
View File
@@ -9665,5 +9665,37 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
Fox McCloud:
- bugfix: Dramatically improves human life performance (sorry, doesn't fix your
actual crappy real life)
- tweak: Blobspores will additionally zomify all players who have 200 damage or
more
- tweak: Holoparasites will additionally die once their host has 200 damage or more
- bugfix: Fixes blob zombies who infect players who have no head being invisible
farie82:
- bugfix: Death nettle can be picked up again
- bugfix: Auto cloning now doesn't clone a person more than once.
- tweak: A person in the cloning scanner won't be scanned if he's already being
cloned
2019-04-04:
Kyep:
- tweak: Improved the interface for Syndicate Uplinks. They now clearly mark which
items are hijack-only and which are not. If you attempt to purchase a hijack-only
item without hijack, they will explain why you can't.
- tweak: Atmos Gas Grenades (the uplink grenade kit) are now split into Knockout
grenades (2 N2O grenades, 8 TC, available to all agents), and Plasma Fire grenades
(2 plasma fire grenades, 12 TC, only available if you have hijack). This both
makes knockout grenades more useful for normal traitors, and also prevents non-hijackers
using a plasma fire grenade to cause massive casualties/damage.
- tweak: Plasma Grenades and the Syndicate Bomb can no longer show up in surplus
crates, or be discounted. This means while you can buy one if you intend to,
you're not randomly encouraged to bomb your target.
2019-04-06:
Fox McCloud:
- bugfix: Fixes people popping out of cloning taking tons of damage
- bugfix: Fixes Teslium recipe
- bugfix: Fixes some reagents not causing status updates
Twinmold:
- bugfix: No longer costs toner to send a fax to Central Command
dovydas12345:
- spellcheck: Fixed diamond statue names and description.
farie82:
- bugfix: Sec huds work again. No longer does the perp need glasses to be set to
arrest. Cool does not equal arrest now
+1 -1
View File
@@ -46,7 +46,7 @@ Used In File(s): \code\game\objects\items\devices\uplinks.dm
{{for value.items :itemValue:itemIndex}}
<tr>
<td><div class='floatLeft tooltipRight' data-tooltip='{{:tooltiptext(itemValue.Description)}}'>
{{:helper.link( itemValue.Name, 'gear', {'buy_item' : itemValue.obj_path, 'cost' : itemValue.Cost}, itemValue.Cost > data.crystals ? 'disabled' : null, null)}} - <span class="white">{{:itemValue.Cost}}</span>
{{:helper.link( itemValue.Name, 'gear', {'buy_item' : itemValue.obj_path, 'cost' : itemValue.Cost}, itemValue.Cost > data.crystals ? 'disabled' : null, null)}} - <span class="white">{{:itemValue.Cost}}</span> {{if itemValue.hijack_only}}(HIJACK AGENTS ONLY){{/if}}
</div></td>
</tr>
{{/for}}