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