diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 805e72cfcb..b2caf614b3 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -71,6 +71,7 @@ #define TRAIT_MUSICIAN "musician" #define TRAIT_CROCRIN_IMMUNE "crocin_immune" #define TRAIT_NYMPHO "nymphomania" +#define TRAIT_MASO "masochism" // common trait sources #define TRAIT_GENERIC "generic" diff --git a/code/datums/ert.dm b/code/datums/ert.dm index d3c256308d..d61c95c8f2 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -21,6 +21,8 @@ /datum/ert/amber code = "Amber" + leader_role = /datum/antagonist/ert/commander/red + roles = list(/datum/antagonist/ert/security/red, /datum/antagonist/ert/medic/red, /datum/antagonist/ert/engineer/red) /datum/ert/red leader_role = /datum/antagonist/ert/commander/red diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index 94f5e63afb..cb3cbf2aa6 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -80,9 +80,21 @@ /obj/machinery/computer/atmos_alert/update_icon() ..() + cut_overlays() + SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) + var/overlay_state = icon_screen if(stat & (NOPOWER|BROKEN)) + add_overlay("[icon_keyboard]_off") return + add_overlay(icon_keyboard) if(priority_alarms.len) + overlay_state = "alert:2" add_overlay("alert:2") else if(minor_alarms.len) + overlay_state = "alert:1" add_overlay("alert:1") + else + overlay_state = "alert:0" + add_overlay("alert:0") + SSvis_overlays.add_vis_overlay(src, icon, overlay_state, layer, plane, dir) + SSvis_overlays.add_vis_overlay(src, icon, overlay_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir, alpha=128) diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 6769244335..36ba4b0c94 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -76,12 +76,23 @@ /obj/machinery/computer/station_alert/update_icon() ..() + cut_overlays() + SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) + var/overlay_state = icon_screen if(stat & (NOPOWER|BROKEN)) + add_overlay("[icon_keyboard]_off") return + add_overlay(icon_keyboard) var/active_alarms = FALSE for(var/cat in alarms) var/list/L = alarms[cat] if(L.len) active_alarms = TRUE if(active_alarms) + overlay_state = "alert:2" add_overlay("alert:2") + else + overlay_state = "alert:0" + add_overlay("alert:0") + SSvis_overlays.add_vis_overlay(src, icon, overlay_state, layer, plane, dir) + SSvis_overlays.add_vis_overlay(src, icon, overlay_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir, alpha=128) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 9ff1b5cf01..9314faab27 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -449,7 +449,11 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) return 0 /obj/item/proc/eyestab(mob/living/carbon/M, mob/living/carbon/user) - + if(user.has_trait(TRAIT_PACIFISM)) + to_chat(user, "You don't want to harm [M]!") + return + if(user.has_trait(TRAIT_CLUMSY) && prob(50)) + M = user var/is_human_victim = 0 var/obj/item/bodypart/affecting = M.get_bodypart(BODY_ZONE_HEAD) if(ishuman(M)) diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 11d6f264b8..ef2aa825e7 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -49,8 +49,6 @@ forkload = null else if(user.zone_selected == BODY_ZONE_PRECISE_EYES) - if(user.has_trait(TRAIT_CLUMSY) && prob(50)) - M = user return eyestab(M,user) else return ..() @@ -79,8 +77,6 @@ /obj/item/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user) if(user.zone_selected == BODY_ZONE_PRECISE_EYES) - if(user.has_trait(TRAIT_CLUMSY) && prob(50)) - M = user return eyestab(M,user) else return ..() diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 3a35f4d8ef..8ed0f273e6 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -283,7 +283,7 @@ else var/turf/T = get_turf(src) if(!isspaceturf(T)) - consume_turf(T) + shard.consume_turf(T) /obj/item/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag) . = ..() @@ -330,18 +330,7 @@ else if(!isturf(target)) shard.Bumped(target) else - consume_turf(target) - -/obj/item/melee/supermatter_sword/proc/consume_turf(turf/T) - var/oldtype = T.type - var/turf/newT = T.ScrapeAway() - if(newT.type == oldtype) - return - playsound(T, 'sound/effects/supermatter.ogg', 50, 1) - T.visible_message("[T] smacks into [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") - shard.Consume() - T.CalculateAdjacentTurfs() + shard.consume_turf(target) /obj/item/melee/supermatter_sword/add_blood_DNA(list/blood_dna) return FALSE diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 703de902b6..28a744fbb1 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -635,6 +635,13 @@ attack_verb = list("lit", "flickered", "flashed") squeak_override = list('sound/weapons/magout.ogg' = 1) +/obj/item/toy/plush/box + name = "cardboard plushie" + desc = "A toy box plushie, it holds cotten. Only a baddie would place a bomb through the postal system..." + icon_state = "box" + item_state = "box" + attack_verb = list("open", "closed", "packed", "hidden", "rigged", "bombed", "sent", "gave") + /obj/item/toy/plush/borgplushie name = "robot plushie" desc = "An adorable stuffed toy of a robot." @@ -659,6 +666,12 @@ icon_state = "neeb" item_state = "neeb" +/obj/item/toy/plush/borgplushie/bhijn + desc = "An adorable stuffed toy of a IPC." + icon_state = "bhijn" + item_state = "bhijn" + attack_verb = list("closed", "reworked", "merged") + /obj/item/toy/plush/bird name = "bird plushie" desc = "An adorable stuffed plushie that resembles an avian." @@ -743,6 +756,7 @@ /obj/item/toy/plush/mammal/edgar icon_state = "edgar" item_state = "edgar" + attack_verb = list("collared", "tricked", "headpatted") /obj/item/toy/plush/mammal/frank icon_state = "frank" @@ -777,6 +791,16 @@ icon_state = "zed" item_state = "zed" +/obj/item/toy/plush/mammal/justin + icon_state = "justin" + item_state = "justin" + attack_verb = list("buttslapped", "fixed") + +/obj/item/toy/plush/mammal/reece + icon_state = "reece" + item_state = "reece" + attack_verb = list("healed", "cured", "demoted") + /obj/item/toy/plush/mammal/dog desc = "An adorable stuffed toy that resembles a canine." icon_state = "katlin" @@ -840,6 +864,12 @@ icon_state = "drew" item_state = "drew" +/obj/item/toy/plush/catgirl/trilby + desc = "A masked stuffed toy that resembles a feline scientist." + icon_state = "trilby" + item_state = "trilby" + attack_verb = list("pred", "coded", "remembered") + /obj/item/toy/plush/catgirl/fermis name = "medcat plushie" desc = "An affectionate stuffed toy that resembles a certain medcat, comes complete with battery operated wagging tail!! You get the impression she's cheering you on to to find happiness and be kind to people." diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 1171bd7bf7..30c7115346 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -153,3 +153,16 @@ slot_flags = null to_chat(user, "[src] can now be concealed.") add_fingerprint(user) + +/obj/item/shield/makeshift + name = "metal shield" + desc = "A large shield made of wired and welded sheets of metal. The handle is made of cloth and leather making it unwieldy." + armor = list("melee" = 25, "bullet" = 25, "laser" = 5, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 80) + lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' + item_state = "makeshift_shield" + materials = list(MAT_METAL = 18000) + slot_flags = null + block_chance = 25 + force = 5 + throwforce = 7 diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 2e8cb569a6..217b53c928 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -75,11 +75,6 @@ return ..() if(user.zone_selected != BODY_ZONE_PRECISE_EYES && user.zone_selected != BODY_ZONE_HEAD) return ..() - if(user.has_trait(TRAIT_PACIFISM)) - to_chat(user, "You don't want to harm [M]!") - return - if(user.has_trait(TRAIT_CLUMSY) && prob(50)) - M = user return eyestab(M,user) /obj/item/screwdriver/brass @@ -103,7 +98,7 @@ /obj/item/screwdriver/abductor/get_belt_overlay() return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver_nuke") - + /obj/item/screwdriver/power name = "hand drill" desc = "A simple powered hand drill. It's fitted with a screw bit." diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index c6d657b271..b4310a7f42 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -46,7 +46,8 @@ /datum/outfit/ert/commander/alert name = "ERT Commander - High Alert" - + + suit = /obj/item/clothing/suit/space/hardsuit/ert/alert glasses = /obj/item/clothing/glasses/thermal/eyepatch backpack_contents = list(/obj/item/storage/box/engineer=1,\ /obj/item/melee/baton/loaded=1,\ @@ -80,7 +81,8 @@ /datum/outfit/ert/security/alert name = "ERT Security - High Alert" - + + suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/sec backpack_contents = list(/obj/item/storage/box/engineer=1,\ /obj/item/storage/box/handcuffs=1,\ /obj/item/clothing/mask/gas/sechailer/swat=1,\ @@ -117,6 +119,7 @@ /datum/outfit/ert/medic/alert name = "ERT Medic - High Alert" + suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/med backpack_contents = list(/obj/item/storage/box/engineer=1,\ /obj/item/melee/baton/loaded=1,\ /obj/item/clothing/mask/gas/sechailer/swat=1,\ @@ -153,6 +156,7 @@ /datum/outfit/ert/engineer/alert name = "ERT Engineer - High Alert" + suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/engi backpack_contents = list(/obj/item/storage/box/engineer=1,\ /obj/item/melee/baton/loaded=1,\ /obj/item/clothing/mask/gas/sechailer/swat=1,\ diff --git a/code/modules/clothing/shoes/taeclowndo.dm b/code/modules/clothing/shoes/taeclowndo.dm new file mode 100644 index 0000000000..20d9fa6b70 --- /dev/null +++ b/code/modules/clothing/shoes/taeclowndo.dm @@ -0,0 +1,36 @@ +/obj/item/clothing/shoes/clown_shoes/taeclowndo + var/list/spelltypes = list ( + /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pie, + /obj/effect/proc_holder/spell/aimed/banana_peel, + /obj/effect/proc_holder/spell/targeted/touch/megahonk, + /obj/effect/proc_holder/spell/targeted/touch/bspie, + ) + var/list/spells = list() + + +/obj/item/clothing/shoes/clown_shoes/taeclowndo/equipped(mob/user, slot) + . = ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(!(H.has_trait(TRAIT_CLUMSY)) && !(H.mind && H.mind.assigned_role == "Clown")) + return + if(slot == SLOT_SHOES) + spells = new + for(var/spell in spelltypes) + var/obj/effect/proc_holder/spell/S = new spell + spells += S + S.charge_counter = 0 + S.start_recharge() + H.mind.AddSpell(S) + +/obj/item/clothing/shoes/clown_shoes/taeclowndo/dropped(mob/user) + . = ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(H.get_item_by_slot(SLOT_SHOES) == src) + for(var/spell in spells) + var/obj/effect/proc_holder/spell/S = spell + H.mind.spell_list.Remove(S) + qdel(S) \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 652c0048c2..6d7c1036be 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -8,7 +8,8 @@ Contains: - NASA Voidsuit - Father Christmas' magical clothes - Pirate's spacesuit - - ERT hardsuit: command, sec, engi, med + - ERT hardsuit: Command, Sec, Engi, Med + - ERT High Alarm - Command, Sec, Engi, Med - EVA spacesuit - Freedom's spacesuit (freedom from vacuum's oppression) - Carp hardsuit @@ -185,6 +186,7 @@ Contains: slowdown = 0 strip_delay = 130 resistance_flags = ACID_PROOF + tauric = TRUE //Citadel Add for tauric hardsuits //ERT Security /obj/item/clothing/head/helmet/space/hardsuit/ert/sec @@ -198,7 +200,6 @@ Contains: icon_state = "ert_security" item_state = "ert_security" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/sec - tauric = TRUE //Citadel Add for tauric hardsuits //ERT Engineering /obj/item/clothing/head/helmet/space/hardsuit/ert/engi @@ -212,7 +213,6 @@ Contains: icon_state = "ert_engineer" item_state = "ert_engineer" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/engi - tauric = TRUE //Citadel Add for tauric hardsuits //ERT Medical /obj/item/clothing/head/helmet/space/hardsuit/ert/med @@ -227,8 +227,73 @@ Contains: item_state = "ert_medical" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/med species_exception = list(/datum/species/angel) + + //Red alert ERT + +/obj/item/clothing/head/helmet/space/hardsuit/ert/alert + name = "emergency response unit helmet" + desc = "Red alert command helmet for the ERT. This one is more armored than its standard version." + icon_state = "hardsuit0-ert_commander-alert" + item_state = "hardsuit0-ert_commander-alert" + item_color = "ert_commander-alert" + armor = list("melee" = 70, "bullet" = 55, "laser" = 50, "energy" = 50, "bomb" = 65, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) + strip_delay = 130 + item_flags = NODROP + brightness_on = 8 + resistance_flags = FIRE_PROOF | ACID_PROOF + +/obj/item/clothing/suit/space/hardsuit/ert/alert + name = "emergency response team suit" + desc = "Red alert command suit for the ERT. This one is more armored than its standard version." + icon_state = "ert_command-alert" + item_state = "ert_command-alert" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) + armor = list("melee" = 70, "bullet" = 55, "laser" = 50, "energy" = 50, "bomb" = 65, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) + strip_delay = 130 + resistance_flags = FIRE_PROOF | ACID_PROOF tauric = TRUE //Citadel Add for tauric hardsuits + //ERT Security +/obj/item/clothing/head/helmet/space/hardsuit/ert/alert/sec + desc = "Red alert security helmet for the ERT. This one is more armored than its standard version." + icon_state = "hardsuit0-ert_security-alert" + item_state = "hardsuit0-ert_security-alert" + item_color = "ert_security-alert" + +/obj/item/clothing/suit/space/hardsuit/ert/alert/sec + desc = "Red alert security suit for the ERT. This one is more armored than its standard version." + icon_state = "ert_security-alert" + item_state = "ert_security-alert" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert/sec + + //ERT Engineering +/obj/item/clothing/head/helmet/space/hardsuit/ert/alert/engi + desc = "Red alert engineer helmet for the ERT. This one is more armored than its standard version." + icon_state = "hardsuit0-ert_engineer-alert" + item_state = "hardsuit0-ert_engineer-alert" + item_color = "ert_engineer-alert" + +/obj/item/clothing/suit/space/hardsuit/ert/alert/engi + desc = "Red alert engineer suit for the ERT. This one is more armored than its standard version." + icon_state = "ert_engineer-alert" + item_state = "ert_engineer-alert" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert/engi + + //ERT Medical +/obj/item/clothing/head/helmet/space/hardsuit/ert/alert/med + desc = "Red alert medical helmet for the ERT. This one is more armored than its standard version." + icon_state = "hardsuit0-ert_medical-alert" + item_state = "hardsuit0-ert_medical-alert" + item_color = "ert_medical-alert" + +/obj/item/clothing/suit/space/hardsuit/ert/alert/med + desc = "Red alert medical suit for the ERT. This one is more armored than its standard version." + icon_state = "ert_medical-alert" + item_state = "ert_medical-alert" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert/med + species_exception = list(/datum/species/angel) + /obj/item/clothing/suit/space/eva name = "EVA suit" icon_state = "space" @@ -280,7 +345,6 @@ Contains: item_flags = NODROP mutantrace_variation = NO_MUTANTRACE_VARIATION - /obj/item/clothing/suit/space/hardsuit/carp name = "carp space suit" desc = "A slimming piece of dubious space carp technology, you suspect it won't stand up to hand-to-hand blows." @@ -291,7 +355,6 @@ Contains: allowed = list(/obj/item/tank/internals, /obj/item/gun/ballistic/automatic/speargun) //I'm giving you a hint here helmettype = /obj/item/clothing/head/helmet/space/hardsuit/carp - /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal name = "paranormal response unit helmet" desc = "A helmet worn by those who deal with paranormal threats for a living." diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 481fbade71..5d534e00a7 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -24,11 +24,11 @@ ToggleHood() /obj/item/clothing/suit/hooded/item_action_slot_check(slot, mob/user) - if(slot == SLOT_WEAR_SUIT) + if(slot == SLOT_WEAR_SUIT || slot == SLOT_NECK) return 1 /obj/item/clothing/suit/hooded/equipped(mob/user, slot) - if(slot != SLOT_WEAR_SUIT) + if(slot != SLOT_WEAR_SUIT && slot != SLOT_NECK) RemoveHood() ..() diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index c3858da6ad..ca10d5092f 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -54,6 +54,18 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON +/datum/crafting_recipe/makeshiftshield + name = "Makeshift Metal Shield" + result = /obj/item/shield/makeshift + reqs = list(/obj/item/stack/cable_coil = 30, + /obj/item/stack/sheet/metal = 10, + /obj/item/stack/sheet/cloth = 2, + /obj/item/stack/sheet/leather = 3) + tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + time = 100 + category = CAT_WEAPONRY + subcategory = CAT_WEAPON + /datum/crafting_recipe/molotov name = "Molotov" result = /obj/item/reagent_containers/food/drinks/bottle/molotov diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index f2b195c32d..2b37065709 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -108,9 +108,9 @@ All foods are distributed among various categories. Use common sense. else if(fullness > 150 && fullness < 500) user.visible_message("[user] takes a [eatverb] from \the [src].", "You take a [eatverb] from \the [src].") else if(fullness > 500 && fullness < 600) - user.visible_message("[user] unwillingly takes a [eatverb] of a bit of \the [src].", "You unwillingly take a [eatverb] of a bit of \the [src].") + user.visible_message("[user] unwillingly takes a [eatverb] of a bit of \the [src].", "You unwillingly take a [eatverb] of a bit of \the [src].") else if(fullness > (600 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat - user.visible_message("[user] cannot force any more of \the [src] to go down [user.p_their()] throat!", "You cannot force any more of \the [src] to go down your throat!") + user.visible_message("[user] cannot force any more of \the [src] to go down [user.p_their()] throat!", "You cannot force any more of \the [src] to go down your throat!") return 0 if(M.has_trait(TRAIT_VORACIOUS)) M.changeNext_move(CLICK_CD_MELEE * 0.5) //nom nom nom diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm index 04177783e6..8264b4153e 100644 --- a/code/modules/food_and_drinks/food/snacks_pie.dm +++ b/code/modules/food_and_drinks/food/snacks_pie.dm @@ -62,6 +62,28 @@ /obj/item/reagent_containers/food/snacks/pie/cream/nostun stunning = FALSE +/obj/item/reagent_containers/food/snacks/pie/cream/body + +/obj/item/reagent_containers/food/snacks/pie/cream/body/Destroy() + var/turf/T = get_turf(src) + for(var/atom/movable/A in contents) + A.forceMove(T) + A.throw_at(T, 1, 1) + . = ..() + +/obj/item/reagent_containers/food/snacks/pie/cream/body/On_Consume(mob/living/carbon/M) + if(!reagents.total_volume) //so that it happens on the last bite + if(iscarbon(M) && contents.len) + var/turf/T = get_turf(src) + for(var/atom/movable/A in contents) + A.forceMove(T) + A.throw_at(T, 1, 1) + M.visible_message("[src] bursts out of [M]!") + M.emote("scream") + M.Knockdown(40) + M.adjustBruteLoss(60) + return ..() + /obj/item/reagent_containers/food/snacks/pie/berryclafoutis name = "berry clafoutis" desc = "No black birds, this is a good sign." diff --git a/code/modules/integrated_electronics/subtypes/weaponized.dm b/code/modules/integrated_electronics/subtypes/weaponized.dm index f9259359a3..7bccbfafcd 100644 --- a/code/modules/integrated_electronics/subtypes/weaponized.dm +++ b/code/modules/integrated_electronics/subtypes/weaponized.dm @@ -215,7 +215,7 @@ The 'fire' activator will cause the mechanism to attempt to launch objects at the coordinates, if possible. Note that the \ projectile needs to be inside the machine, or on an adjacent tile, and must be medium sized or smaller. The assembly \ must also be a gun if you wish to launch something while the assembly is in hand." - complexity = 75 + complexity = 50 w_class = WEIGHT_CLASS_SMALL size = 4 cooldown_per_use = 30 @@ -306,7 +306,7 @@ desc = "Used to stun a target holding the device via electricity." icon_state = "power_relay" extended_desc = "Attempts to stun the holder of this device, with the strength input being the strength of the stun, from 1 to 70." - complexity = 60 + complexity = 30 size = 4 inputs = list("strength" = IC_PINTYPE_NUMBER) activators = list("stun" = IC_PINTYPE_PULSE_IN, "on success" = IC_PINTYPE_PULSE_OUT, "on fail" = IC_PINTYPE_PULSE_OUT) @@ -340,4 +340,4 @@ var/mob/living/carbon/human/H = L H.forcesay(GLOB.hit_appends) - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 3930d19168..9a0a978d7a 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1494,7 +1494,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) ) if (target.canbearoused) target.adjustArousalLoss(5) - if (target.getArousalLoss() >= 100 && ishuman(target) && target.has_trait(TRAIT_NYMPHO) && target.has_dna()) + if (target.getArousalLoss() >= 100 && ishuman(target) && target.has_trait(TRAIT_MASO) && target.has_dna()) target.mob_climax(forced_climax=TRUE) if (!target.has_trait(TRAIT_NYMPHO)) stop_wagging_tail(target) @@ -1727,6 +1727,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(BP) if(damage > 0 ? BP.receive_damage(damage * hit_percent * brutemod * H.physiology.brute_mod, 0) : BP.heal_damage(abs(damage * hit_percent * brutemod * H.physiology.brute_mod), 0)) H.update_damage_overlays() + if(H.has_trait(TRAIT_MASO)) + H.adjustArousalLoss(damage * brutemod * H.physiology.brute_mod) + if (H.getArousalLoss() >= 100 && ishuman(H) && H.has_dna()) + H.mob_climax(forced_climax=TRUE) + else//no bodypart, we deal damage with a more general method. H.adjustBruteLoss(damage * hit_percent * brutemod * H.physiology.brute_mod) if(BURN) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index ae662c7628..b6717f2932 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -103,21 +103,23 @@ //CIT CHANGES START HERE - makes it so resting stops you from moving through standing folks without a short delay if(resting && !L.resting) - if(attemptingcrawl) - return TRUE - if(getStaminaLoss() >= STAMINA_SOFTCRIT) - to_chat(src, "You're too exhausted to crawl under [L].") - return TRUE - attemptingcrawl = TRUE var/origtargetloc = L.loc - visible_message("[src] is attempting to crawl under [L].", "You are now attempting to crawl under [L].") - if(do_after(src, CRAWLUNDER_DELAY, target = src)) - if(resting) - var/src_passmob = (pass_flags & PASSMOB) - pass_flags |= PASSMOB - Move(origtargetloc) - if(!src_passmob) - pass_flags &= ~PASSMOB + if(!pulledby) + if(attemptingcrawl) + return TRUE + if(getStaminaLoss() >= STAMINA_SOFTCRIT) + to_chat(src, "You're too exhausted to crawl under [L].") + return TRUE + attemptingcrawl = TRUE + visible_message("[src] is attempting to crawl under [L].", "You are now attempting to crawl under [L].") + if(!do_after(src, CRAWLUNDER_DELAY, target = src) || !resting) + attemptingcrawl = FALSE + return TRUE + var/src_passmob = (pass_flags & PASSMOB) + pass_flags |= PASSMOB + Move(origtargetloc) + if(!src_passmob) + pass_flags &= ~PASSMOB attemptingcrawl = FALSE return TRUE //END OF CIT CHANGES diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index ad94d577ea..99b4a3f27e 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -295,6 +295,16 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) E.energy = power qdel(src) +/obj/machinery/power/supermatter_crystal/proc/consume_turf(turf/T) + var/oldtype = T.type + var/turf/newT = T.ScrapeAway() + if(newT.type == oldtype) + return + playsound(T, 'sound/effects/supermatter.ogg', 50, 1) + T.visible_message("[T] smacks into [src] and rapidly flashes to ash.",\ + "You hear a loud crack as you are washed with a wave of heat.") + T.CalculateAdjacentTurfs() + /obj/machinery/power/supermatter_crystal/process_atmos() var/turf/T = loc @@ -303,6 +313,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(!istype(T)) //We are in a crate or somewhere that isn't turf, if we return to turf resume processing but for now. return //Yeah just stop. + if(istype(T, /turf/closed)) + consume_turf(T) if(power) soundloop.volume = min(40, (round(power/100)/50)+1) // 5 +1 volume per 20 power. 2500 power is max diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 5071150e24..a65a1f4adb 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -319,7 +319,7 @@ victim.blind_eyes(2) victim.confused = max(M.confused, 3) victim.damageoverlaytemp = 60 - victim.Knockdown(60) + victim.Knockdown(60, override_stamdmg = min(reac_volume * 3, 15)) return else if ( eyes_covered ) // Eye cover is better than mouth cover victim.blur_eyes(3) @@ -332,7 +332,7 @@ victim.blind_eyes(3) victim.confused = max(M.confused, 6) victim.damageoverlaytemp = 75 - victim.Knockdown(100) + victim.Knockdown(100, override_stamdmg = min(reac_volume * 5, 25)) victim.update_damage_hud() /datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/carbon/M) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index a51134f84d..afb985120e 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -18,6 +18,7 @@ var/spray_range = 3 //the range of tiles the sprayer will reach when in spray mode. var/stream_range = 1 //the range of tiles the sprayer will reach when in stream mode. var/stream_amount = 10 //the amount of reagents transfered when in stream mode. + var/spray_delay = 3 //The amount of sleep() delay between each chempuff step. var/can_fill_from_container = TRUE amount_per_transfer_from_this = 5 volume = 250 @@ -64,7 +65,7 @@ /obj/item/reagent_containers/spray/proc/spray(atom/A) - var/range = max(min(current_range, get_dist(src, A)), 1) + var/range = CLAMP(get_dist(src, A), 1, current_range) var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src)) D.create_reagents(amount_per_transfer_from_this) var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed @@ -74,7 +75,7 @@ else reagents.trans_to(D, amount_per_transfer_from_this, 1/range) D.color = mix_color_from_reagents(D.reagents.reagent_list) - var/wait_step = max(round(2+3/range), 2) + var/wait_step = max(round(2+ spray_delay * INVERSE(range)), 2) do_spray(A, wait_step, D, range, puff_reagent_left) /obj/item/reagent_containers/spray/proc/do_spray(atom/A, wait_step, obj/effect/decal/chempuff/D, range, puff_reagent_left) @@ -166,7 +167,7 @@ user.visible_message("[user] decided life was worth living.") return -//Drying Agent +//Drying Agent /obj/item/reagent_containers/spray/drying_agent name = "drying agent spray" desc = "A spray bottle for drying agent." @@ -194,6 +195,7 @@ righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' volume = 40 stream_range = 4 + spray_delay = 1 amount_per_transfer_from_this = 5 list_reagents = list("condensedcapsaicin" = 40) diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index 3d48dd51ec..05e4c667f6 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -59,6 +59,14 @@ build_path = /obj/item/reagent_containers/food/snacks/monkeycube category = list("initial", "Food") +/datum/design/smeat + name = "Biomass Meat Slab" + id = "smeat" + build_type = BIOGENERATOR + materials = list(MAT_BIOMASS = 175) + build_path = /obj/item/reagent_containers/food/snacks/meat/slab/synthmeat + category = list("initial", "Food") + /datum/design/ez_nut name = "E-Z Nutrient" id = "ez_nut" diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm index 35f9a8f50a..73a428af71 100644 --- a/code/modules/spells/spell_types/aimed.dm +++ b/code/modules/spells/spell_types/aimed.dm @@ -74,6 +74,8 @@ /obj/effect/proc_holder/spell/aimed/proc/fire_projectile(mob/living/user, atom/target) current_amount-- + if(!projectile_type) + return for(var/i in 1 to projectiles_per_fire) var/obj/item/projectile/P = new projectile_type(user.loc) P.firer = user diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index 919d87b4c7..06d1fc3dc5 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -94,3 +94,87 @@ M.Stun(40) M.petrify() return ..() + + +/obj/item/melee/touch_attack/megahonk + name = "\improper honkmother's blessing" + desc = "You've got a feeling they won't be laughing after this one. Honk honk." + catchphrase = "HONKDOOOOUKEN!" + on_use_sound = 'sound/items/airhorn.ogg' + icon = 'icons/mecha/mecha_equipment.dmi' + icon_state = "mecha_honker" + +/obj/item/melee/touch_attack/megahonk/afterattack(atom/target, mob/living/carbon/user, proximity) + if(!proximity || !iscarbon(target) || !iscarbon(user) || user.handcuffed) + return + user.say(catchphrase, forced = "spell") + playsound(get_turf(target), on_use_sound,100,1) + for(var/mob/living/carbon/M in (hearers(1, target) - user)) //3x3 around the target, not affecting the user + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(istype(H.ears, /obj/item/clothing/ears/earmuffs)) + continue + var/mul = (M==target ? 1 : 0.5) + to_chat(M, "HONK") + M.SetSleeping(0) + M.stuttering += 20*mul + M.adjustEarDamage(0, 30*mul) + M.Knockdown(60*mul) + if(prob(40)) + M.Knockdown(200*mul) + else + M.Jitter(500*mul) + + charges-- + if(charges <= 0) + qdel(src) + +/obj/item/melee/touch_attack/megahonk/attack_self(mob/user) + . = ..() + to_chat(user, "\The [src] disappears, to honk another day.") + qdel(src) + +/obj/item/melee/touch_attack/bspie + name = "\improper bluespace pie" + desc = "A thing you can barely comprehend as you hold it in your hand. You're fairly sure you could fit an entire body inside." + on_use_sound = 'sound/magic/demon_consume.ogg' + icon = 'icons/obj/food/piecake.dmi' + icon_state = "frostypie" + color = "#000077" + +/obj/item/melee/touch_attack/bspie/attack_self(mob/user) + . = ..() + to_chat(user, "You smear \the [src] on your chest! ") + qdel(src) + +/obj/item/melee/touch_attack/bspie/afterattack(atom/target, mob/living/carbon/user, proximity) + if(!proximity || !iscarbon(target) || !iscarbon(user) || user.handcuffed) + return + if(target == user) + to_chat(user, "You smear \the [src] on your chest!") + qdel(src) + return + var/mob/living/carbon/M = target + + user.visible_message("[user] is trying to stuff [M]\s body into \the [src]!") + if(do_mob(user, M, 250)) + var/name = M.real_name + var/obj/item/reagent_containers/food/snacks/pie/cream/body/pie = new(get_turf(M)) + pie.name = "\improper [name] [pie.name]" + + playsound(get_turf(target), on_use_sound, 50, 1) + + /* + var/obj/item/bodypart/head = M.get_bodypart("head") + if(head) + head.drop_limb() + head.throw_at(get_turf(head), 1, 1) + qdel(M) + */ + M.forceMove(pie) + + + charges-- + + if(charges <= 0) + qdel(src) diff --git a/code/modules/spells/spell_types/taeclowndo.dm b/code/modules/spells/spell_types/taeclowndo.dm new file mode 100644 index 0000000000..d2b0782b07 --- /dev/null +++ b/code/modules/spells/spell_types/taeclowndo.dm @@ -0,0 +1,86 @@ +/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pie + name = "Summon Creampie" + desc = "A clown's weapon of choice. Use this to summon a fresh pie, just waiting to acquaintain itself with someone's face." + invocation_type = "none" + include_user = 1 + range = -1 + clothes_req = 0 + item_type = /obj/item/reagent_containers/food/snacks/pie/cream + + charge_max = 30 + cooldown_min = 30 + action_icon = 'icons/obj/food/piecake.dmi' + action_icon_state = "pie" + +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/obj/effect/proc_holder/spell/aimed/banana_peel + name = "Conjure Banana Peel" + desc = "Make a banana peel appear out of thin air right under someone's feet!" + charge_type = "recharge" + charge_max = 100 + cooldown_min = 100 + clothes_req = 0 + invocation_type = "none" + range = 7 + selection_type = "view" + projectile_type = null + + active_msg = "You focus, your mind reaching to the clown dimension, ready to make a peel matrialize wherever you want!" + deactive_msg = "You relax, the peel remaining right in the \"thin air\" it would appear out of." + action_icon = 'icons/obj/hydroponics/harvest.dmi' + base_icon_state = "banana_peel" + action_icon_state = "banana" + + +/obj/effect/proc_holder/spell/aimed/banana_peel/cast(list/targets, mob/user = usr) + var/target = get_turf(targets[1]) + + if(get_dist(user,target)>range) + to_chat(user, "\The [target] is too far away!") + return + + . = ..() + new /obj/item/grown/bananapeel(target) + +/obj/effect/proc_holder/spell/aimed/banana_peel/update_icon() + if(!action) + return + if(active) + action.button_icon_state = base_icon_state + else + action.button_icon_state = action_icon_state + + action.UpdateButtonIcon() + return +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/obj/effect/proc_holder/spell/targeted/touch/megahonk + name = "Mega HoNk" + desc = "This spell channels your inner clown powers, concentrating them into one massive HONK." + hand_path = /obj/item/melee/touch_attack/megahonk + + charge_max = 100 + clothes_req = 0 + cooldown_min = 100 + + action_icon = 'icons/mecha/mecha_equipment.dmi' + action_icon_state = "mecha_honker" + +///////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/obj/effect/proc_holder/spell/targeted/touch/bspie + name = "Bluespace Banana Pie" + desc = "An entire body would fit in there!" + hand_path = /obj/item/melee/touch_attack/bspie + + charge_max = 450 + clothes_req = 0 + cooldown_min = 450 + + action_icon = 'icons/obj/food/piecake.dmi' + action_icon_state = "frostypie" + + + + diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 503b1bd743..a5872b6741 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -388,7 +388,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) autoinjectors for rapid application on up to two targets each, a syringe, and a bottle containing \ the BVAK solution." item = /obj/item/storage/box/syndie_kit/tuberculosisgrenade - cost = 12 + cost = 8 surplus = 35 include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) restricted = TRUE @@ -768,7 +768,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) The concussive effect from the explosion will knock the recipient out for a short period, and deafen \ them for longer. Beware, it has a chance to detonate your PDA." item = /obj/item/cartridge/virus/syndicate - cost = 6 + cost = 5 restricted = TRUE /datum/uplink_item/stealthy_weapons/suppressor @@ -837,6 +837,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) surplus = 0 include_modes = list(/datum/game_mode/nuclear/clown_ops) +datum/uplink_item/stealthy_tools/taeclowndo_shoes + name = "Tae-clown-do Shoes" + desc = "A pair of shoes for the most elite agents of the honkmotherland. They grant the mastery of taeclowndo with some honk-fu moves as long as they're worn." + cost = 12 + item = /obj/item/clothing/shoes/clown_shoes/taeclowndo + include_modes = list(/datum/game_mode/nuclear/clown_ops) + /datum/uplink_item/stealthy_tools/frame name = "F.R.A.M.E. PDA Cartridge" desc = "When inserted into a personal digital assistant, this cartridge gives you five PDA viruses which \ @@ -894,7 +901,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) desc = "Screwed up and have security on your tail? This handy syringe will give you a completely new identity \ and appearance." item = /obj/item/reagent_containers/syringe/mulligan - cost = 4 + cost = 3 surplus = 30 exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) @@ -1208,7 +1215,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) name = "Syndicate Sentience Potion" item = /obj/item/slimepotion/slime/sentience/nuclear desc = "A potion recovered at great risk by undercover syndicate operatives and then subsequently modified with syndicate technology. Using it will make any animal sentient, and bound to serve you, as well as implanting an internal radio for communication and an internal ID card for opening doors." - cost = 4 + cost = 2 include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) restricted = TRUE @@ -1382,6 +1389,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/dnainjector/clumsymut restricted_roles = list("Clown") +/datum/uplink_item/role_restricted/taeclowndo_shoes + name = "Tae-clown-do Shoes" + desc = "A pair of shoes for the most elite agents of the honkmotherland. They grant the mastery of taeclowndo with some honk-fu moves as long as they're worn." + cost = 14 + item = /obj/item/clothing/shoes/clown_shoes/taeclowndo + restricted_roles = list("Clown") + /datum/uplink_item/role_restricted/mimery name = "Guide to Advanced Mimery Series" desc = "The classical two part series on how to further hone your mime skills. Upon studying the series, the user should be able to make 3x1 invisible walls, and shoot bullets out of their fingers. Obviously only works for Mimes." @@ -1448,7 +1462,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) name = "Gold Toolbox" desc = "A gold planted plastitanium toolbox loaded with tools. Comes with a set of AI detection multi-tool and a pare of combat gloves." item = /obj/item/storage/toolbox/gold_real - cost = 5 // Has synda tools + gloves + a robust weapon + cost = 3 // Has synda tools + gloves + a robust weapon restricted_roles = list("Assistant", "Curator") //Curator do to being made of gold - It fits the theme /datum/uplink_item/role_restricted/brainwash_disk @@ -1457,7 +1471,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) Insert into an Operating Console to enable the procedure." item = /obj/item/disk/surgery/brainwashing restricted_roles = list("Medical Doctor") - cost = 5 + cost = 3 /datum/uplink_item/role_restricted/haunted_magic_eightball name = "Haunted Magic Eightball" diff --git a/html/changelogs/AutoChangeLog-pr-8434.yml b/html/changelogs/AutoChangeLog-pr-8434.yml new file mode 100644 index 0000000000..d01858d2b4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8434.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Stops pulls of resting mobs breaking off whenever you swap turfs with someone else because of crawling delays." diff --git a/html/changelogs/AutoChangeLog-pr-8436.yml b/html/changelogs/AutoChangeLog-pr-8436.yml new file mode 100644 index 0000000000..6d626bf357 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8436.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "bio mass meat" diff --git a/html/changelogs/AutoChangeLog-pr-8449.yml b/html/changelogs/AutoChangeLog-pr-8449.yml new file mode 100644 index 0000000000..c2c397cdd0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8449.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - tweak: "5->6" diff --git a/html/changelogs/AutoChangeLog-pr-8452.yml b/html/changelogs/AutoChangeLog-pr-8452.yml new file mode 100644 index 0000000000..2b4e430757 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8452.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - tweak: "mulligan costs 4 - > 3" diff --git a/html/changelogs/AutoChangeLog-pr-8453.yml b/html/changelogs/AutoChangeLog-pr-8453.yml new file mode 100644 index 0000000000..cda1843779 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8453.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - tweak: "Tuberculosis 12tc - > 8tc" diff --git a/html/changelogs/AutoChangeLog-pr-8459.yml b/html/changelogs/AutoChangeLog-pr-8459.yml new file mode 100644 index 0000000000..ebce2f0db1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8459.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - tweak: "2 < - 4" diff --git a/html/changelogs/AutoChangeLog-pr-8463.yml b/html/changelogs/AutoChangeLog-pr-8463.yml new file mode 100644 index 0000000000..a6c8d05522 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8463.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "shield + crafting" diff --git a/html/changelogs/AutoChangeLog-pr-8466.yml b/html/changelogs/AutoChangeLog-pr-8466.yml new file mode 100644 index 0000000000..a3cffc8f59 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8466.yml @@ -0,0 +1,4 @@ +author: "Poojawa" +delete-after: True +changes: + - bugfix: "Atmos and Station alerts should be more alerting." diff --git a/html/changelogs/AutoChangeLog-pr-8470.yml b/html/changelogs/AutoChangeLog-pr-8470.yml new file mode 100644 index 0000000000..39399c0724 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8470.yml @@ -0,0 +1,5 @@ +author: "Ghommie" +delete-after: True +changes: + - balance: "Buffs condensed capsaicin, a yet another feature previously dunked by stam combat." + - balance: "speeds up pepper spray puffs." diff --git a/html/changelogs/AutoChangeLog-pr-8473.yml b/html/changelogs/AutoChangeLog-pr-8473.yml new file mode 100644 index 0000000000..a4743c9a39 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8473.yml @@ -0,0 +1,10 @@ +author: "Useroth" +delete-after: True +changes: + - rscadd: "Taeclowndo shoes which grant the four following abilities: +- Conjuring a cream pie right into their hand. Every three seconds. +- Making a banana peel appear out of thin air at the tile of the clown's choice. Every ten seconds. +- Mega HoNk. A touch-ranged, very small AOE ability, with effect equal to being honked by a Honkerblast on a clown mech, with the effects halved for anyone who isn't its direct target. Every ten seconds. +- Bluespace Banana Pie. You don't throw this one... not right away at least. This baby can fit an entire body inside. Good for disposal of evidence. 25 second-long action, 45 second cooldown. Also produces a \"[victim's name] cream pie\". The body drops out of the pie if you splat it somewhere or destroy the pie. If you eat it, it will chestburst out of you a'la monkey cube. + +It's a 14 TC item for traitor clowns and a 12 TC item for clown-ops." diff --git a/html/changelogs/AutoChangeLog-pr-8477.yml b/html/changelogs/AutoChangeLog-pr-8477.yml new file mode 100644 index 0000000000..f5478ed178 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8477.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "Ported the zulie cloak and blackredgold coat donor items from RP." diff --git a/html/changelogs/AutoChangeLog-pr-8482.yml b/html/changelogs/AutoChangeLog-pr-8482.yml new file mode 100644 index 0000000000..095f93a7a3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8482.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "fixes eyestabbing people with cutlery while being a pacifist." diff --git a/html/changelogs/AutoChangeLog-pr-8485.yml b/html/changelogs/AutoChangeLog-pr-8485.yml new file mode 100644 index 0000000000..abc79f1f30 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8485.yml @@ -0,0 +1,5 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "More plushies" + - tweak: "attack verbs and descs" diff --git a/html/changelogs/AutoChangeLog-pr-8495.yml b/html/changelogs/AutoChangeLog-pr-8495.yml new file mode 100644 index 0000000000..92777ef8b0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8495.yml @@ -0,0 +1,4 @@ +author: "BurgerBB" +delete-after: True +changes: + - tweak: "\"Unwillingly\" eating food now sends a warning message instead of a notice. Unable to stuff food down your throat sends a danger message instead of a warning message." diff --git a/icons/mob/custom_w.dmi b/icons/mob/custom_w.dmi index 0c872625dd..dcb36e7b47 100644 Binary files a/icons/mob/custom_w.dmi and b/icons/mob/custom_w.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 3da5fc08e2..09d6fe5374 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index b518157bb5..0f3438dfc4 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index d905979c9c..8256c1fc07 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 8e0359e6b3..2cb473fb00 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi index 9a7d460e14..9faaf8f81a 100644 Binary files a/icons/obj/custom.dmi and b/icons/obj/custom.dmi differ diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi index 543d57ff56..655d37d4a6 100644 Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ diff --git a/icons/obj/plushes.dmi b/icons/obj/plushes.dmi index 7ca7b068b0..68c51bb4c8 100644 Binary files a/icons/obj/plushes.dmi and b/icons/obj/plushes.dmi differ diff --git a/modular_citadel/code/datums/traits/neutral.dm b/modular_citadel/code/datums/traits/neutral.dm index 264dbfef0a..05aeb27361 100644 --- a/modular_citadel/code/datums/traits/neutral.dm +++ b/modular_citadel/code/datums/traits/neutral.dm @@ -4,6 +4,7 @@ name = "Nymphomania" desc = "You're always feeling a bit in heat. Also, you get aroused faster than usual." value = 0 + mob_trait = TRAIT_NYMPHO gain_text = "You are feeling extra wild." lose_text = "You don't feel that burning sensation anymore." @@ -22,3 +23,11 @@ if(M.canbearoused == FALSE) to_chat(quirk_holder, "Having high libido is useless when you can't feel arousal at all!") qdel(src) + +/datum/quirk/maso + name = "Masochism" + desc = "You are aroused by pain." + value = 0 + mob_trait = TRAIT_MASO + gain_text = "You desire to be hurt." + lose_text = "Pain has become less exciting for you." diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index c0a4df2243..70f58b3159 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -373,4 +373,16 @@ datum/gear/darksabresheath name = "French Beret" category = SLOT_HEAD path = /obj/item/clothing/head/frenchberet - ckeywhitelist = list("notazoltan") \ No newline at end of file + ckeywhitelist = list("notazoltan") + +/datum/gear/zuliecloak + name = "Project: Zul-E" + category = SLOT_WEAR_SUIT + path = /obj/item/clothing/suit/hooded/cloak/zuliecloak + ckeywhitelist = list("asky") + +/datum/gear/blackredgold + name = "Black, Red, and Gold Coat" + category = SLOT_WEAR_SUIT + path = /obj/item/clothing/suit/blackredgold + ckeywhitelist = list("ttbnc") \ No newline at end of file diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index b7f7aea0e8..e1b1110cf8 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -454,3 +454,34 @@ icon_state = "moveralls" mutantrace_variation = NO_MUTANTRACE_VARIATION +/obj/item/clothing/suit/hooded/cloak/zuliecloak + name = "Project: Zul-E" + desc = "A standard version of a prototype cloak given out by Nanotrasen higher ups. It's surprisingly thick and heavy for a cloak despite having most of it's tech stripped. It also comes with a bluespace trinket which calls it's accompanying hat onto the user. A worn inscription on the inside of the cloak reads 'Fleuret' ...the rest is faded away." + icon_state = "zuliecloak" + item_state = "zuliecloak" + icon = 'icons/obj/custom.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' + hoodtype = /obj/item/clothing/head/hooded/cloakhood/zuliecloak + body_parts_covered = CHEST|GROIN|ARMS + slot_flags = SLOT_WEAR_SUIT | ITEM_SLOT_NECK //it's a cloak. it's cosmetic. so why the hell not? what could possibly go wrong? + mutantrace_variation = NO_MUTANTRACE_VARIATION + +/obj/item/clothing/head/hooded/cloakhood/zuliecloak + name = "NT Special Issue" + desc = "This hat is unquestionably the best one, bluespaced to and from CentComm. It smells of Fish and Tea with a hint of antagonism" + icon_state = "zuliecap" + item_state = "zuliecap" + icon = 'icons/obj/custom.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' + flags_inv = HIDEEARS|HIDEHAIR + mutantrace_variation = NO_MUTANTRACE_VARIATION + +/obj/item/clothing/suit/blackredgold + name = "Multicolor Coat" + desc = "An oddly special looking coat with black, red, and gold" + icon = 'icons/obj/custom.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' + icon_state = "redgoldjacket" + item_state = "redgoldjacket" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + mutantrace_variation = NO_MUTANTRACE_VARIATION \ No newline at end of file diff --git a/modular_citadel/icons/mob/muzzled_helmet.dmi b/modular_citadel/icons/mob/muzzled_helmet.dmi index e1284679b3..a96f18c3ce 100644 Binary files a/modular_citadel/icons/mob/muzzled_helmet.dmi and b/modular_citadel/icons/mob/muzzled_helmet.dmi differ diff --git a/modular_citadel/icons/mob/suit_digi.dmi b/modular_citadel/icons/mob/suit_digi.dmi index c19fb01161..1f1f506d9f 100644 Binary files a/modular_citadel/icons/mob/suit_digi.dmi and b/modular_citadel/icons/mob/suit_digi.dmi differ diff --git a/modular_citadel/icons/mob/taur_naga.dmi b/modular_citadel/icons/mob/taur_naga.dmi index f4d6a6139f..1ca4509db7 100644 Binary files a/modular_citadel/icons/mob/taur_naga.dmi and b/modular_citadel/icons/mob/taur_naga.dmi differ diff --git a/tgstation.dme b/tgstation.dme index fe53839289..cbbec7f02d 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1496,6 +1496,7 @@ #include "code\modules\clothing\shoes\colour.dm" #include "code\modules\clothing\shoes\magboots.dm" #include "code\modules\clothing\shoes\miscellaneous.dm" +#include "code\modules\clothing\shoes\taeclowndo.dm" #include "code\modules\clothing\shoes\vg_shoes.dm" #include "code\modules\clothing\spacesuits\_spacesuits.dm" #include "code\modules\clothing\spacesuits\chronosuit.dm" @@ -2663,6 +2664,7 @@ #include "code\modules\spells\spell_types\shapeshift.dm" #include "code\modules\spells\spell_types\spacetime_distortion.dm" #include "code\modules\spells\spell_types\summonitem.dm" +#include "code\modules\spells\spell_types\taeclowndo.dm" #include "code\modules\spells\spell_types\the_traps.dm" #include "code\modules\spells\spell_types\touch_attacks.dm" #include "code\modules\spells\spell_types\trigger.dm"