diff --git a/baystation12.dme b/baystation12.dme
index b82ce97a578..8afc68318e4 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -787,10 +787,10 @@
#include "code\modules\customitems\item_defines.dm"
#include "code\modules\customitems\item_spawning.dm"
#include "code\modules\destilery\main.dm"
-#include "code\modules\DetectiveWork\detective_work.dm"
-#include "code\modules\DetectiveWork\evidence.dm"
-#include "code\modules\DetectiveWork\footprints_and_rag.dm"
-#include "code\modules\DetectiveWork\scanner.dm"
+#include "code\modules\detectivework\detective_work.dm"
+#include "code\modules\detectivework\evidence.dm"
+#include "code\modules\detectivework\footprints_and_rag.dm"
+#include "code\modules\detectivework\scanner.dm"
#include "code\modules\events\alien_infestation.dm"
#include "code\modules\events\blob.dm"
#include "code\modules\events\brand_intelligence.dm"
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index e73cfeb9422..e5be5d60a7a 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -271,21 +271,7 @@ var/list/sacrificed = list()
usr << "\red You require a restless spirit which clings to this world. Beckon their prescence with the sacred chants of Nar-Sie."
return fizzle()
- for(var/datum/organ/external/affecting in corpse_to_raise.organs)
- affecting.heal_damage(1000, 1000)
- corpse_to_raise.setToxLoss(0)
- corpse_to_raise.setOxyLoss(0)
- corpse_to_raise.SetParalysis(0)
- corpse_to_raise.SetStunned(0)
- corpse_to_raise.SetWeakened(0)
- corpse_to_raise.radiation = 0
-// corpse_to_raise.buckled = null
-// if(corpse_to_raise.handcuffed)
-// del(corpse_to_raise.handcuffed)
-// corpse_to_raise.update_inv_handcuffed(0)
- corpse_to_raise.stat = CONSCIOUS
- corpse_to_raise.updatehealth()
- corpse_to_raise.UpdateDamageIcon()
+ corpse_to_raise.revive()
corpse_to_raise.key = ghost.key //the corpse will keep its old mind! but a new player takes ownership of it (they are essentially possessed)
//This means, should that player leave the body, the original may re-enter
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 33fc438c4ac..378d08f880d 100755
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -288,7 +288,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
return 0
var/mob/M = loc
- if(!M.canmove)
+ if(M.stat || M.restrained() || M.paralysis || M.stunned || M.weakened)
return 0
if((src in M.contents) || ( istype(loc, /turf) && in_range(src, M) ))
return 1
@@ -306,7 +306,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/MouseDrop(obj/over_object as obj, src_location, over_location)
var/mob/M = usr
- if((!istype(over_object, /obj/screen)) && !M.restrained() && !M.stat && can_use())
+ if((!istype(over_object, /obj/screen)) && can_use())
return attack_self(M)
return
@@ -520,231 +520,226 @@ var/global/list/obj/item/device/pda/PDAs = list()
//if ((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) ) )
if(can_use()) //Why reinvent the wheel? There's a proc that does exactly that.
- if ( !(U.stat || U.restrained()) )
- add_fingerprint(U)
- U.set_machine(src)
+ add_fingerprint(U)
+ U.set_machine(src)
- switch(href_list["choice"])
+ switch(href_list["choice"])
//BASIC FUNCTIONS===================================
- if("Close")//Self explanatory
- U.unset_machine()
- U << browse(null, "window=pda")
- return
- if("Refresh")//Refresh, goes to the end of the proc.
- if("Return")//Return
- if(mode<=9)
+ if("Close")//Self explanatory
+ U.unset_machine()
+ U << browse(null, "window=pda")
+ return
+ if("Refresh")//Refresh, goes to the end of the proc.
+ if("Return")//Return
+ if(mode<=9)
+ mode = 0
+ else
+ mode = round(mode/10)
+ if(mode==4)//Fix for cartridges. Redirects to hub.
mode = 0
- else
- mode = round(mode/10)
- if(mode==4)//Fix for cartridges. Redirects to hub.
- mode = 0
- else if(mode >= 40 && mode <= 49)//Fix for cartridges. Redirects to refresh the menu.
- cartridge.mode = mode
- cartridge.unlock()
- if ("Authenticate")//Checks for ID
- id_check(U, 1)
- if("UpdateInfo")
- ownjob = id.assignment
- name = "PDA-[owner] ([ownjob])"
- if("Eject")//Ejects the cart, only done from hub.
- if (!isnull(cartridge))
- var/turf/T = loc
- if(ismob(T))
- T = T.loc
- cartridge.loc = T
- scanmode = 0
- if (cartridge.radio)
- cartridge.radio.hostpda = null
- cartridge = null
+ else if(mode >= 40 && mode <= 49)//Fix for cartridges. Redirects to refresh the menu.
+ cartridge.mode = mode
+ cartridge.unlock()
+ if ("Authenticate")//Checks for ID
+ id_check(U, 1)
+ if("UpdateInfo")
+ ownjob = id.assignment
+ name = "PDA-[owner] ([ownjob])"
+ if("Eject")//Ejects the cart, only done from hub.
+ if (!isnull(cartridge))
+ var/turf/T = loc
+ if(ismob(T))
+ T = T.loc
+ cartridge.loc = T
+ scanmode = 0
+ if (cartridge.radio)
+ cartridge.radio.hostpda = null
+ cartridge = null
//MENU FUNCTIONS===================================
- if("0")//Hub
- mode = 0
- if("1")//Notes
- mode = 1
- if("2")//Messenger
- mode = 2
- if("21")//Read messeges
- mode = 21
- if("3")//Atmos scan
- mode = 3
- if("4")//Redirects to hub
- mode = 0
- if("chatroom") // chatroom hub
- mode = 5
- if("41") //Manifest
- mode = 41
+ if("0")//Hub
+ mode = 0
+ if("1")//Notes
+ mode = 1
+ if("2")//Messenger
+ mode = 2
+ if("21")//Read messeges
+ mode = 21
+ if("3")//Atmos scan
+ mode = 3
+ if("4")//Redirects to hub
+ mode = 0
+ if("chatroom") // chatroom hub
+ mode = 5
+ if("41") //Manifest
+ mode = 41
//MAIN FUNCTIONS===================================
- if("Light")
- if(fon)
- fon = 0
- if(src in U.contents) U.SetLuminosity(U.luminosity - f_lum)
- else SetLuminosity(0)
- else
- fon = 1
- if(src in U.contents) U.SetLuminosity(U.luminosity + f_lum)
- else SetLuminosity(f_lum)
- if("Medical Scan")
- if(scanmode == 1)
- scanmode = 0
- else if((!isnull(cartridge)) && (cartridge.access_medical))
- scanmode = 1
- if("Reagent Scan")
- if(scanmode == 3)
- scanmode = 0
- else if((!isnull(cartridge)) && (cartridge.access_reagent_scanner))
- scanmode = 3
- if("Halogen Counter")
- if(scanmode == 4)
- scanmode = 0
- else if((!isnull(cartridge)) && (cartridge.access_engine))
- scanmode = 4
- if("Honk")
- if ( !(last_honk && world.time < last_honk + 20) )
- playsound(loc, 'sound/items/bikehorn.ogg', 50, 1)
- last_honk = world.time
- if("Gas Scan")
- if(scanmode == 5)
- scanmode = 0
- else if((!isnull(cartridge)) && (cartridge.access_atmos))
- scanmode = 5
+ if("Light")
+ if(fon)
+ fon = 0
+ if(src in U.contents) U.SetLuminosity(U.luminosity - f_lum)
+ else SetLuminosity(0)
+ else
+ fon = 1
+ if(src in U.contents) U.SetLuminosity(U.luminosity + f_lum)
+ else SetLuminosity(f_lum)
+ if("Medical Scan")
+ if(scanmode == 1)
+ scanmode = 0
+ else if((!isnull(cartridge)) && (cartridge.access_medical))
+ scanmode = 1
+ if("Reagent Scan")
+ if(scanmode == 3)
+ scanmode = 0
+ else if((!isnull(cartridge)) && (cartridge.access_reagent_scanner))
+ scanmode = 3
+ if("Halogen Counter")
+ if(scanmode == 4)
+ scanmode = 0
+ else if((!isnull(cartridge)) && (cartridge.access_engine))
+ scanmode = 4
+ if("Honk")
+ if ( !(last_honk && world.time < last_honk + 20) )
+ playsound(loc, 'sound/items/bikehorn.ogg', 50, 1)
+ last_honk = world.time
+ if("Gas Scan")
+ if(scanmode == 5)
+ scanmode = 0
+ else if((!isnull(cartridge)) && (cartridge.access_atmos))
+ scanmode = 5
//MESSENGER/NOTE FUNCTIONS===================================
- if ("Edit")
- var/n = input(U, "Please enter message", name, notehtml) as message
- if (in_range(src, U) && loc == U)
- n = copytext(adminscrub(n), 1, MAX_MESSAGE_LEN)
- if (mode == 1)
- note = replacetext(n, "\n", "
")
- notehtml = n
- else
- U << browse(null, "window=pda")
- return
- if("Toggle Messenger")
- toff = !toff
- if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status
- silent = !silent
- if("Clear")//Clears messages
- tnote = null
- if("Ringtone")
- var/t = input(U, "Please enter new ringtone", name, ttone) as text
- if (in_range(src, U) && loc == U)
- if (t)
- if(src.hidden_uplink && hidden_uplink.check_trigger(U, lowertext(t), lowertext(lock_code)))
- U << "The PDA softly beeps."
- U << browse(null, "window=pda")
- else
- t = copytext(sanitize(t), 1, 20)
- ttone = t
- else
- U << browse(null, "window=pda")
- return
- if("Message")
- var/obj/item/device/pda/P = locate(href_list["target"])
- src.create_message(U, P)
+ if ("Edit")
+ var/n = input(U, "Please enter message", name, notehtml) as message
+ if (in_range(src, U) && loc == U)
+ n = copytext(adminscrub(n), 1, MAX_MESSAGE_LEN)
+ if (mode == 1)
+ note = replacetext(n, "\n", "
")
+ notehtml = n
+ else
+ U << browse(null, "window=pda")
+ return
+ if("Toggle Messenger")
+ toff = !toff
+ if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status
+ silent = !silent
+ if("Clear")//Clears messages
+ tnote = null
+ if("Ringtone")
+ var/t = input(U, "Please enter new ringtone", name, ttone) as text
+ if (in_range(src, U) && loc == U)
+ if (t)
+ if(src.hidden_uplink && hidden_uplink.check_trigger(U, lowertext(t), lowertext(lock_code)))
+ U << "The PDA softly beeps."
+ U << browse(null, "window=pda")
+ else
+ t = copytext(sanitize(t), 1, 20)
+ ttone = t
+ else
+ U << browse(null, "window=pda")
+ return
+ if("Message")
+ var/obj/item/device/pda/P = locate(href_list["target"])
+ src.create_message(U, P)
- if("Send Honk")//Honk virus
- if(istype(cartridge, /obj/item/weapon/cartridge/clown))//Cartridge checks are kind of unnecessary since everything is done through switch.
- var/obj/item/device/pda/P = locate(href_list["target"])//Leaving it alone in case it may do something useful, I guess.
- if(!isnull(P))
- if (!P.toff && cartridge:honk_charges > 0)
- cartridge:honk_charges--
- U.show_message("\blue Virus sent!", 1)
- P.honkamt = (rand(15,20))
- else
- U << "PDA not found."
+ if("Send Honk")//Honk virus
+ if(istype(cartridge, /obj/item/weapon/cartridge/clown))//Cartridge checks are kind of unnecessary since everything is done through switch.
+ var/obj/item/device/pda/P = locate(href_list["target"])//Leaving it alone in case it may do something useful, I guess.
+ if(!isnull(P))
+ if (!P.toff && cartridge:honk_charges > 0)
+ cartridge:honk_charges--
+ U.show_message("\blue Virus sent!", 1)
+ P.honkamt = (rand(15,20))
else
- U << browse(null, "window=pda")
- return
- if("Send Silence")//Silent virus
- if(istype(cartridge, /obj/item/weapon/cartridge/mime))
- var/obj/item/device/pda/P = locate(href_list["target"])
- if(!isnull(P))
- if (!P.toff && cartridge:mime_charges > 0)
- cartridge:mime_charges--
- U.show_message("\blue Virus sent!", 1)
- P.silent = 1
- P.ttone = "silence"
- else
- U << "PDA not found."
+ U << "PDA not found."
+ else
+ U << browse(null, "window=pda")
+ return
+ if("Send Silence")//Silent virus
+ if(istype(cartridge, /obj/item/weapon/cartridge/mime))
+ var/obj/item/device/pda/P = locate(href_list["target"])
+ if(!isnull(P))
+ if (!P.toff && cartridge:mime_charges > 0)
+ cartridge:mime_charges--
+ U.show_message("\blue Virus sent!", 1)
+ P.silent = 1
+ P.ttone = "silence"
else
- U << browse(null, "window=pda")
- return
+ U << "PDA not found."
+ else
+ U << browse(null, "window=pda")
+ return
//SYNDICATE FUNCTIONS===================================
- if("Toggle Door")
- if(cartridge && cartridge.access_remote_door)
- for(var/obj/machinery/door/poddoor/M in world)
- if(M.id == cartridge.remote_door_id)
- if(M.density)
- M.open()
- else
- M.close()
+ if("Toggle Door")
+ if(cartridge && cartridge.access_remote_door)
+ for(var/obj/machinery/door/poddoor/M in world)
+ if(M.id == cartridge.remote_door_id)
+ if(M.density)
+ M.open()
+ else
+ M.close()
- if("Detonate")//Detonate PDA
- if(istype(cartridge, /obj/item/weapon/cartridge/syndicate))
- var/obj/item/device/pda/P = locate(href_list["target"])
- if(!isnull(P))
- if (!P.toff && cartridge:shock_charges > 0)
- cartridge:shock_charges--
+ if("Detonate")//Detonate PDA
+ if(istype(cartridge, /obj/item/weapon/cartridge/syndicate))
+ var/obj/item/device/pda/P = locate(href_list["target"])
+ if(!isnull(P))
+ if (!P.toff && cartridge:shock_charges > 0)
+ cartridge:shock_charges--
- var/difficulty = 0
+ var/difficulty = 0
- if(P.cartridge)
- difficulty += P.cartridge.access_medical
- difficulty += P.cartridge.access_security
- difficulty += P.cartridge.access_engine
- difficulty += P.cartridge.access_clown
- difficulty += P.cartridge.access_janitor
- else
- difficulty += 2
+ if(P.cartridge)
+ difficulty += P.cartridge.access_medical
+ difficulty += P.cartridge.access_security
+ difficulty += P.cartridge.access_engine
+ difficulty += P.cartridge.access_clown
+ difficulty += P.cartridge.access_janitor
+ else
+ difficulty += 2
- if(prob(difficulty * 12) || (P.hidden_uplink))
- U.show_message("\red An error flashes on your [src].", 1)
- else if (prob(difficulty * 3))
- U.show_message("\red Energy feeds back into your [src]!", 1)
- U << browse(null, "window=pda")
- explode()
- else
- U.show_message("\blue Success!", 1)
- P.explode()
- else
- U << "PDA not found."
+ if(prob(difficulty * 12) || (P.hidden_uplink))
+ U.show_message("\red An error flashes on your [src].", 1)
+ else if (prob(difficulty * 3))
+ U.show_message("\red Energy feeds back into your [src]!", 1)
+ U << browse(null, "window=pda")
+ explode()
+ else
+ U.show_message("\blue Success!", 1)
+ P.explode()
else
- U.unset_machine()
- U << browse(null, "window=pda")
- return
+ U << "PDA not found."
+ else
+ U.unset_machine()
+ U << browse(null, "window=pda")
+ return
//pAI FUNCTIONS===================================
- if("pai")
- switch(href_list["option"])
- if("1") // Configure pAI device
- pai.attack_self(U)
- if("2") // Eject pAI device
- var/turf/T = get_turf_or_move(src.loc)
- if(T)
- pai.loc = T
+ if("pai")
+ switch(href_list["option"])
+ if("1") // Configure pAI device
+ pai.attack_self(U)
+ if("2") // Eject pAI device
+ var/turf/T = get_turf_or_move(src.loc)
+ if(T)
+ pai.loc = T
//LINK FUNCTIONS===================================
- else//Cartridge menu linking
- mode = text2num(href_list["choice"])
- cartridge.mode = mode
- cartridge.unlock()
- else//If can't interact.
- U.unset_machine()
- U << browse(null, "window=pda")
- return
+ else//Cartridge menu linking
+ mode = text2num(href_list["choice"])
+ cartridge.mode = mode
+ cartridge.unlock()
else//If not in range or not using the pda.
U.unset_machine()
U << browse(null, "window=pda")
@@ -866,7 +861,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(issilicon(usr))
return
- if ( !(usr.stat || usr.restrained()) )
+ if ( can_use(usr) )
if(id)
remove_id()
else
@@ -883,7 +878,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(issilicon(usr))
return
- if ( !(usr.stat || usr.restrained()) )
+ if ( can_use(usr) )
var/obj/item/weapon/pen/O = locate() in src
if(O)
if (istype(loc, /mob))
@@ -943,7 +938,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
else
//Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand.
if(((src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) )
- if(!(user.stat || user.restrained()) )//If they can still act.
+ if( can_use(user) )//If they can still act.
id_check(user, 2)
user << "You put the ID into \the [src]'s slot."
updateSelfDialog()//Update self dialog on success.
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 7a76812b34e..5011f5346ee 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -30,6 +30,7 @@
R.uneq_all()
R.hands.icon_state = "nomod"
R.icon_state = "robot"
+ R.base_icon = "robot"
del(R.module)
R.module = null
R.camera.network.Remove(list("Medical","MINE"))
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index a0c3be517b1..38d07024feb 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -455,8 +455,8 @@ the implant may become unstable and either pre-maturely inject the subject or si
implanted(mob/source as mob)
src.activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
if (source.mind)
- source.mind.store_memory("Freedom implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0)
- source << "The implanted freedom implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate."
+ source.mind.store_memory("Compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0)
+ source << "The implanted compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate."
return 1
islegal()
@@ -464,4 +464,4 @@ the implant may become unstable and either pre-maturely inject the subject or si
/obj/item/weapon/implant/cortical
name = "cortical stack"
- desc = "A fist-sized mass of biocircuits and chips."
\ No newline at end of file
+ desc = "A fist-sized mass of biocircuits and chips."
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 1bd4b34547a..803f2b12545 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -2029,17 +2029,13 @@
if("virus")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","V")
- var/answer = alert("Do you want this to be a random disease or do you have something in mind?",,"Make Your Own","Random","Choose")
- if(answer=="Random")
- viral_outbreak()
- message_admins("[key_name_admin(usr)] has triggered a virus outbreak", 1)
- else if(answer == "Choose")
- var/list/viruses = list("fake gbs","gbs","magnitis","wizarditis",/*"beesease",*/"brain rot","cold","retrovirus","flu","pierrot's throat","rhumba beat")
- var/V = input("Choose the virus to spread", "BIOHAZARD") in viruses
- viral_outbreak(V)
- message_admins("[key_name_admin(usr)] has triggered a virus outbreak of [V]", 1)
+ var/answer = alert("Do you want this to be a greater disease or a lesser one?",,"Greater","Lesser")
+ if(answer=="Lesser")
+ virus2_lesser_infection()
+ message_admins("[key_name_admin(usr)] has triggered a lesser virus outbreak.", 1)
else
- AdminCreateVirus(usr)
+ virus2_greater_infection()
+ message_admins("[key_name_admin(usr)] has triggered a greater virus outbreak.", 1)
if("retardify")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","RET")
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 162a69b49c7..245a372d2a0 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -269,6 +269,15 @@
if(iscarbon(src))
var/mob/living/carbon/C = src
C.handcuffed = initial(C.handcuffed)
+ if(ishuman(src))
+ var/mob/living/carbon/human/H = src
+ for(var/datum/organ/external/O in H.organs)
+ O.heal_damage(1000,1000,1,1)
+ for(var/datum/organ/internal/I in H.internal_organs)
+ I.damage = 0
+ for (var/ID in H.virus2)
+ var/datum/disease2/disease/V = H.virus2[ID]
+ V.cure(src)
for(var/datum/disease/D in viruses)
D.cure(0)
if(stat == 2)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index ded645a11ef..3600b8b0f7b 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -607,6 +607,11 @@ var/list/slot_equipment_priority = list( \
src.pulling = AM
AM.pulledby = src
+ //Attempted fix for people flying away through space when cuffed and dragged.
+ if(ismob(AM))
+ var/mob/pulled = AM
+ pulled.inertia_dir = 0
+
/mob/proc/can_use_hands()
return
@@ -955,4 +960,4 @@ mob/verb/yank_out_object()
pinned -= O
if(!pinned.len)
anchored = 0
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index f5d3fee5bb4..5d639fc3ba1 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -1019,7 +1019,7 @@ datum
required_other = 1
on_reaction(var/datum/reagents/holder)
- var/blocked = list(/mob/living/simple_animal/hostile,
+ /*var/blocked = list(/mob/living/simple_animal/hostile,
/mob/living/simple_animal/hostile/pirate,
/mob/living/simple_animal/hostile/pirate/ranged,
/mob/living/simple_animal/hostile/russian,
@@ -1051,7 +1051,9 @@ datum
C.loc = get_turf_loc(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
- step(C, pick(NORTH,SOUTH,EAST,WEST))
+ step(C, pick(NORTH,SOUTH,EAST,WEST))*/
+ for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null))
+ O.show_message(text("\red The slime core fizzles disappointingly,"), 1)
//Silver
slimebork
diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm
index 84fcf486e4f..8efff4f1ca4 100644
--- a/code/modules/virus2/disease2.dm
+++ b/code/modules/virus2/disease2.dm
@@ -162,3 +162,27 @@ var/global/list/virusDB = list()
v.fields["spread type"] = spreadtype
virusDB["[uniqueID]"] = v
return 1
+
+proc/virus2_lesser_infection()
+ var/list/candidates = list() //list of candidate keys
+
+ for(var/mob/living/carbon/human/G in player_list)
+ if(G.client && G.stat != DEAD)
+ candidates += G
+ if(!candidates.len) return
+
+ candidates = shuffle(candidates)
+
+ infect_mob_random_lesser(candidates[1])
+
+proc/virus2_greater_infection()
+ var/list/candidates = list() //list of candidate keys
+
+ for(var/mob/living/carbon/human/G in player_list)
+ if(G.client && G.stat != DEAD)
+ candidates += G
+ if(!candidates.len) return
+
+ candidates = shuffle(candidates)
+
+ infect_mob_random_greater(candidates[1])
diff --git a/html/changelog.html b/html/changelog.html
index bb4b1216868..844c8ce2bc3 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -57,7 +57,16 @@ Stuff which is in development and not yet visible to players or just code relate
(ie. code improvements for expandability, etc.) should not be listed here. They
should be listed in the changelog upon commit though. Thanks. -->