"
+ else
+ dat += "Experiment "
+
+ if(!occupant)
+ dat += "
Machine Unoccupied
"
+ else
+ dat += "
Subject Status :
"
+ dat += "[occupant.name] => "
+ switch(occupant.stat)
+ if(0)
+ dat += "Conscious"
+ if(1)
+ dat += "Unconscious"
+ else
+ dat += "Deceased"
+ dat += " "
+ dat += "[flash]"
+ dat += " "
+ dat += "Scan"
+ dat += "Eject Occupant" : "unoccupied=1'>Unoccupied"]"
+ var/datum/browser/popup = new(user, "experiment", "Probing Console", 300, 300)
+ popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
+ popup.set_content(dat)
+ popup.open()
+
+/obj/machinery/abductor/experiment/Topic(href, href_list)
+ if(..() || usr == occupant)
+ return
+ usr.set_machine(src)
+ if(href_list["refresh"])
+ updateUsrDialog()
+ return
+ if(href_list["eject"])
+ eject_abductee()
+ return
+ if(occupant && occupant.stat != DEAD)
+ if(href_list["experiment"])
+ flash = Experiment(occupant,href_list["experiment"])
+ updateUsrDialog()
+ add_fingerprint(usr)
+
+/obj/machinery/abductor/experiment/proc/Experiment(mob/occupant,type)
+ var/mob/living/carbon/human/H = occupant
+ var/point_reward = 0
+ if(H in history)
+ return "Specimen already in database."
+ if(H.stat == DEAD)
+ atom_say("Specimen deceased - please provide fresh sample.")
+ return "Specimen deceased."
+ var/obj/item/organ/internal/gland/GlandTest = locate() in H.internal_organs
+ if(!GlandTest)
+ atom_say("Experimental dissection not detected!")
+ return "No glands detected!"
+ if(H.mind != null && H.ckey != null)
+ history += H
+ abductee_minds += H.mind
+ atom_say("Processing specimen...")
+ sleep(5)
+ switch(text2num(type))
+ if(1)
+ to_chat(H, "You feel violated.")
+ if(2)
+ to_chat(H, "You feel yourself being sliced apart and put back together.")
+ if(3)
+ to_chat(H, "You feel intensely watched.")
+ sleep(5)
+ to_chat(H, "Your mind snaps!")
+ var/objtype = pick(subtypesof(/datum/objective/abductee/))
+ var/datum/objective/abductee/O = new objtype()
+ ticker.mode.abductees += H.mind
+ H.mind.objectives += O
+ var/obj_count = 1
+ to_chat(H, "Your current objectives:")
+ for(var/datum/objective/objective in H.mind.objectives)
+ to_chat(H, "Objective #[obj_count]: [objective.explanation_text]")
+ obj_count++
+ ticker.mode.update_abductor_icons_added(H.mind)
+
+ for(var/obj/item/organ/internal/gland/G in H.internal_organs)
+ G.Start()
+ point_reward++
+ if(point_reward > 0)
+ eject_abductee()
+ SendBack(H)
+ playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
+ points += point_reward
+ return "Experiment successful! [point_reward] new data-points collected."
+ else
+ playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
+ return "Experiment failed! No replacement organ detected."
+ else
+ atom_say("Brain activity nonexistant - disposing sample...")
+ eject_abductee()
+ SendBack(H)
+ return "Specimen braindead - disposed."
+ return "ERROR"
+
+
+/obj/machinery/abductor/experiment/proc/SendBack(mob/living/carbon/human/H)
+ H.Sleeping(8)
+ if(console && console.pad && console.pad.teleport_target)
+ H.forceMove(console.pad.teleport_target)
+ H.uncuff()
+ return
+ //Area not chosen / It's not safe area - teleport to arrivals
+ H.forceMove(pick(latejoin))
+ H.uncuff()
+ return
+
+/obj/machinery/abductor/experiment/attackby(obj/item/weapon/G, mob/user)
+ if(istype(G, /obj/item/weapon/grab))
+ var/obj/item/weapon/grab/grabbed = G
+ if(!ishuman(grabbed.affecting))
+ return
+ if(IsAbductor(grabbed.affecting))
+ return
+ if(occupant)
+ to_chat(user, "The [src] is already occupied!")
+ return
+ for(var/mob/living/carbon/slime/S in range(1, grabbed.affecting))
+ if(S.Victim == grabbed.affecting)
+ to_chat(user, "[grabbed.affecting] has a slime attached to them, deal with that first.")
+ return
+ visible_message("[user] puts [grabbed.affecting] into the [src].")
+ var/mob/living/carbon/human/H = grabbed.affecting
+ H.forceMove(src)
+ occupant = H
+ icon_state = "experiment"
+ add_fingerprint(user)
+ qdel(G)
+
+/obj/machinery/abductor/experiment/proc/eject_abductee()
+ if(!occupant)
+ return
+ if(occupant.client)
+ occupant.client.eye = occupant.client.mob
+ occupant.client.perspective = MOB_PERSPECTIVE
+ occupant.forceMove(get_turf(src))
+ occupant = null
+ icon_state = "experiment-open"
\ No newline at end of file
diff --git a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm
new file mode 100644
index 00000000000..285b097d06a
--- /dev/null
+++ b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm
@@ -0,0 +1,54 @@
+/obj/machinery/abductor/pad
+ name = "Alien Telepad"
+ desc = "Use this to transport to and from human habitat"
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "alien-pad-idle"
+ anchored = 1
+ var/turf/teleport_target
+
+/obj/machinery/abductor/pad/proc/Warp(mob/living/target)
+ target.Move(src.loc)
+
+/obj/machinery/abductor/pad/proc/Send()
+ if(teleport_target == null)
+ teleport_target = teleportlocs[pick(teleportlocs)]
+ flick("alien-pad", src)
+ for(var/mob/living/target in loc)
+ target.forceMove(teleport_target)
+ spawn(0)
+ anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
+
+/obj/machinery/abductor/pad/proc/Retrieve(mob/living/target)
+ flick("alien-pad", src)
+ spawn(0)
+ anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
+ Warp(target)
+
+/obj/machinery/abductor/pad/proc/MobToLoc(place,mob/living/target)
+ new/obj/effect/overlay/temp/teleport_abductor(place)
+ sleep(80)
+ flick("alien-pad", src)
+ target.forceMove(place)
+ anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
+
+/obj/machinery/abductor/pad/proc/PadToLoc(place)
+ new/obj/effect/overlay/temp/teleport_abductor(place)
+ sleep(80)
+ flick("alien-pad", src)
+ for(var/mob/living/target in src.loc)
+ target.forceMove(place)
+ spawn(0)
+ anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
+
+
+/obj/effect/overlay/temp/teleport_abductor
+ name = "Huh"
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "teleport"
+ duration = 80
+
+/obj/effect/overlay/temp/teleport_abductor/New()
+ var/datum/effect/system/spark_spread/S = new
+ S.set_up(10,0,loc)
+ S.start()
+ ..()
\ No newline at end of file
diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm
index 11111cdfc69..472dea17cce 100644
--- a/code/game/gamemodes/miniantags/borer/borer.dm
+++ b/code/game/gamemodes/miniantags/borer/borer.dm
@@ -36,6 +36,27 @@
/mob/living/captive_brain/emote(var/message)
return
+/mob/living/captive_brain/resist_borer()
+ var/mob/living/simple_animal/borer/B = loc
+
+ to_chat(src, "You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).")
+ to_chat(B.host, "You feel the captive mind of [src] begin to resist your control.")
+
+ spawn(rand(350,450) + B.host.brainloss)
+
+ if(!B || !B.controlling)
+ return
+
+ B.host.adjustBrainLoss(rand(5,10))
+ to_chat(src, "With an immense exertion of will, you regain control of your body!")
+ to_chat(B.host, "You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.")
+
+ B.detatch()
+
+ verbs -= /mob/living/carbon/proc/release_control
+ verbs -= /mob/living/carbon/proc/punish_host
+ verbs -= /mob/living/carbon/proc/spawn_larvae
+
/mob/living/simple_animal/borer
name = "cortical borer"
real_name = "cortical borer"
diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
index 514ceb4b14e..773e81349a1 100644
--- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
+++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
@@ -6,7 +6,7 @@
icon_state = "swarmer_unactivated"
/obj/item/unactivated_swarmer/New()
- notify_ghosts("An unactivated swarmer has been created in [get_area(src)]! (Click to enter)")
+ notify_ghosts("An unactivated swarmer has been created in [get_area(src)]!", enter_link = "(Click to enter)", source = src, attack_not_jump = 1)
..()
/obj/item/unactivated_swarmer/Topic(href, href_list)
diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm
index b987f2eb6f6..cf99940da0f 100644
--- a/code/game/gamemodes/miniantags/guardian/guardian.dm
+++ b/code/game/gamemodes/miniantags/guardian/guardian.dm
@@ -29,6 +29,8 @@
var/summoned = FALSE
var/cooldown = 0
var/damage_transfer = 1 //how much damage from each attack we transfer to the owner
+ var/light_on = 0
+ var/luminosity_on = 3
var/mob/living/summoner
var/range = 10 //how far from the user the spirit can be
var/playstyle_string = "You are a standard Guardian. You shouldn't exist!"
@@ -202,13 +204,13 @@
/mob/living/simple_animal/hostile/guardian/proc/ToggleLight()
- if(!luminosity)
- set_light(3)
+ if(!light_on)
+ set_light(luminosity_on)
to_chat(src, "You activate your light.")
else
set_light(0)
to_chat(src, "You deactivate your light.")
-
+ light_on = !light_on
//////////////////////////TYPES OF GUARDIANS
diff --git a/code/game/gamemodes/vampire/hud.dm b/code/game/gamemodes/vampire/hud.dm
index 727ae3bdc25..d02218ca542 100644
--- a/code/game/gamemodes/vampire/hud.dm
+++ b/code/game/gamemodes/vampire/hud.dm
@@ -6,4 +6,12 @@
vampire_blood_display.screen_loc = "WEST:6,CENTER-1:15"
vampire_blood_display.layer = 20
- mymob.client.screen += list(vampire_blood_display)
\ No newline at end of file
+ mymob.client.screen += list(vampire_blood_display)
+
+/datum/hud/proc/remove_vampire_hud()
+ if(!vampire_blood_display)
+ return
+
+ mymob.client.screen -= list(vampire_blood_display)
+ qdel(vampire_blood_display)
+ vampire_blood_display = null
\ No newline at end of file
diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm
index 1abed5ba4dd..44f31b083ba 100644
--- a/code/game/gamemodes/vampire/vampire.dm
+++ b/code/game/gamemodes/vampire/vampire.dm
@@ -239,12 +239,11 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
if(!get_ability(path))
force_add_ability(path)
-/datum/vampire/proc/remove_ability(path)
- var/A = get_ability(path)
- if(A)
- powers -= A
- owner.mind.spell_list.Remove(A)
- qdel(A)
+/datum/vampire/proc/remove_ability(ability)
+ if(ability && (ability in powers))
+ powers -= ability
+ owner.mind.spell_list.Remove(ability)
+ qdel(ability)
/mob/proc/make_vampire()
if(!mind)
@@ -263,6 +262,10 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
/datum/vampire/proc/remove_vampire_powers()
for(var/P in powers)
remove_ability(P)
+ if(owner.hud_used)
+ var/datum/hud/hud = owner.hud_used
+ if(hud.vampire_blood_display)
+ hud.remove_vampire_hud()
owner.alpha = 255
/datum/vampire/proc/handle_bloodsucking(mob/living/carbon/human/H)
diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm
index fbc52904117..6e3c0e01a59 100644
--- a/code/game/machinery/OpTable.dm
+++ b/code/game/machinery/OpTable.dm
@@ -13,6 +13,7 @@
var/obj/machinery/computer/operating/computer = null
buckle_lying = 90
+ var/no_icon_updates = 0 //set this to 1 if you don't want the icons ever changing
/obj/machinery/optable/New()
..()
@@ -79,10 +80,12 @@
var/mob/living/carbon/human/M = locate(/mob/living/carbon/human, src.loc)
if(M.lying)
src.victim = M
- icon_state = M.pulse ? "table2-active" : "table2-idle"
+ if(!no_icon_updates)
+ icon_state = M.pulse ? "table2-active" : "table2-idle"
return 1
src.victim = null
- icon_state = "table2-idle"
+ if(!no_icon_updates)
+ icon_state = "table2-idle"
return 0
/obj/machinery/optable/process()
@@ -106,9 +109,11 @@
if(ishuman(C))
var/mob/living/carbon/human/H = C
src.victim = H
- icon_state = H.pulse ? "table2-active" : "table2-idle"
+ if(!no_icon_updates)
+ icon_state = H.pulse ? "table2-active" : "table2-idle"
else
- icon_state = "table2-idle"
+ if(!no_icon_updates)
+ icon_state = "table2-idle"
/obj/machinery/optable/verb/climb_on()
set name = "Climb On Table"
diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm
index 44fe97e0915..16242f5a58e 100644
--- a/code/game/machinery/computer/camera_advanced.dm
+++ b/code/game/machinery/computer/camera_advanced.dm
@@ -20,12 +20,22 @@
jump_action.Grant(user)
/obj/machinery/computer/camera_advanced/check_eye(mob/user)
- if (get_dist(user, src) > 1 || user.eye_blind)
- if(user == current_user)
- off_action.Activate()
+ if((stat & (NOPOWER|BROKEN)) || !Adjacent(user) || user.eye_blind || user.incapacitated())
+ user.unset_machine()
return 0
return 1
+/obj/machinery/computer/camera_advanced/Destroy()
+ if(current_user)
+ current_user.unset_machine()
+ if(eyeobj)
+ qdel(eyeobj)
+ return ..()
+
+/obj/machinery/computer/camera_advanced/on_unset_machine(mob/M)
+ if(M == current_user)
+ off_action.Activate()
+
/obj/machinery/computer/camera_advanced/attack_hand(mob/user)
if(..())
return
@@ -34,6 +44,7 @@
var/mob/living/carbon/L = user
if(!current_user)
+ user.set_machine(src)
if(!eyeobj)
CreateEye()
GrantActions(user)
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index 89790a8d47a..1b3f13955d0 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -12,18 +12,6 @@
density = 0
opacity = 0
-/obj/machinery/door/poddoor/four_tile_ver/
- name = "Large Pod Door"
- icon = 'icons/obj/doors/1x4blast_vert.dmi'
-
-/obj/machinery/door/poddoor/three_tile_ver/
- name = "Large Pod Door"
- icon = 'icons/obj/doors/1x3blast_vert.dmi'
-
-/obj/machinery/door/poddoor/two_tile_ver/
- name = "Large Pod Door"
- icon = 'icons/obj/doors/1x2blast_vert.dmi'
-
/obj/machinery/door/poddoor/Bumped(atom/AM)
if(!density)
return ..()
@@ -110,478 +98,35 @@
src.operating = 0
return
-/
-/obj/machinery/door/poddoor/two_tile_hor/open()
- if (src.operating == 1) //doors can still open when emag-disabled
- return
- if (!ticker)
- return 0
- if(!src.operating) //in case of emag
- src.operating = 1
- flick("pdoorc0", src)
- src.icon_state = "pdoor0"
- sleep(10)
- src.density = 0
- src.set_opacity(0)
+/obj/machinery/door/poddoor/multi_tile // Whoever wrote the old code for multi-tile spesspod doors needs to burn in hell.
+ name = "Large Pod Door"
- f1.density = 0
- f1.set_opacity(0)
- f2.density = 0
- f2.set_opacity(0)
-
- air_update_turf(1)
- update_freelook_sight()
-
- if(operating == 1) //emag again
- src.operating = 0
- if(autoclose)
- spawn(150)
- autoclose()
- return 1
-
-/obj/machinery/door/poddoor/two_tile_hor/close()
- if (src.operating)
- return
- src.operating = 1
- flick("pdoorc1", src)
- src.icon_state = "pdoor1"
- src.density = 1
-
- f1.density = 1
- f1.set_opacity(1)
- f2.density = 1
- f2.set_opacity(1)
-
- if (src.visible)
- src.set_opacity(1)
- air_update_turf(1)
- update_freelook_sight()
-
- sleep(10)
- src.operating = 0
- return
-
-/obj/machinery/door/poddoor/three_tile_hor/open()
- if (src.operating == 1) //doors can still open when emag-disabled
- return
- if (!ticker)
- return 0
- if(!src.operating) //in case of emag
- src.operating = 1
- flick("pdoorc0", src)
- src.icon_state = "pdoor0"
- sleep(10)
- src.density = 0
- src.set_opacity(0)
-
- f1.density = 0
- f1.set_opacity(0)
- f2.density = 0
- f2.set_opacity(0)
- f3.density = 0
- f3.set_opacity(0)
-
- air_update_turf(1)
- update_freelook_sight()
-
- if(operating == 1) //emag again
- src.operating = 0
- if(autoclose)
- spawn(150)
- autoclose()
- return 1
-
-/obj/machinery/door/poddoor/three_tile_hor/close()
- if (src.operating)
- return
- src.operating = 1
- flick("pdoorc1", src)
- src.icon_state = "pdoor1"
- src.density = 1
-
- f1.density = 1
- f1.set_opacity(1)
- f2.density = 1
- f2.set_opacity(1)
- f3.density = 1
- f3.set_opacity(1)
-
- if (src.visible)
- src.set_opacity(1)
- air_update_turf(1)
- update_freelook_sight()
-
- sleep(10)
- src.operating = 0
- return
-
-/obj/machinery/door/poddoor/four_tile_hor/open()
- if (src.operating == 1) //doors can still open when emag-disabled
- return
- if (!ticker)
- return 0
- if(!src.operating) //in case of emag
- src.operating = 1
- flick("pdoorc0", src)
- src.icon_state = "pdoor0"
- sleep(10)
- src.density = 0
- src.set_opacity(0)
-
- f1.density = 0
- f1.set_opacity(0)
- f2.density = 0
- f2.set_opacity(0)
- f3.density = 0
- f3.set_opacity(0)
- f4.density = 0
- f4.set_opacity(0)
-
- air_update_turf(1)
- update_freelook_sight()
-
- if(operating == 1) //emag again
- src.operating = 0
- if(autoclose)
- spawn(150)
- autoclose()
- return 1
-
-/obj/machinery/door/poddoor/four_tile_hor/close()
- if (src.operating)
- return
- src.operating = 1
- flick("pdoorc1", src)
- src.icon_state = "pdoor1"
- src.density = 1
-
- f1.density = 1
- f1.set_opacity(1)
- f2.density = 1
- f2.set_opacity(1)
- f3.density = 1
- f3.set_opacity(1)
- f4.density = 1
- f4.set_opacity(1)
-
- if (src.visible)
- src.set_opacity(1)
- air_update_turf(1)
- update_freelook_sight()
-
- sleep(10)
- src.operating = 0
- return
-
-
-
-/obj/machinery/door/poddoor/two_tile_ver/open()
- if (src.operating == 1) //doors can still open when emag-disabled
- return
- if (!ticker)
- return 0
- if(!src.operating) //in case of emag
- src.operating = 1
- flick("pdoorc0", src)
- src.icon_state = "pdoor0"
- sleep(10)
- src.density = 0
- src.set_opacity(0)
-
- f1.density = 0
- f1.set_opacity(0)
- f2.density = 0
- f2.set_opacity(0)
-
- air_update_turf(1)
- update_freelook_sight()
-
- if(operating == 1) //emag again
- src.operating = 0
- if(autoclose)
- spawn(150)
- autoclose()
- return 1
-
-/obj/machinery/door/poddoor/two_tile_ver/close()
- if (src.operating)
- return
- src.operating = 1
- flick("pdoorc1", src)
- src.icon_state = "pdoor1"
- src.density = 1
-
- f1.density = 1
- f1.set_opacity(1)
- f2.density = 1
- f2.set_opacity(1)
-
- if (src.visible)
- src.set_opacity(1)
- air_update_turf(1)
- update_freelook_sight()
-
- sleep(10)
- src.operating = 0
- return
-
-/obj/machinery/door/poddoor/three_tile_ver/open()
- if (src.operating == 1) //doors can still open when emag-disabled
- return
- if (!ticker)
- return 0
- if(!src.operating) //in case of emag
- src.operating = 1
- flick("pdoorc0", src)
- src.icon_state = "pdoor0"
- sleep(10)
- src.density = 0
- src.set_opacity(0)
-
- f1.density = 0
- f1.set_opacity(0)
- f2.density = 0
- f2.set_opacity(0)
- f3.density = 0
- f3.set_opacity(0)
-
- air_update_turf(1)
- update_freelook_sight()
-
- if(operating == 1) //emag again
- src.operating = 0
- if(autoclose)
- spawn(150)
- autoclose()
- return 1
-
-/obj/machinery/door/poddoor/three_tile_ver/close()
- if (src.operating)
- return
- src.operating = 1
- flick("pdoorc1", src)
- src.icon_state = "pdoor1"
- src.density = 1
-
- f1.density = 1
- f1.set_opacity(1)
- f2.density = 1
- f2.set_opacity(1)
- f3.density = 1
- f3.set_opacity(1)
-
- if (src.visible)
- src.set_opacity(1)
- air_update_turf(1)
- update_freelook_sight()
-
- sleep(10)
- src.operating = 0
- return
-
-/obj/machinery/door/poddoor/four_tile_ver/open()
- if (src.operating == 1) //doors can still open when emag-disabled
- return
- if (!ticker)
- return 0
- if(!src.operating) //in case of emag
- src.operating = 1
- flick("pdoorc0", src)
- src.icon_state = "pdoor0"
- sleep(10)
- src.density = 0
- src.set_opacity(0)
-
- f1.density = 0
- f1.set_opacity(0)
- f2.density = 0
- f2.set_opacity(0)
- f3.density = 0
- f3.set_opacity(0)
- f4.density = 0
- f4.set_opacity(0)
-
- air_update_turf(1)
- update_freelook_sight()
-
- if(operating == 1) //emag again
- src.operating = 0
- if(autoclose)
- spawn(150)
- autoclose()
- return 1
-
-/obj/machinery/door/poddoor/four_tile_ver/close()
- if (src.operating)
- return
- src.operating = 1
- flick("pdoorc1", src)
- src.icon_state = "pdoor1"
- src.density = 1
-
- f1.density = 1
- f1.set_opacity(1)
- f2.density = 1
- f2.set_opacity(1)
- f3.density = 1
- f3.set_opacity(1)
- f4.density = 1
- f4.set_opacity(1)
-
- if (src.visible)
- src.set_opacity(1)
- air_update_turf(1)
- update_freelook_sight()
-
- sleep(10)
- src.operating = 0
- return
-
-
-/obj/machinery/door/poddoor/two_tile_hor
- var/obj/machinery/door/poddoor/filler_object/f1
- var/obj/machinery/door/poddoor/filler_object/f2
- icon = 'icons/obj/doors/1x2blast_hor.dmi'
-
- New()
- ..()
- f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
- f2 = new/obj/machinery/door/poddoor/filler_object (get_step(f1,EAST))
- f1.density = density
- f2.density = density
- f1.set_opacity(opacity)
- f2.set_opacity(opacity)
-
- Destroy()
- qdel(f1)
- qdel(f2)
- return ..()
-
-/obj/machinery/door/poddoor/two_tile_ver
- var/obj/machinery/door/poddoor/filler_object/f1
- var/obj/machinery/door/poddoor/filler_object/f2
- icon = 'icons/obj/doors/1x2blast_vert.dmi'
-
- New()
- ..()
- f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
- f2 = new/obj/machinery/door/poddoor/filler_object (get_step(f1,NORTH))
- f1.density = density
- f2.density = density
- f1.set_opacity(opacity)
- f2.set_opacity(opacity)
-
- Destroy()
- qdel(f1)
- qdel(f2)
- return ..()
-
-/obj/machinery/door/poddoor/three_tile_hor
- var/obj/machinery/door/poddoor/filler_object/f1
- var/obj/machinery/door/poddoor/filler_object/f2
- var/obj/machinery/door/poddoor/filler_object/f3
- icon = 'icons/obj/doors/1x3blast_hor.dmi'
-
- New()
- ..()
- f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
- f2 = new/obj/machinery/door/poddoor/filler_object (get_step(f1,EAST))
- f3 = new/obj/machinery/door/poddoor/filler_object (get_step(f2,EAST))
- f1.density = density
- f2.density = density
- f3.density = density
- f1.set_opacity(opacity)
- f2.set_opacity(opacity)
- f3.set_opacity(opacity)
-
- Destroy()
- qdel(f1)
- qdel(f2)
- qdel(f3)
- return ..()
-
-/obj/machinery/door/poddoor/three_tile_ver
- var/obj/machinery/door/poddoor/filler_object/f1
- var/obj/machinery/door/poddoor/filler_object/f2
- var/obj/machinery/door/poddoor/filler_object/f3
- icon = 'icons/obj/doors/1x3blast_vert.dmi'
-
- New()
- ..()
- f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
- f2 = new/obj/machinery/door/poddoor/filler_object (get_step(f1,NORTH))
- f3 = new/obj/machinery/door/poddoor/filler_object (get_step(f2,NORTH))
- f1.density = density
- f2.density = density
- f3.density = density
- f1.set_opacity(opacity)
- f2.set_opacity(opacity)
- f3.set_opacity(opacity)
-
- Destroy()
- qdel(f1)
- qdel(f2)
- qdel(f3)
- return ..()
-
-/obj/machinery/door/poddoor/four_tile_hor
- var/obj/machinery/door/poddoor/filler_object/f1
- var/obj/machinery/door/poddoor/filler_object/f2
- var/obj/machinery/door/poddoor/filler_object/f3
- var/obj/machinery/door/poddoor/filler_object/f4
- icon = 'icons/obj/doors/1x4blast_hor.dmi'
-
- New()
- ..()
- f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
- f2 = new/obj/machinery/door/poddoor/filler_object (get_step(f1,EAST))
- f3 = new/obj/machinery/door/poddoor/filler_object (get_step(f2,EAST))
- f4 = new/obj/machinery/door/poddoor/filler_object (get_step(f3,EAST))
- f1.density = density
- f2.density = density
- f3.density = density
- f4.density = density
- f1.set_opacity(opacity)
- f2.set_opacity(opacity)
- f3.set_opacity(opacity)
- f4.set_opacity(opacity)
-
- Destroy()
- qdel(f1)
- qdel(f2)
- qdel(f3)
- qdel(f4)
- return ..()
-
-/obj/machinery/door/poddoor/four_tile_ver
- var/obj/machinery/door/poddoor/filler_object/f1
- var/obj/machinery/door/poddoor/filler_object/f2
- var/obj/machinery/door/poddoor/filler_object/f3
- var/obj/machinery/door/poddoor/filler_object/f4
+/obj/machinery/door/poddoor/multi_tile/four_tile_ver/
icon = 'icons/obj/doors/1x4blast_vert.dmi'
+ width = 4
+ dir = NORTH
- New()
- ..()
- f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
- f2 = new/obj/machinery/door/poddoor/filler_object (get_step(f1,NORTH))
- f3 = new/obj/machinery/door/poddoor/filler_object (get_step(f2,NORTH))
- f4 = new/obj/machinery/door/poddoor/filler_object (get_step(f3,NORTH))
- f1.density = density
- f2.density = density
- f3.density = density
- f4.density = density
- f1.set_opacity(opacity)
- f2.set_opacity(opacity)
- f3.set_opacity(opacity)
- f4.set_opacity(opacity)
+/obj/machinery/door/poddoor/multi_tile/three_tile_ver/
+ icon = 'icons/obj/doors/1x3blast_vert.dmi'
+ width = 3
+ dir = NORTH
- Destroy()
- qdel(f1)
- qdel(f2)
- qdel(f3)
- qdel(f4)
- return ..()
+/obj/machinery/door/poddoor/multi_tile/two_tile_ver/
+ icon = 'icons/obj/doors/1x2blast_vert.dmi'
+ width = 2
+ dir = NORTH
-/obj/machinery/door/poddoor/filler_object
- name = ""
- icon_state = ""
\ No newline at end of file
+/obj/machinery/door/poddoor/multi_tile/four_tile_hor/
+ icon = 'icons/obj/doors/1x4blast_hor.dmi'
+ width = 4
+ dir = EAST
+
+/obj/machinery/door/poddoor/multi_tile/three_tile_hor/
+ icon = 'icons/obj/doors/1x3blast_hor.dmi'
+ width = 3
+ dir = EAST
+
+/obj/machinery/door/poddoor/multi_tile/two_tile_hor/
+ icon = 'icons/obj/doors/1x2blast_hor.dmi'
+ width = 2
+ dir = EAST
\ No newline at end of file
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 81799f01115..821d65d183d 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -716,6 +716,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 8,
/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater = 15,
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 30,
+ /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass = 30,
/obj/item/weapon/reagent_containers/food/drinks/ice = 9)
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/tea = 10)
vend_delay = 15
diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm
index 7616df4c119..273a4fe4fe6 100644
--- a/code/game/objects/buckling.dm
+++ b/code/game/objects/buckling.dm
@@ -12,7 +12,7 @@
. = ..()
if(can_buckle && buckled_mob)
return user_unbuckle_mob(user)
-
+
/atom/movable/attack_robot(mob/living/user)
. = ..()
if(can_buckle && buckled_mob && Adjacent(user)) // attack_robot is called on all ranges, so the Adjacent check is needed
@@ -46,6 +46,7 @@
buckled_mob = M
M.update_canmove()
post_buckle_mob(M)
+ M.throw_alert("buckled", /obj/screen/alert/restrained/buckled, new_master = src)
return 1
/atom/movable/proc/unbuckle_mob()
@@ -54,6 +55,7 @@
buckled_mob.buckled = null
buckled_mob.anchored = initial(buckled_mob.anchored)
buckled_mob.update_canmove()
+ buckled_mob.clear_alert("buckled")
buckled_mob = null
post_buckle_mob(.)
diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm
index 2b044b588e1..090a7437a5b 100644
--- a/code/game/objects/effects/anomalies.dm
+++ b/code/game/objects/effects/anomalies.dm
@@ -16,7 +16,8 @@
aSignal = new(src)
aSignal.code = rand(1,100)
- aSignal.frequency = sanitize_frequency(rand(PUBLIC_LOW_FREQ, PUBLIC_HIGH_FREQ))
+ var/new_frequency = sanitize_frequency(rand(PUBLIC_LOW_FREQ, PUBLIC_HIGH_FREQ))
+ aSignal.set_frequency(new_frequency)
/obj/effect/anomaly/proc/anomalyEffect()
if(prob(50))
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 8c4bf753108..417ad82d46b 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -53,6 +53,7 @@
var/strip_delay = DEFAULT_ITEM_STRIP_DELAY
var/put_on_delay = DEFAULT_ITEM_PUTON_DELAY
+ var/breakouttime = 0
/* Species-specific sprites, concept stolen from Paradise//vg/.
ex:
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 57e1e035aa8..0710464ecbc 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -20,10 +20,15 @@
/obj/item/device/radio/headset/New()
..()
internal_channels.Cut()
+
+/obj/item/device/radio/headset/initialize()
+ ..()
+
if(ks1type)
keyslot1 = new ks1type(src)
if(ks2type)
keyslot2 = new ks2type(src)
+
recalculateChannels(1)
/obj/item/device/radio/headset/Destroy()
@@ -383,8 +388,6 @@
for (var/ch_name in channels)
- if(!radio_controller)
- sleep(30) // Waiting for the radio_controller to be created.
if(!radio_controller)
src.name = "broken radio headset"
return
diff --git a/code/game/objects/items/random_items.dm b/code/game/objects/items/random_items.dm
index 9fda63a980c..f46e2361192 100644
--- a/code/game/objects/items/random_items.dm
+++ b/code/game/objects/items/random_items.dm
@@ -152,7 +152,6 @@
New()
..()
- sleep(2)
new/obj/item/weapon/reagent_containers/glass/bottle/random_base_chem(src)
new/obj/item/weapon/reagent_containers/glass/bottle/random_base_chem(src)
new/obj/item/weapon/reagent_containers/glass/bottle/random_base_chem(src)
@@ -169,7 +168,6 @@
new/obj/item/weapon/storage/pill_bottle/random_meds(src)
while(prob(25))
new/obj/item/weapon/storage/pill_bottle/random_meds(src)
- return
/obj/structure/closet/crate/secure/chemicals
name = "chemical supply kit"
@@ -178,7 +176,6 @@
New()
..()
- sleep(2)
for(var/chem in standard_chemicals)
var/obj/item/weapon/reagent_containers/glass/bottle/B = new(src)
B.reagents.add_reagent(chem,B.volume)
@@ -240,7 +237,6 @@
New()
..()
- sleep(2)
new/obj/item/weapon/reagent_containers/food/drinks/bottle/random_drink(src)
new/obj/item/weapon/reagent_containers/food/drinks/bottle/random_drink(src)
new/obj/item/weapon/reagent_containers/food/drinks/bottle/random_drink(src)
@@ -248,7 +244,6 @@
new/obj/item/weapon/reagent_containers/food/drinks/bottle/random_drink(src)
while(prob(25))
new/obj/item/weapon/reagent_containers/food/drinks/bottle/random_reagent(src)
- return
// -------------------------------------
@@ -276,8 +271,9 @@
while(prob(15))
new menace(get_step_rand(src.loc))
..()
+ return 1
else
- ..()
+ return ..()
//
@@ -307,7 +303,7 @@
qdel(Cat1)
else
qdel(Cat2)
- ..()
+ return ..()
// --------------------------------------
// Collen's box of wonder and mystery
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 03890ce4372..7de3cfc0aaa 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -193,3 +193,31 @@ var/global/list/datum/stack_recipe/mime_recipes = list ( \
icon_state = "sheet-enruranium"
origin_tech = "materials=6"
materials = list(MAT_URANIUM=3000)
+
+/*
+ * Alien Alloy
+ */
+/obj/item/stack/sheet/mineral/abductor
+ name = "alien alloy"
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "sheet-abductor"
+ singular_name = "alien alloy sheet"
+ force = 5
+ throwforce = 5
+ w_class = 3
+ throw_speed = 1
+ throw_range = 3
+ origin_tech = "materials=6;abductor=1"
+ sheettype = "abductor"
+
+var/global/list/datum/stack_recipe/abductor_recipes = list ( \
+ new/datum/stack_recipe("alien bed", /obj/structure/stool/bed/abductor, 2, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("alien locker", /obj/structure/closet/abductor, 1, time = 15, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("alien table frame", /obj/structure/abductor_tableframe, 1, time = 15, one_per_turf = 1, on_floor = 1), \
+ null, \
+ new/datum/stack_recipe("alien floor tile", /obj/item/stack/tile/mineral/abductor, 1, 4, 20), \
+ )
+
+/obj/item/stack/sheet/mineral/abductor/New(var/loc, var/amount=null)
+ recipes = abductor_recipes
+ ..()
\ No newline at end of file
diff --git a/code/game/objects/items/stacks/tiles/tile_mineral.dm b/code/game/objects/items/stacks/tiles/tile_mineral.dm
new file mode 100644
index 00000000000..7e6d5459dbf
--- /dev/null
+++ b/code/game/objects/items/stacks/tiles/tile_mineral.dm
@@ -0,0 +1,9 @@
+/obj/item/stack/tile/mineral/abductor
+ name = "alien floor tile"
+ singular_name = "alien floor tile"
+ desc = "A tile made out of alien alloy."
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "tile_abductor"
+ origin_tech = "materials=6;abductor=1"
+ turf_type = /turf/simulated/floor/mineral/abductor
+ mineralType = "abductor"
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index 85818ac7767..ce6707bcdcb 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -3,20 +3,20 @@
desc = "This injects the person with DNA."
icon = 'icons/obj/items.dmi'
icon_state = "dnainjector"
- var/block=0
+ item_state = "dnainjector"
+ var/block = 0
var/datum/dna2/record/buf=null
- var/s_time = 10.0
- throw_speed = 1
+ throw_speed = 3
throw_range = 5
- w_class = 1.0
- var/uses = 1
- var/nofail
- var/is_bullet = 0
- var/inuse = 0
+ w_class = 1
+ origin_tech = "biotech=1"
+
+ var/damage_coeff = 1
+ var/used = 0
// USE ONLY IN PREMADE SYRINGES. WILL NOT WORK OTHERWISE.
- var/datatype=0
- var/value=0
+ var/datatype = 0
+ var/value = 0
/obj/item/weapon/dnainjector/New()
if(datatype && block)
@@ -61,50 +61,47 @@
return buf.dna.SetUIValue(real_block,val)
/obj/item/weapon/dnainjector/proc/inject(mob/living/M as mob, mob/user as mob)
+ if(used)
+ return
if(istype(M,/mob/living))
- M.apply_effect(rand(10,25),IRRADIATE,0,1)
+ M.apply_effect(rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2)),IRRADIATE,0,1)
var/mob/living/carbon/human/H
if(istype(M, /mob/living/carbon/human))
H = M
- if (!(NOCLONE in M.mutations) && !(H && (H.species.flags & NO_DNA))) // prevents drained people from having their DNA changed
- var/prev_ue = M.dna.unique_enzymes
- // UI in syringe.
- if (buf.types & DNA2_BUF_UI)
- if (!block) //isolated block?
- M.dna.UI = buf.dna.UI.Copy()
- M.dna.UpdateUI()
- M.UpdateAppearance()
- if (buf.types & DNA2_BUF_UE) //unique enzymes? yes
+ spawn(0) //Some mutations have sleeps in them, like monkey
+ if(!(NOCLONE in M.mutations) && !(H && (H.species.flags & NO_DNA))) // prevents drained people from having their DNA changed
+ var/prev_ue = M.dna.unique_enzymes
+ // UI in syringe.
+ if (buf.types & DNA2_BUF_UI)
+ if (!block) //isolated block?
+ M.dna.UI = buf.dna.UI.Copy()
+ M.dna.UpdateUI()
+ M.UpdateAppearance()
+ if (buf.types & DNA2_BUF_UE) //unique enzymes? yes
- M.real_name = buf.dna.real_name
- M.name = buf.dna.real_name
- M.dna.real_name = buf.dna.real_name
- M.dna.unique_enzymes = buf.dna.unique_enzymes
- uses--
- else
- M.dna.SetUIValue(block,src.GetValue())
- M.UpdateAppearance()
- uses--
- if (buf.types & DNA2_BUF_SE)
- if (!block) //isolated block?
- M.dna.SE = buf.dna.SE.Copy()
- M.dna.UpdateSE()
- else
- M.dna.SetSEValue(block,src.GetValue())
- domutcheck(M, null, block!=null)
- uses--
- M.update_mutations()
- if(H)
- H.sync_organ_dna(assimilate = 0, old_ue = prev_ue)
-
- spawn(0)//this prevents the collapse of space-time continuum
- if (user)
- user.unEquip(src)
- qdel(src)
- return uses
+ M.real_name = buf.dna.real_name
+ M.name = buf.dna.real_name
+ M.dna.real_name = buf.dna.real_name
+ M.dna.unique_enzymes = buf.dna.unique_enzymes
+ else
+ M.dna.SetUIValue(block,src.GetValue())
+ M.UpdateAppearance()
+ if (buf.types & DNA2_BUF_SE)
+ if (!block) //isolated block?
+ M.dna.SE = buf.dna.SE.Copy()
+ M.dna.UpdateSE()
+ else
+ M.dna.SetSEValue(block,src.GetValue())
+ domutcheck(M, null, block!=null)
+ M.update_mutations()
+ if(H)
+ H.sync_organ_dna(assimilate = 0, old_ue = prev_ue)
/obj/item/weapon/dnainjector/attack(mob/M as mob, mob/user as mob)
+ if(used)
+ user << "This injector is used up!"
+ return
if(!M.dna) //You know what would be nice? If the mob you're injecting has DNA, and so doesn't cause runtimes.
return 0
@@ -116,9 +113,6 @@
if (!user.IsAdvancedToolUser())
return 0
- if(inuse)
- return 0
-
M.attack_log += text("\[[time_stamp()]\] Has been injected with [name] by [user.name] ([user.ckey])")
user.attack_log += text("\[[time_stamp()]\] Used the [name] to inject [M.name] ([M.ckey])")
log_attack("[user.name] ([user.ckey]) used the [name] to inject [M.name] ([M.ckey])")
@@ -149,17 +143,20 @@
else
log_attack("[key_name(user)] injected [key_name(M)] with the [name]")
- user.visible_message("\The [user] starts injecting \the [M] with \the [src]!", "You start injecting \the [M] with \the [src].")
- if(do_after(user, 50, target = M))
- inject(M, user)//Now we actually do the heavy lifting
- user.visible_message("\The [user] injects \the [M] with \the [src]!", "You inject \the [M] with \the [src].")
+ if(M != user)
+ M.visible_message("[user] is trying to inject [M] with [src]!", "[user] is trying to inject [M] with [src]!")
+ if(!do_mob(user, M))
+ return
+ M.visible_message("[user] injects [M] with the syringe with [src]!", \
+ "[user] injects [M] with the syringe with [src]!")
- if(user)//If the user still exists. Their mob may not.
- if(M)//Runtime fix: If the mob doesn't exist, mob.name doesnt work. - Nodrak
- user.show_message("You inject [M.name]")
- else
- user.show_message("You finish the injection.")
+ else
+ user << "You inject yourself with [src]."
+ inject(M, user)
+ used = 1
+ icon_state = "dnainjector0"
+ desc += " This one is used up."
/obj/item/weapon/dnainjector/hulkmut
name = "DNA-Injector (Hulk)"
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index b111501820f..35b865790c7 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -12,7 +12,7 @@
throw_range = 5
materials = list(MAT_METAL=500)
origin_tech = "materials=1"
- var/breakouttime = 600 //Deciseconds = 60s = 1 minutes
+ breakouttime = 600 //Deciseconds = 60s = 1 minutes
var/cuffsound = 'sound/weapons/handcuffs.ogg'
var/trashtype = null //For disposable cuffs
@@ -50,7 +50,7 @@
else
loc = target
target.handcuffed = src
- target.update_inv_handcuffed(1)
+ target.update_handcuffed()
return
/obj/item/weapon/restraints/handcuffs/cable
@@ -85,6 +85,9 @@
/obj/item/weapon/restraints/handcuffs/cable/white
color = COLOR_WHITE
+/obj/item/weapon/restraints/handcuffs/alien
+ icon_state = "handcuffAlien"
+
/obj/item/weapon/restraints/handcuffs/pinkcuffs
name = "fluffy pink handcuffs"
desc = "Use this to keep prisoners in line. Or you know, your significant other."
@@ -121,7 +124,7 @@
if(do_mob(user, C, 30))
if(!C.handcuffed)
C.handcuffed = new /obj/item/weapon/restraints/handcuffs/cable/zipties/used(C)
- C.update_inv_handcuffed(1)
+ C.update_handcuffed()
to_chat(user, "You handcuff [C].")
add_logs(C, user, "ziptie-cuffed")
else
@@ -133,110 +136,3 @@
/obj/item/weapon/restraints/handcuffs/cable/zipties/used/attack()
return
-
-//Legcuffs
-/obj/item/weapon/restraints/legcuffs
- name = "leg cuffs"
- desc = "Use this to keep prisoners in line."
- gender = PLURAL
- icon = 'icons/obj/items.dmi'
- icon_state = "handcuff"
- flags = CONDUCT
- throwforce = 0
- w_class = 3.0
- origin_tech = "materials=1"
- slowdown = 7
- var/breakouttime = 300 //Deciseconds = 30s = 0.5 minute
-
-/obj/item/weapon/restraints/legcuffs/beartrap
- name = "bear trap"
- throw_speed = 1
- throw_range = 1
- icon_state = "beartrap0"
- desc = "A trap used to catch bears and other legged creatures."
- var/armed = 0
- var/obj/item/weapon/grenade/iedcasing/IED = null
-
-/obj/item/weapon/restraints/legcuffs/beartrap/Destroy()
- if(IED)
- qdel(IED)
- IED = null
- return ..()
-
-/obj/item/weapon/restraints/legcuffs/beartrap/suicide_act(mob/user)
- user.visible_message("[user] is sticking \his head in the [src.name]! It looks like \he's trying to commit suicide.")
- playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
- return (BRUTELOSS)
-
-/obj/item/weapon/restraints/legcuffs/beartrap/attack_self(mob/user as mob)
- ..()
- if(ishuman(user) && !user.stat && !user.restrained())
- armed = !armed
- icon_state = "beartrap[armed]"
- to_chat(user, "[src] is now [armed ? "armed" : "disarmed"]")
-
-/obj/item/weapon/restraints/legcuffs/beartrap/attackby(var/obj/item/I, mob/user as mob) //Let's get explosive.
- if(istype(I, /obj/item/weapon/grenade/iedcasing))
- if(IED)
- to_chat(user, "This beartrap already has an IED hooked up to it!")
- return
- IED = I
- switch(IED.assembled)
- if(0,1) //if it's not fueled/hooked up
- to_chat(user, "You haven't prepared this IED yet!")
- IED = null
- return
- if(2,3)
- user.drop_item(src)
- I.forceMove(src)
- message_admins("[key_name_admin(user)] has rigged a beartrap with an IED.")
- log_game("[key_name(user)] has rigged a beartrap with an IED.")
- to_chat(user, "You sneak the [IED] underneath the pressure plate and connect the trigger wire.")
- desc = "A trap used to catch bears and other legged creatures. There is an IED hooked up to it."
- else
- to_chat(user, "You shouldn't be reading this message! Contact a coder or someone, something broke!")
- IED = null
- return
- if(istype(I, /obj/item/weapon/screwdriver))
- if(IED)
- IED.forceMove(get_turf(src))
- IED = null
- to_chat(user, "You remove the IED from the [src].")
- return
- ..()
-
-/obj/item/weapon/restraints/legcuffs/beartrap/Crossed(AM as mob|obj)
- if(armed && isturf(src.loc))
- if( (iscarbon(AM) || isanimal(AM)) && !istype(AM, /mob/living/simple_animal/parrot) && !istype(AM, /mob/living/simple_animal/construct) && !istype(AM, /mob/living/simple_animal/shade) && !istype(AM, /mob/living/simple_animal/hostile/viscerator))
- var/mob/living/L = AM
- armed = 0
- icon_state = "beartrap0"
- playsound(src.loc, 'sound/effects/snap.ogg', 50, 1)
- L.visible_message("[L] triggers \the [src].", \
- "You trigger \the [src]!")
-
- if(IED && isturf(src.loc))
- IED.active = 1
- IED.overlays -= image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled")
- IED.icon_state = initial(icon_state) + "_active"
- IED.assembled = 3
- message_admins("[key_name_admin(usr)] has triggered an IED-rigged [name].")
- log_game("[key_name(usr)] has triggered an IED-rigged [name].")
- spawn(IED.det_time)
- IED.prime()
-
- if(ishuman(AM))
- var/mob/living/carbon/H = AM
- if(H.lying)
- H.apply_damage(20,BRUTE,"chest")
- else
- H.apply_damage(20,BRUTE,(pick("l_leg", "r_leg")))
- if(!H.legcuffed) //beartrap can't cuff you leg if there's already a beartrap or legcuffs.
- H.legcuffed = src
- src.loc = H
- H.update_inv_legcuffed(0)
- feedback_add_details("handcuffs","B") //Yes, I know they're legcuffs. Don't change this, no need for an extra variable. The "B" is used to tell them apart.
-
- else
- L.apply_damage(20,BRUTE)
- ..()
diff --git a/code/game/objects/items/weapons/legcuffs.dm b/code/game/objects/items/weapons/legcuffs.dm
index 88c555d8148..fa485cbf93b 100644
--- a/code/game/objects/items/weapons/legcuffs.dm
+++ b/code/game/objects/items/weapons/legcuffs.dm
@@ -1,5 +1,5 @@
-/obj/item/weapon/legcuffs
- name = "legcuffs"
+/obj/item/weapon/restraints/legcuffs
+ name = "leg cuffs"
desc = "Use this to keep prisoners in line."
gender = PLURAL
icon = 'icons/obj/items.dmi'
@@ -8,7 +8,102 @@
throwforce = 0
w_class = 3.0
origin_tech = "materials=1"
- var/breakouttime = 300 //Deciseconds = 30s = 0.5 minute
+ slowdown = 7
+ breakouttime = 300 //Deciseconds = 30s = 0.5 minute
+
+/obj/item/weapon/restraints/legcuffs/beartrap
+ name = "bear trap"
+ throw_speed = 1
+ throw_range = 1
+ icon_state = "beartrap0"
+ desc = "A trap used to catch bears and other legged creatures."
+ var/armed = 0
+ var/obj/item/weapon/grenade/iedcasing/IED = null
+
+/obj/item/weapon/restraints/legcuffs/beartrap/Destroy()
+ if(IED)
+ qdel(IED)
+ IED = null
+ return ..()
+
+/obj/item/weapon/restraints/legcuffs/beartrap/suicide_act(mob/user)
+ user.visible_message("[user] is sticking \his head in the [src.name]! It looks like \he's trying to commit suicide.")
+ playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
+ return (BRUTELOSS)
+
+/obj/item/weapon/restraints/legcuffs/beartrap/attack_self(mob/user as mob)
+ ..()
+ if(ishuman(user) && !user.stat && !user.restrained())
+ armed = !armed
+ icon_state = "beartrap[armed]"
+ to_chat(user, "[src] is now [armed ? "armed" : "disarmed"]")
+
+/obj/item/weapon/restraints/legcuffs/beartrap/attackby(var/obj/item/I, mob/user as mob) //Let's get explosive.
+ if(istype(I, /obj/item/weapon/grenade/iedcasing))
+ if(IED)
+ to_chat(user, "This beartrap already has an IED hooked up to it!")
+ return
+ IED = I
+ switch(IED.assembled)
+ if(0,1) //if it's not fueled/hooked up
+ to_chat(user, "You haven't prepared this IED yet!")
+ IED = null
+ return
+ if(2,3)
+ user.drop_item(src)
+ I.forceMove(src)
+ message_admins("[key_name_admin(user)] has rigged a beartrap with an IED.")
+ log_game("[key_name(user)] has rigged a beartrap with an IED.")
+ to_chat(user, "You sneak the [IED] underneath the pressure plate and connect the trigger wire.")
+ desc = "A trap used to catch bears and other legged creatures. There is an IED hooked up to it."
+ else
+ to_chat(user, "You shouldn't be reading this message! Contact a coder or someone, something broke!")
+ IED = null
+ return
+ if(istype(I, /obj/item/weapon/screwdriver))
+ if(IED)
+ IED.forceMove(get_turf(src))
+ IED = null
+ to_chat(user, "You remove the IED from the [src].")
+ return
+ ..()
+
+/obj/item/weapon/restraints/legcuffs/beartrap/Crossed(AM as mob|obj)
+ if(armed && isturf(src.loc))
+ if( (iscarbon(AM) || isanimal(AM)) && !istype(AM, /mob/living/simple_animal/parrot) && !istype(AM, /mob/living/simple_animal/construct) && !istype(AM, /mob/living/simple_animal/shade) && !istype(AM, /mob/living/simple_animal/hostile/viscerator))
+ var/mob/living/L = AM
+ armed = 0
+ icon_state = "beartrap0"
+ playsound(src.loc, 'sound/effects/snap.ogg', 50, 1)
+ L.visible_message("[L] triggers \the [src].", \
+ "You trigger \the [src]!")
+
+ if(IED && isturf(src.loc))
+ IED.active = 1
+ IED.overlays -= image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled")
+ IED.icon_state = initial(icon_state) + "_active"
+ IED.assembled = 3
+ message_admins("[key_name_admin(usr)] has triggered an IED-rigged [name].")
+ log_game("[key_name(usr)] has triggered an IED-rigged [name].")
+ spawn(IED.det_time)
+ IED.prime()
+
+ if(ishuman(AM))
+ var/mob/living/carbon/H = AM
+ if(H.lying)
+ H.apply_damage(20,BRUTE,"chest")
+ else
+ H.apply_damage(20,BRUTE,(pick("l_leg", "r_leg")))
+ if(!H.legcuffed) //beartrap can't cuff you leg if there's already a beartrap or legcuffs.
+ H.legcuffed = src
+ src.loc = H
+ H.update_inv_legcuffed(0)
+ feedback_add_details("handcuffs","B") //Yes, I know they're legcuffs. Don't change this, no need for an extra variable. The "B" is used to tell them apart.
+
+ else
+ L.apply_damage(20,BRUTE)
+ ..()
+
/obj/item/weapon/legcuffs/bolas
name = "bolas"
diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm
index 86345b677ca..a161755c285 100644
--- a/code/game/objects/items/weapons/shields.dm
+++ b/code/game/objects/items/weapons/shields.dm
@@ -137,37 +137,3 @@
H.update_inv_r_hand()
add_fingerprint(user)
return
-
-
-/obj/item/weapon/cloaking_device
- name = "cloaking device"
- desc = "Use this to become invisible to the human eyesocket."
- icon = 'icons/obj/device.dmi'
- icon_state = "shield0"
- var/active = 0.0
- flags = CONDUCT
- item_state = "electronic"
- throwforce = 10.0
- throw_speed = 2
- throw_range = 10
- w_class = 2.0
- origin_tech = "magnets=3;syndicate=4"
-
-
-/obj/item/weapon/cloaking_device/attack_self(mob/user as mob)
- src.active = !( src.active )
- if (src.active)
- to_chat(user, "\blue The cloaking device is now active.")
- src.icon_state = "shield1"
- else
- to_chat(user, "\blue The cloaking device is now inactive.")
- src.icon_state = "shield0"
- src.add_fingerprint(user)
- return
-
-/obj/item/weapon/cloaking_device/emp_act(severity)
- active = 0
- icon_state = "shield0"
- if(ismob(loc))
- loc:update_icons()
- ..()
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index cd565f341a7..b93fc3b06b1 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -512,6 +512,16 @@
new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
+/obj/item/weapon/storage/box/alienhandcuffs
+ name = "box of spare handcuffs"
+ desc = "A box full of handcuffs."
+ icon_state = "alienboxCuffs"
+
+ New()
+ ..()
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/restraints/handcuffs/alien(src)
+
/obj/item/weapon/storage/box/fakesyndiesuit
name = "boxed space suit and helmet"
desc = "A sleek, sturdy box used to hold replica spacesuits."
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index a187dc09b65..2a9b64748dd 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -127,7 +127,7 @@
C.handcuffed = null
if(C.buckled && C.buckled.buckle_requires_restraints)
C.buckled.unbuckle_mob()
- C.update_inv_handcuffed()
+ C.update_handcuffed()
return
else
..()
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 8f40f7a9848..cf72da26b0b 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -129,7 +129,13 @@
return
/mob/proc/unset_machine()
- src.machine = null
+ if(machine)
+ machine.on_unset_machine(src)
+ machine = null
+
+//called when the user unsets the machine.
+/atom/movable/proc/on_unset_machine(mob/user)
+ return
/mob/proc/set_machine(var/obj/O)
if(src.machine)
diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm
index a1b4c51d702..86aa341d39c 100644
--- a/code/game/objects/structures/barsign.dm
+++ b/code/game/objects/structures/barsign.dm
@@ -108,7 +108,11 @@
to_chat(user, "Nothing interesting happens!")
return
to_chat(user, "You emag the barsign. Takeover in progress...")
- sleep(100) //10 seconds
+ addtimer(src, "post_emag", 100)
+
+/obj/structure/sign/barsign/proc/post_emag()
+ if(broken || emagged)
+ return
set_sign(new /datum/barsign/hiddensigns/syndibarsign)
emagged = 1
req_access = list(access_syndicate)
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 87457fd791d..a6b19ebbea5 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -11,9 +11,11 @@
var/wall_mounted = 0 //never solid (You can always pass over it)
var/health = 100
var/lastbang
+ var/cutting_tool = /obj/item/weapon/weldingtool
var/sound = 'sound/machines/click.ogg'
- var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate
- //then open it in a populated area to crash clients.
+ var/cutting_sound = 'sound/items/Welder.ogg'
+ var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients.
+ var/material_drop = /obj/item/stack/sheet/metal
/obj/structure/closet/New()
..()
@@ -136,7 +138,6 @@
/obj/structure/closet/proc/toggle(mob/user as mob)
if(!(src.opened ? src.close() : src.open()))
to_chat(user, "It won't budge!")
- return
// this should probably use dump_contents()
/obj/structure/closet/ex_act(severity)
@@ -169,7 +170,6 @@
for(var/atom/movable/A as mob|obj in src)
A.forceMove(loc)
qdel(src)
- return
/obj/structure/closet/attack_animal(mob/living/simple_animal/user as mob)
if(user.environment_smash)
@@ -259,16 +259,24 @@
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
if(istype(W,/obj/item/tk_grab))
return 0
- if(istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = W
- if(!WT.remove_fuel(0,user))
- to_chat(user, "You need more welding fuel to complete this task.")
- return
- new /obj/item/stack/sheet/metal(src.loc)
- for(var/mob/M in viewers(src))
- M.show_message("\The [src] has been cut apart by [user] with \the [WT].", 3, "You hear welding.", 2)
- qdel(src)
- return
+ if(istype(W, cutting_tool))
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(!WT.remove_fuel(0, user))
+ return
+ to_chat(user, "You begin cutting \the [src] apart...")
+ playsound(loc, cutting_sound, 40, 1)
+ if(do_after(user, 40, 1, target = src))
+ if(!opened || !WT.isOn())
+ return
+ playsound(loc, cutting_sound, 50, 1)
+ visible_message("[user] slices apart \the [src].",
+ "You cut \the [src] apart with \the [WT].",
+ "You hear welding.")
+ var/turf/T = get_turf(src)
+ new material_drop(T)
+ qdel(src)
+ return
if(isrobot(user))
return
if(!usr.drop_item())
@@ -291,7 +299,6 @@
M.show_message("[src] has been [welded?"welded shut":"unwelded"] by [user.name].", 3, "You hear welding.", 2)
else
src.attack_hand(user)
- return
/obj/structure/closet/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
..()
@@ -315,7 +322,6 @@
if(user != O)
user.show_viewers("[user] stuffs [O] into [src]!")
src.add_fingerprint(user)
- return
/obj/structure/closet/attack_ai(mob/user)
if(istype(user, /mob/living/silicon/robot) && Adjacent(user)) //Robots can open/close it, but not the AI
diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
index 824cff35ece..dad7aecb190 100644
--- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
+++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
@@ -6,6 +6,8 @@
icon_closed = "cardboard"
health = 10
sound = 'sound/effects/rustle2.ogg'
+ material_drop = /obj/item/stack/sheet/cardboard
+ cutting_sound = 'sound/items/poster_ripped.ogg'
var/move_delay = 0
var/egged = 0
diff --git a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
index d3ab79e7688..6a295ca4307 100644
--- a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
@@ -3,4 +3,5 @@
desc = "A crate which can sustain life for a while."
icon_state = "critter"
icon_opened = "critteropen"
- icon_closed = "critter"
\ No newline at end of file
+ icon_closed = "critter"
+ material_drop = /obj/item/stack/sheet/wood
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
index f74f603df54..13c4c999ef5 100644
--- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
@@ -193,7 +193,6 @@
to_chat(user, "\red Cabinet locked.")
else
to_chat(user, "\blue Cabinet unlocked.")
- return
update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers
var/hasaxe = 0
diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm
index 9f435427bcc..72ae40e3af6 100644
--- a/code/game/objects/structures/crates_lockers/closets/fitness.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm
@@ -6,7 +6,6 @@
/obj/structure/closet/athletic_mixed/New()
..()
- sleep(2)
new /obj/item/clothing/under/shorts/grey(src)
new /obj/item/clothing/under/shorts/black(src)
new /obj/item/clothing/under/shorts/red(src)
@@ -25,7 +24,6 @@
/obj/structure/closet/boxinggloves/New()
..()
- sleep(2)
new /obj/item/clothing/gloves/boxing/blue(src)
new /obj/item/clothing/gloves/boxing/green(src)
new /obj/item/clothing/gloves/boxing/yellow(src)
@@ -38,7 +36,6 @@
/obj/structure/closet/masks/New()
..()
- sleep(2)
new /obj/item/clothing/mask/luchador(src)
new /obj/item/clothing/mask/luchador/rudos(src)
new /obj/item/clothing/mask/luchador/tecnicos(src)
@@ -52,7 +49,6 @@
/obj/structure/closet/lasertag/red/New()
..()
- sleep(2)
new /obj/item/weapon/gun/energy/laser/redtag(src)
new /obj/item/weapon/gun/energy/laser/redtag(src)
new /obj/item/weapon/gun/energy/laser/redtag(src)
@@ -69,7 +65,6 @@
/obj/structure/closet/lasertag/blue/New()
..()
- sleep(2)
new /obj/item/weapon/gun/energy/laser/bluetag(src)
new /obj/item/weapon/gun/energy/laser/bluetag(src)
new /obj/item/weapon/gun/energy/laser/bluetag(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
index 0318203a2ce..bff3228dbc9 100644
--- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm
+++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
@@ -36,7 +36,6 @@
/obj/structure/closet/gimmick/russian/New()
..()
- sleep(2)
new /obj/item/clothing/head/ushanka(src)
new /obj/item/clothing/head/ushanka(src)
new /obj/item/clothing/head/ushanka(src)
@@ -58,7 +57,6 @@
/obj/structure/closet/gimmick/tacticool/New()
..()
- sleep(2)
new /obj/item/clothing/glasses/eyepatch(src)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/gloves/combat(src)
@@ -83,16 +81,11 @@
icon_opened = "syndicateopen"
anchored = 1
-/obj/structure/closet/thunderdome/New()
- ..()
- sleep(2)
-
/obj/structure/closet/thunderdome/tdred
name = "red-team Thunderdome closet"
/obj/structure/closet/thunderdome/tdred/New()
..()
- sleep(2)
new /obj/item/clothing/suit/armor/tdome/red(src)
new /obj/item/clothing/suit/armor/tdome/red(src)
new /obj/item/clothing/suit/armor/tdome/red(src)
@@ -120,7 +113,6 @@
/obj/structure/closet/thunderdome/tdgreen/New()
..()
- sleep(2)
new /obj/item/clothing/suit/armor/tdome/green(src)
new /obj/item/clothing/suit/armor/tdome/green(src)
new /obj/item/clothing/suit/armor/tdome/green(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index 908a8dc26c4..2b6660d077f 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -16,7 +16,6 @@
/obj/structure/closet/gmcloset/New()
..()
- sleep(2)
new /obj/item/clothing/head/that(src)
new /obj/item/clothing/head/that(src)
new /obj/item/device/radio/headset/headset_service(src)
@@ -45,7 +44,6 @@
/obj/structure/closet/chefcloset/New()
..()
- sleep(2)
new /obj/item/clothing/under/waiter(src)
new /obj/item/clothing/under/waiter(src)
new /obj/item/device/radio/headset/headset_service(src)
@@ -74,7 +72,6 @@
/obj/structure/closet/jcloset/New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/janitor(src)
new /obj/item/device/radio/headset/headset_service(src)
new /obj/item/weapon/cartridge/janitor(src)
@@ -104,7 +101,6 @@
/obj/structure/closet/lawcloset/New()
..()
- sleep(2)
new /obj/item/clothing/under/lawyer/female(src)
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/red(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
index 5100e2170f0..4f5bd0e40b3 100644
--- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
@@ -7,7 +7,6 @@
/obj/structure/closet/l3closet/New()
..()
- sleep(2)
new /obj/item/weapon/storage/bag/bio( src )
new /obj/item/clothing/suit/bio_suit/general( src )
new /obj/item/clothing/head/bio_hood/general( src )
@@ -20,7 +19,6 @@
/obj/structure/closet/l3closet/general/New()
..()
- sleep(2)
contents = list()
new /obj/item/clothing/suit/bio_suit/general( src )
new /obj/item/clothing/head/bio_hood/general( src )
@@ -33,7 +31,6 @@
/obj/structure/closet/l3closet/virology/New()
..()
- sleep(2)
contents = list()
new /obj/item/weapon/storage/bag/bio( src )
new /obj/item/clothing/suit/bio_suit/virology( src )
@@ -49,7 +46,6 @@
/obj/structure/closet/l3closet/security/New()
..()
- sleep(2)
contents = list()
new /obj/item/clothing/suit/bio_suit/security( src )
new /obj/item/clothing/head/bio_hood/security( src )
@@ -62,7 +58,6 @@
/obj/structure/closet/l3closet/janitor/New()
..()
- sleep(2)
contents = list()
new /obj/item/clothing/suit/bio_suit/janitor( src )
new /obj/item/clothing/head/bio_hood/janitor( src )
@@ -75,7 +70,6 @@
/obj/structure/closet/l3closet/scientist/New()
..()
- sleep(2)
contents = list()
new /obj/item/weapon/storage/bag/bio( src )
new /obj/item/clothing/suit/bio_suit/scientist( src )
diff --git a/code/game/objects/structures/crates_lockers/closets/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm
index 3bf64ba34d8..ba32e37f38c 100644
--- a/code/game/objects/structures/crates_lockers/closets/malfunction.dm
+++ b/code/game/objects/structures/crates_lockers/closets/malfunction.dm
@@ -7,7 +7,6 @@
/obj/structure/closet/malf/suits/New()
..()
- sleep(2)
new /obj/item/weapon/tank/jetpack/void(src)
new /obj/item/clothing/mask/breath(src)
new /obj/item/clothing/head/helmet/space/nasavoid(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
index 38321723e2a..af6424571ca 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
@@ -11,7 +11,6 @@
New()
..()
- sleep(2)
new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src )
new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src )
new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src )
@@ -22,7 +21,6 @@
new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src )
new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src )
new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src )
- return
/obj/structure/closet/secure_closet/bar/update_icon()
if(broken)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
index e7d23c4a795..945f4f4d818 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -10,14 +10,12 @@
New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/cargotech(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/device/radio/headset/headset_cargo(src)
new /obj/item/clothing/gloves/fingerless(src)
new /obj/item/clothing/head/soft(src)
// new /obj/item/weapon/cartridge/quartermaster(src)
- return
/obj/structure/closet/secure_closet/quartermaster
name = "quartermaster's locker"
@@ -31,7 +29,6 @@
New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/cargo(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/device/radio/headset/headset_cargo(src)
@@ -42,5 +39,4 @@
new /obj/item/weapon/tank/emergency_oxygen(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/glasses/meson(src)
- new /obj/item/clothing/head/soft(src)
- return
\ No newline at end of file
+ new /obj/item/clothing/head/soft(src)
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm b/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm
index d8577c53e27..50ad1500192 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm
@@ -11,7 +11,6 @@
/obj/structure/closet/secure_closet/chaplain/New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/chaplain(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/suit/nun(src)
@@ -29,5 +28,4 @@
new /obj/item/clothing/gloves/ring/silver(src)
new /obj/item/clothing/gloves/ring/silver(src)
new /obj/item/clothing/gloves/ring/gold(src)
- new /obj/item/clothing/gloves/ring/gold(src)
- return
\ No newline at end of file
+ new /obj/item/clothing/gloves/ring/gold(src)
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 0ce79c29b17..d7fd20b6d37 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -10,7 +10,6 @@
New()
..()
- sleep(2)
if(prob(50))
new /obj/item/weapon/storage/backpack/industrial(src)
else
@@ -32,7 +31,6 @@
new /obj/item/device/flash(src)
new /obj/item/taperoll/engineering(src)
new /obj/item/clothing/head/beret/eng(src)
- return
/obj/structure/closet/secure_closet/engineering_electrical
name = "electrical supplies locker"
@@ -47,7 +45,6 @@
New()
..()
- sleep(2)
new /obj/item/clothing/gloves/color/yellow(src)
new /obj/item/clothing/gloves/color/yellow(src)
new /obj/item/weapon/storage/toolbox/electrical(src)
@@ -60,7 +57,6 @@
new /obj/item/device/multitool(src)
new /obj/item/device/multitool(src)
new /obj/item/clothing/head/beret/eng
- return
@@ -77,14 +73,12 @@
New()
..()
- sleep(2)
new /obj/item/clothing/head/welding(src)
new /obj/item/clothing/head/welding(src)
new /obj/item/clothing/head/welding(src)
new /obj/item/weapon/weldingtool/largetank(src)
new /obj/item/weapon/weldingtool/largetank(src)
new /obj/item/weapon/weldingtool/largetank(src)
- return
@@ -101,7 +95,6 @@
New()
..()
- sleep(2)
if(prob(50))
new /obj/item/weapon/storage/backpack/industrial(src)
else
@@ -116,7 +109,6 @@
new /obj/item/weapon/cartridge/engineering(src)
new /obj/item/taperoll/engineering(src)
new /obj/item/clothing/head/beret/eng(src)
- return
/obj/structure/closet/secure_closet/atmos_personal
name = "technician's locker"
@@ -131,7 +123,6 @@
New()
..()
- sleep(2)
new /obj/item/device/radio/headset/headset_eng(src)
new /obj/item/weapon/cartridge/atmos(src)
new /obj/item/weapon/storage/toolbox/mechanical(src)
@@ -147,6 +138,4 @@
new /obj/item/weapon/tank/emergency_oxygen/engi(src)
new /obj/item/weapon/watertank/atmos(src)
new /obj/item/clothing/suit/fire/atmos(src)
- new /obj/item/clothing/head/hardhat/atmos(src)
-
- return
\ No newline at end of file
+ new /obj/item/clothing/head/hardhat/atmos(src)
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
index 9342b704087..896ab5e1dd1 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
@@ -21,7 +21,6 @@
var/list/bombs = search_contents_for(/obj/item/device/transfer_valve)
if(!isemptylist(bombs)) // You're fucked.
..(severity)
- return
/obj/structure/closet/secure_closet/freezer/kitchen
name = "kitchen cabinet"
@@ -29,8 +28,7 @@
New()
..()
- sleep(2)
- for(var/i = 0, i < 3, i++)
+ for(var/i in 1 to 3)
new /obj/item/weapon/reagent_containers/food/condiment/flour(src)
new /obj/item/weapon/reagent_containers/food/condiment/rice(src)
new /obj/item/weapon/reagent_containers/food/condiment/sugar(src)
@@ -54,10 +52,8 @@
New()
..()
- sleep(2)
- for(var/i = 0, i < 4, i++)
+ for(var/i in 1 to 4)
new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src)
- return
@@ -73,14 +69,11 @@
New()
..()
- sleep(2)
- for(var/i = 0, i < 5, i++)
+ for(var/i in 1 to 5)
new /obj/item/weapon/reagent_containers/food/drinks/milk(src)
- for(var/i = 0, i < 5, i++)
new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src)
- for(var/i = 0, i < 2, i++)
+ for(var/i in 1 to 2)
new /obj/item/weapon/storage/fancy/egg_box(src)
- return
@@ -97,9 +90,7 @@
New()
..()
- sleep(2)
- dispense_cash(6700,src)
- return
+ dispense_cash(6700, src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
index fb26aff5403..c18fd1a9b74 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
@@ -11,7 +11,6 @@
New()
..()
- sleep(2)
switch(rand(1,2))
if(1)
new /obj/item/clothing/suit/apron(src)
@@ -24,5 +23,4 @@
new /obj/item/device/radio/headset/headset_service(src)
new /obj/item/clothing/mask/bandana/botany(src)
new /obj/item/weapon/minihoe(src)
- new /obj/item/weapon/hatchet(src)
- return
\ No newline at end of file
+ new /obj/item/weapon/hatchet(src)
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index 11e1b56b7ed..ad76cfc9409 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -12,7 +12,6 @@
New()
..()
- sleep(2)
new /obj/item/weapon/storage/box/autoinjectors(src)
new /obj/item/weapon/storage/box/syringes(src)
new /obj/item/weapon/reagent_containers/dropper(src)
@@ -23,7 +22,6 @@
new /obj/item/weapon/reagent_containers/glass/bottle/epinephrine(src)
new /obj/item/weapon/reagent_containers/glass/bottle/charcoal(src)
new /obj/item/weapon/reagent_containers/glass/bottle/charcoal(src)
- return
@@ -41,14 +39,12 @@
New()
..()
- sleep(2)
new /obj/item/weapon/tank/anesthetic(src)
new /obj/item/weapon/tank/anesthetic(src)
new /obj/item/weapon/tank/anesthetic(src)
new /obj/item/clothing/mask/breath/medical(src)
new /obj/item/clothing/mask/breath/medical(src)
new /obj/item/clothing/mask/breath/medical(src)
- return
@@ -64,7 +60,6 @@
New()
..()
- sleep(2)
if(prob(50))
new /obj/item/weapon/storage/backpack/medic(src)
else
@@ -79,7 +74,6 @@
new /obj/item/weapon/storage/belt/medical(src)
new /obj/item/clothing/glasses/hud/health(src)
new /obj/item/clothing/shoes/sandal/white(src)
- return
//Exam Room
/obj/structure/closet/secure_closet/exam
@@ -96,7 +90,6 @@
New()
..()
- sleep(2)
new /obj/item/weapon/storage/box/syringes(src)
new /obj/item/weapon/reagent_containers/dropper(src)
new /obj/item/weapon/storage/belt/medical(src)
@@ -111,7 +104,6 @@
new /obj/item/weapon/storage/firstaid/fire(src)
new /obj/item/weapon/storage/firstaid/o2(src)
new /obj/item/weapon/storage/firstaid/toxin(src)
- return
// Psychiatrist's pill bottle
@@ -138,14 +130,11 @@
New()
..()
- sleep(2)
new /obj/item/clothing/suit/straight_jacket(src)
new /obj/item/weapon/reagent_containers/syringe(src)
new /obj/item/weapon/reagent_containers/glass/bottle/ether(src)
new /obj/item/weapon/storage/pill_bottle/psychiatrist(src)
- return
-
/obj/structure/closet/secure_closet/CMO
name = "chief medical officer's locker"
req_access = list(access_cmo)
@@ -158,7 +147,6 @@
New()
..()
- sleep(2)
if(prob(50))
new /obj/item/weapon/storage/backpack/medic(src)
else
@@ -187,7 +175,6 @@
new /obj/item/device/flash(src)
new /obj/item/weapon/reagent_containers/hypospray/CMO(src)
new /obj/item/organ/internal/cyberimp/eyes/hud/medical(src)
- return
@@ -198,12 +185,10 @@
New()
..()
- sleep(2)
new /obj/item/device/assembly/signaler(src)
new /obj/item/device/radio/electropack(src)
new /obj/item/device/radio/electropack(src)
new /obj/item/device/radio/electropack(src)
- return
@@ -221,10 +206,8 @@
New()
..()
- sleep(2)
new /obj/item/weapon/storage/box/pillbottles(src)
new /obj/item/weapon/storage/box/pillbottles(src)
- return
/obj/structure/closet/secure_closet/medical_wall
name = "first aid closet"
@@ -266,12 +249,10 @@
New()
..()
- sleep(2)
new /obj/item/clothing/suit/space/eva/paramedic(src)
new /obj/item/clothing/head/helmet/space/eva/paramedic(src)
new /obj/item/clothing/head/helmet/space/eva/paramedic(src)
new /obj/item/device/sensor_device(src)
- return
/obj/structure/closet/secure_closet/reagents
name = "chemical storage closet"
@@ -287,11 +268,9 @@
New()
..()
- sleep(2)
new /obj/item/weapon/reagent_containers/glass/bottle/reagent/phenol(src)
new /obj/item/weapon/reagent_containers/glass/bottle/reagent/ammonia(src)
new /obj/item/weapon/reagent_containers/glass/bottle/reagent/oil(src)
new /obj/item/weapon/reagent_containers/glass/bottle/reagent/acetone(src)
new /obj/item/weapon/reagent_containers/glass/bottle/reagent/acid(src)
new /obj/item/weapon/reagent_containers/glass/bottle/reagent/diethylamine(src)
- return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
index 1de1f8d8440..0433ba0479f 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
@@ -6,15 +6,13 @@
/obj/structure/closet/secure_closet/personal/New()
..()
- spawn(2)
- if(prob(50))
- new /obj/item/weapon/storage/backpack/duffel(src)
- if(prob(50))
- new /obj/item/weapon/storage/backpack(src)
- else
- new /obj/item/weapon/storage/backpack/satchel_norm(src)
- new /obj/item/device/radio/headset( src )
- return
+ if(prob(50))
+ new /obj/item/weapon/storage/backpack/duffel(src)
+ if(prob(50))
+ new /obj/item/weapon/storage/backpack(src)
+ else
+ new /obj/item/weapon/storage/backpack/satchel_norm(src)
+ new /obj/item/device/radio/headset( src )
/obj/structure/closet/secure_closet/personal/patient
@@ -22,11 +20,9 @@
/obj/structure/closet/secure_closet/personal/patient/New()
..()
- spawn(4)
- contents = list()
- new /obj/item/clothing/under/color/white( src )
- new /obj/item/clothing/shoes/white( src )
- return
+ contents.Cut()
+ new /obj/item/clothing/under/color/white( src )
+ new /obj/item/clothing/shoes/white( src )
@@ -52,11 +48,9 @@
/obj/structure/closet/secure_closet/personal/cabinet/New()
..()
- spawn(4)
- contents = list()
- new /obj/item/weapon/storage/backpack/satchel/withwallet( src )
- new /obj/item/device/radio/headset( src )
- return
+ contents.Cut()
+ new /obj/item/weapon/storage/backpack/satchel/withwallet( src )
+ new /obj/item/device/radio/headset( src )
/obj/structure/closet/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if (src.opened)
@@ -91,4 +85,3 @@
emag_act(user)
else
to_chat(user, "\red Access Denied")
- return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
index ad0c0ac8ef1..321b71b6eaa 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
@@ -10,7 +10,6 @@
New()
..()
- sleep(2)
new /obj/item/weapon/storage/backpack/science(src)
new /obj/item/weapon/storage/backpack/satchel_tox(src)
new /obj/item/clothing/under/rank/scientist(src)
@@ -22,7 +21,6 @@
new /obj/item/weapon/tank/air(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/shoes/sandal/white(src)
- return
@@ -38,7 +36,6 @@
New()
..()
- sleep(2)
new /obj/item/clothing/suit/bio_suit/scientist(src)
new /obj/item/clothing/head/bio_hood/scientist(src)
new /obj/item/clothing/under/rank/research_director(src)
@@ -52,7 +49,6 @@
new /obj/item/clothing/suit/armor/reactive(src)
new /obj/item/device/flash(src)
new /obj/item/device/laser_pointer(src)
- return
/obj/structure/closet/secure_closet/research_reagents
name = "research chemical storage closet"
@@ -68,7 +64,6 @@
New()
..()
- sleep(2)
new /obj/item/weapon/reagent_containers/glass/bottle/reagent/morphine(src)
new /obj/item/weapon/reagent_containers/glass/bottle/reagent/morphine(src)
new /obj/item/weapon/reagent_containers/glass/bottle/reagent/morphine(src)
@@ -82,5 +77,4 @@
new /obj/item/weapon/reagent_containers/glass/bottle/reagent/oil(src)
new /obj/item/weapon/reagent_containers/glass/bottle/reagent/acetone(src)
new /obj/item/weapon/reagent_containers/glass/bottle/reagent/acid(src)
- new /obj/item/weapon/reagent_containers/glass/bottle/reagent/diethylamine(src)
- return
\ No newline at end of file
+ new /obj/item/weapon/reagent_containers/glass/bottle/reagent/diethylamine(src)
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 2aa4ce9db01..05f077e64d1 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -10,7 +10,6 @@
New()
..()
- sleep(2)
if(prob(50))
new /obj/item/weapon/storage/backpack/captain(src)
else
@@ -27,7 +26,6 @@
new /obj/item/device/radio/headset/heads/captain/alt(src)
new /obj/item/clothing/gloves/color/captain(src)
new /obj/item/weapon/gun/energy/gun(src)
- return
@@ -43,7 +41,6 @@
New()
..()
- sleep(2)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/head/hopcap(src)
new /obj/item/weapon/cartridge/hop(src)
@@ -55,7 +52,6 @@
new /obj/item/device/flash(src)
new /obj/item/weapon/mining_voucher(src)
new /obj/item/clothing/accessory/petcollar(src)
- return
/obj/structure/closet/secure_closet/hop2
name = "head of personnel's attire"
@@ -69,7 +65,6 @@
New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/head_of_personnel(src)
new /obj/item/clothing/under/dress/dress_hop(src)
new /obj/item/clothing/under/dress/dress_hr(src)
@@ -82,7 +77,6 @@
new /obj/item/clothing/shoes/leather(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/under/rank/head_of_personnel_whimsy(src)
- return
@@ -98,7 +92,6 @@
New()
..()
- sleep(2)
if(prob(50))
new /obj/item/weapon/storage/backpack/security(src)
else
@@ -121,7 +114,6 @@
new /obj/item/weapon/storage/belt/security/sec(src)
new /obj/item/taperoll/police(src)
new /obj/item/weapon/gun/energy/hos(src)
- return
@@ -138,7 +130,6 @@
New()
..()
- sleep(2)
if(prob(50))
new /obj/item/weapon/storage/backpack/security(src)
else
@@ -161,7 +152,6 @@
new /obj/item/weapon/gun/energy/advtaser(src)
new /obj/item/weapon/storage/belt/security/sec(src)
new /obj/item/weapon/storage/box/holobadge(src)
- return
@@ -177,7 +167,6 @@
New()
..()
- sleep(2)
if(prob(50))
new /obj/item/weapon/storage/backpack/security(src)
else
@@ -194,7 +183,6 @@
new /obj/item/clothing/head/helmet(src)
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/taperoll/police(src)
- return
/obj/structure/closet/secure_closet/brigdoc
name = "brig physician's locker"
@@ -208,7 +196,6 @@
New()
..()
- sleep(2)
if(prob(50))
new /obj/item/weapon/storage/backpack/medic(src)
else
@@ -225,7 +212,6 @@
new /obj/item/clothing/shoes/white(src)
new /obj/item/device/radio/headset/headset_sec/alt(src)
new /obj/item/clothing/shoes/sandal/white(src)
- return
/obj/structure/closet/secure_closet/blueshield
name = "blueshield's locker"
@@ -239,7 +225,6 @@
New()
..()
- sleep(2)
new /obj/item/weapon/storage/briefcase(src)
new /obj/item/weapon/storage/firstaid/adv(src)
new /obj/item/weapon/storage/belt/security/sec(src)
@@ -257,7 +242,6 @@
new /obj/item/clothing/accessory/holster(src)
new /obj/item/clothing/accessory/blue(src)
new /obj/item/clothing/shoes/jackboots/jacksandals(src)
- return
/obj/structure/closet/secure_closet/ntrep
name = "\improper Nanotrasen Representative's locker"
@@ -271,7 +255,6 @@
New()
..()
- sleep(2)
new /obj/item/weapon/storage/briefcase(src)
new /obj/item/device/paicard(src)
new /obj/item/device/flash(src)
@@ -283,7 +266,6 @@
new /obj/item/clothing/under/lawyer/female(src)
new /obj/item/clothing/head/ntrep(src)
new /obj/item/clothing/shoes/sandal/fancy(src)
- return
/obj/structure/closet/secure_closet/security/cargo
@@ -292,7 +274,6 @@
..()
new /obj/item/clothing/accessory/armband/cargo(src)
new /obj/item/device/encryptionkey/headset_cargo(src)
- return
/obj/structure/closet/secure_closet/security/engine
@@ -300,7 +281,6 @@
..()
new /obj/item/clothing/accessory/armband/engine(src)
new /obj/item/device/encryptionkey/headset_eng(src)
- return
/obj/structure/closet/secure_closet/security/science
@@ -308,7 +288,6 @@
..()
new /obj/item/clothing/accessory/armband/science(src)
new /obj/item/device/encryptionkey/headset_sci(src)
- return
/obj/structure/closet/secure_closet/security/med
@@ -316,7 +295,6 @@
..()
new /obj/item/clothing/accessory/armband/medgreen(src)
new /obj/item/device/encryptionkey/headset_med(src)
- return
/obj/structure/closet/secure_closet/detective
@@ -331,7 +309,6 @@
New()
..()
- sleep(2)
new /obj/item/clothing/under/det(src)
new /obj/item/clothing/suit/storage/det_suit(src)
new /obj/item/clothing/suit/storage/forensics/blue(src)
@@ -351,7 +328,6 @@
new /obj/item/clothing/accessory/holster/armpit(src)
new /obj/item/clothing/glasses/sunglasses/yeah(src)
new /obj/item/device/flashlight/seclite(src)
- return
/obj/structure/closet/secure_closet/detective/update_icon()
if(broken)
@@ -372,10 +348,8 @@
New()
..()
- sleep(2)
new /obj/item/weapon/reagent_containers/ld50_syringe/lethal(src)
new /obj/item/weapon/reagent_containers/ld50_syringe/lethal(src)
- return
@@ -386,9 +360,9 @@
var/id = null
New()
+ ..()
new /obj/item/clothing/under/color/orange/prison( src )
new /obj/item/clothing/shoes/orange( src )
- return
@@ -398,7 +372,6 @@
New()
..()
- sleep(2)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/weapon/paper/Court (src)
new /obj/item/weapon/paper/Court (src)
@@ -407,7 +380,6 @@
new /obj/item/clothing/suit/judgerobe (src)
new /obj/item/clothing/head/powdered_wig (src)
new /obj/item/weapon/storage/briefcase(src)
- return
/obj/structure/closet/secure_closet/wall
name = "wall locker"
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index a315e598819..8a701bedd72 100644
--- a/code/game/objects/structures/crates_lockers/closets/statue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/statue.dm
@@ -108,8 +108,6 @@
health -= Proj.damage
check_health()
- return
-
/obj/structure/closet/statue/attack_animal(mob/living/simple_animal/user as mob)
if(user.environment_smash)
for(var/mob/M in src)
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index 52c789f9c43..e4aa901436e 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -11,7 +11,6 @@
/obj/structure/closet/syndicate/personal/New()
..()
- sleep(2)
new /obj/item/clothing/under/syndicate(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/ammo_box/magazine/m10mm(src)
@@ -24,7 +23,6 @@
/obj/structure/closet/syndicate/suits/New()
..()
- sleep(2)
new /obj/item/clothing/head/helmet/space/rig/syndi(src)
new /obj/item/clothing/mask/gas/syndicate(src)
new /obj/item/clothing/suit/space/rig/syndi(src)
@@ -35,7 +33,6 @@
/obj/structure/closet/syndicate/nuclear/New()
..()
- sleep(2)
new /obj/item/ammo_box/magazine/m10mm(src)
new /obj/item/ammo_box/magazine/m10mm(src)
new /obj/item/ammo_box/magazine/m10mm(src)
@@ -55,7 +52,6 @@
new /obj/item/weapon/pinpointer/nukeop(src)
new /obj/item/weapon/pinpointer/nukeop(src)
new /obj/item/device/pda/syndicate(src)
- return
/obj/structure/closet/syndicate/resources/
desc = "An old, dusty locker."
@@ -67,9 +63,6 @@
var/rare_min = 5 //Minimum HONK of HONK in the stack HONK HONK rare minerals
var/rare_max = 20 //Maximum HONK HONK HONK in the HONK for HONK rare HONK
-
- sleep(2)
-
var/pickednum = rand(1, 50)
//Sad trombone
@@ -114,12 +107,11 @@
if(pickednum == 50)
new /obj/item/weapon/tank/jetpack/carbondioxide(src)
- return
-
/obj/structure/closet/syndicate/resources/everything
desc = "It's an emergency storage closet for repairs."
New()
+ ..()
var/list/resources = list(
/obj/item/stack/sheet/metal,
/obj/item/stack/sheet/glass,
@@ -133,11 +125,7 @@
/obj/item/stack/rods
)
- sleep(2)
-
- for(var/i = 0, i<2, i++)
+ for(var/i in 1 to 2)
for(var/res in resources)
var/obj/item/stack/R = new res(src)
- R.amount = R.max_amount
-
- return
\ No newline at end of file
+ R.amount = R.max_amount
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 9fc267f35fe..c99790c4011 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -80,8 +80,7 @@
/obj/structure/closet/firecloset/full/New()
..()
- sleep(4)
- contents = list()
+ contents.Cut()
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/mask/gas(src)
@@ -167,7 +166,6 @@
/obj/structure/closet/bombcloset/New()
..()
- sleep(2)
new /obj/item/clothing/suit/bomb_suit( src )
new /obj/item/clothing/under/color/black( src )
new /obj/item/clothing/shoes/black( src )
@@ -183,7 +181,6 @@
/obj/structure/closet/bombclosetsecurity/New()
..()
- sleep(2)
new /obj/item/clothing/suit/bomb_suit/security( src )
new /obj/item/clothing/under/rank/security( src )
new /obj/item/clothing/shoes/brown( src )
@@ -204,7 +201,6 @@
/obj/structure/closet/hydrant/New()
..()
- sleep(2)
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/device/flashlight(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index 8656b60aad5..9b5cb514558 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -9,7 +9,6 @@
/obj/structure/closet/wardrobe/generic/New()
..()
- sleep(2)
new /obj/item/clothing/under/color/blue(src)
new /obj/item/clothing/under/color/blue(src)
new /obj/item/clothing/under/color/blue(src)
@@ -19,7 +18,6 @@
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/brown(src)
- return
/obj/structure/closet/wardrobe/red
@@ -29,7 +27,6 @@
/obj/structure/closet/wardrobe/red/New()
..()
- sleep(2)
new /obj/item/weapon/storage/backpack/duffel/security(src)
new /obj/item/weapon/storage/backpack/duffel/security(src)
new /obj/item/clothing/mask/bandana/red(src)
@@ -54,8 +51,6 @@
new /obj/item/clothing/head/beret/sec(src)
new /obj/item/clothing/head/beret/sec(src)
- return
-
/obj/structure/closet/redcorp
name = "corporate security wardrobe"
icon_state = "red"
@@ -63,7 +58,6 @@
/obj/structure/closet/redcorp/New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/security/corp(src)
new /obj/item/clothing/under/rank/security/corp(src)
new /obj/item/clothing/under/rank/security/corp(src)
@@ -78,14 +72,12 @@
/obj/structure/closet/wardrobe/pink/New()
..()
- sleep(2)
new /obj/item/clothing/under/color/pink(src)
new /obj/item/clothing/under/color/pink(src)
new /obj/item/clothing/under/color/pink(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/brown(src)
- return
/obj/structure/closet/wardrobe/black
name = "black wardrobe"
@@ -94,7 +86,6 @@
/obj/structure/closet/wardrobe/black/New()
..()
- sleep(2)
new /obj/item/clothing/under/color/black(src)
new /obj/item/clothing/under/color/black(src)
new /obj/item/clothing/under/color/black(src)
@@ -109,7 +100,6 @@
new /obj/item/clothing/head/soft/black(src)
new /obj/item/clothing/head/soft/black(src)
new /obj/item/clothing/head/soft/black(src)
- return
/obj/structure/closet/wardrobe/green
name = "green wardrobe"
@@ -118,14 +108,12 @@
/obj/structure/closet/wardrobe/green/New()
..()
- sleep(2)
new /obj/item/clothing/under/color/green(src)
new /obj/item/clothing/under/color/green(src)
new /obj/item/clothing/under/color/green(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
- return
/obj/structure/closet/wardrobe/xenos
name = "xenos wardrobe"
@@ -134,13 +122,11 @@
/obj/structure/closet/wardrobe/xenos/New()
..()
- sleep(2)
new /obj/item/clothing/suit/unathi/mantle(src)
new /obj/item/clothing/suit/unathi/robe(src)
new /obj/item/clothing/shoes/sandal(src)
new /obj/item/clothing/shoes/sandal(src)
new /obj/item/clothing/shoes/sandal(src)
- return
/obj/structure/closet/wardrobe/orange
@@ -151,14 +137,12 @@
/obj/structure/closet/wardrobe/orange/New()
..()
- sleep(2)
new /obj/item/clothing/under/color/orange/prison(src)
new /obj/item/clothing/under/color/orange/prison(src)
new /obj/item/clothing/under/color/orange/prison(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
- return
/obj/structure/closet/wardrobe/yellow
@@ -168,14 +152,12 @@
/obj/structure/closet/wardrobe/yellow/New()
..()
- sleep(2)
new /obj/item/clothing/under/color/yellow(src)
new /obj/item/clothing/under/color/yellow(src)
new /obj/item/clothing/under/color/yellow(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
- return
/obj/structure/closet/wardrobe/atmospherics_yellow
@@ -185,7 +167,6 @@
/obj/structure/closet/wardrobe/atmospherics_yellow/New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/atmospheric_technician(src)
new /obj/item/clothing/under/rank/atmospheric_technician(src)
new /obj/item/clothing/under/rank/atmospheric_technician(src)
@@ -198,7 +179,6 @@
new /obj/item/clothing/head/beret/atmos(src)
new /obj/item/clothing/head/beret/atmos(src)
new /obj/item/clothing/head/beret/atmos(src)
- return
@@ -209,7 +189,6 @@
/obj/structure/closet/wardrobe/engineering_yellow/New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/engineer(src)
new /obj/item/clothing/under/rank/engineer(src)
new /obj/item/clothing/under/rank/engineer(src)
@@ -222,7 +201,6 @@
new /obj/item/clothing/head/beret/eng(src)
new /obj/item/clothing/head/beret/eng(src)
new /obj/item/clothing/head/beret/eng(src)
- return
/obj/structure/closet/wardrobe/white
@@ -232,14 +210,12 @@
/obj/structure/closet/wardrobe/white/New()
..()
- sleep(2)
new /obj/item/clothing/under/color/white(src)
new /obj/item/clothing/under/color/white(src)
new /obj/item/clothing/under/color/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
- return
/obj/structure/closet/wardrobe/medical_white
name = "medical doctor's wardrobe"
@@ -248,7 +224,6 @@
/obj/structure/closet/wardrobe/medical_white/New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/nursesuit (src)
new /obj/item/clothing/head/nursehat (src)
new /obj/item/clothing/under/rank/nurse(src)
@@ -265,7 +240,6 @@
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
- return
/obj/structure/closet/wardrobe/pjs
name = "Pajama wardrobe"
@@ -274,7 +248,6 @@
/obj/structure/closet/wardrobe/pjs/New()
..()
- sleep(2)
new /obj/item/clothing/under/pj/red(src)
new /obj/item/clothing/under/pj/red(src)
new /obj/item/clothing/under/pj/blue(src)
@@ -283,7 +256,6 @@
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/slippers(src)
new /obj/item/clothing/shoes/slippers(src)
- return
/obj/structure/closet/wardrobe/toxins_white
@@ -293,7 +265,6 @@
/obj/structure/closet/wardrobe/toxins_white/New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/scientist(src)
new /obj/item/clothing/under/rank/scientist(src)
new /obj/item/clothing/under/rank/scientist(src)
@@ -306,7 +277,6 @@
new /obj/item/clothing/shoes/slippers
new /obj/item/clothing/shoes/slippers
new /obj/item/clothing/shoes/slippers
- return
/obj/structure/closet/wardrobe/robotics_black
@@ -316,7 +286,6 @@
/obj/structure/closet/wardrobe/robotics_black/New()
..()
- sleep(2)
new /obj/item/clothing/glasses/hud/diagnostic(src)
new /obj/item/clothing/glasses/hud/diagnostic(src)
new /obj/item/clothing/under/rank/roboticist(src)
@@ -329,7 +298,6 @@
new /obj/item/clothing/gloves/fingerless(src)
new /obj/item/clothing/head/soft/black(src)
new /obj/item/clothing/head/soft/black(src)
- return
/obj/structure/closet/wardrobe/chemistry_white
@@ -339,7 +307,6 @@
/obj/structure/closet/wardrobe/chemistry_white/New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/chemist(src)
new /obj/item/clothing/under/rank/chemist(src)
new /obj/item/clothing/shoes/white(src)
@@ -354,7 +321,6 @@
new /obj/item/weapon/storage/bag/chemistry(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/mask/gas(src)
- return
/obj/structure/closet/wardrobe/genetics_white
@@ -364,7 +330,6 @@
/obj/structure/closet/wardrobe/genetics_white/New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/geneticist(src)
new /obj/item/clothing/under/rank/geneticist(src)
new /obj/item/clothing/shoes/white(src)
@@ -375,7 +340,6 @@
new /obj/item/weapon/storage/backpack/genetics(src)
new /obj/item/weapon/storage/backpack/satchel_gen(src)
new /obj/item/weapon/storage/backpack/satchel_gen(src)
- return
/obj/structure/closet/wardrobe/virology_white
@@ -385,7 +349,6 @@
/obj/structure/closet/wardrobe/virology_white/New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/virologist(src)
new /obj/item/clothing/under/rank/virologist(src)
new /obj/item/clothing/shoes/white(src)
@@ -398,7 +361,6 @@
new /obj/item/weapon/storage/backpack/virology(src)
new /obj/item/weapon/storage/backpack/satchel_vir(src)
new /obj/item/weapon/storage/backpack/satchel_vir(src)
- return
/obj/structure/closet/wardrobe/medic_white
@@ -408,7 +370,6 @@
/obj/structure/closet/wardrobe/medic_white/New()
..()
- sleep(2)
new /obj/item/clothing/under/rank/medical(src)
new /obj/item/clothing/under/rank/medical(src)
new /obj/item/clothing/under/rank/medical/blue(src)
@@ -420,7 +381,6 @@
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
- return
/obj/structure/closet/wardrobe/grey
@@ -430,7 +390,6 @@
/obj/structure/closet/wardrobe/grey/New()
..()
- sleep(2)
new /obj/item/clothing/under/color/grey(src)
new /obj/item/clothing/under/color/grey(src)
new /obj/item/clothing/under/color/grey(src)
@@ -446,7 +405,6 @@
new /obj/item/clothing/under/assistantformal(src)
if(prob(40))
new /obj/item/clothing/under/assistantformal(src)
- return
/obj/structure/closet/wardrobe/mixed
@@ -456,7 +414,6 @@
/obj/structure/closet/wardrobe/mixed/New()
..()
- sleep(2)
new /obj/item/clothing/under/color/blue(src)
new /obj/item/clothing/under/color/yellow(src)
new /obj/item/clothing/under/color/green(src)
@@ -471,4 +428,3 @@
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/purple(src)
new /obj/item/clothing/shoes/leather(src)
- return
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index e91df4762df..c4129596892 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -212,7 +212,6 @@
return
src.add_fingerprint(user)
src.toggle(user)
- return
// Called when a crate is delivered by MULE at a location, for notifying purposes
/obj/structure/closet/crate/proc/notifyRecipient(var/destination)
@@ -317,7 +316,6 @@
src.broken = 1
update_icon()
to_chat(user, "You unlock \the [src].")
- return
/obj/structure/closet/crate/secure/emp_act(severity)
for(var/obj/O in src)
@@ -513,7 +511,6 @@
if(!M.anchored)
M.forceMove(src)
break
- return
/obj/structure/closet/crate/secure/large
name = "large crate"
@@ -541,7 +538,6 @@
if(!M.anchored)
M.forceMove(src)
break
- return
//fluff variant
/obj/structure/closet/crate/secure/large/reinforced
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index cbdce196c47..30dec267502 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -274,3 +274,12 @@
mineral = "metal"
walltype = "iron"
canSmoothWith = list(/obj/structure/falsewall/iron, /turf/simulated/wall/mineral/iron)
+
+/obj/structure/falsewall/abductor
+ name = "alien wall"
+ desc = "A wall with alien alloy plating."
+ icon = 'icons/turf/walls/abductor_wall.dmi'
+ icon_state = "abductor"
+ mineral = "abductor"
+ walltype = "abductor"
+ canSmoothWith = list(/obj/structure/falsewall/abductor, /turf/simulated/wall/mineral/abductor)
\ No newline at end of file
diff --git a/code/game/objects/structures/fullwindow.dm b/code/game/objects/structures/fullwindow.dm
index fda64fcb740..ac6e57a4135 100644
--- a/code/game/objects/structures/fullwindow.dm
+++ b/code/game/objects/structures/fullwindow.dm
@@ -89,12 +89,18 @@
health = 160
reinf = 1
- New()
- ..()
- color = null
+/obj/structure/window/full/shuttle/New()
+ ..()
+ color = null
- update_icon() //icon_state has to be set manually
- return
+/obj/structure/window/full/shuttle/update_icon() //icon_state has to be set manually
+ return
+
+/obj/structure/window/full/shuttle/shuttleRotate(rotation)
+ ..()
+ var/matrix/M = transform
+ M.Turn(rotation)
+ transform = M
/obj/structure/window/full/shuttle/dark
icon = 'icons/turf/shuttle.dmi'
diff --git a/code/game/objects/structures/spirit_board.dm b/code/game/objects/structures/spirit_board.dm
index cb29dec1926..25fe7f4a134 100644
--- a/code/game/objects/structures/spirit_board.dm
+++ b/code/game/objects/structures/spirit_board.dm
@@ -10,13 +10,6 @@
var/planchette = "A"
var/lastuser = null
-/obj/structure/spirit_board/proc/announce_to_ghosts()
- for(var/mob/dead/observer/O in player_list)
- if(O.client)
- var/area/A = get_area(src)
- if(A)
- to_chat(O, "\blue Someone has begun playing with a [src.name] in [A.name]!. (Teleport)")
-
/obj/structure/spirit_board/examine(mob/user)
..(user)
to_chat(user, "[initial(desc)] The planchette is sitting at \"[planchette]\".")
@@ -37,7 +30,7 @@
if(virgin)
virgin = 0
- announce_to_ghosts()
+ notify_ghosts("Someone has begun playing with a [src.name] in [get_area(src)]!", source = src)
planchette = input("Choose the letter.", "Seance!") in list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
add_logs(M, src, "picked a letter on", addition="which was \"[planchette]\".")
diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm
index f0d0544bd45..820103eb2d4 100644
--- a/code/game/shuttle_engines.dm
+++ b/code/game/shuttle_engines.dm
@@ -2,6 +2,12 @@
name = "shuttle"
icon = 'icons/turf/shuttle.dmi'
+/obj/structure/shuttle/shuttleRotate(rotation)
+ ..()
+ var/matrix/M = transform
+ M.Turn(rotation)
+ transform = M
+
/obj/structure/shuttle/window
name = "shuttle window"
icon = 'icons/obj/podwindows.dmi'
diff --git a/code/game/turfs/simulated/floor/mineral.dm b/code/game/turfs/simulated/floor/mineral.dm
new file mode 100644
index 00000000000..9ef70522ec4
--- /dev/null
+++ b/code/game/turfs/simulated/floor/mineral.dm
@@ -0,0 +1,48 @@
+/turf/simulated/floor/mineral
+ name = "mineral floor"
+ icon_state = ""
+ var/list/icons = list()
+
+
+
+/turf/simulated/floor/mineral/New()
+ ..()
+ broken_states = list("[initial(icon_state)]_dam")
+
+/turf/simulated/floor/mineral/update_icon()
+ if(!..())
+ return 0
+ if(!broken && !burnt)
+ if( !(icon_state in icons) )
+ icon_state = initial(icon_state)
+
+// ALIEN ALLOY
+/turf/simulated/floor/mineral/abductor
+ name = "alien floor"
+ icon_state = "alienpod1"
+ floor_tile = /obj/item/stack/tile/mineral/abductor
+ icons = list("alienpod1", "alienpod2", "alienpod3", "alienpod4", "alienpod5", "alienpod6", "alienpod7", "alienpod8", "alienpod9")
+
+/turf/simulated/floor/mineral/New()
+ ..()
+ icon_state = "alienpod[rand(1,9)]"
+
+/turf/simulated/floor/mineral/break_tile()
+ return //unbreakable
+
+/turf/simulated/floor/mineral/abductor/burn_tile()
+ return //unburnable
+
+/turf/simulated/floor/mineral/abductor/make_plating()
+ return ChangeTurf(/turf/simulated/floor/plating/abductor2)
+
+
+/turf/simulated/floor/plating/abductor2
+ name = "alien plating"
+ icon_state = "alienplating"
+
+/turf/simulated/floor/plating/abductor2/break_tile()
+ return //unbreakable
+
+/turf/simulated/floor/plating/abductor2/burn_tile()
+ return //unburnable
\ No newline at end of file
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index 2a239ea04ee..764ca6055d4 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -292,4 +292,12 @@
/turf/simulated/floor/plasteel/airless/New()
..()
- name = "floor"
\ No newline at end of file
+ name = "floor"
+
+/turf/simulated/floor/plating/abductor
+ name = "alien floor"
+ icon_state = "alienpod1"
+
+/turf/simulated/floor/plating/abductor/New()
+ ..()
+ icon_state = "alienpod[rand(1,9)]"
diff --git a/code/game/turfs/simulated/shuttle.dm b/code/game/turfs/simulated/shuttle.dm
index b8d22325d7a..a169d588dd2 100644
--- a/code/game/turfs/simulated/shuttle.dm
+++ b/code/game/turfs/simulated/shuttle.dm
@@ -36,7 +36,8 @@
T.transform = transform
//why don't shuttle walls habe smoothwall? now i gotta do rotation the dirty way
-/turf/simulated/shuttle/wall/shuttleRotate(rotation)
+/turf/simulated/shuttle/shuttleRotate(rotation)
+ ..()
var/matrix/M = transform
M.Turn(rotation)
transform = M
diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm
index fa12e8b0ec2..8a36ea5af6b 100644
--- a/code/game/turfs/simulated/walls_mineral.dm
+++ b/code/game/turfs/simulated/walls_mineral.dm
@@ -175,4 +175,14 @@
icon_state = "iron"
walltype = "iron"
mineral = "rods"
- canSmoothWith = list(/turf/simulated/wall/mineral/iron, /obj/structure/falsewall/iron)
\ No newline at end of file
+ canSmoothWith = list(/turf/simulated/wall/mineral/iron, /obj/structure/falsewall/iron)
+
+/turf/simulated/wall/mineral/abductor
+ name = "alien wall"
+ desc = "A wall with alien alloy plating."
+ icon = 'icons/turf/walls/abductor_wall.dmi'
+ icon_state = "abductor"
+ walltype = "abductor"
+ mineral = "abductor"
+ explosion_block = 3
+ canSmoothWith = list(/turf/simulated/wall/mineral/abductor, /obj/structure/falsewall/abductor)
\ No newline at end of file
diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm
index 70cb8bf9b38..b4e8842a840 100644
--- a/code/game/turfs/unsimulated/floor.dm
+++ b/code/game/turfs/unsimulated/floor.dm
@@ -27,4 +27,12 @@
/turf/unsimulated/floor/chasm/New()
spawn(1)
smooth_icon(src)
- smooth_icon_neighbors(src)
\ No newline at end of file
+ smooth_icon_neighbors(src)
+
+/turf/unsimulated/floor/abductor
+ name = "alien floor"
+ icon_state = "alienpod1"
+
+/turf/unsimulated/floor/abductor/New()
+ ..()
+ icon_state = "alienpod[rand(1,9)]"
\ No newline at end of file
diff --git a/code/game/turfs/unsimulated/walls.dm b/code/game/turfs/unsimulated/walls.dm
index 7926a864c49..571983f0966 100644
--- a/code/game/turfs/unsimulated/walls.dm
+++ b/code/game/turfs/unsimulated/walls.dm
@@ -23,4 +23,8 @@ turf/unsimulated/wall/splashscreen
layer = FLY_LAYER
/turf/unsimulated/wall/other
- icon_state = "r_wall"
\ No newline at end of file
+ icon_state = "r_wall"
+
+/turf/unsimulated/wall/abductor
+ icon_state = "alien1"
+ explosion_block = 50
\ No newline at end of file
diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm
index 95ef15b1922..8ed498be025 100644
--- a/code/game/vehicles/spacepods/spacepod.dm
+++ b/code/game/vehicles/spacepods/spacepod.dm
@@ -713,23 +713,18 @@
set category = "Spacepod"
set src = usr.loc
- var/list/pod_door_types = list(/obj/machinery/door/poddoor/two_tile_hor/, /obj/machinery/door/poddoor/two_tile_ver/, \
- /obj/machinery/door/poddoor/three_tile_hor, /obj/machinery/door/poddoor/three_tile_ver, \
- /obj/machinery/door/poddoor/four_tile_hor, /obj/machinery/door/poddoor/four_tile_ver)
-
if(CheckIfOccupant2(usr)) return
- for(var/obj/machinery/door/poddoor/P in orange(3,src))
- if(is_type_in_list(P,pod_door_types))
- var/mob/living/carbon/human/L = usr
- if(P.check_access(L.get_active_hand()) || P.check_access(L.wear_id))
- if(P.density)
- P.open()
- return 1
- else
- P.close()
- return 1
- to_chat(usr, "Access denied.")
- return
+ for(var/obj/machinery/door/poddoor/multi_tile/P in orange(3,src))
+ var/mob/living/carbon/human/L = usr
+ if(P.check_access(L.get_active_hand()) || P.check_access(L.wear_id))
+ if(P.density)
+ P.open()
+ return 1
+ else
+ P.close()
+ return 1
+ to_chat(usr, "Access denied.")
+ return
to_chat(usr, "You are not close to any pod doors.")
return
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 932fcef0807..6e4f58c5ab2 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -749,6 +749,10 @@ var/global/nologevent = 0
if (ticker.mode.config_tag == "changeling")
return 2
return 1
+ if(M.mind in ticker.mode.abductors)
+ if (ticker.mode.config_tag == "abduction")
+ return 2
+ return 1
if(isrobot(M))
var/mob/living/silicon/robot/R = M
if(R.emagged)
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index 30277f3a4ab..2a4a3e9cdeb 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -515,6 +515,12 @@
if(ticker.mode.shadowling_thralls.len)
dat += check_role_table("Shadowling Thralls", ticker.mode.shadowling_thralls, src)
+ if(ticker.mode.abductors.len)
+ dat += check_role_table("Abductors", ticker.mode.abductors, src)
+
+ if(ticker.mode.abductees.len)
+ dat += check_role_table("Abductees", ticker.mode.abductees, src)
+
if(ticker.mode.vampires.len)
dat += check_role_table("Vampires", ticker.mode.vampires, src)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 60e196c7982..f93e8c416bf 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -63,6 +63,10 @@
log_admin("[key_name(usr)] has spawned vox raiders.")
if(!src.makeVoxRaiders())
to_chat(usr, "\red Unfortunately there weren't enough candidates available.")
+ if("9")
+ log_admin("[key_name(usr)] has spawned an abductor team.")
+ if(!src.makeAbductorTeam())
+ to_chat(usr, "\red Unfortunately there weren't enough candidates available.")
else if(href_list["dbsearchckey"] || href_list["dbsearchadmin"] || href_list["dbsearchip"] || href_list["dbsearchcid"] || href_list["dbsearchbantype"])
var/adminckey = href_list["dbsearchadmin"]
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index ddc3b4456e6..4793edd37c8 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -682,7 +682,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/weapon/cloaking_device(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/proto(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_l_store)
@@ -814,7 +813,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wcoat(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/cloaking_device(M), slot_r_store)
var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = new(M)
for(var/obj/item/briefcase_item in sec_briefcase)
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index 022cd29105a..f2d76051a37 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -21,6 +21,7 @@ client/proc/one_click_antag()
Make Wizard (Requires Ghosts) Make Vampires Make Vox Raiders (Requires Ghosts)
+ Make Abductor Team (Requires Ghosts)
"}
usr << browse(dat, "window=oneclickantag;size=400x400")
return
@@ -308,8 +309,10 @@ client/proc/one_click_antag()
return 1
-
-
+//Abductors
+/datum/admins/proc/makeAbductorTeam()
+ new /datum/event/abductor
+ return 1
/datum/admins/proc/makeAliens()
alien_infestation(3)
@@ -396,7 +399,7 @@ client/proc/one_click_antag()
//First we spawn a dude.
var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned.
- var/datum/preferences/A = new()
+ var/datum/preferences/A = new(G_found.client)
A.copy_to(new_character)
new_character.dna.ready_dna(new_character)
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index d6d6352f333..7a5835a3f9d 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -110,7 +110,7 @@
if(href_list["send"])
spawn( 0 )
- signal()
+ signal()
if(usr)
attack_self(usr)
@@ -169,6 +169,7 @@
desc = "The neutralized core of an anomaly. It'd probably be valuable for research."
icon_state = "anomaly core"
item_state = "electronic"
+ receiving = 1
/obj/item/device/assembly/signaler/anomaly/receive_signal(datum/signal/signal)
..()
diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm
index fa6d0015399..30e4793c747 100644
--- a/code/modules/client/client defines.dm
+++ b/code/modules/client/client defines.dm
@@ -81,4 +81,7 @@
control_freak = CONTROL_FREAK_ALL | CONTROL_FREAK_SKIN | CONTROL_FREAK_MACROS
- var/datum/click_intercept/click_intercept = null
\ No newline at end of file
+ var/datum/click_intercept/click_intercept = null
+
+ //datum that controls the displaying and hiding of tooltips
+ var/datum/tooltip/tooltips
\ No newline at end of file
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index 31db10045f0..57b7487cbe5 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -317,6 +317,10 @@
to_chat(src, "Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you.")
+ //This is down here because of the browse() calls in tooltip/New()
+ if(!tooltips)
+ tooltips = new /datum/tooltip(src)
+
//////////////
//DISCONNECT//
//////////////
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index ccd7eda05e5..e458ebb7a14 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -25,6 +25,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
ROLE_NINJA = 21,
ROLE_MUTINEER = 21,
ROLE_MALF = 30,
+ ROLE_ABDUCTOR = 30,
)
/proc/player_old_enough_antag(client/C, role)
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index 066c4893f73..c9a8cbe13cb 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -190,112 +190,217 @@
piece.flags &= ~(STOPSPRESSUREDMAGE|AIRTIGHT)
update_icon(1)
-/obj/item/weapon/rig/proc/toggle_seals(var/mob/living/carbon/human/M, var/mob/living/user, var/instant)
-
- if(sealing) return
-
- if(!check_power_cost(M, 1)) //costs tiny amount of power to unseal/seal
+/obj/item/weapon/rig/proc/seal(mob/living/user)
+ if(sealing)
return 0
- deploy(M, instant)
+ if(!wearer || !user)
+ return
- var/seal_target = (flags & NODROP)
- var/failed_to_seal
+ var/sealed = (flags & NODROP)
+ if(sealed)
+ to_chat(user, "\The [src] is already sealed!")
+ return 0
- flags |= NODROP // No removing the suit while unsealing.
- sealing = 1
+ if(!check_power_cost(user, 1)) //need power to seal the suit
+ return 0
- if(!seal_target && !suit_is_deployed())
- M.visible_message("[M]'s suit flashes an error light.","Your suit flashes an error light. It can't function properly without being fully deployed.")
- failed_to_seal = 1
+ var/failed_to_seal = FALSE
+
+ if(!suit_is_deployed())
+ to_chat(user, "\The [src] cannot seal, as it is not fully deployed!")
+ return 0
+
+ flags |= NODROP
+ sealing = TRUE
+
+ to_chat(user, "\The [src] begins to tighten it's seals.")
+ wearer.visible_message("\The [wearer]'s suit emits a quiet hum as it begins to tighten it's seals.",
+ "With a quiet hum, your suit begins to seal.")
+
+ if(seal_delay && !do_after(user, seal_delay, target = wearer))
+ to_chat(user, "You must remain still to seal \the [src]!")
+ failed_to_seal = TRUE
if(!failed_to_seal)
+ deploy(user)
- if(!instant)
- M.visible_message("[M]'s suit emits a quiet hum as it begins to adjust its seals.","With a quiet hum, the suit begins running checks and adjusting components.")
- if(seal_delay && !do_after(user, seal_delay, target = M))
- if(user)
- to_chat(user, "You must remain still while the suit is adjusting the components.")
- failed_to_seal = 1
+ var/list/pieces_data = list(list(wearer.shoes, boots, "boots", boot_type),
+ list(wearer.gloves, gloves, "gloves", glove_type),
+ list(wearer.head, helmet, "helmet", helm_type),
+ list(wearer.wear_suit, chest, "chest", chest_type))
- if(!M)
- failed_to_seal = 1
- else
- for(var/list/piece_data in list(list(M.shoes,boots,"boots",boot_type),list(M.gloves,gloves,"gloves",glove_type),list(M.head,helmet,"helmet",helm_type),list(M.wear_suit,chest,"chest",chest_type)))
+ for(var/list/piece_data in pieces_data)
+ var/obj/item/user_piece = piece_data[1]
+ var/obj/item/correct_piece = piece_data[2]
+ var/msg_type = piece_data[3]
+ var/piece_type = piece_data[4]
- var/obj/item/piece = piece_data[1]
- var/obj/item/compare_piece = piece_data[2]
- var/msg_type = piece_data[3]
- var/piece_type = piece_data[4]
+ if(!user_piece || !piece_type)
+ continue
- if(!piece || !piece_type)
- continue
+ if(user_piece != correct_piece)
+ to_chat(user, "\The [user_piece] is blocking \the [src] from deploying.")
+ failed_to_seal = TRUE
- if(!istype(M) || !istype(piece) || !istype(compare_piece) || !msg_type)
- if(M)
- to_chat(M, "You must remain still while the suit is adjusting the components.")
- failed_to_seal = 1
- break
+ if(seal_delay && !do_after(user, seal_delay, needhand = 0, target = wearer))
+ to_chat(user, "You must remain still to seal \the [src]!")
+ failed_to_seal = TRUE
- if(!failed_to_seal && M.back == src && piece == compare_piece)
+ if(failed_to_seal)
+ break
- if(seal_delay && !instant && !do_after(user, seal_delay, needhand = 0, target = M))
- failed_to_seal = 1
+ correct_piece.icon_state = "[initial(icon_state)]_sealed"
+ switch(msg_type)
+ if("boots")
+ to_chat(wearer, "\The [correct_piece] seal around your feet.")
+ if(user != wearer)
+ to_chat(user, "\The [correct_piece] has been sealed.")
+ wearer.update_inv_shoes()
+ if("gloves")
+ to_chat(wearer, "\The [correct_piece] tighten around your fingers and wrists.")
+ if(user != wearer)
+ to_chat(user, "\The [correct_piece] has been sealed.")
+ wearer.update_inv_gloves()
+ if("chest")
+ to_chat(wearer, "\The [correct_piece] cinches tight again your chest.")
+ if(user != wearer)
+ to_chat(user, "\The [correct_piece] has been sealed.")
+ wearer.update_inv_wear_suit()
+ if("helmet")
+ to_chat(wearer, "\The [correct_piece] hisses closed.")
+ if(user != wearer)
+ to_chat(user, "\The [correct_piece] has been sealed.")
+ wearer.update_inv_head()
+ if(helmet)
+ helmet.update_light(wearer)
- piece.icon_state = "[initial(icon_state)][!seal_target ? "_sealed" : ""]"
- switch(msg_type)
- if("boots")
- to_chat(M, "\The [piece] [!seal_target ? "seal around your feet" : "relax their grip on your legs"].")
- M.update_inv_shoes()
- if("gloves")
- to_chat(M, "\The [piece] [!seal_target ? "tighten around your fingers and wrists" : "become loose around your fingers"].")
- M.update_inv_gloves()
- if("chest")
- to_chat(M, "\The [piece] [!seal_target ? "cinches tight again your chest" : "releases your chest"].")
- M.update_inv_wear_suit()
- if("helmet")
- to_chat(M, "\The [piece] hisses [!seal_target ? "closed" : "open"].")
- M.update_inv_head()
- if(helmet)
- helmet.update_light(wearer)
+ correct_piece.armor["bio"] = 100
- //sealed pieces become airtight, protecting against diseases
- if (!seal_target)
- piece.armor["bio"] = 100
- else
- piece.armor["bio"] = src.armor["bio"]
-
- else
- failed_to_seal = 1
-
- if((M && !(istype(M) && M.back == src) && !istype(M,/mob/living/silicon)) || (!seal_target && !suit_is_deployed()))
- failed_to_seal = 1
-
- sealing = null
+ sealing = FALSE
if(failed_to_seal)
- for(var/obj/item/piece in list(helmet,boots,gloves,chest))
- if(!piece) continue
- piece.icon_state = "[initial(icon_state)][!seal_target ? "" : "_sealed"]"
- if(seal_target)
- flags |= NODROP
- else
- flags &= ~NODROP
+ for(var/obj/item/piece in list(helmet, boots, gloves, chest))
+ if(!piece)
+ continue
+ piece.icon_state = "[initial(icon_state)]"
+ flags &= ~NODROP
if(airtight)
update_component_sealed()
update_icon(1)
return 0
- // Success!
- if(seal_target)
- flags &= ~NODROP
- else
- flags |= NODROP
- to_chat(M, "Your entire suit [!(flags & NODROP) ? "loosens as the components relax" : "tightens around you as the components lock into place"].")
+ if(user != wearer)
+ to_chat(user, "\The [src] has been loosened.")
+ to_chat(wearer, "Your entire suit tightens around you as the components lock into place.")
+ if(airtight)
+ update_component_sealed()
+ update_icon(1)
+
+/obj/item/weapon/rig/proc/unseal(mob/living/user)
+ if(sealing)
+ return 0
+
+ if(!wearer || !user)
+ return
+
+ var/sealed = (flags & NODROP)
+ if(!sealed)
+ to_chat(user, "\The [src] is already unsealed!")
+ return 0
+
+ sealing = TRUE
+
+ var/failed_to_seal = FALSE
+
+ if(!suit_is_deployed())
+ to_chat(user, "\The [src] cannot unseal, as it is not fully deployed!")
+ failed_to_seal = TRUE
+
+ if(!failed_to_seal)
+ if(user != wearer)
+ to_chat(user, "\The [src] begins to loosen it's seals.")
+ wearer.visible_message("\The [wearer]'s suit emits a quiet hum as it begins to loosen it's seals.",
+ "With a quiet hum, your suit begins to unseal.")
+
+ if(seal_delay && !do_after(user, seal_delay, target = wearer))
+ to_chat(user, "You must remain still to unseal \the [src]!")
+ failed_to_seal = TRUE
+
+ if(!failed_to_seal)
+ var/list/pieces_data = list(list(wearer.shoes, boots, "boots", boot_type),
+ list(wearer.gloves, gloves, "gloves", glove_type),
+ list(wearer.head, helmet, "helmet", helm_type),
+ list(wearer.wear_suit, chest, "chest", chest_type))
+
+ for(var/list/piece_data in pieces_data)
+ var/obj/item/user_piece = piece_data[1]
+ var/obj/item/correct_piece = piece_data[2]
+ var/msg_type = piece_data[3]
+ var/piece_type = piece_data[4]
+
+ if(!correct_piece || !piece_type)
+ continue
+
+ if(user_piece != correct_piece)
+ to_chat(user, "\The [user_piece] is blocking \the [src] from deploying.")
+ failed_to_seal = TRUE
+
+ if(seal_delay && !do_after(user, seal_delay, needhand = 0, target = wearer))
+ to_chat(user, "You must remain still to unseal \the [src]!")
+ failed_to_seal = TRUE
+
+ if(failed_to_seal)
+ break
+
+ correct_piece.icon_state = "[initial(icon_state)]"
+ switch(msg_type)
+ if("boots")
+ to_chat(wearer, "\The [correct_piece] relax their grip on your legs.")
+ if(user != wearer)
+ to_chat(user, "\The [correct_piece] has been unsealed.")
+ wearer.update_inv_shoes()
+ if("gloves")
+ to_chat(wearer, "\The [correct_piece] become loose around your fingers.")
+ if(user != wearer)
+ to_chat(user, "\The [correct_piece] has been unsealed.")
+ wearer.update_inv_gloves()
+ if("chest")
+ to_chat(wearer, "\The [correct_piece] releases your chest.")
+ if(user != wearer)
+ to_chat(user, "\The [correct_piece] has been unsealed.")
+ wearer.update_inv_wear_suit()
+ if("helmet")
+ to_chat(wearer, "\The [correct_piece] hisses open.")
+ if(user != wearer)
+ to_chat(user, "\The [correct_piece] has been unsealed.")
+ wearer.update_inv_head()
+ if(helmet)
+ helmet.update_light(wearer)
+
+ correct_piece.armor["bio"] = armor["bio"]
+
+ sealing = FALSE
+
+ if(failed_to_seal)
+ for(var/obj/item/piece in list(helmet, boots, gloves, chest))
+ if(!piece)
+ continue
+ piece.icon_state = "[initial(icon_state)]_sealed"
+ if(airtight)
+ update_component_sealed()
+ update_icon(1)
+ return 0
+
+ if(user != wearer)
+ to_chat(user, "\The [src] has been unsealed.")
+ to_chat(wearer, "Your entire suit loosens as the components relax.")
+
+ flags &= ~NODROP
+
+ for(var/obj/item/rig_module/module in installed_modules)
+ module.deactivate()
- if(!(flags & NODROP))
- for(var/obj/item/rig_module/module in installed_modules)
- module.deactivate()
if(airtight)
update_component_sealed()
update_icon(1)
@@ -310,7 +415,6 @@
piece.flags |= AIRTIGHT
/obj/item/weapon/rig/process()
-
// If we've lost any parts, grab them back.
var/mob/living/M
for(var/obj/item/piece in list(gloves,boots,helmet,chest))
@@ -367,7 +471,6 @@
cell.use(module.process()*10)
/obj/item/weapon/rig/proc/check_power_cost(var/mob/living/user, var/cost, var/use_unconcious, var/obj/item/rig_module/mod, var/user_is_ai)
-
if(!istype(user))
return 0
@@ -524,7 +627,6 @@
return 1
-//TODO: Fix Topic vulnerabilities for malfunction and AI override.
/obj/item/weapon/rig/Topic(href,href_list)
if(!check_suit_access(usr))
return 0
@@ -532,11 +634,13 @@
if(href_list["toggle_piece"])
if(ishuman(usr) && (usr.stat || usr.stunned || usr.lying))
return 0
- toggle_piece(href_list["toggle_piece"], wearer, user = usr)
+ toggle_piece(href_list["toggle_piece"], usr)
else if(href_list["toggle_seals"])
- toggle_seals(wearer, usr)
+ if(flags & NODROP)
+ unseal(usr)
+ else
+ seal(usr)
else if(href_list["interact_module"])
-
var/module_index = text2num(href_list["interact_module"])
if(module_index > 0 && module_index <= installed_modules.len)
@@ -559,7 +663,7 @@
locked = !locked
usr.set_machine(src)
- src.add_fingerprint(usr)
+ add_fingerprint(usr)
return 0
/obj/item/weapon/rig/proc/notify_ai(var/message)
@@ -570,8 +674,11 @@
if(ai && ai.client && !ai.stat)
to_chat(ai, "[message]")
-/obj/item/weapon/rig/equipped(mob/living/carbon/human/M)
+/obj/item/weapon/rig/equipped(mob/living/carbon/human/M, slot)
..()
+ if(!istype(M) || slot != slot_back)
+ return //we don't care about picking up/nonhumans
+
spawn(1) //equipped() is called BEFORE the item is actually set as the slot
if(seal_delay > 0 && istype(M) && M.back == src)
@@ -588,115 +695,108 @@
wearer.wearing_rig = src
update_icon()
-/obj/item/weapon/rig/proc/toggle_piece(var/piece, var/mob/living/carbon/human/H, var/deploy_mode, var/force, var/mob/living/user)
+/obj/item/weapon/rig/proc/toggle_piece(var/piece, var/mob/living/user, var/deploy_mode, var/force)
+ if(!istype(wearer) || wearer.back != src)
+ if(force) //can only force retracting sorry
+ for(var/obj/item/uneq_piece in list(helmet, gloves, boots, chest))
+ if(uneq_piece)
+ if(isliving(uneq_piece.loc))
+ var/mob/living/L = uneq_piece.loc
+ L.unEquip(uneq_piece, 1)
+ uneq_piece.flags &= ~NODROP
+ uneq_piece.forceMove(src)
+ return 0
- if(!force) //forces the hardsuit to ignore most checks, as the suit being dropped should retract all pieces regardless of power status
- if(sealing || !cell || !cell.charge) //or else you have issues with shit getting stuck
- return
+ if(sealing || !cell || !cell.charge)
+ return 0
- if(!istype(wearer) || !wearer.back == src)
- return
-
- if(usr == wearer && (usr.stat||usr.paralysis||usr.stunned)) // If the usr isn't wearing the suit it's probably an AI.
- return
+ if(user == wearer && user.incapacitated()) // If the user isn't wearing the suit it's probably an AI.
+ return 0
var/obj/item/check_slot
var/equip_to
var/obj/item/use_obj
- if(!H)
- return
-
switch(piece)
if("helmet")
equip_to = slot_head
use_obj = helmet
- check_slot = H.head
+ check_slot = wearer.head
if("gauntlets")
equip_to = slot_gloves
use_obj = gloves
- check_slot = H.gloves
+ check_slot = wearer.gloves
if("boots")
equip_to = slot_shoes
use_obj = boots
- check_slot = H.shoes
+ check_slot = wearer.shoes
if("chest")
equip_to = slot_wear_suit
use_obj = chest
- check_slot = H.wear_suit
+ check_slot = wearer.wear_suit
if(use_obj)
- if(check_slot == use_obj && deploy_mode != ONLY_DEPLOY)
-
- var/mob/living/carbon/human/holder
-
- if(use_obj)
- holder = use_obj.loc
- if(istype(holder))
- if(use_obj && check_slot == use_obj)
- to_chat(H, "Your [use_obj.name] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.")
- use_obj.flags &= ~NODROP
- holder.unEquip(use_obj, 1)
- use_obj.forceMove(src)
-
- else if (deploy_mode != ONLY_RETRACT)
- if(check_slot)
- if(check_slot != use_obj)
- to_chat(H, "You are unable to deploy \the [piece] as \the [check_slot] [check_slot.gender == PLURAL ? "are" : "is"] in the way.")
+ if(check_slot == use_obj && deploy_mode != ONLY_DEPLOY) //user is wearing it, retract it if not forced to deploy
+ if((flags & NODROP) && equip_to != slot_head && !force) //you can only retract the helmet if the suit isn't unsealed
+ to_chat(user, "You can't retract \the [use_obj] while the suit is sealed!")
return
+
+ var/mob/living/to_strip
+ if(wearer)
+ to_strip = wearer
+ else if(isliving(use_obj.loc))
+ to_strip = use_obj.loc
+
+ if(to_strip)
+ to_strip.unEquip(use_obj, 1)
+
+ use_obj.flags &= ~NODROP
+ use_obj.forceMove(src)
+ if(wearer)
+ to_chat(wearer, "Your [use_obj] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.")
+
+ else if(deploy_mode != ONLY_RETRACT)
+ if(check_slot && check_slot != use_obj)
+ to_chat(wearer, "You are unable to deploy \the [piece] as \the [check_slot] [check_slot.gender == PLURAL ? "are" : "is"] in the way.")
+ return
+ use_obj.forceMove(wearer)
+ use_obj.flags &= ~NODROP
+ if(!wearer.equip_to_slot_if_possible(use_obj, equip_to, 0, 1))
+ use_obj.forceMove(src)
else
- use_obj.forceMove(H)
- use_obj.flags &= ~NODROP
- if(!H.equip_to_slot_if_possible(use_obj, equip_to, 0, 1))
- use_obj.forceMove(src)
- else
- to_chat(H, "Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.")
- use_obj.flags |= NODROP
+ if(wearer)
+ to_chat(wearer, "Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.")
+ use_obj.flags |= NODROP
if(piece == "helmet" && helmet)
- helmet.update_light(H)
+ helmet.update_light(wearer)
-/obj/item/weapon/rig/proc/deploy(mob/M,var/sealed, mob/user)
+/obj/item/weapon/rig/proc/deploy(mob/user)
+ if(!wearer || !user)
+ return 0
- var/mob/living/carbon/human/H = M
+ if(flags & NODROP)
+ if(wearer.head && wearer.head != helmet)
+ to_chat(user, "\The [wearer.head] is blocking \the [src] from deploying!")
+ return 0
+ if(wearer.gloves && wearer.gloves != gloves)
+ to_chat(user, "\The [wearer.gloves] is preventing \the [src] from deploying!")
+ return 0
+ if(wearer.shoes && wearer.shoes != boots)
+ to_chat(user, "\The [wearer.shoes] is preventing \the [src] from deploying!")
+ return 0
+ if(wearer.wear_suit && wearer.wear_suit != chest)
+ to_chat(user, "\The [wearer.wear_suit] is preventing \the [src] from deploying!")
+ return 0
- if(!H || !istype(H)) return
- if(H.back != src)
- return
-
- if(sealed)
- if(H.head)
- var/obj/item/garbage = H.head
- H.unEquip(garbage)
- H.head = null
- qdel(garbage)
-
- if(H.gloves)
- var/obj/item/garbage = H.gloves
- H.unEquip(garbage)
- H.gloves = null
- qdel(garbage)
-
- if(H.shoes)
- var/obj/item/garbage = H.shoes
- H.unEquip(garbage)
- H.shoes = null
- qdel(garbage)
-
- if(H.wear_suit)
- var/obj/item/garbage = H.wear_suit
- H.unEquip(garbage)
- H.wear_suit = null
- qdel(garbage)
-
- for(var/piece in list("helmet","gauntlets","chest","boots"))
- toggle_piece(piece, wearer, ONLY_DEPLOY, user = user)
+ for(var/piece in list("helmet", "gauntlets", "chest", "boots"))
+ toggle_piece(piece, user, ONLY_DEPLOY)
/obj/item/weapon/rig/dropped(var/mob/user)
..()
for(var/piece in list("helmet","gauntlets","chest","boots"))
- toggle_piece(piece, wearer, ONLY_RETRACT, 1, user = user)
+ toggle_piece(piece, user, ONLY_RETRACT, 1)
if(wearer)
wearer.wearing_rig = null
wearer = null
diff --git a/code/modules/clothing/spacesuits/rig/rig_verbs.dm b/code/modules/clothing/spacesuits/rig/rig_verbs.dm
index f4769eddf0b..5214ea919f6 100644
--- a/code/modules/clothing/spacesuits/rig/rig_verbs.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_verbs.dm
@@ -1,6 +1,5 @@
// Interface for humans.
/obj/item/weapon/rig/verb/hardsuit_interface()
-
set name = "Open Hardsuit Interface"
set desc = "Open the hardsuit system interface."
set category = "Hardsuit"
@@ -10,7 +9,6 @@
ui_interact(usr)
/obj/item/weapon/rig/verb/toggle_vision()
-
set name = "Toggle Visor"
set desc = "Turns your rig visor off or on."
set category = "Hardsuit"
@@ -44,7 +42,6 @@
visor.deactivate()
/obj/item/weapon/rig/proc/toggle_helmet()
-
set name = "Toggle Helmet"
set desc = "Deploys or retracts your helmet."
set category = "Hardsuit"
@@ -61,10 +58,9 @@
if(M.incapacitated())
return
- toggle_piece("helmet",wearer, user = usr)
+ toggle_piece("helmet", usr)
/obj/item/weapon/rig/proc/toggle_chest()
-
set name = "Toggle Chestpiece"
set desc = "Deploys or retracts your chestpiece."
set category = "Hardsuit"
@@ -77,10 +73,9 @@
if(M.incapacitated())
return
- toggle_piece("chest",wearer, user = usr)
+ toggle_piece("chest", usr)
/obj/item/weapon/rig/proc/toggle_gauntlets()
-
set name = "Toggle Gauntlets"
set desc = "Deploys or retracts your gauntlets."
set category = "Hardsuit"
@@ -97,10 +92,9 @@
if(M.incapacitated())
return
- toggle_piece("gauntlets",wearer, user = usr)
+ toggle_piece("gauntlets", usr)
/obj/item/weapon/rig/proc/toggle_boots()
-
set name = "Toggle Boots"
set desc = "Deploys or retracts your boots."
set category = "Hardsuit"
@@ -117,10 +111,9 @@
if(M.incapacitated())
return
- toggle_piece("boots",wearer, user = usr)
+ toggle_piece("boots", usr)
/obj/item/weapon/rig/verb/deploy_suit()
-
set name = "Deploy Hardsuit"
set desc = "Deploys helmet, gloves and boots."
set category = "Hardsuit"
@@ -143,7 +136,6 @@
deploy(wearer, usr)
/obj/item/weapon/rig/verb/toggle_seals_verb()
-
set name = "Toggle Hardsuit"
set desc = "Activates or deactivates your rig."
set category = "Hardsuit"
@@ -160,10 +152,12 @@
if(M.incapacitated())
return
- toggle_seals(wearer)
+ if(flags & NODROP)
+ unseal(usr)
+ else
+ seal(usr)
/obj/item/weapon/rig/verb/switch_vision_mode()
-
set name = "Switch Vision Mode"
set desc = "Switches between available vision modes."
set category = "Hardsuit"
@@ -197,7 +191,6 @@
visor.engage()
/obj/item/weapon/rig/verb/alter_voice()
-
set name = "Configure Voice Synthesiser"
set desc = "Toggles or configures your voice synthesizer."
set category = "Hardsuit"
@@ -225,7 +218,6 @@
speech.engage()
/obj/item/weapon/rig/verb/select_module()
-
set name = "Select Module"
set desc = "Selects a module as your primary system."
set category = "Hardsuit"
@@ -265,7 +257,6 @@
to_chat(usr, "Primary system is now: [selected_module.interface_name].")
/obj/item/weapon/rig/verb/toggle_module()
-
set name = "Toggle Module"
set desc = "Toggle a system module."
set category = "Hardsuit"
@@ -307,7 +298,6 @@
module.activate()
/obj/item/weapon/rig/verb/engage_module()
-
set name = "Engage Module"
set desc = "Engages a system module."
set category = "Hardsuit"
diff --git a/code/modules/events/abductor.dm b/code/modules/events/abductor.dm
new file mode 100644
index 00000000000..18d75f3ef30
--- /dev/null
+++ b/code/modules/events/abductor.dm
@@ -0,0 +1,52 @@
+/datum/event/abductor
+
+/datum/event/abductor/start()
+ //spawn abductor team
+ processing = 0 //so it won't fire again in next tick
+ if(!makeAbductorTeam())
+ message_admins("Abductor event failed to find players. Retrying in 30s.")
+ spawn(300)
+ makeAbductorTeam()
+
+/datum/event/abductor/proc/makeAbductorTeam()
+ var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for an Abductor Team?", ROLE_ABDUCTOR, 1)
+
+ if(candidates.len >= 2)
+ //Oh god why we can't have static functions
+ var/number = ticker.mode.abductor_teams + 1
+
+ var/datum/game_mode/abduction/temp
+ if(ticker.mode.config_tag == "abduction")
+ temp = ticker.mode
+ else
+ temp = new
+
+ var/agent_mind = pick(candidates)
+ candidates -= agent_mind
+ var/scientist_mind = pick(candidates)
+
+ var/mob/living/carbon/human/agent=makeBody(agent_mind)
+ var/mob/living/carbon/human/scientist=makeBody(scientist_mind)
+
+ agent_mind = agent.mind
+ scientist_mind = scientist.mind
+
+ temp.scientists.len = number
+ temp.agents.len = number
+ temp.abductors.len = 2*number
+ temp.team_objectives.len = number
+ temp.team_names.len = number
+ temp.scientists[number] = scientist_mind
+ temp.agents[number] = agent_mind
+ temp.abductors |= list(agent_mind,scientist_mind)
+ temp.make_abductor_team(number,preset_scientist=scientist_mind,preset_agent=agent_mind)
+ temp.post_setup_team(number)
+
+ ticker.mode.abductor_teams++
+
+ if(ticker.mode.config_tag != "abduction")
+ ticker.mode.abductors |= temp.abductors
+ processing = 1 //So it will get gc'd
+ return 1
+ else
+ return 0
\ No newline at end of file
diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm
index d5ad22e2afd..0f5c43059e8 100644
--- a/code/modules/events/event.dm
+++ b/code/modules/events/event.dm
@@ -48,6 +48,7 @@
return 0*/
/datum/event //NOTE: Times are measured in master controller ticks!
+ var/processing = 1
var/startWhen = 0 //When in the lifetime to call start().
var/announceWhen = 0 //When in the lifetime to call announce().
var/endWhen = 0 //When in the lifetime the event should end.
@@ -105,6 +106,9 @@
//Do not override this proc, instead use the appropiate procs.
//This proc will handle the calls to the appropiate procs.
/datum/event/proc/process()
+ if(!processing)
+ return
+
if(activeFor > startWhen && activeFor < endWhen || noAutoEnd)
tick()
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index 8d16fd5a4cb..304abd3cd13 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -178,10 +178,11 @@ var/list/event_last_fired = list()
severity = EVENT_LEVEL_MAJOR
available_events = list(
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 1320),
- new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 3), 1),
- //new /datum/event_meta(EVENT_LEVEL_MAJOR, "Containment Breach", /datum/event/prison_break/station, 0, list(ASSIGNMENT_ANY = 5)),
- new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 0, list(ASSIGNMENT_ENGINEER = 30), 1),
- new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 3), 1),
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 3), 1),
+ //new /datum/event_meta(EVENT_LEVEL_MAJOR, "Containment Breach", /datum/event/prison_break/station, 0, list(ASSIGNMENT_ANY = 5)),
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 0, list(ASSIGNMENT_ENGINEER = 30), 1),
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 3), 1),
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Abductor Visit", /datum/event/abductor, 80, is_one_shot = 1),
new /datum/event_meta/alien(EVENT_LEVEL_MAJOR, "Alien Infestation", /datum/event/alien_infestation, 0, list(ASSIGNMENT_SECURITY = 30), 1),
)
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 23c15a258d7..6b770361407 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -334,8 +334,7 @@
var/turf/simulated/location = get_turf(M)
if(istype(location)) location.add_blood_floor(M)
if("fire")
- if (!(RESIST_COLD in M.mutations))
- M.take_organ_damage(0, force)
+ M.take_organ_damage(0, force)
M.updatehealth()
if(seed && seed.get_trait(TRAIT_CARNIVOROUS))
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index 2974fcf0264..f1552f14bc6 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -121,7 +121,7 @@ var/global/list/library_section_names = list("Any", "Fiction", "Non-Fiction", "A
var/sqlid = text2num(id)
if(!sqlid)
return
- var/DBQuery/query = dbcon.NewQuery("SELECT id, author, title, category, ckey, flagged FROM [format_table_name("library")] WHERE id=[sqlid]")
+ var/DBQuery/query = dbcon.NewQuery("SELECT id, author, title, category, content, ckey, flagged FROM [format_table_name("library")] WHERE id=[sqlid]")
query.Execute()
var/list/results=list()
@@ -132,8 +132,9 @@ var/global/list/library_section_names = list("Any", "Fiction", "Non-Fiction", "A
"author" =query.item[2],
"title" =query.item[3],
"category"=query.item[4],
- "ckey" =query.item[5],
- "flagged" =query.item[6]
+ "content" =query.item[5],
+ "ckey" =query.item[6],
+ "flagged" =query.item[7]
))
results += CB
cached_books["[id]"]=CB
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index e2ff03a506e..41b994b31b6 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -1,11 +1,16 @@
/**********************Mineral deposits**************************/
-var/global/list/rockTurfEdgeCache
#define NORTH_EDGING "north"
#define SOUTH_EDGING "south"
#define EAST_EDGING "east"
#define WEST_EDGING "west"
+var/global/list/rockTurfEdgeCache = list(
+ NORTH_EDGING = image('icons/turf/mining.dmi', "rock_side_n", layer = 6),
+ SOUTH_EDGING = image('icons/turf/mining.dmi', "rock_side_s"),
+ EAST_EDGING = image('icons/turf/mining.dmi', "rock_side_e", layer = 6),
+ WEST_EDGING = image('icons/turf/mining.dmi', "rock_side_w", layer = 6))
+
/turf/simulated/mineral //wall piece
name = "Rock"
icon = 'icons/turf/mining.dmi'
@@ -50,32 +55,8 @@ var/global/list/rockTurfEdgeCache
return
/turf/simulated/mineral/New()
- if(!rockTurfEdgeCache || !rockTurfEdgeCache.len)
- rockTurfEdgeCache = list()
- rockTurfEdgeCache.len = 4
- rockTurfEdgeCache[NORTH_EDGING] = image('icons/turf/mining.dmi', "rock_side_n", layer = 6)
- rockTurfEdgeCache[SOUTH_EDGING] = image('icons/turf/mining.dmi', "rock_side_s")
- rockTurfEdgeCache[EAST_EDGING] = image('icons/turf/mining.dmi', "rock_side_e", layer = 6)
- rockTurfEdgeCache[WEST_EDGING] = image('icons/turf/mining.dmi', "rock_side_w", layer = 6)
-
- spawn(1)
- var/turf/T
- if((istype(get_step(src, NORTH), /turf/simulated/floor)) || (istype(get_step(src, NORTH), /turf/space)))
- T = get_step(src, NORTH)
- if (T)
- T.overlays += rockTurfEdgeCache[SOUTH_EDGING]
- if((istype(get_step(src, SOUTH), /turf/simulated/floor)) || (istype(get_step(src, SOUTH), /turf/space)))
- T = get_step(src, SOUTH)
- if (T)
- T.overlays += rockTurfEdgeCache[NORTH_EDGING]
- if((istype(get_step(src, EAST), /turf/simulated/floor)) || (istype(get_step(src, EAST), /turf/space)))
- T = get_step(src, EAST)
- if (T)
- T.overlays += rockTurfEdgeCache[WEST_EDGING]
- if((istype(get_step(src, WEST), /turf/simulated/floor)) || (istype(get_step(src, WEST), /turf/space)))
- T = get_step(src, WEST)
- if (T)
- T.overlays += rockTurfEdgeCache[EAST_EDGING]
+ ..()
+ mineral_turfs += src
if (mineralType && mineralAmt && spread && spreadChance)
for(var/dir in cardinal)
@@ -85,7 +66,6 @@ var/global/list/rockTurfEdgeCache
Spread(T)
HideRock()
- return
/turf/simulated/mineral/proc/HideRock()
if(hidden)
@@ -96,6 +76,33 @@ var/global/list/rockTurfEdgeCache
/turf/simulated/mineral/proc/Spread(var/turf/T)
new src.type(T)
+/hook/startup/proc/add_mineral_edges()
+ var/watch = start_watch()
+ log_startup_progress("Reticulating splines...")
+ for(var/turf/simulated/mineral/M in mineral_turfs)
+ M.add_edges()
+ log_startup_progress(" Splines reticulated in [stop_watch(watch)]s.")
+ return 1
+
+/turf/simulated/mineral/proc/add_edges()
+ var/turf/T
+ if((istype(get_step(src, NORTH), /turf/simulated/floor)) || (istype(get_step(src, NORTH), /turf/space)))
+ T = get_step(src, NORTH)
+ if (T)
+ T.overlays += rockTurfEdgeCache[SOUTH_EDGING]
+ if((istype(get_step(src, SOUTH), /turf/simulated/floor)) || (istype(get_step(src, SOUTH), /turf/space)))
+ T = get_step(src, SOUTH)
+ if (T)
+ T.overlays += rockTurfEdgeCache[NORTH_EDGING]
+ if((istype(get_step(src, EAST), /turf/simulated/floor)) || (istype(get_step(src, EAST), /turf/space)))
+ T = get_step(src, EAST)
+ if (T)
+ T.overlays += rockTurfEdgeCache[WEST_EDGING]
+ if((istype(get_step(src, WEST), /turf/simulated/floor)) || (istype(get_step(src, WEST), /turf/space)))
+ T = get_step(src, WEST)
+ if (T)
+ T.overlays += rockTurfEdgeCache[EAST_EDGING]
+
/turf/simulated/mineral/random
name = "mineral deposit"
icon_state = "rock"
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 82b83db73ef..77afb5e2665 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -248,6 +248,16 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/dead/observer/proc/notify_cloning(var/message, var/sound, var/atom/source)
if(message)
to_chat(src, "[message]")
+ if(source)
+ var/obj/screen/alert/A = throw_alert("\ref[source]_notify_cloning", /obj/screen/alert/notify_cloning)
+ if(A)
+ if(client && client.prefs && client.prefs.UI_style)
+ A.icon = ui_style2icon(client.prefs.UI_style)
+ A.desc = message
+ var/old_layer = source.layer
+ source.layer = FLOAT_LAYER
+ A.overlays += source
+ source.layer = old_layer
to_chat(src, "(Click to re-enter)")
if(sound)
to_chat(src, sound(sound))
@@ -563,6 +573,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return
forceMove(T)
following = null
+
+ if(href_list["reenter"])
+ reenter_corpse()
+
..()
//END TELEPORT HREF CODE
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index 777eac07ec8..8998f39ea27 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -107,10 +107,10 @@
to_chat(player, msg_dead)
continue
- else if(istype(player,/mob/dead) || ((src in player.languages) && check_special_condition(player)))
+ else if(istype(player,/mob/dead) || ((src in player.languages) && check_special_condition(player, speaker)))
to_chat(player, msg)
-/datum/language/proc/check_special_condition(var/mob/other)
+/datum/language/proc/check_special_condition(var/mob/other, var/mob/living/speaker)
return 1
/datum/language/proc/get_spoken_verb(var/msg_end)
@@ -409,6 +409,7 @@
key = "8"
flags = RESTRICTED | HIVEMIND
+
/datum/language/shadowling/broadcast(var/mob/living/speaker, var/message, var/speaker_mask)
if(speaker.mind && speaker.mind.special_role)
..(speaker, message, "([speaker.mind.special_role]) [speaker]")
@@ -422,6 +423,25 @@
else
..(speaker,message)
+/datum/language/abductor
+ name = "Abductor Mindlink"
+ desc = "Abductors are incapable of speech, but have a psychic link attuned to their own team."
+ speech_verb = "gibbers"
+ ask_verb = "gibbers"
+ exclaim_verb = "gibbers"
+ colour = "abductor"
+ key = "zw" //doesn't matter, this is their default and only language
+ flags = RESTRICTED | HIVEMIND
+
+/datum/language/abductor/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
+ ..(speaker,message,speaker.real_name)
+
+/datum/language/abductor/check_special_condition(var/mob/living/carbon/human/other, var/mob/living/carbon/human/speaker)
+ if(other.mind && other.mind.abductor)
+ if(other.mind.abductor.team == speaker.mind.abductor.team)
+ return 1
+ return 0
+
/datum/language/corticalborer
name = "Cortical Link"
desc = "Cortical borers possess a strange link between their tiny minds."
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index a6bf793abe0..6192b0acc6b 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -102,22 +102,19 @@
// +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt.
if(bodytemperature > 360.15)
//Body temperature is too hot.
- fire_alert = max(fire_alert, 1)
+ throw_alert("alien_fire", /obj/screen/alert/alien_fire)
switch(bodytemperature)
if(360 to 400)
apply_damage(HEAT_DAMAGE_LEVEL_1, BURN)
- fire_alert = max(fire_alert, 2)
if(400 to 460)
apply_damage(HEAT_DAMAGE_LEVEL_2, BURN)
- fire_alert = max(fire_alert, 2)
if(460 to INFINITY)
if(on_fire)
apply_damage(HEAT_DAMAGE_LEVEL_3, BURN)
- fire_alert = max(fire_alert, 2)
else
apply_damage(HEAT_DAMAGE_LEVEL_2, BURN)
- fire_alert = max(fire_alert, 2)
- return
+ else
+ clear_alert("alien_fire")
/mob/living/carbon/alien/handle_mutations_and_radiation()
// Aliens love radiation nom nom nom
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index c50e4603e41..90fe6537759 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -343,6 +343,10 @@ In all, this is a lot like the monkey code. /N
/mob/living/carbon/alien/humanoid/canBeHandcuffed()
return 1
+/mob/living/carbon/alien/humanoid/cuff_resist(obj/item/I)
+ playsound(src, 'sound/voice/hiss5.ogg', 40, 1, 1) //Alien roars when starting to break free
+ ..(I, cuff_break = 1)
+
/mob/living/carbon/alien/humanoid/get_standard_pixel_y_offset(lying = 0)
if(leaping)
return -32
diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm
index 93bf633093f..cf602694233 100644
--- a/code/modules/mob/living/carbon/alien/life.dm
+++ b/code/modules/mob/living/carbon/alien/life.dm
@@ -7,19 +7,19 @@
return 0
var/toxins_used = 0
- var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
+ var/breath_pressure = (breath.total_moles() * R_IDEAL_GAS_EQUATION * breath.temperature) / BREATH_VOLUME
//Partial pressure of the toxins in our breath
- var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure
+ var/Toxins_pp = (breath.toxins / breath.total_moles()) * breath_pressure
if(Toxins_pp) // Detect toxins in air
adjustPlasma(breath.toxins*250)
- toxins_alert = max(toxins_alert, 1)
+ throw_alert("alien_tox", /obj/screen/alert/alien_tox)
toxins_used = breath.toxins
else
- toxins_alert = 0
+ clear_alert("alien_tox")
//Breathe in toxins and out oxygen
breath.toxins -= toxins_used
@@ -30,14 +30,6 @@
return 1
-/mob/living/carbon/alien/handle_breath_temperature(datum/gas_mixture/breath)
- if(breath.temperature > (T0C + 66) && !(RESIST_COLD in mutations))
- if(prob(20))
- to_chat(src, "You feel a searing heat in your lungs!")
- fire_alert = max(fire_alert, 1)
- else
- fire_alert = 0
-
/mob/living/carbon/alien/update_sight()
if(stat == DEAD || (XRAY in mutations))
sight |= SEE_TURFS
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index 07251303a12..f6cdb0362e3 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -47,8 +47,6 @@
for(var/mob/dead/observer/O in player_list)
if(check_observer(O))
to_chat(O, "\A [src] has been activated. (Teleport | Sign Up)")
-// if(ROLE_POSIBRAIN in O.client.prefs.be_special) The Guardian implementation looks cleaner
-// question(O.client)
/obj/item/device/mmi/posibrain/proc/check_observer(var/mob/dead/observer/O)
if(O.has_enabled_antagHUD == 1 && config.antag_hud_restricted)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 84348120528..26def9b6520 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -607,7 +607,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
handcuffed = null
if(buckled && buckled.buckle_requires_restraints)
buckled.unbuckle_mob()
- update_inv_handcuffed()
+ update_handcuffed()
else if(I == legcuffed)
legcuffed = null
update_inv_legcuffed()
@@ -732,6 +732,131 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
/mob/living/carbon/is_muzzled()
return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
+/mob/living/carbon/proc/spin(spintime, speed)
+ spawn()
+ var/D = dir
+ while(spintime >= speed)
+ sleep(speed)
+ switch(D)
+ if(NORTH)
+ D = EAST
+ if(SOUTH)
+ D = WEST
+ if(EAST)
+ D = SOUTH
+ if(WEST)
+ D = NORTH
+ dir = D
+ spintime -= speed
+
+/mob/living/carbon/resist_buckle()
+ if(restrained())
+ changeNext_move(CLICK_CD_BREAKOUT)
+ last_special = world.time + CLICK_CD_BREAKOUT
+ visible_message("[src] attempts to unbuckle themself!", \
+ "You attempt to unbuckle yourself... (This will take around one minute and you need to stay still.)")
+ if(do_after(src, 600, 0, target = src))
+ if(!buckled)
+ return
+ buckled.user_unbuckle_mob(src,src)
+ else
+ if(src && buckled)
+ src << "You fail to unbuckle yourself!"
+ else
+ buckled.user_unbuckle_mob(src,src)
+
+/mob/living/carbon/resist_fire()
+ fire_stacks -= 5
+ weakened = max(weakened, 3)//We dont check for CANWEAKEN, I don't care how immune to weakening you are, if you're rolling on the ground, you're busy.
+ update_canmove()
+ spin(32,2)
+ visible_message("[src] rolls on the floor, trying to put themselves out!", \
+ "You stop, drop, and roll!")
+ sleep(30)
+ if(fire_stacks <= 0)
+ visible_message("[src] has successfully extinguished themselves!", \
+ "You extinguish yourself.")
+ ExtinguishMob()
+
+
+/mob/living/carbon/resist_restraints()
+ var/obj/item/I = null
+ if(handcuffed)
+ I = handcuffed
+ else if(legcuffed)
+ I = legcuffed
+ if(I)
+ changeNext_move(CLICK_CD_BREAKOUT)
+ last_special = world.time + CLICK_CD_BREAKOUT
+ cuff_resist(I)
+
+
+/mob/living/carbon/proc/cuff_resist(obj/item/I, breakouttime = 600, cuff_break = 0)
+ breakouttime = I.breakouttime
+
+ var/displaytime = breakouttime / 600
+ if(!cuff_break)
+ visible_message("[src] attempts to remove [I]!")
+ to_chat(src, "You attempt to remove [I]... (This will take around [displaytime] minutes and you need to stand still.)")
+ if(do_after(src, breakouttime, 0, target = src))
+ if(I.loc != src || buckled)
+ return
+ visible_message("[src] manages to remove [I]!")
+ to_chat(src, "You successfully remove [I].")
+
+ if(I == handcuffed)
+ handcuffed.loc = loc
+ handcuffed.dropped(src)
+ handcuffed = null
+ if(buckled && buckled.buckle_requires_restraints)
+ buckled.unbuckle_mob(src)
+ update_handcuffed()
+ return
+ if(I == legcuffed)
+ legcuffed.loc = loc
+ legcuffed.dropped()
+ legcuffed = null
+ update_inv_legcuffed()
+ return
+ return 1
+ else
+ to_chat(src, "You fail to remove [I]!")
+
+ else
+ breakouttime = 50
+ visible_message("[src] is trying to break [I]!")
+ to_chat(src, "You attempt to break [I]... (This will take around 5 seconds and you need to stand still.)")
+ if(do_after(src, breakouttime, 0, target = src))
+ if(!I.loc || buckled)
+ return
+ visible_message("[src] manages to break [I]!")
+ to_chat(src, "You successfully break [I].")
+ qdel(I)
+
+ if(I == handcuffed)
+ handcuffed = null
+ update_handcuffed()
+ return
+ else if(I == legcuffed)
+ legcuffed = null
+ update_inv_legcuffed()
+ return
+ return 1
+ else
+ to_chat(src, "You fail to break [I]!")
+
+//called when we get cuffed/uncuffed
+/mob/living/carbon/proc/update_handcuffed()
+ if(handcuffed)
+ drop_r_hand()
+ drop_l_hand()
+ stop_pulling()
+ throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed)
+ else
+ clear_alert("handcuffed")
+ update_action_buttons() //some of our action buttons might be unusable when we're handcuffed.
+ update_inv_handcuffed()
+
/mob/living/carbon/get_standard_pixel_y_offset(lying = 0)
if(lying)
if(buckled) return initial(pixel_y)
@@ -765,7 +890,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
handcuffed = null
if (buckled && buckled.buckle_requires_restraints)
buckled.unbuckle_mob()
- update_inv_handcuffed()
+ update_handcuffed()
if (client)
client.screen -= W
if (W)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 5ebda5b96d7..ee9388ac962 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -114,6 +114,9 @@
/mob/living/carbon/human/grey/New(var/new_loc)
..(new_loc, "Grey")
+/mob/living/carbon/human/abductor/New(var/new_loc)
+ ..(new_loc, "Abductor")
+
/mob/living/carbon/human/human/New(var/new_loc)
..(new_loc, "Human")
@@ -690,6 +693,8 @@
//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere
/mob/living/carbon/human/get_visible_name()
+ if(name_override)
+ return name_override
if(wear_mask && (wear_mask.flags_inv & HIDEFACE)) //Wearing a mask which hides our face, use id-name if possible
return get_id_name("Unknown")
if(head && (head.flags_inv & HIDEFACE))
@@ -1350,6 +1355,15 @@
update_inv_shoes(1)
return 1
+/mob/living/carbon/human/cuff_resist(obj/item/I)
+ if(HULK in mutations)
+ say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
+ if(..(I, cuff_break = 1))
+ unEquip(I)
+ else
+ if(..())
+ unEquip(I)
+
/mob/living/carbon/human/get_visible_implants(var/class = 0)
var/list/visible_implants = list()
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index f68b03ed964..e2ebed386b3 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -81,6 +81,8 @@ var/global/default_martial_art = new/datum/martial_art
var/hand_blood_color
+ var/name_override //For temporary visible name changes
+
var/xylophone = 0 //For the spoooooooky xylophone cooldown
var/mob/remoteview_target = null
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index bdd22a7e6fb..14585c8d972 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -369,8 +369,7 @@
var/obj/item/organ/external/affected = get_organ("chest")
affected.add_autopsy_data("Suffocation", oxyloss)
-
- oxygen_alert = max(oxygen_alert, 1)
+ throw_alert("oxy", /obj/screen/alert/oxy)
return 0
@@ -384,7 +383,7 @@
// to_chat(world, "Loc temp: [loc_temp] - Body temp: [bodytemperature] - Fireloss: [getFireLoss()] - Thermal protection: [get_thermal_protection()] - Fire protection: [thermal_protection + add_fire_protection(loc_temp)] - Heat capacity: [environment_heat_capacity] - Location: [loc] - src: [src]")
//Body temperature is adjusted in two steps. Firstly your body tries to stabilize itself a bit.
- if(stat != 2)
+ if(stat != DEAD)
stabilize_temperature_from_calories()
//After then, it reacts to the surrounding atmosphere based on your thermal protection
@@ -403,41 +402,43 @@
// +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt.
if(bodytemperature > species.heat_level_1)
//Body temperature is too hot.
- fire_alert = max(fire_alert, 1)
if(status_flags & GODMODE) return 1 //godmode
var/mult = species.hot_env_multiplier
if(bodytemperature >= species.heat_level_1 && bodytemperature <= species.heat_level_2)
+ throw_alert("temp", /obj/screen/alert/hot, 1)
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature")
- fire_alert = max(fire_alert, 2)
if(bodytemperature > species.heat_level_2 && bodytemperature <= species.heat_level_3)
+ throw_alert("temp", /obj/screen/alert/hot, 2)
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature")
- fire_alert = max(fire_alert, 2)
if(bodytemperature > species.heat_level_3 && bodytemperature < INFINITY)
+ throw_alert("temp", /obj/screen/alert/hot, 3)
if(on_fire)
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_3, used_weapon = "Fire")
- fire_alert = max(fire_alert, 2)
else
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature")
- fire_alert = max(fire_alert, 2)
else if(bodytemperature < species.cold_level_1)
- fire_alert = max(fire_alert, 1)
- if(status_flags & GODMODE) return 1 //godmode
-
- if(stat == DEAD) return 1 //ZomgPonies -- No need for cold burn damage if dead
+ if(status_flags & GODMODE)
+ return 1
+ if(stat == DEAD)
+ return 1
if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell))
var/mult = species.cold_env_multiplier
if(bodytemperature >= species.cold_level_2 && bodytemperature <= species.cold_level_1)
+ throw_alert("temp", /obj/screen/alert/cold, 1)
take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_1, used_weapon = "Low Body Temperature")
- fire_alert = max(fire_alert, 1)
if(bodytemperature >= species.cold_level_3 && bodytemperature < species.cold_level_2)
+ throw_alert("temp", /obj/screen/alert/cold, 2)
take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_2, used_weapon = "Low Body Temperature")
- fire_alert = max(fire_alert, 1)
if(bodytemperature > -INFINITY && bodytemperature < species.cold_level_3)
+ throw_alert("temp", /obj/screen/alert/cold, 3)
take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_3, used_weapon = "Low Body Temperature")
- fire_alert = max(fire_alert, 1)
+ else
+ clear_alert("temp")
+ else
+ clear_alert("temp")
// Account for massive pressure differences. Done by Polymorph
// Made it possible to actually have something that can protect against high pressure... Done by Errorage. Polymorph now has an axe sticking from his head for his previous hardcoded nonsense!
@@ -447,28 +448,32 @@
if(status_flags & GODMODE) return 1 //godmode
if(adjusted_pressure >= species.hazard_high_pressure)
- var/pressure_damage = min( ( (adjusted_pressure / species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE)
- take_overall_damage(brute=pressure_damage, used_weapon = "High Pressure")
- pressure_alert = 2
+ if(!(RESIST_HEAT in mutations))
+ var/pressure_damage = min( ( (adjusted_pressure / species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE)
+ take_overall_damage(brute=pressure_damage, used_weapon = "High Pressure")
+ throw_alert("pressure", /obj/screen/alert/highpressure, 2)
+ else
+ clear_alert("pressure")
else if(adjusted_pressure >= species.warning_high_pressure)
- pressure_alert = 1
+ throw_alert("pressure", /obj/screen/alert/highpressure, 1)
else if(adjusted_pressure >= species.warning_low_pressure)
- pressure_alert = 0
+ clear_alert("pressure")
else if(adjusted_pressure >= species.hazard_low_pressure)
- pressure_alert = -1
+ throw_alert("pressure", /obj/screen/alert/lowpressure, 1)
else
if(RESIST_COLD in mutations)
- pressure_alert = -1
+ clear_alert("pressure")
else
take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure")
- pressure_alert = -2
+ throw_alert("pressure", /obj/screen/alert/lowpressure, 2)
- return
///FIRE CODE
/mob/living/carbon/human/handle_fire()
if(..())
return
+ if(RESIST_HEAT in mutations)
+ return
var/thermal_protection = 0 //Simple check to estimate how protected we are against multiple temperatures
if(wear_suit)
if(wear_suit.max_heat_protection_temperature >= FIRE_SUIT_MAX_TEMP_PROTECT)
@@ -547,11 +552,13 @@
return thermal_protection_flags
/mob/living/carbon/human/proc/get_heat_protection(temperature) //Temperature is the temperature you're being exposed to.
+
+ if(RESIST_HEAT in mutations)
+ return 1
+
var/thermal_protection_flags = get_heat_protection_flags(temperature)
var/thermal_protection = 0.0
- if(RESIST_HEAT in mutations)
- return 1
if(thermal_protection_flags)
if(thermal_protection_flags & HEAD)
thermal_protection += THERMAL_PROTECTION_HEAD
diff --git a/code/modules/mob/living/carbon/human/species/abdcutor.dm b/code/modules/mob/living/carbon/human/species/abdcutor.dm
new file mode 100644
index 00000000000..1c641b27af0
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/abdcutor.dm
@@ -0,0 +1,27 @@
+/datum/species/abductor
+ name = "Abductor"
+ name_plural = "Abductors"
+ icobase = 'icons/mob/human_races/r_abductor.dmi'
+ deform = 'icons/mob/human_races/r_abductor.dmi'
+ path = /mob/living/carbon/human/abductor
+ language = "Abductor Mindlink"
+ default_language = "Abductor Mindlink"
+ unarmed_type = /datum/unarmed_attack/punch
+ darksight = 3
+ eyes = "blank_eyes"
+
+ flags = HAS_LIPS | NO_BLOOD | NO_BREATHE
+ virus_immune = 1
+ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
+ dietflags = DIET_OMNI
+ reagent_tag = PROCESS_ORG
+ blood_color = "#FF5AFF"
+
+/datum/species/abductor/can_understand(var/mob/other) //Abductors can understand everyone, but they can only speak over their mindlink to another team-member
+ return 1
+
+/datum/species/abductor/handle_post_spawn(var/mob/living/carbon/human/H)
+ H.gender = NEUTER
+ if(H.mind)
+ H.mind.abductor = new /datum/abductor
+ return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm
index 5bced02a651..76c06871250 100644
--- a/code/modules/mob/living/carbon/human/species/plasmaman.dm
+++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm
@@ -186,7 +186,7 @@
H.emote(pick("giggle", "laugh"))
SA.moles = 0
- if( (abs(310.15 - breath.temperature) > 50) && !(RESIST_HEAT in H.mutations)) // Hot air hurts :(
+ if(abs(310.15 - breath.temperature) > 50) // Hot air hurts :(
if(H.status_flags & GODMODE)
return 1 //godmode
if(breath.temperature < cold_level_1)
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 9b68e5830cb..ed15138b602 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -52,6 +52,19 @@
var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning.
var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure.
+ var/list/atmos_requirements = list(
+ "min_oxy" = 16,
+ "max_oxy" = 0,
+ "min_nitro" = 0,
+ "max_nitro" = 0,
+ "min_tox" = 0,
+ "max_tox" = 0.005,
+ "min_co2" = 0,
+ "max_co2" = 10,
+ "sa_para" = 1,
+ "sa_sleep" = 5
+ )
+
var/brute_mod = null // Physical damage reduction/malus.
var/burn_mod = null // Burn damage reduction/malus.
@@ -181,66 +194,105 @@
O.owner = H
/datum/species/proc/handle_breath(var/datum/gas_mixture/breath, var/mob/living/carbon/human/H)
- var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa
- //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now)
- var/safe_co2_max = 10 // Yes it's an arbitrary value who cares?
- var/safe_toxins_max = 0.005
- var/SA_para_min = 1
- var/SA_sleep_min = 5
- var/oxygen_used = 0
- var/nitrogen_used = 0
var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
- var/vox_oxygen_max = 1 // For vox.
+
+ var/O2_used = 0
+ var/N2_used = 0
+ var/Tox_used = 0
+ var/CO2_used = 0
//Partial pressure of the O2 in our breath
- var/O2_pp = (breath.oxygen/breath.total_moles())*breath_pressure
- // Same, but for the toxins
- var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure
- // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun)
- var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure // Tweaking to fit the hacky bullshit I've done with atmo -- TLE
- // Nitrogen, for Vox.
- var/Nitrogen_pp = (breath.nitrogen/breath.total_moles())*breath_pressure
+ var/O2_pp = (breath.oxygen/breath.total_moles()) * breath_pressure
+ // Partial pressure of Nitrogen
+ var/N2_pp = (breath.nitrogen/breath.total_moles()) * breath_pressure
+ // Partial pressure of plasma
+ var/Tox_pp = (breath.toxins/breath.total_moles()) * breath_pressure
+ // Partial pressure of CO2
+ var/CO2_pp = (breath.carbon_dioxide/breath.total_moles()) * breath_pressure
- // TODO: Split up into Voxs' own proc.
- if(O2_pp < safe_oxygen_min && name != "Vox") // Too little oxygen
+ if(O2_pp < atmos_requirements["min_oxy"])
if(prob(20))
spawn(0)
H.emote("gasp")
+
+ H.failed_last_breath = 1
if(O2_pp > 0)
- var/ratio = safe_oxygen_min/O2_pp
- H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) // Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all!)
- H.failed_last_breath = 1
- oxygen_used = breath.oxygen*ratio/6
+ var/ratio = atmos_requirements["min_oxy"] / O2_pp
+ H.adjustOxyLoss(min(5 * ratio, HUMAN_MAX_OXYLOSS))
else
H.adjustOxyLoss(HUMAN_MAX_OXYLOSS)
- H.failed_last_breath = 1
- H.oxygen_alert = max(H.oxygen_alert, 1)
- else if(Nitrogen_pp < safe_oxygen_min && name == "Vox") //Vox breathe nitrogen, not oxygen.
+ H.throw_alert("oxy", /obj/screen/alert/oxy)
+ else if(atmos_requirements["max_oxy"] && O2_pp > atmos_requirements["max_oxy"])
+ var/ratio = (breath.oxygen / atmos_requirements["max_oxy"]) * 1000
+ H.adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
+ H.throw_alert("oxy", /obj/screen/alert/too_much_oxy)
+ else
+ H.clear_alert("oxy")
+ if(atmos_requirements["min_oxy"]) //species breathes this gas, so, they got their air
+ H.failed_last_breath = 0
+ H.adjustOxyLoss(-5)
+ O2_used = breath.oxygen / 6
+ if(N2_pp < atmos_requirements["min_nitro"])
if(prob(20))
- spawn(0) H.emote("gasp")
- if(Nitrogen_pp > 0)
- var/ratio = safe_oxygen_min/Nitrogen_pp
- H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS))
- H.failed_last_breath = 1
- nitrogen_used = breath.nitrogen*ratio/6
+ spawn(0)
+ H.emote("gasp")
+
+ H.failed_last_breath = 1
+ if(N2_pp > 0)
+ var/ratio = atmos_requirements["min_nitro"] / N2_pp
+ H.adjustOxyLoss(min(5 * ratio, HUMAN_MAX_OXYLOSS))
else
H.adjustOxyLoss(HUMAN_MAX_OXYLOSS)
- H.failed_last_breath = 1
- H.oxygen_alert = max(H.oxygen_alert, 1)
+ H.throw_alert("nitro", /obj/screen/alert/nitro)
+ else if(atmos_requirements["max_nitro"] && N2_pp > atmos_requirements["max_nitro"])
+ var/ratio = (breath.nitrogen / atmos_requirements["max_nitro"]) * 1000
+ H.adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
+ H.throw_alert("nitro", /obj/screen/alert/too_much_nitro)
+ else
+ H.clear_alert("nitro")
+ if(atmos_requirements["min_nitro"]) //species breathes this gas, so they got their air
+ H.failed_last_breath = 0
+ H.adjustOxyLoss(-5)
+ N2_used = breath.nitrogen / 6
- else // We're in safe limits
- H.failed_last_breath = 0
- H.adjustOxyLoss(-5)
- oxygen_used = breath.oxygen/6
- H.oxygen_alert = 0
+ if(Tox_pp < atmos_requirements["min_tox"])
+ if(prob(20))
+ spawn(0)
+ H.emote("gasp")
- breath.oxygen -= oxygen_used
- breath.nitrogen -= nitrogen_used
- breath.carbon_dioxide += oxygen_used
+ H.failed_last_breath = 1
+ if(Tox_pp > 0)
+ var/ratio = atmos_requirements["min_tox"] / Tox_pp
+ H.adjustOxyLoss(min(5 * ratio, HUMAN_MAX_OXYLOSS))
+ else
+ H.adjustOxyLoss(HUMAN_MAX_OXYLOSS)
+ H.throw_alert("tox_in_air", /obj/screen/alert/not_enough_tox)
+ else if(atmos_requirements["max_tox"] && Tox_pp > atmos_requirements["max_tox"])
+ var/ratio = (breath.toxins / atmos_requirements["max_tox"]) * 10
+ if(H.reagents)
+ H.reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
+ H.throw_alert("tox_in_air", /obj/screen/alert/tox_in_air)
+ else
+ H.clear_alert("tox_in_air")
+ if(atmos_requirements["min_tox"]) //species breathes this gas, so, they got their air
+ H.failed_last_breath = 0
+ H.adjustOxyLoss(-5)
+ Tox_used = breath.toxins / 6
- //CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick.
- if(CO2_pp > safe_co2_max)
+ if(CO2_pp < atmos_requirements["min_co2"])
+ if(prob(20))
+ spawn(0)
+ H.emote("gasp")
+
+ H.failed_last_breath = 1
+ if(CO2_pp)
+ var/ratio = atmos_requirements["min_co2"] / CO2_pp
+ H.adjustOxyLoss(min(5 * ratio, HUMAN_MAX_OXYLOSS))
+ else
+ H.adjustOxyLoss(HUMAN_MAX_OXYLOSS)
+ H.throw_alert("co2", /obj/screen/alert/not_enough_co2)
+ else if(atmos_requirements["max_co2"] && CO2_pp > atmos_requirements["max_co2"])
if(!H.co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so.
H.co2overloadtime = world.time
else if(world.time - H.co2overloadtime > 120)
@@ -249,77 +301,67 @@
if(world.time - H.co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good!
H.adjustOxyLoss(8)
if(prob(20)) // Lets give them some chance to know somethings not right though I guess.
- spawn(0) H.emote("cough")
-
+ spawn(0)
+ H.emote("cough")
else
- H.co2overloadtime = 0
+ H.clear_alert("co2")
+ if(atmos_requirements["min_co2"]) //species breathes this gas, so they got their air
+ H.failed_last_breath = 0
+ H.adjustOxyLoss(-5)
+ CO2_used = breath.carbon_dioxide / 6
- if(Toxins_pp > safe_toxins_max) // Too much toxins
- var/ratio = (breath.toxins/safe_toxins_max) * 10
- //adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) //Limit amount of damage toxin exposure can do per second
- if(H.reagents)
- H.reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
- H.toxins_alert = max(H.toxins_alert, 1)
+ breath.oxygen -= O2_used
+ breath.nitrogen -= N2_used
+ breath.toxins -= Tox_used
+ breath.carbon_dioxide -= CO2_used
+ breath.carbon_dioxide += O2_used
- else if(O2_pp > vox_oxygen_max && name == "Vox") //Oxygen is toxic to vox.
- var/ratio = (breath.oxygen/vox_oxygen_max) * 1000
- H.adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
- H.toxins_alert = max(H.toxins_alert, 1)
- else
- H.toxins_alert = 0
if(breath.trace_gases.len) // If there's some other shit in the air lets deal with it here.
for(var/datum/gas/sleeping_agent/SA in breath.trace_gases)
- var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure
- if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
+ var/SA_pp = (SA.moles / breath.total_moles()) * breath_pressure
+ if(SA_pp > atmos_requirements["sa_para"]) // Enough to make us paralysed for a bit
H.Paralyse(3) // 3 gives them one second to wake up and run away a bit!
- if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
- H.sleeping = max(H.sleeping+2, 10)
+ if(SA_pp > atmos_requirements["sa_sleep"]) // Enough to make us sleep as well
+ H.sleeping = max(H.sleeping + 2, 10)
else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
if(prob(20))
- spawn(0) H.emote(pick("giggle", "laugh"))
+ spawn(0)
+ H.emote(pick("giggle", "laugh"))
handle_temperature(breath, H)
-
return 1
/datum/species/proc/handle_temperature(datum/gas_mixture/breath, var/mob/living/carbon/human/H) // called by human/life, handles temperatures
- if( (abs(310.15 - breath.temperature) > 50) && !(RESIST_HEAT in H.mutations)) // Hot air hurts :(
+ if(abs(310.15 - breath.temperature) > 50) // Hot air hurts :(
if(H.status_flags & GODMODE) return 1 //godmode
if(breath.temperature < cold_level_1)
if(prob(20))
- to_chat(H, "\red You feel your face freezing and an icicle forming in your lungs!")
+ to_chat(H, "You feel your face freezing and an icicle forming in your lungs!")
else if(breath.temperature > heat_level_1)
if(prob(20))
- to_chat(H, "\red You feel your face burning and a searing heat in your lungs!")
+ to_chat(H, "You feel your face burning and a searing heat in your lungs!")
switch(breath.temperature)
if(-INFINITY to cold_level_3)
H.apply_damage(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Cold")
- H.fire_alert = max(H.fire_alert, 1)
if(cold_level_3 to cold_level_2)
H.apply_damage(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Cold")
- H.fire_alert = max(H.fire_alert, 1)
if(cold_level_2 to cold_level_1)
H.apply_damage(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Cold")
- H.fire_alert = max(H.fire_alert, 1)
if(heat_level_1 to heat_level_2)
H.apply_damage(hot_env_multiplier*HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat")
- H.fire_alert = max(H.fire_alert, 2)
if(heat_level_2 to heat_level_3_breathe)
H.apply_damage(hot_env_multiplier*HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat")
- H.fire_alert = max(H.fire_alert, 2)
if(heat_level_3_breathe to INFINITY)
H.apply_damage(hot_env_multiplier*HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat")
- H.fire_alert = max(H.fire_alert, 2)
- return
/datum/species/proc/handle_post_spawn(var/mob/living/carbon/C) //Handles anything not already covered by basic species assignment.
grant_abilities(C)
@@ -528,10 +570,10 @@
if(H.blinded || H.eye_blind)
H.overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
- //H.throw_alert("blind", /obj/screen/alert/blind)
+ H.throw_alert("blind", /obj/screen/alert/blind)
else
H.clear_fullscreen("blind")
- //H.clear_alert("blind")
+ H.clear_alert("blind")
if(H.disabilities & NEARSIGHTED) //this looks meh but saves a lot of memory by not requiring to add var/prescription
@@ -553,10 +595,10 @@
if(H.druggy)
H.overlay_fullscreen("high", /obj/screen/fullscreen/high)
- //H.throw_alert("high", /obj/screen/alert/high)
+ H.throw_alert("high", /obj/screen/alert/high)
else
H.clear_fullscreen("high")
- //H.clear_alert("high")
+ H.clear_alert("high")
/datum/species/proc/handle_hud_icons(mob/living/carbon/human/H)
if(H.healths)
@@ -603,59 +645,15 @@
if(icon_num)
H.healthdoll.overlays += image('icons/mob/screen_gen.dmi',"[O.limb_name][icon_num]")
- if(H.nutrition_icon)
- switch(H.nutrition)
- if(450 to INFINITY) H.nutrition_icon.icon_state = "nutrition0"
- if(350 to 450) H.nutrition_icon.icon_state = "nutrition1"
- if(250 to 350) H.nutrition_icon.icon_state = "nutrition2"
- if(150 to 250) H.nutrition_icon.icon_state = "nutrition3"
- else H.nutrition_icon.icon_state = "nutrition4"
-
-
- // BAY SHIT
- if(H.pressure)
- H.pressure.icon_state = "pressure[H.pressure_alert]"
-
- if(H.toxin)
- if(H.hal_screwyhud == 4 || H.toxins_alert) H.toxin.icon_state = "tox1"
- else H.toxin.icon_state = "tox0"
- if(H.oxygen)
- if(H.hal_screwyhud == 3 || H.oxygen_alert) H.oxygen.icon_state = "oxy1"
- else H.oxygen.icon_state = "oxy0"
- if(H.fire)
- if(H.fire_alert) H.fire.icon_state = "fire[H.fire_alert]" //fire_alert is either 0 if no alert, 1 for cold and 2 for heat.
- else H.fire.icon_state = "fire0"
-
- if(H.bodytemp)
- var/temp_step
- if(H.bodytemperature >= body_temperature)
- temp_step = (heat_level_1 - body_temperature)/4
-
- if(H.bodytemperature >= heat_level_1)
- H.bodytemp.icon_state = "temp4"
- else if(H.bodytemperature >= body_temperature + temp_step*3)
- H.bodytemp.icon_state = "temp3"
- else if(H.bodytemperature >= body_temperature + temp_step*2)
- H.bodytemp.icon_state = "temp2"
- else if(H.bodytemperature >= body_temperature + temp_step*1)
- H.bodytemp.icon_state = "temp1"
- else
- H.bodytemp.icon_state = "temp0"
-
- else if(H.bodytemperature < body_temperature)
- temp_step = (body_temperature - cold_level_1)/4
-
- if(H.bodytemperature <= cold_level_1)
- H.bodytemp.icon_state = "temp-4"
- else if(H.bodytemperature <= body_temperature - temp_step*3)
- H.bodytemp.icon_state = "temp-3"
- else if(H.bodytemperature <= body_temperature - temp_step*2)
- H.bodytemp.icon_state = "temp-2"
- else if(H.bodytemperature <= body_temperature - temp_step*1)
- H.bodytemp.icon_state = "temp-1"
- else
- H.bodytemp.icon_state = "temp0"
-
+ switch(H.nutrition)
+ if(450 to INFINITY)
+ H.throw_alert("nutrition", /obj/screen/alert/fat)
+ if(350 to 450)
+ H.clear_alert("nutrition")
+ if(250 to 350)
+ H.throw_alert("nutrition", /obj/screen/alert/hungry)
+ else
+ H.throw_alert("nutrition", /obj/screen/alert/starving)
return 1
/*
diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm
index ae20969bc00..26c6ddb0c57 100644
--- a/code/modules/mob/living/carbon/human/species/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station.dm
@@ -226,6 +226,19 @@
cold_level_2 = 50
cold_level_3 = 0
+ atmos_requirements = list(
+ "min_oxy" = 0,
+ "max_oxy" = 1,
+ "min_nitro" = 16,
+ "max_nitro" = 0,
+ "min_tox" = 0,
+ "max_tox" = 0.005,
+ "min_co2" = 0,
+ "max_co2" = 10,
+ "sa_para" = 1,
+ "sa_sleep" = 5
+ )
+
eyes = "vox_eyes_s"
breath_type = "nitrogen"
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 73bbd5a4281..623cc9df1e9 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -104,41 +104,6 @@ If you have any questions/constructive-comments/bugs-to-report/or have a massivl
Please contact me on #coderbus IRC. ~Carn x
*/
-//Human Overlays Indexes/////////
-#define MUTANTRACE_LAYER 1
-#define TAIL_UNDERLIMBS_LAYER 2
-#define LIMBS_LAYER 3
-#define MARKINGS_LAYER 4
-#define UNDERWEAR_LAYER 5
-#define MUTATIONS_LAYER 6
-#define DAMAGE_LAYER 7
-#define UNIFORM_LAYER 8
-#define ID_LAYER 9
-#define SHOES_LAYER 10
-#define GLOVES_LAYER 11
-#define EARS_LAYER 12
-#define SUIT_LAYER 13
-#define GLASSES_LAYER 14
-#define BELT_LAYER 15 //Possible make this an overlay of somethign required to wear a belt?
-#define SUIT_STORE_LAYER 16
-#define BACK_LAYER 17
-#define TAIL_LAYER 18 //bs12 specific. this hack is probably gonna come back to haunt me
-#define HAIR_LAYER 19 //TODO: make part of head layer?
-#define HEAD_ACCESSORY_LAYER 20
-#define FHAIR_LAYER 21
-#define FACEMASK_LAYER 22
-#define HEAD_LAYER 23
-#define COLLAR_LAYER 24
-#define HANDCUFF_LAYER 25
-#define LEGCUFF_LAYER 26
-#define L_HAND_LAYER 27
-#define R_HAND_LAYER 28
-#define TARGETED_LAYER 29 //BS12: Layer for the target overlay from weapon targeting system
-#define FIRE_LAYER 30 //If you're on fire
-#define TOTAL_LAYERS 30
-
-
-
/mob/living/carbon/human
var/list/overlays_standing[TOTAL_LAYERS]
var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed
@@ -163,18 +128,26 @@ Please contact me on #coderbus IRC. ~Carn x
update_hud() //TODO: remove the need for this
var/stealth = 0
- for(var/obj/item/weapon/cloaking_device/S in list(l_hand,r_hand,belt,l_store,r_store))
- if(S.active)
+ var/obj/item/clothing/suit/armor/abductor/vest/V // Begin the most snowflakey bullshit code I've ever written. I'm so sorry, but there was no other way.
+ for(V in list(wear_suit))
+ if(V.stealth_active)
stealth = 1
break
if(stealth)
- icon = 'icons/mob/human.dmi'
- icon_state = "body_cloaked"
- var/image/I = overlays_standing[L_HAND_LAYER]
- if(istype(I)) overlays += I
- I = overlays_standing[R_HAND_LAYER]
- if(istype(I)) overlays += I
+ icon = V.disguise.icon //if the suit is active, reference the suit's current loaded icon and overlays; this does not include hand overlays
+ overlays.Cut()
+
+ for(var/thing in V.disguise.overlays)
+ if(thing)
+ overlays += thing
+
+ var/image/I = overlays_standing[L_HAND_LAYER] //manually add both left and right hand, so its independently updated
+ if(istype(I))
+ overlays += I
+ I = overlays_standing[R_HAND_LAYER]
+ if(istype(I))
+ overlays += I
else
icon = stand_icon
overlays.Cut()
@@ -533,23 +506,6 @@ var/global/list/damage_icon_parts = list()
add_image = 1
for(var/mut in mutations)
switch(mut)
- /*
- if(HULK)
- if(fat)
- standing.underlays += "hulk_[fat]_s"
- else
- standing.underlays += "hulk_[g]_s"
- add_image = 1
- if(RESIST_COLD)
- standing.underlays += "fire[fat]_s"
- add_image = 1
- if(RESIST_HEAT)
- standing.underlays += "cold[fat]_s"
- add_image = 1
- if(TK)
- standing.underlays += "telekinesishead[fat]_s"
- add_image = 1
- */
if(LASER)
standing.overlays += "lasereyes_s"
add_image = 1
@@ -989,16 +945,19 @@ var/global/list/damage_icon_parts = list()
update_icons()
/mob/living/carbon/human/update_inv_legcuffed(var/update_icons=1)
+ clear_alert("legcuffed")
if(legcuffed)
overlays_standing[LEGCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "legcuff1")
- if(src.m_intent != "walk")
- src.m_intent = "walk"
- if(src.hud_used && src.hud_used.move_intent)
- src.hud_used.move_intent.icon_state = "walking"
+ throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = src.legcuffed)
+ if(m_intent != "walk")
+ m_intent = "walk"
+ if(hud_used && hud_used.move_intent)
+ hud_used.move_intent.icon_state = "walking"
else
overlays_standing[LEGCUFF_LAYER] = null
- if(update_icons) update_icons()
+ if(update_icons)
+ update_icons()
/mob/living/carbon/human/update_inv_r_hand(var/update_icons=1)
@@ -1237,34 +1196,11 @@ var/global/list/damage_icon_parts = list()
O.sync_colour_to_human(src)
update_body(0)
-//Human Overlays Indexes/////////
-#undef MUTANTRACE_LAYER
-#undef TAIL_UNDERLIMBS_LAYER
-#undef LIMBS_LAYER
-#undef MARKINGS_LAYER
-#undef MUTATIONS_LAYER
-#undef DAMAGE_LAYER
-#undef UNIFORM_LAYER
-#undef ID_LAYER
-#undef SHOES_LAYER
-#undef GLOVES_LAYER
-#undef EARS_LAYER
-#undef SUIT_LAYER
-#undef GLASSES_LAYER
-#undef FACEMASK_LAYER
-#undef BELT_LAYER
-#undef SUIT_STORE_LAYER
-#undef BACK_LAYER
-#undef TAIL_LAYER
-#undef HAIR_LAYER
-#undef HEAD_LAYER
-#undef HEAD_ACCESSORY_LAYER
-#undef FHAIR_LAYER
-#undef COLLAR_LAYER
-#undef HANDCUFF_LAYER
-#undef LEGCUFF_LAYER
-#undef L_HAND_LAYER
-#undef R_HAND_LAYER
-#undef TARGETED_LAYER
-#undef FIRE_LAYER
-#undef TOTAL_LAYERS
+/mob/living/carbon/human/proc/get_overlays_copy(list/unwantedLayers)
+ var/list/out = new
+ for(var/i=1;i<=TOTAL_LAYERS;i++)
+ if(overlays_standing[i])
+ if(i in unwantedLayers)
+ continue
+ out += overlays_standing[i]
+ return out
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 43794bed7b8..7b3f74ef65f 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -95,8 +95,7 @@
if(!breath || (breath.total_moles() == 0))
adjustOxyLoss(1)
failed_last_breath = 1
-
- oxygen_alert = max(oxygen_alert, 1)
+ throw_alert("oxy", /obj/screen/alert/oxy)
return 0
var/safe_oxy_min = 16
@@ -125,13 +124,13 @@
else
adjustOxyLoss(3)
failed_last_breath = 1
- oxygen_alert = max(oxygen_alert, 1)
+ throw_alert("oxy", /obj/screen/alert/oxy)
else //Enough oxygen
failed_last_breath = 0
adjustOxyLoss(-5)
oxygen_used = breath.oxygen/6
- oxygen_alert = 0
+ clear_alert("oxy")
breath.oxygen -= oxygen_used
breath.carbon_dioxide += oxygen_used
@@ -147,9 +146,7 @@
adjustOxyLoss(8)
if(prob(20))
spawn(0) emote("cough")
- co2_alert = max(co2_alert, 1)
else
- co2_alert = 0
co2overloadtime = 0
//TOXINS/PLASMA
@@ -157,9 +154,9 @@
var/ratio = (breath.toxins/safe_tox_max) * 10
if(reagents)
reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
- toxins_alert = max(toxins_alert, 1)
+ throw_alert("tox_in_air", /obj/screen/alert/tox_in_air)
else
- toxins_alert = 0
+ clear_alert("tox_in_air")
//TRACE GASES
if(breath.trace_gases.len)
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index 6e47fd45626..866c01c9702 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -15,7 +15,6 @@
if(BRUTE)
adjustBruteLoss(damage * blocked)
if(BURN)
- if(RESIST_HEAT in mutations) damage = 0
adjustFireLoss(damage * blocked)
if(TOX)
adjustToxLoss(damage * blocked)
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index ebbda839e52..59a208d7c2e 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -155,6 +155,9 @@
/mob/living/proc/handle_sleeping()
if(sleeping)
AdjustSleeping(-1)
+ throw_alert("asleep", /obj/screen/alert/asleep)
+ else
+ clear_alert("asleep")
return sleeping
@@ -193,10 +196,10 @@
return
if(blinded || eye_blind)
overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
- //throw_alert("blind", /obj/screen/alert/blind)
+ throw_alert("blind", /obj/screen/alert/blind)
else
clear_fullscreen("blind")
- //clear_alert("blind")
+ clear_alert("blind")
if(disabilities & NEARSIGHTED)
overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
@@ -210,10 +213,10 @@
if(druggy)
overlay_fullscreen("high", /obj/screen/fullscreen/high)
- //throw_alert("high", /obj/screen/alert/high)
+ throw_alert("high", /obj/screen/alert/high)
else
clear_fullscreen("high")
- //clear_alert("high")
+ clear_alert("high")
if(machine)
if(!machine.check_eye(src))
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 4d5245cbf12..3289024cce9 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -92,9 +92,6 @@
//sort of a legacy burn method for /electrocute, /shock, and the e_chair
/mob/living/proc/burn_skin(burn_amount)
if(istype(src, /mob/living/carbon/human))
-// to_chat(world, "DEBUG: burn_skin(), mutations=[mutations]")
- if (RESIST_HEAT in src.mutations) //fireproof
- return 0
var/mob/living/carbon/human/H = src //make this damage method divide the damage to be done among all the body parts, then burn each body part for that much damage. will have better effect then just randomly picking a body part
var/divided_damage = (burn_amount)/(H.organs.len)
var/extradam = 0 //added to when organ is at max dam
@@ -522,262 +519,74 @@
set name = "Resist"
set category = "IC"
- if(!isliving(usr) || usr.next_move > world.time)
+ if(!isliving(src) || next_move > world.time || stat || weakened || stunned || paralysis)
return
- usr.changeNext_move(CLICK_CD_RESIST)
+ changeNext_move(CLICK_CD_RESIST)
- var/mob/living/L = usr
-
- //Resisting control by an alien mind.
- if(istype(src.loc,/mob/living/simple_animal/borer))
- resist_borer()
-
- //resisting grabs (as if it helps anyone...)
- if ((!(L.stat) && !(L.restrained())))
- resist_grab(L) //this passes L because the proc requires a typecasted mob/living instead of just 'src'
+ if(!restrained())
+ if(resist_grab())
+ return
//unbuckling yourself
- if(L.buckled && (L.last_special <= world.time) )
- resist_buckle(L) //this passes L because the proc requires a typecasted mob/living instead of just 'src'
+ if(buckled && last_special <= world.time)
+ resist_buckle()
- //Breaking out of an object?
- else if(src.loc && istype(src.loc, /obj) && (!isturf(src.loc)))
- if(stat == CONSCIOUS && !stunned && !weakened && !paralysis)
- var/obj/C = loc
- C.container_resist(L)
+ //Breaking out of a container (Locker, sleeper, cryo...)
+ else if(isobj(loc))
+ var/obj/C = loc
+ C.container_resist(src)
- //breaking out of handcuffs
- else if(iscarbon(L))
- var/mob/living/carbon/CM = L
-
- if(CM.on_fire && CM.canmove)
- resist_stop_drop_roll(CM) //this passes CM because the proc requires a typecasted mob/living/carbon instead of just 'src'
-
- if(CM.handcuffed && CM.canmove && (CM.last_special <= world.time))//this passes CM because the proc requires a typecasted mob/living/carbon instead of just 'src'
- resist_handcuffs(CM)
-
- else if(CM.legcuffed && CM.canmove && (CM.last_special <= world.time)) //this passes CM because the proc requires a typecasted mob/living/carbon instead of just 'src'
- resist_legcuffs(CM)
+ else if(canmove)
+ if(on_fire)
+ resist_fire() //stop, drop, and roll
+ else if(last_special <= world.time)
+ resist_restraints() //trying to remove cuffs.
/*////////////////////
RESIST SUBPROCS
*/////////////////////
-
-/* resist_borer allows a mob to regain control of their body after a borer has assumed control.
-*/////
-/mob/living/proc/resist_borer()
- var/mob/living/simple_animal/borer/B = src.loc
- var/mob/living/captive_brain/H = src
-
- to_chat(H, "\red You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).")
- to_chat(B.host, "\red You feel the captive mind of [src] begin to resist your control.")
-
- spawn(rand(350,450)+B.host.brainloss)
-
- if(!B || !B.controlling)
- return
-
- B.host.adjustBrainLoss(rand(5,10))
- to_chat(H, "\red With an immense exertion of will, you regain control of your body!")
- to_chat(B.host, "\red You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.")
-
- B.detatch()
-
- verbs -= /mob/living/carbon/proc/release_control
- verbs -= /mob/living/carbon/proc/punish_host
- verbs -= /mob/living/carbon/proc/spawn_larvae
-
- return
-
-/* resist_grab allows a mob to resist a grab from another mob when disarming is not an option/neckgrabbed.
-*/////
-/mob/living/proc/resist_grab(var/mob/living/L)
+/mob/living/proc/resist_grab()
var/resisting = 0
-
- for(var/obj/O in L.requests)
- L.requests.Remove(O)
+ for(var/obj/O in requests)
qdel(O)
resisting++
-
- for(var/obj/item/weapon/grab/G in usr.grabbed_by)
+ for(var/X in grabbed_by)
+ var/obj/item/weapon/grab/G = X
resisting++
- if (G.state == 1)
- qdel(G)
+ switch(G.state)
+ if(GRAB_PASSIVE)
+ qdel(G)
- else
- if(G.state == 2)
+ if(GRAB_AGGRESSIVE)
if(prob(60))
- for(var/mob/O in viewers(L, null))
- O.show_message(text("\red [] has broken free of []'s grip!", L, G.assailant), 1)
+ visible_message("[src] has broken free of [G.assailant]'s grip!")
qdel(G)
- else
- if(G.state == 3)
- if(prob(5))
- for(var/mob/O in viewers(usr, null))
- O.show_message(text("\red [] has broken free of []'s headlock!", L, G.assailant), 1)
- qdel(G)
+ if(GRAB_NECK)
+ if(prob(5))
+ visible_message("[src] has broken free of [G.assailant]'s headlock!")
+ qdel(G)
if(resisting)
- for(var/mob/O in viewers(usr, null))
- O.show_message(text("\red [] resists!", L), 1)
+ visible_message("[src] resists!")
+ return 1
-/* resist_buckle allows a mob that is bucklecuffed to break free of the chair/bed/whatever
-*/////
-/mob/living/proc/resist_buckle(var/mob/living/L)
- if(iscarbon(L))
- var/mob/living/carbon/C = L
-
- if(C.handcuffed)
- C.changeNext_move(CLICK_CD_BREAKOUT)
- C.last_special = world.time + CLICK_CD_BREAKOUT
-
- to_chat(C, "\red You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stay still)")
- for(var/mob/O in viewers(L))
- O.show_message("\red [usr] attempts to unbuckle themself!", 1)
-
- spawn(0)
- if(do_after(usr, 1200, target = C))
- if(!C.buckled)
- return
- for(var/mob/O in viewers(C))
- O.show_message("\red [usr] manages to unbuckle themself!", 1)
- to_chat(C, "\blue You successfully unbuckle yourself.")
- C.buckled.user_unbuckle_mob(C,C)
-
- else
- L.buckled.user_unbuckle_mob(L,L)
-
-/* resist_stop_drop_roll allows a mob to stop, drop, and roll in order to put out a fire burning on them.
-*/////
-/mob/living/proc/resist_stop_drop_roll(var/mob/living/carbon/CM)
- CM.fire_stacks -= 5
- CM.weakened = max(CM.weakened, 3)//We dont check for CANWEAKEN, I don't care how immune to weakening you are, if you're rolling on the ground, you're busy.
- CM.update_canmove()
- CM.spin(32,2)
- CM.visible_message("[CM] rolls on the floor, trying to put themselves out!", \
- "You stop, drop, and roll!")
- sleep(30)
- if(fire_stacks <= 0)
- CM.visible_message("[CM] has successfully extinguished themselves!", \
- "You extinguish yourself.")
- ExtinguishMob()
+/mob/living/proc/resist_borer()
return
-/* resist_handcuffs allows a mob to break/remove their handcuffs after a delay
-*/////
-/mob/living/proc/resist_handcuffs(var/mob/living/carbon/CM)
- CM.changeNext_move(CLICK_CD_BREAKOUT)
- CM.last_special = world.time + CLICK_CD_BREAKOUT
- var/obj/item/weapon/restraints/handcuffs/HC = CM.handcuffed
+/mob/living/proc/resist_buckle()
+ buckled.user_unbuckle_mob(src,src)
- var/breakouttime = 1200 //A default in case you are somehow handcuffed with something that isn't an obj/item/weapon/restraints/handcuffs type
- var/displaytime = 2 //Minutes to display in the "this will take X minutes."
+/mob/living/proc/resist_fire()
+ return
- var/hulklien = 0 //variable used to define if someone is a hulk or alien
-
- if(istype(HC)) //If you are handcuffed with actual handcuffs... Well what do I know, maybe someone will want to handcuff you with toilet paper in the future...
- breakouttime = HC.breakouttime
- displaytime = breakouttime / 600 //Minutes
-
- if(isalienadult(CM) || (HULK in usr.mutations))
- hulklien = 1
- breakouttime = 50
- displaytime = 5
-
- to_chat(CM, "\red You attempt to remove \the [HC]. (This will take around [displaytime] [hulklien ? "seconds" : "minute[displaytime==1 ? "" : "s"]"] and you need to stand still)")
- for(var/mob/O in viewers(CM))
- O.show_message( "\red [usr] attempts to [hulklien ? "break" : "remove"] \the [HC]!", 1)
- spawn(0)
- if(do_after(CM, breakouttime, target = src))
- if(!CM.handcuffed || CM.buckled)
- return // time leniency for lag which also might make this whole thing pointless but the server
-
- for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
- O.show_message("\red [CM] manages to [hulklien ? "break" : "remove"] the handcuffs!", 1)
-
- to_chat(CM, "\blue You successfully [hulklien ? "break" : "remove"] \the [CM.handcuffed].")
-
- if(hulklien)
- CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- qdel(CM.handcuffed)
- CM.handcuffed = null
- if(CM.buckled && CM.buckled.buckle_requires_restraints)
- CM.buckled.unbuckle_mob()
- CM.update_inv_handcuffed()
- return
-
- CM.unEquip(CM.handcuffed)
-
-/* resist_legcuffs allows a mob to break/remove their legcuffs after a delay
-*/////
-/mob/living/proc/resist_legcuffs(var/mob/living/carbon/CM)
- var/obj/item/weapon/restraints/legcuffs/HC = CM.legcuffed
-
- var/breakouttime = 1200 //A default in case you are somehow legcuffed with something that isn't an obj/item/weapon/legcuffs type
- var/displaytime = 2 //Minutes to display in the "this will take X minutes."
-
- var/hulklien = 0 //variable used to define if someone is a hulk or alien
-
- if(istype(HC)) //If you are legcuffed with actual legcuffs... Well what do I know, maybe someone will want to legcuff you with toilet paper in the future...
- breakouttime = HC.breakouttime
- displaytime = breakouttime / 600 //Minutes
-
- if(isalienadult(CM) || (HULK in usr.mutations))
- hulklien = 1
- breakouttime = 50
- displaytime = 5
-
- to_chat(CM, "\red You attempt to remove \the [HC]. (This will take around [displaytime] [hulklien ? "seconds" : "minute[displaytime==1 ? "" : "s"]"] and you need to stand still)")
-
- for(var/mob/O in viewers(CM))
- O.show_message( "\red [usr] attempts to [hulklien ? "break" : "remove"] \the [HC]!", 1)
-
- spawn(0)
- if(do_after(CM, breakouttime, target = src))
- if(!CM.legcuffed || CM.buckled)
- return // time leniency for lag which also might make this whole thing pointless but the server
- for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
- O.show_message("\red [CM] manages to [hulklien ? "break" : "remove"] the legcuffs!", 1)
-
- to_chat(CM, "\blue You successfully [hulklien ? "break" : "remove"] \the [CM.legcuffed].")
-
- if(!hulklien)
- CM.unEquip(CM.legcuffed)
-
- if(hulklien)
- CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- qdel(CM.legcuffed)
-
- CM.legcuffed = null
- CM.update_inv_legcuffed()
+/mob/living/proc/resist_restraints()
+ return
/*//////////////////////
END RESIST PROCS
*///////////////////////
-
-
-
-
-/mob/living/carbon/proc/spin(spintime, speed)
- spawn()
- var/D = dir
- while(spintime >= speed)
- sleep(speed)
- switch(D)
- if(NORTH)
- D = EAST
- if(SOUTH)
- D = WEST
- if(EAST)
- D = SOUTH
- if(WEST)
- D = NORTH
- dir = D
- spintime -= speed
- return
-
/mob/living/proc/Exhaust()
to_chat(src, "You're too exhausted to keep going...")
Weaken(5)
@@ -788,6 +597,10 @@
/mob/living/update_gravity(has_gravity)
if(!ticker)
return
+ if(has_gravity)
+ clear_alert("weightless")
+ else
+ throw_alert("weightless", /obj/screen/alert/weightless)
float(!has_gravity)
/mob/living/proc/float(on)
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index b48aa36a64c..4d994436489 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -39,14 +39,6 @@
/mob/living/bullet_act(var/obj/item/projectile/P, var/def_zone)
- //Being hit while using a cloaking device
- var/obj/item/weapon/cloaking_device/C = locate((/obj/item/weapon/cloaking_device) in src)
- if(C && C.active)
- C.attack_self(src)//Should shut it off
- update_icons()
- to_chat(src, "\blue Your [C.name] was disrupted!")
- Stun(2)
-
//Armor
var/armor = run_armor_check(def_zone, P.flag, armour_penetration = P.armour_penetration)
var/proj_sharp = is_sharp(P)
@@ -173,6 +165,7 @@
if(fire_stacks > 0 && !on_fire)
on_fire = 1
set_light(light_range + 3,l_color = "#ED9200")
+ throw_alert("fire", /obj/screen/alert/fire)
update_fire()
/mob/living/proc/ExtinguishMob()
@@ -180,6 +173,7 @@
on_fire = 0
fire_stacks = 0
set_light(max(0,light_range - 3))
+ clear_alert("fire")
update_fire()
/mob/living/proc/update_fire()
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index ef2cc344cdf..3260015f64b 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -334,6 +334,10 @@ proc/get_radio_key_from_channel(var/channel)
whisper_say(message, speaking)
+// for weird circumstances where you're inside an atom that is also you, like pai's
+/mob/living/proc/get_whisper_loc()
+ return src
+
/mob/living/proc/whisper_say(var/message, var/datum/language/speaking = null, var/alt_name="", var/verb="whispers")
if(client)
if(client.prefs.muted & MUTE_IC)
@@ -382,7 +386,8 @@ proc/get_radio_key_from_channel(var/channel)
if(!message || message=="")
return
- var/list/listening = hearers(message_range, src)
+ var/atom/whisper_loc = get_whisper_loc()
+ var/list/listening = hearers(message_range, whisper_loc)
listening |= src
//ghosts
@@ -399,16 +404,16 @@ proc/get_radio_key_from_channel(var/channel)
listening += C
//pass on the message to objects that can hear us.
- for(var/obj/O in view(message_range, src))
+ for(var/obj/O in view(message_range, whisper_loc))
spawn(0)
if(O)
O.hear_talk(src, message, verb, speaking)
- var/list/eavesdropping = hearers(eavesdropping_range, src)
+ var/list/eavesdropping = hearers(eavesdropping_range, whisper_loc)
eavesdropping -= src
eavesdropping -= listening
- var/list/watching = hearers(watching_range, src)
+ var/list/watching = hearers(watching_range, whisper_loc)
watching -= src
watching -= listening
watching -= eavesdropping
diff --git a/code/modules/mob/living/silicon/laws.dm b/code/modules/mob/living/silicon/laws.dm
index 27e431e1675..30784e61b93 100644
--- a/code/modules/mob/living/silicon/laws.dm
+++ b/code/modules/mob/living/silicon/laws.dm
@@ -10,6 +10,7 @@
return laws.zeroth_law != null
/mob/living/silicon/proc/set_zeroth_law(var/law, var/law_borg)
+ throw_alert("newlaw", /obj/screen/alert/newlaw)
laws_sanity_check()
laws.set_zeroth_law(law, law_borg)
if(!isnull(usr) && law)
@@ -21,42 +22,49 @@
to_chat(src, "Internal camera is currently being accessed.")
/mob/living/silicon/proc/add_ion_law(var/law)
+ throw_alert("newlaw", /obj/screen/alert/newlaw)
laws_sanity_check()
laws.add_ion_law(law)
if(!isnull(usr) && law)
log_and_message_admins("has given [src] the ion law: [law]")
/mob/living/silicon/proc/add_inherent_law(var/law)
+ throw_alert("newlaw", /obj/screen/alert/newlaw)
laws_sanity_check()
laws.add_inherent_law(law)
if(!isnull(usr) && law)
log_and_message_admins("has given [src] the inherent law: [law]")
/mob/living/silicon/proc/add_supplied_law(var/number, var/law)
+ throw_alert("newlaw", /obj/screen/alert/newlaw)
laws_sanity_check()
laws.add_supplied_law(number, law)
if(!isnull(usr) && law)
log_and_message_admins("has given [src] the supplied law: [law]")
/mob/living/silicon/proc/delete_law(var/datum/ai_law/law)
+ throw_alert("newlaw", /obj/screen/alert/newlaw)
laws_sanity_check()
laws.delete_law(law)
if(!isnull(usr) && law)
log_and_message_admins("has deleted a law belonging to [src]: [law.law]")
/mob/living/silicon/proc/clear_inherent_laws(var/silent = 0)
+ throw_alert("newlaw", /obj/screen/alert/newlaw)
laws_sanity_check()
laws.clear_inherent_laws()
if(!silent && !isnull(usr))
log_and_message_admins("cleared the inherent laws of [src]")
/mob/living/silicon/proc/clear_ion_laws(var/silent = 0)
+ throw_alert("newlaw", /obj/screen/alert/newlaw)
laws_sanity_check()
laws.clear_ion_laws()
if(!silent && !isnull(usr))
log_and_message_admins("cleared the ion laws of [src]")
/mob/living/silicon/proc/clear_supplied_laws(var/silent = 0)
+ throw_alert("newlaw", /obj/screen/alert/newlaw)
laws_sanity_check()
laws.clear_supplied_laws()
if(!silent && !isnull(usr))
@@ -108,10 +116,10 @@
/mob/living/silicon/proc/lawsync()
laws_sanity_check()
laws.sort_laws()
-
+
/mob/living/silicon/proc/make_laws()
switch(config.default_laws)
- if(0)
+ if(0)
laws = new /datum/ai_laws/crewsimov()
else
laws = get_random_lawset()
@@ -122,6 +130,6 @@
for(var/law in paths)
var/datum/ai_laws/L = new law
if(!L.default)
- continue
+ continue
law_options += L
return pick(law_options)
diff --git a/code/modules/mob/living/silicon/pai/say.dm b/code/modules/mob/living/silicon/pai/say.dm
index 2c7bc900d68..1acb470773a 100644
--- a/code/modules/mob/living/silicon/pai/say.dm
+++ b/code/modules/mob/living/silicon/pai/say.dm
@@ -2,4 +2,12 @@
if(silence_time)
to_chat(src, "Communication circuits remain uninitialized.")
else
- ..(msg)
\ No newline at end of file
+ ..(msg)
+
+/mob/living/silicon/pai/get_whisper_loc()
+ if(loc == card) // currently in its card?
+ if(istype(card.loc, /mob/living))
+ return card.loc // allow a pai being held or in pocket to whisper
+ else
+ return card // allow a pai in its card to whisper
+ return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
index 305c89e87cb..151fc6de51d 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
@@ -38,10 +38,9 @@
set desc = "Activate a low power omnidirectional LED. Toggled on or off."
set category = "Drone"
- if(luminosity)
- set_light(0)
- return
- set_light(2)
+ if(lamp_intensity)
+ lamp_intensity = lamp_max // setting this to lamp_max will make control_headlamp shutoff the lamp
+ control_headlamp()
//Actual picking-up event.
/mob/living/silicon/robot/drone/attack_hand(mob/living/carbon/human/M as mob)
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index d247d726003..fa534b66123 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -176,6 +176,10 @@
/mob/living/silicon/robot/handle_hud_icons()
update_items()
update_cell()
+ if(emagged)
+ throw_alert("hacked", /obj/screen/alert/hacked)
+ else
+ clear_alert("hacked")
..()
/mob/living/silicon/robot/handle_hud_icons_health()
@@ -196,79 +200,47 @@
else
healths.icon_state = "health7"
- if(bodytemp)
- switch(bodytemperature) //310.055 optimal body temp
- if(335 to INFINITY)
- bodytemp.icon_state = "temp2"
- if(320 to 335)
- bodytemp.icon_state = "temp1"
- if(300 to 320)
- bodytemp.icon_state = "temp0"
- if(260 to 300)
- bodytemp.icon_state = "temp-1"
- else
- bodytemp.icon_state = "temp-2"
+ switch(bodytemperature) //310.055 optimal body temp
+ if(335 to INFINITY)
+ throw_alert("temp", /obj/screen/alert/hot/robot, 2)
+ if(320 to 335)
+ throw_alert("temp", /obj/screen/alert/hot/robot, 1)
+ if(300 to 320)
+ clear_alert("temp")
+ if(260 to 300)
+ throw_alert("temp", /obj/screen/alert/cold/robot, 1)
+ else
+ throw_alert("temp", /obj/screen/alert/cold/robot, 2)
/mob/living/silicon/robot/proc/update_cell()
- if(cells)
- if(cell)
- var/cellcharge = cell.charge/cell.maxcharge
- switch(cellcharge)
- if(0.75 to INFINITY)
- cells.icon_state = "charge4"
- if(0.5 to 0.75)
- cells.icon_state = "charge3"
- if(0.25 to 0.5)
- cells.icon_state = "charge2"
- if(0 to 0.25)
- cells.icon_state = "charge1"
- else
- cells.icon_state = "charge0"
- else
- cells.icon_state = "charge-empty"
-
-
-/*/mob/living/silicon/robot/handle_regular_hud_updates()
-// if(!client)
-// return
-//
-// switch(sensor_mode)
-// if(SEC_HUD)
-// process_sec_hud(src,1)
-// if(MED_HUD)
-// process_med_hud(src,1)
-
- if(syndicate)
- if(ticker.mode.name == "traitor")
- for(var/datum/mind/tra in ticker.mode.traitors)
- if(tra.current)
- var/I = image('icons/mob/mob.dmi', loc = tra.current, icon_state = "traitor")
- src.client.images += I
- if(connected_ai)
- connected_ai.connected_robots -= src
- connected_ai = null
- if(mind)
- if(!mind.special_role)
- mind.special_role = "traitor"
- ticker.mode.traitors += src.mind
-
-
- ..()
- return 1
- */
+ if(cell)
+ var/cellcharge = cell.charge/cell.maxcharge
+ switch(cellcharge)
+ if(0.75 to INFINITY)
+ clear_alert("charge")
+ if(0.5 to 0.75)
+ throw_alert("charge", /obj/screen/alert/lowcell, 1)
+ if(0.25 to 0.5)
+ throw_alert("charge", /obj/screen/alert/lowcell, 2)
+ if(0.01 to 0.25)
+ throw_alert("charge", /obj/screen/alert/lowcell, 3)
+ else
+ throw_alert("charge", /obj/screen/alert/emptycell)
+ else
+ throw_alert("charge", /obj/screen/alert/nocell)
/mob/living/silicon/robot/proc/update_items()
- if (src.client)
+ if (client)
for(var/obj/I in get_all_slots())
client.screen |= I
- if(src.module_state_1)
- src.module_state_1:screen_loc = ui_inv1
- if(src.module_state_2)
- src.module_state_2:screen_loc = ui_inv2
- if(src.module_state_3)
- src.module_state_3:screen_loc = ui_inv3
+ if(module_state_1)
+ module_state_1:screen_loc = ui_inv1
+ if(module_state_2)
+ module_state_2:screen_loc = ui_inv2
+ if(module_state_3)
+ module_state_3:screen_loc = ui_inv3
update_icons()
/mob/living/silicon/robot/proc/process_locks()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index d089eb98467..58f965dad7e 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -17,7 +17,6 @@ var/list/robot_verbs_default = list(
//Hud stuff
- var/obj/screen/cells = null
var/obj/screen/inv1 = null
var/obj/screen/inv2 = null
var/obj/screen/inv3 = null
@@ -786,6 +785,7 @@ var/list/robot_verbs_default = list(
else
sleep(6)
emagged = 1
+ SetLockdown(1) //Borgs were getting into trouble because they would attack the emagger before the new laws were shown
if(src.hud_used)
src.hud_used.update_robot_modules_display() //Shows/hides the emag item if the inventory screen is already open.
disconnect_from_ai()
@@ -814,6 +814,7 @@ var/list/robot_verbs_default = list(
to_chat(src, "Obey these laws:")
laws.show_laws(src)
to_chat(src, "\red \b ALERT: [M.real_name] is your new master. Obey your new laws and his commands.")
+ SetLockdown(0)
if(src.module && istype(src.module, /obj/item/weapon/robot_module/miner))
for(var/obj/item/weapon/pickaxe/drill/cyborg/D in src.module.modules)
qdel(D)
@@ -1256,6 +1257,10 @@ var/list/robot_verbs_default = list(
// They stay locked down if their wire is cut.
if(wires.LockedCut())
state = 1
+ if(state)
+ throw_alert("locked", /obj/screen/alert/locked)
+ else
+ clear_alert("locked")
lockcharge = state
update_canmove()
diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm
index 1eebe03d1ab..a546e164901 100644
--- a/code/modules/mob/living/silicon/say.dm
+++ b/code/modules/mob/living/silicon/say.dm
@@ -30,7 +30,10 @@
/mob/living/silicon/pai/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
if(..())
return 1
- if(message_mode)
+ else if(message_mode == "whisper")
+ whisper_say(message, speaking, alt_name)
+ return 1
+ else if(message_mode)
if(message_mode == "general")
message_mode = null
return radio.talk_into(src,message,message_mode,verb,speaking)
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index b9bf9046482..c80fcd9a92c 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -84,6 +84,20 @@
hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD) //Diagnostic HUD views
+/obj/item/device/radio/headset/bot
+ subspace_transmission = 1
+ canhear_range = 0
+
+/obj/item/device/radio/headset/bot/recalculateChannels()
+ var/mob/living/simple_animal/bot/B = loc
+ if(istype(B))
+ if(!B.radio_config)
+ B.radio_config = list("AI Private" = 1)
+ if(!(B.radio_channel in B.radio_config)) // put it first so it's the :h channel
+ B.radio_config.Insert(1, "[B.radio_channel]")
+ B.radio_config["[B.radio_channel]"] = 1
+ config(B.radio_config)
+
/mob/living/simple_animal/bot/proc/get_mode()
if(client) //Player bots do not have modes, thus the override. Also an easy way for PDA users/AI to know when a bot is a player.
if(paicard)
@@ -123,15 +137,7 @@
//This access is so bots can be immediately set to patrol and leave Robotics, instead of having to be let out first.
access_card.access += access_robotics
set_custom_texts()
- Radio = new/obj/item/device/radio/headset(src)
- Radio.subspace_transmission = 1
- Radio.canhear_range = 0 // anything greater will have the bot broadcast the channel as if it were saying it out loud.
- if(!radio_config)
- radio_config = list("AI Private" = 1)
- if(!(radio_channel in radio_config)) // put it first so it's the :h channel
- radio_config.Insert(1, "[radio_channel]")
- radio_config["[radio_channel]"] = 1
- Radio.config(radio_config)
+ Radio = new/obj/item/device/radio/headset/bot(src)
add_language("Galactic Common", 1)
add_language("Sol Common", 1)
@@ -1000,15 +1006,14 @@ Pass a positive integer as an argument to override a bot's default speed.
/mob/living/simple_animal/bot/handle_hud_icons_health()
..()
- if(bodytemp)
- switch(bodytemperature) //310.055 optimal body temp
- if(335 to INFINITY)
- bodytemp.icon_state = "temp2"
- if(320 to 335)
- bodytemp.icon_state = "temp1"
- if(300 to 320)
- bodytemp.icon_state = "temp0"
- if(260 to 300)
- bodytemp.icon_state = "temp-1"
- else
- bodytemp.icon_state = "temp-2"
\ No newline at end of file
+ switch(bodytemperature) //310.055 optimal body temp
+ if(335 to INFINITY)
+ throw_alert("temp", /obj/screen/alert/hot/robot, 2)
+ if(320 to 335)
+ throw_alert("temp", /obj/screen/alert/hot/robot, 1)
+ if(300 to 320)
+ clear_alert("temp")
+ if(260 to 300)
+ throw_alert("temp", /obj/screen/alert/cold/robot, 1)
+ else
+ throw_alert("temp", /obj/screen/alert/cold/robot, 2)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
index a68837ef7ff..12dd032ba49 100644
--- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
@@ -38,6 +38,7 @@
var/arrest_type = 0 //If true, don't handcuff
var/projectile = /obj/item/projectile/energy/electrode //Holder for projectile type
var/shoot_sound = 'sound/weapons/Taser.ogg'
+ allow_pai = 0
/mob/living/simple_animal/bot/ed209/New(loc,created_name,created_lasercolor)
@@ -565,5 +566,5 @@ Auto Patrol[]"},
return
if(!C.handcuffed)
C.handcuffed = new /obj/item/weapon/restraints/handcuffs/cable/zipties/used(C)
- C.update_inv_handcuffed(1)
+ C.update_handcuffed()
back_to_idle()
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 1d3d2198fcc..284584406c2 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -33,6 +33,7 @@
var/harmbaton = 0 //If true, beat instead of stun
var/flashing_lights = 0 //If true, flash lights
var/prev_flashing_lights = 0
+ allow_pai = 0
/mob/living/simple_animal/bot/secbot/beepsky
name = "Officer Beepsky"
@@ -40,7 +41,6 @@
idcheck = 0
weaponscheck = 0
auto_patrol = 1
- allow_pai = 0
/mob/living/simple_animal/bot/secbot/beepsky/explode()
var/turf/Tsec = get_turf(src)
@@ -54,7 +54,6 @@
name = "Officer Pingsky"
desc = "It's Officer Pingsky! Delegated to satellite guard duty for harbouring anti-human sentiment."
radio_channel = "AI Private"
- allow_pai = 0
/mob/living/simple_animal/bot/secbot/ofitser
name = "Prison Ofitser"
@@ -62,7 +61,6 @@
idcheck = 0
weaponscheck = 1
auto_patrol = 1
- allow_pai = 0
/mob/living/simple_animal/bot/secbot/buzzsky
name = "Officer Buzzsky"
@@ -229,7 +227,7 @@ Auto Patrol: []"},
return
if(!C.handcuffed)
C.handcuffed = new /obj/item/weapon/restraints/handcuffs/cable/zipties/used(C)
- C.update_inv_handcuffed(1)
+ C.update_handcuffed()
playsound(loc, pick('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/binsult.ogg', 'sound/voice/bcreep.ogg'), 50, 0)
back_to_idle()
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index cc1de35947d..fd38b3e81c7 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -33,6 +33,8 @@
/mob/living/simple_animal/hostile/Life()
. = ..()
+ if(ranged)
+ ranged_cooldown--
if(!.)
walk(src, 0)
return 0
@@ -46,8 +48,6 @@
/mob/living/simple_animal/hostile/handle_automated_action()
if(AIStatus == AI_OFF)
return 0
- if(ranged)
- ranged_cooldown--
var/list/possible_targets = ListTargets() //we look around for potential targets and make it a list for later use.
if(environment_smash)
EscapeConfinement()
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index b86a034a69e..23477c2fc18 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -101,18 +101,6 @@
..()
health = Clamp(health, 0, maxHealth)
-/mob/living/simple_animal/handle_hud_icons()
- ..()
- if(fire)
- if(fire_alert) fire.icon_state = "fire[fire_alert]" //fire_alert is either 0 if no alert, 1 for heat and 2 for cold.
- else fire.icon_state = "fire0"
- if(oxygen)
- if(oxygen_alert) oxygen.icon_state = "oxy1"
- else oxygen.icon_state = "oxy0"
- if(toxin)
- if(toxins_alert) toxin.icon_state = "tox1"
- else toxin.icon_state = "tox0"
-
/mob/living/simple_animal/handle_hud_icons_health()
..()
if(healths && maxHealth > 0)
@@ -215,21 +203,21 @@
if(atmos_requirements["min_oxy"] && oxy < atmos_requirements["min_oxy"])
atmos_suitable = 0
- oxygen_alert = 1
+ throw_alert("oxy", /obj/screen/alert/oxy)
else if(atmos_requirements["max_oxy"] && oxy > atmos_requirements["max_oxy"])
atmos_suitable = 0
- oxygen_alert = 1
+ throw_alert("oxy", /obj/screen/alert/too_much_oxy)
else
- oxygen_alert = 0
+ clear_alert("oxy")
if(atmos_requirements["min_tox"] && tox < atmos_requirements["min_tox"])
atmos_suitable = 0
- toxins_alert = 1
+ throw_alert("tox_in_air", /obj/screen/alert/not_enough_tox)
else if(atmos_requirements["max_tox"] && tox > atmos_requirements["max_tox"])
atmos_suitable = 0
- toxins_alert = 1
+ throw_alert("tox_in_air", /obj/screen/alert/tox_in_air)
else
- toxins_alert = 0
+ clear_alert("tox_in_air")
if(atmos_requirements["min_n2"] && n2 < atmos_requirements["min_n2"])
atmos_suitable = 0
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 0121905380a..ac459679f10 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -14,16 +14,10 @@
var/obj/screen/hands = null
var/obj/screen/pullin = null
var/obj/screen/internals = null
- var/obj/screen/oxygen = null
var/obj/screen/i_select = null
var/obj/screen/m_select = null
- var/obj/screen/toxin = null
- var/obj/screen/fire = null
- var/obj/screen/bodytemp = null
var/obj/screen/healths = null
var/obj/screen/throw_icon = null
- var/obj/screen/nutrition_icon = null
- var/obj/screen/pressure = null
var/obj/screen/gun/item/item_use_icon = null
var/obj/screen/gun/move/gun_move_icon = null
var/obj/screen/gun/run/gun_run_icon = null
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 1f2e0e7b456..a967c2df779 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -556,12 +556,28 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM)
lname = "[lname] "
to_chat(M, "[lname][follow][message]")
-/proc/notify_ghosts(var/message, var/ghost_sound = null) //Easy notification of ghosts.
+/proc/notify_ghosts(var/message, var/ghost_sound = null, var/enter_link = null, var/atom/source = null, var/image/alert_overlay = null, var/attack_not_jump = 0) //Easy notification of ghosts.
for(var/mob/dead/observer/O in player_list)
if(O.client)
- to_chat(O, "[message]")
+ to_chat(O, "[message][(enter_link) ? " [enter_link]" : ""]")
if(ghost_sound)
- to_chat(O, sound(ghost_sound))
+ O << sound(ghost_sound)
+ if(source)
+ var/obj/screen/alert/notify_jump/A = O.throw_alert("\ref[source]_notify_jump", /obj/screen/alert/notify_jump)
+ if(A)
+ if(O.client.prefs && O.client.prefs.UI_style)
+ A.icon = ui_style2icon(O.client.prefs.UI_style)
+ A.desc = message
+ A.attack_not_jump = attack_not_jump
+ A.jump_target = source
+ if(!alert_overlay)
+ var/old_layer = source.layer
+ source.layer = FLOAT_LAYER
+ A.overlays += source
+ source.layer = old_layer
+ else
+ alert_overlay.layer = FLOAT_LAYER
+ A.overlays += alert_overlay
/mob/proc/switch_to_camera(var/obj/machinery/camera/C)
if (!C.can_use() || stat || (get_dist(C, src) > 1 || machine != src || blinded || !canmove))
diff --git a/code/modules/pda/radio.dm b/code/modules/pda/radio.dm
index c64ea02ce7c..ae43ce10b3d 100644
--- a/code/modules/pda/radio.dm
+++ b/code/modules/pda/radio.dm
@@ -51,7 +51,7 @@
frequency.post_signal(src, signal, filter = s_filter)
/obj/item/radio/integrated/receive_signal(datum/signal/signal)
- if (signal.data["type"] == bot_type)
+ if (bot_type && istype(signal.source, /obj/machinery/bot_core) && signal.data["type"] == bot_type)
if(!botlist)
botlist = new()
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 3890b433eaf..4cc08d08471 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -337,7 +337,6 @@
continue
M.show_message("[user.name] smashed the light!", 3, "You hear a tinkle of breaking glass", 2)
if(on && (W.flags & CONDUCT))
- //if(!user.mutations & RESIST_COLD)
if (prob(12))
electrocute_mob(user, get_area(src), src, 0.3)
broken()
@@ -374,7 +373,6 @@
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
- //if(!user.mutations & RESIST_COLD)
if (prob(75))
electrocute_mob(user, get_area(src), src, rand(0.7,1.0))
diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm
index 1c43e1a829d..9dfa9c13993 100644
--- a/code/modules/power/singularity/narsie.dm
+++ b/code/modules/power/singularity/narsie.dm
@@ -29,7 +29,8 @@
var/area/A = get_area(src)
if(A)
- notify_ghosts("Nar-Sie has risen in \the [A.name]. Reach out to the Geometer to be given a new shell for your soul.")
+ var/image/alert_overlay = image('icons/effects/effects.dmi', "ghostalertsie")
+ notify_ghosts("Nar-Sie has risen in \the [A.name]. Reach out to the Geometer to be given a new shell for your soul.", source = src, alert_overlay = alert_overlay, attack_not_jump = 1)
narsie_spawn_animation()
@@ -37,9 +38,6 @@
shuttle_master.emergency.request(null, 0.3) // Cannot recall
/obj/singularity/narsie/large/attack_ghost(mob/dead/observer/user as mob)
- if(!(src in view()))
- to_chat(user, "Your soul is too far away.")
- return
makeNewConstruct(/mob/living/simple_animal/construct/harvester, user, null, 1)
new /obj/effect/effect/sleep_smoke(user.loc)
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm
index ee51efe2b1e..3a08a28a741 100644
--- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm
@@ -510,7 +510,7 @@
feedback_add_details("slime_cores_used","[type]")
var/obj/effect/golemrune/Z = new /obj/effect/golemrune
Z.forceMove(get_turf(holder.my_atom))
- notify_ghosts("Golem rune created in [get_area(Z)].", 'sound/effects/ghost2.ogg')
+ notify_ghosts("Golem rune created in [get_area(Z)].", 'sound/effects/ghost2.ogg', source = Z)
//Bluespace
/datum/chemical_reaction/slimefloor2
diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
index 999955a04bb..c7351d1c3fd 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
@@ -4,8 +4,11 @@
name = "glass"
desc = "Your standard drinking glass."
icon_state = "glass_empty"
+ item_state = "drinking_glass"
amount_per_transfer_from_this = 10
volume = 50
+ lefthand_file = 'icons/goonstation/mob/inhands/items_lefthand.dmi'
+ righthand_file = 'icons/goonstation/mob/inhands/items_righthand.dmi'
materials = list(MAT_GLASS=500)
diff --git a/code/modules/reagents/reagent_containers/food/drinks/shotglass.dm b/code/modules/reagents/reagent_containers/food/drinks/shotglass.dm
new file mode 100644
index 00000000000..46289547909
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/food/drinks/shotglass.dm
@@ -0,0 +1,23 @@
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass
+ name = "shot glass"
+ desc = "No glasses were shot in the making of this glass."
+ icon_state = "shotglass"
+ amount_per_transfer_from_this = 15
+ volume = 15
+ materials = list(MAT_GLASS=100)
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change()
+ overlays.Cut()
+
+ if(reagents.total_volume)
+ var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]1")
+ switch(reagents.total_volume)
+ if(0 to 4) filling.icon_state = "[icon_state]1"
+ if(5 to 11) filling.icon_state = "[icon_state]5"
+ if(12 to INFINITY) filling.icon_state = "[icon_state]12"
+
+ filling.icon += mix_color_from_reagents(reagents.reagent_list)
+ overlays += filling
+ name = "shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future.
+ else
+ name = "shot glass"
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 5c7e6d0ca4c..e95e213fd9f 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -96,14 +96,12 @@
return
- var/time = 30 //Injecting through a hardsuit takes longer due to needing to find a port.
+ var/time = 30
if(istype(target,/mob/living/carbon/human))
var/mob/living/carbon/human/H = T
if(H.species.flags & NO_BLOOD)
to_chat(usr, "You are unable to locate any blood.")
return
- if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space))
- time = 60
if(target == user)
time = 0
else
@@ -185,18 +183,10 @@
return */
if(ismob(target) && target != user)
- var/time = 30 //Injecting through a hardsuit takes longer due to needing to find a port.
- if(istype(target,/mob/living/carbon/human))
- if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space))
- time = 60
-
for(var/mob/O in viewers(world.view, user))
- if(time == 30)
- O.show_message(text("\red [] is trying to inject []!", user, target), 1)
- else
- O.show_message(text("\red [] begins hunting for an injection port on []'s suit!", user, target), 1)
+ O.show_message(text("\red [] is trying to inject []!", user, target), 1)
- if(!do_mob(user, target, time)) return
+ if(!do_mob(user, target, 30)) return
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red [] injects [] with the syringe!", user, target), 1)
diff --git a/code/modules/research/designs/stock_parts_designs.dm b/code/modules/research/designs/stock_parts_designs.dm
index c3e8ea38c96..81182661384 100644
--- a/code/modules/research/designs/stock_parts_designs.dm
+++ b/code/modules/research/designs/stock_parts_designs.dm
@@ -230,4 +230,14 @@
build_type = PROTOLATHE
materials = list(MAT_METAL = 15000, MAT_GLASS = 5000, MAT_SILVER = 2500) //hardcore
build_path = /obj/item/weapon/storage/part_replacer/bluespace
+ category = list("Stock Parts")
+
+/datum/design/alienalloy
+ name = "Alien Alloy"
+ desc = "A sheet of reverse-engineered alien alloy."
+ id = "alienalloy"
+ req_tech = list("abductor" = 1, "materials" = 7, "plasmatech" = 2)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 4000, MAT_PLASMA = 4000)
+ build_path = /obj/item/stack/sheet/mineral/abductor
category = list("Stock Parts")
\ No newline at end of file
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index c294ad8cff1..58c1cf7fe6f 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -438,8 +438,9 @@ proc/CallMaterialName(ID)
if( new_item.type == /obj/item/weapon/storage/backpack/holding )
new_item.investigate_log("built by [key]","singulo")
new_item.reliability = 100
- new_item.materials[MAT_METAL] /= coeff
- new_item.materials[MAT_GLASS] /= coeff
+ if(!istype(new_item, /obj/item/stack/sheet)) // To avoid materials dupe glitches
+ new_item.materials[MAT_METAL] /= coeff
+ new_item.materials[MAT_GLASS] /= coeff
if(O)
var/obj/item/weapon/storage/lockbox/L = new/obj/item/weapon/storage/lockbox(linked_lathe.loc)
new_item.loc = L
@@ -706,6 +707,8 @@ proc/CallMaterialName(ID)
dat += "Main Menu"
dat += "
Current Research Levels:
"
for(var/datum/tech/T in files.known_tech)
+ if(T.level <= 0)
+ continue
dat += "[T.name] "
dat += "* Level: [T.level] "
dat += "* Summary: [T.desc]"
@@ -733,6 +736,8 @@ proc/CallMaterialName(ID)
dat += "Return to Disk Operations
"
dat += "
Load Technology to Disk:
"
for(var/datum/tech/T in files.known_tech)
+ if(T.level <= 0)
+ continue
dat += "[T.name] "
dat += "Copy to Disk "
dat += "
"
diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm
index c34124af594..e4b91505669 100644
--- a/code/modules/research/research.dm
+++ b/code/modules/research/research.dm
@@ -117,7 +117,7 @@ research holder datum.
if(DesignHasReqs(PD))
AddDesign2Known(PD)
for(var/datum/tech/T in known_tech)
- T = Clamp(T.level, 1, 20)
+ T = Clamp(T.level, 0, 20)
for(var/datum/design/D in known_designs)
D.CalcReliability(known_tech)
return
@@ -242,6 +242,13 @@ datum/tech/syndicate
max_level = 0 // Don't count towards maxed research, since it's illegal.
rare = 4
+/datum/tech/abductor
+ name = "Alien Technologies Research"
+ desc = "The study of technologies used by the advanced alien race known as Abductors."
+ id = "abductor"
+ rare = 5
+ level = 0
+
/*
datum/tech/arcane
name = "Arcane Research"
@@ -278,8 +285,7 @@ datum/tech/robotics
return 0
var/cost = 0
- var/i
- for(i=current_level+1, i<=level, i++)
+ for(var/i=current_level+1, i<=level, i++)
if(i == initial(level))
continue
cost += i*5*rare
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 3bd5bad2f57..fe135490e3d 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -315,6 +315,8 @@
dat += "[temp_server.name] Data ManagementP
"
dat += "Known Technologies "
for(var/datum/tech/T in temp_server.files.known_tech)
+ if(T.level <= 0)
+ continue
dat += "* [T.name] "
dat += "(Reset) " //FYI, these are all strings.
dat += "Known Designs "
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index 31a4fa84280..7b42bc2f217 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -242,9 +242,9 @@
height = 4
/obj/docking_port/mobile/pod/New()
+ ..()
if(id == "pod")
WARNING("[type] id has not been changed from the default. Use the id convention \"pod1\" \"pod2\" etc.")
- ..()
/obj/docking_port/mobile/pod/cancel()
return
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index 2f7c0c06496..2a794de2ff8 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -302,10 +302,6 @@
//rotate our direction
dir = angle2dir(rotation+dir2angle(dir))
- //resmooth if need be.
- if(smooth)
- smooth_icon(src)
-
//rotate the pixel offsets too.
if (pixel_x || pixel_y)
if (rotation < 0)
@@ -316,6 +312,9 @@
pixel_x = oldPY
pixel_y = (oldPX*(-1))
+/atom/proc/postDock()
+ if(smooth)
+ smooth_icon(src)
//this is the main proc. It instantly moves our mobile port to stationary port S1
@@ -368,7 +367,7 @@
var/list/door_unlock_list = list()
- for(var/i=1, i<=L0.len, ++i)
+ for(var/i in 1 to L0.len)
var/turf/T0 = L0[i]
if(!T0)
continue
@@ -443,6 +442,12 @@
T0.CalculateAdjacentTurfs()
air_master.add_to_active(T0,1)
+ for(var/A1 in L1)
+ var/turf/T1 = A1
+ T1.postDock()
+ for(var/atom/movable/M in T1)
+ M.postDock()
+
loc = S1.loc
dir = S1.dir
diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm
index 45da3bce5b6..6a6a7e8b7fe 100644
--- a/code/modules/surgery/implant.dm
+++ b/code/modules/surgery/implant.dm
@@ -329,7 +329,12 @@
/datum/surgery_step/remove_object
name = "remove embedded objects"
time = 32
- accept_hand = 1
+ allowed_tools = list(
+ /obj/item/weapon/scalpel/manager = 120, \
+ /obj/item/weapon/hemostat = 100, \
+ /obj/item/stack/cable_coil = 75, \
+ /obj/item/device/assembly/mousetrap = 20
+ )
var/obj/item/organ/external/L = null
@@ -368,4 +373,4 @@
else
to_chat(user, "You can't find [target]'s [target_zone], let alone any objects embedded in it!")
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm
new file mode 100644
index 00000000000..cbe016c5bad
--- /dev/null
+++ b/code/modules/tooltip/tooltip.dm
@@ -0,0 +1,116 @@
+/*
+Tooltips v1.1 - 22/10/15
+Developed by Wire (#goonstation on irc.synirc.net)
+- Added support for screen_loc pixel offsets. Should work. Maybe.
+- Added init function to more efficiently send base vars
+
+Configuration:
+- Set control to the correct skin element (remember to actually place the skin element)
+- Set file to the correct path for the .html file (remember to actually place the html file)
+- Attach the datum to the user client on login, e.g.
+ /client/New()
+ src.tooltips = new /datum/tooltip(src)
+
+Usage:
+- Define mouse event procs on your (probably HUD) object and simply call the show and hide procs respectively:
+ /obj/screen/hud
+ MouseEntered(location, control, params)
+ usr.client.tooltip.show(params, title = src.name, content = src.desc)
+
+ MouseExited()
+ usr.client.tooltip.hide()
+
+Customization:
+- Theming can be done by passing the theme var to show() and using css in the html file to change the look
+- For your convenience some pre-made themes are included
+
+Notes:
+- You may have noticed 90% of the work is done via javascript on the client. Gotta save those cycles man.
+- This is entirely untested in any other codebase besides goonstation so I have no idea if it will port nicely. Good luck!
+ - After testing and discussion (Wire, Remie, MrPerson, AnturK) ToolTips are ok and work for /tg/station13
+*/
+
+
+/datum/tooltip
+ var/client/owner
+ var/control = "mainwindow.tooltip"
+ var/file = 'code/modules/tooltip/tooltip.html'
+ var/showing = 0
+ var/queueHide = 0
+ var/init = 0
+
+
+/datum/tooltip/New(client/C)
+ if (C)
+ owner = C
+ owner << browse(file2text(file), "window=[control]")
+
+ ..()
+
+
+/datum/tooltip/proc/show(atom/movable/thing, params = null, title = null, content = null, theme = "default", special = "none")
+ if (!thing || !params || (!title && !content) || !owner || !isnum(world.icon_size))
+ return 0
+ if (!init)
+ //Initialize some vars
+ init = 1
+ owner << output(list2params(list(world.icon_size, control)), "[control]:tooltip.init")
+
+ showing = 1
+
+ if (title && content)
+ title = "
[title]
"
+ content = "
[content]
"
+ else if (title && !content)
+ title = "
[title]
"
+ else if (!title && content)
+ content = "
[content]
"
+
+ //Make our dumb param object
+ params = {"{ "cursor": "[params]", "screenLoc": "[thing.screen_loc]" }"}
+
+ //Send stuff to the tooltip
+ owner << output(list2params(list(params, owner.view, "[title][content]", theme, special)), "[control]:tooltip.update")
+
+ //If a hide() was hit while we were showing, run hide() again to avoid stuck tooltips
+ showing = 0
+ if (queueHide)
+ hide()
+
+ return 1
+
+
+/datum/tooltip/proc/hide()
+ if(queueHide)
+ spawn(1)
+ winshow(owner, control, 0)
+ else
+ winshow(owner, control, 0)
+
+ queueHide = showing ? 1 : 0
+
+ return 1
+
+
+/* TG SPECIFIC CODE */
+
+
+//Open a tooltip for user, at a location based on params
+//Theme is a CSS class in tooltip.html, by default this wrapper chooses a CSS class based on the user's UI_style (Midnight, Plasmafire, Retro, etc)
+//Includes sanity.checks
+/proc/openToolTip(mob/user = null, atom/movable/tip_src = null, params = null, title = "", content = "", theme = "")
+ if(istype(user))
+ if(user.client && user.client.tooltips)
+ if(!theme && user.client.prefs && user.client.prefs.UI_style)
+ theme = lowertext(user.client.prefs.UI_style)
+ if(!theme)
+ theme = "default"
+ user.client.tooltips.show(tip_src, params, title, content, theme)
+
+
+//Arbitrarily close a user's tooltip
+//Includes sanity checks.
+/proc/closeToolTip(mob/user)
+ if(istype(user))
+ if(user.client && user.client.tooltips)
+ user.client.tooltips.hide()
diff --git a/code/modules/tooltip/tooltip.html b/code/modules/tooltip/tooltip.html
new file mode 100644
index 00000000000..9fa0702a2b3
--- /dev/null
+++ b/code/modules/tooltip/tooltip.html
@@ -0,0 +1,238 @@
+
+
+
+ Tooltip
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/world.dm b/code/world.dm
index 4c6451d6860..f5cfdee0401 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -52,8 +52,6 @@ var/global/datum/global_init/init = new ()
. = ..()
- sleep_offline = 1
-
plant_controller = new()
// Create robolimbs for chargen.
populate_robolimb_list()
@@ -67,6 +65,7 @@ var/global/datum/global_init/init = new ()
processScheduler.setup()
master_controller.setup()
+ sleep_offline = 1
#ifdef MAP_NAME
map_name = "[MAP_NAME]"
diff --git a/config/example/config.txt b/config/example/config.txt
index 1af839d039e..1ed02a543d1 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -73,6 +73,7 @@ KICK_INACTIVE
PROBABILITY EXTENDED 2
PROBABILITY MALFUNCTION 2
PROBABILITY NUCLEAR 3
+PROBABILITY ABDUCTION 2
PROBABILITY CHANGELING 3
PROBABILITY CULT 4
PROBABILITY EXTEND-A-TRAITORMONGOUS 5
diff --git a/html/changelog.html b/html/changelog.html
index efcb683d401..c2c1630cfe6 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -1,1344 +1,1394 @@
-
-
-
- Paradise Station Changelog
-
-
-
-
-
-
-
-
- Visit our IRC channel: #crew on neko.sneeza.me
-
-
-
-
-
-
-
- Current Project Maintainers:-Click Here-
- Currently Active GitHub contributor list:-Click Here-
- Coders: ZomgPonies, DaveTheHeadcrab, tigercat2000, FalseIncarnate, AuroraBlade, Tastyfish, Crazylemon64, KasparoVy
- Spriters: FullOfSkittles
- Sounds:
- Main Testers: Anyone who has submitted a bug to the issue tracker
- Thanks to: Baystation 12, /tg/station, /vg/station, NTstation, CDK Station devs, FacepunchStation, GoonStation devs, the original SpaceStation developers and Radithor for the title image. Also a thanks to anybody who has contributed who is not listed here :( Ask to be added here on irc.
- Have a bug to report? Visit our Issue Tracker.
- Please ensure that the bug has not already been reported and be as descriptive as possible about the circumstances under which the bug occurred.
-
-
-
-
-
-
-
14 April 2016
-
Aurorablade updated:
-
-
Removes the !!FUN!! of having headslugs gold core spawnable.
-
-
Fox McCloud updated:
-
-
Added in sounds (instead of a chat-based message) for when airlocks are bolted/unbolted
-
Added in sound for when airlocks deny access
-
cutting/pulsing wires will play a sound
-
ups nuke ops game mode population requirement from 20 to 30
-
Adds in mining drone upgrade modules to increase their health, combat capability, or reduce their ranged cooldowns
-
Adds in mining drone "AI upgrade" a sentience potion that only works on mining bots
-
Mining bots should be less likely to shoot you when attacking hostile mobs
-
Killer tomatoes actually live up to their name now and are hostile mobs
-
Killer tomatoes are an actual fruit now; activate it in your hands to make them into a mob
-
Killer tomatoes are directly mutated from regular tomatoes instead of blood tomatoes
-
Increased the yield of regular tomatoes by 1
-
Tweak some stats on the killer tomato seeds
-
Fixes the blind player preference not doing anything
-
Adds portaseeder to R&D
-
Scythes will conduct electricity now
-
Mini hoes play a slice sound instead of bludgeon sound
-
Plant analyzer properly has a description and origin tech
-
Can have hulk+dwarf mutations together
-
Can have heat+cold resist together
-
Can only remotely view people who also have remote view
-
Fixes cold mutation not having an overlay
-
Hallucinations will no longer tick down twice as fast as they should nor will they spawn twice as many hallucinations as they should
-
Incendiary mitochondria no longer asks who you want to cast it on (it always is meant to be cast on yourself)
-
Fixes permanent nearsightedness even when wearing prescription glasses
-
-
KasparoVy updated:
-
-
Head accessories now behave like facial hair: They will no longer be hidden by clothing items that BLOCKHEADHAIR (have the BLOCKHEADHAIR flag).
-
Wearing a piece of clothing that blocks head hair will no longer make head accessories (facial markings/horns/antennae) invisible until an icon update is triggered while the headwear is off.
-
-
Meisaka updated:
-
-
law manager no longer freaks out with Malf law
-
-
TheDZD updated:
-
-
Removes shitty Caelcode bees.
-
Hydroponics can now manage bee colonies, bees produce honeycombs that can be ground to obtain honey, a decent nutriment+healing chemical
-
Hydroponics can inject a queen bee with a syringe of a reagent to alter her DNA to match that reagent, meaning all honeycombs produced will contain that reagent in small amounts
-
Bees with reagents will attack with that reagent. It takes 5u of a reagent to give a bee that reagent.
-
Added the ability to make Apiaries and Honey frames with wood
-
Added the ability to make Royal Bee Jelly from 10 Mutagen and 40 Honey
-
Added the ability to make more Queen Bees from Royal Bee Jelly by using it on an existing Queen, to split her into two Queens
-
Removes some snowflakey mob behavior from bears, snakes and panthers.
-
Hudson is feeling punny.
-
Hostile mob AI should now be a bit more cost-efficient.
-
-
monster860 updated:
-
-
Adds area editing, link mode, and fill mode to the buildmode tool
-
-
-
12 April 2016
-
FalseIncarnate updated:
-
-
Adjusting the setting of a vendor circuit board is no longer random, but instead provides a select-able list.
-
Vendor Circuit Board design moved from the Circuit Imprinter to the Autolathe, acid requirement replaced by metal.
-
Burnt matches can no longer light cigarettes, pipes, or joints.
-
-
Fethas updated:
-
-
Nukes the cargo train code rscadd:Adds simple vehicle framework and converts secway/janicart/snowmobiles/bikes/cars/ambulance to it rscadd:Adds space speedbike, red and blue versions, yes you WILL need a spacesuit rscadd:Maps janicart and secway onto metastation (but not ambulance no pareamedic garage, no i am not mapping that)
-
You should now be able to operate on IPC eyes, SHOULD bugfix:hopefully surgery on diona works right
-
-
Fox McCloud updated:
-
-
Adds in TraitorVamp; game mode that's essentially like TraitorChan, but with a Vampire instead of a Changeling
-
Vampires cannot use holoparasites
-
Malf AI will automatically lose if it exits the station z-level
-
-
Tastyfish updated:
-
-
All cats can kill mice now.
-
E-N can't suffocate.
-
Startup time is now shorter.
-
Removed the Station Collision away mission from rotation, due to multiple conceptual and technical issues.
-
-
-
07 April 2016
-
Crazylemon64 updated:
-
-
Removes an offset from the advanced virus stealth calculation, causing viruses to be more stealthy than the sum of their symptoms.
-
Mulebots will now send announcements to relevant requests consoles on delivery again.
-
-
FalseIncarnate updated:
-
-
Adds logic gates, for doing illogical things in a logical manner.
-
Adds buildable light switches, for all your light toggling needs.
-
Fixes a resource duplication bug with mass driver buttons.
-
-
Fethas updated:
-
-
maybe makes them last longer...maybe..and fixes the event end message
-
-
Fox McCloud updated:
-
-
Maps in the slime management console to Xenobio
-
Reduces Xenobio monkey box count from 4 to 2
-
Fixes weakeyes having a negligible impact
-
Can spawn friendly animals with a new gold core reaction by injection with water
-
Hostile animal spawn increased from 3 to 5 for hostile gold cores
-
Swarmers, revenants, and morphs no longer gold core spawnable
-
Fixes invisible animal spawns from gold core/life reactions
-
Adds tape to the ArtVend
-
Can no longer use sentience potions on bots
-
Added in Plasma Dust reagent, acquired by grinding plasma sheets; it's more toxic than regular plasma and generates plasma gas when spilled onto turfs.
-
Slimecore reactions now require plasma dust as opposed to dispenser plasma
-
Added in new Rainbow slime; inject with plasma dust to get a random colored slime. Acquire by having 100 mutation chance on a slime when it splits.
-
Monkey Recycler can produce different types of monkey cubes; change the cube type by using a multitool on the recycler
-
Epinephrine/plasma reagents changing mutation rate has been removed
-
Mutation chance is inherited from slime generation to slime generation as opposed to being purely random.
-
New reactions added for red and blue extracts: red generates mutator, which increases mutation chance, and blue generates stabilizer, which decreases mutation chance.
-
Slime glycerol reaction removed
-
Slime cells are now high capacity cells (more power than before)
-
extract enhancer increases the slime core usage by 1 as oppose to setting it to three
-
slime enhancer increases slime cores by 1 as opposed to setting the core amount to 3
-
Chill reaction lowers body temperature slightly more so it doesn't just wear off instantly
-
Reduces Xenobio plasma sheets from 8 to 3 and removes that pesky boombox
-
Processors no longer produce 1 more slime core than intended
-
Less blank/spriteless/empty foods from the silver core reaction
-
Virology mix reactions now use plasma dust as opposed to plasma
-
Statues can no longer move/attack people unless they're in total darkness or all mobs viewing them are blinded
-
statues are invincible to anything other than full out gibbing.
-
Statues flicker lights spell range increased
-
Blind spell no longer impacts silicons
-
Fixes statues being able to attack/move whenever they feel like it, regardless of client statues
-
Fixes blind spell impacting the statue
-
-
Tastyfish updated:
-
-
Beepsky is no longer a pokemon.
-
pAI-controlled Bots now reliably speak human-understandable languages over the radio.
-
More floor blood for the blood gods. (Or rather, as much as there was supposed to be.)
-
-
tigercat2000 updated:
-
-
Items in your off hand will now count towards access.
-
-
-
02 April 2016
-
Crazylemon64 updated:
-
-
Metal foam walls will now produce flooring on space tiles
-
Syringes will now draw water from slime people.
-
-
FalseIncarnate updated:
-
-
Let's you know when your container is full when filling from sinks.
-
Prevents splashing containers onto beakers and buckets that have a lid on them.
-
Pill bottles can now be labeled with a simple pen.
-
Beakers/buckets (and pill bottles) now accept 26 character labels from pens.
-
-
Fethas updated:
-
-
Various spells have had a tweak to stun/reveal/cast, some other number stuff...
-
Nightvision
-
harvest code is now in the abilites file.
-
New fluff objectives
-
Hell has recently remapped its blood transit system and you can now once again crawl through blood. We are sorry for the-GIVE US YOUR SOUL!
-
-
FlattestGuitar updated:
-
-
Alcoholic beverages now have proper levels of ethanol in them. Good luck passing out after a beer.
-
-
Fox McCloud updated:
-
-
Adds in the Lusty Xenomorph Maid Mob; currently admin only.
-
Fixes xenomorph brains having the wrong sprite, no origin tech, and incorrect name
-
removes xenomorph egg from hotel
-
upgrades are no longer needed to for the available toys in the prize vendor
-
Implements Advanced Camera Consoles. A type of camera console that function like AI's vision style. Non-buildable/accessible.
-
Adds in Xenobiology Advance Cameras. A type of camera console that functions like advanced cameras, but only works in Xenobiology areas; can move around slimes and feed them with the console as well. Also non-buildable/accessible (for now).
-
Adds in cerulean slime reaction that generates a single use blueprint. On use it colors turfs a lavender color
-
Adds disease1 outbreak event
-
Adds appendecitis event
-
Roburgers now properly have nanomachines in them
-
Re-adds nanomachines
-
Experimentor properly generates nanomachines instead of itching powder
-
Fixes big roburgers having a healing reagent in them
-
Adds nanomachines to poison traitor bottles
-
Tajarans can now eat mice, chicks, parrots, and tribbles
-
Vulpkanin and Unathi can now eat mice, chicks, lizards, chickens, crabs, parrtos, and tribbles
-
fixes spawned changeling headcrab behavior
-
-
KasparoVy updated:
-
-
Incisions made at the beginning of embedded object removal surgery can now be closed in the same procedure.
-
-
ProperPants updated:
-
-
Maint drones have magboots.
-
Removed plastic from maint drones. Literally useless for station maintenance.
-
Increased starting amounts of some materials for maint drones and engi borgs.
-
Reduced the number of lines taken by Engineering cyborgs calling on materials stacks.
-
Operating tables can be deconstructed with a wrench.
-
Fixed and shortened description of metal sheets.
-
-
Tastyfish updated:
-
-
Bots can now be controlled by players, by opening them up and inserting a pAI. *beep
-
MULEbots can now access the engineering destination.
-
All MULEbot destinations should now have the correct load/unload direction, meaning the crates won't be dumped inside the flaps.
-
Diagnostic HUD's now give health and status information about bots.
-
MULEbot rampage blood tracks are now rendered correctly and handle UE traces as appropriate.
-
Bots should (hopefully) lag the game less now.
-
Beepsky contains 30% more potato.
-
Action progress bars are now smooth.
-
Clicking a filled inventory slot's square with an open hand now clicks the item in the slot.
-
Status displays now display the time when in Shuttle ETA mode and no shuttle activity is happening.
-
Shuttle ETA countdowns on status displays are now amber.
-
pAI's can now use the PDA chatrooms.
-
Adds treadmills to brig cells, to give the prisoners something productive to do.
-
-
TheDZD updated:
-
-
A lot of the guns and armor in the station collision, space hotel, academy, and wild west away missions have been removed/replaced.
-
Removes that fucking facehugger from station collision.
-
-
tigercat2000 updated:
-
-
Virus2 has been removed.
-
Virus1 is back. Viva la revolution.
-
You can now have up to 20 characters.
-
-
-
26 March 2016
-
Fox McCloud updated:
-
-
Adds in dental implant surgery. Implant pills into people's teeth.
-
Major rebalance and Shadowling update (https://github.com/ParadiseSS13/Paradise/pull/3986 for details). In general, Shadowlings can no longer enthrall or engage in Shadowling like behavior, pre-hatch. Post-hatch, shadowlings are much more powerful, with a ride array of New abilities such as extending the shuttle or making thralls into lesser shadowlings. Shadowling gameplay should not revolve almost entirely around darkness, as opposed to pre-hatch shenanigans.
-
Robotics now has a "sterile" surgical area for performing augmentations
-
Adds the FixOVein and Bone Gel to the autolathe
-
ensures all surgical tools have origin tech on them; lowers origin tech on FixoVein
-
-
KasparoVy updated:
-
-
Slime People can now wear underwear.
-
Slime People can now wear undershirts.
-
-
TheDZD updated:
-
-
NT has removed trace amounts of a highly-addictive substance from the "100% real" cheese used in cheese-flavored snacks. As a result, incidence rates of crewmembers becoming addicted to Cheesie Honkers should reduce to zero.
-
After receiving complaints about crewmembers often being unable to physically function without a back-mounted barrel of coffee, NT has replaced station all sources of coffee on the station, including coffee beans themselves with a largely decaffeinated version. It was funny the first time almost every crewmember aboard the NSS Cyberiad was lugging around their own oil barrel filled with coffee, it wasn't so funny, nor good for productivity the eighteenth.
-
-
-
25 March 2016
-
Crazylemon64 updated:
-
-
You now will actually have the correct `real_name` on your DNA.
-
No more roundstart runtimes regarding IPC hair.
-
Mitocholide rejuv will work more usefully now.
-
Limbs and cyborg modules will no longer appear in your screen.
-
Cyborg module icons are now persistent throughout logging in and out.
-
Various cyborg modules, like engineering, now use the proper icon.
-
-
FlattestGuitar updated:
-
-
Adds confetti grenades.
-
-
Fox McCloud updated:
-
-
Fixes Sleeping Carp combos not having an attack animation
-
Fixes several chems not properly healing brute/burn damage, consistently, as intended
-
-
KasparoVy updated:
-
-
Unbranded heads and groins no longer invisible.
-
Zeng-hu left leg will now be in line with the body when facing south.
-
-
-
22 March 2016
-
Crazylemon64 updated:
-
-
Repairs all sorts of eldritch occurences that happen when you put an organic head on an IPC body, as well as some decapitation bugs
-
Makes heads keep hair on removal
-
Amputated limbs from a DNA-injected individual now will keep their appearance of the DNA-injected person
-
Wounds will vanish on their own now
-
Admins now have an "incarnate" option on the player panel when viewing ghosts for quick player instantiation
-
Fixes a runtime regarding failing a limb reconnection surgery
-
Copying a client's preferences now overrides the previous mob's DNA
-
A DNA injector is now more thorough, and affects the DNA of mobs' limbs and organs
-
DNA-lacking species can no longer be DNA-injected
-
Brains are now labeled again
-
Splashing mitocholide on dead organs will make them live again.
-
The body scanner now detects necrotic limbs and organs.
-
pAIs and Drones are now affected by EMPs and explosions while held.
-
-
Fethas updated:
-
-
Adds a surgery for infection treatmne/autopsys that is simply cut open, retract, cauterize
-
fixes a dumb error in internal bleeeding surgerys
-
Chaos types no longer random teleport, but will make the target hallucinate everyone looks like the guardian.
-
-
FlattestGuitar updated:
-
-
Adds a snow, navy and desert military jacket.
-
-
Fox McCloud updated:
-
-
Removes random 1% chance to heal fire damage
-
Removes passive healing from resist heat mutation
-
Regen mutation heals every cycle (albeit less, on average), but doesn't cost hunger
-
Fixes not being able to speak over xeno common or hivemind when you receive the Xeno hive node
-
Adds in the ability to transfer non-locked metal+glass only designs from the protolathe to autolathe
-
Changes Outpost Mass Driver to prevent accidental spacings
-
Shadow people no longer dust on death, are rad immune+virus immune, and can be cloned. Slip immunity removed
-
Shadowlings no longer get hungry or fat and no longer dust on death
-
-
KasparoVy updated:
-
-
The ability to change your head, torso and groin as an IPC in the character creator. Non-IPCs cannot access the parts.
-
Head, torso and groin sprites for all mechanical limb/bodypart brands but Morpheus and the unbranded ones (since those already exist) from Polaris.
-
Faux-eye optics for non-Morpheus heads.
-
The ability to change optic (eye) colour if you've got a non-Morpheus head.
-
The ability to choose human hair styles (wigs) and facial hair styles (postiche) with non-Morpheus heads. Non-Morpheus heads cannot choose screens. Conversely, Morpheus heads cannot choose wigs or facial hair.
-
Two hair styles from Polaris.
-
The ability for IPCs to wear undergarments (shirts and trousers).
-
Antennae (colourable) for IPCs.
-
IPC monitor adjustment verb will now adjust optic colour if the head is non-Morpheus.
-
Combat/SWAT boots can now be toecut and jacksandals can't.
-
ASAP fix to what would've broken the ability to configure prostheses in character creation.
-
Adjusted masks no longer block CPR (including bandanas).
-
You can no longer run internals from adjusted breath masks (or airtight adjustable masks in general).
-
-
Regens updated:
-
-
Robotic hearts will now properly give the mob a heart attack instead of just damaging it when EMP'd
-
Assisted organs will now also take damage from EMP's
-
Internal robotic and assisted organs will now actually take damage from EMP's
-
-
Tastyfish updated:
-
-
Adds PDA chatrooms. Post memes! Talk to your fellow collaborators! Get caught!
-
You can now set the PDA messenger to automatically scroll down to new messages.
-
Pet collars now act as death alarms and can have ID's attached to them.
-
All domestic animals can now wear collars.
-
You can now make video cameras at the autolathe.
-
-
TheDZD updated:
-
-
Fixes an instance of old code being so incredibly, unbelievably, makes-me-want-to-stab-myself-in-the-eye-edly idiotic.
-
-
TravellingMerchant updated:
-
-
Kidan have new sprites!
-
-
tigercat2000 updated:
-
-
Nukeops now have an assault pod, they can use it for 30 TC. Loud and mean.
-
Lighting overlays can no longer go below 0 lum_r/g/b
-
Shuttles will work with lighting better.
-
Wizards can no longer teleport to prohibited areas such as Central Command.
-
-
-
16 March 2016
-
Crazylemon64 updated:
-
-
Being in godmode now makes you immune to bombs
-
Science members now get compensated when they ship tech disks to centcomm.
-
Science crew are no longer paid when they "max" research.
-
Roboticists now get credit for making RIPLEYs and Firefighters
-
Slime people can now regrow limbs on a more lax nutrition requirement
-
Enhances the nutripump+ to let slime people regrow limbs with it active
-
Skeletons, slime people, IPCs, and Diona no longer leave blood when hit
-
Rejuvenating a slime person will no longer clog up their "blood"
-
Slime people will now regenerate "blood" from having water in their system
-
The decloner can now be created again
-
Environment smashing mobs can now destroy girders.
-
-
DaveTheHeadcrab updated:
-
-
Removes the check for species on the update_markings proc.
-
-
FalseIncarnate updated:
-
-
Xeno-botany is now more user-friendly, and less random letters/numbers.
-
Hydroponics now has a connector hooked up to the isolation tray and a new connector in their back room for those strange plants that like spewing plasma or eating nitrogen.
-
You can now (finally) build the xeno-botany machines, and science can print off their respective boards.
-
-
Fethas updated:
-
-
Syringes are no longer sharp
-
byond likes direct pathing so item/organ/internal not item/organ even if it shouldn't be in the internal_organs list. This was preventing the list from doing stuff correctly.
-
fixed ipc organ manipulation surgery, you can now insert a replacment ipc organ directly instead of needing a screwdriver in your main hand
-
nanopaste now will repair organs with robotic >= 2 instead of > 2 cuase i am an idiot
-
Fix, hopefully, for a runtime for clientless mobs whos head are cut off...
-
Hopefully fixes issues with diona eyes
-
Though shalt not eat robotic organs..including cybernetic implants..
-
ITS SURGERY_STEP/DETHRALL NOT SURGERY_STEP/INTERNAL/DETHRALL
-
-
FlattestGuitar updated:
-
-
Adds three new synthanol drinks
-
Drinking synthanol is now a bad idea if you're organic
-
A glass of holy water now looks like normal water
-
-
Fox McCloud updated:
-
-
Adds in drink fizzing sound
-
Drink/bartender recipes use this new fizzing sound in addition to a few other recipes
-
Adds in a fuse burning sound
-
Bath salts, black powder, saltpetre, and charcoal use this sound now
-
Adds in a matchstrike+burning sound
-
Lighting a match triggers this new sound
-
Adds in scissors cutting sound
-
Cutting someone's hair uses this new sound
-
Adds in printer sounds
-
printing off papers from various devices typically uses these sounds
-
Adds computer ambience sounds
-
black box recorder and R&D core servers both play this sound at random rare intervals
-
Reduces the tech level (and requirement) for nanopaste
-
Reduces the tech level (and requirement) for the plasma pistol
-
Removes Nymph and drone tech levels
-
Reduces tech levels on the flora board
-
Adds tech level requirements to mech sleepers, mech syringe guns, mech tasers, and mech machine guns
-
Increases tech cost of the decloner
-
Removes the pacman generators
-
Removes emitter
-
Removes flora machine (functionless anyway)
-
Removes the pre-spawned nanopaste
-
Removes space suits
-
Removes excavation gear
-
Replaces the soil with actual hydroponic trays (more aesthetic than anything)
-
Removes most external asteroid access from the station
-
Excavation storage is now generic science storage
-
removed the plasma sheet
-
Fixes augments not showing up in R&D unless specifically searched for
-
Fixes some augments being unavailable in mech fabs
-
Fixes augments having no construction time
-
Fixes xenos not gaining plasma when breathing in plasma
-
Fixes plasma reagent not generating plasma for a person
-
Screaming has different sounds based on being male or female
-
Implements Goon's screaming sounds.
-
Screaming tone is now based on age of character instead of being random
-
Ups the cooldown on screaming from 2 seconds to 5 seconds
-
Removes chance for Whilhelm scream
-
Borgs can now scream
-
Monkey's now have a unique screaming sound
-
IPCs now scream like cyborgs
-
Updates slot machines to have higher jackpots and more payouts with more interesting sounds
-
Adds X-Ray, Thermal, Anti-tun, and Reviver implants to the nuke ops uplink (augments come with one auto-implanter) rcsadd: Adds in augment auto-implanter, which inserts and implant without surgery
-
tweaks a large number of chems; behaviors are largely retained, but new flavor messages, probabilities, etc may be present; overall, you can expect chems to do the same thing
-
Tabun re-replaced with Sarin rcsadd: New reagent: cholesterol: if overdosed on, it can cause a heart attack--fatty foods, cheese, eggs, and some meats all produce cholesterol in your body.
-
Mixing Sarin, Meth, or Cyanide will poison in a very small area of the reaction if you're not on internal OR not wearing a gas mask
-
Chemist warddrobe now has two gas masks
-
Teslium will now impact synthetics AND organics
-
Fixes facehuggers hugging already infected people
-
Fixes facehuggers hugging people while dead
-
Fixes Embryo's developing twice as fast as they should
-
Fixes up some behaviors with xeno eggs
-
Xeno acid can now melt through floors and the asteroid
-
Xeno's now play the gib sound when actually gibbed
-
Implements Changeling headcrabs/headspiders
-
Fixes xenos not throwing their organs when gibbed
-
Fixes swallowed mobs not being ejected when a human is gibbed
-
Adds in spider eggs reagent, an infectious reagent that requires surgery to correct
-
Fixes EMPs causing eye implant users to be permanently blind
-
Increases bag of holding's storage capacity
-
Removing a heart no longer kills the patient instantly, but induces a heart attack
-
Demon hearts will not work
-
Should now actually be able to re-insert hearts
-
Reworks addictions to bettter differentiate them betweeen overdosing and make them more realistic.
-
changes which chems are addictive, currently, the follow reagents are now addidctive: meth, crank, krokodil, bath salts, space drugs, perfluoradecalin, omnizine, coffee, nicotine, fliptonium, ultra lube, surge, fake cheese, weird cheese, ephedrine, diphenhydramine, teporone, and morphine
-
sleepers help you recover from addiction faster
-
Can now make cable coils in autolathes
-
Fixes the slot machine announcements not displaying properly
-
-
Tastyfish updated:
-
-
The super fart mutation now gives you a spell-like ability instead of augmenting the emote.
-
Vampire abilities are now in their own Vampire tab, as well being action buttons at the top, like spells.
-
Cloning a vampire no longer makes them lose their abilities.
-
Vampires can no longer hypnotize chaplains.
-
Being a full vampire (500+ total blood) actually makes you immune to holy water reliably now.
-
Some old away missions are back: Academy, Black Market Packers, Space Hotel, Station Collision, and Wild West. Go out and round up some hostiles!
-
Shuttle consoles now pair up to the engineering, mining, research, or labor shuttle when built or used before pairing, as long as the shuttle is near the console, or the shuttle is moved to be nearby.
-
-
monster860 updated:
-
-
Mining station now has a podbay.
-
Ore scooping module for the spacepod.
-
Three mining lasers for spacepod: Basic, normal, and burst.
-
Shooting weapons south or west of spacepod will actually hit adjacent targets now, and won't shoot through walls anymore.
-
-
taukausanake updated:
-
-
Mice can now be picked up like diona
-
-
-
08 March 2016
-
Crazylemon64 updated:
-
-
Slime people are now more vulnerable to low temperatures.
-
Slime people are able to slowly regrow limbs at a high nutrition cost.
-
Slime people now slowly shift color based on reagents inside of them - disabled by default, toggle it with an IC verb
-
Slime people's cores are more vulnerable to damage
-
Species-related abilities now properly are removed - no more vox hair stylists, unfortunately.
-
-
Fethas updated:
-
-
the nest buckle now looks for the right organ path
-
Fixed some sprites.
-
No more putting no drops in rechargers,
-
-
Fox McCloud updated:
-
-
Implement's goon's gibbing sound
-
Implement's goon's gibbing sound for robots/silicons
-
Removes old gibbing sound
-
-
Spacemanspark updated:
-
-
Lazarus Injector's can now be emagged to activate their special features, alongside using EMPs on them.
-
-
Tastyfish updated:
-
-
Mimes now have a new ore, Tranquillite, used to bring peace and quiet to the station.
-
There are also permanent invisible walls and silent floors that can be made from tranquillite.
-
The Recitence mech is now buildable!
-
The Recitence mech is now playable!
-
Mid-round selection for various creatures and antagonists now consistently asks permission.
-
-
TheDZD updated:
-
-
Adds justice helmets with flashing lights and annoying sirens.
-
Adds crates containing said helmets.
-
Also includes a version of the helmet that can only be spawned by admins, and just has a single red light in the center instead of the stereotypical police blinkers.
-
-
monster860 updated:
-
-
Space pod transitions are now fixed.
-
-
-
07 March 2016
-
Crazylemon64 updated:
-
-
People with VAREDIT can now write matrix variables
-
People with VAREDIT can now modify path variables
-
Refactors the variable editor code somewhat.
-
The buildmode area tool now shows reticules of what you've selected.
-
Switching mobs while using the buildmode tool no longer screws up your UI.
-
Refactors buildmode so it's no longer a special-case system.
-
Adds a copy mode to build mode, which lets you duplicate objects.
-
Any mob in buildmode can work at the fastest possible rate.
-
Fixed a problem where the icons of a person would not correctly update when changing gender.
-
One's hairstyle only adjusts on gender change if it's incompatible with your new gender.
-
Fixed a bug where a person's icon would only be updated if their sprite had a new layer added or removed.
-
You no longer lose your name when monkeyized and reverted - you'll still look like a monkey while you're a monkey, though.
-
Your organs will now match your gender when you are cloned.
-
Skeletons (when a body rots) no longer retain a fleshy torso.
-
Putting people in an active cryotube now produces the message on insertion, rather than release.
-
An EMP'd cloning pod will now display its sprites correctly.
-
-
FalseIncarnate updated:
-
-
Water Balloons can be filled from more sources than just beakers and watertanks.
-
-
Fox McCloud updated:
-
-
Fixes the "yeah" glasses so the sound doesn't vary and a message is displayed, on use
-
Noir mode only activates when the glasses are equipped to your actual eyes
-
Noir Glasses mode can be toggled on or off (defaults to off)
-
Mimes can no longer use spells and continue speaking
-
Mime abilities are now spells with proper icons
-
Mime wall now last 30 seconds, up from 5
-
forecfields/invisible walls now block air currents
-
Adds the Sleeping Carp scroll to the uplink for 17 TC
-
Fixes Shadowlings being able to use guns
-
Fixes sleeping carp scroll users being able to use guns
-
Fixes the Experimentor throwing one item at a time
-
Experimentor menu now automatically refreshes after use
-
Lowers surgery times across the board
-
Removes scalpels causing 1 damage on successful surgery
-
Removes random chance to fracture ribs on a successful surgery
-
Mining drills now have an edge
-
-
KasparoVy updated:
-
-
Jackets who have the verb available but are not intended to be adjusted will not have the action button available.
-
You can now adjust breath masks while buckled into beds and chairs.
-
Known issues with adjusted jackets using the wrong sprites.
-
Blueshield coat in hand and item icons.
-
Hulks now rip apart adjustable and droppable jackets. The items stored in the jackets get dropped on the ground.
-
-
Tastyfish updated:
-
-
Infrared emitters can now be rotated while already in an assembly via the UI popup.
-
The infrared emitter can no longer be hidden inside of boxes and still work.
-
The beach now has a border and is splashier.
-
Gives Psychiatrist a paper bin, clipboard, and multicolored pen.
-
Gives the Librarian / Jouralist a multicolored pen.
-
Gives the NT Representative a clipboard.
-
The ethanol-based neurotoxin drink is now called Neuro-toxin to avoid being confused with the deadly toxin.
-
-
VampyrBytes updated:
-
-
Fixes emotes ending with s needing 2. Emotes now work with grammatical options eg ping or pings, squish or squishes
-
Updated emote help with missing emotes. Help will also show any species specific emotes for your current species
-
-
-
26 February 2016
-
FalseIncarnate updated:
-
-
Chocolate can now make you fat, as expected.
-
-
Fox McCloud updated:
-
-
stamina damage now regenerates slightly faster
-
Adds in whetstones for sharpening objects
-
Kitchen vendor starts off with 5 salt+pepper shakers
-
Can now point while lying or buckled
-
Fixes Capulettium Plus not silencing
-
Fixes slurring, stuttering, drugginess, and silences last half of what they should
-
-
KasparoVy updated:
-
-
Jackets that start open are recognized as actually being open already now. This fixes a bug with certain items that don't have an open state, or cases where it ended up giving an item the wrong icon (one that didn't exist)
-
-
Spacemanspark updated:
-
-
Fixes synthetics from giving off the proper message in the chat box when using the *yes and *no emotes.
-
-
Tastyfish updated:
-
-
Wheelchairs, janicarts, and ambulances can now go through doors according to the user's driver's access.
-
-
-
24 February 2016
-
Crazylemon64 updated:
-
-
The defib should be more reliable on people who have ghosted
-
The defib will now give a message if the ghost is still haunting about
-
Attacking someone with an accessory will now let you put things on them without having to strip them.
-
Borers will now properly detach upon death of a mob they are controlling
-
Borers can now see their chemical count while in control of a mob
-
Borers can now silently communicate with their host - this is not available to the host until the borer has either begun to communicate, or has taken control at least once - this is to avoid spoiling that the borer exists
-
Borers won't be able to talk out loud inside of a host, by default - they can remove this safeguard with a verb under their borer tab. Borer hivespeak is unaffected.
-
Borers infesting and hiding are now silent.
-
Made borer's chem lists more nicely formatted
-
No more superspeed attacking simplemobs
-
New players now show up properly under the "who" verb when used as an admin
-
Mining drones will now automatically collect sand lying around
-
RIPLEYs can now drill asteroid turfs for sand
-
You can now load exosuit fuel generators with items containing their material - this means you can fuel yourself off of ores, but this will be highly inefficient and cost you mining points later on, as you can't take fuel back out.
-
You can now load the fuel generators from an ore box.
-
The plasma generator now produces 3x as much power from the same amount of fuel - this lets it even remotely compete with the uranium generator.
-
You can now light cigarettes off of burning mobs.
-
Exosuit tracking beacons now fit in boxes - prior, they were far too large for even a backpack, as they shared the same size as all other mecha equipment
-
Miners can now collect ore by walking over it with an ore satchel on.
-
-
FalseIncarnate updated:
-
-
Adds prize tickets as a replacement for physical arcade prizes.
-
Adds a buildable prize counter to exchange tickets for prizes.
-
Adds a bike. Despite what Prof. Oak might claim, you can ride it indoors.
-
Adds colorful wallets, for that old school arcade pride.
-
Fixes accidental removal of plump helmet biscuit recipe.
-
Temporarily adds a prize counter to the bar (Cyberiad) or dorms (MetaStation), and adds a max upgrade one to the Ninja Holding Area (Cyberiad z2)
-
Fixes Metastation. Seriously fixed a lot, just read the PR description for the full list.
-
-
FlattestGuitar updated:
-
-
Adds IPC alcohol and a few derivative drinks
-
IPCs can now drink and be fed from glasses
-
-
Fox McCloud updated:
-
-
Laser eyes mutation no longer drains nutrition
-
splits the EMP kit into two things: the standard EMP kit (2 grenades and an implant), and the EMP flashlight by itself
-
nerfs heart attacks so they do less damage
-
Pickpocket gloves now put the item you strip into your hands as opposed to the floor
-
Picketpocket gloves can now silently strip accessories
-
Pickpocket gloves will no longer give a message for messing up a pickpocket
-
-
KasparoVy updated:
-
-
Adjusting masks while they are not on the face will no longer turn off internals.
-
Adjusting masks while they are not on the face will now cause the mask to hide/reveal the wearer's identity the next time it's worn as intended.
-
Adds the ability to open/close bomber jackets.
-
Adds a security bomber jacket. This jacket inherits the protection and storage capabilities as a standard Security vest with additional bomber jacket benefits.
-
Adds UI button in top left of screen for jacket adjustment.
-
Replaces the standard bomber jacket in the Pod Pilot bay with the Security version.
-
Centralizes jacket/coat adjustment handling.
-
All jackets start closed by default.
-
Geneticist duffelbag on-mob sprite (for all species).
-
Vox-fitted backpacks, satchels, ERT backpacks, duffelbags and defib unit.
-
Refactors back-item icon generation.
-
Typo in the description of Santa's sack.
-
Missing punctuation and gender macros in the description of the bag of holding.
-
The tweak to back-icon generation fixes a bug where the wrong sprite name was being used to generate back-item icons.
-
-
PPI updated:
-
-
Adds the ability to hide papers in vents. You can now leave a romantic love letter, exchange information in secret, or hide papers infused with the power of nar'sie from sight.
-
-
Regen1 updated:
-
-
Adds the Immolator laser gun, a modified laser gun with 8 shots that will ignite mobs, can be made in R&D
-
-
Spacemanspark updated:
-
-
Adds *yes and *no emotes to Synthetics. Glory to Synthetica.
-
-
Tastyfish updated:
-
-
The PDA system has been completely redone behind the scenes! It should be functionally similar, although there is now a Home and Back button at the bottom as appropriate.
-
All of the heads now have multicolored pens.
-
EngiVend now has 10 camera assemblies.
-
Borgs can now use vending machines.
-
There are now picture frames that can be made from the autolathe or wood planks for papers, photos, posters, and canvases!
-
-
pinatacolada updated:
-
-
Makes the Protect Station AI law board no longer consider people that damage the station crew, instead of human
-
-
ppi updated:
-
-
When revealed Revenants will not be able to move at the maximum move speed, nor be able to pass through any solid object, like walls, windows, grills, computers and mechs.
-
-
-
13 February 2016
-
Crazylemon64 updated:
-
-
Relaxes the check on what atoms you can follow to any movable atom
-
Mages are now more ragin
-
Admins can now adjust the total number of wizards at runtime by tweaking either max_mages, or players_per mage
-
-
DaveTheHeadcrab updated:
-
-
Adds new worn icons for duffelbags to better reflect their size, compliments of WJohn at /tg/
-
-
FalseIncarnate updated:
-
-
Adds burritos, made from cutlets, beans, rice, capsacin oil (hotsauce), cheese, and flat dough (because we lack proper tortillas) in the microwave.
-
Adds chimichangas. You know you want a deep-fried burrito.
-
-
Fox McCloud updated:
-
-
Updates some spell icons with better/higher quality icons
-
Updates unarmed attacks to allow for more customization
-
Updates martial arts so they factor in specie's attack messages and sounds
-
Re-balances Sleeping Carp fighting style
-
Re-balances Bo Staff
-
Rebalances Golem: they should now be spaceproof, fire+cold proof, rad proof, virus immune, clonable, parapen+syringe gun immune, deal increased melee damage. Their armor has been reduced to 55 melee across the board, their slip immunity removed, pain immunity removed, and they're slightly slower
-
Fixes Ei Nath generating two brains
-
Ensures the Necromatic Stone generates actual skeletons
-
Can now strip PDA/IDs from Golems
-
Fixes sleeping carp grab not being an instant aggressive grab
-
Fixes an exploit with declaring war on the station
-
-
KasparoVy updated:
-
-
Orange and purple bandanas for all station species.
-
The ability to colour bandanas with a crayon in a washing machine.
-
Refactors the bandana adjustment system.
-
Minor adjustments to Tajaran and Unathi bandana east/west sprites.
-
Adjusting a bandana will now take if off of your head/face and put it in an available hand. If both hands are available, it goes in the selected hand.
-
Adjusting a coloured bandana will no longer revert it to the original coloured icons anymore.
-
Adjusting a bandana from mask-style to hat-style means the bandana won't obscure your identity anymore.
-
Greys now use re-positioned smokeables. They no longer smoke out the eyes.
-
-
TheDZD updated:
-
-
Fixes spacepods being able to shoot through walls.
-
Lowers spacepod weapons fire delay.
-
Increases spacepod weapons energy costs.
-
Makes spacepods move at speeds not rivaling those of photon beams. They are now a hair bit faster than a person with a jetpack.
-
Reduces battery costs for spacepod movement.
-
-
-
10 February 2016
-
Crazylemon64 updated:
-
-
The cloner now checks for NO_SCAN on the brain when scanning - unclonable species are now truly unclonable. You are still able to revive them with a brain transplant and a defib, however.
-
A tier-4 DNA scanner linked to a cloning system will now be able to reproduce a body from a brain's DNA, in event of the original corpse being gibbed or similar.
-
Species with organic limbs and NO_BLOOD will no longer bleed (though still on hit - write that off as "bone powder")
-
Skeletons now lack internal organs, except for the runic mind which exists in their head - an analogue for the brain
-
Skeletons that drink milk will be regenerated at a moderate pace, have a small chance of mending bones, and will praise the great name of mr skeltal
-
Adds a reagent system for species reacting to specific reagents
-
Slime People can now select from all human hairstyles, and their "hair" will be tinted a shade of their body.
-
Increases the frequency of the cortical borer event.
-
People with borers cannot commit suicide - this applies to a controlling borer, too.
-
Borers can no longer overdose their hosts.
-
Borers can now inject Saline-Glucose, Spaceacillin, Hydrocodone, Mitocholide, Salbutamol, Capulettium+, and Charcoal. Styptic was removed, as it's pathetic at healing when directly injected. Salicyclic acid was removed too, as its functionality is duplicated by both hydrocodone and saline-glucose.
-
A mind trapped by a cortical borer can now understand things it could understand when normally in its body.
-
Changes chemistry's welding tank to a wall-mounted version, to increase the room available.
-
You can now gib butterflies and lizards with a knife
-
Ghosts can now follow mecha
-
You can now access an R&D console by emagging it - it did nothing before.
-
Walls will now properly smooth and show damage.
-
Fixes the dialog that occurs when the AI shuts off to actually do what it says it does
-
-
Fox McCloud updated:
-
-
Fixes not being able to attach IEDs to beartraps
-
Can no longer spamclick someone to death using headslamming on a toilet/urimal
-
Toilet/urinal headslamming now plays a sound
-
Toilet headslamming damage reduced slightly
-
Can now fill open reagent containers in a toilet to receive "toilet water".
-
No more message spam when someone fills a container using a sink
-
Can now wash your face using a sink, which washes away lipstick and wakes you up slightly
-
Washing things will now use progress bars
-
Ensures consuming a single syndicate donk pocket won't get you addicted to meth
-
Kinetic Accelerators and E-bows automatically reload
-
-
Glorken updated:
-
-
Added a Knight Arena for Holodeck.
-
Added red and blue claymore sprites.
-
Changed overrided to overrode when emagging Holodeck computer.
-
-
KasparoVy updated:
-
-
Vox versions of the Officer SWAT sechailer + HOS SWAT sechailer + Warden SWAT sechailer.
-
Resprited versions of most Human masks to fit Unathi, Tajara and Vulpkanin.
-
Warden now gets their own version of the SWAT sechailer in their locker.
-
HOS now gets the appropriate version of the SWAT sechailer in their locker.
-
Repositioned smokeables now available for Vox, Unathi, Tajara and Vulpkanin.
Corrects all non-Human species' breath mask (incl. surgical/sterile mask) down-state icons to use the right position style.
-
Minor adjustments to Tajaran breath mask up-state sprites.
-
-
PPI updated:
-
-
Adds a reconnect button to the File menu in the client.
-
Adds head patting
-
-
Regen updated:
-
-
Powersink can now drain a lot more power before going boom
-
Buffed the powersinks drain rate
-
Buffed explosion from an overloaded powersink, try to find it instead of overloading the grid.
-
Admin log warning before the powersink explodes
-
-
Spacemanspark updated:
-
-
Miners can now utilize the power of mob capsules to take along their lazarus injected mining creatures!
-
Store your Pokemo- er, sorry, I mean mining mobs that you've captured in the lazarus capsule belt.
-
-
Tastyfish updated:
-
-
Species that don't breathe can kill themselves now!
-
Suicide messages are now catered to your species.
-
Shortened the default pill & patch name when using the ChemMaster.
-
The chaplain now has a service radio headset, as Space Jesus intended.
-
-
TheDZD updated:
-
-
When Ahelping, "Question" is now "Mentorhelp" and "Player Complaint" is now "Adminhelp."
-
Mentorhelps and PM replies from mentors appear in a bold aqua blue color.
-
Adminhelps and PM replies from admins appear in a bold bright red color.
-
PM replies from players appear in a dull/dark purple color.
-
Adds admin attack log to players being converted to cult.
-
Adds shadowling thrall jobbans.
-
Jobbanned players who are converted to shadowling thrall, revolutionary, or cultist will have the control of their body offered up to eligible ghosts.
-
-
-
31 January 2016
-
Crazylemon64 updated:
-
-
Syndicate borgs can now interact with station machinery
-
People with slime people limbs can now *squish
-
Skrell's vulnerability to alcohol is checked on their liver, now - a liver transplant will let them take alcohol like a champ - lacking a liver will have the same effect as being a skrell, when drinking
-
-
FalseIncarnate updated:
-
-
Adds in the Magic Eight Ball toy, found in Claw Game prize orbs.
-
Adds in the Magic Conch Shell, an admin-only shell of power.
-
-
Fox McCloud updated:
-
-
Updates Summon Guns and Magic to include many of the new guns
-
Summon Guns/Magic can no longer be used during Ragin' Mages
-
-
Tastyfish updated:
-
-
The emergency shuttle status in the Status tab now has ETA/ETD/etc like before.
-
Code Gamma+ now has a 5 minute emergency shuttle call, like Red.
-
-
pinatacolada updated:
-
-
Adds NanoUI to the operating computer
-
Adds health announcing, critical and oxygen damage aural alerts to the computer, with a menu to selectively turn them on and off
-
-
-
29 January 2016
-
Crazylemon updated:
-
-
The DNA scanner has now undergone a seminar to recognize fake identities; It will now scan the actual person's identity, rather than their disguise (read: wearing a mask with or without someone else's ID).
-
Matter eater now allows you to eat humans as if you were fat.
-
Eating mobs with an aggressive grab now generates attack logs.
-
-
Crazylemon64 updated:
-
-
For a short while, there was a clerical error where all AI communications equipment was replaced with bananas. This has now been fixed.
-
Ghosts can now see the contents of smartfridges and look at the drone console
-
Humans now only produce one message when shaken while SSD
-
The supermatter no longer will irradiate everyone, everywhere, when it explodes.
-
Writing on paper will now add hidden admin fingerprints, so that you can't forge mean notes in someone else's name.
-
Brains are no longer able to escape their brain by being a sorcerer.
-
Astral projecting with other runes on the same tile will now no longer prevent you from re-entering
-
Voxxy that is become ex-voxxy no longer carry voxxy appearance! yaya!
-
-
FalseIncarnate updated:
-
-
Allows plants to be identified as enhanced*. Enhancing plants results from using reagents (like saltpetre) that affect the stats of a seed instead of using mutagens/machines. *May not meet standards for being classified as "organic produce". (This was already possible, just renames enhanced plants for easier differentiation)
-
-
Fox McCloud updated:
-
-
Fixes mutadone not working with some genetic mutations
-
Fixes banana honk and silencer being alcoholic
-
Fixes Kahlua being non-alcoholic
-
Fixes polonium not metabolizing
-
Fixes being able to receive free unlimited boxes from the Merchandise store
-
Adds in wooden bucklers
-
Re-adds roman shield to the costume vendor
-
Buffs Riot shield damage from 8 to 10
-
Adds in a Skeleton race
-
Tweaks the skeletons colors to be more realistic and to blend in less with the floor
-
Adds in lichdom spell for the wizard
-
Adds in lesser summon guns spell for wizard
-
adds in Mjolnir and the singularity hammer as weapons the wizard can purchase
-
Wizard can purchase the charge spell from the spell book
-
Wizard can purchase a healing staff from the spell book
-
Tweaks and lowers spell costs of utility spells for wizard
-
Re-organizes the spellbook to be better divided into categories and have a better window size
-
Knock now opens+unlocks lockers
-
Magic Missile has a slightly longer cooldown and no longer deals damage, but has a lower cooldown is upgraded
-
-
KasparoVy updated:
-
-
Navy blue Centcom Officer's beret for use by the Blueshield.
-
Adds the new navy blue beret to the Blueshield's locker.
-
Gives the Blueshield's berets (black and navy blue) the exact same strip delay and armour as the Security Officer's beret.
-
Adds TG energy katana back and belt sprite.
-
Bo staff back sprite.
-
Adjusts energy katana sprites to make the weapon stand out a bit more from the regular katana.
-
Cutting open the toes of footwear so species with feet-claws can wear them.
-
Toeless jackboots.
-
Cleans up glovesnipping and lighting a match with a shoe.
-
Lighting a match with a shoe produces a more appropriate message, handled at the same standard as glove-snippingboot-cutting.
-
-
Tastyfish updated:
-
-
Cargonia now has its own section in the manifest.
-
-
TheDZD updated:
-
-
Due to budget cuts and reports of operatives accidentally firing enough bullets to reach a state of what our scientists refer to as "enough dakka," Syndicate High Command has decided to restore the Syndicate Strike Team arsenal to using standard-issue L6 SAW ammunition.
-
-
-
24 January 2016
-
KasparoVy updated:
-
-
Fixes markings overlaying underwear.
-
Nude icon in underwear.dmi
-
Fixes Vox robes not using the correct on-mob sprites.
-
Fixes unreported bug where there was a slim chance during character preview icon generation that a character with Security Officer set to high would get rendered with either the wrong beret sprite or no beret sprite at all.
-
Fixes an issue where Sigholt's fluff beret wasn't using the correct sprites.
-
-
Tastyfish updated:
-
-
Passively power-consuming borg modules, such as the peacekeeper movement and shield module, won't spam the user infinitely if they're low on power anymore.
-
-
-
23 January 2016
-
Fox McCloud updated:
-
-
Removes Vampire HUD
-
moves the Vampire blood counter to a more easy to see location
-
Adds in a Changeling chemical counter display
-
Adds in a Changeling sting counter display
-
Vampire total blood and usable blood will now appear under status
-
Changes vampire blood display to be similar to ling chemical counter
-
Fixes unnecessary toxin damage being dealt on severe bloodloss
-
Fixes human mobs not receiving proper random names
-
Adds in knight armor
-
Grants the chaplain a set of crusader knight armor
-
Adds in cult-resistant ERT paranormal space suit
-
Allows the Chaplain to convert his null rod into a holy sword with crusader knight armor
-
Chaplain's closet is now a secure closet
-
Adds in Assault Gear crate to cargo
-
Adds in military assault belt
-
Adds in spaceworthy swat suits
-
tweaks bandolier to hold 2 additional shotgun shells
-
bartender starts off with +2 additional shells
-
Reduces the cost of the space suit crate and doubles its contents
-
Refactors knives so their behavior is more universal
-
Fixes Hulk not properly being removed when your health drops below a threshold
-
Fixes flickering vision in a mining mech
-
-
Tastyfish updated:
-
-
Poly has taken a seminar on the latest trends in engine operations.
-
Player-controller parrots can now hear their headsets.
-
-
Tigerbat2000 updated:
-
-
The nuclear disk escaping on the shuttle no longer counts as a syndicate minor victory.
-
Cultists can once again actually greentext the escape objective.
-
-
-
20 January 2016
-
DarkPyrolord updated:
-
-
Adds in hardsuit sprites for Vulpkanin
-
-
FalseIncarnate updated:
-
-
Allowed cheap lighters and individual matches to be put into cigarette packages at the cost of cigarette space.
-
Matches can now be lit and put out by striking the match on your shoes. Good for if you lose that matchbox, or want to just feel cool.
-
-
Fox McCloud updated:
-
-
Fixes brute damage on weapons not knocking people down.
-
Tweaks implant behavior to be more consistent and unified.
-
Lowers the pAI cooldown from 60 seconds to 5 seconds.
-
Raw telecrystal can now be used to charge uplink implants.
Vulpkanin hardsuit helmets with proper flashlight-on sprites.
-
-
Tastyfish updated:
-
-
The ID computer Access Report printout now separates the access list with commas so it's actually readable.
-
The ID computer Access Report printout isn't blank if you don't have an authorization card in anymore.
-
In the supply ordering & shuttle consoles, one can now cancel an order at either the Reason or Amount input dialogs.
-
Table flipping uses correct sprites.
-
-
TheDZD updated:
-
-
Adds world.Topic() handling so that users are notified in-game when pull requests are opened, closed, or merged on the Github repo.
-
-
-
18 January 2016
-
Crazylemon updated:
-
-
New classes of shapeshifters have been sighted around the NSS Cyberiad...
-
Wizards now can't teleport to other antag spawn points.
-
Removes an extruding pixel from the left-facing IPC glider monitor sprite.
-
Ragin' Mages now spawn every 7 minutes, instead of 5. Admins can further adjust this by modifying the 'delay_per_mage' variable.
-
Ragin' Mages are now made with 100% less in-use souls (Apprentices won't have their consciousness yoinked).
-
It takes half an hour for the REAL chaos of ragin' mages to start, for at least a semblance of normality.
-
-
Dave The Headcrab updated:
-
-
Adds the advanced energy revolver, toggles between taser and laser modes.
-
Removes the detective's revolver from the blueshield's locker.
-
Changes the taser the blueshield starts with into an advanced energy revolver.
-
-
Deanthelis updated:
-
-
Added the ability for the Magnetic Gripper to pick up and place light tiles.
-
-
Fethas updated:
-
-
Readds the hud icon showing up for master and servent
-
adds mindslave datum hud thingy based on TGs gang huds
-
-
Fox McCloud updated:
-
-
Fixes not being able to add/remove Weapon Permit from IDs.
-
Fixes the energy sword being invisible in-hand when turned on.
-
Fixes the telebaton being invisible in-hand when extended.
-
Fixes eye-stabbing not having an attack animation or hitsound.
-
Fixes some kitchen utensils playing the wrong hit-sound and playing twice in some cases.
-
Fixes the butcher cleaver sprite being backwards.
-
Fixes the telebaton sprite being missing from the side.
-
Fixes the meat cleaver being invisible in-hand.
-
Corrects some grammatical descriptive errors for the elite syndicate hardsuit.
-
completely overhauls implants to TG's standards.
-
Adds storage implant.
-
Adds microbomb and macrobomb implants.
-
Adds in support for removing implants directly into cases.
-
Removes Bay style explosive implants.
-
Removes compressed matter implants.
-
Tweaks the uplink to reflect removal of the old implants and inclusion of the new.
-
Fixes/cuts down on the lag caused by monkey cubes.
-
-
Jey updated:
-
-
Inflatable walls and door can now be deflated by altclicking them
-
Fixed lag from expanding multiple monkeycubes at once.
-
-
KasparoVy updated:
-
-
Adds blank icons with standardized timings for species tail wagging, used in icon generation.
-
Fixes tails overlapping arms/limbs + gloves, etc. when facing EAST or WEST.
-
Ensures tails will overlap stuff as normal only when facing NORTH so as to avoid unwanted interference with the base sprite.
-
Tails now appear in ID cards, overlays things correctly.
-
Tails now overlay and are overlaid by things correctly in preview icons.
-
Modifies the positioning of tail icon generation in the ID card preview icon generation file.
-
Modifies the positioning of tail icon generation in the player preferences preview icon generation file.
-
Breaks limb generation into its own layer, breaks tail generation into a second layer that can be overlaid by limbs.
-
If the user's species is flagged to have a tail that is overlapped, TAIL_LAYER will now overlay the NORTH direction sprite of a tail now, while TAIL_UNDERLIMBS_LAYER gets all remaining directions. Otherwise icons are generated in the traditional manner.
-
Adjusts the Unathi right arm east direction and animated tail sprites, recolouring a random pixel and fixing a floating tail respectively.
-
Adjusts position of tail layer such that tails' north direction sprites will overlay backpacks (more importantly, satchel straps).
-
Accommodates admin-overrides to the body_accessory species check by setting the default animation template to Vulpkanin.
-
Adjusts north-direction Unathi static tail sprite, now attaches to the body in the correct location.
Adjusts NV science goggles object icon. Removed strange border and centered it.
-
Ports Polaris' PRs 761 and 778, brings over Ragnie's awesome Ward-Takahashi prosthetics.
-
-
Kyep updated:
-
-
Changing level to gamma/delta/epsilon now displays a special gamma/delta/epsilon sprite on status monitors
-
Changing level to green/blue now clears the status monitors, so they no longer show higher alert levels after the level is changed
-
-
NTSAM updated:
-
-
Added a rainbow IPC screen.
-
-
PPI updated:
-
-
Modifies the effective time limit to activate the Nuclear Challenge as Nukeops from two minutes to seven minutes
-
-
Tastyfish updated:
-
-
The QM now actually has a QM stamp instead of a fake one, as well as an approved and denied stamp.
-
New area named 'Genetics Maintenance' solidifying/relabelling the confusing area between the morge and Mech Bay as being fully maintenance again, but working correctly and with proper doors.
-
Fixed a few maintenance door names to be in parity to the rest of the station.
-
Added the ability to print the records photo of a crew member from a security records console. Useful for Wanted notices!
-
-
Tigercat2000 updated:
-
-
You can no longer use the gibber for monkies.
-
Cleaned up gibber.dm styling.
-
The fire alarm now uses NanoUI, with color coded alert levels.
-
Upgraded NanoUI (again), fancy FontAwesome icons.
-
Didn't add any butts. Yet.
-
-
-
13 January 2016
-
Fox McCloud updated:
-
-
Fixes Rezadone not clearing mutated organs.
-
Clone damage immunity removed from Slime People, Shadowlings, Golems, and Vox
-
Explosions will no longer destroy things underneath turfs until the turf is exposed.
-
fixes a runtime related to revolver spinning.
-
fixes server loading taking an abnormally long time.
-
-
Kyep updated:
-
-
Blob, vine and virus outbreaks are now more clearly labeled as such, to avoid people confusing them with each other
-
-
Tastyfish updated:
-
-
NT Rep fountain pens and magistrate gold pens can now write in 5 different colors. The IAA gets a cheap plastic equivalent.
-
-
-
11 January 2016
-
CrAzYPiLoT updated:
-
-
Fixes the footsteps sounds to the fullest.
-
-
Crazylemon updated:
-
-
Bomb guardians now automatically notify their master when they've set something to boom, so there's less accidental friendly fire
-
Bomb guardians are only notified that their trap failed, if it ACTUALLY FAILED.
-
Bomb guardians now are more aware of what is primed to explode.
-
Bomb guardian summoners can now defuse their guardian's bombs without harm.
-
Brought RAGIN' MAGES back up to function.
-
-
Dave The Headcrab updated:
-
-
Added a new icon for the soy and cafe latte drinks. Icons courtesy of Full Of Skittles, resident overlord of art.
-
-
Fox McCloud updated:
-
-
Re-arranges the armory and changes its contents minorly.
-
Adds in rubbershot ammo boxes.
-
Fixes Mutadone incurring a massive cost on the server.
-
Positronic brains can no longer speak binary.
-
Positronic brains can be prevented from speaking (or allowed) by toggling their speaker on/off.
-
IPC's positronic brains start off toggled off.
-
Fixes the supermatter announcement causing massive amounts of server lag.
-
Adds in tradable telecrystals.
-
-
-
08 January 2016
-
Crazylemon updated:
-
-
Fully enables a system to allow species to have unique procs and verbs that come and go with the species.
-
IPCs lose their change monitor verb when changing species now. Gone are the days of recalling a past IPC life to perform self-barbery! Oh, woe is me!
-
Sleepers and Body Scanners will now reliably work when rotated
-
SSD humans should be asleep more reliably now.
-
-
Dave The Headcrab updated:
-
-
Nerfs the damage the Detective's revolver does from 15 brute to 5 brute.
-
Adds a 300 round capacity buckshot magizine that fits into the L6 Saw.
-
Adds a 25 round capacity 40mm HE magizine that fits into the L6 Saw.
-
Adds the 'Devastator' L6 SAW, starts off loaded with the buckshot magizine.
-
Gives the SST the 'Devastator' L6 Saw, and one of each mag type in their bag.
-
-
FalseIncarnate updated:
-
-
Plants will now begin to die over time if their age exceeds 5 times their TRAIT_MATURATION value.
-
Weed growth chance per process in trays has been slightly increased (Previously: 5% chance if no seed, 1% otherwise;Now: 6% / 3%).
-
Pest growth in trays has been slightly buffed. (Previously: 3% chance to increase by 0.1; Now: 5% chance to increase by 0.5)
-
-
Fethas updated:
-
-
Due to Archmage Steve leaving the nya-cromantic stone near the microwave, the true power of the stone has been unleashed. Subjects of the stone are not only ressurected ... but resurrected as catgirls ... We fired steve.
-
-
Fox McCloud updated:
-
-
fixes a bug relating to some brute/burn damage being dealt to human mobs.
-
Adds in overloading APCs, causing them to arc electricity to mobs in range.
-
Makes Engineering related APCs overload proof.
-
Implements the timestop spell.
-
Implements new sepia slime reaction which halts time in an AoE.
-
sentience potions no longer can make slimes sentient.
-
Removes Hulk instant stun.
-
Hulk damage increased.
-
Hulk wears off at a lower health threshold.
-
Fixes strange reagent not working on simple animals.
-
Reduces the amount shock damage and bounces for the Tesla engine.
-
Fixes Syndicate Cyborg's LMG being invisible.
-
Fixes the uplink kit having implanters that were both nameless and looked as if they had been used.
-
-
KasparoVy updated:
-
-
Added the security gasmask, sexy mime mask, bandanas, balaclava, welding gas mask and wrestling masks for Vox. Added adjusted-state sprites for the Vox breath, medical, and surgical masks.
-
Removed a duplicate of the human balaclava sprite.
-
Modifies the Vox plague-doctor, fake moustache, sterile and medical mask sprites to fit the Vox anatomy and animates the Vox SWAT mask. Corrects the names of some Vox mask adjusted-state sprites.
-
-
Tastyfish updated:
-
-
Fixed the pronouns in a few verbs and the door to 'Interrogation Observervtion'.
-
-
Tigercat2000 updated:
-
-
Added 96x96 (3x) res option to icons menu
-
-
-
06 January 2016
-
Certhic updated:
-
-
Corrected some air alarms so that atmos computer can access them
-
Bodyscanner now sees mechanical parts in internal organs
-
-
Crazylemon64 updated:
-
-
Sleeping simple animals should tick down sleeping as normal - deaf simple mobs are no longer a thing
-
-
Tastyfish updated:
-
-
Instruments now use NanoUI.
-
Corrected the blueshield mission briefing.
-
-
-
03 January 2016
-
TheDZD updated:
-
-
Ports over changelog system from /tg/station.
-
-
-
-GoonStation 13 Development Team
-
- Coders: Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion
- Spriters: Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No
-
+ Visit our IRC channel: #crew on neko.sneeza.me
+
+
+
+
+
+
+
+ Current Project Maintainers:-Click Here-
+ Currently Active GitHub contributor list:-Click Here-
+ Coders: ZomgPonies, DaveTheHeadcrab, tigercat2000, FalseIncarnate, AuroraBlade, Tastyfish, Crazylemon64, KasparoVy
+ Spriters: FullOfSkittles
+ Sounds:
+ Main Testers: Anyone who has submitted a bug to the issue tracker
+ Thanks to: Baystation 12, /tg/station, /vg/station, NTstation, CDK Station devs, FacepunchStation, GoonStation devs, the original SpaceStation developers and Radithor for the title image. Also a thanks to anybody who has contributed who is not listed here :( Ask to be added here on irc.
+ Have a bug to report? Visit our Issue Tracker.
+ Please ensure that the bug has not already been reported and be as descriptive as possible about the circumstances under which the bug occurred.
+
+
+
+
+
+
+
20 April 2016
+
Crazylemon64 updated:
+
+
Bureaucracy crates now contain granted and denied stamps.
+
+
FalseIncarnate updated:
+
+
Anomalies will now be properly neutralized by signals that match their code and frequency, instead of using the default frequency and their code.
+
+
FlattestGuitar updated:
+
+
Adds shot glasses.
+
+
Fox McCloud updated:
+
+
Removes the ability to put a pAI into securitrons and ED-209's
+
Drinking glasses now have an in-hand sprite
+
DNA injectors no longer have a delay when used on yourself
+
DNA injectors no longer delete on use, but become used, much like auto-injectors
+
Fixes a bug where you can exploit the genetic scanner to get multiple injectors
+
Fixes not being able to cancel creating an DNA injector
+
remove spacesuits causing injections to the head to take longer
+
FIxes heat resist mutation not making you immune to high pressure, fire, or high temperatures
+
removes some not-well-known damage resists from cold/heat mutations
+
Re-maps botany a bit to make it more bee and botanist friendly
+
Adds in Abductors Game Mode
+
+
MarsM0nd updated:
+
+
Embeded object removal is now done with hemostat again
+
Borgs are able to do embeded object surgery
+
+
Tastyfish updated:
+
+
Makes the server startup substantially faster.
+
+
monster860 updated:
+
+
Crowbarring open a spesspod doors is no longer broken
+
+
tigercat2000 updated:
+
+
-tg- thrown alerts have been added. This means you get an alert when buckled or handcuffed or many many other things happen to you. It then gives you a tool tip when you hover over it, and it may or may not do something when you click it. Have fun!
+
+
+
14 April 2016
+
Aurorablade updated:
+
+
Removes the !!FUN!! of having headslugs gold core spawnable.
+
+
Fox McCloud updated:
+
+
Added in sounds (instead of a chat-based message) for when airlocks are bolted/unbolted
+
Added in sound for when airlocks deny access
+
cutting/pulsing wires will play a sound
+
ups nuke ops game mode population requirement from 20 to 30
+
Adds in mining drone upgrade modules to increase their health, combat capability, or reduce their ranged cooldowns
+
Adds in mining drone "AI upgrade" a sentience potion that only works on mining bots
+
Mining bots should be less likely to shoot you when attacking hostile mobs
+
Killer tomatoes actually live up to their name now and are hostile mobs
+
Killer tomatoes are an actual fruit now; activate it in your hands to make them into a mob
+
Killer tomatoes are directly mutated from regular tomatoes instead of blood tomatoes
+
Increased the yield of regular tomatoes by 1
+
Tweak some stats on the killer tomato seeds
+
Fixes the blind player preference not doing anything
+
Adds portaseeder to R&D
+
Scythes will conduct electricity now
+
Mini hoes play a slice sound instead of bludgeon sound
+
Plant analyzer properly has a description and origin tech
+
Can have hulk+dwarf mutations together
+
Can have heat+cold resist together
+
Can only remotely view people who also have remote view
+
Fixes cold mutation not having an overlay
+
Hallucinations will no longer tick down twice as fast as they should nor will they spawn twice as many hallucinations as they should
+
Incendiary mitochondria no longer asks who you want to cast it on (it always is meant to be cast on yourself)
+
Fixes permanent nearsightedness even when wearing prescription glasses
+
+
KasparoVy updated:
+
+
Head accessories now behave like facial hair: They will no longer be hidden by clothing items that BLOCKHEADHAIR (have the BLOCKHEADHAIR flag).
+
Wearing a piece of clothing that blocks head hair will no longer make head accessories (facial markings/horns/antennae) invisible until an icon update is triggered while the headwear is off.
+
+
Meisaka updated:
+
+
law manager no longer freaks out with Malf law
+
+
Tastyfish updated:
+
+
The /vg/ library computer interface has been ported, giving a much better use experience.
+
Books can now be flagged for inappropriate content.
+
+
TheDZD updated:
+
+
Removes shitty Caelcode bees.
+
Hydroponics can now manage bee colonies, bees produce honeycombs that can be ground to obtain honey, a decent nutriment+healing chemical
+
Hydroponics can inject a queen bee with a syringe of a reagent to alter her DNA to match that reagent, meaning all honeycombs produced will contain that reagent in small amounts
+
Bees with reagents will attack with that reagent. It takes 5u of a reagent to give a bee that reagent.
+
Added the ability to make Apiaries and Honey frames with wood
+
Added the ability to make Royal Bee Jelly from 10 Mutagen and 40 Honey
+
Added the ability to make more Queen Bees from Royal Bee Jelly by using it on an existing Queen, to split her into two Queens
+
Removes some snowflakey mob behavior from bears, snakes and panthers.
+
Hudson is feeling punny.
+
Hostile mob AI should now be a bit more cost-efficient.
+
+
monster860 updated:
+
+
Adds area editing, link mode, and fill mode to the buildmode tool
+
+
+
12 April 2016
+
FalseIncarnate updated:
+
+
Adjusting the setting of a vendor circuit board is no longer random, but instead provides a select-able list.
+
Vendor Circuit Board design moved from the Circuit Imprinter to the Autolathe, acid requirement replaced by metal.
+
Burnt matches can no longer light cigarettes, pipes, or joints.
+
+
Fethas updated:
+
+
Nukes the cargo train code rscadd:Adds simple vehicle framework and converts secway/janicart/snowmobiles/bikes/cars/ambulance to it rscadd:Adds space speedbike, red and blue versions, yes you WILL need a spacesuit rscadd:Maps janicart and secway onto metastation (but not ambulance no pareamedic garage, no i am not mapping that)
+
You should now be able to operate on IPC eyes, SHOULD bugfix:hopefully surgery on diona works right
+
+
Fox McCloud updated:
+
+
Adds in TraitorVamp; game mode that's essentially like TraitorChan, but with a Vampire instead of a Changeling
+
Vampires cannot use holoparasites
+
Malf AI will automatically lose if it exits the station z-level
+
+
Tastyfish updated:
+
+
All cats can kill mice now.
+
E-N can't suffocate.
+
Startup time is now shorter.
+
Removed the Station Collision away mission from rotation, due to multiple conceptual and technical issues.
+
+
+
07 April 2016
+
Crazylemon64 updated:
+
+
Removes an offset from the advanced virus stealth calculation, causing viruses to be more stealthy than the sum of their symptoms.
+
Mulebots will now send announcements to relevant requests consoles on delivery again.
+
+
FalseIncarnate updated:
+
+
Adds logic gates, for doing illogical things in a logical manner.
+
Adds buildable light switches, for all your light toggling needs.
+
Fixes a resource duplication bug with mass driver buttons.
+
+
Fethas updated:
+
+
maybe makes them last longer...maybe..and fixes the event end message
+
+
Fox McCloud updated:
+
+
Maps in the slime management console to Xenobio
+
Reduces Xenobio monkey box count from 4 to 2
+
Fixes weakeyes having a negligible impact
+
Can spawn friendly animals with a new gold core reaction by injection with water
+
Hostile animal spawn increased from 3 to 5 for hostile gold cores
+
Swarmers, revenants, and morphs no longer gold core spawnable
+
Fixes invisible animal spawns from gold core/life reactions
+
Adds tape to the ArtVend
+
Can no longer use sentience potions on bots
+
Added in Plasma Dust reagent, acquired by grinding plasma sheets; it's more toxic than regular plasma and generates plasma gas when spilled onto turfs.
+
Slimecore reactions now require plasma dust as opposed to dispenser plasma
+
Added in new Rainbow slime; inject with plasma dust to get a random colored slime. Acquire by having 100 mutation chance on a slime when it splits.
+
Monkey Recycler can produce different types of monkey cubes; change the cube type by using a multitool on the recycler
+
Epinephrine/plasma reagents changing mutation rate has been removed
+
Mutation chance is inherited from slime generation to slime generation as opposed to being purely random.
+
New reactions added for red and blue extracts: red generates mutator, which increases mutation chance, and blue generates stabilizer, which decreases mutation chance.
+
Slime glycerol reaction removed
+
Slime cells are now high capacity cells (more power than before)
+
extract enhancer increases the slime core usage by 1 as oppose to setting it to three
+
slime enhancer increases slime cores by 1 as opposed to setting the core amount to 3
+
Chill reaction lowers body temperature slightly more so it doesn't just wear off instantly
+
Reduces Xenobio plasma sheets from 8 to 3 and removes that pesky boombox
+
Processors no longer produce 1 more slime core than intended
+
Less blank/spriteless/empty foods from the silver core reaction
+
Virology mix reactions now use plasma dust as opposed to plasma
+
Statues can no longer move/attack people unless they're in total darkness or all mobs viewing them are blinded
+
statues are invincible to anything other than full out gibbing.
+
Statues flicker lights spell range increased
+
Blind spell no longer impacts silicons
+
Fixes statues being able to attack/move whenever they feel like it, regardless of client statues
+
Fixes blind spell impacting the statue
+
+
Tastyfish updated:
+
+
Beepsky is no longer a pokemon.
+
pAI-controlled Bots now reliably speak human-understandable languages over the radio.
+
More floor blood for the blood gods. (Or rather, as much as there was supposed to be.)
+
+
tigercat2000 updated:
+
+
Items in your off hand will now count towards access.
+
+
+
02 April 2016
+
Crazylemon64 updated:
+
+
Metal foam walls will now produce flooring on space tiles
+
Syringes will now draw water from slime people.
+
+
FalseIncarnate updated:
+
+
Let's you know when your container is full when filling from sinks.
+
Prevents splashing containers onto beakers and buckets that have a lid on them.
+
Pill bottles can now be labeled with a simple pen.
+
Beakers/buckets (and pill bottles) now accept 26 character labels from pens.
+
+
Fethas updated:
+
+
Various spells have had a tweak to stun/reveal/cast, some other number stuff...
+
Nightvision
+
harvest code is now in the abilites file.
+
New fluff objectives
+
Hell has recently remapped its blood transit system and you can now once again crawl through blood. We are sorry for the-GIVE US YOUR SOUL!
+
+
FlattestGuitar updated:
+
+
Alcoholic beverages now have proper levels of ethanol in them. Good luck passing out after a beer.
+
+
Fox McCloud updated:
+
+
Adds in the Lusty Xenomorph Maid Mob; currently admin only.
+
Fixes xenomorph brains having the wrong sprite, no origin tech, and incorrect name
+
removes xenomorph egg from hotel
+
upgrades are no longer needed to for the available toys in the prize vendor
+
Implements Advanced Camera Consoles. A type of camera console that function like AI's vision style. Non-buildable/accessible.
+
Adds in Xenobiology Advance Cameras. A type of camera console that functions like advanced cameras, but only works in Xenobiology areas; can move around slimes and feed them with the console as well. Also non-buildable/accessible (for now).
+
Adds in cerulean slime reaction that generates a single use blueprint. On use it colors turfs a lavender color
+
Adds disease1 outbreak event
+
Adds appendecitis event
+
Roburgers now properly have nanomachines in them
+
Re-adds nanomachines
+
Experimentor properly generates nanomachines instead of itching powder
+
Fixes big roburgers having a healing reagent in them
+
Adds nanomachines to poison traitor bottles
+
Tajarans can now eat mice, chicks, parrots, and tribbles
+
Vulpkanin and Unathi can now eat mice, chicks, lizards, chickens, crabs, parrtos, and tribbles
+
fixes spawned changeling headcrab behavior
+
+
KasparoVy updated:
+
+
Incisions made at the beginning of embedded object removal surgery can now be closed in the same procedure.
+
+
ProperPants updated:
+
+
Maint drones have magboots.
+
Removed plastic from maint drones. Literally useless for station maintenance.
+
Increased starting amounts of some materials for maint drones and engi borgs.
+
Reduced the number of lines taken by Engineering cyborgs calling on materials stacks.
+
Operating tables can be deconstructed with a wrench.
+
Fixed and shortened description of metal sheets.
+
+
Tastyfish updated:
+
+
Bots can now be controlled by players, by opening them up and inserting a pAI. *beep
+
MULEbots can now access the engineering destination.
+
All MULEbot destinations should now have the correct load/unload direction, meaning the crates won't be dumped inside the flaps.
+
Diagnostic HUD's now give health and status information about bots.
+
MULEbot rampage blood tracks are now rendered correctly and handle UE traces as appropriate.
+
Bots should (hopefully) lag the game less now.
+
Beepsky contains 30% more potato.
+
Action progress bars are now smooth.
+
Clicking a filled inventory slot's square with an open hand now clicks the item in the slot.
+
Status displays now display the time when in Shuttle ETA mode and no shuttle activity is happening.
+
Shuttle ETA countdowns on status displays are now amber.
+
pAI's can now use the PDA chatrooms.
+
Adds treadmills to brig cells, to give the prisoners something productive to do.
+
+
TheDZD updated:
+
+
A lot of the guns and armor in the station collision, space hotel, academy, and wild west away missions have been removed/replaced.
+
Removes that fucking facehugger from station collision.
+
+
tigercat2000 updated:
+
+
Virus2 has been removed.
+
Virus1 is back. Viva la revolution.
+
You can now have up to 20 characters.
+
+
+
26 March 2016
+
Fox McCloud updated:
+
+
Adds in dental implant surgery. Implant pills into people's teeth.
+
Major rebalance and Shadowling update (https://github.com/ParadiseSS13/Paradise/pull/3986 for details). In general, Shadowlings can no longer enthrall or engage in Shadowling like behavior, pre-hatch. Post-hatch, shadowlings are much more powerful, with a ride array of New abilities such as extending the shuttle or making thralls into lesser shadowlings. Shadowling gameplay should not revolve almost entirely around darkness, as opposed to pre-hatch shenanigans.
+
Robotics now has a "sterile" surgical area for performing augmentations
+
Adds the FixOVein and Bone Gel to the autolathe
+
ensures all surgical tools have origin tech on them; lowers origin tech on FixoVein
+
+
KasparoVy updated:
+
+
Slime People can now wear underwear.
+
Slime People can now wear undershirts.
+
+
TheDZD updated:
+
+
NT has removed trace amounts of a highly-addictive substance from the "100% real" cheese used in cheese-flavored snacks. As a result, incidence rates of crewmembers becoming addicted to Cheesie Honkers should reduce to zero.
+
After receiving complaints about crewmembers often being unable to physically function without a back-mounted barrel of coffee, NT has replaced station all sources of coffee on the station, including coffee beans themselves with a largely decaffeinated version. It was funny the first time almost every crewmember aboard the NSS Cyberiad was lugging around their own oil barrel filled with coffee, it wasn't so funny, nor good for productivity the eighteenth.
+
+
+
25 March 2016
+
Crazylemon64 updated:
+
+
You now will actually have the correct `real_name` on your DNA.
+
No more roundstart runtimes regarding IPC hair.
+
Mitocholide rejuv will work more usefully now.
+
Limbs and cyborg modules will no longer appear in your screen.
+
Cyborg module icons are now persistent throughout logging in and out.
+
Various cyborg modules, like engineering, now use the proper icon.
+
+
FlattestGuitar updated:
+
+
Adds confetti grenades.
+
+
Fox McCloud updated:
+
+
Fixes Sleeping Carp combos not having an attack animation
+
Fixes several chems not properly healing brute/burn damage, consistently, as intended
+
+
KasparoVy updated:
+
+
Unbranded heads and groins no longer invisible.
+
Zeng-hu left leg will now be in line with the body when facing south.
+
+
+
22 March 2016
+
Crazylemon64 updated:
+
+
Repairs all sorts of eldritch occurences that happen when you put an organic head on an IPC body, as well as some decapitation bugs
+
Makes heads keep hair on removal
+
Amputated limbs from a DNA-injected individual now will keep their appearance of the DNA-injected person
+
Wounds will vanish on their own now
+
Admins now have an "incarnate" option on the player panel when viewing ghosts for quick player instantiation
+
Fixes a runtime regarding failing a limb reconnection surgery
+
Copying a client's preferences now overrides the previous mob's DNA
+
A DNA injector is now more thorough, and affects the DNA of mobs' limbs and organs
+
DNA-lacking species can no longer be DNA-injected
+
Brains are now labeled again
+
Splashing mitocholide on dead organs will make them live again.
+
The body scanner now detects necrotic limbs and organs.
+
pAIs and Drones are now affected by EMPs and explosions while held.
+
+
Fethas updated:
+
+
Adds a surgery for infection treatmne/autopsys that is simply cut open, retract, cauterize
+
fixes a dumb error in internal bleeeding surgerys
+
Chaos types no longer random teleport, but will make the target hallucinate everyone looks like the guardian.
+
+
FlattestGuitar updated:
+
+
Adds a snow, navy and desert military jacket.
+
+
Fox McCloud updated:
+
+
Removes random 1% chance to heal fire damage
+
Removes passive healing from resist heat mutation
+
Regen mutation heals every cycle (albeit less, on average), but doesn't cost hunger
+
Fixes not being able to speak over xeno common or hivemind when you receive the Xeno hive node
+
Adds in the ability to transfer non-locked metal+glass only designs from the protolathe to autolathe
+
Changes Outpost Mass Driver to prevent accidental spacings
+
Shadow people no longer dust on death, are rad immune+virus immune, and can be cloned. Slip immunity removed
+
Shadowlings no longer get hungry or fat and no longer dust on death
+
+
KasparoVy updated:
+
+
The ability to change your head, torso and groin as an IPC in the character creator. Non-IPCs cannot access the parts.
+
Head, torso and groin sprites for all mechanical limb/bodypart brands but Morpheus and the unbranded ones (since those already exist) from Polaris.
+
Faux-eye optics for non-Morpheus heads.
+
The ability to change optic (eye) colour if you've got a non-Morpheus head.
+
The ability to choose human hair styles (wigs) and facial hair styles (postiche) with non-Morpheus heads. Non-Morpheus heads cannot choose screens. Conversely, Morpheus heads cannot choose wigs or facial hair.
+
Two hair styles from Polaris.
+
The ability for IPCs to wear undergarments (shirts and trousers).
+
Antennae (colourable) for IPCs.
+
IPC monitor adjustment verb will now adjust optic colour if the head is non-Morpheus.
+
Combat/SWAT boots can now be toecut and jacksandals can't.
+
ASAP fix to what would've broken the ability to configure prostheses in character creation.
+
Adjusted masks no longer block CPR (including bandanas).
+
You can no longer run internals from adjusted breath masks (or airtight adjustable masks in general).
+
+
Regens updated:
+
+
Robotic hearts will now properly give the mob a heart attack instead of just damaging it when EMP'd
+
Assisted organs will now also take damage from EMP's
+
Internal robotic and assisted organs will now actually take damage from EMP's
+
+
Tastyfish updated:
+
+
Adds PDA chatrooms. Post memes! Talk to your fellow collaborators! Get caught!
+
You can now set the PDA messenger to automatically scroll down to new messages.
+
Pet collars now act as death alarms and can have ID's attached to them.
+
All domestic animals can now wear collars.
+
You can now make video cameras at the autolathe.
+
+
TheDZD updated:
+
+
Fixes an instance of old code being so incredibly, unbelievably, makes-me-want-to-stab-myself-in-the-eye-edly idiotic.
+
+
TravellingMerchant updated:
+
+
Kidan have new sprites!
+
+
tigercat2000 updated:
+
+
Nukeops now have an assault pod, they can use it for 30 TC. Loud and mean.
+
Lighting overlays can no longer go below 0 lum_r/g/b
+
Shuttles will work with lighting better.
+
Wizards can no longer teleport to prohibited areas such as Central Command.
+
+
+
16 March 2016
+
Crazylemon64 updated:
+
+
Being in godmode now makes you immune to bombs
+
Science members now get compensated when they ship tech disks to centcomm.
+
Science crew are no longer paid when they "max" research.
+
Roboticists now get credit for making RIPLEYs and Firefighters
+
Slime people can now regrow limbs on a more lax nutrition requirement
+
Enhances the nutripump+ to let slime people regrow limbs with it active
+
Skeletons, slime people, IPCs, and Diona no longer leave blood when hit
+
Rejuvenating a slime person will no longer clog up their "blood"
+
Slime people will now regenerate "blood" from having water in their system
+
The decloner can now be created again
+
Environment smashing mobs can now destroy girders.
+
+
DaveTheHeadcrab updated:
+
+
Removes the check for species on the update_markings proc.
+
+
FalseIncarnate updated:
+
+
Xeno-botany is now more user-friendly, and less random letters/numbers.
+
Hydroponics now has a connector hooked up to the isolation tray and a new connector in their back room for those strange plants that like spewing plasma or eating nitrogen.
+
You can now (finally) build the xeno-botany machines, and science can print off their respective boards.
+
+
Fethas updated:
+
+
Syringes are no longer sharp
+
byond likes direct pathing so item/organ/internal not item/organ even if it shouldn't be in the internal_organs list. This was preventing the list from doing stuff correctly.
+
fixed ipc organ manipulation surgery, you can now insert a replacment ipc organ directly instead of needing a screwdriver in your main hand
+
nanopaste now will repair organs with robotic >= 2 instead of > 2 cuase i am an idiot
+
Fix, hopefully, for a runtime for clientless mobs whos head are cut off...
+
Hopefully fixes issues with diona eyes
+
Though shalt not eat robotic organs..including cybernetic implants..
+
ITS SURGERY_STEP/DETHRALL NOT SURGERY_STEP/INTERNAL/DETHRALL
+
+
FlattestGuitar updated:
+
+
Adds three new synthanol drinks
+
Drinking synthanol is now a bad idea if you're organic
+
A glass of holy water now looks like normal water
+
+
Fox McCloud updated:
+
+
Adds in drink fizzing sound
+
Drink/bartender recipes use this new fizzing sound in addition to a few other recipes
+
Adds in a fuse burning sound
+
Bath salts, black powder, saltpetre, and charcoal use this sound now
+
Adds in a matchstrike+burning sound
+
Lighting a match triggers this new sound
+
Adds in scissors cutting sound
+
Cutting someone's hair uses this new sound
+
Adds in printer sounds
+
printing off papers from various devices typically uses these sounds
+
Adds computer ambience sounds
+
black box recorder and R&D core servers both play this sound at random rare intervals
+
Reduces the tech level (and requirement) for nanopaste
+
Reduces the tech level (and requirement) for the plasma pistol
+
Removes Nymph and drone tech levels
+
Reduces tech levels on the flora board
+
Adds tech level requirements to mech sleepers, mech syringe guns, mech tasers, and mech machine guns
+
Increases tech cost of the decloner
+
Removes the pacman generators
+
Removes emitter
+
Removes flora machine (functionless anyway)
+
Removes the pre-spawned nanopaste
+
Removes space suits
+
Removes excavation gear
+
Replaces the soil with actual hydroponic trays (more aesthetic than anything)
+
Removes most external asteroid access from the station
+
Excavation storage is now generic science storage
+
removed the plasma sheet
+
Fixes augments not showing up in R&D unless specifically searched for
+
Fixes some augments being unavailable in mech fabs
+
Fixes augments having no construction time
+
Fixes xenos not gaining plasma when breathing in plasma
+
Fixes plasma reagent not generating plasma for a person
+
Screaming has different sounds based on being male or female
+
Implements Goon's screaming sounds.
+
Screaming tone is now based on age of character instead of being random
+
Ups the cooldown on screaming from 2 seconds to 5 seconds
+
Removes chance for Whilhelm scream
+
Borgs can now scream
+
Monkey's now have a unique screaming sound
+
IPCs now scream like cyborgs
+
Updates slot machines to have higher jackpots and more payouts with more interesting sounds
+
Adds X-Ray, Thermal, Anti-tun, and Reviver implants to the nuke ops uplink (augments come with one auto-implanter) rcsadd: Adds in augment auto-implanter, which inserts and implant without surgery
+
tweaks a large number of chems; behaviors are largely retained, but new flavor messages, probabilities, etc may be present; overall, you can expect chems to do the same thing
+
Tabun re-replaced with Sarin rcsadd: New reagent: cholesterol: if overdosed on, it can cause a heart attack--fatty foods, cheese, eggs, and some meats all produce cholesterol in your body.
+
Mixing Sarin, Meth, or Cyanide will poison in a very small area of the reaction if you're not on internal OR not wearing a gas mask
+
Chemist warddrobe now has two gas masks
+
Teslium will now impact synthetics AND organics
+
Fixes facehuggers hugging already infected people
+
Fixes facehuggers hugging people while dead
+
Fixes Embryo's developing twice as fast as they should
+
Fixes up some behaviors with xeno eggs
+
Xeno acid can now melt through floors and the asteroid
+
Xeno's now play the gib sound when actually gibbed
+
Implements Changeling headcrabs/headspiders
+
Fixes xenos not throwing their organs when gibbed
+
Fixes swallowed mobs not being ejected when a human is gibbed
+
Adds in spider eggs reagent, an infectious reagent that requires surgery to correct
+
Fixes EMPs causing eye implant users to be permanently blind
+
Increases bag of holding's storage capacity
+
Removing a heart no longer kills the patient instantly, but induces a heart attack
+
Demon hearts will not work
+
Should now actually be able to re-insert hearts
+
Reworks addictions to bettter differentiate them betweeen overdosing and make them more realistic.
+
changes which chems are addictive, currently, the follow reagents are now addidctive: meth, crank, krokodil, bath salts, space drugs, perfluoradecalin, omnizine, coffee, nicotine, fliptonium, ultra lube, surge, fake cheese, weird cheese, ephedrine, diphenhydramine, teporone, and morphine
+
sleepers help you recover from addiction faster
+
Can now make cable coils in autolathes
+
Fixes the slot machine announcements not displaying properly
+
+
Tastyfish updated:
+
+
The super fart mutation now gives you a spell-like ability instead of augmenting the emote.
+
Vampire abilities are now in their own Vampire tab, as well being action buttons at the top, like spells.
+
Cloning a vampire no longer makes them lose their abilities.
+
Vampires can no longer hypnotize chaplains.
+
Being a full vampire (500+ total blood) actually makes you immune to holy water reliably now.
+
Some old away missions are back: Academy, Black Market Packers, Space Hotel, Station Collision, and Wild West. Go out and round up some hostiles!
+
Shuttle consoles now pair up to the engineering, mining, research, or labor shuttle when built or used before pairing, as long as the shuttle is near the console, or the shuttle is moved to be nearby.
+
+
monster860 updated:
+
+
Mining station now has a podbay.
+
Ore scooping module for the spacepod.
+
Three mining lasers for spacepod: Basic, normal, and burst.
+
Shooting weapons south or west of spacepod will actually hit adjacent targets now, and won't shoot through walls anymore.
+
+
taukausanake updated:
+
+
Mice can now be picked up like diona
+
+
+
08 March 2016
+
Crazylemon64 updated:
+
+
Slime people are now more vulnerable to low temperatures.
+
Slime people are able to slowly regrow limbs at a high nutrition cost.
+
Slime people now slowly shift color based on reagents inside of them - disabled by default, toggle it with an IC verb
+
Slime people's cores are more vulnerable to damage
+
Species-related abilities now properly are removed - no more vox hair stylists, unfortunately.
+
+
Fethas updated:
+
+
the nest buckle now looks for the right organ path
+
Fixed some sprites.
+
No more putting no drops in rechargers,
+
+
Fox McCloud updated:
+
+
Implement's goon's gibbing sound
+
Implement's goon's gibbing sound for robots/silicons
+
Removes old gibbing sound
+
+
Spacemanspark updated:
+
+
Lazarus Injector's can now be emagged to activate their special features, alongside using EMPs on them.
+
+
Tastyfish updated:
+
+
Mimes now have a new ore, Tranquillite, used to bring peace and quiet to the station.
+
There are also permanent invisible walls and silent floors that can be made from tranquillite.
+
The Recitence mech is now buildable!
+
The Recitence mech is now playable!
+
Mid-round selection for various creatures and antagonists now consistently asks permission.
+
+
TheDZD updated:
+
+
Adds justice helmets with flashing lights and annoying sirens.
+
Adds crates containing said helmets.
+
Also includes a version of the helmet that can only be spawned by admins, and just has a single red light in the center instead of the stereotypical police blinkers.
+
+
monster860 updated:
+
+
Space pod transitions are now fixed.
+
+
+
07 March 2016
+
Crazylemon64 updated:
+
+
People with VAREDIT can now write matrix variables
+
People with VAREDIT can now modify path variables
+
Refactors the variable editor code somewhat.
+
The buildmode area tool now shows reticules of what you've selected.
+
Switching mobs while using the buildmode tool no longer screws up your UI.
+
Refactors buildmode so it's no longer a special-case system.
+
Adds a copy mode to build mode, which lets you duplicate objects.
+
Any mob in buildmode can work at the fastest possible rate.
+
Fixed a problem where the icons of a person would not correctly update when changing gender.
+
One's hairstyle only adjusts on gender change if it's incompatible with your new gender.
+
Fixed a bug where a person's icon would only be updated if their sprite had a new layer added or removed.
+
You no longer lose your name when monkeyized and reverted - you'll still look like a monkey while you're a monkey, though.
+
Your organs will now match your gender when you are cloned.
+
Skeletons (when a body rots) no longer retain a fleshy torso.
+
Putting people in an active cryotube now produces the message on insertion, rather than release.
+
An EMP'd cloning pod will now display its sprites correctly.
+
+
FalseIncarnate updated:
+
+
Water Balloons can be filled from more sources than just beakers and watertanks.
+
+
Fox McCloud updated:
+
+
Fixes the "yeah" glasses so the sound doesn't vary and a message is displayed, on use
+
Noir mode only activates when the glasses are equipped to your actual eyes
+
Noir Glasses mode can be toggled on or off (defaults to off)
+
Mimes can no longer use spells and continue speaking
+
Mime abilities are now spells with proper icons
+
Mime wall now last 30 seconds, up from 5
+
forecfields/invisible walls now block air currents
+
Adds the Sleeping Carp scroll to the uplink for 17 TC
+
Fixes Shadowlings being able to use guns
+
Fixes sleeping carp scroll users being able to use guns
+
Fixes the Experimentor throwing one item at a time
+
Experimentor menu now automatically refreshes after use
+
Lowers surgery times across the board
+
Removes scalpels causing 1 damage on successful surgery
+
Removes random chance to fracture ribs on a successful surgery
+
Mining drills now have an edge
+
+
KasparoVy updated:
+
+
Jackets who have the verb available but are not intended to be adjusted will not have the action button available.
+
You can now adjust breath masks while buckled into beds and chairs.
+
Known issues with adjusted jackets using the wrong sprites.
+
Blueshield coat in hand and item icons.
+
Hulks now rip apart adjustable and droppable jackets. The items stored in the jackets get dropped on the ground.
+
+
Tastyfish updated:
+
+
Infrared emitters can now be rotated while already in an assembly via the UI popup.
+
The infrared emitter can no longer be hidden inside of boxes and still work.
+
The beach now has a border and is splashier.
+
Gives Psychiatrist a paper bin, clipboard, and multicolored pen.
+
Gives the Librarian / Jouralist a multicolored pen.
+
Gives the NT Representative a clipboard.
+
The ethanol-based neurotoxin drink is now called Neuro-toxin to avoid being confused with the deadly toxin.
+
+
VampyrBytes updated:
+
+
Fixes emotes ending with s needing 2. Emotes now work with grammatical options eg ping or pings, squish or squishes
+
Updated emote help with missing emotes. Help will also show any species specific emotes for your current species
+
+
+
26 February 2016
+
FalseIncarnate updated:
+
+
Chocolate can now make you fat, as expected.
+
+
Fox McCloud updated:
+
+
stamina damage now regenerates slightly faster
+
Adds in whetstones for sharpening objects
+
Kitchen vendor starts off with 5 salt+pepper shakers
+
Can now point while lying or buckled
+
Fixes Capulettium Plus not silencing
+
Fixes slurring, stuttering, drugginess, and silences last half of what they should
+
+
KasparoVy updated:
+
+
Jackets that start open are recognized as actually being open already now. This fixes a bug with certain items that don't have an open state, or cases where it ended up giving an item the wrong icon (one that didn't exist)
+
+
Spacemanspark updated:
+
+
Fixes synthetics from giving off the proper message in the chat box when using the *yes and *no emotes.
+
+
Tastyfish updated:
+
+
Wheelchairs, janicarts, and ambulances can now go through doors according to the user's driver's access.
+
+
+
24 February 2016
+
Crazylemon64 updated:
+
+
The defib should be more reliable on people who have ghosted
+
The defib will now give a message if the ghost is still haunting about
+
Attacking someone with an accessory will now let you put things on them without having to strip them.
+
Borers will now properly detach upon death of a mob they are controlling
+
Borers can now see their chemical count while in control of a mob
+
Borers can now silently communicate with their host - this is not available to the host until the borer has either begun to communicate, or has taken control at least once - this is to avoid spoiling that the borer exists
+
Borers won't be able to talk out loud inside of a host, by default - they can remove this safeguard with a verb under their borer tab. Borer hivespeak is unaffected.
+
Borers infesting and hiding are now silent.
+
Made borer's chem lists more nicely formatted
+
No more superspeed attacking simplemobs
+
New players now show up properly under the "who" verb when used as an admin
+
Mining drones will now automatically collect sand lying around
+
RIPLEYs can now drill asteroid turfs for sand
+
You can now load exosuit fuel generators with items containing their material - this means you can fuel yourself off of ores, but this will be highly inefficient and cost you mining points later on, as you can't take fuel back out.
+
You can now load the fuel generators from an ore box.
+
The plasma generator now produces 3x as much power from the same amount of fuel - this lets it even remotely compete with the uranium generator.
+
You can now light cigarettes off of burning mobs.
+
Exosuit tracking beacons now fit in boxes - prior, they were far too large for even a backpack, as they shared the same size as all other mecha equipment
+
Miners can now collect ore by walking over it with an ore satchel on.
+
+
FalseIncarnate updated:
+
+
Adds prize tickets as a replacement for physical arcade prizes.
+
Adds a buildable prize counter to exchange tickets for prizes.
+
Adds a bike. Despite what Prof. Oak might claim, you can ride it indoors.
+
Adds colorful wallets, for that old school arcade pride.
+
Fixes accidental removal of plump helmet biscuit recipe.
+
Temporarily adds a prize counter to the bar (Cyberiad) or dorms (MetaStation), and adds a max upgrade one to the Ninja Holding Area (Cyberiad z2)
+
Fixes Metastation. Seriously fixed a lot, just read the PR description for the full list.
+
+
FlattestGuitar updated:
+
+
Adds IPC alcohol and a few derivative drinks
+
IPCs can now drink and be fed from glasses
+
+
Fox McCloud updated:
+
+
Laser eyes mutation no longer drains nutrition
+
splits the EMP kit into two things: the standard EMP kit (2 grenades and an implant), and the EMP flashlight by itself
+
nerfs heart attacks so they do less damage
+
Pickpocket gloves now put the item you strip into your hands as opposed to the floor
+
Picketpocket gloves can now silently strip accessories
+
Pickpocket gloves will no longer give a message for messing up a pickpocket
+
+
KasparoVy updated:
+
+
Adjusting masks while they are not on the face will no longer turn off internals.
+
Adjusting masks while they are not on the face will now cause the mask to hide/reveal the wearer's identity the next time it's worn as intended.
+
Adds the ability to open/close bomber jackets.
+
Adds a security bomber jacket. This jacket inherits the protection and storage capabilities as a standard Security vest with additional bomber jacket benefits.
+
Adds UI button in top left of screen for jacket adjustment.
+
Replaces the standard bomber jacket in the Pod Pilot bay with the Security version.
+
Centralizes jacket/coat adjustment handling.
+
All jackets start closed by default.
+
Geneticist duffelbag on-mob sprite (for all species).
+
Vox-fitted backpacks, satchels, ERT backpacks, duffelbags and defib unit.
+
Refactors back-item icon generation.
+
Typo in the description of Santa's sack.
+
Missing punctuation and gender macros in the description of the bag of holding.
+
The tweak to back-icon generation fixes a bug where the wrong sprite name was being used to generate back-item icons.
+
+
PPI updated:
+
+
Adds the ability to hide papers in vents. You can now leave a romantic love letter, exchange information in secret, or hide papers infused with the power of nar'sie from sight.
+
+
Regen1 updated:
+
+
Adds the Immolator laser gun, a modified laser gun with 8 shots that will ignite mobs, can be made in R&D
+
+
Spacemanspark updated:
+
+
Adds *yes and *no emotes to Synthetics. Glory to Synthetica.
+
+
Tastyfish updated:
+
+
The PDA system has been completely redone behind the scenes! It should be functionally similar, although there is now a Home and Back button at the bottom as appropriate.
+
All of the heads now have multicolored pens.
+
EngiVend now has 10 camera assemblies.
+
Borgs can now use vending machines.
+
There are now picture frames that can be made from the autolathe or wood planks for papers, photos, posters, and canvases!
+
+
pinatacolada updated:
+
+
Makes the Protect Station AI law board no longer consider people that damage the station crew, instead of human
+
+
ppi updated:
+
+
When revealed Revenants will not be able to move at the maximum move speed, nor be able to pass through any solid object, like walls, windows, grills, computers and mechs.
+
+
+
13 February 2016
+
Crazylemon64 updated:
+
+
Relaxes the check on what atoms you can follow to any movable atom
+
Mages are now more ragin
+
Admins can now adjust the total number of wizards at runtime by tweaking either max_mages, or players_per mage
+
+
DaveTheHeadcrab updated:
+
+
Adds new worn icons for duffelbags to better reflect their size, compliments of WJohn at /tg/
+
+
FalseIncarnate updated:
+
+
Adds burritos, made from cutlets, beans, rice, capsacin oil (hotsauce), cheese, and flat dough (because we lack proper tortillas) in the microwave.
+
Adds chimichangas. You know you want a deep-fried burrito.
+
+
Fox McCloud updated:
+
+
Updates some spell icons with better/higher quality icons
+
Updates unarmed attacks to allow for more customization
+
Updates martial arts so they factor in specie's attack messages and sounds
+
Re-balances Sleeping Carp fighting style
+
Re-balances Bo Staff
+
Rebalances Golem: they should now be spaceproof, fire+cold proof, rad proof, virus immune, clonable, parapen+syringe gun immune, deal increased melee damage. Their armor has been reduced to 55 melee across the board, their slip immunity removed, pain immunity removed, and they're slightly slower
+
Fixes Ei Nath generating two brains
+
Ensures the Necromatic Stone generates actual skeletons
+
Can now strip PDA/IDs from Golems
+
Fixes sleeping carp grab not being an instant aggressive grab
+
Fixes an exploit with declaring war on the station
+
+
KasparoVy updated:
+
+
Orange and purple bandanas for all station species.
+
The ability to colour bandanas with a crayon in a washing machine.
+
Refactors the bandana adjustment system.
+
Minor adjustments to Tajaran and Unathi bandana east/west sprites.
+
Adjusting a bandana will now take if off of your head/face and put it in an available hand. If both hands are available, it goes in the selected hand.
+
Adjusting a coloured bandana will no longer revert it to the original coloured icons anymore.
+
Adjusting a bandana from mask-style to hat-style means the bandana won't obscure your identity anymore.
+
Greys now use re-positioned smokeables. They no longer smoke out the eyes.
+
+
TheDZD updated:
+
+
Fixes spacepods being able to shoot through walls.
+
Lowers spacepod weapons fire delay.
+
Increases spacepod weapons energy costs.
+
Makes spacepods move at speeds not rivaling those of photon beams. They are now a hair bit faster than a person with a jetpack.
+
Reduces battery costs for spacepod movement.
+
+
+
10 February 2016
+
Crazylemon64 updated:
+
+
The cloner now checks for NO_SCAN on the brain when scanning - unclonable species are now truly unclonable. You are still able to revive them with a brain transplant and a defib, however.
+
A tier-4 DNA scanner linked to a cloning system will now be able to reproduce a body from a brain's DNA, in event of the original corpse being gibbed or similar.
+
Species with organic limbs and NO_BLOOD will no longer bleed (though still on hit - write that off as "bone powder")
+
Skeletons now lack internal organs, except for the runic mind which exists in their head - an analogue for the brain
+
Skeletons that drink milk will be regenerated at a moderate pace, have a small chance of mending bones, and will praise the great name of mr skeltal
+
Adds a reagent system for species reacting to specific reagents
+
Slime People can now select from all human hairstyles, and their "hair" will be tinted a shade of their body.
+
Increases the frequency of the cortical borer event.
+
People with borers cannot commit suicide - this applies to a controlling borer, too.
+
Borers can no longer overdose their hosts.
+
Borers can now inject Saline-Glucose, Spaceacillin, Hydrocodone, Mitocholide, Salbutamol, Capulettium+, and Charcoal. Styptic was removed, as it's pathetic at healing when directly injected. Salicyclic acid was removed too, as its functionality is duplicated by both hydrocodone and saline-glucose.
+
A mind trapped by a cortical borer can now understand things it could understand when normally in its body.
+
Changes chemistry's welding tank to a wall-mounted version, to increase the room available.
+
You can now gib butterflies and lizards with a knife
+
Ghosts can now follow mecha
+
You can now access an R&D console by emagging it - it did nothing before.
+
Walls will now properly smooth and show damage.
+
Fixes the dialog that occurs when the AI shuts off to actually do what it says it does
+
+
Fox McCloud updated:
+
+
Fixes not being able to attach IEDs to beartraps
+
Can no longer spamclick someone to death using headslamming on a toilet/urimal
+
Toilet/urinal headslamming now plays a sound
+
Toilet headslamming damage reduced slightly
+
Can now fill open reagent containers in a toilet to receive "toilet water".
+
No more message spam when someone fills a container using a sink
+
Can now wash your face using a sink, which washes away lipstick and wakes you up slightly
+
Washing things will now use progress bars
+
Ensures consuming a single syndicate donk pocket won't get you addicted to meth
+
Kinetic Accelerators and E-bows automatically reload
+
+
Glorken updated:
+
+
Added a Knight Arena for Holodeck.
+
Added red and blue claymore sprites.
+
Changed overrided to overrode when emagging Holodeck computer.
+
+
KasparoVy updated:
+
+
Vox versions of the Officer SWAT sechailer + HOS SWAT sechailer + Warden SWAT sechailer.
+
Resprited versions of most Human masks to fit Unathi, Tajara and Vulpkanin.
+
Warden now gets their own version of the SWAT sechailer in their locker.
+
HOS now gets the appropriate version of the SWAT sechailer in their locker.
+
Repositioned smokeables now available for Vox, Unathi, Tajara and Vulpkanin.
Corrects all non-Human species' breath mask (incl. surgical/sterile mask) down-state icons to use the right position style.
+
Minor adjustments to Tajaran breath mask up-state sprites.
+
+
PPI updated:
+
+
Adds a reconnect button to the File menu in the client.
+
Adds head patting
+
+
Regen updated:
+
+
Powersink can now drain a lot more power before going boom
+
Buffed the powersinks drain rate
+
Buffed explosion from an overloaded powersink, try to find it instead of overloading the grid.
+
Admin log warning before the powersink explodes
+
+
Spacemanspark updated:
+
+
Miners can now utilize the power of mob capsules to take along their lazarus injected mining creatures!
+
Store your Pokemo- er, sorry, I mean mining mobs that you've captured in the lazarus capsule belt.
+
+
Tastyfish updated:
+
+
Species that don't breathe can kill themselves now!
+
Suicide messages are now catered to your species.
+
Shortened the default pill & patch name when using the ChemMaster.
+
The chaplain now has a service radio headset, as Space Jesus intended.
+
+
TheDZD updated:
+
+
When Ahelping, "Question" is now "Mentorhelp" and "Player Complaint" is now "Adminhelp."
+
Mentorhelps and PM replies from mentors appear in a bold aqua blue color.
+
Adminhelps and PM replies from admins appear in a bold bright red color.
+
PM replies from players appear in a dull/dark purple color.
+
Adds admin attack log to players being converted to cult.
+
Adds shadowling thrall jobbans.
+
Jobbanned players who are converted to shadowling thrall, revolutionary, or cultist will have the control of their body offered up to eligible ghosts.
+
+
+
31 January 2016
+
Crazylemon64 updated:
+
+
Syndicate borgs can now interact with station machinery
+
People with slime people limbs can now *squish
+
Skrell's vulnerability to alcohol is checked on their liver, now - a liver transplant will let them take alcohol like a champ - lacking a liver will have the same effect as being a skrell, when drinking
+
+
FalseIncarnate updated:
+
+
Adds in the Magic Eight Ball toy, found in Claw Game prize orbs.
+
Adds in the Magic Conch Shell, an admin-only shell of power.
+
+
Fox McCloud updated:
+
+
Updates Summon Guns and Magic to include many of the new guns
+
Summon Guns/Magic can no longer be used during Ragin' Mages
+
+
Tastyfish updated:
+
+
The emergency shuttle status in the Status tab now has ETA/ETD/etc like before.
+
Code Gamma+ now has a 5 minute emergency shuttle call, like Red.
+
+
pinatacolada updated:
+
+
Adds NanoUI to the operating computer
+
Adds health announcing, critical and oxygen damage aural alerts to the computer, with a menu to selectively turn them on and off
+
+
+
29 January 2016
+
Crazylemon updated:
+
+
The DNA scanner has now undergone a seminar to recognize fake identities; It will now scan the actual person's identity, rather than their disguise (read: wearing a mask with or without someone else's ID).
+
Matter eater now allows you to eat humans as if you were fat.
+
Eating mobs with an aggressive grab now generates attack logs.
+
+
Crazylemon64 updated:
+
+
For a short while, there was a clerical error where all AI communications equipment was replaced with bananas. This has now been fixed.
+
Ghosts can now see the contents of smartfridges and look at the drone console
+
Humans now only produce one message when shaken while SSD
+
The supermatter no longer will irradiate everyone, everywhere, when it explodes.
+
Writing on paper will now add hidden admin fingerprints, so that you can't forge mean notes in someone else's name.
+
Brains are no longer able to escape their brain by being a sorcerer.
+
Astral projecting with other runes on the same tile will now no longer prevent you from re-entering
+
Voxxy that is become ex-voxxy no longer carry voxxy appearance! yaya!
+
+
FalseIncarnate updated:
+
+
Allows plants to be identified as enhanced*. Enhancing plants results from using reagents (like saltpetre) that affect the stats of a seed instead of using mutagens/machines. *May not meet standards for being classified as "organic produce". (This was already possible, just renames enhanced plants for easier differentiation)
+
+
Fox McCloud updated:
+
+
Fixes mutadone not working with some genetic mutations
+
Fixes banana honk and silencer being alcoholic
+
Fixes Kahlua being non-alcoholic
+
Fixes polonium not metabolizing
+
Fixes being able to receive free unlimited boxes from the Merchandise store
+
Adds in wooden bucklers
+
Re-adds roman shield to the costume vendor
+
Buffs Riot shield damage from 8 to 10
+
Adds in a Skeleton race
+
Tweaks the skeletons colors to be more realistic and to blend in less with the floor
+
Adds in lichdom spell for the wizard
+
Adds in lesser summon guns spell for wizard
+
adds in Mjolnir and the singularity hammer as weapons the wizard can purchase
+
Wizard can purchase the charge spell from the spell book
+
Wizard can purchase a healing staff from the spell book
+
Tweaks and lowers spell costs of utility spells for wizard
+
Re-organizes the spellbook to be better divided into categories and have a better window size
+
Knock now opens+unlocks lockers
+
Magic Missile has a slightly longer cooldown and no longer deals damage, but has a lower cooldown is upgraded
+
+
KasparoVy updated:
+
+
Navy blue Centcom Officer's beret for use by the Blueshield.
+
Adds the new navy blue beret to the Blueshield's locker.
+
Gives the Blueshield's berets (black and navy blue) the exact same strip delay and armour as the Security Officer's beret.
+
Adds TG energy katana back and belt sprite.
+
Bo staff back sprite.
+
Adjusts energy katana sprites to make the weapon stand out a bit more from the regular katana.
+
Cutting open the toes of footwear so species with feet-claws can wear them.
+
Toeless jackboots.
+
Cleans up glovesnipping and lighting a match with a shoe.
+
Lighting a match with a shoe produces a more appropriate message, handled at the same standard as glove-snippingboot-cutting.
+
+
Tastyfish updated:
+
+
Cargonia now has its own section in the manifest.
+
+
TheDZD updated:
+
+
Due to budget cuts and reports of operatives accidentally firing enough bullets to reach a state of what our scientists refer to as "enough dakka," Syndicate High Command has decided to restore the Syndicate Strike Team arsenal to using standard-issue L6 SAW ammunition.
+
+
+
24 January 2016
+
KasparoVy updated:
+
+
Fixes markings overlaying underwear.
+
Nude icon in underwear.dmi
+
Fixes Vox robes not using the correct on-mob sprites.
+
Fixes unreported bug where there was a slim chance during character preview icon generation that a character with Security Officer set to high would get rendered with either the wrong beret sprite or no beret sprite at all.
+
Fixes an issue where Sigholt's fluff beret wasn't using the correct sprites.
+
+
Tastyfish updated:
+
+
Passively power-consuming borg modules, such as the peacekeeper movement and shield module, won't spam the user infinitely if they're low on power anymore.
+
+
+
23 January 2016
+
Fox McCloud updated:
+
+
Removes Vampire HUD
+
moves the Vampire blood counter to a more easy to see location
+
Adds in a Changeling chemical counter display
+
Adds in a Changeling sting counter display
+
Vampire total blood and usable blood will now appear under status
+
Changes vampire blood display to be similar to ling chemical counter
+
Fixes unnecessary toxin damage being dealt on severe bloodloss
+
Fixes human mobs not receiving proper random names
+
Adds in knight armor
+
Grants the chaplain a set of crusader knight armor
+
Adds in cult-resistant ERT paranormal space suit
+
Allows the Chaplain to convert his null rod into a holy sword with crusader knight armor
+
Chaplain's closet is now a secure closet
+
Adds in Assault Gear crate to cargo
+
Adds in military assault belt
+
Adds in spaceworthy swat suits
+
tweaks bandolier to hold 2 additional shotgun shells
+
bartender starts off with +2 additional shells
+
Reduces the cost of the space suit crate and doubles its contents
+
Refactors knives so their behavior is more universal
+
Fixes Hulk not properly being removed when your health drops below a threshold
+
Fixes flickering vision in a mining mech
+
+
Tastyfish updated:
+
+
Poly has taken a seminar on the latest trends in engine operations.
+
Player-controller parrots can now hear their headsets.
+
+
Tigerbat2000 updated:
+
+
The nuclear disk escaping on the shuttle no longer counts as a syndicate minor victory.
+
Cultists can once again actually greentext the escape objective.
+
+
+
20 January 2016
+
DarkPyrolord updated:
+
+
Adds in hardsuit sprites for Vulpkanin
+
+
FalseIncarnate updated:
+
+
Allowed cheap lighters and individual matches to be put into cigarette packages at the cost of cigarette space.
+
Matches can now be lit and put out by striking the match on your shoes. Good for if you lose that matchbox, or want to just feel cool.
+
+
Fox McCloud updated:
+
+
Fixes brute damage on weapons not knocking people down.
+
Tweaks implant behavior to be more consistent and unified.
+
Lowers the pAI cooldown from 60 seconds to 5 seconds.
+
Raw telecrystal can now be used to charge uplink implants.
Vulpkanin hardsuit helmets with proper flashlight-on sprites.
+
+
Tastyfish updated:
+
+
The ID computer Access Report printout now separates the access list with commas so it's actually readable.
+
The ID computer Access Report printout isn't blank if you don't have an authorization card in anymore.
+
In the supply ordering & shuttle consoles, one can now cancel an order at either the Reason or Amount input dialogs.
+
Table flipping uses correct sprites.
+
+
TheDZD updated:
+
+
Adds world.Topic() handling so that users are notified in-game when pull requests are opened, closed, or merged on the Github repo.
+
+
+
18 January 2016
+
Crazylemon updated:
+
+
New classes of shapeshifters have been sighted around the NSS Cyberiad...
+
Wizards now can't teleport to other antag spawn points.
+
Removes an extruding pixel from the left-facing IPC glider monitor sprite.
+
Ragin' Mages now spawn every 7 minutes, instead of 5. Admins can further adjust this by modifying the 'delay_per_mage' variable.
+
Ragin' Mages are now made with 100% less in-use souls (Apprentices won't have their consciousness yoinked).
+
It takes half an hour for the REAL chaos of ragin' mages to start, for at least a semblance of normality.
+
+
Dave The Headcrab updated:
+
+
Adds the advanced energy revolver, toggles between taser and laser modes.
+
Removes the detective's revolver from the blueshield's locker.
+
Changes the taser the blueshield starts with into an advanced energy revolver.
+
+
Deanthelis updated:
+
+
Added the ability for the Magnetic Gripper to pick up and place light tiles.
+
+
Fethas updated:
+
+
Readds the hud icon showing up for master and servent
+
adds mindslave datum hud thingy based on TGs gang huds
+
+
Fox McCloud updated:
+
+
Fixes not being able to add/remove Weapon Permit from IDs.
+
Fixes the energy sword being invisible in-hand when turned on.
+
Fixes the telebaton being invisible in-hand when extended.
+
Fixes eye-stabbing not having an attack animation or hitsound.
+
Fixes some kitchen utensils playing the wrong hit-sound and playing twice in some cases.
+
Fixes the butcher cleaver sprite being backwards.
+
Fixes the telebaton sprite being missing from the side.
+
Fixes the meat cleaver being invisible in-hand.
+
Corrects some grammatical descriptive errors for the elite syndicate hardsuit.
+
completely overhauls implants to TG's standards.
+
Adds storage implant.
+
Adds microbomb and macrobomb implants.
+
Adds in support for removing implants directly into cases.
+
Removes Bay style explosive implants.
+
Removes compressed matter implants.
+
Tweaks the uplink to reflect removal of the old implants and inclusion of the new.
+
Fixes/cuts down on the lag caused by monkey cubes.
+
+
Jey updated:
+
+
Inflatable walls and door can now be deflated by altclicking them
+
Fixed lag from expanding multiple monkeycubes at once.
+
+
KasparoVy updated:
+
+
Adds blank icons with standardized timings for species tail wagging, used in icon generation.
+
Fixes tails overlapping arms/limbs + gloves, etc. when facing EAST or WEST.
+
Ensures tails will overlap stuff as normal only when facing NORTH so as to avoid unwanted interference with the base sprite.
+
Tails now appear in ID cards, overlays things correctly.
+
Tails now overlay and are overlaid by things correctly in preview icons.
+
Modifies the positioning of tail icon generation in the ID card preview icon generation file.
+
Modifies the positioning of tail icon generation in the player preferences preview icon generation file.
+
Breaks limb generation into its own layer, breaks tail generation into a second layer that can be overlaid by limbs.
+
If the user's species is flagged to have a tail that is overlapped, TAIL_LAYER will now overlay the NORTH direction sprite of a tail now, while TAIL_UNDERLIMBS_LAYER gets all remaining directions. Otherwise icons are generated in the traditional manner.
+
Adjusts the Unathi right arm east direction and animated tail sprites, recolouring a random pixel and fixing a floating tail respectively.
+
Adjusts position of tail layer such that tails' north direction sprites will overlay backpacks (more importantly, satchel straps).
+
Accommodates admin-overrides to the body_accessory species check by setting the default animation template to Vulpkanin.
+
Adjusts north-direction Unathi static tail sprite, now attaches to the body in the correct location.
Adjusts NV science goggles object icon. Removed strange border and centered it.
+
Ports Polaris' PRs 761 and 778, brings over Ragnie's awesome Ward-Takahashi prosthetics.
+
+
Kyep updated:
+
+
Changing level to gamma/delta/epsilon now displays a special gamma/delta/epsilon sprite on status monitors
+
Changing level to green/blue now clears the status monitors, so they no longer show higher alert levels after the level is changed
+
+
NTSAM updated:
+
+
Added a rainbow IPC screen.
+
+
PPI updated:
+
+
Modifies the effective time limit to activate the Nuclear Challenge as Nukeops from two minutes to seven minutes
+
+
Tastyfish updated:
+
+
The QM now actually has a QM stamp instead of a fake one, as well as an approved and denied stamp.
+
New area named 'Genetics Maintenance' solidifying/relabelling the confusing area between the morge and Mech Bay as being fully maintenance again, but working correctly and with proper doors.
+
Fixed a few maintenance door names to be in parity to the rest of the station.
+
Added the ability to print the records photo of a crew member from a security records console. Useful for Wanted notices!
+
+
Tigercat2000 updated:
+
+
You can no longer use the gibber for monkies.
+
Cleaned up gibber.dm styling.
+
The fire alarm now uses NanoUI, with color coded alert levels.
+
Upgraded NanoUI (again), fancy FontAwesome icons.
+
Didn't add any butts. Yet.
+
+
+
13 January 2016
+
Fox McCloud updated:
+
+
Fixes Rezadone not clearing mutated organs.
+
Clone damage immunity removed from Slime People, Shadowlings, Golems, and Vox
+
Explosions will no longer destroy things underneath turfs until the turf is exposed.
+
fixes a runtime related to revolver spinning.
+
fixes server loading taking an abnormally long time.
+
+
Kyep updated:
+
+
Blob, vine and virus outbreaks are now more clearly labeled as such, to avoid people confusing them with each other
+
+
Tastyfish updated:
+
+
NT Rep fountain pens and magistrate gold pens can now write in 5 different colors. The IAA gets a cheap plastic equivalent.
+
+
+
11 January 2016
+
CrAzYPiLoT updated:
+
+
Fixes the footsteps sounds to the fullest.
+
+
Crazylemon updated:
+
+
Bomb guardians now automatically notify their master when they've set something to boom, so there's less accidental friendly fire
+
Bomb guardians are only notified that their trap failed, if it ACTUALLY FAILED.
+
Bomb guardians now are more aware of what is primed to explode.
+
Bomb guardian summoners can now defuse their guardian's bombs without harm.
+
Brought RAGIN' MAGES back up to function.
+
+
Dave The Headcrab updated:
+
+
Added a new icon for the soy and cafe latte drinks. Icons courtesy of Full Of Skittles, resident overlord of art.
+
+
Fox McCloud updated:
+
+
Re-arranges the armory and changes its contents minorly.
+
Adds in rubbershot ammo boxes.
+
Fixes Mutadone incurring a massive cost on the server.
+
Positronic brains can no longer speak binary.
+
Positronic brains can be prevented from speaking (or allowed) by toggling their speaker on/off.
+
IPC's positronic brains start off toggled off.
+
Fixes the supermatter announcement causing massive amounts of server lag.
+
Adds in tradable telecrystals.
+
+
+
08 January 2016
+
Crazylemon updated:
+
+
Fully enables a system to allow species to have unique procs and verbs that come and go with the species.
+
IPCs lose their change monitor verb when changing species now. Gone are the days of recalling a past IPC life to perform self-barbery! Oh, woe is me!
+
Sleepers and Body Scanners will now reliably work when rotated
+
SSD humans should be asleep more reliably now.
+
+
Dave The Headcrab updated:
+
+
Nerfs the damage the Detective's revolver does from 15 brute to 5 brute.
+
Adds a 300 round capacity buckshot magizine that fits into the L6 Saw.
+
Adds a 25 round capacity 40mm HE magizine that fits into the L6 Saw.
+
Adds the 'Devastator' L6 SAW, starts off loaded with the buckshot magizine.
+
Gives the SST the 'Devastator' L6 Saw, and one of each mag type in their bag.
+
+
FalseIncarnate updated:
+
+
Plants will now begin to die over time if their age exceeds 5 times their TRAIT_MATURATION value.
+
Weed growth chance per process in trays has been slightly increased (Previously: 5% chance if no seed, 1% otherwise;Now: 6% / 3%).
+
Pest growth in trays has been slightly buffed. (Previously: 3% chance to increase by 0.1; Now: 5% chance to increase by 0.5)
+
+
Fethas updated:
+
+
Due to Archmage Steve leaving the nya-cromantic stone near the microwave, the true power of the stone has been unleashed. Subjects of the stone are not only ressurected ... but resurrected as catgirls ... We fired steve.
+
+
Fox McCloud updated:
+
+
fixes a bug relating to some brute/burn damage being dealt to human mobs.
+
Adds in overloading APCs, causing them to arc electricity to mobs in range.
+
Makes Engineering related APCs overload proof.
+
Implements the timestop spell.
+
Implements new sepia slime reaction which halts time in an AoE.
+
sentience potions no longer can make slimes sentient.
+
Removes Hulk instant stun.
+
Hulk damage increased.
+
Hulk wears off at a lower health threshold.
+
Fixes strange reagent not working on simple animals.
+
Reduces the amount shock damage and bounces for the Tesla engine.
+
Fixes Syndicate Cyborg's LMG being invisible.
+
Fixes the uplink kit having implanters that were both nameless and looked as if they had been used.
+
+
KasparoVy updated:
+
+
Added the security gasmask, sexy mime mask, bandanas, balaclava, welding gas mask and wrestling masks for Vox. Added adjusted-state sprites for the Vox breath, medical, and surgical masks.
+
Removed a duplicate of the human balaclava sprite.
+
Modifies the Vox plague-doctor, fake moustache, sterile and medical mask sprites to fit the Vox anatomy and animates the Vox SWAT mask. Corrects the names of some Vox mask adjusted-state sprites.
+
+
Tastyfish updated:
+
+
Fixed the pronouns in a few verbs and the door to 'Interrogation Observervtion'.
+
+
Tigercat2000 updated:
+
+
Added 96x96 (3x) res option to icons menu
+
+
+
06 January 2016
+
Certhic updated:
+
+
Corrected some air alarms so that atmos computer can access them
+
Bodyscanner now sees mechanical parts in internal organs
+
+
Crazylemon64 updated:
+
+
Sleeping simple animals should tick down sleeping as normal - deaf simple mobs are no longer a thing
+
+
Tastyfish updated:
+
+
Instruments now use NanoUI.
+
Corrected the blueshield mission briefing.
+
+
+
03 January 2016
+
TheDZD updated:
+
+
Ports over changelog system from /tg/station.
+
+
+
+GoonStation 13 Development Team
+
+ Coders: Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion
+ Spriters: Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No
+
+
+
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 627ffd6b9d7..4775ba05121 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -1,1261 +1,1299 @@
-DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
----
-2016-01-03:
- TheDZD:
- - rscadd: Ports over changelog system from /tg/station.
-2016-01-06:
- Certhic:
- - bugfix: Corrected some air alarms so that atmos computer can access them
- - bugfix: Bodyscanner now sees mechanical parts in internal organs
- Crazylemon64:
- - bugfix: Sleeping simple animals should tick down sleeping as normal - deaf simple
- mobs are no longer a thing
- Tastyfish:
- - tweak: Instruments now use NanoUI.
- - spellcheck: Corrected the blueshield mission briefing.
-2016-01-08:
- Crazylemon:
- - rscadd: Fully enables a system to allow species to have unique procs and verbs
- that come and go with the species.
- - rscdel: IPCs lose their change monitor verb when changing species now. Gone are
- the days of recalling a past IPC life to perform self-barbery! Oh, woe is me!
- - bugfix: Sleepers and Body Scanners will now reliably work when rotated
- - bugfix: SSD humans should be asleep more reliably now.
- Dave The Headcrab:
- - tweak: Nerfs the damage the Detective's revolver does from 15 brute to 5 brute.
- - rscadd: Adds a 300 round capacity buckshot magizine that fits into the L6 Saw.
- - rscadd: Adds a 25 round capacity 40mm HE magizine that fits into the L6 Saw.
- - rscadd: Adds the 'Devastator' L6 SAW, starts off loaded with the buckshot magizine.
- - rscadd: Gives the SST the 'Devastator' L6 Saw, and one of each mag type in their
- bag.
- FalseIncarnate:
- - rscadd: Plants will now begin to die over time if their age exceeds 5 times their
- TRAIT_MATURATION value.
- - tweak: 'Weed growth chance per process in trays has been slightly increased (Previously:
- 5% chance if no seed, 1% otherwise;Now: 6% / 3%).'
- - tweak: 'Pest growth in trays has been slightly buffed. (Previously: 3% chance
- to increase by 0.1; Now: 5% chance to increase by 0.5)'
- Fethas:
- - rscadd: Due to Archmage Steve leaving the nya-cromantic stone near the microwave,
- the true power of the stone has been unleashed. Subjects of the stone are not
- only ressurected ... but resurrected as catgirls ... We fired steve.
- Fox McCloud:
- - bugfix: fixes a bug relating to some brute/burn damage being dealt to human mobs.
- - rscadd: Adds in overloading APCs, causing them to arc electricity to mobs in range.
- - tweak: Makes Engineering related APCs overload proof.
- - rscadd: Implements the timestop spell.
- - rscadd: Implements new sepia slime reaction which halts time in an AoE.
- - tweak: sentience potions no longer can make slimes sentient.
- - tweak: Removes Hulk instant stun.
- - tweak: Hulk damage increased.
- - tweak: Hulk wears off at a lower health threshold.
- - bugfix: Fixes strange reagent not working on simple animals.
- - tweak: Reduces the amount shock damage and bounces for the Tesla engine.
- - bugfix: Fixes Syndicate Cyborg's LMG being invisible.
- - bugfix: Fixes the uplink kit having implanters that were both nameless and looked
- as if they had been used.
- KasparoVy:
- - rscadd: Added the security gasmask, sexy mime mask, bandanas, balaclava, welding
- gas mask and wrestling masks for Vox. Added adjusted-state sprites for the Vox
- breath, medical, and surgical masks.
- - rscdel: Removed a duplicate of the human balaclava sprite.
- - tweak: Modifies the Vox plague-doctor, fake moustache, sterile and medical mask
- sprites to fit the Vox anatomy and animates the Vox SWAT mask. Corrects the
- names of some Vox mask adjusted-state sprites.
- Tastyfish:
- - spellcheck: Fixed the pronouns in a few verbs and the door to 'Interrogation Observervtion'.
- Tigercat2000:
- - rscadd: Added 96x96 (3x) res option to icons menu
-2016-01-11:
- CrAzYPiLoT:
- - bugfix: Fixes the footsteps sounds to the fullest.
- Crazylemon:
- - rscadd: Bomb guardians now automatically notify their master when they've set
- something to boom, so there's less accidental friendly fire
- - bugfix: Bomb guardians are only notified that their trap failed, if it ACTUALLY
- FAILED.
- - rscadd: Bomb guardians now are more aware of what is primed to explode.
- - rscadd: Bomb guardian summoners can now defuse their guardian's bombs without
- harm.
- - rscadd: Brought RAGIN' MAGES back up to function.
- Dave The Headcrab:
- - rscadd: Added a new icon for the soy and cafe latte drinks. Icons courtesy of
- Full Of Skittles, resident overlord of art.
- Fox McCloud:
- - rscadd: Re-arranges the armory and changes its contents minorly.
- - rscadd: Adds in rubbershot ammo boxes.
- - bugfix: Fixes Mutadone incurring a massive cost on the server.
- - tweak: Positronic brains can no longer speak binary.
- - tweak: Positronic brains can be prevented from speaking (or allowed) by toggling
- their speaker on/off.
- - tweak: IPC's positronic brains start off toggled off.
- - bugfix: Fixes the supermatter announcement causing massive amounts of server lag.
- - rscadd: Adds in tradable telecrystals.
-2016-01-13:
- Fox McCloud:
- - bugfix: Fixes Rezadone not clearing mutated organs.
- - tweak: Clone damage immunity removed from Slime People, Shadowlings, Golems, and
- Vox
- - tweak: Explosions will no longer destroy things underneath turfs until the turf
- is exposed.
- - bugfix: fixes a runtime related to revolver spinning.
- - bugfix: fixes server loading taking an abnormally long time.
- Kyep:
- - rscadd: Blob, vine and virus outbreaks are now more clearly labeled as such, to
- avoid people confusing them with each other
- Tastyfish:
- - tweak: NT Rep fountain pens and magistrate gold pens can now write in 5 different
- colors. The IAA gets a cheap plastic equivalent.
-2016-01-18:
- Crazylemon:
- - rscadd: New classes of shapeshifters have been sighted around the NSS Cyberiad...
- - bugfix: Wizards now can't teleport to other antag spawn points.
- - bugfix: Removes an extruding pixel from the left-facing IPC glider monitor sprite.
- - tweak: Ragin' Mages now spawn every 7 minutes, instead of 5. Admins can further
- adjust this by modifying the 'delay_per_mage' variable.
- - bugfix: Ragin' Mages are now made with 100% less in-use souls (Apprentices won't
- have their consciousness yoinked).
- - tweak: It takes half an hour for the REAL chaos of ragin' mages to start, for
- at least a semblance of normality.
- Dave The Headcrab:
- - rscadd: Adds the advanced energy revolver, toggles between taser and laser modes.
- - rscdel: Removes the detective's revolver from the blueshield's locker.
- - tweak: Changes the taser the blueshield starts with into an advanced energy revolver.
- Deanthelis:
- - rscadd: Added the ability for the Magnetic Gripper to pick up and place light
- tiles.
- Fethas:
- - bugfix: Readds the hud icon showing up for master and servent
- - rscadd: adds mindslave datum hud thingy based on TGs gang huds
- Fox McCloud:
- - bugfix: Fixes not being able to add/remove Weapon Permit from IDs.
- - bugfix: Fixes the energy sword being invisible in-hand when turned on.
- - bugfix: Fixes the telebaton being invisible in-hand when extended.
- - bugfix: Fixes eye-stabbing not having an attack animation or hitsound.
- - bugfix: Fixes some kitchen utensils playing the wrong hit-sound and playing twice
- in some cases.
- - bugfix: Fixes the butcher cleaver sprite being backwards.
- - bugfix: Fixes the telebaton sprite being missing from the side.
- - bugfix: Fixes the meat cleaver being invisible in-hand.
- - spellcheck: Corrects some grammatical descriptive errors for the elite syndicate
- hardsuit.
- - rscadd: completely overhauls implants to TG's standards.
- - rscadd: Adds storage implant.
- - rscadd: Adds microbomb and macrobomb implants.
- - rscadd: Adds in support for removing implants directly into cases.
- - rscdel: Removes Bay style explosive implants.
- - rscdel: Removes compressed matter implants.
- - tweak: Tweaks the uplink to reflect removal of the old implants and inclusion
- of the new.
- - bugfix: Fixes/cuts down on the lag caused by monkey cubes.
- Jey:
- - tweak: Inflatable walls and door can now be deflated by altclicking them
- - bugfix: Fixed lag from expanding multiple monkeycubes at once.
- KasparoVy:
- - imageadd: Adds blank icons with standardized timings for species tail wagging,
- used in icon generation.
- - bugfix: Fixes tails overlapping arms/limbs + gloves, etc. when facing EAST or
- WEST.
- - bugfix: Ensures tails will overlap stuff as normal only when facing NORTH so as
- to avoid unwanted interference with the base sprite.
- - bugfix: Tails now appear in ID cards, overlays things correctly.
- - bugfix: Tails now overlay and are overlaid by things correctly in preview icons.
- - tweak: Modifies the positioning of tail icon generation in the ID card preview
- icon generation file.
- - tweak: Modifies the positioning of tail icon generation in the player preferences
- preview icon generation file.
- - tweak: Breaks limb generation into its own layer, breaks tail generation into
- a second layer that can be overlaid by limbs.
- - tweak: If the user's species is flagged to have a tail that is overlapped, TAIL_LAYER
- will now overlay the NORTH direction sprite of a tail now, while TAIL_UNDERLIMBS_LAYER
- gets all remaining directions. Otherwise icons are generated in the traditional
- manner.
- - tweak: Adjusts the Unathi right arm east direction and animated tail sprites,
- recolouring a random pixel and fixing a floating tail respectively.
- - tweak: Adjusts position of tail layer such that tails' north direction sprites
- will overlay backpacks (more importantly, satchel straps).
- - tweak: Accommodates admin-overrides to the body_accessory species check by setting
- the default animation template to Vulpkanin.
- - tweak: Adjusts north-direction Unathi static tail sprite, now attaches to the
- body in the correct location.
- - rscadd: Adds some TG underwear.
- - rscadd: Adds an NV science goggles worn sprite.
- - rscadd: Ports Bay/TG berets.
- - tweak: Adjusts beret sprite, recolours strange orange pixels.
- - tweak: Adjusts NV science goggles object icon. Removed strange border and centered
- it.
- - rscadd: Ports Polaris' PRs 761 and 778, brings over Ragnie's awesome Ward-Takahashi
- prosthetics.
- Kyep:
- - rscadd: Changing level to gamma/delta/epsilon now displays a special gamma/delta/epsilon
- sprite on status monitors
- - bugfix: Changing level to green/blue now clears the status monitors, so they no
- longer show higher alert levels after the level is changed
- NTSAM:
- - rscadd: Added a rainbow IPC screen.
- PPI:
- - tweak: Modifies the effective time limit to activate the Nuclear Challenge as
- Nukeops from two minutes to seven minutes
- Tastyfish:
- - rscadd: The QM now actually has a QM stamp instead of a fake one, as well as an
- approved and denied stamp.
- - rscadd: New area named 'Genetics Maintenance' solidifying/relabelling the confusing
- area between the morge and Mech Bay as being fully maintenance again, but working
- correctly and with proper doors.
- - spellcheck: Fixed a few maintenance door names to be in parity to the rest of
- the station.
- - rscadd: Added the ability to print the records photo of a crew member from a security
- records console. Useful for Wanted notices!
- Tigercat2000:
- - rscdel: You can no longer use the gibber for monkies.
- - spellcheck: Cleaned up gibber.dm styling.
- - rscadd: The fire alarm now uses NanoUI, with color coded alert levels.
- - tweak: Upgraded NanoUI (again), fancy FontAwesome icons.
- - wip: Didn't add any butts. Yet.
-2016-01-20:
- DarkPyrolord:
- - rscadd: Adds in hardsuit sprites for Vulpkanin
- FalseIncarnate:
- - rscadd: Allowed cheap lighters and individual matches to be put into cigarette
- packages at the cost of cigarette space.
- - rscadd: Matches can now be lit and put out by striking the match on your shoes.
- Good for if you lose that matchbox, or want to just feel cool.
- Fox McCloud:
- - bugfix: Fixes brute damage on weapons not knocking people down.
- - tweaks: Tweaks implant behavior to be more consistent and unified.
- - tweak: Lowers the pAI cooldown from 60 seconds to 5 seconds.
- - rscadd: Raw telecrystal can now be used to charge uplink implants.
- - bugfix: Fixes being unable to holster the pulse pistol
- - bugfix: Fixes being able to holster shotguns
- KasparoVy:
- - tweak: Improved shading on all Vulpkanin hardsuit tails.
- - tweak: Vulpkanin hardsuit helmet respriting (colour tweaks).
- - rscadd: Vulpkanin hardsuit helmets with proper flashlight-on sprites.
- Tastyfish:
- - tweak: The ID computer Access Report printout now separates the access list with
- commas so it's actually readable.
- - bugfix: The ID computer Access Report printout isn't blank if you don't have an
- authorization card in anymore.
- - rscadd: In the supply ordering & shuttle consoles, one can now cancel an order
- at either the Reason or Amount input dialogs.
- - bugfix: Table flipping uses correct sprites.
- TheDZD:
- - rscadd: Adds world.Topic() handling so that users are notified in-game when pull
- requests are opened, closed, or merged on the Github repo.
-2016-01-23:
- Fox McCloud:
- - rscdel: Removes Vampire HUD
- - tweak: moves the Vampire blood counter to a more easy to see location
- - rscadd: Adds in a Changeling chemical counter display
- - rscadd: Adds in a Changeling sting counter display
- - rscadd: Vampire total blood and usable blood will now appear under status
- - tweak: Changes vampire blood display to be similar to ling chemical counter
- - bugfix: Fixes unnecessary toxin damage being dealt on severe bloodloss
- - bugfix: Fixes human mobs not receiving proper random names
- - rscadd: Adds in knight armor
- - rscadd: Grants the chaplain a set of crusader knight armor
- - rscadd: Adds in cult-resistant ERT paranormal space suit
- - rscadd: Allows the Chaplain to convert his null rod into a holy sword with crusader
- knight armor
- - tweak: Chaplain's closet is now a secure closet
- - rscadd: Adds in Assault Gear crate to cargo
- - rscadd: Adds in military assault belt
- - rcsadd: Adds in spaceworthy swat suits
- - tweak: tweaks bandolier to hold 2 additional shotgun shells
- - tweak: bartender starts off with +2 additional shells
- - tweak: Reduces the cost of the space suit crate and doubles its contents
- - rscadd: Refactors knives so their behavior is more universal
- - bugfix: Fixes Hulk not properly being removed when your health drops below a threshold
- - bugfix: Fixes flickering vision in a mining mech
- Tastyfish:
- - rscadd: Poly has taken a seminar on the latest trends in engine operations.
- - rscadd: Player-controller parrots can now hear their headsets.
- Tigerbat2000:
- - bugfix: The nuclear disk escaping on the shuttle no longer counts as a syndicate
- minor victory.
- - bugfix: Cultists can once again actually greentext the escape objective.
-2016-01-24:
- KasparoVy:
- - bugfix: Fixes markings overlaying underwear.
- - rscadd: Nude icon in underwear.dmi
- - bugfix: Fixes Vox robes not using the correct on-mob sprites.
- - bugfix: Fixes unreported bug where there was a slim chance during character preview
- icon generation that a character with Security Officer set to high would get
- rendered with either the wrong beret sprite or no beret sprite at all.
- - bugfix: Fixes an issue where Sigholt's fluff beret wasn't using the correct sprites.
- Tastyfish:
- - bugfix: Passively power-consuming borg modules, such as the peacekeeper movement
- and shield module, won't spam the user infinitely if they're low on power anymore.
-2016-01-29:
- Crazylemon:
- - bugfix: 'The DNA scanner has now undergone a seminar to recognize fake identities;
- It will now scan the actual person''s identity, rather than their disguise (read:
- wearing a mask with or without someone else''s ID).'
- - rscadd: Matter eater now allows you to eat humans as if you were fat.
- - tweak: Eating mobs with an aggressive grab now generates attack logs.
- Crazylemon64:
- - bugfix: For a short while, there was a clerical error where all AI communications
- equipment was replaced with bananas. This has now been fixed.
- - tweak: Ghosts can now see the contents of smartfridges and look at the drone console
- - tweak: Humans now only produce one message when shaken while SSD
- - bugfix: The supermatter no longer will irradiate everyone, everywhere, when it
- explodes.
- - tweak: Writing on paper will now add hidden admin fingerprints, so that you can't
- forge mean notes in someone else's name.
- - bugfix: Brains are no longer able to escape their brain by being a sorcerer.
- - bugfix: Astral projecting with other runes on the same tile will now no longer
- prevent you from re-entering
- - bugfix: Voxxy that is become ex-voxxy no longer carry voxxy appearance! yaya!
- FalseIncarnate:
- - tweak: Allows plants to be identified as enhanced*. Enhancing plants results from
- using reagents (like saltpetre) that affect the stats of a seed instead of using
- mutagens/machines. *May not meet standards for being classified as "organic
- produce". (This was already possible, just renames enhanced plants for easier
- differentiation)
- Fox McCloud:
- - bugfix: Fixes mutadone not working with some genetic mutations
- - bugfix: Fixes banana honk and silencer being alcoholic
- - bugfix: Fixes Kahlua being non-alcoholic
- - bugfix: Fixes polonium not metabolizing
- - bugfix: Fixes being able to receive free unlimited boxes from the Merchandise
- store
- - rscadd: Adds in wooden bucklers
- - tweak: Re-adds roman shield to the costume vendor
- - tweak: Buffs Riot shield damage from 8 to 10
- - rscadd: Adds in a Skeleton race
- - tweak: Tweaks the skeletons colors to be more realistic and to blend in less with
- the floor
- - rscadd: Adds in lichdom spell for the wizard
- - rscadd: Adds in lesser summon guns spell for wizard
- - rscadd: adds in Mjolnir and the singularity hammer as weapons the wizard can purchase
- - rscadd: Wizard can purchase the charge spell from the spell book
- - rscadd: Wizard can purchase a healing staff from the spell book
- - tweak: Tweaks and lowers spell costs of utility spells for wizard
- - tweak: Re-organizes the spellbook to be better divided into categories and have
- a better window size
- - tweak: Knock now opens+unlocks lockers
- - tweak: Magic Missile has a slightly longer cooldown and no longer deals damage,
- but has a lower cooldown is upgraded
- KasparoVy:
- - rscadd: Navy blue Centcom Officer's beret for use by the Blueshield.
- - rscadd: Adds the new navy blue beret to the Blueshield's locker.
- - tweak: Gives the Blueshield's berets (black and navy blue) the exact same strip
- delay and armour as the Security Officer's beret.
- - rscadd: Adds TG energy katana back and belt sprite.
- - rscadd: Bo staff back sprite.
- - tweak: Adjusts energy katana sprites to make the weapon stand out a bit more from
- the regular katana.
- - rscadd: Cutting open the toes of footwear so species with feet-claws can wear
- them.
- - rscadd: Toeless jackboots.
- - tweak: Cleans up glovesnipping and lighting a match with a shoe.
- - tweak: Lighting a match with a shoe produces a more appropriate message, handled
- at the same standard as glove-snippingboot-cutting.
- Tastyfish:
- - rscadd: Cargonia now has its own section in the manifest.
- TheDZD:
- - rscdel: Due to budget cuts and reports of operatives accidentally firing enough
- bullets to reach a state of what our scientists refer to as "enough dakka,"
- Syndicate High Command has decided to restore the Syndicate Strike Team arsenal
- to using standard-issue L6 SAW ammunition.
-2016-01-31:
- Crazylemon64:
- - bugfix: Syndicate borgs can now interact with station machinery
- - rscadd: People with slime people limbs can now *squish
- - tweak: Skrell's vulnerability to alcohol is checked on their liver, now - a liver
- transplant will let them take alcohol like a champ - lacking a liver will have
- the same effect as being a skrell, when drinking
- FalseIncarnate:
- - rscadd: Adds in the Magic Eight Ball toy, found in Claw Game prize orbs.
- - rscadd: Adds in the Magic Conch Shell, an admin-only shell of power.
- Fox McCloud:
- - rscadd: Updates Summon Guns and Magic to include many of the new guns
- - tweak: Summon Guns/Magic can no longer be used during Ragin' Mages
- Tastyfish:
- - rscadd: The emergency shuttle status in the Status tab now has ETA/ETD/etc like
- before.
- - tweak: Code Gamma+ now has a 5 minute emergency shuttle call, like Red.
- pinatacolada:
- - rscadd: Adds NanoUI to the operating computer
- - rscadd: Adds health announcing, critical and oxygen damage aural alerts to the
- computer, with a menu to selectively turn them on and off
-2016-02-10:
- Crazylemon64:
- - tweak: The cloner now checks for NO_SCAN on the brain when scanning - unclonable
- species are now truly unclonable. You are still able to revive them with a brain
- transplant and a defib, however.
- - rscadd: A tier-4 DNA scanner linked to a cloning system will now be able to reproduce
- a body from a brain's DNA, in event of the original corpse being gibbed or similar.
- - bugfix: Species with organic limbs and NO_BLOOD will no longer bleed (though still
- on hit - write that off as "bone powder")
- - tweak: Skeletons now lack internal organs, except for the runic mind which exists
- in their head - an analogue for the brain
- - rscadd: Skeletons that drink milk will be regenerated at a moderate pace, have
- a small chance of mending bones, and will praise the great name of mr skeltal
- - tweak: Adds a reagent system for species reacting to specific reagents
- - rscadd: Slime People can now select from all human hairstyles, and their "hair"
- will be tinted a shade of their body.
- - tweak: Increases the frequency of the cortical borer event.
- - tweak: People with borers cannot commit suicide - this applies to a controlling
- borer, too.
- - tweak: Borers can no longer overdose their hosts.
- - tweak: Borers can now inject Saline-Glucose, Spaceacillin, Hydrocodone, Mitocholide,
- Salbutamol, Capulettium+, and Charcoal. Styptic was removed, as it's pathetic
- at healing when directly injected. Salicyclic acid was removed too, as its functionality
- is duplicated by both hydrocodone and saline-glucose.
- - bugfix: A mind trapped by a cortical borer can now understand things it could
- understand when normally in its body.
- - rscadd: Changes chemistry's welding tank to a wall-mounted version, to increase
- the room available.
- - rscadd: You can now gib butterflies and lizards with a knife
- - rscadd: Ghosts can now follow mecha
- - bugfix: You can now access an R&D console by emagging it - it did nothing before.
- - bugfix: Walls will now properly smooth and show damage.
- - bugfix: Fixes the dialog that occurs when the AI shuts off to actually do what
- it says it does
- Fox McCloud:
- - bugfix: Fixes not being able to attach IEDs to beartraps
- - bugfix: Can no longer spamclick someone to death using headslamming on a toilet/urimal
- - tweak: Toilet/urinal headslamming now plays a sound
- - tweak: Toilet headslamming damage reduced slightly
- - rscadd: Can now fill open reagent containers in a toilet to receive "toilet water".
- - tweak: No more message spam when someone fills a container using a sink
- - rscadd: Can now wash your face using a sink, which washes away lipstick and wakes
- you up slightly
- - tweak: Washing things will now use progress bars
- - tweak: Ensures consuming a single syndicate donk pocket won't get you addicted
- to meth
- - tweak: Kinetic Accelerators and E-bows automatically reload
- Glorken:
- - rscadd: Added a Knight Arena for Holodeck.
- - imageadd: Added red and blue claymore sprites.
- - spellcheck: Changed overrided to overrode when emagging Holodeck computer.
- KasparoVy:
- - rscadd: Vox versions of the Officer SWAT sechailer + HOS SWAT sechailer + Warden
- SWAT sechailer.
- - rscadd: Resprited versions of most Human masks to fit Unathi, Tajara and Vulpkanin.
- - rscadd: Warden now gets their own version of the SWAT sechailer in their locker.
- - tweak: HOS now gets the appropriate version of the SWAT sechailer in their locker.
- - tweak: Repositioned smokeables now available for Vox, Unathi, Tajara and Vulpkanin.
- - tweak: Properly shades Vox bandana down-state sprites.
- - rscadd: Readds Tajaran bald hairstyle.
- - rscadd: Alternate style of non-Human breath mask (incl. surgical/sterile mask)
- down-state positioning.
- - tweak: Corrects all non-Human species' breath mask (incl. surgical/sterile mask)
- down-state icons to use the right position style.
- - tweak: Minor adjustments to Tajaran breath mask up-state sprites.
- PPI:
- - rscadd: Adds a reconnect button to the File menu in the client.
- - rscadd: Adds head patting
- Regen:
- - tweak: Powersink can now drain a lot more power before going boom
- - tweak: Buffed the powersinks drain rate
- - tweak: Buffed explosion from an overloaded powersink, try to find it instead of
- overloading the grid.
- - rscadd: Admin log warning before the powersink explodes
- Spacemanspark:
- - rscadd: Miners can now utilize the power of mob capsules to take along their lazarus
- injected mining creatures!
- - rscadd: Store your Pokemo- er, sorry, I mean mining mobs that you've captured
- in the lazarus capsule belt.
- Tastyfish:
- - bugfix: Species that don't breathe can kill themselves now!
- - rscadd: Suicide messages are now catered to your species.
- - tweak: Shortened the default pill & patch name when using the ChemMaster.
- - rscadd: The chaplain now has a service radio headset, as Space Jesus intended.
- TheDZD:
- - tweak: When Ahelping, "Question" is now "Mentorhelp" and "Player Complaint" is
- now "Adminhelp."
- - tweak: Mentorhelps and PM replies from mentors appear in a bold aqua blue color.
- - tweak: Adminhelps and PM replies from admins appear in a bold bright red color.
- - tweak: PM replies from players appear in a dull/dark purple color.
- - rscadd: Adds admin attack log to players being converted to cult.
- - rscadd: Adds shadowling thrall jobbans.
- - rscadd: Jobbanned players who are converted to shadowling thrall, revolutionary,
- or cultist will have the control of their body offered up to eligible ghosts.
-2016-02-13:
- Crazylemon64:
- - tweak: Relaxes the check on what atoms you can follow to any movable atom
- - tweak: Mages are now more ragin
- - tweak: Admins can now adjust the total number of wizards at runtime by tweaking
- either max_mages, or players_per mage
- DaveTheHeadcrab:
- - rscadd: Adds new worn icons for duffelbags to better reflect their size, compliments
- of WJohn at /tg/
- FalseIncarnate:
- - rscadd: Adds burritos, made from cutlets, beans, rice, capsacin oil (hotsauce),
- cheese, and flat dough (because we lack proper tortillas) in the microwave.
- - rscadd: Adds chimichangas. You know you want a deep-fried burrito.
- Fox McCloud:
- - tweak: Updates some spell icons with better/higher quality icons
- - tweak: Updates unarmed attacks to allow for more customization
- - tweak: Updates martial arts so they factor in specie's attack messages and sounds
- - tweak: Re-balances Sleeping Carp fighting style
- - tweak: Re-balances Bo Staff
- - tweak: 'Rebalances Golem: they should now be spaceproof, fire+cold proof, rad
- proof, virus immune, clonable, parapen+syringe gun immune, deal increased melee
- damage. Their armor has been reduced to 55 melee across the board, their slip
- immunity removed, pain immunity removed, and they''re slightly slower'
- - bugfix: Fixes Ei Nath generating two brains
- - bugfix: Ensures the Necromatic Stone generates actual skeletons
- - bugfix: Can now strip PDA/IDs from Golems
- - bugfix: Fixes sleeping carp grab not being an instant aggressive grab
- - bugfix: Fixes an exploit with declaring war on the station
- KasparoVy:
- - rscadd: Orange and purple bandanas for all station species.
- - rscadd: The ability to colour bandanas with a crayon in a washing machine.
- - tweak: Refactors the bandana adjustment system.
- - tweak: Minor adjustments to Tajaran and Unathi bandana east/west sprites.
- - tweak: Adjusting a bandana will now take if off of your head/face and put it in
- an available hand. If both hands are available, it goes in the selected hand.
- - bugfix: Adjusting a coloured bandana will no longer revert it to the original
- coloured icons anymore.
- - bugfix: Adjusting a bandana from mask-style to hat-style means the bandana won't
- obscure your identity anymore.
- - rscadd: Greys now use re-positioned smokeables. They no longer smoke out the eyes.
- TheDZD:
- - bugfix: Fixes spacepods being able to shoot through walls.
- - tweak: Lowers spacepod weapons fire delay.
- - tweak: Increases spacepod weapons energy costs.
- - tweak: Makes spacepods move at speeds not rivaling those of photon beams. They
- are now a hair bit faster than a person with a jetpack.
- - tweak: Reduces battery costs for spacepod movement.
-2016-02-24:
- Crazylemon64:
- - tweak: The defib should be more reliable on people who have ghosted
- - tweak: The defib will now give a message if the ghost is still haunting about
- - rscadd: Attacking someone with an accessory will now let you put things on them
- without having to strip them.
- - bugfix: Borers will now properly detach upon death of a mob they are controlling
- - tweak: Borers can now see their chemical count while in control of a mob
- - rscadd: Borers can now silently communicate with their host - this is not available
- to the host until the borer has either begun to communicate, or has taken control
- at least once - this is to avoid spoiling that the borer exists
- - tweak: Borers won't be able to talk out loud inside of a host, by default - they
- can remove this safeguard with a verb under their borer tab. Borer hivespeak
- is unaffected.
- - tweak: Borers infesting and hiding are now silent.
- - tweak: Made borer's chem lists more nicely formatted
- - bugfix: No more superspeed attacking simplemobs
- - tweak: New players now show up properly under the "who" verb when used as an admin
- - rscadd: Mining drones will now automatically collect sand lying around
- - bugfix: RIPLEYs can now drill asteroid turfs for sand
- - rscadd: You can now load exosuit fuel generators with items containing their material
- - this means you can fuel yourself off of ores, but this will be highly inefficient
- and cost you mining points later on, as you can't take fuel back out.
- - rscadd: You can now load the fuel generators from an ore box.
- - tweak: The plasma generator now produces 3x as much power from the same amount
- of fuel - this lets it even remotely compete with the uranium generator.
- - tweak: You can now light cigarettes off of burning mobs.
- - tweak: Exosuit tracking beacons now fit in boxes - prior, they were far too large
- for even a backpack, as they shared the same size as all other mecha equipment
- - tweak: Miners can now collect ore by walking over it with an ore satchel on.
- FalseIncarnate:
- - rscadd: Adds prize tickets as a replacement for physical arcade prizes.
- - rscadd: Adds a buildable prize counter to exchange tickets for prizes.
- - rscadd: Adds a bike. Despite what Prof. Oak might claim, you can ride it indoors.
- - rscadd: Adds colorful wallets, for that old school arcade pride.
- - bugfix: Fixes accidental removal of plump helmet biscuit recipe.
- - rscadd: Temporarily adds a prize counter to the bar (Cyberiad) or dorms (MetaStation),
- and adds a max upgrade one to the Ninja Holding Area (Cyberiad z2)
- - bugfix: Fixes Metastation. Seriously fixed a lot, just read the PR description
- for the full list.
- FlattestGuitar:
- - rscadd: Adds IPC alcohol and a few derivative drinks
- - tweak: IPCs can now drink and be fed from glasses
- Fox McCloud:
- - tweak: Laser eyes mutation no longer drains nutrition
- - tweak: 'splits the EMP kit into two things: the standard EMP kit (2 grenades and
- an implant), and the EMP flashlight by itself'
- - tweak: nerfs heart attacks so they do less damage
- - tweak: Pickpocket gloves now put the item you strip into your hands as opposed
- to the floor
- - tweak: Picketpocket gloves can now silently strip accessories
- - tweak: Pickpocket gloves will no longer give a message for messing up a pickpocket
- KasparoVy:
- - bugfix: Adjusting masks while they are not on the face will no longer turn off
- internals.
- - bugfix: Adjusting masks while they are not on the face will now cause the mask
- to hide/reveal the wearer's identity the next time it's worn as intended.
- - rscadd: Adds the ability to open/close bomber jackets.
- - rscadd: Adds a security bomber jacket. This jacket inherits the protection and
- storage capabilities as a standard Security vest with additional bomber jacket
- benefits.
- - rscadd: Adds UI button in top left of screen for jacket adjustment.
- - tweak: Replaces the standard bomber jacket in the Pod Pilot bay with the Security
- version.
- - tweak: Centralizes jacket/coat adjustment handling.
- - tweak: All jackets start closed by default.
- - rscadd: Geneticist duffelbag on-mob sprite (for all species).
- - rscadd: Vox-fitted backpacks, satchels, ERT backpacks, duffelbags and defib unit.
- - tweak: Refactors back-item icon generation.
- - bugfix: Typo in the description of Santa's sack.
- - bugfix: Missing punctuation and gender macros in the description of the bag of
- holding.
- - bugfix: The tweak to back-icon generation fixes a bug where the wrong sprite name
- was being used to generate back-item icons.
- PPI:
- - rscadd: Adds the ability to hide papers in vents. You can now leave a romantic
- love letter, exchange information in secret, or hide papers infused with the
- power of nar'sie from sight.
- Regen1:
- - rscadd: Adds the Immolator laser gun, a modified laser gun with 8 shots that will
- ignite mobs, can be made in R&D
- Spacemanspark:
- - rscadd: Adds *yes and *no emotes to Synthetics. Glory to Synthetica.
- Tastyfish:
- - tweak: The PDA system has been completely redone behind the scenes! It should
- be functionally similar, although there is now a Home and Back button at the
- bottom as appropriate.
- - rscadd: All of the heads now have multicolored pens.
- - rscadd: EngiVend now has 10 camera assemblies.
- - tweak: Borgs can now use vending machines.
- - rscadd: There are now picture frames that can be made from the autolathe or wood
- planks for papers, photos, posters, and canvases!
- pinatacolada:
- - tweak: Makes the Protect Station AI law board no longer consider people that damage
- the station crew, instead of human
- ppi:
- - tweak: When revealed Revenants will not be able to move at the maximum move speed,
- nor be able to pass through any solid object, like walls, windows, grills, computers
- and mechs.
-2016-02-26:
- FalseIncarnate:
- - tweak: Chocolate can now make you fat, as expected.
- Fox McCloud:
- - tweak: stamina damage now regenerates slightly faster
- - rscadd: Adds in whetstones for sharpening objects
- - tweak: Kitchen vendor starts off with 5 salt+pepper shakers
- - tweak: Can now point while lying or buckled
- - bugfix: Fixes Capulettium Plus not silencing
- - bugfix: Fixes slurring, stuttering, drugginess, and silences last half of what
- they should
- KasparoVy:
- - bugfix: Jackets that start open are recognized as actually being open already
- now. This fixes a bug with certain items that don't have an open state, or cases
- where it ended up giving an item the wrong icon (one that didn't exist)
- Spacemanspark:
- - bugfix: Fixes synthetics from giving off the proper message in the chat box when
- using the *yes and *no emotes.
- Tastyfish:
- - rscadd: Wheelchairs, janicarts, and ambulances can now go through doors according
- to the user's driver's access.
-2016-03-07:
- Crazylemon64:
- - rscadd: People with VAREDIT can now write matrix variables
- - rscadd: People with VAREDIT can now modify path variables
- - tweak: Refactors the variable editor code somewhat.
- - rscadd: The buildmode area tool now shows reticules of what you've selected.
- - bugfix: Switching mobs while using the buildmode tool no longer screws up your
- UI.
- - tweak: Refactors buildmode so it's no longer a special-case system.
- - rscadd: Adds a copy mode to build mode, which lets you duplicate objects.
- - tweak: Any mob in buildmode can work at the fastest possible rate.
- - bugfix: Fixed a problem where the icons of a person would not correctly update
- when changing gender.
- - tweak: One's hairstyle only adjusts on gender change if it's incompatible with
- your new gender.
- - bugfix: Fixed a bug where a person's icon would only be updated if their sprite
- had a new layer added or removed.
- - bugfix: You no longer lose your name when monkeyized and reverted - you'll still
- look like a monkey while you're a monkey, though.
- - bugfix: Your organs will now match your gender when you are cloned.
- - bugfix: Skeletons (when a body rots) no longer retain a fleshy torso.
- - bugfix: Putting people in an active cryotube now produces the message on insertion,
- rather than release.
- - bugfix: An EMP'd cloning pod will now display its sprites correctly.
- FalseIncarnate:
- - tweak: Water Balloons can be filled from more sources than just beakers and watertanks.
- Fox McCloud:
- - bugfix: Fixes the "yeah" glasses so the sound doesn't vary and a message is displayed,
- on use
- - bugfix: Noir mode only activates when the glasses are equipped to your actual
- eyes
- - rscadd: Noir Glasses mode can be toggled on or off (defaults to off)
- - bugfix: Mimes can no longer use spells and continue speaking
- - tweak: Mime abilities are now spells with proper icons
- - tweak: Mime wall now last 30 seconds, up from 5
- - tweak: forecfields/invisible walls now block air currents
- - rscadd: Adds the Sleeping Carp scroll to the uplink for 17 TC
- - bugfix: Fixes Shadowlings being able to use guns
- - bugfix: Fixes sleeping carp scroll users being able to use guns
- - bugfix: Fixes the Experimentor throwing one item at a time
- - tweak: Experimentor menu now automatically refreshes after use
- - tweak: Lowers surgery times across the board
- - tweak: Removes scalpels causing 1 damage on successful surgery
- - tweak: Removes random chance to fracture ribs on a successful surgery
- - tweak: Mining drills now have an edge
- KasparoVy:
- - tweak: Jackets who have the verb available but are not intended to be adjusted
- will not have the action button available.
- - bugfix: You can now adjust breath masks while buckled into beds and chairs.
- - bugfix: Known issues with adjusted jackets using the wrong sprites.
- - rscadd: Blueshield coat in hand and item icons.
- - rscadd: Hulks now rip apart adjustable and droppable jackets. The items stored
- in the jackets get dropped on the ground.
- Tastyfish:
- - tweak: Infrared emitters can now be rotated while already in an assembly via the
- UI popup.
- - tweak: The infrared emitter can no longer be hidden inside of boxes and still
- work.
- - rscadd: The beach now has a border and is splashier.
- - rscadd: Gives Psychiatrist a paper bin, clipboard, and multicolored pen.
- - rscadd: Gives the Librarian / Jouralist a multicolored pen.
- - rscadd: Gives the NT Representative a clipboard.
- - tweak: The ethanol-based neurotoxin drink is now called Neuro-toxin to avoid being
- confused with the deadly toxin.
- VampyrBytes:
- - bugfix: Fixes emotes ending with s needing 2. Emotes now work with grammatical
- options eg ping or pings, squish or squishes
- - tweak: Updated emote help with missing emotes. Help will also show any species
- specific emotes for your current species
-2016-03-08:
- Crazylemon64:
- - tweak: Slime people are now more vulnerable to low temperatures.
- - rscadd: Slime people are able to slowly regrow limbs at a high nutrition cost.
- - rscadd: Slime people now slowly shift color based on reagents inside of them -
- disabled by default, toggle it with an IC verb
- - tweak: Slime people's cores are more vulnerable to damage
- - bugfix: Species-related abilities now properly are removed - no more vox hair
- stylists, unfortunately.
- Fethas:
- - bugfix: the nest buckle now looks for the right organ path
- - bugfix: Fixed some sprites.
- - bugfix: No more putting no drops in rechargers,
- Fox McCloud:
- - soundadd: Implement's goon's gibbing sound
- - soundadd: Implement's goon's gibbing sound for robots/silicons
- - sounddel: Removes old gibbing sound
- Spacemanspark:
- - rscadd: Lazarus Injector's can now be emagged to activate their special features,
- alongside using EMPs on them.
- Tastyfish:
- - rscadd: Mimes now have a new ore, Tranquillite, used to bring peace and quiet
- to the station.
- - rscadd: There are also permanent invisible walls and silent floors that can be
- made from tranquillite.
- - rscadd: The Recitence mech is now buildable!
- - tweak: The Recitence mech is now playable!
- - tweak: Mid-round selection for various creatures and antagonists now consistently
- asks permission.
- TheDZD:
- - rscadd: Adds justice helmets with flashing lights and annoying sirens.
- - rscadd: Adds crates containing said helmets.
- - rscadd: Also includes a version of the helmet that can only be spawned by admins,
- and just has a single red light in the center instead of the stereotypical police
- blinkers.
- monster860:
- - bugfix: Space pod transitions are now fixed.
-2016-03-16:
- Crazylemon64:
- - tweak: Being in godmode now makes you immune to bombs
- - rscadd: Science members now get compensated when they ship tech disks to centcomm.
- - rscdel: Science crew are no longer paid when they "max" research.
- - bugfix: Roboticists now get credit for making RIPLEYs and Firefighters
- - tweak: Slime people can now regrow limbs on a more lax nutrition requirement
- - tweak: Enhances the nutripump+ to let slime people regrow limbs with it active
- - bugfix: Skeletons, slime people, IPCs, and Diona no longer leave blood when hit
- - bugfix: Rejuvenating a slime person will no longer clog up their "blood"
- - tweak: Slime people will now regenerate "blood" from having water in their system
- - tweak: The decloner can now be created again
- - rscadd: Environment smashing mobs can now destroy girders.
- DaveTheHeadcrab:
- - tweak: Removes the check for species on the update_markings proc.
- FalseIncarnate:
- - tweak: Xeno-botany is now more user-friendly, and less random letters/numbers.
- - rscadd: Hydroponics now has a connector hooked up to the isolation tray and a
- new connector in their back room for those strange plants that like spewing
- plasma or eating nitrogen.
- - rscadd: You can now (finally) build the xeno-botany machines, and science can
- print off their respective boards.
- Fethas:
- - tweak: Syringes are no longer sharp
- - bugfix: byond likes direct pathing so item/organ/internal not item/organ even
- if it shouldn't be in the internal_organs list. This was preventing the list
- from doing stuff correctly.
- - tweak: fixed ipc organ manipulation surgery, you can now insert a replacment ipc
- organ directly instead of needing a screwdriver in your main hand
- - bugfix: nanopaste now will repair organs with robotic >= 2 instead of > 2 cuase
- i am an idiot
- - bugfix: Fix, hopefully, for a runtime for clientless mobs whos head are cut off...
- - bugfix: Hopefully fixes issues with diona eyes
- - bugfix: Though shalt not eat robotic organs..including cybernetic implants..
- - bugfix: ITS SURGERY_STEP/DETHRALL NOT SURGERY_STEP/INTERNAL/DETHRALL
- FlattestGuitar:
- - rscadd: Adds three new synthanol drinks
- - tweak: Drinking synthanol is now a bad idea if you're organic
- - tweak: A glass of holy water now looks like normal water
- Fox McCloud:
- - soundadd: Adds in drink fizzing sound
- - tweak: Drink/bartender recipes use this new fizzing sound in addition to a few
- other recipes
- - soundadd: Adds in a fuse burning sound
- - tweak: Bath salts, black powder, saltpetre, and charcoal use this sound now
- - soundadd: Adds in a matchstrike+burning sound
- - tweak: Lighting a match triggers this new sound
- - soundadd: Adds in scissors cutting sound
- - tweak: Cutting someone's hair uses this new sound
- - soundadd: Adds in printer sounds
- - tweak: printing off papers from various devices typically uses these sounds
- - soundadd: Adds computer ambience sounds
- - tweak: black box recorder and R&D core servers both play this sound at random
- rare intervals
- - tweak: Reduces the tech level (and requirement) for nanopaste
- - tweak: Reduces the tech level (and requirement) for the plasma pistol
- - tweak: Removes Nymph and drone tech levels
- - tweak: Reduces tech levels on the flora board
- - tweak: Adds tech level requirements to mech sleepers, mech syringe guns, mech
- tasers, and mech machine guns
- - tweak: Increases tech cost of the decloner
- - tweak: Removes the pacman generators
- - tweak: Removes emitter
- - tweak: Removes flora machine (functionless anyway)
- - tweak: Removes the pre-spawned nanopaste
- - tweak: Removes space suits
- - tweak: Removes excavation gear
- - tweak: Replaces the soil with actual hydroponic trays (more aesthetic than anything)
- - tweak: Removes most external asteroid access from the station
- - tweak: Excavation storage is now generic science storage
- - tweak: removed the plasma sheet
- - bugfix: Fixes augments not showing up in R&D unless specifically searched for
- - bugfix: Fixes some augments being unavailable in mech fabs
- - bugfix: Fixes augments having no construction time
- - bugfix: Fixes xenos not gaining plasma when breathing in plasma
- - bugfix: Fixes plasma reagent not generating plasma for a person
- - rscadd: Screaming has different sounds based on being male or female
- - soundadd: Implements Goon's screaming sounds.
- - rscadd: Screaming tone is now based on age of character instead of being random
- - tweak: Ups the cooldown on screaming from 2 seconds to 5 seconds
- - tweak: Removes chance for Whilhelm scream
- - rscadd: Borgs can now scream
- - rscadd: Monkey's now have a unique screaming sound
- - rscadd: IPCs now scream like cyborgs
- - rscadd: Updates slot machines to have higher jackpots and more payouts with more
- interesting sounds
- - rscadd: 'Adds X-Ray, Thermal, Anti-tun, and Reviver implants to the nuke ops uplink
- (augments come with one auto-implanter) rcsadd: Adds in augment auto-implanter,
- which inserts and implant without surgery'
- - tweak: tweaks a large number of chems; behaviors are largely retained, but new
- flavor messages, probabilities, etc may be present; overall, you can expect
- chems to do the same thing
- - tweak: 'Tabun re-replaced with Sarin rcsadd: New reagent: cholesterol: if overdosed
- on, it can cause a heart attack--fatty foods, cheese, eggs, and some meats all
- produce cholesterol in your body.'
- - rscadd: Mixing Sarin, Meth, or Cyanide will poison in a very small area of the
- reaction if you're not on internal OR not wearing a gas mask
- - rscadd: Chemist warddrobe now has two gas masks
- - tweak: Teslium will now impact synthetics AND organics
- - bugfix: Fixes facehuggers hugging already infected people
- - bugfix: Fixes facehuggers hugging people while dead
- - bugfix: Fixes Embryo's developing twice as fast as they should
- - bugfix: Fixes up some behaviors with xeno eggs
- - tweak: Xeno acid can now melt through floors and the asteroid
- - rscadd: Xeno's now play the gib sound when actually gibbed
- - rscadd: Implements Changeling headcrabs/headspiders
- - bugfix: Fixes xenos not throwing their organs when gibbed
- - bugfix: Fixes swallowed mobs not being ejected when a human is gibbed
- - rscadd: Adds in spider eggs reagent, an infectious reagent that requires surgery
- to correct
- - bugfix: Fixes EMPs causing eye implant users to be permanently blind
- - tweak: Increases bag of holding's storage capacity
- - rscadd: Removing a heart no longer kills the patient instantly, but induces a
- heart attack
- - bugfix: Demon hearts will not work
- - bugfix: Should now actually be able to re-insert hearts
- - rscadd: Reworks addictions to bettter differentiate them betweeen overdosing and
- make them more realistic.
- - tweak: 'changes which chems are addictive, currently, the follow reagents are
- now addidctive: meth, crank, krokodil, bath salts, space drugs, perfluoradecalin,
- omnizine, coffee, nicotine, fliptonium, ultra lube, surge, fake cheese, weird
- cheese, ephedrine, diphenhydramine, teporone, and morphine'
- - rscadd: sleepers help you recover from addiction faster
- - rscadd: Can now make cable coils in autolathes
- - bugfix: Fixes the slot machine announcements not displaying properly
- Tastyfish:
- - tweak: The super fart mutation now gives you a spell-like ability instead of augmenting
- the emote.
- - tweak: Vampire abilities are now in their own Vampire tab, as well being action
- buttons at the top, like spells.
- - bugfix: Cloning a vampire no longer makes them lose their abilities.
- - bugfix: Vampires can no longer hypnotize chaplains.
- - bugfix: Being a full vampire (500+ total blood) actually makes you immune to holy
- water reliably now.
- - rscadd: 'Some old away missions are back: Academy, Black Market Packers, Space
- Hotel, Station Collision, and Wild West. Go out and round up some hostiles!'
- - bugfix: Shuttle consoles now pair up to the engineering, mining, research, or
- labor shuttle when built or used before pairing, as long as the shuttle is near
- the console, or the shuttle is moved to be nearby.
- monster860:
- - rscadd: Mining station now has a podbay.
- - rscadd: Ore scooping module for the spacepod.
- - rscadd: 'Three mining lasers for spacepod: Basic, normal, and burst.'
- - bugfix: Shooting weapons south or west of spacepod will actually hit adjacent
- targets now, and won't shoot through walls anymore.
- taukausanake:
- - rscadd: Mice can now be picked up like diona
-2016-03-22:
- Crazylemon64:
- - bugfix: Repairs all sorts of eldritch occurences that happen when you put an organic
- head on an IPC body, as well as some decapitation bugs
- - bugfix: Makes heads keep hair on removal
- - bugfix: Amputated limbs from a DNA-injected individual now will keep their appearance
- of the DNA-injected person
- - bugfix: Wounds will vanish on their own now
- - rscadd: Admins now have an "incarnate" option on the player panel when viewing
- ghosts for quick player instantiation
- - bugfix: Fixes a runtime regarding failing a limb reconnection surgery
- - bugfix: Copying a client's preferences now overrides the previous mob's DNA
- - bugfix: A DNA injector is now more thorough, and affects the DNA of mobs' limbs
- and organs
- - bugfix: DNA-lacking species can no longer be DNA-injected
- - bugfix: Brains are now labeled again
- - rscadd: Splashing mitocholide on dead organs will make them live again.
- - rscadd: The body scanner now detects necrotic limbs and organs.
- - bugfix: pAIs and Drones are now affected by EMPs and explosions while held.
- Fethas:
- - rscadd: Adds a surgery for infection treatmne/autopsys that is simply cut open,
- retract, cauterize
- - bugfix: fixes a dumb error in internal bleeeding surgerys
- - rscadd: Chaos types no longer random teleport, but will make the target hallucinate
- everyone looks like the guardian.
- FlattestGuitar:
- - rscadd: Adds a snow, navy and desert military jacket.
- Fox McCloud:
- - tweak: Removes random 1% chance to heal fire damage
- - tweak: Removes passive healing from resist heat mutation
- - tweak: Regen mutation heals every cycle (albeit less, on average), but doesn't
- cost hunger
- - bugfix: Fixes not being able to speak over xeno common or hivemind when you receive
- the Xeno hive node
- - rscadd: Adds in the ability to transfer non-locked metal+glass only designs from
- the protolathe to autolathe
- - tweak: Changes Outpost Mass Driver to prevent accidental spacings
- - tweak: Shadow people no longer dust on death, are rad immune+virus immune, and
- can be cloned. Slip immunity removed
- - tweak: Shadowlings no longer get hungry or fat and no longer dust on death
- KasparoVy:
- - rscadd: The ability to change your head, torso and groin as an IPC in the character
- creator. Non-IPCs cannot access the parts.
- - rscadd: Head, torso and groin sprites for all mechanical limb/bodypart brands
- but Morpheus and the unbranded ones (since those already exist) from Polaris.
- - rscadd: Faux-eye optics for non-Morpheus heads.
- - rscadd: The ability to change optic (eye) colour if you've got a non-Morpheus
- head.
- - rscadd: The ability to choose human hair styles (wigs) and facial hair styles
- (postiche) with non-Morpheus heads. Non-Morpheus heads cannot choose screens.
- Conversely, Morpheus heads cannot choose wigs or facial hair.
- - rscadd: Two hair styles from Polaris.
- - rscadd: The ability for IPCs to wear undergarments (shirts and trousers).
- - rscadd: Antennae (colourable) for IPCs.
- - tweak: IPC monitor adjustment verb will now adjust optic colour if the head is
- non-Morpheus.
- - bugfix: Combat/SWAT boots can now be toecut and jacksandals can't.
- - bugfix: ASAP fix to what would've broken the ability to configure prostheses in
- character creation.
- - bugfix: Adjusted masks no longer block CPR (including bandanas).
- - bugfix: You can no longer run internals from adjusted breath masks (or airtight
- adjustable masks in general).
- Regens:
- - tweak: Robotic hearts will now properly give the mob a heart attack instead of
- just damaging it when EMP'd
- - rscadd: Assisted organs will now also take damage from EMP's
- - bugfix: Internal robotic and assisted organs will now actually take damage from
- EMP's
- Tastyfish:
- - rscadd: Adds PDA chatrooms. Post memes! Talk to your fellow collaborators! Get
- caught!
- - tweak: You can now set the PDA messenger to automatically scroll down to new messages.
- - rscadd: Pet collars now act as death alarms and can have ID's attached to them.
- - tweak: All domestic animals can now wear collars.
- - rscadd: You can now make video cameras at the autolathe.
- TheDZD:
- - bugfix: Fixes an instance of old code being so incredibly, unbelievably, makes-me-want-to-stab-myself-in-the-eye-edly
- idiotic.
- TravellingMerchant:
- - imageadd: Kidan have new sprites!
- tigercat2000:
- - rscadd: Nukeops now have an assault pod, they can use it for 30 TC. Loud and mean.
- - bugfix: Lighting overlays can no longer go below 0 lum_r/g/b
- - bugfix: Shuttles will work with lighting better.
- - bugfix: Wizards can no longer teleport to prohibited areas such as Central Command.
-2016-03-25:
- Crazylemon64:
- - bugfix: You now will actually have the correct `real_name` on your DNA.
- - bugfix: No more roundstart runtimes regarding IPC hair.
- - bugfix: Mitocholide rejuv will work more usefully now.
- - bugfix: Limbs and cyborg modules will no longer appear in your screen.
- - bugfix: Cyborg module icons are now persistent throughout logging in and out.
- - bugfix: Various cyborg modules, like engineering, now use the proper icon.
- FlattestGuitar:
- - rscadd: Adds confetti grenades.
- Fox McCloud:
- - bugfix: Fixes Sleeping Carp combos not having an attack animation
- - bugfix: Fixes several chems not properly healing brute/burn damage, consistently,
- as intended
- KasparoVy:
- - bugfix: Unbranded heads and groins no longer invisible.
- - bugfix: Zeng-hu left leg will now be in line with the body when facing south.
-2016-03-26:
- Fox McCloud:
- - rscadd: Adds in dental implant surgery. Implant pills into people's teeth.
- - tweak: Major rebalance and Shadowling update (https://github.com/ParadiseSS13/Paradise/pull/3986
- for details). In general, Shadowlings can no longer enthrall or engage in Shadowling
- like behavior, pre-hatch. Post-hatch, shadowlings are much more powerful, with
- a ride array of New abilities such as extending the shuttle or making thralls
- into lesser shadowlings. Shadowling gameplay should not revolve almost entirely
- around darkness, as opposed to pre-hatch shenanigans.
- - rscadd: Robotics now has a "sterile" surgical area for performing augmentations
- - rscadd: Adds the FixOVein and Bone Gel to the autolathe
- - tweak: ensures all surgical tools have origin tech on them; lowers origin tech
- on FixoVein
- KasparoVy:
- - rscadd: Slime People can now wear underwear.
- - rscadd: Slime People can now wear undershirts.
- TheDZD:
- - tweak: NT has removed trace amounts of a highly-addictive substance from the "100%
- real" cheese used in cheese-flavored snacks. As a result, incidence rates of
- crewmembers becoming addicted to Cheesie Honkers should reduce to zero.
- - tweak: After receiving complaints about crewmembers often being unable to physically
- function without a back-mounted barrel of coffee, NT has replaced station all
- sources of coffee on the station, including coffee beans themselves with a largely
- decaffeinated version. It was funny the first time almost every crewmember aboard
- the NSS Cyberiad was lugging around their own oil barrel filled with coffee,
- it wasn't so funny, nor good for productivity the eighteenth.
-2016-04-02:
- Crazylemon64:
- - rscadd: Metal foam walls will now produce flooring on space tiles
- - bugfix: Syringes will now draw water from slime people.
- FalseIncarnate:
- - tweak: Let's you know when your container is full when filling from sinks.
- - tweak: Prevents splashing containers onto beakers and buckets that have a lid
- on them.
- - rscadd: Pill bottles can now be labeled with a simple pen.
- - tweak: Beakers/buckets (and pill bottles) now accept 26 character labels from
- pens.
- Fethas:
- - tweak: Various spells have had a tweak to stun/reveal/cast, some other number
- stuff...
- - rscadd: Nightvision
- - tweak: harvest code is now in the abilites file.
- - rscadd: New fluff objectives
- - bugfix: Hell has recently remapped its blood transit system and you can now once
- again crawl through blood. We are sorry for the-GIVE US YOUR SOUL!
- FlattestGuitar:
- - tweak: Alcoholic beverages now have proper levels of ethanol in them. Good luck
- passing out after a beer.
- Fox McCloud:
- - rscadd: Adds in the Lusty Xenomorph Maid Mob; currently admin only.
- - bugfix: Fixes xenomorph brains having the wrong sprite, no origin tech, and incorrect
- name
- - tweak: removes xenomorph egg from hotel
- - tweak: upgrades are no longer needed to for the available toys in the prize vendor
- - rscadd: Implements Advanced Camera Consoles. A type of camera console that function
- like AI's vision style. Non-buildable/accessible.
- - rscadd: Adds in Xenobiology Advance Cameras. A type of camera console that functions
- like advanced cameras, but only works in Xenobiology areas; can move around
- slimes and feed them with the console as well. Also non-buildable/accessible
- (for now).
- - rscadd: Adds in cerulean slime reaction that generates a single use blueprint.
- On use it colors turfs a lavender color
- - rscadd: Adds disease1 outbreak event
- - rscadd: Adds appendecitis event
- - rscadd: Roburgers now properly have nanomachines in them
- - rscadd: Re-adds nanomachines
- - tweak: Experimentor properly generates nanomachines instead of itching powder
- - bugfix: Fixes big roburgers having a healing reagent in them
- - rscadd: Adds nanomachines to poison traitor bottles
- - rscadd: Tajarans can now eat mice, chicks, parrots, and tribbles
- - rscadd: Vulpkanin and Unathi can now eat mice, chicks, lizards, chickens, crabs,
- parrtos, and tribbles
- - bugfix: fixes spawned changeling headcrab behavior
- KasparoVy:
- - bugfix: Incisions made at the beginning of embedded object removal surgery can
- now be closed in the same procedure.
- ProperPants:
- - rscadd: Maint drones have magboots.
- - rscdel: Removed plastic from maint drones. Literally useless for station maintenance.
- - tweak: Increased starting amounts of some materials for maint drones and engi
- borgs.
- - experiment: Reduced the number of lines taken by Engineering cyborgs calling on
- materials stacks.
- - rscadd: Operating tables can be deconstructed with a wrench.
- - spellcheck: Fixed and shortened description of metal sheets.
- Tastyfish:
- - rscadd: Bots can now be controlled by players, by opening them up and inserting
- a pAI. *beep
- - bugfix: MULEbots can now access the engineering destination.
- - bugfix: All MULEbot destinations should now have the correct load/unload direction,
- meaning the crates won't be dumped inside the flaps.
- - rscadd: Diagnostic HUD's now give health and status information about bots.
- - bugfix: MULEbot rampage blood tracks are now rendered correctly and handle UE
- traces as appropriate.
- - experiment: Bots should (hopefully) lag the game less now.
- - tweak: Beepsky contains 30% more potato.
- - tweak: Action progress bars are now smooth.
- - tweak: Clicking a filled inventory slot's square with an open hand now clicks
- the item in the slot.
- - rscadd: Status displays now display the time when in Shuttle ETA mode and no shuttle
- activity is happening.
- - tweak: Shuttle ETA countdowns on status displays are now amber.
- - rscadd: pAI's can now use the PDA chatrooms.
- - rscadd: Adds treadmills to brig cells, to give the prisoners something productive
- to do.
- TheDZD:
- - rscdel: A lot of the guns and armor in the station collision, space hotel, academy,
- and wild west away missions have been removed/replaced.
- - rscdel: Removes that fucking facehugger from station collision.
- tigercat2000:
- - rscdel: Virus2 has been removed.
- - rscadd: Virus1 is back. Viva la revolution.
- - rscadd: You can now have up to 20 characters.
-2016-04-07:
- Crazylemon64:
- - bugfix: Removes an offset from the advanced virus stealth calculation, causing
- viruses to be more stealthy than the sum of their symptoms.
- - bugfix: Mulebots will now send announcements to relevant requests consoles on
- delivery again.
- FalseIncarnate:
- - rscadd: Adds logic gates, for doing illogical things in a logical manner.
- - rscadd: Adds buildable light switches, for all your light toggling needs.
- - bugfix: Fixes a resource duplication bug with mass driver buttons.
- Fethas:
- - tweak: maybe makes them last longer...maybe..and fixes the event end message
- Fox McCloud:
- - rscadd: Maps in the slime management console to Xenobio
- - tweak: Reduces Xenobio monkey box count from 4 to 2
- - bugfix: Fixes weakeyes having a negligible impact
- - rscadd: Can spawn friendly animals with a new gold core reaction by injection
- with water
- - tweak: Hostile animal spawn increased from 3 to 5 for hostile gold cores
- - tweak: Swarmers, revenants, and morphs no longer gold core spawnable
- - bugfix: Fixes invisible animal spawns from gold core/life reactions
- - rscadd: Adds tape to the ArtVend
- - tweak: Can no longer use sentience potions on bots
- - rscadd: Added in Plasma Dust reagent, acquired by grinding plasma sheets; it's
- more toxic than regular plasma and generates plasma gas when spilled onto turfs.
- - tweak: Slimecore reactions now require plasma dust as opposed to dispenser plasma
- - rscadd: Added in new Rainbow slime; inject with plasma dust to get a random colored
- slime. Acquire by having 100 mutation chance on a slime when it splits.
- - rscadd: Monkey Recycler can produce different types of monkey cubes; change the
- cube type by using a multitool on the recycler
- - tweak: Epinephrine/plasma reagents changing mutation rate has been removed
- - tweak: Mutation chance is inherited from slime generation to slime generation
- as opposed to being purely random.
- - tweak: 'New reactions added for red and blue extracts: red generates mutator,
- which increases mutation chance, and blue generates stabilizer, which decreases
- mutation chance.'
- - tweak: Slime glycerol reaction removed
- - tweak: Slime cells are now high capacity cells (more power than before)
- - tweak: extract enhancer increases the slime core usage by 1 as oppose to setting
- it to three
- - tweak: slime enhancer increases slime cores by 1 as opposed to setting the core
- amount to 3
- - tweak: Chill reaction lowers body temperature slightly more so it doesn't just
- wear off instantly
- - tweak: Reduces Xenobio plasma sheets from 8 to 3 and removes that pesky boombox
- - bugfix: Processors no longer produce 1 more slime core than intended
- - bugfix: Less blank/spriteless/empty foods from the silver core reaction
- - tweak: Virology mix reactions now use plasma dust as opposed to plasma
- - tweak: Statues can no longer move/attack people unless they're in total darkness
- or all mobs viewing them are blinded
- - tweak: statues are invincible to anything other than full out gibbing.
- - tweak: Statues flicker lights spell range increased
- - tweak: Blind spell no longer impacts silicons
- - bugfix: Fixes statues being able to attack/move whenever they feel like it, regardless
- of client statues
- - bugfix: Fixes blind spell impacting the statue
- Tastyfish:
- - tweak: Beepsky is no longer a pokemon.
- - tweak: pAI-controlled Bots now reliably speak human-understandable languages over
- the radio.
- - rscadd: More floor blood for the blood gods. (Or rather, as much as there was
- supposed to be.)
- tigercat2000:
- - rscadd: Items in your off hand will now count towards access.
-2016-04-12:
- FalseIncarnate:
- - tweak: Adjusting the setting of a vendor circuit board is no longer random, but
- instead provides a select-able list.
- - tweak: Vendor Circuit Board design moved from the Circuit Imprinter to the Autolathe,
- acid requirement replaced by metal.
- - bugfix: Burnt matches can no longer light cigarettes, pipes, or joints.
- Fethas:
- - rscdel: Nukes the cargo train code rscadd:Adds simple vehicle framework and converts
- secway/janicart/snowmobiles/bikes/cars/ambulance to it rscadd:Adds space speedbike,
- red and blue versions, yes you WILL need a spacesuit rscadd:Maps janicart and
- secway onto metastation (but not ambulance no pareamedic garage, no i am not
- mapping that)
- - bugfix: You should now be able to operate on IPC eyes, SHOULD bugfix:hopefully
- surgery on diona works right
- Fox McCloud:
- - rscadd: Adds in TraitorVamp; game mode that's essentially like TraitorChan, but
- with a Vampire instead of a Changeling
- - tweak: Vampires cannot use holoparasites
- - tweak: Malf AI will automatically lose if it exits the station z-level
- Tastyfish:
- - tweak: All cats can kill mice now.
- - tweak: E-N can't suffocate.
- - tweak: Startup time is now shorter.
- - rscdel: Removed the Station Collision away mission from rotation, due to multiple
- conceptual and technical issues.
-2016-04-14:
- Aurorablade:
- - rscdel: Removes the !!FUN!! of having headslugs gold core spawnable.
- Fox McCloud:
- - soundadd: Added in sounds (instead of a chat-based message) for when airlocks
- are bolted/unbolted
- - soundadd: Added in sound for when airlocks deny access
- - tweak: cutting/pulsing wires will play a sound
- - tweak: ups nuke ops game mode population requirement from 20 to 30
- - rscadd: Adds in mining drone upgrade modules to increase their health, combat
- capability, or reduce their ranged cooldowns
- - rscadd: Adds in mining drone "AI upgrade" a sentience potion that only works on
- mining bots
- - tweak: Mining bots should be less likely to shoot you when attacking hostile mobs
- - tweak: Killer tomatoes actually live up to their name now and are hostile mobs
- - tweak: Killer tomatoes are an actual fruit now; activate it in your hands to make
- them into a mob
- - tweak: Killer tomatoes are directly mutated from regular tomatoes instead of blood
- tomatoes
- - tweak: Increased the yield of regular tomatoes by 1
- - tweak: Tweak some stats on the killer tomato seeds
- - bugfix: Fixes the blind player preference not doing anything
- - rscadd: Adds portaseeder to R&D
- - tweak: Scythes will conduct electricity now
- - tweak: Mini hoes play a slice sound instead of bludgeon sound
- - tweak: Plant analyzer properly has a description and origin tech
- - tweak: Can have hulk+dwarf mutations together
- - tweak: Can have heat+cold resist together
- - tweak: Can only remotely view people who also have remote view
- - bugfix: Fixes cold mutation not having an overlay
- - bugfix: Hallucinations will no longer tick down twice as fast as they should nor
- will they spawn twice as many hallucinations as they should
- - bugfix: Incendiary mitochondria no longer asks who you want to cast it on (it
- always is meant to be cast on yourself)
- - bugfix: Fixes permanent nearsightedness even when wearing prescription glasses
- KasparoVy:
- - tweak: 'Head accessories now behave like facial hair: They will no longer be hidden
- by clothing items that BLOCKHEADHAIR (have the BLOCKHEADHAIR flag).'
- - bugfix: Wearing a piece of clothing that blocks head hair will no longer make
- head accessories (facial markings/horns/antennae) invisible until an icon update
- is triggered while the headwear is off.
- Meisaka:
- - bugfix: law manager no longer freaks out with Malf law
- TheDZD:
- - rscdel: Removes shitty Caelcode bees.
- - rscadd: Hydroponics can now manage bee colonies, bees produce honeycombs that
- can be ground to obtain honey, a decent nutriment+healing chemical
- - rscadd: Hydroponics can inject a queen bee with a syringe of a reagent to alter
- her DNA to match that reagent, meaning all honeycombs produced will contain
- that reagent in small amounts
- - rscadd: Bees with reagents will attack with that reagent. It takes 5u of a reagent
- to give a bee that reagent.
- - rscadd: Added the ability to make Apiaries and Honey frames with wood
- - rscadd: Added the ability to make Royal Bee Jelly from 10 Mutagen and 40 Honey
- - rscadd: Added the ability to make more Queen Bees from Royal Bee Jelly by using
- it on an existing Queen, to split her into two Queens
- - rscdel: Removes some snowflakey mob behavior from bears, snakes and panthers.
- - rscadd: Hudson is feeling punny.
- - experiment: Hostile mob AI should now be a bit more cost-efficient.
- monster860:
- - rscadd: Adds area editing, link mode, and fill mode to the buildmode tool
+DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
+---
+2016-01-03:
+ TheDZD:
+ - rscadd: Ports over changelog system from /tg/station.
+2016-01-06:
+ Certhic:
+ - bugfix: Corrected some air alarms so that atmos computer can access them
+ - bugfix: Bodyscanner now sees mechanical parts in internal organs
+ Crazylemon64:
+ - bugfix: Sleeping simple animals should tick down sleeping as normal - deaf simple
+ mobs are no longer a thing
+ Tastyfish:
+ - tweak: Instruments now use NanoUI.
+ - spellcheck: Corrected the blueshield mission briefing.
+2016-01-08:
+ Crazylemon:
+ - rscadd: Fully enables a system to allow species to have unique procs and verbs
+ that come and go with the species.
+ - rscdel: IPCs lose their change monitor verb when changing species now. Gone are
+ the days of recalling a past IPC life to perform self-barbery! Oh, woe is me!
+ - bugfix: Sleepers and Body Scanners will now reliably work when rotated
+ - bugfix: SSD humans should be asleep more reliably now.
+ Dave The Headcrab:
+ - tweak: Nerfs the damage the Detective's revolver does from 15 brute to 5 brute.
+ - rscadd: Adds a 300 round capacity buckshot magizine that fits into the L6 Saw.
+ - rscadd: Adds a 25 round capacity 40mm HE magizine that fits into the L6 Saw.
+ - rscadd: Adds the 'Devastator' L6 SAW, starts off loaded with the buckshot magizine.
+ - rscadd: Gives the SST the 'Devastator' L6 Saw, and one of each mag type in their
+ bag.
+ FalseIncarnate:
+ - rscadd: Plants will now begin to die over time if their age exceeds 5 times their
+ TRAIT_MATURATION value.
+ - tweak: 'Weed growth chance per process in trays has been slightly increased (Previously:
+ 5% chance if no seed, 1% otherwise;Now: 6% / 3%).'
+ - tweak: 'Pest growth in trays has been slightly buffed. (Previously: 3% chance
+ to increase by 0.1; Now: 5% chance to increase by 0.5)'
+ Fethas:
+ - rscadd: Due to Archmage Steve leaving the nya-cromantic stone near the microwave,
+ the true power of the stone has been unleashed. Subjects of the stone are not
+ only ressurected ... but resurrected as catgirls ... We fired steve.
+ Fox McCloud:
+ - bugfix: fixes a bug relating to some brute/burn damage being dealt to human mobs.
+ - rscadd: Adds in overloading APCs, causing them to arc electricity to mobs in range.
+ - tweak: Makes Engineering related APCs overload proof.
+ - rscadd: Implements the timestop spell.
+ - rscadd: Implements new sepia slime reaction which halts time in an AoE.
+ - tweak: sentience potions no longer can make slimes sentient.
+ - tweak: Removes Hulk instant stun.
+ - tweak: Hulk damage increased.
+ - tweak: Hulk wears off at a lower health threshold.
+ - bugfix: Fixes strange reagent not working on simple animals.
+ - tweak: Reduces the amount shock damage and bounces for the Tesla engine.
+ - bugfix: Fixes Syndicate Cyborg's LMG being invisible.
+ - bugfix: Fixes the uplink kit having implanters that were both nameless and looked
+ as if they had been used.
+ KasparoVy:
+ - rscadd: Added the security gasmask, sexy mime mask, bandanas, balaclava, welding
+ gas mask and wrestling masks for Vox. Added adjusted-state sprites for the Vox
+ breath, medical, and surgical masks.
+ - rscdel: Removed a duplicate of the human balaclava sprite.
+ - tweak: Modifies the Vox plague-doctor, fake moustache, sterile and medical mask
+ sprites to fit the Vox anatomy and animates the Vox SWAT mask. Corrects the
+ names of some Vox mask adjusted-state sprites.
+ Tastyfish:
+ - spellcheck: Fixed the pronouns in a few verbs and the door to 'Interrogation Observervtion'.
+ Tigercat2000:
+ - rscadd: Added 96x96 (3x) res option to icons menu
+2016-01-11:
+ CrAzYPiLoT:
+ - bugfix: Fixes the footsteps sounds to the fullest.
+ Crazylemon:
+ - rscadd: Bomb guardians now automatically notify their master when they've set
+ something to boom, so there's less accidental friendly fire
+ - bugfix: Bomb guardians are only notified that their trap failed, if it ACTUALLY
+ FAILED.
+ - rscadd: Bomb guardians now are more aware of what is primed to explode.
+ - rscadd: Bomb guardian summoners can now defuse their guardian's bombs without
+ harm.
+ - rscadd: Brought RAGIN' MAGES back up to function.
+ Dave The Headcrab:
+ - rscadd: Added a new icon for the soy and cafe latte drinks. Icons courtesy of
+ Full Of Skittles, resident overlord of art.
+ Fox McCloud:
+ - rscadd: Re-arranges the armory and changes its contents minorly.
+ - rscadd: Adds in rubbershot ammo boxes.
+ - bugfix: Fixes Mutadone incurring a massive cost on the server.
+ - tweak: Positronic brains can no longer speak binary.
+ - tweak: Positronic brains can be prevented from speaking (or allowed) by toggling
+ their speaker on/off.
+ - tweak: IPC's positronic brains start off toggled off.
+ - bugfix: Fixes the supermatter announcement causing massive amounts of server lag.
+ - rscadd: Adds in tradable telecrystals.
+2016-01-13:
+ Fox McCloud:
+ - bugfix: Fixes Rezadone not clearing mutated organs.
+ - tweak: Clone damage immunity removed from Slime People, Shadowlings, Golems, and
+ Vox
+ - tweak: Explosions will no longer destroy things underneath turfs until the turf
+ is exposed.
+ - bugfix: fixes a runtime related to revolver spinning.
+ - bugfix: fixes server loading taking an abnormally long time.
+ Kyep:
+ - rscadd: Blob, vine and virus outbreaks are now more clearly labeled as such, to
+ avoid people confusing them with each other
+ Tastyfish:
+ - tweak: NT Rep fountain pens and magistrate gold pens can now write in 5 different
+ colors. The IAA gets a cheap plastic equivalent.
+2016-01-18:
+ Crazylemon:
+ - rscadd: New classes of shapeshifters have been sighted around the NSS Cyberiad...
+ - bugfix: Wizards now can't teleport to other antag spawn points.
+ - bugfix: Removes an extruding pixel from the left-facing IPC glider monitor sprite.
+ - tweak: Ragin' Mages now spawn every 7 minutes, instead of 5. Admins can further
+ adjust this by modifying the 'delay_per_mage' variable.
+ - bugfix: Ragin' Mages are now made with 100% less in-use souls (Apprentices won't
+ have their consciousness yoinked).
+ - tweak: It takes half an hour for the REAL chaos of ragin' mages to start, for
+ at least a semblance of normality.
+ Dave The Headcrab:
+ - rscadd: Adds the advanced energy revolver, toggles between taser and laser modes.
+ - rscdel: Removes the detective's revolver from the blueshield's locker.
+ - tweak: Changes the taser the blueshield starts with into an advanced energy revolver.
+ Deanthelis:
+ - rscadd: Added the ability for the Magnetic Gripper to pick up and place light
+ tiles.
+ Fethas:
+ - bugfix: Readds the hud icon showing up for master and servent
+ - rscadd: adds mindslave datum hud thingy based on TGs gang huds
+ Fox McCloud:
+ - bugfix: Fixes not being able to add/remove Weapon Permit from IDs.
+ - bugfix: Fixes the energy sword being invisible in-hand when turned on.
+ - bugfix: Fixes the telebaton being invisible in-hand when extended.
+ - bugfix: Fixes eye-stabbing not having an attack animation or hitsound.
+ - bugfix: Fixes some kitchen utensils playing the wrong hit-sound and playing twice
+ in some cases.
+ - bugfix: Fixes the butcher cleaver sprite being backwards.
+ - bugfix: Fixes the telebaton sprite being missing from the side.
+ - bugfix: Fixes the meat cleaver being invisible in-hand.
+ - spellcheck: Corrects some grammatical descriptive errors for the elite syndicate
+ hardsuit.
+ - rscadd: completely overhauls implants to TG's standards.
+ - rscadd: Adds storage implant.
+ - rscadd: Adds microbomb and macrobomb implants.
+ - rscadd: Adds in support for removing implants directly into cases.
+ - rscdel: Removes Bay style explosive implants.
+ - rscdel: Removes compressed matter implants.
+ - tweak: Tweaks the uplink to reflect removal of the old implants and inclusion
+ of the new.
+ - bugfix: Fixes/cuts down on the lag caused by monkey cubes.
+ Jey:
+ - tweak: Inflatable walls and door can now be deflated by altclicking them
+ - bugfix: Fixed lag from expanding multiple monkeycubes at once.
+ KasparoVy:
+ - imageadd: Adds blank icons with standardized timings for species tail wagging,
+ used in icon generation.
+ - bugfix: Fixes tails overlapping arms/limbs + gloves, etc. when facing EAST or
+ WEST.
+ - bugfix: Ensures tails will overlap stuff as normal only when facing NORTH so as
+ to avoid unwanted interference with the base sprite.
+ - bugfix: Tails now appear in ID cards, overlays things correctly.
+ - bugfix: Tails now overlay and are overlaid by things correctly in preview icons.
+ - tweak: Modifies the positioning of tail icon generation in the ID card preview
+ icon generation file.
+ - tweak: Modifies the positioning of tail icon generation in the player preferences
+ preview icon generation file.
+ - tweak: Breaks limb generation into its own layer, breaks tail generation into
+ a second layer that can be overlaid by limbs.
+ - tweak: If the user's species is flagged to have a tail that is overlapped, TAIL_LAYER
+ will now overlay the NORTH direction sprite of a tail now, while TAIL_UNDERLIMBS_LAYER
+ gets all remaining directions. Otherwise icons are generated in the traditional
+ manner.
+ - tweak: Adjusts the Unathi right arm east direction and animated tail sprites,
+ recolouring a random pixel and fixing a floating tail respectively.
+ - tweak: Adjusts position of tail layer such that tails' north direction sprites
+ will overlay backpacks (more importantly, satchel straps).
+ - tweak: Accommodates admin-overrides to the body_accessory species check by setting
+ the default animation template to Vulpkanin.
+ - tweak: Adjusts north-direction Unathi static tail sprite, now attaches to the
+ body in the correct location.
+ - rscadd: Adds some TG underwear.
+ - rscadd: Adds an NV science goggles worn sprite.
+ - rscadd: Ports Bay/TG berets.
+ - tweak: Adjusts beret sprite, recolours strange orange pixels.
+ - tweak: Adjusts NV science goggles object icon. Removed strange border and centered
+ it.
+ - rscadd: Ports Polaris' PRs 761 and 778, brings over Ragnie's awesome Ward-Takahashi
+ prosthetics.
+ Kyep:
+ - rscadd: Changing level to gamma/delta/epsilon now displays a special gamma/delta/epsilon
+ sprite on status monitors
+ - bugfix: Changing level to green/blue now clears the status monitors, so they no
+ longer show higher alert levels after the level is changed
+ NTSAM:
+ - rscadd: Added a rainbow IPC screen.
+ PPI:
+ - tweak: Modifies the effective time limit to activate the Nuclear Challenge as
+ Nukeops from two minutes to seven minutes
+ Tastyfish:
+ - rscadd: The QM now actually has a QM stamp instead of a fake one, as well as an
+ approved and denied stamp.
+ - rscadd: New area named 'Genetics Maintenance' solidifying/relabelling the confusing
+ area between the morge and Mech Bay as being fully maintenance again, but working
+ correctly and with proper doors.
+ - spellcheck: Fixed a few maintenance door names to be in parity to the rest of
+ the station.
+ - rscadd: Added the ability to print the records photo of a crew member from a security
+ records console. Useful for Wanted notices!
+ Tigercat2000:
+ - rscdel: You can no longer use the gibber for monkies.
+ - spellcheck: Cleaned up gibber.dm styling.
+ - rscadd: The fire alarm now uses NanoUI, with color coded alert levels.
+ - tweak: Upgraded NanoUI (again), fancy FontAwesome icons.
+ - wip: Didn't add any butts. Yet.
+2016-01-20:
+ DarkPyrolord:
+ - rscadd: Adds in hardsuit sprites for Vulpkanin
+ FalseIncarnate:
+ - rscadd: Allowed cheap lighters and individual matches to be put into cigarette
+ packages at the cost of cigarette space.
+ - rscadd: Matches can now be lit and put out by striking the match on your shoes.
+ Good for if you lose that matchbox, or want to just feel cool.
+ Fox McCloud:
+ - bugfix: Fixes brute damage on weapons not knocking people down.
+ - tweaks: Tweaks implant behavior to be more consistent and unified.
+ - tweak: Lowers the pAI cooldown from 60 seconds to 5 seconds.
+ - rscadd: Raw telecrystal can now be used to charge uplink implants.
+ - bugfix: Fixes being unable to holster the pulse pistol
+ - bugfix: Fixes being able to holster shotguns
+ KasparoVy:
+ - tweak: Improved shading on all Vulpkanin hardsuit tails.
+ - tweak: Vulpkanin hardsuit helmet respriting (colour tweaks).
+ - rscadd: Vulpkanin hardsuit helmets with proper flashlight-on sprites.
+ Tastyfish:
+ - tweak: The ID computer Access Report printout now separates the access list with
+ commas so it's actually readable.
+ - bugfix: The ID computer Access Report printout isn't blank if you don't have an
+ authorization card in anymore.
+ - rscadd: In the supply ordering & shuttle consoles, one can now cancel an order
+ at either the Reason or Amount input dialogs.
+ - bugfix: Table flipping uses correct sprites.
+ TheDZD:
+ - rscadd: Adds world.Topic() handling so that users are notified in-game when pull
+ requests are opened, closed, or merged on the Github repo.
+2016-01-23:
+ Fox McCloud:
+ - rscdel: Removes Vampire HUD
+ - tweak: moves the Vampire blood counter to a more easy to see location
+ - rscadd: Adds in a Changeling chemical counter display
+ - rscadd: Adds in a Changeling sting counter display
+ - rscadd: Vampire total blood and usable blood will now appear under status
+ - tweak: Changes vampire blood display to be similar to ling chemical counter
+ - bugfix: Fixes unnecessary toxin damage being dealt on severe bloodloss
+ - bugfix: Fixes human mobs not receiving proper random names
+ - rscadd: Adds in knight armor
+ - rscadd: Grants the chaplain a set of crusader knight armor
+ - rscadd: Adds in cult-resistant ERT paranormal space suit
+ - rscadd: Allows the Chaplain to convert his null rod into a holy sword with crusader
+ knight armor
+ - tweak: Chaplain's closet is now a secure closet
+ - rscadd: Adds in Assault Gear crate to cargo
+ - rscadd: Adds in military assault belt
+ - rcsadd: Adds in spaceworthy swat suits
+ - tweak: tweaks bandolier to hold 2 additional shotgun shells
+ - tweak: bartender starts off with +2 additional shells
+ - tweak: Reduces the cost of the space suit crate and doubles its contents
+ - rscadd: Refactors knives so their behavior is more universal
+ - bugfix: Fixes Hulk not properly being removed when your health drops below a threshold
+ - bugfix: Fixes flickering vision in a mining mech
+ Tastyfish:
+ - rscadd: Poly has taken a seminar on the latest trends in engine operations.
+ - rscadd: Player-controller parrots can now hear their headsets.
+ Tigerbat2000:
+ - bugfix: The nuclear disk escaping on the shuttle no longer counts as a syndicate
+ minor victory.
+ - bugfix: Cultists can once again actually greentext the escape objective.
+2016-01-24:
+ KasparoVy:
+ - bugfix: Fixes markings overlaying underwear.
+ - rscadd: Nude icon in underwear.dmi
+ - bugfix: Fixes Vox robes not using the correct on-mob sprites.
+ - bugfix: Fixes unreported bug where there was a slim chance during character preview
+ icon generation that a character with Security Officer set to high would get
+ rendered with either the wrong beret sprite or no beret sprite at all.
+ - bugfix: Fixes an issue where Sigholt's fluff beret wasn't using the correct sprites.
+ Tastyfish:
+ - bugfix: Passively power-consuming borg modules, such as the peacekeeper movement
+ and shield module, won't spam the user infinitely if they're low on power anymore.
+2016-01-29:
+ Crazylemon:
+ - bugfix: 'The DNA scanner has now undergone a seminar to recognize fake identities;
+ It will now scan the actual person''s identity, rather than their disguise (read:
+ wearing a mask with or without someone else''s ID).'
+ - rscadd: Matter eater now allows you to eat humans as if you were fat.
+ - tweak: Eating mobs with an aggressive grab now generates attack logs.
+ Crazylemon64:
+ - bugfix: For a short while, there was a clerical error where all AI communications
+ equipment was replaced with bananas. This has now been fixed.
+ - tweak: Ghosts can now see the contents of smartfridges and look at the drone console
+ - tweak: Humans now only produce one message when shaken while SSD
+ - bugfix: The supermatter no longer will irradiate everyone, everywhere, when it
+ explodes.
+ - tweak: Writing on paper will now add hidden admin fingerprints, so that you can't
+ forge mean notes in someone else's name.
+ - bugfix: Brains are no longer able to escape their brain by being a sorcerer.
+ - bugfix: Astral projecting with other runes on the same tile will now no longer
+ prevent you from re-entering
+ - bugfix: Voxxy that is become ex-voxxy no longer carry voxxy appearance! yaya!
+ FalseIncarnate:
+ - tweak: Allows plants to be identified as enhanced*. Enhancing plants results from
+ using reagents (like saltpetre) that affect the stats of a seed instead of using
+ mutagens/machines. *May not meet standards for being classified as "organic
+ produce". (This was already possible, just renames enhanced plants for easier
+ differentiation)
+ Fox McCloud:
+ - bugfix: Fixes mutadone not working with some genetic mutations
+ - bugfix: Fixes banana honk and silencer being alcoholic
+ - bugfix: Fixes Kahlua being non-alcoholic
+ - bugfix: Fixes polonium not metabolizing
+ - bugfix: Fixes being able to receive free unlimited boxes from the Merchandise
+ store
+ - rscadd: Adds in wooden bucklers
+ - tweak: Re-adds roman shield to the costume vendor
+ - tweak: Buffs Riot shield damage from 8 to 10
+ - rscadd: Adds in a Skeleton race
+ - tweak: Tweaks the skeletons colors to be more realistic and to blend in less with
+ the floor
+ - rscadd: Adds in lichdom spell for the wizard
+ - rscadd: Adds in lesser summon guns spell for wizard
+ - rscadd: adds in Mjolnir and the singularity hammer as weapons the wizard can purchase
+ - rscadd: Wizard can purchase the charge spell from the spell book
+ - rscadd: Wizard can purchase a healing staff from the spell book
+ - tweak: Tweaks and lowers spell costs of utility spells for wizard
+ - tweak: Re-organizes the spellbook to be better divided into categories and have
+ a better window size
+ - tweak: Knock now opens+unlocks lockers
+ - tweak: Magic Missile has a slightly longer cooldown and no longer deals damage,
+ but has a lower cooldown is upgraded
+ KasparoVy:
+ - rscadd: Navy blue Centcom Officer's beret for use by the Blueshield.
+ - rscadd: Adds the new navy blue beret to the Blueshield's locker.
+ - tweak: Gives the Blueshield's berets (black and navy blue) the exact same strip
+ delay and armour as the Security Officer's beret.
+ - rscadd: Adds TG energy katana back and belt sprite.
+ - rscadd: Bo staff back sprite.
+ - tweak: Adjusts energy katana sprites to make the weapon stand out a bit more from
+ the regular katana.
+ - rscadd: Cutting open the toes of footwear so species with feet-claws can wear
+ them.
+ - rscadd: Toeless jackboots.
+ - tweak: Cleans up glovesnipping and lighting a match with a shoe.
+ - tweak: Lighting a match with a shoe produces a more appropriate message, handled
+ at the same standard as glove-snippingboot-cutting.
+ Tastyfish:
+ - rscadd: Cargonia now has its own section in the manifest.
+ TheDZD:
+ - rscdel: Due to budget cuts and reports of operatives accidentally firing enough
+ bullets to reach a state of what our scientists refer to as "enough dakka,"
+ Syndicate High Command has decided to restore the Syndicate Strike Team arsenal
+ to using standard-issue L6 SAW ammunition.
+2016-01-31:
+ Crazylemon64:
+ - bugfix: Syndicate borgs can now interact with station machinery
+ - rscadd: People with slime people limbs can now *squish
+ - tweak: Skrell's vulnerability to alcohol is checked on their liver, now - a liver
+ transplant will let them take alcohol like a champ - lacking a liver will have
+ the same effect as being a skrell, when drinking
+ FalseIncarnate:
+ - rscadd: Adds in the Magic Eight Ball toy, found in Claw Game prize orbs.
+ - rscadd: Adds in the Magic Conch Shell, an admin-only shell of power.
+ Fox McCloud:
+ - rscadd: Updates Summon Guns and Magic to include many of the new guns
+ - tweak: Summon Guns/Magic can no longer be used during Ragin' Mages
+ Tastyfish:
+ - rscadd: The emergency shuttle status in the Status tab now has ETA/ETD/etc like
+ before.
+ - tweak: Code Gamma+ now has a 5 minute emergency shuttle call, like Red.
+ pinatacolada:
+ - rscadd: Adds NanoUI to the operating computer
+ - rscadd: Adds health announcing, critical and oxygen damage aural alerts to the
+ computer, with a menu to selectively turn them on and off
+2016-02-10:
+ Crazylemon64:
+ - tweak: The cloner now checks for NO_SCAN on the brain when scanning - unclonable
+ species are now truly unclonable. You are still able to revive them with a brain
+ transplant and a defib, however.
+ - rscadd: A tier-4 DNA scanner linked to a cloning system will now be able to reproduce
+ a body from a brain's DNA, in event of the original corpse being gibbed or similar.
+ - bugfix: Species with organic limbs and NO_BLOOD will no longer bleed (though still
+ on hit - write that off as "bone powder")
+ - tweak: Skeletons now lack internal organs, except for the runic mind which exists
+ in their head - an analogue for the brain
+ - rscadd: Skeletons that drink milk will be regenerated at a moderate pace, have
+ a small chance of mending bones, and will praise the great name of mr skeltal
+ - tweak: Adds a reagent system for species reacting to specific reagents
+ - rscadd: Slime People can now select from all human hairstyles, and their "hair"
+ will be tinted a shade of their body.
+ - tweak: Increases the frequency of the cortical borer event.
+ - tweak: People with borers cannot commit suicide - this applies to a controlling
+ borer, too.
+ - tweak: Borers can no longer overdose their hosts.
+ - tweak: Borers can now inject Saline-Glucose, Spaceacillin, Hydrocodone, Mitocholide,
+ Salbutamol, Capulettium+, and Charcoal. Styptic was removed, as it's pathetic
+ at healing when directly injected. Salicyclic acid was removed too, as its functionality
+ is duplicated by both hydrocodone and saline-glucose.
+ - bugfix: A mind trapped by a cortical borer can now understand things it could
+ understand when normally in its body.
+ - rscadd: Changes chemistry's welding tank to a wall-mounted version, to increase
+ the room available.
+ - rscadd: You can now gib butterflies and lizards with a knife
+ - rscadd: Ghosts can now follow mecha
+ - bugfix: You can now access an R&D console by emagging it - it did nothing before.
+ - bugfix: Walls will now properly smooth and show damage.
+ - bugfix: Fixes the dialog that occurs when the AI shuts off to actually do what
+ it says it does
+ Fox McCloud:
+ - bugfix: Fixes not being able to attach IEDs to beartraps
+ - bugfix: Can no longer spamclick someone to death using headslamming on a toilet/urimal
+ - tweak: Toilet/urinal headslamming now plays a sound
+ - tweak: Toilet headslamming damage reduced slightly
+ - rscadd: Can now fill open reagent containers in a toilet to receive "toilet water".
+ - tweak: No more message spam when someone fills a container using a sink
+ - rscadd: Can now wash your face using a sink, which washes away lipstick and wakes
+ you up slightly
+ - tweak: Washing things will now use progress bars
+ - tweak: Ensures consuming a single syndicate donk pocket won't get you addicted
+ to meth
+ - tweak: Kinetic Accelerators and E-bows automatically reload
+ Glorken:
+ - rscadd: Added a Knight Arena for Holodeck.
+ - imageadd: Added red and blue claymore sprites.
+ - spellcheck: Changed overrided to overrode when emagging Holodeck computer.
+ KasparoVy:
+ - rscadd: Vox versions of the Officer SWAT sechailer + HOS SWAT sechailer + Warden
+ SWAT sechailer.
+ - rscadd: Resprited versions of most Human masks to fit Unathi, Tajara and Vulpkanin.
+ - rscadd: Warden now gets their own version of the SWAT sechailer in their locker.
+ - tweak: HOS now gets the appropriate version of the SWAT sechailer in their locker.
+ - tweak: Repositioned smokeables now available for Vox, Unathi, Tajara and Vulpkanin.
+ - tweak: Properly shades Vox bandana down-state sprites.
+ - rscadd: Readds Tajaran bald hairstyle.
+ - rscadd: Alternate style of non-Human breath mask (incl. surgical/sterile mask)
+ down-state positioning.
+ - tweak: Corrects all non-Human species' breath mask (incl. surgical/sterile mask)
+ down-state icons to use the right position style.
+ - tweak: Minor adjustments to Tajaran breath mask up-state sprites.
+ PPI:
+ - rscadd: Adds a reconnect button to the File menu in the client.
+ - rscadd: Adds head patting
+ Regen:
+ - tweak: Powersink can now drain a lot more power before going boom
+ - tweak: Buffed the powersinks drain rate
+ - tweak: Buffed explosion from an overloaded powersink, try to find it instead of
+ overloading the grid.
+ - rscadd: Admin log warning before the powersink explodes
+ Spacemanspark:
+ - rscadd: Miners can now utilize the power of mob capsules to take along their lazarus
+ injected mining creatures!
+ - rscadd: Store your Pokemo- er, sorry, I mean mining mobs that you've captured
+ in the lazarus capsule belt.
+ Tastyfish:
+ - bugfix: Species that don't breathe can kill themselves now!
+ - rscadd: Suicide messages are now catered to your species.
+ - tweak: Shortened the default pill & patch name when using the ChemMaster.
+ - rscadd: The chaplain now has a service radio headset, as Space Jesus intended.
+ TheDZD:
+ - tweak: When Ahelping, "Question" is now "Mentorhelp" and "Player Complaint" is
+ now "Adminhelp."
+ - tweak: Mentorhelps and PM replies from mentors appear in a bold aqua blue color.
+ - tweak: Adminhelps and PM replies from admins appear in a bold bright red color.
+ - tweak: PM replies from players appear in a dull/dark purple color.
+ - rscadd: Adds admin attack log to players being converted to cult.
+ - rscadd: Adds shadowling thrall jobbans.
+ - rscadd: Jobbanned players who are converted to shadowling thrall, revolutionary,
+ or cultist will have the control of their body offered up to eligible ghosts.
+2016-02-13:
+ Crazylemon64:
+ - tweak: Relaxes the check on what atoms you can follow to any movable atom
+ - tweak: Mages are now more ragin
+ - tweak: Admins can now adjust the total number of wizards at runtime by tweaking
+ either max_mages, or players_per mage
+ DaveTheHeadcrab:
+ - rscadd: Adds new worn icons for duffelbags to better reflect their size, compliments
+ of WJohn at /tg/
+ FalseIncarnate:
+ - rscadd: Adds burritos, made from cutlets, beans, rice, capsacin oil (hotsauce),
+ cheese, and flat dough (because we lack proper tortillas) in the microwave.
+ - rscadd: Adds chimichangas. You know you want a deep-fried burrito.
+ Fox McCloud:
+ - tweak: Updates some spell icons with better/higher quality icons
+ - tweak: Updates unarmed attacks to allow for more customization
+ - tweak: Updates martial arts so they factor in specie's attack messages and sounds
+ - tweak: Re-balances Sleeping Carp fighting style
+ - tweak: Re-balances Bo Staff
+ - tweak: 'Rebalances Golem: they should now be spaceproof, fire+cold proof, rad
+ proof, virus immune, clonable, parapen+syringe gun immune, deal increased melee
+ damage. Their armor has been reduced to 55 melee across the board, their slip
+ immunity removed, pain immunity removed, and they''re slightly slower'
+ - bugfix: Fixes Ei Nath generating two brains
+ - bugfix: Ensures the Necromatic Stone generates actual skeletons
+ - bugfix: Can now strip PDA/IDs from Golems
+ - bugfix: Fixes sleeping carp grab not being an instant aggressive grab
+ - bugfix: Fixes an exploit with declaring war on the station
+ KasparoVy:
+ - rscadd: Orange and purple bandanas for all station species.
+ - rscadd: The ability to colour bandanas with a crayon in a washing machine.
+ - tweak: Refactors the bandana adjustment system.
+ - tweak: Minor adjustments to Tajaran and Unathi bandana east/west sprites.
+ - tweak: Adjusting a bandana will now take if off of your head/face and put it in
+ an available hand. If both hands are available, it goes in the selected hand.
+ - bugfix: Adjusting a coloured bandana will no longer revert it to the original
+ coloured icons anymore.
+ - bugfix: Adjusting a bandana from mask-style to hat-style means the bandana won't
+ obscure your identity anymore.
+ - rscadd: Greys now use re-positioned smokeables. They no longer smoke out the eyes.
+ TheDZD:
+ - bugfix: Fixes spacepods being able to shoot through walls.
+ - tweak: Lowers spacepod weapons fire delay.
+ - tweak: Increases spacepod weapons energy costs.
+ - tweak: Makes spacepods move at speeds not rivaling those of photon beams. They
+ are now a hair bit faster than a person with a jetpack.
+ - tweak: Reduces battery costs for spacepod movement.
+2016-02-24:
+ Crazylemon64:
+ - tweak: The defib should be more reliable on people who have ghosted
+ - tweak: The defib will now give a message if the ghost is still haunting about
+ - rscadd: Attacking someone with an accessory will now let you put things on them
+ without having to strip them.
+ - bugfix: Borers will now properly detach upon death of a mob they are controlling
+ - tweak: Borers can now see their chemical count while in control of a mob
+ - rscadd: Borers can now silently communicate with their host - this is not available
+ to the host until the borer has either begun to communicate, or has taken control
+ at least once - this is to avoid spoiling that the borer exists
+ - tweak: Borers won't be able to talk out loud inside of a host, by default - they
+ can remove this safeguard with a verb under their borer tab. Borer hivespeak
+ is unaffected.
+ - tweak: Borers infesting and hiding are now silent.
+ - tweak: Made borer's chem lists more nicely formatted
+ - bugfix: No more superspeed attacking simplemobs
+ - tweak: New players now show up properly under the "who" verb when used as an admin
+ - rscadd: Mining drones will now automatically collect sand lying around
+ - bugfix: RIPLEYs can now drill asteroid turfs for sand
+ - rscadd: You can now load exosuit fuel generators with items containing their material
+ - this means you can fuel yourself off of ores, but this will be highly inefficient
+ and cost you mining points later on, as you can't take fuel back out.
+ - rscadd: You can now load the fuel generators from an ore box.
+ - tweak: The plasma generator now produces 3x as much power from the same amount
+ of fuel - this lets it even remotely compete with the uranium generator.
+ - tweak: You can now light cigarettes off of burning mobs.
+ - tweak: Exosuit tracking beacons now fit in boxes - prior, they were far too large
+ for even a backpack, as they shared the same size as all other mecha equipment
+ - tweak: Miners can now collect ore by walking over it with an ore satchel on.
+ FalseIncarnate:
+ - rscadd: Adds prize tickets as a replacement for physical arcade prizes.
+ - rscadd: Adds a buildable prize counter to exchange tickets for prizes.
+ - rscadd: Adds a bike. Despite what Prof. Oak might claim, you can ride it indoors.
+ - rscadd: Adds colorful wallets, for that old school arcade pride.
+ - bugfix: Fixes accidental removal of plump helmet biscuit recipe.
+ - rscadd: Temporarily adds a prize counter to the bar (Cyberiad) or dorms (MetaStation),
+ and adds a max upgrade one to the Ninja Holding Area (Cyberiad z2)
+ - bugfix: Fixes Metastation. Seriously fixed a lot, just read the PR description
+ for the full list.
+ FlattestGuitar:
+ - rscadd: Adds IPC alcohol and a few derivative drinks
+ - tweak: IPCs can now drink and be fed from glasses
+ Fox McCloud:
+ - tweak: Laser eyes mutation no longer drains nutrition
+ - tweak: 'splits the EMP kit into two things: the standard EMP kit (2 grenades and
+ an implant), and the EMP flashlight by itself'
+ - tweak: nerfs heart attacks so they do less damage
+ - tweak: Pickpocket gloves now put the item you strip into your hands as opposed
+ to the floor
+ - tweak: Picketpocket gloves can now silently strip accessories
+ - tweak: Pickpocket gloves will no longer give a message for messing up a pickpocket
+ KasparoVy:
+ - bugfix: Adjusting masks while they are not on the face will no longer turn off
+ internals.
+ - bugfix: Adjusting masks while they are not on the face will now cause the mask
+ to hide/reveal the wearer's identity the next time it's worn as intended.
+ - rscadd: Adds the ability to open/close bomber jackets.
+ - rscadd: Adds a security bomber jacket. This jacket inherits the protection and
+ storage capabilities as a standard Security vest with additional bomber jacket
+ benefits.
+ - rscadd: Adds UI button in top left of screen for jacket adjustment.
+ - tweak: Replaces the standard bomber jacket in the Pod Pilot bay with the Security
+ version.
+ - tweak: Centralizes jacket/coat adjustment handling.
+ - tweak: All jackets start closed by default.
+ - rscadd: Geneticist duffelbag on-mob sprite (for all species).
+ - rscadd: Vox-fitted backpacks, satchels, ERT backpacks, duffelbags and defib unit.
+ - tweak: Refactors back-item icon generation.
+ - bugfix: Typo in the description of Santa's sack.
+ - bugfix: Missing punctuation and gender macros in the description of the bag of
+ holding.
+ - bugfix: The tweak to back-icon generation fixes a bug where the wrong sprite name
+ was being used to generate back-item icons.
+ PPI:
+ - rscadd: Adds the ability to hide papers in vents. You can now leave a romantic
+ love letter, exchange information in secret, or hide papers infused with the
+ power of nar'sie from sight.
+ Regen1:
+ - rscadd: Adds the Immolator laser gun, a modified laser gun with 8 shots that will
+ ignite mobs, can be made in R&D
+ Spacemanspark:
+ - rscadd: Adds *yes and *no emotes to Synthetics. Glory to Synthetica.
+ Tastyfish:
+ - tweak: The PDA system has been completely redone behind the scenes! It should
+ be functionally similar, although there is now a Home and Back button at the
+ bottom as appropriate.
+ - rscadd: All of the heads now have multicolored pens.
+ - rscadd: EngiVend now has 10 camera assemblies.
+ - tweak: Borgs can now use vending machines.
+ - rscadd: There are now picture frames that can be made from the autolathe or wood
+ planks for papers, photos, posters, and canvases!
+ pinatacolada:
+ - tweak: Makes the Protect Station AI law board no longer consider people that damage
+ the station crew, instead of human
+ ppi:
+ - tweak: When revealed Revenants will not be able to move at the maximum move speed,
+ nor be able to pass through any solid object, like walls, windows, grills, computers
+ and mechs.
+2016-02-26:
+ FalseIncarnate:
+ - tweak: Chocolate can now make you fat, as expected.
+ Fox McCloud:
+ - tweak: stamina damage now regenerates slightly faster
+ - rscadd: Adds in whetstones for sharpening objects
+ - tweak: Kitchen vendor starts off with 5 salt+pepper shakers
+ - tweak: Can now point while lying or buckled
+ - bugfix: Fixes Capulettium Plus not silencing
+ - bugfix: Fixes slurring, stuttering, drugginess, and silences last half of what
+ they should
+ KasparoVy:
+ - bugfix: Jackets that start open are recognized as actually being open already
+ now. This fixes a bug with certain items that don't have an open state, or cases
+ where it ended up giving an item the wrong icon (one that didn't exist)
+ Spacemanspark:
+ - bugfix: Fixes synthetics from giving off the proper message in the chat box when
+ using the *yes and *no emotes.
+ Tastyfish:
+ - rscadd: Wheelchairs, janicarts, and ambulances can now go through doors according
+ to the user's driver's access.
+2016-03-07:
+ Crazylemon64:
+ - rscadd: People with VAREDIT can now write matrix variables
+ - rscadd: People with VAREDIT can now modify path variables
+ - tweak: Refactors the variable editor code somewhat.
+ - rscadd: The buildmode area tool now shows reticules of what you've selected.
+ - bugfix: Switching mobs while using the buildmode tool no longer screws up your
+ UI.
+ - tweak: Refactors buildmode so it's no longer a special-case system.
+ - rscadd: Adds a copy mode to build mode, which lets you duplicate objects.
+ - tweak: Any mob in buildmode can work at the fastest possible rate.
+ - bugfix: Fixed a problem where the icons of a person would not correctly update
+ when changing gender.
+ - tweak: One's hairstyle only adjusts on gender change if it's incompatible with
+ your new gender.
+ - bugfix: Fixed a bug where a person's icon would only be updated if their sprite
+ had a new layer added or removed.
+ - bugfix: You no longer lose your name when monkeyized and reverted - you'll still
+ look like a monkey while you're a monkey, though.
+ - bugfix: Your organs will now match your gender when you are cloned.
+ - bugfix: Skeletons (when a body rots) no longer retain a fleshy torso.
+ - bugfix: Putting people in an active cryotube now produces the message on insertion,
+ rather than release.
+ - bugfix: An EMP'd cloning pod will now display its sprites correctly.
+ FalseIncarnate:
+ - tweak: Water Balloons can be filled from more sources than just beakers and watertanks.
+ Fox McCloud:
+ - bugfix: Fixes the "yeah" glasses so the sound doesn't vary and a message is displayed,
+ on use
+ - bugfix: Noir mode only activates when the glasses are equipped to your actual
+ eyes
+ - rscadd: Noir Glasses mode can be toggled on or off (defaults to off)
+ - bugfix: Mimes can no longer use spells and continue speaking
+ - tweak: Mime abilities are now spells with proper icons
+ - tweak: Mime wall now last 30 seconds, up from 5
+ - tweak: forecfields/invisible walls now block air currents
+ - rscadd: Adds the Sleeping Carp scroll to the uplink for 17 TC
+ - bugfix: Fixes Shadowlings being able to use guns
+ - bugfix: Fixes sleeping carp scroll users being able to use guns
+ - bugfix: Fixes the Experimentor throwing one item at a time
+ - tweak: Experimentor menu now automatically refreshes after use
+ - tweak: Lowers surgery times across the board
+ - tweak: Removes scalpels causing 1 damage on successful surgery
+ - tweak: Removes random chance to fracture ribs on a successful surgery
+ - tweak: Mining drills now have an edge
+ KasparoVy:
+ - tweak: Jackets who have the verb available but are not intended to be adjusted
+ will not have the action button available.
+ - bugfix: You can now adjust breath masks while buckled into beds and chairs.
+ - bugfix: Known issues with adjusted jackets using the wrong sprites.
+ - rscadd: Blueshield coat in hand and item icons.
+ - rscadd: Hulks now rip apart adjustable and droppable jackets. The items stored
+ in the jackets get dropped on the ground.
+ Tastyfish:
+ - tweak: Infrared emitters can now be rotated while already in an assembly via the
+ UI popup.
+ - tweak: The infrared emitter can no longer be hidden inside of boxes and still
+ work.
+ - rscadd: The beach now has a border and is splashier.
+ - rscadd: Gives Psychiatrist a paper bin, clipboard, and multicolored pen.
+ - rscadd: Gives the Librarian / Jouralist a multicolored pen.
+ - rscadd: Gives the NT Representative a clipboard.
+ - tweak: The ethanol-based neurotoxin drink is now called Neuro-toxin to avoid being
+ confused with the deadly toxin.
+ VampyrBytes:
+ - bugfix: Fixes emotes ending with s needing 2. Emotes now work with grammatical
+ options eg ping or pings, squish or squishes
+ - tweak: Updated emote help with missing emotes. Help will also show any species
+ specific emotes for your current species
+2016-03-08:
+ Crazylemon64:
+ - tweak: Slime people are now more vulnerable to low temperatures.
+ - rscadd: Slime people are able to slowly regrow limbs at a high nutrition cost.
+ - rscadd: Slime people now slowly shift color based on reagents inside of them -
+ disabled by default, toggle it with an IC verb
+ - tweak: Slime people's cores are more vulnerable to damage
+ - bugfix: Species-related abilities now properly are removed - no more vox hair
+ stylists, unfortunately.
+ Fethas:
+ - bugfix: the nest buckle now looks for the right organ path
+ - bugfix: Fixed some sprites.
+ - bugfix: No more putting no drops in rechargers,
+ Fox McCloud:
+ - soundadd: Implement's goon's gibbing sound
+ - soundadd: Implement's goon's gibbing sound for robots/silicons
+ - sounddel: Removes old gibbing sound
+ Spacemanspark:
+ - rscadd: Lazarus Injector's can now be emagged to activate their special features,
+ alongside using EMPs on them.
+ Tastyfish:
+ - rscadd: Mimes now have a new ore, Tranquillite, used to bring peace and quiet
+ to the station.
+ - rscadd: There are also permanent invisible walls and silent floors that can be
+ made from tranquillite.
+ - rscadd: The Recitence mech is now buildable!
+ - tweak: The Recitence mech is now playable!
+ - tweak: Mid-round selection for various creatures and antagonists now consistently
+ asks permission.
+ TheDZD:
+ - rscadd: Adds justice helmets with flashing lights and annoying sirens.
+ - rscadd: Adds crates containing said helmets.
+ - rscadd: Also includes a version of the helmet that can only be spawned by admins,
+ and just has a single red light in the center instead of the stereotypical police
+ blinkers.
+ monster860:
+ - bugfix: Space pod transitions are now fixed.
+2016-03-16:
+ Crazylemon64:
+ - tweak: Being in godmode now makes you immune to bombs
+ - rscadd: Science members now get compensated when they ship tech disks to centcomm.
+ - rscdel: Science crew are no longer paid when they "max" research.
+ - bugfix: Roboticists now get credit for making RIPLEYs and Firefighters
+ - tweak: Slime people can now regrow limbs on a more lax nutrition requirement
+ - tweak: Enhances the nutripump+ to let slime people regrow limbs with it active
+ - bugfix: Skeletons, slime people, IPCs, and Diona no longer leave blood when hit
+ - bugfix: Rejuvenating a slime person will no longer clog up their "blood"
+ - tweak: Slime people will now regenerate "blood" from having water in their system
+ - tweak: The decloner can now be created again
+ - rscadd: Environment smashing mobs can now destroy girders.
+ DaveTheHeadcrab:
+ - tweak: Removes the check for species on the update_markings proc.
+ FalseIncarnate:
+ - tweak: Xeno-botany is now more user-friendly, and less random letters/numbers.
+ - rscadd: Hydroponics now has a connector hooked up to the isolation tray and a
+ new connector in their back room for those strange plants that like spewing
+ plasma or eating nitrogen.
+ - rscadd: You can now (finally) build the xeno-botany machines, and science can
+ print off their respective boards.
+ Fethas:
+ - tweak: Syringes are no longer sharp
+ - bugfix: byond likes direct pathing so item/organ/internal not item/organ even
+ if it shouldn't be in the internal_organs list. This was preventing the list
+ from doing stuff correctly.
+ - tweak: fixed ipc organ manipulation surgery, you can now insert a replacment ipc
+ organ directly instead of needing a screwdriver in your main hand
+ - bugfix: nanopaste now will repair organs with robotic >= 2 instead of > 2 cuase
+ i am an idiot
+ - bugfix: Fix, hopefully, for a runtime for clientless mobs whos head are cut off...
+ - bugfix: Hopefully fixes issues with diona eyes
+ - bugfix: Though shalt not eat robotic organs..including cybernetic implants..
+ - bugfix: ITS SURGERY_STEP/DETHRALL NOT SURGERY_STEP/INTERNAL/DETHRALL
+ FlattestGuitar:
+ - rscadd: Adds three new synthanol drinks
+ - tweak: Drinking synthanol is now a bad idea if you're organic
+ - tweak: A glass of holy water now looks like normal water
+ Fox McCloud:
+ - soundadd: Adds in drink fizzing sound
+ - tweak: Drink/bartender recipes use this new fizzing sound in addition to a few
+ other recipes
+ - soundadd: Adds in a fuse burning sound
+ - tweak: Bath salts, black powder, saltpetre, and charcoal use this sound now
+ - soundadd: Adds in a matchstrike+burning sound
+ - tweak: Lighting a match triggers this new sound
+ - soundadd: Adds in scissors cutting sound
+ - tweak: Cutting someone's hair uses this new sound
+ - soundadd: Adds in printer sounds
+ - tweak: printing off papers from various devices typically uses these sounds
+ - soundadd: Adds computer ambience sounds
+ - tweak: black box recorder and R&D core servers both play this sound at random
+ rare intervals
+ - tweak: Reduces the tech level (and requirement) for nanopaste
+ - tweak: Reduces the tech level (and requirement) for the plasma pistol
+ - tweak: Removes Nymph and drone tech levels
+ - tweak: Reduces tech levels on the flora board
+ - tweak: Adds tech level requirements to mech sleepers, mech syringe guns, mech
+ tasers, and mech machine guns
+ - tweak: Increases tech cost of the decloner
+ - tweak: Removes the pacman generators
+ - tweak: Removes emitter
+ - tweak: Removes flora machine (functionless anyway)
+ - tweak: Removes the pre-spawned nanopaste
+ - tweak: Removes space suits
+ - tweak: Removes excavation gear
+ - tweak: Replaces the soil with actual hydroponic trays (more aesthetic than anything)
+ - tweak: Removes most external asteroid access from the station
+ - tweak: Excavation storage is now generic science storage
+ - tweak: removed the plasma sheet
+ - bugfix: Fixes augments not showing up in R&D unless specifically searched for
+ - bugfix: Fixes some augments being unavailable in mech fabs
+ - bugfix: Fixes augments having no construction time
+ - bugfix: Fixes xenos not gaining plasma when breathing in plasma
+ - bugfix: Fixes plasma reagent not generating plasma for a person
+ - rscadd: Screaming has different sounds based on being male or female
+ - soundadd: Implements Goon's screaming sounds.
+ - rscadd: Screaming tone is now based on age of character instead of being random
+ - tweak: Ups the cooldown on screaming from 2 seconds to 5 seconds
+ - tweak: Removes chance for Whilhelm scream
+ - rscadd: Borgs can now scream
+ - rscadd: Monkey's now have a unique screaming sound
+ - rscadd: IPCs now scream like cyborgs
+ - rscadd: Updates slot machines to have higher jackpots and more payouts with more
+ interesting sounds
+ - rscadd: 'Adds X-Ray, Thermal, Anti-tun, and Reviver implants to the nuke ops uplink
+ (augments come with one auto-implanter) rcsadd: Adds in augment auto-implanter,
+ which inserts and implant without surgery'
+ - tweak: tweaks a large number of chems; behaviors are largely retained, but new
+ flavor messages, probabilities, etc may be present; overall, you can expect
+ chems to do the same thing
+ - tweak: 'Tabun re-replaced with Sarin rcsadd: New reagent: cholesterol: if overdosed
+ on, it can cause a heart attack--fatty foods, cheese, eggs, and some meats all
+ produce cholesterol in your body.'
+ - rscadd: Mixing Sarin, Meth, or Cyanide will poison in a very small area of the
+ reaction if you're not on internal OR not wearing a gas mask
+ - rscadd: Chemist warddrobe now has two gas masks
+ - tweak: Teslium will now impact synthetics AND organics
+ - bugfix: Fixes facehuggers hugging already infected people
+ - bugfix: Fixes facehuggers hugging people while dead
+ - bugfix: Fixes Embryo's developing twice as fast as they should
+ - bugfix: Fixes up some behaviors with xeno eggs
+ - tweak: Xeno acid can now melt through floors and the asteroid
+ - rscadd: Xeno's now play the gib sound when actually gibbed
+ - rscadd: Implements Changeling headcrabs/headspiders
+ - bugfix: Fixes xenos not throwing their organs when gibbed
+ - bugfix: Fixes swallowed mobs not being ejected when a human is gibbed
+ - rscadd: Adds in spider eggs reagent, an infectious reagent that requires surgery
+ to correct
+ - bugfix: Fixes EMPs causing eye implant users to be permanently blind
+ - tweak: Increases bag of holding's storage capacity
+ - rscadd: Removing a heart no longer kills the patient instantly, but induces a
+ heart attack
+ - bugfix: Demon hearts will not work
+ - bugfix: Should now actually be able to re-insert hearts
+ - rscadd: Reworks addictions to bettter differentiate them betweeen overdosing and
+ make them more realistic.
+ - tweak: 'changes which chems are addictive, currently, the follow reagents are
+ now addidctive: meth, crank, krokodil, bath salts, space drugs, perfluoradecalin,
+ omnizine, coffee, nicotine, fliptonium, ultra lube, surge, fake cheese, weird
+ cheese, ephedrine, diphenhydramine, teporone, and morphine'
+ - rscadd: sleepers help you recover from addiction faster
+ - rscadd: Can now make cable coils in autolathes
+ - bugfix: Fixes the slot machine announcements not displaying properly
+ Tastyfish:
+ - tweak: The super fart mutation now gives you a spell-like ability instead of augmenting
+ the emote.
+ - tweak: Vampire abilities are now in their own Vampire tab, as well being action
+ buttons at the top, like spells.
+ - bugfix: Cloning a vampire no longer makes them lose their abilities.
+ - bugfix: Vampires can no longer hypnotize chaplains.
+ - bugfix: Being a full vampire (500+ total blood) actually makes you immune to holy
+ water reliably now.
+ - rscadd: 'Some old away missions are back: Academy, Black Market Packers, Space
+ Hotel, Station Collision, and Wild West. Go out and round up some hostiles!'
+ - bugfix: Shuttle consoles now pair up to the engineering, mining, research, or
+ labor shuttle when built or used before pairing, as long as the shuttle is near
+ the console, or the shuttle is moved to be nearby.
+ monster860:
+ - rscadd: Mining station now has a podbay.
+ - rscadd: Ore scooping module for the spacepod.
+ - rscadd: 'Three mining lasers for spacepod: Basic, normal, and burst.'
+ - bugfix: Shooting weapons south or west of spacepod will actually hit adjacent
+ targets now, and won't shoot through walls anymore.
+ taukausanake:
+ - rscadd: Mice can now be picked up like diona
+2016-03-22:
+ Crazylemon64:
+ - bugfix: Repairs all sorts of eldritch occurences that happen when you put an organic
+ head on an IPC body, as well as some decapitation bugs
+ - bugfix: Makes heads keep hair on removal
+ - bugfix: Amputated limbs from a DNA-injected individual now will keep their appearance
+ of the DNA-injected person
+ - bugfix: Wounds will vanish on their own now
+ - rscadd: Admins now have an "incarnate" option on the player panel when viewing
+ ghosts for quick player instantiation
+ - bugfix: Fixes a runtime regarding failing a limb reconnection surgery
+ - bugfix: Copying a client's preferences now overrides the previous mob's DNA
+ - bugfix: A DNA injector is now more thorough, and affects the DNA of mobs' limbs
+ and organs
+ - bugfix: DNA-lacking species can no longer be DNA-injected
+ - bugfix: Brains are now labeled again
+ - rscadd: Splashing mitocholide on dead organs will make them live again.
+ - rscadd: The body scanner now detects necrotic limbs and organs.
+ - bugfix: pAIs and Drones are now affected by EMPs and explosions while held.
+ Fethas:
+ - rscadd: Adds a surgery for infection treatmne/autopsys that is simply cut open,
+ retract, cauterize
+ - bugfix: fixes a dumb error in internal bleeeding surgerys
+ - rscadd: Chaos types no longer random teleport, but will make the target hallucinate
+ everyone looks like the guardian.
+ FlattestGuitar:
+ - rscadd: Adds a snow, navy and desert military jacket.
+ Fox McCloud:
+ - tweak: Removes random 1% chance to heal fire damage
+ - tweak: Removes passive healing from resist heat mutation
+ - tweak: Regen mutation heals every cycle (albeit less, on average), but doesn't
+ cost hunger
+ - bugfix: Fixes not being able to speak over xeno common or hivemind when you receive
+ the Xeno hive node
+ - rscadd: Adds in the ability to transfer non-locked metal+glass only designs from
+ the protolathe to autolathe
+ - tweak: Changes Outpost Mass Driver to prevent accidental spacings
+ - tweak: Shadow people no longer dust on death, are rad immune+virus immune, and
+ can be cloned. Slip immunity removed
+ - tweak: Shadowlings no longer get hungry or fat and no longer dust on death
+ KasparoVy:
+ - rscadd: The ability to change your head, torso and groin as an IPC in the character
+ creator. Non-IPCs cannot access the parts.
+ - rscadd: Head, torso and groin sprites for all mechanical limb/bodypart brands
+ but Morpheus and the unbranded ones (since those already exist) from Polaris.
+ - rscadd: Faux-eye optics for non-Morpheus heads.
+ - rscadd: The ability to change optic (eye) colour if you've got a non-Morpheus
+ head.
+ - rscadd: The ability to choose human hair styles (wigs) and facial hair styles
+ (postiche) with non-Morpheus heads. Non-Morpheus heads cannot choose screens.
+ Conversely, Morpheus heads cannot choose wigs or facial hair.
+ - rscadd: Two hair styles from Polaris.
+ - rscadd: The ability for IPCs to wear undergarments (shirts and trousers).
+ - rscadd: Antennae (colourable) for IPCs.
+ - tweak: IPC monitor adjustment verb will now adjust optic colour if the head is
+ non-Morpheus.
+ - bugfix: Combat/SWAT boots can now be toecut and jacksandals can't.
+ - bugfix: ASAP fix to what would've broken the ability to configure prostheses in
+ character creation.
+ - bugfix: Adjusted masks no longer block CPR (including bandanas).
+ - bugfix: You can no longer run internals from adjusted breath masks (or airtight
+ adjustable masks in general).
+ Regens:
+ - tweak: Robotic hearts will now properly give the mob a heart attack instead of
+ just damaging it when EMP'd
+ - rscadd: Assisted organs will now also take damage from EMP's
+ - bugfix: Internal robotic and assisted organs will now actually take damage from
+ EMP's
+ Tastyfish:
+ - rscadd: Adds PDA chatrooms. Post memes! Talk to your fellow collaborators! Get
+ caught!
+ - tweak: You can now set the PDA messenger to automatically scroll down to new messages.
+ - rscadd: Pet collars now act as death alarms and can have ID's attached to them.
+ - tweak: All domestic animals can now wear collars.
+ - rscadd: You can now make video cameras at the autolathe.
+ TheDZD:
+ - bugfix: Fixes an instance of old code being so incredibly, unbelievably, makes-me-want-to-stab-myself-in-the-eye-edly
+ idiotic.
+ TravellingMerchant:
+ - imageadd: Kidan have new sprites!
+ tigercat2000:
+ - rscadd: Nukeops now have an assault pod, they can use it for 30 TC. Loud and mean.
+ - bugfix: Lighting overlays can no longer go below 0 lum_r/g/b
+ - bugfix: Shuttles will work with lighting better.
+ - bugfix: Wizards can no longer teleport to prohibited areas such as Central Command.
+2016-03-25:
+ Crazylemon64:
+ - bugfix: You now will actually have the correct `real_name` on your DNA.
+ - bugfix: No more roundstart runtimes regarding IPC hair.
+ - bugfix: Mitocholide rejuv will work more usefully now.
+ - bugfix: Limbs and cyborg modules will no longer appear in your screen.
+ - bugfix: Cyborg module icons are now persistent throughout logging in and out.
+ - bugfix: Various cyborg modules, like engineering, now use the proper icon.
+ FlattestGuitar:
+ - rscadd: Adds confetti grenades.
+ Fox McCloud:
+ - bugfix: Fixes Sleeping Carp combos not having an attack animation
+ - bugfix: Fixes several chems not properly healing brute/burn damage, consistently,
+ as intended
+ KasparoVy:
+ - bugfix: Unbranded heads and groins no longer invisible.
+ - bugfix: Zeng-hu left leg will now be in line with the body when facing south.
+2016-03-26:
+ Fox McCloud:
+ - rscadd: Adds in dental implant surgery. Implant pills into people's teeth.
+ - tweak: Major rebalance and Shadowling update (https://github.com/ParadiseSS13/Paradise/pull/3986
+ for details). In general, Shadowlings can no longer enthrall or engage in Shadowling
+ like behavior, pre-hatch. Post-hatch, shadowlings are much more powerful, with
+ a ride array of New abilities such as extending the shuttle or making thralls
+ into lesser shadowlings. Shadowling gameplay should not revolve almost entirely
+ around darkness, as opposed to pre-hatch shenanigans.
+ - rscadd: Robotics now has a "sterile" surgical area for performing augmentations
+ - rscadd: Adds the FixOVein and Bone Gel to the autolathe
+ - tweak: ensures all surgical tools have origin tech on them; lowers origin tech
+ on FixoVein
+ KasparoVy:
+ - rscadd: Slime People can now wear underwear.
+ - rscadd: Slime People can now wear undershirts.
+ TheDZD:
+ - tweak: NT has removed trace amounts of a highly-addictive substance from the "100%
+ real" cheese used in cheese-flavored snacks. As a result, incidence rates of
+ crewmembers becoming addicted to Cheesie Honkers should reduce to zero.
+ - tweak: After receiving complaints about crewmembers often being unable to physically
+ function without a back-mounted barrel of coffee, NT has replaced station all
+ sources of coffee on the station, including coffee beans themselves with a largely
+ decaffeinated version. It was funny the first time almost every crewmember aboard
+ the NSS Cyberiad was lugging around their own oil barrel filled with coffee,
+ it wasn't so funny, nor good for productivity the eighteenth.
+2016-04-02:
+ Crazylemon64:
+ - rscadd: Metal foam walls will now produce flooring on space tiles
+ - bugfix: Syringes will now draw water from slime people.
+ FalseIncarnate:
+ - tweak: Let's you know when your container is full when filling from sinks.
+ - tweak: Prevents splashing containers onto beakers and buckets that have a lid
+ on them.
+ - rscadd: Pill bottles can now be labeled with a simple pen.
+ - tweak: Beakers/buckets (and pill bottles) now accept 26 character labels from
+ pens.
+ Fethas:
+ - tweak: Various spells have had a tweak to stun/reveal/cast, some other number
+ stuff...
+ - rscadd: Nightvision
+ - tweak: harvest code is now in the abilites file.
+ - rscadd: New fluff objectives
+ - bugfix: Hell has recently remapped its blood transit system and you can now once
+ again crawl through blood. We are sorry for the-GIVE US YOUR SOUL!
+ FlattestGuitar:
+ - tweak: Alcoholic beverages now have proper levels of ethanol in them. Good luck
+ passing out after a beer.
+ Fox McCloud:
+ - rscadd: Adds in the Lusty Xenomorph Maid Mob; currently admin only.
+ - bugfix: Fixes xenomorph brains having the wrong sprite, no origin tech, and incorrect
+ name
+ - tweak: removes xenomorph egg from hotel
+ - tweak: upgrades are no longer needed to for the available toys in the prize vendor
+ - rscadd: Implements Advanced Camera Consoles. A type of camera console that function
+ like AI's vision style. Non-buildable/accessible.
+ - rscadd: Adds in Xenobiology Advance Cameras. A type of camera console that functions
+ like advanced cameras, but only works in Xenobiology areas; can move around
+ slimes and feed them with the console as well. Also non-buildable/accessible
+ (for now).
+ - rscadd: Adds in cerulean slime reaction that generates a single use blueprint.
+ On use it colors turfs a lavender color
+ - rscadd: Adds disease1 outbreak event
+ - rscadd: Adds appendecitis event
+ - rscadd: Roburgers now properly have nanomachines in them
+ - rscadd: Re-adds nanomachines
+ - tweak: Experimentor properly generates nanomachines instead of itching powder
+ - bugfix: Fixes big roburgers having a healing reagent in them
+ - rscadd: Adds nanomachines to poison traitor bottles
+ - rscadd: Tajarans can now eat mice, chicks, parrots, and tribbles
+ - rscadd: Vulpkanin and Unathi can now eat mice, chicks, lizards, chickens, crabs,
+ parrtos, and tribbles
+ - bugfix: fixes spawned changeling headcrab behavior
+ KasparoVy:
+ - bugfix: Incisions made at the beginning of embedded object removal surgery can
+ now be closed in the same procedure.
+ ProperPants:
+ - rscadd: Maint drones have magboots.
+ - rscdel: Removed plastic from maint drones. Literally useless for station maintenance.
+ - tweak: Increased starting amounts of some materials for maint drones and engi
+ borgs.
+ - experiment: Reduced the number of lines taken by Engineering cyborgs calling on
+ materials stacks.
+ - rscadd: Operating tables can be deconstructed with a wrench.
+ - spellcheck: Fixed and shortened description of metal sheets.
+ Tastyfish:
+ - rscadd: Bots can now be controlled by players, by opening them up and inserting
+ a pAI. *beep
+ - bugfix: MULEbots can now access the engineering destination.
+ - bugfix: All MULEbot destinations should now have the correct load/unload direction,
+ meaning the crates won't be dumped inside the flaps.
+ - rscadd: Diagnostic HUD's now give health and status information about bots.
+ - bugfix: MULEbot rampage blood tracks are now rendered correctly and handle UE
+ traces as appropriate.
+ - experiment: Bots should (hopefully) lag the game less now.
+ - tweak: Beepsky contains 30% more potato.
+ - tweak: Action progress bars are now smooth.
+ - tweak: Clicking a filled inventory slot's square with an open hand now clicks
+ the item in the slot.
+ - rscadd: Status displays now display the time when in Shuttle ETA mode and no shuttle
+ activity is happening.
+ - tweak: Shuttle ETA countdowns on status displays are now amber.
+ - rscadd: pAI's can now use the PDA chatrooms.
+ - rscadd: Adds treadmills to brig cells, to give the prisoners something productive
+ to do.
+ TheDZD:
+ - rscdel: A lot of the guns and armor in the station collision, space hotel, academy,
+ and wild west away missions have been removed/replaced.
+ - rscdel: Removes that fucking facehugger from station collision.
+ tigercat2000:
+ - rscdel: Virus2 has been removed.
+ - rscadd: Virus1 is back. Viva la revolution.
+ - rscadd: You can now have up to 20 characters.
+2016-04-07:
+ Crazylemon64:
+ - bugfix: Removes an offset from the advanced virus stealth calculation, causing
+ viruses to be more stealthy than the sum of their symptoms.
+ - bugfix: Mulebots will now send announcements to relevant requests consoles on
+ delivery again.
+ FalseIncarnate:
+ - rscadd: Adds logic gates, for doing illogical things in a logical manner.
+ - rscadd: Adds buildable light switches, for all your light toggling needs.
+ - bugfix: Fixes a resource duplication bug with mass driver buttons.
+ Fethas:
+ - tweak: maybe makes them last longer...maybe..and fixes the event end message
+ Fox McCloud:
+ - rscadd: Maps in the slime management console to Xenobio
+ - tweak: Reduces Xenobio monkey box count from 4 to 2
+ - bugfix: Fixes weakeyes having a negligible impact
+ - rscadd: Can spawn friendly animals with a new gold core reaction by injection
+ with water
+ - tweak: Hostile animal spawn increased from 3 to 5 for hostile gold cores
+ - tweak: Swarmers, revenants, and morphs no longer gold core spawnable
+ - bugfix: Fixes invisible animal spawns from gold core/life reactions
+ - rscadd: Adds tape to the ArtVend
+ - tweak: Can no longer use sentience potions on bots
+ - rscadd: Added in Plasma Dust reagent, acquired by grinding plasma sheets; it's
+ more toxic than regular plasma and generates plasma gas when spilled onto turfs.
+ - tweak: Slimecore reactions now require plasma dust as opposed to dispenser plasma
+ - rscadd: Added in new Rainbow slime; inject with plasma dust to get a random colored
+ slime. Acquire by having 100 mutation chance on a slime when it splits.
+ - rscadd: Monkey Recycler can produce different types of monkey cubes; change the
+ cube type by using a multitool on the recycler
+ - tweak: Epinephrine/plasma reagents changing mutation rate has been removed
+ - tweak: Mutation chance is inherited from slime generation to slime generation
+ as opposed to being purely random.
+ - tweak: 'New reactions added for red and blue extracts: red generates mutator,
+ which increases mutation chance, and blue generates stabilizer, which decreases
+ mutation chance.'
+ - tweak: Slime glycerol reaction removed
+ - tweak: Slime cells are now high capacity cells (more power than before)
+ - tweak: extract enhancer increases the slime core usage by 1 as oppose to setting
+ it to three
+ - tweak: slime enhancer increases slime cores by 1 as opposed to setting the core
+ amount to 3
+ - tweak: Chill reaction lowers body temperature slightly more so it doesn't just
+ wear off instantly
+ - tweak: Reduces Xenobio plasma sheets from 8 to 3 and removes that pesky boombox
+ - bugfix: Processors no longer produce 1 more slime core than intended
+ - bugfix: Less blank/spriteless/empty foods from the silver core reaction
+ - tweak: Virology mix reactions now use plasma dust as opposed to plasma
+ - tweak: Statues can no longer move/attack people unless they're in total darkness
+ or all mobs viewing them are blinded
+ - tweak: statues are invincible to anything other than full out gibbing.
+ - tweak: Statues flicker lights spell range increased
+ - tweak: Blind spell no longer impacts silicons
+ - bugfix: Fixes statues being able to attack/move whenever they feel like it, regardless
+ of client statues
+ - bugfix: Fixes blind spell impacting the statue
+ Tastyfish:
+ - tweak: Beepsky is no longer a pokemon.
+ - tweak: pAI-controlled Bots now reliably speak human-understandable languages over
+ the radio.
+ - rscadd: More floor blood for the blood gods. (Or rather, as much as there was
+ supposed to be.)
+ tigercat2000:
+ - rscadd: Items in your off hand will now count towards access.
+2016-04-12:
+ FalseIncarnate:
+ - tweak: Adjusting the setting of a vendor circuit board is no longer random, but
+ instead provides a select-able list.
+ - tweak: Vendor Circuit Board design moved from the Circuit Imprinter to the Autolathe,
+ acid requirement replaced by metal.
+ - bugfix: Burnt matches can no longer light cigarettes, pipes, or joints.
+ Fethas:
+ - rscdel: Nukes the cargo train code rscadd:Adds simple vehicle framework and converts
+ secway/janicart/snowmobiles/bikes/cars/ambulance to it rscadd:Adds space speedbike,
+ red and blue versions, yes you WILL need a spacesuit rscadd:Maps janicart and
+ secway onto metastation (but not ambulance no pareamedic garage, no i am not
+ mapping that)
+ - bugfix: You should now be able to operate on IPC eyes, SHOULD bugfix:hopefully
+ surgery on diona works right
+ Fox McCloud:
+ - rscadd: Adds in TraitorVamp; game mode that's essentially like TraitorChan, but
+ with a Vampire instead of a Changeling
+ - tweak: Vampires cannot use holoparasites
+ - tweak: Malf AI will automatically lose if it exits the station z-level
+ Tastyfish:
+ - tweak: All cats can kill mice now.
+ - tweak: E-N can't suffocate.
+ - tweak: Startup time is now shorter.
+ - rscdel: Removed the Station Collision away mission from rotation, due to multiple
+ conceptual and technical issues.
+2016-04-14:
+ Aurorablade:
+ - rscdel: Removes the !!FUN!! of having headslugs gold core spawnable.
+ Fox McCloud:
+ - soundadd: Added in sounds (instead of a chat-based message) for when airlocks
+ are bolted/unbolted
+ - soundadd: Added in sound for when airlocks deny access
+ - tweak: cutting/pulsing wires will play a sound
+ - tweak: ups nuke ops game mode population requirement from 20 to 30
+ - rscadd: Adds in mining drone upgrade modules to increase their health, combat
+ capability, or reduce their ranged cooldowns
+ - rscadd: Adds in mining drone "AI upgrade" a sentience potion that only works on
+ mining bots
+ - tweak: Mining bots should be less likely to shoot you when attacking hostile mobs
+ - tweak: Killer tomatoes actually live up to their name now and are hostile mobs
+ - tweak: Killer tomatoes are an actual fruit now; activate it in your hands to make
+ them into a mob
+ - tweak: Killer tomatoes are directly mutated from regular tomatoes instead of blood
+ tomatoes
+ - tweak: Increased the yield of regular tomatoes by 1
+ - tweak: Tweak some stats on the killer tomato seeds
+ - bugfix: Fixes the blind player preference not doing anything
+ - rscadd: Adds portaseeder to R&D
+ - tweak: Scythes will conduct electricity now
+ - tweak: Mini hoes play a slice sound instead of bludgeon sound
+ - tweak: Plant analyzer properly has a description and origin tech
+ - tweak: Can have hulk+dwarf mutations together
+ - tweak: Can have heat+cold resist together
+ - tweak: Can only remotely view people who also have remote view
+ - bugfix: Fixes cold mutation not having an overlay
+ - bugfix: Hallucinations will no longer tick down twice as fast as they should nor
+ will they spawn twice as many hallucinations as they should
+ - bugfix: Incendiary mitochondria no longer asks who you want to cast it on (it
+ always is meant to be cast on yourself)
+ - bugfix: Fixes permanent nearsightedness even when wearing prescription glasses
+ KasparoVy:
+ - tweak: 'Head accessories now behave like facial hair: They will no longer be hidden
+ by clothing items that BLOCKHEADHAIR (have the BLOCKHEADHAIR flag).'
+ - bugfix: Wearing a piece of clothing that blocks head hair will no longer make
+ head accessories (facial markings/horns/antennae) invisible until an icon update
+ is triggered while the headwear is off.
+ Meisaka:
+ - bugfix: law manager no longer freaks out with Malf law
+ Tastyfish:
+ - tweak: The /vg/ library computer interface has been ported, giving a much better
+ use experience.
+ - rscadd: Books can now be flagged for inappropriate content.
+ TheDZD:
+ - rscdel: Removes shitty Caelcode bees.
+ - rscadd: Hydroponics can now manage bee colonies, bees produce honeycombs that
+ can be ground to obtain honey, a decent nutriment+healing chemical
+ - rscadd: Hydroponics can inject a queen bee with a syringe of a reagent to alter
+ her DNA to match that reagent, meaning all honeycombs produced will contain
+ that reagent in small amounts
+ - rscadd: Bees with reagents will attack with that reagent. It takes 5u of a reagent
+ to give a bee that reagent.
+ - rscadd: Added the ability to make Apiaries and Honey frames with wood
+ - rscadd: Added the ability to make Royal Bee Jelly from 10 Mutagen and 40 Honey
+ - rscadd: Added the ability to make more Queen Bees from Royal Bee Jelly by using
+ it on an existing Queen, to split her into two Queens
+ - rscdel: Removes some snowflakey mob behavior from bears, snakes and panthers.
+ - rscadd: Hudson is feeling punny.
+ - experiment: Hostile mob AI should now be a bit more cost-efficient.
+ monster860:
+ - rscadd: Adds area editing, link mode, and fill mode to the buildmode tool
+2016-04-20:
+ Crazylemon64:
+ - rscadd: Bureaucracy crates now contain granted and denied stamps.
+ FalseIncarnate:
+ - bugfix: Anomalies will now be properly neutralized by signals that match their
+ code and frequency, instead of using the default frequency and their code.
+ FlattestGuitar:
+ - rscadd: Adds shot glasses.
+ Fox McCloud:
+ - tweak: Removes the ability to put a pAI into securitrons and ED-209's
+ - imageadd: Drinking glasses now have an in-hand sprite
+ - tweak: DNA injectors no longer have a delay when used on yourself
+ - tweak: DNA injectors no longer delete on use, but become used, much like auto-injectors
+ - bugfix: Fixes a bug where you can exploit the genetic scanner to get multiple
+ injectors
+ - bugfix: Fixes not being able to cancel creating an DNA injector
+ - tweak: remove spacesuits causing injections to the head to take longer
+ - bugfix: FIxes heat resist mutation not making you immune to high pressure, fire,
+ or high temperatures
+ - tweak: removes some not-well-known damage resists from cold/heat mutations
+ - tweak: Re-maps botany a bit to make it more bee and botanist friendly
+ - rscadd: Adds in Abductors Game Mode
+ MarsM0nd:
+ - tweak: Embeded object removal is now done with hemostat again
+ - rscadd: Borgs are able to do embeded object surgery
+ Tastyfish:
+ - tweak: Makes the server startup substantially faster.
+ monster860:
+ - bugfix: Crowbarring open a spesspod doors is no longer broken
+ tigercat2000:
+ - rscadd: -tg- thrown alerts have been added. This means you get an alert when buckled
+ or handcuffed or many many other things happen to you. It then gives you a tool
+ tip when you hover over it, and it may or may not do something when you click
+ it. Have fun!
diff --git a/html/changelogs/AutoChangeLog-pr-4157.yml b/html/changelogs/AutoChangeLog-pr-4157.yml
deleted file mode 100644
index 666fbd15625..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4157.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: Tastyfish
-delete-after: True
-changes:
- - tweak: "The /vg/ library computer interface has been ported, giving a much better use experience."
- - rscadd: "Books can now be flagged for inappropriate content."
diff --git a/html/changelogs/AutoChangeLog-pr-4253.yml b/html/changelogs/AutoChangeLog-pr-4253.yml
new file mode 100644
index 00000000000..864fbdadc67
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4253.yml
@@ -0,0 +1,5 @@
+author: Meisaka
+delete-after: True
+changes:
+ - bugfix: "The light on/off function for drones works again, toggling between lowest setting and off."
+ - bugfix: "Guardians can toggle their lights off and on again."
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 7d87c3d7557..695d701dba3 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/goonstation/mob/inhands/items_lefthand.dmi b/icons/goonstation/mob/inhands/items_lefthand.dmi
new file mode 100644
index 00000000000..5702ba238c1
Binary files /dev/null and b/icons/goonstation/mob/inhands/items_lefthand.dmi differ
diff --git a/icons/goonstation/mob/inhands/items_righthand.dmi b/icons/goonstation/mob/inhands/items_righthand.dmi
new file mode 100644
index 00000000000..9adcb9a22e8
Binary files /dev/null and b/icons/goonstation/mob/inhands/items_righthand.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index a67d328271e..6703c61b1b7 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index 4f7829c3aac..eeb5ecbbee3 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/icons/mob/human_races/r_abductor.dmi b/icons/mob/human_races/r_abductor.dmi
new file mode 100644
index 00000000000..f44da8b9837
Binary files /dev/null and b/icons/mob/human_races/r_abductor.dmi differ
diff --git a/icons/mob/inhands/guns_lefthand.dmi b/icons/mob/inhands/guns_lefthand.dmi
index e7571df2d11..08e806177e2 100644
Binary files a/icons/mob/inhands/guns_lefthand.dmi and b/icons/mob/inhands/guns_lefthand.dmi differ
diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi
index cdd8499b590..eb41182b61c 100644
Binary files a/icons/mob/inhands/guns_righthand.dmi and b/icons/mob/inhands/guns_righthand.dmi differ
diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi
index 90ea770294e..ba0e34aca9b 100644
Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ
diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi
index 051b6b6b874..248525081c6 100644
Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ
diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi
new file mode 100644
index 00000000000..7dd4c6561e4
Binary files /dev/null and b/icons/mob/screen_alert.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 844d1b39b69..61a53ab5541 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/abductor.dmi b/icons/obj/abductor.dmi
index 0896e9a500a..9a171b97645 100644
Binary files a/icons/obj/abductor.dmi and b/icons/obj/abductor.dmi differ
diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi
index 1bd8373670c..6ab22cb793e 100644
Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ
diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi
index 0f36e755b78..a6c5a43008f 100644
Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index fafdcb56031..3c2ea5a0990 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index d3b1cfa9977..36ba65a32e3 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 00bd10b184a..11d212a0e55 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 7229e0089df..db105c191d2 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi
index 7f14e7f2fe6..94e2f2e7d27 100644
Binary files a/icons/obj/reagentfillings.dmi and b/icons/obj/reagentfillings.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index 34c75f5ac8b..97ca0e00693 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi
index 5f1b92c1c2b..85788316c13 100644
Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index 98e1f035e0a..98e01f18cfa 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ
diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi
index 0028e2c0359..cc0ca3a0eab 100644
Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ
diff --git a/icons/turf/walls/abductor_wall.dmi b/icons/turf/walls/abductor_wall.dmi
new file mode 100644
index 00000000000..5d0f47046b3
Binary files /dev/null and b/icons/turf/walls/abductor_wall.dmi differ
diff --git a/interface/skin.dmf b/interface/skin.dmf
index c3d9f693726..d3ba4e0efc5 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -1,351 +1,351 @@
macro "AZERTYoff"
- elem
+ elem
name = "TAB"
command = ".Toggle-hotkey-mode"
is-disabled = false
- elem
+ elem
name = "CENTER+REP"
command = ".center"
is-disabled = false
- elem
+ elem
name = "NORTHEAST"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "SOUTHEAST"
command = ".southeast"
is-disabled = false
- elem
+ elem
name = "SOUTHWEST"
command = ".southwest"
is-disabled = false
- elem
+ elem
name = "NORTHWEST"
command = ".northwest"
is-disabled = false
- elem
+ elem
name = "CTRL+WEST"
command = "westface"
is-disabled = false
- elem
+ elem
name = "WEST+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "CTRL+NORTH"
command = "northface"
is-disabled = false
- elem
+ elem
name = "NORTH+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "CTRL+EAST"
command = "eastface"
is-disabled = false
- elem
+ elem
name = "EAST+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "CTRL+SOUTH"
command = "southface"
is-disabled = false
- elem
+ elem
name = "SOUTH+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "INSERT"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "DELETE"
command = "delete-key-pressed"
is-disabled = false
- elem
+ elem
name = "CTRL+1"
command = "a-intent help"
is-disabled = false
- elem
+ elem
name = "CTRL+2"
command = "a-intent disarm"
is-disabled = false
- elem
+ elem
name = "CTRL+3"
command = "a-intent grab"
is-disabled = false
- elem
+ elem
name = "CTRL+4"
command = "a-intent harm"
is-disabled = false
- elem
+ elem
name = "CTRL+A"
command = ".northwest"
is-disabled = false
- elem
+ elem
name = "CTRL+D+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "CTRL+B"
command = "resist"
is-disabled = false
- elem
+ elem
name = "CTRL+E"
command = "quick-equip"
is-disabled = false
- elem
+ elem
name = "CTRL+F"
command = "a-intent left"
is-disabled = false
- elem
+ elem
name = "CTRL+G"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "CTRL+Q+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "CTRL+R"
command = ".southwest"
is-disabled = false
- elem
+ elem
name = "CTRL+S+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "CTRL+W"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "CTRL+X"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "CTRL+Y"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "CTRL+Z+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "F1"
command = "adminhelp"
is-disabled = false
- elem
+ elem
name = "CTRL+SHIFT+F1+REP"
command = ".options"
is-disabled = false
- elem
+ elem
name = "F2"
command = "ooc"
is-disabled = false
- elem
+ elem
name = "F2+REP"
command = ".screenshot auto"
is-disabled = false
- elem
+ elem
name = "SHIFT+F2+REP"
command = ".screenshot"
is-disabled = false
- elem
+ elem
name = "F3"
command = ".say"
is-disabled = false
- elem
+ elem
name = "F4"
command = ".me"
is-disabled = false
- elem
+ elem
name = "F5"
command = "asay"
is-disabled = false
- elem
+ elem
name = "F6"
command = "Aghost"
is-disabled = false
- elem
+ elem
name = "F7"
command = "player-panel-new"
is-disabled = false
- elem
+ elem
name = "F8"
command = "admin-pm-key"
is-disabled = false
- elem
+ elem
name = "F9"
command = "Invisimin"
is-disabled = false
- elem
+ elem
name = "F12"
command = "F12"
is-disabled = false
macro "AZERTYon"
- elem
+ elem
name = "TAB"
command = ".Toggle-hotkey-mode"
is-disabled = false
- elem
+ elem
name = "CENTER+REP"
command = ".center"
is-disabled = false
- elem
+ elem
name = "NORTHEAST"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "SOUTHEAST"
command = ".southeast"
is-disabled = false
- elem
+ elem
name = "SOUTHWEST"
command = ".southwest"
is-disabled = false
- elem
+ elem
name = "NORTHWEST"
command = ".northwest"
is-disabled = false
- elem
+ elem
name = "CTRL+WEST"
command = "westface"
is-disabled = false
- elem
+ elem
name = "WEST+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "CTRL+NORTH"
command = "northface"
is-disabled = false
- elem
+ elem
name = "NORTH+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "CTRL+EAST"
command = "eastface"
is-disabled = false
- elem
+ elem
name = "EAST+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "CTRL+SOUTH"
command = "southface"
is-disabled = false
- elem
+ elem
name = "SOUTH+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "INSERT"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "DELETE"
command = "delete-key-pressed"
is-disabled = false
- elem
+ elem
name = "1"
command = "a-intent help"
is-disabled = false
- elem
+ elem
name = "CTRL+1"
command = "a-intent help"
is-disabled = false
- elem
+ elem
name = "2"
command = "a-intent disarm"
is-disabled = false
- elem
+ elem
name = "CTRL+2"
command = "a-intent disarm"
is-disabled = false
- elem
+ elem
name = "3"
command = "a-intent grab"
is-disabled = false
- elem
+ elem
name = "CTRL+3"
command = "a-intent grab"
is-disabled = false
- elem
+ elem
name = "4"
command = "a-intent harm"
is-disabled = false
- elem
+ elem
name = "CTRL+4"
command = "a-intent harm"
is-disabled = false
- elem
+ elem
name = "A"
command = ".northwest"
is-disabled = false
- elem
+ elem
name = "CTRL+A"
command = ".northwest"
is-disabled = false
- elem
+ elem
name = "D+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "CTRL+D+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "CTRL+B"
command = "resist"
is-disabled = false
- elem
+ elem
name = "E"
command = "quick-equip"
is-disabled = false
- elem
+ elem
name = "CTRL+E"
command = "quick-equip"
is-disabled = false
- elem
+ elem
name = "F"
command = "a-intent left"
is-disabled = false
- elem
+ elem
name = "CTRL+F"
command = "a-intent left"
is-disabled = false
- elem
+ elem
name = "G"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "CTRL+G"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "H"
command = "holster"
is-disabled = false
- elem
+ elem
name = "CTRL+H"
command = "holster"
is-disabled = false
- elem
+ elem
name = "Q+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "CTRL+Q+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "R"
command = ".southwest"
is-disabled = false
- elem
+ elem
name = "CTRL+R"
command = ".southwest"
is-disabled = false
@@ -353,43 +353,43 @@ macro "AZERTYon"
name = "S+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "CTRL+S+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "T"
command = ".say"
is-disabled = false
- elem
+ elem
name = "O"
command = "ooc"
is-disabled = false
- elem
+ elem
name = "M"
command = ".me"
is-disabled = false
- elem
+ elem
name = "W"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "CTRL+W"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "X"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "CTRL+X"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "Y"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "CTRL+Y"
command = "Activate-Held-Object"
is-disabled = false
@@ -397,217 +397,217 @@ macro "AZERTYon"
name = "Z+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "CTRL+Z+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "F1"
command = "adminhelp"
is-disabled = false
- elem
+ elem
name = "CTRL+SHIFT+F1+REP"
command = ".options"
is-disabled = false
- elem
+ elem
name = "F2"
command = "ooc"
is-disabled = false
- elem
+ elem
name = "F2+REP"
command = ".screenshot auto"
is-disabled = false
- elem
+ elem
name = "SHIFT+F2+REP"
command = ".screenshot"
is-disabled = false
- elem
+ elem
name = "F3"
command = ".say"
is-disabled = false
- elem
+ elem
name = "F4"
command = ".me"
is-disabled = false
- elem
+ elem
name = "F5"
command = "asay"
is-disabled = false
- elem
+ elem
name = "F6"
command = "Aghost"
is-disabled = false
- elem
+ elem
name = "F7"
command = "player-panel-new"
is-disabled = false
- elem
+ elem
name = "F8"
command = "admin-pm-key"
is-disabled = false
- elem
+ elem
name = "F9"
command = "Invisimin"
is-disabled = false
- elem
+ elem
name = "F12"
command = "F12"
is-disabled = false
macro "borghotkeymode"
- elem
+ elem
name = "TAB"
command = ".winset \"mainwindow.macro=borgmacro hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5\""
is-disabled = false
- elem
+ elem
name = "CENTER+REP"
command = ".center"
is-disabled = false
- elem
+ elem
name = "NORTHEAST"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "SOUTHEAST"
command = ".southeast"
is-disabled = false
- elem
+ elem
name = "NORTHWEST"
command = "unequip-module"
is-disabled = false
- elem
+ elem
name = "CTRL+WEST"
command = "westface"
is-disabled = false
- elem
+ elem
name = "WEST+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "CTRL+NORTH"
command = "northface"
is-disabled = false
- elem
+ elem
name = "NORTH+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "CTRL+EAST"
command = "eastface"
is-disabled = false
- elem
+ elem
name = "EAST+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "CTRL+SOUTH"
command = "southface"
is-disabled = false
- elem
+ elem
name = "SOUTH+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "INSERT"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "DELETE"
command = "delete-key-pressed"
is-disabled = false
- elem
+ elem
name = "1"
command = "toggle-module 1"
is-disabled = false
- elem
+ elem
name = "CTRL+1"
command = "toggle-module 1"
is-disabled = false
- elem
+ elem
name = "2"
command = "toggle-module 2"
is-disabled = false
- elem
+ elem
name = "CTRL+2"
command = "toggle-module 2"
is-disabled = false
- elem
+ elem
name = "3"
command = "toggle-module 3"
is-disabled = false
- elem
+ elem
name = "CTRL+3"
command = "toggle-module 3"
is-disabled = false
- elem
+ elem
name = "4"
command = "a-intent left"
is-disabled = false
- elem
+ elem
name = "CTRL+4"
command = "a-intent left"
is-disabled = false
- elem
+ elem
name = "A+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "CTRL+A+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "B"
command = "resist"
is-disabled = false
- elem
+ elem
name = "CTRL+B"
command = "resist"
is-disabled = false
- elem
+ elem
name = "T"
command = ".say"
is-disabled = false
- elem
+ elem
name = "O"
command = "ooc"
is-disabled = false
- elem
+ elem
name = "M"
command = ".me"
is-disabled = false
- elem
+ elem
name = "CTRL+O"
command = "ooc"
is-disabled = false
- elem
+ elem
name = "D+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "CTRL+D+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "F"
command = "a-intent left"
is-disabled = false
- elem
+ elem
name = "CTRL+F"
command = "a-intent left"
is-disabled = false
- elem
+ elem
name = "G"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "CTRL+G"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "Q"
command = "unequip-module"
is-disabled = false
- elem
+ elem
name = "CTRL+Q"
command = "unequip-module"
is-disabled = false
@@ -615,7 +615,7 @@ macro "borghotkeymode"
name = "S+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "CTRL+S+REP"
command = ".south"
is-disabled = false
@@ -623,451 +623,451 @@ macro "borghotkeymode"
name = "W+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "CTRL+W+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "X"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "CTRL+X"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "Y"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "CTRL+Y"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "Z"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "CTRL+Z"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "F1"
command = "adminhelp"
is-disabled = false
- elem
+ elem
name = "CTRL+SHIFT+F1+REP"
command = ".options"
is-disabled = false
- elem
+ elem
name = "F2"
command = "ooc"
is-disabled = false
- elem
+ elem
name = "F2+REP"
command = ".screenshot auto"
is-disabled = false
- elem
+ elem
name = "SHIFT+F2+REP"
command = ".screenshot"
is-disabled = false
- elem
+ elem
name = "F3"
command = ".say"
is-disabled = false
- elem
+ elem
name = "F4"
command = ".me"
is-disabled = false
- elem
+ elem
name = "F5"
command = "asay"
is-disabled = false
- elem
+ elem
name = "F6"
command = "Aghost"
is-disabled = false
- elem
+ elem
name = "F7"
command = "player-panel-new"
is-disabled = false
- elem
+ elem
name = "F8"
command = "admin-pm-key"
is-disabled = false
- elem
+ elem
name = "F9"
command = "Invisimin"
is-disabled = false
- elem
+ elem
name = "F12"
command = "F12"
- is-disabled = false
-
+ is-disabled = false
+
macro "macro"
- elem
+ elem
name = "TAB"
command = ".Toggle-hotkey-mode"
is-disabled = false
- elem
+ elem
name = "CENTER+REP"
command = ".center"
is-disabled = false
- elem
+ elem
name = "NORTHEAST"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "SOUTHEAST"
command = ".southeast"
is-disabled = false
- elem
+ elem
name = "SOUTHWEST"
command = ".southwest"
is-disabled = false
- elem
+ elem
name = "NORTHWEST"
command = ".northwest"
is-disabled = false
- elem
+ elem
name = "CTRL+WEST"
command = "westface"
is-disabled = false
- elem
+ elem
name = "WEST+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "CTRL+NORTH"
command = "northface"
is-disabled = false
- elem
+ elem
name = "NORTH+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "CTRL+EAST"
command = "eastface"
is-disabled = false
- elem
+ elem
name = "EAST+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "CTRL+SOUTH"
command = "southface"
is-disabled = false
- elem
+ elem
name = "SOUTH+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "INSERT"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "DELETE"
command = "delete-key-pressed"
is-disabled = false
- elem
+ elem
name = "CTRL+1"
command = "a-intent help"
is-disabled = false
- elem
+ elem
name = "CTRL+2"
command = "a-intent disarm"
is-disabled = false
- elem
+ elem
name = "CTRL+3"
command = "a-intent grab"
is-disabled = false
- elem
+ elem
name = "CTRL+4"
command = "a-intent harm"
is-disabled = false
- elem
+ elem
name = "CTRL+A+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "CTRL+D+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "CTRL+B"
command = "resist"
is-disabled = false
- elem
+ elem
name = "CTRL+E"
command = "quick-equip"
is-disabled = false
- elem
+ elem
name = "CTRL+F"
command = "a-intent left"
is-disabled = false
- elem
+ elem
name = "CTRL+G"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "CTRL+Q"
command = ".northwest"
is-disabled = false
- elem
+ elem
name = "CTRL+R"
command = ".southwest"
is-disabled = false
- elem
+ elem
name = "CTRL+S+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "CTRL+W+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "CTRL+X"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "CTRL+Y"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "CTRL+Z"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "F1"
command = "adminhelp"
is-disabled = false
- elem
+ elem
name = "CTRL+SHIFT+F1+REP"
command = ".options"
is-disabled = false
- elem
+ elem
name = "F2"
command = "ooc"
is-disabled = false
- elem
+ elem
name = "F2+REP"
command = ".screenshot auto"
is-disabled = false
- elem
+ elem
name = "SHIFT+F2+REP"
command = ".screenshot"
is-disabled = false
- elem
+ elem
name = "F3"
command = ".say"
is-disabled = false
- elem
+ elem
name = "F4"
command = ".me"
is-disabled = false
- elem
+ elem
name = "F5"
command = "asay"
is-disabled = false
- elem
+ elem
name = "F6"
command = "Aghost"
is-disabled = false
- elem
+ elem
name = "F7"
command = "player-panel-new"
is-disabled = false
- elem
+ elem
name = "F8"
command = "admin-pm-key"
is-disabled = false
- elem
+ elem
name = "F9"
command = "Invisimin"
is-disabled = false
- elem
+ elem
name = "F12"
command = "F12"
is-disabled = false
macro "hotkeymode"
- elem
+ elem
name = "TAB"
command = ".Toggle-hotkey-mode"
is-disabled = false
- elem
+ elem
name = "CENTER+REP"
command = ".center"
is-disabled = false
- elem
+ elem
name = "NORTHEAST"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "SOUTHEAST"
command = ".southeast"
is-disabled = false
- elem
+ elem
name = "SOUTHWEST"
command = ".southwest"
is-disabled = false
- elem
+ elem
name = "NORTHWEST"
command = ".northwest"
is-disabled = false
- elem
+ elem
name = "CTRL+WEST"
command = "westface"
is-disabled = false
- elem
+ elem
name = "WEST+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "CTRL+NORTH"
command = "northface"
is-disabled = false
- elem
+ elem
name = "NORTH+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "CTRL+EAST"
command = "eastface"
is-disabled = false
- elem
+ elem
name = "EAST+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "CTRL+SOUTH"
command = "southface"
is-disabled = false
- elem
+ elem
name = "SOUTH+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "INSERT"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "DELETE"
command = "delete-key-pressed"
is-disabled = false
- elem
+ elem
name = "1"
command = "a-intent help"
is-disabled = false
- elem
+ elem
name = "CTRL+1"
command = "a-intent help"
is-disabled = false
- elem
+ elem
name = "2"
command = "a-intent disarm"
is-disabled = false
- elem
+ elem
name = "CTRL+2"
command = "a-intent disarm"
is-disabled = false
- elem
+ elem
name = "3"
command = "a-intent grab"
is-disabled = false
- elem
+ elem
name = "CTRL+3"
command = "a-intent grab"
is-disabled = false
- elem
+ elem
name = "4"
command = "a-intent harm"
is-disabled = false
- elem
+ elem
name = "CTRL+4"
command = "a-intent harm"
is-disabled = false
- elem
+ elem
name = "T"
command = ".say"
is-disabled = false
- elem
+ elem
name = "O"
command = "ooc"
is-disabled = false
- elem
+ elem
name = "M"
command = ".me"
is-disabled = false
- elem
+ elem
name = "A+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "CTRL+A+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "D+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "CTRL+D+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "B"
command = "resist"
is-disabled = false
- elem
+ elem
name = "CTRL+B"
command = "resist"
is-disabled = false
- elem
+ elem
name = "E"
command = "quick-equip"
is-disabled = false
- elem
+ elem
name = "CTRL+E"
command = "quick-equip"
is-disabled = false
- elem
+ elem
name = "F"
command = "a-intent left"
is-disabled = false
- elem
+ elem
name = "CTRL+F"
command = "a-intent left"
is-disabled = false
- elem
+ elem
name = "G"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "CTRL+G"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "H"
command = "holster"
is-disabled = false
- elem
+ elem
name = "CTRL+H"
command = "holster"
is-disabled = false
- elem
+ elem
name = "Q"
command = ".northwest"
is-disabled = false
- elem
+ elem
name = "CTRL+Q"
command = ".northwest"
is-disabled = false
- elem
+ elem
name = "R"
command = ".southwest"
is-disabled = false
- elem
+ elem
name = "CTRL+R"
command = ".southwest"
is-disabled = false
@@ -1075,11 +1075,11 @@ macro "hotkeymode"
name = "S+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "CTRL+S+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "T"
command = ".say"
is-disabled = false
@@ -1087,267 +1087,267 @@ macro "hotkeymode"
name = "W+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "CTRL+W+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "X"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "CTRL+X"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "Y"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "CTRL+Y"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "Z"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "CTRL+Z"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "F1"
command = "adminhelp"
is-disabled = false
- elem
+ elem
name = "CTRL+SHIFT+F1+REP"
command = ".options"
is-disabled = false
- elem
+ elem
name = "F2"
command = "ooc"
is-disabled = false
- elem
+ elem
name = "F2+REP"
command = ".screenshot auto"
is-disabled = false
- elem
+ elem
name = "SHIFT+F2+REP"
command = ".screenshot"
is-disabled = false
- elem
+ elem
name = "F3"
command = ".say"
is-disabled = false
- elem
+ elem
name = "F4"
command = ".me"
is-disabled = false
- elem
+ elem
name = "F5"
command = "asay"
is-disabled = false
- elem
+ elem
name = "F6"
command = "Aghost"
is-disabled = false
- elem
+ elem
name = "F7"
command = "player-panel-new"
is-disabled = false
- elem
+ elem
name = "F8"
command = "admin-pm-key"
is-disabled = false
- elem
+ elem
name = "F9"
command = "Invisimin"
is-disabled = false
- elem
+ elem
name = "F12"
command = "F12"
is-disabled = false
macro "borgmacro"
- elem
+ elem
name = "TAB"
command = ".winset \"mainwindow.macro=borghotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#F0F0F0\""
is-disabled = false
- elem
+ elem
name = "CENTER+REP"
command = ".center"
is-disabled = false
- elem
+ elem
name = "NORTHEAST"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "SOUTHEAST"
command = ".southeast"
is-disabled = false
- elem
+ elem
name = "NORTHWEST"
command = "unequip-module"
is-disabled = false
- elem
+ elem
name = "CTRL+WEST"
command = "westface"
is-disabled = false
- elem
+ elem
name = "WEST+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "CTRL+NORTH"
command = "northface"
is-disabled = false
- elem
+ elem
name = "NORTH+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "CTRL+EAST"
command = "eastface"
is-disabled = false
- elem
+ elem
name = "EAST+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "CTRL+SOUTH"
command = "southface"
is-disabled = false
- elem
+ elem
name = "SOUTH+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "INSERT"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "DELETE"
command = "delete-key-pressed"
is-disabled = false
- elem
+ elem
name = "CTRL+1"
command = "toggle-module 1"
is-disabled = false
- elem
+ elem
name = "CTRL+2"
command = "toggle-module 2"
is-disabled = false
- elem
+ elem
name = "CTRL+3"
command = "toggle-module 3"
is-disabled = false
- elem
+ elem
name = "CTRL+4"
command = "a-intent left"
is-disabled = false
- elem
+ elem
name = "CTRL+A+REP"
command = ".west"
is-disabled = false
- elem
+ elem
name = "CTRL+B"
command = "resist"
is-disabled = false
- elem
+ elem
name = "CTRL+O"
command = "ooc"
is-disabled = false
- elem
+ elem
name = "CTRL+D+REP"
command = ".east"
is-disabled = false
- elem
+ elem
name = "CTRL+F"
command = "a-intent left"
is-disabled = false
- elem
+ elem
name = "CTRL+G"
command = "a-intent right"
is-disabled = false
- elem
+ elem
name = "CTRL+Q"
command = "unequip-module"
is-disabled = false
- elem
+ elem
name = "CTRL+S+REP"
command = ".south"
is-disabled = false
- elem
+ elem
name = "CTRL+W+REP"
command = ".north"
is-disabled = false
- elem
+ elem
name = "CTRL+X"
command = ".northeast"
is-disabled = false
- elem
+ elem
name = "CTRL+Y"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "CTRL+Z"
command = "Activate-Held-Object"
is-disabled = false
- elem
+ elem
name = "F1"
command = "adminhelp"
is-disabled = false
- elem
+ elem
name = "CTRL+SHIFT+F1+REP"
command = ".options"
is-disabled = false
- elem
+ elem
name = "F2"
command = "ooc"
is-disabled = false
- elem
+ elem
name = "F2+REP"
command = ".screenshot auto"
is-disabled = false
- elem
+ elem
name = "SHIFT+F2+REP"
command = ".screenshot"
is-disabled = false
- elem
+ elem
name = "F3"
command = ".say"
is-disabled = false
- elem
+ elem
name = "F4"
command = ".me"
is-disabled = false
- elem
+ elem
name = "F5"
command = "asay"
is-disabled = false
- elem
+ elem
name = "F6"
command = "Aghost"
is-disabled = false
- elem
+ elem
name = "F7"
command = "player-panel-new"
is-disabled = false
- elem
+ elem
name = "F8"
command = "admin-pm-key"
is-disabled = false
- elem
+ elem
name = "F9"
command = "Invisimin"
is-disabled = false
- elem
+ elem
name = "F12"
command = "F12"
- is-disabled = false
+ is-disabled = false
menu "menu"
- elem
+ elem
name = "&File"
command = ""
category = ""
@@ -1356,7 +1356,7 @@ menu "menu"
group = ""
is-disabled = false
saved-params = "is-checked"
- elem
+ elem
name = "&Quick screenshot\tF2"
command = ".screenshot auto"
category = "&File"
@@ -1365,7 +1365,7 @@ menu "menu"
group = ""
is-disabled = false
saved-params = "is-checked"
- elem
+ elem
name = "&Save screenshot as...\tShift+F2"
command = ".screenshot"
category = "&File"
@@ -1374,7 +1374,7 @@ menu "menu"
group = ""
is-disabled = false
saved-params = "is-checked"
- elem
+ elem
name = "&Reconnect"
command = ".reconnect"
category = "&File"
@@ -1383,7 +1383,7 @@ menu "menu"
group = ""
is-disabled = false
saved-params = "is-checked"
- elem
+ elem
name = ""
command = ""
category = "&File"
@@ -1392,7 +1392,7 @@ menu "menu"
group = ""
is-disabled = false
saved-params = "is-checked"
- elem
+ elem
name = "&Quit"
command = ".quit"
category = "&File"
@@ -1401,7 +1401,7 @@ menu "menu"
group = ""
is-disabled = false
saved-params = "is-checked"
- elem
+ elem
name = "&Icons"
command = ""
category = ""
@@ -1464,7 +1464,7 @@ menu "menu"
group = ""
is-disabled = false
saved-params = "is-checked"
- elem
+ elem
name = "&Help"
command = ""
category = ""
@@ -1473,7 +1473,7 @@ menu "menu"
group = ""
is-disabled = false
saved-params = "is-checked"
- elem
+ elem
name = "&Admin help\tF1"
command = "adminhelp"
category = "&Help"
@@ -1482,7 +1482,7 @@ menu "menu"
group = ""
is-disabled = false
saved-params = "is-checked"
- elem
+ elem
name = "&Hotkeys"
command = "hotkeys-help"
category = "&Help"
@@ -2256,6 +2256,32 @@ window "mainwindow"
is-checked = false
group = ""
button-type = pushbox
+ elem "tooltip"
+ type = BROWSER
+ pos = 0,0
+ size = 999x999
+ anchor1 = none
+ anchor2 = none
+ font-family = ""
+ font-size = 0
+ font-style = ""
+ text-color = #ffffff
+ background-color = #000000
+ is-visible = false
+ is-disabled = false
+ is-transparent = false
+ is-default = false
+ border = none
+ drop-zone = false
+ right-click = false
+ saved-params = ""
+ on-size = ""
+ show-history = false
+ show-url = false
+ auto-format = false
+ use-title = false
+ on-show = ""
+ on-hide = ""
window "mapwindow"
elem "mapwindow"
diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm
index b045e1adbdc..2f178d751bb 100644
--- a/interface/stylesheet.dm
+++ b/interface/stylesheet.dm
@@ -64,6 +64,7 @@ h1.alert, h2.alert {color: #000000;}
.warning {color: #ff0000; font-style: italic;}
.announce {color: #228b22; font-weight: bold;}
.boldannounce {color: #ff0000; font-weight: bold;}
+.greenannounce {color: #00ff00; font-weight: bold;}
.rose {color: #ff5050;}
.info {color: #0000CC;}
.notice {color: #000099;}
@@ -93,6 +94,7 @@ h1.alert, h2.alert {color: #000000;}
.clown {color: #ff0000;}
.shadowling {color: #3b2769;}
.vulpkanin {color: #B97A57;}
+.abductor {color: #800080;}
.rough {color: #7092BE; font-family: "Trebuchet MS", cursive, sans-serif;}
.say_quote {font-family: Georgia, Verdana, sans-serif;}
.sans {font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
diff --git a/nano/images/nanomap_z1.png b/nano/images/nanomap_z1.png
index 4398cd901e3..c22e9bf6fb7 100644
Binary files a/nano/images/nanomap_z1.png and b/nano/images/nanomap_z1.png differ
diff --git a/paradise.dme b/paradise.dme
index 3ea018738b8..b0f73e9778a 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -98,6 +98,7 @@
#include "code\_onclick\hud\_defines.dm"
#include "code\_onclick\hud\action.dm"
#include "code\_onclick\hud\ai.dm"
+#include "code\_onclick\hud\alert.dm"
#include "code\_onclick\hud\alien.dm"
#include "code\_onclick\hud\alien_larva.dm"
#include "code\_onclick\hud\bot.dm"
@@ -256,6 +257,7 @@
#include "code\datums\helper_datums\construction_datum.dm"
#include "code\datums\helper_datums\events.dm"
#include "code\datums\helper_datums\global_iterator.dm"
+#include "code\datums\helper_datums\icon_snapshot.dm"
#include "code\datums\helper_datums\map_template.dm"
#include "code\datums\helper_datums\teleport.dm"
#include "code\datums\helper_datums\topic_input.dm"
@@ -396,6 +398,15 @@
#include "code\game\gamemodes\malfunction\malfunction.dm"
#include "code\game\gamemodes\meteor\meteor.dm"
#include "code\game\gamemodes\meteor\meteors.dm"
+#include "code\game\gamemodes\miniantags\abduction\abduction.dm"
+#include "code\game\gamemodes\miniantags\abduction\abduction_gear.dm"
+#include "code\game\gamemodes\miniantags\abduction\abduction_surgery.dm"
+#include "code\game\gamemodes\miniantags\abduction\gland.dm"
+#include "code\game\gamemodes\miniantags\abduction\machinery\camera.dm"
+#include "code\game\gamemodes\miniantags\abduction\machinery\console.dm"
+#include "code\game\gamemodes\miniantags\abduction\machinery\dispenser.dm"
+#include "code\game\gamemodes\miniantags\abduction\machinery\experiment.dm"
+#include "code\game\gamemodes\miniantags\abduction\machinery\pad.dm"
#include "code\game\gamemodes\miniantags\borer\borer.dm"
#include "code\game\gamemodes\miniantags\borer\borer_event.dm"
#include "code\game\gamemodes\miniantags\bot_swarm\swarmer.dm"
@@ -751,6 +762,7 @@
#include "code\game\objects\items\stacks\sheets\mineral.dm"
#include "code\game\objects\items\stacks\sheets\sheet_types.dm"
#include "code\game\objects\items\stacks\sheets\sheets.dm"
+#include "code\game\objects\items\stacks\tiles\tile_mineral.dm"
#include "code\game\objects\items\stacks\tiles\tile_types.dm"
#include "code\game\objects\items\weapons\AI_modules.dm"
#include "code\game\objects\items\weapons\alien_specific.dm"
@@ -947,6 +959,7 @@
#include "code\game\turfs\simulated\walls_reinforced.dm"
#include "code\game\turfs\simulated\floor\fancy_floor.dm"
#include "code\game\turfs\simulated\floor\light_floor.dm"
+#include "code\game\turfs\simulated\floor\mineral.dm"
#include "code\game\turfs\simulated\floor\misc_floor.dm"
#include "code\game\turfs\simulated\floor\plasteel_floor.dm"
#include "code\game\turfs\simulated\floor\plating.dm"
@@ -1214,6 +1227,7 @@
#include "code\modules\economy\Job_Departments.dm"
#include "code\modules\economy\POS.dm"
#include "code\modules\economy\utils.dm"
+#include "code\modules\events\abductor.dm"
#include "code\modules\events\alien_infestation.dm"
#include "code\modules\events\anomaly.dm"
#include "code\modules\events\anomaly_bluespace.dm"
@@ -1473,6 +1487,7 @@
#include "code\modules\mob\living\carbon\human\interactive\functions.dm"
#include "code\modules\mob\living\carbon\human\interactive\interactive.dm"
#include "code\modules\mob\living\carbon\human\interactive\prefabs.dm"
+#include "code\modules\mob\living\carbon\human\species\abdcutor.dm"
#include "code\modules\mob\living\carbon\human\species\apollo.dm"
#include "code\modules\mob\living\carbon\human\species\golem.dm"
#include "code\modules\mob\living\carbon\human\species\monkey.dm"
@@ -1825,6 +1840,7 @@
#include "code\modules\reagents\reagent_containers\food\drinks\bottle.dm"
#include "code\modules\reagents\reagent_containers\food\drinks\drinkingglass.dm"
#include "code\modules\reagents\reagent_containers\food\drinks\jar.dm"
+#include "code\modules\reagents\reagent_containers\food\drinks\shotglass.dm"
#include "code\modules\reagents\reagent_containers\food\drinks\bottle\robot.dm"
#include "code\modules\reagents\reagent_containers\food\snacks\candy.dm"
#include "code\modules\reagents\reagent_containers\food\snacks\meat.dm"
@@ -1990,6 +2006,7 @@
#include "code\modules\telesci\gps.dm"
#include "code\modules\telesci\telepad.dm"
#include "code\modules\telesci\telesci_computer.dm"
+#include "code\modules\tooltip\tooltip.dm"
#include "code\modules\tram\tram.dm"
#include "code\modules\tram\tram_control_pad.dm"
#include "code\modules\tram\tram_floor.dm"