diff --git a/code/__DEFINES/instruments.dm b/code/__DEFINES/instruments.dm index 3c414f87f4..69d2a60e51 100644 --- a/code/__DEFINES/instruments.dm +++ b/code/__DEFINES/instruments.dm @@ -19,7 +19,7 @@ #define INSTRUMENT_EXP_FALLOFF_MAX 10 /// Minimum volume for when the sound is considered dead. -#define INSTRUMENT_MIN_SUSTAIN_DROPOFF 0 +#define INSTRUMENT_MIN_SUSTAIN_DROPOFF 1 #define SUSTAIN_LINEAR 1 #define SUSTAIN_EXPONENTIAL 2 diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 57484ae85b..9403eca2da 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -86,8 +86,8 @@ #define EMOTE_OMNI 4 //Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam -#define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen? -#define MAX_FLAVOR_LEN 4096 //double the maximum message length. +#define MAX_MESSAGE_LEN 4096 //Citadel edit: What's the WORST that could happen? +#define MAX_FLAVOR_LEN 4096 #define MAX_TASTE_LEN 40 //lick... vore... ew... #define MAX_NAME_LEN 42 #define MAX_BROADCAST_LEN 512 diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index f376ba50d7..ac6ea4e25c 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -132,6 +132,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NODROP" = TRAIT_NODROP, "TRAIT_NO_TELEPORT" = TRAIT_NO_TELEPORT, "TRAIT_SPOOKY_THROW" = TRAIT_SPOOKY_THROW + ), + /datum/mind = list( + "TRAIT_CLOWN_MENTALITY" = TRAIT_CLOWN_MENTALITY ) )) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 280348368d..00ba621550 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -117,12 +117,6 @@ if(user.a_intent == INTENT_HARM) return ..() -//callback proc used on stacks use_tool to stop unnecessary amounts being wasted from spam clicking. -/obj/structure/frame/computer/proc/check_state(target_state) - if(state == target_state) - return TRUE - return FALSE - /obj/structure/frame/computer/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) if(state == 4) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index b00edfd82c..d5bbcb0adc 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -21,6 +21,11 @@ circuit = null qdel(src) +//callback proc used on stacks use_tool to stop unnecessary amounts being wasted from spam clicking. +/obj/structure/frame/proc/check_state(target_state) + if(state == target_state) + return TRUE + return FALSE /obj/structure/frame/machine name = "machine frame" @@ -84,7 +89,7 @@ if(!P.tool_start_check(user, amount=5)) return to_chat(user, "You start to add cables to the frame...") - if(P.use_tool(src, user, 20, volume=50, amount=5)) + if(P.use_tool(src, user, 20, volume=50, amount=5, extra_checks = CALLBACK(src, .proc/check_state, 1))) to_chat(user, "You add cables to the frame.") state = 2 icon_state = "box_1" @@ -93,25 +98,23 @@ if(P.tool_behaviour == TOOL_SCREWDRIVER && !anchored) user.visible_message("[user] disassembles the frame.", \ "You start to disassemble the frame...", "You hear banging and clanking.") - if(P.use_tool(src, user, 40, volume=50)) - if(state == 1) - to_chat(user, "You disassemble the frame.") - var/obj/item/stack/sheet/metal/M = new (loc, 5) - M.add_fingerprint(user) - qdel(src) + if(P.use_tool(src, user, 40, volume=50, extra_checks = CALLBACK(src, .proc/check_state, 1))) + to_chat(user, "You disassemble the frame.") + var/obj/item/stack/sheet/metal/M = new (loc, 5) + M.add_fingerprint(user) + qdel(src) return if(P.tool_behaviour == TOOL_WRENCH) to_chat(user, "You start [anchored ? "un" : ""]securing [name]...") - if(P.use_tool(src, user, 40, volume=75)) - if(state == 1) - to_chat(user, "You [anchored ? "un" : ""]secure [name].") - setAnchored(!anchored) + if(P.use_tool(src, user, 40, volume=75, extra_checks = CALLBACK(src, .proc/check_state, 1))) + to_chat(user, "You [anchored ? "un" : ""]secure [name].") + setAnchored(!anchored) return if(2) if(P.tool_behaviour == TOOL_WRENCH) to_chat(user, "You start [anchored ? "un" : ""]securing [name]...") - if(P.use_tool(src, user, 40, volume=75)) + if(P.use_tool(src, user, 40, volume=75, extra_checks = CALLBACK(src, .proc/check_state, 2))) to_chat(user, "You [anchored ? "un" : ""]secure [name].") setAnchored(!anchored) return @@ -169,7 +172,7 @@ if(P.tool_behaviour == TOOL_WRENCH && !circuit.needs_anchored) to_chat(user, "You start [anchored ? "un" : ""]securing [name]...") - if(P.use_tool(src, user, 40, volume=75)) + if(P.use_tool(src, user, 40, volume=75, extra_checks = CALLBACK(src, .proc/check_state, 3))) to_chat(user, "You [anchored ? "un" : ""]secure [name].") setAnchored(!anchored) return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index d9444c3157..f4a65ce984 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1062,7 +1062,7 @@ to_chat(user, "The airlock's motors resist your efforts to force it!") else if(locked) to_chat(user, "The airlock's bolts prevent it from being forced!") - else if( !welded && !operating) + else if(!welded && !operating) if(!beingcrowbarred) //being fireaxe'd var/obj/item/fireaxe/axe = I if(!axe.wielded) @@ -1073,6 +1073,8 @@ INVOKE_ASYNC(src, (density ? .proc/open : .proc/close), 2) if(I.tool_behaviour == TOOL_CROWBAR) + if(!I.can_force_powered) + return if(hasPower() && isElectrified()) shock(user,100)//it's like sticking a forck in a power socket return diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index df64ca72a5..8a09bca0bf 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -116,6 +116,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb var/buffer = null var/show_wires = FALSE var/datum/integrated_io/selected_io = null //functional for integrated circuits. + //Special crowbar + var/can_force_powered = FALSE var/reach = 1 //In tiles, how far this weapon can reach; 1 for adjacent, which is default diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index a541fb8fe3..44121d64d1 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -771,7 +771,10 @@ /obj/item/nullrod/tribal_knife/process() slowdown = rand(-2, 2) - + if(iscarbon(loc)) + var/mob/living/carbon/wielder = loc + if(wielder.is_holding(src)) + wielder.update_equipment_speed_mods() /obj/item/nullrod/pitchfork icon_state = "pitchfork0" diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index 36f89e57f2..f0fd29adbc 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -88,6 +88,7 @@ usesound = 'sound/items/jaws_pry.ogg' force = 15 toolspeed = 0.25 + can_force_powered = TRUE /obj/item/crowbar/power/suicide_act(mob/user) user.visible_message("[user] is putting [user.p_their()] head in [src], it looks like [user.p_theyre()] trying to commit suicide!") diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index ba4578add9..9c0b19cd83 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -433,31 +433,21 @@ destroy_objective.find_target() objectives += destroy_objective else - if(prob(70)) - var/datum/objective/assassinate/once/kill_objective = new - kill_objective.owner = owner - if(team_mode) //No backstabbing while in a team - kill_objective.find_target_by_role(role = ROLE_CHANGELING, role_type = 1, invert = 1) - else - kill_objective.find_target() - objectives += kill_objective - - /*else - var/datum/objective/maroon/maroon_objective = new - maroon_objective.owner = owner - if(team_mode) - maroon_objective.find_target_by_role(role = ROLE_CHANGELING, role_type = 1, invert = 1) - else - maroon_objective.find_target() - objectives += maroon_objective*/ + var/datum/objective/assassinate/once/kill_objective = new + kill_objective.owner = owner + if(team_mode) //No backstabbing while in a team + kill_objective.find_target_by_role(role = ROLE_CHANGELING, role_type = 1, invert = 1) + else + kill_objective.find_target() + objectives += kill_objective - if (!(locate(/datum/objective/escape) in objectives) && escape_objective_possible) - var/datum/objective/escape/escape_with_identity/identity_theft = new - identity_theft.owner = owner - identity_theft.target = kill_objective.target - identity_theft.update_explanation_text() - objectives += identity_theft - escape_objective_possible = FALSE + if(!(locate(/datum/objective/escape) in objectives) && escape_objective_possible && prob(50)) + var/datum/objective/escape/escape_with_identity/identity_theft = new + identity_theft.owner = owner + identity_theft.target = kill_objective.target + identity_theft.update_explanation_text() + objectives += identity_theft + escape_objective_possible = FALSE if (!(locate(/datum/objective/escape) in objectives) && escape_objective_possible) if(prob(50)) diff --git a/code/modules/antagonists/disease/disease_abilities.dm b/code/modules/antagonists/disease/disease_abilities.dm index 496d11bcbc..fc53575bd8 100644 --- a/code/modules/antagonists/disease/disease_abilities.dm +++ b/code/modules/antagonists/disease/disease_abilities.dm @@ -191,8 +191,6 @@ new /datum/disease_ability/symptom/powerful/youth /datum/disease_ability/action/sneeze name = "Voluntary Sneezing" actions = list(/datum/action/cooldown/disease_sneeze) - cost = 2 - required_total_points = 3 short_desc = "Force the host you are following to sneeze, spreading your infection to those in front of them." long_desc = "Force the host you are following to sneeze with extra force, spreading your infection to any victims in a 4 meter cone in front of your host.
Cooldown: 20 seconds" @@ -229,8 +227,6 @@ new /datum/disease_ability/symptom/powerful/youth /datum/disease_ability/action/infect name = "Secrete Infection" actions = list(/datum/action/cooldown/disease_infect) - cost = 2 - required_total_points = 3 short_desc = "Cause all objects your host is touching to become infectious for a limited time, spreading your infection to anyone who touches them." long_desc = "Cause the host you are following to excrete an infective substance from their pores, causing all objects touching their skin to transmit your infection to anyone who touches them for the next 30 seconds. This includes the floor, if they are not wearing shoes, and any items they are holding, if they are not wearing gloves.
Cooldown: 40 seconds" @@ -271,23 +267,20 @@ new /datum/disease_ability/symptom/powerful/youth //healing costs more so you have to techswitch from naughty disease otherwise we'd have friendly disease for easy greentext (no fun!) /datum/disease_ability/symptom/mild - cost = 2 - required_total_points = 4 category = "Symptom (Weak)" /datum/disease_ability/symptom/medium - cost = 4 - required_total_points = 8 category = "Symptom" /datum/disease_ability/symptom/medium/heal cost = 5 + required_total_points = 5 malefit = -1 category = "Symptom (+)" /datum/disease_ability/symptom/powerful cost = 4 - required_total_points = 16 + required_total_points = 10 category = "Symptom (Strong)" /datum/disease_ability/symptom/powerful/heal diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm index ba79cca07a..bb95a8bdf3 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm @@ -566,7 +566,7 @@ human_user.adjustBruteLoss(-10, FALSE) human_user.adjustFireLoss(-10, FALSE) human_user.adjustStaminaLoss(-10, FALSE) - human_user.adjustToxLoss(-10, FALSE) + human_user.adjustToxLoss(-10, FALSE, TRUE) human_user.adjustOxyLoss(-10) /obj/effect/proc_holder/spell/pointed/manse_link diff --git a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm index 9d65396c63..43678e17c6 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm @@ -183,7 +183,7 @@ var/mob/living/carbon/human/human_user = user human_user.adjustBruteLoss(-6, FALSE) human_user.adjustFireLoss(-6, FALSE) - human_user.adjustToxLoss(-6, FALSE) + human_user.adjustToxLoss(-6, FALSE, TRUE) human_user.adjustOxyLoss(-6, FALSE) human_user.adjustStaminaLoss(-20) diff --git a/code/modules/antagonists/traitor/classes/subterfuge.dm b/code/modules/antagonists/traitor/classes/subterfuge.dm index ea073f38c1..73dc455a45 100644 --- a/code/modules/antagonists/traitor/classes/subterfuge.dm +++ b/code/modules/antagonists/traitor/classes/subterfuge.dm @@ -12,11 +12,10 @@ mode = SSticker.mode assassin_prob = max(0,mode.threat_level-40) if(prob(assassin_prob)) - if(prob(assassin_prob)) - var/datum/objective/assassinate/once/kill_objective = new - kill_objective.owner = T.owner - kill_objective.find_target() - T.add_objective(kill_objective) + var/datum/objective/assassinate/once/kill_objective = new + kill_objective.owner = T.owner + kill_objective.find_target() + T.add_objective(kill_objective) else var/list/weights = list() weights["sabo"] = length(subtypesof(/datum/sabotage_objective)) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 4728001699..a558abbfe8 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -220,8 +220,8 @@ parry_max_attacks = INFINITY parry_failed_cooldown_duration = 2.25 SECONDS parry_failed_stagger_duration = 2.25 SECONDS - parry_cooldown = 3 SECONDS - parry_failed_clickcd_duration = 0.5 SECONDS + parry_cooldown = 0 + parry_failed_clickcd_duration = 0 /obj/item/clothing/gloves/botanic_leather name = "botanist's leather gloves" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 8580b153b2..3e72765234 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -1040,6 +1040,12 @@ icon_state = "wbreakpoly" item_state = "wbreakpoly" +/obj/item/clothing/suit/toggle/wbreakpoly/on_toggle(mob/user) + if(suittoggled) + to_chat(usr, "You zip up [src].") + else + to_chat(usr, "You unzip [src].") + /obj/item/clothing/suit/toggle/wbreakpoly/polychromic/ComponentInitialize() . = ..() AddElement(/datum/element/polychromic, list("#464F65", "#916035", "#474747"), 3) diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index aa22834670..98d6809d64 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -110,6 +110,9 @@ suit_toggle(user) return TRUE +/obj/item/clothing/suit/toggle/proc/on_toggle(mob/user) // override this, not suit_toggle, which does checks + to_chat(usr, "You toggle [src]'s [togglename].") + /obj/item/clothing/suit/toggle/ui_action_click() suit_toggle() @@ -119,7 +122,7 @@ if(!can_use(usr)) return 0 - to_chat(usr, "You toggle [src]'s [togglename].") + on_toggle(usr) if(src.suittoggled) src.icon_state = "[initial(icon_state)]" src.suittoggled = FALSE diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index 05a0da2793..152740f932 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -435,7 +435,7 @@ name = "alien drone cube" desc = "Just add water and run!" tastes = list("the jungle" = 1, "acid" = 1) - dried_being = /mob/living/carbon/alien/humanoid/drone + dried_being = /mob/living/simple_animal/hostile/alien/sentinel/cube /obj/item/reagent_containers/food/snacks/cube/goat name = "goat cube" diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 772022a987..66d3154ee3 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -142,10 +142,10 @@ parry_efficiency_considered_successful = 0.01 parry_efficiency_to_counterattack = 0.01 parry_max_attacks = INFINITY - parry_failed_cooldown_duration = 3 SECONDS - parry_failed_stagger_duration = 2 SECONDS - parry_cooldown = 3 SECONDS - parry_failed_clickcd_duration = 0.8 SECONDS + parry_failed_cooldown_duration = 1.5 SECONDS + parry_failed_stagger_duration = 1 SECONDS + parry_cooldown = 0 + parry_failed_clickcd_duration = 0.8 parry_data = list( // yeah it's snowflake "UNARMED_PARRY_STAGGER" = 3 SECONDS, diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 432052d322..a7e305201d 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1454,9 +1454,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/armor_block = target.run_armor_check(affecting, "melee") - if(HAS_TRAIT(user, TRAIT_MAULER)) // maulers get 15 armorpierce because if you're going to punch someone you might as well do a good job of it - armor_block = target.run_armor_check(affecting, "melee", armour_penetration = 15) // lot of good that sec jumpsuit did you - playsound(target.loc, user.dna.species.attack_sound, 25, 1, -1) target.visible_message("[user] [atk_verb]ed [target]!", \ "[user] [atk_verb]ed you!", null, COMBAT_MESSAGE_RANGE, null, \ @@ -1473,9 +1470,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) target.apply_damage(damage*1.5, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus) target.apply_damage(damage*0.5, STAMINA, affecting, armor_block) log_combat(user, target, "kicked") - else if(HAS_TRAIT(user, TRAIT_MAULER)) // mauler punches deal 1.1x raw damage + 1.3x stam damage, and have some armor pierce - target.apply_damage(damage*1.1, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus) - target.apply_damage(damage*1.3, STAMINA, affecting, armor_block) + else if(HAS_TRAIT(user, TRAIT_MAULER)) // mauler punches deal 1.2x raw damage but nstam + target.apply_damage(damage*1.2, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus) log_combat(user, target, "punched (mauler)") else //other attacks deal full raw damage + 2x in stamina damage target.apply_damage(damage, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus) diff --git a/code/modules/mob/living/living_active_parry.dm b/code/modules/mob/living/living_active_parry.dm index c0423286c1..10f8aaf2f4 100644 --- a/code/modules/mob/living/living_active_parry.dm +++ b/code/modules/mob/living/living_active_parry.dm @@ -23,6 +23,9 @@ if(!(combat_flags & COMBAT_FLAG_PARRY_CAPABLE)) to_chat(src, "You are not something that can parry attacks.") return + if(!(mobility_flags & MOBILITY_STAND)) + to_chat(src, "You aren't able to parry without solid footing!") + return // Prioritize item, then martial art, then unarmed. // yanderedev else if time var/obj/item/using_item = get_active_held_item() diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 86467624b5..05d6eda435 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -78,6 +78,15 @@ projectiletype = /obj/item/projectile/neurotox projectilesound = 'sound/weapons/pierce.ogg' +/mob/living/simple_animal/hostile/alien/sentinel/cube + gold_core_spawnable = NO_SPAWN + health = 220 + maxHealth = 220 + melee_damage_lower = 20 + melee_damage_upper = 20 + del_on_death = TRUE + loot = list(/obj/effect/mob_spawn/alien/corpse/humanoid/sentinel) + /mob/living/simple_animal/hostile/alien/queen name = "alien queen" diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 63cb1cc5fa..e53f4087ab 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -9,6 +9,7 @@ var/light_on = FALSE integrity_failure = 0.5 max_integrity = 100 + rad_flags = RAD_PROTECT_CONTENTS armor = list("melee" = 0, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0) var/enabled = 0 // Whether the computer is turned on. diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 45a87e690b..96985514b5 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -45,6 +45,13 @@ trippy = FALSE pH = 8 +//Nicotine is used as a pesticide IRL. +/datum/reagent/drug/nicotine/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(type, 1)) + mytray.adjustToxic(round(chems.get_reagent_amount(type))) + mytray.adjustPests(-rand(1,2)) + /datum/reagent/drug/nicotine/on_mob_life(mob/living/carbon/M) if(prob(1)) var/smoke_message = pick("You feel relaxed.", "You feel calmed.","You feel alert.","You feel rugged.") diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 1975eede70..303fd981fb 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -49,6 +49,11 @@ var/brute_heal = 1 var/burn_heal = 0 +/datum/reagent/consumable/nutriment/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(type, 1)) + mytray.adjustHealth(round(chems.get_reagent_amount(type) * 0.2)) + /datum/reagent/consumable/nutriment/on_mob_life(mob/living/carbon/M) if(!HAS_TRAIT(M, TRAIT_NO_PROCESS_FOOD)) if(prob(50)) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 0959fb58e0..65443b65c7 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -155,6 +155,12 @@ pH = 11 value = REAGENT_VALUE_COMMON +// Healing +/datum/reagent/medicine/cryoxadone/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + mytray.adjustHealth(round(chems.get_reagent_amount(type) * 3)) + mytray.adjustToxic(-round(chems.get_reagent_amount(type) * 3)) + /datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/carbon/M) var/power = -0.00003 * (M.bodytemperature ** 2) + 3 if(M.bodytemperature < T0C) @@ -935,6 +941,12 @@ pH = 0 value = REAGENT_VALUE_RARE +// FEED ME SEYMOUR +/datum/reagent/medicine/strange_reagent/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(type, 1)) + mytray.spawnplant() + /datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(M.stat == DEAD) if(M.suiciding || M.hellbound) //they are never coming back diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 6552d82e95..fe8f923e1a 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -2545,7 +2545,7 @@ M.drowsyness = max(M.drowsyness-5, 0) M.AdjustAllImmobility(-40, FALSE) M.adjustStaminaLoss(-15, FALSE) - M.adjustToxLoss(-3, FALSE) + M.adjustToxLoss(-3, FALSE, TRUE) M.adjustOxyLoss(-3, FALSE) M.adjustBruteLoss(-3, FALSE) M.adjustFireLoss(-3, FALSE) diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 3f0ebcb3e3..2e05f66cf8 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -32,6 +32,12 @@ value = REAGENT_VALUE_VERY_COMMON taste_description = "metal" +//It has stable IN THE NAME. IT WAS MADE FOR THIS MOMENT. +/datum/reagent/stabilizing_agent/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(myseed && chems.has_reagent(type, 1)) + myseed.adjust_instability(-1) + /datum/reagent/clf3 name = "Chlorine Trifluoride" description = "Makes a temporary 3x3 fireball when it comes into existence, so be careful when mixing. ClF3 applied to a surface burns things that wouldn't otherwise burn, sometimes through the very floors of the station and exposing it to the vacuum of space." @@ -167,6 +173,15 @@ taste_description = "burning" value = REAGENT_VALUE_COMMON +// Smells like victory... +/datum/reagent/napalm/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(type, 1)) + if(!(myseed.resistance_flags & FIRE_PROOF)) + mytray.adjustHealth(-round(chems.get_reagent_amount(type) * 6)) + mytray.adjustToxic(round(chems.get_reagent_amount(type) * 7)) + mytray.adjustWeeds(-rand(5,9)) //At least give them a small reward if they bother. + /datum/reagent/napalm/on_mob_life(mob/living/carbon/M) M.adjust_fire_stacks(1) ..() diff --git a/code/modules/surgery/advanced/toxichealing.dm b/code/modules/surgery/advanced/toxichealing.dm index 0e0fd10c1c..376fb43c31 100644 --- a/code/modules/surgery/advanced/toxichealing.dm +++ b/code/modules/surgery/advanced/toxichealing.dm @@ -24,6 +24,13 @@ /datum/surgery_step/toxichealing/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message("[user] starts rejuvenating some of [target]'s flesh back to life.", "You start knitting some of [target]'s flesh back to life.") +/datum/surgery_step/toxichealing/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE) + if(..()) + while((target.getToxLoss() >= 1) || (target.getOxyLoss() >= 1)) + . = ..() + if(!.) + break + /datum/surgery_step/toxichealing/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message("[user] fixes some of [target]'s wounds.", "You succeed in fixing some of [target]'s wounds.") target.heal_bodypart_damage(0,0,30) //Heals stam diff --git a/code/modules/tcg/cards.dm b/code/modules/tcg/cards.dm index ff7d2fee2a..54d6d5abd9 100644 --- a/code/modules/tcg/cards.dm +++ b/code/modules/tcg/cards.dm @@ -548,6 +548,7 @@ desc = "A TCG-branded card binder, specifically for your infinite collection of TCG cards!" icon = 'icons/obj/tcg/misc.dmi' icon_state = "binder" + w_class = WEIGHT_CLASS_SMALL var/list/cards = list() var/list/decks = list() diff --git a/code/modules/vore/eating/vorepanel.dm b/code/modules/vore/eating/vorepanel.dm index 6e3951e60a..5622ec0382 100644 --- a/code/modules/vore/eating/vorepanel.dm +++ b/code/modules/vore/eating/vorepanel.dm @@ -4,8 +4,8 @@ #define BELLIES_MAX 20 #define BELLIES_NAME_MIN 2 -#define BELLIES_NAME_MAX 12 -#define BELLIES_DESC_MAX 1024 +#define BELLIES_NAME_MAX 24 +#define BELLIES_DESC_MAX 4096 /mob/living/proc/insidePanel() set name = "Vore Panel" diff --git a/html/changelog.html b/html/changelog.html index 56ecc7ee31..65e2d571a2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,79 @@ -->
+

28 February 2021

+

Putnam3145 updated:

+ +

R3dtail updated:

+ +

SandPoot updated:

+ +

dzahlus updated:

+ + +

27 February 2021

+

Hatterhat updated:

+ +

Putnam3145 updated:

+ +

TheObserver-sys updated:

+ +

kappa-sama updated:

+ +

keronshb updated:

+ +

kiwedespars updated:

+ +

silicons updated:

+ + +

26 February 2021

+

DeltaFire15 updated:

+ + +

25 February 2021

+

DeltaFire15 updated:

+ + +

24 February 2021

+

SandPoot updated:

+ +

silicons updated:

+ +

23 February 2021

keronshb updated: