diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm
index d1bd7e7191..166f930e33 100644
--- a/code/controllers/subsystem/garbage.dm
+++ b/code/controllers/subsystem/garbage.dm
@@ -6,7 +6,7 @@ SUBSYSTEM_DEF(garbage)
runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY
init_order = INIT_ORDER_GARBAGE
- var/list/collection_timeout = list(0, 2 MINUTES, 10 SECONDS) // deciseconds to wait before moving something up in the queue to the next level
+ var/list/collection_timeout = list(15 SECONDS, 30 SECONDS) // deciseconds to wait before moving something up in the queue to the next level
//Stat tracking
var/delslasttick = 0 // number of del()'s we've done this tick
diff --git a/code/datums/martial/rising_bass.dm b/code/datums/martial/rising_bass.dm
index 5118911377..60fab7cf66 100644
--- a/code/datums/martial/rising_bass.dm
+++ b/code/datums/martial/rising_bass.dm
@@ -1,6 +1,8 @@
-#define SIDE_KICK_COMBO "DH"
+#define REPULSE_PUNCH_COMBO "HDHD"
#define SHOULDER_FLIP_COMBO "GHDGHH"
#define FOOT_SMASH_COMBO "HH"
+#define SIDE_KICK_COMBO "skick"
+#define DEFT_SWITCH_COMBO "deft"
/datum/martial_art/the_rising_bass
name = "The Rising Bass"
@@ -8,7 +10,7 @@
dodge_chance = 100
allow_temp_override = FALSE
help_verb = /mob/living/carbon/human/proc/rising_bass_help
- var/datum/action/risingbassmove/repulsepunch = new/datum/action/risingbassmove/repulsepunch()
+ var/datum/action/risingbassmove/sidekick = new/datum/action/risingbassmove/sidekick()
var/datum/action/risingbassmove/deftswitch = new/datum/action/risingbassmove/deftswitch()
var/repulsecool = 0
@@ -21,7 +23,7 @@
streak = ""
shoulderFlip(A,D)
return 1
- if(findtext(streak,"rplse"))
+ if(findtext(streak,REPULSE_PUNCH_COMBO))
streak = ""
repulsePunch(A,D)
return 1
@@ -29,7 +31,7 @@
streak = ""
footSmash(A,D)
return 1
- if(findtext(streak,"deft"))
+ if(findtext(streak,DEFT_SWITCH_COMBO))
streak = ""
deftSwitch(A,D)
return 1
@@ -58,42 +60,46 @@
to_chat(H,"You get ready to use the [name] maneuver!")
H.mind.martial_art.streak = "[movestreak]"
-/datum/action/risingbassmove/repulsepunch
- name = "Repulse Punch"
- button_icon_state = "repulsepunch"
- movestreak = "rplse"
+/datum/action/risingbassmove/sidekick
+ name = "Side Kick"
+ button_icon_state = "sidekick"
+ movestreak = "skick"
/datum/action/risingbassmove/deftswitch
name = "Deft Switch"
button_icon_state = "deftswitch"
movestreak = "deft"
+/datum/martial_art/the_rising_bass/proc/checkfordensity(turf/T,mob/M)
+ if (T.density)
+ return FALSE
+ for(var/obj/O in T)
+ if(!O.CanPass(M,T))
+ return FALSE
+ return TRUE
/datum/martial_art/the_rising_bass/proc/sideKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(CHECK_MOBILITY(D, MOBILITY_STAND))
- var/turf/H = get_step(D, A.dir & (NORTH | SOUTH) ? pick(EAST, WEST) : pick(NORTH, SOUTH))
+ var/dir = A.dir & (NORTH | SOUTH) ? pick(EAST, WEST) : pick(NORTH, SOUTH)
+ var/oppdir = dir == NORTH ? SOUTH : dir == SOUTH ? NORTH : dir == EAST ? WEST : EAST
+ var/turf/H = get_step(D, dir)
+ var/turf/K = get_step(D, oppdir)
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message("[A] kicks [D] in the side, sliding them over!", \
"[A] kicks you in the side, forcing you to step away!")
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
D.apply_damage(5, BRUTE, BODY_ZONE_CHEST)
D.DefaultCombatKnockdown(60)
- var/L = H
- for(var/obj/i in H.contents)
- if(!istype(i,/mob) && i.density == 1)
- L = D.loc
+ var/L = !checkfordensity(H,D) ? (!checkfordensity(K,D) ? D.loc : K) : H
D.forceMove(L)
log_combat(A, D, "side kicked (Rising Bass)")
- return 1
+ return TRUE
return basic_hit(A,D)
/datum/martial_art/the_rising_bass/proc/shoulderFlip(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(CHECK_MOBILITY(D, MOBILITY_STAND))
var/turf/H = get_step(A, get_dir(D,A))
- var/L = H
- for(var/obj/i in H.contents)
- if(!istype(i,/mob) && i.density == 1)//(i.anchored == 1 && i.density == 1) || istype(i,/obj/structure) || istype(i,/turf/closed)
- L = A.loc
+ var/L = checkfordensity(H,D) ? H : A.loc
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
D.visible_message("[A] flips [D] over their shoulder, slamming them into the ground!", \
"[A] flips you over their shoulder, slamming you into the ground!")
@@ -105,11 +111,15 @@
D.DefaultCombatKnockdown(300)
D.forceMove(L)
log_combat(A, D, "shoulder flipped (Rising Bass)")
- return 1
+ return TRUE
return basic_hit(A,D)
/datum/martial_art/the_rising_bass/proc/repulsePunch(mob/living/carbon/human/A, mob/living/carbon/human/D)
+<<<<<<< HEAD
if(CHECK_MOBILITY(D, MOBILITY_STAND) && repulsecool < world.time)
+=======
+ if((!D.IsKnockdown() || !D.lying) && repulsecool > world.time)
+>>>>>>> citadel/master
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
D.visible_message("[A] smashes [D] in the chest, throwing them away!", \
"[A] smashes you in the chest, repelling you away!")
@@ -120,7 +130,7 @@
D.DefaultCombatKnockdown(90)
log_combat(A, D, "repulse punched (Rising Bass)")
repulsecool = world.time + 3 SECONDS
- return 1
+ return TRUE
return basic_hit(A,D)
/datum/martial_art/the_rising_bass/proc/footSmash(mob/living/carbon/human/A, mob/living/carbon/human/D)
@@ -132,7 +142,7 @@
D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
D.dropItemToGround(D.get_active_held_item())
log_combat(A, D, "foot smashed (Rising Bass)")
- return 1
+ return TRUE
return basic_hit(A,D)
/datum/martial_art/the_rising_bass/proc/deftSwitch(mob/living/carbon/human/A, mob/living/carbon/human/D)
@@ -144,10 +154,10 @@
D.visible_message("[A] slaps [D]'s hands, taking [G] from them!", \
"[A] slaps you, taking [G] from you!")
log_combat(A, D, "deft switched (Rising Bass)")
- return 1
+ return TRUE
else
to_chat(A, "[G] can't be taken out of [D]'s hands!")
- return 0
+ return FALSE
/datum/martial_art/the_rising_bass/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
add_to_streak("D",D)
@@ -168,7 +178,7 @@
return ..()
/datum/martial_art/the_rising_bass/add_to_streak(element,mob/living/carbon/human/D)
- if (streak == "deft" || streak == "rplse")
+ if (streak == DEFT_SWITCH_COMBO || streak == SIDE_KICK_COMBO)
return
. = ..()
@@ -179,24 +189,24 @@
to_chat(usr, "You retreat inward and recall the teachings of the Rising Bass...")
- to_chat(usr, "Side Kick: Disarm Harm. Forces opponent to step to the side.")
+ to_chat(usr, "Side Kick: Forces opponent to step to the side.")
to_chat(usr, "Shoulder Flip: Grab Harm Disarm Grab Harm Harm. Flips opponent over your shoulder and stuns.")
- to_chat(usr, "Repulse Punch: Grab Harm Grab Harm. Slams the opponent far away from you.")
+ to_chat(usr, "Repulse Punch: Harm Disarm Harm Disarm. Slams the opponent far away from you.")
to_chat(usr, "Foot Smash: Harm Harm. Stuns opponent, minor damage.")
- to_chat(usr, "Deft Switch: Grab Disarm Disarm. Switches the opponent's held item for your own. Most useful with nothing in your hand.")
+ to_chat(usr, "Deft Switch: Switches the opponent's held item for your own. Most useful with nothing in your hand.")
/datum/martial_art/the_rising_bass/teach(mob/living/carbon/human/H, make_temporary = FALSE)
. = ..()
if(!.)
return
deftswitch.Grant(H)
- repulsepunch.Grant(H)
+ sidekick.Grant(H)
ADD_TRAIT(H, TRAIT_NOGUNS, RISING_BASS_TRAIT)
ADD_TRAIT(H, TRAIT_AUTO_CATCH_ITEM, RISING_BASS_TRAIT)
/datum/martial_art/the_rising_bass/on_remove(mob/living/carbon/human/H)
. = ..()
deftswitch.Remove(H)
- repulsepunch.Remove(H)
+ sidekick.Remove(H)
REMOVE_TRAIT(H, TRAIT_NOGUNS, RISING_BASS_TRAIT)
REMOVE_TRAIT(H, TRAIT_AUTO_CATCH_ITEM, RISING_BASS_TRAIT)
diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm
index c2dd9a7828..fbb5505586 100644
--- a/code/game/machinery/telecomms/machines/allinone.dm
+++ b/code/game/machinery/telecomms/machines/allinone.dm
@@ -35,8 +35,6 @@
signal.data["compression"] = 0
signal.mark_done()
- if(signal.data["slow"] > 0)
- sleep(signal.data["slow"]) // simulate the network lag if necessary
signal.broadcast()
/obj/machinery/telecomms/allinone/attackby(obj/item/P, mob/user, params)
diff --git a/code/game/machinery/telecomms/machines/broadcaster.dm b/code/game/machinery/telecomms/machines/broadcaster.dm
index 0abe97c72e..6b03bcc880 100644
--- a/code/game/machinery/telecomms/machines/broadcaster.dm
+++ b/code/game/machinery/telecomms/machines/broadcaster.dm
@@ -41,9 +41,6 @@ GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages
return
GLOB.recentmessages.Add(signal_message)
- if(signal.data["slow"] > 0)
- sleep(signal.data["slow"]) // simulate the network lag if necessary
-
signal.broadcast()
if(!GLOB.message_delay)
diff --git a/code/game/machinery/telecomms/machines/bus.dm b/code/game/machinery/telecomms/machines/bus.dm
index ed7c33d50a..ce5ed31094 100644
--- a/code/game/machinery/telecomms/machines/bus.dm
+++ b/code/game/machinery/telecomms/machines/bus.dm
@@ -31,17 +31,10 @@
if(relay_information(signal, /obj/machinery/telecomms/processor))
return
- // failed to send to a processor, relay information anyway
- signal.data["slow"] += rand(1, 5) // slow the signal down only slightly
-
// Try sending it!
var/list/try_send = list(signal.server_type, /obj/machinery/telecomms/hub, /obj/machinery/telecomms/broadcaster)
- var/i = 0
for(var/send in try_send)
- if(i)
- signal.data["slow"] += rand(0, 1) // slow the signal down only slightly
- i++
if(relay_information(signal, send))
break
@@ -79,4 +72,4 @@
/obj/machinery/telecomms/bus/preset_one/birdstation
name = "Bus"
autolinkers = list("processor1", "common")
- freq_listening = list()
\ No newline at end of file
+ freq_listening = list()
diff --git a/code/game/machinery/telecomms/machines/processor.dm b/code/game/machinery/telecomms/machines/processor.dm
index 2362273469..a09b3ca8fb 100644
--- a/code/game/machinery/telecomms/machines/processor.dm
+++ b/code/game/machinery/telecomms/machines/processor.dm
@@ -28,7 +28,6 @@
if(istype(machine_from, /obj/machinery/telecomms/bus))
relay_direct_information(signal, machine_from) // send the signal back to the machine
else // no bus detected - send the signal to servers instead
- signal.data["slow"] += rand(5, 10) // slow the signal down
relay_information(signal, signal.server_type)
//Preset Processors
diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm
index 70b785ea21..d21edffea1 100644
--- a/code/game/machinery/telecomms/telecomunications.dm
+++ b/code/game/machinery/telecomms/telecomunications.dm
@@ -39,11 +39,6 @@ GLOBAL_LIST_EMPTY(telecomms_list)
return
var/send_count = 0
- // Apply some lag based on traffic rates
- var/netlag = round(traffic / 50)
- if(netlag > signal.data["slow"])
- signal.data["slow"] = netlag
-
// Loop through all linked machines and send the signal or copy.
for(var/obj/machinery/telecomms/machine in links)
if(filter && !istype( machine, filter ))
diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm
index eea3bace98..18b9d40346 100644
--- a/code/game/objects/effects/contraband.dm
+++ b/code/game/objects/effects/contraband.dm
@@ -409,6 +409,11 @@
desc = "A poster advertising a movie about some masked men."
icon_state = "poster44"
+/obj/structure/sign/poster/contraband/buzzfuzz
+ name = "Buzz Fuzz"
+ desc = "A poster advertising the newest drink \"Buzz Fuzz\" with its iconic slogan of ~A Hive of Flavour~."
+ icon_state = "poster45"
+
/obj/structure/sign/poster/official
poster_item_name = "motivational poster"
poster_item_desc = "An official Nanotrasen-issued poster to foster a compliant and obedient workforce. It comes with state-of-the-art adhesive backing, for easy pinning to any vertical surface."
@@ -595,4 +600,14 @@
desc = "This informational poster teaches the viewer what carbon dioxide is."
icon_state = "poster35_legit"
+/obj/structure/sign/poster/official/spiderlings
+ name = "Spiderlings"
+ desc = "This poster informs the crew of the dangers of spiderlings."
+ icon_state = "poster36_legit"
+
+/obj/structure/sign/poster/official/duelshotgun
+ name = "Cycler Shotgun Ad"
+ desc = "A poster advertising an advanced dual magazine tubes shotgun, boasting about how easy it is to swap between the two tubes."
+ icon_state = "poster37_legit"
+
#undef PLACE_SPEED
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 0eefb88417..7552e0b79d 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -790,6 +790,7 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra
/obj/item/stack/sheet/cotton
name = "raw cotton bundle"
desc = "A bundle of raw cotton ready to be spun on the loom."
+ max_amount = 80
singular_name = "raw cotton ball"
icon_state = "sheet-cotton"
is_fabric = TRUE
diff --git a/code/modules/antagonists/blob/blob/overmind.dm b/code/modules/antagonists/blob/blob/overmind.dm
index fe1c700014..18e13118fe 100644
--- a/code/modules/antagonists/blob/blob/overmind.dm
+++ b/code/modules/antagonists/blob/blob/overmind.dm
@@ -157,6 +157,9 @@ GLOBAL_LIST_EMPTY(blob_nodes)
BM.overmind = null
BM.update_icons()
GLOB.overminds -= src
+ blob_mobs = null
+ resource_blobs = null
+ blobs_legit = null
SSshuttle.clearHostileEnvironment(src)
diff --git a/code/modules/antagonists/ninja/ninja.dm b/code/modules/antagonists/ninja/ninja.dm
index 12bdbec77a..133bd5ab6a 100644
--- a/code/modules/antagonists/ninja/ninja.dm
+++ b/code/modules/antagonists/ninja/ninja.dm
@@ -70,16 +70,10 @@
O.explanation_text = "Protect \the [M.current.real_name], the [M.assigned_role], from harm."
objectives += O
if(4) //flavor
- if(helping_station)
- var/datum/objective/flavor/ninja_helping/O = new /datum/objective/flavor/ninja_helping
- O.owner = owner
- O.forge_objective()
- objectives += O
- else
- var/datum/objective/flavor/ninja_syndie/O = new /datum/objective/flavor/ninja_helping
- O.owner = owner
- O.forge_objective()
- objectives += O
+ var/datum/objective/flavor/O = helping_station ? new /datum/objective/flavor/ninja_helping : new /datum/objective/flavor/ninja_syndie
+ O.owner = owner
+ O.forge_objective()
+ objectives += O
else
break
var/datum/objective/O = new /datum/objective/survive()
diff --git a/code/modules/mob/living/carbon/alien/damage_procs.dm b/code/modules/mob/living/carbon/alien/damage_procs.dm
index f5d210b94b..66738b2208 100644
--- a/code/modules/mob/living/carbon/alien/damage_procs.dm
+++ b/code/modules/mob/living/carbon/alien/damage_procs.dm
@@ -5,11 +5,9 @@
/mob/living/carbon/alien/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE) //alien immune to tox damage
return FALSE
-/* CIT CHANGE - Pffffffffffffhahahahahhaha-- No.
//aliens are immune to stamina damage.
-/mob/living/carbon/alien/adjustStaminaLoss(amount, updating_health = 1)
+/mob/living/carbon/alien/adjustStaminaLoss(amount, updating_health = TRUE, forced = FALSE)
return
-/mob/living/carbon/alien/setStaminaLoss(amount, updating_health = 1)
+/mob/living/carbon/alien/setStaminaLoss(amount, updating_health = TRUE, forced = FALSE)
return
-*/
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index 9404acadcc..f6d3a45967 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -52,7 +52,12 @@
. = ..()
if(!HAS_TRAIT(src, TRAIT_AUTO_CATCH_ITEM) && !skip_throw_mode_check && !in_throw_mode)
return
- if(get_active_held_item() || restrained())
+ if(incapacitated())
+ return
+ if (get_active_held_item())
+ if (HAS_TRAIT_FROM(src, TRAIT_AUTO_CATCH_ITEM,RISING_BASS_TRAIT))
+ visible_message("[src] chops [I] out of the air!")
+ return TRUE
return
I.attack_hand(src)
if(get_active_held_item() == I) //if our attack_hand() picks up the item...
diff --git a/code/modules/mob/living/carbon/carbon_movement.dm b/code/modules/mob/living/carbon/carbon_movement.dm
index fae8ef56be..26ac12b97a 100644
--- a/code/modules/mob/living/carbon/carbon_movement.dm
+++ b/code/modules/mob/living/carbon/carbon_movement.dm
@@ -9,8 +9,6 @@
. += 6 - 3*get_num_arms() //crawling is harder with fewer arms
if(legcuffed)
. += legcuffed.slowdown
- if(stat == SOFT_CRIT)
- . += SOFTCRIT_ADD_SLOWDOWN
/mob/living/carbon/slip(knockdown_amount, obj/O, lube)
if(movement_type & FLYING && !(lube & FLYING_DOESNT_HELP))
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 5db1263147..5bedce359b 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -49,9 +49,14 @@
if (mind.martial_art && mind.martial_art.dodge_chance)
if(!lying && dna && !dna.check_mutation(HULK))
if(prob(mind.martial_art.dodge_chance))
- var/dodgemessage = pick("dodges under the projectile!","dodges to the right of the projectile!","jumps over the projectile!")
- visible_message("[src] [dodgemessage]", "You dodge the projectile!")
- return BULLET_ACT_BLOCK
+ var/static/dodgemessages = list("dodges under",0,-4,"dodges to the right of",-4,0,"dodges to the left of",4,0,"jumps over",0,4)
+ var/pick = pick(1,4,7,10)
+ var/oldx = pixel_x
+ var/oldy = pixel_y
+ animate(src,pixel_x = pixel_x + dodgemessages[pick+1],pixel_y = pixel_y + dodgemessages[pick+2],time=3)
+ animate(src,pixel_x = oldx,pixel_y = oldy,time=2)
+ visible_message("[src] [dodgemessages[pick]] the projectile!", "You dodge the projectile!")
+ return BULLET_ACT_FORCE_PIERCE
if(mind.martial_art && !incapacitated(FALSE, TRUE) && mind.martial_art.can_use(src) && mind.martial_art.deflection_chance) //Some martial arts users can deflect projectiles!
if(prob(mind.martial_art.deflection_chance))
if(!lying && dna && !dna.check_mutation(HULK)) //But only if they're not lying down, and hulks can't do it
diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
index 71f5aaa8e2..ee4ef83a44 100644
--- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
@@ -24,7 +24,7 @@
H.vomit(0, FALSE, FALSE, 2, TRUE)
var/obj/effect/decal/cleanable/vomit/V = locate() in pos
if(V)
- H.reagents.trans_id_to(V, chem, chem.volume)
+ H.reagents.trans_id_to(V, chem.type, chem.volume)
playsound(pos, 'sound/effects/splat.ogg', 50, 1)
H.visible_message("[H] vomits on the floor!", \
"You throw up on the floor!")
diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm
index ce8ab9659c..1f19cf64ff 100644
--- a/code/modules/modular_computers/computers/item/laptop.dm
+++ b/code/modules/modular_computers/computers/item/laptop.dm
@@ -19,7 +19,6 @@
var/start_open = TRUE // unless this var is set to 1
var/icon_state_closed = "laptop-closed"
var/w_class_open = WEIGHT_CLASS_BULKY
- var/slowdown_open = TRUE
/obj/item/modular_computer/laptop/examine(mob/user)
. = ..()
@@ -92,11 +91,9 @@
/obj/item/modular_computer/laptop/proc/toggle_open(mob/living/user=null)
if(screen_on)
to_chat(user, "You close \the [src].")
- slowdown = initial(slowdown)
w_class = initial(w_class)
else
to_chat(user, "You open \the [src].")
- slowdown = slowdown_open
w_class = w_class_open
screen_on = !screen_on
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index 8f2adeb0c2..eff1531e23 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -303,6 +303,8 @@
if(R.overdose_threshold)
if(R.volume > R.overdose_threshold && !R.overdosed)
R.overdosed = 1
+ var/turf/CT = get_turf(C)
+ log_reagent("OVERDOSE START: [key_name(C)] at [AREACOORD(CT)] started overdosing on [R.volume] units of [R].")
need_mob_update += R.overdose_start(C)
if(R.addiction_threshold)
if(R.volume > R.addiction_threshold && !is_type_in_list(R, cached_addictions))
@@ -347,6 +349,9 @@
/datum/reagents/proc/remove_addiction(datum/reagent/R)
to_chat(my_atom, "You feel like you've gotten over your need for [R.name].")
SEND_SIGNAL(my_atom, COMSIG_CLEAR_MOOD_EVENT, "[R.type]_overdose")
+ if(ismob(my_atom))
+ var/turf/T = get_turf(my_atom)
+ log_reagent("OVERDOSE STOP: [key_name(my_atom)] at [AREACOORD(T)] got over their need for [R].")
addiction_list.Remove(R)
qdel(R)
diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm
index bd6c37973f..384a113b27 100644
--- a/code/modules/reagents/chemistry/reagents.dm
+++ b/code/modules/reagents/chemistry/reagents.dm
@@ -78,7 +78,6 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
current_cycle++
if(holder)
holder.remove_reagent(type, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears.
- return
//called when a mob processes chems when dead.
/datum/reagent/proc/on_mob_dead(mob/living/carbon/M)
@@ -87,15 +86,15 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
current_cycle++
if(holder)
holder.remove_reagent(type, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears.
- return
// Called when this reagent is first added to a mob
/datum/reagent/proc/on_mob_add(mob/living/L, amount)
if(!iscarbon(L))
return
var/mob/living/carbon/M = L
+ var/turf/T = get_turf(M)
+ log_reagent("MOB ADD: on_mob_add(): [key_name(M)] at [AREACOORD(T)] - [volume] of [type] with [purity] purity")
if (purity == 1)
- log_game("CHEM: [L] ckey: [L.key] has ingested [volume]u of [type]")
return
if(cached_purity == 1)
cached_purity = purity
@@ -112,20 +111,18 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
R.name = name//Negative effects are hidden
if(R.chemical_flags & REAGENT_INVISIBLE)
R.chemical_flags |= (REAGENT_INVISIBLE)
- log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [inverse_chem]")
- return
+ log_reagent("MOB ADD: on_mob_add() (impure): merged [volume] of [inverse_chem]")
else if (impure_chem)
var/impureVol = amount * (1 - purity) //turns impure ratio into impure chem
if(!(chemical_flags & REAGENT_SPLITRETAINVOL))
M.reagents.remove_reagent(type, (impureVol), FALSE)
M.reagents.add_reagent(impure_chem, impureVol, FALSE, other_purity = 1-cached_purity)
- log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume - impureVol]u of [type]")
- log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [impure_chem]")
- return
+ log_reagent("MOB ADD: on_mob_add() (mixed purity): merged [volume - impureVol] of [type] and [volume] of [impure_chem]")
// Called when this reagent is removed while inside a mob
/datum/reagent/proc/on_mob_delete(mob/living/L)
- return
+ var/turf/T = get_turf(L)
+ log_reagent("MOB DELETE: on_mob_delete: [key_name(L)] at [AREACOORD(T)] - [type]")
// Called when this reagent first starts being metabolized by a liver
/datum/reagent/proc/on_mob_metabolize(mob/living/L)
@@ -146,8 +143,9 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
/datum/reagent/proc/on_merge(data, amount, mob/living/carbon/M, purity)
if(!iscarbon(M))
return
+ var/turf/T = get_turf(M)
+ log_reagent("MOB ADD: on_merge(): [key_name(M)] at [AREACOORD(T)] - [volume] of [type] with [purity] purity")
if (purity == 1)
- log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [type]")
return
cached_purity = purity //purity SHOULD be precalculated from the add_reagent, update cache.
if (purity < 0)
@@ -163,16 +161,13 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
R.name = name//Negative effects are hidden
if(R.chemical_flags & REAGENT_INVISIBLE)
R.chemical_flags |= (REAGENT_INVISIBLE)
- log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [inverse_chem]")
- return
+ log_reagent("MOB ADD: on_merge() (impure): merged [volume] of [inverse_chem]")
else if (impure_chem) //SPLIT
var/impureVol = amount * (1 - purity)
if(!(chemical_flags & REAGENT_SPLITRETAINVOL))
M.reagents.remove_reagent(type, impureVol, FALSE)
M.reagents.add_reagent(impure_chem, impureVol, FALSE, other_purity = 1-cached_purity)
- log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume - impureVol]u of [type]")
- log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [impure_chem]")
- return
+ log_reagent("MOB ADD: on_merge() (mixed purity): merged [volume - impureVol] of [type] and [volume] of [impure_chem]")
/datum/reagent/proc/on_update(atom/A)
return
@@ -188,31 +183,26 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
/datum/reagent/proc/overdose_start(mob/living/M)
to_chat(M, "You feel like you took too much of [name]!")
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/overdose, name)
- return
/datum/reagent/proc/addiction_act_stage1(mob/living/M)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/withdrawal_light, name)
if(prob(30))
to_chat(M, "You feel like having some [name] right about now.")
- return
/datum/reagent/proc/addiction_act_stage2(mob/living/M)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/withdrawal_medium, name)
if(prob(30))
to_chat(M, "You feel like you need [name]. You just can't get enough.")
- return
/datum/reagent/proc/addiction_act_stage3(mob/living/M)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/withdrawal_severe, name)
if(prob(30))
to_chat(M, "You have an intense craving for [name].")
- return
/datum/reagent/proc/addiction_act_stage4(mob/living/M)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/withdrawal_critical, name)
if(prob(30))
to_chat(M, "You're not feeling good at all! You really need some [name].")
- return
/proc/pretty_string_from_reagent_list(list/reagent_list)
//Convert reagent list to a printable string for logging etc
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index c178aad717..9c6ea3deb4 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -67,7 +67,6 @@
else
amount_per_transfer_from_this = possible_transfer_amounts[1]
to_chat(user, "[src]'s transfer amount is now [amount_per_transfer_from_this] units.")
- return
/obj/item/reagent_containers/attack(mob/M, mob/user, def_zone)
if(user.a_intent == INTENT_HARM)
@@ -123,28 +122,34 @@
if(thrown)
reagents.total_volume *= rand(5,10) * 0.1 //Not all of it makes contact with the target
var/mob/M = target
- var/R
+ var/R = reagents.log_list()
target.visible_message("[M] has been splashed with something!", \
"[M] has been splashed with something!")
- for(var/datum/reagent/A in reagents.reagent_list)
- R += "[A.type] ([A.volume]),"
-
- if(thrownby)
+ var/turf/TT = get_turf(target)
+ var/throwerstring
+ if(thrownby && thrown)
log_combat(thrownby, M, "splashed", R)
+ var/turf/AT = get_turf(thrownby)
+ throwerstring = " THROWN BY [key_name(thrownby)] at [AT] (AREACOORD(AT)]"
+ log_reagent("SPLASH: [src] mob SplashReagents() onto [key_name(target)] at [TT] ([AREACOORD(TT)])[throwerstring] - [R]")
reagents.reaction(target, TOUCH)
-
+
else if(bartender_check(target) && thrown)
visible_message("[src] lands onto the [target.name] without spilling a single drop.")
transform = initial(transform)
addtimer(CALLBACK(src, .proc/ForceResetRotation), 1)
- return
-
else
if(isturf(target) && reagents.reagent_list.len && thrownby)
log_combat(thrownby, target, "splashed (thrown) [english_list(reagents.reagent_list)]", "in [AREACOORD(target)]")
log_game("[key_name(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [AREACOORD(target)].")
message_admins("[ADMIN_LOOKUPFLW(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [ADMIN_VERBOSEJMP(target)].")
+ var/turf/T = get_turf(target)
+ var/throwerstring
+ if(thrownby && thrown)
+ var/turf/AT = get_turf(thrownby)
+ throwerstring = " THROWN BY [key_name(thrownby)] at [AT] ([AREACOORD(AT)])"
+ log_reagent("SPLASH - [src] object SplashReagents() onto [target] at [T] ([AREACOORD(T)])[throwerstring] - [reagents.log_list()]")
visible_message("[src] spills its contents all over [target].")
reagents.reaction(target, TOUCH)
if(QDELETED(src))
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 23f149ade4..78c335ce14 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -29,20 +29,30 @@
message_admins("[ADMIN_LOOKUPFLW(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] at [ADMIN_VERBOSEJMP(target)].")
reagents.reaction(M, TOUCH)
log_combat(user, M, "splashed", R)
+ var/turf/UT = get_turf(user)
+ var/turf/MT = get_turf(M)
+ var/turf/OT = get_turf(target)
+ log_reagent("SPLASH: attack(target mob [key_name(M)] at [AREACOORD(MT)], from user [key_name(user)] at [AREACOORD(UT)], target object [target] at [AREACOORD(OT)]) - [R]")
reagents.clear_reagents()
else
var/self_fed = M == user
if(!self_fed)
M.visible_message("[user] attempts to feed something to [M].", \
"[user] attempts to feed something to you.")
+ log_combat(user, M, "is attempting to feed", reagents.log_list())
if(!do_mob(user, M))
return
if(!reagents || !reagents.total_volume)
return // The drink might be empty after the delay, such as by spam-feeding
+ var/turf/UT = get_turf(user) // telekenesis memes
+ var/turf/MT = get_turf(M)
M.visible_message("[user] feeds something to [M].", "[user] feeds something to you.")
log_combat(user, M, "fed", reagents.log_list())
+ log_reagent("INGESTION: FED BY: [key_name(user)] (loc [user.loc] at [AREACOORD(UT)]) -> [key_name(M)] (loc [M.loc] at [AREACOORD(MT)]) - [reagents.log_list()]")
else
+ var/turf/T = get_turf(user)
to_chat(user, "You swallow a gulp of [src].")
+ log_reagent("INGESTION: SELF: [key_name(user)] (loc [user.loc] at [AREACOORD(T)]) - [reagents.log_list()]")
var/fraction = min(5/reagents.total_volume, 1)
reagents.reaction(M, INGEST, fraction)
addtimer(CALLBACK(reagents, /datum/reagents.proc/trans_to, M, 5, null, null, null, self_fed? "self swallowed" : "fed by [user]"), 5)
@@ -325,6 +335,8 @@
if (slot == SLOT_HEAD)
if(reagents.total_volume)
to_chat(user, "[src]'s contents spill all over you!")
+ var/R = reagents.log_list()
+ log_reagent("SPLASH: [user] splashed [src] on their head via bucket/equipped(self, SLOT_HEAD) - [R]")
reagents.reaction(user, TOUCH)
reagents.clear_reagents()
reagent_flags = NONE
diff --git a/html/changelogs/AutoChangeLog-pr-11203.yml b/html/changelogs/AutoChangeLog-pr-11203.yml
new file mode 100644
index 0000000000..aa685ef522
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11203.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "Three new posters have been issued to the printing press"
diff --git a/html/changelogs/AutoChangeLog-pr-11250.yml b/html/changelogs/AutoChangeLog-pr-11250.yml
new file mode 100644
index 0000000000..8ed1ea85ba
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11250.yml
@@ -0,0 +1,5 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - balance: "rebalanced rising bass's buttom actions from repulse to side kick"
+ - bugfix: "projectiles and rising bass and items and rising bass"
diff --git a/html/changelogs/AutoChangeLog-pr-11289.yml b/html/changelogs/AutoChangeLog-pr-11289.yml
new file mode 100644
index 0000000000..fb16bc34a7
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11289.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "Cotton/Durathread now stack to 80 bundles"
diff --git a/html/changelogs/AutoChangeLog-pr-11299.yml b/html/changelogs/AutoChangeLog-pr-11299.yml
new file mode 100644
index 0000000000..a0c29184d0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11299.yml
@@ -0,0 +1,4 @@
+author: "Linzolle"
+delete-after: True
+changes:
+ - bugfix: "flypeople being unable to gain nutrition from eating vomit"
diff --git a/html/changelogs/AutoChangeLog-pr-11300.yml b/html/changelogs/AutoChangeLog-pr-11300.yml
new file mode 100644
index 0000000000..362127bdb6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11300.yml
@@ -0,0 +1,4 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - rscdel: "removed laptops giving slowdown when open"
diff --git a/html/changelogs/AutoChangeLog-pr-11308.yml b/html/changelogs/AutoChangeLog-pr-11308.yml
new file mode 100644
index 0000000000..bd233883b7
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11308.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - rscdel: "Removed \"realistic tcomms lag\""
diff --git a/html/changelogs/AutoChangeLog-pr-11320.yml b/html/changelogs/AutoChangeLog-pr-11320.yml
new file mode 100644
index 0000000000..e25b7bc0ac
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11320.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Syndicate ninjas are slightly less friendly now."
diff --git a/icons/mob/actions/actions_items.dmi b/icons/mob/actions/actions_items.dmi
index f5ba86c0fa..8b21c32d6b 100644
Binary files a/icons/mob/actions/actions_items.dmi and b/icons/mob/actions/actions_items.dmi differ
diff --git a/icons/obj/contraband.dmi b/icons/obj/contraband.dmi
index f86dd2e7d0..1e429754f0 100644
Binary files a/icons/obj/contraband.dmi and b/icons/obj/contraband.dmi differ