diff --git a/code/__DEFINES/items.dm b/code/__DEFINES/items.dm index e288b79ab3d..fc77321aa8f 100644 --- a/code/__DEFINES/items.dm +++ b/code/__DEFINES/items.dm @@ -94,6 +94,7 @@ #define GUN_UPGRADE_SILENCER "silencable" #define GUN_UPGRADE_FORCESAFETY "safety force" #define GUN_UPGRADE_HONK "why" +#define GUN_UPGRADE_DUCK "bonus duck" #define GUN_UPGRADE_FULLAUTO "full auto" #define GUN_UPGRADE_EXPLODE "self destruct" #define GUN_UPGRADE_RIGGED "rigged" diff --git a/code/__DEFINES/items_clothing.dm b/code/__DEFINES/items_clothing.dm index 9307631403e..ee1703cfac7 100644 --- a/code/__DEFINES/items_clothing.dm +++ b/code/__DEFINES/items_clothing.dm @@ -70,6 +70,7 @@ #define LOUD 0x80 // Loud as hell tools #define HONKING 0x100 // Honking tools #define MOVE_NOTIFY 0x200 // Call entered_with_container() on this item when mob containing it moves +#define DUCKING 0x400 // Quacking tools //Flags for items (equipment) #define THICKMATERIAL 0x1 // Prevents syringes, parapens and hyposprays if equiped to slot_suit or slot_head. diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index d13d914797d..ff350e5851a 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -138,6 +138,7 @@ var/list/outfits_decls_by_type_ H.put_in_l_hand(new l_hand(H)) if(r_hand) H.put_in_r_hand(new r_hand(H)) + H.equip_to_slot_or_store_or_drop(new /obj/item/bikehorn/rubberducky(H)) if((flags & OUTFIT_HAS_BACKPACK) && !(OUTFIT_ADJUSTMENT_SKIP_BACKPACK & equip_adjustments)) var/decl/backpack_outfit/bo diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 0f5fa123f73..2def6fd4b8f 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1093,6 +1093,9 @@ There are 9 wires. if (istype(T) && T.item_flags & HONKING) playsound(loc, WORKSOUND_HONK, 70, 1, -2) + if (istype(T) && T.item_flags & DUCKING) + playsound(loc, 'sound/items/duck.ogg', 70, 1, -2) + if(closeOther != null && istype(closeOther, /obj/machinery/door/airlock/) && !closeOther.density) closeOther.close() return ..() @@ -1232,6 +1235,10 @@ There are 9 wires. var/obj/item/tool/T = forced if (istype(T) && T.item_flags & HONKING) playsound(src.loc, WORKSOUND_HONK, 70, 1, -2) + + else if (istype(T) && T.item_flags & DUCKING) + playsound(loc, 'sound/items/duck.ogg', 70, 1, -2) + ..() diff --git a/code/game/machinery/doors/holy_door.dm b/code/game/machinery/doors/holy_door.dm index 11d2bdf1919..0a6fe4a6011 100644 --- a/code/game/machinery/doors/holy_door.dm +++ b/code/game/machinery/doors/holy_door.dm @@ -247,6 +247,8 @@ var/obj/item/tool/T = forced if (istype(T) && T.item_flags & HONKING) playsound(loc, WORKSOUND_HONK, 70, 1, -2) + else if (istype(T) && T.item_flags & DUCKING) + playsound(loc, 'sound/items/duck.ogg', 70, 1, -2) else if (istype(T) && T.item_flags & SILENT) playsound(loc, open_sound_unpowered, 3, 1, -5) else if (istype(T) && T.item_flags & LOUD) @@ -308,6 +310,8 @@ var/obj/item/tool/T = forced if (istype(T) && T.item_flags & HONKING) playsound(loc, WORKSOUND_HONK, 70, 1, -2) + else if (istype(T) && T.item_flags & DUCKING) + playsound(loc, 'sound/items/duck.ogg', 70, 1, -2) else if (istype(T) && T.item_flags & SILENT) playsound(loc, open_sound_unpowered, 3, 1, -5) else if (istype(T) && T.item_flags & LOUD) diff --git a/code/game/objects/items/weapons/tools/_tools.dm b/code/game/objects/items/weapons/tools/_tools.dm index 84553c2a515..352a52a3d68 100644 --- a/code/game/objects/items/weapons/tools/_tools.dm +++ b/code/game/objects/items/weapons/tools/_tools.dm @@ -385,6 +385,8 @@ var/soundfile if(T && T.item_flags & HONKING) soundfile = WORKSOUND_HONK + else if (istype(T) && T.item_flags & DUCKING) + soundfile = 'sound/items/duck.ogg' else if(forced_sound) soundfile = forced_sound else diff --git a/code/game/objects/items/weapons/tools/mods/_upgrades.dm b/code/game/objects/items/weapons/tools/mods/_upgrades.dm index de7453f9590..51cc01511d1 100644 --- a/code/game/objects/items/weapons/tools/mods/_upgrades.dm +++ b/code/game/objects/items/weapons/tools/mods/_upgrades.dm @@ -359,6 +359,8 @@ G.proj_damage_adjust[PSY] += weapon_upgrades[GUN_UPGRADE_DAMAGE_PSY] if(weapon_upgrades[GUN_UPGRADE_HONK]) G.fire_sound = 'sound/items/bikehorn.ogg' + if(weapon_upgrades[GUN_UPGRADE_DUCK]) + G.fire_sound = 'sound/items/duck.ogg' if(weapon_upgrades[GUN_UPGRADE_RIGGED]) G.rigged = TRUE if(weapon_upgrades[GUN_UPGRADE_FOREGRIP]) @@ -636,6 +638,9 @@ if(weapon_upgrades[GUN_UPGRADE_HONK]) reference.Add(SPAN_WARNING("Cheers up the firing sound of the weapon.")) + if(weapon_upgrades[GUN_UPGRADE_DUCK]) + reference.Add(SPAN_WARNING("Blesses the firing sound of the weapon with duck magic.")) + if(weapon_upgrades[GUN_UPGRADE_RIGGED]) reference.Add(SPAN_WARNING("Rigs the weapon to fire back on its user.")) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 1caf052ade5..6beec554402 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -357,6 +357,17 @@ icon = 'icons/obj/watercloset.dmi' icon_state = "rubberducky" item_state = "rubberducky" + attack_verb = list("QUACKED") + +/obj/item/bikehorn/rubberducky/New() + ..() + var/datum/component/item_upgrade/I = GetComponent(/datum/component/item_upgrade) + I.tool_upgrades[UPGRADE_ITEMFLAGPLUS] = DUCKING + I.weapon_upgrades[GUN_UPGRADE_DUCK] = TRUE + +/obj/item/bikehorn/rubberducky/attack_self(mob/user) + playsound(loc, 'sound/items/duck.ogg', 50, 1) + add_fingerprint(user) diff --git a/code/modules/mob/living/carbon/human/species/station/skeleton.dm b/code/modules/mob/living/carbon/human/species/station/skeleton.dm index 7e042ec0fc9..36e669664f3 100644 --- a/code/modules/mob/living/carbon/human/species/station/skeleton.dm +++ b/code/modules/mob/living/carbon/human/species/station/skeleton.dm @@ -30,7 +30,7 @@ single_gib_type = /obj/effect/decal/cleanable/ash remains_type = /obj/item/remains/human - lower_sanity_process = FALSE +// lower_sanity_process = FALSE cold_level_1 = -1 cold_level_2 = -1 @@ -58,7 +58,7 @@ BP_R_LEG = new /datum/organ_description/leg/right/skeletal ) - spawn_flags = IS_RESTRICTED +// spawn_flags = IS_RESTRICTED /datum/species/skeleton/get_random_name() return "skeletal remains" diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index cee4bf2988a..b3127d15590 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -426,6 +426,8 @@ new_character.regenerate_icons() new_character.key = key//Manually transfer the key to log them in new_character.client.init_verbs() + if(prob(80) && !is_neotheology_disciple(new_character)) + new_character.set_species(SPECIES_SKELETON) return new_character diff --git a/code/modules/organs/internal/bones.dm b/code/modules/organs/internal/bones.dm index af3c5e340c0..6bd43b2fa9f 100644 --- a/code/modules/organs/internal/bones.dm +++ b/code/modules/organs/internal/bones.dm @@ -11,7 +11,7 @@ /obj/item/organ/internal/bone/Initialize() . = ..() - src.transform *= 0.5 // this little trick makes bone size small while keeping detail level of 32x32 bones. +// src.transform *= 0.5 // this little trick makes bone size small while keeping detail level of 32x32 bones. WELL NOT ANYMORE >:3 /// Bones can be repaired after being destroyed. It's not ideal to have this here instead of in the parent (checking for bone efficiencies), but there are fewer corner cases this way. /obj/item/organ/internal/bone/die() diff --git a/code/modules/organs/organ_description.dm b/code/modules/organs/organ_description.dm index 98c35a16c28..567098507e8 100644 --- a/code/modules/organs/organ_description.dm +++ b/code/modules/organs/organ_description.dm @@ -202,42 +202,42 @@ name = "ribcage" max_damage = 20 min_broken_damage = 5 - max_volume = 1 +// max_volume = 1 default_type = /obj/item/organ/external/skeletal/chest /datum/organ_description/groin/skeletal name = "pelvis" max_damage = 20 min_broken_damage = 5 - max_volume = 1 +// max_volume = 1 default_type = /obj/item/organ/external/skeletal/groin /datum/organ_description/head/skeletal max_damage = 20 min_broken_damage = 5 - max_volume = 1 +// max_volume = 1 default_type = /obj/item/organ/external/skeletal/head /datum/organ_description/arm/left/skeletal max_damage = 20 min_broken_damage = 5 - max_volume = 1 +// max_volume = 1 default_type = /obj/item/organ/external/skeletal /datum/organ_description/arm/right/skeletal max_damage = 20 min_broken_damage = 5 - max_volume = 1 +// max_volume = 1 default_type = /obj/item/organ/external/skeletal /datum/organ_description/leg/left/skeletal max_damage = 20 min_broken_damage = 5 - max_volume = 1 +// max_volume = 1 default_type = /obj/item/organ/external/skeletal /datum/organ_description/leg/right/skeletal max_damage = 20 min_broken_damage = 5 - max_volume = 1 +// max_volume = 1 default_type = /obj/item/organ/external/skeletal diff --git a/code/modules/reagents/reagents/food-Drinks.dm b/code/modules/reagents/reagents/food-Drinks.dm index b108365cba4..6fa4d93a9ed 100644 --- a/code/modules/reagents/reagents/food-Drinks.dm +++ b/code/modules/reagents/reagents/food-Drinks.dm @@ -592,6 +592,10 @@ M.heal_organ_damage(0.05 * effect_multiplier, 0) holder.remove_reagent("capsaicin", 1 * effect_multiplier) +/datum/reagent/drink/milk/affect_blood(mob/living/carbon/M, alien, effect_multiplier) + ..() + M.add_chemical_effect(CE_BONE_MEND, 100 * effect_multiplier) + /datum/reagent/drink/milk/cream name = "Cream" id = "cream" diff --git a/sound/items/duck.ogg b/sound/items/duck.ogg new file mode 100644 index 00000000000..a7c7a51b2e3 Binary files /dev/null and b/sound/items/duck.ogg differ