mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-20 22:16:51 +00:00
cl Floyd / Qustinnus tweak: You now have to be naked to get the nice shower moodlet, if you shower with clothes you get a bad moodie add: Hygiene, you slowly become dirty over time, the more covered in blood you are the faster you will lose hygiene. When you are too dirty you will have a stink overlay. (Hygiene doesn't affect mood currently) It also spawns miasma slowly if you smell like shit. add: adds NEET and neat traits. NEET's get 20 bucks social welfare extra and like being unhygienic, while neat people dislike being unhygienic and like being hygienic /cl This doesn't affect mood so plssss dont strawman in this PR about how I'm forcing you to shower or die or whatever This PR is mostly visual and will allow for people to judge others for literaly being smelly as hell. also NEET and neat traits which interact with being smelly. (neat likes hygiene, dislikes lack of it. NEETs like lack of hygiene and get some social welfare (20 bucks))
211 lines
7.8 KiB
Plaintext
211 lines
7.8 KiB
Plaintext
/* Clown Items
|
|
* Contains:
|
|
* Soap
|
|
* Bike Horns
|
|
* Air Horns
|
|
* Canned Laughter
|
|
*/
|
|
|
|
/*
|
|
* Soap
|
|
*/
|
|
|
|
/obj/item/soap
|
|
name = "soap"
|
|
desc = "A cheap bar of soap. Doesn't smell."
|
|
gender = PLURAL
|
|
icon = 'icons/obj/items_and_weapons.dmi'
|
|
icon_state = "soap"
|
|
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
|
|
w_class = WEIGHT_CLASS_TINY
|
|
item_flags = NOBLUDGEON
|
|
throwforce = 0
|
|
throw_speed = 3
|
|
throw_range = 7
|
|
grind_results = list("lye" = 10)
|
|
var/cleanspeed = 35 //slower than mop
|
|
force_string = "robust... against germs"
|
|
var/uses = 100
|
|
|
|
/obj/item/soap/Initialize()
|
|
. = ..()
|
|
AddComponent(/datum/component/slippery, 80)
|
|
|
|
/obj/item/soap/examine(mob/user)
|
|
. = ..()
|
|
var/max_uses = initial(uses)
|
|
var/msg = "It looks like it just came out of the package."
|
|
if(uses != max_uses)
|
|
var/percentage_left = uses / max_uses
|
|
switch(percentage_left)
|
|
if(0 to 14)
|
|
msg = "There's just a tiny bit left of what it used to be, you're not sure it'll last much longer."
|
|
if(15 to 29)
|
|
msg = "It's dissolved quite a bit, but there's still some life to it."
|
|
if(30 to 49)
|
|
msg = "It's past its prime, but it's definitely still good."
|
|
if(50 to 74)
|
|
msg = "It's started to get a little smaller than it used to be, but it'll definitely still last for a while."
|
|
else
|
|
msg = "It's seen some light use, but it's still pretty fresh."
|
|
to_chat(user, "<span class='notice'>[msg]</span>")
|
|
|
|
/obj/item/soap/nanotrasen
|
|
desc = "A heavy duty bar of Nanotrasen brand soap. Smells of plasma."
|
|
grind_results = list("plasma" = 10, "lye" = 10)
|
|
icon_state = "soapnt"
|
|
cleanspeed = 28 //janitor gets this
|
|
uses = 300
|
|
|
|
/obj/item/soap/homemade
|
|
desc = "A homemade bar of soap. Smells of... well...."
|
|
icon_state = "soapgibs"
|
|
cleanspeed = 30 // faster to reward chemists for going to the effort
|
|
|
|
/obj/item/soap/deluxe
|
|
desc = "A deluxe Waffle Co. brand bar of soap. Smells of high-class luxury."
|
|
icon_state = "soapdeluxe"
|
|
cleanspeed = 20 //captain gets one of these
|
|
|
|
/obj/item/soap/syndie
|
|
desc = "An untrustworthy bar of soap made of strong chemical agents that dissolve blood faster."
|
|
icon_state = "soapsyndie"
|
|
cleanspeed = 5 //faster than mop so it is useful for traitors who want to clean crime scenes
|
|
|
|
/obj/item/soap/suicide_act(mob/user)
|
|
user.say(";FFFFFFFFFFFFFFFFUUUUUUUDGE!!", forced="soap suicide")
|
|
user.visible_message("<span class='suicide'>[user] lifts [src] to [user.p_their()] mouth and gnaws on it furiously, producing a thick froth! [user.p_they(TRUE)]'ll never get that BB gun now!</span>")
|
|
new /obj/effect/particle_effect/foam(loc)
|
|
return (TOXLOSS)
|
|
|
|
/obj/item/soap/proc/decreaseUses(mob/user)
|
|
uses--
|
|
if(uses <= 0)
|
|
to_chat(user, "<span class='warning'>[src] crumbles into tiny bits!</span>")
|
|
qdel(src)
|
|
|
|
/obj/item/soap/afterattack(atom/target, mob/user, proximity)
|
|
. = ..()
|
|
if(!proximity || !check_allowed_items(target))
|
|
return
|
|
//I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing.
|
|
//So this is a workaround. This also makes more sense from an IC standpoint. ~Carn
|
|
if(user.client && ((target in user.client.screen) && !user.is_holding(target)))
|
|
to_chat(user, "<span class='warning'>You need to take that [target.name] off before cleaning it!</span>")
|
|
else if(istype(target, /obj/effect/decal/cleanable))
|
|
user.visible_message("[user] begins to scrub \the [target.name] out with [src].", "<span class='warning'>You begin to scrub \the [target.name] out with [src]...</span>")
|
|
if(do_after(user, src.cleanspeed, target = target))
|
|
to_chat(user, "<span class='notice'>You scrub \the [target.name] out.</span>")
|
|
qdel(target)
|
|
decreaseUses(user)
|
|
|
|
else if(ishuman(target) && user.zone_selected == BODY_ZONE_PRECISE_MOUTH)
|
|
var/mob/living/carbon/human/H = user
|
|
if(user.zone_selected == "mouth")
|
|
user.visible_message("<span class='warning'>\the [user] washes \the [target]'s mouth out with [src.name]!</span>", "<span class='notice'>You wash \the [target]'s mouth out with [src.name]!</span>") //washes mouth out with soap sounds better than 'the soap' here
|
|
H.lip_style = null //removes lipstick
|
|
H.adjust_hygiene(5) //it kinda works i guess
|
|
else
|
|
user.visible_message("<span class='warning'>\the [user] washes \the [target] with [src.name]!</span>", "<span class='notice'>You wash \the [target] with [src.name]!</span>")
|
|
H.adjust_hygiene(20)
|
|
H.update_body()
|
|
decreaseUses(user)
|
|
return
|
|
else if(istype(target, /obj/structure/window))
|
|
user.visible_message("[user] begins to clean \the [target.name] with [src]...", "<span class='notice'>You begin to clean \the [target.name] with [src]...</span>")
|
|
if(do_after(user, src.cleanspeed, target = target))
|
|
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
|
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
|
target.set_opacity(initial(target.opacity))
|
|
decreaseUses(user)
|
|
else
|
|
user.visible_message("[user] begins to clean \the [target.name] with [src]...", "<span class='notice'>You begin to clean \the [target.name] with [src]...</span>")
|
|
if(do_after(user, src.cleanspeed, target = target))
|
|
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
|
for(var/obj/effect/decal/cleanable/C in target)
|
|
qdel(C)
|
|
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
|
SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
|
|
target.wash_cream()
|
|
decreaseUses(user)
|
|
return
|
|
|
|
|
|
/*
|
|
* Bike Horns
|
|
*/
|
|
|
|
/obj/item/bikehorn
|
|
name = "bike horn"
|
|
desc = "A horn off of a bicycle."
|
|
icon = 'icons/obj/items_and_weapons.dmi'
|
|
icon_state = "bike_horn"
|
|
item_state = "bike_horn"
|
|
lefthand_file = 'icons/mob/inhands/equipment/horns_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/horns_righthand.dmi'
|
|
throwforce = 0
|
|
hitsound = null //To prevent tap.ogg playing, as the item lacks of force
|
|
w_class = WEIGHT_CLASS_TINY
|
|
throw_speed = 3
|
|
throw_range = 7
|
|
attack_verb = list("HONKED")
|
|
|
|
/obj/item/bikehorn/Initialize()
|
|
. = ..()
|
|
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50)
|
|
|
|
/obj/item/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
|
|
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "honk", /datum/mood_event/honk)
|
|
return ..()
|
|
|
|
/obj/item/bikehorn/suicide_act(mob/user)
|
|
user.visible_message("<span class='suicide'>[user] solemnly points [src] at [user.p_their()] temple! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
|
playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE)
|
|
return (BRUTELOSS)
|
|
|
|
//air horn
|
|
/obj/item/bikehorn/airhorn
|
|
name = "air horn"
|
|
desc = "Damn son, where'd you find this?"
|
|
icon_state = "air_horn"
|
|
|
|
/obj/item/bikehorn/airhorn/Initialize()
|
|
. = ..()
|
|
AddComponent(/datum/component/squeak, list('sound/items/airhorn2.ogg'=1), 50)
|
|
|
|
//golden bikehorn
|
|
/obj/item/bikehorn/golden
|
|
name = "golden bike horn"
|
|
desc = "Golden? Clearly, it's made with bananium! Honk!"
|
|
icon_state = "gold_horn"
|
|
item_state = "gold_horn"
|
|
var/flip_cooldown = 0
|
|
|
|
/obj/item/bikehorn/golden/attack()
|
|
if(flip_cooldown < world.time)
|
|
flip_mobs()
|
|
return ..()
|
|
|
|
/obj/item/bikehorn/golden/attack_self(mob/user)
|
|
if(flip_cooldown < world.time)
|
|
flip_mobs()
|
|
..()
|
|
|
|
/obj/item/bikehorn/golden/proc/flip_mobs(mob/living/carbon/M, mob/user)
|
|
var/turf/T = get_turf(src)
|
|
for(M in ohearers(7, T))
|
|
if(ishuman(M) && M.can_hear())
|
|
var/mob/living/carbon/human/H = M
|
|
if(istype(H.ears, /obj/item/clothing/ears/earmuffs))
|
|
continue
|
|
M.emote("flip")
|
|
flip_cooldown = world.time + 7
|
|
|
|
//canned laughter
|
|
/obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter
|
|
name = "Canned Laughter"
|
|
desc = "Just looking at this makes you want to giggle."
|
|
icon_state = "laughter"
|
|
list_reagents = list("laughter" = 50)
|