81ce777ec2
- I renamed some vars of datum/hud to be more selfexplanatory
- Moved all datum/hud mob code into the hud folder.
- fixed alien's zone selection button not using the correct sprites.
- I removed the update_hud() proc (that needed to be removed).
- Fixed a typo in /mob/living/carbon/ContractDisease , using "internals" instead of "internal" (very different things)
- Fixed doTeleport() calling Entered() twice on the destination area.
- To reference a mob's selected zone, you now use a direct mob var ("H.zone_selected" instead of "H.zone_sel.selecting")
- mobs lose certain screen objects var ("healths", "zone_sel", "internals", etc) which are now vars of the mob's datum/hud instead.
- the Blind spell is now done via the blind mutation instead of the blind disabilities.
- Give to mobs a version of forceMove(), so the mob is always properly unbuckled, his pull stopped, his vision updated, etc.
- The "user" var of mob/camera/aiEye/remote is renamed to "eye_user" to avoid confusion.
- reset_view() is replaced by reset_perspective(). Now all changes to client.eye and client.perspective are done with this proc.
- I reworked /obj/machinery/computer/security code, changing camera is instantaneous now, as well as cancelling.
- I reworked /obj/machinery/computer/camera_advanced code as well.
- I changed /obj/item/mecha_parts/mecha_equipment/mining_scanner's meson view to be constant instead of by intermittent.
- Fixes not being able to use /obj/item/device/camera_bug while buckled.
- removed admin_forcemove() proc, admin force moving now uses forceMove() simply.
- Removed the client var "adminobs"
- Added var/vision_correction to glasses.
- Added a thermal_overload() proc for glasses, to remove copypasta in emp_act code.
- Remove the hal_crit mob var
- We no longer delete the mob's hud everytime he logs in.
- Added a stat == dead check in mob's metabolize() so we immediately stop metabolizing if one of the chem kills the mob.
- Being inside disposal bin lowers your vision, like wearing a welding helmet.
- removed the remote_view mob var.
- I changed advanced camera EYE, some fixes, removed unnecessary code when the eye moves, now the mob client eye properly follows the camera mob.
- fixes mob var "machine" not being nullified on logout.
- larva/death() was calling two "living_mob_list -= src"
- I made the Blind screen objects into a global_hud instead of giving one to each mob (like damage overlay).
- I untied tint and eye_blind, TINT_BLIND doesn't give you eye_blind=1.
- gave a visual overlay when inside locker (vimpaired)
- when inside disposal/gas pipes you get sight |= (BLIND|SEE_TURFS)
- glasses toggling updates (atmos meson toggle): DONE
- The new adjust procs serve to properly change eye_blind etc and call vision update procs when needed.
- I added an on_unset_machine() proc to handle perspective reset for camera consoles.
- I moved consequences of eye_check fail inside eye_check() procs themselves.
- I fixed vision updates being fucked by forceMove, especially pipe vision.
- I decided that damage overlay not appearing when dead.
- mob's hud_used is no longer deleted on each login()
- I refactored mob huds a bit, creating subtypes for each mob (/datum/hud/human)
- f12's hud toggling is now available to all mobs
- gave borgs a low_power_mode var so unpowered borg do not use stat= UNCONSCIOUS (which made things weird since you were unconscious but not blind)
- Fixed double Area entering when forced teleporting.
- I fixed larva pulling not being broken when cuffing them, and larva not seeing handcuff alert (and they can resist by clicking it)
- I removed pull updates from life() since it onyl checked for puller's incapacitation.
- I renamed camera/deactivate() to toggle_cam() to be more accurate.
- I fixed mmi brain being immortal (by removing the brain and putting it back)
- I simplified mmi brain emp damage.
135 lines
4.9 KiB
Plaintext
135 lines
4.9 KiB
Plaintext
/* Clown Items
|
|
* Contains:
|
|
* Soap
|
|
* Bike Horns
|
|
* Air Horns
|
|
*/
|
|
|
|
/*
|
|
* Soap
|
|
*/
|
|
|
|
/obj/item/weapon/soap
|
|
name = "soap"
|
|
desc = "A cheap bar of soap. Doesn't smell."
|
|
gender = PLURAL
|
|
icon = 'icons/obj/items.dmi'
|
|
icon_state = "soap"
|
|
w_class = 1
|
|
throwforce = 0
|
|
throw_speed = 3
|
|
throw_range = 7
|
|
var/cleanspeed = 50 //slower than mop
|
|
|
|
/obj/item/weapon/soap/nanotrasen
|
|
desc = "A Nanotrasen brand bar of soap. Smells of plasma."
|
|
icon_state = "soapnt"
|
|
|
|
/obj/item/weapon/soap/homemade
|
|
desc = "A homemade bar of soap. Smells of... well...."
|
|
icon_state = "soapgibs"
|
|
cleanspeed = 45 // a little faster to reward chemists for going to the effort
|
|
|
|
/obj/item/weapon/soap/deluxe
|
|
desc = "A deluxe Waffle Co. brand bar of soap. Smells of high-class luxury."
|
|
icon_state = "soapdeluxe"
|
|
cleanspeed = 40 //same speed as mop because deluxe -- captain gets one of these
|
|
|
|
/obj/item/weapon/soap/syndie
|
|
desc = "An untrustworthy bar of soap made of strong chemical agents that dissolve blood faster."
|
|
icon_state = "soapsyndie"
|
|
cleanspeed = 10 //much faster than mop so it is useful for traitors who want to clean crime scenes
|
|
|
|
/obj/item/weapon/soap/suicide_act(mob/user)
|
|
user.say(";FFFFFFFFFFFFFFFFUUUUUUUDGE!!")
|
|
user.visible_message("<span class='suicide'>[user] lifts the [src.name] to their mouth and gnaws on it furiously, producing a thick froth! They'll never get that BB gun now!")
|
|
PoolOrNew(/obj/effect/particle_effect/foam, loc)
|
|
return (TOXLOSS)
|
|
|
|
/obj/item/weapon/soap/Crossed(AM as mob|obj)
|
|
if (istype(AM, /mob/living/carbon))
|
|
var/mob/living/carbon/M = AM
|
|
M.slip(4, 2, src)
|
|
|
|
/obj/item/weapon/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 << "<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))
|
|
user << "<span class='notice'>You scrub \the [target.name] out.</span>"
|
|
qdel(target)
|
|
else if(ishuman(target) && 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
|
|
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))
|
|
user << "<span class='notice'>You clean \the [target.name].</span>"
|
|
target.color = initial(target.color)
|
|
target.SetOpacity(initial(target.opacity))
|
|
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))
|
|
user << "<span class='notice'>You clean \the [target.name].</span>"
|
|
var/obj/effect/decal/cleanable/C = locate() in target
|
|
qdel(C)
|
|
target.clean_blood()
|
|
return
|
|
|
|
|
|
/*
|
|
* Bike Horns
|
|
*/
|
|
|
|
|
|
/obj/item/weapon/bikehorn
|
|
name = "bike horn"
|
|
desc = "A horn off of a bicycle."
|
|
icon = 'icons/obj/items.dmi'
|
|
icon_state = "bike_horn"
|
|
item_state = "bike_horn"
|
|
throwforce = 0
|
|
hitsound = null //To prevent tap.ogg playing, as the item lacks of force
|
|
w_class = 1
|
|
throw_speed = 3
|
|
throw_range = 7
|
|
attack_verb = list("HONKED")
|
|
var/spam_flag = 0
|
|
var/honksound = 'sound/items/bikehorn.ogg'
|
|
var/cooldowntime = 20
|
|
|
|
/obj/item/weapon/bikehorn/suicide_act(mob/user)
|
|
user.visible_message("<span class='suicide'>[user] solemnly points the horn at \his temple! It looks like \he's trying to commit suicide..</span>")
|
|
playsound(src.loc, honksound, 50, 1)
|
|
return (BRUTELOSS)
|
|
|
|
/obj/item/weapon/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
|
|
if(!spam_flag)
|
|
playsound(loc, honksound, 50, 1, -1) //plays instead of tap.ogg!
|
|
return ..()
|
|
|
|
/obj/item/weapon/bikehorn/attack_self(mob/user)
|
|
if(!spam_flag)
|
|
spam_flag = 1
|
|
playsound(src.loc, honksound, 50, 1)
|
|
src.add_fingerprint(user)
|
|
spawn(cooldowntime)
|
|
spam_flag = 0
|
|
return
|
|
|
|
/obj/item/weapon/bikehorn/Crossed(mob/living/L)
|
|
if(isliving(L))
|
|
playsound(loc, honksound, 50, 1, -1)
|
|
..()
|
|
|
|
/obj/item/weapon/bikehorn/airhorn
|
|
name = "air horn"
|
|
desc = "Damn son, where'd you find this?"
|
|
icon_state = "air_horn"
|
|
honksound = 'sound/items/AirHorn2.ogg'
|
|
cooldowntime = 50 |